n20-common-lib 2.5.5-beta.6 → 2.5.5-beta.8
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/package.json +1 -1
- package/src/assets/css/cl-form-item.scss +14 -2
- package/src/assets/css/el-table.scss +6 -0
- package/src/assets/css/filter.scss +24 -1
- package/src/components/AdvancedFilter/filterItem.vue +29 -21
- package/src/components/AdvancedFilter/form-item-input.vue +39 -23
- package/src/components/AdvancedFilter/index.vue +170 -61
- package/src/components/FileUploadTable/index.vue +4 -5
- package/src/components/Layout/HeaderWrap/indexN.vue +2 -2
- package/src/components/LoginTemporary/form.vue +1 -3
- package/src/components/LoginTemporary/indexN.vue +7 -5
- package/src/components/TablePro/index.vue +8 -1
- package/src/components/Upload/uploadMsg.vue +5 -1
- package/src/directives/VRuleKey/index.js +16 -2
- package/src/i18n.json +2 -2
- package/src/utils/amountInWords.js +44 -33
- package/style/index.css +1 -2
- package/theme/blue.css +1 -1
- package/theme/cctcRed.css +1 -1
- package/theme/green.css +1 -1
- package/theme/lightBlue.css +1 -1
- package/theme/orange.css +1 -1
- package/theme/purple.css +1 -1
- package/theme/red.css +1 -1
- package/theme/yellow.css +1 -1
- package/src/components/AdvancedFilter/mixins/index.js +0 -82
- package/style/index.css.map +0 -1
|
@@ -1,38 +1,37 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div :class="prefixCls">
|
|
3
|
-
<el-form v-if="visible" :class="prefixCls + '-body'">
|
|
3
|
+
<el-form v-if="visible" :class="prefixCls + '-body'" @keyup.enter.native="enter">
|
|
4
4
|
<slot name="prefix"></slot>
|
|
5
5
|
<el-form-item
|
|
6
|
-
v-for="(item, i) in
|
|
6
|
+
v-for="(item, i) in GroupData"
|
|
7
7
|
:key="i"
|
|
8
8
|
:class="[prefixCls + '-item', activeClass(item)]"
|
|
9
9
|
:label="item.label"
|
|
10
|
+
:disabled="item.props && item.props.disabled"
|
|
10
11
|
>
|
|
11
12
|
<div :class="prefixCls + '-content'">
|
|
12
13
|
<slot v-if="item.slotName" :name="item.slotName"></slot>
|
|
13
|
-
<formItemInput v-else :form="model" :item="item" @change="$emit('change')" />
|
|
14
|
+
<formItemInput v-else :form="model" :item="item" @blur="$emit('blur')" @change="$emit('change')" />
|
|
14
15
|
</div>
|
|
15
|
-
<i
|
|
16
|
+
<i
|
|
17
|
+
v-if="!item.isDefault"
|
|
18
|
+
:key="i"
|
|
19
|
+
:class="[prefixCls + '-item-close', 'n20-icon-yichu']"
|
|
20
|
+
@click="handleClose(item)"
|
|
21
|
+
></i>
|
|
16
22
|
</el-form-item>
|
|
17
23
|
<slot name="suffix"></slot>
|
|
18
24
|
<el-form-item :class="prefixCls + '-add'">
|
|
19
25
|
<el-button v-popover:advanced_popover onlyicon plain icon="el-icon-plus" />
|
|
20
26
|
<el-popover ref="advanced_popover" placement="bottom-start" trigger="click">
|
|
21
|
-
<el-
|
|
22
|
-
|
|
23
|
-
v-model="search"
|
|
24
|
-
clearable
|
|
25
|
-
class="input-w m-b-s"
|
|
26
|
-
:placeholder="$l('搜索筛选条件')"
|
|
27
|
-
@change="searchFn"
|
|
28
|
-
/>
|
|
29
|
-
<filterItem :filter-list="filterListC" :check-array.sync="checkList" @checked="check" />
|
|
30
|
-
</el-form>
|
|
27
|
+
<el-input v-model="keyword" clearable class="input-w m-b-s" :placeholder="$lc('搜索筛选条件')" />
|
|
28
|
+
<filterItem :filter-list="filterListS" :check-array.sync="checkList" @checked="check" />
|
|
31
29
|
</el-popover>
|
|
32
|
-
<el-link class="m-l-s f-s-s" :underline="false" icon="n20-icon-qingchu" @click="cleared">
|
|
30
|
+
<el-link class="m-l-s f-s-s" :underline="false" icon="n20-icon-qingchu" @click="cleared">
|
|
31
|
+
{{ '清除条件' | $lc }}</el-link
|
|
32
|
+
>
|
|
33
33
|
</el-form-item>
|
|
34
34
|
</el-form>
|
|
35
|
-
<div v-else :width="width"></div>
|
|
36
35
|
</div>
|
|
37
36
|
</template>
|
|
38
37
|
|
|
@@ -40,8 +39,9 @@
|
|
|
40
39
|
import formItemInput from './form-item-input.vue'
|
|
41
40
|
import InputSearch from '../InputSearch/index.vue'
|
|
42
41
|
import filterItem from './filterItem.vue'
|
|
43
|
-
|
|
44
|
-
import
|
|
42
|
+
import axios from '../../utils/axios.js'
|
|
43
|
+
import { $lc } from '../../utils/i18n/index.js'
|
|
44
|
+
import cloneDeep from 'lodash/cloneDeep'
|
|
45
45
|
const prefixCls = 'n20-advanced-filter'
|
|
46
46
|
export default {
|
|
47
47
|
name: 'AdvancedFilter',
|
|
@@ -50,12 +50,7 @@ export default {
|
|
|
50
50
|
InputSearch,
|
|
51
51
|
filterItem
|
|
52
52
|
},
|
|
53
|
-
mixins: [mixins],
|
|
54
53
|
props: {
|
|
55
|
-
type: {
|
|
56
|
-
type: String,
|
|
57
|
-
default: ''
|
|
58
|
-
},
|
|
59
54
|
visible: {
|
|
60
55
|
type: Boolean,
|
|
61
56
|
default: false
|
|
@@ -64,18 +59,6 @@ export default {
|
|
|
64
59
|
type: Array,
|
|
65
60
|
default: () => []
|
|
66
61
|
},
|
|
67
|
-
defaultShow: {
|
|
68
|
-
type: Number,
|
|
69
|
-
default: 5
|
|
70
|
-
},
|
|
71
|
-
labelWidth: {
|
|
72
|
-
type: [String, Number],
|
|
73
|
-
default: undefined
|
|
74
|
-
},
|
|
75
|
-
width: {
|
|
76
|
-
type: String,
|
|
77
|
-
default: '90%'
|
|
78
|
-
},
|
|
79
62
|
model: {
|
|
80
63
|
type: Object,
|
|
81
64
|
default: () => ({})
|
|
@@ -87,32 +70,46 @@ export default {
|
|
|
87
70
|
},
|
|
88
71
|
data() {
|
|
89
72
|
return {
|
|
90
|
-
|
|
91
|
-
showPop: false,
|
|
92
|
-
showPopC: false,
|
|
73
|
+
keyword: '',
|
|
93
74
|
prefixCls,
|
|
94
|
-
dataC: [],
|
|
95
|
-
filterListC: [],
|
|
96
75
|
remoteList: [],
|
|
97
|
-
|
|
76
|
+
GroupData: [],
|
|
77
|
+
checkList: [],
|
|
78
|
+
filterListC: [],
|
|
79
|
+
checkC: [],
|
|
80
|
+
userNo: sessionStorage.getItem('userNo')
|
|
98
81
|
}
|
|
99
82
|
},
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
this.
|
|
83
|
+
computed: {
|
|
84
|
+
filterListS: {
|
|
85
|
+
get() {
|
|
86
|
+
if (!this.keyword) {
|
|
87
|
+
return this.filterList
|
|
88
|
+
} else {
|
|
89
|
+
const keywordLowerCase = this.keyword
|
|
90
|
+
return this.filterList.filter((item) => item.label.includes(keywordLowerCase))
|
|
91
|
+
}
|
|
104
92
|
},
|
|
105
|
-
|
|
93
|
+
set(v) {
|
|
94
|
+
return v
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
watch: {
|
|
99
|
+
visible: {
|
|
100
|
+
handler(val) {
|
|
101
|
+
val && this.getFilterList()
|
|
102
|
+
}
|
|
106
103
|
},
|
|
107
|
-
|
|
104
|
+
model: {
|
|
108
105
|
handler(value) {
|
|
109
|
-
this
|
|
106
|
+
this.$emit('change', value)
|
|
110
107
|
},
|
|
111
|
-
deep: true
|
|
112
|
-
immediate: true
|
|
108
|
+
deep: true
|
|
113
109
|
}
|
|
114
110
|
},
|
|
115
|
-
|
|
111
|
+
created() {
|
|
112
|
+
this.filterListC = cloneDeep(this.filterList)
|
|
116
113
|
this.getFilterList()
|
|
117
114
|
},
|
|
118
115
|
methods: {
|
|
@@ -123,19 +120,28 @@ export default {
|
|
|
123
120
|
}
|
|
124
121
|
},
|
|
125
122
|
activeClass(item) {
|
|
126
|
-
console.log(item)
|
|
127
123
|
let flag = ''
|
|
128
124
|
switch (item.type) {
|
|
125
|
+
case 'select':
|
|
126
|
+
if (item.multiple) {
|
|
127
|
+
flag = this.model[item.value] && this.model[item.value].length ? this.prefixCls + '-active' : ''
|
|
128
|
+
} else {
|
|
129
|
+
flag = this.model[item.value] ? this.prefixCls + '-active' : ''
|
|
130
|
+
}
|
|
131
|
+
break
|
|
129
132
|
case 'text':
|
|
130
133
|
case 'search':
|
|
131
|
-
case 'select':
|
|
132
134
|
case 'number':
|
|
133
135
|
case 'date':
|
|
134
136
|
case 'datetime':
|
|
135
137
|
case 'year':
|
|
136
138
|
case 'month':
|
|
137
139
|
case 'week':
|
|
140
|
+
flag = this.model[item.value] ? this.prefixCls + '-active' : ''
|
|
141
|
+
break
|
|
138
142
|
case 'checkbox':
|
|
143
|
+
flag = this.model[item.value] && this.model[item.value].length ? this.prefixCls + '-active' : ''
|
|
144
|
+
break
|
|
139
145
|
case 'radio':
|
|
140
146
|
flag = this.model[item.value] ? this.prefixCls + '-active' : ''
|
|
141
147
|
break
|
|
@@ -151,7 +157,41 @@ export default {
|
|
|
151
157
|
return flag
|
|
152
158
|
},
|
|
153
159
|
handleClose(item) {
|
|
160
|
+
switch (item.type) {
|
|
161
|
+
case 'select':
|
|
162
|
+
this.model[item.value] = item.multiple ? [] : null
|
|
163
|
+
break
|
|
164
|
+
case 'text':
|
|
165
|
+
case 'search':
|
|
166
|
+
case 'number':
|
|
167
|
+
case 'date':
|
|
168
|
+
case 'datetime':
|
|
169
|
+
case 'year':
|
|
170
|
+
case 'month':
|
|
171
|
+
case 'radio':
|
|
172
|
+
case 'week':
|
|
173
|
+
this.model[item.value] = null
|
|
174
|
+
break
|
|
175
|
+
case 'checkbox':
|
|
176
|
+
this.model[item.value] = []
|
|
177
|
+
|
|
178
|
+
break
|
|
179
|
+
case 'numberrange':
|
|
180
|
+
this.model[item.startValue] = null
|
|
181
|
+
this.model[item.endValue] = null
|
|
182
|
+
break
|
|
183
|
+
case 'daterange':
|
|
184
|
+
case 'datetimerange':
|
|
185
|
+
case ' monthrange':
|
|
186
|
+
this.model[item.startDate] = null
|
|
187
|
+
this.model[item.endDate] = null
|
|
188
|
+
break
|
|
189
|
+
}
|
|
154
190
|
let data = this.GroupData.filter((s) => {
|
|
191
|
+
if (s.label !== item.label) {
|
|
192
|
+
s.checked = true
|
|
193
|
+
return s
|
|
194
|
+
}
|
|
155
195
|
return s.label !== item.label || s.value !== item.value
|
|
156
196
|
})
|
|
157
197
|
this.saveFilter(data).then(({ code }) => {
|
|
@@ -160,27 +200,96 @@ export default {
|
|
|
160
200
|
}
|
|
161
201
|
})
|
|
162
202
|
},
|
|
163
|
-
searchFn() {
|
|
164
|
-
this.filterListC = this.cloneDeepFList.filter((r) => {
|
|
165
|
-
return r.label.includes(this.search)
|
|
166
|
-
})
|
|
167
|
-
},
|
|
168
203
|
cleared() {
|
|
169
204
|
this.$emit('clear')
|
|
170
205
|
},
|
|
206
|
+
enter() {
|
|
207
|
+
this.$emit('enter', this.model)
|
|
208
|
+
},
|
|
209
|
+
|
|
171
210
|
check(keys) {
|
|
211
|
+
// 保存当前选择的过滤条件
|
|
172
212
|
this.checkList = keys
|
|
173
|
-
let
|
|
213
|
+
let saveCheckArr = []
|
|
214
|
+
// 如果keys数组不为空
|
|
174
215
|
if (keys.length > 0) {
|
|
216
|
+
// 遍历keys数组
|
|
175
217
|
keys.forEach((k) => {
|
|
176
|
-
|
|
218
|
+
// 遍历filterList数组
|
|
219
|
+
this.filterList.forEach((el) => {
|
|
220
|
+
// 判断当前元素是否在keys数组中
|
|
221
|
+
const found = keys.find((k) => k.label === el.label)
|
|
222
|
+
if (found) {
|
|
223
|
+
// 如果在keys数组中找到了当前元素,将其checked属性设置为true
|
|
224
|
+
el.checked = true
|
|
225
|
+
saveCheckArr.push(el)
|
|
226
|
+
} else {
|
|
227
|
+
// 如果在keys数组中未找到当前元素,将其checked属性设置为false
|
|
228
|
+
el.checked = false
|
|
229
|
+
}
|
|
230
|
+
})
|
|
177
231
|
})
|
|
178
232
|
}
|
|
179
|
-
|
|
233
|
+
// 保存过滤条件
|
|
234
|
+
this.saveFilter(saveCheckArr).then(({ code }) => {
|
|
235
|
+
// 如果保存成功
|
|
180
236
|
if (code === 200) {
|
|
237
|
+
// 重新获取过滤条件列表
|
|
181
238
|
this.getFilterList()
|
|
182
239
|
}
|
|
183
240
|
})
|
|
241
|
+
},
|
|
242
|
+
/**
|
|
243
|
+
* 保存筛选条件
|
|
244
|
+
* @param data
|
|
245
|
+
*/
|
|
246
|
+
saveFilter(data) {
|
|
247
|
+
return new Promise((resolve) => {
|
|
248
|
+
axios
|
|
249
|
+
.post(
|
|
250
|
+
`/bems/prod_1.0/user/pageHabit?t=${Date.now()}`,
|
|
251
|
+
{
|
|
252
|
+
userNo: this.userNo,
|
|
253
|
+
pageId: this.filterId,
|
|
254
|
+
showStructure: JSON.stringify(data)
|
|
255
|
+
},
|
|
256
|
+
{ loading: false, noMsg: true }
|
|
257
|
+
)
|
|
258
|
+
.then((res) => {
|
|
259
|
+
resolve(res)
|
|
260
|
+
})
|
|
261
|
+
})
|
|
262
|
+
},
|
|
263
|
+
/**
|
|
264
|
+
* 获取筛选条件
|
|
265
|
+
*/
|
|
266
|
+
getFilterList() {
|
|
267
|
+
axios
|
|
268
|
+
.post(
|
|
269
|
+
`/bems/prod_1.0/user/pageHabit/list?t=${Date.now()}`,
|
|
270
|
+
{
|
|
271
|
+
userNo: this.userNo,
|
|
272
|
+
pageId: this.filterId
|
|
273
|
+
},
|
|
274
|
+
{ loading: false, noMsg: true }
|
|
275
|
+
)
|
|
276
|
+
.then(({ data }) => {
|
|
277
|
+
let _data = JSON.parse(data)
|
|
278
|
+
if (_data && _data.length > 0) {
|
|
279
|
+
this.GroupData = this.filterList.filter((item) => {
|
|
280
|
+
return _data.find((i) => i.checked && item.label === i.label)
|
|
281
|
+
})
|
|
282
|
+
} else {
|
|
283
|
+
this.GroupData = this.filterList.filter((item) => {
|
|
284
|
+
if (item.isDefault) {
|
|
285
|
+
item.checked = true
|
|
286
|
+
return item
|
|
287
|
+
}
|
|
288
|
+
})
|
|
289
|
+
}
|
|
290
|
+
this.checkList = this.GroupData
|
|
291
|
+
this.checkC = cloneDeep(this.checkList)
|
|
292
|
+
})
|
|
184
293
|
}
|
|
185
294
|
}
|
|
186
295
|
}
|
|
@@ -467,7 +467,6 @@ export default {
|
|
|
467
467
|
if (this.getFileMethod) {
|
|
468
468
|
return this.getFileMethod(row, type)
|
|
469
469
|
}
|
|
470
|
-
|
|
471
470
|
let _url = row[this.keys.url]
|
|
472
471
|
this.seePrefix && (_url = this.seePrefix + _url)
|
|
473
472
|
if (_url) {
|
|
@@ -475,15 +474,15 @@ export default {
|
|
|
475
474
|
// 预览
|
|
476
475
|
return {
|
|
477
476
|
url: `/api/onlinePreview?beid=${row[this.keys.url]}`,
|
|
478
|
-
name: row.name + '.html',
|
|
479
|
-
sameOrg: this.seeTypes.test(row.name)
|
|
477
|
+
name: row[this.keys.name] + '.html',
|
|
478
|
+
sameOrg: this.seeTypes.test(row[this.keys.name])
|
|
480
479
|
}
|
|
481
480
|
} else {
|
|
482
481
|
// 下载
|
|
483
|
-
let blob = await this.$axios.get(`/
|
|
482
|
+
let blob = await this.$axios.get(`/neams/eamsbaserecord/download/${row[this.keys.url]}`, null, {
|
|
484
483
|
responseType: 'blob'
|
|
485
484
|
})
|
|
486
|
-
let name = row.name || blob.name
|
|
485
|
+
let name = row[this.keys.name] || blob.name
|
|
487
486
|
return {
|
|
488
487
|
url: URL.createObjectURL(blob),
|
|
489
488
|
name: name,
|
|
@@ -67,11 +67,11 @@
|
|
|
67
67
|
</el-dropdown-menu>
|
|
68
68
|
</el-dropdown>
|
|
69
69
|
|
|
70
|
-
<el-tooltip v-if="!
|
|
70
|
+
<el-tooltip v-if="!hideHelpDoc" :content="'帮助文档' | $lc">
|
|
71
71
|
<span class="set-user-btn iconfont icon-bangzhuwendang header-color m-l-lg" @click="openHelp"></span>
|
|
72
72
|
</el-tooltip>
|
|
73
73
|
|
|
74
|
-
<el-tooltip v-if="!
|
|
74
|
+
<el-tooltip v-if="!hideDowApp" :content="'客户端下载' | $lc">
|
|
75
75
|
<span class="set-user-btn iconfont icon-kehuduanxiazai header-color m-l-lg" @click="dowApp"></span>
|
|
76
76
|
</el-tooltip>
|
|
77
77
|
|
|
@@ -322,7 +322,7 @@ export default {
|
|
|
322
322
|
sltSys: {},
|
|
323
323
|
loginBg: 'none',
|
|
324
324
|
inspectionV: false,
|
|
325
|
-
isImageCode:
|
|
325
|
+
isImageCode: undefined
|
|
326
326
|
}
|
|
327
327
|
},
|
|
328
328
|
computed: {
|
|
@@ -383,7 +383,7 @@ export default {
|
|
|
383
383
|
return form
|
|
384
384
|
},
|
|
385
385
|
imgCode() {
|
|
386
|
-
return this.
|
|
386
|
+
return this.isImageCode ?? this.showImageCode
|
|
387
387
|
}
|
|
388
388
|
},
|
|
389
389
|
watch: {
|
|
@@ -415,9 +415,11 @@ export default {
|
|
|
415
415
|
},
|
|
416
416
|
methods: {
|
|
417
417
|
getIsImgCode() {
|
|
418
|
-
axios
|
|
419
|
-
|
|
420
|
-
|
|
418
|
+
axios
|
|
419
|
+
.get(`/bems/prod_1.0/uas/api/authorization/isimgcode`, null, { loading: false, noMsg: true })
|
|
420
|
+
.then(({ data }) => {
|
|
421
|
+
this.isImageCode = data
|
|
422
|
+
})
|
|
421
423
|
},
|
|
422
424
|
async loginThenT() {
|
|
423
425
|
if (this.sltSys?.NO) {
|
|
@@ -66,17 +66,24 @@
|
|
|
66
66
|
v-bind="item"
|
|
67
67
|
/>
|
|
68
68
|
</template>
|
|
69
|
+
<template #empty>
|
|
70
|
+
<slot name="empty">
|
|
71
|
+
<empty type="empty" content="暂无数据" :height="200" :width="200" />
|
|
72
|
+
</slot>
|
|
73
|
+
</template>
|
|
69
74
|
</vxe-table>
|
|
70
75
|
<tableSetSize v-if="showSetsize" :size="sizeC" v-bind="$attrs" @update:size="sizeUp" @resize="sizeSet" />
|
|
71
76
|
</div>
|
|
72
77
|
</template>
|
|
73
78
|
|
|
74
79
|
<script>
|
|
80
|
+
import empty from '../Empty'
|
|
75
81
|
import tableSetSize from '../TableSetSize/index.vue'
|
|
76
82
|
export default {
|
|
77
83
|
name: 'TablePro',
|
|
78
84
|
components: {
|
|
79
|
-
tableSetSize
|
|
85
|
+
tableSetSize,
|
|
86
|
+
empty
|
|
80
87
|
},
|
|
81
88
|
props: {
|
|
82
89
|
data: {
|
|
@@ -60,9 +60,9 @@
|
|
|
60
60
|
:width="column.width"
|
|
61
61
|
:align="column.align"
|
|
62
62
|
:show-overflow-tooltip="column.showOverflowTooltip"
|
|
63
|
+
:formatter="item.formatter | colfF(item.formatterMap)"
|
|
63
64
|
>
|
|
64
65
|
<template slot-scope="scope">
|
|
65
|
-
<!-- eslint-disable-next-line vue/no-v-html -->
|
|
66
66
|
<span v-html="scope.row[column.prop]"></span>
|
|
67
67
|
</template>
|
|
68
68
|
</el-table-column>
|
|
@@ -104,6 +104,7 @@
|
|
|
104
104
|
|
|
105
105
|
<script>
|
|
106
106
|
import { $lc } from '../../utils/i18n/index'
|
|
107
|
+
import { colfF } from '../Table/filters.js'
|
|
107
108
|
export default {
|
|
108
109
|
name: 'UploadMsg',
|
|
109
110
|
props: {
|
|
@@ -145,6 +146,9 @@ export default {
|
|
|
145
146
|
default: false
|
|
146
147
|
}
|
|
147
148
|
},
|
|
149
|
+
filters: {
|
|
150
|
+
colfF
|
|
151
|
+
},
|
|
148
152
|
computed: {
|
|
149
153
|
progressV: {
|
|
150
154
|
get() {
|
|
@@ -123,22 +123,30 @@ directive.install = (Vue) => {
|
|
|
123
123
|
bind(el, binding, node) {
|
|
124
124
|
let _this = node.child
|
|
125
125
|
|
|
126
|
+
// 获取表单验证规则
|
|
126
127
|
let ruleForm = _this.$attrs['rule-form'] || _this.$attrs['ruleForm']
|
|
127
128
|
ruleForm && el.classList.add(ruleForm)
|
|
128
129
|
|
|
130
|
+
// 获取表单验证错误隐藏
|
|
129
131
|
let rErr = _this.$attrs['rule-error-hide'] || _this.$attrs['ruleErrorHide']
|
|
130
132
|
rErr = rErr !== 'true' && rErr !== true
|
|
131
133
|
|
|
134
|
+
// 表单验证
|
|
132
135
|
el[VD] = (val, type) => {
|
|
133
136
|
let _val = _this[binding.value || 'value']
|
|
134
137
|
let _rules = getRules(_this.$attrs['rules'], type)
|
|
135
138
|
if (_rules.length > 0) {
|
|
139
|
+
// 验证表单
|
|
136
140
|
return Promise.all(_rules.map((rule) => validateRoule(rule, _val)))
|
|
137
141
|
.then(() => {
|
|
142
|
+
// 验证通过,隐藏错误
|
|
138
143
|
hideErr(el, rErr)
|
|
144
|
+
return Promise.resolve(true)
|
|
139
145
|
})
|
|
140
146
|
.catch((err) => {
|
|
147
|
+
// 验证失败,显示错误
|
|
141
148
|
showErr(el, err, rErr)
|
|
149
|
+
return Promise.resolve(false)
|
|
142
150
|
})
|
|
143
151
|
} else {
|
|
144
152
|
return Promise.resolve()
|
|
@@ -160,6 +168,8 @@ directive.install = (Vue) => {
|
|
|
160
168
|
// })
|
|
161
169
|
}
|
|
162
170
|
})
|
|
171
|
+
Vue.prototype.$rulesValidateForm = rulesValidateForm
|
|
172
|
+
Vue.prototype.$rulesValidateFormClear = rulesValidateFormClear
|
|
163
173
|
}
|
|
164
174
|
|
|
165
175
|
function rulesValidateForm(query, fn) {
|
|
@@ -170,8 +180,12 @@ function rulesValidateForm(query, fn) {
|
|
|
170
180
|
typeof el[VD] === 'function' && validateList.push(el[VD](undefined, 'submit'))
|
|
171
181
|
})
|
|
172
182
|
return Promise.all(validateList)
|
|
173
|
-
.then(() => {
|
|
174
|
-
|
|
183
|
+
.then((res) => {
|
|
184
|
+
if (res.includes(false)) {
|
|
185
|
+
fn && fn(false)
|
|
186
|
+
} else {
|
|
187
|
+
fn && fn(true)
|
|
188
|
+
}
|
|
175
189
|
})
|
|
176
190
|
.catch(() => {
|
|
177
191
|
fn && fn(false)
|
package/src/i18n.json
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"en": "Online preview is not supported, please"
|
|
22
22
|
},
|
|
23
23
|
"已选合计": {
|
|
24
|
-
"en": "
|
|
24
|
+
"en": "Total selected"
|
|
25
25
|
},
|
|
26
26
|
"天!": {
|
|
27
27
|
"en": "God!"
|
|
@@ -300,7 +300,7 @@
|
|
|
300
300
|
"en": "Article."
|
|
301
301
|
},
|
|
302
302
|
"笔数": {
|
|
303
|
-
"en": "
|
|
303
|
+
"en": "Counts"
|
|
304
304
|
},
|
|
305
305
|
"重新上传": {
|
|
306
306
|
"en": "upload again"
|
|
@@ -1,40 +1,61 @@
|
|
|
1
|
-
const CHINESE_NUMERALS = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
|
|
2
|
-
|
|
3
1
|
/**
|
|
4
2
|
*
|
|
5
3
|
* @param {number|string} amount 需转换的金额
|
|
6
4
|
*/
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
var
|
|
10
|
-
|
|
11
|
-
var
|
|
12
|
-
|
|
13
|
-
var
|
|
5
|
+
export function convert(money) {
|
|
6
|
+
//汉字的数字
|
|
7
|
+
var cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖')
|
|
8
|
+
//基本单位
|
|
9
|
+
var cnIntRadice = new Array('', '拾', '佰', '仟')
|
|
10
|
+
//对应整数部分扩展单位
|
|
11
|
+
var cnIntUnits = new Array('', '万', '亿', '兆')
|
|
12
|
+
//对应小数部分单位
|
|
13
|
+
var cnDecUnits = new Array('角', '分', '毫', '厘')
|
|
14
|
+
//整数金额时后面跟的字符
|
|
15
|
+
var cnInteger = '整'
|
|
16
|
+
//整型完以后的单位
|
|
17
|
+
var cnIntLast = '元'
|
|
14
18
|
//最大处理的数字
|
|
15
19
|
var maxNum = 999999999999999.9999
|
|
16
|
-
|
|
17
|
-
var
|
|
20
|
+
//金额整数部分
|
|
21
|
+
var integerNum
|
|
22
|
+
//金额小数部分
|
|
23
|
+
var decimalNum
|
|
18
24
|
//输出的中文金额字符串
|
|
19
25
|
var chineseStr = ''
|
|
20
|
-
var
|
|
26
|
+
var minusStr = '负'
|
|
27
|
+
var minusFlag = false
|
|
28
|
+
//分离金额后用的数组,预定义
|
|
29
|
+
var parts
|
|
21
30
|
if (money == '') {
|
|
22
31
|
return ''
|
|
23
32
|
}
|
|
24
|
-
|
|
25
33
|
money = parseFloat(money)
|
|
26
34
|
if (money >= maxNum) {
|
|
27
35
|
//超出最大处理数字
|
|
28
|
-
return '
|
|
36
|
+
return ''
|
|
29
37
|
}
|
|
38
|
+
|
|
30
39
|
if (money == 0) {
|
|
31
|
-
chineseStr = cnNums[0] + cnIntLast
|
|
40
|
+
chineseStr = cnNums[0] + cnIntLast
|
|
32
41
|
return chineseStr
|
|
33
42
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
43
|
+
|
|
44
|
+
//转换为字符串
|
|
45
|
+
money = money.toString()
|
|
46
|
+
if (money.indexOf('-') !== -1) {
|
|
47
|
+
minusFlag = true
|
|
48
|
+
money = Math.abs(money).toString()
|
|
49
|
+
}
|
|
50
|
+
if (money.indexOf('.') == -1) {
|
|
51
|
+
integerNum = money
|
|
52
|
+
decimalNum = ''
|
|
53
|
+
} else {
|
|
54
|
+
parts = money.split('.')
|
|
55
|
+
integerNum = parts[0]
|
|
56
|
+
decimalNum = parts[1].substr(0, 4)
|
|
57
|
+
}
|
|
58
|
+
|
|
38
59
|
//获取整型部分转换
|
|
39
60
|
if (parseInt(integerNum, 10) > 0) {
|
|
40
61
|
var zeroCount = 0
|
|
@@ -72,22 +93,12 @@ export const convert = (money) => {
|
|
|
72
93
|
}
|
|
73
94
|
if (chineseStr == '') {
|
|
74
95
|
chineseStr += cnNums[0] + cnIntLast + cnInteger
|
|
75
|
-
} else if (decimalNum == ''
|
|
96
|
+
} else if (decimalNum == '') {
|
|
76
97
|
chineseStr += cnInteger
|
|
77
98
|
}
|
|
78
|
-
return chineseStr
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* 单个数字转换
|
|
82
|
-
* @param {number | string} number
|
|
83
|
-
* @returns {string}
|
|
84
|
-
*/
|
|
85
|
-
export const singleConvert = (number) => {
|
|
86
|
-
const res = CHINESE_NUMERALS[number] || number
|
|
87
99
|
|
|
88
|
-
if (
|
|
89
|
-
|
|
100
|
+
if (minusFlag) {
|
|
101
|
+
chineseStr = minusStr + chineseStr
|
|
90
102
|
}
|
|
91
|
-
|
|
92
|
-
return res
|
|
103
|
+
return chineseStr
|
|
93
104
|
}
|