diff --git a/packages/screen/src/router/index.js b/packages/screen/src/router/index.js index 13d592b..5992040 100644 --- a/packages/screen/src/router/index.js +++ b/packages/screen/src/router/index.js @@ -190,6 +190,17 @@ const routes = [ parentRoute: 'warningManagement3' } }, + { + path: '/messageManagement', + name: 'messageManagement', + component: () => import('../views/WarningManagement/law/messageManagement/index.vue'), + meta: { + title: '消息推送设置', + breadcrumb: true, + parentRoute: 'warningManagement3' + } + }, + // 项目管理 - 区县 { diff --git a/packages/screen/src/views/WarningManagement/law/index.js b/packages/screen/src/views/WarningManagement/law/index.js index 2f731a6..5453d4b 100644 --- a/packages/screen/src/views/WarningManagement/law/index.js +++ b/packages/screen/src/views/WarningManagement/law/index.js @@ -372,6 +372,12 @@ export default () => { path: '/dutyManagement' }); }; + // 跳转到消息推送设置 + const gotoMessagePage = () => { + router.push({ + path: '/messageManagement' + }); + } onMounted(() => { getTableData(); @@ -396,6 +402,7 @@ export default () => { columns, gotoLedgerPage, gotoDutyPage, + gotoMessagePage, modelVisible, model, diff --git a/packages/screen/src/views/WarningManagement/law/index.vue b/packages/screen/src/views/WarningManagement/law/index.vue index 5bb49f2..1677d54 100644 --- a/packages/screen/src/views/WarningManagement/law/index.vue +++ b/packages/screen/src/views/WarningManagement/law/index.vue @@ -17,6 +17,7 @@ 线下帮扶台账 立即排班 值班管理 + 消息推送设置 导出 diff --git a/packages/screen/src/views/WarningManagement/law/messageManagement/addDialog.vue b/packages/screen/src/views/WarningManagement/law/messageManagement/addDialog.vue new file mode 100644 index 0000000..bac4316 --- /dev/null +++ b/packages/screen/src/views/WarningManagement/law/messageManagement/addDialog.vue @@ -0,0 +1,267 @@ + + + + + + + + + 用户列表 + + + {{ user.realName || user.nickName || user.account }} + {{ user.positionName }} + + + + + + + 已选择用户 ({{ selectedUsers.length }}) + + + + {{ user.realName || user.nickName || user.account }} + {{ user.positionName }} + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/screen/src/views/WarningManagement/law/messageManagement/index.js b/packages/screen/src/views/WarningManagement/law/messageManagement/index.js new file mode 100644 index 0000000..bd41e74 --- /dev/null +++ b/packages/screen/src/views/WarningManagement/law/messageManagement/index.js @@ -0,0 +1,224 @@ +import { h, ref, onMounted, reactive, watch, toRaw, nextTick } from "vue"; +import { request } from "@/utils/request"; +import { useRoute, useRouter } from 'vue-router' +import AddDialog from "./addDialog.vue"; + +const modelVisible = ref(false); // 弹窗状态 +const drawerVisible = ref(false); // 抽屉状态 +// 弹窗内容 +const model = reactive({ + +}); +const form = reactive({ + +}); +const INIT_FORM = { + +}; +// 抽屉内容 +const drawer = reactive({ + title: '', + content: null, + props: {}, + onCancel: null, + onConfirm: null, + direction: 'rtl', + size: '50%' +}); +const dialogRef = ref(null); // 弹窗实例 +const drawerRef = ref(null); // 抽屉实例 + +// 消息推送组织列表(固定六个),增加personList存储该组织的人员数组 +const messageOrgList = ref([ + { title: '中心领导', orgName: '中心领导', personList: [] }, + { title: '法规处', orgName: '法规处', personList: [] }, + { title: '养护处', orgName: '养护处', personList: [] }, + { title: '农村公路处', orgName: '农村公路处', personList: [] }, + { title: '建设处', orgName: '建设处', personList: [] }, + { title: '市公路应急中心/管理段', orgName: '公路管理段', personList: [] }, +]) + +const messagePushPerson = ref([]) +const userOrgsList = ref([]) + +// 查询所有消息推送人员 +const getAllMessagePushPerson = async () => { + try { + const res = await request({ + url: '/snow-ops-platform/messagePushPerson/listAll', + method: 'GET', + }) + if (res.code === '00000') { + messagePushPerson.value = res.data + + // 按orgId分组填充人员数据到对应组织 + messageOrgList.value.forEach(org => { + org.personList = messagePushPerson.value.filter(person => person.orgId === org.orgId) + }); + + // console.log('@@@@@@', messageOrgList.value); + + } else { + throw new Error(res.message) + } + } catch (error) { + ElMessage.error('获取消息推送人员失败'); + console.error('获取消息推送人员失败:', error); + } +} + + +// 查询所有组织 +const getUserOrgs = async () => { + try { + const res = await request({ + url: '/snow-ops-platform/user/userOrgs', + method: 'GET', + }) + if (res.code === '00000') { + userOrgsList.value = res.data.data + + // 遍历后端返回的组织数据,与固定组织列表匹配并赋值orgId + messageOrgList.value.forEach(fixedOrg => { + const matchedOrg = userOrgsList.value.find(org => + org.orgName === fixedOrg.orgName + ); + if (matchedOrg) { + fixedOrg.orgId = matchedOrg.orgId; + } + }); + + // 在获取到orgId后,立即根据orgId填充对应的人员数据 + messageOrgList.value.forEach(org => { + org.personList = messagePushPerson.value.filter(person => person.orgId === org.orgId) + }); + + // console.log('@@@@',messageOrgList.value); + } else { + throw new Error(res.message) + } + } catch (error) { + ElMessage.error('获取组织失败'); + console.error('获取组织失败:', error); + } +} + +// 添加消息推送人 +const handelAdd = async (data) => { + try { + const loading = ElLoading.service({ + lock: true, + text: '操作中', + background: 'rgba(0, 0, 0, 0.7)', + }) + const res = await request({ + url: '/snow-ops-platform/messagePushPerson/add', + method: 'POST', + data: data + }) + loading.close(); + if (res.code === '00000') { + ElMessage.success('添加成功'); + modelVisible.value = false; + await getAllMessagePushPerson(); + } else { + throw new Error(res.message) + } + } catch (error) { + ElMessage.error('添加失败'); + console.error('添加失败:', error); + } +} + + +// 打开添加人员弹窗 +const openAddDialog = (orgId, orgName) => { + model.title = '添加人员'; + Object.assign(form, INIT_FORM); + model.props = { + orgId: orgId, + orgName: orgName, + form: form, + }; + model.content = AddDialog; + model.onCancel = () => { + modelVisible.value = false; + }; + model.onConfirm = async () => { + await dialogRef?.value?.dynamicComponentRef?.formRef.validate().then(async () => { + // console.log('@@@@@@form',form); + await handelAdd(form.data) + // await addSchedule(form) + // await publishWarning(form) + }) + .catch((err) => { + ElMessage.error('请处理表单中的错误项'); + }); + }; + model.width = "70%" + modelVisible.value = true; +} + +// 删除消息推送人 +const deletePushPerson = async (person) => { + try { + await ElMessageBox.confirm( + `确定要删除【${person.realName}】吗?`, + '删除确认', + { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + } + ) + const loading = ElLoading.service({ + lock: true, + text: '操作中', + background: 'rgba(0, 0, 0, 0.7)', + }) + const res = await request({ + url: '/snow-ops-platform/messagePushPerson/deleteByUserId', + method: 'POST', + data: { + userId: person.userId + } + }) + loading.close(); + if (res.code === '00000') { + ElMessage.success('删除成功'); + await getAllMessagePushPerson(); + } else { + throw new Error(res.message) + } + } catch (error) { + if (error !== 'cancel') { + ElMessage.error('删除失败'); + console.error('删除失败:', error); + } + } +} + +export default () => { + + const router = useRouter(); + + onMounted(async () => { + await getUserOrgs(); + await getAllMessagePushPerson(); + + }) + + return { + modelVisible, + model, + drawerVisible, + drawer, + dialogRef, + drawerRef, + openAddDialog, + deletePushPerson, + + messageOrgList, + + } +} \ No newline at end of file diff --git a/packages/screen/src/views/WarningManagement/law/messageManagement/index.vue b/packages/screen/src/views/WarningManagement/law/messageManagement/index.vue new file mode 100644 index 0000000..2920ca2 --- /dev/null +++ b/packages/screen/src/views/WarningManagement/law/messageManagement/index.vue @@ -0,0 +1,121 @@ + + + + + + + {{ org.title }} + 添加 + + + + + 暂无人员 + + + {{ person.realName }} + + {{ person.userPhone }} + + 删除 + + + + + + + + + + + + + + + + \ No newline at end of file