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

513 lines
19 KiB

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
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
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
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. <template>
  2. <div class="mod-config">
  3. <el-form :inline="true" label-position="top" label-width="100px" style="margin-top: -20px;">
  4. <el-form-item :label="'生产订单号'">
  5. <el-input v-model="searchData.orderNo" style="width: 120px"></el-input>
  6. </el-form-item>
  7. <el-form-item >
  8. <span slot="label" style="" @click="getBaseList(24)"><a herf="#">加工中心编码</a></span>
  9. <el-input v-model="searchData.workCenterNo" style="width: 120px"></el-input>
  10. </el-form-item>
  11. <el-form-item >
  12. <span slot="label" style="" @click="getBaseList(5)"><a herf="#">产品编码</a></span>
  13. <el-input v-model="searchData.partNo" style="width: 120px"></el-input>
  14. </el-form-item>
  15. <el-button @click="search()" style="margin-left: 0px;margin-top: 33px" type="primary">查询</el-button>
  16. <download-excel
  17. :fields="exportDataStandard"
  18. :data="tableData"
  19. type="xlsx"
  20. :name="exportName"
  21. :header="exportHeader"
  22. :footer="exportFooter"
  23. :defaultValue="exportDefaultValue"
  24. :fetch="createExportData"
  25. :before-generate="startDownload"
  26. :before-finish="finishDownload"
  27. worksheet="导出信息"
  28. class="el-button el-button--primary el-button--medium">
  29. {{'导出'}}
  30. </download-excel>
  31. </el-form>
  32. <el-table
  33. :height="height"
  34. :data="tableData"
  35. border
  36. style="width: 100%">
  37. <el-table-column
  38. prop=""
  39. header-align="center"
  40. align="center"
  41. min-width="50"
  42. label="操作">
  43. <template slot-scope="scope" class="foo_container">
  44. <a type="text" size="small" @click="initReportModal(scope.row)">报告</a>
  45. </template>
  46. </el-table-column>
  47. <el-table-column
  48. prop="orderNo"
  49. header-align="center"
  50. align="left"
  51. min-width="100"
  52. label="生产订单号">
  53. </el-table-column>
  54. <el-table-column
  55. prop="itemNo"
  56. header-align="center"
  57. align="right"
  58. min-width="50"
  59. label="工序号">
  60. </el-table-column>
  61. <el-table-column
  62. prop="operationDesc"
  63. header-align="center"
  64. align="left"
  65. min-width="70"
  66. label="工序名称">
  67. </el-table-column>
  68. <el-table-column
  69. prop="workCenterNo"
  70. header-align="center"
  71. align="left"
  72. min-width="70"
  73. label="加工中心">
  74. </el-table-column>
  75. <el-table-column
  76. prop="workCenterDesc"
  77. header-align="center"
  78. align="left"
  79. min-width="100"
  80. label="加工中心名称">
  81. </el-table-column>
  82. <el-table-column
  83. prop="qtyRequired"
  84. header-align="center"
  85. align="right"
  86. min-width="70"
  87. label="需求数量">
  88. </el-table-column>
  89. <el-table-column
  90. prop="qtyReported"
  91. header-align="center"
  92. align="right"
  93. min-width="70"
  94. label="报告数量">
  95. </el-table-column>
  96. <el-table-column
  97. prop="qtyApprove"
  98. header-align="center"
  99. align="right"
  100. min-width="70"
  101. label="合格数量">
  102. </el-table-column>
  103. <el-table-column
  104. prop="timeRequired"
  105. header-align="center"
  106. align="right"
  107. min-width="70"
  108. label="需求时间">
  109. </el-table-column>
  110. <el-table-column
  111. prop="timeReported"
  112. header-align="center"
  113. align="right"
  114. min-width="70"
  115. label="报告时间">
  116. </el-table-column>
  117. <el-table-column
  118. prop="partNo"
  119. header-align="center"
  120. align="left"
  121. min-width="70"
  122. label="产品编码">
  123. </el-table-column>
  124. <el-table-column
  125. prop="partDescription"
  126. header-align="center"
  127. align="left"
  128. min-width="100"
  129. label="产品名称">
  130. </el-table-column>
  131. <el-table-column
  132. prop="lotSize"
  133. header-align="center"
  134. align="right"
  135. min-width="70"
  136. label="订单数量">
  137. </el-table-column>
  138. <el-table-column
  139. prop="status"
  140. header-align="center"
  141. align="left"
  142. min-width="70"
  143. label="订单状态">
  144. </el-table-column>
  145. </el-table>
  146. <el-dialog @close="closeDialog" :close-on-click-modal="false" :close-on-press-escape="false" v-drag title="报告信息" :visible.sync="setUp.reviewFlag" width="615px">
  147. <el-form :inline="true" label-position="top">
  148. <el-form-item label="生产订单号">
  149. <el-input style="width: 130px;" :disabled="setUp.disabled" onkeyup="this.value = this.value.toUpperCase()" v-model="saveHeaderData.orderNo"></el-input>
  150. </el-form-item>
  151. <el-form-item label="产品编码">
  152. <el-input style="width: 130px;" :disabled="setUp.disabled" v-model="saveHeaderData.partNo"></el-input>
  153. </el-form-item>
  154. <el-form-item label="产品名称/规格型号">
  155. <el-input style="width: 275px;" :disabled="setUp.disabled" v-model="saveHeaderData.partDescription"></el-input>
  156. </el-form-item>
  157. </el-form>
  158. <el-form :inline="true" label-position="top">
  159. <el-form-item label="工序号">
  160. <el-input style="width: 130px;" :disabled="setUp.disabled" v-model="saveHeaderData.itemNo"></el-input>
  161. </el-form-item>
  162. <el-form-item label="工序名称">
  163. <el-input style="width: 130px;" :disabled="setUp.disabled" v-model="saveHeaderData.operationDesc"></el-input>
  164. </el-form-item>
  165. <el-form-item label="加工中心编码">
  166. <el-input style="width: 130px;" :disabled="setUp.disabled" v-model="saveHeaderData.workCenterNo"></el-input>
  167. </el-form-item>
  168. <el-form-item label="加工中心名称">
  169. <el-input style="width: 130px;" :disabled="setUp.disabled" v-model="saveHeaderData.workCenterDesc"></el-input>
  170. </el-form-item>
  171. </el-form>
  172. <el-form :inline="true" label-position="top">
  173. <el-form-item>
  174. <span slot="label" style="" @click="getBaseList(26 ,1)"><a herf="#">操作员</a></span>
  175. <el-input style="width: 130px;" v-model="saveHeaderData.operatorId"></el-input>
  176. </el-form-item>
  177. <el-form-item label="操作员姓名">
  178. <el-input style="width: 130px;" v-model="saveHeaderData.operatorName"></el-input>
  179. </el-form-item>
  180. <el-form-item label="生产日期">
  181. <el-date-picker
  182. style="width: 130px"
  183. v-model="saveHeaderData.planStartTime"
  184. type="date"
  185. value-format="yyyy-MM-dd"
  186. format = "yyyy-MM-dd"
  187. placeholder="选择日期">
  188. </el-date-picker>
  189. </el-form-item>
  190. <el-form-item label="报告日期">
  191. <el-date-picker
  192. style="width: 130px"
  193. v-model="saveHeaderData.planFinishTime"
  194. type="date"
  195. value-format="yyyy-MM-dd"
  196. format = "yyyy-MM-dd"
  197. placeholder="选择日期">
  198. </el-date-picker>
  199. </el-form-item>
  200. </el-form>
  201. <el-form :inline="true" label-position="top">
  202. <el-form-item label="报告数量">
  203. <el-input type="number" oninput="value=value.replace(/[^\d]/g,'')" class="input_left" style="width: 178px;" v-model="saveHeaderData.qtyReported"></el-input>
  204. <!-- <el-input-number style="width: 178px;text-align: right;" v-model="saveHeaderData.qtyRework" size="medium" :min="0" :controls="false"></el-input-number>-->
  205. </el-form-item>
  206. <el-form-item label="合格数量">
  207. <el-input type="number" style="width: 178px;" oninput="value=value.replace(/[^\d]/g,'')" class="input_reight" v-model="saveHeaderData.qtyApprove"></el-input>
  208. <!-- <el-input-number style="width: 178px;text-align: right;" v-model="saveHeaderData.qtyRework" size="medium" :min="0" :controls="false"></el-input-number>-->
  209. </el-form-item>
  210. <el-form-item label="返工数量">
  211. <el-input type="number" style="width: 178px;" oninput="value=value.replace(/[^\d]/g,'')" v-model="saveHeaderData.qtyRework"></el-input>
  212. <!-- <el-input-number style="width: 178px;text-align: right;" v-model="saveHeaderData.qtyRework" size="medium" :min="0" :controls="false"></el-input-number>-->
  213. </el-form-item>
  214. </el-form>
  215. <fieldset class="customer-fieldset" style="width: 597px;margin-left: -10px;">
  216. <legend class="customer-legend">不良品分析</legend>
  217. <el-form :inline="true" label-position="top">
  218. <el-form-item>
  219. <span slot="label" style="" @click="getBaseList(26 ,2)"><a herf="#">操作员</a></span>
  220. <el-input style="width: 178px;" v-model="saveHeaderData.operatorId2"></el-input>
  221. </el-form-item>
  222. <el-form-item label="操作员姓名">
  223. <el-input style="width: 178px;" v-model="saveHeaderData.operatorIdName2"></el-input>
  224. </el-form-item>
  225. <el-form-item label="报废原因">
  226. <el-input style="width: 178px;" v-model="saveHeaderData.scrapReason"></el-input>
  227. </el-form-item>
  228. </el-form>
  229. </fieldset>
  230. <el-form :inline="true" label-position="top">
  231. <el-form-item label="准备时间">
  232. <el-input type="number" style="width: 178px;text-align: right;" v-model="saveHeaderData.preparationTime"></el-input> <!--oninput ="value=value.replace(/[^0-9.]/g,'')"-->
  233. <!-- <el-input-number style="width: 178px;text-align: right;" v-model="saveHeaderData.preparationTime" size="medium" :min="0" :controls="false"></el-input-number>-->
  234. </el-form-item>
  235. <el-form-item label="制造时间">
  236. <el-input type="number" style="width: 178px;" v-model="saveHeaderData.manufacturingTime"></el-input> <!--oninput ="value=value.replace(/[^0-9.]/g,'')"-->
  237. <!-- <el-input-number style="width: 178px;text-align: right;" v-model="saveHeaderData.manufacturingTime" size="medium" :min="0" :controls="false"></el-input-number>-->
  238. </el-form-item>
  239. <el-form-item label="清理时间" label-width="0px">
  240. <el-input type="number" style="width: 178px;" v-model="saveHeaderData.cleaningTime"></el-input> <!--oninput ="value=value.replace(/[^0-9.]/g,'')"-->
  241. <!-- :min="0" 最小值 :controls="false" 隐藏减价按钮 -->
  242. <!-- <el-input-number style="width: 178px;text-align: right;" v-model="saveHeaderData.cleaningTime" size="medium" :min="0" :controls="false"></el-input-number>-->
  243. </el-form-item>
  244. </el-form>
  245. <el-form :inline="true" label-position="top">
  246. <el-form-item label="停机原因">
  247. <el-input style="width: 560px;" v-model="saveHeaderData.shutdownReason"></el-input>
  248. </el-form-item>
  249. </el-form>
  250. <el-form :inline="true" label-position="top">
  251. <el-form-item label="备注">
  252. <el-input style="width: 560px;" v-model="saveHeaderData.remark"></el-input>
  253. </el-form-item>
  254. </el-form>
  255. <span slot="footer" class="dialog-footer">
  256. <el-button @click="setUp.reviewFlag = false">取消</el-button>
  257. <el-button type="primary" :disabled="setUp.saveButton" @click="saveReport()">确定</el-button>
  258. </span>
  259. </el-dialog>
  260. <Chooselist ref="baseList" @getBaseData="getBaseData"></Chooselist>
  261. </div>
  262. </template>
  263. <script>
  264. import {
  265. getGenerateReportList
  266. , saveGenerateReport
  267. } from '@/api/production/generateReport.js'
  268. import Chooselist from '@/views/modules/common/Chooselist'
  269. export default {
  270. name: 'searchDailyPlan',
  271. components: {
  272. Chooselist
  273. },
  274. data () {
  275. return {
  276. setUp: {
  277. reviewFlag: false,
  278. saveButton: false,
  279. readonlyFlag: false,
  280. disabled: false
  281. },
  282. saveHeaderData: {
  283. site: '',
  284. orderNo: '',
  285. itemNo: '',
  286. partNo: '',
  287. partDescription: '',
  288. operationDesc: '',
  289. workCenterNo: '',
  290. workCenterDesc: '',
  291. operatorId: '',
  292. operatorName: '',
  293. planStartTime: '',
  294. planFinishTime: '',
  295. qtyReported: 0,
  296. qtyApprove: 0,
  297. qtyRework: 0,
  298. operatorId2: '',
  299. operatorIdName2: '',
  300. scrapReason: '',
  301. preparationTime: 0,
  302. manufacturingTime: 0,
  303. cleaningTime: 0,
  304. shutdownReason: '',
  305. remark: ''
  306. },
  307. site: this.$store.state.user.site,
  308. operatorType: 0,
  309. // 导出 start
  310. exportData: [],
  311. exportDataStandard: {
  312. '日计划单号': 'orderNo',
  313. '计划日期': 'orderDate',
  314. '订单号': 'orderRef1',
  315. '物料编码': 'partNo',
  316. '物料名称': 'partDescription',
  317. '计划数量': 'orderQty',
  318. '已完工数': 'qtyfinished',
  319. '录入人': 'userName',
  320. '录入时间': 'enterDate'
  321. },
  322. exportName: '日计划列表' + this.getStrDate(),
  323. exportHeader: ['日计划列表'],
  324. exportFooter: [],
  325. exportDefaultValue: '这一行这一列没有数据',
  326. // 导出 end
  327. height: 200,
  328. tableData: [],
  329. date1: '',
  330. searchData: {
  331. orderNo: '',
  332. workCenterNo: '',
  333. partNo: '',
  334. site: this.$store.state.user.site
  335. }
  336. }
  337. },
  338. mounted () {
  339. this.$nextTick(() => {
  340. this.height = window.innerHeight - 210
  341. })
  342. },
  343. methods: {
  344. saveReport () {
  345. if (this.saveHeaderData.qtyReported == null || this.saveHeaderData.qtyReported <= 0) {
  346. this.$alert('报告数量错误!', '错误信息', {
  347. confirmButtonText: '确定'
  348. })
  349. return
  350. }
  351. if (this.saveHeaderData.qtyApprove == null || this.saveHeaderData.qtyApprove <= 0) {
  352. this.$alert('合格数量错误!', '错误信息', {
  353. confirmButtonText: '确定'
  354. })
  355. return
  356. }
  357. if (this.saveHeaderData.qtyRework == null || this.saveHeaderData.qtyRework <= 0) {
  358. this.$alert('返工数量错误!', '错误信息', {
  359. confirmButtonText: '确定'
  360. })
  361. return
  362. }
  363. if (this.saveHeaderData.preparationTime == null || this.saveHeaderData.preparationTime <= 0) {
  364. this.$alert('准备时间错误!', '错误信息', {
  365. confirmButtonText: '确定'
  366. })
  367. return
  368. }
  369. if (this.saveHeaderData.manufacturingTime == null || this.saveHeaderData.manufacturingTime <= 0) {
  370. this.$alert('制造时间错误!', '错误信息', {
  371. confirmButtonText: '确定'
  372. })
  373. return
  374. }
  375. if (this.saveHeaderData.cleaningTime == null || this.saveHeaderData.cleaningTime <= 0) {
  376. this.$alert('清理时间错误!', '错误信息', {
  377. confirmButtonText: '确定'
  378. })
  379. return
  380. }
  381. if (parseFloat(this.saveHeaderData.qtyApprove) > parseFloat(this.saveHeaderData.qtyReported)) {
  382. this.$alert('合格数量大于报告数量!', '错误信息', {
  383. confirmButtonText: '确定'
  384. })
  385. return
  386. }
  387. if (this.saveHeaderData.planStartTime == null || this.saveHeaderData.planStartTime === '') {
  388. this.$alert('请选择生产日期!', '错误信息', {
  389. confirmButtonText: '确定'
  390. })
  391. return
  392. }
  393. if (this.saveHeaderData.planFinishTime == null || this.saveHeaderData.planFinishTime === '') {
  394. this.$alert('请选择报告日期!', '错误信息', {
  395. confirmButtonText: '确定'
  396. })
  397. return
  398. }
  399. saveGenerateReport(this.saveHeaderData).then(({data}) => {
  400. if (data.code == 0) {
  401. this.$message.success(data.msg)
  402. this.setUp.reviewFlag = false
  403. this.search()
  404. } else {
  405. this.$alert(data.msg, '错误', {
  406. confirmButtonText: '确定'
  407. })
  408. }
  409. })
  410. },
  411. // 获取基础数据列表S
  412. getBaseList (val, type) {
  413. this.tagNo = val
  414. this.$nextTick(() => {
  415. let strVal = ''
  416. if (val === 24) {
  417. strVal = this.searchData.workCenterNo
  418. } else if (val === 26) {
  419. this.operatorType = type
  420. if (type === 1) {
  421. strVal = this.saveHeaderData.operatorId
  422. } else if (type === 2) {
  423. strVal = this.saveHeaderData.operatorId2
  424. }
  425. }
  426. this.$refs.baseList.init(val, strVal)
  427. })
  428. },
  429. /* 列表方法的回调 */
  430. getBaseData (val) {
  431. console.log(val)
  432. if (this.tagNo === 24) {
  433. this.searchData.workCenterNo = val.WorkCenterNo
  434. } else if (this.tagNo === 26) {
  435. if (this.operatorType === 1) {
  436. this.saveHeaderData.operatorId = val.OperatorID
  437. this.saveHeaderData.operatorName = val.OperatorName
  438. } else if (this.operatorType === 2) {
  439. this.saveHeaderData.operatorId2 = val.OperatorID
  440. this.saveHeaderData.operatorIdName2 = val.OperatorName
  441. }
  442. } else if (this.tagNo === 5) {
  443. this.searchData.partNo = val.PartNo
  444. }
  445. },
  446. initReportModal (row) {
  447. this.setUp.reviewFlag = true
  448. this.setUp.disabled = true
  449. let currentData = JSON.parse(JSON.stringify(row))
  450. this.saveHeaderData.site = currentData.site
  451. this.saveHeaderData.orderNo = currentData.orderNo
  452. this.saveHeaderData.itemNo = currentData.itemNo
  453. this.saveHeaderData.operationDesc = currentData.operationDesc
  454. this.saveHeaderData.partNo = currentData.partNo
  455. this.saveHeaderData.partDescription = currentData.partDescription + '/' + currentData.spec
  456. this.saveHeaderData.workCenterNo = currentData.workCenterNo
  457. this.saveHeaderData.workCenterDesc = currentData.workCenterDesc
  458. this.saveHeaderData.planFinishTime = this.dayjs(new Date()).format('YYYY-MM-DD 00:00:00')
  459. this.saveHeaderData.planStartTime = this.dayjs(new Date()).format('YYYY-MM-DD 00:00:00')
  460. },
  461. closeDialog () {
  462. Object.assign(this.$data.saveHeaderData, this.$options.data.call(this).saveHeaderData)
  463. },
  464. search () {
  465. getGenerateReportList(this.searchData).then(({data}) => {
  466. this.tableData = data.rows
  467. })
  468. },
  469. createExportData () {
  470. return this.tableData
  471. },
  472. startDownload () {
  473. // this.exportData = this.dataList
  474. },
  475. finishDownload () {
  476. },
  477. getStrDate () {
  478. let dd = new Date()
  479. let Y = dd.getFullYear()
  480. let M = (dd.getMonth() + 1) < 10 ? '0' + (dd.getMonth() + 1) : (dd.getMonth() + 1)// 获取当前月份的日期,不足10补0
  481. let D = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate()// 获取当前几号,不足10补0
  482. let H = dd.getHours() < 10 ? '0' + dd.getHours() : dd.getHours()
  483. let MM = dd.getMinutes() < 10 ? '0' + dd.getMinutes() : dd.getMinutes()
  484. let S = dd.getSeconds() < 10 ? '0' + dd.getSeconds() : dd.getSeconds()
  485. return Y + M + D + H + MM + S
  486. }
  487. },
  488. created () {
  489. }
  490. }
  491. </script>
  492. <style scoped>
  493. .input_left{
  494. text-align: left;
  495. }
  496. .input_reight{
  497. text-align: right;
  498. }
  499. /deep/ input::-webkit-inner-spin-button {
  500. -webkit-appearance: none !important;
  501. }
  502. input[type='number'] {
  503. -moz-appearance: textfield !important;
  504. }
  505. </style>