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

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