diff --git a/layouts/admin/AdminLayout.uvue b/layouts/admin/AdminLayout.uvue
index 22a97fec..463919dd 100644
--- a/layouts/admin/AdminLayout.uvue
+++ b/layouts/admin/AdminLayout.uvue
@@ -63,7 +63,8 @@
-
+
+
@@ -118,6 +119,13 @@ import type { TabItem } from '@/layouts/admin/store/adminNavStore.uts'
import { getComponent } from '@/layouts/admin/router/adminComponentMap.uts'
+const props = defineProps({
+ currentPage: {
+ type: String,
+ default: ''
+ }
+})
+
// 侧边栏宽度配置 (CRMEB 1:1)
const ASIDE_W = 70
const SUB_W = 200
@@ -388,6 +396,9 @@ onMounted(async () => {
}
initNavState()
+ if (props.currentPage != '') {
+ openRoute(props.currentPage as string)
+ }
// 初始化窗口宽度
windowWidth.value = uni.getWindowInfo().windowWidth
diff --git a/layouts/admin/components/AdminSubsider.uvue b/layouts/admin/components/AdminSubsider.uvue
index 968671b4..e447e3a3 100644
--- a/layouts/admin/components/AdminSubsider.uvue
+++ b/layouts/admin/components/AdminSubsider.uvue
@@ -92,8 +92,20 @@ function isActive(node: MenuNode): boolean {
// 只有非分组项才能被视为“激活”变色 (1:1 复刻 screenshot 效果)
if (node.type === 'group') return false
- if (props.activeId != '' && node.id === props.activeId) return true
- if (props.currentPath != '' && node.path === props.currentPath) return true
+ // 核心逻辑:优先匹配 ID,ID 是唯一的
+ // 如果当前选中的 ID 就是这个节点的 ID,那它肯定是激活的
+ if (props.activeId != '' && node.id === props.activeId) {
+ return true
+ }
+
+ // 如果 ID 没匹配上,但路径匹配上了,且当前没有 activeId (例如首次进入或刷新)
+ // 或者当前 ID 对应的路径跟这个路径一样
+ // 但为了防止 Path 相同导致多选,我们加一个额外判断:
+ // 如果 activeId 已经指向了一个有效的路由,我们通常不再通过 Path 来高亮其他项
+ if (props.activeId === '' && props.currentPath != '' && node.path === props.currentPath) {
+ return true
+ }
+
return false
}
diff --git a/layouts/admin/router/adminComponentMap.uts b/layouts/admin/router/adminComponentMap.uts
index c22867c2..9e3a80db 100644
--- a/layouts/admin/router/adminComponentMap.uts
+++ b/layouts/admin/router/adminComponentMap.uts
@@ -125,14 +125,15 @@ export const componentMap: Map = new Map([
// 设置模块
['SettingSystemConfig', defineAsyncComponent(() => import('@/pages/mall/admin/setting/system/config.uvue'))],
- ['SettingMessage', defineAsyncComponent(() => import('@/pages/mall/admin/setting/message.uvue'))],
- ['SettingAgreement', defineAsyncComponent(() => import('@/pages/mall/admin/setting/agreement.uvue'))],
- ['SettingTicket', defineAsyncComponent(() => import('@/pages/mall/admin/setting/ticket.uvue'))],
+ ['SettingMessageIndex', defineAsyncComponent(() => import('@/pages/mall/admin/setting/message.uvue'))],
+ ['SettingProtocolIndex', defineAsyncComponent(() => import('@/pages/mall/admin/setting/agreement.uvue'))],
+ ['SettingTicketIndex', defineAsyncComponent(() => import('@/pages/mall/admin/setting/ticket.uvue'))],
['SettingAuthRole', defineAsyncComponent(() => import('@/pages/mall/admin/setting/auth/role.uvue'))],
['SettingAuthAdmin', defineAsyncComponent(() => import('@/pages/mall/admin/setting/auth/admin.uvue'))],
['SettingAuthPermission', defineAsyncComponent(() => import('@/pages/mall/admin/setting/auth/permission.uvue'))],
['SettingDeliveryStaff', defineAsyncComponent(() => import('@/pages/mall/admin/setting/delivery/staff.uvue'))],
['SettingDeliveryStation', defineAsyncComponent(() => import('@/pages/mall/admin/setting/delivery/station.uvue'))],
+ ['SettingDeliveryVerifier', defineAsyncComponent(() => import('@/pages/mall/admin/setting/delivery/verifier.uvue'))],
['SettingDeliveryTemplate', defineAsyncComponent(() => import('@/pages/mall/admin/setting/delivery/template.uvue'))],
['SettingInterfaceOnepassConfig', defineAsyncComponent(() => import('@/pages/mall/admin/setting/interface/onepass/config.uvue'))],
['SettingInterfaceOnepassIndex', defineAsyncComponent(() => import('@/pages/mall/admin/setting/interface/onepass/index.uvue'))],
@@ -169,32 +170,42 @@ export const componentMap: Map = new Map([
['DecorationLink', defineAsyncComponent(() => import('@/pages/mall/admin/design/link-management.uvue'))],
// 应用模块
- ['AppStatistic', PlaceholderPage],
- ['AppList', PlaceholderPage],
+ ['AppWechatMenu', defineAsyncComponent(() => import('@/pages/mall/admin/app/wechat/menu.uvue'))],
+ ['AppWechatNews', defineAsyncComponent(() => import('@/pages/mall/admin/app/wechat/news.uvue'))],
+ ['AppWechatReplyFollow', defineAsyncComponent(() => import('@/pages/mall/admin/app/wechat/reply/follow.uvue'))],
+ ['AppWechatReplyKeyword', defineAsyncComponent(() => import('@/pages/mall/admin/app/wechat/reply/keyword.uvue'))],
+ ['AppWechatReplyInvalid', defineAsyncComponent(() => import('@/pages/mall/admin/app/wechat/reply/invalid.uvue'))],
+ ['AppWechatConfig', defineAsyncComponent(() => import('@/pages/mall/admin/app/wechat/config.uvue'))],
+ ['AppRoutineDownload', defineAsyncComponent(() => import('@/pages/mall/admin/app/routine/download.uvue'))],
+ ['AppRoutineConfig', defineAsyncComponent(() => import('@/pages/mall/admin/app/routine/config.uvue'))],
+ ['AppMobileConfig', defineAsyncComponent(() => import('@/pages/mall/admin/app/mobile/config.uvue'))],
+ ['AppMobileVersion', defineAsyncComponent(() => import('@/pages/mall/admin/app/mobile/version.uvue'))],
+ ['AppPcDesign', defineAsyncComponent(() => import('@/pages/mall/admin/app/pc/design.uvue'))],
+ ['AppPcConfig', defineAsyncComponent(() => import('@/pages/mall/admin/app/pc/config.uvue'))],
// 维护模块
- ['MaintainDevConfig', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/dev/config.uvue'))],
- ['MaintainDevData', PlaceholderPage],
- ['MaintainDevTask', PlaceholderPage],
- ['MaintainDevAuth', PlaceholderPage],
- ['MaintainDevModule', PlaceholderPage],
- ['MaintainDevEvent', PlaceholderPage],
- ['MaintainSecurityCache', PlaceholderPage],
- ['MaintainSecurityLog', PlaceholderPage],
- ['MaintainSecurityUpgrade', PlaceholderPage],
- ['MaintainDataLogistics', PlaceholderPage],
- ['MaintainDataCity', PlaceholderPage],
- ['MaintainDataClear', PlaceholderPage],
- ['MaintainApiAccount', PlaceholderPage],
- ['MaintainLangList', PlaceholderPage],
- ['MaintainLangDetail', PlaceholderPage],
- ['MaintainLangRegion', PlaceholderPage],
- ['MaintainLangConfig', PlaceholderPage],
- ['MaintainToolDb', PlaceholderPage],
- ['MaintainToolFile', PlaceholderPage],
- ['MaintainToolApi', PlaceholderPage],
- ['MaintainToolDic', PlaceholderPage],
- ['MaintainSysInfo', PlaceholderPage]
+ ['MaintainDevConfig', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/dev-config/category.uvue'))],
+ ['MaintainDevData', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/dev-config/combination-data.uvue'))],
+ ['MaintainDevTask', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/dev-config/cron-job.uvue'))],
+ ['MaintainDevAuth', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/dev-config/permission.uvue'))],
+ ['MaintainDevModule', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/dev-config/module-config.uvue'))],
+ ['MaintainDevEvent', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/dev-config/custom-event.uvue'))],
+ ['MaintainSecurityCache', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/security/refresh-cache.uvue'))],
+ ['MaintainSecurityLog', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/security/system-log.uvue'))],
+ ['MaintainSecurityUpgrade', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/security/online-upgrade.uvue'))],
+ ['MaintainDataLogistics', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/data/logistics.uvue'))],
+ ['MaintainDataCity', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/data/city.uvue'))],
+ ['MaintainDataClear', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/data/clear.uvue'))],
+ ['MaintainApiAccount', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/api/account.uvue'))],
+ ['MaintainLangList', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/lang/list.uvue'))],
+ ['MaintainLangDetail', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/lang/detail.uvue'))],
+ ['MaintainLangRegion', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/lang/region.uvue'))],
+ ['MaintainLangConfig', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/lang/config.uvue'))],
+ ['MaintainToolDb', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/dev-tools/database.uvue'))],
+ ['MaintainToolFile', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/dev-tools/file.uvue'))],
+ ['MaintainToolApi', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/dev-tools/api.uvue'))],
+ ['MaintainToolDic', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/dev-tools/data-dict.uvue'))],
+ ['MaintainSysInfo', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/sys/info.uvue'))]
])
/**
diff --git a/layouts/admin/router/adminRoutes.uts b/layouts/admin/router/adminRoutes.uts
index ab48e721..c88c8d70 100644
--- a/layouts/admin/router/adminRoutes.uts
+++ b/layouts/admin/router/adminRoutes.uts
@@ -173,10 +173,13 @@ export const topMenus: TopMenu[] = [
id: 'app',
title: '应用',
icon: 'app',
- path: '/pages/mall/admin/app/statistic',
+ path: '/pages/mall/admin/app/wechat/menu',
order: 11,
groups: [
- { id: 'app-manage', title: '', order: 1 }
+ { id: 'app-wechat', title: '公众号', order: 1 },
+ { id: 'app-routine', title: '小程序', order: 2 },
+ { id: 'app-mobile', title: 'APP', order: 3 },
+ { id: 'app-pc', title: 'PC端', order: 4 }
]
},
{
@@ -197,7 +200,7 @@ export const topMenus: TopMenu[] = [
id: 'maintain',
title: '维护',
icon: 'tool',
- path: '/pages/mall/admin/maintain/dev/config',
+ path: '/pages/mall/admin/maintain/dev-config/category',
order: 13,
groups: [
{ id: 'maintain-dev', title: '开发配置', order: 1 },
@@ -894,180 +897,6 @@ export const routes: RouteRecord[] = [
order: 1
},
- // ========== 设置模块 ==========
- // 1. 系统设置
- {
- id: 'setting_systemConfig',
- title: '系统设置',
- path: '/pages/mall/admin/setting/system/config',
- componentKey: 'SettingSystemConfig',
- parentId: 'setting',
- groupId: 'setting-system',
- auth: ['admin-setting-system-config'],
- order: 1
- },
-
- // 2. 通知管理
- {
- id: 'setting_message',
- title: '消息管理',
- path: '/pages/mall/admin/setting/message',
- componentKey: 'SettingMessage',
- parentId: 'setting',
- groupId: 'setting-message',
- order: 1
- },
- {
- id: 'setting_agreement',
- title: '协议管理',
- path: '/pages/mall/admin/setting/agreement',
- componentKey: 'SettingAgreement',
- parentId: 'setting',
- groupId: 'setting-message',
- order: 2
- },
- {
- id: 'setting_ticket',
- title: '客服设置',
- path: '/pages/mall/admin/setting/ticket',
- componentKey: 'SettingTicket',
- parentId: 'setting',
- groupId: 'setting-message',
- order: 3
- },
-
- // 3. 权限管理
- {
- id: 'setting_auth_role',
- title: '角色管理',
- path: '/pages/mall/admin/setting/auth/role',
- componentKey: 'SettingAuthRole',
- parentId: 'setting',
- groupId: 'setting-auth',
- order: 1
- },
- {
- id: 'setting_auth_admin',
- title: '管理员管理',
- path: '/pages/mall/admin/setting/auth/admin',
- componentKey: 'SettingAuthAdmin',
- parentId: 'setting',
- groupId: 'setting-auth',
- order: 2
- },
- {
- id: 'setting_auth_permission',
- title: '权限管理',
- path: '/pages/mall/admin/setting/auth/permission',
- componentKey: 'SettingAuthPermission',
- parentId: 'setting',
- groupId: 'setting-auth',
- order: 3
- },
-
- // 4. 物流设置
- {
- id: 'setting_delivery_staff',
- title: '配送员管理',
- path: '/pages/mall/admin/setting/delivery/staff',
- componentKey: 'SettingDeliveryStaff',
- parentId: 'setting',
- groupId: 'setting-delivery',
- order: 1
- },
- {
- id: 'setting_delivery_station',
- title: '提货点管理',
- path: '/pages/mall/admin/setting/delivery/station',
- componentKey: 'SettingDeliveryStation',
- parentId: 'setting',
- groupId: 'setting-delivery',
- order: 2
- },
- {
- id: 'setting_delivery_template',
- title: '运费模板',
- path: '/pages/mall/admin/setting/delivery/template',
- componentKey: 'SettingDeliveryTemplate',
- parentId: 'setting',
- groupId: 'setting-delivery',
- order: 3
- },
-
- // 5. 接口设置
- {
- id: 'setting_interface_onepass_config',
- title: '总平台配置',
- path: '/pages/mall/admin/setting/interface/onepass/config',
- componentKey: 'SettingInterfaceOnepassConfig',
- parentId: 'setting',
- groupId: 'setting-interface',
- order: 1
- },
- {
- id: 'setting_interface_onepass_index',
- title: '账号列表',
- path: '/pages/mall/admin/setting/interface/onepass/index',
- componentKey: 'SettingInterfaceOnepassIndex',
- parentId: 'setting',
- groupId: 'setting-interface',
- order: 2
- },
- {
- id: 'setting_interface_storage',
- title: '存储配置',
- path: '/pages/mall/admin/setting/interface/storage',
- componentKey: 'SettingInterfaceStorage',
- parentId: 'setting',
- groupId: 'setting-interface',
- order: 3
- },
- {
- id: 'setting_interface_collect',
- title: '商品采集',
- path: '/pages/mall/admin/setting/interface/collect',
- componentKey: 'SettingInterfaceCollect',
- parentId: 'setting',
- groupId: 'setting-interface',
- order: 4
- },
- {
- id: 'setting_interface_logistics',
- title: '物流查询',
- path: '/pages/mall/admin/setting/interface/logistics',
- componentKey: 'SettingInterfaceLogistics',
- parentId: 'setting',
- groupId: 'setting-interface',
- order: 5
- },
- {
- id: 'setting_interface_esheet',
- title: '电子面单',
- path: '/pages/mall/admin/setting/interface/e-sheet',
- componentKey: 'SettingInterfaceESheet',
- parentId: 'setting',
- groupId: 'setting-interface',
- order: 6
- },
- {
- id: 'setting_interface_sms',
- title: '短信接口',
- path: '/pages/mall/admin/setting/interface/sms',
- componentKey: 'SettingInterfaceSms',
- parentId: 'setting',
- groupId: 'setting-interface',
- order: 7
- },
- {
- id: 'setting_interface_payment',
- title: '商城支付',
- path: '/pages/mall/admin/setting/interface/payment',
- componentKey: 'SettingInterfacePayment',
- parentId: 'setting',
- groupId: 'setting-interface',
- order: 8
- },
-
// ========== 分销模块 ==========
{
id: 'distribution_statistic',
@@ -1246,65 +1075,69 @@ export const routes: RouteRecord[] = [
},
// ========== 设置模块 (1:1 复刻 CRMEB 路由结构) ==========
- // 通知管理
+ // 1. 系统设置
+ { id: 'setting_system_config', title: '系统配置', path: '/pages/mall/admin/setting/system/config', componentKey: 'SettingSystemConfig', parentId: 'setting', groupId: 'setting-system', order: 1 },
+
+ // 2. 通知管理
{ id: 'setting_message_index', title: '消息管理', path: '/pages/mall/admin/setting/message', componentKey: 'SettingMessageIndex', parentId: 'setting', groupId: 'setting-message', order: 1 },
{ id: 'setting_protocol_index', title: '协议设置', path: '/pages/mall/admin/setting/agreement', componentKey: 'SettingProtocolIndex', parentId: 'setting', groupId: 'setting-message', order: 2 },
{ id: 'setting_ticket_index', title: '小票配置', path: '/pages/mall/admin/setting/ticket', componentKey: 'SettingTicketIndex', parentId: 'setting', groupId: 'setting-message', order: 3 },
- // 权限管理
+ // 3. 权限管理
{ id: 'setting_auth_admin', title: '管理员管理', path: '/pages/mall/admin/setting/auth/admin', componentKey: 'SettingAuthAdmin', parentId: 'setting', groupId: 'setting-auth', order: 1 },
{ id: 'setting_auth_role', title: '角色管理', path: '/pages/mall/admin/setting/auth/role', componentKey: 'SettingAuthRole', parentId: 'setting', groupId: 'setting-auth', order: 2 },
- { id: 'setting_auth_menu', title: '菜单管理', path: '/pages/mall/admin/setting/auth/permission', componentKey: 'SettingAuthMenu', parentId: 'setting', groupId: 'setting-auth', order: 3 },
+ { id: 'setting_auth_menu', title: '菜单管理', path: '/pages/mall/admin/setting/auth/permission', componentKey: 'SettingAuthPermission', parentId: 'setting', groupId: 'setting-auth', order: 3 },
- // 物流设置
- { id: 'setting_delivery_courier', title: '配送员管理', path: '/pages/mall/admin/setting/delivery/staff', componentKey: 'SettingDeliveryCourier', parentId: 'setting', groupId: 'setting-delivery', order: 1 },
- { id: 'setting_delivery_pickup_list', title: '提货点', path: '/pages/mall/admin/setting/delivery/station', componentKey: 'SettingDeliveryPickupList', parentId: 'setting', groupId: 'setting-delivery', order: 2 },
- { id: 'setting_delivery_verifier', title: '核销员', path: '/pages/mall/admin/setting/delivery/station', componentKey: 'SettingDeliveryVerifier', parentId: 'setting', groupId: 'setting-delivery', order: 3 },
- { id: 'setting_delivery_freight', title: '运费模板', path: '/pages/mall/admin/setting/delivery/template', componentKey: 'SettingDeliveryFreight', parentId: 'setting', groupId: 'setting-delivery', order: 4 },
+ // 4. 物流设置
+ { id: 'setting_delivery_courier', title: '配送员管理', path: '/pages/mall/admin/setting/delivery/staff', componentKey: 'SettingDeliveryStaff', parentId: 'setting', groupId: 'setting-delivery', order: 1 },
+ { id: 'setting_delivery_pickup_list', title: '提货点', path: '/pages/mall/admin/setting/delivery/station', componentKey: 'SettingDeliveryStation', parentId: 'setting', groupId: 'setting-delivery', order: 2 },
+ { id: 'setting_delivery_verifier', title: '核销员', path: '/pages/mall/admin/setting/delivery/verifier', componentKey: 'SettingDeliveryVerifier', parentId: 'setting', groupId: 'setting-delivery', order: 3 },
+ { id: 'setting_delivery_freight', title: '运费模板', path: '/pages/mall/admin/setting/delivery/template', componentKey: 'SettingDeliveryTemplate', parentId: 'setting', groupId: 'setting-delivery', order: 4 },
- // 接口设置
- { id: 'setting_api_yht_page', title: '一号通页面', path: '/pages/mall/admin/setting/interface/onepass/index', componentKey: 'SettingApiYhtPage', parentId: 'setting', groupId: 'setting-interface', order: 1 },
- { id: 'setting_api_yht_config', title: '一号通配置', path: '/pages/mall/admin/setting/interface/onepass/config', componentKey: 'SettingApiYhtConfig', parentId: 'setting', groupId: 'setting-interface', order: 2 },
- { id: 'setting_api_storage', title: '系统存储配置', path: '/pages/mall/admin/setting/interface/storage', componentKey: 'SettingApiStorage', parentId: 'setting', groupId: 'setting-interface', order: 3 },
- { id: 'setting_api_collect', title: '商品采集配置', path: '/pages/mall/admin/setting/interface/collect', componentKey: 'SettingApiCollect', parentId: 'setting', groupId: 'setting-interface', order: 4 },
- { id: 'setting_api_logistics', title: '物流查询配置', path: '/pages/mall/admin/setting/interface/logistics', componentKey: 'SettingApiLogistics', parentId: 'setting', groupId: 'setting-interface', order: 5 },
- { id: 'setting_api_waybill', title: '电子面单配置', path: '/pages/mall/admin/setting/interface/e-sheet', componentKey: 'SettingApiWaybill', parentId: 'setting', groupId: 'setting-interface', order: 6 },
- { id: 'setting_api_sms', title: '短信接口配置', path: '/pages/mall/admin/setting/interface/sms', componentKey: 'SettingApiSms', parentId: 'setting', groupId: 'setting-interface', order: 7 },
- { id: 'setting_api_pay', title: '商城支付配置', path: '/pages/mall/admin/setting/interface/payment', componentKey: 'SettingApiPay', parentId: 'setting', groupId: 'setting-interface', order: 8 },
+ // 5. 接口设置
+ { id: 'setting_api_yht_page', title: '一号通页面', path: '/pages/mall/admin/setting/interface/onepass/index', componentKey: 'SettingInterfaceOnepassIndex', parentId: 'setting', groupId: 'setting-interface', order: 1 },
+ { id: 'setting_api_yht_config', title: '一号通配置', path: '/pages/mall/admin/setting/interface/onepass/config', componentKey: 'SettingInterfaceOnepassConfig', parentId: 'setting', groupId: 'setting-interface', order: 2 },
+ { id: 'setting_api_storage', title: '系统存储配置', path: '/pages/mall/admin/setting/interface/storage', componentKey: 'SettingInterfaceStorage', parentId: 'setting', groupId: 'setting-interface', order: 3 },
+ { id: 'setting_api_collect', title: '商品采集配置', path: '/pages/mall/admin/setting/interface/collect', componentKey: 'SettingInterfaceCollect', parentId: 'setting', groupId: 'setting-interface', order: 4 },
+ { id: 'setting_api_logistics', title: '物流查询配置', path: '/pages/mall/admin/setting/interface/logistics', componentKey: 'SettingInterfaceLogistics', parentId: 'setting', groupId: 'setting-interface', order: 5 },
+ { id: 'setting_api_waybill', title: '电子面单配置', path: '/pages/mall/admin/setting/interface/e-sheet', componentKey: 'SettingInterfaceESheet', parentId: 'setting', groupId: 'setting-interface', order: 6 },
+ { id: 'setting_api_sms', title: '短信接口配置', path: '/pages/mall/admin/setting/interface/sms', componentKey: 'SettingInterfaceSms', parentId: 'setting', groupId: 'setting-interface', order: 7 },
+ { id: 'setting_api_pay', title: '商城支付配置', path: '/pages/mall/admin/setting/interface/payment', componentKey: 'SettingInterfacePayment', parentId: 'setting', groupId: 'setting-interface', order: 8 },
// ========== 应用模块 ==========
- {
- id: 'app_statistic',
- title: '应用统计',
- path: '/pages/mall/admin/app/statistic',
- componentKey: 'AppStatistic',
- parentId: 'app',
- groupId: 'app-manage',
- order: 1
- },
- {
- id: 'app_list',
- title: '应用列表',
- path: '/pages/mall/admin/app/list',
- componentKey: 'AppList',
- parentId: 'app',
- groupId: 'app-manage',
- order: 2
- },
+ // 1. 公众号
+ { id: 'app_wechat_menu', title: '微信菜单', path: '/pages/mall/admin/app/wechat/menu', componentKey: 'AppWechatMenu', parentId: 'app', groupId: 'app-wechat', order: 1 },
+ { id: 'app_wechat_news', title: '图文管理', path: '/pages/mall/admin/app/wechat/news', componentKey: 'AppWechatNews', parentId: 'app', groupId: 'app-wechat', order: 2 },
+ { id: 'app_wechat_reply_follow', title: '关注回复', path: '/pages/mall/admin/app/wechat/reply/follow', componentKey: 'AppWechatReplyFollow', parentId: 'app', groupId: 'app-wechat', order: 3 },
+ { id: 'app_wechat_reply_keyword', title: '关键字回复', path: '/pages/mall/admin/app/wechat/reply/keyword', componentKey: 'AppWechatReplyKeyword', parentId: 'app', groupId: 'app-wechat', order: 4 },
+ { id: 'app_wechat_reply_invalid', title: '无效词回复', path: '/pages/mall/admin/app/wechat/reply/invalid', componentKey: 'AppWechatReplyInvalid', parentId: 'app', groupId: 'app-wechat', order: 5 },
+ { id: 'app_wechat_config', title: '公众号配置', path: '/pages/mall/admin/app/wechat/config', componentKey: 'AppWechatConfig', parentId: 'app', groupId: 'app-wechat', order: 6 },
+
+ // 2. 小程序
+ { id: 'app_routine_download', title: '小程序下载', path: '/pages/mall/admin/app/routine/download', componentKey: 'AppRoutineDownload', parentId: 'app', groupId: 'app-routine', order: 1 },
+ { id: 'app_routine_config', title: '小程序配置', path: '/pages/mall/admin/app/routine/config', componentKey: 'AppRoutineConfig', parentId: 'app', groupId: 'app-routine', order: 2 },
+
+ // 3. APP
+ { id: 'app_mobile_config', title: 'APP配置', path: '/pages/mall/admin/app/mobile/config', componentKey: 'AppMobileConfig', parentId: 'app', groupId: 'app-mobile', order: 1 },
+ { id: 'app_mobile_version', title: '版本管理', path: '/pages/mall/admin/app/mobile/version', componentKey: 'AppMobileVersion', parentId: 'app', groupId: 'app-mobile', order: 2 },
+
+ // 4. PC端
+ { id: 'app_pc_design', title: 'PC端装修', path: '/pages/mall/admin/app/pc/design', componentKey: 'AppPcDesign', parentId: 'app', groupId: 'app-pc', order: 1 },
+ { id: 'app_pc_config', title: 'PC端配置', path: '/pages/mall/admin/app/pc/config', componentKey: 'AppPcConfig', parentId: 'app', groupId: 'app-pc', order: 2 },
// ========== 维护模块 ==========
// 开发配置
- { id: 'maintain_dev_config', title: '配置分类', path: '/pages/mall/admin/maintain/dev/config', componentKey: 'MaintainDevConfig', parentId: 'maintain', groupId: 'maintain-dev', order: 1 },
- { id: 'maintain_dev_data', title: '组合数据', path: '/pages/mall/admin/maintain/dev/data', componentKey: 'MaintainDevData', parentId: 'maintain', groupId: 'maintain-dev', order: 2 },
- { id: 'maintain_dev_task', title: '定时任务', path: '/pages/mall/admin/maintain/dev/task', componentKey: 'MaintainDevTask', parentId: 'maintain', groupId: 'maintain-dev', order: 3 },
- { id: 'maintain_dev_auth', title: '权限维护', path: '/pages/mall/admin/maintain/dev/auth', componentKey: 'MaintainDevAuth', parentId: 'maintain', groupId: 'maintain-dev', order: 4 },
- { id: 'maintain_dev_module', title: '模块配置', path: '/pages/mall/admin/maintain/dev/module', componentKey: 'MaintainDevModule', parentId: 'maintain', groupId: 'maintain-dev', order: 5 },
- { id: 'maintain_dev_event', title: '自定事件', path: '/pages/mall/admin/maintain/dev/event', componentKey: 'MaintainDevEvent', parentId: 'maintain', groupId: 'maintain-dev', order: 6 },
+ { id: 'maintain_dev_config', title: '配置分类', path: '/pages/mall/admin/maintain/dev-config/category', componentKey: 'MaintainDevConfig', parentId: 'maintain', groupId: 'maintain-dev', order: 1 },
+ { id: 'maintain_dev_data', title: '组合数据', path: '/pages/mall/admin/maintain/dev-config/combination-data', componentKey: 'MaintainDevData', parentId: 'maintain', groupId: 'maintain-dev', order: 2 },
+ { id: 'maintain_dev_task', title: '定时任务', path: '/pages/mall/admin/maintain/dev-config/cron-job', componentKey: 'MaintainDevTask', parentId: 'maintain', groupId: 'maintain-dev', order: 3 },
+ { id: 'maintain_dev_auth', title: '权限维护', path: '/pages/mall/admin/maintain/dev-config/permission', componentKey: 'MaintainDevAuth', parentId: 'maintain', groupId: 'maintain-dev', order: 4 },
+ { id: 'maintain_dev_module', title: '模块配置', path: '/pages/mall/admin/maintain/dev-config/module-config', componentKey: 'MaintainDevModule', parentId: 'maintain', groupId: 'maintain-dev', order: 5 },
+ { id: 'maintain_dev_event', title: '自定事件', path: '/pages/mall/admin/maintain/dev-config/custom-event', componentKey: 'MaintainDevEvent', parentId: 'maintain', groupId: 'maintain-dev', order: 6 },
// 安全维护
- { id: 'maintain_security_cache', title: '刷新缓存', path: '/pages/mall/admin/maintain/security/cache', componentKey: 'MaintainSecurityCache', parentId: 'maintain', groupId: 'maintain-security', order: 1 },
- { id: 'maintain_security_log', title: '系统日志', path: '/pages/mall/admin/maintain/security/log', componentKey: 'MaintainSecurityLog', parentId: 'maintain', groupId: 'maintain-security', order: 2 },
- { id: 'maintain_security_upgrade', title: '在线升级', path: '/pages/mall/admin/maintain/security/upgrade', componentKey: 'MaintainSecurityUpgrade', parentId: 'maintain', groupId: 'maintain-security', order: 3 },
+ { id: 'maintain_security_cache', title: '刷新缓存', path: '/pages/mall/admin/maintain/security/refresh-cache', componentKey: 'MaintainSecurityCache', parentId: 'maintain', groupId: 'maintain-security', order: 1 },
+ { id: 'maintain_security_log', title: '系统日志', path: '/pages/mall/admin/maintain/security/system-log', componentKey: 'MaintainSecurityLog', parentId: 'maintain', groupId: 'maintain-security', order: 2 },
+ { id: 'maintain_security_upgrade', title: '在线升级', path: '/pages/mall/admin/maintain/security/online-upgrade', componentKey: 'MaintainSecurityUpgrade', parentId: 'maintain', groupId: 'maintain-security', order: 3 },
// 数据维护
{ id: 'maintain_data_logistics', title: '物流公司', path: '/pages/mall/admin/maintain/data/logistics', componentKey: 'MaintainDataLogistics', parentId: 'maintain', groupId: 'maintain-data', order: 1 },
@@ -1321,10 +1154,10 @@ export const routes: RouteRecord[] = [
{ id: 'maintain_lang_config', title: '翻译配置', path: '/pages/mall/admin/maintain/lang/config', componentKey: 'MaintainLangConfig', parentId: 'maintain', groupId: 'maintain-lang', order: 4 },
// 开发工具
- { id: 'maintain_tool_db', title: '数据库管理', path: '/pages/mall/admin/maintain/tool/db', componentKey: 'MaintainToolDb', parentId: 'maintain', groupId: 'maintain-tool', order: 1 },
- { id: 'maintain_tool_file', title: '文件管理', path: '/pages/mall/admin/maintain/tool/file', componentKey: 'MaintainToolFile', parentId: 'maintain', groupId: 'maintain-tool', order: 2 },
- { id: 'maintain_tool_api', title: '接口管理', path: '/pages/mall/admin/maintain/tool/api', componentKey: 'MaintainToolApi', parentId: 'maintain', groupId: 'maintain-tool', order: 3 },
- { id: 'maintain_tool_dic', title: '数据字典', path: '/pages/mall/admin/maintain/tool/dic', componentKey: 'MaintainToolDic', parentId: 'maintain', groupId: 'maintain-tool', order: 4 },
+ { id: 'maintain_tool_db', title: '数据库管理', path: '/pages/mall/admin/maintain/dev-tools/database', componentKey: 'MaintainToolDb', parentId: 'maintain', groupId: 'maintain-tool', order: 1 },
+ { id: 'maintain_tool_file', title: '文件管理', path: '/pages/mall/admin/maintain/dev-tools/file', componentKey: 'MaintainToolFile', parentId: 'maintain', groupId: 'maintain-tool', order: 2 },
+ { id: 'maintain_tool_api', title: '接口管理', path: '/pages/mall/admin/maintain/dev-tools/api', componentKey: 'MaintainToolApi', parentId: 'maintain', groupId: 'maintain-tool', order: 3 },
+ { id: 'maintain_tool_dic', title: '数据字典', path: '/pages/mall/admin/maintain/dev-tools/data-dict', componentKey: 'MaintainToolDic', parentId: 'maintain', groupId: 'maintain-tool', order: 4 },
// 系统信息
{ id: 'maintain_sys_info', title: '系统信息', path: '/pages/mall/admin/maintain/sys/info', componentKey: 'MaintainSysInfo', parentId: 'maintain', groupId: 'maintain-sys', order: 1 }
diff --git a/layouts/admin/router/settingSubSiderMenu.uts b/layouts/admin/router/settingSubSiderMenu.uts
index b26a8313..0f298de4 100644
--- a/layouts/admin/router/settingSubSiderMenu.uts
+++ b/layouts/admin/router/settingSubSiderMenu.uts
@@ -20,7 +20,7 @@ export const settingSubSiderMenu: MenuNode[] = [
{ id: 'setting_delivery_courier', title: '配送员管理', type: 'page', path: '/pages/mall/admin/setting/delivery/staff' },
{ id: 'pickup_order_group', title: '提货点设置', type: 'group', children: [
{ id: 'setting_delivery_pickup_list', title: '提货点', type: 'page', path: '/pages/mall/admin/setting/delivery/station' },
- { id: 'setting_delivery_verifier', title: '核销员', type: 'page', path: '/pages/mall/admin/setting/delivery/station' },
+ { id: 'setting_delivery_verifier', title: '核销员', type: 'page', path: '/pages/mall/admin/setting/delivery/verifier' },
{ id: 'setting_delivery_freight', title: '运费模板', type: 'page', path: '/pages/mall/admin/setting/delivery/template' }
]}
]
diff --git a/pages.json b/pages.json
index 929542cd..c74049ac 100644
--- a/pages.json
+++ b/pages.json
@@ -605,6 +605,244 @@
"style": {
"navigationBarTitleText": "签到记录"
}
+ },
+ {
+ "path": "maintain/dev-tools/database",
+ "style": {
+ "navigationBarTitleText": "数据库管理",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "maintain/dev-tools/file",
+ "style": {
+ "navigationBarTitleText": "文件管理",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "maintain/dev-tools/api",
+ "style": {
+ "navigationBarTitleText": "接口管理",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "maintain/dev-tools/data-dict",
+ "style": {
+ "navigationBarTitleText": "数据字典",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "setting/message",
+ "style": {
+ "navigationBarTitleText": "消息管理",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "setting/agreement",
+ "style": {
+ "navigationBarTitleText": "协议设置",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "setting/ticket",
+ "style": {
+ "navigationBarTitleText": "小票配置",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "setting/auth/admin",
+ "style": {
+ "navigationBarTitleText": "管理员管理",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "setting/auth/role",
+ "style": {
+ "navigationBarTitleText": "角色管理",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "setting/auth/permission",
+ "style": {
+ "navigationBarTitleText": "权限规则",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "setting/delivery/staff",
+ "style": {
+ "navigationBarTitleText": "配送员管理",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "setting/delivery/station",
+ "style": {
+ "navigationBarTitleText": "提货点",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "setting/delivery/verifier",
+ "style": {
+ "navigationBarTitleText": "核销员",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "setting/delivery/template",
+ "style": {
+ "navigationBarTitleText": "运费模板",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "setting/interface/onepass/index",
+ "style": {
+ "navigationBarTitleText": "一号通账户",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "setting/interface/onepass/config",
+ "style": {
+ "navigationBarTitleText": "一号通配置",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "setting/interface/storage",
+ "style": {
+ "navigationBarTitleText": "系统存储配置",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "setting/interface/collect",
+ "style": {
+ "navigationBarTitleText": "商品采集配置",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "setting/interface/logistics",
+ "style": {
+ "navigationBarTitleText": "物流查询配置",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "setting/interface/e-sheet",
+ "style": {
+ "navigationBarTitleText": "电子面单配置",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "setting/interface/sms",
+ "style": {
+ "navigationBarTitleText": "短信功能配置",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "setting/interface/payment",
+ "style": {
+ "navigationBarTitleText": "商城支付配置",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "app/wechat/menu",
+ "style": {
+ "navigationBarTitleText": "微信菜单",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "app/wechat/news",
+ "style": {
+ "navigationBarTitleText": "图文管理",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "app/wechat/reply/follow",
+ "style": {
+ "navigationBarTitleText": "微信关注回复",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "app/wechat/reply/keyword",
+ "style": {
+ "navigationBarTitleText": "关键字回复",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "app/wechat/reply/invalid",
+ "style": {
+ "navigationBarTitleText": "无效关键词回复",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "app/wechat/config",
+ "style": {
+ "navigationBarTitleText": "公众号配置",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "app/routine/download",
+ "style": {
+ "navigationBarTitleText": "小程序下载",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "app/routine/config",
+ "style": {
+ "navigationBarTitleText": "小程序配置",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "app/mobile/config",
+ "style": {
+ "navigationBarTitleText": "APP配置",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "app/mobile/version",
+ "style": {
+ "navigationBarTitleText": "版本管理",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "app/pc/design",
+ "style": {
+ "navigationBarTitleText": "PC端装修",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "app/pc/config",
+ "style": {
+ "navigationBarTitleText": "PC端配置",
+ "navigationStyle": "custom"
+ }
}
]
},
diff --git a/pages/mall/admin/app/mobile/config.uvue b/pages/mall/admin/app/mobile/config.uvue
new file mode 100644
index 00000000..328700d8
--- /dev/null
+++ b/pages/mall/admin/app/mobile/config.uvue
@@ -0,0 +1,70 @@
+
+
+
+
+ APP配置
+
+
+
+
+ APPID:
+
+ 微信开放平台申请移动应用后给予的APPID
+
+
+ AppSecret:
+
+ 微信开放平台申请移动应用后给予的AppSecret
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/app/mobile/version.uvue b/pages/mall/admin/app/mobile/version.uvue
new file mode 100644
index 00000000..9b5b8f75
--- /dev/null
+++ b/pages/mall/admin/app/mobile/version.uvue
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 暂无数据
+
+
+ {{ item.version }}
+ {{ item.platform }}
+ {{ item.info }}
+ {{ item.isForce ? '是' : '否' }}
+ {{ item.date }}
+ {{ item.url }}
+
+ 编辑
+ |
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/app/pc/config.uvue b/pages/mall/admin/app/pc/config.uvue
new file mode 100644
index 00000000..fd002329
--- /dev/null
+++ b/pages/mall/admin/app/pc/config.uvue
@@ -0,0 +1,311 @@
+
+
+
+
+
+
+ PC站点配置
+
+
+
+
+
+ PC端LOGO:
+
+
+
+
+ +
+
+
+ PC端LOGO
+
+
+
+
+ 联系电话:
+
+
+ PC底部显示的联系电话
+
+
+
+
+ 公司地址:
+
+
+ PC底部显示的公司地址
+
+
+
+
+ 关键词:
+
+
+ 网站关键词
+
+
+
+
+ 网站描述:
+
+
+ 网站描述
+
+
+
+
+ 二维码类型:
+
+
+
+
+ 公众号
+
+
+
+ 小程序
+
+
+ 商品详情手机购买显示公众号或者小程序码
+
+
+
+
+ 精品推荐个数:
+
+
+ 首页配置精品推荐个数
+
+
+
+
+ 首发新品个数:
+
+
+ 首页配置首发新品个数
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/app/pc/design.uvue b/pages/mall/admin/app/pc/design.uvue
new file mode 100644
index 00000000..64e09940
--- /dev/null
+++ b/pages/mall/admin/app/pc/design.uvue
@@ -0,0 +1,223 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 页面设置
+
+
+
+
+ 建议尺寸:140px * 60px
+ 除LOGO图标外,页面其他内容仅供参考
+
+
+
+
+ 更换图片
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/app/routine/config.uvue b/pages/mall/admin/app/routine/config.uvue
new file mode 100644
index 00000000..163ee920
--- /dev/null
+++ b/pages/mall/admin/app/routine/config.uvue
@@ -0,0 +1,379 @@
+
+
+
+
+
+
+
+ 小程序配置
+
+
+ 消息推送配置
+
+
+
+
+
+
+
+
+ 小程序名称:
+
+
+ 小程序名称
+
+
+
+
+ 客服类型:
+
+
+
+
+ 跟随系统
+
+
+
+ 小程序客服
+
+
+ 跟随系统:跟随系统使用默认客服、电话或者跳转链接;小程序客服:需要在小程序后台配置客服用户;
+
+
+
+
+ 手机号获取方式:
+
+
+
+
+ v
+
+ 微信授权
+
+
+
+ v
+
+ 手动填写
+
+
+ 小程序获取手机号的方式,微信授权和手机号验证码
+
+
+
+
+ 强制获取昵称头像:
+
+
+
+
+ 开启
+
+
+
+ 关闭
+
+
+ 是否在小程序用户授权之后,弹窗获取用户的昵称和头像
+
+
+
+
+ 发货信息管理:
+
+
+
+
+ 开启
+
+
+
+ 关闭
+
+
+ 小程序有订单发货管理时,请打开此开关,否则会导致订单资金冻结
+
+
+
+
+
+
+
+
+
+
+
+ 接口地址:
+
+
+ 配置小程序消息推送使用的接口地址,直接复制输入框内容(此项系统生成,无法修改)
+
+
+
+
+ 小程序验证TOKEN:
+
+
+ 小程序验证TOKEN
+
+
+
+
+ 消息加解密方式:
+
+
+
+
+ 明文模式
+
+
+
+ 兼容模式
+
+
+
+ 安全模式
+
+
+ 小程序消息推送中的消息加密方式,暂时仅支持明文模式
+
+
+
+
+ EncodingAESKey:
+
+
+ 消息加密密钥由43位字符组成,字符范围为A-Z,a-z,0-9
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/app/routine/download.uvue b/pages/mall/admin/app/routine/download.uvue
new file mode 100644
index 00000000..dbdd0af6
--- /dev/null
+++ b/pages/mall/admin/app/routine/download.uvue
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+ 小程序设置
+
+
+
+
+ 小程序名称:
+ CRMEB标准版
+
+
+
+ 小程序码:
+
+
+
+
+ 小程序包:
+
+
+
+
+
+ 是否已开通小程序直播
+ 请谨慎选择是否有开通小程序直播功能,否则将影响小程序的发布 可前往 帮助文档 查看如何开通直播功能
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/app/wechat/config.uvue b/pages/mall/admin/app/wechat/config.uvue
new file mode 100644
index 00000000..cefac889
--- /dev/null
+++ b/pages/mall/admin/app/wechat/config.uvue
@@ -0,0 +1,136 @@
+
+
+
+
+
+ {{ tab.label }}
+
+
+
+
+
+ AppID:
+
+ 微信公众号的AppID
+
+
+ AppSecret:
+
+ 微信公众号的AppSecret
+
+
+ 关注二维码:
+
+ +
+
+ 引导关注公众号显示的公众号关注二维码
+
+
+ 微信校验文件:
+
+ ⤒
+ 点击上传
+
+ 配置微信网页授权域名时候下载的微信校验文件,在此处上传
+
+
+
+
+
+
+
+
+
+ 接口地址:
+
+ 配置服务器域名使用的接口地址,直接复制输入框内容(此项系统生成,无法修改)
+
+
+ 消息加解密方式:
+
+
+
+
+
+ 如需使用安全模式请在管理中心修改,仅限服务号和认证订阅号
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/app/wechat/menu.uvue b/pages/mall/admin/app/wechat/menu.uvue
new file mode 100644
index 00000000..be37bb04
--- /dev/null
+++ b/pages/mall/admin/app/wechat/menu.uvue
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/app/wechat/news.uvue b/pages/mall/admin/app/wechat/news.uvue
new file mode 100644
index 00000000..52031cc1
--- /dev/null
+++ b/pages/mall/admin/app/wechat/news.uvue
@@ -0,0 +1,82 @@
+
+
+
+
+
+ 图文搜索:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ hahah
+ 207
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/app/wechat/reply/follow.uvue b/pages/mall/admin/app/wechat/reply/follow.uvue
new file mode 100644
index 00000000..c98422c5
--- /dev/null
+++ b/pages/mall/admin/app/wechat/reply/follow.uvue
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+
+
+
+ 🐷
+ {{ replyContent }}
+
+
+
+
+
+
+ 消息状态:
+
+
+
+
+
+
+
+ 消息类型:
+
+ 文字消息
+ ▼
+
+
+
+
+ 消息内容:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/app/wechat/reply/invalid.uvue b/pages/mall/admin/app/wechat/reply/invalid.uvue
new file mode 100644
index 00000000..d8225836
--- /dev/null
+++ b/pages/mall/admin/app/wechat/reply/invalid.uvue
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+ 🐷
+
+
+
+
+
+
+
+ 消息状态:
+
+
+
+
+
+
+
+ 消息类型:
+
+ 请选择规则状态
+ ▼
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/app/wechat/reply/keyword.uvue b/pages/mall/admin/app/wechat/reply/keyword.uvue
new file mode 100644
index 00000000..e4d5f17e
--- /dev/null
+++ b/pages/mall/admin/app/wechat/reply/keyword.uvue
@@ -0,0 +1,57 @@
+
+
+
+
+
+ 回复类型:
+
+ 请选择
+ ▼
+
+
+
+ 关键字:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 暂无数据
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/maintain/api/account.uvue b/pages/mall/admin/maintain/api/account.uvue
new file mode 100644
index 00000000..d66d22db
--- /dev/null
+++ b/pages/mall/admin/maintain/api/account.uvue
@@ -0,0 +1,278 @@
+
+
+
+
+
+ 获取访问 Token 的接口:\n请求 URL:/outapi/access_token 请求方式:POST 请求参数:appid和appsecret 返回数据:access_token:访问令牌 exp_time:令牌过期时间 auth_info:授权信息\n使用获取到的 Token 访问对外接口:\n在 HTTP 请求头中添加 Authorization 字段 字段值为 Bearer access_token(注意 Bearer 后有一个空格)
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.id }}
+ {{ item.account }}
+ {{ item.desc }}
+ {{ item.addTime }}
+ {{ item.lastTime }}
+ {{ item.lastIp }}
+
+
+ {{ item.status ? '开启' : '关闭' }}
+
+
+
+
+ 设置
+ |
+ 编辑
+ |
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/maintain/data/city.uvue b/pages/mall/admin/maintain/data/city.uvue
new file mode 100644
index 00000000..df67369d
--- /dev/null
+++ b/pages/mall/admin/maintain/data/city.uvue
@@ -0,0 +1,200 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.id }}
+
+ ˃
+ {{ item.name }}
+
+ {{ item.parentName }}
+
+ 添加
+ |
+ 编辑
+ |
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/maintain/data/clear.uvue b/pages/mall/admin/maintain/data/clear.uvue
new file mode 100644
index 00000000..d018f683
--- /dev/null
+++ b/pages/mall/admin/maintain/data/clear.uvue
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+
+
+
+
+ {{ card.title }}
+ {{ card.desc }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/maintain/data/logistics.uvue b/pages/mall/admin/maintain/data/logistics.uvue
new file mode 100644
index 00000000..ef523bdb
--- /dev/null
+++ b/pages/mall/admin/maintain/data/logistics.uvue
@@ -0,0 +1,227 @@
+
+
+
+
+
+
+
+ 是否显示:
+
+ 全部
+ ▼
+
+
+
+ 搜索:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.id }}
+ {{ item.name }}
+ {{ item.code }}
+ {{ item.sort }}
+
+
+
+
+ 编辑
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/maintain/dev-config/category.uvue b/pages/mall/admin/maintain/dev-config/category.uvue
index 62f852bc..20e1e0ec 100644
--- a/pages/mall/admin/maintain/dev-config/category.uvue
+++ b/pages/mall/admin/maintain/dev-config/category.uvue
@@ -1,22 +1,268 @@
-
-
-
+
-
-
+
diff --git a/pages/mall/admin/maintain/dev-config/combination-data.uvue b/pages/mall/admin/maintain/dev-config/combination-data.uvue
index c4665763..1c365fac 100644
--- a/pages/mall/admin/maintain/dev-config/combination-data.uvue
+++ b/pages/mall/admin/maintain/dev-config/combination-data.uvue
@@ -1,23 +1,223 @@
-
-
-
-
-
+
+
diff --git a/pages/mall/admin/maintain/dev-config/cron-job.uvue b/pages/mall/admin/maintain/dev-config/cron-job.uvue
index 1590ba9a..2b909ebc 100644
--- a/pages/mall/admin/maintain/dev-config/cron-job.uvue
+++ b/pages/mall/admin/maintain/dev-config/cron-job.uvue
@@ -1,22 +1,192 @@
-
-
-
-
- TODO: 定时任务
+
+
+
+
+
+ 启动定时任务两种方式:
+ 1、使用命令行启动:php think timer start --d; 如果更改了执行周期、编辑是否开启、删除定时任务需要重新启动下定时任务确保生效;
+ 2、使用接口触发定时任务,建议每分钟调用一次,接口地址 https://v5.crmeb.net/api/crontab/run
+
+
+
+
+
+
+ 系统任务
+ 自定义任务
+
+
+
+
+
+
+
+
+ {{ item.title }}
+ {{ item.desc }}
+ {{ item.cycle }}
+
+
+
+
+ 编辑
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
diff --git a/pages/mall/admin/maintain/dev-config/custom-event.uvue b/pages/mall/admin/maintain/dev-config/custom-event.uvue
index 4c96c92e..a54f5121 100644
--- a/pages/mall/admin/maintain/dev-config/custom-event.uvue
+++ b/pages/mall/admin/maintain/dev-config/custom-event.uvue
@@ -1,22 +1,155 @@
-
-
-
-
- TODO: 自定事件
+
+
+
+
+ 自定义事件说明:
+ 1、新增的事件会在对应的事件类型相关的流程中触发,例:选择用户登录,则在用户登录时执行代码。
+ 2、可以使用对应事件类型中的参数,例:$data['nickname'], $data['phone']等。
+ 3、调用类的时请写入完整路径,例:\think\facade\Db、\app\services\other\CacheServices::class等。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 暂无数据
+
+
+
+
-
-
-
+
diff --git a/pages/mall/admin/maintain/dev-config/module-config.uvue b/pages/mall/admin/maintain/dev-config/module-config.uvue
index f81dbc80..f9d08250 100644
--- a/pages/mall/admin/maintain/dev-config/module-config.uvue
+++ b/pages/mall/admin/maintain/dev-config/module-config.uvue
@@ -1,22 +1,122 @@
-
-
-
-
- TODO: 模块配置
+
+
+
+
+
+ 模块配置:
+
+
+
+
+
+
+
+ 模块配置,选中展示对应的模块,取消选中则前后端不展示模块相关内容
+
+
+
+
+
+
-
+
+function onSubmit() {
+ uni.showToast({ title: '已提交', icon: 'none' })
+}
+
+
+
-
diff --git a/pages/mall/admin/maintain/dev-config/permission.uvue b/pages/mall/admin/maintain/dev-config/permission.uvue
index 17e3d0cc..def04c1b 100644
--- a/pages/mall/admin/maintain/dev-config/permission.uvue
+++ b/pages/mall/admin/maintain/dev-config/permission.uvue
@@ -1,22 +1,263 @@
-
-
-
-
- TODO: 权限维护
+
+
+
+
+
+
+ 规则状态:
+
+ 请选择
+ ▼
+
+
+
+ 按钮名称:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ▶
+ {{ item.name }}
+
+ {{ item.auth }}
+ {{ item.route }}
+
+
+
+ {{ item.memo }}
+
+ 选择权限
+ |
+ 添加下级
+ |
+ 编辑
+ |
+ 删除
+
+
+
+
+
-
-
-
+
diff --git a/pages/mall/admin/maintain/dev-tools/api.uvue b/pages/mall/admin/maintain/dev-tools/api.uvue
index 8b863f2d..f29f8744 100644
--- a/pages/mall/admin/maintain/dev-tools/api.uvue
+++ b/pages/mall/admin/maintain/dev-tools/api.uvue
@@ -1,21 +1,330 @@
-
-
-
-
- TODO: 接口管理
-
-
-
-
-
-
+
diff --git a/pages/mall/admin/maintain/dev-tools/codegen.uvue b/pages/mall/admin/maintain/dev-tools/codegen.uvue
index 34fee12c..1d9d5f33 100644
--- a/pages/mall/admin/maintain/dev-tools/codegen.uvue
+++ b/pages/mall/admin/maintain/dev-tools/codegen.uvue
@@ -1,7 +1,6 @@
-
+
-
@@ -9,5 +8,14 @@
TODO: 代码生成
-
-
+
+
+
+
+
+
diff --git a/pages/mall/admin/maintain/dev-tools/data-dict.uvue b/pages/mall/admin/maintain/dev-tools/data-dict.uvue
index 39243ae3..489f4fa6 100644
--- a/pages/mall/admin/maintain/dev-tools/data-dict.uvue
+++ b/pages/mall/admin/maintain/dev-tools/data-dict.uvue
@@ -1,12 +1,200 @@
-
-
-
-
-TODO: 数据字典
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.id }}
+ {{ item.name }}
+ {{ item.tag }}
+ {{ item.type }}
+ {{ item.add_time }}
+
+ 编辑
+ 数据管理
+ 删除
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/maintain/dev-tools/database.uvue b/pages/mall/admin/maintain/dev-tools/database.uvue
index 5829d840..385330e6 100644
--- a/pages/mall/admin/maintain/dev-tools/database.uvue
+++ b/pages/mall/admin/maintain/dev-tools/database.uvue
@@ -1,12 +1,146 @@
-
-
-
-
-TODO: 数据库管理
-
-
-
+
+
+
+
+
+
+
+
+ 表名
+ 引擎
+ 行数
+ 数据大小
+ 索引大小
+
+ 操作
+
+
+
+ {{ item.name }}
+ {{ item.engine }}
+ {{ item.rows }}
+ {{ item.dataSize }}
+ {{ item.indexSize }}
+
+
+ 优化
+ 修复
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/maintain/dev-tools/file.uvue b/pages/mall/admin/maintain/dev-tools/file.uvue
index 51e49f39..6aff48d0 100644
--- a/pages/mall/admin/maintain/dev-tools/file.uvue
+++ b/pages/mall/admin/maintain/dev-tools/file.uvue
@@ -1,12 +1,144 @@
-
-
-
-
-TODO: 文件管理
-
-
-
+
+
+
+
+
+
+
+
+ 提示:密码配置在 /config/filesystem.php 文件中修改 'password' => '密码'
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/maintain/lang/config.uvue b/pages/mall/admin/maintain/lang/config.uvue
new file mode 100644
index 00000000..d3286dda
--- /dev/null
+++ b/pages/mall/admin/maintain/lang/config.uvue
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
+
+
+ *
+ AccessKey:
+
+
+
+ 机器翻译仅支持火山翻译,注册地址 https://console.volcengine.com,在访问控制里面新建 api 密钥
+
+
+
+
+
+ *
+ SecretKey:
+
+
+
+ 机器翻译仅支持火山翻译,注册地址 https://console.volcengine.com,在访问控制里面新建 api 密钥
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/maintain/lang/detail.uvue b/pages/mall/admin/maintain/lang/detail.uvue
new file mode 100644
index 00000000..1d781b5a
--- /dev/null
+++ b/pages/mall/admin/maintain/lang/detail.uvue
@@ -0,0 +1,274 @@
+
+
+
+
+
+
+
+ 语言分类:
+
+ 页面语言
+ ▼
+
+
+
+ 语言类型:
+
+ 中文(zh-CN)
+ ▼
+
+
+
+ 搜索:
+
+
+
+
+
+
+
+
+
+ 页面语言
+ 添加页面语言,添加完成之后状态码为中文文字,移动端面使用 $t('xxxx'),js文件中使用 this.$t('xxxx') 或者使用 that.$t('xxxx') 实现语言的切换
+
+
+ 接口语言
+ 添加接口语言,添加完成之后状态码为6位数字,接口返回提示信息时,直接返回对应的错误码即可实现语言的切换
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.id }}
+ {{ item.origin }}
+ {{ item.translation }}
+ {{ item.code }}
+ {{ item.type }}
+
+ 编辑
+ |
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/maintain/lang/list.uvue b/pages/mall/admin/maintain/lang/list.uvue
new file mode 100644
index 00000000..4610ecab
--- /dev/null
+++ b/pages/mall/admin/maintain/lang/list.uvue
@@ -0,0 +1,226 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.id }}
+
+ {{ item.name }}
+ 默认
+
+ {{ item.code }}
+
+
+ {{ item.status ? '开启' : '关闭' }}
+
+
+
+
+ 编辑
+ |
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/maintain/lang/region.uvue b/pages/mall/admin/maintain/lang/region.uvue
new file mode 100644
index 00000000..c9aaf194
--- /dev/null
+++ b/pages/mall/admin/maintain/lang/region.uvue
@@ -0,0 +1,191 @@
+
+
+
+
+
+
+
+ 搜索:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.id }}
+ {{ item.code }}
+ {{ item.desc }}
+ {{ item.lang || '暂无' }}
+
+ 编辑
+ |
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/maintain/security/online-upgrade.uvue b/pages/mall/admin/maintain/security/online-upgrade.uvue
index 227bd507..9183a3aa 100644
--- a/pages/mall/admin/maintain/security/online-upgrade.uvue
+++ b/pages/mall/admin/maintain/security/online-upgrade.uvue
@@ -1,12 +1,236 @@
-
-
-
-
-TODO: 在线升级
-
-
-
+
+
+
+
+ 温馨提示:检查更新需要授权码,请先授权后再检查更新!
+
+
+
+
+
+ {{ tab.label }}
+
+
+
+
+
+
+
+ 当前版本:
+ v3.1.2
+
+
+ 授权状态:
+ 未授权
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.id }}
+ {{ item.version }}
+ {{ item.content }}
+ {{ item.time }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/maintain/security/refresh-cache.uvue b/pages/mall/admin/maintain/security/refresh-cache.uvue
index 593611b5..87512487 100644
--- a/pages/mall/admin/maintain/security/refresh-cache.uvue
+++ b/pages/mall/admin/maintain/security/refresh-cache.uvue
@@ -1,12 +1,116 @@
-
-
-
-
-TODO: 刷新缓存
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/maintain/security/system-log.uvue b/pages/mall/admin/maintain/security/system-log.uvue
index 6b3289f3..e586e58a 100644
--- a/pages/mall/admin/maintain/security/system-log.uvue
+++ b/pages/mall/admin/maintain/security/system-log.uvue
@@ -1,12 +1,242 @@
-
-
-
-
-TODO: 系统日志
-
-
-
+
+
+
+
+
+
+ 选择时间:
+
+
+ -
+
+
+
+
+ 名称:
+
+ 请选择
+ ▼
+
+
+
+ 链接:
+
+
+
+ IP:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.id }}
+ {{ item.user }}
+ {{ item.action }}
+ {{ item.link }}
+ {{ item.ip }}
+ {{ item.type }}
+ {{ item.time }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/maintain/sys/info.uvue b/pages/mall/admin/maintain/sys/info.uvue
new file mode 100644
index 00000000..cc30e78d
--- /dev/null
+++ b/pages/mall/admin/maintain/sys/info.uvue
@@ -0,0 +1,178 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/setting/agreement.uvue b/pages/mall/admin/setting/agreement.uvue
index 10d80c88..7a98dcf7 100644
--- a/pages/mall/admin/setting/agreement.uvue
+++ b/pages/mall/admin/setting/agreement.uvue
@@ -1,23 +1,225 @@
-
-
-
-
- 协议管理 页面开发中...
-
-
-
-
+
+
+
+
+
+
+
+ {{ tab }}
+
+
+
+
+
+
+
+
+
+ H
+ B
+ I
+ U
+ S
+ 🔗
+ 🖼️
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 协议预览
+
+
+
+
+
+
diff --git a/pages/mall/admin/setting/auth/admin.uvue b/pages/mall/admin/setting/auth/admin.uvue
index a3fe4068..893a3025 100644
--- a/pages/mall/admin/setting/auth/admin.uvue
+++ b/pages/mall/admin/setting/auth/admin.uvue
@@ -1,23 +1,177 @@
-
diff --git a/pages/mall/admin/setting/auth/permission.uvue b/pages/mall/admin/setting/auth/permission.uvue
index cb9c5c56..3403bab8 100644
--- a/pages/mall/admin/setting/auth/permission.uvue
+++ b/pages/mall/admin/setting/auth/permission.uvue
@@ -1,23 +1,188 @@
-
diff --git a/pages/mall/admin/setting/auth/role.uvue b/pages/mall/admin/setting/auth/role.uvue
index 9ebc8c82..ef9abf5c 100644
--- a/pages/mall/admin/setting/auth/role.uvue
+++ b/pages/mall/admin/setting/auth/role.uvue
@@ -1,23 +1,174 @@
-
diff --git a/pages/mall/admin/setting/delivery/staff.uvue b/pages/mall/admin/setting/delivery/staff.uvue
index a0dc1ded..906f93c5 100644
--- a/pages/mall/admin/setting/delivery/staff.uvue
+++ b/pages/mall/admin/setting/delivery/staff.uvue
@@ -1,23 +1,162 @@
-
diff --git a/pages/mall/admin/setting/delivery/station.uvue b/pages/mall/admin/setting/delivery/station.uvue
index cb848d40..eb412d80 100644
--- a/pages/mall/admin/setting/delivery/station.uvue
+++ b/pages/mall/admin/setting/delivery/station.uvue
@@ -1,23 +1,230 @@
-
diff --git a/pages/mall/admin/setting/delivery/template.uvue b/pages/mall/admin/setting/delivery/template.uvue
index 55733264..f3d8952b 100644
--- a/pages/mall/admin/setting/delivery/template.uvue
+++ b/pages/mall/admin/setting/delivery/template.uvue
@@ -1,23 +1,187 @@
-
diff --git a/pages/mall/admin/setting/delivery/verifier.uvue b/pages/mall/admin/setting/delivery/verifier.uvue
new file mode 100644
index 00000000..a9d5d4c1
--- /dev/null
+++ b/pages/mall/admin/setting/delivery/verifier.uvue
@@ -0,0 +1,207 @@
+
+
+
+
+
+
+ 提货点名称:
+
+ {{ stationText }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.id }}
+
+
+
+ {{ item.wechatName }}
+ {{ item.name }}
+ {{ item.station }}
+ {{ item.addTime }}
+
+
+
+
+ 编辑
+ 删除
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/setting/interface/collect.uvue b/pages/mall/admin/setting/interface/collect.uvue
index aa80b437..0dada81f 100644
--- a/pages/mall/admin/setting/interface/collect.uvue
+++ b/pages/mall/admin/setting/interface/collect.uvue
@@ -1,23 +1,215 @@
-
+
-
-
diff --git a/pages/mall/admin/setting/interface/e-sheet.uvue b/pages/mall/admin/setting/interface/e-sheet.uvue
index 5a25a5e2..a0930ade 100644
--- a/pages/mall/admin/setting/interface/e-sheet.uvue
+++ b/pages/mall/admin/setting/interface/e-sheet.uvue
@@ -1,23 +1,240 @@
-
-
diff --git a/pages/mall/admin/setting/interface/logistics.uvue b/pages/mall/admin/setting/interface/logistics.uvue
index 1aacab1c..95a1004e 100644
--- a/pages/mall/admin/setting/interface/logistics.uvue
+++ b/pages/mall/admin/setting/interface/logistics.uvue
@@ -1,23 +1,209 @@
-
-
diff --git a/pages/mall/admin/setting/interface/onepass/config.uvue b/pages/mall/admin/setting/interface/onepass/config.uvue
index b8bd3b6f..2713dd2e 100644
--- a/pages/mall/admin/setting/interface/onepass/config.uvue
+++ b/pages/mall/admin/setting/interface/onepass/config.uvue
@@ -1,23 +1,90 @@
-
+
-
-
-
-
diff --git a/pages/mall/admin/setting/interface/onepass/index.uvue b/pages/mall/admin/setting/interface/onepass/index.uvue
index c0366097..b219c960 100644
--- a/pages/mall/admin/setting/interface/onepass/index.uvue
+++ b/pages/mall/admin/setting/interface/onepass/index.uvue
@@ -1,23 +1,149 @@
-
+
-
-
-
-
diff --git a/pages/mall/admin/setting/interface/payment.uvue b/pages/mall/admin/setting/interface/payment.uvue
index c27a802e..ce3f2279 100644
--- a/pages/mall/admin/setting/interface/payment.uvue
+++ b/pages/mall/admin/setting/interface/payment.uvue
@@ -1,23 +1,145 @@
-
-
diff --git a/pages/mall/admin/setting/interface/sms.uvue b/pages/mall/admin/setting/interface/sms.uvue
index 07e58033..388037ab 100644
--- a/pages/mall/admin/setting/interface/sms.uvue
+++ b/pages/mall/admin/setting/interface/sms.uvue
@@ -1,23 +1,277 @@
-
-
diff --git a/pages/mall/admin/setting/interface/storage.uvue b/pages/mall/admin/setting/interface/storage.uvue
index a53f763d..65909647 100644
--- a/pages/mall/admin/setting/interface/storage.uvue
+++ b/pages/mall/admin/setting/interface/storage.uvue
@@ -1,23 +1,481 @@
-
-
-
-
+
diff --git a/pages/mall/admin/setting/ticket.uvue b/pages/mall/admin/setting/ticket.uvue
index 5f729ad6..003cd873 100644
--- a/pages/mall/admin/setting/ticket.uvue
+++ b/pages/mall/admin/setting/ticket.uvue
@@ -1,23 +1,256 @@
-
-
-
-
- 客服设置 页面开发中...
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+ {{ item.id }}
+ {{ item.name }}
+ {{ item.platform }}
+ {{ item.account }}
+ {{ item.copies }}
+ {{ item.add_time }}
+
+
+
+
+ 设计
+ 编辑
+ 删除
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/admin/错误信息.txt b/pages/mall/admin/错误信息.txt
new file mode 100644
index 00000000..11f49967
--- /dev/null
+++ b/pages/mall/admin/错误信息.txt
@@ -0,0 +1,641 @@
+adminComponentMap.uts:194 GET http://localhost:5173/pages/mall/admin/maintain/dev-tools/file.uvue?t=1770810007330&import net::ERR_ABORTED 500 (Internal Server Error)
+(anonymous) @ adminComponentMap.uts:194
+load @ vue.runtime.esm.js:3681
+setup @ vue.runtime.esm.js:3760
+callWithErrorHandling @ vue.runtime.esm.js:1381
+setupStatefulComponent @ vue.runtime.esm.js:8985
+setupComponent @ vue.runtime.esm.js:8946
+mountComponent @ vue.runtime.esm.js:7262
+processComponent @ vue.runtime.esm.js:7228
+patch @ vue.runtime.esm.js:6694
+patchKeyedChildren @ vue.runtime.esm.js:7783
+patchChildren @ vue.runtime.esm.js:7564
+processFragment @ vue.runtime.esm.js:7202
+patch @ vue.runtime.esm.js:6668
+patchKeyedChildren @ vue.runtime.esm.js:7650
+patchChildren @ vue.runtime.esm.js:7564
+patchElement @ vue.runtime.esm.js:6989
+processElement @ vue.runtime.esm.js:6825
+patch @ vue.runtime.esm.js:6682
+componentUpdateFn @ vue.runtime.esm.js:7453
+run @ vue.runtime.esm.js:153
+instance.update @ vue.runtime.esm.js:7497
+callWithErrorHandling @ vue.runtime.esm.js:1381
+flushJobs @ vue.runtime.esm.js:1585
+Promise.then
+queueFlush @ vue.runtime.esm.js:1494
+queueJob @ vue.runtime.esm.js:1488
+(anonymous) @ vue.runtime.esm.js:7491
+resetScheduling @ vue.runtime.esm.js:236
+triggerEffects @ vue.runtime.esm.js:280
+triggerRefValue @ vue.runtime.esm.js:1033
+set value @ vue.runtime.esm.js:1078
+(anonymous) @ AdminLayout.uvue:263
+setTimeout
+watch.immediate @ AdminLayout.uvue:262
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+job @ vue.runtime.esm.js:3157
+callWithErrorHandling @ vue.runtime.esm.js:1381
+flushJobs @ vue.runtime.esm.js:1585
+Promise.then
+queueFlush @ vue.runtime.esm.js:1494
+queueJob @ vue.runtime.esm.js:1488
+scheduler @ vue.runtime.esm.js:3179
+resetScheduling @ vue.runtime.esm.js:236
+triggerEffects @ vue.runtime.esm.js:280
+triggerRefValue @ vue.runtime.esm.js:1033
+set value @ vue.runtime.esm.js:1078
+openRoute @ adminNavStore.uts:87
+onSubClick @ AdminLayout.uvue:318
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+emit @ vue.runtime.esm.js:1907
+(anonymous) @ vue.runtime.esm.js:9176
+handleNodeClick @ AdminSubSider.uvue:116
+onClick @ AdminSubSider.uvue?import:112
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+invoker @ vue.runtime.esm.js:10253
+AdminLayout.uvue:263 [Vue warn]: Unhandled error during execution of async component loader
+ at
+at
+at
+at
+at
+at
+at
+at
+at
+at
+at
+at
+at
+at
+at
+at
+warnHandler @ uni-h5.es.js:19975
+callWithErrorHandling @ vue.runtime.esm.js:1381
+warn$1 @ vue.runtime.esm.js:1207
+logError @ vue.runtime.esm.js:1438
+errorHandler @ uni-h5.es.js:19600
+callWithErrorHandling @ vue.runtime.esm.js:1381
+handleError @ vue.runtime.esm.js:1421
+onError @ vue.runtime.esm.js:3724
+(anonymous) @ vue.runtime.esm.js:3767
+Promise.catch
+setup @ vue.runtime.esm.js:3766
+callWithErrorHandling @ vue.runtime.esm.js:1381
+setupStatefulComponent @ vue.runtime.esm.js:8985
+setupComponent @ vue.runtime.esm.js:8946
+mountComponent @ vue.runtime.esm.js:7262
+processComponent @ vue.runtime.esm.js:7228
+patch @ vue.runtime.esm.js:6694
+patchKeyedChildren @ vue.runtime.esm.js:7783
+patchChildren @ vue.runtime.esm.js:7564
+processFragment @ vue.runtime.esm.js:7202
+patch @ vue.runtime.esm.js:6668
+patchKeyedChildren @ vue.runtime.esm.js:7650
+patchChildren @ vue.runtime.esm.js:7564
+patchElement @ vue.runtime.esm.js:6989
+processElement @ vue.runtime.esm.js:6825
+patch @ vue.runtime.esm.js:6682
+componentUpdateFn @ vue.runtime.esm.js:7453
+run @ vue.runtime.esm.js:153
+instance.update @ vue.runtime.esm.js:7497
+callWithErrorHandling @ vue.runtime.esm.js:1381
+flushJobs @ vue.runtime.esm.js:1585
+Promise.then
+queueFlush @ vue.runtime.esm.js:1494
+queueJob @ vue.runtime.esm.js:1488
+(anonymous) @ vue.runtime.esm.js:7491
+resetScheduling @ vue.runtime.esm.js:236
+triggerEffects @ vue.runtime.esm.js:280
+triggerRefValue @ vue.runtime.esm.js:1033
+set value @ vue.runtime.esm.js:1078
+(anonymous) @ AdminLayout.uvue:263
+setTimeout
+watch.immediate @ AdminLayout.uvue:262
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+job @ vue.runtime.esm.js:3157
+callWithErrorHandling @ vue.runtime.esm.js:1381
+flushJobs @ vue.runtime.esm.js:1585
+Promise.then
+queueFlush @ vue.runtime.esm.js:1494
+queueJob @ vue.runtime.esm.js:1488
+scheduler @ vue.runtime.esm.js:3179
+resetScheduling @ vue.runtime.esm.js:236
+triggerEffects @ vue.runtime.esm.js:280
+triggerRefValue @ vue.runtime.esm.js:1033
+set value @ vue.runtime.esm.js:1078
+openRoute @ adminNavStore.uts:87
+onSubClick @ AdminLayout.uvue:318
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+emit @ vue.runtime.esm.js:1907
+(anonymous) @ vue.runtime.esm.js:9176
+handleNodeClick @ AdminSubSider.uvue:116
+onClick @ AdminSubSider.uvue?import:112
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+invoker @ vue.runtime.esm.js:10253
+AdminLayout.uvue:263 TypeError: Failed to fetch dynamically imported module: http://localhost:5173/pages/mall/admin/maintain/dev-tools/file.uvue?t=1770810007330&import
+logError @ vue.runtime.esm.js:1443
+errorHandler @ uni-h5.es.js:19600
+callWithErrorHandling @ vue.runtime.esm.js:1381
+handleError @ vue.runtime.esm.js:1421
+onError @ vue.runtime.esm.js:3724
+(anonymous) @ vue.runtime.esm.js:3767
+Promise.catch
+setup @ vue.runtime.esm.js:3766
+callWithErrorHandling @ vue.runtime.esm.js:1381
+setupStatefulComponent @ vue.runtime.esm.js:8985
+setupComponent @ vue.runtime.esm.js:8946
+mountComponent @ vue.runtime.esm.js:7262
+processComponent @ vue.runtime.esm.js:7228
+patch @ vue.runtime.esm.js:6694
+patchKeyedChildren @ vue.runtime.esm.js:7783
+patchChildren @ vue.runtime.esm.js:7564
+processFragment @ vue.runtime.esm.js:7202
+patch @ vue.runtime.esm.js:6668
+patchKeyedChildren @ vue.runtime.esm.js:7650
+patchChildren @ vue.runtime.esm.js:7564
+patchElement @ vue.runtime.esm.js:6989
+processElement @ vue.runtime.esm.js:6825
+patch @ vue.runtime.esm.js:6682
+componentUpdateFn @ vue.runtime.esm.js:7453
+run @ vue.runtime.esm.js:153
+instance.update @ vue.runtime.esm.js:7497
+callWithErrorHandling @ vue.runtime.esm.js:1381
+flushJobs @ vue.runtime.esm.js:1585
+Promise.then
+queueFlush @ vue.runtime.esm.js:1494
+queueJob @ vue.runtime.esm.js:1488
+(anonymous) @ vue.runtime.esm.js:7491
+resetScheduling @ vue.runtime.esm.js:236
+triggerEffects @ vue.runtime.esm.js:280
+triggerRefValue @ vue.runtime.esm.js:1033
+set value @ vue.runtime.esm.js:1078
+(anonymous) @ AdminLayout.uvue:263
+setTimeout
+watch.immediate @ AdminLayout.uvue:262
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+job @ vue.runtime.esm.js:3157
+callWithErrorHandling @ vue.runtime.esm.js:1381
+flushJobs @ vue.runtime.esm.js:1585
+Promise.then
+queueFlush @ vue.runtime.esm.js:1494
+queueJob @ vue.runtime.esm.js:1488
+scheduler @ vue.runtime.esm.js:3179
+resetScheduling @ vue.runtime.esm.js:236
+triggerEffects @ vue.runtime.esm.js:280
+triggerRefValue @ vue.runtime.esm.js:1033
+set value @ vue.runtime.esm.js:1078
+openRoute @ adminNavStore.uts:87
+onSubClick @ AdminLayout.uvue:318
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+emit @ vue.runtime.esm.js:1907
+(anonymous) @ vue.runtime.esm.js:9176
+handleNodeClick @ AdminSubSider.uvue:116
+onClick @ AdminSubSider.uvue?import:112
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+invoker @ vue.runtime.esm.js:10253
+adminComponentMap.uts:195 GET http://localhost:5173/pages/mall/admin/maintain/dev-tools/api.uvue?t=1770809996535&import net::ERR_ABORTED 500 (Internal Server Error)
+(anonymous) @ adminComponentMap.uts:195
+load @ vue.runtime.esm.js:3681
+setup @ vue.runtime.esm.js:3760
+callWithErrorHandling @ vue.runtime.esm.js:1381
+setupStatefulComponent @ vue.runtime.esm.js:8985
+setupComponent @ vue.runtime.esm.js:8946
+mountComponent @ vue.runtime.esm.js:7262
+processComponent @ vue.runtime.esm.js:7228
+patch @ vue.runtime.esm.js:6694
+patchKeyedChildren @ vue.runtime.esm.js:7783
+patchChildren @ vue.runtime.esm.js:7564
+processFragment @ vue.runtime.esm.js:7202
+patch @ vue.runtime.esm.js:6668
+patchKeyedChildren @ vue.runtime.esm.js:7650
+patchChildren @ vue.runtime.esm.js:7564
+patchElement @ vue.runtime.esm.js:6989
+processElement @ vue.runtime.esm.js:6825
+patch @ vue.runtime.esm.js:6682
+componentUpdateFn @ vue.runtime.esm.js:7453
+run @ vue.runtime.esm.js:153
+instance.update @ vue.runtime.esm.js:7497
+callWithErrorHandling @ vue.runtime.esm.js:1381
+flushJobs @ vue.runtime.esm.js:1585
+Promise.then
+queueFlush @ vue.runtime.esm.js:1494
+queueJob @ vue.runtime.esm.js:1488
+(anonymous) @ vue.runtime.esm.js:7491
+resetScheduling @ vue.runtime.esm.js:236
+triggerEffects @ vue.runtime.esm.js:280
+triggerRefValue @ vue.runtime.esm.js:1033
+set value @ vue.runtime.esm.js:1078
+(anonymous) @ AdminLayout.uvue:263
+setTimeout
+watch.immediate @ AdminLayout.uvue:262
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+job @ vue.runtime.esm.js:3157
+callWithErrorHandling @ vue.runtime.esm.js:1381
+flushJobs @ vue.runtime.esm.js:1585
+Promise.then
+queueFlush @ vue.runtime.esm.js:1494
+queueJob @ vue.runtime.esm.js:1488
+scheduler @ vue.runtime.esm.js:3179
+resetScheduling @ vue.runtime.esm.js:236
+triggerEffects @ vue.runtime.esm.js:280
+triggerRefValue @ vue.runtime.esm.js:1033
+set value @ vue.runtime.esm.js:1078
+openRoute @ adminNavStore.uts:87
+onSubClick @ AdminLayout.uvue:318
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+emit @ vue.runtime.esm.js:1907
+(anonymous) @ vue.runtime.esm.js:9176
+handleNodeClick @ AdminSubSider.uvue:116
+onClick @ AdminSubSider.uvue?import:112
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+invoker @ vue.runtime.esm.js:10253
+AdminLayout.uvue:263 [Vue warn]: Unhandled error during execution of async component loader
+ at
+at
+at
+at
+at
+at
+at
+at
+at
+at
+at
+at
+at
+at
+at
+at
+warnHandler @ uni-h5.es.js:19975
+callWithErrorHandling @ vue.runtime.esm.js:1381
+warn$1 @ vue.runtime.esm.js:1207
+logError @ vue.runtime.esm.js:1438
+errorHandler @ uni-h5.es.js:19600
+callWithErrorHandling @ vue.runtime.esm.js:1381
+handleError @ vue.runtime.esm.js:1421
+onError @ vue.runtime.esm.js:3724
+(anonymous) @ vue.runtime.esm.js:3767
+Promise.catch
+setup @ vue.runtime.esm.js:3766
+callWithErrorHandling @ vue.runtime.esm.js:1381
+setupStatefulComponent @ vue.runtime.esm.js:8985
+setupComponent @ vue.runtime.esm.js:8946
+mountComponent @ vue.runtime.esm.js:7262
+processComponent @ vue.runtime.esm.js:7228
+patch @ vue.runtime.esm.js:6694
+patchKeyedChildren @ vue.runtime.esm.js:7783
+patchChildren @ vue.runtime.esm.js:7564
+processFragment @ vue.runtime.esm.js:7202
+patch @ vue.runtime.esm.js:6668
+patchKeyedChildren @ vue.runtime.esm.js:7650
+patchChildren @ vue.runtime.esm.js:7564
+patchElement @ vue.runtime.esm.js:6989
+processElement @ vue.runtime.esm.js:6825
+patch @ vue.runtime.esm.js:6682
+componentUpdateFn @ vue.runtime.esm.js:7453
+run @ vue.runtime.esm.js:153
+instance.update @ vue.runtime.esm.js:7497
+callWithErrorHandling @ vue.runtime.esm.js:1381
+flushJobs @ vue.runtime.esm.js:1585
+Promise.then
+queueFlush @ vue.runtime.esm.js:1494
+queueJob @ vue.runtime.esm.js:1488
+(anonymous) @ vue.runtime.esm.js:7491
+resetScheduling @ vue.runtime.esm.js:236
+triggerEffects @ vue.runtime.esm.js:280
+triggerRefValue @ vue.runtime.esm.js:1033
+set value @ vue.runtime.esm.js:1078
+(anonymous) @ AdminLayout.uvue:263
+setTimeout
+watch.immediate @ AdminLayout.uvue:262
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+job @ vue.runtime.esm.js:3157
+callWithErrorHandling @ vue.runtime.esm.js:1381
+flushJobs @ vue.runtime.esm.js:1585
+Promise.then
+queueFlush @ vue.runtime.esm.js:1494
+queueJob @ vue.runtime.esm.js:1488
+scheduler @ vue.runtime.esm.js:3179
+resetScheduling @ vue.runtime.esm.js:236
+triggerEffects @ vue.runtime.esm.js:280
+triggerRefValue @ vue.runtime.esm.js:1033
+set value @ vue.runtime.esm.js:1078
+openRoute @ adminNavStore.uts:87
+onSubClick @ AdminLayout.uvue:318
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+emit @ vue.runtime.esm.js:1907
+(anonymous) @ vue.runtime.esm.js:9176
+handleNodeClick @ AdminSubSider.uvue:116
+onClick @ AdminSubSider.uvue?import:112
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+invoker @ vue.runtime.esm.js:10253
+AdminLayout.uvue:263 TypeError: Failed to fetch dynamically imported module: http://localhost:5173/pages/mall/admin/maintain/dev-tools/api.uvue?t=1770809996535&import
+logError @ vue.runtime.esm.js:1443
+errorHandler @ uni-h5.es.js:19600
+callWithErrorHandling @ vue.runtime.esm.js:1381
+handleError @ vue.runtime.esm.js:1421
+onError @ vue.runtime.esm.js:3724
+(anonymous) @ vue.runtime.esm.js:3767
+Promise.catch
+setup @ vue.runtime.esm.js:3766
+callWithErrorHandling @ vue.runtime.esm.js:1381
+setupStatefulComponent @ vue.runtime.esm.js:8985
+setupComponent @ vue.runtime.esm.js:8946
+mountComponent @ vue.runtime.esm.js:7262
+processComponent @ vue.runtime.esm.js:7228
+patch @ vue.runtime.esm.js:6694
+patchKeyedChildren @ vue.runtime.esm.js:7783
+patchChildren @ vue.runtime.esm.js:7564
+processFragment @ vue.runtime.esm.js:7202
+patch @ vue.runtime.esm.js:6668
+patchKeyedChildren @ vue.runtime.esm.js:7650
+patchChildren @ vue.runtime.esm.js:7564
+patchElement @ vue.runtime.esm.js:6989
+processElement @ vue.runtime.esm.js:6825
+patch @ vue.runtime.esm.js:6682
+componentUpdateFn @ vue.runtime.esm.js:7453
+run @ vue.runtime.esm.js:153
+instance.update @ vue.runtime.esm.js:7497
+callWithErrorHandling @ vue.runtime.esm.js:1381
+flushJobs @ vue.runtime.esm.js:1585
+Promise.then
+queueFlush @ vue.runtime.esm.js:1494
+queueJob @ vue.runtime.esm.js:1488
+(anonymous) @ vue.runtime.esm.js:7491
+resetScheduling @ vue.runtime.esm.js:236
+triggerEffects @ vue.runtime.esm.js:280
+triggerRefValue @ vue.runtime.esm.js:1033
+set value @ vue.runtime.esm.js:1078
+(anonymous) @ AdminLayout.uvue:263
+setTimeout
+watch.immediate @ AdminLayout.uvue:262
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+job @ vue.runtime.esm.js:3157
+callWithErrorHandling @ vue.runtime.esm.js:1381
+flushJobs @ vue.runtime.esm.js:1585
+Promise.then
+queueFlush @ vue.runtime.esm.js:1494
+queueJob @ vue.runtime.esm.js:1488
+scheduler @ vue.runtime.esm.js:3179
+resetScheduling @ vue.runtime.esm.js:236
+triggerEffects @ vue.runtime.esm.js:280
+triggerRefValue @ vue.runtime.esm.js:1033
+set value @ vue.runtime.esm.js:1078
+openRoute @ adminNavStore.uts:87
+onSubClick @ AdminLayout.uvue:318
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+emit @ vue.runtime.esm.js:1907
+(anonymous) @ vue.runtime.esm.js:9176
+handleNodeClick @ AdminSubSider.uvue:116
+onClick @ AdminSubSider.uvue?import:112
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+invoker @ vue.runtime.esm.js:10253
+adminComponentMap.uts:196 GET http://localhost:5173/pages/mall/admin/maintain/dev-tools/data-dict.uvue?t=1770810020653&import net::ERR_ABORTED 500 (Internal Server Error)
+(anonymous) @ adminComponentMap.uts:196
+load @ vue.runtime.esm.js:3681
+setup @ vue.runtime.esm.js:3760
+callWithErrorHandling @ vue.runtime.esm.js:1381
+setupStatefulComponent @ vue.runtime.esm.js:8985
+setupComponent @ vue.runtime.esm.js:8946
+mountComponent @ vue.runtime.esm.js:7262
+processComponent @ vue.runtime.esm.js:7228
+patch @ vue.runtime.esm.js:6694
+patchKeyedChildren @ vue.runtime.esm.js:7783
+patchChildren @ vue.runtime.esm.js:7564
+processFragment @ vue.runtime.esm.js:7202
+patch @ vue.runtime.esm.js:6668
+patchKeyedChildren @ vue.runtime.esm.js:7650
+patchChildren @ vue.runtime.esm.js:7564
+patchElement @ vue.runtime.esm.js:6989
+processElement @ vue.runtime.esm.js:6825
+patch @ vue.runtime.esm.js:6682
+componentUpdateFn @ vue.runtime.esm.js:7453
+run @ vue.runtime.esm.js:153
+instance.update @ vue.runtime.esm.js:7497
+callWithErrorHandling @ vue.runtime.esm.js:1381
+flushJobs @ vue.runtime.esm.js:1585
+Promise.then
+queueFlush @ vue.runtime.esm.js:1494
+queueJob @ vue.runtime.esm.js:1488
+(anonymous) @ vue.runtime.esm.js:7491
+resetScheduling @ vue.runtime.esm.js:236
+triggerEffects @ vue.runtime.esm.js:280
+triggerRefValue @ vue.runtime.esm.js:1033
+set value @ vue.runtime.esm.js:1078
+(anonymous) @ AdminLayout.uvue:263
+setTimeout
+watch.immediate @ AdminLayout.uvue:262
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+job @ vue.runtime.esm.js:3157
+callWithErrorHandling @ vue.runtime.esm.js:1381
+flushJobs @ vue.runtime.esm.js:1585
+Promise.then
+queueFlush @ vue.runtime.esm.js:1494
+queueJob @ vue.runtime.esm.js:1488
+scheduler @ vue.runtime.esm.js:3179
+resetScheduling @ vue.runtime.esm.js:236
+triggerEffects @ vue.runtime.esm.js:280
+triggerRefValue @ vue.runtime.esm.js:1033
+set value @ vue.runtime.esm.js:1078
+openRoute @ adminNavStore.uts:87
+onSubClick @ AdminLayout.uvue:318
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+emit @ vue.runtime.esm.js:1907
+(anonymous) @ vue.runtime.esm.js:9176
+handleNodeClick @ AdminSubSider.uvue:116
+onClick @ AdminSubSider.uvue?import:112
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+invoker @ vue.runtime.esm.js:10253
+AdminLayout.uvue:263 [Vue warn]: Unhandled error during execution of async component loader
+ at
+at
+at
+at
+at
+at
+at
+at
+at
+at
+at
+at
+at
+at
+at
+at
+warnHandler @ uni-h5.es.js:19975
+callWithErrorHandling @ vue.runtime.esm.js:1381
+warn$1 @ vue.runtime.esm.js:1207
+logError @ vue.runtime.esm.js:1438
+errorHandler @ uni-h5.es.js:19600
+callWithErrorHandling @ vue.runtime.esm.js:1381
+handleError @ vue.runtime.esm.js:1421
+onError @ vue.runtime.esm.js:3724
+(anonymous) @ vue.runtime.esm.js:3767
+Promise.catch
+setup @ vue.runtime.esm.js:3766
+callWithErrorHandling @ vue.runtime.esm.js:1381
+setupStatefulComponent @ vue.runtime.esm.js:8985
+setupComponent @ vue.runtime.esm.js:8946
+mountComponent @ vue.runtime.esm.js:7262
+processComponent @ vue.runtime.esm.js:7228
+patch @ vue.runtime.esm.js:6694
+patchKeyedChildren @ vue.runtime.esm.js:7783
+patchChildren @ vue.runtime.esm.js:7564
+processFragment @ vue.runtime.esm.js:7202
+patch @ vue.runtime.esm.js:6668
+patchKeyedChildren @ vue.runtime.esm.js:7650
+patchChildren @ vue.runtime.esm.js:7564
+patchElement @ vue.runtime.esm.js:6989
+processElement @ vue.runtime.esm.js:6825
+patch @ vue.runtime.esm.js:6682
+componentUpdateFn @ vue.runtime.esm.js:7453
+run @ vue.runtime.esm.js:153
+instance.update @ vue.runtime.esm.js:7497
+callWithErrorHandling @ vue.runtime.esm.js:1381
+flushJobs @ vue.runtime.esm.js:1585
+Promise.then
+queueFlush @ vue.runtime.esm.js:1494
+queueJob @ vue.runtime.esm.js:1488
+(anonymous) @ vue.runtime.esm.js:7491
+resetScheduling @ vue.runtime.esm.js:236
+triggerEffects @ vue.runtime.esm.js:280
+triggerRefValue @ vue.runtime.esm.js:1033
+set value @ vue.runtime.esm.js:1078
+(anonymous) @ AdminLayout.uvue:263
+setTimeout
+watch.immediate @ AdminLayout.uvue:262
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+job @ vue.runtime.esm.js:3157
+callWithErrorHandling @ vue.runtime.esm.js:1381
+flushJobs @ vue.runtime.esm.js:1585
+Promise.then
+queueFlush @ vue.runtime.esm.js:1494
+queueJob @ vue.runtime.esm.js:1488
+scheduler @ vue.runtime.esm.js:3179
+resetScheduling @ vue.runtime.esm.js:236
+triggerEffects @ vue.runtime.esm.js:280
+triggerRefValue @ vue.runtime.esm.js:1033
+set value @ vue.runtime.esm.js:1078
+openRoute @ adminNavStore.uts:87
+onSubClick @ AdminLayout.uvue:318
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+emit @ vue.runtime.esm.js:1907
+(anonymous) @ vue.runtime.esm.js:9176
+handleNodeClick @ AdminSubSider.uvue:116
+onClick @ AdminSubSider.uvue?import:112
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+invoker @ vue.runtime.esm.js:10253
+AdminLayout.uvue:263 TypeError: Failed to fetch dynamically imported module: http://localhost:5173/pages/mall/admin/maintain/dev-tools/data-dict.uvue?t=1770810020653&import
+logError @ vue.runtime.esm.js:1443
+errorHandler @ uni-h5.es.js:19600
+callWithErrorHandling @ vue.runtime.esm.js:1381
+handleError @ vue.runtime.esm.js:1421
+onError @ vue.runtime.esm.js:3724
+(anonymous) @ vue.runtime.esm.js:3767
+Promise.catch
+setup @ vue.runtime.esm.js:3766
+callWithErrorHandling @ vue.runtime.esm.js:1381
+setupStatefulComponent @ vue.runtime.esm.js:8985
+setupComponent @ vue.runtime.esm.js:8946
+mountComponent @ vue.runtime.esm.js:7262
+processComponent @ vue.runtime.esm.js:7228
+patch @ vue.runtime.esm.js:6694
+patchKeyedChildren @ vue.runtime.esm.js:7783
+patchChildren @ vue.runtime.esm.js:7564
+processFragment @ vue.runtime.esm.js:7202
+patch @ vue.runtime.esm.js:6668
+patchKeyedChildren @ vue.runtime.esm.js:7650
+patchChildren @ vue.runtime.esm.js:7564
+patchElement @ vue.runtime.esm.js:6989
+processElement @ vue.runtime.esm.js:6825
+patch @ vue.runtime.esm.js:6682
+componentUpdateFn @ vue.runtime.esm.js:7453
+run @ vue.runtime.esm.js:153
+instance.update @ vue.runtime.esm.js:7497
+callWithErrorHandling @ vue.runtime.esm.js:1381
+flushJobs @ vue.runtime.esm.js:1585
+Promise.then
+queueFlush @ vue.runtime.esm.js:1494
+queueJob @ vue.runtime.esm.js:1488
+(anonymous) @ vue.runtime.esm.js:7491
+resetScheduling @ vue.runtime.esm.js:236
+triggerEffects @ vue.runtime.esm.js:280
+triggerRefValue @ vue.runtime.esm.js:1033
+set value @ vue.runtime.esm.js:1078
+(anonymous) @ AdminLayout.uvue:263
+setTimeout
+watch.immediate @ AdminLayout.uvue:262
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+job @ vue.runtime.esm.js:3157
+callWithErrorHandling @ vue.runtime.esm.js:1381
+flushJobs @ vue.runtime.esm.js:1585
+Promise.then
+queueFlush @ vue.runtime.esm.js:1494
+queueJob @ vue.runtime.esm.js:1488
+scheduler @ vue.runtime.esm.js:3179
+resetScheduling @ vue.runtime.esm.js:236
+triggerEffects @ vue.runtime.esm.js:280
+triggerRefValue @ vue.runtime.esm.js:1033
+set value @ vue.runtime.esm.js:1078
+openRoute @ adminNavStore.uts:87
+onSubClick @ AdminLayout.uvue:318
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+emit @ vue.runtime.esm.js:1907
+(anonymous) @ vue.runtime.esm.js:9176
+handleNodeClick @ AdminSubSider.uvue:116
+onClick @ AdminSubSider.uvue?import:112
+callWithErrorHandling @ vue.runtime.esm.js:1381
+callWithAsyncErrorHandling @ vue.runtime.esm.js:1388
+invoker @ vue.runtime.esm.js:10253
+pages-json-js?t=1770810049956:278 GET http://localhost:5173/pages/mall/admin/setting/message.uvue?t=1770810030507&import net::ERR_ABORTED 500 (Internal Server Error)
+PagesMallAdminSettingMessageLoader @ pages-json-js?t=1770810049956:278
+(anonymous) @ uni-h5.es.js:24748
+(anonymous) @ uni-h5.es.js:4125
+invokeApi @ uni-h5.es.js:3971
+(anonymous) @ uni-h5.es.js:3989
+(anonymous) @ uni-h5.es.js:24765
+(anonymous) @ uni-h5.es.js:24764
+Promise.then
+(anonymous) @ uni-h5.es.js:24763
+(anonymous) @ uni-h5.es.js:24762
+pages-json-js?t=1770810049956:280 GET http://localhost:5173/pages/mall/admin/setting/agreement.uvue?t=1770810040122&import net::ERR_ABORTED 500 (Internal Server Error)
+PagesMallAdminSettingAgreementLoader @ pages-json-js?t=1770810049956:280
+(anonymous) @ uni-h5.es.js:24748
+(anonymous) @ uni-h5.es.js:4125
+invokeApi @ uni-h5.es.js:3971
+(anonymous) @ uni-h5.es.js:3989
+(anonymous) @ uni-h5.es.js:24765
+(anonymous) @ uni-h5.es.js:24764
+Promise.then
+(anonymous) @ uni-h5.es.js:24763
+(anonymous) @ uni-h5.es.js:24762
+pages-json-js?t=1770810049956:282 GET http://localhost:5173/pages/mall/admin/setting/ticket.uvue?t=1770810049956&import net::ERR_ABORTED 500 (Internal Server Error).
\ No newline at end of file