From 0d0968ec2d1a39c21e15e447c4f2227f70d6a11b Mon Sep 17 00:00:00 2001
From: 张晓波 <bingbo1993@126.com>
Date: 星期一, 11 十二月 2023 10:38:37 +0800
Subject: [PATCH] Merge branch 'master' of http://111.30.93.211:10101/r/supipe

---
 web/src/views/GoodManage/components/MixingExpend.vue                                                                       |   19 +
 web/src/views/SecureManage/RiskGrad/components/TaskPunchcard.vue                                                           |   21 +
 web/src/views/GoodManage/MixingScreen.vue                                                                                  |   14 
 web/src/views/SecureManage/RiskGrad/components/PollingTask.vue                                                             |   13 +
 hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/concret/entity/dto/PieceDto.java                      |    3 
 web/src/assets/mixing/container_90.png                                                                                     |    0 
 hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/concret/service/impl/TMaterialReleaseServiceImpl.java |    2 
 web/src/views/MixingInfo/mixing.vue                                                                                        |    2 
 web/src/assets/mixing/container_40.png                                                                                     |    0 
 web/src/assets/mixing/container_60.png                                                                                     |    0 
 web/src/views/SecureManage/BroadcastSystem.vue                                                                             |  351 +++++++++++++++++++++++++++++
 web/src/assets/mixing/container_10.png                                                                                     |    0 
 web/src/assets/mixing/container_20.png                                                                                     |    0 
 web/src/api/modules/safety.js                                                                                              |   17 +
 web/src/assets/mixing/container_80.png                                                                                     |    0 
 web/src/views/MixingInfo/messageInfo.vue                                                                                   |  140 ++++++-----
 hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/concret/mapper/TMaterialReleaseMappper.java           |    2 
 web/src/views/SecureManage/RiskGrad/AreaPolling.vue                                                                        |   13 +
 hd/pipe/materialsManage/src/main/resources/mapping/TMaterialReleaseMapper.xml                                              |   14 
 hd/pipe/materialsManage/src/main/resources/mapping/SysSteelRecordMapper.xml                                                |    2 
 web/src/assets/mixing/container_100.png                                                                                    |    0 
 web/src/views/GoodManage/MixRatioScreen.vue                                                                                |   55 ++--
 22 files changed, 557 insertions(+), 111 deletions(-)

diff --git a/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/concret/entity/dto/PieceDto.java b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/concret/entity/dto/PieceDto.java
index f5bc41f..970c692 100644
--- a/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/concret/entity/dto/PieceDto.java
+++ b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/concret/entity/dto/PieceDto.java
@@ -11,6 +11,9 @@
 
     private Integer byId;
 
+    private String bldTim;
+
+    private Integer types;
 
     private List<TRawMaterial> rawMaterials;
 
diff --git a/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/concret/mapper/TMaterialReleaseMappper.java b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/concret/mapper/TMaterialReleaseMappper.java
index 1896449..574b207 100644
--- a/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/concret/mapper/TMaterialReleaseMappper.java
+++ b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/concret/mapper/TMaterialReleaseMappper.java
@@ -26,7 +26,7 @@
 
     List<PieceDto> pieceList(HashMap<String, Object> values);
 
-    List<TRawMaterial> materialRew(Integer byId);
+    List<TRawMaterial> materialRew(@Param("byId") Integer byId,@Param("types")Integer types);
 
     void mixingInsert(@Idkey("mixingId") Map<String,Object> mixing);
 
diff --git a/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/concret/service/impl/TMaterialReleaseServiceImpl.java b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/concret/service/impl/TMaterialReleaseServiceImpl.java
index fa524be..778f6af 100644
--- a/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/concret/service/impl/TMaterialReleaseServiceImpl.java
+++ b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/concret/service/impl/TMaterialReleaseServiceImpl.java
@@ -214,7 +214,7 @@
         PageHelper.startPage(pageNum,pageSize);
         List<PieceDto> pieceDtos =  materialReleaseMappper.pieceList(values);
         for (PieceDto pieceDto : pieceDtos){
-            List<TRawMaterial> rawMaterials = materialReleaseMappper.materialRew(pieceDto.getById());
+            List<TRawMaterial> rawMaterials = materialReleaseMappper.materialRew(pieceDto.getById(),pieceDto.getTypes());
             pieceDto.setRawMaterials(rawMaterials);
         }
         PageInfo<PieceDto> pieceDtoPageInfo = new PageInfo<>(pieceDtos);
diff --git a/hd/pipe/materialsManage/src/main/resources/mapping/SysSteelRecordMapper.xml b/hd/pipe/materialsManage/src/main/resources/mapping/SysSteelRecordMapper.xml
index 6848161..88e85c9 100644
--- a/hd/pipe/materialsManage/src/main/resources/mapping/SysSteelRecordMapper.xml
+++ b/hd/pipe/materialsManage/src/main/resources/mapping/SysSteelRecordMapper.xml
@@ -190,7 +190,7 @@
         where  ssr.is_use=1
           and ssr.stock_type=2
             and ss.company_id=#{companyId}
-        order by ssr.create_time desc
+        order by ssr.create_time desc limit 0,10
   </select>
   <select id="recordInfo" parameterType="java.lang.String" resultType="com.thhy.materials.modules.biz.concret.entity.SysSteelRecord">
         select
diff --git a/hd/pipe/materialsManage/src/main/resources/mapping/TMaterialReleaseMapper.xml b/hd/pipe/materialsManage/src/main/resources/mapping/TMaterialReleaseMapper.xml
index 5ceb27c..179b10e 100644
--- a/hd/pipe/materialsManage/src/main/resources/mapping/TMaterialReleaseMapper.xml
+++ b/hd/pipe/materialsManage/src/main/resources/mapping/TMaterialReleaseMapper.xml
@@ -147,10 +147,16 @@
     where material_release_id=#{materialReleaseId}
   </update>
   <select id="pieceList" resultType="com.thhy.materials.modules.biz.concret.entity.dto.PieceDto">
