Sfoglia il codice sorgente

景聚庭-商品管理功能调整

huangguoce 1 giorno fa
parent
commit
3daf33341d

+ 43 - 3
src/views/flowable/task/TaskForm.vue

@@ -60,6 +60,37 @@
 					</vxe-column>
 				</vxe-table>
 			</el-tab-pane>
+			<el-tab-pane label="入库修改历史" v-if="psiWareHouseId" name="form-psi-edit">
+				<vxe-table border="inner" size="mini" max-height="1000px" :data="dataListHi">
+					<vxe-column type="seq" width="60" title="序号"></vxe-column>
+					<!-- <vxe-column min-width="120" align="center" title="修改类型" field="updateTradeType">
+						<template #default="scope">
+							<span v-if="commonJS.isNotEmpty(scope.row.updateTradeType)"> {{ scope.row.updateTradeType }}
+							</span>
+							<span v-else> -- </span>
+						</template>
+					</vxe-column> -->
+					<vxe-column min-width="160" align="center" title="修改商品" field="updateTradeName">
+						<template #default="scope">
+							<span v-if="commonJS.isNotEmpty(scope.row.updateTradeName)"> {{ scope.row.updateTradeName }}
+							</span>
+							<span v-else> -- </span>
+						</template>
+					</vxe-column>
+					<vxe-column min-width="160" align="center" title="修改人" field="updateUser">
+						<template #default="scope">
+							<span v-if="scope.row.endflag === '2'">(创建人) {{ scope.row.updateUser }} </span>
+							<span v-else>{{ scope.row.updateUser }} </span>
+						</template>
+					</vxe-column>
+					<vxe-column min-width="160" align="center" title="修改时间" field="createTime"></vxe-column>
+					<vxe-column title="操作" width="150px" fixed="right" align="center">
+						<template #default="scope">
+							<el-button text type="primary" size="small" @click="hiDetail(scope.row)">修改详情</el-button>
+						</template>
+					</vxe-column>
+				</vxe-table>
+			</el-tab-pane>
 			<el-tab-pane label="领用退回历史" v-if="returnId" name="form-seventh">
 				<vxe-table ref="returnTable" border="inner" :key="111" size="small" class="vxe-table-element"
 					max-height="1000px" :data="dataListHiCollect">
@@ -231,18 +262,18 @@ import print2 from "@/utils/print.js";
 import { shallowRef } from 'vue'
 import CollectService from '@/api/materialManagement/CollectService'
 import PsiCollectService from '@/api/psi/CollectService'
