diff --git a/src/api/permission/feature.js b/src/api/permission/feature.js index 1da6d93..21bca43 100644 --- a/src/api/permission/feature.js +++ b/src/api/permission/feature.js @@ -6,6 +6,19 @@ export const search = (params) => { params, }); }; +export const searchFree = () => { + return request({ + url: '/uc/permission/NotDistribution', + method: 'get', + }); +}; +export const assign = (params) => { + return request({ + url: '/uc/permission/menu', + method: 'put', + params, + }); +}; export const create = (data) => { return request({ url: '/uc/permission', diff --git a/src/components/extra/ElTable.vue b/src/components/extra/ElTable.vue index 9040e83..f9d2890 100644 --- a/src/components/extra/ElTable.vue +++ b/src/components/extra/ElTable.vue @@ -226,8 +226,21 @@ console.error('可拖拽表格ID不存在'); } }; - // 元素实例化后初始化sortablejs - onMounted(handleInit); + if (props.sortable) { + // 元素实例化后初始化sortablejs + onMounted(handleInit); + } else { + watch( + () => props.sortable, + (value, old) => { + if (!old && value) { + handleInit(); + } else if (old && !value) { + sortable.value.destroy(); + } + } + ); + } // 代理原生函数 const handleProxy = (fnName, args) => { return unref(refsTable)[fnName]?.apply(unref(refsTable), args); diff --git a/src/store/modules/operation/advertise/advertise.js b/src/store/modules/operation/advertise/advertise.js index 7b9294b..b90dc3f 100644 --- a/src/store/modules/operation/advertise/advertise.js +++ b/src/store/modules/operation/advertise/advertise.js @@ -165,6 +165,15 @@ const actions = { ElMessage.error((data.isEnable ? '启用' : '禁用') + '失败'); } }, + sort: async ({ dispatch }, data) => { + let res = await api.sort(data); + if (res) { + ElMessage.success('排序成功'); + dispatch('search'); + } else { + ElMessage.error('排序失败'); + } + }, }; export default { state, diff --git a/src/store/modules/permission/menu/feature.js b/src/store/modules/permission/menu/feature.js index 35829c8..8f7f286 100644 --- a/src/store/modules/permission/menu/feature.js +++ b/src/store/modules/permission/menu/feature.js @@ -7,6 +7,16 @@ const state = () => ({ total: 0, opts: { init: false, + type: [ + { + label: '需要分配', + value: 1, + }, + { + label: '登录即有', + value: 2, + }, + ], }, }); const getters = {}; @@ -38,6 +48,13 @@ const actions = { } return res; }, + assign: async (context, data) => { + let res = await api.assign(data); + if (!res) { + ElMessage.error('分配失败'); + } + return res; + }, save: async ({ dispatch }, data) => { if (!data.parentId) { data.parentId = 0; diff --git a/src/store/modules/permission/menu/menu.js b/src/store/modules/permission/menu/menu.js index fb9aa22..50d68e5 100644 --- a/src/store/modules/permission/menu/menu.js +++ b/src/store/modules/permission/menu/menu.js @@ -1,3 +1,4 @@ +import * as featureAPI from '@/api/permission/feature.js'; import * as api from '@/api/permission/menu.js'; import * as systemAPI from '@/api/permission/system.js'; import { ElMessage, ElMessageBox } from '@/plugins/element-plus'; @@ -9,6 +10,7 @@ const state = () => ({ opts: { init: false, system: [], + free: [], type: [ { label: '目录', @@ -64,6 +66,7 @@ const actions = { ...state.opts, init: true, system: await systemAPI.search(), + free: await featureAPI.searchFree(), }); }, detail: async (context, id) => { diff --git a/src/views/operation/advertise/index.vue b/src/views/operation/advertise/index.vue index e588dc4..a81bd03 100644 --- a/src/views/operation/advertise/index.vue +++ b/src/views/operation/advertise/index.vue @@ -7,22 +7,31 @@ :data="list" :operation="['create', 'search', 'remove']" :reset="handleReset" + :sortable="!!(state.condition.platform && state.condition.location)" title="广告" :total="total" @create="handleCreate" @remove="handleRemove" + @row-sort="handleSort" @search="handleSearch" > +