-    select by_id as byId from  t_piece
+    select by_id as byId,
+      BldTim as bldTim,
+      types as types
+     from  t_piece
     where 1=1
     <if test="byId!=null and byId!='' ">
       and by_id=#{byId}
+    </if>
+    <if test="types!=null and types!=''">
+        and types=#{types}
     </if>
     ORDER BY  by_id desc
   </select>
@@ -161,7 +167,7 @@
     PlanAmnt as planamnt,
     FactAmnt as factamnt
      from  t_raw_material
-    where  Piece=#{byId}
+    where  Piece=#{byId} and types=#{types}
   </select>
   <insert id="mixingInsert" >
     insert into t_mixing
@@ -433,7 +439,7 @@
   <select id="mixingConsumes" resultType="com.thhy.materials.modules.biz.concret.entity.TMixingConsume">
     select
     mc.mixing_consume_id as mixingConsumeId,
-    sd.dict_name as dictName,
+    -- sd.dict_name as dictName,
     mc.dict_id as dictId,
     mc.spec as spec,
     mc.manufacturer as manufacturer,
@@ -447,7 +453,7 @@
     mc.create_time as createTime,
     mc.construction_unit as constructionUnit
      from t_mixing_consume mc
-     left join  sys_dict sd on mc.dict_id=sd.dict_id
+    -- left join  sys_dict sd on mc.dict_id=sd.dict_id
      where mc.mixing_signboard_id=#{mixingSignboardId} and mc.star=#{star}
 <!--     <if test="strTime!=null and strTime!='' and endTime !=null and endTime!=''">-->
 <!--         and mc.create_time between #{strTime} and #{endTime}-->
diff --git a/web/src/api/modules/safety.js b/web/src/api/modules/safety.js
index 2fa8af7..28e61c6 100644
--- a/web/src/api/modules/safety.js
+++ b/web/src/api/modules/safety.js
@@ -362,4 +362,21 @@
         responseType: 'blob',
         data: params
     }),
+
+  /**
+   * 广播文件上传模块
+   */
+  //查询广播文件列表
+	searchBoardLists: (params) =>
+    axios.post('/secure/integralAccount/selectSafeIntegralPageList', params),
+  //查询所有区域
+  getAreaLists: (params) =>
+    axios.post('/screen/audio/groups', params),
+  //上传文件添加/修改
+  addAreaInfos: (params) =>
+    axios.post('/screen/audio/addFile', params),
+  //上传文件详情
+  detailsAreaInfos: (params) =>
+    axios.post('/screen/audio/groupInfo', params),
+
 }
\ No newline at end of file
diff --git a/web/src/assets/mixing/container_10.png b/web/src/assets/mixing/container_10.png
index 15291b0..025f1e4 100644
--- a/web/src/assets/mixing/container_10.png
+++ b/web/src/assets/mixing/container_10.png
Binary files differ
diff --git a/web/src/assets/mixing/container_100.png b/web/src/assets/mixing/container_100.png
index 5b73dda..b861079 100644
--- a/web/src/assets/mixing/container_100.png
+++ b/web/src/assets/mixing/container_100.png
Binary files differ
diff --git a/web/src/assets/mixing/container_20.png b/web/src/assets/mixing/container_20.png
index 2bbe0dc..a0101dd 100644
--- a/web/src/assets/mixing/container_20.png
+++ b/web/src/assets/mixing/container_20.png
Binary files differ
diff --git a/web/src/assets/mixing/container_40.png b/web/src/assets/mixing/container_40.png
index d2f52d3..0f410f2 100644
--- a/web/src/assets/mixing/container_40.png
+++ b/web/src/assets/mixing/container_40.png
Binary files differ
diff --git a/web/src/assets/mixing/container_60.png b/web/src/assets/mixing/container_60.png
index 5ced4a7..70422d7 100644
--- a/web/src/assets/mixing/container_60.png
+++ b/web/src/assets/mixing/container_60.png
Binary files differ
diff --git a/web/src/assets/mixing/container_80.png b/web/src/assets/mixing/container_80.png
index 38348d1..5c06d53 100644
--- a/web/src/assets/mixing/container_80.png
+++ b/web/src/assets/mixing/container_80.png
Binary files differ
diff --git a/web/src/assets/mixing/container_90.png b/web/src/assets/mixing/container_90.png
index 47ee2ac..5c06d53 100644
--- a/web/src/assets/mixing/container_90.png
+++ b/web/src/assets/mixing/container_90.png
Binary files differ
diff --git a/web/src/views/GoodManage/MixRatioScreen.vue b/web/src/views/GoodManage/MixRatioScreen.vue
index af1f047..177c8f3 100644
--- a/web/src/views/GoodManage/MixRatioScreen.vue
+++ b/web/src/views/GoodManage/MixRatioScreen.vue
@@ -78,8 +78,8 @@
     <el-dialog class="prop_dialog" width="80%" v-if="isRenderDialog" :title="dialogTitle" :visible.sync="asyncVisible"
       @close="closeDialog">
       <el-form ref="ruleForm" class="rule_form" :model="ruleForm" :rules="rules">
-        <el-form-item label="拌合站屏:" prop="mixingSignboardId">
-          <el-select size="mini" v-model="ruleForm.mixingSignboardId" :disabled="isUpdate" placeholder="请选择拌合站屏"
+        <el-form-item label="拌和站屏:" prop="mixingSignboardId">
+          <el-select size="mini" v-model="ruleForm.mixingSignboardId" :disabled="isUpdate" placeholder="请选择拌和站屏"
             @change="changeSelectForm($event)">
             <el-option v-for="item in selects.screenNames" :key="item.value" :label="item.label"
               :value="item.value"></el-option>
@@ -110,10 +110,11 @@
         <div style="display: flex;">
           <div style="margin-right: 10px;" v-for="(item, index) in  ruleForm.infos " :key="index">
             <el-form-item :label="index === 0 ? '材料名称' : ''" :prop="`infos.${index}.dictId`">
