|
|
<template>
|
|
|
<lay-form :model="dataInfo" class="dataInfo">
|
|
|
<lay-form-item label="原配方" prop="formula1" required label-width="120" style="margin-bottom:30px;">
|
|
|
<lay-select v-model="formula1" placeholder="请选择">
|
|
|
<lay-select-option v-for="(fIdv, fIdx) in formulaList" key="fIdx" :value="fIdv.FID" :label="fIdv.FName"></lay-select-option>
|
|
|
</lay-select>
|
|
|
<p class="note">注:配方号+版本号+描述</p>
|
|
|
</lay-form-item>
|
|
|
|
|
|
<lay-form-item label="变更后的配方" prop="formula2" required label-width="120" style="margin-bottom:30px;">
|
|
|
<lay-select v-model="formula2" placeholder="请选择">
|
|
|
<lay-select-option v-for="(fIdv, fIdx) in formulaList" key="fIdx" :value="fIdv.FID" :label="fIdv.FName"></lay-select-option>
|
|
|
</lay-select>
|
|
|
<p class="note">注:配方号+版本号+描述</p>
|
|
|
</lay-form-item>
|
|
|
<lay-form-item label="模式" prop="FFormulaName" required label-width="120" style="margin-bottom:30px;">
|
|
|
<lay-select v-model="dataInfo.FCreateFactoryID" placeholder="请选择">
|
|
|
<lay-select-option v-for="(fIdv, fIdx) in factoryLists" key="fIdx" :value="fIdv.FID" :label="fIdv.FName"></lay-select-option>
|
|
|
</lay-select>
|
|
|
</lay-form-item>
|
|
|
|
|
|
|
|
|
<lay-form-item>
|
|
|
<p class="note3">配方变更影响的旧物料</p>
|
|
|
|
|
|
<lay-table :columns="dataColumn" v-model:selected-key="selectedKey" id="FID"
|
|
|
:dataSource="dataList">
|
|
|
</lay-table>
|
|
|
</lay-form-item>
|
|
|
<lay-form-item class="remark">
|
|
|
<p>备注:配方变更需要重新下载BOM配方,配方变更后一下内容需要重新更新到SAP</p>
|
|
|
<p>1、如果实验号变更,那么实验号对应的受影响的物料会自动更新实验号</p>
|
|
|
<p>2、配方变更会重新下载BOM配方</p>
|
|
|
<p>3、新BOM配方对应的配方视图重新生成,同时用户需要更新到SAP</p>
|
|
|
<p>4、新BOM配方中的新的物料需要用户维护视图,并更新到SAP</p>
|
|
|
</lay-form-item>
|
|
|
</lay-form>
|
|
|
<div v-if="showButton" style="text-align: center;">
|
|
|
<lay-form-item>
|
|
|
<lay-button type="normal" @click="submitClick(true)">确认</lay-button>
|
|
|
<lay-button @click="cancelClick">取消</lay-button>
|
|
|
</lay-form-item>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<style scoped>
|
|
|
.dataInfo {
|
|
|
max-width: 90%;
|
|
|
height: 600px;
|
|
|
margin: 30px auto;
|
|
|
padding-right: 30px;
|
|
|
overflow-y: auto;
|
|
|
}
|
|
|
|
|
|
.search-btn2 {
|
|
|
position: absolute;
|
|
|
right: 0;
|
|
|
top: 0;
|
|
|
}
|
|
|
|
|
|
.note2 {
|
|
|
display: inline-block;
|
|
|
margin-left: 16px;
|
|
|
}
|
|
|
|
|
|
.note3 {
|
|
|
display: inline-flex;
|
|
|
line-height: 38px;
|
|
|
}
|
|
|
|
|
|
.note2,
|
|
|
.note {
|
|
|
color: #999;
|
|
|
font-size: 12px;
|
|
|
}
|
|
|
|
|
|
.note {
|
|
|
margin-top: 4px;
|
|
|
position: absolute;
|
|
|
left: 0;
|
|
|
}
|
|
|
|
|
|
.note .layui-form-radio,
|
|
|
.note .layui-form-radio i {
|
|
|
margin: 0 1px 0 0;
|
|
|
padding: 0;
|
|
|
font-size: 14px;
|
|
|
margin-top: -2px;
|
|
|
line-height: 0;
|
|
|
}
|
|
|
|
|
|
.FSearchName {
|
|
|
color: var(--global-primary-color)
|
|
|
}
|
|
|
.remark{
|
|
|
line-height: 2;
|
|
|
font-size: 18px;
|
|
|
}
|
|
|
</style>
|
|
|
<script>
|
|
|
import {
|
|
|
ref,
|
|
|
watch
|
|
|
} from 'vue';
|
|
|
import {
|
|
|
getDataCode,
|
|
|
getPageList,
|
|
|
getBasicList,
|
|
|
insertDataInfo,
|
|
|
updateDataInfo,
|
|
|
getDataModel
|
|
|
} from "/src/api/api/common";
|
|
|
import {
|
|
|
getFactoryList
|
|
|
} from "/src/api/api/factory";
|
|
|
import{
|
|
|
getFormulaList
|
|
|
} from '/src/api/api/formula'
|
|
|
export default {
|
|
|
setup() {
|
|
|
const dataInfo = ref({
|
|
|
FMaterialType: "ZMAT",
|
|
|
FWeightUnit: "KG"
|
|
|
});
|
|
|
const formulaList = ref([]);
|
|
|
const seletList = ref([
|
|
|
[],
|
|
|
[]
|
|
|
]);
|
|
|
const typeList = ref([]);
|
|
|
|
|
|
let dataColumn = [ {
|
|
|
title: "物料号",
|
|
|
key: "F1",
|
|
|
width: "160px"
|
|
|
},
|
|
|
{
|
|
|
title: "试验号",
|
|
|
key: "F2",
|
|
|
width: "160px"
|
|
|
},
|
|
|
{
|
|
|
title: "物料描述",
|
|
|
key: "F3",
|
|
|
width: "110px",
|
|
|
width: "260px"
|
|
|
},
|
|
|
{
|
|
|
title: "产品分类",
|
|
|
key: "F4",
|
|
|
width: "160px"
|
|
|
}
|
|
|
];
|
|
|
dataColumn.forEach((item) => {
|
|
|
item.align = "center";
|
|
|
});
|
|
|
const pageInfo = ref({
|
|
|
total: 0,
|
|
|
limit: 5,
|
|
|
current: 1
|
|
|
});
|
|
|
const dataList = ref([]);
|
|
|
const selectedKey = ref("");
|
|
|
watch(selectedKey, function () {
|
|
|
const chose = dataList.value.find(s => s.FID == selectedKey.value) || null;
|
|
|
if (chose != null) {
|
|
|
dataInfo.value.FFormulaName = chose.FName + "+" + chose.FTestCode + "+" + chose.FVersionCode;
|
|
|
dataInfo.value.FFormulaID = chose.FID;
|
|
|
dataInfo.value.FVersionCode = chose.FVersionCode;
|
|
|
dataInfo.value.FFormulaTestCode = chose.FTestCode;
|
|
|
}
|
|
|
});
|
|
|
|
|
|
const showEditBox = ref(false);
|
|
|
const showButton = ref(true);
|
|
|
const saleList = ref([]);
|
|
|
const factoryLists = ref([]);
|
|
|
const factoryValue=ref(null);
|
|
|
const formula1=ref(null);
|
|
|
const formula2=ref(null);
|
|
|
return {
|
|
|
dataInfo,
|
|
|
formulaList,
|
|
|
seletList,
|
|
|
typeList,
|
|
|
dataColumn,
|
|
|
dataList,
|
|
|
pageInfo,
|
|
|
selectedKey,
|
|
|
showEditBox,
|
|
|
showButton,
|
|
|
saleList,
|
|
|
factoryLists,
|
|
|
factoryValue,
|
|
|
formula1,
|
|
|
formula2
|
|
|
}
|
|
|
},
|
|
|
props: {
|
|
|
dataInfoObj: {
|
|
|
type: Object,
|
|
|
default: () => { },
|
|
|
}
|
|
|
},
|
|
|
mounted() {
|
|
|
//其他地方过来获取数据
|
|
|
if (this.dataInfoObj && this.dataInfoObj.FTeamID) {
|
|
|
this._getTeamData(this.dataInfoObj.FTeamID);
|
|
|
this.showButton = this.dataInfoObj.FCanEdit != 2
|
|
|
}
|
|
|
this._getSelectList();
|
|
|
this._getFactoryList();
|
|
|
this._getFormulaList();
|
|
|
},
|
|
|
methods: {
|
|
|
cancelClick(isFirst) {
|
|
|
this.$emit('cancelClick', isFirst ? isFirst : false);
|
|
|
},
|
|
|
async _getFactoryList() {
|
|
|
this.factoryLists = await getFactoryList() || [];
|
|
|
},
|
|
|
async _getTeamData(dataId) {
|
|
|
let result = await getDataModel({
|
|
|
FID: dataId,
|
|
|
FKey: "FID,FTestCode,FWeightUnit,FSaleCode,FMaterialType,FMaterialGroup,FFormulaTestCode,FFormulaName,FFormulaID,FPackCode,FCreateFactoryID"
|
|
|
}, "Teamwork");
|
|
|
this.dataInfo = result || this.dataInfo;
|
|
|
},
|
|
|
async _getFormulaList(){
|
|
|
this.formulaList=await getFormulaList();
|
|
|
},
|
|
|
async _getSelectList() {
|
|
|
let result = await getDataCode({
|
|
|
FType: '1,2'
|
|
|
});
|
|
|
this.seletList[0] = result.FType1 || [];
|
|
|
this.seletList[1] = result.FType2 || [];
|
|
|
this.typeList = await getBasicList(37) || [];
|
|
|
this._getPageList();
|
|
|
},
|
|
|
async _inputSaleCode(val) {
|
|
|
let pData = {
|
|
|
FPageIndex: 1,
|
|
|
FPageSize: 10,
|
|
|
FName: val || ""
|
|
|
};
|
|
|
this.saleList = [];
|
|
|
if (pData.FName != "") {
|
|
|
let result = await getPageList(pData, "Material");
|
|
|
this.saleList = result.Data.List || [];
|
|
|
}
|
|
|
},
|
|
|
//配方检索
|
|
|
_searchPageList(value) {
|
|
|
this._getPageList(true);
|
|
|
},
|
|
|
//配方翻页
|
|
|
changePage(obj) {
|
|
|
this.pageInfo.current = obj.current;
|
|
|
this.pageInfo.limit = obj.limit;
|
|
|
this._getPageList();
|
|
|
},
|
|
|
//配方接口
|
|
|
async _getPageList(isFirst) {
|
|
|
if (isFirst) {
|
|
|
this.pageInfo.current = 1;
|
|
|
this.pageInfo.total = 0;
|
|
|
}
|
|
|
let postData = {
|
|
|
FPageIndex: this.pageInfo.current,
|
|
|
FPageSize: this.pageInfo.limit
|
|
|
}
|
|
|
let search = this.dataInfo.FSearchName;
|
|
|
if (search && search != "") {
|
|
|
postData.Or_FPlmCode = postData.Or_FTestCode = postData.Or_FName = postData.Or_FVersionCode =
|
|
|
search;
|
|
|
}
|
|
|
let result = await getPageList(postData, "Formula");
|
|
|
result.Data.List = result.Data.List || [];
|
|
|
result.Data.List.forEach((item) => {
|
|
|
let type = this.typeList.find(s => s.FValue == item.FType);
|
|
|
item.FTypeName = type == null ? item.FType : type.FName;
|
|
|
if (this.dataInfo.FFormulaID == item.FID) this.selectedKey = item.FID
|
|
|
});
|
|
|
this.pageInfo.total = result.Data.Total || 0;
|
|
|
this.dataList = [{F1:"10000271",F2:"KTFTS22111101",F3:"KTFTS22111101-K001@测试",F4:"产成品"},
|
|
|
{F1:"",F2:"KTFTS22111101",F3:"12",F4:"半成品"},
|
|
|
{F1:"10000270",F2:"KTFTS22111101",F3:"KTFTS22111101-K001@测试",F4:"产成品"}];
|
|
|
},
|
|
|
//数据-验证
|
|
|
async submitClick(isCreate) {
|
|
|
let postData = this.dataInfo;
|
|
|
postData.FSaleCode = (postData.FSaleCode || "").trim();
|
|
|
postData.FTestCode = (postData.FTestCode || "").trim();
|
|
|
postData.FMaterialGroup = (postData.FMaterialGroup || "").trim();
|
|
|
postData.FWeightUnit = (postData.FWeightUnit || "").trim();
|
|
|
postData.FFormulaName = (postData.FFormulaName || "").trim();
|
|
|
postData.FCreateFactoryID=(postData.FCreateFactoryID==-1?"":postData.FCreateFactoryID);
|
|
|
for (let key in postData) {
|
|
|
if (postData[key] == "") return false;
|
|
|
}
|
|
|
// let indexs = [postData.FSaleCode.indexOf("-"), postData.FSaleCode.indexOf("@")];
|
|
|
// if (indexs[0] == -1 || indexs[1] == -1 || indexs[1] - indexs[0] < 2) {
|
|
|
// layer.msg('必须要输入包材代码')
|
|
|
// return false;
|
|
|
// }
|
|
|
postData.FState = isCreate ? 1 : 0;
|
|
|
postData = JSON.parse(JSON.stringify(postData));
|
|
|
if (postData.FTestCode != postData.FFormulaTestCode) {
|
|
|
this.sureTextCode(postData);
|
|
|
return false;
|
|
|
}
|
|
|
this._postTermData(postData);
|
|
|
},
|
|
|
//数据-确认
|
|
|
sureTextCode(postData) {
|
|
|
let $this = this;
|
|
|
layer.confirm("选择的配方和订单试验号不一致,请确认使用选择的配方嘛?", {
|
|
|
title: "提示",
|
|
|
btn: [{
|
|
|
text: '暂时保存',
|
|
|
callback: function (id) {
|
|
|
layer.close(id);
|
|
|
postData["FState"] = 0;
|
|
|
$this._postTermData(postData);
|
|
|
}
|
|
|
},
|
|
|
{
|
|
|
text: '确认提交',
|
|
|
callback: function (id) {
|
|
|
layer.close(id);
|
|
|
postData["FState"] = 1;
|
|
|
$this._postTermData(postData);
|
|
|
}
|
|
|
}
|
|
|
]
|
|
|
});
|
|
|
},
|
|
|
//数据-提交
|
|
|
async _postTermData(postData) {
|
|
|
delete postData["FSearchName"];
|
|
|
let result = 0;
|
|
|
let idx = layer.load(2);
|
|
|
if (postData.FID && postData.FID > 0) {
|
|
|
result = await updateDataInfo(postData, "Teamwork") || 0;
|
|
|
} else {
|
|
|
result = await insertDataInfo(postData, "Teamwork") || 0;
|
|
|
}
|
|
|
if (result > 0) {
|
|
|
this.cancelClick(true);
|
|
|
}
|
|
|
layer.close(idx);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
</script>
|