|
@@ -1,21 +1,25 @@
|
|
|
<!-- eslint-disable vue/no-v-html -->
|
|
<!-- eslint-disable vue/no-v-html -->
|
|
|
<template>
|
|
<template>
|
|
|
- <div class="matching-preview">
|
|
|
|
|
- <ul ref="list" class="option-list">
|
|
|
|
|
- <li v-for="(item, i) in data.option_list" :key="i" class="list-item">
|
|
|
|
|
- <div
|
|
|
|
|
- v-for="({ content, mark }, j) in item"
|
|
|
|
|
- :key="mark"
|
|
|
|
|
- :class="['item-wrapper', `item-${mark}`]"
|
|
|
|
|
- :style="{ cursor: disabled ? 'default' : 'pointer' }"
|
|
|
|
|
- @mousedown="mousedown($event, i, j, mark)"
|
|
|
|
|
- @mouseup="mouseup($event, i, j, mark)"
|
|
|
|
|
- @click="handleClickConnection($event, i, j, mark)"
|
|
|
|
|
- >
|
|
|
|
|
- <span class="content rich-text" v-html="sanitizeHTML(content)"></span>
|
|
|
|
|
- </div>
|
|
|
|
|
- </li>
|
|
|
|
|
- </ul>
|
|
|
|
|
|
|
+ <div class="matching-preview" :style="getAreaStyle()">
|
|
|
|
|
+ <SerialNumberPosition :property="data.property" />
|
|
|
|
|
+
|
|
|
|
|
+ <div class="main">
|
|
|
|
|
+ <ul ref="list" class="option-list">
|
|
|
|
|
+ <li v-for="(item, i) in data.option_list" :key="i" class="list-item">
|
|
|
|
|
+ <div
|
|
|
|
|
+ v-for="({ content, mark }, j) in item"
|
|
|
|
|
+ :key="mark"
|
|
|
|
|
+ :class="['item-wrapper', `item-${mark}`]"
|
|
|
|
|
+ :style="{ cursor: disabled ? 'default' : 'pointer' }"
|
|
|
|
|
+ @mousedown="mousedown($event, i, j, mark)"
|
|
|
|
|
+ @mouseup="mouseup($event, i, j, mark)"
|
|
|
|
|
+ @click="handleClickConnection($event, i, j, mark)"
|
|
|
|
|
+ >
|
|
|
|
|
+ <span class="content rich-text" v-html="sanitizeHTML(content)"></span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </li>
|
|
|
|
|
+ </ul>
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
@@ -204,15 +208,24 @@ export default {
|
|
|
*/
|
|
*/
|
|
|
createLine(mark, isDrag = false) {
|
|
createLine(mark, isDrag = false) {
|
|
|
let { offsetWidth, offsetLeft, offsetTop, offsetHeight } = document.getElementsByClassName(`item-${mark}`)[0];
|
|
let { offsetWidth, offsetLeft, offsetTop, offsetHeight } = document.getElementsByClassName(`item-${mark}`)[0];
|
|
|
- const { curOffsetWidth, curOffsetLeft, curOffsetTop, curMark } = this.computedCurConnectionPoint(isDrag);
|
|
|
|
|
- let top = Math.min(offsetTop + offsetHeight / 2, curOffsetTop + offsetHeight / 2);
|
|
|
|
|
|
|
+ const { curOffsetWidth, curOffsetLeft, curOffsetTop, curOffsetHeight, curMark } =
|
|
|
|
|
+ this.computedCurConnectionPoint(isDrag);
|
|
|
|
|
+ let top = Math.min(offsetTop + offsetHeight / 2, curOffsetTop + curOffsetHeight / 2);
|
|
|
|
|
+ // 判断是否是同一行
|
|
|
|
|
+ const isSameRow = Math.abs(offsetTop + offsetHeight / 2 - (curOffsetTop + curOffsetHeight / 2)) <= 2;
|
|
|
let left = Math.min(offsetLeft + offsetWidth, curOffsetLeft + curOffsetWidth);
|
|
let left = Math.min(offsetLeft + offsetWidth, curOffsetLeft + curOffsetWidth);
|
|
|
let width = Math.abs(
|
|
let width = Math.abs(
|
|
|
offsetLeft > curOffsetLeft
|
|
offsetLeft > curOffsetLeft
|
|
|
? curOffsetLeft - offsetLeft + offsetWidth
|
|
? curOffsetLeft - offsetLeft + offsetWidth
|
|
|
: offsetLeft - curOffsetLeft + curOffsetWidth,
|
|
: offsetLeft - curOffsetLeft + curOffsetWidth,
|
|
|
);
|
|
);
|
|
|
- let height = Math.abs(offsetTop - curOffsetTop);
|
|
|
|
|
|
|
+ let height = 0;
|
|
|
|
|
+ if (!isSameRow) {
|
|
|
|
|
+ height =
|
|
|
|
|
+ curOffsetTop > offsetTop
|
|
|
|
|
+ ? Math.abs(offsetTop + offsetHeight / 2 - (curOffsetTop + curOffsetHeight / 2))
|
|
|
|
|
+ : Math.abs(offsetTop - curOffsetTop + offsetHeight / 2 - curOffsetHeight / 2);
|
|
|
|
|
+ }
|
|
|
let size = offsetLeft > curOffsetLeft ? offsetTop > curOffsetTop : offsetTop < curOffsetTop; // 判断是左上还是右下
|
|
let size = offsetLeft > curOffsetLeft ? offsetTop > curOffsetTop : offsetTop < curOffsetTop; // 判断是左上还是右下
|
|
|
// 创建一个空的SVG元素
|
|
// 创建一个空的SVG元素
|
|
|
let svg = document.createElementNS(svgNS, 'svg');
|
|
let svg = document.createElementNS(svgNS, 'svg');
|
|
@@ -249,7 +262,7 @@ export default {
|
|
|
curOffsetWidth: dom.offsetWidth,
|
|
curOffsetWidth: dom.offsetWidth,
|
|
|
curOffsetLeft: dom.offsetLeft,
|
|
curOffsetLeft: dom.offsetLeft,
|
|
|
curOffsetTop: dom.offsetTop,
|
|
curOffsetTop: dom.offsetTop,
|
|
|
- curOffsetHeight: dom.offsetHeight / 2,
|
|
|
|
|
|
|
+ curOffsetHeight: dom.offsetHeight,
|
|
|
curMark: mark,
|
|
curMark: mark,
|
|
|
};
|
|
};
|
|
|
},
|
|
},
|