生产:
1、增加无采购订单新增原材料条码的功能
master
xs 1 year ago
parent 5c2aea11c3
commit 7a212ed527

@ -120,7 +120,7 @@ public class MesConstants {
public static final String MES_PRODUCT_ORDER_INTERNAL = "2";//对内生产
/**物料信息绑定标识,是否需要采购订单明细绑定销售订单*/
/**物料信息常备物料标识,是否需要采购订单明细绑定销售订单*/
public static final String MES_MATERIAL_BIND_FLAG_YES = "1";//是
public static final String MES_MATERIAL_BIND_FLAG_NO = "0";//否

@ -7,6 +7,7 @@ import com.hw.common.core.constant.MesConstants;
import com.hw.common.security.annotation.InnerAuth;
import com.hw.common.security.utils.SecurityUtils;
import com.hw.mes.api.domain.MesBaseBarcodeInfo;
import com.hw.mes.api.domain.MesBaseMaterialInfo;
import com.hw.mes.service.IMesBaseMaterialInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@ -148,7 +149,7 @@ public class MesBaseBarcodeInfoController extends BaseController
/**
*
*/
@RequiresPermissions("mes:barcode:add")
@RequiresPermissions("mes:barcode:internalAdd")
@Log(title = "条码信息", businessType = BusinessType.INSERT)
@PostMapping(value="/addInternalBarcode")
public AjaxResult addInternalBarcode(@RequestBody MesBaseBarcodeInfo mesBaseBarcodeInfo)
@ -242,4 +243,20 @@ public class MesBaseBarcodeInfoController extends BaseController
return toAjax(mesBaseBarcodeInfoService.insertMesBaseBarcodeInfo(mesBaseBarcodeInfo));
}
/**
*
*/
@RequiresPermissions("mes:barcode:internalAdd")
@Log(title = "条码信息", businessType = BusinessType.INSERT)
@PostMapping(value="/addNoPurchaseBarcode")
public AjaxResult addNoPurchaseBarcode(@RequestBody MesBaseBarcodeInfo mesBaseBarcodeInfo)
{
return toAjax(mesBaseBarcodeInfoService.generateNoPurchaseRawBarcode(mesBaseBarcodeInfo));
}
}

@ -99,5 +99,11 @@ public interface MesBaseBarcodeInfoMapper
public MesBaseBarcodeInfo selectMesBaseBarcodeInfoJoinByBarcodeId(Long barcodeId);
/**
*
* @param mesBaseBarcodeInfos
* @return
*/
public int batchMesBaseBarcodeInfo(List<MesBaseBarcodeInfo> mesBaseBarcodeInfos);
}

@ -76,4 +76,14 @@ public interface MesProductPlanDetailMapper
* @return
*/
public MesProductPlanDetail selectNewestMesProductPlanDetailJoin(MesProductPlanDetail mesProductPlanDetail);
/**
*
*
* @param planDetailCode
* @return
*/
public MesProductPlanDetail selectMesProductPlanDetailByPlanDetailCode(String planDetailCode);
}

