1 line
14 KiB
JavaScript
1 line
14 KiB
JavaScript
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[12],{1910:(e,t,r)=>{"use strict";r.d(t,{L:()=>o,M3:()=>u,WG:()=>l,gf:()=>a});let n="yelay_admin_token";function a(){var e;return null!=(e=window.localStorage.getItem(n))?e:""}function l(e){window.localStorage.setItem(n,e)}function o(){window.localStorage.removeItem(n)}function u(){return""!==a()}},2457:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>f});var n=r(1333),a=r(4705),l=r(8661),o=r.n(l),u=r(8166),i=r(1910),s=r(4357);let c=[{href:"/",label:"数据看板"},{href:"/users",label:"用户"},{href:"/orders",label:"订单"},{href:"/settings",label:"系统配置"}];function f(e){let{children:t}=e,r=(0,u.useRouter)(),l=(0,u.usePathname)(),[o,f]=(0,a.useState)(!1);return((0,a.useEffect)(()=>{if(!(0,i.M3)())return void r.replace("/login");f(!0)},[r]),o)?(0,n.jsxs)("div",{className:"flex min-h-screen",children:[(0,n.jsxs)("aside",{className:"w-56 shrink-0 border-r border-gray-200 bg-white",children:[(0,n.jsxs)("div",{className:"border-b border-gray-200 px-4 py-4",children:[(0,n.jsx)("div",{className:"text-sm font-semibold text-gray-900",children:"叶雷讲数学"}),(0,n.jsx)("div",{className:"text-xs text-gray-400",children:"管理后台"})]}),(0,n.jsxs)("nav",{className:"p-2",children:[c.map(e=>(0,n.jsx)(d,{href:e.href,label:e.label,active:l===e.href},e.href)),(0,n.jsx)("div",{className:"px-3 pt-4 pb-1 text-xs text-gray-400",children:"内容管理"}),s.le.map(e=>(0,n.jsx)(d,{href:"/".concat(e.key),label:e.title,active:l==="/".concat(e.key)},e.key))]}),(0,n.jsx)("div",{className:"border-t border-gray-200 p-2",children:(0,n.jsx)("button",{onClick:()=>{(0,i.L)(),r.replace("/login")},className:"w-full rounded-md px-3 py-2 text-left text-sm text-gray-600 hover:bg-gray-100",children:"退出登录"})})]}),(0,n.jsx)("main",{className:"flex-1 p-6",children:t})]}):(0,n.jsx)("div",{className:"flex min-h-screen items-center justify-center text-sm text-gray-400",children:"加载中…"})}function d(e){let{href:t,label:r,active:a}=e;return(0,n.jsx)(o(),{href:t,className:"block rounded-md px-3 py-2 text-sm transition ".concat(a?"bg-blue-50 font-medium text-blue-700":"text-gray-600 hover:bg-gray-100"),children:r})}},3035:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"errorOnce",{enumerable:!0,get:function(){return r}});let r=e=>{}},3140:(e,t)=>{"use strict";function r(e){let t={};for(let[r,n]of e.entries()){let e=t[r];void 0===e?t[r]=n:Array.isArray(e)?e.push(n):t[r]=[e,n]}return t}function n(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function a(e){let t=new URLSearchParams;for(let[r,a]of Object.entries(e))if(Array.isArray(a))for(let e of a)t.append(r,n(e));else t.set(r,n(a));return t}function l(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];for(let t of r){for(let r of t.keys())e.delete(r);for(let[r,n]of t.entries())e.append(r,n)}return e}Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{assign:function(){return l},searchParamsToUrlQuery:function(){return r},urlQueryToSearchParams:function(){return a}})},3190:(e,t,r)=>{Promise.resolve().then(r.bind(r,2457))},4354:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{DecodeError:function(){return m},MiddlewareNotFoundError:function(){return g},MissingStaticPage:function(){return h},NormalizeError:function(){return y},PageNotFoundError:function(){return b},SP:function(){return d},ST:function(){return p},WEB_VITALS:function(){return r},execOnce:function(){return n},getDisplayName:function(){return i},getLocationOrigin:function(){return o},getURL:function(){return u},isAbsoluteUrl:function(){return l},isResSent:function(){return s},loadGetInitialProps:function(){return f},normalizeRepeatedSlashes:function(){return c},stringifyError:function(){return x}});let r=["CLS","FCP","FID","INP","LCP","TTFB"];function n(e){let t,r=!1;return function(){for(var n=arguments.length,a=Array(n),l=0;l<n;l++)a[l]=arguments[l];return r||(r=!0,t=e(...a)),t}}let a=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,l=e=>a.test(e);function o(){let{protocol:e,hostname:t,port:r}=window.location;return e+"//"+t+(r?":"+r:"")}function u(){let{href:e}=window.location,t=o();return e.substring(t.length)}function i(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function s(e){return e.finished||e.headersSent}function c(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?"?"+t.slice(1).join("?"):"")}async function f(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await f(t.Component,t.ctx)}:{};let n=await e.getInitialProps(t);if(r&&s(r))return n;if(!n)throw Object.defineProperty(Error('"'+i(e)+'.getInitialProps()" should resolve to an object. But found "'+n+'" instead.'),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return n}let d="undefined"!=typeof performance,p=d&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class m extends Error{}class y extends Error{}class b extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message="Cannot find module for page: "+e}}class h extends Error{constructor(e,t){super(),this.message="Failed to load static file for page: "+e+" "+t}}class g extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function x(e){return JSON.stringify({message:e.message,stack:e.stack})}},4357:(e,t,r)=>{"use strict";r.d(t,{MW:()=>o,le:()=>l,u_:()=>u});let n={name:"status",label:"状态",type:"select",options:[{value:1,label:"启用"},{value:0,label:"停用"}]},a={name:"sort_order",label:"排序",type:"number",hideInTable:!0},l=[{key:"courses",title:"课程",description:"付费课程。注意 code 是视频目录名与封面名,创建后不可修改。",fields:[{name:"code",label:"课程标识",type:"text",immutable:!0,hint:"64 位哈希,对应视频目录"},{name:"title",label:"课程名称",type:"text"},{name:"intro",label:"课程介绍",type:"text"},{name:"price_fen",label:"价格(分)",type:"number"},{name:"cover_image",label:"封面文件",type:"text",hideInTable:!0},n,a]},{key:"lessons",title:"课时",description:"课程下的视频。chapter_id 与 play_id 参与视频路径拼接,改动会使旧地址失效。",filterByCourse:!0,fields:[{name:"course_id",label:"课程 ID",type:"number"},{name:"chapter_id",label:"章节 ID",type:"text"},{name:"play_id",label:"播放 ID",type:"text"},{name:"chapter_title",label:"章节名称",type:"text"},{name:"lesson_title",label:"视频名称",type:"text"},{name:"duration",label:"时长",type:"text"},{name:"published_at",label:"发布日期",type:"date"},a]},{key:"home-courses",title:"首页新课",description:"首页「新课上线」的长图页面。course_name 决定图片路径,不要改动。",fields:[{name:"course_name",label:"条目名称",type:"text",hint:"对应 Images/NewCourse/{名称}.png"},{name:"intro",label:"简介",type:"text"},{name:"course_id",label:"关联课程 ID",type:"number",hint:"留空则长图页不显示购买按钮"},{name:"content",label:"长图内容",type:"textarea",hideInTable:!0},{name:"published_at",label:"发布日期",type:"date",hideInTable:!0},n,a]},{key:"home-free-courses",title:"首页试听",description:"首页「自我学习」入口。course_name 决定图片路径。",fields:[{name:"series_no",label:"序号",type:"number",hint:"对应免费试听课的 series_no"},{name:"course_name",label:"条目名称",type:"text"},{name:"intro",label:"简介",type:"text"},n,a]},{key:"banners",title:"轮播图",description:"首页顶部轮播。filename 对应 Images/Banner/{文件名}。",fields:[{name:"filename",label:"图片文件名",type:"text"},n,a]},{key:"articles",title:"知识速通",description:"首页「知识速通」文章。legacy_page_id 对应缩略图 WebPages/{id}.png。",fields:[{name:"title",label:"标题",type:"text"},{name:"legacy_page_id",label:"图片编号",type:"text"},{name:"intro",label:"简介",type:"text"},{name:"publisher",label:"发布人",type:"text",hideInTable:!0},{name:"content",label:"正文",type:"textarea",hideInTable:!0},{name:"published_at",label:"发布日期",type:"date"},n,a]},{key:"products",title:"支付商品",description:"课程与微信虚拟支付道具的映射。微信道具 ID 与价格必须先在小程序后台创建。",fields:[{name:"course_id",label:"课程 ID",type:"number"},{name:"wx_product_id",label:"微信道具 ID",type:"text"},{name:"name",label:"商品名称",type:"text"},{name:"price_fen",label:"价格(分)",type:"text"},n]}],o=e=>l.find(t=>t.key===e),u={0:"待支付",1:"已支付",2:"已开通",3:"已退款",4:"已关闭"}},4721:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"useMergedRef",{enumerable:!0,get:function(){return a}});let n=r(4705);function a(e,t){let r=(0,n.useRef)(null),a=(0,n.useRef)(null);return(0,n.useCallback)(n=>{if(null===n){let e=r.current;e&&(r.current=null,e());let t=a.current;t&&(a.current=null,t())}else e&&(r.current=l(e,n)),t&&(a.current=l(t,n))},[e,t])}function l(e,t){if("function"!=typeof e)return e.current=t,()=>{e.current=null};{let r=e(t);return"function"==typeof r?r:()=>e(null)}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},7036:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{formatUrl:function(){return l},formatWithValidation:function(){return u},urlObjectKeys:function(){return o}});let n=r(1697)._(r(3140)),a=/https?|ftp|gopher|file/;function l(e){let{auth:t,hostname:r}=e,l=e.protocol||"",o=e.pathname||"",u=e.hash||"",i=e.query||"",s=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?s=t+e.host:r&&(s=t+(~r.indexOf(":")?"["+r+"]":r),e.port&&(s+=":"+e.port)),i&&"object"==typeof i&&(i=String(n.urlQueryToSearchParams(i)));let c=e.search||i&&"?"+i||"";return l&&!l.endsWith(":")&&(l+=":"),e.slashes||(!l||a.test(l))&&!1!==s?(s="//"+(s||""),o&&"/"!==o[0]&&(o="/"+o)):s||(s=""),u&&"#"!==u[0]&&(u="#"+u),c&&"?"!==c[0]&&(c="?"+c),""+l+s+(o=o.replace(/[?#]/g,encodeURIComponent))+(c=c.replace("#","%23"))+u}let o=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"];function u(e){return l(e)}},7477:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"isLocalURL",{enumerable:!0,get:function(){return l}});let n=r(4354),a=r(3643);function l(e){if(!(0,n.isAbsoluteUrl)(e))return!0;try{let t=(0,n.getLocationOrigin)(),r=new URL(e,t);return r.origin===t&&(0,a.hasBasePath)(r.pathname)}catch(e){return!1}}},8166:(e,t,r)=>{"use strict";var n=r(8874);r.o(n,"useParams")&&r.d(t,{useParams:function(){return n.useParams}}),r.o(n,"usePathname")&&r.d(t,{usePathname:function(){return n.usePathname}}),r.o(n,"useRouter")&&r.d(t,{useRouter:function(){return n.useRouter}})},8661:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{default:function(){return b},useLinkStatus:function(){return g}});let n=r(1697),a=r(1333),l=n._(r(4705)),o=r(7036),u=r(9738),i=r(4721),s=r(4354),c=r(2720);r(9491);let f=r(9677),d=r(7477),p=r(473);r(3035);let m=r(8242);function y(e){return"string"==typeof e?e:(0,o.formatUrl)(e)}function b(e){var t;let r,n,o,[b,g]=(0,l.useOptimistic)(f.IDLE_LINK_STATUS),x=(0,l.useRef)(null),{href:_,as:v,children:P,prefetch:j=null,passHref:N,replace:E,shallow:I,scroll:O,onClick:k,onMouseEnter:S,onTouchStart:T,legacyBehavior:w=!1,onNavigate:C,ref:R,unstable_dynamicOnHover:M,...L}=e;r=P,w&&("string"==typeof r||"number"==typeof r)&&(r=(0,a.jsx)("a",{children:r}));let A=l.default.useContext(u.AppRouterContext),U=!1!==j,D=!1!==j?null===(t=j)||"auto"===t?m.FetchStrategy.PPR:m.FetchStrategy.Full:m.FetchStrategy.PPR,{href:F,as:B}=l.default.useMemo(()=>{let e=y(_);return{href:e,as:v?y(v):e}},[_,v]);w&&(n=l.default.Children.only(r));let K=w?n&&"object"==typeof n&&n.ref:R,W=l.default.useCallback(e=>(null!==A&&(x.current=(0,f.mountLinkInstance)(e,F,A,D,U,g)),()=>{x.current&&((0,f.unmountLinkForCurrentNavigation)(x.current),x.current=null),(0,f.unmountPrefetchableInstance)(e)}),[U,F,A,D,g]),z={ref:(0,i.useMergedRef)(W,K),onClick(e){w||"function"!=typeof k||k(e),w&&n.props&&"function"==typeof n.props.onClick&&n.props.onClick(e),A&&(e.defaultPrevented||function(e,t,r,n,a,o,u){let{nodeName:i}=e.currentTarget;if(!("A"===i.toUpperCase()&&function(e){let t=e.currentTarget.getAttribute("target");return t&&"_self"!==t||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.nativeEvent&&2===e.nativeEvent.which}(e)||e.currentTarget.hasAttribute("download"))){if(!(0,d.isLocalURL)(t)){a&&(e.preventDefault(),location.replace(t));return}if(e.preventDefault(),u){let e=!1;if(u({preventDefault:()=>{e=!0}}),e)return}l.default.startTransition(()=>{(0,p.dispatchNavigateAction)(r||t,a?"replace":"push",null==o||o,n.current)})}}(e,F,B,x,E,O,C))},onMouseEnter(e){w||"function"!=typeof S||S(e),w&&n.props&&"function"==typeof n.props.onMouseEnter&&n.props.onMouseEnter(e),A&&U&&(0,f.onNavigationIntent)(e.currentTarget,!0===M)},onTouchStart:function(e){w||"function"!=typeof T||T(e),w&&n.props&&"function"==typeof n.props.onTouchStart&&n.props.onTouchStart(e),A&&U&&(0,f.onNavigationIntent)(e.currentTarget,!0===M)}};return(0,s.isAbsoluteUrl)(B)?z.href=B:w&&!N&&("a"!==n.type||"href"in n.props)||(z.href=(0,c.addBasePath)(B)),o=w?l.default.cloneElement(n,z):(0,a.jsx)("a",{...L,...z,children:r}),(0,a.jsx)(h.Provider,{value:b,children:o})}let h=(0,l.createContext)(f.IDLE_LINK_STATUS),g=()=>(0,l.useContext)(h);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)}},e=>{e.O(0,[964,857,358],()=>e(e.s=3190)),_N_E=e.O()}]); |