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,439 @@
1
+ <template>
2
+ <div>
3
+
4
+ <vxe-form :data="configData.form">
5
+ <vxe-form-item title="主表" field="mainTable" :span="10" :item-render="{}">
6
+ <template #default="{ data }">
7
+ <vxe-select v-model="configData.form.mainTable"
8
+ :option-props="{label:'label',value:'value',key:'value'}"
9
+ placeholder="请选择主表"
10
+ :options="state.DBTable"
11
+ @change="setTable"
12
+ ></vxe-select>
13
+ </template>
14
+ </vxe-form-item>
15
+ <vxe-form-item title="转换驼峰" field="hump" :span="4" :item-render="{}">
16
+ <template #default="{ data }">
17
+ <vxe-checkbox v-model="configData.form.hump" checked-value="1" unchecked-value="0"></vxe-checkbox>
18
+ </template>
19
+ </vxe-form-item>
20
+ <vxe-form-item title="自定义SQL" field="definitionSql" :span="10" :item-render="{}">
21
+ <template #default="{ data }">
22
+ <vxe-checkbox v-model="configData.form.definitionSql" checked-value="1" unchecked-value="0"></vxe-checkbox>
23
+ <vxe-button v-if="configData.form.definitionSql == 0"
24
+ @click="addTableData" :disabled="configData.form.mainTable.length == 0">新增关联表
25
+ </vxe-button>
26
+ <!-- <vxe-button @click="tableDelete" status="danger">删除配置</vxe-button>-->
27
+ </template>
28
+ </vxe-form-item>
29
+ </vxe-form>
30
+ <set-table-sql ref="dataConfig" :DBTable="state.DBTable" @handleDelete="handleDelete" @setTable="setTable"
31
+ @setSql="setSql"></set-table-sql>
32
+ <!-- <vxe-table ref="dataConfig" v-if="configData.form.definitionSql == 0"
33
+ :data="state.tableData"
34
+ height="180"
35
+ stripe
36
+ size="mini">
37
+ <vxe-column field="index" title="序号" width="60" align="center"/>
38
+ <vxe-column field="type" title="类型" width="90" align="center">
39
+ <template #default="scope">
40
+ <vxe-select v-model="scope.row.type" placeholder="请选择关联类型" :disabled="scope.rowIndex === 0"
41
+ :options="state.typeOptions" @change="setSql" size="mini"
42
+ :option-props="{label:'label',value:'value',key:'value'}" clearable
43
+ filterable transfer></vxe-select>
44
+ </template>
45
+ </vxe-column>
46
+ <vxe-column field="joinTable" title="关联表" width="250" align="center">
47
+ <template #default="scope">
48
+ <vxe-select v-model="scope.row.joinTable" placeholder="请选择关联表名" :disabled="scope.rowIndex === 0"
49
+ :options="state.DBTable" @change="setTable" size="mini"
50
+ :option-props="{label:'label',value:'value',key:'value'}" clearable
51
+ filterable transfer></vxe-select>
52
+ </template>
53
+ </vxe-column>
54
+ <vxe-column field="joinFiled" title="on" align="center">
55
+ <template #default="scope">
56
+ <vxe-input v-model="scope.row.joinFiled" @change="setSql" :placeholder="scope.rowIndex == 0 ? '/' : '请输入关联信息'"
57
+ size="mini"
58
+ :disabled="scope.rowIndex == 0">
59
+ &lt;!&ndash; <template #suffix>
60
+ <vxe-button size="mini" :disabled="scope.rowIndex == 0" @click="tableOnConfigShow(scope)">配</vxe-button>
61
+ </template>&ndash;&gt;
62
+ </vxe-input>
63
+ </template>
64
+ </vxe-column>
65
+ <vxe-column field="deleteWhere" title="删除条件" align="center">
66
+ <template #default="scope">
67
+ <vxe-input v-model="scope.row.deleteWhere" size="mini">
68
+ </vxe-input>
69
+ </template>
70
+ </vxe-column>
71
+ <vxe-column field="right" title="操作" width="60" align="center">
72
+ <template #default="scope">
73
+ <vxe-button link type="text" size="mini" @click="handleDelete(scope.rowIndex)" status="danger"
74
+ :disabled="scope.rowIndex == 0">删除
75
+ </vxe-button>
76
+ </template>
77
+ </vxe-column>
78
+ </vxe-table>-->
79
+
80
+ <vxe-form :data="configData.form">
81
+ <vxe-form-item title="SQL" field="executeSql" :span="24" :item-render="{}">
82
+ <template #default="{ data }">
83
+ <vxe-textarea
84
+ :disabled="configData.form.definitionSql == 0"
85
+ v-model="configData.form.executeSql"
86
+ :autosize="{ minRows: 5 }"
87
+ type="textarea"
88
+ placeholder="查询sql"
89
+ />
90
+ </template>
91
+ </vxe-form-item>
92
+ <vxe-form-item title="where" field="executeWhere" :span="24" :item-render="{}">
93
+ <template #default="{ data }">
94
+ <vxe-input
95
+ v-if="configData.form.definitionSql == 0"
96
+ v-model="configData.form.executeWhere"
97
+ placeholder="where条件"
98
+ />
99
+ </template>
100
+ </vxe-form-item>
101
+
102
+ </vxe-form>
103
+ <vxe-button status="primary" @click="getData" :disabled="configData.form.executeSql.length ==0"
104
+ style="margin:10px 0">执行SQL
105
+ </vxe-button>
106
+ <vxe-button status="success" v-if="configData.form.definitionSql == 0"
107
+ :disabled="configData.form.mainTable.length ==0"
108
+ @click="$refs.filedConfig.init(state.tableData)">字段配置
109
+ </vxe-button>
110
+ <!-- <vxe-button v-if="configData.form.definitionSql == 0" @click="sqlParseTable">SQL解析</vxe-button>-->
111
+ <vxe-button @click="updateExecuteSql(0)">SQL格式化</vxe-button>
112
+ <vxe-button @click="updateExecuteSql(1)">SQL压缩</vxe-button>
113
+ <div v-if="state.dyTable.show != 0" style="text-align: left;color: red">
114
+ <h1>SQL异常</h1>
115
+ <p>{{ state.dyTable.errorMsg }}</p>
116
+ </div>
117
+ <vxe-table
118
+ ref="sqlData"
119
+ v-else
120
+ align="allAlign"
121
+ height="250"
122
+ stripe
123
+ border
124
+ size="mini"
125
+ :data="state.dyTable.tableData">
126
+ <vxe-column v-if="configData.form.selectBox == 2 " :type="'checkbox'" width="38"/>
127
+ <vxe-column v-else-if="configData.form.selectBox == 1 " :type="'radio'" width="38"/>
128
+ <vxe-column type="seq" title="序号" width="60"/>
129
+ <vxe-column v-for="column in configData.tableColumn" :visible="column.visible == 1"
130
+ :title="column.title"
131
+ :width="getWidth(column.title)"
132
+ :field="column.asName"
133
+ show-header-overflow show-overflow>
134
+ <template #header>
135
+ <span>{{ column.title }} </span><i class="vxe-icon-error-circle-fill cursor" @click="refreshColumn(column)"/>
136
+ </template>
137
+ </vxe-column>
138
+ </vxe-table>
139
+ <table-on-config ref="tableOnConfig"></table-on-config>
140
+ <filed-config ref="filedConfig" @close="filedConfigClose"></filed-config>
141
+ </div>
142
+ </template>
143
+
144
+ <script setup>
145
+ import {inject, nextTick, reactive, ref, toRaw} from "vue";
146
+ import TableOnConfig from "@/views/table/add-or-edit/configOld/dataTags/table-on-config.vue"
147
+ import FiledConfig from "@/views/table/add-or-edit/configOld/dataTags/filed-config.vue";
148
+ import sqlFormatter from 'sql-formatter';
149
+ import {get, postQs} from "@/utils/http/httpUtils";
150
+ import SetTableSql from "@/views/table/add-or-edit/configOld/dataTags/set-table-sql.vue";
151
+ const http = inject('http')
152
+ const configData = inject('configData');
153
+ const dataConfig = ref();
154
+ const sqlData = ref();
155
+ const state = reactive({
156
+ DBTable: [],
157
+ typeOptions: [
158
+ {label: '内连接', value: 'join'},
159
+ {label: '左连接', value: 'left join'},
160
+ {label: '右连接', value: 'right join'},
161
+ ],
162
+ tableData: [{index: "t1", type: "主表", joinTable: "/", joinFiled: "/", deleteWhere: 'id=${t1_id}'}],
163
+ dyTable: {
164
+ show: 0,
165
+ errorMsg: '',
166
+ tableData: []
167
+ }
168
+
169
+ })
170
+ const setDeleteTable = () => {
171
+ configData.form.deleteWhere = [];
172
+ for (let o of state.tableData) {
173
+ if (o.deleteWhere && o.deleteWhere.trim()) {
174
+ configData.form.deleteWhere.push({
175
+ tableName: o.joinTable,
176
+ wheres: o.deleteWhere,
177
+ theme: o.index
178
+ })
179
+ }
180
+ }
181
+ }
182
+
183
+ function getWidth(str) {
184
+ return str.length * 15 + 35;
185
+ }
186
+
187
+ const sqlParseTable = () => {
188
+ let sql = configData.form.executeSql.split(" from ");
189
+ let tables = sql[1].split(" ");
190
+ let tableData = parseTable(tables);
191
+ let promise = [];
192
+ for (let i = 0; i < tableData.length; i++) {
193
+ promise.push(get(http,"/online/tableMain/getDBTableColumnList", {tableName: tableData[i].joinTable}));
194
+ }
195
+ Promise.all(promise).then((result) => {
196
+ for (let i = 0; i < result.length; i++) {
197
+ let cloumns = result[i];
198
+ for (let cloumn of cloumns) {
199
+ let checked = "0";
200
+ let visible = "0";
201
+ if (configData.tableColumn.length != 0) {
202
+ for (let o of configData.tableColumn) {
203
+ if (cloumn.column_name == o.tableField) {
204
+ if (cloumn.table_name == tableData[i].joinTable) {
205
+ checked = '1';
206
+ visible = o.visible;
207
+ }
208
+ }
209
+ }
210
+ } else {
211
+ checked = '1';
212
+ visible = '1';
213
+ }
214
+ cloumn.checked = checked;
215
+ cloumn.visible = visible;
216
+ }
217
+ tableData[i]['columnList'] = cloumns;
218
+ }
219
+ state.tableData = tableData;
220
+ dataConfig.value.setData(state.tableData)
221
+ nextTick(() => {
222
+ sqlData.value.refreshColumn();
223
+ })
224
+ getData();
225
+ })
226
+
227
+ }
228
+
229
+ function getTableDelete(theme) {
230
+ for (let deleteWhereElement of configData.form.deleteWhere) {
231
+ if (deleteWhereElement.theme == theme) {
232
+ return deleteWhereElement.wheres;
233
+ }
234
+ }
235
+ }
236
+
237
+ function remoteMethod() {
238
+ get(http,"/online/tableMain/getDBTableList").then((data) => {
239
+ state.DBTable = data;
240
+ })
241
+ }
242
+
243
+ remoteMethod();
244
+
245
+ const parseTable = (tables) => {
246
+ let tableData = [{index: "t1", type: "主表", joinTable: configData.form.mainTable, joinFiled: "/"}];
247
+ state.tableData[0].joinTable = tables[0];
248
+ for (let i = 2; i < tables.length; i++) {
249
+ let str = tables[i];
250
+ if (str == "join") {
251
+ let type = tables[i - 1] == ("left" || "right") ? tables[i - 1] + " join" : "join";
252
+ let joinTable = tables[++i];
253
+ let index = tables[++i];
254
+ i++;
255
+ let joinFiled = tables[++i];
256
+ tableData.push({
257
+ index: index,
258
+ type: type,
259
+ joinTable: joinTable,
260
+ joinFiled: joinFiled
261
+ });
262
+ }
263
+ }
264
+ for (let data of tableData) {
265
+ data.deleteWhere = getTableDelete(data.index)
266
+ }
267
+ return tableData;
268
+ }
269
+
270
+ const setTable = (data) => {
271
+ state.tableData = data;
272
+ state.tableData[0].joinTable = configData.form.mainTable;
273
+ let promise = [];
274
+ for (let i = 0; i < state.tableData.length; i++) {
275
+ promise.push(get(http,"/online/tableMain/getDBTableColumnList", {tableName: state.tableData[i].joinTable}));
276
+ }
277
+ Promise.all(promise).then((result) => {
278
+ for (let i = 0; i < result.length; i++) {
279
+ state.tableData[i]['columnList'] = result[i];
280
+ }
281
+ setSql();
282
+ })
283
+ }
284
+
285
+ const setSql = (data) => {
286
+ if (data) {
287
+ state.tableData = data;
288
+ }
289
+ let sqlTableOn = configData.form.mainTable + " t1 ";
290
+ let sqlFiled = "";
291
+ let tableColumns = [];
292
+ let sort = 0;
293
+ for (let i = 0; i < state.tableData.length; i++) {
294
+ let obj = state.tableData[i];
295
+ for (let j = 0; j < obj.columnList.length; j++) {
296
+ let column = obj.columnList[j];
297
+ if (column.checked == 0) {
298
+ continue;
299
+ }
300
+ if (sqlFiled.length != 0) {
301
+ sqlFiled += ",";
302
+ }
303
+ sort++;
304
+ sqlFiled += obj.index + "." + column.column_name + " AS " + obj.index + "_" + column.column_name;
305
+ let column_name = column.column_name;
306
+ let column_comment = column.column_comment ? column.column_comment : column_name
307
+ tableColumns.push({
308
+ sort: sort,
309
+ tableField: column_name,
310
+ field: obj.index + "_" + column_name,
311
+ title: column_comment,
312
+ label: column_comment,
313
+ visible: column.visible,
314
+ display: 1,
315
+ asName: obj.index + "_" + column_name
316
+ })
317
+ }
318
+ if (i != 0) {
319
+ sqlTableOn += " " + obj.type + " " + obj.joinTable + " " + obj.index + " on " + obj.joinFiled;
320
+ }
321
+ }
322
+
323
+ for (let tableColumn of tableColumns) {
324
+ let add = true;
325
+ for (let c of configData.tableColumn) {
326
+ if (c.field == tableColumn.field) {
327
+ add = false;
328
+ }
329
+ }
330
+ if (add) {
331
+ configData.tableColumn.push(tableColumn);
332
+ }
333
+ }
334
+
335
+ for (let i = 0; i < configData.tableColumn.length; i++) {
336
+ let remove = true;
337
+ for (let tableColumn of tableColumns) {
338
+ if (configData.tableColumn[i].field == tableColumn.field) {
339
+ remove = false;
340
+ }
341
+ }
342
+ if (remove) {
343
+ configData.tableColumn.splice(i, 1);
344
+ }
345
+ }
346
+ configData.form.executeSql = "select " + sqlFiled + " from " + sqlTableOn;
347
+ nextTick(() => {
348
+ sqlData.value.refreshColumn();
349
+ })
350
+ }
351
+
352
+ const addTableData = () => {
353
+ state.tableData = [...state.tableData, {
354
+ index: "t" + (state.tableData.length + 1),
355
+ type: "join",
356
+ joinTable: "",
357
+ joinFiled: "t" + state.tableData.length + ".=t" + (state.tableData.length + 1) + "."
358
+ }]
359
+ dataConfig.value.setData(state.tableData)
360
+ }
361
+
362
+ const updateExecuteSql = (v) => {
363
+ if (v === 0) {
364
+ configData.form.executeSql = sqlFormatter.format(configData.form.executeSql,
365
+ {
366
+ language: 'sql', keywordCase: 'upper', indentStyle: 'tabularLeft'
367
+ });
368
+ } else {
369
+ configData.form.executeSql = configData.form.executeSql.replace(/\s+/g, " ");
370
+ }
371
+ }
372
+
373
+ const filedConfigClose = (data) => {
374
+ if (!data) {
375
+ return;
376
+ }
377
+ for (let j = 0; j < state.tableData.length; j++) {
378
+ let obj = state.tableData[j];
379
+ state.tableData[j].columnList = data[obj.index];
380
+ }
381
+ setSql();
382
+ }
383
+
384
+ function tableDelete() {
385
+
386
+ }
387
+
388
+ const getData = () => {
389
+ let sql = toRaw(configData.form.executeSql);
390
+ if (configData.form.executeWhere.trim()) {
391
+ sql += 'where ' + configData.form.executeWhere.trim();
392
+ }
393
+ postQs(http,"/online/tableMain/getTableData", {sql: sql}, undefined, false).then(res => {
394
+ if (res.code == 200) {
395
+ if (res.data[0]) {
396
+ state.dyTable.show = 0;
397
+ state.dyTable.tableData = res.data;
398
+ } else {
399
+ state.dyTable.show = 1;
400
+ state.dyTable.errorMsg = "无数据";
401
+ }
402
+
403
+ } else {
404
+ state.dyTable.show = 1;
405
+ state.dyTable.errorMsg = res.msg;
406
+ }
407
+ })
408
+ }
409
+
410
+ const handleDelete = (index) => {
411
+ var parse = JSON.parse(JSON.stringify(state.tableData));
412
+ parse.splice(index, 1);
413
+ state.tableData = parse;
414
+ dataConfig.value.setData(parse)
415
+ setSql();
416
+ }
417
+ const refreshColumn = (column) => {
418
+ if (column) {
419
+ column.visible = 0;
420
+ }
421
+ nextTick(() => {
422
+ sqlData.value.refreshColumn();
423
+ })
424
+ }
425
+ defineExpose({
426
+ sqlParseTable,
427
+ setDeleteTable,
428
+ refreshColumn,
429
+ })
430
+ </script>
431
+ <style scoped lang="less">
432
+ .cursor {
433
+ cursor: pointer;
434
+ }
435
+
436
+ .cursor:hover {
437
+ color: red;
438
+ }
439
+ </style>
@@ -0,0 +1,79 @@
1
+ <template>
2
+ <vxe-table ref="dataConfig"
3
+ :data="state.data"
4
+ height="180"
5
+ stripe
6
+ size="mini">
7
+ <vxe-column field="index" title="序号" width="60" align="center"/>
8
+ <vxe-column field="type" title="类型" width="90" align="center">
9
+ <template #default="scope">
10
+ <vxe-select v-model="scope.row.type" placeholder="请选择关联类型" :disabled="scope.rowIndex === 0"
11
+ :options="state.typeOptions" @change="emit('setSql',state.data)" size="mini"
12
+ :option-props="{label:'label',value:'value',key:'value'}" clearable
13
+ filterable transfer></vxe-select>
14
+ </template>
15
+ </vxe-column>
16
+ <vxe-column field="joinTable" title="关联表" width="250" align="center">
17
+ <template #default="scope">
18
+ <vxe-select v-model="scope.row.joinTable" placeholder="请选择关联表名" :disabled="scope.rowIndex === 0"
19
+ :options="props.DBTable" @change="emit('setTable',state.data)" size="mini"
20
+ :option-props="{label:'label',value:'value',key:'value'}" clearable
21
+ filterable transfer></vxe-select>
22
+ </template>
23
+ </vxe-column>
24
+ <vxe-column field="joinFiled" title="on" align="center">
25
+ <template #default="scope">
26
+ <vxe-input v-model="scope.row.joinFiled" @change="emit('setSql',state.data)"
27
+ :placeholder="scope.rowIndex == 0 ? '/' : '请输入关联信息'"
28
+ size="mini"
29
+ :disabled="scope.rowIndex == 0">
30
+ <!-- <template #suffix>
31
+ <vxe-button size="mini" :disabled="scope.rowIndex == 0" @click="tableOnConfigShow(scope)">配</vxe-button>
32
+ </template>-->
33
+ </vxe-input>
34
+ </template>
35
+ </vxe-column>
36
+ <vxe-column field="deleteWhere" title="删除条件" align="center">
37
+ <template #default="scope">
38
+ <vxe-input v-model="scope.row.deleteWhere" size="mini">
39
+ </vxe-input>
40
+ </template>
41
+ </vxe-column>
42
+ <vxe-column field="right" title="操作" width="60" align="center">
43
+ <template #default="scope">
44
+ <vxe-button link type="text" size="mini" @click="handleDelete(scope.rowIndex)" status="danger"
45
+ :disabled="scope.rowIndex == 0">删除
46
+ </vxe-button>
47
+ </template>
48
+ </vxe-column>
49
+ </vxe-table>
50
+ </template>
51
+ <script setup>
52
+ import {defineEmits, defineProps, reactive, watch} from "vue";
53
+
54
+ const props = defineProps({
55
+ DBTable: {required: true},
56
+ })
57
+ function setData(data){
58
+ state.data = data;
59
+ }
60
+ const state = reactive({
61
+ data:[],
62
+ DBTable:[],
63
+ typeOptions: [
64
+ {label: '内连接', value: 'join'},
65
+ {label: '左连接', value: 'left join'},
66
+ {label: '右连接', value: 'right join'},
67
+ ]
68
+ })
69
+
70
+ const handleDelete = (index) => {
71
+ emit("handleDelete", index)
72
+ }
73
+
74
+ const emit = defineEmits(["setSql"]); //声明 emits
75
+ // 对外暴露
76
+ defineExpose({
77
+ setData
78
+ })
79
+ </script>
@@ -0,0 +1,74 @@
1
+ <template>
2
+ <!-- <vxe-dialog
3
+ class="table-on-config"
4
+ v-model="dialogVisible"
5
+ :show-close="false"
6
+ title="关联字段配置"
7
+ width="700px"
8
+ :before-close="handleClose">
9
+ <vxe-table height="200px">
10
+ <vxe-table-column type="index" label="序号" width="60" align="center"/>
11
+ <vxe-table-column prop="filedName" label="字段-名称" width="180" align="center"/>
12
+ <vxe-table-column prop="filedName" label="关联表" width="180" align="center"/>
13
+ <vxe-table-column prop="filedName" label="字段-名称(关联表)" align="center"/>
14
+ <vxe-table-column fixed="right" label="操作" width="60" align="center">
15
+ <template #default="scope">
16
+ <vxe-button link type="primary" size="small" @click="handleDelete(scope.row)" :disabled="scope.$index == 0">删除
17
+ </vxe-button>
18
+ </template>
19
+ </vxe-table-column>
20
+ </vxe-table>
21
+ <vxe-form :model="form" style="padding: 10px">
22
+ <vxe-form-item label="自定义">
23
+ <vxe-input v-model="form.name"/>
24
+ </vxe-form-item>
25
+ <vxe-form-item label="on">
26
+ <vxe-input v-model="form.name" disabled=""/>
27
+ </vxe-form-item>
28
+ </vxe-form>
29
+ <template #footer>
30
+ <span class="dialog-footer">
31
+ <vxe-button @click="dialogVisible = false">取消</vxe-button>
32
+ <vxe-button type="primary" @click="dialogVisible = false">保存</vxe-button>
33
+ </span>
34
+ </template>
35
+ </vxe-dialog>-->
36
+
37
+ </template>
38
+ <script>
39
+ import {reactive, ref} from "vue";
40
+ export default {
41
+ name:'tableOnConfig',
42
+ setup() {
43
+ const dialogVisible = ref(false)
44
+ const form = reactive({
45
+ mainTable: '',
46
+ hump: '1',
47
+ })
48
+ const tab = reactive({
49
+ activeName: 'data'
50
+ })
51
+ const size = ref(0)
52
+ size.value = window.innerHeight-210;
53
+ window.onresize = () => {
54
+ size.value = window.innerHeight-210;
55
+ };
56
+ return {dialogVisible, tab, form, size}
57
+ },
58
+ methods: {
59
+ handleClose() {
60
+
61
+ },
62
+ handleDelete(row){
63
+
64
+ },
65
+
66
+ handleClick() {
67
+
68
+ }
69
+ }
70
+ }
71
+ </script>
72
+ <style lang="less">
73
+
74
+ </style>