From 596ab4a404b99128a06fceb69c5ebc9dde50a61a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=90=91=E6=96=87=E5=8F=AF?= <1041367524@qq.com>
Date: Mon, 11 Apr 2022 14:17:54 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E5=95=86=E5=93=81=E5=88=86=E7=B1=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/api/file.js | 34 +++++-
src/api/sales/category.js | 36 +++++++
src/components/ElUploadImage.vue | 31 +++---
src/components/extra/ElSwitch.vue | 12 +++
src/router/modules/sales.js | 31 ++++++
src/store/modules/sales/category.js | 100 ++++++++++++++++++
src/views/sales/category/form.vue | 117 ++++++++++++++++++++
src/views/sales/category/index.vue | 158 ++++++++++++++++++++++++++++
8 files changed, 497 insertions(+), 22 deletions(-)
create mode 100644 src/api/sales/category.js
create mode 100644 src/components/extra/ElSwitch.vue
create mode 100644 src/store/modules/sales/category.js
create mode 100644 src/views/sales/category/form.vue
create mode 100644 src/views/sales/category/index.vue
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 @@
+
+
+
+
+
+
+