commit by yzf

master
Yang 3 years ago
parent f752414cf5
commit 0359982c54

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
.dataInfo[data-v-a4d8cdf6]{max-width:90%;height:600px;margin:30px auto;padding-right:30px;overflow-y:auto}.search-btn2[data-v-a4d8cdf6]{position:absolute;right:0;top:0}.note2[data-v-a4d8cdf6]{display:inline-block;margin-left:16px}.note3[data-v-a4d8cdf6]{display:inline-flex;line-height:38px;margin-left:12px}.note2[data-v-a4d8cdf6],.note[data-v-a4d8cdf6]{color:#999;font-size:12px}.note[data-v-a4d8cdf6]{margin-top:4px;position:absolute}.note .layui-form-radio[data-v-a4d8cdf6],.note .layui-form-radio i[data-v-a4d8cdf6]{margin:-2px 1px 0 0;padding:0;font-size:14px;line-height:0}.FSearchName[data-v-a4d8cdf6]{color:var(--global-primary-color)}.dataInfo[data-v-6b2ec07a]{max-width:90%;height:600px;margin:30px auto;padding-right:30px;overflow-y:auto}.search-btn2[data-v-6b2ec07a]{position:absolute;right:0;top:0}.note2[data-v-6b2ec07a]{display:inline-block;margin-left:16px}.note3[data-v-6b2ec07a]{display:inline-flex;line-height:38px;margin-left:12px}.note2[data-v-6b2ec07a],.note[data-v-6b2ec07a]{color:#999;font-size:12px}.note[data-v-6b2ec07a]{margin-top:4px;position:absolute;left:0}.note .layui-form-radio[data-v-6b2ec07a],.note .layui-form-radio i[data-v-6b2ec07a]{margin:-2px 1px 0 0;padding:0;font-size:14px;line-height:0}.FSearchName[data-v-6b2ec07a]{color:var(--global-primary-color)}.layui-item33[data-v-66f427dc]{width:90%;padding-right:30px;margin:30px auto 10px;display:block;overflow:auto;position:relative;clear:both}.menuBtn[data-v-66f427dc]{display:block;text-align:center;width:96%;margin:20px auto}.content-box[data-v-b2751b9c]{margin:30px 10px;display:block;position:relative;clear:both;float:none;min-height:740px}.row-select td[data-v-b2751b9c]{overflow:inherit}.layui-select[data-v-b2751b9c]{width:100%}.edit[data-v-b2751b9c]{color:green}[data-v-b2751b9c] .edit-item .layui-input{border-color:#5fb878!important}[data-v-b2751b9c] .edit-item .layui-input:hover{border-color:#009688!important;color:#009688}.isShow[data-v-b2751b9c]{width:370px;height:30px;border:none}.isHidden[data-v-b2751b9c],.isBomHidden[data-v-b2751b9c]{display:none}

@ -0,0 +1 @@
.dataInfo[data-v-71a18e87]{max-width:90%;height:600px;margin:30px auto;padding-right:30px;overflow-y:auto}.search-btn2[data-v-71a18e87]{position:absolute;right:0;top:0}.note2[data-v-71a18e87]{display:inline-block;margin-left:16px}.note3[data-v-71a18e87]{display:inline-flex;line-height:38px;margin-left:12px}.note2[data-v-71a18e87],.note[data-v-71a18e87]{color:#999;font-size:12px}.note[data-v-71a18e87]{margin-top:4px;position:absolute;left:0}.note .layui-form-radio[data-v-71a18e87],.note .layui-form-radio i[data-v-71a18e87]{margin:-2px 1px 0 0;padding:0;font-size:14px;line-height:0}.FSearchName[data-v-71a18e87]{color:var(--global-primary-color)}.layui-item33[data-v-33342b24]{width:90%;padding-right:30px;margin:30px auto 10px;display:block;overflow:auto;position:relative;clear:both}.menuBtn[data-v-33342b24]{display:block;text-align:center;width:96%;margin:20px auto}.content-box[data-v-7d007464]{margin:30px 10px;display:block;position:relative;clear:both;float:none;min-height:740px}.row-select td[data-v-7d007464]{overflow:inherit}.layui-select[data-v-7d007464]{width:100%}.edit[data-v-7d007464]{color:green}[data-v-7d007464] .edit-item .layui-input{border-color:#5fb878!important}[data-v-7d007464] .edit-item .layui-input:hover{border-color:#009688!important;color:#009688}.isShow[data-v-7d007464]{width:370px;height:30px;border:none}.isHidden[data-v-7d007464],.isBomHidden[data-v-7d007464]{display:none}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
import{v as n}from"./index.58a4812e.js";async function r(a){var t=[];return await n.post("/api/Common/GetBasicList",{FType:a}).then(e=>{t=e.Data.sort(function(s,o){return s.FOrder>o.FOrder})}),t}async function u(a,t){let e=0;return await n.post("/api/"+t+"/GetDataModel",a).then(s=>{e=s.Data}),e}async function l(a,t){let e=0;return await n.post("/api/"+t+"/UpdateDataModel",a).then(s=>{e=s.Data}),e}async function c(a,t){let e=0;return await n.post("/api/"+t+"/InsertDataModel",a).then(s=>{e=s.Data}),e}async function p(a,t){let e=0;return await n.post("/api/"+t+"/DeleteDataById",{FID:a.FID||a}).then(s=>{e=s.Data}),e}async function D(a,t){a=a||{FPageIndex:1,FPageSize:10};let e={};return await n.post("/api/"+t+"/GetPageList",a).then(s=>{e=s}),e}async function f(a,t){let e={};return await n.post("/api/"+t+"/Save",a).then(s=>{e=s}),e}async function m(a){let t="";return await n.post("/api/Common/GetTempFile",{FType:a||1}).then(e=>{t=e.Data}),t}async function C(a){let t={};return await n.post("/api/Common/CheckIsHasPower",a).then(e=>{t=e.Data}),t}async function d(a){let t={};return await n.post("/api/Common/GetDataCodeList",a).then(e=>{t=e.Data}),t}async function h(){let a={};return await n.post("/api/Common/GetConfigList",{}).then(t=>{a=t.Data}),a}async function y(a){let t={};return await n.post("/api/Common/GetConfigValue",{FID:a}).then(e=>{t=e.Data}),t}async function g(a){let t={};return await n.post("/api/Common/StateDataCode",{FID:a}).then(e=>{t=e.Data}),t}async function w(a){let t={};return await n.post("/api/Common/DeleteDataCode",{FID:a}).then(e=>{t=e.Data}),t}async function F(a){let t={};return await n.post("/api/Common/ChangeDataCode",a).then(e=>{t=e.Data}),t}export{u as a,d as b,r as c,f as d,C as e,m as f,D as g,p as h,c as i,F as j,h as k,w as l,y as m,g as s,l as u};

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
import{v as o}from"./index.58a4812e.js";async function c(){var t=[];return await o.post("/api/Factory/GetFactoryList").then(a=>{t=a.Data}),t}async function i(t,a){let e=0;return await o.post("/api/Factory/CheckHasCode",{FID:t,FCode:a}).then(r=>{e=r.Data}),e}export{i as c,c as g};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
import{_ as C,r as h,u as k,g as w,a as L,o as r,c as p,w as n,b as H,d as s,e as t,t as i,f as D,h as S,n as N,F as z,i as T,j as P,k as E,l as M,m as A,p as B,q as I,s as V}from"./index.58a4812e.js";/* empty css */import{g as $}from"./common.a907f978.js";const O={setup(){let a=[{title:"\u9500\u552E\u53F7",key:"FSaleCode",align:"center"},{title:"\u53D1\u8D77\u65F6\u95F4",key:"FAddDate",align:"center",width:"182px"},{title:"\u5F53\u524D\u6D41\u7A0B",key:"FName",align:"center",width:"200px"},{title:"\u4E8B\u9879\u72B6\u6001",key:"FState",align:"center",width:"98px"},{title:"\u4EFB\u52A1\u6765\u6E90",key:"FDesc",align:"center"}];const o=h([]),l=h([" "," "," "," "]),e=h(""),f=k(),_=h([]);return{topCount:l,dataColumn:a,dataList:o,tableHeight:e,routerInfo:f,fastList:_}},mounted(){this._getHomeTopCount();let a=parseInt(this.$refs["lay-row3-div"].offsetHeight)-100;this.tableHeight=a+"px",this._getHomeFast(),this._getHomeNeed(a/40)},methods:{async _getHomeTopCount(){this.topCount=await w()||[0,0,0,0]},async _getHomeFast(){let a=await L({}),o=[];a.forEach(l=>{l.FChild.forEach(e=>{e.FName.indexOf("\u5168\u90E8")==-1&&e.FName.indexOf("\u7BA1\u7406")==-1&&o.length<8&&o.push(e)})}),this.fastList=o},async _getHomeNeed(a){let o={FPageIndex:1,FPageSize:Math.floor(a)};o.FPageSize=o.FPageSize<5?5:o.FPageSize;let l=await $(o,"Task");l.Data.List=l.Data.List||[],l.Data.List.forEach(e=>{e.FAddDate=e.FAddDate==null?"":this.dateFormat(e.FAddDate),e.FState=e.FState==2?"\u5DF2\u5B8C\u6210":"\u8FDB\u884C\u4E2D"}),this.dataList=l.Data.List||[]},dateFormat(a){return a.replace("T"," ").split(".")[0]},_goToMore(a){let o="";a==-1?o="/need/all":o=this.fastList[a].FRemark,this.routerInfo.push(o)}}},R=t("div",{class:"height20"},null,-1),j={class:"home-box1"},q={class:"icon"},G={class:"desc"},J={class:"count"},K=t("label",null,"\u672A\u5B8C\u4EE3\u529E\u4E8B\u9879",-1),Q={class:"home-box1"},U={class:"icon c1"},W={class:"desc"},X={class:"count"},Y=t("label",null,"\u4ECA\u65E5\u65B0\u589E\u5F85\u529E",-1),Z={class:"home-box1"},tt={class:"icon c2"},et={class:"desc"},ot={class:"count"},st=t("label",null,"\u534F\u540C\u8DEF\u7EBF",-1),at={class:"home-box1"},nt={class:"icon c3"},lt={class:"desc"},ct={class:"count"},it=t("label",null,"\u6211\u53C2\u4E0E\u7684\u8DEF\u7EBF",-1),_t=t("div",{class:"height10"},null,-1),dt={class:"lay-row2"},ht=t("h1",null,"\u5FEB\u6377\u5165\u53E3",-1),rt=["title"],ut={class:"lay-row3"},mt={class:"lay-row3-div",ref:"lay-row3-div"},pt={class:"home-box3"},ft=t("h1",null,"\u6700\u65B0\u5F85\u529E\u4E8B\u9879",-1);function gt(a,o,l,e,f,_){const F=P,d=E,c=M,g=A,y=B,b=I,v=V,x=H;return r(),p(x,{class:"home-layout"},{default:n(()=>[s(y,null,{default:n(()=>[s(F,{fluid:"true",style:{padding:"10px"}}),R,s(g,{space:"10"},{default:n(()=>[s(c,{md:"6"},{default:n(()=>[t("div",j,[t("p",q,[s(d,{type:"layui-icon-note",size:"26px"})]),t("p",G,[t("label",J,i(e.topCount[0]),1),K])])]),_:1}),s(c,{md:"6"},{default:n(()=>[t("div",Q,[t("p",U,[s(d,{type:"layui-icon-form",size:"26px"})]),t("p",W,[t("label",X,i(e.topCount[1]),1),Y])])]),_:1}),s(c,{md:"6"},{default:n(()=>[t("div",Z,[t("p",tt,[s(d,{type:"layui-icon-slider",size:"26px"})]),t("p",et,[t("label",ot,i(e.topCount[2]),1),st])])]),_:1}),s(c,{md:"6"},{default:n(()=>[t("div",at,[t("p",nt,[s(d,{type:"layui-icon-download-circle",size:"26px"})]),t("p",lt,[t("label",ct,i(e.topCount[3]),1),it])])]),_:1})]),_:1})]),_:1}),s(y,{class:"layui-header2"},{default:n(()=>[_t,t("div",dt,[s(g,{space:"10"},{default:n(()=>[s(c,{md:"24"},{default:n(()=>[ht]),_:1}),(r(!0),D(z,null,S(e.fastList,(u,m)=>(r(),p(c,{md:"3",key:m,onClick:yt=>_._goToMore(m)},{default:n(()=>[t("div",{class:N("home-box2 c"+m),title:u.FName},i(u.FName),11,rt)]),_:2},1032,["onClick"]))),128))]),_:1})])]),_:1}),s(v,null,{default:n(()=>[t("div",ut,[t("div",mt,[t("div",pt,[t("h2",{onClick:o[0]||(o[0]=u=>_._goToMore(-1))},"\u70B9\u51FB\u67E5\u770B\u66F4\u591A\u5F85\u529E\u4E8B\u9879"),ft]),e.tableHeight!=""?(r(),p(b,{key:0,height:e.tableHeight,columns:e.dataColumn,dataSource:e.dataList},null,8,["height","columns","dataSource"])):T("",!0)],512)])]),_:1})]),_:1})}var xt=C(O,[["render",gt]]);export{xt as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
:root{--block-default-color: var(--global-checked-color);--block-border-radius: var(--global-border-radius)}.layui-quote{padding:15px;line-height:1.6;margin-bottom:10px;border-left:5px solid var(--block-default-color);border-radius:var(--block-border-radius);background-color:var(--global-neutral-color-1)}.layui-quote-nm{border-left:5px solid #eee}

@ -0,0 +1 @@
import a from"./all.aa125321.js";import{_ as n,r as p,J as e,o as m,c as i}from"./index.58a4812e.js";/* empty css *//* empty css */import"./view.a8aea462.js";/* empty css */import"./common.a907f978.js";import"./all.0c305d2b.js";import"./factory.56670aad.js";import"./materialType.20973eba.js";import"./package.a040d70a.js";/* empty css *//* empty css */const s={components:{AllData:a},setup(){return{dataInfoObj:p(2)}}};function c(o,f,l,t,_,d){const r=e("AllData");return m(),i(r,{dataInfoObj:t.dataInfoObj},null,8,["dataInfoObj"])}var C=n(s,[["render",c]]);export{C as default};

@ -0,0 +1 @@
import a from"./all.aa125321.js";import{_ as n,r as p,J as e,o as m,c}from"./index.58a4812e.js";/* empty css *//* empty css */import"./view.a8aea462.js";/* empty css */import"./common.a907f978.js";import"./all.0c305d2b.js";import"./factory.56670aad.js";import"./materialType.20973eba.js";import"./package.a040d70a.js";/* empty css *//* empty css */const s={components:{AllData:a},setup(){return{dataInfoObj:p(1)}}};function i(o,f,l,t,_,d){const r=e("AllData");return m(),c(r,{dataInfoObj:t.dataInfoObj},null,8,["dataInfoObj"])}var C=n(s,[["render",i]]);export{C as default};

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
import{_ as e}from"./index.58a4812e.js";const r={name:"log.vue"};function o(t,a,n,s,_,c){return" 111 "}var f=e(r,[["render",o]]);export{f as default};

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
.content-box[data-v-36abbda6]{height:744px;display:block;position:relative;clear:both;float:none}.edit-box[data-v-36abbda6]{display:block;width:99%;text-align:center;margin:0 auto;clear:both;float:none}.edit-info[data-v-36abbda6]{margin:20px .75% 10px 0;width:47%;padding-left:1%;padding-right:1%;display:inline-block}.edit-info+.edit-info[data-v-36abbda6]{margin-left:.75%;margin-right:0}.layui-form-item[data-v-36abbda6]{margin-bottom:16px}.content-box[data-v-045e108a]{height:400px;margin:20px 10px;display:block;position:relative;clear:both;float:none}

@ -0,0 +1 @@
import{v as n}from"./index.58a4812e.js";async function r(t){let a={};return await n.post("/api/MaterialType/GetInfoData",t||{}).then(e=>{a=e.Data}),a}async function i(t){let a=0;return await n.post("/api/MaterialType/ChangeInfoData",t).then(e=>{a=e.Data||0}),a}export{i as c,r as g};

@ -0,0 +1 @@
import{v as n}from"./index.58a4812e.js";async function i(t){let a={};return await n.post("/api/Package/GetPackageChildList",t).then(e=>{a=e}),a}async function s(t){let a=0;return await n.post("/api/Package/DeletePackageChild",{FID:t}).then(e=>{a=e.Data}),a}async function o(t){let a=0;return await n.post("/api/Package/GetPackageInfo",t).then(e=>{a=e.Data}),a}async function l(t){let a=0;return await n.post("/api/Package/UpdatePackageData",t).then(e=>{a=e.Data}),a}async function u(t){let a=0;return await n.post("/api/Package/DockMDMCode",t).then(e=>{a=e.Data}),a}async function p(t){let a=0;return await n.post("/api/Package/NoSupplyPackageChild",t).then(e=>{a=e.Data}),a}export{i as a,s as b,u as d,o as g,p as n,l as u};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
import{S as e}from"./all.0c305d2b.js";import{_ as r,r as a,J as n,o as s,c as m}from"./index.58a4812e.js";/* empty css *//* empty css */import"./view.a8aea462.js";/* empty css */import"./common.a907f978.js";import"./factory.56670aad.js";import"./materialType.20973eba.js";import"./package.a040d70a.js";/* empty css */const c={components:{AllData:e},setup(){return{pageTypeObj:a(2)}}};function i(o,l,_,t,f,u){const p=n("AllData");return s(),m(p,{pageTypeObj:t.pageTypeObj},null,8,["pageTypeObj"])}var $=r(c,[["render",i]]);export{$ as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
import{v as i}from"./index.58a4812e.js";async function r(e){e=e||{FPageIndex:1,FPageSize:10};let t={};return await i.post("/api/Teamwork/GetTeamworkPageList",e).then(a=>{t=a}),t}async function o(e){let t={FPageIndex:1,FPageSize:999,FTeamID:e},a=[];return await i.post("/api/Teamwork/GetTeamProcessList",t).then(s=>{a=s.Data.List||[]}),a}async function u(e){let t={};return await i.post("/api/Teamwork/GetTeamworkView",e).then(a=>{t=a.Data}),t}async function w(e){let t={FTeamID:e},a=[];return await i.post("/api/Teamwork/DockDownBomData",t).then(s=>{a=s}),a}async function p(e){let t=[];return await i.post("/api/Teamwork/EditTypeList",e).then(a=>{t=a}),t}async function c(e){let t={};return await i.post("/api/View/GetListByTeamId",e).then(a=>{t=a.Data}),t}async function l(e){let t={};return await i.post("/api/View/UpdateBatchById2",e).then(a=>{t=a}),t}async function m(e){let t={};return await i.post("/api/View/GetMaterialInfoListByTeamId",e).then(a=>{t=a}),t}export{p as E,m as G,c as a,o as b,r as c,w as d,u as g,l as u};

2
dist/index.html vendored

@ -119,7 +119,7 @@
}
}
</style>
<script type="module" crossorigin src="/assets/index.6f42d62f.js"></script>
<script type="module" crossorigin src="/assets/index.58a4812e.js"></script>
<link rel="stylesheet" href="/assets/index.bdb27522.css">
</head>
<body>

@ -3,8 +3,8 @@ import { layer } from '@layui/layer-vue'
const config = {
timeout: 600000,
//baseURL: "http://124.222.104.55:58178/",
baseURL: "http://localhost:58178/",
baseURL: "http://124.222.104.55:58178/",
//baseURL: "http://localhost:58178/",
// baseURL: "http://plm-pw-test.hbflavor.com:81/",
headers: {
'Content-Type': 'application/json;charset=UTF-8',

@ -113,5 +113,56 @@ export default [
meta: { title: '日志管理', icon: "" },
}
]
},
{
path: '/materia',
component: BaseLayout,
meta: { title: '物料路线' },
children: [
{
path: '/materia/all',
component: () => import('../../views/materia/all.vue'),
meta: { title: '物料记录', icon: "" },
},
{
path: '/materia/route',
component: () => import('../../views/materia/route.vue'),
meta: { title: '物料事项', icon: "" },
}
]
},
{
path: '/half',
component: BaseLayout,
meta: { title: '半成品实验号变更' },
children: [
{
path: '/half/half',
component: () => import('../../views/half/half.vue'),
meta: { title: '配方变更', icon: "" },
},
{
path: '/half/route',
component: () => import('../../views/half/route.vue'),
meta: { title: '半成品变更事项', icon: "" },
}
]
},
{
path: '/log/log',
component: BaseLayout,
meta: { title: '操作日志' },
children: [
{
path: '/log/log',
component: () => import('../../views/log/log.vue'),
meta: { title: '操作日志', icon: "" },
},
{
path: '/log/log',
component: () => import('../../views/log/log.vue'),
meta: { title: '操作日志', icon: "" },
}
]
}
]

@ -12,8 +12,8 @@
<lay-form-item label="包规" required prop="FPackCode" label-width="120" style="margin-bottom:30px;">
<lay-input v-model="dataInfo.FPackCode"></lay-input>
</lay-form-item>
<lay-form-item label="选择模式" prop="factoryValue" required label-width="120">
<lay-select v-model="factoryValue" placeholder="请选择">
<lay-form-item label="选择模式" prop="FCreateFactoryID" required label-width="120">
<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>
@ -236,7 +236,7 @@ export default {
async _getTeamData(dataId) {
let result = await getDataModel({
FID: dataId,
FKey: "FID,FTestCode,FWeightUnit,FSaleCode,FMaterialType,FMaterialGroup,FFormulaTestCode,FFormulaName,FFormulaID"
FKey: "FID,FTestCode,FWeightUnit,FSaleCode,FMaterialType,FMaterialGroup,FFormulaTestCode,FFormulaName,FFormulaID,FPackCode,FCreateFactoryID"
}, "Teamwork");
this.dataInfo = result || this.dataInfo;
},
@ -304,7 +304,7 @@ export default {
postData.FMaterialGroup = (postData.FMaterialGroup || "").trim();
postData.FWeightUnit = (postData.FWeightUnit || "").trim();
postData.FFormulaName = (postData.FFormulaName || "").trim();
postData.factoryValue=this.factoryValue;
postData.FCreateFactoryID=(postData.FCreateFactoryID==-1?"":postData.FCreateFactoryID);
for (let key in postData) {
if (postData[key] == "") return false;
}

@ -313,6 +313,8 @@
});
console.log(dataList)
this.dataList = dataList;
debugger
},
async _getTeamworkView(data, type) {
let viewType = parseInt(type == 1 ? data.seeCode : data.outCode);

@ -0,0 +1,328 @@
<template>
<lay-form :model="dataInfo" class="dataInfo">
<lay-form-item label="原配方" prop="FCreateFactoryID" 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>
<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>
<p class="note">配方号+版本号+描述</p>
</lay-form-item>
<lay-form-item v-if="dataList.length > 0">
<lay-table height="200px" :columns="dataColumn" v-model:selected-key="selectedKey" id="FID"
:dataSource="dataList" :page="dataList.length > 0 ? pageInfo : null" @change="changePage">
</lay-table>
</lay-form-item>
<lay-form-item>
<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;
margin-left: 12px;
}
.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)
}
</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";
export default {
setup() {
const dataInfo = ref({
FMaterialType: "ZMAT",
FWeightUnit: "KG"
});
const formulaList = ref([]);
const seletList = ref([
[],
[]
]);
const typeList = ref([]);
let dataColumn = [ {
title: "物料号",
key: "FName"
},
{
title: "试验号",
key: "FTestCode"
},
{
title: "物料描述",
key: "FTypeName",
width: "110px"
},
{
title: "产品分类",
key: "FVersionCode"
}
];
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);
return {
dataInfo,
formulaList,
seletList,
typeList,
dataColumn,
dataList,
pageInfo,
selectedKey,
showEditBox,
showButton,
saleList,
factoryLists,
factoryValue
}
},
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();
},
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 _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 = result.Data.List;
},
//-
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>

