xt-element-ui 1.2.4 → 1.2.6

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 (50) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/LICENSE +21 -0
  3. package/README.md +240 -104
  4. package/docs/README.md +100 -0
  5. package/docs/components/base/xt-button.md +114 -0
  6. package/docs/components/base/xt-card-item.md +104 -0
  7. package/docs/components/base/xt-card.md +108 -0
  8. package/docs/components/base/xt-config-provider.md +199 -0
  9. package/docs/components/base/xt-flex-box.md +115 -0
  10. package/docs/components/base/xt-grid-box.md +303 -0
  11. package/docs/components/base/xt-input.md +150 -0
  12. package/docs/components/base/xt-text.md +212 -0
  13. package/docs/components/extend/ex-bar.md +68 -0
  14. package/docs/components/extend/ex-button.md +62 -0
  15. package/docs/components/extend/ex-card.md +86 -0
  16. package/docs/components/extend/ex-chart.md +463 -0
  17. package/docs/components/extend/ex-icon.md +189 -0
  18. package/docs/components/extend/ex-line.md +71 -0
  19. package/docs/components/extend/ex-multi.md +156 -0
  20. package/docs/components/extend/ex-page.md +0 -0
  21. package/docs/components/extend/ex-pie.md +70 -0
  22. package/docs/components/extend/ex-select-tree.md +210 -0
  23. package/docs/components/extend/ex-table.md +591 -0
  24. package/docs/components/extend/ex-upload.md +134 -0
  25. package/docs/components/utils/size.md +148 -0
  26. package/docs/components/utils/theme.md +183 -0
  27. package/lib/index.common.js +640 -758
  28. package/lib/index.css +1 -1
  29. package/lib/index.umd.js +640 -758
  30. package/lib/index.umd.min.js +5 -5
  31. package/package.json +80 -39
  32. package/src/components/ex-chart/ExBar.vue +35 -29
  33. package/src/components/ex-chart/ExLine.vue +23 -14
  34. package/src/components/ex-chart/ExMulti.vue +66 -76
  35. package/src/components/ex-chart/ExPie.vue +26 -18
  36. package/src/components/ex-chart/index.vue +1 -4
  37. package/src/components/ex-chart/utils.js +149 -8
  38. package/src/components/ex-icon/index.js +2 -0
  39. package/src/components/ex-icon/index.vue +168 -0
  40. package/src/components/ex-icon/style/index.scss +7 -0
  41. package/src/components/ex-table/index.vue +3 -3
  42. package/src/components/index.scss +4 -1
  43. package/src/components/xt-card-item/images/bar.svg +1 -0
  44. package/src/components/xt-card-item/images/line.svg +1 -0
  45. package/src/components/xt-card-item/images/pie.svg +1 -0
  46. package/src/index.js +3 -0
  47. package/src/components/ex-chart/ExTrend.vue +0 -124
  48. package/src/components/ex-chart/theme/blue.js +0 -91
  49. package/src/components/ex-chart/theme/orange.js +0 -92
  50. package/src/components/ex-chart/theme/starry.js +0 -106
