rev:物料参数保存报错、软废库存是否可用不一致、入库分配删除桶不生效
This commit is contained in:
@@ -156,6 +156,20 @@ public class PdaBucketServiceImpl implements PdaBucketService {
|
|||||||
//2.假如桶码没有就插入,有就更新 桶记录表
|
//2.假如桶码没有就插入,有就更新 桶记录表
|
||||||
JSONObject bucketJo = new JSONObject();
|
JSONObject bucketJo = new JSONObject();
|
||||||
if (StrUtil.isNotEmpty(bucketunique)) {
|
if (StrUtil.isNotEmpty(bucketunique)) {
|
||||||
|
// 校验此桶是否有未完成的单据
|
||||||
|
JSONObject map = new JSONObject();
|
||||||
|
map.put("flag", "16");
|
||||||
|
map.put("bucketunique", bucketunique);
|
||||||
|
JSONArray iosList = WQL.getWO("QPADSTSETSERVICE").addParamMap(map).process().getResultJSONArray(0);
|
||||||
|
|
||||||
|
if (ObjectUtil.isNotEmpty(iosList)) {
|
||||||
|
boolean is_emp = iosList.stream()
|
||||||
|
.map(row -> (JSONObject) row)
|
||||||
|
.allMatch(row -> row.getString("is_active").equals(is_active));
|
||||||
|
|
||||||
|
if (!is_emp) throw new PdaRequestException("此桶库存是否可用与选择是否可用不一致"+bucketunique+"!");
|
||||||
|
}
|
||||||
|
|
||||||
bucketJo = bucketRecordTable.query("bucketunique='" + bucketunique + "'").uniqueResult(0);
|
bucketJo = bucketRecordTable.query("bucketunique='" + bucketunique + "'").uniqueResult(0);
|
||||||
String before_storage_qty = bucketJo.getString("storage_qty");
|
String before_storage_qty = bucketJo.getString("storage_qty");
|
||||||
bucketJo.put("storagevehicle_type", "04");
|
bucketJo.put("storagevehicle_type", "04");
|
||||||
|
|||||||
@@ -478,3 +478,20 @@
|
|||||||
ENDSELECT
|
ENDSELECT
|
||||||
ENDQUERY
|
ENDQUERY
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
|
IF 输入.flag = "16"
|
||||||
|
QUERY
|
||||||
|
SELECT
|
||||||
|
dis.*
|
||||||
|
FROM
|
||||||
|
st_ivt_iostorinvdisdtl dis
|
||||||
|
LEFT JOIN ST_IVT_IOStorInv mst ON mst.iostorinv_id = dis.iostorinv_id
|
||||||
|
WHERE
|
||||||
|
mst.io_type = '0'
|
||||||
|
|
||||||
|
OPTION 输入.bucketunique <> ""
|
||||||
|
dis.bucketunique = 输入.bucketunique
|
||||||
|
ENDOPTION
|
||||||
|
ENDSELECT
|
||||||
|
ENDQUERY
|
||||||
|
ENDIF
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
import org.nl.modules.system.domain.DictDetail;
|
import org.nl.modules.system.domain.DictDetail;
|
||||||
import org.nl.modules.system.repository.DictDetailRepository;
|
import org.nl.modules.system.repository.DictDetailRepository;
|
||||||
import org.nl.utils.SecurityUtils;
|
import org.nl.utils.SecurityUtils;
|
||||||
|
import org.nl.utils.SpringContextHolder;
|
||||||
import org.nl.wms.basedata.master.constant.MaterOptTypeEnum;
|
import org.nl.wms.basedata.master.constant.MaterOptTypeEnum;
|
||||||
import org.nl.wms.basedata.pdm.service.WasteBallTimeService;
|
import org.nl.wms.basedata.pdm.service.WasteBallTimeService;
|
||||||
import org.nl.wms.basedata.pdm.service.dto.WastecchangeDto;
|
import org.nl.wms.basedata.pdm.service.dto.WastecchangeDto;
|
||||||
@@ -56,7 +57,7 @@ public class WasteBallTimeServiceImpl implements WasteBallTimeService {
|
|||||||
map.put("material_code", "%" + material_code + "%");
|
map.put("material_code", "%" + material_code + "%");
|
||||||
}
|
}
|
||||||
map.put("class_ids", MaterOptTypeEnum.THW.getClass_idStr());
|
map.put("class_ids", MaterOptTypeEnum.THW.getClass_idStr());
|
||||||
List<DictDetail> rfType = dictDetailRepository.findByDictName("MD_MATERIAL_WASTE_TYPE");
|
List<DictDetail> rfType = SpringContextHolder.getBean(DictDetailRepository.class).findByDictName("MD_MATERIAL_WASTE_TYPE");
|
||||||
Map<String, String> typeMap = rfType.stream().collect(HashMap::new, (k, v) -> k.put(v.getValue(), v.getLabel()), HashMap::putAll);
|
Map<String, String> typeMap = rfType.stream().collect(HashMap::new, (k, v) -> k.put(v.getValue(), v.getLabel()), HashMap::putAll);
|
||||||
|
|
||||||
JSONObject allmaterialIds = WQL.getWO("PDM_WASTEBALLTIME").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "mater.material_code");
|
JSONObject allmaterialIds = WQL.getWO("PDM_WASTEBALLTIME").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "mater.material_code");
|
||||||
@@ -129,7 +130,7 @@ public class WasteBallTimeServiceImpl implements WasteBallTimeService {
|
|||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void update(JSONObject form) {
|
public void update(JSONObject form) {
|
||||||
List<String> rfType = dictDetailRepository.findByDictName("MD_MATERIAL_WASTE_TYPE").stream().map(DictDetail::getValue).collect(Collectors.toList());
|
List<String> rfType = SpringContextHolder.getBean(DictDetailRepository.class).findByDictName("MD_MATERIAL_WASTE_TYPE").stream().map(DictDetail::getValue).collect(Collectors.toList());
|
||||||
JSONObject allData = new JSONObject();
|
JSONObject allData = new JSONObject();
|
||||||
for (String key : rfType) {
|
for (String key : rfType) {
|
||||||
allData.put(key,form.get(key));
|
allData.put(key,form.get(key));
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import org.nl.exception.BadRequestException;
|
|||||||
import org.nl.modules.system.domain.DictDetail;
|
import org.nl.modules.system.domain.DictDetail;
|
||||||
import org.nl.modules.system.repository.DictDetailRepository;
|
import org.nl.modules.system.repository.DictDetailRepository;
|
||||||
import org.nl.modules.system.service.DictDetailService;
|
import org.nl.modules.system.service.DictDetailService;
|
||||||
|
import org.nl.utils.SpringContextHolder;
|
||||||
import org.nl.wms.basedata.master.constant.MaterOptTypeEnum;
|
import org.nl.wms.basedata.master.constant.MaterOptTypeEnum;
|
||||||
import org.nl.wms.basedata.pdm.service.WastecchangeService;
|
import org.nl.wms.basedata.pdm.service.WastecchangeService;
|
||||||
import org.nl.wms.basedata.pdm.service.dto.WastecchangeDto;
|
import org.nl.wms.basedata.pdm.service.dto.WastecchangeDto;
|
||||||
@@ -53,7 +54,6 @@ public class WastecchangeServiceImpl implements WastecchangeService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private DictDetailRepository dictDetailRepository;
|
private DictDetailRepository dictDetailRepository;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, Object> queryAll(Map whereJson, Pageable page) {
|
public Map<String, Object> queryAll(Map whereJson, Pageable page) {
|
||||||
String material_code = MapUtil.getStr(whereJson, "material_code");
|
String material_code = MapUtil.getStr(whereJson, "material_code");
|
||||||
@@ -97,7 +97,7 @@ public class WastecchangeServiceImpl implements WastecchangeService {
|
|||||||
JSONObject allmaterialIds = WQL.getWO("PDM_WASTECCHANGE").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "mater.material_code");
|
JSONObject allmaterialIds = WQL.getWO("PDM_WASTECCHANGE").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "mater.material_code");
|
||||||
JSONArray array = allmaterialIds.getJSONArray("content");
|
JSONArray array = allmaterialIds.getJSONArray("content");
|
||||||
//label:name;value:code
|
//label:name;value:code
|
||||||
List<DictDetail> rfType = dictDetailRepository.findByDictName("MD_MATERIAL_WASTE_TYPE");
|
List<DictDetail> rfType = SpringContextHolder.getBean(DictDetailRepository.class).findByDictName("MD_MATERIAL_WASTE_TYPE");
|
||||||
Map<String, String> typeMap = rfType.stream().collect(HashMap::new, (k, v) -> k.put(v.getValue(), v.getLabel()), HashMap::putAll);
|
Map<String, String> typeMap = rfType.stream().collect(HashMap::new, (k, v) -> k.put(v.getValue(), v.getLabel()), HashMap::putAll);
|
||||||
JSONArray array2 = new JSONArray();
|
JSONArray array2 = new JSONArray();
|
||||||
if (ObjectUtil.isNotEmpty(array)){
|
if (ObjectUtil.isNotEmpty(array)){
|
||||||
@@ -141,7 +141,7 @@ public class WastecchangeServiceImpl implements WastecchangeService {
|
|||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void update(JSONObject form) {
|
public void update(JSONObject form) {
|
||||||
List<String> rfType = dictDetailRepository.findByDictName("MD_MATERIAL_WASTE_TYPE").stream().map(DictDetail::getValue).collect(Collectors.toList());
|
List<String> rfType = SpringContextHolder.getBean(DictDetailRepository.class).findByDictName("MD_MATERIAL_WASTE_TYPE").stream().map(DictDetail::getValue).collect(Collectors.toList());
|
||||||
JSONObject allData = new JSONObject();
|
JSONObject allData = new JSONObject();
|
||||||
for (String key : rfType) {
|
for (String key : rfType) {
|
||||||
allData.put(key,form.get(key));
|
allData.put(key,form.get(key));
|
||||||
@@ -254,7 +254,7 @@ public class WastecchangeServiceImpl implements WastecchangeService {
|
|||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public JSONArray contentShift(JSONObject json) {
|
public JSONArray contentShift(JSONObject json) {
|
||||||
List<String> rfType = dictDetailRepository.findByDictName("MD_MATERIAL_WASTE_TYPE").stream().map(DictDetail::getValue).collect(Collectors.toList());
|
List<String> rfType = SpringContextHolder.getBean(DictDetailRepository.class).findByDictName("MD_MATERIAL_WASTE_TYPE").stream().map(DictDetail::getValue).collect(Collectors.toList());
|
||||||
JSONArray rf_arr = new JSONArray();
|
JSONArray rf_arr = new JSONArray();
|
||||||
rfType.forEach(a->{
|
rfType.forEach(a->{
|
||||||
JSONObject json_CF = new JSONObject();
|
JSONObject json_CF = new JSONObject();
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
<span class="el-dialog__title2">入库分配</span>
|
<span class="el-dialog__title2">入库分配</span>
|
||||||
<span class="crud-opts-right2">
|
<span class="crud-opts-right2">
|
||||||
<!--左侧插槽-->
|
<!--左侧插槽-->
|
||||||
<slot name="left" />
|
<slot name="left"/>
|
||||||
<el-button slot="left" type="info" @click="dialogVisible = false">关闭</el-button>
|
<el-button slot="left" type="info" @click="dialogVisible = false">关闭</el-button>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
@@ -51,10 +51,10 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column show-overflow-tooltip prop="material_code" label="物料编码" align="center" />
|
<el-table-column show-overflow-tooltip prop="material_code" label="物料编码" align="center"/>
|
||||||
<el-table-column show-overflow-tooltip prop="material_name" label="物料名称" align="center" />
|
<el-table-column show-overflow-tooltip prop="material_name" label="物料名称" align="center"/>
|
||||||
<el-table-column show-overflow-tooltip prop="pcsn" label="批次号" align="center" />
|
<el-table-column show-overflow-tooltip prop="pcsn" label="批次号" align="center"/>
|
||||||
<el-table-column show-overflow-tooltip prop="plan_qty" :formatter="crud.formatNum3" label="重量" align="center" />
|
<el-table-column show-overflow-tooltip prop="plan_qty" :formatter="crud.formatNum3" label="重量" align="center"/>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
prop="assign_qty"
|
prop="assign_qty"
|
||||||
@@ -69,15 +69,16 @@
|
|||||||
label="未分配数量"
|
label="未分配数量"
|
||||||
align="center"
|
align="center"
|
||||||
/>
|
/>
|
||||||
<el-table-column show-overflow-tooltip prop="qty_unit_name" label="单位" align="center" />
|
<el-table-column show-overflow-tooltip prop="qty_unit_name" label="单位" align="center"/>
|
||||||
<el-table-column show-overflow-tooltip prop="source_bill_type_name" label="源单类型" align="center" />
|
<el-table-column show-overflow-tooltip prop="source_bill_type_name" label="源单类型" align="center"/>
|
||||||
<el-table-column show-overflow-tooltip prop="source_bill_code" label="源单编号" align="center" />
|
<el-table-column show-overflow-tooltip prop="source_bill_code" label="源单编号" align="center"/>
|
||||||
</el-table>
|
</el-table>
|
||||||
</el-card>
|
</el-card>
|
||||||
<el-card class="box-card" shadow="never" :body-style="{padding:'20px 20px 0 20px'}">
|
<el-card class="box-card" shadow="never" :body-style="{padding:'20px 20px 0 20px'}">
|
||||||
<el-form ref="form2" :inline="true" :model="form" :rules="rules" size="mini">
|
<el-form ref="form2" :inline="true" :model="form" :rules="rules" size="mini">
|
||||||
<el-form-item label="载具号" prop="storagevehicle_code">
|
<el-form-item label="载具号" prop="storagevehicle_code">
|
||||||
<el-input v-model.trim="form.storagevehicle_code" placeholder="载具号" style="width: 200px" @blur="vehicleCheck" />
|
<el-input v-model.trim="form.storagevehicle_code" placeholder="载具号" style="width: 200px"
|
||||||
|
@blur="vehicleCheck"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="桶号" prop="bucketunique">
|
<el-form-item label="桶号" prop="bucketunique">
|
||||||
<el-input
|
<el-input
|
||||||
@@ -87,7 +88,7 @@
|
|||||||
class="input-with-select"
|
class="input-with-select"
|
||||||
style="width: 200px"
|
style="width: 200px"
|
||||||
>
|
>
|
||||||
<el-button slot="append" icon="el-icon-search" @click="dialogBucket" />
|
<el-button slot="append" icon="el-icon-search" @click="dialogBucket"/>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="放入重量" prop="storage_qty">
|
<el-form-item label="放入重量" prop="storage_qty">
|
||||||
@@ -140,7 +141,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<span class="crud-opts-right2">
|
<span class="crud-opts-right2">
|
||||||
<!--左侧插槽-->
|
<!--左侧插槽-->
|
||||||
<slot name="left" />
|
<slot name="left"/>
|
||||||
<el-button
|
<el-button
|
||||||
slot="left"
|
slot="left"
|
||||||
class="filter-item"
|
class="filter-item"
|
||||||
@@ -203,12 +204,12 @@
|
|||||||
border
|
border
|
||||||
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
|
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
|
||||||
>
|
>
|
||||||
<el-table-column show-overflow-tooltip type="index" label="序号" align="center" />
|
<el-table-column show-overflow-tooltip type="index" label="序号" align="center"/>
|
||||||
<el-table-column show-overflow-tooltip prop="material_code" label="物料编码" align="center" />
|
<el-table-column show-overflow-tooltip prop="material_code" label="物料编码" align="center"/>
|
||||||
<el-table-column show-overflow-tooltip prop="material_name" label="物料名称" align="center" />
|
<el-table-column show-overflow-tooltip prop="material_name" label="物料名称" align="center"/>
|
||||||
<el-table-column show-overflow-tooltip prop="pcsn" label="批次" align="center" />
|
<el-table-column show-overflow-tooltip prop="pcsn" label="批次" align="center"/>
|
||||||
<el-table-column show-overflow-tooltip prop="storagevehicle_code" label="托盘号" align="center" />
|
<el-table-column show-overflow-tooltip prop="storagevehicle_code" label="托盘号" align="center"/>
|
||||||
<el-table-column show-overflow-tooltip prop="bucketunique" label="桶号" align="center" />
|
<el-table-column show-overflow-tooltip prop="bucketunique" label="桶号" align="center"/>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
prop="storage_qty"
|
prop="storage_qty"
|
||||||
@@ -216,25 +217,28 @@
|
|||||||
label="重量"
|
label="重量"
|
||||||
align="center"
|
align="center"
|
||||||
/>
|
/>
|
||||||
<el-table-column show-overflow-tooltip prop="point_code" label="入库点" align="center" />
|
<el-table-column show-overflow-tooltip prop="point_code" label="入库点" align="center"/>
|
||||||
<el-table-column show-overflow-tooltip prop="struct_code" label="货位" align="center" />
|
<el-table-column show-overflow-tooltip prop="struct_code" label="货位" align="center"/>
|
||||||
<el-table-column align="center" label="操作" width="190" fixed="right">
|
<el-table-column align="center" label="操作" width="190" fixed="right">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-popover v-model="scope.row.pop" placement="top" width="180" trigger="manual">
|
<el-popover v-model="scope.row.pop" placement="top" width="180" trigger="manual">
|
||||||
<p>{{ '是否确认删除桶明细?' }}</p>
|
<p>{{ '是否确认删除桶明细?' }}</p>
|
||||||
<div style="text-align: right; margin: 0">
|
<div style="text-align: right; margin: 0">
|
||||||
<el-button size="mini" type="text" @click="doCancel(scope.row)">取消</el-button>
|
<el-button size="mini" type="text" @click="doCancel(scope.row)">取消</el-button>
|
||||||
<el-button type="primary" size="mini" @click.native.prevent="deleteRow(scope.$index, form.tableMater)">确定</el-button>
|
<el-button type="primary" size="mini" @click.native.prevent="deleteRow(scope.$index, form.tableMater)">
|
||||||
|
确定
|
||||||
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
<el-button slot="reference" :disabled="scope.row.struct_code !== '' && scope.row.struct_code" type="danger" icon="el-icon-delete" size="mini" @click="toDelete(scope.row)" />
|
<el-button slot="reference" :disabled="scope.row.struct_code !== '' && scope.row.struct_code"
|
||||||
|
type="danger" icon="el-icon-delete" size="mini" @click="toDelete(scope.row)"/>
|
||||||
</el-popover>
|
</el-popover>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<StructDiv ref="child" :dialog-show.sync="structShow" :sect-prop="sectProp" @tableChanged="tableChanged" />
|
<StructDiv ref="child" :dialog-show.sync="structShow" :sect-prop="sectProp" @tableChanged="tableChanged"/>
|
||||||
<BucketDialog :dialog-show.sync="bucketShow" :bucket-prop="bucketProp" @bucketChange="bucketChange" />
|
<BucketDialog :dialog-show.sync="bucketShow" :bucket-prop="bucketProp" @bucketChange="bucketChange"/>
|
||||||
|
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</template>
|
</template>
|
||||||
@@ -330,7 +334,8 @@ export default {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
toDelete(data) {
|
toDelete(data) {
|
||||||
data.pop = true
|
this.$set(data, 'pop', true)
|
||||||
|
// data.pop = true
|
||||||
},
|
},
|
||||||
close() {
|
close() {
|
||||||
this.form.tableMater = []
|
this.form.tableMater = []
|
||||||
@@ -395,7 +400,8 @@ export default {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
dis_dtl.storagevehicle_code = this.form.storagevehicle_code
|
dis_dtl.storagevehicle_code = this.form.storagevehicle_code
|
||||||
dis_dtl.pop = false
|
// dis_dtl.pop = false
|
||||||
|
this.$set(dis_dtl, 'pop', false)
|
||||||
this.form.tableMater.splice(this.form.tableMater.length, 0, dis_dtl)
|
this.form.tableMater.splice(this.form.tableMater.length, 0, dis_dtl)
|
||||||
if (this.form.dtl_row.assign_qty) {
|
if (this.form.dtl_row.assign_qty) {
|
||||||
this.form.dtl_row.assign_qty = parseFloat(this.form.dtl_row.assign_qty) + parseFloat(this.form.storage_qty)
|
this.form.dtl_row.assign_qty = parseFloat(this.form.dtl_row.assign_qty) + parseFloat(this.form.storage_qty)
|
||||||
@@ -444,6 +450,7 @@ export default {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
deleteRow(index, rows) {
|
deleteRow(index, rows) {
|
||||||
|
debugger
|
||||||
// 如果桶状态不是生成调后台逻辑
|
// 如果桶状态不是生成调后台逻辑
|
||||||
if (rows[index].status !== '01') {
|
if (rows[index].status !== '01') {
|
||||||
crudRawAssist.deleteDisDtl(rows[index]).then(res => {
|
crudRawAssist.deleteDisDtl(rows[index]).then(res => {
|
||||||
@@ -453,9 +460,11 @@ export default {
|
|||||||
crudRawAssist.getDisDtl(this.form.dtl_row).then(res => {
|
crudRawAssist.getDisDtl(this.form.dtl_row).then(res => {
|
||||||
this.form.tableMater = res
|
this.form.tableMater = res
|
||||||
})
|
})
|
||||||
rows[index].pop = false
|
// rows[index].pop = false
|
||||||
|
this.$set(rows[index], 'pop', false)
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
rows[index].pop = false
|
// rows[index].pop = false
|
||||||
|
this.$set(rows[index], 'pop', false)
|
||||||
return
|
return
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -553,7 +562,8 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
doCancel(data) {
|
doCancel(data) {
|
||||||
data.pop = false
|
this.$set(data, 'pop', false)
|
||||||
|
// data.pop = false
|
||||||
},
|
},
|
||||||
unDivStruct() {
|
unDivStruct() {
|
||||||
if (this.form.tableMater.length <= 0) {
|
if (this.form.tableMater.length <= 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user