olp-table 5.3.1 → 5.3.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 (171) hide show
  1. package/.env.build +1 -0
  2. package/README.md +26 -0
  3. package/babel.config.js +5 -0
  4. package/jsconfig.json +22 -0
  5. package/{olp-table.common.js → olp-table/olp-table.common.js} +5 -5
  6. package/{olp-table.umd.js → olp-table/olp-table.umd.js} +5 -5
  7. package/{olp-table.umd.min.js → olp-table/olp-table.umd.min.js} +3 -3
  8. package/package.json +92 -12
  9. package/public/favicon.ico +0 -0
  10. package/public/index.html +17 -0
  11. package/rmMode.bat +1 -0
  12. package/src/App.vue +199 -0
  13. package/src/api/crud.js +22 -0
  14. package/src/api/dist.js +6 -0
  15. package/src/assets/iconfont/iconfont.css +20 -0
  16. package/src/assets/iconfont/iconfont.json +16 -0
  17. package/src/assets/iconfont/iconfont.ttf +0 -0
  18. package/src/assets/iconfont/iconfont.woff +0 -0
  19. package/src/assets/iconfont/iconfont.woff2 +0 -0
  20. package/src/assets/logo.png +0 -0
  21. package/src/components/auto-height/index.vue +75 -0
  22. package/src/components/codemirror-tag.vue +100 -0
  23. package/src/components/lazy-load-select.vue +107 -0
  24. package/src/components/ol-dialog-excel.vue +112 -0
  25. package/src/components/ol-dialog-import.vue +304 -0
  26. package/src/components/ol-dialog-json.vue +82 -0
  27. package/src/components/ol-dialog-table.vue +81 -0
  28. package/src/components/ol-dialog-upload-file.vue +208 -0
  29. package/src/components/ol-dict-tag.vue +271 -0
  30. package/src/components/ol-select-dom.vue +71 -0
  31. package/src/components/ol-table-filter.vue +28 -0
  32. package/src/components/ol-table-render.vue +44 -0
  33. package/src/components/ol-table-select.vue +150 -0
  34. package/src/components/pinia-init.vue +18 -0
  35. package/src/components/table/model/ModelMixins.js +43 -0
  36. package/src/components/table/model/model-index.vue +121 -0
  37. package/src/components/table/model/ot-left-right.vue +18 -0
  38. package/src/components/table/model/ot-left-tree-right-table.scss +14 -0
  39. package/src/components/table/model/ot-left-tree-right-table.vue +41 -0
  40. package/src/components/table/model/ot-top-1-bottom-2.vue +39 -0
  41. package/src/components/table/model/ot-top-2-bottom-1.vue +38 -0
  42. package/src/components/table/model/ot-top-2-bottom-2.vue +38 -0
  43. package/src/components/table/model/ot-top-bottom.vue +18 -0
  44. package/src/components/table/model/splitpanesModel.css +22 -0
  45. package/src/components/table/model/splitpanesModel.vue +54 -0
  46. package/src/components/table/ol-form/index.vue +537 -0
  47. package/src/components/table/ol-form-v3/index.vue +455 -0
  48. package/src/components/table/ol-main-form-sub-table/index.vue +601 -0
  49. package/src/components/table/ol-pager/index.vue +46 -0
  50. package/src/components/table/ol-table/components/ol-table-column-config/columnIndex.vue +233 -0
  51. package/src/components/table/ol-table/components/ol-table-column-config/index.vue +145 -0
  52. package/src/components/table/ol-table/components/ol-table-column-dict-color/index.vue +88 -0
  53. package/src/components/table/ol-table/index.vue +232 -0
  54. package/src/components/table/ol-table-operate/index.vue +61 -0
  55. package/src/components/table/ol-table-search/index.vue +17 -0
  56. package/src/components/table/ol-table-tool-btn/index.vue +60 -0
  57. package/src/components/tree/components/o-tree.vue +289 -0
  58. package/src/components/tree/index.vue +46 -0
  59. package/src/components/v-component/index.vue +43 -0
  60. package/src/config/dev-config.js +5 -0
  61. package/src/config/prod-config.js +5 -0
  62. package/src/config/shared-config.js +20 -0
  63. package/src/data.js +9378 -0
  64. package/src/directives/permission/hasPermi.js +63 -0
  65. package/src/directives/permission/hasRole.js +30 -0
  66. package/src/main.js +55 -0
  67. package/src/mixins/VTMixin/DefaultMethods.js +749 -0
  68. package/src/mixins/VTMixin/OTMixinBody.js +105 -0
  69. package/src/mixins/VTMixin/OTMixinBodyFooter.js +93 -0
  70. package/src/mixins/VTMixin/OTMixinBodyMethods.js +420 -0
  71. package/src/mixins/VTMixin/OTMixinColumnMethod.js +450 -0
  72. package/src/mixins/VTMixin/OTMixinInitMethod.js +130 -0
  73. package/src/mixins/VTMixin/OTMixinPager.js +38 -0
  74. package/src/mixins/VTMixin/OTMixinSortable.js +43 -0
  75. package/src/mixins/VTMixin/index.js +18 -0
  76. package/src/package/index.js +20 -0
  77. package/src/plugins/axios.js +61 -0
  78. package/src/store/dict.js +76 -0
  79. package/src/store/dictType.js +52 -0
  80. package/src/store/permi.js +45 -0
  81. package/src/styles/common.scss +37 -0
  82. package/src/styles/index.scss +48 -0
  83. package/src/styles/theme.scss +32 -0
  84. package/src/utils/AESCRUDUtils.js +87 -0
  85. package/src/utils/DateUtils.js +35 -0
  86. package/src/utils/ExcelUtil.js +159 -0
  87. package/src/utils/TableSortUtil.js +91 -0
  88. package/src/utils/columnProp.js +3 -0
  89. package/src/utils/groupCompute.js +68 -0
  90. package/src/utils/http/httpFactory.js +92 -0
  91. package/src/utils/http/httpFactory2.js +79 -0
  92. package/src/utils/http/httpUtil.js +123 -0
  93. package/src/utils/http/httpUtils.js +38 -0
  94. package/src/utils/loadStyle.js +14 -0
  95. package/src/utils/message.js +56 -0
  96. package/src/utils/object.js +80 -0
  97. package/src/utils/security/TokenUtil.js +19 -0
  98. package/src/utils/tree.js +54 -0
  99. package/src/utils/util.js +127 -0
  100. package/src/views/Test/index.vue +77 -0
  101. package/src/views/Test/index2.vue +33 -0
  102. package/src/views/components/btn-config/index.vue +202 -0
  103. package/src/views/components/option-config/index.vue +192 -0
  104. package/src/views/db/chineseToEnglish.vue +127 -0
  105. package/src/views/db/filed.vue +395 -0
  106. package/src/views/db/index.vue +192 -0
  107. package/src/views/db/preview/index.vue +139 -0
  108. package/src/views/db/preview/left.vue +204 -0
  109. package/src/views/db/preview/right.vue +466 -0
  110. package/src/views/groupTable/index.vue +137 -0
  111. package/src/views/groupTable/ol-table-column-config/columnIndex.vue +194 -0
  112. package/src/views/groupTable/ol-table-column-config/index.vue +92 -0
  113. package/src/views/table/add-or-edit/config/base-config/index.vue +539 -0
  114. package/src/views/table/add-or-edit/config/base-config/table-form.vue +333 -0
  115. package/src/views/table/add-or-edit/config/column-config/header-config.vue +475 -0
  116. package/src/views/table/add-or-edit/config/column-config/index.vue +790 -0
  117. package/src/views/table/add-or-edit/config/data/column.js +218 -0
  118. package/src/views/table/add-or-edit/config/data/crud.js +122 -0
  119. package/src/views/table/add-or-edit/config/data/events.js +109 -0
  120. package/src/views/table/add-or-edit/config/data/method.js +127 -0
  121. package/src/views/table/add-or-edit/config/data/option.js +725 -0
  122. package/src/views/table/add-or-edit/config/data/page.js +79 -0
  123. package/src/views/table/add-or-edit/config/field-config/filed-config-table.vue +42 -0
  124. package/src/views/table/add-or-edit/config/field-config/index.vue +91 -0
  125. package/src/views/table/add-or-edit/config/form-config/index.vue +1179 -0
  126. package/src/views/table/add-or-edit/config/index.vue +376 -0
  127. package/src/views/table/add-or-edit/config/initFormObject.js +25 -0
  128. package/src/views/table/add-or-edit/config/script-config/LeftMeun.vue +71 -0
  129. package/src/views/table/add-or-edit/config/script-config/index.vue +70 -0
  130. package/src/views/table/add-or-edit/config/table-config/btn-config.vue +340 -0
  131. package/src/views/table/add-or-edit/config/table-config/btn-sort.vue +132 -0
  132. package/src/views/table/add-or-edit/config/table-config/index.vue +446 -0
  133. package/src/views/table/add-or-edit/configOld/dataTags/filed-config-table-model.vue +41 -0
  134. package/src/views/table/add-or-edit/configOld/dataTags/filed-config.vue +74 -0
  135. package/src/views/table/add-or-edit/configOld/dataTags/index.vue +439 -0
  136. package/src/views/table/add-or-edit/configOld/dataTags/set-table-sql.vue +79 -0
  137. package/src/views/table/add-or-edit/configOld/dataTags/table-on-config.vue +74 -0
  138. package/src/views/table/add-or-edit/configOld/index.vue +127 -0
  139. package/src/views/table/add-or-edit/configOld/tableTags/columnConfig.js +5 -0
  140. package/src/views/table/add-or-edit/configOld/tableTags/index.vue +353 -0
  141. package/src/views/table/add-or-edit/configOld/tableTags/operation-but-config.vue +75 -0
  142. package/src/views/table/add-or-edit/configOld/tableTags/tool-but-config.vue +92 -0
  143. package/src/views/table/add-or-edit/index.vue +201 -0
  144. package/src/views/table/add-or-edit/themeModel/index.vue +53 -0
  145. package/src/views/table/add-or-edit/themeModel/init-model-table.vue +48 -0
  146. package/src/views/table/add-or-edit/themeModel/init-model.vue +81 -0
  147. package/src/views/table/add-or-edit/themeModel/left-right.vue +24 -0
  148. package/src/views/table/add-or-edit/themeModel/left-tree-right-table.vue +75 -0
  149. package/src/views/table/add-or-edit/themeModel/olTableSearchModelMixins.js +42 -0
  150. package/src/views/table/add-or-edit/themeModel/splitpanesThemeModel.vue +49 -0
  151. package/src/views/table/add-or-edit/themeModel/top-1-bottom-2.vue +29 -0
  152. package/src/views/table/add-or-edit/themeModel/top-2-bottom-1.vue +32 -0
  153. package/src/views/table/add-or-edit/themeModel/top-2-bottom-2.vue +32 -0
  154. package/src/views/table/add-or-edit/themeModel/top-bottom.vue +14 -0
  155. package/src/views/table/index.vue +43 -0
  156. package/src/views/table/index2.vue +199 -0
  157. package/src/views/table/preview/index.vue +29 -0
  158. package/src/views/tree/components/config-core-data.vue +85 -0
  159. package/src/views/tree/components/config-core-table.vue +362 -0
  160. package/src/views/tree/components/config-core-tree/data/events.js +95 -0
  161. package/src/views/tree/components/config-core-tree/data/option.js +88 -0
  162. package/src/views/tree/components/config-core-tree/data/prop.js +28 -0
  163. package/src/views/tree/components/config-core-tree/index.vue +181 -0
  164. package/src/views/tree/components/config-core.vue +42 -0
  165. package/src/views/tree/components/form-config/index.vue +967 -0
  166. package/src/views/tree/index.vue +424 -0
  167. package/vue.config.js +44 -0
  168. /package/{demo.html → olp-table/demo.html} +0 -0
  169. /package/{fonts → olp-table/fonts}/iconfont.1720006583309.7e4906d9.woff +0 -0
  170. /package/{fonts → olp-table/fonts}/iconfont.1720006583309.947a27f0.ttf +0 -0
  171. /package/{olp-table.css → olp-table/olp-table.css} +0 -0
