Commit e7e48c89 authored by wty's avatar wty

dev阿波罗实例对接

parent cfd32603
{ {
"files": { "files": {
"main.css": "/static/css/main.63c35fee.chunk.css", "main.css": "/static/css/main.63c35fee.chunk.css",
"main.js": "/static/js/main.7d258f7c.chunk.js", "main.js": "/static/js/main.b9736c6f.chunk.js",
"main.js.map": "/static/js/main.7d258f7c.chunk.js.map", "main.js.map": "/static/js/main.b9736c6f.chunk.js.map",
"runtime-main.js": "/static/js/runtime-main.4628cb4f.js", "runtime-main.js": "/static/js/runtime-main.4628cb4f.js",
"runtime-main.js.map": "/static/js/runtime-main.4628cb4f.js.map", "runtime-main.js.map": "/static/js/runtime-main.4628cb4f.js.map",
"static/css/2.1f1ea42e.chunk.css": "/static/css/2.1f1ea42e.chunk.css", "static/css/2.1f1ea42e.chunk.css": "/static/css/2.1f1ea42e.chunk.css",
...@@ -24,6 +24,6 @@ ...@@ -24,6 +24,6 @@
"static/css/2.1f1ea42e.chunk.css", "static/css/2.1f1ea42e.chunk.css",
"static/js/2.44df36db.chunk.js", "static/js/2.44df36db.chunk.js",
"static/css/main.63c35fee.chunk.css", "static/css/main.63c35fee.chunk.css",
"static/js/main.7d258f7c.chunk.js" "static/js/main.b9736c6f.chunk.js"
] ]
} }
\ No newline at end of file
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>React App</title><link href="/static/css/2.1f1ea42e.chunk.css" rel="stylesheet"><link href="/static/css/main.63c35fee.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,i,a=r[0],c=r[1],l=r[2],s=0,p=[];s<a.length;s++)i=a[s],Object.prototype.hasOwnProperty.call(o,i)&&o[i]&&p.push(o[i][0]),o[i]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(f&&f(r);p.length;)p.shift()();return u.push.apply(u,l||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,a=1;a<t.length;a++){var c=t[a];0!==o[c]&&(n=!1)}n&&(u.splice(r--,1),e=i(i.s=t[0]))}return e}var n={},o={1:0},u=[];function i(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var u,a=document.createElement("script");a.charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.src=function(e){return i.p+"static/js/"+({}[e]||e)+"."+{3:"4971491c"}[e]+".chunk.js"}(e);var c=new Error;u=function(r){a.onerror=a.onload=null,clearTimeout(l);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),u=r&&r.target&&r.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,t[1](c)}o[e]=void 0}};var l=setTimeout((function(){u({type:"timeout",target:a})}),12e4);a.onerror=a.onload=u,document.head.appendChild(a)}return Promise.all(r)},i.m=e,i.c=n,i.d=function(e,r,t){i.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,r){if(1&r&&(e=i(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)i.d(t,n,function(r){return e[r]}.bind(null,n));return t},i.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(r,"a",r),r},i.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},i.p="/",i.oe=function(e){throw console.error(e),e};var a=this.webpackJsonpdui123=this.webpackJsonpdui123||[],c=a.push.bind(a);a.push=r,a=a.slice();for(var l=0;l<a.length;l++)r(a[l]);var f=c;t()}([])</script><script src="/static/js/2.44df36db.chunk.js"></script><script src="/static/js/main.7d258f7c.chunk.js"></script></body></html> <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>React App</title><link href="/static/css/2.1f1ea42e.chunk.css" rel="stylesheet"><link href="/static/css/main.63c35fee.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,i,a=r[0],c=r[1],l=r[2],s=0,p=[];s<a.length;s++)i=a[s],Object.prototype.hasOwnProperty.call(o,i)&&o[i]&&p.push(o[i][0]),o[i]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(f&&f(r);p.length;)p.shift()();return u.push.apply(u,l||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,a=1;a<t.length;a++){var c=t[a];0!==o[c]&&(n=!1)}n&&(u.splice(r--,1),e=i(i.s=t[0]))}return e}var n={},o={1:0},u=[];function i(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var u,a=document.createElement("script");a.charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.src=function(e){return i.p+"static/js/"+({}[e]||e)+"."+{3:"4971491c"}[e]+".chunk.js"}(e);var c=new Error;u=function(r){a.onerror=a.onload=null,clearTimeout(l);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),u=r&&r.target&&r.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,t[1](c)}o[e]=void 0}};var l=setTimeout((function(){u({type:"timeout",target:a})}),12e4);a.onerror=a.onload=u,document.head.appendChild(a)}return Promise.all(r)},i.m=e,i.c=n,i.d=function(e,r,t){i.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,r){if(1&r&&(e=i(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)i.d(t,n,function(r){return e[r]}.bind(null,n));return t},i.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(r,"a",r),r},i.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},i.p="/",i.oe=function(e){throw console.error(e),e};var a=this.webpackJsonpdui123=this.webpackJsonpdui123||[],c=a.push.bind(a);a.push=r,a=a.slice();for(var l=0;l<a.length;l++)r(a[l]);var f=c;t()}([])</script><script src="/static/js/2.44df36db.chunk.js"></script><script src="/static/js/main.b9736c6f.chunk.js"></script></body></html>
\ No newline at end of file \ No newline at end of file
(this.webpackJsonpdui123=this.webpackJsonpdui123||[]).push([[0],{173:function(e,t,n){},174:function(e,t,n){},176:function(e,t,n){},177:function(e,t,n){},178:function(e,t,n){},179:function(e,t,n){},250:function(e,t,n){},251:function(e,t,n){},252:function(e,t,n){},269:function(e,t,n){},270:function(e,t,n){},271:function(e,t,n){},279:function(e,t,n){"use strict";n.r(t);var c=n(0),i=n.n(c),a=n(28),o=n.n(a),l=n(17),r=n(158),s=n.n(r),d=n(133),u=n.n(d),j=(n(171),n(172),n(173),n(174),n(77)),p=n(21),b=n(40),m={toolBox:null,type:null,childType:null,userInfo:null,needUpdateIndex:!1,typeId:"follow",childTypeId:"all"};!function e(t){return Object.getOwnPropertyNames(t).forEach((function(n){var c=t[n];"object"==typeof c&&null!==c&&e(c)})),Object.freeze(t)}(m);var O=function(e,t){switch(console.table(t,["dataCenter\u7684dispatch"]),t.type){case"UPDATE_DATA":return Object.assign({},e,Object(b.a)({},t.data));case"NEED_UPDATE_INDEX":return Object.assign({},e,{needUpdateIndex:!e.needUpdateIndex});case"CHANGE_TYPE":return Object.assign({},e,{typeId:t.typeId});case"CHANGE_CHILD_TYPE":return Object.assign({},e,{childTypeId:t.childTypeId});default:return e}},A={domain:"http://"+window.location.hostname+":3000"},f=function(e){return{type:"CHANGE_TYPE",typeId:e}},g=n(6),h=Object(c.createContext)({}),y=Object(c.createContext)({});var I=function(e){var t=Object(c.useReducer)(O,m,(function(){return m})),n=Object(p.a)(t,2),i=n[0],a=n[1];return Object(g.jsx)(h.Provider,{value:{dataCenter:i,dispatch:a,fetchData:function(e,t,n){return fetch(function(e,t){if(t){var n=Object.keys(t).map((function(e,n){return 0===n?"?"+e+"="+t[e]:"&"+e+"="+t[e]})).join("");return console.log("\u53d1\u9001\u8bf7\u6c42\uff1a",A.domain+e+n),A.domain+e+n}return A.domain+e}(e,t),{credentials:"include"}).then((function(e){return e.json()})).then((function(e){if(console.log(e),!e.success)throw e;var t;return n&&a((t=Object(j.a)({},n,e.data),{type:"UPDATE_DATA",data:Object(b.a)({},t)})),e})).catch((function(e){throw console.error(e),e}))}},children:e.children})},x=n.p+"static/media/logo.c725c5d1.png",v=(n(176),n(177),function(e){var t=Object(c.useContext)(h),n=t.dataCenter,i=t.dispatch,a=e.childTypeId,o=e.childTypeName,l=["child-type-item"];a===n.childTypeId&&l.push("child-type-item-selected");return Object(g.jsx)("div",{className:l.join(" "),onClick:function(){console.log(a),i(function(e){return{type:"CHANGE_CHILD_TYPE",childTypeId:e}}(a))},children:o})});var E=function(e){var t,n,i=Object(c.useContext)(h),a=i.dataCenter,o=i.dispatch;return Object(g.jsxs)(g.Fragment,{children:[Object(g.jsxs)("div",{className:"tab-tool-type",children:[Object(g.jsx)("div",{className:"follow"===a.typeId?"item-tool-type item-tool-type-selected":"item-tool-type",onClick:function(){return o(f("follow"))},children:"\u6211\u7684\u6536\u85cf"}),(null===a||void 0===a||null===(t=a.type)||void 0===t?void 0:t.length)>0&&a.type.map((function(e){var t=["item-tool-type "];return e.typeId===a.typeId&&t.push("item-tool-type-selected"),Object(g.jsx)("div",{className:t.join(""),onClick:function(){return o(f(e.typeId))},children:e.typeName},e.typeId)}))]}),Object(g.jsxs)("div",{className:"child-type",children:[Object(g.jsx)(v,{childTypeId:"all",childTypeName:"\u5168\u90e8"},"all"),(null===a||void 0===a||null===(n=a.childType)||void 0===n?void 0:n.length)>0&&(null===a||void 0===a?void 0:a.childType.map((function(e){return Object(g.jsx)(v,{childTypeId:e.childTypeId,childTypeName:e.childTypeName},e.childTypeId)})))]})]})},C=(n(178),n(179),"data:image/png;base64,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"),T="data:image/png;base64,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",k=n.p+"static/media/setting.6a716d85.svg",w=n.p+"static/media/trash.780a90e8.svg",N=n.p+"static/media/dragIcon.268403b1.svg",D=n(94),B=n(282),R=n(162),S=n(285),J=n(284),q=D.a.Option,G=function(e){var t,n,i,a=e.visible,o=e.onCancel,l=e.data,r=B.a.useForm(),s=Object(p.a)(r,1)[0],d=Object(c.useContext)(h),u=d.fetchData,j=d.dataCenter,m=d.dispatch;return Object(c.useEffect)((function(){var e;(null===j||void 0===j?void 0:j.type)&&u("/query/queryChildType",{typeId:null===j||void 0===j||null===(e=j.type[0])||void 0===e?void 0:e.typeId},"childType").then((function(e){console.log(e)}))}),[]),Object(g.jsx)(S.a,{visible:a,title:l?"\u4fee\u6539\u5de5\u5177\u7bb1":"\u65b0\u5efa\u5de5\u5177\u7bb1",okText:"\u786e\u5b9a",cancelText:"\u53d6\u6d88",onCancel:o,onOk:function(){s.validateFields().then((function(e){!function(e){var t={toolBoxName:e.name,toolBoxIcon:e.icon,toolBoxDesc:e.depict,toolBoxUrl:e.url};l?u("/update/updateToolBox",t).then((function(e){e.success?(R.b.success("\u4fee\u6539\u6210\u529f"),m({type:"NEED_UPDATE_INDEX"}),o()):R.b.error("\u65b0\u5efa\u5931\u8d25")})):(t=Object(b.a)(Object(b.a)({},t),{},{typeId:e.type,childTypeId:e.childType}),console.log(t),u("/add/addToolBox",t).then((function(e){e.success?(R.b.success("\u65b0\u5efa\u6210\u529f"),m({type:"NEED_UPDATE_INDEX"}),o()):R.b.error("\u65b0\u5efa\u5931\u8d25")})))}(e)})).catch((function(e){console.log("Validate Failed:",e)}))},children:Object(g.jsxs)(B.a,Object(b.a)(Object(b.a)({form:s},{labelCol:{span:4},wrapperCol:{span:18}}),{},{name:"form_in_modal",initialValues:l?{name:l.toolBoxName,icon:l.toolBoxIcon,url:l.toolBoxUrl,depict:l.toolBoxDesc}:{type:(null===j||void 0===j?void 0:j.type)&&(null===j||void 0===j||null===(t=j.type[0])||void 0===t?void 0:t.typeId)},children:[Object(g.jsx)(B.a.Item,{name:"name",label:"\u540d\u79f0",rules:[{required:!0,message:"\u8bf7\u8f93\u5165\u540d\u79f0!"}],children:Object(g.jsx)(J.a,{placeholder:"\u8bf7\u8f93\u5165\u540d\u79f0"})}),Object(g.jsx)(B.a.Item,{name:"icon",label:"\u56fe\u6807",rules:[{required:!0,message:"\u8bf7\u8f93\u5165\u56fe\u6807url!"}],children:Object(g.jsx)(J.a,{placeholder:"\u8bf7\u8f93\u5165\u56fe\u6807url"})}),Object(g.jsx)(B.a.Item,{name:"depict",label:"\u63cf\u8ff0",rules:[{required:!0,message:"\u8bf7\u8f93\u5165\u63cf\u8ff0!"}],children:Object(g.jsx)(J.a,{placeholder:"\u8bf7\u8f93\u5165\u63cf\u8ff0"})}),Object(g.jsx)(B.a.Item,{name:"url",label:"\u94fe\u63a5",rules:[{required:!0,message:"\u8bf7\u8f93\u5165\u94fe\u63a5!"}],children:Object(g.jsx)(J.a,{placeholder:"\u8bf7\u8f93\u5165\u94fe\u63a5"})}),!l&&Object(g.jsx)(B.a.Item,{name:"type",label:"\u7c7b\u578b",rules:[{required:!0,message:"\u8bf7\u9009\u62e9\u7c7b\u578b!"}],children:Object(g.jsx)(D.a,{placeholder:"\u8bf7\u9009\u62e9\u7c7b\u578b",onChange:function(e){s.setFieldsValue({type:e}),u("/query/queryChildType",{typeId:e},"childType").then((function(e){console.log(e)})),console.log(j)},children:(null===j||void 0===j||null===(n=j.type)||void 0===n?void 0:n.length)&&(null===j||void 0===j?void 0:j.type.map((function(e){return Object(g.jsx)(q,{value:e.typeId,children:e.typeName},e.typeId)})))})}),!l&&(null===j||void 0===j?void 0:j.childType)&&Object(g.jsx)(B.a.Item,{name:"childType",label:"\u5b50\u7c7b\u578b",children:Object(g.jsx)(D.a,{placeholder:"\u8bf7\u9009\u62e9\u5b50\u7c7b\u578b",onChange:function(e){s.setFieldsValue({childType:e})},allowClear:!0,children:(null===j||void 0===j||null===(i=j.childType)||void 0===i?void 0:i.length)&&(null===j||void 0===j?void 0:j.childType.map((function(e){return Object(g.jsx)(q,{value:e.childTypeId,children:e.childTypeName},e.childTypeId)})))})})]}))})};var K=function(e){var t=Object(c.useState)(!1),n=Object(p.a)(t,2),i=n[0],a=n[1],o=Object(c.useContext)(h).fetchData,l=(Object(c.useContext)(y).showPop,e.value),r=l.toolBoxIcon,s=l.toolBoxName,d=l.toolBoxDesc,u=l.toolBoxUrl,j=l.follow,b=l.toolBoxId,m=Object(c.useState)(r),O=Object(p.a)(m,2),A=O[0],f=O[1],I=function(e){window.location.href=e};return Object(g.jsxs)("div",{className:"content-item",children:[Object(g.jsxs)("div",{className:"content-adminTool",children:[Object(g.jsx)("img",{src:N,alt:""}),Object(g.jsx)("img",{src:k,alt:"",onClick:function(){return a(!0)}}),Object(g.jsx)("img",{src:w,alt:"",onClick:function(){return function(e){o("/delete/deleteToolBoxById",{toolBoxId:e})}(b)}})]}),Object(g.jsxs)("div",{className:"item-icon",onClick:function(){return I(u)},children:[!A&&Object(g.jsx)("div",{className:"defaultIcon",children:s[0]}),A&&Object(g.jsx)("img",{src:A,alt:"",onError:function(e){return f(null)}})]}),Object(g.jsx)("div",{className:"item-name",onClick:function(){return I(u)},children:s}),Object(g.jsx)("div",{className:"item-desc",children:d}),Object(g.jsx)("a",{className:"item-url",href:u,children:u}),Object(g.jsxs)("div",{className:"follow",children:[Object(g.jsx)("img",{className:"icon-follow",src:j?T:C,alt:""}),"\u6536\u85cf"]}),i&&Object(g.jsx)(G,{visible:i,onCancel:function(){return a(!1)},data:e.value})]})};n(250);var F=function(e){var t=Object(c.useContext)(h),n=t.dataCenter,i=t.fetchData,a=e.value,o=a.toolBoxIcon,l=a.toolBoxName,r=a.toolBoxDesc,s=a.toolBoxUrl,d=a.toolBoxId,u=Object(c.useState)(!1),j=Object(p.a)(u,2),b=j[0],m=j[1],O=Object(c.useState)(o),A=Object(p.a)(O,2),f=A[0],y=A[1],I=function(e){return window.location.href=e};return Object(c.useEffect)((function(){var e;(null===(e=n.userInfo)||void 0===e?void 0:e.follow.includes(d))?m(!0):m(!1)}),[n.toolBox,n.userInfo]),Object(g.jsxs)("div",{className:"content-item",children:[Object(g.jsxs)("div",{className:"item-icon",onClick:function(){return I(s)},children:[!f&&Object(g.jsx)("div",{className:"defaultIcon",children:l[0]}),f&&Object(g.jsx)("img",{src:f,alt:"",onError:function(e){return y(null)}})]}),Object(g.jsx)("div",{className:"item-name",onClick:function(){return I(s)},children:l}),Object(g.jsx)("div",{className:"item-desc",children:r}),Object(g.jsx)("a",{className:"item-url",href:s,children:s}),Object(g.jsxs)("div",{className:"follow",children:[Object(g.jsx)("img",{className:"icon-follow",src:b?T:C,alt:"",onClick:function(){return function(){var e=n.userInfo.follow.slice();if(b){var t=e.indexOf(d);e.splice(t,1)}else e.push(d);console.log({follow:JSON.stringify(e),userId:n.userInfo.uid}),i("/users/follow",{follow:JSON.stringify(e),userId:n.userInfo.uid}).then((function(){return i("/users/getUser",{userId:100001},"userInfo")}))}()}}),"\u6536\u85cf"]})]})};var U=function(e){var t,n,i=Object(c.useContext)(h).dataCenter;return Object(g.jsx)("div",{className:"content",children:(null===(t=i.toolBox)||void 0===t?void 0:t.length)?null===i||void 0===i||null===(n=i.toolBox)||void 0===n?void 0:n.filter((function(e){return"all"===i.childTypeId||e.childTypeId===i.childTypeId})).map((function(e){return Object(g.jsx)(K,{value:e},e.toolBoxId)})):"\u6ca1\u6709\u6570\u636e\u4e86\uff01"})},z=(n(251),n(31)),X=(n(252),n(152)),M=(n(253),n(254),n(146),n(255),n(257),n(258),n(52),n(259),n(260),n(261),n(262),n(263),D.a.Option,function(e){var t=e.visible,n=e.onCancel,i=e.data,a=Object(c.useState)(""),o=Object(p.a)(a,2),l=o[0],r=o[1],s=Object(c.useState)(""),d=Object(p.a)(s,2),u=d[0],j=d[1],b=Object(c.useState)(""),m=Object(p.a)(b,2),O=m[0],f=(m[1],Object(c.useContext)(h)),y=f.fetchData,I=f.dataCenter;console.log(i);return Object(c.useEffect)((function(){i&&j(i.pageName)}),[i]),Object(g.jsxs)(S.a,{visible:t,title:"\u53d1\u5e03",okText:"\u53d1\u5e03",cancelText:"\u53d6\u6d88",onCancel:n,onOk:function(e){console.log(l),l&&u?i?fetch("".concat(A.domain,"/page/updatePage"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({pageId:i.pageId,pageName:u,code:l})}).then((function(e){return e.json()})).then((function(e){e.success?(n(),R.b.success("\u66ff\u6362\u6210\u529f\uff01"),(null===I||void 0===I?void 0:I.type)&&y("/page/queryPage",{},"queryPage").then((function(e){}))):R.b.error("\u66ff\u6362\u5931\u8d25")})):fetch("".concat(A.domain,"/page/addPage"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({pageName:u,code:l})}).then((function(e){return e.json()})).then((function(e){e.success?(n(),R.b.success("\u53d1\u5e03\u6210\u529f\uff01"),(null===I||void 0===I?void 0:I.type)&&y("/page/queryPage",{},"queryPage").then((function(e){}))):R.b.error(e.error||"\u53d1\u5e03\u5931\u8d25")})):R.b.error("\u8bf7\u8865\u5168\u4fe1\u606f\uff01")},width:"1000px",children:[Object(g.jsx)(B.a.Item,{name:"pageName",label:"\u9875\u9762\u540d\u79f0",rules:[{required:!0,message:"\u8bf7\u8f93\u5165\u9875\u9762\u540d\u79f0!"}],children:Object(g.jsx)(J.a,{placeholder:"\u8bf7\u8f93\u5165\u9875\u9762\u540d\u79f0",defaultValue:(null===i||void 0===i?void 0:i.pageName)?i.pageName:u,onChange:function(e){j(e.target.value)}})}),Object(g.jsx)(B.a.Item,{name:"type",label:"\u5e03\u5c40\u4ee3\u7801",rules:[{required:!0,message:"\u8bf7\u8f93\u5165\u9875\u9762\u540d\u79f0!"}],children:Object(g.jsx)("div",{className:"codeMain",children:Object(g.jsx)(X.UnControlled,{onChange:function(e,t,n){r(n)},value:O,options:{styleActiveLine:!0,lineNumbers:!0,theme:"monokai",tabSize:2,keyMap:"sublime",mode:"text/javascript",smartIndent:!0,lineWrapping:!0,autofocus:!0}})})})]})}),P=n(283),Q=n(116),Z=D.a.Option,W=(P.a.TabPane,function(e){var t,n=e.visible,a=e.onCancel,o=e.queryData,l=e.data;console.log(l);var r=B.a.useForm(),s=Object(p.a)(r,1)[0];l&&s.setFieldsValue({typeName:l.typeName});var d=Object(c.useContext)(h),u=d.fetchData,j=d.dataCenter,m=d.dispatch,O=i.a.useState(1),A=Object(p.a)(O,2),f=A[0],y=A[1];return Object(g.jsx)(S.a,{visible:n,title:"".concat(l?"\u4fee\u6539":"\u65b0\u5efa","\u7c7b\u578b"),okText:"\u786e\u5b9a",cancelText:"\u53d6\u6d88",onCancel:a,onOk:function(){s.validateFields().then((function(e){!function(e){if(l){console.log(l);var t={typeId:"",typeName:""};t=l.isRemove?{childTypeId:l.typeId,childTypeName:e.typeName}:{typeId:l.typeId,typeName:e.typeName},u("/typeManage/updateType",t).then((function(e){e.success&&(R.b.success("\u4fee\u6539\u6210\u529f"),m({type:"NEED_UPDATE_INDEX"}),o(),a())}))}else console.log(e),u("/add/addType",e).then((function(e){e.success&&(R.b.success("\u65b0\u5efa\u6210\u529f"),m({type:"NEED_UPDATE_INDEX"}),a())}))}(e)})).catch((function(e){console.log("Validate Failed:",e)}))},children:Object(g.jsxs)(B.a,Object(b.a)(Object(b.a)({form:s},{labelCol:{span:4},wrapperCol:{span:18}}),{},{name:"form_in_modal",initialValues:{modifier:"public","radio-group":1},children:[!l&&Object(g.jsx)(B.a.Item,{name:"radio-group",label:"\u7c7b\u578b",children:Object(g.jsxs)(Q.a.Group,{onChange:function(e){console.log("radio checked",e.target.value),y(e.target.value)},value:f,children:[Object(g.jsx)(Q.a,{value:1,children:"\u7236\u7c7b\u578b"}),Object(g.jsx)(Q.a,{value:2,children:"\u5b50\u7c7b\u578b"})]})}),1===f||l?Object(g.jsx)(B.a.Item,{name:"typeName",label:"".concat(l?"":"\u7236","\u7c7b\u578b"),rules:[{required:!0,message:"\u8bf7\u8f93\u5165\u7c7b\u578b\u540d\u79f0!"}],children:Object(g.jsx)(J.a,{placeholder:"\u8bf7\u8f93\u5165\u7c7b\u578b\u540d\u79f0"})}):Object(g.jsxs)(g.Fragment,{children:[Object(g.jsx)(B.a.Item,{name:"typeId",label:"\u7236\u7c7b\u578b",hasFeedback:!0,rules:[{required:!0,message:"\u8bf7\u9009\u62e9\u7236\u7c7b\u578b!"}],children:Object(g.jsx)(D.a,{placeholder:"\u8bf7\u9009\u62e9\u7236\u7c7b\u578b",onChange:function(e){s.setFieldsValue({typeId:e})},children:(null===j||void 0===j||null===(t=j.type)||void 0===t?void 0:t.length)&&(null===j||void 0===j?void 0:j.type.map((function(e){return Object(g.jsx)(Z,{value:e.typeId,children:e.typeName},e.typeId)})))})}),Object(g.jsx)(B.a.Item,{name:"childTypeName",label:"\u5b50\u7c7b\u578b",rules:[{required:!0,message:"\u8bf7\u8f93\u5165\u7c7b\u578b\u540d\u79f0!"}],children:Object(g.jsx)(J.a,{placeholder:"\u8bf7\u8f93\u5165\u7c7b\u578b\u540d\u79f0"})})]})]}))})}),L=n(286),V=n(281);var Y=function(e){var t=e.visible,n=e.onCancel,i=(e.onPublish,Object(c.useState)(!1)),a=Object(p.a)(i,2),o=a[0],l=a[1],r=Object(c.useState)(""),s=Object(p.a)(r,2),d=s[0],u=s[1],j=Object(c.useContext)(h),b=j.fetchData,m=j.dataCenter,O=[{title:"\u9875\u9762Id",dataIndex:"pageId",width:150,align:"center"},{title:"\u9875\u9762\u540d\u79f0",dataIndex:"pageName",width:200,align:"center"},{title:"\u9875\u9762Url",dataIndex:"pageUrl",width:300,align:"center",render:function(e,t){return Object(g.jsx)(L.b,{size:"middle",children:Object(g.jsx)("a",{href:t.pageUrl,children:t.pageUrl})})}},{title:"\u64cd\u4f5c",key:"action",align:"center",width:100,render:function(e,t){return Object(g.jsx)(L.b,{size:"middle",children:Object(g.jsx)("a",{onClick:function(){return e=t,console.log(e),u(e),void l(!0);var e},children:"\u66ff\u6362"})})}}];return Object(c.useEffect)((function(){console.log(m),(null===m||void 0===m?void 0:m.type)&&b("/page/queryPage",{},"queryPage").then((function(e){}))}),[]),Object(g.jsxs)(g.Fragment,{children:[Object(g.jsx)(S.a,{visible:t,title:"\u9875\u9762\u7ba1\u7406",okText:"\u786e\u5b9a",cancelText:"\u53d6\u6d88",width:"1000px",onCancel:n,onOk:n,children:Object(g.jsx)(V.a,{columns:O,dataSource:(null===m||void 0===m?void 0:m.queryPage)&&m.queryPage,pagination:{pageSize:10},size:"middle"})}),o&&Object(g.jsx)(M,{visible:o,onCancel:function(){return l(!1)},data:d})]})},H=n(73),_=n(287);H.a,H.a.Item,H.a.Item;var $=function(e){var t=e.visible,n=e.onCancel,i=Object(c.useState)(!1),a=Object(p.a)(i,2),o=a[0],l=a[1],r=Object(c.useState)(""),s=Object(p.a)(r,2),d=s[0],u=s[1],j=Object(c.useState)(""),b=Object(p.a)(j,2),m=b[0],O=b[1],A=Object(c.useContext)(h),f=A.fetchData,y=A.dataCenter,I=A.dispatch,x=function e(t,n){return t.map((function(t,c){var i=n(t);return t.children&&(i.children=e(t.children,(function(e){return{isRemove:!0,key:e.childTypeId,typeId:e.childTypeId,typeName:e.childTypeName}}))),i}))},v=function(){(null===y||void 0===y?void 0:y.type)&&f("/typeManage/queryTypeForManage",{},"childTypeData").then((function(e){var t=x(e.data,(function(e){return{key:e.typeId,typeId:e.typeId,typeName:e.typeName}}));u(t)}))};Object(c.useEffect)((function(){v()}),[]);var E=[{title:"\u7c7b\u578b\u540d",width:100,dataIndex:"typeName",key:"typeName"},{title:"Id",width:100,dataIndex:"typeId",align:"center",key:"typeId"},{title:"\u64cd\u4f5c",width:100,key:"operation",align:"center",render:function(e,t){return Object(g.jsxs)(L.b,{size:"middle",children:[t.isRemove&&Object(g.jsx)(_.a,{title:"\u786e\u5b9a\u5220\u9664\u5417\uff1f",okText:"\u786e\u5b9a",cancelText:"\u53d6\u6d88",onConfirm:function(){f("/typeManage/deleteChildType",{childTypeId:t.typeId}).then((function(e){e.success?(R.b.success("\u522a\u9664\u6210\u529f"),I({type:"NEED_UPDATE_INDEX"}),v()):R.b.error("\u522a\u9664\u5931\u8d25")}))},children:Object(g.jsx)("a",{href:"#",children:"\u5220\u9664"})}),Object(g.jsx)("a",{href:"#",onClick:function(){return O(t),void l(!0)},children:"\u4fee\u6539"})]})}}];return Object(g.jsxs)(S.a,{visible:t,title:"\u7c7b\u578b\u7ba1\u7406",okText:"\u786e\u5b9a",cancelText:"\u53d6\u6d88",width:"1000px",onCancel:n,onOk:n,children:[Object(g.jsx)(V.a,{columns:E,dataSource:d}),o&&Object(g.jsx)(W,{visible:o,onCancel:function(){return l(!1)},queryData:function(){return v()},data:m})]})};var ee=function(){var e=Object(c.useState)(!1),t=Object(p.a)(e,2),n=t[0],i=t[1],a=Object(c.useState)(!1),o=Object(p.a)(a,2),l=o[0],r=o[1],s=Object(c.useState)(!1),d=Object(p.a)(s,2),u=d[0],j=d[1],b=Object(c.useState)(!1),m=Object(p.a)(b,2),O=m[0],A=m[1],f=Object(c.useState)(!1),h=Object(p.a)(f,2),y=h[0],I=h[1];return Object(g.jsxs)("div",{className:"admin",children:[Object(g.jsx)(z.a,{onClick:function(){return i(!0)},children:"\u65b0\u5efa\u5de5\u5177\u76d2"}),Object(g.jsx)(z.a,{onClick:function(){return j(!0)},children:"\u65b0\u5efa\u7c7b\u578b"}),Object(g.jsx)(z.a,{onClick:function(){return r(!0)},children:"\u53d1\u5e03"}),Object(g.jsx)(z.a,{onClick:function(){return A(!0)},children:"\u9875\u9762\u7ba1\u7406"}),Object(g.jsx)(z.a,{onClick:function(){return I(!0)},children:"\u7c7b\u578b\u7ba1\u7406"}),n&&Object(g.jsx)(G,{visible:n,onCancel:function(){return i(!1)}}),l&&Object(g.jsx)(M,{visible:l,onCancel:function(){return r(!1)}}),u&&Object(g.jsx)(W,{visible:u,onCancel:function(){return j(!1)}}),O&&Object(g.jsx)(Y,{visible:O,onCancel:function(){return A(!1)}}),y&&Object(g.jsx)($,{visible:y,onCancel:function(){return I(!1)}})]})};var te=function(){var e,t=Object(c.useState)(),n=Object(p.a)(t,2),i=n[0],a=n[1],o=Object(c.useContext)(h),l=o.fetchData,r=o.dataCenter,s=o.dispatch;return Object(c.useEffect)((function(){l("/query/queryType",{},"type").then((function(){return l("/query/queryChildType",{typeId:r.typeId},"childType")})).then((function(){return s({type:"NEED_UPDATE_INDEX"})}))}),[r.typeId]),Object(c.useEffect)((function(){if(r.needUpdateIndex){var e="all"===r.typeId?{}:"follow"===r.typeId?{isFollow:!0,typeId:JSON.stringify(r.userInfo.follow)}:{typeId:r.typeId};l("/query/queryToolBox",e,"toolBox").then((function(){return s({type:"NEED_UPDATE_INDEX"})}))}}),[r.needUpdateIndex]),Object(c.useEffect)((function(){l("/users/getUser",{userId:"100001"},"userInfo").catch((function(e){return 70001===e.code&&(window.location.href="/login")}))}),[]),Object(g.jsx)(y.Provider,{value:{hidePop:function(){return a("")},showPop:function(e){a(e)}},children:Object(g.jsxs)("div",{className:"index",children:[Object(g.jsx)("div",{className:"welcome-top",children:Object(g.jsxs)("span",{children:["\u6b22\u8fce\u60a8\uff01",Object(g.jsx)("span",{className:"welcome-uname",children:null===r||void 0===r||null===(e=r.userInfo)||void 0===e?void 0:e.uname}),Object(g.jsx)("a",{className:"login-btn",children:"\u9000\u51fa\u767b\u5f55"})]})}),Object(g.jsxs)("div",{className:"nav",children:[Object(g.jsx)("div",{className:"nav-title",children:Object(g.jsx)("img",{src:x,alt:""})}),Object(g.jsx)("div",{className:"nav-weather",children:Object(g.jsx)("iframe",{width:"360",height:"40",frameBorder:"0",scrolling:"no",hspace:"0",src:"https://i.tianqi.com/?c=code&a=getcode&id=40&icon=1"})})]}),Object(g.jsx)("div",{className:"tool-nav",children:Object(g.jsx)(E,{})}),Object(g.jsx)("div",{className:"container",children:Object(g.jsx)(U,{})}),i,Object(g.jsxs)("div",{className:"index-footer",children:["\u5151\u5427\u7814\u53d1\u4e2d\u5fc3\xb7\u676d\u5dde\u5151\u5427\u7f51\u7edc\u79d1\u6280\u6e38\u620f\u516c\u53f8\u7248\u6743\u6240\u6709",Object(g.jsx)("br",{}),"\u6d59ICP\u590714017299\u53f7-1"]}),Object(g.jsx)(ee,{})]})})};n(269),n(270);var ne=function(e){var t,n,i=Object(c.useContext)(h).dataCenter;return Object(g.jsx)("div",{className:"content",children:(null===(t=i.toolBox)||void 0===t?void 0:t.length)?null===i||void 0===i||null===(n=i.toolBox)||void 0===n?void 0:n.filter((function(e){return"all"===i.childTypeId||e.childTypeId===i.childTypeId})).map((function(e){return Object(g.jsx)(F,{value:e},e.toolBoxId)})):"\u6ca1\u6709\u6570\u636e\u4e86\uff01"})};var ce=function(){var e,t=Object(c.useContext)(h),n=t.fetchData,i=t.dataCenter,a=t.dispatch;return Object(c.useEffect)((function(){n("/query/queryType",{},"type").then((function(){return n("/query/queryChildType",{typeId:i.typeId},"childType")})).then((function(){return a({type:"NEED_UPDATE_INDEX"})}))}),[i.typeId]),Object(c.useEffect)((function(){if(i.needUpdateIndex){var e="follow"===i.typeId?{isFollow:!0,typeId:JSON.stringify(i.userInfo.follow)}:{typeId:i.typeId};n("/query/queryToolBox",e,"toolBox").then((function(){return a({type:"NEED_UPDATE_INDEX"})}))}}),[i.needUpdateIndex]),Object(c.useEffect)((function(){n("/users/getUser",{userId:"100001"},"userInfo").catch((function(e){return 70001===e.code&&(window.location.href="/login")}))}),[]),Object(g.jsxs)("div",{className:"index",children:[Object(g.jsx)("div",{className:"welcome-top",children:Object(g.jsxs)("span",{children:["\u6b22\u8fce\u60a8\uff01",Object(g.jsx)("span",{className:"welcome-uname",children:null===i||void 0===i||null===(e=i.userInfo)||void 0===e?void 0:e.uname}),Object(g.jsx)("a",{className:"login-btn",children:"\u9000\u51fa\u767b\u5f55"})]})}),Object(g.jsxs)("div",{className:"nav",children:[Object(g.jsx)("div",{className:"nav-title",children:Object(g.jsx)("img",{src:x,alt:""})}),Object(g.jsx)("div",{className:"nav-weather",children:Object(g.jsx)("iframe",{width:"360",height:"40",frameBorder:"0",scrolling:"no",hspace:"0",src:"https://i.tianqi.com/?c=code&a=getcode&id=40&icon=1"})})]}),Object(g.jsx)("div",{className:"tool-nav",children:Object(g.jsx)(E,{})}),Object(g.jsx)("div",{className:"container",children:Object(g.jsx)(ne,{})}),Object(g.jsxs)("div",{className:"index-footer",children:["\u5151\u5427\u7814\u53d1\u4e2d\u5fc3\xb7\u676d\u5dde\u5151\u5427\u7f51\u7edc\u79d1\u6280\u6e38\u620f\u516c\u53f8\u7248\u6743\u6240\u6709",Object(g.jsx)("br",{}),"\u6d59ICP\u590714017299\u53f7-1"]})]})};n(271);var ie=function(e){var t=Object(c.useContext)(h),n=t.fetchData,i=t.dataCenter,a=Object(c.useState)(!1),o=Object(p.a)(a,2),l=o[0],r=o[1],s=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=Object(c.useState)(e),n=Object(p.a)(t,2),i=n[0],a=n[1],o=Object(c.useCallback)((function(e,t){a((function(){return Object.assign({},Object(b.a)({},i),Object(j.a)({},e,t))}))}),[i]);return[i,o]}(),d=Object(p.a)(s,2),u=d[0],m=d[1],O=function(){n("/users/getUser",{userId:"100001"},"userInfo").then((function(e){return e.data.uid&&(window.location.href="/index")})).catch((function(e){return 70001===e.code&&r(!0)}))},A=function(){l?n("/users/login",{userId:"100001"}).then((function(){O()})):O()};return Object(c.useEffect)((function(){i.userInfo}),[i.userInfo]),Object(c.useEffect)((function(){A()}),[]),Object(g.jsx)("div",{className:"login",children:Object(g.jsxs)("div",{className:"loginDiv",children:[l&&Object(g.jsx)("input",{type:"text",onChange:function(e){return m("userId",e.target.value)},defaultValue:u.userId}),Object(g.jsx)("button",{className:"btn-login",onClick:function(){return A()},children:"\u767b\u5f55"})]})})},ae=n(155),oe=n(26);var le=function(){return Object(g.jsx)(ae.a,{children:Object(g.jsx)(I,{children:Object(g.jsxs)(oe.c,{children:[Object(g.jsx)(oe.a,{exact:!0,path:"/login",component:ie}),Object(g.jsx)(oe.a,{exact:!0,path:"/",component:ce}),Object(g.jsx)(oe.a,{exact:!0,path:"/admin",component:te})]})})})},re=function(e){e&&e instanceof Function&&n.e(3).then(n.bind(null,288)).then((function(t){var n=t.getCLS,c=t.getFID,i=t.getFCP,a=t.getLCP,o=t.getTTFB;n(e),c(e),i(e),a(e),o(e)}))};u.a.locale("zh-cn"),o.a.render(Object(g.jsx)(i.a.StrictMode,{children:Object(g.jsx)(l.a,{locale:s.a,children:Object(g.jsx)(le,{})})}),document.getElementById("root")),re()}},[[279,1,2]]]);
//# sourceMappingURL=main.7d258f7c.chunk.js.map
\ No newline at end of file
{"version":3,"sources":["dataCenter/reducer.js","config/apiConfig.js","dataCenter/action.js","dataCenter/Root.jsx","static/logo.png","component/ToolType/ToolType.jsx","static/notFollow.png","static/followed.png","static/setting.svg","static/trash.svg","static/dragIcon.svg","modal/ToolModal.jsx","component/ContentAdmin/ContentItemAdmin.jsx","component/Content/ContentItem.jsx","component/ContentAdmin/Content.jsx","modal/PublishModal.jsx","modal/TypeModal.jsx","modal/PageModal.jsx","modal/RemoveType.jsx","component/AdminIndex/AdminIndex.jsx","page/indexAdmin/index.jsx","component/Content/Content.jsx","page/index/index.jsx","page/login/login.jsx","utils/hook.js","App.js","reportWebVitals.js","index.js"],"names":["initDataCenter","toolBox","type","childType","userInfo","needUpdateIndex","typeId","childTypeId","deepFreeze","obj","Object","getOwnPropertyNames","forEach","name","prop","freeze","dataReducer","state","action","console","table","assign","data","apiConfig","domain","window","location","hostname","CHANGE_TYPE","Root","createContext","PopContext","DataCenter","props","useReducer","dataCenter","dispatch","Provider","value","fetchData","path","requestData","dataName","fetch","paramsStr","keys","map","v","i","join","log","generateUrl","credentials","then","res","json","success","catch","e","error","children","ChildTypeItem","useContext","childTypeName","classNameArr","push","className","onClick","CHANGE_CHILD_TYPE","ToolType","length","typeName","Option","Select","ToolModal","visible","onCancel","Form","useForm","form","useEffect","title","okText","cancelText","onOk","validateFields","values","input","toolBoxName","toolBoxIcon","icon","toolBoxDesc","depict","toolBoxUrl","url","message","onCreate","info","labelCol","span","wrapperCol","initialValues","Item","label","rules","required","placeholder","onChange","setFieldsValue","allowClear","ContentItemAdmin","useState","setVisible","showPop","follow","toolBoxId","itemIcon","setItemIcon","jumpUrl","href","src","dragIcon","alt","setting","trash","deleteItem","onError","followed","notFollow","ContentItem","isFollow","setIsFollow","includes","_follow","slice","index","indexOf","splice","JSON","stringify","userId","uid","Content","filter","PublishModal","code","setcode","pageName","setPageName","oldCode","method","headers","body","pageId","response","width","defaultValue","target","editor","options","styleActiveLine","lineNumbers","theme","tabSize","keyMap","mode","smartIndent","lineWrapping","autofocus","TypeModal","Tabs","TabPane","queryData","React","setValue","isRemove","modifier","Group","hasFeedback","PageModal","onPublish","publish","setPublish","pageData","setpageData","columns","dataIndex","align","render","text","record","size","pageUrl","key","dataSource","queryPage","pagination","pageSize","RemoveType","typeModal","setTypeModal","typeData","settypeData","oldData","setoldData","changeData","list","cb","item","newData","onConfirm","AdminIndex","pageModal","setpageModal","removeType","setremoveType","Index","pop","setPop","_typeId","hidePop","popName","uname","logo","height","frameBorder","scrolling","hspace","Login","needLogin","setNeedLogin","setInput","setInputData","useCallback","useFormState","getUser","doLogin","App","exact","component","IndexAdmin","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","moment","locale","ReactDOM","StrictMode","zhCN","document","getElementById"],"mappings":"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","file":"static/js/main.7d258f7c.chunk.js","sourcesContent":["const initDataCenter = {\r\n toolBox: null,\r\n type: null,\r\n childType: null,\r\n userInfo: null,\r\n needUpdateIndex: false,\r\n typeId: 'follow',\r\n childTypeId: 'all'\r\n}\r\n\r\n/**\r\n * deepFreeze()\r\n * @param obj\r\n * @returns {unknown[]}\r\n */\r\nfunction deepFreeze(obj) {\r\n // 取回定义在obj上的属性名\r\n let propNames = Object.getOwnPropertyNames(obj);\r\n\r\n // 在冻结自身之前冻结属性\r\n propNames.forEach(function (name) {\r\n let prop = obj[name];\r\n\r\n // 如果prop是个对象,冻结它\r\n if (typeof prop == 'object' && prop !== null)\r\n deepFreeze(prop);\r\n });\r\n\r\n // 冻结自身(no-op if already frozen)\r\n return Object.freeze(obj);\r\n}\r\n\r\n//任何修改原始对象的操作都是禁止的!\r\ndeepFreeze(initDataCenter)\r\n\r\nconst dataReducer = (state, action) => {\r\n // console.log(action)\r\n console.table(action,['dataCenter的dispatch'])\r\n switch (action.type) {\r\n case 'UPDATE_DATA':\r\n return Object.assign({}, state, {\r\n ...action.data\r\n })\r\n case 'NEED_UPDATE_INDEX':\r\n return Object.assign({}, state, {needUpdateIndex: !state.needUpdateIndex})\r\n case 'CHANGE_TYPE':\r\n return Object.assign({}, state, {typeId: action.typeId})\r\n case 'CHANGE_CHILD_TYPE':\r\n return Object.assign({}, state, {childTypeId: action.childTypeId})\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport {\r\n initDataCenter,\r\n dataReducer,\r\n}\r\n","const apiConfig = {\r\n domain: 'http://' + window.location.hostname + ':3000',\r\n}\r\n\r\nexport default apiConfig\r\n","const UPDATE_DATA = data => ({type: 'UPDATE_DATA', data: {...data}})\r\nconst NEED_UPDATE_INDEX = () => ({type: 'NEED_UPDATE_INDEX'})\r\nconst CHANGE_TYPE = typeId => ({type: 'CHANGE_TYPE', typeId: typeId})\r\nconst CHANGE_CHILD_TYPE = childTypeId => ({type: 'CHANGE_CHILD_TYPE', childTypeId: childTypeId})\r\n\r\nexport {\r\n UPDATE_DATA,\r\n NEED_UPDATE_INDEX,\r\n CHANGE_TYPE,\r\n CHANGE_CHILD_TYPE\r\n}\r\n","import React, {createContext, useReducer} from \"react\";\r\nimport {dataReducer, initDataCenter} from \"./reducer\";\r\nimport apiConfig from \"../config/apiConfig\";\r\nimport {UPDATE_DATA} from \"./action\";\r\n\r\nconst Root = createContext({})\r\nconst PopContext = createContext({})\r\n\r\nfunction DataCenter(props) {\r\n const [dataCenter, dispatch] = useReducer(dataReducer, initDataCenter, () => {\r\n return initDataCenter\r\n })\r\n\r\n const generateUrl = (path, requestData) => {\r\n if (requestData) {\r\n const keyArr = Object.keys(requestData)\r\n const paramsStr = keyArr.map((v, i) => {\r\n if (i === 0) {\r\n return '?' + v + '=' + requestData[v]\r\n } else {\r\n return '&' + v + '=' + requestData[v]\r\n }\r\n }).join('')\r\n console.log('发送请求:', apiConfig.domain + path + paramsStr)\r\n return apiConfig.domain + path + paramsStr\r\n }\r\n return apiConfig.domain + path\r\n }\r\n\r\n const fetchData = (path, requestData, dataName) =>\r\n fetch(generateUrl(path, requestData), {credentials: 'include'})\r\n .then(res => res.json())\r\n .then(res => {\r\n console.log(res);\r\n if (res.success) {\r\n !!dataName && dispatch(UPDATE_DATA({[dataName]: res.data}))\r\n } else {\r\n throw res\r\n }\r\n return res\r\n })\r\n .catch(e => {\r\n console.error(e)\r\n throw e\r\n })\r\n\r\n\r\n return (\r\n <Root.Provider value={{dataCenter, dispatch, fetchData}}>\r\n {\r\n props.children\r\n }\r\n </Root.Provider>\r\n )\r\n}\r\n\r\nexport {\r\n Root,\r\n PopContext,\r\n}\r\nexport default DataCenter\r\n\r\n","export default __webpack_public_path__ + \"static/media/logo.c725c5d1.png\";","import './ToolType.scss'\r\nimport {useContext} from \"react\";\r\nimport {Root} from \"../../dataCenter/Root\";\r\nimport {CHANGE_CHILD_TYPE, CHANGE_TYPE} from \"../../dataCenter/action\";\r\n\r\nconst ChildTypeItem = props => {\r\n const {dataCenter, dispatch} = useContext(Root)\r\n const {childTypeId, childTypeName} = props\r\n const classNameArr = ['child-type-item']\r\n if (childTypeId === dataCenter.childTypeId) {\r\n classNameArr.push('child-type-item-selected')\r\n }\r\n const handleClick = () => {\r\n console.log(childTypeId)\r\n dispatch(CHANGE_CHILD_TYPE(childTypeId))\r\n }\r\n return (\r\n <div className={classNameArr.join(' ')} onClick={handleClick}>{childTypeName}</div>\r\n )\r\n}\r\n\r\n\r\nfunction ToolType(props) {\r\n const {dataCenter, dispatch} = useContext(Root)\r\n return (\r\n <>\r\n <div className=\"tab-tool-type\">\r\n <div className={dataCenter.typeId === 'follow' ? 'item-tool-type item-tool-type-selected' : 'item-tool-type'}\r\n onClick={() => dispatch(CHANGE_TYPE('follow'))}>我的收藏\r\n </div>\r\n {\r\n dataCenter?.type?.length > 0 && dataCenter.type.map(v => {\r\n const classNameArr = ['item-tool-type ']\r\n if (v[\"typeId\"] === dataCenter.typeId) classNameArr.push('item-tool-type-selected')\r\n return (\r\n <div key={v[\"typeId\"]} className={classNameArr.join('')}\r\n onClick={() => dispatch(CHANGE_TYPE( v[\"typeId\"]))}>{v.typeName}</div>\r\n )\r\n })\r\n }\r\n </div>\r\n <div className=\"child-type\">\r\n <ChildTypeItem key={'all'} childTypeId={'all'} childTypeName={'全部'}/>\r\n {\r\n dataCenter?.childType?.length > 0 && dataCenter?.childType.map(v => {\r\n return (\r\n <ChildTypeItem key={v.childTypeId} childTypeId={v.childTypeId}\r\n childTypeName={v.childTypeName}/>\r\n )\r\n })\r\n }\r\n </div>\r\n </>\r\n )\r\n}\r\n\r\nexport default ToolType\r\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/setting.6a716d85.svg\";","export default __webpack_public_path__ + \"static/media/trash.780a90e8.svg\";","export default __webpack_public_path__ + \"static/media/dragIcon.268403b1.svg\";","import React, { useState, useEffect, useContext } from 'react';\r\nimport { Root } from \"../dataCenter/Root\";\r\nimport { Button, Modal, Form, Input, Radio, Select, message } from 'antd';\r\nimport { NEED_UPDATE_INDEX } from \"../dataCenter/action\";\r\nconst { Option } = Select;\r\nconst ToolModal = ({ visible, onCancel, data }) => {\r\n const [form] = Form.useForm();\r\n const { fetchData, dataCenter, dispatch } = useContext(Root)\r\n const formItemLayout = {\r\n labelCol: { span: 4 },\r\n wrapperCol: { span: 18 },\r\n };\r\n const onCreate = (values) => {\r\n let input = {\r\n toolBoxName: values.name,\r\n toolBoxIcon: values.icon,\r\n toolBoxDesc: values.depict,\r\n toolBoxUrl: values.url,\r\n\r\n }\r\n if (!data) {\r\n input = {\r\n ...input,\r\n typeId: values.type,\r\n childTypeId: values.childType\r\n }\r\n console.log(input);\r\n fetchData('/add/addToolBox', input)\r\n .then((res) => {\r\n if (res.success) {\r\n message.success('新建成功')\r\n dispatch(NEED_UPDATE_INDEX())\r\n onCancel()\r\n } else {\r\n message.error('新建失败')\r\n }\r\n })\r\n\r\n } else {\r\n fetchData('/update/updateToolBox', input)\r\n .then((res) => {\r\n if (res.success) {\r\n message.success('修改成功')\r\n dispatch(NEED_UPDATE_INDEX())\r\n onCancel()\r\n } else {\r\n message.error('新建失败')\r\n }\r\n })\r\n }\r\n };\r\n\r\n const onGenderChange = (value) => {\r\n form.setFieldsValue({\r\n type: value,\r\n });\r\n fetchData('/query/queryChildType', { typeId: value }, 'childType')\r\n .then((res) => {\r\n\r\n console.log(res);\r\n })\r\n console.log(dataCenter);\r\n };\r\n const onChildGenderChange = (value) => {\r\n form.setFieldsValue({\r\n childType: value,\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n dataCenter?.type && fetchData('/query/queryChildType', { typeId: dataCenter?.type[0]?.typeId }, 'childType')\r\n .then((res) => {\r\n\r\n console.log(res);\r\n })\r\n }, [])\r\n\r\n return (\r\n <Modal\r\n visible={visible}\r\n title={data ? '修改工具箱' : '新建工具箱'}\r\n okText=\"确定\"\r\n cancelText=\"取消\"\r\n onCancel={onCancel}\r\n onOk={() => {\r\n form\r\n .validateFields()\r\n .then((values) => {\r\n // form.resetFields();\r\n onCreate(values);\r\n })\r\n .catch((info) => {\r\n console.log('Validate Failed:', info);\r\n });\r\n }}\r\n >\r\n <Form\r\n form={form}\r\n // layout=\"vertical\"\r\n {...formItemLayout}\r\n name=\"form_in_modal\"\r\n initialValues={data ? {\r\n name: data.toolBoxName,\r\n icon: data.toolBoxIcon,\r\n url: data.toolBoxUrl,\r\n depict: data.toolBoxDesc,\r\n } : { type: dataCenter?.type && dataCenter?.type[0]?.typeId }}\r\n >\r\n <Form.Item\r\n name=\"name\"\r\n label=\"名称\"\r\n rules={[\r\n {\r\n required: true,\r\n message: '请输入名称!',\r\n },\r\n ]}\r\n >\r\n <Input placeholder=\"请输入名称\" />\r\n </Form.Item>\r\n <Form.Item name=\"icon\"\r\n label=\"图标\"\r\n rules={[\r\n {\r\n required: true,\r\n message: '请输入图标url!',\r\n },\r\n ]}\r\n >\r\n <Input placeholder=\"请输入图标url\" />\r\n </Form.Item>\r\n <Form.Item\r\n name=\"depict\"\r\n label=\"描述\"\r\n rules={[\r\n {\r\n required: true,\r\n message: '请输入描述!',\r\n },\r\n ]}\r\n >\r\n <Input placeholder=\"请输入描述\" />\r\n </Form.Item>\r\n <Form.Item\r\n name=\"url\"\r\n label=\"链接\"\r\n rules={[\r\n {\r\n required: true,\r\n message: '请输入链接!',\r\n },\r\n ]}\r\n >\r\n <Input placeholder=\"请输入链接\" />\r\n </Form.Item>\r\n {!data && <Form.Item\r\n name=\"type\"\r\n label=\"类型\"\r\n rules={[\r\n {\r\n required: true,\r\n message: '请选择类型!',\r\n },\r\n ]}\r\n >\r\n <Select\r\n placeholder=\"请选择类型\"\r\n onChange={onGenderChange}\r\n // allowClear\r\n >\r\n {\r\n dataCenter?.type?.length && dataCenter?.type.map(v => {\r\n return (\r\n <Option key={v.typeId} value={v.typeId}>{v.typeName}</Option>\r\n )\r\n })\r\n }\r\n\r\n </Select>\r\n </Form.Item>}\r\n {!data && dataCenter?.childType && <Form.Item\r\n name=\"childType\"\r\n label=\"子类型\"\r\n >\r\n <Select\r\n placeholder=\"请选择子类型\"\r\n onChange={onChildGenderChange}\r\n allowClear\r\n >\r\n {\r\n dataCenter?.childType?.length && dataCenter?.childType.map(v => {\r\n return (\r\n <Option key={v.childTypeId} value={v.childTypeId}>{v.childTypeName}</Option>\r\n )\r\n })\r\n }\r\n\r\n </Select>\r\n </Form.Item>}\r\n </Form>\r\n </Modal>\r\n );\r\n};\r\nexport default ToolModal\r\n","import './ContentItem.scss'\r\nimport notFollow from '../../static/notFollow.png'\r\nimport followed from '../../static/followed.png'\r\nimport setting from '../../static/setting.svg'\r\nimport trash from '../../static/trash.svg'\r\nimport dragIcon from '../../static/dragIcon.svg'\r\nimport {useContext, useState} from \"react\";\r\nimport {PopContext, Root} from \"../../dataCenter/Root\";\r\nimport ToolModal from \"../../modal/ToolModal\"\r\n\r\nfunction ContentItemAdmin(props) {\r\n const [visible, setVisible] = useState(false)\r\n\r\n const {fetchData} = useContext(Root)\r\n const {showPop} = useContext(PopContext)\r\n\r\n const {toolBoxIcon, toolBoxName, toolBoxDesc, toolBoxUrl, follow, toolBoxId} = props.value\r\n\r\n const [itemIcon, setItemIcon] = useState(toolBoxIcon)\r\n\r\n const jumpUrl = url => {\r\n window.location.href = url\r\n }\r\n const deleteItem = toolBoxId => {\r\n fetchData('/delete/deleteToolBoxById', {toolBoxId})\r\n }\r\n\r\n return (\r\n <div className=\"content-item\">\r\n <div className=\"content-adminTool\">\r\n <img src={dragIcon} alt=\"\"/>\r\n <img src={setting} alt=\"\" onClick={() => setVisible(true)}/>\r\n <img src={trash} alt=\"\" onClick={() => deleteItem(toolBoxId)}/>\r\n </div>\r\n <div className=\"item-icon\" onClick={() => jumpUrl(toolBoxUrl)}>\r\n {\r\n !itemIcon && <div className=\"defaultIcon\">{toolBoxName[0]}</div>\r\n }\r\n {\r\n itemIcon && <img src={itemIcon} alt='' onError={e => setItemIcon(null)}/>\r\n }\r\n </div>\r\n <div className=\"item-name\" onClick={() => jumpUrl(toolBoxUrl)}>{toolBoxName}</div>\r\n <div className=\"item-desc\">{toolBoxDesc}</div>\r\n <a className='item-url' href={toolBoxUrl}>{toolBoxUrl}</a>\r\n <div className=\"follow\">\r\n <img className='icon-follow' src={follow ? followed : notFollow} alt=\"\"/>\r\n 收藏\r\n </div>\r\n {visible && <ToolModal\r\n visible={visible}\r\n onCancel={() =>\r\n setVisible(false)\r\n }\r\n data={props.value}\r\n />}\r\n </div>\r\n\r\n )\r\n}\r\n\r\nexport default ContentItemAdmin\r\n","import './ContentItem.scss'\r\nimport notFollow from '../../static/notFollow.png'\r\nimport followed from '../../static/followed.png'\r\nimport {useContext, useEffect, useState} from \"react\";\r\nimport {Root} from \"../../dataCenter/Root\";\r\n\r\nfunction ContentItem(props) {\r\n const {dataCenter, fetchData} = useContext(Root)\r\n const {toolBoxIcon, toolBoxName, toolBoxDesc, toolBoxUrl, toolBoxId} = props.value\r\n const [isFollow, setIsFollow] = useState(false)\r\n const [itemIcon, setItemIcon] = useState(toolBoxIcon)\r\n\r\n const jumpUrl = url => window.location.href = url\r\n\r\n const follow = () => {\r\n const _follow = dataCenter.userInfo.follow.slice()\r\n if (!isFollow) {\r\n _follow.push(toolBoxId)\r\n } else {\r\n const index = _follow.indexOf(toolBoxId)\r\n _follow.splice(index, 1)\r\n }\r\n console.log( {follow: JSON.stringify(_follow), userId: dataCenter.userInfo.uid})\r\n fetchData('/users/follow', {follow: JSON.stringify(_follow), userId: dataCenter.userInfo.uid})\r\n .then(() => fetchData('/users/getUser', {userId: 100001}, 'userInfo'))\r\n }\r\n\r\n useEffect(() => {\r\n if (dataCenter.userInfo?.follow.includes(toolBoxId)) {\r\n setIsFollow(true)\r\n } else {\r\n setIsFollow(false)\r\n }\r\n }, [dataCenter.toolBox, dataCenter.userInfo])\r\n\r\n return (\r\n <div className=\"content-item\">\r\n <div className=\"item-icon\" onClick={() => jumpUrl(toolBoxUrl)}>\r\n {\r\n !itemIcon && <div className=\"defaultIcon\">{toolBoxName[0]}</div>\r\n }\r\n {\r\n itemIcon && <img src={itemIcon} alt='' onError={e => setItemIcon(null)}/>\r\n }\r\n\r\n </div>\r\n <div className=\"item-name\" onClick={() => jumpUrl(toolBoxUrl)}>{toolBoxName}</div>\r\n <div className=\"item-desc\">{toolBoxDesc}</div>\r\n <a className='item-url' href={toolBoxUrl}>{toolBoxUrl}</a>\r\n <div className=\"follow\">\r\n <img className='icon-follow' src={isFollow ? followed : notFollow} alt=\"\" onClick={() => follow()}/>\r\n 收藏\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default ContentItem\r\n","import './Content.scss'\r\nimport ContentItemAdmin from \"./ContentItemAdmin\";\r\nimport {useContext} from \"react\";\r\nimport {Root} from \"../../dataCenter/Root\";\r\nimport ContentItem from \"../Content/ContentItem\";\r\n\r\nfunction Content(props) {\r\n const {dataCenter} = useContext(Root)\r\n\r\n return (\r\n <div className=\"content\">\r\n {\r\n dataCenter.toolBox?.length ? dataCenter?.toolBox?.filter(v => {\r\n if (dataCenter.childTypeId === 'all') return true\r\n else return v.childTypeId === dataCenter.childTypeId\r\n }).map(v => {\r\n return (\r\n <ContentItemAdmin key={v['toolBoxId']} value={v}/>\r\n )\r\n })\r\n :\r\n '没有数据了!'\r\n }\r\n </div>\r\n )\r\n}\r\n\r\nexport default Content\r\n","import './PublishModal.scss'\r\nimport React, {useContext, useEffect, useState} from 'react';\r\nimport {Root} from \"../dataCenter/Root\";\r\nimport {UnControlled as CodeMirror} from 'react-codemirror2'\r\nimport {Form, Input, message, Modal, Select} from 'antd';\r\nimport apiConfig from \"../config/apiConfig\";\r\n\r\nimport 'codemirror/addon/display/autorefresh';\r\nimport 'codemirror/addon/comment/comment';\r\nimport 'codemirror/addon/edit/matchbrackets';\r\nimport 'codemirror/keymap/sublime';\r\nimport 'codemirror/theme/eclipse.css';\r\nimport 'codemirror/theme/monokai.css';\r\nimport 'codemirror/lib/codemirror.js';\r\nimport 'codemirror/lib/codemirror.css';\r\nimport 'codemirror/theme/solarized.css'\r\nimport 'codemirror/mode/javascript/javascript'\r\nimport 'codemirror/addon/selection/active-line';\r\nimport 'codemirror/addon/fold/foldgutter.css';\r\n\r\nconst { Option } = Select;\r\n\r\n\r\nconst PublishModal = ({ visible, onCancel, data }) => {\r\n const [code, setcode] = useState('')\r\n const [pageName, setPageName] = useState('')\r\n const [oldCode, setoldCode] = useState('')\r\n const { fetchData, dataCenter } = useContext(Root)\r\n console.log(data);\r\n const onCreate = (values) => {\r\n console.log(code);\r\n\r\n if (!code || !pageName) {\r\n message.error('请补全信息!')\r\n return\r\n }\r\n if (data) {\r\n fetch(`${apiConfig.domain}/page/updatePage`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify({\r\n pageId: data.pageId,\r\n pageName: pageName,\r\n code: code\r\n })\r\n })\r\n .then(response => response.json())\r\n .then(data => {\r\n if (data.success) {\r\n onCancel()\r\n message.success('替换成功!')\r\n dataCenter?.type && fetchData('/page/queryPage', {}, 'queryPage')\r\n .then((res) => {\r\n \r\n })\r\n } else {\r\n message.error( '替换失败')\r\n }\r\n });\r\n } else {\r\n fetch(`${apiConfig.domain}/page/addPage`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify({\r\n pageName: pageName,\r\n code: code\r\n })\r\n })\r\n .then(response => response.json())\r\n .then(data => {\r\n if (data.success) {\r\n onCancel()\r\n message.success('发布成功!')\r\n dataCenter?.type && fetchData('/page/queryPage', {}, 'queryPage')\r\n .then((res) => {\r\n \r\n })\r\n } else {\r\n message.error(data.error || '发布失败')\r\n }\r\n });\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n data&&setPageName(data.pageName)\r\n }, [data])\r\n\r\n return (\r\n <Modal\r\n visible={visible}\r\n title=\"发布\"\r\n okText=\"发布\"\r\n cancelText=\"取消\"\r\n onCancel={onCancel}\r\n onOk={onCreate}\r\n width='1000px'\r\n >\r\n <Form.Item\r\n name=\"pageName\"\r\n label=\"页面名称\"\r\n rules={[\r\n {\r\n required: true,\r\n message: '请输入页面名称!',\r\n },\r\n ]}\r\n >\r\n <Input placeholder=\"请输入页面名称\" defaultValue={data?.pageName ? data.pageName : pageName} onChange={(e) => { setPageName(e.target.value) }} />\r\n </Form.Item>\r\n <Form.Item\r\n name=\"type\"\r\n label=\"布局代码\"\r\n rules={[\r\n {\r\n required: true,\r\n message: '请输入页面名称!',\r\n },\r\n ]}\r\n >\r\n <div className='codeMain'>\r\n <CodeMirror\r\n onChange={(editor, data, value) => {\r\n setcode(value)\r\n }}\r\n value={oldCode}\r\n options={{\r\n styleActiveLine: true,//光标代码高亮\r\n lineNumbers: true,\r\n theme: 'monokai',\r\n tabSize: 2,\r\n keyMap: 'sublime',\r\n mode: 'text/javascript',\r\n smartIndent: true, //自动缩进\r\n lineWrapping: true,\r\n autofocus: true\r\n }}\r\n />\r\n </div>\r\n </Form.Item>\r\n </Modal>\r\n );\r\n};\r\nexport default PublishModal\r\n","import React from 'react';\r\nimport { Button, Modal, Form, Input, Radio, Select, message, Tabs } from 'antd';\r\nimport { useContext, useEffect, useState } from \"react\";\r\nimport { Root } from \"../dataCenter/Root\";\r\nimport { NEED_UPDATE_INDEX } from \"../dataCenter/action\";\r\nconst { Option } = Select;\r\nconst { TabPane } = Tabs;\r\nconst TypeModal = ({ visible, onCancel, queryData, data }) => {\r\n console.log(data);\r\n const [form] = Form.useForm();\r\n if (data) {\r\n form.setFieldsValue({\r\n typeName: data.typeName,\r\n });\r\n }\r\n const formItemLayout = {\r\n labelCol: { span: 4 },\r\n wrapperCol: { span: 18 },\r\n };\r\n\r\n const { fetchData, dataCenter, dispatch } = useContext(Root)\r\n const [value, setValue] = React.useState(1);\r\n\r\n\r\n const onCreate = (values) => {\r\n if (data) {\r\n console.log(data);\r\n\r\n let input = {\r\n typeId: '',\r\n typeName: ''\r\n }\r\n if (!data.isRemove) {\r\n input = {\r\n typeId: data.typeId,\r\n typeName: values.typeName\r\n }\r\n } else {\r\n input = {\r\n childTypeId: data.typeId,\r\n childTypeName: values.typeName\r\n }\r\n }\r\n fetchData('/typeManage/updateType', input)\r\n .then((res) => {\r\n if (res.success) {\r\n message.success('修改成功')\r\n dispatch(NEED_UPDATE_INDEX())\r\n queryData()\r\n onCancel()\r\n }\r\n })\r\n } else {\r\n console.log(values);\r\n fetchData('/add/addType', values)\r\n .then((res) => {\r\n if (res.success) {\r\n message.success('新建成功')\r\n dispatch(NEED_UPDATE_INDEX())\r\n onCancel()\r\n }\r\n })\r\n }\r\n\r\n };\r\n // function callback(key) {\r\n // console.log(key);\r\n // }\r\n\r\n const onChange = e => {\r\n console.log('radio checked', e.target.value);\r\n setValue(e.target.value);\r\n };\r\n\r\n const onGenderChange = (value) => {\r\n form.setFieldsValue({\r\n typeId: value,\r\n });\r\n };\r\n\r\n return (\r\n <Modal\r\n visible={visible}\r\n title={`${data ? '修改' : '新建'}类型`}\r\n okText=\"确定\"\r\n cancelText=\"取消\"\r\n onCancel={onCancel}\r\n onOk={() => {\r\n form\r\n .validateFields()\r\n .then((values) => {\r\n // form.resetFields();\r\n onCreate(values);\r\n })\r\n .catch((info) => {\r\n console.log('Validate Failed:', info);\r\n });\r\n }}\r\n >\r\n <Form\r\n form={form}\r\n // layout=\"vertical\"\r\n {...formItemLayout}\r\n name=\"form_in_modal\"\r\n initialValues={{\r\n modifier: 'public',\r\n 'radio-group': 1\r\n }}\r\n >\r\n\r\n {!data && <Form.Item name=\"radio-group\" label=\"类型\">\r\n <Radio.Group onChange={onChange} value={value}>\r\n <Radio value={1}>父类型</Radio>\r\n <Radio value={2}>子类型</Radio>\r\n </Radio.Group>\r\n </Form.Item>}\r\n {value === 1 || data ? <Form.Item\r\n name=\"typeName\"\r\n label={`${data ? '' : '父'}类型`}\r\n rules={[\r\n {\r\n required: true,\r\n message: '请输入类型名称!',\r\n },\r\n ]}\r\n >\r\n <Input placeholder=\"请输入类型名称\" />\r\n </Form.Item> :\r\n <>\r\n <Form.Item\r\n name=\"typeId\"\r\n label=\"父类型\"\r\n hasFeedback\r\n rules={[{ required: true, message: '请选择父类型!' }]}\r\n >\r\n <Select\r\n placeholder=\"请选择父类型\"\r\n onChange={onGenderChange}\r\n // allowClear\r\n >\r\n {\r\n dataCenter?.type?.length && dataCenter?.type.map(v => {\r\n return (\r\n <Option key={v.typeId} value={v.typeId}>{v.typeName}</Option>\r\n )\r\n })\r\n }\r\n\r\n </Select>\r\n </Form.Item>\r\n <Form.Item\r\n name=\"childTypeName\"\r\n label=\"子类型\"\r\n rules={[\r\n {\r\n required: true,\r\n message: '请输入类型名称!',\r\n },\r\n ]}\r\n >\r\n <Input placeholder=\"请输入类型名称\" />\r\n </Form.Item>\r\n </>\r\n\r\n }\r\n </Form>\r\n </Modal>\r\n );\r\n};\r\nexport default TypeModal\r\n","import React, {useContext, useEffect, useState} from 'react';\r\nimport {Root} from \"../dataCenter/Root\";\r\nimport {Modal, Space, Table} from 'antd';\r\nimport PublishModal from \"./PublishModal\"\r\n\r\nfunction PageModal({ visible, onCancel, onPublish }) {\r\n\r\n const [publish, setPublish] = useState(false)\r\n const [pageData, setpageData] = useState('')\r\n const { fetchData, dataCenter } = useContext(Root)\r\n\r\n const onChangePage = (values) => {\r\n console.log(values);\r\n setpageData(values);\r\n setPublish(true)\r\n };\r\n const onRemovePage = (values) => {\r\n console.log(values);\r\n // setVisible(false);\r\n };\r\n\r\n\r\n\r\n const columns = [\r\n {\r\n title: '页面Id',\r\n dataIndex: 'pageId',\r\n width: 150,\r\n align: 'center'\r\n },\r\n {\r\n title: '页面名称',\r\n dataIndex: 'pageName',\r\n width: 200,\r\n align: 'center'\r\n },\r\n {\r\n title: '页面Url',\r\n dataIndex: 'pageUrl',\r\n width: 300,\r\n align: 'center',\r\n render: (text, record) => (\r\n <Space size=\"middle\">\r\n <a href={record.pageUrl}>{record.pageUrl}</a>\r\n </Space>\r\n ),\r\n },\r\n {\r\n title: '操作',\r\n key: 'action',\r\n align: 'center',\r\n width: 100,\r\n render: (text, record) => (\r\n <Space size=\"middle\">\r\n <a onClick={() => onChangePage(record)}>替换</a>\r\n {/* <a onClick={() => onRemovePage(record)}>删除</a> */}\r\n </Space>\r\n ),\r\n },\r\n ];\r\n\r\n\r\n useEffect(() => {\r\n console.log(dataCenter);\r\n dataCenter?.type && fetchData('/page/queryPage', {}, 'queryPage')\r\n .then((res) => {\r\n })\r\n }, [])\r\n\r\n\r\n const data = [\r\n {\r\n key: '1',\r\n name: '1 Brown',\r\n age: 32,\r\n address: 'New York No. 1 Lake Park',\r\n },\r\n {\r\n key: '2',\r\n name: '2 Green',\r\n age: 42,\r\n address: 'London No. 1 Lake Park',\r\n },\r\n {\r\n key: '3',\r\n name: '3 Black',\r\n age: 32,\r\n address: 'Sidney No. 1 Lake Park',\r\n },\r\n {\r\n key: '4',\r\n name: '4 Brown',\r\n age: 32,\r\n address: 'New York No. 1 Lake Park',\r\n },\r\n {\r\n key: '5',\r\n name: '5 Green',\r\n age: 42,\r\n address: 'London No. 1 Lake Park',\r\n },\r\n {\r\n key: '6',\r\n name: '6 Black',\r\n age: 32,\r\n address: 'Sidney No. 1 Lake Park',\r\n },\r\n {\r\n key: '7',\r\n name: '7 Brown',\r\n age: 32,\r\n address: 'New York No. 1 Lake Park',\r\n },\r\n {\r\n key: '8',\r\n name: '8 Green',\r\n age: 42,\r\n address: 'London No. 1 Lake Park',\r\n },\r\n {\r\n key: '9',\r\n name: '9 Black',\r\n age: 32,\r\n address: 'Sidney No. 1 Lake Park',\r\n },\r\n {\r\n key: '10',\r\n name: '10 Brown',\r\n age: 32,\r\n address: 'New York No. 1 Lake Park',\r\n },\r\n {\r\n key: '11',\r\n name: '11 Green',\r\n age: 42,\r\n address: 'London No. 1 Lake Park',\r\n },\r\n {\r\n key: '12',\r\n name: '12 Black',\r\n age: 32,\r\n address: 'Sidney No. 1 Lake Park',\r\n },\r\n ];\r\n return (\r\n <>\r\n <Modal\r\n visible={visible}\r\n title=\"页面管理\"\r\n okText=\"确定\"\r\n cancelText=\"取消\"\r\n width='1000px'\r\n onCancel={onCancel}\r\n onOk={onCancel}\r\n >\r\n <Table columns={columns} dataSource={dataCenter?.queryPage && dataCenter.queryPage} pagination={{ pageSize: 10 }} size=\"middle\" />\r\n </Modal>\r\n {publish && <PublishModal\r\n visible={publish}\r\n onCancel={() =>\r\n setPublish(false)\r\n }\r\n data={pageData}\r\n />}\r\n </>\r\n )\r\n}\r\n\r\nexport default PageModal\r\n","import { Menu, Modal, Popconfirm, Space, Table, message } from 'antd';\r\nimport React, { useContext, useEffect, useState } from 'react';\r\nimport TypeModal from '../modal/TypeModal'\r\nimport { NEED_UPDATE_INDEX } from \"../dataCenter/action\";\r\nimport { Root } from \"../dataCenter/Root\";\r\n\r\nconst menu = (\r\n <Menu>\r\n <Menu.Item>Action 1</Menu.Item>\r\n <Menu.Item>Action 2</Menu.Item>\r\n </Menu>\r\n);\r\n\r\nfunction RemoveType({ visible, onCancel }) {\r\n\r\n const [typeModal, setTypeModal] = useState(false)\r\n const [typeData, settypeData] = useState('')\r\n const [oldData, setoldData] = useState('')\r\n const { fetchData, dataCenter, dispatch } = useContext(Root)\r\n\r\n const changType = (data) => {\r\n setoldData(data)\r\n setTypeModal(true)\r\n }\r\n\r\n const changeData = (list, cb) => {\r\n return list.map((item, index) => {\r\n const res = cb(item);\r\n if (item.children) res.children = changeData(item.children, item => ({\r\n isRemove: true,\r\n key: item.childTypeId,\r\n typeId: item.childTypeId,\r\n typeName: item.childTypeName,\r\n }));\r\n return res;\r\n })\r\n }\r\n\r\n const removeType = (data) => {\r\n fetchData('/typeManage/deleteChildType', { childTypeId: data.typeId })\r\n .then((res) => {\r\n if (res.success) {\r\n message.success('刪除成功')\r\n dispatch(NEED_UPDATE_INDEX())\r\n queryData()\r\n // onCancel()\r\n }else{\r\n message.error('刪除失败')\r\n }\r\n })\r\n }\r\n\r\n const queryData = () => {\r\n dataCenter?.type && fetchData('/typeManage/queryTypeForManage', {}, 'childTypeData')\r\n .then((res) => {\r\n // console.log(res.data);\r\n const newData = changeData(res.data, item => ({\r\n key: item.typeId,\r\n typeId: item.typeId,\r\n typeName: item.typeName,\r\n }));\r\n // console.log(newData);\r\n settypeData(newData)\r\n })\r\n }\r\n\r\n useEffect(() => {\r\n queryData()\r\n }, [])\r\n\r\n const columns = [\r\n { title: '类型名', width: 100, dataIndex: 'typeName', key: 'typeName' },\r\n { title: 'Id', width: 100, dataIndex: 'typeId', align: 'center', key: 'typeId' },\r\n {\r\n title: '操作', width: 100, key: 'operation', align: 'center',\r\n render: (text, record) => (\r\n <Space size=\"middle\">\r\n {record.isRemove && <Popconfirm title=\"确定删除吗?\" okText=\"确定\" cancelText=\"取消\" onConfirm={() => removeType(record)}>\r\n <a href=\"#\" >删除</a>\r\n </Popconfirm>}\r\n <a href=\"#\" onClick={() => changType(record)}>修改</a>\r\n </Space>\r\n )\r\n },\r\n ];\r\n\r\n return (\r\n <Modal\r\n visible={visible}\r\n title=\"类型管理\"\r\n okText=\"确定\"\r\n cancelText=\"取消\"\r\n width='1000px'\r\n onCancel={onCancel}\r\n onOk={onCancel}\r\n >\r\n <Table\r\n columns={columns}\r\n dataSource={typeData}\r\n />\r\n {typeModal && <TypeModal\r\n visible={typeModal}\r\n onCancel={() =>\r\n setTypeModal(false)\r\n }\r\n queryData={() =>\r\n queryData()\r\n }\r\n data={oldData}\r\n />}\r\n </Modal>\r\n\r\n );\r\n}\r\nexport default RemoveType\r\n","import React, {useState} from 'react'\r\nimport './AdminIndex.scss'\r\nimport {Button} from 'antd';\r\nimport ToolModal from '../../modal/ToolModal'\r\nimport PublishModal from '../../modal/PublishModal'\r\nimport TypeModal from '../../modal/TypeModal'\r\nimport PageModal from '../../modal/PageModal'\r\nimport RemoveType from '../../modal/RemoveType'\r\n\r\nfunction AdminIndex() {\r\n const [visible, setVisible] = useState(false)\r\n const [publish, setPublish] = useState(false)\r\n const [typeModal, setTypeModal] = useState(false)\r\n const [pageModal, setpageModal] = useState(false)\r\n const [removeType, setremoveType] = useState(false)\r\n\r\n return (\r\n <div className='admin'>\r\n <Button onClick={() => setVisible(true)}>新建工具盒</Button>\r\n <Button onClick={() => setTypeModal(true)}>新建类型</Button>\r\n <Button onClick={() => setPublish(true)}>发布</Button>\r\n <Button onClick={() => setpageModal(true)}>页面管理</Button>\r\n <Button onClick={() => setremoveType(true)}>类型管理</Button>\r\n {visible && <ToolModal\r\n visible={visible}\r\n onCancel={() =>\r\n setVisible(false)\r\n }\r\n />}\r\n {publish && <PublishModal\r\n visible={publish}\r\n onCancel={() =>\r\n setPublish(false)\r\n }\r\n />}\r\n {typeModal && <TypeModal\r\n visible={typeModal}\r\n onCancel={() =>\r\n setTypeModal(false)\r\n }\r\n />}\r\n {pageModal && <PageModal\r\n visible={pageModal}\r\n onCancel={() =>\r\n setpageModal(false)\r\n }\r\n />}\r\n {removeType && <RemoveType\r\n visible={removeType}\r\n onCancel={() =>\r\n setremoveType(false)\r\n }\r\n />}\r\n </div>\r\n )\r\n}\r\n\r\nexport default AdminIndex\r\n","import logo from \"../../static/logo.png\";\r\nimport './index.scss'\r\nimport ToolType from \"../../component/ToolType/ToolType\";\r\nimport Content from '../../component/ContentAdmin/Content'\r\nimport {PopContext, Root} from \"../../dataCenter/Root\";\r\nimport {useContext, useEffect, useState} from \"react\";\r\nimport {NEED_UPDATE_INDEX} from \"../../dataCenter/action\";\r\nimport AdminIndex from \"../../component/AdminIndex/AdminIndex\";\r\n\r\nfunction Index() {\r\n const [pop, setPop] = useState()\r\n const {fetchData, dataCenter, dispatch} = useContext(Root)\r\n const showPop = popComponent => {\r\n setPop(popComponent)\r\n }\r\n const getUser = () => {\r\n fetchData('/users/getUser', {userId: '100001'}, 'userInfo')\r\n .catch(res =>\r\n res.code === 70001 && (window.location.href = '/login')\r\n )\r\n }\r\n\r\n useEffect(() => {\r\n fetchData('/query/queryType', {}, 'type')\r\n .then(()=> fetchData('/query/queryChildType',{typeId: dataCenter.typeId},'childType'))\r\n .then(() => dispatch(NEED_UPDATE_INDEX()))\r\n }, [dataCenter.typeId])\r\n\r\n useEffect(() => {\r\n if (dataCenter.needUpdateIndex) {\r\n const _typeId = dataCenter.typeId === 'all' ? {} : dataCenter.typeId === 'follow' ? {\r\n isFollow: true,\r\n typeId: JSON.stringify(dataCenter.userInfo.follow)\r\n } : {typeId: dataCenter.typeId}\r\n fetchData('/query/queryToolBox', _typeId, 'toolBox').then(() => dispatch(NEED_UPDATE_INDEX()))\r\n }\r\n }, [dataCenter.needUpdateIndex])\r\n\r\n useEffect(() => {\r\n getUser()\r\n }, [])\r\n\r\n return (\r\n <PopContext.Provider value={{hidePop: () => setPop(''), showPop: popName => showPop(popName)}}>\r\n <div className=\"index\">\r\n <div className=\"welcome-top\">\r\n <span>欢迎您!\r\n <span className=\"welcome-uname\">{dataCenter?.userInfo?.uname}</span>\r\n <a className=\"login-btn\">退出登录</a>\r\n </span>\r\n </div>\r\n <div className=\"nav\">\r\n <div className=\"nav-title\">\r\n <img src={logo} alt=\"\"/>\r\n </div>\r\n <div className=\"nav-weather\">\r\n <iframe width=\"360\" height=\"40\" frameBorder=\"0\" scrolling=\"no\" hspace=\"0\"\r\n src=\"https://i.tianqi.com/?c=code&a=getcode&id=40&icon=1\"/>\r\n </div>\r\n </div>\r\n <div className=\"tool-nav\">\r\n <ToolType/>\r\n </div>\r\n <div className=\"container\">\r\n <Content/>\r\n </div>\r\n {\r\n pop\r\n }\r\n <div className=\"index-footer\">\r\n 兑吧研发中心·杭州兑吧网络科技游戏公司版权所有\r\n <br/>\r\n 浙ICP备14017299号-1\r\n </div>\r\n <AdminIndex/>\r\n </div>\r\n </PopContext.Provider>\r\n )\r\n}\r\n\r\nexport default Index\r\n\r\n","import './Content.scss'\r\nimport ContentItem from \"./ContentItem\";\r\nimport {useContext} from \"react\";\r\nimport {Root} from \"../../dataCenter/Root\";\r\n\r\nfunction Content(props) {\r\n const {dataCenter} = useContext(Root)\r\n return (\r\n <div className=\"content\">\r\n {\r\n dataCenter.toolBox?.length ? dataCenter?.toolBox?.filter(v => {\r\n if (dataCenter.childTypeId === 'all') return true\r\n else return v.childTypeId === dataCenter.childTypeId\r\n }).map(v => {\r\n return (\r\n <ContentItem key={v['toolBoxId']} value={v}/>\r\n )\r\n })\r\n :\r\n '没有数据了!'\r\n }\r\n </div>\r\n )\r\n}\r\n\r\nexport default Content\r\n","import logo from \"../../static/logo.png\";\r\nimport './index.scss'\r\nimport ToolType from \"../../component/ToolType/ToolType\";\r\nimport Content from \"../../component/Content/Content\";\r\nimport {Root} from \"../../dataCenter/Root\";\r\nimport {useContext, useEffect} from \"react\";\r\nimport {NEED_UPDATE_INDEX} from \"../../dataCenter/action\";\r\n\r\nfunction Index() {\r\n const {fetchData, dataCenter, dispatch} = useContext(Root)\r\n const getUser = () => {\r\n fetchData('/users/getUser', {userId: '100001'}, 'userInfo')\r\n .catch(res =>\r\n res.code === 70001 && (window.location.href = '/login')\r\n )\r\n }\r\n useEffect(() => {\r\n fetchData('/query/queryType', {}, 'type')\r\n .then(() => fetchData('/query/queryChildType', {typeId: dataCenter.typeId}, 'childType'))\r\n .then(() => dispatch(NEED_UPDATE_INDEX()))\r\n }, [dataCenter.typeId])\r\n useEffect(() => {\r\n if (dataCenter.needUpdateIndex) {\r\n const _typeId = dataCenter.typeId === 'follow' ? {\r\n isFollow: true,\r\n typeId: JSON.stringify(dataCenter.userInfo.follow)\r\n } : {typeId: dataCenter.typeId}\r\n fetchData('/query/queryToolBox', _typeId, 'toolBox').then(() => dispatch(NEED_UPDATE_INDEX()))\r\n }\r\n }, [dataCenter.needUpdateIndex])\r\n\r\n useEffect(() => {\r\n getUser()\r\n }, [])\r\n\r\n return (\r\n\r\n <div className=\"index\">\r\n <div className=\"welcome-top\">\r\n <span>欢迎您!\r\n <span className=\"welcome-uname\">{dataCenter?.userInfo?.uname}</span>\r\n <a className=\"login-btn\">退出登录</a>\r\n </span>\r\n </div>\r\n <div className=\"nav\">\r\n <div className=\"nav-title\">\r\n <img src={logo} alt=\"\"/>\r\n </div>\r\n <div className=\"nav-weather\">\r\n <iframe width=\"360\" height=\"40\" frameBorder=\"0\" scrolling=\"no\" hspace=\"0\"\r\n src=\"https://i.tianqi.com/?c=code&a=getcode&id=40&icon=1\"/>\r\n </div>\r\n </div>\r\n <div className=\"tool-nav\">\r\n <ToolType/>\r\n </div>\r\n <div className=\"container\">\r\n <Content/>\r\n </div>\r\n <div className=\"index-footer\">\r\n 兑吧研发中心·杭州兑吧网络科技游戏公司版权所有\r\n <br/>\r\n 浙ICP备14017299号-1\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default Index\r\n\r\n","import './login.scss'\r\nimport {useContext, useEffect, useState} from \"react\";\r\nimport {Root} from \"../../dataCenter/Root\";\r\nimport {useFormState} from \"../../utils/hook\";\r\n\r\nfunction Login(props) {\r\n const {fetchData, dataCenter} = useContext(Root)\r\n const [needLogin,setNeedLogin] = useState(false)\r\n const [input, setInput] = useFormState()\r\n const getUser = ()=>{\r\n fetchData('/users/getUser', {userId:'100001'}, 'userInfo')\r\n .then(res => res.data.uid && (window.location.href = '/index'))\r\n .catch(res =>\r\n res.code === 70001 && setNeedLogin(true)\r\n )\r\n }\r\n const doLogin = () => {\r\n if (needLogin){\r\n fetchData('/users/login',{userId: '100001'})\r\n .then(()=>{\r\n getUser()\r\n })\r\n }else {\r\n getUser()\r\n }\r\n }\r\n useEffect(() => {\r\n if (dataCenter.userInfo) {\r\n // window.location.href = '/index'\r\n }\r\n }, [dataCenter.userInfo])\r\n\r\n useEffect(() => {\r\n doLogin()\r\n }, [])\r\n return (\r\n <div className=\"login\">\r\n <div className='loginDiv'>\r\n {\r\n needLogin && <input type=\"text\" onChange={e => setInput('userId',e.target.value)} defaultValue={input.userId}/>\r\n }\r\n <button className='btn-login' onClick={() => doLogin()}>登录</button>\r\n </div>\r\n\r\n </div>\r\n )\r\n}\r\n\r\nexport default Login\r\n","import {useCallback, useState} from \"react\";\r\n\r\nconst useFormState = (initialValues = {}) => {\r\n const [input, setInput] = useState(initialValues)\r\n\r\n const setInputData = useCallback((name, value) => {\r\n setInput(() => Object.assign({}, {...input}, {[name]: value}))\r\n }, [input])\r\n\r\n return [input, setInputData]\r\n}\r\n\r\n\r\nconst useDrag = () => {\r\n\r\n}\r\n\r\n\r\n\r\n//这个hook很有意思,怎么样保存return出去的那个组件的数据呢\r\n// function usePopContainer(props) {\r\n// const dragRef = useRef()\r\n// const [offset, setOffset] = useState({x: 0, y: 0})\r\n// const [draggable, setDraggable] = useState(false)\r\n// const handleMouseDown = e => {\r\n// e.stopPropagation()\r\n// setDraggable(true)\r\n// setOffset({\r\n// x: e.clientX - dragRef.current['getBoundingClientRect']().x,\r\n// y: e.clientY - dragRef.current['getBoundingClientRect']().y\r\n// })\r\n// }\r\n//\r\n// const handleMouseUp = () => setDraggable(false)\r\n// const handleMouseMove = e => {\r\n// if (draggable) {\r\n// dragRef.current.style.transform = `translate(${e.clientX - offset.x}px,${e.clientY - offset.y}px)`\r\n// console.log(dragRef.current.style.transform)\r\n// }\r\n// }\r\n// return {\r\n// PopContainer: props => (\r\n// <div className=\"drag-Container\"\r\n// onMouseUp={() => handleMouseUp()}\r\n// onMouseMove={(e) => handleMouseMove(e)}>\r\n// <div className=\"Pop-container\"\r\n// ref={dragRef}\r\n// >\r\n// {props.children}\r\n// </div>\r\n// </div>\r\n// ),\r\n// dragMouseDown: e => handleMouseDown(e)\r\n// }\r\n// }\r\n\r\nexport {\r\n useFormState,\r\n useDrag,\r\n}\r\n","import './App.css';\r\nimport DataCenter from \"./dataCenter/Root\";\r\nimport IndexAdmin from \"./page/indexAdmin\";\r\nimport Index from \"./page/index\";\r\nimport Login from \"./page/login/login\";\r\nimport {HashRouter as Router, Route, Switch} from \"react-router-dom\";\r\n\r\nfunction App() {\r\n return (\r\n <Router>\r\n <DataCenter>\r\n <Switch>\r\n <Route exact path='/login' component={Login}/>\r\n <Route exact path='/' component={Index}/>\r\n <Route exact path='/admin' component={IndexAdmin}/>\r\n </Switch>\r\n </DataCenter>\r\n </Router>\r\n );\r\n}\r\n\r\nexport default App;\r\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport {ConfigProvider} from 'antd';\r\n// 由于 antd 组件的默认文案是英文,所以需要修改为中文\r\nimport zhCN from 'antd/lib/locale/zh_CN';\r\nimport moment from 'moment';\r\nimport 'moment/locale/zh-cn';\r\nimport 'antd/dist/antd.css';\r\nimport './index.css';\r\nimport App from './App';\r\nimport reportWebVitals from './reportWebVitals';\r\n\r\nmoment.locale('zh-cn');\r\nReactDOM.render(\r\n <React.StrictMode>\r\n <ConfigProvider locale={zhCN}>\r\n <App />\r\n </ConfigProvider>\r\n </React.StrictMode>,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n"],"sourceRoot":""}
\ No newline at end of file
{
"PORT": "3000",
"API_HOST": "//dui123.duibadev.com.cn",
"PROJECTX_HOST": "http://activity.m.duibadev.com.cn",
"SSO": {
"ssourl": "http://sso.duibadev.com.cn",
"systemId": 249,
"systemName": "dui123",
"appSecret": "98e72000586f43e3b55da663c9f8af72",
"profiles": "dev"
},
"RES_MYSQL_ID": "duiba_spark8",
"remote_config_url": "http://configserver.dui88.com/dui123/dev"
}
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
"web-vitals": "^1.0.1" "web-vitals": "^1.0.1"
}, },
"scripts": { "scripts": {
"dev": "react-scripts start",
"start": "node server/bin/www", "start": "node server/bin/www",
"build": "sh build.sh", "build": "sh build.sh",
"buildWeb": "react-scripts build", "buildWeb": "react-scripts build",
......
const MYSQL = require('mysql') const MYSQL = require('mysql')
const Mysql = MYSQL.createPool({ const config = require('../config/dev.json')
'host': '127.0.0.1', const request = require('request')
'port': '3306',
'user': 'wty', request(config['remote_config_url'],{},(error, request, body)=>{
'password': 'wty990215', const data = JSON.parse(body)
'database': 'dui123', const source = data['propertySources'][0]['source']
const username = source['apollo.mysql.duiba_web_tool.username']
const password = source['apollo.mysql.duiba_web_tool.password']
const database = source['apollo.mysql.duiba_web_tool.database']
const host = source['apollo.mysql.duiba_web_tool.url'].split(':')[0]
const port = source['apollo.mysql.duiba_web_tool.url'].split(':')[1]
const Mysql = MYSQL.createPool({
'host': host,
'port': port,
'user': username,
'password': password,
'database': database,
'connectionLimit': 1000 'connectionLimit': 1000
})
module.exports = Mysql
}) })
module.exports = Mysql
...@@ -30,10 +30,11 @@ router.get('/getUser', function (req, res, next) { ...@@ -30,10 +30,11 @@ router.get('/getUser', function (req, res, next) {
}) })
return return
} }
console.log(result)
const _result = result.slice() const _result = result.slice()
_result[0].follow = JSON.parse(_result[0].follow) _result[0].follow = JSON.parse(_result[0].follow)
// console.log(JSON.parse(_result[0]))
res.send({ res.send({
......
...@@ -4,8 +4,18 @@ import IndexAdmin from "./page/indexAdmin"; ...@@ -4,8 +4,18 @@ import IndexAdmin from "./page/indexAdmin";
import Index from "./page/index"; import Index from "./page/index";
import Login from "./page/login/login"; import Login from "./page/login/login";
import {HashRouter as Router, Route, Switch} from "react-router-dom"; import {HashRouter as Router, Route, Switch} from "react-router-dom";
import {useEffect} from "react";
function App() { function App() {
useEffect(() => {
console.log("%c+",
`font-size: 1px;
padding: 122px 217px;
background-image: url(https://yun.duiba.com.cn/spark/assets/cc8da992b527b3cd24da7df9a5be8b2361c2e549.jpg);
background-size: contain;
background-repeat: no-repeat;
color: transparent;`);
}, [])
return ( return (
<Router> <Router>
<DataCenter> <DataCenter>
......
...@@ -9,11 +9,11 @@ function Content(props) { ...@@ -9,11 +9,11 @@ function Content(props) {
<div className="content"> <div className="content">
{ {
dataCenter.toolBox?.length ? dataCenter?.toolBox?.filter(v => { dataCenter.toolBox?.length ? dataCenter?.toolBox?.filter(v => {
if (dataCenter.childTypeId === 'all') return true if (dataCenter.child_type_id === 'all') return true
else return v.childTypeId === dataCenter.childTypeId else return v.child_type_id === dataCenter.child_type_id
}).map(v => { }).map(v => {
return ( return (
<ContentItem key={v['toolBoxId']} value={v}/> <ContentItem key={v['toolbox_id']} value={v}/>
) )
}) })
: :
......
...@@ -6,27 +6,27 @@ import {Root} from "../../dataCenter/Root"; ...@@ -6,27 +6,27 @@ import {Root} from "../../dataCenter/Root";
function ContentItem(props) { function ContentItem(props) {
const {dataCenter, fetchData} = useContext(Root) const {dataCenter, fetchData} = useContext(Root)
const {toolBoxIcon, toolBoxName, toolBoxDesc, toolBoxUrl, toolBoxId} = props.value const {toolbox_icon, toolbox_name, toolbox_desc, toolbox_url, toolbox_id} = props.value
const [isFollow, setIsFollow] = useState(false) const [isFollow, setIsFollow] = useState(false)
const [itemIcon, setItemIcon] = useState(toolBoxIcon) const [itemIcon, setItemIcon] = useState(toolbox_icon)
const jumpUrl = url => window.location.href = url const jumpUrl = url => window.location.href = url
const follow = () => { const follow = () => {
const _follow = dataCenter.userInfo.follow.slice() const _follow = dataCenter.userInfo.follow.slice()
if (!isFollow) { if (!isFollow) {
_follow.push(toolBoxId) _follow.push(toolbox_id)
} else { } else {
const index = _follow.indexOf(toolBoxId) const index = _follow.indexOf(toolbox_id)
_follow.splice(index, 1) _follow.splice(index, 1)
} }
console.log( {follow: JSON.stringify(_follow), userId: dataCenter.userInfo.uid}) console.log( {follow: JSON.stringify(_follow), uid: dataCenter.userInfo.uid})
fetchData('/users/follow', {follow: JSON.stringify(_follow), userId: dataCenter.userInfo.uid}) fetchData('/users/follow', {follow: JSON.stringify(_follow), uid: dataCenter.userInfo.uid})
.then(() => fetchData('/users/getUser', {userId: 100001}, 'userInfo')) .then(() => fetchData('/users/getUser', {uid: 100001}, 'userInfo'))
} }
useEffect(() => { useEffect(() => {
if (dataCenter.userInfo?.follow.includes(toolBoxId)) { if (dataCenter.userInfo?.follow.includes(toolbox_id)) {
setIsFollow(true) setIsFollow(true)
} else { } else {
setIsFollow(false) setIsFollow(false)
...@@ -35,18 +35,18 @@ function ContentItem(props) { ...@@ -35,18 +35,18 @@ function ContentItem(props) {
return ( return (
<div className="content-item"> <div className="content-item">
<div className="item-icon" onClick={() => jumpUrl(toolBoxUrl)}> <div className="item-icon" onClick={() => jumpUrl(toolbox_url)}>
{ {
!itemIcon && <div className="defaultIcon">{toolBoxName[0]}</div> !itemIcon && <div className="defaultIcon">{toolbox_name[0]}</div>
} }
{ {
itemIcon && <img src={itemIcon} alt='' onError={e => setItemIcon(null)}/> itemIcon && <img src={itemIcon} alt='' onError={e => setItemIcon(null)}/>
} }
</div> </div>
<div className="item-name" onClick={() => jumpUrl(toolBoxUrl)}>{toolBoxName}</div> <div className="item-name" onClick={() => jumpUrl(toolbox_url)}>{toolbox_name}</div>
<div className="item-desc">{toolBoxDesc}</div> <div className="item-desc">{toolbox_desc}</div>
<a className='item-url' href={toolBoxUrl}>{toolBoxUrl}</a> <a className='item-url' href={toolbox_url}>{toolbox_url}</a>
<div className="follow"> <div className="follow">
<img className='icon-follow' src={isFollow ? followed : notFollow} alt="" onClick={() => follow()}/> <img className='icon-follow' src={isFollow ? followed : notFollow} alt="" onClick={() => follow()}/>
收藏 收藏
......
...@@ -11,11 +11,11 @@ function Content(props) { ...@@ -11,11 +11,11 @@ function Content(props) {
<div className="content"> <div className="content">
{ {
dataCenter.toolBox?.length ? dataCenter?.toolBox?.filter(v => { dataCenter.toolBox?.length ? dataCenter?.toolBox?.filter(v => {
if (dataCenter.childTypeId === 'all') return true if (dataCenter.child_type_id === 'all') return true
else return v.childTypeId === dataCenter.childTypeId else return v.child_type_id === dataCenter.child_type_id
}).map(v => { }).map(v => {
return ( return (
<ContentItemAdmin key={v['toolBoxId']} value={v}/> <ContentItemAdmin key={v['toolbox_id']} value={v}/>
) )
}) })
: :
......
...@@ -14,15 +14,15 @@ function ContentItemAdmin(props) { ...@@ -14,15 +14,15 @@ function ContentItemAdmin(props) {
const {fetchData} = useContext(Root) const {fetchData} = useContext(Root)
const {showPop} = useContext(PopContext) const {showPop} = useContext(PopContext)
const {toolBoxIcon, toolBoxName, toolBoxDesc, toolBoxUrl, follow, toolBoxId} = props.value const {toolbox_icon, toolbox_name, toolbox_desc, toolbox_url, follow, toolbox_id} = props.value
const [itemIcon, setItemIcon] = useState(toolBoxIcon) const [itemIcon, setItemIcon] = useState(toolbox_icon)
const jumpUrl = url => { const jumpUrl = url => {
window.location.href = url window.location.href = url
} }
const deleteItem = toolBoxId => { const deleteItem = toolbox_id => {
fetchData('/delete/deleteToolBoxById', {toolBoxId}) fetchData('/delete/deleteToolBoxById', {toolbox_id})
} }
return ( return (
...@@ -30,19 +30,19 @@ function ContentItemAdmin(props) { ...@@ -30,19 +30,19 @@ function ContentItemAdmin(props) {
<div className="content-adminTool"> <div className="content-adminTool">
<img src={dragIcon} alt=""/> <img src={dragIcon} alt=""/>
<img src={setting} alt="" onClick={() => setVisible(true)}/> <img src={setting} alt="" onClick={() => setVisible(true)}/>
<img src={trash} alt="" onClick={() => deleteItem(toolBoxId)}/> <img src={trash} alt="" onClick={() => deleteItem(toolbox_id)}/>
</div> </div>
<div className="item-icon" onClick={() => jumpUrl(toolBoxUrl)}> <div className="item-icon" onClick={() => jumpUrl(toolbox_url)}>
{ {
!itemIcon && <div className="defaultIcon">{toolBoxName[0]}</div> !itemIcon && <div className="defaultIcon">{toolbox_name[0]}</div>
} }
{ {
itemIcon && <img src={itemIcon} alt='' onError={e => setItemIcon(null)}/> itemIcon && <img src={itemIcon} alt='' onError={e => setItemIcon(null)}/>
} }
</div> </div>
<div className="item-name" onClick={() => jumpUrl(toolBoxUrl)}>{toolBoxName}</div> <div className="item-name" onClick={() => jumpUrl(toolbox_url)}>{toolbox_name}</div>
<div className="item-desc">{toolBoxDesc}</div> <div className="item-desc">{toolbox_desc}</div>
<a className='item-url' href={toolBoxUrl}>{toolBoxUrl}</a> <a className='item-url' href={toolbox_url}>{toolbox_url}</a>
<div className="follow"> <div className="follow">
<img className='icon-follow' src={follow ? followed : notFollow} alt=""/> <img className='icon-follow' src={follow ? followed : notFollow} alt=""/>
收藏 收藏
......
...@@ -4,46 +4,46 @@ import {useFormState} from "../../utils/hook"; ...@@ -4,46 +4,46 @@ import {useFormState} from "../../utils/hook";
import PopContainer from "../PopContainer/PopContainer"; import PopContainer from "../PopContainer/PopContainer";
function Pop_toolBoxConfig(props) { function Pop_toolBoxConfig(props) {
const {toolBoxName, toolBoxIcon, toolBoxDesc, toolBoxUrl, toolBoxId} = props.value const {toolbox_name, toolbox_icon, toolbox_desc, toolbox_url, toolbox_id} = props.value
const {fetchData, updateIndex} = useContext(Root) const {fetchData, updateIndex} = useContext(Root)
const [input, setInput] = useFormState({ const [input, setInput] = useFormState({
toolBoxName, toolbox_name,
toolBoxIcon, toolbox_icon,
toolBoxDesc, toolbox_desc,
toolBoxUrl toolbox_url
}) })
const updateToolBox = () => { const updateToolBox = () => {
fetchData('/update/updateToolBox', Object.assign({}, input, {toolBoxId})) fetchData('/update/updateToolBox', Object.assign({}, input, {toolbox_id}))
.then(() => updateIndex()) .then(() => updateIndex())
} }
return ( return (
<PopContainer> <PopContainer>
<h2 className='Pop-title'>{toolBoxName}</h2> <h2 className='Pop-title'>{toolbox_name}</h2>
<div className="formArea"> <div className="formArea">
<div className="input-group "> <div className="input-group ">
<input type="text" onChange={e => setInput('toolBoxName', e.target.value)} <input type="text" onChange={e => setInput('toolbox_name', e.target.value)}
defaultValue={input?.['toolBoxName']} defaultValue={input?.['toolbox_name']}
min={1} required/> min={1} required/>
<span> 名称</span> <span> 名称</span>
</div> </div>
<div className="input-group "> <div className="input-group ">
<input type="text" onChange={e => setInput('toolBoxIcon', e.target.value)} <input type="text" onChange={e => setInput('toolbox_icon', e.target.value)}
defaultValue={input?.['toolBoxIcon']} defaultValue={input?.['toolbox_icon']}
min={1} required/> min={1} required/>
<span> 图标</span> <span> 图标</span>
</div> </div>
<div className="input-group "> <div className="input-group ">
<input type="text" onChange={e => setInput('toolBoxDesc', e.target.value)} <input type="text" onChange={e => setInput('toolbox_desc', e.target.value)}
defaultValue={input?.['toolBoxDesc']} defaultValue={input?.['toolbox_desc']}
min={1} required/> min={1} required/>
<span> 描述</span> <span> 描述</span>
</div> </div>
<div className="input-group "> <div className="input-group ">
<input type="text" onChange={e => setInput('toolBoxUrl', e.target.value)} <input type="text" onChange={e => setInput('toolbox_url', e.target.value)}
defaultValue={input?.['toolBoxUrl']} min={1} defaultValue={input?.['toolbox_url']} min={1}
required/> required/>
<span> 链接</span> <span> 链接</span>
</div> </div>
......
...@@ -18,35 +18,35 @@ function Pop_addToolBox() { ...@@ -18,35 +18,35 @@ function Pop_addToolBox() {
<h2 className='Pop-title'>新建工具盒</h2> <h2 className='Pop-title'>新建工具盒</h2>
<div className="formArea"> <div className="formArea">
<div className="input-group "> <div className="input-group ">
<input type="text" onChange={e => setInput('toolBoxName', e.target.value)} <input type="text" onChange={e => setInput('toolbox_name', e.target.value)}
defaultValue={input?.['toolBoxName']} defaultValue={input?.['toolbox_name']}
min={1} required/> min={1} required/>
<span> 名称</span> <span> 名称</span>
</div> </div>
<div className="input-group "> <div className="input-group ">
<input type="text" onChange={e => setInput('toolBoxIcon', e.target.value)} <input type="text" onChange={e => setInput('toolbox_icon', e.target.value)}
defaultValue={input?.['toolBoxIcon']} defaultValue={input?.['toolbox_icon']}
min={1} required/> min={1} required/>
<span> 图标</span> <span> 图标</span>
</div> </div>
<div className="input-group "> <div className="input-group ">
<input type="text" onChange={e => setInput('toolBoxDesc', e.target.value)} <input type="text" onChange={e => setInput('toolbox_desc', e.target.value)}
defaultValue={input?.['toolBoxDesc']} defaultValue={input?.['toolbox_desc']}
min={1} required/> min={1} required/>
<span> 描述</span> <span> 描述</span>
</div> </div>
<div className="input-group "> <div className="input-group ">
<input type="text" onChange={e => setInput('toolBoxUrl', e.target.value)} <input type="text" onChange={e => setInput('toolbox_url', e.target.value)}
defaultValue={input?.['toolBoxUrl']} min={1} defaultValue={input?.['toolbox_url']} min={1}
required/> required/>
<span> 链接</span> <span> 链接</span>
</div> </div>
<div className="input-group "> <div className="input-group ">
<select onChange={(e)=> setInput('typeId',e.target.value)}> <select onChange={(e)=> setInput('type_id',e.target.value)}>
{ {
dataCenter?.type?.length && dataCenter?.type.map(v=>{ dataCenter?.type?.length && dataCenter?.type.map(v=>{
return ( return (
<option key={v.typeId} value={v.typeId}>{v.typeName}</option> <option key={v.type_id} value={v.type_id}>{v.type_name}</option>
) )
}) })
} }
......
...@@ -20,8 +20,8 @@ function Pop_addType(props) { ...@@ -20,8 +20,8 @@ function Pop_addType(props) {
<h2 className='Pop-title'>新建类型</h2> <h2 className='Pop-title'>新建类型</h2>
<div className="formArea"> <div className="formArea">
<div className="input-group "> <div className="input-group ">
<input type="text" onChange={e => setInput('typeName', e.target.value)} <input type="text" onChange={e => setInput('type_name', e.target.value)}
defaultValue={input?.typeName} defaultValue={input?.type_name}
min={1} required/> min={1} required/>
<span> 类型名称</span> <span> 类型名称</span>
</div> </div>
......
...@@ -5,17 +5,17 @@ import {CHANGE_CHILD_TYPE, CHANGE_TYPE} from "../../dataCenter/action"; ...@@ -5,17 +5,17 @@ import {CHANGE_CHILD_TYPE, CHANGE_TYPE} from "../../dataCenter/action";
const ChildTypeItem = props => { const ChildTypeItem = props => {
const {dataCenter, dispatch} = useContext(Root) const {dataCenter, dispatch} = useContext(Root)
const {childTypeId, childTypeName} = props const {child_type_id, child_type_name} = props
const classNameArr = ['child-type-item'] const classNameArr = ['child-type-item']
if (childTypeId === dataCenter.childTypeId) { if (child_type_id === dataCenter.child_type_id) {
classNameArr.push('child-type-item-selected') classNameArr.push('child-type-item-selected')
} }
const handleClick = () => { const handleClick = () => {
console.log(childTypeId) console.log(child_type_id)
dispatch(CHANGE_CHILD_TYPE(childTypeId)) dispatch(CHANGE_CHILD_TYPE(child_type_id))
} }
return ( return (
<div className={classNameArr.join(' ')} onClick={handleClick}>{childTypeName}</div> <div className={classNameArr.join(' ')} onClick={handleClick}>{child_type_name}</div>
) )
} }
...@@ -25,27 +25,27 @@ function ToolType(props) { ...@@ -25,27 +25,27 @@ function ToolType(props) {
return ( return (
<> <>
<div className="tab-tool-type"> <div className="tab-tool-type">
<div className={dataCenter.typeId === 'follow' ? 'item-tool-type item-tool-type-selected' : 'item-tool-type'} <div className={dataCenter.type_id === 'follow' ? 'item-tool-type item-tool-type-selected' : 'item-tool-type'}
onClick={() => dispatch(CHANGE_TYPE('follow'))}>我的收藏 onClick={() => dispatch(CHANGE_TYPE('follow'))}>我的收藏
</div> </div>
{ {
dataCenter?.type?.length > 0 && dataCenter.type.map(v => { dataCenter?.type?.length > 0 && dataCenter.type.map(v => {
const classNameArr = ['item-tool-type '] const classNameArr = ['item-tool-type ']
if (v["typeId"] === dataCenter.typeId) classNameArr.push('item-tool-type-selected') if (v["type_id"] === dataCenter.type_id) classNameArr.push('item-tool-type-selected')
return ( return (
<div key={v["typeId"]} className={classNameArr.join('')} <div key={v["type_id"]} className={classNameArr.join('')}
onClick={() => dispatch(CHANGE_TYPE( v["typeId"]))}>{v.typeName}</div> onClick={() => dispatch(CHANGE_TYPE( v["type_id"]))}>{v.type_name}</div>
) )
}) })
} }
</div> </div>
<div className="child-type"> <div className="child-type">
<ChildTypeItem key={'all'} childTypeId={'all'} childTypeName={'全部'}/> <ChildTypeItem key={'all'} child_type_id={'all'} child_type_name={'全部'}/>
{ {
dataCenter?.childType?.length > 0 && dataCenter?.childType.map(v => { dataCenter?.childType?.length > 0 && dataCenter?.childType.map(v => {
return ( return (
<ChildTypeItem key={v.childTypeId} childTypeId={v.childTypeId} <ChildTypeItem key={v.child_type_id} child_type_id={v.child_type_id}
childTypeName={v.childTypeName}/> child_type_name={v.child_type_name}/>
) )
}) })
} }
......
const apiConfig = { const apiConfig = {
domain: 'http://' + window.location.hostname + ':3000', // domain: 'http://' + window.location.hostname + ':3000',
domain: 'http://127.0.0.1:3001',
} }
export default apiConfig export default apiConfig
const UPDATE_DATA = data => ({type: 'UPDATE_DATA', data: {...data}}) const UPDATE_DATA = data => ({type: 'UPDATE_DATA', data: {...data}})
const NEED_UPDATE_INDEX = () => ({type: 'NEED_UPDATE_INDEX'}) const NEED_UPDATE_INDEX = () => ({type: 'NEED_UPDATE_INDEX'})
const CHANGE_TYPE = typeId => ({type: 'CHANGE_TYPE', typeId: typeId}) const CHANGE_TYPE = type_id => ({type: 'CHANGE_TYPE', type_id: type_id})
const CHANGE_CHILD_TYPE = childTypeId => ({type: 'CHANGE_CHILD_TYPE', childTypeId: childTypeId}) const CHANGE_CHILD_TYPE = child_type_id => ({type: 'CHANGE_CHILD_TYPE', child_type_id: child_type_id})
export { export {
UPDATE_DATA, UPDATE_DATA,
......
...@@ -4,8 +4,8 @@ const initDataCenter = { ...@@ -4,8 +4,8 @@ const initDataCenter = {
childType: null, childType: null,
userInfo: null, userInfo: null,
needUpdateIndex: false, needUpdateIndex: false,
typeId: 'follow', type_id: 'follow',
childTypeId: 'all' child_type_id: 'all'
} }
/** /**
...@@ -44,9 +44,9 @@ const dataReducer = (state, action) => { ...@@ -44,9 +44,9 @@ const dataReducer = (state, action) => {
case 'NEED_UPDATE_INDEX': case 'NEED_UPDATE_INDEX':
return Object.assign({}, state, {needUpdateIndex: !state.needUpdateIndex}) return Object.assign({}, state, {needUpdateIndex: !state.needUpdateIndex})
case 'CHANGE_TYPE': case 'CHANGE_TYPE':
return Object.assign({}, state, {typeId: action.typeId}) return Object.assign({}, state, {type_id: action.type_id})
case 'CHANGE_CHILD_TYPE': case 'CHANGE_CHILD_TYPE':
return Object.assign({}, state, {childTypeId: action.childTypeId}) return Object.assign({}, state, {child_type_id: action.child_type_id})
default: default:
return state return state
} }
......
...@@ -24,13 +24,13 @@ function PageModal({ visible, onCancel, onPublish }) { ...@@ -24,13 +24,13 @@ function PageModal({ visible, onCancel, onPublish }) {
const columns = [ const columns = [
{ {
title: '页面Id', title: '页面Id',
dataIndex: 'pageId', dataIndex: 'page_id',
width: 150, width: 150,
align: 'center' align: 'center'
}, },
{ {
title: '页面名称', title: '页面名称',
dataIndex: 'pageName', dataIndex: 'page_name',
width: 200, width: 200,
align: 'center' align: 'center'
}, },
......
...@@ -23,14 +23,14 @@ const { Option } = Select; ...@@ -23,14 +23,14 @@ const { Option } = Select;
const PublishModal = ({ visible, onCancel, data }) => { const PublishModal = ({ visible, onCancel, data }) => {
const [code, setcode] = useState('') const [code, setcode] = useState('')
const [pageName, setPageName] = useState('') const [page_name, setPageName] = useState('')
const [oldCode, setoldCode] = useState('') const [oldCode, setoldCode] = useState('')
const { fetchData, dataCenter } = useContext(Root) const { fetchData, dataCenter } = useContext(Root)
console.log(data); console.log(data);
const onCreate = (values) => { const onCreate = (values) => {
console.log(code); console.log(code);
if (!code || !pageName) { if (!code || !page_name) {
message.error('请补全信息!') message.error('请补全信息!')
return return
} }
...@@ -41,8 +41,8 @@ const PublishModal = ({ visible, onCancel, data }) => { ...@@ -41,8 +41,8 @@ const PublishModal = ({ visible, onCancel, data }) => {
'Content-Type': 'application/json' 'Content-Type': 'application/json'
}, },
body: JSON.stringify({ body: JSON.stringify({
pageId: data.pageId, page_id: data.page_id,
pageName: pageName, page_name: page_name,
code: code code: code
}) })
}) })
...@@ -66,7 +66,7 @@ const PublishModal = ({ visible, onCancel, data }) => { ...@@ -66,7 +66,7 @@ const PublishModal = ({ visible, onCancel, data }) => {
'Content-Type': 'application/json' 'Content-Type': 'application/json'
}, },
body: JSON.stringify({ body: JSON.stringify({
pageName: pageName, page_name: page_name,
code: code code: code
}) })
}) })
...@@ -87,7 +87,7 @@ const PublishModal = ({ visible, onCancel, data }) => { ...@@ -87,7 +87,7 @@ const PublishModal = ({ visible, onCancel, data }) => {
}; };
useEffect(() => { useEffect(() => {
data&&setPageName(data.pageName) data&&setPageName(data.page_name)
}, [data]) }, [data])
return ( return (
...@@ -101,7 +101,7 @@ const PublishModal = ({ visible, onCancel, data }) => { ...@@ -101,7 +101,7 @@ const PublishModal = ({ visible, onCancel, data }) => {
width='1000px' width='1000px'
> >
<Form.Item <Form.Item
name="pageName" name="page_name"
label="页面名称" label="页面名称"
rules={[ rules={[
{ {
...@@ -110,7 +110,7 @@ const PublishModal = ({ visible, onCancel, data }) => { ...@@ -110,7 +110,7 @@ const PublishModal = ({ visible, onCancel, data }) => {
}, },
]} ]}
> >
<Input placeholder="请输入页面名称" defaultValue={data?.pageName ? data.pageName : pageName} onChange={(e) => { setPageName(e.target.value) }} /> <Input placeholder="请输入页面名称" defaultValue={data?.page_name ? data.page_name : page_name} onChange={(e) => { setPageName(e.target.value) }} />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
name="type" name="type"
......
...@@ -28,16 +28,16 @@ function RemoveType({ visible, onCancel }) { ...@@ -28,16 +28,16 @@ function RemoveType({ visible, onCancel }) {
const res = cb(item); const res = cb(item);
if (item.children) res.children = changeData(item.children, item => ({ if (item.children) res.children = changeData(item.children, item => ({
isRemove: true, isRemove: true,
key: item.childTypeId, key: item.child_type_id,
typeId: item.childTypeId, type_id: item.child_type_id,
typeName: item.childTypeName, type_name: item.child_type_name,
})); }));
return res; return res;
}) })
} }
const removeType = (data) => { const removeType = (data) => {
fetchData('/typeManage/deleteChildType', { childTypeId: data.typeId }) fetchData('/typeManage/deleteChildType', { child_type_id: data.type_id })
.then((res) => { .then((res) => {
if (res.success) { if (res.success) {
message.success('刪除成功') message.success('刪除成功')
...@@ -55,9 +55,9 @@ function RemoveType({ visible, onCancel }) { ...@@ -55,9 +55,9 @@ function RemoveType({ visible, onCancel }) {
.then((res) => { .then((res) => {
// console.log(res.data); // console.log(res.data);
const newData = changeData(res.data, item => ({ const newData = changeData(res.data, item => ({
key: item.typeId, key: item.type_id,
typeId: item.typeId, type_id: item.type_id,
typeName: item.typeName, type_name: item.type_name,
})); }));
// console.log(newData); // console.log(newData);
settypeData(newData) settypeData(newData)
...@@ -69,8 +69,8 @@ function RemoveType({ visible, onCancel }) { ...@@ -69,8 +69,8 @@ function RemoveType({ visible, onCancel }) {
}, []) }, [])
const columns = [ const columns = [
{ title: '类型名', width: 100, dataIndex: 'typeName', key: 'typeName' }, { title: '类型名', width: 100, dataIndex: 'type_name', key: 'type_name' },
{ title: 'Id', width: 100, dataIndex: 'typeId', align: 'center', key: 'typeId' }, { title: 'Id', width: 100, dataIndex: 'type_id', align: 'center', key: 'type_id' },
{ {
title: '操作', width: 100, key: 'operation', align: 'center', title: '操作', width: 100, key: 'operation', align: 'center',
render: (text, record) => ( render: (text, record) => (
......
...@@ -12,17 +12,17 @@ const ToolModal = ({ visible, onCancel, data }) => { ...@@ -12,17 +12,17 @@ const ToolModal = ({ visible, onCancel, data }) => {
}; };
const onCreate = (values) => { const onCreate = (values) => {
let input = { let input = {
toolBoxName: values.name, toolbox_name: values.name,
toolBoxIcon: values.icon, toolbox_icon: values.icon,
toolBoxDesc: values.depict, toolbox_desc: values.depict,
toolBoxUrl: values.url, toolbox_url: values.url,
} }
if (!data) { if (!data) {
input = { input = {
...input, ...input,
typeId: values.type, type_id: values.type,
childTypeId: values.childType child_type_id: values.childType
} }
console.log(input); console.log(input);
fetchData('/add/addToolBox', input) fetchData('/add/addToolBox', input)
...@@ -54,7 +54,7 @@ const ToolModal = ({ visible, onCancel, data }) => { ...@@ -54,7 +54,7 @@ const ToolModal = ({ visible, onCancel, data }) => {
form.setFieldsValue({ form.setFieldsValue({
type: value, type: value,
}); });
fetchData('/query/queryChildType', { typeId: value }, 'childType') fetchData('/query/queryChildType', { type_id: value }, 'childType')
.then((res) => { .then((res) => {
console.log(res); console.log(res);
...@@ -68,7 +68,7 @@ const ToolModal = ({ visible, onCancel, data }) => { ...@@ -68,7 +68,7 @@ const ToolModal = ({ visible, onCancel, data }) => {
}; };
useEffect(() => { useEffect(() => {
dataCenter?.type && fetchData('/query/queryChildType', { typeId: dataCenter?.type[0]?.typeId }, 'childType') dataCenter?.type && fetchData('/query/queryChildType', { type_id: dataCenter?.type[0]?.type_id }, 'childType')
.then((res) => { .then((res) => {
console.log(res); console.log(res);
...@@ -100,11 +100,11 @@ const ToolModal = ({ visible, onCancel, data }) => { ...@@ -100,11 +100,11 @@ const ToolModal = ({ visible, onCancel, data }) => {
{...formItemLayout} {...formItemLayout}
name="form_in_modal" name="form_in_modal"
initialValues={data ? { initialValues={data ? {
name: data.toolBoxName, name: data.toolbox_name,
icon: data.toolBoxIcon, icon: data.toolbox_icon,
url: data.toolBoxUrl, url: data.toolbox_url,
depict: data.toolBoxDesc, depict: data.toolbox_desc,
} : { type: dataCenter?.type && dataCenter?.type[0]?.typeId }} } : { type: dataCenter?.type && dataCenter?.type[0]?.type_id }}
> >
<Form.Item <Form.Item
name="name" name="name"
...@@ -171,7 +171,7 @@ const ToolModal = ({ visible, onCancel, data }) => { ...@@ -171,7 +171,7 @@ const ToolModal = ({ visible, onCancel, data }) => {
{ {
dataCenter?.type?.length && dataCenter?.type.map(v => { dataCenter?.type?.length && dataCenter?.type.map(v => {
return ( return (
<Option key={v.typeId} value={v.typeId}>{v.typeName}</Option> <Option key={v.type_id} value={v.type_id}>{v.type_name}</Option>
) )
}) })
} }
...@@ -190,7 +190,7 @@ const ToolModal = ({ visible, onCancel, data }) => { ...@@ -190,7 +190,7 @@ const ToolModal = ({ visible, onCancel, data }) => {
{ {
dataCenter?.childType?.length && dataCenter?.childType.map(v => { dataCenter?.childType?.length && dataCenter?.childType.map(v => {
return ( return (
<Option key={v.childTypeId} value={v.childTypeId}>{v.childTypeName}</Option> <Option key={v.child_type_id} value={v.child_type_id}>{v.child_type_name}</Option>
) )
}) })
} }
......
...@@ -10,7 +10,7 @@ const TypeModal = ({ visible, onCancel, queryData, data }) => { ...@@ -10,7 +10,7 @@ const TypeModal = ({ visible, onCancel, queryData, data }) => {
const [form] = Form.useForm(); const [form] = Form.useForm();
if (data) { if (data) {
form.setFieldsValue({ form.setFieldsValue({
typeName: data.typeName, type_name: data.type_name,
}); });
} }
const formItemLayout = { const formItemLayout = {
...@@ -27,18 +27,18 @@ const TypeModal = ({ visible, onCancel, queryData, data }) => { ...@@ -27,18 +27,18 @@ const TypeModal = ({ visible, onCancel, queryData, data }) => {
console.log(data); console.log(data);
let input = { let input = {
typeId: '', type_id: '',
typeName: '' type_name: ''
} }
if (!data.isRemove) { if (!data.isRemove) {
input = { input = {
typeId: data.typeId, type_id: data.type_id,
typeName: values.typeName type_name: values.type_name
} }
} else { } else {
input = { input = {
childTypeId: data.typeId, child_type_id: data.type_id,
childTypeName: values.typeName child_type_name: values.type_name
} }
} }
fetchData('/typeManage/updateType', input) fetchData('/typeManage/updateType', input)
...@@ -74,7 +74,7 @@ const TypeModal = ({ visible, onCancel, queryData, data }) => { ...@@ -74,7 +74,7 @@ const TypeModal = ({ visible, onCancel, queryData, data }) => {
const onGenderChange = (value) => { const onGenderChange = (value) => {
form.setFieldsValue({ form.setFieldsValue({
typeId: value, type_id: value,
}); });
}; };
...@@ -115,7 +115,7 @@ const TypeModal = ({ visible, onCancel, queryData, data }) => { ...@@ -115,7 +115,7 @@ const TypeModal = ({ visible, onCancel, queryData, data }) => {
</Radio.Group> </Radio.Group>
</Form.Item>} </Form.Item>}
{value === 1 || data ? <Form.Item {value === 1 || data ? <Form.Item
name="typeName" name="type_name"
label={`${data ? '' : '父'}类型`} label={`${data ? '' : '父'}类型`}
rules={[ rules={[
{ {
...@@ -128,7 +128,7 @@ const TypeModal = ({ visible, onCancel, queryData, data }) => { ...@@ -128,7 +128,7 @@ const TypeModal = ({ visible, onCancel, queryData, data }) => {
</Form.Item> : </Form.Item> :
<> <>
<Form.Item <Form.Item
name="typeId" name="type_id"
label="父类型" label="父类型"
hasFeedback hasFeedback
rules={[{ required: true, message: '请选择父类型!' }]} rules={[{ required: true, message: '请选择父类型!' }]}
...@@ -141,7 +141,7 @@ const TypeModal = ({ visible, onCancel, queryData, data }) => { ...@@ -141,7 +141,7 @@ const TypeModal = ({ visible, onCancel, queryData, data }) => {
{ {
dataCenter?.type?.length && dataCenter?.type.map(v => { dataCenter?.type?.length && dataCenter?.type.map(v => {
return ( return (
<Option key={v.typeId} value={v.typeId}>{v.typeName}</Option> <Option key={v.type_id} value={v.type_id}>{v.type_name}</Option>
) )
}) })
} }
...@@ -149,7 +149,7 @@ const TypeModal = ({ visible, onCancel, queryData, data }) => { ...@@ -149,7 +149,7 @@ const TypeModal = ({ visible, onCancel, queryData, data }) => {
</Select> </Select>
</Form.Item> </Form.Item>
<Form.Item <Form.Item
name="childTypeName" name="child_type_name"
label="子类型" label="子类型"
rules={[ rules={[
{ {
......
...@@ -9,22 +9,22 @@ import {NEED_UPDATE_INDEX} from "../../dataCenter/action"; ...@@ -9,22 +9,22 @@ import {NEED_UPDATE_INDEX} from "../../dataCenter/action";
function Index() { function Index() {
const {fetchData, dataCenter, dispatch} = useContext(Root) const {fetchData, dataCenter, dispatch} = useContext(Root)
const getUser = () => { const getUser = () => {
fetchData('/users/getUser', {userId: '100001'}, 'userInfo') fetchData('/users/getUser', {uid: '100001'}, 'userInfo')
.catch(res => .catch(res =>
res.code === 70001 && (window.location.href = '/login') res.code === 70001 && (window.location.href = '/login')
) )
} }
useEffect(() => { useEffect(() => {
fetchData('/query/queryType', {}, 'type') fetchData('/query/queryType', {}, 'type')
.then(() => fetchData('/query/queryChildType', {typeId: dataCenter.typeId}, 'childType')) .then(() => fetchData('/query/queryChildType', {type_id: dataCenter.type_id}, 'childType'))
.then(() => dispatch(NEED_UPDATE_INDEX())) .then(() => dispatch(NEED_UPDATE_INDEX()))
}, [dataCenter.typeId]) }, [dataCenter.type_id])
useEffect(() => { useEffect(() => {
if (dataCenter.needUpdateIndex) { if (dataCenter.needUpdateIndex) {
const _typeId = dataCenter.typeId === 'follow' ? { const _typeId = dataCenter.type_id === 'follow' ? {
isFollow: true, isFollow: true,
typeId: JSON.stringify(dataCenter.userInfo.follow) type_id: JSON.stringify(dataCenter.userInfo.follow)
} : {typeId: dataCenter.typeId} } : {type_id: dataCenter.type_id}
fetchData('/query/queryToolBox', _typeId, 'toolBox').then(() => dispatch(NEED_UPDATE_INDEX())) fetchData('/query/queryToolBox', _typeId, 'toolBox').then(() => dispatch(NEED_UPDATE_INDEX()))
} }
}, [dataCenter.needUpdateIndex]) }, [dataCenter.needUpdateIndex])
......
...@@ -14,7 +14,7 @@ function Index() { ...@@ -14,7 +14,7 @@ function Index() {
setPop(popComponent) setPop(popComponent)
} }
const getUser = () => { const getUser = () => {
fetchData('/users/getUser', {userId: '100001'}, 'userInfo') fetchData('/users/getUser', {uid: '100001'}, 'userInfo')
.catch(res => .catch(res =>
res.code === 70001 && (window.location.href = '/login') res.code === 70001 && (window.location.href = '/login')
) )
...@@ -22,16 +22,16 @@ function Index() { ...@@ -22,16 +22,16 @@ function Index() {
useEffect(() => { useEffect(() => {
fetchData('/query/queryType', {}, 'type') fetchData('/query/queryType', {}, 'type')
.then(()=> fetchData('/query/queryChildType',{typeId: dataCenter.typeId},'childType')) .then(()=> fetchData('/query/queryChildType',{type_id: dataCenter.type_id},'childType'))
.then(() => dispatch(NEED_UPDATE_INDEX())) .then(() => dispatch(NEED_UPDATE_INDEX()))
}, [dataCenter.typeId]) }, [dataCenter.type_id])
useEffect(() => { useEffect(() => {
if (dataCenter.needUpdateIndex) { if (dataCenter.needUpdateIndex) {
const _typeId = dataCenter.typeId === 'all' ? {} : dataCenter.typeId === 'follow' ? { const _typeId = dataCenter.type_id === 'all' ? {} : dataCenter.type_id === 'follow' ? {
isFollow: true, isFollow: true,
typeId: JSON.stringify(dataCenter.userInfo.follow) type_id: JSON.stringify(dataCenter.userInfo.follow)
} : {typeId: dataCenter.typeId} } : {type_id: dataCenter.type_id}
fetchData('/query/queryToolBox', _typeId, 'toolBox').then(() => dispatch(NEED_UPDATE_INDEX())) fetchData('/query/queryToolBox', _typeId, 'toolBox').then(() => dispatch(NEED_UPDATE_INDEX()))
} }
}, [dataCenter.needUpdateIndex]) }, [dataCenter.needUpdateIndex])
......
...@@ -8,7 +8,7 @@ function Login(props) { ...@@ -8,7 +8,7 @@ function Login(props) {
const [needLogin,setNeedLogin] = useState(false) const [needLogin,setNeedLogin] = useState(false)
const [input, setInput] = useFormState() const [input, setInput] = useFormState()
const getUser = ()=>{ const getUser = ()=>{
fetchData('/users/getUser', {userId:'100001'}, 'userInfo') fetchData('/users/getUser', {uid:'100001'}, 'userInfo')
.then(res => res.data.uid && (window.location.href = '/index')) .then(res => res.data.uid && (window.location.href = '/index'))
.catch(res => .catch(res =>
res.code === 70001 && setNeedLogin(true) res.code === 70001 && setNeedLogin(true)
...@@ -16,7 +16,7 @@ function Login(props) { ...@@ -16,7 +16,7 @@ function Login(props) {
} }
const doLogin = () => { const doLogin = () => {
if (needLogin){ if (needLogin){
fetchData('/users/login',{userId: '100001'}) fetchData('/users/login',{uid: '100001'})
.then(()=>{ .then(()=>{
getUser() getUser()
}) })
...@@ -37,7 +37,7 @@ function Login(props) { ...@@ -37,7 +37,7 @@ function Login(props) {
<div className="login"> <div className="login">
<div className='loginDiv'> <div className='loginDiv'>
{ {
needLogin && <input type="text" onChange={e => setInput('userId',e.target.value)} defaultValue={input.userId}/> needLogin && <input type="text" onChange={e => setInput('uid',e.target.value)} defaultValue={input.uid}/>
} }
<button className='btn-login' onClick={() => doLogin()}>登录</button> <button className='btn-login' onClick={() => doLogin()}>登录</button>
</div> </div>
......
...@@ -4,23 +4,23 @@ ...@@ -4,23 +4,23 @@
/query/queryType GET /query/queryType GET
### getUser 获取用户信息 ### getUser 获取用户信息
参数:(cookie userId) 参数:(cookie uid)
/users/getUser GET /users/getUser GET
### queryToolBox 获取工具箱信息 ### queryToolBox 获取工具箱信息
参数: typeId (childTypeId) 参数: type_id (child_type_id)
/query/queryToolBox GET /query/queryToolBox GET
### queryChildType 查询子类型信息 ### queryChildType 查询子类型信息
参数: typeId 参数: type_id
/query/queryChildType GET /query/queryChildType GET
### addToolBox ### addToolBox
参数: toolBoxName: 123 参数: toolbox_name: 123
toolBoxIcon: 123132 toolbox_icon: 123132
toolBoxDesc: 213312 toolbox_desc: 213312
toolBoxUrl: qweqwe toolbox_url: qweqwe
typeId: 2 type_id: 2
childType: 1 childType: 1
/add/addToolBoxId GET /add/addToolBoxId GET
...@@ -33,7 +33,7 @@ childType: 1 ...@@ -33,7 +33,7 @@ childType: 1
### addPage 发布页面 ### addPage 发布页面
参数: code pageName POST 参数: code page_name POST
/page/addPage /page/addPage
### queryPage 查询自定义页面信息 ### queryPage 查询自定义页面信息
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment