gongdanziliao.vue 134 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601
  1. <template>
  2. <div>
  3. <layout>
  4. <layout-header>
  5. <div class="">
  6. <!--按钮部分-->
  7. <el-form ref="elSearchFormRef" class="demo-form-inline" >
  8. <el-form-item>
  9. <el-input v-model="searchInfo" placeholder="输入订单编号或生产款号" style="width: 180px;" @keyup.enter="onSubmit()"></el-input>
  10. <el-button type="primary" icon="search" @click="onSubmit" title="查询" >查询</el-button>
  11. <el-button type="primary" icon="edit" @click="cp_gdprintonClick" class="bt" title="打印生产订单" >订单打印</el-button>
  12. <el-button type="primary" class="bt" icon="edit" @click="jsfjClick">附件上传</el-button>
  13. <el-button type="primary" icon="edit" @click="addgd_onclick" class="bt" title="新增工单资料">新增订单资料</el-button>
  14. <el-button type="primary" icon="edit" @click="addgdyj_onclick" class="bt" title="新增颜色资料">新增颜色资料</el-button>
  15. <el-button type="primary" icon="edit" @click="addgdgy_onclick" class="bt" title="新增工序资料" >新增工序资料</el-button>
  16. <el-button type="primary" icon="edit" @click="BOMclick" class="bt" title="BOM面料">批量修改新增BOM资料</el-button>
  17. <el-button type="primary" icon="edit" @click="del_ddzlClick" v-if="table_del=== true" :disabled="table_Selection === ''" class="bt" title="选中复选框进行删除订单数据">删除订单资料</el-button>
  18. <el-button type="primary" icon="edit" @click="delgd_delclick" v-if="delall=== true" :disabled="ysSelection === '' && gySelection === ''" class="bt" title="选中复选框进行删除颜色数据">删除颜色资料</el-button>
  19. <!-- <el-button type="primary" icon="edit" @click="delbom_delclick" v-if="del_bom=== true" :disabled="bom_Selection === '' " class="bt" title="选中复选框进行删除bom数据">删除bom资料</el-button> -->
  20. <!-- <el-button type="primary" icon="edit" @click="CSclick" class="bt" title="库存测试">库存测试</el-button> -->
  21. </el-form-item>
  22. </el-form>
  23. </div>
  24. </layout-header>
  25. <layout>
  26. <!-- 左侧树形结构 -->
  27. <layout-sider :resize-directions="['right']" :width="190" style="margin: 0px;">
  28. <div class="JKWTree-tree" style="height: 200px">
  29. <h3>客户编号</h3>
  30. <el-tree :data="treeData" class="treecolor" @node-click="handleNodeClick"></el-tree>
  31. </div>
  32. </layout-sider>
  33. <!-- 右侧内容区域 -->
  34. <layout-content >
  35. <el-main>
  36. <!-- 订单表格列表 -->
  37. <div class="gva-table-box">
  38. <el-table ref="multipleTable" style="width: 100%;height: 28vh"
  39. :row-style="{ height: '20px' }" :header-cell-style="{ padding: '0px' }"
  40. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  41. border tooltip-effect="dark"
  42. v-loading="loading"
  43. element-loading-text="拼命加载中"
  44. element-loading-spinner="el-icon-loading"
  45. element-loading-background="rgba(0, 0, 0, 0.8)"
  46. :data="tableData" row-key="ID"
  47. highlight-current-row="true"
  48. :cell-class-name="tableDataCellClass"
  49. @row-click="tableRowClick" @row-dblclick="updateCompanyFunc"
  50. @selection-change="ddzlSelectionChange" :show-overflow-tooltip="true">
  51. <el-table-column align="center" type="selection" width="40"/>
  52. <el-table-column align="center" label="附件" prop="status" width="60" />
  53. <el-table-column align="left" sortable label="订单编号" prop="订单编号" width="110" />
  54. <el-table-column align="left" label="客户" prop="客户编号" width="70" />
  55. <el-table-column align="left" label="款号" prop="生产款号" width="110" />
  56. <el-table-column align="left" label="款式" prop="款式" width="100"/>
  57. <el-table-column align="left" label="数量" prop="订单数量" width="60" />
  58. <el-table-column align="center" label="状态" prop="gd_statu" width="70" >
  59. <template #default="{ row }">
  60. <el-tag :type="row.gd_statu === '1-计划中' ? 'warning' : (row.gd_statu === '2-生产中' ? 'success' : 'info')">
  61. {{ row.gd_statu === '1-计划中' ? '计划中' : (row.gd_statu === '2-生产中' ? '生产中' : '已完工') }}
  62. </el-tag>
  63. </template>
  64. </el-table-column>
  65. <el-table-column align="left" label="落货日期" prop="落货日期" width="100" />
  66. <el-table-column align="left" label="船样" prop="船样合计" width="60" />
  67. <el-table-column align="left" label="船样描述" prop="船样描述" width="110" />
  68. <el-table-column align="left" label="单位" prop="单位" width="60" />
  69. <el-table-column align="left" label="面料" prop="面料" width="180" />
  70. <el-table-column align="left" label="备注" prop="要求" width="180" />
  71. <el-table-column align="left" label="粘衬" prop="粘衬" width="180" />
  72. <el-table-column align="left" label="箱唛要求" prop="箱唛要求" width="180" />
  73. <el-table-column align="left" label="制单人" prop="Sys_id" width="160" />
  74. <el-table-column align="left" label="制单日期" prop="Sys_rq" width="160" />
  75. </el-table>
  76. <!-- 分页 -->
  77. <div class="gva-pagination">
  78. <el-pagination
  79. @size-change="handleSizeChange"
  80. @current-change="handleCurrentChange"
  81. :current-page="page"
  82. :page-sizes="[10, 30, 50, 100]"
  83. :page-size="pageSize"
  84. layout="total, sizes, prev, pager, next, jumper"
  85. :total="total">
  86. </el-pagination>
  87. </div>
  88. </div>
  89. <!-- 颜色资料列表、工艺资料列表、BOM资料列表 -->
  90. <el-tabs v-model="activeName" @tab-click="handleClick">
  91. <el-tab-pane label="颜色资料" name="first">
  92. <el-table ref="multipleTable"
  93. :row-style="{ height: '20px' }" :header-cell-style="{ padding: '0px' }"
  94. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  95. :show-overflow-tooltip="true"
  96. highlight-current-row="true"
  97. @row-click="ystableclick"
  98. @row-dblclick="ysupdateCompanyFunc"
  99. @selection-change="selectionChange($event, '颜色资料')"
  100. style="width: 100%;height: 36vh" border show-summary
  101. :summary-method="getSummaries" tooltip-effect="dark" :data="ystableData" row-key="ID" >
  102. <el-table-column type="selection" width="30" />
  103. <el-table-column align="left" sortable label="子订单编号" prop="子订单编号" width="140"/>
  104. <el-table-column align="left" sortable label="PO号 " prop="款号" width="180"/>
  105. <el-table-column align="left" sortable label="颜色备注" prop="颜色备注" width="110"/>
  106. <el-table-column align="left" sortable label="色系名称" prop="颜色" width="110"/>
  107. <el-table-column align="left" sortable label="船样" prop="船样" width="80"/>
  108. <!-- 尺码列表 -->
  109. <template v-for="item in sizeDatas">
  110. <el-table-column align="left" sortable :label=item :prop=item width="80"/>
  111. </template>
  112. <el-table-column align="left" sortable label="制单总数" prop="zdtotal" width="110"/>
  113. <el-table-column align="left" sortable label="建档用户" prop="Sys_id" width="160"/>
  114. <el-table-column align="left" sortable label="建档时间" prop="Sys_rq" width="160"/>
  115. <el-table-column align="left" sortable label="更新时间" prop="更新时间" width="160"/>
  116. </el-table>
  117. </el-tab-pane>
  118. <el-tab-pane label="工艺资料" name="second">
  119. <el-table ref="multipleTable"
  120. :row-style="{ height: '20px' }"
  121. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  122. :header-cell-style="{ padding: '0px' }"
  123. highlight-current-row="true"
  124. :show-overflow-tooltip="true"
  125. size="small"
  126. :cell-class-name="gysatusCellClass"
  127. @row-dblclick="gdgyupdateCompanyFunc"
  128. @row-click="clickybupdate2"
  129. :row-class-name="rowClassStyle2"
  130. @selection-change="selectionChange($event, '工艺资料')"
  131. style="width: 100%;height: 36vh" border tooltip-effect="dark" :data="gytableData" row-key="ID">
  132. <el-table-column type="selection" width="30" />
  133. <el-table-column align="left" label="完工状态" prop="完工状态" width="75"/>
  134. <el-table-column align="left" label="工序名称" prop="工序名称" width="280"/>
  135. <el-table-column align="left" label="计划产量" prop="计划产量" width="80"/>
  136. <el-table-column align="left" label="建档用户" prop="建档用户" width="90"/>
  137. <el-table-column align="left" label="建档日期" prop="建档日期" width="150"/>
  138. </el-table>
  139. </el-tab-pane>
  140. <el-tab-pane label="订单资料附件" name="third">
  141. <el-table ref="multipleTable"
  142. :row-style="{ height: '30px' }"
  143. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '30px' }"
  144. :header-cell-style="{ padding: '0px' }"
  145. :show-overflow-tooltip="true"
  146. :cell-class-name="planUsageCellClass"
  147. highlight-current-row="true"
  148. @row-dblclick="gdbomupdateCompanyFunc"
  149. style="width: 100%;height: 36vh" border tooltip-effect="dark" :data="ddtableData" row-key="ID"
  150. @selection-change="fjSelectionChange">
  151. <el-table-column align="left" label="关联编号" prop="关联编号" width="115"/>
  152. <el-table-column align="left" label="附件备注" prop="附件备注" width="110"/>
  153. <el-table-column align="left" label="文件类型" prop="附件类型" width="100"/>
  154. <el-table-column align="left" label="版本号" prop="version" width="80"/>
  155. <el-table-column align="left" label="建档用户" prop="sys_id" width="160"/>
  156. <el-table-column align="left" label="建档时间" prop="sys_rq" width="160"/>
  157. <!-- 操作列,新增修改和删除按钮 -->
  158. <el-table-column align="left" label="操作" width="230" fixed="right">
  159. <template #default="scope">
  160. <!-- PDF预览按钮 -->
  161. <el-button type="success" size="small" :data="ddtableData" @click="showPdf(scope.row)">PDF预览</el-button>
  162. <!-- 删除按钮 -->
  163. <el-button type="danger" size="small" @click="deleteItem(scope.row)">删除</el-button>
  164. </template>
  165. </el-table-column>
  166. </el-table>
  167. </el-tab-pane>
  168. <el-tab-pane label="技术附件" name="fourth">
  169. <el-table ref="multipleTable"
  170. :row-style="{ height: '30px' }"
  171. :cell-style="{ padding: '0px' }"
  172. :header-row-style="{ height: '30px' }"
  173. :header-cell-style="{ padding: '0px' }"
  174. :show-overflow-tooltip="true"
  175. :cell-class-name="planUsageCellClass"
  176. highlight-current-row="true"
  177. @row-dblclick="ExcelShow"
  178. style="width: 100%;height: 36vh"
  179. border tooltip-effect="dark"
  180. :data="jstableData"
  181. row-key="ID"
  182. @selection-change="fjSelectionChange">
  183. <el-table-column align="left" label="关联编号" prop="关联编号" width="115"/>
  184. <el-table-column align="left" label="附件备注" prop="附件备注" width="110"/>
  185. <el-table-column align="left" label="文件类型" prop="附件类型" width="100"/>
  186. <el-table-column align="left" label="版本号" prop="version" width="80"/>
  187. <el-table-column align="left" label="建档用户" prop="sys_id" width="160"/>
  188. <el-table-column align="left" label="建档时间" prop="sys_rq" width="160"/>
  189. <!-- 操作列,新增修改和删除按钮 -->
  190. <el-table-column align="left" label="操作" width="230" fixed="right">
  191. <template #default="scope">
  192. <!-- PDF预览按钮 -->
  193. <el-button type="success" size="small" :data="ddtableData" @click="showPdf(scope.row)">PDF预览</el-button>
  194. <!-- 删除按钮 -->
  195. <el-button type="danger" size="small" @click="deleteItem(scope.row)">删除</el-button>
  196. </template>
  197. </el-table-column>
  198. </el-table>
  199. </el-tab-pane>
  200. <el-tab-pane label="BOM资料" name="six">
  201. <el-table ref="multipleTable"
  202. :row-style="{ height: '20px' }"
  203. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  204. :header-cell-style="{ padding: '0px' }"
  205. :show-overflow-tooltip="true"
  206. :cell-class-name="planUsageCellClass"
  207. highlight-current-row="true"
  208. @row-dblclick="bombomupdateCompanyFunc"
  209. @selection-change="bomSelectionChange"
  210. style="width: 100%;height: 36vh" border tooltip-effect="dark" :data="bomtableData" row-key="ID">
  211. <!-- <el-table-column type="selection" width="30" /> -->
  212. <el-table-column align="left" label="订单编号" prop="订单编号" width="105"/>
  213. <el-table-column align="left" label="物料分类" prop="物料分类" width="100"/>
  214. <el-table-column align="left" label="物料名称" prop="物料名称" width="210"/>
  215. <el-table-column align="left" label="计划用料" prop="计划用料" width="90" />
  216. <el-table-column align="left" label="计划门幅" prop="计划门幅" width="90"/>
  217. <el-table-column align="left" label="定额用料" prop="定额用料" width="90"/>
  218. <el-table-column align="left" label="定额门幅" prop="定额门幅" width="90"/>
  219. <el-table-column align="left" label="备注" prop="备注" width="240"/>
  220. <el-table-column align="left" label="更新用户" prop="ID" width="90"/>
  221. <el-table-column align="left" label="更新日期" prop="日期" width="160"/>
  222. <!-- <el-table-column align="left" label="UNIQID" prop="UNIQID" width="80"/> -->
  223. </el-table>
  224. </el-tab-pane>
  225. <el-tab-pane label="面料库存" name="seven">
  226. <el-table ref="multipleTable"
  227. :row-style="{ height: '25px' }" :header-cell-style="{ padding: '0px' }"
  228. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '25px' }"
  229. :show-overflow-tooltip="true"
  230. :cell-class-name="planUsageCellClass"
  231. highlight-current-row="true"
  232. @row-dblclick="mlupdateCompanyFunc"
  233. :summary-method="mlgetSummaries"
  234. style="width: 100%;height: 36vh" border tooltip-effect="dark" :data="mltableData" row-key="ID" @selection-change="handleSelectionChange">
  235. <!-- <el-table-column type="selection" width="30" />-->
  236. <!-- <el-table-column type="selection" width="30" /> -->
  237. <el-table-column align="left" label="订单编号" prop="订单编号" width="110"/>
  238. <!-- <el-table-column align="left" label="客户编号" prop="客户编号" width="100"/>
  239. <el-table-column align="left" label="生产款号" prop="生产款号" width="100"/>
  240. <el-table-column align="left" label="款式" prop="款式" width="90"/> -->
  241. <el-table-column align="left" label="颜色" prop="颜色" width="110"/>
  242. <el-table-column align="left" label="物料编号" prop="物料编码" width="220"/>
  243. <el-table-column align="left" label="物料名称" prop="物料名称" width="180"/>
  244. <el-table-column align="left" label="定额用料" prop="定额用料" width="90"/>
  245. <el-table-column align="left" label="定额门幅" prop="定额门幅" width="90"/>
  246. <el-table-column align="left" label="入库总量" prop="入仓总量" width="90"/>
  247. <el-table-column align="left" label="面料结余" prop="库存数量" width="90"/>
  248. <el-table-column align="left" label="单位" prop="单位" width="60"/>
  249. <el-table-column align="left" label="备注" prop="备注" width="200"/>
  250. <el-table-column align="left" label="关联订单" prop="关联订单" width="200"/>
  251. <el-table-column align="left" label="更新用户" prop="Sys_ID" width="160"/>
  252. <el-table-column align="left" label="更新日期" prop="Sys_rq" width="160"/>
  253. </el-table>
  254. </el-tab-pane>
  255. </el-tabs>
  256. <!-- 修改颜色资料弹窗 -->
  257. <el-dialog v-model="dialogFormVisible" :before-close="edit_closeDialog"
  258. style="width: 80%; max-height: 80%; overflow-y: auto; margin-top: 4%;"
  259. title="颜色资料修改" destroy-on-close >
  260. <el-row :gutter="20" class="form-row">
  261. <el-col :span="10">
  262. <div style="display: flex; gap: 0px;">
  263. <h3 style="color:red;font-size: 24px;margin:-5px 0px 8px 12px;">订单编号&nbsp;&nbsp;&nbsp;{{_ddhval}}</h3>
  264. </div>
  265. </el-col>
  266. <el-col :span="10">
  267. <div style="display: flex; gap: 0px;">
  268. <el-form-item label="订单子编号:" class="mab" prop="keyOrder" label-width='110'>
  269. <el-input v-model="edit_formData['子订单编号']" disabled style="width: 250px;" id="订单子编号" />
  270. </el-form-item>
  271. </div>
  272. </el-col>
  273. </el-row>
  274. <el-row :gutter="20">
  275. <el-col :span="10">
  276. <div style="display: flex; gap: 0px;">
  277. <el-form-item label="色系名称:" class="mab" prop="keyOrder" label-width='110'>
  278. <el-select
  279. v-model=" edit_formData['颜色']" style="width: 150px;" id="色系名称"
  280. @keydown="add_gdzlent($event, '', '色系名称', '款号:')">
  281. <el-option
  282. v-for="color in getSuborderscolor.colorlist"
  283. :key="color.id"
  284. :label="color.colorname"
  285. :value="color.colorname"
  286. @click="xg_sxhandleSizeChange(color.colorname,color.colorcode)">
  287. </el-option>
  288. </el-select>
  289. </el-form-item>
  290. </div>
  291. </el-col>
  292. <el-col :span="10">
  293. <el-form-item label="PO号:" prop="deliveryDate" class="mab" label-width="110px" style="">
  294. <el-input v-model="edit_formData['款号']" style="width: 250px;" id="生产款号" />
  295. </el-form-item>
  296. </el-col>
  297. </el-row>
  298. <el-row :gutter="20">
  299. <el-col :span="8">
  300. <el-form-item label="颜色备注:" prop="joinDate" label-width='110'>
  301. <el-input v-model="edit_formData['颜色备注']" style="width: 250px;" id ='颜色备注' @keydown="add_gdzlent($event, '款号:', '颜色备注', '是否船样')"/>
  302. </el-form-item>
  303. </el-col>
  304. <el-col :span="10">
  305. <div style="display: flex; gap: 0px;">
  306. <el-form-item label="是否船样:" prop="joinDate" label-width='200'>
  307. <el-select v-model="edit_formData['船样']" style="width: 150px;" id="是否船样" @keydown="add_gdzlent($event, '尺码规格', '是否船样', 'zds1')">
  308. <el-option label="是" value="是" @click="edit_cyChange('是')"></el-option>
  309. <el-option label="否" value="否" @click="edit_cyChange('否')"></el-option>
  310. </el-select>
  311. </el-form-item>
  312. </div>
  313. </el-col>
  314. </el-row>
  315. <el-row class="form-row">
  316. <el-col :span="20">
  317. <div style="display: flex; gap: 0px;">
  318. <el-form-item label="尺码:" class="mab" prop="keyOrder" label-width='110'>
  319. <el-input v-model="edit_cmformdata.cm1" readonly style="width: 80px;" />
  320. <el-input v-model="edit_cmformdata.cm2" readonly style="width: 80px;" />
  321. <el-input v-model="edit_cmformdata.cm3" readonly style="width: 80px;" />
  322. <el-input v-model="edit_cmformdata.cm4" readonly style="width: 80px;" />
  323. <el-input v-model="edit_cmformdata.cm5" readonly style="width: 80px;" />
  324. <el-input v-model="edit_cmformdata.cm6" readonly style="width: 80px;" />
  325. <el-input v-model="edit_cmformdata.cm7" readonly style="width: 80px;" />
  326. <el-input v-model="edit_cmformdata.cm8" readonly style="width: 80px;" />
  327. <el-input v-model="edit_cmformdata.cm9" readonly style="width: 80px;" />
  328. <el-input v-model="edit_cmformdata.cm10" readonly style="width: 80px;" />
  329. <el-input v-model="edit_cmformdata.cm11" readonly style="width: 80px;" />
  330. <el-input v-model="edit_cmformdata.cm12" readonly style="width: 80px;" />
  331. <el-input v-model="edit_cmformdata.cm13" readonly style="width: 80px;" />
  332. <el-input v-model="edit_cmformdata.cm14" readonly style="width: 80px;" />
  333. <el-input v-model="edit_cmformdata.sctotal" readonly style="width: 80px;" />
  334. </el-form-item>
  335. </div>
  336. </el-col>
  337. </el-row>
  338. <el-row class="form-row">
  339. <el-col :span="20">
  340. <div style="display: flex; gap: 0px;">
  341. <el-form-item label="制单数:" class="mab" prop="keyOrder" label-width='110'>
  342. <el-input v-model="edit_zdsformdata.zds1" @input="updateTotal" style="width: 80px;" id ='zds1' @keydown="add_gdzlent($event, 'cm14', 'zds1', 'zds2')"/>
  343. <el-input v-model="edit_zdsformdata.zds2" @input="updateTotal" style="width: 80px;" id ='zds2' @keydown="add_gdzlent($event, 'zds1', 'zds2', 'zds3')"/>
  344. <el-input v-model="edit_zdsformdata.zds3" @input="updateTotal" style="width: 80px;" id ='zds3' @keydown="add_gdzlent($event, 'zds2', 'zds3', 'zds4')"/>
  345. <el-input v-model="edit_zdsformdata.zds4" @input="updateTotal" style="width: 80px;" id ='zds4' @keydown="add_gdzlent($event, 'zds3', 'zds4', 'zds5')"/>
  346. <el-input v-model="edit_zdsformdata.zds5" @input="updateTotal" style="width: 80px;" id ='zds5' @keydown="add_gdzlent($event, 'zds4', 'zds5', 'zds6')"/>
  347. <el-input v-model="edit_zdsformdata.zds6" @input="updateTotal" style="width: 80px;" id ='zds6' @keydown="add_gdzlent($event, 'zds5', 'zds6', 'zds7')"/>
  348. <el-input v-model="edit_zdsformdata.zds7" @input="updateTotal" style="width: 80px;" id ='zds7' @keydown="add_gdzlent($event, 'zds6', 'zds7', 'zds8')"/>
  349. <el-input v-model="edit_zdsformdata.zds8" @input="updateTotal" style="width: 80px;" id ='zds8' @keydown="add_gdzlent($event, 'zds7', 'zds8', 'zds9')"/>
  350. <el-input v-model="edit_zdsformdata.zds9" @input="updateTotal" style="width: 80px;" id ='zds9' @keydown="add_gdzlent($event, 'zds8', 'zds9', 'zds10')"/>
  351. <el-input v-model="edit_zdsformdata.zds10" @input="updateTotal" style="width: 80px;" id ='zds10' @keydown="add_gdzlent($event, 'zds9', 'zds10', 'zds11')"/>
  352. <el-input v-model="edit_zdsformdata.zds11" @input="updateTotal" style="width: 80px;" id ='zds11' @keydown="add_gdzlent($event, 'zds10', 'zds11', 'zds12')"/>
  353. <el-input v-model="edit_zdsformdata.zds12" @input="updateTotal" style="width: 80px;" id ='zds12' @keydown="add_gdzlent($event, 'zds11', 'zds12', 'zds13')"/>
  354. <el-input v-model="edit_zdsformdata.zds13" @input="updateTotal" style="width: 80px;" id ='zds13' @keydown="add_gdzlent($event, 'zds12', 'zds13', 'zds14')"/>
  355. <el-input v-model="edit_zdsformdata.zds14" @input="updateTotal" style="width: 80px;" id ='zds14' @keydown="add_gdzlent($event, 'zds13', 'zds14', '色系名称')"/>
  356. <el-input v-model="edit_zdsformdata.zdtotal" readonly style="width: 80px;" />
  357. </el-form-item>
  358. </div>
  359. </el-col>
  360. </el-row>
  361. <template #footer>
  362. <div class="dialog-footer" style="display: flex; justify-content: flex-end; margin-top: 20px;">
  363. <el-button @click="ys_edit_closeDialog" style="margin-left: 10px;">取消</el-button>
  364. <el-button type="primary" @click="ys_edit_Dialog" style="margin-left: 10px;">确认</el-button>
  365. </div>
  366. </template>
  367. </el-dialog>
  368. <!-- 新增订单资料弹窗 -->
  369. <el-dialog v-model="add_gddialogFormVisible" :before-close="add_gdcloseDialog" title="新增订单资料"
  370. style="height: 100%;width:90%;margin: 0px 0px 0px 6%;" top="0%" destroy-on-close>
  371. <div style="display: flex; justify-content: space-between;">
  372. <div style="flex: 2;">
  373. <el-form :model="add_gdscgdformData">
  374. <div style="display: flex;">
  375. <div style="flex: 1; margin-right: 20px;">
  376. <el-form-item label="订单编号" label-width="100px">
  377. <el-input v-model="add_gdscgdformData.订单编号" disabled />
  378. </el-form-item>
  379. <el-form-item label="生产款号" label-width="100px">
  380. <el-input v-model="add_gdscgdformData['生产款号']" id="生产款号"
  381. @keydown="add_gdzlent($event, '粘衬', '生产款号', '订单数量')" />
  382. </el-form-item>
  383. <el-form-item label="款式" label-width="100px">
  384. <el-input v-model="add_gdscgdformData['款式']" id="款式"
  385. @keydown="add_gdzlent($event, '订单数量', '款式', '落货日期')" />
  386. </el-form-item>
  387. </div>
  388. <div style="flex: 1;">
  389. <el-form-item label="客户编号" label-width="100px">
  390. <el-input v-model="add_gdscgdformData.客户编号" disabled />
  391. </el-form-item>
  392. <el-form-item label="订单数量" label-width="100px">
  393. <el-input v-model="add_gdscgdformData.订单数量" id="订单数量"
  394. @input="Input_handle()"
  395. @keydown="add_gdzlent($event, '生产款号', '订单数量', '款式')" />
  396. </el-form-item>
  397. <el-form-item label="落货日期" label-width="100px">
  398. <el-date-picker v-model="add_gdscgdformData['落货日期']" id="落货日期"
  399. type="date" @keydown="add_gdzlent($event, '款式', '落货日期', '面料')" />
  400. </el-form-item>
  401. </div>
  402. </div>
  403. <!-- 面料部分 -->
  404. <el-form-item label="面料" label-width="100px">
  405. <el-input
  406. type="textarea"
  407. v-model="add_gdscgdformData['面料']" id="面料"
  408. rows="2"
  409. resize="none"
  410. @keydown="add_gdzlent($event, '落货日期', '面料', '箱唛要求')"
  411. />
  412. </el-form-item>
  413. <!-- 箱唛要求 -->
  414. <el-form-item label="箱唛要求" label-width="100px">
  415. <el-input
  416. type="textarea"
  417. v-model="add_gdscgdformData['箱唛要求']" id="箱唛要求"
  418. @keydown="add_gdzlent($event, '面料', '箱唛要求', '备注')"
  419. rows="2"
  420. resize="none"
  421. />
  422. </el-form-item>
  423. <!-- 备注 -->
  424. <el-form-item label="备注" label-width="100px">
  425. <el-input
  426. type="textarea"
  427. v-model="add_gdscgdformData['备注']" id="备注"
  428. @keydown="add_gdzlent($event, '箱唛要求', '备注', '船样描述')"
  429. rows="2"
  430. resize="none"
  431. />
  432. </el-form-item>
  433. <!-- 船样描述 -->
  434. <el-form-item label="船样描述" label-width="100px">
  435. <el-input
  436. type="textarea"
  437. v-model="add_gdscgdformData['船样描述']" id="船样描述"
  438. rows="1"
  439. resize="none"
  440. @keydown="add_gdzlent($event, '备注', '船样描述', '船样合计')"
  441. />
  442. </el-form-item>
  443. </el-form>
  444. </div>
  445. <!-- 右侧部分 -->
  446. <div style="flex: 1; margin-left: 20px;">
  447. <div style="display: flex; align-items: center;">
  448. <el-upload
  449. ref="uploadRef"
  450. class="upload-demo"
  451. :action="uploadUrl"
  452. :http-request="customUpload"
  453. :headers="uploadHeaders"
  454. list-type="picture-card"
  455. :on-preview="handlePreview"
  456. :on-remove="handleRemove"
  457. :before-upload="beforeUpload"
  458. :on-success="handleSuccess"
  459. :on-error="handleError"
  460. :file-list="fileList"
  461. :limit="1"
  462. accept="image/jpeg,image/png"
  463. style="margin-left: 20px;"
  464. >
  465. <i class="el-icon-plus"></i>
  466. </el-upload>
  467. </div>
  468. <h4 style="font-size: 18px; margin-left: 150px;">上传图片</h4>
  469. <el-form>
  470. <el-form-item label="制单人" label-width="120px">
  471. <el-input v-model="add_gdscgdformData['Sys_id']" disabled style='width: 200px;'/>
  472. </el-form-item>
  473. <el-form-item label="制单日期" label-width="120px">
  474. <el-date-picker v-model="add_gdscgdformData['制单日期']" disabled type="date" style='width: 200px;'/>
  475. </el-form-item>
  476. </el-form>
  477. <el-button type="primary" @click="Related_fabrics"
  478. style="width: 160px;height: 45px;font-size: 20px; margin-left: 120px;">
  479. 关联订单面料
  480. </el-button>
  481. </div>
  482. </div>
  483. <!-- 底部部分 -->
  484. <div style="display: flex; justify-content: space-between; margin-top: 10px;">
  485. <el-form :model="add_gdscgdformData" style="flex: 1;">
  486. <div style="display: flex;">
  487. <div style="flex: 0.5; margin-right: 10px;">
  488. <el-form-item label="船样合计" label-width="100px">
  489. <el-input v-model="add_gdscgdformData['船样合计']" id="船样合计"
  490. @input="Input_handle()"
  491. @keydown="add_gdzlent($event, '船样描述', '船样合计', '粘衬')"
  492. />
  493. </el-form-item>
  494. </div>
  495. <div style="flex: 0.9;">
  496. <el-form-item label="粘衬" label-width="60px">
  497. <el-input v-model="add_gdscgdformData['粘衬']" id="粘衬"
  498. @keydown="add_gdzlent($event, '船样合计', '粘衬', '单位')"
  499. />
  500. </el-form-item>
  501. </div>
  502. <div style="flex: 0.4;">
  503. <el-form-item label="单位" label-width="70px">
  504. <el-input v-model="add_gdscgdformData['单位']" id="单位"
  505. @keydown="add_gdzlent($event, '粘衬', '单位', '生产款号')"
  506. />
  507. </el-form-item>
  508. </div>
  509. <div style="flex: 1;">
  510. <!-- <el-form-item label="" class="mab" prop="isBanciSelected" label-width="90">
  511. <el-checkbox
  512. v-model="add_gdscgdformData['合并']"
  513. class="custom-checkbox"
  514. >
  515. <span style="color: red;">需要将订单数据合并请勾选</span>
  516. </el-checkbox>
  517. </el-form-item> -->
  518. </div>
  519. </div>
  520. </el-form>
  521. </div>
  522. <el-tag><span style="font-size: 18px;margin-left: 10px;">关联订单面料明细</span></el-tag>
  523. <el-table ref="multipleTable"
  524. :row-style="{ height: '30px' }"
  525. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  526. :header-cell-style="{ padding: '0px' }"
  527. :show-overflow-tooltip="true"
  528. :cell-class-name="planUsageCellClass"
  529. highlight-current-row="true"
  530. style="width: 100%;height: 30vh" border tooltip-effect="dark" :data="zsglddtableData" row-key="ID">
  531. <el-table-column align="left" label="订单编号" prop="订单编号" width="110"/>
  532. <el-table-column align="left" label="物料编码" prop="物料编码" width="200"/>
  533. <el-table-column align="left" label="生产款号" prop="生产款号" width="200"/>
  534. <el-table-column align="left" label="颜色" prop="颜色" width="115"/>
  535. <el-table-column align="left" label="物料名称" prop="物料名称" width="170"/>
  536. <el-table-column align="left" label="计划门幅" prop="计划门幅" width="115"/>
  537. <el-table-column align="left" label="定额门幅" prop="定额门幅" width="115"/>
  538. <el-table-column align="left" label="款式" prop="款式" width="115" />
  539. <el-table-column fixed="right" label="操作" width="120">
  540. <template #default="{ row, $index }">
  541. <el-button @click="deleteRow($index)" type="text" size="small">
  542. 移除
  543. </el-button>
  544. </template>
  545. </el-table-column>
  546. </el-table>
  547. <!-- 底部操作按钮 -->
  548. <template #footer>
  549. <div class="dialog-footer" style="text-align: right;">
  550. <el-button @click="add_gdcloseDialog">取消</el-button>
  551. <el-button type="primary" @click="add_gdenterDialog":disabled="!isClickable" v-loading.fullscreen.lock="fullscreenLoading">确定</el-button>
  552. </div>
  553. </template>
  554. </el-dialog>
  555. <!-- 关联订单面料弹窗 -->
  556. <el-dialog v-model="Related_fabricsVisible" :before-close="Related_fabricscloseDialog" title="关联订单面料"
  557. style="width: 70%;height: 80%;" top="2%" destroy-on-close>
  558. <el-form>
  559. <div>
  560. <el-space>
  561. <el-input v-model="glddzl_keyword" style="width: 300px;" placeholder="请搜索要关联的订单编号或款号进行关联" @input="real_handleInput"/>
  562. <el-button type="primary" @click="ddsearchHandle(glddzl_keyword)">搜索</el-button>
  563. <!-- <el-button @click="Related_fabricscloseDialog">关闭</el-button> -->
  564. <el-button type="primary" @click="Related_fabricsenterDialog">确定关联</el-button>
  565. <span style="color: red;">请选择需要关联复用的颜色物料,在确定关联</span>
  566. </el-space>
  567. <br>
  568. <br>
  569. <el-table ref="multipleTable"
  570. :row-style="{ height: '30px' }"
  571. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  572. :header-cell-style="{ padding: '0px' }"
  573. :show-overflow-tooltip="true"
  574. :cell-class-name="planUsageCellClass"
  575. highlight-current-row="true"
  576. @row-dblclick="updateCompanyFunc2"
  577. @selection-change="glddSelectionChange"
  578. style="width: 100%;height: 65vh" border tooltip-effect="dark" :data="glddtableData" row-key="ID">
  579. <el-table-column type="selection" width="50" />
  580. <el-table-column align="left" label="订单编号" prop="订单编号" width="115"/>
  581. <el-table-column align="left" label="BOM_物料编码" prop="BOM_物料编码" width="200"/>
  582. <el-table-column align="left" label="生产款号" prop="生产款号" width="200"/>
  583. <el-table-column align="left" label="颜色" prop="颜色" width="115"/>
  584. <el-table-column align="left" label="物料名称" prop="物料名称" width="170"/>
  585. <el-table-column align="left" label="计划门幅" prop="计划门幅" width="115"/>
  586. <el-table-column align="left" label="定额门幅" prop="定额门幅" width="115"/>
  587. <el-table-column align="left" label="款式" prop="款式" width="115"/>
  588. <el-table-column align="left" label="单位" prop="投料单位" width="115"/>
  589. </el-table>
  590. </div>
  591. </el-form>
  592. <template #footer>
  593. </template>
  594. </el-dialog>
  595. <el-dialog
  596. v-model="order_viewVisible"
  597. title="选择打印格式"
  598. width="30%"
  599. top="25%"
  600. :before-close="order_viewCloseDialog"
  601. destroy-on-close
  602. >
  603. <el-form>
  604. <el-form-item label="打印方向" label-width="100px">
  605. <el-radio-group v-model="printDirection">
  606. <el-radio label="纵向">纵向</el-radio>
  607. <el-radio label="横向">横向</el-radio>
  608. </el-radio-group>
  609. </el-form-item>
  610. </el-form>
  611. <template #footer>
  612. <el-button @click="order_viewCloseDialog">关闭</el-button>
  613. <el-button type="primary" @click="confirmPrintDirection">确定打印</el-button>
  614. </template>
  615. </el-dialog>
  616. <!-- 修改BOM资料 -->
  617. <el-dialog v-model="edit_bomdialogFormVisible" :before-close="edit_bomcloseDialog" title="修改BOM资料" width="60%" top="2%" destroy-on-close>
  618. <el-descriptions class="margin-top" :column="4" :size="size" border>
  619. <el-descriptions-item label="订单编号" class="ddh">{{ ddhformData['ddh'] }}</el-descriptions-item>
  620. <el-descriptions-item label="客户">{{ ddhformData['kh'] }}</el-descriptions-item>
  621. <el-descriptions-item label="生产款号">{{ ddhformData['sckh'] }}</el-descriptions-item>
  622. <el-descriptions-item label="款式">{{ ddhformData['ks'] }}</el-descriptions-item>
  623. </el-descriptions>
  624. <el-divider content-position="left">
  625. <span style="font-size: 18px;color:red;font-weight: bold;margin-left: 20px;">绿色部分可进行修改</span>
  626. </el-divider>
  627. <div style="margin-top: 5px;">
  628. <el-table ref="paichengRef"
  629. :show-overflow-tooltip="true"
  630. highlight-current-row="true"
  631. :row-style="{ height: '0px' }"
  632. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '0px' }"
  633. :header-cell-style="{ padding: '0px' }"
  634. style="width: 100%;height: 60vh" border tooltip-effect="dark"
  635. :data="edit_resbomtableData" row-key="ID"
  636. :cell-class-name="scfjfpxsCellClass">
  637. <template v-for="(item, idx) in edit_resbom_tableColumns">
  638. <el-table-column #default="{ row, column, $index }" align="left" :label="item.label" :width="item.width" >
  639. <div v-if="['物料名称', '计划用料', '定额用料','计划门幅','定额门幅', '备注'].includes(item.prop)">
  640. <el-input v-model="row[item.prop]" :clearable="false"
  641. :id="`input${idx}${$index}`" @keyup="resbom_handleKeyDown($event, idx, $index, item.prop)" @input="handleInput($event, row, item.prop)"/>
  642. </div>
  643. <div v-else>{{ row[item.prop] }}</div>
  644. </el-table-column>
  645. </template>
  646. </el-table>
  647. </div>
  648. <div class="dialog-footer" style="text-align: right;margin-top: 5px;">
  649. <el-button @click="editres_bomcloseDialog">取 消</el-button>
  650. <el-button type="primary" @click="editres_bomenterDialog">修改</el-button>
  651. </div>
  652. </el-dialog>
  653. <!-- 批量修改BOM资料弹窗 -->
  654. <el-dialog v-model="res_bomdialogFormVisible" :before-close="res_bomcloseDialog" title="批量新增/更新BOM数据" width="70%" top="1%" destroy-on-close>
  655. <el-descriptions class="margin-top" :column="4" :size="size" border>
  656. <el-descriptions-item label="订单编号">{{ ddhformData['ddh'] }}</el-descriptions-item>
  657. <el-descriptions-item label="客户">{{ ddhformData['kh'] }}</el-descriptions-item>
  658. <el-descriptions-item label="生产款号">{{ ddhformData['sckh'] }}</el-descriptions-item>
  659. <el-descriptions-item label="款式">{{ ddhformData['ks'] }}</el-descriptions-item>
  660. </el-descriptions>
  661. <el-descriptions class="margin-top" :column="1" :size="size" border>
  662. <el-descriptions-item label="面料" >{{ ddhformData['ml'] }}</el-descriptions-item>
  663. </el-descriptions>
  664. <el-divider content-position="left">
  665. <el-button type="primary" icon="plus" @click="add_bomenterDialog">新增一行</el-button>
  666. <span style="font-size: 18px;color:red;font-weight: bold;margin-left: 20px;">绿色部分可进行修改</span>
  667. </el-divider>
  668. <div style="margin-top: 5px;">
  669. <el-table ref="paichengRef"
  670. :show-overflow-tooltip="true"
  671. highlight-current-row="true"
  672. :row-style="{ height: '0px' }"
  673. :cell-style="{ padding: '0px' }"
  674. :header-row-style="{ height: '0px' }"
  675. :header-cell-style="{ padding: '0px' }"
  676. style="width: 100%;height: 58vh"
  677. border tooltip-effect="dark"
  678. :data="resbomtableData" row-key="ID"
  679. :cell-class-name="scfjfpxsCellClass">
  680. <template v-for="(item, idx) in resbom_tableColumns">
  681. <el-table-column #default="{ row, column, $index }" align="left" :label="item.label" :width="item.width">
  682. <!-- 如果是物料名称且UNIQID没有值,则显示输入框,否则显示内容 -->
  683. <div v-if="item.prop === '物料名称'">
  684. <el-input
  685. v-if="!row.UNIQID"
  686. v-model="row[item.prop]"
  687. :clearable="false"
  688. :id="`input${idx}${$index}`"
  689. @input="handleInput($event, row, item.prop)"
  690. />
  691. <span v-else>{{ row[item.prop] }}</span> <!-- 如果UNIQID有值,则直接显示内容 -->
  692. </div>
  693. <!-- 其他列的处理 -->
  694. <div v-else-if="['物料分类','计划用料', '定额用料', '计划门幅', '定额门幅', '备注'].includes(item.prop)">
  695. <el-input
  696. v-model="row[item.prop]"
  697. :clearable="false"
  698. :id="`input${idx}${$index}`"
  699. @input="handleInput($event, row, item.prop)"
  700. />
  701. </div>
  702. <!-- 非输入框列 -->
  703. <div v-else>{{ row[item.prop] }}</div>
  704. </el-table-column>
  705. </template>
  706. <el-table-column fixed="right" label="操作" width="80">
  707. <template #default="{ row, $index }">
  708. <el-button @click="record_deleteRow(row,$index)" type="danger" size="small"
  709. style="font-size: 16px;padding: 0px;width: 60px;background-color: red;">
  710. 删除
  711. </el-button>
  712. </template>
  713. </el-table-column>
  714. </el-table>
  715. </div>
  716. <div class="dialog-footer" style="text-align: right;margin-top: 5px;">
  717. <el-button @click="res_bomcloseDialog" style="width: 70px;height: 40px;">关闭</el-button>
  718. <el-button type="primary" @click="res_bomenterDialog" style="width: 70px;height: 40px;">一键修改</el-button>
  719. </div>
  720. </el-dialog>
  721. <el-dialog v-model="ddzl_dialogFormVisible" :before-close="dd_closeDialog" title="修改订单资料"
  722. style="height: 100%;width:90%;margin: 0px 0px 0px 6%;" top="0%" destroy-on-close >
  723. <!-- 主布局,分为左右两部分 -->
  724. <el-row>
  725. <!-- 左侧部分,包括第一列和第二列 -->
  726. <el-col :span="16">
  727. <el-row>
  728. <!-- 第一列 -->
  729. <el-col :span="12">
  730. <el-form :model="edit_ddformData">
  731. <el-form-item label="订单编号" label-width="100px">
  732. <el-input v-model="edit_ddformData['订单编号']" disabled />
  733. </el-form-item>
  734. <el-form-item label="生产款号" label-width="100px">
  735. <el-input
  736. v-model="edit_ddformData['生产款号']" id='生产款号'
  737. @keydown="add_gdzlent($event, '单位', '生产款号', '订单数量')"
  738. />
  739. </el-form-item>
  740. <el-form-item label="款式" label-width="100px">
  741. <el-input
  742. v-model="edit_ddformData['款式']"id='款式'
  743. @keydown="add_gdzlent($event, '订单数量', '款式', '落货日期')"
  744. />
  745. </el-form-item>
  746. </el-form>
  747. </el-col>
  748. <!-- 第二列 -->
  749. <el-col :span="12">
  750. <el-form>
  751. <el-form-item label="客户编号" label-width="100px">
  752. <el-input v-model="edit_ddformData['客户编号']" disabled />
  753. </el-form-item>
  754. <el-form-item label="订单数量" label-width="100px">
  755. <el-input v-model="edit_ddformData['订单数量']" id='订单数量'
  756. @input="Input_handle()"
  757. @keydown="add_gdzlent($event, '生产款号', '订单数量', '款式')"
  758. />
  759. </el-form-item>
  760. <el-form-item label="落货日期" label-width="100px">
  761. <el-date-picker
  762. v-model="edit_ddformData['落货日期']"
  763. type="date"id='落货日期'
  764. @keydown="add_gdzlent($event, '款式', '落货日期', '面料')"
  765. />
  766. </el-form-item>
  767. </el-form>
  768. </el-col>
  769. </el-row>
  770. <!-- 面料,独占两列宽度,继续在左侧布局 -->
  771. <el-row>
  772. <el-col :span="24">
  773. <el-form-item label="面料" label-width="100px">
  774. <el-input
  775. type="textarea"
  776. v-model="edit_ddformData['面料']"
  777. rows="2"
  778. resize="none" id='面料'
  779. @keydown="add_gdzlent($event, '落货日期', '面料', '箱唛要求')"
  780. />
  781. </el-form-item>
  782. </el-col>
  783. </el-row>
  784. <!-- 其他表单项 -->
  785. <el-row>
  786. <el-col :span="24">
  787. <el-form-item label="箱唛要求" label-width="100px">
  788. <el-input
  789. type="textarea" id='箱唛要求'
  790. v-model="edit_ddformData['箱唛要求']"
  791. @keydown="add_gdzlent($event, '面料', '箱唛要求', '要求')"
  792. rows="2"
  793. resize="none"
  794. />
  795. </el-form-item>
  796. </el-col>
  797. </el-row>
  798. <el-row>
  799. <el-col :span="24">
  800. <el-form-item label="备注" label-width="100px">
  801. <el-input
  802. type="textarea"
  803. v-model="edit_ddformData['要求']" id='要求'
  804. @keydown="add_gdzlent($event, '箱唛要求', '要求', '船样描述')"
  805. rows="2"
  806. resize="none"
  807. />
  808. </el-form-item>
  809. </el-col>
  810. </el-row>
  811. <el-row>
  812. <el-col :span="24">
  813. <el-form-item label="船样描述" label-width="100px">
  814. <el-input
  815. type="textarea" id='船样描述'
  816. @keydown="add_gdzlent($event, '要求', '船样描述', '船样合计')"
  817. v-model="edit_ddformData['船样描述']"
  818. rows="1"
  819. resize="none"
  820. />
  821. </el-form-item>
  822. </el-col>
  823. </el-row>
  824. </el-col>
  825. <!-- 右侧部分,第三列 -->
  826. <el-col :span="8">
  827. <el-form>
  828. <div style="display: flex; align-items: center;">
  829. <el-upload
  830. ref="uploadRef"
  831. class="upload-demo"
  832. :action="uploadUrl"
  833. :http-request="customUpload"
  834. :headers="uploadHeaders"
  835. list-type="picture-card"
  836. :on-preview="handlePreview"
  837. :on-remove="handleRemove"
  838. :before-upload="beforeUpload"
  839. :on-success="handleSuccess"
  840. :on-error="handleError"
  841. :file-list="fileList"
  842. :limit="1"
  843. accept="image/jpeg,image/png"
  844. style="margin-left: 20px;"
  845. >
  846. <i class="el-icon-plus"></i>
  847. </el-upload>
  848. </div>
  849. <h4 style="font-size: 18px; margin-left: 150px;">上传图片</h4>
  850. <!-- 独立的制单信息 -->
  851. <el-form-item label="制单人" label-width="120px">
  852. <el-input v-model="edit_ddformData['Sys_id']" disabled style="width: 200px;"/>
  853. </el-form-item>
  854. <el-form-item label="制单日期" label-width="120px">
  855. <el-date-picker v-model="edit_ddformData['Sys_rq']" id='制单日期' disabled style="width: 200px;" type="date" />
  856. </el-form-item>
  857. </el-form>
  858. <!-- <el-button type="primary" @click="edit_Related_fabrics"
  859. style="width: 160px;height: 45px;font-size: 20px; margin-left: 120px;">
  860. 关联订单面料
  861. </el-button> -->
  862. </el-col>
  863. </el-row>
  864. <!-- 底部其他表单项 -->
  865. <div style="display: flex; justify-content: space-between; margin-top: 10px;">
  866. <el-form :model="edit_ddformData" style="flex: 1;">
  867. <div style="display: flex;">
  868. <div style="flex:0.5; margin-right: 10px;">
  869. <el-form-item label="船样合计" label-width="100px">
  870. <el-input v-model="edit_ddformData['船样合计']" id="船样合计"
  871. @input="Input_handle()"
  872. @keydown="add_gdzlent($event, '船样描述', '船样合计', '粘衬')"
  873. />
  874. </el-form-item>
  875. </div>
  876. <div style="flex: 0.9;">
  877. <el-form-item label="粘衬" label-width="60px">
  878. <el-input v-model="edit_ddformData['粘衬']" id="粘衬"
  879. @keydown="add_gdzlent($event, '船样合计', '粘衬', '单位')"
  880. />
  881. </el-form-item>
  882. </div>
  883. <div style="flex: 0.4;">
  884. <el-form-item label="单位" label-width="70px">
  885. <el-input v-model="edit_ddformData['单位']" id="单位"
  886. @keydown="add_gdzlent($event, '粘衬', '单位', '生产款号')"
  887. />
  888. </el-form-item>
  889. </div>
  890. <div style="flex: 1;">
  891. <!-- <el-form-item label="" class="mab" prop="isBanciSelected" label-width="90">
  892. <el-checkbox
  893. v-model="edit_ddformData['合并']"
  894. class="custom-checkbox"
  895. >
  896. <span style="color: red;">需要将订单数据合并请勾选</span>
  897. </el-checkbox>
  898. </el-form-item> -->
  899. </div>
  900. </div>
  901. </el-form>
  902. </div>
  903. <el-tag><span style="font-size: 18px;margin-left: 10px;">关联订单面料明细</span></el-tag>
  904. <el-table ref="multipleTable"
  905. :row-style="{ height: '30px' }"
  906. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  907. :header-cell-style="{ padding: '0px' }"
  908. :show-overflow-tooltip="true"
  909. :cell-class-name="planUsageCellClass"
  910. highlight-current-row="true"
  911. style="width: 100%;height: 30vh" border tooltip-effect="dark" :data="edit_zsglddtableData" row-key="ID">
  912. <el-table-column align="left" label="订单编号" prop="订单编号" width="110"/>
  913. <el-table-column align="left" label="BOM_物料编码" prop="BOM_物料编码" width="200"/>
  914. <el-table-column align="left" label="生产款号" prop="生产款号" width="200"/>
  915. <el-table-column align="left" label="颜色" prop="颜色" width="115"/>
  916. <el-table-column align="left" label="物料名称" prop="物料名称" width="170"/>
  917. <el-table-column align="left" label="计划门幅" prop="计划门幅" width="115"/>
  918. <el-table-column align="left" label="定额门幅" prop="定额门幅" width="115"/>
  919. <el-table-column align="left" label="款式" prop="款式" width="115" />
  920. <el-table-column fixed="right" label="操作" width="120">
  921. <template #default="{ row, $index }">
  922. <el-button @click="edit_deleteRow($index)" type="text" size="small">
  923. 移除
  924. </el-button>
  925. </template>
  926. </el-table-column>
  927. </el-table>
  928. <!-- 底部操作按钮 -->
  929. <template #footer>
  930. <div class="dialog-footer" style="text-align: right;">
  931. <el-button @click="dd_closeDialog">取消</el-button>
  932. <el-button type="primary" @click="dd_edit_Dialog">确定</el-button>
  933. </div>
  934. </template>
  935. </el-dialog>
  936. <!-- 新增颜色资料弹窗 -->
  937. <el-dialog
  938. v-model="add_gdyjdialogFormVisible"
  939. :before-close="add_gdyjcloseDialog"
  940. style="width: 73%; max-height: 80%; overflow-y: auto; margin-top: 4%;"
  941. :title="'新增颜色资料'"
  942. destroy-on-close>
  943. <el-form label-width="100px" :model="add_yszlformdata">
  944. <el-row :gutter="24" class="form-row">
  945. <el-col :span="10">
  946. <div style="display: flex; gap: 0px;">
  947. <h3 style="color:red;font-size: 24px;margin:-5px 0px 8px 12px;" >订单编号&nbsp;&nbsp;&nbsp;{{_ddhval}}</h3>
  948. </div>
  949. </el-col>
  950. <el-col :span="10">
  951. <el-form-item label="订单子编号:" class="mab" prop="keyOrder" id ='订单子编号' label-width='110'>
  952. <el-input v-model="add_yszlformdata.ddzbh" disabled style="width: 250px;" />
  953. </el-form-item>
  954. </el-col>
  955. </el-row>
  956. <el-row :gutter="24" class="form-row">
  957. <el-col :span="10">
  958. <el-form-item label="色系名称:" class="mab" prop="keyOrder" label-width='110'>
  959. <el-select
  960. v-model="add_yszlformdata.sxmc" style="width: 150px;" id="色系名称"
  961. @keydown="add_gdzlent($event, '', '色系名称', '款号:')">
  962. <el-option
  963. v-for="color in getSuborderscolor.colorlist"
  964. :key="color.id"
  965. :label="color.colorname"
  966. :value="color.colorname"
  967. @click="xz_sxhandleSizeChange(color.colorname,color.colorcode)">
  968. </el-option>
  969. </el-select>
  970. </el-form-item>
  971. </el-col>
  972. <el-col :span="10">
  973. <el-form-item label="PO号:" class="mab" prop="keyOrder" label-width="110">
  974. <el-input v-model="add_yszlformdata.kh" style="width: 250px;" id ='款号:' @keydown="add_gdzlent($event, '色系名称', '款号:', '颜色备注')"/>
  975. </el-form-item>
  976. </el-col>
  977. </el-row>
  978. <el-row :gutter="24" class="form-row">
  979. <el-col :span="8">
  980. <el-form-item label="颜色备注:" prop="joinDate" label-width='110'>
  981. <el-input v-model="add_yszlformdata.ysbz" style="width: 250px;" id ='颜色备注' @keydown="add_gdzlent($event, '款号:', '颜色备注', '是否船样')"/>
  982. </el-form-item>
  983. </el-col>
  984. <el-col :span="8">
  985. <el-form-item label="是否船样:" prop="joinDate" label-width='230'>
  986. <el-select v-model="add_yszlformdata.sfcy" style="width: 150px;" id ='是否船样' @keydown="add_gdzlent($event, '颜色备注', '是否船样', 'cm1')">
  987. <el-option label="是" value="是" @click="cyChange('是')"></el-option>
  988. <el-option label="否" value="否" @click="cyChange('否')"></el-option>
  989. </el-select>
  990. </el-form-item>
  991. </el-col>
  992. </el-row>
  993. <el-row :gutter="24" class="form-row">
  994. <el-col :span="24">
  995. <el-form-item label="尺码:" class="mab" prop="keyOrder" label-width="110">
  996. <el-input
  997. v-model="cmformdata.cm1"
  998. style="width: 80px;"
  999. id="cm1"
  1000. @input="handleSizeInput('cm1')"
  1001. />
  1002. <el-input
  1003. v-model="cmformdata.cm2"
  1004. style="width: 80px;"
  1005. id="cm2"
  1006. @input="handleSizeInput('cm2')"
  1007. />
  1008. <el-input
  1009. v-model="cmformdata.cm3"
  1010. style="width: 80px;"
  1011. id="cm3"
  1012. @input="handleSizeInput('cm3')"
  1013. />
  1014. <el-input
  1015. v-model="cmformdata.cm4"
  1016. style="width: 80px;"
  1017. id="cm4"
  1018. @input="handleSizeInput('cm4')"
  1019. />
  1020. <el-input
  1021. v-model="cmformdata.cm5"
  1022. style="width: 80px;"
  1023. id="cm5"
  1024. @input="handleSizeInput('cm5')"
  1025. />
  1026. <el-input
  1027. v-model="cmformdata.cm6"
  1028. style="width: 80px;"
  1029. id="cm6"
  1030. @input="handleSizeInput('cm6')"
  1031. />
  1032. <el-input
  1033. v-model="cmformdata.cm7"
  1034. style="width: 80px;"
  1035. id="cm7"
  1036. @input="handleSizeInput('cm7')"
  1037. />
  1038. <el-input
  1039. v-model="cmformdata.cm8"
  1040. style="width: 80px;"
  1041. id="cm8"
  1042. @input="handleSizeInput('cm8')"
  1043. />
  1044. <el-input
  1045. v-model="cmformdata.cm9"
  1046. style="width: 80px;"
  1047. id="cm9"
  1048. @input="handleSizeInput('cm9')"
  1049. />
  1050. <el-input
  1051. v-model="cmformdata.cm10"
  1052. style="width: 80px;"
  1053. @input="handleSizeInput('cm10')"
  1054. />
  1055. <el-input
  1056. v-model="cmformdata.cm11"
  1057. style="width: 80px;"
  1058. @input="handleSizeInput('cm11')"
  1059. />
  1060. <el-input
  1061. v-model="cmformdata.cm12"
  1062. style="width: 80px;"
  1063. @input="handleSizeInput('cm12')"
  1064. />
  1065. <el-input
  1066. v-model="cmformdata.cm13"
  1067. style="width: 80px;"
  1068. @input="handleSizeInput('cm13')"
  1069. />
  1070. <el-input
  1071. v-model="cmformdata.cm14"
  1072. style="width: 80px;"
  1073. @input="handleSizeInput('cm14')"
  1074. />
  1075. <el-input
  1076. v-model="cmformdata.sctotal"
  1077. style="width: 80px;"
  1078. @input="handleSizeInput('sctotal')"
  1079. />
  1080. </el-form-item>
  1081. </el-col>
  1082. </el-row>
  1083. <el-row :gutter="24" class="form-row">
  1084. <el-col :span="24">
  1085. <el-form-item label="制单数:" class="mab" prop="keyOrder" label-width='110'>
  1086. <el-input v-model="zdsformdata.zds1" @input="updateTotal" style="width: 80px;" id ='zds1' @keydown="add_gdzlent($event, 'cm14', 'zds1', 'zds2')"/>
  1087. <el-input v-model="zdsformdata.zds2" @input="updateTotal" style="width: 80px;" id ='zds2' @keydown="add_gdzlent($event, 'zds1', 'zds2', 'zds3')"/>
  1088. <el-input v-model="zdsformdata.zds3" @input="updateTotal" style="width: 80px;" id ='zds3' @keydown="add_gdzlent($event, 'zds2', 'zds3', 'zds4')"/>
  1089. <el-input v-model="zdsformdata.zds4" @input="updateTotal" style="width: 80px;" id ='zds4' @keydown="add_gdzlent($event, 'zds3', 'zds4', 'zds5')"/>
  1090. <el-input v-model="zdsformdata.zds5" @input="updateTotal" style="width: 80px;" id ='zds5' @keydown="add_gdzlent($event, 'zds4', 'zds5', 'zds6')"/>
  1091. <el-input v-model="zdsformdata.zds6" @input="updateTotal" style="width: 80px;" id ='zds6' @keydown="add_gdzlent($event, 'zds5', 'zds6', 'zds7')"/>
  1092. <el-input v-model="zdsformdata.zds7" @input="updateTotal" style="width: 80px;" id ='zds7' @keydown="add_gdzlent($event, 'zds6', 'zds7', 'zds8')"/>
  1093. <el-input v-model="zdsformdata.zds8" @input="updateTotal" style="width: 80px;" id ='zds8' @keydown="add_gdzlent($event, 'zds7', 'zds8', 'zds9')"/>
  1094. <el-input v-model="zdsformdata.zds9" @input="updateTotal" style="width: 80px;" id ='zds9' @keydown="add_gdzlent($event, 'zds8', 'zds9', 'zds10')"/>
  1095. <el-input v-model="zdsformdata.zds10" @input="updateTotal" style="width: 80px;" id ='zds10' @keydown="add_gdzlent($event, 'zds9', 'zds10', 'zds11')"/>
  1096. <el-input v-model="zdsformdata.zds11" @input="updateTotal" style="width: 80px;" id ='zds11' @keydown="add_gdzlent($event, 'zds10', 'zds11', 'zds12')"/>
  1097. <el-input v-model="zdsformdata.zds12" @input="updateTotal" style="width: 80px;" id ='zds12' @keydown="add_gdzlent($event, 'zds11', 'zds12', 'zds13')"/>
  1098. <el-input v-model="zdsformdata.zds13" @input="updateTotal" style="width: 80px;" id ='zds13' @keydown="add_gdzlent($event, 'zds12', 'zds13', 'zds14')"/>
  1099. <el-input v-model="zdsformdata.zds14" @input="updateTotal" style="width: 80px;" id ='zds14' @keydown="add_gdzlent($event, 'zds13', 'zds14', '色系名称')"/>
  1100. <el-input v-model="zdsformdata.zdtotal" readonly style="width: 80px;" />
  1101. </el-form-item>
  1102. </el-col>
  1103. </el-row>
  1104. </el-form>
  1105. <template #footer>
  1106. <div class="dialog-footer" style="display: flex; justify-content: flex-end; padding: 10px;">
  1107. <el-button type="primary" @click="add_dyjcloseDialog">取消</el-button>
  1108. <el-button type="primary" @click="add_gdyjenterDialog">确定</el-button>
  1109. </div>
  1110. </template>
  1111. </el-dialog>
  1112. <!-- 新增工序资料-->
  1113. <el-dialog v-model="visible" :before-close="()=> visible = false" style="width: 25%;margin: 10% auto" :title="'新增工序资料'" destroy-on-close>
  1114. <el-form>
  1115. <div>
  1116. <div style="display: flex; gap: 0px;">
  1117. <h3 style="color:red;font-size: 24px;margin:0px 0px 0px 15px;">订单号&nbsp;&nbsp;&nbsp;{{_ddhval}}</h3>
  1118. </div>
  1119. <div style="display: flex; gap: 0px;">
  1120. <el-form-item label="仓库出库:" class="mab" prop="isBanciSelected" label-width="110">
  1121. <el-checkbox v-model="form['仓库出库']"></el-checkbox>
  1122. </el-form-item>
  1123. </div>
  1124. <div style="display: flex; gap: 0px;">
  1125. <el-form-item label="裁切:" class="mab" prop="isBanciSelected" label-width="110">
  1126. <el-checkbox v-model="form['裁切']"></el-checkbox>
  1127. </el-form-item>
  1128. </div>
  1129. <div style="display: flex; gap: 0px;">
  1130. <el-form-item label="车缝:" class="mab" prop="isBanciSelected" label-width="110">
  1131. <el-checkbox v-model="form['车缝']"></el-checkbox>
  1132. </el-form-item>
  1133. </div>
  1134. <div style="display: flex; gap: 0px;">
  1135. <el-form-item label="后道收样:" class="mab" prop="isBanciSelected" label-width="110">
  1136. <el-checkbox v-model="form['后道收样']"></el-checkbox>
  1137. </el-form-item>
  1138. </div>
  1139. <div style="display: flex; gap: 0px;">
  1140. <el-form-item label="大烫:" class="mab" prop="isBanciSelected" label-width="110">
  1141. <el-checkbox v-model="form['大烫']"></el-checkbox>
  1142. </el-form-item>
  1143. </div>
  1144. <div style="display: flex; gap: 0px;">
  1145. <el-form-item label="总检:" class="mab" prop="isBanciSelected" label-width="110">
  1146. <el-checkbox v-model="form['总检']"></el-checkbox>
  1147. </el-form-item>
  1148. </div>
  1149. <div style="display: flex; gap: 0px;">
  1150. <el-form-item label="包装:" class="mab" prop="isBanciSelected" label-width="110">
  1151. <el-checkbox v-model="form['包装']"></el-checkbox>
  1152. </el-form-item>
  1153. </div>
  1154. </div>
  1155. </el-form>
  1156. <template #footer>
  1157. <div class="dialog-footer" style="text-align: right;top: auto;">
  1158. <el-button @click="add_gxcloseDialog">取 消</el-button>
  1159. <el-button type="primary" @click="add_gxenterDialog">确 定</el-button>
  1160. </div>
  1161. </template>
  1162. </el-dialog>
  1163. <!-- 附件上传 -->
  1164. <el-dialog v-model="jsfjdialogFormVisible" :before-close="jsfjcloseDialog"
  1165. style="margin-top: 40px" height="500px" width="700px" destroy-on-close>
  1166. <el-form :model="jsfjformdata" label-position="right" ref="elFormRef" :rules="rule" label-width="90px">
  1167. <el-row :gutter="24">
  1168. <el-col :span="10">
  1169. <div style="display: flex; gap: 0px;">
  1170. <h3 style="color:red;font-size: 24px;margin:-5px 0px 8px 12px;" >订单编号&nbsp;&nbsp;&nbsp;{{_ddhval}}</h3>
  1171. </div>
  1172. </el-col>
  1173. </el-row>
  1174. <br />
  1175. <el-row :gutter="24">
  1176. <el-col :span="16">
  1177. <el-form-item label="附件备注:" prop="address" class="mab">
  1178. <el-select v-model="jsfjformdata.附件备注" placeholder="请选择附件类型" id="附件备注">
  1179. <el-option label="订单附件" value="订单资料附件"></el-option>
  1180. <el-option label="技术附件" value="技术附件"></el-option>
  1181. </el-select>
  1182. </el-form-item>
  1183. </el-col>
  1184. </el-row>
  1185. <br>
  1186. <el-row :gutter="24">
  1187. <!-- <el-col :span="8">
  1188. <br>
  1189. <p>s</p>
  1190. </el-col> -->
  1191. <el-col :span="12">
  1192. <!-- <br> -->
  1193. <el-form-item label="附件备注:" prop="address" class="mab">
  1194. <input style="font-size:16px;" type="file" @change="uploadExcel" >
  1195. </el-form-item>
  1196. </el-col>
  1197. <!-- <el-col :span="4">
  1198. <br>
  1199. <el-button @click="yulan">预览</el-button>
  1200. </el-col> -->
  1201. </el-row>
  1202. </el-form>
  1203. <template #footer>
  1204. <br>
  1205. <div class="dialog-footer">
  1206. <el-button @click="jsfjcloseDialog">取 消</el-button>
  1207. <el-button type="primary" @click="jsfjenterDialog">确 定</el-button>
  1208. </div>
  1209. </template>
  1210. </el-dialog>
  1211. <!-- 面料库存弹窗 -->
  1212. <el-dialog v-model="mlinventoryVisible" :before-close="mlcloseDialog" title="面料库存出入库记录"
  1213. style="margin-top: 40px" height="300px" width="1000px" destroy-on-close>
  1214. <el-form :model="mlformdata" label-position="right" ref="elFormRef" :rules="rule" label-width="90px">
  1215. <el-table
  1216. ref="table"
  1217. highlight-current-row
  1218. show-overflow-tooltip
  1219. border
  1220. :data="historytableData"
  1221. :row-style="{ height: '25px' }"
  1222. :cell-style="{ padding: '0px' }"
  1223. :header-row-style="{ height: '20px' }"
  1224. :header-cell-style="{ padding: '0px' }"
  1225. style="width: 100%;height: 75vh;" >
  1226. <el-table-column label="订单编号" prop="订单编号"width="110" ></el-table-column>
  1227. <el-table-column label="面料" prop="面料" width="110"></el-table-column>
  1228. <el-table-column label="颜色" prop="颜色" width="110"></el-table-column>
  1229. <el-table-column label="入库数量" prop="入库数量" width="110"></el-table-column>
  1230. <el-table-column label="出库数量" prop="出库数量" width="110"></el-table-column>
  1231. <el-table-column label="领料部门" prop="领料部门" width="110"></el-table-column>
  1232. <el-table-column label="领料时间" prop="领料时间" width="110"></el-table-column>
  1233. </el-table>
  1234. <br>
  1235. </el-form>
  1236. <template #footer>
  1237. <br>
  1238. <div class="dialog-footer">
  1239. <el-button @click="mlcloseDialog">取 消</el-button>
  1240. <el-button type="primary" @click="mlenterDialog">确 定</el-button>
  1241. </div>
  1242. </template>
  1243. </el-dialog>
  1244. </el-main>
  1245. </layout-content>
  1246. </layout>
  1247. </layout>
  1248. <!-- 打印订单表预览 -->
  1249. <PrintPage ref="printPageRef" />
  1250. <!-- 子订单详情页 -->
  1251. <luckyexcelPage ref="luckyexcelPageRef" />
  1252. </div>
  1253. </template>
  1254. <script>
  1255. //点击按钮显示下方表格
  1256. export default {
  1257. data() {
  1258. return {
  1259. currentTable: '', // 当前展示的表格
  1260. activeName: 'first',
  1261. _ddhval:'',
  1262. size: '',
  1263. add_gddialogFormVisible: true,
  1264. };
  1265. }
  1266. };
  1267. </script>
  1268. <script setup>
  1269. // 全量引入格式化工具 请按需保留
  1270. import $script from 'scriptjs'
  1271. import $ from 'jquery';
  1272. import LuckyExcel from 'luckyexcel';
  1273. import { toRaw } from 'vue';
  1274. import { Layout, LayoutSider, LayoutContent } from '@arco-design/web-vue';
  1275. import { ElMessage, ElMessageBox,ElUpload, ElButton,ElLoading } from 'element-plus'
  1276. import { ref, reactive, computed, nextTick, watch,onMounted,onBeforeUnmount } from 'vue'
  1277. import axios from 'axios';
  1278. import * as XLSX from 'xlsx';
  1279. import jsPDF from 'jspdf';
  1280. import {Datalist,WorkOrderList,WorkOrderAdd,PrintListData,
  1281. printDetailAdd,PrintDetailDel,orderDataDel,getWorkOrder,
  1282. getSuborder,PrintDataEdit,WorkOrderEdit,gdAnnexAdd,upload,OrderAttachments,
  1283. getPonumber,FabricEdit,orderBomList,FabricDetail,fabricList,Bomdel,delfujian} from '@/api/mes/job'
  1284. import PrintPage from './components/print.vue'
  1285. import luckyexcelPage from './components/luckyexcel.vue'
  1286. import AddGongYi from './components/addGongYi.vue'
  1287. import { useUserStore } from '@/pinia/modules/user';
  1288. defineOptions({name: 'Company'})
  1289. //定义打印跳转页面
  1290. const printPageRef = ref()
  1291. const luckyexcelPageRef = ref()
  1292. //获取登录用户信息
  1293. const userStore = useUserStore()
  1294. const _username = ref('')
  1295. _username.value = userStore.userInfo.userName + '/' + userStore.userInfo.nickName
  1296. console.log('获取用户名称',_username.value)
  1297. //全局获取当前日期
  1298. const today = new Date();
  1299. const year = today.getFullYear();
  1300. const month = String(today.getMonth() + 1).padStart(2, '0'); // 月份从 0 开始,需要补零
  1301. const day = String(today.getDate()).padStart(2, '0');
  1302. const hours = String(today.getHours()).padStart(2, '0');
  1303. const minutes = String(today.getMinutes()).padStart(2, '0');
  1304. const seconds = String(today.getSeconds()).padStart(2, '0');
  1305. const currentDate = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
  1306. const currentDates = `${year}-${month}-${day}`;
  1307. //==============图片上传=============
  1308. //测试环境前端
  1309. // const uploadUrl = ref('http://mes-dacheng-api:8083/index.php/api/work_order/ImgUpload')
  1310. // 获取环境变量
  1311. const basePath = import.meta.env.VITE_BASE_PATH;
  1312. const uploadsPort = import.meta.env.VITE_UPLOADS_PORT;
  1313. // 动态生成路径
  1314. let path = basePath && uploadsPort ? `${basePath}:${uploadsPort}` : undefined;
  1315. // 如果 path 是 undefined,则使用默认地址
  1316. if (!path || path.includes("undefined")) {
  1317. console.log("第一路径获取失败,尝试使用备用地址 http://192.168.28.22:8082");
  1318. path = "http://192.168.28.22:8082";
  1319. }
  1320. // 如果还是 undefined,再降级到本地地址
  1321. if (path.includes("undefined")) {
  1322. console.log("备用地址获取失败,使用本地地址 http://127.0.0.1:58082");
  1323. path = "http://127.0.0.1:58082";
  1324. }
  1325. console.log("最终获取地址:", path);
  1326. // 上传的URL
  1327. const uploadUrl = ref(`${path}/api/work_order/ImgUpload`);
  1328. // const uploadUrl = ref("http://192.168.28.22:8082/api/work_order/ImgUpload");
  1329. const uploadHeaders = { 'Content-Type': 'multipart/form-data' };
  1330. const fileList = reactive([]);
  1331. const uploadRef = ref(null);
  1332. // 预览图片
  1333. const handlePreview = (file) => {
  1334. console.log('预览文件:', file);
  1335. };
  1336. // 移除图片
  1337. const handleRemove = (file, fileList) => {
  1338. console.log('移除文件:', file, '剩余文件:', fileList);
  1339. };
  1340. // 上传错误处理
  1341. const handleError = (err, file, fileList) => {
  1342. console.error('上传失败:', err);
  1343. ElMessage.error(`图片上传失败: ${err.message || '未知错误'}`);
  1344. };
  1345. // 上传前的检查与图片压缩
  1346. const beforeUpload = (file) => {
  1347. const isJPGOrPNG = file.type === 'image/jpeg' || file.type === 'image/png';
  1348. const isLt500K = file.size / 1024 < 500;
  1349. if (!isJPGOrPNG) {
  1350. ElMessage.error('上传图片只能是 JPG 或 PNG 格式!');
  1351. return false;
  1352. }
  1353. if (!isLt500K) {
  1354. ElMessage.error('上传图片大小不能超过 500KB!');
  1355. return false;
  1356. }
  1357. // 图片格式和大小符合,压缩图片
  1358. return new Promise((resolve, reject) => {
  1359. const reader = new FileReader();
  1360. reader.readAsDataURL(file);
  1361. reader.onload = () => {
  1362. const img = new Image();
  1363. img.src = reader.result;
  1364. img.onload = () => {
  1365. const canvas = document.createElement('canvas');
  1366. const ctx = canvas.getContext('2d');
  1367. const fixedWidth = 300;
  1368. const fixedHeight = 300;
  1369. canvas.width = fixedWidth;
  1370. canvas.height = fixedHeight;
  1371. ctx.drawImage(img, 0, 0, fixedWidth, fixedHeight);
  1372. canvas.toBlob((blob) => {
  1373. const compressedFile = new File([blob], file.name, { type: file.type });
  1374. resolve(compressedFile);
  1375. }, file.type);
  1376. };
  1377. };
  1378. reader.onerror = (error) => {
  1379. ElMessage.error('图片处理失败');
  1380. reject(error);
  1381. };
  1382. });
  1383. };
  1384. // 上传成功处理
  1385. const handleSuccess = (response, file, fileList) => {
  1386. console.log('上传成功:', response, file, fileList);
  1387. };
  1388. // 自定义上传逻辑
  1389. const customUpload = async (options) => {
  1390. try {
  1391. const formData = new FormData();
  1392. formData.append('image', options.file);
  1393. const response = await axios.post(uploadUrl.value, formData, {
  1394. headers: uploadHeaders,
  1395. onUploadProgress: (progressEvent) => {
  1396. options.onProgress({
  1397. percent: Math.round((progressEvent.loaded * 100) / progressEvent.total),
  1398. });
  1399. },
  1400. });
  1401. if (response.data.code === 0) {
  1402. options.onSuccess(response.data);
  1403. ElMessage.success('图片上传成功');
  1404. add_gdscgdformData.img = response.data.data.url;
  1405. edit_ddformData.img = response.data.data.url;
  1406. } else {
  1407. throw new Error(response.data.msg);
  1408. }
  1409. } catch (error) {
  1410. console.error('上传失败:', error);
  1411. options.onError(error);
  1412. ElMessage.error(`上传失败: ${error.message}`);
  1413. }
  1414. };
  1415. // =========== 左侧树侧形结构 ===========
  1416. const treeData = ref([])
  1417. const tableData = ref([])
  1418. const _Gd_khdh = ref(null)
  1419. const defaultProps = {
  1420. children: 'children',
  1421. label: 'label'
  1422. };
  1423. const Datalistdata = async () => {
  1424. try {
  1425. const Datalists = await Datalist();
  1426. console.log(Datalists)
  1427. Datalists.data.forEach(id => {
  1428. treeData.value.push({
  1429. label: id,
  1430. });
  1431. });
  1432. } catch (error) {
  1433. console.error(error);
  1434. }
  1435. };
  1436. Datalistdata();
  1437. //点击左侧树形获取编号
  1438. const handleNodeClick = async (node) => {
  1439. ystableData.splice(0, ystableData.length);
  1440. gytableData.splice(0, gytableData.length);
  1441. ddtableData.splice(0, ddtableData.length);
  1442. jstableData.splice(0, jstableData.length);
  1443. // 取消所有节点的颜色
  1444. const allNodes = document.querySelectorAll('.treecolor .el-tree-node');
  1445. allNodes.forEach(node => {
  1446. node.querySelector('.el-tree-node__label').style.color = '';
  1447. });
  1448. // 获取点击的节点 给当前点击的节点改变颜色【红色】
  1449. const clickedNodeId = node['$treeNodeId'];
  1450. const clickedNode = document.querySelector(`.treecolor .el-tree-node[data-key="${clickedNodeId}"]`);
  1451. if (clickedNode) {
  1452. clickedNode.querySelector('.el-tree-node__label').style.color = 'red';
  1453. }
  1454. ystableData.length = 0
  1455. searchInfo.value = '';
  1456. _Gd_khdh.value = node.label.split('【')[0];
  1457. _WorkList_page();
  1458. };
  1459. // 删除
  1460. const deleteItem = async (row) => {
  1461. console.log(_username.value.split('/')[1])
  1462. console.log(row.sys_id.split('/')[1])
  1463. const delfujian_del = await delfujian({UniqId:row['UniqId'],登录用户:_username.value.split('/')[1],建档用户:row.sys_id.split('/')[1]});
  1464. if(delfujian_del.code === 0){
  1465. ElMessage({type: 'success',message: '删除成功'})
  1466. }else{
  1467. ElMessage({type: 'error',message: '删除失败'})
  1468. }
  1469. tableRowClick (row)
  1470. }
  1471. const showPdf = async (row) => {
  1472. luckyexcelPageRef.value.open(row)
  1473. };
  1474. //调用订单资料列表
  1475. const _WorkList_page = async () => {
  1476. console.log("page",page.value)
  1477. console.log("pageSize",pageSize.value)
  1478. try {
  1479. //通过客户编号获取
  1480. const WorkListdata = await WorkOrderList({search:_Gd_khdh.value,page:page.value,limit:pageSize.value});
  1481. tableData.value = WorkListdata.data.data
  1482. total.value = WorkListdata.data.total
  1483. } catch (error) {
  1484. console.error(error);
  1485. }
  1486. };
  1487. //调用订单资料列表
  1488. const page_WorkList_page = async () => {
  1489. console.log("page",page.value)
  1490. console.log("pageSize",pageSize.value)
  1491. try {
  1492. //通过客户编号获取
  1493. const WorkListdata = await WorkOrderList({search:_Gd_khdh.value,page:page.value,limit:pageSize.value});
  1494. tableData.value = WorkListdata.data.data
  1495. total.value = WorkListdata.data.total
  1496. } catch (error) {
  1497. console.error(error);
  1498. }
  1499. };
  1500. //============订单资料============
  1501. //订单资料修改
  1502. const ddzl_dialogFormVisible = ref(false)
  1503. const edit_ddformData = ref({
  1504. 合并: false,
  1505. })
  1506. // 双击订单表格
  1507. const updateCompanyFunc = async (row) => {
  1508. ddzl_dialogFormVisible.value = true;
  1509. if(row.water === '1'){
  1510. edit_ddformData.value = {
  1511. 合并: true
  1512. }
  1513. }else{
  1514. edit_ddformData.value = {
  1515. 合并: false
  1516. }
  1517. }
  1518. Object.assign(edit_ddformData.value,row);
  1519. }
  1520. //订单资料修改确认
  1521. const dd_edit_Dialog = async () => {
  1522. if(edit_ddformData.value.Sys_id.split('/')[1]===_username.value.split('/')[1]||_username.value.split('/')[1] === '超级管理员'){
  1523. //日期转换
  1524. let lhrq_formattedDeliveryDate = '';
  1525. if (edit_ddformData.value.落货日期) {
  1526. const date = new Date(edit_ddformData.value.落货日期);
  1527. lhrq_formattedDeliveryDate = `${date.getFullYear()}-${('0' + (date.getMonth() + 1)).slice(-2)}-${('0' + date.getDate()).slice(-2)}`;
  1528. }
  1529. let params = {};
  1530. params.订单编号 = edit_ddformData.value.订单编号
  1531. params.生产款号 = edit_ddformData.value.生产款号
  1532. params.客户编号 = edit_ddformData.value.客户编号
  1533. params.款式 = edit_ddformData.value.款式
  1534. params.箱唛要求 = edit_ddformData.value.箱唛要求
  1535. params.面料 = edit_ddformData.value.面料
  1536. params.要求 = edit_ddformData.value.要求
  1537. params.船样描述 = edit_ddformData.value.船样描述
  1538. params.船样合计 = edit_ddformData.value.船样合计
  1539. params.粘衬 = edit_ddformData.value.粘衬
  1540. params.订单数量 = edit_ddformData.value.订单数量
  1541. params.单位 = edit_ddformData.value.单位
  1542. params.接单日期 = edit_ddformData.value.接单日期
  1543. params.落货日期 = lhrq_formattedDeliveryDate
  1544. params.Sys_id = edit_ddformData.value.Sys_id
  1545. params.id = edit_ddformData.value.Uniqid
  1546. params.img = edit_ddformData.img
  1547. console.log(params)
  1548. // return;
  1549. //订单资料修改接口
  1550. const WorkOrderEdit_list = await WorkOrderEdit(params);
  1551. if(WorkOrderEdit_list.code === 0){
  1552. ddzl_dialogFormVisible.value = false;
  1553. //修改成功调用接口更新表格数据
  1554. _WorkList_page()
  1555. ElMessage({type: 'success',message: '修改成功'})
  1556. }else{
  1557. ElMessage({type: 'error',message: '修改失败'})
  1558. }
  1559. }else{
  1560. return ElMessage({type: 'error',message: '无法修改其他用户订单数据'})
  1561. }
  1562. }
  1563. //订单资料修改取消
  1564. const dd_closeDialog = async () => {
  1565. ddzl_dialogFormVisible.value = false;
  1566. }
  1567. //=============颜色资料============
  1568. //颜色资料修改
  1569. const dialogFormVisible = ref(false)
  1570. //尺码
  1571. const edit_cmformdata = reactive({
  1572. cm1:'',
  1573. cm2:'',
  1574. cm3:'',
  1575. cm4:'',
  1576. cm5:'',
  1577. cm6:'',
  1578. cm7:'',
  1579. cm8:'',
  1580. cm9:'',
  1581. cm10:'',
  1582. cm11:'',
  1583. cm12:'',
  1584. cm13:'',
  1585. cm14:'',
  1586. sctotal:'总计',
  1587. });
  1588. //制单数
  1589. const edit_zdsformdata = reactive({
  1590. zds1:'',
  1591. zds2:'',
  1592. zds3:'',
  1593. zds4:'',
  1594. zds5:'',
  1595. zds6:'',
  1596. zds7:'',
  1597. zds8:'',
  1598. zds9:'',
  1599. zds10:'',
  1600. zds11:'',
  1601. zds12:'',
  1602. zds13:'',
  1603. zds14:'',
  1604. zdtotal:'',
  1605. });
  1606. const Uniqid = ref('')//颜色资料Uniqid
  1607. //颜色资料表格双击
  1608. const ysupdateCompanyFunc = async (row) => {
  1609. dialogFormVisible.value = true;
  1610. edit_formData.value = { ...row };
  1611. console.log(row)
  1612. edit_formData['子订单编号'] = row['子订单编号']
  1613. edit_formData['颜色备注'] = row['颜色备注']
  1614. edit_formData['款号'] = row['款号']
  1615. edit_formData['船样'] = row['船样']
  1616. edit_formData['颜色'] = row['颜色']
  1617. edit_colorcode.value =row['color_id']
  1618. Uniqid.value = row['Uniqid']
  1619. //获取色系名称列表
  1620. const getSuborders = await getSuborder({order:_Gd_gdbh.value,cy:'否',colorname:edit_formData['颜色']});
  1621. getSuborderscolor.colorlist = getSuborders.data.colorlist;
  1622. let index = 1;
  1623. // 创建一个函数来构建尺码和数量的映射
  1624. function buildSizeQuantitiesMap(sizes, formData) {
  1625. const sizeQuantitiesMap = {};
  1626. sizes.forEach(size => {
  1627. // 使用逻辑或操作符确保所有尺码都有数量(默认为0,但如果有值则使用那个值)
  1628. const quantity = formData[size] || 0;
  1629. sizeQuantitiesMap[size] = quantity;
  1630. });
  1631. return sizeQuantitiesMap;
  1632. }
  1633. // 使用函数构建映射
  1634. let sizeQuantitiesMap = buildSizeQuantitiesMap(sizeDatas, edit_formData.value);
  1635. let edit_params = {};
  1636. for (const [size, quantity] of Object.entries(sizeQuantitiesMap)) {
  1637. edit_params[`cm${index}`] = size;
  1638. edit_params[`cmsl${index++}`] = quantity;
  1639. }
  1640. for (let i = 1; i <= 14; i++) {
  1641. edit_cmformdata[`cm${i}`] = edit_params[`cm${i}`] || '';
  1642. edit_zdsformdata[`zds${i}`] = (edit_params[`cmsl${i}`] === 0 || edit_params[`cmsl${i}`] === null) ? '' : edit_params[`cmsl${i}`];
  1643. }
  1644. //计算尺码数量总数合计
  1645. updateTotal()
  1646. };
  1647. //自动计算制单数总计
  1648. function updateTotal() {
  1649. // 直接指定要累加的属性名
  1650. const relevantKeys = ['zds1', 'zds2', 'zds3', 'zds4', 'zds5', 'zds6', 'zds7', 'zds8', 'zds9', 'zds10', 'zds11', 'zds12', 'zds13', 'zds14'];
  1651. const values = relevantKeys.map(key => parseInt(zdsformdata[key], 10) || 0); // 使用 || 0 来处理可能的 NaN 或 undefined/null
  1652. zdsformdata.zdtotal = values.reduce((sum, value) => sum + value, 0);
  1653. const valuess = relevantKeys.map(key => parseInt(edit_zdsformdata[key], 10) || 0); // 使用 || 0 来处理可能的 NaN 或 undefined/null
  1654. edit_zdsformdata.zdtotal = valuess.reduce((sum, value) => sum + value, 0);
  1655. }
  1656. //点击是否船样 改变子订单编号
  1657. const edit_cyChange = async (value) => {
  1658. if (value === '是') {
  1659. const getSuborders = await getSuborder({order:_Gd_gdbh.value,cy:'是',colorname:edit_formData['颜色']});
  1660. edit_formData['子订单编号'] = getSuborders.data;
  1661. }else if(value === '否'){
  1662. const getSuborders = await getSuborder({order:_Gd_gdbh.value,cy:'否',colorname:edit_formData['颜色']});
  1663. edit_formData['子订单编号'] = getSuborders.data.order;
  1664. }
  1665. };
  1666. //修改颜色资料确认
  1667. const ys_edit_Dialog = async () => {
  1668. if (!edit_formData.value) return;
  1669. //获取颜色编号id
  1670. const getPonumberdata = await getSuborder({colorname:edit_formData['颜色'],order:_ddhval.value,cy:edit_formData['船样']});
  1671. // 从返回中提取 colorlist
  1672. const colorlist = getPonumberdata.data.colorlist || [];
  1673. // 获取匹配的颜色项
  1674. const match = colorlist.find(item => item.colorname === edit_formData['颜色']);
  1675. if (match) {
  1676. edit_colorcode.value = match.colorcode;
  1677. } else {
  1678. console.warn('未找到匹配的颜色');
  1679. }
  1680. function buildSizeQuantitiesMap(sizes, formData) {
  1681. const sizeQuantitiesMap = {};
  1682. sizes.forEach(size => {
  1683. // 使用逻辑或操作符确保所有尺码的数量
  1684. const quantity = formData[size] || 0;
  1685. sizeQuantitiesMap[size] = quantity;
  1686. });
  1687. return sizeQuantitiesMap;
  1688. }
  1689. // 使用函数构建映射
  1690. const sizeQuantitiesMap = buildSizeQuantitiesMap(sizeDatas, edit_formData.value);
  1691. let index = 1;
  1692. const params = {
  1693. 订单编号: edit_formData.value.订单编号,
  1694. 子订单编号: edit_formData.子订单编号,
  1695. 款号: edit_formData.款号,
  1696. 颜色备注: edit_formData.颜色备注,
  1697. 船样: edit_formData.船样 === '是' ? '1' : '0', // 转换船样字段
  1698. 颜色: edit_formData.颜色,
  1699. color_id:edit_colorcode.value,
  1700. zdtotal: edit_zdsformdata.zdtotal,
  1701. Sys_id: edit_formData.value.Sys_id,
  1702. id: Uniqid.value,
  1703. };
  1704. for (const [size, quantity] of Object.entries(sizeQuantitiesMap)) {
  1705. params[`cm${index}`] = size;
  1706. const cmslValue = +edit_zdsformdata[`zds${index}`]; // 获取对应的数量
  1707. params[`cmsl${index++}`] = cmslValue === 0 ? "" : cmslValue; // 如果为0,赋值为空字符串
  1708. }
  1709. console.log(params)
  1710. //颜色资料修改接口
  1711. const PrintDataEdit_list = await PrintDataEdit(params);
  1712. if(PrintDataEdit_list.code === 0){
  1713. dialogFormVisible.value = false;
  1714. ElMessage({type: 'success',message: '修改成功'})
  1715. //数据列表显示
  1716. const PrintListDatas = await PrintListData({order:_Gd_gdbh.value})
  1717. const jsOrderAttachments = await OrderAttachments({order:_Gd_gdbh.value,desc:'技术附件'})
  1718. const ddOrderAttachments = await OrderAttachments({order:_Gd_gdbh.value,desc:'订单资料附件'})
  1719. //颜色资料
  1720. if(PrintListDatas.data.列表.length === 0 ){
  1721. ystableData.length = 0
  1722. }else{
  1723. sizeDatas.splice(0,PrintListDatas.data.型号.length,...PrintListDatas.data.型号);//型号数据
  1724. ystableData.splice(0,PrintListDatas.data.列表.length,...PrintListDatas.data.列表);//表格数据
  1725. // 使用 map 方法创建一个新数组,并转换船样字段
  1726. const newData = PrintListDatas.data.列表.map(item => ({
  1727. ...item,
  1728. 船样: item.船样 === 1 ? '是' : '否'
  1729. }));
  1730. // 将新数组赋值给 ystableData,这会触发视图更新,清空旧数据(可选,如果不需要保留旧数据的话)
  1731. ystableData.length = 0;
  1732. ystableData.push(...newData);
  1733. }
  1734. tableRowClick(params)
  1735. }else{
  1736. ElMessage({type: 'error',message: '修改失败'})
  1737. }
  1738. };
  1739. //颜色资料修改取消
  1740. const ys_edit_closeDialog = async (row) => {
  1741. dialogFormVisible.value = false;
  1742. };
  1743. const mlinventoryVisible = ref(false)
  1744. const historytableData = ref([])
  1745. // //双击面料库存
  1746. // const mlupdateCompanyFunc = async (row) => {
  1747. // mlinventoryVisible.value = true;
  1748. // }
  1749. //库存测试
  1750. const CSclick = async (row) => {
  1751. mlinventoryVisible.value = true;
  1752. }
  1753. //技术附件弹窗取消
  1754. const mlcloseDialog = () => {
  1755. mlinventoryVisible.value = false
  1756. }
  1757. // 分页
  1758. const page = ref(1)
  1759. const total = ref(0)
  1760. const pageSize = ref(50)
  1761. const handleCurrentChange = (val) => {
  1762. page.value = val;
  1763. _WorkList_page();
  1764. };
  1765. // 修改页面容量 点击多少条/页
  1766. const handleSizeChange = (val) => {
  1767. pageSize.value = val;
  1768. _WorkList_page();
  1769. };
  1770. // =========== 新增订单资料 ===========
  1771. const add_gdscgdformData = reactive({
  1772. 订单编号: '',
  1773. 生产款号: '',
  1774. 款式: '',
  1775. 客户编号: '',
  1776. 落货日期: '',
  1777. 箱唛要求: '',
  1778. 面料: '',
  1779. 要求: '',
  1780. 船样描述: '',
  1781. 船样合计: '',
  1782. 粘衬: '',
  1783. 订单数量: '',
  1784. 单位: '件',
  1785. Sys_id: '',
  1786. 制单日期: '',
  1787. 审核日期: '',
  1788. 合并: false,
  1789. });
  1790. const add_gddialogFormVisible = ref(false)
  1791. //点击新增订单资料按钮
  1792. const addgd_onclick = async () => {
  1793. console.log("用户信息", _username.value);
  1794. // 判断客户代号是否为空
  1795. if (!_Gd_khdh.value) {
  1796. ElMessage({ type: 'warning', message: '请选择具体的订单后,再操作此功能' });
  1797. return false;
  1798. }
  1799. add_gddialogFormVisible.value = true
  1800. zsglddtableData.value = []
  1801. //获取订单编号接口
  1802. const getWorkOrder_list = await getWorkOrder();
  1803. add_gdscgdformData['订单编号'] = getWorkOrder_list.data;
  1804. add_gdscgdformData['客户编号'] = _Gd_khdh.value
  1805. add_gdscgdformData['Sys_id'] = _username.value
  1806. add_gdscgdformData['制单日期'] = currentDates
  1807. }
  1808. //操作移除按钮
  1809. const deleteRow = (index) => {
  1810. //当前点击索引值
  1811. console.log(index)
  1812. console.log(zsglddtableData)
  1813. //移除当前行
  1814. zsglddtableData.value.splice(index, 1);
  1815. }
  1816. const fullscreenLoading = ref(false); // 控制全屏加载
  1817. const isClickable = ref(true); // 控制按钮是否可点击
  1818. //新增工单资料确定
  1819. const add_gdenterDialog = async () => {
  1820. if (!isClickable.value) return;
  1821. // 禁用按钮
  1822. isClickable.value = false;
  1823. // 开启全屏加载,并自定义文字和样式
  1824. const loadingInstance = ElLoading.service({
  1825. lock: true, // 锁定屏幕
  1826. text: '正在自动获取生成BOM面料资料,请稍候...', // 自定义加载文字
  1827. background: 'rgba(0, 0, 0, 0.8)', // 背景颜色
  1828. spinner: 'el-icon-loading', // 加载图标
  1829. });
  1830. try {
  1831. // 定义需要校验的字段和对应的提示信息
  1832. const fields = [
  1833. { key: '款式', message: '款式不能为空' },
  1834. { key: '订单编号', message: '网络异常, 请重新打开' },
  1835. { key: '客户编号', message: '网络异常, 请重新打开' },
  1836. { key: '落货日期', message: '落货日期不能为空' },
  1837. { key: '订单数量', message: '订单数量不能为空' },
  1838. { key: '面料', message: '缺少面料信息,无法完成提交,请提供面料数据以便获取BOM资料数据' },
  1839. ];
  1840. // 遍历每个字段,进行非空或未定义校验
  1841. for (const field of fields) {
  1842. if (!add_gdscgdformData[field.key]) {
  1843. ElMessage({ type: 'warning', message: field.message });
  1844. return false;
  1845. }
  1846. }
  1847. // 校验制单日期
  1848. if (!add_gdscgdformData['制单日期']) {
  1849. ElMessage({ type: 'warning', message: '制单日期不能为空' });
  1850. return false;
  1851. }
  1852. // 日期转换
  1853. let lhrq_formattedDeliveryDate = '';
  1854. if (add_gdscgdformData['落货日期']) {
  1855. const date = new Date(add_gdscgdformData['落货日期']);
  1856. lhrq_formattedDeliveryDate = `${date.getFullYear()}-${('0' + (date.getMonth() + 1)).slice(-2)}-${('0' + date.getDate()).slice(-2)}`;
  1857. }
  1858. // 获取 zsglddtableData 中所有行的 UNIQID 和订单编号
  1859. const ids = zsglddtableData.value.map(item => item.UNIQID);
  1860. const dds = zsglddtableData.value.map(item => item.订单编号);
  1861. // 去重 UNIQID 和订单编号
  1862. const uniqueIds = [...new Set(ids)];
  1863. const uniqueDds = [...new Set(dds)];
  1864. // 用逗号连接 UNIQID 和订单编号
  1865. const formattedIds = uniqueIds.join(',');
  1866. const formattedDds = uniqueDds.join(',');
  1867. console.log('关联订单编号:', formattedDds);
  1868. console.log('关联订单UNIQID:', formattedIds);
  1869. const formattedData = {
  1870. 订单编号: add_gdscgdformData['订单编号'],
  1871. 生产款号: add_gdscgdformData['生产款号'],
  1872. 款式: add_gdscgdformData['款式'],
  1873. 客户编号: add_gdscgdformData['客户编号'],
  1874. 落货日期: lhrq_formattedDeliveryDate,
  1875. 箱唛要求: add_gdscgdformData['箱唛要求'],
  1876. 面料: add_gdscgdformData['面料'],
  1877. 要求: add_gdscgdformData['备注'],
  1878. 船样描述: add_gdscgdformData['船样描述'],
  1879. 船样合计: add_gdscgdformData['船样合计'],
  1880. 粘衬: add_gdscgdformData['粘衬'],
  1881. 订单数量: add_gdscgdformData['订单数量'],
  1882. 单位: add_gdscgdformData['单位'],
  1883. Sys_id: _username.value,
  1884. 接单日期: currentDates,
  1885. img: add_gdscgdformData.img,
  1886. 关联订单: formattedDds,
  1887. 关联面料ID: formattedIds,
  1888. };
  1889. console.log(formattedData);
  1890. // 调用新增订单接口
  1891. const edit_gdformdata_list = await WorkOrderAdd(formattedData);
  1892. if (edit_gdformdata_list.code === 0) {
  1893. add_gddialogFormVisible.value = false;
  1894. ElMessage({ type: 'success', message: '新增成功' });
  1895. // 新增后刷新表格,保证表格显示最新数据
  1896. const WorkListdata = await WorkOrderList({ search: _Gd_khdh.value, page: 1, limit: 50 });
  1897. tableData.value = WorkListdata.data.data;
  1898. } else {
  1899. ElMessage({ type: 'error', message: '新增失败' });
  1900. }
  1901. } catch (error) {
  1902. console.error('Error:', error);
  1903. ElMessage({ type: 'error', message: '操作失败,请重试' });
  1904. } finally {
  1905. // 无论成功或失败,最终都要重新启用按钮并关闭加载
  1906. isClickable.value = true;
  1907. loadingInstance.close(); // 关闭加载
  1908. }
  1909. };
  1910. //新增工单资料取消
  1911. const add_gdcloseDialog = () => {
  1912. add_gddialogFormVisible.value = false
  1913. }
  1914. // =========== 关联订单资料 ===========
  1915. const Related_fabricsVisible = ref(false)
  1916. const glddzl_keyword = ref('')
  1917. const glddtableData = reactive([])
  1918. // 关联订单面料按钮
  1919. const Related_fabrics = () => {
  1920. Related_fabricsVisible.value = true
  1921. // glddtableData.splice(0, glddtableData.length);//清空表格
  1922. ddsearchHandle()
  1923. }
  1924. //实时触发input
  1925. const real_handleInput = async ()=>{
  1926. glddtableData.splice(0, glddtableData.length);//清空表格
  1927. ddsearchHandle()
  1928. }
  1929. // 关联订单面料搜索
  1930. const ddsearchHandle = async (v) => {
  1931. console.log(v)
  1932. glddtableData.splice(0, glddtableData.length);//清空表格
  1933. //搜索面料库存数据列表接口
  1934. const response = await fabricList({order:v});
  1935. if (response.data && response.data.length === 0) {
  1936. ElMessage({type: 'warning',message: '未查询到搜索条件'})
  1937. }else{
  1938. // 确保 response.data 和 response.data.table 存在
  1939. if (response?.data?.table) {
  1940. glddtableData.value = response.data.table.map(item => ({
  1941. ...item,
  1942. checked: false, // 初始化时默认未勾选
  1943. }));
  1944. glddtableData.splice(0, response.data.table.total, ...response.data.table);
  1945. } else {
  1946. console.error("response.data.table 不存在或为空:", response.data);
  1947. }
  1948. }
  1949. }
  1950. const gldd_Selection = ref('')//存储选中Uniqid
  1951. const gldd_Selection_ddbh = ref('')//存储选中订单编号
  1952. const glddSelectionChange = (selection) => {
  1953. console.log("当前选中的数据:", selection);
  1954. // 更新 glddtableData 中每一行的 checked 状态
  1955. glddtableData.value = glddtableData.value.map(item => {
  1956. return {
  1957. ...item,
  1958. checked: selection.some(selectedItem => selectedItem.UNIQID === item.UNIQID), // 判断是否被勾选
  1959. };
  1960. });
  1961. };
  1962. //关联订单取消
  1963. const Related_fabricscloseDialog = () => {
  1964. gldd_Selection.value = ''
  1965. Related_fabricsVisible.value = false
  1966. }
  1967. //关联订单确定
  1968. const zsglddtableData = ref([])
  1969. const Related_fabricsenterDialog = () => {
  1970. // 过滤出勾选的数据
  1971. const filteredData = glddtableData.value.filter(item => item.checked);
  1972. console.log(filteredData)
  1973. if(filteredData.length === 0){
  1974. return
  1975. }
  1976. // 将过滤后的数据添加到 zsglddtableData
  1977. zsglddtableData.value.push(...filteredData);
  1978. // 关闭弹窗
  1979. Related_fabricsVisible.value = false;
  1980. };
  1981. // =========== 新增颜色资料 ===========
  1982. const add_gdyjdialogFormVisible = ref(false)
  1983. const add_yszlformdata = reactive({
  1984. ddh: '',
  1985. ddzbh: '',
  1986. sxmc: '',
  1987. cmgg: '',
  1988. sfcy: '',
  1989. ysbz: '',
  1990. });
  1991. const cmformdata = reactive({
  1992. cm1:'32',
  1993. cm2:'34',
  1994. cm3:'36',
  1995. cm4:'38',
  1996. cm5:'40',
  1997. cm6:'42',
  1998. cm7:'44',
  1999. cm8:'46',
  2000. cm9:'48',
  2001. cm10:'',
  2002. cm11:'',
  2003. cm12:'',
  2004. cm13:'',
  2005. cm14:'',
  2006. sctotal:'总计',
  2007. });
  2008. const zdsformdata = reactive({
  2009. zds1:'',
  2010. zds2:'',
  2011. zds3:'',
  2012. zds4:'',
  2013. zds5:'',
  2014. zds6:'',
  2015. zds7:'',
  2016. zds8:'',
  2017. zds9:'',
  2018. zds10:'',
  2019. zds11:'',
  2020. zds12:'',
  2021. zds13:'',
  2022. zds14:'',
  2023. zdtotal:'',
  2024. });
  2025. //记录色系编号
  2026. const add_colorcode = ref('')
  2027. //选择色系名称获取子订单编号
  2028. const xz_sxhandleSizeChange = async (value,color_id) => {
  2029. //获取子订单编号
  2030. const getPonumberdata = await getSuborder({colorname:value,order:_ddhval.value,cy:add_yszlformdata.sfcy});
  2031. console.log("获取子订单编号",getPonumberdata)
  2032. add_yszlformdata.ddzbh = getPonumberdata.data.order ? getPonumberdata.data.order : getPonumberdata.data;
  2033. if (value === '红色系') {
  2034. add_yszlformdata.sxmc = value
  2035. add_colorcode.value = color_id
  2036. } else if(value === '黄色系'){
  2037. add_yszlformdata.sxmc = value
  2038. add_colorcode.value = color_id
  2039. }else if(value === '蓝色系'){
  2040. add_yszlformdata.sxmc = value
  2041. add_colorcode.value = color_id
  2042. }else if(value === '绿色系'){
  2043. add_yszlformdata.sxmc = value
  2044. add_colorcode.value = color_id
  2045. }else if(value === '紫色系'){
  2046. add_yszlformdata.sxmc = value
  2047. add_colorcode.value = color_id
  2048. }else if(value === '灰色系'){
  2049. add_yszlformdata.sxmc = value
  2050. add_colorcode.value = color_id
  2051. }else if(value === '咖啡色系'){
  2052. add_yszlformdata.sxmc = value
  2053. add_colorcode.value = color_id
  2054. }else if(value === '黑色系'){
  2055. add_yszlformdata.sxmc = value
  2056. add_colorcode.value = color_id
  2057. }else if(value === '经典色系'){
  2058. add_yszlformdata.sxmc = value
  2059. add_colorcode.value = color_id
  2060. }else if(value === '白色系'){
  2061. add_yszlformdata.sxmc = value
  2062. add_colorcode.value = color_id
  2063. }
  2064. };
  2065. const edit_formData = reactive({
  2066. '颜色': ''
  2067. });
  2068. //记录色系编号
  2069. const edit_colorcode = ref('')
  2070. const xg_sxhandleSizeChange = async (value,color_id) => {
  2071. const getPonumberdata = await getSuborder({colorname:value,order:_ddhval.value,cy:edit_formData['船样']});
  2072. console.log(edit_formData.value)
  2073. if(edit_formData.value['颜色'] === edit_formData['颜色']){
  2074. edit_formData['子订单编号'] = edit_formData.value['子订单编号']
  2075. }else{
  2076. edit_formData['子订单编号'] = getPonumberdata.data.order ? getPonumberdata.data.order : getPonumberdata.data;
  2077. }
  2078. if (value === '红色系') {
  2079. edit_formData['颜色'] = value
  2080. edit_colorcode.value = color_id
  2081. } else if(value === '黄色系'){
  2082. edit_formData['颜色'] = value
  2083. edit_colorcode.value = color_id
  2084. }else if(value === '蓝色系'){
  2085. edit_formData['颜色'] = value
  2086. edit_colorcode.value = color_id
  2087. }else if(value === '绿色系'){
  2088. edit_formData['颜色'] = value
  2089. edit_colorcode.value = color_id
  2090. }else if(value === '紫色系'){
  2091. edit_formData['颜色'] = value
  2092. edit_colorcode.value = color_id
  2093. }else if(value === '灰色系'){
  2094. edit_formData['颜色'] = value
  2095. edit_colorcode.value = color_id
  2096. }else if(value === '咖啡色系'){
  2097. edit_formData['颜色'] = value
  2098. edit_colorcode.value = color_id
  2099. }else if(value === '黑色系'){
  2100. edit_formData['颜色'] = value
  2101. edit_colorcode.value = color_id
  2102. }else if(value === '经典色系'){
  2103. edit_formData['颜色'] = value
  2104. }else if(value === '白色系'){
  2105. edit_formData['颜色'] = value
  2106. }
  2107. };
  2108. //清空对象的属性值
  2109. const gdyj_clearFormData = () => {
  2110. Object.keys(zdsformdata).forEach(key => {
  2111. zdsformdata[key] = '';
  2112. });
  2113. };
  2114. //点击是否船样 改变子订单编号
  2115. const cyChange = async (value) => {
  2116. if (value === '是') {
  2117. add_yszlformdata.ddzbh = _Gd_gdbh.value + '-99'
  2118. const getSuborders = await getSuborder({order:_Gd_gdbh.value,cy:'是',colorname:add_yszlformdata['sxmc']});
  2119. add_yszlformdata['ddzbh'] = getSuborders.data;
  2120. }else if(value === '否'){
  2121. const getSuborders = await getSuborder({order:_Gd_gdbh.value,cy:'否',colorname:add_yszlformdata['sxmc']});
  2122. add_yszlformdata['ddzbh'] = getSuborders.data.order;
  2123. }
  2124. };
  2125. const getSuborderscolor = reactive({
  2126. colorlist: []
  2127. });
  2128. //新增颜色资料按钮
  2129. const addgdyj_onclick = async () => {
  2130. if(_Gd_gdbh.value === '' || _Gd_gdbh.value === null){
  2131. ElMessage({type: 'warning',message: '请选择具体的工单后,再操作此功能'})
  2132. return false;
  2133. }else{
  2134. add_gdyjdialogFormVisible.value = true
  2135. add_yszlformdata['sxmc'] = '红色系';
  2136. const getSuborders = await getSuborder({order:_Gd_gdbh.value,cy:'否',colorname:'红色系'});
  2137. console.log(getSuborders)
  2138. getSuborderscolor.colorlist = getSuborders.data.colorlist;
  2139. add_yszlformdata['ddzbh'] = getSuborders.data.order;
  2140. // 假设获取的数据是 getSuborders.data
  2141. if (getSuborders.data.cm) {
  2142. // 判断并赋值
  2143. cmformdata.cm1 = getSuborders.data.cm.cm1 || '';
  2144. cmformdata.cm2 = getSuborders.data.cm.cm2 || '';
  2145. cmformdata.cm3 = getSuborders.data.cm.cm3 || '';
  2146. cmformdata.cm4 = getSuborders.data.cm.cm4 || '';
  2147. cmformdata.cm5 = getSuborders.data.cm.cm5 || '';
  2148. cmformdata.cm6 = getSuborders.data.cm.cm6 || '';
  2149. cmformdata.cm7 = getSuborders.data.cm.cm7 || '';
  2150. cmformdata.cm8 = getSuborders.data.cm.cm8 || '';
  2151. cmformdata.cm9 = getSuborders.data.cm.cm9 || '';
  2152. cmformdata.cm10 = getSuborders.data.cm.cm10 || '';
  2153. cmformdata.cm11 = getSuborders.data.cm.cm11 || '';
  2154. cmformdata.cm12 = getSuborders.data.cm.cm12 || '';
  2155. cmformdata.cm13 = getSuborders.data.cm.cm13 || '';
  2156. cmformdata.cm14 = getSuborders.data.cm.cm14 || '';
  2157. cmformdata.sctotal = '合计';
  2158. }
  2159. add_yszlformdata['ddh'] = _Gd_gdbh.value;
  2160. add_yszlformdata['ys'] = '';
  2161. add_yszlformdata['kh'] = '';
  2162. add_yszlformdata['sfcy'] = '否';
  2163. add_yszlformdata['颜色备注'] = '否';
  2164. add_yszlformdata['kdy'] = _username.value;
  2165. gdyj_clearFormData();
  2166. }
  2167. }
  2168. const child_order = ref('')
  2169. //单机颜色资料表格
  2170. const ystableclick = async (row) => {
  2171. // console.log(row.子订单编号)
  2172. // child_order.value = row.子订单编号
  2173. }
  2174. //限制尺码输入规则
  2175. function handleSizeInput(field) {
  2176. // 获取当前字段的值
  2177. let value = cmformdata[field];
  2178. // 使用正则表达式过滤,只保留字母和数字,并将字母转换为大写
  2179. const filteredValue = value.replace(/[^a-zA-Z0-9]/g, '').replace(/[a-z]/g, (match) => match.toUpperCase());
  2180. // 更新字段值
  2181. cmformdata[field] = filteredValue; // 直接更新 reactive 对象的属性
  2182. }
  2183. function Input_handle() {
  2184. add_gdscgdformData['订单数量'] = add_gdscgdformData['订单数量'].replace(/[^\d]/g, '')
  2185. add_gdscgdformData['船样合计'] = add_gdscgdformData['船样合计'].replace(/[^\d]/g, '')
  2186. edit_ddformData['订单数量'] = edit_ddformData['订单数量'].replace(/[^\d]/g, '')
  2187. edit_ddformData['船样合计'] = edit_ddformData['船样合计'].replace(/[^\d]/g, '')
  2188. }
  2189. //新增颜色资料确定
  2190. const add_gdyjenterDialog = async () => {
  2191. //必填
  2192. if(add_yszlformdata['kh'] === ''){
  2193. ElMessage({type: 'warning',message: '款号不能为空'})
  2194. return false;
  2195. }
  2196. if(add_yszlformdata['ysbz'] === ''){
  2197. ElMessage({type: 'warning',message: '颜色备注不能为空'})
  2198. return false;
  2199. }
  2200. if(add_yszlformdata['sxmc'] === ''){
  2201. ElMessage({type: 'warning',message: '色系名称不能为空'})
  2202. return false;
  2203. }
  2204. let cy = '';
  2205. if(add_yszlformdata['sfcy'] === '是'){
  2206. cy = '1'
  2207. }else if(add_yszlformdata['sfcy'] === '否'){
  2208. cy = '0'
  2209. }
  2210. //获取颜色编号id
  2211. const getPonumberdata = await getSuborder({colorname:add_yszlformdata['sxmc'],order:_ddhval.value,cy:add_yszlformdata['sfcy']});
  2212. // 从返回中提取 colorlist
  2213. const colorlist = getPonumberdata.data.colorlist || [];
  2214. // 获取匹配的颜色项
  2215. const match = colorlist.find(item => item.colorname === add_yszlformdata['sxmc']);
  2216. if (match) {
  2217. add_colorcode.value = match.colorcode;
  2218. } else {
  2219. console.warn('未找到匹配的颜色');
  2220. }
  2221. const addyszltable = {
  2222. 订单编号: add_yszlformdata['ddh'],
  2223. 子订单编号: add_yszlformdata['ddzbh'],
  2224. 颜色: add_yszlformdata['sxmc'],
  2225. 款号: add_yszlformdata['kh'],
  2226. 颜色备注:add_yszlformdata.ysbz,
  2227. 船样: cy,
  2228. Sys_id:add_yszlformdata['kdy'],
  2229. color_id:add_colorcode.value,
  2230. //尺码
  2231. cm1: cmformdata['cm1'],
  2232. cm2: cmformdata['cm2'],
  2233. cm3: cmformdata['cm3'],
  2234. cm4: cmformdata['cm4'],
  2235. cm5: cmformdata['cm5'],
  2236. cm6: cmformdata['cm6'],
  2237. cm7: cmformdata['cm7'],
  2238. cm8: cmformdata['cm8'],
  2239. cm9: cmformdata['cm9'],
  2240. cm10: cmformdata['cm10'],
  2241. cm11: cmformdata['cm11'],
  2242. cm12: cmformdata['cm12'],
  2243. cm13: cmformdata['cm13'],
  2244. cm14: cmformdata['cm14'],
  2245. sctotal: cmformdata['sctotal'],
  2246. //尺码数量
  2247. cmsl1: zdsformdata['zds1'],
  2248. cmsl2: zdsformdata['zds2'],
  2249. cmsl3: zdsformdata['zds3'],
  2250. cmsl4: zdsformdata['zds4'],
  2251. cmsl5: zdsformdata['zds5'],
  2252. cmsl6: zdsformdata['zds6'],
  2253. cmsl7: zdsformdata['zds7'],
  2254. cmsl8: zdsformdata['zds8'],
  2255. cmsl9: zdsformdata['zds9'],
  2256. cmsl10: zdsformdata['zds10'],
  2257. cmsl11: zdsformdata['zds11'],
  2258. cmsl12: zdsformdata['zds12'],
  2259. cmsl13: zdsformdata['zds13'],
  2260. cmsl14: zdsformdata['zds14'],
  2261. zdtotal: zdsformdata['zdtotal'],
  2262. };
  2263. console.log(addyszltable)
  2264. // return;
  2265. const printDetailAdds = await printDetailAdd(addyszltable);
  2266. if (printDetailAdds.code === 0) {
  2267. add_gdyjdialogFormVisible.value = false;
  2268. ElMessage({type: 'success',message: '新增成功'})
  2269. }
  2270. const PrintListDatas = await PrintListData({order:_Gd_gdbh.value})
  2271. if(PrintListDatas.data.列表.length === 0){
  2272. ystableData.length = 0
  2273. }else{
  2274. sizeDatas.splice(0,PrintListDatas.data.型号.length,...PrintListDatas.data.型号);
  2275. ystableData.splice(0,PrintListDatas.data.列表.length,...PrintListDatas.data.列表);
  2276. const orderBomListdata = await orderBomList({order:_Gd_gdbh.value});
  2277. bomtableData.value = orderBomListdata.data
  2278. bomtableData.splice(0,orderBomListdata.data.length,...orderBomListdata.data);//bom表格数据
  2279. const fabricListdata = await fabricList({ order: _Gd_gdbh.value });
  2280. console.log("fabricListdata:", fabricListdata); // 打印接口返回的数据
  2281. if (fabricListdata.code === 0 && Array.isArray(fabricListdata.data.table)) {
  2282. // 如果 data.table 是数组且不为空,更新表格数据
  2283. mltableData.splice(0, mltableData.length, ...fabricListdata.data.table);
  2284. } else {
  2285. // 如果 data.table 为空或无效,清空表格数据
  2286. mltableData.splice(0, mltableData.length);
  2287. }
  2288. }
  2289. }
  2290. //新增颜色资料取消
  2291. const add_dyjcloseDialog = () => {
  2292. add_gdyjdialogFormVisible.value = false
  2293. }
  2294. //键盘input框跳转
  2295. const add_gdzlent = async (event,id1,id2,id3,idx) => {
  2296. if(event.keyCode === 40){
  2297. if(id3!=''){
  2298. document.getElementById(id3).focus()
  2299. }
  2300. }else if (event.keyCode === 13) { // Enter 或向下箭头
  2301. if(id3!=''){
  2302. document.getElementById(id3).focus()
  2303. }
  2304. } else if (event.keyCode === 38) { // 向上箭头
  2305. if(id1!=''){
  2306. document.getElementById(id1).focus()
  2307. }
  2308. }else if (event.keyCode === 8) { // 删除箭头
  2309. if(id1!='' && document.getElementById(id2).value==''){
  2310. document.getElementById(id1).focus()
  2311. }
  2312. }else if (event.keyCode === 37) { // 向左箭头
  2313. if(id1!='' && document.getElementById(id2).selectionStart==0){
  2314. document.getElementById(id1).focus()
  2315. }
  2316. }else if (event.keyCode === 39) { // 向右箭头
  2317. if(id3!='' && document.getElementById(id2).selectionStart == document.getElementById(id2).value.length){
  2318. document.getElementById(id3).focus()
  2319. }
  2320. }
  2321. }
  2322. // =========== 新增工序资料 ===========
  2323. const visible = ref(false)
  2324. const form = reactive({
  2325. '仓库出库':true,
  2326. '裁剪':true,
  2327. '车缝':true,
  2328. '手工':true,
  2329. '大烫':true,
  2330. '总检':true,
  2331. '包装':true,
  2332. })
  2333. //新增工序资料按钮
  2334. const addgdgy_onclick = () => {
  2335. if(_Gd_gdbh.value === '' || _Gd_gdbh.value === null){
  2336. ElMessage({type: 'warning',message: '请选择具体的工单后,再操作此功能'})
  2337. return false;
  2338. }else{
  2339. visible.value = true;
  2340. }
  2341. }
  2342. //新增工序资料确定按钮
  2343. const add_gxenterDialog = () => {
  2344. console.log(form)
  2345. const formattedData = {
  2346. ckck: form['仓库出库'],
  2347. cq: form['裁剪'],
  2348. cf: form['车缝'],
  2349. hdsy: form['手工'],
  2350. dt: form['大烫'],
  2351. zj: form['总检'],
  2352. bz: form['包装']
  2353. };
  2354. // true 选择 fasle 未选择
  2355. for (let key in formattedData) {
  2356. if (formattedData[key] === true) {
  2357. formattedData[key] = 1;
  2358. } else if (formattedData[key] === false) {
  2359. formattedData[key] = 2;
  2360. }
  2361. }
  2362. console.log(formattedData)
  2363. }
  2364. //新增工序资料取消按钮
  2365. const add_gxcloseDialog = () => {
  2366. visible.value = false;
  2367. }
  2368. // =========== 订单打印 ===========
  2369. //弹窗
  2370. const order_viewVisible = ref(false)
  2371. // 默认选择竖向
  2372. const printDirection = ref('纵向')
  2373. const cp_gdprintonClick = () => {
  2374. order_viewVisible.value = true
  2375. }
  2376. //确定打印
  2377. const confirmPrintDirection = () => {
  2378. console.log(_Gd_gdbh.value)
  2379. console.log(printDirection.value)
  2380. if(_Gd_gdbh.value === '' || _Gd_gdbh.value === null){
  2381. ElMessage({type: 'warning',message: '请选择具体的工单后,再操作此功能'})
  2382. return false;
  2383. }else{
  2384. if(ystableData.length >=1){
  2385. printPageRef.value.open(_Gd_gdbh.value,printDirection.value)
  2386. }else{
  2387. ElMessage({type: 'warning',message: '请新增颜色资料,再操作此功能'})
  2388. return false;
  2389. }
  2390. }
  2391. }
  2392. const order_viewCloseDialog = () => {
  2393. order_viewVisible.value = false
  2394. }
  2395. // =========== BOM资料 ===========
  2396. const res_bomdialogFormVisible = ref(false)
  2397. const resbomtableData = ref([]);
  2398. const ddhformData = reactive({
  2399. ddh: '',
  2400. kh: '',
  2401. sckh: '',
  2402. ks: '',
  2403. ml: '',
  2404. });
  2405. const resbom_tableColumns = ref(
  2406. [
  2407. { label: '物料分类', prop: '物料分类', width: '130' },
  2408. { label: '物料名称', prop: '物料名称', width: '300' },
  2409. { label: '计划用料', prop: '计划用料', width: '130' },
  2410. { label: '计划门幅', prop: '计划门幅', width: '130' },
  2411. { label: '定额用料', prop: '定额用料', width: '130' },
  2412. { label: '定额门幅', prop: '定额门幅', width: '130' },
  2413. { label: '备注', prop: '备注', width: '240' },
  2414. ]
  2415. )
  2416. //批量修改BOM资料
  2417. const BOMclick = () => {
  2418. if(bomtableData.value === ''){
  2419. ElMessage({type: 'warning',message: 'BOM数据为空'})
  2420. return;
  2421. }
  2422. if(_Gd_gdbh.value === '' || _Gd_gdbh.value === null){
  2423. ElMessage({type: 'warning',message: '请选择订单后,再操作此功能'})
  2424. return;
  2425. }else{
  2426. res_bomdialogFormVisible.value = true
  2427. ddhformData.ddh = _Gd_gdbh.value
  2428. ddhformData.kh = _Gd_kh.value
  2429. ddhformData.sckh = _Gd_sckh.value
  2430. ddhformData.ks = _Gd_ks.value
  2431. ddhformData.ml = _Gd_ML.value
  2432. _TestCoefficient();
  2433. }
  2434. }
  2435. const handleInput = (value, row, prop) => {
  2436. if(prop != "物料名称" && prop != "备注" && prop != "物料分类" ){
  2437. // 使用正则表达式过滤非数字和小数点的字符
  2438. let filteredValue = value.replace(/[^\d.]/g, '');
  2439. // 不允许以 . 开头
  2440. if (filteredValue.startsWith('.')) {
  2441. filteredValue = filteredValue.slice(1); // 去掉开头的 .
  2442. }
  2443. // 确保只有一个小数点
  2444. const parts = filteredValue.split('.');
  2445. if (parts.length > 2) {
  2446. // 如果超过一个小数点,只保留第一个
  2447. row[prop] = `${parts[0]}.${parts.slice(1).join('')}`;
  2448. } else {
  2449. // 否则直接赋值
  2450. row[prop] = filteredValue;
  2451. }
  2452. }
  2453. };
  2454. //bom数据获取
  2455. const _TestCoefficient = async ()=>{
  2456. try {
  2457. const orderBomListdata = await orderBomList({order:_Gd_gdbh.value});
  2458. console.log(orderBomListdata)
  2459. resbomtableData.value = orderBomListdata.data;
  2460. const formattedData = orderBomListdata.data.map(item=>{
  2461. item.BOM_desc = item.BOM_desc;
  2462. item.物料名称 = item.物料名称;
  2463. item.计划用料 = item.计划用料;
  2464. item.定额用料 = item.定额用料;
  2465. item.裁床实际用料 = item.裁床实际用料;
  2466. item.裁床领用面料 = item.裁床领用面料;
  2467. item.裁床退回仓库面料 = item.裁床退回仓库面料;
  2468. item.备注 = item.备注;
  2469. item.投料单位 = "米";
  2470. // item.UNIQID = item.UNIQID;
  2471. return item
  2472. });
  2473. } catch (error) {
  2474. console.error(error);
  2475. }
  2476. }
  2477. const resbom_handleKeyDown = (event, x, y, prop) => {
  2478. const currentElement = document.getElementById(`input${x}${y}`);
  2479. if (currentElement === null && currentElement === undefined) return
  2480. let move = 0
  2481. switch (event.keyCode) {
  2482. case 13: // Enter
  2483. case 40: // 向下箭头
  2484. if (y < resbomtableData.value.length )
  2485. document.getElementById(`input${x}${y + 1}`).focus();
  2486. break;
  2487. case 38: // 向上箭头
  2488. if ( y > 0) {
  2489. document.getElementById(`input${x}${y - 1}`).focus();
  2490. }
  2491. break;
  2492. case 39: // 向左箭头
  2493. if (x >= 0 && x <=6) {
  2494. move = x + 1
  2495. }
  2496. document.getElementById(`input${move}${y}`).focus();
  2497. break;
  2498. case 37: // 向右箭头
  2499. if (x = 0 && x <=6) {
  2500. move = x - 1
  2501. }
  2502. document.getElementById(`input${move}${y}`).focus();
  2503. break;
  2504. default:
  2505. break;
  2506. }
  2507. }
  2508. const scfjfpxsCellClass = ({row, column, rowIndex, columnIndex}) =>{
  2509. if (
  2510. column.label === '物料分类' ||
  2511. column.label === '计划门幅' ||
  2512. column.label === '定额门幅' ||
  2513. column.label === '计划用料' ||
  2514. column.label === '备注' ||
  2515. column.label === '物料名称' ||
  2516. column.label === '计划用量' ||
  2517. column.label === '定额用料' ) {
  2518. return 'background-plan-usage-low';
  2519. }
  2520. }
  2521. //新增
  2522. const add_bomenterDialog = async() => {
  2523. // 创建一行空数据,字段值可以根据需求初始化
  2524. const newRow = {
  2525. 'BOM_desc': '',
  2526. '物料名称': '',
  2527. '计划用料': '',
  2528. '定额用料': '',
  2529. '裁床实际用料': '',
  2530. '裁床领用面料': '',
  2531. '裁床退回仓库面料': '',
  2532. '备注': '',
  2533. '投料单位': '米',
  2534. 'UNIQID':''
  2535. };
  2536. if (!resbomtableData.value || !Array.isArray(resbomtableData.value)) {
  2537. resbomtableData.value = []; // 重新初始化
  2538. }
  2539. // 将新增的行数据推入到表格数据中
  2540. resbomtableData.value.push(newRow);
  2541. }
  2542. // BOM删除
  2543. const record_deleteRow = async (row, index) => {
  2544. console.log(row.UNIQID);
  2545. // 使用 ElMessageBox 提示确认删除
  2546. ElMessageBox.confirm('确定删除此行数据吗?', '提示', {
  2547. confirmButtonText: '确定',
  2548. cancelButtonText: '取消',
  2549. type: 'warning'
  2550. }).then(async () => {
  2551. // 确认删除,检查UNIQID是否为空
  2552. if (row.UNIQID === '' || row.UNIQID === null || row.UNIQID === undefined) {
  2553. // 删除当前行数据
  2554. resbomtableData.value.splice(index, 1);
  2555. ElMessage({
  2556. type: 'success',
  2557. message: '删除成功'
  2558. });
  2559. } else {
  2560. // 调用接口删除
  2561. const Bomdel_del = await Bomdel({ UNIQID:row.UNIQID});
  2562. if (Bomdel_del.code === 0) {
  2563. ElMessage({
  2564. type: 'success',
  2565. message: '删除成功'
  2566. });
  2567. } else {
  2568. ElMessage({
  2569. type: 'error',
  2570. message: '删除失败'
  2571. });
  2572. }
  2573. // 重新获取BOM列表数据
  2574. const orderBomListdata = await orderBomList({ order: _Gd_gdbh.value });
  2575. //BOM资料列表
  2576. bomtableData.splice(0, bomtableData.length, ...orderBomListdata.data);
  2577. //批量新增/更新BOM数据列表
  2578. resbomtableData.value = orderBomListdata.data;
  2579. }
  2580. }).catch(() => {
  2581. // 取消删除
  2582. ElMessage({
  2583. type: 'info',
  2584. message: '已取消删除'
  2585. });
  2586. });
  2587. }
  2588. //修改
  2589. const res_bomenterDialog = async () => {
  2590. const rawValueArray = resbomtableData._rawValue;
  2591. const formattedData = rawValueArray
  2592. .filter(item => item.物料名称 !== null && item.物料名称 !== "") // 过滤掉物料名称为空的行
  2593. .map(item => {
  2594. return {
  2595. BOM_工单编号: ddhformData['ddh'],
  2596. UNIQID: item.UNIQID !== undefined ? item.UNIQID : "",
  2597. 物料分类: item.物料分类 !== null ? item.物料分类 : "",
  2598. BOM_物料名称: item.物料名称 !== null ? item.物料名称 : "",
  2599. BOM_计划用量: item.计划用料 !== null ? item.计划用料 : "",
  2600. BOM_标准用量: item.定额用料 !== null ? item.定额用料 : "",
  2601. BOM_实际用量: item.裁床实际用料 !== null ? item.裁床实际用料 : "",
  2602. Bom_领用数量: item.裁床领用面料 !== null ? item.裁床领用面料 : "",
  2603. BOM_退还数量: item.裁床退回仓库面料 !== null ? item.裁床退回仓库面料 : "",
  2604. BOM_desc: item.备注 !== null ? item.备注 : "",
  2605. BOM_计划门幅: item.计划门幅 !== null ? item.计划门幅 : "",
  2606. BOM_定额门幅: item.定额门幅 !== null ? item.定额门幅 : "",
  2607. BOM_投料单位: "",
  2608. Sys_ID: userStore.userInfo.nickName,
  2609. Sys_rq: currentDate
  2610. }
  2611. });
  2612. console.log(formattedData);
  2613. const add_FabricEditdata = await FabricEdit(formattedData);
  2614. if (add_FabricEditdata.code === 0) {
  2615. res_bomdialogFormVisible.value = false;
  2616. ElMessage({type: 'success',message: '修改成功'})
  2617. const orderBomListdata = await orderBomList({order:_Gd_gdbh.value});
  2618. bomtableData.splice(0,orderBomListdata.data.length,...orderBomListdata.data);//bom表格数据
  2619. } else {
  2620. ElMessage({ type: 'error',message: '修改失败'})
  2621. }
  2622. }
  2623. // 取消
  2624. const
  2625. res_bomcloseDialog = () => {
  2626. res_bomdialogFormVisible.value = false;
  2627. }
  2628. //BOM资料表格双击
  2629. const edit_bomdialogFormVisible = ref(false)
  2630. const edit_resbomtableData = ref([]);
  2631. const edit_resbom_tableColumns = ref(
  2632. [
  2633. { label: '物料名称', prop: '物料名称', width: '170' },
  2634. { label: '计划用料', prop: '计划用料', width: '130' },
  2635. { label: '定额用料', prop: '定额用料', width: '130' },
  2636. { label: '计划门幅', prop: '计划门幅', width: '170' },
  2637. { label: '定额门幅', prop: '定额门幅', width: '170' },
  2638. // { label: '裁床实际用料', prop: '裁床实际用料', width: '130' },
  2639. // { label: '裁床领用面料', prop: '裁床领用面料', width: '130' },
  2640. // { label: '裁床退回仓库面料', prop: '裁床退回仓库面料', width: '170' },
  2641. { label: '备注', prop: '备注', width: '170' },
  2642. { label: '投料单位', prop: '投料单位', width: '100' },
  2643. ]
  2644. )
  2645. const UNIQID = ref('')
  2646. const bombomupdateCompanyFunc = async (row) => {
  2647. BOMclick()
  2648. // edit_bomdialogFormVisible.value = true
  2649. // ddhformData.ddh = _Gd_gdbh.value
  2650. // ddhformData.kh = _Gd_kh.value
  2651. // ddhformData.sckh = _Gd_sckh.value
  2652. // ddhformData.ks = _Gd_ks.value
  2653. // UNIQID.value = row.UNIQID
  2654. // _editTestCoefficient()
  2655. }
  2656. // BOM数据获取
  2657. const _editTestCoefficient = async () => {
  2658. try {
  2659. // 获取 BOM 数据
  2660. const orderBomListdata = await orderBomList({ order: _Gd_gdbh.value });
  2661. console.log(orderBomListdata);
  2662. // 过滤数据,只保留 UNIQID 相同的项
  2663. const filteredData = orderBomListdata.data.filter(item => item.UNIQID === UNIQID.value);
  2664. // 处理数据
  2665. edit_resbomtableData.value = filteredData.map(item => ({
  2666. 物料名称: item.物料名称,
  2667. 计划用料: item.计划用料,
  2668. 定额用料: item.定额用料,
  2669. 裁床实际用料: item.裁床实际用料,
  2670. 裁床领用面料: item.裁床领用面料,
  2671. 裁床退回仓库面料: item.裁床退回仓库面料,
  2672. 备注: item.备注,
  2673. 计划门幅: item.计划门幅,
  2674. 定额门幅: item.定额门幅,
  2675. UNIQID: item.UNIQID // 保留 UNIQID 以便后续使用
  2676. }));
  2677. } catch (error) {
  2678. console.error(error);
  2679. }
  2680. };
  2681. //一键修改
  2682. const editres_bomenterDialog = async () => {
  2683. const rawValueArray = edit_resbomtableData._rawValue;
  2684. const formattedData = rawValueArray
  2685. .filter(item => item.物料名称 !== null && item.物料名称 !== "") // 过滤掉物料名称为空的行
  2686. .map(item => {
  2687. return {
  2688. BOM_工单编号: ddhformData['ddh'],
  2689. UNIQID: item.UNIQID !== undefined ? item.UNIQID : "",
  2690. BOM_物料名称: item.物料名称 !== null ? item.物料名称 : "",
  2691. BOM_计划用量: item.计划用料 !== null ? item.计划用料 : "",
  2692. BOM_标准用量: item.定额用料 !== null ? item.定额用料 : "",
  2693. BOM_实际用量: item.裁床实际用料 !== null ? item.裁床实际用料 : "",
  2694. Bom_领用数量: item.裁床领用面料 !== null ? item.裁床领用面料 : "",
  2695. BOM_退还数量: item.裁床退回仓库面料 !== null ? item.裁床退回仓库面料 : "",
  2696. BOM_desc: item.备注 !== null ? item.备注 : "",
  2697. BOM_计划门幅: item.计划门幅 !== null ? item.计划门幅 : "",
  2698. BOM_定额门幅: item.定额门幅 !== null ? item.定额门幅 : "",
  2699. BOM_投料单位: "米",
  2700. Sys_ID: userStore.userInfo.nickName,
  2701. Sys_rq: currentDate
  2702. }
  2703. });
  2704. console.log(formattedData);
  2705. const add_FabricEditdata = await FabricEdit(formattedData);
  2706. if (add_FabricEditdata.code === 0) {
  2707. edit_bomdialogFormVisible.value = false;
  2708. ElMessage({type: 'success',message: '修改成功'})
  2709. const orderBomListdata = await orderBomList({order:_Gd_gdbh.value});
  2710. bomtableData.splice(0,orderBomListdata.data.length,...orderBomListdata.data);//bom表格数据
  2711. } else {
  2712. ElMessage({ type: 'error',message: '修改失败'})
  2713. }
  2714. }
  2715. // 取消
  2716. const editres_bomcloseDialog = () => {
  2717. edit_bomdialogFormVisible.value = false;
  2718. }
  2719. //点击表格行获取下方表格数据列表
  2720. // =========== 颜色资料、工艺资料、技术资料附件 ===========
  2721. //全局调用订单号编号
  2722. const _Gd_gdbh = ref('')
  2723. const _ddhval = ref('')
  2724. const _Gd_kh = ref('')
  2725. const _Gd_sckh = ref('')
  2726. const _Gd_ks = ref('')
  2727. const _Gd_ML = ref('')
  2728. //颜色资料
  2729. const ystableData = reactive([])
  2730. //尺寸列表
  2731. const sizeDatas = reactive([])
  2732. //工艺资料
  2733. const gytableData = reactive([])
  2734. //订单资料表
  2735. const ddtableData = reactive([])
  2736. //技术附件
  2737. const jstableData = reactive([])
  2738. //BOM附件
  2739. const bomtableData = reactive([])
  2740. //面料附件
  2741. const mltableData = reactive([])
  2742. //点击订单资料行
  2743. const tableRowClick = async (row) => {
  2744. //清空尺寸列表、颜色资料、工艺资料、订单资料附件、技术附件
  2745. sizeDatas.length = 0
  2746. ystableData.splice(0, ystableData.length);
  2747. gytableData.splice(0, gytableData.length);
  2748. ddtableData.splice(0, ddtableData.length);
  2749. jstableData.splice(0, jstableData.length);
  2750. bomtableData.splice(0, bomtableData.length);
  2751. mltableData.splice(0, mltableData.length);
  2752. _Gd_gdbh.value = row.订单编号
  2753. _ddhval.value = row.订单编号
  2754. _Gd_kh.value = row.客户编号
  2755. _Gd_sckh.value = row.生产款号
  2756. _Gd_ks.value = row.款式
  2757. _Gd_ML.value = row.面料
  2758. //数据列表显示
  2759. const PrintListDatas = await PrintListData({order:_Gd_gdbh.value})
  2760. const jsOrderAttachments = await OrderAttachments({order:_Gd_gdbh.value,desc:'技术附件'})
  2761. const ddOrderAttachments = await OrderAttachments({order:_Gd_gdbh.value,desc:'订单资料附件'})
  2762. const orderBomListdata = await orderBomList({ order: _Gd_gdbh.value });
  2763. // console.log("orderBomListdata:", orderBomListdata); // 打印接口返回的数据
  2764. // 确保 orderBomListdata.data 是数组,避免 undefined 错误
  2765. if (orderBomListdata?.data && Array.isArray(orderBomListdata.data)) {
  2766. bomtableData.splice(0, bomtableData.length, ...orderBomListdata.data);
  2767. } else {
  2768. bomtableData.splice(0, bomtableData.length); // 如果数据无效,清空表格
  2769. }
  2770. const fabricListdata = await fabricList({ order: _Gd_gdbh.value });
  2771. // console.log("fabricListdata:", fabricListdata); // 打印接口返回的数据
  2772. if (fabricListdata.code === 0 && Array.isArray(fabricListdata.data.table)) {
  2773. // 如果 data.table 是数组且不为空,更新表格数据
  2774. mltableData.splice(0, mltableData.length, ...fabricListdata.data.table);
  2775. } else {
  2776. // 如果 data.table 为空或无效,清空表格数据
  2777. mltableData.splice(0, mltableData.length);
  2778. }
  2779. //颜色资料
  2780. if(PrintListDatas.data.列表.length === 0 ){
  2781. ystableData.length = 0
  2782. }else{
  2783. sizeDatas.splice(0,PrintListDatas.data.型号.length,...PrintListDatas.data.型号);//表格尺码投数据
  2784. ystableData.splice(0,PrintListDatas.data.列表.length,...PrintListDatas.data.列表);//表格数据
  2785. const newData = PrintListDatas.data.列表.map(item => ({
  2786. ...item,
  2787. 船样: item.船样 === 1 ? '是' : '否'
  2788. }));
  2789. ystableData.length = 0;
  2790. ystableData.push(...newData);
  2791. }
  2792. //技术附件
  2793. if(jsOrderAttachments.data === ''){
  2794. const WorkListdata = [];
  2795. jstableData.splice(0,jstableData.length,...WorkListdata);
  2796. }
  2797. if(jsOrderAttachments.code === 0 && ddOrderAttachments.code === 0){
  2798. jstableData.splice(0,jsOrderAttachments.data.length,...jsOrderAttachments.data);
  2799. ddtableData.splice(0,ddOrderAttachments.data.length,...ddOrderAttachments.data);
  2800. }
  2801. }
  2802. // //pdf
  2803. // const showPdfModal = ref(false);
  2804. // const pdfContainer = ref(null);
  2805. // const closeModal = () => {
  2806. // showPdfModal.value = false;
  2807. // };
  2808. // const fetchAndConvertFile = async () => {
  2809. // try {
  2810. // // 从后端获取 Base64 编码的 XLSX 文件数据
  2811. // const responses = await OrderAttachments({order:_Gd_gdbh.value,desc:'技术附件'});
  2812. // const response= responses.data[0].附件内容
  2813. // const base64Data = response.match(/base64,(.*)$/)?.[1];
  2814. // if (!base64Data) {
  2815. // throw new Error('Invalid Base64 data');
  2816. // }
  2817. // const binaryString = atob(base64Data);
  2818. // const binaryLen = binaryString.length;
  2819. // const bytes = new Uint8Array(binaryLen);
  2820. // for (let i = 0; i < binaryLen; i++) {
  2821. // bytes[i] = binaryString.charCodeAt(i);
  2822. // }
  2823. // // 解析 XLSX 文件
  2824. // const workbook = XLSX.read(bytes, { type: 'array' });
  2825. // const worksheet = workbook.Sheets[workbook.SheetNames[0]];
  2826. // console.log(121212,worksheet)
  2827. // const jsonData = XLSX.utils.sheet_to_json(worksheet);
  2828. // let base64 = XLSX.write(worksheet, { type: 'base64' });
  2829. // generatePdf(base64);
  2830. // } catch (error) {
  2831. // console.error('Error fetching and converting file:', error);
  2832. // }
  2833. // };
  2834. // const generatePdf = (data) => {
  2835. // console/log('pdf data', data)
  2836. // const pdfDoc = new jsPDF()
  2837. // pdfDoc.text(data)
  2838. // pdfDoc.save(a4.pdf)
  2839. // };
  2840. // const previewPdf = (blob) => {
  2841. // const fileURL = URL.createObjectURL(blob);
  2842. // // 通过 ref 引用 pdfContainer 来在指定容器中显示 PDF
  2843. // const iframe = document.createElement('iframe');
  2844. // iframe.src = fileURL;
  2845. // iframe.width = '100%';
  2846. // iframe.height = '600px';
  2847. // if (pdfContainer.value) {
  2848. // pdfContainer.value.innerHTML = ''; // 清空之前的内容
  2849. // pdfContainer.value.appendChild(iframe);
  2850. // }
  2851. // };
  2852. //表格复选框
  2853. const table_del = ref(true)//删除订单资料
  2854. const table_Selection = ref('')//存储选中Uniqid
  2855. const ddzlSelectionChange = (selection, type) => {
  2856. const ids = selection.map(item => {
  2857. return item.Uniqid
  2858. })
  2859. table_Selection.value = ids.join(',')
  2860. }
  2861. // 删除按钮
  2862. const del_ddzlClick = async () => {
  2863. try {
  2864. // 显示确认弹窗
  2865. await ElMessageBox.confirm('确定要删除这条记录吗?', '提示', {
  2866. confirmButtonText: '确定',
  2867. cancelButtonText: '取消',
  2868. type: 'warning',
  2869. });
  2870. // 如果用户点击了确定
  2871. let params = {};
  2872. params.Uniqid = table_Selection._value;
  2873. console.log(params);
  2874. const res1 = await orderDataDel(params);
  2875. if (res1.code === 0) {
  2876. ElMessage.success('删除成功');
  2877. // 重新加载工单列表
  2878. const WorkListdata = await WorkOrderList({ search: _Gd_khdh.value, page: "1", limit: "10" });
  2879. tableData.value = WorkListdata.data.data;
  2880. // 清空相关数据
  2881. ystableData.splice(0, ystableData.length); // 颜色资料清空
  2882. gytableData.splice(0, gytableData.length); // 工艺资料清空
  2883. ddtableData.splice(0, ddtableData.length); // 订单资料附件清空
  2884. jstableData.splice(0, jstableData.length); // 技术附件清空
  2885. }
  2886. } catch (error) {
  2887. // 用户点击了取消或关闭了弹窗
  2888. ElMessage.info('删除操作已取消');
  2889. }
  2890. };
  2891. const delall = ref(true)
  2892. //颜色复选框
  2893. const ysSelection = ref('')
  2894. //工艺复选框
  2895. const gySelection = ref('')
  2896. // 颜色资料多选、工艺资料多选
  2897. const selectionChange = (selection, type) => {
  2898. console.log(selection)
  2899. const ids = selection.map(item => {
  2900. if(type === '颜色资料'){
  2901. return type === '颜色资料' ? item.Uniqid: item.Uniqid
  2902. }
  2903. if(type === '工艺资料'){
  2904. return type === '工艺资料' ? item.Uniqid: item.Uniqid
  2905. }
  2906. })
  2907. if (type === '颜色资料') {
  2908. ysSelection.value = ids.join(',')
  2909. }
  2910. if (type === '工艺资料') {
  2911. gySelection.value = ids.join(',')
  2912. }
  2913. }
  2914. // ===========删除颜色资料、工艺资料 ===========
  2915. const delgd_delclick = async () => {
  2916. let changed = false;
  2917. try {
  2918. if (ysSelection.value !== '') {
  2919. const res1 = await PrintDetailDel({ UniqId: ysSelection.value });
  2920. if (res1.code === 0) {
  2921. ElMessage.success('颜色资料删除成功');
  2922. changed = true;
  2923. }
  2924. }
  2925. if (gySelection.value !== '') {
  2926. const res2 = await PrintDetailDel({ UniqId: gySelection.value });
  2927. if (res2.code === 0) {
  2928. ElMessage.success('工艺资料删除成功');
  2929. changed = true;
  2930. }
  2931. }
  2932. if (changed) {
  2933. const PrintListDatas = await PrintListData({ order: _Gd_gdbh.value });
  2934. sizeDatas.splice(0, sizeDatas.length, ...PrintListDatas.data.型号);
  2935. ystableData.splice(0, ystableData.length, ...PrintListDatas.data.列表);
  2936. }
  2937. } catch (err) {
  2938. ElMessage.error(err);
  2939. }
  2940. };
  2941. const fj_Selection = ref('')//存储选中Uniqid
  2942. const fjSelection = ref('')
  2943. const fjdelall = ref(true)
  2944. const fjSelectionChange = (selection, type) => {
  2945. // console.log(selection)
  2946. const ids = selection.map(item => {
  2947. return item.UniqId
  2948. })
  2949. fj_Selection.value = ids.join(',')
  2950. console.log("附件复选框",fj_Selection.value)
  2951. }
  2952. // //删除附件按钮
  2953. const fj_delclick = async () => {
  2954. let params = {};
  2955. params.UniqId = fj_Selection._value;
  2956. res1.code === 0 && ElMessage.success('删除成功')
  2957. }
  2958. //BOM表格复选框
  2959. const del_bom = ref(true)//删除BOM资料
  2960. const bom_Selection = ref('')//存储选中Uniqid
  2961. const bomSelectionChange = (selection, type) => {
  2962. const ids = selection.map(item => {
  2963. return item.UNIQID
  2964. })
  2965. bom_Selection.value = ids.join(',')
  2966. console.log("bom复选框",bom_Selection.value)
  2967. }
  2968. // 删除BOM资料按钮
  2969. // const delbom_delclick = async () => {
  2970. // try {
  2971. // // 弹出确认框
  2972. // await ElMessageBox.confirm('此操作将永久删除该文件, 是否继续?', '提示', {
  2973. // confirmButtonText: '确定',
  2974. // cancelButtonText: '取消',
  2975. // type: 'warning',
  2976. // });
  2977. // // 用户点击“确定”后执行以下逻辑
  2978. // const params = {
  2979. // UNIQID: bom_Selection._value,
  2980. // };
  2981. // console.log('删除参数:', params);
  2982. // // 调用删除接口
  2983. // const res1 = await Bomdel(params);
  2984. // if (res1.code === 0) {
  2985. // ElMessage.success('删除成功');
  2986. // } else {
  2987. // ElMessage.error('删除失败');
  2988. // return; // 如果删除失败,直接返回
  2989. // }
  2990. // // 重新获取BOM列表数据
  2991. // const orderBomListdata = await orderBomList({ order: _Gd_gdbh.value });
  2992. // bomtableData.splice(0, bomtableData.length, ...orderBomListdata.data);
  2993. // } catch (error) {
  2994. // // 用户点击“取消”或弹框关闭
  2995. // console.log('用户取消删除操作');
  2996. // }
  2997. // };
  2998. //合计
  2999. const getSummaries = (param) => {
  3000. const { columns, data } = param;
  3001. const sums = {};
  3002. //选择你希望合计的列
  3003. const summableLabels = [...sizeDatas, "制单总数"];
  3004. columns.forEach((column, index) => {
  3005. if (index === 1) {
  3006. sums[index] = '总数量合计';
  3007. return;
  3008. }
  3009. if (summableLabels.includes(column.label)) {
  3010. const values = data.map(item => Number(item[column.property]));
  3011. // 检查数组中是否所有值都是 NaN
  3012. if (!values.every(value => isNaN(value))) {
  3013. sums[index] = values.reduce((prev, curr) => {
  3014. const value = Number(curr);
  3015. if (!isNaN(value)) {
  3016. return prev + value;
  3017. }
  3018. return prev;
  3019. }, 0);
  3020. // 如果需要,可以在这里添加单位
  3021. // sums[index] += ' 件';
  3022. } else {
  3023. sums[index] = 'N/A';
  3024. }
  3025. }
  3026. });
  3027. return sums;
  3028. };
  3029. // 面料合计
  3030. // const mlgetSummaries = (param) => {
  3031. // const { columns, data } = param;
  3032. // const sums = {};
  3033. // //选择你希望合计的列
  3034. // const summableLabels = ["库存总量"];
  3035. // columns.forEach((column, index) => {
  3036. // if (index === 0) {
  3037. // sums[index] = '总数量合计';
  3038. // return;
  3039. // }
  3040. // if (summableLabels.includes(column.label)) {
  3041. // const values = data.map(item => Number(item[column.property]));
  3042. // if (!values.every(value => isNaN(value))) {
  3043. // sums[index] = values.reduce((prev, curr) => {
  3044. // const value = Number(curr);
  3045. // if (!isNaN(value)) {
  3046. // return prev + value;
  3047. // }
  3048. // return prev;
  3049. // }, 0);
  3050. // } else {
  3051. // sums[index] = 'N/A';
  3052. // }
  3053. // }
  3054. // });
  3055. // return sums;
  3056. // };
  3057. //=========查询========
  3058. const searchInfo = ref('')
  3059. //查询按钮
  3060. const onSubmit = async () => {
  3061. if(searchInfo.value === ''){
  3062. ElMessage({type: 'warning',message: '请输入搜索的订单编号'})
  3063. return false;
  3064. }else{
  3065. const WorkListdata = await WorkOrderList({search:searchInfo.value,page:page.value,limit:pageSize.value});
  3066. tableData.value= WorkListdata.data.data
  3067. ystableData.splice(0, ystableData.length);//颜色资料清空
  3068. gytableData.splice(0, gytableData.length);//工艺资料情空
  3069. ddtableData.splice(0, ddtableData.length);//订单资料附件清空
  3070. jstableData.splice(0, jstableData.length);//技术附件清空
  3071. }
  3072. };
  3073. // 调用查询数据接口
  3074. const _cha_WorkList = async (node) => {
  3075. if(searchInfo.value === ''){
  3076. ElMessage({type: 'warning',message: '请输入搜索的信息'})
  3077. return false;
  3078. }
  3079. const search = searchInfo.value;
  3080. var regex = /^[a-zA-Z0-9]+$/;
  3081. try {
  3082. if (regex.test(search)) {
  3083. // 符合条件,执行搜索操作
  3084. console.log('搜索内容为纯数字加字母');
  3085. // const WorkListdata = await WorkList({search:search,limit:100,page:1});//接口调用函数
  3086. if(WorkListdata.data.total === 0){
  3087. ElMessage({type: 'warning',message: '未搜索具体查询条件'})
  3088. }
  3089. tableData.splice(0,tableData.length,...WorkListdata.data.data);//表格数据
  3090. total.value = WorkListdata.data.total;//共多少条
  3091. } else {
  3092. // 不符合条件,给出提示
  3093. console.log('搜索内容包含非字母和数字的字符');
  3094. // const WorkListdata = await WorkList({Gd_khdh:'',search:search,limit:100,page:1});//接口调用函数
  3095. if(WorkListdata.data.total === 0){
  3096. ElMessage({type: 'warning',message: '未搜索具体查询条件'})
  3097. }
  3098. tableData.splice(0,tableData.length,...WorkListdata.data.data);//表格数据
  3099. total.value = WorkListdata.data.total;//共多少条
  3100. }
  3101. } catch (error) {
  3102. console.error(error);
  3103. }
  3104. };
  3105. //===============附件上传===============
  3106. //附件上传按钮
  3107. const jsfjClick = () => {
  3108. if(_Gd_gdbh.value === '' || _Gd_gdbh.value === null){
  3109. ElMessage({type: 'warning',message: '请选择具体的工单后,再操作此功能'})
  3110. }else{
  3111. jsfjdialogFormVisible.value = true
  3112. initJsfjformdata();
  3113. jsfjformdata.value.关联编号 = _Gd_gdbh.value
  3114. }
  3115. }
  3116. //技术附件弹窗
  3117. const jsfjdialogFormVisible = ref(false)
  3118. const jsfjformdata = ref({
  3119. sys_id: _username.value,
  3120. 附件备注: '',
  3121. 附件内容: '',
  3122. 附件类型: '',
  3123. 关联编号: '',
  3124. });
  3125. //技术附件弹窗取消
  3126. const initJsfjformdata = () => {
  3127. jsfjformdata.value = {
  3128. sys_id: _username.value,
  3129. 附件备注: '',
  3130. 附件内容: '',
  3131. 附件类型: '',
  3132. 关联编号: '',
  3133. }
  3134. }
  3135. //技术附件弹窗取消
  3136. const jsfjcloseDialog = () => {
  3137. jsfjdialogFormVisible.value = false
  3138. }
  3139. const uploadExcel = (event) =>{
  3140. const files = event.target.files;
  3141. console.log(files)
  3142. let suffixArr = name.split("."), suffix = suffixArr[suffixArr.length-1];
  3143. jsfjformdata.value.附件内容 = files[0]
  3144. jsfjformdata.value.附件类型 = files[0].name.split('.')[1]
  3145. }
  3146. //技术附件弹窗确定
  3147. const jsfjenterDialog = () => {
  3148. if(jsfjformdata.value.附件备注==''){
  3149. ElMessage({type: 'error',message: '请选择附件备注'});
  3150. return;
  3151. }
  3152. if(jsfjformdata.value.附件内容==''){
  3153. ElMessage({type: 'error',message: '请上传文件'});
  3154. return;
  3155. }
  3156. if(jsfjformdata.value.关联编号==''){
  3157. ElMessage({type: 'error',message: '请关闭重新打开'});
  3158. return;
  3159. }
  3160. let fr = new FileReader();
  3161. fr.readAsDataURL(jsfjformdata.value.附件内容);
  3162. fr.onload = function () {
  3163. const restoredData = new FormData();
  3164. restoredData.append('附件备注', jsfjformdata.value.附件备注);
  3165. restoredData.append('附件内容', fr.result);
  3166. restoredData.append('附件类型', jsfjformdata.value.附件类型);
  3167. restoredData.append('关联编号', jsfjformdata.value.关联编号);
  3168. restoredData.append('sys_id', jsfjformdata.value.sys_id);
  3169. //将restoredDta数据新增到接口
  3170. gdAnnexAdd(restoredData).then(response => {
  3171. if(response.code==0){
  3172. ElMessage({type: 'success',message: '新增成功',})
  3173. jsfjdialogFormVisible.value = false
  3174. let row = {
  3175. '订单编号':_Gd_gdbh.value,
  3176. // '产品代号':_Gd_cpdh.value,
  3177. // '产品名称':_Gd_cpmc.value,
  3178. }
  3179. tableRowClick (row)
  3180. }
  3181. })
  3182. }
  3183. }
  3184. </script>
  3185. <style scoped>
  3186. /* 在样式表中使用媒体查询 */
  3187. @media (max-width: 768px) {
  3188. /* 在小屏幕下的样式设置 */
  3189. .dialog-footer {
  3190. text-align: center;
  3191. }
  3192. }
  3193. /*背景颜色*/
  3194. /*印件背景颜色变黄*/
  3195. :deep(.el-table__body .warning-row) {
  3196. background: #FFFF80 !important;
  3197. }
  3198. /*bom参数背景*/
  3199. :deep(.el-table__body .background-plan-usage-low div div div) {
  3200. background: #80FA80 !important;
  3201. }
  3202. /* 选中某行时的背景色 */
  3203. :deep(.el-table__body tr.current-row) > td {
  3204. background: #ff80ff !important;
  3205. }
  3206. :deep(.statusy-plan-usage-low div) {
  3207. color: #8c939d !important;
  3208. }
  3209. /* 在样式表中添加以下样式 */
  3210. .el-input__textarea {
  3211. resize: none; /* 禁止调整大小 */
  3212. }
  3213. .JKWTree-container {
  3214. display: flex;
  3215. }
  3216. .JKWTree-tree {
  3217. /*width: 300px;*/
  3218. background-color: #fff;
  3219. padding: 10px;
  3220. margin-right: 20px;
  3221. }
  3222. .JKWTree-tree h3 {
  3223. font-size: 15px;
  3224. font-weight: 700;
  3225. margin: 10px 0;
  3226. }
  3227. .JKWTree-content {
  3228. flex: 1;
  3229. }
  3230. /*关闭拖拽功能*/
  3231. .el-textarea textarea {
  3232. resize: none !important;
  3233. }
  3234. </style>
  3235. <style scoped>
  3236. :deep(.el-table td .cell) {
  3237. line-height: 20px !important;
  3238. }
  3239. :deep(.el-tabs__header){
  3240. margin-bottom: 0;
  3241. }
  3242. .search{
  3243. margin-left: 0px !important;
  3244. margin-right: 10px !important;
  3245. }
  3246. .bt{
  3247. margin-left: 2px !important;
  3248. padding: 3px !important;
  3249. font-size: 12px;
  3250. }
  3251. .el-tabs__header{
  3252. margin: 0px !important;
  3253. }
  3254. .gva-table-box{
  3255. padding: 0px !important;
  3256. }
  3257. .el-pagination{
  3258. margin-top: 0px !important;
  3259. }
  3260. /* .upload-demo .el-upload {
  3261. border: 1px dashed #d9d9d9;
  3262. border-radius: 6px;
  3263. cursor: pointer;
  3264. position: relative;
  3265. overflow: hidden;
  3266. }
  3267. .upload-demo .el-upload:hover {
  3268. border-color: #409EFF;
  3269. } */
  3270. .mab{
  3271. margin-bottom: 5px;
  3272. }
  3273. ::v-deep(.input_style .el-input__inner) {
  3274. font-size: 18px;
  3275. }
  3276. ::v-deep(.el-form-item__label) {
  3277. font-size: 18px;
  3278. }
  3279. ::v-deep(.el-upload-list--picture-card) {
  3280. margin-left: 100px;
  3281. }
  3282. ::v-deep(.el-checkbox__inner) {
  3283. width: 20px;
  3284. height: 20px;
  3285. }
  3286. ::v-deep(.el-checkbox__input.is-checked .el-checkbox__inner::after) {
  3287. top: 30%;
  3288. left: 30%;
  3289. }
  3290. ::v-deep(.el-descriptions__table tbody tr .is-bordered-label){
  3291. width: 40px;
  3292. }
  3293. ::v-deep(.el-descriptions__table tbody tr .el-descriptions__content){
  3294. width: 120px;
  3295. }
  3296. :deep(.el-descriptions__content) {
  3297. width: 80px !important;
  3298. min-width: 80px !important;
  3299. max-width: 100px !important;
  3300. overflow: hidden !important;
  3301. text-overflow: ellipsis !important;
  3302. }
  3303. </style>