diff --git a/src/utils/mergeTableRow.js b/src/utils/mergeTableRow.js new file mode 100644 index 0000000..34a99c1 --- /dev/null +++ b/src/utils/mergeTableRow.js @@ -0,0 +1,62 @@ +/**在工具类util.js中定义通用方法 + * table合并行通用 */ +// eslint-disable-next-line space-before-function-paren +export function mergeTableRow (config) { + let data = config.data; + const { + mergeColNames, // 需要合并的列 + firstMergeColNames, // 受影响的列 + firstMerge // 以哪列为基础进行合并(基准列) + } = config + if (!mergeColNames || mergeColNames.length === 0) { + return data + } + mergeColNames.forEach((m) => { + const mList = {} + data = data.map((v, index) => { + // 区分需要合并行的key值 + const rowVal = v[firstMerge] + '-' + v[m] + // 需要合并行的第二行以及之后行会走if + // m === firstMerge 判断需要合并的列是否是基准列,如果是则只满足前面的条件,如果不是则需满足前面+后面的条件 + if (mList[rowVal] && mList[rowVal].newIndex === index && (m === firstMerge ? true : data[index][firstMerge + '-span'].rowspan === 0)) { + // 判断受影响的列是否是需要合并的列 + const flag = firstMergeColNames.filter((f) => { + return f === m + }).length !== 0 + // 判断需要合并的列是否是基准列 + const mcFlag = mergeColNames.filter((mc) => { + return mc === firstMerge + }).length === 0 + // 判断基准列只有一行的时候,直接赋值rowspan和colspan为1 + if ((mcFlag && flag) || (flag && data[index][firstMerge + '-span'] && data[index][firstMerge + '-span'].rowspan === 1)) { + v[m + '-span'] = { + rowspan: 1, + colspan: 1 + } + } else { + // 判断基准列或其他需要合并列有多行时,第一行rowspan++ + data[mList[rowVal]['index']][m + '-span'].rowspan++ + // 需要合并行除了第一行之后其他行设置rowspan和colspan为0 + v[m + '-span'] = { + rowspan: 0, + colspan: 0 + } + mList[rowVal]['num']++ + mList[rowVal]['newIndex']++ + } + } else { // 需要合并列第一行走else + mList[rowVal] = { + num: 1, + index: index, + newIndex: index + 1 + } + v[m + '-span'] = { + rowspan: 1, + colspan: 1 + } + } + return v + }) + }) + return data +} diff --git a/src/views/order/component/normalCreate.vue b/src/views/order/component/normalCreate.vue index cf186ca..6736a18 100644 --- a/src/views/order/component/normalCreate.vue +++ b/src/views/order/component/normalCreate.vue @@ -21,26 +21,108 @@
- + + + + +
+ + +

完成

+ + +
@@ -55,4 +137,24 @@ export default { margin: 0 auto; } + +.complete { + display: flex; + flex-direction: column; + align-items: center; + + padding-bottom: 20px; + &__icon { + color: green; + font-size: 66px; + } + + & > p { + font-weight: 600; + color: #333; + font-size: 20px; + + padding: 20px 0; + } +} diff --git a/src/views/order/component/step1.vue b/src/views/order/component/step1.vue index 81a93e9..7684a8e 100644 --- a/src/views/order/component/step1.vue +++ b/src/views/order/component/step1.vue @@ -22,9 +22,15 @@ - + + + - +
+ +
@@ -32,19 +38,30 @@ import { show } from "@/api/system/customFormField"; export default { inject: ['equipments'], + props: { + originalData: Array + }, data() { return { areas: [], types: [], select: { - area: '', - type: '' + area: [], + type: [] }, pickedEquipments: [], } }, methods: { + nextStep () { + this.$emit('next',{ + data: this.pickedEquipments, + step: 1 + }) + }, + + async getArea () { const obj = (await show({ id: 4 },false))?.select_item; if (obj && typeof obj === 'object') { @@ -79,7 +96,43 @@ export default { } }, }, - computed: {}, + computed: { + area () { + return function (id) { + return this.areas.find(i => i.value === id)?.key + } + }, + + type () { + return function (id) { + return this.types.find(i => i.value === id)?.key + } + }, + + equipmentList () { + if (this.select.area.length > 0 || this.select.type.length > 0) { + let list1 = []; + let list2 = []; + if (this.select.area.length > 0) { + list1 = this.equipments().filter(i => this.select.area.find(j => j === i.id)) + } + if (this.select.type.length > 0) { + list2 = this.equipments().filter(i => this.select.type.find(j => j === i.id)) + } + return Array.from(new Set([...list1,...list2].map(JSON.stringify))).map(JSON.parse); + } else { + return this.equipments(); + } + } + }, + watch: { + originalData: { + handler: function (val) { + this.pickedEquipments = Array.from(new Set(val.map(i => i.equipment_id))) + }, + immediate: true + } + }, created() { this.getArea(); this.getType(); @@ -88,4 +141,26 @@ export default { diff --git a/src/views/order/component/step2.vue b/src/views/order/component/step2.vue new file mode 100644 index 0000000..71ad222 --- /dev/null +++ b/src/views/order/component/step2.vue @@ -0,0 +1,295 @@ + + + + + diff --git a/src/views/order/component/step3.vue b/src/views/order/component/step3.vue new file mode 100644 index 0000000..f75f33e --- /dev/null +++ b/src/views/order/component/step3.vue @@ -0,0 +1,133 @@ + + + + +