xianniu-ui 0.1.2 → 0.1.4
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/lib/style/basic.css +1 -0
- package/lib/style/city.css +1 -0
- package/lib/style/date.css +1 -0
- package/lib/style/flex.css +1 -0
- package/lib/style/import.css +1 -0
- package/lib/style/index.css +1 -1
- package/{src → lib/style}/theme/element-variables.scss +2 -4
- package/{src → lib/style}/theme/index.scss +0 -0
- package/{src → lib/style}/theme/mixin.scss +0 -0
- package/{src → lib/style}/theme/sidebar.scss +0 -0
- package/lib/style/theme/theme.scss +4 -0
- package/{src → lib/style}/theme/transition.scss +0 -0
- package/{src → lib/style}/theme/variables.scss +0 -0
- package/lib/style/upload.css +1 -0
- package/lib/xianniu-ui.common.js +25504 -18072
- package/lib/xianniu-ui.css +1 -0
- package/lib/xianniu-ui.umd.js +25508 -18076
- package/lib/xianniu-ui.umd.min.js +1 -9
- package/package.json +63 -62
- package/packages/city/index.js +7 -0
- package/packages/city/main.vue +258 -0
- package/packages/date/index.js +7 -0
- package/packages/date/main.vue +348 -0
- package/packages/dialog/!main.vue +90 -0
- package/packages/dialog/main.vue +37 -57
- package/packages/drawer/index.js +7 -0
- package/packages/drawer/main.vue +65 -0
- package/packages/empty/index.js +7 -0
- package/packages/empty/main.vue +33 -0
- package/packages/export/index.js +7 -0
- package/packages/export/main.vue +99 -0
- package/packages/import/index.js +7 -0
- package/packages/import/main.vue +135 -0
- package/packages/inputRange/index.js +7 -0
- package/packages/inputRange/main.vue +15 -0
- package/packages/page/main.vue +5 -5
- package/packages/search/index.js +7 -0
- package/packages/search/main.vue +230 -0
- package/packages/style/lib/basic.css +1 -0
- package/packages/style/lib/city.css +1 -0
- package/packages/style/lib/date.css +1 -0
- package/packages/style/lib/flex.css +1 -0
- package/packages/style/lib/import.css +1 -0
- package/packages/style/lib/index.css +1 -1
- package/packages/style/lib/upload.css +1 -0
- package/packages/style/src/basic.scss +64 -0
- package/packages/style/src/city.scss +3 -0
- package/packages/style/src/date.scss +5 -0
- package/packages/style/src/flex.scss +74 -0
- package/packages/style/src/import.scss +37 -0
- package/packages/style/src/index.scss +9 -1
- package/packages/style/src/mixin/mixin.scss +270 -0
- package/packages/style/src/search.scss +17 -0
- package/packages/style/src/table.scss +36 -4
- package/packages/style/src/theme/element-variables.scss +26 -0
- package/packages/style/src/theme/index.scss +1 -0
- package/packages/style/src/theme/mixin.scss +270 -0
- package/packages/style/src/theme/sidebar.scss +271 -0
- package/packages/style/src/theme/theme.scss +4 -0
- package/packages/style/src/theme/transition.scss +52 -0
- package/packages/style/src/theme/variables.scss +36 -0
- package/packages/style/src/tip.scss +22 -0
- package/packages/style/src/tree.scss +87 -0
- package/packages/style/src/upload.scss +46 -0
- package/packages/table/column.vue +42 -23
- package/packages/table/main.vue +126 -35
- package/packages/tip/index.js +7 -0
- package/packages/tip/main.vue +22 -0
- package/packages/tree/index.js +7 -0
- package/packages/tree/main.vue +192 -0
- package/packages/upload/index.js +7 -0
- package/packages/upload/main.vue +346 -0
- package/packages/upload/upload-pop.vue +49 -0
- package/packages/upload/upload-slot.vue +0 -0
- package/src/index.js +23 -3
- package/src/plugins/index.js +1 -1
- package/src/utils/format.js +119 -106
- package/src/utils/index.js +0 -2
- package/src/utils/reg.js +7 -1
- package/src/utils/utils.js +76 -10
- package/src/utils/lodash.js +0 -2
package/package.json
CHANGED
|
@@ -1,62 +1,63 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "xianniu-ui",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"private": false,
|
|
5
|
-
"main": "lib/
|
|
6
|
-
"scripts": {
|
|
7
|
-
"dev": "cross-env NODE_ENV=development vue-cli-service serve",
|
|
8
|
-
"build": "cross-env NODE_ENV=production vue-cli-service build",
|
|
9
|
-
"build:lib": "npm run style && vue-cli-service build --target lib --name xianniu-ui --dest lib src/index.js && cp-cli packages/style/lib lib/style",
|
|
10
|
-
"style": "gulp --gulpfile ./packages/style/gulpfile.js",
|
|
11
|
-
"play": "cross-env NODE_ENV=development PLAY_ENV=true vue-cli-service serve",
|
|
12
|
-
"deploy": "bash deploy.sh",
|
|
13
|
-
"lint": "vue-cli-service lint"
|
|
14
|
-
},
|
|
15
|
-
"license": "MIT",
|
|
16
|
-
"files": [
|
|
17
|
-
"lib",
|
|
18
|
-
"src",
|
|
19
|
-
"packages",
|
|
20
|
-
"plugins",
|
|
21
|
-
"public"
|
|
22
|
-
],
|
|
23
|
-
"dependencies": {
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"vue
|
|
31
|
-
"vue-
|
|
32
|
-
"
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
"@
|
|
37
|
-
"@vue/cli-plugin-
|
|
38
|
-
"@vue/cli-plugin-
|
|
39
|
-
"@vue/cli-
|
|
40
|
-
"@vue/
|
|
41
|
-
"
|
|
42
|
-
"babel-
|
|
43
|
-
"babel-plugin-
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"eslint
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"markdown-it
|
|
53
|
-
"markdown-it-
|
|
54
|
-
"markdown-it-
|
|
55
|
-
"markdown-
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"sass
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
|
|
62
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "xianniu-ui",
|
|
3
|
+
"version": "0.1.4",
|
|
4
|
+
"private": false,
|
|
5
|
+
"main": "lib/xianniu-ui.umd.min.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "cross-env NODE_ENV=development vue-cli-service serve",
|
|
8
|
+
"build": "cross-env NODE_ENV=production vue-cli-service build",
|
|
9
|
+
"build:lib": "npm run style && vue-cli-service build --target lib --name xianniu-ui --dest lib src/index.js && cp-cli packages/style/lib lib/style && cp-cli packages/style/src/theme lib/style/theme",
|
|
10
|
+
"style": "gulp --gulpfile ./packages/style/gulpfile.js",
|
|
11
|
+
"play": "cross-env NODE_ENV=development PLAY_ENV=true vue-cli-service serve",
|
|
12
|
+
"deploy": "bash deploy.sh",
|
|
13
|
+
"lint": "vue-cli-service lint"
|
|
14
|
+
},
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"files": [
|
|
17
|
+
"lib",
|
|
18
|
+
"src",
|
|
19
|
+
"packages",
|
|
20
|
+
"plugins",
|
|
21
|
+
"public"
|
|
22
|
+
],
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"axios": "^0.26.0",
|
|
25
|
+
"core-js": "^3.6.5",
|
|
26
|
+
"dayjs": "^1.10.7",
|
|
27
|
+
"element-ui": "^2.15.10",
|
|
28
|
+
"good-storage": "^1.1.1",
|
|
29
|
+
"image-conversion": "^2.1.1",
|
|
30
|
+
"vue": "^2.6.11",
|
|
31
|
+
"vue-lottie": "^0.2.1",
|
|
32
|
+
"vue-router": "^3.2.0",
|
|
33
|
+
"vuex": "^3.6.2"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@babel/preset-env": "^7.16.7",
|
|
37
|
+
"@vue/cli-plugin-babel": "~4.5.0",
|
|
38
|
+
"@vue/cli-plugin-eslint": "~4.5.0",
|
|
39
|
+
"@vue/cli-plugin-router": "~4.5.0",
|
|
40
|
+
"@vue/cli-service": "~4.5.0",
|
|
41
|
+
"@vue/component-compiler-utils": "^2.6.0",
|
|
42
|
+
"babel-eslint": "^10.1.0",
|
|
43
|
+
"babel-plugin-component": "^1.1.1",
|
|
44
|
+
"babel-plugin-module-resolver": "^2.7.1",
|
|
45
|
+
"copy-webpack-plugin": "^5.1.2",
|
|
46
|
+
"cp-cli": "^2.0.0",
|
|
47
|
+
"cross-env": "^7.0.3",
|
|
48
|
+
"eslint": "^6.7.2",
|
|
49
|
+
"eslint-plugin-vue": "^6.2.2",
|
|
50
|
+
"highlight.js": "^9.3.0",
|
|
51
|
+
"html-loader": "^3.0.1",
|
|
52
|
+
"markdown-it": "^8.4.2",
|
|
53
|
+
"markdown-it-anchor": "^5.3.0",
|
|
54
|
+
"markdown-it-chain": "^1.3.0",
|
|
55
|
+
"markdown-it-container": "^2.0.0",
|
|
56
|
+
"markdown-loader": "^6.0.0",
|
|
57
|
+
"mini-css-extract-plugin": "^0.4.1",
|
|
58
|
+
"sass": "^1.32.6",
|
|
59
|
+
"sass-loader": "^8.0.2",
|
|
60
|
+
"transliteration": "^1.1.11",
|
|
61
|
+
"vue-template-compiler": "^2.6.11"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<!-- 城市联动 -->
|
|
3
|
+
<div class="xn-city">
|
|
4
|
+
<span v-if="showType === 'text'">{{ cityLabel }}</span>
|
|
5
|
+
<el-cascader
|
|
6
|
+
v-else-if="showType === 'form'"
|
|
7
|
+
ref="xnCity"
|
|
8
|
+
v-model="cityValue"
|
|
9
|
+
placeholder="请选择城市"
|
|
10
|
+
filterable
|
|
11
|
+
style="width: 100%"
|
|
12
|
+
:options="cityList"
|
|
13
|
+
:props="cityProps"
|
|
14
|
+
:disabled="disabled"
|
|
15
|
+
clearable
|
|
16
|
+
@change="handleChange"
|
|
17
|
+
/>
|
|
18
|
+
</div>
|
|
19
|
+
</template>
|
|
20
|
+
|
|
21
|
+
<script>
|
|
22
|
+
import citys from 'xn-ui/src/area/index.js'
|
|
23
|
+
// import tools from '../../../utils/index'
|
|
24
|
+
export default {
|
|
25
|
+
name: 'XnCity',
|
|
26
|
+
model: {
|
|
27
|
+
prop: 'value',
|
|
28
|
+
event: 'on-change'
|
|
29
|
+
},
|
|
30
|
+
props: {
|
|
31
|
+
disabled: {
|
|
32
|
+
type: Boolean,
|
|
33
|
+
default: false
|
|
34
|
+
},
|
|
35
|
+
/**
|
|
36
|
+
* 传入对应的城市code
|
|
37
|
+
* 区级 -> 省|市|区
|
|
38
|
+
* 市级 -> 省|市
|
|
39
|
+
* 省级 -> 省
|
|
40
|
+
*/
|
|
41
|
+
value: {
|
|
42
|
+
type: [String, Number, Object],
|
|
43
|
+
default: ''
|
|
44
|
+
},
|
|
45
|
+
valueKey: {
|
|
46
|
+
type: String,
|
|
47
|
+
default: ''
|
|
48
|
+
},
|
|
49
|
+
/**
|
|
50
|
+
* 显示级别
|
|
51
|
+
* 3 -> 省|市|区
|
|
52
|
+
* 2 -> 省|市
|
|
53
|
+
*/
|
|
54
|
+
showLevel: {
|
|
55
|
+
type: Number,
|
|
56
|
+
default: 3
|
|
57
|
+
},
|
|
58
|
+
/**
|
|
59
|
+
* 组件类型
|
|
60
|
+
* 静态显示 -> text
|
|
61
|
+
* 表单类型 -> form
|
|
62
|
+
*/
|
|
63
|
+
showType: {
|
|
64
|
+
type: String,
|
|
65
|
+
default: 'form'
|
|
66
|
+
},
|
|
67
|
+
dataLevel: {
|
|
68
|
+
type: Number,
|
|
69
|
+
default: 3
|
|
70
|
+
},
|
|
71
|
+
keyOptions: {
|
|
72
|
+
type: Object,
|
|
73
|
+
default: () => {
|
|
74
|
+
return {
|
|
75
|
+
codeKey: 'code',
|
|
76
|
+
labelKey: 'label'
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
data() {
|
|
82
|
+
return {
|
|
83
|
+
// "430000", "430200", "430203"
|
|
84
|
+
val: [],
|
|
85
|
+
cityList: [],
|
|
86
|
+
cityProps: {
|
|
87
|
+
label: 'cityName',
|
|
88
|
+
value: 'cityCode',
|
|
89
|
+
children: 'subCitys'
|
|
90
|
+
},
|
|
91
|
+
flattenResult: []
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
computed: {
|
|
95
|
+
// 根据code 获取对应的父级省市区label
|
|
96
|
+
cityLabel() {
|
|
97
|
+
const { value, showLevel, showType, valueKey } = this
|
|
98
|
+
let res = '--'
|
|
99
|
+
let _value = ''
|
|
100
|
+
valueKey ? _value = value[valueKey] : _value
|
|
101
|
+
if (showType === 'text' && value !== '') {
|
|
102
|
+
// if (!value) throw new Error("静态模式下请传入cityCode!");
|
|
103
|
+
const level = showLevel > 3 ? 3 : showLevel
|
|
104
|
+
res = this.findParent(_value, this.flattenResult)
|
|
105
|
+
.slice(0, level)
|
|
106
|
+
.map((item) => item.cityName)
|
|
107
|
+
.join(` | `)
|
|
108
|
+
}
|
|
109
|
+
return res
|
|
110
|
+
},
|
|
111
|
+
cityValue: {
|
|
112
|
+
set: function(n) {
|
|
113
|
+
this.val = n
|
|
114
|
+
},
|
|
115
|
+
get: function() {
|
|
116
|
+
const { value, valueKey } = this
|
|
117
|
+
const _value = valueKey ? value[valueKey] : value
|
|
118
|
+
const res = this.findParent(
|
|
119
|
+
_value,
|
|
120
|
+
this.flattenResult
|
|
121
|
+
)
|
|
122
|
+
.map((item) => item.cityCode)
|
|
123
|
+
|
|
124
|
+
return res
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
created() {
|
|
129
|
+
this.fnGetCitys()
|
|
130
|
+
},
|
|
131
|
+
methods: {
|
|
132
|
+
// 为所有数据添加父级pid
|
|
133
|
+
addParentKey(tree) {
|
|
134
|
+
const data = JSON.parse(JSON.stringify(tree)) // deepClone
|
|
135
|
+
function addParentKey(data, parentKey) {
|
|
136
|
+
data.forEach((item) => {
|
|
137
|
+
const { subCitys, cityCode } = item
|
|
138
|
+
item.parent = parentKey
|
|
139
|
+
if (subCitys) {
|
|
140
|
+
addParentKey(subCitys, cityCode)
|
|
141
|
+
}
|
|
142
|
+
})
|
|
143
|
+
}
|
|
144
|
+
addParentKey(data, null) // 一开始的时候是null
|
|
145
|
+
return data
|
|
146
|
+
},
|
|
147
|
+
/**
|
|
148
|
+
* @param {array} data 城市联动数据(带pid)
|
|
149
|
+
*/
|
|
150
|
+
flattenTreeData(data) {
|
|
151
|
+
const treeData = JSON.parse(JSON.stringify(data))
|
|
152
|
+
const flattenData = []
|
|
153
|
+
function flattenTree(data, parentKey) {
|
|
154
|
+
data.forEach((item) => {
|
|
155
|
+
const { cityName, cityCode, subCitys } = item
|
|
156
|
+
flattenData.push({ cityName, cityCode, parentKey })
|
|
157
|
+
if (subCitys) {
|
|
158
|
+
flattenTree(subCitys, cityCode)
|
|
159
|
+
}
|
|
160
|
+
})
|
|
161
|
+
}
|
|
162
|
+
flattenTree(treeData, null)
|
|
163
|
+
return flattenData
|
|
164
|
+
},
|
|
165
|
+
/**
|
|
166
|
+
* @param {string,number} cityCode 区县对应的code
|
|
167
|
+
* @param {array} flattenTree 扁平化后的城市数据
|
|
168
|
+
*/
|
|
169
|
+
findParent(cityCode, flattenTree) {
|
|
170
|
+
const parentArr = []
|
|
171
|
+
function find(cityCode, flattenTree) {
|
|
172
|
+
flattenTree.forEach((item) => {
|
|
173
|
+
// eslint-disable-next-line eqeqeq
|
|
174
|
+
if (item.cityCode == cityCode) {
|
|
175
|
+
parentArr.unshift(item)
|
|
176
|
+
find(item.parentKey, flattenTree)
|
|
177
|
+
}
|
|
178
|
+
})
|
|
179
|
+
}
|
|
180
|
+
find(cityCode, flattenTree)
|
|
181
|
+
return parentArr
|
|
182
|
+
},
|
|
183
|
+
// 接口获取城市联动数据
|
|
184
|
+
fnGetCitys() {
|
|
185
|
+
const _citys = this.$utils.deepClone(citys)
|
|
186
|
+
this.cityList = this.toTreeDataLevel(_citys)
|
|
187
|
+
this.flattenResult = this.flattenTreeData(
|
|
188
|
+
this.addParentKey(this.cityList)
|
|
189
|
+
)
|
|
190
|
+
},
|
|
191
|
+
// 给数据加上level并且去除最后一层空数据
|
|
192
|
+
toTreeDataLevel(data) {
|
|
193
|
+
if (!Array.isArray(data)) return []
|
|
194
|
+
const recursive = (data, level = 0) => {
|
|
195
|
+
level++
|
|
196
|
+
return data.map((item) => {
|
|
197
|
+
item.level = level
|
|
198
|
+
const child = item.subCitys
|
|
199
|
+
if (level >= 2 && this.dataLevel === 2) {
|
|
200
|
+
delete item.subCitys
|
|
201
|
+
}
|
|
202
|
+
if (child && child.length) {
|
|
203
|
+
recursive(child, level)
|
|
204
|
+
} else {
|
|
205
|
+
delete item.subCitys
|
|
206
|
+
}
|
|
207
|
+
return item
|
|
208
|
+
})
|
|
209
|
+
}
|
|
210
|
+
return recursive(data)
|
|
211
|
+
},
|
|
212
|
+
// 获取选中
|
|
213
|
+
handleChange(cityCode) {
|
|
214
|
+
// 返回数组形式 code和label
|
|
215
|
+
const cityName = this.handleTreeLabel(cityCode, this.cityList)
|
|
216
|
+
const city = this.handleTreeLabel(cityCode, this.cityList, 2)
|
|
217
|
+
const cityCodeLast = cityCode[cityCode.length - 1]
|
|
218
|
+
const cityNameLast = cityName[cityName.length - 1]
|
|
219
|
+
let value = ''
|
|
220
|
+
if (this.valueKey) {
|
|
221
|
+
value = city[city.length - 1]
|
|
222
|
+
} else {
|
|
223
|
+
value = cityCodeLast
|
|
224
|
+
}
|
|
225
|
+
this.$emit('on-change', value)
|
|
226
|
+
this.$emit('on-city', {
|
|
227
|
+
city,
|
|
228
|
+
cityCode,
|
|
229
|
+
cityName,
|
|
230
|
+
cityCodeLast,
|
|
231
|
+
cityNameLast
|
|
232
|
+
})
|
|
233
|
+
},
|
|
234
|
+
/**
|
|
235
|
+
* 根据城市code 获取对应的城市
|
|
236
|
+
* @param {Array} val 选中的城市code
|
|
237
|
+
* @param {Array} data 城市联动数据
|
|
238
|
+
*/
|
|
239
|
+
handleTreeLabel(val, data = [], type = 1) {
|
|
240
|
+
return val.map((item) => {
|
|
241
|
+
for (var itm of data) {
|
|
242
|
+
// eslint-disable-next-line eqeqeq
|
|
243
|
+
if (itm.cityCode == item) {
|
|
244
|
+
data = itm.subCitys
|
|
245
|
+
return type === 1
|
|
246
|
+
? itm.cityName
|
|
247
|
+
: {
|
|
248
|
+
[this.keyOptions.codeKey]: itm.cityCode,
|
|
249
|
+
[this.keyOptions.labelKey]: itm.cityName
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return null
|
|
254
|
+
})
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
</script>
|