plm前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1810 lines
65 KiB

3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
1 year ago
2 years ago
1 year ago
3 years ago
2 years ago
3 years ago
1 year ago
2 years ago
3 years ago
1 year ago
3 years ago
2 years ago
1 year ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
2 years ago
3 years ago
1 year ago
2 years ago
1 year ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
1 year ago
1 year ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
3 years ago
1 year ago
3 years ago
  1. <template>
  2. <div class="mod-config" v-highlight-container>
  3. <el-form :inline="true" label-position="top" style="margin-top: 1px; margin-left: 0px;" >
  4. <el-row :gutter="20">
  5. <el-col :span="18">
  6. <el-form-item label="工艺/Process">
  7. <dict-data-select :site="searchData.site" v-if="searchData.site" v-model="sheetData.process" :use-default-value="false" dict-type="bm_process" style="width: 120px"></dict-data-select>
  8. </el-form-item>
  9. <el-form-item>
  10. <span slot="label" @click="getBaseList(1)"><a herf="#">热转移打印人员/Technician</a></span>
  11. <el-input v-model="sheetData.overPrintOperatorName" ref="overPrintOperatorName" placeholder="请选择人员" readonly style="width: 160px" ></el-input>
  12. </el-form-item>
  13. <el-form-item>
  14. <span slot="label" @click="getBaseList(2)"><a herf="#">印刷人员/Technician</a></span>
  15. <el-input v-model="sheetData.printOperatorName" ref="printOperatorName" placeholder="请选择人员" readonly style="width: 160px" ></el-input>
  16. </el-form-item>
  17. <el-form-item label=" ">
  18. <el-button type="primary" @click="searchTable(true)">刷新</el-button>
  19. <el-button type="primary" @click="changeRouteRev()" v-if="((!ifDisableFlag && spForm.sp.includes(searchData.username) && baseForm.status === 'spz') || baseForm.status === 'cg' || superAdmin)">变更</el-button>
  20. <el-button type="primary" @click="jumpRoute()">跳转至Routing</el-button>
  21. </el-form-item>
  22. <el-form-item label=" ">
  23. <el-button type="primary" @click="updateBMProcess()" v-if="(!ifDisableFlag && isAuth('103002:bmSave') && spForm.sp.includes(searchData.username) && baseForm.status === 'spz') || baseForm.status === 'cg' || superAdmin">保存数据</el-button>
  24. <el-button v-if="baseForm.status === 'spz' && ((!ifDisableFlag && spForm.sp.includes(searchData.username)) || (superAdmin))" type="primary" @click="agreeSubmit">同意</el-button>
  25. <el-button v-if="baseForm.status === 'spz' && ((baseForm.isReject === 'Y' && !ifDisableFlag && spForm.sp.includes(searchData.username)) || (superAdmin))" type="primary" @click="submitDataModal">驳回</el-button>
  26. </el-form-item>
  27. </el-col>
  28. <el-col :span="3">
  29. <div class="grid-content bg-purple">
  30. <el-form-item label="当前节点/Status" style="width: 100%">
  31. <el-input v-model="spForm.nodeName" disabled></el-input>
  32. </el-form-item>
  33. </div>
  34. </el-col>
  35. <el-col :span="3">
  36. <div class="grid-content bg-purple">
  37. <el-form-item label="当前节点审批人/Authorizer" style="width: 100%">
  38. <el-input v-model="spForm.sp" disabled></el-input>
  39. </el-form-item>
  40. </div>
  41. </el-col>
  42. </el-row>
  43. </el-form>
  44. <el-form label-position="top" style="margin-top: 1px; margin-left: 0px;" v-if="searchData.buNo === 'RDC'">
  45. <el-row :gutter="20" >
  46. <el-col :span="24">
  47. <div class="grid-content bg-purple">
  48. <el-form-item :label="'过程及过程控制/Process and Production Control'">
  49. <el-input
  50. type="textarea"
  51. v-model="dataForm.processDetail "
  52. :rows="3"
  53. resize='none'
  54. maxlength="255"
  55. show-word-limit
  56. :disabled="ifDisableFlag"
  57. style="height: 60px" >
  58. </el-input>
  59. </el-form-item>
  60. </div>
  61. </el-col>
  62. </el-row>
  63. <el-row :gutter="20" style="margin-top: 60px">
  64. <el-col :span="6">
  65. <div class="grid-content bg-purple">
  66. <el-form-item :label="'是否提供胶条/Supply Adhesive Tape'">
  67. <el-select clearable v-model="dataForm.supplyAdhesiveTape" :disabled="ifDisableFlag">
  68. <el-option label="Yes" value="Y"></el-option>
  69. <el-option label="No" value="N"></el-option>
  70. </el-select>
  71. </el-form-item>
  72. </div>
  73. </el-col>
  74. <el-col :span="18">
  75. <div class="grid-content bg-purple">
  76. <el-form-item :label="'图稿/Drawing'">
  77. <el-input v-model="dataForm.routingDrawing" :disabled="ifDisableFlag"></el-input>
  78. </el-form-item>
  79. </div>
  80. </el-col>
  81. </el-row>
  82. <el-row :gutter="20" >
  83. <el-col :span="6">
  84. <div class="grid-content bg-purple">
  85. <el-form-item :label="'图稿版本/Drawing Revison'">
  86. <el-input v-model="dataForm.drawingRevison" :disabled="ifDisableFlag"></el-input>
  87. </el-form-item>
  88. </div>
  89. </el-col>
  90. <el-col :span="6">
  91. <div class="grid-content bg-purple">
  92. <el-form-item :label="'图稿日期/Drawing Date'">
  93. <el-date-picker
  94. v-model="searchData.drawingDate"
  95. type="date"
  96. value-format="yyyy-MM-dd"
  97. :disabled="ifDisableFlag"
  98. placeholder="选择日期">
  99. </el-date-picker>
  100. </el-form-item>
  101. </div>
  102. </el-col>
  103. </el-row>
  104. <el-row :gutter="20">
  105. <el-col :span="24">
  106. <div class="grid-content bg-purple">
  107. <el-form-item :label="'作业说明/WI'">
  108. <el-input
  109. type="textarea"
  110. v-model="dataForm.workInfo"
  111. :rows="3"
  112. resize='none'
  113. maxlength="255"
  114. show-word-limit
  115. :disabled="ifDisableFlag"
  116. style="height: 60px" >
  117. </el-input>
  118. </el-form-item>
  119. </div>
  120. </el-col>
  121. </el-row>
  122. <el-row :gutter="20" style="margin-top: 60px">
  123. <el-col :span="6">
  124. <div class="grid-content bg-purple">
  125. <el-form-item :label="'作业说明版本/WI Revision'">
  126. <el-input v-model="dataForm.wiRevison" :disabled="ifDisableFlag"></el-input>
  127. </el-form-item>
  128. </div>
  129. </el-col>
  130. <el-col :span="6">
  131. <div class="grid-content bg-purple">
  132. <el-form-item :label="'作业说明日期/WI Date'">
  133. <el-date-picker
  134. v-model="searchData.wiDate"
  135. type="date"
  136. value-format="yyyy-MM-dd"
  137. :disabled="ifDisableFlag"
  138. placeholder="选择日期">
  139. </el-date-picker>
  140. </el-form-item>
  141. </div>
  142. </el-col>
  143. </el-row>
  144. <el-row :gutter="20">
  145. <el-col :span="6">
  146. <div class="grid-content bg-purple">
  147. <el-form-item>
  148. <span slot="label" @click="reviewEngineerChooseModal()"><a herf="#">选择审查工程师/Select ME Review Engineer</a></span>
  149. <el-input v-model="dataForm.reviewEngineer" readonly @focus="reviewEngineerChooseModal()"></el-input>
  150. </el-form-item>
  151. </div>
  152. </el-col>
  153. <el-col :span="6">
  154. <div class="grid-content bg-purple">
  155. <el-form-item >
  156. <span slot="label" @click="peEngineerChooseModal()"><a herf="#">选择PE工程师/Select PE Engineer</a></span>
  157. <el-input v-model="dataForm.peEngineer" readonly @focus="peEngineerChooseModal()"></el-input>
  158. </el-form-item>
  159. </div>
  160. </el-col>
  161. <el-col :span="6">
  162. <div class="grid-content bg-purple">
  163. <el-form-item >
  164. <span slot="label" @click="cqeModal()"><a herf="#">选择CQE/Select CQE</a></span>
  165. <el-input v-model="dataForm.cqe" readonly @focus="cqeModal()"></el-input>
  166. </el-form-item>
  167. </div>
  168. </el-col>
  169. </el-row>
  170. <el-row :gutter="20">
  171. <el-col :span="24">
  172. <div class="grid-content bg-purple">
  173. <el-form-item :label="'备注/Remark'">
  174. <el-input
  175. type="textarea"
  176. v-model="dataForm.routingRemark"
  177. :rows="3"
  178. resize='none'
  179. maxlength="255"
  180. show-word-limit
  181. :disabled="ifDisableFlag"
  182. style="height: 60px" >
  183. </el-input>
  184. </el-form-item>
  185. </div>
  186. </el-col>
  187. </el-row>
  188. <el-row :gutter="20" style="margin-top: 60px">
  189. <el-col :span="24">
  190. <div class="grid-content bg-purple">
  191. <el-form-item :label="'措施/Action'">
  192. <el-input
  193. type="textarea"
  194. v-model="dataForm.routingAction"
  195. :rows="3"
  196. resize='none'
  197. maxlength="255"
  198. show-word-limit
  199. :disabled="ifDisableFlag"
  200. style="height: 60px" >
  201. </el-input>
  202. </el-form-item>
  203. </div>
  204. </el-col>
  205. </el-row>
  206. <el-form-item style="margin-top: 60px;text-align:center">
  207. <el-button type="primary" @click="saveData()" v-if="!ifDisableFlag">保存</el-button>
  208. </el-form-item>
  209. </el-form>
  210. <el-form label-position="top" style="margin-top: 1px; margin-left: 0px;" v-if="searchData.buNo!='RDC'">
  211. <el-form :inline="true" label-position="top" style="margin-top: 1px; margin-left: 0px;" >
  212. <el-form-item label="物料信息/Material">
  213. <el-input v-model="routeData.partNo" readonly style="width: 120px"></el-input>
  214. </el-form-item>
  215. <el-form-item label="工艺路线类型/Routing Type">
  216. <el-input v-model="routeData.routingType" readonly style="width: 160px"></el-input>
  217. </el-form-item>
  218. <el-form-item label="工艺路线版本/Routing Rev.">
  219. <el-input v-model="routeData.routingRevision" readonly style="width: 160px"></el-input>
  220. </el-form-item>
  221. <el-form-item label="替代编码/Alternative No.">
  222. <el-input v-model="routeData.alternativeNo" readonly style="width: 140px"></el-input>
  223. </el-form-item>
  224. </el-form>
  225. <el-form :inline="true" label-position="top" style="margin-top: 1px; margin-left: 0px;" >
  226. <el-row :gutter="20">
  227. <el-col :span="18">
  228. <el-form-item label="单双面印刷/Simplex/Duplex">
  229. <dict-data-select :site="searchData.site" v-if="searchData.site" clearable v-model="sheetData.simplexDuplex" :use-default-value="false" dict-type="bm_simplex_duplex" style="width: 160px"></dict-data-select>
  230. </el-form-item>
  231. <el-form-item label="周长/Repeat">
  232. <dict-data-select :site="searchData.site" v-if="searchData.site" clearable v-model="sheetData.repeat" dict-type="bm_repeat" style="width: 120px"></dict-data-select>
  233. </el-form-item>
  234. <el-form-item label="标签尺寸/Label Size">
  235. <el-input v-model="sheetData.labelSize" style="width: 120px" ></el-input>
  236. </el-form-item>
  237. <el-form-item label="横向跳距/HP">
  238. <el-input v-model="sheetData.hp" style="width: 120px" ></el-input>
  239. </el-form-item>
  240. <el-form-item label="竖向跳距/VP">
  241. <el-input v-model="sheetData.vp" style="width: 120px" ></el-input>
  242. </el-form-item>
  243. <el-form-item label="横排数/Across">
  244. <el-input v-model="sheetData.across" style="width: 120px" ></el-input>
  245. </el-form-item>
  246. <el-form-item label="竖排数/Down">
  247. <el-input v-model="sheetData.down" style="width: 120px" ></el-input>
  248. </el-form-item>
  249. </el-col>
  250. </el-row>
  251. </el-form>
  252. <div style="width: 100%;">
  253. <el-form :inline="true" label-position="top" style="margin-top: 1px; margin-left: 0px;" >
  254. <el-row :gutter="20">
  255. <el-col :span="24">
  256. <el-form-item label="实际数目/Actual Number">
  257. <el-input v-model="sheetData.actualNumber" style="width: 160px"></el-input>
  258. </el-form-item>
  259. <el-form-item label="印刷出纸方向/Feeding Direction">
  260. <dict-data-select :site="searchData.site" v-if="searchData.site" clearable v-model="sheetData.printCopyPosition" dict-type="bm_print_copy_position" style="width: 170px"></dict-data-select>
  261. </el-form-item>
  262. <el-form-item label="成品卷边宽度/FG Roll Width">
  263. <el-input v-model="sheetData.goodsRollWidth" style="width: 160px"></el-input>
  264. </el-form-item>
  265. <el-form-item label="新刀具(是/否)/New Cutter(Y/N)">
  266. <dict-data-select :site="searchData.site" v-if="searchData.site" clearable v-model="sheetData.newCutter" dict-type="bm_new_cutter" style="width: 170px"></dict-data-select>
  267. </el-form-item>
  268. <el-form-item label="印刷刀模公差/P2C Tolerance">
  269. <el-input v-model="sheetData.p2cTolerance" style="width: 160px"></el-input>
  270. </el-form-item>
  271. <el-form-item label="尺寸公差/Dimension Tolerance">
  272. <el-input v-model="sheetData.dimensionTolerance" style="width: 170px"></el-input>
  273. </el-form-item>
  274. <el-form-item label="修边公差(+/-)/Slitting Tolerance">
  275. <el-input v-model="sheetData.slittingTolerance" style="width: 170px"></el-input>
  276. </el-form-item>
  277. </el-col>
  278. </el-row>
  279. </el-form>
  280. </div>
  281. <el-table
  282. :height="'250'"
  283. :data="tableData"
  284. highlight-current-row
  285. border
  286. @row-click="chooseRoute"
  287. style="width: 100%">
  288. <el-table-column
  289. fixed="left"
  290. header-align="center"
  291. align="center"
  292. width="60"
  293. label="操作">
  294. <template slot-scope="scope">
  295. <a type="text" size="small" @click="bmModel(scope.row)" v-if="!ifDisableFlag && isAuth('103002:bmRoute')">填写</a>
  296. </template>
  297. </el-table-column>
  298. <!-- <el-table-column-->
  299. <!-- v-for="(item,index) in columnList1" :key="index"-->
  300. <!-- :sortable="item.columnSortable"-->
  301. <!-- :prop="item.columnProp"-->
  302. <!-- :header-align="item.headerAlign"-->
  303. <!-- :show-overflow-tooltip="item.showOverflowTooltip"-->
  304. <!-- :align="item.align"-->
  305. <!-- :fixed="item.fixed == ''?false:item.fixed"-->
  306. <!-- :min-width="item.columnWidth"-->
  307. <!-- :label="item.columnLabel">-->
  308. <!-- <template slot-scope="scope">-->
  309. <!-- <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>-->
  310. <!-- <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>-->
  311. <!-- </template>-->
  312. <!-- </el-table-column>-->
  313. <el-table-column label="工序号" header-align="center">
  314. <el-table-column
  315. prop="operationNo"
  316. header-align="center"
  317. align="center"
  318. min-width="80"
  319. label="Operation No.">
  320. </el-table-column>
  321. </el-table-column>
  322. <el-table-column label="工序名称" header-align="center">
  323. <el-table-column
  324. prop="operationName"
  325. header-align="center"
  326. align="center"
  327. min-width="120"
  328. label="Operation Desc">
  329. </el-table-column>
  330. </el-table-column>
  331. <el-table-column label="效率" header-align="center">
  332. <el-table-column
  333. prop="efficiencyFactor"
  334. header-align="center"
  335. align="right"
  336. min-width="80"
  337. label="Efficiency">
  338. </el-table-column>
  339. </el-table-column>
  340. <el-table-column label="机器单位产出" header-align="center">
  341. <el-table-column
  342. prop="machRunFactor"
  343. header-align="center"
  344. align="right"
  345. min-width="80"
  346. label="Mach Run Factor">
  347. </el-table-column>
  348. </el-table-column>
  349. <el-table-column label="机器调机时间" header-align="center">
  350. <el-table-column
  351. prop="machSetupTime"
  352. header-align="center"
  353. align="right"
  354. min-width="80"
  355. label="Mach Setup Time">
  356. </el-table-column>
  357. </el-table-column>
  358. <el-table-column label="产出单位" header-align="center">
  359. <el-table-column
  360. prop="runTimeCode"
  361. header-align="center"
  362. align="center"
  363. min-width="60"
  364. label="Factor Unit">
  365. </el-table-column>
  366. </el-table-column>
  367. <el-table-column label="人工单位产出" header-align="center">
  368. <el-table-column
  369. prop="laborRunFactor"
  370. header-align="center"
  371. align="right"
  372. min-width="80"
  373. label="Labour Run Factor">
  374. </el-table-column>
  375. </el-table-column>
  376. <el-table-column label="人工调机时间" header-align="center">
  377. <el-table-column
  378. prop="laborSetupTime"
  379. header-align="center"
  380. align="right"
  381. min-width="80"
  382. label="Labour Setup Time">
  383. </el-table-column>
  384. </el-table-column>
  385. </el-table>
  386. <component style="margin-top: 5px" :is="selectedComponent" ref="routeRef" :key="componentKey"></component>
  387. </el-form>
  388. <!-- <el-dialog append-to-body title="工艺路线" :close-on-click-modal="false" v-drag :visible.sync="routeFlag" width="470px">-->
  389. <!-- <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: -5px;">-->
  390. <!-- <el-form-item :label="'工序编码'">-->
  391. <!-- <el-input v-model="routingData.itemNo" type="number" onkeyup="value=value.replace(/^(0+)|[^\d]+/g,'')" ></el-input>-->
  392. <!-- </el-form-item>-->
  393. <!-- <el-form-item :label="'工序名称'">-->
  394. <!-- <el-input v-model="routingData.operationDesc" style="width: 440px" ></el-input>-->
  395. <!-- </el-form-item>-->
  396. <!-- </el-form>-->
  397. <!-- <el-footer style="height:40px;margin-top: 10px;text-align:center">-->
  398. <!-- <el-button type="primary" @click="routeSave()">保存</el-button>-->
  399. <!-- <el-button type="primary" @click="routeFlag = false">取消</el-button>-->
  400. <!-- </el-footer>-->
  401. <!-- </el-dialog>-->
  402. <el-dialog width="530px" title="审查工程师" :close-on-click-modal="false" :visible.sync="reviewEngineerFlag">
  403. <el-transfer
  404. v-model="reviewEngineerList" class="rq" filterable
  405. :props="{key: 'operatorId',label: 'operatorName'}"
  406. :data="operatorList" :titles="['未选择', '已选择']">
  407. </el-transfer>
  408. <span slot="footer" class="dialog-footer">
  409. <div style="margin-top: 5px">
  410. <el-button type="primary" @click="savereviewEngineerList()">确定</el-button>
  411. <el-button @click="reviewEngineerFlag = false" type="primary">取消</el-button>
  412. </div>
  413. </span>
  414. </el-dialog>
  415. <el-dialog width="530px" title="PE工程师" :close-on-click-modal="false" :visible.sync="peEngineerFlag">
  416. <el-transfer
  417. v-model="peEngineerList" class="rq" filterable
  418. :props="{key: 'operatorId',label: 'operatorName'}"
  419. :data="operatorList" :titles="['未选择', '已选择']">
  420. </el-transfer>
  421. <span slot="footer" class="dialog-footer">
  422. <div style="margin-top: 5px">
  423. <el-button type="primary" @click="savepeEngineerList()">确定</el-button>
  424. <el-button @click="peEngineerFlag = false" type="primary">取消</el-button>
  425. </div>
  426. </span>
  427. </el-dialog>
  428. <el-dialog width="530px" title="选择CQE" :close-on-click-modal="false" :visible.sync="cqeFlag">
  429. <el-transfer
  430. v-model="cqeList" class="rq" filterable
  431. :props="{key: 'operatorId',label: 'operatorName'}"
  432. :data="operatorList" :titles="['未选择', '已选择']">
  433. </el-transfer>
  434. <span slot="footer" class="dialog-footer">
  435. <div style="margin-top: 5px">
  436. <el-button type="primary" @click="savecqeList()">确定</el-button>
  437. <el-button @click="cqeFlag = false" type="primary">取消</el-button>
  438. </div>
  439. </span>
  440. </el-dialog>
  441. <el-dialog append-to-body width="900px" title="工序记录" top="10vh" @close="closeItemModel" :close-on-click-modal="false" :visible.sync="routeModelFlag">
  442. <el-form label-position="top" style="margin-top: -5px; margin-left: 0px;" >
  443. <el-row :gutter="20">
  444. <el-col :span="6"><div class="grid-content bg-purple">
  445. <el-form-item :label="'工序编码/Operation No.'">
  446. <el-input v-model="currentRow.operationNo" disabled></el-input>
  447. </el-form-item>
  448. </div></el-col>
  449. <el-col :span="6"><div class="grid-content bg-purple">
  450. <el-form-item :label="'工序名称/Operation Desc.'">
  451. <el-input v-model="currentRow.operationName" disabled></el-input>
  452. </el-form-item>
  453. </div></el-col>
  454. </el-row>
  455. </el-form>
  456. <div v-if="currentRow.itemType === 'prepress'">
  457. <prepress ref="prepress" @closeModel="closeModel"></prepress>
  458. </div>
  459. <div v-else-if="currentRow.itemType === 'printing'">
  460. <printing ref="printing" @closeModel="closeModel"></printing>
  461. </div>
  462. <div v-else-if="currentRow.itemType === 'printOther'">
  463. <printOther ref="printOther" @closeModel="closeModel"></printOther>
  464. </div>
  465. <div v-else-if="currentRow.itemType === 'overprinting'">
  466. <overprinting ref="overprinting" @closeModel="closeModel"></overprinting>
  467. </div>
  468. <div v-else-if="currentRow.itemType === 'slitting'">
  469. <slitting ref="slitting" @closeModel="closeModel"></slitting>
  470. </div>
  471. <div v-else-if="currentRow.itemType === 'lamTemperature'">
  472. <lamTemperature ref="lamTemperature" @closeModel="closeModel"></lamTemperature>
  473. </div>
  474. <div v-else-if="currentRow.itemType === 'cutting'">
  475. <cutting ref="cutting" @closeModel="closeModel"></cutting>
  476. </div>
  477. <div v-else-if="currentRow.itemType === 'InkMixing'">
  478. <InkMixing ref="InkMixing" @closeModel="closeModel"></InkMixing>
  479. </div>
  480. <div v-else-if="currentRow.itemType === 'InkFormulation'">
  481. <InkFormulation ref="InkFormulation" @closeModel="closeModel"></InkFormulation>
  482. </div>
  483. <div v-else-if="currentRow.itemType === 'lamination'">
  484. <lamination ref="lamination" @closeModel="closeModel"></lamination>
  485. </div>
  486. <div v-else-if="currentRow.itemType === 'CNC'">
  487. <CNC ref="CNC" @closeModel="closeModel"></CNC>
  488. </div>
  489. <div v-else-if="currentRow.itemType === 'Cut'">
  490. <Cut ref="Cut" @closeModel="closeModel"></Cut>
  491. </div>
  492. <div v-else-if="currentRow.itemType === 'packagePage'">
  493. <packagePage ref="packagePage" @closeModel="closeModel"></packagePage>
  494. </div>
  495. <div v-else-if="currentRow.itemType === 'fqc'">
  496. <fqc ref="fqc" @closeModel="closeModel"></fqc>
  497. </div>
  498. <div v-else-if="currentRow.itemType === 'cqc'">
  499. <cqc ref="cqc" @closeModel="closeModel"></cqc>
  500. </div>
  501. <div v-else-if="currentRow.itemType === 'printFlexo'">
  502. <printFlexo ref="printFlexo" @closeModel="closeModel"></printFlexo>
  503. </div>
  504. <div v-else-if="currentRow.itemType === 'printIndigo'">
  505. <printIndigo ref="printIndigo" @closeModel="closeModel"></printIndigo>
  506. </div>
  507. </el-dialog>
  508. <el-dialog title="变更工艺路线" :close-on-click-modal="false" v-drag :visible.sync="modalFlag" width="750px">
  509. <el-table
  510. :data="routeDetailList"
  511. height="300"
  512. border
  513. highlight-current-row
  514. onclick=""
  515. @row-click="getRow"
  516. ref="componentTable"
  517. style="width:100%">
  518. <el-table-column
  519. prop="partNo"
  520. header-align="left"
  521. align="left"
  522. min-width="80"
  523. label="物料编码">
  524. </el-table-column>
  525. <el-table-column
  526. prop="routingType"
  527. header-align="left"
  528. align="left"
  529. min-width="80"
  530. label="Routing类型">
  531. </el-table-column>
  532. <el-table-column
  533. prop="routingRevision"
  534. header-align="left"
  535. align="left"
  536. min-width="80"
  537. label="Routing版本">
  538. </el-table-column>
  539. <el-table-column
  540. prop="alternativeNo"
  541. header-align="left"
  542. align="left"
  543. min-width="80"
  544. label="替代编码">
  545. </el-table-column>
  546. <el-table-column
  547. prop="alternativeDescription"
  548. header-align="left"
  549. align="left"
  550. min-width="80"
  551. label="替代名称">
  552. </el-table-column>
  553. <el-table-column
  554. prop="status"
  555. header-align="left"
  556. align="left"
  557. min-width="60"
  558. label="状态">
  559. </el-table-column>
  560. <el-table-column
  561. prop="phaseInDate"
  562. header-align="left"
  563. align="left"
  564. min-width="80"
  565. label="生效日期">
  566. </el-table-column>
  567. <el-table-column
  568. prop="phaseOutDate"
  569. header-align="left"
  570. align="left"
  571. min-width="80"
  572. label="失效日期">
  573. </el-table-column>
  574. </el-table>
  575. <el-footer style="height:30px;margin-top:20px;text-align:center">
  576. <el-button type="primary" @click="updateBMRouteRev()">确定</el-button>
  577. <el-button type="primary" @click="modalFlag=false">取消</el-button>
  578. </el-footer>
  579. </el-dialog>
  580. <ChooseUser ref="baseList" @getBaseData="getBaseData"></ChooseUser>
  581. <!-- 提交 -->
  582. <el-dialog title="驳回" top="30vh" :close-on-click-modal="false" v-drag :visible.sync="submitModalFlag" width="500px">
  583. <el-form :inline="true" label-position="top">
  584. <el-form-item :label="'驳回意见'">
  585. <el-input type="textarea" v-model="rejectOpinion" :rows="3" resize='none' show-word-limit style="width: 479px;height: 30px"></el-input>
  586. </el-form-item>
  587. </el-form>
  588. <el-footer style="height:30px;margin-top: 50px;text-align:center">
  589. <el-button type="primary" @click="rejectSubmit">确定</el-button>
  590. <el-button type="primary" @click="submitModalFlag = false">取消</el-button>
  591. </el-footer>
  592. </el-dialog>
  593. </div>
  594. </template>
  595. <script>
  596. import {
  597. searchBMRoutingDetail,
  598. searchTechnicalSpecificationTeamStr,
  599. updateBMRoutingDetail,
  600. searchBMRoute,
  601. searchRouteDetail,
  602. updateBMRouteRev,
  603. tsdBasicInformationSearch,
  604. updateBMProcess,
  605. submitChange,getBMStatusDesc, // 提交
  606. getOADetailForBM,
  607. } from "@/api/sampleManagement/technicalSpecificationList.js"
  608. import {
  609. getNodeAuthority, // 获取节点权限
  610. } from '@/api/changeManagement/changeManagement.js'
  611. import ChooseUser from '@/views/modules/common/ChooseUser'
  612. import {
  613. searchOperatorWithSite,
  614. } from "@/api/project/project.js"
  615. import prepress from "./com_bm_prepress";/*组件*/
  616. import printing from "./com_bm_printing";/*组件*/
  617. import printOther from "./com_bm_printOther";/*组件*/
  618. import overprinting from "./com_bm_demoSlot";/*组件*/
  619. import slitting from "./com_bm_demoSlot";/*组件*/
  620. import lamTemperature from "./com_bm_demoSlot";/*组件*/
  621. import cutting from "./com_bm_demoSlot";/*组件*/
  622. import InkMixing from "./com_bm_inkMixing";/*组件*/
  623. import InkFormulation from "./com_bm_inkFormulation";/*组件*/
  624. import lamination from "./com_bm_lamination";/*组件*/
  625. import CNC from "./com_bm_cnc";
  626. import Cut from "./com_bm_cut";
  627. import packagePage from "./com_bm_demoSlot";/*组件*/
  628. import fqc from "./com_bm_demoSlot";/*组件*/
  629. import cqc from "./com_bm_demoSlot";/*组件*/
  630. import printFlexo from "./com_bm_printingFlexo";/*组件*/
  631. import printIndigo from "./com_bm_printingIndigo";
  632. import DictDataSelect from "../../sys/dict-data-select-highlight";
  633. import {updateBMProcessInfo} from "../../../../api/sampleManagement/technicalSpecificationList";
  634. /*组件*/
  635. export default {
  636. components: {
  637. DictDataSelect,
  638. ChooseUser,
  639. prepress,
  640. printing,
  641. printOther,
  642. overprinting,
  643. slitting,
  644. lamTemperature,
  645. cutting,
  646. InkMixing,
  647. InkFormulation,
  648. lamination,
  649. CNC,
  650. Cut,
  651. packagePage,
  652. fqc,
  653. cqc,
  654. printFlexo,
  655. printIndigo,
  656. },
  657. data() {
  658. return {
  659. spForm:{
  660. sp:'',
  661. nodeName:'',
  662. },
  663. nowRoute:{},
  664. //动态组件
  665. selectedComponent: null,
  666. routeData:{
  667. site: '',
  668. partNo:'',
  669. alternativeNo:'',
  670. routingType:'',
  671. routingRevision:'',
  672. },
  673. componentKey:0,
  674. routeFlag:false,
  675. routeModelFlag:false,
  676. height:200,
  677. searchData: {
  678. site: '',
  679. username: this.$store.state.user.name,
  680. codeNo: '',
  681. buNo:'',
  682. fieldId:''
  683. },
  684. baseForm:{
  685. status:'',
  686. isReject:'',
  687. },
  688. tableData:'',
  689. partList:[],
  690. superAdmin:false,
  691. ifDisableFlag:false,
  692. sheetData:{
  693. site: '',
  694. codeNo: '',
  695. process:'',
  696. overPrintOperator:'',
  697. overPrintOperatorName:'',
  698. printOperator:'',
  699. printOperatorName:'',
  700. simplexDuplex: '',
  701. repeat: '',
  702. hp: '',
  703. across: null,
  704. printCopyPosition: '',
  705. labelSize: '',
  706. vp: '',
  707. down: null,
  708. actualNumber: null,
  709. goodsRollWidth: '',
  710. newCutter: '',
  711. dimensionTolerance: '',
  712. p2cTolerance: '',
  713. slittingTolerance: ''
  714. },
  715. dataForm:{
  716. site: '',
  717. codeNo:'',
  718. processDetail:'',
  719. supplyAdhesiveTape: '',
  720. routingDrawing:'',
  721. drawingRevison:'',
  722. drawingDate:'',
  723. workInfo:'',
  724. wiRevison:'',
  725. wiDate:'',
  726. reviewEngineer: '',
  727. routingRemark:'',
  728. routingAction:'',
  729. username:this.$store.state.user.name,
  730. peEngineer:'',
  731. cqe:'',
  732. reviewEngineerList:[],
  733. peEngineerList:[],
  734. cqeList:[],
  735. },
  736. reviewEngineerFlag:false,
  737. peEngineerFlag:false,
  738. cqeFlag:false,
  739. operatorList:[],
  740. reviewEngineerList:[],
  741. peEngineerList:[],
  742. cqeList:[],
  743. //工艺路线部分
  744. routingData:{
  745. id:0,
  746. site:'',
  747. codeNo:'',
  748. itemNo:'',
  749. operationDesc:'',
  750. remark:'',
  751. username:'',
  752. },
  753. columnList1: [
  754. {
  755. userId: this.$store.state.user.name,
  756. functionId: 104003,
  757. serialNumber: '104003Table2OperationNo',
  758. tableId: '104003Table2',
  759. tableName: 'Routing工序表',
  760. columnProp: 'operationNo',
  761. headerAlign: 'center',
  762. align: 'center',
  763. columnLabel: '工序号/Operation No.',
  764. columnHidden: false,
  765. columnImage: false,
  766. columnSortable: false,
  767. sortLv: 0,
  768. status: true,
  769. fixed: '',
  770. columnWidth: 80
  771. },
  772. {
  773. userId: this.$store.state.user.name,
  774. functionId: 104003,
  775. serialNumber: '104003Table2OperationName',
  776. tableId: '104003Table2',
  777. tableName: 'Routing工序表',
  778. columnProp: 'operationName',
  779. headerAlign: 'center',
  780. align: 'left',
  781. columnLabel: '工序名称/Operation Desc',
  782. columnHidden: false,
  783. columnImage: false,
  784. columnSortable: false,
  785. sortLv: 0,
  786. status: true,
  787. fixed: '',
  788. columnWidth: 120
  789. },
  790. {
  791. userId: this.$store.state.user.name,
  792. functionId: 104003,
  793. serialNumber: '104003Table2EfficiencyFactor',
  794. tableId: '104003Table2',
  795. tableName: 'Routing工序表',
  796. columnProp: 'efficiencyFactor',
  797. headerAlign: 'center',
  798. align: 'right',
  799. columnLabel: '效率/Efficiency',
  800. columnHidden: false,
  801. columnImage: false,
  802. columnSortable: false,
  803. sortLv: 0,
  804. status: true,
  805. fixed: '',
  806. columnWidth: 80
  807. },
  808. {
  809. userId: this.$store.state.user.name,
  810. functionId: 104003,
  811. serialNumber: '104003Table2MachRunFactor',
  812. tableId: '104003Table2',
  813. tableName: 'Routing工序表',
  814. columnProp: 'machRunFactor',
  815. headerAlign: 'center',
  816. align: 'right',
  817. columnLabel: '机器单位产出/Mach Run Factor',
  818. columnHidden: false,
  819. columnImage: false,
  820. columnSortable: false,
  821. sortLv: 0,
  822. status: true,
  823. fixed: '',
  824. columnWidth: 80
  825. },
  826. {
  827. userId: this.$store.state.user.name,
  828. functionId: 104003,
  829. serialNumber: '104003Table2MachSetupTime',
  830. tableId: '104003Table2',
  831. tableName: 'Routing工序表',
  832. columnProp: 'machSetupTime',
  833. headerAlign: 'center',
  834. align: 'right',
  835. columnLabel: '机器调机时间/Mach Setup Time',
  836. columnHidden: false,
  837. columnImage: false,
  838. columnSortable: false,
  839. sortLv: 0,
  840. status: true,
  841. fixed: '',
  842. columnWidth: 80
  843. },
  844. {
  845. userId: this.$store.state.user.name,
  846. functionId: 104003,
  847. serialNumber: '104003Table2RunTimeCode',
  848. tableId: '104003Table2',
  849. tableName: 'Routing工序表',
  850. columnProp: 'runTimeCode',
  851. headerAlign: 'center',
  852. align: 'center',
  853. columnLabel: '产出单位/Factor Unit',
  854. columnHidden: false,
  855. columnImage: false,
  856. columnSortable: false,
  857. sortLv: 0,
  858. status: true,
  859. fixed: '',
  860. columnWidth: 60
  861. },
  862. {
  863. userId: this.$store.state.user.name,
  864. functionId: 104003,
  865. serialNumber: '104003Table2LaborRunFactor',
  866. tableId: '104003Table2',
  867. tableName: 'Routing工序表',
  868. columnProp: 'laborRunFactor',
  869. headerAlign: 'center',
  870. align: 'right',
  871. columnLabel: '人工单位产出/Labour Run Factor',
  872. columnHidden: false,
  873. columnImage: false,
  874. columnSortable: false,
  875. sortLv: 0,
  876. status: true,
  877. fixed: '',
  878. columnWidth: 80
  879. },
  880. {
  881. userId: this.$store.state.user.name,
  882. functionId: 104003,
  883. serialNumber: '104003Table2LaborSetupTime',
  884. tableId: '104003Table2',
  885. tableName: 'Routing工序表',
  886. columnProp: 'laborSetupTime',
  887. headerAlign: 'center',
  888. align: 'right',
  889. columnLabel: '人工调机时间/Labour Setup Time',
  890. columnHidden: false,
  891. columnImage: false,
  892. columnSortable: false,
  893. sortLv: 0,
  894. status: true,
  895. fixed: '',
  896. columnWidth: 80
  897. },
  898. {
  899. userId: this.$store.state.user.name,
  900. functionId: 104003,
  901. serialNumber: '104003Table2CrewSize',
  902. tableId: '104003Table2',
  903. tableName: 'Routing工序表',
  904. columnProp: 'crewSize',
  905. headerAlign: 'center',
  906. align: 'right',
  907. columnLabel: '生产参与人数/Crew Size',
  908. columnHidden: false,
  909. columnImage: false,
  910. columnSortable: false,
  911. sortLv: 0,
  912. status: true,
  913. fixed: '',
  914. columnWidth: 80
  915. },
  916. {
  917. userId: this.$store.state.user.name,
  918. functionId: 104003,
  919. serialNumber: '104003Table2SetupCrewSize',
  920. tableId: '104003Table2',
  921. tableName: 'Routing工序表',
  922. columnProp: 'setupCrewSize',
  923. headerAlign: 'center',
  924. align: 'right',
  925. columnLabel: '调机人数/Setup Crew Size',
  926. columnHidden: false,
  927. columnImage: false,
  928. columnSortable: false,
  929. sortLv: 0,
  930. status: true,
  931. fixed: '',
  932. columnWidth: 80
  933. },
  934. {
  935. userId: this.$store.state.user.name,
  936. functionId: 104003,
  937. serialNumber: '104003Table2OutsideOpItem',
  938. tableId: '104003Table2',
  939. tableName: 'Routing工序表',
  940. columnProp: 'outsideOpItem',
  941. headerAlign: 'center',
  942. align: 'center',
  943. columnLabel: '外协采购料号/Outside OP Item',
  944. columnHidden: false,
  945. columnImage: false,
  946. columnSortable: false,
  947. sortLv: 0,
  948. status: true,
  949. fixed: '',
  950. columnWidth: 120
  951. },
  952. {
  953. userId: this.$store.state.user.name,
  954. functionId: 104003,
  955. serialNumber: '104003Table2MachineNo',
  956. tableId: '104003Table2',
  957. tableName: 'Routing工序表',
  958. columnProp: 'machineNo',
  959. headerAlign: 'center',
  960. align: 'center',
  961. columnLabel: '机台/Machine No.',
  962. columnHidden: false,
  963. columnImage: false,
  964. columnSortable: false,
  965. sortLv: 0,
  966. status: true,
  967. fixed: '',
  968. columnWidth: 80
  969. },
  970. {
  971. userId: this.$store.state.user.name,
  972. functionId: 104003,
  973. serialNumber: '104003Table2WorkCenterNo',
  974. tableId: '104003Table2',
  975. tableName: 'Routing工序表',
  976. columnProp: 'workCenterNo',
  977. headerAlign: 'center',
  978. align: 'center',
  979. columnLabel: '加工中心编码/Work Center No.',
  980. columnHidden: false,
  981. columnImage: false,
  982. columnSortable: false,
  983. sortLv: 0,
  984. status: true,
  985. fixed: '',
  986. columnWidth: 85
  987. },
  988. {
  989. userId: this.$store.state.user.name,
  990. functionId: 104003,
  991. serialNumber: '104003Table2WorkCenterDesc',
  992. tableId: '104003Table2',
  993. tableName: 'Routing工序表',
  994. columnProp: 'workCenterDesc',
  995. headerAlign: 'center',
  996. align: 'center',
  997. columnLabel: '加工中心描述/Work Center Desc.',
  998. columnHidden: false,
  999. columnImage: false,
  1000. columnSortable: false,
  1001. sortLv: 0,
  1002. status: true,
  1003. fixed: '',
  1004. columnWidth: 100
  1005. },
  1006. {
  1007. userId: this.$store.state.user.name,
  1008. functionId: 104003,
  1009. serialNumber: '104003Table2LaborClassNo',
  1010. tableId: '104003Table2',
  1011. tableName: 'Routing工序表',
  1012. columnProp: 'laborClassDesc',
  1013. headerAlign: 'center',
  1014. align: 'center',
  1015. columnLabel: '雇员分类/Labour Class',
  1016. columnHidden: false,
  1017. columnImage: false,
  1018. columnSortable: false,
  1019. sortLv: 0,
  1020. status: true,
  1021. fixed: '',
  1022. columnWidth: 80
  1023. },
  1024. {
  1025. userId: this.$store.state.user.name,
  1026. functionId: 104003,
  1027. serialNumber: '104003Table2SetupLaborClassDesc',
  1028. tableId: '104003Table2',
  1029. tableName: 'Routing工序表',
  1030. columnProp: 'setupLaborClassDesc',
  1031. headerAlign: 'center',
  1032. align: 'center',
  1033. columnLabel: '调机雇员分类/Setup Labour Class',
  1034. columnHidden: false,
  1035. columnImage: false,
  1036. columnSortable: false,
  1037. sortLv: 0,
  1038. status: true,
  1039. fixed: '',
  1040. columnWidth: 80
  1041. },
  1042. {
  1043. userId: this.$store.state.user.name,
  1044. functionId: 104003,
  1045. serialNumber: '104003Table2NoteText',
  1046. tableId: '104003Table2',
  1047. tableName: 'Routing工序表',
  1048. columnProp: 'noteText',
  1049. headerAlign: 'center',
  1050. align: 'left',
  1051. columnLabel: '备注/Comments',
  1052. columnHidden: false,
  1053. columnImage: false,
  1054. columnSortable: false,
  1055. sortLv: 0,
  1056. status: true,
  1057. fixed: '',
  1058. columnWidth: 150
  1059. },
  1060. ],
  1061. currentRow:{},
  1062. //变更工艺路线
  1063. modalFlag:false,
  1064. routeDetailList:[],
  1065. currentRoute:null,
  1066. tagNo:'',
  1067. tagNo1:'',
  1068. rejectOpinion: '',
  1069. submitModalFlag: false,
  1070. }
  1071. },
  1072. mounted () {
  1073. this.$nextTick(() => {
  1074. this.height = window.innerHeight - 100
  1075. })
  1076. },
  1077. methods: {
  1078. // 获取基础数据列表S
  1079. getBaseList ( type) {
  1080. if(this.ifDisableFlag){
  1081. return false
  1082. }
  1083. this.tagNo1 = type
  1084. this.$nextTick(() => {
  1085. let strVal = ''
  1086. let roleId = ''
  1087. if(type==1) {
  1088. strVal = this.sheetData.overPrintOperator
  1089. roleId = 'R018'
  1090. }
  1091. if(type==2) {
  1092. strVal = this.sheetData.printOperator
  1093. roleId = 'R019'
  1094. }
  1095. this.$refs.baseList.init(this.searchData.site,this.searchData.buNo, strVal,roleId)
  1096. })
  1097. },
  1098. /* 列表方法的回调 */
  1099. getBaseData (val) {
  1100. if(this.tagNo1==1) {
  1101. this.sheetData.overPrintOperator = val.username
  1102. this.sheetData.overPrintOperatorName = val.userDisplay
  1103. this.$nextTick(() => {
  1104. this.$triggerInputEvent(this.$refs.overPrintOperatorName);
  1105. });
  1106. }
  1107. if(this.tagNo1==2) {
  1108. this.sheetData.printOperator = val.username
  1109. this.sheetData.printOperatorName = val.userDisplay
  1110. this.$nextTick(() => {
  1111. this.$triggerInputEvent(this.$refs.printOperatorName);
  1112. });
  1113. }
  1114. },
  1115. //初始化组件的参数
  1116. init(inData) {
  1117. if(this.dataForm.codeNo!=null&&this.dataForm.codeNo!=''){
  1118. return false;
  1119. }
  1120. //初始化参数
  1121. this.searchData = JSON.parse(JSON.stringify(inData));
  1122. //刷新表格
  1123. this.searchTable();
  1124. },
  1125. searchTable(type){
  1126. tsdBasicInformationSearch(this.searchData).then(({data}) => {
  1127. if(data&& data.code===0){
  1128. this.sheetData=data.row
  1129. this.baseForm=data.row;
  1130. this.routeData.site=data.row.site
  1131. this.routeData.partNo=data.row.finalPartNo
  1132. this.getNodeAuthority(data.row)
  1133. if(type){
  1134. this.$message.success( '操作成功')
  1135. }
  1136. }else {
  1137. this.$message.error(data.msg)
  1138. }
  1139. });
  1140. getOADetailForBM(this.searchData).then(({data}) => {
  1141. this.spForm.nodeName = data.row.nodeName
  1142. this.spForm.sp = data.row.sp==null?'':data.row.sp
  1143. })
  1144. if(this.searchData.buNo==='RDC'){
  1145. searchBMRoutingDetail(this.searchData).then(({data}) => {
  1146. if(data&& data.code===0){
  1147. if(data.rows.length>0){
  1148. this.dataForm=data.rows[0]
  1149. }else {
  1150. this.dataForm.site=this.searchData.site
  1151. this.dataForm.codeNo=this.searchData.codeNo
  1152. }
  1153. }else {
  1154. this.$message.error(data.msg)
  1155. }
  1156. });
  1157. let inData = {
  1158. site: this.searchData.site,
  1159. codeNo: this.searchData.codeNo,
  1160. type: 'reviewEngineer',
  1161. }
  1162. searchTechnicalSpecificationTeamStr(inData).then(({data}) => {
  1163. this.dataForm.reviewEngineerList = data.rows
  1164. })
  1165. let inData2 = {
  1166. site: this.searchData.site,
  1167. codeNo: this.searchData.codeNo,
  1168. type: 'cqe',
  1169. }
  1170. searchTechnicalSpecificationTeamStr(inData2).then(({data}) => {
  1171. this.dataForm.cqeList = data.rows
  1172. })
  1173. let inData3 = {
  1174. site: this.searchData.site,
  1175. codeNo: this.searchData.codeNo,
  1176. type: 'peEngineer',
  1177. }
  1178. searchTechnicalSpecificationTeamStr(inData3).then(({data}) => {
  1179. this.dataForm.peEngineerList = data.rows
  1180. })
  1181. }else {
  1182. searchBMRoute(this.searchData).then(({data}) => {
  1183. if(data&& data.code===0){
  1184. this.tableData = data.rows;
  1185. this.routeData = data.row;
  1186. }else {
  1187. this.$message.error(data.msg)
  1188. }
  1189. });
  1190. }
  1191. },
  1192. closeModel () {
  1193. this.routeModelFlag = false
  1194. },
  1195. // 根据itemType
  1196. bmModel (row) {
  1197. this.currentRow = row
  1198. this.routeModelFlag = true
  1199. setTimeout(() => {
  1200. switch (this.currentRow.itemType) {
  1201. case 'prepress':
  1202. this.getPrepress();
  1203. break
  1204. case 'printing':
  1205. this.getPrinting();
  1206. break
  1207. case 'printOther':
  1208. this.getPrintOther();
  1209. break
  1210. case 'overprinting':
  1211. this.getOverprinting();
  1212. break
  1213. case 'slitting':
  1214. this.getSlitting();
  1215. break
  1216. case 'lamTemperature':
  1217. this.getLamTemperature();
  1218. break
  1219. case 'cutting':
  1220. this.getCutting();
  1221. break
  1222. case 'InkMixing':
  1223. this.getInkMixing();
  1224. break
  1225. case 'InkFormulation':
  1226. this.getInkFormulation();
  1227. break
  1228. case 'lamination':
  1229. this.getLamination();
  1230. break
  1231. case 'CNC':
  1232. this.getCNC();
  1233. break
  1234. case 'Cut':
  1235. this.getCut();
  1236. break
  1237. case 'packagePage':
  1238. this.getPackagePage();
  1239. break
  1240. case 'fqc':
  1241. this.getFqc();
  1242. break
  1243. case 'cqc':
  1244. this.getCqc();
  1245. break
  1246. case 'printFlexo':
  1247. this.getPrintFlexo();
  1248. break
  1249. case 'printIndigo':
  1250. this.getPrintIndigo();
  1251. break
  1252. }
  1253. }, 500);
  1254. },
  1255. getPrepress(){
  1256. let inData=JSON.parse(JSON.stringify(this.searchData))
  1257. inData.type='prepress'
  1258. this.$refs.prepress.init(inData)
  1259. },
  1260. getPrinting () {
  1261. let inData = JSON.parse(JSON.stringify(this.searchData))
  1262. inData.type = 'printing'
  1263. this.$refs.printing.init(inData)
  1264. },
  1265. getPrintOther(){
  1266. let inData=JSON.parse(JSON.stringify(this.searchData))
  1267. inData.type='printOther'
  1268. this.$refs.printOther.init(inData)
  1269. },
  1270. getOverprinting(){
  1271. let inData=JSON.parse(JSON.stringify(this.searchData))
  1272. inData.type='overprinting'
  1273. this.$refs.overprinting.init(inData)
  1274. },
  1275. getSlitting(){
  1276. let inData=JSON.parse(JSON.stringify(this.searchData))
  1277. inData.type='slitting'
  1278. this.$refs.slitting.init(inData)
  1279. },
  1280. getLamTemperature(){
  1281. let inData=JSON.parse(JSON.stringify(this.searchData))
  1282. inData.type='lamTemperature'
  1283. this.$refs.lamTemperature.init(inData)
  1284. },
  1285. getCutting(){
  1286. let inData=JSON.parse(JSON.stringify(this.searchData))
  1287. inData.type='cutting'
  1288. this.$refs.cutting.init(inData)
  1289. },
  1290. getInkMixing(){
  1291. let inData=JSON.parse(JSON.stringify(this.searchData))
  1292. inData.type='InkMixing'
  1293. this.$refs.InkMixing.init(inData)
  1294. },
  1295. getInkFormulation(){
  1296. let inData=JSON.parse(JSON.stringify(this.searchData))
  1297. inData.type='InkFormulation'
  1298. this.$refs.InkFormulation.init(inData)
  1299. },
  1300. getLamination(){
  1301. let inData=JSON.parse(JSON.stringify(this.searchData))
  1302. inData.type='lamination'
  1303. this.$refs.lamination.init(inData)
  1304. },
  1305. getCNC(){
  1306. let inData=JSON.parse(JSON.stringify(this.searchData))
  1307. inData.type='CNC'
  1308. this.$refs.CNC.init(inData)
  1309. },
  1310. getCut(){
  1311. let inData=JSON.parse(JSON.stringify(this.searchData))
  1312. inData.type='Cut'
  1313. this.$refs.Cut.init(inData)
  1314. },
  1315. getPackagePage(){
  1316. let inData=JSON.parse(JSON.stringify(this.searchData))
  1317. inData.type='packagePage'
  1318. this.$refs.packagePage.init(inData)
  1319. },
  1320. getFqc(){
  1321. let inData=JSON.parse(JSON.stringify(this.searchData))
  1322. inData.type='fqc'
  1323. this.$refs.fqc.init(inData)
  1324. },
  1325. getCqc(){
  1326. let inData=JSON.parse(JSON.stringify(this.searchData))
  1327. inData.type='cqc'
  1328. this.$refs.cqc.init(inData)
  1329. },
  1330. getPrintFlexo () {
  1331. let inData = JSON.parse(JSON.stringify(this.searchData))
  1332. inData.type = 'printFlexo'
  1333. this.$refs.printFlexo.init(inData)
  1334. },
  1335. getPrintIndigo () {
  1336. let inData = JSON.parse(JSON.stringify(this.searchData))
  1337. inData.type = 'printIndigo'
  1338. this.$refs.printIndigo.init(inData)
  1339. },
  1340. reviewEngineerChooseModal(){
  1341. if(this.ifDisableFlag){
  1342. return false
  1343. }
  1344. let inData={
  1345. site:this.searchData.site,
  1346. }
  1347. searchOperatorWithSite(inData).then(({data}) => {
  1348. this.operatorList=data.rows
  1349. })
  1350. this.reviewEngineerList = JSON.parse(JSON.stringify(this.dataForm.reviewEngineerList));
  1351. this.reviewEngineerFlag=true
  1352. },
  1353. savereviewEngineerList(){
  1354. let reviewEngineerName='';
  1355. for (let i = 0; i < this.reviewEngineerList.length; i++) {
  1356. let select= this.operatorList.filter(item => item.operatorId === this.reviewEngineerList[i])
  1357. if(select.length>0){
  1358. reviewEngineerName+=select[0].operatorName+';'
  1359. }
  1360. }
  1361. this.dataForm.reviewEngineer=reviewEngineerName
  1362. this.dataForm.reviewEngineerList=JSON.parse(JSON.stringify(this.reviewEngineerList));
  1363. this.reviewEngineerFlag=false
  1364. },
  1365. peEngineerChooseModal(){
  1366. if(this.ifDisableFlag){
  1367. return false
  1368. }
  1369. let inData={
  1370. site:this.searchData.site,
  1371. }
  1372. searchOperatorWithSite(inData).then(({data}) => {
  1373. this.operatorList=data.rows
  1374. })
  1375. this.peEngineerList = JSON.parse(JSON.stringify(this.dataForm.peEngineerList));
  1376. this.peEngineerFlag=true
  1377. },
  1378. savepeEngineerList(){
  1379. let peEngineerName='';
  1380. for (let i = 0; i < this.peEngineerList.length; i++) {
  1381. let select= this.operatorList.filter(item => item.operatorId === this.peEngineerList[i])
  1382. if(select.length>0){
  1383. peEngineerName+=select[0].operatorName+';'
  1384. }
  1385. }
  1386. this.dataForm.peEngineer=peEngineerName
  1387. this.dataForm.peEngineerList=JSON.parse(JSON.stringify(this.peEngineerList));
  1388. this.peEngineerFlag=false
  1389. },
  1390. cqeModal(){
  1391. if(this.ifDisableFlag){
  1392. return false
  1393. }
  1394. let inData={
  1395. site:this.searchData.site,
  1396. }
  1397. searchOperatorWithSite(inData).then(({data}) => {
  1398. this.operatorList=data.rows
  1399. })
  1400. this.cqeList = JSON.parse(JSON.stringify(this.dataForm.cqeList));
  1401. this.cqeFlag=true
  1402. },
  1403. savecqeList(){
  1404. let cqeName='';
  1405. for (let i = 0; i < this.cqeList.length; i++) {
  1406. let select= this.operatorList.filter(item => item.operatorId === this.cqeList[i])
  1407. if(select.length>0){
  1408. cqeName+=select[0].operatorName+';'
  1409. }
  1410. }
  1411. this.dataForm.cqe=cqeName
  1412. this.dataForm.cqeList=JSON.parse(JSON.stringify(this.cqeList));
  1413. this.cqeFlag=false
  1414. },
  1415. saveData(){
  1416. this.$confirm("是否保存基本信息?", '保存提示', {
  1417. confirmButtonText: '确定',
  1418. cancelButtonText: '取消',
  1419. }).then(() => {
  1420. updateBMRoutingDetail(this.dataForm).then(({data}) => {
  1421. if (data && data.code === 0) {
  1422. this.$message.success( '操作成功')
  1423. } else {
  1424. this.$message.error(data.msg)
  1425. }
  1426. })
  1427. }).catch(() => {
  1428. return
  1429. })
  1430. },
  1431. chooseRoute(row){
  1432. this.nowRoute=JSON.parse(JSON.stringify(row));
  1433. switch (row.itemType) {
  1434. case 'prepress':
  1435. this.selectedComponent='prepress';
  1436. let prepressData=JSON.parse(JSON.stringify(this.searchData))
  1437. prepressData.type='prepress'
  1438. prepressData.ifDisableFlag=true
  1439. this.$nextTick (()=>{this.$refs.routeRef.init(prepressData)});
  1440. break;
  1441. case 'printing':
  1442. this.selectedComponent='printing';
  1443. let printing=JSON.parse(JSON.stringify(this.searchData))
  1444. printing.type='printing'
  1445. printing.ifDisableFlag=true
  1446. this.$nextTick (()=>{this.$refs.routeRef.init(printing)});
  1447. break;
  1448. case 'printOther':
  1449. this.selectedComponent='printOther';
  1450. let printOther=JSON.parse(JSON.stringify(this.searchData))
  1451. printOther.type='printOther'
  1452. printOther.ifDisableFlag=true
  1453. this.$nextTick (()=>{this.$refs.routeRef.init(printOther)});
  1454. break;
  1455. case 'overprinting':
  1456. this.selectedComponent='overprinting';
  1457. let overprinting=JSON.parse(JSON.stringify(this.searchData))
  1458. overprinting.type='overprinting'
  1459. overprinting.ifDisableFlag=true
  1460. this.$nextTick (()=>{this.$refs.routeRef.init(overprinting)});
  1461. break;
  1462. case 'slitting':
  1463. this.selectedComponent='slitting';
  1464. let slitting=JSON.parse(JSON.stringify(this.searchData))
  1465. slitting.type='slitting'
  1466. slitting.ifDisableFlag=true
  1467. this.$nextTick (()=>{this.$refs.routeRef.init(slitting)});
  1468. break;
  1469. case 'lamTemperature':
  1470. this.selectedComponent='lamTemperature';
  1471. let lamTemperature=JSON.parse(JSON.stringify(this.searchData))
  1472. lamTemperature.type='lamTemperature'
  1473. lamTemperature.ifDisableFlag=true
  1474. this.$nextTick (()=>{this.$refs.routeRef.init(lamTemperature)});
  1475. break;
  1476. case 'cutting':
  1477. this.selectedComponent='cutting';
  1478. let cutting=JSON.parse(JSON.stringify(this.searchData))
  1479. cutting.type='cutting'
  1480. cutting.ifDisableFlag=true
  1481. this.$nextTick (()=>{this.$refs.routeRef.init(cutting)});
  1482. break;
  1483. case 'InkMixing':
  1484. this.selectedComponent='InkMixing';
  1485. let InkMixing=JSON.parse(JSON.stringify(this.searchData))
  1486. InkMixing.type='InkMixing'
  1487. InkMixing.ifDisableFlag=true
  1488. this.$nextTick (()=>{this.$refs.routeRef.init(InkMixing)});
  1489. break;
  1490. case 'InkFormulation':
  1491. this.selectedComponent='InkFormulation';
  1492. let InkFormulation=JSON.parse(JSON.stringify(this.searchData))
  1493. InkFormulation.type='InkFormulation'
  1494. InkFormulation.ifDisableFlag=true
  1495. this.$nextTick (()=>{this.$refs.routeRef.init(InkFormulation)});
  1496. break;
  1497. case 'lamination':
  1498. this.selectedComponent='lamination';
  1499. let lamination=JSON.parse(JSON.stringify(this.searchData))
  1500. lamination.type='lamination'
  1501. lamination.ifDisableFlag=true
  1502. this.$nextTick (()=>{this.$refs.routeRef.init(lamination)});
  1503. break;
  1504. case 'CNC':
  1505. this.selectedComponent='CNC';
  1506. let CNC=JSON.parse(JSON.stringify(this.searchData))
  1507. CNC.type='CNC'
  1508. CNC.ifDisableFlag=true
  1509. this.$nextTick (()=>{this.$refs.routeRef.init(CNC)});
  1510. break;
  1511. case 'Cut':
  1512. this.selectedComponent='Cut';
  1513. let inData=JSON.parse(JSON.stringify(this.searchData))
  1514. inData.type='Cut'
  1515. inData.ifDisableFlag=true
  1516. this.$nextTick (()=>{this.$refs.routeRef.init(inData)});
  1517. break;
  1518. case 'packagePage':
  1519. this.selectedComponent='packagePage';
  1520. let packagePage=JSON.parse(JSON.stringify(this.searchData))
  1521. packagePage.type='packagePage'
  1522. packagePage.ifDisableFlag=true
  1523. this.$nextTick (()=>{this.$refs.routeRef.init(packagePage)});
  1524. break;
  1525. case 'fqc':
  1526. this.selectedComponent='fqc';
  1527. let fqc=JSON.parse(JSON.stringify(this.searchData))
  1528. fqc.type='fqc'
  1529. fqc.ifDisableFlag=true
  1530. this.$nextTick (()=>{this.$refs.routeRef.init(fqc)});
  1531. break;
  1532. case 'cqc':
  1533. this.selectedComponent='cqc';
  1534. let cqc=JSON.parse(JSON.stringify(this.searchData))
  1535. cqc.type='cqc'
  1536. cqc.ifDisableFlag=true
  1537. this.$nextTick (()=>{this.$refs.routeRef.init(cqc)});
  1538. break;
  1539. case 'printFlexo':
  1540. this.selectedComponent='printFlexo';
  1541. let printFlexo=JSON.parse(JSON.stringify(this.searchData))
  1542. printFlexo.type='printFlexo'
  1543. printFlexo.ifDisableFlag=true
  1544. this.$nextTick (()=>{this.$refs.routeRef.init(printFlexo)});
  1545. break;
  1546. case 'printIndigo':
  1547. this.selectedComponent='printIndigo';
  1548. let printIndigo=JSON.parse(JSON.stringify(this.searchData))
  1549. printIndigo.type='printIndigo'
  1550. printIndigo.ifDisableFlag=true
  1551. this.$nextTick (()=>{this.$refs.routeRef.init(printIndigo)});
  1552. break;
  1553. default :
  1554. this.selectedComponent=null;
  1555. break;
  1556. }
  1557. },
  1558. searchDetailTable(){
  1559. searchRouteDetail(this.routeData).then(({data}) => {
  1560. this.routeDetailList=data.rows;
  1561. });
  1562. },
  1563. changeRouteRev(){
  1564. this.searchDetailTable()
  1565. this.currentRoute=null
  1566. this.modalFlag=true;
  1567. },
  1568. getRow(row){
  1569. this.currentRoute=row
  1570. },
  1571. updateBMProcess(){
  1572. updateBMProcess(this.sheetData).then(({data}) => {
  1573. if (data && data.code === 0) {
  1574. this.$clearHighLight()
  1575. tsdBasicInformationSearch(this.searchData).then(({data}) => {
  1576. if(data.row){
  1577. this.sheetData=data.row
  1578. }else {
  1579. }
  1580. });
  1581. this.$message.success('操作成功')
  1582. } else {
  1583. this.$message.error(data.msg)
  1584. }
  1585. })
  1586. },
  1587. updateBMRouteRev(){
  1588. if(this.currentRoute==null){
  1589. this.$alert('请点击选择Route版本!', '错误', {
  1590. confirmButtonText: '确定'
  1591. })
  1592. return false;
  1593. }
  1594. if(this.currentRoute.status!=='Buildable'){
  1595. this.$alert('只有Buildable状态的可以保存!', '错误', {
  1596. confirmButtonText: '确定'
  1597. })
  1598. return false;
  1599. }
  1600. let inData={
  1601. site:this.routeData.site,
  1602. codeNo:this.searchData.codeNo,
  1603. routingType:this.currentRoute.routingType,
  1604. routingRevision:this.currentRoute.routingRevision,
  1605. routingAlternativeNo:this.currentRoute.alternativeNo
  1606. }
  1607. this.$confirm("更改工艺路线后,之前填写的工艺信息都将覆盖,是否继续?", '保存提示', {
  1608. confirmButtonText: '确定',
  1609. cancelButtonText: '取消',
  1610. }).then(() => {
  1611. updateBMRouteRev(inData).then(({data}) => {
  1612. if (data && data.code === 0) {
  1613. this.searchTable();
  1614. this.modalFlag = false;
  1615. this.$message.success('操作成功')
  1616. } else {
  1617. this.$message.error(data.msg)
  1618. }
  1619. })
  1620. })
  1621. },
  1622. jumpRoute(){
  1623. if(this.routeData.routingRevision!=null||this.routeData.routingRevision!==''){
  1624. this.$message.error("route明细不存在")
  1625. }
  1626. let inData={
  1627. site:this.searchData.site,
  1628. partNo:this.routeData.partNo,
  1629. routingType:this.routeData.routingType,
  1630. routingRevision:this.routeData.routingRevision,
  1631. }
  1632. localStorage.setItem('routeData', JSON.stringify(inData))
  1633. window.open('#/part-routingManagement');
  1634. },
  1635. // 获取流程的配置权限
  1636. getNodeAuthority (row) {
  1637. getBMStatusDesc(this.searchData).then(({data}) => {
  1638. this.superAdmin=data.superAdmin
  1639. if(data.superAdmin){
  1640. this.ifDisableFlag = false
  1641. return false
  1642. }
  1643. if (data.status === '已完成' || data.status === '已升版' || data.status === 'Dead') {
  1644. this.ifDisableFlag = true
  1645. return false
  1646. }
  1647. if(data.status === '审批中') {
  1648. let tempData = {
  1649. site: row.site,
  1650. stepId: row.stepId,
  1651. menuId: '103002'
  1652. }
  1653. getNodeAuthority(tempData).then(({data}) => {
  1654. if (data && data.code === 0) {
  1655. this.ifDisableFlag = true
  1656. let plmStepRoleBaseBm = data.rows.plm_stepRole_base_bm
  1657. let arr = plmStepRoleBaseBm.filter(a => a.fieldId === this.searchData.fieldId)
  1658. if (arr.length > 0) {
  1659. if (arr[0].updateFlag === 'N') {
  1660. this.ifDisableFlag = true
  1661. } else {
  1662. this.ifDisableFlag = false
  1663. }
  1664. } else {
  1665. this.ifDisableFlag = true
  1666. }
  1667. }
  1668. })
  1669. }
  1670. })
  1671. },
  1672. // 打开提交模态框
  1673. submitDataModal () {
  1674. this.rejectOpinion = ''
  1675. this.submitModalFlag = true
  1676. },
  1677. // 同意提交
  1678. agreeSubmit () {
  1679. this.$confirm(`是否确认提交?`, '提示', {
  1680. confirmButtonText: '确定',
  1681. cancelButtonText: '取消',
  1682. type: 'warning'
  1683. }).then(() => {
  1684. let tempData = {
  1685. site: this.searchData.site,
  1686. userName: this.$store.state.user.name,
  1687. codeNo: this.searchData.codeNo,
  1688. menuId: '103002',
  1689. nodeConclusion: 'Y'
  1690. }
  1691. this.submitData(tempData)
  1692. })
  1693. },
  1694. // 驳回提交
  1695. rejectSubmit () {
  1696. this.$confirm(`是否确认驳回?`, '提示', {
  1697. confirmButtonText: '确定',
  1698. cancelButtonText: '取消',
  1699. type: 'warning'
  1700. }).then(() => {
  1701. let tempData = {
  1702. site: this.searchData.site,
  1703. userName: this.$store.state.user.name,
  1704. codeNo: this.searchData.codeNo,
  1705. menuId: '103002',
  1706. nodeConclusion: 'N',
  1707. rejectOpinion : this.rejectOpinion
  1708. }
  1709. this.submitData(tempData)
  1710. })
  1711. },
  1712. async submitData (tempData) {
  1713. await updateBMProcess(this.sheetData).then(({data}) => {
  1714. if (data && data.code === 0) {
  1715. tsdBasicInformationSearch(this.searchData).then(({data}) => {
  1716. if (data.row) {
  1717. this.sheetData = data.row
  1718. }
  1719. });
  1720. } else {
  1721. this.$message.error(data.msg)
  1722. return false
  1723. }
  1724. })
  1725. await updateBMRoutingDetail(this.dataForm).then(({data}) => {
  1726. if (data && data.code === 0) {
  1727. } else {
  1728. this.$message.error(data.msg)
  1729. return false
  1730. }
  1731. })
  1732. await submitChange(tempData).then(({data}) => {
  1733. if (data && data.code === 0) {
  1734. // this.searchTable();
  1735. // 2025-05-31 操作成功才刷新界面,如果报错了则不刷新界面
  1736. window.location.reload();
  1737. this.submitModalFlag = false
  1738. this.$message({message: '操作成功', type: 'success'})
  1739. } else {
  1740. this.$alert(data.msg, '错误', {
  1741. confirmButtonText: '确定'
  1742. })
  1743. }
  1744. })
  1745. },
  1746. // 关闭模态框后刷新下方预览 重新加载组件
  1747. closeItemModel () {
  1748. this.componentKey = Number( this.componentKey) + 1
  1749. this.chooseRoute(this.nowRoute)
  1750. },
  1751. },
  1752. }
  1753. </script>
  1754. <style scoped>
  1755. input[readonly] {
  1756. cursor: text;
  1757. }
  1758. </style>