xianniu-ui 0.1.3 → 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.
Files changed (81) hide show
  1. package/lib/style/basic.css +1 -0
  2. package/lib/style/city.css +1 -0
  3. package/lib/style/date.css +1 -0
  4. package/lib/style/flex.css +1 -0
  5. package/lib/style/import.css +1 -0
  6. package/lib/style/index.css +1 -1
  7. package/{src → lib/style}/theme/element-variables.scss +2 -4
  8. package/{src → lib/style}/theme/index.scss +0 -0
  9. package/{src → lib/style}/theme/mixin.scss +0 -0
  10. package/{src → lib/style}/theme/sidebar.scss +0 -0
  11. package/lib/style/theme/theme.scss +4 -0
  12. package/{src → lib/style}/theme/transition.scss +0 -0
  13. package/{src → lib/style}/theme/variables.scss +0 -0
  14. package/lib/style/upload.css +1 -0
  15. package/lib/xianniu-ui.common.js +25504 -18072
  16. package/lib/xianniu-ui.css +1 -0
  17. package/lib/xianniu-ui.umd.js +25508 -18076
  18. package/lib/xianniu-ui.umd.min.js +1 -9
  19. package/package.json +63 -62
  20. package/packages/city/index.js +7 -0
  21. package/packages/city/main.vue +258 -0
  22. package/packages/date/index.js +7 -0
  23. package/packages/date/main.vue +348 -0
  24. package/packages/dialog/!main.vue +90 -0
  25. package/packages/dialog/main.vue +37 -57
  26. package/packages/drawer/index.js +7 -0
  27. package/packages/drawer/main.vue +65 -0
  28. package/packages/empty/index.js +7 -0
  29. package/packages/empty/main.vue +33 -0
  30. package/packages/export/index.js +7 -0
  31. package/packages/export/main.vue +99 -0
  32. package/packages/import/index.js +7 -0
  33. package/packages/import/main.vue +135 -0
  34. package/packages/inputRange/index.js +7 -0
  35. package/packages/inputRange/main.vue +15 -0
  36. package/packages/page/main.vue +5 -5
  37. package/packages/search/index.js +7 -0
  38. package/packages/search/main.vue +230 -0
  39. package/packages/style/lib/basic.css +1 -0
  40. package/packages/style/lib/city.css +1 -0
  41. package/packages/style/lib/date.css +1 -0
  42. package/packages/style/lib/flex.css +1 -0
  43. package/packages/style/lib/import.css +1 -0
  44. package/packages/style/lib/index.css +1 -1
  45. package/packages/style/lib/upload.css +1 -0
  46. package/packages/style/src/basic.scss +64 -0
  47. package/packages/style/src/city.scss +3 -0
  48. package/packages/style/src/date.scss +5 -0
  49. package/packages/style/src/flex.scss +74 -0
  50. package/packages/style/src/import.scss +37 -0
  51. package/packages/style/src/index.scss +9 -1
  52. package/packages/style/src/mixin/mixin.scss +270 -0
  53. package/packages/style/src/search.scss +17 -0
  54. package/packages/style/src/table.scss +36 -4
  55. package/packages/style/src/theme/element-variables.scss +26 -0
  56. package/packages/style/src/theme/index.scss +1 -0
  57. package/packages/style/src/theme/mixin.scss +270 -0
  58. package/packages/style/src/theme/sidebar.scss +271 -0
  59. package/packages/style/src/theme/theme.scss +4 -0
  60. package/packages/style/src/theme/transition.scss +52 -0
  61. package/packages/style/src/theme/variables.scss +36 -0
  62. package/packages/style/src/tip.scss +22 -0
  63. package/packages/style/src/tree.scss +87 -0
  64. package/packages/style/src/upload.scss +46 -0
  65. package/packages/table/column.vue +42 -23
  66. package/packages/table/main.vue +126 -35
  67. package/packages/tip/index.js +7 -0
  68. package/packages/tip/main.vue +22 -0
  69. package/packages/tree/index.js +7 -0
  70. package/packages/tree/main.vue +192 -0
  71. package/packages/upload/index.js +7 -0
  72. package/packages/upload/main.vue +346 -0
  73. package/packages/upload/upload-pop.vue +49 -0
  74. package/packages/upload/upload-slot.vue +0 -0
  75. package/src/index.js +23 -3
  76. package/src/plugins/index.js +1 -1
  77. package/src/utils/format.js +119 -106
  78. package/src/utils/index.js +0 -2
  79. package/src/utils/reg.js +7 -1
  80. package/src/utils/utils.js +76 -10
  81. package/src/utils/lodash.js +0 -2
package/package.json CHANGED
@@ -1,62 +1,63 @@
1
- {
2
- "name": "xianniu-ui",
3
- "version": "0.1.3",
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",
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
- "core-js": "^3.6.5",
25
- "dayjs": "^1.10.7",
26
- "element-ui": "^2.15.6",
27
- "good-storage": "^1.1.1",
28
- "lodash": "^4.17.21",
29
- "vue": "^2.6.11",
30
- "vue-lottie": "^0.2.1",
31
- "vue-router": "^3.2.0",
32
- "vuex": "^3.6.2"
33
- },
34
- "devDependencies": {
35
- "@babel/preset-env": "^7.16.7",
36
- "@vue/cli-plugin-babel": "~4.5.0",
37
- "@vue/cli-plugin-eslint": "~4.5.0",
38
- "@vue/cli-plugin-router": "~4.5.0",
39
- "@vue/cli-service": "~4.5.0",
40
- "@vue/component-compiler-utils": "^2.6.0",
41
- "babel-eslint": "^10.1.0",
42
- "babel-plugin-component": "^1.1.1",
43
- "babel-plugin-module-resolver": "^2.7.1",
44
- "copy-webpack-plugin": "^5.1.2",
45
- "cp-cli": "^2.0.0",
46
- "cross-env": "^7.0.3",
47
- "eslint": "^6.7.2",
48
- "eslint-plugin-vue": "^6.2.2",
49
- "highlight.js": "^9.3.0",
50
- "html-loader": "^3.0.1",
51
- "markdown-it": "^8.4.2",
52
- "markdown-it-anchor": "^5.3.0",
53
- "markdown-it-chain": "^1.3.0",
54
- "markdown-it-container": "^2.0.0",
55
- "markdown-loader": "^6.0.0",
56
- "mini-css-extract-plugin": "^0.4.1",
57
- "sass": "^1.32.6",
58
- "sass-loader": "^8.0.2",
59
- "transliteration": "^1.1.11",
60
- "vue-template-compiler": "^2.6.11"
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,7 @@
1
+ import XnCity from './main.vue'
2
+
3
+ XnCity.install = function (Vue) {
4
+ Vue.component(XnCity.name, XnCity)
5
+ }
6
+
7
+ export default XnCity
@@ -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>
@@ -0,0 +1,7 @@
1
+ import XnDate from './main.vue'
2
+
3
+ XnDate.install = function (Vue) {
4
+ Vue.component(XnDate.name, XnDate)
5
+ }
6
+
7
+ export default XnDate