已选择地点路线:{{ 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/screen/src/views/WarningManagement/law/dutyManagement/addDialog.vue b/packages/screen/src/views/WarningManagement/law/dutyManagement/addDialog.vue
index 5d9bb1c..bc0da20 100644
--- a/packages/screen/src/views/WarningManagement/law/dutyManagement/addDialog.vue
+++ b/packages/screen/src/views/WarningManagement/law/dutyManagement/addDialog.vue
@@ -1,7 +1,7 @@
+ style="max-height: 60vh; overflow-y: hidden; padding-right: 50px" :rules="rules">
@@ -11,24 +11,45 @@
children: 'children',
label: 'orgName'
}" node-key="orgId" :expand-on-click-node="false" :default-expand-all="false" highlight-current
- style="height: 400px; overflow-y: auto;"
- @node-click="handleNodeClick">
-
+ style="height: 100%; overflow-y: auto;" @node-click="handleNodeClick">
+
- {{ node.label }}
+ {{ _node.label }}
-
-
+
+
-
+
用户列表
+
+
+ {{ user.realName || user.nickName || user.account }}
+ {{ user.positionName }}
+
+
-
-
+
+
-
+
已选择用户 ({{ selectedUsers.length }})
+
+
+
+ {{ user.realName || user.nickName || user.account }}
+ {{ user.positionName }}
+
+
+
+
+
+
+
@@ -38,13 +59,31 @@
+
+
\ 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
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' },