From 457f9c817adef8b003ee6379f493798bae5cbb69 Mon Sep 17 00:00:00 2001
From: zhouwx <1175765986@qq.com>
Date: 星期一, 19 五月 2025 09:31:19 +0800
Subject: [PATCH] 修改

---
 src/views/Admin/notice.vue |  810 +++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 667 insertions(+), 143 deletions(-)

diff --git a/src/views/Admin/notice.vue b/src/views/Admin/notice.vue
index 2c46405..597bb82 100644
--- a/src/views/Admin/notice.vue
+++ b/src/views/Admin/notice.vue
@@ -1,172 +1,696 @@
 <template>
 	<div class="inner">
+		<a-alert message="管理员身份无法进行信息编辑操作" banner closable v-if="userInfo.role.id === 1" type="error"
+			style="margin-bottom: 12px" />
 		<h2>预警信息发布</h2>
-		<div class="left">
-			<a-input placeholder="请输入标题" style="height: 50px; font-size: 20px;" />
-			<br /><br />
-			<a-radio-group v-model="value" @change="onChange">
-				<a-radio :value="1">
-					蓝色
-				</a-radio>
-				<a-radio :value="2">
-					黄色
-				</a-radio>
-				<a-radio :value="3">
-					橙色
-				</a-radio>
-				<a-radio :value="4">
-					红色
-				</a-radio>
-			</a-radio-group>
-			<br /><br />
-			<a-radio-group default-value="a" button-style="solid">
-				<a-radio-button value="a">
-					常规
-				</a-radio-button>
-				<a-radio-button value="b">
-					紧临
-				</a-radio-button>
-			</a-radio-group>
-			<div class="ftright">
-				平级接收人选择:
-				<a-select mode="multiple" placeholder="选择平级接收单位" :value="selectedItems" style="width: 180px"
-					@change="handle">
-					<a-select-option v-for="item in filteredOptions" :key="item" :value="item">
-						{{ item }}
-					</a-select-option>
-				</a-select>
-				
+		<a-form-model ref="ruleForm" :model="form" :rules="rules" :wrapper-col="wrapperCol">
+			<div class="left">
+				<a-form-model-item prop="title">
+					<a-input v-model="form.title" placeholder="请输入标题" style="height: 50px; font-size: 20px;" />
+				</a-form-model-item>
+				<!--      <a-row>-->
+				<!--        <a-col :span="12" style="display: flex;align-items: center">-->
+				<!--          <span style="display: block;margin-bottom: 24px">相关灾种</span>-->
+
+				<!--        </a-col>-->
+				<!--        <a-col :span="12" style="display: flex;align-items: center;justify-content: right">-->
+				<!--          <span style="display: block;margin-bottom: 24px">预警级别:</span>-->
+
+				<!--        </a-col>-->
+				<!--      </a-row>-->
+
+				<a-row>
+					<a-col :span="12">
+						<a-form-model-item prop="emergType">
+							<a-radio-group v-model="form.emergType" button-style="solid">
+								<a-radio-button :value="2">
+									常规
+								</a-radio-button>
+								<a-radio-button :value="1">
+									紧临
+								</a-radio-button>
+							</a-radio-group>
+						</a-form-model-item>
+					</a-col>
+					<a-col :span="12" style="display: flex;align-items: center;justify-content: right">
+						<a-form-model-item prop="disasterType" style="margin-right: 20px">
+							<a-select placeholder="请选择相关灾种" v-model="form.disasterType" style="width: 240px" allowClear
+								@change="handleRisk">
+								<a-select-option v-for="item in riskOptions" :key="item.value" :value="item.value">
+									{{ item.name }}
+								</a-select-option>
+							</a-select>
+						</a-form-model-item>
+						<a-form-model-item prop="warningLevel">
+							<a-select placeholder="请选择预警级别" v-model="form.warningLevel" style="width: 240px" allowClear
+								@change="handleLevel">
+								<a-select-option v-for="item in levelOptions" :key="item.value" :value="item.value">
+									{{ item.name }}
+								</a-select-option>
+							</a-select>
+						</a-form-model-item>
+					</a-col>
+				</a-row>
+				<a-form-model-item prop="content">
+					<a-textarea v-model="form.content" placeholder="请输入短信通知内容部分"
+						:auto-size="{ minRows: 3, maxRows: 5 }" />
+				</a-form-model-item>
+        <a-row v-if="userInfo.unittype == 1">
+          <a-col :span="24" style="display: flex;align-items: center">
+            <b style="margin-bottom: 24px">直览附件URL:</b>
+            <a-form-model-item prop="directViewUrl" style="width: 50%">
+              <a-textarea v-model="form.directViewUrl" placeholder="请输入url信息" :auto-size="{ minRows: 1, maxRows: 3 }"/>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+				<a-row>
+					<a-col :span="12">
+						<a-upload :action="uploadUrl" :file-list="fileList" @change="fileChange" :headers="header"
+							accept=".doc, .docx, .word, .pdf, .zip, .xlsx, .rar, .jpg, .jpeg, .png"
+							:data="{module: 'naturalDisasterPath'}" :remove="(file)=>{removeFile(file)}">
+							<a-button> <a-icon type="upload" />上传附件</a-button>
+						</a-upload>
+					</a-col>
+					<a-col :span="12" style="display: flex;align-items: center;justify-content: right">
+						<b style="margin-bottom: 24px">超时设置:</b>
+						<a-form-model-item prop="timeout">
+							<a-input v-model="form.timeout" style="width:200px;" placeholder="输入时间" suffix="分钟" />
+						</a-form-model-item>
+					</a-col>
+				</a-row>
+<!--				<span><b>发布单位:</b>{{form.publishingUnit}}</span>-->
+<!--				<br /><br />-->
+				<!-- 子单位-->
+				<a-row :gutter="24">
+					<a-col :span="12">
+						<div style="display:flex;justify-content: space-between;align-items: center;">
+							<b>选择接收单位:</b>
+							<a-checkbox :checked="checkAll" @change="checkChange">
+								全选
+							</a-checkbox>
+						</div>
+						<a-form-model-item prop="receiver" style="margin-bottom: 6px">
+							<a-tree-select show-search :maxTagCount="3" tree-checkable treeCheckStrictly
+								style="width: 100%" v-model="form.receiver"
+								:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" placeholder="选择工作通知接收单位"
+								allow-clear multiple @change="depChanges" @search="onSearch" @select="onSelect"
+								:tree-data="areaUsers" :replaceFields="replaceFields">
+							</a-tree-select>
+						</a-form-model-item>
+						<!-- 这个不要了,领导自动看到本单位发出去的信息,在app端体现。 -->
+						<!--            <a-checkbox :checked="withLeaders" @change="isAddLeaders" style="margin-bottom: 24px">
+              同时发信息给本级领导
+            </a-checkbox> -->
+					</a-col>
+					<a-col :span="12">
+						<div style="display:flex;justify-content: space-between;align-items: center;">
+							<b>平级接收人选择:</b>
+							<a-checkbox :checked="checkSlAll" @change="checkSlChange">
+								全选
+							</a-checkbox>
+						</div>
+						<a-form-model-item prop="recipient">
+<!--							<a-select mode="multiple" placeholder="选择平级接收单位" v-model="form.recipient" @change="handle"-->
+<!--								:maxTagCount="3">-->
+<!--								<a-select-option v-for="item in filteredOptions" :key="item.id" :value="item.id">-->
+<!--									{{ item.recipientName }}({{item.company}} {{item.phone}})-->
+<!--								</a-select-option>-->
+<!--							</a-select>-->
+              <a-tree-select
+                  v-model="form.recipient"
+                  style="width: 100%"
+                  :maxTagCount="3"
+                  :tree-data="treeData"
+                  tree-checkable
+                  placeholder="选择平级接收单位"
+                  :show-checked-strategy="SHOW_PARENT"
+                  search-placeholder="Please select"
+                  @change="handle"
+                  @focus="getPj()"
+              />
+						</a-form-model-item>
+					</a-col>
+				</a-row>
+				<a-row :gutter="24" style="display: flex;align-items: center">
+					<a-col :span="12">
+						<b style="margin-bottom: 6px">选择审批领导:</b>
+						<a-form-model-item prop="reviewId">
+							<a-select show-search v-model="form.reviewId" placeholder="请选择审批领导" style="width: 300px">
+								<a-select-option v-for="(item,index) in leaders" :value="item.id"
+									:key="index">{{item.realName}}</a-select-option>
+							</a-select>
+						</a-form-model-item>
+					</a-col>
+					<a-col :span="12" style="text-align: right">
+						<a-button type="primary" style="width: 250px;" @click="confirmSend()" v-preventReClick="2000"
+							:disabled="userInfo.role.id==1?true:false">
+							确认并提交审核
+						</a-button>
+					</a-col>
+				</a-row>
 			</div>
