赫艾前端
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.

1603 lines
61 KiB

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
2 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
4 years ago
3 years ago
3 years ago
3 years ago
4 years ago
3 years ago
3 years ago
3 years ago
4 years ago
3 years ago
4 years ago
4 years ago
4 years ago
3 years ago
3 years ago
4 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
2 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 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
2 years ago
3 years ago
3 years ago
3 years ago
1 year ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
1 year ago
1 year ago
1 year ago
3 years ago
1 year ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
4 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
1 year ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
1 year 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
1 year ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
1 year ago
3 years ago
3 years ago
3 years ago
4 years ago
9 months ago
3 years ago
4 years ago
3 years ago
4 years ago
1 year ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
4 years ago
4 years ago
3 years ago
10 months ago
4 years ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
3 years ago
4 years ago
3 years ago
1 year ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
4 years ago
1 year ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
4 years ago
3 years ago
4 years ago
3 years ago
2 years ago
3 years ago
1 year ago
4 years ago
2 years ago
3 years ago
4 years ago
4 years ago
4 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
4 years ago
3 years ago
3 years ago
4 years ago
3 years ago
3 years ago
3 years ago
1 year ago
1 year ago
3 years ago
4 years ago
4 years ago
3 years ago
3 years ago
1 year ago
3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 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
2 years ago
2 years ago
1 year ago
3 years ago
10 months ago
10 months ago
10 months ago
10 months ago
3 years ago
10 months ago
10 months ago
1 year ago
2 years ago
1 year ago
3 years ago
4 years ago
3 years ago
4 years ago
3 years ago
3 years ago
3 years ago
4 years ago
4 years ago
3 years ago
4 years ago
3 years ago
3 years ago
3 years ago
4 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
1 year ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
3 years ago
4 years ago
3 years ago
3 years ago
4 years ago
3 years ago
3 years ago
3 years ago
4 years ago
3 years ago
3 years ago
4 years ago
3 years ago
3 years ago
4 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
1 year ago
3 years ago
1 year 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
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
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
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
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 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
1 year ago
1 year ago
3 years ago
1 year ago
3 years ago
1 year ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
1 year ago
4 years ago
2 years ago
3 years ago
3 years ago
4 years ago
3 years ago
  1. <template>
  2. <div class="mod-config">
  3. <el-form :inline="true" label-position="top" label-width="100px" >
  4. <el-form-item :label="'工厂编码'">
  5. <el-input v-model="searchData.site" style="width: 130px"></el-input>
  6. </el-form-item>
  7. <el-form-item :label="'生产订单号'">
  8. <el-input v-model="searchData.orderNo" style="width: 130px"></el-input>
  9. </el-form-item>
  10. <el-form-item :label="'派工单号'">
  11. <el-input v-model="searchData.seqNo" type="number" style="width: 120px"></el-input>
  12. </el-form-item>
  13. <el-form-item >
  14. <span slot="label" style="" @click="getBaseList(24)"><a herf="#">加工中心编码</a></span>
  15. <el-input v-model="searchData.sWorkCenterNo" style="width: 120px"></el-input>
  16. </el-form-item>
  17. <el-form-item >
  18. <span slot="label" style="" @click="getBaseList(5)"><a herf="#">产品编码</a></span>
  19. <el-input v-model="searchData.partNo" style="width: 120px"></el-input>
  20. </el-form-item>
  21. <el-form-item :label="'规格型号'">
  22. <el-input v-model="searchData.partDesc" style="width: 120px"></el-input>
  23. </el-form-item>
  24. <el-form-item :label="'派工单类型'">
  25. <el-select v-model="searchData.scheduleType" style="width: 120px">
  26. <el-option label="全部" value=""></el-option>
  27. <el-option label="生产订单派工单" value="生产订单派工单"></el-option>
  28. <el-option label="日计划派工单" value="日计划派工单"></el-option>
  29. </el-select>
  30. </el-form-item>
  31. <el-form-item :label="'派工单是否关闭'">
  32. <el-select v-model="searchData.closedFlag" style="width: 120px">
  33. <el-option label="全部" value=""></el-option>
  34. <el-option label="是" value="Y"></el-option>
  35. <el-option label="否" value="N"></el-option>
  36. </el-select>
  37. </el-form-item>
  38. </el-form>
  39. <el-form :inline="true" label-position="top" label-width="100px" style="margin-top: 0px;">
  40. <el-form-item :label="'派工日期:'">
  41. <el-date-picker
  42. style="width: 130px"
  43. v-model="searchData.startDate"
  44. value-format="yyyy-MM-dd"
  45. placeholder="选择日期">
  46. </el-date-picker>
  47. </el-form-item>
  48. <el-form-item :label="'至: '">
  49. <el-date-picker
  50. style="width: 130px"
  51. v-model="searchData.endDate"
  52. type="date"
  53. value-format="yyyy-MM-dd"
  54. placeholder="选择日期">
  55. </el-date-picker>
  56. </el-form-item>
  57. <el-form-item >
  58. <span slot="label" style="" @click="getBaseList(26,3)"><a herf="#">操作员姓名</a></span>
  59. <el-input v-model="searchData.operatorName" style="width: 120px"></el-input>
  60. </el-form-item>
  61. <el-form-item >
  62. <span slot="label" style="" @click="getBaseList(88)"><a herf="#">机台ID</a></span>
  63. <el-input v-model="searchData.sResourceID" style="width: 120px"></el-input>
  64. </el-form-item>
  65. <el-form-item label="是否返修">
  66. <el-select v-model="searchData.repairSOFlag" style="width: 120px">
  67. <el-option label="全部" value=""></el-option>
  68. <el-option label="返修" value="Y"></el-option>
  69. <el-option label="非返修" value="N"></el-option>
  70. </el-select>
  71. </el-form-item>
  72. <el-form-item :label="'班次'">
  73. <el-select v-model="searchData.sShiftNo" style="width: 120px">
  74. <el-option label="全部" value=""></el-option>
  75. <el-option label="白班" value="白班"></el-option>
  76. <el-option label="晚班" value="晚班"></el-option>
  77. <el-option label="加班" value="加班"></el-option>
  78. </el-select>
  79. </el-form-item>
  80. <el-form-item :label="'上道派工单'">
  81. <el-input v-model="searchData.previousSeqNo" style="width: 130px"></el-input>
  82. </el-form-item>
  83. <el-form-item :label="'发料派工单'">
  84. <el-input v-model="searchData.materSeqNo" style="width: 130px"></el-input>
  85. </el-form-item>
  86. <el-form-item :label="' '">
  87. <el-button @click="search()" style="margin-left: 0px;margin-top:0px" type="primary">查询</el-button>
  88. <download-excel
  89. :fields="exportDataStandard"
  90. :data="tableData"
  91. type="xlsx"
  92. :name="exportName"
  93. :header="exportHeader"
  94. :footer="exportFooter"
  95. :defaultValue="exportDefaultValue"
  96. :fetch="createExportData"
  97. :before-generate="startDownload"
  98. :before-finish="finishDownload"
  99. worksheet="导出信息"
  100. class="el-button el-button--primary el-button--medium">
  101. {{'导出'}}
  102. </download-excel>
  103. </el-form-item>
  104. </el-form>
  105. <el-form :inline="true" label-position="top" label-width="100px" style="margin-top: 0px;">
  106. <el-form-item :label="' '">
  107. <el-button @click="openStart()" style="margin-left: 0px;margin-top:0px" type="primary">派工单开始</el-button>
  108. <el-button @click="openScan()" style="margin-left: 0px;margin-top:0px" type="primary">派工单报工</el-button>
  109. <el-button @click="stopScan()" style="margin-left: 0px;margin-top:0px" type="primary">派工单异常暂停 </el-button>
  110. <el-button @click="continueScan()" style="margin-left: 0px;margin-top:0px" type="primary">派工单异常继续</el-button>
  111. <download-excel
  112. :fields="exportDataStandard"
  113. :data="tableData"
  114. type="xlsx"
  115. :name="exportName"
  116. :header="exportHeader"
  117. :footer="exportFooter"
  118. :defaultValue="exportDefaultValue"
  119. :fetch="createExportData"
  120. :before-generate="startDownload"
  121. :before-finish="finishDownload"
  122. worksheet="导出信息"
  123. class="el-button el-button--primary el-button--medium">
  124. {{'导出'}}
  125. </download-excel>
  126. </el-form-item>
  127. </el-form>
  128. <el-table
  129. :height="height"
  130. :data="tableData"
  131. border
  132. style="width: 100%">
  133. <el-table-column
  134. prop=""
  135. header-align="center"
  136. align="center"
  137. min-width="100"
  138. label="操作">
  139. <template slot-scope="scope" class="foo_container">
  140. <a type="text" size="small" @click="initReportModal(scope.row)">报工</a>
  141. <a type="text" size="small" @click="SOPModal2(scope.row)">查看SOP</a>
  142. </template>
  143. </el-table-column>
  144. <el-table-column
  145. prop="site"
  146. header-align="center"
  147. align="left"
  148. min-width="60"
  149. label="工厂编码">
  150. </el-table-column>
  151. <el-table-column
  152. prop="seqNo"
  153. header-align="center"
  154. align="left"
  155. min-width="70"
  156. label="派工单号">
  157. </el-table-column>
  158. <el-table-column
  159. prop="orderNo"
  160. header-align="center"
  161. align="left"
  162. min-width="100"
  163. label="生产订单号">
  164. </el-table-column>
  165. <el-table-column
  166. prop="sScheduledDate"
  167. header-align="center"
  168. align="left"
  169. min-width="80"
  170. label="派工日期">
  171. </el-table-column>
  172. <el-table-column
  173. prop="operatorName"
  174. header-align="center"
  175. align="left"
  176. min-width="80"
  177. label="操作员姓名">
  178. </el-table-column>
  179. <el-table-column
  180. prop="partNo"
  181. header-align="center"
  182. align="left"
  183. min-width="80"
  184. label="产品编码">
  185. </el-table-column>
  186. <el-table-column
  187. prop="partDesc"
  188. header-align="center"
  189. align="left"
  190. min-width="200"
  191. label="产品名称">
  192. </el-table-column>
  193. <el-table-column
  194. prop="scheduleType"
  195. header-align="center"
  196. align="left"
  197. min-width="100"
  198. label="派工单类型">
  199. </el-table-column>
  200. <el-table-column
  201. prop="itemNo"
  202. header-align="center"
  203. align="left"
  204. min-width="70"
  205. label="工序号">
  206. </el-table-column>
  207. <el-table-column
  208. prop="itemDesc"
  209. header-align="center"
  210. align="left"
  211. min-width="160"
  212. label="工序名称">
  213. </el-table-column>
  214. <el-table-column
  215. prop="qtyRequired"
  216. header-align="center"
  217. align="right"
  218. min-width="80"
  219. label="派工数量">
  220. </el-table-column>
  221. <el-table-column
  222. prop="jobType"
  223. header-align="center"
  224. align="center"
  225. min-width="70"
  226. label="派工类型">
  227. </el-table-column>
  228. <el-table-column
  229. prop="weight"
  230. header-align="center"
  231. align="right"
  232. min-width="80"
  233. label="参考重量">
  234. </el-table-column>
  235. <el-table-column
  236. prop="qtyReported"
  237. header-align="center"
  238. align="right"
  239. min-width="80"
  240. label="报工数量">
  241. </el-table-column>
  242. <el-table-column
  243. prop="qtyApprove"
  244. header-align="center"
  245. align="right"
  246. min-width="80"
  247. label="合格数量">
  248. </el-table-column>
  249. <el-table-column
  250. prop="timeRequired"
  251. header-align="center"
  252. align="right"
  253. min-width="80"
  254. label="需求时间">
  255. </el-table-column>
  256. <el-table-column
  257. prop="sResourceID"
  258. header-align="center"
  259. align="left"
  260. min-width="70"
  261. label="机台ID">
  262. </el-table-column>
  263. <el-table-column
  264. prop="sShiftNo"
  265. header-align="center"
  266. align="left"
  267. min-width="70"
  268. label="班次">
  269. </el-table-column>
  270. <el-table-column
  271. prop="sWorkCenterNo"
  272. header-align="center"
  273. align="left"
  274. min-width="100"
  275. label="加工中心编码">
  276. </el-table-column>
  277. <el-table-column
  278. prop="previousSeqNo"
  279. header-align="center"
  280. align="center"
  281. min-width="80"
  282. label="上道派工单">
  283. </el-table-column>
  284. <el-table-column
  285. prop="previousBatchNo"
  286. header-align="center"
  287. align="center"
  288. min-width="120"
  289. label="发料批号">
  290. </el-table-column>
  291. <el-table-column
  292. prop="materSeqNo"
  293. header-align="center"
  294. align="center"
  295. min-width="80"
  296. label="发料派工单">
  297. </el-table-column>
  298. </el-table>
  299. <el-dialog title="扫描派工单" :close-on-click-modal="false" v-drag :visible.sync="scanModalFlag" width="215px" >
  300. <el-form :inline="true" label-position="top" style="margin-left: 22px;margin-top: -5px;" @submit.native.prevent>
  301. <el-form-item :label="'派工单号:'">
  302. <el-input v-model="scanSeqNo" ref="input" type="number" style="width: 130px;" @keyup.enter.native="searchSeqNo()"></el-input>
  303. </el-form-item>
  304. </el-form>
  305. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  306. <el-button type="primary" @click="searchSeqNo()">搜索</el-button>
  307. <el-button type="primary" @click="scanModalFlag = false">取消</el-button>
  308. </el-footer>
  309. </el-dialog>
  310. <el-dialog title="开始派工单" :close-on-click-modal="false" v-drag :visible.sync="startModalFlag" width="215px">
  311. <el-form :inline="true" label-position="top" style="margin-left: 22px;margin-top: -5px;" @submit.native.prevent>
  312. <el-form-item :label="'派工单号:'">
  313. <el-input v-model="scanSeqNo" ref="start" type="number" style="width: 130px;" ></el-input>
  314. </el-form-item>
  315. <el-form-item label="工位:" >
  316. <el-select v-model="tvId" style="width: 130px">
  317. <el-option label="无" value="" ></el-option>
  318. <el-option
  319. v-for="(item,index) in tvList"
  320. :key="index"
  321. :label="item.tvId+'-'+item.workStation"
  322. :value="item.tvId"
  323. >
  324. </el-option>
  325. </el-select>
  326. </el-form-item>
  327. <el-form-item :label="'上道派工单:'">
  328. <el-input v-model="previousSeqNo" type="number" style="width: 130px;" ></el-input>
  329. </el-form-item>
  330. </el-form>
  331. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  332. <el-button type="primary" @click="startSeqNo()">开始</el-button>
  333. <el-button type="primary" @click="startModalFlag = false">取消</el-button>
  334. </el-footer>
  335. </el-dialog>
  336. <el-dialog title="派工单暂停" :close-on-click-modal="false" v-drag :visible.sync="stopModalFlag" width="620px" >
  337. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: -5px;">
  338. <el-form-item :label="'派工单号:'">
  339. <el-input v-model="stopData.seqNo" ref="stop" type="number" @keyup.enter.native="seqNoCheck()" style="width: 85px"></el-input>
  340. </el-form-item>
  341. <el-form-item :label="'生产订单:'">
  342. <el-input v-model="stopData.orderNo" disabled style="width: 100px"></el-input>
  343. </el-form-item>
  344. <el-form-item :label="'机台:'">
  345. <el-input v-model="stopData.resourceDesc" disabled style="width: 100px"></el-input>
  346. </el-form-item>
  347. <el-form-item :label="'班次:'">
  348. <el-input v-model="stopData.shiftNo" disabled style="width: 100px"></el-input>
  349. </el-form-item>
  350. <el-form-item :label="'异常原因:'">
  351. <el-select v-model="stopData.abnormalCode" style="width: 120px">
  352. <el-option
  353. v-for="(item,index) in abnormalList"
  354. :key="index"
  355. :label="item.abnormalDesc"
  356. :value="item.abnormalCode"
  357. >
  358. </el-option>
  359. </el-select>
  360. </el-form-item>
  361. </el-form>
  362. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: 0px;">
  363. <el-form-item :label="'异常数量:'">
  364. <el-input v-model="stopData.abnormalQty" type="number" style="width: 85px"></el-input>
  365. </el-form-item>
  366. <el-form-item :label="'异常情况影响分析:'">
  367. <el-input v-model="stopData.abnormalInfluence" style="width: 350px"></el-input>
  368. </el-form-item>
  369. <el-form-item :label="'下一步派工单:'">
  370. <el-input v-model="stopData.nextSeqNo" type="number" style="width: 85px"></el-input>
  371. </el-form-item>
  372. </el-form>
  373. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: 0px;">
  374. <el-form-item label="异常情况描述">
  375. <el-input v-model="stopData.abnormalRemark" type="textarea" :rows="3" resize='none' style="width: 562px"></el-input>
  376. </el-form-item>
  377. </el-form>
  378. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: 50px;">
  379. <el-upload drag :file-list="fileList"
  380. action="javascript:void(0);" ref="uploadFile"
  381. :on-change="onChange"
  382. multiple :auto-upload="false"
  383. style="text-align: left;">
  384. <i class="el-icon-upload"></i>
  385. <div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
  386. </el-upload>
  387. </el-form>
  388. <el-footer style="height:30px;margin-top: 20px;text-align:center">
  389. <el-button type="primary" @click="stopWork()" >保存</el-button>
  390. <el-button type="primary" @click="stopModalFlag = false">取消</el-button>
  391. </el-footer>
  392. </el-dialog>
  393. <el-dialog title="派工单继续" :close-on-click-modal="false" v-drag :visible.sync="continueModalFlag" width="215px">
  394. <el-form :inline="true" label-position="top" style="margin-left: 22px;margin-top: -5px;" @submit.native.prevent>
  395. <el-form-item :label="'派工单号:'">
  396. <el-input v-model="scanSeqNo" ref="continue" type="number" style="width: 130px;" @keyup.enter.native="continueWork()"></el-input>
  397. </el-form-item>
  398. </el-form>
  399. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  400. <el-button type="primary" @click="continueWork()">开始</el-button>
  401. <el-button type="primary" @click="continueModalFlag = false">取消</el-button>
  402. </el-footer>
  403. </el-dialog>
  404. <el-dialog class="big" @close="closeDialog" top="10vh" :close-on-click-modal="false" :close-on-press-escape="false" v-drag title="报告信息" :visible.sync="setUp.reviewFlag" width="615px">
  405. <el-form :inline="true" label-position="top">
  406. <el-form-item label="派工单号">
  407. <el-input style="width: 130px;" :disabled="setUp.disabled" onkeyup="this.value = this.value.toUpperCase()" v-model="saveHeaderData.seqNo"></el-input>
  408. </el-form-item>
  409. <el-form-item label="产品编码">
  410. <el-input style="width: 130px;" :disabled="setUp.disabled" v-model="saveHeaderData.partNo"></el-input>
  411. </el-form-item>
  412. <el-form-item label="产品名称/规格型号">
  413. <el-input style="width: 275px;" :disabled="setUp.disabled" v-model="saveHeaderData.partDescription"></el-input>
  414. </el-form-item>
  415. </el-form>
  416. <el-form :inline="true" label-position="top">
  417. <el-form-item label="工序号">
  418. <el-input style="width: 130px;" :disabled="setUp.disabled" v-model="saveHeaderData.itemNo"></el-input>
  419. </el-form-item>
  420. <el-form-item label="工序名称">
  421. <el-input style="width: 130px;" :disabled="setUp.disabled" v-model="saveHeaderData.operationDesc"></el-input>
  422. </el-form-item>
  423. <el-form-item label="加工中心编码">
  424. <el-input style="width: 130px;" :disabled="setUp.disabled" v-model="saveHeaderData.workCenterNo"></el-input>
  425. </el-form-item>
  426. <el-form-item label="加工中心名称">
  427. <el-input style="width: 130px;" :disabled="setUp.disabled" v-model="saveHeaderData.workCenterDesc"></el-input>
  428. </el-form-item>
  429. </el-form>
  430. <el-form :inline="true" label-position="top">
  431. <el-form-item>
  432. <span slot="label" style="" @click="getBaseList(26 ,1)"><a herf="#">操作员</a></span>
  433. <el-input style="width: 130px;" v-model="saveHeaderData.operatorId"></el-input>
  434. </el-form-item>
  435. <el-form-item label="操作员姓名">
  436. <el-input style="width: 130px;" v-model="saveHeaderData.operatorName"></el-input>
  437. </el-form-item>
  438. <el-form-item label="生产日期">
  439. <el-date-picker
  440. style="width: 130px"
  441. v-model="saveHeaderData.planStartTime"
  442. type="date"
  443. value-format="yyyy-MM-dd"
  444. format = "yyyy-MM-dd"
  445. placeholder="选择日期">
  446. </el-date-picker>
  447. </el-form-item>
  448. <el-form-item label="报告日期">
  449. <el-date-picker
  450. style="width: 130px"
  451. v-model="saveHeaderData.planFinishTime"
  452. type="date"
  453. value-format="yyyy-MM-dd"
  454. format = "yyyy-MM-dd"
  455. placeholder="选择日期">
  456. </el-date-picker>
  457. </el-form-item>
  458. </el-form>
  459. <el-form :inline="true" label-position="top">
  460. <!-- <el-form-item label="本工序报工数">-->
  461. <el-form-item label="本订单已报工数">
  462. <el-input style="width: 130px;" :disabled="setUp.disabled" v-model="qty1"></el-input>
  463. </el-form-item>
  464. <el-form-item label="上工序报工数">
  465. <el-input style="width: 130px;" :disabled="setUp.disabled" v-model="qty2"></el-input>
  466. </el-form-item>
  467. <el-form-item label="单位重量">
  468. <el-input style="width: 130px;" disabled v-model="qty3"></el-input>
  469. </el-form-item>
  470. <el-form-item label="本派工单数量">
  471. <el-input style="width: 130px;" disabled v-model="saveHeaderData.qtyRequire"></el-input>
  472. </el-form-item>
  473. </el-form>
  474. <el-form :inline="true" label-position="top">
  475. <el-form-item label="合格数量">
  476. <el-input type="number" style="width: 178px;" :disabled="approveFlag" class="input_reight" v-model="saveHeaderData.qtyApprove" @blur="qtyApproveBlur()"></el-input>
  477. </el-form-item>
  478. <el-form-item label="不合格/缺失数量" >
  479. <el-input type="number" class="input_left" style="width: 178px;" v-model="saveHeaderData.qtyUnApprove" @blur="qtyReportedBlur()"></el-input>
  480. </el-form-item>
  481. <el-form-item label="生产模数">
  482. <el-input type="number" style="width: 178px;" v-model="moQty" @blur="moQtyBlur()"></el-input>
  483. </el-form-item>
  484. </el-form>
  485. <el-form :inline="true" label-position="top">
  486. <el-form-item label="带框合格重量(KG)">
  487. <el-input type="number" style="width: 178px;" class="input_reight" :disabled="factorFlag" v-model="KGApprove" @blur="KGApproveBlur()"></el-input>
  488. </el-form-item>
  489. <el-form-item label="不合格/缺失重量(KG)">
  490. <el-input type="number" class="input_left" style="width: 178px;" :disabled="factorFlag" v-model="KGReported" @blur="KGReportedBlur()"></el-input>
  491. </el-form-item>
  492. <el-form-item label="模具孔数">
  493. <el-input type="number" class="input_left" style="width: 178px;" disabled v-model="cavity" ></el-input>
  494. </el-form-item>
  495. <!-- <el-form-item label="返工重量(KG)" >-->
  496. <!-- <el-input type="number" style="width: 178px;" v-model="KGRework" :disabled="factorFlag" @blur="KGReworkBlur()"></el-input>-->
  497. <!-- </el-form-item>-->
  498. </el-form>
  499. <el-form :inline="true" label-position="top">
  500. <el-form-item label="框重(KG)">
  501. <el-input type="number" class="input_left" style="width: 178px;" :disabled="factorFlag" v-model="saveHeaderData.boxWeight" @blur="boxWeightBlur()"></el-input>
  502. </el-form-item>
  503. <el-form-item label="废边重量(G)">
  504. <el-input style="width: 178px;" v-model="saveHeaderData.wasteWeight"></el-input>
  505. </el-form-item>
  506. <el-form-item label="理论数量">
  507. <el-input type="number" class="input_left" style="width: 178px;" disabled v-model="saveHeaderData.liLunQty" ></el-input>
  508. </el-form-item>
  509. </el-form>
  510. <fieldset class="customer-fieldset" style="width: 597px;margin-left: -3px;">
  511. <legend class="customer-legend">不良处理</legend>
  512. <el-form :inline="true" label-position="top">
  513. <el-form-item label="报废数量">
  514. <el-input style="width: 80px;" type="number" :disabled="unapproveFlag" v-model="saveHeaderData.scrapQty"></el-input>
  515. </el-form-item>
  516. <el-form-item label="报废原因">
  517. <el-input style="width: 480px;" v-model="saveHeaderData.scrapRemark"></el-input>
  518. </el-form-item>
  519. </el-form>
  520. <el-form :inline="true" label-position="top">
  521. <el-form-item label="接收数量">
  522. <el-input style="width: 80px;" type="number" :disabled="unapproveFlag" v-model="saveHeaderData.acceptQty"></el-input>
  523. </el-form-item>
  524. <el-form-item label="瑕疵原因">
  525. <el-input style="width: 480px;" v-model="saveHeaderData.acceptRemark"></el-input>
  526. </el-form-item>
  527. </el-form>
  528. </fieldset>
  529. <el-form :inline="true" label-position="top">
  530. <el-form-item label="准备时间">
  531. <el-input type="number" style="width: 178px;text-align: right;" v-model="saveHeaderData.preparationTime" ></el-input> <!--oninput ="value=value.replace(/[^0-9.]/g,'')"-->
  532. <!-- <el-input-number style="width: 178px;text-align: right;" v-model="saveHeaderData.preparationTime" size="medium" :min="0" :controls="false"></el-input-number>-->
  533. </el-form-item>
  534. <el-form-item label="制造时间">
  535. <el-input type="number" style="width: 178px;" disabled v-model="saveHeaderData.manufacturingTime"></el-input> <!--oninput ="value=value.replace(/[^0-9.]/g,'')"-->
  536. <!-- <el-input-number style="width: 178px;text-align: right;" v-model="saveHeaderData.manufacturingTime" size="medium" :min="0" :controls="false"></el-input-number>-->
  537. </el-form-item>
  538. <el-form-item label="打印检验标签数" label-width="0px">
  539. <el-input type="number" style="width: 178px;" onkeyup="value=value.replace(/^(0+)|[^\d]+/g,'')" v-model="saveHeaderData.printQty"></el-input> <!--oninput ="value=value.replace(/[^0-9.]/g,'')"-->
  540. <!-- :min="0" 最小值 :controls="false" 隐藏减价按钮 -->
  541. <!-- <el-input-number style="width: 178px;text-align: right;" v-model="saveHeaderData.cleaningTime" size="medium" :min="0" :controls="false"></el-input-number>-->
  542. </el-form-item>
  543. </el-form>
  544. <el-form :inline="true" label-position="top">
  545. <el-form-item label="备注">
  546. <el-input style="width: 560px;" v-model="saveHeaderData.remark"></el-input>
  547. </el-form-item>
  548. </el-form>
  549. <el-table
  550. height="150"
  551. :data="toolHistList"
  552. border>
  553. <el-table-column label="工具实例" prop="toolInstanceID"></el-table-column>
  554. <el-table-column label="工具名称" prop="toolDescription"></el-table-column>
  555. <el-table-column label="生产模数">
  556. <template slot-scope="{row,$index}">
  557. <el-input type="number" v-model="row.finishQty"></el-input>
  558. </template>
  559. </el-table-column>
  560. </el-table>
  561. <span slot="footer" class="dialog-footer">
  562. <el-button @click="SOPModal()" type="primary">查看SOP</el-button>
  563. <el-button @click="setUp.reviewFlag = false">取消</el-button>
  564. <el-button type="primary" :disabled="setUp.saveButton" @click="saveReport('N')">分批报工确定</el-button>
  565. <el-button type="danger" :disabled="setUp.saveButton" style="margin-left: 200px" @click="saveReport('Y')">整单完工确定</el-button>
  566. </span>
  567. </el-dialog>
  568. <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" v-drag title="查看SOP" :visible.sync="sopFlag" width="80%">
  569. <el-row>
  570. <el-col :span="8">
  571. <div style="margin-top: 2%">
  572. <h5 style="margin-left: 0px;font-size: 20px">产品图片</h5>
  573. <el-form inline="true" style="margin-top: -5px;margin-left: 0px" label-position="top">
  574. <el-form-item :label="'工厂编号:'">
  575. <el-input v-model="sopData.site" readonly style="width: 120px"></el-input>
  576. </el-form-item>
  577. <el-form-item :label="'产品编码:'" style="margin-left: 20px">
  578. <el-input v-model="sopData.partNo" readonly style="width: 120px"></el-input>
  579. </el-form-item>
  580. </el-form>
  581. <el-form inline="true" style="margin-top: 20px;margin-left: 0px" label-position="top">
  582. <el-form-item :label="'产品名称/规格型号:'" style="font-size: 20px">
  583. <el-input v-model="partDescription" readonly style="width: 374px"></el-input>
  584. </el-form-item>
  585. </el-form>
  586. <el-form inline="true" style="margin-top: 20px;margin-left: 0px" label-position="top">
  587. <el-form-item :label="fileTitle">
  588. <el-input v-model="fileName" style="width: 374px" readonly></el-input>
  589. </el-form-item>
  590. </el-form>
  591. <el-form inline="true" style="margin-top: 20px;margin-left: 20px" label-position="top">
  592. <el-form-item :label="' '">
  593. <el-button @click="lastPicture()" type="primary">上一张</el-button>
  594. </el-form-item>
  595. <el-form-item :label="' '">
  596. <el-button @click="nextPicture()" type="primary">下一张</el-button>
  597. </el-form-item>
  598. <el-form-item :label="' '">
  599. <el-button @click="sopFlag=false" type="primary">取消</el-button>
  600. </el-form-item>
  601. </el-form>
  602. </div>
  603. </el-col>
  604. <el-col :span="16">
  605. <div id="padPhoto" style="text-align: center;vertical-align:middle;" >
  606. <iframe :src="photoUrl" frameborder="0" width="100%" :height="height2"></iframe>
  607. </div>
  608. </el-col>
  609. </el-row>
  610. </el-dialog>
  611. <Chooselist ref="baseList" @getBaseData="getBaseData"></Chooselist>
  612. </div>
  613. </template>
  614. <script>
  615. import {
  616. printTransNoLabel,
  617. } from "@/views/modules/print/print_transNo_label.js"
  618. import {
  619. getSOScheduleRoutingData,
  620. saveGenerateReportForSchedule,
  621. searchReportedQty,
  622. searchSeqNo,
  623. startSeqNo,
  624. stopWork,
  625. continueWork,
  626. getTvList,
  627. getBadCodeList,
  628. selectSFDCToolHist
  629. } from '@/api/production/generateReport.js'
  630. import Chooselist from '@/views/modules/common/Chooselist'
  631. import {
  632. getPhotoAddressData
  633. } from '@/api/pad.js'
  634. import {
  635. getAbnormalCodeList,
  636. getShopOrderData,
  637. } from "@/api/abnormal.js"
  638. import {Decimal} from 'decimal.js'
  639. import {getPackagePrintDataList} from "../../../api/production/generateReport";
  640. import {printPackageLabelNoPreview} from "../print/print_package_label-NOOREVIEW";
  641. export default {
  642. name: 'generateReport',
  643. components: {
  644. Chooselist
  645. },
  646. watch: {
  647. saveHeaderData: {
  648. deep: true,
  649. handler: function (newV, oldV) {
  650. if(this.saveHeaderData.qtyUnApprove==0||this.saveHeaderData.qtyUnApprove===null||this.saveHeaderData.qtyUnApprove===''){
  651. this.unapproveFlag=true
  652. this.saveHeaderData.scrapQty=''
  653. this.saveHeaderData.acceptQty=''
  654. }else {
  655. this.unapproveFlag=false
  656. }
  657. }
  658. }
  659. },
  660. data () {
  661. return {
  662. pageData: {
  663. site: this.$store.state.user.site,
  664. username: this.$store.state.user.name,
  665. projectId: '',
  666. projectName: '',
  667. fileType: '',
  668. },
  669. folder: 'abnormal',
  670. fileList: [],
  671. toolHistList:[],// 工具
  672. cavity:'',
  673. setUp: {
  674. reviewFlag: false,
  675. saveButton: false,
  676. readonlyFlag: false,
  677. disabled: false
  678. },
  679. factorFlag:false,
  680. unapproveFlag:false,
  681. KGReported:'',
  682. KGApprove:'',
  683. KGRework:'',
  684. approveFlag:false,
  685. abnormalList:[],
  686. moQty:'',
  687. tvList:[],
  688. tvId:'',
  689. badCodeList:'',
  690. saveHeaderData: {
  691. closedFlag: '',
  692. scrapQty:0,
  693. scrapRemark:'',
  694. acceptQty:'',
  695. acceptRemark:0,
  696. wasteWeight:0,
  697. printQty:'',
  698. boxWeight:0,
  699. qtyRequire:'',
  700. qtyUnApprove:'',
  701. site: '',
  702. seqNo: '',
  703. itemNo: '',
  704. partNo: '',
  705. partDescription: '',
  706. operationDesc: '',
  707. workCenterNo: '',
  708. workCenterDesc: '',
  709. operatorId: '',
  710. operatorName: '',
  711. planStartTime: '',
  712. planFinishTime: '',
  713. qtyReported: 0,
  714. qtyApprove: 0,
  715. qtyRework: 0,
  716. operatorId2: '',
  717. operatorIdName2: '',
  718. scrapReason: '',
  719. preparationTime: 0,
  720. manufacturingTime: 0,
  721. cleaningTime: 0,
  722. shutdownReason: '',
  723. remark: '',
  724. orderRef1:'',
  725. scheduleType:'',
  726. userId:'',
  727. liLunQty:'',
  728. reportWeight:'',
  729. approveWeight:'',
  730. moldQty:'',
  731. },
  732. scanSeqNo:'',
  733. previousSeqNo:'',
  734. stopModalFlag:false,
  735. continueModalFlag:false,
  736. qty1:'',
  737. qty2:'',
  738. qty3:'',
  739. sopFlag:false,
  740. site: '',
  741. operatorType: 0,
  742. // 导出 start
  743. exportData: [],
  744. exportDataStandard: {
  745. '派工单号': 'seqNo',
  746. '关联单号': 'orderNo',
  747. '关联单号类型': 'scheduleType',
  748. '工序号': 'itemNo',
  749. '工序名称': 'itemDesc',
  750. '派工数量': 'qtyRequired',
  751. '报工数量': 'qtyReported',
  752. '合格数量': 'qtyApprove',
  753. '需求时间': 'timeRequired',
  754. '派工日期': 'sScheduledDate',
  755. '操作员姓名': 'operatorName',
  756. '产品编码': 'partNo',
  757. '产品名称': 'partDesc',
  758. '机台ID': 'sResourceID',
  759. '班次': 'sShiftNo',
  760. '加工中心': 'sWorkCenterNo',
  761. '派工类型': 'jobType',
  762. },
  763. exportName: '派工单列表' + this.getStrDate(),
  764. exportHeader: ['派工单列表'],
  765. exportFooter: [],
  766. exportDefaultValue: '',
  767. // 导出 end
  768. height: 200,
  769. tableData: [],
  770. date1: '',
  771. searchData: {
  772. seqNo:'',
  773. userId:this.$store.state.user.name,
  774. orderNo: '',
  775. sWorkCenterNo: '',
  776. partNo: '',
  777. site: '',
  778. partDesc:'',
  779. scheduleType:'',
  780. closedFlag:'N',
  781. startDate:'',
  782. endDate:'',
  783. operatorName:'',
  784. sResourceID:'',
  785. sShiftNo:'',
  786. previousSeqNo:'',
  787. materSeqNo:'',
  788. repairSOFlag:'',
  789. },
  790. photoUrl:'',
  791. sopData:{
  792. site:'',
  793. partNo:'',
  794. },
  795. currentRow:'',
  796. scanModalFlag:false,
  797. partDescription:'',
  798. fileTitle:'',
  799. fileName:'',
  800. num:1,
  801. currentData:'',
  802. photoDatas:[],
  803. uploadImg:[],
  804. showviewer: false,
  805. url: '',
  806. height2:600,
  807. tagNo2:'',
  808. startModalFlag:false,
  809. stopData:{
  810. site:'',
  811. seqNo:'',
  812. orderNo:'',
  813. shiftNo:'',
  814. resourceDesc:'',
  815. feedbackBy:this.$store.state.user.name,
  816. abnormalCode:'',
  817. abnormalRemark:'',
  818. abnormalInfluence:'',
  819. abnormalQty:'',
  820. nextSeqNo:'',
  821. },
  822. }
  823. },
  824. mounted () {
  825. this.$nextTick(() => {
  826. this.height = window.innerHeight - 210
  827. this.height2 = window.innerHeight -100
  828. })
  829. },
  830. methods: {
  831. getAllAbnormalItem(){
  832. getAbnormalCodeList().then(({data}) => {
  833. this.abnormalList = data.rows;
  834. })
  835. },
  836. saveReport (flag) {
  837. this.saveHeaderData.qtyReported=Number(this.saveHeaderData.qtyUnApprove)+Number(this.saveHeaderData.qtyApprove);
  838. if (this.saveHeaderData.qtyUnApprove == null || this.saveHeaderData.qtyUnApprove < 0) {
  839. this.$alert('不合格数量错误!', '错误信息', {
  840. confirmButtonText: '确定'
  841. })
  842. return
  843. }
  844. if (this.saveHeaderData.qtyApprove == null || this.saveHeaderData.qtyApprove < 0) {
  845. this.$alert('合格数量错误!', '错误信息', {
  846. confirmButtonText: '确定'
  847. })
  848. return
  849. }
  850. if (this.saveHeaderData.qtyRework == null || this.saveHeaderData.qtyRework <0) {
  851. this.$alert('返工数量错误!', '错误信息', {
  852. confirmButtonText: '确定'
  853. })
  854. return
  855. }
  856. if (this.saveHeaderData.preparationTime == null || this.saveHeaderData.preparationTime < 0) {
  857. this.$alert('准备时间错误!', '错误信息', {
  858. confirmButtonText: '确定'
  859. })
  860. return
  861. }
  862. if (this.saveHeaderData.manufacturingTime == null || this.saveHeaderData.manufacturingTime < 0) {
  863. this.$alert('制造时间错误!', '错误信息', {
  864. confirmButtonText: '确定'
  865. })
  866. return
  867. }
  868. if (this.saveHeaderData.cleaningTime == null || this.saveHeaderData.cleaningTime < 0) {
  869. this.$alert('清理时间错误!', '错误信息', {
  870. confirmButtonText: '确定'
  871. })
  872. return
  873. }
  874. if (this.saveHeaderData.planStartTime == null || this.saveHeaderData.planStartTime === '') {
  875. this.$alert('请选择生产日期!', '错误信息', {
  876. confirmButtonText: '确定'
  877. })
  878. return
  879. }
  880. if (this.saveHeaderData.planFinishTime == null || this.saveHeaderData.planFinishTime === '') {
  881. this.$alert('请选择报告日期!', '错误信息', {
  882. confirmButtonText: '确定'
  883. })
  884. return
  885. }
  886. if (this.saveHeaderData.boxWeight == null || this.saveHeaderData.boxWeight === '') {
  887. this.$alert('请输入框重!', '错误信息', {
  888. confirmButtonText: '确定'
  889. })
  890. return
  891. }
  892. if(this.saveHeaderData.printQty>30){
  893. this.$alert('打印标签数最多为30张!', '错误信息', {
  894. confirmButtonText: '确定'
  895. })
  896. return
  897. }
  898. if(this.moQty==null||this.moQty==''){
  899. this.saveHeaderData.moldQty=0
  900. }else {
  901. this.saveHeaderData.moldQty=this.moQty
  902. }
  903. let boxWeightKG=0
  904. if(this.saveHeaderData.boxWeight!=null&&this.saveHeaderData.boxWeight!=''){
  905. boxWeightKG=this.saveHeaderData.boxWeight
  906. }
  907. if(this.KGApprove!=null&&this.KGApprove!=''&&this.KGApprove>=0){
  908. this.saveHeaderData.approveWeight=Number(this.KGApprove)-boxWeightKG
  909. if(this.KGReported!=null&&this.KGReported!=''){
  910. this.KGReported=0
  911. }
  912. this.saveHeaderData.reportWeight=Number(this.KGApprove)-boxWeightKG+Number(this.KGReported)
  913. }
  914. if(this.saveHeaderData.scrapQty==null||this.saveHeaderData.scrapQty==''){
  915. this.saveHeaderData.scrapQty=0
  916. }
  917. if(this.saveHeaderData.acceptQty==null||this.saveHeaderData.acceptQty==''){
  918. this.saveHeaderData.acceptQty=0
  919. }
  920. // 判断生产模数
  921. if (this.toolHistList.length > 0){
  922. if (!this.toolHistList.some(item => item.finishQty && item.finishQty !== 0)) {
  923. this.$alert('至少填写一条工具的生产模数!', '错误信息', {
  924. confirmButtonText: '确定'
  925. })
  926. return
  927. }
  928. this.saveHeaderData.toolingHistDataList = this.toolHistList
  929. this.saveHeaderData.createBy = this.$store.state.user.name
  930. this.saveHeaderData.moQty = this.toolHistList.reduce((prev, cur)=>{
  931. return new Decimal(prev).add(new Decimal(cur.finishQty)).toNumber()
  932. },0)
  933. }
  934. this.setUp.saveButton=true;
  935. this.saveHeaderData.closedFlag=flag
  936. saveGenerateReportForSchedule(this.saveHeaderData).then(({data}) => {
  937. this.setUp.saveButton = false
  938. if (data.code == 0) {
  939. this.$message.success(data.msg)
  940. this.setUp.reviewFlag = false
  941. // this.search()
  942. let inList=[];
  943. // 入库通知单
  944. if(data.transData!=null){
  945. // 生成袋装标签
  946. let params = {
  947. site:this.saveHeaderData.site,
  948. seqNo:this.saveHeaderData.seqNo,
  949. previousSeqNo:this.saveHeaderData.seqNo,
  950. orderNo:this.saveHeaderData.orderNo,
  951. number:this.saveHeaderData.qtyApprove,
  952. }
  953. // if (data.transData.partNo.substring(0, 2) === 'SP'){
  954. //
  955. // }
  956. getPackagePrintDataList(params).then(({data}) => {
  957. if (data && data.code === 0) {
  958. data.rows[0].tcpValue = 1
  959. printPackageLabelNoPreview(data.rows);
  960. }
  961. })
  962. //他们要打印2张
  963. // 2025-04-08加上打印袋装标签后,只需要一张入库通知单标签
  964. // inList.push(data.transData)
  965. inList.push(data.transData)
  966. }
  967. // 不良数据
  968. if(data.badData!=null){
  969. inList.push(data.badData)
  970. }
  971. // 报工数据
  972. if(data.reportData!=null&&data.transData==null){
  973. inList.push(data.reportData)
  974. }
  975. if(this.saveHeaderData.printQty>0){
  976. for (let i = 0; i <this.saveHeaderData.printQty ; i++) {
  977. inList.push(this.currentRow)
  978. }
  979. }
  980. if(inList.length>0){
  981. printTransNoLabel(inList);
  982. }
  983. this.$nextTick(() => {
  984. setTimeout(() => {
  985. if(data.feedBackId&&data.feedBackId>0){
  986. let inData={id:data.feedBackId};
  987. localStorage.setItem('feedBackId', JSON.stringify(inData))
  988. this.$router.push('Abnormal-AbnormalFeedBack')
  989. }
  990. },1000)
  991. })
  992. } else {
  993. this.$alert(data.msg, '错误', {
  994. confirmButtonText: '确定'
  995. })
  996. this.setUp.saveButton = false
  997. }
  998. }).error((error)=>{
  999. this.setUp.saveButton = false
  1000. })
  1001. },
  1002. // 获取基础数据列表S
  1003. getBaseList (val, type) {
  1004. this.tagNo = val
  1005. this.tagNo2 = type
  1006. this.$nextTick(() => {
  1007. let strVal = ''
  1008. if (val === 24) {
  1009. strVal = this.searchData.sWorkCenterNo
  1010. }
  1011. if (val === 5) {
  1012. strVal = this.searchData.partNo
  1013. }
  1014. if (val === 26) {
  1015. if(type==1) {
  1016. strVal = this.saveHeaderData.operatorId
  1017. }else if(type==2){
  1018. strVal = this.saveHeaderData.operatorId2
  1019. }else {
  1020. strVal = this.searchData.operatorName
  1021. }
  1022. }
  1023. if (val === 88) {
  1024. strVal = this.searchData.sResourceID
  1025. }
  1026. this.$refs.baseList.init(val, strVal)
  1027. })
  1028. },
  1029. /* 列表方法的回调 */
  1030. getBaseData (val) {
  1031. if (this.tagNo === 24) {
  1032. this.searchData.sWorkCenterNo = val.WorkCenterNo
  1033. } else if (this.tagNo === 5) {
  1034. this.searchData.partNo = val.PartNo
  1035. }
  1036. if (this.tagNo === 26) {
  1037. if(this.tagNo2==1) {
  1038. this.saveHeaderData.operatorId = val.OperatorID
  1039. this.saveHeaderData.operatorName = val.OperatorName
  1040. }else if(this.tagNo2==2){
  1041. this.saveHeaderData.operatorId2 = val.OperatorID
  1042. this.saveHeaderData.operatorIdName2 = val.OperatorName
  1043. }else {
  1044. this.searchData.operatorName = val.OperatorName
  1045. }
  1046. }
  1047. if (this.tagNo === 88) {
  1048. this.searchData.sResourceID = val.ResourceID
  1049. }
  1050. },
  1051. initReportModal (row) {
  1052. this.scanSeqNo=row.seqNo
  1053. this.searchSeqNo()
  1054. this.selectSFDCToolHist(row)
  1055. },
  1056. closeDialog () {
  1057. Object.assign(this.$data.saveHeaderData, this.$options.data.call(this).saveHeaderData)
  1058. },
  1059. search () {
  1060. getSOScheduleRoutingData(this.searchData).then(({data}) => {
  1061. this.tableData = data.rows
  1062. })
  1063. // let inData={id:50};
  1064. // localStorage.setItem('feedBackId', JSON.stringify(inData))
  1065. // this.$router.push('Abnormal-AbnormalFeedBack')
  1066. },
  1067. selectSFDCToolHist(row){
  1068. let params = {
  1069. site:row.site,
  1070. orderNo:row.orderNo,
  1071. itemNo:row.itemNo,
  1072. seqNo:row.seqNo,
  1073. finishFlag:"N"
  1074. }
  1075. selectSFDCToolHist(params).then(({data})=>{
  1076. if (data && data.code === 0){
  1077. this.toolHistList = data.rows
  1078. }else {
  1079. this.$alert(data.msg, '错误', {
  1080. confirmButtonText: '确定'
  1081. })
  1082. }
  1083. }).catch((error)=>{
  1084. this.$alert(error, '错误', {
  1085. confirmButtonText: '确定'
  1086. })
  1087. })
  1088. },
  1089. createExportData () {
  1090. return this.tableData
  1091. },
  1092. startDownload () {
  1093. // this.exportData = this.dataList
  1094. },
  1095. finishDownload () {
  1096. },
  1097. getStrDate () {
  1098. let dd = new Date()
  1099. let Y = dd.getFullYear()
  1100. let M = (dd.getMonth() + 1) < 10 ? '0' + (dd.getMonth() + 1) : (dd.getMonth() + 1)// 获取当前月份的日期,不足10补0
  1101. let D = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate()// 获取当前几号,不足10补0
  1102. let H = dd.getHours() < 10 ? '0' + dd.getHours() : dd.getHours()
  1103. let MM = dd.getMinutes() < 10 ? '0' + dd.getMinutes() : dd.getMinutes()
  1104. let S = dd.getSeconds() < 10 ? '0' + dd.getSeconds() : dd.getSeconds()
  1105. return Y + M + D + H + MM + S
  1106. },
  1107. SOPModal(){
  1108. this.sopData.partNo = this.saveHeaderData.partNo;
  1109. this.sopData.site= this.saveHeaderData.site;
  1110. this.partDescription= this.saveHeaderData.partDescription;
  1111. // var div1=document.getElementById("padPhoto");
  1112. // div1.style.cssText= "height:"+this.height2+"px;";
  1113. this.getPhoto();
  1114. this.sopFlag=true;
  1115. },
  1116. SOPModal2(row){
  1117. this.sopData.partNo = row.partNo;
  1118. this.sopData.site= row.site;
  1119. this.partDescription= row.partDesc;
  1120. // var div1=document.getElementById("padPhoto");
  1121. // div1.style.cssText= "height:"+this.height2+"px;";
  1122. this.getPhoto();
  1123. this.sopFlag=true;
  1124. },
  1125. getPhoto(){
  1126. getPhotoAddressData(this.sopData).then(({data}) => {
  1127. this.photoDatas = data.rows;
  1128. if(this.photoDatas.length==0){
  1129. this.fileTitle="文件名 ("+0+"/"+0+")";
  1130. this.$alert('该物料没有上传图片!', '错误', {
  1131. confirmButtonText: '确定'
  1132. })
  1133. return false;
  1134. }
  1135. this.fileName=this.photoDatas[this.num-1].attaFileNameDb;
  1136. this.fileTitle="文件名 ("+this.num+"/"+this.photoDatas.length+")";
  1137. this.photoUrl=this.$store.state.user.padSopUrl+this.photoDatas[this.num-1].attaFileNameDb;
  1138. // this.photoUrl='http://192.168.1.83:81/upload/'+this.photoDatas[this.num-1].attaFileNameDb;
  1139. })
  1140. },
  1141. nextPicture(){
  1142. if(this.photoDatas.length==0){
  1143. this.fileTitle="文件名 ("+0+"/"+0+")";
  1144. this.$alert('该物料没有上传图片!', '错误', {
  1145. confirmButtonText: '确定'
  1146. })
  1147. return false;
  1148. }
  1149. if(this.num==this.photoDatas.length){
  1150. this.num=1;
  1151. }else{
  1152. this.num=this.num+1;
  1153. }
  1154. this.fileName=this.photoDatas[this.num-1].attaFileNameDb;
  1155. this.fileTitle="文件名 ("+this.num+"/"+this.photoDatas.length+")";
  1156. this.photoUrl=this.$store.state.user.padSopUrl+this.photoDatas[this.num-1].attaFileNameDb;
  1157. // this.photoUrl='http://192.168.1.83:81/upload/'+this.photoDatas[this.num-1].attaFileNameDb;
  1158. },
  1159. lastPicture(){
  1160. if(this.photoDatas.length==0){
  1161. this.fileTitle="文件名 ("+0+"/"+0+")";
  1162. this.fileName='';
  1163. this.photoUrl='';
  1164. this.$alert('该物料没有上传图片!', '错误', {
  1165. confirmButtonText: '确定'
  1166. })
  1167. return false;
  1168. }
  1169. if(this.num==1){
  1170. this.num=this.photoDatas.length;
  1171. }else{
  1172. this.num=this.num-1;
  1173. }
  1174. this.fileName=this.photoDatas[this.num-1].attaFileNameDb;
  1175. this.fileTitle="文件名 ("+this.num+"/"+this.photoDatas.length+")";
  1176. this.photoUrl=this.$store.state.user.padSopUrl+this.photoDatas[this.num-1].attaFileNameDb;
  1177. // this.photoUrl='http://192.168.1.83:81/upload/'+this.photoDatas[this.num-1].attaFileNameDb;
  1178. },
  1179. openScan(){
  1180. this.scanSeqNo='';
  1181. this.scanModalFlag=true;
  1182. this.$nextTick(() => { this.$refs.input.focus();})
  1183. },
  1184. openStart(){
  1185. this.scanSeqNo='';
  1186. this.tvId='';
  1187. this.previousSeqNo='';
  1188. this.startModalFlag=true;
  1189. this.$nextTick(() => { this.$refs.start.focus();})
  1190. },
  1191. seqNoCheck(){
  1192. let inData={
  1193. seqNo:this.stopData.seqNo
  1194. }
  1195. getShopOrderData(inData).then(({data}) => {
  1196. let rows=data.rows;
  1197. if(rows.length==0){
  1198. this.stopData.seqNo='',
  1199. this.stopData.shiftNo='',
  1200. this.stopData.site='',
  1201. this.stopData.resourceDesc='',
  1202. this.stopData.orderNo='',
  1203. this.$alert('该派工单不存在!', '错误', {
  1204. confirmButtonText: '确定'
  1205. })
  1206. this.$nextTick(() => { this.$refs.stop.focus();})
  1207. return false
  1208. }else {
  1209. this.stopData.shiftNo=data.rows[0].sShiftNo
  1210. this.stopData.site=data.rows[0].site
  1211. this.stopData.resourceDesc=data.rows[0].resourceDesc
  1212. this.stopData.orderNo=data.rows[0].orderNo
  1213. }
  1214. })
  1215. },
  1216. stopScan(){
  1217. this.getAllAbnormalItem();
  1218. this.stopData.seqNo='';
  1219. this.stopData.shiftNo='';
  1220. this.stopData.site='';
  1221. this.stopData.resourceDesc='';
  1222. this.stopData.orderNo='';
  1223. this.stopData.abnormalRemark='';
  1224. this.stopData.abnormalCode='';
  1225. this.stopData.nextSeqNo='';
  1226. this.stopModalFlag=true;
  1227. this.fileList = [];
  1228. this.$nextTick(() => { this.$refs.stop.focus();})
  1229. },
  1230. continueScan(){
  1231. this.scanSeqNo='';
  1232. this.continueModalFlag=true;
  1233. this.$nextTick(() => { this.$refs.continue.focus();})
  1234. },
  1235. searchSeqNo(){
  1236. if(this.scanSeqNo==''){
  1237. this.$alert("请扫描派工单!",'错误', {
  1238. confirmButtonText: '确定'
  1239. })
  1240. return false;
  1241. }
  1242. let inData={
  1243. userId:this.$store.state.user.name,
  1244. seqNo:this.scanSeqNo
  1245. }
  1246. searchSeqNo(inData).then(({data}) => {
  1247. if (data.code == 0) {
  1248. if(data.row==null){
  1249. this.scanSeqNo=''
  1250. this.$alert("派工单不存在!",'错误', {
  1251. confirmButtonText: '确定'
  1252. })
  1253. return false;
  1254. }
  1255. let currentData = data.row;
  1256. if(currentData.closedFlag=='Y'){
  1257. this.scanSeqNo=''
  1258. this.$alert("该派工单已关闭!",'错误', {
  1259. confirmButtonText: '确定'
  1260. })
  1261. return false;
  1262. }
  1263. this.KGReported=0
  1264. this.KGApprove=0
  1265. this.KGRework=0
  1266. this.saveHeaderData.qtyApprove=0
  1267. this.saveHeaderData.qtyUnApprove=0
  1268. this.saveHeaderData.acceptRemark= ''
  1269. this.saveHeaderData.acceptQty= 0
  1270. this.saveHeaderData.scrapRemark= ''
  1271. this.saveHeaderData.scrapQty= 0
  1272. this.saveHeaderData.qtyRework=0
  1273. this.saveHeaderData.moldQty=0
  1274. this.saveHeaderData.reportWeight=0
  1275. this.saveHeaderData.approveWeight=0
  1276. this.saveHeaderData.site = currentData.site;
  1277. this.saveHeaderData.seqNo = currentData.seqNo;
  1278. this.saveHeaderData.itemNo = currentData.itemNo;
  1279. this.saveHeaderData.operationDesc = currentData.itemDesc;
  1280. this.saveHeaderData.partNo = currentData.partNo;
  1281. this.saveHeaderData.partDescription = currentData.partSpec;
  1282. this.saveHeaderData.workCenterNo = currentData.sWorkCenterNo;
  1283. this.saveHeaderData.workCenterDesc = currentData.workCenterDesc;
  1284. this.saveHeaderData.orderRef1=currentData.orderRef1;
  1285. this.saveHeaderData.orderNo=currentData.orderNo;
  1286. this.saveHeaderData.scheduleType=currentData.scheduleType;
  1287. this.saveHeaderData.operatorId=currentData.operatorId;
  1288. this.saveHeaderData.operatorName=currentData.operatorName;
  1289. this.saveHeaderData.qtyRequire=currentData.qtyRequired;
  1290. this.saveHeaderData.userId=this.$store.state.user.name;
  1291. this.saveHeaderData.boxWeight=0;
  1292. this.saveHeaderData.printQty=0;
  1293. this.saveHeaderData.wasteWeight=0;
  1294. this.qty1='';
  1295. this.qty2 ='';
  1296. this.moQty ='';
  1297. this.liLunQty ='';
  1298. this.saveHeaderData.planStartTime = this.dayjs(new Date()).format('YYYY-MM-DD 00:00:00')
  1299. this.saveHeaderData.planFinishTime = this.dayjs(new Date()).format('YYYY-MM-DD 00:00:00')
  1300. this.selectSFDCToolHist(this.saveHeaderData)
  1301. searchReportedQty(this.saveHeaderData).then(({data}) => {
  1302. if(data.code===0) {
  1303. this.cavity= data.row.cavity
  1304. this.qty1 = data.row.qtyReported;
  1305. this.qty2 = data.row.lastApproveQty;
  1306. this.saveHeaderData.manufacturingTime = data.row.timeReported;
  1307. if (data.row.weightFactor == 0) {
  1308. this.qty3 = "erp未维护数据"
  1309. this.KGReported = ''
  1310. this.KGApprove = ''
  1311. this.KGRework = ''
  1312. this.factorFlag = true;
  1313. } else {
  1314. this.qty3 = data.row.weightFactor
  1315. this.factorFlag = false;
  1316. }
  1317. }else {
  1318. this.$alert(data.msg, '错误', {
  1319. confirmButtonText: '确定'
  1320. })
  1321. return false;
  1322. }
  1323. })
  1324. this.approveFlag=false;
  1325. this.scanModalFlag=false;
  1326. this.setUp.reviewFlag = true;
  1327. this.setUp.saveButton=false;
  1328. this.setUp.disabled = true;
  1329. getSOScheduleRoutingData(inData).then(({data}) => {
  1330. if( data.rows){
  1331. if(data.rows.length>0){
  1332. data.rows[0].weight= Number(data.rows[0].weight.toFixed(2))
  1333. data.rows[0].type='jianyan'
  1334. this.currentRow=data.rows[0]
  1335. }
  1336. }
  1337. })
  1338. } else {
  1339. this.scanSeqNo=''
  1340. this.$alert(data.msg, '错误', {
  1341. confirmButtonText: '确定'
  1342. })
  1343. }
  1344. })
  1345. },
  1346. qtyReportedBlur(){
  1347. if(this.qty3&&this.qty3!=0&&this.qty3!='erp未维护数据'&&this.saveHeaderData.qtyUnApprove!=''){
  1348. this.KGReported=(this.saveHeaderData.qtyUnApprove*this.qty3).toFixed(1)
  1349. }
  1350. if(this.saveHeaderData.qtyUnApprove==''){
  1351. this.KGReported=''
  1352. }
  1353. },
  1354. moQtyBlur(){
  1355. if(this.cavity&&this.cavity!=0&&this.cavity!='erp未维护数据'&&this.moQty!=''){
  1356. this.saveHeaderData.liLunQty=(this.cavity*this.moQty).toFixed(1)
  1357. }
  1358. },
  1359. qtyApproveBlur(){
  1360. if(this.qty3&&this.qty3!=0&&this.qty3!='erp未维护数据'&&this.saveHeaderData.qtyApprove!=''){
  1361. if(this.saveHeaderData.boxWeight!=null&&this.saveHeaderData.boxWeight!='') {
  1362. this.KGApprove = (this.saveHeaderData.qtyApprove * this.qty3+Number(this.saveHeaderData.boxWeight)).toFixed(1)
  1363. }else {
  1364. this.KGApprove = (this.saveHeaderData.qtyApprove * this.qty3).toFixed(1)
  1365. }
  1366. this.factorFlag=true
  1367. }
  1368. if(this.saveHeaderData.qtyApprove==''){
  1369. this.KGApprove=''
  1370. }
  1371. },
  1372. boxWeightBlur(){
  1373. if(this.saveHeaderData.boxWeight==null||this.saveHeaderData.boxWeight==''){
  1374. this.saveHeaderData.boxWeight=0
  1375. }
  1376. if(this.approveFlag){
  1377. if(this.qty3&&this.qty3!=0&&this.qty3!='erp未维护数据'&&this.KGApprove!=''){
  1378. this.saveHeaderData.qtyApprove=((this.KGApprove-this.saveHeaderData.boxWeight)/this.qty3).toFixed(0)
  1379. }
  1380. }else {
  1381. if(this.qty3&&this.qty3!=0&&this.qty3!='erp未维护数据'&&this.saveHeaderData.qtyApprove!=''){
  1382. this.KGApprove = (this.saveHeaderData.qtyApprove * this.qty3+Number(this.saveHeaderData.boxWeight)).toFixed(1)
  1383. }
  1384. }
  1385. },
  1386. KGApproveBlur(){
  1387. if(this.qty3&&this.qty3!=0&&this.qty3!='erp未维护数据'&&this.KGApprove!=''){
  1388. if(this.saveHeaderData.boxWeight!=null&&this.saveHeaderData.boxWeight!=''){
  1389. this.saveHeaderData.qtyApprove=((this.KGApprove-this.saveHeaderData.boxWeight)/this.qty3).toFixed(0)
  1390. }else {
  1391. this.saveHeaderData.qtyApprove=(this.KGApprove/this.qty3).toFixed(0)
  1392. }
  1393. this.approveFlag=true;
  1394. }
  1395. if(this.KGApprove==''){
  1396. this.saveHeaderData.qtyApprove=''
  1397. this.approveFlag=false;
  1398. }
  1399. },
  1400. qtyReworkBlur(){
  1401. if(this.qty3&&this.qty3!=0&&this.qty3!='erp未维护数据'&&this.saveHeaderData.qtyRework!=''){
  1402. this.KGRework=(this.saveHeaderData.qtyRework*this.qty3).toFixed(1)
  1403. }
  1404. if(this.saveHeaderData.qtyRework==''){
  1405. this.KGRework=''
  1406. }
  1407. },
  1408. KGReportedBlur(){
  1409. if(this.qty3&&this.qty3!=0&&this.qty3!='erp未维护数据'&&this.KGReported!=''){
  1410. this.saveHeaderData.qtyUnApprove=(this.KGReported/this.qty3).toFixed(0)
  1411. }
  1412. if(this.KGReported==''){
  1413. this.saveHeaderData.qtyUnApprove=''
  1414. }
  1415. },
  1416. KGReworkBlur(){
  1417. if(this.qty3&&this.qty3!=0&&this.qty3!='erp未维护数据'&&this.KGRework!=''){
  1418. this.saveHeaderData.qtyRework=(this.KGRework/this.qty3).toFixed(0)
  1419. }
  1420. if(this.KGRework==''){
  1421. this.saveHeaderData.qtyRework=''
  1422. }
  1423. },
  1424. startSeqNo(){
  1425. let inData={
  1426. username:this.$store.state.user.name,
  1427. seqNo:this.scanSeqNo,
  1428. previousSeqNo:this.previousSeqNo,
  1429. tvId:this.tvId,
  1430. }
  1431. startSeqNo(inData).then(({data}) => {
  1432. if (data && data.code === 0) {
  1433. this.scanSeqNo='';
  1434. this.previousSeqNo='';
  1435. this.startModalFlag=false;
  1436. this.$message({
  1437. message: '操作成功',
  1438. type: 'success',
  1439. duration: 1500,
  1440. onClose: () => {
  1441. }
  1442. })
  1443. } else {
  1444. this.scanSeqNo='';
  1445. this.previousSeqNo='';
  1446. this.$alert(data.msg, '错误', {
  1447. confirmButtonText: '确定'
  1448. })
  1449. }
  1450. })
  1451. },
  1452. stopWork(){
  1453. if( this.stopData.seqNo==null||this.stopData.seqNo==''){
  1454. this.$alert("请输入派工单号", '错误', {
  1455. confirmButtonText: '确定'
  1456. })
  1457. return false;
  1458. }
  1459. if( this.stopData.abnormalCode==null||this.stopData.abnormalCode==''){
  1460. this.$alert("请选择异常原因", '错误', {
  1461. confirmButtonText: '确定'
  1462. })
  1463. return false;
  1464. }
  1465. if( this.stopData.abnormalRemark==null||this.stopData.abnormalRemark==''){
  1466. this.$alert("请输入描述", '错误', {
  1467. confirmButtonText: '确定'
  1468. })
  1469. return false;
  1470. }
  1471. const formData = new FormData();
  1472. //片接文件
  1473. for (let i = 0; i < this.fileList.length; i++) {
  1474. formData.append("file",this.fileList[i].raw)
  1475. }
  1476. formData.append("folder", this.folder);
  1477. formData.append("site", this.stopData.site);
  1478. formData.append("seqNo", this.stopData.seqNo);
  1479. formData.append("orderNo", this.stopData.orderNo);
  1480. formData.append("resourceDesc", this.stopData.resourceDesc);
  1481. formData.append("feedbackBy", this.stopData.feedbackBy);
  1482. formData.append("abnormalCode", this.stopData.abnormalCode);
  1483. formData.append("abnormalRemark", this.stopData.abnormalRemark);
  1484. formData.append("abnormalInfluence", this.stopData.abnormalInfluence);
  1485. formData.append("abnormalQty", this.stopData.abnormalQty);
  1486. formData.append("nextSeqNo", this.stopData.nextSeqNo);
  1487. // let inData={
  1488. // username:this.$store.state.user.name,
  1489. // seqNo:this.scanSeqNo
  1490. // }
  1491. stopWork(formData).then(({data}) => {
  1492. if (data && data.code === 0) {
  1493. this.stopModalFlag=false;
  1494. this.$refs.uploadFile.clearFiles();
  1495. this.fileList = [];
  1496. this.$message({
  1497. message: '派工单已暂停',
  1498. type: 'success',
  1499. duration: 1500,
  1500. onClose: () => {
  1501. }
  1502. })
  1503. } else {
  1504. this.scanSeqNo='';
  1505. this.$alert(data.msg, '错误', {
  1506. confirmButtonText: '确定'
  1507. })
  1508. }
  1509. })
  1510. },
  1511. continueWork(){
  1512. let inData={
  1513. username:this.$store.state.user.name,
  1514. seqNo:this.scanSeqNo
  1515. }
  1516. continueWork(inData).then(({data}) => {
  1517. if (data && data.code === 0) {
  1518. this.scanSeqNo='';
  1519. this.continueModalFlag=false;
  1520. this.$message({
  1521. message: '派工单已继续',
  1522. type: 'success',
  1523. duration: 1500,
  1524. onClose: () => {
  1525. }
  1526. })
  1527. } else {
  1528. this.scanSeqNo='';
  1529. this.$alert(data.msg, '错误', {
  1530. confirmButtonText: '确定'
  1531. })
  1532. }
  1533. })
  1534. },
  1535. searchAllTV(){
  1536. getTvList().then(({data}) => {
  1537. this.tvList = data.rows;
  1538. })
  1539. },
  1540. getBadCodeList(){
  1541. getBadCodeList().then(({data}) => {
  1542. this.badCodeList = data.rows;
  1543. })
  1544. },
  1545. /*选择上传文件时*/
  1546. onChange(file,fileList){
  1547. this.fileList = fileList;
  1548. },
  1549. },
  1550. created () {
  1551. this.getBadCodeList();
  1552. this.searchAllTV();
  1553. }
  1554. }
  1555. </script>
  1556. <style scoped>
  1557. .input_left{
  1558. text-align: left;
  1559. }
  1560. .input_reight{
  1561. text-align: right;
  1562. }
  1563. /deep/ input::-webkit-inner-spin-button {
  1564. -webkit-appearance: none !important;
  1565. }
  1566. input[type='number'] {
  1567. -moz-appearance: textfield !important;
  1568. }
  1569. .big /deep/ .el-form-item__label {
  1570. font-size: 17px;
  1571. }
  1572. .big /deep/ .el-input__inner {
  1573. height: 22px !important;
  1574. font-size: 17px;
  1575. }
  1576. .big /deep/ .el-dialog__title {
  1577. font-size: 17px;
  1578. font-weight: bold;
  1579. }
  1580. .big /deep/ .el-table .cell{
  1581. height: auto !important;
  1582. }
  1583. </style>