File diff suppressed because one or more lines are too long

@ -0,0 +1,118 @@
<template>
<lay-table style="margin:0 0 30px 0;" height="200px" :columns="dataColumn" :data-source="dataList">
<template v-slot:toolbar>
<p style="float:left;">配方视图</p>
</template>
</lay-table>
</template>
<script>
import {
ref
} from 'vue';
import {
getTeamworkView
} from "/src/api/api/teamwork";
export default {
setup() {
const viewList = ref([]);
const dataColumn = ref([
{type: 'number', title: '序号', width: '56'},
{key: '工厂', title: '工厂', align: 'center', width: '130px'},
{key: '开始生效日期', title: '开始生效日期', align: 'center', width: '130px'},
{key: 'BOM用途', title: 'BOM用途', align: 'center', width: '130px'},
{key: 'BOM状态', title: 'BOM状态', align: 'center', width: '130px'},
{key: '可选文本', title: '可选文本', align: 'center', width: '130px'},
{key: '可选BOM', title: '可选BOM', align: 'center', width: '130px'},
{key: '父项编码', title: '父项编码', align: 'center', width: '200px'},
{key: '父项描述', title: '父项描述', align: 'center', width: '300px'},
{key: '基本数量', title: '基本数量', align: 'center', width: '130px'},
{key: '基本单位', title: '基本单位', align: 'center', width: '130px'},
{key: '子项序号', title: '子项序号', align: 'center', width: '130px'},
{key: '项目类别', title: '项目类别', align: 'center', width: '130px'},
{key: '子项编码', title: '子项编码', align: 'center', width: '200px'},
{key: '子件描述', title: '子件描述', align: 'center', width: '300px'},
{key: '组件数量', title: '组件数量', align: 'center', width: '130px'},
{key: '计量单位', title: '计量单位', align: 'center', width: '130px'},
{key: '工程变更号', title: '工程变更号', align: 'center', width: '130px'},
{key: '项目ID', title: '项目ID', align: 'center', width: '130px'},
{key: '物料供应标识符', title: '物料供应标识符', align: 'center', width: '130px'},
{key: '备件标示', title: '备件标示', align: 'center', width: '130px'},
{key: '生产仓储地点', title: '生产仓储地点', align: 'center', width: '130px'},
{key: '组件损耗率', title: '组件损耗率', align: 'center', width: '130px'},
{key: '成本核算标识相关', title: '成本核算标识相关', align: 'center', width: '130px'},
{key: '生产相关', title: '生产相关', align: 'center', width: '130px'},
{key: 'BOM项目文本1', title: 'BOM项目文本1', align: 'center', width: '130px'},
{key: 'BOM项目文本2', title: 'BOM项目文本2', align: 'center', width: '130px'},
{key: '替代项目组', title: '替代项目组', align: 'center', width: '130px'},
{key: '优先级', title: '优先级', align: 'center', width: '130px'},
{key: '策略', title: '策略', align: 'center', width: '130px'},
{key: '使用可能性', title: '使用可能性', align: 'center', width: '130px'},
{key: '固定损耗数量', title: '固定损耗数量', align: 'center', width: '130px'}
]);
const dataList = ref([]);
return {
viewList,
dataColumn,
dataList
}
},
props: {
teamId: {
type: String,
default: () => ""
},
halfId: {
type: String,
default: () => ""
}
},
mounted() {
this.initPage();
},
methods: {
async initPage() {
let dataColumn = [{
type: "number",
title: "序号",
width: "56"
}];
let dataList = [];
let postData = {
FTeamID: this.teamId,
FViewType: 2,
FType: 1,
HalfId : this.halfId
};
let result = await getTeamworkView(postData);
let formulaList = result["List1"]
if (formulaList) {
for (let key in formulaList[0]) {
let width = (key.indexOf("描述") != -1 || key == "文本" || key == "物料") ? "300px" :
"130px";
width = key.indexOf("编码") != -1 ? "200px" : width;
dataColumn.push({
key: key,
title: key.split('.').pop(),
align: "center",
width: width
});
}
formulaList.forEach((item) => {
dataList.push(item);
});
}
// this.dataColumn = dataColumn;
this.dataList = dataList;
}
}
}
</script>