-import WareHouseService from '@/api/materialManagement/WareHouseService'
+import PsiWareHouseService from '@/api/psi/WareHouseService'
 import ProjectReportArchiveService from '@/api/cw/projectRecords/ProjectReportArchiveService'
 import pick from "lodash.pick";
 export default {
 	collectService: null,
 	psiCollectService: null,
-	wareHouseService: null,
+	psiWareHouseService: null,
 	projectReportArchiveService: null,
 	beforeCreate() {
 		this.collectService = new CollectService()
 		this.psiCollectService = new PsiCollectService()
-		this.wareHouseService = new WareHouseService()
+		this.psiWareHouseService = new PsiWareHouseService()
 		this.projectReportArchiveService = new ProjectReportArchiveService()
 	},
 	activated() {
@@ -396,6 +427,7 @@ export default {
 			this.cwArchiveHiFlag = ""
 			this.returnId = this.$route.query.returnId
 			this.psiReturnId = this.$route.query.psiReturnId
+			this.psiWareHouseId = this.$route.query.psiWareHouseId
 			if (this.commonJS.isEmpty(this.$route.query.isShow)) {
 				this.isShow = 'true'
 			} else {
@@ -1673,6 +1705,13 @@ export default {
 					})
 				}
 			}
+			if (event.props.name === 'form-psi-edit') {
+				if (this.commonJS.isNotEmpty(this.psiWareHouseId)) {
+					this.psiWareHouseService.findHiById(this.psiWareHouseId).then((data) => {
+						this.dataListHi = data
+					})
+				}
+			}
 			if (event.props.name === 'form-seventh') {
 				if (this.commonJS.isNotEmpty(this.returnId)) {
 					this.collectService.findByReturnId(this.returnId).then((data) => {
@@ -1769,6 +1808,7 @@ export default {
 			cwArchiveHiFlag: '',
 			returnId: '',
 			psiReturnId: '',
+			psiWareHouseId: '',
 			dataListHi: [],
 			dataListHiCollect: [],
 			cwArchiveDataListHiCollect: [],

+ 44 - 0
src/views/flowable/task/TaskFormDetail.vue

@@ -62,6 +62,37 @@
 					</vxe-column>
 				</vxe-table>
 			</el-tab-pane>
+			<el-tab-pane label="入库修改历史" v-if="psiWareHouseId" name="form-psi-edit">
+				<vxe-table border="inner" size="mini" max-height="1000px" :data="dataListHi">
+					<vxe-column type="seq" width="60" title="序号"></vxe-column>
+					<!-- <vxe-column min-width="120" align="center" title="修改类型" field="updateTradeType">
+						<template #default="scope">
+							<span v-if="commonJS.isNotEmpty(scope.row.updateTradeType)"> {{ scope.row.updateTradeType }}
+							</span>
+							<span v-else> -- </span>
+						</template>
+					</vxe-column> -->
+					<vxe-column min-width="160" align="center" title="修改商品" field="updateTradeName">
+						<template #default="scope">
+							<span v-if="commonJS.isNotEmpty(scope.row.updateTradeName)"> {{ scope.row.updateTradeName }}
+							</span>
+							<span v-else> -- </span>
+						</template>
+					</vxe-column>
+					<vxe-column min-width="160" align="center" title="修改人" field="updateUser">
+						<template #default="scope">
+							<span v-if="scope.row.endflag === '2'">(创建人) {{ scope.row.updateUser }} </span>
+							<span v-else>{{ scope.row.updateUser }} </span>
+						</template>
+					</vxe-column>
+					<vxe-column min-width="160" align="center" title="修改时间" field="createTime"></vxe-column>
+					<vxe-column title="操作" width="150px" fixed="right" align="center">
+						<template #default="scope">
+							<el-button text type="primary" size="small" @click="hiDetail(scope.row)">修改详情</el-button>
+						</template>
+					</vxe-column>
+				</vxe-table>
+			</el-tab-pane>
 			<el-tab-pane label="领用退回历史" v-if="returnId" name="form-seventh">
 				<vxe-table border="inner" size="mini" max-height="1000px" :data="dataListHiCollect">
 					<vxe-column type="seq" width="60" title="序号"></vxe-column>
@@ -143,14 +174,18 @@ import CollectService from '@/api/materialManagement/CollectService'
 import PsiCollectService from '@/api/psi/CollectService'
 import WareHouseService from '@/api/materialManagement/WareHouseService'
 import projectReportService from '@/api/cw/reportManagement/ProjectReportService'
+import PsiWareHouseService from '@/api/psi/WareHouseService'
+
 export default {
 	collectService: null,
 	psiCollectService: null,
 	wareHouseService: null,
+	psiWareHouseService: null,
 	beforeCreate() {
 		this.collectService = new CollectService()
 		this.psiCollectService = new PsiCollectService()
 		this.wareHouseService = new WareHouseService()
+		this.psiWareHouseService = new PsiWareHouseService()
 	},
 	activated() {
 		this.init();
@@ -233,6 +268,7 @@ export default {
 			this.procInsId = this.$route.query.procInsId;
 			this.returnId = this.$route.query.returnId
 			this.psiReturnId = this.$route.query.psiReturnId
+			this.psiWareHouseId = this.$route.query.psiWareHouseId
 			this.wareHouseId = this.$route.query.wareHouseId
 			this.sigId = this.$route.query.sigId
 			this.formReadOnly = true;
@@ -253,6 +289,13 @@ export default {
 					})
 				}
 			}
+			if (event.props.name === 'form-psi-edit') {
+				if (this.commonJS.isNotEmpty(this.psiWareHouseId)) {
+					this.psiWareHouseService.findHiById(this.psiWareHouseId).then((data) => {
+						this.dataListHi = data
+					})
+				}
+			}
 			if (event.props.name === 'form-seventh') {
 				console.log('建立了')
 				if (this.commonJS.isNotEmpty(this.returnId)) {
@@ -320,6 +363,7 @@ export default {
 			businessId: "",
 			returnId: "",
 			psiReturnId: '',
+			psiWareHouseId: '',
 			wareHouseId: '',
 			dataListHi: [],
 			dataListHiCollect: [],

File diff suppressed because it is too large
+ 547 - 551
src/views/materialManagement/collect/UpdateCollectInfoForm.vue


+ 56 - 53
src/views/psiManagement/collect/CollectForm.vue

@@ -65,43 +65,51 @@
 						highlight-current-row
 						:edit-config="{ trigger: 'click', mode: 'row', showStatus: false, autoClear: true, icon: '-' }"
 						:edit-rules="validRules">
-						<vxe-table-column field="recipientAgent" title="领用人" :edit-render="{}"
+						<!-- <vxe-table-column field="recipientAgent" title="领用人" :edit-render="{}"
 							:rules="[{ required: true, message: '请选择领用人', trigger: 'blur' }]">
 							<template v-slot:edit="scope">
 								<el-input v-model="scope.row.recipientAgent"
 									@focus="userPullListForm(scope.$rowIndex)"></el-input>
 							</template>
-						</vxe-table-column>
-						<vxe-table-column field="recipientOffice" title="领用人部门" :edit-render="{}">
-							<template v-slot:edit="scope">
+</vxe-table-column>
+<vxe-table-column field="recipientOffice" title="领用人部门" :edit-render="{}">
+	<template v-slot:edit="scope">
 								<el-input :disabled='true' v-model="scope.row.recipientOffice"></el-input>
 							</template>
-						</vxe-table-column>
-						<vxe-table-column field="collectType" title="领用类型" :edit-render="{}"
-							:rules="[{ required: true, message: '请选择领用类型', trigger: 'blur' }]">
+</vxe-table-column> -->
+						<vxe-table-column field="collectType" title="商品名称" :edit-render="{}"
+							:rules="[{ required: true, message: '请选择商品名称', trigger: 'blur' }]">
 							<template v-slot:edit="scope">
 								<el-input v-model="scope.row.collectType"
 									@focus="typePullForm(scope.$rowIndex)"></el-input>
 							</template>
 						</vxe-table-column>
-						<vxe-table-column field="goodsName" title="物品名称" :edit-render="{}"
+						<!-- <vxe-table-column field="goodsName" title="物品名称" :edit-render="{}"
 							:rules="[{ required: true, message: '请填写物品名称', trigger: 'blur' }]">
 							<template v-slot:edit="scope">
 								<el-input v-model="scope.row.goodsName"
 									@focus="openPurchasePageForm(scope.$rowIndex, scope.row)"></el-input>
 							</template>
+						</vxe-table-column> -->
+						<vxe-table-column field="brand" title="品牌"
+							:rules="[{ required: true, message: '请填写品牌', trigger: 'blur' }]">
+							<template v-slot:edit="scope">
+								<el-input disabled v-model="scope.row.brand"></el-input>
+							</template>
 						</vxe-table-column>
-						<vxe-table-column :title-suffix="nameTitleSuffix" field="collectNumber" title="领用数量"
-							:edit-render="{}">
+						<vxe-table-column field="specification" title="规格"
+							:rules="[{ required: true, message: '请填写规格', trigger: 'blur' }]">
 							<template v-slot:edit="scope">
-								<!--              <el-input @change="changeValue" v-model="scope.row.tradeNumber" oninput ="value=value.replace(/\D|^0/g,'')" maxlength="10"></el-input>-->
-								<!--              <el-input @change="changeValue" v-model="scope.row.tradeNumber" @blur="scope.row.tradeNumber = twoDecimalPlaces2(scope.row.tradeNumber)" maxlength="10"></el-input>-->
-								<el-input v-model="scope.row.collectNumber"
-									@blur="scope.row.collectNumber = twoDecimalPlaces2(scope.row.collectNumber)"
-									maxlength="10"></el-input>
+								<el-input disabled v-model="scope.row.specification"></el-input>
 							</template>
 						</vxe-table-column>
-						<vxe-table-column field="surplusNumber" title="库存数量">
+						<vxe-table-column field="company" title="单位"
+							:rules="[{ required: true, message: '请填写单位', trigger: 'blur' }]">
+							<template v-slot:edit="scope">
+								<el-input disabled v-model="scope.row.company"></el-input>
+							</template>
+						</vxe-table-column>
+						<vxe-table-column field="surplusNumber" title="当前库存数量">
 							<!-- <template v-slot:edit="scope">
 								<el-input :disabled="true" v-model="scope.row.surplusNumber" maxlength="10"></el-input>
 							</template> -->
@@ -115,10 +123,14 @@
 								</span>
 							</template>
 						</vxe-table-column>
-						<vxe-table-column field="company" title="单位" :edit-render="{}"
-							:rules="[{ required: true, message: '请填写单位', trigger: 'blur' }]">
+						<vxe-table-column :title-suffix="nameTitleSuffix" field="collectNumber" title="领用数量"
+							:edit-render="{}">
 							<template v-slot:edit="scope">
-								<el-input disabled v-model="scope.row.company"></el-input>
+								<!--              <el-input @change="changeValue" v-model="scope.row.tradeNumber" oninput ="value=value.replace(/\D|^0/g,'')" maxlength="10"></el-input>-->
+								<!--              <el-input @change="changeValue" v-model="scope.row.tradeNumber" @blur="scope.row.tradeNumber = twoDecimalPlaces2(scope.row.tradeNumber)" maxlength="10"></el-input>-->
+								<el-input v-model="scope.row.collectNumber"
+									@blur="scope.row.collectNumber = twoDecimalPlaces2(scope.row.collectNumber)"
+									maxlength="10"></el-input>
 							</template>
 						</vxe-table-column>
 						<vxe-table-column field="remarks" title="备注" :edit-render="{}">
@@ -143,7 +155,7 @@
 				</el-col>
 			</el-row>
 			<el-form :model="inputForm" :disabled="status !== 'audit'" @submit.native.prevent>
-				<el-divider content-position="left" v-if="status == 'audit'"><i class="el-icon-document"></i>
+				<el-divider content-position="left" v-if="false"><i class="el-icon-document"></i>
 					领用分配详情
 
 					<!-- <el-button style="margin-left: 20px" type="primary" :disabled="status != 'audit'"
@@ -151,7 +163,7 @@
 						新增
 					</el-button> -->
 				</el-divider>
-				<el-row :gutter="15" v-if="status == 'audit'">
+				<el-row :gutter="15" v-if="false">
 					<el-col :span="24">
 						<vxe-table border show-footer show-overflow ref="auditDetailTable" class="vxe-table-element"
 							:data="inputForm.recordList" style="margin-left: 5em" :key="clientTableKey"
@@ -284,17 +296,14 @@ export default {
 		return {
 			nameTitleSuffix,
 			validRules: {
-				recipientAgent: [
-					{ required: true, message: '领用人不能为空' }
-				],
-				recipientOffice: [
-					{ required: true, message: '领用人部门不能为空' }
-				],
+				// recipientAgent: [
+				// 	{ required: true, message: '领用人不能为空' }
+				// ],
+				// recipientOffice: [
+				// 	{ required: true, message: '领用人部门不能为空' }
+				// ],
 				collectType: [
-					{ required: true, message: '领用类型不能为空' }
-				],
-				goodsName: [
-					{ required: true, message: '物品名称不能为空' }
+					{ required: true, message: '商品名称不能为空' }
 				],
 				collectNumber: [
 					{ required: true, message: '领用数量不能为空' }
@@ -415,6 +424,7 @@ export default {
 		},
 		init(method, id) {
 			this.method = method
+			const collectDate = this.moment(new Date()).format('YYYY-MM-DD')
 			this.inputForm = {
 				fileInfoLost: [],
 				handledByOffice: '',
@@ -422,7 +432,7 @@ export default {
 				handledById: this.$store.state.user.id,
 				collectNo: '', // 领用编号
 				userId: this.$store.state.user.id,
-				collectDate: new Date(),
+				collectDate: collectDate,
 				remarks: '',
 				detailInfos: [],
 				recordList: [],
@@ -432,9 +442,9 @@ export default {
 				processDefinitionId: ''
 			}
 			if (method === 'add') {
-				this.title = `新建领用类型`
+				this.title = `新建领用`
 			} else if (method === 'edit') {
-				this.title = '修改领用类型'
+				this.title = '修改领用'
 			}
 			this.inputForm.id = id
 			this.visible = true
@@ -488,7 +498,7 @@ export default {
 							this.inputForm.handledById = this.$store.state.user.id
 						}
 						if (this.commonJS.isEmpty(this.inputForm.collectDate)) {
-							this.inputForm.collectDate = new Date()
+							this.inputForm.collectDate = collectDate
 						}
 						this.inputForm.detailInfos = []
 						this.loading = false
@@ -665,18 +675,8 @@ export default {
 						let i = this.inputForm.detailInfos.length
 						for (let j = 0; j < i; j++) {
 							let k = j + 1
-							if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].recipientAgent)) {
-								this.$message.error('领用详情第' + k + '行请选择领用人')
-								this.loading = false
-								return
-							}
 							if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].collectType)) {
-								this.$message.error('领用详情第' + k + '行请选择领用类型')
-								this.loading = false
-								return
-							}
-							if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].goodsName)) {
-								this.$message.error('领用详情第' + k + '行请选择物品名称')
+								this.$message.error('领用详情第' + k + '行请选择商品')
 								this.loading = false
 								return
 							}
@@ -686,7 +686,7 @@ export default {
 								return
 							}
 
-							if (parseFloat(this.inputForm.detailInfos[j].collectNumber) > parseFloat(this.inputForm.detailInfos[j].surplusNumber) * parseFloat(this.inputForm.detailInfos[j].spec)) {
+							if (parseFloat(this.inputForm.detailInfos[j].collectNumber) > parseFloat(this.inputForm.detailInfos[j].surplusNumber)) {
 								this.$message.error('领用详情第' + k + '行领用数量不能大于库存数量')
 								this.loading = false
 								return
@@ -914,6 +914,12 @@ export default {
 			this.inputForm.detailInfos[this.indexRow].collectTypeId = rows.id
 			this.inputForm.detailInfos[this.indexRow].collectType = rows.name
 			this.inputForm.detailInfos[this.indexRow].goodsName = ''
+			this.inputForm.detailInfos[this.indexRow].spec = "1"
+			this.inputForm.detailInfos[this.indexRow].brand = rows.brand
+			this.inputForm.detailInfos[this.indexRow].specification = rows.specification
+			this.inputForm.detailInfos[this.indexRow].company = rows.company
+			this.inputForm.detailInfos[this.indexRow].goodsName = rows.name
+			this.inputForm.detailInfos[this.indexRow].surplusNumber = rows.currentInventory
 			this.indexRow = ''
 			this.$forceUpdate()
 		},
@@ -983,12 +989,9 @@ export default {
 				console.log('进来了')
 				for (let k = j + 1; k < i; k++) {
 					if (this.inputForm.detailInfos[j].collectTypeId === this.inputForm.detailInfos[k].collectTypeId) {
-						if (this.commonJS.isNotEmpty(this.inputForm.detailInfos[j].goodsName) &&
-							this.commonJS.isNotEmpty(this.inputForm.detailInfos[k].goodsName) && this.inputForm.detailInfos[j].goodsName === this.inputForm.detailInfos[k].goodsName) {
-							// parseFloat(item.account).toFixed(2)
-							this.inputForm.detailInfos.splice(k, 1)
-							this.$message.warning(`同种领用类型的商品名称只能输入一条信息!`)
-						}
+						// parseFloat(item.account).toFixed(2)
+						this.inputForm.detailInfos.splice(k, 1)
+						this.$message.warning(`同种商品只能输入一条信息!`)
 					}
 				}
 			}

+ 13 - 26
src/views/psiManagement/collect/CollectReturnForm.vue

@@ -52,17 +52,23 @@
 						:edit-config="{ trigger: 'click', mode: 'row', showStatus: false, autoClear: !produceDateSelectVisible, icon: '-' }"
 						:edit-rules="validRules" :data="inputForm.recordList" style="margin-left: 5em"
 						:row-class-name="rowClassName">
-						<vxe-table-column field="recipientAgent" title="领用人" align="center" min-width="160">
+						<!-- <vxe-table-column field="recipientAgent" title="领用人" align="center" min-width="160">
 							<template #default="scope">
 								<span>{{ scope.row.recipientAgent }}</span>
 								<span v-if="scope.row.isReturn === '1'">(已退回)</span>
 								<span v-else-if="scope.row.isReturn === '2'">(部分退回)</span>
 							</template>
+</vxe-table-column> -->
+						<!-- <vxe-table-column field="recipientOffice" title="领用人部门" align="center"></vxe-table-column> -->
+						<!-- <vxe-table-column field="collectType" title="领用类型" align="center"></vxe-table-column> -->
+						<vxe-table-column field="collectType" title="商品名称" align="center">
+							<template #default="scope">
+								<span>{{ scope.row.goodsName }}</span>
+								<span v-if="scope.row.isReturn === '1'">(已退回)</span>
+								<span v-else-if="scope.row.isReturn === '2'">(部分退回)</span>
+							</template>
 						</vxe-table-column>
-						<vxe-table-column field="recipientOffice" title="领用人部门" align="center"></vxe-table-column>
-						<vxe-table-column field="collectType" title="领用类型" align="center"></vxe-table-column>
-						<vxe-table-column field="goodsName" title="物品名称" align="center"></vxe-table-column>
-						<vxe-table-column field="produceDate" title="生产日期" align="center"></vxe-table-column>
+						<!-- <vxe-table-column field="produceDate" title="生产日期" align="center"></vxe-table-column> -->
 						<vxe-table-column field="collectNumber" title="领用数量" align="center">
 							<template #default="scope">
 								<span>{{ scope.row.collectNumber }}</span>
@@ -156,17 +162,8 @@ export default {
 	data() {
 		return {
 			validRules: {
-				recipientAgent: [
-					{ required: true, message: '领用人不能为空' }
-				],
-				recipientOffice: [
-					{ required: true, message: '领用人部门不能为空' }
-				],
 				collectType: [
-					{ required: true, message: '领用类型不能为空' }
-				],
-				goodsName: [
-					{ required: true, message: '物品名称不能为空' }
+					{ required: true, message: '商品名称不能为空' }
 				],
 				collectNumber: [
 					{ required: true, message: '领用数量不能为空' }
@@ -532,18 +529,8 @@ export default {
 						let i = this.inputForm.detailInfos.length
 						for (let j = 0; j < i; j++) {
 							let k = j + 1
-							if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].recipientAgent)) {
-								this.$message.error('领用详情第' + k + '行请选择领用人')
-								this.loading = false
-								return
-							}
 							if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].collectType)) {
-								this.$message.error('领用详情第' + k + '行请选择领用类型')
-								this.loading = false
-								return
-							}
-							if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].goodsName)) {
-								this.$message.error('领用详情第' + k + '行请选择物品名称')
+								this.$message.error('领用详情第' + k + '行请选择商品')
 								this.loading = false
 								return
 							}

+ 3 - 3
src/views/psiManagement/collect/CollectReturnHiForm.vue

@@ -61,9 +61,9 @@
 									<span v-else-if="scope.row.isReturn === '2'">(部分退回)</span>
 								</template>
 							</vxe-table-column>
-							<vxe-table-column field="recipientOffice" title="领用人部门" align="center"></vxe-table-column>
-							<vxe-table-column field="collectType" title="领用类型" align="center"></vxe-table-column>
-							<vxe-table-column field="goodsName" title="物品名称" align="center"></vxe-table-column>
+							<!-- <vxe-table-column field="recipientOffice" title="领用人部门" align="center"></vxe-table-column> -->
+							<vxe-table-column field="collectType" title="领用商品" align="center"></vxe-table-column>
+							<!-- <vxe-table-column field="goodsName" title="物品名称" align="center"></vxe-table-column> -->
 							<vxe-table-column field="collectNumber" title="领用数量" align="center"></vxe-table-column>
 							<vxe-table-column field="surplusStock" title="本次退回数量" align="center" :edit-render="{}">
 								<template #default="scope">

+ 28 - 16
src/views/psiManagement/collect/UpdateCollectInfoForm.vue

@@ -58,18 +58,18 @@
 							:data="inputForm.detailInfos" style="margin-left: 5em" highlight-current-row
 							:edit-config="{ trigger: 'click', mode: 'row', showStatus: false, autoClear: true, icon: '-' }"
 							:edit-rules="validRules">
-							<vxe-table-column field="recipientAgent" title="领用人" :edit-render="{}"
+							<!-- <vxe-table-column field="recipientAgent" title="领用人" :edit-render="{}"
 								:rules="[{ required: true, message: '请选择领用人', trigger: 'blur' }]">
 								<template v-slot:edit="scope">
 									<el-input :disabled='true' v-model="scope.row.recipientAgent"
 										@focus="userPullListForm(scope.$rowIndex)"></el-input>
 								</template>
-							</vxe-table-column>
-							<vxe-table-column field="recipientOffice" title="领用人部门" :edit-render="{}">
+</vxe-table-column> -->
+							<!-- <vxe-table-column field="recipientOffice" title="领用人部门" :edit-render="{}">
 								<template v-slot:edit="scope">
 									<el-input :disabled='true' v-model="scope.row.recipientOffice"></el-input>
 								</template>
-							</vxe-table-column>
+							</vxe-table-column> -->
 							<vxe-table-column field="collectType" title="领用类型" :edit-render="{}"
 								:rules="[{ required: true, message: '请选择领用类型', trigger: 'blur' }]">
 								<template v-slot:edit="scope">
@@ -77,13 +77,13 @@
 										@focus="typePullForm(scope.$rowIndex)"></el-input>
 								</template>
 							</vxe-table-column>
-							<vxe-table-column field="goodsName" title="物品名称" :edit-render="{}"
+							<!-- <vxe-table-column field="goodsName" title="物品名称" :edit-render="{}"
 								:rules="[{ required: true, message: '请填写物品名称', trigger: 'blur' }]">
 								<template v-slot:edit="scope">
 									<el-input :disabled='true' v-model="scope.row.goodsName"
 										@focus="openPurchasePageForm(scope.$rowIndex, scope.row)"></el-input>
 								</template>
-							</vxe-table-column>
+							</vxe-table-column> -->
 							<!--            <vxe-table-column field="surplusNumber" title="剩余数量" :edit-render="{}">-->
 							<!--              <template v-slot:edit="scope">-->
 							<!--                <el-input :disabled="true" v-model="scope.row.surplusNumber" maxlength="10"></el-input>-->
@@ -96,6 +96,18 @@
 										maxlength="10"></el-input>
 								</template>
 							</vxe-table-column>
+							<vxe-table-column field="brand" title="品牌" :edit-render="{}"
+								:rules="[{ required: true, message: '请填写品牌', trigger: 'blur' }]">
+								<template v-slot:edit="scope">
+									<el-input :disabled='true' v-model="scope.row.brand"></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column field="specification" title="规格" :edit-render="{}"
+								:rules="[{ required: true, message: '请填写规格', trigger: 'blur' }]">
+								<template v-slot:edit="scope">
+									<el-input :disabled='true' v-model="scope.row.specification"></el-input>
+								</template>
+							</vxe-table-column>
 							<vxe-table-column field="company" title="单位" :edit-render="{}"
 								:rules="[{ required: true, message: '请填写单位', trigger: 'blur' }]">
 								<template v-slot:edit="scope">
@@ -119,7 +131,7 @@
 					</el-col>
 				</el-row>
 				<el-form :model="inputForm" :disabled="true" @submit.native.prevent>
-					<el-divider content-position="left" v-if="inputForm.status == '5'"><i class="el-icon-document"></i>
+					<el-divider content-position="left" v-if="false"><i class="el-icon-document"></i>
 						领用分配详情
 
 						<!-- <el-button style="margin-left: 20px" type="primary" :disabled="status != 'audit'"
@@ -127,40 +139,40 @@
 						新增
 					</el-button> -->
 					</el-divider>
-					<el-row :gutter="15" v-if="inputForm.status == '5'">
+					<el-row :gutter="15" v-if="false">
 						<el-col :span="24">
 							<vxe-table border show-footer show-overflow ref="auditDetailTable" class="vxe-table-element"
 								:data="inputForm.recordList" style="margin-left: 5em" :key="clientTableKey"
 								highlight-current-row
 								:edit-config="{ trigger: 'click', mode: 'row', showStatus: false, autoClear: !produceDateSelectVisible, icon: '-' }"
 								:edit-rules="validRules">
-								<vxe-table-column field="recipientAgent" title="领用人" :edit-render="{}"
+								<!-- <vxe-table-column field="recipientAgent" title="领用人" :edit-render="{}"
 									:rules="[{ required: true, message: '请选择领用人', trigger: 'blur' }]">
 									<template v-slot:edit="scope">
 										<el-input v-model="scope.row.recipientAgent" :disabled='true'
 											@focus="userPullListForm(scope.$rowIndex)"></el-input>
 									</template>
-								</vxe-table-column>
-								<vxe-table-column field="recipientOffice" title="领用人部门" :edit-render="{}">
+								</vxe-table-column> -->
+								<!-- <vxe-table-column field="recipientOffice" title="领用人部门" :edit-render="{}">
 									<template v-slot:edit="scope">
 										<el-input :disabled='true' v-model="scope.row.recipientOffice"></el-input>
 									</template>
-								</vxe-table-column>
-								<vxe-table-column field="collectType" title="领用类型" :edit-render="{}"
-									:rules="[{ required: true, message: '请选择领用类型', trigger: 'blur' }]">
+								</vxe-table-column> -->
+								<vxe-table-column field="collectType" title="商品名称" :edit-render="{}"
+									:rules="[{ required: true, message: '请选择商品', trigger: 'blur' }]">
 									<template v-slot:edit="scope">
 										<el-input v-model="scope.row.collectType" :disabled='true'
 											@focus="typePullForm1(scope.$rowIndex)"></el-input>
 									</template>
 								</vxe-table-column>
-								<vxe-table-column field="goodsName" title="物品名称"
+								<!-- <vxe-table-column field="goodsName" title="物品名称"
 									:rules="[{ required: true, message: '请填写物品名称', trigger: 'blur' }]"
 									:edit-render="{}">
 									<template v-slot:edit="scope">
 										<el-input v-model="scope.row.goodsName" :disabled='true'
 											@focus="openPurchasePageForm1(scope.$rowIndex, scope.row)"></el-input>
 									</template>
-								</vxe-table-column>
+								</vxe-table-column> -->
 								<vxe-table-column field="inventoryId" title="分配生产日期" min-width="160"
 									:rules="[{ required: true, message: '请选择', trigger: 'change' }]">
 									<template #default="scope">

+ 23 - 4
src/views/psiManagement/info/MaterialTypePullForm.vue

@@ -13,18 +13,22 @@
 					<el-form-item>
 						<el-button type="primary" @click="list()" icon="el-icon-search">查询</el-button>
 						<el-button @click="resetSearch()" icon="el-icon-refresh-right">重置</el-button>
+						<el-button type="primary" @click="addGoods()" icon="el-icon-goods">新增商品</el-button>
 					</el-form-item>
 				</el-form>
 				<vxe-table border="inner" auto-resize resizable height="500px" :loading="loading" ref="typeTable"
 					show-header-overflow show-overflow highlight-hover-row :menu-config="{}"
 					:sort-config="{ remote: true }" :data="dataList"
 					:tree-config="{ transform: true, rowField: 'id', parentField: 'parentId', expandAll: true }"
-					:checkbox-config="{}">
+					:radio-config="radioConfig">
 					<vxe-column type="seq" width="60" title="序号"></vxe-column>
 					<!--          <vxe-column type="checkbox" width="40" ></vxe-column>-->
 					<vxe-column type="radio" width="60"></vxe-column>
 					<vxe-column title="内容名称" field="name" align="left" tree-node></vxe-column>
-					<vxe-column width="100" title="序号" field="sort"></vxe-column>
+					<vxe-column title="品牌" width="180" field="brand"></vxe-column>
+					<vxe-column title="规格" width="180" field="specification"></vxe-column>
+					<vxe-column title="单位" width="180" field="company"></vxe-column>
+					<!-- <vxe-column width="100" title="序号" field="sort"></vxe-column> -->
 				</vxe-table>
 			</div>
 			<template #footer>
@@ -35,14 +39,22 @@
 				</span>
 			</template>
 		</el-dialog>
+		<TypeForm ref="typeForm" @refreshDataList="list"></TypeForm>
 	</div>
 </template>
 
 <script>
 import MaterialTypeService from '@/api/psi/MaterialTypeService'
+import TypeForm from '../materialType/TypeForm'
 export default {
 	data() {
+		const radioConfig = {
+			checkMethod: ({ row }) => {
+				return row.infoType === '1' || row.infoType === 1
+			}
+		}
 		return {
+			radioConfig,
 			searchForm: {
 				name: ''
 			},
@@ -64,6 +76,7 @@ export default {
 		this.materialTypeService = new MaterialTypeService()
 	},
 	components: {
+		TypeForm
 	},
 	methods: {
 		init() {
@@ -78,8 +91,8 @@ export default {
 				return
 			}
 			rows = this.$refs.typeTable.getRadioRecord()
-			if (rows.children.length > 0) {
-				this.$message.error('请选择子集数据')
+			if (!this.isGoods(rows)) {
+				this.$message.error('请选择商品数据')
 				return
 			}
 			this.$emit('getProgramForType', rows)
@@ -95,6 +108,9 @@ export default {
 				})
 			})
 		},
+		isGoods(row) {
+			return row && (row.infoType === '1' || row.infoType === 1)
+		},
 		// 当前页
 		currentChangeHandle({ currentPage, pageSize }) {
 			this.tablePage.currentPage = currentPage
@@ -105,6 +121,9 @@ export default {
 			this.$refs.searchForm.resetFields()
 			this.list()
 		},
+		addGoods() {
+			this.$refs.typeForm.init('addGoods')
+		},
 		close() {
 			this.detail = ''
 			this.visible = false

+ 90 - 55
src/views/psiManagement/loss/LossForm.vue

@@ -42,7 +42,7 @@
 			<el-divider content-position="left">
 				<i class="el-icon-document"></i> 报损明细
 				<el-button style="margin-left: 20px" type="primary" plain
-					:disabled="method === 'view' || formReadOnly || inputForm.detailInfos.length > 0"
+					:disabled="method === 'view' || formReadOnly"
 					@click="insertEvent()">
 					新增
 				</el-button>
@@ -55,44 +55,51 @@
 						highlight-current-row
 						:edit-config="{ trigger: 'click', mode: 'row', showStatus: false, autoClear: true, icon: '-' }"
 						:edit-rules="validRules">
-						<vxe-table-column field="recipientAgent" title="报损人" :edit-render="{}"
+						<!-- <vxe-table-column field="recipientAgent" title="报损人" :edit-render="{}"
 							:rules="[{ required: true, message: '请选择报损人', trigger: 'blur' }]">
 							<template #edit="scope">
 								<el-input v-model="scope.row.recipientAgent"
 									:disabled="formReadOnly || method === 'view'"
 									@focus="userPullListForm(scope.$rowIndex)" />
 							</template>
-						</vxe-table-column>
-						<vxe-table-column field="recipientOffice" title="报损人部门" :edit-render="{}">
-							<template #edit="scope">
+</vxe-table-column>
+<vxe-table-column field="recipientOffice" title="报损人部门" :edit-render="{}">
+	<template #edit="scope">
 								<el-input v-model="scope.row.recipientOffice" disabled />
 							</template>
-						</vxe-table-column>
-						<vxe-table-column field="collectType" title="物品类型" :edit-render="{}"
-							:rules="[{ required: true, message: '请选择物品类型', trigger: 'blur' }]">
+</vxe-table-column> -->
+						<vxe-table-column field="collectType" title="商品名称" :edit-render="{}"
+							:rules="[{ required: true, message: '请选择商品名称', trigger: 'blur' }]">
 							<template #edit="scope">
 								<el-input v-model="scope.row.collectType" :disabled="formReadOnly || method === 'view'"
 									@focus="typePullForm(scope.$rowIndex)" />
 							</template>
 						</vxe-table-column>
-						<vxe-table-column field="goodsName" title="物品名称" :edit-render="{}"
+						<!-- <vxe-table-column field="goodsName" title="物品名称" :edit-render="{}"
 							:rules="[{ required: true, message: '请选择物品名称', trigger: 'blur' }]">
 							<template #edit="scope">
 								<el-input v-model="scope.row.goodsName" :disabled="formReadOnly || method === 'view'"
 									@focus="openPurchasePageForm(scope.$rowIndex, scope.row)" />
 							</template>
+						</vxe-table-column> -->
+						<vxe-table-column field="brand" title="品牌">
 						</vxe-table-column>
-						<vxe-table-column field="spec" title="包装规格" :edit-render="{}">
-							<template #edit="scope">
-								<el-input v-model="scope.row.spec" disabled />
-							</template>
+						<vxe-table-column field="specification" title="规格">
+						</vxe-table-column>
+						<vxe-table-column field="company" title="单位">
+						</vxe-table-column>
+						<!-- <vxe-table-column field="wareHouseNumber" title="入库批次">
+						</vxe-table-column>
+						<vxe-table-column field="wareHouseDate" title="入库日期">
 						</vxe-table-column>
-						<vxe-table-column field="produceDate" title="生产日期" :edit-render="{}">
+						<vxe-table-column field="surplusNumber" title="批次库存">
+						</vxe-table-column> -->
+						<!-- <vxe-table-column field="produceDate" title="生产日期" :edit-render="{}">
 							<template #edit="scope">
 								<el-date-picker v-model="scope.row.produceDate" type="date" value-format="YYYY-MM-DD"
 									style="width: 100%" disabled />
 							</template>
-						</vxe-table-column>
+						</vxe-table-column> -->
 						<vxe-table-column field="lossNumber" title="报损数量" :title-suffix="numberTitleSuffix"
 							:edit-render="{}" :rules="[{ required: true, message: '请输入报损数量', trigger: 'blur' }]">
 							<template #edit="scope">
@@ -101,6 +108,13 @@
 									@blur="handleLossNumberBlur(scope.row)" />
 							</template>
 						</vxe-table-column>
+						<vxe-table-column field="lossReason" title="报损原因" min-width="220" :edit-render="{}"
+							:rules="[{ required: true, message: '请输入报损原因', trigger: 'blur' }]">
+							<template #edit="scope">
+								<el-input v-model="scope.row.lossReason"
+									:disabled="formReadOnly || method === 'view'" />
+							</template>
+						</vxe-table-column>
 						<!-- <vxe-table-column field="currentInventory" title="当前库存" :edit-render="{}">
 							<template #edit="scope">
 								<el-input v-model="scope.row.currentInventory" disabled />
@@ -181,9 +195,10 @@ export default {
 			},
 			validRules: {
 				recipientAgent: [{ required: true, message: "报损人不能为空" }],
-				collectType: [{ required: true, message: "物品类型不能为空" }],
-				goodsName: [{ required: true, message: "物品名称不能为空" }],
+				collectType: [{ required: true, message: "商品不能为空" }],
+				// goodsName: [{ required: true, message: "物品名称不能为空" }],
 				lossNumber: [{ required: true, message: "报损数量不能为空" }],
+				lossReason: [{ required: true, message: "报损原因不能为空" }],
 			},
 			method: "",
 			loading: false,
@@ -281,15 +296,13 @@ export default {
 							this.loading = false;
 						});
 				} else {
+					const lossDate = this.moment(new Date()).format('YYYY-MM-DD')
+					this.inputForm.lossDate = lossDate
 					this.$refs.uploadComponent.newUpload(this.method ? this.method : "view", [], "psi");
 				}
 			});
 		},
 		insertEvent() {
-			if (this.inputForm.detailInfos.length > 0) {
-				this.$message.warning("报损明细只能保留一条");
-				return;
-			}
 			this.$refs.detailTable.insert().then(row => {
 				row.recipientAgent = this.$store.state.user.name;
 				row.recipientAgentId = this.$store.state.user.id;
@@ -487,16 +500,19 @@ export default {
 		},
 		typePullForm(rowIndex) {
 			this.indexRow = rowIndex;
-			this.$refs.materialTypePullForm.init();
+			this.$refs.purchasePageForm.init();
 		},
 		getProgramForType(row) {
 			const detail = this.inputForm.detailInfos[this.indexRow];
 			detail.collectTypeId = row.id;
 			detail.collectType = row.name;
-			detail.goodsName = "";
-			detail.spec = "";
+			detail.goodsName = row.name;
+			detail.brand = row.brand;
+			detail.specification = row.specification;
+			detail.company = row.company;
+			detail.spec = "1";
 			detail.produceDate = "";
-			detail.surplusNumber = "";
+			detail.surplusNumber = row.currentInventory;
 			this.indexRow = "";
 			this.$forceUpdate();
 		},
@@ -514,7 +530,7 @@ export default {
 		},
 		openPurchasePageForm(rowIndex, row) {
 			if (this.commonJS.isEmpty(row.collectTypeId)) {
-				this.$message.error("请先选择物品类型");
+				this.$message.error("请先选择商品");
 				return;
 			}
 			this.indexRow = rowIndex;
@@ -522,14 +538,22 @@ export default {
 		},
 		getContract(row) {
 			const detail = this.inputForm.detailInfos[this.indexRow];
+			detail.inventoryId = row.id;
+			detail.collectTypeId = row.wareHouseType;
+			detail.collectType = row.tradeName;
 			detail.goodsName = row.tradeName;
 			detail.company = row.company || detail.company;
+			detail.brand = row.brand || detail.brand;
+			detail.specification = row.specification || detail.specification;
+			detail.wareHouseNumber = row.wareHouseNumber || "";
+			detail.wareHouseDate = row.wareHouseDate || "";
 			detail.produceDate = row.produceDate || "";
 			detail.shelfLife = row.shelfLife || "";
 			detail.shelfLifeUnit = row.shelfLifeUnit || "";
 			detail.currentInventory = row.currentInventory || "";
 			detail.spec = row.spec || "";
 			detail.company = row.company || "";
+			detail.surplusNumber = this.formatBatchStock(row.currentInventory, row.spec);
 
 			// this.loadInventorySummary(detail);
 			this.indexRow = "";
@@ -601,6 +625,14 @@ export default {
 			}
 			return num % 1 === 0 ? String(num) : num.toFixed(2).replace(/\.?0+$/, "");
 		},
+		formatBatchStock(currentInventory, spec) {
+			const current = Number(currentInventory || 0);
+			const specNumber = Number(spec || 1);
+			if (Number.isNaN(current) || Number.isNaN(specNumber)) {
+				return "0";
+			}
+			return this.formatNumber(current * (specNumber <= 0 ? 1 : specNumber));
+		},
 		validateForm(checkStock = true) {
 			return new Promise(resolve => {
 				this.$refs.inputForm.validate(valid => {
@@ -617,35 +649,38 @@ export default {
 						resolve(false);
 						return;
 					}
-					const detail = this.inputForm.detailInfos[0];
-					if (this.commonJS.isEmpty(detail.recipientAgent)) {
-						this.$message.error("请选择报损人");
-						resolve(false);
-						return;
-					}
-					if (this.commonJS.isEmpty(detail.collectType)) {
-						this.$message.error("请选择物品类型");
-						resolve(false);
-						return;
-					}
-					if (this.commonJS.isEmpty(detail.goodsName)) {
-						this.$message.error("请选择物品名称");
-						resolve(false);
-						return;
-					}
-					if (this.commonJS.isEmpty(detail.lossNumber)) {
-						this.$message.error("请输入报损数量");
-						resolve(false);
-						return;
-					}
-					if (
-						checkStock &&
-						this.commonJS.isNotEmpty(detail.surplusNumber) &&
-						Number(detail.lossNumber) > Number(detail.surplusNumber)
-					) {
-						this.$message.error("报损数量不能大于当前库存");
-						resolve(false);
-						return;
+					for (let index = 0; index < this.inputForm.detailInfos.length; index++) {
+						const detail = this.inputForm.detailInfos[index];
+						const lineNo = index + 1;
+						if (this.commonJS.isEmpty(detail.collectType)) {
+							this.$message.error(`报损明细第${lineNo}行请选择商品`);
+							resolve(false);
+							return;
+						}
+						if (this.commonJS.isEmpty(detail.inventoryId)) {
+							this.$message.error(`报损明细第${lineNo}行请选择报损库存批次`);
+							resolve(false);
+							return;
+						}
+						if (this.commonJS.isEmpty(detail.lossNumber)) {
+							this.$message.error(`报损明细第${lineNo}行请输入报损数量`);
+							resolve(false);
+							return;
+						}
+						if (this.commonJS.isEmpty(detail.lossReason)) {
+							this.$message.error(`报损明细第${lineNo}行请输入报损原因`);
+							resolve(false);
+							return;
+						}
+						if (
+							checkStock &&
+							this.commonJS.isNotEmpty(detail.surplusNumber) &&
+							Number(detail.lossNumber) > Number(detail.surplusNumber)
+						) {
+							this.$message.error(`报损明细第${lineNo}行报损数量不能大于当前库存`);
+							resolve(false);
+							return;
+						}
 					}
 					resolve(true);
 				});

+ 6 - 2
src/views/psiManagement/loss/PurchasePageForm.vue

@@ -21,8 +21,12 @@
 					:radio-config="{ trigger: 'row' }">
 					<vxe-column type="seq" width="60" title="序号"></vxe-column>
 					<vxe-column type="radio" width="60px"></vxe-column>
+					<vxe-column min-width="160" align="center" title="入库批次" field="wareHouseNumber"></vxe-column>
+					<vxe-column min-width="140" align="center" title="入库日期" field="wareHouseDate"></vxe-column>
 					<vxe-column min-width="230" align="center" title="商品名称" field="tradeName"></vxe-column>
-					<vxe-column min-width="230" align="center" title="生产日期" field="produceDate"></vxe-column>
+					<vxe-column min-width="120" align="center" title="品牌" field="brand"></vxe-column>
+					<vxe-column min-width="120" align="center" title="规格" field="specification"></vxe-column>
+					<!-- <vxe-column min-width="230" align="center" title="生产日期" field="produceDate"></vxe-column> -->
 					<vxe-column min-width="230" align="center" title="库存量" field="currentInventory"></vxe-column>
 					<!--          <vxe-column min-width="230" align="center" title="商品数量" field="tradeNumber"></vxe-column>-->
 
@@ -91,7 +95,7 @@ export default {
 				this.$message.error('请选择一条数据')
 				return
 			}
-			if (row.tradeNumber == "0") {
+			if (Number(row.currentInventory || 0) <= 0) {
 				this.$message.error('暂无库存,请选择其他商品')
 				return
 			}

+ 85 - 51
src/views/psiManagement/materialType/TypeForm.vue

@@ -6,28 +6,45 @@
 				:disabled="method === 'view'" label-width="100px" @submit.native.prevent>
 				<el-row :gutter="15">
 					<el-col :span="21">
-						<el-form-item label="上级节点" prop="parentId">
+						<el-form-item label="所属分类" prop="parentId" :rules="isGoods ? [
+							{ required: true, message: '所属分类不能为空', trigger: 'change' }
+						] : []">
 							<SelectTree ref="areaTree" v-if="visible" :props="{
 								value: 'id',             // ID字段名
 								label: 'name',         // 显示名称
 								children: 'children'    // 子级字段名
-							}" url="/psi-management-server/psi/materialType/treeData?type=5" :value="inputForm.parentId" :clearable="true"
-								:accordion="true" size="default"
+							}" url="/psi-management-server/psi/materialType/treeData?type=5&hideGoods=true" :value="inputForm.parentId"
+								:disabled="isParentLocked" :clearable="!isParentLocked" :accordion="true" size="default"
 								@getValue="(value) => { inputForm.parentId = value }" />
 						</el-form-item>
 					</el-col>
 					<el-col :span="21">
-						<el-form-item label="物资名称" prop="name" :rules="[
-							{ required: true, message: '物资名称不能为空', trigger: 'blur' }
+						<el-form-item label="名称" prop="name" :rules="[
+							{ required: true, message: '名称不能为空', trigger: 'blur' }
 						]">
-							<el-input v-model="inputForm.name" placeholder="请填写物资名称"></el-input>
+							<el-input v-model="inputForm.name" placeholder="请填写名称"></el-input>
 						</el-form-item>
 					</el-col>
-					<el-col :span="21">
+					<el-col v-if="isGoods" :span="21">
+						<el-form-item label="品牌" prop="brand">
+							<el-input v-model="inputForm.brand" placeholder="请填写品牌"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col v-if="isGoods" :span="21">
+						<el-form-item label="规格" prop="specification">
+							<el-input v-model="inputForm.specification" placeholder="请填写规格"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col v-if="isGoods" :span="21">
+						<el-form-item label="单位" prop="company">
+							<el-input v-model="inputForm.company" placeholder="请填写单位"></el-input>
+						</el-form-item>
+					</el-col>
+					<!-- <el-col :span="21">
 						<el-form-item label="序号" prop="sort">
 							<el-input v-model="inputForm.sort" :disabled="true" show-word-limit></el-input>
 						</el-form-item>
-					</el-col>
+					</el-col> -->
 				</el-row>
 			</el-form>
 			<template #footer>
@@ -42,11 +59,20 @@
 </template>
 
 <script>
-// import ReimbursementTypeService from '@/api/sys/ReimbursementTypeService'
-import ReimbursementApprovalTypeService from '@/api/cw/reimbursementApproval/ReimbursementApprovalTypeService'
 import MaterialTypeService from '@/api/psi/MaterialTypeService'
 import SelectTree from '@/components/treeSelect/treeSelect.vue'
-// import OfficeService from '@/api/sys/OfficeService'
+
+const defaultInputForm = () => ({
+	businessType: '',
+	infoType: '0',
+	name: '',
+	brand: '',
+	specification: '',
+	company: '',
+	sort: '',
+	parentId: ''
+})
+
 export default {
 	data() {
 		return {
@@ -55,48 +81,54 @@ export default {
 			method: '',
 			visible: false,
 			loading: false,
-			inputForm: {
-				businessType: '',
-				name: '',
-				sort: '',
-				parentId: ''
-			}
+			parentLocked: false,
+			inputForm: defaultInputForm()
 		}
 	},
-	// reimbursementTypeService: null,
-	reimbursementApprovalTypeService: null,
 	materialTypeService: null,
-	// OfficeService: null,
 	created() {
-		// this.reimbursementTypeService = new ReimbursementTypeService()
-		this.reimbursementApprovalTypeService = new ReimbursementApprovalTypeService()
 		this.materialTypeService = new MaterialTypeService()
-		// this.officeService = new OfficeService()
 	},
 	components: {
 		SelectTree
 	},
+	computed: {
+		isGoods() {
+			return this.inputForm.infoType === '1' || this.inputForm.infoType === 1
+		},
+		isParentLocked() {
+			return this.parentLocked
+		}
+	},
 	methods: {
 		init(method, id, businessType) {
 			this.method = method
-			this.inputForm = {
-				businessType: '',
-				name: '',
-				sort: '',
-				parentId: ''
-			}
+			this.parentLocked = false
+			this.inputForm = defaultInputForm()
 			if (method === 'add') {
-				this.title = `新建报销类型`
+				this.title = `新建物资分类`
 			} else if (method === 'edit') {
 				this.inputForm.id = id
-				this.title = '修改报销类型'
+				this.title = '修改物资信息'
 			} else if (method === 'view') {
 				this.inputForm.id = id
-				this.title = '查看报销类型'
+				this.title = '查看物资信息'
 			} else if (method === 'addChild') {
 				this.title = '添加下级结构'
+				this.parentLocked = true
+				this.inputForm.infoType = '0'
 				this.inputForm.parentId = id
 				this.inputForm.businessType = businessType
+			} else if (method === 'addGoods') {
+				this.title = '添加商品'
+				this.inputForm.infoType = '1'
+				if (id) {
+					this.parentLocked = true
+					this.inputForm.parentId = id
+				}
+				if (businessType) {
+					this.inputForm.businessType = businessType
+				}
 			}
 			this.visible = true
 			this.loading = false
@@ -104,16 +136,14 @@ export default {
 				if (method === 'edit' || method === 'view') { // 修改或者查看
 					this.loading = true
 					this.$refs.inputForm.resetFields()
-					this.materialTypeService.findById(this.inputForm.id).then(({ data }) => {
-						this.inputForm = this.recover(this.inputForm, data)
+					this.materialTypeService.findById(this.inputForm.id).then((data) => {
+						this.inputForm = this.recover(this.inputForm, this.getResponseData(data))
+						this.inputForm.infoType = this.inputForm.infoType || '0'
 						this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
 						this.loading = false
+					}).catch(() => {
+						this.loading = false
 					})
-					// this.reimbursementTypeService.findById(this.inputForm.id).then(({data}) => {
-					//   this.inputForm = this.recover(this.inputForm, data)
-					//   this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
-					//   this.loading = false
-					// })
 				}
 			})
 		},
@@ -122,34 +152,38 @@ export default {
 			this.$refs['inputForm'].validate((valid) => {
 				if (valid) {
 					this.loading = true
-					this.materialTypeService.save(this.inputForm).then(({ data }) => {
-						if (data === false) {
+					this.materialTypeService.save(this.inputForm).then((data) => {
+						const result = this.getResponseData(data)
+						if (result === false || result === 'false') {
 							this.close()
 							this.$message.error('物资名称重复,请重新填写')
 							this.$emit('refreshDataList')
 							this.loading = false
+						} else if (result === '商品节点下不能新增下级') {
+							this.$message.error(result)
+							this.loading = false
 						} else {
 							this.close()
-							this.$message.success(data)
+							this.$message.success(result)
 							this.$emit('refreshDataList')
 							this.loading = false
 						}
 					}).catch(() => {
 						this.loading = false
 					})
-					// this.reimbursementTypeService.save(this.inputForm).then(({data}) => {
-					//   this.close()
-					//   this.$message.success(data)
-					//   this.$emit('refreshDataList')
-					//   this.loading = false
-					// }).catch(() => {
-					//   this.loading = false
-					// })
 				}
 			})
 		},
+		getResponseData(data) {
+			if (data && Object.prototype.hasOwnProperty.call(data, 'data')) {
+				return data.data
+			}
+			return data
+		},
 		close() {
-			this.$refs.inputForm.resetFields()
+			if (this.$refs.inputForm) {
+				this.$refs.inputForm.resetFields()
+			}
 			this.visible = false
 		}
 	}

+ 18 - 5
src/views/psiManagement/materialType/TypeList.vue

@@ -21,6 +21,8 @@
 				<template #buttons>
 					<el-button v-if="hasPermission('psi:type:add')" type="primary" icon="el-icon-plus"
 						@click="add()">新建</el-button>
+					<el-button v-if="hasPermission('psi:type:add')" type="primary" icon="el-icon-goods"
+						@click="addGoods()">添加商品</el-button>
 					<!--          <el-button v-if="hasPermission('program:configuration:type:del')" type="danger"  icon="el-icon-delete" @click="del()" :disabled="$refs.typeTable && $refs.typeTable.getCheckboxRecords().length === 0" plain>删除</el-button>-->
 				</template>
 			</vxe-toolbar>
@@ -32,15 +34,20 @@
 					:checkbox-config="{}">
 					<vxe-column type="seq" width="60" title="序号"></vxe-column>
 					<vxe-column type="checkbox" width="60"></vxe-column>
-					<vxe-column title="物资名称" field="name" align="left" tree-node></vxe-column>
-					<vxe-column width="100" title="序号" field="sort"></vxe-column>
+					<vxe-column title="物资名称" field="name" tree-node></vxe-column>
+					<vxe-column title="品牌" width="180" field="brand"></vxe-column>
+					<vxe-column title="规格" width="180" field="specification"></vxe-column>
+					<vxe-column title="单位" width="180" field="company"></vxe-column>
+					<!-- <vxe-column width="100" title="序号" field="sort"></vxe-column> -->
 
-					<vxe-column title="操作" width="230px" fixed="right" align="center">
+					<vxe-column title="操作" width="320px" fixed="right" align="center">
 						<template #default="scope">
 							<el-button
-								v-if="hasPermission('psi:type:edit') && (scope.row.level === '1' || scope.row.level === '2' || scope.row.level === '3' || scope.row.level === '4')"
+								v-if="hasPermission('psi:type:edit') && isCategory(scope.row) && (scope.row.level === '1' || scope.row.level === '2' || scope.row.level === '3' || scope.row.level === '4')"
 								text type="primary"
-								@click="addChild(scope.row.id, scope.row.businessType)">添加下级结构</el-button>
+								@click="addChild(scope.row.id, scope.row.businessType)">添加下级分类</el-button>
+							<el-button v-if="hasPermission('psi:type:edit') && isCategory(scope.row)" text
+								type="primary" @click="addGoods(scope.row.id, scope.row.businessType)">添加商品</el-button>
 							<el-button v-if="hasPermission('psi:type:edit')" text type="primary"
 								@click="edit(scope.row.id)">修改</el-button>
 							<el-button v-if="hasPermission('psi:type:remove')" text type="primary"
@@ -96,6 +103,12 @@ export default {
 		addChild(id, businessType) {
 			this.$refs.typeForm.init('addChild', id, businessType)
 		},
+		addGoods(id, businessType) {
+			this.$refs.typeForm.init('addGoods', id, businessType)
+		},
+		isCategory(row) {
+			return !row.infoType || row.infoType === '0' || row.infoType === 0
+		},
 		// 修改
 		edit(id) {
 			id = id || this.$refs.typeTable.getCheckboxRecords().map(item => {

+ 64 - 50
src/views/psiManagement/purchase/PurchaseForm.vue

@@ -76,33 +76,32 @@
 			</el-divider>
 			<el-row :gutter="15">
 				<el-col :span="24">
-					<vxe-table border show-footer show-overflow :footer-method="footerMethod" ref="detailTable"
-						class="vxe-table-element" :data="inputForm.detailInfos" :key="clientTableKey"
-						style="margin-left: 5em" highlight-current-row
+					<vxe-table border show-footer show-overflow ref="detailTable" class="vxe-table-element"
+						:data="inputForm.detailInfos" :key="clientTableKey" style="margin-left: 5em"
+						highlight-current-row
 						:edit-config="{ trigger: 'click', mode: 'row', showStatus: false, autoClear: true, icon: '-' }"
 						:edit-rules="validRules">
-						<vxe-table-column align="center" field="purchaserAgent" title="采购人" :edit-render="{}"
+						<!-- <vxe-table-column align="center" field="purchaserAgent" title="采购人" :edit-render="{}"
 							:rules="[{ required: true, message: '请选择采购人', trigger: 'blur' }]">
 							<template #edit="scope">
 								<el-input v-model="scope.row.purchaserAgent"
 									@focus="userPullListForm(scope.$rowIndex)"></el-input>
 							</template>
-						</vxe-table-column>
-						<vxe-table-column align="center" field="procurementOffice" title="采购部门" :edit-render="{}">
+</vxe-table-column> -->
+						<!-- <vxe-table-column align="center" field="procurementOffice" title="采购部门" :edit-render="{}">
 							<template #edit="scope">
 								<el-input :disabled='true' v-model="scope.row.procurementOffice"></el-input>
 							</template>
-						</vxe-table-column>
-						<vxe-table-column align="center" field="procurementType" title="采购类型" :edit-render="{}"
-							:rules="[{ required: true, message: '请选择采购类型', trigger: 'blur' }]">
+						</vxe-table-column> -->
+						<vxe-table-column align="center" field="procurementType" title="商品名称" :edit-render="{}"
+							:rules="[{ required: true, message: '请选择商品', trigger: 'blur' }]">
 							<template v-slot:edit="scope">
 								<el-input v-model="scope.row.procurementType"
 									@focus="typePullForm(scope.$rowIndex)"></el-input>
 							</template>
 						</vxe-table-column>
-						<vxe-table-column align="center" field="tradeName" title="商品名称" :edit-render="{}" :rules="[]">
+						<!-- <vxe-table-column align="center" field="tradeName" title="商品名称" :edit-render="{}" :rules="[]">
 							<template v-slot:edit="scope">
-								<!--              <el-input @change="ifSameValue" v-model="scope.row.tradeName"></el-input>-->
 								<vxe-pulldown ref="xDown1" transfer>
 									<template #default>
 										<vxe-input v-model="scope.row.tradeName"
@@ -120,8 +119,8 @@
 									</template>
 								</vxe-pulldown>
 							</template>
-						</vxe-table-column>
-						<vxe-table-column align="center" field="supplierName" title="供应商" :edit-render="{}"
+						</vxe-table-column> -->
+						<!-- <vxe-table-column align="center" field="supplierName" title="供应商" :edit-render="{}"
 							:rules="[{ required: true, message: '请选择供应商', trigger: 'blur' }]">
 							<template v-slot:edit="scope">
 								<vxe-pulldown ref="xDown4" transfer>
@@ -147,16 +146,16 @@
 									</template>
 								</vxe-pulldown>
 							</template>
-						</vxe-table-column>
-						<vxe-table-column align="center" field="tradePrice" title="商品单价(元)" :edit-render="{}"
+						</vxe-table-column> -->
+						<!-- <vxe-table-column align="center" field="tradePrice" title="商品单价(元)" :edit-render="{}"
 							:rules="[]">
 							<template v-slot:edit="scope">
-								<!--              <el-input @change="changeValue" maxlength="15" v-model="scope.row.tradePrice" @keyup.native="scope.row.tradePrice = twoDecimalPlaces(scope.row.tradePrice)"></el-input>-->
 								<el-input @change="changeValue" maxlength="15" v-model="scope.row.tradePrice"
 									@blur="scope.row.tradePrice = twoDecimalPlaces2(scope.row.tradePrice)"></el-input>
 							</template>
-						</vxe-table-column>
-						<vxe-table-column align="center" field="tradeNumber" title="商品数量" :edit-render="{}">
+						</vxe-table-column> -->
+						<vxe-table-column align="center" field="tradeNumber" title="采购数量" :edit-render="{}"
+							:rules="[{ required: true, message: '请填写采购数量', trigger: 'blur' }]">
 							<template v-slot:edit="scope">
 								<!--              <el-input @change="changeValue" v-model="scope.row.tradeNumber" oninput ="value=value.replace(/\D|^0/g,'')" maxlength="10"></el-input>-->
 								<el-input @change="changeValue" v-model="scope.row.tradeNumber"
@@ -164,13 +163,24 @@
 									maxlength="10"></el-input>
 							</template>
 						</vxe-table-column>
-						<vxe-table-column align="center" field="priceSum" title="商品总价" :edit-render="{}">
+						<!-- <vxe-table-column align="center" field="priceSum" title="商品总价" :edit-render="{}">
 							<template v-slot:edit="scope">
 								<el-input v-model="scope.row.priceSum" :readonly="true" maxlength="15"></el-input>
-								<!--              <el-input v-model="scope.row.priceSum" @blur="scope.row.priceSum = twoDecimalPlaces(scope.row.priceSum, scope.$rowIndex)" maxlength="15"></el-input>-->
+							</template>
+						</vxe-table-column> -->
+						<vxe-table-column align="center" field="brand" title="品牌"
+							:rules="[{ required: true, message: '请填写品牌', trigger: 'blur' }]">
+							<template v-slot:edit="scope">
+								<el-input v-model="scope.row.brand"></el-input>
+							</template>
+						</vxe-table-column>
+						<vxe-table-column align="center" field="specification" title="规格"
+							:rules="[{ required: true, message: '请填写规格', trigger: 'blur' }]">
+							<template v-slot:edit="scope">
+								<el-input v-model="scope.row.specification"></el-input>
 							</template>
 						</vxe-table-column>
-						<vxe-table-column align="center" field="company" title="单位" :edit-render="{}"
+						<vxe-table-column align="center" field="company" title="单位"
 							:rules="[{ required: true, message: '请填写单位', trigger: 'blur' }]">
 							<template v-slot:edit="scope">
 								<el-input v-model="scope.row.company"></el-input>
@@ -226,18 +236,18 @@ export default {
 	data() {
 		return {
 			validRules: {
-				purchaserAgent: [
-					{ required: true, message: '采购人不能为空' }
-				],
-				procurementOffice: [
-					{ required: true, message: '采购部门不能为空' }
-				],
+				// purchaserAgent: [
+				// 	{ required: true, message: '采购人不能为空' }
+				// ],
+				// procurementOffice: [
+				// 	{ required: true, message: '采购部门不能为空' }
+				// ],
 				procurementType: [
-					{ required: true, message: '采购类型不能为空' }
+					{ required: true, message: '商品不能为空' }
+				],
+				tradeNumber: [
+					{ required: true, message: '采购数量不能为空' }
 				],
-				tradeName: [
-					{ required: true, message: '商品名称不能为空' }
-				]
 			},
 			title: '',
 			method: '',
@@ -359,6 +369,7 @@ export default {
 		},
 		init(method, id) {
 			this.method = method
+			const purchaseDate = this.moment(new Date()).format('YYYY-MM-DD')
 			this.inputForm = {
 				tradeTotalPrice: '',  // 商品总价
 				fileInfoLost: [],
@@ -366,10 +377,10 @@ export default {
 				handledByOffice: '',
 				handledBy: this.$store.state.user.name,
 				handledById: this.$store.state.user.id,
-				purchaseSketch: '',
+				purchaseSketch: method === 'add' ? this.buildPurchaseSketch(purchaseDate) : '',
 				purchaseNo: '', // 采购编号
 				userId: this.$store.state.user.id,
-				purchaseDate: this.moment(new Date()).format('YYYY-MM-DD'),
+				purchaseDate: purchaseDate,
 				remarks: '',
 				detailInfos: [],
 				procInsId: '',
@@ -433,7 +444,10 @@ export default {
 							this.inputForm.handledById = this.$store.state.user.id
 						}
 						if (this.commonJS.isEmpty(this.inputForm.purchaseDate)) {
-							this.inputForm.purchaseDate = this.moment(new Date()).format('YYYY-MM-DD')
+							this.inputForm.purchaseDate = purchaseDate
+						}
+						if (this.commonJS.isEmpty(this.inputForm.purchaseSketch)) {
+							this.inputForm.purchaseSketch = this.buildPurchaseSketch(this.inputForm.purchaseDate)
 						}
 						this.inputForm.detailInfos = []
 						this.loading = false
@@ -444,6 +458,9 @@ export default {
 				}
 			})
 		},
+		buildPurchaseSketch(purchaseDate) {
+			return `${this.$store.state.user.name} ${purchaseDate} 申请`
+		},
 		getUpload(p, index) {
 			p.then((list) => {
 				// list为返回数据
@@ -513,6 +530,7 @@ export default {
 					data.purchaserAgentId = this.purchaserAgentId
 					data.purchaserAgent = this.name
 					data.procurementOffice = this.officeName
+					data.spec = '1'
 					this.inputForm.detailInfos.push(data)
 					console.log('this.inputForm.detailInfos', this.inputForm.detailInfos)
 					this.clientTableKey = Math.random()
@@ -595,18 +613,13 @@ export default {
 						let i = this.inputForm.detailInfos.length
 						for (let j = 0; j < i; j++) {
 							let k = j + 1
-							if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].purchaserAgent)) {
-								this.$message.error('采购详情第' + k + '行请选择采购人')
-								this.loading = false
-								return
-							}
 							if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].procurementType)) {
-								this.$message.error('采购详情第' + k + '行请选择采购类型')
+								this.$message.error('采购详情第' + k + '行请选择商品')
 								this.loading = false
 								return
 							}
-							if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].tradeName)) {
-								this.$message.error('采购详情第' + k + '行请填写商品名称')
+							if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].tradeNumber)) {
+								this.$message.error('采购详情第' + k + '行请填写采购数量')
 								this.loading = false
 								return
 							}
@@ -614,13 +627,9 @@ export default {
 						for (let j = 0; j < i; j++) {
 							for (let k = j + 1; k < i; k++) {
 								if (this.inputForm.detailInfos[j].procurementType === this.inputForm.detailInfos[k].procurementType) { // 如果采购类型相同
-									if (this.inputForm.detailInfos[j].tradeName === this.inputForm.detailInfos[k].tradeName) { // 如果商品名称相同
-										if (this.inputForm.detailInfos[j].supplierName === this.inputForm.detailInfos[k].supplierName) {
-											this.$message.warning(`采购详情中,同种采购类型、同一供应商的商品名称只能输入一条`)
-											this.loading = false
-											throw new Error('采购详情中,同种采购类型、同一供应商的商品名称只能输入一条')
-										}
-									}
+									this.$message.warning(`采购详情中,同种商品名称只能输入一条`)
+									this.loading = false
+									throw new Error('采购详情中,同种商品名称只能输入一条')
 								}
 							}
 						}
@@ -833,6 +842,11 @@ export default {
 		getProgramForType(rows) {
 			this.inputForm.detailInfos[this.indexRow].procurementTypeId = rows.id
 			this.inputForm.detailInfos[this.indexRow].procurementType = rows.name
+			this.inputForm.detailInfos[this.indexRow].tradeName = rows.name
+			this.inputForm.detailInfos[this.indexRow].brand = rows.brand
+			this.inputForm.detailInfos[this.indexRow].specification = rows.specification
+			this.inputForm.detailInfos[this.indexRow].spec = rows.spec || '1'
+			this.inputForm.detailInfos[this.indexRow].company = rows.company
 			this.indexRow = ''
 			this.$forceUpdate()
 		},
@@ -874,7 +888,7 @@ export default {
 							this.commonJS.isNotEmpty(this.inputForm.detailInfos[k].tradeName) && this.inputForm.detailInfos[j].tradeName === this.inputForm.detailInfos[k].tradeName) {
 							// parseFloat(item.account).toFixed(2)
 							this.inputForm.detailInfos.splice(k, 1)
-							this.$message.warning(`同种采购类型的商品名称只能输入一条信息!`)
+							this.$message.warning(`同种商品只能输入一条信息!`)
 						}
 					}
 				}

+ 1 - 2
src/views/psiManagement/purchase/PurchaseList.vue

@@ -77,8 +77,7 @@
 							<span v-else>{{ scope.row.purchaseSketch }}</span>
 						</template>
 					</vxe-column>
-					<vxe-column min-width="160" align="center" title="采购方式" field="purchaseMode"></vxe-column>
-					<vxe-column min-width="160" align="center" title="采购金额(元)" field="tradeTotalPrice"></vxe-column>
+					<!-- <vxe-column min-width="160" align="center" title="采购方式" field="purchaseMode"></vxe-column> -->
 					<vxe-column min-width="160" align="center" title="经办人" field="handledByName"></vxe-column>
 					<vxe-column min-width="160" align="center" title="经办人部门" field="handledByOfficeName"></vxe-column>
 					<vxe-column min-width="160" align="center" title="申请时间" field="createDate"></vxe-column>

+ 74 - 117
src/views/psiManagement/wareHouse/WareHouseAddForm.vue

@@ -66,21 +66,14 @@
 					</el-divider>
 					<el-row :gutter="15">
 						<el-col :span="24">
-							<vxe-table border show-footer show-overflow :footer-method="footerMethod" ref="detailTable"
-								class="vxe-table-element" :data="inputForm.detailInfos" style="margin-left: 3em">
-								<vxe-column min-width="100" align="center" field="purchaserAgent"
-									title="采购人"></vxe-column>
-								<vxe-column min-width="100" align="center" field="procurementOffice"
-									title="采购部门"></vxe-column>
+							<vxe-table border show-footer show-overflow ref="detailTable" class="vxe-table-element"
+								:data="inputForm.detailInfos" style="margin-left: 3em">
 								<vxe-column min-width="100" align="center" field="procurementType"
-									title="采购类型"></vxe-column>
-								<vxe-column min-width="100" align="center" field="supplierName"
-									title="供应商"></vxe-column>
-								<vxe-column min-width="220" align="center" field="tradeName" title="商品名称"></vxe-column>
-								<vxe-column min-width="100" align="center" field="tradePrice"
-									title="商品单价(元)"></vxe-column>
-								<vxe-column min-width="80" align="center" field="tradeNumber" title="商品数量"></vxe-column>
-								<vxe-column min-width="100" align="center" field="priceSum" title="商品总价"></vxe-column>
+									title="商品名称"></vxe-column>
+								<vxe-column min-width="80" align="center" field="tradeNumber" title="采购数量"></vxe-column>
+								<vxe-column min-width="100" align="center" field="brand" title="品牌"></vxe-column>
+								<vxe-column min-width="100" align="center" field="specification"
+									title="规格"></vxe-column>
 								<vxe-column min-width="100" align="center" field="company" title="单位"></vxe-column>
 								<vxe-column min-width="100" align="center" field="remarks" title="备注"></vxe-column>
 								<vxe-column align="center" title="操作" fixed="right" width="150">
@@ -104,12 +97,11 @@
 				</el-divider>
 				<el-row :gutter="15">
 					<el-col :span="24">
-						<vxe-table border show-footer show-overflow :footer-method="footerMethod2" ref="detailTableWare"
-							class="vxe-table-element" :data="inputForm.wareHouse" style="margin-left: 3em"
-							highlight-current-row
+						<vxe-table border show-footer show-overflow ref="detailTableWare" class="vxe-table-element"
+							:data="inputForm.wareHouse" style="margin-left: 3em" highlight-current-row
 							:edit-config="{ trigger: 'click', mode: 'row', showStatus: false, autoClear: !shelfLifeUnitSelectVisible, icon: '-' }"
 							:edit-rules="validRules" :key="tableKey">
-							<vxe-table-column min-width="100px" align="center" field="wareHouseMan" title="入库人"
+							<!-- <vxe-table-column min-width="100px" align="center" field="wareHouseMan" title="入库人"
 								:edit-render="{}">
 								<template v-slot:edit="scope">
 									<el-input v-model="scope.row.wareHouseMan"
@@ -121,15 +113,15 @@
 								<template v-slot:edit="scope">
 									<el-input :disabled='true' v-model="scope.row.wareHouseManOffice"></el-input>
 								</template>
-							</vxe-table-column>
-							<vxe-table-column min-width="100px" align="center" field="wareHouseType" title="入库类型"
+							</vxe-table-column> -->
+							<vxe-table-column min-width="100px" align="center" field="wareHouseType" title="商品名称"
 								:edit-render="{}">
 								<template v-slot:edit="scope">
 									<el-input v-model="scope.row.wareHouseType"
 										@focus="typePullForm(scope.$rowIndex)"></el-input>
 								</template>
 							</vxe-table-column>
-							<vxe-table-column min-width="180px" align="center" field="tradeName" title="商品名称"
+							<!-- <vxe-table-column min-width="180px" align="center" field="tradeName" title="商品名称"
 								:edit-render="{}">
 								<template v-slot:edit="scope">
 									<vxe-pulldown ref="xDown1" transfer>
@@ -148,8 +140,8 @@
 										</template>
 									</vxe-pulldown>
 								</template>
-							</vxe-table-column>
-							<vxe-table-column min-width="100px" align="center" field="supplierName" title="供应商"
+							</vxe-table-column> -->
+							<!-- <vxe-table-column min-width="100px" align="center" field="supplierName" title="供应商"
 								:edit-render="{}">
 								<template v-slot:edit="scope">
 									<vxe-pulldown ref="xDown4" transfer>
@@ -175,8 +167,8 @@
 										</template>
 									</vxe-pulldown>
 								</template>
-							</vxe-table-column>
-							<vxe-table-column min-width="80px" align="center" field="tradeNumber" title="商品数量"
+							</vxe-table-column> -->
+							<vxe-table-column min-width="80px" align="center" field="tradeNumber" title="入库数量"
 								:edit-render="{}">
 								<template v-slot:edit="scope">
 									<el-input @change="changeValue2" v-model="scope.row.tradeNumber"
@@ -184,45 +176,45 @@
 										maxlength="10"></el-input>
 								</template>
 							</vxe-table-column>
-							<vxe-table-column min-width="80px" align="center" field="company" title="单位"
-								:edit-render="{}">
+							<vxe-table-column min-width="80px" align="center" field="brand" title="品牌">
 								<template v-slot:edit="scope">
-									<el-input maxlength="64" v-model="scope.row.company"></el-input>
+									<el-input maxlength="64" v-model="scope.row.brand"></el-input>
 								</template>
 							</vxe-table-column>
-							<vxe-table-column min-width="80px" align="center" field="spec" title="包装规格"
-								:edit-render="{}">
+							<vxe-table-column min-width="80px" align="center" field="specification" title="规格">
 								<template v-slot:edit="scope">
-									<!-- 只能输入数字 -->
-									<el-input maxlength="64" v-model="scope.row.spec"
-										@blur="scope.row.spec = handleCheckNumber(scope.row.spec)"></el-input>
-
+									<el-input maxlength="64" v-model="scope.row.specification"></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column min-width="80px" align="center" field="company" title="单位">
+								<template v-slot:edit="scope">
+									<el-input maxlength="64" v-model="scope.row.company"></el-input>
 								</template>
 							</vxe-table-column>
-							<vxe-table-column min-width="80px" align="center" field="tradePrice" title="商品单价(元)"
+							<!-- <vxe-table-column min-width="80px" align="center" field="tradePrice" title="商品单价(元)"
 								:edit-render="{}">
 								<template v-slot:edit="scope">
 									<el-input @change="changeValue2" maxlength="15" v-model="scope.row.tradePrice"
 										@blur="scope.row.tradePrice = twoDecimalPlaces2(scope.row.tradePrice)"></el-input>
 								</template>
-							</vxe-table-column>
-							<vxe-table-column min-width="80px" align="center" field="priceSum" title="商品总价"
+							</vxe-table-column> -->
+							<!-- <vxe-table-column min-width="80px" align="center" field="priceSum" title="商品总价"
 								:edit-render="{}">
 								<template v-slot:edit="scope">
 									<el-input :disabled='true' v-model="scope.row.priceSum"
 										@blur="scope.row.priceSum = twoDecimalPlaces(scope.row.priceSum)"
 										maxlength="15"></el-input>
 								</template>
-							</vxe-table-column>
-							<vxe-table-column min-width="180px" align="center" field="produceDate" title="生产日期"
+							</vxe-table-column> -->
+							<!-- <vxe-table-column min-width="180px" align="center" field="produceDate" title="生产日期"
 								:edit-render="{}">
 								<template v-slot:edit="scope">
 									<el-date-picker v-model="scope.row.produceDate" type="date" placement="bottom-start"
 										value-format="YYYY-MM-DD" style="width: 100%" placeholder="选择生产日期">
 									</el-date-picker>
 								</template>
-							</vxe-table-column>
-							<vxe-table-column min-width="160px" align="center" field="shelfLife" title="保质期"
+							</vxe-table-column> -->
+							<!-- <vxe-table-column min-width="160px" align="center" field="shelfLife" title="保质期"
 								:edit-render="{}">
 								<template v-slot="scope">
 									<span v-if="scope.row.shelfLife && scope.row.shelfLifeUnit">
@@ -241,15 +233,15 @@
 										</template>
 									</el-input>
 								</template>
-							</vxe-table-column>
-							<vxe-table-column min-width="80px" align="center" field="actualPrice" title="实际价格"
+							</vxe-table-column> -->
+							<!-- <vxe-table-column min-width="80px" align="center" field="actualPrice" title="实际价格"
 								:edit-render="{}">
 								<template v-slot:edit="scope">
 									<el-input v-model="scope.row.actualPrice"
 										@blur="scope.row.actualPrice = twoDecimalPlaces(scope.row.actualPrice)"
 										maxlength="15"></el-input>
 								</template>
-							</vxe-table-column>
+							</vxe-table-column> -->
 
 							<vxe-table-column min-width="80px" align="center" field="remarks" title="备注"
 								:edit-render="{}">
@@ -308,29 +300,17 @@ import ContractChooseForm from '../contract/ContractChooseForm'
 import XEUtils from 'xe-utils'
 import UpdateInfoForm from '../info/UpdateInfoForm'
 import SupplierService from '@/api/psi/SupplierService'
-import { ElMessage, ElMessageBox } from 'element-plus'
 export default {
 	data() {
 		return {
 			validRules: {
-				wareHouseMan: [
-					{ required: true, message: '请选择入库人' }
-				],
 				wareHouseType: [
-					{ required: true, message: '请选择入库类型' }
-				],
-				supplierName: [
-					{ required: true, message: '请选择供应商' }
-				],
-				tradeName: [
 					{ required: true, message: '请填写商品名称' }
 				],
+
 				tradeNumber: [
 					{ required: true, message: '商品数量不能为空' }
 				],
-				spec: [
-					{ required: true, message: '请填写包装规格' }
-				],
 			},
 			purchaseId: '',
 			title: '',
@@ -411,6 +391,7 @@ export default {
 	methods: {
 		init(method, id) {
 			this.method = method
+			const wareHouseDate = this.moment(new Date()).format('YYYY-MM-DD')
 			this.inputForm = {
 				wareHouseTotalPrice: '', // 入库商品总价
 				wareHouseActualPrice: '', // 入库商品实际价格
@@ -421,10 +402,10 @@ export default {
 				handledBy: this.$store.state.user.name,
 				handledById: this.$store.state.user.id,
 				handledByOffice: this.$store.state.user.office.id,
-				wareHouseName: '',
+				wareHouseName: method === 'add' || method === 'purchaseAdd' ? this.buildPurchaseSketch(wareHouseDate) : '', // 入库名称
 				wareHouseNumber: '', // 入库编号
 				userId: this.$store.state.user.id,
-				wareHouseDate: '',
+				wareHouseDate: wareHouseDate,
 				remarks: '',
 				detailInfos: [],
 				wareHouse: [],
@@ -491,6 +472,9 @@ export default {
 				}
 			})
 		},
+		buildPurchaseSketch(purchaseDate) {
+			return `${this.$store.state.user.name} ${purchaseDate} 入库`
+		},
 		getContract(row) {
 			this.materialManagementService.findById(row.id).then((data) => {
 				this.inputForm.detailInfos = data.detailInfos
@@ -583,6 +567,7 @@ export default {
 		getProgramForType(rows) {
 			this.inputForm.wareHouse[this.indexRow].wareHouseTypeId = rows.id
 			this.inputForm.wareHouse[this.indexRow].wareHouseType = rows.name
+			this.inputForm.wareHouse[this.indexRow].tradeName = rows.name
 			// this.inputForm.detailInfos[this.indexRow].procurementType = rows.name
 			this.indexRow = ''
 			this.$forceUpdate()
@@ -747,80 +732,49 @@ export default {
 			let i = this.inputForm.wareHouse.length
 			for (let j = 0; j < i; j++) {
 				let k = j + 1
-				if (this.commonJS.isEmpty(this.inputForm.wareHouse[j].wareHouseMan)) {
-					this.$message.error('入库详情第' + k + '行请选择入库人')
-					this.loading = false
-					return
-				}
+				// if (this.commonJS.isEmpty(this.inputForm.wareHouse[j].wareHouseMan)) {
+				// 	this.$message.error('入库详情第' + k + '行请选择入库人')
+				// 	this.loading = false
+				// 	return
+				// }
+				// if (this.commonJS.isEmpty(this.inputForm.wareHouse[j].wareHouseType)) {
+				// 	this.$message.error('入库详情第' + k + '行请选择入库类型')
+				// 	this.loading = false
+				// 	return
+				// }
+				// if (this.commonJS.isEmpty(this.inputForm.wareHouse[j].supplierName) || this.commonJS.isEmpty(this.inputForm.wareHouse[j].supplierId)) {
+				// 	this.$message.error('入库详情第' + k + '行请选择供应商')
+				// 	this.loading = false
+				// 	return
+				// }
 				if (this.commonJS.isEmpty(this.inputForm.wareHouse[j].wareHouseType)) {
-					this.$message.error('入库详情第' + k + '行请选择入库类型')
-					this.loading = false
-					return
-				}
-				if (this.commonJS.isEmpty(this.inputForm.wareHouse[j].supplierName) || this.commonJS.isEmpty(this.inputForm.wareHouse[j].supplierId)) {
-					this.$message.error('入库详情第' + k + '行请选择供应商')
-					this.loading = false
-					return
-				}
-				if (this.commonJS.isEmpty(this.inputForm.wareHouse[j].tradeName)) {
 					this.$message.error('入库详情第' + k + '行请填写商品名称')
 					this.loading = false
 					return
 				}
 				if (this.commonJS.isEmpty(this.inputForm.wareHouse[j].tradeNumber)) {
-					this.$message.error('入库详情第' + k + '行请填写商品数量')
+					this.$message.error('入库详情第' + k + '行请填写入库数量')
 					this.loading = false
 					this.inputForm.functionFlag = ''
 					return
 				}
-				if (this.commonJS.isEmpty(this.inputForm.wareHouse[j].spec)) {
-					this.$message.error('入库详情第' + k + '行请填写包装规格')
-					this.loading = false
-					return
-				}
+				// if (this.commonJS.isEmpty(this.inputForm.wareHouse[j].specification)) {
+				// 	this.$message.error('入库详情第' + k + '行请填写规格')
+				// 	this.loading = false
+				// 	return
+				// }
 			}
 			for (let j = 0; j < i; j++) {
 				for (let k = j + 1; k < i; k++) {
 					if (this.inputForm.wareHouse[j].wareHouseTypeId === this.inputForm.wareHouse[k].wareHouseTypeId) { // 如果入库类型相同
-						if (this.inputForm.wareHouse[j].tradeName === this.inputForm.wareHouse[k].tradeName) { // 如果商品名称相同
-							// 这里直接通过判断供应商的id是否相等,因为入库只允许选择供应商,不允许手填
-							if (this.inputForm.wareHouse[j].supplierId === this.inputForm.wareHouse[k].supplierId) {
-								this.$message.warning(`入库详情中,同种入库类型、同一供应商的商品名称只能输入一条`)
-								this.loading = false
-								throw new Error('入库详情中,同种入库类型、同一供应商的商品名称只能输入一条')
-							}
-						}
+						// 这里直接通过判断供应商的id是否相等,因为入库只允许选择供应商,不允许手填
+						this.$message.warning(`入库详情中,同种入库类型的商品名称只能输入一条`)
+						this.loading = false
+						throw new Error('入库详情中,同种入库类型的商品名称只能输入一条')
 					}
 				}
 			}
-			let submitFlag = false
-			let goodIndex = 0
-			let m = this.inputForm.wareHouse.length
-			for (let j = 0; j < m; j++) {
-				//如果保质期和生产日期有一个为空,就提示
-				if ((this.commonJS.isEmpty(this.inputForm.wareHouse[j].produceDate) && this.commonJS.isNotEmpty(this.inputForm.wareHouse[j].shelfLife)) || (this.commonJS.isNotEmpty(this.inputForm.wareHouse[j].produceDate) && this.commonJS.isEmpty(this.inputForm.wareHouse[j].shelfLife))) {
-					submitFlag = true
-					goodIndex = j
-					break
-				}
-			}
-			if (submitFlag) {
-				ElMessageBox.confirm(
-					'入库详情第' + (goodIndex + 1) + '行的' + this.inputForm.wareHouse[goodIndex].tradeName + '的生产日期或保质期未填写,是否继续提交?',
-					'提示',
-					{
-						confirmButtonText: '确定',
-						cancelButtonText: '取消',
-						type: 'warning',
-					}
-				)
-					.then(() => {
-						this.handleSubmitData()
-					})
-			} else {
-				this.handleSubmitData()
-			}
-
+			this.handleSubmitData()
 		},
 		handleSubmitData() {
 			this.$refs['inputForm'].validate((valid) => {
@@ -869,6 +823,7 @@ export default {
 					data.wareHouseManId = this.wareHouseManId
 					data.wareHouseMan = this.name
 					data.wareHouseManOffice = this.officeName
+					data.spec = '1'
 					// this.inputForm.detailInfos.push(data)
 					this.inputForm.wareHouse.push(data)
 					this.tableKey = Math.random()
@@ -917,10 +872,12 @@ export default {
 				tradePrice: this.inputForm.detailInfos[index].tradePrice,
 				company: this.inputForm.detailInfos[index].company,
 				priceSum: this.inputForm.detailInfos[index].priceSum,
+				specification: this.inputForm.detailInfos[index].specification,
+				spec: this.inputForm.detailInfos[index].spec || '1',
+				brand: this.inputForm.detailInfos[index].brand,
 				supplierId: '',
 				supplierName: '',
 				isSupplier: '',
-				spec: "",
 				produceDate: "",
 				shelfLife: "",
 				shelfLifeUnit: "月"

+ 17 - 13
src/views/psiManagement/wareHouse/WareHouseHi.vue

@@ -67,17 +67,18 @@
 					<el-row :gutter="15">
 						<vxe-table border show-footer show-overflow :footer-method="footerMethod" ref="detailTable"
 							class="vxe-table-element" :data="inputForm.detailInfos" style="margin-left: 3em">
-							<vxe-column min-width="100" align="center" field="purchaserAgent" title="采购人"></vxe-column>
+							<!-- <vxe-column min-width="100" align="center" field="purchaserAgent" title="采购人"></vxe-column>
 							<vxe-column min-width="100" align="center" field="procurementOffice"
-								title="采购部门"></vxe-column>
+								title="采购部门"></vxe-column> -->
 							<vxe-column min-width="100" align="center" field="procurementType"
-								title="采购类型"></vxe-column>
-							<vxe-column min-width="220" align="center" field="tradeName" title="商品名称"></vxe-column>
-							<vxe-column min-width="130px" align="center" field="supplierName" title="供应商"></vxe-column>
-							<vxe-column min-width="100" align="center" field="tradePrice" title="商品单价(元)"></vxe-column>
-							<vxe-column min-width="80" align="center" field="tradeNumber" title="商品数量"></vxe-column>
-							<vxe-column min-width="100" align="center" field="priceSum" title="商品总价"></vxe-column>
+								title="商品名称"></vxe-column>
+							<!-- <vxe-column min-width="220" align="center" field="tradeName" title="商品名称"></vxe-column> -->
+							<vxe-column min-width="100" align="center" field="brand" title="品牌"></vxe-column>
+							<vxe-column min-width="100" align="center" field="specification" title="规格"></vxe-column>
 							<vxe-column min-width="100" align="center" field="company" title="单位"></vxe-column>
+							<!-- <vxe-column min-width="100" align="center" field="tradePrice" title="商品单价(元)"></vxe-column> -->
+							<!-- <vxe-column min-width="80" align="center" field="tradeNumber" title="商品数量"></vxe-column> -->
+							<!-- <vxe-column min-width="100" align="center" field="priceSum" title="商品总价"></vxe-column> -->
 							<vxe-column min-width="100" align="center" field="remarks" title="备注"></vxe-column>
 							<vxe-column align="center" title="操作" fixed="right" width="80">
 								<template v-slot="scope">
@@ -108,14 +109,16 @@
 						</vxe-column>
 						<vxe-column min-width="100px" align="center" field="wareHouseManOffice"
 							title="入库部门"></vxe-column>
-						<vxe-column min-width="100px" align="center" field="wareHouseType" title="入库类型"></vxe-column>
-						<vxe-column min-width="180px" align="center" field="tradeName" title="商品名称"></vxe-column>
-						<vxe-column min-width="130px" align="center" field="supplierName" title="供应商"></vxe-column>
+						<vxe-column min-width="100px" align="center" field="wareHouseType" title="商品名称"></vxe-column>
+						<!-- <vxe-column min-width="180px" align="center" field="tradeName" title="商品名称"></vxe-column> -->
+						<!-- <vxe-column min-width="130px" align="center" field="supplierName" title="供应商"></vxe-column> -->
 						<vxe-column min-width="80px" align="center" field="tradeNumber" title="商品数量"></vxe-column>
+						<vxe-column min-width="80px" align="center" field="brand" title="品牌"></vxe-column>
+						<vxe-column min-width="80px" align="center" field="specification" title="规格"></vxe-column>
 						<vxe-column min-width="80px" align="center" field="company" title="单位"></vxe-column>
-						<vxe-column min-width="80px" align="center" field="tradePrice" title="商品单价(元)"></vxe-column>
+						<!-- <vxe-column min-width="80px" align="center" field="tradePrice" title="商品单价(元)"></vxe-column>
 						<vxe-column min-width="80px" align="center" field="priceSum" title="商品总价"></vxe-column>
-						<vxe-column min-width="80px" align="center" field="actualPrice" title="实际价格"></vxe-column>
+						<vxe-column min-width="80px" align="center" field="actualPrice" title="实际价格"></vxe-column> -->
 						<vxe-column min-width="100px" align="center" field="remarks" title="备注"></vxe-column>
 						<vxe-column align="center" fixed="right" title="操作" width="80px">
 							<template v-slot="scope">
@@ -341,6 +344,7 @@ export default {
 		getProgramForType(rows) {
 			this.inputForm.wareHouse[this.indexRow].wareHouseTypeId = rows.id
 			this.inputForm.wareHouse[this.indexRow].wareHouseType = rows.name
+			this.inputForm.wareHouse[this.indexRow].tradeName = rows.name
 			// this.inputForm.detailInfos[this.indexRow].procurementType = rows.name
 			this.indexRow = ''
 			this.$forceUpdate()

+ 1 - 1
src/views/psiManagement/wareHouse/WareHouseList.vue

@@ -369,7 +369,7 @@ export default {
 							formTitle: '入库修改' + '流程详情',
 							businessId: row.id,
 							status: 'reback',
-							wareHouseId: row.id
+							psiWareHouseId: row.id
 						}
 					})
 				})

+ 102 - 93
src/views/psiManagement/wareHouse/WareHouseUpdateForm.vue

@@ -65,17 +65,19 @@
 					<el-col :span="24">
 						<vxe-table border show-footer show-overflow :footer-method="footerMethod" ref="detailTable"
 							class="vxe-table-element" :data="inputForm.detailInfos" style="margin-left: 3em">
-							<vxe-column min-width="100" align="center" field="purchaserAgent" title="采购人"></vxe-column>
-							<vxe-column min-width="100" align="center" field="procurementOffice"
-								title="采购部门"></vxe-column>
+							<!-- <vxe-column min-width="100" align="center" field="purchaserAgent" title="采购人"></vxe-column> -->
+							<!-- <vxe-column min-width="100" align="center" field="procurementOffice"
+								title="采购部门"></vxe-column> -->
 							<vxe-column min-width="100" align="center" field="procurementType"
-								title="采购类型"></vxe-column>
+								title="商品名称"></vxe-column>
 							<vxe-column min-width="220" align="center" field="tradeName" title="商品名称"></vxe-column>
-							<vxe-column min-width="100" align="center" field="supplierName" title="供应商"></vxe-column>
-							<vxe-column min-width="100" align="center" field="tradePrice" title="商品单价(元)"></vxe-column>
-							<vxe-column min-width="80" align="center" field="tradeNumber" title="商品数量"></vxe-column>
-							<vxe-column min-width="100" align="center" field="priceSum" title="商品总价"></vxe-column>
-							<vxe-column min-width="100" align="center" field="company" title="单位"></vxe-column>
+							<vxe-column min-width="80px" align="center" field="brand" title="品牌"></vxe-column>
+							<vxe-column min-width="80px" align="center" field="specification" title="规格"></vxe-column>
+							<vxe-column min-width="80px" align="center" field="company" title="单位"></vxe-column>
+							<!-- <vxe-column min-width="100" align="center" field="supplierName" title="供应商"></vxe-column> -->
+							<!-- <vxe-column min-width="100" align="center" field="tradePrice" title="商品单价(元)"></vxe-column> -->
+							<vxe-column min-width="80" align="center" field="tradeNumber" title="采购数量"></vxe-column>
+							<!-- <vxe-column min-width="100" align="center" field="priceSum" title="商品总价"></vxe-column> -->
 							<vxe-column min-width="100" align="center" field="remarks" title="备注"></vxe-column>
 							<vxe-column align="center" title="操作" fixed="right" width="80">
 								<template v-slot="scope">
@@ -96,7 +98,7 @@
 					<vxe-table border show-footer show-overflow :footer-method="footerMethod2" ref="detailTableWare"
 						class="vxe-table-element" :data="inputForm.wareHouse" style="margin-left: 3em"
 						:row-class-name="rowClassName" :key="tableKey">
-						<vxe-column min-width="100px" align="center" field="wareHouseMan" title="入库人">
+						<!-- <vxe-column min-width="100px" align="center" field="wareHouseMan" title="入库人">
 							<template v-slot="scope">
 								<span v-if="scope.row.upFlag === '1'"> {{ scope.row.wareHouseMan }}(修改前) </span>
 								<span v-else-if="scope.row.upFlag === '2'"> {{ scope.row.wareHouseMan }}(已删除) </span>
@@ -105,20 +107,31 @@
 								<span v-else-if="scope.row.upFlag === '0' && commonJS.isEmpty(scope.row.sourceId)">
 									{{ scope.row.wareHouseMan }} </span>
 							</template>
+						</vxe-column> -->
+						<!-- <vxe-column min-width="100px" align="center" field="wareHouseManOffice"
+							title="入库部门"></vxe-column> -->
+						<vxe-column min-width="100px" align="center" field="wareHouseType" title="商品名称">
+							<template v-slot="scope">
+								<span v-if="scope.row.upFlag === '1'"> {{ scope.row.tradeName }}(修改前) </span>
+								<span v-else-if="scope.row.upFlag === '2'"> {{ scope.row.tradeName }}(已删除) </span>
+								<span v-else-if="scope.row.upFlag === '0' && commonJS.isNotEmpty(scope.row.sourceId)">
+									{{ scope.row.tradeName }}(修改后) </span>
+								<span v-else-if="scope.row.upFlag === '0' && commonJS.isEmpty(scope.row.sourceId)">
+									{{ scope.row.tradeName }} </span>
+							</template>
 						</vxe-column>
-						<vxe-column min-width="100px" align="center" field="wareHouseManOffice"
-							title="入库部门"></vxe-column>
-						<vxe-column min-width="100px" align="center" field="wareHouseType" title="入库类型"></vxe-column>
-						<vxe-column min-width="180px" align="center" field="tradeName" title="商品名称"></vxe-column>
-						<vxe-column min-width="150px" align="center" field="supplierName" title="供应商"></vxe-column>
+						<!-- <vxe-column min-width="180px" align="center" field="tradeName" title="商品名称"></vxe-column> -->
+						<!-- <vxe-column min-width="150px" align="center" field="supplierName" title="供应商"></vxe-column> -->
 						<vxe-column min-width="80px" align="center" field="tradeNumber" title="商品数量"></vxe-column>
+						<vxe-column min-width="80px" align="center" field="brand" title="品牌"></vxe-column>
+						<vxe-column min-width="80px" align="center" field="specification" title="规格"></vxe-column>
 						<vxe-column min-width="80px" align="center" field="company" title="单位"></vxe-column>
-						<vxe-column min-width="80px" align="center" field="spec" title="包装规格"></vxe-column>
-						<vxe-column min-width="80px" align="center" field="tradePrice" title="商品单价(元)"></vxe-column>
-						<vxe-column min-width="80px" align="center" field="priceSum" title="商品总价"></vxe-column>
-						<vxe-column min-width="180px" align="center" field="produceDate" title="生产日期"></vxe-column>
-						<vxe-column min-width="80px" align="center" field="shelfLife" title="保质期"></vxe-column>
-						<vxe-column min-width="80px" align="center" field="actualPrice" title="实际价格"></vxe-column>
+						<!-- <vxe-column min-width="80px" align="center" field="spec" title="包装规格"></vxe-column> -->
+						<!-- <vxe-column min-width="80px" align="center" field="tradePrice" title="商品单价(元)"></vxe-column> -->
+						<!-- <vxe-column min-width="80px" align="center" field="priceSum" title="商品总价"></vxe-column> -->
+						<!-- <vxe-column min-width="180px" align="center" field="produceDate" title="生产日期"></vxe-column> -->
+						<!-- <vxe-column min-width="80px" align="center" field="shelfLife" title="保质期"></vxe-column> -->
+						<!-- <vxe-column min-width="80px" align="center" field="actualPrice" title="实际价格"></vxe-column> -->
 						<vxe-column min-width="110px" align="center" field="remarks" title="备注"></vxe-column>
 						<vxe-column align="center" fixed="right" title="操作" width="80px">
 							<template v-slot="scope">
@@ -136,7 +149,7 @@
 						highlight-current-row
 						:edit-config="{ trigger: 'click', mode: 'row', showStatus: false, autoClear: !shelfLifeUnitSelectVisible, icon: '-' }"
 						:edit-rules="validRules">
-						<vxe-table-column min-width="100px" align="center" field="wareHouseMan" title="入库人"
+						<!-- <vxe-table-column min-width="100px" align="center" field="wareHouseMan" title="入库人"
 							:edit-render="{}">
 							<template v-slot:edit="scope">
 								<el-input v-model="scope.row.wareHouseMan"
@@ -148,8 +161,8 @@
 							<template v-slot:edit="scope">
 								<el-input :disabled='true' v-model="scope.row.wareHouseManOffice"></el-input>
 							</template>
-						</vxe-table-column>
-						<vxe-table-column min-width="100px" align="center" field="wareHouseType" title="入库类型"
+						</vxe-table-column> -->
+						<vxe-table-column min-width="100px" align="center" field="wareHouseType" title="商品名称"
 							:edit-render="{}">
 							<template v-slot:edit="scope">
 								<el-input v-model="scope.row.wareHouseType"
@@ -157,27 +170,27 @@
 							</template>
 						</vxe-table-column>
 
-						<vxe-table-column min-width="180px" align="center" field="tradeName" title="商品名称"
+						<!-- <vxe-table-column min-width="180px" align="center" field="tradeName" title="商品名称"
 							:edit-render="{}">
 							<template v-slot:edit="scope">
-								<!--              <el-input @change="ifSameValue" maxlength="64" v-model="scope.row.tradeName"></el-input>-->
-								<vxe-pulldown ref="xDown1" transfer>
-									<template #default>
-										<vxe-input v-model="scope.row.tradeName" placeholder="请输入商品名称" maxlength="64"
-											@focus="focusEvent1(scope.row)" @input="keyupEvent1(scope.row)"></vxe-input>
-									</template>
-									<template #dropdown>
-										<div class="my-dropdown1">
-											<div class="list-item1" v-for="item in scope.row.tradeNameData"
-												:key="item.id" @click="selectEvent1(scope.row, item)">
-												<span>{{ item.tradeName }}</span>
-											</div>
-										</div>
-									</template>
-								</vxe-pulldown>
+								             <el-input @change="ifSameValue" maxlength="64" v-model="scope.row.tradeName"></el-input>
+						<vxe-pulldown ref="xDown1" transfer>
+							<template #default>
+								<vxe-input v-model="scope.row.tradeName" placeholder="请输入商品名称" maxlength="64"
+									@focus="focusEvent1(scope.row)" @input="keyupEvent1(scope.row)"></vxe-input>
 							</template>
-						</vxe-table-column>
-						<vxe-table-column min-width="100px" align="center" field="supplierName" title="供应商"
+							<template #dropdown>
+								<div class="my-dropdown1">
+									<div class="list-item1" v-for="item in scope.row.tradeNameData" :key="item.id"
+										@click="selectEvent1(scope.row, item)">
+										<span>{{ item.tradeName }}</span>
+									</div>
+								</div>
+							</template>
+						</vxe-pulldown>
+</template>
+						</vxe-table-column> -->
+						<!-- <vxe-table-column min-width="100px" align="center" field="supplierName" title="供应商"
 							:edit-render="{}">
 							<template v-slot:edit="scope">
 								<vxe-pulldown ref="xDown4" transfer>
@@ -202,44 +215,47 @@
 									</template>
 								</vxe-pulldown>
 							</template>
-						</vxe-table-column>
+						</vxe-table-column> -->
 						<vxe-table-column min-width="80px" align="center" field="tradeNumber" title="商品数量"
 							:edit-render="{}">
 							<template v-slot:edit="scope">
-								<el-input @change="changeValue2" v-model="scope.row.tradeNumber"
-									@blur="scope.row.tradeNumber = twoDecimalPlaces2(scope.row.tradeNumber)"
+								<el-input @input="scope.row.tradeNumber = formatNonNegativeInteger($event)"
+									@change="changeValue2" v-model="scope.row.tradeNumber"
+									@blur="scope.row.tradeNumber = formatNonNegativeInteger(scope.row.tradeNumber)"
 									maxlength="10"></el-input>
 							</template>
 						</vxe-table-column>
-						<vxe-table-column min-width="80px" align="center" field="company" title="单位" :edit-render="{}">
+						<vxe-column min-width="80px" align="center" field="brand" title="品牌"></vxe-column>
+						<vxe-column min-width="80px" align="center" field="specification" title="规格"></vxe-column>
+
+						<!-- <vxe-table-column min-width="80px" align="center" field="company" title="单位" :edit-render="{}">
 							<template #edit="scope">
 								<el-input maxlength="64" v-model="scope.row.company"></el-input>
 							</template>
 						</vxe-table-column>
 						<vxe-table-column min-width="80px" align="center" field="spec" title="包装规格" :edit-render="{}">
 							<template v-slot:edit="scope">
-								<!-- 只能输入数字 -->
 								<el-input maxlength="64" v-model="scope.row.spec"
 									@blur="scope.row.spec = handleCheckNumber(scope.row.spec)"></el-input>
 
 							</template>
-						</vxe-table-column>
-						<vxe-table-column min-width="80px" align="center" field="tradePrice" title="商品单价(元)"
+						</vxe-table-column> -->
+						<!-- <vxe-table-column min-width="80px" align="center" field="tradePrice" title="商品单价(元)"
 							:edit-render="{}">
 							<template v-slot:edit="scope">
 								<el-input @change="changeValue2" maxlength="15" v-model="scope.row.tradePrice"
 									@blur="scope.row.tradePrice = twoDecimalPlaces2(scope.row.tradePrice)"></el-input>
 							</template>
-						</vxe-table-column>
-						<vxe-table-column min-width="80px" align="center" field="priceSum" title="商品总价"
+						</vxe-table-column> -->
+						<!-- <vxe-table-column min-width="80px" align="center" field="priceSum" title="商品总价"
 							:edit-render="{}">
 							<template v-slot:edit="scope">
 								<el-input :disabled='true' v-model="scope.row.priceSum"
 									@blur="scope.row.priceSum = twoDecimalPlaces(scope.row.priceSum)"
 									maxlength="15"></el-input>
 							</template>
-						</vxe-table-column>
-						<vxe-table-column min-width="180px" align="center" field="produceDate" title="生产日期"
+						</vxe-table-column> -->
+						<!-- <vxe-table-column min-width="180px" align="center" field="produceDate" title="生产日期"
 							:edit-render="{}">
 							<template v-slot:edit="scope">
 								<el-date-picker v-model="scope.row.produceDate" type="date" placement="bottom-start"
@@ -266,15 +282,15 @@
 									</template>
 								</el-input>
 							</template>
-						</vxe-table-column>
-						<vxe-table-column min-width="80px" align="center" field="actualPrice" title="实际价格"
+						</vxe-table-column> -->
+						<!-- <vxe-table-column min-width="80px" align="center" field="actualPrice" title="实际价格"
 							:edit-render="{}">
 							<template #edit="scope">
 								<el-input v-model="scope.row.actualPrice"
 									@blur="scope.row.actualPrice = twoDecimalPlaces(scope.row.actualPrice)"
 									maxlength="15"></el-input>
 							</template>
-						</vxe-table-column>
+						</vxe-table-column> -->
 
 						<vxe-table-column min-width="80px" align="center" field="remarks" title="备注" :edit-render="{}">
 							<template #edit="scope">
@@ -333,15 +349,15 @@ export default {
 	data() {
 		return {
 			validRules: {
-				wareHouseMan: [
-					{ required: true, message: '请选择入库人' }
-				],
+				// wareHouseMan: [
+				// 	{ required: true, message: '请选择入库人' }
+				// ],
 				wareHouseType: [
-					{ required: true, message: '请选择入库类型' }
-				],
-				supplierName: [
-					{ required: true, message: '请选择供应商' }
+					{ required: true, message: '请选择商品' }
 				],
+				// supplierName: [
+				// 	{ required: true, message: '请选择供应商' }
+				// ],
 				tradeName: [
 					{ required: true, message: '请填写商品名称' }
 				],
@@ -713,53 +729,35 @@ export default {
 					let i = this.inputForm.wareHouse.length
 					for (let j = 0; j < i; j++) {
 						let k = j + 1
-						if (this.commonJS.isEmpty(this.inputForm.wareHouse[j].wareHouseMan)) {
-							this.$message.error('入库详情第' + k + '行请选择入库人')
-							this.loading = false
-							this.inputForm.functionFlag = ''
-							return
-						}
+						// if (this.commonJS.isEmpty(this.inputForm.wareHouse[j].wareHouseMan)) {
+						// 	this.$message.error('入库详情第' + k + '行请选择入库人')
+						// 	this.loading = false
+						// 	this.inputForm.functionFlag = ''
+						// 	return
+						// }
 						if (this.commonJS.isEmpty(this.inputForm.wareHouse[j].wareHouseType)) {
-							this.$message.error('入库详情第' + k + '行请选择入库类型')
-							this.loading = false
-							this.inputForm.functionFlag = ''
-							return
-						}
-						if (this.commonJS.isEmpty(this.inputForm.wareHouse[j].supplierName) || this.commonJS.isEmpty(this.inputForm.wareHouse[j].supplierId)) {
-							this.$message.error('入库详情第' + k + '行请选择供应商')
-							this.loading = false
-							this.inputForm.functionFlag = ''
-							return
-						}
-						if (this.commonJS.isEmpty(this.inputForm.wareHouse[j].tradeName)) {
-							this.$message.error('入库详情第' + k + '行请填写商品名称')
+							this.$message.error('入库详情第' + k + '行请选择商品')
 							this.loading = false
 							this.inputForm.functionFlag = ''
 							return
 						}
+
 						if (this.commonJS.isEmpty(this.inputForm.wareHouse[j].tradeNumber)) {
 							this.$message.error('入库详情第' + k + '行请填写商品数量')
 							this.loading = false
 							this.inputForm.functionFlag = ''
 							return
 						}
-						if (this.commonJS.isEmpty(this.inputForm.wareHouse[j].spec)) {
-							this.$message.error('入库详情第' + k + '行请填写包装规格')
-							this.loading = false
-							this.inputForm.functionFlag = ''
-							return
-						}
+
 					}
 					for (let j = 0; j < i; j++) {
 						for (let k = j + 1; k < i; k++) {
 							if (this.inputForm.wareHouse[j].wareHouseTypeId === this.inputForm.wareHouse[k].wareHouseTypeId) { // 如果入库类型相同
 								if (this.inputForm.wareHouse[j].tradeName === this.inputForm.wareHouse[k].tradeName) { // 如果商品名称相同
 									// 这里直接通过判断供应商的id是否相等,因为入库只允许选择供应商,不允许手填
-									if (this.inputForm.wareHouse[j].supplierId === this.inputForm.wareHouse[k].supplierId) {
-										this.$message.warning(`入库详情中,同种入库类型、同一供应商的商品名称只能输入一条`)
-										this.loading = false
-										throw new Error('入库详情中,同种入库类型、同一供应商的商品名称只能输入一条')
-									}
+									this.$message.warning(`入库详情中,同种入库类型、同一供应商的商品名称只能输入一条`)
+									this.loading = false
+									throw new Error('入库详情中,同种入库类型、同一供应商的商品名称只能输入一条')
 								}
 							}
 						}
@@ -885,6 +883,16 @@ export default {
 			// eslint-disable-next-line no-useless-escape
 			this.inputForm.detailInfos[index].priceSum = str.replace(/[^\d^\.]+/g, '') // 保留数字和小数点
 		},
+		formatNonNegativeInteger(value) {
+			if (value === null || value === undefined || value === '') {
+				return ''
+			}
+			const text = String(value).replace(/[^\d]/g, '')
+			if (text === '') {
+				return ''
+			}
+			return String(Number(text))
+		},
 		countAmount(row) {
 			let amount
 			let taxAmount
@@ -909,6 +917,7 @@ export default {
 		getProgramForType(rows) {
 			this.inputForm.wareHouse[this.indexRow].wareHouseTypeId = rows.id
 			this.inputForm.wareHouse[this.indexRow].wareHouseType = rows.name
+			this.inputForm.wareHouse[this.indexRow].tradeName = rows.name
 			// this.inputForm.detailInfos[this.indexRow].procurementType = rows.name
 			this.indexRow = ''
 			this.$forceUpdate()

+ 7 - 7
src/views/psiManagement/wareHouseSummary/WareHouseHistory.vue

@@ -42,15 +42,15 @@
 							<vxe-column min-width="160" align="center" title="入库数量" field="tradeNumber"></vxe-column>
 							<vxe-column min-width="160" align="center" title="当前库存"
 								field="currentInventory"></vxe-column>
-							<vxe-column min-width="160" align="center" title="生产日期" field="produceDate"></vxe-column>
-							<vxe-column min-width="160" align="center" title="保质期" field="shelfLife">
+							<!-- <vxe-column min-width="160" align="center" title="生产日期" field="produceDate"></vxe-column> -->
+							<!-- <vxe-column min-width="160" align="center" title="保质期" field="shelfLife">
 								<template #default="scope">
 									<span v-if="scope.row.shelfLife && scope.row.shelfLifeUnit">
 										{{ scope.row.shelfLife }} {{ scope.row.shelfLifeUnit }}
 									</span>
 								</template>
-							</vxe-column>
-							<vxe-column min-width="160" align="center" title="到期时间" field="expireDate">
+							</vxe-column> -->
+							<!-- <vxe-column min-width="160" align="center" title="到期时间" field="expireDate">
 								<template #default="scope">
 									<span
 										v-if="scope.row.produceDate && scope.row.shelfLife && scope.row.shelfLifeUnit">
@@ -63,11 +63,11 @@
 										}}
 									</span>
 								</template>
-							</vxe-column>
-							<vxe-column min-width="160" align="center" title="经办人"
+							</vxe-column> -->
+							<!-- <vxe-column min-width="160" align="center" title="经办人"
 								field="wareHouseHandledBy"></vxe-column>
 							<vxe-column min-width="160" align="center" title="经办人部门"
-								field="wareHouseHandledByOff"></vxe-column>
+								field="wareHouseHandledByOff"></vxe-column> -->
 							<vxe-column min-width="160" align="center" title="入库时间" field="wareHouseDate"></vxe-column>
 						</vxe-table>
 						<vxe-pager background :current-page="tablePage.currentPage" :page-size="tablePage.pageSize"

+ 13 - 11
src/views/psiManagement/wareHouseSummary/WareHouseSummaryList.vue

@@ -40,8 +40,8 @@
 			</vxe-toolbar>
 			<div style="height: calc(100% - 90px)">
 				<vxe-table :key="tableKey" border="inner" auto-resize resizable height="auto" :loading="loading"
-					ref="clientTable" show-header-overflow show-overflow highlight-hover-row :menu-config="{}"
-					@sort-change="sortChangeHandle" :sort-config="{ remote: true }" :data="dataList"
+					align="center" ref="clientTable" show-header-overflow show-overflow highlight-hover-row
+					:menu-config="{}" @sort-change="sortChangeHandle" :sort-config="{ remote: true }" :data="dataList"
 					:checkbox-config="{}"
 					:edit-config="{ trigger: 'click', mode: 'row', showStatus: false, autoClear: true, icon: 'false' }">
 					<vxe-column type="seq" width="60" title="序号"></vxe-column>
@@ -57,9 +57,13 @@
 							<span v-else>{{ scope.row.tradeName }}</span>
 						</template>
 					</vxe-column>
-					<vxe-column min-width="160" align="center" title="入库类型" field="wareHouseTypeName"></vxe-column>
-					<vxe-column min-width="160" align="center" title="总量" field="allNumber"></vxe-column>
-					<vxe-column min-width="160" align="center" title="领用量" field="borrowNumber">
+					<!-- <vxe-column min-width="160" align="center" title="入库类型" field="wareHouseTypeName"></vxe-column> -->
+					<vxe-column min-width="160" align="center" title="品牌" field="brand"></vxe-column>
+					<vxe-column min-width="160" align="center" title="规格" field="specification"></vxe-column>
+					<vxe-column min-width="160" align="center" title="单位" field="company"></vxe-column>
+					<vxe-column min-width="160" align="center" title="实时库存量" field="tradeNumber"></vxe-column>
+					<vxe-column min-width="160" align="center" title="累计入库量" field="allNumber"></vxe-column>
+					<vxe-column min-width="160" align="center" title="累计领用量" field="borrowNumber">
 						<template #default="scope">
 							<span v-if="scope.row.borrowNumber">
 								{{ calcDivide(scope.row.borrowNumber, scope.row.spec) }}
@@ -70,7 +74,7 @@
 
 						</template>
 					</vxe-column>
-					<vxe-column min-width="160" align="center" title="报损量" field="lossNumber">
+					<vxe-column min-width="160" align="center" title="累计报损量" field="lossNumber">
 						<template #default="scope">
 							<span v-if="scope.row.lossNumber">
 								{{ calcDivide(scope.row.lossNumber, scope.row.spec) }}
@@ -81,16 +85,14 @@
 
 						</template>
 					</vxe-column>
-					<vxe-column min-width="160" align="center" title="剩余量" field="tradeNumber"></vxe-column>
-					<vxe-column min-width="160" align="center" title="单位" field="company"></vxe-column>
-					<vxe-column min-width="160" align="center" fixed="right" title="提醒数量" field="warnNum"
+					<vxe-column min-width="160" align="center" fixed="right" title="库存提醒数量" field="warnNum"
 						:edit-render="{}">
 						<template #edit="scope">
 							<vxe-input v-model="scope.row.warnNum" type="float" min="0" @blur="changeWarnNum(scope.row)"
 								:controls="false"></vxe-input>
 						</template>
 					</vxe-column>
-					<vxe-column min-width="100" align="center" fixed="right" title="是否提醒" field="warnFlag">
+					<vxe-column min-width="100" align="center" fixed="right" title="是否开启库存提醒" field="warnFlag">
 						<template #default="scope">
 							<el-switch :model-value="scope.row.warnFlag === '1'" active-color="#13ce66"
 								inactive-color="#ff4949"
@@ -238,7 +240,7 @@ export default {
 			// this.$refs.wareHouseHistoryPopup.init()
 			let detailId = this.commonJS.isNotEmpty(this.searchForm.supplierId) ? row.id : ''
 			console.log(row)
-			this.$refs.wareHouseHistory.init(row.wareHouseType,row.tradeName, detailId)
+			this.$refs.wareHouseHistory.init(row.wareHouseType, row.tradeName, detailId)
 		},
 		// 修改商品名称
 		edit(tradeName, type, typeName) {