zhouwx
2025-05-19 457f9c817adef8b003ee6379f493798bae5cbb69
src/views/Admin/notice.vue
@@ -55,6 +55,14 @@
               <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"
@@ -70,8 +78,8 @@
                  </a-form-model-item>
               </a-col>
            </a-row>
            <span><b>发布单位:</b>{{form.publishingUnit}}</span>
            <br /><br />
<!--            <span><b>发布单位:</b>{{form.publishingUnit}}</span>-->
<!--            <br /><br />-->
            <!-- 子单位-->
            <a-row :gutter="24">
               <a-col :span="12">
@@ -102,12 +110,24 @@
                     </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-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>
@@ -122,7 +142,7 @@
                  </a-form-model-item>
               </a-col>
               <a-col :span="12" style="text-align: right">
                  <a-button type="primary" style="width: 250px;" @click="confirmSend()"
                  <a-button type="primary" style="width: 250px;" @click="confirmSend()" v-preventReClick="2000"
                     :disabled="userInfo.role.id==1?true:false">
                     确认并提交审核
                  </a-button>
@@ -133,7 +153,7 @@
            <h2>短信预览</h2>
            <div class="mobile">
               <div class="mesg">
                  <P>【自然灾害风险预警提示】{{form.content}}<br>发布单位:{{form.publishingUnit}}</P>
                  <P>【新疆自然灾害预警中心】{{form.content}}</P>
               </div>
            </div>
         </div>
@@ -158,10 +178,28 @@
   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: "notice",
      data() {
      let validateContent = (rule, value, callback)=>{
        if(value === ''){
          callback(new Error('请输入信息内容'))
        }else{
          if(!verifySimpleContent(value)){
            callback(new Error('内容不可包含中文中括号【】'))
          }else{
            callback()
          }
        }
      }
         return {
        value: [],
        SHOW_PARENT,
        treeData,
            userInfo: {},
            unittype: null,
            wrapperCol: {
@@ -175,6 +213,7 @@
               disasterType: undefined,
               warningLevel: undefined,
               content: '',
          directViewUrl: '',
               publishingUnit: '',
               districtId: null,
               attachments: [],
@@ -202,15 +241,11 @@
                  value: 1
               },
               {
                  name: '洪涝',
                  value: 2
               },
               {
                  name: '气象',
                  value: 3
               },
               {
                  name: '泥石流',
                  name: '地质灾害',
                  value: 4
               },
               {
@@ -261,9 +296,9 @@
                  trigger: 'blur'
               }],
               content: [{
                  required: true,
                  message: '请输入信息内容',
                  trigger: 'blur'
            required: true,
            validator: validateContent,
            trigger: 'blur'
               }],
               timeout: [{
                  required: true,
@@ -296,6 +331,9 @@
      components: {},
      created() {
         const t = this
      t.treeData = []
      t.getAreaUsers()
      t.areaUsers = JSON.parse(localStorage.getItem('areaUsers'))
         const {
            baseUrl
         } = require('../../../config/env.' + process.env.NODE_ENV)
@@ -305,7 +343,6 @@
         t.form.districtId = t.userInfo.districtId
         t.form.publishingUnit = t.userInfo.company
         t.getSameLevel()
         t.getAreaUsers()
         t.getLeaders()
      },
      computed: {},
@@ -316,7 +353,23 @@
            let res = await getPeerRecipient()
            if (res.data.code == 100) {
               if (res.data.data) {
                  t.filteredOptions = 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)
            }
               } else {
                  console.log('暂无数据')
               }
@@ -324,18 +377,19 @@
               this.$message.warning(res.data.msg);
            }
         },
      getPj(){
        this.treeData = []
        this.getSameLevel()
      },
         // 获取接收单位
         async getAreaUsers() {
            let t = this
            let res = await getAreaWithUserIfo()
            if (res.data.code == 100) {
               if (res.data.data) {
                  // const treeD = []
                  t.userTitTree(res.data.data)
                  // treeD.push(t.findNodeById(res.data.data,t.userInfo.districtId))
                  const treeD = t.findNodeById(res.data.data, t.userInfo.districtId)
                  t.areaUsers = treeD.children
                  // t.areaUsers = treeD.children
                  t.unittype = treeD.type
               } else {
                  console.log('暂无数据')
@@ -380,18 +434,25 @@
         //选择平级部门部分
         handle(selectedItems) {
            const t = this
            if (t.form.recipient.length == t.filteredOptions.length) {
               t.checkSlAll = true
            } else {
               t.checkSlAll = false
            }
            // 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
        }
         },
         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.filteredOptions.map(i => i.id)
          t.form.recipient = t.treeData.map(item => item.value)
            } else {
               t.form.recipient = []
            }
@@ -474,7 +535,6 @@
               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)) {
@@ -484,48 +544,45 @@
                  const newAList = [].concat(...aList)
                  for (let i of newAList) {
                     // const {realName,...data} = i
                     const {
                        id: recipienterId,
                        name: recipienterName,
                        phone: recipienterPhone,
                        company: receiveUnit,
                        realName: recipienterRealName,
                        ...rest
                     } = i
                     const obj = {
                        recipienterId,
                        recipienterName,
                        recipienterRealName,
                        recipienterPhone,
                        receiveUnit,
                        ...rest
                     }
                     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)
                     }
                     // 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,
@@ -678,4 +735,4 @@
      }
   }
</style>
</style>