@ -47,6 +47,12 @@ public interface IMesBaseBarcodeInfoService
*/
public int insertMesBaseBarcodeInfo(MesBaseBarcodeInfo mesBaseBarcodeInfo);
/**
*
* @param mesBaseBarcodeInfo
*/
public int generateNoPurchaseRawBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo);
/**
*
*

@ -65,6 +65,9 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
@Autowired
private MesProductPlanMapper mesProductPlanMapper;
@Autowired
private MesProductPlanDetailMapper mesProductPlanDetailMapper;
/**
*
*
@ -140,12 +143,12 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
}
if (mesBaseMaterialInfo.getBindFlag() == null) {
throw new ServiceException("请先设置此物料信息[物料编码:" + mesBaseBarcodeInfo.getMaterialCode()
+ ",物料名称:" + mesBaseBarcodeInfo.getMaterialName() + "]的绑定标识");
+ ",物料名称:" + mesBaseBarcodeInfo.getMaterialName() + "]的常备物料标识");
}
//如果物料信息需要绑定,则判断是否有绑定的信息
//如果物料信息为非常备物料,则判断是否有绑定的信息
BigDecimal barcodeAmount = mesBaseBarcodeInfo.getBarcodeAmount();
if (mesBaseMaterialInfo.getBindFlag().equals(MesConstants.MES_MATERIAL_BIND_FLAG_YES)) {
if (mesBaseMaterialInfo.getBindFlag().equals(MesConstants.MES_MATERIAL_BIND_FLAG_NO)) {
MesOrderBind queryOrderBind = new MesOrderBind();
queryOrderBind.setPurchaseOrderId(purchaseOrderId);
List<MesOrderBind> mesOrderBinds = mesOrderBindMapper.selectMesOrderBindList(queryOrderBind);
@ -187,6 +190,32 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
}
/**
*
* @param mesBaseBarcodeInfo
*/
@Override
public int generateNoPurchaseRawBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo) {
Date currentDate = new Date();
String userName = SecurityUtils.getUsername();
BigDecimal barcodeAmount = mesBaseBarcodeInfo.getBarcodeAmount();
List<MesBaseBarcodeInfo> toInsertedBarcodeInfos = new ArrayList<>();
MesBaseBarcodeInfo toInsertedBarcodeInfo;
String batchCode = Seq.getId(Seq.mesBatchCodeSeqType, Seq.mesBatchCodeCode);
for (long i = 0; i < barcodeAmount.intValue(); i++) {
// 生成数量条的不同条码内容
toInsertedBarcodeInfo = getInsertedBarcodeInfo(mesBaseBarcodeInfo, batchCode, userName, currentDate);
toInsertedBarcodeInfo.setSafeFlag(MesConstants.MES_ORDER_BIND_SAFE_FLAG_YES);
toInsertedBarcodeInfos.add(toInsertedBarcodeInfo);
}
return mesBaseBarcodeInfoMapper.batchMesBaseBarcodeInfo(toInsertedBarcodeInfos);
}
public void generateProductBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo) {
String planCode = mesBaseBarcodeInfo.getPlanCode();
String planDetailCode = mesBaseBarcodeInfo.getPlanDetailCode();
@ -199,11 +228,22 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
throw new ServiceException("此计划明细已经生成条码,不能重复生成");
}
MesProductPlanDetail mesProductPlanDetail = mesProductPlanDetailMapper.selectMesProductPlanDetailByPlanDetailCode(planDetailCode);
if (mesProductPlanDetail == null) {
throw new ServiceException("此生产任务明细不存在");
}
if (!mesProductPlanDetail.getPlanDetailStatus().equals(MesConstants.MES_PRODUCT_PLAN_DETAIL_STATUS_FINISH) &&
!mesProductPlanDetail.getPlanDetailStatus().equals(MesConstants.MES_PRODUCT_PLAN_DETAIL_STATUS_ABNORMAL_FINISH)) {
throw new ServiceException("此生产任务明细还未完成,不能打印条码");
}
MesProductPlan productPlan = mesProductPlanMapper.selectOnlyMesProductPlanByPlanCode(planCode);
if(productPlan == null){
if (productPlan == null) {
throw new ServiceException("此生产任务不存在");
}
Date currentDate = new Date();
String barcode = Seq.getId(Seq.mesCompBarcodeSeqType, Seq.mesCompBarcodeCode);
mesBaseBarcodeInfo.setBatchCode(barcode);// 成品的批次代码 == 条码内容

@ -354,6 +354,11 @@ public class MesProductPlanServiceImpl implements IMesProductPlanService {
}
}
String barcodeType = baseBarcodeInfo.getBarcodeType();
if(!barcodeType.equals(MesConstants.MES_BARCODE_TYPE_RAW)){
throw new ServiceException("此条码为非原材料条码");
}
String userName = SecurityUtils.getUsername();
Date currentDate = new Date();
MesMaterialCheckResult mesMaterialCheckResult = mesMaterialCheckResultMapper.

