"use strict";(self.webpackChunkant_design_pro=self.webpackChunkant_design_pro||[]).push([[8713,5808,2531],{42734:function(X,D,n){n.r(D);var W=n(67294),R=n(76772),U=n(17788),a=n(92398),w=n(53951),s=n(65899),c=n(85893),g=function(b){var B=(0,R.useIntl)(),_=[],E=Object.keys(b.data);return E.forEach(function(l){_.push({key:l+"1",label:l.substring(l.lastIndexOf("/")+1,l.indexOf(".vm")),children:(0,c.jsx)(w.default,{className:"java",children:b.data[l]})})}),(0,W.useEffect)(function(){},[]),(0,c.jsx)(U.Z,{width:900,title:B.formatMessage({id:"gen.preview",defaultMessage:"\u9884\u89C8"}),open:b.open,destroyOnClose:!0,footer:!1,onOk:function(){b.onHide()},onCancel:function(){b.onHide()},children:(0,c.jsx)(a.Z,{defaultActiveKey:"1",items:_})})};D.default=g},89401:function(X,D,n){n.r(D);var W=n(97857),R=n.n(W),U=n(5574),a=n.n(U),w=n(15009),s=n.n(w),c=n(99289),g=n.n(c),S=n(23430),b=n(24969),B=n(26058),_=n(2453),E=n(83622),l=n(17788),C=n(4393),p=n(85265),v=n(67294),h=n(76772),O=n(42734),m=n(12531),f=n(65385),K=n(2236),Y=n(98097),u=n(85893),J=B.Z.Content,G=function(){var F=g()(s()().mark(function T(t){var r;return s()().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(r=_.ZP.loading("\u6B63\u5728\u5220\u9664"),t){e.next=3;break}return e.abrupt("return",!0);case 3:return e.prev=3,e.next=6,(0,m.removeData)({ids:t.map(function(o){return o.tableId})});case 6:return r(),_.ZP.success("\u5220\u9664\u6210\u529F\uFF0C\u5373\u5C06\u5237\u65B0"),e.abrupt("return",!0);case 11:return e.prev=11,e.t0=e.catch(3),r(),_.ZP.error("\u5220\u9664\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5"),e.abrupt("return",!1);case 16:case"end":return e.stop()}},T,null,[[3,11]])}));return function(t){return F.apply(this,arguments)}}(),Q=function(){var F=g()(s()().mark(function T(t){var r,d;return s()().wrap(function(o){for(;;)switch(o.prev=o.next){case 0:if(r=_.ZP.loading("\u6B63\u5728\u5220\u9664"),t){o.next=3;break}return o.abrupt("return",!0);case 3:return o.prev=3,d=[t.tableId],o.next=7,(0,m.removeData)({ids:d});case 7:return r(),_.ZP.success("\u5220\u9664\u6210\u529F\uFF0C\u5373\u5C06\u5237\u65B0"),o.abrupt("return",!0);case 12:return o.prev=12,o.t0=o.catch(3),r(),_.ZP.error("\u5220\u9664\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5"),o.abrupt("return",!1);case 17:case"end":return o.stop()}},T,null,[[3,12]])}));return function(t){return F.apply(this,arguments)}}(),H=function(){var T=(0,v.useRef)(),t=(0,v.useState)(!1),r=a()(t,2),d=r[0],e=r[1],o=(0,v.useState)(!1),ee=a()(o,2),oe=ee[0],ne=ee[1],_e=(0,v.useState)(!1),te=a()(_e,2),le=te[0],de=te[1],z=(0,v.useRef)(),ce=(0,v.useState)(),re=a()(ce,2),M=re[0],ae=re[1],me=(0,v.useState)([]),se=a()(me,2),A=se[0],ue=se[1],L=(0,h.useAccess)(),ie=[{title:"\u7F16\u53F7",dataIndex:"tableId",tip:"\u7F16\u53F7",render:function(I,i){return(0,u.jsx)("a",{onClick:function(){ae(i),e(!0)},children:I})}},{title:"\u8868\u540D",dataIndex:"tableName",valueType:"textarea"},{title:"\u8868\u63CF\u8FF0",dataIndex:"tableComment",hideInForm:!0,hideInSearch:!0},{title:"\u5B9E\u4F53",dataIndex:"className",valueType:"textarea"},{title:"\u521B\u5EFA\u65F6\u95F4",dataIndex:"createTime",valueType:"textarea",hideInSearch:!0},{title:"\u66F4\u65B0\u65F6\u95F4",dataIndex:"updateTime",valueType:"textarea",hideInSearch:!0},{title:"\u64CD\u4F5C",dataIndex:"option",width:"220px",valueType:"option",render:function(I,i){return[(0,u.jsx)(E.ZP,{type:"link",size:"small",hidden:!L.hasPerms("tool:gen:edit"),onClick:function(){(0,m.previewCode)(i.tableId).then(function(y){y.code===200?(de(y.data),ne(!0)):_.ZP.error("\u83B7\u53D6\u6570\u636E\u5931\u8D25")})},children:"\u9884\u89C8"},"preview"),(0,u.jsx)(E.ZP,{type:"link",size:"small",hidden:!L.hasPerms("tool:gen:edit"),onClick:function(){h.history.push("/tool/gen/edit?id=".concat(i.tableId))},children:"\u7F16\u8F91"},"config"),(0,u.jsx)(E.ZP,{type:"link",size:"small",danger:!0,hidden:!L.hasPerms("tool:gen:del"),onClick:g()(s()().mark(function P(){return s()().wrap(function($){for(;;)switch($.prev=$.next){case 0:l.Z.confirm({title:"\u5220\u9664\u4EFB\u52A1",content:"\u786E\u5B9A\u5220\u9664\u8BE5\u4EFB\u52A1\u5417\uFF1F",okText:"\u786E\u8BA4",cancelText:"\u53D6\u6D88",onOk:function(){var V=g()(s()().mark(function k(){var q;return s()().wrap(function(N){for(;;)switch(N.prev=N.next){case 0:return N.next=2,Q(i);case 2:q=N.sent,q&&z.current&&z.current.reload();case 4:case"end":return N.stop()}},k)}));function Z(){return V.apply(this,arguments)}return Z}()});case 1:case"end":return $.stop()}},P)})),children:"\u5220\u9664"},"delete"),(0,u.jsx)(E.ZP,{type:"link",size:"small",hidden:!L.hasPerms("tool:gen:edit"),onClick:function(){(0,m.syncDbInfo)(i.tableName).then(function(y){y.code===200?_.ZP.success("\u540C\u6B65\u6210\u529F"):_.ZP.error("\u540C\u6B65\u5931\u8D25")})},children:"\u540C\u6B65"},"sync"),(0,u.jsx)(E.ZP,{type:"link",size:"small",hidden:!L.hasPerms("tool:gen:edit"),onClick:function(){i.genType==="1"?(0,m.genCode)(i.tableName).then(function(y){y.code===200?_.ZP.success("\u6210\u529F\u751F\u6210\u5230\u81EA\u5B9A\u4E49\u8DEF\u5F84\uFF1A".concat(i.genPath)):_.ZP.error(y.msg)}):(0,m.batchGenCode)(i.tableName)},children:"\u751F\u6210\u4EE3\u7801"},"gencode")]}}];return(0,u.jsx)(J,{children:(0,u.jsxs)(C.Z,{bordered:!1,children:[(0,u.jsx)(f.Z,{headerTitle:"\u4EE3\u7801\u751F\u6210\u4FE1\u606F",actionRef:z,formRef:T,rowKey:"tableId",search:{labelWidth:120},toolBarRender:function(){return[(0,u.jsxs)(E.ZP,{type:"primary",hidden:!L.hasPerms("tool:gen:edit"),onClick:function(){if(A.length===0){_.ZP.error("\u8BF7\u9009\u62E9\u8981\u751F\u6210\u7684\u6570\u636E");return}var i=A.map(function(P){return P.tableName});A[0].genType==="1"?(0,m.genCode)(i.join(",")).then(function(P){P.code===200?_.ZP.success("\u6210\u529F\u751F\u6210\u5230\u81EA\u5B9A\u4E49\u8DEF\u5F84\uFF1A".concat(A[0].genPath)):_.ZP.error(P.msg)}):(0,m.batchGenCode)(i.join(","))},children:[(0,u.jsx)(S.Z,{})," ",(0,u.jsx)(h.FormattedMessage,{id:"gen.gencode",defaultMessage:"\u751F\u6210"})]},"gen"),(0,u.jsxs)(E.ZP,{type:"primary",hidden:!L.hasPerms("tool:gen:add"),onClick:function(){h.history.push("/tool/gen/import")},children:[(0,u.jsx)(b.Z,{})," ",(0,u.jsx)(h.FormattedMessage,{id:"gen.import",defaultMessage:"\u5BFC\u5165"})]},"import")]},request:function(I){return(0,m.getGenCodeList)(R()({},I)).then(function(i){return{data:i.rows,total:i.rows.length,success:!0}})},columns:ie,rowSelection:{onChange:function(I,i){ue(i)}}}),(A==null?void 0:A.length)>0&&(0,u.jsx)(K.S,{extra:(0,u.jsxs)("div",{children:[(0,u.jsx)(h.FormattedMessage,{id:"pages.searchTable.chosen",defaultMessage:"\u5DF2\u9009\u62E9"})," ",(0,u.jsx)("a",{style:{fontWeight:600},children:A.length})," ",(0,u.jsx)(h.FormattedMessage,{id:"pages.searchTable.item",defaultMessage:"\u9879"})]}),children:(0,u.jsx)(E.ZP,{hidden:!L.hasPerms("tool:gen:remove"),onClick:g()(s()().mark(function j(){return s()().wrap(function(i){for(;;)switch(i.prev=i.next){case 0:l.Z.confirm({title:"\u5220\u9664\u4EFB\u52A1",content:"\u786E\u5B9A\u5220\u9664\u8BE5\u4EFB\u52A1\u5417\uFF1F",okText:"\u786E\u8BA4",cancelText:"\u53D6\u6D88",onOk:function(){var P=g()(s()().mark(function $(){var V,Z,k;return s()().wrap(function(x){for(;;)switch(x.prev=x.next){case 0:return x.next=2,G(A);case 2:V=x.sent,V&&(ue([]),(Z=z.current)===null||Z===void 0||(k=Z.reloadAndRest)===null||k===void 0||k.call(Z));case 4:case"end":return x.stop()}},$)}));function y(){return P.apply(this,arguments)}return y}()});case 1:case"end":return i.stop()}},j)})),children:(0,u.jsx)(h.FormattedMessage,{id:"pages.searchTable.batchDeletion",defaultMessage:"\u6279\u91CF\u5220\u9664"})},"delete")}),(0,u.jsx)(O.default,{open:oe,data:le,onHide:function(){ne(!1)}}),(0,u.jsx)(p.Z,{width:600,open:d,onClose:function(){ae(void 0),e(!1)},closable:!1,children:(M==null?void 0:M.tableName)&&(0,u.jsx)(Y.vY,{column:2,title:M==null?void 0:M.tableName,request:g()(s()().mark(function j(){return s()().wrap(function(i){for(;;)switch(i.prev=i.next){case 0:return i.abrupt("return",{data:M||{}});case 1:case"end":return i.stop()}},j)})),params:{id:M==null?void 0:M.tableName},columns:ie})})]})})};D.default=H},12531:function(X,D,n){n.r(D),n.d(D,{addData:function(){return O},batchGenCode:function(){return Q},genCode:function(){return J},getGenCode:function(){return B},getGenCodeList:function(){return S},importTables:function(){return C},previewCode:function(){return F},queryTableList:function(){return E},removeData:function(){return v},syncDbInfo:function(){return Y},updateData:function(){return f}});var W=n(97857),R=n.n(W),U=n(15009),a=n.n(U),w=n(99289),s=n.n(w),c=n(76772),g=n(30964);function S(t){return b.apply(this,arguments)}function b(){return b=s()(a()().mark(function t(r){var d;return a()().wrap(function(o){for(;;)switch(o.prev=o.next){case 0:return d=new URLSearchParams(r).toString(),o.abrupt("return",(0,c.request)("/api/code/gen/list?".concat(d),{data:r,method:"get",headers:{"Content-Type":"application/json;charset=UTF-8"}}));case 2:case"end":return o.stop()}},t)})),b.apply(this,arguments)}function B(t){return _.apply(this,arguments)}function _(){return _=s()(a()().mark(function t(r){return a()().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",(0,c.request)("/api/code/gen/".concat(r),{method:"get",headers:{"Content-Type":"application/json;charset=UTF-8"}}));case 1:case"end":return e.stop()}},t)})),_.apply(this,arguments)}function E(t){return l.apply(this,arguments)}function l(){return l=s()(a()().mark(function t(r){var d;return a()().wrap(function(o){for(;;)switch(o.prev=o.next){case 0:return d=new URLSearchParams(r).toString(),o.abrupt("return",(0,c.request)("/api/code/gen/db/list?".concat(d),{data:r,method:"get",headers:{"Content-Type":"application/json;charset=UTF-8"}}));case 2:case"end":return o.stop()}},t)})),l.apply(this,arguments)}function C(t){return p.apply(this,arguments)}function p(){return p=s()(a()().mark(function t(r){return a()().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",(0,c.request)("/api/code/gen/importTable?tables=".concat(r),{method:"POST",headers:{"Content-Type":"application/json;charset=UTF-8"}}));case 1:case"end":return e.stop()}},t)})),p.apply(this,arguments)}function v(t){return h.apply(this,arguments)}function h(){return h=s()(a()().mark(function t(r){return a()().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",(0,c.request)("/api/code/gen/".concat(r.ids),{method:"delete",headers:{"Content-Type":"application/json;charset=UTF-8"}}));case 1:case"end":return e.stop()}},t)})),h.apply(this,arguments)}function O(t){return m.apply(this,arguments)}function m(){return m=s()(a()().mark(function t(r){return a()().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",(0,c.request)("/api/code/gen",{method:"POST",data:R()({},r)}));case 1:case"end":return e.stop()}},t)})),m.apply(this,arguments)}function f(t){return K.apply(this,arguments)}function K(){return K=s()(a()().mark(function t(r){return a()().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",(0,c.request)("/api/code/gen",{method:"PUT",data:R()({},r)}));case 1:case"end":return e.stop()}},t)})),K.apply(this,arguments)}function Y(t){return u.apply(this,arguments)}function u(){return u=s()(a()().mark(function t(r){return a()().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",(0,c.request)("/api/code/gen/synchDb/".concat(r),{method:"GET"}));case 1:case"end":return e.stop()}},t)})),u.apply(this,arguments)}function J(t){return G.apply(this,arguments)}function G(){return G=s()(a()().mark(function t(r){return a()().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",(0,c.request)("/api/code/gen/genCode/".concat(r),{method:"GET"}));case 1:case"end":return e.stop()}},t)})),G.apply(this,arguments)}function Q(t){return H.apply(this,arguments)}function H(){return H=s()(a()().mark(function t(r){return a()().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",(0,g.p6)("/api/code/gen/batchGenCode?tables=".concat(r)));case 1:case"end":return e.stop()}},t)})),H.apply(this,arguments)}function F(t){return T.apply(this,arguments)}function T(){return T=s()(a()().mark(function t(r){return a()().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",(0,c.request)("/api/code/gen/preview/".concat(r),{method:"GET",headers:{"Content-Type":"application/json;charset=UTF-8"}}));case 1:case"end":return e.stop()}},t)})),T.apply(this,arguments)}},30964:function(X,D,n){n.d(D,{p6:function(){return b},su:function(){return B}});var W=n(15009),R=n.n(W),U=n(97857),a=n.n(U),w=n(99289),s=n.n(w),c=n(76772),g={xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",zip:"application/zip"};function S(l,C){var p=document.createElement("a"),v=new Blob([l.data],{type:C}),h=new RegExp("filename=([^;]+\\.[^\\.;]+);*"),O=decodeURI(l.headers["content-disposition"]),m=h.exec(O),f=m?m[1]:"file";f=f.replace(/"/g,""),p.style.display="none",p.href=URL.createObjectURL(v),p.setAttribute("download",f),document.body.appendChild(p),p.click(),URL.revokeObjectURL(p.href),document.body.removeChild(p)}function b(l){(0,c.request)(l,{method:"GET",responseType:"blob",getResponse:!0}).then(function(C){S(C,g.zip)})}function B(l,C,p){return _.apply(this,arguments)}function _(){return _=s()(R()().mark(function l(C,p,v){return R()().wrap(function(O){for(;;)switch(O.prev=O.next){case 0:return O.abrupt("return",(0,c.request)(C,a()(a()({},p),{},{method:"POST",responseType:"blob"})).then(function(m){var f=document.createElement("a"),K=m;f.style.display="none",f.href=URL.createObjectURL(K),f.setAttribute("download",v),document.body.appendChild(f),f.click(),URL.revokeObjectURL(f.href),document.body.removeChild(f)}));case 1:case"end":return O.stop()}},l)})),_.apply(this,arguments)}function E(l){window.location.href="/api/common/download?fileName=".concat(encodeURI(l),"&delete=",!0)}}}]);
