plm前端
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.

960 lines
34 KiB

8 months ago
1 year ago
1 year ago
8 months ago
6 months ago
8 months ago
6 months ago
8 months ago
2 years ago
2 years ago
8 months ago
8 months ago
8 months ago
1 year ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
1 year ago
1 year ago
1 year ago
8 months ago
2 years ago
1 year ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
  1. <script>
  2. import {
  3. removeBatchTestSoRouting,
  4. saveTestSoRouting,
  5. selectTestSoRoutingList,
  6. updateTestSoRouting
  7. } from "../../../../api/test/testSoRouting";
  8. import {queryWorkCenterList, searchWorkCenter} from "../../../../api/part/workCenter";
  9. import {Decimal} from "decimal.js";
  10. export default {
  11. name:"testRoutingTable",
  12. props:{
  13. dataList:{
  14. type: Array,
  15. default:()=>[]
  16. },
  17. testNo:{
  18. type: String,
  19. request: true
  20. },
  21. columnList:{
  22. type: Array,
  23. default: ()=>[],
  24. },
  25. height:{
  26. type:[Number,String],
  27. default:300
  28. },
  29. disabled:{
  30. type: Boolean,
  31. default: false
  32. },
  33. },
  34. model:{
  35. prop:"dataList",
  36. event:"change",
  37. },
  38. data(){
  39. return{
  40. searchData: {
  41. site: this.$store.state.user.site,
  42. workCenterNo: undefined, // 加工中心编码查询条件
  43. workCenterDesc: undefined, // 加工中心名称查询条件
  44. workCenterType: undefined, // 加工中心类型查询条件
  45. },
  46. workCenter:{
  47. site: this.$store.state.user.site,
  48. workCenterNo:undefined,
  49. workCenterDesc:undefined,
  50. workCenterType:undefined,
  51. },
  52. pageIndex: 1,
  53. pageSize: 50,
  54. totalPage: 0,
  55. workCenterList:[],
  56. workCenterDialogFlag:false,
  57. saveStatus:true,
  58. saveFlag:false,
  59. testSoRoutingLabel:{
  60. itemNo:"工序号",
  61. itemDesc:"工序名称",
  62. workCenterNo:"加工中心",
  63. workCenterDesc:"加工中心名称",
  64. workCenterType:"加工中心类别",
  65. machSetupTime:"准备时间",
  66. factorUnit:'产出单位',
  67. machRunFactor:'单位产出量',
  68. efficiency:'效率',
  69. requiredTime:'需求时间(h)',
  70. requiredQty:'需求数量',
  71. reportedQty:'报告数量',
  72. approveQty:'合格数量',
  73. planStartTime:'计划开工时间',
  74. planFinishTime:'计划完工时间',
  75. },
  76. testSoRouting:{
  77. itemNo:10,
  78. itemDesc:undefined,
  79. site:this.$store.state.user.site,
  80. testNo:undefined,
  81. workCenterNo:undefined,
  82. workCenterDesc:undefined,
  83. workCenterType:undefined,
  84. machSetupTime:0,
  85. factorUnit:'单位/小时',
  86. machRunFactor:0,
  87. efficiency:100,
  88. requiredTime:0,
  89. requiredQty:0,
  90. reportedQty:0,
  91. approveQty:0,
  92. planStartTime:undefined,
  93. planFinishTime:undefined,
  94. remark:undefined,
  95. },
  96. testSoRoutingRule:{
  97. itemNo:[{required: true,message: ' ',trigger: ['change','blur']}],
  98. itemDesc:[{required: true,message: ' ',trigger: ['change','blur']}],
  99. workCenterNo:[{required: true,message: ' ',trigger: ['change','blur']}],
  100. workCenterDesc:[{required: true,message: ' ',trigger: ['change','blur']}],
  101. workCenterType:[{required: true,message: ' ',trigger: ['change','blur']}],
  102. machSetupTime:[{required: true,message: ' ',trigger: ['change','blur']}],
  103. factorUnit:[{required: true,message: ' ',trigger: ['change','blur']}],
  104. machRunFactor:[{required: true,message: ' ',trigger: ['change','blur']}],
  105. efficiency:[{required: true,message: ' ',trigger: ['change','blur']}],
  106. requiredTime:[{required: true,message: ' ',trigger: ['change','blur']}],
  107. requiredQty:[{required: true,message: ' ',trigger: ['change','blur']}],
  108. reportedQty:[{required: true,message: ' ',trigger: ['change','blur']}],
  109. approveQty:[{required: true,message: ' ',trigger: ['change','blur']}],
  110. planStartTime:[{required: true,message: ' ',trigger: ['change','blur']}],
  111. planFinishTime:[{required: true,message: ' ',trigger: ['change','blur']}],
  112. },
  113. selectionTestSoRoutingList:[],
  114. testSoRoutingColumnList:[
  115. {
  116. userId: this.$store.state.user.name,
  117. functionId: 102001,
  118. serialNumber: '102001Table3ItemNo',
  119. tableId: '102001Table3',
  120. tableName: '测试工艺路线',
  121. columnProp: 'itemNo',
  122. headerAlign: 'center',
  123. align: 'center',
  124. columnLabel: '工序号',
  125. columnHidden: false,
  126. columnImage: false,
  127. columnSortable: false,
  128. sortLv: 0,
  129. status: true,
  130. fixed: '',
  131. columnWidth: 100
  132. },{
  133. userId: this.$store.state.user.name,
  134. functionId: 102001,
  135. serialNumber: '102001Table3ItemDesc',
  136. tableId: '102001Table3',
  137. tableName: '测试工艺路线',
  138. columnProp: 'itemDesc',
  139. headerAlign: 'center',
  140. align: 'left',
  141. columnLabel: '工序描述',
  142. columnHidden: false,
  143. columnImage: false,
  144. columnSortable: false,
  145. sortLv: 0,
  146. status: true,
  147. fixed: '',
  148. columnWidth: 200
  149. },
  150. {
  151. userId: this.$store.state.user.name,
  152. functionId: 102001,
  153. serialNumber: '102001Table3WorkCenterNo',
  154. tableId: '102001Table3',
  155. tableName: '测试工艺路线',
  156. columnProp: 'workCenterNo',
  157. headerAlign: 'center',
  158. align: 'left',
  159. columnLabel: '加工中心',
  160. columnHidden: false,
  161. columnImage: false,
  162. columnSortable: false,
  163. sortLv: 0,
  164. status: true,
  165. fixed: '',
  166. columnWidth: 100
  167. },
  168. {
  169. userId: this.$store.state.user.name,
  170. functionId: 102001,
  171. serialNumber: '102001Table3WorkCenterDesc',
  172. tableId: '102001Table3',
  173. tableName: '测试工艺路线',
  174. columnProp: 'workCenterDesc',
  175. headerAlign: 'center',
  176. align: 'left',
  177. columnLabel: '加工中心名称',
  178. columnHidden: false,
  179. columnImage: false,
  180. columnSortable: false,
  181. sortLv: 0,
  182. status: true,
  183. fixed: '',
  184. columnWidth: 150
  185. },
  186. {
  187. userId: this.$store.state.user.name,
  188. functionId: 102001,
  189. serialNumber: '102001Table3WorkCenterType',
  190. tableId: '102001Table3',
  191. tableName: '测试工艺路线',
  192. columnProp: 'workCenterType',
  193. headerAlign: 'center',
  194. align: 'center',
  195. columnLabel: '加工中心类别',
  196. columnHidden: false,
  197. columnImage: false,
  198. columnSortable: false,
  199. sortLv: 0,
  200. status: true,
  201. fixed: '',
  202. columnWidth: 100
  203. },
  204. // {
  205. // userId: this.$store.state.user.name,
  206. // functionId: 102001,
  207. // serialNumber: '102001Table3MachSetupTime',
  208. // tableId: '102001Table3',
  209. // tableName: '测试工艺路线',
  210. // columnProp: 'machSetupTime',
  211. // headerAlign: 'center',
  212. // align: 'center',
  213. // columnLabel: '准备时间',
  214. // columnHidden: false,
  215. // columnImage: false,
  216. // columnSortable: false,
  217. // sortLv: 0,
  218. // status: true,
  219. // fixed: '',
  220. // columnWidth: 100
  221. // },
  222. // {
  223. // userId: this.$store.state.user.name,
  224. // functionId: 102001,
  225. // serialNumber: '102001Table3MachRunFactor',
  226. // tableId: '102001Table3',
  227. // tableName: '测试工艺路线',
  228. // columnProp: 'machRunFactor',
  229. // headerAlign: 'center',
  230. // align: 'center',
  231. // columnLabel: '单位产出量',
  232. // columnHidden: false,
  233. // columnImage: false,
  234. // columnSortable: false,
  235. // sortLv: 0,
  236. // status: true,
  237. // fixed: '',
  238. // columnWidth: 100
  239. // },
  240. // {
  241. // userId: this.$store.state.user.name,
  242. // functionId: 102001,
  243. // serialNumber: '102001Table3Efficiency',
  244. // tableId: '102001Table3',
  245. // tableName: '测试工艺路线',
  246. // columnProp: 'efficiency',
  247. // headerAlign: 'center',
  248. // align: 'center',
  249. // columnLabel: '效率%',
  250. // columnHidden: false,
  251. // columnImage: false,
  252. // columnSortable: false,
  253. // sortLv: 0,
  254. // status: true,
  255. // fixed: '',
  256. // columnWidth: 100
  257. // },
  258. // {
  259. // userId: this.$store.state.user.name,
  260. // functionId: 102001,
  261. // serialNumber: '102001Table3FactorUnit',
  262. // tableId: '102001Table3',
  263. // tableName: '测试工艺路线',
  264. // columnProp: 'factorUnit',
  265. // headerAlign: 'center',
  266. // align: 'center',
  267. // columnLabel: '产出单位',
  268. // columnHidden: false,
  269. // columnImage: false,
  270. // columnSortable: false,
  271. // sortLv: 0,
  272. // status: true,
  273. // fixed: '',
  274. // columnWidth: 100
  275. // },
  276. {
  277. userId: this.$store.state.user.name,
  278. functionId: 102001,
  279. serialNumber: '102001Table3RequiredTime',
  280. tableId: '102001Table3',
  281. tableName: '测试工艺路线',
  282. columnProp: 'requiredTime',
  283. headerAlign: 'center',
  284. align: 'center',
  285. columnLabel: '需求时间(h)',
  286. columnHidden: false,
  287. columnImage: false,
  288. columnSortable: false,
  289. sortLv: 0,
  290. status: true,
  291. fixed: '',
  292. columnWidth: 100
  293. },
  294. // {
  295. // userId: this.$store.state.user.name,
  296. // functionId: 102001,
  297. // serialNumber: '102001Table3RequiredQty',
  298. // tableId: '102001Table3',
  299. // tableName: '测试工艺路线',
  300. // columnProp: 'requiredQty',
  301. // headerAlign: 'center',
  302. // align: 'center',
  303. // columnLabel: '需求数量',
  304. // columnHidden: false,
  305. // columnImage: false,
  306. // columnSortable: false,
  307. // sortLv: 0,
  308. // status: true,
  309. // fixed: '',
  310. // columnWidth: 100
  311. // },
  312. // {
  313. // userId: this.$store.state.user.name,
  314. // functionId: 102001,
  315. // serialNumber: '102001Table3ReportedQty',
  316. // tableId: '102001Table3',
  317. // tableName: '测试工艺路线',
  318. // columnProp: 'reportedQty',
  319. // headerAlign: 'center',
  320. // align: 'center',
  321. // columnLabel: '报告数量',
  322. // columnHidden: false,
  323. // columnImage: false,
  324. // columnSortable: false,
  325. // sortLv: 0,
  326. // status: true,
  327. // fixed: '',
  328. // columnWidth: 100
  329. // },
  330. // {
  331. // userId: this.$store.state.user.name,
  332. // functionId: 102001,
  333. // serialNumber: '102001Table3ApproveQty',
  334. // tableId: '102001Table3',
  335. // tableName: '测试工艺路线',
  336. // columnProp: 'approveQty',
  337. // headerAlign: 'center',
  338. // align: 'center',
  339. // columnLabel: '合格数量',
  340. // columnHidden: false,
  341. // columnImage: false,
  342. // columnSortable: false,
  343. // sortLv: 0,
  344. // status: true,
  345. // fixed: '',
  346. // columnWidth: 100
  347. // },
  348. // {
  349. // userId: this.$store.state.user.name,
  350. // functionId: 102001,
  351. // serialNumber: '102001Table3PlanStartTime',
  352. // tableId: '102001Table3',
  353. // tableName: '测试工艺路线',
  354. // columnProp: 'planStartTime',
  355. // headerAlign: 'center',
  356. // align: 'center',
  357. // columnLabel: '计划开工时间',
  358. // columnHidden: false,
  359. // columnImage: false,
  360. // columnSortable: false,
  361. // sortLv: 0,
  362. // status: true,
  363. // fixed: '',
  364. // columnWidth: 100
  365. // },
  366. // {
  367. // userId: this.$store.state.user.name,
  368. // functionId: 102001,
  369. // serialNumber: '102001Table3PlanFinishTime',
  370. // tableId: '102001Table3',
  371. // tableName: '测试工艺路线',
  372. // columnProp: 'planFinishTime',
  373. // headerAlign: 'center',
  374. // align: 'center',
  375. // columnLabel: '计划完工时间',
  376. // columnHidden: false,
  377. // columnImage: false,
  378. // columnSortable: false,
  379. // sortLv: 0,
  380. // status: true,
  381. // fixed: '',
  382. // columnWidth: 100
  383. // },
  384. {
  385. userId: this.$store.state.user.name,
  386. functionId: 102001,
  387. serialNumber: '102001Table3Remark',
  388. tableId: '102001Table3',
  389. tableName: '测试工艺路线',
  390. columnProp: 'remark',
  391. headerAlign: 'center',
  392. align: 'left',
  393. columnLabel: '备注',
  394. columnHidden: false,
  395. columnImage: false,
  396. columnSortable: false,
  397. sortLv: 0,
  398. status: true,
  399. fixed: '',
  400. columnWidth: 140
  401. },
  402. ],
  403. workCenterColumnList: [
  404. {
  405. userId: this.$store.state.user.name,
  406. tableName: '加工中心表',
  407. columnProp: 'workCenterNo',
  408. headerAlign: "center",
  409. align: "left",
  410. columnLabel: '编码',
  411. columnHidden: false,
  412. columnImage: false,
  413. status: true,
  414. fixed: '',
  415. columnWidth: 100
  416. },
  417. {
  418. userId: this.$store.state.user.name,
  419. tableName: '加工中心表',
  420. columnProp: 'workCenterDesc',
  421. headerAlign: "center",
  422. align: "left",
  423. columnLabel: '名称',
  424. columnHidden: false,
  425. columnImage: false,
  426. status: true,
  427. fixed: '',
  428. columnWidth: 200
  429. },
  430. {
  431. userId: this.$store.state.user.name,
  432. tableName: '加工中心表',
  433. columnProp: 'workCenterType',
  434. headerAlign: "center",
  435. align: "left",
  436. columnLabel: '类型',
  437. columnHidden: false,
  438. columnImage: false,
  439. status: true,
  440. fixed: '',
  441. columnWidth: 100
  442. },
  443. ],
  444. }
  445. },
  446. created() {
  447. if (this.columnList.length !== 0){
  448. this.testSoRoutingColumnList = [...this.columnList]
  449. }
  450. },
  451. methods: {
  452. dblClickWorkCenterTable(row){
  453. this.testSoRouting.workCenterNo = row.workCenterNo
  454. this.testSoRouting.workCenterDesc = row.workCenterDesc
  455. this.testSoRouting.workCenterType = row.workCenterType
  456. this.workCenterDialogFlag = false
  457. },
  458. searchWorkCenter(flag){
  459. let params = {
  460. site:this.$store.state.user.site,
  461. workCenterNo:this.searchData.workCenterNo,
  462. workCenterDesc:this.searchData.workCenterDesc,
  463. workCenterType:this.searchData.workCenterType,
  464. };
  465. this.workCenterList = []
  466. searchWorkCenter(params).then(({data})=>{
  467. if (data && data.code === 200){
  468. this.workCenterList = data.data;
  469. this.pageIndex = data.page.currPage
  470. this.pageSize = data.page.pageSize
  471. this.totalPage = data.page.totalCount
  472. if (flag === true){
  473. if (this.workCenterList.length === 1 && this.workCenterList[0].workCenterNo === this.testSoRouting.workCenterNo){
  474. this.dblClickWorkCenterTable(this.workCenterList[0])
  475. }else {
  476. let workCenter = {
  477. workCenterNo:this.testSoRouting.workCenterNo,
  478. workCenterDesc:'',
  479. workCenterType:''
  480. }
  481. this.dblClickWorkCenterTable(workCenter)
  482. }
  483. }
  484. }
  485. })
  486. },
  487. saveTestSoRoutingBtn(row){
  488. if (row){
  489. this.saveStatus = false
  490. this.testSoRouting = {...row}
  491. }else {
  492. this.testSoRouting.testNo = this.testNo
  493. this.testSoRouting.planStartTime = new Date()
  494. this.testSoRouting.planFinishTime = new Date()
  495. }
  496. this.saveFlag = true;
  497. },
  498. closeWorkCenterDialog(){
  499. this.workCenter = {
  500. workCenterNo:undefined,
  501. workCenterDesc:undefined,
  502. workCenterType:undefined,
  503. }
  504. },
  505. closeTestSoRoutingDialog(){
  506. this.saveStatus = true;
  507. this.$refs.saveForm.resetFields();
  508. this.testSoRouting = {
  509. itemNo:10,
  510. itemDesc:undefined,
  511. site:this.$store.state.user.site,
  512. testNo: this.testNo,
  513. workCenterNo:undefined,
  514. workCenterDesc:undefined,
  515. workCenterType:undefined,
  516. machSetupTime:0,
  517. factorUnit:'单位/小时',
  518. machRunFactor:0,
  519. efficiency:100,
  520. requiredTime:0,
  521. requiredQty:0,
  522. reportedQty:0,
  523. approveQty:0,
  524. planStartTime:undefined,
  525. planFinishTime:undefined,
  526. remark:undefined,
  527. }
  528. },
  529. selectTestSoRoutingList(){
  530. let params = {
  531. site:this.$store.state.user.site,
  532. testNo: this.testNo,
  533. }
  534. selectTestSoRoutingList(params).then(({data})=>{
  535. if (data && data.code === 0){
  536. this.$emit("change",data.rows);
  537. this.$nextTick(()=>{
  538. this.testSoRouting = {
  539. itemNo:data.rows.length > 0?this.dataList[data.rows.length-1].itemNo +10:10,
  540. itemDesc:undefined,
  541. site:this.$store.state.user.site,
  542. testNo:this.testNo,
  543. workCenterNo:undefined,
  544. workCenterDesc:undefined,
  545. workCenterType:undefined,
  546. machSetupTime:0,
  547. factorUnit:'单位/小时',
  548. machRunFactor:0,
  549. efficiency:100,
  550. requiredTime:0,
  551. requiredQty:0,
  552. reportedQty:0,
  553. approveQty:0,
  554. planStartTime:this.dayjs(new Date(this.testSoRouting.planFinishTime)).format("YYYY-MM-DD HH:mm:ss"),
  555. planFinishTime:this.dayjs(new Date(this.testSoRouting.planFinishTime)).format("YYYY-MM-DD HH:mm:ss"),
  556. remark:undefined,
  557. }
  558. })
  559. }
  560. })
  561. },
  562. saveTestSoRouting(isClose){
  563. this.$refs.saveForm.validate((validate,objects)=>{
  564. if (validate){
  565. this.testSoRouting.planStartTime = this.dayjs(new Date(this.testSoRouting.planStartTime)).format("YYYY-MM-DD HH:mm:ss")
  566. this.testSoRouting.planFinishTime = this.dayjs(new Date(this.testSoRouting.planFinishTime)).format("YYYY-MM-DD HH:mm:ss")
  567. if (!this.saveStatus){
  568. // 修改
  569. updateTestSoRouting(this.testSoRouting).then(({data})=>{
  570. if (data && data.code === 0){
  571. this.selectTestSoRoutingList();
  572. this.$message.success(data.msg)
  573. this.saveFlag = false
  574. }else {
  575. this.$message.warning(data.msg)
  576. }
  577. }).catch((error)=>{
  578. this.$message.error(error)
  579. })
  580. }else {
  581. // 新增
  582. saveTestSoRouting(this.testSoRouting).then(({data})=>{
  583. if (data && data.code === 0){
  584. this.selectTestSoRoutingList();
  585. this.$message.success(data.msg)
  586. if (!isClose){
  587. this.saveFlag = false
  588. }
  589. }else {
  590. this.$message.warning(data.msg)
  591. }
  592. }).catch((error)=>{
  593. this.$message.error(error)
  594. })
  595. }
  596. }else {
  597. for (let key in objects) {
  598. this.$message.error(this.testSoRoutingLabel[key]+"不能为空")
  599. }
  600. }
  601. })
  602. },
  603. testSoRoutingClickRow(row,column){
  604. if (column.label !== '操作'){
  605. this.$refs.testSoRoutingTable.toggleRowSelection(row,true)
  606. }
  607. },
  608. selectionTestSoRouting(val){
  609. this.selectionTestSoRoutingList = val
  610. },
  611. removeTestSoRouting(){
  612. if (this.selectionTestSoRoutingList.length === 0){
  613. this.$message.warning("请选择要删除的工艺路线")
  614. return
  615. }
  616. this.$confirm('确定要删除该记录吗?', '提示', {
  617. confirmButtonText: '确定',
  618. cancelButtonText: '取消',
  619. type: 'warning'
  620. }).then(() => {
  621. removeBatchTestSoRouting(this.selectionTestSoRoutingList).then(({data}) => {
  622. if (data && data.code === 0) {
  623. this.selectTestSoRoutingList();
  624. this.$message.success(data.msg)
  625. } else {
  626. this.$message.warning(data.msg)
  627. }
  628. }).catch((error) => {
  629. this.$message.error(error)
  630. })
  631. }).catch(()=>{})
  632. },
  633. computeRequiredTime(){
  634. // 1、计算效率
  635. let total = new Decimal(this.testSoRouting.efficiency).div(new Decimal(100))
  636. // 2、计算单位生产时间
  637. let time = new Decimal(0);
  638. switch (this.testSoRouting.factorUnit){
  639. case "小时":
  640. time = new Decimal(this.testSoRouting.machRunFactor)
  641. break
  642. case "单位/小时":
  643. if (new Decimal(this.testSoRouting.machRunFactor).toNumber() !== 0){
  644. time = new Decimal(1).div(new Decimal(this.testSoRouting.machRunFactor))
  645. }
  646. break
  647. case "小时/单位":
  648. time = new Decimal(this.testSoRouting.machRunFactor).mul(new Decimal(1))
  649. break
  650. }
  651. total = total.mul(time)
  652. total = Decimal.add(new Decimal(this.testSoRouting.machSetupTime),total)
  653. this.testSoRouting.requiredTime = total;
  654. if (this.testSoRouting.requiredTime.toNumber !== 0){
  655. this.testSoRouting.requiredTime = new Decimal(total.toFixed(3,Decimal.ROUND_FLOOR)).toSignificantDigits().toNumber();
  656. }
  657. },
  658. // 查询加工中心列表
  659. queryWorkCenter() {
  660. this.searchData.limit = this.pageSize
  661. this.searchData.page = this.pageIndex
  662. queryWorkCenterList(this.searchData).then(({data}) => {
  663. if (data && data.code === 0) {
  664. this.workCenterList = data.page.list
  665. this.pageIndex = data.page.currPage
  666. this.pageSize = data.page.pageSize
  667. this.totalPage = data.page.totalCount
  668. this.workCenterDialogFlag = true
  669. } else {
  670. this.workCenterList = []
  671. }
  672. })
  673. },
  674. openRouting(){
  675. if (this.saveStatus){
  676. this.testSoRouting.itemNo = this.dataList.length > 0?this.dataList[this.dataList.length-1].itemNo +10:10;
  677. }
  678. },
  679. changeWorkCenter(val){
  680. this.workCenter.workCenterNo = val
  681. this.searchWorkCenter(true)
  682. },
  683. openWorkCenterDialog(){
  684. this.workCenter.workCenterNo = this.testSoRouting.workCenterNo;
  685. this.searchWorkCenter()
  686. },
  687. // 每页数
  688. sizeChangeHandle(val) {
  689. this.pageSize = val
  690. this.pageIndex = 1
  691. this.queryWorkCenter()
  692. },
  693. // 当前页
  694. currentChangeHandle(val) {
  695. this.pageIndex = val
  696. this.queryWorkCenter()
  697. },
  698. },
  699. }
  700. </script>
  701. <template>
  702. <div>
  703. <div style="margin-bottom: 5px">
  704. <template v-if="isAuth('107001:tab4:save')">
  705. <el-button type="primary" v-if="!disabled" @click="saveTestSoRoutingBtn()">新增</el-button>
  706. </template>
  707. <template v-if="isAuth('107001:tab4:remove')">
  708. <el-button type="primary" v-if="!disabled" @click="removeTestSoRouting">删除</el-button>
  709. </template>
  710. </div>
  711. <el-table
  712. :height="height" border
  713. :data="dataList"
  714. ref="testSoRoutingTable"
  715. @row-click="testSoRoutingClickRow"
  716. @selection-change="selectionTestSoRouting">
  717. <el-table-column
  718. type="selection"
  719. header-align="center"
  720. align="center"
  721. width="50">
  722. </el-table-column>
  723. <el-table-column
  724. v-for="(item,index) in testSoRoutingColumnList" :key="index"
  725. :sortable="item.columnSortable"
  726. :prop="item.columnProp"
  727. :header-align="item.headerAlign"
  728. :show-overflow-tooltip="item.showOverflowTooltip"
  729. :align="item.align"
  730. :fixed="item.fixed===''?false:item.fixed"
  731. :min-width="item.columnWidth"
  732. :label="item.columnLabel">
  733. <template slot-scope="scope">
  734. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  735. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  736. </template>
  737. </el-table-column>
  738. <el-table-column label="操作" align="center" fixed="right">
  739. <template slot-scope="{row,$index}">
  740. <template v-if="isAuth('107001:tab4:update')">
  741. <a type="text" style="cursor:pointer;" v-if="!disabled" @click="saveTestSoRoutingBtn(row)">编辑</a>
  742. </template>
  743. </template>
  744. </el-table-column>
  745. </el-table>
  746. <el-dialog width="700px" :close-on-click-modal="false" :title="(saveStatus?'新增':'编辑')+'-工艺路线'" :visible.sync="saveFlag" @open="openRouting" v-drag append-to-body @close="closeTestSoRoutingDialog">
  747. <el-form :model="testSoRouting" label-position="top" ref="saveForm" :rules="testSoRoutingRule">
  748. <el-row :gutter="10">
  749. <el-col :span="8">
  750. <el-form-item label="工序号" prop="itemNo">
  751. <el-input-number style="width: 100%;margin-top: -5px;" :disabled="!saveStatus" :min="0" v-model="testSoRouting.itemNo" :controls="false"></el-input-number>
  752. </el-form-item>
  753. </el-col>
  754. <el-col :span="16">
  755. <el-form-item label="工序名称" prop="itemDesc">
  756. <el-input v-model="testSoRouting.itemDesc"></el-input>
  757. </el-form-item>
  758. </el-col>
  759. </el-row>
  760. <el-row :gutter="10">
  761. <el-col :span="8">
  762. <el-form-item label="加工中心" prop="workCenterNo">
  763. <span slot="label" style="cursor:pointer;" @click="queryWorkCenter"><a>加工中心</a></span>
  764. <el-input @change="changeWorkCenter" v-model="testSoRouting.workCenterNo"></el-input>
  765. </el-form-item>
  766. </el-col>
  767. <el-col :span="8">
  768. <el-form-item label="加工中心名称" prop="workCenterDesc">
  769. <el-input disabled v-model="testSoRouting.workCenterDesc"></el-input>
  770. </el-form-item>
  771. </el-col>
  772. <el-col :span="8">
  773. <el-form-item label="加工中心类别" prop="workCenterType">
  774. <el-input disabled v-model="testSoRouting.workCenterType"></el-input>
  775. </el-form-item>
  776. </el-col>
  777. <el-col :span="8" v-if="false">
  778. <el-form-item label="准备时间" prop="machSetupTime">
  779. <el-input-number @input="computeRequiredTime" style="width: 100%;margin-top: -5px;" :min="0" v-model="testSoRouting.machSetupTime" :controls="false"></el-input-number>
  780. </el-form-item>
  781. </el-col>
  782. <el-col :span="8" v-if="false">
  783. <el-form-item label="单位产出量" prop="machRunFactor">
  784. <el-input-number @input="computeRequiredTime" style="width: 100%;margin-top: -5px;" :min="0" v-model="testSoRouting.machRunFactor" :controls="false"></el-input-number>
  785. </el-form-item>
  786. </el-col>
  787. <el-col :span="8" v-if="false">
  788. <el-form-item label="效率%" prop="efficiency">
  789. <el-input-number @input="computeRequiredTime" style="width: 100%;margin-top: -5px;" :min="0" v-model="testSoRouting.efficiency" :controls="false"></el-input-number>
  790. </el-form-item>
  791. </el-col>
  792. <el-col :span="8" v-if="false">
  793. <el-form-item label="产出单位" prop="factorUnit">
  794. <el-select v-model="testSoRouting.factorUnit" @change="computeRequiredTime"
  795. style="width: 100%" placeholder="请选择" default-first-option>
  796. <el-option label="单位/小时" :value="'单位/小时'"></el-option>
  797. <el-option label="小时/单位" :value="'小时/单位'"></el-option>
  798. <el-option label="小时" :value="'小时'"></el-option>
  799. </el-select>
  800. </el-form-item>
  801. </el-col>
  802. </el-row>
  803. <el-row :gutter="10">
  804. <el-col :span="8">
  805. <el-form-item label="需求时间(h)" prop="requiredTime">
  806. <el-input-number style="width: 100%;margin-top: -5px;" :min="0" v-model="testSoRouting.requiredTime" :controls="false"></el-input-number>
  807. </el-form-item>
  808. </el-col>
  809. <el-col :span="8" v-if="false">
  810. <el-form-item label="需求数量" prop="requiredQty">
  811. <el-input-number style="width: 100%;margin-top: -5px;" :min="0" v-model="testSoRouting.requiredQty" :controls="false"></el-input-number>
  812. </el-form-item>
  813. </el-col>
  814. </el-row>
  815. <el-row :gutter="10" v-if="false">
  816. <el-col :span="8">
  817. <el-form-item label="报告数量" prop="reportedQty">
  818. <el-input-number style="width: 100%;margin-top: -5px;" :min="0" v-model="testSoRouting.reportedQty" :controls="false"></el-input-number>
  819. </el-form-item>
  820. </el-col>
  821. <el-col :span="8" v-if="false">
  822. <el-form-item label="合格数量" prop="approveQty">
  823. <el-input-number style="width: 100%;margin-top: -5px;" :min="0" v-model="testSoRouting.approveQty" :controls="false"></el-input-number>
  824. </el-form-item>
  825. </el-col>
  826. </el-row>
  827. <el-row :gutter="10">
  828. <el-col :span="8" v-if="false">
  829. <el-form-item label="计划开工时间" prop="planStartTime">
  830. <el-date-picker
  831. style="width: 100%"
  832. v-model="testSoRouting.planStartTime"
  833. type="datetime"
  834. placeholder="选择日期时间">
  835. </el-date-picker>
  836. </el-form-item>
  837. </el-col>
  838. <el-col :span="8" v-if="false">
  839. <el-form-item label="计划完工时间" prop="planFinishTime">
  840. <el-date-picker
  841. style="width: 100%"
  842. v-model="testSoRouting.planFinishTime"
  843. type="datetime"
  844. placeholder="选择日期时间">
  845. </el-date-picker>
  846. </el-form-item>
  847. </el-col>
  848. <el-col :span="24">
  849. <el-form-item label="备注" prop="remark" style="height: 90px">
  850. <el-input type="textarea" resize='none' :autosize="{ minRows: 3, maxRows: 3 }" v-model="testSoRouting.remark"></el-input>
  851. </el-form-item>
  852. </el-col>
  853. </el-row>
  854. </el-form>
  855. <span slot="footer" class="dialog-footer">
  856. <el-button v-if="saveStatus" type="primary" @click="saveTestSoRouting(true)"> </el-button>
  857. <el-button type="primary" @click="saveTestSoRouting(false)">保存并关闭</el-button>
  858. <el-button @click="saveFlag = false"> </el-button>
  859. </span>
  860. </el-dialog>
  861. <!-- <el-dialog title="加工中心信息" v-drag @open="openWorkCenterDialog" :visible.sync="workCenterDialogFlag" width="600px" append-to-body @close="closeWorkCenterDialog">-->
  862. <!-- <el-form :model="workCenter" label-position="top">-->
  863. <!-- <el-row :gutter="10">-->
  864. <!-- <el-col :span="6">-->
  865. <!-- <el-form-item label="加工中心">-->
  866. <!-- <el-input v-model="workCenter.workCenterNo"></el-input>-->
  867. <!-- </el-form-item>-->
  868. <!-- </el-col>-->
  869. <!-- <el-col :span="8">-->
  870. <!-- <el-form-item label="加工中心名称">-->
  871. <!-- <el-input v-model="workCenter.workCenterDesc"></el-input>-->
  872. <!-- </el-form-item>-->
  873. <!-- </el-col>-->
  874. <!-- <el-col :span="6">-->
  875. <!-- <el-form-item label="加工中心类别">-->
  876. <!-- <el-input v-model="workCenter.workCenterType"></el-input>-->
  877. <!-- </el-form-item>-->
  878. <!-- </el-col>-->
  879. <!-- <el-col :span="4">-->
  880. <!-- <el-form-item label=" ">-->
  881. <!-- <el-button type="primary" @click="searchWorkCenter">查询</el-button>-->
  882. <!-- </el-form-item>-->
  883. <!-- </el-col>-->
  884. <!-- </el-row>-->
  885. <!-- </el-form>-->
  886. <!-- <el-table border height="200px" stripe-->
  887. <!-- :data="workCenterList" @row-dblclick="dblClickWorkCenterTable">-->
  888. <!-- <el-table-column label="加工中心" prop="workCenterNo"></el-table-column>-->
  889. <!-- <el-table-column label="加工中心名称" prop="workCenterDesc"></el-table-column>-->
  890. <!-- <el-table-column label="加工中心类别" prop="workCenterType"></el-table-column>-->
  891. <!-- </el-table>-->
  892. <!-- </el-dialog>-->
  893. <!-- 加工中心模态框 -->
  894. <el-dialog title="加工中心" top="17vh" :close-on-click-modal="false" v-drag :visible.sync="workCenterDialogFlag" append-to-body width="940px">
  895. <el-form :inline="true" label-position="top" :model="searchData">
  896. <el-form-item :label="'加工中心'">
  897. <el-input v-model="searchData.workCenterNo" clearable style="width: 120px"></el-input>
  898. </el-form-item>
  899. <el-form-item :label="'加工中心名称'">
  900. <el-input v-model="searchData.workCenterDesc" clearable style="width: 120px"></el-input>
  901. </el-form-item>
  902. <el-form-item :label="'加工中心类别'">
  903. <el-input v-model="searchData.workCenterType" clearable style="width: 120px"></el-input>
  904. </el-form-item>
  905. <el-form-item :label="' '">
  906. <el-button type="primary" @click="queryWorkCenter">查询</el-button>
  907. </el-form-item>
  908. </el-form>
  909. <el-table
  910. :height="250"
  911. :data="workCenterList"
  912. @row-dblclick="dblClickWorkCenterTable"
  913. border
  914. style="width: 100%;">
  915. <el-table-column
  916. v-for="(item,index) in workCenterColumnList" :key="index"
  917. :sortable="item.columnSortable"
  918. :prop="item.columnProp"
  919. :header-align="item.headerAlign"
  920. :show-overflow-tooltip="item.showOverflowTooltip"
  921. :align="item.align"
  922. :fixed="item.fixed==''?false:item.fixed"
  923. :min-width="item.columnWidth"
  924. :label="item.columnLabel">
  925. <template slot-scope="scope">
  926. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  927. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  928. </template>
  929. </el-table-column>
  930. </el-table>
  931. <!-- 分页插件 -->
  932. <el-pagination
  933. style="margin-top: 5px"
  934. @size-change="sizeChangeHandle"
  935. @current-change="currentChangeHandle"
  936. :current-page="pageIndex"
  937. :page-sizes="[20, 50, 100, 200, 500]"
  938. :page-size="pageSize"
  939. :total="totalPage"
  940. layout="total, sizes, prev, pager, next, jumper">
  941. </el-pagination>
  942. <el-footer style="height:35px;margin-top:10px;text-align:center">
  943. <el-button type="primary" @click="workCenterDialogFlag = false">关闭</el-button>
  944. </el-footer>
  945. </el-dialog>
  946. </div>
  947. </template>
  948. <style scoped>
  949. .el-input-number /deep/ .el-input__inner{
  950. text-align: right;
  951. padding-right: 5px !important;
  952. }
  953. </style>