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,601 @@
1
+ <template>
2
+ <el-dialog
3
+ v-model="state.dialogVisible"
4
+ :title="state.title"
5
+ align-center
6
+ destroy-on-close
7
+ fullscreen
8
+ v-loading="state.loading"
9
+ :close-on-click-modal="false"
10
+ >
11
+ <div style="padding-right: 10px; height: 86vh">
12
+ <avue-form :key="state.key" ref="formRef" :option="form"
13
+ v-model="formData">
14
+ <!-- 动态生成插槽 -->
15
+ <template v-for="slotRow in dynamicSlotsTable" :key="slotRow.slotName" #[slotRow.slotName]="{ disabled, size }">
16
+ <!-- 根据配置动态渲染插槽内容 -->
17
+ <ol-table-select @olTableSelectChange="olTableSelectChange" :slotName="slotRow.slotName" :http="http"
18
+ :defaultValue="formData[slotRow.slotName]"
19
+ :uuid="slotRow.config.uuid" :disabled="disabled" :size="size"
20
+ :config="slotRow.config"></ol-table-select>
21
+ </template>
22
+ </avue-form>
23
+ <model-index ref="subTable" v-if="uuid" :uuid="uuid" :http="https" @initOk="ok"/>
24
+ </div>
25
+ <div class="footer-container">
26
+ <el-row style="height: 50px; padding: 10px 20px 0 0;border-top: 1px solid #e8eaec;background: white;justify-content: right">
27
+ <el-button @click="state.dialogVisible = false;">取 消</el-button>
28
+ <el-button type="primary" :loading="state.loading" @click="doSave">保 存</el-button>
29
+ </el-row>
30
+ </div>
31
+
32
+ </el-dialog>
33
+ </template>
34
+ <script>
35
+ import {setArrayObjectKeyValue} from "@/utils/object";
36
+ import {useMessage} from "@/utils/message";
37
+ import {get, post, postAes} from "@/utils/http/httpUtils";
38
+ import {handleTree} from "@/utils/tree";
39
+ import {initDictTable} from "@/api/dist";
40
+ import {storeDict} from "@/store/dict";
41
+ import {storeDictType} from "@/store/dictType";
42
+ import ModelIndex from "@/components/table/model/model-index.vue";
43
+ import OlTableSelect from "@/components/ol-table-select.vue";
44
+
45
+ const dict = storeDict();
46
+ const dictType = storeDictType();
47
+
48
+ function replaceDollarBraces(str) {
49
+ return str.toString().replace(/\$\{?([^{}]+)\}?/g, function (match, innerContent) {
50
+ return innerContent ? `'${innerContent}'` : match;
51
+ });
52
+ }
53
+
54
+ function parseJson(column) {
55
+ let attrs = column.attrs;
56
+ if (attrs) {
57
+ try {
58
+ attrs = JSON.parse(attrs)
59
+ for (let key of Object.keys(attrs)) {
60
+ column[key] = attrs[key];
61
+ }
62
+ } catch (e) {
63
+ console.error("解析attrs异常", attrs)
64
+ }
65
+ }
66
+ }
67
+
68
+ export default {
69
+ name: "olMainFormSubTable",
70
+ components: {OlTableSelect, ModelIndex},
71
+ inject: ['http'],
72
+ data() {
73
+ return {
74
+ url: {
75
+ saveUrl: "/online/crudAes/saveMainAndSubs",
76
+ },
77
+ uuid: undefined,
78
+ subForeignKey: '',
79
+ formData: {},
80
+ optionData: {},
81
+ form: {
82
+ column: []
83
+ },
84
+ dynamicSlotsTable: [],
85
+ dynamicSlotsField: {},
86
+ dynamicSlotsOtherResult: {},
87
+ state: {
88
+ loading: false,
89
+ fullscreen: false,
90
+ dialogVisible: false,
91
+ title: "",
92
+ width: '60%',
93
+ comCommit: true,
94
+ maxHeight: '400px',
95
+ type: '0',
96
+ edit: false,
97
+ saveUrl: '',
98
+ requestType: 'post',
99
+ updateKey: '',
100
+ deleteId: '',
101
+ theme: 't1',
102
+ tableConfigId: '',
103
+ dbName: '',
104
+ tableName: '',
105
+ },
106
+ }
107
+ },
108
+ computed: {
109
+ https() {
110
+ return this.http;
111
+ }
112
+ },
113
+ methods: {
114
+ hideColumn(prop) {
115
+ setArrayObjectKeyValue(this.form.column, 'display', false, prop)
116
+ },
117
+ showColumn(prop) {
118
+ setArrayObjectKeyValue(this.form.column, 'display', true, prop)
119
+ },
120
+ getDeleteId(param) {
121
+ for (let key of Object.keys(param)) {
122
+ if (key != '$parentId') {
123
+ return key;
124
+ }
125
+ }
126
+ },
127
+ getSubUpdateList(table) {
128
+ let subColumnAndValueList = []
129
+ for (const row of table.data) {
130
+ subColumnAndValueList.push(this.getSubUpdate(row, table.columns))
131
+ }
132
+ return subColumnAndValueList;
133
+ },
134
+ getSubUpdate(row, columns) {
135
+ let subColumnAndValue = {}
136
+ for (const column of columns) {
137
+ if (!column.tableSaveToOtherProp || column.tableSaveToOtherProp != '1') {
138
+ subColumnAndValue[column.tableField ? column.tableField : column.field] = row[column.field]
139
+ }
140
+ }
141
+ return subColumnAndValue;
142
+ },
143
+ getParams() {
144
+ // 子表信息
145
+ let subTable = this.$refs.subTable.table.t1;
146
+ let deleteId = this.getDeleteId(subTable.deleteParameter);
147
+ console.log('getParams:', this)
148
+ let params = {
149
+ tableConfigId: this.state.tableConfigId,
150
+ dbName: this.state.dbName,
151
+ tableName: this.state.tableName,
152
+ // 主表的唯一字段
153
+ mainTableKey: [this.state.deleteId],//主表的唯一字段
154
+ // 子表要自动生成的唯一字段 如果没有 可以忽略
155
+ mainGenIdMap: {[this.state.deleteId]: 'uuid'},
156
+ mianColumnAndValueMap: {},
157
+ // 子表名称
158
+ subTableName: subTable.tableConfig.mainTable,
159
+ // 子表要自动生成的唯一字段 如果没有 可以忽略
160
+ subGenIdMap: {[deleteId]: 'uuid'},
161
+ // 子表子主表的数据
162
+ subColumnAndValueList: this.getSubUpdateList(subTable.table),
163
+ // 子表的唯一字段
164
+ subTableKey: [deleteId],
165
+ // 表的关联key,这里框架自动复制 {主表字段,子表的字段}
166
+ subForeignKey: {
167
+ [this.state.deleteId]: this.subForeignKey
168
+ },
169
+ };
170
+ if (this.state.type != '0') {
171
+ let formData = this.$refs.value.getFormData(false);
172
+ for (let prop of Object.keys(formData)) {
173
+ let value = formData[prop];
174
+ if (value instanceof String) {
175
+ value = value.trim();
176
+ }
177
+ params.mianColumnAndValueMap[prop] = value;
178
+ }
179
+ } else {
180
+ params.mianColumnAndValueMap = this.getTableUpdateValue(this.form.column, this.formData);
181
+ }
182
+ if (this.state.saveUrl) {
183
+ return params.mianColumnAndValueMap;
184
+ }
185
+ if (this.state.edit) {
186
+ params.whereMap = {}
187
+ if (this.state.updateKey) {
188
+ let split = this.state.updateKey.split(',');
189
+ for (let kv of split) {
190
+ let kvs = kv.split("=");
191
+ if (kvs.length == 2) {
192
+ params.mianColumnAndValueMap[kvs[0]] = params.mianColumnAndValueMap[kvs[1]]
193
+ } else {
194
+ let val = params.mianColumnAndValueMap[kvs];
195
+ params.mianColumnAndValueMap[kvs] = val != undefined ? val : this.formData[kvs];
196
+ }
197
+ }
198
+
199
+ } else {
200
+ // 编辑时默认更新条件为id
201
+ params.mianColumnAndValueMap['id'] = this.formData['id'];
202
+ if (!params.mianColumnAndValueMap['id']) {
203
+ params.mianColumnAndValueMap['id'] = this.formData['t1_id'];
204
+ }
205
+ }
206
+ }
207
+ return params
208
+ },
209
+ /**
210
+ * 根据列配置获取数据库表更新数据
211
+ * @param column
212
+ * @param formData
213
+ * @returns {{}}
214
+ */
215
+ getTableUpdateValue(column, formData) {
216
+ let columnAndValueMap = {}
217
+ for (let {prop, tableField} of column) {
218
+ if (tableField && tableField == '1') {
219
+ continue
220
+ }
221
+ let value = formData[prop];
222
+ if (value) {
223
+ if (value instanceof String) {
224
+ value = value.trim();
225
+ }
226
+ columnAndValueMap[prop] = value;
227
+ }
228
+ }
229
+ return columnAndValueMap;
230
+ },
231
+ async doValidate() {
232
+ let dom = undefined;
233
+ let keys = [];
234
+ let status = true;
235
+ if (this.state.type != '0') {
236
+ await this.$refs.formRef.getNativeForm().validate((valid, msg) => {
237
+ if (!valid) {
238
+ keys = Object.keys(msg);
239
+ dom = this.$refs.formRef.getWidgetRef(keys[0]);
240
+ status = false;
241
+ }
242
+ })
243
+ } else {
244
+ await this.$refs.formRef.validate((valid, done, msg) => {
245
+ if (!valid) {
246
+ keys = Object.keys(msg);
247
+ dom = this.$refs.formRef.getPropRef(keys[0]);
248
+ status = false;
249
+ }
250
+ done()
251
+ })
252
+ }
253
+ if (dom) {
254
+ // 定位代码
255
+ dom.$el.scrollIntoView({
256
+ block: "center",
257
+ behavior: "smooth",
258
+ });
259
+ useMessage().error("您还有" + keys.length + "项信息未填写,请填写后再操作!");
260
+ status = false;
261
+ }
262
+ return status
263
+ },
264
+ async doSave() {
265
+ let dom ;
266
+ let keys ;
267
+ if (this.state.type != '0') {
268
+ await this.$refs.formRef.getNativeForm().validate((valid, msg) => {
269
+ if (!valid) {
270
+ keys = Object.keys(msg);
271
+ dom = this.$refs.formRef.getWidgetRef(keys[0]);
272
+ dom.$el.scrollIntoView({
273
+ block: "center",
274
+ behavior: "smooth",
275
+ });
276
+ useMessage().error("您还有" + keys.length + "项信息未填写,请填写后再操作!");
277
+ }else{
278
+ this.save()
279
+ }
280
+ })
281
+ } else {
282
+ await this.$refs.formRef.validate((valid, done, msg) => {
283
+ if (!valid) {
284
+ keys = Object.keys(msg);
285
+ dom = this.$refs.formRef.getPropRef(keys[0]);
286
+ dom.$el.scrollIntoView({
287
+ block: "center",
288
+ behavior: "smooth",
289
+ });
290
+ useMessage().error("您还有" + keys.length + "项信息未填写,请填写后再操作!");
291
+ }else{
292
+ this.save()
293
+ }
294
+ done()
295
+ })
296
+ }
297
+ },
298
+ save() {
299
+ this.state.loading = true;
300
+ try {
301
+ let params = this.getParams()
302
+ postAes(this.http, this.url.saveUrl, params).then(status => {
303
+ this.state.loading = false;
304
+ if (status) {
305
+ this.state.dialogVisible = false;
306
+ this.$emit('query')
307
+ }
308
+ })
309
+ } catch (e) {
310
+ console.error(e)
311
+ } finally {
312
+ this.state.loading = false;
313
+ }
314
+ },
315
+ setUUID(data) {
316
+ this.uuid = data.uuid;
317
+ this.subForeignKey = data.foreignKey
318
+ },
319
+ init(data) {
320
+ // 初始化动态插槽表格
321
+ data.form.column.forEach(column => {
322
+ if (column.selectDom === '22') {//表格选取
323
+ let slotObj = {
324
+ slotName: column.prop,
325
+ config: JSON.parse(column.attrs).olTableSelect,
326
+ }
327
+ this.dynamicSlotsField[column.prop] = column //收集继续动态改变值的字段信息,以便动态改变值时更新表单数据
328
+ this.dynamicSlotsTable.push(slotObj)//收集需要的动态插槽字段信息
329
+ const otherResult = slotObj.config.otherResult //返回额外参数字段配置
330
+ if (otherResult !== null && otherResult !== undefined && otherResult !== '') {
331
+ let otherResultArray = []
332
+ otherResult.split(",").forEach(m => {
333
+ let k = m.split(":")
334
+ otherResultArray.push({targetField: k[1], sourceField: k[0]})
335
+ });
336
+ this.dynamicSlotsOtherResult[column.prop] = otherResultArray
337
+ }
338
+ }
339
+ })
340
+ if (data.saveUrl) {
341
+ this.state.saveUrl = data.saveUrl.trim();
342
+ if (data.requestType) {
343
+ this.state.requestType = data.requestType;
344
+ }
345
+ }
346
+ this.setUUID(data);
347
+ this.state.edit = data['code'] == 'edit' == true;
348
+ this.state.title = data.title ? data.title : this.state.edit ? '编辑' : '新增';
349
+ //赋值弹窗宽度和高度
350
+ if (data.form.diaLogWidth) {
351
+ this.state.width = data.form.diaLogWidth
352
+ }
353
+ if (data.form.diaLogHeight) {
354
+ this.state.maxHeight = data.form.diaLogHeight + 'px'
355
+ }
356
+ if (data.form.title) {
357
+ this.state.title = data.form.title
358
+ }
359
+ this.state.dialogVisible = true;
360
+ this.form = data.form;
361
+ this.formData = data.formData;
362
+ for (let key of Object.keys(this.state)) {
363
+ if (data[key]) {
364
+ this.state[key] = data[key]
365
+ }
366
+ }
367
+ }, ok(e) {
368
+ for (let column of this.form.column) {
369
+ if (column.disabled == 1) {
370
+ column.disabled = true;
371
+ }
372
+ this.initDict(column);
373
+ parseJson(column);
374
+ for (let event of ['change']) {
375
+ if (column[event] && !(column[event] instanceof Function)) {
376
+ try {
377
+ column[event] = eval("(params)=>{this.$nextTick(()=>{" +
378
+ "let formData = this.formData;console.log(formData);" +
379
+ "let {value} = params;" + replaceDollarBraces(column[event]) +
380
+ "})" +
381
+ "}")
382
+ } catch (e) {
383
+ console.error(e)
384
+ }
385
+ }
386
+ }
387
+ }
388
+ this.setParameter(e)
389
+ if (this.state.edit) {
390
+ e.query()
391
+ }
392
+ }, setParameter(e) {
393
+ let param = {
394
+ [this.subForeignKey]: this.formData[this.state.deleteId]
395
+ }
396
+ e.parameter = {...e.parameter, ...param}
397
+ }, initDict(column) {
398
+ if (column.dictCode) {
399
+ column.dicData = dict.val(column.dictCode)
400
+ if (column.selectDom == 1) {
401
+ column.type = "select";
402
+ }
403
+ if (this.state.edit) {
404
+ return;
405
+ }
406
+ if (this.formData[column.prop] != undefined) {
407
+ this.formData[column.prop] = String(this.formData[column.prop])
408
+ } else if (column.value != undefined) {
409
+ this.formData[column.prop] = String(column.value)
410
+ } else {
411
+ //”number”、”string”、”boolean”、”object”、”function” 和 “undefined”
412
+ let dataType = typeof (this.formData[column.prop]);
413
+ // 数据字典与值类型不一致
414
+ if (this.formData[column.prop] != undefined && this.formData[column.prop] != '' && ["number", "boolean"].indexOf(dataType) != -1) {
415
+ this.formData[column.prop] = String(this.formData[column.prop])
416
+ column.value = this.formData[column.prop];
417
+ } else if (this.formData[column.prop] == undefined) {
418
+ setTimeout(() => {
419
+ if (column.dicData) {
420
+ for (let dicDatum of column.dicData) {
421
+ if (dicDatum.isDefault == 1) {
422
+ this.formData[column.prop] = dicDatum.value;
423
+ column.value = this.formData[column.prop];
424
+ }
425
+ }
426
+ }
427
+ }, 100)
428
+ }
429
+ }
430
+ } else if (column.dictTable || column.dictUrl) {
431
+ if (column.selectDom == 1) {
432
+ column.type = "select";
433
+ }
434
+ column.filterable = true;
435
+ column.dicData = [];
436
+ setTimeout(() => {
437
+ this.setDictTable(column, undefined);
438
+ }, 10)
439
+ if (column.type == 'tree') {
440
+ column.filterable = column.filterable == undefined ? true : column.clearable;
441
+ column.clearable = column.clearable == undefined ? true : column.clearable;
442
+ } else {
443
+ column.filterMethod = (e) => {
444
+ this.$nextTick(() => {
445
+ this.setDictTable(column, e);
446
+ })
447
+ };
448
+ }
449
+ }
450
+ },
451
+ setDictUrl(column, like) {
452
+ let dictUrl = column.dictUrl.split(",");
453
+ let url;
454
+ let label = 'label';
455
+ let value = 'value';
456
+ let parentId = 'parentId';
457
+ // get,url,label,value,parent_id
458
+ let doGet = true;
459
+ if (dictUrl.length > 1
460
+ ) {
461
+ if (dictUrl[0].toString().toLowerCase() == 'post') {
462
+ doGet = false;
463
+ }
464
+ url = dictUrl[1];
465
+ label = dictUrl[2];
466
+ value = dictUrl[3];
467
+ parentId = dictUrl[4];
468
+ } else {
469
+ url = dictUrl[0];
470
+ }
471
+
472
+ if (doGet) {
473
+ get(this.http, url + "?label=" + like).then((data) => {
474
+ column.dicData.length = 0;
475
+ if (column.type == 'tree') {
476
+ for (let da of data) {
477
+ da['label'] = da[label]
478
+ da['value'] = da[value]
479
+ }
480
+ column.dicData = handleTree(data, value, parentId);
481
+ } else {
482
+ data.forEach((d) => {
483
+ column.dicData.push(d);
484
+ })
485
+ }
486
+ })
487
+ } else {
488
+ let params = {}
489
+ if (like) {
490
+ params['label'] = like;
491
+ }
492
+ post(this.http, column.dictUrl, params, false).then(({data}) => {
493
+ column.dicData.length = 0;
494
+ if (column.type == 'tree') {
495
+ for (let da of data) {
496
+ da['label'] = da[label]
497
+ da['value'] = da[value]
498
+ }
499
+ column.dicData = handleTree(data, value, parentId);
500
+ } else {
501
+ data.forEach((da => {
502
+ da['label'] = da[label];
503
+ da['value'] = da[value];
504
+ column.dicData.push(da);
505
+ }))
506
+ }
507
+ })
508
+ }
509
+ }, setDictTable(column, like) {
510
+ if (column.dictTable && column.dictTable.toString().trim() != '') {
511
+ this.doSetDictTable(column, like);
512
+ } else if (column.dictUrl) {
513
+ this.setDictUrl(column, like);
514
+ }
515
+ },
516
+ doSetDictTable(column, like) {
517
+ let value = this.formData[column.prop];
518
+ /*String tableName;
519
+ String dataBase;
520
+ String label;
521
+ String value;
522
+ Map<String, Object> where;*/
523
+ // olp-vue-pro,system_users,nickname,id,parentId
524
+ let params = {}
525
+ let dictTable = JSON.parse(JSON.stringify(column.dictTable));
526
+ if (dictTable instanceof Object) {
527
+ params = dictTable;
528
+ } else {
529
+ dictTable = column.dictTable.split(",");
530
+ params["dbName"] = dictTable[0];
531
+ params["tableName"] = dictTable[1];
532
+ params["label"] = dictTable[2];
533
+ params["value"] = dictTable[3];
534
+ if (dictTable[4]) {
535
+ params["parentValue"] = dictTable[4];
536
+ }
537
+ }
538
+
539
+ if (like || value) {
540
+ if (!params.where) {
541
+ params.where = {};
542
+ }
543
+
544
+ }
545
+ if (!params["parentValue"]) {
546
+ if (like) {
547
+ params.where['_like_' + params["label"]] = like;
548
+ }
549
+ if (value) {
550
+ params.defaultValue = value;
551
+ }
552
+ }
553
+ initDictTable(this.http, params).then((data) => {
554
+ column.dicData.length = 0;
555
+ if (params["parentValue"]) {
556
+ column.dicData = handleTree(data, 'dictValue', 'parentValue');
557
+ } else {
558
+ data.forEach((d) => {
559
+ column.dicData.push(d);
560
+ })
561
+ }
562
+ })
563
+ },
564
+ /**
565
+ * 表格选择器回调函数
566
+ * @param data
567
+ */
568
+ olTableSelectChange(slotName, data) {
569
+ // console.info('插槽名称', slotName, '表格回传的数据', data)
570
+ // console.info('表格', this.form.column)
571
+ this.formData[slotName] = data.value;//修改表单数据,以便后续提交
572
+ if (typeof this.dynamicSlotsField[slotName].change === 'function') {
573
+ this.dynamicSlotsField[slotName].change(data.value)//字段数据更新回调
574
+ }
575
+ //给其他字段赋值
576
+ this.dynamicSlotsOtherResult[slotName]?.forEach(item => {
577
+ this.formData[item.targetField] = data.data[item.sourceField]
578
+ })
579
+ }
580
+
581
+ },
582
+ mounted() {
583
+ this.$nextTick(() => {
584
+ storeDict().init(this.http)
585
+ })
586
+ },
587
+ created() {
588
+ // console.info("我是主子表")
589
+ }
590
+ };
591
+ </script>
592
+ <style scoped>
593
+ .footer-container {
594
+ position: fixed;
595
+ bottom: 0;
596
+ left: 0;
597
+ width: 100%;
598
+ z-index: 1000; /* 确保在其他元素上方 */
599
+ text-align: center; /* 确保按钮居中 */
600
+ }
601
+ </style>
@@ -0,0 +1,46 @@
1
+ <template>
2
+ <vxe-pager v-bind="$attrs">
3
+ <template #left>
4
+ <div class="page-left" v-if="$attrs.showDetails">
5
+ <div v-if="$attrs.htmlValue == undefined">
6
+ <!-- 提示:双击查看详细-->
7
+ <span v-if="$attrs.rowSelection != false"><!--,-->已选择
8
+ <a style="font-weight: 600">{{ $attrs.selectionRowsLength }}</a>项
9
+ <a v-if="$attrs.selectionRowsLength !== 0" style="margin-left:5px;color: blue;cursor: pointer"
10
+ @click="$emit('clearSelected')">清空选择</a>
11
+ </span>
12
+ </div>
13
+ <div v-else v-html="$attrs.htmlValue"></div>
14
+ </div>
15
+ <slot name="left"></slot>
16
+ </template>
17
+ <template #right>
18
+ <slot name="right"></slot>
19
+ </template>
20
+ </vxe-pager>
21
+ </template>
22
+ <script>
23
+ export default {
24
+ name: 'olPager',
25
+ }
26
+ </script>
27
+ <style lang="less" scoped>
28
+ /deep/ .vxe-pager--left-wrapper{
29
+ float: left;
30
+ //width: 50%;
31
+ }
32
+ /deep/ .vxe-pager--goto{
33
+ height: 26px !important;
34
+ }
35
+ .page-left {
36
+ position: relative;
37
+ float: left;
38
+ padding-right: 15px;
39
+ z-index: 10;
40
+ }
41
+
42
+ .vxe-pager {
43
+ height: 35px;
44
+ top: 5px;
45
+ }
46
+ </style>