Merge branch 'master' of http://111.30.93.211:10101/r/supipe
| | |
| | | |
| | | private Integer byId; |
| | | |
| | | private String bldTim; |
| | | |
| | | private Integer types; |
| | | |
| | | private List<TRawMaterial> rawMaterials; |
| | | |
| | |
| | | |
| | | 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); |
| | | |
| | |
| | | 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); |
| | |
| | | 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 |
| | |
| | | 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> |
| | |
| | | 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 |
| | |
| | | <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, |
| | |
| | | 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}--> |
| | |
| | | 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),
|
| | |
|
| | | } |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | times: [], // 时间范围 |
| | | selects: { |
| | | screenNames: [], // 配合比屏 |
| | | materials: [] // 材料名称 |
| | | // materials: [] // 材料名称[先改成输入,,字典表材料不匹配] |
| | | }, // 下拉框状态选择汇总 |
| | | tableData: [{ |
| | | inType: '', // 录入方式 |
| | |
| | | construction: '', // 施工部位 |
| | | mixingConsumeId: '', // 每个材料id |
| | | dataLists: [ |
| | | {name: '材料名称', type: 'dictName', value: []}, // 材料名称 |
| | | {name: '材料名称', type: 'dictId', value: []}, // 材料名称 |
| | | {name: '规格型号', type: 'spec', value: []}, // 规格型号 |
| | | {name: '生产厂家', type: 'manufacturer', value: []}, // 生产厂家 |
| | | {name: '材料含水率(%)', type: 'watFull', value: []}, // 含水率 |
| | |
| | | }], |
| | | ruleForm: { |
| | | mixingSignboardId: '', // 屏名称id |
| | | proName: '', // 工程名称 [拌合站屏下拉框联动] |
| | | proName: '', // 工程名称 [拌和站屏下拉框联动] |
| | | constructionUnit: '', // 施工单位 |
| | | saveStamp: '', // 施工日期 |
| | | construction: '', // 施工部位 |
| | |
| | | pageNum: 1, |
| | | pageSize: 9999, |
| | | // stata: '', // 录入方式 |
| | | mixingSignboardId: '', // 拌合站屏名称 |
| | | mixingSignboardId: '', // 拌和站屏名称 |
| | | strTime: '', |
| | | endTime: '', |
| | | }, |
| | |
| | | 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'}], |
| | |
| | | construction: '', // 施工部位 |
| | | mixingConsumeId: '', // 每个材料id |
| | | dataLists: [ |
| | | {name: '材料名称', type: 'dictName', value: []}, // 材料名称 |
| | | {name: '材料名称', type: 'dictId', value: []}, // 材料名称 |
| | | {name: '规格型号', type: 'spec', value: []}, // 规格型号 |
| | | {name: '生产厂家', type: 'manufacturer', value: []}, // 生产厂家 |
| | | {name: '材料含水率(%)', type: 'watFull', value: []}, // 含水率 |
| | |
| | | }) |
| | | }, |
| | | //获取字典表材料名称 |
| | | 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} |
| | |
| | | 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() |
| | |
| | | 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, |
| | |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | |
| | | <!-- 物资管理 ==> 拌合站屏管理--> |
| | | <!-- 物资管理 ==> 拌和站屏管理--> |
| | | <template> |
| | | <div class="main"> |
| | | <div class="main_header"> |
| | |
| | | <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> |
| | |
| | | submitMode: '', // add update |
| | | dataLists: [], // [[],[],[]] |
| | | selects: { |
| | | screenNames: [], // 拌合站屏 |
| | | screenNameIds: {}, // 拌合站屏id map |
| | | screenNames: [], // 拌和站屏 |
| | | screenNameIds: {}, // 拌和站屏id map |
| | | }, // 下拉框状态选择汇总 |
| | | ruleForm: { |
| | | name: '', // 下拉框屏名称 |
| | |
| | | pageNum: 1, |
| | | pageSize: 9999, |
| | | stata: '', // 录入方式 |
| | | types: '', // 拌合站屏 |
| | | types: '', // 拌和站屏 |
| | | strTime: '', |
| | | endTime: '', |
| | | }, |
| | |
| | | }, |
| | | 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'}], |
| | |
| | | <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 |
| | |
| | | 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; |
| | | }) |
| | |
| | | <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> |
| | |
| | | </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] |
| | |
| | | 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('请检查网络或联系管理员!!!') |
| | | } |
| | | }) |
| | |
| | | } |
| | | </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; |
| | |
| | | } |
| | | } |
| | | |
| | | .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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | |
| | | > p { |
| | | position: absolute; |
| | | left: 50%; |
| | | top: 18%; |
| | | top: 9%; |
| | | font-size: 0.7rem; |
| | | white-space: nowrap; |
| | | transform: translate(-50%, -50%); |
对比新文件 |
| | |
| | | <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> |
| | |
| | | <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>
|
| | |
| | |
|
| | | <style lang="scss" scoped>
|
| | | @import '@/style/layout-main.scss';
|
| | |
|
| | | .main {
|
| | | display: flex;
|
| | |
|
| | | .content {
|
| | | overflow: hidden;
|
| | | flex: 1;
|
| | | }
|
| | | }
|
| | | </style> |
| | |
| | | <!-- 安全管理 ==> 风险分级管控 => 区域巡检(巡检任务)-->
|
| | | <template>
|
| | | <div>
|
| | | <div class="wrap">
|
| | | <div class="main_header">
|
| | | <div class="header_item">
|
| | | <span class="header_label">巡检任务:</span>
|
| | |
| | | <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;
|
| | |
| | | <!-- 安全管理 ==> 风险分级管控 => 区域巡检(任务打卡)-->
|
| | | <template>
|
| | | <div>
|
| | | <div class="wrap">
|
| | | <div class="main_header">
|
| | | <div class="header_item">
|
| | | <span class="header_label">巡检人:</span>
|
| | |
| | | </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>
|
| | |
| | | <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>
|
| | |
| | | region: '', // 巡检区域
|
| | | res: '', // 巡检结果
|
| | | img: '', // 上传的图片
|
| | | location: '', // 位置
|
| | | }
|
| | | }
|
| | | },
|
| | |
| | | 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)
|
| | | }
|
| | |
| | | <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;
|
| | |
|