@ -0,0 +1,78 @@
<template>
<lay-container>
<view class="layui-item33 color999" :style="'max-height:900px'">
<lay-row space="10">
<lay-col md="4" sm="12" xs="24" v-for="(item, index) in columns">
<lay-checkbox-group v-model="checkedItem">
<lay-checkbox :name="item.title" skin="primary" :value="item.key">
{{ item.title }}
</lay-checkbox>
</lay-checkbox-group>
</lay-col>
</lay-row>
</view>
<view class="menuBtn">
<lay-button type="primary" @click="submitClick"></lay-button>
<lay-button @click="cancelClick"></lay-button>
</view>
</lay-container>
</template>
<script>
import {
ref
} from 'vue';
export default {
setup() {
const columnList = ref([]);
const checkedItem = ref([]);
return {
columnList,
checkedItem,
}
},
props: {
columns: {
type: Object,
default: () => [],
},
freezingColumns: {
type: Object,
default: () => [],
}
},
mounted() {
this.initPage();
},
methods: {
initPage() {
this.columnList = this.columns;
this.checkedItem = this.freezingColumns.concat();
},
cancelClick() {
this.$emit('cancelClick', this.freezingColumns);
},
submitClick() {
this.$emit('cancelClick', this.checkedItem);
}
}
}
</script>
<style scoped>
.layui-item33 {
width: 90%;
padding-right: 30px;
margin: 30px auto 10px;
display: block;
overflow: auto;
position: relative;
clear: both;
}
.menuBtn {
display: block;
text-align: center;
width: 96%;
margin: 20px auto;
}
</style>

@ -0,0 +1,85 @@
<template>
<lay-table class="empty-small2 empty-small3" style="margin:30px 0;" height="200px" :columns="dataColumn" id="FID"
:dataSource="dataList">
<template v-slot:toolbar>
<p style="float:right;">操作日志</p>
<lay-button size="sm" @click="_getPageList()"></lay-button>
</template>
</lay-table>
</template>
<script>
import {
ref
} from 'vue';
import {
getPageList
} from "/src/api/api/common";
export default {
setup() {
let dataColumn = [{
title: "序号",
key: "RowIndex",
width: "80px"
},
{
title: "操作时间",
key: "FAddDate",
width: "200px"
},
{
title: "操作人",
key: "FOptUser",
width: "180px",
align: 'center'
},
{
title: "说明",
key: "FDesc"
}
];
dataColumn.forEach((item) => {
item.align = "center";
});
const dataList = ref([]);
return {
dataColumn,
dataList
}
},
props: {
dataInfoObj: {
type: Object,
default: () => {},
}
},
mounted() {
setTimeout((item) => {
this._getPageList();
}, 100);
},
methods: {
cancelClick(isRefresh) {
this.$emit('cancelClick', isRefresh !== undefined ? isRefresh : false);
},
//
dateFormat(dataStr) {
return dataStr.replace('T', ' ').split('.')[0];
},
async _getPageList() {
if (this.dataInfoObj.FTeamID) {
let postObj = {
FTeamID: this.dataInfoObj.FTeamID,
FType: this.dataInfoObj.FType,
FPageSize: 99999
};
let result = await getPageList(postObj, 'OperateLog');
this.dataList = result.Data.List || [];
this.dataList.forEach(item => {
item.FAddDate = item.FAddDate == null ? "" : this.dateFormat(item.FAddDate);
});
}
}
}
}
</script>

@ -0,0 +1,264 @@
<template>
<div class="box-data">
<lay-scroll height="800px">
<lay-quote>配方变更详情</lay-quote>
<lay-container class="dataInfo">
<lay-row space="10">
<lay-col md="6"><div class="grid-demo" style="text-align: right;">原配方</div></lay-col>
<lay-col md="18"><div class="grid-demo" style="text-align: left;">配方号+版本号+描述</div></lay-col>
<lay-col md="6"><div class="grid-demo" style="text-align: right;">变更后的配方</div></lay-col>
<lay-col md="18"><div class="grid-demo" style="text-align: left;">配方号+版本号+描述</div></lay-col>
</lay-row>
</lay-container>
<lay-quote v-if="dataList.length>0"></lay-quote>
<lay-container class="tableInfo" v-if="dataList.length>0">
<lay-table :columns="dataColumn" :dataSource="dataList">
<template v-slot:operator="{ data }">
<lay-button v-if="data.seeCode!=''" size="xs" type="primary" @click="_getTeamworkView(data,1)">
查看
</lay-button>
<lay-button v-if="data.outCode!=''" size="xs" type="primary" @click="_getTeamworkView(data,2)">
导出
</lay-button>
</template>
</lay-table>
</lay-container>
</lay-scroll>
<lay-layer area="90%" v-model="showEditBox" title="视图查看">
<ShowView :viewList="viewList" :viewHeight="viewHeight" @cancelClick="cancelClick"></ShowView>
</lay-layer>
</div>
</template>
<style scoped>
.box-data {
margin: 10px auto;
display: block;
}
.dataInfo {
max-width: 960px;
margin: 14px auto 20px;
overflow: hidden;
clear: both;
float: none;
}
.pro-item.state1 {
background-color: rgb(50, 189, 182, 0.9);
background-image: url('../../../assets/state1.png');
box-shadow: 4px 4px 4px rgb(50, 189, 182, 0.4);
}
.pro-item.state2 {
background-color: rgb(22, 138, 221, 0.9);
background-image: url('../../../assets/state2.png');
box-shadow: 4px 4px 4px rgb(22, 138, 221, 0.4);
}
.pro-item.none {
float: none !important;
display: block !important;
margin-left: auto;
margin-right: auto;
overflow: hidden;
}
.pro-item.none .left {
margin-top: 11px;
}
.pro-item {
background: rgb(187, 187, 187, 0.9) url('../../../assets/state0.png') no-repeat left top;
-webkit-border-radius: 6px;
-ms-border-radius: 6px;
-o-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
width: 48%;
margin: 10px 1%;
padding: 16px 5px;
box-shadow: 4px 4px 4px rgb(187, 187, 187, 0.4);
}
.pro-item .left {
width: 34%;
display: block;
text-align: center;
float: left;
margin-top: 13px;
margin-bottom: 5px;
}
.pro-item .left.margin {
margin-top: 6px;
margin-bottom: 0;
}
.pro-item .left.margin .group {
margin: 6px auto 2px;
}
.pro-item .left .num {
-webkit-border-radius: 32px;
-ms-border-radius: 32px;
-o-border-radius: 32px;
-moz-border-radius: 32px;
border-radius: 32px;
display: block;
line-height: 32px;
font-size: 22px;
width: 32px;
border: 1px solid #222;
margin: 0 auto;
}
.pro-item .left .group {
font-weight: 500;
line-height: 22px;
margin: 10px auto 8px;
font-size: 16px;
max-width: 100px;
display: block;
overflow: hidden;
}
.pro-item .right {
width: 63%;
display: inline-block;
line-height: 22px;
}
.pro-item .right p {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis
}
.pro-next {
display: block;
background: url('../../../assets/state-next.jpg') no-repeat center;
height: 30px;
margin: 10px auto;
}
.tableInfo {
max-width: 96%;
margin: 20px auto;
overflow: hidden;
clear: both;
float: none;
}
</style>
<script>
import {
ref,
watch
} from 'vue';
import {
getTeamProcessList,
getTeamworkView
} from "/src/api/api/teamwork";
import {
getBasicRoleList
} from "/src/api/api/user";
import ShowView from './ShowView.vue';
export default {
components: {
ShowView
},
setup() {
const dataList = ref([]);
let dataColumn = [{
title: "视图",
key: "name",
},
{
title: "操作",
key: "operator",
width: "148px",
customSlot: "operator",
align: "center"
}
];
const dataProcess = ref({});
//
const viewTypeCount = ref(5);
const showEditBox = ref(false);
const viewList = ref([]);
const viewHeight = ref(500);
return {
dataList,
dataColumn,
dataProcess,
viewTypeCount,
showEditBox,
viewList,
viewHeight
}
},
props: {
dataInfoObj: {
type: Object,
default: () => {},
}
},
mounted() {
this._getViewList();
},
methods: {
//
async _getViewList() {
this.dataList = [{"name":"新物料视图","seeCode":"1","outCode":"6"},{"name":"受影响的物料视图","seeCode":"5","outCode":"10"},{"name":"配方视图","seeCode":"5","outCode":"10"}];
},
async _getTeamworkView(data, type) {
let viewType = parseInt(type == 1 ? data.seeCode : data.outCode);
if (type == 2) viewType = viewType - this.viewTypeCount;
let postData = {
FTeamID: this.dataInfoObj.FID,
FViewType: viewType,
FType: type,
HalfId : this.dataInfoObj.FMaterialHalfIDs
};
if (this.dataInfoObj.FProgress == "100" || this.dataInfoObj.FProgress == "100%") {
postData.FFinish = 1;
}
let idx = layer.load(2);
let result = await getTeamworkView(postData);
layer.close(idx);
if (type == 1) {
let list = [];
let count = 0;
for (let key in result) {
list.push(result[key]);
count += result[key].length;
};
if (count == 0) {
layer.msg("请稍等,视图信息还在编辑中", {
time: 2000,
icon: 3
});
} else {
this.viewList = list;
this.viewHeight = Math.ceil(this.dataInfoObj.FHeight * 0.6);
this.showEditBox = true;
}
} else {
window.open(result);
}
},
//
dateFormat(dataStr) {
if (dataStr == null || dataStr == "") return "";
return dataStr.replace('T', ' ').split('.')[0];
},
cancelClick(isFirst) {
this.$emit('cancelClick', isFirst ? isFirst : false);
}
}
}
</script>

