mvframe 1.1.31 → 1.1.33
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 +15 -0
- package/README.md +15 -0
- package/dist/css/cpt.css +1 -1
- package/dist/vendor.js +2 -2
- package/package.json +1 -1
- package/scripts/build-host.js +115 -24
package/README.cn.md
CHANGED
|
@@ -268,6 +268,21 @@ await notify("需要发送到钉钉的消息");
|
|
|
268
268
|
|
|
269
269
|
---
|
|
270
270
|
|
|
271
|
+
## 命令行:宿主项目打包
|
|
272
|
+
|
|
273
|
+
在宿主项目 `package.json` 中增加 `"b": "mvframe-b"`。该命令会执行宿主 Vite 构建、复制 MVFrame 国旗资源,并写入 `serve.json`。项目名自动取执行命令时所在项目的文件夹名,并通过 `MVFRAME_PROJECT_NAME` 传给 Vite。
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
yarn b # mode=development,输出 dev/
|
|
277
|
+
yarn b pre # mode=pre,输出 pre/,加载 .env.pre*
|
|
278
|
+
yarn b pd # mode=production,输出 pd/,加载 .env.production*
|
|
279
|
+
yarn b --mode staging --outDir release
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
`--pre`、`--pd` 分别等价于 `pre`、`pd` 快捷命令。旧的 `-t`(`test/test`)、`-p`(`production/pre`)以及单个位置参数自定义输出目录仍然兼容。
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
271
286
|
## 命令行:项目目录雏形(推荐)
|
|
272
287
|
|
|
273
288
|
在**空目录或已有 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,并写入 `components.async: ["VTable"]`),同时写入/更新宿主项目 **`AGENTS.md`** 的 MVFrame Codex 规则,其中包含 **每次 AI 完成开发后执行 `yarn exec mvframe-notify --once --message "..."` 发送完成通知** 的要求,并复制 **`/.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 -n`**。加 `--no-package-json` 可不改动 `package.json` 且跳过安装。
|
package/README.md
CHANGED
|
@@ -253,6 +253,21 @@ The floating label shell is implemented centrally in `src/style/chip/element.scs
|
|
|
253
253
|
|
|
254
254
|
---
|
|
255
255
|
|
|
256
|
+
## CLI: host application build
|
|
257
|
+
|
|
258
|
+
Add `"b": "mvframe-b"` to the host application's `package.json`. The command runs the host Vite build, copies MVFrame flag assets, and writes `serve.json`. The host project name is derived from the current project folder and passed to Vite as `MVFRAME_PROJECT_NAME`.
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
yarn b # mode=development, outDir=dev
|
|
262
|
+
yarn b pre # mode=pre, outDir=pre; loads .env.pre*
|
|
263
|
+
yarn b pd # mode=production, outDir=pd; loads .env.production*
|
|
264
|
+
yarn b --mode staging --outDir release
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
`--pre` and `--pd` are equivalent to the `pre` and `pd` shortcuts. The legacy `-t` (`test/test`), `-p` (`production/pre`), and single positional output-directory forms remain supported.
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
256
271
|
## CLI: project skeleton
|
|
257
272
|
|
|
258
273
|
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 `components.async: ["VTable"]`). It also writes/updates host-project **`AGENTS.md`** with MVFrame Codex rules, including a requirement that AI send a completion message with `yarn exec mvframe-notify --once --message "..."` after each finished development task, 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 -n`** to start Vite with the notify service.
|
package/dist/css/cpt.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@charset "UTF-8";.MvcBtnGroup[data-v-085c7e56]{padding:.25rem;background:var(--color-group-bg);border-radius:var(--btn-radius);-webkit-user-select:none;user-select:none}.MvcBtnGroup i[data-v-085c7e56]{font-size:1rem}.MvcBtnGroup.sizeSmall[data-v-085c7e56]{padding:2px;border-radius:calc(var(--btn-radius, 1rem) / 2)}.MvcBtnGroup.sizeSmall i[data-v-085c7e56]{font-size:.75rem}.MvcBtnGroup.sizeSmall .btnItem[data-v-085c7e56]{padding:.25rem .625rem;font-size:.75rem;line-height:1.5;border-radius:.1875rem}.MvcBtnGroup.sizeLarge[data-v-085c7e56]{padding:.375rem;border-radius:.5rem}.MvcBtnGroup.sizeLarge i[data-v-085c7e56]{font-size:1.25rem}.MvcBtnGroup.sizeLarge .btnItem[data-v-085c7e56]{padding:.5rem 1.125rem;font-size:1rem;line-height:1.5;border-radius:.375rem}.MvcBtnGroup .btnItem[data-v-085c7e56]{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-085c7e56]:hover:not(:disabled):not(.isActive){background:var(--color-bg-menu-item-hover)}.MvcBtnGroup .btnItem.isActive[data-v-085c7e56]{color:var(--color-on-primary-text);background:var(--color-primary);position:relative;isolation:isolate}.MvcBtnGroup .btnItem.isActive[data-v-085c7e56]: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-085c7e56]:disabled{opacity:.5;cursor:not-allowed}.MvcCard[data-v-bdf05ab5]{position:relative;border:var(--border-d);border-radius:var(--card-radius);background:var(--mvframe-card-bg, var(--color-bg-page-header));box-sizing:border-box;transition:box-shadow var(--trans)}.MvcCard[data-v-bdf05ab5]:hover{box-shadow:0 .5rem .5rem color-mix(in srgb,var(--color-body) 6%,rgba(0,0,0,.05))}.MvcCard.MvcCard--fillParent[data-v-bdf05ab5]{display:flex;flex-direction:column;align-self:stretch;min-height:0;height:100%}.MvcCard .header[data-v-bdf05ab5]{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-bdf05ab5]{margin:0;font-size:.875rem;font-weight:700;color:var(--color-txt-h2)}.MvcCard .body[data-v-bdf05ab5]{position:relative;padding:1rem;min-height:1rem;overflow:auto;z-index:1}.MvcCard.MvcCard--fillParent .body[data-v-bdf05ab5]{flex:1 1 auto;min-height:0}.MvcCard .footer[data-v-bdf05ab5]{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-3bd55143]{position:absolute;top:0;left:0;bottom:0;width:1rem;display:flex;align-items:center;z-index:99}.dragArea .dragHandle[data-v-3bd55143]{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-3bd55143]:hover,.dragArea .dragHandle.active[data-v-3bd55143]{opacity:1;color:var(--color-white);background-color:var(--color-primary);box-shadow:.25rem 0 .5rem var(--color-dark1)}.dragArea:hover .dragHandle[data-v-3bd55143]{opacity:1}.MvcDrawerBody[data-v-33acb7b3]{position:relative;width:100%;overflow:hidden}.drawerFooter[data-v-33acb7b3]{background-image:linear-gradient(to top,50% var(--color-white),100 transparent)}.FrameTab .tabShadow[data-v-e9bf80ea]{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-e9bf80ea]{opacity:1}.FrameTab .tabArea[data-v-e9bf80ea]:after{content:"";position:absolute;top:2.175rem;left:0;right:0;border-bottom:var(--border-d);z-index:1}.FrameTab .tabItem[data-v-e9bf80ea]{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-e9bf80ea]:hover{opacity:.8}.FrameTab .tabItem.active[data-v-e9bf80ea]{opacity:1;border-block-end-color:var(--color-white);z-index:3;background-color:var(--color-bg-page-header)}.FrameTab .tabItem .abs[data-v-e9bf80ea]{transition:var(--trans-all);transform:translate(2.25rem)}.FrameTab .tabItem .abs[data-v-e9bf80ea]:hover{opacity:.8;color:var(--color-primary)}.FrameTab .tabItem.hoverItem.active[data-v-e9bf80ea]{padding-inline-end:2.25rem}.FrameTab .tabItem.hoverItem.active .abs[data-v-e9bf80ea]{transform:translate(-.375rem)}.FrameTab .tabItem.hoverItem[data-v-e9bf80ea]:hover{padding-inline-end:2.25rem}.FrameTab .tabItem.hoverItem:hover .abs[data-v-e9bf80ea]{transform:translate(-.375rem)}.FrameTab .tabItem.disabled[data-v-e9bf80ea]{opacity:.7;cursor:not-allowed}.FrameMenu[data-v-49ba8b1f]{width:12rem;background-color:var(--color-bg-menu);transition:width .3s ease-out;overflow:hidden}.FrameMenu[data-v-49ba8b1f]:after{content:"";position:absolute;top:0;right:0;bottom:0;border-right:var(--border-d)}.FrameMenu:hover .logomini[data-v-49ba8b1f]{opacity:.1}.FrameMenu:hover .collapseArea[data-v-49ba8b1f]{display:block!important}.FrameMenu .LogoArea .logomini[data-v-49ba8b1f]{display:none}.FrameMenu .collapseArea[data-v-49ba8b1f]{top:50%;right:1rem;height:1.25rem;width:1.24rem;transform:translateY(-50%)}.FrameMenu .MenuArea[data-v-49ba8b1f]{height:calc(100vh - 8rem)}.FrameMenu .MenuArea .menuItem[data-v-49ba8b1f]{height:2.75rem;transition:var(--trans-all)}.FrameMenu .MenuArea .menuItem[data-v-49ba8b1f]:hover{background-color:var(--color-bg-menu-item-hover)}.FrameMenu .MenuArea .menuItem.active[data-v-49ba8b1f]:hover{background-color:var(--color-primary);opacity:.8}.FrameMenu .MenuArea .menuItem.active .itemIcon[data-v-49ba8b1f]{color:var(--color-on-primary-text)}.FrameMenu .MenuArea .childrenItem[data-v-49ba8b1f]{transition:var(--trans-all)}.FrameMenu .MenuArea .childrenItem[data-v-49ba8b1f]:hover{background-color:var(--color-bg-menu-children-item-hover)}.FrameMenu .MenuArea .childrenItem.active[data-v-49ba8b1f]:hover{background-color:var(--color-primary);opacity:.8}.FrameMenu .MenuArea .itemChildrenArea[data-v-49ba8b1f]{background-color:var(--color-bg-menu-children)}.FrameMenu .MenuArea .itemTitle.active[data-v-49ba8b1f]{color:var(--color-on-primary-text)}.FrameMenu.collapse[data-v-49ba8b1f]{width:4rem}.FrameMenu.collapse .collapseArea[data-v-49ba8b1f]{right:1.5rem;display:none}.FrameMenu.collapse .LogoArea .logo[data-v-49ba8b1f]{display:none}.FrameMenu.collapse .LogoArea .logomini[data-v-49ba8b1f]{display:block;transition:opacity var(--trans)}.FrameMenu.collapse .MenuArea .menuItem.activeChild[data-v-49ba8b1f]{position:relative;isolation:isolate}.FrameMenu.collapse .MenuArea .menuItem.activeChild[data-v-49ba8b1f]: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-49ba8b1f]{display:none}.FrameFooter[data-v-a471ccbf]{display:flex;height:3rem;padding:.5rem 1rem;gap:.5rem;font-size:14px}.FrameRightMenu[data-v-388539e5]{position:fixed;z-index:3000;min-width:10rem;max-width:calc(100vw - 1rem);padding:.25rem;border:var(--border-d);border-radius:.375rem;background-color:var(--color-bg-menu);box-shadow:0 .75rem 2rem #00000024,0 .125rem .5rem #00000014;color:var(--color-txt-p);-webkit-user-select:none;user-select:none}.FrameRightMenu .menuItem[data-v-388539e5]{display:flex;align-items:center;gap:.5rem;width:100%;min-height:2rem;padding:0 .75rem;border:none;border-radius:.25rem;background:transparent;color:inherit;cursor:pointer;font-size:.75rem;line-height:1;text-align:left;transition:var(--trans-all);white-space:nowrap}.FrameRightMenu .menuItem[data-v-388539e5]:hover{background-color:var(--color-bg-menu-item-hover);color:var(--color-primary)}.FrameRightMenu .menuItem.disabled[data-v-388539e5]{color:var(--color-txt-gray);cursor:not-allowed;opacity:.6}.FrameRightMenu .menuItem.disabled[data-v-388539e5]:hover{background:transparent;color:var(--color-txt-gray)}.FrameRightMenu .menuIcon[data-v-388539e5]{flex-shrink:0;width:1rem;font-size:.875rem;line-height:1;text-align:center}.FrameRightMenu .menuLabel[data-v-388539e5]{overflow:hidden;text-overflow:ellipsis}.FrameRightMenu .menuDivider[data-v-388539e5]{height:1px;margin:.25rem;background-color:var(--color-border)}.FrameRightMenuFade-enter-active[data-v-388539e5],.FrameRightMenuFade-leave-active[data-v-388539e5]{transition:opacity var(--trans),transform var(--trans)}.FrameRightMenuFade-enter-from[data-v-388539e5],.FrameRightMenuFade-leave-to[data-v-388539e5]{opacity:0;transform:translateY(-.125rem)}.MvcFrame[data-v-5ae195c7]{display:flex}.MvcFrame .PageArea[data-v-5ae195c7]{flex-grow:1;position:relative;min-height:0}.MvcFieldInput.isNoBreak[data-v-20ebb61b] .el-input__wrapper,.MvcFieldInput.isNoBreak[data-v-20ebb61b] .el-input__inner,.MvcFieldInput.isNoBreak[data-v-20ebb61b] .el-input-group__prepend,.MvcFieldInput.isNoBreak[data-v-20ebb61b] .el-input-group__append{white-space:nowrap}.MvcList[data-v-cdd3bad5]{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-cdd3bad5]{position:relative;flex:1 1 auto;min-height:0;overflow:hidden}.MvcList .listScroll[data-v-cdd3bad5]{position:relative;box-sizing:border-box;height:100%;max-height:100%}.MvcList .listItem[data-v-cdd3bad5]{padding:.5rem;margin-block-end:.25rem}.MvcList .listItem[data-v-cdd3bad5]:last-child{margin-block-end:0}.MvcList .listItem[data-v-cdd3bad5]{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-cdd3bad5]:hover:not(.active):not(.isDisabled){background:var(--color-bg-menu-item-hover)}.MvcList .listItem.active[data-v-cdd3bad5]{position:sticky!important;top:0;color:var(--color-on-primary-text);z-index:9;-webkit-backdrop-filter:blur(.5rem);backdrop-filter:blur(.5rem);position:relative;isolation:isolate}.MvcList .listItem.active[data-v-cdd3bad5]: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-cdd3bad5]{opacity:.5;cursor:not-allowed}.MvcList.sizeSmall .listItem[data-v-cdd3bad5]{padding:.25rem .375rem;margin-block-end:.125rem;font-size:.6875rem;border-radius:.1875rem}.MvcList.sizeSmall .listItem[data-v-cdd3bad5]:last-child{margin-block-end:0}.MvcList.sizeLarge .listItem[data-v-cdd3bad5]{padding:.625rem .75rem;margin-block-end:.5rem;font-size:.875rem;border-radius:.375rem}.MvcList.sizeLarge .listItem[data-v-cdd3bad5]:last-child{margin-block-end:0}.loadingFade-enter-active[data-v-305a4676],.loadingFade-leave-active[data-v-305a4676]{transition:opacity var(--trans)}.loadingFade-enter-from[data-v-305a4676],.loadingFade-leave-to[data-v-305a4676]{opacity:0}.MvcLoading[data-v-305a4676]{pointer-events:auto;-webkit-backdrop-filter:blur(.25rem);backdrop-filter:blur(.25rem)}.loaderTxt[data-v-305a4676]{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}.MvcMention[data-v-a20420a4]{width:100%}.MvcFieldMention.isMaterialLabel:not(.isTextarea) .MvcFieldLabel[data-v-a20420a4]{background-color:var(--mv-field-label-bg)}.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-060130ad]{position:relative;display:flex;flex-direction:column;min-height:calc(100vh - 3rem);z-index:1}.MvcPage .PageHeader[data-v-060130ad]{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-060130ad]{margin:0}.MvcPage .PageHeader .PageHeaderSubTitle[data-v-060130ad]{margin:0;font-size:.875rem;color:var(--color-txt-p)}.MvcPage .PageBody[data-v-060130ad]{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 .PageHeader[data-v-060130ad]{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-467a9b5a] .el-textarea__inner{box-sizing:border-box}.MvcFieldTextarea>.el-input__count[data-v-467a9b5a]{position:absolute;inset-inline-end:.75rem;bottom:.375rem;z-index:1;color:var(--el-text-color-secondary);font-size:.75rem;line-height:1;pointer-events:none}.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-301fcbf7]{--btn-normal-padding: .375rem .875rem;--btn-active-padding: .375rem .875rem;padding:.25rem;background:var(--color-group-bg);border-radius:var(--btn-radius);-webkit-user-select:none;user-select:none}.MvcBtnGroup i[data-v-301fcbf7]{font-size:1rem}.MvcBtnGroup.sizeSmall[data-v-301fcbf7]{padding:2px;border-radius:calc(var(--btn-radius, 1rem) / 2)}.MvcBtnGroup.sizeSmall i[data-v-301fcbf7]{font-size:.75rem}.MvcBtnGroup.sizeSmall[data-v-301fcbf7]{--btn-normal-padding: .25rem .625rem;--btn-active-padding: .25rem .625rem}.MvcBtnGroup.sizeSmall .btnItem[data-v-301fcbf7]{padding:var(--btn-normal-padding);font-size:.75rem;line-height:1.5;border-radius:.1875rem}.MvcBtnGroup.sizeLarge[data-v-301fcbf7]{padding:.375rem;border-radius:.5rem}.MvcBtnGroup.sizeLarge i[data-v-301fcbf7]{font-size:1.25rem}.MvcBtnGroup.sizeLarge[data-v-301fcbf7]{--btn-normal-padding: .5rem 1.125rem;--btn-active-padding: .5rem 1.125rem}.MvcBtnGroup.sizeLarge .btnItem[data-v-301fcbf7]{padding:var(--btn-normal-padding);font-size:1rem;line-height:1.5;border-radius:.375rem}.MvcBtnGroup .btnItem[data-v-301fcbf7]{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;gap:.25rem;padding:var(--btn-normal-padding);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-301fcbf7]:hover:not(:disabled):not(.isActive){background:var(--color-bg-menu-item-hover)}.MvcBtnGroup .btnItem.isActive[data-v-301fcbf7]{padding:var(--btn-active-padding);color:var(--color-on-primary-text);background:var(--color-primary);position:relative;isolation:isolate}.MvcBtnGroup .btnItem.isActive[data-v-301fcbf7]: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-301fcbf7]:disabled{opacity:.5;cursor:not-allowed}.MvcCard[data-v-bdf05ab5]{position:relative;border:var(--border-d);border-radius:var(--card-radius);background:var(--mvframe-card-bg, var(--color-bg-page-header));box-sizing:border-box;transition:box-shadow var(--trans)}.MvcCard[data-v-bdf05ab5]:hover{box-shadow:0 .5rem .5rem color-mix(in srgb,var(--color-body) 6%,rgba(0,0,0,.05))}.MvcCard.MvcCard--fillParent[data-v-bdf05ab5]{display:flex;flex-direction:column;align-self:stretch;min-height:0;height:100%}.MvcCard .header[data-v-bdf05ab5]{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-bdf05ab5]{margin:0;font-size:.875rem;font-weight:700;color:var(--color-txt-h2)}.MvcCard .body[data-v-bdf05ab5]{position:relative;padding:1rem;min-height:1rem;overflow:auto;z-index:1}.MvcCard.MvcCard--fillParent .body[data-v-bdf05ab5]{flex:1 1 auto;min-height:0}.MvcCard .footer[data-v-bdf05ab5]{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-3bd55143]{position:absolute;top:0;left:0;bottom:0;width:1rem;display:flex;align-items:center;z-index:99}.dragArea .dragHandle[data-v-3bd55143]{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-3bd55143]:hover,.dragArea .dragHandle.active[data-v-3bd55143]{opacity:1;color:var(--color-white);background-color:var(--color-primary);box-shadow:.25rem 0 .5rem var(--color-dark1)}.dragArea:hover .dragHandle[data-v-3bd55143]{opacity:1}.MvcDrawerBody[data-v-33acb7b3]{position:relative;width:100%;overflow:hidden}.drawerFooter[data-v-33acb7b3]{background-image:linear-gradient(to top,50% var(--color-white),100 transparent)}.FrameTab .tabShadow[data-v-e9bf80ea]{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-e9bf80ea]{opacity:1}.FrameTab .tabArea[data-v-e9bf80ea]:after{content:"";position:absolute;top:2.175rem;left:0;right:0;border-bottom:var(--border-d);z-index:1}.FrameTab .tabItem[data-v-e9bf80ea]{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-e9bf80ea]:hover{opacity:.8}.FrameTab .tabItem.active[data-v-e9bf80ea]{opacity:1;border-block-end-color:var(--color-white);z-index:3;background-color:var(--color-bg-page-header)}.FrameTab .tabItem .abs[data-v-e9bf80ea]{transition:var(--trans-all);transform:translate(2.25rem)}.FrameTab .tabItem .abs[data-v-e9bf80ea]:hover{opacity:.8;color:var(--color-primary)}.FrameTab .tabItem.hoverItem.active[data-v-e9bf80ea]{padding-inline-end:2.25rem}.FrameTab .tabItem.hoverItem.active .abs[data-v-e9bf80ea]{transform:translate(-.375rem)}.FrameTab .tabItem.hoverItem[data-v-e9bf80ea]:hover{padding-inline-end:2.25rem}.FrameTab .tabItem.hoverItem:hover .abs[data-v-e9bf80ea]{transform:translate(-.375rem)}.FrameTab .tabItem.disabled[data-v-e9bf80ea]{opacity:.7;cursor:not-allowed}.FrameMenu[data-v-49ba8b1f]{width:12rem;background-color:var(--color-bg-menu);transition:width .3s ease-out;overflow:hidden}.FrameMenu[data-v-49ba8b1f]:after{content:"";position:absolute;top:0;right:0;bottom:0;border-right:var(--border-d)}.FrameMenu:hover .logomini[data-v-49ba8b1f]{opacity:.1}.FrameMenu:hover .collapseArea[data-v-49ba8b1f]{display:block!important}.FrameMenu .LogoArea .logomini[data-v-49ba8b1f]{display:none}.FrameMenu .collapseArea[data-v-49ba8b1f]{top:50%;right:1rem;height:1.25rem;width:1.24rem;transform:translateY(-50%)}.FrameMenu .MenuArea[data-v-49ba8b1f]{height:calc(100vh - 8rem)}.FrameMenu .MenuArea .menuItem[data-v-49ba8b1f]{height:2.75rem;transition:var(--trans-all)}.FrameMenu .MenuArea .menuItem[data-v-49ba8b1f]:hover{background-color:var(--color-bg-menu-item-hover)}.FrameMenu .MenuArea .menuItem.active[data-v-49ba8b1f]:hover{background-color:var(--color-primary);opacity:.8}.FrameMenu .MenuArea .menuItem.active .itemIcon[data-v-49ba8b1f]{color:var(--color-on-primary-text)}.FrameMenu .MenuArea .childrenItem[data-v-49ba8b1f]{transition:var(--trans-all)}.FrameMenu .MenuArea .childrenItem[data-v-49ba8b1f]:hover{background-color:var(--color-bg-menu-children-item-hover)}.FrameMenu .MenuArea .childrenItem.active[data-v-49ba8b1f]:hover{background-color:var(--color-primary);opacity:.8}.FrameMenu .MenuArea .itemChildrenArea[data-v-49ba8b1f]{background-color:var(--color-bg-menu-children)}.FrameMenu .MenuArea .itemTitle.active[data-v-49ba8b1f]{color:var(--color-on-primary-text)}.FrameMenu.collapse[data-v-49ba8b1f]{width:4rem}.FrameMenu.collapse .collapseArea[data-v-49ba8b1f]{right:1.5rem;display:none}.FrameMenu.collapse .LogoArea .logo[data-v-49ba8b1f]{display:none}.FrameMenu.collapse .LogoArea .logomini[data-v-49ba8b1f]{display:block;transition:opacity var(--trans)}.FrameMenu.collapse .MenuArea .menuItem.activeChild[data-v-49ba8b1f]{position:relative;isolation:isolate}.FrameMenu.collapse .MenuArea .menuItem.activeChild[data-v-49ba8b1f]: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-49ba8b1f]{display:none}.FrameFooter[data-v-a471ccbf]{display:flex;height:3rem;padding:.5rem 1rem;gap:.5rem;font-size:14px}.FrameRightMenu[data-v-388539e5]{position:fixed;z-index:3000;min-width:10rem;max-width:calc(100vw - 1rem);padding:.25rem;border:var(--border-d);border-radius:.375rem;background-color:var(--color-bg-menu);box-shadow:0 .75rem 2rem #00000024,0 .125rem .5rem #00000014;color:var(--color-txt-p);-webkit-user-select:none;user-select:none}.FrameRightMenu .menuItem[data-v-388539e5]{display:flex;align-items:center;gap:.5rem;width:100%;min-height:2rem;padding:0 .75rem;border:none;border-radius:.25rem;background:transparent;color:inherit;cursor:pointer;font-size:.75rem;line-height:1;text-align:left;transition:var(--trans-all);white-space:nowrap}.FrameRightMenu .menuItem[data-v-388539e5]:hover{background-color:var(--color-bg-menu-item-hover);color:var(--color-primary)}.FrameRightMenu .menuItem.disabled[data-v-388539e5]{color:var(--color-txt-gray);cursor:not-allowed;opacity:.6}.FrameRightMenu .menuItem.disabled[data-v-388539e5]:hover{background:transparent;color:var(--color-txt-gray)}.FrameRightMenu .menuIcon[data-v-388539e5]{flex-shrink:0;width:1rem;font-size:.875rem;line-height:1;text-align:center}.FrameRightMenu .menuLabel[data-v-388539e5]{overflow:hidden;text-overflow:ellipsis}.FrameRightMenu .menuDivider[data-v-388539e5]{height:1px;margin:.25rem;background-color:var(--color-border)}.FrameRightMenuFade-enter-active[data-v-388539e5],.FrameRightMenuFade-leave-active[data-v-388539e5]{transition:opacity var(--trans),transform var(--trans)}.FrameRightMenuFade-enter-from[data-v-388539e5],.FrameRightMenuFade-leave-to[data-v-388539e5]{opacity:0;transform:translateY(-.125rem)}.MvcFrame[data-v-5ae195c7]{display:flex}.MvcFrame .PageArea[data-v-5ae195c7]{flex-grow:1;position:relative;min-height:0}.MvcFieldInput.isNoBreak[data-v-20ebb61b] .el-input__wrapper,.MvcFieldInput.isNoBreak[data-v-20ebb61b] .el-input__inner,.MvcFieldInput.isNoBreak[data-v-20ebb61b] .el-input-group__prepend,.MvcFieldInput.isNoBreak[data-v-20ebb61b] .el-input-group__append{white-space:nowrap}.MvcList[data-v-cdd3bad5]{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-cdd3bad5]{position:relative;flex:1 1 auto;min-height:0;overflow:hidden}.MvcList .listScroll[data-v-cdd3bad5]{position:relative;box-sizing:border-box;height:100%;max-height:100%}.MvcList .listItem[data-v-cdd3bad5]{padding:.5rem;margin-block-end:.25rem}.MvcList .listItem[data-v-cdd3bad5]:last-child{margin-block-end:0}.MvcList .listItem[data-v-cdd3bad5]{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-cdd3bad5]:hover:not(.active):not(.isDisabled){background:var(--color-bg-menu-item-hover)}.MvcList .listItem.active[data-v-cdd3bad5]{position:sticky!important;top:0;color:var(--color-on-primary-text);z-index:9;-webkit-backdrop-filter:blur(.5rem);backdrop-filter:blur(.5rem);position:relative;isolation:isolate}.MvcList .listItem.active[data-v-cdd3bad5]: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-cdd3bad5]{opacity:.5;cursor:not-allowed}.MvcList.sizeSmall .listItem[data-v-cdd3bad5]{padding:.25rem .375rem;margin-block-end:.125rem;font-size:.6875rem;border-radius:.1875rem}.MvcList.sizeSmall .listItem[data-v-cdd3bad5]:last-child{margin-block-end:0}.MvcList.sizeLarge .listItem[data-v-cdd3bad5]{padding:.625rem .75rem;margin-block-end:.5rem;font-size:.875rem;border-radius:.375rem}.MvcList.sizeLarge .listItem[data-v-cdd3bad5]:last-child{margin-block-end:0}.loadingFade-enter-active[data-v-305a4676],.loadingFade-leave-active[data-v-305a4676]{transition:opacity var(--trans)}.loadingFade-enter-from[data-v-305a4676],.loadingFade-leave-to[data-v-305a4676]{opacity:0}.MvcLoading[data-v-305a4676]{pointer-events:auto;-webkit-backdrop-filter:blur(.25rem);backdrop-filter:blur(.25rem)}.loaderTxt[data-v-305a4676]{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}.MvcMention[data-v-a20420a4]{width:100%}.MvcFieldMention.isMaterialLabel:not(.isTextarea) .MvcFieldLabel[data-v-a20420a4]{background-color:var(--mv-field-label-bg)}.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-060130ad]{position:relative;display:flex;flex-direction:column;min-height:calc(100vh - 3rem);z-index:1}.MvcPage .PageHeader[data-v-060130ad]{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-060130ad]{margin:0}.MvcPage .PageHeader .PageHeaderSubTitle[data-v-060130ad]{margin:0;font-size:.875rem;color:var(--color-txt-p)}.MvcPage .PageBody[data-v-060130ad]{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 .PageHeader[data-v-060130ad]{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-467a9b5a] .el-textarea__inner{box-sizing:border-box}.MvcFieldTextarea>.el-input__count[data-v-467a9b5a]{position:absolute;inset-inline-end:.75rem;bottom:.375rem;z-index:1;color:var(--el-text-color-secondary);font-size:.75rem;line-height:1;pointer-events:none}.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/vendor.js
CHANGED
|
@@ -9966,7 +9966,7 @@ const Se = (a) => {
|
|
|
9966
9966
|
], 10, fn))), 128))
|
|
9967
9967
|
], 16));
|
|
9968
9968
|
}
|
|
9969
|
-
}), gn = /* @__PURE__ */ ne(_n, [["__scopeId", "data-v-
|
|
9969
|
+
}), gn = /* @__PURE__ */ ne(_n, [["__scopeId", "data-v-301fcbf7"]]), yn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
9970
9970
|
__proto__: null,
|
|
9971
9971
|
default: gn
|
|
9972
9972
|
}, Symbol.toStringTag, { value: "Module" })), An = {
|
|
@@ -13958,7 +13958,7 @@ const Wr = (a, o = {}) => {
|
|
|
13958
13958
|
}, qr = {
|
|
13959
13959
|
name: "Matt Avias Frame",
|
|
13960
13960
|
copyright: "©2026",
|
|
13961
|
-
version: "1.1.
|
|
13961
|
+
version: "1.1.33",
|
|
13962
13962
|
author: "Matt Avias",
|
|
13963
13963
|
date: "2026-02-26",
|
|
13964
13964
|
/** 默认语言 key,与 `$getLang`、localStorage `lang` 一致;业务在 app.use(mvframe, { config }) 里覆盖 */
|
package/package.json
CHANGED
package/scripts/build-host.js
CHANGED
|
@@ -3,17 +3,34 @@
|
|
|
3
3
|
* 宿主 Vite 工程:打包后写入与 mstar 一致的 `serve.json`(SPA 回写 index.html)。
|
|
4
4
|
*
|
|
5
5
|
* 在宿主 `package.json` 中增加:`"b": "mvframe-b"`
|
|
6
|
-
* 然后执行 `yarn b
|
|
6
|
+
* 然后执行 `yarn b`、`yarn b pre`、`yarn b pd`,或传入自定义 mode / outDir。
|
|
7
7
|
*
|
|
8
8
|
* - 默认:--mode development,输出目录 `dev`
|
|
9
9
|
* - `-t`:--mode test,输出 `test`
|
|
10
|
-
* - `-p
|
|
11
|
-
* -
|
|
10
|
+
* - `-p`:兼容旧行为,--mode production,输出 `pre`
|
|
11
|
+
* - `pre` / `--pre`:--mode pre,输出 `pre`,加载 `.env.pre*`
|
|
12
|
+
* - `pd` / `--pd`:--mode production,输出 `pd`,加载 `.env.production*`
|
|
13
|
+
* - `--mode <mode>` / `--outDir <dir>`:自定义 Vite mode 与输出目录
|
|
14
|
+
* - 一个普通位置参数:兼容旧行为,作为自定义输出目录
|
|
12
15
|
*/
|
|
13
16
|
const { spawnSync } = require("child_process");
|
|
14
17
|
const fs = require("fs");
|
|
15
18
|
const path = require("path");
|
|
16
19
|
const { copyFlagAssetsTo } = require("./flag-assets.js");
|
|
20
|
+
const USAGE = `用法:
|
|
21
|
+
mvframe-b
|
|
22
|
+
mvframe-b pre | --pre
|
|
23
|
+
mvframe-b pd | --pd
|
|
24
|
+
mvframe-b [outDir] [-t|-p]
|
|
25
|
+
mvframe-b [--mode <mode>] [--outDir <dir>]
|
|
26
|
+
|
|
27
|
+
快捷模式:
|
|
28
|
+
pre / --pre mode=pre, outDir=pre
|
|
29
|
+
pd / --pd mode=production, outDir=pd
|
|
30
|
+
|
|
31
|
+
兼容模式:
|
|
32
|
+
-t mode=test, outDir=test
|
|
33
|
+
-p mode=production, outDir=pre`;
|
|
17
34
|
const SERVE_JSON = `{
|
|
18
35
|
"rewrites": [{
|
|
19
36
|
"source": "**",
|
|
@@ -21,48 +38,88 @@ const SERVE_JSON = `{
|
|
|
21
38
|
}]
|
|
22
39
|
}`;
|
|
23
40
|
|
|
24
|
-
function
|
|
41
|
+
function argumentError(message) {
|
|
42
|
+
const error = new Error(`${message}\n\n${USAGE}`);
|
|
43
|
+
error.name = "MvframeBuildArgumentError";
|
|
44
|
+
return error;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function readOptionValue(args, index, option) {
|
|
48
|
+
const value = args[index + 1];
|
|
49
|
+
if (!value || value.startsWith("-")) {
|
|
50
|
+
throw argumentError(`[mvframe-b] ${option} 缺少参数值`);
|
|
51
|
+
}
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function parseArgs(argv, logger = console) {
|
|
25
56
|
const args = argv.slice(2);
|
|
26
57
|
let mode = "development";
|
|
27
58
|
let outDir = "dev";
|
|
28
|
-
let preset =
|
|
59
|
+
let preset = "";
|
|
60
|
+
let explicitOutDir = false;
|
|
61
|
+
let help = false;
|
|
29
62
|
const positional = [];
|
|
30
63
|
|
|
31
|
-
for (
|
|
32
|
-
|
|
64
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
65
|
+
const arg = args[index];
|
|
66
|
+
|
|
67
|
+
if (arg === "-h" || arg === "--help") {
|
|
68
|
+
help = true;
|
|
69
|
+
} else if (arg === "-t") {
|
|
33
70
|
mode = "test";
|
|
34
71
|
outDir = "test";
|
|
35
|
-
preset =
|
|
36
|
-
} else if (
|
|
72
|
+
preset = "-t";
|
|
73
|
+
} else if (arg === "-p") {
|
|
37
74
|
mode = "production";
|
|
38
75
|
outDir = "pre";
|
|
39
|
-
preset =
|
|
40
|
-
} else if (
|
|
41
|
-
|
|
42
|
-
|
|
76
|
+
preset = "-p";
|
|
77
|
+
} else if (arg === "pre" || arg === "--pre") {
|
|
78
|
+
mode = "pre";
|
|
79
|
+
outDir = "pre";
|
|
80
|
+
preset = "pre";
|
|
81
|
+
} else if (arg === "pd" || arg === "--pd") {
|
|
82
|
+
mode = "production";
|
|
83
|
+
outDir = "pd";
|
|
84
|
+
preset = "pd";
|
|
85
|
+
} else if (arg === "--mode") {
|
|
86
|
+
mode = readOptionValue(args, index, "--mode");
|
|
87
|
+
index += 1;
|
|
88
|
+
} else if (arg.startsWith("--mode=")) {
|
|
89
|
+
mode = arg.slice("--mode=".length);
|
|
90
|
+
if (!mode) throw argumentError("[mvframe-b] --mode 缺少参数值");
|
|
91
|
+
} else if (arg === "--outDir" || arg === "--out-dir") {
|
|
92
|
+
outDir = readOptionValue(args, index, arg);
|
|
93
|
+
explicitOutDir = true;
|
|
94
|
+
index += 1;
|
|
95
|
+
} else if (arg.startsWith("--outDir=") || arg.startsWith("--out-dir=")) {
|
|
96
|
+
outDir = arg.slice(arg.indexOf("=") + 1);
|
|
97
|
+
if (!outDir) throw argumentError("[mvframe-b] --outDir 缺少参数值");
|
|
98
|
+
explicitOutDir = true;
|
|
99
|
+
} else if (arg.startsWith("-")) {
|
|
100
|
+
throw argumentError(`[mvframe-b] 未知参数: ${arg}`);
|
|
43
101
|
} else {
|
|
44
|
-
positional.push(
|
|
102
|
+
positional.push(arg);
|
|
45
103
|
}
|
|
46
104
|
}
|
|
47
105
|
|
|
48
106
|
if (positional.length > 1) {
|
|
49
|
-
|
|
50
|
-
|
|
107
|
+
throw argumentError(
|
|
108
|
+
`[mvframe-b] 最多只能传入一个自定义输出目录: ${positional.join(" ")}`,
|
|
51
109
|
);
|
|
52
|
-
process.exit(1);
|
|
53
110
|
}
|
|
54
111
|
|
|
55
112
|
if (positional.length === 1) {
|
|
56
|
-
if (preset) {
|
|
57
|
-
|
|
58
|
-
`[mvframe-b]
|
|
113
|
+
if (preset || explicitOutDir) {
|
|
114
|
+
logger.warn(
|
|
115
|
+
`[mvframe-b] 已指定 ${preset || "--outDir"},忽略输出目录参数 "${positional[0]}",实际输出: ${outDir}`,
|
|
59
116
|
);
|
|
60
117
|
} else {
|
|
61
118
|
outDir = positional[0];
|
|
62
119
|
}
|
|
63
120
|
}
|
|
64
121
|
|
|
65
|
-
return { mode, outDir };
|
|
122
|
+
return { mode, outDir, help };
|
|
66
123
|
}
|
|
67
124
|
|
|
68
125
|
/**
|
|
@@ -93,11 +150,39 @@ function copyFlagAssets(outAbs) {
|
|
|
93
150
|
console.log(`[mvframe-b] 已复制 ${path.relative(outAbs, dest)}`);
|
|
94
151
|
}
|
|
95
152
|
|
|
153
|
+
function projectNameFrom(cwd) {
|
|
154
|
+
return path.basename(path.resolve(cwd));
|
|
155
|
+
}
|
|
156
|
+
|
|
96
157
|
function main() {
|
|
97
158
|
const cwd = process.cwd();
|
|
98
|
-
|
|
159
|
+
let options;
|
|
160
|
+
|
|
161
|
+
try {
|
|
162
|
+
options = parseArgs(process.argv);
|
|
163
|
+
} catch (error) {
|
|
164
|
+
if (error?.name === "MvframeBuildArgumentError") {
|
|
165
|
+
console.error(error.message);
|
|
166
|
+
process.exit(1);
|
|
167
|
+
}
|
|
168
|
+
throw error;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
if (options.help) {
|
|
172
|
+
console.log(USAGE);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
const { mode, outDir } = options;
|
|
177
|
+
const projectName = projectNameFrom(cwd);
|
|
99
178
|
const viteEntry = resolveViteCli(cwd);
|
|
100
|
-
const env = {
|
|
179
|
+
const env = {
|
|
180
|
+
...process.env,
|
|
181
|
+
NODE_ENV: "production",
|
|
182
|
+
MVFRAME_PROJECT_NAME: projectName,
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
console.log(`[mvframe-b] 项目: ${projectName}; mode: ${mode}; outDir: ${outDir}`);
|
|
101
186
|
const child = spawnSync(
|
|
102
187
|
process.execPath,
|
|
103
188
|
[viteEntry, "build", "--outDir", outDir, "--mode", mode],
|
|
@@ -114,4 +199,10 @@ function main() {
|
|
|
114
199
|
console.log(`[mvframe-b] 已写入 ${path.relative(cwd, servePath)}`);
|
|
115
200
|
}
|
|
116
201
|
|
|
117
|
-
main();
|
|
202
|
+
if (require.main === module) main();
|
|
203
|
+
|
|
204
|
+
module.exports = {
|
|
205
|
+
parseArgs,
|
|
206
|
+
projectNameFrom,
|
|
207
|
+
USAGE,
|
|
208
|
+
};
|