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.

963 lines
32 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. <script>
  2. import {
  3. searchCodeItemDefs,
  4. removeBatchCodeItemDef,
  5. saveBatchCodeItemDef,
  6. editBatchCodeItemDef, searchCodeItemDefsSeq, searchCodeSeqGenerate, saveCodeSeqGenerate
  7. } from "../../../api/code/codeItemDef"
  8. import ItemValue from "./item/itemValue.vue";
  9. const columnList = [
  10. {
  11. functionId: 9009004,
  12. serialNumber: '9009004Table1ItemNo',
  13. tableId: '9009004Table1',
  14. tableName: '编码组成元素',
  15. columnProp: 'itemNo',
  16. headerAlign: 'center',
  17. align: 'right',
  18. columnLabel: '序号',
  19. columnHidden: false,
  20. columnImage: false,
  21. columnSortable: false,
  22. sortLv: 0,
  23. status: true,
  24. fixed: '',
  25. columnWidth: 60
  26. },
  27. {
  28. functionId: 9009004,
  29. serialNumber: '9009004Table1ItemDesc',
  30. tableId: '9009004Table1',
  31. tableName: '编码组成元素',
  32. columnProp: 'itemDesc',
  33. headerAlign: 'center',
  34. align: 'left',
  35. columnLabel: '描述',
  36. columnHidden: false,
  37. columnImage: false,
  38. columnSortable: false,
  39. sortLv: 0,
  40. status: true,
  41. fixed: '',
  42. columnWidth: 120
  43. },{
  44. functionId: 9009004,
  45. serialNumber: '9009004Table1SeqNo',
  46. tableId: '9009004Table1',
  47. tableName: '编码组成元素',
  48. columnProp: 'seqNo',
  49. headerAlign: 'center',
  50. align: 'right',
  51. columnLabel: '排列次序号',
  52. columnHidden: false,
  53. columnImage: false,
  54. columnSortable: false,
  55. sortLv: 0,
  56. status: true,
  57. fixed: '',
  58. columnWidth: 120
  59. },{
  60. functionId: 9009004,
  61. serialNumber: '9009004Table1Postfix',
  62. tableId: '9009004Table1',
  63. tableName: '编码组成元素',
  64. columnProp: 'postfix',
  65. headerAlign: 'center',
  66. align: 'left',
  67. columnLabel: '前面是否增加分割号',
  68. columnHidden: false,
  69. columnImage: false,
  70. columnSortable: false,
  71. sortLv: 0,
  72. status: true,
  73. fixed: '',
  74. columnWidth: 120
  75. },{
  76. functionId: 9009004,
  77. serialNumber: '9009004Table1Bits',
  78. tableId: '9009004Table1',
  79. tableName: '编码组成元素',
  80. columnProp: 'bits',
  81. headerAlign: 'center',
  82. align: 'right',
  83. columnLabel: '编码位数',
  84. columnHidden: false,
  85. columnImage: false,
  86. columnSortable: false,
  87. sortLv: 0,
  88. status: true,
  89. fixed: '',
  90. columnWidth: 120
  91. },{
  92. functionId: 9009004,
  93. serialNumber: '9009004Table1ItemByCondition',
  94. tableId: '9009004Table1',
  95. tableName: '编码组成元素',
  96. columnProp: 'itemByCondition',
  97. headerAlign: 'center',
  98. align: 'left',
  99. columnLabel: '可选值随元素变化而变化',
  100. columnHidden: false,
  101. columnImage: false,
  102. columnSortable: false,
  103. sortLv: 0,
  104. status: true,
  105. fixed: '',
  106. columnWidth: 180
  107. },{
  108. functionId: 9009004,
  109. serialNumber: '9009004Table1ItemType',
  110. tableId: '9009004Table1',
  111. tableName: '编码组成元素',
  112. columnProp: 'itemType',
  113. headerAlign: 'center',
  114. align: 'left',
  115. columnLabel: '元素输入类型',
  116. columnHidden: false,
  117. columnImage: false,
  118. columnSortable: false,
  119. sortLv: 0,
  120. status: true,
  121. fixed: '',
  122. columnWidth: 120
  123. },{
  124. functionId: 9009004,
  125. serialNumber: '9009004Table1SeqNoBits',
  126. tableId: '9009004Table1',
  127. tableName: '编码组成元素',
  128. columnProp: 'seqNoBits',
  129. headerAlign: 'center',
  130. align: 'right',
  131. columnLabel: '流水号位数',
  132. columnHidden: false,
  133. columnImage: false,
  134. columnSortable: false,
  135. sortLv: 0,
  136. status: true,
  137. fixed: '',
  138. columnWidth: 120
  139. },{
  140. functionId: 9009004,
  141. serialNumber: '9009004Table1SeqNoType',
  142. tableId: '9009004Table1',
  143. tableName: '编码组成元素',
  144. columnProp: 'seqNoType',
  145. headerAlign: 'center',
  146. align: 'left',
  147. columnLabel: '流水号产生规则',
  148. columnHidden: false,
  149. columnImage: false,
  150. columnSortable: false,
  151. sortLv: 0,
  152. status: true,
  153. fixed: '',
  154. columnWidth: 120
  155. },{
  156. functionId: 9009004,
  157. serialNumber: '9009004Table1VirtualItem',
  158. tableId: '9009004Table1',
  159. tableName: '编码组成元素',
  160. columnProp: 'virtualItem',
  161. headerAlign: 'center',
  162. align: 'left',
  163. columnLabel: '不参与编码',
  164. columnHidden: false,
  165. columnImage: false,
  166. columnSortable: false,
  167. sortLv: 0,
  168. status: true,
  169. fixed: '',
  170. columnWidth: 120
  171. },
  172. // {
  173. // functionId: 9009004,
  174. // serialNumber: '9009004Table1ValueSeqNo',
  175. // tableId: '9009004Table1',
  176. // tableName: '编码组成元素',
  177. // columnProp: 'valueSeqNo',
  178. // headerAlign: 'center',
  179. // align: 'right',
  180. // columnLabel: '值顺序号',
  181. // columnHidden: false,
  182. // columnImage: false,
  183. // columnSortable: false,
  184. // sortLv: 0,
  185. // status: true,
  186. // fixed: '',
  187. // columnWidth: 120
  188. // },{
  189. // functionId: 9009004,
  190. // serialNumber: '9009004Table1FixedValueFlag',
  191. // tableId: '9009004Table1',
  192. // tableName: '编码组成元素',
  193. // columnProp: 'fixedValueFlag',
  194. // headerAlign: 'center',
  195. // align: 'right',
  196. // columnLabel: '固定值',
  197. // columnHidden: false,
  198. // columnImage: false,
  199. // columnSortable: false,
  200. // sortLv: 0,
  201. // status: true,
  202. // fixed: '',
  203. // columnWidth: 120
  204. // },
  205. ];
  206. const descColumnList = [
  207. {
  208. functionId: 9009004,
  209. serialNumber: '9009004Table1ItemNo',
  210. tableId: '9009004Table1',
  211. tableName: '编码组成元素',
  212. columnProp: 'itemNo',
  213. headerAlign: 'center',
  214. align: 'right',
  215. columnLabel: '序号',
  216. columnHidden: false,
  217. columnImage: false,
  218. columnSortable: false,
  219. sortLv: 0,
  220. status: true,
  221. fixed: '',
  222. columnWidth: 60
  223. },
  224. {
  225. functionId: 9009004,
  226. serialNumber: '9009004Table1ItemDesc',
  227. tableId: '9009004Table1',
  228. tableName: '编码组成元素',
  229. columnProp: 'itemDesc',
  230. headerAlign: 'center',
  231. align: 'left',
  232. columnLabel: '描述',
  233. columnHidden: false,
  234. columnImage: false,
  235. columnSortable: false,
  236. sortLv: 0,
  237. status: true,
  238. fixed: '',
  239. columnWidth: 120
  240. },{
  241. functionId: 9009004,
  242. serialNumber: '9009004Table1SeqNo',
  243. tableId: '9009004Table1',
  244. tableName: '编码组成元素',
  245. columnProp: 'seqNo',
  246. headerAlign: 'center',
  247. align: 'right',
  248. columnLabel: '排列次序号',
  249. columnHidden: false,
  250. columnImage: false,
  251. columnSortable: false,
  252. sortLv: 0,
  253. status: true,
  254. fixed: '',
  255. columnWidth: 80
  256. },{
  257. functionId: 9009004,
  258. serialNumber: '9009004Table1ShowInDesc',
  259. tableId: '9009004Table1',
  260. tableName: '编码组成元素',
  261. columnProp: 'showInDesc',
  262. headerAlign: 'center',
  263. align: 'left',
  264. columnLabel: '在描述中显示',
  265. columnHidden: false,
  266. columnImage: false,
  267. columnSortable: false,
  268. sortLv: 0,
  269. status: true,
  270. fixed: '',
  271. columnWidth: 120
  272. },{
  273. functionId: 9009004,
  274. serialNumber: '9009004Table1ShowItemDescInDesc',
  275. tableId: '9009004Table1',
  276. tableName: '编码组成元素',
  277. columnProp: 'showItemDescInDesc',
  278. headerAlign: 'center',
  279. align: 'left',
  280. columnLabel: '在描述显示元素名称',
  281. columnHidden: false,
  282. columnImage: false,
  283. columnSortable: false,
  284. sortLv: 0,
  285. status: true,
  286. fixed: '',
  287. columnWidth: 140
  288. },{
  289. functionId: 9009004,
  290. serialNumber: '9009004Table1ShowInRemark',
  291. tableId: '9009004Table1',
  292. tableName: '编码组成元素',
  293. columnProp: 'showInRemark',
  294. headerAlign: 'center',
  295. align: 'left',
  296. columnLabel: '在备注中显示',
  297. columnHidden: false,
  298. columnImage: false,
  299. columnSortable: false,
  300. sortLv: 0,
  301. status: true,
  302. fixed: '',
  303. columnWidth: 100
  304. },{
  305. functionId: 9009004,
  306. serialNumber: '9009004Table1ShowItemDescInRemark',
  307. tableId: '9009004Table1',
  308. tableName: '编码组成元素',
  309. columnProp: 'showItemDescInRemark',
  310. headerAlign: 'center',
  311. align: 'left',
  312. columnLabel: '在备注中显示元素名称',
  313. columnHidden: false,
  314. columnImage: false,
  315. columnSortable: false,
  316. sortLv: 0,
  317. status: true,
  318. fixed: '',
  319. columnWidth: 140
  320. }
  321. ];
  322. const dataList = {
  323. itemNo:undefined,
  324. itemDesc:undefined,
  325. seqNo:undefined,
  326. postfix:undefined,
  327. bits:undefined,
  328. itemByCondition:undefined,
  329. seqFlag:undefined,
  330. itemType:undefined,
  331. seqNoBits:undefined,
  332. seqNoType:undefined,
  333. virtualItem:undefined,
  334. valueSeqNo:undefined,
  335. fixedValueFlag:undefined,
  336. showInDesc:undefined,
  337. showItemDescInDesc:undefined,
  338. showInRemark:undefined,
  339. showItemDescInRemark:undefined,
  340. };
  341. const dataLabels = {
  342. itemNo:"元素序号",
  343. itemDesc:"元素描述",
  344. seqNo:"排列次序号",
  345. postfix:"前面是否增加分割号",
  346. bits:"编码位数",
  347. itemByCondition:"可选值随元素变化而变化",
  348. seqFlag:"流水号标识",
  349. itemType:"元素输入类型",
  350. seqNoBits:"流水号位数",
  351. seqNoType:"流水号产生规则",
  352. virtualItem:"不参与编码",
  353. valueSeqNo:"值顺序号",
  354. fixedValueFlag:"固定值",
  355. showInDesc:"在描述中显示",
  356. showItemDescInDesc:"在描述显示元素名称",
  357. showInRemark:"在备注中显示",
  358. showItemDescInRemark:"在备注中显示元素名称",
  359. };
  360. const dataRules = {};
  361. Object.keys(dataList).forEach(key => {
  362. dataRules[key] = [
  363. {
  364. required: true,
  365. message: `${dataLabels[key]}不能为空`,
  366. trigger: ['blur','input','change']
  367. }
  368. ];
  369. });
  370. export default {
  371. name: "CodeItem",
  372. components: {ItemValue},
  373. data(){
  374. return{
  375. currentRow:{},
  376. saveOrEditIndex:undefined,
  377. loading:false,
  378. defineOptionalValueFlag:false,
  379. visible: false,
  380. codeItemDefs: [],
  381. copyCodeItemDefs:[],
  382. columnList: columnList.map(item => {return {...item,userId:this.$store.state.user.id}}),
  383. descColumnList: descColumnList.map(item => {return {...item,userId:this.$store.state.user.id}}),
  384. searchCodeItemDef: {...dataList},
  385. selectionAllList: [],
  386. saveCodeItemDef:{...dataList},
  387. rules: dataRules,
  388. descOrRemarkDialog:false,
  389. codeItemSeqList:[],
  390. seqNoGenerateDialog:false,
  391. seqNoGenerateList:[],
  392. }
  393. },
  394. computed: {
  395. itemType(){
  396. return this.saveCodeItemDef.itemType;
  397. },
  398. sortCodeItemDefs(){
  399. let arr = JSON.parse(JSON.stringify(this.copyCodeItemDefs));
  400. return arr.sort((a,b) => a.seqNo - b.seqNo);
  401. },
  402. descDialog:{
  403. get(){
  404. return this.descOrRemarkDialog
  405. },
  406. set(val){
  407. if (this.saveOrEditIndex !== undefined){
  408. this.$confirm('存在信息正在编辑, 是否继续?', '提示', {
  409. confirmButtonText: '确定',
  410. cancelButtonText: '取消',
  411. type: 'warning'
  412. }).then(() => {
  413. this.descOrRemarkDialog = val
  414. this.saveOrEditIndex = undefined
  415. }).catch(() => {
  416. });
  417. }else {
  418. this.descOrRemarkDialog = val
  419. }
  420. }
  421. }
  422. },
  423. watch:{
  424. itemType(val,oldVal){
  425. if (val && !val.includes('流水号')){
  426. this.saveCodeItemDef.seqNoType = '*';
  427. this.saveCodeItemDef.seqNoBits = 0;
  428. }
  429. },
  430. },
  431. methods: {
  432. searchCodeItemDefs(){
  433. let params = {
  434. ...this.searchCodeItemDef,
  435. site: this.$store.state.user.site,
  436. }
  437. this.loading = true;
  438. searchCodeItemDefs(params).then(({data}) => {
  439. if (data && data.code === 0){
  440. this.codeItemDefs = data.rows;
  441. this.copyCodeItemDefs = data.rows;
  442. if (!this.currentRow.itemNo && this.codeItemDefs.length > 0){
  443. this.currentRow = {...this.codeItemDefs[0]};
  444. }
  445. }else {
  446. this.$message.error(data.msg)
  447. }
  448. this.loading = false
  449. }).catch(err => {
  450. console.log(err)
  451. this.loading = false
  452. })
  453. },
  454. removeBatchCodeItemDef(){
  455. if (this.selectionAllList.length === 0){
  456. this.$message.warning("请选择要删除的项")
  457. return
  458. }
  459. this.$confirm(`确定要删除组成元素${this.selectionAllList[0].itemDesc}以及所有该元素的有关信息吗?`, '提示', {
  460. confirmButtonText: '确定',
  461. cancelButtonText: '取消',
  462. type: 'warning'
  463. }).then(() => {
  464. removeBatchCodeItemDef(this.selectionAllList).then(({data}) => {
  465. if (data && data.code === 0){
  466. this.$message.success(data.msg);
  467. this.currentRow = {};
  468. this.searchCodeItemDefs()
  469. }else {
  470. this.$message.error(data.msg)
  471. }
  472. }).catch(err => {
  473. console.log(err)
  474. })
  475. }).catch(() => {
  476. });
  477. },
  478. saveBatchCodeItemDef(params){
  479. saveBatchCodeItemDef(params).then(({data}) => {
  480. if (data && data.code === 0){
  481. this.$message.success(data.msg)
  482. this.visible = false;
  483. this.searchCodeItemDefs();
  484. }else {
  485. this.$message.error(data.msg)
  486. }
  487. }).catch(err => {
  488. console.log(err)
  489. })
  490. },
  491. editBatchCodeItemDef(params){
  492. editBatchCodeItemDef(params).then(({data}) => {
  493. if (data && data.code === 0){
  494. this.$message.success(data.msg)
  495. this.visible = false;
  496. this.currentRow = {};
  497. this.saveOrEditIndex = undefined
  498. this.searchCodeItemDefs()
  499. }else {
  500. this.$message.error(data.msg)
  501. }
  502. }).catch(err => {
  503. console.log(err)
  504. })
  505. },
  506. closeDialog(){
  507. this.resetData(this.saveCodeItemDef);
  508. this.$refs.saveCodeItemDefForm.resetFields();
  509. },
  510. resetData(data){
  511. Object.keys(data).forEach(key => {data[key] = undefined;});
  512. },
  513. clickEdit(row) {
  514. this.saveCodeItemDef = {...row};
  515. this.visible = true;
  516. },
  517. clickSave(){
  518. this.resetData(this.saveCodeItemDef);
  519. this.$nextTick(()=>{
  520. this.saveCodeItemDef.postfix = 'N';
  521. this.saveCodeItemDef.bits = 1;
  522. this.saveCodeItemDef.itemByCondition = 'N';
  523. this.saveCodeItemDef.seqNoBits = 0;
  524. this.saveCodeItemDef.virtualItem = 'N';
  525. this.saveCodeItemDef.seqNoType = '*';
  526. this.saveCodeItemDef.showInDesc = 'Y';
  527. this.saveCodeItemDef.showItemDescInDesc = 'Y';
  528. this.saveCodeItemDef.showInRemark = 'Y';
  529. this.saveCodeItemDef.showItemDescInRemark = 'Y';
  530. if (this.codeItemDefs.length === 0){
  531. this.saveCodeItemDef.seqNo = 1;
  532. this.saveCodeItemDef.valueSeqNo = 1;
  533. }else {
  534. this.saveCodeItemDef.seqNo = this.sortCodeItemDefs[this.codeItemDefs.length-1].seqNo + 1;
  535. let arr = this.sortCodeItemDefs.map(item=>item.valueSeqNo)
  536. this.saveCodeItemDef.valueSeqNo = Math.max(...arr) + 1;
  537. }
  538. })
  539. this.visible = true;
  540. },
  541. clickSaveCodeItemDef(){
  542. this.$refs.saveCodeItemDefForm.validate((valid,obj) => {
  543. if (valid) {
  544. if (this.saveCodeItemDef.itemType && this.saveCodeItemDef.itemType.includes('流水号') && this.saveCodeItemDef.seqNoBits <= 0){
  545. this.$message.warning("流水号位数不能小于等于0");
  546. return
  547. }
  548. if (this.saveCodeItemDef.itemType &&this.saveCodeItemDef.itemType.includes('流水号') && this.saveCodeItemDef.seqNoType === '*'){
  549. this.$message.warning("流水号产生规则不能为*");
  550. return
  551. }
  552. let arr = [];
  553. arr.push(this.saveCodeItemDef)
  554. if (this.saveCodeItemDef.itemNo){
  555. this.editBatchCodeItemDef(arr)
  556. }else {
  557. this.saveCodeItemDef.site = this.$store.state.user.site;
  558. this.saveBatchCodeItemDef(arr)
  559. }
  560. }else {
  561. Object.keys(obj).forEach(key => {
  562. this.$message.error(obj[key][0].message);
  563. return
  564. })
  565. }
  566. })
  567. },
  568. clickCopy(row){
  569. this.saveCodeItemDef = {...row};
  570. this.visible = true;
  571. this.saveCodeItemDef.itemNo = undefined;
  572. },
  573. saveDesc(row){
  574. let arr = [];
  575. arr.push(row)
  576. this.editBatchCodeItemDef(arr)
  577. },
  578. clickEditDesc(index){
  579. if (this.saveOrEditIndex !== undefined){
  580. this.$confirm('存在信息正在编辑, 是否继续?', '提示', {
  581. confirmButtonText: '确定',
  582. cancelButtonText: '取消',
  583. type: 'warning'
  584. }).then(() => {
  585. this.clickSettingDesc();
  586. this.saveOrEditIndex = index;
  587. }).catch(() => {
  588. });
  589. }else {
  590. this.saveOrEditIndex = index;
  591. }
  592. },
  593. clickSettingDesc(){
  594. this.copyCodeItemDefs = JSON.parse(JSON.stringify(this.codeItemDefs));
  595. this.descOrRemarkDialog = true;
  596. },
  597. clickRest(){
  598. this.clickSettingDesc();
  599. this.saveOrEditIndex = undefined;
  600. },
  601. rowStyle({row}){
  602. if (row){
  603. if (row.itemNo === this.currentRow.itemNo){
  604. return {'background-color': '#E8F7F6', cursor: 'pointer'};
  605. }
  606. }
  607. },
  608. quotationClickRow(row, column, event){
  609. this.currentRow = {...row};
  610. },
  611. defineOptionalValues(){
  612. if (!this.currentRow.itemNo){
  613. this.$message.warning("请先选择要定义可选值的元素");
  614. return
  615. }
  616. this.defineOptionalValueFlag = true;
  617. },
  618. removeCodeItemDef(row){
  619. this.selectionAllList = [row];
  620. this.removeBatchCodeItemDef();
  621. },
  622. searchCodeItemDefsSeq(){
  623. searchCodeItemDefsSeq(this.currentRow).then(({data}) => {
  624. if (data && data.code === 0){
  625. this.codeItemSeqList = data.rows;
  626. }else {
  627. this.$message.warning(data.msg)
  628. }
  629. }).catch((error) => {
  630. this.$message.error(error)
  631. })
  632. },
  633. searchCodeSeqGenerate(){
  634. searchCodeSeqGenerate(this.currentRow).then(({data})=>{
  635. if (data && data.code === 0){
  636. this.seqNoGenerateList = data.rows.map(item=>item.relatedItemNo);
  637. this.searchCodeItemDefsSeq();
  638. }else {
  639. this.$message.warning(data.msg)
  640. }
  641. }).catch((error) => {
  642. this.$message.error(error)
  643. })
  644. },
  645. clickSeqNoGenerateBtn(){
  646. this.searchCodeSeqGenerate();
  647. this.seqNoGenerateDialog = true;
  648. },
  649. closeSeqNoGenerate(){
  650. this.seqNoGenerateList = [];
  651. this.codeItemSeqList = [];
  652. },
  653. saveSeqNoGenerate(){
  654. let arr = this.seqNoGenerateList.map(item=>{
  655. return {
  656. site:this.currentRow.site,
  657. relatedItemNo:item,
  658. itemNo:this.currentRow.itemNo,
  659. }
  660. })
  661. let params = {...this.currentRow}
  662. params.seqNoGenerateRules = arr;
  663. saveCodeSeqGenerate(params).then(({data}) => {
  664. if (data && data.code === 0){
  665. this.$message.success(data.msg)
  666. this.seqNoGenerateDialog = false;
  667. }else {
  668. this.$message.warning(data.msg)
  669. }
  670. }).catch((error) => {
  671. this.$message.error(error)
  672. })
  673. }
  674. },
  675. created() {
  676. this.searchCodeItemDefs()
  677. }
  678. }
  679. </script>
  680. <template>
  681. <div>
  682. <!-- 搜索条件 -->
  683. <el-form :model="searchCodeItemDef" :inline="true" label-position="top">
  684. <el-form-item label="描述">
  685. <el-input v-model="searchCodeItemDef.itemDesc"></el-input>
  686. </el-form-item>
  687. <el-form-item label=" ">
  688. <el-button type="primary" icon="el-icon-search" @click="searchCodeItemDefs">搜索</el-button>
  689. </el-form-item>
  690. </el-form>
  691. <!-- 操作按钮 -->
  692. <el-form :inline="true" label-position="top">
  693. <el-form-item label=" ">
  694. <el-button type="primary" @click="clickSave">新增</el-button>
  695. </el-form-item>
  696. <el-form-item label=" " v-if="false">
  697. <el-button type="primary" icon="el-icon-delete" @click="removeBatchCodeItemDef">删除</el-button>
  698. </el-form-item>
  699. <el-form-item label=" ">
  700. <el-button :type="`${currentRow.itemType && currentRow.itemType.includes('选择')?'primary':'info'}`" :disabled="currentRow.itemType && !currentRow.itemType.includes('选择')" @click="defineOptionalValues" plain>定义可选值</el-button>
  701. </el-form-item>
  702. <el-form-item label=" ">
  703. <el-button type="primary" :type="`${currentRow.itemType && currentRow.itemType.includes('流水号') && currentRow.seqNoType === '指定元素'?'primary':'info'}`" :disabled="!currentRow.itemType || !currentRow.itemType.includes('流水号') || currentRow.seqNoType !== '指定元素'" @click="clickSeqNoGenerateBtn" plain>流水号产生规则</el-button>
  704. </el-form-item>
  705. <el-form-item label=" ">
  706. <el-button type="primary" @click="clickSettingDesc" plain>设置描述/备注产生规则</el-button>
  707. </el-form-item>
  708. </el-form>
  709. <!-- 表格 -->
  710. <el-table :data="codeItemDefs"
  711. v-loading="loading"
  712. element-loading-text="拼命加载中"
  713. height="80vh"
  714. border
  715. @row-click="quotationClickRow"
  716. :row-style="rowStyle"
  717. style="width: 100%;margin-top: 5px;min-height: 200px">
  718. <el-table-column
  719. v-for="(item,index) in columnList" :key="index"
  720. :sortable="item.columnSortable"
  721. :prop="item.columnProp"
  722. :header-align="item.headerAlign"
  723. :show-overflow-tooltip="item.showOverflowTooltip"
  724. :align="item.align"
  725. :fixed="item.fixed === ''?false:item.fixed"
  726. :min-width="item.columnWidth"
  727. :label="item.columnLabel">
  728. </el-table-column>
  729. <el-table-column label="操作" align="center" fixed="left" header-align="center" width="150">
  730. <template slot-scope="{row,$index}">
  731. <el-link style="cursor:pointer;" @click="clickEdit(row)">编辑</el-link>
  732. <el-link style="cursor:pointer;" @click="clickCopy(row)">复制</el-link>
  733. <el-link style="cursor:pointer;" @click="removeCodeItemDef(row)">删除</el-link>
  734. </template>
  735. </el-table-column>
  736. </el-table>
  737. <!--可选值-->
  738. <el-dialog :visible.sync="defineOptionalValueFlag" v-drag title="可选值定义" top="10vh">
  739. <item-value v-if="defineOptionalValueFlag" @close="defineOptionalValueFlag=false" :item-value="currentRow"></item-value>
  740. </el-dialog>
  741. <!--新增/修改弹框-->
  742. <el-dialog :visible.sync="visible" @close="closeDialog" width="500px" v-drag :title="`${saveCodeItemDef.itemNo? '修改编码组成元素' : '新增编码组成元素'}`">
  743. <el-form :model="saveCodeItemDef" :rules="rules" ref="saveCodeItemDefForm" label-position="top">
  744. <el-row :gutter="10">
  745. <el-col :span="16">
  746. <el-form-item label="描述" prop="itemDesc" :show-message="false">
  747. <el-input v-model="saveCodeItemDef.itemDesc"></el-input>
  748. </el-form-item>
  749. </el-col>
  750. <el-col :span="8">
  751. <el-form-item label="排列次序号" prop="seqNo" :show-message="false">
  752. <el-input-number v-model="saveCodeItemDef.seqNo" :min="1" style="line-height: 1.5;width: 100%;" :controls="false"></el-input-number>
  753. </el-form-item>
  754. </el-col>
  755. <el-col :span="8">
  756. <el-form-item label="前面是否增加分割号" prop="postfix" :show-message="false">
  757. <el-select v-model="saveCodeItemDef.postfix" style="width: 100%;" placeholder="请选择">
  758. <el-option label="Y" value="Y"></el-option>
  759. <el-option label="N" value="N"></el-option>
  760. </el-select>
  761. </el-form-item>
  762. </el-col>
  763. <el-col :span="8">
  764. <el-form-item label="编码位数" prop="bits" :show-message="false">
  765. <el-input-number v-model="saveCodeItemDef.bits" :min="1" style="line-height: 1.5;width: 100%;" :controls="false"></el-input-number>
  766. </el-form-item>
  767. </el-col>
  768. <el-col :span="8">
  769. <el-form-item label="可选值随元素变化而变化" prop="itemByCondition" :show-message="false">
  770. <el-select v-model="saveCodeItemDef.itemByCondition" style="width: 100%;" placeholder="请选择">
  771. <el-option label="Y" value="Y"></el-option>
  772. <el-option label="N" value="N"></el-option>
  773. </el-select>
  774. </el-form-item>
  775. </el-col>
  776. <el-col :span="8">
  777. <el-form-item label="元素输入类型" prop="itemType" :show-message="false">
  778. <el-select v-model="saveCodeItemDef.itemType" style="width: 100%;" placeholder="请选择">
  779. <el-option label="选择" value="选择"></el-option>
  780. <el-option label="手工" value="手工"></el-option>
  781. <el-option label="流水号" value="流水号"></el-option>
  782. <el-option label="选择或手工" value="选择或手工"></el-option>
  783. <el-option label="选择或流水号" value="选择或流水号"></el-option>
  784. <el-option label="手工或流水号" value="手工或流水号"></el-option>
  785. <el-option label="选择或手工或流水号" value="选择或手工或流水号"></el-option>
  786. </el-select>
  787. </el-form-item>
  788. </el-col>
  789. <el-col :span="8">
  790. <el-form-item label="流水号参数规则" prop="seqNoType" :show-message="false">
  791. <el-select v-model="saveCodeItemDef.seqNoType" :disabled="!saveCodeItemDef.itemType || !saveCodeItemDef.itemType.includes('流水号')" style="width: 100%;" placeholder="请选择">
  792. <el-option label="*" value="*"></el-option>
  793. <el-option label="所有元素" value="所有元素"></el-option>
  794. <el-option label="指定元素" value="指定元素"></el-option>
  795. <el-option label="全局" value="全局"></el-option>
  796. </el-select>
  797. </el-form-item>
  798. </el-col>
  799. <el-col :span="8">
  800. <el-form-item label="流水号位数" prop="seqNoBits" :show-message="false">
  801. <el-input-number v-model="saveCodeItemDef.seqNoBits" :disabled="!saveCodeItemDef.itemType || !saveCodeItemDef.itemType.includes('流水号')" :min="0" style="line-height: 1.5;width: 100%;" :controls="false"></el-input-number>
  802. </el-form-item>
  803. </el-col>
  804. <el-col :span="8">
  805. <el-form-item label="不参与编码" prop="virtualItem" :show-message="false">
  806. <el-select v-model="saveCodeItemDef.virtualItem" style="width: 100%;" placeholder="请选择">
  807. <el-option label="Y" value="Y"></el-option>
  808. <el-option label="N" value="N"></el-option>
  809. </el-select>
  810. </el-form-item>
  811. </el-col>
  812. <el-col :span="8" v-if="false">
  813. <el-form-item label="值顺序号" prop="valueSeqNo" :show-message="false">
  814. <el-input-number v-model="saveCodeItemDef.valueSeqNo" :min="1" style="line-height: 1.5;width: 100%;" :controls="false"></el-input-number>
  815. </el-form-item>
  816. </el-col>
  817. <el-col :span="8" v-if="false">
  818. <el-form-item label="固定值" :show-message="false">
  819. <el-input v-model="saveCodeItemDef.fixedValueFlag"></el-input>
  820. </el-form-item>
  821. </el-col>
  822. </el-row>
  823. </el-form>
  824. <el-footer style="height:30px;text-align:center;margin-top: 8px">
  825. <el-button type="primary" @click="clickSaveCodeItemDef">保存</el-button>
  826. <el-button type="primary" @click="visible = false">关闭</el-button>
  827. </el-footer>
  828. </el-dialog>
  829. <!--设置描述/备注产生规则-->
  830. <el-dialog ref="dialog" :visible.sync="descDialog" width="60%" v-drag title="设置描述/备注产生规则">
  831. <div>
  832. <el-button type="primary" :disabled="saveOrEditIndex >= 0" icon="el-icon-refresh" @click="()=>{
  833. this.searchCodeItemDef.itemDesc = undefined;
  834. this.searchCodeItemDefs();
  835. }">刷新</el-button>
  836. <el-button type="primary" @click="descDialog = false">关闭</el-button>
  837. </div>
  838. <el-table :data="sortCodeItemDefs"
  839. height="400px"
  840. border stripe
  841. style="width: 100%;margin-top: 5px;min-height: 200px">
  842. <el-table-column
  843. v-for="(item,index) in descColumnList" :key="index"
  844. :sortable="item.columnSortable"
  845. :prop="item.columnProp"
  846. :header-align="item.headerAlign"
  847. :show-overflow-tooltip="item.showOverflowTooltip"
  848. :align="item.align"
  849. :fixed="item.fixed === ''?false:item.fixed"
  850. :min-width="item.columnWidth"
  851. :label="item.columnLabel">
  852. <template slot-scope="{row,$index}">
  853. <div v-if="saveOrEditIndex === $index && ['showInDesc','showItemDescInDesc','showInRemark','showItemDescInRemark'].includes(item.columnProp)">
  854. <el-select v-if="item.columnProp === 'showInDesc'" v-model="row.showInDesc" style="width: 100%;" placeholder="请选择">
  855. <el-option label="Y" value="Y"></el-option>
  856. <el-option label="N" value="N" :disabled="row.showItemDescInDesc === 'Y'"></el-option>
  857. </el-select>
  858. <el-select v-if="item.columnProp === 'showItemDescInDesc'" @change="()=>{
  859. if (row.showItemDescInDesc === 'Y'){
  860. row.showInDesc = 'Y';
  861. }
  862. }" v-model="row.showItemDescInDesc" style="width: 100%;" placeholder="请选择">
  863. <el-option label="Y" value="Y"></el-option>
  864. <el-option label="N" value="N"></el-option>
  865. </el-select>
  866. <el-select v-if="item.columnProp === 'showInRemark'" v-model="row.showInRemark" style="width: 100%;" placeholder="请选择">
  867. <el-option label="Y" value="Y"></el-option>
  868. <el-option label="N" value="N" :disabled="row.showItemDescInRemark === 'Y'"></el-option>
  869. </el-select>
  870. <el-select v-if="item.columnProp === 'showItemDescInRemark'" @change="()=>{
  871. if (row.showItemDescInRemark === 'Y'){
  872. row.showInRemark = 'Y';
  873. }
  874. }" v-model="row.showItemDescInRemark" style="width: 100%;" placeholder="请选择">
  875. <el-option label="Y" value="Y"></el-option>
  876. <el-option label="N" value="N"></el-option>
  877. </el-select>
  878. </div>
  879. <div v-else>
  880. {{row[item.columnProp]}}
  881. </div>
  882. </template>
  883. </el-table-column>
  884. <el-table-column label="操作" align="center" header-align="center" width="150">
  885. <template slot-scope="{row,$index}">
  886. <el-button v-if="saveOrEditIndex !== $index" @click="clickEditDesc($index)" type="text" style="cursor:pointer;" icon="el-icon-edit-outline">编辑</el-button>
  887. <div v-else>
  888. <el-button @click="saveDesc(row)" type="text" style="cursor:pointer;" icon="el-icon-edit-outline">保存</el-button>
  889. <el-button @click="clickRest" type="text" style="cursor:pointer;" icon="el-icon-circle-close">取消</el-button>
  890. </div>
  891. </template>
  892. </el-table-column>
  893. </el-table>
  894. </el-dialog>
  895. <el-dialog title="流水号产生规则" v-drag @close="closeSeqNoGenerate" :visible.sync="seqNoGenerateDialog" width="520px">
  896. <el-form :inline="true" label-position="top" :model="currentRow">
  897. <el-form-item :label="'序号'">
  898. <el-input v-model="currentRow.itemNo" readonly style="width: 120px"></el-input>
  899. </el-form-item>
  900. <el-form-item :label="'描述'">
  901. <el-input v-model="currentRow.itemDesc" readonly style="width: 120px"></el-input>
  902. </el-form-item>
  903. </el-form>
  904. <el-transfer class="rq" :props="{key: 'itemNo',label: 'itemDesc' }"
  905. filterable v-model="seqNoGenerateList"
  906. :data="codeItemSeqList" :titles="['元素列表', '已关联元素列表']">
  907. <span slot-scope="{option}">{{option.itemNo}} / {{option.itemDesc}}</span>
  908. </el-transfer>
  909. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  910. <el-button type="primary" @click="saveSeqNoGenerate">确定</el-button>
  911. <el-button type="primary" @click="seqNoGenerateDialog = false">关闭</el-button>
  912. </el-footer>
  913. </el-dialog>
  914. </div>
  915. </template>
  916. <style scoped>
  917. .el-table /deep/ .cell{
  918. height: auto;
  919. line-height: 1.5;
  920. }
  921. .el-input-number /deep/ .el-input__inner{
  922. text-align: right;
  923. padding-right: 15px !important;
  924. padding-left: 0px !important;
  925. }
  926. /deep/ .el-button{
  927. line-height: 13px;
  928. height: 21px;
  929. }
  930. .rq /deep/ .el-transfer-panel .el-transfer-panel__header {
  931. height: 35px;
  932. line-height: 35px;
  933. }
  934. .rq /deep/ .el-transfer-panel .el-transfer-panel__header .el-checkbox {
  935. line-height: 35px;
  936. }
  937. .rq /deep/ .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label {
  938. color: #fff
  939. }
  940. .rq /deep/ .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span {
  941. color: #3c3c3e;
  942. }
  943. .rq /deep/ .el-transfer-panel .el-checkbox__inner::after {
  944. height: 8px;
  945. width: 4px;
  946. }
  947. </style>