@ -0,0 +1,95 @@
<template>
<lay-container fluid="true" class="content-box">
<lay-table v-if="dataColumn.length>0" :height="viewHeight+'px'" :columns="dataColumn" :data-source="dataList"
:row-style="rowStyle">
</lay-table>
</lay-container>
</template>
<style scoped>
.content-box {
margin: 30px 10px;
display: block;
position: relative;
clear: both;
float: none;
}
</style>
<script>
import {
ref
} from 'vue';
export default {
setup() {
const dataColumn = ref([]);
const dataList = ref([]);
const dataColor = ref([]);
let colors = ["1E9FFF", "009688", "393D49", "5FB878"];
const rowStyle = function(row, rowIndex) {
let color = "";
for (let idx = 0; idx < dataColor.value.length; idx++) {
if (rowIndex > dataColor.value[idx]) color = "color:#" + colors[idx];
}
return color;
}
return {
dataColumn,
dataList,
dataColor,
rowStyle,
}
},
props: {
viewList: {
type: Object,
default: () => [],
},
viewHeight: {
type: Number,
default: () => 600,
}
},
mounted() {
this.initPage();
},
methods: {
initPage() {
let dataColumn = [{
type: "number",
title: "序号",
width: "56"
}];
let dataList = [];
let dataColor = []
this.viewList.forEach((item) => {
if (item.length > 0) {
if (dataColumn.length == 1) {
for (let key in item[0]) {
let width = (key.indexOf("描述") != -1 || key == "文本" || key == "物料") ? "300px" :
"130px";
width = key.indexOf("编码") != -1 ? "200px" : width;
dataColumn.push({
key: key,
title: key.split('.').pop(),
align: "center",
width: width
});
}
}
item.forEach((item2) => {
dataList.push(item2);
});
dataColor.push(dataList.length - 1);
}
});
this.dataColumn = dataColumn;
this.dataList = dataList;
this.dataColor = dataColor
},
cancelClick() {
this.$emit('cancelClick', false);
}
}
}
</script>

@ -0,0 +1,333 @@
<template>
<lay-container fluid="true"
:style="'padding:10px;height:'+(dataInfoObj!=undefined?(dataInfoObj.FHeight+'px'):'auto')">
<lay-row space="10">
<lay-col span="24">
<lay-card>
<lay-form :model="searchObj" class="search-box">
<lay-row class="search-items">
<lay-form-item label="物料号" prop="FSaleCode">
<lay-input v-model="searchObj.FSaleCode"></lay-input>
</lay-form-item>
<lay-form-item label="类型" prop="FType">
<lay-select v-model="searchObj.FType">
<lay-select-option v-for="(tIdv,tIdx) in typeList" :key="tIdx" :value="tIdv.FValue"
:label="tIdv.FName"></lay-select-option>
</lay-select>
</lay-form-item>
<lay-form-item v-if="postData.FState!=99" label="事项状态" prop="FState">
<lay-select v-model="searchObj.FState">
<lay-select-option v-for="(tv,tx) in stateList" :key="tx" :value="tv.id"
:label="tv.name"></lay-select-option>
</lay-select>
</lay-form-item>
<lay-form-item label="发起日期" prop="FDateRange">
<lay-date-picker v-model="searchObj.FDateRange" range placeholder="type : date">
</lay-date-picker>
</lay-form-item>
</lay-row>
<lay-form-item class="search-btn">
<lay-button size="sm" type="primary" @click="_clickSearch"></lay-button>
<lay-button size="sm" @click="_clickReset"></lay-button>
</lay-form-item>
</lay-form>
<lay-table v-if="hasLoaded" :columns="dataColumn" id="id" :dataSource="dataList"
v-model:selectedKeys="selectedKeys" :checkbox="checkbox" :default-toolbar="defaultToolbar"
:page="dataList.length>0?pageInfo:null" @change="changePage">
<template v-slot:toolbar>
<lay-button size="sm" @click="_getPageList(false,true)"></lay-button>
<lay-button size="sm" type="primary" @click="showEditMaterial(2)"></lay-button>
</template>
<template v-slot:FStateName="{ data }">
<span v-if="data.FStateName=='已完成'" style="color:#5FB878">{{ data.FStateName }}</span>
<span v-else style="color:#1E9FFF">{{ data.FStateName }}</span>
</template>
<template v-if="dataInfoObj == undefined|| !dataInfoObj.FID" v-slot:operator="{ data }">
<lay-button size="xs" type="primary" @click="showEditMaterial(3)"></lay-button>
</template>
</lay-table>
</lay-card>
</lay-col>
</lay-row>
<lay-layer :area="modelArea[2]" v-model="showEditBox[2]" title="配方变更">
<EditMateria v-if="showEditBox[2]" :dataInfoObj="objInfoObj" @cancelClick="cancelClick"></EditMateria>
</lay-layer>
<lay-layer :area="modelArea[3]" v-model="showEditBox[3]" title="配方变更详情">
<ShowData1 v-if="showEditBox[3]" :dataInfoObj="objInfoObj" @cancelClick="cancelClick"></ShowData1>
</lay-layer>
</lay-container>
</template>
<script>
import {
ref,
watch
} from "vue";
import {
getBasicList,
getPageList
} from "/src/api/api/common";
import ShowData1 from '../half/components/ShowData1.vue';
import EditMateria from '../half/components/EditMateria.vue';
import EditView from '../half/components/EditView.vue';
import '@layui/layui-vue/es/checkbox/index.css';
import '@layui/layui-vue/es/radio/index.css';
export default {
components: {
EditMateria,
EditView,
ShowData1
},
setup() {
let dataColumn = [
{
title: "序号",
key: "FID",
width: "160px",
align: 'center',
hide: false
},{
title: "原实验号",
key: "FMdmCode",
width: "300px",
align: 'center',
hide: false
},
{
title: "原版本号",
key: "FSaleCode",
width: "160px",
align: 'center',
hide: false
},
{
title: "新实验号",
key: "FTestCode",
width: "160px",
align: 'center',
hide: false
},
{
title: "新版本号",
key: "FDesc",
width: "400px",
align: 'center'
},
{
title: "产品分类",
key: "FDesc",
width: "400px",
align: 'center'
},
{
title: "发起时间",
key: "FAddDate",
width: "180px",
align: 'center'
},
{
title: "发起人",
key: "FUserName",
width: "178px",
align: 'center'
},
{
title: "操作",
key: "operator",
width: "130px",
fixed: "right",
customSlot: 'operator',
align: 'center'
}
];
const selectedKeys = ref(["1"]);
const checkbox = ref(false);
const defaultToolbar = ref(true);
const pageInfo = ref({
total: 0,
limit: 10,
current: 1
});
const dataList = ref([]);
const typeList = ref([]);
const searchObj = ref({});
const postData = ref({});
const MaterialModel= ref({});
const showEditBox = ref([false, false, false, false, false, false, false, false, false, false, false, false,false]);
const modelArea = ref(["70%", "70%", "70%", "86%", "70%", "70%", "70%", "70%", "700px", "70%", "70%","70%","70%"]);
const objInfoObj = ref({});
const editType = ref(1);
const stateList = ref([{
id: 1,
name: "进行中"
}, {
id: 2,
name: "已完成"
}]);
const hasLoaded = ref(false);
const dataItem=ref([]);
return {
selectedKeys,
checkbox,
defaultToolbar,
dataColumn,
dataList,
pageInfo,
searchObj,
postData,
typeList,
showEditBox,
modelArea,
objInfoObj,
editType,
stateList,
hasLoaded,
MaterialModel,
dataItem
};
},
props: {
dataInfoObj: {
type: Object,
default: () => {},
},
pageTypeObj: {
type: Number,
default: () => 1,
}
},
mounted() {
if (this.dataInfoObj) {
this.dataColumn.pop();
this.dataColumn[0].hide = true;
this.dataColumn[1].hide = true;
this.dataColumn[2].hide = true;
this.dataColumn[7].hide = false;
}
this._getTypeList();
this._getPageList(true);
},
methods: {
changePage(obj) {
this.pageInfo.current = obj.current;
this.pageInfo.limit = obj.limit;
this._getPageList();
},
cancelClick(isRefresh, onlyRefresh) {
if (isRefresh) {
this._getPageList(true);
}
if (onlyRefresh) return false;
for (let i = 0; i < this.showEditBox.length; i++) {
this.showEditBox[i] = false;
}
},
async _getTypeList() {
this.typeList = await getBasicList(33) || [];
},
//
async _getPageList(isFirst, showOk) {
//this.dataList = [];
this.pageInfo.total = 0;
if (isFirst) {
this.pageInfo.current = 1;
this.pageInfo.total = 0;
}
if (this.dataInfoObj && this.dataInfoObj.FID) {
this.postData.FTeamID = this.dataInfoObj.FID;
this.postData.FIsUser = false;
}
if (this.pageTypeObj && this.pageTypeObj == 2) {
this.postData.FState = 99;
}
this.postData.FPageIndex = this.pageInfo.current;
this.postData.FPageSize = this.pageInfo.limit;
let result = await getPageList(this.postData, "Task");
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 ? "" : type.FName;
let state = this.stateList.find(s => s.id === item.FState)
item.FStateName = state == null ? "" : state.name;
item.FAddDate = item.FAddDate == null ? "" : this.dateFormat(item.FAddDate);
item.FEditDate = item.FEditDate == null ? "" : this.dateFormat(item.FEditDate);
item.FFinishDate = item.FFinishDate == null ? "" : this.dateFormat(item.FFinishDate);
item["IsEdit"]=Math.floor(Math.random()*10)==0?"编辑":"新增";
});
this.pageInfo.total = result.Data.Total || 0;
debugger
this.dataList = result.Data.List;
this.hasLoaded = true;
},
//
dateFormat(dataStr) {
return dataStr.replace('T', ' ').split('.')[0];
},
getData(data){
this.MaterialModel = data;
for (let i = 0; i < this.showEditBox.length; i++) {
this.showEditBox[i] = false;
}
this.showEditBox[11] = true;
this.editType = 1;
},
showEditMaterial(i){
this.showEditBox[i] = true;
},
_clickSetInfo(data, type) {
for (let i = 0; i < this.showEditBox.length; i++) {
this.showEditBox[i] = false;
}
if (data.FType == 1) {
data.FBoxType = 1; //
} else if (data.FType == 2) {
data.FBoxType = 2; //BOM
} else if (data.FType == 9 || data.FType == 10) {
data.FBoxType = 4; //
} else if ((data.FType >= 3 && data.FType <= 7) || data.FType == 11) {
data.FBoxType = 3; //
} else if (data.FType == 8) {
data.FBoxType = 5; //
} else if (data.FType == 12) {
data.FBoxType = 6; //
} else if (data.FType == 13) {
data.FBoxType = 7; //
} else if (data.FType == 14) {
data.FBoxType = 8; //
} else if (data.FType == 15) {
data.FBoxType = 9; //
}else if(data.FType==16){
this.dataItem=data;
data.FBoxType = 10; //
}else {
return layer.msg("未知事项类型");
}
this.objInfoObj = data;
this.editType = type;
this.showEditBox[data.FBoxType] = true;
},
//-
_clickSearch() {
this.postData = {};
for (let key in this.searchObj) {
let val = this.searchObj[key];
if (val != null && val !== "") this.postData[key] = val;
}
this._getPageList(true);
},
//-
_clickReset() {
this.searchObj = {};
this._clickSearch();
}
}
}
</script>