package/package.json CHANGED
@@ -1,39 +1,80 @@
1
- {
2
- "name": "xt-element-ui",
3
- "version": "1.2.4",
4
- "description": "基于 Vue2.7 + ElementUI 的组件库",
5
- "main": "lib/index.common.js",
6
- "module": "lib/index.esm.js",
7
- "unpkg": "lib/index.umd.min.js",
8
- "style": "lib/index.css",
9
- "scripts": {
10
- "docs:dev": "vuepress dev docs",
11
- "docs:build": "vuepress build docs",
12
- "dev": "vue-cli-service serve",
13
- "lib": "vue-cli-service build --target lib --name index --dest lib src/index.js",
14
- "prepublishOnly": "npm run lib"
15
- },
16
- "peerDependencies": {
17
- "vue": "^2.6.10"
18
- },
19
- "devDependencies": {
20
- "@vue/cli-service": "~4.5.19",
21
- "sass-loader": "^10.5.2",
22
- "vue": "^2.6.10",
23
- "vuepress": "^1.9.10",
24
- "vuepress-plugin-demo-container": "^0.2.0",
25
- "vuepress-theme-reco": "^1.6.17"
26
- },
27
- "files": [
28
- "lib",
29
- "src",
30
- "README.md"
31
- ],
32
- "dependencies": {
33
- "echarts": "^6.1.0",
34
- "element-ui": "^2.15.14",
35
- "sass": "^1.32.13",
36
- "vue-server-renderer": "^2.7.14",
37
- "xt-element-ui": "^1.2.1"
38
- }
39
- }
1
+ {
2
+ "name": "xt-element-ui",
3
+ "version": "1.2.6",
4
+ "description": "基于 Vue 2.7 + ElementUI 的企业级组件库,提供丰富的自定义组件和扩展组件",
5
+ "main": "lib/index.common.js",
6
+ "module": "lib/index.esm.js",
7
+ "unpkg": "lib/index.umd.min.js",
8
+ "style": "lib/index.css",
9
+ "scripts": {
10
+ "docs:dev": "vuepress dev docs",
11
+ "docs:build": "vuepress build docs",
12
+ "dev": "vue-cli-service serve",
13
+ "lib": "vue-cli-service build --target lib --name index --dest lib src/index.js",
14
+ "prepublishOnly": "npm run lib"
15
+ },
16
+ "peerDependencies": {
17
+ "vue": "^2.6.10"
18
+ },
19
+ "devDependencies": {
20
+ "@vue/cli-service": "~4.5.19",
21
+ "sass-loader": "^10.5.2",
22
+ "vue": "^2.6.10",
23
+ "vuepress": "^1.9.10",
24
+ "vuepress-plugin-demo-container": "^0.2.0",
25
+ "vuepress-theme-reco": "^1.6.17"
26
+ },
27
+ "files": [
28
+ "lib",
29
+ "src",
30
+ "README.md",
31
+ "CHANGELOG.md",
32
+ "docs/components/**/*md",
33
+ "docs/README.md"
34
+ ],
35
+ "dependencies": {
36
+ "echarts": "^6.1.0",
37
+ "element-ui": "^2.15.14",
38
+ "sass": "^1.32.13",
39
+ "vue-server-renderer": "^2.7.14"
40
+ },
41
+ "keywords": [
42
+ "vue",
43
+ "vue2",
44
+ "element-ui",
45
+ "element",
46
+ "ui",
47
+ "components",
48
+ "xt-element-ui",
49
+ "chart",
50
+ "table",
51
+ "echarts",
52
+ "component-library",
53
+ "vue-components",
54
+ "admin",
55
+ "dashboard"
56
+ ],
57
+ "author": "XT-Element-UI Contributors",
58
+ "license": "MIT",
59
+ "bugs": {
60
+ "url": "https://github.com/JobWebNie/xt-element-ui/issues"
61
+ },
62
+ "homepage": "https://JobWebNie.github.io/xt-element-ui/",
63
+ "repository": {
64
+ "type": "git",
65
+ "url": "git+https://github.com/JobWebNie/xt-element-ui.git"
66
+ },
67
+ "engines": {
68
+ "node": ">=12.0.0",
69
+ "npm": ">=6.0.0"
70
+ },
71
+ "browserslist": [
72
+ "> 1%",
73
+ "last 2 versions",
74
+ "not dead",
75
+ "Chrome >= 60",
76
+ "Firefox >= 60",
77
+ "Safari >= 10.1",
78
+ "Edge >= 15"
79
+ ]
80
+ }
@@ -10,16 +10,16 @@ export default {
10
10
  type: Array,
11
11
  default: () => {
12
12
  return [
13
- { value: 65, name: "吴十" },
14
- { value: 70, name: "唐九" },
15
- { value: 73, name: "钱一" },
16
- { value: 78, name: "孙二" },
17
- { value: 88, name: "刘八" },
18
- { value: 93, name: "王七" },
19
- { value: 99, name: "赵六" },
20
- { value: 103, name: "宋五" },
21
- { value: 113, name: "李四" },
22
- { value: 125, name: "张三" }
13
+ { value: 65, label: "吴十" },
14
+ { value: 70, label: "唐九" },
15
+ { value: 73, label: "钱一" },
16
+ { value: 78, label: "孙二" },
17
+ { value: 88, label: "刘八" },
18
+ { value: 93, label: "王七" },
19
+ { value: 99, label: "赵六" },
20
+ { value: 103, label: "宋五" },
21
+ { value: 113, label: "李四" },
22
+ { value: 125, label: "张三" }
23
23
  ];
24
24
  }
25
25
  },
