diff --git a/src/api/admin/orderManageApi.js b/src/api/admin/orderManageApi.js new file mode 100644 index 0000000..92a8ad3 --- /dev/null +++ b/src/api/admin/orderManageApi.js @@ -0,0 +1,57 @@ +import request from '@/utils/request' + +// 获取订单列表 +export function listCorders(params) { + return new Promise((resolve, reject) => { + request({ + url: '/corders.listCorders', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '获取订单列表失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 获取应用列表 +export function listPublicApps(params) { + return new Promise((resolve, reject) => { + request({ + url: '/app.listPublicApps', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 获取订单日志 +export function listUnitemLog(params) { + return new Promise((resolve, reject) => { + request({ + url: '/corders.listUnitemLog', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '获取订单日志失败')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/mall/housekeepingSjServApi.js b/src/api/mall/housekeepingSjServApi.js new file mode 100644 index 0000000..d050812 --- /dev/null +++ b/src/api/mall/housekeepingSjServApi.js @@ -0,0 +1,47 @@ +import request from '@/utils/request' + +// 查询家政服务列表 +export function queryHousekeepingServ(params) { + return new Promise((resolve, reject) => { + request({ + url: '/mall.getAdminMallOpenApi', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve({ + data: res.data, + total: res.total, + records: res.records + }) + } else { + reject(new Error(res.msg || '查询家政服务列表失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 查询家政服务类型 +export function queryHousekeepingType(params) { + return new Promise((resolve, reject) => { + request({ + url: '/housekeepingType/queryHousekeepingType', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve({ + data: res.data + }) + } else { + reject(new Error(res.msg || '查询家政服务类型失败')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/mall/integralDetailApi.js b/src/api/mall/integralDetailApi.js new file mode 100644 index 0000000..737855e --- /dev/null +++ b/src/api/mall/integralDetailApi.js @@ -0,0 +1,24 @@ +import request from '@/utils/request' + +// 获取积分交易明细列表 +export function getIntegralDetailList(params) { + return new Promise((resolve, reject) => { + request({ + url: '/mall.getAdminMallOpenApi', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve({ + data: res.data, + total: res.total + }) + } else { + reject(new Error(res.msg || 'Failed to get points transaction details')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/mall/productSjApi.js b/src/api/mall/productSjApi.js new file mode 100644 index 0000000..6880ae9 --- /dev/null +++ b/src/api/mall/productSjApi.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 获取商品列表 +export function getAdminProductList(params) { + return new Promise((resolve, reject) => { + request({ + url: '/mall.getAdminMallOpenApi', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve({ + data: res.data, + total: res.total + }) + } else { + reject(new Error(res.msg || 'Failed to get product list')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 删除商品 +export function deleteProduct(data) { + return new Promise((resolve, reject) => { + request({ + url: '/product/deleteProduct', + method: 'post', + data + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || 'Failed to delete product')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/mall/storeOrderCartManageApi.js b/src/api/mall/storeOrderCartManageApi.js new file mode 100644 index 0000000..766720e --- /dev/null +++ b/src/api/mall/storeOrderCartManageApi.js @@ -0,0 +1,47 @@ +import request from '@/utils/request' + +// 查询订单列表 +export function queryAdminStoreOrderCart(params) { + return new Promise((resolve, reject) => { + request({ + url: '/mall.getAdminMallOpenApi', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve({ + data: res.data, + total: res.total + }) + } else { + reject(new Error(res.msg || 'Failed to query order list')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 查询商铺列表 +export function queryShopsByAdmin(params) { + return new Promise((resolve, reject) => { + request({ + url: '/mall.getAdminMallOpenApi', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve({ + data: res.data, + total: res.total + }) + } else { + reject(new Error(res.msg || 'Failed to query shops')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/mall/storeOrderCartReturnApi.js b/src/api/mall/storeOrderCartReturnApi.js new file mode 100644 index 0000000..9d8c279 --- /dev/null +++ b/src/api/mall/storeOrderCartReturnApi.js @@ -0,0 +1,24 @@ +import request from '@/utils/request' + +// 获取退货订单列表 +export function getStoreOrderCartReturnList(params) { + return new Promise((resolve, reject) => { + request({ + url: '/mall.getAdminMallOpenApi', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve({ + data: res.data, + total: res.total + }) + } else { + reject(new Error(res.msg || 'Failed to get store order cart return list')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/mall/userIntegralApi.js b/src/api/mall/userIntegralApi.js new file mode 100644 index 0000000..6d6ccb3 --- /dev/null +++ b/src/api/mall/userIntegralApi.js @@ -0,0 +1,21 @@ +import request from '@/utils/request' + +// 查询积分列表 +export function queryIntegralList(params) { + return new Promise((resolve, reject) => { + request({ + url: '/mall.getAdminMallOpenApi', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '查询积分列表失败')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/user/userLoginApi.js b/src/api/user/userLoginApi.js new file mode 100644 index 0000000..a74ab80 --- /dev/null +++ b/src/api/user/userLoginApi.js @@ -0,0 +1,47 @@ +import request from '@/utils/request' + +// 查询用户登录日志 +export function queryUserLogin(params) { + return new Promise((resolve, reject) => { + request({ + url: '/userLogin/queryUserLogin', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve({ + data: res.data, + records: res.records, + total: res.total + }) + } else { + reject(new Error(res.msg || 'Failed to query user login logs')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 获取门店列表 +export function listStores(params) { + return new Promise((resolve, reject) => { + request({ + url: '/store.listStores', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve({ + data: res.data + }) + } else { + reject(new Error(res.msg || 'Failed to get store list')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/components/admin/viewUnItemLog.vue b/src/components/admin/viewUnItemLog.vue new file mode 100644 index 0000000..de2e206 --- /dev/null +++ b/src/components/admin/viewUnItemLog.vue @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/mall/DeleteProduct.vue b/src/components/mall/DeleteProduct.vue new file mode 100644 index 0000000..3bf0b78 --- /dev/null +++ b/src/components/mall/DeleteProduct.vue @@ -0,0 +1,49 @@ + + + + {{ $t('deleteProduct.confirm') }} + + + {{ $t('deleteProduct.cancel') }} + {{ $t('deleteProduct.confirmBtn') }} + + + + + \ No newline at end of file diff --git a/src/components/mall/DeleteProductLang.js b/src/components/mall/DeleteProductLang.js new file mode 100644 index 0000000..bf55cc2 --- /dev/null +++ b/src/components/mall/DeleteProductLang.js @@ -0,0 +1,22 @@ +export const messages = { + en: { + deleteProduct: { + title: 'Please confirm your operation', + confirm: 'Are you sure to delete this product?', + cancel: 'Cancel', + confirmBtn: 'Confirm Delete', + success: 'Product deleted successfully', + error: 'Failed to delete product' + } + }, + zh: { + deleteProduct: { + title: '请确认您的操作', + confirm: '确定删除该商品吗?', + cancel: '点错了', + confirmBtn: '确认删除', + success: '商品删除成功', + error: '删除商品失败' + } + } +} \ No newline at end of file diff --git a/src/components/mall/Pagination.vue b/src/components/mall/Pagination.vue new file mode 100644 index 0000000..6b5204c --- /dev/null +++ b/src/components/mall/Pagination.vue @@ -0,0 +1,39 @@ + + + + + \ No newline at end of file diff --git a/src/components/user/Pagination.vue b/src/components/user/Pagination.vue new file mode 100644 index 0000000..bdc52ea --- /dev/null +++ b/src/components/user/Pagination.vue @@ -0,0 +1,39 @@ + + + + + + \ No newline at end of file diff --git a/src/i18n/index.js b/src/i18n/index.js index 522bcf9..70fc88d 100644 --- a/src/i18n/index.js +++ b/src/i18n/index.js @@ -88,6 +88,14 @@ import { messages as operationalAnalysisMessages } from '../views/report/operati import { messages as communityFeeSummaryMessages } from '../views/report/communityFeeSummaryLang' import { messages as adminPayFeeDetailMessages } from '../views/fee/adminPayFeeDetailLang' import { messages as adminOweFeeDetailMessages } from '../views/fee/adminOweFeeDetailLang' +import { messages as orderManageMessages } from '../views/admin/orderManageLang' +import { messages as userLoginMessages } from '../views/user/userLoginLang' +import { messages as productSjMessages } from '../views/mall/productSjLang' +import { messages as housekeepingSjServMessages } from '../views/mall/housekeepingSjServLang' +import { messages as storeOrderCartManageMessages } from '../views/mall/storeOrderCartManageLang' +import { messages as storeOrderCartReturnMessages } from '../views/mall/storeOrderCartReturnLang' +import { messages as userIntegralMessages } from '../views/mall/userIntegralLang' +import { messages as integralDetailMessages } from '../views/mall/integralDetailLang' Vue.use(VueI18n) @@ -180,6 +188,14 @@ const messages = { ...communityFeeSummaryMessages.en, ...adminPayFeeDetailMessages.en, ...adminOweFeeDetailMessages.en, + ...orderManageMessages.en, + ...userLoginMessages.en, + ...productSjMessages.en, + ...housekeepingSjServMessages.en, + ...storeOrderCartManageMessages.en, + ...storeOrderCartReturnMessages.en, + ...userIntegralMessages.en, + ...integralDetailMessages.en, }, zh: { ...loginMessages.zh, @@ -268,6 +284,14 @@ const messages = { ...communityFeeSummaryMessages.zh, ...adminPayFeeDetailMessages.zh, ...adminOweFeeDetailMessages.zh, + ...orderManageMessages.zh, + ...userLoginMessages.zh, + ...productSjMessages.zh, + ...housekeepingSjServMessages.zh, + ...storeOrderCartManageMessages.zh, + ...storeOrderCartReturnMessages.zh, + ...userIntegralMessages.zh, + ...integralDetailMessages.zh, } } diff --git a/src/router/index.js b/src/router/index.js index 845b309..8d35148 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -426,6 +426,46 @@ const routes = [ name: '/pages/fee/adminOweFeeDetail', component: () => import('@/views/fee/adminOweFeeDetailList.vue') }, + { + path: '/pages/admin/orderManage', + name: '/pages/admin/orderManage', + component: () => import('@/views/admin/orderManageList.vue') + }, + { + path: '/pages/frame/userLogin', + name: '/pages/frame/userLogin', + component: () => import('@/views/user/userLoginList.vue') + }, + { + path: '/pages/admin/productSj', + name: '/pages/admin/productSj', + component: () => import('@/views/mall/productSjList.vue') + }, + { + path: '/pages/admin/housekeepingSjServ', + name: '/pages/admin/housekeepingSjServ', + component: () => import('@/views/mall/housekeepingSjServList.vue') + }, + { + path: '/pages/admin/storeOrderCartManage', + name: '/pages/admin/storeOrderCartManage', + component: () => import('@/views/mall/storeOrderCartManageList.vue') + }, + { + path: '/pages/admin/storeOrderCartReturn', + name: '/pages/admin/storeOrderCartReturn', + component: () => import('@/views/mall/storeOrderCartReturnList.vue') + }, + { + path: '/pages/admin/userIntegral', + name: '/pages/admin/userIntegral', + component: () => import('@/views/mall/userIntegralList.vue') + }, + { + path: '/pages/admin/integralDetail', + name: '/pages/admin/integralDetail', + component: () => import('@/views/mall/integralDetailList.vue') + }, // 其他子路由可以在这里添加 ] }, diff --git a/src/views/admin/orderManageLang.js b/src/views/admin/orderManageLang.js new file mode 100644 index 0000000..4940748 --- /dev/null +++ b/src/views/admin/orderManageLang.js @@ -0,0 +1,86 @@ +export const messages = { + en: { + orderManage: { + queryCondition: 'Query Condition', + orderList: 'Order List', + orderId: 'Order ID', + externalId: 'External ID', + businessId: 'Business ID', + startTime: 'Start Time', + endTime: 'End Time', + operator: 'Operator', + businessName: 'Business Name', + appName: 'App Name', + createTime: 'Create Time', + action: 'Action', + actionObj: 'Action Object', + status: 'Status', + operation: 'Operation', + log: 'Log', + noLog: 'No Log', + add: 'Add', + modify: 'Modify', + delete: 'Delete', + completed: 'Completed', + failed: 'Failed', + allApps: 'All Apps', + fetchError: 'Failed to fetch orders', + fetchAppsError: 'Failed to fetch apps' + }, + viewUnItemLog: { + title: 'Order Log', + serviceName: 'Service Name', + action: 'Action', + actionObj: 'Action Object', + preValue: 'Before Value', + afterValue: 'After Value', + logText: 'Original Log', + add: 'Add', + modify: 'Modify', + delete: 'Delete', + fetchError: 'Failed to fetch log' + } + }, + zh: { + orderManage: { + queryCondition: '查询条件', + orderList: '受理单', + orderId: '订单编号', + externalId: '外部编号', + businessId: '业务编号', + startTime: '受理开始时间', + endTime: '受理结束时间', + operator: '操作人', + businessName: '业务名称', + appName: '应用名称', + createTime: '受理时间', + action: '受理动作', + actionObj: '受理表', + status: '状态', + operation: '操作', + log: '日志', + noLog: '无日志', + add: '添加', + modify: '修改', + delete: '删除', + completed: '完成', + failed: '失败', + allApps: '全部应用', + fetchError: '获取订单列表失败', + fetchAppsError: '获取应用列表失败' + }, + viewUnItemLog: { + title: '受理记录', + serviceName: '受理服务', + action: '受理动作', + actionObj: '受理表', + preValue: '受理前', + afterValue: '受理后', + logText: '原始记录', + add: '添加', + modify: '修改', + delete: '删除', + fetchError: '获取日志失败' + } + } +} \ No newline at end of file diff --git a/src/views/admin/orderManageList.vue b/src/views/admin/orderManageList.vue new file mode 100644 index 0000000..dd8e0d1 --- /dev/null +++ b/src/views/admin/orderManageList.vue @@ -0,0 +1,247 @@ + + + + + + + + + {{ item.name }} + + + + + + + + + {{ $t('orderManage.queryCondition') }} + + + + + + + + + + + + + + + + + + + + + {{ $t('common.search') }} + + + + + + + + + + + + + + + + {{ $t('orderManage.orderList') }} + + + + + + {{ scope.row.oId }} + ({{ scope.row.extTransactionId }}) + + + + + {{ scope.row.name }} + ({{ scope.row.businessTypeCd }}) + + + + + + + {{ $t('orderManage.add') }} + {{ $t('orderManage.modify') }} + {{ $t('orderManage.delete') }} + - + + + + + + + {{ scope.row.statusCd == 'C' ? $t('orderManage.completed') : $t('orderManage.failed') }} + + + + + + {{ $t('orderManage.log') }} + + {{ $t('orderManage.noLog') }} + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/views/mall/housekeepingSjServLang.js b/src/views/mall/housekeepingSjServLang.js new file mode 100644 index 0000000..629d161 --- /dev/null +++ b/src/views/mall/housekeepingSjServLang.js @@ -0,0 +1,86 @@ +export const messages = { + en: { + housekeepingSjServ: { + search: { + title: 'Search Conditions', + servName: 'Please enter service name', + hktId: 'Please select service type' + }, + list: { + title: 'On Shelf Services', + today: 'Today On Shelf', + all: 'All On Shelf' + }, + table: { + servId: 'Service ID', + servName: 'Service Name', + servDesc: 'Service Description', + hktName: 'Service Type', + repairWay: 'Dispatch Method', + returnVisitFlag: 'Return Visit Method', + sales: 'Sales', + defaultFee: 'Default Fee', + sort: 'Sort', + state: 'Shelf Status' + }, + repairWay: { + grab: 'Grab Order', + assign: 'Assign', + roundRobin: 'Round Robin' + }, + returnVisit: { + none: 'No Return Visit', + ratedNoVisit: 'No Visit After Rated', + allVisit: 'All Return Visit' + }, + state: { + notOnShelf: 'Not On Shelf', + onShelf: 'On Shelf' + }, + fetchError: 'Failed to fetch service list', + fetchTypeError: 'Failed to fetch service types' + } + }, + zh: { + housekeepingSjServ: { + search: { + title: '查询条件', + servName: '请输入服务名称', + hktId: '请选择服务类型' + }, + list: { + title: '上架服务', + today: '今日上架', + all: '所有上架' + }, + table: { + servId: '服务编号', + servName: '服务名称', + servDesc: '服务描述', + hktName: '服务类型', + repairWay: '派单方式', + returnVisitFlag: '回访方式', + sales: '销量', + defaultFee: '默认费用', + sort: '排序', + state: '上架状态' + }, + repairWay: { + grab: '抢单', + assign: '指派', + roundRobin: '轮训' + }, + returnVisit: { + none: '都不回访', + ratedNoVisit: '已评价不回访', + allVisit: '都回访' + }, + state: { + notOnShelf: '未上架', + onShelf: '上架' + }, + fetchError: '获取服务列表失败', + fetchTypeError: '获取服务类型失败' + } + } +} \ No newline at end of file diff --git a/src/views/mall/housekeepingSjServList.vue b/src/views/mall/housekeepingSjServList.vue new file mode 100644 index 0000000..a198743 --- /dev/null +++ b/src/views/mall/housekeepingSjServList.vue @@ -0,0 +1,184 @@ + + + + + + {{ $t('housekeepingSjServ.search.title') }} + + + + + + + + + + + + + + {{ $t('common.search') }} + + + + + + + + + {{ $t('housekeepingSjServ.list.title') }} + + + + {{ $t('housekeepingSjServ.list.today') }} + + + {{ $t('housekeepingSjServ.list.all') }} + + + + + + + + + + + + {{ $t('housekeepingSjServ.repairWay.grab') }} + {{ $t('housekeepingSjServ.repairWay.assign') }} + {{ $t('housekeepingSjServ.repairWay.roundRobin') }} + + + + + {{ $t('housekeepingSjServ.returnVisit.none') }} + {{ $t('housekeepingSjServ.returnVisit.ratedNoVisit') + }} + {{ $t('housekeepingSjServ.returnVisit.allVisit') + }} + + + + + + + + {{ scope.row.state === '1001' ? $t('housekeepingSjServ.state.notOnShelf') : + $t('housekeepingSjServ.state.onShelf') }} + + + + + + + + + + + + \ No newline at end of file diff --git a/src/views/mall/integralDetailLang.js b/src/views/mall/integralDetailLang.js new file mode 100644 index 0000000..bec2a2e --- /dev/null +++ b/src/views/mall/integralDetailLang.js @@ -0,0 +1,60 @@ +export const messages = { + en: { + integralDetail: { + all: 'All', + personal: 'Personal', + merchant: 'Merchant', + searchTitle: 'Search Conditions', + accountPlaceholder: 'Please enter account', + typePlaceholder: 'Please select type', + objectTypePlaceholder: 'Please select object type', + orderIdPlaceholder: 'Please enter order ID', + transferIn: 'Transfer In', + transferOut: 'Transfer Out', + user: 'User', + tableTitle: 'Points Transaction', + id: 'ID', + accountName: 'Account Name', + accountId: 'Account ID', + type: 'Type', + relatedAccount: 'Related Account', + points: 'Points', + objectType: 'Object Type', + objectId: 'Object ID', + phone: 'Phone', + orderId: 'Order ID', + transactionTime: 'Transaction Time', + remark: 'Remark', + fetchError: 'Failed to fetch points transaction data' + } + }, + zh: { + integralDetail: { + all: '全部', + personal: '个人', + merchant: '商户', + searchTitle: '查询条件', + accountPlaceholder: '请填写账户', + typePlaceholder: '请选择类型', + objectTypePlaceholder: '请选择对象类型', + orderIdPlaceholder: '请选择交易单号', + transferIn: '转入', + transferOut: '转出', + user: '用户', + tableTitle: '积分交易', + id: '编号', + accountName: '账户名称', + accountId: '账户编号', + type: '类型', + relatedAccount: '关联账户', + points: '积分数', + objectType: '对象类型', + objectId: '对象ID', + phone: '手机号', + orderId: '交易单号', + transactionTime: '交易时间', + remark: '备注', + fetchError: '获取积分交易数据失败' + } + } +} \ No newline at end of file diff --git a/src/views/mall/integralDetailList.vue b/src/views/mall/integralDetailList.vue new file mode 100644 index 0000000..bd0f503 --- /dev/null +++ b/src/views/mall/integralDetailList.vue @@ -0,0 +1,209 @@ + + + + + + + + {{ $t('integralDetail.all') }} + + + {{ $t('integralDetail.personal') }} + + + {{ $t('integralDetail.merchant') }} + + + + + + + + {{ $t('integralDetail.searchTitle') }} + + + + + + + + + + + + + + + + + + + + + + + + + + {{ $t('common.search') }} + + + + + + + + {{ $t('integralDetail.tableTitle') }} + + + + + + + + {{ scope.row.detailType === '2002' ? $t('integralDetail.transferOut') : $t('integralDetail.transferIn') }} + + + + + + + {{ scope.row.objType === '7007' ? $t('integralDetail.merchant') : $t('integralDetail.user') }} + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/views/mall/productSjLang.js b/src/views/mall/productSjLang.js new file mode 100644 index 0000000..04f287e --- /dev/null +++ b/src/views/mall/productSjLang.js @@ -0,0 +1,52 @@ +export const messages = { + en: { + productSj: { + search: { + title: 'Search Conditions', + prodName: 'Please enter product name' + }, + list: { + title: 'Shelved Products', + today: 'Today', + all: 'All Shelved' + }, + table: { + productId: 'Product ID', + coverPhoto: 'Product Image', + categoryName: 'Product Category', + prodName: 'Product Name', + sales: 'Sales', + stock: 'Stock', + price: 'Price', + sort: 'Sort', + state: 'Status' + }, + fetchError: 'Failed to fetch product list' + } + }, + zh: { + productSj: { + search: { + title: '查询条件', + prodName: '请输入商品名称' + }, + list: { + title: '上架商品', + today: '今日上架', + all: '所有上架' + }, + table: { + productId: '商品ID', + coverPhoto: '商品图片', + categoryName: '商品分组', + prodName: '商品名称', + sales: '销量', + stock: '库存', + price: '价格', + sort: '排序', + state: '状态' + }, + fetchError: '获取商品列表失败' + } + } +} \ No newline at end of file diff --git a/src/views/mall/productSjList.vue b/src/views/mall/productSjList.vue new file mode 100644 index 0000000..d746945 --- /dev/null +++ b/src/views/mall/productSjList.vue @@ -0,0 +1,171 @@ + + + + + + {{ $t('productSj.search.title') }} + + + + + + + + {{ $t('common.search') }} + + + + + + + + + {{ $t('productSj.list.title') }} + + + + {{ $t('productSj.list.today') }} + + + {{ $t('productSj.list.all') }} + + + + + + + + + + + + + + + + + + {{ scope.row.defaultSpecValue.price }} + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/views/mall/storeOrderCartManageLang.js b/src/views/mall/storeOrderCartManageLang.js new file mode 100644 index 0000000..d0fb8fc --- /dev/null +++ b/src/views/mall/storeOrderCartManageLang.js @@ -0,0 +1,80 @@ +export const messages = { + en: { + storeOrderCartManage: { + search: { + title: 'Search Conditions', + cartId: 'Order Number', + state: 'Select Status', + prodName: 'Enter Product Name', + shop: 'Select Shop' + }, + list: { + title: 'Order Information' + }, + table: { + cartId: 'Order Number', + appName: 'Platform', + shopName: 'Shop', + cartType: 'Type', + service: 'Service', + goods: 'Goods', + prodName: 'Name', + cartNum: 'Quantity', + personName: 'User Name', + payPrice: 'Payment Amount', + stateName: 'Order Status', + createTime: 'Creation Time' + }, + state: { + unpurchased: 'Unpurchased', + waitingDelivery: 'Waiting Delivery', + waitingReceive: 'Waiting Receive', + waitingComment: 'Waiting Comment', + applyRefund: 'Apply Refund', + refundSuccess: 'Refund Success', + refunded: 'Refunded' + }, + fetchError: 'Failed to fetch order list', + fetchShopsError: 'Failed to fetch shops' + } + }, + zh: { + storeOrderCartManage: { + search: { + title: '查询条件', + cartId: '订单编号', + state: '请选择状态', + prodName: '请输入商品名称', + shop: '请选择商铺' + }, + list: { + title: '订单信息' + }, + table: { + cartId: '订单号', + appName: '平台', + shopName: '商铺', + cartType: '类型', + service: '服务', + goods: '商品', + prodName: '名称', + cartNum: '数量', + personName: '用户名称', + payPrice: '支付金额', + stateName: '订单状态', + createTime: '创建时间' + }, + state: { + unpurchased: '未购买', + waitingDelivery: '待发货', + waitingReceive: '待收货', + waitingComment: '待评价', + applyRefund: '申请退款', + refundSuccess: '退货成功', + refunded: '已退款' + }, + fetchError: '获取订单列表失败', + fetchShopsError: '获取商铺列表失败' + } + } +} \ No newline at end of file diff --git a/src/views/mall/storeOrderCartManageList.vue b/src/views/mall/storeOrderCartManageList.vue new file mode 100644 index 0000000..fabcaaf --- /dev/null +++ b/src/views/mall/storeOrderCartManageList.vue @@ -0,0 +1,169 @@ + + + + + + {{ $t('storeOrderCartManage.search.title') }} + + + + + + + + + + + + + + + + + + + + + {{ $t('common.search') }} + + + + + + + + + {{ $t('storeOrderCartManage.list.title') }} + + + + + + + + {{ scope.row.cartType === '3307' ? $t('storeOrderCartManage.table.service') : + $t('storeOrderCartManage.table.goods') }} + + + + + {{ scope.row.prodName }} + ({{ scope.row.specValue }}) + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/views/mall/storeOrderCartReturnLang.js b/src/views/mall/storeOrderCartReturnLang.js new file mode 100644 index 0000000..aaa0923 --- /dev/null +++ b/src/views/mall/storeOrderCartReturnLang.js @@ -0,0 +1,62 @@ +export const messages = { + en: { + storeOrderCartReturn: { + search: { + title: 'Search Conditions', + cartId: 'Order Number', + state: 'Please select status', + prodName: 'Please enter product name' + }, + list: { + title: 'Return Orders' + }, + table: { + cartId: 'Order Number', + prodName: 'Product Name', + specValue: 'Product Specification', + personName: 'User Name', + returnPayPrice: 'Refund Amount', + stateName: 'Order Status', + returnReason: 'Refund Reason', + createTime: 'Application Time' + }, + state: { + all: 'All Status', + applyRefund: 'Apply for Refund', + returnSuccess: 'Return Success', + refunded: 'Refunded' + }, + fetchError: 'Failed to fetch return orders' + } + }, + zh: { + storeOrderCartReturn: { + search: { + title: '查询条件', + cartId: '订单编号', + state: '请选择状态', + prodName: '请输入商品名称' + }, + list: { + title: '退货订单' + }, + table: { + cartId: '订单号', + prodName: '商品名称', + specValue: '商品规格', + personName: '用户名称', + returnPayPrice: '退款金额', + stateName: '订单状态', + returnReason: '退款原因', + createTime: '申请时间' + }, + state: { + all: '全部状态', + applyRefund: '申请退款', + returnSuccess: '退货成功', + refunded: '已退款' + }, + fetchError: '获取退货订单失败' + } + } +} \ No newline at end of file diff --git a/src/views/mall/storeOrderCartReturnList.vue b/src/views/mall/storeOrderCartReturnList.vue new file mode 100644 index 0000000..dff5d58 --- /dev/null +++ b/src/views/mall/storeOrderCartReturnList.vue @@ -0,0 +1,146 @@ + + + + + + {{ $t('storeOrderCartReturn.search.title') }} + + + + + + + + + + + + + + + + {{ $t('common.search') }} + + + + + + + + + {{ $t('storeOrderCartReturn.list.title') }} + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/views/mall/userIntegralLang.js b/src/views/mall/userIntegralLang.js new file mode 100644 index 0000000..5fea13a --- /dev/null +++ b/src/views/mall/userIntegralLang.js @@ -0,0 +1,60 @@ +export const messages = { + en: { + userIntegral: { + search: { + title: 'Search Conditions', + integralName: 'Account Name', + integralNamePlaceholder: 'Please enter account name' + }, + list: { + title: 'User Points' + }, + table: { + id: 'ID', + name: 'Account Name', + type: 'Object Type', + userId: 'User ID', + phone: 'Phone', + amount: 'Points' + }, + type: { + personal: 'Personal', + merchant: 'Merchant' + }, + fetchError: 'Failed to fetch points data' + }, + common: { + search: 'Search', + manage: 'Manage' + } + }, + zh: { + userIntegral: { + search: { + title: '查询条件', + integralName: '账户名称', + integralNamePlaceholder: '请输入账户名称' + }, + list: { + title: '用户积分' + }, + table: { + id: '编号', + name: '账户名称', + type: '对象类型', + userId: '用户编号', + phone: '手机号', + amount: '积分数' + }, + type: { + personal: '个人', + merchant: '商户' + }, + fetchError: '获取积分数据失败' + }, + common: { + search: '查询', + manage: '管理' + } + } +} \ No newline at end of file diff --git a/src/views/mall/userIntegralList.vue b/src/views/mall/userIntegralList.vue new file mode 100644 index 0000000..00398dd --- /dev/null +++ b/src/views/mall/userIntegralList.vue @@ -0,0 +1,175 @@ + + + + + + + + + {{ $t(`userIntegral.type.${type.label}`) }} + + + + + + + + + {{ $t('userIntegral.search.title') }} + + + + + + + + {{ $t('common.search') }} + + + + + + + + {{ $t('userIntegral.list.title') }} + + {{ $t('common.manage') }} + + + + + + + + {{ scope.row.objType === '7007' ? $t('userIntegral.type.merchant') : $t('userIntegral.type.personal') }} + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/views/user/userLoginLang.js b/src/views/user/userLoginLang.js new file mode 100644 index 0000000..bc4f3f6 --- /dev/null +++ b/src/views/user/userLoginLang.js @@ -0,0 +1,48 @@ +export const messages = { + en: { + userLogin: { + search: { + title: 'Search Conditions', + name: 'Please enter staff name', + tel: 'Please enter phone number', + startTime: 'Login start time', + endTime: 'Login end time' + }, + table: { + title: 'Login Logs', + loginId: 'Login ID', + parentOrgName: 'Company', + orgName: 'Department', + userName: 'Name', + loginTime: 'Login Time', + userId: 'Staff ID' + }, + allStores: 'All', + fetchError: 'Failed to fetch login logs', + storeFetchError: 'Failed to fetch store list' + } + }, + zh: { + userLogin: { + search: { + title: '查询条件', + name: '请输入员工名称', + tel: '请输入手机号', + startTime: '登录开始时间', + endTime: '登录结束时间' + }, + table: { + title: '登录日志', + loginId: '登录ID', + parentOrgName: '公司', + orgName: '部门', + userName: '名称', + loginTime: '登录时间', + userId: '员工ID' + }, + allStores: '全部', + fetchError: '获取登录日志失败', + storeFetchError: '获取门店列表失败' + } + } +} \ No newline at end of file diff --git a/src/views/user/userLoginList.vue b/src/views/user/userLoginList.vue new file mode 100644 index 0000000..5dfc5b7 --- /dev/null +++ b/src/views/user/userLoginList.vue @@ -0,0 +1,240 @@ + + + + + + + + + {{item.name}}({{item.storeTypeName}}) + + + + + + + + + {{ $t('userLogin.search.title') }} + + + + + + + + + + + + + + + + + + + {{ $t('common.search') }} + + + + + + + + {{ $t('userLogin.table.title') }} + + + + + + {{ scope.row.parentOrgName || '-' }} + + + + + + + + + + + + + + + + + + + \ No newline at end of file
{{ $t('deleteProduct.confirm') }}