| | |
| | | <!-- 设备管理 ==> 拌合站屏管理--> |
| | | <!-- 物资管理 ==> 拌合站屏管理--> |
| | | <template> |
| | | <div class="main"> |
| | | <div class="main_header"> |
| | | <div class="header_item"> |
| | | <span class="header_label">拌合站屏:</span> |
| | | <el-select size="mini" v-model="queryInfo.screen" placeholder="请选择拌合站屏"> |
| | | <el-option v-for="item in queryInfoScreens" :key="item.value" :label="item.label" |
| | | :value="item.value"></el-option> |
| | | <span class="header_label">拌和站屏:</span> |
| | | <el-select size="mini" v-model="queryInfo.types" placeholder="请选择拌和站屏" clearable> |
| | | <el-option v-for="item in selects.screenNames" :key="item.value" :label="item.label" |
| | | :value="item.value2"></el-option> |
| | | </el-select> |
| | | </div> |
| | | <div class="header_item"> |
| | | <span class="header_label">录入方式:</span> |
| | | <el-select size="mini" v-model="queryInfo.inmode" placeholder="请选择录入方式"> |
| | | <el-select size="mini" v-model="queryInfo.stata" placeholder="请选择录入方式" clearable> |
| | | <el-option v-for="item in queryInfoInmodes" :key="item.value" :label="item.label" |
| | | :value="item.value"></el-option> |
| | | </el-select> |
| | |
| | | <div class="header_item"> |
| | | <span class="header_label">创建时间:</span> |
| | | <el-date-picker type="daterange" v-model="times" value-format="yyyy-MM-dd" start-placeholder="起始时间" |
| | | end-placeholder="结束时间" @change="changeTime" clear></el-date-picker> |
| | | end-placeholder="结束时间" @change="changeTime" clearable></el-date-picker> |
| | | </div> |
| | | <div class="header_item"> |
| | | <el-button icon="el-icon-search" v-permission="'search'" @click="queryReset">查询</el-button> |
| | | <el-button icon="el-icon-plus" v-permission="'insert'" @click="addRow">新增</el-button> |
| | | <el-button v-permission="'search'" @click="queryReset">查询</el-button> |
| | | <el-button v-permission="'insert'" @click="addRow">新增</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="main_content"> |
| | | <div class="main_content_item" v-for="(item, index) in ['', '', '', '', '',]" :key="index"> |
| | | |
| | | <div class="main_content_wrap"> |
| | | <div class="main_content_item" v-for="(list, index) in dataLists" :key="index"> |
| | | <el-row> |
| | | <el-col :span="24 / list.length" v-for="(item, index) in list" :key="index"> |
| | | <div class="head"> |
| | | <span class="left_title">{{ item.siloName }}</span> |
| | | <span v-if="index + 1 === list.length" class="right_title">录入方式: <span style="color:#39B5FE">{{ |
| | | queryInfoInmodeMap[item.stata] }}</span></span> |
| | | </div> |
| | | <div class="list"> |
| | | <div class="item"> |
| | | <span class="name">屏幕编号:</span> |
| | | <span class="value">{{ item.types }}</span> |
| | | </div> |
| | | <div class="item"> |
| | | <span class="name">规格型号:</span> |
| | | <span class="value">{{ item.spec }}</span> |
| | | </div> |
| | | <div class="item"> |
| | | <span class="name">产地名称:</span> |
| | | <span class="value">{{ item.producer }}</span> |
| | | </div> |
| | | <div class="item"> |
| | | <span class="name">炉(批)号:</span> |
| | | <span class="value">{{ item.stove }}</span> |
| | | </div> |
| | | <div class="item"> |
| | | <span class="name">进场数量:</span> |
| | | <span class="value">{{ item.inNum }}</span> |
| | | </div> |
| | | <div class="item"> |
| | | <span class="name">进场日期:</span> |
| | | <span class="value">{{ item.inDate }}</span> |
| | | </div> |
| | | <div class="item"> |
| | | <span class="name">检验日期:</span> |
| | | <span class="value">{{ item.inspectDate }}</span> |
| | | </div> |
| | | <div class="item"> |
| | | <span class="name">检验状态:</span> |
| | | <span :class="['value', 'style' + item.inspectState]">{{ ruleFormStatuMap[item.inspectState] }}</span> |
| | | </div> |
| | | <div class="item"> |
| | | <span class="name">报告编号:</span> |
| | | <span class="value">{{ item.reportNumber }}</span> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row class="foot"> |
| | | <el-button size="mini" v-permission="'delete'" @click="deleteRow(index)">删除</el-button> |
| | | <el-button size="mini" v-permission="'update'" @click="updateRow(index)">修改</el-button> |
| | | </el-row> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- 详情dialog --> |
| | | <el-dialog width="400px" class="prop_dialog" v-if="isRenderDialog" title="详情" :visible.sync="asyncVisible"> |
| | | |
| | | <el-form class="rule_form" label-width="auto"> |
| | | |
| | | <div class="divider"></div> |
| | | |
| | | <el-form-item label="巡检任务:">{{ info.task }}</el-form-item> |
| | | |
| | | <el-form-item label="巡检标准:">{{ info.standard }}</el-form-item> |
| | | |
| | | <el-form-item label="巡检人员:">{{ info.name }}</el-form-item> |
| | | |
| | | <div class="divider"><span>巡检路线</span></div> |
| | | |
| | | <div class="regions"> |
| | | <div class="region" v-for=" item in info.regions " :key="item.regionId">{{ |
| | | item.region }} |
| | | </div> |
| | | </div> |
| | | <!-- dialog --> |
| | | <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="请选择拌合站屏" |
| | | @change="changeSelectForm($event)"> |
| | | <el-option v-for="item in selects.screenNames" :key="item.value" :label="item.label" |
| | | :value="item.value"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-row :gutter="100"> |
| | | <el-col :class="'elCol elCol' + index" :span="12" v-for="(item, index) in ruleForm.infos" :key="index"> |
| | | <el-form-item label="屏幕编号:" :prop="`infos.${index}.num`"> |
| | | <el-input v-model="item.num" size="mini" disabled></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="规格型号:" :prop="`infos.${index}.spec`"> |
| | | <el-input v-model="item.spec" size="mini" placeholder="请输入规格型号" clearable></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="产地名称:" :prop="`infos.${index}.producer`"> |
| | | <el-input v-model="item.producer" size="mini" placeholder="请输入产地名称" clearable></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="炉(批)号:" :prop="`infos.${index}.stove`"> |
| | | <el-input v-model="item.stove" size="mini" placeholder="请输入炉(批)号" clearable></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="进场数量:" :prop="`infos.${index}.inNum`"> |
| | | <el-input v-model="item.inNum" size="mini" placeholder="请输入进场数量" clearable></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="进场日期:" :prop="`infos.${index}.inDate`"> |
| | | <el-date-picker v-model="item.inDate" size="mini" value-format="yyyy-MM-dd" placeholder="请选择检验日期" |
| | | clearable></el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="检验日期:" :prop="`infos.${index}.inspectDate`"> |
| | | <el-date-picker v-model="item.inspectDate" size="mini" value-format="yyyy-MM-dd" placeholder="请选择检验日期" |
| | | clearable></el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="检验状态:" :prop="`infos.${index}.inspectState`"> |
| | | <el-select v-model="item.inspectState" size="mini" placeholder="请选择检验状态" clearable> |
| | | <el-option v-for="item in ruleFormStatus" :key="item.value" :label="item.label" |
| | | :value="item.value"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="报告编号:" :prop="`infos.${index}.reportNumber`"> |
| | | <el-input v-model="item.reportNumber" size="mini" placeholder="请输入报告编号" clearable></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <div slot="footer"> |
| | | <el-button @click="asyncVisible = false">取 消</el-button> |
| | | <el-button class="submit_btn" @click="onSubmit('ruleForm')">提 交</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | </div> |
| | |
| | | loading: false, |
| | | isRenderDialog: false, |
| | | asyncVisible: false, |
| | | |
| | | info: { // 详情信息 |
| | | task: '', |
| | | standard: '', |
| | | name: '', |
| | | regions: [], |
| | | submitMode: '', // add update |
| | | dataLists: [], // [[],[],[]] |
| | | selects: { |
| | | screenNames: [], // 拌合站屏 |
| | | screenNameIds: {}, // 拌合站屏id map |
| | | }, // 下拉框状态选择汇总 |
| | | ruleForm: { |
| | | name: '', // 下拉框屏名称 |
| | | mixingIds: '', // 修改id [] |
| | | infos: [{ |
| | | material: '', // 原料名称 |
| | | siloId: '', // 屏幕编号id |
| | | num: '', // 屏幕编号 |
| | | spec: '', |
| | | producer: '', |
| | | stove: '', |
| | | inNum: '', |
| | | inDate: '', |
| | | inspectDate: '', |
| | | inspectState: '', |
| | | reportNumber: '', |
| | | }, { |
| | | material: '', |
| | | siloId: '', // 屏幕id |
| | | num: '', // 屏幕编号 |
| | | spec: '', |
| | | producer: '', |
| | | stove: '', |
| | | inNum: '', |
| | | inDate: '', |
| | | inspectDate: '', |
| | | inspectState: '', |
| | | reportNumber: '', |
| | | }] |
| | | }, |
| | | userId: '', // 存储点击后的用户id |
| | | taskId: '', // 存储点击后的巡检任务id |
| | | times: [], // 时间范围 |
| | | total: '', |
| | | queryInfo: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | inmode: '', // 录入方式 |
| | | screen: '', // 拌合站屏 |
| | | startTime: '', |
| | | pageSize: 9999, |
| | | stata: '', // 录入方式 |
| | | types: '', // 拌合站屏 |
| | | strTime: '', |
| | | endTime: '', |
| | | }, |
| | | regionInfos: { // 巡检路线详情 |
| | | isRenderDialog: false, |
| | | asyncVisible: false, |
| | | time: '', // 巡检时间 |
| | | region: '', // 巡检区域 |
| | | res: '', // 巡检结果 |
| | | img: '', // 上传的图片 |
| | | location: '', // 位置 |
| | | } |
| | | } |
| | | }, |
| | | computed: { |
| | | dialogTitle() { |
| | | return this.submitMode === 'update' ? '修改' : '添加' |
| | | }, |
| | | isUpdate() { |
| | | return this.submitMode === 'update' |
| | | }, |
| | | }, |
| | | beforeCreate() { |
| | | this.rules = { |
| | | name: [{required: true, message: '请选择拌合站屏', trigger: 'change'}], |
| | | infos: [{ |
| | | num: [{required: true, message: '请输入', trigger: 'blur'}], |
| | | spec: [{required: true, message: '请输入', trigger: 'blur'}], |
| | | producer: [{required: true, message: '请输入', trigger: 'blur'}], |
| | | stove: [{required: true, message: '请输入', trigger: 'blur'}], |
| | | inNum: [{required: true, message: '请输入', trigger: 'blur'}], |
| | | inDate: [{required: true, message: '请输入', trigger: 'blur'}], |
| | | inspectDate: [{required: true, message: '请输入', trigger: 'blur'}], |
| | | inspectState: [{required: true, message: '请选择', trigger: 'blur'}], |
| | | reportNumber: [{required: true, message: '请输入', trigger: 'blur'}], |
| | | }, { |
| | | spec: [{required: true, message: '请输入', trigger: 'blur'}], |
| | | producer: [{required: true, message: '请输入', trigger: 'blur'}], |
| | | stove: [{required: true, message: '请输入', trigger: 'blur'}], |
| | | inNum: [{required: true, message: '请输入', trigger: 'blur'}], |
| | | inDate: [{required: true, message: '请输入', trigger: 'blur'}], |
| | | inspectDate: [{required: true, message: '请输入', trigger: 'blur'}], |
| | | inspectState: [{required: true, message: '请选择', trigger: 'blur'}], |
| | | reportNumber: [{required: true, message: '请输入', trigger: 'blur'}], |
| | | }] |
| | | } |
| | | |
| | | this.queryInfoInmodes = [ |
| | | {value: '0', label: '手动'}, |
| | | {value: '1', label: '自动'}, |
| | | {value: 1, label: '自动'}, |
| | | {value: 2, label: '手动'}, |
| | | ] |
| | | this.queryInfoScreens = [ |
| | | {value: '0', label: '1-1'}, |
| | | {value: '1', label: '1-2'}, |
| | | this.queryInfoInmodeMap = { |
| | | 1: '自动', |
| | | 2: '手动', |
| | | } |
| | | this.ruleFormStatus = [ |
| | | {value: 1, label: '合格'}, |
| | | {value: 2, label: '不合格'}, |
| | | {value: 3, label: '待检测'}, |
| | | ] |
| | | this.$http = this.$api.Safety.RiskGrad.polling |
| | | this.ruleFormStatuMap = { |
| | | 1: '合格', |
| | | 2: '不合格', |
| | | 3: '待检测', |
| | | } |
| | | this.$http = this.$api.Materials.mixingSrcreen |
| | | }, |
| | | created() { |
| | | this.setTableColumn() |
| | | this.getLists() |
| | | this.getScreenNames() |
| | | }, |
| | | methods: { |
| | | // 获取table列表数据 |
| | | // 获取table列表数据 [types相同的放一个数组] |
| | | getLists() { |
| | | let params = this.queryInfo |
| | | this.loading = true |
| | | this.$http.taskcardGetlists(params).then(res => { |
| | | if (res.statusMsg === 'ok') { |
| | | console.log(res) |
| | | this.$http.getLists(params).then(res => { |
| | | if (res.statusMsg === 'ok' && res.data) { |
| | | let tempMap = {} |
| | | res.data.forEach(item => { |
| | | if (!tempMap[item.types]) { |
| | | tempMap[item.types] = [] |
| | | } |
| | | tempMap[item.types].push({...item}) |
| | | }) |
| | | this.dataLists = Object.values(tempMap) |
| | | } |
| | | this.loading = false |
| | | }) |
| | | }, |
| | | // 初始化 table 配置 |
| | | setTableColumn() { |
| | | // 获取配比屏名称 |
| | | async getScreenNames() { |
| | | const params = {pageNum: 1, pageSize: 9999} |
| | | let {data} = await this.$http.getScreenNames(params) |
| | | |
| | | let tempIds = {} |
| | | let tempTypes = {} |
| | | data.forEach(item => { |
| | | if (!tempIds[item.siloId]) { |
| | | tempIds[item.siloId] = {...item} |
| | | } |
| | | |
| | | if (!tempTypes[item.types]) { |
| | | tempTypes[item.types] = [] |
| | | } |
| | | tempTypes[item.types].push({...item}) |
| | | }) |
| | | |
| | | let temps = [] |
| | | Object.values(tempTypes).forEach(list => { |
| | | let value = '' |
| | | let label = '' |
| | | let type = '' |
| | | list.forEach((item, index) => { |
| | | value += item.siloId + ((index + 1) === list.length ? '' : ';') |
| | | label += item.siloName + ((index + 1) === list.length ? '' : ';') |
| | | type = item.types |
| | | }) |
| | | temps.push({ |
| | | label: label, |
| | | value: value, |
| | | value2: type, |
| | | }) |
| | | }) |
| | | |
| | | this.selects.screenNames.push(...temps) |
| | | this.selects.screenNameIds = tempIds |
| | | }, |
| | | addRow() { }, |
| | | // 查询按钮列表信息 |
| | | queryReset() { |
| | | this.queryInfo.pageNum = 1 |
| | | this.queryInfo.pageSize = 10 |
| | | this.getLists() |
| | | }, |
| | | resetForm(formName) { |
| | | this.$refs[formName].resetFields() |
| | | }, |
| | | showDialog() { |
| | | return new Promise(resolve => { |
| | | if (!this.isRenderDialog) { |
| | | this.isRenderDialog = true |
| | | } |
| | | |
| | | this.asyncVisible = true |
| | | |
| | | this.$nextTick(() => { |
| | | resolve() |
| | | }) |
| | | }) |
| | | }, |
| | | closeDialog() { |
| | | this.asyncVisible = false |
| | | this.resetForm('ruleForm') |
| | | }, |
| | | addRow() { |
| | | this.submitMode = 'add' |
| | | this.showDialog() |
| | | }, |
| | | updateRow(i) { |
| | | this.submitMode = 'update' |
| | | this.showDialog().then(() => { |
| | | let mixingIds = [] |
| | | let nameIds = '' |
| | | this.dataLists[i].forEach((item, index) => { |
| | | nameIds += item.siloId + ((index + 1) === this.dataLists[i].length ? '' : ';') |
| | | mixingIds.push(item.siloId) |
| | | this.ruleForm.infos[index] = Object.assign(this.ruleForm.infos[index], this.dataLists[i][index]) |
| | | }) |
| | | this.ruleForm.name = nameIds |
| | | this.ruleForm.mixingIds = mixingIds |
| | | this.changeSelectForm(nameIds) |
| | | }) |
| | | }, |
| | | deleteRow(i) { |
| | | this.$confirm("该操作将删除该信息,是否继续删除?", "提示", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning" |
| | | }).then(() => { |
| | | let mixingIds = [] |
| | | this.dataLists[i].forEach(item => { |
| | | mixingIds.push(item.mixingId) |
| | | }) |
| | | this.$http.delete({mixingIds: mixingIds}).then(res => { |
| | | if (res.statusMsg === 'ok') { |
| | | this.getLists() |
| | | this.$message.success("删除成功!") |
| | | } else { |
| | | this.$message.warning(res.statusMsg) |
| | | } |
| | | }) |
| | | }) |
| | | }, |
| | | onSubmit(formName) { |
| | | this.$refs[formName].validate((valid) => { |
| | | if (!valid) return false |
| | | const params = {mixingList: this.ruleForm.infos} |
| | | if (this.isUpdate) { |
| | | // 更新 |
| | | this.$http.update(params).then((res) => { |
| | | if (res.statusMsg === 'ok') { |
| | | this.closeDialog() |
| | | this.getLists() |
| | | this.$message.success('更新成功!') |
| | | } else { |
| | | this.$message.warning(res.statusMsg) |
| | | } |
| | | }) |
| | | } else { |
| | | // 添加 |
| | | this.$http.insert(params).then((res) => { |
| | | if (res.statusMsg === 'ok') { |
| | | this.closeDialog() |
| | | this.getLists() |
| | | this.$message.success('添加成功!') |
| | | } else { |
| | | this.$message.warning(res.statusMsg) |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | changeSelectForm(value) { |
| | | let ids = value && value.split(';') |
| | | ids.forEach((item, index) => { |
| | | this.ruleForm.infos[index].siloId = item |
| | | this.ruleForm.infos[index].material = this.selects.screenNameIds[item].siloName |
| | | this.ruleForm.infos[index].num = this.selects.screenNameIds[item].types |
| | | }) |
| | | }, |
| | | changeTime(times) { |
| | | times = times || ['', ''] |
| | | this.queryInfo.startTime = times[0] |
| | | this.queryInfo.strTime = times[0] |
| | | this.queryInfo.endTime = times[1] |
| | | }, |
| | | } |
| | |
| | | <style lang="scss" scoped> |
| | | @import '@/style/layout-main.scss'; |
| | | |
| | | .rule_form { |
| | | color: #fff; |
| | | |
| | | ::v-deep .el-form-item__content { |
| | | display: block; |
| | | } |
| | | |
| | | .image { |
| | | flex: none; |
| | | width: 91px; |
| | | height: 120px; |
| | | margin-right: 15px; |
| | | border-radius: 5px; |
| | | border: 1px solid #0c5983; |
| | | |
| | | img { |
| | | width: 100%; |
| | | } |
| | | } |
| | | .main_content_wrap { |
| | | height: 100%; |
| | | overflow: auto; |
| | | } |
| | | |
| | | .regions { |
| | | text-align: center; |
| | | |
| | | .region { |
| | | line-height: 34px; |
| | | margin-bottom: 16px; |
| | | background: rgba(56, 175, 247, .25); |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | |
| | | .divider { |
| | | position: relative; |
| | | margin-bottom: 30px; |
| | | text-indent: 10px; |
| | | color: #fff; |
| | | border-left: 3px solid #18F6F8; |
| | | |
| | | &::after { |
| | | content: ""; |
| | | position: absolute; |
| | | left: 0; |
| | | bottom: -8px; |
| | | width: 100%; |
| | | padding: 20px 0; |
| | | border-bottom: 1px solid #0C4D6F; |
| | | } |
| | | } |
| | | |
| | | .main_content .main_content_item { |
| | | .main_content_item { |
| | | overflow: hidden; |
| | | float: left; |
| | | width: 48%; |
| | | height: 200px; |
| | | margin: 1%; |
| | | border: 1px solid red; |
| | | font-size: 15px; |
| | | color: #ddd; |
| | | border: 1px solid #39B5FE; |
| | | border-radius: 5px; |
| | | |
| | | .el-row { |
| | | border: 1px solid #39B5FE; |
| | | margin: -1px; |
| | | |
| | | .el-col { |
| | | height: 100%; |
| | | margin: 0 0 0 -1px; |
| | | border-left: 1px solid #39B5FE; |
| | | } |
| | | } |
| | | |
| | | .head { |
| | | height: 40px; |
| | | margin: -1px; |
| | | line-height: 40px; |
| | | text-indent: 30px; |
| | | background: rgba(30, 95, 147, .6); |
| | | border: 1px solid #39B5FE; |
| | | |
| | | .left_title { |
| | | float: left; |
| | | } |
| | | |
| | | .right_title { |
| | | float: right; |
| | | margin-right: 10px; |
| | | } |
| | | } |
| | | |
| | | .list { |
| | | padding: 0 10px 20px 10px; |
| | | |
| | | .item { |
| | | display: flex; |
| | | flex: 1; |
| | | margin-top: 20px; |
| | | |
| | | .name { |
| | | margin-right: 8px; |
| | | text-indent: 6px; |
| | | white-space: nowrap; |
| | | } |
| | | |
| | | .value { |
| | | color: #39B5FE; |
| | | |
| | | &.style1 { |
| | | font-size: 20px; |
| | | line-height: 20px; |
| | | color: #16F849; |
| | | } |
| | | |
| | | &.style2 { |
| | | font-size: 20px; |
| | | line-height: 20px; |
| | | color: red; |
| | | } |
| | | |
| | | &.style3 { |
| | | font-size: 20px; |
| | | line-height: 20px; |
| | | color: #FF6600; |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | .foot { |
| | | height: 40px; |
| | | line-height: 40px; |
| | | text-align: center; |
| | | |
| | | .el-button { |
| | | padding: 6px 20px |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | .rule_form { |
| | | overflow-x: hidden; |
| | | |
| | | .elCol0 { |
| | | border-right: 1px solid #39B5FE; |
| | | } |
| | | } |
| | | </style> |