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

1580 lines
60 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
1 year ago
1 year 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
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
3 years 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="primary" :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. export default {
  640. name: 'generateReport',
  641. components: {
  642. Chooselist
  643. },
  644. watch: {
  645. saveHeaderData: {
  646. deep: true,
  647. handler: function (newV, oldV) {
  648. if(this.saveHeaderData.qtyUnApprove==0||this.saveHeaderData.qtyUnApprove===null||this.saveHeaderData.qtyUnApprove===''){
  649. this.unapproveFlag=true
  650. this.saveHeaderData.scrapQty=''
  651. this.saveHeaderData.acceptQty=''
  652. }else {
  653. this.unapproveFlag=false
  654. }
  655. }
  656. }
  657. },
  658. data () {
  659. return {
  660. pageData: {
  661. site: this.$store.state.user.site,
  662. username: this.$store.state.user.name,
  663. projectId: '',
  664. projectName: '',
  665. fileType: '',
  666. },
  667. folder: 'abnormal',
  668. fileList: [],
  669. toolHistList:[],// 工具
  670. cavity:'',
  671. setUp: {
  672. reviewFlag: false,
  673. saveButton: false,
  674. readonlyFlag: false,
  675. disabled: false
  676. },
  677. factorFlag:false,
  678. unapproveFlag:false,
  679. KGReported:'',
  680. KGApprove:'',
  681. KGRework:'',
  682. approveFlag:false,
  683. abnormalList:[],
  684. moQty:'',
  685. tvList:[],
  686. tvId:'',
  687. badCodeList:'',
  688. saveHeaderData: {
  689. closedFlag: '',
  690. scrapQty:0,
  691. scrapRemark:'',
  692. acceptQty:'',
  693. acceptRemark:0,
  694. wasteWeight:0,
  695. printQty:'',
  696. boxWeight:0,
  697. qtyRequire:'',
  698. qtyUnApprove:'',
  699. site: '',
  700. seqNo: '',
  701. itemNo: '',
  702. partNo: '',
  703. partDescription: '',
  704. operationDesc: '',
  705. workCenterNo: '',
  706. workCenterDesc: '',
  707. operatorId: '',
  708. operatorName: '',
  709. planStartTime: '',
  710. planFinishTime: '',
  711. qtyReported: 0,
  712. qtyApprove: 0,
  713. qtyRework: 0,
  714. operatorId2: '',
  715. operatorIdName2: '',
  716. scrapReason: '',
  717. preparationTime: 0,
  718. manufacturingTime: 0,
  719. cleaningTime: 0,
  720. shutdownReason: '',
  721. remark: '',
  722. orderRef1:'',
  723. scheduleType:'',
  724. userId:'',
  725. liLunQty:'',
  726. reportWeight:'',
  727. approveWeight:'',
  728. moldQty:'',
  729. },
  730. scanSeqNo:'',
  731. previousSeqNo:'',
  732. stopModalFlag:false,
  733. continueModalFlag:false,
  734. qty1:'',
  735. qty2:'',
  736. qty3:'',
  737. sopFlag:false,
  738. site: '',
  739. operatorType: 0,
  740. // 导出 start
  741. exportData: [],
  742. exportDataStandard: {
  743. '派工单号': 'seqNo',
  744. '关联单号': 'orderNo',
  745. '关联单号类型': 'scheduleType',
  746. '工序号': 'itemNo',
  747. '工序名称': 'itemDesc',
  748. '派工数量': 'qtyRequired',
  749. '报工数量': 'qtyReported',
  750. '合格数量': 'qtyApprove',
  751. '需求时间': 'timeRequired',
  752. '派工日期': 'sScheduledDate',
  753. '操作员姓名': 'operatorName',
  754. '产品编码': 'partNo',
  755. '产品名称': 'partDesc',
  756. '机台ID': 'sResourceID',
  757. '班次': 'sShiftNo',
  758. '加工中心': 'sWorkCenterNo',
  759. '派工类型': 'jobType',
  760. },
  761. exportName: '派工单列表' + this.getStrDate(),
  762. exportHeader: ['派工单列表'],
  763. exportFooter: [],
  764. exportDefaultValue: '',
  765. // 导出 end
  766. height: 200,
  767. tableData: [],
  768. date1: '',
  769. searchData: {
  770. seqNo:'',
  771. userId:this.$store.state.user.name,
  772. orderNo: '',
  773. sWorkCenterNo: '',
  774. partNo: '',
  775. site: '',
  776. partDesc:'',
  777. scheduleType:'',
  778. closedFlag:'N',
  779. startDate:'',
  780. endDate:'',
  781. operatorName:'',
  782. sResourceID:'',
  783. sShiftNo:'',
  784. previousSeqNo:'',
  785. materSeqNo:'',
  786. repairSOFlag:'',
  787. },
  788. photoUrl:'',
  789. sopData:{
  790. site:'',
  791. partNo:'',
  792. },
  793. currentRow:'',
  794. scanModalFlag:false,
  795. partDescription:'',
  796. fileTitle:'',
  797. fileName:'',
  798. num:1,
  799. currentData:'',
  800. photoDatas:[],
  801. uploadImg:[],
  802. showviewer: false,
  803. url: '',
  804. height2:600,
  805. tagNo2:'',
  806. startModalFlag:false,
  807. stopData:{
  808. site:'',
  809. seqNo:'',
  810. orderNo:'',
  811. shiftNo:'',
  812. resourceDesc:'',
  813. feedbackBy:this.$store.state.user.name,
  814. abnormalCode:'',
  815. abnormalRemark:'',
  816. abnormalInfluence:'',
  817. abnormalQty:'',
  818. nextSeqNo:'',
  819. },
  820. }
  821. },
  822. mounted () {
  823. this.$nextTick(() => {
  824. this.height = window.innerHeight - 210
  825. this.height2 = window.innerHeight -100
  826. })
  827. },
  828. methods: {
  829. getAllAbnormalItem(){
  830. getAbnormalCodeList().then(({data}) => {
  831. this.abnormalList = data.rows;
  832. })
  833. },
  834. saveReport (flag) {
  835. this.saveHeaderData.qtyReported=Number(this.saveHeaderData.qtyUnApprove)+Number(this.saveHeaderData.qtyApprove);
  836. if (this.saveHeaderData.qtyUnApprove == null || this.saveHeaderData.qtyUnApprove < 0) {
  837. this.$alert('不合格数量错误!', '错误信息', {
  838. confirmButtonText: '确定'
  839. })
  840. return
  841. }
  842. if (this.saveHeaderData.qtyApprove == null || this.saveHeaderData.qtyApprove < 0) {
  843. this.$alert('合格数量错误!', '错误信息', {
  844. confirmButtonText: '确定'
  845. })
  846. return
  847. }
  848. if (this.saveHeaderData.qtyRework == null || this.saveHeaderData.qtyRework <0) {
  849. this.$alert('返工数量错误!', '错误信息', {
  850. confirmButtonText: '确定'
  851. })
  852. return
  853. }
  854. if (this.saveHeaderData.preparationTime == null || this.saveHeaderData.preparationTime < 0) {
  855. this.$alert('准备时间错误!', '错误信息', {
  856. confirmButtonText: '确定'
  857. })
  858. return
  859. }
  860. if (this.saveHeaderData.manufacturingTime == null || this.saveHeaderData.manufacturingTime < 0) {
  861. this.$alert('制造时间错误!', '错误信息', {
  862. confirmButtonText: '确定'
  863. })
  864. return
  865. }
  866. if (this.saveHeaderData.cleaningTime == null || this.saveHeaderData.cleaningTime < 0) {
  867. this.$alert('清理时间错误!', '错误信息', {
  868. confirmButtonText: '确定'
  869. })
  870. return
  871. }
  872. if (this.saveHeaderData.planStartTime == null || this.saveHeaderData.planStartTime === '') {
  873. this.$alert('请选择生产日期!', '错误信息', {
  874. confirmButtonText: '确定'
  875. })
  876. return
  877. }
  878. if (this.saveHeaderData.planFinishTime == null || this.saveHeaderData.planFinishTime === '') {
  879. this.$alert('请选择报告日期!', '错误信息', {
  880. confirmButtonText: '确定'
  881. })
  882. return
  883. }
  884. if (this.saveHeaderData.boxWeight == null || this.saveHeaderData.boxWeight === '') {
  885. this.$alert('请输入框重!', '错误信息', {
  886. confirmButtonText: '确定'
  887. })
  888. return
  889. }
  890. if(this.saveHeaderData.printQty>30){
  891. this.$alert('打印标签数最多为30张!', '错误信息', {
  892. confirmButtonText: '确定'
  893. })
  894. return
  895. }
  896. if(this.moQty==null||this.moQty==''){
  897. this.saveHeaderData.moldQty=0
  898. }else {
  899. this.saveHeaderData.moldQty=this.moQty
  900. }
  901. let boxWeightKG=0
  902. if(this.saveHeaderData.boxWeight!=null&&this.saveHeaderData.boxWeight!=''){
  903. boxWeightKG=this.saveHeaderData.boxWeight
  904. }
  905. if(this.KGApprove!=null&&this.KGApprove!=''&&this.KGApprove>=0){
  906. this.saveHeaderData.approveWeight=Number(this.KGApprove)-boxWeightKG
  907. if(this.KGReported!=null&&this.KGReported!=''){
  908. this.KGReported=0
  909. }
  910. this.saveHeaderData.reportWeight=Number(this.KGApprove)-boxWeightKG+Number(this.KGReported)
  911. }
  912. if(this.saveHeaderData.scrapQty==null||this.saveHeaderData.scrapQty==''){
  913. this.saveHeaderData.scrapQty=0
  914. }
  915. if(this.saveHeaderData.acceptQty==null||this.saveHeaderData.acceptQty==''){
  916. this.saveHeaderData.acceptQty=0
  917. }
  918. // 判断生产模数
  919. if (this.toolHistList.length > 0){
  920. if (!this.toolHistList.some(item => item.finishQty && item.finishQty !== 0)) {
  921. this.$alert('至少填写一条工具的生产模数!', '错误信息', {
  922. confirmButtonText: '确定'
  923. })
  924. return
  925. }
  926. this.saveHeaderData.toolingHistDataList = this.toolHistList
  927. this.saveHeaderData.createBy = this.$store.state.user.name
  928. this.saveHeaderData.moQty = this.toolHistList.reduce((prev, cur)=>{
  929. return new Decimal(prev).add(new Decimal(cur.finishQty)).toNumber()
  930. },0)
  931. }
  932. this.setUp.saveButton=true;
  933. this.saveHeaderData.closedFlag=flag
  934. saveGenerateReportForSchedule(this.saveHeaderData).then(({data}) => {
  935. this.setUp.saveButton = false
  936. if (data.code == 0) {
  937. this.$message.success(data.msg)
  938. this.setUp.reviewFlag = false
  939. // this.search()
  940. let inList=[];
  941. if(data.transData!=null){
  942. //他们要打印2张
  943. inList.push(data.transData)
  944. inList.push(data.transData)
  945. }
  946. if(data.badData!=null){
  947. inList.push(data.badData)
  948. }
  949. if(data.reportData!=null&&data.transData==null){
  950. inList.push(data.reportData)
  951. }
  952. if(this.saveHeaderData.printQty>0){
  953. for (let i = 0; i <this.saveHeaderData.printQty ; i++) {
  954. inList.push(this.currentRow)
  955. }
  956. }
  957. if(inList.length>0){
  958. printTransNoLabel(inList);
  959. }
  960. this.$nextTick(() => {
  961. setTimeout(() => {
  962. if(data.feedBackId&&data.feedBackId>0){
  963. let inData={id:data.feedBackId};
  964. localStorage.setItem('feedBackId', JSON.stringify(inData))
  965. this.$router.push('Abnormal-AbnormalFeedBack')
  966. }
  967. },1000)
  968. })
  969. } else {
  970. this.$alert(data.msg, '错误', {
  971. confirmButtonText: '确定'
  972. })
  973. this.setUp.saveButton = false
  974. }
  975. }).error((error)=>{
  976. this.setUp.saveButton = false
  977. })
  978. },
  979. // 获取基础数据列表S
  980. getBaseList (val, type) {
  981. this.tagNo = val
  982. this.tagNo2 = type
  983. this.$nextTick(() => {
  984. let strVal = ''
  985. if (val === 24) {
  986. strVal = this.searchData.sWorkCenterNo
  987. }
  988. if (val === 5) {
  989. strVal = this.searchData.partNo
  990. }
  991. if (val === 26) {
  992. if(type==1) {
  993. strVal = this.saveHeaderData.operatorId
  994. }else if(type==2){
  995. strVal = this.saveHeaderData.operatorId2
  996. }else {
  997. strVal = this.searchData.operatorName
  998. }
  999. }
  1000. if (val === 88) {
  1001. strVal = this.searchData.sResourceID
  1002. }
  1003. this.$refs.baseList.init(val, strVal)
  1004. })
  1005. },
  1006. /* 列表方法的回调 */
  1007. getBaseData (val) {
  1008. if (this.tagNo === 24) {
  1009. this.searchData.sWorkCenterNo = val.WorkCenterNo
  1010. } else if (this.tagNo === 5) {
  1011. this.searchData.partNo = val.PartNo
  1012. }
  1013. if (this.tagNo === 26) {
  1014. if(this.tagNo2==1) {
  1015. this.saveHeaderData.operatorId = val.OperatorID
  1016. this.saveHeaderData.operatorName = val.OperatorName
  1017. }else if(this.tagNo2==2){
  1018. this.saveHeaderData.operatorId2 = val.OperatorID
  1019. this.saveHeaderData.operatorIdName2 = val.OperatorName
  1020. }else {
  1021. this.searchData.operatorName = val.OperatorName
  1022. }
  1023. }
  1024. if (this.tagNo === 88) {
  1025. this.searchData.sResourceID = val.ResourceID
  1026. }
  1027. },
  1028. initReportModal (row) {
  1029. this.scanSeqNo=row.seqNo
  1030. this.searchSeqNo()
  1031. this.selectSFDCToolHist(row)
  1032. },
  1033. closeDialog () {
  1034. Object.assign(this.$data.saveHeaderData, this.$options.data.call(this).saveHeaderData)
  1035. },
  1036. search () {
  1037. getSOScheduleRoutingData(this.searchData).then(({data}) => {
  1038. this.tableData = data.rows
  1039. })
  1040. // let inData={id:50};
  1041. // localStorage.setItem('feedBackId', JSON.stringify(inData))
  1042. // this.$router.push('Abnormal-AbnormalFeedBack')
  1043. },
  1044. selectSFDCToolHist(row){
  1045. let params = {
  1046. site:row.site,
  1047. orderNo:row.orderNo,
  1048. itemNo:row.itemNo,
  1049. seqNo:row.seqNo,
  1050. finishFlag:"N"
  1051. }
  1052. selectSFDCToolHist(params).then(({data})=>{
  1053. if (data && data.code === 0){
  1054. this.toolHistList = data.rows
  1055. }else {
  1056. this.$alert(data.msg, '错误', {
  1057. confirmButtonText: '确定'
  1058. })
  1059. }
  1060. }).catch((error)=>{
  1061. this.$alert(error, '错误', {
  1062. confirmButtonText: '确定'
  1063. })
  1064. })
  1065. },
  1066. createExportData () {
  1067. return this.tableData
  1068. },
  1069. startDownload () {
  1070. // this.exportData = this.dataList
  1071. },
  1072. finishDownload () {
  1073. },
  1074. getStrDate () {
  1075. let dd = new Date()
  1076. let Y = dd.getFullYear()
  1077. let M = (dd.getMonth() + 1) < 10 ? '0' + (dd.getMonth() + 1) : (dd.getMonth() + 1)// 获取当前月份的日期,不足10补0
  1078. let D = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate()// 获取当前几号,不足10补0
  1079. let H = dd.getHours() < 10 ? '0' + dd.getHours() : dd.getHours()
  1080. let MM = dd.getMinutes() < 10 ? '0' + dd.getMinutes() : dd.getMinutes()
  1081. let S = dd.getSeconds() < 10 ? '0' + dd.getSeconds() : dd.getSeconds()
  1082. return Y + M + D + H + MM + S
  1083. },
  1084. SOPModal(){
  1085. this.sopData.partNo = this.saveHeaderData.partNo;
  1086. this.sopData.site= this.saveHeaderData.site;
  1087. this.partDescription= this.saveHeaderData.partDescription;
  1088. // var div1=document.getElementById("padPhoto");
  1089. // div1.style.cssText= "height:"+this.height2+"px;";
  1090. this.getPhoto();
  1091. this.sopFlag=true;
  1092. },
  1093. SOPModal2(row){
  1094. this.sopData.partNo = row.partNo;
  1095. this.sopData.site= row.site;
  1096. this.partDescription= row.partDesc;
  1097. // var div1=document.getElementById("padPhoto");
  1098. // div1.style.cssText= "height:"+this.height2+"px;";
  1099. this.getPhoto();
  1100. this.sopFlag=true;
  1101. },
  1102. getPhoto(){
  1103. getPhotoAddressData(this.sopData).then(({data}) => {
  1104. this.photoDatas = data.rows;
  1105. if(this.photoDatas.length==0){
  1106. this.fileTitle="文件名 ("+0+"/"+0+")";
  1107. this.$alert('该物料没有上传图片!', '错误', {
  1108. confirmButtonText: '确定'
  1109. })
  1110. return false;
  1111. }
  1112. this.fileName=this.photoDatas[this.num-1].attaFileNameDb;
  1113. this.fileTitle="文件名 ("+this.num+"/"+this.photoDatas.length+")";
  1114. this.photoUrl=this.$store.state.user.padSopUrl+this.photoDatas[this.num-1].attaFileNameDb;
  1115. // this.photoUrl='http://192.168.1.83:81/upload/'+this.photoDatas[this.num-1].attaFileNameDb;
  1116. })
  1117. },
  1118. nextPicture(){
  1119. if(this.photoDatas.length==0){
  1120. this.fileTitle="文件名 ("+0+"/"+0+")";
  1121. this.$alert('该物料没有上传图片!', '错误', {
  1122. confirmButtonText: '确定'
  1123. })
  1124. return false;
  1125. }
  1126. if(this.num==this.photoDatas.length){
  1127. this.num=1;
  1128. }else{
  1129. this.num=this.num+1;
  1130. }
  1131. this.fileName=this.photoDatas[this.num-1].attaFileNameDb;
  1132. this.fileTitle="文件名 ("+this.num+"/"+this.photoDatas.length+")";
  1133. this.photoUrl=this.$store.state.user.padSopUrl+this.photoDatas[this.num-1].attaFileNameDb;
  1134. // this.photoUrl='http://192.168.1.83:81/upload/'+this.photoDatas[this.num-1].attaFileNameDb;
  1135. },
  1136. lastPicture(){
  1137. if(this.photoDatas.length==0){
  1138. this.fileTitle="文件名 ("+0+"/"+0+")";
  1139. this.fileName='';
  1140. this.photoUrl='';
  1141. this.$alert('该物料没有上传图片!', '错误', {
  1142. confirmButtonText: '确定'
  1143. })
  1144. return false;
  1145. }
  1146. if(this.num==1){
  1147. this.num=this.photoDatas.length;
  1148. }else{
  1149. this.num=this.num-1;
  1150. }
  1151. this.fileName=this.photoDatas[this.num-1].attaFileNameDb;
  1152. this.fileTitle="文件名 ("+this.num+"/"+this.photoDatas.length+")";
  1153. this.photoUrl=this.$store.state.user.padSopUrl+this.photoDatas[this.num-1].attaFileNameDb;
  1154. // this.photoUrl='http://192.168.1.83:81/upload/'+this.photoDatas[this.num-1].attaFileNameDb;
  1155. },
  1156. openScan(){
  1157. this.scanSeqNo='';
  1158. this.scanModalFlag=true;
  1159. this.$nextTick(() => { this.$refs.input.focus();})
  1160. },
  1161. openStart(){
  1162. this.scanSeqNo='';
  1163. this.tvId='';
  1164. this.previousSeqNo='';
  1165. this.startModalFlag=true;
  1166. this.$nextTick(() => { this.$refs.start.focus();})
  1167. },
  1168. seqNoCheck(){
  1169. let inData={
  1170. seqNo:this.stopData.seqNo
  1171. }
  1172. getShopOrderData(inData).then(({data}) => {
  1173. let rows=data.rows;
  1174. if(rows.length==0){
  1175. this.stopData.seqNo='',
  1176. this.stopData.shiftNo='',
  1177. this.stopData.site='',
  1178. this.stopData.resourceDesc='',
  1179. this.stopData.orderNo='',
  1180. this.$alert('该派工单不存在!', '错误', {
  1181. confirmButtonText: '确定'
  1182. })
  1183. this.$nextTick(() => { this.$refs.stop.focus();})
  1184. return false
  1185. }else {
  1186. this.stopData.shiftNo=data.rows[0].sShiftNo
  1187. this.stopData.site=data.rows[0].site
  1188. this.stopData.resourceDesc=data.rows[0].resourceDesc
  1189. this.stopData.orderNo=data.rows[0].orderNo
  1190. }
  1191. })
  1192. },
  1193. stopScan(){
  1194. this.getAllAbnormalItem();
  1195. this.stopData.seqNo='';
  1196. this.stopData.shiftNo='';
  1197. this.stopData.site='';
  1198. this.stopData.resourceDesc='';
  1199. this.stopData.orderNo='';
  1200. this.stopData.abnormalRemark='';
  1201. this.stopData.abnormalCode='';
  1202. this.stopData.nextSeqNo='';
  1203. this.stopModalFlag=true;
  1204. this.fileList = [];
  1205. this.$nextTick(() => { this.$refs.stop.focus();})
  1206. },
  1207. continueScan(){
  1208. this.scanSeqNo='';
  1209. this.continueModalFlag=true;
  1210. this.$nextTick(() => { this.$refs.continue.focus();})
  1211. },
  1212. searchSeqNo(){
  1213. if(this.scanSeqNo==''){
  1214. this.$alert("请扫描派工单!",'错误', {
  1215. confirmButtonText: '确定'
  1216. })
  1217. return false;
  1218. }
  1219. let inData={
  1220. userId:this.$store.state.user.name,
  1221. seqNo:this.scanSeqNo
  1222. }
  1223. searchSeqNo(inData).then(({data}) => {
  1224. if (data.code == 0) {
  1225. if(data.row==null){
  1226. this.scanSeqNo=''
  1227. this.$alert("派工单不存在!",'错误', {
  1228. confirmButtonText: '确定'
  1229. })
  1230. return false;
  1231. }
  1232. let currentData = data.row;
  1233. if(currentData.closedFlag=='Y'){
  1234. this.scanSeqNo=''
  1235. this.$alert("该派工单已关闭!",'错误', {
  1236. confirmButtonText: '确定'
  1237. })
  1238. return false;
  1239. }
  1240. this.KGReported=0
  1241. this.KGApprove=0
  1242. this.KGRework=0
  1243. this.saveHeaderData.qtyApprove=0
  1244. this.saveHeaderData.qtyUnApprove=0
  1245. this.saveHeaderData.acceptRemark= ''
  1246. this.saveHeaderData.acceptQty= 0
  1247. this.saveHeaderData.scrapRemark= ''
  1248. this.saveHeaderData.scrapQty= 0
  1249. this.saveHeaderData.qtyRework=0
  1250. this.saveHeaderData.moldQty=0
  1251. this.saveHeaderData.reportWeight=0
  1252. this.saveHeaderData.approveWeight=0
  1253. this.saveHeaderData.site = currentData.site;
  1254. this.saveHeaderData.seqNo = currentData.seqNo;
  1255. this.saveHeaderData.itemNo = currentData.itemNo;
  1256. this.saveHeaderData.operationDesc = currentData.itemDesc;
  1257. this.saveHeaderData.partNo = currentData.partNo;
  1258. this.saveHeaderData.partDescription = currentData.partSpec;
  1259. this.saveHeaderData.workCenterNo = currentData.sWorkCenterNo;
  1260. this.saveHeaderData.workCenterDesc = currentData.workCenterDesc;
  1261. this.saveHeaderData.orderRef1=currentData.orderRef1;
  1262. this.saveHeaderData.orderNo=currentData.orderNo;
  1263. this.saveHeaderData.scheduleType=currentData.scheduleType;
  1264. this.saveHeaderData.operatorId=currentData.operatorId;
  1265. this.saveHeaderData.operatorName=currentData.operatorName;
  1266. this.saveHeaderData.qtyRequire=currentData.qtyRequired;
  1267. this.saveHeaderData.userId=this.$store.state.user.name;
  1268. this.saveHeaderData.boxWeight=0;
  1269. this.saveHeaderData.printQty=0;
  1270. this.saveHeaderData.wasteWeight=0;
  1271. this.qty1='';
  1272. this.qty2 ='';
  1273. this.moQty ='';
  1274. this.liLunQty ='';
  1275. this.saveHeaderData.planStartTime = this.dayjs(new Date()).format('YYYY-MM-DD 00:00:00')
  1276. this.saveHeaderData.planFinishTime = this.dayjs(new Date()).format('YYYY-MM-DD 00:00:00')
  1277. this.selectSFDCToolHist(this.saveHeaderData)
  1278. searchReportedQty(this.saveHeaderData).then(({data}) => {
  1279. if(data.code===0) {
  1280. this.cavity= data.row.cavity
  1281. this.qty1 = data.row.qtyReported;
  1282. this.qty2 = data.row.lastApproveQty;
  1283. this.saveHeaderData.manufacturingTime = data.row.timeReported;
  1284. if (data.row.weightFactor == 0) {
  1285. this.qty3 = "erp未维护数据"
  1286. this.KGReported = ''
  1287. this.KGApprove = ''
  1288. this.KGRework = ''
  1289. this.factorFlag = true;
  1290. } else {
  1291. this.qty3 = data.row.weightFactor
  1292. this.factorFlag = false;
  1293. }
  1294. }else {
  1295. this.$alert(data.msg, '错误', {
  1296. confirmButtonText: '确定'
  1297. })
  1298. return false;
  1299. }
  1300. })
  1301. this.approveFlag=false;
  1302. this.scanModalFlag=false;
  1303. this.setUp.reviewFlag = true;
  1304. this.setUp.saveButton=false;
  1305. this.setUp.disabled = true;
  1306. getSOScheduleRoutingData(inData).then(({data}) => {
  1307. if( data.rows){
  1308. if(data.rows.length>0){
  1309. data.rows[0].weight= Number(data.rows[0].weight.toFixed(2))
  1310. data.rows[0].type='jianyan'
  1311. this.currentRow=data.rows[0]
  1312. }
  1313. }
  1314. })
  1315. } else {
  1316. this.scanSeqNo=''
  1317. this.$alert(data.msg, '错误', {
  1318. confirmButtonText: '确定'
  1319. })
  1320. }
  1321. })
  1322. },
  1323. qtyReportedBlur(){
  1324. if(this.qty3&&this.qty3!=0&&this.qty3!='erp未维护数据'&&this.saveHeaderData.qtyUnApprove!=''){
  1325. this.KGReported=(this.saveHeaderData.qtyUnApprove*this.qty3).toFixed(1)
  1326. }
  1327. if(this.saveHeaderData.qtyUnApprove==''){
  1328. this.KGReported=''
  1329. }
  1330. },
  1331. moQtyBlur(){
  1332. if(this.cavity&&this.cavity!=0&&this.cavity!='erp未维护数据'&&this.moQty!=''){
  1333. this.saveHeaderData.liLunQty=(this.cavity*this.moQty).toFixed(1)
  1334. }
  1335. },
  1336. qtyApproveBlur(){
  1337. if(this.qty3&&this.qty3!=0&&this.qty3!='erp未维护数据'&&this.saveHeaderData.qtyApprove!=''){
  1338. if(this.saveHeaderData.boxWeight!=null&&this.saveHeaderData.boxWeight!='') {
  1339. this.KGApprove = (this.saveHeaderData.qtyApprove * this.qty3+Number(this.saveHeaderData.boxWeight)).toFixed(1)
  1340. }else {
  1341. this.KGApprove = (this.saveHeaderData.qtyApprove * this.qty3).toFixed(1)
  1342. }
  1343. this.factorFlag=true
  1344. }
  1345. if(this.saveHeaderData.qtyApprove==''){
  1346. this.KGApprove=''
  1347. }
  1348. },
  1349. boxWeightBlur(){
  1350. if(this.saveHeaderData.boxWeight==null||this.saveHeaderData.boxWeight==''){
  1351. this.saveHeaderData.boxWeight=0
  1352. }
  1353. if(this.approveFlag){
  1354. if(this.qty3&&this.qty3!=0&&this.qty3!='erp未维护数据'&&this.KGApprove!=''){
  1355. this.saveHeaderData.qtyApprove=((this.KGApprove-this.saveHeaderData.boxWeight)/this.qty3).toFixed(0)
  1356. }
  1357. }else {
  1358. if(this.qty3&&this.qty3!=0&&this.qty3!='erp未维护数据'&&this.saveHeaderData.qtyApprove!=''){
  1359. this.KGApprove = (this.saveHeaderData.qtyApprove * this.qty3+Number(this.saveHeaderData.boxWeight)).toFixed(1)
  1360. }
  1361. }
  1362. },
  1363. KGApproveBlur(){
  1364. if(this.qty3&&this.qty3!=0&&this.qty3!='erp未维护数据'&&this.KGApprove!=''){
  1365. if(this.saveHeaderData.boxWeight!=null&&this.saveHeaderData.boxWeight!=''){
  1366. this.saveHeaderData.qtyApprove=((this.KGApprove-this.saveHeaderData.boxWeight)/this.qty3).toFixed(0)
  1367. }else {
  1368. this.saveHeaderData.qtyApprove=(this.KGApprove/this.qty3).toFixed(0)
  1369. }
  1370. this.approveFlag=true;
  1371. }
  1372. if(this.KGApprove==''){
  1373. this.saveHeaderData.qtyApprove=''
  1374. this.approveFlag=false;
  1375. }
  1376. },
  1377. qtyReworkBlur(){
  1378. if(this.qty3&&this.qty3!=0&&this.qty3!='erp未维护数据'&&this.saveHeaderData.qtyRework!=''){
  1379. this.KGRework=(this.saveHeaderData.qtyRework*this.qty3).toFixed(1)
  1380. }
  1381. if(this.saveHeaderData.qtyRework==''){
  1382. this.KGRework=''
  1383. }
  1384. },
  1385. KGReportedBlur(){
  1386. if(this.qty3&&this.qty3!=0&&this.qty3!='erp未维护数据'&&this.KGReported!=''){
  1387. this.saveHeaderData.qtyUnApprove=(this.KGReported/this.qty3).toFixed(0)
  1388. }
  1389. if(this.KGReported==''){
  1390. this.saveHeaderData.qtyUnApprove=''
  1391. }
  1392. },
  1393. KGReworkBlur(){
  1394. if(this.qty3&&this.qty3!=0&&this.qty3!='erp未维护数据'&&this.KGRework!=''){
  1395. this.saveHeaderData.qtyRework=(this.KGRework/this.qty3).toFixed(0)
  1396. }
  1397. if(this.KGRework==''){
  1398. this.saveHeaderData.qtyRework=''
  1399. }
  1400. },
  1401. startSeqNo(){
  1402. let inData={
  1403. username:this.$store.state.user.name,
  1404. seqNo:this.scanSeqNo,
  1405. previousSeqNo:this.previousSeqNo,
  1406. tvId:this.tvId,
  1407. }
  1408. startSeqNo(inData).then(({data}) => {
  1409. if (data && data.code === 0) {
  1410. this.scanSeqNo='';
  1411. this.previousSeqNo='';
  1412. this.startModalFlag=false;
  1413. this.$message({
  1414. message: '操作成功',
  1415. type: 'success',
  1416. duration: 1500,
  1417. onClose: () => {
  1418. }
  1419. })
  1420. } else {
  1421. this.scanSeqNo='';
  1422. this.previousSeqNo='';
  1423. this.$alert(data.msg, '错误', {
  1424. confirmButtonText: '确定'
  1425. })
  1426. }
  1427. })
  1428. },
  1429. stopWork(){
  1430. if( this.stopData.seqNo==null||this.stopData.seqNo==''){
  1431. this.$alert("请输入派工单号", '错误', {
  1432. confirmButtonText: '确定'
  1433. })
  1434. return false;
  1435. }
  1436. if( this.stopData.abnormalCode==null||this.stopData.abnormalCode==''){
  1437. this.$alert("请选择异常原因", '错误', {
  1438. confirmButtonText: '确定'
  1439. })
  1440. return false;
  1441. }
  1442. if( this.stopData.abnormalRemark==null||this.stopData.abnormalRemark==''){
  1443. this.$alert("请输入描述", '错误', {
  1444. confirmButtonText: '确定'
  1445. })
  1446. return false;
  1447. }
  1448. const formData = new FormData();
  1449. //片接文件
  1450. for (let i = 0; i < this.fileList.length; i++) {
  1451. formData.append("file",this.fileList[i].raw)
  1452. }
  1453. formData.append("folder", this.folder);
  1454. formData.append("site", this.stopData.site);
  1455. formData.append("seqNo", this.stopData.seqNo);
  1456. formData.append("orderNo", this.stopData.orderNo);
  1457. formData.append("resourceDesc", this.stopData.resourceDesc);
  1458. formData.append("feedbackBy", this.stopData.feedbackBy);
  1459. formData.append("abnormalCode", this.stopData.abnormalCode);
  1460. formData.append("abnormalRemark", this.stopData.abnormalRemark);
  1461. formData.append("abnormalInfluence", this.stopData.abnormalInfluence);
  1462. formData.append("abnormalQty", this.stopData.abnormalQty);
  1463. formData.append("nextSeqNo", this.stopData.nextSeqNo);
  1464. // let inData={
  1465. // username:this.$store.state.user.name,
  1466. // seqNo:this.scanSeqNo
  1467. // }
  1468. stopWork(formData).then(({data}) => {
  1469. if (data && data.code === 0) {
  1470. this.stopModalFlag=false;
  1471. this.$refs.uploadFile.clearFiles();
  1472. this.fileList = [];
  1473. this.$message({
  1474. message: '派工单已暂停',
  1475. type: 'success',
  1476. duration: 1500,
  1477. onClose: () => {
  1478. }
  1479. })
  1480. } else {
  1481. this.scanSeqNo='';
  1482. this.$alert(data.msg, '错误', {
  1483. confirmButtonText: '确定'
  1484. })
  1485. }
  1486. })
  1487. },
  1488. continueWork(){
  1489. let inData={
  1490. username:this.$store.state.user.name,
  1491. seqNo:this.scanSeqNo
  1492. }
  1493. continueWork(inData).then(({data}) => {
  1494. if (data && data.code === 0) {
  1495. this.scanSeqNo='';
  1496. this.continueModalFlag=false;
  1497. this.$message({
  1498. message: '派工单已继续',
  1499. type: 'success',
  1500. duration: 1500,
  1501. onClose: () => {
  1502. }
  1503. })
  1504. } else {
  1505. this.scanSeqNo='';
  1506. this.$alert(data.msg, '错误', {
  1507. confirmButtonText: '确定'
  1508. })
  1509. }
  1510. })
  1511. },
  1512. searchAllTV(){
  1513. getTvList().then(({data}) => {
  1514. this.tvList = data.rows;
  1515. })
  1516. },
  1517. getBadCodeList(){
  1518. getBadCodeList().then(({data}) => {
  1519. this.badCodeList = data.rows;
  1520. })
  1521. },
  1522. /*选择上传文件时*/
  1523. onChange(file,fileList){
  1524. this.fileList = fileList;
  1525. },
  1526. },
  1527. created () {
  1528. this.getBadCodeList();
  1529. this.searchAllTV();
  1530. }
  1531. }
  1532. </script>
  1533. <style scoped>
  1534. .input_left{
  1535. text-align: left;
  1536. }
  1537. .input_reight{
  1538. text-align: right;
  1539. }
  1540. /deep/ input::-webkit-inner-spin-button {
  1541. -webkit-appearance: none !important;
  1542. }
  1543. input[type='number'] {
  1544. -moz-appearance: textfield !important;
  1545. }
  1546. .big /deep/ .el-form-item__label {
  1547. font-size: 17px;
  1548. }
  1549. .big /deep/ .el-input__inner {
  1550. height: 22px !important;
  1551. font-size: 17px;
  1552. }
  1553. .big /deep/ .el-dialog__title {
  1554. font-size: 17px;
  1555. font-weight: bold;
  1556. }
  1557. .big /deep/ .el-table .cell{
  1558. height: auto !important;
  1559. }
  1560. </style>