@ -0,0 +1,341 @@
<template>
<lay-container fluid="true"
:style="'padding:10px;height:'+(dataInfoObj!=undefined?(dataInfoObj.FHeight+'px'):'auto')">
<lay-row space="10">
<lay-col span="24">
<lay-card>
<lay-form :model="searchObj" class="search-box">
<lay-row class="search-items">
<lay-form-item label="物料号" prop="FSaleCode">
<lay-input v-model="searchObj.FSaleCode"></lay-input>
</lay-form-item>
<lay-form-item label="当前流程" prop="FType">
<lay-select v-model="searchObj.FType">
<lay-select-option v-for="(tIdv,tIdx) in typeList" :key="tIdx" :value="tIdv.FValue"
:label="tIdv.FName"></lay-select-option>
</lay-select>
</lay-form-item>
<lay-form-item v-if="postData.FState!=99" label="事项状态" prop="FState">
<lay-select v-model="searchObj.FState">
<lay-select-option v-for="(tv,tx) in stateList" :key="tx" :value="tv.id"
:label="tv.name"></lay-select-option>
</lay-select>
</lay-form-item>
<lay-form-item label="发起日期" prop="FDateRange">
<lay-date-picker v-model="searchObj.FDateRange" range placeholder="type : date">
</lay-date-picker>
</lay-form-item>
</lay-row>
<lay-form-item class="search-btn">
<lay-button size="sm" type="primary" @click="_clickSearch"></lay-button>
<lay-button size="sm" @click="_clickReset"></lay-button>
</lay-form-item>
</lay-form>
<lay-table v-if="hasLoaded" :columns="dataColumn" id="id" :dataSource="dataList"
v-model:selectedKeys="selectedKeys" :checkbox="checkbox" :default-toolbar="defaultToolbar"
:page="dataList.length>0?pageInfo:null" @change="changePage">
<template v-slot:toolbar>
<lay-button size="sm" @click="_getPageList(false,true)"></lay-button>
<lay-button size="sm" type="normal" style="float:right" @click="showEditMaterial(1)"></lay-button>
</template>
<template v-slot:FStateName="{ data }">
<span v-if="data.FStateName=='已完成'" style="color:#5FB878">{{ data.FStateName }}</span>
<span v-else style="color:#1E9FFF">{{ data.FStateName }}</span>
</template>
<template v-if="dataInfoObj == undefined|| !dataInfoObj.FID" v-slot:operator="{ data }">
<lay-button size="xs" type="primary" @click="showEditMaterial(3)"></lay-button>
</template>
</lay-table>
</lay-card>
</lay-col>
</lay-row>
<lay-layer :area="modelArea[2]" v-model="showEditBox[2]" :title="编辑物料">
<EditMateria v-if="showEditBox[2]" :dataInfoObj="objInfoObj" @cancelClick="cancelClick"></EditMateria>
</lay-layer>
<lay-layer :area="modelArea[3]" v-model="showEditBox[3]" :title="物料视图">
<EditView v-if="showEditBox[3]" :dataInfoObj="objInfoObj" @cancelClick="cancelClick"></EditView>
</lay-layer>
</lay-container>
</template>
<script>
import {
ref,
watch
} from "vue";
import {
getBasicList,
getPageList
} from "/src/api/api/common";
import EditMateria from '../half/components/EditMateria.vue';
import EditView from '../half/components/EditView.vue';
import '@layui/layui-vue/es/checkbox/index.css';
import '@layui/layui-vue/es/radio/index.css';
export default {
components: {
EditMateria,
EditView
},
setup() {
let dataColumn = [
{
title: "序号",
key: "FID",
width: "160px",
align: 'center',
hide: false
},{
title: "新实验号",
key: "FMdmCode",
width: "300px",
align: 'center',
hide: false
},
{
title: "新版本号",
key: "FSaleCode",
width: "160px",
align: 'center',
hide: false
},
{
title: "事项",
key: "FTestCode",
width: "160px",
align: 'center',
hide: false
},
{
title: "产品分类",
key: "FDesc",
width: "400px",
align: 'center'
},
{
title: "发起时间",
key: "FAddDate",
width: "180px",
align: 'center'
},
{
title: "发起人",
key: "FUserName",
width: "178px",
align: 'center'
},
{
title: "负责人",
key: "IsEdit",
width: "98px",
align: 'center',
customSlot: '',
},
{
title: "操作",
key: "operator",
width: "130px",
fixed: "right",
customSlot: 'operator',
align: 'center'
}
];
const selectedKeys = ref(["1"]);
const checkbox = ref(false);
const defaultToolbar = ref(true);
const pageInfo = ref({
total: 0,
limit: 10,
current: 1
});
const dataList = ref([]);
const typeList = ref([]);
const searchObj = ref({});
const postData = ref({});
const MaterialModel= ref({});
const showEditBox = ref([false, false, false, false, false, false, false, false, false, false, false, false,false]);
const modelArea = ref(["70%", "70%", "70%", "86%", "70%", "70%", "70%", "70%", "700px", "70%", "70%","70%","70%"]);
const objInfoObj = ref({});
const editType = ref(1);
const stateList = ref([{
id: 1,
name: "进行中"
}, {
id: 2,
name: "已完成"
}]);
const hasLoaded = ref(false);
const dataItem=ref([]);
return {
selectedKeys,
checkbox,
defaultToolbar,
dataColumn,
dataList,
pageInfo,
searchObj,
postData,
typeList,
showEditBox,
modelArea,
objInfoObj,
editType,
stateList,
hasLoaded,
MaterialModel,
dataItem
};
},
props: {
dataInfoObj: {
type: Object,
default: () => {},
},
pageTypeObj: {
type: Number,
default: () => 1,
}
},
mounted() {
if (this.dataInfoObj) {
this.dataColumn.pop();
this.dataColumn[0].hide = true;
this.dataColumn[1].hide = true;
this.dataColumn[2].hide = true;
this.dataColumn[7].hide = false;
}
this._getTypeList();
this._getPageList(true);
},
methods: {
changePage(obj) {
this.pageInfo.current = obj.current;
this.pageInfo.limit = obj.limit;
this._getPageList();
},
cancelClick(isRefresh, onlyRefresh) {
if (isRefresh) {
this._getPageList(true);
}
if (onlyRefresh) return false;
for (let i = 0; i < this.showEditBox.length; i++) {
this.showEditBox[i] = false;
}
},
async _getTypeList() {
this.typeList = await getBasicList(33) || [];
},
//
async _getPageList(isFirst, showOk) {
//this.dataList = [];
this.pageInfo.total = 0;
if (isFirst) {
this.pageInfo.current = 1;
this.pageInfo.total = 0;
}
if (this.dataInfoObj && this.dataInfoObj.FID) {
this.postData.FTeamID = this.dataInfoObj.FID;
this.postData.FIsUser = false;
}
if (this.pageTypeObj && this.pageTypeObj == 2) {
this.postData.FState = 99;
}
this.postData.FPageIndex = this.pageInfo.current;
this.postData.FPageSize = this.pageInfo.limit;
let result = await getPageList(this.postData, "Task");
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 ? "" : type.FName;
let state = this.stateList.find(s => s.id === item.FState)
item.FStateName = state == null ? "" : state.name;
item.FAddDate = item.FAddDate == null ? "" : this.dateFormat(item.FAddDate);
item.FEditDate = item.FEditDate == null ? "" : this.dateFormat(item.FEditDate);
item.FFinishDate = item.FFinishDate == null ? "" : this.dateFormat(item.FFinishDate);
});
this.pageInfo.total = result.Data.Total || 0;
debugger
this.dataList = [{"FSaleCode":"销售号测试","FTestCode":"KXFXG23030701",
"FMdmCode":"1681355682","FFormulaName":"改名字了/2+KXFXG23030701+1.0000",
"FViewType":2,"FUserName":"陈凯_TEST、陈超_TEST、林家亮、叶宏、施发权、张建财",
"FMaterialHalfIDs":"","FID":789,"FTeamID":216,"FType":1,"FName":"配方选择",
"FDesc":"没有合适配方,等待新配方选择","FFactoryID":-1,"FUserID":"2,4,8,9,11,12",
"FState":1,"FCanEdit":1,"FAddDate":"2023-04-13 11:14:42","FEditUser":2,"FEditDate":"2023-04-13 11:14:42","FFinishDate":"","FTypeName":"","FStateName":"进行中"},
{"FSaleCode":"C555","FTestCode":"HBFSY23030701","FMdmCode":"1681323910","FFormulaName":"测试/test+HBFSY23030701+1.0000",
"FViewType":1,"FUserName":"陈凯_TEST、陈超_TEST、林家亮、叶宏、宋佰昱、施发权、张建财","FMaterialHalfIDs":"67951","FID":788,
"FTeamID":215,"FType":15,"FName":"物料分类","FDesc":"物料分类选择","FFactoryID":-1,"FUserID":"2,4,8,9,10,11,12","FState":1,
"FCanEdit":1,"FAddDate":"2023-04-13 02:25:10","FEditUser":2,"FEditDate":"2023-04-13 02:25:10","FFinishDate":"","FTypeName":"","FStateName":"进行中"}];
this.hasLoaded = true;
},
//
dateFormat(dataStr) {
return dataStr.replace('T', ' ').split('.')[0];
},
getData(data){
this.MaterialModel = data;
for (let i = 0; i < this.showEditBox.length; i++) {
this.showEditBox[i] = false;
}
this.showEditBox[11] = true;
this.editType = 1;
},
showEditMaterial(i){
this.showEditBox[i] = true;
},
_clickSetInfo(data, type) {
for (let i = 0; i < this.showEditBox.length; i++) {
this.showEditBox[i] = false;
}
if (data.FType == 1) {
data.FBoxType = 1; //
} else if (data.FType == 2) {
data.FBoxType = 2; //BOM
} else if (data.FType == 9 || data.FType == 10) {
data.FBoxType = 4; //
} else if ((data.FType >= 3 && data.FType <= 7) || data.FType == 11) {
data.FBoxType = 3; //
} else if (data.FType == 8) {
data.FBoxType = 5; //
} else if (data.FType == 12) {
data.FBoxType = 6; //
} else if (data.FType == 13) {
data.FBoxType = 7; //
} else if (data.FType == 14) {
data.FBoxType = 8; //
} else if (data.FType == 15) {
data.FBoxType = 9; //
}else if(data.FType==16){
this.dataItem=data;
data.FBoxType = 10; //
}else {
return layer.msg("未知事项类型");
}
this.objInfoObj = data;
this.editType = type;
this.showEditBox[data.FBoxType] = true;
},
//-
_clickSearch() {
this.postData = {};
for (let key in this.searchObj) {
let val = this.searchObj[key];
if (val != null && val !== "") this.postData[key] = val;
}
this._getPageList(true);
},
//-
_clickReset() {
this.searchObj = {};
this._clickSearch();
}
}
}
</script>

