lw-cdp-ui 1.4.64 → 1.4.66
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/dist/components/lwCronSelect/cron.js +191 -191
- package/dist/components/lwFormJson/JsonItem.vue +91 -78
- package/dist/components/lwFormMini/FormItem.vue +9 -0
- package/dist/components/lwFormMini/index.vue +4 -2
- package/dist/components/lwTable/index.vue +1 -1
- package/dist/lw-cdp-ui.esm.js +2688 -2675
- package/dist/lw-cdp-ui.umd.js +10 -10
- package/dist/style.css +1 -1
- package/package.json +1 -1
- /package/dist/components/lwTable/locale/{en-US.js → en-us.js} +0 -0
- /package/dist/components/lwTable/locale/{zh-CN.js → zh-cn.js} +0 -0
|
@@ -1,191 +1,191 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 完整解析Cron表达式为中文描述
|
|
3
|
-
* @param {string} cronExpression - 标准Cron表达式
|
|
4
|
-
* @returns {string} 中文描述
|
|
5
|
-
*/
|
|
6
|
-
function parseCronExpression(cronExpression) {
|
|
7
|
-
// 标准化表达式,处理可能的多空格
|
|
8
|
-
const normalized = cronExpression.trim().replace(/\s+/g, ' ')
|
|
9
|
-
const parts = normalized.split(' ')
|
|
10
|
-
|
|
11
|
-
if (parts.length < 5 || parts.length > 7) {
|
|
12
|
-
return '无效的Cron表达式'
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
// 补全年份部分(可选)
|
|
16
|
-
const [second, minute, hour, dayOfMonth, month, dayOfWeek, year] = parts.length === 5 ? ['0', ...parts, '*'] : parts
|
|
17
|
-
|
|
18
|
-
// 解析各个字段
|
|
19
|
-
const timeDesc = parseTime(second, minute, hour)
|
|
20
|
-
const dateDesc = parseDate(dayOfMonth, month, dayOfWeek)
|
|
21
|
-
const yearDesc = parseYear(year)
|
|
22
|
-
|
|
23
|
-
// 组合结果
|
|
24
|
-
let result = ''
|
|
25
|
-
if (dateDesc) result += dateDesc
|
|
26
|
-
if (timeDesc) result += timeDesc
|
|
27
|
-
if (yearDesc) result += yearDesc
|
|
28
|
-
|
|
29
|
-
// 特殊处理常见表达式
|
|
30
|
-
const commonPatterns = {
|
|
31
|
-
'0 0 0 * * *': '每天午夜12点整执行',
|
|
32
|
-
'0 0 12 * * *': '每天中午12点整执行',
|
|
33
|
-
'0 0 8-18 * * 1-5': '工作日每天上午8点到下午6点每小时执行',
|
|
34
|
-
'0 0 9 * * 1': '每周一上午9点整执行',
|
|
35
|
-
'0 0 12 1 * *': '每月1日中午12点整执行',
|
|
36
|
-
'0 0 0 1 1 *': '每年1月1日午夜12点整执行'
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
return commonPatterns[normalized] || result || '无法解析的Cron表达式'
|
|
40
|
-
|
|
41
|
-
// 解析时间部分
|
|
42
|
-
function parseTime(sec, min, hr) {
|
|
43
|
-
const secondDesc = parseField(sec, {
|
|
44
|
-
'*': '每秒',
|
|
45
|
-
0: '',
|
|
46
|
-
default: (val) => `每${val}秒`
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
const minuteDesc = parseField(min, {
|
|
50
|
-
'*': '每分钟',
|
|
51
|
-
0: '整',
|
|
52
|
-
default: (val) => `每${val}分`
|
|
53
|
-
})
|
|
54
|
-
|
|
55
|
-
const hourDesc = parseField(hr, {
|
|
56
|
-
'*': '每小时',
|
|
57
|
-
default: (val) => {
|
|
58
|
-
const num = parseInt(val, 10)
|
|
59
|
-
const period = num < 12 ? '上午' : '下午'
|
|
60
|
-
const displayHour = num % 12 === 0 ? 12 : num % 12
|
|
61
|
-
return `${period}${displayHour}点`
|
|
62
|
-
}
|
|
63
|
-
})
|
|
64
|
-
|
|
65
|
-
// 处理范围
|
|
66
|
-
if (hr.includes('-')) {
|
|
67
|
-
const [start, end] = hr.split('-').map(Number)
|
|
68
|
-
return `从${start}点到${end}点每小时执行`
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// 组合时间描述
|
|
72
|
-
if (secondDesc && minuteDesc && hourDesc) {
|
|
73
|
-
return `${hourDesc}${minuteDesc}${secondDesc}执行`
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return `${hourDesc}${minuteDesc}${secondDesc}`.trim() + '执行'
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// 解析日期部分
|
|
80
|
-
function parseDate(dom, mon, dow) {
|
|
81
|
-
const dayOfMonthDesc = parseField(dom, {
|
|
82
|
-
'*': '',
|
|
83
|
-
'?': '',
|
|
84
|
-
L: '最后一天',
|
|
85
|
-
default: (val) => {
|
|
86
|
-
if (val.includes(',')) {
|
|
87
|
-
return `每月${val.split(',').join('日、')}日`
|
|
88
|
-
}
|
|
89
|
-
if (val.includes('-')) {
|
|
90
|
-
const [start, end] = val.split('-')
|
|
91
|
-
return `每月${start}日到${end}日`
|
|
92
|
-
}
|
|
93
|
-
if (val.includes('/')) {
|
|
94
|
-
const [start, step] = val.split('/')
|
|
95
|
-
return `从${start || '1'}日开始每${step}天`
|
|
96
|
-
}
|
|
97
|
-
return `每月${val}日`
|
|
98
|
-
}
|
|
99
|
-
})
|
|
100
|
-
|
|
101
|
-
const monthDesc = parseField(mon, {
|
|
102
|
-
'*': '',
|
|
103
|
-
default: (val) => {
|
|
104
|
-
const months = ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二']
|
|
105
|
-
if (val.includes(',')) {
|
|
106
|
-
return `${val
|
|
107
|
-
.split(',')
|
|
108
|
-
.map((m) => `${months[parseInt(m, 10) - 1]}月`)
|
|
109
|
-
.join('、')}`
|
|
110
|
-
}
|
|
111
|
-
if (val.includes('-')) {
|
|
112
|
-
const [start, end] = val.split('-').map((m) => months[parseInt(m, 10) - 1])
|
|
113
|
-
return `${start}月到${end}月`
|
|
114
|
-
}
|
|
115
|
-
return `${months[parseInt(val, 10) - 1]}月`
|
|
116
|
-
}
|
|
117
|
-
})
|
|
118
|
-
|
|
119
|
-
const dayOfWeekDesc = parseField(dow, {
|
|
120
|
-
'*': '',
|
|
121
|
-
'?': '',
|
|
122
|
-
'1-5': '工作日',
|
|
123
|
-
'6,7': '周末',
|
|
124
|
-
L: '最后一周',
|
|
125
|
-
default: (val) => {
|
|
126
|
-
const days = ['日', '一', '二', '三', '四', '五', '六']
|
|
127
|
-
if (val.includes(',')) {
|
|
128
|
-
return `每周${val
|
|
129
|
-
.split(',')
|
|
130
|
-
.map((d) => `周${days[parseInt(d, 10)]}`)
|
|
131
|
-
.join('、')}`
|
|
132
|
-
}
|
|
133
|
-
if (val.includes('-')) {
|
|
134
|
-
const [start, end] = val.split('-').map((d) => days[parseInt(d, 10)])
|
|
135
|
-
return `每周${start}到周${end}`
|
|
136
|
-
}
|
|
137
|
-
if (val.includes('#')) {
|
|
138
|
-
const [day, week] = val.split('#')
|
|
139
|
-
return `每月第${week}个周${days[parseInt(day, 10)]}`
|
|
140
|
-
}
|
|
141
|
-
return `每周${days[parseInt(val, 10)]}`
|
|
142
|
-
}
|
|
143
|
-
})
|
|
144
|
-
|
|
145
|
-
// 组合日期描述
|
|
146
|
-
let result = ''
|
|
147
|
-
if (monthDesc) result += monthDesc
|
|
148
|
-
if (dayOfMonthDesc) result += dayOfMonthDesc
|
|
149
|
-
if (dayOfWeekDesc) result += dayOfWeekDesc
|
|
150
|
-
|
|
151
|
-
// 默认描述
|
|
152
|
-
if (!monthDesc && !dayOfMonthDesc && !dayOfWeekDesc) {
|
|
153
|
-
return '每天'
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
return result
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// 解析年份部分
|
|
160
|
-
function parseYear(yr) {
|
|
161
|
-
return parseField(yr, {
|
|
162
|
-
'*': '',
|
|
163
|
-
default: (val) => {
|
|
164
|
-
if (!val) return ''
|
|
165
|
-
if (val?.includes('/')) {
|
|
166
|
-
const [start, step] = val.split('/')
|
|
167
|
-
return `从${start}年开始每${step}年`
|
|
168
|
-
}
|
|
169
|
-
return `${val}年`
|
|
170
|
-
}
|
|
171
|
-
})
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// 通用字段解析
|
|
175
|
-
function parseField(value, options) {
|
|
176
|
-
if (value in options) {
|
|
177
|
-
return options[value]
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
if (options.default) {
|
|
181
|
-
if (typeof options.default === 'function') {
|
|
182
|
-
return options.default(value)
|
|
183
|
-
}
|
|
184
|
-
return options.default
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
return ''
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
export default parseCronExpression
|
|
1
|
+
/**
|
|
2
|
+
* 完整解析Cron表达式为中文描述
|
|
3
|
+
* @param {string} cronExpression - 标准Cron表达式
|
|
4
|
+
* @returns {string} 中文描述
|
|
5
|
+
*/
|
|
6
|
+
function parseCronExpression(cronExpression) {
|
|
7
|
+
// 标准化表达式,处理可能的多空格
|
|
8
|
+
const normalized = cronExpression.trim().replace(/\s+/g, ' ')
|
|
9
|
+
const parts = normalized.split(' ')
|
|
10
|
+
|
|
11
|
+
if (parts.length < 5 || parts.length > 7) {
|
|
12
|
+
return '无效的Cron表达式'
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// 补全年份部分(可选)
|
|
16
|
+
const [second, minute, hour, dayOfMonth, month, dayOfWeek, year] = parts.length === 5 ? ['0', ...parts, '*'] : parts
|
|
17
|
+
|
|
18
|
+
// 解析各个字段
|
|
19
|
+
const timeDesc = parseTime(second, minute, hour)
|
|
20
|
+
const dateDesc = parseDate(dayOfMonth, month, dayOfWeek)
|
|
21
|
+
const yearDesc = parseYear(year)
|
|
22
|
+
|
|
23
|
+
// 组合结果
|
|
24
|
+
let result = ''
|
|
25
|
+
if (dateDesc) result += dateDesc
|
|
26
|
+
if (timeDesc) result += timeDesc
|
|
27
|
+
if (yearDesc) result += yearDesc
|
|
28
|
+
|
|
29
|
+
// 特殊处理常见表达式
|
|
30
|
+
const commonPatterns = {
|
|
31
|
+
'0 0 0 * * *': '每天午夜12点整执行',
|
|
32
|
+
'0 0 12 * * *': '每天中午12点整执行',
|
|
33
|
+
'0 0 8-18 * * 1-5': '工作日每天上午8点到下午6点每小时执行',
|
|
34
|
+
'0 0 9 * * 1': '每周一上午9点整执行',
|
|
35
|
+
'0 0 12 1 * *': '每月1日中午12点整执行',
|
|
36
|
+
'0 0 0 1 1 *': '每年1月1日午夜12点整执行'
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return commonPatterns[normalized] || result || '无法解析的Cron表达式'
|
|
40
|
+
|
|
41
|
+
// 解析时间部分
|
|
42
|
+
function parseTime(sec, min, hr) {
|
|
43
|
+
const secondDesc = parseField(sec, {
|
|
44
|
+
'*': '每秒',
|
|
45
|
+
0: '',
|
|
46
|
+
default: (val) => `每${val}秒`
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
const minuteDesc = parseField(min, {
|
|
50
|
+
'*': '每分钟',
|
|
51
|
+
0: '整',
|
|
52
|
+
default: (val) => `每${val}分`
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
const hourDesc = parseField(hr, {
|
|
56
|
+
'*': '每小时',
|
|
57
|
+
default: (val) => {
|
|
58
|
+
const num = parseInt(val, 10)
|
|
59
|
+
const period = num < 12 ? '上午' : '下午'
|
|
60
|
+
const displayHour = num % 12 === 0 ? 12 : num % 12
|
|
61
|
+
return `${period}${displayHour}点`
|
|
62
|
+
}
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
// 处理范围
|
|
66
|
+
if (hr.includes('-')) {
|
|
67
|
+
const [start, end] = hr.split('-').map(Number)
|
|
68
|
+
return `从${start}点到${end}点每小时执行`
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// 组合时间描述
|
|
72
|
+
if (secondDesc && minuteDesc && hourDesc) {
|
|
73
|
+
return `${hourDesc}${minuteDesc}${secondDesc}执行`
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return `${hourDesc}${minuteDesc}${secondDesc}`.trim() + '执行'
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// 解析日期部分
|
|
80
|
+
function parseDate(dom, mon, dow) {
|
|
81
|
+
const dayOfMonthDesc = parseField(dom, {
|
|
82
|
+
'*': '',
|
|
83
|
+
'?': '',
|
|
84
|
+
L: '最后一天',
|
|
85
|
+
default: (val) => {
|
|
86
|
+
if (val.includes(',')) {
|
|
87
|
+
return `每月${val.split(',').join('日、')}日`
|
|
88
|
+
}
|
|
89
|
+
if (val.includes('-')) {
|
|
90
|
+
const [start, end] = val.split('-')
|
|
91
|
+
return `每月${start}日到${end}日`
|
|
92
|
+
}
|
|
93
|
+
if (val.includes('/')) {
|
|
94
|
+
const [start, step] = val.split('/')
|
|
95
|
+
return `从${start || '1'}日开始每${step}天`
|
|
96
|
+
}
|
|
97
|
+
return `每月${val}日`
|
|
98
|
+
}
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
const monthDesc = parseField(mon, {
|
|
102
|
+
'*': '',
|
|
103
|
+
default: (val) => {
|
|
104
|
+
const months = ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二']
|
|
105
|
+
if (val.includes(',')) {
|
|
106
|
+
return `${val
|
|
107
|
+
.split(',')
|
|
108
|
+
.map((m) => `${months[parseInt(m, 10) - 1]}月`)
|
|
109
|
+
.join('、')}`
|
|
110
|
+
}
|
|
111
|
+
if (val.includes('-')) {
|
|
112
|
+
const [start, end] = val.split('-').map((m) => months[parseInt(m, 10) - 1])
|
|
113
|
+
return `${start}月到${end}月`
|
|
114
|
+
}
|
|
115
|
+
return `${months[parseInt(val, 10) - 1]}月`
|
|
116
|
+
}
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
const dayOfWeekDesc = parseField(dow, {
|
|
120
|
+
'*': '',
|
|
121
|
+
'?': '',
|
|
122
|
+
'1-5': '工作日',
|
|
123
|
+
'6,7': '周末',
|
|
124
|
+
L: '最后一周',
|
|
125
|
+
default: (val) => {
|
|
126
|
+
const days = ['日', '一', '二', '三', '四', '五', '六']
|
|
127
|
+
if (val.includes(',')) {
|
|
128
|
+
return `每周${val
|
|
129
|
+
.split(',')
|
|
130
|
+
.map((d) => `周${days[parseInt(d, 10)]}`)
|
|
131
|
+
.join('、')}`
|
|
132
|
+
}
|
|
133
|
+
if (val.includes('-')) {
|
|
134
|
+
const [start, end] = val.split('-').map((d) => days[parseInt(d, 10)])
|
|
135
|
+
return `每周${start}到周${end}`
|
|
136
|
+
}
|
|
137
|
+
if (val.includes('#')) {
|
|
138
|
+
const [day, week] = val.split('#')
|
|
139
|
+
return `每月第${week}个周${days[parseInt(day, 10)]}`
|
|
140
|
+
}
|
|
141
|
+
return `每周${days[parseInt(val, 10)]}`
|
|
142
|
+
}
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
// 组合日期描述
|
|
146
|
+
let result = ''
|
|
147
|
+
if (monthDesc) result += monthDesc
|
|
148
|
+
if (dayOfMonthDesc) result += dayOfMonthDesc
|
|
149
|
+
if (dayOfWeekDesc) result += dayOfWeekDesc
|
|
150
|
+
|
|
151
|
+
// 默认描述
|
|
152
|
+
if (!monthDesc && !dayOfMonthDesc && !dayOfWeekDesc) {
|
|
153
|
+
return '每天'
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return result
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// 解析年份部分
|
|
160
|
+
function parseYear(yr) {
|
|
161
|
+
return parseField(yr, {
|
|
162
|
+
'*': '',
|
|
163
|
+
default: (val) => {
|
|
164
|
+
if (!val) return ''
|
|
165
|
+
if (val?.includes('/')) {
|
|
166
|
+
const [start, step] = val.split('/')
|
|
167
|
+
return `从${start}年开始每${step}年`
|
|
168
|
+
}
|
|
169
|
+
return `${val}年`
|
|
170
|
+
}
|
|
171
|
+
})
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// 通用字段解析
|
|
175
|
+
function parseField(value, options) {
|
|
176
|
+
if (value in options) {
|
|
177
|
+
return options[value]
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if (options.default) {
|
|
181
|
+
if (typeof options.default === 'function') {
|
|
182
|
+
return options.default(value)
|
|
183
|
+
}
|
|
184
|
+
return options.default
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
return ''
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
export default parseCronExpression
|
|
@@ -1,101 +1,114 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<draggable
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
2
|
+
<draggable
|
|
3
|
+
:list="formItems"
|
|
4
|
+
item-key="name"
|
|
5
|
+
group="people"
|
|
6
|
+
:animation="350"
|
|
7
|
+
:disabled="hideBorder"
|
|
8
|
+
class="draggable-item"
|
|
9
|
+
ghost-class="draggable-ghost"
|
|
10
|
+
:class="{
|
|
11
|
+
showBorder: !hideBorder,
|
|
12
|
+
cur: curIndex == `${this.uuid}${formItems.name || formItems?.options?.items[0]?.name}`
|
|
13
|
+
}">
|
|
14
|
+
<template #item="{ element: item, index }">
|
|
15
|
+
<el-col
|
|
16
|
+
:span="['list'].includes(item.component) ? 24 : item.span || 24"
|
|
17
|
+
:class="{
|
|
18
|
+
borderItem: !hideBorder,
|
|
19
|
+
cur: !hideBorder && curIndex == `${this.uuid}${item.name || item?.options?.items[0]?.name}`
|
|
20
|
+
}"
|
|
21
|
+
v-if="!hideHandle(item)"
|
|
22
|
+
@click.stop="changeClick(item)">
|
|
15
23
|
<!-- 组合 -->
|
|
16
24
|
<template v-if="['object'].includes(item.component)">
|
|
17
25
|
<el-form-item :label="item.label">
|
|
18
|
-
<JsonItem
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
<slot :name="c.component"
|
|
27
|
-
:itemCur="itemCur"
|
|
28
|
-
:formCur="formCur"></slot>
|
|
26
|
+
<JsonItem
|
|
27
|
+
:formItems="item.value"
|
|
28
|
+
:form="form[item.name]"
|
|
29
|
+
class="object-item"
|
|
30
|
+
:custom="custom"
|
|
31
|
+
:hideBorder="hideBorder"
|
|
32
|
+
@curClick="emitClick">
|
|
33
|
+
<template v-for="c in custom" v-slot:[c.component]="{ itemCur, formCur }">
|
|
34
|
+
<slot :name="c.component" :itemCur="itemCur" :formCur="formCur"></slot>
|
|
29
35
|
</template>
|
|
30
36
|
</JsonItem>
|
|
31
37
|
</el-form-item>
|
|
32
|
-
|
|
33
38
|
</template>
|
|
34
39
|
<!-- 列表 显示时 -->
|
|
35
40
|
<template v-else-if="['list'].includes(item.component)">
|
|
36
41
|
<el-form-item>
|
|
37
42
|
<template #label>
|
|
38
43
|
{{ item.label }}
|
|
39
|
-
<el-button
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
<el-button
|
|
45
|
+
v-if="hideBorder"
|
|
46
|
+
type="primary"
|
|
47
|
+
class="add-btn"
|
|
48
|
+
plain
|
|
49
|
+
size="small"
|
|
50
|
+
icon="el-icon-plus"
|
|
51
|
+
@click="addListItem(item.value)"
|
|
52
|
+
>{{ $t('btn.add') }}</el-button
|
|
53
|
+
>
|
|
46
54
|
</template>
|
|
47
|
-
<el-col :span="item.span || 24"
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
v-slot:[c.component]="{ itemCur, formCur }">
|
|
59
|
-
<slot :name="c.component"
|
|
60
|
-
:itemCur="itemCur"
|
|
61
|
-
:formCur="formCur"></slot>
|
|
55
|
+
<el-col :span="item.span || 24" v-for="(x, xIndex) in item.value" :key="xIndex">
|
|
56
|
+
<div class="list-item" :class="{ borderItem: !hideBorder }">
|
|
57
|
+
<JsonItem
|
|
58
|
+
v-if="form[item.name]"
|
|
59
|
+
:formItems="x"
|
|
60
|
+
:custom="custom"
|
|
61
|
+
:form="form[item.name][xIndex]"
|
|
62
|
+
:hideBorder="hideBorder"
|
|
63
|
+
@curClick="emitClick">
|
|
64
|
+
<template v-for="c in custom" v-slot:[c.component]="{ itemCur, formCur }">
|
|
65
|
+
<slot :name="c.component" :itemCur="itemCur" :formCur="formCur"></slot>
|
|
62
66
|
</template>
|
|
63
67
|
</JsonItem>
|
|
64
|
-
<el-icon
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
+
<el-icon
|
|
69
|
+
class="remove-btn"
|
|
70
|
+
size="14"
|
|
71
|
+
v-if="hideBorder && item.value.length > 1"
|
|
72
|
+
@click="deleteListItem(item.value, xIndex)"
|
|
73
|
+
><el-icon-delete
|
|
74
|
+
/></el-icon>
|
|
68
75
|
</div>
|
|
69
|
-
|
|
70
76
|
</el-col>
|
|
71
|
-
|
|
72
77
|
</el-form-item>
|
|
73
|
-
|
|
74
78
|
</template>
|
|
75
|
-
<FormItem v-else
|
|
76
|
-
:item="item"
|
|
77
|
-
:form="form">
|
|
79
|
+
<FormItem v-else :item="item" :form="form">
|
|
78
80
|
<!-- 没有组件是component值 就是插槽名称 -->
|
|
79
|
-
<template
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
<template
|
|
82
|
+
v-if="
|
|
83
|
+
![
|
|
84
|
+
'input',
|
|
85
|
+
'upload',
|
|
86
|
+
'checkbox',
|
|
87
|
+
'checkboxGroup',
|
|
88
|
+
'switch',
|
|
89
|
+
'select',
|
|
90
|
+
'treeSelect',
|
|
91
|
+
'cascader',
|
|
92
|
+
'date',
|
|
93
|
+
'number',
|
|
94
|
+
'radio',
|
|
95
|
+
'color',
|
|
96
|
+
'rate',
|
|
97
|
+
'slider',
|
|
98
|
+
'tags'
|
|
99
|
+
].includes(item.component)
|
|
100
|
+
"
|
|
101
|
+
v-slot:[item.component]>
|
|
102
|
+
<slot :name="item.component" :itemCur="item" :formCur="form"></slot>
|
|
84
103
|
</template>
|
|
85
104
|
</FormItem>
|
|
86
105
|
<!-- 工具 -->
|
|
87
|
-
<div
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
title="复制"><el-icon-copy-document /></el-icon>
|
|
93
|
-
<el-icon class="btn"
|
|
94
|
-
size="14"
|
|
95
|
-
@click="deleteItem(index)"
|
|
96
|
-
title="删除"><el-icon-delete /></el-icon>
|
|
106
|
+
<div
|
|
107
|
+
v-if="!hideBorder && curIndex == `${this.uuid}${item.name || item?.options?.items[0]?.name}`"
|
|
108
|
+
class="tool-list">
|
|
109
|
+
<el-icon class="btn" size="14" @click="copyItem(item, index)" title="复制"><el-icon-copy-document /></el-icon>
|
|
110
|
+
<el-icon class="btn" size="14" @click="deleteItem(index)" title="删除"><el-icon-delete /></el-icon>
|
|
97
111
|
</div>
|
|
98
|
-
|
|
99
112
|
</el-col>
|
|
100
113
|
</template>
|
|
101
114
|
</draggable>
|
|
@@ -122,12 +135,12 @@ export default {
|
|
|
122
135
|
},
|
|
123
136
|
form: {
|
|
124
137
|
type: Object,
|
|
125
|
-
default: () => {
|
|
138
|
+
default: () => {}
|
|
126
139
|
},
|
|
127
140
|
// 是否是显示边界
|
|
128
141
|
hideBorder: { type: Boolean, default: false },
|
|
129
142
|
// 自定义组件
|
|
130
|
-
custom: { type: Array, default: () => [] }
|
|
143
|
+
custom: { type: Array, default: () => [] }
|
|
131
144
|
},
|
|
132
145
|
computed: {
|
|
133
146
|
curIndex() {
|
|
@@ -139,8 +152,8 @@ export default {
|
|
|
139
152
|
//处理动态隐藏
|
|
140
153
|
hideHandle(item) {
|
|
141
154
|
if (typeof item?.hideHandle === 'string') {
|
|
142
|
-
const func = new Function('form', `return ${item?.hideHandle.replace(/\$/g,
|
|
143
|
-
return func(this.form)
|
|
155
|
+
const func = new Function('form', `return ${item?.hideHandle.replace(/\$/g, 'form')}`)
|
|
156
|
+
return func(this.form)
|
|
144
157
|
} else if (typeof item?.hideHandle === 'boolean') {
|
|
145
158
|
return item.hideHandle
|
|
146
159
|
}
|
|
@@ -299,4 +312,4 @@ export default {
|
|
|
299
312
|
}
|
|
300
313
|
}
|
|
301
314
|
}
|
|
302
|
-
</style>
|
|
315
|
+
</style>
|
|
@@ -17,6 +17,9 @@
|
|
|
17
17
|
<slot :name="item?.options?.component"></slot>
|
|
18
18
|
</div>
|
|
19
19
|
|
|
20
|
+
<!-- 物理换行 -->
|
|
21
|
+
<div v-else-if="item.component == 'dividerBr'" class="title-name-divider-br" :class="{ border: item?.border }"></div>
|
|
22
|
+
|
|
20
23
|
<!-- 表单内容 -->
|
|
21
24
|
<el-form-item
|
|
22
25
|
v-else
|
|
@@ -298,4 +301,10 @@ export default {
|
|
|
298
301
|
}
|
|
299
302
|
}
|
|
300
303
|
}
|
|
304
|
+
.title-name-divider-br {
|
|
305
|
+
&.border {
|
|
306
|
+
margin-bottom: 15px;
|
|
307
|
+
border-top: 1px var(--el-border-color) var(--el-border-style);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
301
310
|
</style>
|
|
@@ -66,7 +66,8 @@
|
|
|
66
66
|
'rate',
|
|
67
67
|
'slider',
|
|
68
68
|
'tags',
|
|
69
|
-
'divider'
|
|
69
|
+
'divider',
|
|
70
|
+
'dividerBr'
|
|
70
71
|
].includes(item.component)
|
|
71
72
|
"
|
|
72
73
|
v-slot:[item.component]>
|
|
@@ -98,7 +99,8 @@
|
|
|
98
99
|
'rate',
|
|
99
100
|
'slider',
|
|
100
101
|
'tags',
|
|
101
|
-
'divider'
|
|
102
|
+
'divider',
|
|
103
|
+
'dividerBr'
|
|
102
104
|
].includes(item.component)
|
|
103
105
|
"
|
|
104
106
|
v-slot:[item.component]>
|
|
@@ -152,7 +152,7 @@
|
|
|
152
152
|
<el-pagination
|
|
153
153
|
background
|
|
154
154
|
size="small"
|
|
155
|
-
:current-page
|
|
155
|
+
:current-page="parseFloat(searchParams.page).toString() == 'NaN' ? 1 : searchParams.page"
|
|
156
156
|
:page-size="searchParams.size || 10"
|
|
157
157
|
:total="totalCount"
|
|
158
158
|
:page-sizes="pageSizes"
|