bonus-ui/src/views/foodManage/purchaseManage/purchaseInspection/edit.vue

1023 lines
49 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div style="padding: 10px;background: #E5EBF6;min-height: 830px;">
<div style="background: #FFF;padding: 10px;border-radius: 10px;margin-bottom: 20px;">
<el-form :model="baseInfo" ref="baseInfo" :rules="baseRules" size="medium" :inline="true" label-width="110px">
<el-form-item label="验货单编号" prop="inspectGoodsCode">
<el-input v-model="baseInfo.inspectGoodsCode" placeholder="验货单编号自动生成" disabled maxlength="20" clearable style="width: 240px"/>
</el-form-item>
<el-form-item label="送货日期" prop="deliveryDate">
<el-date-picker
v-model="baseInfo.deliveryDate"
type="date" align="right"
format="yyyy-MM-dd" style="width: 240px;"
:picker-options="pickerOptions" @change="baseInfo.deliveryDate=formatDate(baseInfo.deliveryDate)">
</el-date-picker>
</el-form-item>
<el-form-item label="所属区域" prop="areaId">
<el-cascader v-model="baseInfo.areaId"
:options="treeAreaOptions" :filterable="true" style="width: 240px" :show-all-levels="false"
:disabled="materialList.length>0"
:props="{
emitPath: false,// 若设置 false则只返回该节点的值只返回最后选择的id
checkStrictly: false,//来设置父子节点取消选中关联,从而达到选择任意一级选项的目的
value:'id',label:'label'
}" @change="handleAreaChange">
</el-cascader>
</el-form-item>
<el-form-item label="送货仓库" prop="deliveryWarehouseId">
<el-select v-model="baseInfo.deliveryWarehouseId" clearable placeholder="请选择送货仓库" :disabled="materialList.length>0" style="width: 100%;">
<el-option v-for="item in wareHouseOptions"
:key="item.warehouseId"
:label="item.warehouseName"
:value="item.warehouseId"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="送货供应商" prop="deliverySupplierId">
<el-select v-model="baseInfo.deliverySupplierId" placeholder="请选择供应商" :disabled="materialList.length>0" style="width: 240px;">
<el-option v-for="item in supplierOptions"
:key="item.supplierId"
:label="item.supplierName"
:value="item.supplierId"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="送货人" prop="deliveryMan">
<el-input v-model="baseInfo.deliveryMan" placeholder="请输入送货人" maxlength="20" clearable style="width: 240px"/>
</el-form-item>
<el-form-item label="送货人电话" prop="deliveryPhone">
<el-input v-model="baseInfo.deliveryPhone" placeholder="请输入送货人电话" maxlength="11" clearable style="width: 240px"/>
</el-form-item>
<el-form-item label="验货日期" prop="inspectDate">
<el-date-picker
v-model="baseInfo.inspectDate"
type="datetime" align="right"
format="yyyy-MM-dd HH:mm:ss" style="width: 240px;"
:picker-options="pickerOptions" @change="baseInfo.inspectDate=formatDateTime(baseInfo.inspectDate)">
</el-date-picker>
</el-form-item>
<!-- <el-form-item label="验货人" prop="inspector">
<el-input v-model="baseInfo.inspector" placeholder="请输入验货人" maxlength="20" clearable style="width: 240px"/>
</el-form-item> -->
<el-form-item label="验货人" prop="inspector">
<el-select v-model="baseInfo.inspector" placeholder="请选择验货人" clearable style="width: 240px">
<el-option
v-for="option in contractPersonOptions"
:key="option.value"
:label="option.label"
:value="option.value"
/>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="baseInfo.remark" placeholder="请输入备注" maxlength="30" clearable style="width: 240px"/>
</el-form-item>
<el-form-item label="查验附件" prop="inspectAttachmentList">
<el-upload
ref="upload"
:http-request="fileUpLoad"
action="#" :limit="5"
accept=".xlsx, .xls, .png, .jpg, .jpeg, .docx, .doc"
:show-file-list="true"
:file-list="attachmentList"
:on-remove="handleRemoveFile"
>
<el-button
:disabled="attachmentList.length==5"
type="primary"
size="mini"
>上传附件
</el-button>
</el-upload>
</el-form-item>
</el-form>
</div>
<div style="width: 100%;height: 450px;padding: 10px;border-radius: 10px;margin-bottom: 10px;background: #FFF;">
<div style="width: 100%;display: flex;justify-content: space-between;align-items: center;margin-bottom: 10px;">
<div>
货品信息
</div>
<div style="display: flex;align-items: center;">
<!-- <el-button type="primary" plain @click="addMaterial">添加货品</el-button> -->
<el-button type="primary" plain @click="importPurchaseOrder">导入采购订单</el-button>
<el-button type="danger" plain @click="delMaterial">删除</el-button>
</div>
</div>
<div style="width: 100%;height: 400px;overflow-y: auto;">
<el-table v-loading="loading" :data="materialList" ref="multipleTable" height="380" :row-key="(row)=>{return row.materialId}" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" :reserve-selection="true"/>
<el-table-column label="序号" align="center" width="80" type="index"/>
<!-- <el-table-column label="图片" align="center" prop="" :show-overflow-tooltip="true" /> -->
<el-table-column label="货品编码" align="center" prop="materialCode" :show-overflow-tooltip="true"/>
<el-table-column label="货品名称" align="center" prop="materialName" :show-overflow-tooltip="true"/>
<el-table-column label="货品类别" align="center" prop="materialTypeName" :show-overflow-tooltip="true"/>
<el-table-column label="计量单位" align="center" prop="unitName" :show-overflow-tooltip="true"/>
<el-table-column label="货品规格" align="center" prop="size" :show-overflow-tooltip="true">
<!-- <template slot-scope="scope">
<span v-if="scope.row.salesMode==1">按份</span>
<span v-if="scope.row.salesMode==2">称重</span>
</template> -->
</el-table-column>
<el-table-column label="单价(元)" align="center" prop="unitPrice" :show-overflow-tooltip="true">
<template slot-scope="scope">
<span>{{ (scope.row.unitPrice/100).toFixed(2) }}</span>
<!-- <el-input v-model="scope.row.unitPrice" placeholder="请输入" maxlength="10" clearable @input="(v)=>(scope.row.unitPrice=v.replace(/[^\d.]/g, '').replace(/^(\d*\.\d{2}).*$/, '$1'))"/> -->
</template>
</el-table-column>
<el-table-column label="订货数量" align="center" prop="orderNum" :show-overflow-tooltip="true">
<template slot-scope="scope">
<span>{{scope.row.orderNum}}</span>
<!-- <el-input v-model.number="scope.row.orderNum" placeholder="请输入" maxlength="10" clearable @input="(v)=>(scope.row.orderNum=v.replace(/[^\d.]/g, '').replace(/^(\d*\.\d{2}).*$/, '$1'))"/> -->
</template>
</el-table-column>
<el-table-column label="已验收数量" align="center" prop="totalQualifiedNum" :show-overflow-tooltip="true">
<template slot-scope="scope">
<span>{{scope.row.totalQualifiedNum}}</span>
</template>
</el-table-column>
<!-- <el-table-column label="总金额(元)" align="center" prop="" :show-overflow-tooltip="true">
<template slot-scope="scope">
<span>{{ (scope.row.orderNum*scope.row.unitPrice/100).toFixed(2) }}</span>
</template>
</el-table-column> -->
<el-table-column label="送货数量" align="center" prop="deliveryNum" :show-overflow-tooltip="true">
<template slot-scope="scope">
<el-input v-model="scope.row.deliveryNum" placeholder="请输入" maxlength="10" v-if="scope.row.deliveryNum>=0" clearable @change="patternValue(scope.row)"/>
<span v-else>{{ scope.row.deliveryNum }}</span>
</template>
</el-table-column>
<el-table-column label="待入库数量" align="center" prop="qualifiedNum" :show-overflow-tooltip="true">
<template slot-scope="scope">
<el-input v-model="scope.row.qualifiedNum" placeholder="请输入" maxlength="10" v-if="scope.row.deliveryNum>=0" clearable @change="patternValue2(scope.row)"/>
<span v-else>{{ scope.row.deliveryNum }}</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true">
<template slot-scope="scope">
<el-input v-model="scope.row.remark" placeholder="请输入" v-if="scope.row.deliveryNum>=0" maxlength="20" clearable/>
<span v-else>{{ scope.row.remark }}</span>
</template>
</el-table-column>
</el-table>
</div>
</div>
<div style="width: 100%;height: 80px;padding: 10px;background: #FFF;border-radius: 10px;display: flex;align-items: center;justify-content: center;">
<el-button type="primary" plain @click="confirmSave" :loading="loadingBtn">保存草稿</el-button>
<el-button type="success" plain @click="confirmSubmit" :loading="loadingBtn">提交</el-button>
<el-button @click="jumpList">返回</el-button>
</div>
<!-- 选择菜品 -->
<el-dialog title="选择货品" :visible.sync="openDialog" width="65%" append-to-body >
<div style="width: 100%;height:620px;">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px">
<el-form-item label="货品类别" prop="materialTypeIds">
<el-cascader v-model="queryParams.materialTypeIds"
:options="materialTreeOptions" :filterable="true" style="width: 240px" :show-all-levels="false"
:props="{
multiple: true,
emitPath: false,// 若设置 false则只返回该节点的值只返回最后选择的id
checkStrictly: false,//来设置父子节点取消选中关联,从而达到选择任意一级选项的目的
value:'id',label:'categoryName'
}" collapse-tags>
</el-cascader>
</el-form-item>
<el-form-item label="货品编码" prop="materialCode">
<el-input v-model="queryParams.materialCode" placeholder="请输入货品编码" maxlength="20" clearable style="width: 240px"/>
</el-form-item>
<el-form-item label="货品名称" prop="materialName">
<el-input v-model="queryParams.materialName" placeholder="请输入货品名称" maxlength="20" clearable style="width: 240px"/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="tableListData" ref="multipleTable1" height="520" :row-key="(row)=>{return row.materialId}" @selection-change="handleSelectionChange2">
<el-table-column type="selection" width="50" align="center" :reserve-selection="true" />
<el-table-column label="序号" align="center" width="80" type="index">
<template slot-scope="scope">
<span>{{(queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1}}</span>
</template>
</el-table-column>
<!-- <el-table-column label="图片" align="center" prop="" :show-overflow-tooltip="true" /> -->
<el-table-column label="货品编码" align="center" prop="materialCode" :show-overflow-tooltip="true" />
<el-table-column label="货品名称" align="center" prop="materialName" :show-overflow-tooltip="true" />
<el-table-column label="货品类别" align="center" prop="materialTypeName" :show-overflow-tooltip="true" />
<el-table-column label="计量单位" align="center" prop="unitName" :show-overflow-tooltip="true" />
<el-table-column label="货品规格" align="center" prop="size" :show-overflow-tooltip="true">
<!-- <template slot-scope="scope">
<span v-if="scope.row.salesMode==1">按份</span>
<span v-if="scope.row.salesMode==2">称重</span>
</template> -->
</el-table-column>
<el-table-column label="单价(元)" align="center" prop="unitPrice" :show-overflow-tooltip="true">
<template slot-scope="scope">
<span>{{ (scope.row.unitPrice/100).toFixed(2)||"" }}</span>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="confirmChosen">确 定</el-button>
<el-button @click="openDialog=false">取 消</el-button>
</div>
</el-dialog>
<!-- 导入 -->
<el-dialog title="导入采购订单" :visible.sync="openImportDialog" width="60%" append-to-body >
<div style="width: 100%;height:600px;">
<el-form :model="queryParams2" ref="queryForm2" size="small" :inline="true" label-width="100px">
<el-form-item label="采购单号" prop="orderGoodsCode">
<el-input v-model="queryParams2.orderGoodsCode" placeholder="请输入采购单号" maxlength="20" clearable style="width: 240px"/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery2">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery2">重置</el-button>
</el-form-item>
</el-form>
<!-- :row-key="(row)=>{return row.fetchMaterialId}" @selection-change="handleSelectionChange3" -->
<el-table v-loading="loading2" :data="tableListData2" ref="multipleTable2" height="500">
<!-- <el-table-column type="selection" width="50" align="center" :reserve-selection="true" /> -->
<el-table-column label="序号" align="center" width="80" type="index">
<template slot-scope="scope">
<span>{{(queryParams2.pageNum - 1) * queryParams2.pageSize + scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column label="采购单号" align="center" prop="orderGoodsCode" :show-overflow-tooltip="true" />
<el-table-column label="采购订单标题" align="center" prop="orderTitle" :show-overflow-tooltip="true"/>
<el-table-column label="采购总金额(元" align="center" prop="orderAmount" :show-overflow-tooltip="true" width="120">
<template slot-scope="scope">
<span>{{ (scope.row.orderAmount/100).toFixed(2) }}</span>
</template>
</el-table-column>
<el-table-column label="供应商" align="center" prop="supplierName" :show-overflow-tooltip="true" />
<el-table-column label="创建人" align="center" prop="createBy" :show-overflow-tooltip="true" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text"
@click="confirmImport(scope.row)" v-if="scope.row.orderStatus==2||scope.row.orderStatus==3"
>导入</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total2>0"
:total="total2"
:page.sync="queryParams2.pageNum"
:limit.sync="queryParams2.pageSize"
@pagination="getList2"
/>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="openImportDialog=false">确 定</el-button>
<el-button @click="openImportDialog=false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { fetchUsers } from "@/api/foodManage/purchaseManage";
import { imgUpLoadTwo } from '@/api/system/upload'
import { systemAreaTreeApi,getCanteenByAreaApi,getStallByCanteenApi } from "@/api/base/stall";
import { systemMaterialTreeApi,getMaterialListApi,supplierPageApi,drpWareHousePageApi } from "@/api/foodManage/purchaseManage";
import { getPurchaseInspectInfoApi,addPurchaseInspectApi,editPurchaseInspectApi } from "@/api/foodManage/purchaseManage";
import { purchaseOrderPageApi,getPurchaseOrderInfoApi } from "@/api/foodManage/purchaseManage";
export default {
name: "InspectionEdit",
dicts: [],
data() {
return {
contractPersonOptions: [], // 下拉框选项
contractPerson: '', // 绑定的值
purchaseInspectionRowData:{},//页面传参
loading:false,
loadingBtn:false,
baseInfo: {
contractTitle:undefined,
contractType:undefined,
areaId:undefined,
inspectAttachmentList:[],
},
// 表单校验
baseRules: {
deliveryDate: [
{ required: true, message: "送货日期不能为空", trigger: "change" }
],
areaId: [
{ required: true, message: "所属区域不能为空", trigger: "change" }
],
deliverySupplierId: [
{ required: true, message: "送货供应商不能为空", trigger: "change" }
],
deliveryWarehouseId: [
{ required: true, message: "送货仓库不能为空", trigger: "change" }
],
deliveryMan: [
{ required: true, message: "送货人不能为空", trigger: "blur" }
],
deliveryPhone: [
{
required: true,
message: '送货人电话不能为空',
trigger: 'blur',
},
{
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: '请输入正确的手机号码',
trigger: 'blur',
}
],
inspectDate: [
{ required: true, message: "验货日期不能为空", trigger: "change" }
],
inspector: [
{ required: true, message: "验货人不能为空", trigger: "blur" }
],
// inspectAttachmentList: [
// { required: true, message: "查验附件不能为空", trigger: "change" }
// ],
},
treeAreaOptions:[],
canteenOptions:[],
supplierOptions:[],
wareHouseOptions:[],
stallOptions:[],
pickerOptions: {
disabledDate(v) {
return v.getTime() < (new Date().getTime() - 86400000);// - 86400000是否包括当天
}
},
attachmentList:[],
materialList:[],//货品信息-表格数据
batchIds:[],//货品信息-表格数据-多选
openDialog:false,
materialTreeOptions:[],
queryParams: { // 货品弹窗-货品表格-查询参数
pageNum: 1,
pageSize: 10,
},
total: 0, // 总条数
tableListData: [],//货品弹窗-货品表格数据
batchChosenMaterial:[],//货品弹窗-货品表格-选中的货品数组
noMaterial:false,
//导入功能
openImportDialog:false,
queryParams2: { // 货品弹窗-货品表格-查询参数
pageNum: 1,
pageSize: 10,
orderGoodsCode:null
},
loading2:false,
total2: 0, // 总条数
tableListData2: [],//导入弹窗-表格数据
importRow:{},//导入弹窗-表格数据-选中数据
materialDetailsData: [],//导入弹窗-明细数据
};
},
created() {
if(this.$route.query.purchaseInspectionRowData){
this.purchaseInspectionRowData = JSON.parse(this.$route.query.purchaseInspectionRowData)
setTimeout(()=>{
this.getContractInfo()
},500)
}
this.fetchUsers();
this.getAreaTreeData()
this.getMaterialTree()
this.attachmentList=[]
},
watch:{
'$route.query.purchaseInspectionRowData':function(newId, oldId) {
if(newId){
this.purchaseInspectionRowData = JSON.parse(newId)
this.getContractInfo()
}else{
this.baseInfo={}
this.materialList=[]
this.attachmentList=[]
}
},
},
methods: {
fetchUsers() {
let param = {
pageNum:1,
pageSize: 1000,
roleId: 1
}
fetchUsers(param).then((response) => {
console.log(response);
if (response.rows) {
// 从接口返回的数据中提取用户选项
this.contractPersonOptions = response.rows.map(user => ({
value: user.id, // 下拉框绑定的值
label: user.name, // 下拉框显示的文本
}));
}
});
},
// 返回列表页
jumpList() {
const obj = { path: "foodManage/purchaseManage/inspectionEdit" };
this.$tab.closeOpenPage(obj);
this.$router.replace({ path: "/foodManage/purchaseManage/purchaseInspection" }); // 要打开的页面
},
getContractInfo(){
console.log(this.purchaseInspectionRowData)
let param = {
inspectGoodsId:this.purchaseInspectionRowData.inspectGoodsId
}
//查询查询食堂下拉结构
getPurchaseInspectInfoApi(param).then((response) => {
this.baseInfo = response.data;
this.materialList = this.baseInfo.inspectGoodsDetails;
if(this.baseInfo.inspectAttachmentList.length>0){
this.baseInfo.inspectAttachmentList.forEach(item=>{
this.attachmentList.push({name:item,url:item})
})
}
supplierPageApi({ isPaging:1,areaIdList:[this.baseInfo.areaId] }).then((response) => {
this.supplierOptions = response.rows||[];
this.$set(this.baseInfo,'deliverySupplierId',this.baseInfo.deliverySupplierId)
});
drpWareHousePageApi({ areaId:this.baseInfo.areaId }).then((response) => {
this.wareHouseOptions = response.rows||[];
this.$set(this.baseInfo,'deliveryWarehouseId',this.baseInfo.deliveryWarehouseId)
});
});
},
//区域树
getAreaTreeData() {
systemAreaTreeApi({}).then((response) => {
this.treeAreaOptions = response.data;
if(this.treeAreaOptions.length>0){
this.$set(this.baseInfo,"areaId",this.getFirstChild(this.treeAreaOptions[0]).id)
this.handleAreaChange()
}
});
},
getFirstChild(node) {
if (!node.children || node.children.length === 0) {
return node; // 没有子节点或子节点为空,返回当前节点
} else {
return this.getFirstChild(node.children[0]); // 递归调用最后一个子节点
}
},
//选中区域-查询食堂
handleAreaChange(e){
this.getSupplierData()
this.getWareHouseData()
},
/** 查询供应商下拉结构 */
getSupplierData() {
supplierPageApi({ isPaging:1,areaIdList:[this.baseInfo.areaId] }).then((response) => {
this.supplierOptions = response.rows||[];
if(this.supplierOptions.length>0){
this.$set(this.baseInfo,"deliverySupplierId",this.supplierOptions[0].supplierId)
}
});
},
/** 查询供应商下拉结构 */
getWareHouseData() {
drpWareHousePageApi({ areaId:this.baseInfo.areaId }).then((response) => {
this.wareHouseOptions = response.rows||[];
if(this.wareHouseOptions.length>0){
this.$set(this.baseInfo,"deliveryWarehouseId",this.wareHouseOptions[0].warehouseId)
}
});
},
/** 查询货品类别下拉树结构 */
getMaterialTree() {
let param = {
// goodsType:1
}
systemMaterialTreeApi(param).then((response) => {
this.materialTreeOptions = response.data;
});
},
//选择日期范围
changeDateRange(e){
//this.formatDate(e[0])
},
// 多选框选中数据
handleSelectionChange(selection) {
this.batchIds = selection.map(item => item.materialId)
},
//删除货品
delMaterial(){
this.batchIds.forEach(ID=>{
let index = this.materialList.findIndex(v=>v.materialId==ID)
if(index>-1){
this.materialList.splice(index,1)
}
})
setTimeout(()=>{
this.$refs.multipleTable.clearSelection()
},300)
},
//添加货品
addMaterial(){
if(this.baseInfo.areaId!=undefined){
this.openDialog=true
this.resetQuery()
setTimeout(()=>{
this.$refs.multipleTable1.clearSelection()
},300)
}else{
this.$modal.msgError("请先选择区域");
}
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.queryParams = {
pageNum: 1,
pageSize: 10,
}
this.resetForm("queryForm");
this.handleQuery();
},
/** 查询列表 */
getList() {
this.loading = true;
let param = {
"pageSize": this.queryParams.pageSize,
"pageNum": this.queryParams.pageNum,
"areaId": this.queryParams.areaId,
"materialName": this.queryParams.materialName,
"materialCode": this.queryParams.materialCode,
"materialTypeIds": this.queryParams.materialTypeIds,
}
getMaterialListApi(param).then(response => {
this.tableListData = response.rows;
this.total = Number(response.total);
this.loading = false;
});
},
handleSelectionChange2(selection) {
this.batchChosenMaterial = selection;
this.batchChosenMaterial.forEach(item=>{
this.$set(item,"orderNum",0)
this.$set(item,"unitPrice",item.unitPrice)
})
},
confirmChosen(){
if(this.batchChosenMaterial.length>0){
this.loading = true
this.materialList = this.batchChosenMaterial
// this.batchChosenMaterial.forEach(item=>{
// let obj = Object.assign({}, item)
// this.materialList.push(obj)
// })
setTimeout(()=>{
this.loading = false
this.openDialog=false
},500)
}
},
//保存草稿
confirmSave(){
this.$refs["baseInfo"].validate(valid => {
if (valid) {
setTimeout(()=>{
let param = Object.assign({},this.baseInfo);
param.deliveryDate = this.formatDate(this.baseInfo.deliveryDate)
param.deliveryTotalNum = 0;//送货总数量
param.inspectQualifiedNum = 0;//验货合格总数量
param.status=1
param.inspectGoodsDetails = []
param.inspectAttachment = ""
if(this.attachmentList.length>0){
let arr = this.attachmentList.map(item=>item.url)
param.inspectAttachment = arr.join(',')
console.log(param)
}
this.noMaterial = false;
if(this.materialList.length>0){
this.materialList.forEach(item=>{
if(item.orderNum>item.totalQualifiedNum){
if(Number(item.deliveryNum)==0 || Number(item.qualifiedNum)==0){
this.noMaterial = true
}else{
let obj = Object.assign({}, item)
param.deliveryTotalNum = param.deliveryTotalNum+Number(obj.deliveryNum)//送货总数量
param.inspectQualifiedNum = param.inspectQualifiedNum+Number(obj.qualifiedNum)//验货合格总数量
param.inspectGoodsDetails.push(obj)
}
}
})
}
if(this.noMaterial){
this.$modal.msgError("请输入单价和数量!");
}else{
this.noMaterial = true;
if(this.materialList.length>0){
this.noMaterial = false;
}
console.log(param)
if(this.noMaterial){
this.$modal.msgError("请添加货品!");
}else{
this.loadingBtn=true;
if (this.baseInfo.inspectGoodsId != undefined) {
editPurchaseInspectApi(param).then((response) => {
this.$modal.msgSuccess("修改成功");
this.loadingBtn=false
this.jumpList()
}).catch(() => {
this.loadingBtn=false
});
} else {
addPurchaseInspectApi(param).then((response) => {
this.$modal.msgSuccess("保存成功");
this.loadingBtn=false
this.jumpList()
}).catch(() => {
this.loadingBtn=false
});
}
}
}
},500)
}
});
},
// 提交按钮
confirmSubmit(){
this.$refs["baseInfo"].validate(valid => {
if (valid) {
setTimeout(()=>{
let param = Object.assign({},this.baseInfo);
param.deliveryDate = this.formatDate(this.baseInfo.deliveryDate)
param.deliveryTotalNum = 0;//送货总数量
param.inspectQualifiedNum = 0;//验货合格总数量
param.status=2
param.inspectGoodsDetails = []
param.inspectAttachment = ""
if(this.attachmentList.length>0){
let arr = this.attachmentList.map(item=>item.url)
param.inspectAttachment = arr.join(',')
console.log(param)
}
this.noMaterial = false;
if(this.materialList.length>0){
this.materialList.forEach(item=>{
if(item.orderNum>item.totalQualifiedNum){
if(Number(item.deliveryNum)==0 || Number(item.qualifiedNum)==0){
this.noMaterial = true
}else{
let obj = Object.assign({}, item)
param.deliveryTotalNum = param.deliveryTotalNum+Number(obj.deliveryNum)//送货总数量
param.inspectQualifiedNum = param.inspectQualifiedNum+Number(obj.qualifiedNum)//验货合格总数量
param.inspectGoodsDetails.push(obj)
}
}
})
}
if(this.noMaterial){
this.$modal.msgError("请输入表格数据!");
}else{
this.noMaterial = true;
if(this.materialList.length>0){
this.noMaterial = false;
}
console.log(param)
if(this.noMaterial){
this.$modal.msgError("请添加货品!");
}else{
this.loadingBtn=true;
if (this.baseInfo.inspectGoodsId != undefined) {
editPurchaseInspectApi(param).then((response) => {
this.$modal.msgSuccess("修改成功");
this.loadingBtn=false
this.jumpList()
}).catch(() => {
this.loadingBtn=false
});
} else {
addPurchaseInspectApi(param).then((response) => {
this.$modal.msgSuccess("保存成功");
this.loadingBtn=false
this.jumpList()
}).catch(() => {
this.loadingBtn=false
});
}
}
}
},500)
}
});
},
//导入
importPurchaseOrder(){
if(this.baseInfo.areaId!=undefined||this.baseInfo.deliveryWarehouseId!=undefined||this.baseInfo.deliverySupplierId!=undefined){
this.openImportDialog=true
this.resetQuery2()
// setTimeout(()=>{
// this.$refs.multipleTable2.clearSelection()
// },300)
}else{
this.$modal.msgError("请先选择区域,仓库,供应商");
}
},
/** 搜索按钮操作 */
handleQuery2() {
this.queryParams2.pageNum = 1;
this.getList2();
},
/** 重置按钮操作 */
resetQuery2() {
this.queryParams2 = {
pageNum: 1,
pageSize: 10,
}
this.resetForm("queryForm2");
this.handleQuery2();
},
/** 查询列表 */
getList2() {
this.loading2 = true;
let param = {
"pageSize": this.queryParams2.pageSize,
"pageNum": this.queryParams2.pageNum,
"orderGoodsCode": this.queryParams2.orderGoodsCode,
"orderStatus":2,
"isInspect":2,
"areaId": this.baseInfo.areaId,
"warehouseId": this.baseInfo.deliveryWarehouseId,
"supplierId": this.baseInfo.deliverySupplierId,
}
purchaseOrderPageApi(param).then(response => {
this.tableListData2 = response.rows;
this.total2 = Number(response.total);
this.loading2 = false;
});
},
confirmImport(row){
console.log(row)
this.importRow = row;
let param = {
orderGoodsId:this.importRow.orderGoodsId
}
getPurchaseOrderInfoApi(param).then((response) => {
this.materialDetailsData = response.data.orderGoodsDetailList||[];
this.$modal.confirm('是否确认导入采购订单?').then(()=>{
if(this.materialDetailsData.length>0){
this.materialList = this.materialDetailsData;
this.materialList.forEach(item=>{
this.$set(item,"unitPrice",Number(item.singlePrice))
this.$set(item,"orderNum",item.orderNum)
if(item.totalQualifiedNum&&item.totalQualifiedNum>0){
this.$set(item,"deliveryNum",Number(item.orderNum)-Number(item.totalQualifiedNum))
this.$set(item,"qualifiedNum",Number(item.orderNum)-Number(item.totalQualifiedNum))
}else{
this.$set(item,"deliveryNum",Number(item.orderNum))
this.$set(item,"qualifiedNum",Number(item.orderNum))
}
})
// this.materialList = [];
// this.materialDetailsData.forEach(item=>{
// if(item.totalQualifiedNum<item.orderNum){
// let obj = Object.assign({},item)
// this.$set(obj,"unitPrice",Number(obj.singlePrice))
// this.$set(obj,"orderNum",obj.orderNum)
// if(obj.totalQualifiedNum&&obj.totalQualifiedNum>0){
// this.$set(obj,"deliveryNum",obj.orderNum-obj.totalQualifiedNum)
// }else{
// this.$set(obj,"deliveryNum",obj.orderNum)
// }
// this.materialList.push(obj)
// }
// })
this.baseInfo.relateOrderGoodsId = this.importRow.orderGoodsCode;
this.$set(this.baseInfo,"remark","导入采购订单")
setTimeout(()=>{
this.openImportDialog=false
},500)
}else{
this.$modal.msgError("采购订单明细无货品!");
}
}).catch(() => {});
});
},
//附件上传
fileUpLoad(param){
param.type = 'canteen'
imgUpLoadTwo(param).then((res) => {
if (res.code == 200) {
console.log(this.attachmentList)
console.log(this.baseInfo.inspectAttachmentList)
this.attachmentList.push(res.data)
if(!this.baseInfo.inspectAttachmentList){
this.baseInfo.inspectAttachmentList=[res.data.url]
}else{
this.baseInfo.inspectAttachmentList.push(res.data.url)
}
} else {
this.$modal.msgError(res.msg);
}
}).catch((error) => {
this.$modal.msgError(error)
})
},
handleRemoveFile(file, fileList){
let sum = 0
this.attachmentList.forEach((item, index) => {
if (item.url == file.url) {
sum = index
}
})
this.attachmentList.splice(sum, 1)
this.baseInfo.inspectAttachmentList.splice(sum, 1)
},
patternValue(row){
console.log(row)
if(!row.deliveryNum||row.deliveryNum==""){
row.deliveryNum=0
row.qualifiedNum=0
}else{
row.deliveryNum = row.deliveryNum.replace(/[^\d.]/g, '').replace(/^(\d*\.\d{2}).*$/, '$1')
row.qualifiedNum = row.deliveryNum.replace(/[^\d.]/g, '').replace(/^(\d*\.\d{2}).*$/, '$1')
}
if(row.totalQualifiedNum&&row.totalQualifiedNum>0){
setTimeout(()=>{
if(Number(row.deliveryNum)>=(Number(row.orderNum)-Number(row.totalQualifiedNum))){
// row.deliveryNum = Number(row.orderNum)-Number(row.totalQualifiedNum)
row.deliveryNum = Number(row.deliveryNum)
row.qualifiedNum = Number(row.orderNum)-Number(row.totalQualifiedNum)
}
},200)
}else{
setTimeout(()=>{
if(Number(row.deliveryNum)>=Number(row.orderNum)){
// row.deliveryNum = Number(row.orderNum)
row.deliveryNum = Number(row.deliveryNum)
row.qualifiedNum = Number(row.orderNum)
}else{
row.deliveryNum = Number(row.deliveryNum)
row.qualifiedNum = Number(row.deliveryNum)
}
},200)
}
},
patternValue2(row){
if(!row.qualifiedNum||row.qualifiedNum==""){
row.qualifiedNum=0
}else{
row.qualifiedNum = row.qualifiedNum.replace(/[^\d.]/g, '').replace(/^(\d*\.\d{2}).*$/, '$1')
}
if(Number(row.deliveryNum)>(Number(row.orderNum)-Number(row.totalQualifiedNum))){
if(Number(row.qualifiedNum)>(Number(row.orderNum)-Number(row.totalQualifiedNum))){
setTimeout(()=>{
row.qualifiedNum = Number(row.orderNum)-Number(row.totalQualifiedNum)
},200)
}
}
// if(Number(row.deliveryNum)<(Number(row.orderNum)-Number(row.totalQualifiedNum))){
// setTimeout(()=>{
// if(Number(row.qualifiedNum)>=Number(row.deliveryNum)){
// row.qualifiedNum = Number(row.deliveryNum)
// }
// },200)
// }
},
//日期
formatDate(date) {
// 格式化为 YYYY-MM-DD
date = new Date(date)
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
},
//日期时间
formatDateTime(date) {
// 格式化为 YYYY-MM-DD
date = new Date(date)
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始
const day = String(date.getDate()).padStart(2, '0');
const hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours()
const minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
const seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
}
};
</script>
<style scoped>
.dishes-card{
width: 20%;
height: 100%;
margin-right: 15px;
position: relative;
}
.body-card{
width: 96%;
margin: 10px auto;
display: flex;
flex-direction: column;
height: 300px;
overflow-y: auto;
}
.bottom-card{
width: 100%;
height: 60px;
display: flex;
align-items: center;
justify-content: center;
position: absolute;
bottom: 0;
}
.dialog-left{
width: 20%;
height: 100%;
}
.dish-name{
width: 100%;
height: 32px;
display: flex;
align-items: center;
cursor: pointer;
}
.dish-name:hover{
background-color:rgba(0, 0, 0, 0.1);
color: #4b80fd;
}
.dialog-center{
width: 10%;
height: 100%;
/* background: #4b80fd; */
border: 1px solid #ccc;
border-radius: 5px;
margin: 0 1%;
}
.dialog-center-header{
width: 100%;display: flex;align-items: center;justify-content: center;height: 60px;font-weight: bold;border-bottom: 1px solid #ccc;
}
.dialog-right{
width: 70%;
height: 100%;
}
.primary{
background: #1890ff!important;
color: #fff!important;
}
.dateTable{
width: 14%;
height: 40px;
color: #9a9da3;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid #e6ebf5;
}
.dateTable2{
width: 14%;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
background: #fff;
color:#000;
border: 1px solid #e6ebf5;
cursor: pointer;
}
.bgBlue{
width: 14%;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
background: #0c6ccc;
color:#fff !important;
border: 1px solid #fff;
cursor: pointer;
}
</style>