liyu-pc-base 1.0.921 → 1.0.925
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.
- package/dist/{FieldRender-BOg7nm5z.js → FieldRender-DnOLSXTl.js} +1 -1
- package/dist/{FieldRender2-_MtcDkI5.js → FieldRender2-CvxGe238.js} +2 -2
- package/dist/{FormRender3-BtY9d91e.js → FormRender3-CAxOQgue.js} +1 -1
- package/dist/{RemoteSelectPro-CcWTS4f6.js → RemoteSelectPro-CcL_vU1K.js} +1 -1
- package/dist/{SearchRender-ByarFel1.js → SearchRender-Dr_qnvZM.js} +1 -1
- package/dist/components/index.js +7 -7
- package/dist/{dbViewConfig-RGSyUx3F.js → dbViewConfig-BF0QZ_mT.js} +1 -1
- package/dist/{detailTablePro-CqcVbn8O.js → detailTablePro-DxgfGYN3.js} +1 -1
- package/dist/index.js +1 -1
- package/dist/liyu-pc-base.css +1 -1
- package/dist/{tableModal-DSKuV-hn.js → tableModal-DZE5wntG.js} +1 -1
- package/dist/{tablePageHost-B_BOlBNA.js → tablePageHost-hE_1hQv4.js} +82 -44
- package/dist/{tablePro-IAcxxAGI.js → tablePro-t2yDX9oW.js} +16 -11
- package/package.json +1 -1
- package/dist/AttributeNomTable-DHED22ju.js.map +0 -1
- package/dist/AttributeTable-muxdKpWW.js.map +0 -1
- package/dist/FieldRender-BOg7nm5z.js.map +0 -1
- package/dist/FieldRender2-_MtcDkI5.js.map +0 -1
- package/dist/FormRender3-BtY9d91e.js.map +0 -1
- package/dist/ImportExcelModal-Dds857L2.js.map +0 -1
- package/dist/JsonObj-CmylW4Or.js.map +0 -1
- package/dist/JsonStr-JwOPdAYW.js.map +0 -1
- package/dist/RemoteCascader-B2ytkZp7.js.map +0 -1
- package/dist/RemoteFilterSelect-BthY6Fyt.js.map +0 -1
- package/dist/RemoteModal-Dqy32RFN.js.map +0 -1
- package/dist/RemoteSelect-27xLYvyg.js.map +0 -1
- package/dist/RemoteSelectPro-CcWTS4f6.js.map +0 -1
- package/dist/RemoteTable-D_12PvNS.js.map +0 -1
- package/dist/RemoteTable2-DF7gWHYf.js.map +0 -1
- package/dist/RemoteText-DwRLI0xq.js.map +0 -1
- package/dist/RemoteTreeSelectPro-CXMOariR.js.map +0 -1
- package/dist/SearchRender-ByarFel1.js.map +0 -1
- package/dist/TinymceEditor-waI-dlC5.js.map +0 -1
- package/dist/aiGenModel-C9E1ahu8.js.map +0 -1
- package/dist/api/api-model.js.map +0 -1
- package/dist/api/typing.js.map +0 -1
- package/dist/batchCreateUser-B4zAXSR6.js.map +0 -1
- package/dist/boldenText-Bv8Zo7Vh.js.map +0 -1
- package/dist/components/FormRender/utils.js.map +0 -1
- package/dist/components/gridPage/utils.js.map +0 -1
- package/dist/components/index.js.map +0 -1
- package/dist/components/remotePages/utils.js.map +0 -1
- package/dist/dbDataSourceConfig-Hj90tvTR.js.map +0 -1
- package/dist/dbViewConfig-RGSyUx3F.js.map +0 -1
- package/dist/default-DmCqrYQi.js.map +0 -1
- package/dist/detailTablePro-CqcVbn8O.js.map +0 -1
- package/dist/exceljs.min-BPhBd8yF.js.map +0 -1
- package/dist/function-BhYSb8ls.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/init-plugin-CvgtEpwY.js.map +0 -1
- package/dist/lodash-CMVwnWxD.js.map +0 -1
- package/dist/md5-WIoeWMjT.js.map +0 -1
- package/dist/modal-tools-CrXdI5sg.js.map +0 -1
- package/dist/props-util-D7nkeN4W.js.map +0 -1
- package/dist/remotePages-CvjMLjTh.js.map +0 -1
- package/dist/role-manage-C7O8b2SF.js.map +0 -1
- package/dist/syncDataSourceConfig-OZ2mJCJs.js.map +0 -1
- package/dist/syncExportRawData-Dpi-VJuu.js.map +0 -1
- package/dist/syncModelTypeConfig-B2vV_kKb.js.map +0 -1
- package/dist/tableModal-DSKuV-hn.js.map +0 -1
- package/dist/tablePageHost-B_BOlBNA.js.map +0 -1
- package/dist/tablePro-IAcxxAGI.js.map +0 -1
- package/dist/utils/excel.js.map +0 -1
- package/dist/utils/hooks/useFetchData.js.map +0 -1
- package/dist/utils/hooks/useTableColumn.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":[],"sources":["../../../src/components/remotePages/utils.ts"],"sourcesContent":["export const getUrl = (modalType: string, type: any) => {\n const list = modalType.split('-');\n if (list.length >= 2) {\n return '/' + list[0] + '/' + type[0] + list[1] + type[1];\n } else {\n console.error(`modalType:${modalType}结构错误`);\n }\n};\nexport const getApiPermission = (modalType: string, type: any) => {\n const list = modalType.split('-');\n if (list.length >= 2) {\n const model_and_suffix = modalType.replace(/^[^-]*-/, '');\n return list[0] + '/' + type + model_and_suffix;\n } else {\n console.error(`modalType:${modalType}结构错误`);\n }\n};\n"],"mappings":";AAAA,IAAa,KAAU,GAAmB,MAAc;CACtD,IAAM,IAAO,EAAU,MAAM,GAAG;CAChC,IAAI,EAAK,UAAU,GACjB,OAAO,MAAM,EAAK,KAAK,MAAM,EAAK,KAAK,EAAK,KAAK,EAAK;CAEtD,QAAQ,MAAM,aAAa,EAAU,KAAK;AAE9C,GACa,KAAoB,GAAmB,MAAc;CAChE,IAAM,IAAO,EAAU,MAAM,GAAG;CAChC,IAAI,EAAK,UAAU,GAAG;EACpB,IAAM,IAAmB,EAAU,QAAQ,WAAW,EAAE;EACxD,OAAO,EAAK,KAAK,MAAM,IAAO;CAChC,OACE,QAAQ,MAAM,aAAa,EAAU,KAAK;AAE9C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dbDataSourceConfig-Hj90tvTR.js","names":[],"sources":["../src/components/dbView/dbDataSourceConfig.vue","../src/components/dbView/dbDataSourceConfig.vue"],"sourcesContent":["<template>\n <a-modal\n :title=\"title\"\n width=\"880px\"\n :open=\"open\"\n :bodyStyle=\"{ maxHeight: '78vh', overflowY: 'auto', padding: '0 24px' }\"\n :confirm-loading=\"loading\"\n cancel-text=\"取消\"\n ok-text=\"确定\"\n centered\n destroy-on-close\n @cancel=\"handleCancel\"\n @ok=\"handleOk\"\n >\n <a-form\n ref=\"formRef\"\n :model=\"model\"\n layout=\"vertical\"\n size=\"small\"\n >\n <a-divider orientation=\"left\">基本信息</a-divider>\n <a-row :gutter=\"16\">\n <a-col :span=\"12\">\n <a-form-item\n label=\"数据源名称\"\n name=\"name\"\n :rules=\"rules.name\"\n >\n <a-input\n v-model:value=\"model.name\"\n placeholder=\"请填写数据源名称\"\n allow-clear\n />\n </a-form-item>\n </a-col>\n <a-col :span=\"12\">\n <a-form-item\n label=\"数据库类型\"\n name=\"db_type\"\n :rules=\"rules.db_type\"\n >\n <a-select\n v-model:value=\"model.db_type\"\n placeholder=\"请选择\"\n >\n <a-select-option\n v-for=\"opt in dbTypeOptions\"\n :key=\"opt.value\"\n :value=\"opt.value\"\n >\n {{ opt.label }}\n </a-select-option>\n </a-select>\n </a-form-item>\n </a-col>\n </a-row>\n\n <a-divider orientation=\"left\">数据库连接信息</a-divider>\n <a-row :gutter=\"16\">\n <a-col :span=\"12\">\n <a-form-item\n label=\"数据库主机\"\n name=\"db_host\"\n :rules=\"rules.db_host\"\n >\n <a-input\n v-model:value=\"model.db_host\"\n placeholder=\"如 127.0.0.1\"\n allow-clear\n />\n </a-form-item>\n </a-col>\n <a-col :span=\"12\">\n <a-form-item\n label=\"数据库端口\"\n name=\"db_port\"\n :rules=\"rules.db_port\"\n >\n <a-input-number\n v-model:value=\"model.db_port\"\n style=\"width: 100%\"\n :min=\"1\"\n :max=\"65535\"\n placeholder=\"如 3306\"\n />\n </a-form-item>\n </a-col>\n <a-col :span=\"12\">\n <a-form-item\n label=\"数据库用户\"\n name=\"db_user\"\n :rules=\"rules.db_user\"\n >\n <a-input\n v-model:value=\"model.db_user\"\n placeholder=\"如 root\"\n allow-clear\n />\n </a-form-item>\n </a-col>\n <a-col :span=\"12\">\n <a-form-item\n label=\"数据库密码\"\n name=\"db_password\"\n >\n <a-input-password\n v-model:value=\"model.db_password\"\n placeholder=\"修改时留空则不修改密码\"\n allow-clear\n autocomplete=\"new-password\"\n />\n </a-form-item>\n </a-col>\n <a-col :span=\"12\">\n <a-form-item\n :label=\"db_name_field_lable\"\n name=\"db_name\"\n :rules=\"rules.db_name\"\n >\n <a-input\n v-model:value=\"model.db_name\"\n placeholder=\"如 my_db\"\n allow-clear\n />\n </a-form-item>\n </a-col>\n <a-col\n v-if=\"showSchemaField\"\n :span=\"12\"\n >\n <a-form-item label=\"默认Schema\">\n <a-input\n v-model:value=\"model.db_schema\"\n allow-clear\n />\n </a-form-item>\n </a-col>\n </a-row>\n <a-form-item\n label=\"数据库选项\"\n name=\"db_options\"\n >\n <JsonStr\n v-model:value=\"model.db_options\"\n placeholder='可选,JSON 对象,如 {\"charset\":\"utf8mb4\"}'\n />\n </a-form-item>\n </a-form>\n </a-modal>\n</template>\n\n<script setup lang=\"ts\">\nimport { cloneDeep } from 'lodash';\nimport { message } from 'ant-design-vue';\nimport { computed, onMounted, reactive, ref } from 'vue';\nimport { event_obj } from 'liyu-pc-base/init-plugin';\nimport { getApiData } from 'liyu-pc-base/api/api-model';\nimport { useUserStore } from 'liyu-pc-base/init-plugin';\nimport JsonStr from 'liyu-pc-base/components/FormRender/JsonStr/index.vue';\n\n/* ★ v29.4:db_view 的「数据源管理」新增/编辑弹窗组件。\n 移植 lysync syncDataSourceConfig,差异:DbDataSource 无 source_type/custom_func\n (全部是数据库型);db_type 多 postgres;db_schema 是独立字段(非 db_options.schema);\n 详情/提交走 lybase 通用接口 get_/create_/update_db_data_source。\n 连接测试不在此弹窗内 —— 由列表行【连接测试】菜单按钮(check_connect)承担。 */\n\ninterface Props {\n title: string;\n record: any;\n}\nconst props = defineProps<Props>();\nconst emit = defineEmits(['cancel', 'ok']);\n\nconst formRef = ref<any>(null);\nconst loading = ref(false);\nconst open = ref(true);\nconst form_type = ref('create');\nconst userStore = useUserStore();\nconst current_org = userStore.currentOrg;\nconst db_name_field_lable = computed(() => {\n return model.value.db_type === 'oracle' ? 'SID/服务名' : '数据库名称';\n});\n/* oracle / postgres 有 schema 概念,显示独立字段 */\nconst showSchemaField = computed(() => ['oracle', 'postgres'].includes(model.value.db_type));\n\nconst dbTypeOptions = [\n { value: 'mysql', label: 'MySQL' },\n { value: 'tsql', label: 'SQL Server' },\n { value: 'oracle', label: 'Oracle' },\n { value: 'postgres', label: 'PostgreSQL' },\n];\n\nconst model = ref<any>({\n name: undefined,\n db_type: 'mysql',\n db_host: undefined,\n db_port: undefined,\n db_user: undefined,\n db_password: undefined,\n db_name: undefined,\n db_schema: undefined,\n db_options: {},\n});\n\nconst rules = reactive<any>({\n name: [{ required: true, message: '请填写数据源名称' }],\n db_type: [{ required: true, message: '请选择数据库类型' }],\n db_host: [{ required: true, message: '请填写数据库主机' }],\n db_port: [{ required: true, message: '请填写数据库端口' }],\n db_user: [{ required: true, message: '请填写数据库用户' }],\n db_name: [{ required: true, message: '请填写数据库名称' }],\n});\n\n/* 兼容 getApiData 可能的返回结构(直接对象 或 {data:{...}}) */\nconst extractData = (res: any) => {\n if (res && typeof res === 'object' && !Array.isArray(res) && res.data !== undefined)\n return res.data;\n return res;\n};\n\n/* 编辑:调用公共项目提供的详情接口(<app_flag>/get_<model_name>,即 get_basemodel)\n 获取完整 DbDataSource 记录。不依赖列表行数据(hide_json 剔除了 db_password,\n 密码不回显,留空表示不修改)。参数名为 <model_name>_id,即 db_data_source_id。 */\nconst loadDetail = async (id: any) => {\n const res = await getApiData(\n { db_data_source_id: id, org_id: current_org?.id },\n `${props.record.model_app}/get_db_data_source`,\n );\n return extractData(res) || {};\n};\n\n/* 构建提交数据:始终 cloneDeep(model.value),兜底默认值 */\nconst buildPayload = () => {\n const payload: any = cloneDeep(model.value);\n payload.update_field_list = [\n 'name',\n 'db_type',\n 'db_host',\n 'db_port',\n 'db_user',\n 'db_password',\n 'db_name',\n 'db_schema',\n 'db_options',\n ];\n // 编辑时密码留空则不修改:删除字段值,并从 update_field_list 中剔除\n if (!payload.db_password && form_type.value === 'edit') {\n delete payload.db_password;\n payload.update_field_list = payload.update_field_list.filter(\n (k: string) => k !== 'db_password',\n );\n }\n return payload;\n};\n\n/* 提交:URL 遵循 /{app_flag}/create_{model} 与 /{app_flag}/update_{model} */\nconst handleOk = async () => {\n try {\n await formRef.value.validate();\n const payload = buildPayload();\n payload.db_data_source_id = props.record.id;\n const url =\n form_type.value === 'edit'\n ? `${props.record.model_app}/update_db_data_source`\n : `${props.record.model_app}/create_db_data_source`;\n if (form_type.value === 'edit') payload.id = props.record.id;\n loading.value = true;\n await getApiData({ ...payload, org_id: current_org?.id }, url);\n message.success('操作成功');\n event_obj()?.emit('refresh');\n emit('ok');\n } catch (error) {\n // 校验失败或接口异常:保持弹窗打开\n } finally {\n loading.value = false;\n }\n};\nconst handleCancel = () => emit('cancel');\n\n/* 初始化编辑:先调详情接口拿完整记录,再填充 */\nconst initForEdit = async () => {\n const id = props.record?.id;\n const record = (id != null ? await loadDetail(id) : props.record) || {};\n model.value = {\n name: record.name || '',\n db_type: record.db_type || 'mysql',\n db_host: record.db_host || undefined,\n db_port: record.db_port ?? undefined,\n db_user: record.db_user || undefined,\n db_password: undefined, // 密码不回显,留空表示不修改\n db_name: record.db_name || undefined,\n db_schema: record.db_schema || undefined,\n db_options: record.db_options,\n };\n};\n\nonMounted(async () => {\n if (props.record?.form_type) form_type.value = props.record.form_type;\n if (form_type.value === 'edit') await initForEdit();\n});\n</script>\n\n<style scoped lang=\"less\">\n</style>\n","<template>\n <a-modal\n :title=\"title\"\n width=\"880px\"\n :open=\"open\"\n :bodyStyle=\"{ maxHeight: '78vh', overflowY: 'auto', padding: '0 24px' }\"\n :confirm-loading=\"loading\"\n cancel-text=\"取消\"\n ok-text=\"确定\"\n centered\n destroy-on-close\n @cancel=\"handleCancel\"\n @ok=\"handleOk\"\n >\n <a-form\n ref=\"formRef\"\n :model=\"model\"\n layout=\"vertical\"\n size=\"small\"\n >\n <a-divider orientation=\"left\">基本信息</a-divider>\n <a-row :gutter=\"16\">\n <a-col :span=\"12\">\n <a-form-item\n label=\"数据源名称\"\n name=\"name\"\n :rules=\"rules.name\"\n >\n <a-input\n v-model:value=\"model.name\"\n placeholder=\"请填写数据源名称\"\n allow-clear\n />\n </a-form-item>\n </a-col>\n <a-col :span=\"12\">\n <a-form-item\n label=\"数据库类型\"\n name=\"db_type\"\n :rules=\"rules.db_type\"\n >\n <a-select\n v-model:value=\"model.db_type\"\n placeholder=\"请选择\"\n >\n <a-select-option\n v-for=\"opt in dbTypeOptions\"\n :key=\"opt.value\"\n :value=\"opt.value\"\n >\n {{ opt.label }}\n </a-select-option>\n </a-select>\n </a-form-item>\n </a-col>\n </a-row>\n\n <a-divider orientation=\"left\">数据库连接信息</a-divider>\n <a-row :gutter=\"16\">\n <a-col :span=\"12\">\n <a-form-item\n label=\"数据库主机\"\n name=\"db_host\"\n :rules=\"rules.db_host\"\n >\n <a-input\n v-model:value=\"model.db_host\"\n placeholder=\"如 127.0.0.1\"\n allow-clear\n />\n </a-form-item>\n </a-col>\n <a-col :span=\"12\">\n <a-form-item\n label=\"数据库端口\"\n name=\"db_port\"\n :rules=\"rules.db_port\"\n >\n <a-input-number\n v-model:value=\"model.db_port\"\n style=\"width: 100%\"\n :min=\"1\"\n :max=\"65535\"\n placeholder=\"如 3306\"\n />\n </a-form-item>\n </a-col>\n <a-col :span=\"12\">\n <a-form-item\n label=\"数据库用户\"\n name=\"db_user\"\n :rules=\"rules.db_user\"\n >\n <a-input\n v-model:value=\"model.db_user\"\n placeholder=\"如 root\"\n allow-clear\n />\n </a-form-item>\n </a-col>\n <a-col :span=\"12\">\n <a-form-item\n label=\"数据库密码\"\n name=\"db_password\"\n >\n <a-input-password\n v-model:value=\"model.db_password\"\n placeholder=\"修改时留空则不修改密码\"\n allow-clear\n autocomplete=\"new-password\"\n />\n </a-form-item>\n </a-col>\n <a-col :span=\"12\">\n <a-form-item\n :label=\"db_name_field_lable\"\n name=\"db_name\"\n :rules=\"rules.db_name\"\n >\n <a-input\n v-model:value=\"model.db_name\"\n placeholder=\"如 my_db\"\n allow-clear\n />\n </a-form-item>\n </a-col>\n <a-col\n v-if=\"showSchemaField\"\n :span=\"12\"\n >\n <a-form-item label=\"默认Schema\">\n <a-input\n v-model:value=\"model.db_schema\"\n allow-clear\n />\n </a-form-item>\n </a-col>\n </a-row>\n <a-form-item\n label=\"数据库选项\"\n name=\"db_options\"\n >\n <JsonStr\n v-model:value=\"model.db_options\"\n placeholder='可选,JSON 对象,如 {\"charset\":\"utf8mb4\"}'\n />\n </a-form-item>\n </a-form>\n </a-modal>\n</template>\n\n<script setup lang=\"ts\">\nimport { cloneDeep } from 'lodash';\nimport { message } from 'ant-design-vue';\nimport { computed, onMounted, reactive, ref } from 'vue';\nimport { event_obj } from 'liyu-pc-base/init-plugin';\nimport { getApiData } from 'liyu-pc-base/api/api-model';\nimport { useUserStore } from 'liyu-pc-base/init-plugin';\nimport JsonStr from 'liyu-pc-base/components/FormRender/JsonStr/index.vue';\n\n/* ★ v29.4:db_view 的「数据源管理」新增/编辑弹窗组件。\n 移植 lysync syncDataSourceConfig,差异:DbDataSource 无 source_type/custom_func\n (全部是数据库型);db_type 多 postgres;db_schema 是独立字段(非 db_options.schema);\n 详情/提交走 lybase 通用接口 get_/create_/update_db_data_source。\n 连接测试不在此弹窗内 —— 由列表行【连接测试】菜单按钮(check_connect)承担。 */\n\ninterface Props {\n title: string;\n record: any;\n}\nconst props = defineProps<Props>();\nconst emit = defineEmits(['cancel', 'ok']);\n\nconst formRef = ref<any>(null);\nconst loading = ref(false);\nconst open = ref(true);\nconst form_type = ref('create');\nconst userStore = useUserStore();\nconst current_org = userStore.currentOrg;\nconst db_name_field_lable = computed(() => {\n return model.value.db_type === 'oracle' ? 'SID/服务名' : '数据库名称';\n});\n/* oracle / postgres 有 schema 概念,显示独立字段 */\nconst showSchemaField = computed(() => ['oracle', 'postgres'].includes(model.value.db_type));\n\nconst dbTypeOptions = [\n { value: 'mysql', label: 'MySQL' },\n { value: 'tsql', label: 'SQL Server' },\n { value: 'oracle', label: 'Oracle' },\n { value: 'postgres', label: 'PostgreSQL' },\n];\n\nconst model = ref<any>({\n name: undefined,\n db_type: 'mysql',\n db_host: undefined,\n db_port: undefined,\n db_user: undefined,\n db_password: undefined,\n db_name: undefined,\n db_schema: undefined,\n db_options: {},\n});\n\nconst rules = reactive<any>({\n name: [{ required: true, message: '请填写数据源名称' }],\n db_type: [{ required: true, message: '请选择数据库类型' }],\n db_host: [{ required: true, message: '请填写数据库主机' }],\n db_port: [{ required: true, message: '请填写数据库端口' }],\n db_user: [{ required: true, message: '请填写数据库用户' }],\n db_name: [{ required: true, message: '请填写数据库名称' }],\n});\n\n/* 兼容 getApiData 可能的返回结构(直接对象 或 {data:{...}}) */\nconst extractData = (res: any) => {\n if (res && typeof res === 'object' && !Array.isArray(res) && res.data !== undefined)\n return res.data;\n return res;\n};\n\n/* 编辑:调用公共项目提供的详情接口(<app_flag>/get_<model_name>,即 get_basemodel)\n 获取完整 DbDataSource 记录。不依赖列表行数据(hide_json 剔除了 db_password,\n 密码不回显,留空表示不修改)。参数名为 <model_name>_id,即 db_data_source_id。 */\nconst loadDetail = async (id: any) => {\n const res = await getApiData(\n { db_data_source_id: id, org_id: current_org?.id },\n `${props.record.model_app}/get_db_data_source`,\n );\n return extractData(res) || {};\n};\n\n/* 构建提交数据:始终 cloneDeep(model.value),兜底默认值 */\nconst buildPayload = () => {\n const payload: any = cloneDeep(model.value);\n payload.update_field_list = [\n 'name',\n 'db_type',\n 'db_host',\n 'db_port',\n 'db_user',\n 'db_password',\n 'db_name',\n 'db_schema',\n 'db_options',\n ];\n // 编辑时密码留空则不修改:删除字段值,并从 update_field_list 中剔除\n if (!payload.db_password && form_type.value === 'edit') {\n delete payload.db_password;\n payload.update_field_list = payload.update_field_list.filter(\n (k: string) => k !== 'db_password',\n );\n }\n return payload;\n};\n\n/* 提交:URL 遵循 /{app_flag}/create_{model} 与 /{app_flag}/update_{model} */\nconst handleOk = async () => {\n try {\n await formRef.value.validate();\n const payload = buildPayload();\n payload.db_data_source_id = props.record.id;\n const url =\n form_type.value === 'edit'\n ? `${props.record.model_app}/update_db_data_source`\n : `${props.record.model_app}/create_db_data_source`;\n if (form_type.value === 'edit') payload.id = props.record.id;\n loading.value = true;\n await getApiData({ ...payload, org_id: current_org?.id }, url);\n message.success('操作成功');\n event_obj()?.emit('refresh');\n emit('ok');\n } catch (error) {\n // 校验失败或接口异常:保持弹窗打开\n } finally {\n loading.value = false;\n }\n};\nconst handleCancel = () => emit('cancel');\n\n/* 初始化编辑:先调详情接口拿完整记录,再填充 */\nconst initForEdit = async () => {\n const id = props.record?.id;\n const record = (id != null ? await loadDetail(id) : props.record) || {};\n model.value = {\n name: record.name || '',\n db_type: record.db_type || 'mysql',\n db_host: record.db_host || undefined,\n db_port: record.db_port ?? undefined,\n db_user: record.db_user || undefined,\n db_password: undefined, // 密码不回显,留空表示不修改\n db_name: record.db_name || undefined,\n db_schema: record.db_schema || undefined,\n db_options: record.db_options,\n };\n};\n\nonMounted(async () => {\n if (props.record?.form_type) form_type.value = props.record.form_type;\n if (form_type.value === 'edit') await initForEdit();\n});\n</script>\n\n<style scoped lang=\"less\">\n</style>\n"],"mappings":"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"}
|