olp-table 7.1.4 → 7.1.5

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.
@@ -828,7 +828,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core
828
828
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
829
829
 
830
830
  "use strict";
831
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.find.js */ \"./node_modules/core-js/modules/es.iterator.find.js\");\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/utils/http/httpUtils */ \"./src/utils/http/httpUtils.js\");\n/* harmony import */ var _utils_object__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/utils/object */ \"./src/utils/object.js\");\n/* harmony import */ var _store_dict__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/store/dict */ \"./src/store/dict.js\");\n/* harmony import */ var element_plus__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! element-plus */ \"element-plus\");\n/* harmony import */ var element_plus__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(element_plus__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var sql_formatter__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! sql-formatter */ \"./node_modules/sql-formatter/lib/sqlFormatter.js\");\n/* harmony import */ var sql_formatter__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(sql_formatter__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _views_table_add_or_edit_config_field_config_index_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/views/table/add-or-edit/config/field-config/index.vue */ \"./src/views/table/add-or-edit/config/field-config/index.vue\");\n/* harmony import */ var _components_lazy_load_select_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/components/lazy-load-select.vue */ \"./src/components/lazy-load-select.vue\");\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n __name: 'index',\n emits: [\"emits\", 'updateTab'],\n setup(__props, {\n expose: __expose,\n emit: __emit\n }) {\n const http = (0,vue__WEBPACK_IMPORTED_MODULE_3__.inject)('http');\n const addOrEditRootData = (0,vue__WEBPACK_IMPORTED_MODULE_3__.inject)('addOrEditRootData');\n const dict = (0,_store_dict__WEBPACK_IMPORTED_MODULE_6__.storeDict)();\n const dicData = (0,vue__WEBPACK_IMPORTED_MODULE_3__.reactive)({\n joinFiledDicData: [{\n label: '内连接',\n value: 'join'\n }, {\n label: '左连接',\n value: 'left join'\n }, {\n label: '右连接',\n value: 'right join'\n }],\n joinTableDicData: []\n });\n const form = (0,vue__WEBPACK_IMPORTED_MODULE_3__.reactive)({\n form: {\n table: [{\n index: \"t1\",\n type: \"主表\",\n joinTable: \"\",\n joinFiled: \"/\",\n deleteWhere: 'id=${id}'\n }],\n executeSql: '',\n executeWhere: '',\n orderBy: ''\n }\n });\n const option = (0,vue__WEBPACK_IMPORTED_MODULE_3__.reactive)({\n submitBtn: false,\n emptyBtn: false,\n column: [\n /* {\r\n label: '转换驼峰', prop: 'hump', border: true, type: 'radio', value: '0', span: 7, dicData: [{\r\n label: '不转换', value: '0'\r\n }, {\r\n label: '转换', value: '1'\r\n },{\r\n label: '请求转换', value: '2'\r\n }],\r\n dictCode: 'converting_hump'\r\n },*/\n {\n label: '数据源类型',\n type: 'radio',\n span: 7,\n prop: 'definitionSql',\n border: true,\n value: '0',\n onChange: ({\n value\n }) => {\n if (value == '0') {\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', true, \"executeSql,where,table,orderBy\");\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', false, \"api,requestType\");\n } else if (value == '1') {\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', true, \"executeSql,where,orderBy\");\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', false, \"api,table,requestType\");\n } else {\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', true, \"api,requestType\");\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', false, \"executeSql,where,table,orderBy\");\n }\n },\n dicData: [{\n label: '自动SQL',\n value: '0'\n }, {\n label: '手动SQL',\n value: '1'\n }, {\n label: 'API',\n value: '2'\n }],\n dictCode: 'tree_data_type'\n }, {\n label: '查询表格',\n prop: 'table',\n type: 'dynamic',\n span: 24,\n children: {\n align: 'center',\n minHeight: 100,\n maxHeight: 170,\n size: \"small\",\n headerAlign: 'center',\n rowAdd: done => {\n let obj = {\n index: \"t\" + (form.form.table.length + 1),\n type: \"join\",\n joinTable: \"\",\n joinFiled: \"t\" + form.form.table.length + \".=t\" + (form.form.table.length + 1) + \".\"\n };\n done(obj);\n },\n rowDel: row => {\n if (row.$index != 0) {\n setSql(row.$index);\n } else {\n element_plus__WEBPACK_IMPORTED_MODULE_7__.ElMessage.error(\"主表不能删除!\");\n }\n },\n column: [{\n width: 60,\n prop: \"index\",\n label: '序号'\n }, {\n label: '类型',\n prop: \"type\",\n width: 120,\n disabled: true,\n type: 'select'\n }, {\n label: '数据表',\n prop: \"joinTable\",\n type: 'select',\n dicData: []\n }, {\n label: 'on',\n prop: \"joinFiled\",\n type: 'input'\n }, {\n label: '删除条件',\n prop: \"deleteWhere\",\n width: 200,\n type: 'input'\n }]\n }\n }, {\n label: '执行SQL',\n display: true,\n type: 'textarea',\n maxRows: 7,\n span: 24,\n prop: 'executeSql'\n }, {\n label: 'where条件',\n display: true,\n type: 'input',\n span: 24,\n prop: 'executeWhere'\n }, {\n label: '排序',\n display: true,\n type: 'input',\n span: 24,\n prop: 'orderBy'\n }, {\n label: '默认参数',\n type: 'input',\n span: 24,\n prop: 'parameterDefault'\n }, {\n label: 'API',\n display: true,\n type: 'input',\n span: 24,\n prop: 'api'\n }, {\n label: '请求类型',\n prop: 'requestType',\n border: true,\n type: 'radio',\n value: '0',\n span: 6,\n dicData: [],\n dictCode: 'request_type'\n }]\n });\n const configData = (0,vue__WEBPACK_IMPORTED_MODULE_3__.inject)('configData');\n function parseData(data) {\n if (form.form.definitionSql == '1') {\n data.mainTable = form.form.mainTable;\n } else {\n data.mainTable = form.form.table[0].joinTable;\n }\n data.definitionSql = form.form.definitionSql;\n data.executeSql = form.form.executeSql;\n data.orderBy = form.form.orderBy;\n data.groupBy = form.form.groupBy;\n data.executeWhere = form.form.executeWhere;\n data.parameterDefault = form.form.parameterDefault;\n data.hump = form.form.hump;\n data.api = form.form.api;\n data.requestType = form.form.requestType;\n if (form.form.definitionSql == 0) {\n if (form.form.table[0].deleteWhere) {\n data.deleteWhere = {\n wheres: form.form.table[0].deleteWhere.trim(),\n tableName: form.form.table[0].joinTable\n };\n } else {\n delete data.deleteWhere;\n }\n }\n }\n function setData(f) {\n form.form.definitionSql = f;\n form.form.hump = f.hump;\n form.form.mainTable = f.mainTable;\n form.form.executeSql = f.executeSql;\n form.form.orderBy = f.orderBy;\n form.form.api = f.api;\n form.form.requestType = f.requestType;\n form.form.executeWhere = f.executeWhere;\n form.form.parameterDefault = f.parameterDefault;\n form.form.definitionSql = f.definitionSql;\n if (form.form.definitionSql == 0) {\n sqlParseTable(f.deleteWhere);\n }\n }\n function setTable() {\n let promise = [];\n for (let i = 0; i < form.form.table.length; i++) {\n promise.push((0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.get)(http, \"/online/getDBTableColumnList/\" + addOrEditRootData.form.dbName, {\n tableName: form.form.table[i].joinTable\n }));\n }\n Promise.all(promise).then(result => {\n for (let i = 0; i < result.length; i++) {\n form.form.table[i]['columnList'] = result[i];\n }\n setSql();\n });\n }\n function setSql(index, seq) {\n if (seq != undefined && seq != 0) {\n let arr = form.form.table.find(item => {\n return item.index == seq;\n });\n if (!arr || !arr.joinTable) {\n return;\n }\n }\n if (index != undefined && index != 0) {\n form.form.table.splice(index, 1);\n }\n let sqlTableOn = form.form.table[0].joinTable + \" t1 \";\n let sqlFiled = \"\";\n let tableColumns = [];\n let sort = 0;\n let mapFiled = {};\n for (let i = 0; i < form.form.table.length; i++) {\n if (i === index) {\n continue;\n }\n let obj = form.form.table[i];\n for (let j = 0; j < obj.columnList.length; j++) {\n let column = obj.columnList[j];\n if (column.checked == 0) {\n continue;\n }\n if (sqlFiled.length != 0) {\n sqlFiled += \",\";\n }\n if (mapFiled[column.column_name] !== undefined) {\n mapFiled[column.column_name]++;\n } else {\n mapFiled[column.column_name] = 0;\n }\n sort++;\n let asName = mapFiled[column.column_name] === 0 ? column.column_name : obj.index + \"_\" + column.column_name;\n sqlFiled += obj.index + \".\" + column.column_name + \" AS \" + asName;\n let column_name = column.column_name;\n let column_comment = column.column_comment ? column.column_comment : column_name;\n tableColumns.push({\n sort: sort,\n tableField: column_name,\n field: column_name,\n title: column_comment,\n label: column_comment,\n visible: column.visible,\n display: 1,\n asName: asName\n });\n }\n if (i != 0) {\n sqlTableOn += \" \" + obj.type + \" \" + obj.joinTable + \" \" + obj.index + \" on \" + obj.joinFiled;\n }\n }\n for (let tableColumn of tableColumns) {\n let add = true;\n for (let c of configData.tableColumn) {\n if (c.field == tableColumn.field) {\n add = false;\n }\n }\n if (add) {\n configData.tableColumn.push(tableColumn);\n }\n }\n for (let i = 0; i < configData.tableColumn.length; i++) {\n let remove = true;\n for (let tableColumn of tableColumns) {\n if (configData.tableColumn[i].field == tableColumn.field) {\n remove = false;\n }\n }\n if (remove) {\n configData.tableColumn.splice(i, 1);\n }\n }\n form.form.executeSql = \"select \" + sqlFiled + \" from \" + sqlTableOn;\n }\n const isSyncCurd = (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)(false);\n const sync = (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)(false);\n function syncTable() {\n emit('loading', true);\n configData.form.executeSql = form.form.executeSql;\n configData.form.executeWhere = form.form.where;\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post)(http, \"/online/getTableFiled\", {\n sql: form.form.executeSql,\n where: form.form.where,\n definitionSql: form.form.definitionSql,\n dbName: addOrEditRootData.form.dbName,\n uuid: configData.form.uuid\n }, undefined, false).then(data => {\n emit(\"updateTable\", data.data);\n isSyncCurd.value = form.form?.definitionSql == 0 && form.form?.table?.length == 1;\n if (isSyncCurd.value && sync.value) {\n emit(\"updateCurd\");\n }\n setFieldConfig();\n }).finally(() => {\n emit('loading', false);\n });\n }\n const filedConfig = (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)();\n function setFieldConfig(filedConf) {\n if (form.form.definitionSql != 0) {\n return;\n }\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post)(http, \"/online/getTableSetFiled\", {\n sql: form.form.executeSql,\n where: form.form.where,\n dbName: addOrEditRootData.form.dbName,\n definitionSql: form.form.definitionSql,\n uuid: configData.form.uuid\n }, false, false).then(({\n data\n }) => {\n setFormTable(data);\n if (filedConf) {\n filedConfig.value.init(form.form.table);\n }\n });\n }\n function getTableNamesByFormSql() {\n let formSql = form.form.executeSql.substring(form.form.executeSql.indexOf('from') + 4);\n let tableNames = [];\n for (const join of formSql.split('join')) {\n tableNames.push(join);\n }\n return tableNames;\n }\n function getTableComment(key) {\n for (const item of dicData.joinTableDicData) {\n if (item.value == key) return item.label;\n }\n }\n function setFormTable(data) {\n let tableNames = getTableNamesByFormSql();\n let tables = [];\n for (const key of Object.keys(data)) {\n let table = {\n index: 't1',\n type: '主表',\n joinTable: key,\n joinFiled: '/',\n deleteWhere: '',\n columnList: [],\n tableComment: getTableComment(key)\n };\n table.columnList = Object.values(data[key]);\n tables.push(table);\n }\n form.form.table = [];\n for (let i = 0; i < tableNames.length; i++) {\n const tableName = tableNames[i];\n for (const table of tables) {\n if (tableName.includes(table.joinTable)) {\n if (i == 0) {\n table.deleteWhere = 'id=${id}';\n table.mainTable = table.joinTable;\n }\n if (i != 0) {\n table.index = 't' + (i + 1);\n table.type = 'join';\n let joinFiled = tableName.substring(tableName.indexOf('on') + 2).replace(/[\\n\\t\\s]+/g, '');\n if (tableNames[i - 1].includes('left')) {\n table.type = 'left join';\n joinFiled = joinFiled.replace('left', '');\n }\n if (tableNames[i - 1].includes('right')) {\n table.type = 'right join';\n joinFiled = joinFiled.replace('right', '');\n }\n table.joinFiled = joinFiled;\n }\n form.form.table.push(table);\n break;\n }\n }\n }\n }\n function updateExecuteSql(v) {\n if (v === 0) {\n form.form.executeSql = sql_formatter__WEBPACK_IMPORTED_MODULE_8___default().format(form.form.executeSql, {\n language: 'sql',\n keywordCase: 'upper',\n indentStyle: 'tabularLeft'\n });\n } else {\n form.form.executeSql = form.form.executeSql.replace(/\\s+/g, \" \");\n }\n }\n function filedConfigClose(data) {\n if (!data) return;\n for (let j = 0; j < form.form.table.length; j++) {\n let obj = form.form.table[j];\n if (Object.keys(data).includes(obj.index)) {\n form.form.table[j].columnList = data[obj.index];\n }\n }\n setSql();\n }\n function setFieldEvent(row) {\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post)(http, \"/online/getTableSetFiled\", {\n sql: form.form.executeSql,\n definitionSql: form.form.definitionSql,\n dbName: addOrEditRootData.form.dbName,\n where: form.form.where,\n uuid: configData.form.uuid\n }, undefined, false).then(data => {\n row.columnList = Object.values(data.data[row.joinTable]);\n filedConfig.value.init(row);\n });\n }\n\n /**\r\n * 一键同步CURD\r\n */\n const syncCurd = () => {\n sync.value = true;\n syncTable();\n };\n function parseSqlToTables(sql) {\n // 标准化SQL,去除多余空格和换行\n let normalizedSql = sql.replace(/[\\n\\r\\s]+/g, ' ').trim();\n\n // 分割FROM后面的部分\n let fromPart = normalizedSql.split(/from/i)[1];\n if (!fromPart) return [];\n let result = [];\n let currentIndex = 0;\n\n // 分割所有JOIN(包括LEFT JOIN, RIGHT JOIN等)\n let parts = fromPart.split(/\\s+(?:left\\s+)?(?:right\\s+)?(?:inner\\s+)?join\\s+/i);\n\n // 处理主表\n let mainTablePart = parts[0].trim();\n let mainTableName = mainTablePart.split(/\\s+/)[0];\n result.push({\n index: 't' + (currentIndex + 1),\n type: '主表',\n joinTable: mainTableName,\n joinFiled: '/'\n });\n\n // 处理关联表\n for (let i = 1; i < parts.length; i++) {\n currentIndex++;\n let joinPart = parts[i].trim();\n\n // 获取JOIN类型\n let joinType = 'left';\n if (normalizedSql.toLowerCase().includes('right join')) {\n joinType = 'right';\n } else if (normalizedSql.toLowerCase().includes('inner join')) {\n joinType = 'inner';\n }\n\n // 分割ON条件\n let onPart = joinPart.split(/\\s+on\\s+/i);\n let joinTableName = onPart[0].trim().split(/\\s+/)[0];\n let joinFields = onPart[1] ? onPart[1].trim() : '';\n result.push({\n index: 't' + (currentIndex + 1),\n type: joinType,\n joinTable: joinTableName,\n joinFiled: joinFields\n });\n }\n return result;\n }\n const sqlParseTable = o => {\n if (configData.form.executeSql && configData.form.executeSql.toLowerCase().indexOf(\"from\") === -1) {\n return;\n }\n let tableData = parseSqlToTables(configData.form.executeSql);\n if (o) {\n tableData[0].deleteWhere = o.wheres;\n }\n form.form.table = tableData;\n };\n function remoteMethod() {\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.get)(http, \"/online/getDBTableList\", {\n dbName: addOrEditRootData.form.dbName\n }).then(data => {\n dicData.joinTableDicData = data;\n });\n }\n function initDict() {\n for (const column of option.column) {\n if (column.dictCode) {\n column.dicData = dict.val(column.dictCode);\n }\n }\n }\n const emit = __emit; //声明 emits\n (0,vue__WEBPACK_IMPORTED_MODULE_3__.onMounted)(() => {\n remoteMethod();\n initDict();\n });\n __expose({\n setData,\n parseData,\n form\n });\n const __returned__ = {\n http,\n addOrEditRootData,\n dict,\n dicData,\n form,\n option,\n configData,\n parseData,\n setData,\n setTable,\n setSql,\n isSyncCurd,\n sync,\n syncTable,\n filedConfig,\n setFieldConfig,\n getTableNamesByFormSql,\n getTableComment,\n setFormTable,\n updateExecuteSql,\n filedConfigClose,\n setFieldEvent,\n syncCurd,\n parseSqlToTables,\n sqlParseTable,\n remoteMethod,\n initDict,\n emit,\n inject: vue__WEBPACK_IMPORTED_MODULE_3__.inject,\n reactive: vue__WEBPACK_IMPORTED_MODULE_3__.reactive,\n onMounted: vue__WEBPACK_IMPORTED_MODULE_3__.onMounted,\n ref: vue__WEBPACK_IMPORTED_MODULE_3__.ref,\n get get() {\n return _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.get;\n },\n get post() {\n return _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post;\n },\n get setArrayObjectKeyValue() {\n return _utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue;\n },\n get storeDict() {\n return _store_dict__WEBPACK_IMPORTED_MODULE_6__.storeDict;\n },\n get ElMessage() {\n return element_plus__WEBPACK_IMPORTED_MODULE_7__.ElMessage;\n },\n get sqlFormatter() {\n return (sql_formatter__WEBPACK_IMPORTED_MODULE_8___default());\n },\n FieldConfig: _views_table_add_or_edit_config_field_config_index_vue__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n LazyLoadSelect: _components_lazy_load_select_vue__WEBPACK_IMPORTED_MODULE_10__[\"default\"]\n };\n Object.defineProperty(__returned__, '__isScriptSetup', {\n enumerable: false,\n value: true\n });\n return __returned__;\n }\n});\n\n//# sourceURL=webpack://olp-table/./src/views/table/add-or-edit/config/base-config/index.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
831
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.find.js */ \"./node_modules/core-js/modules/es.iterator.find.js\");\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/utils/http/httpUtils */ \"./src/utils/http/httpUtils.js\");\n/* harmony import */ var _utils_object__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/utils/object */ \"./src/utils/object.js\");\n/* harmony import */ var _store_dict__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/store/dict */ \"./src/store/dict.js\");\n/* harmony import */ var element_plus__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! element-plus */ \"element-plus\");\n/* harmony import */ var element_plus__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(element_plus__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var sql_formatter__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! sql-formatter */ \"./node_modules/sql-formatter/lib/sqlFormatter.js\");\n/* harmony import */ var sql_formatter__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(sql_formatter__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _views_table_add_or_edit_config_field_config_index_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/views/table/add-or-edit/config/field-config/index.vue */ \"./src/views/table/add-or-edit/config/field-config/index.vue\");\n/* harmony import */ var _components_lazy_load_select_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/components/lazy-load-select.vue */ \"./src/components/lazy-load-select.vue\");\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n __name: 'index',\n emits: [\"emits\", 'updateTab'],\n setup(__props, {\n expose: __expose,\n emit: __emit\n }) {\n const http = (0,vue__WEBPACK_IMPORTED_MODULE_3__.inject)('http');\n const addOrEditRootData = (0,vue__WEBPACK_IMPORTED_MODULE_3__.inject)('addOrEditRootData');\n const dict = (0,_store_dict__WEBPACK_IMPORTED_MODULE_6__.storeDict)();\n const dicData = (0,vue__WEBPACK_IMPORTED_MODULE_3__.reactive)({\n joinFiledDicData: [{\n label: '内连接',\n value: 'join'\n }, {\n label: '左连接',\n value: 'left join'\n }, {\n label: '右连接',\n value: 'right join'\n }],\n joinTableDicData: []\n });\n const form = (0,vue__WEBPACK_IMPORTED_MODULE_3__.reactive)({\n form: {\n table: [{\n index: \"t1\",\n type: \"主表\",\n joinTable: \"\",\n joinFiled: \"/\",\n deleteWhere: 'id=${id}'\n }],\n executeSql: '',\n executeWhere: '',\n orderBy: ''\n }\n });\n const option = (0,vue__WEBPACK_IMPORTED_MODULE_3__.reactive)({\n submitBtn: false,\n emptyBtn: false,\n column: [\n /* {\r\n label: '转换驼峰', prop: 'hump', border: true, type: 'radio', value: '0', span: 7, dicData: [{\r\n label: '不转换', value: '0'\r\n }, {\r\n label: '转换', value: '1'\r\n },{\r\n label: '请求转换', value: '2'\r\n }],\r\n dictCode: 'converting_hump'\r\n },*/\n {\n label: '数据源类型',\n type: 'radio',\n span: 7,\n prop: 'definitionSql',\n border: true,\n value: '0',\n onChange: ({\n value\n }) => {\n if (value == '0') {\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', true, \"executeSql,where,table,orderBy\");\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', false, \"api,requestType\");\n } else if (value == '1') {\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', true, \"executeSql,where,orderBy\");\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', false, \"api,table,requestType\");\n } else {\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', true, \"api,requestType\");\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', false, \"executeSql,where,table,orderBy\");\n }\n },\n dicData: [{\n label: '自动SQL',\n value: '0'\n }, {\n label: '手动SQL',\n value: '1'\n }, {\n label: 'API',\n value: '2'\n }],\n dictCode: 'tree_data_type'\n }, {\n label: '查询表格',\n prop: 'table',\n type: 'dynamic',\n span: 24,\n children: {\n align: 'center',\n minHeight: 100,\n maxHeight: 170,\n size: \"small\",\n headerAlign: 'center',\n rowAdd: done => {\n let obj = {\n index: \"t\" + (form.form.table.length + 1),\n type: \"join\",\n joinTable: \"\",\n joinFiled: \"t\" + form.form.table.length + \".=t\" + (form.form.table.length + 1) + \".\"\n };\n done(obj);\n },\n rowDel: row => {\n if (row.$index != 0) {\n setSql(row.$index);\n } else {\n element_plus__WEBPACK_IMPORTED_MODULE_7__.ElMessage.error(\"主表不能删除!\");\n }\n },\n column: [{\n width: 60,\n prop: \"index\",\n label: '序号'\n }, {\n label: '类型',\n prop: \"type\",\n width: 120,\n disabled: true,\n type: 'select'\n }, {\n label: '数据表',\n prop: \"joinTable\",\n type: 'select',\n dicData: []\n }, {\n label: 'on',\n prop: \"joinFiled\",\n type: 'input'\n }, {\n label: '删除条件',\n prop: \"deleteWhere\",\n width: 200,\n type: 'input'\n }]\n }\n }, {\n label: '执行SQL',\n display: true,\n type: 'textarea',\n maxRows: 7,\n span: 24,\n prop: 'executeSql'\n }, {\n label: 'where条件',\n display: true,\n type: 'input',\n span: 24,\n prop: 'executeWhere'\n }, {\n label: '排序',\n display: true,\n type: 'input',\n span: 24,\n prop: 'orderBy'\n }, {\n label: '默认参数',\n type: 'input',\n span: 24,\n prop: 'parameterDefault'\n }, {\n label: 'API',\n display: true,\n type: 'input',\n span: 24,\n prop: 'api'\n }, {\n label: '请求类型',\n prop: 'requestType',\n border: true,\n type: 'radio',\n value: '0',\n span: 6,\n dicData: [],\n dictCode: 'request_type'\n }]\n });\n const configData = (0,vue__WEBPACK_IMPORTED_MODULE_3__.inject)('configData');\n function parseData(data) {\n if (form.form.definitionSql == '1') {\n data.mainTable = form.form.mainTable;\n } else {\n data.mainTable = form.form.table[0].joinTable;\n }\n data.definitionSql = form.form.definitionSql;\n data.executeSql = form.form.executeSql;\n data.orderBy = form.form.orderBy;\n data.groupBy = form.form.groupBy;\n data.executeWhere = form.form.executeWhere;\n data.parameterDefault = form.form.parameterDefault;\n data.hump = form.form.hump;\n data.api = form.form.api;\n data.requestType = form.form.requestType;\n if (form.form.definitionSql == 0) {\n if (form.form.table[0].deleteWhere) {\n data.deleteWhere = {\n wheres: form.form.table[0].deleteWhere.trim(),\n tableName: form.form.table[0].joinTable\n };\n } else {\n delete data.deleteWhere;\n }\n }\n }\n function setData(f) {\n form.form.definitionSql = f;\n form.form.hump = f.hump;\n form.form.mainTable = f.mainTable;\n form.form.executeSql = f.executeSql;\n form.form.orderBy = f.orderBy;\n form.form.api = f.api;\n form.form.requestType = f.requestType;\n form.form.executeWhere = f.executeWhere;\n form.form.parameterDefault = f.parameterDefault;\n form.form.definitionSql = f.definitionSql;\n if (form.form.definitionSql == 0) {\n sqlParseTable(f.deleteWhere);\n }\n }\n function setTable() {\n let promise = [];\n for (let i = 0; i < form.form.table.length; i++) {\n promise.push((0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.get)(http, \"/online/getDBTableColumnList/\" + addOrEditRootData.form.dbName, {\n tableName: form.form.table[i].joinTable\n }));\n }\n Promise.all(promise).then(result => {\n for (let i = 0; i < result.length; i++) {\n form.form.table[i]['columnList'] = result[i];\n }\n setSql();\n });\n }\n function setSql(index, seq) {\n if (seq != undefined && seq != 0) {\n let arr = form.form.table.find(item => {\n return item.index == seq;\n });\n if (!arr || !arr.joinTable) {\n return;\n }\n }\n if (index != undefined && index != 0) {\n form.form.table.splice(index, 1);\n }\n let sqlTableOn = form.form.table[0].joinTable + \" t1 \";\n let sqlFiled = \"\";\n let tableColumns = [];\n let sort = 0;\n let mapFiled = {};\n for (let i = 0; i < form.form.table.length; i++) {\n if (i === index) {\n continue;\n }\n let obj = form.form.table[i];\n for (let j = 0; j < obj.columnList.length; j++) {\n let column = obj.columnList[j];\n if (column.checked == 0) {\n continue;\n }\n if (sqlFiled.length != 0) {\n sqlFiled += \",\";\n }\n if (mapFiled[column.column_name] !== undefined) {\n mapFiled[column.column_name]++;\n } else {\n mapFiled[column.column_name] = 0;\n }\n sort++;\n let asName = mapFiled[column.column_name] === 0 ? column.column_name : obj.index + \"_\" + column.column_name;\n sqlFiled += obj.index + \".\" + column.column_name + \" AS \" + asName;\n let column_name = column.column_name;\n let column_comment = column.column_comment ? column.column_comment : column_name;\n tableColumns.push({\n sort: sort,\n tableField: column_name,\n field: column_name,\n title: column_comment,\n label: column_comment,\n visible: column.visible,\n display: 1,\n asName: asName\n });\n }\n if (i != 0) {\n sqlTableOn += \" \" + obj.type + \" \" + obj.joinTable + \" \" + obj.index + \" on \" + obj.joinFiled;\n }\n }\n for (let tableColumn of tableColumns) {\n let add = true;\n for (let c of configData.tableColumn) {\n if (c.field == tableColumn.field) {\n add = false;\n }\n }\n if (add) {\n configData.tableColumn.push(tableColumn);\n }\n }\n for (let i = 0; i < configData.tableColumn.length; i++) {\n let remove = true;\n for (let tableColumn of tableColumns) {\n if (configData.tableColumn[i].field == tableColumn.field) {\n remove = false;\n }\n }\n if (remove) {\n configData.tableColumn.splice(i, 1);\n }\n }\n form.form.executeSql = \"select \" + sqlFiled + \" from \" + sqlTableOn;\n }\n const isSyncCurd = (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)(false);\n const sync = (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)(false);\n function syncTable() {\n emit('loading', true);\n configData.form.executeSql = form.form.executeSql;\n configData.form.executeWhere = form.form.where;\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post)(http, \"/online/getTableFiled\", {\n sql: form.form.executeSql,\n where: form.form.where,\n definitionSql: form.form.definitionSql,\n dbName: addOrEditRootData.form.dbName,\n uuid: configData.form.uuid\n }, undefined, false).then(data => {\n emit(\"updateTable\", data.data);\n isSyncCurd.value = form.form?.definitionSql == 0 && form.form?.table?.length == 1;\n if (isSyncCurd.value && sync.value) {\n emit(\"updateCurd\");\n }\n setFieldConfig();\n }).finally(() => {\n emit('loading', false);\n });\n }\n const filedConfig = (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)();\n function setFieldConfig(filedConf) {\n if (form.form.definitionSql != 0) {\n return;\n }\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post)(http, \"/online/getTableSetFiled\", {\n sql: form.form.executeSql,\n where: form.form.where,\n dbName: addOrEditRootData.form.dbName,\n definitionSql: form.form.definitionSql,\n uuid: configData.form.uuid\n }, false, false).then(({\n data\n }) => {\n setFormTable(data);\n if (filedConf) {\n filedConfig.value.init(form.form.table);\n }\n });\n }\n function getTableNamesByFormSql() {\n let formSql = form.form.executeSql.substring(form.form.executeSql.indexOf('from') + 4);\n let tableNames = [];\n for (const join of formSql.split('join')) {\n tableNames.push(join);\n }\n return tableNames;\n }\n function getTableComment(key) {\n for (const item of dicData.joinTableDicData) {\n if (item.value == key) return item.label;\n }\n }\n function setFormTable(data) {\n let tableNames = getTableNamesByFormSql();\n let tables = [];\n for (const key of Object.keys(data)) {\n let table = {\n index: 't1',\n type: '主表',\n joinTable: key,\n joinFiled: '/',\n deleteWhere: '',\n columnList: [],\n tableComment: getTableComment(key)\n };\n table.columnList = Object.values(data[key]);\n tables.push(table);\n }\n form.form.table = [];\n for (let i = 0; i < tableNames.length; i++) {\n const tableName = tableNames[i];\n for (const table of tables) {\n if (tableName.includes(table.joinTable)) {\n if (i == 0) {\n table.deleteWhere = 'id=${id}';\n table.mainTable = table.joinTable;\n }\n if (i != 0) {\n table.index = 't' + (i + 1);\n table.type = 'join';\n let joinFiled = tableName.substring(tableName.indexOf('on') + 2).replace(/[\\n\\t\\s]+/g, '');\n if (tableNames[i - 1].includes('left')) {\n table.type = 'left join';\n joinFiled = joinFiled.replace('left', '');\n }\n if (tableNames[i - 1].includes('right')) {\n table.type = 'right join';\n joinFiled = joinFiled.replace('right', '');\n }\n table.joinFiled = joinFiled;\n }\n form.form.table.push(table);\n break;\n }\n }\n }\n }\n function updateExecuteSql(v) {\n if (v === 0) {\n form.form.executeSql = sql_formatter__WEBPACK_IMPORTED_MODULE_8___default().format(form.form.executeSql, {\n language: 'sql',\n keywordCase: 'upper',\n indentStyle: 'tabularLeft'\n });\n } else {\n form.form.executeSql = form.form.executeSql.replace(/\\s+/g, \" \");\n }\n }\n function filedConfigClose(data) {\n if (!data) return;\n for (let j = 0; j < form.form.table.length; j++) {\n let obj = form.form.table[j];\n if (Object.keys(data).includes(obj.index)) {\n form.form.table[j].columnList = data[obj.index];\n }\n }\n setSql();\n }\n function setFieldEvent(row) {\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post)(http, \"/online/getTableSetFiled\", {\n sql: form.form.executeSql,\n definitionSql: form.form.definitionSql,\n dbName: addOrEditRootData.form.dbName,\n where: form.form.where,\n uuid: configData.form.uuid\n }, undefined, false).then(data => {\n row.columnList = Object.values(data.data[row.joinTable]);\n filedConfig.value.init(row);\n });\n }\n\n /**\r\n * 一键同步CURD\r\n */\n const syncCurd = () => {\n sync.value = true;\n syncTable();\n };\n function parseSqlToTables(sql) {\n // 标准化SQL,去除多余空格和换行\n let normalizedSql = sql.replace(/[\\n\\r\\s]+/g, ' ').trim();\n\n // 分割FROM后面的部分\n let fromPart = normalizedSql.split(/from/i)[1];\n let result = [{\n index: 't1',\n type: '主表',\n joinTable: '',\n joinFiled: '/'\n }];\n if (!fromPart) return result;\n let currentIndex = 1;\n\n // 分割所有JOIN(包括LEFT JOIN, RIGHT JOIN等)\n let parts = fromPart.split(/\\s+(?:left\\s+)?(?:right\\s+)?(?:inner\\s+)?join\\s+/i);\n\n // 处理主表\n let mainTablePart = parts[0].trim();\n let mainTableName = mainTablePart.split(/\\s+/)[0];\n result[0].joinTable = mainTableName;\n\n // 处理关联表\n for (let i = 1; i < parts.length; i++) {\n currentIndex++;\n let joinPart = parts[i].trim();\n\n // 获取JOIN类型\n let joinType = 'left';\n if (normalizedSql.toLowerCase().includes('right join')) {\n joinType = 'right';\n } else if (normalizedSql.toLowerCase().includes('inner join')) {\n joinType = 'inner';\n }\n\n // 分割ON条件\n let onPart = joinPart.split(/\\s+on\\s+/i);\n let joinTableName = onPart[0].trim().split(/\\s+/)[0];\n let joinFields = onPart[1] ? onPart[1].trim() : '';\n result.push({\n index: 't' + (currentIndex + 1),\n type: joinType,\n joinTable: joinTableName,\n joinFiled: joinFields\n });\n }\n return result;\n }\n const sqlParseTable = o => {\n if (configData.form.executeSql && configData.form.executeSql.toLowerCase().indexOf(\"from\") === -1) {\n return;\n }\n let tableData = parseSqlToTables(configData.form.executeSql);\n if (o) {\n tableData[0].deleteWhere = o.wheres;\n }\n form.form.table = tableData;\n };\n function remoteMethod() {\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.get)(http, \"/online/getDBTableList\", {\n dbName: addOrEditRootData.form.dbName\n }).then(data => {\n dicData.joinTableDicData = data;\n });\n }\n function initDict() {\n for (const column of option.column) {\n if (column.dictCode) {\n column.dicData = dict.val(column.dictCode);\n }\n }\n }\n const emit = __emit; //声明 emits\n (0,vue__WEBPACK_IMPORTED_MODULE_3__.onMounted)(() => {\n remoteMethod();\n initDict();\n });\n __expose({\n setData,\n parseData,\n form\n });\n const __returned__ = {\n http,\n addOrEditRootData,\n dict,\n dicData,\n form,\n option,\n configData,\n parseData,\n setData,\n setTable,\n setSql,\n isSyncCurd,\n sync,\n syncTable,\n filedConfig,\n setFieldConfig,\n getTableNamesByFormSql,\n getTableComment,\n setFormTable,\n updateExecuteSql,\n filedConfigClose,\n setFieldEvent,\n syncCurd,\n parseSqlToTables,\n sqlParseTable,\n remoteMethod,\n initDict,\n emit,\n inject: vue__WEBPACK_IMPORTED_MODULE_3__.inject,\n reactive: vue__WEBPACK_IMPORTED_MODULE_3__.reactive,\n onMounted: vue__WEBPACK_IMPORTED_MODULE_3__.onMounted,\n ref: vue__WEBPACK_IMPORTED_MODULE_3__.ref,\n get get() {\n return _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.get;\n },\n get post() {\n return _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post;\n },\n get setArrayObjectKeyValue() {\n return _utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue;\n },\n get storeDict() {\n return _store_dict__WEBPACK_IMPORTED_MODULE_6__.storeDict;\n },\n get ElMessage() {\n return element_plus__WEBPACK_IMPORTED_MODULE_7__.ElMessage;\n },\n get sqlFormatter() {\n return (sql_formatter__WEBPACK_IMPORTED_MODULE_8___default());\n },\n FieldConfig: _views_table_add_or_edit_config_field_config_index_vue__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n LazyLoadSelect: _components_lazy_load_select_vue__WEBPACK_IMPORTED_MODULE_10__[\"default\"]\n };\n Object.defineProperty(__returned__, '__isScriptSetup', {\n enumerable: false,\n value: true\n });\n return __returned__;\n }\n});\n\n//# sourceURL=webpack://olp-table/./src/views/table/add-or-edit/config/base-config/index.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
832
832
 