-
-			<br /><br />
-			<a-textarea v-model="message" placeholder="请输入短信通知内容部分" :auto-size="{ minRows: 3, maxRows: 5 }" />
-			<br /><br />
-			<a-button>上传附件</a-button>  <div style="float: right;width:50%;text-align: right;">超时设置: <a-input style="width:100px;" placeholder="输入时间" /> 分钟</div>
-			<br /><br />
-			<span><b>发布单位:</b>{{department}}</span>
-			<br/><br/>
-			<!-- 子单位-->
-			<div style="margin-bottom: 10px">选择接收单位:</div>
-			<a-tree-select
-			    show-search
-          tree-checkable
-          treeCheckStrictly
-			    style="width: 100%"
-          v-model="svalue"
-			    :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
-			    placeholder="选择工作通知接收单位"
-			    allow-clear
-			    multiple
-			    tree-default-expand-all
-			    @change="onChanges"
-			    @search="onSearch"
-			    @select="onSelect"
-			  >
-        <a-tree-select-node key="0" value="all" title="全选">
-        </a-tree-select-node>
-			    <a-tree-select-node key="0-1" value="乌鲁木齐" title="乌鲁木齐(张XX 13268813610)">
-			      <a-tree-select-node key="0-1-1" value="米东区" title="米东区(张XX 13268813610)">
-			        <a-tree-select-node key="0-1-1-1" value="XX村1" title="XX村(李有田 13268813610)" />
-			      </a-tree-select-node>
-			      <a-tree-select-node key="0-1-2" value="天山区" title="天山区">
-			        <a-tree-select-node key="0-1-2-1" value="XX村2">
-			          <b slot="title" style="color: #08c">XX村</b>
-			        </a-tree-select-node>
-			      </a-tree-select-node>
-			    </a-tree-select-node>
-			  </a-tree-select>
-			  
-			  <br/><br/>
-			<div style="float: right;"><b>选择审批领导:</b> <a-select show-search placeholder="请选择审批领导"
-					option-filter-prop="children" style="width: 200px" :filter-option="filterOption"
-					@focus="handleFocus" @blur="handleBlur" @change="handleChange">
-					<a-select-option value="jack">
-						裴小威
-					</a-select-option>
-					<a-select-option value="lucy">
-						赵东升
-					</a-select-option>
-					<a-select-option value="tom">
-						王卫萍
-					</a-select-option>
-				</a-select></div>
-			<br /><br />
-			<a-button type="primary" class="ftright">
-				确认并提交审核
-			</a-button>
-		</div>
-
-		<div class="right">
-			<h2>短信预览</h2>
-			<div class="mobile">
-				<div class="mesg">
-					<P>【{{signname}}】{{message}}。发布单位:{{department}}</P>
+			<div class="right">
+				<h2>短信预览</h2>
+				<div class="mobile">
+					<div class="mesg">
+						<P>【新疆自然灾害预警中心】{{form.content}}</P>
+					</div>
 				</div>
