From 1012c74fb9ae6dc2ef7b1eaf4a576413f52bbde9 Mon Sep 17 00:00:00 2001 From: liukewei <huamar123> Date: Thu, 21 Dec 2023 13:51:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=89=A9=E8=B5=84=E7=BB=BC?= =?UTF-8?q?=E5=90=88=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ehs/EhsMaterialDetailController.java | 2 +- .../mapper/ehs/EhsMaterialDetailMapper.xml | 1 + ruoyi-ui/src/views/ehs/ehsMaterial/index.vue | 29 +- .../src/views/ehs/ehsMaterial/indexAll.vue | 567 ++++++++++++++++++ 4 files changed, 595 insertions(+), 4 deletions(-) create mode 100644 ruoyi-ui/src/views/ehs/ehsMaterial/indexAll.vue diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/ehs/EhsMaterialDetailController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/ehs/EhsMaterialDetailController.java index 7fcfca6..4d8dfc2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/ehs/EhsMaterialDetailController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/ehs/EhsMaterialDetailController.java @@ -106,7 +106,7 @@ public class EhsMaterialDetailController extends BaseController ehsMaterial = new EhsMaterial(); ehsMaterial.setMaterialQuantity(ehsMaterialDetail.getOperateType()==1?result2.toString():null); ehsMaterial.setMaterialId(ehsMaterialDetail.getMaterialId()); - ehsMaterialDetail.setInventory(result2); + ehsMaterialDetail.setInventory(ehsMaterialDetail.getOperateType()==1?result2:string1); ehsMaterialDetailService.save(ehsMaterialDetail);// return toAjax(ehsMaterialService.updateById(ehsMaterial)); } diff --git a/ruoyi-system/src/main/resources/mapper/ehs/EhsMaterialDetailMapper.xml b/ruoyi-system/src/main/resources/mapper/ehs/EhsMaterialDetailMapper.xml index ac3b062..bf0f18d 100644 --- a/ruoyi-system/src/main/resources/mapper/ehs/EhsMaterialDetailMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/ehs/EhsMaterialDetailMapper.xml @@ -47,6 +47,7 @@ <if test="operateType != null "> and operate_type = #{operateType}</if> <if test="getOut != null "> and (outbound_user_id is null or outbound_user_id ='')</if> </where> + order by material_detail_id desc </select> <select id="selectEhsMaterialDetailByMaterialDetailId" parameterType="Long" resultMap="EhsMaterialDetailResult"> diff --git a/ruoyi-ui/src/views/ehs/ehsMaterial/index.vue b/ruoyi-ui/src/views/ehs/ehsMaterial/index.vue index 53cda58..4c11334 100644 --- a/ruoyi-ui/src/views/ehs/ehsMaterial/index.vue +++ b/ruoyi-ui/src/views/ehs/ehsMaterial/index.vue @@ -337,6 +337,21 @@ </el-table-column> </el-table> + <pagination + v-show="total>0" + :total="totalDetail" + :page.sync="pageNum" + :limit.sync="pageSize" + @pagination="getListDetail" + /> + <!--<el-pagination + small + :page.sync="pageNum" + :limit.sync="pageSize" + @pagination="getListDetail" + :hide-on-single-page="true" + :total="totalDetail"> + </el-pagination>--> </el-dialog> </div> </template> @@ -360,6 +375,8 @@ data() { return { + + options:material1, curDict:[], // 遮罩层 @@ -387,6 +404,11 @@ ehsMaterialDetailList:[], totalDetail: 0, materialClass:0, + materialDetailId:null, + // 弹框分页 + total1:2, + pageNum: 1, + pageSize: 10, //是否显示部门列表查询条件 deptShow: false, //所有部门列表字典 @@ -645,9 +667,9 @@ }); }); }, - getListDetail(id) { + getListDetail() { this.loading = true; - listEhsMaterialDetail({"materialId":id}).then(response => { + listEhsMaterialDetail({"pageNum" : this.pageNum, "pageSize": this.pageSize,"materialId":this.materialDetailId}).then(response => { this.ehsMaterialDetailList = response.rows; this.totalDetail = response.total; this.loading = false; @@ -655,7 +677,8 @@ }, handleDetail(row) { this.openDetail=true; - this.getListDetail(row.materialId); + this.materialDetailId = row.materialId; + this.getListDetail(); },/** */ handleOutbound(row) { this.$modal.confirm('是否执行出库指令?' ).then(function() { diff --git a/ruoyi-ui/src/views/ehs/ehsMaterial/indexAll.vue b/ruoyi-ui/src/views/ehs/ehsMaterial/indexAll.vue new file mode 100644 index 0000000..e5726c5 --- /dev/null +++ b/ruoyi-ui/src/views/ehs/ehsMaterial/indexAll.vue @@ -0,0 +1,567 @@ +<template> + <div class="app-container"> + <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> + <el-form-item label="部门" prop="deptId" v-show="deptShow"> + <el-select v-model="queryParams.deptId" filterable placeholder="请选择部门" clearable> + <el-option + v-for="dict in allDeptList" + :key="dict.deptId" + :label="dict.deptName" + :value="dict.deptId" + /> + </el-select> + </el-form-item> + <el-form-item label="物资分类" prop="classFirst" > + <el-select v-model="queryParams.classFirst" @change="classFirstChange" placeholder="请选择标签" clearable> + <el-option + v-for="dict in dict.type.material_class_fast" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> + </el-form-item> + <el-form-item label="性质" prop="materialType"> + <el-select v-model="queryParams.materialType" placeholder="请选择性质" clearable> + <el-option + v-for="dict in materialTypeOptions" + :key="dict.value" + :label="dict.label" + :value="dict.value" + ></el-option> + </el-select> + </el-form-item + > + <el-form-item label="物资名称" prop="classSecond"> + <el-cascader style="width:500px" + v-model="queryParams.materialNameId" + :options="options" + :props="{ multiple: false, checkStrictly: true }" + @change="handleQueryChange"></el-cascader> + </el-form-item> +<!-- <el-form-item label="类别" prop="classSecond"> + + <el-cascader style="width:500px" + v-model="queryParams.materialNameId" + :options="options" + :props="{ multiple: false, checkStrictly: true }" + @change="handleQueryChange"></el-cascader> + </el-form-item>--> + +<!-- <el-form-item label="物资名称" prop="materialName"> + <el-input + v-model="queryParams.materialName" + placeholder="请输入物资名称" + clearable + @keyup.enter.native="handleQuery" + /> + </el-form-item>--> + + + + + + + <!--<el-form-item label="规格/参数" prop="materialSpecs"> + <el-input + v-model="queryParams.materialSpecs" + placeholder="请输入规格/参数" + clearable + @keyup.enter.native="handleQuery" + /> + </el-form-item> + <el-form-item label="数量" prop="materialQuantity"> + <el-input + v-model="queryParams.materialQuantity" + placeholder="请输入数量" + clearable + @keyup.enter.native="handleQuery" + /> + </el-form-item> + <el-form-item label="储备地点" prop="reserveLocation"> + <el-input + v-model="queryParams.reserveLocation" + placeholder="请输入储备地点" + clearable + @keyup.enter.native="handleQuery" + /> + </el-form-item> + <el-form-item label="管理责任人" prop="managerPerson"> + <el-input + v-model="queryParams.managerPerson" + placeholder="请输入管理责任人" + clearable + @keyup.enter.native="handleQuery" + /> + </el-form-item> + <el-form-item label="联系电话" prop="tel"> + <el-input + v-model="queryParams.tel" + placeholder="请输入联系电话" + clearable + @keyup.enter.native="handleQuery" + /> + </el-form-item>--> + <el-form-item> + <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> + <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> + </el-form-item> + </el-form> + + <el-row :gutter="10" class="mb8"> + + <el-col :span="1.5"> + <el-button + type="warning" + plain + icon="el-icon-download" + size="mini" + @click="handleExport" + v-hasPermi="['ehsMaterial:ehsMaterial:export']" + >导出</el-button> + </el-col> + <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> + </el-row> + + <el-table v-loading="loading" :data="ehsMaterialList" @selection-change="handleSelectionChange"> + <el-table-column type="selection" width="55" align="center" /> + <el-table-column label="上报部门" align="center" prop="deptName" /> + <!-- <el-table-column label="主键" align="center" prop="materialId" />--> + <el-table-column label="性质" align="center" prop="materialType"> + <template slot-scope="scope"> + <span> {{ materialTypeOptions[scope.row.materialType-1].label}}</span> + </template> + </el-table-column> + <el-table-column label="分类" align="center" prop="classFirst"> + <template slot-scope="scope"> + <dict-tag :options="dict.type.material_class_fast" :value="scope.row.classFirst"/> + </template> + </el-table-column> + <el-table-column label="类别" align="center" prop="classSecond"> + <template slot-scope="scope"> + <span>{{classToStr(scope.row.classSecond,1)}}</span> + </template> + </el-table-column> + <el-table-column label="物资名称" align="center" prop="materialName" > + <template slot-scope="scope"> + <span>{{classToStr(scope.row.materialName,2)}}</span> + </template> + </el-table-column> + <el-table-column label="规格/参数" align="center" prop="materialSpecs" /> + <el-table-column label="数量" align="center" prop="materialQuantity" /> + <el-table-column label="待处理出库" align="center" prop="sendQuantity" /> + <el-table-column label="储备地点" align="center" prop="reserveLocation" /> + <el-table-column label="管理责任人" align="center" prop="managerPerson" /> + <el-table-column label="联系电话" align="center" prop="tel" /> + <el-table-column label="更新时间" align="center" prop="updateTime" > + <template slot-scope="scope"> + <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span> + </template> + </el-table-column> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> + <template slot-scope="scope"> + + <el-button + size="mini" + type="text" + icon="el-icon-delete" + @click="handleDetail(scope.row)" + v-hasPermi="['EhsMaterialDetail:EhsMaterialDetail:list']" + >出入库明细</el-button> + </template> + </el-table-column> + </el-table> + + <pagination + v-show="total>0" + :total="total" + :page.sync="queryParams.pageNum" + :limit.sync="queryParams.pageSize" + @pagination="getList" + /> + + <el-dialog :title="titleDetail" :visible.sync="openDetail" width="800px" append-to-body> + <el-table v-loading="loading" :data="ehsMaterialDetailList" @selection-change="handleSelectionChange"> + <el-table-column type="selection" width="55" align="center" /> +<!-- <el-table-column label="主键" align="center" prop="materialDetailId" /> + <el-table-column label="物资表" align="center" prop="materialId" />--> + <el-table-column label="出库指令发送人" align="center" prop="sendUserName" /> + <el-table-column label="出库指令数量" align="center" prop="sendQuantity" /> + <el-table-column label="出库指令发送时间" align="center" prop="sendTime" width="180"> + <template slot-scope="scope"> + <span>{{ parseTime(scope.row.sendTime, '{y}-{m}-{d}') }}</span> + </template> + </el-table-column> + <el-table-column label="出/入库类型" align="center" prop="sendTime" width="180"> + <template slot-scope="scope"> + <span>{{ scope.row.operateType==0?"出库":"入库" }}</span> + </template> + </el-table-column> + <el-table-column label="出/入库人" align="center" prop="outboundUserName" /> + <el-table-column label="出/入库数量" align="center" prop="outboundQuantity" /> + <el-table-column label="当前库存" align="center" prop="inventory" /> + <el-table-column label="操作时间" align="center" prop="outboundTime" width="180"> + <template slot-scope="scope"> + <span>{{ parseTime(scope.row.outboundTime, '{y}-{m}-{d}') }}</span> + </template> + </el-table-column> + + </el-table> + <pagination + v-show="total>0" + :total="totalDetail" + :page.sync="pageNum" + :limit.sync="pageSize" + @pagination="getListDetail" + /> + + </el-dialog> + </div> +</template> + +<script> + import { listEhsMaterial, getEhsMaterial, delEhsMaterial, addEhsMaterial, updateEhsMaterial } from "@/api/ehs/ehsMaterial"; + import {listAllDept } from "@/api/system/dept"; + import {addEhsMaterialDetail,listEhsMaterialDetail, updateEhsMaterialDetail , delEhsMaterialDetail} from "@/api/ehs/EhsMaterialDetail"; + import material1 from '../../../assets/materialClass.json'; + import material2 from '../../../assets/materialClass2.json'; + import material3 from '../../../assets/materialClass3.json'; + import material4 from '../../../assets/materialClass4.json'; + import material5 from '../../../assets/materialClass5.json'; + import material6 from '../../../assets/materialClass6.json'; + import material7 from '../../../assets/materialClass7.json'; + import material8 from '../../../assets/materialClass8.json'; + export default { + name: "EhsMaterial", + dicts: ['material_class_fast' ], + data() { + return { + options:material1, + curDict:[], + // 遮罩层 + loading: true, + // 选中数组 + ids: [], + // 非单个禁用 + single: true, + // 非多个禁用 + multiple: true, + // 显示搜索条件 + showSearch: true, + // 总条数 + total: 0, + // 物资信息包含 通用应急救援装备”“防汛抗旱应急救援装备”“森林防灭火应急救援装备”“救灾物资”表格数据 + ehsMaterialList: [], + // 弹出层标题 + title: "", + // 是否显示弹出层 + open: false, + // 弹出层标题 + titleDetail: "出入库明细", + // 是否显示弹出层 + openDetail: false, + ehsMaterialDetailList:[], + totalDetail: 0, + materialClass:0, + materialDetailId:null, + // 弹框分页 + total1:2, + pageNum: 1, + pageSize: 10, + //是否显示部门列表查询条件 + deptShow: false, + //所有部门列表字典 + allDeptList: [], + sendQuantity:"",//发送的指令 + materialTypeOptions: [{ + value: 1, + label: '自储', + raw:{listClass: 'default'} + }, { + value: 2, + label: '社会代储', + raw:{listClass: 'default'} + }], + // 查询参数 + queryParams: { + pageNum: 1, + pageSize: 10, + materialType: null, + classSecond: null, + materialName: null, + materialSpecs: null, + materialQuantity: null, + reserveLocation: null, + managerPerson: null, + tel: null, + classFirst:null + }, + }; + }, + created() { + this.getList(); + this.materialClass = this.$route.query.classFirst; + this.getListAllDept(); + this.deptShow = this.$store.state.user.parentId==0 ?true :false; + + }, + + methods: { + /** 查询物资信息包含 通用应急救援装备”“防汛抗旱应急救援装备”“森林防灭火应急救援装备”“救灾物资”列表 */ + getList() { + this.loading = true; + listEhsMaterial(this.queryParams).then(response => { + this.ehsMaterialList = response.rows; + this.total = response.total; + this.loading = false; + }); + }, + /** 单位信息列表 */ + getListAllDept() { + console.log(this.$store.state.user.deptId); + this.loading = true; + listAllDept().then(response => { + this.allDeptList = response.data; + this.loading = false; + }); + }, + + // 取消按钮 + cancel() { + this.open = false; + this.reset(); + }, + // 表单重置 + reset() { + this.form = { + materialId: null, + materialType: null, + classFirst: null, + classSecond: null, + materialName: null, + materialSpecs: null, + materialQuantity: null, + reserveLocation: null, + managerPerson: null, + tel: null, + createBy: null, + createTime: null, + updateBy: null, + updateTime: null, + remark: null, + deptId: null, + createUserId: null, + updateUserId: null, + classFirst:this.$route.query.classFirst + }; + this.resetForm("form"); + }, + /** 搜索按钮操作 */ + handleQuery() { + this.queryParams.pageNum = 1; + this.getList(); + }, + /** 重置按钮操作 */ + resetQuery() { + this.queryParams.materialNameId = null; + this.queryParams.materialName = null; + this.resetForm("queryForm"); + this.handleQuery(); + }, + // 多选框选中数据 + handleSelectionChange(selection) { + this.ids = selection.map(item => item.materialId) + this.single = selection.length!==1 + this.multiple = !selection.length + }, + /** 新增按钮操作 */ + handleAdd() { + this.reset(); + this.open = true; + this.title = "添加物资信息包含"; + }, + /** 修改按钮操作 */ + handleUpdate(row) { + this.reset(); + const materialId = row.materialId || this.ids + getEhsMaterial(materialId).then(response => { + this.form = response.data; + this.form.materialNameId = []; + this.form.materialNameId.push(this.form.classSecond); + this.form.materialNameId.push(this.form.materialName); + console.log(this.form.materialNameId); + this.open = true; + this.title = "修改物资信息"; + }); + }, + /** 提交按钮 */ + submitForm() { + this.$refs["form"].validate(valid => { + if (valid) { + this.form.classSecond = this.form.materialNameId[0]; + this.form.materialName = this.form.materialNameId[1]; + if (this.form.materialId != null) { + updateEhsMaterial(this.form).then(response => { + this.$modal.msgSuccess("修改成功"); + this.open = false; + this.getList(); + }); + } else { + addEhsMaterial(this.form).then(response => { + this.$modal.msgSuccess("新增成功"); + this.open = false; + this.getList(); + }); + } + } + }); + }, + /** 删除按钮操作 */ + handleDelete(row) { + const materialIds = row.materialId || this.ids; + this.$modal.confirm('是否确认删除物资信息' + materialIds + '"的数据项?').then(function() { + return delEhsMaterial(materialIds); + }).then(() => { + this.getList(); + this.$modal.msgSuccess("删除成功"); + }).catch(() => {}); + }, + /** 导出按钮操作 */ + handleExport() { + this.download('ehsMaterial/ehsMaterial/export', { + ...this.queryParams + }, `ehsMaterial_${new Date().getTime()}.xlsx`) + }, + handleSendCommand(row) { + if(row.sendQuantity!=null){ + this.$message.error('此物资已有待处理出库,无法重复发送出库指令!'); + return; + } + this.$prompt('请输入出库数量', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + inputPattern: /^\d+$|^\d+[.]?\d+$/, + inputErrorMessage: '出库数量只能是数字' + }).then(({ value }) => { + this.loading = true; + //this.sendQuantity = value; + addEhsMaterialDetail({"sendQuantity":value,"materialId":row.materialId,"operateType":0}).then(response => { + this.$modal.msgSuccess("出库指令发送成功"); + this.loading = false; + this.getList(); + }); + }).catch(() => { + this.$message({ + type: 'info', + message: '取消输入' + }); + }); + }, + getListDetail() { + this.loading = true; + listEhsMaterialDetail({"pageNum" : this.pageNum, "pageSize": this.pageSize,"materialId":this.materialDetailId}).then(response => { + this.ehsMaterialDetailList = response.rows; + this.totalDetail = response.total; + this.loading = false; + }); + }, + handleDetail(row) { + this.openDetail=true; + this.materialDetailId = row.materialId; + this.getListDetail(); + },/** */ + handleOutbound(row) { + this.$modal.confirm('是否执行出库指令?' ).then(function() { + return updateEhsMaterialDetail({"materialId":row.materialId}); + }).then(() => { + this.getList(); + this.$modal.msgSuccess("执行成功"); + }).catch(() => {}); + }, + /** 入库 */ + handleInbound(row) { + this.$prompt('请输入入库数量', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + inputPattern: /^\d+$|^\d+[.]?\d+$/, + inputErrorMessage: '入库数量只能是数字' + }).then(({ value }) => { + this.loading = true; + //this.sendQuantity = value; + addEhsMaterialDetail({"outboundQuantity":value,"materialId":row.materialId,"operateType":1}).then(response => { + this.$modal.msgSuccess("入库成功"); + this.loading = false; + this.getList(); + }); + }).catch(() => { + this.$message({ + type: 'info', + message: '取消输入' + }); + }); + }, + handleDelDetail(row) { + this.$modal.confirm('是否终止出库指令?' ).then(function() { + return delEhsMaterialDetail(row.materialId); + }).then(() => { + this.getList(); + this.$modal.msgSuccess("终止成功"); + }).catch(() => {}); + }, + handleChange(value) { + console.log(value); + }, + handleQueryChange(value) { + if(value.length==2){ + this.queryParams.classSecond = value[0] ; + this.queryParams.materialName = value[1] ; + }else if(value.length==1){ + this.queryParams.classSecond = value[0] ; + } + }, + classToStr(value,type) { + let str =""; + if(type==1){ + this.options.forEach(item =>{ + if(item.value==value){ + str = item.label; + } + }) + }else{ + this.options.forEach(item =>{ + let v = value.split("-"); + if(item.value==v[0]){ + item.children.forEach(it =>{ + if(it.value==value){ + str = it.label; + } + }) + } + }) + } + console.log(str); + return str; + }, + classFirstChange(value){ + if (value == 1){ + this.options = material1; + }else if (value == 2){ + this.options = material2; + }else if (value == 3){ + this.options = material3; + }else if (value == 4){ + this.options = material4; + }else if (value == 5){ + this.options = material5; + }else if (value == 6){ + this.options = material6; + }else if (value == 7){ + this.options = material7; + }else if (value == 8){ + this.options = material8; + } + + } + } + }; +</script>