@ -348,4 +348,14 @@
left join qms_check_result qcr on bbi.batch_code = qcr.material_batch
where bbi.barcode_id = #{barcodeId}
</select>
<insert id="batchMesBaseBarcodeInfo">
INSERT INTO mes_base_barcode_info (batch_flag,barcode_type,barcode_info,batch_code,material_id,manufacturer_id,amount,purchase_order_id,po_no,production_date,accepted_date,last_outstock_date,plan_code,plan_detail_code,safe_flag,sale_order_id,saleorder_code,project_no,serial_number,remark,bind_status,update_by,update_time) VALUES
<foreach item="item" index="index" collection="list" separator=",">
( #{item.batchFlag}, #{item.barcodeType}, #{item.barcodeInfo}, #{item.batchCode}, #{item.materialId}, #{item.manufacturerId}, #{item.amount}, #{item.purchaseOrderId}, #{item.poNo}, #{item.productionDate}, #{item.acceptedDate}, #{item.lastOutstockDate}, #{item.planCode},#{item.planDetailCode}, #{item.safeFlag},#{item.saleOrderId}, #{item.saleorderCode},#{item.projectNo}, #{item.serialNumber},#{item.remark}, #{item.bindStatus},#{item.updateBy}, #{item.updateTime})
</foreach>
</insert>
</mapper>

@ -149,4 +149,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</where>
order by mppd.plan_detail_id desc limit 1
</select>
<select id="selectMesProductPlanDetailByPlanDetailCode" parameterType="String" resultMap="MesProductPlanDetailResult">
<include refid="selectMesProductPlanDetailVo"/>
where plan_detail_code = #{planDetailCode}
</select>
</mapper>

@ -127,3 +127,14 @@ export function addProductBarcode(data) {
data: data
})
}
// 无采购订单新增原材料条码信息
export function addNoPurchaseBarcode(data) {
return request({
url: '/mes/barcode/addNoPurchaseBarcode',
method: 'post',
data: data
})
}

