|
@@ -18,7 +18,7 @@
|
|
|
<span class="drag-line" data-row="-1"></span>
|
|
|
<!-- 行 -->
|
|
|
<template v-for="(row, i) in data.row_list">
|
|
|
- <div :key="i" class="row" :style="getMultipleColStyle(i)">
|
|
|
+ <div :key="i" class="row" :style="computedRowStyle(i)">
|
|
|
<!-- 列 -->
|
|
|
<template v-for="(col, j) in row.col_list">
|
|
|
<span
|
|
@@ -42,6 +42,16 @@
|
|
|
data-type="row"
|
|
|
></span>
|
|
|
<span
|
|
|
+ v-if="grid.row > 1 && grid.row !== col.grid_list[k - 1].row"
|
|
|
+ :key="`middle-${i}-${j}-${k}`"
|
|
|
+ :style="{ gridArea: `middle-${grid.grid_area}` }"
|
|
|
+ :data-row="i"
|
|
|
+ :data-col="j"
|
|
|
+ :data-grid="k"
|
|
|
+ data-type="col-middle"
|
|
|
+ class="drag-line grid-line"
|
|
|
+ ></span>
|
|
|
+ <span
|
|
|
:key="`left-${i}-${j}-${k}`"
|
|
|
:style="{ gridArea: `left-${grid.grid_area}` }"
|
|
|
:data-row="i"
|
|
@@ -481,7 +491,7 @@ export default {
|
|
|
grid.forEach(({ row }) => {
|
|
|
rowList.set(row, (rowList.get(row) || 0) + 1);
|
|
|
});
|
|
|
- let curMaxRow = 0; // 当前数量最大 row 的值
|
|
|
+ let curMaxRow = 0; // 当前列数最多的 row 的值
|
|
|
rowList.forEach((value, key) => {
|
|
|
if (value > maxCol) {
|
|
|
maxCol = value;
|
|
@@ -491,10 +501,21 @@ export default {
|
|
|
// 计算 grid_template_areas
|
|
|
let gridStr = '';
|
|
|
let gridArr = [];
|
|
|
- grid.forEach(({ grid_area, row }) => {
|
|
|
+ let gridRowArr = []; // 存储不同 row 中间的 line
|
|
|
+ grid.forEach(({ grid_area, row }, i) => {
|
|
|
+ // 如果 gridArr[row - 1] 不存在则创建
|
|
|
if (!gridArr[row - 1]) {
|
|
|
gridArr[row - 1] = [];
|
|
|
}
|
|
|
+
|
|
|
+ if (row > 1 && grid[i - 1].row !== row) {
|
|
|
+ gridRowArr.push({
|
|
|
+ row: row - 1,
|
|
|
+ str: `middle-${grid_area} `.repeat(maxCol * 3),
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果当前 row 是最大列数的 row
|
|
|
if (curMaxRow === row) {
|
|
|
gridArr[row - 1].push(`left-${grid_area} ${grid_area} right-${grid_area}`);
|
|
|
} else {
|
|
@@ -512,10 +533,13 @@ export default {
|
|
|
gridArr[row - 1].push(`left-${grid_area} ${str} right-${grid_area}`);
|
|
|
}
|
|
|
});
|
|
|
- gridArr.forEach((item) => {
|
|
|
+ gridArr.forEach((item, i) => {
|
|
|
+ let find = gridRowArr.find((row) => row.row === i);
|
|
|
+ if (find) {
|
|
|
+ gridStr += `'${find.str}' `;
|
|
|
+ }
|
|
|
gridStr += `'${item.join(' ')}' `;
|
|
|
});
|
|
|
-
|
|
|
// 计算 grid_template_columns
|
|
|
let gridTemCols = '';
|
|
|
let max = { row: 0, num: 0 };
|
|
@@ -543,7 +567,10 @@ export default {
|
|
|
}
|
|
|
gridMap.get(item.row).push(item.height);
|
|
|
});
|
|
|
- gridMap.forEach((value) => {
|
|
|
+ gridMap.forEach((value, i) => {
|
|
|
+ if (i > 1) {
|
|
|
+ gridTemplateRows += '4px ';
|
|
|
+ }
|
|
|
if (value.length === 1) {
|
|
|
gridTemplateRows += `${value[0]} `;
|
|
|
} else {
|
|
@@ -676,7 +703,7 @@ export default {
|
|
|
}
|
|
|
this.enterCanvas = false;
|
|
|
},
|
|
|
- getMultipleColStyle(i) {
|
|
|
+ computedRowStyle(i) {
|
|
|
let row = this.data.row_list[i];
|
|
|
let col = row.col_list;
|
|
|
if (col.length <= 1) {
|
|
@@ -709,7 +736,7 @@ export default {
|
|
|
let grid = col.grid_list;
|
|
|
let type = this.gridInsertType;
|
|
|
|
|
|
- if (type === 'row') {
|
|
|
+ if (['row', 'col-middle'].includes(type)) {
|
|
|
let rowNum = this.curGrid === 0 ? 1 : grid[this.curGrid - 1].row + 1;
|
|
|
grid.splice(this.curGrid, 0, {
|
|
|
id,
|
|
@@ -906,6 +933,10 @@ export default {
|
|
|
position: relative;
|
|
|
top: 6px;
|
|
|
}
|
|
|
+
|
|
|
+ &.grid-line {
|
|
|
+ background-color: #f43;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
.drag-vertical-line {
|