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

1486 lines
56 KiB

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