From 98306b8a9aa7a5cc4631100c897118436877a23d Mon Sep 17 00:00:00 2001 From: Ryanwrl <2457055764@qq.com> Date: Sat, 23 Oct 2021 16:02:55 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/orders.js | 24 ++++ src/config/router.config.js | 15 +++ src/locales/lang/zh-CN/menu.js | 2 + src/mock/index.js | 1 + src/mock/services/orders.js | 33 ++++++ .../orderManagement/orderList/OrderList.vue | 112 ++++++++++++++++++ 6 files changed, 187 insertions(+) create mode 100644 src/api/orders.js create mode 100644 src/mock/services/orders.js create mode 100644 src/views/orderManagement/orderList/OrderList.vue diff --git a/src/api/orders.js b/src/api/orders.js new file mode 100644 index 0000000..de88844 --- /dev/null +++ b/src/api/orders.js @@ -0,0 +1,24 @@ +import request from '@/utils/request' +import { isNumber } from '@/utils/util' + +const api = { + orderList: '/cms/order', + orderDone: '/cms/orderDone' +} + +export function getOrderList (parameter) { + if (parameter.search) { + const apiSuffix = isNumber(parameter.search) + ? 'isbn' + : 'title' + return request({ + url: api.orderList + `/${apiSuffix}/${parameter.search}/pageNum/${parameter.pageNo ? parameter.pageNo : 1}/pageSize/${parameter.pageSize ? parameter.pageSize : 20}`, + method: 'get' + }) + } else { + return request({ + url: api.orderList + `/info/pageNum/${parameter.pageNo ? parameter.pageNo : 1}/pageSize/${parameter.pageSize ? parameter.pageSize : 20}`, + method: 'get' + }) + } +} diff --git a/src/config/router.config.js b/src/config/router.config.js index bbd880a..7edb12a 100644 --- a/src/config/router.config.js +++ b/src/config/router.config.js @@ -29,6 +29,21 @@ export const asyncRouterMap = [ meta: { title: 'menu.bookManagement.bookList', keepAlive: false, permission: ['dashboard'] } } ] + }, + { + path: '/orderManagement', + name: 'OrderManagement', + component: RouteView, + redirect: '/orderManagement/orderList', + meta: { title: 'menu.orderManagement', keepAlive: true, icon: bxAnaalyse, permission: ['dashboard'] }, + children: [ + { + path: '/orderManagement/orderList', + name: 'OrderList', + component: () => import('@/views/orderManagement/orderList/OrderList'), + meta: { title: 'menu.orderManagement.orderList', keepAlive: false, permission: ['dashboard'] } + } + ] } ] // children: [ diff --git a/src/locales/lang/zh-CN/menu.js b/src/locales/lang/zh-CN/menu.js index 658f355..e3a574d 100644 --- a/src/locales/lang/zh-CN/menu.js +++ b/src/locales/lang/zh-CN/menu.js @@ -3,6 +3,8 @@ export default { 'menu.home': '主页', 'menu.bookManagement': '书本管理', 'menu.bookManagement.bookList': '书本列表', + 'menu.orderManagement': '订单管理', + 'menu.orderManagement.orderList': '订单列表', 'menu.dashboard': '仪表盘', 'menu.dashboard.analysis': '分析页', 'menu.dashboard.monitor': '监控页', diff --git a/src/mock/index.js b/src/mock/index.js index a0ee230..b38c80a 100644 --- a/src/mock/index.js +++ b/src/mock/index.js @@ -16,6 +16,7 @@ if (isMock()) { require('./services/tagCloud') require('./services/article') require('./services/books') + require('./services/orders') Mock.setup({ timeout: 800 // setter delay time diff --git a/src/mock/services/orders.js b/src/mock/services/orders.js new file mode 100644 index 0000000..b2ef716 --- /dev/null +++ b/src/mock/services/orders.js @@ -0,0 +1,33 @@ +import Mock from 'mockjs2' +import { builder } from '../util' + +const totalCount = 5701 + +const ordersList = (options) => { + const arr = options.url.split('/') + const result = [] + const pageNum = Number(arr[arr.indexOf('pageNum') + 1]) + const pageSize = Number(arr[arr.indexOf('pageSize') + 1]) + const totalPage = Math.ceil(totalCount / pageSize) + const next = (pageNum >= totalPage ? (totalCount % pageSize) : pageSize) + 1 + for (let i = 1; i < next; i++) { + result.push({ + isbn: Mock.mock(/^978\d{10}/), + title: Mock.mock('@ctitle'), + user: Mock.mock('@cname'), + price: Mock.mock('@float(1,1000,2,2)'), + createTime: Mock.mock("@date('yyyy-MM-dd')"), + status: Mock.mock(/[0-2]/) + }) + } + + return builder({ + pageSize: pageSize, + pageNum: pageNum, + total: totalCount, + pages: totalPage, + list: result + }) +} + +Mock.mock(/.+\/cms\/order\/.+/, 'get', ordersList) diff --git a/src/views/orderManagement/orderList/OrderList.vue b/src/views/orderManagement/orderList/OrderList.vue new file mode 100644 index 0000000..397a931 --- /dev/null +++ b/src/views/orderManagement/orderList/OrderList.vue @@ -0,0 +1,112 @@ + + + -- Gitee From ab05c151413cebd2f6b51241f816004d330353ba Mon Sep 17 00:00:00 2001 From: yaoshiliang Date: Mon, 25 Oct 2021 21:05:17 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9=E5=88=97?= =?UTF-8?q?=E5=92=8Cmock=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/router.config.js | 5 +- src/mock/services/orders.js | 23 +++- .../orderManagement/orderList/OrderList.vue | 123 ++++++++++++------ 3 files changed, 101 insertions(+), 50 deletions(-) diff --git a/src/config/router.config.js b/src/config/router.config.js index 7edb12a..e4d9e1f 100644 --- a/src/config/router.config.js +++ b/src/config/router.config.js @@ -1,6 +1,5 @@ // eslint-disable-next-line import { UserLayout, BasicLayout, BlankLayout } from '@/layouts' -import { bxAnaalyse } from '@/core/icons' const RouteView = { name: 'RouteView', @@ -20,7 +19,7 @@ export const asyncRouterMap = [ name: 'BookManagement', component: RouteView, redirect: '/bookManagement/bookList', - meta: { title: 'menu.bookManagement', keepAlive: true, icon: bxAnaalyse, permission: ['dashboard'] }, + meta: { title: 'menu.bookManagement', keepAlive: true, icon: 'book', permission: ['dashboard'] }, children: [ { path: '/bookManagement/bookList', @@ -35,7 +34,7 @@ export const asyncRouterMap = [ name: 'OrderManagement', component: RouteView, redirect: '/orderManagement/orderList', - meta: { title: 'menu.orderManagement', keepAlive: true, icon: bxAnaalyse, permission: ['dashboard'] }, + meta: { title: 'menu.orderManagement', keepAlive: true, icon: '', permission: ['dashboard'] }, children: [ { path: '/orderManagement/orderList', diff --git a/src/mock/services/orders.js b/src/mock/services/orders.js index b2ef716..5833f0a 100644 --- a/src/mock/services/orders.js +++ b/src/mock/services/orders.js @@ -1,7 +1,7 @@ import Mock from 'mockjs2' import { builder } from '../util' -const totalCount = 5701 +const totalCount = 100 const ordersList = (options) => { const arr = options.url.split('/') @@ -12,11 +12,22 @@ const ordersList = (options) => { const next = (pageNum >= totalPage ? (totalCount % pageSize) : pageSize) + 1 for (let i = 1; i < next; i++) { result.push({ - isbn: Mock.mock(/^978\d{10}/), - title: Mock.mock('@ctitle'), - user: Mock.mock('@cname'), - price: Mock.mock('@float(1,1000,2,2)'), - createTime: Mock.mock("@date('yyyy-MM-dd')"), + orderId: Mock.mock('@id()'), + money: Mock.mock('@float(1,100,2,2)'), + user: { + avatar: '', + nickname: Mock.mock('@cname'), + openId: Mock.mock('@id') + }, + books: Mock.mock({ + 'array|1-5': [ + { + isbn: Mock.mock(/^978\d{10}/), + num: Mock.mock('@integer(1,10)') + } + ] + }), + createTime: Mock.mock('@datetime()'), status: Mock.mock(/[0-2]/) }) } diff --git a/src/views/orderManagement/orderList/OrderList.vue b/src/views/orderManagement/orderList/OrderList.vue index 397a931..192bb1d 100644 --- a/src/views/orderManagement/orderList/OrderList.vue +++ b/src/views/orderManagement/orderList/OrderList.vue @@ -9,16 +9,32 @@ showPagination="auto" bordered :pageSize="20" - rowKey="isbn" + rowKey="orderId" > - - {{getOrderStatus(status)}} - + + + - - 完成订单 - 退款 - + + ¥{{ money }} + + + + 查看详情 + + + 修改状态 + + + {{ menu }} + + + + @@ -28,48 +44,70 @@ import { STable } from '@/components' import { getOrderList } from '@/api/orders' + const statusMap = { + 0: { + status: 'processing', + text: '未完成', + dropDownIcon: { + type: 'clock-circle', + color: '#1890ff' + } + }, + 1: { + status: 'success', + text: '已完成', + dropDownIcon: { + type: 'check-circle', + color: '#52c41a' + } + }, + 2: { + status: 'error', + text: '退款', + dropDownIcon: { + type: 'close-circle', + color: '#f5222d' + } + } + } + const columns = [ { - title: 'ISBN', - dataIndex: 'isbn', - scopedSlots: { customRender: 'isbn' }, - align: 'center', - width: '9rem' - }, - { - title: '下单书籍', - dataIndex: 'title', - scopedSlots: { customRender: 'title' }, - align: 'center', - width: '5rem' + title: '订单号', + dataIndex: 'orderId', + scopedSlots: { customRender: 'orderId' }, + align: 'center' }, { - title: '代理商', - dataIndex: 'user', + title: '用户名', + dataIndex: 'user.nickname', scopedSlots: { customRender: 'user' }, - align: 'center', - width: '5rem' + align: 'center' }, { title: '下单时间', dataIndex: 'createTime', scopedSlots: { customRender: 'createTime' }, - align: 'center', - width: '5rem' + align: 'center' + }, + { + title: '交易金额', + dataIndex: 'money', + scopedSlots: { customRender: 'money' }, + align: 'center' }, { title: '订单状态', dataIndex: 'status', scopedSlots: { customRender: 'status' }, - align: 'center', - width: '10%' + align: 'center' }, { title: '操作', dataIndex: 'action', scopedSlots: { customRender: 'action' }, align: 'center', - width: '6rem' + width: '12rem' } ] @@ -78,6 +116,20 @@ components: { STable }, + filters: { + statusTextFilter (type) { + return statusMap[type].text + }, + statusTypeFilter (type) { + return statusMap[type].status + }, + statusIconFilter (type) { + return statusMap[type].dropDownIcon.type + }, + statusIconColorFilter (type) { + return statusMap[type].dropDownIcon.color + } + }, data () { this.columns = columns return { @@ -86,7 +138,6 @@ total: null, loadData: (parameter) => { const requestParameters = Object.assign({}, parameter, this.queryParam) - console.log('loadData request parameters:', requestParameters) return getOrderList(requestParameters).then(res => { this.total = res.data.total return res.data @@ -95,17 +146,7 @@ } }, methods: { - getOrderStatus (status) { - if (status === '0') { - return '未完成' - } - if (status === '1') { - return '已完成' - } - if (status === '2') { - return '退款' - } - } + } } -- Gitee