shebeiyunxing.vue 61 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760
  1. <template>
  2. <div>
  3. <header>
  4. <el-button type="primary" @click="onBZ">班组维护</el-button>
  5. <el-button type="primary" @click="onDel">删除</el-button>
  6. <el-button type="primary" @click="onSMB">入仓末板数据统计</el-button>
  7. <el-button type="primary" @click="ondianjian">设备点检</el-button>
  8. <el-button type="primary" @click="onyinban">印版领退</el-button>
  9. </header>
  10. <el-container>
  11. <el-aside width="200px">
  12. <div class="JKWTree-tree">
  13. <h3 > 组织列表</h3>
  14. <el-tree :data="treeData" :props="defaultProps" @node-click="handleNodeClick"></el-tree>
  15. </div>
  16. </el-aside>
  17. <el-container>
  18. <!-- <el-header>dd</el-header>-->
  19. <el-main>
  20. <div class="gva-search-box" style="overflow: hidden; padding: 0; display: flex;">
  21. <div style="flex: 1; border: 1px magenta solid; margin: 0; padding: 0;">
  22. <el-row :gutter="20">
  23. <el-col :span="24">
  24. <el-form-item label="工单编号" prop="name">
  25. <el-row :gutter="20">
  26. <el-col :span="6">
  27. <el-input v-model="formData.工单编号" :clearable="true" placeholder="ZT01733" />
  28. </el-col>
  29. <el-col :span="18">
  30. <el-input v-model="formData.产品名称" :clearable="true" placeholder="ZT01733" />
  31. </el-col>
  32. </el-row>
  33. </el-form-item>
  34. </el-col>
  35. </el-row>
  36. <el-row :gutter="20">
  37. <el-col :span="6">
  38. <el-form-item label="印件编号" prop="id">
  39. <el-input v-model="formData.印件编号" :clearable="true" placeholder="2023.12.14" />
  40. </el-form-item>
  41. </el-col>
  42. <el-col :span="17">
  43. <el-form-item label="工序名称" prop="name">
  44. <el-input v-model="formData.工序名称" :clearable="true" placeholder="A班" />
  45. </el-form-item>
  46. </el-col>
  47. </el-row>
  48. <el-row :gutter="20">
  49. <el-col :span="4">
  50. <el-form-item label="班组成员" prop="id">
  51. </el-form-item>
  52. </el-col>
  53. </el-row>
  54. <el-row :gutter="1">
  55. <el-col :span="4">
  56. <el-input v-model="formData.sczl_bh1" :clearable="true" placeholder="ZT01733" />
  57. </el-col>
  58. <el-col :span="4">
  59. <el-input v-model="formData.sczl_bh2" :clearable="true" placeholder="ZT01733" />
  60. </el-col>
  61. <el-col :span="4">
  62. <el-input v-model="formData.sczl_bh3" :clearable="true" placeholder="ZT01733" />
  63. </el-col>
  64. <el-col :span="4">
  65. <el-input v-model="formData.sczl_bh4" :clearable="true" placeholder="ZT01733" />
  66. </el-col>
  67. <el-col :span="4">
  68. <el-input v-model="formData.sczl_bh5" :clearable="true" placeholder="ZT01733" />
  69. </el-col>
  70. <el-col :span="4">
  71. <el-input v-model="formData.sczl_bh6" :clearable="true" placeholder="ZT01733" />
  72. </el-col>
  73. <!-- <el-col :span="1">
  74. <el-input v-model="formData.sczl_bh7" :clearable="true" placeholder="ZT01733" />
  75. </el-col>
  76. <el-col :span="1">
  77. <el-input v-model="formData.sczl_bh8" :clearable="true" placeholder="ZT01733" />
  78. </el-col>
  79. <el-col :span="1">
  80. <el-input v-model="formData.sczl_bh9" :clearable="true" placeholder="ZT01733" />
  81. </el-col>
  82. <el-col :span="1">
  83. <el-input v-model="formData.sczl_bh10" :clearable="true" placeholder="2023.12.14" />
  84. </el-col> -->
  85. </el-row>
  86. <el-row :gutter="1">
  87. <el-col :span="4">
  88. <el-input v-model="formData.sczl_name1" :clearable="true" placeholder="ZT01733" />
  89. </el-col>
  90. <el-col :span="4">
  91. <el-input v-model="formData.sczl_name2" :clearable="true" placeholder="ZT01733" />
  92. </el-col>
  93. <el-col :span="4">
  94. <el-input v-model="formData.sczl_name3" :clearable="true" placeholder="ZT01733" />
  95. </el-col>
  96. <el-col :span="4">
  97. <el-input v-model="formData.sczl_name4" :clearable="true" placeholder="ZT01733" />
  98. </el-col>
  99. <el-col :span="4">
  100. <el-input v-model="formData.sczl_name5" :clearable="true" placeholder="ZT01733" />
  101. </el-col>
  102. <el-col :span="4">
  103. <el-input v-model="formData.sczl_name6" :clearable="true" placeholder="ZT01733" />
  104. </el-col>
  105. </el-row>
  106. </div>
  107. <div style="flex: 1; border: 1px lawngreen solid; margin: 0; padding: 0; overflow: hidden;">
  108. <el-table
  109. tooltip-effect="dark"
  110. :data="selectData"
  111. row-key="ID"
  112. highlight-current-row="true"
  113. border
  114. style="width:100%;height: 30vh;"
  115. @row-dblclick="handleSelectClick"
  116. >
  117. <el-table-column
  118. prop="process"
  119. label="印件及工序"
  120. width="340"
  121. />
  122. <el-table-column
  123. prop="completed"
  124. label="已完成板数"
  125. width="150"
  126. />
  127. </el-table>
  128. </div>
  129. </div>
  130. <div class="gva-table-box">
  131. <div class="gva-btn-list">
  132. <el-button type="primary" icon="plus" @click="openDialog">新增</el-button>
  133. <el-popover v-model:visible="deleteVisible" :disabled="!multipleSelection.length" placement="top" width="160">
  134. <p>确定要删除吗?</p>
  135. <div style="text-align: right; margin-top: 8px;">
  136. <el-button type="primary" link @click="deleteVisible = false">取消</el-button>
  137. <el-button type="primary" @click="onDelete">确定</el-button>
  138. </div>
  139. <template #reference>
  140. <el-button icon="delete" style="margin-left: 10px;" :disabled="!multipleSelection.length" @click="deleteVisible = true">删除</el-button>
  141. </template>
  142. </el-popover>
  143. </div>
  144. <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
  145. <el-tab-pane label="设备作业清单" @click="showTable('印件资料')" name="first">
  146. <el-table ref="multipleTable"
  147. :show-overflow-tooltip="true"
  148. highlight-current-row="true"
  149. :row-style="{ height: '20px' }"
  150. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  151. :header-cell-style="{ padding: '0px' }"
  152. @row-click="yjupdateCompanyFunc"
  153. style="width: 100%;height: 330px" border tooltip-effect="dark" :data="sbzyData" row-key="ID" @selection-change="handleSelectionChange">
  154. <!-- <el-table-column type="selection" width="55" />-->
  155. <el-table-column align="left" label="选择" prop="bh" width="80"/>
  156. <el-table-column align="left" label="工单编号|质量信息" prop="工单编号|质量信息" width="180" />
  157. <el-table-column align="left" label="印件资料" prop="印件资料" width="240" />
  158. <el-table-column align="left" label="工序名称" prop="工序名称" width="100" />
  159. <el-table-column align="left" label="计划产量/已完成" prop="计划产量/已完成" width="180"/>
  160. <el-table-column align="left" label="装版时数" prop="装版时数" width="100"/>
  161. <el-table-column align="left" label="工序产能" prop="工序产能" width="100"/>
  162. <el-table-column align="left" label="计划工时" prop="计划工时" width="100"/>
  163. <el-table-column align="left" label="计划生产时段" prop="计划生产时段" width="240" />
  164. <el-table-column align="left" label="排产备注" prop="排产备注" width="100" />
  165. <el-table-column align="left" label="产品名称" prop="产品名称" width="240" />
  166. </el-table>
  167. </el-tab-pane>
  168. <el-tab-pane label="班组人员及分配比例" @click="showTable('工艺资料')" name="second">
  169. <el-table ref="multipleTable"
  170. highlight-current-row="true"
  171. :show-overflow-tooltip="true"
  172. :row-style="{ height: '20px' }"
  173. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  174. :header-cell-style="{ padding: '0px' }"
  175. @row-dblclick="gyupdateCompanyFunc"
  176. :row-class-name="rowClassStyle"
  177. style="width: 100%;height: 400px" border tooltip-effect="dark" :data="FPData" row-key="ID" @selection-change="handleSelectionChange"
  178. @row-click="clickybupdate">
  179. <!-- <el-table-column type="selection" width="55" />-->
  180. <el-table-column align="left" label="选择" prop="方案" width="70"/>
  181. <el-table-column align="left" label="班组号" prop="班组号" width="80" />
  182. <el-table-column align="left" label="组员1" prop="0" width="240" />
  183. <el-table-column align="left" label="组员2" prop="1" width="240" />
  184. <el-table-column align="left" label="组员3" prop="2" width="240" />
  185. <el-table-column align="left" label="组员4" prop="3" width="240" />
  186. <el-table-column align="left" label="组员5" prop="4" width="100" />
  187. <el-table-column align="left" label="组员6" prop="5" width="100" />
  188. <el-table-column align="left" label="组员7" prop="6" width="100" />
  189. <el-table-column align="left" label="组员8" prop="7" width="100" />
  190. <el-table-column align="left" label="组员9" prop="8" width="100" />
  191. <el-table-column align="left" label="组员10" prop="9_正品版" width="120" />
  192. </el-table>
  193. </el-tab-pane>
  194. <el-tab-pane label="当班产量明细" @click="showTable('印版资料')" name="third">
  195. <el-table ref="multipleTable"
  196. highlight-current-row="true"
  197. :show-overflow-tooltip="true"
  198. :row-style="{ height: '20px' }"
  199. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  200. :header-cell-style="{ padding: '0px' }"
  201. @row-dblclick="ybupdateCompanyFunc"
  202. style="width: 100%;height: 400px" border tooltip-effect="dark" :data="CLMXData" row-key="ID" @selection-change="handleSelectionChange"
  203. >
  204. <!-- <el-table-column type="selection" width="55" />-->
  205. <el-table-column align="left" label="生产时段" prop="生产时间段" width="180"/>
  206. <el-table-column align="left" label="工单编号" prop="工单编号" width="120" />
  207. <el-table-column align="left" label="产品名称" prop="产品名称" width="240" />
  208. <el-table-column align="left" label="印件及工序" prop="印件及工序" width="320"/>
  209. <el-table-column align="left" label="标牌号" prop="标牌号" width="80"/>
  210. <el-table-column align="left" label="产量" prop="产量" width="100"/>
  211. <el-table-column align="left" label="制程废品" prop="制程废品" width="100" />
  212. <el-table-column align="left" label="制程次品" prop="制程次品" width="100" />
  213. <el-table-column align="left" label="前工序废" prop="前工序废" width="100" />
  214. <el-table-column align="left" label="来料异常" prop="来料异常" width="100"/>
  215. <el-table-column align="left" label="装版工时" prop="装版工时" width="100" />
  216. <el-table-column align="left" label="保养工时" prop="保养工时" width="100" />
  217. <el-table-column align="left" label="打样工时" prop="打样工时" width="100"/>
  218. <el-table-column align="left" label="异常停机工时" prop="异常停机工时" width="120"/>
  219. <el-table-column align="left" label="通电工时" prop="通电工时" width="100"/>
  220. <el-table-column align="left" label="码开始行" prop="码开始行" width="100" />
  221. <el-table-column align="left" label="码结束行" prop="码结束行" width="100" />
  222. <el-table-column align="left" label="码包" prop="码包" width="100" />
  223. <el-table-column align="left" label="主电表" prop="主电表" width="100"/>
  224. <el-table-column align="left" label="辅电表" prop="辅电表" width="100" />
  225. <el-table-column align="left" label="色度数" prop="色度数" width="100" />
  226. </el-table>
  227. </el-tab-pane>
  228. <el-tab-pane label="检验记录" @click="showTable('技术资料附件')" name="fourth">
  229. <el-table ref="multipleTable"
  230. :row-style="{ height: '20px' }"
  231. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  232. :header-cell-style="{ padding: '0px' }"
  233. :show-overflow-tooltip="true"
  234. highlight-current-row="true"
  235. style="width: 100%;height: 400px" border tooltip-effect="dark" :data="JYData" row-key="ID" @selection-change="handleSelectionChange">
  236. <!-- <el-table-column type="selection" width="55" />-->
  237. <el-table-column align="left" label="工单编号" prop="工单编号" width="120"/>
  238. <el-table-column align="left" label="印件号" prop="印件号" width="120" />
  239. <el-table-column align="left" label="工序名称" prop="工序名称" width="330" />
  240. <el-table-column align="left" label="检验项目" prop="检验项目" width="120"/>
  241. <el-table-column
  242. v-for="time in columnNames"
  243. :key="time"
  244. :label="time"
  245. :prop="time"
  246. align="center"
  247. width="120"
  248. ></el-table-column>
  249. </el-table>
  250. </el-tab-pane>
  251. </el-tabs>
  252. <!-- <div class="gva-pagination">
  253. <el-pagination
  254. layout="total, sizes, prev, pager, next, jumper"
  255. :current-page="page"
  256. :page-size="pageSize"
  257. :page-sizes="[10, 30, 50, 100]"
  258. :total="total"
  259. @current-change="handleCurrentChange"
  260. @size-change="handleSizeChange"
  261. />
  262. </div> -->
  263. </div>
  264. <el-dialog v-model="dialogFormVisible" :before-close="closeDialog" :title="type==='create'?'添加':'修改'" destroy-on-close>
  265. <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
  266. <el-tab-pane label="当日上报产量" @click="showTable('工艺资料')" name="first">
  267. <el-table ref="multipleTable"
  268. :show-overflow-tooltip="true"
  269. :row-style="{ height: '20px' }"
  270. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  271. :header-cell-style="{ padding: '0px' }"
  272. highlight-current-row="true"
  273. style="width: 100%;height: 400px" border tooltip-effect="dark" :data="gytableData" row-key="ID" @selection-change="handleSelectionChange">
  274. <el-table-column type="selection" width="55" />
  275. <el-table-column align="left" label="选择" prop="工单编号" width="100"/>
  276. <el-table-column align="left" label="产品名称" prop="重点工序" width="100"/>
  277. <el-table-column align="left" label="工序" prop="工序备注" width="240"/>
  278. <el-table-column align="left" label="备注" prop="机组" width="100"/>
  279. <el-table-column align="left" label="产量" prop="小时产能" width="100"/>
  280. <el-table-column align="left" label="千件工价" prop="生产工时" width="100"/>
  281. <el-table-column align="left" label="日定额" prop="辅助工时" width="100"/>
  282. <el-table-column align="left" label="补产标准" prop="印刷方式" width="100"/>
  283. <el-table-column align="left" label="难度系数" prop="版距" width="100"/>
  284. <el-table-column align="left" label="印刷方式" prop="创建用户" width="120"/>
  285. <el-table-column align="left" label="组员1" prop="Gy0_gxh" width="240" />
  286. <el-table-column align="left" label="组员2" prop="gy0_gxmc" width="240" />
  287. <el-table-column align="left" label="组员3" prop="add_gxmc" width="240" />
  288. <el-table-column align="left" label="组员4" prop="Gy0_Ks" width="240" />
  289. <el-table-column align="left" label="组员5" prop="Gy0_ls" width="100" />
  290. <el-table-column align="left" label="组员6" prop="备注" width="100" />
  291. <el-table-column align="left" label="组员7" prop="工价系数" width="100" />
  292. <el-table-column align="left" label="组员8" prop="损耗系数" width="100" />
  293. <el-table-column align="left" label="组员9" prop="Gy0_Ms" width="100" />
  294. <el-table-column align="left" label="组员10" prop="人工检_正品版" width="120" />
  295. <el-table-column align="left" label="制程废品" prop="Sys_id" width="100" />
  296. <el-table-column align="left" label="制程次品" prop="建档日期" width="100" />
  297. <el-table-column align="left" label="前工序废" prop="更新日期" width="100" />
  298. <el-table-column align="left" label="来料异常" prop="YB_方案" width="100"/>
  299. <el-table-column align="left" label="装版工时" prop="YB_Yjno" width="100" />
  300. <el-table-column align="left" label="保养工时" prop="印版类别" width="100" />
  301. <el-table-column align="left" label="打样工时" prop="存货编码" width="100"/>
  302. <el-table-column align="left" label="异常停机工时" prop="印版名称" width="120"/>
  303. <el-table-column align="left" label="通电工时" prop="考核印数" width="100"/>
  304. <el-table-column align="left" label="码开始行" prop="Sys_id" width="100" />
  305. <el-table-column align="left" label="码结束行" prop="建档日期" width="100" />
  306. <el-table-column align="left" label="码包" prop="更新日期" width="100" />
  307. <el-table-column align="left" label="主电表" prop="YB_方案" width="100"/>
  308. <el-table-column align="left" label="辅电表" prop="YB_Yjno" width="100" />
  309. <el-table-column align="left" label="色度数" prop="印版类别" width="100" />
  310. <el-table-column align="left" label="用户" prop="YB_Yjno" width="100" />
  311. <el-table-column align="left" label="更新时间" prop="印版类别" width="100" />
  312. </el-table>
  313. </el-tab-pane>
  314. <el-tab-pane label="当日制程检验记录" @click="showTable('印件资料')" name="second">
  315. <el-table ref="multipleTable"
  316. :row-style="{ height: '20px' }"
  317. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  318. :header-cell-style="{ padding: '0px' }"
  319. :show-overflow-tooltip="true"
  320. highlight-current-row="true"
  321. style="width: 100%;height: 400px" border tooltip-effect="dark" :data="drzcData" row-key="ID" @selection-change="handleSelectionChange">
  322. <el-table-column type="selection" width="55" />
  323. <el-table-column align="left" label="工单编号" prop="工单编号" width="120"/>
  324. <el-table-column align="left" label="印件号" prop="印件号" width="120" />
  325. <el-table-column align="left" label="工序名称" prop="工序名称" width="330" />
  326. <el-table-column align="left" label="检验项目" prop="检验项目" width="120"/>
  327. <el-table-column
  328. v-for="time in columnNames"
  329. :key="time"
  330. :label="time"
  331. :prop="time"
  332. align="center"
  333. width="120"
  334. ></el-table-column>
  335. </el-table>
  336. </el-tab-pane>
  337. </el-tabs>
  338. </el-dialog>
  339. <el-dialog v-model="detailShow" style="width: 800px" lock-scroll :before-close="closeDetailShow" title="机台班组维护" destroy-on-close>
  340. <el-table ref="multipleTable"
  341. :row-style="{ height: '20px' }"
  342. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  343. :header-cell-style="{ padding: '0px' }"
  344. :show-overflow-tooltip="true"
  345. highlight-current-row="true" @row-click="BZhandle"
  346. style="width: 100%;height: 250px" border tooltip-effect="dark"
  347. :data="bzData" row-key="ID" @selection-change="BZSelectionChange">
  348. <el-table-column type="selection" width="55" />
  349. <el-table-column align="left" label="机台" prop="JTMC" width="120"/>
  350. <el-table-column align="left" label="班组" prop="班组号" width="120"/>
  351. <el-table-column align="left" label="组员1" prop="0" width="120"/>
  352. <el-table-column align="left" label="组员2" prop="1" width="120"/>
  353. <el-table-column align="left" label="组员3" prop="2" width="120"/>
  354. <el-table-column align="left" label="组员4" prop="3" width="160"/>
  355. <el-table-column align="left" label="组员5" prop="4" width="160"/>
  356. <el-table-column align="left" label="组员6" prop="5" width="120"/>
  357. <el-table-column align="left" label="组员7" prop="6" width="120"/>
  358. <el-table-column align="left" label="组员8" prop="7" width="120"/>
  359. <el-table-column align="left" label="组员9" prop="8" width="120"/>
  360. <el-table-column align="left" label="特殊组员" prop="9" width="120"/>
  361. <el-table-column align="left" label="UNIQID" prop="ID" width="120"/>
  362. </el-table>
  363. <el-row :gutter="20">
  364. <el-col :span="10">
  365. <el-form-item label="机台编号" prop="id">
  366. <el-select v-model="selectedOption" placeholder="请选择">
  367. <el-option
  368. v-for="item in dropdownOptions"
  369. :key="item.value"
  370. :label="item.label"
  371. :value="item.value"
  372. ></el-option>
  373. </el-select>
  374. </el-form-item>
  375. </el-col>
  376. <el-col :span="10">
  377. <el-form-item label="班组编号" prop="id">
  378. <el-input v-model="BZMC" :clearable="true" placeholder="2023.12.14" />
  379. </el-form-item>
  380. </el-col>
  381. </el-row>
  382. <div class="groupbox">
  383. <span class="grouptitle">组员及分配比例</span>
  384. <el-row :gutter="10" style="margin-top: 10px;">
  385. <el-col :span="2">
  386. <span></span>
  387. </el-col>
  388. <el-col :span="2">
  389. </el-col>
  390. <el-col :span="2">
  391. </el-col>
  392. <el-col :span="2">
  393. </el-col>
  394. <el-col :span="2">
  395. </el-col>
  396. <el-col :span="2">
  397. </el-col>
  398. <el-col :span="2">
  399. </el-col>
  400. <el-col :span="2">
  401. </el-col>
  402. <el-col :span="2">
  403. </el-col>
  404. <el-col :span="2">
  405. </el-col>
  406. <el-col :span="2">
  407. <el-form-item label="特殊组员" prop="id">
  408. </el-form-item>
  409. </el-col>
  410. </el-row>
  411. <el-row :gutter="10" style="margin-top: 10px;">
  412. <el-col :span="2">
  413. <span></span>
  414. </el-col>
  415. <el-col :span="4">
  416. <el-input v-model="formDatas.code1" :clearable="true" placeholder="11.0" />
  417. </el-col>
  418. <el-col :span="4">
  419. <el-input v-model="formDatas.code2" :clearable="true" placeholder="打包废纸" />
  420. </el-col>
  421. <el-col :span="4">
  422. <el-input v-model="formDatas.code3" :clearable="true" placeholder="是" />
  423. </el-col>
  424. <el-col :span="4">
  425. <el-input v-model="formDatas.code4" :clearable="true" placeholder="是" />
  426. </el-col>
  427. <!-- <el-col :span="2">
  428. <el-input v-model="formData.name" :clearable="true" placeholder="瞿春生" />
  429. </el-col>
  430. <el-col :span="2">
  431. <el-input v-model="percentage" :clearable="true" placeholder="11.0" />
  432. </el-col>
  433. <el-col :span="2">
  434. <el-input v-model="formData.qczl_NumDesc" :clearable="true" placeholder="打包废纸" />
  435. </el-col>
  436. <el-col :span="2">
  437. <el-input v-model="formData.qczl_NumDesc" :clearable="true" placeholder="是" />
  438. </el-col>
  439. <el-col :span="2">
  440. <el-input v-model="formData.qczl_NumDesc" :clearable="true" placeholder="ZI00401" />
  441. </el-col>
  442. <el-col :span="2">
  443. <el-input v-model="formData.qczl_NumDesc" :clearable="true" placeholder="瞿春生" />
  444. </el-col>
  445. <el-col :span="2">
  446. <el-input v-model="formData.qczl_NumDesc" :clearable="true" placeholder="11.0" />
  447. </el-col>
  448. <el-col :span="2">
  449. <el-input v-model="formData.qczl_NumDesc" :clearable="true" placeholder="11.0" />
  450. </el-col>
  451. <el-col :span="2">
  452. <el-input v-model="formData.qczl_NumDesc" :clearable="true" placeholder="11.0" />
  453. </el-col> -->
  454. </el-row>
  455. <el-row :gutter="10" style="margin-top: 10px;">
  456. <el-col :span="2">
  457. <span></span>
  458. </el-col>
  459. <el-col :span="4">
  460. <el-input v-model="formDatas.name1" :clearable="true" placeholder="ZI00401" />
  461. </el-col>
  462. <el-col :span="4">
  463. <el-input v-model="formDatas.name2" :clearable="true" placeholder="瞿春生" />
  464. </el-col>
  465. <el-col :span="4">
  466. <el-input v-model="formDatas.name3" :clearable="true" placeholder="11.0" />
  467. </el-col>
  468. <el-col :span="4">
  469. <el-input v-model="formDatas.name4" :clearable="true" placeholder="打包废纸" />
  470. </el-col>
  471. <!-- <el-col :span="2">
  472. <el-input v-model="formData.qczl_NumDesc" :clearable="true" placeholder="是" />
  473. </el-col>
  474. <el-col :span="2">
  475. <el-input v-model="formData.qczl_NumDesc" :clearable="true" placeholder="ZI00401" />
  476. </el-col>
  477. <el-col :span="2">
  478. <el-input v-model="formData.qczl_NumDesc" :clearable="true" placeholder="瞿春生" />
  479. </el-col>
  480. <el-col :span="2">
  481. <el-input v-model="formData.qczl_NumDesc" :clearable="true" placeholder="11.0" />
  482. </el-col>
  483. <el-col :span="2">
  484. <el-input v-model="formData.qczl_NumDesc" :clearable="true" placeholder="11.0" />
  485. </el-col>
  486. <el-col :span="2">
  487. <el-input v-model="formData.qczl_NumDesc" :clearable="true" placeholder="11.0" />
  488. </el-col> -->
  489. </el-row>
  490. <el-row :gutter="10" style="margin-top: 10px;">
  491. <el-col :span="2">
  492. <span></span>
  493. </el-col>
  494. <el-col :span="4">
  495. <el-input v-model="formDatas.percentage1" :clearable="true" placeholder="ZI00401" />
  496. </el-col>
  497. <el-col :span="4">
  498. <el-input v-model="formDatas.percentage2" :clearable="true" placeholder="瞿春生" />
  499. </el-col>
  500. <el-col :span="4">
  501. <el-input v-model="formDatas.percentage3" :clearable="true" placeholder="11.0" />
  502. </el-col>
  503. <el-col :span="4">
  504. <el-input v-model="formDatas.percentage4" :clearable="true" placeholder="打包废纸" />
  505. </el-col>
  506. <!-- <el-col :span="2">
  507. <el-input v-model="formData.qczl_NumDesc" :clearable="true" placeholder="是" />
  508. </el-col>
  509. <el-col :span="2">
  510. <el-input v-model="formData.qczl_NumDesc" :clearable="true" placeholder="ZI00401" />
  511. </el-col>
  512. <el-col :span="2">
  513. <el-input v-model="formData.qczl_NumDesc" :clearable="true" placeholder="瞿春生" />
  514. </el-col>
  515. <el-col :span="2">
  516. <el-input v-model="formData.qczl_NumDesc" :clearable="true" placeholder="11.0" />
  517. </el-col>
  518. <el-col :span="2">
  519. <el-input v-model="formData.qczl_NumDesc" :clearable="true" placeholder="11.0" />
  520. </el-col>
  521. <el-col :span="2">
  522. <el-input v-model="formData.qczl_NumDesc" :clearable="true" placeholder="11.0" />
  523. </el-col> -->
  524. </el-row>
  525. </div>
  526. </el-dialog>
  527. <el-dialog
  528. v-model="dianjianVisible"
  529. title="选择"
  530. destroy-on-close
  531. width="1300px"
  532. style="height: 110%;"
  533. >
  534. <el-row :gutter="0">
  535. <el-col :span="4">
  536. <el-form-item label="设备编号" prop="id">
  537. <el-input v-model="formData.sczl_gdbh" :clearable="true" placeholder="2023.12.14" />
  538. </el-form-item>
  539. </el-col>
  540. <el-col :span="20">
  541. <el-row :gutter="20">
  542. <el-col :span="5">
  543. <el-input v-model="formData.sczl_bzdh" :clearable="true" placeholder="ZT01733" />
  544. </el-col>
  545. </el-row>
  546. </el-col>
  547. </el-row>
  548. <div style="display: flex;">
  549. <div style="flex: 1;">
  550. <el-aside width="250px" style="margin: 0;">
  551. <div class="JKWTree-tree" style="height: 100%; border-right: 1px solid #ebeef5;">
  552. <el-tree :data="dianjiantreeData" :props="defaultProps" highlight-current="true"
  553. @node-click="dianjianNodeClick" @node-dblclick="handleNodeDoubleClick"></el-tree>
  554. </div>
  555. </el-aside>
  556. </div>
  557. <div style="flex: 1; margin: 0;">
  558. <el-table
  559. tooltip-effect="dark"
  560. :data="dianjianselectData"
  561. row-key="ID"
  562. highlight-current-row="true"
  563. border @row-click="dianjianhandle"
  564. style="width:100%; height:400px;"
  565. @row-dblclick="handleSelectClick"
  566. :row-class-name="rowClassName"
  567. >
  568. <el-table-column
  569. prop="检验项目"
  570. label="检验项目"
  571. width="180"
  572. />
  573. <el-table-column
  574. prop="点检方法"
  575. label="点检方法"
  576. width="180"
  577. />
  578. <el-table-column
  579. label="正常"
  580. width="80"
  581. >
  582. <el-checkbox v-model="dianjianselectData.zc" :indeterminate="isIndeterminate" @change="handleCheckAllChange" ></el-checkbox>
  583. </el-table-column>
  584. <el-table-column
  585. label="异常"
  586. width="80"
  587. >
  588. <el-checkbox v-model="dianjianselectData.yc" :indeterminate="isIndeterminate" @change="handleCheckAllChange"></el-checkbox>
  589. </el-table-column>
  590. <el-table-column
  591. label="备注说明"
  592. width="180"
  593. />
  594. <el-table-column
  595. v-slot="scope"
  596. label="不检测"
  597. width="80"
  598. >
  599. <el-checkbox v-model="scope.row.notjc" :indeterminate="isIndeterminate" @change="handleCheckAllChange" ></el-checkbox>
  600. </el-table-column>
  601. </el-table>
  602. <el-row :gutter="20">
  603. <el-col :span="20">
  604. <el-input v-model="pandingfangfa" style="height: 50px;" :clearable="true" />
  605. </el-col>
  606. </el-row>
  607. </div>
  608. </div>
  609. </el-dialog>
  610. <el-dialog
  611. v-model="yinbanVisible"
  612. title="选择"
  613. destroy-on-close
  614. width="1300px"
  615. style="height: 110%;"
  616. >
  617. <el-row :gutter="0">
  618. <el-col :span="4">
  619. <el-form-item label="工单编号" prop="id">
  620. <el-input v-model="formData.sczl_gdbh" :clearable="true" placeholder="2023.12.14" />
  621. </el-form-item>
  622. </el-col>
  623. <el-col :span="20">
  624. <el-row :gutter="20">
  625. <el-col :span="5">
  626. <el-input v-model="formData.sczl_bzdh" :clearable="true" placeholder="ZT01733" />
  627. </el-col>
  628. </el-row>
  629. </el-col>
  630. </el-row>
  631. <div style="display: flex;">
  632. <div style="flex: 1;">
  633. <el-aside width="250px" style="margin: 0;">
  634. <div class="JKWTree-tree" style="height: 100%; border-right: 1px solid #ebeef5;">
  635. <el-tree :data="yinbantreeData" :props="defaultProps" highlight-current="true"
  636. @node-click="yinbanNodeClick" @node-dblclick="handleNodeDoubleClick"></el-tree>
  637. </div>
  638. </el-aside>
  639. </div>
  640. <div style="flex: 1; margin: 0;">
  641. <el-table
  642. tooltip-effect="dark"
  643. :data="yinbanselectData"
  644. row-key="ID"
  645. highlight-current-row="true"
  646. border @row-click="dianjianhandle"
  647. style="width:1000px; height:400px;"
  648. @row-dblclick="handleSelectClick"
  649. :row-class-name="rowClassName"
  650. >
  651. <el-table-column
  652. prop="存货编码"
  653. label="存货编码"
  654. width="180"
  655. />
  656. <el-table-column
  657. prop="存货名称"
  658. label="存货名称"
  659. width="180"
  660. />
  661. <el-table-column
  662. prop="印版名称"
  663. label="印版名称"
  664. width="180"
  665. />
  666. <el-table-column
  667. prop="供方批号"
  668. label="供方批号"
  669. width="180"
  670. />
  671. <el-table-column
  672. prop="制造日期"
  673. label="制造日期"
  674. width="180"
  675. />
  676. <el-table-column
  677. prop="印数"
  678. label="印数"
  679. width="180"
  680. />
  681. <el-table-column
  682. prop="印版类别"
  683. label="印版类别"
  684. width="180"
  685. />
  686. <el-table-column
  687. prop="客户编号"
  688. label="客户编号"
  689. width="180"
  690. />
  691. <el-table-column
  692. prop="客户名称"
  693. label="客户名称"
  694. width="180"
  695. />
  696. <el-table-column
  697. prop="产品编号"
  698. label="产品编号"
  699. width="180"
  700. />
  701. <el-table-column
  702. prop="产品名称"
  703. label="产品名称"
  704. width="180"
  705. />
  706. <el-table-column
  707. prop="点检方法"
  708. label="备注说明"
  709. width="180"
  710. />
  711. <el-table-column
  712. prop="点检方法"
  713. label="备注说明"
  714. width="180"
  715. />
  716. </el-table>
  717. <!-- <el-row :gutter="20">
  718. <el-col :span="20">
  719. <el-input v-model="pandingfangfa" style="height: 50px;" :clearable="true" />
  720. </el-col>
  721. </el-row> -->
  722. </div>
  723. </div>
  724. </el-dialog>
  725. </el-main>
  726. </el-container>
  727. </el-container>
  728. </div>
  729. </template>
  730. <script setup>
  731. import {
  732. createCompany,
  733. deleteCompany,
  734. deleteCompanyByIds,
  735. updateCompany,
  736. findCompany,
  737. getCompanyList
  738. } from '@/api/company'
  739. import {
  740. facilityTab,
  741. facilitychanLiang,
  742. facilityInspect,
  743. facilityProduction,
  744. facilityTeam,
  745. facilityMachineList,
  746. facilitySpotCheckItem,
  747. facilityInspectionItem,
  748. reportProduceInfo,
  749. reportName,
  750. reportInfo,
  751. reportMachineMac,
  752. facilityWorklist,
  753. setProcessStatus,
  754. submitDailyProduction,
  755. facilityDetail,
  756. inspectionRecord,
  757. getYg,
  758. facilityProcedure,
  759. facilityPrintGetTab,
  760. facilityPrintDetail
  761. } from '@/api/jixiaoguanli/jitairibaobiao'
  762. import {
  763. demoCustomer
  764. } from "@/api/demo";
  765. // 全量引入格式化工具 请按需保留
  766. import { getDictFunc, formatDate, formatBoolean, filterDict, ReturnArrImg, onDownloadFile } from '@/utils/format'
  767. import { ElMessage, ElMessageBox } from 'element-plus'
  768. import { ref, reactive } from 'vue'
  769. defineOptions({
  770. name: 'Company'
  771. })
  772. let checked1=ref(false)
  773. let checked2=ref(false)
  774. let checked3=ref(false)
  775. const detailData = reactive([])
  776. const treeData=ref([])
  777. const yinbantreeData=ref([])
  778. let dianjiantreeData;
  779. let JTMC=ref()
  780. let productCode=ref(104601001)
  781. const sbzyData = reactive([])
  782. const FPData = reactive([])
  783. const CLMXData = reactive([])
  784. let JYData = reactive([])
  785. const selectData = ref([])
  786. const handleNodeClick = (nodeData,node) => {
  787. //存放当前节点的nodeId
  788. if (nodeData.level === 1) {
  789. console.log(node.label); // 第一级节点
  790. } else if (nodeData.level === 2) {
  791. console.log(node.label); // 第二级节点
  792. JTMC=node.label.split("【")[0]
  793. FacilityProduction()
  794. console.log(JTMC)
  795. } else if (nodeData.level === 3) {
  796. console.log(node.label); // 第三级节点
  797. }
  798. }
  799. //当前生产订单
  800. const FacilityProduction = async () => {
  801. const response = await facilityProduction({machine:JTMC});
  802. if (response.code === 0) {
  803. console.log(response)
  804. // 填充formData对象的基本字段
  805. formData.value.工单编号 = response.data[0].工单编号;
  806. formData.value.印件编号 = response.data[0].印件号;
  807. formData.value.工序名称 = response.data[0].工序名称;
  808. formData.value.产品名称 = response.data[0].产品名称;
  809. FacilityTeam(JTMC)
  810. // 填充sczl_bh和sczl_name字段
  811. for (let i = 1; i <= 10; i++) {
  812. const sczl_bh = `sczl_bh${i}`;
  813. const sczl_name = `sczl_name${i}`;
  814. if (response.data[sczl_bh] ) {
  815. formData.value[sczl_bh] = response.data[sczl_bh]['员工编号'];
  816. formData.value[sczl_name] = response.data[sczl_bh]['员工姓名'];
  817. console.log(response.data[sczl_bh]['员工姓名'])
  818. console.log(formData.value.sczl_bh)
  819. // console.log(sczl_name)
  820. } else {
  821. // 如果字段不存在,可以在这里进行处理
  822. // console.log('2');
  823. // formData.value[sczl_bh] = response.data[sczl_bh]['员工编号'];
  824. // formData.value[sczl_name] = response.data[sczl_bh]['员工姓名'];
  825. // console.log(formData.value.sczl_bh)
  826. // console.log(sczl_name)
  827. }
  828. }
  829. // 输出填充后的formData对象
  830. // console.log(formData.value);
  831. }
  832. // getTableData()
  833. }
  834. //设备工作清单
  835. const FacilityWorklist = async () => {
  836. const response = await facilityWorklist({machine:JTMC});
  837. if (response.code === 0) {
  838. console.log(response)
  839. sbzyData.splice(0, sbzyData.length, ...response.data);
  840. const res = await facilityProcedure({ Gd_gdbh: sbzyData[0]['工单编号|质量信息'].substring(0, 7) })
  841. console.log(res)
  842. if (res.code === 0) {
  843. selectData.value = res.data
  844. }
  845. }
  846. }
  847. //检验记录
  848. const InspectionRecord = async () => {
  849. console.log(formData.value.班组)
  850. const response = await inspectionRecord({machine:JTMC,Gd_gdbh:formData.value.工单编号,team:formData.value.班组});
  851. console.log(response)
  852. if(response.code==0){
  853. // 提取 inspectiontime 作为列名
  854. // Extract inspectiontime as columnNames
  855. columnNames = response.data.inspectiontime;
  856. // Populate drzcData with row data
  857. for (const key in response.data) {
  858. if (key !== 'inspectiontime') {
  859. const item = response.data[key];
  860. const rowData = {
  861. '工单编号': item['工单编号'],
  862. '印件号': item['印件号'],
  863. '工序名称': item['工序名称'],
  864. '检验项目': item['检验项目']
  865. };
  866. // Initialize time columns with '—'
  867. columnNames.forEach(time => {
  868. rowData[time] = '';
  869. });
  870. // Split inspectresult and fill the corresponding time columns
  871. const results = item['inspectresult'].split(',');
  872. results.forEach(result => {
  873. if (columnNames.includes(result)) {
  874. rowData[result] = '√';
  875. }else{rowData[result] = ''}
  876. });
  877. // Add the row data to drzcData
  878. JYData.push(rowData);
  879. }
  880. }
  881. console.log(JYData);
  882. }
  883. }
  884. //当班产量明细
  885. const FacilityDetail = async () => {
  886. const response = await facilityDetail({ machine: JTMC, Gd_gdbh: formData.value.工单编号, team: formData.value.班组 });
  887. if (response.code === 0) {
  888. console.log(response);
  889. CLMXData.splice(0, CLMXData.length, ...Object.values(response.data));
  890. }
  891. };
  892. //员工编号回车事件
  893. const getygsubmit = (event, inputName) => {
  894. console.log(inputName)
  895. let combinedString = 'sczl_bh' + inputName;
  896. console.log(combinedString)
  897. // let variableName = 'sczl_gdbh'+inputName;
  898. let variableValue = eval('formData3.value.' + combinedString);
  899. console.log(variableValue)
  900. GetYg(variableValue,inputName)
  901. }
  902. //获取员工信息
  903. const GetYg = async (value,inputName) => {
  904. const response = await getYg({sczl_bh:value});
  905. console.log(response)
  906. if (response.code === 0) {
  907. console.log(response.data.ygxm)
  908. let Bname = 'sczl_name' + inputName;
  909. formData3.value[Bname]=response.data.ygxm
  910. // console.log(formData.value[Bname])
  911. }
  912. }
  913. // 验证规则
  914. const rule = reactive({
  915. })
  916. const searchRule = reactive({
  917. createdAt: [
  918. { validator: (rule, value, callback) => {
  919. if (searchInfo.value.startCreatedAt && !searchInfo.value.endCreatedAt) {
  920. callback(new Error('请填写结束日期'))
  921. } else if (!searchInfo.value.startCreatedAt && searchInfo.value.endCreatedAt) {
  922. callback(new Error('请填写开始日期'))
  923. } else if (searchInfo.value.startCreatedAt && searchInfo.value.endCreatedAt && (searchInfo.value.startCreatedAt.getTime() === searchInfo.value.endCreatedAt.getTime() || searchInfo.value.startCreatedAt.getTime() > searchInfo.value.endCreatedAt.getTime())) {
  924. callback(new Error('开始日期应当早于结束日期'))
  925. } else {
  926. callback()
  927. }
  928. }, trigger: 'change' }
  929. ],
  930. })
  931. const elFormRef = ref()
  932. const elSearchFormRef = ref()
  933. // =========== 表格控制部分 ===========
  934. const page = ref(1)
  935. const total = ref(0)
  936. const pageSize = ref(10)
  937. const tableData = ref([])
  938. const searchInfo = ref({})
  939. // 重置
  940. const onReset = () => {
  941. searchInfo.value = {}
  942. getTableData()
  943. }
  944. // 搜索
  945. const onSubmit = () => {
  946. elSearchFormRef.value?.validate(async(valid) => {
  947. if (!valid) return
  948. page.value = 1
  949. pageSize.value = 10
  950. getTableData()
  951. })
  952. }
  953. // 分页
  954. const handleSizeChange = (val) => {
  955. pageSize.value = val
  956. getTableData()
  957. }
  958. // 修改页面容量
  959. const handleCurrentChange = (val) => {
  960. page.value = val
  961. getTableData()
  962. }
  963. const getTableData = async () => {
  964. const response = await facilityTab();
  965. if (response.code === 0 && response.data) {
  966. const workshops = response.data; // 车间数据
  967. // 在推送新项之前将 treeData 重置为空数组
  968. treeData.value = []; // 使用 .value 访问响应式引用的值
  969. for (const workshopName in workshops) {
  970. const workshopNode = {
  971. label: workshopName,
  972. children: [],
  973. level: 1 // 添加层级属性
  974. };
  975. const machines = workshops[workshopName]; // 车间下的机器
  976. for (const machineName in machines) {
  977. const machineNode = {
  978. label: machineName,
  979. children: [],
  980. level: 2, // 添加层级属性
  981. parentNode: workshopNode
  982. };
  983. // Now that machineNode is initialized, you can refer to it
  984. const childrenNodes = machines[machineName].map(dateTime => {
  985. const dateOnly = dateTime.split(' ')[0];
  986. return {
  987. label: dateOnly,
  988. level: 3, // 添加层级属性
  989. parentNode: machineNode
  990. };
  991. });
  992. // Assign the childrenNodes to the machineNode's children property
  993. machineNode.children = childrenNodes;
  994. // Finally, push the machineNode to the workshopNode's children array
  995. workshopNode.children.push(machineNode);
  996. }
  997. // 将 workshopNode 推送到响应式 treeData 数组
  998. treeData.value.push(workshopNode);
  999. }
  1000. }
  1001. };
  1002. // 查询
  1003. const getTableList = async() => {
  1004. const table = await getCompanyList({ page: page.value, pageSize: pageSize.value, ...searchInfo.value })
  1005. if (table.code === 0) {
  1006. tableData.value = table.data.list
  1007. total.value = table.data.total
  1008. page.value = table.data.page
  1009. pageSize.value = table.data.pageSize
  1010. }
  1011. }
  1012. getTableData()
  1013. //删除
  1014. function onDel() {
  1015. }
  1016. import { nextTick } from 'vue';
  1017. //设备点检
  1018. function ondianjian() {
  1019. getSpotCheckItem(JTMC).then(treeData => {
  1020. if (treeData) {
  1021. // 如果获取成功,treeData 就是我们需要的树形结构数据
  1022. dianjiantreeData = treeData;
  1023. console.log('222');
  1024. console.log(dianjiantreeData);
  1025. // 使用 nextTick 来确保在更新 dianjianVisible 后立即刷新视图
  1026. nextTick(() => {
  1027. dianjianVisible.value = true;
  1028. });
  1029. // 这里可以处理treeData,例如将其赋值给某个状态管理变量或者用于渲染界面
  1030. } else {
  1031. // 如果获取失败,则treeData为null
  1032. console.log('获取巡检项目树形结构数据失败');
  1033. }
  1034. });
  1035. }
  1036. const onyinban = async() => {
  1037. const res = await facilityPrintGetTab({productCode:productCode.value})
  1038. if(res.code===0){
  1039. yinbantreeData.value=[{
  1040. label:'产品印版库',
  1041. children:res.data.map(item=>({
  1042. label:item.印版分类,
  1043. code:item.编号
  1044. }))
  1045. }]
  1046. console.log(res.data.map(item=>({
  1047. label:item.印版分类,
  1048. code:item.编号
  1049. })))
  1050. yinbanVisible.value = true;
  1051. }
  1052. }
  1053. // function onyinban() {
  1054. // getSpotCheckItem(productCode).then(treeData => {
  1055. // if (treeData) {
  1056. // // 如果获取成功,treeData 就是我们需要的树形结构数据
  1057. // dianjiantreeData = treeData;
  1058. // console.log('222');
  1059. // console.log(dianjiantreeData);
  1060. // // 使用 nextTick 来确保在更新 dianjianVisible 后立即刷新视图
  1061. // nextTick(() => {
  1062. // dianjianVisible.value = true;
  1063. // });
  1064. // // 这里可以处理treeData,例如将其赋值给某个状态管理变量或者用于渲染界面
  1065. // } else {
  1066. // // 如果获取失败,则treeData为null
  1067. // console.log('获取巡检项目树形结构数据失败');
  1068. // }
  1069. // });
  1070. // }
  1071. //获取设备点检->检验项目
  1072. const FacilityInspectionItem = async (value) => {
  1073. try {
  1074. // 调用接口获取巡检项目数据
  1075. const response = await facilityInspectionItem({ unitName: value });
  1076. // 检查接口返回的状态码
  1077. if (response.code === 0) {
  1078. dianjianselectData.splice(0, dianjianselectData.length, ...response.data.map(item=>{
  1079. item.notjc=true;
  1080. item.zc=true;
  1081. item.yc=true;
  1082. return item
  1083. }))
  1084. console.log(dianjianselectData)
  1085. }
  1086. } catch (error) {
  1087. // 捕获并打印异常
  1088. console.error("获取巡检项目数据出错:" + error);
  1089. return null;
  1090. }
  1091. };
  1092. //机台印版领用->右侧详情
  1093. const facilityPrintDetailItem = async (value) => {
  1094. try {
  1095. // 调用接口获取巡检项目数据
  1096. // const response = await facilityPrintDetail({ workOrder: formData.value.工单编号,code:value,productCode:productCode.value });
  1097. const response = await facilityPrintDetail({ workOrder: '2312165',code:'0521',productCode:'104601001' });
  1098. // 检查接口返回的状态码
  1099. if (response.code === 0) {
  1100. console.log(response)
  1101. yinbanselectData.value=response.data
  1102. }
  1103. } catch (error) {
  1104. // 捕获并打印异常
  1105. console.error("获取数据出错:" + error);
  1106. return null;
  1107. }
  1108. };
  1109. //树形结构单机
  1110. const dianjianselectData = reactive([])
  1111. const yinbanselectData = ref([])
  1112. const dianjianNodeClick = (node, check, nodeData) => {
  1113. if (node.children && node.children.length > 0) {
  1114. // 点击的是父节点,且有子节点
  1115. // 执行相应的父节点单击事件处理逻辑
  1116. // 这里可以添加你想要的处理逻辑,比如展开/折叠节点等
  1117. } else {
  1118. // 点击的是子节点,或者没有子节点
  1119. // 执行相应的子节点单击事件处理逻辑
  1120. FacilityInspectionItem(node.label)
  1121. }
  1122. };
  1123. const yinbanNodeClick = (node, check, nodeData) => {
  1124. if (node.children && node.children.length > 0) {
  1125. // 点击的是父节点,且有子节点
  1126. // 执行相应的父节点单击事件处理逻辑
  1127. // 这里可以添加你想要的处理逻辑,比如展开/折叠节点等
  1128. } else {
  1129. // 点击的是子节点,或者没有子节点
  1130. // 执行相应的子节点单击事件处理逻辑
  1131. facilityPrintDetailItem(node.code)
  1132. }
  1133. };
  1134. let pandingfangfa=ref()
  1135. //检验项目单击
  1136. const dianjianhandle = async (val, row) => {
  1137. try {
  1138. console.log(val.判定标准);
  1139. pandingfangfa.value = val.判定标准;
  1140. } catch (error) {
  1141. console.error('An error occurred:', error);
  1142. }
  1143. };
  1144. const rowClassName = (row, column) => {
  1145. try {
  1146. if (row.unchecked) {
  1147. return 'row-yellow';
  1148. }
  1149. return '';
  1150. } catch (error) {
  1151. console.error('An error occurred:', error);
  1152. return '';
  1153. }
  1154. };
  1155. // const isIndeterminate = () => {
  1156. // return (checked1 && !checked2 && checked3) ||
  1157. // (!checked1 && checked2 && !checked3) ||
  1158. // (!checked1 && !checked2 && checked3);
  1159. // };
  1160. // const handleCheckAllChange = () => {
  1161. // if (checked1 && checked2 && checked3) {
  1162. // checked1 = false;
  1163. // checked2 = false;
  1164. // checked3 = false;
  1165. // }
  1166. // };
  1167. // 异步函数,用于获取指定设备的巡检项目,并且将结果格式化为树形结构数据
  1168. const getSpotCheckItem = async (machineName) => {
  1169. try {
  1170. // 调用接口获取巡检项目数据
  1171. const response = await facilitySpotCheckItem({ machine: machineName });
  1172. // 检查接口返回的状态码
  1173. if (response.code === 0) {
  1174. // 构建树形结构数据
  1175. const childrenData = Object.entries(response.data).map(([id, label]) => {
  1176. return {
  1177. id, // 子节点的唯一标识
  1178. label, // 子节点的标签
  1179. children: [] // 初始化子节点数组
  1180. };
  1181. });
  1182. // 创建包含父节点的树形结构数据
  1183. const treeData = [{
  1184. id: machineName, // 父节点的唯一标识
  1185. label: machineName, // 父节点的标签
  1186. children: childrenData // 子节点数据
  1187. }];
  1188. // 返回构建好的树形结构数据
  1189. return treeData;
  1190. } else {
  1191. // 如果接口返回的状态码不是0,打印错误信息
  1192. console.error("接口返回错误:" + response.msg);
  1193. return null;
  1194. }
  1195. } catch (error) {
  1196. // 捕获并打印异常
  1197. console.error("获取巡检项目数据出错:" + error);
  1198. return null;
  1199. }
  1200. };
  1201. // 班组人员及分配比例
  1202. const FacilityTeam = async (value) => {
  1203. const response = await facilityTeam({ machine: value });
  1204. if (response.code === 0) {
  1205. formData.value.班组 = response.data[0]['班组号'];
  1206. if(response.data[0][2]){
  1207. // console.log(response.data[0][2].split(' '));
  1208. for (let i = 1; i <= 3; i++) {
  1209. const sczl_bh = `sczl_bh${i}`;
  1210. const sczl_name = `sczl_name${i}`;
  1211. formData.value[sczl_bh] = response.data[0][i-1].split(' ')[0];
  1212. formData.value[sczl_name] = response.data[0][i-1].split(' ')[1];
  1213. }
  1214. }
  1215. if(response.data[0][0]){
  1216. // console.log(response.data[0][2].split(' '));
  1217. for (let i = 1; i <= 1; i++) {
  1218. const sczl_bh = `sczl_bh${i}`;
  1219. const sczl_name = `sczl_name${i}`;
  1220. formData.value[sczl_bh] = response.data[0][i-1].split(' ')[0];
  1221. formData.value[sczl_name] = response.data[0][i-1].split(' ')[1];
  1222. }
  1223. }
  1224. if(response.data[0][1]){
  1225. // console.log(response.data[0][2].split(' '));
  1226. for (let i = 1; i <= 2; i++) {
  1227. const sczl_bh = `sczl_bh${i}`;
  1228. const sczl_name = `sczl_name${i}`;
  1229. formData.value[sczl_bh] = response.data[0][i-1].split(' ')[0];
  1230. formData.value[sczl_name] = response.data[0][i-1].split(' ')[1];
  1231. }
  1232. }
  1233. if(response.data[0][3]){
  1234. // console.log(response.data[0][2].split(' '));
  1235. for (let i = 1; i <= 4; i++) {
  1236. const sczl_bh = `sczl_bh${i}`;
  1237. const sczl_name = `sczl_name${i}`;
  1238. formData.value[sczl_bh] = response.data[0][i-1].split(' ')[0];
  1239. formData.value[sczl_name] = response.data[0][i-1].split(' ')[1];
  1240. }
  1241. }
  1242. FacilityWorklist()
  1243. InspectionRecord()
  1244. FacilityDetail()
  1245. // 清空 bzData 数组
  1246. bzData.splice(0, bzData.length);
  1247. // 遍历接口返回的数据,并给每个对象添加 JTMC 属性
  1248. const updatedData = response.data.map(item => {
  1249. return { ...item, JTMC: value }; // 添加 JTMC 属性
  1250. });
  1251. // 将更新后的数据添加到 bzData 数组
  1252. bzData.push(...updatedData);
  1253. FPData.push(...updatedData)
  1254. return 1
  1255. }
  1256. };
  1257. //班组维护
  1258. function onBZ() {
  1259. FacilityTeam(JTMC)
  1260. fetchData()
  1261. detailShow.value=true
  1262. console.log('2222')
  1263. }
  1264. // 下拉框选项数据
  1265. const dropdownOptions = ref([]);
  1266. // 选中的选项
  1267. const selectedOption = ref('');
  1268. // 获取接口数据并转换为下拉框需要的格式
  1269. const fetchData = async () => {
  1270. try {
  1271. // Simulate API call
  1272. const response = await facilityMachineList();
  1273. if (response.code === 0) {
  1274. // Transform data format
  1275. const options = response.data.map((item) => ({
  1276. label: item,
  1277. value: item
  1278. }));
  1279. dropdownOptions.value = options;
  1280. // Default to selecting the first option
  1281. const defaultOption = options.find(option => option.value === JTMC);
  1282. if (defaultOption) {
  1283. selectedOption.value = defaultOption.value;
  1284. } else if (options.length > 0) {
  1285. // 如果 myDefaultValue 不在选项中,选择第一个选项
  1286. selectedOption.value = options[0].value;
  1287. }
  1288. }
  1289. } catch (error) {
  1290. console.error('Error fetching data:', error);
  1291. // Handle the error appropriately
  1292. }
  1293. };
  1294. // formData
  1295. let BZMC=ref()
  1296. let lastCellValue=ref()
  1297. let parts =reactive([])
  1298. // 自动化生成的字典(可能为空)以及字段
  1299. const formData= ref({
  1300. 工单编号:'',
  1301. 印件编号:'',
  1302. 工序名称:'',
  1303. 产品名称:'',
  1304. sczl_bh1:'',
  1305. sczl_bh2:'',
  1306. sczl_bh3:'',
  1307. sczl_bh4:'',
  1308. sczl_bh5:'',
  1309. sczl_bh6:'',
  1310. sczl_bh7:'',
  1311. sczl_bh8:'',
  1312. sczl_bh9:'',
  1313. sczl_bh10:'',
  1314. sczl_name1:'',
  1315. sczl_name2:'',
  1316. sczl_name3:'',
  1317. sczl_name4:'',
  1318. sczl_name5:'',
  1319. sczl_name6:'',
  1320. sczl_name7:'',
  1321. sczl_name8:'',
  1322. sczl_name9:'',
  1323. sczl_name10:'',
  1324. })
  1325. const formDatasData= reactive([])
  1326. const formDatas = ref({
  1327. code1:'',
  1328. code2:'',
  1329. code3:'',
  1330. code4:'',
  1331. code5:'',
  1332. code6:'',
  1333. code7:'',
  1334. code8:'',
  1335. code9:'',
  1336. code10:'',
  1337. name1:'',
  1338. name2:'',
  1339. name3:'',
  1340. name4:'',
  1341. name5L:'',
  1342. name6:'',
  1343. name7:'',
  1344. name8:'',
  1345. name9:'',
  1346. name10:'',
  1347. percentage1:'',
  1348. percentage2:'',
  1349. percentage3:'',
  1350. percentage4:'',
  1351. percentage5:'',
  1352. percentage6:'',
  1353. percentage7:'',
  1354. percentage8:'',
  1355. percentage9:'',
  1356. percentage10:'',
  1357. })
  1358. //班组单击
  1359. const BZhandle = (val, row) => {
  1360. formDatas.value = {};
  1361. for (const key in val) {
  1362. if (val[key] === 0) {
  1363. break;
  1364. }
  1365. const parts = val[key].split(/[\s()]+/);
  1366. const code = parts[0];
  1367. const name = parts[1];
  1368. const percentage = parts[2];
  1369. // 根据索引填充不同的字段
  1370. const index = parseInt(key) + 1; // 索引从1开始
  1371. formDatas.value['code' + index] = code;
  1372. formDatas.value['name' + index] = name;
  1373. formDatas.value['percentage' + index] = percentage;
  1374. }
  1375. };
  1376. // ============== 表格控制部分结束 ===============
  1377. // 获取需要的字典 可能为空 按需保留
  1378. const setOptions = async () =>{
  1379. }
  1380. // 获取需要的字典 可能为空 按需保留
  1381. setOptions()
  1382. // 多选数据
  1383. const multipleSelection = ref([])
  1384. // 多选
  1385. const handleSelectionChange = (val) => {
  1386. multipleSelection.value = val
  1387. }
  1388. // 删除行
  1389. const deleteRow = (row) => {
  1390. ElMessageBox.confirm('确定要删除吗?', '提示', {
  1391. confirmButtonText: '确定',
  1392. cancelButtonText: '取消',
  1393. type: 'warning'
  1394. }).then(() => {
  1395. deleteCompanyFunc(row)
  1396. })
  1397. }
  1398. // 批量删除控制标记
  1399. const deleteVisible = ref(false)
  1400. // 多选删除
  1401. const onDelete = async() => {
  1402. const ids = []
  1403. if (multipleSelection.value.length === 0) {
  1404. ElMessage({
  1405. type: 'warning',
  1406. message: '请选择要删除的数据'
  1407. })
  1408. return
  1409. }
  1410. multipleSelection.value &&
  1411. multipleSelection.value.map(item => {
  1412. ids.push(item.ID)
  1413. })
  1414. const res = await deleteCompanyByIds({ ids })
  1415. if (res.code === 0) {
  1416. ElMessage({
  1417. type: 'success',
  1418. message: '删除成功'
  1419. })
  1420. if (tableData.value.length === ids.length && page.value > 1) {
  1421. page.value--
  1422. }
  1423. deleteVisible.value = false
  1424. getTableData()
  1425. }
  1426. }
  1427. // 行为控制标记(弹窗内部需要增还是改)
  1428. const type = ref('')
  1429. // 更新行
  1430. const updateCompanyFunc = async(row) => {
  1431. const res = await findCompany({ ID: row.ID })
  1432. type.value = 'update'
  1433. if (res.code === 0) {
  1434. formData.value = res.data.recompany
  1435. dialogFormVisible.value = true
  1436. }
  1437. }
  1438. const yjupdateCompanyFunc = async(row) => {
  1439. const res = await facilityProcedure({ Gd_gdbh: row['工单编号|质量信息'].substring(0, 7) })
  1440. console.log(res)
  1441. if (res.code === 0) {
  1442. selectData.value = res.data
  1443. }
  1444. }
  1445. // 删除行
  1446. const deleteCompanyFunc = async (row) => {
  1447. const res = await deleteCompany({ ID: row.ID })
  1448. if (res.code === 0) {
  1449. ElMessage({
  1450. type: 'success',
  1451. message: '删除成功'
  1452. })
  1453. if (tableData.value.length === 1 && page.value > 1) {
  1454. page.value--
  1455. }
  1456. getTableData()
  1457. }
  1458. }
  1459. // 弹窗控制标记
  1460. const dialogFormVisible = ref(false)
  1461. const dianjianVisible = ref(false)
  1462. const yinbanVisible = ref(false)
  1463. // 查看详情控制标记
  1464. const detailShow = ref(false)
  1465. const bzData = reactive([])
  1466. // 打开详情弹窗
  1467. const openDetailShow = () => {
  1468. detailShow.value = true
  1469. }
  1470. // 打开详情
  1471. const getDetails = async (row) => {
  1472. // 打开弹窗
  1473. const res = await findCompany({ ID: row.ID })
  1474. if (res.code === 0) {
  1475. formData.value = res.data.recompany
  1476. openDetailShow()
  1477. }
  1478. }
  1479. // 关闭详情弹窗
  1480. const closeDetailShow = () => {
  1481. detailShow.value = false
  1482. // formData.value = {
  1483. // address: '',
  1484. // image: '',
  1485. // name: '',
  1486. // }
  1487. }
  1488. // 打开弹窗
  1489. const openDialog = () => {
  1490. // type.value = 'create'
  1491. console.log('222')
  1492. FacilityInspect()
  1493. dialogFormVisible.value = true
  1494. }
  1495. let drzcData=[]
  1496. let columnNames=[]
  1497. //当日制程检验记录
  1498. const FacilityInspect = async () => {
  1499. const response = await facilityInspect({machine:'JY01#',date:'2024-01-04'});
  1500. console.log(response)
  1501. if(response.code==0){
  1502. // 提取 inspectiontime 作为列名
  1503. // Extract inspectiontime as columnNames
  1504. columnNames = response.data.inspectiontime;
  1505. // Populate drzcData with row data
  1506. for (const key in response.data) {
  1507. if (key !== 'inspectiontime') {
  1508. const item = response.data[key];
  1509. const rowData = {
  1510. '工单编号': item['工单编号'],
  1511. '印件号': item['印件号'],
  1512. '工序名称': item['工序名称'],
  1513. '检验项目': item['检验项目']
  1514. };
  1515. // Initialize time columns with '—'
  1516. columnNames.forEach(time => {
  1517. rowData[time] = '';
  1518. });
  1519. // Split inspectresult and fill the corresponding time columns
  1520. const results = item['inspectresult'].split(',');
  1521. results.forEach(result => {
  1522. if (columnNames.includes(result)) {
  1523. rowData[result] = '√';
  1524. }else{rowData[result] = ''}
  1525. });
  1526. // Add the row data to drzcData
  1527. drzcData.push(rowData);
  1528. }
  1529. }
  1530. console.log(drzcData);
  1531. }
  1532. }
  1533. // 关闭弹窗
  1534. const closeDialog = () => {
  1535. dialogFormVisible.value = false
  1536. formData.value = {
  1537. address: '',
  1538. image: '',
  1539. name: '',
  1540. }
  1541. }
  1542. // 弹窗确定
  1543. const enterDialog = async () => {
  1544. elFormRef.value?.validate( async (valid) => {
  1545. if (!valid) return
  1546. let res
  1547. switch (type.value) {
  1548. case 'create':
  1549. res = await createCompany(formData.value)
  1550. break
  1551. case 'update':
  1552. res = await updateCompany(formData.value)
  1553. break
  1554. default:
  1555. res = await createCompany(formData.value)
  1556. break
  1557. }
  1558. if (res.code === 0) {
  1559. ElMessage({
  1560. type: 'success',
  1561. message: '创建/更改成功'
  1562. })
  1563. closeDialog()
  1564. getTableData()
  1565. }
  1566. })
  1567. }
  1568. </script>
  1569. <style>
  1570. .JKWTree-container {
  1571. display: flex;
  1572. }
  1573. .JKWTree-tree {
  1574. width: 300px;
  1575. background-color: #fff;
  1576. padding: 10px;
  1577. margin-right: 20px;
  1578. }
  1579. .JKWTree-tree h3 {
  1580. font-size: 15px;
  1581. font-weight: 700;
  1582. margin: 10px 0;
  1583. }
  1584. .JKWTree-content {
  1585. flex: 1;
  1586. }
  1587. .groupbox
  1588. {margin:10px;
  1589. width:500px;
  1590. height:500px;
  1591. border:thin solid black;
  1592. padding:10px}
  1593. .grouptitle
  1594. {display:block;
  1595. margin-top:-24px;
  1596. margin-left:20px;
  1597. width:150px;
  1598. text-align:center;
  1599. background-color:white}
  1600. </style>