@ -208,7 +208,7 @@
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-busubmittton @click="cancel"> </el-busubmittton>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
@ -341,11 +341,12 @@ export default {
batchPrintBtnDisabled: false,
};
},
created() {
mounted() {
this.addBarcodeBtnVisible = false;
this.getData();
this.getList();
},
props: {
defineData: {
type: Object,

@ -57,23 +57,22 @@
icon="el-icon-plus"
size="mini"
@click="handleInternalAdd"
v-hasPermi="['mes:barcode:add']"
v-hasPermi="['mes:barcode:internalAdd']"
>生产新增
</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="success"-->
<!-- plain-->
<!-- icon="el-icon-edit"-->
<!-- size="mini"-->
<!-- :disabled="single"-->
<!-- @click="handleUpdate"-->
<!-- v-hasPermi="['mes:barcode:edit']"-->
<!-- >修改-->
<!-- </el-button>-->
<!-- </el-col>-->
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleNoPurchaseAdd"
v-hasPermi="['mes:barcode:noPurchaseAdd']"
>无采购订单新增
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
@ -347,7 +346,7 @@
<!-- 添加采购订单对话框 -->
<el-dialog title="选择采购订单信息" :visible.sync="purchaseOrderOpen" append-to-body>
<add-purchaseOrder @selection="handleSelection" ref="purchaseOrderRef"></add-purchaseOrder>
<add-purchaseOrder ref="purchaseOrderRef" v-if="purchaseOrderOpen"></add-purchaseOrder>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitPurchaseOrderForm"> </el-button>
<el-button @click="purchaseOrderOpen = false"> </el-button>
@ -402,6 +401,98 @@
<el-button @click="cancelInternal"> </el-button>
</div>
</el-dialog>
<!-- 无采购订单的原材料条码信息对话框 -->
<el-dialog :title="title" :visible.sync="noPurchaseOpen" width="500px" append-to-body>
<el-form ref="noPurchaseForm" :model="noPurchaseForm" :rules="noPurchaseRules" label-width="100px">
<el-form-item label="物料ID" prop="materialId" v-if="false">
<el-input v-model="noPurchaseForm.materialId" placeholder="请输入物料ID"/>
</el-form-item>
<el-form-item label="物料编码" prop="materialCode">
<el-input v-model="noPurchaseForm.materialCode" suffix-icon="el-icon-search" readonly @click.native="handleSelectMaterial" />
</el-form-item>
<el-form-item label="物料名称" prop="materialName">
<el-input v-model="noPurchaseForm.materialName" readonly/>
</el-form-item>
<el-form-item label="批次标识" prop="batchFlag">
<el-radio-group v-model="noPurchaseForm.batchFlag" disabled>
<el-radio
v-for="dict in dict.type.active_flag"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<!-- <el-form-item label="供应商ID" prop="manufacturerId">-->
<!-- <el-input v-model="form.manufacturerId" placeholder="请输入供应商ID" />-->
<!-- </el-form-item>-->
<el-form-item prop="amount" v-if="batchVisible">
<span slot="label">
<el-tooltip content="每个物料条码中包含的数量一袋螺丝有60个" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
批次数量
</span>
<el-input v-model="noPurchaseForm.amount" placeholder="请在物料信息中维护" disabled/>
</el-form-item>
<el-form-item prop="barcodeAmount">
<span slot="label">
<el-tooltip content="需要打印条码的数量如果需要贴10个条码则需要生成10个" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
条码数量
</span>
<el-input v-model="noPurchaseForm.barcodeAmount"/>
</el-form-item>
<el-form-item label="生产日期" prop="productionDate">
<el-date-picker clearable
v-model="noPurchaseForm.productionDate"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择生产日期">
</el-date-picker>
</el-form-item>
<el-form-item label="最晚出库日期" prop="lastOutstockDate">
<el-date-picker clearable
v-model="noPurchaseForm.lastOutstockDate"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择最晚出库日期">
</el-date-picker>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="noPurchaseForm.remark" type="textarea" placeholder="请输入内容"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitNoPurchaseAddForm"> </el-button>
<el-button @click="cancelInternal"> </el-button>
</div>
</el-dialog>
<!-- 选择物料对话框 -->
<el-dialog title="选择物料信息" :visible.sync="selectMaterialVisible" append-to-body>
<select-material ref="selectMaterialRef" v-if="selectMaterialVisible"></select-material>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitSelectMaterialForm"> </el-button>
<el-button @click="selectMaterialVisible = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
@ -409,15 +500,17 @@
import {
listBarcode, getBarcode, delBarcode, addBarcode, updateBarcode,
printBarcodes, getMaterialInfoByErpId, selectProductBarcodeInfoByBarcodeInfo,
addInternalBarcode, regenerateBarcode
addInternalBarcode, regenerateBarcode,addNoPurchaseBarcode
} from "@/api/mes/barcode";
import addPurchaseOrder from '@//views/mes/purchaseOrder/addPurchaseOrder.vue';
import selectMaterial from '@//views/mes/materialinfo/selectMaterial.vue';
export default {
name: "Barcode",
dicts: ['bind_status', 'active_flag', 'barcode_type', 'mes_safe_flag', 'mes_print_flag'],
components: {
'add-purchaseOrder': addPurchaseOrder
'add-purchaseOrder': addPurchaseOrder,
'select-material': selectMaterial
},
data() {
return {
@ -440,6 +533,9 @@ export default {
barcodeList: [],
//
purchaseOrderOpen: false,
//
selectMaterialVisible:false,
//
title: "",
//
@ -489,6 +585,9 @@ export default {
amount: [
{required: true, message: "批次数量不能为空", trigger: "change"}
],
barcodeAmount: [
{required: true, message: "条码数量不能为空", trigger: "change"}
],
barcodeType: [
{required: true, message: "条码类型不能为空", trigger: "change"}
],
@ -553,6 +652,25 @@ export default {
],
},
noPurchaseOpen: false,
//
noPurchaseForm: {},
//
noPurchaseRules: {
batchFlag: [
{required: true, message: "批次标识不能为空", trigger: "blur"}
],
amount: [
{required: true, message: "批次数量不能为空", trigger: "change"}
],
barcodeAmount: [
{required: true, message: "条码数量不能为空", trigger: "change"}
],
materialCode: [
{required: true, message: "物料不能为空", trigger: "blur"}
],
},
batchPrintBtnDisabled: false
};
},
@ -821,6 +939,10 @@ export default {
},
selectProductBarcodeInfoByBarcodeInfo() {
if(this.internalForm.productBarcode == null || this.internalForm.productBarcode === ''){
return;
}
selectProductBarcodeInfoByBarcodeInfo(this.internalForm.productBarcode).then(response => {
if (response.data == null) {
this.$modal.msgError("成品信息不存在");
@ -859,6 +981,90 @@ export default {
this.resetInternal();
},
//
resetNoPurchase() {
this.noPurchaseForm = {
barcodeId: null,
printTime: null,
printPerson: null,
batchFlag: null,
barcodeType: '1',
barcodeInfo: null,
batchCode: null,
palletInfoCode: null,
materialId: null,
manufacturerId: null,
amount: null,
barcodeAmount: null,
machineName: null,
printNumber: null,
poNo: null,
productionDate: null,
acceptedDate: null,
lastOutstockDate: null,
planCode: null,
planDetailCode: null,
saleOrderId: null,
saleorderCode: null,
projectNo: null,
serialNumber: null,
remark: null,
bindStatus: null,
bindBy: null,
bindTime: null,
updateBy: null,
updateTime: null
};
this.resetForm("noPurchaseForm");
},
/** 无采购订单新增按钮操作 */
handleNoPurchaseAdd() {
this.reset();
this.noPurchaseOpen = true;
this.title = "添加原材料条码信息";
},
handleSelectMaterial(){
this.selectMaterialVisible = true;
},
/** 提交选择物料按钮 */
submitSelectMaterialForm() {
let selectedRow = this.$refs.selectMaterialRef.selectedRow;
this.noPurchaseForm.barcodeType = '1';//1,2,3,4
this.noPurchaseForm.materialId = selectedRow.materialId;
this.noPurchaseForm.materialCode = selectedRow.materialCode;
this.noPurchaseForm.materialName = selectedRow.materialName;
this.noPurchaseForm.batchFlag = selectedRow.batchFlag;
if (this.noPurchaseForm.batchFlag === "0") {
this.batchVisible = false;
} else {
this.noPurchaseForm.amount = selectedRow.batchAmount;
this.batchVisible = true;
}
this.selectMaterialVisible = false;
},
/** 无采购订单新增提交按钮 */
submitNoPurchaseAddForm() {
this.$refs["noPurchaseForm"].validate(valid => {
if (valid) {
addNoPurchaseBarcode(this.noPurchaseForm).then(response => {
this.$modal.msgSuccess("新增成功");
this.noPurchaseOpen = false;
this.getList();
});
}
});
},
}
};
</script>

@ -0,0 +1,187 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="物料编码" prop="materialCode">
<el-input
v-model="queryParams.materialCode"
placeholder="请输入物料编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="物料名称" prop="materialName">
<el-input
v-model="queryParams.materialName"
placeholder="请输入物料名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="物料类型" prop="materialTypeId">
<el-input
v-model="queryParams.materialTypeId"
placeholder="请输入物料类型"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="批次标识" prop="batchFlag">
<el-select v-model="queryParams.batchFlag" placeholder="请选择批次标识" clearable>
<el-option
v-for="dict in dict.type.active_flag"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</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="materialinfoList" @selection-change="handleSelectionChange"
@row-click="handleRowClick"
highlight-current-row>
<el-table-column type="selection" width="55" align="center" v-if="false" />
<el-table-column label="物料ID" align="center" prop="materialId" v-if="false"/>
<el-table-column label="物料编码" align="center" prop="materialCode"/>
<el-table-column label="物料名称" align="center" prop="materialName"/>
<el-table-column label="物料大类" align="center" prop="materialCategories">
<template slot-scope="scope">
<dict-tag :options="dict.type.material_categories" :value="scope.row.materialCategories"/>
</template>
</el-table-column>
<el-table-column label="物料类型" align="center" prop="materialTypeName"/>
<el-table-column label="常备物料" align="center" prop="bindFlag">
<template slot-scope="scope">
<dict-tag :options="dict.type.mes_material_bind_flag" :value="scope.row.bindFlag"/>
</template>
</el-table-column>
<el-table-column label="批次标识" align="center" prop="batchFlag">
<template slot-scope="scope">
<dict-tag :options="dict.type.active_flag" :value="scope.row.batchFlag"/>
</template>
</el-table-column>
<el-table-column label="批次数量" align="center" prop="batchAmount"/>
<el-table-column label="物料规格" align="center" prop="materialSpec"/>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</div>
</template>
<script>
import {
listMaterialinfo,
} from "@/api/mes/materialinfo";
export default {
name: "Materialinfo",
dicts: ['active_flag', 'material_categories','mes_material_bind_flag'],
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
baseMaterialTypeOptions: [],
//
materialinfoList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
erpId: null,
materialCode: null,
oldMaterialCode: null,
materialName: null,
materialCategories: null,
materialSubclass: null,
materialTypeId: null,
batchFlag: null,
materialUnitId: null,
materialUnit: null,
materialMatkl: null,
materialSpec: null,
netWeight: null,
grossWeight: null,
factoryId: null,
createOrgId: null,
useOrgId: null,
prodlineId: null,
activeFlag: null,
deletedFlag: null,
approveDate: null,
erpModifyDate: null
},
};
},
created() {
this.getList();
},
methods: {
/** 查询物料信息列表 */
getList() {
this.loading = true;
listMaterialinfo(this.queryParams).then(response => {
this.materialinfoList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.materialId)
this.single = selection.length !== 1
this.multiple = !selection.length
},
//
handleRowClick(row) {
this.selectedRow = row
},
}
};
</script>
Loading…
Cancel
Save