From b2a30f11720b03d8844ef9080f3091a769f68d8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=A8=E6=A0=88=E5=B0=8F=E5=AD=A6=E7=94=9F?= <1518079521@qq.com> Date: Fri, 20 Mar 2026 15:56:15 +0800 Subject: [PATCH] up admin --- admin/src/App.vue | 3 +- admin/src/app/api/notice.ts | 38 +- admin/src/app/api/printer.ts | 6 +- admin/src/app/api/sys.ts | 14 +- admin/src/app/api/verify.ts | 4 +- .../src/app/components/cloud-build/index.vue | 2 +- .../src/app/components/upgrade-log/index.vue | 1 + admin/src/app/components/upgrade/index.vue | 163 +- .../app/lang/zh-cn/channel.wechat.config.json | 2 +- admin/src/app/lang/zh-cn/diy.edit.json | 2 +- admin/src/app/lang/zh-cn/diy_form.edit.json | 2 +- .../app/lang/zh-cn/setting.adminlogin.json | 9 +- admin/src/app/lang/zh-cn/setting.login.json | 2 +- admin/src/app/lang/zh-cn/setting.system.json | 10 +- .../app/lang/zh-cn/tools.backup_records.json | 3 +- admin/src/app/views/app/index.vue | 2 +- admin/src/app/views/app/marketing.vue | 122 +- .../app/views/auth/components/edit-menu.vue | 36 +- .../app/views/auth/components/edit-role.vue | 34 +- admin/src/app/views/auth/menu.vue | 12 +- admin/src/app/views/channel/weapp/config.vue | 4 - admin/src/app/views/diy/member.vue | 6 +- admin/src/app/views/diy_form/records.vue | 2 +- admin/src/app/views/finance/account.vue | 2 +- admin/src/app/views/index/store.vue | 3214 ++++++++++------- .../views/member/components/gift-point.vue | 2 +- .../member/components/member-balance-edit.vue | 6 +- .../member/components/member-point-edit.vue | 6 +- admin/src/app/views/poster/list.vue | 2 + .../setting/components/sms_signature.vue | 839 +++-- admin/src/app/views/setting/point_rule.vue | 2 +- admin/src/app/views/setting/system.vue | 18 +- admin/src/app/views/tools/cloud_compile.vue | 20 +- admin/src/app/views/tools/code/index.vue | 6 +- .../upload-attachment/attachment.vue | 13 +- admin/src/components/upload-image/index.vue | 9 +- admin/src/components/verifition/Verify.vue | 191 +- .../verifition/Verify/VerifySlide.vue | 610 ++-- .../default/components/aside/menu-item.vue | 463 ++- .../layout/default/components/aside/side.vue | 177 +- .../default/components/header/index.vue | 4 + admin/src/layout/default/components/tabs.vue | 50 +- admin/src/layout/default/index.vue | 5 +- admin/src/router/index.ts | 8 +- admin/src/stores/modules/system.ts | 17 +- admin/src/stores/modules/tabbar.ts | 29 +- admin/src/stores/modules/user.ts | 4 +- admin/src/styles/font/price.ttf | Bin 26800 -> 0 bytes admin/src/styles/icon/addon-iconfont.css | 3 +- admin/src/styles/icon/addon/o2o/iconfont.css | 38 + admin/src/styles/icon/addon/o2o/iconfont.json | 51 + .../styles/icon/addon/tourism/iconfont.css | 58 + .../styles/icon/addon/tourism/iconfont.json | 86 + admin/src/styles/icon/iconfont.css | 23 +- admin/src/styles/icon/official-iconfont.css | 578 ++- admin/src/utils/common.ts | 45 +- admin/src/utils/qqmap.ts | 6 + admin/src/utils/request.ts | 24 +- admin/src/utils/storage.ts | 8 +- 59 files changed, 4497 insertions(+), 2599 deletions(-) delete mode 100644 admin/src/styles/font/price.ttf create mode 100644 admin/src/styles/icon/addon/o2o/iconfont.css create mode 100644 admin/src/styles/icon/addon/o2o/iconfont.json create mode 100644 admin/src/styles/icon/addon/tourism/iconfont.css create mode 100644 admin/src/styles/icon/addon/tourism/iconfont.json diff --git a/admin/src/App.vue b/admin/src/App.vue index 2facb873e..9d4754cbd 100644 --- a/admin/src/App.vue +++ b/admin/src/App.vue @@ -35,7 +35,8 @@ onMounted(() => { }) - + diff --git a/admin/src/app/views/auth/components/edit-menu.vue b/admin/src/app/views/auth/components/edit-menu.vue index 6a39834f0..0806ca08b 100644 --- a/admin/src/app/views/auth/components/edit-menu.vue +++ b/admin/src/app/views/auth/components/edit-menu.vue @@ -24,10 +24,10 @@ @@ -183,6 +183,38 @@ const getAddonMenuFn = async (key: any) => { addonMenuList.value = data } +const markMenuDisabled = (menuList: any[], menuType: number): any[] => { + return menuList.map(item => { + const newItem = { ...item } + // 判断当前节点是否可选 + if (item.menu_key === '') { + // “顶级”节点(仅存在于 sysMenuList) + newItem.disabled = menuType === 2 // 按钮不能选顶级 + } else { + if (menuType === 2) { + // 当前要创建的是按钮 → 只允许选择 menu_type === 1(菜单) + newItem.disabled = item.menu_type !== 1 + } else { + // 当前要创建的是目录/菜单 → 只允许选择 menu_type === 0(目录) + newItem.disabled = item.menu_type !== 0 + } + } + // 递归处理 children + if (Array.isArray(item.children) && item.children.length > 0) { + newItem.children = markMenuDisabled(item.children, menuType) + } + return newItem + }) +} + +const sysMenuListWithDisabled = computed(() => { + return markMenuDisabled(sysMenuList.value, formData.menu_type) +}) + +const addonMenuListWithDisabled = computed(() => { + return markMenuDisabled(addonMenuList.value, formData.menu_type) +}) + // 选择应用 const addonChange = async (val: any) => { formData.parent_key = '' diff --git a/admin/src/app/views/auth/components/edit-role.vue b/admin/src/app/views/auth/components/edit-role.vue index 16093e80e..9245d59ab 100644 --- a/admin/src/app/views/auth/components/edit-role.vue +++ b/admin/src/app/views/auth/components/edit-role.vue @@ -54,8 +54,34 @@ let popTitle: string = '' // 获取权限数据 const menus = ref[]>([]) getAuthMenus({ is_button: 0 }).then((res) => { - menus.value = res.data + menus.value = mergeMenuKeyAndAuth(res.data) }) + +const mergeMenuKeyAndAuth = (arr: any) => { + // 递归终止条件:非数组直接返回原值 + if (!Array.isArray(arr)) { + return arr; + } + + // 遍历数组每个元素,返回新数组 + return arr.map(item => { + // 深拷贝当前对象,避免修改原数据 + const newItem = { ...item }; + + // 1. 如果当前节点有 menu_key 和 auth,执行合并 + if (newItem.menu_key && Array.isArray(newItem.auth)) { + // 注意:menu_key 是字符串,需转为数组后合并(concat 支持非数组参数,会自动包装) + newItem.menu_key = newItem.auth.concat(newItem.menu_key); + } + + // 2. 递归处理下一层 children(如果有) + if (Array.isArray(newItem.children)) { + newItem.children = mergeMenuKeyAndAuth(newItem.children); + } + + return newItem; + }); +} // 全选 const selectAll = ref(false) const checkStrictly = ref(false) @@ -71,7 +97,7 @@ watch(selectAll, () => { }) const handleCheckChange = debounce((e) => { - formData.rules = treeRef.value.getCheckedKeys() + formData.rules = treeRef.value.getCheckedKeys().flat(1) }) const menuAction = () => { @@ -145,7 +171,7 @@ const confirm = async (formEl: FormInstance | undefined) => { loading.value = true const data = Object.assign({}, formData) - data.rules = data.rules.concat(treeRef.value.getHalfCheckedKeys()) + data.rules = data.rules.concat(treeRef.value.getHalfCheckedKeys().flat(1)) save(data).then(res => { loading.value = false @@ -190,7 +216,7 @@ const setFormData = async (row: any = null) => { function checked (menuKey:string, data:any, newArr:any) { Object.keys(data).forEach((key:string) => { const item = data[key] - if (item.menu_key == menuKey) { + if (!Array.isArray(item.menu_key) && item.menu_key == menuKey || Array.isArray(item.menu_key) && item.menu_key.indexOf(menuKey) != -1) { if (!item.children || item.children.length == 0) { newArr.push(item.menu_key) } diff --git a/admin/src/app/views/auth/menu.vue b/admin/src/app/views/auth/menu.vue index 810e7adb0..5fa5bfda3 100644 --- a/admin/src/app/views/auth/menu.vue +++ b/admin/src/app/views/auth/menu.vue @@ -9,7 +9,7 @@ {{ t('addMenu') }} - + {{ t('initializeMenu') }} @@ -129,6 +129,7 @@ const getMenuList = () => { } getMenuList() // 重置菜单 +const refreshLoading = ref(false) const refreshMenu = () => { ElMessageBox.confirm(h('div', null, [ h('p', null, t('initializeMenuTipsOne')), @@ -140,10 +141,13 @@ const refreshMenu = () => { // type: 'warning' } ).then(() => { + refreshLoading.value = true menuRefresh({}).then(res => { - location.reload() - }).catch(() => {}) - }).catch(()=>{}) + refreshLoading.value = false + }).catch(() => { + refreshLoading.value = false + }) + }).catch(() => {}) } /** diff --git a/admin/src/app/views/channel/weapp/config.vue b/admin/src/app/views/channel/weapp/config.vue index 1f2834fb0..5602cecf6 100644 --- a/admin/src/app/views/channel/weapp/config.vue +++ b/admin/src/app/views/channel/weapp/config.vue @@ -196,10 +196,6 @@ getWeappConfig().then(res => { loading.value = false }) -getWeappConfig().then(res => { - Object.assign(res.data) -}) - /** * 复制 */ diff --git a/admin/src/app/views/diy/member.vue b/admin/src/app/views/diy/member.vue index 1bff91954..789921d16 100644 --- a/admin/src/app/views/diy/member.vue +++ b/admin/src/app/views/diy/member.vue @@ -30,8 +30,8 @@
- - {{ t('changePage') }} + + {{ t('changePage') }} {{ t('decorate') }}
@@ -59,7 +59,7 @@
- +
diff --git a/admin/src/app/views/diy_form/records.vue b/admin/src/app/views/diy_form/records.vue index 59fc02a97..33ef5b716 100644 --- a/admin/src/app/views/diy_form/records.vue +++ b/admin/src/app/views/diy_form/records.vue @@ -115,7 +115,7 @@
+ @size-change="getFormRecordsMemberFn()" @current-change="getFormRecordsMemberFn" />
diff --git a/admin/src/app/views/finance/account.vue b/admin/src/app/views/finance/account.vue index 95d15a70f..7a30abd57 100644 --- a/admin/src/app/views/finance/account.vue +++ b/admin/src/app/views/finance/account.vue @@ -194,7 +194,7 @@ const searchFormRef = ref() // 去空操作 watch(() => siteAccountLogTable.searchParam.trade_no, (nval) => { - siteAccountLogTable.searchParam.trade_no = nval.trim(); + siteAccountLogTable.searchParam.trade_no = nval.trim() }) /** diff --git a/admin/src/app/views/index/store.vue b/admin/src/app/views/index/store.vue index 9e01807cb..d4daa5155 100644 --- a/admin/src/app/views/index/store.vue +++ b/admin/src/app/views/index/store.vue @@ -1,588 +1,953 @@ diff --git a/admin/src/app/views/member/components/gift-point.vue b/admin/src/app/views/member/components/gift-point.vue index 5cbda0870..71119b6ff 100644 --- a/admin/src/app/views/member/components/gift-point.vue +++ b/admin/src/app/views/member/components/gift-point.vue @@ -47,7 +47,7 @@ const formRules = reactive({ callback('请输入积分数量') } else if (isNaN(value) || !regExp.number.test(value)) { callback('积分数量格式错误') - } else if (value <=0) { + } else if (value <= 0) { callback('积分数量不能小于等于0') } else{ callback(); diff --git a/admin/src/app/views/member/components/member-balance-edit.vue b/admin/src/app/views/member/components/member-balance-edit.vue index e6a38b4f2..598ca092e 100644 --- a/admin/src/app/views/member/components/member-balance-edit.vue +++ b/admin/src/app/views/member/components/member-balance-edit.vue @@ -14,7 +14,9 @@ - +
+ +
@@ -70,7 +72,7 @@ const formRules = computed(() => { callback(new Error(t('adjustBalancePlaceholder'))) } - if (formData.adjust_type == -1 && (parseFloat(formData.balance) - adjust < 0)) { + if (formData.adjust_type == -1 && (parseFloat(formData.balance) - adjust) < 0) { callback(new Error(t('adjustBalanceMaxAccountMessage'))) } diff --git a/admin/src/app/views/member/components/member-point-edit.vue b/admin/src/app/views/member/components/member-point-edit.vue index c89edefe7..214bf2842 100644 --- a/admin/src/app/views/member/components/member-point-edit.vue +++ b/admin/src/app/views/member/components/member-point-edit.vue @@ -14,7 +14,9 @@ - +
+ +
@@ -72,7 +74,7 @@ const formRules = computed(() => { callback(new Error(t('adjustPointPlaceholder'))) } - if (formData.adjust_type == -1 && (parseFloat(formData.point) - adjust < 0)) { + if (formData.adjust_type == -1 && (parseFloat(formData.point) - adjust) < 0) { callback(new Error(t('adjustPointMaxAccountMessage'))) } diff --git a/admin/src/app/views/poster/list.vue b/admin/src/app/views/poster/list.vue index 72462ac25..d28a4a524 100644 --- a/admin/src/app/views/poster/list.vue +++ b/admin/src/app/views/poster/list.vue @@ -279,6 +279,8 @@ const previewPoster = (data: any) => { previewDialogVisible.value = true } isRepeat.value = false + }).catch(() => { + isRepeat.value = false }) } diff --git a/admin/src/app/views/setting/components/sms_signature.vue b/admin/src/app/views/setting/components/sms_signature.vue index 379a71b2c..6e7d2dcb6 100644 --- a/admin/src/app/views/setting/components/sms_signature.vue +++ b/admin/src/app/views/setting/components/sms_signature.vue @@ -1,142 +1,247 @@ diff --git a/admin/src/layout/default/components/aside/side.vue b/admin/src/layout/default/components/aside/side.vue index 6871f9ea2..f0dece717 100644 --- a/admin/src/layout/default/components/aside/side.vue +++ b/admin/src/layout/default/components/aside/side.vue @@ -1,25 +1,25 @@ diff --git a/admin/src/layout/default/components/header/index.vue b/admin/src/layout/default/components/header/index.vue index 32d69f627..e875689af 100644 --- a/admin/src/layout/default/components/header/index.vue +++ b/admin/src/layout/default/components/header/index.vue @@ -258,4 +258,8 @@ const toPreview = () => { font-weight: inherit !important; color: var(--el-text-color-regular) !important; } +:deep(.inter .el-breadcrumb__inner){ + font-weight: inherit !important; + color: var(--el-text-color-regular) !important; +} diff --git a/admin/src/layout/default/components/tabs.vue b/admin/src/layout/default/components/tabs.vue index 561663f98..3304940b1 100644 --- a/admin/src/layout/default/components/tabs.vue +++ b/admin/src/layout/default/components/tabs.vue @@ -1,15 +1,15 @@