833
833
  /***/ }),
834
834
 
package/olp-table.umd.js CHANGED
@@ -828,7 +828,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core
828
828
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
829
829
 
830
830
  "use strict";
831
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.find.js */ \"./node_modules/core-js/modules/es.iterator.find.js\");\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/utils/http/httpUtils */ \"./src/utils/http/httpUtils.js\");\n/* harmony import */ var _utils_object__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/utils/object */ \"./src/utils/object.js\");\n/* harmony import */ var _store_dict__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/store/dict */ \"./src/store/dict.js\");\n/* harmony import */ var element_plus__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! element-plus */ \"element-plus\");\n/* harmony import */ var element_plus__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(element_plus__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var sql_formatter__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! sql-formatter */ \"./node_modules/sql-formatter/lib/sqlFormatter.js\");\n/* harmony import */ var sql_formatter__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(sql_formatter__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _views_table_add_or_edit_config_field_config_index_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/views/table/add-or-edit/config/field-config/index.vue */ \"./src/views/table/add-or-edit/config/field-config/index.vue\");\n/* harmony import */ var _components_lazy_load_select_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/components/lazy-load-select.vue */ \"./src/components/lazy-load-select.vue\");\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n __name: 'index',\n emits: [\"emits\", 'updateTab'],\n setup(__props, {\n expose: __expose,\n emit: __emit\n }) {\n const http = (0,vue__WEBPACK_IMPORTED_MODULE_3__.inject)('http');\n const addOrEditRootData = (0,vue__WEBPACK_IMPORTED_MODULE_3__.inject)('addOrEditRootData');\n const dict = (0,_store_dict__WEBPACK_IMPORTED_MODULE_6__.storeDict)();\n const dicData = (0,vue__WEBPACK_IMPORTED_MODULE_3__.reactive)({\n joinFiledDicData: [{\n label: '内连接',\n value: 'join'\n }, {\n label: '左连接',\n value: 'left join'\n }, {\n label: '右连接',\n value: 'right join'\n }],\n joinTableDicData: []\n });\n const form = (0,vue__WEBPACK_IMPORTED_MODULE_3__.reactive)({\n form: {\n table: [{\n index: \"t1\",\n type: \"主表\",\n joinTable: \"\",\n joinFiled: \"/\",\n deleteWhere: 'id=${id}'\n }],\n executeSql: '',\n executeWhere: '',\n orderBy: ''\n }\n });\n const option = (0,vue__WEBPACK_IMPORTED_MODULE_3__.reactive)({\n submitBtn: false,\n emptyBtn: false,\n column: [\n /* {\r\n label: '转换驼峰', prop: 'hump', border: true, type: 'radio', value: '0', span: 7, dicData: [{\r\n label: '不转换', value: '0'\r\n }, {\r\n label: '转换', value: '1'\r\n },{\r\n label: '请求转换', value: '2'\r\n }],\r\n dictCode: 'converting_hump'\r\n },*/\n {\n label: '数据源类型',\n type: 'radio',\n span: 7,\n prop: 'definitionSql',\n border: true,\n value: '0',\n onChange: ({\n value\n }) => {\n if (value == '0') {\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', true, \"executeSql,where,table,orderBy\");\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', false, \"api,requestType\");\n } else if (value == '1') {\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', true, \"executeSql,where,orderBy\");\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', false, \"api,table,requestType\");\n } else {\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', true, \"api,requestType\");\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', false, \"executeSql,where,table,orderBy\");\n }\n },\n dicData: [{\n label: '自动SQL',\n value: '0'\n }, {\n label: '手动SQL',\n value: '1'\n }, {\n label: 'API',\n value: '2'\n }],\n dictCode: 'tree_data_type'\n }, {\n label: '查询表格',\n prop: 'table',\n type: 'dynamic',\n span: 24,\n children: {\n align: 'center',\n minHeight: 100,\n maxHeight: 170,\n size: \"small\",\n headerAlign: 'center',\n rowAdd: done => {\n let obj = {\n index: \"t\" + (form.form.table.length + 1),\n type: \"join\",\n joinTable: \"\",\n joinFiled: \"t\" + form.form.table.length + \".=t\" + (form.form.table.length + 1) + \".\"\n };\n done(obj);\n },\n rowDel: row => {\n if (row.$index != 0) {\n setSql(row.$index);\n } else {\n element_plus__WEBPACK_IMPORTED_MODULE_7__.ElMessage.error(\"主表不能删除!\");\n }\n },\n column: [{\n width: 60,\n prop: \"index\",\n label: '序号'\n }, {\n label: '类型',\n prop: \"type\",\n width: 120,\n disabled: true,\n type: 'select'\n }, {\n label: '数据表',\n prop: \"joinTable\",\n type: 'select',\n dicData: []\n }, {\n label: 'on',\n prop: \"joinFiled\",\n type: 'input'\n }, {\n label: '删除条件',\n prop: \"deleteWhere\",\n width: 200,\n type: 'input'\n }]\n }\n }, {\n label: '执行SQL',\n display: true,\n type: 'textarea',\n maxRows: 7,\n span: 24,\n prop: 'executeSql'\n }, {\n label: 'where条件',\n display: true,\n type: 'input',\n span: 24,\n prop: 'executeWhere'\n }, {\n label: '排序',\n display: true,\n type: 'input',\n span: 24,\n prop: 'orderBy'\n }, {\n label: '默认参数',\n type: 'input',\n span: 24,\n prop: 'parameterDefault'\n }, {\n label: 'API',\n display: true,\n type: 'input',\n span: 24,\n prop: 'api'\n }, {\n label: '请求类型',\n prop: 'requestType',\n border: true,\n type: 'radio',\n value: '0',\n span: 6,\n dicData: [],\n dictCode: 'request_type'\n }]\n });\n const configData = (0,vue__WEBPACK_IMPORTED_MODULE_3__.inject)('configData');\n function parseData(data) {\n if (form.form.definitionSql == '1') {\n data.mainTable = form.form.mainTable;\n } else {\n data.mainTable = form.form.table[0].joinTable;\n }\n data.definitionSql = form.form.definitionSql;\n data.executeSql = form.form.executeSql;\n data.orderBy = form.form.orderBy;\n data.groupBy = form.form.groupBy;\n data.executeWhere = form.form.executeWhere;\n data.parameterDefault = form.form.parameterDefault;\n data.hump = form.form.hump;\n data.api = form.form.api;\n data.requestType = form.form.requestType;\n if (form.form.definitionSql == 0) {\n if (form.form.table[0].deleteWhere) {\n data.deleteWhere = {\n wheres: form.form.table[0].deleteWhere.trim(),\n tableName: form.form.table[0].joinTable\n };\n } else {\n delete data.deleteWhere;\n }\n }\n }\n function setData(f) {\n form.form.definitionSql = f;\n form.form.hump = f.hump;\n form.form.mainTable = f.mainTable;\n form.form.executeSql = f.executeSql;\n form.form.orderBy = f.orderBy;\n form.form.api = f.api;\n form.form.requestType = f.requestType;\n form.form.executeWhere = f.executeWhere;\n form.form.parameterDefault = f.parameterDefault;\n form.form.definitionSql = f.definitionSql;\n if (form.form.definitionSql == 0) {\n sqlParseTable(f.deleteWhere);\n }\n }\n function setTable() {\n let promise = [];\n for (let i = 0; i < form.form.table.length; i++) {\n promise.push((0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.get)(http, \"/online/getDBTableColumnList/\" + addOrEditRootData.form.dbName, {\n tableName: form.form.table[i].joinTable\n }));\n }\n Promise.all(promise).then(result => {\n for (let i = 0; i < result.length; i++) {\n form.form.table[i]['columnList'] = result[i];\n }\n setSql();\n });\n }\n function setSql(index, seq) {\n if (seq != undefined && seq != 0) {\n let arr = form.form.table.find(item => {\n return item.index == seq;\n });\n if (!arr || !arr.joinTable) {\n return;\n }\n }\n if (index != undefined && index != 0) {\n form.form.table.splice(index, 1);\n }\n let sqlTableOn = form.form.table[0].joinTable + \" t1 \";\n let sqlFiled = \"\";\n let tableColumns = [];\n let sort = 0;\n let mapFiled = {};\n for (let i = 0; i < form.form.table.length; i++) {\n if (i === index) {\n continue;\n }\n let obj = form.form.table[i];\n for (let j = 0; j < obj.columnList.length; j++) {\n let column = obj.columnList[j];\n if (column.checked == 0) {\n continue;\n }\n if (sqlFiled.length != 0) {\n sqlFiled += \",\";\n }\n if (mapFiled[column.column_name] !== undefined) {\n mapFiled[column.column_name]++;\n } else {\n mapFiled[column.column_name] = 0;\n }\n sort++;\n let asName = mapFiled[column.column_name] === 0 ? column.column_name : obj.index + \"_\" + column.column_name;\n sqlFiled += obj.index + \".\" + column.column_name + \" AS \" + asName;\n let column_name = column.column_name;\n let column_comment = column.column_comment ? column.column_comment : column_name;\n tableColumns.push({\n sort: sort,\n tableField: column_name,\n field: column_name,\n title: column_comment,\n label: column_comment,\n visible: column.visible,\n display: 1,\n asName: asName\n });\n }\n if (i != 0) {\n sqlTableOn += \" \" + obj.type + \" \" + obj.joinTable + \" \" + obj.index + \" on \" + obj.joinFiled;\n }\n }\n for (let tableColumn of tableColumns) {\n let add = true;\n for (let c of configData.tableColumn) {\n if (c.field == tableColumn.field) {\n add = false;\n }\n }\n if (add) {\n configData.tableColumn.push(tableColumn);\n }\n }\n for (let i = 0; i < configData.tableColumn.length; i++) {\n let remove = true;\n for (let tableColumn of tableColumns) {\n if (configData.tableColumn[i].field == tableColumn.field) {\n remove = false;\n }\n }\n if (remove) {\n configData.tableColumn.splice(i, 1);\n }\n }\n form.form.executeSql = \"select \" + sqlFiled + \" from \" + sqlTableOn;\n }\n const isSyncCurd = (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)(false);\n const sync = (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)(false);\n function syncTable() {\n emit('loading', true);\n configData.form.executeSql = form.form.executeSql;\n configData.form.executeWhere = form.form.where;\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post)(http, \"/online/getTableFiled\", {\n sql: form.form.executeSql,\n where: form.form.where,\n definitionSql: form.form.definitionSql,\n dbName: addOrEditRootData.form.dbName,\n uuid: configData.form.uuid\n }, undefined, false).then(data => {\n emit(\"updateTable\", data.data);\n isSyncCurd.value = form.form?.definitionSql == 0 && form.form?.table?.length == 1;\n if (isSyncCurd.value && sync.value) {\n emit(\"updateCurd\");\n }\n setFieldConfig();\n }).finally(() => {\n emit('loading', false);\n });\n }\n const filedConfig = (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)();\n function setFieldConfig(filedConf) {\n if (form.form.definitionSql != 0) {\n return;\n }\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post)(http, \"/online/getTableSetFiled\", {\n sql: form.form.executeSql,\n where: form.form.where,\n dbName: addOrEditRootData.form.dbName,\n definitionSql: form.form.definitionSql,\n uuid: configData.form.uuid\n }, false, false).then(({\n data\n }) => {\n setFormTable(data);\n if (filedConf) {\n filedConfig.value.init(form.form.table);\n }\n });\n }\n function getTableNamesByFormSql() {\n let formSql = form.form.executeSql.substring(form.form.executeSql.indexOf('from') + 4);\n let tableNames = [];\n for (const join of formSql.split('join')) {\n tableNames.push(join);\n }\n return tableNames;\n }\n function getTableComment(key) {\n for (const item of dicData.joinTableDicData) {\n if (item.value == key) return item.label;\n }\n }\n function setFormTable(data) {\n let tableNames = getTableNamesByFormSql();\n let tables = [];\n for (const key of Object.keys(data)) {\n let table = {\n index: 't1',\n type: '主表',\n joinTable: key,\n joinFiled: '/',\n deleteWhere: '',\n columnList: [],\n tableComment: getTableComment(key)\n };\n table.columnList = Object.values(data[key]);\n tables.push(table);\n }\n form.form.table = [];\n for (let i = 0; i < tableNames.length; i++) {\n const tableName = tableNames[i];\n for (const table of tables) {\n if (tableName.includes(table.joinTable)) {\n if (i == 0) {\n table.deleteWhere = 'id=${id}';\n table.mainTable = table.joinTable;\n }\n if (i != 0) {\n table.index = 't' + (i + 1);\n table.type = 'join';\n let joinFiled = tableName.substring(tableName.indexOf('on') + 2).replace(/[\\n\\t\\s]+/g, '');\n if (tableNames[i - 1].includes('left')) {\n table.type = 'left join';\n joinFiled = joinFiled.replace('left', '');\n }\n if (tableNames[i - 1].includes('right')) {\n table.type = 'right join';\n joinFiled = joinFiled.replace('right', '');\n }\n table.joinFiled = joinFiled;\n }\n form.form.table.push(table);\n break;\n }\n }\n }\n }\n function updateExecuteSql(v) {\n if (v === 0) {\n form.form.executeSql = sql_formatter__WEBPACK_IMPORTED_MODULE_8___default().format(form.form.executeSql, {\n language: 'sql',\n keywordCase: 'upper',\n indentStyle: 'tabularLeft'\n });\n } else {\n form.form.executeSql = form.form.executeSql.replace(/\\s+/g, \" \");\n }\n }\n function filedConfigClose(data) {\n if (!data) return;\n for (let j = 0; j < form.form.table.length; j++) {\n let obj = form.form.table[j];\n if (Object.keys(data).includes(obj.index)) {\n form.form.table[j].columnList = data[obj.index];\n }\n }\n setSql();\n }\n function setFieldEvent(row) {\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post)(http, \"/online/getTableSetFiled\", {\n sql: form.form.executeSql,\n definitionSql: form.form.definitionSql,\n dbName: addOrEditRootData.form.dbName,\n where: form.form.where,\n uuid: configData.form.uuid\n }, undefined, false).then(data => {\n row.columnList = Object.values(data.data[row.joinTable]);\n filedConfig.value.init(row);\n });\n }\n\n /**\r\n * 一键同步CURD\r\n */\n const syncCurd = () => {\n sync.value = true;\n syncTable();\n };\n function parseSqlToTables(sql) {\n // 标准化SQL,去除多余空格和换行\n let normalizedSql = sql.replace(/[\\n\\r\\s]+/g, ' ').trim();\n\n // 分割FROM后面的部分\n let fromPart = normalizedSql.split(/from/i)[1];\n if (!fromPart) return [];\n let result = [];\n let currentIndex = 0;\n\n // 分割所有JOIN(包括LEFT JOIN, RIGHT JOIN等)\n let parts = fromPart.split(/\\s+(?:left\\s+)?(?:right\\s+)?(?:inner\\s+)?join\\s+/i);\n\n // 处理主表\n let mainTablePart = parts[0].trim();\n let mainTableName = mainTablePart.split(/\\s+/)[0];\n result.push({\n index: 't' + (currentIndex + 1),\n type: '主表',\n joinTable: mainTableName,\n joinFiled: '/'\n });\n\n // 处理关联表\n for (let i = 1; i < parts.length; i++) {\n currentIndex++;\n let joinPart = parts[i].trim();\n\n // 获取JOIN类型\n let joinType = 'left';\n if (normalizedSql.toLowerCase().includes('right join')) {\n joinType = 'right';\n } else if (normalizedSql.toLowerCase().includes('inner join')) {\n joinType = 'inner';\n }\n\n // 分割ON条件\n let onPart = joinPart.split(/\\s+on\\s+/i);\n let joinTableName = onPart[0].trim().split(/\\s+/)[0];\n let joinFields = onPart[1] ? onPart[1].trim() : '';\n result.push({\n index: 't' + (currentIndex + 1),\n type: joinType,\n joinTable: joinTableName,\n joinFiled: joinFields\n });\n }\n return result;\n }\n const sqlParseTable = o => {\n if (configData.form.executeSql && configData.form.executeSql.toLowerCase().indexOf(\"from\") === -1) {\n return;\n }\n let tableData = parseSqlToTables(configData.form.executeSql);\n if (o) {\n tableData[0].deleteWhere = o.wheres;\n }\n form.form.table = tableData;\n };\n function remoteMethod() {\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.get)(http, \"/online/getDBTableList\", {\n dbName: addOrEditRootData.form.dbName\n }).then(data => {\n dicData.joinTableDicData = data;\n });\n }\n function initDict() {\n for (const column of option.column) {\n if (column.dictCode) {\n column.dicData = dict.val(column.dictCode);\n }\n }\n }\n const emit = __emit; //声明 emits\n (0,vue__WEBPACK_IMPORTED_MODULE_3__.onMounted)(() => {\n remoteMethod();\n initDict();\n });\n __expose({\n setData,\n parseData,\n form\n });\n const __returned__ = {\n http,\n addOrEditRootData,\n dict,\n dicData,\n form,\n option,\n configData,\n parseData,\n setData,\n setTable,\n setSql,\n isSyncCurd,\n sync,\n syncTable,\n filedConfig,\n setFieldConfig,\n getTableNamesByFormSql,\n getTableComment,\n setFormTable,\n updateExecuteSql,\n filedConfigClose,\n setFieldEvent,\n syncCurd,\n parseSqlToTables,\n sqlParseTable,\n remoteMethod,\n initDict,\n emit,\n inject: vue__WEBPACK_IMPORTED_MODULE_3__.inject,\n reactive: vue__WEBPACK_IMPORTED_MODULE_3__.reactive,\n onMounted: vue__WEBPACK_IMPORTED_MODULE_3__.onMounted,\n ref: vue__WEBPACK_IMPORTED_MODULE_3__.ref,\n get get() {\n return _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.get;\n },\n get post() {\n return _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post;\n },\n get setArrayObjectKeyValue() {\n return _utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue;\n },\n get storeDict() {\n return _store_dict__WEBPACK_IMPORTED_MODULE_6__.storeDict;\n },\n get ElMessage() {\n return element_plus__WEBPACK_IMPORTED_MODULE_7__.ElMessage;\n },\n get sqlFormatter() {\n return (sql_formatter__WEBPACK_IMPORTED_MODULE_8___default());\n },\n FieldConfig: _views_table_add_or_edit_config_field_config_index_vue__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n LazyLoadSelect: _components_lazy_load_select_vue__WEBPACK_IMPORTED_MODULE_10__[\"default\"]\n };\n Object.defineProperty(__returned__, '__isScriptSetup', {\n enumerable: false,\n value: true\n });\n return __returned__;\n }\n});\n\n//# sourceURL=webpack://olp-table/./src/views/table/add-or-edit/config/base-config/index.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
831
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.find.js */ \"./node_modules/core-js/modules/es.iterator.find.js\");\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/utils/http/httpUtils */ \"./src/utils/http/httpUtils.js\");\n/* harmony import */ var _utils_object__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/utils/object */ \"./src/utils/object.js\");\n/* harmony import */ var _store_dict__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/store/dict */ \"./src/store/dict.js\");\n/* harmony import */ var element_plus__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! element-plus */ \"element-plus\");\n/* harmony import */ var element_plus__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(element_plus__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var sql_formatter__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! sql-formatter */ \"./node_modules/sql-formatter/lib/sqlFormatter.js\");\n/* harmony import */ var sql_formatter__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(sql_formatter__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _views_table_add_or_edit_config_field_config_index_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/views/table/add-or-edit/config/field-config/index.vue */ \"./src/views/table/add-or-edit/config/field-config/index.vue\");\n/* harmony import */ var _components_lazy_load_select_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/components/lazy-load-select.vue */ \"./src/components/lazy-load-select.vue\");\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n __name: 'index',\n emits: [\"emits\", 'updateTab'],\n setup(__props, {\n expose: __expose,\n emit: __emit\n }) {\n const http = (0,vue__WEBPACK_IMPORTED_MODULE_3__.inject)('http');\n const addOrEditRootData = (0,vue__WEBPACK_IMPORTED_MODULE_3__.inject)('addOrEditRootData');\n const dict = (0,_store_dict__WEBPACK_IMPORTED_MODULE_6__.storeDict)();\n const dicData = (0,vue__WEBPACK_IMPORTED_MODULE_3__.reactive)({\n joinFiledDicData: [{\n label: '内连接',\n value: 'join'\n }, {\n label: '左连接',\n value: 'left join'\n }, {\n label: '右连接',\n value: 'right join'\n }],\n joinTableDicData: []\n });\n const form = (0,vue__WEBPACK_IMPORTED_MODULE_3__.reactive)({\n form: {\n table: [{\n index: \"t1\",\n type: \"主表\",\n joinTable: \"\",\n joinFiled: \"/\",\n deleteWhere: 'id=${id}'\n }],\n executeSql: '',\n executeWhere: '',\n orderBy: ''\n }\n });\n const option = (0,vue__WEBPACK_IMPORTED_MODULE_3__.reactive)({\n submitBtn: false,\n emptyBtn: false,\n column: [\n /* {\r\n label: '转换驼峰', prop: 'hump', border: true, type: 'radio', value: '0', span: 7, dicData: [{\r\n label: '不转换', value: '0'\r\n }, {\r\n label: '转换', value: '1'\r\n },{\r\n label: '请求转换', value: '2'\r\n }],\r\n dictCode: 'converting_hump'\r\n },*/\n {\n label: '数据源类型',\n type: 'radio',\n span: 7,\n prop: 'definitionSql',\n border: true,\n value: '0',\n onChange: ({\n value\n }) => {\n if (value == '0') {\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', true, \"executeSql,where,table,orderBy\");\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', false, \"api,requestType\");\n } else if (value == '1') {\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', true, \"executeSql,where,orderBy\");\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', false, \"api,table,requestType\");\n } else {\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', true, \"api,requestType\");\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', false, \"executeSql,where,table,orderBy\");\n }\n },\n dicData: [{\n label: '自动SQL',\n value: '0'\n }, {\n label: '手动SQL',\n value: '1'\n }, {\n label: 'API',\n value: '2'\n }],\n dictCode: 'tree_data_type'\n }, {\n label: '查询表格',\n prop: 'table',\n type: 'dynamic',\n span: 24,\n children: {\n align: 'center',\n minHeight: 100,\n maxHeight: 170,\n size: \"small\",\n headerAlign: 'center',\n rowAdd: done => {\n let obj = {\n index: \"t\" + (form.form.table.length + 1),\n type: \"join\",\n joinTable: \"\",\n joinFiled: \"t\" + form.form.table.length + \".=t\" + (form.form.table.length + 1) + \".\"\n };\n done(obj);\n },\n rowDel: row => {\n if (row.$index != 0) {\n setSql(row.$index);\n } else {\n element_plus__WEBPACK_IMPORTED_MODULE_7__.ElMessage.error(\"主表不能删除!\");\n }\n },\n column: [{\n width: 60,\n prop: \"index\",\n label: '序号'\n }, {\n label: '类型',\n prop: \"type\",\n width: 120,\n disabled: true,\n type: 'select'\n }, {\n label: '数据表',\n prop: \"joinTable\",\n type: 'select',\n dicData: []\n }, {\n label: 'on',\n prop: \"joinFiled\",\n type: 'input'\n }, {\n label: '删除条件',\n prop: \"deleteWhere\",\n width: 200,\n type: 'input'\n }]\n }\n }, {\n label: '执行SQL',\n display: true,\n type: 'textarea',\n maxRows: 7,\n span: 24,\n prop: 'executeSql'\n }, {\n label: 'where条件',\n display: true,\n type: 'input',\n span: 24,\n prop: 'executeWhere'\n }, {\n label: '排序',\n display: true,\n type: 'input',\n span: 24,\n prop: 'orderBy'\n }, {\n label: '默认参数',\n type: 'input',\n span: 24,\n prop: 'parameterDefault'\n }, {\n label: 'API',\n display: true,\n type: 'input',\n span: 24,\n prop: 'api'\n }, {\n label: '请求类型',\n prop: 'requestType',\n border: true,\n type: 'radio',\n value: '0',\n span: 6,\n dicData: [],\n dictCode: 'request_type'\n }]\n });\n const configData = (0,vue__WEBPACK_IMPORTED_MODULE_3__.inject)('configData');\n function parseData(data) {\n if (form.form.definitionSql == '1') {\n data.mainTable = form.form.mainTable;\n } else {\n data.mainTable = form.form.table[0].joinTable;\n }\n data.definitionSql = form.form.definitionSql;\n data.executeSql = form.form.executeSql;\n data.orderBy = form.form.orderBy;\n data.groupBy = form.form.groupBy;\n data.executeWhere = form.form.executeWhere;\n data.parameterDefault = form.form.parameterDefault;\n data.hump = form.form.hump;\n data.api = form.form.api;\n data.requestType = form.form.requestType;\n if (form.form.definitionSql == 0) {\n if (form.form.table[0].deleteWhere) {\n data.deleteWhere = {\n wheres: form.form.table[0].deleteWhere.trim(),\n tableName: form.form.table[0].joinTable\n };\n } else {\n delete data.deleteWhere;\n }\n }\n }\n function setData(f) {\n form.form.definitionSql = f;\n form.form.hump = f.hump;\n form.form.mainTable = f.mainTable;\n form.form.executeSql = f.executeSql;\n form.form.orderBy = f.orderBy;\n form.form.api = f.api;\n form.form.requestType = f.requestType;\n form.form.executeWhere = f.executeWhere;\n form.form.parameterDefault = f.parameterDefault;\n form.form.definitionSql = f.definitionSql;\n if (form.form.definitionSql == 0) {\n sqlParseTable(f.deleteWhere);\n }\n }\n function setTable() {\n let promise = [];\n for (let i = 0; i < form.form.table.length; i++) {\n promise.push((0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.get)(http, \"/online/getDBTableColumnList/\" + addOrEditRootData.form.dbName, {\n tableName: form.form.table[i].joinTable\n }));\n }\n Promise.all(promise).then(result => {\n for (let i = 0; i < result.length; i++) {\n form.form.table[i]['columnList'] = result[i];\n }\n setSql();\n });\n }\n function setSql(index, seq) {\n if (seq != undefined && seq != 0) {\n let arr = form.form.table.find(item => {\n return item.index == seq;\n });\n if (!arr || !arr.joinTable) {\n return;\n }\n }\n if (index != undefined && index != 0) {\n form.form.table.splice(index, 1);\n }\n let sqlTableOn = form.form.table[0].joinTable + \" t1 \";\n let sqlFiled = \"\";\n let tableColumns = [];\n let sort = 0;\n let mapFiled = {};\n for (let i = 0; i < form.form.table.length; i++) {\n if (i === index) {\n continue;\n }\n let obj = form.form.table[i];\n for (let j = 0; j < obj.columnList.length; j++) {\n let column = obj.columnList[j];\n if (column.checked == 0) {\n continue;\n }\n if (sqlFiled.length != 0) {\n sqlFiled += \",\";\n }\n if (mapFiled[column.column_name] !== undefined) {\n mapFiled[column.column_name]++;\n } else {\n mapFiled[column.column_name] = 0;\n }\n sort++;\n let asName = mapFiled[column.column_name] === 0 ? column.column_name : obj.index + \"_\" + column.column_name;\n sqlFiled += obj.index + \".\" + column.column_name + \" AS \" + asName;\n let column_name = column.column_name;\n let column_comment = column.column_comment ? column.column_comment : column_name;\n tableColumns.push({\n sort: sort,\n tableField: column_name,\n field: column_name,\n title: column_comment,\n label: column_comment,\n visible: column.visible,\n display: 1,\n asName: asName\n });\n }\n if (i != 0) {\n sqlTableOn += \" \" + obj.type + \" \" + obj.joinTable + \" \" + obj.index + \" on \" + obj.joinFiled;\n }\n }\n for (let tableColumn of tableColumns) {\n let add = true;\n for (let c of configData.tableColumn) {\n if (c.field == tableColumn.field) {\n add = false;\n }\n }\n if (add) {\n configData.tableColumn.push(tableColumn);\n }\n }\n for (let i = 0; i < configData.tableColumn.length; i++) {\n let remove = true;\n for (let tableColumn of tableColumns) {\n if (configData.tableColumn[i].field == tableColumn.field) {\n remove = false;\n }\n }\n if (remove) {\n configData.tableColumn.splice(i, 1);\n }\n }\n form.form.executeSql = \"select \" + sqlFiled + \" from \" + sqlTableOn;\n }\n const isSyncCurd = (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)(false);\n const sync = (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)(false);\n function syncTable() {\n emit('loading', true);\n configData.form.executeSql = form.form.executeSql;\n configData.form.executeWhere = form.form.where;\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post)(http, \"/online/getTableFiled\", {\n sql: form.form.executeSql,\n where: form.form.where,\n definitionSql: form.form.definitionSql,\n dbName: addOrEditRootData.form.dbName,\n uuid: configData.form.uuid\n }, undefined, false).then(data => {\n emit(\"updateTable\", data.data);\n isSyncCurd.value = form.form?.definitionSql == 0 && form.form?.table?.length == 1;\n if (isSyncCurd.value && sync.value) {\n emit(\"updateCurd\");\n }\n setFieldConfig();\n }).finally(() => {\n emit('loading', false);\n });\n }\n const filedConfig = (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)();\n function setFieldConfig(filedConf) {\n if (form.form.definitionSql != 0) {\n return;\n }\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post)(http, \"/online/getTableSetFiled\", {\n sql: form.form.executeSql,\n where: form.form.where,\n dbName: addOrEditRootData.form.dbName,\n definitionSql: form.form.definitionSql,\n uuid: configData.form.uuid\n }, false, false).then(({\n data\n }) => {\n setFormTable(data);\n if (filedConf) {\n filedConfig.value.init(form.form.table);\n }\n });\n }\n function getTableNamesByFormSql() {\n let formSql = form.form.executeSql.substring(form.form.executeSql.indexOf('from') + 4);\n let tableNames = [];\n for (const join of formSql.split('join')) {\n tableNames.push(join);\n }\n return tableNames;\n }\n function getTableComment(key) {\n for (const item of dicData.joinTableDicData) {\n if (item.value == key) return item.label;\n }\n }\n function setFormTable(data) {\n let tableNames = getTableNamesByFormSql();\n let tables = [];\n for (const key of Object.keys(data)) {\n let table = {\n index: 't1',\n type: '主表',\n joinTable: key,\n joinFiled: '/',\n deleteWhere: '',\n columnList: [],\n tableComment: getTableComment(key)\n };\n table.columnList = Object.values(data[key]);\n tables.push(table);\n }\n form.form.table = [];\n for (let i = 0; i < tableNames.length; i++) {\n const tableName = tableNames[i];\n for (const table of tables) {\n if (tableName.includes(table.joinTable)) {\n if (i == 0) {\n table.deleteWhere = 'id=${id}';\n table.mainTable = table.joinTable;\n }\n if (i != 0) {\n table.index = 't' + (i + 1);\n table.type = 'join';\n let joinFiled = tableName.substring(tableName.indexOf('on') + 2).replace(/[\\n\\t\\s]+/g, '');\n if (tableNames[i - 1].includes('left')) {\n table.type = 'left join';\n joinFiled = joinFiled.replace('left', '');\n }\n if (tableNames[i - 1].includes('right')) {\n table.type = 'right join';\n joinFiled = joinFiled.replace('right', '');\n }\n table.joinFiled = joinFiled;\n }\n form.form.table.push(table);\n break;\n }\n }\n }\n }\n function updateExecuteSql(v) {\n if (v === 0) {\n form.form.executeSql = sql_formatter__WEBPACK_IMPORTED_MODULE_8___default().format(form.form.executeSql, {\n language: 'sql',\n keywordCase: 'upper',\n indentStyle: 'tabularLeft'\n });\n } else {\n form.form.executeSql = form.form.executeSql.replace(/\\s+/g, \" \");\n }\n }\n function filedConfigClose(data) {\n if (!data) return;\n for (let j = 0; j < form.form.table.length; j++) {\n let obj = form.form.table[j];\n if (Object.keys(data).includes(obj.index)) {\n form.form.table[j].columnList = data[obj.index];\n }\n }\n setSql();\n }\n function setFieldEvent(row) {\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post)(http, \"/online/getTableSetFiled\", {\n sql: form.form.executeSql,\n definitionSql: form.form.definitionSql,\n dbName: addOrEditRootData.form.dbName,\n where: form.form.where,\n uuid: configData.form.uuid\n }, undefined, false).then(data => {\n row.columnList = Object.values(data.data[row.joinTable]);\n filedConfig.value.init(row);\n });\n }\n\n /**\r\n * 一键同步CURD\r\n */\n const syncCurd = () => {\n sync.value = true;\n syncTable();\n };\n function parseSqlToTables(sql) {\n // 标准化SQL,去除多余空格和换行\n let normalizedSql = sql.replace(/[\\n\\r\\s]+/g, ' ').trim();\n\n // 分割FROM后面的部分\n let fromPart = normalizedSql.split(/from/i)[1];\n let result = [{\n index: 't1',\n type: '主表',\n joinTable: '',\n joinFiled: '/'\n }];\n if (!fromPart) return result;\n let currentIndex = 1;\n\n // 分割所有JOIN(包括LEFT JOIN, RIGHT JOIN等)\n let parts = fromPart.split(/\\s+(?:left\\s+)?(?:right\\s+)?(?:inner\\s+)?join\\s+/i);\n\n // 处理主表\n let mainTablePart = parts[0].trim();\n let mainTableName = mainTablePart.split(/\\s+/)[0];\n result[0].joinTable = mainTableName;\n\n // 处理关联表\n for (let i = 1; i < parts.length; i++) {\n currentIndex++;\n let joinPart = parts[i].trim();\n\n // 获取JOIN类型\n let joinType = 'left';\n if (normalizedSql.toLowerCase().includes('right join')) {\n joinType = 'right';\n } else if (normalizedSql.toLowerCase().includes('inner join')) {\n joinType = 'inner';\n }\n\n // 分割ON条件\n let onPart = joinPart.split(/\\s+on\\s+/i);\n let joinTableName = onPart[0].trim().split(/\\s+/)[0];\n let joinFields = onPart[1] ? onPart[1].trim() : '';\n result.push({\n index: 't' + (currentIndex + 1),\n type: joinType,\n joinTable: joinTableName,\n joinFiled: joinFields\n });\n }\n return result;\n }\n const sqlParseTable = o => {\n if (configData.form.executeSql && configData.form.executeSql.toLowerCase().indexOf(\"from\") === -1) {\n return;\n }\n let tableData = parseSqlToTables(configData.form.executeSql);\n if (o) {\n tableData[0].deleteWhere = o.wheres;\n }\n form.form.table = tableData;\n };\n function remoteMethod() {\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.get)(http, \"/online/getDBTableList\", {\n dbName: addOrEditRootData.form.dbName\n }).then(data => {\n dicData.joinTableDicData = data;\n });\n }\n function initDict() {\n for (const column of option.column) {\n if (column.dictCode) {\n column.dicData = dict.val(column.dictCode);\n }\n }\n }\n const emit = __emit; //声明 emits\n (0,vue__WEBPACK_IMPORTED_MODULE_3__.onMounted)(() => {\n remoteMethod();\n initDict();\n });\n __expose({\n setData,\n parseData,\n form\n });\n const __returned__ = {\n http,\n addOrEditRootData,\n dict,\n dicData,\n form,\n option,\n configData,\n parseData,\n setData,\n setTable,\n setSql,\n isSyncCurd,\n sync,\n syncTable,\n filedConfig,\n setFieldConfig,\n getTableNamesByFormSql,\n getTableComment,\n setFormTable,\n updateExecuteSql,\n filedConfigClose,\n setFieldEvent,\n syncCurd,\n parseSqlToTables,\n sqlParseTable,\n remoteMethod,\n initDict,\n emit,\n inject: vue__WEBPACK_IMPORTED_MODULE_3__.inject,\n reactive: vue__WEBPACK_IMPORTED_MODULE_3__.reactive,\n onMounted: vue__WEBPACK_IMPORTED_MODULE_3__.onMounted,\n ref: vue__WEBPACK_IMPORTED_MODULE_3__.ref,\n get get() {\n return _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.get;\n },\n get post() {\n return _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post;\n },\n get setArrayObjectKeyValue() {\n return _utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue;\n },\n get storeDict() {\n return _store_dict__WEBPACK_IMPORTED_MODULE_6__.storeDict;\n },\n get ElMessage() {\n return element_plus__WEBPACK_IMPORTED_MODULE_7__.ElMessage;\n },\n get sqlFormatter() {\n return (sql_formatter__WEBPACK_IMPORTED_MODULE_8___default());\n },\n FieldConfig: _views_table_add_or_edit_config_field_config_index_vue__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n LazyLoadSelect: _components_lazy_load_select_vue__WEBPACK_IMPORTED_MODULE_10__[\"default\"]\n };\n Object.defineProperty(__returned__, '__isScriptSetup', {\n enumerable: false,\n value: true\n });\n return __returned__;\n }\n});\n\n//# sourceURL=webpack://olp-table/./src/views/table/add-or-edit/config/base-config/index.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
832
832
 
