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