From 7efc6ed86025b610cab109a2e9f83362740d8ed4 Mon Sep 17 00:00:00 2001 From: 李旭东 <woaiguo66@sina.com> Date: 星期五, 08 十二月 2023 13:29:07 +0800 Subject: [PATCH] Merge branch 'master' of http://111.30.93.211:10101/r/supipe --- web/src/views/GoodManage/MixingScreen.vue | 526 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 526 insertions(+), 0 deletions(-) diff --git a/web/src/views/GoodManage/MixingScreen.vue b/web/src/views/GoodManage/MixingScreen.vue new file mode 100644 index 0000000..38ccb70 --- /dev/null +++ b/web/src/views/GoodManage/MixingScreen.vue @@ -0,0 +1,526 @@ +<!-- 物资管理 ==> 拌和站屏管理--> +<template> + <div class="main"> + <div class="main_header"> + <div class="header_item"> + <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.stata" placeholder="请选择录入方式" clearable> + <el-option v-for="item in queryInfoInmodes" :key="item.value" :label="item.label" + :value="item.value"></el-option> + </el-select> + </div> + <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" clearable></el-date-picker> + </div> + <div class="header_item"> + <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_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 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> +</template> +<script> +export default { + data() { + return { + loading: false, + isRenderDialog: false, + asyncVisible: false, + 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: '', + }] + }, + times: [], // 时间范围 + total: '', + queryInfo: { + pageNum: 1, + pageSize: 9999, + stata: '', // 录入方式 + types: '', // 拌和站屏 + strTime: '', + endTime: '', + }, + } + }, + 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: 1, label: '自动'}, + {value: 2, label: '手动'}, + ] + this.queryInfoInmodeMap = { + 1: '自动', + 2: '手动', + } + this.ruleFormStatus = [ + {value: 1, label: '合格'}, + {value: 2, label: '不合格'}, + {value: 3, label: '待检测'}, + ] + this.ruleFormStatuMap = { + 1: '合格', + 2: '不合格', + 3: '待检测', + } + this.$http = this.$api.Materials.mixingSrcreen + }, + created() { + this.getLists() + this.getScreenNames() + }, + methods: { + // 获取table列表数据 [types相同的放一个数组] + getLists() { + let params = this.queryInfo + this.loading = true + 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 + }) + }, + // 获取配比屏名称 + 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 + }, + // 查询按钮列表信息 + queryReset() { + 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.strTime = times[0] + this.queryInfo.endTime = times[1] + }, + } +} +</script> + +<style lang="scss" scoped> +@import '@/style/layout-main.scss'; + +.main_content_wrap { + height: 100%; + overflow: auto; +} + +.main_content_item { + overflow: hidden; + float: left; + width: 48%; + margin: 1%; + 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