继续完善文件结构

This commit is contained in:
2026-02-05 18:25:15 +08:00
parent 6b416e6a0a
commit 0970fdbac3
25 changed files with 101 additions and 625 deletions

View File

@@ -30,12 +30,12 @@ import ProductStatistic from '@/pages/mall/admin/product/product-statistics/inde
import ProductList from '@/pages/mall/admin/product/product-management/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 ProductEdit from '@/pages/mall/admin/product/product-management/edit.uvue'
import ProductMemberPrice from '@/pages/mall/admin/product/product-management/member-price.uvue' import ProductMemberPrice from '@/pages/mall/admin/product/product-management/member-price.uvue'
import ProductClassify from '@/pages/mall/admin/product/classify.uvue' import ProductClassify from '@/pages/mall/admin/product/classification/index.uvue'
import ProductReply from '@/pages/mall/admin/product/reply.uvue' import ProductReply from '@/pages/mall/admin/product/reviews/index.uvue'
import ProductAttr from '@/pages/mall/admin/product/attr.uvue' import ProductAttr from '@/pages/mall/admin/product/specifications/index.uvue'
import ProductParam from '@/pages/mall/admin/product/param.uvue' import ProductParam from '@/pages/mall/admin/product/parameters/index.uvue'
import ProductLabel from '@/pages/mall/admin/product/label.uvue' import ProductLabel from '@/pages/mall/admin/product/labels/index.uvue'
import ProductProtection from '@/pages/mall/admin/product/protection.uvue' import ProductProtection from '@/pages/mall/admin/product/protection/index.uvue'
// 导入订单模块(纯组件,不包含 AdminLayout // 导入订单模块(纯组件,不包含 AdminLayout
import OrderList from '@/pages/mall/admin/order/list.uvue' import OrderList from '@/pages/mall/admin/order/list.uvue'

View File

