mvframe 1.0.72 → 1.0.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.cn.md CHANGED
@@ -19,6 +19,7 @@
19
19
  - `"."` → `dist/index.js`(主插件,默认导出 `install` 函数)
20
20
  - `"./composition"` → `dist/composition.js`(`import { useMap, … } from 'mvframe/composition'`)
21
21
  - `"./store"`、`"./directive"`、`"./util"` → 对应 `dist` 下分包
22
+ - `"./notify"` → `dist/notify.js`(浏览器端请求本地 `mvframe-notify` 服务的通知 helper)
22
23
  - `"./style"` → `dist/css/style.css`(由 `src/style/index.scss` 单独入口打包的全量工具类/变量)
23
24
  - `"./style/cpt"` → `dist/css/cpt.css`(随组件抽取的样式;一般用 `mvframe/style` 即可)
24
25
 
@@ -153,6 +154,59 @@ yarn build
153
154
 
154
155
  ---
155
156
 
157
+ ## 钉钉通知服务
158
+
159
+ MVFrame 提供只支持钉钉机器人的本地 Node 服务,命令由框架包提供:
160
+
161
+ ```bash
162
+ # 仅启动钉钉通知服务
163
+ yarn notify
164
+ # 或发布包命令
165
+ yarn exec mvframe-notify
166
+
167
+ # 同时启动 yarn dev 与通知服务
168
+ yarn d
169
+ # 或发布包命令
170
+ yarn exec mvframe-d
171
+ ```
172
+
173
+ 服务读取宿主项目根目录的 `.env.mvframe-notify`(可用 `--env` 指定):
174
+
175
+ ```env
176
+ MVFRAME_NOTIFY_PORT=3300
177
+ MVFRAME_NOTIFY_HOST=127.0.0.1
178
+ MVFRAME_NOTIFY_TOKEN=
179
+ DINGTALK_WEBHOOK="https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx"
180
+ DINGTALK_SECRET="SECxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
181
+ ```
182
+
183
+ 浏览器端只配置本地服务地址和访问 token:
184
+
185
+ ```js
186
+ app.use(mvframe, {
187
+ config: {
188
+ notify: {
189
+ enabled: true,
190
+ endpoint: import.meta.env.VITE_MVFRAME_NOTIFY_ENDPOINT || "http://127.0.0.1:3300",
191
+ token: import.meta.env.VITE_MVFRAME_NOTIFY_TOKEN || "",
192
+ },
193
+ },
194
+ });
195
+ ```
196
+
197
+ 发送消息:
198
+
199
+ ```js
200
+ await globalThis.$notify.send("需要发送到钉钉的消息");
201
+
202
+ import { notify } from "mvframe/notify";
203
+ await notify("需要发送到钉钉的消息");
204
+ ```
205
+
206
+ 钉钉 webhook / secret 必须留在 Node 服务环境变量里,不要写进 `main.js`、`src/config/index.js` 或其它会被 Vite 打包到浏览器的文件。
207
+
208
+ ---
209
+
156
210
  ## 设计取向与注意
157
211
 
158
212
  - 布局、路由守卫、Tab、菜单等 **强绑定一套交互模型**;深度定制时可局部 fork `src/router`、`src/store/tab.js` 或外层包一层封装。
@@ -163,7 +217,7 @@ yarn build
163
217
 
164
218
  ## 命令行:项目目录雏形(推荐)
165
219
 
166
- 在**空目录或已有 Vite 工程根目录**执行,生成 `src/views`、`src/component`、`src/api`、`src/assets/img`、`src/assets/style`、`src/router`、`src/pinia/chip`、`src/config` 及示例 `main.js` / `App.vue`(已 `app.use(mvframe, …)` 挂好路由、Pinia `storeChips`、config),并复制 **`/.cursor/rules/*.mdc`**(与 mvframe 仓库内 Cursor 规则一致)。若不存在则附带 `index.html` 与 `vite.config.js`。会**合并** `package.json` 的 `scripts` / `dependencies` / `devDependencies`(与 Vite 模板一致;**同名脚本和包保留你原有值**),并自动执行 **`yarn install`**,最后请执行 **`yarn dev`**;加 `--no-package-json` 可不改动 `package.json` 且跳过安装。
220
+ 在**空目录或已有 Vite 工程根目录**执行,生成 `src/views`、`src/component`、`src/api`、`src/assets/img`、`src/assets/style`、`src/router`、`src/pinia/chip`、`src/config` 及示例 `main.js` / `App.vue`(已 `app.use(mvframe, …)` 挂好路由、Pinia `storeChips`、config),同时写入/更新宿主项目 **`AGENTS.md`** 的 MVFrame Codex 规则,并复制 **`/.cursor/rules/*.mdc`**(与 mvframe 仓库内 Cursor 规则一致)。若不存在则附带 `index.html` 与 `vite.config.js`。会**合并** `package.json` 的 `scripts` / `dependencies` / `devDependencies`(与 Vite 模板一致;**同名脚本和包保留你原有值**),初始化 `.env.mvframe-notify.example` / `.env.local.example` 与 `config.notify`,并自动执行 **`yarn install`**,最后请执行 **`yarn dev`**;需要同时启动通知服务时显式执行 **`yarn exec mvframe-d`**。加 `--no-package-json` 可不改动 `package.json` 且跳过安装。
167
221
 