-              <el-select v-model="item.dictId" size="mini" placeholder="请选择材料名称">
+              <!-- <el-select v-model="item.dictId" size="mini" placeholder="请选择材料名称">
                 <el-option v-for="item in selects.materials" :key="item.value" :label="item.label"
                   :value="item.value"></el-option>
-              </el-select>
+              </el-select> -->
+              <el-input v-model="item.dictId" size="mini" placeholder="请输入" clearable></el-input>
             </el-form-item>
             <el-form-item :label="index === 0 ? '规格型号' : ''" :prop="`infos.${index}.spec`">
               <el-input v-model="item.spec" size="mini" placeholder="请输入" clearable></el-input>
@@ -153,7 +154,7 @@
       times: [], // 时间范围
       selects: {
         screenNames: [], // 配合比屏
-        materials: [] // 材料名称
+        // materials: [] // 材料名称[先改成输入,,字典表材料不匹配]
       }, // 下拉框状态选择汇总
       tableData: [{
         inType: '', // 录入方式
@@ -166,7 +167,7 @@
         construction: '',  // 施工部位
         mixingConsumeId: '', // 每个材料id
         dataLists: [
-          {name: '材料名称', type: 'dictName', value: []}, // 材料名称
+          {name: '材料名称', type: 'dictId', value: []}, // 材料名称
           {name: '规格型号', type: 'spec', value: []}, // 规格型号
           {name: '生产厂家', type: 'manufacturer', value: []}, // 生产厂家
           {name: '材料含水率(%)', type: 'watFull', value: []}, // 含水率
@@ -177,7 +178,7 @@
       }],
       ruleForm: {
         mixingSignboardId: '', // 屏名称id
-        proName: '', // 工程名称 [拌合站屏下拉框联动]
+        proName: '', // 工程名称 [拌和站屏下拉框联动]
         constructionUnit: '', // 施工单位
         saveStamp: '',  // 施工日期
         construction: '',  // 施工部位
@@ -194,7 +195,7 @@
         pageNum: 1,
         pageSize: 9999,
         // stata: '', // 录入方式
-        mixingSignboardId: '', // 拌合站屏名称
+        mixingSignboardId: '', // 拌和站屏名称
         strTime: '',
         endTime: '',
       },
@@ -220,7 +221,7 @@
       2: '手动',
     }
     this.rules = {
-      mixingSignboardId: [{required: true, message: '请选择拌合站屏', trigger: 'change'}],
+      mixingSignboardId: [{required: true, message: '请选择拌和站屏', trigger: 'change'}],
       proName: [{required: true, message: '请输入工程名称', trigger: 'change'}],
       constructionUnit: [{required: true, message: '请输入工程名称', trigger: 'blur'}],
       saveStamp: [{required: true, message: '请输入施工日期', trigger: 'blur'}],
@@ -252,7 +253,7 @@
           construction: '',  // 施工部位
           mixingConsumeId: '', // 每个材料id
           dataLists: [
-            {name: '材料名称', type: 'dictName', value: []}, // 材料名称
+            {name: '材料名称', type: 'dictId', value: []}, // 材料名称
             {name: '规格型号', type: 'spec', value: []}, // 规格型号
             {name: '生产厂家', type: 'manufacturer', value: []}, // 生产厂家
             {name: '材料含水率(%)', type: 'watFull', value: []}, // 含水率
@@ -307,18 +308,18 @@
       })
     },
     //获取字典表材料名称
