已选择地点路线:{{ tempSelectedItem?.routeCode }}
diff --git a/packages/screen/src/views/DisasterManagement/components/YHZSelect.vue b/packages/screen/src/views/DisasterManagement/components/YHZSelect.vue
new file mode 100644
index 0000000..b74bc6c
--- /dev/null
+++ b/packages/screen/src/views/DisasterManagement/components/YHZSelect.vue
@@ -0,0 +1,253 @@
+
+
+
+
+
+
+
+
+
+
+
已选择养护站:{{ tempSelectedItem?.mc }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/shared/composables/useOptions.js b/packages/shared/composables/useOptions.js
index d50d0bc..a1a3c09 100644
--- a/packages/shared/composables/useOptions.js
+++ b/packages/shared/composables/useOptions.js
@@ -48,6 +48,12 @@ export function useOptions() {
{ label: '限制通行', value: '限制通行' }
]
+ // 冰灾 处理措施
+ options.value['iceDisposalMeasures'] = [
+ { label: '封闭交通', value: '封闭交通' },
+ { label: '限速通行', value: '限速通行' },
+ ]
+
// 路线类型
options.value['roadType'] = [
{ label: '国道', value: 'G' },
From 1a4041cb492cab4308ece8ad92c63be3b6bca73e Mon Sep 17 00:00:00 2001
From: huangchenhao <123673748@qq.com>
Date: Fri, 17 Apr 2026 14:37:53 +0800
Subject: [PATCH 5/5] =?UTF-8?q?feat:=20=E6=B6=88=E6=81=AF=E6=8E=A8?=
=?UTF-8?q?=E9=80=81=E8=AE=BE=E7=BD=AE=E9=A1=B5=E9=9D=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
packages/screen/src/router/index.js | 11 +
.../src/views/WarningManagement/law/index.js | 7 +
.../src/views/WarningManagement/law/index.vue | 1 +
.../law/messageManagement/addDialog.vue | 267 ++++++++++++++++++
.../law/messageManagement/index.js | 224 +++++++++++++++
.../law/messageManagement/index.vue | 121 ++++++++
6 files changed, 631 insertions(+)
create mode 100644 packages/screen/src/views/WarningManagement/law/messageManagement/addDialog.vue
create mode 100644 packages/screen/src/views/WarningManagement/law/messageManagement/index.js
create mode 100644 packages/screen/src/views/WarningManagement/law/messageManagement/index.vue
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 @@
+
+
+
+
+
+
+
+
+
+
暂无人员
+
+
+ {{ person.realName }}
+
+ {{ person.userPhone }}
+
+
删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file