@@ -0,0 +1,450 @@
1
+ import getFiledName from "@/utils/columnProp";
2
+
3
+ function setColumnParams(column, key, value) {
4
+ if (value === undefined) {
5
+ return;
6
+ }
7
+ if (!column['params']) {
8
+ column['params'] = {};
9
+ }
10
+ column['params'][key] = value;
11
+ }
12
+
13
+ export const OTMixinColumnMethod = {
14
+ methods: {
15
+ setColumnCssClass(o) {
16
+ if (o.dictCode) {
17
+ let vals = this.dictVal(o.dictCode);
18
+ let cssClass = {};
19
+ if (vals) {
20
+ let dictValueLabel = {};
21
+ for (let obj of vals) {
22
+ dictValueLabel[obj.dictValue] = obj.dictLabel
23
+ if (obj.cssClass) {
24
+ let css = obj.cssClass.trim()
25
+ try {
26
+ css = css.replace(/([a-zA-Z_]\w*):/g, '"$1":').replace(/'/g, '"');
27
+ css = JSON.parse(css)
28
+ if (Array.isArray(css)) {
29
+ let data = {};
30
+ if (css[0]) {
31
+ data['backgroundColor'] = css[0];
32
+ }
33
+ if (css[1]) {
34
+ data['color'] = css[1];
35
+ }
36
+ cssClass[obj.dictValue] = data
37
+ } else {
38
+ cssClass[obj.dictValue] = css
39
+ }
40
+ } catch (e) {
41
+ console.error("列名:", o.title, "数据字典:", obj.dictLabel, "样式异常:", css)
42
+ }
43
+ }
44
+ }
45
+ setColumnParams(o, 'dictValueLabel', dictValueLabel);
46
+ }
47
+
48
+ if (Object.keys(cssClass).length != 0) {
49
+ setColumnParams(o, 'cssClass', cssClass);
50
+ }
51
+ }
52
+ }, initColumn(columns, tableConfig) {
53
+ this.table.mergeFields = []
54
+ let items = [];
55
+ columns = columns.sort(({sort: a}, {sort: b}) => a - b);
56
+ for (let column of columns) {
57
+ this.toParseOtherProp(column);
58
+ }
59
+ this.table.columnSource = JSON.parse(JSON.stringify(columns))
60
+ let {optionJson, seq} = tableConfig;
61
+ if (optionJson) {
62
+ optionJson = JSON.parse(optionJson);
63
+ }
64
+ for (let o of columns) {
65
+ this.setColumnCssClass(o)
66
+ this.initFormatter(o)
67
+ this.initSlots(o);
68
+ this.setTreeOpenColumn(o, tableConfig);
69
+ this.setMergeField(o);
70
+ this.setColumnShowOverFlow(o, optionJson);
71
+ this.setProp(o);
72
+ this.setColumnHide(o);
73
+ this.setFixed(o);
74
+ this.setShowFooter(o);
75
+ this.getVNode(o, items);
76
+ // 可编辑配置
77
+ if (this.hasEditConfig()){
78
+ this.setEditConfig(o);
79
+ }
80
+ }
81
+ items.sort(({searchSort: a}, {searchSort: b}) => a - b)
82
+ this.setSearchArea(items);
83
+ columns = this.initBodyLeftColumn(columns, seq);
84
+ if (this.table['show-footer']) {
85
+ if (!columns[0].width || columns[0].width < 55) {
86
+ columns[0].width = 55;
87
+ }
88
+ }
89
+ this.table.columns = columns
90
+ //暂时不合并,启用虚拟滚动
91
+ this.initMergeCells();
92
+
93
+ },hasEditConfig(){
94
+ return (this.table.editConfig && (
95
+ this.table.editConfig.enabled === true ||
96
+ (typeof this.table.editConfig.enabled === 'string' &&
97
+ this.table.editConfig.enabled.toLowerCase() === 'true')
98
+ ))
99
+ },
100
+ setEditConfig(o) {
101
+ if (o.tableSaveToOtherProp && o.tableSaveToOtherProp == '1') {
102
+ return;
103
+ }
104
+ if (o.selectDom == '1') {
105
+ o.editRender = {
106
+ name: '$input',
107
+ props: {
108
+ placeholder: '请输入' + o.title,
109
+ clearable: o.clearableSEARCHToOtherProp == '1' ? false : true
110
+ }
111
+ }
112
+ }
113
+ // 文本域
114
+ if (o.selectDom == '10') {
115
+ o.editRender = {
116
+ name: 'textarea',
117
+ props: {
118
+ type: 'textarea', // 指定为多行文本框
119
+ placeholder: '请输入' + o.title,
120
+ rows: 3, // 默认显示行数
121
+ autosize: {minRows: 2, maxRows: 6}, // 自动调整高度
122
+ clearable: o.clearableSEARCHToOtherProp == '1' ? false : true
123
+ }
124
+ }
125
+ }
126
+ // 数字
127
+ if (o.selectDom == '7') {
128
+ o.editRender = {
129
+ name: '$input',
130
+ props: {
131
+ type: this.getType(o.selectDom),
132
+ placeholder: '请输入' + o.title,
133
+ clearable: o.clearableSEARCHToOtherProp == '1' ? false : true
134
+ }
135
+ }
136
+ }
137
+ // 时间
138
+ if (o.selectDom == '3' || o.selectDom == '6') {
139
+ o.editRender = {
140
+ name: 'VxeInput',
141
+ props: {
142
+ type: this.getType(o.selectDom),
143
+ valueFormat: 'yyyy-MM-dd HH:mm:ss'
144
+ }
145
+ }
146
+ }
147
+ // 下拉框
148
+ if (o.selectDom == '2' || o.selectDom == '8') {
149
+ o.editRender = {name: 'VxeSelect', options: this.dictVal(o.dictCode), props: {placeholder: '请选择' + o.title}}
150
+ }
151
+ },
152
+ getType(selectDom) {
153
+ if (selectDom == '3') {
154
+ return 'datetime';
155
+ }
156
+ if (selectDom == '6') {
157
+ return 'date';
158
+ }
159
+ if (selectDom == '7') {
160
+ return 'number';
161
+ }
162
+ },
163
+ /**
164
+ * 初始化列左边
165
+ * @param columns
166
+ * @param type
167
+ * @returns {*}
168
+ */
169
+ initBodyLeftColumn(columns, type) {
170
+ if (type == 1) {
171
+ columns.unshift({type: 'seq', width: 55, title: '序号', fixed: 'left'});
172
+ }
173
+ if (this.selectBox == 2) {
174
+ columns.unshift({type: 'checkbox', width: 45, showOverflow: false, fixed: 'left'});
175
+ } else if (this.selectBox == 1) {
176
+ columns.unshift({type: 'radio', width: 45, showOverflow: false, fixed: 'left'});
177
+ }
178
+ return columns;
179
+ }, setTreeOpenColumn(o, tableConfig) {
180
+ if (tableConfig.tree == 1 && o.field == tableConfig.openColumn) {
181
+ o.treeNode = true
182
+ if (!o.align) {
183
+ o.align = 'left'
184
+ }
185
+ }
186
+ }, setMergeField(column) {
187
+ if (column.mergeFlag == '1') {
188
+ this.table.mergeFields.push(column.field)
189
+ }
190
+ }, setColumnHide(o) {
191
+ //隐藏
192
+ if (o.visible == "0") {
193
+ o.visible = false;
194
+ }
195
+ }, initFormatter(o) {
196
+ try {
197
+ if (o.formatter) {
198
+ o.formatter = eval("({cellValue, row, column})=>{" + o.formatter + "}")
199
+ } else if (o.dictCode) {
200
+ o.formatter = eval("" + "({cellValue, row, column})=>{if(column.params && column.params.dictValueLabel){ let dictValueLabelElement = column.params.dictValueLabel[cellValue];if(dictValueLabelElement){return dictValueLabelElement;} }return cellValue}")
201
+ }
202
+ } catch (e) {
203
+ console.log(o.title, "formatter异常:", o.formatter)
204
+ this.$message.error(o.title + "formatter异常!")
205
+ }
206
+ }, initSlots(o) {
207
+ if (o.selectDom == 20) {
208
+ o.slotsName = 'img_default';
209
+ o.slots = {
210
+ default: 'img_default'
211
+ }
212
+ }
213
+ if (o.selectDom == '21') {
214
+ o.slotsName = 'icon_default';
215
+ o.slots = {
216
+ default: 'icon_default'
217
+ }
218
+ }
219
+ }, setFixed(item) {
220
+ //修改固定字段的值
221
+ if (item.fixed === '1') {
222
+ item.fixed = 'left'
223
+ } else if (item.fixed === '2') {
224
+ item.fixed = 'right'
225
+ }
226
+ if (item.align === '1') {
227
+ item.align = 'left'
228
+ } else if (item.align === '2') {
229
+ item.align = 'right'
230
+ } else if (item.align === '0') {
231
+ item.align = 'center'
232
+ }
233
+ }, setProp(item) {
234
+ item.resizable = undefined;
235
+ if (item.sortable != undefined && item.sortable != "") {
236
+ let order = item.field + (item.sortable == 0 ? " ASC " : " DESC ");
237
+ this.orderByColumns.push(order)
238
+ }
239
+ ////时间类型
240
+ if (!item.width && (item.selectDom == 3 || item.selectDom == 6)) {
241
+ item.minWidth = 150
242
+ } else if (!item.width && item.title) {
243
+ item.minWidth = item.title.length * 30
244
+ }
245
+ }, setShowFooter(item) {
246
+ if (item['totalToOtherProp']) {
247
+ this.table['show-footer'] = true;
248
+ }
249
+ }, toParseOtherProp(item) {
250
+ //其他属性赋值
251
+ try {
252
+ let otherProp = JSON.parse(item.otherProp)
253
+ item.otherProp = otherProp;
254
+ for (let key of Object.keys(otherProp)) {
255
+ item[key] = otherProp[key];
256
+ }
257
+ } catch (e) {
258
+ if (item.otherProp) {
259
+ console.error(item.field + "其他属性无法解析:" + item.otherProp)
260
+ }
261
+ item.otherProp = {};
262
+ }
263
+ if (item['totalToOtherProp'] === undefined) {
264
+ item['totalToOtherProp'] = '';
265
+ }
266
+ }, /**
267
+ * 设置搜索
268
+ * @param items
269
+ */
270
+ setSearchArea(items) {
271
+ if (items.length != 0) {
272
+ items.push({
273
+ itemRender: {
274
+ name: '$buttons', children: [{
275
+ props: {
276
+ type: 'submit', content: '查询', status: 'primary'
277
+ }, events: {click: this.query}
278
+ }, {props: {type: 'button', content: '重置'}, events: {click: this.resetQuery}}]
279
+ }
280
+ })
281
+ this.table.formConfig.size = this.table.size;
282
+ }
283
+ this.table.formConfig.items = items;
284
+ }, getVNode(o, items) {
285
+ if (o.selectType == undefined) {
286
+ return
287
+ }
288
+ //99是范围查询
289
+ if (o.selectType == 99) {
290
+ let itemStart = this.initFormConfig(o, 5);
291
+ let itemEnd = this.initFormConfig(o, 6);
292
+ //时间范围查询
293
+ if (o.selectDom == 3 || o.selectDom == 6) {
294
+ let placeholder = o.selectDom == 3 ? '时间' : '';
295
+ itemStart.placeholder = '请选择开始日期' + placeholder
296
+ delete itemStart.itemRender;
297
+ itemEnd.placeholder = '请选择结束日期' + placeholder
298
+ }
299
+ items.push(itemStart)
300
+ items.push(itemEnd)
301
+ } else {
302
+ items.push(this.initFormConfig(o))
303
+ }
304
+ }, initFormConfig(o, type) {
305
+ let item = {
306
+ align: 'left',
307
+ field: o.tableField,
308
+ span: 6,
309
+ searchSort: o.searchSort,
310
+ title: o.titleSEARCHToOtherProp != undefined ? o.titleSEARCHToOtherProp : o.title,
311
+ key: o.tableField,
312
+ type: o.selectType,
313
+ selectDom: o.selectDom,
314
+ tableName:o.tableNameSEARCHToOtherProp,
315
+ clearable: o.clearableSEARCHToOtherProp == '1' ? false : true,
316
+ toDate: o.toDateSEARCHToOtherProp,
317
+ itemRender: {
318
+ name: '$input',
319
+ props: {
320
+ placeholder: '请输入' + o.title,
321
+ clearable: o.clearableSEARCHToOtherProp == '1' ? false : true
322
+ }
323
+ }
324
+ };
325
+ // if(this.table.editConfig && (
326
+ // this.table.editConfig.enabled === true ||
327
+ // (typeof this.table.editConfig.enabled === 'string' &&
328
+ // this.table.editConfig.enabled.toLowerCase() === 'true')
329
+ // )){
330
+ // o.editRender = {
331
+ // name:'$input',
332
+ // props: {
333
+ // placeholder: '请输入' + o.title,
334
+ // clearable: o.clearableSEARCHToOtherProp == '1' ? false : true
335
+ // }
336
+ // }
337
+ // }
338
+ try {
339
+ this.table.formConfig.data[item.key] = eval(o.valueSEARCHToOtherProp);
340
+ }catch (e) {
341
+ }
342
+ if (type == 5) {
343
+ item.title = o.title + "开始"
344
+ item.type = 5
345
+ item.field = "$" + o.tableField
346
+ item.key = "$" + o.tableField
347
+ } else if (type == 6) {
348
+ item.field = o.tableField + "$"
349
+ item.type = 6
350
+ item.key = o.tableField + "$"
351
+ item.title = o.title + "结束"
352
+ }
353
+ if ((item.type == 6 || item.type == 5) && o.selectDom == undefined) {
354
+ o.selectDom = 7;
355
+ }
356
+ this.getItemRender(o, item, type);
357
+ if (item.title && item.title.length > 6) {
358
+ item.titleWidth = 20 * (item.title.length - 2);
359
+ } else if (item.title.toString().trim().length == 0) {
360
+ item.titleWidth = 0
361
+ }
362
+ if (o.spanSEARCHToOtherProp != undefined) {
363
+ item.span = 6;
364
+ }
365
+ return item;
366
+ }, getItemRender(o, item, type) {
367
+ if (o.dictCode) {
368
+ delete item.itemRender;
369
+ item.slots = {default: o.selectDom + item.field}
370
+ item.slotsName = o.selectDom + item.field
371
+ item.options = this.dictVal(o.dictCode);
372
+ item.placeholder = '请选择' + o.title;
373
+ item.clearable = o.clearableSEARCHToOtherProp == '1';
374
+ item.multiple = o.selectDom == '8';
375
+ } else if (o.selectDom == 7) {
376
+ item.itemRender.props.type = 'integer';
377
+ } else if (o.selectDom == 10) {
378
+ item.itemRender.name = 'textarea';
379
+ } else if (o.selectDom == 3 || o.selectDom == 6) {
380
+ delete item.itemRender;
381
+ item.domDate = true;
382
+ if (o.selectType == 98 && item.selectDom == 6) {
383
+ item.span = 7;
384
+ item.domType = 'daterange';
385
+ } else {
386
+ item.domType = item.selectDom == 3 ? 'datetime' : 'date'
387
+ }
388
+ //这里跟element plus不一样
389
+ item.domFormat = item.selectDom == 3 ? 'yyyy-MM-dd HH:mm:ss' : 'yyyy-MM-dd'
390
+ item.slots = {default: o.selectDom + item.field + "_time"}
391
+ item.slotsName = o.selectDom + item.field + "_time"
392
+ item.placeholder = '请选择';
393
+ if (type == 5) {
394
+ item.placeholder += "开始";
395
+ } else if (type == 6) {
396
+ item.placeholder += "结束";
397
+ }
398
+ if (o.selectDom == 3) {
399
+ item.placeholder += "时间";
400
+ }
401
+ }
402
+ }, setColumnShowOverFlow(column, optionObj) {
403
+ if (optionObj) {
404
+ if (optionObj.table && optionObj.table.columnConfig && optionObj.table.columnConfig.showOverflow) {
405
+ if (column.type != 'seq' || column.type != 'checkbox') {
406
+ column.showOverflow = optionObj.table.columnConfig.showOverflow
407
+ }
408
+ }
409
+ }
410
+ }, initMergeCells() {
411
+ if (this.table.mergeCells) {
412
+ this.table.mergeCells = JSON.parse(this.table.mergeCells)
413
+ return
414
+ }
415
+
416
+ if (this.table.mergeFields && this.table.mergeFields.length != 0) {
417
+ this.table.spanMethod = this.mergeRowMethod
418
+ }
419
+ }, // 通用行合并函数(将相同多列数据合并为一行)
420
+ mergeRowMethod({row, _rowIndex, column, visibleData}) {
421
+ const cellValue = row[column.field]
422
+ if (cellValue && this.table.mergeFields.includes(column.field)) {
423
+ const prevRow = visibleData[_rowIndex - 1]
424
+ let nextRow = visibleData[_rowIndex + 1]
425
+ if (prevRow && prevRow[column.field] === cellValue) {
426
+ return {rowspan: 0, colspan: 0}
427
+ } else {
428
+ let countRowspan = 1
429
+ while (nextRow && nextRow[column.field] === cellValue) {
430
+ nextRow = visibleData[++countRowspan + _rowIndex]
431
+ }
432
+ if (countRowspan > 1) {
433
+ return {rowspan: countRowspan, colspan: 1}
434
+ }
435
+ }
436
+ }
437
+ }, setDictCellStyle({row, rowIndex, $rowIndex, column, columnIndex, $columnIndex}) {
438
+ if (column.params && column.params.cssClass) {
439
+ return column.params.cssClass[row[column[getFiledName(column)]]];
440
+ }
441
+ }, setTableStyle(option) {
442
+ if (option['cell-style'] === undefined) {
443
+ option['cell-style'] = {
444
+ flag: "flag##function#", isFunction: true
445
+ }
446
+ }
447
+ option['cell-style']['code'] = "let OTMixinColumnMethod_setDictCellStyle = this.setDictCellStyle(params); if(OTMixinColumnMethod_setDictCellStyle){ return OTMixinColumnMethod_setDictCellStyle;}\n" + option['cell-style']['code'];
448
+ },
449
+ }
450
+ }
@@ -0,0 +1,130 @@
1
+ import {convertToStringifiedJson} from "@/utils/object";
2
+ import {useMessage} from "@/utils/message";
3
+ import {get} from "@/utils/http/httpUtils";
4
+ import {decryptWithDecompress} from "@/utils/AESCRUDUtils";
5
+
6
+ export const OTMixinInitMethod = {
7
+ created() {
8
+ this.init()
9
+ },
10
+ methods: {
11
+ initTable({selectBox, paging, optionJson, parameterDefault}) {
12
+ if (optionJson) {
13
+ let optionObj = JSON.parse(optionJson);
14
+ this.setTableStyle(optionObj.table);
15
+ this.copyParams(optionObj.table, this.table)
16
+ if (this.table.border == "false") {
17
+ this.table.border = false;
18
+ }
19
+ this.pagination.enabled = paging == "1";
20
+ if (this.pagination.enabled) {
21
+ this.copyParams(optionObj.pagination, this.pagination)
22
+ }
23
+ for (let event in optionObj.events) {
24
+ this.events[event] = (params) => {
25
+ eval(optionObj.events[event].code)
26
+ }
27
+ }
28
+ }
29
+ if (this.table['show-overflow'] == undefined && this.table['showOverflow'] == undefined) {
30
+ this.table['show-overflow'] = true
31
+ }
32
+ if (parameterDefault) {
33
+ if (parameterDefault.indexOf("{") == 0) {
34
+ try {
35
+ parameterDefault = convertToStringifiedJson(parameterDefault)
36
+ } catch (e) {
37
+ console.error("参数", parameterDefault)
38
+ useMessage().error("默认参数配置异常,请F12查看异常日志!")
39
+ throw new Error(e)
40
+ }
41
+ this.parameterDefault = parameterDefault;
42
+ } else {
43
+ for (let kv of parameterDefault.toString().split(",")) {
44
+ let kvs = kv.split("=");
45
+ if (kvs.length == 2) {
46
+ this.parameterDefault[kvs[0]] = kvs[1];
47
+ }
48
+ }
49
+ }
50
+ }
51
+ this.selectBox = selectBox;
52
+ }, initDefaultValue() {
53
+ for (let o of this.table.formConfig.items) {
54
+ if (o.key && this.parameterDefault[o.key] != undefined) {
55
+ this.table.formConfig.data[o.key] = this.parameterDefault[o.key]
56
+ }
57
+ }
58
+ }, init(initDataSource) {
59
+ if (!this.uuid || !this.theme || (!this.initDataSource && initDataSource == undefined)) {
60
+ return
61
+ }
62
+ this.$nextTick(() => {
63
+ if (this.tableAll) {
64
+ this.tableAll[this.theme] = this;
65
+ }
66
+ })
67
+ return new Promise((resolve) => {
68
+ get(this.http, '/onlineAes/init', {uuid: this.uuid, theme: this.theme}).then(res => {
69
+ res = JSON.parse(decryptWithDecompress(res));
70
+ this.setDataSource(res, resolve)
71
+ });
72
+ })
73
+ }, setDataSource(res, resolve) {
74
+ let {configColumns, toolBut, operationBut, tableConfig, formMainList, tableDelete} = res;
75
+ this.tableConfig = tableConfig;
76
+ this.initTable(tableConfig);
77
+ this.initColumn(configColumns, tableConfig);
78
+ this.initToolBtn(toolBut)
79
+ this.initOperationBtn(operationBut)
80
+ this.initFormMainList(formMainList)
81
+ this.initTree(tableConfig)
82
+ this.initDefaultValue();
83
+ this.deleteParameter = tableDelete;
84
+ if (resolve) {
85
+ resolve(res)
86
+ }
87
+ this.tableInitOk(tableConfig)
88
+ }, tableInitOk(tableConfig) {
89
+ this.$nextTick(() => {
90
+ if (this.tableAll) {
91
+ this.tableAll[tableConfig.theme] = this;
92
+ }
93
+ if (this.events['tableInitOk']) {
94
+ this.events['tableInitOk']()
95
+ }
96
+ this.$emit('initOk', this)
97
+ if (tableConfig.init != 0) {
98
+ this.query();
99
+ }
100
+ })
101
+ }, copyParams(option, data) {
102
+ for (let item in option) {
103
+ let obj = option[item];
104
+ let sub = data[item]
105
+ if (obj instanceof Object && obj.isFunction && obj.flag == "flag##function#") {
106
+ data[item] = (params) => {
107
+ let fun = null
108
+ try {
109
+ eval("fun = (params) => {" + obj.code + "}")
110
+ return fun(params)
111
+ } catch (e) {
112
+ console.error("执行cope异常:" + item + "\n" + obj.code + "\n" + e)
113
+ }
114
+
115
+ }
116
+ continue
117
+ }
118
+ if (sub == null || sub == undefined) {
119
+ data[item] = obj
120
+ continue
121
+ }
122
+ if (obj instanceof Object && sub instanceof Object) {
123
+ this.copyParams(obj, sub)
124
+ } else {
125
+ data[item] = obj
126
+ }
127
+ }
128
+ }
129
+ }
130
+ }
@@ -0,0 +1,38 @@
1
+ export const OTMixinPager = {
2
+ name: 'OTMixinPager',
3
+ data() {
4
+ return {
5
+ pagination: {
6
+ enabled: true,
7
+ size: "mini",
8
+ currentPage: 1,//当前页
9
+ pageSizes: [],//每页大小选项列表
10
+ pageSize: 50,//每页大小
11
+ layouts: ['PrevJump', 'PrevPage', 'Number', 'NextPage', 'NextJump', 'Sizes', 'FullJump', 'Total'],//每页大小选项列表
12
+ total: 0,//总条数
13
+ pagerCount: 5,//显示页码按钮的数量
14
+ selectRowShow: false,//是否显示已选择项
15
+ htmlValue: undefined,//显示内容
16
+ rowSelection: true,
17
+ showDetails: true,
18
+ selectionRowsLength: 0
19
+ }
20
+ }
21
+ },
22
+ methods: {
23
+ handlePageChange({currentPage, pageSize}) {
24
+ this.pagination.currentPage = currentPage
25
+ this.pagination.pageSize = pageSize
26
+ this.query();
27
+ }, clearSelected(o) {
28
+ if (this.selectBox == 1) {
29
+ this.$table.clearRadioRow()
30
+ } else if (this.selectBox == 2) {
31
+ this.$table.clearCheckboxRow()
32
+ }
33
+ this.pagination.selectionRowsLength = 0;
34
+ this.setToolBtn('batchDelete', 'disabled', true)
35
+ this.$emit('clearSelected', o)
36
+ }
37
+ }
38
+ }
@@ -0,0 +1,43 @@
1
+
2
+ import Sortable from "sortablejs";
3
+ export const OTMixinSortable = {
4
+ methods: {
5
+ updateSort() {
6
+ if (!this.table.sortable) {
7
+ return
8
+ }
9
+ this.$nextTick(() => {
10
+ //el绑定元素需要找到vxe的DOM下的tbody元素
11
+ Sortable.create(this.$table.$el.querySelector('.body--wrapper>.vxe-table--header .vxe-header--row'),
12
+ {
13
+ filter: '.col--fixed',
14
+ handle: '.vxe-header--column',
15
+ onEnd: ({newIndex, oldIndex}) => {
16
+ console.log(newIndex, oldIndex);
17
+ let tableColumn = JSON.parse(JSON.stringify(this.$table.getColumns()));
18
+ let newColumn = tableColumn[newIndex];
19
+ let oldColumn = tableColumn[oldIndex];
20
+ for (let i = 0; i < this.table.columns.length; i++) {
21
+ let column = this.table.columns[i];
22
+ if (oldColumn.field == column.field) {
23
+ oldIndex = i;
24
+ } else if (newColumn.field == column.field) {
25
+ newIndex = i;
26
+ }
27
+ }
28
+ let columns = this.table.columns;
29
+
30
+ this.$table.loadColumn([]);
31
+ let spliceElement = columns.splice(oldIndex, 1)[0];
32
+ columns.splice(newIndex, 0, spliceElement);
33
+ this.table.columns = columns;
34
+ this.$nextTick(() => {
35
+ this.$table.loadColumn(this.table.columns);
36
+ })
37
+
38
+ }
39
+ })
40
+ })
41
+ },
42
+ }
43
+ }
@@ -0,0 +1,18 @@
1
+ import {OTMixinBody} from "@/mixins/VTMixin/OTMixinBody";
2
+ import {OTMixinPager} from "@/mixins/VTMixin/OTMixinPager";
3
+ import {OTMixinSortable} from "@/mixins/VTMixin/OTMixinSortable";
4
+ import {OTMixinInitMethod} from "@/mixins/VTMixin/OTMixinInitMethod";
5
+ import {storeDict} from "@/store/dict";
6
+
7
+ const dict = storeDict();
8
+ export const OTMixin = {
9
+ emits: ['initOk'],
10
+ inject: ['tableAll', 'http'],
11
+ name: 'OTMixin',
12
+ mixins: [OTMixinBody, OTMixinPager, OTMixinSortable, OTMixinInitMethod],
13
+ methods: {
14
+ dictVal(code) {
15
+ return dict.val(code);
16
+ }
17
+ }
18
+ }