From cfb3675f991f0377868d27bd631d2bd917655c52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=91=E6=96=87=E5=8F=AF?= <1041367524@qq.com> Date: Wed, 25 May 2022 16:30:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=B9=BF=E5=91=8A=E9=9D=99=E6=80=81?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/operation/advertise/index.js | 28 +++ .../modules/operation/advertise/advertise.js | 134 +++++++++++ src/views/operation/advertise/form.vue | 215 ++++++++++++++++++ src/views/operation/advertise/index.vue | 194 ++++++++++++++++ src/views/permission/role/index.vue | 2 + vite.config.js | 4 +- 6 files changed, 575 insertions(+), 2 deletions(-) create mode 100644 src/api/operation/advertise/index.js create mode 100644 src/store/modules/operation/advertise/advertise.js create mode 100644 src/views/operation/advertise/form.vue create mode 100644 src/views/operation/advertise/index.vue diff --git a/src/api/operation/advertise/index.js b/src/api/operation/advertise/index.js new file mode 100644 index 0000000..39ba3e5 --- /dev/null +++ b/src/api/operation/advertise/index.js @@ -0,0 +1,28 @@ +import request from '@/utils/request.js'; +export const search = (params) => { + return request({ + url: '/mall/marketing/advertisement', + method: 'get', + params, + }); +}; +export const detail = (id) => { + return request({ + url: '/mall/marketing/advertisement/' + id, + method: 'get', + }); +}; +export const create = (data) => { + return request({ + url: '/mall/marketing/advertisement', + method: 'post', + data, + }); +}; +export const update = (data) => { + return request({ + url: '/mall/marketing/advertisement/' + data.id, + method: 'put', + data, + }); +}; diff --git a/src/store/modules/operation/advertise/advertise.js b/src/store/modules/operation/advertise/advertise.js new file mode 100644 index 0000000..4c9eab9 --- /dev/null +++ b/src/store/modules/operation/advertise/advertise.js @@ -0,0 +1,134 @@ +import * as api from '@/api/permission/employee.js'; +import * as categoryAPI from '@/api/sales/category.js'; +import { ElMessage, ElMessageBox } from '@/plugins/element-plus'; +const state = () => ({ + code: 'AdvertiseManagement', + condition: {}, + list: [], + total: 0, + opts: { + init: false, + location: [ + { + label: '首页轮播', + value: 1, + }, + { + label: '首页金刚区', + value: 2, + }, + { + label: '商品分类广告', + value: 3, + }, + ], + platform: [ + { + label: '移动端', + value: 1, + }, + { + label: 'PC端', + value: 2, + }, + ], + status: [ + { + label: '未启用', + value: 0, + }, + { + label: '已启用', + value: 1, + }, + ], + category: [], + }, +}); +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), + setOpts: (state, data) => (state.opts = data), +}; +const actions = { + search: async ({ state, commit, rootGetters }) => { + let res = await api.search({ ...rootGetters['local/page'](state.code), ...state.condition }); + if (res) { + commit('setList', res.records); + commit('setTotal', res.total); + } else { + ElMessage.error('查询失败'); + commit('setList', []); + } + return res; + }, + load: async ({ state, commit }) => { + commit('setOpts', { + ...state.opts, + init: true, + category: await categoryAPI.search(), + }); + }, + detail: async (context, id) => { + let res = await api.detail(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) { + if (!data.id) { + data.id = res; + } + res = await api.savePermission(data.id, { roleIds: data.roleIds }); + if (res) { + ElMessage.success('保存成功'); + dispatch('search'); + } else { + ElMessage.error('保存角色失败'); + } + } else { + ElMessage.error('保存失败'); + } + return res; + }, + remove: async ({ dispatch }, idList) => { + if (!idList.length) { + ElMessage.warning('请选择要删除的数据'); + } else { + try { + await ElMessageBox.confirm('数据删除后无法恢复,确定要删除吗?', '危险操作'); + let res = await api.remove(idList.join(',')); + if (res) { + ElMessage.success('删除成功'); + dispatch('search'); + } else { + ElMessage.error('删除失败'); + } + } catch (e) { + console.info('取消删除', e); + } + } + }, + enable: async ({ dispatch }, data) => { + let res = await api.update(data); + if (res) { + ElMessage.success((data.isEnable ? '启用' : '禁用') + '成功'); + dispatch('search'); + } else { + ElMessage.error((data.isEnable ? '启用' : '禁用') + '失败'); + } + }, +}; +export default { + state, + getters, + mutations, + actions, +}; diff --git a/src/views/operation/advertise/form.vue b/src/views/operation/advertise/form.vue new file mode 100644 index 0000000..ece3ce2 --- /dev/null +++ b/src/views/operation/advertise/form.vue @@ -0,0 +1,215 @@ + + + + + diff --git a/src/views/operation/advertise/index.vue b/src/views/operation/advertise/index.vue new file mode 100644 index 0000000..1c8f0bd --- /dev/null +++ b/src/views/operation/advertise/index.vue @@ -0,0 +1,194 @@ + + + + + diff --git a/src/views/permission/role/index.vue b/src/views/permission/role/index.vue index 009de3f..e868c6d 100644 --- a/src/views/permission/role/index.vue +++ b/src/views/permission/role/index.vue @@ -158,6 +158,8 @@