index.BBxsn3f9.js 25 KB

1234567891011121314151617181920212223242526272829
  1. import{k as e,m as a,a as t,b0 as l,x as n,O as o,a1 as i,a2 as r,q as s,P as u}from"./element-plus.DUy1TWHM.js";import{b as d}from"./@vueuse.Dnsd2JKX.js";import{u as c}from"./vue-router.yxIMtaxH.js";import{a0 as m,w as p,y as v,$ as b,aj as f,T as _,aa as g,G as h}from"./index.B1CvNv-2.js";import{M as y}from"./sql.Cx6wXxe_.js";import{_ as w,a as j,P as k}from"./PageContent.v2drBSrF.js";import{P as x}from"./system.0GYJijcz.js";import C from"./CreateTableDialog.TTKnAEsW.js";import $ from"./GenCodeDrawer.CGStgJG8.js";import T from"./ImportDbTableDialog.B1KTncev.js";import{M as S,bE as q,ax as z,a_ as D,aL as P,u as A,I as O,bk as B,bJ as R,v as U,bL as E,s as W,t as G,bb as L,H as N,ak as V,aU as F,aS as M,q as I,as as Q,aO as J}from"./@vue.DbmRtknU.js";import"./lodash-es.DaM9m3L-.js";import"./async-validator.j0i5Y79Y.js";import"./@popperjs.DxtSUbXb.js";import"./@ctrl.BEgk5vdO.js";import"./dayjs.DCWbrgJ0.js";import"./memoize-one.BAtLgO95.js";import"./normalize-wheel-es.TzhA1irr.js";import"./@floating-ui.8vigAAFV.js";import"./pinia.BlfmsheH.js";import"./vue-i18n.DXLOBfKS.js";import"./@intlify.DPMNdUn_.js";import"./nprogress.BTjJXJ-u.js";import"./codemirror.CYSLATvI.js";import"./diff-match-patch.DkK4wJpa.js";import"./vue-web-terminal.D-rog7dz.js";import"./vue.MGxsMDTR.js";/* empty css */import"./axios.Da-QW0H8.js";import"./qs.BQjOrGHM.js";import"./side-channel.4q28KFJj.js";import"./es-errors.DTEWvbA_.js";import"./object-inspect.DvQZIv3_.js";import"./side-channel-list.Do0-XmF5.js";import"./side-channel-map.DNHQ53lO.js";import"./get-intrinsic.Bbe5x-9b.js";import"./es-object-atoms.CyiuHMUS.js";import"./math-intrinsics.pM-JTNwN.js";import"./gopd.BudZp56J.js";import"./es-define-property.F0aoeP8o.js";import"./has-symbols.BcO-SUVM.js";import"./get-proto.Cb_fpw-j.js";import"./dunder-proto.WEH3rgQR.js";import"./call-bind-apply-helpers.DJjIjCF_.js";import"./function-bind.DrnB-baK.js";import"./hasown.BXcyoiLU.js";import"./call-bound.22gFUC2Q.js";import"./side-channel-weakmap.DpSeWE6i.js";import"./pinia-plugin-persistedstate.COWkwNh5.js";import"./exceljs.DLSZe_6I.js";import"./xml.DHJV7eh_.js";import"./size.mshfn9n4.js";import"./GenBasicStep.Cnj8P6Ab.js";import"./GenColumnsStep.84pLTY9X.js";import"./vue-draggable-plus.D4SSJ6d3.js";import"./GenPreviewStep.BuCrEnmC.js";import"./index.URLtcgh2.js";const H="/generator/gencode",K={
  2. // 查询生成表数据
  3. listTable:e=>m({url:`${H}/list`,method:"get",params:e}),
  4. // 查询db数据库列表
  5. listDbTable:e=>m({url:`${H}/db/list`,method:"get",params:e}),
  6. // 导入表
  7. importTable:e=>m({url:`${H}/import`,method:"post",data:e}),
  8. // 查询表详细信息
  9. detailTable:e=>m({url:`${H}/detail/${e}`,method:"get"}),
  10. // 创建表(与后端 GenCreateTableSqlBody 一致)
  11. createTable:e=>m({url:`${H}/create`,method:"post",data:{sql:e}}),
  12. // 更新表信息
  13. updateTable:(e,a)=>m({url:`${H}/update/${a}`,method:"put",data:e}),
  14. // 删除表数据
  15. deleteTable:e=>m({url:`${H}/delete`,method:"delete",data:e}),
  16. // 批量生成代码
  17. batchGenCode:e=>m({url:`${H}/batch/output`,method:"patch",data:e,responseType:"blob"}),
  18. // 生成代码到指定路径
  19. genCodeToPath:e=>m({url:`${H}/output/${e}`,method:"post"}),
  20. // 预览生成代码
  21. previewTable:e=>m({url:`${H}/preview/${e}`,method:"get"}),
  22. // 同步数据库
  23. syncDb:e=>m({url:`${H}/sync_db/${e}`,method:"post"}),
  24. // 同步数据库差异预览(不落库)
  25. syncDbPreview:e=>m({url:`${H}/sync_db/preview/${e}`,method:"get"})},X={class:"app-container"},Y={class:"data-table__toolbar--right"},Z={class:"data-table__content"},ee=S({name:"GenCode",inheritAttrs:!1,__name:"index",setup(m){const{searchRef:S,contentRef:H,handleQueryClick:ee,handleResetClick:ae,refreshList:te}=v(),le=F(),ne=F(),oe=F();J(g,ne),J(h,le);const ie=F(!1),re=F(!1),se=F(""),ue=F(!1),de=F(0),ce=F(!1),me=F(!1),pe=F([]),ve=F([]),be=F([]),fe=F(!1),_e=F(0);let ge=M({page_no:1,page_size:10,table_name:void 0,table_comment:void 0});const he=F([]),ye=F([]),we=F([]);async function je(){me.value=!0,await Ke()}const ke=M({open:!1,title:"代码预览",data:{},active_name:"controller.py"}),xe=F(!1),Ce=F("all"),$e=["ts","vue","python"],Te=F([...$e]),Se=F(""),qe=F([]),ze=M({permPrefix:"module_generator:gencode",colon:!0,isExpandable:!1,showNumber:3,form:{labelWidth:"auto"},searchButtonPerm:"module_generator:gencode:query",resetButtonPerm:"module_generator:gencode:query",formItems:[{prop:"table_name",label:"表名称",type:"input",attrs:{placeholder:"请输入表名称",clearable:!0,style:{width:"200px"}}},{prop:"table_comment",label:"表描述",type:"input",attrs:{placeholder:"请输入表描述",clearable:!0,style:{width:"200px"}}}]}),De=M([{prop:"selection",label:"选择框",show:!0},{prop:"index",label:"序号",show:!0},{prop:"table_name",label:"表名称",show:!0},{prop:"table_comment",label:"表描述",show:!0},{prop:"class_name",label:"实体",show:!0},{prop:"created_time",label:"创建时间",show:!0},{prop:"updated_time",label:"更新时间",show:!0},{prop:"operation",label:"操作",show:!0}]),Pe=M({permPrefix:"module_generator:gencode",cols:De,hideColumnFilter:!1,toolbar:[],defaultToolbar:["refresh","filter"],pagination:{pageSize:10,pageSizes:[10,20,30,50]},request:{page_no:"page_no",page_size:"page_size"},indexAction:async e=>{const a=await K.listTable(e);return{total:a.data.data.total,list:a.data.data.items}}}),Ae=p(),Oe=I(()=>Ae.theme===_.DARK?"dracula":"default");q(Oe,e=>{le.value&&le.value.cminstance&&le.value.cminstance.setOption("theme",e)});const Be={mode:"text/javascript",lineNumbers:!0,smartIndent:!0,indentUnit:2,tabSize:2,readOnly:!1,theme:Oe.value,lineWrapping:!0,autofocus:!1},{copy:Re}=d(),Ue=I(()=>{if(!qe.value.length)return[];const e=(a,t=[])=>{if(!a.children||0===a.children.length)return((e,a)=>{if("all"!==Ce.value){const t=a.some(e=>"backend"===e||"python"===e)||e.includes(".py"),l=a.some(e=>"frontend"===e||"vue"===e)||e.includes(".vue")||e.includes(".ts");if("backend"===Ce.value&&!t)return!1;if("frontend"===Ce.value&&!l)return!1}return e.endsWith(".py")?Te.value.includes("python"):e.endsWith(".vue")?Te.value.includes("vue"):!e.endsWith(".ts")||Te.value.includes("ts")})(a.label,t)?{...a}:null;const l=[...t,a.label],n=(a.children||[]).map(a=>e(a,l)).filter(Boolean);return n.length?{label:a.label,children:n}:null};return qe.value.map(a=>e(a)).filter(Boolean)}),Ee=()=>{const e=Se.value;e?(Re(e),s.success("代码复制成功")):s.warning("没有可复制的代码")};function We(e){!e||e.children&&0!==e.children.length||(Se.value=e.content||"",Q(()=>Le(e.label)))}function Ge(e){for(const a of e){if(!a.children||0===a.children.length)return a;const e=Ge(a.children);if(e)return e}return null}function Le(e){var a;const t=null==(a=le.value)?void 0:a.cminstance;if(!t)return;let l="text/javascript";e.endsWith(".py")?l="text/x-python":e.endsWith(".vue")?l="text/html":e.endsWith(".ts")&&(l="text/typescript"),t.setOption("mode",l)}async function Ne(e,a){let t=[];if(a)t=[a.table_name||""];else{if(!(be.value.length>0))return void s.error("请选择要生成的数据");t=be.value}ie.value=!0;try{if("1"===e){if(!Array.isArray(t)||1!==t.length||!t[0])return s.error("自定义路径只能生成单表代码"),void(ie.value=!1);(null==a?void 0:a.id)&&await async function(e){var a;await K.updateTable(ea,e);const t=await K.previewTable(e),l=null==(a=t.data)?void 0:a.data,n=l&&"object"==typeof l?Object.keys(l):[],o=n.slice(0,80),i=n.length>o.length?`<div style="margin-top:10px;padding:8px 12px;border-radius:6px;background:var(--el-fill-color-light);font-size:12px;color:var(--el-text-color-secondary);text-align:center">还有 <b style="color:var(--el-text-color-primary)">${n.length-o.length}</b> 个文件未列出</div>`:"",r=o.map((e,a)=>{return`<div class="gencode-write-path-row" style="padding:9px 14px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:12px;line-height:1.45;white-space:nowrap;color:var(--el-text-color-primary);background:${a%2==0?"var(--el-fill-color-blank)":"var(--el-fill-color-light)"};border-bottom:1px solid var(--el-border-color-lighter)">${t=e,t.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&#39;")}</div>`;var t}).join(""),s=o.length?`<div class="gencode-write-path-list-wrap">${r}</div>${i}`:'<div style="padding:16px;border-radius:8px;background:var(--el-fill-color-light);color:var(--el-text-color-secondary);font-size:13px;text-align:center">未获取到预览路径,仍将继续写入。</div>',d='<div style="margin-top:12px;padding-top:10px;border-top:1px solid var(--el-border-color-lighter);font-size:12px;line-height:1.5;color:var(--el-text-color-secondary)">与「代码预览」同源;路径为相对项目根的落盘位置。</div>';await u.confirm(`<div class="gencode-write-confirm-body" style="font-family:var(--el-font-family);line-height:1.5;color:var(--el-text-color-primary)">\n <div style="margin-bottom:12px">\n <div style="font-size:15px;font-weight:600;letter-spacing:0.02em">将写入以下文件</div>\n <div style="margin-top:4px;font-size:12px;color:var(--el-text-color-secondary)">共 ${n.length} 项 · 相对项目根目录</div>\n </div>\n ${s}\n ${o.length?d:""}\n </div>`,"写入本地确认",{confirmButtonText:"确认写入",cancelButtonText:"取消",type:"warning",dangerouslyUseHTMLString:!0,customClass:"gencode-write-confirm-box"})}(a.id),await K.genCodeToPath(t[0]),s.success("已写入项目目录并创建菜单(若尚未存在)")}else{const e=Array.isArray(t)?t:[t],a=(await K.batchGenCode(e)).data;if(a.size<100&&a.type.includes("json")){const e=await a.text();try{const a=JSON.parse(e);return void s.error(a.msg||"批量生成失败")}catch{}}const l=new Blob([a],{type:"application/zip"}),n=URL.createObjectURL(l),o=document.createElement("a");o.href=n,o.download="code.zip",o.click(),URL.revokeObjectURL(n),s.success("已开始下载 code.zip")}}catch(l){}finally{ie.value=!1}}function Ve(e){we.value=e}const Fe=e=>e.filter(e=>e.type===f.CATALOG).map(e=>({...e,children:e.children?Fe(e.children):[]}));function Me(e){return e.map(e=>{const a={value:e.id,label:e.name,disabled:!1===e.status||"false"===String(e.status),route_path:e.route_path};return e.children&&e.children.length>0&&(a.children=Me(e.children)),a})}async function Ie(e){const a=(null==e?void 0:e.id)??ve.value[0];if(null!=a){Object.assign(ea,{id:(null==e?void 0:e.id)??a,table_name:(null==e?void 0:e.table_name)||ea.table_name||"",table_comment:(null==e?void 0:e.table_comment)??ea.table_comment??"",class_name:(null==e?void 0:e.class_name)??ea.class_name??"",package_name:(null==e?void 0:e.package_name)??ea.package_name??"",module_name:(null==e?void 0:e.module_name)??ea.module_name??"",business_name:(null==e?void 0:e.business_name)??ea.business_name??"",function_name:(null==e?void 0:e.function_name)??ea.function_name??"",description:(null==e?void 0:e.description)??ea.description??"",parent_menu_id:(null==e?void 0:e.parent_menu_id)??ea.parent_menu_id??void 0,sub_table_name:(null==e?void 0:e.sub_table_name)??ea.sub_table_name??"",sub_table_fk_name:(null==e?void 0:e.sub_table_fk_name)??ea.sub_table_fk_name??""}),ea.columns=[],de.value=0,ue.value=!0;try{await async function(e){var a;try{ie.value=!0;const t=await K.detailTable(Number(e));if(null==(a=null==t?void 0:t.data)?void 0:a.data){const e=t.data.data;Object.assign(ea,{...e}),e&&e.columns&&Array.isArray(e.columns)&&(ea.columns=JSON.parse(JSON.stringify(e.columns)),(ea.columns??[]).forEach(e=>{e.select=!0})),de.value=0}}catch(t){throw t}finally{ie.value=!1}}(a)}catch(t){return void s.error("获取表详情失败,请稍后重试")}try{const[e,a]=await Promise.all([y.listMenu(),b.listDictType({page_no:1,page_size:100})]);ye.value=Me(Fe(e.data.data)),he.value=a.data.data.items}catch(t){s.warning("菜单或字典选项加载失败,部分下拉可能为空")}}else s.error("请选择要修改的数据")}async function Qe(e){const a=(null==e?void 0:e.id)?[e.id]:ve.value;if(0!==a.length)try{await u.confirm(`是否确认删除选中的${a.length}条数据?`,"删除确认",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}),await K.deleteTable(a),te()}catch(t){}else s.error("请选择要删除的数据")}async function Je(e,a){if(e&&""!==e.trim()){ie.value=!0;try{if(await K.createTable(e),ce.value=!1,ue.value&&2===de.value&&(null==a?void 0:a.fromVisual)&&a.visualSnapshot){const e=a.visualSnapshot;ea.table_name=(e.mainTableName||"").trim();const t=(e.mainComment||"").trim();t&&(ea.table_comment=t),e.subEnabled?(ea.sub_table_name=(e.subTableName||"").trim(),ea.sub_table_fk_name=(e.fkColumn||"").trim()):(ea.sub_table_name="",ea.sub_table_fk_name=""),ea.master_sub_hint=void 0,Q(()=>{var e,a;null==(a=null==(e=ne.value)?void 0:e.clearValidate)||a.call(e,["table_name","sub_table_name","sub_table_fk_name"])})}te(),me.value=!0,await Ke()}catch(t){}finally{ie.value=!1}}else s.error("请输入创建表SQL语句")}async function He(){var e;if(0!==we.value.length){fe.value=!0;try{const a=we.value.map(e=>e.table_name||"");if(await K.importTable(a),me.value=!1,te(),1===we.value.length){await Q();const a=(B(null==(e=H.value)?void 0:e.pageData)??[]).find(e=>e.table_name===we.value[0].table_name);a&&await Ie(a)}else s.success(`成功导入 ${we.value.length} 个表`)}catch(a){}finally{fe.value=!1}}else s.error("请选择要导入的表")}async function Ke(){fe.value=!0;try{const e=await K.listDbTable(ge);e.data&&e.data.data&&(pe.value=e.data.data.items,_e.value=e.data.data.total)}catch(e){}finally{fe.value=!1}}async function Xe(){ge.page_no=1,await Ke()}async function Ye(){var e;null==(e=oe.value)||e.resetQueryForm(),await Xe()}const Ze=c();z(async()=>{var e,a,t;const l=Ze.query.t;if(null!=l&&String(l)!==se.value){se.value=String(l);const n=Number(Ze.query.page_no||1);if(await Q(),H.value){H.value.pagination.currentPage=n;const l=(null==(e=S.value)?void 0:e.getQueryParams())??{},o=(null==(t=(a=H.value).getFilterParams)?void 0:t.call(a))??{};H.value.fetchPageData({...l,...o},!1)}}});const ea=M({id:void 0,table_name:"",table_comment:"",sub_table_name:"",sub_table_fk_name:"",class_name:"",package_name:"",module_name:"",business_name:"",function_name:"",description:"",parent_menu_id:void 0,pk_column:void 0,sub_table:void 0,columns:[],sub:!1,master_sub_hint:void 0}),aa=I(()=>ue.value&&2===de.value?{table_name:ea.table_name,table_comment:ea.table_comment,sub_table_name:ea.sub_table_name??void 0,sub_table_fk_name:ea.sub_table_fk_name??void 0}:null);function ta(e,a,t){const l=(ea.sub_table_name||"").trim(),n=(ea.sub_table_fk_name||"").trim();Boolean(l)===Boolean(n)?l&&n&&l===(ea.table_name||"").trim()?t(new Error("子表表名不能与主表表名相同")):t():t(new Error("子表表名与外键列须同时填写或同时留空"))}function la(){Q(()=>{var e,a;null==(e=ne.value)||e.validateField("sub_table_name").catch(()=>{}),null==(a=ne.value)||a.validateField("sub_table_fk_name").catch(()=>{})})}function na(){ea.sub_table_name="",ea.sub_table_fk_name="",ea.master_sub_hint=void 0,ea.sub=!1,ea.sub_table=void 0,Q(()=>{var e;null==(e=ne.value)||e.clearValidate(["sub_table_name","sub_table_fk_name"])})}const oa={table_name:[{required:!0,message:"表名称不能为空",trigger:"blur"}],class_name:[{required:!0,message:"实体名称不能为空",trigger:"blur"}],package_name:[{required:!0,message:"生成包路径不能为空",trigger:"blur"}],module_name:[{required:!0,message:"生成模块名不能为空",trigger:"blur"}],business_name:[{validator:function(e,a,t){const l=(ea.package_name||"").trim(),n=(ea.module_name||"").trim();l.startsWith("module_")&&Boolean(n)&&!n.startsWith("module_")||null!=a&&String(a).trim()?t():t(new Error("业务名不能为空"))},trigger:"blur"}],function_name:[{required:!0,message:"生成功能名不能为空",trigger:"blur"}],
  26. /** 与后端一致:可选;不选时写入本地会按包名自动建目录菜单 */
  27. sub_table_name:[{validator:ta,trigger:"blur"}],sub_table_fk_name:[{validator:ta,trigger:"blur"}]};async function ia(){var e;if(de.value<3){re.value=!0;try{if(0===de.value){if(!(await(null==(e=ne.value)?void 0:e.validate().catch(()=>!1))))return}else if(1===de.value&&(!ea.columns||0===ea.columns.length))return void s.error("请配置字段信息");const a=await async function(e){var a;const t=!1!==(null==e?void 0:e.requireColumns);if(ea.id)try{if(ie.value=!0,t&&(!ea.columns||0===ea.columns.length))return void s.error("请配置字段信息");const e={...ea,parent_menu_id:ea.parent_menu_id??null,
  28. // 将undefined转换为null,确保属性被传输
  29. columns:ea.columns||[]};delete e.sub_table,delete e.sub,delete e.pk_column,delete e.master_sub_hint;const l=ea.columns,n=await K.updateTable(e,ea.id||0);return(null==(a=n.data)?void 0:a.data)&&(Object.assign(ea,n.data.data),l&&l.length>0&&(ea.columns=l)),!0}catch(l){}finally{ie.value=!1}else s.error("无效的表ID")}({requireColumns:0!==de.value});if(!a)return;de.value++,2===de.value&&ea.id&&await async function(e){var a;if(e.id){xe.value=!0;try{const t=null==(a=(await K.previewTable(e.id)).data)?void 0:a.data;if(!t||"object"!=typeof t||0===Object.keys(t).length)return s.warning("预览内容为空,请先保存配置并检查字段与主子表设置"),qe.value=[],Se.value="",void(ke.data={});ke.data=t;const l=function(e){const a={label:"前后端代码",children:[]};return e.forEach(e=>{var t;const l=e.path.split("/").filter(e=>""!==e);let n=a;l.forEach(e=>{var a,t;let l=null==(a=n.children)?void 0:a.find(a=>a.label===e);l||(l={label:e,children:[]},null==(t=n.children)||t.push(l)),n=l}),null==(t=n.children)||t.push({label:e.file_name,full_path:e.full_path,content:null==e?void 0:e.content})}),a}(Object.entries(t).map(([e,a])=>{const t=e.split("/");let l=t.pop()||"";const n=t.join("/");return l.endsWith(".j2")&&(l=l.substring(0,l.lastIndexOf(".j2"))),{path:n,file_name:l,content:"string"==typeof a?a:JSON.stringify(a),full_path:e}}));qe.value=[l],await Q();let n=null;for(const e of Ue.value)if(n=Ge([e]),n)break;n||(n=Ge(qe.value)),Se.value=(null==n?void 0:n.content)||"",await Q(),(null==n?void 0:n.label)&&Le(n.label),ke.open=!0,ke.active_name="model.py"}catch(t){}finally{xe.value=!1}}else s.warning("无效的表ID")}({id:ea.id,table_name:ea.table_name})}finally{re.value=!1}}}function ra(){de.value>0&&de.value--}function sa(e,a){if(!ea.columns||!Array.isArray(ea.columns))return;const t=Array.isArray(e)?e:[e];ea.columns.forEach(e=>{e&&"object"==typeof e&&t.forEach(t=>{e[t]=a})})}function ua(){ue.value=!1,de.value=0,setTimeout(()=>{var e;null==(e=ne.value)||e.resetFields()},300)}return(d,c)=>{const m=t,p=r,v=i,b=n,f=a,_=e,g=D("hasPerm"),h=o;return P(),A("div",X,[O(x,{ref_key:"searchRef",ref:S,"search-config":ze,onQueryClick:B(ee),onResetClick:B(ae)},null,8,["search-config","onQueryClick","onResetClick"]),O(k,{ref_key:"contentRef",ref:H,"content-config":Pe},{toolbar:R(({toolbarRight:e,onToolbar:a,removeIds:t,cols:l})=>[O(w,{"remove-ids":t},{default:R(()=>[O(v,{gutter:10},{default:R(()=>[O(p,{span:1.5},{default:R(()=>[E((P(),W(m,{type:"primary",icon:"Plus",onClick:c[0]||(c[0]=e=>ce.value=!0)},{default:R(()=>[...c[12]||(c[12]=[N(" 创建 ",-1)])]),_:1})),[[g,["module_generator:gencode:create"]]])]),_:1}),O(p,{span:1.5},{default:R(()=>[E((P(),W(m,{type:"success",icon:"Upload",onClick:je},{default:R(()=>[...c[13]||(c[13]=[N(" 导入 ",-1)])]),_:1})),[[g,["module_generator:gencode:import"]]])]),_:1}),O(p,{span:1.5},{default:R(()=>[E((P(),W(m,{type:"danger",icon:"Delete",disabled:0===t.length,onClick:c[1]||(c[1]=e=>Qe())},{default:R(()=>[...c[14]||(c[14]=[N(" 批量删除 ",-1)])]),_:1},8,["disabled"])),[[g,["module_generator:gencode:delete"]]])]),_:2},1024),O(p,{span:1.5},{default:R(()=>[E((P(),W(m,{type:"warning",icon:"Download",disabled:0===t.length,onClick:c[2]||(c[2]=e=>Ne("0"))},{default:R(()=>[...c[15]||(c[15]=[N(" 批量生成 ",-1)])]),_:1},8,["disabled"])),[[g,["module_generator:gencode:operate"]]])]),_:2},1024)]),_:2},1024)]),_:2},1032,["remove-ids"]),U("div",Y,[O(j,{buttons:e,cols:l,"on-toolbar":a},null,8,["buttons","cols","on-toolbar"])])]),table:R(({data:e,loading:a,tableRef:t,onSelectionChange:n,pagination:o})=>[U("div",Z,[E((P(),W(_,{ref:t,"row-key":"id",data:e,height:"100%",border:"",stripe:"",onSelectionChange:e=>{var a;a=e,ve.value=a.map(e=>e.id),be.value=a.map(e=>e.table_name||"").filter(Boolean),n(e)}},{empty:R(()=>[O(b,{"image-size":80,description:"暂无数据"})]),default:R(()=>{var e,a,t,n,i,r,d,p;return[(null==(e=De.find(e=>"selection"===e.prop))?void 0:e.show)?(P(),W(f,{key:0,type:"selection",align:"center",width:"55"})):G("",!0),(null==(a=De.find(e=>"index"===e.prop))?void 0:a.show)?(P(),W(f,{key:1,label:"序号",type:"index","min-width":"30",align:"center",fixed:""},{default:R(e=>[U("span",null,L((o.currentPage-1)*o.pageSize+e.$index+1),1)]),_:2},1024)):G("",!0),(null==(t=De.find(e=>"table_name"===e.prop))?void 0:t.show)?(P(),W(f,{key:2,label:"表名称",prop:"table_name","show-overflow-tooltip":!0})):G("",!0),(null==(n=De.find(e=>"table_comment"===e.prop))?void 0:n.show)?(P(),W(f,{key:3,label:"表描述",prop:"table_comment","show-overflow-tooltip":!0})):G("",!0),(null==(i=De.find(e=>"class_name"===e.prop))?void 0:i.show)?(P(),W(f,{key:4,label:"实体",prop:"class_name","show-overflow-tooltip":!0})):G("",!0),(null==(r=De.find(e=>"created_time"===e.prop))?void 0:r.show)?(P(),W(f,{key:5,label:"创建时间",prop:"created_time"})):G("",!0),(null==(d=De.find(e=>"updated_time"===e.prop))?void 0:d.show)?(P(),W(f,{key:6,label:"更新时间",prop:"updated_time"})):G("",!0),(null==(p=De.find(e=>"operation"===e.prop))?void 0:p.show)?(P(),W(f,{key:7,label:"操作",align:"center","min-width":"120","class-name":"small-padding fixed-width"},{default:R(e=>[E((P(),W(m,{link:"",type:"primary",icon:B(l),onClick:a=>Ie(e.row)},{default:R(()=>[...c[16]||(c[16]=[N(" 代码生成 ",-1)])]),_:1},8,["icon","onClick"])),[[g,["module_generator:gencode:update"]]]),E((P(),W(m,{link:"",type:"danger",icon:"Delete",onClick:a=>Qe(e.row)},{default:R(()=>[...c[17]||(c[17]=[N(" 删除 ",-1)])]),_:1},8,["onClick"])),[[g,["module_generator:gencode:delete"]]]),E((P(),W(m,{link:"",type:"success",icon:"Refresh",onClick:a=>async function(e){var a;const t=e.table_name||"";if(!t)return void s.error("表名不能为空");const l=(e,a)=>{const t=(e=>{var a,t,l;return{added:(null==(a=e.added)?void 0:a.length)??0,removed:(null==(t=e.removed)?void 0:t.length)??0,changed:(null==(l=e.changed)?void 0:l.length)??0,unchanged:e.unchanged??0}})(a),l=e=>(null==e?void 0:e.length)?e.slice(0,20).join(", "):"无";return`\n <div style="line-height:1.6">\n <div style="font-weight:600;margin-bottom:6px">${e}</div>\n <div>新增:<b>${t.added}</b>;删除:<b>${t.removed}</b>;变更:<b>${t.changed}</b>;未变:${t.unchanged}</div>\n <div style="margin-top:6px">新增列:${l(a.added||[])}</div>\n <div>删除列:${l(a.removed||[])}</div>\n <div>变更列:${l((a.changed||[]).map(e=>e.column_name))}</div>\n <div style="margin-top:8px;color:var(--el-text-color-secondary)">提示:同步会尽量保留你已配置的 dict/html/query 等生成项,仅以数据库结构为准更新元信息。</div>\n </div>\n `};try{ie.value=!0;const e=null==(a=(await K.syncDbPreview(t)).data)?void 0:a.data,n=l(`主表:${t}`,e),o=(null==e?void 0:e.sub_table_name)&&(null==e?void 0:e.sub)?l(`子表:${e.sub_table_name}`,e.sub):"";await u.confirm(`${n}${o}`,"同步差异预览",{confirmButtonText:"确认同步",cancelButtonText:"取消",type:"warning",dangerouslyUseHTMLString:!0}),await K.syncDb(t),s.success("表结构已同步到代码生成配置"),te()}catch(n){}finally{ie.value=!1}}(e.row)},{default:R(()=>[...c[18]||(c[18]=[N(" 同步 ",-1)])]),_:1},8,["onClick"])),[[g,["module_generator:db:sync"]]])]),_:1})):G("",!0)]}),_:2},1032,["data","onSelectionChange"])),[[h,a]])])]),_:1},8,["content-config"]),O(C,{modelValue:ce.value,"onUpdate:modelValue":c[3]||(c[3]=e=>ce.value=e),loading:ie.value,"link-from-gen":aa.value,onSubmit:Je},null,8,["modelValue","loading","link-from-gen"]),O(T,{ref_key:"importDbDialogRef",ref:oe,modelValue:me.value,"onUpdate:modelValue":c[4]||(c[4]=e=>me.value=e),query:B(ge),"onUpdate:query":c[5]||(c[5]=e=>V(ge)?ge.value=e:ge=e),data:pe.value,total:_e.value,"confirm-loading":fe.value,onQuery:Xe,onReset:Ye,onConfirm:He,onFetch:Ke,onSelectionChange:Ve},null,8,["modelValue","query","data","total","confirm-loading"]),O($,{modelValue:ue.value,"onUpdate:modelValue":c[6]||(c[6]=e=>ue.value=e),"preview-scope":Ce.value,"onUpdate:previewScope":c[7]||(c[7]=e=>Ce.value=e),"preview-types":Te.value,"onUpdate:previewTypes":c[8]||(c[8]=e=>Te.value=e),code:Se.value,"onUpdate:code":c[9]||(c[9]=e=>Se.value=e),info:ea,rules:oa,"active-step":de.value,"menu-options":ye.value,"dict-options":he.value,loading:ie.value,"next-step-loading":re.value,"preview-loading":xe.value,"preview-type-options":$e,"filtered-tree-data":Ue.value,"cm-options":Be,"bulk-set":sa,onClose:ua,onPrevStep:ra,onNextStep:ia,onGenDownload:c[10]||(c[10]=e=>Ne("0",ea)),onGenWrite:c[11]||(c[11]=e=>Ne("1",ea)),onClearMasterSub:na,onMasterSubBlur:la,onFileClick:We,onCopyCode:Ee},null,8,["modelValue","preview-scope","preview-types","code","info","active-step","menu-options","dict-options","loading","next-step-loading","preview-loading","filtered-tree-data"])])}}});export{ee as default};