@@ -28,15 +28,15 @@ export default {
28
28
  type: String,
29
29
  default: "medium"
30
30
  },
31
- // name: {
32
- // type: String,
33
- // default: ""
34
- // },
31
+ fieldKeys: {
32
+ type: Object,
33
+ default: () => ({ label: "label", value: "value", data: "data" })
34
+ },
35
35
  markPoint: {
36
36
  type: Boolean,
37
37
  default: false
38
38
  },
39
- energyType: {
39
+ unit: {
40
40
  type: String,
41
41
  default: ""
42
42
  },
@@ -48,7 +48,7 @@ export default {
48
48
  type: Boolean,
49
49
  default: false
50
50
  },
51
- longLable: { // 名称占50% 的 grid值
51
+ longLable: {
52
52
  type: Boolean,
53
53
  default: false
54
54
  },
@@ -63,6 +63,10 @@ export default {
63
63
  splitNumber: {
64
64
  type: Number,
65
65
  default: 5
66
+ },
67
+ simpleMode: {
68
+ type: Boolean,
69
+ default: false
66
70
  }
67
71
  },
68
72
  data() {
@@ -79,15 +83,10 @@ export default {
79
83
  _self.initChart();
80
84
  }
81
85
  },
82
- energyType: {
86
+ unit: {
83
87
  deep: true,
84
88
  handler(newVal, oldVal) {
85
89
  const _self = this;
86
- if (newVal == "kW.h") {
87
- _self.name = "用电量";
88
- } else if (newVal == "m³") {
89
- _self.name = "用气量";
90
- }
91
90
  _self.initChart();
92
91
  }
93
92
  },
@@ -101,7 +100,10 @@ export default {
101
100
  methods: {
102
101
  initChart() {
103
102
  const _self = this;
104
- // 数据处理
103
+ const keys = Object.assign(
104
+ { label: "label", value: "value", data: "data" },
105
+ _self.fieldKeys || {}
106
+ );
105
107
  const _xAxis = {
106
108
  type: "category",
107
109
  inverse: this.reverse,
@@ -112,7 +114,7 @@ export default {
112
114
  }
113
115
  },
114
116
  data: _self.chartData.map((item) => {
115
- return item.name;
117
+ return item[keys.label];
116
118
  })
117
119
  };
118
120
  const _yAxis = {
@@ -166,8 +168,8 @@ export default {
166
168
  },
167
169
  xAxis: this.reverse ? _yAxis : _xAxis,
168
170
  yAxis: this.reverse ? _xAxis : _yAxis,
169
- series: [{
170
- name: _self.name,
171
+ series: {
172
+ name: _self.unit,
171
173
  type: "bar",
172
174
  markPoint: {
173
175
  data: [
@@ -177,21 +179,25 @@ export default {
177
179
  },
178
180
  avoidLabelOverlap: true,
179
181
  data: _self.chartData.map((item, ind) => {
180
- const { name, value } = item;
182
+ const label = item[keys.label];
183
+ const value = item[keys.value];
181
184
  return {
182
185
  value,
183
- name,
186
+ name: label,
184
187
  tooltip: {
185
188
  borderWidth: 1
186
189
  }
187
190
  };
188
191
  })
189
- }],
192
+ },
190
193
  dataZoom: _self.showZoom ? [{ height: 20, bottom: 0 }] : [],
191
194
  };
192
195
  if (!this.markPoint) {
193
196
  this.$delete(option.series[0], "markPoint");
194
197
  }
198
+ if (this.simpleMode) {
199
+ EchartsUtil.applySimpleMode(option, "bar");
200
+ }
195
201
  this.myChart = EchartsUtil.init(_self.$refs.barchart, this.theme, option, this.size);
196
202
  }
197
203
  }
@@ -6,10 +6,6 @@ import EchartsUtil from "./utils";
6
6
  export default {
7
7
  name: "XtLine",
8
8
  props: {
9
- isDark: {
10
- type: Boolean, // 设置文字标线为白色系
11
- default: false
12
- },
13
9
  theme: {},
14
10
  size: {
15
11
  type: String,
@@ -19,23 +15,31 @@ export default {
19
15
  type: Array,
20
16
  default: () => {
21
17
  return [
22
- { value: 53, name: "张三" },
23
- { value: 10, name: "李四" },
24
- { value: 60, name: "宋五" }
18
+ { value: 53, label: "张三" },
19
+ { value: 10, label: "李四" },
20
+ { value: 60, label: "宋五" }
25
21
  ];
26
22
  }
27
23
  },
24
+ fieldKeys: {
25
+ type: Object,
26
+ default: () => ({ label: "label", value: "value", data: "data" })
27
+ },
28
28
  isArea: {
29
29
  type: Boolean,
30
30
  default: false
31
31
  },
32
- energyType: {
32
+ unit: {
33
33
  type: String,
34
34
  default: ""
35
35
  },
36
36
  intervalvalue: {
37
37
  type: Number,
38
38
  default: 0
39
+ },
40
+ simpleMode: {
41
+ type: Boolean,
42
+ default: false
39
43
  }
40
44
  },
41
45
  data() {
@@ -51,7 +55,7 @@ export default {
51
55
  _self.initChart();
52
56
  }
53
57
  },
54
- energyType: {
58
+ unit: {
55
59
  deep: true,
56
60
  handler(newVal, oldVal) {
57
61
  const _self = this;
@@ -67,9 +71,11 @@ export default {
67
71
  },
68
72
  methods: {
69
73
  initChart() {
70
- console.log(this.intervalvalue);
71
74
  const _self = this;
72
- // 数据处理
75
+ const keys = Object.assign(
76
+ { label: "label", value: "value", data: "data" },
77
+ _self.fieldKeys || {}
78
+ );
73
79
  const option = {
74
80
  animationDuration: 500,
75
81
  grid: {
@@ -91,7 +97,7 @@ export default {
91
97
  },
92
98
  boundaryGap: false,
93
99
  data: _self.chartData.map((item) => {
94
- return item.name;
100
+ return item[keys.label];
95
101
  })
96
102
  }],
97
103
  yAxis: {
@@ -109,7 +115,7 @@ export default {
109
115
  type: "dashed"
110
116
  }
111
117
  },
112
- name: _self.energyType,
118
+ name: _self.unit,
113
119
  scale: true,
114
120
  axisLabel: {
115
121
  margin: 2,
@@ -130,11 +136,14 @@ export default {
130
136
  smooth: true,
131
137
  avoidLabelOverlap: true,
132
138
  data: _self.chartData.map((item, ind) => {
133
- return item.value;
139
+ return item[keys.value];
134
140
  })
135
141
  }]
136
142
  };
137
143
 
144
+ if (this.simpleMode) {
145
+ EchartsUtil.applySimpleMode(option, "line");
146
+ }
138
147
  this.myChart = EchartsUtil.init(_self.$refs.linechart, this.theme, option, this.size);
139
148
  }
140
149
  }
@@ -6,15 +6,20 @@ import EchartsUtil from "./utils";
6
6
  export default {
7
7
  name: "XtMulti",
8
8
  props: {
9
- isDark: {
10
- type: Boolean, // 设置文字标线为白色系
11
- default: false
12
- },
13
9
  theme: {},
14
10
  size: {
15
11
  type: String,
16
12
  default: "medium"
17
13
  },
14
+ fieldKeys: {
15
+ type: Object,
16
+ default: () => ({ label: "label", value: "value", data: "data" })
17
+ },
18
+ simpleMode: {
19
+ type: Boolean,
20
+ default: false
21
+ },
22
+ highlightKey: String,
18
23
  config: {
19
24
  type: Object,
20
25
  default() {
@@ -23,7 +28,6 @@ export default {
23
28
  rotate: 0,
24
29
  gridbottom: 40,
25
30
  isShowthreshold: false
26
-
27
31
  };
28
32
  }
29
33
  },
@@ -33,6 +37,7 @@ export default {
33
37
  return [
34
38
  {
35
39
  label: "入户数",
40
+ unit: "户",
36
41
  data: [
37
42
  { label: "01月", value: 980 },
38
43
  { label: "02月", value: 806 },
@@ -50,6 +55,7 @@ export default {
50
55
  },
51
56
  {
52
57
  label: "隐患数",
58
+ unit: "个",
53
59
  data: [
54
60
  { label: "01月", value: 200 },
55
61
  { label: "02月", value: 120 },
@@ -67,6 +73,7 @@ export default {
67
73
  },
68
74
  {
69
75
  label: "整改数",
76
+ unit: "个",
70
77
  data: [
71
78
  { label: "01月", value: 25 },
72
79
  { label: "02月", value: 19 },
@@ -88,20 +95,11 @@ export default {
88
95
  colors: {
89
96
  type: Array,
90
97
  default: () => { return []; }
91
- },
92
- selectedNew: {
93
- type: Object,
94
- default: null
95
- },
96
- energyType: {
97
- type: [String, Array],
98
- default: ""
99
98
  }
100
99
  },
101
100
  data() {
102
101
  return {
103
102
  myChart: null
104
- // chartList: []
105
103
  };
106
104
  },
107
105
  watch: {
@@ -114,18 +112,6 @@ export default {
114
112
  _self.initChart();
115
113
  }
116
114
  },
117
- energyType: {
118
- deep: true,
119
- handler(newVal, oldVal) {
120
- if (newVal && oldVal && newVal.toString() == oldVal.toString()) {
121
- return;
122
- }
123
- this.myChart && this.myChart.dispose();
124
- this.myChart = null;
125
- const _self = this;
126
- _self.initChart();
127
- }
128
- },
129
115
  theme(newVal) {
130
116
  this.myChart && this.myChart.dispose();
131
117
  this.myChart = null;
@@ -138,24 +124,27 @@ export default {
138
124
  methods: {
139
125
  initChart() {
140
126
  const _self = this;
141
- // 数据处理
142
- const groupYAxis = (unit) => {
143
- return {
127
+ const keys = Object.assign(
128
+ { label: "label", value: "value", data: "data" },
129
+ _self.fieldKeys || {}
130
+ );
131
+
132
+ // 从 chartData 中收集所有 unit,并保持首次出现顺序去重
133
+ const uniqueUnits = [];
134
+ (_self.chartData || []).forEach(item => {
135
+ const u = item.unit || "";
136
+ if (uniqueUnits.indexOf(u) === -1) {
137
+ uniqueUnits.push(u);
138
+ }
139
+ });
140
+
141
+ const groupYAxis = (unit, index) => {
142
+ const yAxis = {
144
143
  type: "value",
145
144
  name: unit,
146
- axisLine: {
147
- show: false,
148
- lineStyle: {
149
- }
150
- },
151
- axisTick: {
152
- show: false
153
- },
154
- splitLine: {
155
- lineStyle: {
156
- type: "dashed"
157
- }
158
- },
145
+ axisLine: { show: false, lineStyle: {} },
146
+ axisTick: { show: false },
147
+ splitLine: { lineStyle: { type: "dashed" } },
159
148
  axisLabel: {
160
149
  formatter: function(value, index) {
161
150
  if (value >= 10000 && value < 10000000) {
@@ -167,20 +156,35 @@ export default {
167
156
  }
168
157
  }
169
158
  };
159
+ if (index > 0) {
160
+ yAxis.position = "right";
161
+ yAxis.splitLine = { show: false };
162
+ }
163
+ return yAxis;
170
164
  };
165
+
166
+ const yAxisList = uniqueUnits.length
167
+ ? uniqueUnits.map((unit, idx) => groupYAxis(unit, idx))
168
+ : [groupYAxis("", 0)];
169
+
170
+ const unitToYAxisIndex = {};
171
+ uniqueUnits.forEach((unit, idx) => {
172
+ unitToYAxisIndex[unit] = idx;
173
+ });
174
+
175
+ const firstSeriesData = _self.chartData && _self.chartData.length
176
+ ? _self.chartData[0][keys.data] || []
177
+ : [];
178
+
171
179
  const option = {
172
180
  legend: {
173
181
  right: 20,
174
182
  top: 0,
175
183
  show: true,
176
184
  data: _self.chartData.map((item) => {
177
- return item.label;
185
+ return item[keys.label];
178
186
  }),
179
- selectedMode: "multiple",
180
- selected: _self.selectedNew,
181
- textStyle: {
182
- fontSize: 12
183
- }
187
+ textStyle: {}
184
188
  },
185
189
  tooltip: {
186
190
  borderWidth: 1,
@@ -197,20 +201,14 @@ export default {
197
201
  },
198
202
  xAxis: {
199
203
  type: "category",
200
- // splitLine: {
201
- // show: true,
202
- // lineStyle: {
203
- // type: "dashed"
204
- // }
205
- // },
206
204
  axisLabel: {
207
205
  rotate: this.config.rotate
208
206
  },
209
- data: _self.chartData && _self.chartData.length ? _self.chartData[0].data.map((item) => {
210
- return item.label;
211
- }) : []
207
+ data: firstSeriesData.map((item) => {
208
+ return item[keys.label];
209
+ })
212
210
  },
213
- yAxis: typeof _self.energyType == "string" ? groupYAxis(_self.energyType) : this.energyType.map(unit => groupYAxis(unit)),
211
+ yAxis: yAxisList,
214
212
  dataZoom: [
215
213
  {
216
214
  type: "inside",
@@ -219,33 +217,25 @@ export default {
219
217
  end: 100
220
218
  }
221
219
  ],
222
- series: this.getSeriesData()
220
+ series: this.getSeriesData(unitToYAxisIndex, keys)
223
221
  };
222
+ if (this.simpleMode) {
223
+ EchartsUtil.applySimpleMode(option, "multi");
224
+ }
224
225
  this.myChart = EchartsUtil.init(_self.$refs.multilinechart, this.theme, option, this.size);
225
226
  },
226
- getSeriesData() {
227
- // 创建 24小时 时间数据填充对象
227
+ getSeriesData(unitToYAxisIndex, keys) {
228
228
  const _self = this;
229
-
230
229
  const _seriesData = [];
231
- _self.chartData.map((item, ind) => {
232
- // debugger;
233
- const _isNUll = item.data.some(it => !it.value || it.value == "--");
234
- const _itemNull = {
235
- type: "",
236
- name: item.label,
237
- connectNulls: true, // 断点连线,true-连接,false-不连接
238
- data: item.data.map(it => it.value),
239
- tooltip: {
240
- show: false
241
- }
242
- };
230
+ _self.chartData.forEach((item, ind) => {
231
+ const seriesItems = item[keys.data] || [];
243
232
  const _item = {
244
233
  animation: true,
245
- name: item.label,
234
+ name: item[keys.label],
246
235
  type: item.type || "bar",
247
236
  avoidLabelOverlap: true,
248
- data: item.data.map(it => it.value)
237
+ data: seriesItems.map(it => it[keys.value]),
238
+ yAxisIndex: unitToYAxisIndex[item.unit || ""] != null ? unitToYAxisIndex[item.unit || ""] : 0
249
239
  };
250
240
  _seriesData.push(_item);
251
241
  });