index.vue 93 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841
  1. <template>
  2. <div>
  3. <layout>
  4. <layout-header>
  5. <div class="">
  6. <!-- 按钮部分-->
  7. <el-form ref="elSearchFormRef" class="demo-form-inline" :rules="searchRule" @keyup.enter="onSubmit">
  8. <el-form-item>
  9. <el-button type="primary" icon="Download" @click="exportToExcel3" style="margin: 5px;float: right;">导出到Excel(明细)</el-button>
  10. <el-button type="primary" icon="Download" @click="exportToExcel2" style="margin: 5px;float: right;">月度明细</el-button>
  11. </el-form-item>
  12. </el-form>
  13. </div>
  14. </layout-header>
  15. <layout>
  16. <!-- 左侧树形结构 -->
  17. <layout-sider :resize-directions="['right']" :width="190" style="margin-right: 10px;">
  18. <div class="JKWTree-tree" style="height: 200px">
  19. <h3>日期</h3>
  20. <el-tree :data="treeData" class="treecolor" @node-click="handleNodeClick"></el-tree>
  21. </div>
  22. </layout-sider>
  23. <!-- 右侧内容区域 -->
  24. <layout-content >
  25. <el-main>
  26. <!-- 工单表格列表 -->
  27. <div class="gva-table-box">
  28. <el-table ref="multipleTable"
  29. style="width: 100%;height: 28vh"
  30. id="tab"
  31. border
  32. :row-style="{ height: '20px' }"
  33. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  34. :header-cell-style="{ padding: '0px' }"
  35. tooltip-effect="dark"
  36. :data="tabledate2" row-key="ID"
  37. @row-click="tableRowClick"
  38. highlight-current-row="true"
  39. :cell-class-name="tableDataCellClass"
  40. @row-dblclick="updateCompanyFunc"
  41. @selection-change="handleSelectionChange"
  42. :show-overflow-tooltip="true">
  43. <!-- 多选框 -->
  44. <!-- <el-table-column type="selection" width="30" /> -->
  45. <el-table-column align="left" label="设备编号" prop="sczl_jtbh" width="81" />
  46. <el-table-column align="left" sortable label="班组编号" prop="sczl_bzdh" width="110" />
  47. <el-table-column align="left" sortable label="产量合计" prop="total_cl" width="110" />
  48. <el-table-column :label="item.slice(5,10)" align="center" v-for="item in datelist" :key="item.label" :prop= "item" >
  49. </el-table-column>
  50. </el-table>
  51. <!-- 分页 -->
  52. <div class="gva-pagination">
  53. <el-pagination
  54. @size-change="handleSizeChange"
  55. @current-change="handleCurrentChange"
  56. :current-page="page"
  57. :page-sizes="[10, 30, 50, 100]"
  58. layout="total, sizes, prev, pager, next, jumper"
  59. :total="total">
  60. </el-pagination>
  61. </div>
  62. </div>
  63. <!-- 月度设备运行统计->机台生产工单数据详情列表 -->
  64. <el-tabs v-model="activeName" @tab-click="handleClick">
  65. <el-table ref="multipleTable"
  66. id="tab2"
  67. :row-style="{ height: '20px' }"
  68. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  69. :header-cell-style="{ padding: '0px' }"
  70. :show-overflow-tooltip="true"
  71. highlight-current-row="true"
  72. @selection-change="selectionChange($event, '印件资料')"
  73. style="width: 100%;height: 36vh" border tooltip-effect="dark" :data="jqtabledata" row-key="ID">
  74. <!-- 多选框 -->
  75. <!-- <el-table-column type="selection" width="30" /> -->
  76. <el-table-column align="left" sortable label="工单编号" prop="工单编号" width="110"/>
  77. <el-table-column align="left" sortable label="印件名称" prop="印件名称" width="600"/>
  78. <el-table-column align="left" sortable label="工序名称" prop="工序名称" width="110"/>
  79. <el-table-column align="left" sortable label="工作日期" prop="工作日期" width="110"/>
  80. <el-table-column align="left" sortable label="机台编号" prop="机台编号" width="110"/>
  81. <el-table-column align="left" sortable label="班组编号" prop="班组编号" width="110"/>
  82. <el-table-column align="left" sortable label="产量" prop="产量" width="110"/>
  83. <el-table-column align="left" sortable label="墨色数" prop="墨色数" width="110"/>
  84. </el-table>
  85. </el-tabs>
  86. </el-main>
  87. </layout-content>
  88. </layout>
  89. </layout>
  90. <PrintPage ref="printPageRef" />
  91. <AddGongYi ref="addGongYiRef" />
  92. </div>
  93. </template>
  94. <script>
  95. //点击按钮显示下方表格
  96. export default {
  97. data() {
  98. return {
  99. currentTable: '', // 当前展示的表格
  100. activeName: 'first',
  101. };
  102. },
  103. methods: {
  104. showTable(tableName) {
  105. this.currentTable = tableName;
  106. },
  107. showTableChange() {
  108. // 处理表格选中事件
  109. },
  110. }
  111. };
  112. </script>
  113. <script setup>
  114. // 全量引入格式化工具 请按需保留
  115. import $script from 'scriptjs'
  116. import $ from 'jquery';
  117. import * as XLSX from 'xlsx'
  118. import FileSaver from 'file-saver'
  119. import LuckyExcel from 'luckyexcel';
  120. import { Layout, LayoutSider, LayoutContent } from '@arco-design/web-vue';
  121. import { ElMessage, ElMessageBox } from 'element-plus'
  122. import { ref, reactive, computed, nextTick, watch,onMounted } from 'vue'
  123. import {OutputSstatisticsMenu,MachineProductDetail,MachineProduction} from "@/api/DecisionSupport/decision.js"
  124. defineOptions({name: 'Company'})
  125. import { useUserStore } from '@/pinia/modules/user'
  126. const userStore = useUserStore()
  127. const _username = ref('')
  128. _username.value = userStore.userInfo.userName + '/' + userStore.userInfo.nickName
  129. const printPageRef = ref()
  130. const addGongYiRef = ref()
  131. onMounted(()=>{
  132. })
  133. //导出到EXCEL(明细)
  134. const exportToExcel3 = ()=>{
  135. const el = document.getElementById('tab');
  136. // 文件名
  137. const filename = '导出到EXCEL(汇总).xlsx';
  138. const wb = XLSX.utils.table_to_book(el, { raw: true });
  139. const wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' });
  140. try {
  141. FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), filename);
  142. } catch (e) {
  143. console.log(e);
  144. }
  145. return wbout;
  146. }
  147. //导出到EXCEL(明细)
  148. const exportToExcel2 = ()=>{
  149. const el = document.getElementById('tab2');
  150. // 文件名
  151. const filename = '导出到EXCEL(明细).xlsx';
  152. const wb = XLSX.utils.table_to_book(el, { raw: true });
  153. const wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' });
  154. try {
  155. FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), filename);
  156. } catch (e) {
  157. console.log(e);
  158. }
  159. return wbout;
  160. }
  161. const scfjfpxslist = ref(false);
  162. const scfjfpxsformData = reactive({
  163. cpdh: '',
  164. });
  165. const scfjfpxstableData = ref([]);
  166. //质检废品系数【更新】
  167. const scfjfpxsConfirm = async () => {
  168. const rawValueArray = scfjfpxstableData._rawValue;
  169. const formattedData = rawValueArray.map(item => {
  170. return {
  171. UniqID: item.Uniqid,
  172. artificial_zp: item.人工正品板 !== null ? item.人工正品板 : "",
  173. artificial_cp: item.人工次品板 !== null ? item.人工次品板 : "",
  174. artificial_fj: item.人工废检 !== null ? item.人工废检 : "",
  175. machine_zp: item.机检正品板 !== null ? item.机检正品板 : "",
  176. machine_cp: item.机检次品板 !== null ? item.机检次品板 : "",
  177. machine_fj: item.机检废检 !== null ? item.机检废检 : ""
  178. }
  179. });
  180. const editGyWastes = await editGyWaste(formattedData);
  181. if (editGyWastes.code === 0) {
  182. scfjfpxslist.value = false;
  183. ElMessage({type: 'success',message: '更新成功'})
  184. } else {
  185. ElMessage({type: 'error',message: '更新失败'})
  186. }
  187. };
  188. //质检废品系数【退出】
  189. const scfjfpxsCancel = () => {
  190. scfjfpxslist.value = false;
  191. };
  192. //=========工序产量核查===========
  193. const gd_gxclhclist = ref(false);
  194. const gxclhc_Data = ref([]);
  195. //工序产量核查方法接口
  196. const _getOrderProcessCount = async () => {
  197. const order = gxclhcformData['gdbh'];
  198. const getOrderProcessCount_list = await getOrderProcessCount({order:order});
  199. const concatenatedData = getOrderProcessCount_list.data.map(item => {
  200. // 优化后的代码,使用模板字符串连接字段值并在单个数字前添加零
  201. const formattedYjno = item.Gy0_yjno.length === 1 ? `0${item.Gy0_yjno}` : item.Gy0_yjno;
  202. const formattedGxh = item.Gy0_gxh.length === 1 ? `0${item.Gy0_gxh}` : item.Gy0_gxh;
  203. const concatenatedValue = `${formattedYjno}-${formattedGxh} ${item.Gy0_gxmc} 【${item.Add_gxmc} 】`;
  204. return {
  205. ...item,
  206. concatenatedData: concatenatedValue, // 使用新属性名
  207. };
  208. });
  209. gxclhc_Data.value = concatenatedData;
  210. };
  211. //工序产量核查
  212. const gxclhcCellClass = ({row, column, rowIndex, columnIndex}) =>{
  213. if (column.label === '实际上报产量' ||column.label === '制程废品' || column.label === '制程废品率' ||
  214. column.label === '来料异常' || column.label === '流程单数' || column.label === '当前设备') {
  215. return 'lan-plan-usage-lows';
  216. }
  217. if (column.label === '折算车头产量') {
  218. return 'gxclhc—color-column-red';
  219. }
  220. // 如果不是 'PD_WG' 列,返回空字符串或其他样式类
  221. if (column.label === '工序状态'){
  222. if(row['PD_WG'] === '完工'){
  223. return 'lan-plan-usage-lowshui';
  224. }else{
  225. return 'pczccolor-column-lan';
  226. }
  227. }
  228. }
  229. // =========== 流程单查询 ===========
  230. const gd_lcdlist = ref(false);
  231. const gd_lcdformData = reactive({
  232. gdbh: '',
  233. code: '',
  234. name: '',
  235. });
  236. // 流程单查询按钮
  237. const processList = ref([]);
  238. const gdlcdcxconlick = async () => {
  239. if(_Gd_gdbh.value === '' || _Gd_gdbh.value === null){
  240. ElMessage({type: 'warning',message: '请选择具体的工单,在进行操作'})
  241. return false;
  242. }else{
  243. gd_lcdformData['gdbh'] = _Gd_gdbh.value;
  244. _getOrderProcessLeft_list();
  245. gd_lcdlist.value = true;
  246. processList.value = []
  247. }
  248. }
  249. //流程单查询回车
  250. const gd_lcdProductValue = async () => {
  251. if(gd_lcdformData['gdbh'] == '' || gd_lcdformData['gdbh'] === null){
  252. ElMessage({type: 'warning',message: '工单编号为空'})
  253. return false;
  254. }
  255. _getOrderProcessLeft_list();
  256. }
  257. const lcd_treeData = ref([]);
  258. const _getOrderProcessLeft_list = async () => {
  259. const order = gd_lcdformData['gdbh'];
  260. try {
  261. //5.1流程单查询-工单工序生产进程菜单栏
  262. const getOrderProcessLeft_list = await getOrderProcessLeft({ order:order});
  263. // console.log(getOrderProcessLeft_list)
  264. if(getOrderProcessLeft_list.data.Gd_info === null || getOrderProcessLeft_list.data.Gd_info === ''){
  265. ElMessage({type: 'warning',message: '未查询到具体工单信息'})
  266. lcd_treeData.value = [];
  267. return false;
  268. }
  269. gd_lcdformData['code'] = getOrderProcessLeft_list.data.Gd_info['code'];
  270. gd_lcdformData['name'] = getOrderProcessLeft_list.data.Gd_info['name'];
  271. lcd_treeData.value = [{
  272. label: order + '-' + getOrderProcessLeft_list.data.Gd_info['name'],
  273. // label: getOrderProcessLeft_list.data.Gd_info['code'] + '-' + getOrderProcessLeft_list.data.Gd_info['name'],
  274. value: undefined,
  275. children: []
  276. }]
  277. const newData = [];
  278. for (let key in getOrderProcessLeft_list.data.Gy_info) {
  279. let temp = getOrderProcessLeft_list.data.Gy_info[key];
  280. let concatenatedValue = `${temp.Gy0_yjno}-${temp.Gy0_gxh} ---> ${temp.Gy0_gxmc}`;
  281. newData.push({ label: concatenatedValue,value: temp.Gy0_gxh });
  282. }
  283. lcd_treeData.value[0].children = newData;
  284. //5.2流程单查询-获取工单工序生产进程右侧【接口】【进入页面默认显示第一个数据】
  285. const getOrderProcessRight_list = await getOrderProcessRight({order: order, gxNo:newData[0].value});
  286. processList.value = getOrderProcessRight_list.data
  287. } catch (error) {
  288. console.error(error);
  289. }
  290. };
  291. //点击左侧获取工序显示右侧数据
  292. const lcd_handleNodeClick = async (node) => {
  293. if (node.value === undefined || node.value === null){
  294. return false;
  295. }
  296. const order = gd_lcdformData['gdbh'];
  297. //5.2流程单查询-获取工单工序生产进程右侧【接口】
  298. const getOrderProcessRight_list = await getOrderProcessRight({order:order, gxNo:node.value});
  299. processList.value = getOrderProcessRight_list.data
  300. };
  301. // 流程单查询退出
  302. const gd_lcdCancel = async () => {
  303. gd_lcdlist.value = false;
  304. }
  305. // =========== 新增工单资料 ===========
  306. // 获取当前日期
  307. const today = new Date();
  308. const year = today.getFullYear();
  309. const month = String(today.getMonth() + 1).padStart(2, '0'); // 月份从 0 开始,需要补零
  310. const day = String(today.getDate()).padStart(2, '0');
  311. const hours = String(today.getHours()).padStart(2, '0');
  312. const minutes = String(today.getMinutes()).padStart(2, '0');
  313. const seconds = String(today.getSeconds()).padStart(2, '0');
  314. const currentDate = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
  315. const add_gddialogFormVisible = ref(false)
  316. const add_gdscgdformData = reactive({
  317. 重点工单: '',
  318. 开单日期: '',
  319. 工单编号: '',
  320. 生产类型: '',
  321. 客户代号: '',
  322. 客户名称: '',
  323. 产品代号: '',
  324. 产品名称: '',
  325. 印件代号: '',
  326. 印件名称: '',
  327. 订单数量: '',
  328. 交货日期: '',
  329. 投料率: '',
  330. 平均合格率: '',
  331. 平张投料: '',
  332. 万小张: '',
  333. 单位: '',
  334. 投料大箱: '',
  335. 库存大箱: '',
  336. 销售订单号: '',
  337. 警语版面: '',
  338. 版本号: '',
  339. 客户ERP编码: '',
  340. 码源数量: '',
  341. 进程备注: '',
  342. 备注: '',
  343. });
  344. //清空对象的属性值
  345. const gd_clearFormData = () => {
  346. Object.keys(add_gdscgdformData).forEach(key => {
  347. add_gdscgdformData[key] = '';
  348. });
  349. };
  350. //新增工单资料按钮
  351. const addgd_onclick = () => {
  352. handleDoubleClick();
  353. gd_clearFormData();
  354. add_gdscgdformData['重点工单'] = '';
  355. add_gdscgdformData['订单数量'] = 0;
  356. add_gdscgdformData['平张投料'] = 0;
  357. add_gdscgdformData['万小张'] = 0;
  358. add_gdscgdformData['单位'] = "万张";
  359. add_gdscgdformData['投料大箱'] = 0;
  360. add_gdscgdformData['码源数量'] = 0;
  361. add_gdscgdformData['开单日期'] = currentDate;
  362. add_gddialogFormVisible.value = true
  363. }
  364. const handleDoubleClick = async ()=>{
  365. console.log(123)
  366. }
  367. //获取客户代号,客户名称
  368. const khdhModal = ref(false)
  369. const cpdhModal = ref(false)
  370. const khdhDataList = ref([])
  371. const cpdhDataList = ref([])
  372. const khdh_keyword = ref('')
  373. const cpdh_keyword = ref('')
  374. //新增工单->客户列表
  375. const _gClientList = async (v = '')=>{
  376. try {
  377. const ClientListdata = await ClientList({search: v});
  378. console.log("客户列表数据↓↓↓↓↓↓↓↓")
  379. console.log(ClientListdata)
  380. khdhDataList.value = ClientListdata.data
  381. } catch (error) {
  382. console.error(error);
  383. }
  384. }
  385. //新增工单->产品代号列表
  386. const _ProductCodeList = async (v = '')=>{
  387. try {
  388. const ProductCodeListdata = await ProductCodeList({cilent: v});
  389. console.log("产品代号列表数据↓↓↓↓↓↓↓↓")
  390. console.log(ProductCodeListdata)
  391. cpdhDataList.value = ProductCodeListdata.data
  392. } catch (error) {
  393. console.error(error);
  394. }
  395. }
  396. const gongdanSearchHandle = async (v, type) => {
  397. if (type === '客户代号') {
  398. await _gClientList(v)
  399. }
  400. if (type === '产品代号') {
  401. await _ProductCodeList(v)
  402. }
  403. }
  404. //点击客户代号
  405. const selectGongDanNode = (node, type) => {
  406. if (type === '客户代号') {
  407. add_gdscgdformData['客户代号'] = node.客户编号
  408. add_gdscgdformData['客户名称'] = node.客户名称
  409. scgdformData.value['客户代号'] = node.客户编号
  410. scgdformData.value['客户名称'] = node.客户名称
  411. khdhModal.value = false
  412. }
  413. if (type === '产品代号') {
  414. add_gdscgdformData['产品代号'] = node.产品编号
  415. add_gdscgdformData['产品名称'] = node.产品名称
  416. scgdformData.value['产品代号'] = node.产品编号
  417. scgdformData.value['产品名称'] = node.产品名称
  418. cpdhModal.value = false
  419. }
  420. }
  421. const xzgdzlInput =ref()
  422. const addgdzlcpdhInput =ref()
  423. const xzgdzlTree = ref()
  424. const currentNodeKey = ref('')
  425. //新增工单资料弹窗 键盘 input框跳转
  426. const add_gdzlent = async (event,id1,id2,id3) => {
  427. if(event.keyCode === 40){
  428. if(id3!=''){
  429. document.getElementById(id3).focus()
  430. }
  431. }else if (event.keyCode === 13) { // Enter 或向下箭头
  432. if(id3!=''){
  433. document.getElementById(id3).focus()
  434. }
  435. } else if (event.keyCode === 38) { // 向上箭头
  436. if(id1!=''){
  437. document.getElementById(id1).focus()
  438. }
  439. }else if (event.keyCode === 8) { // 删除箭头
  440. if(id1!='' && document.getElementById(id2).value==''){
  441. document.getElementById(id1).focus()
  442. }
  443. }else if (event.keyCode === 37) { // 向左箭头
  444. if(id1!='' && document.getElementById(id2).selectionStart==0){
  445. document.getElementById(id1).focus()
  446. }
  447. }else if (event.keyCode === 39) { // 向右箭头
  448. if(id3!='' && document.getElementById(id2).selectionStart == document.getElementById(id2).value.length){
  449. document.getElementById(id3).focus()
  450. }
  451. }
  452. if (id2 === '客户代号' && event.key==='Tab' || id2 === '客户代号' && event.key=== 'Enter') {
  453. khdhModal.value = true
  454. await _gClientList(add_gdscgdformData['客户代号'])
  455. if (khdhDataList.value != null) {
  456. const row = khdhDataList.value.find(item => item.客户编号 === add_gdscgdformData['客户代号'])
  457. if (row) {
  458. add_gdscgdformData['客户名称'] = row.客户名称
  459. } else {
  460. khdhModal.value = true
  461. }
  462. } else {
  463. khdhModal.value = true
  464. }
  465. await nextTick(() => {
  466. setTimeout(() => {
  467. xzgdzlInput.value.focus()
  468. }, 200)
  469. })
  470. }
  471. if (id2 === '产品代号' && event.key==='Tab' || id2 === '产品代号' && event.key=== 'Enter') {
  472. await _ProductCodeList()
  473. cpdhModal.value = true
  474. //自动获取光标
  475. await nextTick(() => {
  476. setTimeout(() => {
  477. addgdzlcpdhInput.value.focus()
  478. }, 200)
  479. })
  480. }
  481. }
  482. let isdeFun = false
  483. watch(() => khdhModal.value, async v => {
  484. await nextTick(() => {
  485. if (xzgdzlTree.value !== undefined) {
  486. const defun = (e) => {
  487. isdeFun = true
  488. if (e.code === 'Enter' && currentNodeKey.value !== '') {
  489. selectGongDanNode(khdhDataList.value.find(item => item['客户编号'] == currentNodeKey.value), '客户代号')
  490. return
  491. }
  492. if (e.code === 'ArrowDown') {
  493. if (currentNodeKey.value === '') {
  494. currentNodeKey.value = khdhDataList.value[0].客户编号
  495. } else {
  496. console.log(khdhDataList.value)
  497. for(let i = 0; i < khdhDataList.value.length; i++) {
  498. const item = khdhDataList.value[i]
  499. if (item['客户编号'] == currentNodeKey.value) {
  500. if (khdhDataList.value[i + 1]) {
  501. currentNodeKey.value = khdhDataList.value[i + 1].客户编号
  502. break;
  503. } else {
  504. currentNodeKey.value = khdhDataList.value[0].客户编号
  505. }
  506. }
  507. }
  508. }
  509. }
  510. if (e.code === 'ArrowUp') {
  511. if (currentNodeKey.value === '') {
  512. currentNodeKey.value = khdhDataList.value[khdhDataList.value.length - 1].客户编号
  513. } else {
  514. for(let i = 0; i < khdhDataList.value.length; i++) {
  515. const item = khdhDataList.value[i]
  516. if (item['客户编号'] == currentNodeKey.value) {
  517. if (khdhDataList.value[i - 1]) {
  518. currentNodeKey.value = khdhDataList.value[i - 1].客户编号
  519. break;
  520. } else {
  521. currentNodeKey.value = khdhDataList.value[khdhDataList.value.length - 1].客户编号
  522. }
  523. }
  524. }
  525. }
  526. }
  527. }
  528. if (v === true) {
  529. isdeFun || document.body.addEventListener('keydown', defun)
  530. isdeFun && document.body.removeEventListener('keydown', defun)
  531. } else {
  532. document.body.removeEventListener('keydown', defun)
  533. }
  534. }
  535. })
  536. })
  537. // =========== 新增印件资料 ===========
  538. //默认弹窗关闭
  539. const yjzuidahaoma = ref(0)
  540. const add_gdyjdialogFormVisible = ref(false)
  541. const searchModel = ref(false)
  542. const searchZhiModel = ref(false)
  543. const zzdhIndex = ref(null)
  544. const getProductYjListdata = ref()
  545. const getProductZhiListdata = ref()
  546. const yjdh_keyword = ref('')
  547. const zhi_keyword = ref('')
  548. // 新增印件资料表单
  549. const add_yjzlformdata = reactive({
  550. yjno: '',
  551. yjdh: '',
  552. yjmc: '',
  553. zzdh: '',
  554. zzdh1: '',
  555. zzdh2: '',
  556. zzdh3: '',
  557. zzdh4: '',
  558. zzmc: '',
  559. zzmc1: '',
  560. zzmc2: '',
  561. zzmc3: '',
  562. zzmc4: '',
  563. cpsl: '',
  564. sjtl: '',
  565. pztl: '',
  566. tlgg: '',
  567. klgg: '',
  568. hsgg: '',
  569. ks: '',
  570. ls: '',
  571. desc: '',
  572. 万小张: '',
  573. });
  574. //清空对象的属性值
  575. const gdyj_clearFormData = () => {
  576. Object.keys(add_yjzlformdata).forEach(key => {
  577. add_yjzlformdata[key] = '';
  578. });
  579. if (isNaN(yjzuidahaoma.value)) {
  580. add_yjzlformdata.yjno = 1;
  581. } else {
  582. add_yjzlformdata.yjno = yjzuidahaoma.value;
  583. }
  584. add_yjzlformdata['pztl'] = 0;
  585. add_yjzlformdata['ks'] = 0;
  586. add_yjzlformdata['ls'] = 0;
  587. add_yjzlformdata['万小张'] = 0;
  588. console.log(add_yjzlformdata.yjno)
  589. };
  590. //点击新增印件资料按钮
  591. const addgdyj_onclick = () => {
  592. if(_Gd_gdbh.value == null){
  593. cgugdlist.value = false;
  594. ElMessage({type: 'warning',message: '请选择具体的工单后,再操作此功能' })
  595. }else{
  596. gdyj_clearFormData();
  597. add_gdyjdialogFormVisible.value = true
  598. }
  599. }
  600. //印件新增确定
  601. const add_gdyjenterDialog = async () => {
  602. if(add_yjzlformdata['yjno'] === ''){
  603. ElMessage({type: 'warning',message: '印件号不能为空'})
  604. return false;
  605. }
  606. // if(add_yjzlformdata['yjdh'] === ''){
  607. // ElMessage({type: 'warning',message: '印件代号不能为空'})
  608. // return false;
  609. // }
  610. // if(add_yjzlformdata['zzdh'] === ''){
  611. // ElMessage({type: 'warning',message: '纸张编号不能为空'})
  612. // return false;
  613. // }
  614. const formattedData = {
  615. Yj_Gdbh: _Gd_gdbh.value,
  616. yj_cpdh: _Gd_cpdh.value,
  617. yj_Yjno: add_yjzlformdata['yjno'],
  618. yj_Yjdh: add_yjzlformdata['yjdh'],
  619. yj_yjmc: add_yjzlformdata['yjmc'],
  620. yj_zzdh: add_yjzlformdata['zzdh'],
  621. yj_zzdh1: add_yjzlformdata['zzdh1'],
  622. yj_zzdh2: add_yjzlformdata['zzdh2'],
  623. yj_zzdh3: add_yjzlformdata['zzdh3'],
  624. yj_zzdh4: add_yjzlformdata['zzdh4'],
  625. yj_zzmc: add_yjzlformdata['zzmc'],
  626. yj_zzmc1: add_yjzlformdata['zzmc1'],
  627. yj_zzmc2: add_yjzlformdata['zzmc2'],
  628. yj_zzmc3: add_yjzlformdata['zzmc3'],
  629. yj_zzmc4: add_yjzlformdata['zzmc4'],
  630. yj_tlgg: add_yjzlformdata['tlgg'],
  631. yj_klgg: add_yjzlformdata['klgg'],
  632. Yj_核算规格: add_yjzlformdata['hsgg'],
  633. yj_成品数量: add_yjzlformdata['cpsl'],
  634. yj_平张投料: add_yjzlformdata['pztl'],
  635. yj_ks: add_yjzlformdata['ks'],
  636. yj_ls: add_yjzlformdata['ls'],
  637. yj_desc: add_yjzlformdata['desc'],
  638. Sys_id : _username.value,
  639. };
  640. const PrintDetailAdd_add = await PrintDetailAdd(formattedData);
  641. if(PrintDetailAdd_add.code === 0) {
  642. ElMessage({type: 'success',message: '添加成功'})
  643. add_gdyjdialogFormVisible.value = false
  644. let row = {
  645. '工单编号':_Gd_gdbh.value,
  646. '产品代号':_Gd_cpdh.value,
  647. '产品名称':_Gd_cpmc.value,
  648. }
  649. tableRowClick (row)
  650. } else {
  651. ElMessage({type: 'error',message: '添加失败' })
  652. }
  653. }
  654. //印件新增【印件代码】树状图
  655. const handleTreeData = (treeData) => {
  656. const data = Object.keys(treeData).map((key)=>({
  657. label:key,
  658. children: Object.keys(treeData[key]).map((keys)=>({
  659. label:keys,
  660. children:treeData[key][keys].map(item=>({
  661. label:`${item.物料代码} ${item.物料名称}`,
  662. 物料代码:item.物料代码,
  663. 物料名称:item.物料名称
  664. }))
  665. }))
  666. }))
  667. return data
  668. }
  669. //印件新增【纸张】树状图
  670. const handleTreeDatas = (treeData) => {
  671. const data = Object.keys(treeData).map((key)=>({
  672. label:key,
  673. children: Object.keys(treeData[key]).map((keys)=>({
  674. label:keys,
  675. children:Object.keys(treeData[key][keys]).map((keyss)=>({
  676. label:keyss,
  677. children:treeData[key][keys][keyss].map(item=>({
  678. label:`${item.物料代码} ${item.物料名称}`,
  679. 规格:item.规格,
  680. 物料代码:item.物料代码,
  681. 物料名称:item.物料名称
  682. }))
  683. }))
  684. }))
  685. }))
  686. return data
  687. }
  688. //3.4获取印件代码及名称
  689. const _getProductYjList = async ()=>{
  690. try {
  691. const response = await getProductYjList({search:''});
  692. getProductYjListdata.value = handleTreeData(response.data)
  693. } catch (error) {
  694. console.error(error);
  695. }
  696. }
  697. //3.5获取纸张代号及名称
  698. const _getProductZzList = async (v)=>{
  699. console.log(v)
  700. try {
  701. const response = await getProductZzList({search:v});
  702. getProductZhiListdata.value = handleTreeDatas(response.data)
  703. } catch (error) {
  704. console.error(error);
  705. }
  706. }
  707. //3.4获取印件代码及名称
  708. const searchHandle = async (v) => {
  709. const response = await getProductYjList({search:v});
  710. getProductYjListdata.value = handleTreeData(response.data)
  711. }
  712. //3.5获取纸张代号及名称
  713. const searchZhiHandle = async(v) => {
  714. const response = await getProductZzList({search:v});
  715. getProductZhiListdata.value = handleTreeDatas(response.data)
  716. }
  717. //印件代码tab 点击事件
  718. const selectNode = (v) => {
  719. if(v.物料名称){
  720. add_yjzlformdata['yjdh'] = v.物料代码
  721. add_yjzlformdata['yjmc'] = v.物料名称
  722. searchModel.value= false
  723. }
  724. }
  725. //纸张tab 点击事件
  726. const selectZhiNode = (v) => {
  727. if(v.物料名称){
  728. if (zzdhIndex.value == 0) {
  729. add_yjzlformdata['zzdh'] = v.物料代码
  730. add_yjzlformdata['zzmc'] = v.物料名称
  731. add_yjzlformdata['tlgg'] = v.规格
  732. } else {
  733. add_yjzlformdata['zzdh' + zzdhIndex.value] = v.物料代码
  734. add_yjzlformdata['zzmc' + zzdhIndex.value] = v.物料名称
  735. }
  736. searchZhiModel.value = false
  737. }
  738. }
  739. //新增印件表格input
  740. const add_gdzlyjent = async (event,id1,id2,id3,idx) => {
  741. if (id2 === 'yjdh' && event.key==='Tab' || id2 === 'yjdh' && event.key=== 'Enter') {
  742. _getProductYjList();
  743. searchModel.value = true
  744. }
  745. if(id2=='pztl' && event.key==='Tab' || id2 === 'pztl' && event.key=== 'Enter'){
  746. add_yjzlformdata.万小张 = add_yjzlformdata.pztl*add_yjzlformdata.ls/10000
  747. }
  748. if(id2=='ls' && event.key==='Tab' || id2 === 'ls' && event.key=== 'Enter'){
  749. add_yjzlformdata.万小张 = add_yjzlformdata.pztl*add_yjzlformdata.ls/10000
  750. }
  751. if (id2 === 'zzdh' && event.key==='Tab' || id2 === 'zzdh' && event.key=== 'Enter') {
  752. _getProductZzList(add_yjzlformdata['zzdh'])
  753. searchZhiModel.value = true
  754. zzdhIndex.value = idx
  755. }
  756. if (id2 === 'zzdh1' && event.key==='Tab' || id2 === 'zzdh1' && event.key=== 'Enter') {
  757. _getProductZzList(add_yjzlformdata['zzdh1'])
  758. searchZhiModel.value = true
  759. zzdhIndex.value = idx
  760. }
  761. if (id2 === 'zzdh2' && event.key==='Tab' || id2 === 'zzdh2' && event.key=== 'Enter') {
  762. _getProductZzList(add_yjzlformdata['zzdh2'])
  763. searchZhiModel.value = true
  764. zzdhIndex.value = idx
  765. }
  766. if (id2 === 'zzdh3' && event.key==='Tab' || id2 === 'zzdh3' && event.key=== 'Enter') {
  767. _getProductZzList(add_yjzlformdata['zzdh3'])
  768. searchZhiModel.value = true
  769. zzdhIndex.value = idx
  770. }
  771. if (id2 === 'zzdh4' && event.key==='Tab' || id2 === 'zzdh4' && event.key=== 'Enter') {
  772. _getProductZzList(add_yjzlformdata['zzdh4'])
  773. searchZhiModel.value = true
  774. zzdhIndex.value = idx
  775. }
  776. if(event.keyCode === 40){
  777. if(id3!=''){
  778. document.getElementById(id3).focus()
  779. }
  780. }else if (event.keyCode === 13) { // Enter 或向下箭头
  781. if(id3!=''){
  782. document.getElementById(id3).focus()
  783. }
  784. } else if (event.keyCode === 38) { // 向上箭头
  785. if(id1!=''){
  786. document.getElementById(id1).focus()
  787. }
  788. }else if (event.keyCode === 8) { // 删除箭头
  789. if(id1!='' && document.getElementById(id2).value==''){
  790. document.getElementById(id1).focus()
  791. }
  792. }else if (event.keyCode === 37) { // 向左箭头
  793. if(id1!='' && document.getElementById(id2).selectionStart==0){
  794. document.getElementById(id1).focus()
  795. }
  796. }else if (event.keyCode === 39) { // 向右箭头
  797. if(id3!='' && document.getElementById(id2).selectionStart == document.getElementById(id2).value.length){
  798. document.getElementById(id3).focus()
  799. }
  800. }
  801. }
  802. // =========== 新增工艺资料 ===========
  803. const add_gdgydialogFormVisible = ref(false)
  804. const add_gdgyformData = reactive({});
  805. //清空对象的属性值
  806. // const gdgy_clearFormData = () => {
  807. // Object.keys(add_gdgyformData).forEach(key => {
  808. // add_gdgyformData[key] = '';
  809. // });
  810. // };
  811. //新增工艺资料弹窗//
  812. const addgdgy_onclick = () => {
  813. if(_Gd_gdbh.value == null){
  814. cgugdlist.value = false;
  815. ElMessage({
  816. type: 'warning',
  817. message: '请选择具体的工单后,再操作此功能'
  818. })
  819. }else{
  820. let gongxu = gytableData.value.map(item => {
  821. return item['印件-工序']
  822. })
  823. addGongYiRef.value.open(_Gd_gdbh.value, gongxu)
  824. }
  825. }
  826. //同步
  827. const gdtb_onclick = async ()=>{
  828. const WorkOrderDatada = await WorkOrderData();
  829. console.log(WorkOrderDatada)
  830. ElMessage({ type: 'warning',message: WorkOrderDatada.msg});
  831. }
  832. // =========== 查改U8工单 ===========
  833. const cgugdlist = ref(false);
  834. const cgugdformData = reactive({
  835. gdbh: '',
  836. cpdh: '',
  837. gdmc: '',
  838. });
  839. const cgugdtableData = ref([]);
  840. //查改U8工单【按钮】
  841. const oneditugdclick = () => {
  842. if(_Gd_gdbh.value == null){
  843. cgugdlist.value = false;
  844. ElMessage({
  845. type: 'warning',
  846. message: '请选择具体的工单后,再操作此功能'
  847. })
  848. }else{
  849. cgugdformData['gdbh'] = _Gd_gdbh.value;
  850. cgugdformData['cpdh'] = _Gd_cpdh.value;
  851. cgugdformData['gdmc'] = _Gd_cpmc.value;
  852. _U8workOrder();
  853. cgugdlist.value = true;
  854. }
  855. };
  856. //查改U8工单【回车】
  857. const cgugdProductValue = () => {
  858. _U8workOrder();
  859. };
  860. //查改U8工单->工单列表
  861. const _U8workOrder = async ()=>{
  862. let workOrder = cgugdformData['gdbh'];
  863. // console.log(workOrder)
  864. try {
  865. const U8workOrderdata = await U8workOrder({workOrder:workOrder});
  866. cgugdtableData.value = U8workOrderdata.data;
  867. } catch (error) {
  868. console.error(error);
  869. }
  870. }
  871. // 多选数据
  872. const multipleSelection = ref([]);
  873. //查改U8工单多选
  874. const cguzlgd_del = (val) => {
  875. if (Array.isArray(val) && val.length === 0) {
  876. multipleSelection.value = [];
  877. } else {
  878. multipleSelection.value = [];
  879. multipleSelection.value.push(...val.map(item => item.序号));
  880. }
  881. }
  882. //查改U8工单(工单删除)
  883. const oncgugdclickdel = async ()=>{
  884. const Uniqid = multipleSelection.value.join(',');
  885. // console.log(Uniqid)
  886. try {
  887. const U8DataCorrection_del = await U8DataCorrection({Uniqid:Uniqid});
  888. if (U8DataCorrection_del.code === 0) {
  889. multipleSelection.value = [];
  890. ElMessage({type: 'success',message: '删除成功'})
  891. const U8workOrderdata = await U8workOrder({workOrder:cgugdformData['gdbh']});
  892. cgugdtableData.value = U8workOrderdata.data;
  893. } else {
  894. ElMessage({type: 'error',message: '删除失败'})
  895. }
  896. // 清空 multipleSelection 为空数组,只有在处理完数据后清空
  897. } catch (error) {
  898. console.error(error);
  899. }
  900. }
  901. //查改U8工单【退出】
  902. const oncgugdcloneclick = () => {
  903. cgugdlist.value = false;
  904. };
  905. // =========== 工艺流程调整 ===========
  906. const gylctztableColumns = ref(
  907. [
  908. { label: '方案', prop: '方案', width: '60' },
  909. { label: '印件号', prop: '印件号', width: '70' },
  910. { label: '工序号', prop: '工序号', width: '80' },
  911. { label: '工序名称', prop: '工序名称', width: '440' },
  912. { label: '工价系数', prop: '工价系数', width: '100' },
  913. { label: '损耗系数', prop: '损耗系数', width: '100' },
  914. { label: '开数', prop: 'ks', width: '60' },
  915. { label: '联数', prop: 'ls', width: '60' },
  916. { label: '备注', prop: '备注', width: '200' },
  917. { label: '车间', prop: '车间', width: '90' },
  918. { label: '设备编号', prop: '设备编号', width: '100' },
  919. { label: '设备名称', prop: '设备名称', width: '100' },
  920. { label: '建档用户', prop: '建档用户', width: '100' },
  921. { label: '建档时间', prop: '建档时间', width: '160' },
  922. { label: '更新时间', prop: '更新时间', width: '160' },
  923. ]
  924. )
  925. const gylctz_handleKeyDown = (event, x, y, prop) => {
  926. const currentElement = document.getElementById(`input${x}${y}`);
  927. if (currentElement === null && currentElement === undefined) return
  928. switch (event.keyCode) {
  929. case 13: // Enter
  930. case 40: // 向下箭头
  931. if (y < gylctztableData.value.length )
  932. document.getElementById(`input${x}${y + 1}`).focus();
  933. break;
  934. case 38: // 向上箭头
  935. if ( y > 0) {
  936. document.getElementById(`input${x}${y - 1}`).focus();
  937. }
  938. break;
  939. default:
  940. break;
  941. }
  942. }
  943. const gylctzlist = ref(false);
  944. const gylctzformData = reactive({
  945. gdbh: '',
  946. gddh: '',
  947. gdmc: '',
  948. });
  949. const gylctztableData = ref([]);
  950. //工艺流程调整【按钮】
  951. const oneditgylctzclick = () => {
  952. if(_Gd_gdbh.value == null){
  953. gylctzlist.value = false;
  954. ElMessage({type: 'warning',message: '请选择具体的工单后,再操作此功能'})
  955. }else{
  956. gylctzformData['gdbh'] = _Gd_gdbh.value;
  957. _ProcessFlow();
  958. gylctzlist.value = true;
  959. }
  960. };
  961. ////工艺流程调整【回车】
  962. const gylctzProductValue = () => {
  963. if(gylctzformData['gdbh'] == '' || gylctzformData['gdbh'] === null){
  964. ElMessage({type: 'warning',message: '工单编号为空'})
  965. return false;
  966. }
  967. _ProcessFlow();
  968. };
  969. // 工艺流程调整->获取当前工单工艺资料
  970. const _ProcessFlow = async ()=>{
  971. let workOrder = gylctzformData['gdbh'];
  972. try {
  973. const ProcessFlowdata = await ProcessFlow({workOrder:workOrder});
  974. if(ProcessFlowdata.msg === '未找到工单信息'){
  975. ElMessage({type: 'warning',message: '未找到工单信息'});
  976. gylctztableData.value = [];
  977. return false;
  978. }
  979. gylctzformData["gddh"] = ProcessFlowdata.data.成品编号;
  980. gylctzformData["gdmc"] = ProcessFlowdata.data.成品名称;
  981. gylctztableData.value = ProcessFlowdata.data.process;
  982. } catch (error) {
  983. console.error(error);
  984. }
  985. }
  986. //附加标准工序【按钮】
  987. const gdzlfjxx = ref(false);
  988. const gdzlfjxxformData = reactive({
  989. gdbh: '',
  990. cpmc: '',
  991. // 下拉框选项数据
  992. cpgyfans: [],
  993. // 设置默认值
  994. cpgyfan: '',
  995. });
  996. //点击下拉框获取输入框的值
  997. const ongdzlfanclick = () => {
  998. const workOrder = gdzlfjxxformData.cpgyfan;
  999. _ProcessFlow_xiala(workOrder);
  1000. }
  1001. // 工艺流程调整->获取当前工单工艺资料
  1002. const gdzlfjxxtableData = ref([]);
  1003. const _ProcessFlow_xiala = async (workOrder)=>{
  1004. try {
  1005. const ProcessFlow_xiala = await ProcessFlow({ workOrder });
  1006. if (ProcessFlow_xiala.data) {
  1007. gdzlfjxxtableData.value = ProcessFlow_xiala.data.process;
  1008. } else {
  1009. console.log("工艺流程调整->获取当前工单工艺资料 中缺少 data 属性");
  1010. }
  1011. } catch (error) {
  1012. console.error(error);
  1013. }
  1014. }
  1015. //工艺方案附加【下拉框工单编号数据】
  1016. const attachList = ref([])
  1017. const attachChange = (val) => {
  1018. attachList.value = val
  1019. }
  1020. //工艺方案附加【执行】
  1021. const addGongyiAttach = () => {
  1022. attachList.value.map(row => gylctztableData.value.push(row))
  1023. gdzlfjxx.value = false
  1024. }
  1025. const gdzlfjxxtableColumns = ref(
  1026. [
  1027. { label: '方案', prop: '方案', width: '60' },
  1028. { label: '印件号', prop: '印件号', width: '70' },
  1029. { label: '工序号', prop: '工序号', width: '70' },
  1030. { label: '工序名称', prop: '工序名称', width: '370' },
  1031. { label: '工价系数', prop: '工价系数', width: '87' },
  1032. { label: '损耗系数', prop: '损耗系数', width: '87' },
  1033. { label: '开数', prop: 'ks', width: '65' },
  1034. { label: '联数', prop: 'ls', width: '65' },
  1035. { label: '备注', prop: '备注', width: '240' },
  1036. { label: '车间', prop: '车间', width: '105' },
  1037. { label: '设备编号', prop: '设备编号', width: '100' },
  1038. { label: '设备名称', prop: '设备名称', width: '100' },
  1039. { label: '建档用户', prop: '建档用户', width: '100' },
  1040. { label: '建档时间', prop: '建档时间', width: '160' },
  1041. { label: '更新时间', prop: '更新时间', width: '160' },
  1042. ]
  1043. )
  1044. //工艺方案附加【放弃】
  1045. const gylcfj_fangqi = () => {
  1046. gdzlfjxx.value = false
  1047. }
  1048. //点击附加标准工序【按钮】
  1049. const gylctz_fjbzgx = async () => {
  1050. gdzlfjxxformData['cpdh'] = gylctzformData['gddh'];
  1051. gdzlfjxxformData['cpmc'] = gylctzformData['gdmc'];
  1052. gdzlfjxxtableData.value = [];
  1053. await _ReferenceWorkOrder();
  1054. gdzlfjxx.value = true;
  1055. };
  1056. // 工艺流程调整->参照工单列表获取【展示下拉框的数据】
  1057. const _ReferenceWorkOrder = async ()=>{
  1058. let params = {};
  1059. params.productCode = gylctzformData['gddh'];
  1060. params.workOrder = _Gd_gdbh.value;
  1061. try {
  1062. const ReferenceWorkOrder_data = await ReferenceWorkOrder(params);
  1063. if(ReferenceWorkOrder_data.code === 0){
  1064. // 从数据中提取方案
  1065. const schemes = ReferenceWorkOrder_data.data || [];
  1066. // 直接将数组作为工艺方案数组
  1067. gdzlfjxxformData.cpgyfans = schemes;
  1068. if (gdzlfjxxformData.cpgyfans.length > 0) {
  1069. gdzlfjxxformData.cpgyfan = [gdzlfjxxformData.cpgyfans[0]];
  1070. }
  1071. //默认获取下拉框第一个值
  1072. const workOrder = gdzlfjxxformData.cpgyfan[0]
  1073. gdzlfjxxformData.cpgyfan = gdzlfjxxformData.cpgyfans[0]
  1074. _ProcessFlow_xiala(workOrder)
  1075. }else{
  1076. console.log("该产品下没有工单")
  1077. }
  1078. } catch (error) {
  1079. console.error(error);
  1080. }
  1081. }
  1082. //更新当前产品工序【按钮】
  1083. const gylctz_gxdqcpgx = async () => {
  1084. console.log(gylctztableData)
  1085. const rawValueArray = gylctztableData.value;
  1086. const formattedData = rawValueArray.map(item => {
  1087. return {
  1088. workOrder:gylctzformData['gdbh'],
  1089. UniqId:item.UniqId,
  1090. gxh:item['工序号']
  1091. }
  1092. });
  1093. const ProcessCopy_edit = await ProcessCopy(formattedData);
  1094. if(ProcessCopy_edit.code === 0) {
  1095. ElMessage({type: 'success',message: '更新成功'})
  1096. } else {
  1097. ElMessage({type: 'error',message: '更新失败' })
  1098. }
  1099. gylctzlist.value = false;
  1100. };
  1101. //放弃操作【按钮】
  1102. const gylctzhandleCancel = () => {
  1103. gylctzlist.value = false;
  1104. };
  1105. // =========== 工序产量核算 ===========
  1106. const gxclhslist = ref(false);
  1107. const gxclhsformData = reactive({
  1108. gdbh: '',
  1109. });
  1110. //工序产量核算【按钮】
  1111. const oneditgxclhsclick = () => {
  1112. if(_Gd_gdbh.value == null){
  1113. gxclhslist.value = false;
  1114. ElMessage({type: 'warning',message: '请选择具体的工单后,再操作此功能'})
  1115. }else{
  1116. gxclhsformData['gdbh'] = _Gd_gdbh.value;
  1117. gxclhslist.value = true;
  1118. }
  1119. };
  1120. //工序产量核算【确定】(未完成)
  1121. const gxclhshandleConfirm = async () => {
  1122. console.log(gxclhsformData['gdbh'])
  1123. // const = await ({:gxclhsformData['gdbh']});
  1124. // if (.code === 0) {
  1125. // ElMessage({type: 'success', message: '更新成功'})
  1126. // } else {
  1127. // ElMessage({type: 'error',message: '更新失败'})
  1128. // }
  1129. // gxclhslist.value = false;
  1130. };
  1131. //工序产量核算【取消】
  1132. const gxclhshandleCancel = () => {gxclhslist.value = false;};
  1133. // =========== U8投料试算 ===========
  1134. const tlsslist = ref(false);
  1135. const tlsstableData = ref([]);
  1136. const tlssformData = reactive({
  1137. cpdh: '',
  1138. cpmc: '',
  1139. cpzs: '',
  1140. zytldzs: '',
  1141. mbhgl: '',
  1142. shs: '',
  1143. });
  1144. //点击U8投料试算【按钮】
  1145. const ontlssclick = () => {
  1146. //工单编号
  1147. if(_Gd_gdbh.value == null){
  1148. tlsslist.value = false;
  1149. ElMessage({type: 'warning',message: '请选择具体的工单后,再操作此功能'})
  1150. }else{
  1151. //产品代号
  1152. if( _Gd_cpdh.value === ''){
  1153. tlsslist.value = false;
  1154. ElMessage({type: 'warning',message: '该产品号未查询到'})
  1155. }else{
  1156. tlssformData['cpdh'] = _Gd_cpdh.value;
  1157. tlssformData['cpmc'] = _Gd_cpmc.value;
  1158. tlsslist.value = true;
  1159. _U8Trial();
  1160. }
  1161. }
  1162. };
  1163. //点击U8投料试算【回车】
  1164. const tlssgetProductValue = async () => {
  1165. _U8Trial();
  1166. };
  1167. //点击U8投料试算【成品张数回车】
  1168. const tlsscpzsgetProductValue = async () => {
  1169. console.log("成品张数回车")
  1170. };
  1171. //U8投料试算
  1172. const _U8Trial = async ()=>{
  1173. let productCode = tlssformData['cpdh'];
  1174. try {
  1175. const U8Trialdata = await U8Trial({productCode:productCode});
  1176. tlsstableData.value = U8Trialdata.data;
  1177. } catch (error) {
  1178. console.error(error);
  1179. }
  1180. }
  1181. //U8投料试算【退出】
  1182. const oncloneclick = () => {tlsslist.value = false;};
  1183. //===========工单状态设置按钮=======
  1184. const onstatuslist = ref(false);
  1185. const statusformData = reactive({gdbh: '',});
  1186. const status = ref('计划中'); // 默认选择
  1187. const onStatusClick = () => {
  1188. if(_Gd_gdbh.value === null || _Gd_gdbh.value === ''){
  1189. onstatuslist.value = false;
  1190. ElMessage({
  1191. type: 'warning',
  1192. message: '请选择树形后,再操作此功能'
  1193. })
  1194. }else{
  1195. statusformData['gdbh'] = _Gd_gdbh.value;
  1196. onstatuslist.value = true;
  1197. }
  1198. };
  1199. //工单状态设置【放弃按钮】
  1200. const handleCancel = () => {
  1201. onstatuslist.value = false;
  1202. };
  1203. //工单状态设置【执行按钮】
  1204. const handleConfirm = async () => {
  1205. //工单编号
  1206. let workOrder = statusformData['gdbh'];
  1207. //状态
  1208. let statusCode;
  1209. if (status.value === '计划中') {
  1210. statusCode = "3-计划中";
  1211. } else if (status.value === '生产中') {
  1212. statusCode = "2-生产中";
  1213. }else if (status.value === '已完工') {
  1214. statusCode = "1-已完工";
  1215. }
  1216. const StatusEditdata = await StatusEdit({workOrder:workOrder,status:statusCode});
  1217. if (StatusEditdata.code === 0) {
  1218. ElMessage({type: 'success',message: '更新成功'})
  1219. } else {
  1220. ElMessage({type: 'error',message: '更新失败'})
  1221. }
  1222. onstatuslist.value = false;
  1223. };
  1224. // =========== 引用产品资料 ===========
  1225. const yycpzlformData = reactive({
  1226. gdbh: '',
  1227. khdh: '',
  1228. khmc: '',
  1229. cpdh: '',
  1230. cpmc: '',
  1231. yjzl:true,
  1232. gyap: true,
  1233. gyfa: '',
  1234. fangan: 'A',
  1235. });
  1236. const onyycpzllist = ref(false);
  1237. const fanganRef = ref();
  1238. const yyzltableData = ref([]);
  1239. //引用产品资料【按钮】
  1240. const onyycpzlclick = () => {
  1241. if(_Gd_gdbh.value == null){
  1242. onyycpzllist.value = false;
  1243. ElMessage({type: 'warning',message: '请选择具体的工单后,再操作此功能'})
  1244. }else{
  1245. yycpzlformData['gdbh'] = _Gd_gdbh.value;
  1246. // yycpzlformData['cpdh'] = _Gd_cpdh.value;
  1247. yyzltableData.value = [];
  1248. _WorkOrderDetailCopedata();
  1249. onyycpzllist.value = true;
  1250. }
  1251. };
  1252. //引用产品资料工单编号【回车】
  1253. const yycpzlProductValue = async (e) => {
  1254. if (e.code === 'Enter') {
  1255. if (yycpzlformData['gdbh'] == null || yycpzlformData['gdbh'] == '') {
  1256. ElMessage({ type: 'warning', message: '工单编号不能为空' })
  1257. return false;
  1258. }
  1259. await _DetailCope();
  1260. }
  1261. if (e.code === 'Tab') {
  1262. await _WorkOrderDetailCopedata()
  1263. fanganKeyDown()
  1264. }
  1265. };
  1266. // const fanganProductValue = async (e) => {
  1267. // if (e.code === 'Tab') {
  1268. // console.log(123)
  1269. // await _WorkOrderDetailCopedata()
  1270. // fanganRef.value.focus()
  1271. // }
  1272. // };
  1273. const WorkOrderDetailCopesFangan = ref([])
  1274. const defaultSelectionFangan = ref()
  1275. //引用产品资料->获取产品资料
  1276. const _WorkOrderDetailCopedata = async ()=>{
  1277. let search = yycpzlformData['gdbh'];
  1278. // 2403725 是带两个方案的
  1279. const WorkOrderDetailCopes = await ProductCopeDetail({workorder:search});
  1280. console.log(WorkOrderDetailCopes)
  1281. // fanganRef.value.focus()
  1282. if(WorkOrderDetailCopes.msg === '未找到工单信息'){
  1283. yycpzlformData['khdh'] = '';
  1284. yycpzlformData['khmc'] = '';
  1285. yycpzlformData['cpdh'] = '';
  1286. yycpzlformData['cpmc'] = '';
  1287. // ElMessage({type: 'warning',message: '未找到工单信息'})
  1288. return false;
  1289. }else{
  1290. yycpzlformData['gdbh'] = WorkOrderDetailCopes.data['工单编号'];
  1291. yycpzlformData['khdh'] = WorkOrderDetailCopes.data['客户编号'];
  1292. yycpzlformData['khmc'] = WorkOrderDetailCopes.data['客户名称'];
  1293. yycpzlformData['cpdh'] = WorkOrderDetailCopes.data['产品编号'];
  1294. yycpzlformData['cpmc'] = WorkOrderDetailCopes.data['产品名称'];
  1295. yycpzlformData['fangan'] = WorkOrderDetailCopes.data['方案'][0]['方案'];
  1296. defaultSelectionFangan.value = WorkOrderDetailCopes.data['方案'][0]['方案']
  1297. WorkOrderDetailCopesFangan.value = WorkOrderDetailCopes.data['方案']
  1298. }
  1299. }
  1300. // const yycppshuaxin_click = async ()=>{
  1301. // let search = yycpzlformData['gdbh'];
  1302. // console.log(search)
  1303. // const WorkOrderDetailCope_table = await WorkOrderDetailCope({search:search});
  1304. // console.log(WorkOrderDetailCope_table)
  1305. // yyzltableData.value = WorkOrderDetailCope_table.data
  1306. // }
  1307. const _DetailCope = async (row)=>{
  1308. let search = yycpzlformData['gdbh'];
  1309. console.log(search)
  1310. const WorkOrderDetailCope_table = await WorkOrderDetailCope({search:search});
  1311. console.log(WorkOrderDetailCope_table)
  1312. yyzltableData.value = WorkOrderDetailCope_table.data
  1313. }
  1314. const yyzltableRowClick = async (row)=>{
  1315. yycpzlformData['gdbh'] = row['工单编号'];
  1316. _WorkOrderDetailCopedata();
  1317. }
  1318. const setFangan = (node) => {
  1319. yycpzlformData['fangan'] = node['方案']
  1320. defaultSelectionFangan.value = node['方案']
  1321. document.removeEventListener('keydown', () => {})
  1322. openFangan.value = false
  1323. }
  1324. const openFangan = ref(false)
  1325. const fanganKeyDown = () => {
  1326. //2403725
  1327. if (WorkOrderDetailCopesFangan.value.length > 1) {
  1328. openFangan.value = true
  1329. document.addEventListener('keydown', (e) => {
  1330. let currentIndex
  1331. WorkOrderDetailCopesFangan.value.map( (item, index) => {
  1332. if (item['方案'] === defaultSelectionFangan.value[0]) {
  1333. currentIndex = index
  1334. }
  1335. })
  1336. if (e.code === 'ArrowDown') {
  1337. if (WorkOrderDetailCopesFangan.value[currentIndex + 1]) {
  1338. defaultSelectionFangan.value = WorkOrderDetailCopesFangan.value[currentIndex + 1]['方案']
  1339. } else {
  1340. defaultSelectionFangan.value = WorkOrderDetailCopesFangan.value[0]['方案']
  1341. }
  1342. }
  1343. if (e.code === 'ArrowUp') {
  1344. if (WorkOrderDetailCopesFangan.value[currentIndex - 1]) {
  1345. defaultSelectionFangan.value = WorkOrderDetailCopesFangan.value[currentIndex - 1]['方案']
  1346. } else {
  1347. defaultSelectionFangan.value = WorkOrderDetailCopesFangan.value[WorkOrderDetailCopesFangan.value.length - 1]['方案']
  1348. }
  1349. }
  1350. if (e.code === 'Enter') {
  1351. yycpzlformData['fangan'] = defaultSelectionFangan.value
  1352. console.log(12312312312312321321321321)
  1353. document.removeEventListener('keydown', (e) => {
  1354. console.log(e)
  1355. })
  1356. openFangan.value = false
  1357. }
  1358. })
  1359. }
  1360. }
  1361. //引用产品资料【执行】按钮
  1362. const yycpzlhandleConfirm = async () => {
  1363. _ProductInformationEdit();
  1364. };
  1365. //引用产品资料->获取产品资料
  1366. const _ProductInformationEdit = async ()=>{
  1367. console.log(yycpzlformData)
  1368. if(yycpzlformData['gdbh'] === null || yycpzlformData['gdbh'] === undefined){
  1369. ElMessage({type: 'warning', message: '工单编号为空'});
  1370. return false;
  1371. }
  1372. if(yycpzlformData['cpdh'] === null || yycpzlformData['cpdh'] === undefined){
  1373. ElMessage({type: 'warning', message: '产品代号为空'});
  1374. return false;
  1375. }
  1376. if(yycpzlformData['fangan'] === null || yycpzlformData['fangan'] === undefined){
  1377. ElMessage({type: 'warning', message: '工艺方案为空'});
  1378. return false;
  1379. }
  1380. let params = {}
  1381. params.workorder = _Gd_gdbh.value;
  1382. params.productCode = yycpzlformData['cpdh'];
  1383. params.option = yycpzlformData['fangan'];
  1384. console.log(params)
  1385. try {
  1386. const ProductInformationEditdata = await WorkOrderDetailListCope(params);
  1387. if (ProductInformationEditdata.code === 0) {
  1388. const workOrderListDetail_data = await workOrderListDetail({Gd_gdbh:_Gd_gdbh.value});
  1389. yjtableData.value = workOrderListDetail_data.data.printList;
  1390. ElMessage({type: 'success', message: '更新成功'})
  1391. onyycpzllist.value = false;
  1392. }
  1393. // else {
  1394. // ElMessage({type: 'error',message: '更新失败'})
  1395. // }
  1396. } catch (error) {
  1397. console.error(error);
  1398. }
  1399. }
  1400. //引用产品资料【放弃】
  1401. const yycpzlhandleCancel = () => {onyycpzllist.value = false;};
  1402. // =========== 左侧树侧形结构 ===========
  1403. const treeData = ref([]);
  1404. //工单资料菜单列表
  1405. const DataListdata = async () => {
  1406. try {
  1407. const response = await OutputSstatisticsMenu();
  1408. const dataList = response.data;
  1409. dataList.forEach((item) => {
  1410. let obj = {};
  1411. obj.label = item.date;
  1412. obj.children = [];
  1413. item.sbbh.forEach((child) => {
  1414. obj.children.push({label: child});
  1415. });
  1416. treeData.value.push(obj);
  1417. });
  1418. } catch (error) {
  1419. console.error(error);
  1420. }
  1421. };
  1422. // const DataListdata = async () => {
  1423. // try {
  1424. // const data = await DataList();
  1425. // for (let key in data.data) {
  1426. // // 忽略 "productingAll" 和 "progressAll"
  1427. // if (key !== "productingAll" && key !== "progressAll") {
  1428. // let temp = data.data[key];
  1429. // let object = {};
  1430. // object.id = temp[0];
  1431. // object.label = data.data[key];
  1432. // object.children = [];
  1433. // treeData.data.push(object);
  1434. // }
  1435. // }
  1436. // } catch (error) {
  1437. // console.error(error);
  1438. // }
  1439. // };
  1440. DataListdata();
  1441. //点击左侧树形获取编号
  1442. const tableData = reactive([])
  1443. const _Gd_khdh = ref(null)
  1444. const params = ref({})
  1445. const params2 = ref({})
  1446. const tabledate2 = ref([])
  1447. const datelist = ref()
  1448. const jqtabledata = ref()
  1449. const handleNodeClick = async (node) => {
  1450. // 取消所有节点的颜色
  1451. const allNodes = document.querySelectorAll('.treecolor .el-tree-node');
  1452. allNodes.forEach(node => {
  1453. node.querySelector('.el-tree-node__label').style.color = '';
  1454. });
  1455. // 获取点击的节点
  1456. const clickedNodeId = node['$treeNodeId'];
  1457. const clickedNode = document.querySelector(`.treecolor .el-tree-node[data-key="${clickedNodeId}"]`);
  1458. if (clickedNode) {
  1459. // 给当前点击的节点改变颜色
  1460. clickedNode.querySelector('.el-tree-node__label').style.color = 'red';
  1461. }
  1462. tabledate2.value=[]
  1463. if(node.children !==undefined ){
  1464. params.value.mouth= node.label
  1465. }
  1466. if (node.children === undefined){
  1467. params.value.sist = node.label
  1468. ProductList(params.value)
  1469. }
  1470. // _WorkList_page();
  1471. };
  1472. const ProductList = async(params)=>{
  1473. try {
  1474. const ProductListData = await MachineProduction(params);
  1475. datelist.value = ProductListData.data.head
  1476. let data = ProductListData.data.total
  1477. data.forEach(item => {
  1478. item.forEach(element => {
  1479. tabledate2.value.push(element)
  1480. });
  1481. });
  1482. tabledate2.value = tabledate2.value.map(item => {
  1483. // 使用扩展运算符(...)来合并原始对象(排除day_total)和day_total对象
  1484. return {
  1485. ...item, // 保留原始对象中的所有属性(除了day_total)
  1486. ...item.day_total, // 将day_total对象的所有属性添加到结果对象中
  1487. };
  1488. }).map(item => {
  1489. // 删除可能残留的day_total键(如果原始对象中有其他不相关的day_total属性)
  1490. delete item.day_total;
  1491. return item;
  1492. });
  1493. } catch (error) {
  1494. console.error(error);
  1495. }
  1496. }
  1497. //查询
  1498. const searchInfo = ref('')
  1499. //查询按钮
  1500. const onSubmit = () => {
  1501. _cha_WorkList();
  1502. };
  1503. const handleSearch = () => {
  1504. console.log(1231)
  1505. _cha_WorkList();
  1506. };
  1507. const _cha_WorkList = async (node) => {
  1508. if(searchInfo.value === ''){
  1509. ElMessage({type: 'warning',message: '请输入搜索的信息'})
  1510. return false;
  1511. }
  1512. const search = searchInfo.value;
  1513. var regex = /^[a-zA-Z0-9]+$/;
  1514. try {
  1515. if (regex.test(search)) {
  1516. // 符合条件,执行搜索操作
  1517. console.log('搜索内容为纯数字加字母');
  1518. const WorkListdata = await WorkList({search:search,limit:100,page:1});//接口调用函数
  1519. if(WorkListdata.data.total === 0){
  1520. ElMessage({type: 'warning',message: '未搜索具体查询条件'})
  1521. }
  1522. tableData.splice(0,tableData.length,...WorkListdata.data.data);//表格数据
  1523. total.value = WorkListdata.data.total;//共多少条
  1524. } else {
  1525. // 不符合条件,给出提示
  1526. console.log('搜索内容包含非字母和数字的字符');
  1527. const WorkListdata = await WorkList({Gd_khdh:'',search:search,limit:100,page:1});//接口调用函数
  1528. if(WorkListdata.data.total === 0){
  1529. ElMessage({type: 'warning',message: '未搜索具体查询条件'})
  1530. }
  1531. tableData.splice(0,tableData.length,...WorkListdata.data.data);//表格数据
  1532. total.value = WorkListdata.data.total;//共多少条
  1533. }
  1534. } catch (error) {
  1535. console.error(error);
  1536. }
  1537. };
  1538. // 分页
  1539. const page = ref(1)
  1540. const total = ref(0)
  1541. const pageSize = ref(50)
  1542. const handleCurrentChange = (val) => {
  1543. page.value = val;
  1544. _WorkList_page();
  1545. };
  1546. // 修改页面容量 点击多少条/页
  1547. const handleSizeChange = (val) => {
  1548. // page.value = 10;
  1549. pageSize.value = val;
  1550. _WorkList_page();
  1551. };
  1552. //点击表格行获取下方表格数据列表
  1553. //印件资料
  1554. const yjtableData = ref([])
  1555. //工艺资料
  1556. const gytableData = ref([])
  1557. //BOM资料
  1558. const bomtableData = ref([])
  1559. //技术资料附件【暂时为空】
  1560. const jstableData = reactive([])
  1561. //全局调用工单编号
  1562. const _Gd_gdbh = ref(null)
  1563. //全局调用产品代号
  1564. const _Gd_cpdh = ref(null)
  1565. //全局调用产品名称
  1566. const _Gd_cpmc = ref(null)
  1567. //机台生产工单
  1568. const tableRowClick = async (row) => {
  1569. jqtabledata.value=null
  1570. params2.value.machine= row.sczl_jtbh
  1571. params2.value.mouth = params.value.mouth
  1572. params2.value.team = row.sczl_bzdh
  1573. const Machineoutput = await MachineProductDetail (params2.value)
  1574. jqtabledata.value = Machineoutput.data
  1575. console.log(jqtabledata.value);
  1576. // _Gd_gdbh.value = row.工单编号;
  1577. // _Gd_cpdh.value = row.产品代号;
  1578. // _Gd_cpmc.value = row.产品名称;
  1579. // const workOrderListDetail_data = await workOrderListDetail({Gd_gdbh:_Gd_gdbh.value});
  1580. // yjtableData.value = workOrderListDetail_data.data.printList;
  1581. // gytableData.value = workOrderListDetail_data.data.processList;
  1582. // bomtableData.value = workOrderListDetail_data.data.BOM;
  1583. // jstableData.splice(0, jstableData.length, ...workOrderListDetail_data.data.jsData);
  1584. // jstableData.value = workOrderListDetail_data.data.jsData;
  1585. let tmp = yjtableData.value.map(item => item.印件号)
  1586. tmp = tmp.sort((a,b)=>b-a)
  1587. yjzuidahaoma.value = Number(tmp[0]) + 1
  1588. };
  1589. // 行为控制标记(弹窗内部需要增还是改)
  1590. const type = ref('')
  1591. //=========表格列表修改========
  1592. let scgdformData = ref({})
  1593. //双击修改
  1594. const updateCompanyFunc = async(row) => {
  1595. console.log(row)
  1596. // if(row['status'] === '*'){
  1597. // ElMessage({ type: 'warning', message: '未找到该工单印件资料' });
  1598. // return false;
  1599. // }else{
  1600. const DataCorrection_list = await DataCorrection({ Gd_gdbh:row['工单编号']});
  1601. console.log(DataCorrection_list)
  1602. scgdformData.value = DataCorrection_list.data;
  1603. dialogFormVisible.value = true
  1604. // }
  1605. }
  1606. // 弹窗控制标记
  1607. const dialogFormVisible = ref(false)
  1608. // 修改工单资料确定
  1609. const enterDialog = async () => {
  1610. const zdgx = /^[A-Za-z0-9\u4e00-\u9fa5\s]*$/.test(scgdformData.value['重点工单']);
  1611. if (!zdgx) {
  1612. ElMessage({ type: 'warning', message: '重点工单数据中 只允许出现中文、数字、空格' });
  1613. return false;
  1614. }
  1615. const kdrqdeliveryDate = new Date(scgdformData.value['开单日期']);
  1616. const kdrq = kdrqdeliveryDate.getFullYear() + '-' +
  1617. (kdrqdeliveryDate.getMonth() + 1).toString().padStart(2, '0') + '-' +
  1618. kdrqdeliveryDate.getDate().toString().padStart(2, '0') + ' ' +
  1619. kdrqdeliveryDate.getHours().toString().padStart(2, '0') + ':' +
  1620. kdrqdeliveryDate.getMinutes().toString().padStart(2, '0') + ':' +
  1621. kdrqdeliveryDate.getSeconds().toString().padStart(2, '0');
  1622. const jhrqdeliveryDate = new Date(scgdformData.value['交货日期']);
  1623. const jhrq = jhrqdeliveryDate.getFullYear() + '-' +
  1624. (jhrqdeliveryDate.getMonth() + 1).toString().padStart(2, '0') + '-' +
  1625. jhrqdeliveryDate.getDate().toString().padStart(2, '0') + ' ' +
  1626. jhrqdeliveryDate.getHours().toString().padStart(2, '0') + ':' +
  1627. jhrqdeliveryDate.getMinutes().toString().padStart(2, '0') + ':' +
  1628. jhrqdeliveryDate.getSeconds().toString().padStart(2, '0');
  1629. const formattedData = {
  1630. lx: scgdformData.value['重点工单'],
  1631. kdrq: kdrq,
  1632. gdbh: scgdformData.value['工单编号'],
  1633. scfl: scgdformData.value['生产类型'],
  1634. khdh: scgdformData.value['客户代号'],
  1635. khmc: scgdformData.value['客户名称'],
  1636. cpdh: scgdformData.value['产品代号'],
  1637. cpmc: scgdformData.value['产品名称'],
  1638. ddsl: scgdformData.value['订单数量'],
  1639. jhrq: jhrq,
  1640. tll: scgdformData.value['投料率'],
  1641. jhtl: scgdformData.value['平张投料'],
  1642. sjtl: scgdformData.value['万小张'],
  1643. jldw: scgdformData.value['单位'],
  1644. tldx: scgdformData.value['投料大箱'],
  1645. xsddh: scgdformData.value['销售订单号'],
  1646. jymb: scgdformData.value['警语版面'],
  1647. bbh: scgdformData.value['版本号'],
  1648. erp: scgdformData.value['客户ERP编码'],
  1649. ymsl: scgdformData.value['码源数量'],
  1650. jcbz: scgdformData.value['进程备注'],
  1651. desc: scgdformData.value['备注'],
  1652. Uniqid: scgdformData.value['Uniqid'],
  1653. yjdh: scgdformData.value['印件代号'],
  1654. yjmc: scgdformData.value['印件名称'],
  1655. kc: scgdformData.value['库存大箱'],
  1656. avg:scgdformData.value['平均合格率'] === undefined ? '' : scgdformData.value['平均合格率'],
  1657. printID: scgdformData.value['印件ID'],
  1658. };
  1659. console.log(formattedData)
  1660. const WorkOrderEdit_edit = await WorkOrderEdit(formattedData);
  1661. if (WorkOrderEdit_edit.code === 0) {
  1662. dialogFormVisible.value = false
  1663. ElMessage({type: 'success',message: '更新成功' })
  1664. } else {
  1665. ElMessage({type: 'error', message: '更新失败'})
  1666. }
  1667. }
  1668. // 关闭弹窗
  1669. const closeDialog = () => {dialogFormVisible.value = false}
  1670. //=========印件列表修改========
  1671. // 弹窗控制标记
  1672. const gdyjdialogFormVisible = ref(false)
  1673. const gdyjformData = reactive({})
  1674. const edit_searchModel = ref(false)
  1675. const edit_searchZhiModel = ref(false)
  1676. const edit_zzdhIndex = ref(null)
  1677. const edit_getProductYjListdata = ref()
  1678. const edit_getProductZhiListdata = ref()
  1679. const edit_yjdh_keyword = ref('')
  1680. const edit_zhi_keyword = ref('')
  1681. //双击打开印件列表修改
  1682. const gdyjupdateCompanyFunc = async(row) => {
  1683. gdyjformData['开数'] = row['开数'];
  1684. gdyjformData['联数'] = row['联数'];
  1685. Object.assign(gdyjformData,row);
  1686. gdyjdialogFormVisible.value = true
  1687. }
  1688. //印件列表修改【确定】
  1689. const gdyjenterDialog = async () => {
  1690. const formattedData = {
  1691. Uniqid: gdyjformData['Uniqid'],
  1692. yjno: gdyjformData['印件号'] ? gdyjformData['印件号'] : "",
  1693. yjdh: gdyjformData['印件代号'] ? gdyjformData['印件代号'] : "",
  1694. yjmc: gdyjformData['印件名称'] ? gdyjformData['印件名称'] : "",
  1695. zzdh:gdyjformData['纸张代号'] ? gdyjformData['纸张代号'] : "",
  1696. zzmc:gdyjformData['纸张名称'] ? gdyjformData['纸张名称'] : "",
  1697. zzdh1:gdyjformData['zzdh1'] ? gdyjformData['zzdh1'] : "",
  1698. zzdh2:gdyjformData['zzdh2'] ? gdyjformData['zzdh2'] : "",
  1699. zzdh3:gdyjformData['zzdh3'] ? gdyjformData['zzdh3'] : "",
  1700. zzdh4:gdyjformData['zzdh4'] ? gdyjformData['zzdh4'] : "",
  1701. zzmc1:gdyjformData['zzmc1'] ? gdyjformData['zzmc1'] : "",
  1702. zzmc2:gdyjformData['zzmc2'] ? gdyjformData['zzmc2'] : "",
  1703. zzmc3:gdyjformData['zzmc3'] ? gdyjformData['zzmc3'] : "",
  1704. zzmc4:gdyjformData['zzmc4'] ? gdyjformData['zzmc4'] : "",
  1705. cpsl:gdyjformData['订单数量'] ? gdyjformData['订单数量'] : "",
  1706. pztl:gdyjformData['平张投料'] ? gdyjformData['平张投料'] : "",
  1707. sjtl:gdyjformData['万小张'] ? gdyjformData['万小张'] : "",
  1708. tlgg:gdyjformData['投料规格'] ? gdyjformData['投料规格'] : "",
  1709. klgg:gdyjformData['开料规格'] ? gdyjformData['开料规格'] : "",
  1710. ks:gdyjformData['开数'] ? gdyjformData['开数'] : "",
  1711. ls:gdyjformData['联数'] ? gdyjformData['联数'] : "",
  1712. hsgg:gdyjformData['核算规格'] ? gdyjformData['核算规格'] : "",
  1713. desc:gdyjformData['备注'] ? gdyjformData['备注'] : "",
  1714. };
  1715. const PrintedEdit_edit = await PrintedEdit(formattedData);
  1716. if (PrintedEdit_edit.code === 0) {
  1717. gdyjdialogFormVisible.value = false
  1718. ElMessage({type: 'success',message: '更新成功' })
  1719. let row = {
  1720. '工单编号':_Gd_gdbh.value,
  1721. '产品代号':_Gd_cpdh.value,
  1722. '产品名称':_Gd_cpmc.value,
  1723. }
  1724. tableRowClick (row)
  1725. } else {
  1726. ElMessage({type: 'error', message: '更新失败'})
  1727. }
  1728. }
  1729. // 印件列表修改【关闭弹窗】
  1730. const gdyjcloseDialog = () => {
  1731. gdyjdialogFormVisible.value = false
  1732. }
  1733. //印件修改【印件代码】树状图
  1734. const edit_handleTreeData = (treeData) => {
  1735. const data = Object.keys(treeData).map((key)=>({
  1736. label:key,
  1737. children: Object.keys(treeData[key]).map((keys)=>({
  1738. label:keys,
  1739. children:treeData[key][keys].map(item=>({
  1740. label:`${item.物料代码} ${item.物料名称}`,
  1741. 物料代码:item.物料代码,
  1742. 物料名称:item.物料名称
  1743. }))
  1744. }))
  1745. }))
  1746. return data
  1747. }
  1748. //印件修改【纸张】树状图
  1749. const edit_handleTreeDatas = (treeData) => {
  1750. const data = Object.keys(treeData).map((key)=>({
  1751. label:key,
  1752. children: Object.keys(treeData[key]).map((keys)=>({
  1753. label:keys,
  1754. children:Object.keys(treeData[key][keys]).map((keyss)=>({
  1755. label:keyss,
  1756. children:treeData[key][keys][keyss].map(item=>({
  1757. label:`${item.物料代码} ${item.物料名称}`,
  1758. 规格:item.规格,
  1759. 物料代码:item.物料代码,
  1760. 物料名称:item.物料名称
  1761. }))
  1762. }))
  1763. }))
  1764. }))
  1765. return data
  1766. }
  1767. //3.4获取印件代码及名称
  1768. const edit_getProductYjList = async ()=>{
  1769. try {
  1770. const response = await getProductYjList({search:''});
  1771. edit_getProductYjListdata.value = edit_handleTreeData(response.data)
  1772. } catch (error) {
  1773. console.error(error);
  1774. }
  1775. }
  1776. //3.5获取纸张代号及名称
  1777. const edit_getProductZzList = async (v)=>{
  1778. console.log(v)
  1779. try {
  1780. const response = await getProductZzList({search:v});
  1781. edit_getProductZhiListdata.value = edit_handleTreeDatas(response.data)
  1782. } catch (error) {
  1783. console.error(error);
  1784. }
  1785. }
  1786. //3.4获取印件代码及名称
  1787. const edit_searchHandle = async (v) => {
  1788. const response = await getProductYjList({search:v});
  1789. edit_getProductYjListdata.value = edit_handleTreeData(response.data)
  1790. }
  1791. //3.5获取纸张代号及名称
  1792. const edit_searchZhiHandle = async(v) => {
  1793. const response = await getProductZzList({search:v});
  1794. edit_getProductZhiListdata.value = edit_handleTreeDatas(response.data)
  1795. }
  1796. //印件代码tab 点击事件
  1797. const edit_selectNode = (v) => {
  1798. if(v.物料名称){
  1799. gdyjformData['印件代号'] = v.物料代码
  1800. gdyjformData['印件名称'] = v.物料名称
  1801. edit_searchModel.value= false
  1802. }
  1803. }
  1804. //纸张tab 点击事件
  1805. const edit_selectZhiNode = (v) => {
  1806. if(v.物料名称){
  1807. if (edit_zzdhIndex.value == 0) {
  1808. gdyjformData['纸张代号'] = v.物料代码
  1809. gdyjformData['纸张名称'] = v.物料名称
  1810. gdyjformData['投料规格'] = v.规格
  1811. } else {
  1812. gdyjformData['备用纸张' + edit_zzdhIndex.value] = v.物料代码
  1813. gdyjformData['纸张名称' + edit_zzdhIndex.value + edit_zzdhIndex.value] = v.物料名称
  1814. }
  1815. edit_searchZhiModel.value = false
  1816. }
  1817. }
  1818. //修改印件表格input
  1819. const edit_gdyjent = (event,id1,id2,id3,idx) => {
  1820. if (id2 === '印件代号' && event.key==='Tab' || id2 === '印件代号' && event.key=== 'Enter') {
  1821. edit_getProductYjList();
  1822. edit_searchModel.value = true
  1823. }
  1824. if(id2=='平张投料' && event.key==='Tab' || id2 === '平张投料' && event.key=== 'Enter'){
  1825. gdyjformData.万小张 = gdyjformData.平张投料*gdyjformData.联数/10000
  1826. }
  1827. if(id2=='联数' && event.key==='Tab' || id2 === '联数' && event.key=== 'Enter'){
  1828. gdyjformData.万小张 = gdyjformData.平张投料*gdyjformData.联数/10000
  1829. }
  1830. if (id2 === '纸张代号' && event.key==='Tab' || id2 === '纸张代号' && event.key=== 'Enter') {
  1831. edit_getProductZzList(gdyjformData['纸张代号'])
  1832. edit_searchZhiModel.value = true
  1833. edit_zzdhIndex.value = idx
  1834. }
  1835. if (id2 === '备用纸张1' && event.key==='Tab' || id2 === '备用纸张1' && event.key=== 'Enter') {
  1836. edit_getProductZzList(gdyjformData['备用纸张1'])
  1837. edit_searchZhiModel.value = true
  1838. edit_zzdhIndex.value = idx
  1839. }
  1840. if (id2 === '备用纸张2' && event.key==='Tab' || id2 === '备用纸张2' && event.key=== 'Enter') {
  1841. edit_getProductZzList(gdyjformData['备用纸张2'])
  1842. edit_searchZhiModel.value = true
  1843. edit_zzdhIndex.value = idx
  1844. }
  1845. if (id2 === '备用纸张3' && event.key==='Tab' || id2 === '备用纸张3' && event.key=== 'Enter') {
  1846. edit_getProductZzList(gdyjformData['备用纸张3'])
  1847. edit_searchZhiModel.value = true
  1848. edit_zzdhIndex.value = idx
  1849. }
  1850. if (id2 === '备用纸张4' && event.key==='Tab' || id2 === '备用纸张4' && event.key=== 'Enter') {
  1851. edit_getProductZzList(gdyjformData['备用纸张4'])
  1852. edit_searchZhiModel.value = true
  1853. edit_zzdhIndex.value = idx
  1854. }
  1855. if(event.keyCode === 40){
  1856. if(id3!=''){
  1857. document.getElementById(id3).focus()
  1858. }
  1859. }else if (event.keyCode === 13) { // Enter 或向下箭头
  1860. if(id3!=''){
  1861. document.getElementById(id3).focus()
  1862. }
  1863. } else if (event.keyCode === 38) { // 向上箭头
  1864. if(id1!=''){
  1865. document.getElementById(id1).focus()
  1866. }
  1867. }else if (event.keyCode === 8) { // 删除箭头
  1868. if(id1!='' && document.getElementById(id2).value==''){
  1869. document.getElementById(id1).focus()
  1870. }
  1871. // console.log(document.getElementById(id2).value)
  1872. }else if (event.keyCode === 37) { // 向左箭头
  1873. if(id1!='' && document.getElementById(id2).selectionStart==0){
  1874. document.getElementById(id1).focus()
  1875. }
  1876. }else if (event.keyCode === 39) { // 向右箭头
  1877. if(id3!='' && document.getElementById(id2).selectionStart == document.getElementById(id2).value.length){
  1878. document.getElementById(id3).focus()
  1879. }
  1880. }
  1881. }
  1882. //=========修改工艺资料========
  1883. const gdgydialogFormVisible = ref(false)
  1884. const _capacityListsbbh = ref(null)
  1885. const gdgyformData = reactive({})
  1886. const gdzl_MachineList_address = reactive({
  1887. data: []
  1888. });
  1889. const _cjmc = ref(null);
  1890. // //双击修改
  1891. // const gdgyupdateCompanyFunc = async(row) => {
  1892. // gdgydialogFormVisible.value = true
  1893. // Object.assign(gdgyformData,row);
  1894. // const apiData = await getDepartName()
  1895. // function transformDataToTreeFormat(data) {
  1896. // return Object.entries(data).map(([key, value]) => {
  1897. // // key是车间名称,value是车间内的操作列表
  1898. // const children = Object.entries(value).map(([workshop, operations]) => ({
  1899. // label: workshop,
  1900. // children: operations.map(operation => ({
  1901. // label: operation,
  1902. // value: operation // 可以根据需要添加更多属性
  1903. // }))
  1904. // }));
  1905. // return { label: key, children };
  1906. // });
  1907. // }
  1908. // // 使用ref来管理转换后的数据
  1909. // cjList.value = ref(transformDataToTreeFormat(apiData.data));
  1910. // const res = await PrintDetailList({workOrder: _Gd_gdbh.value})
  1911. // yjList.value = res.data
  1912. // if(row['车间名称']){
  1913. // _cjmc.value = row['车间名称']
  1914. // }else{
  1915. // _cjmc.value = '';
  1916. // }
  1917. // gdgyformData['设备编号'] = []
  1918. // //通过车间名称查询机台
  1919. // const MachineList_jitai = await gdzl_MachineList({address:_cjmc.value});
  1920. // if(MachineList_jitai.data === null || MachineList_jitai.data === ''){
  1921. // ElMessage({type: 'warning', message: '未找到该车间机台'})
  1922. // return false;
  1923. // }
  1924. // const jitai = row['机台编号'].split(' ')
  1925. // jitai.map(item => {
  1926. // MachineList_jitai.data.map(jt => {
  1927. // if (jt.indexOf(item) > -1 && item !== '') {
  1928. // gdgyformData['设备编号'].push(item)
  1929. // }
  1930. // })
  1931. // })
  1932. // gdzl_MachineList_address.data = MachineList_jitai.data;
  1933. // // 示例字符串
  1934. // const processName = row['工序名称'];
  1935. // // 初始化工艺名称和工序名称
  1936. // let technologyName = '';
  1937. // let operationName = '';
  1938. // // 检查字符串中是否包含【】
  1939. // const bracketIndex = processName.indexOf('【');
  1940. // if (bracketIndex !== -1) {
  1941. // // 如果包含【】,则分割字符串
  1942. // technologyName = processName.substring(0, bracketIndex).trim();
  1943. // operationName = processName.substring(bracketIndex + 1, processName.indexOf('】')).trim();
  1944. // } else {
  1945. // // 如果没有【】,则整个字符串是工艺名称,工序名称为空
  1946. // technologyName = processName.trim();
  1947. // }
  1948. // // 示例字符串
  1949. // const printProcess = row['印件-工序'];
  1950. // // 初始化印件和工序
  1951. // let yinjian = '';
  1952. // let gongxu = '';
  1953. // // 检查字符串中是否包含 "-"
  1954. // const dashIndex = printProcess.indexOf('-');
  1955. // if (dashIndex !== -1) {
  1956. // // 如果包含 "-",则分割字符串
  1957. // yinjian = printProcess.substring(0, dashIndex).trim();
  1958. // gongxu = printProcess.substring(dashIndex + 1).trim();
  1959. // } else {
  1960. // // 如果没有 "-",则整个字符串是印件,工序为空
  1961. // yinjian = printProcess.trim();
  1962. // }
  1963. // gdgyformData['印件'] = yinjian;
  1964. // gdgyformData['工序'] = gongxu;
  1965. // gdgyformData['工艺名称'] = technologyName;
  1966. // gdgyformData['工序名称'] = operationName;
  1967. // if(row.备选工序==1){
  1968. // gdgyformData.备选工序 = true
  1969. // }
  1970. // }
  1971. //工艺列表修改【确定】
  1972. const gdgyenterDialog = async () => {
  1973. if(_Gd_gdbh.value){
  1974. const selectedValuesAsString = gdgyformData['设备编号'].join(' ');
  1975. // if(gdgyformData['shdh'] === ''){
  1976. // ElMessage({type: 'warning', message: '工序损耗不能为空'})
  1977. // return false;
  1978. // }
  1979. // if(gdgyformData['小时产能'] === '' || gdgyformData['小时产能'] === "0"){
  1980. // ElMessage({type: 'warning', message: '排产小时产能 不能为空或0'})
  1981. // return false;
  1982. // }
  1983. // if(gdgyformData['设备编号'] === '' || gdgyformData['设备编号'] === "0"){
  1984. // ElMessage({type: 'warning', message: '设备编号 不能为空'})
  1985. // return false;
  1986. // }
  1987. let sbbh = gdgyformData['设备编号'].join(' ');
  1988. const formattedData = {
  1989. UniqId: gdgyformData['UniqId'],
  1990. Gy0_gdbh: _Gd_gdbh.value,
  1991. Gy0_方案: 'A',
  1992. Gy0_yjno: gdgyformData['印件'] ? gdgyformData['印件'] : "",
  1993. Gy0_gxh: gdgyformData['工序'] ? gdgyformData['工序'] : "",
  1994. Gy0_gxmc:gdgyformData['工艺名称'] ? gdgyformData['工艺名称'] : "",
  1995. Add_gxmc:gdgyformData['工序名称'] ? gdgyformData['工序名称'] : "",
  1996. 备选工序: gdgyformData['备选工序'] ? "1" : "0",
  1997. 重点工序: gdgyformData['重点工序'] ? gdgyformData['重点工序'] : "",
  1998. Gy0_sbbh: sbbh ? sbbh : "",
  1999. Gy0_sbmc: "",
  2000. Gy0_SITE: gdgyformData['车间名称'] ? gdgyformData['车间名称'] : "",
  2001. Gy0_ks: gdgyformData['开数'] ? gdgyformData['开数'] : "",
  2002. Gy0_ls: gdgyformData['联数'] ? gdgyformData['联数'] : "",
  2003. Gy0_ms: gdgyformData['计损色数'] ? gdgyformData['计损色数'] : 0,
  2004. Sys_id : _username.value,
  2005. 工价系数: gdgyformData['难度系数'] ? gdgyformData['难度系数'] : 0,
  2006. 损耗系数: gdgyformData['损耗系数'] ? gdgyformData['损耗系数'] : 0,
  2007. Gy0_shdh: gdgyformData['shdh'] ? gdgyformData['shdh'] : "",
  2008. Gy0_Rate1: "",
  2009. Gy0_小时产能: gdgyformData['小时产能'] ? gdgyformData['小时产能'] : "",
  2010. Gy0_辅助工时: gdgyformData['辅助工时'] ? gdgyformData['辅助工时'] : "",
  2011. 工序备注: gdgyformData['备注'] ? gdgyformData['备注'] : "",
  2012. 质量要求: gdgyformData['质量要求'] ? gdgyformData['质量要求'] : "",
  2013. 质量隐患: gdgyformData['质量隐患'] ? gdgyformData['质量隐患'] : "",
  2014. };
  2015. const ProcessDetailEdit_edit = await ProcessDetailEdit(formattedData);
  2016. if (ProcessDetailEdit_edit.code === 0) {
  2017. ElMessage({type: 'success',message: '更新成功' })
  2018. gdgydialogFormVisible.value = false
  2019. let row = {
  2020. '工单编号':_Gd_gdbh.value,
  2021. '产品代号':_Gd_cpdh.value,
  2022. '产品名称':_Gd_cpmc.value,
  2023. }
  2024. tableRowClick (row)
  2025. } else {
  2026. ElMessage({type: 'error', message: '更新失败'})
  2027. }
  2028. }else{
  2029. ElMessage({type: 'error', message: '更新失败'})
  2030. }
  2031. gdgyformData['设备编号'] = [];
  2032. }
  2033. //工艺列表修改【关闭弹窗】
  2034. const gdgycloseDialog = () => {
  2035. gdgyformData['设备编号'] = [];
  2036. gdgydialogFormVisible.value = false
  2037. }
  2038. //点击设备编号
  2039. const sbbhclick = () => {
  2040. _capacityList();
  2041. }
  2042. const _capacityList = async () => {
  2043. if(gdgyformData['设备编号'] === ''){
  2044. return false;
  2045. }else{
  2046. _capacityListsbbh.value = gdgyformData['设备编号'].join(' ');
  2047. const editProductedit_machine = await capacityList({machine:_capacityListsbbh.value});
  2048. gdgyformData['小时产能'] = editProductedit_machine.data;
  2049. }
  2050. };
  2051. //截取印件前两位
  2052. const clickybupdate2 = (row,column,event) => {
  2053. currentGy0_yjno.value = row['印件-工序'].substr(0, 2)
  2054. }
  2055. const yjdisplay = ref(false)
  2056. const yjList = ref()
  2057. const shxsdisplay = ref(false)
  2058. const cjList = ref([])
  2059. const cjdisplay = ref(false)
  2060. //修改工艺资料弹窗 键盘 input框跳转
  2061. const gyzlent = (event,id1,id2,id3) => {
  2062. if (id2==='印件编号' && event.key==='Tab' || id2 === '印件编号' && event.key=== 'Enter') {
  2063. console.log(id.value)
  2064. console.log(form['yjno'])
  2065. const response = getCouplet({ gdbh:id.value,yjno:form['yjno']});
  2066. console.log(response)
  2067. gdgyformData['开数'] = response.data['开数']
  2068. gdgyformData['联数'] = response.data['联数']
  2069. if(yjList.value !== undefined){
  2070. const node = yjList.value.find(item => item.no ===gdgyformData['yjno'])
  2071. if (! node) {
  2072. yjdisplay.value = true
  2073. }
  2074. document.getElementById(id3).focus()
  2075. }
  2076. }
  2077. if (id2 === '车间名称' && event.key==='Tab') {
  2078. document.getElementById(id3).focus()
  2079. cjdisplay.value = true
  2080. }
  2081. if (id2 === '工序损耗' && event.key==='Tab') {
  2082. if(gdgyformData['车间名称']){
  2083. getGxshList();
  2084. _getSH()
  2085. shxsdisplay.value = true
  2086. }
  2087. }
  2088. if (id2 === '工序名称' && event.key==='Tab' || event.key==='Enter') {
  2089. if(gdgyformData['工艺名称'] === undefined){
  2090. gdgyformData['工艺名称'] = '';
  2091. }
  2092. if(gdgyformData['工序名称'] === undefined){
  2093. gdgyformData['工序名称'] = '';
  2094. }
  2095. gdgyformData['工序损耗名称'] = `${gdgyformData['工艺名称']} ${gdgyformData['工序名称']}`;
  2096. }
  2097. if (event.keyCode === 13 || event.keyCode === 40) { // Enter 或向下箭头
  2098. if(id3!=''){
  2099. document.getElementById(id3).focus()
  2100. }
  2101. } else if (event.keyCode === 38) { // 向上箭头
  2102. if(id1!=''){
  2103. document.getElementById(id1).focus()
  2104. }
  2105. }else if (event.keyCode === 8) { // 删除箭头
  2106. if(id1!='' && document.getElementById(id2).value==''){
  2107. document.getElementById(id1).focus()
  2108. }
  2109. // console.log(document.getElementById(id2).value)
  2110. }else if (event.keyCode === 37) { // 向左箭头
  2111. if(id1!='' && document.getElementById(id2).selectionStart==0){
  2112. document.getElementById(id1).focus()
  2113. }
  2114. }else if (event.keyCode === 39) { // 向右箭头
  2115. if(id3!='' && document.getElementById(id2).selectionStart == document.getElementById(id2).value.length){
  2116. document.getElementById(id3).focus()
  2117. }
  2118. }
  2119. }
  2120. const selectHandle = async (node)=>{
  2121. console.log(node)
  2122. if(node.value){
  2123. gdgyformData['工艺名称'] = node.value
  2124. gdgyformData['工序损耗名称'] = node.value
  2125. cjdisplay.value = false
  2126. }else{
  2127. gdgyformData['车间名称'] = node.label
  2128. return false;
  2129. }
  2130. gdgyformData['设备编号'] = []
  2131. console.log(gdgyformData['车间名称'])
  2132. //通过车间名称查询机台
  2133. const MachineList_jitai = await gdzl_MachineList({address:gdgyformData['车间名称']});
  2134. gdzl_MachineList_address.value = MachineList_jitai.data;
  2135. gdgyformData['shdh'] = ''
  2136. //通过车间名称查询工序损耗
  2137. // await getGxshList()
  2138. if(gdgyformData['工艺名称'] === undefined){
  2139. gdgyformData['工艺名称'] = '';
  2140. }
  2141. if(gdgyformData['工序名称'] === undefined){
  2142. gdgyformData['工序名称'] = '';
  2143. }
  2144. await InSH()
  2145. }
  2146. const InSH = async (value) => {
  2147. if(gdgyformData['工艺名称']){
  2148. const response = await getLossCode({ code:gdgyformData['工艺名称']});
  2149. console.log(response)
  2150. if(response.code===0){
  2151. gdgyformData['shdh']=response.data[0].sys_bh
  2152. // gdgyformData.工序损耗名称= node.sys_mc
  2153. gdgyformData['工序损耗名称'] = `${response.data[0].sys_mc} ${gdgyformData['工序名称']}`;
  2154. gdgyformData.损耗系数='1.00'
  2155. gdgyformData.难度系数='1.00'
  2156. }
  2157. }
  2158. }
  2159. const getSHListdata = ref([]);
  2160. const _shdh = ref('');
  2161. //工序损耗列表
  2162. const gxshList = ref([])
  2163. const getGxshList = async ()=>{
  2164. const WastageList_data = await WastageList({process: gdgyformData.工艺名称})
  2165. console.log(WastageList_data)
  2166. if(WastageList_data.data === null || WastageList_data.data === ''){
  2167. gdgyformData['shdh'] = '';
  2168. ElMessage({
  2169. type: 'warning',
  2170. message: '未获取到工序损耗'
  2171. })
  2172. }
  2173. // const response = await getLossCode({ code: WastageList_data.data });
  2174. // console.log(response)
  2175. gdgyformData['shdh'] = WastageList_data.data
  2176. }
  2177. //点击工序损耗列表数据
  2178. const gxshselectHandle = async (node)=>{
  2179. if(node.label2){
  2180. gdgyformData['shdh'] = node.value
  2181. gdgyformData['工序损耗名称'] = node.label2
  2182. gxshdisplay.value = false
  2183. }
  2184. }
  2185. //填充树形结构
  2186. const _getSH = async () => {
  2187. const response = await getLossCode({ code:'' });
  2188. if (response.code === 0) {
  2189. const data = response.data;
  2190. const treeData = [];
  2191. const map = {};
  2192. // 构建树形结构
  2193. data.forEach(item => {
  2194. map[item.sys_bh] = { ...item, children: [], label: `${item.sys_bh}---${item.sys_mc}---${item.sys_rate0}---${item.sys_rate1}` };
  2195. });
  2196. data.forEach(item => {
  2197. if (item.sys_bh.length === 3) {
  2198. map[item.sys_bh].level = 1;
  2199. treeData.push(map[item.sys_bh]);
  2200. } else {
  2201. map[item.sys_bh].level = 2;
  2202. map[item.sys_bh.substring(0, 3)].children.push(map[item.sys_bh]);
  2203. }
  2204. });
  2205. getSHListdata.value = treeData;
  2206. shxsdisplay.value = true;
  2207. } else {
  2208. // 处理错误情况
  2209. console.error('获取损耗列表失败');
  2210. }
  2211. };
  2212. //损耗树形结构点击
  2213. const selectSHNode = (node,check) => {
  2214. console.log(node.level)
  2215. if(node.level==1){
  2216. console.log(node.label)
  2217. }
  2218. if(node.level==2){
  2219. if(gdgyformData['工艺名称'] === undefined){
  2220. gdgyformData['工艺名称'] = '';
  2221. }
  2222. if(gdgyformData['工序名称'] === undefined){
  2223. gdgyformData['工序名称'] = '';
  2224. }
  2225. gdgyformData['shdh']=node.sys_bh
  2226. // gdgyformData.工序损耗名称= node.sys_mc
  2227. gdgyformData['工序损耗名称'] = `${node.sys_mc} ${gdgyformData['工序名称']}`;
  2228. gdgyformData.损耗系数='1.00'
  2229. gdgyformData.难度系数='1.00'
  2230. shxsdisplay.value = false;
  2231. }
  2232. }
  2233. const changeHandle = (v) => {
  2234. const no = '0' + v.no
  2235. let list = gxList.value.map(item => {
  2236. const yj = item.split('-')[0]
  2237. if (yj === no) return Number(item.split('-')[1])
  2238. })
  2239. gdgyformData['yjno'] = v.no
  2240. gdgyformData['工序'] = (list.sort((a, b) => b-a)[0] + 1)
  2241. yjdisplay.value = false
  2242. }
  2243. //===============颜色==================================
  2244. //工艺资料背景颜色变黄
  2245. const currentGy0_yjno = ref(null)
  2246. const rowClassStyle2 = ({row,rowIndex}) =>{
  2247. if(row['印件-工序'].substr(0, 2)==currentGy0_yjno.value){
  2248. return "warning-row"
  2249. }
  2250. return "warning-row"
  2251. }
  2252. //表格文字颜色
  2253. const tableDataCellClass = ({row, column, rowIndex, columnIndex}) =>{
  2254. if (column.property === '订单数量') {
  2255. return 'plan-usage-low';
  2256. }
  2257. }
  2258. //工艺流程调整颜色
  2259. const gylctzCellClass = ({row, column, rowIndex, columnIndex}) =>{
  2260. if (column.label === '工序号') {
  2261. return 'background-plan-usage-low';
  2262. }
  2263. }
  2264. //修正核算参数颜色
  2265. const sxzhscsCellClass = ({row, column, rowIndex, columnIndex}) =>{
  2266. if (column.label === '新难度系数' || column.label === '新损耗代号' || column.label === '新印刷方式' || column.label === '新来版距' || column.label === '新计损色数' || column.label === '新损耗系数') {
  2267. return 'background-plan-usage-low';
  2268. }
  2269. }
  2270. //质检废品系数颜色
  2271. const scfjfpxsCellClass = ({row, column, rowIndex, columnIndex}) =>{
  2272. if (column.label === '人工正品板' || column.label === '人工次品板' || column.label === '人工废检' || column.label === '机检正品板' || column.label === '机检次品板' || column.label === '机检废检') {
  2273. return 'background-plan-usage-low';
  2274. }
  2275. }
  2276. //根据工艺状态文字颜色
  2277. const gysatusCellClass = ({row, column, rowIndex, columnIndex}) =>{
  2278. if(row['status'] === '未完工'){
  2279. return 'status-plan-usage-low';
  2280. }
  2281. if(row['status'] === '已完工'){
  2282. return 'statusy-plan-usage-low';
  2283. }
  2284. }
  2285. //bom颜色
  2286. const planUsageCellClass = ({row, column, rowIndex, columnIndex}) =>{
  2287. if (column.property === '计划用量') {
  2288. return 'plan-usage-low';
  2289. }
  2290. }
  2291. //修改工单资料弹窗 键盘 input框跳转
  2292. const gdzlent =async (event,id1,id2,id3) => {
  2293. if (id2 === '客户代号' && event.key==='Tab') {
  2294. await _gClientList(scgdformData.value['客户代号'])
  2295. if (khdhDataList.value != null) {
  2296. const row = khdhDataList.value.find(item => item.客户编号 === scgdformData.value['客户代号'])
  2297. if (row) {
  2298. scgdformData.value['客户名称'] = row.客户名称
  2299. } else {
  2300. khdhModal.value = true
  2301. }
  2302. } else {
  2303. khdhModal.value= true
  2304. }
  2305. }
  2306. if (id2 === '产品代号' && event.key==='Tab') {
  2307. await _ProductCodeList()
  2308. cpdhModal.value = true
  2309. }
  2310. if (event.keyCode === 13 || event.keyCode === 40) { // Enter 或向下箭头
  2311. if(id3!=''){
  2312. document.getElementById(id3).focus()
  2313. }
  2314. } else if (event.keyCode === 38) { // 向上箭头
  2315. if(id1!=''){
  2316. document.getElementById(id1).focus()
  2317. }
  2318. }else if (event.keyCode === 8) { // 删除箭头
  2319. if(id1!='' && document.getElementById(id2).value==''){
  2320. document.getElementById(id1).focus()
  2321. }
  2322. // console.log(document.getElementById(id2).value)
  2323. }else if (event.keyCode === 37) { // 向左箭头
  2324. if(id1!='' && document.getElementById(id2).selectionStart==0){
  2325. document.getElementById(id1).focus()
  2326. }
  2327. }else if (event.keyCode === 39) { // 向右箭头
  2328. if(id3!='' && document.getElementById(id2).selectionStart == document.getElementById(id2).value.length){
  2329. document.getElementById(id3).focus()
  2330. }
  2331. }
  2332. }
  2333. const gdSelection = ref('')
  2334. const yjSelection = ref('')
  2335. const gySelection = ref('')
  2336. // 印件资料多选、工艺资料多选
  2337. const selectionChange = (selection, type) => {
  2338. const ids = selection.map(item => {
  2339. return type === '印件资料' ? item.Uniqid: item.UniqId
  2340. })
  2341. if (type === '印件资料') {
  2342. yjSelection.value = ids.join(',')
  2343. }
  2344. if (type === '工艺资料') {
  2345. gySelection.value = ids.join(',')
  2346. }
  2347. }
  2348. const handleSelectionChange = (selection, type) => {
  2349. const ids = selection.map(item => {
  2350. return item.Uniqid
  2351. })
  2352. console.log(ids.join(','))
  2353. gdSelection.value = ids.join(',')
  2354. }
  2355. // ===========删除工单资料 ===========
  2356. const delgdzl_onclick = async () => {
  2357. console.log(gdSelection.value)
  2358. if (gdSelection.value !== '') {
  2359. try {
  2360. const res1 = await WorkOrderDel({UniqId: gdSelection.value})
  2361. if(res1.code === 0){
  2362. ElMessage.success('印件资料删除成功')
  2363. console.log(_Gd_khdh.value)
  2364. const WorkListdata = await WorkList({Gd_khdh:_Gd_khdh.value,limit:pageSize.value,page:page.value});
  2365. console.log(WorkListdata)
  2366. tableData.splice(0,tableData.length,...WorkListdata.data.data);//表格数据
  2367. total.value =WorkListdata.data.total;//共多少条
  2368. yjtableData.value = [];
  2369. gytableData.value = [];
  2370. bomtableData.value = [];
  2371. }
  2372. } catch(err) {
  2373. ElMessage.error(err)
  2374. }
  2375. }
  2376. }
  2377. // ===========删除印件资料、工艺资料 ===========
  2378. const delgd_delclick = async () => {
  2379. if (yjSelection.value !== '') {
  2380. try {
  2381. const res1 = await PrintDetailDel({UniqId: yjSelection.value})
  2382. res1.code === 0 && ElMessage.success('印件资料删除成功')
  2383. } catch(err) {
  2384. ElMessage.error(err)
  2385. }
  2386. }
  2387. if (gySelection.value !== ''){
  2388. try {
  2389. const res2 = await ProcessDetailDel({UniqId: gySelection.value})
  2390. res2.code === 0 && ElMessage.success('工艺资料删除成功')
  2391. } catch(err) {
  2392. ElMessage.error(err)
  2393. }
  2394. }
  2395. const workOrderListDetail_data = await workOrderListDetail({Gd_gdbh:_Gd_gdbh.value});
  2396. yjtableData.value = workOrderListDetail_data.data.printList;
  2397. gytableData.value = workOrderListDetail_data.data.processList;
  2398. bomtableData.value = workOrderListDetail_data.data.BOM;
  2399. }
  2400. //点击技术附件按钮
  2401. const jsfjClick = () => {
  2402. if(_Gd_gdbh.value == null){
  2403. cgugdlist.value = false;
  2404. ElMessage({type: 'warning',message: '请选择具体的工单后,再操作此功能'})
  2405. }else{
  2406. initJsfjformdata();
  2407. jsfjformdata.value.关联编号 = _Gd_gdbh.value
  2408. jsfjdialogFormVisible.value = true
  2409. }
  2410. }
  2411. //技术附件弹窗
  2412. const jsfjdialogFormVisible = ref(false)
  2413. const jsfjformdata = ref({
  2414. sys_id: _username.value,
  2415. 附件备注: '',
  2416. 附件内容: '',
  2417. 附件类型: '',
  2418. 关联编号: '',
  2419. });
  2420. //技术附件弹窗取消
  2421. const initJsfjformdata = () => {
  2422. jsfjformdata.value = {
  2423. sys_id: _username.value,
  2424. 附件备注: '',
  2425. 附件内容: '',
  2426. 附件类型: '',
  2427. 关联编号: '',
  2428. }
  2429. }
  2430. //技术附件弹窗取消
  2431. const jsfjcloseDialog = () => {
  2432. jsfjdialogFormVisible.value = false
  2433. }
  2434. const uploadExcel = (event) =>{
  2435. const files = event.target.files;
  2436. let suffixArr = name.split("."), suffix = suffixArr[suffixArr.length-1];
  2437. // if(suffix!="xlsx"){
  2438. // alert("Currently only supports the import of xlsx files");
  2439. // return;
  2440. // }
  2441. jsfjformdata.value.附件内容 = files[0]
  2442. jsfjformdata.value.附件类型 = 'XLSX'
  2443. }
  2444. const yulan = (event) =>{
  2445. if(!jsfjformdata.value.附件内容) return
  2446. $.getScript('/luckysheet/plugins/js/plugin.js', () => {
  2447. $script('/luckysheet/luckysheet.umd.js', () => {
  2448. luckyexcelVisible.value = true
  2449. LuckyExcel.transformExcelToLucky(jsfjformdata.value.附件内容, function(exportJson, luckysheetfile){
  2450. if(exportJson.sheets==null || exportJson.sheets.length==0){
  2451. alert("Failed to read the content of the excel file, currently does not support xls files!");
  2452. return;
  2453. }
  2454. if(luckyExcel) luckyExcel.destroy();
  2455. luckysheet.create({
  2456. container: 'luckyexcel', //容器的ID
  2457. data: exportJson.sheets,
  2458. title: exportJson.info.name, // 工作簿名称
  2459. lang: "zh", // 设定表格语言 国际化设置,允许设置表格的语言,支持中文("zh")和英文("en")
  2460. showtoolbar: false, // 是否显示工具栏
  2461. showinfobar: false, // 是否显示顶部信息栏
  2462. allowEdit: false, // 是否允许前台编辑
  2463. enableAddRow: false, // 允许增加行
  2464. enableAddCol: false, // 允许增加列
  2465. userInfo: false, // 右上角的用户信息展示样式
  2466. showRowBar: false, // 是否显示行号区域
  2467. showColumnBar: false, // 是否显示列号区域
  2468. sheetFormulaBar: false, // 是否显示公式栏
  2469. enableAddBackTop: false,//返回头部按钮
  2470. });
  2471. luckyExcel = luckysheet;
  2472. })
  2473. })
  2474. })
  2475. $('head').append($('<link rel="stylesheet" type="text/css" />').attr('href', '/luckysheet/plugins/css/pluginsCss.css'));
  2476. $('head').append($('<link rel="stylesheet" type="text/css" />').attr('href', '/luckysheet/plugins/plugins.css'));
  2477. $('head').append($('<link rel="stylesheet" type="text/css" />').attr('href', '/luckysheet/css/luckysheet.css'));
  2478. $('head').append($('<link rel="stylesheet" type="text/css" />').attr('href', '/luckysheet/assets/iconfont/iconfont.css'));
  2479. }
  2480. const jsfj_del = (row) =>{
  2481. ElMessageBox.confirm('确定要删除吗?', '提示', {
  2482. confirmButtonText: '确定',
  2483. cancelButtonText: '取消',
  2484. type: 'warning'
  2485. }).then(() => {
  2486. gdAnnexDel({'UniqId':row.UniqId,'gdbh':_Gd_gdbh.value}).then(response => {
  2487. if(response.code==0){
  2488. ElMessage({
  2489. type: 'success',
  2490. message: '删除成功',
  2491. })
  2492. let row = {
  2493. '工单编号':_Gd_gdbh.value,
  2494. '产品代号':_Gd_cpdh.value,
  2495. '产品名称':_Gd_cpmc.value,
  2496. }
  2497. tableRowClick (row)
  2498. }
  2499. })
  2500. })
  2501. }
  2502. //技术附件弹窗确定
  2503. const jsfjenterDialog = () => {
  2504. if(jsfjformdata.value.附件备注==''){
  2505. ElMessage({
  2506. type: 'error',
  2507. message: '请填写附件备注'
  2508. });
  2509. return;
  2510. }
  2511. if(jsfjformdata.value.附件内容==''){
  2512. ElMessage({
  2513. type: 'error',
  2514. message: '请上传文件'
  2515. });
  2516. return;
  2517. }
  2518. if(jsfjformdata.value.关联编号==''){
  2519. ElMessage({
  2520. type: 'error',
  2521. message: '请填写关联编号'
  2522. });
  2523. return;
  2524. }
  2525. let fr = new FileReader();
  2526. fr.readAsDataURL(jsfjformdata.value.附件内容);
  2527. fr.onload = function () {
  2528. const restoredData = new FormData();
  2529. restoredData.append('sys_id', jsfjformdata.value.sys_id);
  2530. restoredData.append('附件备注', jsfjformdata.value.附件备注);
  2531. restoredData.append('附件内容', fr.result);
  2532. restoredData.append('附件类型', jsfjformdata.value.附件类型);
  2533. restoredData.append('关联编号', jsfjformdata.value.关联编号);
  2534. gdAnnexAdd(restoredData).then(response => {
  2535. if(response.code==0){
  2536. ElMessage({
  2537. type: 'success',
  2538. message: '新增成功',
  2539. })
  2540. jsfjdialogFormVisible.value = false
  2541. let row = {
  2542. '工单编号':_Gd_gdbh.value,
  2543. '产品代号':_Gd_cpdh.value,
  2544. '产品名称':_Gd_cpmc.value,
  2545. }
  2546. tableRowClick (row)
  2547. }
  2548. })
  2549. }
  2550. }
  2551. //技术资料excel展示
  2552. const ExcelShow = (row) =>{
  2553. if(!row.附件内容) return
  2554. $.getScript('/luckysheet/plugins/js/plugin.js', () => {
  2555. $script('/luckysheet/luckysheet.umd.js', () => {
  2556. function dataURLtoBlob(dataUrl) {
  2557. const byteString = atob(dataUrl.split(',')[1]);
  2558. const ab = new ArrayBuffer(byteString.length);
  2559. const ia = new Uint8Array(ab);
  2560. for (let i = 0; i < byteString.length; i++) {
  2561. ia[i] = byteString.charCodeAt(i);
  2562. }
  2563. return new Blob([ab], { type: 'application/octet-stream' });
  2564. }
  2565. const blob = dataURLtoBlob(row.附件内容);
  2566. luckyexcelVisible.value = true
  2567. LuckyExcel.transformExcelToLucky(blob, function(exportJson, luckysheetfile){
  2568. if(exportJson.sheets==null || exportJson.sheets.length==0){
  2569. alert("Failed to read the content of the excel file, currently does not support xls files!");
  2570. return;
  2571. }
  2572. if(luckyExcel) luckyExcel.destroy();
  2573. luckysheet.create({
  2574. container: 'luckyexcel', //容器的ID
  2575. data: exportJson.sheets,
  2576. title: exportJson.info.name, // 工作簿名称
  2577. lang: "zh", // 设定表格语言 国际化设置,允许设置表格的语言,支持中文("zh")和英文("en")
  2578. showtoolbar: false, // 是否显示工具栏
  2579. showinfobar: false, // 是否显示顶部信息栏
  2580. allowEdit: false, // 是否允许前台编辑
  2581. enableAddRow: false, // 允许增加行
  2582. enableAddCol: false, // 允许增加列
  2583. userInfo: false, // 右上角的用户信息展示样式
  2584. showRowBar: false, // 是否显示行号区域
  2585. showColumnBar: false, // 是否显示列号区域
  2586. sheetFormulaBar: false, // 是否显示公式栏
  2587. enableAddBackTop: false,//返回头部按钮
  2588. });
  2589. luckyExcel = luckysheet;
  2590. })
  2591. })
  2592. })
  2593. $('head').append($('<link rel="stylesheet" type="text/css" />').attr('href', '/luckysheet/plugins/css/pluginsCss.css'));
  2594. $('head').append($('<link rel="stylesheet" type="text/css" />').attr('href', '/luckysheet/plugins/plugins.css'));
  2595. $('head').append($('<link rel="stylesheet" type="text/css" />').attr('href', '/luckysheet/css/luckysheet.css'));
  2596. $('head').append($('<link rel="stylesheet" type="text/css" />').attr('href', '/luckysheet/assets/iconfont/iconfont.css'));
  2597. }
  2598. let luckyExcel = null
  2599. const luckyexcelVisible = ref(false)
  2600. const luckyexcelCloseDialog = () => {
  2601. luckyexcelVisible.value = false
  2602. }
  2603. </script>
  2604. <style scoped>
  2605. /* 在样式表中使用媒体查询 */
  2606. @media (max-width: 768px) {
  2607. /* 在小屏幕下的样式设置 */
  2608. .dialog-footer {
  2609. text-align: center;
  2610. }
  2611. }
  2612. /*工序产量核查*/
  2613. :deep(.gxclhc—color-column-red div) {
  2614. color: red !important;
  2615. }
  2616. :deep(.lan-plan-usage-lows div) {
  2617. color: blue !important;
  2618. font-weight: bold;
  2619. }
  2620. :deep(.lan-plan-usage-lowshui div) {
  2621. color: #8c939d !important;
  2622. }
  2623. /*背景颜色*/
  2624. /*印件背景颜色变黄*/
  2625. :deep(.el-table__body .warning-row) {
  2626. background: #FFFF80 !important;
  2627. }
  2628. /*修正工单核算参数背景*/
  2629. :deep(.el-table__body .background-plan-usage-low div div div) {
  2630. background: #80FA80 !important;
  2631. }
  2632. /* 选中某行时的背景色 */
  2633. :deep(.el-table__body tr.current-row) > td {
  2634. background: #ff80ff !important;
  2635. }
  2636. /*文字颜色*/
  2637. /*bom计划用量文字变色【表格中单独文字变色】*/
  2638. :deep(.plan-usage-low div) {
  2639. color: red !important;
  2640. }
  2641. /*根据工艺状态文字变色*/
  2642. :deep(.status-plan-usage-low div) {
  2643. color: blue !important;
  2644. }
  2645. :deep(.statusy-plan-usage-low div) {
  2646. color: #8c939d !important;
  2647. }
  2648. /* 在样式表中添加以下样式 */
  2649. .el-input__textarea {
  2650. resize: none; /* 禁止调整大小 */
  2651. }
  2652. .JKWTree-container {
  2653. display: flex;
  2654. }
  2655. .JKWTree-tree {
  2656. /*width: 300px;*/
  2657. background-color: #fff;
  2658. padding: 10px;
  2659. margin-right: 20px;
  2660. }
  2661. .JKWTree-tree h3 {
  2662. font-size: 15px;
  2663. font-weight: 700;
  2664. margin: 10px 0;
  2665. }
  2666. .JKWTree-content {
  2667. flex: 1;
  2668. }
  2669. /*关闭拖拽功能*/
  2670. .el-textarea textarea {
  2671. resize: none !important;
  2672. }
  2673. </style>
  2674. <style scoped>
  2675. :deep(.el-table td .cell) {
  2676. line-height: 20px !important;
  2677. }
  2678. :deep(.el-tabs__header){
  2679. margin-bottom: 0;
  2680. }
  2681. .search{
  2682. margin-left: 0px !important;
  2683. margin-right: 10px !important;
  2684. }
  2685. .bt{
  2686. margin-left: 2px !important;
  2687. padding: 3px !important;
  2688. font-size: 12px;
  2689. }
  2690. .el-tabs__header{
  2691. margin: 0px !important;
  2692. }
  2693. .gva-table-box{
  2694. padding: 0px !important;
  2695. }
  2696. .el-pagination{
  2697. margin-top: 0px !important;
  2698. }
  2699. .mab{
  2700. margin-bottom: 5px;
  2701. }
  2702. </style>