diff --git a/src/api/file.js b/src/api/file.js index 461be98..90eb003 100644 --- a/src/api/file.js +++ b/src/api/file.js @@ -1,9 +1,37 @@ import request from '@/utils/request'; - +// OSS签名 +export function sign(serviceName, configId) { + // return request({ + // url: '/oss/oss/generateOssSignature', + // method: 'POST', + // data: { + // serviceName, + // configId, + // }, + // }); + console.info(serviceName, configId); + return { + accessId: 'LTAI4GHRNb5Xn2w5NeHVbR4c', + policy: 'eyJleHBpcmF0aW9uIjoiMjAyMi0wNC0xNVQyMDowODoyNi4zMTlaIiwiY29uZGl0aW9ucyI6W1siY29udGVudC1sZW5ndGgtcmFuZ2UiLDAsMTA0ODU3NjAwMF0sWyJzdGFydHMtd2l0aCIsIiRrZXkiLCJ0ZXN0LyJdXX0=', + signature: 'okaB3sNp3vzyfM0S3ypudaUAZ+0=', + dir: 'test/', + host: 'https://msb-edu-dev.oss-cn-beijing.aliyuncs.com', + expire: '1650053306', + }; +} // 上传文件 -export function upload(data) { +export async function upload(serviceName, configId, file) { + let oss = await sign(serviceName, configId); + let data = new FormData(); + data.append('name', file.name); + data.append('key', `${oss.dir}${'${filename}'}`); + data.append('policy', oss.policy); + data.append('OSSAccessKeyId', oss.accessId); + data.append('Signature', oss.signature); + data.append('success_action_status', 200); + data.append('file', file); return request({ - url: '/ks-admin/local/upload/file', + url: oss.host, method: 'POST', data, }); diff --git a/src/api/sales/category.js b/src/api/sales/category.js new file mode 100644 index 0000000..73dd6f1 --- /dev/null +++ b/src/api/sales/category.js @@ -0,0 +1,36 @@ +import request from '@/utils/request.js'; +export const search = (params) => { + return request({ + url: '/mall/product/admin/productCategory', + method: 'get', + params, + }); +}; +export const create = (data) => { + return request({ + url: '/mall/product/admin/productCategory', + method: 'post', + data, + }); +}; +export const update = (data) => { + return request({ + url: '/mall/product/admin/productCategory', + method: 'put', + data, + }); +}; +export const remove = (params) => { + return request({ + url: '/mall/product/admin/productCategory', + method: 'delete', + params, + }); +}; +export const sort = (data) => { + return request({ + url: '/mall/product/admin/productCategory/updateSort', + method: 'post', + data, + }); +}; diff --git a/src/components/ElUploadImage.vue b/src/components/ElUploadImage.vue index 43c61fd..36de47f 100644 --- a/src/components/ElUploadImage.vue +++ b/src/components/ElUploadImage.vue @@ -2,9 +2,10 @@
+ diff --git a/src/router/modules/sales.js b/src/router/modules/sales.js index 097a462..6712a57 100644 --- a/src/router/modules/sales.js +++ b/src/router/modules/sales.js @@ -40,6 +40,37 @@ export default [ }, ], }, + { + path: 'category', + name: 'CategoryManagement', + component: () => import('@/views/sales/category/index.vue'), + meta: { + title: '商品分类', + icon: 'barcode-box-fill', + }, + children: [ + { + path: 'create', + name: 'CreateCategory', + component: () => import('@/views/sales/category/form.vue'), + meta: { + title: '创建分类', + icon: 'barcode-box-fill', + hidden: true, + }, + }, + { + path: 'update/:id', + name: 'UpdateCategory', + component: () => import('@/views/sales/category/form.vue'), + meta: { + title: '编辑分类', + icon: 'barcode-box-fill', + hidden: true, + }, + }, + ], + }, ], }, ]; diff --git a/src/store/modules/sales/category.js b/src/store/modules/sales/category.js new file mode 100644 index 0000000..b30faf8 --- /dev/null +++ b/src/store/modules/sales/category.js @@ -0,0 +1,100 @@ +import * as api from '@/api/sales/category.js'; +import { ElMessage, ElMessageBox } from '@/plugins/element-plus'; +const state = () => ({ + code: 'CategoryManagement', + condition: { + orderIs: [], + }, + list: [], + total: 0, + summary: [], + opts: { + init: false, + visible: [ + { label: '显示', value: true }, + { label: '隐藏', value: false }, + ], + }, +}); +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 res = await api.search(state.condition); + commit('setList', res); + if (!res) { + ElMessage.error('查询商品分类列表失败'); + } + return res; + }, + load: async ({ commit }) => { + commit('setOpts', { + init: true, + visible: [ + { label: '显示', value: true }, + { label: '隐藏', value: false }, + ], + }); + }, + 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({ ids: 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/views/sales/category/form.vue b/src/views/sales/category/form.vue new file mode 100644 index 0000000..4ca79ef --- /dev/null +++ b/src/views/sales/category/form.vue @@ -0,0 +1,117 @@ + + + + + diff --git a/src/views/sales/category/index.vue b/src/views/sales/category/index.vue new file mode 100644 index 0000000..0c2fb62 --- /dev/null +++ b/src/views/sales/category/index.vue @@ -0,0 +1,158 @@ + + + + +