cnhis-design-vue 2.1.32 → 2.1.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -2
- package/es/affix/index.js +8 -8
- package/es/age/index.js +10 -10
- package/es/alert/index.js +8 -8
- package/es/anchor/index.js +8 -8
- package/es/auto-complete/index.js +8 -8
- package/es/avatar/index.js +8 -8
- package/es/back-top/index.js +8 -8
- package/es/badge/index.js +8 -8
- package/es/base/index.js +8 -8
- package/es/big-table/index.js +186 -111
- package/es/breadcrumb/index.js +8 -8
- package/es/button/index.js +22 -22
- package/es/calendar/index.js +8 -8
- package/es/captcha/index.js +3 -3
- package/es/card/index.js +8 -8
- package/es/carousel/index.js +8 -8
- package/es/cascader/index.js +8 -8
- package/es/checkbox/index.js +9 -9
- package/es/col/index.js +8 -8
- package/es/collapse/index.js +8 -8
- package/es/color-picker/index.js +1 -1
- package/es/comment/index.js +8 -8
- package/es/config-provider/index.js +8 -8
- package/es/date-picker/index.js +8 -8
- package/es/descriptions/index.js +8 -8
- package/es/divider/index.js +8 -8
- package/es/drag-layout/index.js +3 -3
- package/es/drawer/index.js +8 -8
- package/es/dropdown/index.js +8 -8
- package/es/editor/index.js +1 -1
- package/es/empty/index.js +8 -8
- package/es/fabric-chart/index.js +11 -11
- package/es/form/index.js +8 -8
- package/es/form-model/index.js +8 -8
- package/es/form-table/index.js +87 -85
- package/es/form-table/style.css +1 -1
- package/es/index/index.js +580 -499
- package/es/index/style.css +1 -1
- package/es/input/index.js +9 -9
- package/es/input-number/index.js +8 -8
- package/es/layout/index.js +8 -8
- package/es/list/index.js +8 -8
- package/es/locale-provider/index.js +8 -8
- package/es/map/index.js +9 -9
- package/es/mentions/index.js +8 -8
- package/es/menu/index.js +8 -8
- package/es/message/index.js +8 -8
- package/es/multi-chat/index.js +75 -75
- package/es/multi-chat-client/index.js +69 -69
- package/es/multi-chat-history/index.js +4 -4
- package/es/multi-chat-record/index.js +14 -14
- package/es/multi-chat-setting/index.js +22 -22
- package/es/multi-chat-sip/index.js +1 -1
- package/es/notification/index.js +8 -8
- package/es/page-header/index.js +8 -8
- package/es/pagination/index.js +8 -8
- package/es/popconfirm/index.js +8 -8
- package/es/popover/index.js +8 -8
- package/es/progress/index.js +8 -8
- package/es/radio/index.js +9 -9
- package/es/rate/index.js +8 -8
- package/es/result/index.js +8 -8
- package/es/row/index.js +8 -8
- package/es/scale-view/index.js +33 -33
- package/es/select/index.js +11 -11
- package/es/select-label/index.js +11 -11
- package/es/select-person/index.js +2 -2
- package/es/shortcut-setter/index.js +15 -15
- package/es/skeleton/index.js +8 -8
- package/es/slider/index.js +8 -8
- package/es/space/index.js +8 -8
- package/es/spin/index.js +8 -8
- package/es/statistic/index.js +8 -8
- package/es/steps/index.js +8 -8
- package/es/switch/index.js +8 -8
- package/es/table-filter/index.js +84 -80
- package/es/table-filter/style.css +1 -1
- package/es/tabs/index.js +8 -8
- package/es/tag/index.js +9 -9
- package/es/time-picker/index.js +8 -8
- package/es/timeline/index.js +8 -8
- package/es/tooltip/index.js +8 -8
- package/es/transfer/index.js +8 -8
- package/es/tree/index.js +8 -8
- package/es/tree-select/index.js +8 -8
- package/es/upload/index.js +8 -8
- package/es/verification-code/index.js +2 -2
- package/lib/cui.common.js +556 -474
- package/lib/cui.umd.js +556 -474
- package/lib/cui.umd.min.js +20 -20
- package/package.json +2 -2
- package/packages/big-table/src/utils/tableParse.js +70 -30
- package/packages/fabric-chart/src/const/defaultVaule.js +59 -59
- package/packages/fabric-chart/src/fabric-chart2/FabricTop.vue +172 -172
- package/packages/form-table/src/components/table-component/table-month-picker/table-month-picker.vue +3 -1
- package/packages/scale-view/scaleView.vue +2010 -2010
- package/packages/shortcut-setter/src/ShortcutSetterItem.vue +3 -2
- package/packages/table-filter/src/components/out-quick-search/out-quick-search.vue +5 -1
- package/packages/table-filter/src/quick-search/QuickSearch.vue +4 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cnhis-design-vue",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.34",
|
|
4
4
|
"description": "前端业务UI库",
|
|
5
5
|
"keyword": "cnhis-design-vue vue cnhis",
|
|
6
6
|
"homepage": "http://dv.cnhis.com/",
|
|
@@ -104,4 +104,4 @@
|
|
|
104
104
|
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
|
-
}
|
|
107
|
+
}
|
|
@@ -59,38 +59,25 @@ export function parseCombinationValue(value, setting) {
|
|
|
59
59
|
|
|
60
60
|
// 格式化renderItem
|
|
61
61
|
export function formatFieldText(row, field, fieldList, fieldListOriginal, isTimeAxisRenderNew, isTimeAxisExpand) {
|
|
62
|
-
// 轨迹组件需要重新处理 时间显示
|
|
63
|
-
if (isTimeAxisRenderNew && field.fieldType.includes('DATE')) {
|
|
64
|
-
let key = field.columnName;
|
|
65
|
-
if (!isTimeAxisExpand) {
|
|
66
|
-
key = field.columnName + '_fold';
|
|
67
|
-
}
|
|
68
|
-
let text = row[key];
|
|
69
|
-
return text;
|
|
70
|
-
}
|
|
71
|
-
const formatText = text => (text ? text : String(text) === '0' ? '0' : '');
|
|
72
|
-
const haveValue = val => {
|
|
73
|
-
return val !== undefined && val !== '';
|
|
74
|
-
};
|
|
75
62
|
const findField = (columnName, fieldList) => {
|
|
76
63
|
return fieldList.find(item => item.columnName === columnName);
|
|
77
64
|
};
|
|
78
|
-
let html = formatText(row[field.columnName]);
|
|
79
65
|
|
|
80
|
-
|
|
81
|
-
if (!haveValue(html)) {
|
|
82
|
-
return '';
|
|
83
|
-
}
|
|
66
|
+
const haveValue = val => val !== undefined && val !== '';
|
|
84
67
|
|
|
85
|
-
const
|
|
86
|
-
|
|
68
|
+
const formatText = text => (text ? text : String(text) === '0' ? '0' : '');
|
|
69
|
+
|
|
70
|
+
const parseMergedFeildExpression = function(mergedFeildExpression, config) {
|
|
71
|
+
const { row, fieldListOriginal, html } = config;
|
|
87
72
|
let passList = [];
|
|
88
73
|
|
|
89
74
|
// 合并字段
|
|
75
|
+
// 自定义合并规则,当主字段为空则不合并,任一拼接字段为空,则不合并所有拼接字段。
|
|
90
76
|
const regexp = /#{(.+?)\}/g;
|
|
91
77
|
let formatHtml = mergedFeildExpression.replace(regexp, (match, p1) => {
|
|
92
78
|
let findFieldItem = findField(p1, fieldListOriginal);
|
|
93
|
-
|
|
79
|
+
let hasVal = haveValue(row[p1]) && findFieldItem;
|
|
80
|
+
passList.push(hasVal);
|
|
94
81
|
// 格式化匹配到的合并字段对应的数据项
|
|
95
82
|
if (findFieldItem && this?.formatData) {
|
|
96
83
|
let cloneRow = JSON.parse(JSON.stringify(row));
|
|
@@ -106,13 +93,28 @@ export function formatFieldText(row, field, fieldList, fieldListOriginal, isTime
|
|
|
106
93
|
});
|
|
107
94
|
|
|
108
95
|
let pass = passList.every(b => b);
|
|
109
|
-
|
|
110
|
-
=> 只展示主字段的值 */
|
|
96
|
+
// 如果任意次字段值为空 || 无字段权限 => 只展示主字段的值
|
|
111
97
|
if (!pass) {
|
|
112
|
-
return html;
|
|
98
|
+
return { pass: false, formatHtml: html };
|
|
113
99
|
}
|
|
100
|
+
return { pass: true, formatHtml };
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
// 分隔合并规则,当主字段为空则不合并,某拼接字段为空则不合并该拼接字段,允许输入空格。
|
|
104
|
+
const parseMergedSeparator = function(html, config) {
|
|
105
|
+
let { field, row } = config;
|
|
106
|
+
let { mergedFeild, mergedSeparator } = field.settingObj;
|
|
107
|
+
mergedSeparator = mergedSeparator ?? '';
|
|
108
|
+
mergedFeild = mergedFeild.split(',');
|
|
109
|
+
if (!mergedFeild.length) return html;
|
|
110
|
+
mergedFeild.unshift(field.columnName);
|
|
111
|
+
let feildRes = mergedFeild.map(v => row[v]).filter(v => !!v || v === 0);
|
|
112
|
+
return feildRes.join(mergedSeparator);
|
|
113
|
+
};
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
// 赋值原字段样式
|
|
116
|
+
const getOriginStyle = (formatHtml, config) => {
|
|
117
|
+
let { field, row, fieldList } = config;
|
|
116
118
|
let originColumnNameColorList = findField(field.columnName, fieldList)?.colorAndIcon || [];
|
|
117
119
|
let findC = originColumnNameColorList.find(c =>
|
|
118
120
|
vexutils.parseCondition(
|
|
@@ -129,16 +131,54 @@ export function formatFieldText(row, field, fieldList, fieldListOriginal, isTime
|
|
|
129
131
|
);
|
|
130
132
|
|
|
131
133
|
let originColumnNameColor = findC?.color || 'inherit';
|
|
132
|
-
const regexp2 = /color(:|;)(.+?)(;|")/g;
|
|
133
|
-
formatHtml = formatHtml.replace(regexp2, (match, p1, p2, p3 = '') => {
|
|
134
|
-
|
|
135
|
-
});
|
|
134
|
+
// const regexp2 = /color(:|;)(.+?)(;|")/g;
|
|
135
|
+
// formatHtml = formatHtml.replace(regexp2, (match, p1, p2, p3 = '') => {
|
|
136
|
+
// return p3;
|
|
137
|
+
// });
|
|
136
138
|
|
|
137
139
|
formatHtml = `<span style="color: ${originColumnNameColor};">${formatHtml}</span>`;
|
|
138
140
|
return formatHtml;
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
// 轨迹组件需要重新处理 时间显示
|
|
144
|
+
if (isTimeAxisRenderNew && field.fieldType.includes('DATE')) {
|
|
145
|
+
let key = field.columnName;
|
|
146
|
+
if (!isTimeAxisExpand) {
|
|
147
|
+
key = field.columnName + '_fold';
|
|
148
|
+
}
|
|
149
|
+
let text = row[key];
|
|
150
|
+
return text;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
let html = formatText(row[field.columnName]);
|
|
154
|
+
|
|
155
|
+
// 主字段没有值,则不展示
|
|
156
|
+
if (!haveValue(html)) {
|
|
157
|
+
return '';
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// 合并策略
|
|
161
|
+
// mergedType 字符串 0-分隔符合并 1-自定义合并
|
|
162
|
+
// mergedSeparator 分隔合并规则,当主字段为空则不合并,某拼接字段为空则不合并该拼接字段,允许输入空格。
|
|
163
|
+
// mergedFeildExpression 自定义合并规则,当主字段为空则不合并,任一拼接字段为空,则不合并所有拼接字段。
|
|
164
|
+
const { mergedType, mergedSeparator, mergedFeild, mergedFeildExpression } = field.settingObj;
|
|
165
|
+
// 原来的规则只有mergedFeildExpression, mergedType/mergedSeparator是新加的
|
|
166
|
+
if (!mergedType && !mergedFeildExpression) return html;
|
|
167
|
+
if (mergedType === '1' && !mergedFeildExpression) return html;
|
|
168
|
+
if (mergedType === '0' && (!mergedFeild || !mergedSeparator)) return html;
|
|
169
|
+
let formatHtml = html;
|
|
170
|
+
if (mergedType === '0') {
|
|
171
|
+
formatHtml = parseMergedSeparator(html, { field, row });
|
|
172
|
+
} else if (mergedFeildExpression) {
|
|
173
|
+
let obj = parseMergedFeildExpression(mergedFeildExpression, { row, fieldListOriginal, html });
|
|
174
|
+
formatHtml = obj.formatHtml;
|
|
175
|
+
if (!obj.pass) return formatHtml;
|
|
176
|
+
}
|
|
177
|
+
if (mergedType || mergedFeildExpression) {
|
|
178
|
+
return getOriginStyle(formatHtml, { field, row, fieldList });
|
|
139
179
|
}
|
|
140
180
|
|
|
141
|
-
return
|
|
181
|
+
return formatHtml;
|
|
142
182
|
}
|
|
143
183
|
|
|
144
184
|
// imgs => imgArr
|
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
const data = {
|
|
2
|
-
style: {
|
|
3
|
-
evented: false,
|
|
4
|
-
selectable: false
|
|
5
|
-
},
|
|
6
|
-
rectStyle: {
|
|
7
|
-
fill: 'transparent',
|
|
8
|
-
stroke: '#999',
|
|
9
|
-
strokeWidth: 1
|
|
10
|
-
},
|
|
11
|
-
textStyle: {
|
|
12
|
-
fontFamily: '微软雅黑',
|
|
13
|
-
fontSize: 12,
|
|
14
|
-
fill: '#000',
|
|
15
|
-
lineHeight: 1
|
|
16
|
-
},
|
|
17
|
-
borderStyle: {
|
|
18
|
-
stroke: '#999',
|
|
19
|
-
strokeWidth: 1,
|
|
20
|
-
selectable: false,
|
|
21
|
-
evented: false
|
|
22
|
-
},
|
|
23
|
-
// 折线图中的点
|
|
24
|
-
pointStyle: {
|
|
25
|
-
fill: '#ffffff', // 填充色
|
|
26
|
-
stroke: '#000000', // 描边色
|
|
27
|
-
originX: 'center',
|
|
28
|
-
originY: 'center'
|
|
29
|
-
},
|
|
30
|
-
// 折线图中的线
|
|
31
|
-
lineStyle: {
|
|
32
|
-
stroke: '#000', // 描边色
|
|
33
|
-
strokeWidth: 1, // 描边宽度
|
|
34
|
-
originX: 'center',
|
|
35
|
-
originY: 'center'
|
|
36
|
-
},
|
|
37
|
-
topSpaceHeight: 10, // templateData.top.spaceHeight
|
|
38
|
-
topSpaceGridNumber: 3, // templateData.top.xScalevalue.spaceGridNumber
|
|
39
|
-
leftSpaceGridNumber: 2, // templateData.left.leftYScalevalue.spaceGridNumber
|
|
40
|
-
rightSpaceGridNumber: 2, // templateData.right.rightYScalevalue.spaceGridNumber
|
|
41
|
-
topTotal: {
|
|
42
|
-
title: '总量',
|
|
43
|
-
width: 0,
|
|
44
|
-
style: {
|
|
45
|
-
fontFamily: '微软雅黑',
|
|
46
|
-
fontSize: 12,
|
|
47
|
-
fill: '#000',
|
|
48
|
-
lineHeight: 1
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
criticalStyle: { // 危急值样式
|
|
52
|
-
stroke: 'purple', // 颜色 默认 #999
|
|
53
|
-
strokeWidth: 1, // 线宽 默认 1
|
|
54
|
-
strokeDashArray: [0, 0] // 实线设置 默认[0, 0]
|
|
55
|
-
},
|
|
56
|
-
bottomNumberLeftSpace: 10 // 底部标记的序号与标记之间的距离
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
export default data;
|
|
1
|
+
const data = {
|
|
2
|
+
style: {
|
|
3
|
+
evented: false,
|
|
4
|
+
selectable: false
|
|
5
|
+
},
|
|
6
|
+
rectStyle: {
|
|
7
|
+
fill: 'transparent',
|
|
8
|
+
stroke: '#999',
|
|
9
|
+
strokeWidth: 1
|
|
10
|
+
},
|
|
11
|
+
textStyle: {
|
|
12
|
+
fontFamily: '微软雅黑',
|
|
13
|
+
fontSize: 12,
|
|
14
|
+
fill: '#000',
|
|
15
|
+
lineHeight: 1
|
|
16
|
+
},
|
|
17
|
+
borderStyle: {
|
|
18
|
+
stroke: '#999',
|
|
19
|
+
strokeWidth: 1,
|
|
20
|
+
selectable: false,
|
|
21
|
+
evented: false
|
|
22
|
+
},
|
|
23
|
+
// 折线图中的点
|
|
24
|
+
pointStyle: {
|
|
25
|
+
fill: '#ffffff', // 填充色
|
|
26
|
+
stroke: '#000000', // 描边色
|
|
27
|
+
originX: 'center',
|
|
28
|
+
originY: 'center'
|
|
29
|
+
},
|
|
30
|
+
// 折线图中的线
|
|
31
|
+
lineStyle: {
|
|
32
|
+
stroke: '#000', // 描边色
|
|
33
|
+
strokeWidth: 1, // 描边宽度
|
|
34
|
+
originX: 'center',
|
|
35
|
+
originY: 'center'
|
|
36
|
+
},
|
|
37
|
+
topSpaceHeight: 10, // templateData.top.spaceHeight
|
|
38
|
+
topSpaceGridNumber: 3, // templateData.top.xScalevalue.spaceGridNumber
|
|
39
|
+
leftSpaceGridNumber: 2, // templateData.left.leftYScalevalue.spaceGridNumber
|
|
40
|
+
rightSpaceGridNumber: 2, // templateData.right.rightYScalevalue.spaceGridNumber
|
|
41
|
+
topTotal: {
|
|
42
|
+
title: '总量',
|
|
43
|
+
width: 0,
|
|
44
|
+
style: {
|
|
45
|
+
fontFamily: '微软雅黑',
|
|
46
|
+
fontSize: 12,
|
|
47
|
+
fill: '#000',
|
|
48
|
+
lineHeight: 1
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
criticalStyle: { // 危急值样式
|
|
52
|
+
stroke: 'purple', // 颜色 默认 #999
|
|
53
|
+
strokeWidth: 1, // 线宽 默认 1
|
|
54
|
+
strokeDashArray: [0, 0] // 实线设置 默认[0, 0]
|
|
55
|
+
},
|
|
56
|
+
bottomNumberLeftSpace: 10 // 底部标记的序号与标记之间的距离
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export default data;
|
|
@@ -1,172 +1,172 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import fabricCommon from '../mixins/fabricCommon';
|
|
3
|
-
import draw from '../mixins/draw';
|
|
4
|
-
import defaultVaule from '../const/defaultVaule';
|
|
5
|
-
|
|
6
|
-
export default {
|
|
7
|
-
name: 'fabric-top2',
|
|
8
|
-
mixins: [fabricCommon, draw],
|
|
9
|
-
props: {
|
|
10
|
-
templateData: {
|
|
11
|
-
type: Object,
|
|
12
|
-
required: true
|
|
13
|
-
}
|
|
14
|
-
},
|
|
15
|
-
data() {
|
|
16
|
-
return {};
|
|
17
|
-
},
|
|
18
|
-
mounted() {
|
|
19
|
-
this.$nextTick(() => {
|
|
20
|
-
this.init();
|
|
21
|
-
});
|
|
22
|
-
},
|
|
23
|
-
computed: {
|
|
24
|
-
girdLineStyle() {
|
|
25
|
-
return Object.assign({}, defaultVaule.borderStyle, this.templateData.borderStyle || {});
|
|
26
|
-
}
|
|
27
|
-
},
|
|
28
|
-
methods: {
|
|
29
|
-
init() {
|
|
30
|
-
this.drawTop(this.templateData.top);
|
|
31
|
-
this.canvas.renderAll();
|
|
32
|
-
},
|
|
33
|
-
drawTop(top) {
|
|
34
|
-
let list = [];
|
|
35
|
-
// 日期
|
|
36
|
-
this.drawTopDate(top, list);
|
|
37
|
-
// 上午/下午
|
|
38
|
-
this.drawTopDay(top, list);
|
|
39
|
-
// 时间刻度
|
|
40
|
-
this.drawTopTime(top, list);
|
|
41
|
-
const group = list.length > 0 ? new this.fabric.Group([...list], { ...defaultVaule.style }) : null;
|
|
42
|
-
group && group.sendToBack(); // 向下跳底层
|
|
43
|
-
group && this.canvas.add(group);
|
|
44
|
-
},
|
|
45
|
-
drawTopTime(top, list) {
|
|
46
|
-
const { originX, originY, xCellWidth, table } = this.propItems;
|
|
47
|
-
const dateHeight = top.date?.height || 0;
|
|
48
|
-
const dayHeight = top.dayHeight || 0;
|
|
49
|
-
const height = originY - dateHeight - dayHeight;
|
|
50
|
-
const titleHeight = dayHeight + height;
|
|
51
|
-
// 标题
|
|
52
|
-
const title = this.drawTextGroup(
|
|
53
|
-
{
|
|
54
|
-
width: originX,
|
|
55
|
-
height: titleHeight,
|
|
56
|
-
...defaultVaule.rectStyle
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
text: String(top.xScalevalue.title),
|
|
60
|
-
...defaultVaule.textStyle,
|
|
61
|
-
...top.textGroupStyle
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
left: 0,
|
|
65
|
-
top: dateHeight
|
|
66
|
-
}
|
|
67
|
-
);
|
|
68
|
-
list.push(title);
|
|
69
|
-
|
|
70
|
-
// 时间列表
|
|
71
|
-
let timeList = [];
|
|
72
|
-
for (let j = 0; j < table.mainXCell; j++) {
|
|
73
|
-
timeList.push(top.xScalevalue.list);
|
|
74
|
-
}
|
|
75
|
-
timeList.flat().forEach((v, i) => {
|
|
76
|
-
const left = originX + i * xCellWidth;
|
|
77
|
-
const textGroup = this.drawTextGroup(
|
|
78
|
-
{
|
|
79
|
-
width: xCellWidth,
|
|
80
|
-
height
|
|
81
|
-
},
|
|
82
|
-
{
|
|
83
|
-
text: String(v),
|
|
84
|
-
...defaultVaule.textStyle,
|
|
85
|
-
...top.textGroupStyle
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
left,
|
|
89
|
-
top: dateHeight + dayHeight
|
|
90
|
-
}
|
|
91
|
-
);
|
|
92
|
-
list.push(textGroup);
|
|
93
|
-
});
|
|
94
|
-
},
|
|
95
|
-
drawTopDay(top, list) {
|
|
96
|
-
if (!top.dayHeight) return false;
|
|
97
|
-
const { originX, xCellWidth, gridXNumber, table } = this.propItems;
|
|
98
|
-
const height = top.dayHeight;
|
|
99
|
-
// 上午下午列表
|
|
100
|
-
const width = xCellWidth * table.subSecondXCell;
|
|
101
|
-
const dayList = gridXNumber / table.subSecondXCell;
|
|
102
|
-
for (let i = 0; i < dayList; i++) {
|
|
103
|
-
const left = originX + i * width;
|
|
104
|
-
const value = i % 2 === 0 ? '上午' : '下午';
|
|
105
|
-
const textGroup = this.drawTextGroup(
|
|
106
|
-
{
|
|
107
|
-
width,
|
|
108
|
-
height
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
text: String(value),
|
|
112
|
-
...defaultVaule.textStyle,
|
|
113
|
-
...top.textGroupStyle
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
left,
|
|
117
|
-
top: top.date.height || 0
|
|
118
|
-
}
|
|
119
|
-
);
|
|
120
|
-
list.push(textGroup);
|
|
121
|
-
}
|
|
122
|
-
},
|
|
123
|
-
drawTopDate(top, list) {
|
|
124
|
-
if (!top.date.height) return false;
|
|
125
|
-
const { originX, xCellWidth, table } = this.propItems;
|
|
126
|
-
const height = top.date.height;
|
|
127
|
-
// 标题
|
|
128
|
-
const title = this.drawTextGroup(
|
|
129
|
-
{
|
|
130
|
-
width: originX,
|
|
131
|
-
height,
|
|
132
|
-
...defaultVaule.rectStyle
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
text: String(top.date.title),
|
|
136
|
-
...defaultVaule.textStyle,
|
|
137
|
-
...top.textGroupStyle
|
|
138
|
-
},
|
|
139
|
-
{
|
|
140
|
-
left: 0,
|
|
141
|
-
top: 0
|
|
142
|
-
}
|
|
143
|
-
);
|
|
144
|
-
list.push(title);
|
|
145
|
-
// 日期列表
|
|
146
|
-
const width = xCellWidth * table.subXCell;
|
|
147
|
-
top.date.list.forEach((v, i) => {
|
|
148
|
-
const left = originX + i * width;
|
|
149
|
-
const textGroup = this.drawTextGroup(
|
|
150
|
-
{
|
|
151
|
-
width,
|
|
152
|
-
height
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
text: String(v),
|
|
156
|
-
...defaultVaule.textStyle,
|
|
157
|
-
...top.textGroupStyle
|
|
158
|
-
},
|
|
159
|
-
{
|
|
160
|
-
left,
|
|
161
|
-
top: 0
|
|
162
|
-
}
|
|
163
|
-
);
|
|
164
|
-
list.push(textGroup);
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
},
|
|
168
|
-
render(h) {
|
|
169
|
-
return this.$slots.default ? h('div', this.$slots.default) : undefined;
|
|
170
|
-
}
|
|
171
|
-
};
|
|
172
|
-
</script>
|
|
1
|
+
<script>
|
|
2
|
+
import fabricCommon from '../mixins/fabricCommon';
|
|
3
|
+
import draw from '../mixins/draw';
|
|
4
|
+
import defaultVaule from '../const/defaultVaule';
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
name: 'fabric-top2',
|
|
8
|
+
mixins: [fabricCommon, draw],
|
|
9
|
+
props: {
|
|
10
|
+
templateData: {
|
|
11
|
+
type: Object,
|
|
12
|
+
required: true
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
data() {
|
|
16
|
+
return {};
|
|
17
|
+
},
|
|
18
|
+
mounted() {
|
|
19
|
+
this.$nextTick(() => {
|
|
20
|
+
this.init();
|
|
21
|
+
});
|
|
22
|
+
},
|
|
23
|
+
computed: {
|
|
24
|
+
girdLineStyle() {
|
|
25
|
+
return Object.assign({}, defaultVaule.borderStyle, this.templateData.borderStyle || {});
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
methods: {
|
|
29
|
+
init() {
|
|
30
|
+
this.drawTop(this.templateData.top);
|
|
31
|
+
this.canvas.renderAll();
|
|
32
|
+
},
|
|
33
|
+
drawTop(top) {
|
|
34
|
+
let list = [];
|
|
35
|
+
// 日期
|
|
36
|
+
this.drawTopDate(top, list);
|
|
37
|
+
// 上午/下午
|
|
38
|
+
this.drawTopDay(top, list);
|
|
39
|
+
// 时间刻度
|
|
40
|
+
this.drawTopTime(top, list);
|
|
41
|
+
const group = list.length > 0 ? new this.fabric.Group([...list], { ...defaultVaule.style }) : null;
|
|
42
|
+
group && group.sendToBack(); // 向下跳底层
|
|
43
|
+
group && this.canvas.add(group);
|
|
44
|
+
},
|
|
45
|
+
drawTopTime(top, list) {
|
|
46
|
+
const { originX, originY, xCellWidth, table } = this.propItems;
|
|
47
|
+
const dateHeight = top.date?.height || 0;
|
|
48
|
+
const dayHeight = top.dayHeight || 0;
|
|
49
|
+
const height = originY - dateHeight - dayHeight;
|
|
50
|
+
const titleHeight = dayHeight + height;
|
|
51
|
+
// 标题
|
|
52
|
+
const title = this.drawTextGroup(
|
|
53
|
+
{
|
|
54
|
+
width: originX,
|
|
55
|
+
height: titleHeight,
|
|
56
|
+
...defaultVaule.rectStyle
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
text: String(top.xScalevalue.title),
|
|
60
|
+
...defaultVaule.textStyle,
|
|
61
|
+
...top.textGroupStyle
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
left: 0,
|
|
65
|
+
top: dateHeight
|
|
66
|
+
}
|
|
67
|
+
);
|
|
68
|
+
list.push(title);
|
|
69
|
+
|
|
70
|
+
// 时间列表
|
|
71
|
+
let timeList = [];
|
|
72
|
+
for (let j = 0; j < table.mainXCell; j++) {
|
|
73
|
+
timeList.push(top.xScalevalue.list);
|
|
74
|
+
}
|
|
75
|
+
timeList.flat().forEach((v, i) => {
|
|
76
|
+
const left = originX + i * xCellWidth;
|
|
77
|
+
const textGroup = this.drawTextGroup(
|
|
78
|
+
{
|
|
79
|
+
width: xCellWidth,
|
|
80
|
+
height
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
text: String(v),
|
|
84
|
+
...defaultVaule.textStyle,
|
|
85
|
+
...top.textGroupStyle
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
left,
|
|
89
|
+
top: dateHeight + dayHeight
|
|
90
|
+
}
|
|
91
|
+
);
|
|
92
|
+
list.push(textGroup);
|
|
93
|
+
});
|
|
94
|
+
},
|
|
95
|
+
drawTopDay(top, list) {
|
|
96
|
+
if (!top.dayHeight) return false;
|
|
97
|
+
const { originX, xCellWidth, gridXNumber, table } = this.propItems;
|
|
98
|
+
const height = top.dayHeight;
|
|
99
|
+
// 上午下午列表
|
|
100
|
+
const width = xCellWidth * table.subSecondXCell;
|
|
101
|
+
const dayList = gridXNumber / table.subSecondXCell;
|
|
102
|
+
for (let i = 0; i < dayList; i++) {
|
|
103
|
+
const left = originX + i * width;
|
|
104
|
+
const value = i % 2 === 0 ? '上午' : '下午';
|
|
105
|
+
const textGroup = this.drawTextGroup(
|
|
106
|
+
{
|
|
107
|
+
width,
|
|
108
|
+
height
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
text: String(value),
|
|
112
|
+
...defaultVaule.textStyle,
|
|
113
|
+
...top.textGroupStyle
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
left,
|
|
117
|
+
top: top.date.height || 0
|
|
118
|
+
}
|
|
119
|
+
);
|
|
120
|
+
list.push(textGroup);
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
drawTopDate(top, list) {
|
|
124
|
+
if (!top.date.height) return false;
|
|
125
|
+
const { originX, xCellWidth, table } = this.propItems;
|
|
126
|
+
const height = top.date.height;
|
|
127
|
+
// 标题
|
|
128
|
+
const title = this.drawTextGroup(
|
|
129
|
+
{
|
|
130
|
+
width: originX,
|
|
131
|
+
height,
|
|
132
|
+
...defaultVaule.rectStyle
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
text: String(top.date.title),
|
|
136
|
+
...defaultVaule.textStyle,
|
|
137
|
+
...top.textGroupStyle
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
left: 0,
|
|
141
|
+
top: 0
|
|
142
|
+
}
|
|
143
|
+
);
|
|
144
|
+
list.push(title);
|
|
145
|
+
// 日期列表
|
|
146
|
+
const width = xCellWidth * table.subXCell;
|
|
147
|
+
top.date.list.forEach((v, i) => {
|
|
148
|
+
const left = originX + i * width;
|
|
149
|
+
const textGroup = this.drawTextGroup(
|
|
150
|
+
{
|
|
151
|
+
width,
|
|
152
|
+
height
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
text: String(v),
|
|
156
|
+
...defaultVaule.textStyle,
|
|
157
|
+
...top.textGroupStyle
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
left,
|
|
161
|
+
top: 0
|
|
162
|
+
}
|
|
163
|
+
);
|
|
164
|
+
list.push(textGroup);
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
render(h) {
|
|
169
|
+
return this.$slots.default ? h('div', this.$slots.default) : undefined;
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
</script>
|