833
833
  /***/ }),
834
834
 
@@ -828,7 +828,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core
828
828
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
829
829
 
830
830
  "use strict";
831
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.find.js */ \"./node_modules/core-js/modules/es.iterator.find.js\");\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/utils/http/httpUtils */ \"./src/utils/http/httpUtils.js\");\n/* harmony import */ var _utils_object__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/utils/object */ \"./src/utils/object.js\");\n/* harmony import */ var _store_dict__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/store/dict */ \"./src/store/dict.js\");\n/* harmony import */ var element_plus__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! element-plus */ \"element-plus\");\n/* harmony import */ var element_plus__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(element_plus__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var sql_formatter__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! sql-formatter */ \"./node_modules/sql-formatter/lib/sqlFormatter.js\");\n/* harmony import */ var sql_formatter__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(sql_formatter__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _views_table_add_or_edit_config_field_config_index_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/views/table/add-or-edit/config/field-config/index.vue */ \"./src/views/table/add-or-edit/config/field-config/index.vue\");\n/* harmony import */ var _components_lazy_load_select_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/components/lazy-load-select.vue */ \"./src/components/lazy-load-select.vue\");\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n __name: 'index',\n emits: [\"emits\", 'updateTab'],\n setup(__props, {\n expose: __expose,\n emit: __emit\n }) {\n const http = (0,vue__WEBPACK_IMPORTED_MODULE_3__.inject)('http');\n const addOrEditRootData = (0,vue__WEBPACK_IMPORTED_MODULE_3__.inject)('addOrEditRootData');\n const dict = (0,_store_dict__WEBPACK_IMPORTED_MODULE_6__.storeDict)();\n const dicData = (0,vue__WEBPACK_IMPORTED_MODULE_3__.reactive)({\n joinFiledDicData: [{\n label: '内连接',\n value: 'join'\n }, {\n label: '左连接',\n value: 'left join'\n }, {\n label: '右连接',\n value: 'right join'\n }],\n joinTableDicData: []\n });\n const form = (0,vue__WEBPACK_IMPORTED_MODULE_3__.reactive)({\n form: {\n table: [{\n index: \"t1\",\n type: \"主表\",\n joinTable: \"\",\n joinFiled: \"/\",\n deleteWhere: 'id=${id}'\n }],\n executeSql: '',\n executeWhere: '',\n orderBy: ''\n }\n });\n const option = (0,vue__WEBPACK_IMPORTED_MODULE_3__.reactive)({\n submitBtn: false,\n emptyBtn: false,\n column: [\n /* {\r\n label: '转换驼峰', prop: 'hump', border: true, type: 'radio', value: '0', span: 7, dicData: [{\r\n label: '不转换', value: '0'\r\n }, {\r\n label: '转换', value: '1'\r\n },{\r\n label: '请求转换', value: '2'\r\n }],\r\n dictCode: 'converting_hump'\r\n },*/\n {\n label: '数据源类型',\n type: 'radio',\n span: 7,\n prop: 'definitionSql',\n border: true,\n value: '0',\n onChange: ({\n value\n }) => {\n if (value == '0') {\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', true, \"executeSql,where,table,orderBy\");\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', false, \"api,requestType\");\n } else if (value == '1') {\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', true, \"executeSql,where,orderBy\");\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', false, \"api,table,requestType\");\n } else {\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', true, \"api,requestType\");\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', false, \"executeSql,where,table,orderBy\");\n }\n },\n dicData: [{\n label: '自动SQL',\n value: '0'\n }, {\n label: '手动SQL',\n value: '1'\n }, {\n label: 'API',\n value: '2'\n }],\n dictCode: 'tree_data_type'\n }, {\n label: '查询表格',\n prop: 'table',\n type: 'dynamic',\n span: 24,\n children: {\n align: 'center',\n minHeight: 100,\n maxHeight: 170,\n size: \"small\",\n headerAlign: 'center',\n rowAdd: done => {\n let obj = {\n index: \"t\" + (form.form.table.length + 1),\n type: \"join\",\n joinTable: \"\",\n joinFiled: \"t\" + form.form.table.length + \".=t\" + (form.form.table.length + 1) + \".\"\n };\n done(obj);\n },\n rowDel: row => {\n if (row.$index != 0) {\n setSql(row.$index);\n } else {\n element_plus__WEBPACK_IMPORTED_MODULE_7__.ElMessage.error(\"主表不能删除!\");\n }\n },\n column: [{\n width: 60,\n prop: \"index\",\n label: '序号'\n }, {\n label: '类型',\n prop: \"type\",\n width: 120,\n disabled: true,\n type: 'select'\n }, {\n label: '数据表',\n prop: \"joinTable\",\n type: 'select',\n dicData: []\n }, {\n label: 'on',\n prop: \"joinFiled\",\n type: 'input'\n }, {\n label: '删除条件',\n prop: \"deleteWhere\",\n width: 200,\n type: 'input'\n }]\n }\n }, {\n label: '执行SQL',\n display: true,\n type: 'textarea',\n maxRows: 7,\n span: 24,\n prop: 'executeSql'\n }, {\n label: 'where条件',\n display: true,\n type: 'input',\n span: 24,\n prop: 'executeWhere'\n }, {\n label: '排序',\n display: true,\n type: 'input',\n span: 24,\n prop: 'orderBy'\n }, {\n label: '默认参数',\n type: 'input',\n span: 24,\n prop: 'parameterDefault'\n }, {\n label: 'API',\n display: true,\n type: 'input',\n span: 24,\n prop: 'api'\n }, {\n label: '请求类型',\n prop: 'requestType',\n border: true,\n type: 'radio',\n value: '0',\n span: 6,\n dicData: [],\n dictCode: 'request_type'\n }]\n });\n const configData = (0,vue__WEBPACK_IMPORTED_MODULE_3__.inject)('configData');\n function parseData(data) {\n if (form.form.definitionSql == '1') {\n data.mainTable = form.form.mainTable;\n } else {\n data.mainTable = form.form.table[0].joinTable;\n }\n data.definitionSql = form.form.definitionSql;\n data.executeSql = form.form.executeSql;\n data.orderBy = form.form.orderBy;\n data.groupBy = form.form.groupBy;\n data.executeWhere = form.form.executeWhere;\n data.parameterDefault = form.form.parameterDefault;\n data.hump = form.form.hump;\n data.api = form.form.api;\n data.requestType = form.form.requestType;\n if (form.form.definitionSql == 0) {\n if (form.form.table[0].deleteWhere) {\n data.deleteWhere = {\n wheres: form.form.table[0].deleteWhere.trim(),\n tableName: form.form.table[0].joinTable\n };\n } else {\n delete data.deleteWhere;\n }\n }\n }\n function setData(f) {\n form.form.definitionSql = f;\n form.form.hump = f.hump;\n form.form.mainTable = f.mainTable;\n form.form.executeSql = f.executeSql;\n form.form.orderBy = f.orderBy;\n form.form.api = f.api;\n form.form.requestType = f.requestType;\n form.form.executeWhere = f.executeWhere;\n form.form.parameterDefault = f.parameterDefault;\n form.form.definitionSql = f.definitionSql;\n if (form.form.definitionSql == 0) {\n sqlParseTable(f.deleteWhere);\n }\n }\n function setTable() {\n let promise = [];\n for (let i = 0; i < form.form.table.length; i++) {\n promise.push((0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.get)(http, \"/online/getDBTableColumnList/\" + addOrEditRootData.form.dbName, {\n tableName: form.form.table[i].joinTable\n }));\n }\n Promise.all(promise).then(result => {\n for (let i = 0; i < result.length; i++) {\n form.form.table[i]['columnList'] = result[i];\n }\n setSql();\n });\n }\n function setSql(index, seq) {\n if (seq != undefined && seq != 0) {\n let arr = form.form.table.find(item => {\n return item.index == seq;\n });\n if (!arr || !arr.joinTable) {\n return;\n }\n }\n if (index != undefined && index != 0) {\n form.form.table.splice(index, 1);\n }\n let sqlTableOn = form.form.table[0].joinTable + \" t1 \";\n let sqlFiled = \"\";\n let tableColumns = [];\n let sort = 0;\n let mapFiled = {};\n for (let i = 0; i < form.form.table.length; i++) {\n if (i === index) {\n continue;\n }\n let obj = form.form.table[i];\n for (let j = 0; j < obj.columnList.length; j++) {\n let column = obj.columnList[j];\n if (column.checked == 0) {\n continue;\n }\n if (sqlFiled.length != 0) {\n sqlFiled += \",\";\n }\n if (mapFiled[column.column_name] !== undefined) {\n mapFiled[column.column_name]++;\n } else {\n mapFiled[column.column_name] = 0;\n }\n sort++;\n let asName = mapFiled[column.column_name] === 0 ? column.column_name : obj.index + \"_\" + column.column_name;\n sqlFiled += obj.index + \".\" + column.column_name + \" AS \" + asName;\n let column_name = column.column_name;\n let column_comment = column.column_comment ? column.column_comment : column_name;\n tableColumns.push({\n sort: sort,\n tableField: column_name,\n field: column_name,\n title: column_comment,\n label: column_comment,\n visible: column.visible,\n display: 1,\n asName: asName\n });\n }\n if (i != 0) {\n sqlTableOn += \" \" + obj.type + \" \" + obj.joinTable + \" \" + obj.index + \" on \" + obj.joinFiled;\n }\n }\n for (let tableColumn of tableColumns) {\n let add = true;\n for (let c of configData.tableColumn) {\n if (c.field == tableColumn.field) {\n add = false;\n }\n }\n if (add) {\n configData.tableColumn.push(tableColumn);\n }\n }\n for (let i = 0; i < configData.tableColumn.length; i++) {\n let remove = true;\n for (let tableColumn of tableColumns) {\n if (configData.tableColumn[i].field == tableColumn.field) {\n remove = false;\n }\n }\n if (remove) {\n configData.tableColumn.splice(i, 1);\n }\n }\n form.form.executeSql = \"select \" + sqlFiled + \" from \" + sqlTableOn;\n }\n const isSyncCurd = (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)(false);\n const sync = (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)(false);\n function syncTable() {\n emit('loading', true);\n configData.form.executeSql = form.form.executeSql;\n configData.form.executeWhere = form.form.where;\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post)(http, \"/online/getTableFiled\", {\n sql: form.form.executeSql,\n where: form.form.where,\n definitionSql: form.form.definitionSql,\n dbName: addOrEditRootData.form.dbName,\n uuid: configData.form.uuid\n }, undefined, false).then(data => {\n emit(\"updateTable\", data.data);\n isSyncCurd.value = form.form?.definitionSql == 0 && form.form?.table?.length == 1;\n if (isSyncCurd.value && sync.value) {\n emit(\"updateCurd\");\n }\n setFieldConfig();\n }).finally(() => {\n emit('loading', false);\n });\n }\n const filedConfig = (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)();\n function setFieldConfig(filedConf) {\n if (form.form.definitionSql != 0) {\n return;\n }\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post)(http, \"/online/getTableSetFiled\", {\n sql: form.form.executeSql,\n where: form.form.where,\n dbName: addOrEditRootData.form.dbName,\n definitionSql: form.form.definitionSql,\n uuid: configData.form.uuid\n }, false, false).then(({\n data\n }) => {\n setFormTable(data);\n if (filedConf) {\n filedConfig.value.init(form.form.table);\n }\n });\n }\n function getTableNamesByFormSql() {\n let formSql = form.form.executeSql.substring(form.form.executeSql.indexOf('from') + 4);\n let tableNames = [];\n for (const join of formSql.split('join')) {\n tableNames.push(join);\n }\n return tableNames;\n }\n function getTableComment(key) {\n for (const item of dicData.joinTableDicData) {\n if (item.value == key) return item.label;\n }\n }\n function setFormTable(data) {\n let tableNames = getTableNamesByFormSql();\n let tables = [];\n for (const key of Object.keys(data)) {\n let table = {\n index: 't1',\n type: '主表',\n joinTable: key,\n joinFiled: '/',\n deleteWhere: '',\n columnList: [],\n tableComment: getTableComment(key)\n };\n table.columnList = Object.values(data[key]);\n tables.push(table);\n }\n form.form.table = [];\n for (let i = 0; i < tableNames.length; i++) {\n const tableName = tableNames[i];\n for (const table of tables) {\n if (tableName.includes(table.joinTable)) {\n if (i == 0) {\n table.deleteWhere = 'id=${id}';\n table.mainTable = table.joinTable;\n }\n if (i != 0) {\n table.index = 't' + (i + 1);\n table.type = 'join';\n let joinFiled = tableName.substring(tableName.indexOf('on') + 2).replace(/[\\n\\t\\s]+/g, '');\n if (tableNames[i - 1].includes('left')) {\n table.type = 'left join';\n joinFiled = joinFiled.replace('left', '');\n }\n if (tableNames[i - 1].includes('right')) {\n table.type = 'right join';\n joinFiled = joinFiled.replace('right', '');\n }\n table.joinFiled = joinFiled;\n }\n form.form.table.push(table);\n break;\n }\n }\n }\n }\n function updateExecuteSql(v) {\n if (v === 0) {\n form.form.executeSql = sql_formatter__WEBPACK_IMPORTED_MODULE_8___default().format(form.form.executeSql, {\n language: 'sql',\n keywordCase: 'upper',\n indentStyle: 'tabularLeft'\n });\n } else {\n form.form.executeSql = form.form.executeSql.replace(/\\s+/g, \" \");\n }\n }\n function filedConfigClose(data) {\n if (!data) return;\n for (let j = 0; j < form.form.table.length; j++) {\n let obj = form.form.table[j];\n if (Object.keys(data).includes(obj.index)) {\n form.form.table[j].columnList = data[obj.index];\n }\n }\n setSql();\n }\n function setFieldEvent(row) {\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post)(http, \"/online/getTableSetFiled\", {\n sql: form.form.executeSql,\n definitionSql: form.form.definitionSql,\n dbName: addOrEditRootData.form.dbName,\n where: form.form.where,\n uuid: configData.form.uuid\n }, undefined, false).then(data => {\n row.columnList = Object.values(data.data[row.joinTable]);\n filedConfig.value.init(row);\n });\n }\n\n /**\r\n * 一键同步CURD\r\n */\n const syncCurd = () => {\n sync.value = true;\n syncTable();\n };\n function parseSqlToTables(sql) {\n // 标准化SQL,去除多余空格和换行\n let normalizedSql = sql.replace(/[\\n\\r\\s]+/g, ' ').trim();\n\n // 分割FROM后面的部分\n let fromPart = normalizedSql.split(/from/i)[1];\n if (!fromPart) return [];\n let result = [];\n let currentIndex = 0;\n\n // 分割所有JOIN(包括LEFT JOIN, RIGHT JOIN等)\n let parts = fromPart.split(/\\s+(?:left\\s+)?(?:right\\s+)?(?:inner\\s+)?join\\s+/i);\n\n // 处理主表\n let mainTablePart = parts[0].trim();\n let mainTableName = mainTablePart.split(/\\s+/)[0];\n result.push({\n index: 't' + (currentIndex + 1),\n type: '主表',\n joinTable: mainTableName,\n joinFiled: '/'\n });\n\n // 处理关联表\n for (let i = 1; i < parts.length; i++) {\n currentIndex++;\n let joinPart = parts[i].trim();\n\n // 获取JOIN类型\n let joinType = 'left';\n if (normalizedSql.toLowerCase().includes('right join')) {\n joinType = 'right';\n } else if (normalizedSql.toLowerCase().includes('inner join')) {\n joinType = 'inner';\n }\n\n // 分割ON条件\n let onPart = joinPart.split(/\\s+on\\s+/i);\n let joinTableName = onPart[0].trim().split(/\\s+/)[0];\n let joinFields = onPart[1] ? onPart[1].trim() : '';\n result.push({\n index: 't' + (currentIndex + 1),\n type: joinType,\n joinTable: joinTableName,\n joinFiled: joinFields\n });\n }\n return result;\n }\n const sqlParseTable = o => {\n if (configData.form.executeSql && configData.form.executeSql.toLowerCase().indexOf(\"from\") === -1) {\n return;\n }\n let tableData = parseSqlToTables(configData.form.executeSql);\n if (o) {\n tableData[0].deleteWhere = o.wheres;\n }\n form.form.table = tableData;\n };\n function remoteMethod() {\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.get)(http, \"/online/getDBTableList\", {\n dbName: addOrEditRootData.form.dbName\n }).then(data => {\n dicData.joinTableDicData = data;\n });\n }\n function initDict() {\n for (const column of option.column) {\n if (column.dictCode) {\n column.dicData = dict.val(column.dictCode);\n }\n }\n }\n const emit = __emit; //声明 emits\n (0,vue__WEBPACK_IMPORTED_MODULE_3__.onMounted)(() => {\n remoteMethod();\n initDict();\n });\n __expose({\n setData,\n parseData,\n form\n });\n const __returned__ = {\n http,\n addOrEditRootData,\n dict,\n dicData,\n form,\n option,\n configData,\n parseData,\n setData,\n setTable,\n setSql,\n isSyncCurd,\n sync,\n syncTable,\n filedConfig,\n setFieldConfig,\n getTableNamesByFormSql,\n getTableComment,\n setFormTable,\n updateExecuteSql,\n filedConfigClose,\n setFieldEvent,\n syncCurd,\n parseSqlToTables,\n sqlParseTable,\n remoteMethod,\n initDict,\n emit,\n inject: vue__WEBPACK_IMPORTED_MODULE_3__.inject,\n reactive: vue__WEBPACK_IMPORTED_MODULE_3__.reactive,\n onMounted: vue__WEBPACK_IMPORTED_MODULE_3__.onMounted,\n ref: vue__WEBPACK_IMPORTED_MODULE_3__.ref,\n get get() {\n return _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.get;\n },\n get post() {\n return _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post;\n },\n get setArrayObjectKeyValue() {\n return _utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue;\n },\n get storeDict() {\n return _store_dict__WEBPACK_IMPORTED_MODULE_6__.storeDict;\n },\n get ElMessage() {\n return element_plus__WEBPACK_IMPORTED_MODULE_7__.ElMessage;\n },\n get sqlFormatter() {\n return (sql_formatter__WEBPACK_IMPORTED_MODULE_8___default());\n },\n FieldConfig: _views_table_add_or_edit_config_field_config_index_vue__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n LazyLoadSelect: _components_lazy_load_select_vue__WEBPACK_IMPORTED_MODULE_10__[\"default\"]\n };\n Object.defineProperty(__returned__, '__isScriptSetup', {\n enumerable: false,\n value: true\n });\n return __returned__;\n }\n});\n\n//# sourceURL=webpack://olp-table/./src/views/table/add-or-edit/config/base-config/index.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-124.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
831
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.find.js */ \"./node_modules/core-js/modules/es.iterator.find.js\");\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/utils/http/httpUtils */ \"./src/utils/http/httpUtils.js\");\n/* harmony import */ var _utils_object__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/utils/object */ \"./src/utils/object.js\");\n/* harmony import */ var _store_dict__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/store/dict */ \"./src/store/dict.js\");\n/* harmony import */ var element_plus__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! element-plus */ \"element-plus\");\n/* harmony import */ var element_plus__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(element_plus__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var sql_formatter__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! sql-formatter */ \"./node_modules/sql-formatter/lib/sqlFormatter.js\");\n/* harmony import */ var sql_formatter__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(sql_formatter__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _views_table_add_or_edit_config_field_config_index_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/views/table/add-or-edit/config/field-config/index.vue */ \"./src/views/table/add-or-edit/config/field-config/index.vue\");\n/* harmony import */ var _components_lazy_load_select_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/components/lazy-load-select.vue */ \"./src/components/lazy-load-select.vue\");\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n __name: 'index',\n emits: [\"emits\", 'updateTab'],\n setup(__props, {\n expose: __expose,\n emit: __emit\n }) {\n const http = (0,vue__WEBPACK_IMPORTED_MODULE_3__.inject)('http');\n const addOrEditRootData = (0,vue__WEBPACK_IMPORTED_MODULE_3__.inject)('addOrEditRootData');\n const dict = (0,_store_dict__WEBPACK_IMPORTED_MODULE_6__.storeDict)();\n const dicData = (0,vue__WEBPACK_IMPORTED_MODULE_3__.reactive)({\n joinFiledDicData: [{\n label: '内连接',\n value: 'join'\n }, {\n label: '左连接',\n value: 'left join'\n }, {\n label: '右连接',\n value: 'right join'\n }],\n joinTableDicData: []\n });\n const form = (0,vue__WEBPACK_IMPORTED_MODULE_3__.reactive)({\n form: {\n table: [{\n index: \"t1\",\n type: \"主表\",\n joinTable: \"\",\n joinFiled: \"/\",\n deleteWhere: 'id=${id}'\n }],\n executeSql: '',\n executeWhere: '',\n orderBy: ''\n }\n });\n const option = (0,vue__WEBPACK_IMPORTED_MODULE_3__.reactive)({\n submitBtn: false,\n emptyBtn: false,\n column: [\n /* {\r\n label: '转换驼峰', prop: 'hump', border: true, type: 'radio', value: '0', span: 7, dicData: [{\r\n label: '不转换', value: '0'\r\n }, {\r\n label: '转换', value: '1'\r\n },{\r\n label: '请求转换', value: '2'\r\n }],\r\n dictCode: 'converting_hump'\r\n },*/\n {\n label: '数据源类型',\n type: 'radio',\n span: 7,\n prop: 'definitionSql',\n border: true,\n value: '0',\n onChange: ({\n value\n }) => {\n if (value == '0') {\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', true, \"executeSql,where,table,orderBy\");\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', false, \"api,requestType\");\n } else if (value == '1') {\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', true, \"executeSql,where,orderBy\");\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', false, \"api,table,requestType\");\n } else {\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', true, \"api,requestType\");\n (0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue)(option.column, 'display', false, \"executeSql,where,table,orderBy\");\n }\n },\n dicData: [{\n label: '自动SQL',\n value: '0'\n }, {\n label: '手动SQL',\n value: '1'\n }, {\n label: 'API',\n value: '2'\n }],\n dictCode: 'tree_data_type'\n }, {\n label: '查询表格',\n prop: 'table',\n type: 'dynamic',\n span: 24,\n children: {\n align: 'center',\n minHeight: 100,\n maxHeight: 170,\n size: \"small\",\n headerAlign: 'center',\n rowAdd: done => {\n let obj = {\n index: \"t\" + (form.form.table.length + 1),\n type: \"join\",\n joinTable: \"\",\n joinFiled: \"t\" + form.form.table.length + \".=t\" + (form.form.table.length + 1) + \".\"\n };\n done(obj);\n },\n rowDel: row => {\n if (row.$index != 0) {\n setSql(row.$index);\n } else {\n element_plus__WEBPACK_IMPORTED_MODULE_7__.ElMessage.error(\"主表不能删除!\");\n }\n },\n column: [{\n width: 60,\n prop: \"index\",\n label: '序号'\n }, {\n label: '类型',\n prop: \"type\",\n width: 120,\n disabled: true,\n type: 'select'\n }, {\n label: '数据表',\n prop: \"joinTable\",\n type: 'select',\n dicData: []\n }, {\n label: 'on',\n prop: \"joinFiled\",\n type: 'input'\n }, {\n label: '删除条件',\n prop: \"deleteWhere\",\n width: 200,\n type: 'input'\n }]\n }\n }, {\n label: '执行SQL',\n display: true,\n type: 'textarea',\n maxRows: 7,\n span: 24,\n prop: 'executeSql'\n }, {\n label: 'where条件',\n display: true,\n type: 'input',\n span: 24,\n prop: 'executeWhere'\n }, {\n label: '排序',\n display: true,\n type: 'input',\n span: 24,\n prop: 'orderBy'\n }, {\n label: '默认参数',\n type: 'input',\n span: 24,\n prop: 'parameterDefault'\n }, {\n label: 'API',\n display: true,\n type: 'input',\n span: 24,\n prop: 'api'\n }, {\n label: '请求类型',\n prop: 'requestType',\n border: true,\n type: 'radio',\n value: '0',\n span: 6,\n dicData: [],\n dictCode: 'request_type'\n }]\n });\n const configData = (0,vue__WEBPACK_IMPORTED_MODULE_3__.inject)('configData');\n function parseData(data) {\n if (form.form.definitionSql == '1') {\n data.mainTable = form.form.mainTable;\n } else {\n data.mainTable = form.form.table[0].joinTable;\n }\n data.definitionSql = form.form.definitionSql;\n data.executeSql = form.form.executeSql;\n data.orderBy = form.form.orderBy;\n data.groupBy = form.form.groupBy;\n data.executeWhere = form.form.executeWhere;\n data.parameterDefault = form.form.parameterDefault;\n data.hump = form.form.hump;\n data.api = form.form.api;\n data.requestType = form.form.requestType;\n if (form.form.definitionSql == 0) {\n if (form.form.table[0].deleteWhere) {\n data.deleteWhere = {\n wheres: form.form.table[0].deleteWhere.trim(),\n tableName: form.form.table[0].joinTable\n };\n } else {\n delete data.deleteWhere;\n }\n }\n }\n function setData(f) {\n form.form.definitionSql = f;\n form.form.hump = f.hump;\n form.form.mainTable = f.mainTable;\n form.form.executeSql = f.executeSql;\n form.form.orderBy = f.orderBy;\n form.form.api = f.api;\n form.form.requestType = f.requestType;\n form.form.executeWhere = f.executeWhere;\n form.form.parameterDefault = f.parameterDefault;\n form.form.definitionSql = f.definitionSql;\n if (form.form.definitionSql == 0) {\n sqlParseTable(f.deleteWhere);\n }\n }\n function setTable() {\n let promise = [];\n for (let i = 0; i < form.form.table.length; i++) {\n promise.push((0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.get)(http, \"/online/getDBTableColumnList/\" + addOrEditRootData.form.dbName, {\n tableName: form.form.table[i].joinTable\n }));\n }\n Promise.all(promise).then(result => {\n for (let i = 0; i < result.length; i++) {\n form.form.table[i]['columnList'] = result[i];\n }\n setSql();\n });\n }\n function setSql(index, seq) {\n if (seq != undefined && seq != 0) {\n let arr = form.form.table.find(item => {\n return item.index == seq;\n });\n if (!arr || !arr.joinTable) {\n return;\n }\n }\n if (index != undefined && index != 0) {\n form.form.table.splice(index, 1);\n }\n let sqlTableOn = form.form.table[0].joinTable + \" t1 \";\n let sqlFiled = \"\";\n let tableColumns = [];\n let sort = 0;\n let mapFiled = {};\n for (let i = 0; i < form.form.table.length; i++) {\n if (i === index) {\n continue;\n }\n let obj = form.form.table[i];\n for (let j = 0; j < obj.columnList.length; j++) {\n let column = obj.columnList[j];\n if (column.checked == 0) {\n continue;\n }\n if (sqlFiled.length != 0) {\n sqlFiled += \",\";\n }\n if (mapFiled[column.column_name] !== undefined) {\n mapFiled[column.column_name]++;\n } else {\n mapFiled[column.column_name] = 0;\n }\n sort++;\n let asName = mapFiled[column.column_name] === 0 ? column.column_name : obj.index + \"_\" + column.column_name;\n sqlFiled += obj.index + \".\" + column.column_name + \" AS \" + asName;\n let column_name = column.column_name;\n let column_comment = column.column_comment ? column.column_comment : column_name;\n tableColumns.push({\n sort: sort,\n tableField: column_name,\n field: column_name,\n title: column_comment,\n label: column_comment,\n visible: column.visible,\n display: 1,\n asName: asName\n });\n }\n if (i != 0) {\n sqlTableOn += \" \" + obj.type + \" \" + obj.joinTable + \" \" + obj.index + \" on \" + obj.joinFiled;\n }\n }\n for (let tableColumn of tableColumns) {\n let add = true;\n for (let c of configData.tableColumn) {\n if (c.field == tableColumn.field) {\n add = false;\n }\n }\n if (add) {\n configData.tableColumn.push(tableColumn);\n }\n }\n for (let i = 0; i < configData.tableColumn.length; i++) {\n let remove = true;\n for (let tableColumn of tableColumns) {\n if (configData.tableColumn[i].field == tableColumn.field) {\n remove = false;\n }\n }\n if (remove) {\n configData.tableColumn.splice(i, 1);\n }\n }\n form.form.executeSql = \"select \" + sqlFiled + \" from \" + sqlTableOn;\n }\n const isSyncCurd = (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)(false);\n const sync = (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)(false);\n function syncTable() {\n emit('loading', true);\n configData.form.executeSql = form.form.executeSql;\n configData.form.executeWhere = form.form.where;\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post)(http, \"/online/getTableFiled\", {\n sql: form.form.executeSql,\n where: form.form.where,\n definitionSql: form.form.definitionSql,\n dbName: addOrEditRootData.form.dbName,\n uuid: configData.form.uuid\n }, undefined, false).then(data => {\n emit(\"updateTable\", data.data);\n isSyncCurd.value = form.form?.definitionSql == 0 && form.form?.table?.length == 1;\n if (isSyncCurd.value && sync.value) {\n emit(\"updateCurd\");\n }\n setFieldConfig();\n }).finally(() => {\n emit('loading', false);\n });\n }\n const filedConfig = (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)();\n function setFieldConfig(filedConf) {\n if (form.form.definitionSql != 0) {\n return;\n }\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post)(http, \"/online/getTableSetFiled\", {\n sql: form.form.executeSql,\n where: form.form.where,\n dbName: addOrEditRootData.form.dbName,\n definitionSql: form.form.definitionSql,\n uuid: configData.form.uuid\n }, false, false).then(({\n data\n }) => {\n setFormTable(data);\n if (filedConf) {\n filedConfig.value.init(form.form.table);\n }\n });\n }\n function getTableNamesByFormSql() {\n let formSql = form.form.executeSql.substring(form.form.executeSql.indexOf('from') + 4);\n let tableNames = [];\n for (const join of formSql.split('join')) {\n tableNames.push(join);\n }\n return tableNames;\n }\n function getTableComment(key) {\n for (const item of dicData.joinTableDicData) {\n if (item.value == key) return item.label;\n }\n }\n function setFormTable(data) {\n let tableNames = getTableNamesByFormSql();\n let tables = [];\n for (const key of Object.keys(data)) {\n let table = {\n index: 't1',\n type: '主表',\n joinTable: key,\n joinFiled: '/',\n deleteWhere: '',\n columnList: [],\n tableComment: getTableComment(key)\n };\n table.columnList = Object.values(data[key]);\n tables.push(table);\n }\n form.form.table = [];\n for (let i = 0; i < tableNames.length; i++) {\n const tableName = tableNames[i];\n for (const table of tables) {\n if (tableName.includes(table.joinTable)) {\n if (i == 0) {\n table.deleteWhere = 'id=${id}';\n table.mainTable = table.joinTable;\n }\n if (i != 0) {\n table.index = 't' + (i + 1);\n table.type = 'join';\n let joinFiled = tableName.substring(tableName.indexOf('on') + 2).replace(/[\\n\\t\\s]+/g, '');\n if (tableNames[i - 1].includes('left')) {\n table.type = 'left join';\n joinFiled = joinFiled.replace('left', '');\n }\n if (tableNames[i - 1].includes('right')) {\n table.type = 'right join';\n joinFiled = joinFiled.replace('right', '');\n }\n table.joinFiled = joinFiled;\n }\n form.form.table.push(table);\n break;\n }\n }\n }\n }\n function updateExecuteSql(v) {\n if (v === 0) {\n form.form.executeSql = sql_formatter__WEBPACK_IMPORTED_MODULE_8___default().format(form.form.executeSql, {\n language: 'sql',\n keywordCase: 'upper',\n indentStyle: 'tabularLeft'\n });\n } else {\n form.form.executeSql = form.form.executeSql.replace(/\\s+/g, \" \");\n }\n }\n function filedConfigClose(data) {\n if (!data) return;\n for (let j = 0; j < form.form.table.length; j++) {\n let obj = form.form.table[j];\n if (Object.keys(data).includes(obj.index)) {\n form.form.table[j].columnList = data[obj.index];\n }\n }\n setSql();\n }\n function setFieldEvent(row) {\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post)(http, \"/online/getTableSetFiled\", {\n sql: form.form.executeSql,\n definitionSql: form.form.definitionSql,\n dbName: addOrEditRootData.form.dbName,\n where: form.form.where,\n uuid: configData.form.uuid\n }, undefined, false).then(data => {\n row.columnList = Object.values(data.data[row.joinTable]);\n filedConfig.value.init(row);\n });\n }\n\n /**\r\n * 一键同步CURD\r\n */\n const syncCurd = () => {\n sync.value = true;\n syncTable();\n };\n function parseSqlToTables(sql) {\n // 标准化SQL,去除多余空格和换行\n let normalizedSql = sql.replace(/[\\n\\r\\s]+/g, ' ').trim();\n\n // 分割FROM后面的部分\n let fromPart = normalizedSql.split(/from/i)[1];\n let result = [{\n index: 't1',\n type: '主表',\n joinTable: '',\n joinFiled: '/'\n }];\n if (!fromPart) return result;\n let currentIndex = 1;\n\n // 分割所有JOIN(包括LEFT JOIN, RIGHT JOIN等)\n let parts = fromPart.split(/\\s+(?:left\\s+)?(?:right\\s+)?(?:inner\\s+)?join\\s+/i);\n\n // 处理主表\n let mainTablePart = parts[0].trim();\n let mainTableName = mainTablePart.split(/\\s+/)[0];\n result[0].joinTable = mainTableName;\n\n // 处理关联表\n for (let i = 1; i < parts.length; i++) {\n currentIndex++;\n let joinPart = parts[i].trim();\n\n // 获取JOIN类型\n let joinType = 'left';\n if (normalizedSql.toLowerCase().includes('right join')) {\n joinType = 'right';\n } else if (normalizedSql.toLowerCase().includes('inner join')) {\n joinType = 'inner';\n }\n\n // 分割ON条件\n let onPart = joinPart.split(/\\s+on\\s+/i);\n let joinTableName = onPart[0].trim().split(/\\s+/)[0];\n let joinFields = onPart[1] ? onPart[1].trim() : '';\n result.push({\n index: 't' + (currentIndex + 1),\n type: joinType,\n joinTable: joinTableName,\n joinFiled: joinFields\n });\n }\n return result;\n }\n const sqlParseTable = o => {\n if (configData.form.executeSql && configData.form.executeSql.toLowerCase().indexOf(\"from\") === -1) {\n return;\n }\n let tableData = parseSqlToTables(configData.form.executeSql);\n if (o) {\n tableData[0].deleteWhere = o.wheres;\n }\n form.form.table = tableData;\n };\n function remoteMethod() {\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.get)(http, \"/online/getDBTableList\", {\n dbName: addOrEditRootData.form.dbName\n }).then(data => {\n dicData.joinTableDicData = data;\n });\n }\n function initDict() {\n for (const column of option.column) {\n if (column.dictCode) {\n column.dicData = dict.val(column.dictCode);\n }\n }\n }\n const emit = __emit; //声明 emits\n (0,vue__WEBPACK_IMPORTED_MODULE_3__.onMounted)(() => {\n remoteMethod();\n initDict();\n });\n __expose({\n setData,\n parseData,\n form\n });\n const __returned__ = {\n http,\n addOrEditRootData,\n dict,\n dicData,\n form,\n option,\n configData,\n parseData,\n setData,\n setTable,\n setSql,\n isSyncCurd,\n sync,\n syncTable,\n filedConfig,\n setFieldConfig,\n getTableNamesByFormSql,\n getTableComment,\n setFormTable,\n updateExecuteSql,\n filedConfigClose,\n setFieldEvent,\n syncCurd,\n parseSqlToTables,\n sqlParseTable,\n remoteMethod,\n initDict,\n emit,\n inject: vue__WEBPACK_IMPORTED_MODULE_3__.inject,\n reactive: vue__WEBPACK_IMPORTED_MODULE_3__.reactive,\n onMounted: vue__WEBPACK_IMPORTED_MODULE_3__.onMounted,\n ref: vue__WEBPACK_IMPORTED_MODULE_3__.ref,\n get get() {\n return _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.get;\n },\n get post() {\n return _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_4__.post;\n },\n get setArrayObjectKeyValue() {\n return _utils_object__WEBPACK_IMPORTED_MODULE_5__.setArrayObjectKeyValue;\n },\n get storeDict() {\n return _store_dict__WEBPACK_IMPORTED_MODULE_6__.storeDict;\n },\n get ElMessage() {\n return element_plus__WEBPACK_IMPORTED_MODULE_7__.ElMessage;\n },\n get sqlFormatter() {\n return (sql_formatter__WEBPACK_IMPORTED_MODULE_8___default());\n },\n FieldConfig: _views_table_add_or_edit_config_field_config_index_vue__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n LazyLoadSelect: _components_lazy_load_select_vue__WEBPACK_IMPORTED_MODULE_10__[\"default\"]\n };\n Object.defineProperty(__returned__, '__isScriptSetup', {\n enumerable: false,\n value: true\n });\n return __returned__;\n }\n});\n\n//# sourceURL=webpack://olp-table/./src/views/table/add-or-edit/config/base-config/index.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-124.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
832
832
 
833
833
  /***/ }),
834
834
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "olp-table",
3
- "version": "7.1.4",
3
+ "version": "7.1.5",
4
4
  "main": "olp-table.common.js",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1"