diff --git a/src/router/modules/sales.js b/src/router/modules/sales.js index 6712a57..6e04a1b 100644 --- a/src/router/modules/sales.js +++ b/src/router/modules/sales.js @@ -71,6 +71,37 @@ export default [ }, ], }, + { + path: 'product', + name: 'ProductManagement', + component: () => import('@/views/sales/product/index.vue'), + meta: { + title: '商品管理', + icon: 'barcode-box-fill', + }, + children: [ + { + path: 'create', + name: 'CreateProduct', + component: () => import('@/views/sales/product/form/index.vue'), + meta: { + title: '创建商品', + icon: 'barcode-box-fill', + hidden: true, + }, + }, + { + path: 'update/:id/:step?', + name: 'UpdateProduct', + component: () => import('@/views/sales/product/form/index.vue'), + meta: { + title: '编辑商品', + icon: 'barcode-box-fill', + hidden: true, + }, + }, + ], + }, ], }, ]; diff --git a/src/store/modules/sales/product.js b/src/store/modules/sales/product.js new file mode 100644 index 0000000..57d109e --- /dev/null +++ b/src/store/modules/sales/product.js @@ -0,0 +1,130 @@ +import * as api from '@/api/sales/category.js'; +import { ElMessage, ElMessageBox } from '@/plugins/element-plus'; +const state = () => ({ + code: 'ProductManagement', + condition: { + orderIs: [], + }, + list: [], + total: 0, + summary: [], + opts: { + init: false, + category: [], + tag: [ + { + label: '爆款', + value: 1, + }, + { + label: '推荐', + value: 2, + }, + { + label: '特价', + value: 3, + }, + ], + limit: [ + { + label: '不限购', + value: 0, + }, + { + label: '单人单次限购', + value: 1, + }, + ], + postage: [ + { + label: '全国包邮,偏远地区除外(青海、西藏、新疆地区)', + value: 0, + }, + ], + }, +}); +const getters = {}; +const mutations = { + setCode: (state, data) => (state.code = data), + setCondition: (state, data) => (state.condition = data), + setList: (state, data) => (state.list = data), + setTotal: (state, data) => (state.total = data), + setSummary: (state, data) => (state.summary = data), + setOpts: (state, data) => (state.opts = data), +}; +const actions = { + search: async ({ state, commit }) => { + let data = { ...state.condition }; + data.productStatus = (data.productStatus || []).join(','); + if (data.productStatus === '0') { + delete data.productStatus; + } + let res = await api.search(data); + commit('setList', res); + if (!res) { + ElMessage.error('查询商品列表失败'); + } + return res; + }, + load: async ({ state, commit }) => { + commit('setOpts', { + ...state.opts, + init: true, + category: await api.search(), + }); + }, + detail: async ({ state, dispatch }, id) => { + if (!state.list.length) { + await dispatch('search'); + } + let res = state.list.find((item) => item.id === id); + if (!res) { + ElMessage.error('加载详情失败'); + } + return res; + }, + save: async ({ dispatch }, data) => { + let save = data.id ? api.update : api.create; + let res = await save(data); + if (res) { + ElMessage.success('保存成功'); + dispatch('search'); + } else { + ElMessage.error('保存失败'); + } + return res; + }, + sort: async (context, data) => { + let res = await api.sort(data); + if (res) { + ElMessage.success(`移动前序号:${data.oldSort + 1};移动后序号:${data.currentSort + 1}`); + } else { + ElMessage.error('保存排序失败'); + } + return res; + }, + remove: async ({ dispatch }, ids) => { + if (!ids.length) { + ElMessage.warning('请选择要删除的数据'); + } else { + try { + await ElMessageBox.confirm('数据删除后无法恢复,确定要删除吗?', '危险操作'); + let res = await api.remove({ id: ids.join(',') }); + if (res) { + ElMessage.success('删除成功'); + dispatch('search'); + } else { + ElMessage.error('删除失败'); + } + } catch (e) { + console.info('取消删除', e); + } + } + }, +}; +export default { + state, + getters, + mutations, + actions, +}; diff --git a/src/store/modules/sales/productPicker.js b/src/store/modules/sales/productPicker.js index bd2b9ed..4e10d31 100644 --- a/src/store/modules/sales/productPicker.js +++ b/src/store/modules/sales/productPicker.js @@ -1,5 +1,5 @@ import * as api from '@/api/sales/category.js'; -import { ElMessage, ElMessageBox } from '@/plugins/element-plus'; +import { ElMessage } from '@/plugins/element-plus'; const state = () => ({ code: 'ProductPicker', condition: { @@ -27,7 +27,7 @@ const actions = { let res = await api.search(state.condition); commit('setList', res); if (!res) { - ElMessage.error('查询商品分类列表失败'); + ElMessage.error('查询商品列表失败'); } return res; }, @@ -38,54 +38,6 @@ const actions = { category: await api.search(), }); }, - detail: async ({ state, dispatch }, id) => { - if (!state.list.length) { - await dispatch('search'); - } - let res = state.list.find((item) => item.id === id); - if (!res) { - ElMessage.error('加载详情失败'); - } - return res; - }, - save: async ({ dispatch }, data) => { - let save = data.id ? api.update : api.create; - let res = await save(data); - if (res) { - ElMessage.success('保存成功'); - dispatch('search'); - } else { - ElMessage.error('保存失败'); - } - return res; - }, - sort: async (context, data) => { - let res = await api.sort(data); - if (res) { - ElMessage.success(`移动前序号:${data.oldSort + 1};移动后序号:${data.currentSort + 1}`); - } else { - ElMessage.error('保存排序失败'); - } - return res; - }, - remove: async ({ dispatch }, ids) => { - if (!ids.length) { - ElMessage.warning('请选择要删除的数据'); - } else { - try { - await ElMessageBox.confirm('数据删除后无法恢复,确定要删除吗?', '危险操作'); - let res = await api.remove({ id: ids.join(',') }); - if (res) { - ElMessage.success('删除成功'); - dispatch('search'); - } else { - ElMessage.error('删除失败'); - } - } catch (e) { - console.info('取消删除', e); - } - } - }, }; export default { state, diff --git a/src/views/sales/product/form/index.vue b/src/views/sales/product/form/index.vue new file mode 100644 index 0000000..9bb02b0 --- /dev/null +++ b/src/views/sales/product/form/index.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/src/views/sales/product/form/step1.vue b/src/views/sales/product/form/step1.vue new file mode 100644 index 0000000..73d05c7 --- /dev/null +++ b/src/views/sales/product/form/step1.vue @@ -0,0 +1,125 @@ + + + + + diff --git a/src/views/sales/product/form/step2.vue b/src/views/sales/product/form/step2.vue new file mode 100644 index 0000000..2cd400b --- /dev/null +++ b/src/views/sales/product/form/step2.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/src/views/sales/product/index.vue b/src/views/sales/product/index.vue new file mode 100644 index 0000000..6e5f89b --- /dev/null +++ b/src/views/sales/product/index.vue @@ -0,0 +1,295 @@ + + + + +