@@ -301,7 +301,7 @@ export const routes: RouteRecord[] = [
{ {
id: 'product_productClassify', id: 'product_productClassify',
title: '商品分类', title: '商品分类',
path: '/pages/mall/admin/product/classify', path: '/pages/mall/admin/product/classification/index',
componentKey: 'ProductClassify', componentKey: 'ProductClassify',
parentId: 'product', parentId: 'product',
groupId: 'product-manage', groupId: 'product-manage',
@@ -311,7 +311,7 @@ export const routes: RouteRecord[] = [
{ {
id: 'product_productAttr', id: 'product_productAttr',
title: '商品规格', title: '商品规格',
path: '/pages/mall/admin/product/attr', path: '/pages/mall/admin/product/specifications/index',
componentKey: 'ProductAttr', componentKey: 'ProductAttr',
parentId: 'product', parentId: 'product',
groupId: 'product-manage', groupId: 'product-manage',
@@ -321,7 +321,7 @@ export const routes: RouteRecord[] = [
{ {
id: 'product_paramList', id: 'product_paramList',
title: '商品参数', title: '商品参数',
path: '/pages/mall/admin/product/param', path: '/pages/mall/admin/product/parameters/index',
componentKey: 'ProductParam', componentKey: 'ProductParam',
parentId: 'product', parentId: 'product',
groupId: 'product-manage', groupId: 'product-manage',
@@ -331,7 +331,7 @@ export const routes: RouteRecord[] = [
{ {
id: 'product_labelList', id: 'product_labelList',
title: '商品标签', title: '商品标签',
path: '/pages/mall/admin/product/label', path: '/pages/mall/admin/product/labels/index',
componentKey: 'ProductLabel', componentKey: 'ProductLabel',
parentId: 'product', parentId: 'product',
groupId: 'product-manage', groupId: 'product-manage',
@@ -341,7 +341,7 @@ export const routes: RouteRecord[] = [
{ {
id: 'product_protectionList', id: 'product_protectionList',
title: '商品保障', title: '商品保障',
path: '/pages/mall/admin/product/protection', path: '/pages/mall/admin/product/protection/index',
componentKey: 'ProductProtection', componentKey: 'ProductProtection',
parentId: 'product', parentId: 'product',
groupId: 'product-manage', groupId: 'product-manage',
@@ -351,7 +351,7 @@ export const routes: RouteRecord[] = [
{ {
id: 'product_productEvaluate', id: 'product_productEvaluate',
title: '商品评论', title: '商品评论',
path: '/pages/mall/admin/product/reply', path: '/pages/mall/admin/product/reviews/index',
componentKey: 'ProductReply', componentKey: 'ProductReply',
parentId: 'product', parentId: 'product',
groupId: 'product-manage', groupId: 'product-manage',

View File

@@ -460,7 +460,7 @@
} }
}, },
{ {
"path": "product-management", "path": "product/product-management/index",
"style": { "style": {
"navigationBarTitleText": "商品管理", "navigationBarTitleText": "商品管理",
"navigationStyle": "custom" "navigationStyle": "custom"
@@ -633,4 +633,4 @@
"navigationBarBackgroundColor": "#FFFFFF", "navigationBarBackgroundColor": "#FFFFFF",
"backgroundColor": "#F8F8F8" "backgroundColor": "#F8F8F8"
} }
} }

View File

@@ -5,19 +5,29 @@
<view class="filter-row"> <view class="filter-row">
<view class="filter-item"> <view class="filter-item">
<text class="filter-label">时间选择:</text> <text class="filter-label">时间选择:</text>
<uni-datetime-picker v-model="timeRange" type="daterange" class="dt-picker" /> <input class="date-input" type="text" v-model="timeRangeText" placeholder="请选择时间范围" />
</view> </view>
<view class="filter-item"> <view class="filter-item">
<text class="filter-label">提现状态:</text> <text class="filter-label">提现状态:</text>
<uni-data-select v-model="statusValue" :localdata="statusOptions" class="data-select" /> <picker mode="selector" :range="statusOptions" range-key="text" @change="statusChange">
<view class="picker-view">
<text>{{ statusLabel }}</text>
<text class="iconfont icon-arrow-down" style="font-size: 12px;"></text>
</view>
</picker>
</view> </view>
<view class="filter-item"> <view class="filter-item">
<text class="filter-label">提现方式:</text> <text class="filter-label">提现方式:</text>
<uni-data-select v-model="methodValue" :localdata="methodOptions" class="data-select" /> <picker mode="selector" :range="methodOptions" range-key="text" @change="methodChange">
<view class="picker-view">
<text>{{ methodLabel }}</text>
<text class="iconfont icon-arrow-down" style="font-size: 12px;"></text>
</view>
</picker>
</view> </view>
<view class="filter-item search-wrap"> <view class="filter-item search-wrap">
<text class="filter-label">搜索:</text> <text class="filter-label">搜索:</text>
<uni-easyinput v-model="searchKeyword" placeholder="微信昵称/姓名/支付宝账号/银行卡号" class="search-input" /> <input class="search-input" v-model="searchKeyword" placeholder="微信昵称/姓名/支付宝账号/银行卡号" />
</view> </view>
<button class="btn-query" @click="handleQuery">查询</button> <button class="btn-query" @click="handleQuery">查询</button>
</view> </view>
@@ -107,9 +117,10 @@
</template> </template>
<script setup lang="uts"> <script setup lang="uts">
import { ref } from 'vue' import { ref, computed } from 'vue'
const timeRange = ref([]) const timeRange = ref([])
const timeRangeText = ref('')
const statusValue = ref('all') const statusValue = ref('all')
const methodValue = ref('all') const methodValue = ref('all')
const searchKeyword = ref('') const searchKeyword = ref('')
@@ -128,6 +139,16 @@ const methodOptions = ref([
{ value: 'weixin', text: '微信' } { value: 'weixin', text: '微信' }
]) ])
const statusLabel = computed(() => {
const item = statusOptions.value.find((opt: any) => opt.value === statusValue.value)
return item ? item.text : '全部'
})
const methodLabel = computed(() => {
const item = methodOptions.value.find((opt: any) => opt.value === methodValue.value)
return item ? item.text : '全部'
})
const stats = ref([ const stats = ref([
{ label: '佣金总金额', value: '676809.25', icon: '$', colorClass: 'blue' }, { label: '佣金总金额', value: '676809.25', icon: '$', colorClass: 'blue' },
{ label: '待提现金额', value: '71', icon: '¥', colorClass: 'orange' }, { label: '待提现金额', value: '71', icon: '¥', colorClass: 'orange' },
@@ -165,6 +186,14 @@ const tableData = ref([
} }
]) ])
const statusChange = (e: any) => {
statusValue.value = statusOptions.value[e.detail.value].value
}
const methodChange = (e: any) => {
methodValue.value = methodOptions.value[e.detail.value].value
}
const handleQuery = () => { const handleQuery = () => {
console.log('Query with:', statusValue.value, methodValue.value, searchKeyword.value) console.log('Query with:', statusValue.value, methodValue.value, searchKeyword.value)
} }
@@ -207,12 +236,26 @@ const handleQuery = () => {
white-space: nowrap; white-space: nowrap;
} }
.dt-picker { .date-input {
width: 260px; width: 260px;
height: 32px;
padding: 0 12px;
border: 1px solid #dcdfe6;
border-radius: 4px;
font-size: 14px;
} }
.data-select { .picker-view {
width: 140px; width: 140px;
height: 32px;
padding: 0 12px;
border: 1px solid #dcdfe6;
border-radius: 4px;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
font-size: 14px;
} }
.search-wrap { .search-wrap {
@@ -222,6 +265,11 @@ const handleQuery = () => {
.search-input { .search-input {
flex: 1; flex: 1;
height: 32px;
padding: 0 12px;
border: 1px solid #dcdfe6;
border-radius: 4px;
font-size: 14px;
} }
.btn-query { .btn-query {

View File

@@ -182,6 +182,10 @@ export default {
} }
}, },
methods: { methods: {
getStatusLabel(val : number) : string {
const item = this.statusOptions.find((opt: any) => opt.value === val)
return item ? item.label : '全部'
},
getStatusText(status : number) : string { getStatusText(status : number) : string {
switch(status) { switch(status) {
case 0: return '未发货'; case 0: return '未发货';

View File

@@ -7,7 +7,7 @@
<text class="label">时间选择:</text> <text class="label">时间选择:</text>
<view class="date-range-mock"> <view class="date-range-mock">
<text class="date-text">全部</text> <text class="date-text">全部</text>
<uni-icons type="calendar" size="16" color="#c0c4cc"></uni-icons> <text class="iconfont icon-calendar" style="font-size: 16px; color: #c0c4cc;"></text>
</view> </view>
</view> </view>
<view class="filter-item"> <view class="filter-item">
@@ -15,7 +15,7 @@
<picker mode="selector" :range="typeOptions" range-key="label" @change="typeChange"> <picker mode="selector" :range="typeOptions" range-key="label" @change="typeChange">
<view class="admin-input-picker"> <view class="admin-input-picker">
<text>{{ typeLabel }}</text> <text>{{ typeLabel }}</text>
<uni-icons type="arrowdown" size="14" color="#c0c4cc"></uni-icons> <text class="iconfont icon-arrow-down" style="font-size: 14px; color: #c0c4cc;"></text>
</view> </view>
</picker> </picker>
</view> </view>
@@ -60,7 +60,11 @@
<!-- 分页 --> <!-- 分页 -->
<view class="table-pagination"> <view class="table-pagination">
<text class="total-text">共 {{ total }} 条</text> <text class="total-text">共 {{ total }} 条</text>
<uni-pagination :total="total" :pageSize="10" :current="1"></uni-pagination> <view class="page-ops">
<button class="page-btn" disabled>上一页</button>
<text class="current-page">1</text>
<button class="page-btn">下一页</button>
</view>
</view> </view>
</view> </view>
</view> </view>
@@ -272,6 +276,27 @@ export default {
justify-content: flex-end; justify-content: flex-end;
} }
.total-text { font-size: 14px; color: #515a6e; margin-right: 15px; } .total-text { font-size: 14px; color: #515a6e; margin-right: 15px; }
.page-ops {
display: flex;
flex-direction: row;
align-items: center;
gap: 8px;
}
.page-btn {
height: 32px;
padding: 0 12px;
font-size: 14px;
border-radius: 2px;
border: 1px solid #d9d9d9;
background: #fff;
margin: 0;
}
.current-page {
padding: 0 12px;
font-size: 14px;
color: #2d8cf0;
}
</style> </style>

View File

@@ -1,64 +0,0 @@
<template>
<AdminLayout currentPage="product-classification">
<view class="Page">
<view class="Header">
<text class="Title">商品分类</text>
<text class="SubTitle">product-classification</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>

View File

@@ -1,64 +0,0 @@
<template>
<AdminLayout currentPage="product-labels">
<view class="Page">
<view class="Header">
<text class="Title">商品标签</text>
<text class="SubTitle">product-labels</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>

View File

@@ -1,64 +0,0 @@
<template>
<AdminLayout currentPage="product-management">
<view class="Page">
<view class="Header">
<text class="Title">商品</text>
<text class="SubTitle">product-management</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>

View File

@@ -1,64 +0,0 @@
<template>
<AdminLayout currentPage="product-parameters">
<view class="Page">
<view class="Header">
<text class="Title">商品参数</text>
<text class="SubTitle">product-parameters</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>

View File

@@ -1,64 +0,0 @@
<template>
<AdminLayout currentPage="product-protection">
<view class="Page">
<view class="Header">
<text class="Title">商品保障</text>
<text class="SubTitle">product-protection</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>

View File

@@ -1,65 +0,0 @@
<template>
<AdminLayout currentPage="product-reviews">
<view class="Page">
<view class="Header">
<text class="Title">商品评论</text>
<text class="SubTitle">product-reviews</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>

View File

@@ -1,64 +0,0 @@
<template>
<AdminLayout currentPage="product-specifications">
<view class="Page">
<view class="Header">
<text class="Title">商品规格</text>
<text class="SubTitle">product-specifications</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>

View File

@@ -1,25 +0,0 @@
<template>
<AdminLayout :currentPage="currentPage">
<view class="page">
<view class="header">
<text class="title">{{ title }}</text>
<text class="sub-title">页面已修复 (UTF-8)</text>
</view>
</view>
</AdminLayout>
</template>
<script setup lang="uts">
import { ref } from 'vue'
import AdminLayout from '@/layouts/admin/AdminLayout.uvue'
const currentPage = ref<string>('index')
const title = ref<string>('index')
</script>
<style scoped lang="scss">
@import '@/uni.scss';
.page { padding: $space-lg; }
.header { padding: $space-lg; border-radius: $radius; background: $background-primary; box-shadow: $shadow-xs; }
.title { font-size: $font-size-lg; font-weight: $font-weight-bold; color: $text-primary; }
.sub-title { margin-top: $space-xs; font-size: $font-size-md; color: $text-secondary; }
</style>

View File

@@ -1,25 +0,0 @@
<template>
<AdminLayout :currentPage="currentPage">
<view class="page">
<view class="header">
<text class="title">{{ title }}</text>
<text class="sub-title">页面已修复 (UTF-8)</text>
</view>
</view>
</AdminLayout>
</template>
<script setup lang="uts">
import { ref } from 'vue'
import AdminLayout from '@/layouts/admin/AdminLayout.uvue'
const currentPage = ref<string>('index')
const title = ref<string>('index')
</script>
<style scoped lang="scss">
@import '@/uni.scss';
.page { padding: $space-lg; }
.header { padding: $space-lg; border-radius: $radius; background: $background-primary; box-shadow: $shadow-xs; }
.title { font-size: $font-size-lg; font-weight: $font-weight-bold; color: $text-primary; }
.sub-title { margin-top: $space-xs; font-size: $font-size-md; color: $text-secondary; }
</style>

View File

@@ -1,25 +0,0 @@
<template>
<AdminLayout :currentPage="currentPage">
<view class="page">
<view class="header">
<text class="title">{{ title }}</text>
<text class="sub-title">页面已修复 (UTF-8)</text>
</view>
</view>
</AdminLayout>
</template>
<script setup lang="uts">
import { ref } from 'vue'
import AdminLayout from '@/layouts/admin/AdminLayout.uvue'
const currentPage = ref<string>('index')
const title = ref<string>('index')
</script>
<style scoped lang="scss">
@import '@/uni.scss';
.page { padding: $space-lg; }
.header { padding: $space-lg; border-radius: $radius; background: $background-primary; box-shadow: $shadow-xs; }
.title { font-size: $font-size-lg; font-weight: $font-weight-bold; color: $text-primary; }
.sub-title { margin-top: $space-xs; font-size: $font-size-md; color: $text-secondary; }
</style>

View File

@@ -1,26 +0,0 @@
<template>
<AdminLayout :currentPage="currentPage">
<view class="page">
<view class="header">
<text class="title">{{ title }}</text>
<text class="sub-title">商品保障条款℃</text>
</view>
</view>
</AdminLayout>
</template>
<script setup lang="uts">
import { ref } from 'vue'
import AdminLayout from '@/layouts/admin/AdminLayout.uvue'
const currentPage = ref<string>('product-protection')
const title = ref<string>('商品保障')
</script>
<style scoped lang="scss">
@import '@/uni.scss';
.page { padding: $space-lg; }
.header { padding: $space-lg; border-radius: $radius; background: $background-primary; box-shadow: $shadow-xs; }
.title { font-size: $font-size-lg; font-weight: $font-weight-bold; color: $text-primary; }
.sub-title { margin-top: $space-xs; font-size: $font-size-md; color: $text-secondary; }
</style>

View File

@@ -1,25 +0,0 @@
<template>
<AdminLayout :currentPage="currentPage">
<view class="page">
<view class="header">
<text class="title">{{ title }}</text>
<text class="sub-title">页面已修复 (UTF-8)</text>
</view>
</view>
</AdminLayout>
</template>
<script setup lang="uts">
import { ref } from 'vue'
import AdminLayout from '@/layouts/admin/AdminLayout.uvue'
const currentPage = ref<string>('index')
const title = ref<string>('index')
</script>
<style scoped lang="scss">
@import '@/uni.scss';
.page { padding: $space-lg; }
.header { padding: $space-lg; border-radius: $radius; background: $background-primary; box-shadow: $shadow-xs; }
.title { font-size: $font-size-lg; font-weight: $font-weight-bold; color: $text-primary; }
.sub-title { margin-top: $space-xs; font-size: $font-size-md; color: $text-secondary; }
</style>

View File

@@ -1,26 +0,0 @@
<template>
<AdminLayout :currentPage="currentPage">
<view class="page">
<view class="header">
<text class="title">{{ title }}</text>
<text class="sub-title">商品规格配置</text>
</view>
</view>
</AdminLayout>
</template>
<script setup lang="uts">
import { ref } from 'vue'
import AdminLayout from '@/layouts/admin/AdminLayout.uvue'
const currentPage = ref<string>('product-specifications')
const title = ref<string>('商品规格')
</script>
<style scoped lang="scss">
@import '@/uni.scss';
.page { padding: $space-lg; }
.header { padding: $space-lg; border-radius: $radius; background: $background-primary; box-shadow: $shadow-xs; }
.title { font-size: $font-size-lg; font-weight: $font-weight-bold; color: $text-primary; }
.sub-title { margin-top: $space-xs; font-size: $font-size-md; color: $text-secondary; }
</style>