继续完成页面的完善
This commit is contained in:
@@ -6,122 +6,25 @@
|
|||||||
* value: 组件引用
|
* value: 组件引用
|
||||||
*
|
*
|
||||||
* 注意:
|
* 注意:
|
||||||
* 1. 所有组件必须静态导入,确保打包可分析
|
* 1. 组件已切换为 defineAsyncComponent 异步导入,优化 H5 环境下的加载性能与包体积
|
||||||
* 2. 组件路径使用 @ 别名
|
* 2. 组件路径使用 @ 别名
|
||||||
* 3. 占位组件统一使用 PlaceholderPage
|
* 3. 占位组件统一使用 PlaceholderPage
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { defineAsyncComponent } from 'vue'
|
||||||
|
|
||||||
// 导入占位组件
|
// 导入占位组件
|
||||||
import PlaceholderPage from '@/layouts/admin/components/PlaceholderPage.uvue'
|
import PlaceholderPage from '@/layouts/admin/components/PlaceholderPage.uvue'
|
||||||
|
|
||||||
// 导入首页(内部组件,不包含 AdminLayout)
|
// 导入首页(内部组件,不包含 AdminLayout)
|
||||||
import HomeIndex from '@/layouts/admin/pages/HomeIndex.uvue'
|
import HomeIndex from '@/layouts/admin/pages/HomeIndex.uvue'
|
||||||
|
|
||||||
// 导入用户模块(纯组件,不包含 AdminLayout)
|
// 用户、商品、订单模块已改为 defineAsyncComponent 异步加载,移除静态导入以优化 H5 加载性能
|
||||||
import UserStatistic from '@/pages/mall/admin/user/statistics/index.uvue'
|
|
||||||
import UserList from '@/pages/mall/admin/user/management/index.uvue'
|
|
||||||
import UserLevel from '@/pages/mall/admin/user/level/index.uvue'
|
|
||||||
import UserGroup from '@/pages/mall/admin/user/grouping/index.uvue'
|
|
||||||
import UserLabel from '@/pages/mall/admin/user/label/index.uvue'
|
|
||||||
import MemberConfig from '@/pages/mall/admin/user/configuration/index.uvue'
|
|
||||||
|
|
||||||
// 导入商品模块(纯组件,不包含 AdminLayout)
|
|
||||||
import ProductStatistic from '@/pages/mall/admin/product/product-statistics/index.uvue'
|
|
||||||
import ProductList from '@/pages/mall/admin/product/product-management/index.uvue'
|
|
||||||
import ProductEdit from '@/pages/mall/admin/product/product-management/edit.uvue'
|
|
||||||
import ProductMemberPrice from '@/pages/mall/admin/product/product-management/member-price.uvue'
|
|
||||||
import ProductClassify from '@/pages/mall/admin/product/classification/index.uvue'
|
|
||||||
import ProductReply from '@/pages/mall/admin/product/reviews/index.uvue'
|
|
||||||
import ProductAttr from '@/pages/mall/admin/product/specifications/index.uvue'
|
|
||||||
import ProductParam from '@/pages/mall/admin/product/parameters/index.uvue'
|
|
||||||
import ProductLabel from '@/pages/mall/admin/product/labels/index.uvue'
|
|
||||||
import ProductProtection from '@/pages/mall/admin/product/protection/index.uvue'
|
|
||||||
|
|
||||||
// 导入订单模块(纯组件,不包含 AdminLayout)
|
|
||||||
import OrderList from '@/pages/mall/admin/order/list.uvue'
|
|
||||||
import OrderStatistic from '@/pages/mall/admin/order/order-statistics/index.uvue'
|
|
||||||
import OrderRefund from '@/pages/mall/admin/order/aftersales-order/index.uvue'
|
|
||||||
import OrderCashier from '@/pages/mall/admin/order/cashier-order/index.uvue'
|
|
||||||
import OrderVerify from '@/pages/mall/admin/order/write-off-records/index.uvue'
|
|
||||||
import OrderConfig from '@/pages/mall/admin/order/order-configuration/index.uvue'
|
|
||||||
|
|
||||||
// 营销设置模块暂时使用 PlaceholderPage
|
// 营销设置模块暂时使用 PlaceholderPage
|
||||||
// 避免循环依赖问题
|
// 避免循环依赖问题
|
||||||
import CmsArticle from '@/pages/mall/admin/cms/article/list.uvue'
|
|
||||||
import CmsCategory from '@/pages/mall/admin/cms/category/list.uvue'
|
|
||||||
import MarketingCouponList from '@/pages/mall/admin/marketing/coupon/list.uvue'
|
|
||||||
import MarketingCouponUser from '@/pages/mall/admin/marketing/coupon/user.uvue'
|
|
||||||
import MarketingIntegralStatistic from '@/pages/mall/admin/marketing/integral/statistic.uvue'
|
|
||||||
import MarketingIntegralProduct from '@/pages/mall/admin/marketing/integral/list.uvue'
|
|
||||||
import MarketingIntegralOrder from '@/pages/mall/admin/marketing/integral/order.uvue'
|
|
||||||
import MarketingIntegralRecord from '@/pages/mall/admin/marketing/integral/record.uvue'
|
|
||||||
import MarketingIntegralConfig from '@/pages/mall/admin/marketing/integral/config.uvue'
|
|
||||||
import MarketingLotteryList from '@/pages/mall/admin/marketing/lottery/list.uvue'
|
|
||||||
import MarketingLotteryConfig from '@/pages/mall/admin/marketing/lottery/config.uvue'
|
|
||||||
import MarketingCombinationProduct from '@/pages/mall/admin/marketing/combination/product.uvue'
|
|
||||||
import MarketingCombinationList from '@/pages/mall/admin/marketing/combination/list.uvue'
|
|
||||||
import MarketingCombinationCreate from '@/pages/mall/admin/marketing/combination/create.uvue'
|
|
||||||
import MarketingSeckillList from '@/pages/mall/admin/marketing/seckill/list.uvue'
|
|
||||||
import MarketingSeckillProduct from '@/pages/mall/admin/marketing/seckill/product.uvue'
|
|
||||||
import MarketingSeckillConfig from '@/pages/mall/admin/marketing/seckill/config.uvue'
|
|
||||||
|
|
||||||
// 导入财务模块(纯组件)
|
// 营销、内容、财务、客服、装修等模块已改为 defineAsyncComponent 异步加载,移除静态导入以优化 H5 加载性能
|
||||||
import FinanceTransactionStats from '@/pages/mall/admin/finance/transaction_stats.uvue'
|
|
||||||
import FinanceWithdrawal from '@/pages/mall/admin/finance/withdrawal.uvue'
|
|
||||||
import FinanceInvoice from '@/pages/mall/admin/finance/invoice.uvue'
|
|
||||||
import FinanceRecharge from '@/pages/mall/admin/finance/recharge.uvue'
|
|
||||||
import FinanceCapitalFlow from '@/pages/mall/admin/finance/capital_flow.uvue'
|
|
||||||
import FinanceBill from '@/pages/mall/admin/finance/bill.uvue'
|
|
||||||
import FinanceCommission from '@/pages/mall/admin/finance/commission.uvue'
|
|
||||||
import FinanceBalanceStats from '@/pages/mall/admin/finance/balance_stats.uvue'
|
|
||||||
import FinanceBalanceRecord from '@/pages/mall/admin/finance/balance_record.uvue'
|
|
||||||
|
|
||||||
// 导入客服模块
|
|
||||||
import KefuList from '@/pages/mall/admin/kefu/list.uvue'
|
|
||||||
import KefuWords from '@/pages/mall/admin/kefu/words.uvue'
|
|
||||||
import KefuFeedback from '@/pages/mall/admin/kefu/feedback.uvue'
|
|
||||||
import KefuAutoReply from '@/pages/mall/admin/kefu/auto_reply.uvue'
|
|
||||||
import KefuConfig from '@/pages/mall/admin/kefu/config.uvue'
|
|
||||||
|
|
||||||
// 导入装修模块
|
|
||||||
import DecorationHome from '@/pages/mall/admin/decoration/home.uvue'
|
|
||||||
import DecorationCategory from '@/pages/mall/admin/decoration/category.uvue'
|
|
||||||
import DecorationUser from '@/pages/mall/admin/decoration/user.uvue'
|
|
||||||
import DecorationData from '@/pages/mall/admin/decoration/data-config.uvue'
|
|
||||||
import DecorationStyle from '@/pages/mall/admin/design/theme-style.uvue'
|
|
||||||
import DecorationMaterial from '@/pages/mall/admin/design/material.uvue'
|
|
||||||
import DecorationLink from '@/pages/mall/admin/design/link-management.uvue'
|
|
||||||
|
|
||||||
// 导入直播管理
|
|
||||||
import MarketingLiveRoom from '@/pages/mall/admin/marketing/live/room.uvue'
|
|
||||||
import MarketingLiveProduct from '@/pages/mall/admin/marketing/live/product.uvue'
|
|
||||||
import MarketingLiveAnchor from '@/pages/mall/admin/marketing/live/anchor.uvue'
|
|
||||||
|
|
||||||
// 导入用户充值
|
|
||||||
import MarketingRechargeQuota from '@/pages/mall/admin/marketing/recharge/quota.uvue'
|
|
||||||
import MarketingRechargeConfig from '@/pages/mall/admin/marketing/recharge/config.uvue'
|
|
||||||
|
|
||||||
// 导入每日签到
|
|
||||||
import MarketingCheckinConfig from '@/pages/mall/admin/marketing/checkin/config.uvue'
|
|
||||||
import MarketingCheckinReward from '@/pages/mall/admin/marketing/checkin/reward.uvue'
|
|
||||||
|
|
||||||
// 导入新人礼
|
|
||||||
import MarketingNewcomerGift from '@/pages/mall/admin/marketing/newcomer/index.uvue'
|
|
||||||
|
|
||||||
// 导入付费会员
|
|
||||||
import MarketingMemberType from '@/pages/mall/admin/marketing/member/type.uvue'
|
|
||||||
import MarketingMemberRight from '@/pages/mall/admin/marketing/member/right.uvue'
|
|
||||||
import MarketingMemberCard from '@/pages/mall/admin/marketing/member/card.uvue'
|
|
||||||
import MarketingMemberRecord from '@/pages/mall/admin/marketing/member/record.uvue'
|
|
||||||
import MarketingMemberConfig from '@/pages/mall/admin/marketing/member/config.uvue'
|
|
||||||
|
|
||||||
// 导入维护模块
|
|
||||||
import MaintainDevConfig from '@/pages/mall/admin/maintain/dev/config.uvue'
|
|
||||||
|
|
||||||
// import StatisticIndex from '@/pages/mall/admin/statistic/index.uvue'
|
|
||||||
// import SettingSystemConfig from '@/pages/mall/admin/setting/system/config.uvue'
|
|
||||||
// import SettingSystemAdmin from '@/pages/mall/admin/setting/system/admin.uvue'
|
|
||||||
// import SettingSystemRole from '@/pages/mall/admin/setting/system/role.uvue'
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 组件映射表
|
* 组件映射表
|
||||||
@@ -131,97 +34,97 @@ export const componentMap: Map<string, any> = new Map([
|
|||||||
['HomeIndex', HomeIndex],
|
['HomeIndex', HomeIndex],
|
||||||
|
|
||||||
// 用户模块
|
// 用户模块
|
||||||
['UserStatistic', UserStatistic],
|
['UserStatistic', defineAsyncComponent(() => import('@/pages/mall/admin/user/statistics/index.uvue'))],
|
||||||
['UserList', UserList],
|
['UserList', defineAsyncComponent(() => import('@/pages/mall/admin/user/management/index.uvue'))],
|
||||||
['UserLevel', UserLevel],
|
['UserLevel', defineAsyncComponent(() => import('@/pages/mall/admin/user/level/index.uvue'))],
|
||||||
['UserGroup', UserGroup],
|
['UserGroup', defineAsyncComponent(() => import('@/pages/mall/admin/user/grouping/index.uvue'))],
|
||||||
['UserLabel', UserLabel],
|
['UserLabel', defineAsyncComponent(() => import('@/pages/mall/admin/user/label/index.uvue'))],
|
||||||
['UserMemberConfig', MemberConfig],
|
['UserMemberConfig', defineAsyncComponent(() => import('@/pages/mall/admin/user/configuration/index.uvue'))],
|
||||||
|
|
||||||
// 商品模块
|
// 商品模块
|
||||||
['ProductStatistic', ProductStatistic],
|
['ProductStatistic', defineAsyncComponent(() => import('@/pages/mall/admin/product/product-statistics/index.uvue'))],
|
||||||
['ProductList', ProductList],
|
['ProductList', defineAsyncComponent(() => import('@/pages/mall/admin/product/product-management/index.uvue'))],
|
||||||
['ProductEdit', ProductEdit],
|
['ProductEdit', defineAsyncComponent(() => import('@/pages/mall/admin/product/product-management/edit.uvue'))],
|
||||||
['ProductMemberPrice', ProductMemberPrice],
|
['ProductMemberPrice', defineAsyncComponent(() => import('@/pages/mall/admin/product/product-management/member-price.uvue'))],
|
||||||
['ProductClassify', ProductClassify],
|
['ProductClassify', defineAsyncComponent(() => import('@/pages/mall/admin/product/classification/index.uvue'))],
|
||||||
['ProductReply', ProductReply],
|
['ProductReply', defineAsyncComponent(() => import('@/pages/mall/admin/product/reviews/index.uvue'))],
|
||||||
['ProductAttr', ProductAttr],
|
['ProductAttr', defineAsyncComponent(() => import('@/pages/mall/admin/product/specifications/index.uvue'))],
|
||||||
['ProductParam', ProductParam],
|
['ProductParam', defineAsyncComponent(() => import('@/pages/mall/admin/product/parameters/index.uvue'))],
|
||||||
['ProductLabel', ProductLabel],
|
['ProductLabel', defineAsyncComponent(() => import('@/pages/mall/admin/product/labels/index.uvue'))],
|
||||||
['ProductProtection', ProductProtection],
|
['ProductProtection', defineAsyncComponent(() => import('@/pages/mall/admin/product/protection/index.uvue'))],
|
||||||
|
|
||||||
// 订单模块
|
// 订单模块
|
||||||
['OrderList', OrderList],
|
['OrderList', defineAsyncComponent(() => import('@/pages/mall/admin/order/list.uvue'))],
|
||||||
['OrderStatistic', OrderStatistic],
|
['OrderStatistic', defineAsyncComponent(() => import('@/pages/mall/admin/order/order-statistics/index.uvue'))],
|
||||||
['OrderRefund', OrderRefund],
|
['OrderRefund', defineAsyncComponent(() => import('@/pages/mall/admin/order/aftersales-order/index.uvue'))],
|
||||||
['OrderCashier', OrderCashier],
|
['OrderCashier', defineAsyncComponent(() => import('@/pages/mall/admin/order/cashier-order/index.uvue'))],
|
||||||
['OrderVerify', OrderVerify],
|
['OrderVerify', defineAsyncComponent(() => import('@/pages/mall/admin/order/write-off-records/index.uvue'))],
|
||||||
['OrderConfig', OrderConfig],
|
['OrderConfig', defineAsyncComponent(() => import('@/pages/mall/admin/order/order-configuration/index.uvue'))],
|
||||||
|
|
||||||
// 营销模块
|
// 营销模块已改为异步加载
|
||||||
// 1. 优惠券
|
// 1. 优惠券
|
||||||
['MarketingCouponList', MarketingCouponList],
|
['MarketingCouponList', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/coupon/list.uvue'))],
|
||||||
['MarketingCouponUser', MarketingCouponUser],
|
['MarketingCouponUser', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/coupon/user.uvue'))],
|
||||||
// 2. 积分管理
|
// 2. 积分管理
|
||||||
['MarketingIntegralStatistic', MarketingIntegralStatistic],
|
['MarketingIntegralStatistic', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/integral/statistic.uvue'))],
|
||||||
['MarketingIntegralProduct', MarketingIntegralProduct],
|
['MarketingIntegralProduct', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/integral/list.uvue'))],
|
||||||
['MarketingIntegralOrder', MarketingIntegralOrder],
|
['MarketingIntegralOrder', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/integral/order.uvue'))],
|
||||||
['MarketingIntegralRecord', MarketingIntegralRecord],
|
['MarketingIntegralRecord', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/integral/record.uvue'))],
|
||||||
['MarketingIntegralConfig', MarketingIntegralConfig],
|
['MarketingIntegralConfig', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/integral/config.uvue'))],
|
||||||
// 3. 抽奖管理
|
// 3. 抽奖管理
|
||||||
['MarketingLotteryList', MarketingLotteryList],
|
['MarketingLotteryList', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/lottery/list.uvue'))],
|
||||||
['MarketingLotteryConfig', MarketingLotteryConfig],
|
['MarketingLotteryConfig', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/lottery/config.uvue'))],
|
||||||
// 4. 砍价管理
|
// 4. 砍价管理
|
||||||
['MarketingBargainProduct', PlaceholderPage],
|
['MarketingBargainProduct', PlaceholderPage],
|
||||||
['MarketingBargainList', PlaceholderPage],
|
['MarketingBargainList', PlaceholderPage],
|
||||||
// 5. 拼团管理
|
// 5. 拼团管理
|
||||||
['MarketingCombinationProduct', MarketingCombinationProduct],
|
['MarketingCombinationProduct', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/combination/product.uvue'))],
|
||||||
['MarketingCombinationList', MarketingCombinationList],
|
['MarketingCombinationList', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/combination/list.uvue'))],
|
||||||
['MarketingCombinationCreate', MarketingCombinationCreate],
|
['MarketingCombinationCreate', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/combination/create.uvue'))],
|
||||||
// 6. 秒杀管理
|
// 6. 秒杀管理
|
||||||
['MarketingSeckillList', MarketingSeckillList],
|
['MarketingSeckillList', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/seckill/list.uvue'))],
|
||||||
['MarketingSeckillProduct', MarketingSeckillProduct],
|
['MarketingSeckillProduct', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/seckill/product.uvue'))],
|
||||||
['MarketingSeckillConfig', MarketingSeckillConfig],
|
['MarketingSeckillConfig', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/seckill/config.uvue'))],
|
||||||
// 7. 付费会员
|
// 7. 付费会员
|
||||||
['MarketingMemberType', MarketingMemberType],
|
['MarketingMemberType', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/member/type.uvue'))],
|
||||||
['MarketingMemberRight', MarketingMemberRight],
|
['MarketingMemberRight', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/member/right.uvue'))],
|
||||||
['MarketingMemberCard', MarketingMemberCard],
|
['MarketingMemberCard', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/member/card.uvue'))],
|
||||||
['MarketingMemberRecord', MarketingMemberRecord],
|
['MarketingMemberRecord', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/member/record.uvue'))],
|
||||||
['MarketingMemberConfig', MarketingMemberConfig],
|
['MarketingMemberConfig', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/member/config.uvue'))],
|
||||||
// 8. 直播管理
|
// 8. 直播管理
|
||||||
['MarketingLiveRoom', MarketingLiveRoom],
|
['MarketingLiveRoom', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/live/room.uvue'))],
|
||||||
['MarketingLiveProduct', MarketingLiveProduct],
|
['MarketingLiveProduct', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/live/product.uvue'))],
|
||||||
['MarketingLiveAnchor', MarketingLiveAnchor],
|
['MarketingLiveAnchor', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/live/anchor.uvue'))],
|
||||||
// 9. 用户充值
|
// 9. 用户充值
|
||||||
['MarketingRechargeQuota', MarketingRechargeQuota],
|
['MarketingRechargeQuota', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/recharge/quota.uvue'))],
|
||||||
['MarketingRechargeConfig', MarketingRechargeConfig],
|
['MarketingRechargeConfig', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/recharge/config.uvue'))],
|
||||||
// 10. 每日签到
|
// 10. 每日签到
|
||||||
['MarketingCheckinConfig', MarketingCheckinConfig],
|
['MarketingCheckinConfig', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/checkin/config.uvue'))],
|
||||||
['MarketingCheckinReward', MarketingCheckinReward],
|
['MarketingCheckinReward', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/checkin/reward.uvue'))],
|
||||||
// 11. 渠道码 & 新人礼
|
// 11. 渠道码 & 新人礼
|
||||||
['MarketingChannelList', PlaceholderPage],
|
['MarketingChannelList', PlaceholderPage],
|
||||||
['MarketingNewcomerGift', MarketingNewcomerGift],
|
['MarketingNewcomerGift', defineAsyncComponent(() => import('@/pages/mall/admin/marketing/newcomer/index.uvue'))],
|
||||||
|
|
||||||
// 内容模块
|
// 内容模块
|
||||||
['CmsArticle', CmsArticle],
|
['CmsArticle', defineAsyncComponent(() => import('@/pages/mall/admin/cms/article/list.uvue'))],
|
||||||
['CmsCategory', CmsCategory],
|
['CmsCategory', defineAsyncComponent(() => import('@/pages/mall/admin/cms/category/list.uvue'))],
|
||||||
|
|
||||||
// 财务模块
|
// 财务模块
|
||||||
['FinanceTransactionStats', FinanceTransactionStats],
|
['FinanceTransactionStats', defineAsyncComponent(() => import('@/pages/mall/admin/finance/transaction_stats.uvue'))],
|
||||||
['FinanceWithdrawal', FinanceWithdrawal],
|
['FinanceWithdrawal', defineAsyncComponent(() => import('@/pages/mall/admin/finance/withdrawal.uvue'))],
|
||||||
['FinanceInvoice', FinanceInvoice],
|
['FinanceInvoice', defineAsyncComponent(() => import('@/pages/mall/admin/finance/invoice.uvue'))],
|
||||||
['FinanceRecharge', FinanceRecharge],
|
['FinanceRecharge', defineAsyncComponent(() => import('@/pages/mall/admin/finance/recharge.uvue'))],
|
||||||
['FinanceCapitalFlow', FinanceCapitalFlow],
|
['FinanceCapitalFlow', defineAsyncComponent(() => import('@/pages/mall/admin/finance/capital_flow.uvue'))],
|
||||||
['FinanceBill', FinanceBill],
|
['FinanceBill', defineAsyncComponent(() => import('@/pages/mall/admin/finance/bill.uvue'))],
|
||||||
['FinanceCommission', FinanceCommission],
|
['FinanceCommission', defineAsyncComponent(() => import('@/pages/mall/admin/finance/commission.uvue'))],
|
||||||
['FinanceBalanceStats', FinanceBalanceStats],
|
['FinanceBalanceStats', defineAsyncComponent(() => import('@/pages/mall/admin/finance/balance_stats.uvue'))],
|
||||||
['FinanceBalanceRecord', FinanceBalanceRecord],
|
['FinanceBalanceRecord', defineAsyncComponent(() => import('@/pages/mall/admin/finance/balance_record.uvue'))],
|
||||||
|
|
||||||
// 数据模块 - 暂时使用占位组件
|
// 数据模块 - 暂时使用占位组件
|
||||||
['StatisticIndex', PlaceholderPage],
|
['StatisticIndex', PlaceholderPage],
|
||||||
|
|
||||||
// 设置模块 - 暂时使用占位组件
|
// 设置模块 - 暂时使用占位组件
|
||||||
['SettingSystemConfig', PlaceholderPage],
|
['SettingSystemConfig', defineAsyncComponent(() => import('@/pages/mall/admin/setting/system/config.uvue'))],
|
||||||
['SettingSystemAdmin', PlaceholderPage],
|
['SettingSystemAdmin', PlaceholderPage],
|
||||||
['SettingSystemRole', PlaceholderPage],
|
['SettingSystemRole', PlaceholderPage],
|
||||||
|
|
||||||
@@ -231,27 +134,27 @@ export const componentMap: Map<string, any> = new Map([
|
|||||||
['DistributionConfig', PlaceholderPage],
|
['DistributionConfig', PlaceholderPage],
|
||||||
|
|
||||||
// 客服模块
|
// 客服模块
|
||||||
['KefuList', KefuList],
|
['KefuList', defineAsyncComponent(() => import('@/pages/mall/admin/kefu/list.uvue'))],
|
||||||
['KefuWords', KefuWords],
|
['KefuWords', defineAsyncComponent(() => import('@/pages/mall/admin/kefu/words.uvue'))],
|
||||||
['KefuFeedback', KefuFeedback],
|
['KefuFeedback', defineAsyncComponent(() => import('@/pages/mall/admin/kefu/feedback.uvue'))],
|
||||||
['KefuAutoReply', KefuAutoReply],
|
['KefuAutoReply', defineAsyncComponent(() => import('@/pages/mall/admin/kefu/auto_reply.uvue'))],
|
||||||
['KefuConfig', KefuConfig],
|
['KefuConfig', defineAsyncComponent(() => import('@/pages/mall/admin/kefu/config.uvue'))],
|
||||||
|
|
||||||
// 装修模块
|
// 装修模块
|
||||||
['DecorationHome', DecorationHome],
|
['DecorationHome', defineAsyncComponent(() => import('@/pages/mall/admin/decoration/home.uvue'))],
|
||||||
['DecorationCategory', DecorationCategory],
|
['DecorationCategory', defineAsyncComponent(() => import('@/pages/mall/admin/decoration/category.uvue'))],
|
||||||
['DecorationUser', DecorationUser],
|
['DecorationUser', defineAsyncComponent(() => import('@/pages/mall/admin/decoration/user.uvue'))],
|
||||||
['DecorationData', DecorationData],
|
['DecorationData', defineAsyncComponent(() => import('@/pages/mall/admin/decoration/data-config.uvue'))],
|
||||||
['DecorationStyle', DecorationStyle],
|
['DecorationStyle', defineAsyncComponent(() => import('@/pages/mall/admin/design/theme-style.uvue'))],
|
||||||
['DecorationMaterial', DecorationMaterial],
|
['DecorationMaterial', defineAsyncComponent(() => import('@/pages/mall/admin/design/material.uvue'))],
|
||||||
['DecorationLink', DecorationLink],
|
['DecorationLink', defineAsyncComponent(() => import('@/pages/mall/admin/design/link-management.uvue'))],
|
||||||
|
|
||||||
// 应用模块
|
// 应用模块
|
||||||
['AppStatistic', PlaceholderPage],
|
['AppStatistic', PlaceholderPage],
|
||||||
['AppList', PlaceholderPage],
|
['AppList', PlaceholderPage],
|
||||||
|
|
||||||
// 维护模块
|
// 维护模块
|
||||||
['MaintainDevConfig', MaintainDevConfig],
|
['MaintainDevConfig', defineAsyncComponent(() => import('@/pages/mall/admin/maintain/dev/config.uvue'))],
|
||||||
['MaintainDevData', PlaceholderPage],
|
['MaintainDevData', PlaceholderPage],
|
||||||
['MaintainDevTask', PlaceholderPage],
|
['MaintainDevTask', PlaceholderPage],
|
||||||
['MaintainDevAuth', PlaceholderPage],
|
['MaintainDevAuth', PlaceholderPage],
|
||||||
|
|||||||
@@ -894,7 +894,7 @@ export const routes: RouteRecord[] = [
|
|||||||
// ========== 设置模块 ==========
|
// ========== 设置模块 ==========
|
||||||
{
|
{
|
||||||
id: 'setting_systemConfig',
|
id: 'setting_systemConfig',
|
||||||
title: '系统配置',
|
title: '系统设置',
|
||||||
path: '/pages/mall/admin/setting/system/config',
|
path: '/pages/mall/admin/setting/system/config',
|
||||||
componentKey: 'SettingSystemConfig',
|
componentKey: 'SettingSystemConfig',
|
||||||
parentId: 'setting',
|
parentId: 'setting',
|
||||||
|
|||||||
8
main.uts
8
main.uts
@@ -7,11 +7,9 @@ export function createApp() {
|
|||||||
|
|
||||||
// 注册 i18n 全局属性,使组件可以使用 $t 方法
|
// 注册 i18n 全局属性,使组件可以使用 $t 方法
|
||||||
app.config.globalProperties.$t = (key: string, values?: any, locale?: string): string => {
|
app.config.globalProperties.$t = (key: string, values?: any, locale?: string): string => {
|
||||||
if (!i18n.global) {
|
// 临时方案:移除对未定义 i18n 的引用,直接返回 Key
|
||||||
console.error('i18n is not initialized')
|
// 如果之后需要 i18n,应正确导入并初始化
|
||||||
return key
|
return key
|
||||||
}
|
|
||||||
return i18n.global.t(key, values, locale) || key
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return { app }
|
return { app }
|
||||||
|
|||||||
@@ -487,13 +487,6 @@
|
|||||||
"navigationStyle": "custom"
|
"navigationStyle": "custom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"path": "system-settings",
|
|
||||||
"style": {
|
|
||||||
"navigationBarTitleText": "系统设置",
|
|
||||||
"navigationStyle": "custom"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"path": "subscription/plan-management",
|
"path": "subscription/plan-management",
|
||||||
"style": {
|
"style": {
|
||||||
|
|||||||
@@ -1,81 +1,330 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="page-container">
|
<view class="system-settings-page">
|
||||||
<view class="page-header">
|
<view class="settings-card">
|
||||||
<text class="page-title">系统配置</text>
|
<!-- 顶部导航标签 (1:1 复刻 CRMEB: 横向排列) -->
|
||||||
<text class="page-subtitle">Component: SettingSystemConfig</text>
|
<view class="tabs-container">
|
||||||
</view>
|
<scroll-view class="tabs-scroll" scroll-x="true" show-scrollbar="false" :enable-flex="true">
|
||||||
|
<view class="tabs-bar">
|
||||||
<view class="page-content">
|
<view
|
||||||
<view class="placeholder-card">
|
v-for="(tab, index) in tabs"
|
||||||
<text class="placeholder-title">页面占位</text>
|
:key="index"
|
||||||
<text class="placeholder-desc">该功能模块正在开发中</text>
|
class="tab-item"
|
||||||
<text class="placeholder-info">当前采用 CRMEB 路由体系 1:1 映射</text>
|
:class="{ active: currentTab === index }"
|
||||||
|
@click="currentTab = index"
|
||||||
|
>
|
||||||
|
<text class="tab-text">{{ tab.name }}</text>
|
||||||
|
<view class="tab-line" v-if="currentTab === index"></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 表单区域 -->
|
||||||
|
<view class="form-container">
|
||||||
|
|
||||||
|
<!-- 1. 基础配置 -->
|
||||||
|
<view v-if="currentTab === 0" class="form-content">
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-label">站点开启:</view>
|
||||||
|
<view class="form-right">
|
||||||
|
<radio-group class="radio-group" @change="formData.site_open = parseInt(($event.detail.value as string))">
|
||||||
|
<label class="radio-label"><radio value="1" :checked="formData.site_open == 1" color="#1890ff" />开启</label>
|
||||||
|
<label class="radio-label"><radio value="0" :checked="formData.site_open == 0" color="#1890ff" />关闭</label>
|
||||||
|
</radio-group>
|
||||||
|
<view class="form-tip">站点开启/关闭(用于升级等临时关闭),关闭后前端会弹窗显示站点升级中,请稍后访问</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-label">网站名称:</view>
|
||||||
|
<view class="form-right">
|
||||||
|
<input class="form-input" v-model="formData.site_name" placeholder="请输入网站名称" />
|
||||||
|
<view class="form-tip">网站名称很多地方会显示的,建议认真填写</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-label">网站地址:</view>
|
||||||
|
<view class="form-right">
|
||||||
|
<input class="form-input" v-model="formData.site_url" placeholder="请输入网站地址" />
|
||||||
|
<view class="form-tip">安装自动配置,不要轻易修改,更换后会影响网站访问、接口请求、本地文件储存、支付回调、微信授权、支付、小程序图片访问、部分二维码、官方授权等</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-label">消息队列:</view>
|
||||||
|
<view class="form-right">
|
||||||
|
<radio-group class="radio-group" @change="formData.msg_queue = parseInt(($event.detail.value as string))">
|
||||||
|
<label class="radio-label"><radio value="1" :checked="formData.msg_queue == 1" color="#1890ff" />开启</label>
|
||||||
|
<label class="radio-label"><radio value="0" :checked="formData.msg_queue == 0" color="#1890ff" />关闭</label>
|
||||||
|
</radio-group>
|
||||||
|
<view class="form-tip">是否启用消息队列,启用后提升程序运行速度,启用前必须配置Redis缓存,文档地址:https://doc.crmeb.com/single/crmeb_v4/7217</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-label">联系电话:</view>
|
||||||
|
<view class="form-right">
|
||||||
|
<input class="form-input" v-model="formData.contact_phone" placeholder="请输入联系电话" />
|
||||||
|
<view class="form-tip">联系电话</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-label">授权密钥:</view>
|
||||||
|
<view class="form-right">
|
||||||
|
<input class="form-input" v-model="formData.auth_key" placeholder="请输入授权密钥" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 2. 分享配置 -->
|
||||||
|
<view v-else-if="currentTab === 1" class="form-content">
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-label">分享图片:</view>
|
||||||
|
<view class="form-right">
|
||||||
|
<view class="upload-placeholder" @click="handleUpload('share_img')">上传图片</view>
|
||||||
|
<view class="form-tip">分享图片比例5:4,建议小于50KB</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-label">分享标题:</view>
|
||||||
|
<view class="form-right">
|
||||||
|
<input class="form-input" v-model="formData.share_title" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-label">分享简介:</view>
|
||||||
|
<view class="form-right">
|
||||||
|
<textarea class="form-textarea" v-model="formData.share_desc" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 3. LOGO配置 -->
|
||||||
|
<view v-else-if="currentTab === 2" class="form-content">
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-label">后台登录LOGO:</view>
|
||||||
|
<view class="form-right">
|
||||||
|
<view class="upload-placeholder" @click="handleUpload('login_logo')">上传截图</view>
|
||||||
|
<view class="form-tip">建议尺寸270*75</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-label">后台小LOGO:</view>
|
||||||
|
<view class="form-right">
|
||||||
|
<view class="upload-placeholder" @click="handleUpload('small_logo')">上传图片</view>
|
||||||
|
<view class="form-tip">建议尺寸180*180</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-label">后台大LOGO:</view>
|
||||||
|
<view class="form-right">
|
||||||
|
<view class="upload-placeholder" @click="handleUpload('big_logo')">上传图片</view>
|
||||||
|
<view class="form-tip">建议尺寸170*50</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 4. 自定义JS -->
|
||||||
|
<view v-else-if="currentTab === 3" class="form-content">
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-label">移动端JS:</view>
|
||||||
|
<view class="form-right">
|
||||||
|
<textarea class="form-textarea code-bg" v-model="formData.mobile_js" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-label">管理端JS:</view>
|
||||||
|
<view class="form-right">
|
||||||
|
<textarea class="form-textarea code-bg" v-model="formData.admin_js" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-label">PC端JS:</view>
|
||||||
|
<view class="form-right">
|
||||||
|
<textarea class="form-textarea code-bg" v-model="formData.pc_js" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 5. 地图配置 -->
|
||||||
|
<view v-else-if="currentTab === 4" class="form-content">
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-label">腾讯地图KEY:</view>
|
||||||
|
<view class="form-right">
|
||||||
|
<input class="form-input" v-model="formData.tencent_map_key" />
|
||||||
|
<view class="form-tip">申请地址:https://lbs.qq.com</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 6. 备案配置 -->
|
||||||
|
<view v-else-if="currentTab === 5" class="form-content">
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-label">备案号:</view>
|
||||||
|
<view class="form-right">
|
||||||
|
<input class="form-input" v-model="formData.filing_no" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-label">ICP链接:</view>
|
||||||
|
<view class="form-right">
|
||||||
|
<input class="form-input" v-model="formData.icp_link" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 7. 模块配置 -->
|
||||||
|
<view v-else-if="currentTab === 6" class="form-content">
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-label">功能开启:</view>
|
||||||
|
<view class="form-right">
|
||||||
|
<checkbox-group class="checkbox-group" @change="formData.module_config = ($event.detail.value as string[])">
|
||||||
|
<label class="checkbox-label"><checkbox value="秒杀" :checked="formData.module_config.includes('秒杀')" color="#1890ff" />秒杀</label>
|
||||||
|
<label class="checkbox-label"><checkbox value="砍价" :checked="formData.module_config.includes('砍价')" color="#1890ff" />砍价</label>
|
||||||
|
<label class="checkbox-label"><checkbox value="拼团" :checked="formData.module_config.includes('拼团')" color="#1890ff" />拼团</label>
|
||||||
|
</checkbox-group>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 8. 远程登录 -->
|
||||||
|
<view v-else-if="currentTab === 7" class="form-content">
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-label">远程登录地址:</view>
|
||||||
|
<view class="form-right">
|
||||||
|
<input class="form-input" v-model="formData.remote_login_url" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 9. WAF配置 -->
|
||||||
|
<view v-else-if="currentTab === 8" class="form-content">
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-label">WAF类型:</view>
|
||||||
|
<view class="form-right">
|
||||||
|
<radio-group class="radio-group" @change="formData.waf_type = parseInt(($event.detail.value as string))">
|
||||||
|
<label class="radio-label"><radio value="0" :checked="formData.waf_type == 0" color="#1890ff" />关闭</label>
|
||||||
|
<label class="radio-label"><radio value="1" :checked="formData.waf_type == 1" color="#1890ff" />拦截</label>
|
||||||
|
<label class="radio-label"><radio value="2" :checked="formData.waf_type == 2" color="#1890ff" />过滤</label>
|
||||||
|
</radio-group>
|
||||||
|
<view class="form-tip">WAF类型:关闭(所有参数都能正常请求),拦截(匹配到WAF配置的参数阻断接口请求),过滤(匹配到WAF配置的参数过滤参数,正常请求接口)</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-label">WAF配置:</view>
|
||||||
|
<view class="form-right">
|
||||||
|
<textarea class="form-textarea code-bg waf-textarea" v-model="formData.waf_config" />
|
||||||
|
<view class="form-tip">WAF配置验证参数,过滤掉不需要的参数或拦截请求,多个参数用回车换行分隔</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 提交按钮 -->
|
||||||
|
<view class="submit-section">
|
||||||
|
<view class="form-label"></view> <!-- 占位用于对齐 -->
|
||||||
|
<view class="form-right">
|
||||||
|
<button class="btn-submit" @click="handleSubmit">提交</button>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="uts">
|
<script setup lang="uts">
|
||||||
import { ref } from 'vue'
|
import { ref } from "vue"
|
||||||
|
|
||||||
// TODO: 实现 系统配置 的具体功能
|
const currentTab = ref(0)
|
||||||
const loading = ref<boolean>(false)
|
const tabs = [
|
||||||
|
{ name: "基础配置" }, { name: "分享配置" }, { name: "LOGO配置" },
|
||||||
|
{ name: "自定义JS" }, { name: "地图配置" }, { name: "备案配置" },
|
||||||
|
{ name: "模块配置" }, { name: "远程登录配置" }, { name: "WAF配置" }
|
||||||
|
]
|
||||||
|
|
||||||
|
const formData = ref({
|
||||||
|
site_open: 1,
|
||||||
|
site_name: "CRMEB标准版",
|
||||||
|
site_url: "https://v5.crmeb.net",
|
||||||
|
msg_queue: 0,
|
||||||
|
contact_phone: "",
|
||||||
|
auth_key: "AO9azvBW9vEcOH7swklTM0RYRb6EB4RLWMSD88MnKTi8Vd6cjXVd",
|
||||||
|
share_img: "",
|
||||||
|
share_title: "CRMEB v5标准版",
|
||||||
|
share_desc: "完善的文档 全心而来!",
|
||||||
|
login_logo: "",
|
||||||
|
small_logo: "",
|
||||||
|
big_logo: "",
|
||||||
|
mobile_js: "",
|
||||||
|
admin_js: "",
|
||||||
|
pc_js: "",
|
||||||
|
tencent_map_key: "SMJBZ-WCHK4-ZPZUA-DSIXI-XDDVQ-XWFX7",
|
||||||
|
filing_no: "陕ICP备14011498号-3",
|
||||||
|
icp_link: "https://beian.miit.gov.cn/",
|
||||||
|
module_config: ["秒杀", "砍价", "拼团"] as string[],
|
||||||
|
remote_login_url: "",
|
||||||
|
waf_type: 2,
|
||||||
|
waf_config: "/\\.\\.\\//\n/\\<\\?/\n/\\bor\\b.*=\\s*\\*/i\n/(select[\\s\\S]*?)(from|limit)/i\n/(union[\\s\\S]*?select)/i\n/(having\\s+updatexml|extractvalue)/i"
|
||||||
|
})
|
||||||
|
|
||||||
|
const handleUpload = (field: string) => {
|
||||||
|
uni.showToast({ title: "选择文件: " + field, icon: "none" })
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleSubmit = () => {
|
||||||
|
uni.showLoading({ title: "保存中..." })
|
||||||
|
setTimeout(() => {
|
||||||
|
uni.hideLoading()
|
||||||
|
uni.showToast({ title: "保存成功", icon: "success" })
|
||||||
|
}, 800)
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped>
|
||||||
.page-container {
|
.system-settings-page { padding: 20px; background-color: #f5f7f9; min-height: 100vh; }
|
||||||
padding: 20px;
|
.settings-card { background-color: #fff; border-radius: 4px; padding: 20px; box-shadow: 0 1px 4px rgba(0,21,41,0.08); }
|
||||||
min-height: 100vh;
|
|
||||||
background: #f5f5f5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.page-header {
|
/* 核心修复:确保 Tabs 横向排列并且可以滑动 */
|
||||||
margin-bottom: 20px;
|
.tabs-container { margin-bottom: 30px; border-bottom: 1px solid #e8eaec; width: 100%; overflow: hidden; }
|
||||||
}
|
.tabs-scroll { width: 100%; white-space: nowrap; }
|
||||||
|
.tabs-bar { display: inline-flex; flex-direction: row; min-width: 100%; }
|
||||||
|
|
||||||
.page-title {
|
.tab-item {
|
||||||
display: block;
|
display: inline-flex;
|
||||||
font-size: 24px;
|
flex-direction: row;
|
||||||
font-weight: 600;
|
align-items: center;
|
||||||
color: #333;
|
padding: 12px 24px;
|
||||||
margin-bottom: 8px;
|
font-size: 14px;
|
||||||
|
color: #515a6e;
|
||||||
|
position: relative;
|
||||||
|
cursor: pointer;
|
||||||
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
.tab-item.active { color: #1890ff; font-weight: bold; }
|
||||||
|
.tab-line { position: absolute; bottom: 0; left: 0; right: 0; height: 2px; background-color: #1890ff; }
|
||||||
|
|
||||||
.page-subtitle {
|
.form-container { padding-left: 20px; }
|
||||||
display: block;
|
|
||||||
font-size: 14px;
|
|
||||||
color: #999;
|
|
||||||
}
|
|
||||||
|
|
||||||
.page-content {
|
/* 核心修复:确保表单项横向排列 (Label left, Input right) */
|
||||||
background: #fff;
|
.form-item { display: flex; flex-direction: row; margin-bottom: 25px; align-items: flex-start; }
|
||||||
border-radius: 4px;
|
|
||||||
padding: 24px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.placeholder-card {
|
.form-label { width: 140px; font-size: 14px; color: #303133; text-align: right; padding-right: 20px; padding-top: 8px; flex-shrink: 0; }
|
||||||
text-align: center;
|
.form-right { flex: 1; display: flex; flex-direction: column; width: 100%; }
|
||||||
padding: 60px 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.placeholder-title {
|
.form-input { border: 1px solid #dcdfe6; width: 450px; height: 32px; padding: 0 15px; border-radius: 4px; font-size: 14px; color: #606266; outline: none; transition: border-color .2s; }
|
||||||
display: block;
|
.form-input:focus { border-color: #409eff; }
|
||||||
font-size: 18px;
|
|
||||||
font-weight: 600;
|
|
||||||
color: #666;
|
|
||||||
margin-bottom: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.placeholder-desc {
|
.form-textarea { border: 1px solid #dcdfe6; width: 550px; height: 120px; padding: 10px 15px; border-radius: 4px; font-size: 14px; color: #606266; line-height: 1.6; outline: none; }
|
||||||
display: block;
|
.form-textarea:focus { border-color: #409eff; }
|
||||||
font-size: 14px;
|
|
||||||
color: #999;
|
|
||||||
margin-bottom: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.placeholder-info {
|
.waf-textarea { height: 200px; }
|
||||||
display: block;
|
.code-bg { background-color: #f5f7fa; font-family: "Lucida Console", Monaco, monospace; }
|
||||||
font-size: 12px;
|
|
||||||
color: #1890ff;
|
.form-tip { font-size: 12px; color: #c0c4cc; margin-top: 8px; line-height: 1.5; width: 550px; }
|
||||||
}
|
|
||||||
</style>
|
.radio-group, .checkbox-group { display: flex; flex-direction: row; align-items: center; min-height: 32px; }
|
||||||
|
.radio-label, .checkbox-label { display: flex; flex-direction: row; align-items: center; margin-right: 30px; font-size: 14px; color: #606266; cursor: pointer; }
|
||||||
|
|
||||||
|
.upload-placeholder { width: 80px; height: 80px; border: 1px dashed #dcdfe6; border-radius: 4px; display: flex; align-items: center; justify-content: center; font-size: 12px; color: #909399; cursor: pointer; transition: all .2s; }
|
||||||
|
.upload-placeholder:hover { border-color: #409eff; color: #409eff; }
|
||||||
|
|
||||||
|
.submit-section { display: flex; flex-direction: row; margin-top: 20px; padding-top: 10px; }
|
||||||
|
.btn-submit { background-color: #1890ff; color: #fff; width: 65px; height: 32px; line-height: 32px; font-size: 14px; border-radius: 4px; margin: 0; border: none; cursor: pointer; text-align: center; }
|
||||||
|
.btn-submit:active { background-color: #096dd9; }
|
||||||
|
</style>
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
<template>
|
|
||||||
<AdminLayout currentPage="sys-basic">
|
|
||||||
<view class="Page">
|
|
||||||
<view class="Header">
|
|
||||||
<text class="Title">设置</text>
|
|
||||||
<text class="SubTitle">system-settings</text>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<view class="Card">
|
|
||||||
<text class="Label">页面参数(query)</text>
|
|
||||||
<text class="Mono">{{ params }}</text>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</AdminLayout>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup lang="uts">
|
|
||||||
import { ref } from 'vue'
|
|
||||||
import { onLoad } from '@dcloudio/uni-app'
|
|
||||||
import AdminLayout from '@/layouts/admin/AdminLayout.uvue'
|
|
||||||
|
|
||||||
const params = ref('')
|
|
||||||
|
|
||||||
onLoad((options) => {
|
|
||||||
// options: Record<string, any>
|
|
||||||
params.value = JSON.stringify(options ?? {})
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
.Page {
|
|
||||||
padding: 24rpx;
|
|
||||||
}
|
|
||||||
.Header {
|
|
||||||
padding: 24rpx;
|
|
||||||
border-radius: 16rpx;
|
|
||||||
background: #ffffff;
|
|
||||||
}
|
|
||||||
.Title {
|
|
||||||
font-size: 36rpx;
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
.SubTitle {
|
|
||||||
margin-top: 8rpx;
|
|
||||||
font-size: 24rpx;
|
|
||||||
opacity: 0.7;
|
|
||||||
}
|
|
||||||
.Card {
|
|
||||||
margin-top: 24rpx;
|
|
||||||
padding: 24rpx;
|
|
||||||
border-radius: 16rpx;
|
|
||||||
background: #ffffff;
|
|
||||||
}
|
|
||||||
.Label {
|
|
||||||
font-size: 26rpx;
|
|
||||||
font-weight: 600;
|
|
||||||
margin-bottom: 12rpx;
|
|
||||||
}
|
|
||||||
.Mono {
|
|
||||||
font-size: 24rpx;
|
|
||||||
font-family: monospace;
|
|
||||||
line-height: 36rpx;
|
|
||||||
word-break: break-all;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
Reference in New Issue
Block a user