shengchanpaichan.vue 91 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199
  1. <template>
  2. <div>
  3. <layout>
  4. <layout-header>
  5. <div class="">
  6. <!-- 按钮部分-->
  7. <el-form ref="elSearchFormRef" :model="searchInfo" class="demo-form-inline" :rules="searchRule" @keyup.enter="onSubmit">
  8. <el-form-item>
  9. <!--按钮-->
  10. <el-input v-model="searchInfo" placeholder="搜索" clearable style="width: 180px;"></el-input>
  11. <el-button type="primary" icon="search" @click="onSubmit" >查询</el-button>
  12. <!-- <el-button type="primary" title="设置工单的状态--【计划中】 【生产中】 【已完成】" icon="edit" @click="onStatusClick" class="bt">工单状态设置</el-button> -->
  13. <div v-if="(currentNode == '计划中') && treeType === 'customTree'">
  14. <el-button type="primary" title="排产" icon="edit" @click="ongxztgzClick" class="bt">排产</el-button>
  15. <!-- <el-button type="primary" title="修改" icon="edit" @click="pd_yysjcsonClick" class="bt">修改</el-button> -->
  16. </div>
  17. <div v-if="(currentNode == '制程中') && treeType === 'customTree'">
  18. <el-button type="primary" title="修改" icon="edit" @click="pd_yysjcsonClick" class="bt">修改</el-button>
  19. </div>
  20. <div v-if="(currentNode == '已完工') && treeType === 'customTree'">
  21. </div>
  22. <div v-else>
  23. </div>
  24. <el-button type="primary" title="打印生产工单" icon="edit" @click="pd_gdprintonClick" class="bt">订单打印</el-button>
  25. </el-form-item>
  26. </el-form>
  27. <!-- 状态设置【弹窗】-->
  28. <el-dialog v-model="onstatuslist" title="工单状态设置" width="30%" style="top: 15%">
  29. <div style="width: 100%;height: 100%;">
  30. <div style="width: 100%; display: flex; align-items: center;">
  31. <el-form-item label="工单编号 :" prop="currentProcess">
  32. <el-input v-model="statusformData['gdbh']" placeholder="" />
  33. </el-form-item>
  34. </div>
  35. <div style="width: 100%; display: flex; align-items: center; margin-top: 30px;">
  36. <span>状态设置:</span>
  37. <el-radio-group v-model="status" style="margin-left: 10px;">
  38. <el-radio label="计划中">计划中</el-radio>
  39. <el-radio label="生产中">生产中</el-radio>
  40. <el-radio label="已完工">已完工</el-radio>
  41. </el-radio-group>
  42. </div>
  43. <div class="dialog-footer" style="text-align: right; margin-top: 40px;">
  44. <el-button @click="handleCancel">取消</el-button>
  45. <el-button type="primary" @click="handleConfirm">确认</el-button>
  46. </div>
  47. </div>
  48. </el-dialog>
  49. <!-- 工序状态更正【弹窗】-->
  50. <el-dialog v-model="gxztgzzlist" title="工序状态更正" style="width: 100%;height: 100%;margin: 0px;padding: 0px">
  51. <el-button type="primary" @click="edit_gxztgzzCancel">更新时间</el-button>
  52. <el-button type="" @click="gxztgzzCancel">退出</el-button>
  53. <div style="width: 100%; height: 60px; padding: 0px; margin: 10px 0px 0px 0px; display: flex; align-items: center;">
  54. <el-form-item label="工单编号 :" prop="currentProcess" style="margin-right: 20px; padding: 0px">
  55. <el-input v-model="gxztgzzformData['gdbh']" @keyup.enter="gxztgzzgetProductValue" placeholder="" style="width: 200px;"/>
  56. </el-form-item>
  57. </div>
  58. <el-table ref="paichengRef"
  59. :show-overflow-tooltip="true"
  60. :row-style="{ height: '0px' }"
  61. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '0px' }"
  62. :header-cell-style="{ padding: '0px' }"
  63. style="width: 100%;height: 74vh" border tooltip-effect="dark"
  64. :data="gxztgzztableData" row-key="ID"
  65. :cell-class-name="gxztgzzCellClass">
  66. <template v-for="(item, idx) in gxztgzztableColumns">
  67. <el-table-column #default="{ row, column, $index }" align="left" :label="item.label" :width="item.width" >
  68. <!-- <div v-if="['完工时间'].includes(item.prop)">-->
  69. <!-- <el-input v-model="row[item.prop]"-->
  70. <!-- :id="`input${idx}${$index}`" @keyup="gxztgzz_handleKeyDown($event, idx, $index, item.prop)"/>-->
  71. <!-- </div>-->
  72. <div v-if="['完工时间'].includes(item.prop)">
  73. <el-date-picker
  74. v-model="row[item.prop]"
  75. type="datetime"
  76. :id="`datepicker${idx}${$index}`"
  77. placeholder="选择日期和时间">
  78. </el-date-picker>
  79. </div>
  80. <div v-else>{{ row[item.prop] }}</div>
  81. </el-table-column>
  82. </template>
  83. </el-table>
  84. </el-dialog>
  85. <!--机组调整【弹窗】-->
  86. <el-dialog v-model="jizuDisplay" title="机组调整" style="width: 600px;">
  87. <el-row class="">
  88. <el-col :span="18">
  89. <el-tree :data="jizuList"
  90. :props="{label:'label', value: 'value', chidlren: 'children'}"
  91. node-key="value"
  92. show-checkbox
  93. :default-expanded-keys="jizuList[0].value"
  94. @check="checkTreeHandle"
  95. style="margin-right: 10px; padding: 10px; border:-1px solid #ececec"></el-tree>
  96. </el-col>
  97. <el-col :span="6">
  98. <div><el-button type="primary" @click="saveJizuTiaozheng">确定</el-button></div>
  99. <div style="margin-top: 20px"><el-button @click="()=>jizuDisplay = false">取消</el-button> </div>
  100. </el-col>
  101. </el-row>
  102. </el-dialog>
  103. <!--车间设备排程【弹窗】-->
  104. <el-dialog v-model="cjsbpclist" title="车间设备制程排序" style="width: 100%;height: 100%;margin: 0px;padding: 0px">
  105. <el-button type="" @click="cjsbpcCancel">退出</el-button>
  106. <div style="width: 100%; height: 60px; padding: 0px; margin: 10px 0px 0px 0px; ">
  107. <div style="width: 100%; height: 60px; padding: 0px; display: flex; align-items: center;">
  108. <el-form-item label="设备代号 :" prop="currentProcess" style="margin-right: 20px; padding: 0px">
  109. <el-input v-model="cjsbpcformData['sbdh']" disabled placeholder="" />
  110. </el-form-item>
  111. <el-form-item label="班次选择:" prop="originalName" style="margin-left: 20px;">
  112. <el-select v-model="cjsbpcformData.banci" placeholder="请选择" style="width: 230px;" allow-create filterable @change="setBanci">
  113. <el-option
  114. v-for="(option, index) in cjsbpcformData.bancis"
  115. :key="index"
  116. :label="option.value"
  117. :value="option.value"
  118. >
  119. {{option.label}}
  120. </el-option>
  121. </el-select>
  122. </el-form-item>
  123. <el-form-item label="" prop="isBanciSelected" style="margin-left: 20px;">
  124. <el-checkbox v-model="cjsbpcformData.isBanciSelected">所有班次</el-checkbox>
  125. </el-form-item>
  126. <el-form-item label="" prop="" style="margin-left: 25px;">
  127. <el-button type="" icon="edit" @click="oneditpcClick">更新排程</el-button>
  128. </el-form-item>
  129. </div>
  130. <el-table ref="paichengRef"
  131. :show-overflow-tooltip="true"
  132. :row-style="{ height: '0px' }"
  133. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '0px' }"
  134. :header-cell-style="{ padding: '0px' }"
  135. style="width: 100%;height: 74vh" border tooltip-effect="dark"
  136. @row-click="cjpc_tableRowClick"
  137. :data="paichengData" row-key="ID"
  138. :cell-class-name="cjzcCellClass"
  139. >
  140. <!-- highlight-current-row="true"-->
  141. <template v-for="(item, idx) in paichengColumns">
  142. <el-table-column #default="{ row, column, $index }" align="left" :label="item.label" :width="item.width" >
  143. <div v-if="['优先次序', '小时产能', '生产工时', '辅助工时', '班次安排', '排单备注','最早开工时间', '计划开工时间'].includes(item.prop)">
  144. <el-input v-model="row[item.prop]"
  145. :id="`input${idx}${$index}`"
  146. @blur="handleBlur(item['label'], item)"
  147. @keyup="handleKeyDown($event, idx, $index, item.prop)"
  148. />
  149. <!-- <el-date-picker v-model="row[item.prop]" v-if="['最早开工时间', '计划开工时间'].includes(item.prop)" type="datetime" :clearable="false"-->
  150. <!-- :id="`input${idx}${$index}`"-->
  151. <!-- @keyup="handleKeyDown($event, idx, $index , item.prop)"-->
  152. <!-- />-->
  153. </div>
  154. <div v-else>
  155. {{ row[item.prop] }}
  156. </div>
  157. </el-table-column>
  158. </template>
  159. </el-table>
  160. </div>
  161. </el-dialog>
  162. <!--工序产量核查【弹窗】-->
  163. <el-dialog v-model="pd_gxclhclist" title="工序产量核查" style="width: 100%;height: 100%;margin: 0px;padding: 0px">
  164. <el-button type="" @click="gxclhcCancel">退出</el-button>
  165. <div style="width: 100%; height: 60px; padding: 0px; margin: 10px 0px 0px 0px; display: flex; align-items: center;">
  166. <div style="width: 100%; height: 60px; padding: 0px; display: flex; align-items: center;">
  167. <el-form-item label="工单编号" prop="currentProcess" style="margin-right: 20px; padding: 20px 0 0 0">
  168. <el-input v-model="gxclhcformData['gdbh']" @keyup.enter="gxclhcProductValue" placeholder="" />
  169. </el-form-item>
  170. 印件选择:
  171. <el-select v-model="gdwhformData.yjno" placeholder="请选择" allow-create filterable style="width: 100px; margin-right: 10px;">
  172. <el-option v-for="option in gdwhformData.yinjian" @click="ongdwhfanclick" :key="option" :label="option" :value="option" />
  173. </el-select>
  174. <el-input v-model="inputCpmc" readonly style="width: 50vw; margin-right: 10px;" />
  175. </div>
  176. </div>
  177. <el-table ref="paichengRef"
  178. :show-overflow-tooltip="true"
  179. :row-style="{ height: '0px' }"
  180. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '0px' }"
  181. :header-cell-style="{ padding: '0px' }"
  182. style="width: 100%;height: 70vh" border tooltip-effect="dark"
  183. highlight-current-row="true"
  184. @row-click="gxclhc_tableRowClick"
  185. :data="gxclhc_Data" row-key="ID"
  186. :cell-class-name="gxclhcCellClass"
  187. >
  188. <template v-for="(item, idx) in gxclhc_Columns">
  189. <el-table-column #default="{ row, column, $index }" align="left" :label="item.label" :width="item.width" >
  190. {{row[item.prop]}}
  191. </el-table-column>
  192. </template>
  193. </el-table>
  194. </el-dialog>
  195. <!--流程单查询【弹窗】-->
  196. <el-dialog v-model="pd_lcdlist" title="工单工序生产进程" style="width: 100%;height: 100%;margin: 0px;padding: 0px;">
  197. <div style="width: 100%;height: 100%;">
  198. <el-button type="" @click="pd_lcdCancel">退出</el-button>
  199. </div>
  200. <div style="width: 100%; height: 100%; display: flex; align-items: center;">
  201. <el-form-item label="工单编号" style="margin-right: 20px; padding: 0;">
  202. <el-input v-model="pd_lcdformData['gdbh']" @keyup.enter="pd_lcdProductValue"/>
  203. </el-form-item>
  204. <el-form-item label="印件号" style="margin-right: 5px; padding: 0;">
  205. <el-input v-model="pd_lcdformData['yjno']" @keyup.enter="pd_lcdProductValue"/>
  206. </el-form-item>
  207. <el-form-item label="" style="margin-right: 5px; padding: 0;">
  208. <el-input v-model="pd_lcdformData['code']" disabled/>
  209. </el-form-item>
  210. <el-form-item label="" style="margin-right: 5px; padding: 0;">
  211. <el-input v-model="pd_lcdformData['name']" disabled style="width: 500px"/>
  212. </el-form-item>
  213. </div>
  214. <div style="width: 100%; height: 70vh; display: flex;">
  215. <layout>
  216. <layout-sider :resize-directions="['right']" :width="240" style="margin-right: 10px;height: 70vh;">
  217. <div class="JKWTree-tree">
  218. <el-tree :data="pd_lcd_treeData" @node-click="pd_lcd_handleNodeClick" default-expand-all></el-tree>
  219. </div>
  220. </layout-sider>
  221. <layout-main>
  222. <!-- 这里放右侧的内容 -->
  223. <el-space wrap>
  224. <!-- 右侧内容 -->
  225. <template v-for="item in processList.total_process">
  226. <el-button disabled :type="! processList.process.includes(item) ? 'danger' : 'info'" plain style="width: 50px">{{ item }}</el-button>
  227. </template>
  228. </el-space>
  229. </layout-main>
  230. </layout>
  231. </div>
  232. </el-dialog>
  233. <!-- 排产-->
  234. <el-dialog v-model="add_gdyjdialogFormVisible" :before-close="add_gdyjcloseDialog" style="width: 50%;" :title="'车缝小烫排产'" destroy-on-close>
  235. <el-form label-width="100px" :model="add_yjzlformdata">
  236. <div style="display: flex; gap: 0px;">
  237. <el-form-item label="订单子编号:" class="mab" prop="keyOrder">
  238. <el-input v-model="add_yjzlformdata.ddzbh" style="width: 100px;margin-bottom: 12px; " id="ddzbh" @keydown="add_gdzlent($event, 'zzmc4', 'ddzbh', 'ys')"/>
  239. </el-form-item>
  240. <el-form-item label="颜色:" class="mab" prop="keyOrder">
  241. <el-input v-model="add_yjzlformdata.ys" style="width: 100px;margin-bottom: 12px;" id="ys" @keydown="add_gdzlent($event, 'ddzbh', 'ys', '尺码规格')"/>
  242. </el-form-item>
  243. <el-form-item label="尺码规格:" prop="joinDate" >
  244. <el-select v-model="add_yjzlformdata.cmgg" style="width: 150px;" id="尺码规格" @keydown="add_gdzlent($event, 'ys', '尺码规格', '工作中心')">
  245. <el-option label="32~46" value="32~46"></el-option>
  246. <el-option label="S~XXL" value="47~52"></el-option>
  247. </el-select>
  248. </el-form-item>
  249. <el-form-item label="工作中心:" prop="joinDate" >
  250. <el-select v-model="add_yjzlformdata.gzzx" style="width: 150px;" id="工作中心" @keydown="add_gdzlent($event, '尺码规格', '工作中心', 'zdsl')">
  251. <el-option label="二分厂" value="32~46"></el-option>
  252. <el-option label="大分厂" value="47~52"></el-option>
  253. </el-select>
  254. </el-form-item>
  255. </div>
  256. <div style="display: flex; gap: 0px;">
  257. <el-form-item label="尺码:" class="mab" prop="keyOrder">
  258. <el-input v-model="cmformdata.cm1" readonly style="width: 80px;"/>
  259. <el-input v-model="cmformdata.cm2" readonly style="width: 80px;"/>
  260. <el-input v-model="cmformdata.cm3" readonly style="width: 80px;"/>
  261. <el-input v-model="cmformdata.cm4" readonly style="width: 80px;"/>
  262. <el-input v-model="cmformdata.cm5" readonly style="width: 80px;"/>
  263. <el-input v-model="cmformdata.cm6" readonly style="width: 80px;"/>
  264. <el-input v-model="cmformdata.cm7" readonly style="width: 80px;"/>
  265. <el-input v-model="cmformdata.cm8" readonly style="width: 80px;"/>
  266. <el-input v-model="cmformdata.cm9" readonly style="width: 80px;"/>
  267. </el-form-item>
  268. </div>
  269. <div style="display: flex; gap: 0px;">
  270. <el-form-item label="制单数:" class="mab" prop="keyOrder">
  271. <el-input v-model="zdsformdata.zds1" style="width: 80px;" id="zdsl" @keydown="add_gdzlent($event, '工作中心', 'zdsl', 'zds2')"/>
  272. <el-input v-model="zdsformdata.zds2" style="width: 80px;" id="zds2" @keydown="add_gdzlent($event, 'zdsl', 'zds2', 'zds3')"/>
  273. <el-input v-model="zdsformdata.zds3" style="width: 80px;" id="zds3" @keydown="add_gdzlent($event, 'zds2', 'zds3', 'zds4')"/>
  274. <el-input v-model="zdsformdata.zds4" style="width: 80px;" id="zds4" @keydown="add_gdzlent($event, 'zds3', 'zds4', 'zds5')"/>
  275. <el-input v-model="zdsformdata.zds5" style="width: 80px;" id="zds5" @keydown="add_gdzlent($event, 'zds4', 'zds5', 'zds6')"/>
  276. <el-input v-model="zdsformdata.zds6" style="width: 80px;" id="zds6" @keydown="add_gdzlent($event, 'zds5', 'zds6', 'zds7')"/>
  277. <el-input v-model="zdsformdata.zds7" style="width: 80px;" id="zds7" @keydown="add_gdzlent($event, 'zds6', 'zds7', 'zds8')"/>
  278. <el-input v-model="zdsformdata.zds8" style="width: 80px;" id="zds8" @keydown="add_gdzlent($event, 'zds7', 'zds8', 'zds9')"/>
  279. <el-input v-model="zdsformdata.zds9" style="width: 80px;" id="zds9" @keydown="add_gdzlent($event, 'zds8', 'zds9', '车缝小烫小组1')"/>
  280. </el-form-item>
  281. </div>
  282. <!-- 图片 -->
  283. <div style="display: flex; gap: 0px;">
  284. <el-form-item label="上传图片:" prop="image" class="mab" label-width="100px">
  285. <el-upload ref="upload" class="avatar-uploader" :show-file-list="false" :before-upload="handlePreview" accept="image/*" >
  286. <img v-if="imageUrl" :src="imageUrl" class="avatar" />
  287. <div v-else class="upload-placeholder">
  288. <i class="el-icon-plus avatar-uploader-icon"></i>
  289. <div class="upload-text">点击上传图片</div>
  290. </div>
  291. </el-upload>
  292. </el-form-item>
  293. </div>
  294. <div style="display: flex; gap: 0px;margin-left:30px ;">
  295. <el-form-item label="车缝小烫小组:" prop="joinDate" ><br><br><br>
  296. <div style="margin-left:-105px;margin-top: 25px;">
  297. <el-select v-model="add_yjzlformdata.cfxtxz1" style="width: 120px;" id="车缝小烫小组1" @keydown="add_gdzlent($event, 'zds9', '车缝小烫小组1', '排产数量1')">
  298. <el-option label="服装厂1组" value="32~46"></el-option>
  299. <el-option label="服装厂11组" value="47~52" ></el-option>
  300. </el-select>
  301. <div >
  302. <el-select v-model="add_yjzlformdata.cfxtxz2" style="width: 120px;margin-top: 20px;" id="车缝小烫小组2" @keydown="add_gdzlent($event, '排产数量1', '车缝小烫小组2', '排产数量2')" >
  303. <el-option label="服装厂11组" value="32~46"></el-option>
  304. <el-option label="服装厂1组" value="47~52" ></el-option>
  305. </el-select>
  306. </div>
  307. </div>
  308. <el-form-item label="排产数量:" prop="joinDate" ><br><br><br>
  309. <div style="margin-left:-75px;margin-top: 25px;">
  310. <el-select v-model="add_yjzlformdata.pcsl1" style="width: 120px;" id="排产数量1" @keydown="add_gdzlent($event, '车缝小烫小组1', '排产数量1', '车缝小烫小组2')">
  311. <el-option label="50" value="32~46"></el-option>
  312. <el-option label="40" value="47~52" ></el-option>
  313. </el-select>
  314. <div >
  315. <el-select v-model="add_yjzlformdata.pcsl2" style="width: 120px;margin-top: 20px;" id="排产数量2" @keydown="add_gdzlent($event, '车缝小烫小组2', '排产数量2', 'ddzbh')">
  316. <el-option label="40" value="32~46"></el-option>
  317. <el-option label="50" value="47~52" ></el-option>
  318. </el-select>
  319. </div>
  320. </div>
  321. <el-form-item label="操作:" prop="joinDate" ><br><br><br>
  322. <div style="margin-left:-50px;margin-top: 25px;">
  323. <el-button type="primary" @click="aa" style="margin: 5px;width:40px" >+</el-button>
  324. <div >
  325. <el-button type="primary" @click="bb" style="margin: 5px;width:40px" >-</el-button>
  326. </div>
  327. </div>
  328. </el-form-item>
  329. </el-form-item>
  330. </el-form-item>
  331. </div>
  332. </el-form>
  333. <template #footer>
  334. <div class="dialog-footer" style="text-align: right;">
  335. <el-button @click="add_dyjcloseDialog">取消</el-button>
  336. <el-button type="primary" @click="add_gdyjenterDialog">保存</el-button>
  337. </div>
  338. </template>
  339. </el-dialog>
  340. </div>
  341. </layout-header>
  342. <!-- 左侧 -->
  343. <layout>
  344. <layout-sider :resize-directions="['right']" :width="190" style="margin-right: 10px;">
  345. <div class="JKWTree-tree" style="height: 200px">
  346. <el-tree :data="treeData" :props="defaultProps" class="treecolor" :current-node-key="currentNodeKey" @node-click="handleNodeClick"></el-tree>
  347. </div>
  348. </layout-sider>
  349. <layout-content>
  350. <el-main>
  351. <!-- customTree 排程 制程 dataTree // 计划中,排产中 ,dataTree 车间-->
  352. <div class="gva-table-box" v-if="treeType === 'customTree'">
  353. <el-table ref="multipleTable" style="width: 100%;height: 25vh"
  354. :row-style="{ height: '20px' }" :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  355. :header-cell-style="{ padding: '0px' }" border
  356. tooltip-effect="dark" :data="tableData" row-key="ID"
  357. :highlight-current-row="true" size="small" @row-click="gdtableRowClick"
  358. @selection-change="handleSelectionChange" :show-overflow-tooltip="true">
  359. <template v-for="item in tableFields[currentNode]">
  360. <el-table-column :align="item.align" :label="item.title" :fixed="item.fixed" :prop="item.prop" :width="item.width" :sortable="item.sortable" />
  361. </template>
  362. </el-table>
  363. <!-- 分页 -->
  364. <div class="gva-pagination" v-if="(currentNode == '计划中' || currentNode == '已完工') && treeType === 'customTree'">
  365. <el-pagination
  366. @size-change="jhz_handleSizeChange"
  367. @current-change="jhz_handleCurrentChange"
  368. :current-page="jhz_page"
  369. :page-sizes="[10,30,50,100]"
  370. :page-size="30"
  371. layout="total, sizes, prev, pager, next, jumper"
  372. :total="jhz_total">
  373. </el-pagination>
  374. </div>
  375. </div>
  376. <el-tabs v-model="activeName" @tab-click="handleClick" v-if="(currentNode == '计划中' || currentNode == '已完工') && treeType === 'customTree'">
  377. <el-tab-pane label="工艺资料" @click="showTable('工艺资料')" name="first">
  378. <el-table ref="multipleTable" :show-overflow-tooltip="true" :row-style="{ height: '20px' }"
  379. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  380. :header-cell-style="{ padding: '0px' }" highlight-current-row="true"
  381. style="width: 100%;height: 42vh" border tooltip-effect="dark" :data="gytableData" row-key="ID" @selection-change="handleSelectionChange">
  382. <el-table-column align="left" sortable label="工单编号" prop="工单编号" width="110"/>
  383. <el-table-column align="left" sortable label="重点工序" prop="重点工序" width="110"/>
  384. <el-table-column align="left" sortable label="印件工序及名称" prop="印件工序及名称" width="500"/>
  385. <el-table-column align="left" sortable label="工序备注" prop="工序备注" width="150"/>
  386. <el-table-column align="left" sortable label="机组" prop="机组" width="110"/>
  387. <el-table-column align="left" sortable label="小时产能" prop="小时产能" width="110"/>
  388. <el-table-column align="left" sortable label="生产工时" prop="生产工时" width="110"/>
  389. <el-table-column align="left" sortable label="辅助工时" prop="辅助工时" width="110"/>
  390. <el-table-column align="left" sortable label="印刷方式" prop="印刷方式" width="110"/>
  391. <el-table-column align="left" sortable label="版距" prop="版距" width="100"/>
  392. <el-table-column align="left" sortable label="创建用户" prop="创建用户" width="110"/>
  393. <el-table-column align="left" sortable label="创建时间" prop="创建时间" width="110"/>
  394. <el-table-column align="left" sortable label="修改时间" prop="修改时间" width="110"/>
  395. <el-table-column align="left" sortable label="UNIQID" prop="UNIQID" width="110"/>
  396. </el-table>
  397. </el-tab-pane>
  398. <el-tab-pane label="印件资料" @click="showTable('印件资料')" name="second">
  399. <el-table ref="multipleTable" :row-style="{ height: '20px' }"
  400. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  401. :header-cell-style="{ padding: '0px' }" :show-overflow-tooltip="true"
  402. :highlight-current-row="true"
  403. style="width: 100%;height: 42vh" border tooltip-effect="dark" :data="yjtableData" row-key="ID" @selection-change="handleSelectionChange">
  404. <el-table-column align="left" sortable label="工单编号" prop="工单编号" width="110"/>
  405. <el-table-column align="left" sortable label="印件号" prop="印件号" width="110"/>
  406. <el-table-column align="left" sortable label="印件代号" prop="印件代号" width="110"/>
  407. <el-table-column align="left" sortable label="印件名称" prop="印件名称" width="240"/>
  408. <el-table-column align="left" sortable label="纸张名称" prop="纸张名称" width="230"/>
  409. <el-table-column align="left" sortable label="投料规格" prop="投料规格" width="110"/>
  410. <el-table-column align="left" sortable label="成品数量" prop="成品数量" width="110"/>
  411. <el-table-column align="left" sortable label="实际投料" prop="实际投料" width="110"/>
  412. <el-table-column align="left" sortable label="投料单位" prop="投料单位" width="110"/>
  413. <el-table-column align="left" sortable label="平张投料" prop="平张投料" width="110"/>
  414. <el-table-column align="left" sortable label="联数" prop="联数" width="110"/>
  415. <el-table-column align="left" sortable label="开数" prop="开数" width="110"/>
  416. <el-table-column align="left" sortable label="创建用户" prop="创建用户" width="110"/>
  417. <el-table-column align="left" sortable label="创建时间" prop="创建时间" width="110"/>
  418. <el-table-column align="left" sortable label="修改时间" prop="修改时间" width="110"/>
  419. <el-table-column align="left" sortable label="UNIQID" prop="UNIQID" width="110"/>
  420. </el-table>
  421. </el-tab-pane>
  422. </el-tabs>
  423. <div v-if="treeType === 'customTree'">
  424. <el-table ref="multipleTable2"
  425. v-if="['排程中', '制程中'].includes(currentNode)"
  426. :show-overflow-tooltip="true" :row-style="{ height: '20px' }"
  427. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  428. :header-cell-style="{ padding: '0px' }" :highlight-current-row="true"
  429. :cell-class-name="pczc_planUsageCellClass"
  430. style="width: 100%;height: 42vh" border tooltip-effect="dark" :data="bottomData" row-key="ID" @selection-change="handleSelectionChange">
  431. <template v-for="item in bottomTableF[currentNode]">
  432. <el-table-column :align="item.align" :label="item.title" :fixed="item.fixed" :prop="item.prop" :width="item.width" :sortable="item.sortable" />
  433. </template>
  434. </el-table>
  435. </div>
  436. <div v-if="treeType === 'dataTree'">
  437. <el-table ref="chejianRef"
  438. :show-overflow-tooltip="true" :row-style="{ height: '20px' }"
  439. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  440. :header-cell-style="{ padding: '0px' }" :highlight-current-row="true" @row-click="chejianRowClick"
  441. style="width: 100%;height: 80vh" border tooltip-effect="dark" :data="chejianData" row-key="ID" @selection-change="PC_handleChange"
  442. >
  443. <!-- 车缝小烫车间列表-->
  444. <el-table-column type="selection" width="30" />
  445. <template v-for="item in [
  446. { align:'left', title:'序号', prop: '序号', width: 80, sortable: 'sortable',fixed:'fixed', },
  447. { align:'left', title:'订单编号', prop: '订单编号', width: 110, sortable: 'sortable', },
  448. { align:'left', title: '生产款号', prop: '款号', width: 120, sortable: 'sortable', },
  449. { align:'left', title: '订单子编号', prop: '子订单编号', width: 120, sortable: 'sortable', },
  450. { align:'left', title: '颜色', prop: '颜色', width: 80, sortable: 'sortable', },
  451. { align:'left', title: '制单总数', prop: '制单数', width: 110, sortable: 'sortable', },
  452. { align:'left', title: '排产数量', prop: '排产数量', width: 110, sortable: 'sortable', },
  453. { align:'left', title: '工作中心', prop: '工作中心', width: 110, sortable: 'sortable', },
  454. { align:'left', title: '部门', prop: '部门', width: 100, sortable: 'sortable', },
  455. { align:'left', title: '客户', prop: '客户', width: 80, sortable: 'sortable', },
  456. { align:'left', title: '落货日期', prop: '落货日期', width: 110, sortable: 'sortable', },
  457. { align:'left', title: '款式', prop: '款式', width: 80, align:'center', sortable: 'sortable', },
  458. { align:'left', title: '箱唛要求', prop: '箱唛要求', width: 110, sortable: 'sortable', },
  459. { align:'left', title: '面料', prop: '面料', width: 280, sortable: 'sortable', },
  460. { align:'left', title: '要求', prop: '要求', width: 110, sortable: 'sortable', },
  461. { align:'left', title: '船样描述', prop: '船样描述', width: 110, sortable: 'sortable', },
  462. { align:'left', title: '船样合计', prop: '船样合计', width: 110, sortable: 'sortable', },
  463. { align:'left', title: '粘衬', prop: '粘衬', width: 100 , sortable: 'sortable', },
  464. { align:'left', title: '订单数量', prop: '订单数量', width: 110, sortable: 'sortable', },
  465. { align:'left', title: '单位', prop: '单位', width: 80, sortable: 'sortable', },
  466. { align:'left', title: '审核', prop: '审核', width: 80, sortable: 'sortable', },
  467. { align:'left', title: '审核日期', prop: '审核日期', width: 110, sortable: 'sortable', },
  468. { align:'left', title: '排产时间', prop: '排产时间', width: 110, sortable: 'sortable', },
  469. { align:'left', title: '排产人', prop: '排产人', width: 120, sortable: 'sortable', },
  470. ]">
  471. <el-table-column :align="item.align" :label="item.title" :fixed="item.fixed" :prop="item.prop" :width="item.width" :sortable="item.sortable" />
  472. </template>
  473. </el-table>
  474. </div>
  475. </el-main>
  476. </layout-content>
  477. </layout>
  478. </layout>
  479. <PrintPage ref="printPageRef" />
  480. </div>
  481. </template>
  482. <script>
  483. //点击按钮显示下方表格
  484. export default {
  485. data() {
  486. return {
  487. currentTable: '',
  488. activeName: 'first',
  489. // 其他表格数据...
  490. };
  491. },
  492. methods: {
  493. showTable(tableName) {
  494. // 根据点击的按钮设置当前展示的表格
  495. this.currentTable = tableName;
  496. },
  497. showTableChange() {
  498. // 处理表格选中事件
  499. },
  500. // 图片
  501. handlePreview(file) {
  502. const reader = new FileReader();
  503. reader.onload = (e) => {
  504. this.imageUrl = e.target.result; // 将选择的图片显示在页面上
  505. };
  506. reader.readAsDataURL(file); // 将文件读为Data URL
  507. return false; // 阻止文件的默认上传行为
  508. },
  509. }
  510. };
  511. </script>
  512. <script setup>
  513. // 全量引入格式化工具 请按需保留
  514. import { Layout, LayoutSider, LayoutContent } from '@arco-design/web-vue';
  515. import {createCompany, deleteCompany, deleteCompanyByIds, updateCompany, findCompany, getCompanyList} from '@/api/company'
  516. import { getDictFunc, formatDate, formatBoolean, filterDict, ReturnArrImg, onDownloadFile } from '@/utils/format'
  517. import { ElMessage, ElMessageBox } from 'element-plus'
  518. import { ref, reactive,onMounted } from 'vue'
  519. import dayjs from 'dayjs'
  520. import {MachineList,MachineDetail} from '@/api/mes/job'
  521. import {
  522. DataList,
  523. getProduct,
  524. getProductData,
  525. scheduleProcess,
  526. ProductionSchedulingAdd,
  527. Project,
  528. StatusEdit,
  529. EquipmentScheduling,
  530. ScheduleSelection,
  531. MachineWorkOrderList,
  532. projectCraft,
  533. ProcessStatusCorrection,
  534. ProductionSchedulingPause,
  535. ProcessStatusCorrectionEdit,
  536. projectPrint,
  537. setProductStatus,
  538. workbench,
  539. ProcessFlow,
  540. Schedule,
  541. complete,
  542. getOrderProcessCount,
  543. getOrderProcessLeft,
  544. getOrderProcessRight,
  545. EquipmentSchedulingEdit,
  546. MachineTeamEdit,
  547. PrintDetailList
  548. } from "@/api/yunyin/yunying";
  549. import PrintPage from './components/print.vue'
  550. defineOptions({name: 'Company'})
  551. const printPageRef = ref()
  552. // =========== 左侧树侧形结构 ===========
  553. const sctreeData = ref([
  554. {
  555. label: '排产进程',
  556. children:[
  557. {label: '1.计划中工单', number: "计划中", type: '__customer'},
  558. //{label: '2.排程中工单', number: "排程中",type: '__customer'},
  559. {label: '2.制程中工单', number: "制程中", type: '__customer'},
  560. {label: '3.已完工工单', number: "已完工", type: '__customer'}
  561. ],
  562. }
  563. ]);
  564. //上方表格
  565. const tableFields = ref({
  566. "计划中": [
  567. { title:'序号', prop: '序号', width: 80, align:'center',sortable: 'sortable', },
  568. { title:'订单号', prop: '订单号', width: 100, align:'left',sortable: 'sortable', },
  569. { title: '生产款号', prop: '生产款号', width: 100, align:'center', sortable: 'sortable', },
  570. { title: '订单子编号', prop: '订单子编号', width: 120, align:'center', sortable: 'sortable', },
  571. { title: '颜色', prop: '颜色', width: 80, align:'left', sortable: 'sortable', },
  572. { title: '制单总数', prop: '制单总数', width: 100, align:'left', sortable: 'sortable', },
  573. { title: '工作中心', prop: '工作中心', width: 100, align:'left', sortable: 'sortable', },
  574. { title: '部门', prop: '部门', width: 80, align:'left', sortable: 'sortable', },
  575. { title: '客户', prop: '客户', width: 80, align:'center', sortable: 'sortable', },
  576. { title: '落货日期', prop: '落货日期', width: 100, align:'left', sortable: 'sortable', },
  577. { title: '款式', prop: '款式', width: 80, align:'center', sortable: 'sortable', },
  578. { title: '箱唛要求', prop: '箱唛要求', width: 100, align:'left', sortable: 'sortable', },
  579. { title: '面料', prop: '面料', width: 280, align:'left', sortable: 'sortable', },
  580. { title: '要求', prop: '要求', width: 80, align:'left', sortable: 'sortable', },
  581. { title: '船样描述', prop: '船样描述', width: 100, align:'left', sortable: 'sortable', },
  582. { title: '船样合计', prop: '船样合计', width: 100, align:'left', sortable: 'sortable', },
  583. { title: '粘衬', prop: '粘衬', width: 80 , align:'left', sortable: 'sortable', },
  584. { title: '订单数量', prop: '订单数量', width: 100, align:'left', sortable: 'sortable', },
  585. { title: '单位', prop: '单位', width: 80, align:'left', sortable: 'sortable', },
  586. { title: '审核', prop: '审核', width: 80, align:'left', sortable: 'sortable', },
  587. { title: '审核日期', prop: '审核日期', width: 100, align:'left', sortable: 'sortable', },
  588. ],
  589. "制程中": [
  590. { title:'序号', prop: '序号', width: 80, align:'center',sortable: 'sortable', },
  591. { title:'订单号', prop: '订单号', width: 100, align:'left',sortable: 'sortable', },
  592. { title: '生产款号', prop: '生产款号', width: 100, align:'center', sortable: 'sortable', },
  593. { title: '订单子编号', prop: '订单子编号', width: 120, align:'center', sortable: 'sortable', },
  594. { title: '颜色', prop: '颜色', width: 80, align:'left', sortable: 'sortable', },
  595. { title: '制单总数', prop: '制单总数', width: 100, align:'left', sortable: 'sortable', },
  596. { title: '排产数量', prop: '排产数量', width: 100, align:'left', sortable: 'sortable', },
  597. { title: '工作中心', prop: '工作中心', width: 100, align:'left', sortable: 'sortable', },
  598. { title: '部门', prop: '部门', width: 80, align:'left', sortable: 'sortable', },
  599. { title: '客户', prop: '客户', width: 80, align:'center', sortable: 'sortable', },
  600. { title: '落货日期', prop: '落货日期', width: 100, align:'left', sortable: 'sortable', },
  601. { title: '款式', prop: '款式', width: 80, align:'center', sortable: 'sortable', },
  602. { title: '箱唛要求', prop: '箱唛要求', width: 100, align:'left', sortable: 'sortable', },
  603. { title: '面料', prop: '面料', width: 280, align:'left', sortable: 'sortable', },
  604. { title: '要求', prop: '要求', width: 80, align:'left', sortable: 'sortable', },
  605. { title: '船样描述', prop: '船样描述', width: 100, align:'left', sortable: 'sortable', },
  606. { title: '船样合计', prop: '船样合计', width: 100, align:'left', sortable: 'sortable', },
  607. { title: '粘衬', prop: '粘衬', width: 80 , align:'left', sortable: 'sortable', },
  608. { title: '订单数量', prop: '订单数量', width: 100, align:'left', sortable: 'sortable', },
  609. { title: '单位', prop: '单位', width: 80, align:'left', sortable: 'sortable', },
  610. { title: '审核', prop: '审核', width: 80, align:'left', sortable: 'sortable', },
  611. { title: '审核日期', prop: '审核日期', width: 100, align:'left', sortable: 'sortable', },
  612. { title: '排产时间', prop: '排产时间', width: 100, align:'left', sortable: 'sortable', },
  613. { title: '排产人', prop: '排产人', width: 120, align:'left', sortable: 'sortable', },
  614. ],
  615. "已完工": [
  616. { title:'序号', prop: '序号', width: 80, align:'center',sortable: 'sortable', },
  617. { title:'订单号', prop: '订单号', width: 100, align:'left',sortable: 'sortable', },
  618. { title: '生产款号', prop: '生产款号', width: 100, align:'center', sortable: 'sortable', },
  619. { title: '订单子编号', prop: '订单子编号', width: 120, align:'center', sortable: 'sortable', },
  620. { title: '颜色', prop: '颜色', width: 80, align:'left', sortable: 'sortable', },
  621. { title: '制单总数', prop: '制单总数', width: 100, align:'left', sortable: 'sortable', },
  622. { title: '排产数量', prop: '排产数量', width: 100, align:'left', sortable: 'sortable', },
  623. { title: '完工数量', prop: '完工数量', width: 100, align:'left', sortable: 'sortable', },
  624. { title: '工作中心', prop: '工作中心', width: 100, align:'left', sortable: 'sortable', },
  625. { title: '部门', prop: '部门', width: 80, align:'left', sortable: 'sortable', },
  626. { title: '客户', prop: '客户', width: 80, align:'center', sortable: 'sortable', },
  627. { title: '落货日期', prop: '落货日期', width: 100, align:'left', sortable: 'sortable', },
  628. { title: '款式', prop: '款式', width: 80, align:'center', sortable: 'sortable', },
  629. { title: '箱唛要求', prop: '箱唛要求', width: 100, align:'left', sortable: 'sortable', },
  630. { title: '面料', prop: '面料', width: 280, align:'left', sortable: 'sortable', },
  631. { title: '要求', prop: '要求', width: 80, align:'left', sortable: 'sortable', },
  632. { title: '船样描述', prop: '船样描述', width: 100, align:'left', sortable: 'sortable', },
  633. { title: '船样合计', prop: '船样合计', width: 100, align:'left', sortable: 'sortable', },
  634. { title: '粘衬', prop: '粘衬', width: 80 , align:'left', sortable: 'sortable', },
  635. { title: '订单数量', prop: '订单数量', width: 100, align:'left', sortable: 'sortable', },
  636. { title: '单位', prop: '单位', width: 80, align:'left', sortable: 'sortable', },
  637. { title: '审核', prop: '审核', width: 80, align:'left', sortable: 'sortable', },
  638. { title: '审核日期', prop: '审核日期', width: 100, align:'left', sortable: 'sortable', },
  639. { title: '排产时间', prop: '排产时间', width: 100, align:'left', sortable: 'sortable', },
  640. { title: '排产人', prop: '排产人', width: 120, align:'left', sortable: 'sortable', },
  641. { title: '完工时间', prop: '完工时间', width: 100, align:'left', sortable: 'sortable', },
  642. ]
  643. })
  644. //排程中、制程中下方表格列表
  645. const bottomTableF = ref({
  646. "排程中": [
  647. { title:'工单编号', prop: '工单编号', width: 110, align:'left', sortable: 'sortable',fixed:'fixed'},
  648. { title:'印件工序及名称', prop: '印件工序及名称', width: 160, align:'left', sortable: 'sortable', },
  649. { title:'机组', prop: '机组', width: 120, align:'left', sortable: 'sortable', },
  650. { title:'设备编号', prop: '设备编号', width: 120, align:'left', sortable: 'sortable', },
  651. { title:'工序产量', prop: '工序产量', width: 120, align:'left', sortable: 'sortable', },
  652. { title:'已完成产量', prop: '产量', width: 120, align:'left', sortable: 'sortable', },
  653. { title:'剩余产量', prop: '剩余产量', width: 120, align:'left', sortable: 'sortable', },
  654. { title:'小时产能', prop: '小时产能', width: 120, align:'left', sortable: 'sortable', },
  655. { title:'产能系数', prop: '产能系数', width: 120, align:'left', sortable: 'sortable', },
  656. { title:'生产工时', prop: '生产工时', width: 120, align:'left', sortable: 'sortable', },
  657. { title:'辅助工时', prop: '辅助工时', width: 120, align:'left', sortable: 'sortable', },
  658. { title:'最早开工时间', prop: '最早开工时间', width: 120, align:'left', sortable: 'sortable', },
  659. { title:'计划开工时间', prop: '计划开工时间', width: 120, align:'left', sortable: 'sortable', },
  660. { title:'计划完工时间', prop: '计划完工时间', width: 120, align:'left', sortable: 'sortable', },
  661. { title:'班次安排', prop: '班次安排', width: 120, align:'left', sortable: 'sortable', },
  662. { title:'设备名称', prop: '设备名称', width: 120, align:'left', sortable: 'sortable', },
  663. { title:'排单备注', prop: '排单备注', width: 120, align:'left', sortable: 'sortable', },
  664. { title:'工序完工', prop: '工序完工', width: 160, align:'left', sortable: 'sortable', },
  665. { title:'UNIQID', prop: 'UNIQID', width: 120, align:'left', sortable: 'sortable', },
  666. ],
  667. "制程中": [
  668. { title:'工单编号', prop: '工单编号', width: 110, align:'left', sortable: 'sortable',fixed:'fixed'},
  669. { title:'印件工序及名称', prop: '印件工序及名称', width: 160, align:'left', sortable: 'sortable', },
  670. { title:'机组', prop: '机组', width: 120, align:'left', sortable: 'sortable', },
  671. { title:'设备编号', prop: '设备编号', width: 120, align:'left', sortable: 'sortable', },
  672. { title:'工序产量', prop: '工序产量', width: 120, align:'left', sortable: 'sortable', },
  673. { title:'已完成产量', prop: '产量', width: 120, align:'left', sortable: 'sortable', },
  674. { title:'剩余产量', prop: '剩余产量', width: 120, align:'left', sortable: 'sortable', },
  675. { title:'小时产能', prop: '小时产能', width: 120, align:'left', sortable: 'sortable', },
  676. { title:'产能系数', prop: '产能系数', width: 120, align:'left', sortable: 'sortable', },
  677. { title:'生产工时', prop: '生产工时', width: 120, align:'left', sortable: 'sortable', },
  678. { title:'辅助工时', prop: '辅助工时', width: 120, align:'left', sortable: 'sortable', },
  679. { title:'最早开工时间', prop: '最早开工时间', width: 120, align:'left', sortable: 'sortable', },
  680. { title:'计划开工时间', prop: '计划开工时间', width: 120, align:'left', sortable: 'sortable', },
  681. { title:'计划完工时间', prop: '计划完工时间', width: 120, align:'left', sortable: 'sortable', },
  682. { title:'班次安排', prop: '班次安排', width: 120, align:'left', sortable: 'sortable', },
  683. { title:'设备名称', prop: '设备名称', width: 120, align:'left', sortable: 'sortable', },
  684. { title:'排单备注', prop: '排单备注', width: 120, align:'left', sortable: 'sortable', },
  685. { title:'工序完工', prop: '工序完工', width: 160, align:'left', sortable: 'sortable', },
  686. { title:'UNIQID', prop: 'UNIQID', width: 120, align:'left', sortable: 'sortable', },
  687. ],
  688. })
  689. //左侧左边栏
  690. const treeData = ref([]);
  691. const machineLists = ref([]);
  692. async function fetchMachineLists() {
  693. try {
  694. const response = await MachineList();
  695. machineLists.value = response;
  696. } catch (error) {
  697. console.error('Failed to fetch machine lists:', error);
  698. }
  699. }
  700. // 车间侧边栏 进入页面自动加载【车间】数据
  701. async function workbenchdata() {
  702. await fetchMachineLists(); // 首先获取车间列表
  703. if (machineLists.value && machineLists.value.data && machineLists.value.data.length > 0) {
  704. const data = [
  705. {
  706. label: '车缝小烫车间',
  707. children: machineLists.value.data.map(machineId => ({
  708. label: machineId,
  709. })),
  710. }
  711. ];
  712. treeData.value = data;
  713. treeData.value.unshift(sctreeData.value[0])
  714. } else {
  715. console.log('No machine lists found.');
  716. }
  717. }
  718. // 在组件挂载时调用 workbenchdata
  719. onMounted(workbenchdata);
  720. //全局获取工单编号
  721. const _Gd_gdbh = ref(null)
  722. const _Gd_yjno = ref(null)
  723. //点击表格 通过上方表格【工单编号】获取下方表格数据
  724. const chejianRowClick = async (row) => {
  725. _Gd_gdbh.value = row.订单号;
  726. _Gd_yjno.value = row.yjno;
  727. }
  728. const gdtableRowClick = async (row) => {
  729. _Gd_gdbh.value = row.订单号
  730. };
  731. //点击左侧树形获取侧边栏列表数据
  732. // const tableData = ref([]);
  733. const tableData = reactive([])
  734. const chejianData = reactive([])
  735. const _machine = ref(null);
  736. const treeType = ref('customTree') // customTree // 计划中,排产中 ,dataTree 车间
  737. const handleNodeClick = async (node) => {
  738. // 取消所有节点的颜色
  739. const allNodes = document.querySelectorAll('.treecolor .el-tree-node');
  740. allNodes.forEach(node => {
  741. node.querySelector('.el-tree-node__label').style.color = '';
  742. });
  743. // 获取点击的节点
  744. const clickedNodeId = node['$treeNodeId'];
  745. const clickedNode = document.querySelector(`.treecolor .el-tree-node[data-key="${clickedNodeId}"]`);
  746. if (clickedNode) {
  747. // 给当前点击的节点改变颜色
  748. clickedNode.querySelector('.el-tree-node__label').style.color = 'red';
  749. }
  750. console.log(123456)
  751. console.log(node.type)
  752. if (node.type && node.type === '__customer') {
  753. treeType.value = 'customTree'
  754. schandleNodeClick(node)
  755. } else if (!node.children) {
  756. treeType.value = 'dataTree'
  757. const MachineDetailtable = await MachineDetail({machine:node.label});
  758. console.log(99999,MachineDetailtable)
  759. const cjData = MachineDetailtable.data
  760. console.log(cjData)
  761. chejianData.splice(0,chejianData.length,...cjData);//表格数据
  762. }
  763. };
  764. //默认显示计划中表格
  765. const currentNode = ref("计划中")
  766. //计划中、已完工下方印件资料
  767. const yjtableData = ref([])
  768. //计划中、已完工下方工艺资料
  769. const gytableData = ref([])
  770. //排程中、制程中下方表格
  771. const bottomData = ref([])
  772. //车间机台制程列表
  773. const chejianfuData = ref([])
  774. //点击侧边栏获取参数
  775. const _cname = ref(null)
  776. //工单侧边栏 设备定额及分配参数设置
  777. const schandleNodeClick = async (node) => {
  778. currentNode.value = node.number
  779. bottomData.value = []
  780. yjtableData.value = []
  781. gytableData.value = []
  782. console.log(node.number)
  783. switch (node.number) {
  784. case "计划中":
  785. const jhz_Projectdata = [
  786. {
  787. '序号':'1',
  788. '订单号':'2408001',
  789. '生产款号':'2403-1622款',
  790. '订单子编号':'2408001-1',
  791. '颜色':'红色',
  792. '制单总数':'90',
  793. '工作中心':'--',
  794. '部门':'--',
  795. '客户':'DC-7',
  796. '落货日期':'2024/7/20',
  797. '款式':'连衣裙',
  798. '箱唛要求':'折箱装修',
  799. '面料':'面布:乱麻复合布;拼布:AZ666雪纺…',
  800. '要求':'',
  801. '船样描述':'',
  802. '船样合计':'4',
  803. '粘衬':'',
  804. '订单数量':'174',
  805. '单位':'件',
  806. '审核':'裘志江',
  807. '审核日期':'2024/6/27',
  808. },
  809. {
  810. '序号':'2',
  811. '订单号':'2408001',
  812. '生产款号':'2403-1623款',
  813. '订单子编号':'2408001-2',
  814. '颜色':'蓝色',
  815. '制单总数':'80',
  816. '工作中心':'--',
  817. '部门':'--',
  818. '客户':'DC-7',
  819. '落货日期':'2024/7/20',
  820. '款式':'长袖',
  821. '箱唛要求':'折箱装修',
  822. '面料':'面布:乱麻复合布;拼布:AZ666雪纺…',
  823. '要求':'',
  824. '船样描述':'',
  825. '船样合计':'4',
  826. '粘衬':'',
  827. '订单数量':'174',
  828. '单位':'件',
  829. '审核':'裘志江',
  830. '审核日期':'2024/6/27',
  831. },
  832. {
  833. '序号':'3',
  834. '订单号':'2408001',
  835. '生产款号':'2403-1623款',
  836. '订单子编号':'2408001-2',
  837. '颜色':'蓝色',
  838. '制单总数':'80',
  839. '工作中心':'--',
  840. '部门':'--',
  841. '客户':'DC-7',
  842. '落货日期':'2024/7/20',
  843. '款式':'长袖',
  844. '箱唛要求':'折箱装修',
  845. '面料':'面布:乱麻复合布;拼布:AZ666雪纺…',
  846. '要求':'',
  847. '船样描述':'',
  848. '船样合计':'4',
  849. '粘衬':'',
  850. '订单数量':'174',
  851. '单位':'件',
  852. '审核':'裘志江',
  853. '审核日期':'2024/6/27',
  854. },
  855. {
  856. '序号':'4',
  857. '订单号':'2408001',
  858. '生产款号':'2403-1623款',
  859. '订单子编号':'2408001-2',
  860. '颜色':'蓝色',
  861. '制单总数':'80',
  862. '工作中心':'--',
  863. '部门':'--',
  864. '客户':'DC-7',
  865. '落货日期':'2024/7/20',
  866. '款式':'长袖',
  867. '箱唛要求':'折箱装修',
  868. '面料':'面布:乱麻复合布;拼布:AZ666雪纺…',
  869. '要求':'',
  870. '船样描述':'',
  871. '船样合计':'4',
  872. '粘衬':'',
  873. '订单数量':'174',
  874. '单位':'件',
  875. '审核':'裘志江',
  876. '审核日期':'2024/6/27',
  877. },
  878. ];
  879. console.log(jhz_Projectdata)
  880. tableData.splice(0,tableData.length,...jhz_Projectdata);//表格数据
  881. _cname.value = '计划中';
  882. // _jhz_Projectdata_page();
  883. break;
  884. // case "排程中":
  885. // const pc_Schedule = await Schedule({status:currentNode.value,search:''});
  886. // tableData.value = pc_Schedule.data;
  887. // break;
  888. case "制程中":
  889. // const zc_Schedule = await Schedule({status:currentNode.value,search:''});
  890. const zcz_Projectdata = [
  891. {
  892. '序号':'1',
  893. '订单号':'2408001',
  894. '生产款号':'2403-1622款',
  895. '订单子编号':'2408001-1',
  896. '颜色':'红色',
  897. '制单总数':'90',
  898. '排产数量':'50',
  899. '工作中心':'二分厂',
  900. '部门':'服装厂11组',
  901. '客户':'DC-7',
  902. '落货日期':'2024/7/20',
  903. '款式':'连衣裙',
  904. '箱唛要求':'折箱装修',
  905. '面料':'面布:乱麻复合布;拼布:AZ666雪纺…',
  906. '要求':'',
  907. '船样描述':'',
  908. '船样合计':'4',
  909. '粘衬':'',
  910. '订单数量':'174',
  911. '单位':'件',
  912. '审核':'裘志江',
  913. '审核日期':'2024/6/27',
  914. '排产时间':'2024-8-14 12:00',
  915. '排产人':'车间主任xxx',
  916. },
  917. {
  918. '序号':'2',
  919. '订单号':'2408001',
  920. '生产款号':'2403-1622款',
  921. '订单子编号':'2408001-1',
  922. '颜色':'红色',
  923. '制单总数':'90',
  924. '排产数量':'40',
  925. '工作中心':'二分厂',
  926. '部门':'服装厂1组',
  927. '客户':'DC-7',
  928. '落货日期':'2024/7/20',
  929. '款式':'连衣裙',
  930. '箱唛要求':'折箱装修',
  931. '面料':'面布:乱麻复合布;拼布:AZ666雪纺…',
  932. '要求':'',
  933. '船样描述':'',
  934. '船样合计':'4',
  935. '粘衬':'',
  936. '订单数量':'174',
  937. '单位':'件',
  938. '审核':'裘志江',
  939. '审核日期':'2024/6/27',
  940. '排产时间':'2024-8-14 12:00',
  941. '排产人':'车间主任xxx',
  942. },
  943. {
  944. '序号':'3',
  945. '订单号':'2408001',
  946. '生产款号':'2403-1623款',
  947. '订单子编号':'2408001-2',
  948. '颜色':'蓝色',
  949. '制单总数':'80',
  950. '排产数量':'80',
  951. '工作中心':'二分厂',
  952. '部门':'服装厂12组',
  953. '客户':'DC-7',
  954. '落货日期':'2024/7/20',
  955. '款式':'连衣裙',
  956. '箱唛要求':'折箱装修',
  957. '面料':'面布:乱麻复合布;拼布:AZ666雪纺…',
  958. '要求':'',
  959. '船样描述':'',
  960. '船样合计':'4',
  961. '粘衬':'',
  962. '订单数量':'174',
  963. '单位':'件',
  964. '审核':'裘志江',
  965. '审核日期':'2024/6/27',
  966. '排产时间':'2024-8-14 12:00',
  967. '排产人':'车间主任xxx',
  968. },
  969. ];
  970. console.log(zcz_Projectdata)
  971. tableData.splice(0,tableData.length,...zcz_Projectdata);//表格数据
  972. _cname.value = '制程中';
  973. break;
  974. case "已完工":
  975. const ywg_Projectdata = [
  976. {
  977. '序号':'1',
  978. '订单号':'2408001',
  979. '生产款号':'2403-1622款',
  980. '订单子编号':'2408001-1',
  981. '颜色':'红色',
  982. '制单总数':'90',
  983. '排产数量':'50',
  984. '完工数量':'50',
  985. '工作中心':'二分厂',
  986. '部门':'服装厂11组',
  987. '客户':'DC-7',
  988. '落货日期':'2024/7/20',
  989. '款式':'连衣裙',
  990. '箱唛要求':'折箱装修',
  991. '面料':'面布:乱麻复合布;拼布:AZ666雪纺…',
  992. '要求':'',
  993. '船样描述':'',
  994. '船样合计':'4',
  995. '粘衬':'',
  996. '订单数量':'174',
  997. '单位':'件',
  998. '审核':'裘志江',
  999. '审核日期':'2024/6/27',
  1000. '排产时间':'2024-8-10 12:00',
  1001. '排产人':'车间主任xxx',
  1002. '完工时间':'2024-8-14 12:00',
  1003. },
  1004. {
  1005. '序号':'2',
  1006. '订单号':'2408001',
  1007. '生产款号':'2403-1622款',
  1008. '订单子编号':'2408001-1',
  1009. '颜色':'红色',
  1010. '制单总数':'90',
  1011. '排产数量':'40',
  1012. '完工数量':'40',
  1013. '工作中心':'二分厂',
  1014. '部门':'服装厂1组',
  1015. '客户':'DC-7',
  1016. '落货日期':'2024/7/20',
  1017. '款式':'连衣裙',
  1018. '箱唛要求':'折箱装修',
  1019. '面料':'面布:乱麻复合布;拼布:AZ666雪纺…',
  1020. '要求':'',
  1021. '船样描述':'',
  1022. '船样合计':'4',
  1023. '粘衬':'',
  1024. '订单数量':'174',
  1025. '单位':'件',
  1026. '审核':'裘志江',
  1027. '审核日期':'2024/6/27',
  1028. '排产时间':'2024-8-10 12:00',
  1029. '排产人':'车间主任xxx',
  1030. '完工时间':'2024-8-14 12:00',
  1031. },
  1032. {
  1033. '序号':'3',
  1034. '订单号':'2408001',
  1035. '生产款号':'2403-1622款',
  1036. '订单子编号':'2408001-2',
  1037. '颜色':'黑色',
  1038. '制单总数':'80',
  1039. '排产数量':'80',
  1040. '完工数量':'80',
  1041. '工作中心':'二分厂',
  1042. '部门':'服装厂12组',
  1043. '客户':'DC-7',
  1044. '落货日期':'2024/7/20',
  1045. '款式':'连衣裙',
  1046. '箱唛要求':'折箱装修',
  1047. '面料':'面布:乱麻复合布;拼布:AZ666雪纺…',
  1048. '要求':'',
  1049. '船样描述':'',
  1050. '船样合计':'4',
  1051. '粘衬':'',
  1052. '订单数量':'174',
  1053. '单位':'件',
  1054. '审核':'裘志江',
  1055. '审核日期':'2024/6/27',
  1056. '排产时间':'2024-8-10 12:00',
  1057. '排产人':'车间主任xxx',
  1058. '完工时间':'2024-8-14 12:00',
  1059. },
  1060. ]
  1061. console.log(ywg_Projectdata)
  1062. tableData.splice(0,tableData.length,...ywg_Projectdata);//表格数据
  1063. _cname.value = '已完工';
  1064. break;
  1065. }
  1066. };
  1067. //分页
  1068. const jhz_page = ref(1)//前往多少页
  1069. const jhz_total = ref(0)//共多少条
  1070. const jhz_pageSize = ref(30)//一页多少条
  1071. const jhz_handleCurrentChange = (val) => {
  1072. jhz_page.value = val;
  1073. _jhz_Projectdata_page();
  1074. };
  1075. // 修改页面容量 点击多少条/页
  1076. const jhz_handleSizeChange = (val) => {
  1077. jhz_pageSize.value = val;
  1078. _jhz_Projectdata_page();
  1079. };
  1080. //分页查询调用接口
  1081. const _jhz_Projectdata_page = async () => {
  1082. if( _cname.value === null || _cname.value === ''){
  1083. return false;
  1084. }
  1085. const jhz_Projectdata = await Project({status: _cname.value,search:'',page:jhz_page.value,limit:jhz_pageSize.value});
  1086. for (let i = 0; i < jhz_Projectdata.data.data.length; i++) {
  1087. const item = jhz_Projectdata.data.data[i];
  1088. if (item.status === 0) {
  1089. //获取状态
  1090. item.statusColumn = "*";
  1091. }
  1092. // 如果 status 为 1,可以在相应列中添加其他内容
  1093. else if (item.status === 1) {
  1094. item.statusColumn = "";
  1095. }
  1096. }
  1097. tableData.value = jhz_Projectdata.data.data;
  1098. jhz_total.value = jhz_Projectdata.data.total;//共多少条
  1099. };
  1100. //左上角搜索计划中、已完工工单编号
  1101. const searchInfo = ref('');
  1102. //搜索按钮
  1103. const onSubmit = () => {
  1104. if(searchInfo.value === ''){
  1105. ElMessage({type: 'warning',message: '请输入搜索的信息'})
  1106. return false;
  1107. }else{
  1108. console.log(searchInfo.value)
  1109. console.log("点击了搜索按钮");
  1110. }
  1111. };
  1112. //搜索计划中、已完工一条工单接口
  1113. const _Project = async () => {
  1114. const status = currentNode.value;
  1115. const search = searchInfo.value;
  1116. const Project_search = await Project({status:status,search:search,page:1,limit:30});
  1117. if(Project_search.msg === '成功'){
  1118. tableData.value = Project_search.data.data;
  1119. }else{
  1120. ElMessage({type: 'warning',message: '查不到具体条件的工单'})
  1121. return false;
  1122. }
  1123. };
  1124. // 搜索排程、制程一条工单接口
  1125. const _Schedule = async () => {
  1126. const status = currentNode.value;
  1127. const search = searchInfo.value;
  1128. const Schedule_search = await Schedule({status:status,search:search});
  1129. if(Schedule_search.msg === '成功'){
  1130. tableData.value = Schedule_search.data;
  1131. }else{
  1132. ElMessage({type: 'warning',message: '查不到具体条件的工单'})
  1133. return false;
  1134. }
  1135. };
  1136. //机台搜索一条工单接口
  1137. const _MachineWorkOrderList = async () => {
  1138. let params = {}
  1139. params.search = searchInfo.value;
  1140. params.machine = _machine.value;
  1141. const MachineWorkOrderList_search = await MachineWorkOrderList(params);
  1142. if(MachineWorkOrderList_search.msg === ''){
  1143. ElMessage({type: 'warning',message: '查不到具体条件的工单'})
  1144. return false;
  1145. }else{
  1146. console.log(searchInfo.value)
  1147. chejianfuData.value = MachineWorkOrderList_search.data['制程'];
  1148. chejianData.value = MachineWorkOrderList_search.data['排程'];
  1149. }
  1150. };
  1151. //加入排产按钮
  1152. const onjrpcClick = async () => {
  1153. searchInfo.value = '';
  1154. if(_PC_gdbh.value == null || _PC_gdbh.value == ''){
  1155. ElMessage({type: 'warning',message: '请勾选排程中工单'})
  1156. }else{
  1157. if (_PC_xscn.value === '' || _PC_xscn.value === null || _PC_xscn.value === '0') {
  1158. ElMessage({type: 'warning',message: '选择中小时产量为 0'})
  1159. return false;
  1160. }else{
  1161. let params = {}
  1162. params.workOrder = _PC_gdbh.value;
  1163. params.machine = _machine.value;
  1164. params.printCode = _PC_yjno.value;
  1165. params.processCode = _PC_gxh.value;
  1166. const ProductionSchedulingAdd_add = await ProductionSchedulingAdd(params);
  1167. if (ProductionSchedulingAdd_add.code === 0) {
  1168. const pc_zc_table = await MachineWorkOrderList({machine:_machine.value});
  1169. chejianData.value = pc_zc_table.data['排程'];
  1170. chejianfuData.value = pc_zc_table.data['制程'];
  1171. ElMessage({type: 'success',message: '加入排产 更新成功'});
  1172. } else {
  1173. ElMessage({ type: 'error',message: '更新失败'})
  1174. }
  1175. }
  1176. }
  1177. };
  1178. //暂停排产按钮
  1179. const onztwgClick = async () => {
  1180. searchInfo.value = '';
  1181. if(_ZC_gdbh.value == null || _ZC_gdbh.value == ''){
  1182. ElMessage({type: 'warning', message: '请勾选制程中工单'})
  1183. }else{
  1184. let params = {}
  1185. params.workOrder = _ZC_gdbh.value;
  1186. params.machine = _machine.value;
  1187. params.printCode = _ZC_yjno.value;
  1188. params.processCode = _ZC_gxh.value;
  1189. const ProductionSchedulingAdd_stop = await ProductionSchedulingPause(params);
  1190. if (ProductionSchedulingAdd_stop.code === 0) {
  1191. const pc_zc_table = await MachineWorkOrderList({machine:_machine.value});
  1192. chejianData.value = pc_zc_table.data['排程'];
  1193. chejianfuData.value = pc_zc_table.data['制程'];
  1194. ElMessage({type: 'success',message: '暂停排产 更新成功'});
  1195. } else {
  1196. ElMessage({ type: 'error',message: '更新失败'})
  1197. }
  1198. }
  1199. };
  1200. //工序完工按钮
  1201. const ongxwgClick = async () => {
  1202. searchInfo.value = '';
  1203. if(_ZC_gdbh.value == null || _ZC_gdbh.value == ''){
  1204. onstatuslist.value = false;
  1205. ElMessage({type: 'warning',message: '请勾选制程中工单'})
  1206. }else{
  1207. let params = {}
  1208. params.workOrder = _ZC_gdbh.value;
  1209. params.processCode = _ZC_gxh.value;
  1210. const complete_get = await complete(params);
  1211. if (complete_get.code === 0) {
  1212. const pc_zc_table = await MachineWorkOrderList({ machine:_machine.value});
  1213. // chejianData.value = pc_zc_table.data['排程'];
  1214. chejianfuData.value = pc_zc_table.data['制程'];
  1215. ElMessage({type: 'success',message: '工序完工 更新成功'})
  1216. } else {
  1217. ElMessage({ type: 'error',message: '更新失败'})
  1218. }
  1219. }
  1220. };
  1221. //加入排程【上面到下面】
  1222. const _PC_gxh = ref(null)
  1223. const _PC_yjno = ref(null)
  1224. const _PC_gdbh = ref(null)
  1225. const _PC_xscn = ref(null)
  1226. const jitaiArr = ref([])
  1227. const PC_handleChange = (arr) => {
  1228. let gxh = arr.map((val) => val['gxh']).join(",");
  1229. let yjno = arr.map((val) => val['yjno']).join(",");
  1230. let str = arr.map((val) => val['工单编号']).join(",");
  1231. let xscn = arr.map((val) => val['小时产能']).join(",");
  1232. _PC_gxh.value = gxh;
  1233. _PC_yjno.value = yjno;
  1234. _PC_gdbh.value = str;
  1235. _PC_xscn.value = xscn;
  1236. jitaiArr.value = arr
  1237. }
  1238. //加入制程【下面到上面】
  1239. const _ZC_gxh = ref(null)
  1240. const _ZC_yjno = ref(null)
  1241. const _ZC_gdbh = ref(null)
  1242. const _ZC_xscn = ref(null)
  1243. const ZP_handleChange = (arr) => {
  1244. let gxh = arr.map((val) => val['gxh']).join(",");
  1245. let yjno = arr.map((val) => val['yjno']).join(",");
  1246. let str = arr.map((val) => val['工单编号']).join(",");
  1247. let xscn = arr.map((val) => val['小时产能']).join(",");
  1248. _ZC_gxh.value = gxh;
  1249. _ZC_yjno.value = yjno;
  1250. _ZC_gdbh.value = str;
  1251. _ZC_xscn.value = xscn;
  1252. }
  1253. //=========工序产量核查===========
  1254. const pd_gxclhclist = ref(false);
  1255. const gxclhc_Data = ref([]);
  1256. const gxclhc_Columns = ref(
  1257. [
  1258. { label: '印件及工序名称', prop: 'concatenatedData', width: '380' },
  1259. // { label: '印件', prop: 'Gy0_yjno', width: '130' },
  1260. // { label: '工序', prop: 'Gy0_gxh', width: '130' },
  1261. // { label: '名称', prop: 'Gy0_gxmc', width: '130' },
  1262. { label: '工序计划产量', prop: 'Gy0_计划接货数', width: '120' },
  1263. { label: '联数', prop: 'Gy0_ls', width: '70' },
  1264. { label: '折算车头产量', prop: '折算车头产量', width: '120' },
  1265. { label: '实际上报产量', prop: 'sczl_cl', width: '120' },
  1266. { label: '制程废品', prop: 'sczl_zcfp', width: '120' },
  1267. { label: '制程废品率', prop: '制程废品率', width: '120' },
  1268. { label: '来料异常', prop: '来料异常', width: '90' },
  1269. { label: '流程单数', prop: 'process_num', width: '90' },
  1270. { label: '当前设备', prop: 'Gy0_sbbh', width: '120' },
  1271. { label: '工序状态', prop: 'PD_WG', width: '90'},
  1272. { label: '首板生产日期', prop: 'sczl_rq', width: '160' },
  1273. ]
  1274. )
  1275. const gxclhcformData = reactive({
  1276. gdbh: '',
  1277. gdmc: '',
  1278. yjno: '',
  1279. });
  1280. const gdwhformData = reactive({
  1281. // 下拉框选项数据
  1282. yinjian: [],
  1283. // 设置默认值
  1284. yjno: '',
  1285. });
  1286. const inputCpmc = ref('')
  1287. // 工序产量核查按钮
  1288. const pd_gxclhconClick = async () => {
  1289. if(_Gd_gdbh.value === '' || _Gd_gdbh.value === null){
  1290. ElMessage({type: 'warning',message: '请选择具体的工单,在进行操作'})
  1291. return false;
  1292. }
  1293. gxclhcformData['gdbh'] = _Gd_gdbh.value;
  1294. pd_gxclhclist.value = true;
  1295. const response = await PrintDetailList ({workOrder:_Gd_gdbh.value});
  1296. console.log(response)
  1297. gdwhformData.yjno = response.data[0].no
  1298. inputCpmc.value = response.data[0].name
  1299. if (response.code === 0) {
  1300. const noFields = response.data.map(item => item.no);
  1301. gdwhformData.yinjian = noFields
  1302. } else {
  1303. console.error('查询失败:', response.msg);
  1304. }
  1305. _getOrderProcessCount();
  1306. };
  1307. //点击印件下拉框
  1308. const ongdwhfanclick = async() => {
  1309. _PrintDetailList();
  1310. _getOrderProcessCount();
  1311. }
  1312. //工序产量核查回车
  1313. const gxclhcProductValue = async () => {
  1314. _getOrderProcessCount();
  1315. _PrintDetailList();
  1316. }
  1317. //工序产量核查退出
  1318. const gxclhcCancel = async () => {
  1319. pd_gxclhclist.value = false;
  1320. };
  1321. //印件编号获取方法接口
  1322. const _PrintDetailList = async () => {
  1323. const order = gxclhcformData['gdbh'];
  1324. const response = await PrintDetailList ({workOrder:order});
  1325. const matchingItem = response.data.find(item => item.no === gdwhformData.yjno);
  1326. if (matchingItem) {
  1327. console.log(matchingItem.name)
  1328. inputCpmc.value = matchingItem.name;
  1329. } else {
  1330. console.log(`No matching item found for no: ${gdwhformData.yjno}`);
  1331. }
  1332. }
  1333. //工序产量核查方法接口
  1334. const _getOrderProcessCount = async () => {
  1335. const order = gxclhcformData['gdbh'];
  1336. const yjno = gdwhformData.yjno;
  1337. const getOrderProcessCount_list = await getOrderProcessCount({order:order,yjno:yjno});
  1338. const concatenatedData = getOrderProcessCount_list.data.map(item => {
  1339. // 优化后的代码,使用模板字符串连接字段值并在单个数字前添加零
  1340. const formattedYjno = item.Gy0_yjno.length === 1 ? `0${item.Gy0_yjno}` : item.Gy0_yjno;
  1341. const formattedGxh = item.Gy0_gxh.length === 1 ? `0${item.Gy0_gxh}` : item.Gy0_gxh;
  1342. const concatenatedValue = `${formattedYjno}-${formattedGxh} ${item.Gy0_gxmc}`;
  1343. return {
  1344. ...item,
  1345. concatenatedData: concatenatedValue, // 使用新属性名
  1346. };
  1347. });
  1348. gxclhc_Data.value = concatenatedData;
  1349. };
  1350. //工序产量核查
  1351. const gxclhcCellClass = ({row, column, rowIndex, columnIndex}) =>{
  1352. if (column.label === '实际上报产量' ||column.label === '制程废品' || column.label === '制程废品率' ||
  1353. column.label === '来料异常' || column.label === '流程单数' || column.label === '当前设备') {
  1354. return 'lan-plan-usage-lows';
  1355. }
  1356. if (column.label === '折算车头产量') {
  1357. return 'gxclhc—color-column-red';
  1358. }
  1359. // 如果不是 'PD_WG' 列,返回空字符串或其他样式类
  1360. if (column.label === '工序状态'){
  1361. if(row['PD_WG'] === '完工'){
  1362. return 'lan-plan-usage-lowshui';
  1363. }else{
  1364. return 'pczccolor-column-lan';
  1365. }
  1366. }
  1367. }
  1368. //===========工单状态设置按钮=======
  1369. const onstatuslist = ref(false);
  1370. const statusformData = reactive({gdbh: '',});
  1371. const status = ref('计划中'); // 默认选择
  1372. const onStatusClick = () => {
  1373. if(_Gd_gdbh.value === null || _Gd_gdbh.value === ''){
  1374. onstatuslist.value = false;
  1375. ElMessage({
  1376. type: 'warning',
  1377. message: '请选择树形后,再操作此功能'
  1378. })
  1379. }else{
  1380. statusformData['gdbh'] = _Gd_gdbh.value;
  1381. onstatuslist.value = true;
  1382. }
  1383. };
  1384. //工单状态设置【放弃按钮】
  1385. const handleCancel = () => {
  1386. onstatuslist.value = false;
  1387. };
  1388. //工单状态设置【执行按钮】
  1389. const handleConfirm = async () => {
  1390. //工单编号
  1391. let workOrder = statusformData['gdbh'];
  1392. //状态
  1393. let statusCode;
  1394. if (status.value === '计划中') {
  1395. statusCode = "3-计划中";
  1396. } else if (status.value === '生产中') {
  1397. statusCode = "2-生产中";
  1398. }else if (status.value === '已完工') {
  1399. statusCode = "1-已完工";
  1400. }
  1401. const StatusEditdata = await StatusEdit({workOrder:workOrder,status:statusCode});
  1402. if (StatusEditdata.code === 0) {
  1403. ElMessage({type: 'success',message: '更新成功'})
  1404. } else {
  1405. ElMessage({type: 'error',message: '更新失败'})
  1406. }
  1407. onstatuslist.value = false;
  1408. };
  1409. // =========== 【工序状态更正】 ===========
  1410. const gxztgzztableColumns = ref(
  1411. [
  1412. { label: '印件及工序', prop: '印件及工序', width: '600' },
  1413. { label: '计划产量/已完成', prop:['计划产量/已完成'], width: '500' },
  1414. { label: '完成率', prop: '完成率', width: '240' },
  1415. { label: '完工时间', prop: '完工时间', width: '300' },
  1416. { label: '设备代号', prop: '设备代号', width: '240' },
  1417. ]
  1418. )
  1419. const gxztgzztableData = ref([]);
  1420. const gxztgzzlist = ref(false);
  1421. const gxztgzzformData = reactive({gdbh: '',});
  1422. // =========== 排产 ===========
  1423. //默认弹窗关闭
  1424. const add_gdyjdialogFormVisible = ref(false)
  1425. const add_yjzlformdata = reactive({
  1426. ddzbh: '',
  1427. ys: '',
  1428. cmgg: '',
  1429. sfcy: '',
  1430. gzzx: '',
  1431. cfxtxz1: '',
  1432. cfxtxz2: '',
  1433. pcsl1: '',
  1434. pcsl2: '',
  1435. });
  1436. const cmformdata = reactive({
  1437. cm1:'32',
  1438. cm2:'34',
  1439. cm3:'36',
  1440. cm4:'38',
  1441. cm5:'40',
  1442. cm6:'42',
  1443. cm7:'44',
  1444. cm8:'46',
  1445. cm9:'总计',
  1446. });
  1447. const zdsformdata = reactive({
  1448. zds1:'10',
  1449. zds2:'20',
  1450. zds3:'30',
  1451. zds4:'',
  1452. zds5: '',
  1453. zds6:'',
  1454. zds7:'',
  1455. zds8:'',
  1456. zds9:'',
  1457. });
  1458. //清空对象的属性值
  1459. const gdyj_clearFormData = () => {
  1460. Object.keys(zdsformdata).forEach(key => {
  1461. zdsformdata[key] = '';
  1462. });
  1463. add_yjzlformdata['ddzbh'] = '2408001-1';
  1464. add_yjzlformdata['ys'] = '红色';
  1465. add_yjzlformdata['cmgg'] = '32~46';
  1466. add_yjzlformdata['sfcy'] = '是';
  1467. add_yjzlformdata['gzzx'] = '二分厂';
  1468. add_yjzlformdata['cfxtxz1'] = '服装厂11组';
  1469. add_yjzlformdata['cfxtxz2'] = '服装厂1组';
  1470. add_yjzlformdata['pcsl1'] = '50';
  1471. add_yjzlformdata['pcsl2'] = '40';
  1472. };
  1473. //排产按钮
  1474. const ongxztgzClick = () => {
  1475. // add_yjzlformdata.ddzbh = _Gd_gdbh.value
  1476. add_gdyjdialogFormVisible.value = true
  1477. gdyj_clearFormData();
  1478. }
  1479. //增删小组
  1480. //排产确定
  1481. const add_gdyjenterDialog = async () => {
  1482. }
  1483. //排产取消
  1484. const add_dyjcloseDialog = () => {
  1485. add_gdyjdialogFormVisible.value = false
  1486. }
  1487. //新增工单资料弹窗 键盘input框跳转
  1488. const add_gdzlent = async (event,id1,id2,id3,idx) => {
  1489. if(event.keyCode === 40){
  1490. if(id3!=''){
  1491. document.getElementById(id3).focus()
  1492. }
  1493. }else if (event.keyCode === 13) { // Enter 或向下箭头
  1494. if(id3!=''){
  1495. document.getElementById(id3).focus()
  1496. }
  1497. } else if (event.keyCode === 38) { // 向上箭头
  1498. if(id1!=''){
  1499. document.getElementById(id1).focus()
  1500. }
  1501. }else if (event.keyCode === 8) { // 删除箭头
  1502. if(id1!='' && document.getElementById(id2).value==''){
  1503. document.getElementById(id1).focus()
  1504. }
  1505. }else if (event.keyCode === 37) { // 向左箭头
  1506. if(id1!='' && document.getElementById(id2).selectionStart==0){
  1507. document.getElementById(id1).focus()
  1508. }
  1509. }else if (event.keyCode === 39) { // 向右箭头
  1510. if(id3!='' && document.getElementById(id2).selectionStart == document.getElementById(id2).value.length){
  1511. document.getElementById(id3).focus()
  1512. }
  1513. }
  1514. }
  1515. //工序状态更正按钮
  1516. // const ongxztgzClick = () => {
  1517. // if(_Gd_gdbh.value == null){
  1518. // gxztgzzlist.value = false;
  1519. // ElMessage({type: 'warning',message: '请选择树形后,再操作此功能'})
  1520. // }else{
  1521. // gxztgzzformData['gdbh'] = _Gd_gdbh.value;
  1522. // _ProcessStatusCorrection();
  1523. // gxztgzzlist.value = true;
  1524. // }
  1525. // };
  1526. //工序状态更正回车
  1527. const gxztgzzgetProductValue = () => {
  1528. _ProcessStatusCorrection();
  1529. };
  1530. //工序状态更正接口获取
  1531. const _ProcessStatusCorrection = async (row) => {
  1532. const workOrder = gxztgzzformData['gdbh'];
  1533. const ProcessStatusCorrectiondata = await ProcessStatusCorrection({workOrder:workOrder});
  1534. gxztgzztableData.value = ProcessStatusCorrectiondata.data;
  1535. };
  1536. //工序状态更正更新
  1537. const edit_gxztgzzCancel = async () => {
  1538. const formatDate = (inputDateString) => {
  1539. const timestamp = Date.parse(inputDateString);
  1540. if (isNaN(timestamp)) {
  1541. return ''; // 返回空字符串表示日期无效
  1542. }
  1543. const date = new Date(timestamp);
  1544. const year = date.getFullYear();
  1545. const month = ('0' + (date.getMonth() + 1)).slice(-2);
  1546. const day = ('0' + date.getDate()).slice(-2);
  1547. const hour = ('0' + date.getHours()).slice(-2);
  1548. const minute = ('0' + date.getMinutes()).slice(-2);
  1549. const second = ('0' + date.getSeconds()).slice(-2);
  1550. return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
  1551. };
  1552. const formattedData = gxztgzztableData.value.map(item => {
  1553. return {
  1554. UniqId: item['UniqId'],
  1555. PD_WG: formatDate(item['完工时间']),
  1556. };
  1557. });
  1558. const ProcessStatusCorrectionEdit_status = await ProcessStatusCorrectionEdit(formattedData);
  1559. if (ProcessStatusCorrectionEdit_status.code === 0) {
  1560. ElMessage({ type: 'success',message: '更新成功' })
  1561. } else {
  1562. ElMessage({type: 'error',message: '更新失败'})
  1563. }
  1564. gxztgzzlist.value = false;
  1565. };
  1566. //工序状态更正退出
  1567. const gxztgzzCancel = () => {
  1568. gxztgzzlist.value = false;
  1569. };
  1570. //机组调整按钮
  1571. const jizuDisplay = ref(false)
  1572. const jizuList = ref([])
  1573. const jizuSelection = ref([])
  1574. const onjztzClick = async () => {
  1575. if (jitaiArr.value.length === 0) {
  1576. ElMessage.warning('请选择数据')
  1577. return
  1578. }
  1579. jizuList.value = [
  1580. {
  1581. label: jitaiArr.value[0].车间名称,
  1582. value: jitaiArr.value[0].车间名称,
  1583. disabled: true,
  1584. children: []
  1585. }
  1586. ]
  1587. const res = await gdzl_MachineList({address:jitaiArr.value[0].车间名称})
  1588. jizuList.value[0].children = res.data.map(item => {
  1589. return { label: item, value: item.match(/^\w+#/)[0]}
  1590. })
  1591. jizuDisplay.value = true
  1592. };
  1593. const checkTreeHandle = (data, tree) => {
  1594. jizuSelection.value = tree.checkedNodes
  1595. }
  1596. const saveJizuTiaozheng = async () => {
  1597. if (jizuSelection.value.length === 0) {
  1598. ElMessage.warning('请先勾选机组')
  1599. return
  1600. }
  1601. const uid = jitaiArr.value.map(item => item.GYUID).join(' ')
  1602. const jizu = jizuSelection.value.map(item=>item.value).join(' ')
  1603. try {
  1604. const res = await MachineTeamEdit({UniqId: uid, machine: jizu})
  1605. if (res.code == 0) ElMessage.success('调整成功')
  1606. const pc_zc_table = await MachineWorkOrderList({machine:_machine.value});
  1607. chejianData.value = pc_zc_table.data['排程'];
  1608. chejianfuData.value = pc_zc_table.data['制程'];
  1609. jizuDisplay.value = false
  1610. } catch(e) {
  1611. ElMessage.error(e)
  1612. }
  1613. }
  1614. //=============引用实际参数================
  1615. const pd_yysjcsonClick = () => {
  1616. if(_Gd_gdbh.value == null){
  1617. gxztgzzlist.value = false;
  1618. ElMessage({type: 'warning',message: '请选择树形后,再操作此功能'})
  1619. }else{
  1620. console.log(_Gd_gdbh.value)
  1621. ElMessage({type: 'warning',message: '没有找到该产品的入仓完工记录,不能继续进行'})
  1622. }
  1623. };
  1624. //=============车间设备排程================
  1625. const paichengColumns = ref(
  1626. [
  1627. { label: '优先次序', prop: '优先次序', width: '105' },
  1628. { label: '工单编号', prop: '工单编号', width: '100' },
  1629. // { label: '印件名称', prop: '印件名称', width: '200' },
  1630. { label: '接货数', prop: '计划接货数', width: '90' },
  1631. { label: '已完成', prop: '已完成', width: '90' },
  1632. { label: '小时产能', prop: '小时产能', width: '100' },
  1633. { label: '生产工时', prop: '生产工时', width: '100' },
  1634. { label: '辅助工时', prop: '辅助工时', width: '100' },
  1635. { label: '班次安排', prop: '班次安排', width: '100' },
  1636. { label: '排单备注', prop: '排单备注', width: '150' },
  1637. { label: '最早开工时间', prop: '最早开工时间', width: '180' },
  1638. { label: '计划开工时间', prop: '计划开工时间', width: '180' },
  1639. { label: '计划完工时间', prop: '计划完工时间', width: '180' },
  1640. { label: '销售订单号', prop: '销售订单号', width: '120' },
  1641. { label: '印件/工序', prop: '印件/工序', width: '110' },
  1642. ])
  1643. const handleDataSortAndSettingDate = () => {
  1644. paichengData.value.sort((a, b) => {
  1645. const priorityA = parseFloat(a['优先次序']);
  1646. const priorityB = parseFloat(b['优先次序']);
  1647. // 将空白值放在最后
  1648. if (isNaN(priorityA)) return 1;
  1649. if (isNaN(priorityB)) return -1;
  1650. // 按优先次序升序排序
  1651. return priorityA - priorityB;
  1652. });
  1653. paichengData.value.map((item, index) => {
  1654. console.log(Math.round(((item['计划接货数'] ?? 0) - Number(item['已完成'] ?? 0)) / item['小时产能']).toFixed(1))
  1655. if(item['小时产能'] !== '' && item['小时产能'] !== 0){
  1656. item['生产工时'] = Math.round(((item['计划接货数'] ?? 0) - Number(item['已完成'] ?? 0)) / item['小时产能']).toFixed(1);
  1657. }
  1658. if(item['生产工时'] === 'Infinity' || item['生产工时'] === '-Infinity'){
  1659. item['生产工时'] = 0;
  1660. }
  1661. let hour = parseFloat(item['生产工时']) + parseFloat(item['辅助工时'])
  1662. if ( ((Math.floor(hour) * 10) % 10) !== 5) {
  1663. hour = Math.round(hour)
  1664. }
  1665. const sec = hour * 3600
  1666. const startTime = dayjs(item['计划开工时间']).unix()
  1667. item['计划完工时间'] = dayjs((startTime + sec) * 1000).format('YYYY-MM-DD HH:mm:ss')
  1668. if (index > 0) {
  1669. item['计划开工时间'] = paichengData.value[index-1]['计划完工时间']
  1670. hour = parseFloat(item['生产工时']) + parseFloat(item['辅助工时'])
  1671. if ( ((Math.floor(hour) * 10) % 10) !== 5) {
  1672. hour = Math.round(hour)
  1673. }
  1674. const sec = hour * 3600
  1675. const startTime = dayjs(item['计划开工时间']).unix()
  1676. item['计划完工时间'] = dayjs((startTime + sec) * 1000).format('YYYY-MM-DD HH:mm:ss')
  1677. }
  1678. })
  1679. }
  1680. const handleBlur = (name, item) => {
  1681. console.log(name)
  1682. console.log(item)
  1683. if (name === '优先次序' || name === '计划开工时间' || name === '生产工时' || name === '辅助工时' || name === '最早开工时间') {
  1684. handleDataSortAndSettingDate()
  1685. }
  1686. if (name === '小时产能') {
  1687. // console.log(item)
  1688. // item['生产工时'] = Math.round( ( (item['计划接货数'] ?? 0) - Number(item['已完成'] ?? 0) ) / item['小时产能'] ).toFixed(1)
  1689. // console.log(item['计划接货数'])
  1690. // console.log(item['已完成'])
  1691. // console.log(item['生产工时'])
  1692. handleDataSortAndSettingDate()
  1693. }
  1694. }
  1695. const handleKeyDown = (event, x, y, prop) => {
  1696. const currentElement = document.getElementById(`input${x}${y}`);
  1697. if (currentElement === null && currentElement === undefined) return
  1698. let move = 0
  1699. switch (event.keyCode) {
  1700. case 13: // Enter
  1701. if (x === 0 && y === +y) {
  1702. handleDataSortAndSettingDate()
  1703. }
  1704. const nextInputElement = document.getElementById(`input${x}${y + 1}`);
  1705. if (nextInputElement) {
  1706. nextInputElement.focus();
  1707. }
  1708. break;
  1709. case 40: // 向下箭头
  1710. if (y < paichengData.value.length ){
  1711. const nextInputElement = document.getElementById(`input${x}${y + 1}`);
  1712. if (nextInputElement) {
  1713. nextInputElement.focus();
  1714. }
  1715. }
  1716. break;
  1717. case 38: // 向上箭头
  1718. if ( y > 0) {
  1719. document.getElementById(`input${x}${y - 1}`).focus();
  1720. }
  1721. break;
  1722. case 39: // 向右箭头
  1723. if ( x === 0) {
  1724. move = x + 5
  1725. } else if (x >= 5 && x <=10) {
  1726. move = x + 1
  1727. }
  1728. const nextInputElements = document.getElementById(`input${move}${y}`);
  1729. if (nextInputElements) {
  1730. nextInputElements.focus();
  1731. }
  1732. break;
  1733. case 37: // 向左箭头
  1734. if ( x === 5) {
  1735. move = x - 5
  1736. } else if (x >= 5 && x <=10) {
  1737. move = x - 1
  1738. }
  1739. document.getElementById(`input${move}${y}`).focus();
  1740. break;
  1741. default:
  1742. break;
  1743. }
  1744. }
  1745. const cjsbpclist = ref(false);
  1746. const cjsbpcformData = reactive({
  1747. //设备代号
  1748. sbdh: '',
  1749. // 下拉框选项数据
  1750. bancis: [],
  1751. // 设置默认值
  1752. banci: '',
  1753. isBanciSelected: false,
  1754. });
  1755. //订单打印
  1756. const pd_gdprintonClick = () => {
  1757. printPageRef.value.open(_Gd_gdbh.value)
  1758. }
  1759. //车间设备排程【按钮】
  1760. const oncjsbpcClick = async () => {
  1761. cjsbpcformData['sbdh'] = _machine.value;
  1762. paichengData.value = [];
  1763. _EquipmentSchedulingdata();
  1764. _ScheduleSelectiondata();
  1765. cjsbpclist.value = true;
  1766. };
  1767. //调用班次选择列表接口
  1768. const _ScheduleSelectiondata = async ()=>{
  1769. try {
  1770. const ScheduleSelectiondata = await ScheduleSelection();
  1771. // 清空之前的数据
  1772. cjsbpcformData.bancis = [];
  1773. // 循环遍历数组并将每个班次的detail添加到bancis数组中
  1774. for (const option of ScheduleSelectiondata.data) {
  1775. cjsbpcformData.bancis.push({ label: option.detail, value: option.detail.split('||')[0], rename:option.detail});
  1776. }
  1777. } catch (error) {
  1778. console.error(error);
  1779. }
  1780. }
  1781. //车间设备排程->数据展示
  1782. const paichengData = ref([])
  1783. //点击车间排程行
  1784. const _bcxz_val = ref(null)
  1785. //点击表格行的时候触发的方法
  1786. const cjpc_tableRowClick = (row) => {
  1787. _bcxz_val.value = row; // 保存点击的行数据
  1788. }
  1789. //班次选择列表下拉框
  1790. const setBanci = (v) => {
  1791. if(cjsbpcformData['isBanciSelected'] === true){
  1792. paichengData.value.map( item => item.班次安排 = v)
  1793. }else{
  1794. if (_bcxz_val.value) {
  1795. _bcxz_val.value['班次安排'] = v;
  1796. }
  1797. }
  1798. }
  1799. const _EquipmentSchedulingdata = async ()=>{
  1800. // let machine = 'WY01#';
  1801. let machine = _machine.value;
  1802. try {
  1803. const EquipmentSchedulingdata = await EquipmentScheduling({machine:machine});
  1804. console.log(EquipmentSchedulingdata)
  1805. if (EquipmentSchedulingdata.code === 0) {
  1806. paichengData.value = EquipmentSchedulingdata.data
  1807. paichengData.value.map((item, index) => {
  1808. item['优先次序'] = 50 + index
  1809. })
  1810. handleDataSortAndSettingDate()
  1811. }
  1812. } catch (error) {
  1813. console.error(error);
  1814. }
  1815. }
  1816. //车间设备制程->数据编辑
  1817. //车间设备制程【更新排程】
  1818. const oneditpcClick = async () => {
  1819. const rawValueArray = paichengData._rawValue;
  1820. const formattedData = rawValueArray.map(item => {
  1821. return {
  1822. capacity: item.小时产能,
  1823. ProductionHours: item.生产工时,
  1824. AuxiliaryHours: item.辅助工时,
  1825. shift: item.班次安排,
  1826. remark: item.排单备注,
  1827. start: item.最早开工时间,
  1828. projectTime: item.计划开工时间,
  1829. endTime: item.计划完工时间,
  1830. UniqId: item.UniqId
  1831. };
  1832. });
  1833. console.log(formattedData);
  1834. const EquipmentSchedulingEdit_edit = await EquipmentSchedulingEdit(formattedData);
  1835. // console.log(EquipmentSchedulingEdit_edit)
  1836. if (EquipmentSchedulingEdit_edit.code === 0) {
  1837. ElMessage({ type: 'success', message: '更新成功' });
  1838. console.log(_machine.value)
  1839. const zhubiao = await MachineWorkOrderList({ machine:_machine.value})
  1840. chejianData.value = zhubiao.data['排程'];
  1841. chejianfuData.value = zhubiao.data['制程'];
  1842. cjsbpclist.value = false;
  1843. } else {
  1844. ElMessage({ type: 'error', message: '更新失败' });
  1845. }
  1846. // cjsbpclist.value = true;
  1847. };
  1848. //车间设备制程【退出】
  1849. const cjsbpcCancel = () => {
  1850. cjsbpclist.value = false;
  1851. };
  1852. // =========== 流程单查询 ===========
  1853. const pd_lcdlist = ref(false);
  1854. const pd_lcdformData = reactive({
  1855. gdbh: '',
  1856. code: '',
  1857. name: '',
  1858. yjno: '',
  1859. });
  1860. // 流程单查询按钮
  1861. const processList = ref([]);
  1862. const pd_lcdlistonClick = async () => {
  1863. if(_Gd_gdbh.value === '' || _Gd_gdbh.value === null){
  1864. ElMessage({type: 'warning',message: '请选择具体的工单,在进行操作'})
  1865. return false;
  1866. }else{
  1867. pd_lcdformData['gdbh'] = _Gd_gdbh.value;
  1868. pd_lcdformData['yjno'] = _Gd_yjno.value;
  1869. pd_lcdlist.value = true;
  1870. processList.value = []
  1871. _getOrderProcessLeft_list();
  1872. }
  1873. }
  1874. const pd_lcdProductValue = async () => {
  1875. _getOrderProcessLeft_list();
  1876. }
  1877. const pd_lcd_treeData = ref([]);
  1878. const _getOrderProcessLeft_list = async () => {
  1879. const order = pd_lcdformData['gdbh'];
  1880. const yjno = pd_lcdformData['yjno']
  1881. // console.log(order)
  1882. try {
  1883. //5.1流程单查询-工单工序生产进程菜单栏
  1884. const getOrderProcessLeft_list = await getOrderProcessLeft({ order:order,yjno:yjno});
  1885. console.log(getOrderProcessLeft_list)
  1886. pd_lcdformData['code'] = getOrderProcessLeft_list.data.Gd_info['code'];
  1887. pd_lcdformData['name'] = getOrderProcessLeft_list.data.Gd_info['name'];
  1888. pd_lcd_treeData.value = [{
  1889. label: order + '-' + getOrderProcessLeft_list.data.Gd_info['name'],
  1890. // label: order + '-' + getOrderProcessLeft_list.data.Gd_info['code'] + '-' + getOrderProcessLeft_list.data.Gd_info['name'],
  1891. value: undefined,
  1892. children: []
  1893. }]
  1894. const newData = [];
  1895. for (let key in getOrderProcessLeft_list.data.Gy_info) {
  1896. let temp = getOrderProcessLeft_list.data.Gy_info[key];
  1897. let concatenatedValue = `${temp.Gy0_yjno}-${temp.Gy0_gxh} ---> ${temp.Gy0_gxmc}`;
  1898. newData.push({ label: concatenatedValue,value: temp.Gy0_gxh });
  1899. }
  1900. pd_lcd_treeData.value[0].children = newData;
  1901. //5.2流程单查询-获取工单工序生产进程右侧【进入页面默认显示第一个】
  1902. const getOrderProcessRight_list = await getOrderProcessRight({order:order, gxNo:newData[0].value,yjno:yjno});
  1903. processList.value = getOrderProcessRight_list.data
  1904. } catch (error) {
  1905. console.error(error);
  1906. }
  1907. };
  1908. const pd_lcd_handleNodeClick = async (node) => {
  1909. if (node.value === undefined) return
  1910. const order = pd_lcdformData['gdbh'];
  1911. const yjno = pd_lcdformData['yjno'];
  1912. ////5.2流程单查询-获取工单工序生产进程右侧
  1913. const getOrderProcessRight_list = await getOrderProcessRight({order:order, gxNo:node.value,yjno:yjno});
  1914. console.log(getOrderProcessRight_list)
  1915. processList.value = getOrderProcessRight_list.data
  1916. };
  1917. // 流程单查询退出
  1918. const pd_lcdCancel = async () => {
  1919. pd_lcdlist.value = false;
  1920. }
  1921. //颜色
  1922. //工序状态更正颜色
  1923. const gxztgzzCellClass = ({row, column, rowIndex, columnIndex}) =>{
  1924. if(row['完工时间'] === ''){
  1925. return 'lan-plan-usage-low';
  1926. }else{
  1927. return 'hui-plan-usage-low';
  1928. }
  1929. }
  1930. //车间设备制程排序背景
  1931. const cjzcCellClass = ({row, column, rowIndex, columnIndex}) =>{
  1932. if (column.label === '小时产能' || column.label === '优先次序' || column.label === '生产工时' || column.label === '辅助工时' || column.label === '班次安排' || column.label === '排单备注' || column.label === '最早开工时间' || column.label === '计划开工时间') {
  1933. return 'background-color-column-fen';
  1934. }
  1935. if (row) {
  1936. return 'color-column-lan';
  1937. }
  1938. }
  1939. //排程中、制程中 下方表格文字变色
  1940. const pczc_planUsageCellClass = ({row, column, rowIndex, columnIndex}) =>{
  1941. if (row['工序完工'].substring(0, 2) === "20") {
  1942. return 'pczccolor-column-hui';
  1943. } else {
  1944. return 'pczccolor-column-lan';
  1945. }
  1946. }
  1947. // 右键勾选
  1948. const rowContextMenu = (row) => {
  1949. // console.log(row)
  1950. return false
  1951. }
  1952. </script>
  1953. <style scoped>
  1954. /* 选中某行背景粉色 */
  1955. :deep(.el-table__body tr.current-row) > td {
  1956. background: #ff80ff !important;
  1957. }
  1958. /*工序产量核查*/
  1959. :deep(.gxclhc—color-column-red div) {
  1960. color: red !important;
  1961. }
  1962. :deep(.lan-plan-usage-lows div) {
  1963. color: blue !important;
  1964. font-weight: bold;
  1965. }
  1966. :deep(.lan-plan-usage-lowshui div) {
  1967. color: #8c939d !important;
  1968. }
  1969. /*排程中、制程中 下方表格文字变色*/
  1970. :deep(.pczccolor-column-hui div) {
  1971. color: #8c939d !important;
  1972. }
  1973. :deep(.pczccolor-column-lan div) {
  1974. color: blue !important;
  1975. }
  1976. /*车间设备制程背景粉色*/
  1977. :deep(.el-table__body .background-color-column-fen div div div) {
  1978. background: #ff80ff !important;
  1979. }
  1980. /*文字蓝色*/
  1981. :deep(.color-column-lan div) {
  1982. color: red !important;
  1983. }
  1984. :deep(.color-column-lan div div div) {
  1985. color: blue !important;
  1986. }
  1987. /*文字灰色*/
  1988. :deep(.hui-plan-usage-low div) {
  1989. color: #8c939d !important;
  1990. }
  1991. /*工序状态更正颜色【蓝色】*/
  1992. :deep(.lan-plan-usage-low div) {
  1993. color: blue !important;
  1994. }
  1995. :deep(.el-tabs__header){
  1996. margin-bottom: 0;
  1997. }
  1998. :deep(.el-table td .cell) {
  1999. line-height: 30px !important;
  2000. }
  2001. .JKWTree-container {
  2002. display: flex;
  2003. }
  2004. .JKWTree-tree {
  2005. /*width: 500px;*/
  2006. background-color: #fff;
  2007. padding: 10px;
  2008. margin-right: 20px;
  2009. }
  2010. .JKWTree-tree h3 {
  2011. font-size: 15px;
  2012. font-weight: 700;
  2013. margin: 10px 0;
  2014. }
  2015. .JKWTree-content {
  2016. flex: 1;
  2017. }
  2018. /*分页*/
  2019. .el-pagination{
  2020. margin-top: 0px !important;
  2021. }
  2022. </style>
  2023. <style scoped>
  2024. :deep(.el-tabs__header){
  2025. margin-bottom: 0;
  2026. }
  2027. .search{
  2028. margin-left: 0px !important;
  2029. margin-right: 10px !important;
  2030. }
  2031. .bt{
  2032. margin-left: 2px !important;
  2033. padding: 3px !important;
  2034. font-size: 12px;
  2035. }
  2036. .el-tabs__header{
  2037. margin: 0px !important;
  2038. }
  2039. .gva-table-box{
  2040. padding: 0px !important;
  2041. }
  2042. .mab{
  2043. margin-bottom: 5px;
  2044. }
  2045. </style>
  2046. <style scoped>
  2047. :deep(.el-table td .cell) {
  2048. line-height: 20px !important;
  2049. }
  2050. :deep(.el-tabs__header){
  2051. margin-bottom: 0;
  2052. }
  2053. .search{
  2054. margin-left: 0px !important;
  2055. margin-right: 10px !important;
  2056. }
  2057. .bt{
  2058. margin-left: 2px !important;
  2059. padding: 3px !important;
  2060. font-size: 12px;
  2061. }
  2062. .el-tabs__header{
  2063. margin: 0px !important;
  2064. }
  2065. .gva-table-box{
  2066. padding: 0px !important;
  2067. }
  2068. .mab{
  2069. margin-bottom: 5px;
  2070. }
  2071. .focusdiv:focus {
  2072. border: 1px solid red;
  2073. }
  2074. /* 图片 */
  2075. .avatar-uploader {
  2076. width: 500px;
  2077. height: 300px;
  2078. border: 1px dashed #d9d9d9;
  2079. display: flex;
  2080. justify-content: center;
  2081. align-items: center;
  2082. cursor: pointer;
  2083. }
  2084. .avatar {
  2085. width: 100%;
  2086. height: 100%;
  2087. display: block;
  2088. object-fit: cover;
  2089. }
  2090. .avatar-uploader-icon {
  2091. font-size: 28px;
  2092. color: #8c939d;
  2093. }
  2094. .upload-placeholder {
  2095. display: flex;
  2096. flex-direction: column;
  2097. align-items: center;
  2098. justify-content: center;
  2099. height: 100%;
  2100. width: 100%;
  2101. }
  2102. .upload-text {
  2103. width: 50%;
  2104. height: 50%;
  2105. margin-top: 5px;
  2106. color: #8c939d;
  2107. font-size: 14px;
  2108. }
  2109. </style>