@ -0,0 +1,325 @@
<template>
<lay-container fluid="true"
:style="'padding:10px;height:'+(dataInfoObj!=undefined?(dataInfoObj.FHeight+'px'):'auto')">
<lay-row space="10">
<lay-col span="24">
<lay-card>
<lay-form :model="searchObj" class="search-box">
<lay-row class="search-items">
<lay-form-item label="物料号" prop="FSaleCode">
<lay-input v-model="searchObj.FSaleCode"></lay-input>
</lay-form-item>
<lay-form-item label="类型" prop="FType">
<lay-select v-model="searchObj.FType">
<lay-select-option v-for="(tIdv,tIdx) in typeList" :key="tIdx" :value="tIdv.FValue"
:label="tIdv.FName"></lay-select-option>
</lay-select>
</lay-form-item>
<lay-form-item v-if="postData.FState!=99" label="模块" prop="FState">
<lay-select v-model="searchObj.FState">
<lay-select-option v-for="(tv,tx) in stateList" :key="tx" :value="tv.id"
:label="tv.name"></lay-select-option>
</lay-select>
</lay-form-item>
<lay-form-item label="发起日期" prop="FDateRange">
<lay-date-picker v-model="searchObj.FDateRange" range placeholder="type : date">
</lay-date-picker>
</lay-form-item>
</lay-row>
<lay-form-item class="search-btn">
<lay-button size="sm" type="primary" @click="_clickSearch"></lay-button>
<lay-button size="sm" @click="_clickReset"></lay-button>
</lay-form-item>
</lay-form>
<lay-table v-if="hasLoaded" :columns="dataColumn" id="id" :dataSource="dataList"
v-model:selectedKeys="selectedKeys" :checkbox="checkbox" :default-toolbar="defaultToolbar"
:page="dataList.length>0?pageInfo:null" @change="changePage">
<template v-slot:toolbar>
<lay-button size="sm" @click="_getPageList(false,true)"></lay-button>
<lay-button size="sm" type="normal" @click="showEditMaterial(1)"></lay-button>
</template>
<template v-slot:FStateName="{ data }">
<span v-if="data.FStateName=='已完成'" style="color:#5FB878">{{ data.FStateName }}</span>
<span v-else style="color:#1E9FFF">{{ data.FStateName }}</span>
</template>
<template v-if="dataInfoObj == undefined|| !dataInfoObj.FID" v-slot:operator="{ data }">
<lay-button size="xs" type="primary" @click="showEditMaterial(3)"></lay-button>
</template>
</lay-table>
</lay-card>
</lay-col>
</lay-row>
<lay-layer :area="modelArea[1]" v-model="showEditBox[1]" title="新增物料">
<AddMateria v-if="showEditBox[1]" :dataInfoObj="objInfoObj" @cancelClick="cancelClick"></AddMateria>
</lay-layer>
<lay-layer :area="modelArea[2]" v-model="showEditBox[2]" title="修改物料">
<EditMateria v-if="showEditBox[2]" :dataInfoObj="objInfoObj" @cancelClick="cancelClick"></EditMateria>
</lay-layer>
<lay-layer :area="modelArea[3]" v-model="showEditBox[3]" title="编辑物料">
<EditView v-if="showEditBox[3]" :dataInfoObj="objInfoObj" @cancelClick="cancelClick"></EditView>
</lay-layer>
</lay-container>
</template>
<script>
import {
ref,
watch
} from "vue";
import {
getBasicList,
getPageList
} from "/src/api/api/common";
import AddMateria from '../materia/components/AddMateria.vue';
import EditMateria from '../materia/components/EditMateria.vue';
import EditView from '../materia/components/EditView.vue';
import '@layui/layui-vue/es/checkbox/index.css';
import '@layui/layui-vue/es/radio/index.css';
export default {
components: {
AddMateria,
EditMateria,
EditView
},
setup() {
let dataColumn = [{
type: "checkbox"
},
{
title: "ID",
key: "FID",
width: "160px",
align: 'center',
hide: false
},{
title: "模块",
key: "FMdmCode",
width: "300px",
align: 'center',
hide: false
},
{
title: "功能",
key: "FSaleCode",
width: "160px",
align: 'center',
hide: false
},
{
title: "操作描述",
key: "FDesc",
width: "160px",
align: 'center',
hide: false
},
{
title: "操作时间",
key: "FAddDate",
width: "180px",
align: 'center'
},
{
title: "操作类型",
key: "FTestCode",
width: "400px",
align: 'center'
},
{
title: "操作人",
key: "FUserName",
width: "178px",
align: 'center'
}
];
const selectedKeys = ref(["1"]);
const checkbox = ref(false);
const defaultToolbar = ref(true);
const pageInfo = ref({
total: 0,
limit: 10,
current: 1
});
const dataList = ref([]);
const typeList = ref([]);
const searchObj = ref({});
const postData = ref({});
const MaterialModel= ref({});
const showEditBox = ref([false, false, false, false, false, false, false, false, false, false, false, false,false]);
const modelArea = ref(["70%", "70%", "70%", "86%", "70%", "70%", "70%", "70%", "700px", "70%", "70%","70%","70%"]);
const objInfoObj = ref({});
const editType = ref(1);
const stateList = ref([{
id: 1,
name: "进行中"
}, {
id: 2,
name: "已完成"
}]);
const hasLoaded = ref(false);
const dataItem=ref([]);
return {
selectedKeys,
checkbox,
defaultToolbar,
dataColumn,
dataList,
pageInfo,
searchObj,
postData,
typeList,
showEditBox,
modelArea,
objInfoObj,
editType,
stateList,
hasLoaded,
MaterialModel,
dataItem
};
},
props: {
dataInfoObj: {
type: Object,
default: () => {},
},
pageTypeObj: {
type: Number,
default: () => 1,
}
},
mounted() {
if (this.dataInfoObj) {
this.dataColumn.pop();
this.dataColumn[0].hide = true;
this.dataColumn[1].hide = true;
this.dataColumn[2].hide = true;
this.dataColumn[7].hide = false;
}
this._getTypeList();
this._getPageList(true);
},
methods: {
changePage(obj) {
this.pageInfo.current = obj.current;
this.pageInfo.limit = obj.limit;
this._getPageList();
},
cancelClick(isRefresh, onlyRefresh) {
if (isRefresh) {
this._getPageList(true);
}
if (onlyRefresh) return false;
for (let i = 0; i < this.showEditBox.length; i++) {
this.showEditBox[i] = false;
}
},
async _getTypeList() {
this.typeList = await getBasicList(33) || [];
},
//
async _getPageList(isFirst, showOk) {
//this.dataList = [];
this.pageInfo.total = 0;
if (isFirst) {
this.pageInfo.current = 1;
this.pageInfo.total = 0;
}
if (this.dataInfoObj && this.dataInfoObj.FID) {
this.postData.FTeamID = this.dataInfoObj.FID;
this.postData.FIsUser = false;
}
if (this.pageTypeObj && this.pageTypeObj == 2) {
this.postData.FState = 99;
}
this.postData.FPageIndex = this.pageInfo.current;
this.postData.FPageSize = this.pageInfo.limit;
let result = await getPageList(this.postData, "Task");
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 ? "" : type.FName;
let state = this.stateList.find(s => s.id === item.FState)
item.FStateName = state == null ? "" : state.name;
item.FAddDate = item.FAddDate == null ? "" : this.dateFormat(item.FAddDate);
item.FEditDate = item.FEditDate == null ? "" : this.dateFormat(item.FEditDate);
item.FFinishDate = item.FFinishDate == null ? "" : this.dateFormat(item.FFinishDate);
item["IsEdit"]=Math.floor(Math.random()*10)==0?"编辑":"新增";
});
this.pageInfo.total = result.Data.Total || 0;
debugger
this.dataList = result.Data.List;
this.hasLoaded = true;
},
//
dateFormat(dataStr) {
return dataStr.replace('T', ' ').split('.')[0];
},
getData(data){
this.MaterialModel = data;
for (let i = 0; i < this.showEditBox.length; i++) {
this.showEditBox[i] = false;
}
this.showEditBox[11] = true;
this.editType = 1;
},
showEditMaterial(i){
this.showEditBox[i] = true;
},
_clickSetInfo(data, type) {
for (let i = 0; i < this.showEditBox.length; i++) {
this.showEditBox[i] = false;
}
if (data.FType == 1) {
data.FBoxType = 1; //
} else if (data.FType == 2) {
data.FBoxType = 2; //BOM
} else if (data.FType == 9 || data.FType == 10) {
data.FBoxType = 4; //
} else if ((data.FType >= 3 && data.FType <= 7) || data.FType == 11) {
data.FBoxType = 3; //
} else if (data.FType == 8) {
data.FBoxType = 5; //
} else if (data.FType == 12) {
data.FBoxType = 6; //
} else if (data.FType == 13) {
data.FBoxType = 7; //
} else if (data.FType == 14) {
data.FBoxType = 8; //
} else if (data.FType == 15) {
data.FBoxType = 9; //
}else if(data.FType==16){
this.dataItem=data;
data.FBoxType = 10; //
}else {
return layer.msg("未知事项类型");
}
this.objInfoObj = data;
this.editType = type;
this.showEditBox[data.FBoxType] = true;
},
//-
_clickSearch() {
this.postData = {};
for (let key in this.searchObj) {
let val = this.searchObj[key];
if (val != null && val !== "") this.postData[key] = val;
}
this._getPageList(true);
},
//-
_clickReset() {
this.searchObj = {};
this._clickSearch();
}
}
}
</script>

@ -0,0 +1,344 @@
<template>
<lay-container fluid="true"
:style="'padding:10px;height:'+(dataInfoObj!=undefined?(dataInfoObj.FHeight+'px'):'auto')">
<lay-row space="10">
<lay-col span="24">
<lay-card>
<lay-form :model="searchObj" class="search-box">
<lay-row class="search-items">
<lay-form-item label="物料号" prop="FSaleCode">
<lay-input v-model="searchObj.FSaleCode"></lay-input>
</lay-form-item>
<lay-form-item label="当前流程" prop="FType">
<lay-select v-model="searchObj.FType">
<lay-select-option v-for="(tIdv,tIdx) in typeList" :key="tIdx" :value="tIdv.FValue"
:label="tIdv.FName"></lay-select-option>
</lay-select>
</lay-form-item>
<lay-form-item v-if="postData.FState!=99" label="事项状态" prop="FState">
<lay-select v-model="searchObj.FState">
<lay-select-option v-for="(tv,tx) in stateList" :key="tx" :value="tv.id"
:label="tv.name"></lay-select-option>
</lay-select>
</lay-form-item>
<lay-form-item label="发起日期" prop="FDateRange">
<lay-date-picker v-model="searchObj.FDateRange" range placeholder="type : date">
</lay-date-picker>
</lay-form-item>
</lay-row>
<lay-form-item class="search-btn">
<lay-button size="sm" type="primary" @click="_clickSearch"></lay-button>
<lay-button size="sm" @click="_clickReset"></lay-button>
</lay-form-item>
</lay-form>
<lay-table v-if="hasLoaded" :columns="dataColumn" id="id" :dataSource="dataList"
v-model:selectedKeys="selectedKeys" :checkbox="checkbox" :default-toolbar="defaultToolbar"
:page="dataList.length>0?pageInfo:null" @change="changePage">
<template v-slot:toolbar>
<lay-button size="sm" @click="_getPageList(false,true)"></lay-button>
<lay-button size="sm" type="normal" @click="showEditMaterial(1)"></lay-button>
<lay-button size="sm" type="primary" @click="showEditMaterial(2)"></lay-button>
</template>
<template v-slot:FStateName="{ data }">
<span v-if="data.FStateName=='已完成'" style="color:#5FB878">{{ data.FStateName }}</span>
<span v-else style="color:#1E9FFF">{{ data.FStateName }}</span>
</template>
<template v-if="dataInfoObj == undefined|| !dataInfoObj.FID" v-slot:operator="{ data }">
<lay-button size="xs" type="primary" @click="showEditMaterial(3)"></lay-button>
</template>
</lay-table>
</lay-card>
</lay-col>
</lay-row>
<lay-layer :area="modelArea[1]" v-model="showEditBox[1]" title="新增物料">
<AddMateria v-if="showEditBox[1]" :dataInfoObj="objInfoObj" @cancelClick="cancelClick"></AddMateria>
</lay-layer>
<lay-layer :area="modelArea[2]" v-model="showEditBox[2]" title="修改物料">
<EditMateria v-if="showEditBox[2]" :dataInfoObj="objInfoObj" @cancelClick="cancelClick"></EditMateria>
</lay-layer>
<lay-layer :area="modelArea[3]" v-model="showEditBox[3]" title="编辑物料">
<EditView v-if="showEditBox[3]" :dataInfoObj="objInfoObj" @cancelClick="cancelClick"></EditView>
</lay-layer>
</lay-container>
</template>
<script>
import {
ref,
watch
} from "vue";
import {
getBasicList,
getPageList
} from "/src/api/api/common";
import AddMateria from '../materia/components/AddMateria.vue';
import EditMateria from '../materia/components/EditMateria.vue';
import EditView from '../materia/components/EditView.vue';
import '@layui/layui-vue/es/checkbox/index.css';
import '@layui/layui-vue/es/radio/index.css';
export default {
components: {
AddMateria,
EditMateria,
EditView
},
setup() {
let dataColumn = [
{
title: "ID",
key: "FID",
width: "160px",
align: 'center',
hide: false
},{
title: "物料号",
key: "FMdmCode",
width: "300px",
align: 'center',
hide: false
},
{
title: "物料描述",
key: "FSaleCode",
width: "160px",
align: 'center',
hide: false
},
{
title: "试验号",
key: "FTestCode",
width: "160px",
align: 'center',
hide: false
},
{
title: "产品分类",
key: "FDesc",
width: "400px",
align: 'center'
},
{
title: "发起时间",
key: "FAddDate",
width: "180px",
align: 'center'
},
{
title: "发起人",
key: "FUserName",
width: "178px",
align: 'center'
},
{
title: "类型",
key: "IsEdit",
width: "98px",
align: 'center',
customSlot: '',
},
{
title: "状态",
key: "FStateName",
width: "160px",
align: 'center'
},
{
title: "操作",
key: "operator",
width: "130px",
fixed: "right",
customSlot: 'operator',
align: 'center'
}
];
const selectedKeys = ref(["1"]);
const checkbox = ref(false);
const defaultToolbar = ref(true);
const pageInfo = ref({
total: 0,
limit: 10,
current: 1
});
const dataList = ref([]);
const typeList = ref([]);
const searchObj = ref({});
const postData = ref({});
const MaterialModel= ref({});
const showEditBox = ref([false, false, false, false, false, false, false, false, false, false, false, false,false]);
const modelArea = ref(["70%", "70%", "70%", "86%", "70%", "70%", "70%", "70%", "700px", "70%", "70%","70%","70%"]);
const objInfoObj = ref({});
const editType = ref(1);
const stateList = ref([{
id: 1,
name: "进行中"
}, {
id: 2,
name: "已完成"
}]);
const hasLoaded = ref(false);
const dataItem=ref([]);
return {
selectedKeys,
checkbox,
defaultToolbar,
dataColumn,
dataList,
pageInfo,
searchObj,
postData,
typeList,
showEditBox,
modelArea,
objInfoObj,
editType,
stateList,
hasLoaded,
MaterialModel,
dataItem
};
},
props: {
dataInfoObj: {
type: Object,
default: () => {},
},
pageTypeObj: {
type: Number,
default: () => 1,
}
},
mounted() {
if (this.dataInfoObj) {
this.dataColumn.pop();
this.dataColumn[0].hide = true;
this.dataColumn[1].hide = true;
this.dataColumn[2].hide = true;
this.dataColumn[7].hide = false;
}
this._getTypeList();
this._getPageList(true);
},
methods: {
changePage(obj) {
this.pageInfo.current = obj.current;
this.pageInfo.limit = obj.limit;
this._getPageList();
},
cancelClick(isRefresh, onlyRefresh) {
if (isRefresh) {
this._getPageList(true);
}
if (onlyRefresh) return false;
for (let i = 0; i < this.showEditBox.length; i++) {
this.showEditBox[i] = false;
}
},
async _getTypeList() {
this.typeList = await getBasicList(33) || [];
},
//
async _getPageList(isFirst, showOk) {
//this.dataList = [];
this.pageInfo.total = 0;
if (isFirst) {
this.pageInfo.current = 1;
this.pageInfo.total = 0;
}
if (this.dataInfoObj && this.dataInfoObj.FID) {
this.postData.FTeamID = this.dataInfoObj.FID;
this.postData.FIsUser = false;
}
if (this.pageTypeObj && this.pageTypeObj == 2) {
this.postData.FState = 99;
}
this.postData.FPageIndex = this.pageInfo.current;
this.postData.FPageSize = this.pageInfo.limit;
let result = await getPageList(this.postData, "Task");
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 ? "" : type.FName;
let state = this.stateList.find(s => s.id === item.FState)
item.FStateName = state == null ? "" : state.name;
item.FAddDate = item.FAddDate == null ? "" : this.dateFormat(item.FAddDate);
item.FEditDate = item.FEditDate == null ? "" : this.dateFormat(item.FEditDate);
item.FFinishDate = item.FFinishDate == null ? "" : this.dateFormat(item.FFinishDate);
item["IsEdit"]=Math.floor(Math.random()*10)==0?"编辑":"新增";
});
this.pageInfo.total = result.Data.Total || 0;
debugger
this.dataList = result.Data.List;
this.hasLoaded = true;
},
//
dateFormat(dataStr) {
return dataStr.replace('T', ' ').split('.')[0];
},
getData(data){
this.MaterialModel = data;
for (let i = 0; i < this.showEditBox.length; i++) {
this.showEditBox[i] = false;
}
this.showEditBox[11] = true;
this.editType = 1;
},
showEditMaterial(i){
this.showEditBox[i] = true;
},
_clickSetInfo(data, type) {
for (let i = 0; i < this.showEditBox.length; i++) {
this.showEditBox[i] = false;
}
if (data.FType == 1) {
data.FBoxType = 1; //
} else if (data.FType == 2) {
data.FBoxType = 2; //BOM
} else if (data.FType == 9 || data.FType == 10) {
data.FBoxType = 4; //
} else if ((data.FType >= 3 && data.FType <= 7) || data.FType == 11) {
data.FBoxType = 3; //
} else if (data.FType == 8) {
data.FBoxType = 5; //
} else if (data.FType == 12) {
data.FBoxType = 6; //
} else if (data.FType == 13) {
data.FBoxType = 7; //
} else if (data.FType == 14) {
data.FBoxType = 8; //
} else if (data.FType == 15) {
data.FBoxType = 9; //
}else if(data.FType==16){
this.dataItem=data;
data.FBoxType = 10; //
}else {
return layer.msg("未知事项类型");
}
this.objInfoObj = data;
this.editType = type;
this.showEditBox[data.FBoxType] = true;
},
//-
_clickSearch() {
this.postData = {};
for (let key in this.searchObj) {
let val = this.searchObj[key];
if (val != null && val !== "") this.postData[key] = val;
}
this._getPageList(true);
},
//-
_clickReset() {
this.searchObj = {};
this._clickSearch();
}
}
}
</script>

