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,127 @@
1
+ <template>
2
+ <el-dialog
3
+ v-model="dialogVisible"
4
+ title="中文转换英文"
5
+ destroy-on-close
6
+ width="500"
7
+ :show-close="false"
8
+ :showHeader="false"
9
+ append-to-body
10
+ >
11
+ <el-form label-width="80">
12
+ <el-form-item label="中文">
13
+ <el-input v-model="value" v-bind="$attrs">
14
+ <template #append>
15
+ <el-button @click="get">搜索</el-button>
16
+ </template>
17
+ </el-input>
18
+ </el-form-item>
19
+ </el-form>
20
+ <vxe-grid v-bind="gridOptions" ref="vexGridRef"
21
+ resizable>
22
+ <template #default_COLUMN_COMMENT="{ row }">
23
+ <span v-for="item in row.COLUMN_COMMENT.split('')">
24
+ <span :style="value.indexOf(item) != -1 ? 'color: red' :''">{{ item }}</span>
25
+ </span>
26
+ </template>
27
+ </vxe-grid>
28
+
29
+ <template #footer>
30
+ <div class="dialog-footer">
31
+ <el-button type="primary" @click="save">确认</el-button>
32
+ </div>
33
+ </template>
34
+ </el-dialog>
35
+ </template>
36
+ <script>
37
+ import {get} from "@/utils/http/httpUtils";
38
+
39
+ export default {
40
+ name: "chineseToEnglish",
41
+
42
+ inject: ['http', 'DBForm'],
43
+ data() {
44
+ return {
45
+ dialogVisible: false,
46
+ value: '',
47
+ row: {},
48
+ key: '',
49
+ valueKey: '',
50
+ dbName: '',
51
+ gridOptions: {
52
+ loading: false,
53
+ rowConfig: {
54
+ isHover: true,
55
+ isCurrent: true
56
+ },
57
+ size: 'mini',
58
+ border: true,
59
+ height: '500px',
60
+ align: "left",
61
+ radioConfig: {
62
+ trigger: 'row',
63
+ highlight: true
64
+ },
65
+ columns: [
66
+ {type: 'radio', width: 60},
67
+ {
68
+ type: "seq",
69
+ width: 60,
70
+ title: "序号",
71
+ },
72
+ {
73
+ title: '英文',
74
+ field: 'COLUMN_NAME'
75
+ },
76
+ {
77
+ title: '中文',
78
+ field: 'COLUMN_COMMENT',
79
+ slots: {
80
+ default: 'default_COLUMN_COMMENT'
81
+ }
82
+ }
83
+ ],
84
+ data: []
85
+ },
86
+ }
87
+ },
88
+ methods: {
89
+ save() {
90
+ this.row[this.valueKey] = this.$refs.vexGridRef.getRadioRecord().COLUMN_NAME
91
+ this.dialogVisible = false;
92
+ },
93
+ show(row, key, valueKey) {
94
+ this.dialogVisible = true;
95
+ this.key = key;
96
+ this.valueKey = valueKey;
97
+ let rowElement = row[key];
98
+ let number = rowElement.indexOf("(");
99
+ if (number == -1) {
100
+ number = rowElement.indexOf("(");
101
+ }
102
+ if (number != -1) {
103
+ rowElement = rowElement.substring(0, number);
104
+ }
105
+ this.value = rowElement.replace(/[^\u4e00-\u9fa5]/g, '');
106
+ this.row = row;
107
+ this.get();
108
+ },
109
+ get() {
110
+ if (!this.DBForm.dbName) {
111
+ console.log('数据库名为空!')
112
+ return
113
+ }
114
+ let params = {
115
+ dbName: this.DBForm.dbName,
116
+ text: this.value
117
+ }
118
+ this.gridOptions.loading = true;
119
+ get(this.http, '/online/asyncDb/chineseToEnglish', params).then(data => {
120
+ this.gridOptions.loading = false;
121
+ this.gridOptions.data = data;
122
+ this.$refs.vexGridRef.setRadioRow(this.gridOptions.data[0])
123
+ })
124
+ }
125
+ }
126
+ }
127
+ </script>
@@ -0,0 +1,395 @@
1
+ <template>
2
+ <div>
3
+ <vxe-grid v-bind="gridOptions" ref="vexGridRef" :expand-config="{ labelField: 'seq' }"
4
+ resizable>
5
+ <template #header_name_auto_filter="event">
6
+ <ol-table-filter :event="event"></ol-table-filter>
7
+ </template>
8
+ <template #input_default="{ column, row,rowIndex }">
9
+ <el-input v-model="row[column.field]" @change="update" size="small" :disabled="isDisable(rowIndex)"></el-input>
10
+ </template>
11
+ <template #input_title="{ column, row,rowIndex }">
12
+ <el-input v-model="row[column.field]" size="small" @change="update" :disabled="isDisable(rowIndex)">
13
+ <template #append>
14
+ <el-button @click="show(row)" size="small" :disabled="isDisable(rowIndex) || !row[column.field]">搜索英文</el-button>
15
+ </template>
16
+ </el-input>
17
+ </template>
18
+ <template #name="{ column, row,rowIndex }">
19
+ <el-tag type="info" v-if="isDisable(rowIndex)" effect="dark">表默认</el-tag>
20
+ <el-tag type="danger" v-else-if="row.delete == 1" effect="dark">已删除</el-tag>
21
+ <el-tag type="primary" v-else-if="row.COLUMN_NAME_OLD == undefined" effect="dark">新字段</el-tag>
22
+ <el-tag type="warning" v-else-if="row.COLUMN_NAME_OLD != row.COLUMN_NAME" effect="dark">重命名</el-tag>
23
+ <el-tag type="success" v-else-if="row.COLUMN_NAME_OLD == row.COLUMN_NAME" effect="dark">无更新</el-tag>
24
+ </template>
25
+ <template #number_default="{ column, row,rowIndex }">
26
+ <el-input type="number" size="small" v-model="row[column.field]" :disabled="isDisable(rowIndex)"/>
27
+ </template>
28
+ <!-- 通用多选框 -->
29
+ <template #checkedBox_header="{ column}">
30
+ <div style="display: flex;align-items: center;">
31
+ <el-checkbox v-model="column.params.all" @change="headerClick(column)"></el-checkbox>
32
+ <span style="margin-left: 5px;">{{ column.title }} </span>
33
+ </div>
34
+ </template>
35
+ <template #checkedBox_default="{ column, row,rowIndex }">
36
+ <el-checkbox v-model="row[column.field]" @change="checkbox" :disabled="isDisable(rowIndex)" true-value="NO"
37
+ false-value="YES"/>
38
+ </template>
39
+ <!-- 通用下拉框 -->
40
+ <template #select_default="{ column, row,rowIndex }">
41
+ <el-select ref="dictTag" size="small" v-model="row[column.field]" @change="updateTypes(row)"
42
+ :disabled="isDisable(rowIndex)" placeholder="可搜索" filterable>
43
+ <el-option v-for="item in DBForm.dbType == 'Oracle'?oraOptions:mysqlOptions" :label="item.dictLabel"
44
+ :value-key="item.dictLabel"
45
+ :value="item.dictLabel"></el-option>
46
+ </el-select>
47
+ </template>
48
+ <template #operate="{ rowIndex,row }">
49
+ <el-button @click="removeRow(rowIndex,true)" size="small" v-if="row.delete != 1"
50
+ :disabled="isDisable(rowIndex) || !row.COLUMN_NAME"
51
+ type="danger"> 删除
52
+ </el-button>
53
+ <el-button @click="removeRow(rowIndex,false)" size="small" v-else type="success"> 恢复
54
+ </el-button>
55
+ </template>
56
+ </vxe-grid>
57
+ <chinese-to-english ref="chineseToEnglish"></chinese-to-english>
58
+ </div>
59
+ </template>
60
+ <script>
61
+ import {get} from "@/utils/http/httpUtils";
62
+ import ChineseToEnglish from "@/views/db/chineseToEnglish.vue";
63
+ import {storeDictType} from "@/store/dictType";
64
+ import {storeDict} from "@/store/dict";
65
+ import OlTableFilter from "@/components/ol-table-filter.vue";
66
+
67
+ export default {
68
+ name: "dbFiled",
69
+ components: {OlTableFilter, ChineseToEnglish},
70
+ inject: ['http', 'DBForm'],
71
+ props: {},
72
+ data() {
73
+ return {
74
+ dict: storeDict(),
75
+ dictType: storeDictType(),
76
+ options: [],
77
+ oraOptions: [],
78
+ mysqlOptions: [],
79
+ gridOptions: {
80
+ filterConfig: {
81
+ showIcon: false
82
+ },
83
+ scrollX: {enabled: true, gt: 15},
84
+ scrollY: {enabled: true, gt: 0},
85
+ loading: false,
86
+ size: 'mini',
87
+ border: true,
88
+ height: '100%',
89
+ align: "left",
90
+ columns: [
91
+ {
92
+ type: "seq",
93
+ width: 60,
94
+ fixed: 'left',
95
+ title: "序号",
96
+ },
97
+ {
98
+ title: '字段名状态',
99
+ field: 'COLUMN_NAME_OLD',
100
+ width: 90,
101
+ slots: {
102
+ default: 'name'
103
+ },
104
+ },
105
+ {
106
+ title: '列描述',
107
+ children: [{
108
+ field: 'COLUMN_COMMENT',
109
+ minWidth: 300,
110
+ slots: {
111
+ header: 'header_name_auto_filter',
112
+ default: 'input_title'
113
+ },
114
+ }]
115
+ },
116
+ {
117
+ title: '新列名',
118
+ children: [{
119
+ field: 'COLUMN_NAME',
120
+ width: 250,
121
+ slots: {
122
+ header: 'header_name_auto_filter',
123
+ default: 'input_default'
124
+ },
125
+ }]
126
+ },
127
+ {
128
+ title: '列类型',
129
+ field: 'DATA_TYPE',
130
+ width: 140,
131
+ slots: {
132
+ default: 'select_default'
133
+ }
134
+ },
135
+ {
136
+ title: '长度',
137
+ field: 'CHARACTER_MAXIMUM_LENGTH',
138
+ width: 90,
139
+ slots: {
140
+ default: 'input_default'
141
+ },
142
+ },
143
+ {
144
+ title: '类型',
145
+ field: 'COLUMN_TYPE',
146
+ width: 150,
147
+ },
148
+ {
149
+ title: '默认值',
150
+ field: 'COLUMN_DEFAULT',
151
+ width: 250,
152
+ slots: {
153
+ default: 'input_default'
154
+ },
155
+ },
156
+ {
157
+ title: '非空',
158
+ field: 'IS_NULLABLE',
159
+ align: 'center',
160
+ width: 80,
161
+ params: {
162
+ all: 0
163
+ },
164
+ slots: {
165
+ header: 'checkedBox_header',
166
+ default: 'checkedBox_default'
167
+ },
168
+ },
169
+ {
170
+ title: '操作',
171
+ width: 100,
172
+ fixed: 'right',
173
+ align: 'center',
174
+ slots: {
175
+ default: 'operate'
176
+ }
177
+ }
178
+ ],
179
+ data: [{}],
180
+ },
181
+ activeName: '',
182
+ }
183
+ },
184
+ computed: {
185
+ jsonType() {
186
+ let type = this.type.split(",");
187
+ let jsonType = [];
188
+ for (let t of type) {
189
+ jsonType.push({dictLabel: t.trim(), dictValue: t.trim()});
190
+ }
191
+ return jsonType;
192
+ }
193
+ },
194
+ methods: {
195
+ show(row) {
196
+ this.$refs.chineseToEnglish.show(row, 'COLUMN_COMMENT', 'COLUMN_NAME')
197
+ },
198
+ changeNameFilter(option) {
199
+ option.checked = true
200
+ this.$refs.vexGridRef.updateData()
201
+ },
202
+ isDisable(rowIndex) {
203
+ //return rowIndex <= 1 && this.DBForm.tableDefault == '1'
204
+ return false
205
+ },
206
+ updateTypes(row) {
207
+ if (row.DATA_TYPE == 'decimal' && row.COLUMN_TYPE.indexOf(",") == -1) {
208
+ row.CHARACTER_MAXIMUM_LENGTH = "10,2";
209
+ } else if (row.DATA_TYPE == 'varchar' && row.CHARACTER_MAXIMUM_LENGTH == "") {
210
+ row.CHARACTER_MAXIMUM_LENGTH = "64";
211
+ } else if (!(row.DATA_TYPE == 'varchar' || row.DATA_TYPE == 'int'
212
+ || row.DATA_TYPE == 'bigint' ||
213
+ row.DATA_TYPE == 'float' ||
214
+ row.DATA_TYPE == 'double')) {
215
+ row.CHARACTER_MAXIMUM_LENGTH = "";
216
+ }
217
+ if (row.DATA_TYPE != 'decimal' && row.COLUMN_TYPE.indexOf(",") != -1) {
218
+ row.CHARACTER_MAXIMUM_LENGTH = "64";
219
+ }
220
+ this.updateType();
221
+ },
222
+ loadData(form) {
223
+ this.$nextTick(() => {
224
+ get(this.http, "/online/asyncDb/getColumn", {
225
+ dbName: form.dbName,
226
+ tableName: form.tableName
227
+ }).then(({column, table}) => {
228
+ form.desc = table.TABLE_COMMENT;
229
+ this.gridOptions.data = column
230
+ }).finally(() => {
231
+ this.gridOptions.loading = false;
232
+ this.$emit("ok")
233
+ this.update();
234
+ })
235
+ })
236
+ },
237
+ setList(form) {
238
+ let list = this.gridOptions.data.slice(0, -1);
239
+ form['list'] = list;
240
+ },
241
+ updateBS(form) {
242
+ this.gridOptions.data[1].COLUMN_NAME = "create_" + form.bs;
243
+ this.gridOptions.data[2].COLUMN_NAME = "update_" + form.bs;
244
+ },
245
+ initDefaultData(form) {
246
+ let data = [
247
+ {
248
+ "COLUMN_COMMENT": "主键",
249
+ "COLUMN_TYPE": "bigint(20)",
250
+ "COLUMN_NAME": "id",
251
+ "DATA_TYPE": "bigint",
252
+ "CHARACTER_MAXIMUM_LENGTH": 20,
253
+ "DEFAULT": '1',
254
+ "IS_NULLABLE": "YES",
255
+ "COLUMN_DEFAULT": ""
256
+ },
257
+ {
258
+ "COLUMN_COMMENT": "创建者",
259
+ "COLUMN_TYPE": "varchar(64)",
260
+ "COLUMN_NAME": "create_" + form.bs,
261
+ "DATA_TYPE": "varchar",
262
+ "DEFAULT": '1',
263
+ "CHARACTER_MAXIMUM_LENGTH": 64,
264
+ "IS_NULLABLE": "YES",
265
+ "COLUMN_DEFAULT": ""
266
+ },
267
+ {
268
+ "COLUMN_COMMENT": "更新者",
269
+ "COLUMN_TYPE": "varchar(64)",
270
+ "COLUMN_NAME": "update_" + form.bs,
271
+ "DATA_TYPE": "varchar",
272
+ "DEFAULT": '1',
273
+ "CHARACTER_MAXIMUM_LENGTH": 64,
274
+ "IS_NULLABLE": "YES",
275
+ "COLUMN_DEFAULT": ""
276
+ },
277
+ {
278
+ "COLUMN_COMMENT": "创建时间",
279
+ "COLUMN_TYPE": "timestamp",
280
+ "COLUMN_NAME": "create_time",
281
+ "DATA_TYPE": "timestamp",
282
+ "DEFAULT": '1',
283
+ "CHARACTER_MAXIMUM_LENGTH": null,
284
+ "IS_NULLABLE": "NO",
285
+ "COLUMN_DEFAULT": "CURRENT_TIMESTAMP"
286
+ },
287
+ {
288
+ "COLUMN_COMMENT": "更新时间",
289
+ "COLUMN_TYPE": "timestamp",
290
+ "COLUMN_NAME": "update_time",
291
+ "DATA_TYPE": "timestamp",
292
+ "DEFAULT": '1',
293
+ "CHARACTER_MAXIMUM_LENGTH": null,
294
+ "IS_NULLABLE": "NO",
295
+ "COLUMN_DEFAULT": "CURRENT_TIMESTAMP"
296
+ },
297
+ {
298
+ "COLUMN_COMMENT": "备注",
299
+ "COLUMN_TYPE": "varchar(255)",
300
+ "COLUMN_NAME": "remark",
301
+ "DEFAULT": '1',
302
+ "DATA_TYPE": "varchar",
303
+ "CHARACTER_MAXIMUM_LENGTH": 255,
304
+ "IS_NULLABLE": "YES",
305
+ "COLUMN_DEFAULT": null
306
+ }
307
+ ];
308
+ let filedMap = {};
309
+ for (let d of data) {
310
+ filedMap[d.COLUMN_NAME] = d;
311
+ }
312
+ if ("1" != this.DBForm.tableDefault) {
313
+ let baseData = []
314
+ for (let obj of this.gridOptions.data) {
315
+ if (obj.COLUMN_NAME) {
316
+ if (!filedMap[obj.COLUMN_NAME.toString().toLowerCase()]) {
317
+ baseData.push(obj);
318
+ }
319
+ } else {
320
+ baseData.push(obj);
321
+ }
322
+ }
323
+ this.gridOptions.data = baseData;
324
+ } else {
325
+ for (let obj of this.gridOptions.data) {
326
+ obj.COLUMN_NAME && filedMap[obj.COLUMN_NAME.toString().toLowerCase()] && delete filedMap[obj.COLUMN_NAME.toString().toLowerCase()];
327
+ }
328
+ this.gridOptions.data = [...Object.values(filedMap), ...this.gridOptions.data]
329
+ }
330
+ },
331
+ checkbox() {
332
+ let IS_NULLABLE = true;
333
+ for (let data of this.gridOptions.data) {
334
+ if (data.IS_NULLABLE == "NO") {
335
+ IS_NULLABLE = false;
336
+ break
337
+ }
338
+ }
339
+ for (let column of this.gridOptions.columns) {
340
+ if (column.field == 'IS_NULLABLE') {
341
+ column.params.all = IS_NULLABLE;
342
+ }
343
+ }
344
+ },
345
+ headerClick(e) {
346
+ for (let i = 0; i < this.gridOptions.data.length; i++) {
347
+ let data = this.gridOptions.data[i];
348
+ if (i > 5) {
349
+ data.IS_NULLABLE = e.params.all ? "YES" : "NO"
350
+ }
351
+ }
352
+ },
353
+ async removeRow(r, remove) {
354
+ if (remove) {
355
+ let type = await this.$confirm('数据删除后不可恢复,您确定要删除吗?', '删除提示', 'error')
356
+ if (type != "cancel") {
357
+ this.gridOptions.data[r].delete = 1;
358
+ }
359
+ } else {
360
+ delete this.gridOptions.data[r].delete
361
+ }
362
+ this.update();
363
+ },
364
+ update() {
365
+ let data = this.gridOptions.data[this.gridOptions.data.length - 1];
366
+ if (!data || (data.COLUMN_COMMENT && data.COLUMN_COMMENT.toString().length != 0)) {
367
+ this.gridOptions.data.push({
368
+ IS_NULLABLE: 'NO',
369
+ COLUMN_TYPE: 'varchar(100)',
370
+ CHARACTER_MAXIMUM_LENGTH: '100',
371
+ DATA_TYPE: 'varchar',
372
+ });
373
+ }
374
+ this.updateType();
375
+ },
376
+ updateType() {
377
+ for (let i = 0; i < this.gridOptions.data.length - 1; i++) {
378
+ let datum = this.gridOptions.data[i];
379
+ if (datum.CHARACTER_MAXIMUM_LENGTH) {
380
+ datum.COLUMN_TYPE = datum.DATA_TYPE + "(" + datum.CHARACTER_MAXIMUM_LENGTH + ")";
381
+ } else {
382
+ datum.COLUMN_TYPE = datum.DATA_TYPE;
383
+ }
384
+ }
385
+ },
386
+ initConfigDict() {
387
+ this.oraOptions = this.dict.val('ora_col_type');
388
+ this.mysqlOptions = this.dict.val('mysql_col_type');
389
+ },
390
+ },
391
+ created() {
392
+ this.initConfigDict()
393
+ }
394
+ }
395
+ </script>