test / bt-source /panel /BTPanel /static /js /add-form.js
GGSheng's picture
feat: deploy Gemma 4 to hf space
08c964e verified
import{O as A,w as C,t as I,M as i,ls as w,ae as x,lt as M,A as S,_ as k}from"./utils-lib.js?v=1775629002";import{j as q,b as E,h as m,f as g}from"./form-item.js?v=1775629002";import{a as z}from"./column.js?v=1775629002";import{a as P,b as T}from"./index68.js?v=1775629002";import{c as j,r as V,e,V as N,D as r,ag as R,ak as G,aj as H,x as L,y as O,z as U,i as $}from"./base-lib.js?v=1775629002";import{_ as J}from"./index110.js?v=1775629002";import"./__commonjsHelpers__.js?v=1775629002";import"./index111.js?v=1775629002";import"./useController4.js?v=1775629002";import"./site.js?v=1775629002";import"./validator.js?v=1775629002";import"./index108.js?v=1775629002";import"./useStore3.js?v=1775629002";const K={class:"p-[2rem] node-master-mysql-add-form"};function Q(o){return typeof o=="function"||Object.prototype.toString.call(o)==="[object Object]"&&!$(o)}const W=j({__name:"add-form",props:{compData:{default:()=>({panel_address:""})}},setup(o,{expose:y}){var F;const{mysqlRowData:d,isRefreshList:f}=P(),c=o,_=[{label:"面板自动同步",value:"auto",desc:"通过主库面板连接从库面板进行导入导出数据,简单快捷,建议内网机器使用"},{label:"手动同步到从库",value:"manual",desc:"通过主库面板备份,手动将备份文件上传至从库导入后进行数据还原后同步,大于1G数据建议使用此方法同步"}],b=V({node_id:"",master_ip:((F=c==null?void 0:c.compData)==null?void 0:F.panel_address)||"",slave_ip:"",err_code:["1062"],sync_type:"auto",db_name:""}),v=()=>{const{BtTable:a,BtPage:t,BtSearch:n}=x({request:async s=>{s.limit=50;const{data:u}=await M(s);return u.data[0].keys_scopes_status=!0,{data:u.data,total:u.page.total_count}},columns:[z({key:"id"}),{label:"数据库名称",prop:"name"},{label:"数据库大小",prop:"size",render:s=>e("span",null,[S(s.size)])},{label:"数据库引擎",prop:"type"}]});return m("同步数据库",()=>e("div",{class:"w-[94.2%]"},[e(J,null,{"header-right":()=>e(n,{placeholder:"请输入数据库名称",class:"!w-[20rem]"},null),content:()=>e(a,{height:"200px",onSelectionChange:async s=>{try{l.value.db_name=s.map(u=>u.name).join(","),l.value.db_type=s.map(u=>u.type).join(","),await p()}catch(u){}}},null),"footer-right":()=>e(t,{layout:"prev, pager, next, total, jumper","page-size":50},null)})]),"db_name",{class:"node-master-mysql-db-table",rules:[{required:!0,message:"请选择要同步的数据库",trigger:"change"}]})},{BtForm:B,validate:p,param:l,submit:D}=A({data:b.value,options:[q("选择从库节点","node_id",d.value,{attrs:{placeholder:"请选择从库节点",class:"!w-[45rem]",onChange:a=>{var t;l.value.slave_ip=((t=d.value.find(n=>n.value===a))==null?void 0:t.remarks)||""}},rules:[{required:!0,message:"请选择从库节点",trigger:"change"}]}),E("主库IP地址","master_ip",{attrs:{placeholder:"请输入主库IP地址,如:192.168.1.100",class:"!w-[45rem]"},rules:[{required:!0,message:"请输入主库IP地址",trigger:["blur","change"]},{pattern:/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,message:"请输入正确的IP地址格式",trigger:["blur","change"]}]}),E("从库IP地址","slave_ip",{attrs:{placeholder:"请输入从库IP地址,如:192.168.1.101",class:"!w-[45rem]"},rules:[{required:!0,message:"请输入从库IP地址",trigger:["blur","change"]},{pattern:/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,message:"请输入正确的IP地址格式",trigger:["blur","change"]}]}),m(" ",()=>e(R,{modelValue:l.value.err_code,"onUpdate:modelValue":a=>l.value.err_code=a,class:"mb-[1.2rem]"},{default:()=>[e(N,{value:"1062",key:"1062"},{default:()=>[e("span",null,[r("跳过1062错误")]),e("div",{class:"err_code_desc"},[r("跳过主键或唯一键冲突错误")])]})]}),"err_code"),v(),g(" ",[{content:"添加后仅同步选中的数据库数据,如需新增数据库需删除主从重新配置"}]),m("首次同步方式",()=>{let a;return e(H,{modelValue:l.value.sync_type,"onUpdate:modelValue":t=>l.value.sync_type=t},Q(a=_.map(t=>e(G,{class:"mt-[1rem]",value:t.value,key:t.value,style:{height:"auto",lineHeight:"1",alignItems:"flex-start"}},{default:()=>[e("span",{class:"radio-label"},[t.label]),e("div",{class:"radio-desc mt-[1rem] mb-[1rem] w-[43rem]",style:{whiteSpace:"normal",lineHeight:"1.5"}},[t.desc])]})))?a:{default:()=>[a]})},"sync_type"),g("",[{content:"仅支持mysql-5.7+版本(不支持mariadb)"},{content:"只支持通过app/或api添加的节点"}])],submit:async(a,t,n)=>{try{await t(),await C({icon:"warning-filled",title:"提示",content:"首次配置将会重启数据库,如从库有同名数据库将会进行数据覆盖,建议空闲时间配置,是否继续?"})}catch(u){return!1}if(a.value.db_type.includes("MyISAM"))try{await new Promise((u,h)=>{I({title:"MyISAM 引擎警告",area:50,showFooter:!0,component:()=>e("div",{class:"p-[2rem] text-base"},[e("div",{style:"color:var(--el-color-danger-dark-2);margin-bottom:8px;font-size: var(--el-font-size-base);"},[r("检测到选中的数据库包含 MyISAM 存储引擎的表,可能存在以下风险:")]),e("ul",{style:"margin-bottom:16px;list-style: disc;padding-left: 2rem;"},[e("li",null,[r("数据不一致:MyISAM 不支持事务,同步过程中可能出现数据不完整")]),e("li",null,[r("主从中断:表级锁定机制在高并发时内容易导致同步失败")]),e("li",null,[r("错误频发:需要设置错误跳过机制才能正常运行")])]),e("div",{style:"margin-bottom:2rem"},[e("div",{style:"margin-bottom:1rem"},[r("建议方案:")]),e("div",{style:"color:var(--el-color-primary); font-size: var(--el-font-size-base);margin-bottom:1rem"},[r("【推荐】转换为 InnoDB: ALTER TABLE table_name ENGINE=InnoDB")]),e("div",{style:"color:var(--el-base-supplement); font-size: var(--el-font-size-base);"},[r("【备选】继续使用并设置错误跳过码(如: 1062)")])]),e("div",null,[r("确定要继续选择这些数据库吗?")])]),confirmText:"继续添加",cancelText:"取消",onConfirm:()=>(u(!0),!0),onCancel:()=>(h(),!1)})})}catch(u){return!1}const s=i.load("正在添加主从,请稍后...");try{const u=await w(a.value);return u.status?(i.success("创建成功"),T(a.value.slave_ip),!0):(i.error(u.msg),!1)}catch(u){return i.error("创建失败,请重试"),!1}finally{f.value=!0,s.close()}}});return y({validate:p,onConfirm:D,formData:l}),(a,t)=>(L(),O("div",K,[e(U(B))]))}}),ce=k(W,[["__scopeId","data-v-93d76ea6"]]);export{ce as default};