@v2coding/ui 0.1.0

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 (49) hide show
  1. package/README.md +6 -0
  2. package/dist/v2coding-ui.esm.js +10840 -0
  3. package/dist/v2coding-ui.min.js +1 -0
  4. package/dist/v2coding-ui.ssr.js +10747 -0
  5. package/package.json +54 -0
  6. package/src/components/dialog/dialog.vue +179 -0
  7. package/src/components/drawer/drawer.vue +523 -0
  8. package/src/components/exports/index.vue +53 -0
  9. package/src/components/exports/remote-exports-dialog.vue +202 -0
  10. package/src/components/field/field.autocomplete.vue +21 -0
  11. package/src/components/field/field.calendar.vue +117 -0
  12. package/src/components/field/field.cascade.vue +233 -0
  13. package/src/components/field/field.checkbox.vue +134 -0
  14. package/src/components/field/field.color.vue +24 -0
  15. package/src/components/field/field.date.vue +145 -0
  16. package/src/components/field/field.icons.vue +123 -0
  17. package/src/components/field/field.number.vue +43 -0
  18. package/src/components/field/field.radio.vue +100 -0
  19. package/src/components/field/field.rate.vue +37 -0
  20. package/src/components/field/field.rich.vue +165 -0
  21. package/src/components/field/field.select.vue +210 -0
  22. package/src/components/field/field.slider.vue +66 -0
  23. package/src/components/field/field.switch.vue +14 -0
  24. package/src/components/field/field.text.vue +66 -0
  25. package/src/components/field/field.timepicker.vue +70 -0
  26. package/src/components/field/field.timeselect.vue +24 -0
  27. package/src/components/field/field.trigger.dialog.vue +50 -0
  28. package/src/components/field/field.trigger.popover.vue +63 -0
  29. package/src/components/field/field.upload.file.vue +241 -0
  30. package/src/components/field/field.upload.image.vue +125 -0
  31. package/src/components/field/field.upload.portrait.vue +304 -0
  32. package/src/components/fill-view/index.vue +43 -0
  33. package/src/components/form/form.dialog.vue +174 -0
  34. package/src/components/form/form.drawer.vue +246 -0
  35. package/src/components/form/form.fieldset.vue +110 -0
  36. package/src/components/form/form.item.vue +213 -0
  37. package/src/components/form/form.vue +293 -0
  38. package/src/components/head-menu/index.vue +188 -0
  39. package/src/components/head-menu/menu-item.vue +84 -0
  40. package/src/components/history/index.vue +360 -0
  41. package/src/components/icon/icon.vue +63 -0
  42. package/src/components/minimize/index.vue +342 -0
  43. package/src/components/page/page.vue +43 -0
  44. package/src/components/provider/provider.vue +15 -0
  45. package/src/components/scroll-view/scroll-view.vue +384 -0
  46. package/src/components/table/column.vue +262 -0
  47. package/src/components/table/table.pagination.vue +71 -0
  48. package/src/components/table/table.select.vue +165 -0
  49. package/src/components/table/table.vue +805 -0
