diff --git a/ruoyi-admin/src/main/resources/static/2531.4e4f158d.async.js b/ruoyi-admin/src/main/resources/static/2531.4e4f158d.async.js
new file mode 100644
index 0000000..97cbba4
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/static/2531.4e4f158d.async.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkant_design_pro=self.webpackChunkant_design_pro||[]).push([[2531],{12531:function(A,y,a){a.r(y),a.d(y,{addData:function(){return c},batchGenCode:function(){return G},genCode:function(){return I},getGenCode:function(){return j},getGenCodeList:function(){return w},importTables:function(){return p},previewCode:function(){return B},queryTableList:function(){return M},removeData:function(){return T},syncDbInfo:function(){return W},updateData:function(){return l}});var E=a(97857),g=a.n(E),v=a(15009),r=a.n(v),P=a(99289),o=a.n(P),_=a(76772),C=a(30964);function w(n){return f.apply(this,arguments)}function f(){return f=o()(r()().mark(function n(t){var s;return r()().wrap(function(d){for(;;)switch(d.prev=d.next){case 0:return s=new URLSearchParams(t).toString(),d.abrupt("return",(0,_.request)("/api/code/gen/list?".concat(s),{data:t,method:"get",headers:{"Content-Type":"application/json;charset=UTF-8"}}));case 2:case"end":return d.stop()}},n)})),f.apply(this,arguments)}function j(n){return h.apply(this,arguments)}function h(){return h=o()(r()().mark(function n(t){return r()().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",(0,_.request)("/api/code/gen/".concat(t),{method:"get",headers:{"Content-Type":"application/json;charset=UTF-8"}}));case 1:case"end":return e.stop()}},n)})),h.apply(this,arguments)}function M(n){return i.apply(this,arguments)}function i(){return i=o()(r()().mark(function n(t){var s;return r()().wrap(function(d){for(;;)switch(d.prev=d.next){case 0:return s=new URLSearchParams(t).toString(),d.abrupt("return",(0,_.request)("/api/code/gen/db/list?".concat(s),{data:t,method:"get",headers:{"Content-Type":"application/json;charset=UTF-8"}}));case 2:case"end":return d.stop()}},n)})),i.apply(this,arguments)}function p(n){return u.apply(this,arguments)}function u(){return u=o()(r()().mark(function n(t){return r()().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",(0,_.request)("/api/code/gen/importTable?tables=".concat(t),{method:"POST",headers:{"Content-Type":"application/json;charset=UTF-8"}}));case 1:case"end":return e.stop()}},n)})),u.apply(this,arguments)}function T(n){return b.apply(this,arguments)}function b(){return b=o()(r()().mark(function n(t){return r()().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",(0,_.request)("/api/code/gen/".concat(t.ids),{method:"delete",headers:{"Content-Type":"application/json;charset=UTF-8"}}));case 1:case"end":return e.stop()}},n)})),b.apply(this,arguments)}function c(n){return m.apply(this,arguments)}function m(){return m=o()(r()().mark(function n(t){return r()().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",(0,_.request)("/api/code/gen",{method:"POST",data:g()({},t)}));case 1:case"end":return e.stop()}},n)})),m.apply(this,arguments)}function l(n){return D.apply(this,arguments)}function D(){return D=o()(r()().mark(function n(t){return r()().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",(0,_.request)("/api/code/gen",{method:"PUT",data:g()({},t)}));case 1:case"end":return e.stop()}},n)})),D.apply(this,arguments)}function W(n){return O.apply(this,arguments)}function O(){return O=o()(r()().mark(function n(t){return r()().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",(0,_.request)("/api/code/gen/synchDb/".concat(t),{method:"GET"}));case 1:case"end":return e.stop()}},n)})),O.apply(this,arguments)}function I(n){return L.apply(this,arguments)}function L(){return L=o()(r()().mark(function n(t){return r()().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",(0,_.request)("/api/code/gen/genCode/".concat(t),{method:"GET"}));case 1:case"end":return e.stop()}},n)})),L.apply(this,arguments)}function G(n){return U.apply(this,arguments)}function U(){return U=o()(r()().mark(function n(t){return r()().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",(0,C.p6)("/api/code/gen/batchGenCode?tables=".concat(t)));case 1:case"end":return e.stop()}},n)})),U.apply(this,arguments)}function B(n){return R.apply(this,arguments)}function R(){return R=o()(r()().mark(function n(t){return r()().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",(0,_.request)("/api/code/gen/preview/".concat(t),{method:"GET",headers:{"Content-Type":"application/json;charset=UTF-8"}}));case 1:case"end":return e.stop()}},n)})),R.apply(this,arguments)}},30964:function(A,y,a){a.d(y,{p6:function(){return f},su:function(){return j}});var E=a(15009),g=a.n(E),v=a(97857),r=a.n(v),P=a(99289),o=a.n(P),_=a(76772),C={xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",zip:"application/zip"};function w(i,p){var u=document.createElement("a"),T=new Blob([i.data],{type:p}),b=new RegExp("filename=([^;]+\\.[^\\.;]+);*"),c=decodeURI(i.headers["content-disposition"]),m=b.exec(c),l=m?m[1]:"file";l=l.replace(/"/g,""),u.style.display="none",u.href=URL.createObjectURL(T),u.setAttribute("download",l),document.body.appendChild(u),u.click(),URL.revokeObjectURL(u.href),document.body.removeChild(u)}function f(i){(0,_.request)(i,{method:"GET",responseType:"blob",getResponse:!0}).then(function(p){w(p,C.zip)})}function j(i,p,u){return h.apply(this,arguments)}function h(){return h=o()(g()().mark(function i(p,u,T){return g()().wrap(function(c){for(;;)switch(c.prev=c.next){case 0:return c.abrupt("return",(0,_.request)(p,r()(r()({},u),{},{method:"POST",responseType:"blob"})).then(function(m){var l=document.createElement("a"),D=m;l.style.display="none",l.href=URL.createObjectURL(D),l.setAttribute("download",T),document.body.appendChild(l),l.click(),URL.revokeObjectURL(l.href),document.body.removeChild(l)}));case 1:case"end":return c.stop()}},i)})),h.apply(this,arguments)}function M(i){window.location.href="/api/common/download?fileName=".concat(encodeURI(i),"&delete=",!0)}}}]);