-
 			</div>
-		</div>
-
+		</a-form-model>
 	</div>
 </template>
 
 <script>
-
-	
-	const OPTIONS = ['自治区消防(李XX)', '自治区公安厅(王XX)', '自治区自然资源厅(刘XX)'];
+	import {
+		getAreaWithUserIfo,
+		getPeerRecipient,
+		getLeaders
+	} from '@/api/user'
+	import {
+		getUserInfo
+	} from "@/util/storage";
+	import Cookies from "js-cookie";
+	import {
+		massSend,
+		msgSend
+	} from "@/api/send";
+	import {
+		deleteFile
+	} from "@/api/list";
+  import { TreeSelect } from 'ant-design-vue';
+  import {verifySimpleContent} from "@/util/validate";
+  const SHOW_PARENT = TreeSelect.SHOW_PARENT;
+  const treeData = [];
 	export default {
-		name: "release",
+		name: "notice",
 		data() {
+      let validateContent = (rule, value, callback)=>{
+        if(value === ''){
+          callback(new Error('请输入信息内容'))
+        }else{
+          if(!verifySimpleContent(value)){
+            callback(new Error('内容不可包含中文中括号【】'))
+          }else{
+            callback()
+          }
+        }
+      }
 			return {
-				value: 1,
-				message: '',
-				signname: '自然灾害风险预警提示',
-				department: '自治区自然灾害综合监测预警中心',
-				selectedItems: [],
-				svalue:undefined,
+        value: [],
+        SHOW_PARENT,
+        treeData,
+				userInfo: {},
+				unittype: null,
+				wrapperCol: {
+					span: 24
+				},
+				filteredOptions: [],
+				form: {
+					id: null,
+					title: '',
+					emergType: null,
+					disasterType: undefined,
+					warningLevel: undefined,
+					content: '',
+          directViewUrl: '',
+					publishingUnit: '',
+					districtId: null,
+					attachments: [],
+					timeout: null,
+					reviewId: null,
+					receiver: [],
+					recipient: [],
+					acceptingUnitIds: [],
+					peerRecipientIds: []
+				},
+				sendLeaders: [],
+				leaders: [],
+				checkAll: false,
+				checkSlAll: false,
+				withLeaders: false,
+				areaUsers: [],
+				replaceFields: {
+					children: 'children',
+					title: 'name',
+					key: 'id',
+					value: 'id'
+				},
+				riskOptions: [{
+						name: '地震',
+						value: 1
+					},
+					{
+						name: '气象',
+						value: 3
+					},
+					{
+						name: '地质灾害',
+						value: 4
+					},
+					{
+						name: '水旱',
+						value: 5
+					},
+					{
+						name: '森林草原火灾',
+						value: 6
+					}
+				],
+				levelOptions: [{
+						name: '红色预警',
+						value: 1
+					},
+					{
+						name: '橙色预警',
+						value: 2
+					},
+					{
+						name: '黄色预警',
+						value: 3
+					},
+					{
+						name: '蓝色预警',
+						value: 4
+					}
+				],
+				rules: {
+					emergType: [{
+						required: true,
+						message: '请选择紧急类型',
+						trigger: 'change'
+					}],
+					disasterType: [{
+						required: true,
+						message: '请选择灾种',
+						trigger: 'change'
+					}],
+					warningLevel: [{
+						required: true,
+						message: '请选择预警级别',
+						trigger: 'change'
+					}],
+					title: [{
+						required: true,
+						message: '请输入信息标题',
+						trigger: 'blur'
+					}],
+					content: [{
+            required: true,
+            validator: validateContent,
+            trigger: 'blur'
+					}],
+					timeout: [{
+						required: true,
+						message: '请输入超时时间',
+						trigger: 'blur'
+					}],
+					receiver: [{
+						required: true,
+						message: '请选择接收单位',
+						trigger: 'change'
+					}],
+					reviewId: [{
+						required: true,
+						message: '请选择审批人',
+						trigger: 'change'
+					}],
+					// recipient: [{ required: true, message: '请选择平级接收人', trigger: 'change'}]
+					// acceptingUnitIds: [{ required: true, message: '请选择接收单位', trigger: 'change'}],
+					// peerRecipientIds: [{ required: true, message: '请选择平级接收人', trigger: 'change'}]
+				},
+				uploadUrl: '',
+				fileList: [],
+				header: {
+					uid: null,
+					tk: Cookies.get('resTk')
+				},
+				delList: []
 			};
 		},
 		components: {},
-		computed: {
-			filteredOptions() {
-				return OPTIONS.filter(o => !this.selectedItems.includes(o));
-			},
+		created() {
+			const t = this
+      t.treeData = []
+      t.getAreaUsers()
+      t.areaUsers = JSON.parse(localStorage.getItem('areaUsers'))
+			const {
+				baseUrl
+			} = require('../../../config/env.' + process.env.NODE_ENV)
+			t.uploadUrl = baseUrl + '/attachment/upload/detail'
+			t.userInfo = getUserInfo()
+			t.header.uid = t.userInfo.uid
+			t.form.districtId = t.userInfo.districtId
+			t.form.publishingUnit = t.userInfo.company
+			t.getSameLevel()
+			t.getLeaders()
 		},
+		computed: {},
 		methods: {
-			//选择子部门部分
-			onChanges(value) {
-            if(value.find(i=>i.value == 'all')){
-              console.log('全选了')
-            }else{
-              this.svalue = value;
+			// 获取同级接收人
+			async getSameLevel() {
+				let t = this
+				let res = await getPeerRecipient()
+				if (res.data.code == 100) {
+					if (res.data.data) {
+						// t.filteredOptions = res.data.data
+
+            for (const resKey in res.data.data) {
+              t.filteredOptions = t.filteredOptions.concat(...res.data.data[resKey]);
+              const obj = {
+                  title: resKey,
+                  value: resKey,
+                  key: resKey,
+                  children: res.data.data[resKey].map(item => {
+                    item['title'] = item.recipientName + '(' +item.company +item.phone+ ')'
+                    item['value'] = item.id
+                    item['key'] = item.id
+                    return item
+                  })
+              }
+              t.treeData.push(obj)
             }
-            console.log(this.svalue);
-			    },
-      onSearch() {
-        console.log(...arguments);
+					} else {
+						console.log('暂无数据')
+					}
+				} else {
+					this.$message.warning(res.data.msg);
+				}
+			},
+      getPj(){
+        this.treeData = []
+        this.getSameLevel()
       },
-      onSelect() {
-        console.log(...arguments);
-      },
+			// 获取接收单位
+			async getAreaUsers() {
+				let t = this
+				let res = await getAreaWithUserIfo()
+				if (res.data.code == 100) {
+					if (res.data.data) {
+						t.userTitTree(res.data.data)
+						const treeD = t.findNodeById(res.data.data, t.userInfo.districtId)
+						// t.areaUsers = treeD.children
+						t.unittype = treeD.type
+					} else {
+						console.log('暂无数据')
+					}
+				} else {
+					this.$message.warning(res.data.msg);
+				}
+			},
+
+			// 获取领导
+			async getLeaders() {
+				let t = this
+				let res = await getLeaders()
+				if (res.data.code == 100) {
+					if (res.data.data) {
+						t.leaders = res.data.data
+					} else {
+						console.log('暂无数据')
+					}
+				} else {
+					this.$message.warning(res.data.msg);
+				}
+			},
+
+			//选择子部门部分
+			depChanges(value, label, extra) {
+				const t = this
+				if (t.form.receiver.length == 0) {
+					t.checkAll = false
+				}
+			},
+			checkChange(e) {
+				const t = this
+				t.checkAll = !t.checkAll
+				if (t.checkAll == true) {
+					t.form.receiver = t.traverseTree(t.areaUsers)
+				} else {
+					t.form.receiver = []
+				}
+			},
+
 			//选择平级部门部分
 			handle(selectedItems) {
-				this.selectedItems = selectedItems;
+				const t = this
+				// if (t.form.recipient.length == t.filteredOptions.length) {
+				// 	t.checkSlAll = true
+				// } else {
+				// 	t.checkSlAll = false
+				// }
+        const group = t.treeData.map(item => item.value)
+        if (group.length === t.form.recipient.length && group.every((v,i) => v === t.form.recipient[i])) {
+          t.checkSlAll = true
+        } else {
+          t.checkSlAll = false
+        }
 			},
-			onChange(){
-				console.log(this.value)
+
+			checkSlChange(e) {
+				const t = this
+				t.checkSlAll = !t.checkSlAll
+				if (t.checkSlAll == true) {
+					// t.form.recipient = t.filteredOptions.map(i => i.id)
+          t.form.recipient = t.treeData.map(item => item.value)
+				} else {
+					t.form.recipient = []
+				}
 			},
-			handleChange(value) {
-				console.log(`selected ${value}`);
+
+			isAddLeaders(e) {
+				const t = this
+				t.withLeaders = !t.withLeaders
+				t.sendLeaders = []
+				if (e.target.checked) {
+					for (let i of t.leaders) {
+						const {
+							realName,
+							...data
+						} = i
+						const {
+							id: recipienterId,
+							name: recipienterName,
+							phone: recipienterPhone,
+							...rest
+						} = data
+						const obj = {
+							recipienterId,
+							recipienterName,
+							recipienterPhone,
+							province: null,
+							city: null,
+							area: null,
+							town: null,
+							receiveUnit: t.userInfo.company,
+							unittype: t.userInfo.unittype,
+							roleId: 2,
+							...rest
+						}
+						t.sendLeaders.push(obj)
+					}
+				}
 			},
-			handleBlur() {
-				console.log('blur');
+
+			fileChange(info) {
+				let fileList = [...info.fileList];
+				fileList = fileList.map(file => {
+					if (file.uid === info.file.uid) {
+						if (file.status == 'done') {
+							if (file.response) {
+								const res = file.response
+								if (res.code == 100) {
+									this.$message.success('文件上传成功')
+								} else {
+									this.$message.error('文件上传失败')
+								}
+								// Component will show file.url as link
+								file.url = res.data.fileUrl
+							}
+						}
+					}
+					return file
+				});
+				this.fileList = fileList;
 			},
-			handleFocus() {
-				console.log('focus');
+
+			removeFile(file) {
+				this.delList.push(file.response.data.id)
 			},
-			filterOption(input, option) {
-				return (
-					option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
-				);
+
+			async deleteFile() {
+				const t = this
+				for (let i of t.delList) {
+					const res = await deleteFile(i)
+					if (res.data.code == 100) {
+						console.log('文件删除成功')
+					} else {
+						t.$message.error(res.data.msg)
+					}
+				}
+			},
+
+			confirmSend() {
+				this.$refs.ruleForm.validate(valid => {
+					if (valid) {
+						this.form.acceptingUnitIds = []
+						this.form.peerRecipientIds = []
+						const aList = this.form.receiver.map(item => this.findNodeById(this.areaUsers, item.value)
+							?.users)
+						if (aList.includes(null)) {
+							this.$message.error('选择接收单位时存在无用户的单位')
+							return
+						}
+						const newAList = [].concat(...aList)
+						for (let i of newAList) {
+							// const {realName,...data} = i
+							const {id: recipienterId, name: recipienterName, phone: recipienterPhone, company: receiveUnit, realName: recipienterRealName, registrationId: registrationId, ...rest} = i
+							const obj = {recipienterId, recipienterName, recipienterRealName, recipienterPhone, receiveUnit, registrationId, ...rest}
+							this.form.acceptingUnitIds.push(obj)
+						}
+						this.form.acceptingUnitIds = [...this.form.acceptingUnitIds, ...this.sendLeaders]
+
+
+						if (this.form.recipient.length > 0) {
+							// const bList = this.form.recipient.map(item => this.filteredOptions.find(i => i.id == item))
+							// for (let i of bList) {
+							// 	const {id: recipienterId, recipientName: recipienterName, phone: recipienterPhone, company: receiveUnit, ...rest} = i
+							// 	const obj = {recipienterId, recipienterName, recipienterPhone, receiveUnit, unittype: this.unittype, recipienterRealName: recipienterName, ...rest}
+							// 	this.form.peerRecipientIds.push(obj)
+							// }
+
+              let bList = []
+              for(let i of this.form.recipient){
+                for(let j of this.treeData){
+                  if(j.value  == i){
+                    bList = bList.concat(j.children)
+                  }else{
+                    if(j.children && j.children.length>0){
+                      for(let k of j.children){
+                        if(k.id == i){
+                          bList.push(k)
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+              for (let i of bList) {
+                const {id: recipienterId, recipientName: recipienterName, phone: recipienterPhone, company: receiveUnit, id,province,city,area,town,...rest} = i
+                const obj = {recipienterId, recipienterName, recipienterPhone, receiveUnit, unittype: this.unittype, recipienterRealName: recipienterName, id,province,city,area,town}
+                this.form.peerRecipientIds.push(obj)
+              }
+
+						}
+
+						this.form.attachments = this.fileList.map(i => i.response.data.id)
+						const {
+							receiver,
+							recipient,
+							id,
+							...data
+						} = this.form
+						msgSend(data).then(res => {
+							if (res.data.code == 100) {
+								this.deleteFile()
+								this.$message.success('信息已提交审核')
+							} else {
+								this.$message.error(res.data.msg)
+							}
+							this.fileList = []
+							this.delList = []
+							this.withLeaders = false
+							this.$refs.ruleForm.clearValidate()
+							this.$refs.ruleForm.resetFields()
+						})
+					} else {
+						console.log('error submit!!');
+						return false;
+					}
+				})
+			},
+
+
+			// 根据id查对象
+			findNodeById(data, value) {
+				for (const node of data) {
+					if (node.id === value) {
+						return node;
+					}
+					if (node.children) {
+						const foundNode = this.findNodeById(node.children, value);
+						if (foundNode) {
+							return foundNode;
+						}
+					}
+				}
+				return null;
+			},
+
+			// 将树状数据所有id和name放入对象数组
+			traverseTree(treeData) {
+				let result = [];
+
+				function traverse(data) {
+					for (const node of data) {
+						if (node.users && node.users.length > 0) {
+							result.push({
+								label: node.name,
+								value: node.id
+							});
+							if (node.children && node.children.length > 0) {
+								traverse(node.children);
+							}
+						}
+					}
+				}
+				traverse(treeData);
+				return result;
+			},
+
+			// 将树状数据name字段放入users的姓名电话
+			userTitTree(treeData) {
+				for (const node of treeData) {
+					if (node.users) {
+						node.users = node.users.filter(i => i.roleId == 3)
+						node.users = node.users.map((i) => {
+							return {
+								...i,
+								unittype: node.type,
+								districtId: node.id
+							}
+						})
+						node.name = node.name + '(' + node.users.map(i => i.realName + ' ' + i.phone).join(',') + ')'
+					}
+					if (node.children) {
+						this.userTitTree(node.children)
+					}
+				}
+				return treeData
+			},
+			// 将users为null的节点删除
+			// removeNodesWithoutUsers(node) {
+			//     if (node.users === null && node.children === null) {
+			//       return null; // 返回 null 表示删除节点
+			//     }
+			//     if (node.children && node.children.length > 0) {
+			//       node.children = node.children.map(child => this.removeNodesWithoutUsers(child)).filter(Boolean);
+			//     }
+			//     return node;
+			// },
+
+			onSearch() {
+				console.log(...arguments);
+			},
+			onSelect() {
+				console.log(...arguments);
+			},
+
+			handleRisk(selectedItems) {
+				// this.selectedItems = selectedItems;
+			},
+			handleLevel(selectedItems) {
+				// this.selectedItems = selectedItems;
 			},
 		},
 	}
@@ -211,4 +735,4 @@
 		}
 
 	}
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.9.2