@@ -0,0 +1,165 @@
1
+ <template>
2
+ <ui-form
3
+ ref="form"
4
+ class="ui-table-select"
5
+ :class="{'has-reset': reset}"
6
+ v-bind="$attrs"
7
+ v-on="listeners"
8
+ inline
9
+ :label-width="labelWidth"
10
+ @submit="onSubmit"
11
+ @ready="onReady"
12
+ >
13
+ <slot></slot>
14
+ <slot name="submit-item">
15
+ <el-form-item class="submit-item">
16
+ <el-button type="primary" icon="el-icon-search" native-type="submit">查询</el-button>
17
+ <el-button v-if="reset" icon="el-icon-refresh-left" native-type="reset">重置</el-button>
18
+ </el-form-item>
19
+ </slot>
20
+ <slot name="append"></slot>
21
+ <div class="fill"></div>
22
+ <slot name="end"></slot>
23
+ </ui-form>
24
+ </template>
25
+ <script>
26
+ import TableSelectItem from './table.select.item';
27
+
28
+ const SEARCH_PREFIX = 'select';
29
+ const SORT_PREFIX = 'sort';
30
+
31
+ export default {
32
+ name: 'ui-table-select',
33
+ inject: {
34
+ uiTable: {
35
+ default: null,
36
+ },
37
+ },
38
+ props: {
39
+ reset: {
40
+ type: Boolean,
41
+ default: false,
42
+ },
43
+ beforeSearch: {
44
+ type: Function,
45
+ default: (param) => param,
46
+ },
47
+ labelWidth: {
48
+ type: String,
49
+ default: '',
50
+ },
51
+ },
52
+ computed: {
53
+ listeners() {
54
+ // eslint-disable-next-line
55
+ const {submit, ready, ...listeners} = this.$listeners;
56
+ return listeners;
57
+ },
58
+ },
59
+ created() {
60
+ this.uiTable && this.uiTable.registerSearchBar(this);
61
+ },
62
+ methods: {
63
+ onReady() {
64
+ this.$emit('ready');
65
+ if (this.uiTable && this.uiTable.initLoad) {
66
+ this.onSubmit(this.$refs.form.getValues());
67
+ }
68
+ },
69
+ onSubmit(formData) {
70
+ let searchParam = this.getSearchParams();
71
+ searchParam = this.beforeSearch(searchParam, formData);
72
+ if (!searchParam) {
73
+ return;
74
+ }
75
+ if (this.uiTable) {
76
+ this.uiTable.resetTableParams();
77
+ this.uiTable.reload();
78
+ }
79
+ this.$emit('submit', formData);
80
+ this.$emit('search', {...searchParam});
81
+ },
82
+ getValues() {
83
+ return this.$refs.form.getValues();
84
+ },
85
+ getSearchParams() {
86
+ const searchItems = this.getSearchItem();
87
+ return searchItems.reduce((prev, item) => {
88
+ const val = item.fieldValue;
89
+ const value = Object.is(undefined, val) ? val : String(val);
90
+ if (['null', null, '', undefined].includes(value)) {
91
+ return prev;
92
+ }
93
+ if (item.select === 'range') {
94
+ this.setRangeSearchItem(prev, item);
95
+ } else {
96
+ // 注: 若是 sort 则 params[item.name] 需要返回 asc/desc (ui-table-select-item 的值)
97
+ // search.name.eq=xxxxx
98
+ prev[this.getSearchItemKey(item)] = val;
99
+ }
100
+ return prev;
101
+ }, {});
102
+ },
103
+ getSearchItem() {
104
+ const listSearchItem = (items) => {
105
+ return items.reduce((results, item) => {
106
+ if (item.$options.name === TableSelectItem.name) {
107
+ if (item.ignore === false) {
108
+ results.push(item);
109
+ }
110
+ } else {
111
+ results.push(...listSearchItem(item.$children || []));
112
+ }
113
+ return results;
114
+ }, []);
115
+ };
116
+ return listSearchItem(this.$children);
117
+ },
118
+ getSearchItemKey(searchItem) {
119
+ if (searchItem.select) {
120
+ return [SEARCH_PREFIX, searchItem.name, searchItem.select].join('.');
121
+ }
122
+ if (searchItem.sort) {
123
+ return [SORT_PREFIX, searchItem.name].join('.');
124
+ }
125
+ return searchItem.name;
126
+ },
127
+ setRangeSearchItem(params, item) {
128
+ const [minValue, maxValue] = item.fieldValue.split(',');
129
+ const [minAppendKey, maxAppendKey] = item.range;
130
+ const {min, max} = item.rangeNames || {};
131
+ params[`${SEARCH_PREFIX}.${min || item.name}.${minAppendKey}`] = minValue;
132
+ params[`${SEARCH_PREFIX}.${max || item.name}.${maxAppendKey}`] = maxValue;
133
+ },
134
+ },
135
+ };
136
+ </script>
137
+ <style>
138
+ .ui-table-select {
139
+ display: flex;
140
+ align-items: center;
141
+ flex-wrap: wrap;
142
+ }
143
+
144
+ .ui-table-select .el-row {
145
+ width: 100%;
146
+ }
147
+
148
+ .ui-table-select .fill {
149
+ flex: 1;
150
+ }
151
+
152
+ .ui-table-select .el-form-item {
153
+ margin-bottom: 10px;
154
+ }
155
+
156
+ .ui-table-select .el-form-item:last-child {
157
+ margin-right: 0;
158
+ }
159
+
160
+
161
+ .ui-table-select .el-form-item,
162
+ .ui-table-select .el-form-item.el-form-item--mini {
163
+ margin-bottom: 10px;
164
+ }
165
+ </style>