-    async getDicFilteredData() {
-      let params = {pageNum: 1, pageSize: 100000000}
-      let {data} = await this.$api.Dictionary.searchDictionary(params)
-      data.list.forEach(item => {
-        if (item.dictType === 'pipe_materials') {
-          this.selects.materials.push({
-            label: item.dictName,
-            value: item.dictId,
-          })
-        }
-      })
-    },
+    // async getDicFilteredData() {
+    //   let params = {pageNum: 1, pageSize: 100000000}
+    //   let {data} = await this.$api.Dictionary.searchDictionary(params)
+    //   data.list.forEach(item => {
+    //     if (item.dictType === 'pipe_materials') {
+    //       this.selects.materials.push({
+    //         label: item.dictName,
+    //         value: item.dictId,
+    //       })
+    //     }
+    //   })
+    // },
     // 获取配比屏名称
     async getScreenNames() {
       const params = {pageNum: 1, pageSize: 9999}
@@ -351,9 +352,9 @@
         if (!this.isRenderDialog) {
           this.isRenderDialog = true
         }
-        if (!this.selects.materials.length) {
-          await this.getDicFilteredData()
-        }
+        // if (!this.selects.materials.length) {
+        //   await this.getDicFilteredData()
+        // }
         this.asyncVisible = true
         this.$nextTick(() => {
           resolve()
@@ -372,7 +373,6 @@
       this.submitMode = 'update'
       this.showDialog().then(() => {
         const {mixingSignboardId, proName, constructionUnit, saveStamp, construction, dataListFlat} = this.tableData[i]
-        console.log(constructionUnit)
         this.ruleForm = Object.assign(this.ruleForm, {
           mixingSignboardId,
           proName,
@@ -543,8 +543,11 @@
           justify-content: center;
           align-items: center;
           flex: 1;
+          padding: 0 4px;
+          line-height: 24px;
           margin: -1px -1px -1px 0;
           border: 1px solid #01B3EF;
+          word-break: break-all;
         }
       }
     }
diff --git a/web/src/views/GoodManage/MixingScreen.vue b/web/src/views/GoodManage/MixingScreen.vue
index 0b2382f..38ccb70 100644
--- a/web/src/views/GoodManage/MixingScreen.vue
+++ b/web/src/views/GoodManage/MixingScreen.vue
@@ -1,4 +1,4 @@
-<!-- 物资管理 ==> 拌合站屏管理-->
+<!-- 物资管理 ==> 拌和站屏管理-->
 <template>
   <div class="main">
     <div class="main_header">
@@ -87,8 +87,8 @@
     <el-dialog class="prop_dialog" v-if="isRenderDialog" :title="dialogTitle" :visible.sync="asyncVisible"
       @close="closeDialog">
       <el-form ref="ruleForm" class="rule_form" :model="ruleForm" :rules="rules" label-width="auto">
-        <el-form-item label="拌合站屏:" prop="name">
-          <el-select size="mini" v-model="ruleForm.name" :disabled="isUpdate" placeholder="请选择拌合站屏"
+        <el-form-item label="拌和站屏:" prop="name">
+          <el-select size="mini" v-model="ruleForm.name" :disabled="isUpdate" placeholder="请选择拌和站屏"
             @change="changeSelectForm($event)">
             <el-option v-for="item in selects.screenNames" :key="item.value" :label="item.label"
               :value="item.value"></el-option>
@@ -149,8 +149,8 @@
       submitMode: '', // add update
       dataLists: [],  // [[],[],[]]
       selects: {
-        screenNames: [], // 拌合站屏
-        screenNameIds: {}, // 拌合站屏id map
+        screenNames: [], // 拌和站屏
+        screenNameIds: {}, // 拌和站屏id map
       }, // 下拉框状态选择汇总
       ruleForm: {
         name: '', // 下拉框屏名称
@@ -187,7 +187,7 @@
         pageNum: 1,
         pageSize: 9999,
         stata: '', // 录入方式
-        types: '', // 拌合站屏
+        types: '', // 拌和站屏
         strTime: '',
         endTime: '',
       },
@@ -203,7 +203,7 @@
   },
   beforeCreate() {
     this.rules = {
-      name: [{required: true, message: '请选择拌合站屏', trigger: 'change'}],
+      name: [{required: true, message: '请选择拌和站屏', trigger: 'change'}],
       infos: [{
         num: [{required: true, message: '请输入', trigger: 'blur'}],
         spec: [{required: true, message: '请输入', trigger: 'blur'}],
diff --git a/web/src/views/GoodManage/components/MixingExpend.vue b/web/src/views/GoodManage/components/MixingExpend.vue
index 20d0934..2aa5da8 100644
--- a/web/src/views/GoodManage/components/MixingExpend.vue
+++ b/web/src/views/GoodManage/components/MixingExpend.vue
@@ -15,6 +15,14 @@
             <div class="content_tables_headers">
                 <div class="tables_headers_title">盘次:</div>
                 <div class="tables_headers_datas">{{item.byId}}</div>
+              <div style="display: flex; margin-left: 30px">
+                  <div class="tables_headers_title">搅拌时间:</div>
+                  <div class="tables_headers_datas">{{item.bldTim}}</div>
+              </div>
+              <div style="display: flex; margin-left: 30px">
+                  <div class="tables_headers_title">搅拌站:</div>
+                  <div class="tables_headers_datas">{{item.types == 1 ? '二号' : '一号'}}</div>
+                </div>
             </div>
             <div class="content_tables_alone">
                 <el-table
@@ -119,7 +127,16 @@
         this.$api.Materials.mixingExpendLists(params).then((res) => {
           if(res.statusMsg === 'ok') {
             this.total = res.data.total;
-            this.tablesList = res.data.list;
+            this.tablesList = res.data.list.map(item => {
+              let dataTime = item.bldTim.split(',');
+              dataTime = dataTime.map(time => {
+                time = time.substring(0, 19);
+                return time;
+              })
+              item.bldTim = dataTime.join();
+              // item.bldTim
+              return item;
+            });
           }
           this.loading = false;
         })
diff --git a/web/src/views/MixingInfo/messageInfo.vue b/web/src/views/MixingInfo/messageInfo.vue
index dd43d75..fb8fc0a 100644
--- a/web/src/views/MixingInfo/messageInfo.vue
+++ b/web/src/views/MixingInfo/messageInfo.vue
@@ -1,39 +1,47 @@
 <template>
     <div class="mixing_index">
         <div class="mixing_header">
-            <span>中铁十四局通甬站前I标管片场拌合站</span>
+            <span>中铁十四局通甬站前I标管片场拌和站</span>
         </div>
         <div class="mixing_main">
             <div class="mixing_left">
                 <div class="mixing_left_num">
-                    <div class="">{{mixingList&&mixingList.tableNum}}</div>
+                    <div class="">{{ mixingList.tableNum }}</div>
                 </div>
-                <div class="mixing_left_name">{{mixingList&&mixingList.materialName}}</div>
+                <div class="mixing_left_name">{{ mixingList.materialName || '' }}</div>
             </div>
             <div class="mixing_right">
                 <div class="mixing_rows">
                     <div class="mixing_rows_titles">产地名称:</div>
-                    <div class="mixing_rows_datas">{{mixingList&&mixingList.nameOfOrigin}}</div>
+                    <div class="mixing_rows_datas">{{ mixingList.nameOfOrigin || '' }}</div>
                 </div>
                 <div class="mixing_rows">
                     <div class="mixing_rows_titles">进场数量:</div>
-                    <div class="mixing_rows_datas">{{mixingList&&mixingList.incomingQuantity}} t</div>
+                    <div class="mixing_rows_datas">{{ mixingList.incomingQuantity || '' }} t</div>
                 </div>
                 <div class="mixing_rows">
                     <div class="mixing_rows_titles">进场日期:</div>
-                    <div class="mixing_rows_datas">{{mixingList&&mixingList.inTime}}</div>
+                    <div class="mixing_rows_datas">{{ mixingList.inTime || '' }}</div>
                 </div>
                 <div class="mixing_rows">
                     <div class="mixing_rows_titles">检验日期:</div>
-                    <div class="mixing_rows_datas">{{mixingList&&mixingList.inspectionDate}}</div>
+                    <div class="mixing_rows_datas">{{ mixingList.inspectionDate || '' }}</div>
                 </div>
                 <div class="mixing_rows">
                     <div class="mixing_rows_titles">检验状态:</div>
-                    <div class="mixing_rows_datas"  :class="{'standardStyle':mixingList.status===1,'notStandardStyle':mixingList.status!==1}">{{mixingList&&mixingList.status===1?'合格':mixingList&&mixingList.status===2?'待检':''}}</div>
+                    <div class="mixing_rows_datas"
+                        :class="{ 'standardStyle': mixingList.status === 1, 'notStandardStyle': mixingList.status !== 1 }">
+                        {{ mixingList.status === 1 ? '合格' : mixingList.status === 2 ? '待检' : ''
+                        }}</div>
                 </div>
                 <div class="mixing_rows">
                     <div class="mixing_rows_titles">报告编号:</div>
-                    <div class="mixing_rows_datas">{{mixingList&&mixingList.reportNumber}}</div>
+                    <div class="mixing_rows_datas small_size">
+                        {{
+                            mixingList.reportNumber &&
+                            mixingList.reportNumber.replace(/\s/g, '\n')
+                        }}
+                    </div>
                 </div>
             </div>
         </div>
@@ -41,21 +49,21 @@
 </template>
 <script>
 export default {
-    data(){
-        return{
-            timer:null,//定时器
-            mixingList:null,//展示数据
+    data() {
+        return {
+            timer: null,//定时器
+            mixingList: {},//展示数据
         }
     },
-    created(){
+    created() {
         this.searchMixingInfos()
     },
-    mounted(){
+    mounted() {
         const that = this;
         // that.searchMixingInfos()
-        that.timer = setInterval(()=>{
+        that.timer = setInterval(() => {
             that.searchMixingInfos()
-        },60000 * 10)
+        }, 60000 * 10)
 
         let width = document.getElementsByClassName('mixing_index')[0].clientWidth
         let $html = document.getElementsByTagName('html')[0]
@@ -71,15 +79,15 @@
         clearInterval(this.timer);
         this.timer = null;
     },
-    methods:{
-        searchMixingInfos(){
-            let params={
-                tableNum:window.location.href.split('/')[5].split('=')[1]
+    methods: {
+        searchMixingInfos() {
+            let params = {
+                tableNum: window.location.href.split('/')[5].split('=')[1]
             }
-            this.$api.Infos.showHmixings(params).then(res=>{
-                if(res.statusMsg==='ok'){
-                    this.mixingList = res.data===null?[]:res.data
-                }else{
+            this.$api.Infos.showHmixings(params).then(res => {
+                if (res.statusMsg === 'ok' && res.data) {
+                    this.mixingList = res.data
+                } else {
                     this.$message.warning('请检查网络或联系管理员!!!')
                 }
             })
@@ -88,27 +96,26 @@
 }
 </script>
 <style scoped lang="scss">
-.mixing_index{
+.mixing_index {
     display: flex;
     flex-direction: column;
     width: 100%;
     height: 100%;
-    padding: 5px;
+    padding: 0.4rem;
     background: url("../../assets/mixing/mixing_bg3.png") no-repeat;
     background-size: 100% 100%;
     background-position: center center;
-    
 
-    .mixing_header{
+
+    .mixing_header {
         width: 100%;
-        height: 3.2rem;
+        height: 9rem;
         position: relative;
-        padding: 4rem;
         display: flex;
         justify-content: center;
         align-items: center;
-        
-        span{
+
+        span {
             position: absolute;
             font-size: 5rem;
             font-weight: bold;
@@ -120,25 +127,25 @@
         }
     }
 
-    .mixing_main{
+    .mixing_main {
         overflow: hidden;
         flex: 1;
         width: 100%;
         height: 100%;
-        padding: 6rem;
+        padding: 3rem 4rem 5rem 4rem;
         display: flex;
 
-        .mixing_left{
+        .mixing_left {
             display: flex;
             flex-direction: column;
-            width: 45%;
-            margin-right: 15px;
+            flex: 1;
+            margin-right: 3rem;
             display: flex;
             flex-direction: column;
             align-items: center;
             justify-content: space-between;
 
-            .mixing_left_num{
+            .mixing_left_num {
                 position: relative;
                 overflow: hidden;
                 padding: 1rem;
@@ -146,7 +153,8 @@
                 width: 100%;
                 background: url("../../assets/mixing/mixing_left_bg.png") no-repeat;
                 background-size: 100% 100%;
-                >div{
+
+                > div {
                     display: flex;
                     justify-content: center;
                     align-items: center;
@@ -158,51 +166,63 @@
                     background-color: rgba(37, 129, 255, 0.29);
                 }
             }
-            .mixing_left_name{
+
+            .mixing_left_name {
                 flex: 1;
                 width: 100%;
                 display: flex;
                 justify-content: center;
                 align-items: center;
-                text-shadow: 5px 7px 0px rgba(0,66,255,0.2), 16px 23px 16px rgba(14,19,48,0.15);
-                background: linear-gradient(to bottom,#FFFFFF 0%,rgba(140, 186, 255, 0.88) 100%);
+                text-shadow: 5px 7px 0px rgba(0, 66, 255, 0.2), 16px 23px 16px rgba(14, 19, 48, 0.15);
+                background: linear-gradient(to bottom, #FFFFFF 0%, rgba(140, 186, 255, 0.88) 100%);
                 background-clip: text;
                 -webkit-background-clip: text;
-                text-fill-color: transparent;
                 -webkit-text-fill-color: transparent;
                 color: #FFFFFF;
                 font-size: 9rem;
                 font-weight: 500;
             }
         }
-        .mixing_right{
-            width: calc(55% - 100px);
-            background: linear-gradient(to right,#0D3776 0%,#041A40 100%);
+
+        .mixing_right {
+            flex: 1.2;
+            background: linear-gradient(to right, #0D3776 0%, #041A40 100%);
             display: flex;
             flex-direction: column;
-            justify-content: space-between;
-            .mixing_rows{
-                padding: 10px 20px;
+            justify-content: space-around;
+            padding: 2rem 4rem;
+
+            .mixing_rows {
+                overflow: hidden;
                 display: flex;
-                .mixing_rows_titles{
-                    flex: none;
+
+                .mixing_rows_titles {
                     color: #FFFFFF;
                     font-weight: 400;
                     font-size: 5rem;
                 }
-                .mixing_rows_datas{
-                    flex: none;
+
+                .mixing_rows_datas {
+                    overflow: hidden;
+                    flex: 1;
                     color: #FFFFFF;
                     font-weight: 400;
                     font-size: 5rem;
+                    white-space: pre-wrap;
+
+                    &.small_size {
+                        font-size: 4.3rem;
+                    }
                 }
-                .standardStyle{
-                    color:#15EF48;
-                    font-size:8rem;
+
+                .standardStyle {
+                    color: #15EF48;
+                    font-size: 8rem;
                 }
-                .notStandardStyle{
-                    color:rgba(255, 102, 0, 1);
-                    font-size:8rem;
+
+                .notStandardStyle {
+                    color: rgba(255, 102, 0, 1);
+                    font-size: 8rem;
                 }
             }
         }
diff --git a/web/src/views/MixingInfo/mixing.vue b/web/src/views/MixingInfo/mixing.vue
index b6801dd..ab40a78 100644
--- a/web/src/views/MixingInfo/mixing.vue
+++ b/web/src/views/MixingInfo/mixing.vue
@@ -263,7 +263,7 @@
                 > p {
                     position: absolute;
                     left: 50%;
-                    top: 18%;
+                    top: 9%;
                     font-size: 0.7rem;
                     white-space: nowrap;
                     transform: translate(-50%, -50%);
diff --git a/web/src/views/SecureManage/BroadcastSystem.vue b/web/src/views/SecureManage/BroadcastSystem.vue
new file mode 100644
index 0000000..4f44b86
--- /dev/null
+++ b/web/src/views/SecureManage/BroadcastSystem.vue
@@ -0,0 +1,351 @@
+<template>
+  <div class="main">
+    <div class="main_header">
+      <div class="header_item">
+        <span class="header_label">区域名称:</span>
+        <el-select v-model="search.groupId" placeholder="请选择区域名称" clearable>
+            <el-option
+            v-for="item in optionAreaList"
+            :key="item.id"
+            :label="item.groupName"
+            :value="item.id">
+            </el-option>
+        </el-select>
+      </div>
+      <div class="header_item">
+        <el-button  icon="el-icon-search" v-if="showButton('search')" @click="searchButtonInfo(true)">查询</el-button>
+        <!-- <el-button class="search_btn" icon="el-icon-plus" v-if="showButton('insert')" @click="insertProp">新增</el-button> -->
+      </div>
+    </div>
+    <div class="main_content">
+      <el-table
+        v-loading="loading"
+        :data="dataList"
+        height="100%">
+        <el-table-column align="center" label="序号" width="60">
+          <template #default="scope">
+            <span>{{(pageNum - 1) * pageSize + scope.$index + 1}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="groupName" label="区域名称" align="center"></el-table-column>
+        <!-- <el-table-column prop="dictName" label="上传文件" align="center"></el-table-column> -->
+        <el-table-column label="操作" align="center" width="200">
+          <template #default="{ row }">
+            <el-button class="table_btn" size="mini" v-if="showButton('update')" @click="updateProp(row)">修改</el-button>
+            <!-- <el-button class="delete_btn" size="mini" v-if="showButton('delete')" @click="deleteInfo(row)">删除</el-button> -->
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+    <!-- <div class="main_footer">
+      <el-pagination
+        background
+        @current-change="changePageNum"
+        @size-change="changePageSize"
+        :current-page="pageNum"
+        :page-sizes="[10, 20, 50, 100]"
+        :page-size="pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total">
+      </el-pagination>
+    </div> -->
+    <el-dialog
+      class="prop_dialog"
+      :title="asyncTitle ? '新增' : '修改'"
+      :close-on-click-modal="false"
+      :visible.sync="asyncVisible"
+      width="55%">
+      <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="auto" class="rule_form">
+        <el-form-item label="区域名称:" prop="groupId">
+          <el-select v-model="ruleForm.groupId" placeholder="请选择区域名称">
+                <el-option
+                v-for="item in optionAreaList"
+                :key="item.id"
+                :label="item.groupName"
+                :value="item.id">
+                </el-option>
+            </el-select>
+        </el-form-item>
+        <el-form-item label="上传文件:" >
+            <div class="upload_index">
+                <div class="upload_text">
+                    <el-upload
+                        class="upload-demo"
+                        action=""
+                        :multiple="false"
+                        :http-request="httpRequest"
+                        :show-file-list="false"
+                        :file-list="fileList">
+                        <el-button type="text" :size="size">上传文件</el-button>
+                    </el-upload>
+                </div>
+                <div class="upload_tables">
+                    <el-table
+                        v-loading="loadingUpload"
+                        :data="fileList"
+                        height="100%">
+                        <el-table-column prop="name" label="文件" align="center"></el-table-column>
+                        <el-table-column label="操作" align="center">
+                            <template #default="{ row }">
+                                <el-button class="delete_btn" size="mini" v-if="showButton('delete')" @click="deleteFiles(row)">删除</el-button>
+                            </template>
+                        </el-table-column>
+                        <el-table-column label="是否默认播放" align="center">
+                            <template #default="{ row }">
+                                <el-radio v-model="row.defaults" :label="1">是</el-radio>
+                                <el-radio v-model="row.defaults" :label="2">否</el-radio>
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                </div>
+            </div>
+        </el-form-item>
+      </el-form>
+      <div slot="footer">
+        <el-button @click="asyncVisible = false">取 消</el-button>
+        <el-button class="submit_btn" @click="asyncTitle ? submitInsert() : submitUpdate()">提 交</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { buttonPinia } from '../../pinia/index';
+import { throttle, changeSize } from '../../plugins/public'; // 导入节流、动态切换组件尺寸方法
+  export default {
+    data() {
+      return {
+        size: changeSize(), // 组件尺寸
+        pageNum: 1,
+        pageSize: 10,
+        search:{},//查询条件
+        total: 0,
+        loading: false,
+        loadingUpload:false,
+        dataList: [], //广播文件上传信息列表
+        asyncTitle: true, // 对话框title 新增:true  修改:false
+        asyncVisible: false, // 添加 修改对话框
+        ruleForm: {
+        }, // 按钮表单
+        rules: {
+          groupId: [{
+            required: true,
+            message: '请选择区域',
+            trigger: 'blur'
+          }],
+        },
+        optionAreaList:[],//所有区域
+        fileList:[
+        ],//上传文件
+      }
+    },
+    watch: {
+      asyncVisible(bol) {
+        if(!bol) {
+          this.ruleForm = {};
+          this.$refs.ruleForm.resetFields();
+        }
+      }
+    },
+    mounted() {
+      const that = this;
+      // 根据窗口大小动态修改组件尺寸
+      window.onresize = () => {
+        that.size = changeSize();
+      }
+      that.searchButtonInfo(true);
+      that.getAllTypes()
+    },
+    methods: {
+    //获取所有区域
+      getAllTypes(){
+        let params = {
+        }
+        this.$api.Safety.getAreaLists(params).then(res=>{
+            if(res.statusMsg === 'ok'){
+                this.optionAreaList = res.data
+            }else{
+                this.$message.warning(res.statusMsg)
+            }
+        })
+      },
+      //删除上传的文件
+      deleteFiles(row){
+        this.fileList.splice(this.fileList.findIndex(item => item.ids == row.ids),1);
+        this.$message.success("删除成功!")
+      },
+      // 自定义上传事件
+      httpRequest({file}) {
+        this.functionLoading();
+        this.loadingUpload = true
+        if(file.type !=="video/mp4"){
+            this.$message.warning("请上传MP4格式的文件!!!")
+            this.loadingView.close();
+            return false
+        }
+        const formData = new FormData();
+        formData.set('file', file);
+        this.$api.System.uploadFileRequest(formData).then((res) => {
+            if(res.success) {
+                this.$message.success('上传成功!');
+                this.$nextTick(() => {
+                    this.fileList.push({
+                        ids: this.fileList.length + 1,
+                        name:file.name,
+                        defaults:2,
+                        audioFile:res.data
+                    })
+                })
+            } else {
+                this.$message.warning(res.statusMsg);
+            }
+            this.loadingUpload = false
+            this.loadingView.close();
+        }).catch(() => {
+            this.loadingUpload = false
+            this.loadingView.close();
+            this.$message.error('请检查网络连接后重新上传!');
+        })
+      },
+      // 等待方法
+      functionLoading() {
+        this.loadingView = this.$loading({
+          lock: true,
+          text: '请稍后...',
+          spinner: 'el-icon-loading',
+          background: 'rgba(0, 0, 0, 0.7)'
+        });
+      },
+      // 查询按钮列表信息
+      searchButtonInfo(bol) {
+        if(bol) {
+          this.pageNum = 1;
+        }
+        let params = Object.assign({},this.search,{
+        //   pageNum: this.pageNum,
+        //   pageSize: this.pageSize
+        })
+        this.loading = true;
+        this.$api.Safety.getAreaLists(params).then((res) => {
+          if(res.statusMsg === 'ok') {
+            // this.total = res.data.total;
+            this.dataList = res.data;
+          }
+          this.loading = false;
+        })
+      },
+      // 新增按钮信息
+      insertProp() {
+        this.asyncTitle = true;
+        this.asyncVisible = true;
+      },
+      // 修改按钮信息
+      updateProp(row) {
+        this.asyncTitle = false;
+        this.asyncVisible = true;
+        this.$api.Safety.detailsAreaInfos({groupId: row.id}).then(res=>{
+            if(res.statusMsg === 'ok'){
+                this.$set(this.ruleForm,'groupId',res.data.id)
+                this.fileList = res.data.fileList
+                let projectArr = []
+                res.data.supplierPros.forEach(item=>{
+                    projectArr.push(item.proId)
+                })
+                this.$set(this.ruleForm,'proIds',projectArr)
+            }else{
+                this.$message.warning(res.statusMsg)
+            }
+        })
+      },
+      // 删除按钮信息
+      deleteInfo(row) {
+        this.$confirm("该操作将删除该信息,是否继续删除?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+       })
+       .then(() => {
+         this.$api.Safety.deleteSupplier({supplierId: row.id})
+        .then(res => {
+          if(res.statusMsg === 'ok') {
+            this.searchButtonInfo(true);
+            this.$message.success("删除成功!");
+          } else {
+            this.$message.warning(res.statusMsg);
+          }
+        })
+       })
+       .catch(() => {
+         this.$message.warning("您已取消");
+       })
+      },
+      // 提交添加按钮信息
+      submitInsert: throttle(function() {
+        this.$refs.ruleForm.validate((valid) => {
+          if(valid) {
+            const params = Object.assign({}, this.ruleForm);
+            params.fileList = this.fileList
+            this.$api.Safety.addAreaInfos(params).then((res) => {
+              if(res.statusMsg === 'ok') {
+                this.asyncVisible = false;
+                this.searchButtonInfo(true);
+                this.$message.success('添加成功!');
+              } else {
+                this.$message.warning(res.statusMsg);
+              }
+            })
+          }
+        })
+      }, 3000),
+      // 提交修改按钮信息
+      submitUpdate: throttle(function() {
+        this.$refs.ruleForm.validate((valid) => {
+          if(valid) {
+            const params = Object.assign({}, this.ruleForm);
+            params.fileList = this.fileList
+            this.$api.Safety.addAreaInfos(params).then((res) => {
+              if(res.statusMsg === 'ok') {
+                this.asyncVisible = false;
+                this.searchButtonInfo(true);
+                this.$message.success('修改成功!');
+              } else {
+                this.$message.warning(res.statusMsg);
+              }
+            })
+          }
+        })
+      }, 3000),
+      // 判断按钮权限信息
+      showButton(str) {
+        const pinia = buttonPinia();
+        return pinia.$state.buttonInfo.includes(str);
+      },      
+      // 切换页数
+      changePageNum(page) {
+        this.pageNum = page;
+        this.searchButtonInfo();
+      },
+      // 切换每页条数
+      changePageSize(size) {
+        this.pageSize = size;
+        this.searchButtonInfo();
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+@import '../../style/layout-main.scss';
+.upload_index{
+    width: 100%;
+    display: flex;
+    flex-direction: column;
+    .upload_text{
+        display: flex;
+        justify-content: flex-end;
+    }
+    .upload_tables{
+        height: 200px;
+    }
+}
+</style>
\ No newline at end of file
diff --git a/web/src/views/SecureManage/RiskGrad/AreaPolling.vue b/web/src/views/SecureManage/RiskGrad/AreaPolling.vue
index 3a0ed7f..61cee9b 100644
--- a/web/src/views/SecureManage/RiskGrad/AreaPolling.vue
+++ b/web/src/views/SecureManage/RiskGrad/AreaPolling.vue
@@ -7,7 +7,9 @@
                 <el-tab-pane label="任务打卡" name="second"></el-tab-pane>
             </el-tabs>
         </div>
-        <component :is="cpns[activeName]"></component>
+        <div class="content">
+            <component :is="cpns[activeName]"></component>
+        </div>
     </div>
 </template>
 <script>
@@ -32,4 +34,13 @@
 
 <style lang="scss" scoped>
 @import '@/style/layout-main.scss';
+
+.main {
+    display: flex;
+
+    .content {
+        overflow: hidden;
+        flex: 1;
+    }
+}
 </style>
\ No newline at end of file
diff --git a/web/src/views/SecureManage/RiskGrad/components/PollingTask.vue b/web/src/views/SecureManage/RiskGrad/components/PollingTask.vue
index e02fce3..0f171c6 100644
--- a/web/src/views/SecureManage/RiskGrad/components/PollingTask.vue
+++ b/web/src/views/SecureManage/RiskGrad/components/PollingTask.vue
@@ -1,6 +1,6 @@
 <!-- 安全管理 ==> 风险分级管控 => 区域巡检(巡检任务)-->
 <template>
-    <div>
+    <div class="wrap">
         <div class="main_header">
             <div class="header_item">
                 <span class="header_label">巡检任务:</span>
@@ -385,6 +385,17 @@
 <style lang="scss" scoped>
 @import '@/style/layout-main.scss';
 
+.wrap {
+    display: flex;
+    flex-direction: column;
+    height: 100%;
+
+    .main_content {
+        overflow: hidden;
+        flex: 1;
+    }
+}
+
 .divider {
     position: relative;
     margin-bottom: 30px;
diff --git a/web/src/views/SecureManage/RiskGrad/components/TaskPunchcard.vue b/web/src/views/SecureManage/RiskGrad/components/TaskPunchcard.vue
index 28afc51..50c2238 100644
--- a/web/src/views/SecureManage/RiskGrad/components/TaskPunchcard.vue
+++ b/web/src/views/SecureManage/RiskGrad/components/TaskPunchcard.vue
@@ -1,6 +1,6 @@
 <!-- 安全管理 ==> 风险分级管控 => 区域巡检(任务打卡)-->
 <template>
-    <div>
+    <div class="wrap">
         <div class="main_header">
             <div class="header_item">
                 <span class="header_label">巡检人:</span>
@@ -8,7 +8,7 @@
             </div>
             <div class="header_item">
                 <span class="header_label">巡检状态:</span>
-                <el-select size="mini" v-model="queryInfo.status">
+                <el-select size="mini" v-model="queryInfo.status" clearable>
                     <el-option v-for="item in queryStatus" :key="item.value" :label="item.label" :value="item.value"
                         placeholder="请选择巡检状态"></el-option>
                 </el-select>
@@ -72,8 +72,6 @@
                     <el-image class="image" v-for="(item, index) in regionInfos.img" :key="index" :src="item" fit="contain"
                         :preview-src-list="regionInfos.img"></el-image>
                 </el-form-item>
-
-                <el-form-item label="获取当前位置:">{{ regionInfos.location }}</el-form-item>
             </el-form>
         </el-dialog>
     </div>
@@ -120,7 +118,6 @@
                 region: '', // 巡检区域
                 res: '', // 巡检结果
                 img: '', // 上传的图片
-                location: '', // 位置
             }
         }
     },
@@ -230,13 +227,12 @@
                     this.regionInfos.time = res.data.inspectionTime
                     this.regionInfos.region = res.data.region
                     this.regionInfos.res = res.data.result
-                    this.regionInfos.location = res.data.location
                     this.regionInfos.img = []
 
                     if (res.data.imgPaths) {
                         let arr = []
                         res.data.imgPaths.split(',').forEach(item => {
-                            arr.push(process.env.VUE_APP_BASE_URL + '/' + item)
+                            arr.push('https://szpipe.thhy-tj.com/' + item) // 是生产地址
                         })
                         this.regionInfos.img.push(...arr)
                     }
@@ -265,6 +261,17 @@
 <style lang="scss" scoped>
 @import '@/style/layout-main.scss';
 
+.wrap {
+    display: flex;
+    flex-direction: column;
+    height: 100%;
+
+    .main_content {
+        overflow: hidden;
+        flex: 1;
+    }
+}
+
 .rule_form {
     color: #fff;
 

--
Gitblit v1.9.3