168
222
  ```bash
169
223
  cd /path/to/your-app
@@ -183,6 +237,22 @@ yarn exec mvframe-init-app
183
237
 
184
238
  ---
185
239
 
240
+ ## Codex 规则(`AGENTS.md`)
241
+
242
+ Codex 不会自动读取 Cursor 的 `.cursor/rules/*.mdc`。宿主项目需要安装 MVFrame 的 `AGENTS.md` 区块,明确要求 Codex 在写业务代码前优先使用 MVFrame 全局组件、全局方法与全局样式工具类:
243
+
244
+ ```bash
245
+ cd /path/to/your-app
246
+ yarn exec mvframe-install-codex-rules
247
+ # 或:npx mvframe-install-codex-rules
248
+
249
+ # 克隆 / monorepo 中指向 mvframe 源码时
250
+ node /path/to/mvframe/scripts/install-codex-agents.js
251
+ node /path/to/mvframe/scripts/install-codex-agents.js /path/to/your-app
252
+ ```
253
+
254
+ 脚手架命令已自动执行这一步。生成区块带有 `MVFRAME-CODEX-RULES` 标记,重复执行只更新这段内容,不覆盖你在 `AGENTS.md` 中的其它规则。
255
+
186
256
  ## Cursor Skill(应用初始化)
187
257
 
188
258
  本仓库自带 **`.cursor/skills/mvframe-app-init`**,消费方项目可复制到自身 `.cursor/skills` 以便 Cursor 识别 MVFrame 接入规范。
@@ -204,6 +274,15 @@ yarn exec mvframe-install-cursor-skill
204
274
 
205
275
  ---
206
276
 
277
+ ## 迭代记录
278
+
279
+ - 新增 `mvframe-notify`:只支持钉钉机器人的本地通知服务,钉钉 webhook / secret 留在 Node 环境变量。
280
+ - 新增 `mvframe/notify` 与全局 `$notify`:前端通过 `config.notify` 请求本地通知服务。
281
+ - 新增框架命令 `yarn d` / `mvframe-d`:同时启动 `yarn dev` 与钉钉通知服务。
282
+ - `mvframe-init-app` 初始化 `config.notify`、`.env.mvframe-notify.example` 与 `.env.local.example`,不自动覆盖宿主 `d` 脚本。
283
+
284
+ ---
285
+
207
286
  ## 协议
208
287
 
209
288
  ISC(见 `package.json`)。
package/README.md CHANGED
@@ -19,6 +19,7 @@ A Vue 3 + Vite oriented admin-shell toolkit: **Frame layout**, **common business
19
19
  - `"."` → `dist/index.js` (main plugin; default export is the `install` function)
20
20
  - `"./composition"` → `dist/composition.js` (e.g. `import { useMap } from 'mvframe/composition'`)
21
21
  - `"./store"`, `"./directive"`, `"./util"` → matching chunks under `dist`
22
+ - `"./notify"` → `dist/notify.js` (browser helper for the local `mvframe-notify` service)
22
23
  - `"./style"` → `dist/css/style.css` (full toolkit CSS from `src/style/index.scss` entry)
23
24
  - `"./style/cpt"` → `dist/css/cpt.css` (component-extracted CSS; usually `import 'mvframe/style'` is enough)
24
25
 
@@ -153,6 +154,46 @@ Production uses **library mode** with entry `src/index.js` and obfuscation-relat
153
154
 
154
155
  ---
155
156
 
157
+ ## DingTalk Notify Service
158
+
159
+ MVFrame ships a local Node service for DingTalk robot messages only:
160
+
161
+ ```bash
162
+ yarn notify
163
+ yarn exec mvframe-notify
164
+
165
+ yarn d
166
+ yarn exec mvframe-d
167
+ ```
168
+
169
+ The service reads `.env.mvframe-notify` from the host root:
170
+
171
+ ```env
172
+ MVFRAME_NOTIFY_PORT=3300
173
+ MVFRAME_NOTIFY_HOST=127.0.0.1
174
+ MVFRAME_NOTIFY_TOKEN=
175
+ DINGTALK_WEBHOOK="https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx"
176
+ DINGTALK_SECRET="SECxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
177
+ ```
178
+
179
+ Browser code should only configure the local endpoint/token:
180
+
181
+ ```js
182
+ app.use(mvframe, {
183
+ config: {
184
+ notify: {
185
+ enabled: true,
186
+ endpoint: import.meta.env.VITE_MVFRAME_NOTIFY_ENDPOINT || "http://127.0.0.1:3300",
187
+ token: import.meta.env.VITE_MVFRAME_NOTIFY_TOKEN || "",
188
+ },
189
+ },
190
+ });
191
+ ```
192
+
193
+ Send messages with `globalThis.$notify.send("message")` or `import { notify } from "mvframe/notify"`. Keep DingTalk webhook/secret out of browser-bundled files.
194
+
195
+ ---
196
+
156
197
  ## Design notes
157
198
 
158
199
  - Layout, guards, tabs, and menu behavior are **opinionated**; heavy customization may mean forking `src/router`, `src/store/tab.js`, or wrapping from the app.
@@ -163,7 +204,7 @@ Production uses **library mode** with entry `src/index.js` and obfuscation-relat
163
204
 
164
205
  ## CLI: project skeleton
165
206
 
166
- From an **empty folder or existing Vite root**, generates `src/views`, `src/component`, `src/api`, `src/assets/img`, `src/assets/style`, `src/router`, `src/pinia/chip`, `src/config`, plus starter `main.js` / `App.vue` with `app.use(mvframe, …)` (routes, Pinia `storeChips`, config), and copies **`/.cursor/rules/*.mdc`** from the package (same as this repo’s Cursor rules). Adds `index.html` and `vite.config.js` only if missing (use `--force` to overwrite). **Merges** `scripts` / `dependencies` / `devDependencies` into `package.json` (existing values win for shared keys), then runs **`yarn install`**; use `--no-package-json` to skip package changes and install. Then run **`yarn dev`**.
207
+ From an **empty folder or existing Vite root**, generates `src/views`, `src/component`, `src/api`, `src/assets/img`, `src/assets/style`, `src/router`, `src/pinia/chip`, `src/config`, plus starter `main.js` / `App.vue` with `app.use(mvframe, …)` (routes, Pinia `storeChips`, config). It also writes/updates host-project **`AGENTS.md`** with MVFrame Codex rules, and copies **`/.cursor/rules/*.mdc`** from the package (same as this repo’s Cursor rules). Adds `index.html` and `vite.config.js` only if missing (use `--force` to overwrite). **Merges** `scripts` / `dependencies` / `devDependencies` into `package.json` (existing values win for shared keys), initializes `.env.mvframe-notify.example` / `.env.local.example` and `config.notify`, then runs **`yarn install`**; use `--no-package-json` to skip package changes and install. Then run **`yarn dev`** or explicitly run **`yarn exec mvframe-d`** to start Vite with the notify service.
167
208
 
168
209
  ```bash
169
210
  cd /path/to/your-app
@@ -181,6 +222,22 @@ See **`MVFRAME-SCAFFOLD.md`** in the target project. Set **`MVFRAME_SCAFFOLD_TAR
181
222
 
182
223
  ---
183
224
 
225
+ ## Codex Rules (`AGENTS.md`)
226
+
227
+ Codex does **not** automatically read Cursor `.cursor/rules/*.mdc`. For host projects, install the MVFrame `AGENTS.md` section so Codex prefers MVFrame global components, global helpers, and style utilities before writing local replacements:
228
+
229
+ ```bash
230
+ cd /path/to/your-app
231
+ yarn exec mvframe-install-codex-rules
232
+ # or: npx mvframe-install-codex-rules
233
+
234
+ # Full checkout / monorepo path to mvframe
235
+ node /path/to/mvframe/scripts/install-codex-agents.js
236
+ node /path/to/mvframe/scripts/install-codex-agents.js /path/to/your-app
237
+ ```
238
+
239
+ The scaffold command already runs this step. The generated block is bounded by `MVFRAME-CODEX-RULES` markers, so rerunning the command updates only that block and preserves other `AGENTS.md` content.
240
+
184
241
  ## Cursor Skill (app scaffold)
185
242
 
186
243
  This repo ships **`.cursor/skills/mvframe-app-init`**. Copy it into your app’s **`.cursor/skills`** so Cursor can pick up MVFrame integration conventions.
@@ -202,6 +259,15 @@ Default target is **`./.cursor/skills/mvframe-app-init`** under the current work
202
259
 
203
260
  ---
204
261
 
262
+ ## Changelog
263
+
264
+ - Added `mvframe-notify`, a DingTalk-only local Node notification service.
265
+ - Added `mvframe/notify` and global `$notify` for browser calls through `config.notify`.
266
+ - Added framework command `yarn d` / `mvframe-d` to run `yarn dev` with the notify service.
267
+ - `mvframe-init-app` now initializes `config.notify`, `.env.mvframe-notify.example`, and `.env.local.example` without forcing host `d` scripts.
268
+
269
+ ---
270
+
205
271
  ## License
206
272
 
207
273
  ISC (see `package.json`).
package/dist/css/cpt.css CHANGED
@@ -1 +1 @@
1
- @charset "UTF-8";.MvcBtnGroup[data-v-39d01040]{padding:.25rem;background:var(--color-white);border-radius:var(--btn-radius);-webkit-user-select:none;user-select:none}.MvcBtnGroup.sizeSmall[data-v-39d01040]{padding:2px;border-radius:calc(var(--btn-radius, 1rem) / 2)}.MvcBtnGroup.sizeSmall .btnItem[data-v-39d01040]{padding:.25rem .625rem;font-size:.75rem;line-height:1.5;border-radius:.1875rem}.MvcBtnGroup.sizeLarge[data-v-39d01040]{padding:.375rem;border-radius:.5rem}.MvcBtnGroup.sizeLarge .btnItem[data-v-39d01040]{padding:.5rem 1.125rem;font-size:1rem;line-height:1.5;border-radius:.375rem}.MvcBtnGroup .btnItem[data-v-39d01040]{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;gap:.25rem;padding:.375rem .875rem;font-size:.875rem;line-height:1.5;color:var(--color-txt-p);background:transparent;border:none;border-radius:var(--btn-radius);word-break:keep-all;text-wrap:nowrap;cursor:pointer;transition:var(--trans-all)}.MvcBtnGroup .btnItem[data-v-39d01040]:hover:not(:disabled):not(.isActive){background:var(--color-bg-menu-item-hover)}.MvcBtnGroup .btnItem.isActive[data-v-39d01040]{color:var(--color-on-primary-text);background:var(--color-primary);position:relative;isolation:isolate}.MvcBtnGroup .btnItem.isActive[data-v-39d01040]:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;opacity:.25;background-color:var(--color-primary);transform:translateY(20%);pointer-events:none;filter:blur(.625rem);z-index:-1}.MvcBtnGroup .btnItem[data-v-39d01040]:disabled{opacity:.5;cursor:not-allowed}.MvcCard[data-v-610b0b4c]{position:relative;border:var(--border-d);border-radius:var(--card-radius);background:var(--color-bg-page-header);box-sizing:border-box;transition:box-shadow var(--trans)}.MvcCard[data-v-610b0b4c]:hover{box-shadow:0 .5rem .5rem color-mix(in srgb,var(--color-dark) 6%,var(--color-white))}.MvcCard.MvcCard--fillParent[data-v-610b0b4c]{display:flex;flex-direction:column;align-self:stretch;min-height:0;height:100%}.MvcCard .header[data-v-610b0b4c]{position:relative;padding:.75rem 1rem;border-block-end:var(--card-header-border);z-index:2;flex-shrink:0;-webkit-user-select:none;user-select:none}.MvcCard .header .headerTitle[data-v-610b0b4c]{margin:0;font-size:.875rem;font-weight:700;color:var(--color-txt-h2)}.MvcCard .body[data-v-610b0b4c]{position:relative;padding:1rem;min-height:1rem;overflow:auto;z-index:1}.MvcCard.MvcCard--fillParent .body[data-v-610b0b4c]{flex:1 1 auto;min-height:0}.MvcCard .footer[data-v-610b0b4c]{position:relative;padding:.75rem 1rem;border-block-start:var(--card-header-border);z-index:2;flex-shrink:0;-webkit-user-select:none;user-select:none}.dragArea[data-v-665c2158]{position:absolute;top:0;left:0;bottom:0;width:1rem;display:flex;align-items:center;z-index:99}.dragArea .dragHandle[data-v-665c2158]{display:flex;align-items:center;width:.875rem;height:1.75rem;background-color:var(--color-border);border-radius:0 .125rem .125rem 0;opacity:0;cursor:ew-resize;z-index:99;transition:var(--trans-all)}.dragArea .dragHandle[data-v-665c2158]:hover,.dragArea .dragHandle.active[data-v-665c2158]{opacity:1;color:var(--color-white);background-color:var(--color-primary);box-shadow:.25rem 0 .5rem var(--color-dark1)}.dragArea:hover .dragHandle[data-v-665c2158]{opacity:1}.MvcDrawerBody[data-v-1df88ac3]{position:relative;width:100%;overflow:hidden}.drawerFooter[data-v-1df88ac3]{background-image:linear-gradient(to top,50% var(--color-white),100 transparent)}.FrameTab .tabShadow[data-v-6592753c]{position:absolute;top:100%;left:0;right:0;height:.5rem;background-image:linear-gradient(to bottom,rgba(0,0,0,.05) 0,transparent 100%);opacity:0;transition:opacity var(--trans)}.FrameTab .tabShadow.visible[data-v-6592753c]{opacity:1}.FrameTab .tabArea[data-v-6592753c]:after{content:"";position:absolute;top:2.175rem;left:0;right:0;border-bottom:var(--border-d);z-index:1}.FrameTab .tabItem[data-v-6592753c]{margin-block-end:-1px;border:var(--border-d);border-block-end-color:transparent;border-radius:.25rem .25rem 0 0;background-color:var(--color-white);opacity:.5;overflow:hidden;transition:var(--trans-all)}.FrameTab .tabItem[data-v-6592753c]:hover{opacity:.8}.FrameTab .tabItem.active[data-v-6592753c]{opacity:1;border-block-end-color:var(--color-white);z-index:3;background-color:var(--color-bg-page-header)}.FrameTab .tabItem .abs[data-v-6592753c]{transition:var(--trans-all);transform:translate(2.25rem)}.FrameTab .tabItem .abs[data-v-6592753c]:hover{opacity:.8;color:var(--color-primary)}.FrameTab .tabItem.hoverItem.active[data-v-6592753c]{padding-inline-end:2.25rem}.FrameTab .tabItem.hoverItem.active .abs[data-v-6592753c]{transform:translate(-.375rem)}.FrameTab .tabItem.hoverItem[data-v-6592753c]:hover{padding-inline-end:2.25rem}.FrameTab .tabItem.hoverItem:hover .abs[data-v-6592753c]{transform:translate(-.375rem)}.FrameTab .tabItem.disabled[data-v-6592753c]{opacity:.7;cursor:not-allowed}.FrameMenu[data-v-d7eb624b]{width:12rem;background-color:var(--color-bg-menu);overflow:hidden}.FrameMenu[data-v-d7eb624b]:after{content:"";position:absolute;top:0;right:0;bottom:0;border-right:var(--border-d)}.FrameMenu:hover .logomini[data-v-d7eb624b]{opacity:.1}.FrameMenu:hover .collapseArea[data-v-d7eb624b]{display:block!important}.FrameMenu .LogoArea .logomini[data-v-d7eb624b]{display:none}.FrameMenu .collapseArea[data-v-d7eb624b]{top:50%;right:1rem;height:1.25rem;width:1.24rem;transform:translateY(-50%)}.FrameMenu .MenuArea[data-v-d7eb624b]{height:calc(100vh - 8rem)}.FrameMenu .MenuArea .menuItem[data-v-d7eb624b]{height:2.75rem;transition:var(--trans-all)}.FrameMenu .MenuArea .menuItem[data-v-d7eb624b]:hover{background-color:var(--color-bg-menu-item-hover)}.FrameMenu .MenuArea .menuItem.active[data-v-d7eb624b]:hover{background-color:var(--color-primary);opacity:.8}.FrameMenu .MenuArea .menuItem.active .itemIcon[data-v-d7eb624b]{color:var(--color-on-primary-text)}.FrameMenu .MenuArea .childrenItem[data-v-d7eb624b]{transition:var(--trans-all)}.FrameMenu .MenuArea .childrenItem[data-v-d7eb624b]:hover{background-color:var(--color-bg-menu-children-item-hover)}.FrameMenu .MenuArea .childrenItem.active[data-v-d7eb624b]:hover{background-color:var(--color-primary);opacity:.8}.FrameMenu .MenuArea .itemChildrenArea[data-v-d7eb624b]{background-color:var(--color-bg-menu-children)}.FrameMenu .MenuArea .itemTitle.active[data-v-d7eb624b]{color:var(--color-on-primary-text)}.FrameMenu.collapse[data-v-d7eb624b]{width:4rem}.FrameMenu.collapse .collapseArea[data-v-d7eb624b]{right:1.5rem;display:none}.FrameMenu.collapse .LogoArea .logo[data-v-d7eb624b]{display:none}.FrameMenu.collapse .LogoArea .logomini[data-v-d7eb624b]{display:block;transition:opacity var(--trans)}.FrameMenu.collapse .MenuArea .menuItem.activeChild[data-v-d7eb624b]{position:relative;isolation:isolate}.FrameMenu.collapse .MenuArea .menuItem.activeChild[data-v-d7eb624b]:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;opacity:.25;background-color:var(--color-primary);transform:translateY(20%);pointer-events:none;filter:blur(.625rem);z-index:-1}.FrameMenu.collapse .MenuArea .itemChildrenArea[data-v-d7eb624b]{display:none}.FrameFooter[data-v-c3ba0162]{display:flex;height:3rem;padding:.5rem 1rem;gap:.5rem;font-size:14px}.MvcFrame[data-v-b25da17b]{display:flex}.MvcFrame .PageArea[data-v-b25da17b]{flex-grow:1;position:relative;min-height:0}.MvcList[data-v-6a45c452]{display:flex;flex-direction:column;width:100%;min-height:0;flex:1 1 auto;height:100%;-webkit-user-select:none;user-select:none}.MvcList .listViewport[data-v-6a45c452]{position:relative;flex:1 1 auto;min-height:0;overflow:hidden}.MvcList .listScroll[data-v-6a45c452]{position:relative;box-sizing:border-box;height:100%;max-height:100%}.MvcList .listItem[data-v-6a45c452]{padding:.5rem;margin-block-end:.25rem}.MvcList .listItem[data-v-6a45c452]:last-child{margin-block-end:0}.MvcList .listItem[data-v-6a45c452]{font-size:.75rem;line-height:1.5;color:var(--color-txt-p);background:transparent;border-radius:.25rem;cursor:pointer;transition:var(--trans-all)}.MvcList .listItem[data-v-6a45c452]:hover:not(.active):not(.isDisabled){background:var(--color-bg-menu-item-hover)}.MvcList .listItem.active[data-v-6a45c452]{position:sticky!important;top:0;color:var(--color-on-primary-text);background:var(--color-primary);z-index:9;position:relative;isolation:isolate}.MvcList .listItem.active[data-v-6a45c452]:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;opacity:.25;background-color:var(--color-primary);transform:translateY(20%);pointer-events:none;filter:blur(.625rem);z-index:-1}.MvcList .listItem.isDisabled[data-v-6a45c452]{opacity:.5;cursor:not-allowed}.MvcList.sizeSmall .listItem[data-v-6a45c452]{padding:.25rem .375rem;margin-block-end:.125rem;font-size:.6875rem;border-radius:.1875rem}.MvcList.sizeSmall .listItem[data-v-6a45c452]:last-child{margin-block-end:0}.MvcList.sizeLarge .listItem[data-v-6a45c452]{padding:.625rem .75rem;margin-block-end:.5rem;font-size:.875rem;border-radius:.375rem}.MvcList.sizeLarge .listItem[data-v-6a45c452]:last-child{margin-block-end:0}.loadingFade-enter-active[data-v-89f58c94],.loadingFade-leave-active[data-v-89f58c94]{transition:opacity var(--trans)}.loadingFade-enter-from[data-v-89f58c94],.loadingFade-leave-to[data-v-89f58c94]{opacity:0}.MvcLoading[data-v-89f58c94]{pointer-events:auto;-webkit-backdrop-filter:blur(.25rem);backdrop-filter:blur(.25rem)}.loaderTxt[data-v-89f58c94]{max-width:15rem;word-break:break-word}.MvcLogin[data-v-6faa6992]{background-color:var(--color-bg-body)}.panelWrap[data-v-6faa6992]{background-color:var(--color-bg-menu);box-shadow:0 .25rem 1rem #0000000f}.qr-dingtalk[data-v-6faa6992]{background:#0089ff}.qr-feishu[data-v-6faa6992]{background:#3370ff}.qr-wechat[data-v-6faa6992]{background:#07c160}.oauthGoogle[data-v-6faa6992]{display:flex;align-items:center;justify-content:center;gap:.75rem;min-height:2.5rem;padding:.5rem 1rem;box-sizing:border-box;background:#fff;border:1px solid #747775;border-radius:.25rem;font-family:Roboto,system-ui,-apple-system,Segoe UI,sans-serif;font-size:.875rem;font-weight:500;line-height:1.25;color:#1f1f1f;cursor:pointer;transition:var(--trans-all)}.oauthGoogle[data-v-6faa6992]:hover:not(:disabled){box-shadow:0 1px 2px #3c40434d,0 1px 3px 1px #3c404326}.oauthGoogle[data-v-6faa6992]:disabled{opacity:.38;cursor:not-allowed}.oauthGoogle[data-v-6faa6992]:focus-visible{outline:2px solid #4285f4;outline-offset:2px}.oauthApple[data-v-6faa6992]{display:flex;align-items:center;justify-content:center;gap:.5rem;min-height:2.5rem;padding:.5rem 1rem;box-sizing:border-box;background:#000;border:none;border-radius:.375rem;font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,Helvetica Neue,sans-serif;font-size:1.0625rem;font-weight:600;line-height:1.2;color:#fff;cursor:pointer;transition:var(--trans-all)}.oauthApple[data-v-6faa6992]:hover:not(:disabled){opacity:.88}.oauthApple[data-v-6faa6992]:disabled{opacity:.3;cursor:not-allowed}.oauthApple[data-v-6faa6992]:focus-visible{outline:2px solid #fff;outline-offset:2px}.MvcNote[data-v-e3e84cc8]{position:relative;padding:.5rem 1rem;background-color:var(--color-bg-menu);font-size:.875rem;border-radius:0 .5rem .5rem 0}.MvcNote[data-v-e3e84cc8]:hover:before{opacity:1}.MvcNote[data-v-e3e84cc8]:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;pointer-events:none;border-radius:0 .5rem .5rem 0;border:1px solid var(--color-gray);transition:opacity var(--trans)}.MvcPage[data-v-3ff06276]{position:relative;display:flex;flex-direction:column;min-height:calc(100vh - 3rem);z-index:1}.MvcPage .PageHeader[data-v-3ff06276]{position:sticky;display:flex;align-items:center;justify-content:space-between;padding:.5rem 1rem;min-height:4rem;border-bottom:var(--border-d);background-color:var(--color-bg-page-header);z-index:9}.MvcPage .PageHeader .PageHeaderTitle[data-v-3ff06276]{margin:0}.MvcPage .PageHeader .PageHeaderSubTitle[data-v-3ff06276]{margin:0;font-size:.875rem;color:var(--color-txt-p)}.MvcPage .PageBody[data-v-3ff06276]{position:relative;display:flex;flex-direction:column;flex:1 1 auto;min-height:0;background-color:var(--color-bg-page-body);z-index:2}.MvcPage.hasTab[data-v-3ff06276]{z-index:10}.MvcPage.hasTab .PageHeader[data-v-3ff06276]{top:2.5rem}.ghost[data-v-1927ce52]{cursor:grabbing}.typeItem[data-v-1927ce52]{cursor:pointer}.typeItem[data-v-1927ce52]:hover{background-color:var(--mg-gray3)}.typeItem.active[data-v-1927ce52]{color:var(--mg-white);background-color:var(--mg-primary)}.columnItem[data-v-1927ce52]:hover{background-color:var(--mg-gray3)}.columnItem .fixedBtn[data-v-1927ce52]{cursor:pointer}.columnItem .fixedBtn[data-v-1927ce52]:hover{background-color:var(--mg-primary1)}.MainTable[data-v-f79bf58d]{max-width:calc(100% + 2px);width:calc(100% + 2px);margin:0 -1px}[data-v-4dba94bf] .el-textarea__inner{box-sizing:border-box}.ghost[data-v-73161392]{cursor:grabbing}.typeItem[data-v-73161392]{cursor:pointer}.typeItem[data-v-73161392]:hover{background-color:var(--mg-gray3)}.typeItem.active[data-v-73161392]{color:var(--color-txt-white);background-color:var(--color-bg-menu-item-active);position:relative;isolation:isolate}.typeItem.active[data-v-73161392]:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;opacity:.25;background-color:var(--color-primary);transform:translateY(20%);pointer-events:none;filter:blur(.625rem);z-index:-1}.columnItem[data-v-73161392]:hover{background-color:var(--color-bg-menu-item-hover)}.columnItem .fixedBtn[data-v-73161392]{cursor:pointer}.columnItem .fixedBtn[data-v-73161392]:hover{background-color:var(--mg-primary1)}.tableFooter[data-v-a13ba899]{margin-block-start:-1px;border-block-start:var(--border-d);border-radius:0 0 .5rem .5rem}.vtableHost[data-v-a13ba899]{min-height:10rem;background-color:var(--color-white)}.vtableHostFill[data-v-a13ba899]{height:100%}.treeCellLoadMask[data-v-a13ba899]{z-index:10;box-sizing:border-box;pointer-events:auto;cursor:wait;background-color:#ffffffb8;border-radius:.125rem}.treeCellLoadMask .loadMaskIcon[data-v-a13ba899]{pointer-events:none}
1
+ @charset "UTF-8";.MvcBtnGroup[data-v-39d01040]{padding:.25rem;background:var(--color-white);border-radius:var(--btn-radius);-webkit-user-select:none;user-select:none}.MvcBtnGroup.sizeSmall[data-v-39d01040]{padding:2px;border-radius:calc(var(--btn-radius, 1rem) / 2)}.MvcBtnGroup.sizeSmall .btnItem[data-v-39d01040]{padding:.25rem .625rem;font-size:.75rem;line-height:1.5;border-radius:.1875rem}.MvcBtnGroup.sizeLarge[data-v-39d01040]{padding:.375rem;border-radius:.5rem}.MvcBtnGroup.sizeLarge .btnItem[data-v-39d01040]{padding:.5rem 1.125rem;font-size:1rem;line-height:1.5;border-radius:.375rem}.MvcBtnGroup .btnItem[data-v-39d01040]{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;gap:.25rem;padding:.375rem .875rem;font-size:.875rem;line-height:1.5;color:var(--color-txt-p);background:transparent;border:none;border-radius:var(--btn-radius);word-break:keep-all;text-wrap:nowrap;cursor:pointer;transition:var(--trans-all)}.MvcBtnGroup .btnItem[data-v-39d01040]:hover:not(:disabled):not(.isActive){background:var(--color-bg-menu-item-hover)}.MvcBtnGroup .btnItem.isActive[data-v-39d01040]{color:var(--color-on-primary-text);background:var(--color-primary);position:relative;isolation:isolate}.MvcBtnGroup .btnItem.isActive[data-v-39d01040]:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;opacity:.25;background-color:var(--color-primary);transform:translateY(20%);pointer-events:none;filter:blur(.625rem);z-index:-1}.MvcBtnGroup .btnItem[data-v-39d01040]:disabled{opacity:.5;cursor:not-allowed}.MvcCard[data-v-610b0b4c]{position:relative;border:var(--border-d);border-radius:var(--card-radius);background:var(--color-bg-page-header);box-sizing:border-box;transition:box-shadow var(--trans)}.MvcCard[data-v-610b0b4c]:hover{box-shadow:0 .5rem .5rem color-mix(in srgb,var(--color-dark) 6%,var(--color-white))}.MvcCard.MvcCard--fillParent[data-v-610b0b4c]{display:flex;flex-direction:column;align-self:stretch;min-height:0;height:100%}.MvcCard .header[data-v-610b0b4c]{position:relative;padding:.75rem 1rem;border-block-end:var(--card-header-border);z-index:2;flex-shrink:0;-webkit-user-select:none;user-select:none}.MvcCard .header .headerTitle[data-v-610b0b4c]{margin:0;font-size:.875rem;font-weight:700;color:var(--color-txt-h2)}.MvcCard .body[data-v-610b0b4c]{position:relative;padding:1rem;min-height:1rem;overflow:auto;z-index:1}.MvcCard.MvcCard--fillParent .body[data-v-610b0b4c]{flex:1 1 auto;min-height:0}.MvcCard .footer[data-v-610b0b4c]{position:relative;padding:.75rem 1rem;border-block-start:var(--card-header-border);z-index:2;flex-shrink:0;-webkit-user-select:none;user-select:none}.dragArea[data-v-665c2158]{position:absolute;top:0;left:0;bottom:0;width:1rem;display:flex;align-items:center;z-index:99}.dragArea .dragHandle[data-v-665c2158]{display:flex;align-items:center;width:.875rem;height:1.75rem;background-color:var(--color-border);border-radius:0 .125rem .125rem 0;opacity:0;cursor:ew-resize;z-index:99;transition:var(--trans-all)}.dragArea .dragHandle[data-v-665c2158]:hover,.dragArea .dragHandle.active[data-v-665c2158]{opacity:1;color:var(--color-white);background-color:var(--color-primary);box-shadow:.25rem 0 .5rem var(--color-dark1)}.dragArea:hover .dragHandle[data-v-665c2158]{opacity:1}.MvcDrawerBody[data-v-1df88ac3]{position:relative;width:100%;overflow:hidden}.drawerFooter[data-v-1df88ac3]{background-image:linear-gradient(to top,50% var(--color-white),100 transparent)}.FrameTab .tabShadow[data-v-6592753c]{position:absolute;top:100%;left:0;right:0;height:.5rem;background-image:linear-gradient(to bottom,rgba(0,0,0,.05) 0,transparent 100%);opacity:0;transition:opacity var(--trans)}.FrameTab .tabShadow.visible[data-v-6592753c]{opacity:1}.FrameTab .tabArea[data-v-6592753c]:after{content:"";position:absolute;top:2.175rem;left:0;right:0;border-bottom:var(--border-d);z-index:1}.FrameTab .tabItem[data-v-6592753c]{margin-block-end:-1px;border:var(--border-d);border-block-end-color:transparent;border-radius:.25rem .25rem 0 0;background-color:var(--color-white);opacity:.5;overflow:hidden;transition:var(--trans-all)}.FrameTab .tabItem[data-v-6592753c]:hover{opacity:.8}.FrameTab .tabItem.active[data-v-6592753c]{opacity:1;border-block-end-color:var(--color-white);z-index:3;background-color:var(--color-bg-page-header)}.FrameTab .tabItem .abs[data-v-6592753c]{transition:var(--trans-all);transform:translate(2.25rem)}.FrameTab .tabItem .abs[data-v-6592753c]:hover{opacity:.8;color:var(--color-primary)}.FrameTab .tabItem.hoverItem.active[data-v-6592753c]{padding-inline-end:2.25rem}.FrameTab .tabItem.hoverItem.active .abs[data-v-6592753c]{transform:translate(-.375rem)}.FrameTab .tabItem.hoverItem[data-v-6592753c]:hover{padding-inline-end:2.25rem}.FrameTab .tabItem.hoverItem:hover .abs[data-v-6592753c]{transform:translate(-.375rem)}.FrameTab .tabItem.disabled[data-v-6592753c]{opacity:.7;cursor:not-allowed}.FrameMenu[data-v-d7eb624b]{width:12rem;background-color:var(--color-bg-menu);overflow:hidden}.FrameMenu[data-v-d7eb624b]:after{content:"";position:absolute;top:0;right:0;bottom:0;border-right:var(--border-d)}.FrameMenu:hover .logomini[data-v-d7eb624b]{opacity:.1}.FrameMenu:hover .collapseArea[data-v-d7eb624b]{display:block!important}.FrameMenu .LogoArea .logomini[data-v-d7eb624b]{display:none}.FrameMenu .collapseArea[data-v-d7eb624b]{top:50%;right:1rem;height:1.25rem;width:1.24rem;transform:translateY(-50%)}.FrameMenu .MenuArea[data-v-d7eb624b]{height:calc(100vh - 8rem)}.FrameMenu .MenuArea .menuItem[data-v-d7eb624b]{height:2.75rem;transition:var(--trans-all)}.FrameMenu .MenuArea .menuItem[data-v-d7eb624b]:hover{background-color:var(--color-bg-menu-item-hover)}.FrameMenu .MenuArea .menuItem.active[data-v-d7eb624b]:hover{background-color:var(--color-primary);opacity:.8}.FrameMenu .MenuArea .menuItem.active .itemIcon[data-v-d7eb624b]{color:var(--color-on-primary-text)}.FrameMenu .MenuArea .childrenItem[data-v-d7eb624b]{transition:var(--trans-all)}.FrameMenu .MenuArea .childrenItem[data-v-d7eb624b]:hover{background-color:var(--color-bg-menu-children-item-hover)}.FrameMenu .MenuArea .childrenItem.active[data-v-d7eb624b]:hover{background-color:var(--color-primary);opacity:.8}.FrameMenu .MenuArea .itemChildrenArea[data-v-d7eb624b]{background-color:var(--color-bg-menu-children)}.FrameMenu .MenuArea .itemTitle.active[data-v-d7eb624b]{color:var(--color-on-primary-text)}.FrameMenu.collapse[data-v-d7eb624b]{width:4rem}.FrameMenu.collapse .collapseArea[data-v-d7eb624b]{right:1.5rem;display:none}.FrameMenu.collapse .LogoArea .logo[data-v-d7eb624b]{display:none}.FrameMenu.collapse .LogoArea .logomini[data-v-d7eb624b]{display:block;transition:opacity var(--trans)}.FrameMenu.collapse .MenuArea .menuItem.activeChild[data-v-d7eb624b]{position:relative;isolation:isolate}.FrameMenu.collapse .MenuArea .menuItem.activeChild[data-v-d7eb624b]:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;opacity:.25;background-color:var(--color-primary);transform:translateY(20%);pointer-events:none;filter:blur(.625rem);z-index:-1}.FrameMenu.collapse .MenuArea .itemChildrenArea[data-v-d7eb624b]{display:none}.FrameFooter[data-v-c3ba0162]{display:flex;height:3rem;padding:.5rem 1rem;gap:.5rem;font-size:14px}.MvcFrame[data-v-b25da17b]{display:flex}.MvcFrame .PageArea[data-v-b25da17b]{flex-grow:1;position:relative;min-height:0}.MvcList[data-v-6a45c452]{display:flex;flex-direction:column;width:100%;min-height:0;flex:1 1 auto;height:100%;-webkit-user-select:none;user-select:none}.MvcList .listViewport[data-v-6a45c452]{position:relative;flex:1 1 auto;min-height:0;overflow:hidden}.MvcList .listScroll[data-v-6a45c452]{position:relative;box-sizing:border-box;height:100%;max-height:100%}.MvcList .listItem[data-v-6a45c452]{padding:.5rem;margin-block-end:.25rem}.MvcList .listItem[data-v-6a45c452]:last-child{margin-block-end:0}.MvcList .listItem[data-v-6a45c452]{font-size:.75rem;line-height:1.5;color:var(--color-txt-p);background:transparent;border-radius:.25rem;cursor:pointer;transition:var(--trans-all)}.MvcList .listItem[data-v-6a45c452]:hover:not(.active):not(.isDisabled){background:var(--color-bg-menu-item-hover)}.MvcList .listItem.active[data-v-6a45c452]{position:sticky!important;top:0;color:var(--color-on-primary-text);background:var(--color-primary);z-index:9;position:relative;isolation:isolate}.MvcList .listItem.active[data-v-6a45c452]:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;opacity:.25;background-color:var(--color-primary);transform:translateY(20%);pointer-events:none;filter:blur(.625rem);z-index:-1}.MvcList .listItem.isDisabled[data-v-6a45c452]{opacity:.5;cursor:not-allowed}.MvcList.sizeSmall .listItem[data-v-6a45c452]{padding:.25rem .375rem;margin-block-end:.125rem;font-size:.6875rem;border-radius:.1875rem}.MvcList.sizeSmall .listItem[data-v-6a45c452]:last-child{margin-block-end:0}.MvcList.sizeLarge .listItem[data-v-6a45c452]{padding:.625rem .75rem;margin-block-end:.5rem;font-size:.875rem;border-radius:.375rem}.MvcList.sizeLarge .listItem[data-v-6a45c452]:last-child{margin-block-end:0}.loadingFade-enter-active[data-v-89f58c94],.loadingFade-leave-active[data-v-89f58c94]{transition:opacity var(--trans)}.loadingFade-enter-from[data-v-89f58c94],.loadingFade-leave-to[data-v-89f58c94]{opacity:0}.MvcLoading[data-v-89f58c94]{pointer-events:auto;-webkit-backdrop-filter:blur(.25rem);backdrop-filter:blur(.25rem)}.loaderTxt[data-v-89f58c94]{max-width:15rem;word-break:break-word}.MvcLogin[data-v-6faa6992]{background-color:var(--color-bg-body)}.panelWrap[data-v-6faa6992]{background-color:var(--color-bg-menu);box-shadow:0 .25rem 1rem #0000000f}.qr-dingtalk[data-v-6faa6992]{background:#0089ff}.qr-feishu[data-v-6faa6992]{background:#3370ff}.qr-wechat[data-v-6faa6992]{background:#07c160}.oauthGoogle[data-v-6faa6992]{display:flex;align-items:center;justify-content:center;gap:.75rem;min-height:2.5rem;padding:.5rem 1rem;box-sizing:border-box;background:#fff;border:1px solid #747775;border-radius:.25rem;font-family:Roboto,system-ui,-apple-system,Segoe UI,sans-serif;font-size:.875rem;font-weight:500;line-height:1.25;color:#1f1f1f;cursor:pointer;transition:var(--trans-all)}.oauthGoogle[data-v-6faa6992]:hover:not(:disabled){box-shadow:0 1px 2px #3c40434d,0 1px 3px 1px #3c404326}.oauthGoogle[data-v-6faa6992]:disabled{opacity:.38;cursor:not-allowed}.oauthGoogle[data-v-6faa6992]:focus-visible{outline:2px solid #4285f4;outline-offset:2px}.oauthApple[data-v-6faa6992]{display:flex;align-items:center;justify-content:center;gap:.5rem;min-height:2.5rem;padding:.5rem 1rem;box-sizing:border-box;background:#000;border:none;border-radius:.375rem;font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,Helvetica Neue,sans-serif;font-size:1.0625rem;font-weight:600;line-height:1.2;color:#fff;cursor:pointer;transition:var(--trans-all)}.oauthApple[data-v-6faa6992]:hover:not(:disabled){opacity:.88}.oauthApple[data-v-6faa6992]:disabled{opacity:.3;cursor:not-allowed}.oauthApple[data-v-6faa6992]:focus-visible{outline:2px solid #fff;outline-offset:2px}.MvcNote[data-v-e3e84cc8]{position:relative;padding:.5rem 1rem;background-color:var(--color-bg-menu);font-size:.875rem;border-radius:0 .5rem .5rem 0}.MvcNote[data-v-e3e84cc8]:hover:before{opacity:1}.MvcNote[data-v-e3e84cc8]:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;pointer-events:none;border-radius:0 .5rem .5rem 0;border:1px solid var(--color-gray);transition:opacity var(--trans)}.MvcPage[data-v-763c9c00]{position:relative;display:flex;flex-direction:column;min-height:calc(100vh - 3rem);z-index:1}.MvcPage .PageHeader[data-v-763c9c00]{position:sticky;display:flex;align-items:center;justify-content:space-between;padding:.5rem 1rem;min-height:4rem;border-bottom:var(--border-d);background-color:var(--color-bg-page-header);z-index:9}.MvcPage .PageHeader .PageHeaderTitle[data-v-763c9c00]{margin:0}.MvcPage .PageHeader .PageHeaderSubTitle[data-v-763c9c00]{margin:0;font-size:.875rem;color:var(--color-txt-p)}.MvcPage .PageBody[data-v-763c9c00]{position:relative;display:flex;flex-direction:column;flex:1 1 auto;min-height:0;background-color:var(--color-bg-page-body);z-index:2}.MvcPage.hasTab[data-v-763c9c00]{z-index:10}.MvcPage.hasTab .PageHeader[data-v-763c9c00]{top:2.25rem}.ghost[data-v-1927ce52]{cursor:grabbing}.typeItem[data-v-1927ce52]{cursor:pointer}.typeItem[data-v-1927ce52]:hover{background-color:var(--mg-gray3)}.typeItem.active[data-v-1927ce52]{color:var(--mg-white);background-color:var(--mg-primary)}.columnItem[data-v-1927ce52]:hover{background-color:var(--mg-gray3)}.columnItem .fixedBtn[data-v-1927ce52]{cursor:pointer}.columnItem .fixedBtn[data-v-1927ce52]:hover{background-color:var(--mg-primary1)}.MainTable[data-v-f79bf58d]{max-width:calc(100% + 2px);width:calc(100% + 2px);margin:0 -1px}[data-v-4dba94bf] .el-textarea__inner{box-sizing:border-box}.ghost[data-v-73161392]{cursor:grabbing}.typeItem[data-v-73161392]{cursor:pointer}.typeItem[data-v-73161392]:hover{background-color:var(--mg-gray3)}.typeItem.active[data-v-73161392]{color:var(--color-txt-white);background-color:var(--color-bg-menu-item-active);position:relative;isolation:isolate}.typeItem.active[data-v-73161392]:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;opacity:.25;background-color:var(--color-primary);transform:translateY(20%);pointer-events:none;filter:blur(.625rem);z-index:-1}.columnItem[data-v-73161392]:hover{background-color:var(--color-bg-menu-item-hover)}.columnItem .fixedBtn[data-v-73161392]{cursor:pointer}.columnItem .fixedBtn[data-v-73161392]:hover{background-color:var(--mg-primary1)}.tableFooter[data-v-a13ba899]{margin-block-start:-1px;border-block-start:var(--border-d);border-radius:0 0 .5rem .5rem}.vtableHost[data-v-a13ba899]{min-height:10rem;background-color:var(--color-white)}.vtableHostFill[data-v-a13ba899]{height:100%}.treeCellLoadMask[data-v-a13ba899]{z-index:10;box-sizing:border-box;pointer-events:auto;cursor:wait;background-color:#ffffffb8;border-radius:.125rem}.treeCellLoadMask .loadMaskIcon[data-v-a13ba899]{pointer-events:none}
package/dist/index.js CHANGED
@@ -1,17 +1,18 @@
1
1
  import "./util.js";
2
2
  import "./directive.js";
3
3
  import "./store-shared.js";
4
- import { j as m, k as o, g as n, a as r, m as g, b as l, c as u, n as L, p as M, u as c } from "./vendor.js";
4
+ import { j as o, k as r, g as n, a as g, m as l, b as u, c as L, n as M, p as c, u as b } from "./vendor.js";
5
+ import "./notify.js";
5
6
  import "./composition.js";
6
7
  export {
7
- m as builtinLocales,
8
- o as default,
8
+ o as builtinLocales,
9
+ r as default,
9
10
  n as getBuiltinLangMaps,
10
- r as getMaps,
11
- g as mapLang,
12
- l as mapLangPath,
13
- u as mergeMaps,
14
- L as normalizeBuiltinLocale,
15
- M as patchMaps,
16
- c as useMap
11
+ g as getMaps,
12
+ l as mapLang,
13
+ u as mapLangPath,
14
+ L as mergeMaps,
15
+ M as normalizeBuiltinLocale,
16
+ c as patchMaps,
17
+ b as useMap
17
18
  };
package/dist/notify.js ADDED
@@ -0,0 +1,80 @@
1
+ const y = {
2
+ endpoint: "",
3
+ path: "/notify",
4
+ token: "",
5
+ timeout: 5e3
6
+ };
7
+ function d(n) {
8
+ return String(n || "").replace(/\/+$/, "");
9
+ }
10
+ function m(n) {
11
+ const t = String(n || "/notify");
12
+ return t.startsWith("/") ? t : `/${t}`;
13
+ }
14
+ function p(n = {}) {
15
+ var t;
16
+ return {
17
+ ...y,
18
+ ...((t = globalThis.$config) == null ? void 0 : t.notify) || {},
19
+ ...n || {}
20
+ };
21
+ }
22
+ function l(n = {}) {
23
+ const t = async (s, r = {}) => {
24
+ var f;
25
+ const o = p({
26
+ ...n,
27
+ ...r.config || {}
28
+ });
29
+ if (o.enabled === !1)
30
+ return {
31
+ ok: !0,
32
+ skipped: !0,
33
+ message: "notify disabled"
34
+ };
35
+ if (!o.endpoint)
36
+ throw new Error("missing notify.endpoint");
37
+ const c = new AbortController(), g = Number(o.timeout || 5e3), u = setTimeout(() => c.abort(), g);
38
+ try {
39
+ const i = await fetch(`${d(o.endpoint)}${m(o.path)}`, {
40
+ method: "POST",
41
+ headers: {
42
+ "Content-Type": "application/json",
43
+ ...o.token ? { "x-mvframe-notify-token": o.token } : {}
44
+ },
45
+ body: JSON.stringify({
46
+ message: s,
47
+ atMobiles: r.atMobiles,
48
+ atUserIds: r.atUserIds,
49
+ atAll: r.atAll
50
+ }),
51
+ signal: c.signal
52
+ }), e = (i.headers.get("content-type") || "").includes("application/json") ? await i.json() : { message: await i.text() };
53
+ if (!i.ok || (e == null ? void 0 : e.ok) === !1) {
54
+ const a = new Error((e == null ? void 0 : e.message) || ((f = e == null ? void 0 : e.push) == null ? void 0 : f.message) || "notify failed");
55
+ throw a.response = i, a.payload = e, a;
56
+ }
57
+ return e;
58
+ } finally {
59
+ clearTimeout(u);
60
+ }
61
+ };
62
+ return {
63
+ send: t,
64
+ ding: t,
65
+ dingtalk: t
66
+ };
67
+ }
68
+ async function b(n, t) {
69
+ return l().send(n, t);
70
+ }
71
+ const T = (n, t = {}) => {
72
+ const s = l(t);
73
+ n.config.globalProperties.$notify = s, globalThis.$notify = s;
74
+ };
75
+ export {
76
+ l as createNotifyClient,
77
+ T as default,
78
+ p as getNotifyConfig,
79
+ b as notify
80
+ };
@@ -93,7 +93,9 @@ const L = () => ({
93
93
  },
94
94
  closeTab(t, s) {
95
95
  var a;
96
- this.tabs.splice(s, 1), t.name === this.ctab.name && ((a = globalThis.$router) == null || a.push({ name: this.tabs[s - 1 > 0 ? s - 1 : 0].name }));
96
+ this.tabs.length > 1 && (this.tabs.splice(s, 1), t.name === this.ctab.name && ((a = globalThis.$router) == null || a.push({
97
+ name: this.tabs[s - 1 > 0 ? s - 1 : 0].name
98
+ })));
97
99
  },
98
100
  closeRightTab(t, s) {
99
101
  var n;