From 3da8974001c23952499cc9a9c141725ae24fc2e6 Mon Sep 17 00:00:00 2001 From: lzq <2495532633@qq.com> Date: Wed, 14 Jan 2026 16:48:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E4=BF=AE=E6=94=B9=EF=BC=8C?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E7=BB=84=E4=BB=B6=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 2 + package-lock.json | 34 +- package.json | 2 + src/assets/scss/el-dark.scss | 2 + src/assets/scss/el-light.scss | 34 ++ src/assets/scss/el-ui.scss | 569 ++++++++++++++++++ src/assets/scss/index.scss | 1 + src/assets/scss/mixin.scss | 153 +++++ src/assets/scss/reset.scss | 50 ++ src/common/element/element.ts | 1 + src/common/utils/index.ts | 66 +- src/components/a-drop-table/ADropTable.vue | 2 +- src/components/a-icon/iconfont.css | 10 +- src/components/a-icon/iconfont.json | 7 + src/components/a-icon/iconfont.ts | 7 + src/components/a-icon/iconfont.ttf | Bin 20156 -> 20372 bytes src/components/a-icon/iconfont.woff | Bin 12808 -> 12952 bytes src/components/a-icon/iconfont.woff2 | Bin 10896 -> 11024 bytes src/components/page/FormPage.vue | 484 +++++++++++++++ src/components/page/Page.vue | 9 +- src/dts/components.d.ts | 11 +- src/dts/g.d.ts | 2 +- src/main.ts | 3 +- src/pages/a-frame/AAside.tsx | 2 +- src/pages/a-frame/AFrame.vue | 48 +- src/pages/cst/customer/Customer.vue | 254 ++------ src/pages/cst/driver/Driver.vue | 261 +++----- src/pages/cst/org/Org.vue | 237 ++------ src/pages/cst/project/Project.vue | 241 ++------ src/pages/cst/station/Station.vue | 284 ++++----- src/pages/cst/truck/Truck.vue | 221 ++----- .../gds/goods-category/GoodsCategory.vue | 225 +++---- src/pages/gds/goods/Goods.vue | 285 +++------ src/pages/mfg/craft/Craft.vue | 190 ++---- src/pages/sys/dict/Dict.vue | 10 +- src/pages/sys/dict/DictCategory.vue | 2 +- src/pages/sys/endpoint/Endpoint.vue | 168 ++---- src/pages/sys/gen/db-table/DbTable.vue | 161 +---- src/pages/sys/gen/tpl/Tpl.vue | 237 ++------ src/pages/sys/menus/Menus.vue | 40 +- src/pages/sys/role/Role.vue | 263 +++----- src/pages/sys/sn-config/SnConfig.vue | 234 +++---- src/pages/sys/task/Task.vue | 307 ++++------ src/pages/sys/task/task.d.ts | 1 + src/pages/sys/user/User.vue | 241 +++----- src/pages/wh/in-order/InOrder.vue | 278 +++------ src/pages/wh/inventory/Inventory.vue | 268 +++------ src/pages/wh/out-order/OutOrder.vue | 303 ++++------ src/pages/wh/purchase-order/PurchaseOrder.vue | 281 +++------ src/pages/wh/sales-order/SalesOrder.vue | 283 ++++----- src/pages/wh/warehouse/Warehouse.vue | 253 ++++---- vite.config.ts | 45 +- 52 files changed, 3193 insertions(+), 3879 deletions(-) create mode 100644 src/assets/scss/el-dark.scss create mode 100644 src/assets/scss/el-light.scss create mode 100644 src/assets/scss/el-ui.scss create mode 100644 src/assets/scss/index.scss create mode 100644 src/assets/scss/mixin.scss create mode 100644 src/assets/scss/reset.scss create mode 100644 src/components/page/FormPage.vue diff --git a/.env.development b/.env.development index 1f20bb3..85ee64f 100644 --- a/.env.development +++ b/.env.development @@ -1,3 +1,5 @@ +# 应用名称 +VITE_APP_NAME=(开发环境)再昇云收运处平台 # 后台服务地址 # VITE_HTTP_PROXY_TARGET=http://localhost:10086 # VITE_HTTP_PROXY_TARGET=http://192.168.2.124:10086 diff --git a/package-lock.json b/package-lock.json index ccd1524..db8d594 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,6 +31,7 @@ "colorette": "^2.0.20", "fflate": "^0.8.2", "filesize": "^11.0.2", + "sass": "^1.97.2", "stylus": "^0.64.0", "typescript": "~5.8.3", "typescript-plugin-css-modules": "^5.2.0", @@ -39,6 +40,7 @@ "unplugin-vue-components": "^29.0.0", "vite": "^7.1.2", "vite-plugin-vue-devtools": "^8.0.1", + "vue-component-type-helpers": "^3.2.2", "vue-tsc": "^3.0.5" } }, @@ -80,6 +82,7 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -1062,6 +1065,7 @@ "integrity": "sha512-lLt8KLHyl7IClc3RqRpRikz15eCfTRlAWL9leVzPyg5N87FfKE/7EWgWvpiL/z4Tf3dQCIqQb88TmHE0JTIDvA==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "c12": "^3.3.1", "consola": "^3.4.2", @@ -1773,6 +1777,7 @@ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", "license": "MIT", + "peer": true, "dependencies": { "@types/lodash": "*" } @@ -1790,6 +1795,7 @@ "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -2443,6 +2449,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.25", "caniuse-lite": "^1.0.30001754", @@ -3740,13 +3747,15 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash-es": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash-unified": { "version": "1.0.3", @@ -4243,6 +4252,7 @@ "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.4.tgz", "integrity": "sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==", "license": "MIT", + "peer": true, "dependencies": { "@vue/devtools-api": "^7.7.7" }, @@ -4315,6 +4325,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -4598,9 +4609,9 @@ "optional": true }, "node_modules/sass": { - "version": "1.94.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.94.2.tgz", - "integrity": "sha512-N+7WK20/wOr7CzA2snJcUSSNTCzeCGUTFY3OgeQP3mZ1aj9NMQ0mSTXwlrnd89j33zzQJGqIN52GIOmYrfq46A==", + "version": "1.97.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.2.tgz", + "integrity": "sha512-y5LWb0IlbO4e97Zr7c3mlpabcbBtS+ieiZ9iwDooShpFKWXf62zz5pEPdwrLYm+Bxn1fnbwFGzHuCLSA9tBmrw==", "dev": true, "license": "MIT", "dependencies": { @@ -4933,6 +4944,7 @@ "integrity": "sha512-ZIdT8eUv8tegmqy1tTIdJv9We2DumkNZFdCF5mz/Kpq3OcTaxSuCAYZge6HKK2CmNC02G1eJig2RV7XTw5hQrA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@adobe/css-tools": "~4.3.3", "debug": "^4.3.2", @@ -5013,6 +5025,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "devOptional": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -5070,6 +5083,7 @@ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "devOptional": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -5532,6 +5546,7 @@ "integrity": "sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -5822,6 +5837,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -5841,6 +5857,7 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.25.tgz", "integrity": "sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g==", "license": "MIT", + "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.25", "@vue/compiler-sfc": "3.5.25", @@ -5857,6 +5874,13 @@ } } }, + "node_modules/vue-component-type-helpers": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-3.2.2.tgz", + "integrity": "sha512-x8C2nx5XlUNM0WirgfTkHjJGO/ABBxlANZDtHw2HclHtQnn+RFPTnbjMJn8jHZW4TlUam0asHcA14lf1C6Jb+A==", + "dev": true, + "license": "MIT" + }, "node_modules/vue-router": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.3.tgz", diff --git a/package.json b/package.json index 8291fda..b1def08 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "colorette": "^2.0.20", "fflate": "^0.8.2", "filesize": "^11.0.2", + "sass": "^1.97.2", "stylus": "^0.64.0", "typescript": "~5.8.3", "typescript-plugin-css-modules": "^5.2.0", @@ -41,6 +42,7 @@ "unplugin-vue-components": "^29.0.0", "vite": "^7.1.2", "vite-plugin-vue-devtools": "^8.0.1", + "vue-component-type-helpers": "^3.2.2", "vue-tsc": "^3.0.5" } } diff --git a/src/assets/scss/el-dark.scss b/src/assets/scss/el-dark.scss new file mode 100644 index 0000000..8f81cdf --- /dev/null +++ b/src/assets/scss/el-dark.scss @@ -0,0 +1,2 @@ +// 导入暗黑主题 +@use 'element-plus/theme-chalk/src/dark/css-vars.scss' as *; diff --git a/src/assets/scss/el-light.scss b/src/assets/scss/el-light.scss new file mode 100644 index 0000000..ea06e9e --- /dev/null +++ b/src/assets/scss/el-light.scss @@ -0,0 +1,34 @@ +// https://github.com/element-plus/element-plus/blob/dev/packages/theme-chalk/src/common/var.scss +// 自定义Element 亮色主题 + +@forward 'element-plus/theme-chalk/src/common/var.scss' with ( + $colors: ( + 'white': #FFFFFF, + 'black': #000000, + 'success': ( + 'base': #13DEB9 + ), + 'warning': ( + 'base': #FFAE1F + ), + 'danger': ( + 'base': #FF4D4F + ), + 'error': ( + 'base': #CF171D + ) + ), + $button: ( + 'hover-bg-color': var(--el-color-primary-light-9), + 'hover-border-color': var(--el-color-primary), + 'border-color': var(--el-color-primary), + 'text-color': var(--el-color-primary) + ), + $messagebox: ( + 'border-radius': '12px' + ), + $popover: ( + 'padding': '14px', + 'border-radius': '10px' + ) +); diff --git a/src/assets/scss/el-ui.scss b/src/assets/scss/el-ui.scss new file mode 100644 index 0000000..7758dfd --- /dev/null +++ b/src/assets/scss/el-ui.scss @@ -0,0 +1,569 @@ +// 优化 Element Plus 组件库默认样式 + +:root { + --custom-radius: 5px; + // 系统主色 + --main-color: #1C6EFF; + --el-color-white: white !important; + --el-color-black: white !important; + --el-color-primary: #1C6EFF; + --el-button-hover-bg-color: #458FFF; + --el-button-hover-border-color: #458FFF; + --el-color-primary-light-3: #458FFF; + --el-color-danger: #CF171D; + // 输入框边框颜色 + // --el-border-color: #E4E4E7 !important; // DCDFE6 + // 按钮粗度 + --el-font-weight-primary: 400 !important; + + --el-component-custom-height: 32px !important; + + --el-component-size: var(--el-component-custom-height) !important; + + // 边框、按钮圆角... + --el-border-radius-base: calc(var(--custom-radius) / 3 + 2px) !important; + + --el-border-radius-small: calc(var(--custom-radius) / 3 + 4px) !important; + --el-messagebox-border-radius: calc(var(--custom-radius) / 3 + 4px) !important; + --el-popover-border-radius: calc(var(--custom-radius) / 3 + 4px) !important; + + .region .el-radio-button__original-radio:checked + .el-radio-button__inner { + color: var(--theme-color); + } +} + +// 优化 el-form-item 标签高度 +.el-form-item__label { + height: var(--el-component-custom-height) !important; + line-height: var(--el-component-custom-height) !important; +} + +// 日期选择器 +.el-date-range-picker { + --el-datepicker-inrange-bg-color: var(--art-gray-200) !important; +} + +// el-card 背景色跟系统背景色保持一致 +html.dark .el-card { + --el-card-bg-color: var(--default-box-color) !important; +} + +.el-pagination { + justify-content: center; + + .el-pager { + li { + box-sizing: border-box; + font-weight: 400 !important; + border: 1px solid #E6EAEB; + transition: border-color 0.15s; + padding: 0 10px !important; + + &:not(.is-active) { + background-color: transparent !important; + } + + &:hover { + border-color: var(--main-color) !important; + } + } + } + + .el-pagination__jump { + .el-input { + height: 32px; + } + } +} + + +// 优化菜单折叠展开动画(提升动画流畅度) +.el-menu.el-menu--inline { + transition: max-height 0.26s cubic-bezier(0.4, 0, 0.2, 1) !important; +} + +.el-sub-menu { + position: relative; +} + +.el-sub-menu .el-sub-menu__icon-arrow { + position: absolute; + top: 50%; + right: var(--el-menu-base-level-padding); + margin-top: -6px; + transition: transform var(--el-transition-duration); + font-size: 12px; + margin-right: 0; + display: block; + width: auto; +} + +// 优化菜单 item hover 动画(提升鼠标跟手感) +.el-sub-menu__title, +.el-menu-item { + height: 42px !important; + margin-bottom: 4px; + line-height: 42px !important; + transition: background-color 0s !important; + width: calc(100% - 16px); + margin-left: 8px; + border-radius: 6px; + + &:hover { + background-color: #F2F4F5 !important; + } +} + +.menus:not(.el-menu--collapse) { + width: 230px; +} + +.el-menu--collapse { + width: calc(16px + var(--el-menu-icon-width) + var(--el-menu-base-level-padding) * 2); +} + +.el-menu-item.is-active { + background-color: rgb(238, 243, 255); +} + +// -------------------------------- 修改 el-size=default 组件默认高度 start -------------------------------- +// 修改 el-button 高度 +.el-button--default { + height: var(--el-component-custom-height) !important; +} + +// circle 按钮宽度优化 +.el-button--default.is-circle { + width: var(--el-component-custom-height) !important; +} + +// 修改 el-select 高度 +.el-select--default { + .el-select__wrapper { + min-height: var(--el-component-custom-height) !important; + } +} + +// 修改 el-checkbox-button 高度 +.el-checkbox-button--default .el-checkbox-button__inner, + // 修改 el-radio-button 高度 +.el-radio-button--default .el-radio-button__inner { + padding: 10px 15px !important; +} + +.el-scrollbar__bar.is-vertical { + width: 4px; +} + +// -------------------------------- 修改 el-size=default 组件默认高度 end -------------------------------- + +.el-pagination.is-background .btn-next, +.el-pagination.is-background .btn-prev, +.el-pagination.is-background .el-pager li { + border-radius: 6px; +} + +.el-popover { + min-width: 80px; + border-radius: var(--el-border-radius-small) !important; +} + +.el-dialog { + border-radius: 100px !important; + border-radius: calc(var(--custom-radius) / 1.2 + 2px) !important; + overflow: hidden; +} + +.el-dialog__header { + .el-dialog__title { + font-size: 16px; + } +} + +.el-dialog__body { + padding: 25px 0 !important; + position: relative; // 为了兼容 el-pagination 样式,需要设置 relative,不然会影响 el-pagination 的样式,比如 el-pagination__jump--small 会被影响,导致 el-pagination__jump--small 按钮无法点击,详见 URL_ADDRESS.com/element-plus/element-plus/issues/5684#issuecomment-1176299275; +} + +.el-dialog.el-dialog-border { + .el-dialog__body { + // 上边框 + &::before, + // 下边框 + &::after { + content: ''; + position: absolute; + left: -16px; + width: calc(100% + 32px); + height: 1px; + background-color: var(--art-gray-300); + } + + &::before { + top: 0; + } + + &::after { + bottom: 0; + } + } +} + +// el-message 样式优化 +.el-message { + background-color: var(--default-box-color) !important; + border: 0 !important; + box-shadow: 0 6px 16px 0 rgba(0, 0, 0, 0.08), + 0 3px 6px -4px rgba(0, 0, 0, 0.12), + 0 9px 28px 8px rgba(0, 0, 0, 0.05) !important; + + p { + font-size: 13px; + } +} + +// 修改 el-dropdown 样式 +.el-dropdown-menu { + padding: 6px !important; + border-radius: 10px !important; + border: none !important; + + .el-dropdown-menu__item { + padding: 6px 16px !important; + border-radius: 6px !important; + + &:hover:not(.is-disabled) { + color: var(--art-gray-900) !important; + background-color: var(--art-el-active-color) !important; + } + + &:focus:not(.is-disabled) { + color: var(--art-gray-900) !important; + background-color: var(--art-gray-200) !important; + } + } +} + +// 隐藏 select、dropdown 的三角 +.el-select__popper, +.el-dropdown__popper { + margin-top: -6px !important; + + .el-popper__arrow { + display: none; + } +} + +.el-dropdown-selfdefine:focus { + outline: none !important; +} + +// 处理移动端组件兼容性 +@media screen and (max-width: 640px) { + .el-message-box, + .el-dialog { + width: calc(100% - 24px) !important; + } + + .el-date-picker.has-sidebar.has-time { + width: calc(100% - 24px); + left: 12px !important; + } + + .el-picker-panel *[slot='sidebar'], + .el-picker-panel__sidebar { + display: none; + } + + .el-picker-panel *[slot='sidebar'] + .el-picker-panel__body, + .el-picker-panel__sidebar + .el-picker-panel__body { + margin-left: 0; + } +} + +// 修改el-button样式 +.el-button { + &.el-button--text { + background-color: transparent !important; + padding: 0 !important; + + span { + margin-left: 0 !important; + } + } +} + +// 修改el-tag样式 +.el-tag { + font-weight: 500; + transition: all 0s !important; + + &.el-tag--default { + height: 26px !important; + } +} + +.el-checkbox-group { + &.el-table-filter__checkbox-group label.el-checkbox { + height: 17px !important; + + .el-checkbox__label { + font-weight: 400 !important; + } + } +} + +.el-radio--default { + // 优化单选按钮大小 + .el-radio__input { + .el-radio__inner { + width: 16px; + height: 16px; + + &::after { + width: 6px; + height: 6px; + } + } + } +} + +.el-checkbox { + .el-checkbox__inner { + border-radius: 2px !important; + } +} + +// 优化复选框样式 +.el-checkbox--default { + .el-checkbox__inner { + width: 16px !important; + height: 16px !important; + border-radius: 4px !important; + + &::before { + content: ''; + height: 4px !important; + top: 5px !important; + background-color: #FFFFFF !important; + transform: scale(0.6) !important; + } + } + + .is-checked { + .el-checkbox__inner { + &::after { + width: 3px; + height: 8px; + margin: auto; + border: 2px solid var(--el-checkbox-checked-icon-color); + border-left: 0; + border-top: 0; + transform: translate(-45%, -60%) rotate(45deg) scale(0.86) !important; + transform-origin: center; + } + } + } +} + +.el-notification .el-notification__icon { + font-size: 22px !important; +} + +// 修改 el-message-box 样式 +.el-message-box__headerbtn .el-message-box__close, +.el-dialog__headerbtn .el-dialog__close { + top: 7px; + right: 7px; + width: 30px; + height: 30px; + border-radius: 5px; + transition: all 0.3s; + + &:hover { + background-color: var(--art-hover-color) !important; + color: var(--art-gray-900) !important; + } +} + +.el-message-box { + padding: 25px 20px !important; +} + +.el-message-box__title { + font-weight: 500 !important; +} + +.el-table__column-filter-trigger i { + color: var(--theme-color) !important; + margin: -3px 0 0 2px; +} + +// 去除 el-dropdown 鼠标放上去出现的边框 +.el-tooltip__trigger:focus-visible { + outline: unset; +} + +// ipad 表单右侧按钮优化 +@media screen and (max-width: 1180px) { + .el-table-fixed-column--right { + padding-right: 0 !important; + } +} + +.login-out-dialog { + padding: 30px 20px !important; + border-radius: 10px !important; +} + +// 修改 dialog 动画 +.dialog-fade-enter-active { + .el-dialog:not(.is-draggable) { + animation: dialog-open 0.3s cubic-bezier(0.32, 0.14, 0.15, 0.86); + + // 修复 el-dialog 动画后宽度不自适应问题 + .el-select__selected-item { + display: inline-block; + } + } +} + +.dialog-fade-leave-active { + animation: fade-out 0.2s linear; + + .el-dialog:not(.is-draggable) { + animation: dialog-close 0.5s; + } +} + +@keyframes dialog-open { + 0% { + opacity: 0; + transform: scale(0.2); + } + + 100% { + opacity: 1; + transform: scale(1); + } +} + +@keyframes dialog-close { + 0% { + opacity: 1; + transform: scale(1); + } + + 100% { + opacity: 0; + transform: scale(0.2); + } +} + +// 遮罩层动画 +@keyframes fade-out { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + } +} + +// 修改 el-select 样式 +/* .el-select__popper:not(.el-tree-select__popper) { + .el-select-dropdown__list { + padding: 5px !important; + + .el-select-dropdown__item { + height: 34px !important; + line-height: 34px !important; + border-radius: 6px !important; + + &.is-selected { + color: var(--art-gray-900) !important; + font-weight: 400 !important; + background-color: var(--art-el-active-color) !important; + margin-bottom: 4px !important; + } + + &:hover { + background-color: var(--art-hover-color) !important; + } + } + + .el-select-dropdown__item:hover ~ .is-selected, + .el-select-dropdown__item.is-selected:has(~ .el-select-dropdown__item:hover) { + background-color: transparent !important; + } + } +} */ + +// 修改 el-tree-select 样式 +.el-tree-select__popper { + .el-select-dropdown__list { + padding: 5px !important; + + .el-tree-node { + .el-tree-node__content { + height: 36px !important; + border-radius: 6px !important; + + &:hover { + background-color: var(--art-gray-200) !important; + } + } + } + } +} + +// 实现水波纹在文字下面效果 +.el-button > span { + position: relative; + z-index: 10; +} + +// 优化颜色选择器圆角 +.el-color-picker__color { + border-radius: 2px !important; +} + +// 优化日期时间选择器底部圆角 +.el-picker-panel { + .el-picker-panel__footer { + border-radius: 0 0 var(--el-border-radius-base) var(--el-border-radius-base); + } +} + +// 优化树型菜单样式 +.el-tree-node__content { + border-radius: 4px; + margin-bottom: 4px; + padding: 1px 0; + + &:hover { + background-color: var(--art-hover-color) !important; + } +} + +.dark { + .el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content { + background-color: var(--art-gray-300) !important; + } +} + +// 隐藏折叠菜单弹窗 hover 出现的边框 +.menu-left-popper:focus-within, +.horizontal-menu-popper:focus-within { + box-shadow: none !important; + outline: none !important; +} + +// 数字输入组件右侧按钮高度跟随自定义组件高度 +.el-input-number--default.is-controls-right { + .el-input-number__decrease, + .el-input-number__increase { + height: calc((var(--el-component-size) / 2)) !important; + } +} diff --git a/src/assets/scss/index.scss b/src/assets/scss/index.scss new file mode 100644 index 0000000..788ae5b --- /dev/null +++ b/src/assets/scss/index.scss @@ -0,0 +1 @@ +@use './reset.scss'; diff --git a/src/assets/scss/mixin.scss b/src/assets/scss/mixin.scss new file mode 100644 index 0000000..24e14a1 --- /dev/null +++ b/src/assets/scss/mixin.scss @@ -0,0 +1,153 @@ +// sass 混合宏(函数) + +/** +* 溢出省略号 +* @param {Number} 行数 +*/ +@mixin ellipsis($rowCount: 1) { + @if $rowCount <=1 { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } @else { + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: $rowCount; + -webkit-box-orient: vertical; + } +} + +/** +* 控制用户能否选中文本 +* @param {String} 类型 +*/ +@mixin userSelect($value: none) { + user-select: $value; + -moz-user-select: $value; + -ms-user-select: $value; + -webkit-user-select: $value; +} + +// 绝对定位居中 +@mixin absoluteCenter() { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + margin: auto; +} + +/** +* css3动画 +* +*/ +@mixin animation( + $from: ( + width: 0px + ), + $to: ( + width: 100px + ), + $name: mymove, + $animate: mymove 2s 1 linear infinite +) { + -webkit-animation: $animate; + -o-animation: $animate; + animation: $animate; + + @keyframes #{$name} { + from { + @each $key, $value in $from { + #{$key}: #{$value}; + } + } + + to { + @each $key, $value in $to { + #{$key}: #{$value}; + } + } + } + + @-webkit-keyframes #{$name} { + from { + @each $key, $value in $from { + $key: $value; + } + } + + to { + @each $key, $value in $to { + $key: $value; + } + } + } +} + +// 圆形盒子 +@mixin circle($size: 11px, $bg: #FFFFFF) { + border-radius: 50%; + width: $size; + height: $size; + line-height: $size; + text-align: center; + background: $bg; +} + +// placeholder +@mixin placeholder($color: #BBBBBB) { + // Firefox + &::-moz-placeholder { + color: $color; + opacity: 1; + } + + // Internet Explorer 10+ + &:-ms-input-placeholder { + color: $color; + } + + // Safari and Chrome + &::-webkit-input-placeholder { + color: $color; + } + + &:placeholder-shown { + text-overflow: ellipsis; + } +} + +//背景透明,文字不透明。兼容IE8 +@mixin betterTransparentize($color, $alpha) { + $c: rgba($color, $alpha); + $ie_c: ie_hex_str($c); + background: rgba($color, 1); + background: $c; + background: transparent \9 +; + zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#{$ie_c}, endColorstr=#{$ie_c}); + -ms-filter: 'progid:DXImageTransform.Microsoft.gradient(startColorstr=#{$ie_c}, endColorstr=#{$ie_c})'; +} + +//添加浏览器前缀 +@mixin browserPrefix($propertyName, $value) { + @each $prefix in -webkit-, -moz-, -ms-, -o-, '' { + #{$prefix}#{$propertyName}: $value; + } +} + +// 边框 +@mixin border($color: red) { + border: 1px solid $color; +} + +// 背景滤镜 +@mixin backdropBlur() { + --tw-backdrop-blur: blur(30px); + -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); + backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); +} diff --git a/src/assets/scss/reset.scss b/src/assets/scss/reset.scss new file mode 100644 index 0000000..da66ed2 --- /dev/null +++ b/src/assets/scss/reset.scss @@ -0,0 +1,50 @@ +@charset "UTF-8"; +html, :host { + -webkit-text-size-adjust: 100%; + tab-size: 4; + line-height: 1.5; + font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-feature-settings: var(--default-font-feature-settings, normal); + font-variation-settings: var(--default-font-variation-settings, normal); + -webkit-tap-highlight-color: transparent; +} + +/*滚动条*/ +/*滚动条整体部分,必须要设置*/ +::-webkit-scrollbar { + width: 5px !important; + height: 0 !important; +} + +/*滚动条的轨道*/ +::-webkit-scrollbar-track { + background-color: #F2F4F5; +} + +/*滚动条的滑块按钮*/ +::-webkit-scrollbar-thumb { + border-radius: 5px; + background-color: #CCCCCC !important; + transition: all 0.2s; + -webkit-transition: all 0.2s; +} + +::-webkit-scrollbar-thumb:hover { + background-color: #B0ABAB !important; +} + +/*滚动条的上下两端的按钮*/ +::-webkit-scrollbar-button { + height: 0; + width: 0; +} + +.dark { + ::-webkit-scrollbar-track { + background-color: #070707; + } + + ::-webkit-scrollbar-thumb { + background-color: #E6EAEB !important; + } +} diff --git a/src/common/element/element.ts b/src/common/element/element.ts index 38e9720..d52aba3 100644 --- a/src/common/element/element.ts +++ b/src/common/element/element.ts @@ -2,6 +2,7 @@ import type { App } from 'vue' import * as ElementPlusIconsVue from '@element-plus/icons-vue' export const elIcons = ElementPlusIconsVue +export type ElIconType = keyof typeof ElementPlusIconsVue const install = (app: App): void => { for (const [ key, component ] of Object.entries(ElementPlusIconsVue)) { diff --git a/src/common/utils/index.ts b/src/common/utils/index.ts index 1aa1c24..d3e2d22 100644 --- a/src/common/utils/index.ts +++ b/src/common/utils/index.ts @@ -1,5 +1,3 @@ -import type { ReactiveFlags } from 'vue' - /** * 类型标签,Object.prototype.toString.call(obj) 的返回值 */ @@ -64,7 +62,7 @@ function debounce(t: number, fn: (...args: T) => void) { } function clone(value: T): T { - if (value === null || typeof value !== 'object') { + if (value === null || typeof value !== 'object' || typeof value === 'function') { return value } const rawValue = isReactive(value) ? toRaw(value) : value @@ -79,47 +77,57 @@ function clone(value: T): T { } const clonedObj = {} as T Object.keys(rawValue).forEach((key) => { - clonedObj[key as keyof T] = clone(rawValue[key as keyof T]) + const propValue = rawValue[key as keyof T] + if (typeof propValue !== 'function') { + clonedObj[key as keyof T] = clone(propValue) + } }) + return clonedObj as T } -type ExtractRawType = -// 匹配 reactive 响应式对象(通过 Vue 内置的 RAW 标记提取原始类型) - T extends { [ReactiveFlags.RAW]: infer RawValue } - ? RawValue - // 递归处理数组(兼容 reactive([]) 场景) - : T extends Array - ? Array> - // 递归处理嵌套对象(兼容 reactive({ a: { b: 1 } }) 场景) - : T extends object - ? { [K in keyof T]: ExtractRawType } - // 非对象类型直接返回(如 string/number 等) - : T; +type PartialForObject = +// 数组类型:直接返回原数组类型(不做 Partial) + T extends Array + ? T + // 普通对象:做 Partial 处理 + : T extends object + ? Partial + // 基本类型:直接返回 + : T; -type ResetAble = T & { $reset: (val?: Partial>) => void } +export type ResetAble = T & { + $reset: (val?: PartialForObject) => void + $clone: () => T +} -function resetAble(target: T): ResetAble { +function resetAble(target: T): ResetAble { const initialData = clone(target) as T + const resetAbleTarget = target as ResetAble + resetAbleTarget.$clone = () => clone(target) as T + + resetAbleTarget.$reset = (val?: PartialForObject) => { + const resetValue = val ?? (initialData as PartialForObject) - (target as ResetAble).$reset = (val?: Partial>) => { - if (val == null) { - val = initialData - } if (Array.isArray(val)) { const arr = target as unknown as Array - const initialArr = val as unknown as Array + const initialArr = resetValue as unknown as Array arr.splice(0, arr.length, ...initialArr) } else { - Object.keys(val).forEach((key) => { - (target as Record)[key] = (val as Record)[key] + const targetObj = target as Record + const resetObj = resetValue as Record + // 步骤1:遍历重置值,赋值到目标对象 + Object.keys(resetObj).forEach((key) => { + targetObj[key] = resetObj[key] }) - Object.getOwnPropertyNames(target).forEach((key) => { - if (key !== '$reset' && !(key in val)) { - (target as Record)[key] = undefined + + // 步骤2:清理目标对象中不存在于重置值的属性(保留 $reset/$clone) + Object.getOwnPropertyNames(targetObj).forEach((key) => { + if (key !== '$reset' && key !== '$clone' && !(key in resetObj)) { + targetObj[key] = undefined } - }) + }); } } return target as ResetAble diff --git a/src/components/a-drop-table/ADropTable.vue b/src/components/a-drop-table/ADropTable.vue index eebc0a1..ec8833c 100644 --- a/src/components/a-drop-table/ADropTable.vue +++ b/src/components/a-drop-table/ADropTable.vue @@ -201,7 +201,7 @@ const displayData = computed(() => { :page-sizes="[10, 20, 50, 100, 500]" :teleported="false" :total="totalCount" - layout="->, sizes, total, prev, pager, next" + background layout="total, prev, pager, next, sizes, jumper" @change="paging"/> diff --git a/src/components/a-icon/iconfont.css b/src/components/a-icon/iconfont.css index 0375ca2..3842f38 100644 --- a/src/components/a-icon/iconfont.css +++ b/src/components/a-icon/iconfont.css @@ -1,8 +1,8 @@ @font-face { font-family: "iconfont"; /* 项目名称 再昇云 */ - src: url('@/components/a-icon/iconfont.woff2?t=1766204567022') format('woff2'), - url('@/components/a-icon/iconfont.woff?t=1766204567022') format('woff'), - url('@/components/a-icon/iconfont.ttf?t=1766204567022') format('truetype'); + src: url('@/components/a-icon/iconfont.woff2?t=1768370216119') format('woff2'), + url('@/components/a-icon/iconfont.woff?t=1768370216119') format('woff'), + url('@/components/a-icon/iconfont.ttf?t=1768370216119') format('truetype'); } .iconfont { @@ -13,6 +13,10 @@ -moz-osx-font-smoothing: grayscale; } +.icon-bell:before { + content: "\e7c4"; +} + .icon-eye:before { content: "\e64f"; } diff --git a/src/components/a-icon/iconfont.json b/src/components/a-icon/iconfont.json index 96fadbd..af2ce5f 100644 --- a/src/components/a-icon/iconfont.json +++ b/src/components/a-icon/iconfont.json @@ -5,6 +5,13 @@ "css_prefix_text": "icon-", "description": "", "glyphs": [ + { + "icon_id": "4766680", + "name": "bell", + "font_class": "bell", + "unicode": "e7c4", + "unicode_decimal": 59332 + }, { "icon_id": "46407625", "name": "eye", diff --git a/src/components/a-icon/iconfont.ts b/src/components/a-icon/iconfont.ts index aed2a28..4b1f051 100644 --- a/src/components/a-icon/iconfont.ts +++ b/src/components/a-icon/iconfont.ts @@ -5,6 +5,13 @@ export const icons = { 'css_prefix_text': 'icon-', 'description': '', 'glyphs': [ + { + 'icon_id': '4766680', + 'name': 'bell', + 'font_class': 'bell', + 'unicode': 'e7c4', + 'unicode_decimal': 59332, + }, { 'icon_id': '46407625', 'name': 'eye', diff --git a/src/components/a-icon/iconfont.ttf b/src/components/a-icon/iconfont.ttf index 7556488d8b58f4176b9de44a712141296b06cd9f..84c127b4d7921d67623c0e4608f0f8a6889c5c63 100644 GIT binary patch delta 2150 zcmZ{kTWphc7{;HkUr+0CUAuLIt}8oqFkl;7H-&CvFhLk|2o9WxvIEGnj6-k<)ewsJ ziwGme8x@ooLI@$j#6%Y{vY3SnG)4m<#wRs#H`_@~H`Qz1}T?FhL;7K1Gd+n9{%*+YEKLWI4SCHi|yY6zVm#4=Fnj7sCC?0$@fZmo;o~u=s@9zZP$P; ze7@u0(Ic-0$G^U{?h~N<8^C$<%v9C-VOabu3D@T~>vz%LWCTmRcHEG(RK zmfLUe+zW@f%9pus_iSS zazQT34Y@NHn46yb!cIE4`_Zn+o98C+)&Ks1kEz0L^q>Q6$f6Z3cmhviE!MGw>(Plm zY`{iz;VEpwW;~58*or;q#x88*lPi$IGE|}(HAtft%drA=Scz3wje6`IMFSeK22E&2 z1_fM!A43S>83Zwa5Wlm zk0opXB%-htkRpXmfkYLy2NF||@8UtR!k$4&6m}01SJ+1goi?zekTQk6g)C9nWyn&6 z{e~nIb{LJuKKuYpEFRw;B7vRa{~ka~r_LK+n8<-Sp&!jLrzWrj2< z)Ed&PP;f}bkmr|~i$(@Q>mf!GLjNJg3u3Y?#tXtsK#Uh;QCQ;zVNM`MHp0X}jD&>Q zff!#12Dmq(66Oh#U(XF;v>=@dLk2Oz5XKE+gdq$b#P~uOL5T5%FpLo63t=oF#uvhX zLX0njQH2;^2tx}ozK}fg3+YyvWXLv!nTGTzOgF@=h%o1nUWJK=Y*)-+6mvh}6oBkd zI1eB@6;1|-xu0-GK>AGo`*`BviLsM#a6rZsju6N(g~J4LTH#oMTu?Y*AeR-68psWW zLkDt4;rPKE+hgD$!rZh1i~XOcJO)lD%#SLZQ<#6KaAM)nZ;F{+i?2Pn$RRy%#jMTN zF>AuQYCUiy9j%TL$9cyiJ8gepPdRoyJ;kxAZx$E2;-6QUI+@HGt z^3;2JJo%42-+8^>e(&er2L(k1Lj_X>zxy`&#(igfQ~rRz-~YOQ#y{(S6i5U{18)bW zgX6)8;K#vRq0Z2F=vwG@NWzJ5Yq&prF8o7bUExHeq^PavYSACj-O(%2d$Hcw?c!WX zy5wHGJ3d=>qU@(7SC^J10*Non?>c)62Cm5r(3+}9rncUyZONo7-Q`xu z^0Mw5w=!v0WxAy~=B|xoIvh<&M{&e%EKOA$?uu8&yAD^R zN`q0CeK(nD%OvmGuIS^NvBW^)=Zb7kUr)B;l-0MXJ=^Q6ZHUCAGwtds%E74%e zb|o`O{=4i{Fq%umVu_s9SI0YeW8LE`xZdr*(_sxyR(4N&t^IHg9T*$CKG*%dZQ)-h C70EaN delta 1933 zcmZ|QOKenS7{>Ac>6uGAx0aR`I;ExDZ{=1L0V^OPU@7+&1wlIH)?m2=Ck9h3odqHY&t$)zqoXo-<&h&%w*@MGx4{<+3J)&-^gD!kh*ur#`{2OcU;iG0WCyf$^zP5?n^*ntN8k@x+^Y-mf5Ks% z56aZu!}$}ZCzeVOJeJdaNB8Dh&NcNy;*{>+I-EOkEOaKnC!1gdl;WnI>1$L)+= zuuFE`?mbHN-wK-&#a+ci#i8NnrBeUXu%Qs>?Kl7D4=R~V7wdV2ms!S(yue~!VhKxW zV>v6>#!6mg6|b?H*IC0_*0F;(=+wF!X<{PHOkxUCnZ|TxFq2u#W)3aP&4UOA!e8|SHWm~!l>hgiL*Zem$aeZ?9)br_rAsn=Mer>tr7Efu!=6cE{HqTQ+vH6~|iY@SzT5O?*yWi?5$k-xJk;YvAMd7AkE*PSm zV=fD##A7ZCqU>WX3*u(kTozDkXh-f4+ml4r$VlE@1F~wXiL<5Vp z>-();FE;78-qRFgZWW?=#x{7GY;2>a8OPjb#O-vp*>fACZSk}NVD2-by#U+hX;;8p zAcaCqCtaSl3aro5rhy&zw0&S_JZ&V{1&?kWFL~Nrut{ zigOjk#QtnzNunolH8GNGP98~qn!K32k*Z3yr4FUD>DKhl^s%&MvYG9feCD&vjm-Vb zNaeE1Pb%+JwN?#|c~IS1eZG3QW^2vKn!m>8Yny6s*PX0;GVas*$@QnRo!M&*S10r~ Zo@|;vkWJlN9`y7-Yrh#VaBcl>;lKRsry~FW diff --git a/src/components/a-icon/iconfont.woff b/src/components/a-icon/iconfont.woff index d0afb7daef844b36a05974860354051fbf7bd46e..a3a6fb4ad5ec1cdd3b954e37a237528b8534dba2 100644 GIT binary patch delta 12444 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 He`^2$fmgry diff --git a/src/components/a-icon/iconfont.woff2 b/src/components/a-icon/iconfont.woff2 index bfc9420371e7c596da38f9ba5897d1faab0b25fa..36ad3352da607a476d4b27e33b166ab4cc1aca7f 100644 GIT binary patch literal 11024 zcmV+rEAP~IPew8T0RR9104opx3jhEB08f+v04l)%0RR9100000000000000000000 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 diff --git a/src/components/page/FormPage.vue b/src/components/page/FormPage.vue new file mode 100644 index 0000000..6fad208 --- /dev/null +++ b/src/components/page/FormPage.vue @@ -0,0 +1,484 @@ + + + + + diff --git a/src/components/page/Page.vue b/src/components/page/Page.vue index b007303..77fc6b6 100644 --- a/src/components/page/Page.vue +++ b/src/components/page/Page.vue @@ -12,13 +12,14 @@ .page-wrapper { height 100% width 100%; - overflow auto - padding 16px + overflow hidden + padding 5px box-sizing border-box - box-shadow: rgba(30, 35, 43, 0.16) 0px 2px 10px 0px; - background-color: white; + //box-shadow: inset rgba(30, 35, 43, 0.16) 0px 0 10px 1px; + //background-color: white; display flex flex-direction column + gap 10px } diff --git a/src/dts/components.d.ts b/src/dts/components.d.ts index 00d0d32..0083a8f 100644 --- a/src/dts/components.d.ts +++ b/src/dts/components.d.ts @@ -5,7 +5,6 @@ // ------ // Generated by unplugin-vue-components // Read more: https://github.com/vuejs/core/pull/3399 -import { GlobalComponents } from 'vue' export {} @@ -15,8 +14,10 @@ declare module 'vue' { ElAside: typeof import('element-plus/es')['ElAside'] ElAvatar: typeof import('element-plus/es')['ElAvatar'] ElButton: typeof import('element-plus/es')['ElButton'] + ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup'] ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup'] + ElCol: typeof import('element-plus/es')['ElCol'] ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider'] ElContainer: typeof import('element-plus/es')['ElContainer'] ElDatePicker: typeof import('element-plus/es')['ElDatePicker'] @@ -43,6 +44,8 @@ declare module 'vue' { ElPopconfirm: typeof import('element-plus/es')['ElPopconfirm'] ElRadio: typeof import('element-plus/es')['ElRadio'] ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] + ElRow: typeof import('element-plus/es')['ElRow'] + ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] ElSelect: typeof import('element-plus/es')['ElSelect'] ElSwitch: typeof import('element-plus/es')['ElSwitch'] ElTable: typeof import('element-plus/es')['ElTable'] @@ -68,8 +71,10 @@ declare global { const ElAside: typeof import('element-plus/es')['ElAside'] const ElAvatar: typeof import('element-plus/es')['ElAvatar'] const ElButton: typeof import('element-plus/es')['ElButton'] + const ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup'] const ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] const ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup'] + const ElCol: typeof import('element-plus/es')['ElCol'] const ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider'] const ElContainer: typeof import('element-plus/es')['ElContainer'] const ElDatePicker: typeof import('element-plus/es')['ElDatePicker'] @@ -96,6 +101,8 @@ declare global { const ElPopconfirm: typeof import('element-plus/es')['ElPopconfirm'] const ElRadio: typeof import('element-plus/es')['ElRadio'] const ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] + const ElRow: typeof import('element-plus/es')['ElRow'] + const ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] const ElSelect: typeof import('element-plus/es')['ElSelect'] const ElSwitch: typeof import('element-plus/es')['ElSwitch'] const ElTable: typeof import('element-plus/es')['ElTable'] @@ -110,4 +117,4 @@ declare global { const ElUpload: typeof import('element-plus/es')['ElUpload'] const RouterLink: typeof import('vue-router')['RouterLink'] const RouterView: typeof import('vue-router')['RouterView'] -} \ No newline at end of file +} diff --git a/src/dts/g.d.ts b/src/dts/g.d.ts index c12438b..d97938b 100644 --- a/src/dts/g.d.ts +++ b/src/dts/g.d.ts @@ -19,7 +19,7 @@ declare global { records: T[] } - interface PageParam { + interface PageParam extends Record { current?: number size?: number orders?: string diff --git a/src/main.ts b/src/main.ts index 2d24dbb..e503324 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,3 +1,4 @@ +import '@/assets/scss/index.scss' import { createApp } from 'vue' import App from './App.vue' import { Settings } from 'luxon' @@ -7,7 +8,7 @@ import piniaPluginPersistedstate from 'pinia-plugin-persistedstate' // import Ws from '@/common/ws/ws.ts' import element from '@/common/element/element.ts' import router from '@/common/router' -import '@/assets/css/index.css' +// import '@/assets/css/index.css' createApp(App) .use(element) diff --git a/src/pages/a-frame/AAside.tsx b/src/pages/a-frame/AAside.tsx index a33d241..dfe4c4a 100644 --- a/src/pages/a-frame/AAside.tsx +++ b/src/pages/a-frame/AAside.tsx @@ -118,7 +118,7 @@ export default defineComponent( return () => ( <> - + {{ default: () => menuTree.value.map(renderMenu), }} diff --git a/src/pages/a-frame/AFrame.vue b/src/pages/a-frame/AFrame.vue index 42f3324..6f7dfc7 100644 --- a/src/pages/a-frame/AFrame.vue +++ b/src/pages/a-frame/AFrame.vue @@ -3,6 +3,7 @@ import AAside from '@/pages/a-frame/AAside.tsx' import AAvatar from '@/pages/a-frame/AAvatar.vue' import { appName } from '@/common' import Evt from '@/common/utils/evt.ts' +import AIcon from '@/components/a-icon/AIcon.vue' onMounted(() => { Evt.emit('connect_ws') @@ -20,11 +21,23 @@ onUnmounted(() => {
{{ appName }}
- +
+
+ + + + + + +
+ +
- + + + @@ -69,6 +82,23 @@ onUnmounted(() => { font-size: 1.5rem; } } + + & > div:nth-child(2) { + height: 100%; + display: flex; + align-items: center; + box-sizing border-box + gap 20px + + & > div:first-child { + display flex + gap 10px + + & > button { + margin 0 + } + } + } } & > section { @@ -79,20 +109,20 @@ onUnmounted(() => { height 100%; width auto position relative + border-right: solid 1px var(--el-menu-border-color); + + background-color white + padding: 10px 0; } & > main { height 100% width calc(100% - 300px) - padding 5px + padding 0 overflow auto - background-color #F7F9FC + //background-color #F7F9FC + background-color rgb(250, 251, 252) } } } - diff --git a/src/pages/cst/customer/Customer.vue b/src/pages/cst/customer/Customer.vue index 8db6149..429738f 100644 --- a/src/pages/cst/customer/Customer.vue +++ b/src/pages/cst/customer/Customer.vue @@ -1,64 +1,27 @@ - - diff --git a/src/pages/cst/station/Station.vue b/src/pages/cst/station/Station.vue index 48020e5..69035c8 100644 --- a/src/pages/cst/station/Station.vue +++ b/src/pages/cst/station/Station.vue @@ -1,193 +1,133 @@ - - diff --git a/src/pages/cst/truck/Truck.vue b/src/pages/cst/truck/Truck.vue index f5544e3..fa2d499 100644 --- a/src/pages/cst/truck/Truck.vue +++ b/src/pages/cst/truck/Truck.vue @@ -1,28 +1,18 @@ - - diff --git a/src/pages/sys/dict/Dict.vue b/src/pages/sys/dict/Dict.vue index 5d4bf22..546c19a 100644 --- a/src/pages/sys/dict/Dict.vue +++ b/src/pages/sys/dict/Dict.vue @@ -1,8 +1,10 @@ diff --git a/src/pages/sys/gen/tpl/Tpl.vue b/src/pages/sys/gen/tpl/Tpl.vue index 2c4050f..3e80727 100644 --- a/src/pages/sys/gen/tpl/Tpl.vue +++ b/src/pages/sys/gen/tpl/Tpl.vue @@ -1,16 +1,20 @@ + + - diff --git a/src/pages/sys/menus/Menus.vue b/src/pages/sys/menus/Menus.vue index 8454f01..976539d 100644 --- a/src/pages/sys/menus/Menus.vue +++ b/src/pages/sys/menus/Menus.vue @@ -12,15 +12,10 @@ 重置 -
新建
- { - if (resolve!=null){ - resolve(res.data?.map(it => { - it.hasChildren = true - return it - }) ?? []) - } else { - dataTableIns.value?.updateKeyChildren(row.id, res.data?.map(it => { - it.hasChildren = true - it.children = [] - return it - }) ?? []) - } - }) - .finally(() => { - searching.value = false - }) + .then(res => { + if (resolve != null) { + resolve(res.data?.map(it => { + it.hasChildren = true + return it + }) ?? []) + } else { + dataTableIns.value?.updateKeyChildren(row.id, res.data?.map(it => { + it.hasChildren = true + it.children = [] + return it + }) ?? []) + } + }) + .finally(() => { + searching.value = false + }) } onMounted(() => { diff --git a/src/pages/sys/role/Role.vue b/src/pages/sys/role/Role.vue index 943cb99..d0b8c77 100644 --- a/src/pages/sys/role/Role.vue +++ b/src/pages/sys/role/Role.vue @@ -1,211 +1,110 @@ - diff --git a/src/pages/sys/sn-config/SnConfig.vue b/src/pages/sys/sn-config/SnConfig.vue index f80c815..975e023 100644 --- a/src/pages/sys/sn-config/SnConfig.vue +++ b/src/pages/sys/sn-config/SnConfig.vue @@ -1,92 +1,18 @@ - - + + - + + + diff --git a/src/pages/sys/task/Task.vue b/src/pages/sys/task/Task.vue index e71b191..c7cafb3 100644 --- a/src/pages/sys/task/Task.vue +++ b/src/pages/sys/task/Task.vue @@ -1,26 +1,30 @@ - diff --git a/src/pages/sys/task/task.d.ts b/src/pages/sys/task/task.d.ts index ad9d937..e61e035 100644 --- a/src/pages/sys/task/task.d.ts +++ b/src/pages/sys/task/task.d.ts @@ -40,6 +40,7 @@ declare global { criticalTiming?: string // 是否禁用 disabled?: boolean + builtin?: boolean // 备注 memo?: string } diff --git a/src/pages/sys/user/User.vue b/src/pages/sys/user/User.vue index bdd79ec..a141979 100644 --- a/src/pages/sys/user/User.vue +++ b/src/pages/sys/user/User.vue @@ -1,31 +1,22 @@ diff --git a/src/pages/wh/inventory/Inventory.vue b/src/pages/wh/inventory/Inventory.vue index 29f84a7..73a58c8 100644 --- a/src/pages/wh/inventory/Inventory.vue +++ b/src/pages/wh/inventory/Inventory.vue @@ -1,202 +1,120 @@ - - diff --git a/src/pages/wh/out-order/OutOrder.vue b/src/pages/wh/out-order/OutOrder.vue index 2181420..a06911c 100644 --- a/src/pages/wh/out-order/OutOrder.vue +++ b/src/pages/wh/out-order/OutOrder.vue @@ -1,231 +1,150 @@ - - diff --git a/src/pages/wh/purchase-order/PurchaseOrder.vue b/src/pages/wh/purchase-order/PurchaseOrder.vue index 9f30fec..eda8230 100644 --- a/src/pages/wh/purchase-order/PurchaseOrder.vue +++ b/src/pages/wh/purchase-order/PurchaseOrder.vue @@ -1,213 +1,118 @@ - - diff --git a/src/pages/wh/sales-order/SalesOrder.vue b/src/pages/wh/sales-order/SalesOrder.vue index 98fdc6b..65e07c3 100644 --- a/src/pages/wh/sales-order/SalesOrder.vue +++ b/src/pages/wh/sales-order/SalesOrder.vue @@ -1,231 +1,152 @@ + + + - - diff --git a/src/pages/wh/warehouse/Warehouse.vue b/src/pages/wh/warehouse/Warehouse.vue index ade5a81..89116fb 100644 --- a/src/pages/wh/warehouse/Warehouse.vue +++ b/src/pages/wh/warehouse/Warehouse.vue @@ -1,164 +1,113 @@ - - diff --git a/vite.config.ts b/vite.config.ts index 7a87133..92ba210 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -15,11 +15,12 @@ import ElementPlus from 'unplugin-element-plus/vite' import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' import { fileWatcher } from './plugin/file-watcher.ts' import IconfontProcess from './plugin/iconfont-process.ts' + // import * as https from "node:https"; // https://vite.dev/config/ export default defineConfig((configEnv) => { - const env = loadEnv(configEnv.mode, process.cwd(), ""); + const env = loadEnv(configEnv.mode, process.cwd(), '') // const Agent = https.Agent; // const agent = new Agent({ // keepAlive: true, @@ -34,7 +35,16 @@ export default defineConfig((configEnv) => { }, css: { modules: { - localsConvention: "camelCase", + localsConvention: 'camelCase', + }, + preprocessorOptions: { + scss: { + additionalData: ` + @use "@/assets/scss/el-ui.scss" as *; + @use "@/assets/scss/el-light.scss" as *; + @use "@/assets/scss/mixin.scss" as *; + `, + }, }, }, plugins: [ @@ -42,33 +52,34 @@ export default defineConfig((configEnv) => { vueJsx(), VueDevTools(), ElementPlus({ - defaultLocale: "zh-cn", + defaultLocale: 'zh-cn', + useSource: true, }), AutoImport({ - imports: ["vue", "vue-router", "pinia"], - dts: "./src/dts/auto-imports.d.ts", - resolvers: [ElementPlusResolver()], + imports: [ 'vue', 'vue-router', 'pinia' ], + dts: './src/dts/auto-imports.d.ts', + resolvers: [ ElementPlusResolver() ], }), Components({ - dts: "./src/dts/components.d.ts", - dirs: ["./src/widgets"], - resolvers: [ElementPlusResolver()], + dts: './src/dts/components.d.ts', + dirs: [ './src/widgets' ], + resolvers: [ ElementPlusResolver() ], }), processHtml(env.VITE_APP_NAME), fileWatcher(IconfontProcess), zipDist(), ], resolve: { - extensions: [".mjs", ".js", ".mts", ".ts", ".jsx", ".tsx", ".json"], + extensions: [ '.mjs', '.js', '.mts', '.ts', '.jsx', '.tsx', '.json' ], alias: [ { - find: "@", - replacement: path.resolve(__dirname, "src"), + find: '@', + replacement: path.resolve(__dirname, 'src'), }, ], }, server: { - host: "0.0.0.0", + host: '0.0.0.0', port: 5173, proxy: { [env.VITE_HTTP_SERVER_BASE_URL]: { @@ -79,14 +90,14 @@ export default defineConfig((configEnv) => { // agent, changeOrigin: true, - rewrite: (path) => (env.VITE_HTTP_SERVER_BASE_URL == null || env.VITE_HTTP_SERVER_BASE_URL == "/" ? path : path.replace(new RegExp(env.VITE_HTTP_SERVER_BASE_URL), "")), + rewrite: (path) => (env.VITE_HTTP_SERVER_BASE_URL == null || env.VITE_HTTP_SERVER_BASE_URL == '/' ? path : path.replace(new RegExp(env.VITE_HTTP_SERVER_BASE_URL), '')), } as ProxyOptions, [env.VITE_WS_SERVER_BASE_URL]: { ws: true, target: env.VITE_WS_PROXY_TARGET, - rewrite: (path) => (env.VITE_WS_SERVER_BASE_URL == null || env.VITE_WS_SERVER_BASE_URL == "/" ? path : path.replace(new RegExp(env.VITE_WS_SERVER_BASE_URL), "")), + rewrite: (path) => (env.VITE_WS_SERVER_BASE_URL == null || env.VITE_WS_SERVER_BASE_URL == '/' ? path : path.replace(new RegExp(env.VITE_WS_SERVER_BASE_URL), '')), } as ProxyOptions, }, }, - }; -}); + } +})