From 1b004047f00cc846924209051ee654619c56a249 Mon Sep 17 00:00:00 2001 From: 叶松 <2217086471@qq.com> Date: 星期三, 06 十二月 2023 16:17:42 +0800 Subject: [PATCH] Merge branch 'master' of http://111.30.93.211:10101/r/supipe --- web/src/views/GoodManage/MixingScreen.vue | 566 ++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 445 insertions(+), 121 deletions(-) diff --git a/web/src/views/GoodManage/MixingScreen.vue b/web/src/views/GoodManage/MixingScreen.vue index 5e6d786..0b2382f 100644 --- a/web/src/views/GoodManage/MixingScreen.vue +++ b/web/src/views/GoodManage/MixingScreen.vue @@ -1,17 +1,17 @@ -<!-- 设备管理 ==> 拌合站屏管理--> +<!-- 物资管理 ==> 拌合站屏管理--> <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> @@ -19,40 +19,122 @@ <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> @@ -64,75 +146,270 @@ 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] }, } @@ -142,61 +419,108 @@ <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> \ No newline at end of file -- Gitblit v1.9.3