@ -0,0 +1,340 @@
<template>
<lay-form :model="dataInfo" class="dataInfo">
<lay-form-item label="新增物料描述" prop="FSaleCode" required label-width="120" style="margin-bottom:30px;">
<lay-input v-model="dataInfo.FSaleCode" @input="_inputSaleCode"></lay-input>
<p class="note">成品半成品中间品子项包材可以新增原料不允许新增</p>
</lay-form-item>
<lay-form-item label="选择模式" prop="FCreateFactoryID" 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>
<p class="note">模式必选通过模式确认视图类型</p>
</lay-form-item>
<lay-form-item label="选择物料组" prop="FMaterialGroup" required label-width="120">
<lay-select v-model="dataInfo.FMaterialGroup" v-if="seletList[1].length > 0">
<lay-select-option v-for="(rV, rI) in seletList[1]" key="rI" :value="rV.FValue + ''" :label="rV.FName">
</lay-select-option>
</lay-select>
</lay-form-item>
<lay-form-item label="计量单位" prop="FWeightUnit" required label-width="120">
<lay-select v-model="dataInfo.FWeightUnit" v-if="seletList[0].length > 0">
<lay-select-option v-for="(rV, rI) in seletList[0]" key="rI" :value="rV.FValue + ''" :label="rV.FValue">
</lay-select-option>
</lay-select>
<p class="note3" v-if="seletList[0].find(s => s.FValue == dataInfo.FWeightUnit) != null">
{{ seletList[0].find(s => s.FValue == dataInfo.FWeightUnit).FName }}
</p>
</lay-form-item>
<lay-form-item label="物料类型" prop="FMaterialType" required label-width="120" style="margin-bottom:30px;">
<lay-select v-model="dataInfo.FMaterialGroup" v-if="seletList[1].length > 0">
<lay-select-option v-for="(rV, rI) in seletList[1]" key="rI" :value="rV.FValue + ''" :label="rV.FName">
</lay-select-option>
</lay-select>
</lay-form-item>
<lay-form-item label="试验号" prop="FTestCode" required label-width="120">
<lay-input v-model="dataInfo.FTestCode"></lay-input>
</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;
margin-left: 12px;
}
.note2,
.note {
color: #999;
font-size: 12px;
}
.note {
margin-top: 4px;
position: absolute;
}
.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)
}
</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";
export default {
setup() {
const dataInfo = ref({
FMaterialType: "ZMAT",
FWeightUnit: "KG"
});
const formulaList = ref([]);
const seletList = ref([
[],
[]
]);
const typeList = ref([]);
let dataColumn = [{
type: "radio"
}, {
title: "名称",
key: "FName"
},
{
title: "试验号",
key: "FTestCode"
},
{
title: "配方种类",
key: "FTypeName",
width: "110px"
},
{
title: "版本号",
key: "FVersionCode"
}
];
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);
return {
dataInfo,
formulaList,
seletList,
typeList,
dataColumn,
dataList,
pageInfo,
selectedKey,
showEditBox,
showButton,
saleList,
factoryLists,
factoryValue
}
},
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();
},
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 _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 = result.Data.List;
},
//-
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>

@ -0,0 +1,323 @@
<template>
<lay-form :model="dataInfo" class="dataInfo">
<lay-form-item label="选择模式" prop="FCreateFactoryID" 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>
<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>
<p class="note">检索该模式下的所有物料</p>
</lay-form-item>
<lay-form-item v-if="dataList.length > 0">
<lay-table height="200px" :columns="dataColumn" v-model:selected-key="selectedKey" id="FID"
:dataSource="dataList" :page="dataList.length > 0 ? pageInfo : null" @change="changePage">
</lay-table>
</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;
margin-left: 12px;
}
.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)
}
</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";
export default {
setup() {
const dataInfo = ref({
FMaterialType: "ZMAT",
FWeightUnit: "KG"
});
const formulaList = ref([]);
const seletList = ref([
[],
[]
]);
const typeList = ref([]);
let dataColumn = [{
type: "radio"
}, {
title: "物料号",
key: "FName"
},
{
title: "试验号",
key: "FTestCode"
},
{
title: "物料描述",
key: "FTypeName",
width: "110px"
},
{
title: "产品分类",
key: "FVersionCode"
}
];
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);
return {
dataInfo,
formulaList,
seletList,
typeList,
dataColumn,
dataList,
pageInfo,
selectedKey,
showEditBox,
showButton,
saleList,
factoryLists,
factoryValue
}
},
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();
},
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 _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 = result.Data.List;
},
//-
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>

File diff suppressed because one or more lines are too long

@ -0,0 +1,118 @@
<template>
<lay-table style="margin:0 0 30px 0;" height="200px" :columns="dataColumn" :data-source="dataList">
<template v-slot:toolbar>
<p style="float:left;">配方视图</p>
</template>
</lay-table>
</template>
<script>
import {
ref
} from 'vue';
import {
getTeamworkView
} from "/src/api/api/teamwork";
export default {
setup() {
const viewList = ref([]);
const dataColumn = ref([
{type: 'number', title: '序号', width: '56'},
{key: '工厂', title: '工厂', align: 'center', width: '130px'},
{key: '开始生效日期', title: '开始生效日期', align: 'center', width: '130px'},
{key: 'BOM用途', title: 'BOM用途', align: 'center', width: '130px'},
{key: 'BOM状态', title: 'BOM状态', align: 'center', width: '130px'},
{key: '可选文本', title: '可选文本', align: 'center', width: '130px'},
{key: '可选BOM', title: '可选BOM', align: 'center', width: '130px'},
{key: '父项编码', title: '父项编码', align: 'center', width: '200px'},
{key: '父项描述', title: '父项描述', align: 'center', width: '300px'},
{key: '基本数量', title: '基本数量', align: 'center', width: '130px'},
{key: '基本单位', title: '基本单位', align: 'center', width: '130px'},
{key: '子项序号', title: '子项序号', align: 'center', width: '130px'},
{key: '项目类别', title: '项目类别', align: 'center', width: '130px'},
{key: '子项编码', title: '子项编码', align: 'center', width: '200px'},
{key: '子件描述', title: '子件描述', align: 'center', width: '300px'},
{key: '组件数量', title: '组件数量', align: 'center', width: '130px'},
{key: '计量单位', title: '计量单位', align: 'center', width: '130px'},
{key: '工程变更号', title: '工程变更号', align: 'center', width: '130px'},
{key: '项目ID', title: '项目ID', align: 'center', width: '130px'},
{key: '物料供应标识符', title: '物料供应标识符', align: 'center', width: '130px'},
{key: '备件标示', title: '备件标示', align: 'center', width: '130px'},
{key: '生产仓储地点', title: '生产仓储地点', align: 'center', width: '130px'},
{key: '组件损耗率', title: '组件损耗率', align: 'center', width: '130px'},
{key: '成本核算标识相关', title: '成本核算标识相关', align: 'center', width: '130px'},
{key: '生产相关', title: '生产相关', align: 'center', width: '130px'},
{key: 'BOM项目文本1', title: 'BOM项目文本1', align: 'center', width: '130px'},
{key: 'BOM项目文本2', title: 'BOM项目文本2', align: 'center', width: '130px'},
{key: '替代项目组', title: '替代项目组', align: 'center', width: '130px'},
{key: '优先级', title: '优先级', align: 'center', width: '130px'},
{key: '策略', title: '策略', align: 'center', width: '130px'},
{key: '使用可能性', title: '使用可能性', align: 'center', width: '130px'},
{key: '固定损耗数量', title: '固定损耗数量', align: 'center', width: '130px'}
]);
const dataList = ref([]);
return {
viewList,
dataColumn,
dataList
}
},
props: {
teamId: {
type: String,
default: () => ""
},
halfId: {
type: String,
default: () => ""
}
},
mounted() {
this.initPage();
},
methods: {
async initPage() {
let dataColumn = [{
type: "number",
title: "序号",
width: "56"
}];
let dataList = [];
let postData = {
FTeamID: this.teamId,
FViewType: 2,
FType: 1,
HalfId : this.halfId
};
let result = await getTeamworkView(postData);
let formulaList = result["List1"]
if (formulaList) {
for (let key in formulaList[0]) {
let width = (key.indexOf("描述") != -1 || key == "文本" || key == "物料") ? "300px" :
"130px";
width = key.indexOf("编码") != -1 ? "200px" : width;
dataColumn.push({
key: key,
title: key.split('.').pop(),
align: "center",
width: width
});
}
formulaList.forEach((item) => {
dataList.push(item);
});
}
// this.dataColumn = dataColumn;
this.dataList = dataList;
}
}
}
</script>

