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,192 @@
1
+ <template>
2
+ <div>
3
+ <el-dialog
4
+ v-model="dialogVisible"
5
+ v-if="dialogVisible"
6
+ fullscreen
7
+ :title="form.isAdd =='1' ? '新增数据表' : '编辑数据表'"
8
+ destroy-on-close
9
+ :show-close="false"
10
+ :showHeader="false"
11
+ >
12
+ <div v-loading="loading">
13
+ <el-form :model="form" ref="forms" :rules="rules" label-width="80">
14
+ <el-row>
15
+ <el-col :span="3">
16
+ <el-form-item label="数据库">
17
+ <olDictTag code="db_name" v-model="form.dbName" @change="dbChange"
18
+ :disabled="form.isAdd =='0'"></olDictTag>
19
+ </el-form-item>
20
+ </el-col>
21
+ <el-col :span="5">
22
+ <el-form-item label="表描述" prop="desc">
23
+ <el-input v-model="form.desc" maxlength="50">
24
+ <template #append>
25
+ <el-button @click="show" :disabled="form.isAdd =='0'">搜索英文</el-button>
26
+ </template>
27
+ </el-input>
28
+ </el-form-item>
29
+ </el-col>
30
+ <el-col :span="5">
31
+ <el-form-item label="表名" prop="tableName">
32
+ <el-input v-model="form.tableName" maxlength="50" :disabled="form.isAdd =='0'"/>
33
+ </el-form-item>
34
+ </el-col>
35
+ <!-- <el-col :span="3">
36
+ <el-form-item label="操作者标识" label-width="90">
37
+ <el-select v-model="form.bs" disabled @change="$refs.dbFiled.updateBS(form)">
38
+ <el-option label="by" value-key="by" value="by"/>
39
+ <el-option label="user" value-key="user" value="user"/>
40
+ </el-select>
41
+ </el-form-item>
42
+ </el-col>-->
43
+ <el-col :span="3" v-if="form.isAdd =='1'">
44
+ <el-form-item label="默认表字段" label-width="90">
45
+ <olDictTag code="pubilc_yes_no" @change="$refs.dbFiled.initDefaultData(this.form)"
46
+ v-model="form.tableDefault"/>
47
+ </el-form-item>
48
+ </el-col>
49
+ </el-row>
50
+ </el-form>
51
+ <el-tabs
52
+ v-model="activeName"
53
+ type="card"
54
+ >
55
+ <el-tab-pane label="字段属性" name="filed">
56
+ <db-filed style="height: calc(100vh - 250px)" ref="dbFiled" @ok="loading =false"></db-filed>
57
+ </el-tab-pane>
58
+ <!-- <el-tab-pane label="索引信息" name="index">Config</el-tab-pane>
59
+ <el-tab-pane label="DDL信息" name="ddl">Role</el-tab-pane>-->
60
+ </el-tabs>
61
+ <chinese-to-english ref="chineseToEnglish"></chinese-to-english>
62
+ </div>
63
+
64
+
65
+ <template #footer>
66
+ <div class="dialog-footer">
67
+ <el-button type="primary" @click="handleClose">关闭</el-button>
68
+ <el-button type="primary" :loading="loading" @click="save(false)">保存</el-button>
69
+ <el-button type="primary" :loading="loading" @click="save(true)">保存并关闭</el-button>
70
+ </div>
71
+ </template>
72
+ </el-dialog>
73
+
74
+ </div>
75
+ </template>
76
+ <script>
77
+
78
+ import DbFiled from "@/views/db/filed.vue";
79
+ import {get, post} from "@/utils/http/httpUtils";
80
+ import ChineseToEnglish from "@/views/db/chineseToEnglish.vue";
81
+
82
+ export default {
83
+ name: "dbIndex",
84
+ components: {ChineseToEnglish, DbFiled},
85
+ inject: ['http'],
86
+ provide() {
87
+ return {
88
+ DBForm: this.form
89
+ }
90
+ },
91
+ props: {
92
+ syncTable: {},
93
+ setFormConfigData: {},
94
+ syncFormConfig: {}
95
+ },
96
+ data() {
97
+ return {
98
+ loading: false,
99
+ rules: {
100
+ desc: [{
101
+ required: true,
102
+ message: '请输入数据库表名',
103
+ trigger: 'blur'
104
+ }], tableName: [{
105
+ required: true,
106
+ message: '请输入数据库描述',
107
+ trigger: 'blur'
108
+ }],
109
+ },
110
+ dialogVisible: false,
111
+ form: {
112
+ dbName: '',
113
+ dbType: '',
114
+ tableName: '',
115
+ desc: '',
116
+ isAdd: '1',
117
+ bs: 'by',
118
+ tableDefault: '1'
119
+ },
120
+ activeName: 'filed',
121
+ }
122
+ },
123
+ methods: {
124
+ show() {
125
+ this.loading = false;
126
+ this.$refs.chineseToEnglish.show(this.form, 'desc', 'tableName')
127
+ },
128
+ dbChange(val) {
129
+ if (val == this.form.dbType) {
130
+ return
131
+ }
132
+ this.getDbType(val)
133
+ },
134
+ getDbType(val) {
135
+ get(this.http, "/online/asyncDb/getDataBaseType", {
136
+ dbName: val
137
+ }).then((res) => {
138
+ this.form.dbType = res
139
+ }).finally(() => {
140
+ })
141
+ },
142
+ handleClose() {
143
+ this.dialogVisible = false;
144
+ this.$emit("emits", {m: 'query'});
145
+ },
146
+ init(o) {
147
+ this.dialogVisible = true;
148
+ this.$nextTick(() => {
149
+ if (o) {
150
+ this.loading = true;
151
+ this.form['tableName'] = o.tableName;
152
+ this.form['dbName'] = o.tableSchema;
153
+ this.form.isAdd = "0";
154
+ this.getDbType(this.form.dbName)
155
+ this.$refs.dbFiled.loadData(this.form);
156
+ } else {
157
+ this.$refs.dbFiled.initDefaultData({bs: 'by'});
158
+ this.form.isAdd = "1";
159
+ this.form['tableName'] = "";
160
+ if(o){
161
+ this.form['dbName'] = o.tableSchema;
162
+ }
163
+ this.form['desc'] = "";
164
+ }
165
+ })
166
+ },
167
+ save(e) {
168
+ this.$refs.forms.validate((valid, msg) => {
169
+ if (valid) {
170
+ this.loading = true
171
+ let params = JSON.parse(JSON.stringify(this.form));
172
+ this.$refs.dbFiled.setList(params)
173
+ post(this.http, "/online/asyncDb/save", params).then(res => {
174
+ this.form.isAdd = "0";
175
+ if (res && e) {
176
+ this.handleClose();
177
+ } else if (res) {
178
+ this.$refs.dbFiled.loadData(this.form);
179
+ }
180
+ }).finally(()=>{
181
+ this.loading = false
182
+ })
183
+ }
184
+ return
185
+ })
186
+ }
187
+ },
188
+ created() {
189
+ }
190
+
191
+ }
192
+ </script>
@@ -0,0 +1,139 @@
1
+ <template>
2
+ <el-dialog
3
+ v-model="dialogVisible"
4
+ :title="title"
5
+ style="height: 100vh;width:100%"
6
+ fullscreen destroy-on-close>
7
+ <auto-height v-slot="{ height }" v-loading="loading" :style="'height:'+height">
8
+ <div style="width:250px;position: relative;float: left;height: 100%">
9
+ <preview-left @scrollToColumn="scrollToColumn" :columns="columns" ref="left" v-if="columns.length > 0"
10
+ @updateColumn="updateColumn"
11
+ @searchCancel="searchCancel"></preview-left>
12
+ </div>
13
+ <div style="position: relative;float: left;width:calc(100% - 250px);height: 100%">
14
+ <preview-right ref="right" @updateColumn="$refs.left.refresh()" :columns="columns"/>
15
+ </div>
16
+ </auto-height>
17
+ </el-dialog>
18
+ </template>
19
+ <script>
20
+
21
+ import AutoHeight from "@/components/auto-height/index.vue";
22
+ import PreviewLeft from "@/views/db/preview/left.vue";
23
+ import PreviewRight from "@/views/db/preview/right.vue";
24
+ import {get} from "@/utils/http/httpUtils";
25
+
26
+ export default {
27
+ name: 'preview',
28
+ components: {PreviewRight, PreviewLeft, AutoHeight,},
29
+ inject: ['http'],
30
+ data() {
31
+ return {
32
+ dialogVisible: false,
33
+ columns: [],
34
+ title: '',
35
+ sql: '',
36
+ loading: true,
37
+ }
38
+ }, methods: {
39
+ scrollToColumn(row) {
40
+ for (let i = 1; i < this.columns.length; i++) {
41
+ if (this.columns[i].COLUMN_NAME == row.field) {
42
+ let index = (this.columns.length - i) < 3 ? i : i - 1;
43
+ this.$refs.right.$table.scrollToColumn(this.columns[index].COLUMN_NAME)
44
+ console.log(this.columns[i].children[0].children[0])
45
+ this.$refs.right.$table.clearCurrentColumn()
46
+ this.$refs.right.$table.setCurrentColumn(this.columns[i].children[0].children[0])
47
+ console.log(this.$refs.right.$table.getCurrentColumn())
48
+ }
49
+ }
50
+
51
+ },
52
+ searchCancel() {
53
+ this.$refs.right.$table.reloadColumn(this.columns)
54
+ this.$refs.right.query()
55
+ },
56
+ updateColumn(e) {
57
+ if (e != undefined) {
58
+ this.columns = e;
59
+ }
60
+ this.$refs.right.$table.reloadColumn(this.columns)
61
+ },
62
+ init(o) {
63
+ this.dialogVisible = true;
64
+ this.loading = true;
65
+ this.$nextTick(() => {
66
+ get(this.http, "/online/asyncDb/getColumn", {
67
+ dbName: o.tableSchema,
68
+ dataSource: o.datasource,
69
+ tableName: o.tableName
70
+ }).then(({column}) => {
71
+ this.loading = false;
72
+ let i = 0;
73
+ this.title = o.tableSchema + " - " + o.tableName + " [" + o.tableComment + "]" + " - 字段数量:" + column.length;
74
+ for (const c of column) {
75
+ c.label = c.COLUMN_NAME + '[' + c.COLUMN_COMMENT + ']';
76
+ c.field = c.COLUMN_NAME + "_sort";
77
+
78
+ c.key = i;
79
+ i++;
80
+ c.sortable = true;
81
+ c.params = {
82
+ asc: false,
83
+ desc: false
84
+ };
85
+ c.fixed = c.is_pk == 1 ? 'left' : undefined;
86
+ if (c.is_pk == 1) {
87
+ c.type = 'html';
88
+ c.title = '<span style="color:red">' + c.COLUMN_NAME + '[PK]</span>';
89
+ } else {
90
+ c.title = c.COLUMN_NAME;
91
+ }
92
+ // c.slots = {
93
+ // header: 'checkedBox_header'
94
+ // };
95
+ c.children = [{
96
+ title: c.COLUMN_COMMENT,
97
+ fixed: c.is_pk == 1 ? 'left' : undefined,
98
+ slots: {
99
+ header: 'checkedBox_header'
100
+ },
101
+ children: [{
102
+ field: c.COLUMN_NAME,
103
+ title: c.COLUMN_COMMENT,
104
+ visible: true,
105
+ fixed: c.is_pk == 1 ? 'left' : undefined,
106
+ editRender: {name: 'input'},
107
+ params: {
108
+ is_pk: c.is_pk == 1,
109
+ value: '',
110
+ range: false,
111
+ time: false,
112
+ start: '',
113
+ end: '',
114
+ },
115
+ width: 200,
116
+ slots: {
117
+ header: 'header_name_auto_filter'
118
+ },
119
+ }]
120
+ }]
121
+ }
122
+ column.push({
123
+ title: '操作',
124
+ label: '操作',
125
+ fixed: 'right',
126
+ width: 110,
127
+ slots: {
128
+ default: 'operate'
129
+ }
130
+ })
131
+ this.columns = column;
132
+ this.$refs.right.init(o);
133
+ })
134
+ })
135
+ },
136
+ },
137
+ }
138
+ </script>
139
+
@@ -0,0 +1,204 @@
1
+ <template>
2
+ <div class="search">
3
+ <el-input placeholder="关键字搜索" v-model="filterText" clearable>
4
+ </el-input>
5
+ <el-button @click="visible(false)">取消全选</el-button>
6
+ <el-button @click="visible(true)">全选</el-button>
7
+ </div>
8
+ <el-scrollbar style="height: calc(100% - 70px)" v-loading="loading" element-loading-text="正在加载数据中...">
9
+ <el-tree ref="treeBox"
10
+ :draggable="true"
11
+ v-if="!loading"
12
+ :data="$attrs.columns"
13
+ :show-border="true"
14
+ v-bind="$attrs"
15
+ node-key="COLUMN_NAME"
16
+ :allow-drop="allowDrop"
17
+ :props="{
18
+ children: 'children2'
19
+ }"
20
+ :show-checkbox="false"
21
+ :highlight-current="true"
22
+ @node-drop="nodeDrop"
23
+ :allow-drag="allowDrag"
24
+ :filter-node-method="filterNode">
25
+ <template #default="{ node, data }">
26
+ <span class="custom-tree-node" v-if="data.slots === undefined">
27
+ {{ data.key + 1 }}<el-checkbox v-model="data.children[0].children[0].visible" :disabled="data.is_pk"
28
+ @change="update">
29
+ <el-icon v-if="data.is_pk" style="color:red"><Female/></el-icon>
30
+ <el-tooltip v-if="node.label.length > 15"
31
+ class="box-item"
32
+ effect="dark"
33
+ :content="node.label"
34
+ placement="left-start"
35
+ >
36
+ <span style="color: #2d2a2e">{{ node.label.substring(0, 15) }}</span>
37
+ </el-tooltip>
38
+ <span v-else style="color: #2d2a2e">{{ node.label }}</span>
39
+ </el-checkbox>
40
+ <span style="position: absolute;right: 15px;line-height: 30px">
41
+ <el-tooltip
42
+ class="box-item"
43
+ effect="dark"
44
+ v-if="data.children[0].children[0].isNull"
45
+ content="当前查询所有数据为空值"
46
+ placement="top-start"
47
+ >
48
+ <el-icon style="color: red"><WarningFilled/>
49
+ </el-icon>
50
+ </el-tooltip>
51
+ <el-tooltip
52
+ v-if="data.children[0].children[0].search"
53
+ class="box-item"
54
+ effect="dark"
55
+ :content="data.children[0].children[0].searchContent"
56
+ placement="top-start"
57
+ >
58
+ <el-icon style="color: red"
59
+ @click="searchCancel(data.children[0].children[0])"><Search/>
60
+ </el-icon>
61
+ </el-tooltip>
62
+ <el-tooltip class="box-item"
63
+ effect="dark"
64
+ content="定位列"
65
+ placement="top-start"
66
+ >
67
+ <el-icon @click="scrollToColumn(data.children[0].children[0])"><Location/>
68
+ </el-icon>
69
+ </el-tooltip>
70
+ </span>
71
+ </span>
72
+ <span v-else>
73
+ {{ node.label }}
74
+ </span>
75
+ </template>
76
+ </el-tree>
77
+ </el-scrollbar>
78
+ </template>
79
+
80
+ <script>
81
+ export default {
82
+ name: "previewLeft",
83
+ inject: ['http'],
84
+ computed: {
85
+ props() {
86
+ return {
87
+ key: this.treeConfig.value,
88
+ label: this.treeConfig.label,
89
+ children: this.treeConfig.children
90
+ }
91
+ }
92
+ },
93
+ data() {
94
+ return {
95
+ toolButOptions: [],
96
+ search: '关键字搜索',
97
+ filterText: "",
98
+ loading: false,
99
+ value: ''
100
+ }
101
+ },
102
+ methods: {
103
+ scrollToColumn(row) {
104
+ this.$emit("scrollToColumn", row)
105
+ },
106
+ allowDrag(node) {
107
+ return node.data.children != undefined
108
+ },
109
+ refresh() {
110
+ console.log("刷新")
111
+ this.loading = true;
112
+ this.$nextTick(() => {
113
+ this.loading = false;
114
+ })
115
+ },
116
+ nodeDrop(draggingNode, dropNode) {
117
+ // 找到被拖拽节点和放置节点的位置
118
+ const draggingNodeIndex = this.$attrs.columns.findIndex(node => node.COLUMN_NAME === draggingNode.data.COLUMN_NAME);
119
+ const dropNodeIndex = this.$attrs.columns.findIndex(node => node.COLUMN_NAME === dropNode.data.COLUMN_NAME);
120
+ // 更新数组,移除被拖拽节点并在新位置插入
121
+ let clonedData = [...this.$attrs.columns];
122
+ clonedData.splice(draggingNodeIndex, 1);
123
+ clonedData.splice(dropNodeIndex, 0, draggingNode.data);
124
+ // 更新treeData
125
+ //this.$attrs.columns = clonedData;
126
+ this.$emit("updateColumn", clonedData)
127
+ },
128
+ allowDrop(draggingNode, dropNode, type) {
129
+ return type != 'inner'
130
+ },
131
+ searchCancel(o) {
132
+ if (o.search) {
133
+ o.search = false;
134
+ o.params.start = '';
135
+ o.params.end = '';
136
+ o.params.value = ''
137
+ }
138
+ this.$emit('searchCancel')
139
+ },
140
+ visible(visible) {
141
+ for (let column of this.$attrs.columns) {
142
+ column.children[0].children[0].visible = visible;
143
+ }
144
+ this.update()
145
+ },
146
+ update() {
147
+ this.$emit("updateColumn")
148
+ },
149
+ async handleOperationClick(e) {
150
+ this.$emit("handleOperationClick", e)
151
+ },
152
+ filterNode(value, data) {
153
+
154
+ if (!value) {
155
+ return true;
156
+ }
157
+ return data.label.toString().toLowerCase().includes(value.toString().toLowerCase());
158
+ }
159
+ },
160
+ watch: {
161
+ filterText(val) {
162
+ this.$refs.treeBox.filter(val);
163
+ }
164
+ }, created() {
165
+ },
166
+
167
+ }
168
+
169
+ </script>
170
+
171
+ <style>
172
+
173
+ </style>
174
+ <style lang="scss" scoped>
175
+ .search {
176
+ height: 68px;
177
+
178
+ div:first-child {
179
+ width: 100%
180
+ }
181
+ }
182
+
183
+ .tree {
184
+ position: relative;
185
+ background-color: white;
186
+ height: 100%;
187
+
188
+ .title {
189
+ height: 20px;
190
+ padding: 6px;
191
+ border-bottom: 1px solid #dcdfe685;
192
+ position: relative;
193
+
194
+ b {
195
+ position: relative;
196
+ font-size: 14px
197
+ }
198
+
199
+ div {
200
+ font-size: 8px;
201
+ }
202
+ }
203
+ }
204
+ </style>