@ -0,0 +1,78 @@
<template>
<lay-container>
<view class="layui-item33 color999" :style="'max-height:900px'">
<lay-row space="10">
<lay-col md="4" sm="12" xs="24" v-for="(item, index) in columns">
<lay-checkbox-group v-model="checkedItem">
<lay-checkbox :name="item.title" skin="primary" :value="item.key">
{{ item.title }}
</lay-checkbox>
</lay-checkbox-group>
</lay-col>
</lay-row>
</view>
<view class="menuBtn">
<lay-button type="primary" @click="submitClick"></lay-button>
<lay-button @click="cancelClick"></lay-button>
</view>
</lay-container>
</template>
<script>
import {
ref
} from 'vue';
export default {
setup() {
const columnList = ref([]);
const checkedItem = ref([]);
return {
columnList,
checkedItem,
}
},
props: {
columns: {
type: Object,
default: () => [],
},
freezingColumns: {
type: Object,
default: () => [],
}
},
mounted() {
this.initPage();
},
methods: {
initPage() {
this.columnList = this.columns;
this.checkedItem = this.freezingColumns.concat();
},
cancelClick() {
this.$emit('cancelClick', this.freezingColumns);
},
submitClick() {
this.$emit('cancelClick', this.checkedItem);
}
}
}
</script>
<style scoped>
.layui-item33 {
width: 90%;
padding-right: 30px;
margin: 30px auto 10px;
display: block;
overflow: auto;
position: relative;
clear: both;
}
.menuBtn {
display: block;
text-align: center;
width: 96%;
margin: 20px auto;
}
</style>

@ -0,0 +1,85 @@
<template>
<lay-table class="empty-small2 empty-small3" style="margin:30px 0;" height="200px" :columns="dataColumn" id="FID"
:dataSource="dataList">
<template v-slot:toolbar>
<p style="float:right;">操作日志</p>
<lay-button size="sm" @click="_getPageList()"></lay-button>
</template>
</lay-table>
</template>
<script>
import {
ref
} from 'vue';
import {
getPageList
} from "/src/api/api/common";
export default {
setup() {
let dataColumn = [{
title: "序号",
key: "RowIndex",
width: "80px"
},
{
title: "操作时间",
key: "FAddDate",
width: "200px"
},
{
title: "操作人",
key: "FOptUser",
width: "180px",
align: 'center'
},
{
title: "说明",
key: "FDesc"
}
];
dataColumn.forEach((item) => {
item.align = "center";
});
const dataList = ref([]);
return {
dataColumn,
dataList
}
},
props: {
dataInfoObj: {
type: Object,
default: () => {},
}
},
mounted() {
setTimeout((item) => {
this._getPageList();
}, 100);
},
methods: {
cancelClick(isRefresh) {
this.$emit('cancelClick', isRefresh !== undefined ? isRefresh : false);
},
//
dateFormat(dataStr) {
return dataStr.replace('T', ' ').split('.')[0];
},
async _getPageList() {
if (this.dataInfoObj.FTeamID) {
let postObj = {
FTeamID: this.dataInfoObj.FTeamID,
FType: this.dataInfoObj.FType,
FPageSize: 99999
};
let result = await getPageList(postObj, 'OperateLog');
this.dataList = result.Data.List || [];
this.dataList.forEach(item => {
item.FAddDate = item.FAddDate == null ? "" : this.dateFormat(item.FAddDate);
});
}
}
}
}
</script>

@ -0,0 +1,344 @@
<template>
<lay-container fluid="true"
:style="'padding:10px;height:'+(dataInfoObj!=undefined?(dataInfoObj.FHeight+'px'):'auto')">
<lay-row space="10">
<lay-col span="24">
<lay-card>
<lay-form :model="searchObj" class="search-box">
<lay-row class="search-items">
<lay-form-item label="物料号" prop="FSaleCode">
<lay-input v-model="searchObj.FSaleCode"></lay-input>
</lay-form-item>
<lay-form-item label="类型" prop="FType">
<lay-select v-model="searchObj.FType">
<lay-select-option v-for="(tIdv,tIdx) in typeList" :key="tIdx" :value="tIdv.FValue"
:label="tIdv.FName"></lay-select-option>
</lay-select>
</lay-form-item>
<lay-form-item v-if="postData.FState!=99" label="事项状态" prop="FState">
<lay-select v-model="searchObj.FState">
<lay-select-option v-for="(tv,tx) in stateList" :key="tx" :value="tv.id"
:label="tv.name"></lay-select-option>
</lay-select>
</lay-form-item>
<lay-form-item label="发起日期" prop="FDateRange">
<lay-date-picker v-model="searchObj.FDateRange" range placeholder="type : date">
</lay-date-picker>
</lay-form-item>
</lay-row>
<lay-form-item class="search-btn">
<lay-button size="sm" type="primary" @click="_clickSearch"></lay-button>
<lay-button size="sm" @click="_clickReset"></lay-button>
</lay-form-item>
</lay-form>
<lay-table v-if="hasLoaded" :columns="dataColumn" id="id" :dataSource="dataList"
v-model:selectedKeys="selectedKeys" :checkbox="checkbox" :default-toolbar="defaultToolbar"
:page="dataList.length>0?pageInfo:null" @change="changePage">
<template v-slot:toolbar>
<lay-button size="sm" @click="_getPageList(false,true)"></lay-button>
<lay-button size="sm" type="normal" style="float:right" @click="showEditMaterial(1)"></lay-button>
</template>
<template v-slot:FStateName="{ data }">
<span v-if="data.FStateName=='已完成'" style="color:#5FB878">{{ data.FStateName }}</span>
<span v-else style="color:#1E9FFF">{{ data.FStateName }}</span>
</template>
<template v-if="dataInfoObj == undefined|| !dataInfoObj.FID" v-slot:operator="{ data }">
<lay-button size="xs" type="primary" @click="showEditMaterial(3)"></lay-button>
</template>
</lay-table>
</lay-card>
</lay-col>
</lay-row>
<lay-layer :area="modelArea[1]" v-model="showEditBox[1]" :title="新增物料">
<AddMateria v-if="showEditBox[1]" :dataInfoObj="objInfoObj" @cancelClick="cancelClick"></AddMateria>
</lay-layer>
<lay-layer :area="modelArea[2]" v-model="showEditBox[2]" :title="编辑物料">
<EditMateria v-if="showEditBox[2]" :dataInfoObj="objInfoObj" @cancelClick="cancelClick"></EditMateria>
</lay-layer>
<lay-layer :area="modelArea[3]" v-model="showEditBox[3]" :title="编辑物料">
<EditView v-if="showEditBox[3]" :dataInfoObj="objInfoObj" @cancelClick="cancelClick"></EditView>
</lay-layer>
</lay-container>
</template>
<script>
import {
ref,
watch
} from "vue";
import {
getBasicList,
getPageList
} from "/src/api/api/common";
import AddMateria from '../materia/components/AddMateria.vue';
import EditMateria from '../materia/components/EditMateria.vue';
import EditView from '../materia/components/EditView.vue';
import '@layui/layui-vue/es/checkbox/index.css';
import '@layui/layui-vue/es/radio/index.css';
export default {
components: {
AddMateria,
EditMateria,
EditView
},
setup() {
let dataColumn = [
{
title: "编号",
key: "FID",
width: "160px",
align: 'center',
hide: false
},{
title: "物料号",
key: "FMdmCode",
width: "300px",
align: 'center',
hide: false
},
{
title: "物料描述",
key: "FSaleCode",
width: "160px",
align: 'center',
hide: false
},
{
title: "试验号",
key: "FTestCode",
width: "160px",
align: 'center',
hide: false
},
{
title: "来源",
key: "FDesc",
width: "160px",
align: 'center'
},
{
title: "产品分类",
key: "FDesc",
width: "400px",
align: 'center'
},
{
title: "发起时间",
key: "FAddDate",
width: "180px",
align: 'center'
},
{
title: "发起人",
key: "FUserName",
width: "178px",
align: 'center'
},
{
title: "负责人",
key: "IsEdit",
width: "98px",
align: 'center',
customSlot: '',
},
{
title: "操作",
key: "operator",
width: "130px",
fixed: "right",
customSlot: 'operator',
align: 'center'
}
];
const selectedKeys = ref(["1"]);
const checkbox = ref(false);
const defaultToolbar = ref(true);
const pageInfo = ref({
total: 0,
limit: 10,
current: 1
});
const dataList = ref([]);
const typeList = ref([]);
const searchObj = ref({});
const postData = ref({});
const MaterialModel= ref({});
const showEditBox = ref([false, false, false, false, false, false, false, false, false, false, false, false,false]);
const modelArea = ref(["70%", "70%", "70%", "86%", "70%", "70%", "70%", "70%", "700px", "70%", "70%","70%","70%"]);
const objInfoObj = ref({});
const editType = ref(1);
const stateList = ref([{
id: 1,
name: "进行中"
}, {
id: 2,
name: "已完成"
}]);
const hasLoaded = ref(false);
const dataItem=ref([]);
return {
selectedKeys,
checkbox,
defaultToolbar,
dataColumn,
dataList,
pageInfo,
searchObj,
postData,
typeList,
showEditBox,
modelArea,
objInfoObj,
editType,
stateList,
hasLoaded,
MaterialModel,
dataItem
};
},
props: {
dataInfoObj: {
type: Object,
default: () => {},
},
pageTypeObj: {
type: Number,
default: () => 1,
}
},
mounted() {
if (this.dataInfoObj) {
this.dataColumn.pop();
this.dataColumn[0].hide = true;
this.dataColumn[1].hide = true;
this.dataColumn[2].hide = true;
this.dataColumn[7].hide = false;
}
this._getTypeList();
this._getPageList(true);
},
methods: {
changePage(obj) {
this.pageInfo.current = obj.current;
this.pageInfo.limit = obj.limit;
this._getPageList();
},
cancelClick(isRefresh, onlyRefresh) {
if (isRefresh) {
this._getPageList(true);
}
if (onlyRefresh) return false;
for (let i = 0; i < this.showEditBox.length; i++) {
this.showEditBox[i] = false;
}
},
async _getTypeList() {
this.typeList = await getBasicList(33) || [];
},
//
async _getPageList(isFirst, showOk) {
//this.dataList = [];
this.pageInfo.total = 0;
if (isFirst) {
this.pageInfo.current = 1;
this.pageInfo.total = 0;
}
if (this.dataInfoObj && this.dataInfoObj.FID) {
this.postData.FTeamID = this.dataInfoObj.FID;
this.postData.FIsUser = false;
}
if (this.pageTypeObj && this.pageTypeObj == 2) {
this.postData.FState = 99;
}
this.postData.FPageIndex = this.pageInfo.current;
this.postData.FPageSize = this.pageInfo.limit;
let result = await getPageList(this.postData, "Task");
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 ? "" : type.FName;
let state = this.stateList.find(s => s.id === item.FState)
item.FStateName = state == null ? "" : state.name;
item.FAddDate = item.FAddDate == null ? "" : this.dateFormat(item.FAddDate);
item.FEditDate = item.FEditDate == null ? "" : this.dateFormat(item.FEditDate);
item.FFinishDate = item.FFinishDate == null ? "" : this.dateFormat(item.FFinishDate);
});
this.pageInfo.total = result.Data.Total || 0;
debugger
this.dataList = result.Data.List;
debugger
this.hasLoaded = true;
},
//
dateFormat(dataStr) {
return dataStr.replace('T', ' ').split('.')[0];
},
getData(data){
this.MaterialModel = data;
for (let i = 0; i < this.showEditBox.length; i++) {
this.showEditBox[i] = false;
}
this.showEditBox[11] = true;
this.editType = 1;
},
showEditMaterial(i){
this.showEditBox[i] = true;
},
_clickSetInfo(data, type) {
for (let i = 0; i < this.showEditBox.length; i++) {
this.showEditBox[i] = false;
}
if (data.FType == 1) {
data.FBoxType = 1; //
} else if (data.FType == 2) {
data.FBoxType = 2; //BOM
} else if (data.FType == 9 || data.FType == 10) {
data.FBoxType = 4; //
} else if ((data.FType >= 3 && data.FType <= 7) || data.FType == 11) {
data.FBoxType = 3; //
} else if (data.FType == 8) {
data.FBoxType = 5; //
} else if (data.FType == 12) {
data.FBoxType = 6; //
} else if (data.FType == 13) {
data.FBoxType = 7; //
} else if (data.FType == 14) {
data.FBoxType = 8; //
} else if (data.FType == 15) {
data.FBoxType = 9; //
}else if(data.FType==16){
this.dataItem=data;
data.FBoxType = 10; //
}else {
return layer.msg("未知事项类型");
}
this.objInfoObj = data;
this.editType = type;
this.showEditBox[data.FBoxType] = true;
},
//-
_clickSearch() {
this.postData = {};
for (let key in this.searchObj) {
let val = this.searchObj[key];
if (val != null && val !== "") this.postData[key] = val;
}
this._getPageList(true);
},
//-
_clickReset() {
this.searchObj = {};
this._clickSearch();
}
}
}
</script>
Loading…
Cancel
Save