From 1c93cf8fe67c1816d19c845ac32aea670a96dad6 Mon Sep 17 00:00:00 2001 From: lion <120344285@qq.com> Date: Mon, 8 Jun 2026 16:49:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Admin/RadarMapController.php | 4 ++-- .../Controllers/Admin/SigninQrController.php | 18 ++++++++++++------ public/.htaccess | 6 ++++++ ...out-BUb933pz.js => AdminLayout-C5ZaI7EI.js} | 2 +- ...meView-BxwLAXqC.js => HomeView-DwMokhDw.js} | 2 +- ...ufF_.js => TeacherDetailDialog-XqXXxiK0.js} | 2 +- ...ties-B_XgKYQ2.js => activities-4DmBuess.js} | 2 +- ...ties-ByMS-EcA.js => activities-dvEtD3Zu.js} | 2 +- .../{assets-CEyD64oq.js => assets-CxiSHyud.js} | 2 +- ...logs-DR4n46wf.js => audit-logs-BGK_WIZW.js} | 2 +- ...banners-CBylDnQD.js => banners-BmFq1VCs.js} | 2 +- ...courses-BzDRFiuu.js => courses-B3VNk5Xm.js} | 2 +- ...courses-DjCB_SCT.js => courses-CeyGHp9D.js} | 2 +- ...crawler-CMbJoTEv.js => crawler-Dor4p03x.js} | 2 +- public/admin/assets/csv-export-BJBhoiZr.css | 1 + public/admin/assets/csv-export-BctnjsYJ.js | 17 ----------------- public/admin/assets/csv-export-CRokRAld.js | 17 +++++++++++++++++ public/admin/assets/csv-export-DdfNc7Eh.css | 1 - ...board-DSewjGuL.js => dashboard-C0rbnFc_.js} | 2 +- ...demands-H5Ve1ibc.js => demands-Cu3uhYI4.js} | 2 +- ...demands-CJyXU85f.js => demands-DAPpYrpZ.js} | 2 +- .../{dict-BFb6lz5T.js => dict-Brh9rLpP.js} | 2 +- .../{dict-Buu0be9B.js => dict-tLCy1wJr.js} | 2 +- ...rs-CgD89DKF.js => grid-members-6iMIrNiH.js} | 2 +- .../{index-jhdMOnS8.js => index-D3i1HG2q.js} | 4 ++-- .../{login-k_jqOSXr.js => login-CcLj6rfL.js} | 2 +- public/admin/assets/map-B4IBjHYg.js | 1 - public/admin/assets/map-Bk5GvQmr.css | 1 - public/admin/assets/map-DF1n33gN.js | 1 + public/admin/assets/map-EDSPaiTF.css | 1 + .../{menus-BPUM4ZDN.js => menus-DMKcsIzx.js} | 2 +- .../{menus-BXR6sozD.js => menus-Dt5NFGDs.js} | 2 +- .../{news-CNzDDJ66.js => news-HG_AURn1.js} | 2 +- .../{news-Cw3KnWmV.js => news-yx6lT1xH.js} | 2 +- .../{papers-CMzrDwSU.js => papers-C_ud7hNI.js} | 2 +- ...ntk4.js => research-directions-B9hhzvVH.js} | 2 +- ...HLT1.js => research-directions-CvC9-9t-.js} | 2 +- .../{roles-Comz1GWB.js => roles-CWAB6J2L.js} | 2 +- .../{roles-BP2rQL9K.js => roles-DVfauYer.js} | 2 +- ...udents-Bp5pX66c.js => students-CcZs2NCH.js} | 2 +- ...achers-BIk-0G3l.js => teachers-BbYywEyV.js} | 2 +- ...achers-Bwiw24L3.js => teachers-Db8otWkD.js} | 2 +- ...es-IRYCKaRU.js => universities-DrNqTCdn.js} | 2 +- .../{upload-DS3tvR-r.js => upload-CKdHvIne.js} | 2 +- .../{users-BNovL_Kh.js => users-BHGyw8KL.js} | 2 +- .../{users-BmmKms2A.js => users-kcRKZ36n.js} | 2 +- public/admin/index.html | 2 +- 47 files changed, 77 insertions(+), 65 deletions(-) rename public/admin/assets/{AdminLayout-BUb933pz.js => AdminLayout-C5ZaI7EI.js} (97%) rename public/admin/assets/{HomeView-BxwLAXqC.js => HomeView-DwMokhDw.js} (94%) rename public/admin/assets/{TeacherDetailDialog-BEWCufF_.js => TeacherDetailDialog-XqXXxiK0.js} (98%) rename public/admin/assets/{activities-B_XgKYQ2.js => activities-4DmBuess.js} (98%) rename public/admin/assets/{activities-ByMS-EcA.js => activities-dvEtD3Zu.js} (91%) rename public/admin/assets/{assets-CEyD64oq.js => assets-CxiSHyud.js} (94%) rename public/admin/assets/{audit-logs-DR4n46wf.js => audit-logs-BGK_WIZW.js} (97%) rename public/admin/assets/{banners-CBylDnQD.js => banners-BmFq1VCs.js} (97%) rename public/admin/assets/{courses-BzDRFiuu.js => courses-B3VNk5Xm.js} (99%) rename public/admin/assets/{courses-DjCB_SCT.js => courses-CeyGHp9D.js} (91%) rename public/admin/assets/{crawler-CMbJoTEv.js => crawler-Dor4p03x.js} (98%) create mode 100644 public/admin/assets/csv-export-BJBhoiZr.css delete mode 100644 public/admin/assets/csv-export-BctnjsYJ.js create mode 100644 public/admin/assets/csv-export-CRokRAld.js delete mode 100644 public/admin/assets/csv-export-DdfNc7Eh.css rename public/admin/assets/{dashboard-DSewjGuL.js => dashboard-C0rbnFc_.js} (98%) rename public/admin/assets/{demands-H5Ve1ibc.js => demands-Cu3uhYI4.js} (97%) rename public/admin/assets/{demands-CJyXU85f.js => demands-DAPpYrpZ.js} (89%) rename public/admin/assets/{dict-BFb6lz5T.js => dict-Brh9rLpP.js} (92%) rename public/admin/assets/{dict-Buu0be9B.js => dict-tLCy1wJr.js} (98%) rename public/admin/assets/{grid-members-CgD89DKF.js => grid-members-6iMIrNiH.js} (96%) rename public/admin/assets/{index-jhdMOnS8.js => index-D3i1HG2q.js} (99%) rename public/admin/assets/{login-k_jqOSXr.js => login-CcLj6rfL.js} (96%) delete mode 100644 public/admin/assets/map-B4IBjHYg.js delete mode 100644 public/admin/assets/map-Bk5GvQmr.css create mode 100644 public/admin/assets/map-DF1n33gN.js create mode 100644 public/admin/assets/map-EDSPaiTF.css rename public/admin/assets/{menus-BPUM4ZDN.js => menus-DMKcsIzx.js} (97%) rename public/admin/assets/{menus-BXR6sozD.js => menus-Dt5NFGDs.js} (81%) rename public/admin/assets/{news-CNzDDJ66.js => news-HG_AURn1.js} (96%) rename public/admin/assets/{news-Cw3KnWmV.js => news-yx6lT1xH.js} (83%) rename public/admin/assets/{papers-CMzrDwSU.js => papers-C_ud7hNI.js} (97%) rename public/admin/assets/{research-directions-DG28ntk4.js => research-directions-B9hhzvVH.js} (88%) rename public/admin/assets/{research-directions-kSTdHLT1.js => research-directions-CvC9-9t-.js} (95%) rename public/admin/assets/{roles-Comz1GWB.js => roles-CWAB6J2L.js} (96%) rename public/admin/assets/{roles-BP2rQL9K.js => roles-DVfauYer.js} (77%) rename public/admin/assets/{students-Bp5pX66c.js => students-CcZs2NCH.js} (98%) rename public/admin/assets/{teachers-BIk-0G3l.js => teachers-BbYywEyV.js} (94%) rename public/admin/assets/{teachers-Bwiw24L3.js => teachers-Db8otWkD.js} (98%) rename public/admin/assets/{universities-IRYCKaRU.js => universities-DrNqTCdn.js} (98%) rename public/admin/assets/{upload-DS3tvR-r.js => upload-CKdHvIne.js} (78%) rename public/admin/assets/{users-BNovL_Kh.js => users-BHGyw8KL.js} (96%) rename public/admin/assets/{users-BmmKms2A.js => users-kcRKZ36n.js} (83%) diff --git a/app/Http/Controllers/Admin/RadarMapController.php b/app/Http/Controllers/Admin/RadarMapController.php index f59dade..62213dd 100644 --- a/app/Http/Controllers/Admin/RadarMapController.php +++ b/app/Http/Controllers/Admin/RadarMapController.php @@ -21,7 +21,6 @@ class RadarMapController extends Controller ->where('status', 1) ->whereNotNull('latitude') ->whereNotNull('longitude') - ->whereHas('teachers') ->with(['teachers' => function ($q) { $q->with(['starLevelItem', 'researchDirections'])->orderBy('name'); }]) @@ -79,7 +78,8 @@ class RadarMapController extends Controller { $coveredSchools = University::query() ->where('status', 1) - ->whereHas('teachers') + ->whereNotNull('latitude') + ->whereNotNull('longitude') ->count(); $mapTeachers = $universities->sum(fn (University $u) => $u->teachers->count()); diff --git a/app/Http/Controllers/Admin/SigninQrController.php b/app/Http/Controllers/Admin/SigninQrController.php index 4f61316..0af5cfc 100644 --- a/app/Http/Controllers/Admin/SigninQrController.php +++ b/app/Http/Controllers/Admin/SigninQrController.php @@ -16,12 +16,18 @@ class SigninQrController extends Controller 'code' => ['required', 'string', 'max:32'], ]); - $page = (string) config('services.wechat.mini_program.checkin_page', 'subpkg/checkin/index'); - $png = $wechat->getUnlimitedWxaCode($page, $data['code']); + try { + $page = (string) config('services.wechat.mini_program.checkin_page', 'subpkg/checkin/index'); + $png = $wechat->getUnlimitedWxaCode($page, $data['code']); - return response($png, 200, [ - 'Content-Type' => 'image/png', - 'Cache-Control' => 'private, max-age=300', - ]); + return response($png, 200, [ + 'Content-Type' => 'image/png', + 'Cache-Control' => 'private, max-age=300', + ]); + } catch (\Throwable $e) { + return response()->json([ + 'message' => $e->getMessage() ?: '生成小程序码失败', + ], 422); + } } } diff --git a/public/.htaccess b/public/.htaccess index 3aec5e2..46837c4 100644 --- a/public/.htaccess +++ b/public/.htaccess @@ -14,6 +14,12 @@ RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] + # Admin SPA: /admin/* 非静态资源回退到 index.html(刷新深链如 /admin/courses) + RewriteCond %{REQUEST_URI} ^/admin/ + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^admin/.* /admin/index.html [L] + # Send Requests To Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f diff --git a/public/admin/assets/AdminLayout-BUb933pz.js b/public/admin/assets/AdminLayout-C5ZaI7EI.js similarity index 97% rename from public/admin/assets/AdminLayout-BUb933pz.js rename to public/admin/assets/AdminLayout-C5ZaI7EI.js index df9a831..9a8b998 100644 --- a/public/admin/assets/AdminLayout-BUb933pz.js +++ b/public/admin/assets/AdminLayout-C5ZaI7EI.js @@ -1 +1 @@ -import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,Y as s,Z as c,at as l,b as u,f as d,h as f,ht as p,m,q as h,tn as g,x as _,y as v}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{a as y,d as b,h as x,l as S,n as C,o as w,s as T,t as E,v as D}from"./index-jhdMOnS8.js";var O={class:`user-link`},k=T(n({__name:`AdminLayout`,setup(n){let T=y(),k=w(),A=E(),j=v(()=>T.path),M=p(!1),N=p(!1),P=p({password:``,password_confirmation:``}),F=v(()=>A.user?.username||`—`);function I(e){return e&&x[e]||D}function L(e){e&&e!==T.path&&k.push(e)}async function R(e){e===`out`&&(await A.logout(),await k.replace({name:`login`})),e===`pwd`&&(P.value={password:``,password_confirmation:``},M.value=!0)}async function z(){N.value=!0;try{await C(P.value),S.success(`密码已更新`),M.value=!1}finally{N.value=!1}}return(n,p)=>{let v=s(`el-icon`),y=s(`el-dropdown-item`),x=s(`el-dropdown-menu`),S=s(`el-dropdown`),C=s(`el-header`),w=s(`el-menu-item`),E=s(`el-sub-menu`),D=s(`el-menu`),k=s(`el-aside`),B=s(`router-view`),V=s(`el-main`),H=s(`el-container`),U=s(`el-input`),W=s(`el-form-item`),G=s(`el-form`),K=s(`el-button`),q=s(`el-dialog`);return i(),e(m,null,[r(H,{class:`admin-layout`,direction:`vertical`},{default:l(()=>[r(C,{class:`layout-topbar`,height:`52px`},{default:l(()=>[p[7]||=u(`div`,{class:`brand`},`S-lake高校雷达网`,-1),p[8]||=u(`div`,{class:`spacer`},null,-1),r(S,{class:`topbar-user`,trigger:`click`,onCommand:R},{dropdown:l(()=>[r(x,null,{default:l(()=>[r(y,{command:`pwd`},{default:l(()=>[...p[5]||=[o(`修改密码`,-1)]]),_:1}),r(y,{command:`out`,divided:``,class:`dropdown-logout`},{default:l(()=>[...p[6]||=[o(` 退出登录 `,-1)]]),_:1})]),_:1})]),default:l(()=>[u(`span`,O,[o(g(t(A).user?.real_name||t(A).user?.username)+` `,1),r(v,{class:`el-icon--right`},{default:l(()=>[r(t(b))]),_:1})])]),_:1})]),_:1}),r(H,{class:`layout-body`},{default:l(()=>[r(k,{width:`260px`,class:`aside`},{default:l(()=>[r(D,{"default-active":j.value,class:`menu slake-menu`,"background-color":`#ffffff`,"text-color":`#495057`,"active-text-color":`#ffffff`},{default:l(()=>[(i(!0),e(m,null,h(t(A).menus,t=>(i(),e(m,{key:t.id},[t.children?.length?(i(),_(E,{key:0,index:String(t.id)},{title:l(()=>[r(v,null,{default:l(()=>[(i(),_(c(I(t.icon))))]),_:2},1024),u(`span`,null,g(t.title),1)]),default:l(()=>[(i(!0),e(m,null,h(t.children,e=>(i(),_(w,{key:e.id,index:e.path,onClick:t=>L(e.path)},{default:l(()=>[r(v,null,{default:l(()=>[(i(),_(c(I(e.icon))))]),_:2},1024),u(`span`,null,g(e.title),1)]),_:2},1032,[`index`,`onClick`]))),128))]),_:2},1032,[`index`])):(i(),_(w,{key:1,index:t.path,onClick:e=>L(t.path)},{default:l(()=>[r(v,null,{default:l(()=>[(i(),_(c(I(t.icon))))]),_:2},1024),u(`span`,null,g(t.title),1)]),_:2},1032,[`index`,`onClick`]))],64))),128))]),_:1},8,[`default-active`])]),_:1}),r(V,{class:`main`},{default:l(()=>[r(B,null,{default:l(({Component:e})=>[(i(),_(f,null,[t(T).meta.keepAlive&&e?(i(),_(c(e),{key:t(T).fullPath})):a(``,!0)],1024)),!t(T).meta.keepAlive&&e?(i(),_(c(e),{key:t(T).fullPath})):a(``,!0)]),_:1})]),_:1})]),_:1})]),_:1}),r(q,{modelValue:M.value,"onUpdate:modelValue":p[3]||=e=>M.value=e,class:`pwd-dialog`,title:`修改密码`,width:`480px`,"append-to-body":``,"destroy-on-close":``,onClosed:p[4]||=e=>P.value={password:``,password_confirmation:``}},{footer:l(()=>[r(K,{onClick:p[2]||=e=>M.value=!1},{default:l(()=>[...p[9]||=[o(`取消`,-1)]]),_:1}),r(K,{type:`primary`,loading:N.value,onClick:z},{default:l(()=>[...p[10]||=[o(`保存`,-1)]]),_:1},8,[`loading`])]),default:l(()=>[r(G,{class:`pwd-dialog-form`,"label-width":`100px`,onSubmit:d(z,[`prevent`])},{default:l(()=>[r(W,{label:`账号`},{default:l(()=>[r(U,{"model-value":F.value,readonly:``},null,8,[`model-value`])]),_:1}),r(W,{label:`新密码`,required:``},{default:l(()=>[r(U,{modelValue:P.value.password,"onUpdate:modelValue":p[0]||=e=>P.value.password=e,type:`password`,"show-password":``,placeholder:`至少 6 位`,autocomplete:`new-password`},null,8,[`modelValue`])]),_:1}),r(W,{label:`确认新密码`,required:``},{default:l(()=>[r(U,{modelValue:P.value.password_confirmation,"onUpdate:modelValue":p[1]||=e=>P.value.password_confirmation=e,type:`password`,"show-password":``,placeholder:`再次输入新密码`,autocomplete:`new-password`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`modelValue`])],64)}}}),[[`__scopeId`,`data-v-54fb5ddb`]]);export{k as default}; \ No newline at end of file +import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,Y as s,Z as c,at as l,b as u,f as d,h as f,ht as p,m,q as h,tn as g,x as _,y as v}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{a as y,d as b,h as x,l as S,n as C,o as w,s as T,t as E,v as D}from"./index-D3i1HG2q.js";var O={class:`user-link`},k=T(n({__name:`AdminLayout`,setup(n){let T=y(),k=w(),A=E(),j=v(()=>T.path),M=p(!1),N=p(!1),P=p({password:``,password_confirmation:``}),F=v(()=>A.user?.username||`—`);function I(e){return e&&x[e]||D}function L(e){e&&e!==T.path&&k.push(e)}async function R(e){e===`out`&&(await A.logout(),await k.replace({name:`login`})),e===`pwd`&&(P.value={password:``,password_confirmation:``},M.value=!0)}async function z(){N.value=!0;try{await C(P.value),S.success(`密码已更新`),M.value=!1}finally{N.value=!1}}return(n,p)=>{let v=s(`el-icon`),y=s(`el-dropdown-item`),x=s(`el-dropdown-menu`),S=s(`el-dropdown`),C=s(`el-header`),w=s(`el-menu-item`),E=s(`el-sub-menu`),D=s(`el-menu`),k=s(`el-aside`),B=s(`router-view`),V=s(`el-main`),H=s(`el-container`),U=s(`el-input`),W=s(`el-form-item`),G=s(`el-form`),K=s(`el-button`),q=s(`el-dialog`);return i(),e(m,null,[r(H,{class:`admin-layout`,direction:`vertical`},{default:l(()=>[r(C,{class:`layout-topbar`,height:`52px`},{default:l(()=>[p[7]||=u(`div`,{class:`brand`},`S-lake高校雷达网`,-1),p[8]||=u(`div`,{class:`spacer`},null,-1),r(S,{class:`topbar-user`,trigger:`click`,onCommand:R},{dropdown:l(()=>[r(x,null,{default:l(()=>[r(y,{command:`pwd`},{default:l(()=>[...p[5]||=[o(`修改密码`,-1)]]),_:1}),r(y,{command:`out`,divided:``,class:`dropdown-logout`},{default:l(()=>[...p[6]||=[o(` 退出登录 `,-1)]]),_:1})]),_:1})]),default:l(()=>[u(`span`,O,[o(g(t(A).user?.real_name||t(A).user?.username)+` `,1),r(v,{class:`el-icon--right`},{default:l(()=>[r(t(b))]),_:1})])]),_:1})]),_:1}),r(H,{class:`layout-body`},{default:l(()=>[r(k,{width:`260px`,class:`aside`},{default:l(()=>[r(D,{"default-active":j.value,class:`menu slake-menu`,"background-color":`#ffffff`,"text-color":`#495057`,"active-text-color":`#ffffff`},{default:l(()=>[(i(!0),e(m,null,h(t(A).menus,t=>(i(),e(m,{key:t.id},[t.children?.length?(i(),_(E,{key:0,index:String(t.id)},{title:l(()=>[r(v,null,{default:l(()=>[(i(),_(c(I(t.icon))))]),_:2},1024),u(`span`,null,g(t.title),1)]),default:l(()=>[(i(!0),e(m,null,h(t.children,e=>(i(),_(w,{key:e.id,index:e.path,onClick:t=>L(e.path)},{default:l(()=>[r(v,null,{default:l(()=>[(i(),_(c(I(e.icon))))]),_:2},1024),u(`span`,null,g(e.title),1)]),_:2},1032,[`index`,`onClick`]))),128))]),_:2},1032,[`index`])):(i(),_(w,{key:1,index:t.path,onClick:e=>L(t.path)},{default:l(()=>[r(v,null,{default:l(()=>[(i(),_(c(I(t.icon))))]),_:2},1024),u(`span`,null,g(t.title),1)]),_:2},1032,[`index`,`onClick`]))],64))),128))]),_:1},8,[`default-active`])]),_:1}),r(V,{class:`main`},{default:l(()=>[r(B,null,{default:l(({Component:e})=>[(i(),_(f,null,[t(T).meta.keepAlive&&e?(i(),_(c(e),{key:t(T).fullPath})):a(``,!0)],1024)),!t(T).meta.keepAlive&&e?(i(),_(c(e),{key:t(T).fullPath})):a(``,!0)]),_:1})]),_:1})]),_:1})]),_:1}),r(q,{modelValue:M.value,"onUpdate:modelValue":p[3]||=e=>M.value=e,class:`pwd-dialog`,title:`修改密码`,width:`480px`,"append-to-body":``,"destroy-on-close":``,onClosed:p[4]||=e=>P.value={password:``,password_confirmation:``}},{footer:l(()=>[r(K,{onClick:p[2]||=e=>M.value=!1},{default:l(()=>[...p[9]||=[o(`取消`,-1)]]),_:1}),r(K,{type:`primary`,loading:N.value,onClick:z},{default:l(()=>[...p[10]||=[o(`保存`,-1)]]),_:1},8,[`loading`])]),default:l(()=>[r(G,{class:`pwd-dialog-form`,"label-width":`100px`,onSubmit:d(z,[`prevent`])},{default:l(()=>[r(W,{label:`账号`},{default:l(()=>[r(U,{"model-value":F.value,readonly:``},null,8,[`model-value`])]),_:1}),r(W,{label:`新密码`,required:``},{default:l(()=>[r(U,{modelValue:P.value.password,"onUpdate:modelValue":p[0]||=e=>P.value.password=e,type:`password`,"show-password":``,placeholder:`至少 6 位`,autocomplete:`new-password`},null,8,[`modelValue`])]),_:1}),r(W,{label:`确认新密码`,required:``},{default:l(()=>[r(U,{modelValue:P.value.password_confirmation,"onUpdate:modelValue":p[1]||=e=>P.value.password_confirmation=e,type:`password`,"show-password":``,placeholder:`再次输入新密码`,autocomplete:`new-password`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`modelValue`])],64)}}}),[[`__scopeId`,`data-v-54fb5ddb`]]);export{k as default}; \ No newline at end of file diff --git a/public/admin/assets/HomeView-BxwLAXqC.js b/public/admin/assets/HomeView-DwMokhDw.js similarity index 94% rename from public/admin/assets/HomeView-BxwLAXqC.js rename to public/admin/assets/HomeView-DwMokhDw.js index 60f0326..7b85d87 100644 --- a/public/admin/assets/HomeView-BxwLAXqC.js +++ b/public/admin/assets/HomeView-DwMokhDw.js @@ -1 +1 @@ -import{C as e,Ct as t,D as n,E as r,G as i,T as a,Y as o,at as s,b as c,tn as l,y as u}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{g as d,s as f}from"./index-jhdMOnS8.js";var p={class:`page`},m={class:`card-head`},h=f(n({__name:`HomeView`,setup(n){let f=u(()=>`/api`);return(n,u)=>{let h=o(`el-icon`),g=o(`el-descriptions-item`),_=o(`el-descriptions`),v=o(`el-card`);return i(),e(`div`,p,[r(v,{class:`card`,shadow:`hover`},{header:s(()=>[c(`div`,m,[r(h,{size:22},{default:s(()=>[r(t(d))]),_:1}),u[0]||=c(`span`,null,`高校雷达网 · 管理后台`,-1)])]),default:s(()=>[u[2]||=c(`p`,{class:`desc`},[a(`技术栈:Vue 3、Vite、TypeScript、Element Plus。本地已配置对接 `),c(`code`,null,`slake-school-service`),a(` 的 API 代理。`)],-1),r(_,{column:1,border:``},{default:s(()=>[r(g,{label:`VITE_API_BASE_URL`},{default:s(()=>[c(`code`,null,l(f.value),1)]),_:1}),r(g,{label:`说明`},{default:s(()=>[...u[1]||=[a(` 开发时请求 `,-1),c(`code`,null,`/api/*`,-1),a(` 由 Vite 转发至 `,-1),c(`code`,null,`VITE_PROXY_TARGET`,-1),a(`(默认 `,-1),c(`code`,null,`http://127.0.0.1:8000`,-1),a(`),与 Laravel 的 `,-1),c(`code`,null,`/api`,-1),a(` 前缀一致。 `,-1)]]),_:1})]),_:1})]),_:1})])}}}),[[`__scopeId`,`data-v-436e6398`]]);export{h as default}; \ No newline at end of file +import{C as e,Ct as t,D as n,E as r,G as i,T as a,Y as o,at as s,b as c,tn as l,y as u}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{g as d,s as f}from"./index-D3i1HG2q.js";var p={class:`page`},m={class:`card-head`},h=f(n({__name:`HomeView`,setup(n){let f=u(()=>`/api`);return(n,u)=>{let h=o(`el-icon`),g=o(`el-descriptions-item`),_=o(`el-descriptions`),v=o(`el-card`);return i(),e(`div`,p,[r(v,{class:`card`,shadow:`hover`},{header:s(()=>[c(`div`,m,[r(h,{size:22},{default:s(()=>[r(t(d))]),_:1}),u[0]||=c(`span`,null,`高校雷达网 · 管理后台`,-1)])]),default:s(()=>[u[2]||=c(`p`,{class:`desc`},[a(`技术栈:Vue 3、Vite、TypeScript、Element Plus。本地已配置对接 `),c(`code`,null,`slake-school-service`),a(` 的 API 代理。`)],-1),r(_,{column:1,border:``},{default:s(()=>[r(g,{label:`VITE_API_BASE_URL`},{default:s(()=>[c(`code`,null,l(f.value),1)]),_:1}),r(g,{label:`说明`},{default:s(()=>[...u[1]||=[a(` 开发时请求 `,-1),c(`code`,null,`/api/*`,-1),a(` 由 Vite 转发至 `,-1),c(`code`,null,`VITE_PROXY_TARGET`,-1),a(`(默认 `,-1),c(`code`,null,`http://127.0.0.1:8000`,-1),a(`),与 Laravel 的 `,-1),c(`code`,null,`/api`,-1),a(` 前缀一致。 `,-1)]]),_:1})]),_:1})]),_:1})])}}}),[[`__scopeId`,`data-v-436e6398`]]);export{h as default}; \ No newline at end of file diff --git a/public/admin/assets/TeacherDetailDialog-BEWCufF_.js b/public/admin/assets/TeacherDetailDialog-XqXXxiK0.js similarity index 98% rename from public/admin/assets/TeacherDetailDialog-BEWCufF_.js rename to public/admin/assets/TeacherDetailDialog-XqXXxiK0.js index 491d70c..f2854a6 100644 --- a/public/admin/assets/TeacherDetailDialog-BEWCufF_.js +++ b/public/admin/assets/TeacherDetailDialog-XqXXxiK0.js @@ -1 +1 @@ -import{r as e}from"./rolldown-runtime-BYbx6iT9.js";import{C as t,Ct as n,D as r,E as i,G as a,P as o,S as s,T as c,X as ee,Y as l,at as u,b as d,d as te,et as f,ht as p,m,ot as ne,q as h,rt as g,tn as _,x as v,y}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as b,l as x,s as S,t as C}from"./index-jhdMOnS8.js";import{l as w}from"./assets-CEyD64oq.js";import{a as T,c as E,h as D,i as O,m as k,o as A,p as j,s as M,u as N}from"./teachers-BIk-0G3l.js";import{a as P}from"./dict-BFb6lz5T.js";import{i as F,o as I,s as L}from"./demands-CJyXU85f.js";import{a as R,n as z,o as re}from"./teacherStar-DhP_EdY6.js";var B={class:`library-toolbar`},V={key:1,class:`text-mute`},H={key:0,class:`library-pager`},ie=S(r({__name:`TeacherPaperDialog`,props:o({teacherId:{},defaultAuthors:{},defaultSchoolName:{}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:o([`saved`],[`update:modelValue`]),setup(e,{emit:n}){let r=f(e,`modelValue`),o=e,m=n,h=p(`manual`),y=p(!1),b=p({title:``,authors:``,school_name:``,published_at:``,url:``,summary:``}),S=p(``),C=p(!1),T=p([]),E=p(1),D=p({current_page:1,per_page:10,total:0}),A=p([]),j=p();function M(){b.value={title:``,authors:o.defaultAuthors||``,school_name:o.defaultSchoolName||``,published_at:``,url:``,summary:``}}async function P(){o.teacherId&&(A.value=(await N(o.teacherId)).map(e=>e.id))}async function F(e=E.value){C.value=!0;try{let t=await w({page:e,page_size:D.value.per_page,keyword:S.value.trim()||void 0});T.value=t.items,D.value=t.meta,E.value=t.meta.current_page,j.value&&!t.items.some(e=>e.id===j.value)&&(j.value=void 0)}finally{C.value=!1}}function I(){E.value=1,F(1)}function L(e){A.value.includes(e.id)||(j.value=e.id)}async function R(){if(o.teacherId){if(!b.value.title.trim()||!b.value.authors.trim()){x.warning(`请填写标题与作者`);return}if(!b.value.published_at){x.warning(`请选择发表时间`);return}y.value=!0;try{await O(o.teacherId,{...b.value}),x.success(`已添加论文`),r.value=!1,m(`saved`)}finally{y.value=!1}}}async function z(){if(o.teacherId){if(!j.value){x.warning(`请选择要关联的论文`);return}if(A.value.includes(j.value)){x.warning(`该论文已关联此老师`);return}y.value=!0;try{await k(o.teacherId,j.value),x.success(`已关联论文`),r.value=!1,m(`saved`)}finally{y.value=!1}}}async function re(){h.value===`manual`?await R():await z()}return g(()=>[r.value,o.teacherId],([e])=>{e&&o.teacherId&&(h.value=`manual`,j.value=void 0,S.value=``,E.value=1,M(),P(),F(1))}),g(h,e=>{e===`library`&&r.value&&o.teacherId&&F(E.value)}),(e,n)=>{let o=l(`el-input`),f=l(`el-form-item`),p=l(`el-col`),m=l(`el-date-picker`),g=l(`el-row`),x=l(`el-form`),w=l(`el-tab-pane`),O=l(`el-button`),k=l(`el-table-column`),j=l(`el-tag`),M=l(`el-table`),N=l(`el-pagination`),P=l(`el-tabs`),R=l(`el-dialog`),z=ee(`loading`);return a(),v(R,{modelValue:r.value,"onUpdate:modelValue":n[10]||=e=>r.value=e,title:`论文`,width:`720px`,"destroy-on-close":``,"append-to-body":``},{footer:u(()=>[i(O,{onClick:n[9]||=e=>r.value=!1},{default:u(()=>[...n[13]||=[c(`取消`,-1)]]),_:1}),i(O,{type:`primary`,loading:y.value,onClick:re},{default:u(()=>[c(_(h.value===`manual`?`保存`:`确认关联`),1)]),_:1},8,[`loading`])]),default:u(()=>[i(P,{modelValue:h.value,"onUpdate:modelValue":n[8]||=e=>h.value=e},{default:u(()=>[i(w,{label:`手动录入`,name:`manual`},{default:u(()=>[i(x,{"label-position":`top`,class:`form-small`},{default:u(()=>[i(f,{label:`标题`,required:``},{default:u(()=>[i(o,{modelValue:b.value.title,"onUpdate:modelValue":n[0]||=e=>b.value.title=e,placeholder:`请输入论文标题`},null,8,[`modelValue`])]),_:1}),i(g,{gutter:12},{default:u(()=>[i(p,{span:12},{default:u(()=>[i(f,{label:`作者`,required:``},{default:u(()=>[i(o,{modelValue:b.value.authors,"onUpdate:modelValue":n[1]||=e=>b.value.authors=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(p,{span:12},{default:u(()=>[i(f,{label:`学校`},{default:u(()=>[i(o,{modelValue:b.value.school_name,"onUpdate:modelValue":n[2]||=e=>b.value.school_name=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(p,{span:12},{default:u(()=>[i(f,{label:`发表时间`,required:``},{default:u(()=>[i(m,{modelValue:b.value.published_at,"onUpdate:modelValue":n[3]||=e=>b.value.published_at=e,type:`date`,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),i(p,{span:12},{default:u(()=>[i(f,{label:`链接`},{default:u(()=>[i(o,{modelValue:b.value.url,"onUpdate:modelValue":n[4]||=e=>b.value.url=e,placeholder:`https://example.com/paper`},null,8,[`modelValue`])]),_:1})]),_:1}),i(p,{span:24},{default:u(()=>[i(f,{label:`摘要`},{default:u(()=>[i(o,{modelValue:b.value.summary,"onUpdate:modelValue":n[5]||=e=>b.value.summary=e,type:`textarea`,rows:4,placeholder:`请输入论文摘要`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),i(w,{label:`从论文库选择`,name:`library`},{default:u(()=>[d(`div`,B,[i(o,{modelValue:S.value,"onUpdate:modelValue":n[6]||=e=>S.value=e,clearable:``,placeholder:`搜索标题、作者、学校…`,style:{width:`260px`},onKeyup:te(I,[`enter`])},null,8,[`modelValue`]),i(O,{type:`primary`,onClick:I},{default:u(()=>[...n[11]||=[c(`搜索`,-1)]]),_:1})]),ne((a(),v(M,{data:T.value,size:`small`,"highlight-current-row":``,class:`library-table`,"row-class-name":({row:e})=>A.value.includes(e.id)?`is-linked-row`:``,onRowClick:L,onCurrentChange:n[7]||=e=>{e&&L(e)}},{default:u(()=>[i(k,{prop:`title`,label:`标题`,"min-width":`200`,"show-overflow-tooltip":``}),i(k,{prop:`authors`,label:`作者`,width:`120`,"show-overflow-tooltip":``}),i(k,{prop:`school_name`,label:`学校`,width:`120`,"show-overflow-tooltip":``}),i(k,{label:`状态`,width:`80`,align:`center`},{default:u(({row:e})=>[A.value.includes(e.id)?(a(),v(j,{key:0,size:`small`,type:`info`},{default:u(()=>[...n[12]||=[c(`已关联`,-1)]]),_:1})):(a(),t(`span`,V,`—`))]),_:1})]),_:1},8,[`data`,`row-class-name`])),[[z,C.value]]),D.value.total>0?(a(),t(`div`,H,[i(N,{layout:`total, prev, pager, next`,total:D.value.total,"page-size":D.value.per_page,"current-page":E.value,onCurrentChange:F},null,8,[`total`,`page-size`,`current-page`])])):s(``,!0)]),_:1})]),_:1},8,[`modelValue`])]),_:1},8,[`modelValue`])}}}),[[`__scopeId`,`data-v-d91269f1`]]),ae={class:`detail-body`},oe={key:0,class:`basic-info-block`},se={key:1,class:`basic-info-block`},ce={key:0,class:`crawl-uni-hint`},le={class:`uni-row`},ue={class:`star-preview`},de={key:0,class:`star-follow-rule`},fe={class:`section`},pe={class:`section-head`},me={class:`muted`},he={class:`section`},ge={class:`section-head`},_e={class:`muted`},ve={class:`summary-body`},ye={class:`follow-summary`},be={class:`log-head`},U=r({__name:`TeacherDetailDialog`,props:{modelValue:{type:Boolean},teacherId:{},readonly:{type:Boolean}},emits:[`update:modelValue`,`saved`],setup(e,{emit:r}){let o=C(),te=y(()=>o.isGridMember),f=e,S=y(()=>f.readonly===!0),w=y(()=>{let e=H.value?.name;return S.value?e?`查看 · ${e}`:`老师详情`:e?`编辑 · ${e}`:`编辑老师`});function O(e){return e.university_name?e.university_name:e.university_text?`${e.university_text}(未关联高校库)`:`—`}function k(e){return e.research_direction?e.research_direction:e.research_directions?.map(e=>e.name).join(`、`)||`—`}let B=r,V=p(!1),H=p(null),U=p(null),W=y(()=>R(q.value.find(e=>e.id===Y.value.star_level_dict_item_id)?.value)),G=p([]),K=p([]),q=p([]),xe=p([]),J=p([]),Se=p([]),Y=p({name:``,university_id:void 0,city:``,title:``,research_direction_ids:[],phone:``,email:``,star_level_dict_item_id:void 0,status_dict_item_id:void 0,next_follow_date:``}),X=p(!1),Z=p(!1),Q=p({name:``,city:``,province:``,longitude:``,latitude:``}),$=p(!1),Ce=p(!1),we=p(``),Te=p(!1),Ee=p(``),De=p([]);async function Oe(){let e=await j({page:1,page_size:200}),t=o.user?.grid_scope?.university_ids;J.value=t?.length?e.items.filter(e=>t.includes(e.id)):e.items}async function ke(){let e=await E(),t=o.user?.grid_scope?.research_direction_ids;Se.value=t?.length?e.research_directions.filter(e=>t.includes(e.id)):e.research_directions}function Ae(){Q.value={name:``,city:Y.value.city||``,province:``,longitude:``,latitude:``},X.value=!0}async function je(){let e=Q.value;if(!e.name.trim()){x.warning(`请填写高校名称`);return}if(!e.longitude.trim()||!e.latitude.trim()){x.warning(`请填写经度与纬度`);return}let t=Number(e.longitude),n=Number(e.latitude);if(Number.isNaN(t)||Number.isNaN(n)){x.warning(`经纬度须为有效数字`);return}Z.value=!0;try{let r=await T({name:e.name.trim(),city:e.city.trim()||null,province:e.province.trim()||null,longitude:t,latitude:n});J.value.some(e=>e.id===r.id)||J.value.push(r),Y.value.university_id=r.id,r.city&&(Y.value.city=r.city),X.value=!1,x.success(`高校已创建`)}finally{Z.value=!1}}async function Me(){if(f.teacherId){V.value=!0;try{let e=await M(f.teacherId);H.value=e,U.value=e.star_level_dict_item_id??null,Y.value={name:e.name||``,university_id:e.university_id??void 0,research_direction_ids:e.research_direction_ids?.length?[...e.research_direction_ids]:e.research_directions?.map(e=>e.id)||[],city:e.city||``,title:e.title||``,phone:e.phone||``,email:e.email||``,star_level_dict_item_id:e.star_level_dict_item_id??void 0,status_dict_item_id:e.status_dict_item_id??void 0,next_follow_date:e.next_follow_date||``};let[t,n]=await Promise.all([N(f.teacherId),L({teacher_id:f.teacherId,page:1,page_size:50})]);G.value=t,K.value=n.items}finally{V.value=!1}}}function Ne(){let e=Y.value;return e.name.trim()?e.university_id?e.city.trim()?e.title.trim()?e.research_direction_ids.length?e.status_dict_item_id?!0:(x.warning(`请选择状态`),!1):(x.warning(`请至少选择一个研究方向`),!1):(x.warning(`请填写职称`),!1):(x.warning(`请填写城市`),!1):(x.warning(`请选择高校,或点击「新建高校」`),!1):(x.warning(`请填写姓名`),!1)}async function Pe(){if(!f.teacherId||!H.value||!Ne())return;let e=(Y.value.star_level_dict_item_id??null)!==U.value;await D(f.teacherId,{name:Y.value.name.trim(),university_id:Y.value.university_id,city:Y.value.city.trim(),title:Y.value.title.trim(),research_direction_ids:Y.value.research_direction_ids,phone:Y.value.phone||null,email:Y.value.email||null,star_level_dict_item_id:Y.value.star_level_dict_item_id??null,status_dict_item_id:Y.value.status_dict_item_id,...e?{recalc_next_follow_date:!0}:{next_follow_date:Y.value.next_follow_date||null,recalc_next_follow_date:!1}}),x.success(`已保存`),B(`saved`),B(`update:modelValue`,!1)}function Fe(){let e=q.value.find(e=>e.id===Y.value.star_level_dict_item_id);Y.value.next_follow_date=re(e?.value)||``}function Ie(e){if(!e)return;let t=J.value.find(t=>t.id===e);t?.city&&!Y.value.city&&(Y.value.city=t.city)}function Le(){$.value=!0}async function Re(){f.teacherId&&(G.value=await N(f.teacherId))}async function ze(e){await b.confirm(`确定删除论文「${e.title}」?`,`确认删除`,{type:`warning`}),await A(f.teacherId,e.id),G.value=await N(f.teacherId)}function Be(e){we.value=e.summary||`暂无摘要`,Ce.value=!0}async function Ve(e){Ee.value=e.title,De.value=await I(e.id),Te.value=!0}return g(()=>[f.modelValue,f.teacherId],async([e,t])=>{if(e&&t){if(!q.value.length){let[e,t]=await Promise.all([P(`teacher_level`),P(`teacher_status`)]);q.value=e.items,xe.value=t.items,await Oe()}await ke(),await Me()}}),g(()=>Y.value.university_id,e=>Ie(e)),(r,o)=>{let f=l(`el-descriptions-item`),p=l(`el-descriptions`),g=l(`el-input`),y=l(`el-form-item`),b=l(`el-col`),x=l(`el-option`),C=l(`el-select`),T=l(`el-button`),E=l(`el-date-picker`),D=l(`el-row`),A=l(`el-form`),j=l(`el-table-column`),M=l(`el-link`),N=l(`el-table`),P=l(`el-tag`),I=l(`el-empty`),L=l(`el-dialog`),R=ee(`loading`);return a(),v(L,{"model-value":e.modelValue,title:w.value,width:`960px`,top:`4vh`,"destroy-on-close":``,"onUpdate:modelValue":o[21]||=e=>B(`update:modelValue`,e)},{footer:u(()=>[i(T,{onClick:o[10]||=e=>B(`update:modelValue`,!1)},{default:u(()=>[...o[31]||=[c(`关闭`,-1)]]),_:1}),S.value?s(``,!0):(a(),v(T,{key:0,type:`primary`,class:`teachers-primary-btn`,onClick:Pe},{default:u(()=>[...o[32]||=[c(` 保存 `,-1)]]),_:1}))]),default:u(()=>[ne((a(),t(`div`,ae,[S.value&&H.value?(a(),t(`div`,oe,[o[22]||=d(`h3`,{class:`basic-info-title`},`基本信息`,-1),i(p,{column:3,border:``,size:`small`,class:`view-desc`},{default:u(()=>[i(f,{label:`姓名`},{default:u(()=>[c(_(H.value.name),1)]),_:1}),i(f,{label:`高校`},{default:u(()=>[c(_(O(H.value)),1)]),_:1}),i(f,{label:`城市`},{default:u(()=>[c(_(H.value.city||`—`),1)]),_:1}),i(f,{label:`职称`},{default:u(()=>[c(_(H.value.title||`—`),1)]),_:1}),i(f,{label:`研究方向`,span:2},{default:u(()=>[c(_(k(H.value)),1)]),_:1}),i(f,{label:`电话`},{default:u(()=>[c(_(H.value.phone||`—`),1)]),_:1}),i(f,{label:`邮箱`},{default:u(()=>[c(_(H.value.email||`—`),1)]),_:1}),i(f,{label:`星级`},{default:u(()=>[c(_(n(z)(H.value.star_level_item?.value,H.value.star_level_item?.label)),1)]),_:1}),i(f,{label:`状态`},{default:u(()=>[c(_(H.value.status_item?.label||`—`),1)]),_:1}),i(f,{label:`下次跟进日期`},{default:u(()=>[c(_(H.value.next_follow_date||`—`),1)]),_:1}),H.value.source_item?.label?(a(),v(f,{key:0,label:`来源`},{default:u(()=>[c(_(H.value.source_item.label),1)]),_:1})):s(``,!0)]),_:1})])):(a(),t(`div`,se,[o[24]||=d(`h3`,{class:`basic-info-title`},`基本信息`,-1),i(A,{"label-position":`top`,class:`form-small`},{default:u(()=>[i(D,{gutter:12},{default:u(()=>[i(b,{xs:24,md:4},{default:u(()=>[i(y,{label:`姓名`,required:``},{default:u(()=>[i(g,{modelValue:Y.value.name,"onUpdate:modelValue":o[0]||=e=>Y.value.name=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:8},{default:u(()=>[i(y,{label:`高校`,required:``},{default:u(()=>[H.value?.university_text&&!Y.value.university_id?(a(),t(`p`,ce,` 论文抓取高校:`+_(H.value.university_text)+`(请在下拉中选择或新建以关联) `,1)):s(``,!0),d(`div`,le,[i(C,{modelValue:Y.value.university_id,"onUpdate:modelValue":o[1]||=e=>Y.value.university_id=e,filterable:``,placeholder:`选择高校`,style:{flex:`1`}},{default:u(()=>[(a(!0),t(m,null,h(J.value,e=>(a(),v(x,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),te.value?s(``,!0):(a(),v(T,{key:0,type:`primary`,size:`small`,class:`teachers-primary-btn`,onClick:Ae},{default:u(()=>[...o[23]||=[c(` 新建高校 `,-1)]]),_:1}))])]),_:1})]),_:1}),i(b,{xs:24,md:4},{default:u(()=>[i(y,{label:`城市`,required:``},{default:u(()=>[i(g,{modelValue:Y.value.city,"onUpdate:modelValue":o[2]||=e=>Y.value.city=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:8},{default:u(()=>[i(y,{label:`职称`,required:``},{default:u(()=>[i(g,{modelValue:Y.value.title,"onUpdate:modelValue":o[3]||=e=>Y.value.title=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:8},{default:u(()=>[i(y,{label:`研究方向`,required:``},{default:u(()=>[i(C,{modelValue:Y.value.research_direction_ids,"onUpdate:modelValue":o[4]||=e=>Y.value.research_direction_ids=e,multiple:``,filterable:``,"collapse-tags":``,"collapse-tags-tooltip":``,placeholder:`选择研究方向(可多选)`,style:{width:`100%`}},{default:u(()=>[(a(!0),t(m,null,h(Se.value,e=>(a(),v(x,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:6},{default:u(()=>[i(y,{label:`电话`},{default:u(()=>[i(g,{modelValue:Y.value.phone,"onUpdate:modelValue":o[5]||=e=>Y.value.phone=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:6},{default:u(()=>[i(y,{label:`邮箱`},{default:u(()=>[i(g,{modelValue:Y.value.email,"onUpdate:modelValue":o[6]||=e=>Y.value.email=e,type:`email`},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:4},{default:u(()=>[i(y,{label:`星级`},{default:u(()=>[i(C,{modelValue:Y.value.star_level_dict_item_id,"onUpdate:modelValue":o[7]||=e=>Y.value.star_level_dict_item_id=e,style:{width:`100%`},onChange:Fe},{default:u(()=>[(a(!0),t(m,null,h(q.value,e=>(a(),v(x,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),d(`span`,ue,_(n(z)(q.value.find(e=>e.id===Y.value.star_level_dict_item_id)?.value,q.value.find(e=>e.id===Y.value.star_level_dict_item_id)?.label)),1)]),_:1})]),_:1}),i(b,{xs:24,md:6},{default:u(()=>[i(y,{label:`状态`,required:``},{default:u(()=>[i(C,{modelValue:Y.value.status_dict_item_id,"onUpdate:modelValue":o[8]||=e=>Y.value.status_dict_item_id=e,placeholder:`请选择状态`,style:{width:`100%`}},{default:u(()=>[(a(!0),t(m,null,h(xe.value,e=>(a(),v(x,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:6},{default:u(()=>[i(y,{label:`下次跟进日期`},{default:u(()=>[i(E,{modelValue:Y.value.next_follow_date,"onUpdate:modelValue":o[9]||=e=>Y.value.next_follow_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`选择日期`,style:{width:`100%`}},null,8,[`modelValue`]),W.value?(a(),t(`p`,de,_(W.value),1)):s(``,!0)]),_:1})]),_:1})]),_:1})]),_:1})])),d(`div`,fe,[d(`div`,pe,[o[26]||=d(`h3`,null,`论文列表`,-1),d(`span`,me,`共 `+_(G.value.length)+` 篇`,1),S.value?s(``,!0):(a(),v(T,{key:0,size:`small`,type:`primary`,plain:``,onClick:Le},{default:u(()=>[...o[25]||=[c(` 添加论文 `,-1)]]),_:1}))]),i(N,{data:G.value,size:`small`,"row-key":`id`},{default:u(()=>[i(j,{prop:`title`,label:`标题`,"min-width":`200`,"show-overflow-tooltip":``}),i(j,{prop:`authors`,label:`作者`,width:`140`}),i(j,{prop:`school_name`,label:`学校`,width:`120`}),i(j,{prop:`published_at`,label:`发表时间`,width:`110`}),i(j,{label:`链接`,width:`70`},{default:u(({row:e})=>[e.url?(a(),v(M,{key:0,href:e.url,target:`_blank`},{default:u(()=>[...o[27]||=[c(`查看`,-1)]]),_:1},8,[`href`])):s(``,!0)]),_:1}),i(j,{label:`操作`,width:S.value?70:120},{default:u(({row:e})=>[i(T,{link:``,type:`primary`,onClick:t=>Be(e)},{default:u(()=>[...o[28]||=[c(`摘要`,-1)]]),_:1},8,[`onClick`]),S.value?s(``,!0):(a(),v(T,{key:0,link:``,type:`danger`,onClick:t=>ze(e)},{default:u(()=>[...o[29]||=[c(`删除`,-1)]]),_:1},8,[`onClick`]))]),_:1},8,[`width`])]),_:1},8,[`data`])]),d(`div`,he,[d(`div`,ge,[o[30]||=d(`h3`,null,`需求列表`,-1),d(`span`,_e,`共 `+_(K.value.length)+` 条`,1)]),i(N,{data:K.value,size:`small`,"row-key":`id`},{default:u(()=>[i(j,{label:`类型`,width:`100`},{default:u(({row:e})=>[i(P,{size:`small`,effect:`dark`},{default:u(()=>[c(_(e.type_item?.label),1)]),_:2},1024)]),_:1}),i(j,{prop:`title`,label:`标题`,"min-width":`180`,"show-overflow-tooltip":``}),i(j,{prop:`submitted_at`,label:`时间`,width:`110`}),i(j,{label:`处理状态`,width:`100`},{default:u(({row:e})=>[i(P,{type:n(F)(e.status_item?.value),size:`small`,effect:`dark`},{default:u(()=>[c(_(e.status_item?.label),1)]),_:2},1032,[`type`])]),_:1}),i(j,{label:`跟进记录`,width:`100`},{default:u(({row:e})=>[i(T,{size:`small`,onClick:t=>Ve(e)},{default:u(()=>[c(_(e.handle_logs_count||0)+`条记录 `,1)]),_:2},1032,[`onClick`])]),_:1})]),_:1},8,[`data`]),K.value.length?s(``,!0):(a(),v(I,{key:0,description:`暂无关联需求`,"image-size":64}))])])),[[R,V.value]]),i(L,{modelValue:X.value,"onUpdate:modelValue":o[17]||=e=>X.value=e,title:`新建高校`,width:`480px`,"append-to-body":``,"destroy-on-close":``},{footer:u(()=>[i(T,{onClick:o[16]||=e=>X.value=!1},{default:u(()=>[...o[33]||=[c(`取消`,-1)]]),_:1}),i(T,{type:`primary`,class:`teachers-primary-btn`,loading:Z.value,onClick:je},{default:u(()=>[...o[34]||=[c(` 保存 `,-1)]]),_:1},8,[`loading`])]),default:u(()=>[i(A,{"label-position":`top`,class:`form-small`},{default:u(()=>[i(y,{label:`高校名称`,required:``},{default:u(()=>[i(g,{modelValue:Q.value.name,"onUpdate:modelValue":o[11]||=e=>Q.value.name=e,placeholder:`如:复旦大学`},null,8,[`modelValue`])]),_:1}),i(D,{gutter:12},{default:u(()=>[i(b,{span:12},{default:u(()=>[i(y,{label:`经度`,required:``},{default:u(()=>[i(g,{modelValue:Q.value.longitude,"onUpdate:modelValue":o[12]||=e=>Q.value.longitude=e,placeholder:`如:121.5031`},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{span:12},{default:u(()=>[i(y,{label:`纬度`,required:``},{default:u(()=>[i(g,{modelValue:Q.value.latitude,"onUpdate:modelValue":o[13]||=e=>Q.value.latitude=e,placeholder:`如:31.2970`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1}),i(D,{gutter:12},{default:u(()=>[i(b,{span:12},{default:u(()=>[i(y,{label:`省份`},{default:u(()=>[i(g,{modelValue:Q.value.province,"onUpdate:modelValue":o[14]||=e=>Q.value.province=e,placeholder:`如:上海市`},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{span:12},{default:u(()=>[i(y,{label:`城市`},{default:u(()=>[i(g,{modelValue:Q.value.city,"onUpdate:modelValue":o[15]||=e=>Q.value.city=e,placeholder:`如:上海`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),i(L,{modelValue:Ce.value,"onUpdate:modelValue":o[18]||=e=>Ce.value=e,title:`论文摘要`,width:`520px`,"append-to-body":``},{default:u(()=>[d(`p`,ve,_(we.value),1)]),_:1},8,[`modelValue`]),i(ie,{modelValue:$.value,"onUpdate:modelValue":o[19]||=e=>$.value=e,"teacher-id":e.teacherId,"default-authors":H.value?.name||Y.value.name,"default-school-name":J.value.find(e=>e.id===Y.value.university_id)?.name||H.value?.university_name||``,onSaved:Re},null,8,[`modelValue`,`teacher-id`,`default-authors`,`default-school-name`]),i(L,{modelValue:Te.value,"onUpdate:modelValue":o[20]||=e=>Te.value=e,title:`需求跟进记录`,width:`640px`,"append-to-body":``},{default:u(()=>[d(`p`,ye,_(Ee.value),1),(a(!0),t(m,null,h(De.value,e=>(a(),t(`div`,{key:e.id,class:`log-card`},[d(`div`,be,[d(`strong`,null,_(e.operator_name),1),d(`span`,null,_(e.handled_at),1),e.status_item?(a(),v(P,{key:0,size:`small`,type:n(F)(e.status_item.value)},{default:u(()=>[c(_(e.status_item.label),1)]),_:2},1032,[`type`])):s(``,!0)]),d(`p`,null,_(e.content),1)]))),128)),De.value.length?s(``,!0):(a(),v(I,{key:0,description:`暂无记录`}))]),_:1},8,[`modelValue`])]),_:1},8,[`model-value`,`title`])}}}),W=e({default:()=>G}),G=S(U,[[`__scopeId`,`data-v-287a1810`]]);export{W as n,ie as r,G as t}; \ No newline at end of file +import{r as e}from"./rolldown-runtime-BYbx6iT9.js";import{C as t,Ct as n,D as r,E as i,G as a,P as o,S as s,T as c,X as ee,Y as l,at as u,b as d,d as te,et as f,ht as p,m,ot as ne,q as h,rt as g,tn as _,x as v,y}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as b,l as x,s as S,t as C}from"./index-D3i1HG2q.js";import{l as w}from"./assets-CxiSHyud.js";import{a as T,c as E,h as D,i as O,m as k,o as A,p as j,s as M,u as N}from"./teachers-BbYywEyV.js";import{a as P}from"./dict-Brh9rLpP.js";import{i as F,o as I,s as L}from"./demands-DAPpYrpZ.js";import{a as R,n as z,o as re}from"./teacherStar-DhP_EdY6.js";var B={class:`library-toolbar`},V={key:1,class:`text-mute`},H={key:0,class:`library-pager`},ie=S(r({__name:`TeacherPaperDialog`,props:o({teacherId:{},defaultAuthors:{},defaultSchoolName:{}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:o([`saved`],[`update:modelValue`]),setup(e,{emit:n}){let r=f(e,`modelValue`),o=e,m=n,h=p(`manual`),y=p(!1),b=p({title:``,authors:``,school_name:``,published_at:``,url:``,summary:``}),S=p(``),C=p(!1),T=p([]),E=p(1),D=p({current_page:1,per_page:10,total:0}),A=p([]),j=p();function M(){b.value={title:``,authors:o.defaultAuthors||``,school_name:o.defaultSchoolName||``,published_at:``,url:``,summary:``}}async function P(){o.teacherId&&(A.value=(await N(o.teacherId)).map(e=>e.id))}async function F(e=E.value){C.value=!0;try{let t=await w({page:e,page_size:D.value.per_page,keyword:S.value.trim()||void 0});T.value=t.items,D.value=t.meta,E.value=t.meta.current_page,j.value&&!t.items.some(e=>e.id===j.value)&&(j.value=void 0)}finally{C.value=!1}}function I(){E.value=1,F(1)}function L(e){A.value.includes(e.id)||(j.value=e.id)}async function R(){if(o.teacherId){if(!b.value.title.trim()||!b.value.authors.trim()){x.warning(`请填写标题与作者`);return}if(!b.value.published_at){x.warning(`请选择发表时间`);return}y.value=!0;try{await O(o.teacherId,{...b.value}),x.success(`已添加论文`),r.value=!1,m(`saved`)}finally{y.value=!1}}}async function z(){if(o.teacherId){if(!j.value){x.warning(`请选择要关联的论文`);return}if(A.value.includes(j.value)){x.warning(`该论文已关联此老师`);return}y.value=!0;try{await k(o.teacherId,j.value),x.success(`已关联论文`),r.value=!1,m(`saved`)}finally{y.value=!1}}}async function re(){h.value===`manual`?await R():await z()}return g(()=>[r.value,o.teacherId],([e])=>{e&&o.teacherId&&(h.value=`manual`,j.value=void 0,S.value=``,E.value=1,M(),P(),F(1))}),g(h,e=>{e===`library`&&r.value&&o.teacherId&&F(E.value)}),(e,n)=>{let o=l(`el-input`),f=l(`el-form-item`),p=l(`el-col`),m=l(`el-date-picker`),g=l(`el-row`),x=l(`el-form`),w=l(`el-tab-pane`),O=l(`el-button`),k=l(`el-table-column`),j=l(`el-tag`),M=l(`el-table`),N=l(`el-pagination`),P=l(`el-tabs`),R=l(`el-dialog`),z=ee(`loading`);return a(),v(R,{modelValue:r.value,"onUpdate:modelValue":n[10]||=e=>r.value=e,title:`论文`,width:`720px`,"destroy-on-close":``,"append-to-body":``},{footer:u(()=>[i(O,{onClick:n[9]||=e=>r.value=!1},{default:u(()=>[...n[13]||=[c(`取消`,-1)]]),_:1}),i(O,{type:`primary`,loading:y.value,onClick:re},{default:u(()=>[c(_(h.value===`manual`?`保存`:`确认关联`),1)]),_:1},8,[`loading`])]),default:u(()=>[i(P,{modelValue:h.value,"onUpdate:modelValue":n[8]||=e=>h.value=e},{default:u(()=>[i(w,{label:`手动录入`,name:`manual`},{default:u(()=>[i(x,{"label-position":`top`,class:`form-small`},{default:u(()=>[i(f,{label:`标题`,required:``},{default:u(()=>[i(o,{modelValue:b.value.title,"onUpdate:modelValue":n[0]||=e=>b.value.title=e,placeholder:`请输入论文标题`},null,8,[`modelValue`])]),_:1}),i(g,{gutter:12},{default:u(()=>[i(p,{span:12},{default:u(()=>[i(f,{label:`作者`,required:``},{default:u(()=>[i(o,{modelValue:b.value.authors,"onUpdate:modelValue":n[1]||=e=>b.value.authors=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(p,{span:12},{default:u(()=>[i(f,{label:`学校`},{default:u(()=>[i(o,{modelValue:b.value.school_name,"onUpdate:modelValue":n[2]||=e=>b.value.school_name=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(p,{span:12},{default:u(()=>[i(f,{label:`发表时间`,required:``},{default:u(()=>[i(m,{modelValue:b.value.published_at,"onUpdate:modelValue":n[3]||=e=>b.value.published_at=e,type:`date`,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),i(p,{span:12},{default:u(()=>[i(f,{label:`链接`},{default:u(()=>[i(o,{modelValue:b.value.url,"onUpdate:modelValue":n[4]||=e=>b.value.url=e,placeholder:`https://example.com/paper`},null,8,[`modelValue`])]),_:1})]),_:1}),i(p,{span:24},{default:u(()=>[i(f,{label:`摘要`},{default:u(()=>[i(o,{modelValue:b.value.summary,"onUpdate:modelValue":n[5]||=e=>b.value.summary=e,type:`textarea`,rows:4,placeholder:`请输入论文摘要`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),i(w,{label:`从论文库选择`,name:`library`},{default:u(()=>[d(`div`,B,[i(o,{modelValue:S.value,"onUpdate:modelValue":n[6]||=e=>S.value=e,clearable:``,placeholder:`搜索标题、作者、学校…`,style:{width:`260px`},onKeyup:te(I,[`enter`])},null,8,[`modelValue`]),i(O,{type:`primary`,onClick:I},{default:u(()=>[...n[11]||=[c(`搜索`,-1)]]),_:1})]),ne((a(),v(M,{data:T.value,size:`small`,"highlight-current-row":``,class:`library-table`,"row-class-name":({row:e})=>A.value.includes(e.id)?`is-linked-row`:``,onRowClick:L,onCurrentChange:n[7]||=e=>{e&&L(e)}},{default:u(()=>[i(k,{prop:`title`,label:`标题`,"min-width":`200`,"show-overflow-tooltip":``}),i(k,{prop:`authors`,label:`作者`,width:`120`,"show-overflow-tooltip":``}),i(k,{prop:`school_name`,label:`学校`,width:`120`,"show-overflow-tooltip":``}),i(k,{label:`状态`,width:`80`,align:`center`},{default:u(({row:e})=>[A.value.includes(e.id)?(a(),v(j,{key:0,size:`small`,type:`info`},{default:u(()=>[...n[12]||=[c(`已关联`,-1)]]),_:1})):(a(),t(`span`,V,`—`))]),_:1})]),_:1},8,[`data`,`row-class-name`])),[[z,C.value]]),D.value.total>0?(a(),t(`div`,H,[i(N,{layout:`total, prev, pager, next`,total:D.value.total,"page-size":D.value.per_page,"current-page":E.value,onCurrentChange:F},null,8,[`total`,`page-size`,`current-page`])])):s(``,!0)]),_:1})]),_:1},8,[`modelValue`])]),_:1},8,[`modelValue`])}}}),[[`__scopeId`,`data-v-d91269f1`]]),ae={class:`detail-body`},oe={key:0,class:`basic-info-block`},se={key:1,class:`basic-info-block`},ce={key:0,class:`crawl-uni-hint`},le={class:`uni-row`},ue={class:`star-preview`},de={key:0,class:`star-follow-rule`},fe={class:`section`},pe={class:`section-head`},me={class:`muted`},he={class:`section`},ge={class:`section-head`},_e={class:`muted`},ve={class:`summary-body`},ye={class:`follow-summary`},be={class:`log-head`},U=r({__name:`TeacherDetailDialog`,props:{modelValue:{type:Boolean},teacherId:{},readonly:{type:Boolean}},emits:[`update:modelValue`,`saved`],setup(e,{emit:r}){let o=C(),te=y(()=>o.isGridMember),f=e,S=y(()=>f.readonly===!0),w=y(()=>{let e=H.value?.name;return S.value?e?`查看 · ${e}`:`老师详情`:e?`编辑 · ${e}`:`编辑老师`});function O(e){return e.university_name?e.university_name:e.university_text?`${e.university_text}(未关联高校库)`:`—`}function k(e){return e.research_direction?e.research_direction:e.research_directions?.map(e=>e.name).join(`、`)||`—`}let B=r,V=p(!1),H=p(null),U=p(null),W=y(()=>R(q.value.find(e=>e.id===Y.value.star_level_dict_item_id)?.value)),G=p([]),K=p([]),q=p([]),xe=p([]),J=p([]),Se=p([]),Y=p({name:``,university_id:void 0,city:``,title:``,research_direction_ids:[],phone:``,email:``,star_level_dict_item_id:void 0,status_dict_item_id:void 0,next_follow_date:``}),X=p(!1),Z=p(!1),Q=p({name:``,city:``,province:``,longitude:``,latitude:``}),$=p(!1),Ce=p(!1),we=p(``),Te=p(!1),Ee=p(``),De=p([]);async function Oe(){let e=await j({page:1,page_size:200}),t=o.user?.grid_scope?.university_ids;J.value=t?.length?e.items.filter(e=>t.includes(e.id)):e.items}async function ke(){let e=await E(),t=o.user?.grid_scope?.research_direction_ids;Se.value=t?.length?e.research_directions.filter(e=>t.includes(e.id)):e.research_directions}function Ae(){Q.value={name:``,city:Y.value.city||``,province:``,longitude:``,latitude:``},X.value=!0}async function je(){let e=Q.value;if(!e.name.trim()){x.warning(`请填写高校名称`);return}if(!e.longitude.trim()||!e.latitude.trim()){x.warning(`请填写经度与纬度`);return}let t=Number(e.longitude),n=Number(e.latitude);if(Number.isNaN(t)||Number.isNaN(n)){x.warning(`经纬度须为有效数字`);return}Z.value=!0;try{let r=await T({name:e.name.trim(),city:e.city.trim()||null,province:e.province.trim()||null,longitude:t,latitude:n});J.value.some(e=>e.id===r.id)||J.value.push(r),Y.value.university_id=r.id,r.city&&(Y.value.city=r.city),X.value=!1,x.success(`高校已创建`)}finally{Z.value=!1}}async function Me(){if(f.teacherId){V.value=!0;try{let e=await M(f.teacherId);H.value=e,U.value=e.star_level_dict_item_id??null,Y.value={name:e.name||``,university_id:e.university_id??void 0,research_direction_ids:e.research_direction_ids?.length?[...e.research_direction_ids]:e.research_directions?.map(e=>e.id)||[],city:e.city||``,title:e.title||``,phone:e.phone||``,email:e.email||``,star_level_dict_item_id:e.star_level_dict_item_id??void 0,status_dict_item_id:e.status_dict_item_id??void 0,next_follow_date:e.next_follow_date||``};let[t,n]=await Promise.all([N(f.teacherId),L({teacher_id:f.teacherId,page:1,page_size:50})]);G.value=t,K.value=n.items}finally{V.value=!1}}}function Ne(){let e=Y.value;return e.name.trim()?e.university_id?e.city.trim()?e.title.trim()?e.research_direction_ids.length?e.status_dict_item_id?!0:(x.warning(`请选择状态`),!1):(x.warning(`请至少选择一个研究方向`),!1):(x.warning(`请填写职称`),!1):(x.warning(`请填写城市`),!1):(x.warning(`请选择高校,或点击「新建高校」`),!1):(x.warning(`请填写姓名`),!1)}async function Pe(){if(!f.teacherId||!H.value||!Ne())return;let e=(Y.value.star_level_dict_item_id??null)!==U.value;await D(f.teacherId,{name:Y.value.name.trim(),university_id:Y.value.university_id,city:Y.value.city.trim(),title:Y.value.title.trim(),research_direction_ids:Y.value.research_direction_ids,phone:Y.value.phone||null,email:Y.value.email||null,star_level_dict_item_id:Y.value.star_level_dict_item_id??null,status_dict_item_id:Y.value.status_dict_item_id,...e?{recalc_next_follow_date:!0}:{next_follow_date:Y.value.next_follow_date||null,recalc_next_follow_date:!1}}),x.success(`已保存`),B(`saved`),B(`update:modelValue`,!1)}function Fe(){let e=q.value.find(e=>e.id===Y.value.star_level_dict_item_id);Y.value.next_follow_date=re(e?.value)||``}function Ie(e){if(!e)return;let t=J.value.find(t=>t.id===e);t?.city&&!Y.value.city&&(Y.value.city=t.city)}function Le(){$.value=!0}async function Re(){f.teacherId&&(G.value=await N(f.teacherId))}async function ze(e){await b.confirm(`确定删除论文「${e.title}」?`,`确认删除`,{type:`warning`}),await A(f.teacherId,e.id),G.value=await N(f.teacherId)}function Be(e){we.value=e.summary||`暂无摘要`,Ce.value=!0}async function Ve(e){Ee.value=e.title,De.value=await I(e.id),Te.value=!0}return g(()=>[f.modelValue,f.teacherId],async([e,t])=>{if(e&&t){if(!q.value.length){let[e,t]=await Promise.all([P(`teacher_level`),P(`teacher_status`)]);q.value=e.items,xe.value=t.items,await Oe()}await ke(),await Me()}}),g(()=>Y.value.university_id,e=>Ie(e)),(r,o)=>{let f=l(`el-descriptions-item`),p=l(`el-descriptions`),g=l(`el-input`),y=l(`el-form-item`),b=l(`el-col`),x=l(`el-option`),C=l(`el-select`),T=l(`el-button`),E=l(`el-date-picker`),D=l(`el-row`),A=l(`el-form`),j=l(`el-table-column`),M=l(`el-link`),N=l(`el-table`),P=l(`el-tag`),I=l(`el-empty`),L=l(`el-dialog`),R=ee(`loading`);return a(),v(L,{"model-value":e.modelValue,title:w.value,width:`960px`,top:`4vh`,"destroy-on-close":``,"onUpdate:modelValue":o[21]||=e=>B(`update:modelValue`,e)},{footer:u(()=>[i(T,{onClick:o[10]||=e=>B(`update:modelValue`,!1)},{default:u(()=>[...o[31]||=[c(`关闭`,-1)]]),_:1}),S.value?s(``,!0):(a(),v(T,{key:0,type:`primary`,class:`teachers-primary-btn`,onClick:Pe},{default:u(()=>[...o[32]||=[c(` 保存 `,-1)]]),_:1}))]),default:u(()=>[ne((a(),t(`div`,ae,[S.value&&H.value?(a(),t(`div`,oe,[o[22]||=d(`h3`,{class:`basic-info-title`},`基本信息`,-1),i(p,{column:3,border:``,size:`small`,class:`view-desc`},{default:u(()=>[i(f,{label:`姓名`},{default:u(()=>[c(_(H.value.name),1)]),_:1}),i(f,{label:`高校`},{default:u(()=>[c(_(O(H.value)),1)]),_:1}),i(f,{label:`城市`},{default:u(()=>[c(_(H.value.city||`—`),1)]),_:1}),i(f,{label:`职称`},{default:u(()=>[c(_(H.value.title||`—`),1)]),_:1}),i(f,{label:`研究方向`,span:2},{default:u(()=>[c(_(k(H.value)),1)]),_:1}),i(f,{label:`电话`},{default:u(()=>[c(_(H.value.phone||`—`),1)]),_:1}),i(f,{label:`邮箱`},{default:u(()=>[c(_(H.value.email||`—`),1)]),_:1}),i(f,{label:`星级`},{default:u(()=>[c(_(n(z)(H.value.star_level_item?.value,H.value.star_level_item?.label)),1)]),_:1}),i(f,{label:`状态`},{default:u(()=>[c(_(H.value.status_item?.label||`—`),1)]),_:1}),i(f,{label:`下次跟进日期`},{default:u(()=>[c(_(H.value.next_follow_date||`—`),1)]),_:1}),H.value.source_item?.label?(a(),v(f,{key:0,label:`来源`},{default:u(()=>[c(_(H.value.source_item.label),1)]),_:1})):s(``,!0)]),_:1})])):(a(),t(`div`,se,[o[24]||=d(`h3`,{class:`basic-info-title`},`基本信息`,-1),i(A,{"label-position":`top`,class:`form-small`},{default:u(()=>[i(D,{gutter:12},{default:u(()=>[i(b,{xs:24,md:4},{default:u(()=>[i(y,{label:`姓名`,required:``},{default:u(()=>[i(g,{modelValue:Y.value.name,"onUpdate:modelValue":o[0]||=e=>Y.value.name=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:8},{default:u(()=>[i(y,{label:`高校`,required:``},{default:u(()=>[H.value?.university_text&&!Y.value.university_id?(a(),t(`p`,ce,` 论文抓取高校:`+_(H.value.university_text)+`(请在下拉中选择或新建以关联) `,1)):s(``,!0),d(`div`,le,[i(C,{modelValue:Y.value.university_id,"onUpdate:modelValue":o[1]||=e=>Y.value.university_id=e,filterable:``,placeholder:`选择高校`,style:{flex:`1`}},{default:u(()=>[(a(!0),t(m,null,h(J.value,e=>(a(),v(x,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),te.value?s(``,!0):(a(),v(T,{key:0,type:`primary`,size:`small`,class:`teachers-primary-btn`,onClick:Ae},{default:u(()=>[...o[23]||=[c(` 新建高校 `,-1)]]),_:1}))])]),_:1})]),_:1}),i(b,{xs:24,md:4},{default:u(()=>[i(y,{label:`城市`,required:``},{default:u(()=>[i(g,{modelValue:Y.value.city,"onUpdate:modelValue":o[2]||=e=>Y.value.city=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:8},{default:u(()=>[i(y,{label:`职称`,required:``},{default:u(()=>[i(g,{modelValue:Y.value.title,"onUpdate:modelValue":o[3]||=e=>Y.value.title=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:8},{default:u(()=>[i(y,{label:`研究方向`,required:``},{default:u(()=>[i(C,{modelValue:Y.value.research_direction_ids,"onUpdate:modelValue":o[4]||=e=>Y.value.research_direction_ids=e,multiple:``,filterable:``,"collapse-tags":``,"collapse-tags-tooltip":``,placeholder:`选择研究方向(可多选)`,style:{width:`100%`}},{default:u(()=>[(a(!0),t(m,null,h(Se.value,e=>(a(),v(x,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:6},{default:u(()=>[i(y,{label:`电话`},{default:u(()=>[i(g,{modelValue:Y.value.phone,"onUpdate:modelValue":o[5]||=e=>Y.value.phone=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:6},{default:u(()=>[i(y,{label:`邮箱`},{default:u(()=>[i(g,{modelValue:Y.value.email,"onUpdate:modelValue":o[6]||=e=>Y.value.email=e,type:`email`},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:4},{default:u(()=>[i(y,{label:`星级`},{default:u(()=>[i(C,{modelValue:Y.value.star_level_dict_item_id,"onUpdate:modelValue":o[7]||=e=>Y.value.star_level_dict_item_id=e,style:{width:`100%`},onChange:Fe},{default:u(()=>[(a(!0),t(m,null,h(q.value,e=>(a(),v(x,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),d(`span`,ue,_(n(z)(q.value.find(e=>e.id===Y.value.star_level_dict_item_id)?.value,q.value.find(e=>e.id===Y.value.star_level_dict_item_id)?.label)),1)]),_:1})]),_:1}),i(b,{xs:24,md:6},{default:u(()=>[i(y,{label:`状态`,required:``},{default:u(()=>[i(C,{modelValue:Y.value.status_dict_item_id,"onUpdate:modelValue":o[8]||=e=>Y.value.status_dict_item_id=e,placeholder:`请选择状态`,style:{width:`100%`}},{default:u(()=>[(a(!0),t(m,null,h(xe.value,e=>(a(),v(x,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:6},{default:u(()=>[i(y,{label:`下次跟进日期`},{default:u(()=>[i(E,{modelValue:Y.value.next_follow_date,"onUpdate:modelValue":o[9]||=e=>Y.value.next_follow_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`选择日期`,style:{width:`100%`}},null,8,[`modelValue`]),W.value?(a(),t(`p`,de,_(W.value),1)):s(``,!0)]),_:1})]),_:1})]),_:1})]),_:1})])),d(`div`,fe,[d(`div`,pe,[o[26]||=d(`h3`,null,`论文列表`,-1),d(`span`,me,`共 `+_(G.value.length)+` 篇`,1),S.value?s(``,!0):(a(),v(T,{key:0,size:`small`,type:`primary`,plain:``,onClick:Le},{default:u(()=>[...o[25]||=[c(` 添加论文 `,-1)]]),_:1}))]),i(N,{data:G.value,size:`small`,"row-key":`id`},{default:u(()=>[i(j,{prop:`title`,label:`标题`,"min-width":`200`,"show-overflow-tooltip":``}),i(j,{prop:`authors`,label:`作者`,width:`140`}),i(j,{prop:`school_name`,label:`学校`,width:`120`}),i(j,{prop:`published_at`,label:`发表时间`,width:`110`}),i(j,{label:`链接`,width:`70`},{default:u(({row:e})=>[e.url?(a(),v(M,{key:0,href:e.url,target:`_blank`},{default:u(()=>[...o[27]||=[c(`查看`,-1)]]),_:1},8,[`href`])):s(``,!0)]),_:1}),i(j,{label:`操作`,width:S.value?70:120},{default:u(({row:e})=>[i(T,{link:``,type:`primary`,onClick:t=>Be(e)},{default:u(()=>[...o[28]||=[c(`摘要`,-1)]]),_:1},8,[`onClick`]),S.value?s(``,!0):(a(),v(T,{key:0,link:``,type:`danger`,onClick:t=>ze(e)},{default:u(()=>[...o[29]||=[c(`删除`,-1)]]),_:1},8,[`onClick`]))]),_:1},8,[`width`])]),_:1},8,[`data`])]),d(`div`,he,[d(`div`,ge,[o[30]||=d(`h3`,null,`需求列表`,-1),d(`span`,_e,`共 `+_(K.value.length)+` 条`,1)]),i(N,{data:K.value,size:`small`,"row-key":`id`},{default:u(()=>[i(j,{label:`类型`,width:`100`},{default:u(({row:e})=>[i(P,{size:`small`,effect:`dark`},{default:u(()=>[c(_(e.type_item?.label),1)]),_:2},1024)]),_:1}),i(j,{prop:`title`,label:`标题`,"min-width":`180`,"show-overflow-tooltip":``}),i(j,{prop:`submitted_at`,label:`时间`,width:`110`}),i(j,{label:`处理状态`,width:`100`},{default:u(({row:e})=>[i(P,{type:n(F)(e.status_item?.value),size:`small`,effect:`dark`},{default:u(()=>[c(_(e.status_item?.label),1)]),_:2},1032,[`type`])]),_:1}),i(j,{label:`跟进记录`,width:`100`},{default:u(({row:e})=>[i(T,{size:`small`,onClick:t=>Ve(e)},{default:u(()=>[c(_(e.handle_logs_count||0)+`条记录 `,1)]),_:2},1032,[`onClick`])]),_:1})]),_:1},8,[`data`]),K.value.length?s(``,!0):(a(),v(I,{key:0,description:`暂无关联需求`,"image-size":64}))])])),[[R,V.value]]),i(L,{modelValue:X.value,"onUpdate:modelValue":o[17]||=e=>X.value=e,title:`新建高校`,width:`480px`,"append-to-body":``,"destroy-on-close":``},{footer:u(()=>[i(T,{onClick:o[16]||=e=>X.value=!1},{default:u(()=>[...o[33]||=[c(`取消`,-1)]]),_:1}),i(T,{type:`primary`,class:`teachers-primary-btn`,loading:Z.value,onClick:je},{default:u(()=>[...o[34]||=[c(` 保存 `,-1)]]),_:1},8,[`loading`])]),default:u(()=>[i(A,{"label-position":`top`,class:`form-small`},{default:u(()=>[i(y,{label:`高校名称`,required:``},{default:u(()=>[i(g,{modelValue:Q.value.name,"onUpdate:modelValue":o[11]||=e=>Q.value.name=e,placeholder:`如:复旦大学`},null,8,[`modelValue`])]),_:1}),i(D,{gutter:12},{default:u(()=>[i(b,{span:12},{default:u(()=>[i(y,{label:`经度`,required:``},{default:u(()=>[i(g,{modelValue:Q.value.longitude,"onUpdate:modelValue":o[12]||=e=>Q.value.longitude=e,placeholder:`如:121.5031`},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{span:12},{default:u(()=>[i(y,{label:`纬度`,required:``},{default:u(()=>[i(g,{modelValue:Q.value.latitude,"onUpdate:modelValue":o[13]||=e=>Q.value.latitude=e,placeholder:`如:31.2970`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1}),i(D,{gutter:12},{default:u(()=>[i(b,{span:12},{default:u(()=>[i(y,{label:`省份`},{default:u(()=>[i(g,{modelValue:Q.value.province,"onUpdate:modelValue":o[14]||=e=>Q.value.province=e,placeholder:`如:上海市`},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{span:12},{default:u(()=>[i(y,{label:`城市`},{default:u(()=>[i(g,{modelValue:Q.value.city,"onUpdate:modelValue":o[15]||=e=>Q.value.city=e,placeholder:`如:上海`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),i(L,{modelValue:Ce.value,"onUpdate:modelValue":o[18]||=e=>Ce.value=e,title:`论文摘要`,width:`520px`,"append-to-body":``},{default:u(()=>[d(`p`,ve,_(we.value),1)]),_:1},8,[`modelValue`]),i(ie,{modelValue:$.value,"onUpdate:modelValue":o[19]||=e=>$.value=e,"teacher-id":e.teacherId,"default-authors":H.value?.name||Y.value.name,"default-school-name":J.value.find(e=>e.id===Y.value.university_id)?.name||H.value?.university_name||``,onSaved:Re},null,8,[`modelValue`,`teacher-id`,`default-authors`,`default-school-name`]),i(L,{modelValue:Te.value,"onUpdate:modelValue":o[20]||=e=>Te.value=e,title:`需求跟进记录`,width:`640px`,"append-to-body":``},{default:u(()=>[d(`p`,ye,_(Ee.value),1),(a(!0),t(m,null,h(De.value,e=>(a(),t(`div`,{key:e.id,class:`log-card`},[d(`div`,be,[d(`strong`,null,_(e.operator_name),1),d(`span`,null,_(e.handled_at),1),e.status_item?(a(),v(P,{key:0,size:`small`,type:n(F)(e.status_item.value)},{default:u(()=>[c(_(e.status_item.label),1)]),_:2},1032,[`type`])):s(``,!0)]),d(`p`,null,_(e.content),1)]))),128)),De.value.length?s(``,!0):(a(),v(I,{key:0,description:`暂无记录`}))]),_:1},8,[`modelValue`])]),_:1},8,[`model-value`,`title`])}}}),W=e({default:()=>G}),G=S(U,[[`__scopeId`,`data-v-287a1810`]]);export{W as n,ie as r,G as t}; \ No newline at end of file diff --git a/public/admin/assets/activities-B_XgKYQ2.js b/public/admin/assets/activities-4DmBuess.js similarity index 98% rename from public/admin/assets/activities-B_XgKYQ2.js rename to public/admin/assets/activities-4DmBuess.js index 591d6b5..c3695bb 100644 --- a/public/admin/assets/activities-B_XgKYQ2.js +++ b/public/admin/assets/activities-4DmBuess.js @@ -1 +1 @@ -import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as ee,Xt as te,Y as s,at as c,b as l,d as ne,ht as u,m as d,ot as re,q as f,tn as p,x as m}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as h,l as g,s as ie}from"./index-jhdMOnS8.js";import{t as ae}from"./vue-quill.snow-CU-IQtel.js";import{t as _}from"./usePageLoad-DFTLo_Lv.js";import{a as v,c as y,d as b,f as oe,i as se,l as x,n as S,o as C,p as ce,r as le,s as ue,t as w,u as T}from"./activities-ByMS-EcA.js";import{a as de,i as fe,o as pe,s as me}from"./admin-list-DjncsyJC.js";import{a as E}from"./dict-BFb6lz5T.js";import{a as he,i as ge,n as D,r as O,t as _e}from"./csv-export-BctnjsYJ.js";function ve(e,t){return D([`姓名`,`手机`,`公司`,`报名时间`],e.map(e=>[e.name,e.mobile,e.company??`—`,t(e.signed_up_at)]))}function ye(e,t,n){return D([`姓名`,`手机`,`公司`,`签到状态`,`签到时间`],e.map(e=>[e.name,e.mobile,e.company??`—`,t?e.session_checked_in_at?`已签到`:`未签到`:``,t?n(e.session_checked_in_at):``]))}var be={class:`list-page`},xe={class:`page-header`},Se={class:`list-filter-bar`},Ce={class:`table-row-actions`},we={class:`list-pager`},Te={class:`date-range`},Ee={class:`date-range`},De={class:`session-label-row`},Oe={class:`sessions-block`},ke={class:`quill-wrap`},Ae={class:`dialog-footer-inner`},je={class:`signup-head`},Me={class:`signup-head-row`},Ne={key:0,class:`session-tabs`},Pe={key:1,class:`text-mute`},Fe={class:`sub-toolbar signup-filter-bar`},Ie={class:`list-pager`},k=ie(n({__name:`index`,setup(n){let ie=[[`bold`,`italic`,`underline`],[{header:[2,3,!1]}],[{list:`ordered`},{list:`bullet`}],[`link`],[`clean`]],D=u(!1),k=u(!1),Le=u([]),A=u({current_page:1,per_page:20,total:0}),j=u(1),M=u(``),N=u(``),P=u(``),F=u(``),I=u([]),L=u(!1),R=u(null),z=u({title:``,activity_type_dict_item_id:void 0,event_start_date:``,event_end_date:``,signup_start_date:``,signup_end_date:``,location:``,intro_html:``}),B=u([]),Re=u(!1),V=u(null),H=u([]),ze=u([]),U=u({current_page:1,per_page:20,total:0}),W=u(1),G=u(``),K=u(``),q=u(``),J=u(!1),Be=u(!1),Ve=u([]),He=u(!1),Ue=u(null),We=u(``);async function Ge(){try{I.value=(await E(`activity_type`)).items}catch{g.warning(`活动类型字典加载失败,请执行 ActivityDictionarySeeder 或在字典中维护 activity_type`)}}async function Y(){D.value=!0;try{let e={page:j.value,page_size:A.value.per_page};M.value&&(e.keyword=M.value),N.value!==``&&(e.activity_type_dict_item_id=N.value),P.value!==``&&(e.progress_status=P.value),F.value!==``&&(e.published=F.value);let t=await ue(e);Le.value=t.items,A.value=t.meta}finally{D.value=!1}}function Ke(){j.value=1,Y()}function qe(){M.value=``,N.value=``,P.value=``,F.value=``,j.value=1,Y()}function Je(){B.value.push({title:``,starts_at:``,ends_at:``,venue:``,capacity:void 0})}function Ye(e){B.value.splice(e,1)}function Xe(){R.value=null,z.value={title:``,activity_type_dict_item_id:I.value[0]?.id,event_start_date:``,event_end_date:``,signup_start_date:``,signup_end_date:``,location:``,intro_html:``},B.value=[],L.value=!0}async function Ze(e){R.value=e;let t=await y(e.id);z.value={title:t.title,activity_type_dict_item_id:t.activity_type_dict_item_id??void 0,event_start_date:t.event_start_date||``,event_end_date:t.event_end_date||``,signup_start_date:t.signup_start_date||``,signup_end_date:t.signup_end_date||``,location:t.location||``,intro_html:t.intro_html||``},B.value=(await x(e.id)).map(e=>({id:e.id,title:e.title||``,starts_at:e.starts_at?e.starts_at.slice(0,16).replace(`T`,` `):``,ends_at:e.ends_at?e.ends_at.slice(0,16).replace(`T`,` `):``,venue:e.venue||``,capacity:e.capacity??void 0})),L.value=!0}function Qe(){return z.value.title?.trim()?z.value.activity_type_dict_item_id?!z.value.event_start_date||!z.value.event_end_date?(g.warning(`请填写活动日期`),!1):z.value.event_start_date>z.value.event_end_date?(g.warning(`活动结束日期不能早于开始日期`),!1):!z.value.signup_start_date||!z.value.signup_end_date?(g.warning(`请填写报名起止日期`),!1):z.value.signup_start_date>z.value.signup_end_date?(g.warning(`报名结束日期不能早于开始日期`),!1):!0:(g.warning(`请选择活动类型`),!1):(g.warning(`请填写活动名称`),!1)}function $e(e){return e.slice(0,10)}function et(e){let t=z.value.event_start_date,n=z.value.event_end_date;return!t||!n?!0:e.starts_at&&$e(e.starts_at)n?(g.warning(`场次「${e.title}」结束时间不能晚于活动结束日期`),!1):!0}function tt(e){let t=z.value.event_start_date,n=z.value.event_end_date;if(!t||!n)return!1;let r=`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`;return rn}function nt(){let e=B.value.filter(e=>e.title?.trim()||e.starts_at||e.ends_at||e.venue||e.capacity);for(let t of e){if(!t.title?.trim()||!t.starts_at||!t.ends_at||!(t.capacity&&t.capacity>0))return g.warning(`场次信息不完整:标题、开始时间、结束时间、名额均为必填,且名额须大于 0`),!1;if(t.starts_at>t.ends_at)return g.warning(`场次「${t.title}」结束时间不能早于开始时间`),!1;if(!et(t))return!1}return B.value.filter(e=>e.title?.trim()&&e.starts_at&&e.ends_at&&(e.capacity??0)>0).length?!0:(g.warning(`保存并发布前须至少添加一个完整场次(标题、开始/结束时间、名额均必填且名额大于 0)`),!1)}async function rt(e){let t=R.value?await x(e):[],n=new Set;for(let t of B.value){if(!t.title?.trim()||!t.starts_at||!t.ends_at||!(t.capacity&&t.capacity>0))continue;if(!et(t))throw Error(`session_range_invalid`);let r={title:t.title.trim(),starts_at:`${t.starts_at}:00`,ends_at:`${t.ends_at}:00`,venue:t.venue||null,capacity:t.capacity};if(t.id)await ce(e,t.id,r),n.add(t.id);else{let t=await le(e,r);n.add(t.id)}}for(let r of t)n.has(r.id)||await v(e,r.id)}async function it(e){if(!Qe()||e===1&&!nt())return;let t=B.value.filter(e=>e.title?.trim()||e.starts_at||e.ends_at||e.venue||e.capacity);for(let e of t)if((e.starts_at||e.ends_at)&&!et(e))return;let n={title:z.value.title.trim(),activity_type_dict_item_id:z.value.activity_type_dict_item_id,event_start_date:z.value.event_start_date,event_end_date:z.value.event_end_date,signup_start_date:z.value.signup_start_date,signup_end_date:z.value.signup_end_date,location:z.value.location||null,intro_html:z.value.intro_html||null,published:e};k.value=!0;try{let t;R.value?(await oe(R.value.id,n),t=R.value.id):t=(await S(n)).id,await rt(t),g.success(e===1?`已保存并发布`:`已暂存草稿`),L.value=!1,await Y()}catch(e){if(e instanceof Error&&e.message===`session_range_invalid`)return;throw e}finally{k.value=!1}}async function at(e){await h.confirm(`确定删除活动「${e.title}」?`,`提示`,{type:`warning`}),await se(e.id),g.success(`已删除`),await Y()}function X(e){if(!e)return`—`;let t=new Date(e);if(Number.isNaN(t.getTime()))return`—`;let n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`}function Z(e){return e.title?e.title:e.starts_at?e.starts_at.slice(0,10).replace(/-/g,`.`):`场次 #${e.id}`}function ot(e){return e?.starts_at?new Date(e.starts_at)<=new Date:!0}let st=()=>H.value.find(e=>e.id===q.value),Q=()=>ot(st());async function $(){if(!V.value)return;let e={page:W.value,page_size:U.value.per_page};G.value.trim()&&(e.keyword=G.value.trim()),q.value!==``&&(e.activity_session_id=q.value),K.value!==``&&(e.checkin_status=K.value);let t=await T(V.value.id,e);ze.value=t.items,U.value=t.meta}async function ct(e){V.value=e,Re.value=!0,W.value=1,G.value=``,K.value=``,H.value=await x(e.id),q.value=H.value[0]?.id??``,await $()}async function lt(e){q.value=e,W.value=1,await $()}function ut(){W.value=1,$()}function dt(){G.value=``,K.value=``,W.value=1,$()}async function ft(e){V.value&&(await h.confirm(`确定删除该报名记录?`,`提示`,{type:`warning`}),await C(V.value.id,e.id),await $(),await Y())}async function pt(e){!V.value||q.value===``||(await w(V.value.id,e.id,{activity_session_id:q.value}),g.success(`已完成手动补签`),await $())}function mt(e){Ue.value=e,We.value=he(e),He.value=!0}async function ht(){if(V.value){J.value=!0,Be.value=!0,Ve.value=[];try{let e=V.value.id,t=await b(e);Ve.value=await Promise.all(H.value.map(async n=>{let r=await b(e,{activity_session_id:n.id}),i=ot(n)?r.filter(e=>e.session_checked_in_at).length:0,a=t.filter(e=>e.activity_session_id===n.id);return{session:n,signup_count:a.length,checked_in_count:i,signupRows:a,signinRows:r}}))}catch{g.error(`导出数据加载失败`)}finally{Be.value=!1}}}function gt(e){if(!V.value)return;let t=O(V.value.title||`活动`),n=O(Z(e.session)),r=ve(e.signupRows,X);_e(`${t}_${n}_报名.csv`,r)}function _t(e){if(!V.value)return;let t=O(V.value.title||`活动`),n=O(Z(e.session)),r=ye(e.signinRows,ot(e.session),X);_e(`${t}_${n}_签到.csv`,r)}return _(async()=>{await Ge(),await Y()}),(n,u)=>{let h=s(`el-button`),g=s(`el-input`),_=s(`el-option`),v=s(`el-select`),y=s(`el-table-column`),b=s(`el-table`),oe=s(`el-pagination`),se=s(`el-card`),x=s(`el-form-item`),S=s(`el-col`),C=s(`el-date-picker`),ce=s(`el-input-number`),le=s(`el-row`),ue=s(`el-form`),w=s(`el-dialog`),T=s(`el-tag`),E=ee(`loading`);return i(),e(d,null,[l(`div`,be,[l(`div`,xe,[u[25]||=l(`h1`,{class:`page-title`},`活动管理`,-1),r(h,{type:`primary`,size:`small`,class:`btn-create`,onClick:Xe},{default:c(()=>[...u[24]||=[o(`新建活动`,-1)]]),_:1})]),r(se,{shadow:`never`,class:`admin-list-card`},{default:c(()=>[l(`div`,Se,[r(g,{modelValue:M.value,"onUpdate:modelValue":u[0]||=e=>M.value=e,placeholder:`搜索活动名称`,clearable:``,class:`filter-search`,onKeyup:ne(Ke,[`enter`])},null,8,[`modelValue`]),r(v,{modelValue:N.value,"onUpdate:modelValue":u[1]||=e=>N.value=e,clearable:``,placeholder:`活动类型`,class:`filter-select`,filterable:``},{default:c(()=>[(i(!0),e(d,null,f(I.value,e=>(i(),m(_,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(v,{modelValue:P.value,"onUpdate:modelValue":u[2]||=e=>P.value=e,clearable:``,placeholder:`活动状态`,class:`filter-select`},{default:c(()=>[r(_,{label:`未开始`,value:1}),r(_,{label:`进行中`,value:2}),r(_,{label:`已结束`,value:3})]),_:1},8,[`modelValue`]),r(v,{modelValue:F.value,"onUpdate:modelValue":u[3]||=e=>F.value=e,clearable:``,placeholder:`发布状态`,class:`filter-select`},{default:c(()=>[r(_,{label:`已发布`,value:1}),r(_,{label:`未发布`,value:0})]),_:1},8,[`modelValue`]),r(h,{type:`primary`,onClick:Ke},{default:c(()=>[...u[26]||=[o(`搜索`,-1)]]),_:1}),r(h,{onClick:qe},{default:c(()=>[...u[27]||=[o(`重置`,-1)]]),_:1})]),re((i(),m(b,{data:Le.value,"row-key":`id`},{default:c(()=>[r(y,{prop:`title`,label:`活动名称`,"min-width":`160`,"show-overflow-tooltip":``}),r(y,{label:`活动类型`,width:`100`},{default:c(({row:e})=>[o(p(e.activity_type_item?.label??`—`),1)]),_:1}),r(y,{label:`场次`,width:`72`,align:`center`},{default:c(({row:e})=>[o(p(e.sessions_count??0),1)]),_:1}),r(y,{label:`活动日期`,"min-width":`150`},{default:c(({row:e})=>[o(p(t(fe)(e.event_start_date,e.event_end_date)),1)]),_:1}),r(y,{label:`报名起止日期`,"min-width":`150`},{default:c(({row:e})=>[o(p(t(fe)(e.signup_start_date,e.signup_end_date)),1)]),_:1}),r(y,{prop:`location`,label:`活动地点`,"min-width":`120`,"show-overflow-tooltip":``}),r(y,{label:`活动状态`,width:`90`,align:`center`},{default:c(({row:e})=>[l(`span`,{class:te([`status-badge`,t(pe)(e.progress_status)])},p(t(de)(e.progress_status)),3)]),_:1}),r(y,{label:`发布状态`,width:`90`,align:`center`},{default:c(({row:e})=>[l(`span`,{class:te([`status-badge`,t(me)(e.published)])},p(e.published===1?`已发布`:`未发布`),3)]),_:1}),r(y,{label:`操作`,width:`280`,fixed:`right`},{default:c(({row:e})=>[l(`div`,Ce,[r(h,{class:`btn-action-brand`,onClick:t=>ct(e)},{default:c(()=>[...u[28]||=[o(`报名与签到`,-1)]]),_:1},8,[`onClick`]),r(h,{class:`btn-action-primary`,onClick:t=>mt(e)},{default:c(()=>[...u[29]||=[o(`签到码`,-1)]]),_:1},8,[`onClick`]),r(h,{class:`btn-action-secondary`,onClick:t=>Ze(e)},{default:c(()=>[...u[30]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),r(h,{class:`btn-action-secondary`,onClick:t=>at(e)},{default:c(()=>[...u[31]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[E,D.value]]),l(`div`,we,[r(oe,{"current-page":j.value,"onUpdate:currentPage":u[4]||=e=>j.value=e,layout:`total, prev, pager, next`,total:A.value.total,"page-size":A.value.per_page,onCurrentChange:Y},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),r(w,{modelValue:L.value,"onUpdate:modelValue":u[16]||=e=>L.value=e,title:R.value?`编辑活动`:`新建活动`,width:`1200px`,top:`4vh`,"destroy-on-close":``,class:`activity-dialog`},{footer:c(()=>[l(`div`,Ae,[r(h,{onClick:u[13]||=e=>L.value=!1},{default:c(()=>[...u[37]||=[o(`取消`,-1)]]),_:1}),r(h,{loading:k.value,onClick:u[14]||=e=>it(0)},{default:c(()=>[...u[38]||=[o(`暂存草稿`,-1)]]),_:1},8,[`loading`]),r(h,{type:`primary`,loading:k.value,onClick:u[15]||=e=>it(1)},{default:c(()=>[...u[39]||=[o(`保存并发布`,-1)]]),_:1},8,[`loading`])])]),default:c(()=>[r(ue,{"label-position":`top`,class:`activity-form`},{default:c(()=>[r(le,{gutter:16},{default:c(()=>[r(S,{span:8},{default:c(()=>[r(x,{label:`活动名称`,required:``},{default:c(()=>[r(g,{modelValue:z.value.title,"onUpdate:modelValue":u[5]||=e=>z.value.title=e,placeholder:`请输入活动名称`},null,8,[`modelValue`])]),_:1})]),_:1}),r(S,{span:8},{default:c(()=>[r(x,{label:`活动类型`,required:``},{default:c(()=>[r(v,{modelValue:z.value.activity_type_dict_item_id,"onUpdate:modelValue":u[6]||=e=>z.value.activity_type_dict_item_id=e,placeholder:`请选择`,filterable:``,style:{width:`100%`}},{default:c(()=>[(i(!0),e(d,null,f(I.value,e=>(i(),m(_,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(S,{span:8},{default:c(()=>[r(x,{label:`活动日期`,required:``},{default:c(()=>[l(`div`,Te,[r(C,{modelValue:z.value.event_start_date,"onUpdate:modelValue":u[7]||=e=>z.value.event_start_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`开始`,style:{width:`100%`}},null,8,[`modelValue`]),u[32]||=l(`span`,{class:`range-sep`},`至`,-1),r(C,{modelValue:z.value.event_end_date,"onUpdate:modelValue":u[8]||=e=>z.value.event_end_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`结束`,style:{width:`100%`}},null,8,[`modelValue`])])]),_:1})]),_:1}),r(S,{span:8},{default:c(()=>[r(x,{label:`报名起止日期`,required:``},{default:c(()=>[l(`div`,Ee,[r(C,{modelValue:z.value.signup_start_date,"onUpdate:modelValue":u[9]||=e=>z.value.signup_start_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`开始`,style:{width:`100%`}},null,8,[`modelValue`]),u[33]||=l(`span`,{class:`range-sep`},`至`,-1),r(C,{modelValue:z.value.signup_end_date,"onUpdate:modelValue":u[10]||=e=>z.value.signup_end_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`结束`,style:{width:`100%`}},null,8,[`modelValue`])])]),_:1})]),_:1}),r(S,{span:8},{default:c(()=>[r(x,{label:`活动地点`},{default:c(()=>[r(g,{modelValue:z.value.location,"onUpdate:modelValue":u[11]||=e=>z.value.location=e,placeholder:`请输入活动地点`},null,8,[`modelValue`])]),_:1})]),_:1}),r(S,{span:24},{default:c(()=>[r(x,{class:`session-form-item`},{label:c(()=>[l(`div`,De,[u[35]||=l(`span`,null,`活动场次`,-1),r(h,{type:`primary`,size:`small`,class:`btn-create btn-label-action`,onClick:Je},{default:c(()=>[...u[34]||=[o(` 添加场次 `,-1)]]),_:1})])]),default:c(()=>[l(`div`,Oe,[(i(!0),e(d,null,f(B.value,(t,n)=>(i(),e(`div`,{key:n,class:`session-row`},[r(g,{modelValue:t.title,"onUpdate:modelValue":e=>t.title=e,placeholder:`场次标题,如:上午场`},null,8,[`modelValue`,`onUpdate:modelValue`]),r(C,{modelValue:t.starts_at,"onUpdate:modelValue":e=>t.starts_at=e,type:`datetime`,"value-format":`YYYY-MM-DD HH:mm`,format:`YYYY-MM-DD HH:mm`,placeholder:`开始时间`,"disabled-date":tt,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`]),r(C,{modelValue:t.ends_at,"onUpdate:modelValue":e=>t.ends_at=e,type:`datetime`,"value-format":`YYYY-MM-DD HH:mm`,format:`YYYY-MM-DD HH:mm`,placeholder:`结束时间`,"disabled-date":tt,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`]),r(g,{modelValue:t.venue,"onUpdate:modelValue":e=>t.venue=e,placeholder:`地点(可选)`},null,8,[`modelValue`,`onUpdate:modelValue`]),r(ce,{modelValue:t.capacity,"onUpdate:modelValue":e=>t.capacity=e,min:1,placeholder:`名额`,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`]),r(h,{type:`danger`,plain:``,size:`small`,class:`session-row-delete`,onClick:e=>Ye(n)},{default:c(()=>[...u[36]||=[o(` 删除 `,-1)]]),_:1},8,[`onClick`])]))),128))])]),_:1})]),_:1}),r(S,{span:24},{default:c(()=>[r(x,{label:`活动简介`,class:`intro-form-item`},{default:c(()=>[l(`div`,ke,[r(t(ae),{content:z.value.intro_html,"onUpdate:content":u[12]||=e=>z.value.intro_html=e,"content-type":`html`,theme:`snow`,toolbar:ie},null,8,[`content`])])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`]),r(ge,{modelValue:He.value,"onUpdate:modelValue":u[17]||=e=>He.value=e,"course-name":Ue.value?.title||``,"signin-code":We.value},null,8,[`modelValue`,`course-name`,`signin-code`]),r(w,{modelValue:Re.value,"onUpdate:modelValue":u[21]||=e=>Re.value=e,title:`活动报名与签到:${V.value?.title||``}`,width:`960px`,top:`5vh`,class:`signup-dialog`},{default:c(()=>[l(`div`,je,[l(`div`,Me,[H.value.length?(i(),e(`div`,Ne,[(i(!0),e(d,null,f(H.value,e=>(i(),m(h,{key:e.id,size:`small`,type:q.value===e.id?`primary`:`default`,onClick:t=>lt(e.id)},{default:c(()=>[o(p(Z(e)),1)]),_:2},1032,[`type`,`onClick`]))),128))])):(i(),e(`div`,Pe,`暂无场次,请先在活动中添加场次`)),r(h,{disabled:!H.value.length,onClick:ht},{default:c(()=>[...u[40]||=[o(`导出`,-1)]]),_:1},8,[`disabled`])])]),l(`div`,Fe,[r(g,{modelValue:G.value,"onUpdate:modelValue":u[18]||=e=>G.value=e,clearable:``,placeholder:`搜索姓名、手机、公司…`,style:{width:`220px`},onKeyup:ne(ut,[`enter`])},null,8,[`modelValue`]),r(v,{modelValue:K.value,"onUpdate:modelValue":u[19]||=e=>K.value=e,clearable:``,placeholder:`签到状态`,style:{width:`120px`}},{default:c(()=>[r(_,{label:`已签到`,value:1}),r(_,{label:`未签到`,value:0})]),_:1},8,[`modelValue`]),r(h,{type:`primary`,onClick:ut},{default:c(()=>[...u[41]||=[o(`搜索`,-1)]]),_:1}),r(h,{onClick:dt},{default:c(()=>[...u[42]||=[o(`重置`,-1)]]),_:1})]),r(b,{data:ze.value,size:`small`,style:{"margin-top":`12px`}},{default:c(()=>[r(y,{prop:`name`,label:`姓名`,width:`100`}),r(y,{prop:`mobile`,label:`手机`,width:`130`}),r(y,{prop:`company`,label:`公司`,"min-width":`120`,"show-overflow-tooltip":``}),r(y,{label:`报名时间`,width:`170`},{default:c(({row:e})=>[o(p(X(e.signed_up_at)),1)]),_:1}),r(y,{label:`签到状态`,width:`100`},{default:c(({row:t})=>[Q()?(i(),e(d,{key:0},[t.session_checked_in_at?(i(),m(T,{key:0,type:`success`,size:`small`},{default:c(()=>[...u[43]||=[o(`已签到`,-1)]]),_:1})):(i(),m(T,{key:1,type:`info`,size:`small`},{default:c(()=>[...u[44]||=[o(`未签到`,-1)]]),_:1}))],64)):a(``,!0)]),_:1}),r(y,{label:`签到时间`,width:`170`},{default:c(({row:e})=>[o(p(Q()?X(e.session_checked_in_at):``),1)]),_:1}),r(y,{label:`操作`,width:`120`,fixed:`right`},{default:c(({row:e})=>[Q()&&!e.session_checked_in_at?(i(),m(h,{key:0,type:`primary`,link:``,onClick:t=>pt(e)},{default:c(()=>[...u[45]||=[o(` 手动补签 `,-1)]]),_:1},8,[`onClick`])):Q()&&e.session_checked_in_at?(i(),m(h,{key:1,type:`info`,link:``,disabled:``},{default:c(()=>[...u[46]||=[o(` 已完成 `,-1)]]),_:1})):a(``,!0),r(h,{type:`danger`,link:``,onClick:t=>ft(e)},{default:c(()=>[...u[47]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`]),l(`div`,Ie,[r(oe,{"current-page":W.value,"onUpdate:currentPage":u[20]||=e=>W.value=e,layout:`total, prev, pager, next`,total:U.value.total,"page-size":U.value.per_page,onCurrentChange:$},null,8,[`current-page`,`total`,`page-size`])])]),_:1},8,[`modelValue`,`title`]),r(w,{modelValue:J.value,"onUpdate:modelValue":u[23]||=e=>J.value=e,title:`${V.value?.title||``}报名表导出`,width:`720px`,"append-to-body":``},{footer:c(()=>[r(h,{onClick:u[22]||=e=>J.value=!1},{default:c(()=>[...u[50]||=[o(`关闭`,-1)]]),_:1})]),default:c(()=>[re((i(),m(b,{data:Ve.value,size:`small`},{default:c(()=>[r(y,{label:`场次`,"min-width":`140`},{default:c(({row:e})=>[o(p(Z(e.session)),1)]),_:1}),r(y,{prop:`signup_count`,label:`报名人数`,width:`100`}),r(y,{prop:`checked_in_count`,label:`已签到`,width:`90`}),r(y,{label:`报名导出`,width:`100`},{default:c(({row:e})=>[r(h,{type:`primary`,link:``,onClick:t=>gt(e)},{default:c(()=>[...u[48]||=[o(`导出报名`,-1)]]),_:1},8,[`onClick`])]),_:1}),r(y,{label:`签到导出`,width:`100`},{default:c(({row:e})=>[r(h,{type:`primary`,link:``,onClick:t=>_t(e)},{default:c(()=>[...u[49]||=[o(`导出签到`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`])),[[E,Be.value]])]),_:1},8,[`modelValue`,`title`])],64)}}}),[[`__scopeId`,`data-v-1730cf79`]]);export{k as default}; \ No newline at end of file +import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as ee,Xt as te,Y as s,at as c,b as l,d as ne,ht as u,m as d,ot as re,q as f,tn as p,x as m}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as h,l as g,s as ie}from"./index-D3i1HG2q.js";import{t as ae}from"./vue-quill.snow-CU-IQtel.js";import{t as _}from"./usePageLoad-DFTLo_Lv.js";import{a as v,c as y,d as b,f as oe,i as se,l as x,n as S,o as C,p as ce,r as le,s as ue,t as w,u as T}from"./activities-dvEtD3Zu.js";import{a as de,i as fe,o as pe,s as me}from"./admin-list-DjncsyJC.js";import{a as E}from"./dict-Brh9rLpP.js";import{a as he,i as ge,n as D,r as O,t as _e}from"./csv-export-CRokRAld.js";function ve(e,t){return D([`姓名`,`手机`,`公司`,`报名时间`],e.map(e=>[e.name,e.mobile,e.company??`—`,t(e.signed_up_at)]))}function ye(e,t,n){return D([`姓名`,`手机`,`公司`,`签到状态`,`签到时间`],e.map(e=>[e.name,e.mobile,e.company??`—`,t?e.session_checked_in_at?`已签到`:`未签到`:``,t?n(e.session_checked_in_at):``]))}var be={class:`list-page`},xe={class:`page-header`},Se={class:`list-filter-bar`},Ce={class:`table-row-actions`},we={class:`list-pager`},Te={class:`date-range`},Ee={class:`date-range`},De={class:`session-label-row`},Oe={class:`sessions-block`},ke={class:`quill-wrap`},Ae={class:`dialog-footer-inner`},je={class:`signup-head`},Me={class:`signup-head-row`},Ne={key:0,class:`session-tabs`},Pe={key:1,class:`text-mute`},Fe={class:`sub-toolbar signup-filter-bar`},Ie={class:`list-pager`},k=ie(n({__name:`index`,setup(n){let ie=[[`bold`,`italic`,`underline`],[{header:[2,3,!1]}],[{list:`ordered`},{list:`bullet`}],[`link`],[`clean`]],D=u(!1),k=u(!1),Le=u([]),A=u({current_page:1,per_page:20,total:0}),j=u(1),M=u(``),N=u(``),P=u(``),F=u(``),I=u([]),L=u(!1),R=u(null),z=u({title:``,activity_type_dict_item_id:void 0,event_start_date:``,event_end_date:``,signup_start_date:``,signup_end_date:``,location:``,intro_html:``}),B=u([]),Re=u(!1),V=u(null),H=u([]),ze=u([]),U=u({current_page:1,per_page:20,total:0}),W=u(1),G=u(``),K=u(``),q=u(``),J=u(!1),Be=u(!1),Ve=u([]),He=u(!1),Ue=u(null),We=u(``);async function Ge(){try{I.value=(await E(`activity_type`)).items}catch{g.warning(`活动类型字典加载失败,请执行 ActivityDictionarySeeder 或在字典中维护 activity_type`)}}async function Y(){D.value=!0;try{let e={page:j.value,page_size:A.value.per_page};M.value&&(e.keyword=M.value),N.value!==``&&(e.activity_type_dict_item_id=N.value),P.value!==``&&(e.progress_status=P.value),F.value!==``&&(e.published=F.value);let t=await ue(e);Le.value=t.items,A.value=t.meta}finally{D.value=!1}}function Ke(){j.value=1,Y()}function qe(){M.value=``,N.value=``,P.value=``,F.value=``,j.value=1,Y()}function Je(){B.value.push({title:``,starts_at:``,ends_at:``,venue:``,capacity:void 0})}function Ye(e){B.value.splice(e,1)}function Xe(){R.value=null,z.value={title:``,activity_type_dict_item_id:I.value[0]?.id,event_start_date:``,event_end_date:``,signup_start_date:``,signup_end_date:``,location:``,intro_html:``},B.value=[],L.value=!0}async function Ze(e){R.value=e;let t=await y(e.id);z.value={title:t.title,activity_type_dict_item_id:t.activity_type_dict_item_id??void 0,event_start_date:t.event_start_date||``,event_end_date:t.event_end_date||``,signup_start_date:t.signup_start_date||``,signup_end_date:t.signup_end_date||``,location:t.location||``,intro_html:t.intro_html||``},B.value=(await x(e.id)).map(e=>({id:e.id,title:e.title||``,starts_at:e.starts_at?e.starts_at.slice(0,16).replace(`T`,` `):``,ends_at:e.ends_at?e.ends_at.slice(0,16).replace(`T`,` `):``,venue:e.venue||``,capacity:e.capacity??void 0})),L.value=!0}function Qe(){return z.value.title?.trim()?z.value.activity_type_dict_item_id?!z.value.event_start_date||!z.value.event_end_date?(g.warning(`请填写活动日期`),!1):z.value.event_start_date>z.value.event_end_date?(g.warning(`活动结束日期不能早于开始日期`),!1):!z.value.signup_start_date||!z.value.signup_end_date?(g.warning(`请填写报名起止日期`),!1):z.value.signup_start_date>z.value.signup_end_date?(g.warning(`报名结束日期不能早于开始日期`),!1):!0:(g.warning(`请选择活动类型`),!1):(g.warning(`请填写活动名称`),!1)}function $e(e){return e.slice(0,10)}function et(e){let t=z.value.event_start_date,n=z.value.event_end_date;return!t||!n?!0:e.starts_at&&$e(e.starts_at)n?(g.warning(`场次「${e.title}」结束时间不能晚于活动结束日期`),!1):!0}function tt(e){let t=z.value.event_start_date,n=z.value.event_end_date;if(!t||!n)return!1;let r=`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`;return rn}function nt(){let e=B.value.filter(e=>e.title?.trim()||e.starts_at||e.ends_at||e.venue||e.capacity);for(let t of e){if(!t.title?.trim()||!t.starts_at||!t.ends_at||!(t.capacity&&t.capacity>0))return g.warning(`场次信息不完整:标题、开始时间、结束时间、名额均为必填,且名额须大于 0`),!1;if(t.starts_at>t.ends_at)return g.warning(`场次「${t.title}」结束时间不能早于开始时间`),!1;if(!et(t))return!1}return B.value.filter(e=>e.title?.trim()&&e.starts_at&&e.ends_at&&(e.capacity??0)>0).length?!0:(g.warning(`保存并发布前须至少添加一个完整场次(标题、开始/结束时间、名额均必填且名额大于 0)`),!1)}async function rt(e){let t=R.value?await x(e):[],n=new Set;for(let t of B.value){if(!t.title?.trim()||!t.starts_at||!t.ends_at||!(t.capacity&&t.capacity>0))continue;if(!et(t))throw Error(`session_range_invalid`);let r={title:t.title.trim(),starts_at:`${t.starts_at}:00`,ends_at:`${t.ends_at}:00`,venue:t.venue||null,capacity:t.capacity};if(t.id)await ce(e,t.id,r),n.add(t.id);else{let t=await le(e,r);n.add(t.id)}}for(let r of t)n.has(r.id)||await v(e,r.id)}async function it(e){if(!Qe()||e===1&&!nt())return;let t=B.value.filter(e=>e.title?.trim()||e.starts_at||e.ends_at||e.venue||e.capacity);for(let e of t)if((e.starts_at||e.ends_at)&&!et(e))return;let n={title:z.value.title.trim(),activity_type_dict_item_id:z.value.activity_type_dict_item_id,event_start_date:z.value.event_start_date,event_end_date:z.value.event_end_date,signup_start_date:z.value.signup_start_date,signup_end_date:z.value.signup_end_date,location:z.value.location||null,intro_html:z.value.intro_html||null,published:e};k.value=!0;try{let t;R.value?(await oe(R.value.id,n),t=R.value.id):t=(await S(n)).id,await rt(t),g.success(e===1?`已保存并发布`:`已暂存草稿`),L.value=!1,await Y()}catch(e){if(e instanceof Error&&e.message===`session_range_invalid`)return;throw e}finally{k.value=!1}}async function at(e){await h.confirm(`确定删除活动「${e.title}」?`,`提示`,{type:`warning`}),await se(e.id),g.success(`已删除`),await Y()}function X(e){if(!e)return`—`;let t=new Date(e);if(Number.isNaN(t.getTime()))return`—`;let n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`}function Z(e){return e.title?e.title:e.starts_at?e.starts_at.slice(0,10).replace(/-/g,`.`):`场次 #${e.id}`}function ot(e){return e?.starts_at?new Date(e.starts_at)<=new Date:!0}let st=()=>H.value.find(e=>e.id===q.value),Q=()=>ot(st());async function $(){if(!V.value)return;let e={page:W.value,page_size:U.value.per_page};G.value.trim()&&(e.keyword=G.value.trim()),q.value!==``&&(e.activity_session_id=q.value),K.value!==``&&(e.checkin_status=K.value);let t=await T(V.value.id,e);ze.value=t.items,U.value=t.meta}async function ct(e){V.value=e,Re.value=!0,W.value=1,G.value=``,K.value=``,H.value=await x(e.id),q.value=H.value[0]?.id??``,await $()}async function lt(e){q.value=e,W.value=1,await $()}function ut(){W.value=1,$()}function dt(){G.value=``,K.value=``,W.value=1,$()}async function ft(e){V.value&&(await h.confirm(`确定删除该报名记录?`,`提示`,{type:`warning`}),await C(V.value.id,e.id),await $(),await Y())}async function pt(e){!V.value||q.value===``||(await w(V.value.id,e.id,{activity_session_id:q.value}),g.success(`已完成手动补签`),await $())}function mt(e){Ue.value=e,We.value=he(e),He.value=!0}async function ht(){if(V.value){J.value=!0,Be.value=!0,Ve.value=[];try{let e=V.value.id,t=await b(e);Ve.value=await Promise.all(H.value.map(async n=>{let r=await b(e,{activity_session_id:n.id}),i=ot(n)?r.filter(e=>e.session_checked_in_at).length:0,a=t.filter(e=>e.activity_session_id===n.id);return{session:n,signup_count:a.length,checked_in_count:i,signupRows:a,signinRows:r}}))}catch{g.error(`导出数据加载失败`)}finally{Be.value=!1}}}function gt(e){if(!V.value)return;let t=O(V.value.title||`活动`),n=O(Z(e.session)),r=ve(e.signupRows,X);_e(`${t}_${n}_报名.csv`,r)}function _t(e){if(!V.value)return;let t=O(V.value.title||`活动`),n=O(Z(e.session)),r=ye(e.signinRows,ot(e.session),X);_e(`${t}_${n}_签到.csv`,r)}return _(async()=>{await Ge(),await Y()}),(n,u)=>{let h=s(`el-button`),g=s(`el-input`),_=s(`el-option`),v=s(`el-select`),y=s(`el-table-column`),b=s(`el-table`),oe=s(`el-pagination`),se=s(`el-card`),x=s(`el-form-item`),S=s(`el-col`),C=s(`el-date-picker`),ce=s(`el-input-number`),le=s(`el-row`),ue=s(`el-form`),w=s(`el-dialog`),T=s(`el-tag`),E=ee(`loading`);return i(),e(d,null,[l(`div`,be,[l(`div`,xe,[u[25]||=l(`h1`,{class:`page-title`},`活动管理`,-1),r(h,{type:`primary`,size:`small`,class:`btn-create`,onClick:Xe},{default:c(()=>[...u[24]||=[o(`新建活动`,-1)]]),_:1})]),r(se,{shadow:`never`,class:`admin-list-card`},{default:c(()=>[l(`div`,Se,[r(g,{modelValue:M.value,"onUpdate:modelValue":u[0]||=e=>M.value=e,placeholder:`搜索活动名称`,clearable:``,class:`filter-search`,onKeyup:ne(Ke,[`enter`])},null,8,[`modelValue`]),r(v,{modelValue:N.value,"onUpdate:modelValue":u[1]||=e=>N.value=e,clearable:``,placeholder:`活动类型`,class:`filter-select`,filterable:``},{default:c(()=>[(i(!0),e(d,null,f(I.value,e=>(i(),m(_,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(v,{modelValue:P.value,"onUpdate:modelValue":u[2]||=e=>P.value=e,clearable:``,placeholder:`活动状态`,class:`filter-select`},{default:c(()=>[r(_,{label:`未开始`,value:1}),r(_,{label:`进行中`,value:2}),r(_,{label:`已结束`,value:3})]),_:1},8,[`modelValue`]),r(v,{modelValue:F.value,"onUpdate:modelValue":u[3]||=e=>F.value=e,clearable:``,placeholder:`发布状态`,class:`filter-select`},{default:c(()=>[r(_,{label:`已发布`,value:1}),r(_,{label:`未发布`,value:0})]),_:1},8,[`modelValue`]),r(h,{type:`primary`,onClick:Ke},{default:c(()=>[...u[26]||=[o(`搜索`,-1)]]),_:1}),r(h,{onClick:qe},{default:c(()=>[...u[27]||=[o(`重置`,-1)]]),_:1})]),re((i(),m(b,{data:Le.value,"row-key":`id`},{default:c(()=>[r(y,{prop:`title`,label:`活动名称`,"min-width":`160`,"show-overflow-tooltip":``}),r(y,{label:`活动类型`,width:`100`},{default:c(({row:e})=>[o(p(e.activity_type_item?.label??`—`),1)]),_:1}),r(y,{label:`场次`,width:`72`,align:`center`},{default:c(({row:e})=>[o(p(e.sessions_count??0),1)]),_:1}),r(y,{label:`活动日期`,"min-width":`150`},{default:c(({row:e})=>[o(p(t(fe)(e.event_start_date,e.event_end_date)),1)]),_:1}),r(y,{label:`报名起止日期`,"min-width":`150`},{default:c(({row:e})=>[o(p(t(fe)(e.signup_start_date,e.signup_end_date)),1)]),_:1}),r(y,{prop:`location`,label:`活动地点`,"min-width":`120`,"show-overflow-tooltip":``}),r(y,{label:`活动状态`,width:`90`,align:`center`},{default:c(({row:e})=>[l(`span`,{class:te([`status-badge`,t(pe)(e.progress_status)])},p(t(de)(e.progress_status)),3)]),_:1}),r(y,{label:`发布状态`,width:`90`,align:`center`},{default:c(({row:e})=>[l(`span`,{class:te([`status-badge`,t(me)(e.published)])},p(e.published===1?`已发布`:`未发布`),3)]),_:1}),r(y,{label:`操作`,width:`280`,fixed:`right`},{default:c(({row:e})=>[l(`div`,Ce,[r(h,{class:`btn-action-brand`,onClick:t=>ct(e)},{default:c(()=>[...u[28]||=[o(`报名与签到`,-1)]]),_:1},8,[`onClick`]),r(h,{class:`btn-action-primary`,onClick:t=>mt(e)},{default:c(()=>[...u[29]||=[o(`签到码`,-1)]]),_:1},8,[`onClick`]),r(h,{class:`btn-action-secondary`,onClick:t=>Ze(e)},{default:c(()=>[...u[30]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),r(h,{class:`btn-action-secondary`,onClick:t=>at(e)},{default:c(()=>[...u[31]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[E,D.value]]),l(`div`,we,[r(oe,{"current-page":j.value,"onUpdate:currentPage":u[4]||=e=>j.value=e,layout:`total, prev, pager, next`,total:A.value.total,"page-size":A.value.per_page,onCurrentChange:Y},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),r(w,{modelValue:L.value,"onUpdate:modelValue":u[16]||=e=>L.value=e,title:R.value?`编辑活动`:`新建活动`,width:`1200px`,top:`4vh`,"destroy-on-close":``,class:`activity-dialog`},{footer:c(()=>[l(`div`,Ae,[r(h,{onClick:u[13]||=e=>L.value=!1},{default:c(()=>[...u[37]||=[o(`取消`,-1)]]),_:1}),r(h,{loading:k.value,onClick:u[14]||=e=>it(0)},{default:c(()=>[...u[38]||=[o(`暂存草稿`,-1)]]),_:1},8,[`loading`]),r(h,{type:`primary`,loading:k.value,onClick:u[15]||=e=>it(1)},{default:c(()=>[...u[39]||=[o(`保存并发布`,-1)]]),_:1},8,[`loading`])])]),default:c(()=>[r(ue,{"label-position":`top`,class:`activity-form`},{default:c(()=>[r(le,{gutter:16},{default:c(()=>[r(S,{span:8},{default:c(()=>[r(x,{label:`活动名称`,required:``},{default:c(()=>[r(g,{modelValue:z.value.title,"onUpdate:modelValue":u[5]||=e=>z.value.title=e,placeholder:`请输入活动名称`},null,8,[`modelValue`])]),_:1})]),_:1}),r(S,{span:8},{default:c(()=>[r(x,{label:`活动类型`,required:``},{default:c(()=>[r(v,{modelValue:z.value.activity_type_dict_item_id,"onUpdate:modelValue":u[6]||=e=>z.value.activity_type_dict_item_id=e,placeholder:`请选择`,filterable:``,style:{width:`100%`}},{default:c(()=>[(i(!0),e(d,null,f(I.value,e=>(i(),m(_,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(S,{span:8},{default:c(()=>[r(x,{label:`活动日期`,required:``},{default:c(()=>[l(`div`,Te,[r(C,{modelValue:z.value.event_start_date,"onUpdate:modelValue":u[7]||=e=>z.value.event_start_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`开始`,style:{width:`100%`}},null,8,[`modelValue`]),u[32]||=l(`span`,{class:`range-sep`},`至`,-1),r(C,{modelValue:z.value.event_end_date,"onUpdate:modelValue":u[8]||=e=>z.value.event_end_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`结束`,style:{width:`100%`}},null,8,[`modelValue`])])]),_:1})]),_:1}),r(S,{span:8},{default:c(()=>[r(x,{label:`报名起止日期`,required:``},{default:c(()=>[l(`div`,Ee,[r(C,{modelValue:z.value.signup_start_date,"onUpdate:modelValue":u[9]||=e=>z.value.signup_start_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`开始`,style:{width:`100%`}},null,8,[`modelValue`]),u[33]||=l(`span`,{class:`range-sep`},`至`,-1),r(C,{modelValue:z.value.signup_end_date,"onUpdate:modelValue":u[10]||=e=>z.value.signup_end_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`结束`,style:{width:`100%`}},null,8,[`modelValue`])])]),_:1})]),_:1}),r(S,{span:8},{default:c(()=>[r(x,{label:`活动地点`},{default:c(()=>[r(g,{modelValue:z.value.location,"onUpdate:modelValue":u[11]||=e=>z.value.location=e,placeholder:`请输入活动地点`},null,8,[`modelValue`])]),_:1})]),_:1}),r(S,{span:24},{default:c(()=>[r(x,{class:`session-form-item`},{label:c(()=>[l(`div`,De,[u[35]||=l(`span`,null,`活动场次`,-1),r(h,{type:`primary`,size:`small`,class:`btn-create btn-label-action`,onClick:Je},{default:c(()=>[...u[34]||=[o(` 添加场次 `,-1)]]),_:1})])]),default:c(()=>[l(`div`,Oe,[(i(!0),e(d,null,f(B.value,(t,n)=>(i(),e(`div`,{key:n,class:`session-row`},[r(g,{modelValue:t.title,"onUpdate:modelValue":e=>t.title=e,placeholder:`场次标题,如:上午场`},null,8,[`modelValue`,`onUpdate:modelValue`]),r(C,{modelValue:t.starts_at,"onUpdate:modelValue":e=>t.starts_at=e,type:`datetime`,"value-format":`YYYY-MM-DD HH:mm`,format:`YYYY-MM-DD HH:mm`,placeholder:`开始时间`,"disabled-date":tt,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`]),r(C,{modelValue:t.ends_at,"onUpdate:modelValue":e=>t.ends_at=e,type:`datetime`,"value-format":`YYYY-MM-DD HH:mm`,format:`YYYY-MM-DD HH:mm`,placeholder:`结束时间`,"disabled-date":tt,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`]),r(g,{modelValue:t.venue,"onUpdate:modelValue":e=>t.venue=e,placeholder:`地点(可选)`},null,8,[`modelValue`,`onUpdate:modelValue`]),r(ce,{modelValue:t.capacity,"onUpdate:modelValue":e=>t.capacity=e,min:1,placeholder:`名额`,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`]),r(h,{type:`danger`,plain:``,size:`small`,class:`session-row-delete`,onClick:e=>Ye(n)},{default:c(()=>[...u[36]||=[o(` 删除 `,-1)]]),_:1},8,[`onClick`])]))),128))])]),_:1})]),_:1}),r(S,{span:24},{default:c(()=>[r(x,{label:`活动简介`,class:`intro-form-item`},{default:c(()=>[l(`div`,ke,[r(t(ae),{content:z.value.intro_html,"onUpdate:content":u[12]||=e=>z.value.intro_html=e,"content-type":`html`,theme:`snow`,toolbar:ie},null,8,[`content`])])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`]),r(ge,{modelValue:He.value,"onUpdate:modelValue":u[17]||=e=>He.value=e,"course-name":Ue.value?.title||``,"signin-code":We.value},null,8,[`modelValue`,`course-name`,`signin-code`]),r(w,{modelValue:Re.value,"onUpdate:modelValue":u[21]||=e=>Re.value=e,title:`活动报名与签到:${V.value?.title||``}`,width:`960px`,top:`5vh`,class:`signup-dialog`},{default:c(()=>[l(`div`,je,[l(`div`,Me,[H.value.length?(i(),e(`div`,Ne,[(i(!0),e(d,null,f(H.value,e=>(i(),m(h,{key:e.id,size:`small`,type:q.value===e.id?`primary`:`default`,onClick:t=>lt(e.id)},{default:c(()=>[o(p(Z(e)),1)]),_:2},1032,[`type`,`onClick`]))),128))])):(i(),e(`div`,Pe,`暂无场次,请先在活动中添加场次`)),r(h,{disabled:!H.value.length,onClick:ht},{default:c(()=>[...u[40]||=[o(`导出`,-1)]]),_:1},8,[`disabled`])])]),l(`div`,Fe,[r(g,{modelValue:G.value,"onUpdate:modelValue":u[18]||=e=>G.value=e,clearable:``,placeholder:`搜索姓名、手机、公司…`,style:{width:`220px`},onKeyup:ne(ut,[`enter`])},null,8,[`modelValue`]),r(v,{modelValue:K.value,"onUpdate:modelValue":u[19]||=e=>K.value=e,clearable:``,placeholder:`签到状态`,style:{width:`120px`}},{default:c(()=>[r(_,{label:`已签到`,value:1}),r(_,{label:`未签到`,value:0})]),_:1},8,[`modelValue`]),r(h,{type:`primary`,onClick:ut},{default:c(()=>[...u[41]||=[o(`搜索`,-1)]]),_:1}),r(h,{onClick:dt},{default:c(()=>[...u[42]||=[o(`重置`,-1)]]),_:1})]),r(b,{data:ze.value,size:`small`,style:{"margin-top":`12px`}},{default:c(()=>[r(y,{prop:`name`,label:`姓名`,width:`100`}),r(y,{prop:`mobile`,label:`手机`,width:`130`}),r(y,{prop:`company`,label:`公司`,"min-width":`120`,"show-overflow-tooltip":``}),r(y,{label:`报名时间`,width:`170`},{default:c(({row:e})=>[o(p(X(e.signed_up_at)),1)]),_:1}),r(y,{label:`签到状态`,width:`100`},{default:c(({row:t})=>[Q()?(i(),e(d,{key:0},[t.session_checked_in_at?(i(),m(T,{key:0,type:`success`,size:`small`},{default:c(()=>[...u[43]||=[o(`已签到`,-1)]]),_:1})):(i(),m(T,{key:1,type:`info`,size:`small`},{default:c(()=>[...u[44]||=[o(`未签到`,-1)]]),_:1}))],64)):a(``,!0)]),_:1}),r(y,{label:`签到时间`,width:`170`},{default:c(({row:e})=>[o(p(Q()?X(e.session_checked_in_at):``),1)]),_:1}),r(y,{label:`操作`,width:`120`,fixed:`right`},{default:c(({row:e})=>[Q()&&!e.session_checked_in_at?(i(),m(h,{key:0,type:`primary`,link:``,onClick:t=>pt(e)},{default:c(()=>[...u[45]||=[o(` 手动补签 `,-1)]]),_:1},8,[`onClick`])):Q()&&e.session_checked_in_at?(i(),m(h,{key:1,type:`info`,link:``,disabled:``},{default:c(()=>[...u[46]||=[o(` 已完成 `,-1)]]),_:1})):a(``,!0),r(h,{type:`danger`,link:``,onClick:t=>ft(e)},{default:c(()=>[...u[47]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`]),l(`div`,Ie,[r(oe,{"current-page":W.value,"onUpdate:currentPage":u[20]||=e=>W.value=e,layout:`total, prev, pager, next`,total:U.value.total,"page-size":U.value.per_page,onCurrentChange:$},null,8,[`current-page`,`total`,`page-size`])])]),_:1},8,[`modelValue`,`title`]),r(w,{modelValue:J.value,"onUpdate:modelValue":u[23]||=e=>J.value=e,title:`${V.value?.title||``}报名表导出`,width:`720px`,"append-to-body":``},{footer:c(()=>[r(h,{onClick:u[22]||=e=>J.value=!1},{default:c(()=>[...u[50]||=[o(`关闭`,-1)]]),_:1})]),default:c(()=>[re((i(),m(b,{data:Ve.value,size:`small`},{default:c(()=>[r(y,{label:`场次`,"min-width":`140`},{default:c(({row:e})=>[o(p(Z(e.session)),1)]),_:1}),r(y,{prop:`signup_count`,label:`报名人数`,width:`100`}),r(y,{prop:`checked_in_count`,label:`已签到`,width:`90`}),r(y,{label:`报名导出`,width:`100`},{default:c(({row:e})=>[r(h,{type:`primary`,link:``,onClick:t=>gt(e)},{default:c(()=>[...u[48]||=[o(`导出报名`,-1)]]),_:1},8,[`onClick`])]),_:1}),r(y,{label:`签到导出`,width:`100`},{default:c(({row:e})=>[r(h,{type:`primary`,link:``,onClick:t=>_t(e)},{default:c(()=>[...u[49]||=[o(`导出签到`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`])),[[E,Be.value]])]),_:1},8,[`modelValue`,`title`])],64)}}}),[[`__scopeId`,`data-v-1730cf79`]]);export{k as default}; \ No newline at end of file diff --git a/public/admin/assets/activities-ByMS-EcA.js b/public/admin/assets/activities-dvEtD3Zu.js similarity index 91% rename from public/admin/assets/activities-ByMS-EcA.js rename to public/admin/assets/activities-dvEtD3Zu.js index b95b8ec..89b3689 100644 --- a/public/admin/assets/activities-ByMS-EcA.js +++ b/public/admin/assets/activities-dvEtD3Zu.js @@ -1 +1 @@ -import{r as e}from"./index-jhdMOnS8.js";async function t(t){let{data:n}=await e.get(`/admin/v1/activities`,{params:t});return n.data}async function n(t){let{data:n}=await e.get(`/admin/v1/activities/${t}`);return n.data}async function r(t){let{data:n}=await e.post(`/admin/v1/activities`,t);return n.data}async function i(t,n){let{data:r}=await e.put(`/admin/v1/activities/${t}`,n);return r}async function a(t){let{data:n}=await e.delete(`/admin/v1/activities/${t}`);return n}async function o(t){let{data:n}=await e.get(`/admin/v1/activities/${t}/sessions`);return n.data.items}async function s(t,n){let{data:r}=await e.post(`/admin/v1/activities/${t}/sessions`,n);return r.data}async function c(t,n,r){let{data:i}=await e.put(`/admin/v1/activities/${t}/sessions/${n}`,r);return i}async function l(t,n){let{data:r}=await e.delete(`/admin/v1/activities/${t}/sessions/${n}`);return r}async function u(t,n){let{data:r}=await e.get(`/admin/v1/activities/${t}/signups`,{params:n});return r.data}async function d(e,t={}){let n=1,r=[];for(;;){let i=await u(e,{...t,page:n,page_size:200});if(r.push(...i.items),n>=i.meta.last_page||i.items.length===0)break;n+=1}return r}async function f(t,n){let{data:r}=await e.delete(`/admin/v1/activities/${t}/signups/${n}`);return r}async function p(t,n,r){let{data:i}=await e.post(`/admin/v1/activities/${t}/signups/${n}/checkin`,r);return i}export{l as a,n as c,d,i as f,a as i,o as l,r as n,f as o,c as p,s as r,t as s,p as t,u}; \ No newline at end of file +import{r as e}from"./index-D3i1HG2q.js";async function t(t){let{data:n}=await e.get(`/admin/v1/activities`,{params:t});return n.data}async function n(t){let{data:n}=await e.get(`/admin/v1/activities/${t}`);return n.data}async function r(t){let{data:n}=await e.post(`/admin/v1/activities`,t);return n.data}async function i(t,n){let{data:r}=await e.put(`/admin/v1/activities/${t}`,n);return r}async function a(t){let{data:n}=await e.delete(`/admin/v1/activities/${t}`);return n}async function o(t){let{data:n}=await e.get(`/admin/v1/activities/${t}/sessions`);return n.data.items}async function s(t,n){let{data:r}=await e.post(`/admin/v1/activities/${t}/sessions`,n);return r.data}async function c(t,n,r){let{data:i}=await e.put(`/admin/v1/activities/${t}/sessions/${n}`,r);return i}async function l(t,n){let{data:r}=await e.delete(`/admin/v1/activities/${t}/sessions/${n}`);return r}async function u(t,n){let{data:r}=await e.get(`/admin/v1/activities/${t}/signups`,{params:n});return r.data}async function d(e,t={}){let n=1,r=[];for(;;){let i=await u(e,{...t,page:n,page_size:200});if(r.push(...i.items),n>=i.meta.last_page||i.items.length===0)break;n+=1}return r}async function f(t,n){let{data:r}=await e.delete(`/admin/v1/activities/${t}/signups/${n}`);return r}async function p(t,n,r){let{data:i}=await e.post(`/admin/v1/activities/${t}/signups/${n}/checkin`,r);return i}export{l as a,n as c,d,i as f,a as i,o as l,r as n,f as o,c as p,s as r,t as s,p as t,u}; \ No newline at end of file diff --git a/public/admin/assets/assets-CEyD64oq.js b/public/admin/assets/assets-CxiSHyud.js similarity index 94% rename from public/admin/assets/assets-CEyD64oq.js rename to public/admin/assets/assets-CxiSHyud.js index 6102214..6232e42 100644 --- a/public/admin/assets/assets-CEyD64oq.js +++ b/public/admin/assets/assets-CxiSHyud.js @@ -1 +1 @@ -import{r as e}from"./index-jhdMOnS8.js";async function t(t){let{data:n}=await e.get(`/admin/v1/universities`,{params:t});return n.data}async function n(t){let{data:n}=await e.post(`/admin/v1/universities`,t);return n.data}async function r(t,n){let{data:r}=await e.put(`/admin/v1/universities/${t}`,n);return r.data}async function i(t){let{data:n}=await e.delete(`/admin/v1/universities/${t}`);return n}async function a(t){let{data:n}=await e.get(`/admin/v1/papers`,{params:t});return n.data}async function o(){let{data:t}=await e.get(`/admin/v1/papers/filter-options`);return t.data}async function s(t){let{data:n}=await e.get(`/admin/v1/papers/${t}`);return n.data}async function c(t){let{data:n}=await e.delete(`/admin/v1/papers/${t}`);return n}async function l(t,n){let{data:r}=await e.post(`/admin/v1/papers/${t}/teachers`,{teacher_ids:n});return r}async function u(t){let{data:n}=await e.post(`/admin/v1/crawl-jobs/resolve-url`,t);return n.data}async function d(t){let{data:n}=await e.post(`/admin/v1/crawl-jobs`,t,{timeout:3e5});return n.data}async function f(t){let{data:n}=await e.get(`/admin/v1/crawl-jobs/${t}`);return n.data}async function p(t,n){let{data:r}=await e.get(`/admin/v1/crawl-jobs/${t}/items`,{params:n});return r.data}async function m(e,t){let n=[],r=1;for(;;){let i=await p(e,{...t,page:r,page_size:200});if(n.push(...i.items),r>=i.meta.last_page||i.items.length===0)break;r+=1}return n}async function h(t,n){let{data:r}=await e.post(`/admin/v1/crawl-jobs/${t}/import`,n);return r.data}async function g(){let{data:t}=await e.get(`/admin/v1/radar-map`);return t.data}export{m as a,o as c,t as d,h as f,r as h,i,a as l,d as m,n,f as o,u as p,c as r,s,l as t,g as u}; \ No newline at end of file +import{r as e}from"./index-D3i1HG2q.js";async function t(t){let{data:n}=await e.get(`/admin/v1/universities`,{params:t});return n.data}async function n(t){let{data:n}=await e.post(`/admin/v1/universities`,t);return n.data}async function r(t,n){let{data:r}=await e.put(`/admin/v1/universities/${t}`,n);return r.data}async function i(t){let{data:n}=await e.delete(`/admin/v1/universities/${t}`);return n}async function a(t){let{data:n}=await e.get(`/admin/v1/papers`,{params:t});return n.data}async function o(){let{data:t}=await e.get(`/admin/v1/papers/filter-options`);return t.data}async function s(t){let{data:n}=await e.get(`/admin/v1/papers/${t}`);return n.data}async function c(t){let{data:n}=await e.delete(`/admin/v1/papers/${t}`);return n}async function l(t,n){let{data:r}=await e.post(`/admin/v1/papers/${t}/teachers`,{teacher_ids:n});return r}async function u(t){let{data:n}=await e.post(`/admin/v1/crawl-jobs/resolve-url`,t);return n.data}async function d(t){let{data:n}=await e.post(`/admin/v1/crawl-jobs`,t,{timeout:3e5});return n.data}async function f(t){let{data:n}=await e.get(`/admin/v1/crawl-jobs/${t}`);return n.data}async function p(t,n){let{data:r}=await e.get(`/admin/v1/crawl-jobs/${t}/items`,{params:n});return r.data}async function m(e,t){let n=[],r=1;for(;;){let i=await p(e,{...t,page:r,page_size:200});if(n.push(...i.items),r>=i.meta.last_page||i.items.length===0)break;r+=1}return n}async function h(t,n){let{data:r}=await e.post(`/admin/v1/crawl-jobs/${t}/import`,n);return r.data}async function g(){let{data:t}=await e.get(`/admin/v1/radar-map`);return t.data}export{m as a,o as c,t as d,h as f,r as h,i,a as l,d as m,n,f as o,u as p,c as r,s,l as t,g as u}; \ No newline at end of file diff --git a/public/admin/assets/audit-logs-DR4n46wf.js b/public/admin/assets/audit-logs-BGK_WIZW.js similarity index 97% rename from public/admin/assets/audit-logs-DR4n46wf.js rename to public/admin/assets/audit-logs-BGK_WIZW.js index c144a6e..4746930 100644 --- a/public/admin/assets/audit-logs-DR4n46wf.js +++ b/public/admin/assets/audit-logs-BGK_WIZW.js @@ -1 +1 @@ -import{C as e,D as t,E as n,G as r,T as i,X as a,Y as o,at as s,b as c,d as l,ht as u,ot as d,x as f}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{r as p}from"./index-jhdMOnS8.js";import{t as m}from"./usePageLoad-DFTLo_Lv.js";async function h(e){let{data:t}=await p.get(`/admin/v1/operation-logs`,{params:e});return t.data}var g={class:`list-page`},_={class:`list-filter-bar`},v={class:`list-pager`},y=t({__name:`index`,setup(t){let p=u(!1),y=u([]),b=u({current_page:1,per_page:20,total:0}),x=u(1),S=u(``),C=u(``),w=u(``);async function T(){p.value=!0;try{let e=await h({page:x.value,page_size:b.value.per_page,keyword:S.value||void 0,from:C.value||void 0,to:w.value||void 0});y.value=e.items,b.value=e.meta}finally{p.value=!1}}function E(){x.value=1,T()}function D(){S.value=``,C.value=``,w.value=``,x.value=1,T()}return m(T),(t,u)=>{let m=o(`el-input`),h=o(`el-date-picker`),O=o(`el-button`),k=o(`el-table-column`),A=o(`el-table`),j=o(`el-pagination`),M=o(`el-card`),N=a(`loading`);return r(),e(`div`,g,[u[6]||=c(`div`,{class:`page-header`},[c(`h1`,{class:`page-title`},`操作日志`)],-1),n(M,{shadow:`never`,class:`admin-list-card`},{default:s(()=>[c(`div`,_,[n(m,{modelValue:S.value,"onUpdate:modelValue":u[0]||=e=>S.value=e,placeholder:`接口路径/操作人`,clearable:``,class:`filter-search`,onKeyup:l(E,[`enter`])},null,8,[`modelValue`]),n(h,{modelValue:C.value,"onUpdate:modelValue":u[1]||=e=>C.value=e,type:`datetime`,placeholder:`开始时间`,"value-format":`YYYY-MM-DD HH:mm:ss`,style:{width:`190px`}},null,8,[`modelValue`]),n(h,{modelValue:w.value,"onUpdate:modelValue":u[2]||=e=>w.value=e,type:`datetime`,placeholder:`结束时间`,"value-format":`YYYY-MM-DD HH:mm:ss`,style:{width:`190px`}},null,8,[`modelValue`]),n(O,{type:`primary`,onClick:E},{default:s(()=>[...u[4]||=[i(`搜索`,-1)]]),_:1}),n(O,{onClick:D},{default:s(()=>[...u[5]||=[i(`重置`,-1)]]),_:1})]),d((r(),f(A,{data:y.value,"row-key":`id`},{default:s(()=>[n(k,{prop:`operated_at`,label:`操作时间`,width:`180`}),n(k,{prop:`operator_name`,label:`操作人`,width:`120`}),n(k,{prop:`http_method`,label:`方法`,width:`80`}),n(k,{prop:`api_path`,label:`接口`,"min-width":`220`,"show-overflow-tooltip":``}),n(k,{prop:`action_label`,label:`操作项`,"min-width":`160`,"show-overflow-tooltip":``}),n(k,{prop:`ip`,label:`IP`,width:`140`}),n(k,{prop:`response_code`,label:`状态码`,width:`90`,align:`center`}),n(k,{prop:`duration_ms`,label:`耗时ms`,width:`90`,align:`center`})]),_:1},8,[`data`])),[[N,p.value]]),c(`div`,v,[n(j,{"current-page":x.value,"onUpdate:currentPage":u[3]||=e=>x.value=e,layout:`total, prev, pager, next`,total:b.value.total,"page-size":b.value.per_page,onCurrentChange:T},null,8,[`current-page`,`total`,`page-size`])])]),_:1})])}}});export{y as default}; \ No newline at end of file +import{C as e,D as t,E as n,G as r,T as i,X as a,Y as o,at as s,b as c,d as l,ht as u,ot as d,x as f}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{r as p}from"./index-D3i1HG2q.js";import{t as m}from"./usePageLoad-DFTLo_Lv.js";async function h(e){let{data:t}=await p.get(`/admin/v1/operation-logs`,{params:e});return t.data}var g={class:`list-page`},_={class:`list-filter-bar`},v={class:`list-pager`},y=t({__name:`index`,setup(t){let p=u(!1),y=u([]),b=u({current_page:1,per_page:20,total:0}),x=u(1),S=u(``),C=u(``),w=u(``);async function T(){p.value=!0;try{let e=await h({page:x.value,page_size:b.value.per_page,keyword:S.value||void 0,from:C.value||void 0,to:w.value||void 0});y.value=e.items,b.value=e.meta}finally{p.value=!1}}function E(){x.value=1,T()}function D(){S.value=``,C.value=``,w.value=``,x.value=1,T()}return m(T),(t,u)=>{let m=o(`el-input`),h=o(`el-date-picker`),O=o(`el-button`),k=o(`el-table-column`),A=o(`el-table`),j=o(`el-pagination`),M=o(`el-card`),N=a(`loading`);return r(),e(`div`,g,[u[6]||=c(`div`,{class:`page-header`},[c(`h1`,{class:`page-title`},`操作日志`)],-1),n(M,{shadow:`never`,class:`admin-list-card`},{default:s(()=>[c(`div`,_,[n(m,{modelValue:S.value,"onUpdate:modelValue":u[0]||=e=>S.value=e,placeholder:`接口路径/操作人`,clearable:``,class:`filter-search`,onKeyup:l(E,[`enter`])},null,8,[`modelValue`]),n(h,{modelValue:C.value,"onUpdate:modelValue":u[1]||=e=>C.value=e,type:`datetime`,placeholder:`开始时间`,"value-format":`YYYY-MM-DD HH:mm:ss`,style:{width:`190px`}},null,8,[`modelValue`]),n(h,{modelValue:w.value,"onUpdate:modelValue":u[2]||=e=>w.value=e,type:`datetime`,placeholder:`结束时间`,"value-format":`YYYY-MM-DD HH:mm:ss`,style:{width:`190px`}},null,8,[`modelValue`]),n(O,{type:`primary`,onClick:E},{default:s(()=>[...u[4]||=[i(`搜索`,-1)]]),_:1}),n(O,{onClick:D},{default:s(()=>[...u[5]||=[i(`重置`,-1)]]),_:1})]),d((r(),f(A,{data:y.value,"row-key":`id`},{default:s(()=>[n(k,{prop:`operated_at`,label:`操作时间`,width:`180`}),n(k,{prop:`operator_name`,label:`操作人`,width:`120`}),n(k,{prop:`http_method`,label:`方法`,width:`80`}),n(k,{prop:`api_path`,label:`接口`,"min-width":`220`,"show-overflow-tooltip":``}),n(k,{prop:`action_label`,label:`操作项`,"min-width":`160`,"show-overflow-tooltip":``}),n(k,{prop:`ip`,label:`IP`,width:`140`}),n(k,{prop:`response_code`,label:`状态码`,width:`90`,align:`center`}),n(k,{prop:`duration_ms`,label:`耗时ms`,width:`90`,align:`center`})]),_:1},8,[`data`])),[[N,p.value]]),c(`div`,v,[n(j,{"current-page":x.value,"onUpdate:currentPage":u[3]||=e=>x.value=e,layout:`total, prev, pager, next`,total:b.value.total,"page-size":b.value.per_page,onCurrentChange:T},null,8,[`current-page`,`total`,`page-size`])])]),_:1})])}}});export{y as default}; \ No newline at end of file diff --git a/public/admin/assets/banners-CBylDnQD.js b/public/admin/assets/banners-BmFq1VCs.js similarity index 97% rename from public/admin/assets/banners-CBylDnQD.js rename to public/admin/assets/banners-BmFq1VCs.js index 3baa786..fc12ac5 100644 --- a/public/admin/assets/banners-CBylDnQD.js +++ b/public/admin/assets/banners-BmFq1VCs.js @@ -1 +1 @@ -import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as s,Xt as c,Y as l,at as u,b as d,d as ee,ht as f,m as p,ot as te,q as m,tn as ne,x as h}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as g,l as _,r as v,s as y}from"./index-jhdMOnS8.js";import{t as b}from"./vue-quill.snow-CU-IQtel.js";import{t as x}from"./usePageLoad-DFTLo_Lv.js";import{s as S}from"./activities-ByMS-EcA.js";import{l as C}from"./courses-DjCB_SCT.js";import{t as w}from"./upload-DS3tvR-r.js";import{r as T}from"./admin-list-DjncsyJC.js";async function E(e){let{data:t}=await v.get(`/admin/v1/banners`,{params:e});return t.data}async function D(e){let{data:t}=await v.get(`/admin/v1/banners/${e}`);return t.data}async function O(e){let{data:t}=await v.post(`/admin/v1/banners`,e);return t.data}async function k(e,t){let{data:n}=await v.put(`/admin/v1/banners/${e}`,t);return n.data}async function A(e){let{data:t}=await v.delete(`/admin/v1/banners/${e}`);return t}var re={class:`list-page`},j={class:`page-header`},ie={class:`list-filter-bar`},ae={key:1,class:`text-mute`},oe={class:`table-row-actions`},se={class:`list-pager`},ce={class:`upload-row`},le={key:0,class:`thumb-preview`},M=[`src`],N={class:`quill-wrap`},P=y(n({__name:`index`,setup(n){let v=[[`bold`,`italic`,`underline`],[{header:[2,3,!1]}],[{list:`ordered`},{list:`bullet`}],[`link`],[`clean`]],y=[{value:`course`,label:`课程`},{value:`activity`,label:`活动`},{value:`custom`,label:`自定义`}],P=f(!1),F=f(!1),I=f([]),L=f({current_page:1,per_page:20,total:0}),R=f(1),z=f(``),B=f(``),V=f(``),H=f(!1),U=f(null),W=f({type:`course`,course_id:void 0,activity_id:void 0,title:``,cover_url:``,content_html:``,sort:0,status:1}),G=f([]),K=f([]),q=f(!1),J=f(!1);async function Y(){P.value=!0;try{let e={page:R.value,page_size:L.value.per_page};z.value&&(e.keyword=z.value),B.value&&(e.type=B.value),V.value!==``&&(e.status=V.value);let t=await E(e);I.value=t.items,L.value=t.meta}finally{P.value=!1}}function X(){R.value=1,Y()}function ue(){z.value=``,B.value=``,V.value=``,R.value=1,Y()}async function Z(e=``){q.value=!0;try{G.value=(await C({keyword:e,page:1,page_size:30})).items.map(e=>({id:e.id,title:e.title}))}finally{q.value=!1}}async function Q(e=``){J.value=!0;try{K.value=(await S({keyword:e,page:1,page_size:30})).items.map(e=>({id:e.id,title:e.title}))}finally{J.value=!1}}function de(e){W.value.course_id=void 0,W.value.activity_id=void 0,W.value.title=``,W.value.cover_url=``,W.value.content_html=``,e===`course`&&Z(),e===`activity`&&Q()}function fe(){U.value=null,W.value={type:`course`,course_id:void 0,activity_id:void 0,title:``,cover_url:``,content_html:``,sort:0,status:1},G.value=[],K.value=[],H.value=!0,Z()}async function pe(e){U.value=e;let t=await D(e.id);W.value={type:t.type,course_id:t.course_id??void 0,activity_id:t.activity_id??void 0,title:t.title||``,cover_url:t.cover_url||``,content_html:t.content_html||``,sort:t.sort,status:t.status},t.type===`course`&&t.course_id&&(G.value=[{id:t.course_id,title:t.course_title||`#${t.course_id}`}]),t.type===`activity`&&t.activity_id&&(K.value=[{id:t.activity_id,title:t.activity_title||`#${t.activity_id}`}]),H.value=!0,t.type===`course`&&Z(),t.type===`activity`&&Q()}function $(){if(W.value.type===`course`&&!W.value.course_id)return _.warning(`请选择课程`),!1;if(W.value.type===`activity`&&!W.value.activity_id)return _.warning(`请选择活动`),!1;if(W.value.type===`custom`){if(!W.value.title.trim())return _.warning(`请填写标题`),!1;if(!W.value.cover_url)return _.warning(`请上传封面图`),!1}return!0}async function me(){if(!$())return;let e={type:W.value.type,sort:W.value.sort,status:W.value.status,course_id:W.value.type===`course`?W.value.course_id:null,activity_id:W.value.type===`activity`?W.value.activity_id:null,title:W.value.type===`custom`?W.value.title.trim():null,cover_url:W.value.type===`custom`?W.value.cover_url:null,content_html:W.value.type===`custom`&&W.value.content_html?.replace(/<[^>]+>/g,``).trim()?W.value.content_html:null};F.value=!0;try{U.value?await k(U.value.id,e):await O(e),_.success(`已保存`),H.value=!1,await Y()}finally{F.value=!1}}async function he(e){await g.confirm(`确定删除 Banner「${e.summary||e.id}」?`,`提示`,{type:`warning`}),await A(e.id),_.success(`已删除`),await Y()}async function ge(e){let t=e.file,n=t instanceof File?t:t.raw;if(!n){e.onError?.(Error(`no file`));return}try{let t=await w(n);W.value.cover_url=t.url,_.success(`封面上传成功`),e.onSuccess?.({})}catch{_.error(`封面上传失败`),e.onError?.(Error(`upload failed`))}}return x(Y),(n,f)=>{let g=l(`el-button`),_=l(`el-input`),x=l(`el-option`),S=l(`el-select`),C=l(`el-table-column`),w=l(`el-image`),E=l(`el-table`),D=l(`el-pagination`),O=l(`el-card`),k=l(`el-form-item`),A=l(`el-col`),$=l(`el-input-number`),_e=l(`el-switch`),ve=l(`el-row`),ye=l(`el-upload`),be=l(`el-form`),xe=l(`el-dialog`),Se=s(`loading`);return i(),e(p,null,[d(`div`,re,[d(`div`,j,[f[15]||=d(`h1`,{class:`page-title`},`Banner图管理`,-1),r(g,{type:`primary`,size:`small`,class:`btn-create`,onClick:fe},{default:u(()=>[...f[14]||=[o(`新增 Banner`,-1)]]),_:1})]),r(O,{shadow:`never`,class:`admin-list-card`},{default:u(()=>[d(`div`,ie,[r(_,{modelValue:z.value,"onUpdate:modelValue":f[0]||=e=>z.value=e,placeholder:`搜索标题、课程、活动…`,clearable:``,class:`filter-search`,onKeyup:ee(X,[`enter`])},null,8,[`modelValue`]),r(S,{modelValue:B.value,"onUpdate:modelValue":f[1]||=e=>B.value=e,clearable:``,placeholder:`类型`,class:`filter-select`},{default:u(()=>[(i(),e(p,null,m(y,e=>r(x,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`]),r(S,{modelValue:V.value,"onUpdate:modelValue":f[2]||=e=>V.value=e,clearable:``,placeholder:`状态`,class:`filter-select`},{default:u(()=>[r(x,{label:`启用`,value:1}),r(x,{label:`停用`,value:0})]),_:1},8,[`modelValue`]),r(g,{type:`primary`,onClick:X},{default:u(()=>[...f[16]||=[o(`搜索`,-1)]]),_:1}),r(g,{onClick:ue},{default:u(()=>[...f[17]||=[o(`重置`,-1)]]),_:1})]),te((i(),h(E,{data:I.value,"row-key":`id`},{default:u(()=>[r(C,{prop:`type_label`,label:`类型`,width:`90`}),r(C,{prop:`summary`,label:`展示内容`,"min-width":`200`,"show-overflow-tooltip":``}),r(C,{label:`封面`,width:`100`,align:`center`},{default:u(({row:t})=>[t.type===`custom`&&t.cover_url?(i(),h(w,{key:0,src:t.cover_url,"preview-src-list":[t.cover_url],fit:`cover`,class:`list-cover-thumb`,"preview-teleported":``},null,8,[`src`,`preview-src-list`])):(i(),e(`span`,ae,`—`))]),_:1}),r(C,{prop:`sort`,label:`排序`,width:`80`,align:`center`}),r(C,{label:`状态`,width:`90`,align:`center`},{default:u(({row:e})=>[d(`span`,{class:c([`status-badge`,t(T)(e.status)])},ne(e.status===1?`启用`:`停用`),3)]),_:1}),r(C,{label:`操作`,width:`160`,fixed:`right`},{default:u(({row:e})=>[d(`div`,oe,[r(g,{class:`btn-action-secondary`,onClick:t=>pe(e)},{default:u(()=>[...f[18]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),r(g,{class:`btn-action-secondary`,onClick:t=>he(e)},{default:u(()=>[...f[19]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[Se,P.value]]),d(`div`,se,[r(D,{"current-page":R.value,"onUpdate:currentPage":f[3]||=e=>R.value=e,layout:`total, prev, pager, next`,total:L.value.total,"page-size":L.value.per_page,onCurrentChange:Y},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),r(xe,{modelValue:H.value,"onUpdate:modelValue":f[13]||=e=>H.value=e,title:U.value?`编辑 Banner`:`新增 Banner`,width:`960px`,top:`4vh`,"destroy-on-close":``,class:`banner-dialog`},{footer:u(()=>[r(g,{onClick:f[12]||=e=>H.value=!1},{default:u(()=>[...f[22]||=[o(`取消`,-1)]]),_:1}),r(g,{type:`primary`,loading:F.value,onClick:me},{default:u(()=>[...f[23]||=[o(`保存`,-1)]]),_:1},8,[`loading`])]),default:u(()=>[r(be,{"label-position":`top`,class:`banner-form`},{default:u(()=>[r(ve,{gutter:16},{default:u(()=>[r(A,{span:8},{default:u(()=>[r(k,{label:`类型`,required:``},{default:u(()=>[r(S,{modelValue:W.value.type,"onUpdate:modelValue":f[4]||=e=>W.value.type=e,style:{width:`100%`},onChange:de},{default:u(()=>[(i(),e(p,null,m(y,e=>r(x,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(A,{span:8},{default:u(()=>[r(k,{label:`排序`,required:``},{default:u(()=>[r($,{modelValue:W.value.sort,"onUpdate:modelValue":f[5]||=e=>W.value.sort=e,min:0,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),r(A,{span:8},{default:u(()=>[r(k,{label:`状态`},{default:u(()=>[r(_e,{modelValue:W.value.status,"onUpdate:modelValue":f[6]||=e=>W.value.status=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1}),W.value.type===`course`?(i(),h(k,{key:0,label:`选择课程`,required:``},{default:u(()=>[r(S,{modelValue:W.value.course_id,"onUpdate:modelValue":f[7]||=e=>W.value.course_id=e,filterable:``,remote:``,"reserve-keyword":``,placeholder:`搜索课程名称或编号`,"remote-method":Z,loading:q.value,style:{width:`100%`}},{default:u(()=>[(i(!0),e(p,null,m(G.value,e=>(i(),h(x,{key:e.id,label:e.title,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`loading`])]),_:1})):a(``,!0),W.value.type===`activity`?(i(),h(k,{key:1,label:`选择活动`,required:``},{default:u(()=>[r(S,{modelValue:W.value.activity_id,"onUpdate:modelValue":f[8]||=e=>W.value.activity_id=e,filterable:``,remote:``,"reserve-keyword":``,placeholder:`搜索活动名称`,"remote-method":Q,loading:J.value,style:{width:`100%`}},{default:u(()=>[(i(!0),e(p,null,m(K.value,e=>(i(),h(x,{key:e.id,label:e.title,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`loading`])]),_:1})):a(``,!0),W.value.type===`custom`?(i(),e(p,{key:2},[r(k,{label:`标题`,required:``},{default:u(()=>[r(_,{modelValue:W.value.title,"onUpdate:modelValue":f[9]||=e=>W.value.title=e,placeholder:`请输入 Banner 标题`},null,8,[`modelValue`])]),_:1}),r(k,{label:`封面图`,required:``},{default:u(()=>[d(`div`,ce,[r(ye,{"show-file-list":!1,accept:`image/*`,"http-request":ge},{default:u(()=>[r(g,{type:`primary`,plain:``,size:`small`},{default:u(()=>[...f[20]||=[o(`上传图片`,-1)]]),_:1})]),_:1}),W.value.cover_url?(i(),h(g,{key:0,size:`small`,onClick:f[10]||=e=>W.value.cover_url=``},{default:u(()=>[...f[21]||=[o(`移除`,-1)]]),_:1})):a(``,!0)]),W.value.cover_url?(i(),e(`div`,le,[d(`img`,{src:W.value.cover_url,alt:`封面`},null,8,M)])):a(``,!0)]),_:1}),r(k,{label:`内容`,class:`intro-form-item`},{default:u(()=>[d(`div`,N,[r(t(b),{content:W.value.content_html,"onUpdate:content":f[11]||=e=>W.value.content_html=e,"content-type":`html`,theme:`snow`,toolbar:v},null,8,[`content`])])]),_:1})],64)):a(``,!0)]),_:1})]),_:1},8,[`modelValue`,`title`])],64)}}}),[[`__scopeId`,`data-v-cc2d69e5`]]);export{P as default}; \ No newline at end of file +import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as s,Xt as c,Y as l,at as u,b as d,d as ee,ht as f,m as p,ot as te,q as m,tn as ne,x as h}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as g,l as _,r as v,s as y}from"./index-D3i1HG2q.js";import{t as b}from"./vue-quill.snow-CU-IQtel.js";import{t as x}from"./usePageLoad-DFTLo_Lv.js";import{s as S}from"./activities-dvEtD3Zu.js";import{l as C}from"./courses-CeyGHp9D.js";import{t as w}from"./upload-CKdHvIne.js";import{r as T}from"./admin-list-DjncsyJC.js";async function E(e){let{data:t}=await v.get(`/admin/v1/banners`,{params:e});return t.data}async function D(e){let{data:t}=await v.get(`/admin/v1/banners/${e}`);return t.data}async function O(e){let{data:t}=await v.post(`/admin/v1/banners`,e);return t.data}async function k(e,t){let{data:n}=await v.put(`/admin/v1/banners/${e}`,t);return n.data}async function A(e){let{data:t}=await v.delete(`/admin/v1/banners/${e}`);return t}var re={class:`list-page`},j={class:`page-header`},ie={class:`list-filter-bar`},ae={key:1,class:`text-mute`},oe={class:`table-row-actions`},se={class:`list-pager`},ce={class:`upload-row`},le={key:0,class:`thumb-preview`},M=[`src`],N={class:`quill-wrap`},P=y(n({__name:`index`,setup(n){let v=[[`bold`,`italic`,`underline`],[{header:[2,3,!1]}],[{list:`ordered`},{list:`bullet`}],[`link`],[`clean`]],y=[{value:`course`,label:`课程`},{value:`activity`,label:`活动`},{value:`custom`,label:`自定义`}],P=f(!1),F=f(!1),I=f([]),L=f({current_page:1,per_page:20,total:0}),R=f(1),z=f(``),B=f(``),V=f(``),H=f(!1),U=f(null),W=f({type:`course`,course_id:void 0,activity_id:void 0,title:``,cover_url:``,content_html:``,sort:0,status:1}),G=f([]),K=f([]),q=f(!1),J=f(!1);async function Y(){P.value=!0;try{let e={page:R.value,page_size:L.value.per_page};z.value&&(e.keyword=z.value),B.value&&(e.type=B.value),V.value!==``&&(e.status=V.value);let t=await E(e);I.value=t.items,L.value=t.meta}finally{P.value=!1}}function X(){R.value=1,Y()}function ue(){z.value=``,B.value=``,V.value=``,R.value=1,Y()}async function Z(e=``){q.value=!0;try{G.value=(await C({keyword:e,page:1,page_size:30})).items.map(e=>({id:e.id,title:e.title}))}finally{q.value=!1}}async function Q(e=``){J.value=!0;try{K.value=(await S({keyword:e,page:1,page_size:30})).items.map(e=>({id:e.id,title:e.title}))}finally{J.value=!1}}function de(e){W.value.course_id=void 0,W.value.activity_id=void 0,W.value.title=``,W.value.cover_url=``,W.value.content_html=``,e===`course`&&Z(),e===`activity`&&Q()}function fe(){U.value=null,W.value={type:`course`,course_id:void 0,activity_id:void 0,title:``,cover_url:``,content_html:``,sort:0,status:1},G.value=[],K.value=[],H.value=!0,Z()}async function pe(e){U.value=e;let t=await D(e.id);W.value={type:t.type,course_id:t.course_id??void 0,activity_id:t.activity_id??void 0,title:t.title||``,cover_url:t.cover_url||``,content_html:t.content_html||``,sort:t.sort,status:t.status},t.type===`course`&&t.course_id&&(G.value=[{id:t.course_id,title:t.course_title||`#${t.course_id}`}]),t.type===`activity`&&t.activity_id&&(K.value=[{id:t.activity_id,title:t.activity_title||`#${t.activity_id}`}]),H.value=!0,t.type===`course`&&Z(),t.type===`activity`&&Q()}function $(){if(W.value.type===`course`&&!W.value.course_id)return _.warning(`请选择课程`),!1;if(W.value.type===`activity`&&!W.value.activity_id)return _.warning(`请选择活动`),!1;if(W.value.type===`custom`){if(!W.value.title.trim())return _.warning(`请填写标题`),!1;if(!W.value.cover_url)return _.warning(`请上传封面图`),!1}return!0}async function me(){if(!$())return;let e={type:W.value.type,sort:W.value.sort,status:W.value.status,course_id:W.value.type===`course`?W.value.course_id:null,activity_id:W.value.type===`activity`?W.value.activity_id:null,title:W.value.type===`custom`?W.value.title.trim():null,cover_url:W.value.type===`custom`?W.value.cover_url:null,content_html:W.value.type===`custom`&&W.value.content_html?.replace(/<[^>]+>/g,``).trim()?W.value.content_html:null};F.value=!0;try{U.value?await k(U.value.id,e):await O(e),_.success(`已保存`),H.value=!1,await Y()}finally{F.value=!1}}async function he(e){await g.confirm(`确定删除 Banner「${e.summary||e.id}」?`,`提示`,{type:`warning`}),await A(e.id),_.success(`已删除`),await Y()}async function ge(e){let t=e.file,n=t instanceof File?t:t.raw;if(!n){e.onError?.(Error(`no file`));return}try{let t=await w(n);W.value.cover_url=t.url,_.success(`封面上传成功`),e.onSuccess?.({})}catch{_.error(`封面上传失败`),e.onError?.(Error(`upload failed`))}}return x(Y),(n,f)=>{let g=l(`el-button`),_=l(`el-input`),x=l(`el-option`),S=l(`el-select`),C=l(`el-table-column`),w=l(`el-image`),E=l(`el-table`),D=l(`el-pagination`),O=l(`el-card`),k=l(`el-form-item`),A=l(`el-col`),$=l(`el-input-number`),_e=l(`el-switch`),ve=l(`el-row`),ye=l(`el-upload`),be=l(`el-form`),xe=l(`el-dialog`),Se=s(`loading`);return i(),e(p,null,[d(`div`,re,[d(`div`,j,[f[15]||=d(`h1`,{class:`page-title`},`Banner图管理`,-1),r(g,{type:`primary`,size:`small`,class:`btn-create`,onClick:fe},{default:u(()=>[...f[14]||=[o(`新增 Banner`,-1)]]),_:1})]),r(O,{shadow:`never`,class:`admin-list-card`},{default:u(()=>[d(`div`,ie,[r(_,{modelValue:z.value,"onUpdate:modelValue":f[0]||=e=>z.value=e,placeholder:`搜索标题、课程、活动…`,clearable:``,class:`filter-search`,onKeyup:ee(X,[`enter`])},null,8,[`modelValue`]),r(S,{modelValue:B.value,"onUpdate:modelValue":f[1]||=e=>B.value=e,clearable:``,placeholder:`类型`,class:`filter-select`},{default:u(()=>[(i(),e(p,null,m(y,e=>r(x,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`]),r(S,{modelValue:V.value,"onUpdate:modelValue":f[2]||=e=>V.value=e,clearable:``,placeholder:`状态`,class:`filter-select`},{default:u(()=>[r(x,{label:`启用`,value:1}),r(x,{label:`停用`,value:0})]),_:1},8,[`modelValue`]),r(g,{type:`primary`,onClick:X},{default:u(()=>[...f[16]||=[o(`搜索`,-1)]]),_:1}),r(g,{onClick:ue},{default:u(()=>[...f[17]||=[o(`重置`,-1)]]),_:1})]),te((i(),h(E,{data:I.value,"row-key":`id`},{default:u(()=>[r(C,{prop:`type_label`,label:`类型`,width:`90`}),r(C,{prop:`summary`,label:`展示内容`,"min-width":`200`,"show-overflow-tooltip":``}),r(C,{label:`封面`,width:`100`,align:`center`},{default:u(({row:t})=>[t.type===`custom`&&t.cover_url?(i(),h(w,{key:0,src:t.cover_url,"preview-src-list":[t.cover_url],fit:`cover`,class:`list-cover-thumb`,"preview-teleported":``},null,8,[`src`,`preview-src-list`])):(i(),e(`span`,ae,`—`))]),_:1}),r(C,{prop:`sort`,label:`排序`,width:`80`,align:`center`}),r(C,{label:`状态`,width:`90`,align:`center`},{default:u(({row:e})=>[d(`span`,{class:c([`status-badge`,t(T)(e.status)])},ne(e.status===1?`启用`:`停用`),3)]),_:1}),r(C,{label:`操作`,width:`160`,fixed:`right`},{default:u(({row:e})=>[d(`div`,oe,[r(g,{class:`btn-action-secondary`,onClick:t=>pe(e)},{default:u(()=>[...f[18]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),r(g,{class:`btn-action-secondary`,onClick:t=>he(e)},{default:u(()=>[...f[19]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[Se,P.value]]),d(`div`,se,[r(D,{"current-page":R.value,"onUpdate:currentPage":f[3]||=e=>R.value=e,layout:`total, prev, pager, next`,total:L.value.total,"page-size":L.value.per_page,onCurrentChange:Y},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),r(xe,{modelValue:H.value,"onUpdate:modelValue":f[13]||=e=>H.value=e,title:U.value?`编辑 Banner`:`新增 Banner`,width:`960px`,top:`4vh`,"destroy-on-close":``,class:`banner-dialog`},{footer:u(()=>[r(g,{onClick:f[12]||=e=>H.value=!1},{default:u(()=>[...f[22]||=[o(`取消`,-1)]]),_:1}),r(g,{type:`primary`,loading:F.value,onClick:me},{default:u(()=>[...f[23]||=[o(`保存`,-1)]]),_:1},8,[`loading`])]),default:u(()=>[r(be,{"label-position":`top`,class:`banner-form`},{default:u(()=>[r(ve,{gutter:16},{default:u(()=>[r(A,{span:8},{default:u(()=>[r(k,{label:`类型`,required:``},{default:u(()=>[r(S,{modelValue:W.value.type,"onUpdate:modelValue":f[4]||=e=>W.value.type=e,style:{width:`100%`},onChange:de},{default:u(()=>[(i(),e(p,null,m(y,e=>r(x,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(A,{span:8},{default:u(()=>[r(k,{label:`排序`,required:``},{default:u(()=>[r($,{modelValue:W.value.sort,"onUpdate:modelValue":f[5]||=e=>W.value.sort=e,min:0,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),r(A,{span:8},{default:u(()=>[r(k,{label:`状态`},{default:u(()=>[r(_e,{modelValue:W.value.status,"onUpdate:modelValue":f[6]||=e=>W.value.status=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1}),W.value.type===`course`?(i(),h(k,{key:0,label:`选择课程`,required:``},{default:u(()=>[r(S,{modelValue:W.value.course_id,"onUpdate:modelValue":f[7]||=e=>W.value.course_id=e,filterable:``,remote:``,"reserve-keyword":``,placeholder:`搜索课程名称或编号`,"remote-method":Z,loading:q.value,style:{width:`100%`}},{default:u(()=>[(i(!0),e(p,null,m(G.value,e=>(i(),h(x,{key:e.id,label:e.title,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`loading`])]),_:1})):a(``,!0),W.value.type===`activity`?(i(),h(k,{key:1,label:`选择活动`,required:``},{default:u(()=>[r(S,{modelValue:W.value.activity_id,"onUpdate:modelValue":f[8]||=e=>W.value.activity_id=e,filterable:``,remote:``,"reserve-keyword":``,placeholder:`搜索活动名称`,"remote-method":Q,loading:J.value,style:{width:`100%`}},{default:u(()=>[(i(!0),e(p,null,m(K.value,e=>(i(),h(x,{key:e.id,label:e.title,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`loading`])]),_:1})):a(``,!0),W.value.type===`custom`?(i(),e(p,{key:2},[r(k,{label:`标题`,required:``},{default:u(()=>[r(_,{modelValue:W.value.title,"onUpdate:modelValue":f[9]||=e=>W.value.title=e,placeholder:`请输入 Banner 标题`},null,8,[`modelValue`])]),_:1}),r(k,{label:`封面图`,required:``},{default:u(()=>[d(`div`,ce,[r(ye,{"show-file-list":!1,accept:`image/*`,"http-request":ge},{default:u(()=>[r(g,{type:`primary`,plain:``,size:`small`},{default:u(()=>[...f[20]||=[o(`上传图片`,-1)]]),_:1})]),_:1}),W.value.cover_url?(i(),h(g,{key:0,size:`small`,onClick:f[10]||=e=>W.value.cover_url=``},{default:u(()=>[...f[21]||=[o(`移除`,-1)]]),_:1})):a(``,!0)]),W.value.cover_url?(i(),e(`div`,le,[d(`img`,{src:W.value.cover_url,alt:`封面`},null,8,M)])):a(``,!0)]),_:1}),r(k,{label:`内容`,class:`intro-form-item`},{default:u(()=>[d(`div`,N,[r(t(b),{content:W.value.content_html,"onUpdate:content":f[11]||=e=>W.value.content_html=e,"content-type":`html`,theme:`snow`,toolbar:v},null,8,[`content`])])]),_:1})],64)):a(``,!0)]),_:1})]),_:1},8,[`modelValue`,`title`])],64)}}}),[[`__scopeId`,`data-v-cc2d69e5`]]);export{P as default}; \ No newline at end of file diff --git a/public/admin/assets/courses-BzDRFiuu.js b/public/admin/assets/courses-B3VNk5Xm.js similarity index 99% rename from public/admin/assets/courses-BzDRFiuu.js rename to public/admin/assets/courses-B3VNk5Xm.js index 2acb8ef..a802da8 100644 --- a/public/admin/assets/courses-BzDRFiuu.js +++ b/public/admin/assets/courses-B3VNk5Xm.js @@ -1,4 +1,4 @@ -import{a as e,i as t,n,r,t as i}from"./rolldown-runtime-BYbx6iT9.js";import{$t as a,At as o,Bt as s,C as c,Ct as l,D as u,Dt as d,E as f,Et as p,Ft as m,G as h,Gt as g,Jt as _,Kt as v,Nt as y,Ot as b,Pt as x,Rt as S,S as C,T as w,Tt as T,Vt as E,Wt as ee,X as D,Xt as te,Y as O,Yt as k,at as A,b as j,d as ne,en as re,f as ie,ht as M,i as ae,kt as N,m as oe,nn as se,o as ce,ot as le,q as ue,qt as de,rt as fe,tn as pe,u as me,wt as he,x as P,y as ge,zt as _e}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as F,l as I,s as ve}from"./index-jhdMOnS8.js";import{t as ye}from"./vue-quill.snow-CU-IQtel.js";import{t as be}from"./usePageLoad-DFTLo_Lv.js";import{a as xe,c as Se,i as Ce,l as we,n as Te,o as Ee,r as De,s as Oe,t as ke,u as Ae}from"./courses-DjCB_SCT.js";import{n as je}from"./upload-DS3tvR-r.js";import{a as Me,i as Ne,o as Pe,s as Fe}from"./admin-list-DjncsyJC.js";import{f as Ie}from"./teachers-BIk-0G3l.js";import{a as Le,s as Re}from"./dict-BFb6lz5T.js";import{i as ze,n as Be,o as Ve,r as He,t as Ue}from"./csv-export-BctnjsYJ.js";import{a as We}from"./news-Cw3KnWmV.js";function Ge(e){Object.getOwnPropertySymbols(e).forEach(t=>{mi[t]=e[t]})}function Ke(e,t=``){return{type:0,source:t,children:e,helpers:new Set,components:[],directives:[],hoists:[],imports:[],cached:[],temps:0,codegenNode:void 0,loc:yi}}function qe(e,t,n,r,i,a,o,s=!1,c=!1,l=!1,u=yi){return e&&(s?(e.helper(Pr),e.helper(ot(e.inSSR,l))):e.helper(at(e.inSSR,l)),o&&e.helper(Kr)),{type:13,tag:t,props:n,children:r,patchFlag:i,dynamicProps:a,directives:o,isBlock:s,disableTracking:c,isComponent:l,loc:u}}function Je(e,t=yi){return{type:17,loc:t,elements:e}}function L(e,t=yi){return{type:15,loc:t,properties:e}}function R(e,t){return{type:16,loc:yi,key:v(e)?z(e,!0):e,value:t}}function z(e,t=!1,n=yi,r=0){return{type:4,loc:n,content:e,isStatic:t,constType:t?3:r}}function Ye(e,t){return{type:5,loc:t,content:v(e)?z(e,!1,t):e}}function Xe(e,t=yi){return{type:8,loc:t,children:e}}function B(e,t=[],n=yi){return{type:14,loc:n,callee:e,arguments:t}}function Ze(e,t=void 0,n=!1,r=!1,i=yi){return{type:18,params:e,returns:t,newline:n,isSlot:r,loc:i}}function V(e,t,n,r=!0){return{type:19,test:e,consequent:t,alternate:n,newline:r,loc:yi}}function Qe(e,t,n=!1,r=!1){return{type:20,index:e,value:t,needPauseTracking:n,inVOnce:r,needArraySpread:!1,loc:yi}}function $e(e){return{type:21,body:e,loc:yi}}function et(e){return{type:22,elements:e,loc:yi}}function tt(e,t,n){return{type:23,test:e,consequent:t,alternate:n,loc:yi}}function nt(e,t){return{type:24,left:e,right:t,loc:yi}}function rt(e){return{type:25,expressions:e,loc:yi}}function it(e){return{type:26,returns:e,loc:yi}}function at(e,t){return e||t?Lr:Rr}function ot(e,t){return e||t?Fr:Ir}function st(e,{helper:t,removeHelper:n,inSSR:r}){e.isBlock||(e.isBlock=!0,n(at(r,e.isComponent)),t(Pr),t(ot(r,e.isComponent)))}function ct(e){return e>=97&&e<=122||e>=65&&e<=90}function lt(e){return e===32||e===10||e===9||e===12||e===13}function ut(e){return e===47||e===62||lt(e)}function dt(e){let t=new Uint8Array(e.length);for(let n=0;n{mi[t]=e[t]})}function Ke(e,t=``){return{type:0,source:t,children:e,helpers:new Set,components:[],directives:[],hoists:[],imports:[],cached:[],temps:0,codegenNode:void 0,loc:yi}}function qe(e,t,n,r,i,a,o,s=!1,c=!1,l=!1,u=yi){return e&&(s?(e.helper(Pr),e.helper(ot(e.inSSR,l))):e.helper(at(e.inSSR,l)),o&&e.helper(Kr)),{type:13,tag:t,props:n,children:r,patchFlag:i,dynamicProps:a,directives:o,isBlock:s,disableTracking:c,isComponent:l,loc:u}}function Je(e,t=yi){return{type:17,loc:t,elements:e}}function L(e,t=yi){return{type:15,loc:t,properties:e}}function R(e,t){return{type:16,loc:yi,key:v(e)?z(e,!0):e,value:t}}function z(e,t=!1,n=yi,r=0){return{type:4,loc:n,content:e,isStatic:t,constType:t?3:r}}function Ye(e,t){return{type:5,loc:t,content:v(e)?z(e,!1,t):e}}function Xe(e,t=yi){return{type:8,loc:t,children:e}}function B(e,t=[],n=yi){return{type:14,loc:n,callee:e,arguments:t}}function Ze(e,t=void 0,n=!1,r=!1,i=yi){return{type:18,params:e,returns:t,newline:n,isSlot:r,loc:i}}function V(e,t,n,r=!0){return{type:19,test:e,consequent:t,alternate:n,newline:r,loc:yi}}function Qe(e,t,n=!1,r=!1){return{type:20,index:e,value:t,needPauseTracking:n,inVOnce:r,needArraySpread:!1,loc:yi}}function $e(e){return{type:21,body:e,loc:yi}}function et(e){return{type:22,elements:e,loc:yi}}function tt(e,t,n){return{type:23,test:e,consequent:t,alternate:n,loc:yi}}function nt(e,t){return{type:24,left:e,right:t,loc:yi}}function rt(e){return{type:25,expressions:e,loc:yi}}function it(e){return{type:26,returns:e,loc:yi}}function at(e,t){return e||t?Lr:Rr}function ot(e,t){return e||t?Fr:Ir}function st(e,{helper:t,removeHelper:n,inSSR:r}){e.isBlock||(e.isBlock=!0,n(at(r,e.isComponent)),t(Pr),t(ot(r,e.isComponent)))}function ct(e){return e>=97&&e<=122||e>=65&&e<=90}function lt(e){return e===32||e===10||e===9||e===12||e===13}function ut(e){return e===47||e===62||lt(e)}function dt(e){let t=new Uint8Array(e.length);for(let n=0;n{e&&Dt(e,t)});break;case`RestElement`:Dt(e.argument,t);break;case`AssignmentPattern`:Dt(e.left,t);break}return t}function Ot(e){return ji.includes(e.type)?Ot(e.expression):e}function kt(e){switch(e){case`Teleport`:case`teleport`:return Ar;case`Suspense`:case`suspense`:return jr;case`KeepAlive`:case`keep-alive`:return Mr;case`BaseTransition`:case`base-transition`:return Nr}}function At(e,t,n=t.length){return jt({offset:e.offset,line:e.line,column:e.column},t,n)}function jt(e,t,n=t.length){let r=0,i=-1;for(let e=0;ee.type===7&&e.name===`bind`&&(!e.arg||e.arg.type!==4||!e.arg.isStatic))}function Lt(e){return e.type===5||e.type===2}function Rt(e){return e.type===7&&e.name===`pre`}function zt(e){return e.type===7&&e.name===`slot`}function Bt(e){return e.type===1&&e.tagType===3}function Vt(e){return e.type===1&&e.tagType===2}function Ht(e,t=[]){if(e&&!v(e)&&e.type===14){let n=e.callee;if(!v(n)&&Ki.has(n))return Ht(e.arguments[0],t.concat(e))}return[e,t]}function Ut(e,t,n){let r,i=e.type===13?e.props:e.arguments[2],a=[],o;if(i&&!v(i)&&i.type===14){let e=Ht(i);i=e[0],a=e[1],o=a[a.length-1]}if(i==null||v(i))r=L([t]);else if(i.type===14){let e=i.arguments[0];!v(e)&&e.type===15?Wt(t,e)||e.properties.unshift(t):i.callee===ni?r=B(n.helper(Zr),[L([t]),i]):i.arguments.unshift(L([t])),!r&&(r=i)}else i.type===15?(Wt(t,i)||i.properties.unshift(t),r=i):(r=B(n.helper(Zr),[L([t]),i]),o&&o.callee===ti&&(o=a[a.length-2]));e.type===13?o?o.arguments[0]=r:e.props=r:o?o.arguments[0]=r:e.arguments[2]=r}function Wt(e,t){let n=!1;if(e.key.type===4){let r=e.key.content;n=t.properties.some(e=>e.key.type===4&&e.key.content===r)}return n}function Gt(e,t){return`_${t}_${e.replace(/[^\w]/g,(t,n)=>t===`-`?`_`:e.charCodeAt(n).toString())}`}function Kt(e,t){if(!e||Object.keys(t).length===0)return!1;switch(e.type){case 1:for(let n=0;nKt(e,t));case 11:return Kt(e.source,t)?!0:e.children.some(e=>Kt(e,t));case 9:return e.branches.some(e=>Kt(e,t));case 10:return Kt(e.condition,t)?!0:e.children.some(e=>Kt(e,t));case 4:return!e.isStatic&&Pi(e.content)&&!!t[e.content];case 8:return e.children.some(e=>s(e)&&Kt(e,t));case 5:case 12:return Kt(e.content,t);case 2:case 3:case 20:return!1;default:return!1}}function qt(e){return e.type===14&&e.callee===fi?e.arguments[1].returns:e}function Jt(e){for(let t=0;t{let i=t.start.offset+n;return gn(e,!1,fn(i,i+e.length),0,+!!r)},s={source:o(a.trim(),n.indexOf(a,i.length)),value:void 0,key:void 0,index:void 0,finalized:!1},c=i.trim().replace(oa,``).trim(),l=i.indexOf(c),u=c.match(aa);if(u){c=c.replace(aa,``).trim();let e=u[1].trim(),t;if(e&&(t=n.indexOf(e,l+c.length),s.key=o(e,t,!0)),u[2]){let r=u[2].trim();r&&(s.index=o(r,n.indexOf(r,s.key?t+e.length:l+c.length),!0))}}return c&&(s.value=o(c,l,!0)),s}function Qt(e,t){return Xi.slice(e,t)}function $t(e){ia.inSFCRoot&&(Zi.innerLoc=fn(e+1,e+1)),dn(Zi);let{tag:t,ns:n}=Zi;n===0&&U.isPreTag(t)&&ta++,U.isVoidTag(t)?tn(Zi,e):(G.unshift(Zi),(n===1||n===2)&&(ia.inXML=!0)),Zi=null}function en(e,t,n){{let t=G[0]&&G[0].tag;t!==`script`&&t!==`style`&&e.includes(`&`)&&(e=U.decodeEntities(e,!1))}let r=G[0]||Yi,i=r.children[r.children.length-1];i&&i.type===2?(i.content+=e,mn(i.loc,n)):r.children.push({type:2,content:e,loc:fn(t,n)})}function tn(e,t,n=!1){n?mn(e.loc,rn(t,60)):mn(e.loc,nn(t,62)+1),ia.inSFCRoot&&(e.children.length?e.innerLoc.end=N({},e.children[e.children.length-1].loc.end):e.innerLoc.end=N({},e.innerLoc.start),e.innerLoc.source=Qt(e.innerLoc.start.offset,e.innerLoc.end.offset));let{tag:r,ns:i,children:a}=e;if(na||(r===`slot`?e.tagType=2:an(e)?e.tagType=3:on(e)&&(e.tagType=1)),ia.inRCDATA||(e.children=cn(a)),i===0&&U.isIgnoreNewlineTag(r)){let e=a[0];e&&e.type===2&&(e.content=e.content.replace(/^\r?\n/,``))}i===0&&U.isPreTag(r)&&ta--,ra===e&&(na=ia.inVPre=!1,ra=null),ia.inXML&&(G[0]?G[0].ns:U.ns)===0&&(ia.inXML=!1);{let t=e.props;if(!ia.inSFCRoot&&pt(`COMPILER_NATIVE_TEMPLATE`,U)&&e.tag===`template`&&!an(e)){let t=G[0]||Yi,n=t.children.indexOf(e);t.children.splice(n,1,...e.children)}let n=t.find(e=>e.type===6&&e.name===`inline-template`);n&&mt(`COMPILER_INLINE_TEMPLATE`,U,n.loc)&&e.children.length&&(n.value={type:2,content:Qt(e.children[0].loc.start.offset,e.children[e.children.length-1].loc.end.offset),loc:n.loc})}}function nn(e,t){let n=e;for(;Xi.charCodeAt(n)!==t&&n=0;)n--;return n}function an({tag:e,props:t}){if(e===`template`){for(let e=0;e64&&e<91}function cn(e){let t=U.whitespace!==`preserve`,n=!1;for(let r=0;re.type!==3);return t.length===1&&t[0].type===1&&!Vt(t[0])?t[0]:null}function Sn(e,t,n,r=!1,i=!1){let{children:a}=e,o=[];for(let t=0;t0){if(e>=2){s.codegenNode.patchFlag=-1,o.push(s);continue}}else{let e=s.codegenNode;if(e.type===13){let t=e.patchFlag;if((t===void 0||t===512||t===1)&&Tn(s,n)>=2){let t=En(s);t&&(e.props=n.hoist(t))}e.dynamicProps&&=n.hoist(e.dynamicProps)}}}else if(s.type===12&&(r?0:Cn(s,n))>=2){s.codegenNode.type===14&&s.codegenNode.arguments.length>0&&s.codegenNode.arguments.push(`-1`),o.push(s);continue}if(s.type===1){let t=s.tagType===1;t&&n.scopes.vSlot++,Sn(s,e,n,!1,i),t&&n.scopes.vSlot--}else if(s.type===11)Sn(s,e,n,s.children.length===1,!0);else if(s.type===9)for(let t=0;te.key===t||e.key.content===t);return n&&n.value}}o.length&&n.transformHoist&&n.transformHoist(a,n,e)}function Cn(e,t){let{constantCache:n}=t;switch(e.type){case 1:if(e.tagType!==0)return 0;let r=n.get(e);if(r!==void 0)return r;let i=e.codegenNode;if(i.type!==13||i.isBlock&&e.tag!==`svg`&&e.tag!==`foreignObject`&&e.tag!==`math`)return 0;if(i.patchFlag===void 0){let r=3,a=Tn(e,t);if(a===0)return n.set(e,0),0;a1)for(let i=0;in&&(D.childIndex--,D.onNodeRemoved()),D.parent.children.splice(n,1)},onNodeRemoved:p,addIdentifiers(e){},removeIdentifiers(e){},hoist(e){v(e)&&(e=z(e)),D.hoists.push(e);let t=z(`_hoisted_${D.hoists.length}`,!1,e.loc,2);return t.hoisted=e,t},cache(e,t=!1,n=!1){let r=Qe(D.cached.length,e,t,n);return D.cached.push(r),r}};return D.filters=new Set,D}function On(e,t){let n=Dn(e,t);jn(e,n),t.hoistStatic&&bn(e,n),t.ssr||kn(e,n),e.helpers=new Set([...n.helpers.keys()]),e.components=[...n.components],e.directives=[...n.directives],e.imports=n.imports,e.hoists=n.hoists,e.temps=n.temps,e.cached=n.cached,e.transformed=!0,e.filters=[...n.filters]}function kn(e,t){let{helper:n}=t,{children:r}=e;if(r.length===1){let n=xn(e);if(n&&n.codegenNode){let r=n.codegenNode;r.type===13&&st(r,t),e.codegenNode=r}else e.codegenNode=r[0]}else r.length>1&&(e.codegenNode=qe(t,n(kr),void 0,e.children,64,void 0,void 0,!0,void 0,!1))}function An(e,t){let n=0,r=()=>{n--};for(;nt===e:t=>e.test(t);return(e,r)=>{if(e.type===1){let{props:i}=e;if(e.tagType===3&&i.some(zt))return;let a=[];for(let o=0;o0,p=!a&&r!==`module`;if(Fn(e,n),i(`function ${u?`ssrRender`:`render`}(${(u?[`_ctx`,`_push`,`_parent`,`_attrs`]:[`_ctx`,`_cache`]).join(`, `)}) {`),o(),p&&(i(`with (_ctx) {`),o(),f&&(i(`const { ${d.map(da).join(`, `)} } = _Vue diff --git a/public/admin/assets/courses-DjCB_SCT.js b/public/admin/assets/courses-CeyGHp9D.js similarity index 91% rename from public/admin/assets/courses-DjCB_SCT.js rename to public/admin/assets/courses-CeyGHp9D.js index cf4cf7e..7e2703c 100644 --- a/public/admin/assets/courses-DjCB_SCT.js +++ b/public/admin/assets/courses-CeyGHp9D.js @@ -1 +1 @@ -import{r as e}from"./index-jhdMOnS8.js";async function t(t){let{data:n}=await e.get(`/admin/v1/courses`,{params:t});return n.data}async function n(t){let{data:n}=await e.get(`/admin/v1/courses/${t}`);return n.data}async function r(t){let{data:n}=await e.post(`/admin/v1/courses`,t);return n.data}async function i(t,n){let{data:r}=await e.put(`/admin/v1/courses/${t}`,n);return r}async function a(t){let{data:n}=await e.delete(`/admin/v1/courses/${t}`);return n}async function o(t){let{data:n}=await e.get(`/admin/v1/courses/${t}/checkin-days`);return n.data.items}async function s(t,n){let{data:r}=await e.get(`/admin/v1/courses/${t}/signups`,{params:n});return r.data}async function c(e,t={}){let n=1,r=[];for(;;){let i=await s(e,{...t,page:n,page_size:200});if(r.push(...i.items),n>=i.meta.last_page||i.items.length===0)break;n+=1}return r}async function l(t,n){let{data:r}=await e.delete(`/admin/v1/courses/${t}/signups/${n}`);return r}async function u(t,n,r){let{data:i}=await e.post(`/admin/v1/courses/${t}/signups/${n}/checkin`,r);return i}export{c as a,s as c,l as i,t as l,r as n,n as o,a as r,o as s,u as t,i as u}; \ No newline at end of file +import{r as e}from"./index-D3i1HG2q.js";async function t(t){let{data:n}=await e.get(`/admin/v1/courses`,{params:t});return n.data}async function n(t){let{data:n}=await e.get(`/admin/v1/courses/${t}`);return n.data}async function r(t){let{data:n}=await e.post(`/admin/v1/courses`,t);return n.data}async function i(t,n){let{data:r}=await e.put(`/admin/v1/courses/${t}`,n);return r}async function a(t){let{data:n}=await e.delete(`/admin/v1/courses/${t}`);return n}async function o(t){let{data:n}=await e.get(`/admin/v1/courses/${t}/checkin-days`);return n.data.items}async function s(t,n){let{data:r}=await e.get(`/admin/v1/courses/${t}/signups`,{params:n});return r.data}async function c(e,t={}){let n=1,r=[];for(;;){let i=await s(e,{...t,page:n,page_size:200});if(r.push(...i.items),n>=i.meta.last_page||i.items.length===0)break;n+=1}return r}async function l(t,n){let{data:r}=await e.delete(`/admin/v1/courses/${t}/signups/${n}`);return r}async function u(t,n,r){let{data:i}=await e.post(`/admin/v1/courses/${t}/signups/${n}/checkin`,r);return i}export{c as a,s as c,l as i,t as l,r as n,n as o,a as r,o as s,u as t,i as u}; \ No newline at end of file diff --git a/public/admin/assets/crawler-CMbJoTEv.js b/public/admin/assets/crawler-Dor4p03x.js similarity index 98% rename from public/admin/assets/crawler-CMbJoTEv.js rename to public/admin/assets/crawler-Dor4p03x.js index 3c3d898..cc1d63a 100644 --- a/public/admin/assets/crawler-CMbJoTEv.js +++ b/public/admin/assets/crawler-Dor4p03x.js @@ -1 +1 @@ -import{C as e,D as t,E as n,G as r,S as i,T as a,X as ee,Y as o,at as s,b as c,f as te,ht as l,m as u,ot as ne,q as d,rt as f,tn as p,x as m,y as h}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{l as g,o as _,s as v}from"./index-jhdMOnS8.js";import{t as y}from"./usePageLoad-DFTLo_Lv.js";import{a as b,f as x,m as S,o as C,p as w}from"./assets-CEyD64oq.js";import{r as T}from"./research-directions-DG28ntk4.js";import{p as re}from"./teachers-BIk-0G3l.js";import{a as E}from"./dict-BFb6lz5T.js";var ie={class:`list-page`},ae={key:0,class:`crawl-resolve-hint`},oe={key:1,class:`crawl-resolve-hint`},se={key:0},ce={key:1},le={key:2},ue={key:3},de={key:1,class:`result-actions`},fe={key:1,class:`teacher-batch-bar`},pe={key:2,class:`teacher-batch-bar`},me=[`href`],D=v(t({__name:`index`,setup(t){let v=_(),D=l(!1),O=l(!1),k=l(!1),A=l(null),j=l(null),M=l(null),N=null,P=l(!1),F=l(`paper`),I=l([]),L=l([]),R=l([]),z=l(!1),B=l([]),V=l({target_type:`paper`,request_url:`https://arxiv.org/`,params:{}}),H={paper:[{key:`keyword`,type:`textarea`,label:`搜索关键词(选填)`,required:!1,placeholder:`多个关键词用逗号或换行分隔,如:graph neural, AI`},{key:`max_results`,type:`number`,label:`条数上限`,default:20,min:1,max:50}],industry_news:[{key:`keyword`,type:`textarea`,label:`搜索关键词(选填)`,required:!1,placeholder:`多个关键词用空格、逗号或换行分隔,如:融资 科创板 AI`},{key:`max_pages`,type:`number`,label:`抓取页数`,default:5,min:1,max:50},{key:`max_results`,type:`number`,label:`条数上限`,default:30,min:1,max:50}]},U=l([]),W=l([]),G=l({source:``,category_id:void 0}),K=l([]),q=l([]),J=l({university_id:void 0,city:``,research_direction_ids:[]}),he=h(()=>V.value.target_type===`teacher`?R.value:F.value===`teacher_lead`?L.value:I.value),ge=h(()=>V.value.target_type===`teacher`?U.value.filter(e=>e.key!==`keyword`&&e.key!==`max_results`&&e.key!==`max_pages`):[]);function Y(e){return e===`paper`||e===`industry_news`?H[e]:[]}function X(e,t=!0){let n=Y(e);if(n.length===0)return;U.value=n;let r=t?{...V.value.params}:{};if(xe(n),t)for(let e of n)r[e.key]!==void 0&&(V.value.params[e.key]=r[e.key])}function Z(){V.value.target_type===`teacher`&&(V.value.params.keyword===void 0&&(V.value.params.keyword=``),V.value.params.max_results===void 0&&(V.value.params.max_results=200),V.value.params.max_pages===void 0&&(V.value.params.max_pages=5))}function _e(){V.value.target_type===`industry_news`&&(V.value.params.keyword===void 0&&(V.value.params.keyword=``),V.value.params.max_pages===void 0&&(V.value.params.max_pages=5),V.value.params.max_results===void 0&&(V.value.params.max_results=30))}function ve(e){(e===`paper`||e===`industry_news`)&&(X(e,!0),e===`industry_news`&&_e())}function Q(e){if(!e)return`—`;let t=e.match(/^(\d{4}-\d{2}-\d{2})/);return t?t[1]:e}function ye(e){return!!(e.lead_author_university?.trim()||e.school_name?.trim())}function be(e){return[...e].sort((e,t)=>{let n=ye(e);return n===ye(t)?(e.lead_author_name||``).localeCompare(t.lead_author_name||``,`zh-CN`):n?-1:1})}function xe(e){let t={};for(let n of e)n.type===`checkbox`?t[n.key]=Array.isArray(n.default)?[...n.default]:[]:n.type===`number`?t[n.key]=n.default??20:t[n.key]=n.default??``;V.value.params=t}function Se(e){return e===`paper`?`https://arxiv.org/`:e===`teacher`?`https://`:`https://www.pedaily.cn/all/`}function Ce(e){let t=e.trim();return t&&!/^https?:\/\//i.test(t)?`https://${t}`:t}function we(){A.value=null,P.value=!1,I.value=[],L.value=[],R.value=[],B.value=[],G.value={source:``,category_id:void 0}}function Te(){we(),F.value=`paper`,D.value=!1,k.value=!1,V.value={target_type:`paper`,request_url:Se(`paper`),params:{}},j.value=null,M.value=null,U.value=[],ve(`paper`),$()}async function $(){if(N)return N;N=(async()=>{if(!V.value.request_url){j.value=null,M.value=null;return}let e=Ce(V.value.request_url);e!==V.value.request_url&&(V.value.request_url=e);let t=V.value.target_type;(t===`paper`||t===`industry_news`)&&X(t,!0),O.value=!0;try{j.value=await w({request_url:V.value.request_url,target_type:t}),M.value=V.value.request_url,t===`teacher`?(U.value=j.value.param_schema?.fields??[],xe(U.value),Z()):X(t,!0)}catch{j.value=null,M.value=null,t===`teacher`?U.value=[]:X(t,!0)}finally{O.value=!1}})();try{await N}finally{N=null}}async function Ee(){if(!V.value.request_url.trim())return g.warning(`请填写目标地址`),!1;let e=Ce(V.value.request_url);return e!==V.value.request_url&&(V.value.request_url=e),(!j.value||M.value!==V.value.request_url)&&await $(),!!j.value}async function De(){await $()}f(()=>V.value.target_type,e=>{we(),j.value=null,M.value=null,U.value=[],V.value.request_url=Se(e),e===`teacher`?Z():(e===`paper`||e===`industry_news`)&&X(e,!1),e===`industry_news`&&Ne(),$()});async function Oe(){let[e,t]=await Promise.all([re({page:1,page_size:300}),T()]);K.value=e.items.map(e=>({id:e.id,name:e.name,city:e.city})),q.value=t.map(e=>({id:e.id,name:e.name}))}function ke(e){if(!e)return;let t=K.value.find(t=>t.id===e);t?.city&&!J.value.city&&(J.value.city=t.city||``)}function Ae(){let e=G.value.source.trim(),t=G.value.category_id;if(!(!e&&!t))return{source:e||void 0,category_dict_item_id:t}}function je(){let{university_id:e,city:t,research_direction_ids:n}=J.value,r=e!=null&&e>0,i=t.trim()!==``,a=n.length>0;if(!(!r&&!i&&!a))return{university_id:r?e:void 0,city:i?t.trim():void 0,research_direction_ids:a?n:void 0}}async function Me(){if(!await Ee()){g.warning(`无法识别该地址,请检查入库类型与 URL 是否可访问(需为 http/https 列表或详情页)`);return}D.value=!0;try{A.value=await S({target_type:V.value.target_type,request_url:V.value.request_url,params:V.value.params});let e=A.value.items_fetched??A.value.preview_count??0,t=V.value.target_type===`paper`&&(A.value.preview_teacher_lead_count??0)>0?`,另 ${A.value.preview_teacher_lead_count} 位第一作者待入库`:``;g.success(`抓取完成,共 ${e} 条待预览${t}`)}finally{D.value=!1}}async function Ne(){if(!(W.value.length>0))try{W.value=(await E(`news_category`)).items.map(e=>({id:e.id,label:e.label}))}catch{g.warning(`资讯分类加载失败`)}}async function Pe(){if(A.value?.id){z.value=!0,P.value=!0,B.value=[],F.value=V.value.target_type===`teacher`?`teacher`:`paper`;try{V.value.target_type===`industry_news`&&await Ne(),V.value.target_type===`teacher`&&await Oe();let e=A.value.id;if(V.value.target_type===`paper`){let[t,n]=await Promise.all([b(e,{item_kind:`paper`}),b(e,{item_kind:`teacher_lead`})]);I.value=t,L.value=be(n)}else V.value.target_type===`teacher`?R.value=await b(e,{item_kind:`teacher`}):I.value=await b(e)}finally{z.value=!1}}}function Fe(e){B.value=e.filter(e=>e.selectable)}f(F,()=>{B.value=[]});async function Ie(){if(!A.value?.id)return;if(B.value.length===0){g.warning(`请先勾选要入库的条目`);return}let e={item_ids:B.value.map(e=>e.id)},t=je();if(t&&(e.teacher_defaults=t),V.value.target_type===`industry_news`){let t=Ae();t&&(e.news_defaults=t)}k.value=!0;try{let t=await x(A.value.id,e),n=t.failed>0?`,失败 ${t.failed} 条`:``;g.success(`已入库 ${t.imported} 条,跳过 ${t.skipped} 条${n}`),await Pe(),A.value=await C(A.value.id)}finally{k.value=!1}}function Le(){A.value?.id&&(V.value.target_type===`paper`?v.push({path:`/papers`,query:{crawl_job_id:String(A.value.id)}}):V.value.target_type===`teacher`?v.push({path:`/teachers`}):v.push({path:`/news`,query:{crawl_job_id:String(A.value.id)}}))}let Re=()=>A.value?.status===`completed`&&(A.value.items_fetched??0)>0,ze=h(()=>{let e=B.value.length;return V.value.target_type===`industry_news`?`入库资讯(已勾选 ${e} 条)`:V.value.target_type===`teacher`||F.value===`teacher_lead`?`入库老师(已勾选 ${e} 条)`:`入库论文(已勾选 ${e} 条)`});return y(Te),(t,l)=>{let f=o(`el-radio`),h=o(`el-radio-group`),g=o(`el-form-item`),_=o(`el-input`),v=o(`el-input-number`),y=o(`el-checkbox`),b=o(`el-checkbox-group`),x=o(`el-button`),S=o(`el-form`),C=o(`el-alert`),w=o(`el-card`),T=o(`el-tab-pane`),re=o(`el-tabs`),E=o(`el-option`),M=o(`el-select`),N=o(`el-table-column`),R=o(`el-tag`),H=o(`el-table`),U=o(`el-dialog`),Y=ee(`loading`);return r(),e(`div`,ie,[l[29]||=c(`div`,{class:`page-header`},[c(`h1`,{class:`page-title`},`数据采集`)],-1),n(w,{shadow:`never`,class:`admin-list-card`},{default:s(()=>[n(S,{"label-position":`top`,class:`crawler-form`,onSubmit:te(Me,[`prevent`])},{default:s(()=>[n(g,{label:`入库类型`,required:``},{default:s(()=>[n(h,{modelValue:V.value.target_type,"onUpdate:modelValue":l[0]||=e=>V.value.target_type=e},{default:s(()=>[n(f,{label:`paper`},{default:s(()=>[...l[18]||=[a(`论文 → 论文库`,-1)]]),_:1}),n(f,{label:`industry_news`},{default:s(()=>[...l[19]||=[a(`行业资讯 → 资讯管理`,-1)]]),_:1}),n(f,{label:`teacher`},{default:s(()=>[...l[20]||=[a(`老师库 → 老师库`,-1)]]),_:1})]),_:1},8,[`modelValue`])]),_:1}),n(g,{label:`目标地址`,required:``},{default:s(()=>[n(_,{modelValue:V.value.request_url,"onUpdate:modelValue":l[1]||=e=>V.value.request_url=e,type:`url`,placeholder:`https:// 资讯/论文列表页或单篇详情页`,onBlur:De},null,8,[`modelValue`]),O.value?(r(),e(`p`,ae,`正在识别采集源…`)):j.value?.source_name?(r(),e(`p`,oe,` 已识别采集源:`+p(j.value.source_name),1)):i(``,!0)]),_:1}),V.value.target_type===`paper`||V.value.target_type===`industry_news`?(r(),e(u,{key:0},[n(g,{label:`搜索关键词(选填)`},{default:s(()=>[n(_,{modelValue:V.value.params.keyword,"onUpdate:modelValue":l[2]||=e=>V.value.params.keyword=e,type:`textarea`,rows:2,placeholder:V.value.target_type===`paper`?`多个关键词用逗号或换行分隔,如:graph neural, AI`:`多个关键词用空格、逗号或换行分隔,如:融资 科创板 AI`},null,8,[`modelValue`,`placeholder`])]),_:1}),V.value.target_type===`industry_news`?(r(),m(g,{key:0,label:`抓取页数`},{default:s(()=>[n(v,{modelValue:V.value.params.max_pages,"onUpdate:modelValue":l[3]||=e=>V.value.params.max_pages=e,min:1,max:50},null,8,[`modelValue`])]),_:1})):i(``,!0),n(g,{label:`条数上限`},{default:s(()=>[n(v,{modelValue:V.value.params.max_results,"onUpdate:modelValue":l[4]||=e=>V.value.params.max_results=e,min:1,max:50},null,8,[`modelValue`])]),_:1})],64)):i(``,!0),V.value.target_type===`teacher`?(r(),e(u,{key:1},[n(g,{label:`搜索关键词(选填)`},{default:s(()=>[n(_,{modelValue:V.value.params.keyword,"onUpdate:modelValue":l[5]||=e=>V.value.params.keyword=e,type:`textarea`,rows:2,placeholder:`多个关键词用空格、逗号或换行分隔`},null,8,[`modelValue`])]),_:1}),n(g,{label:`抓取页数`},{default:s(()=>[n(v,{modelValue:V.value.params.max_pages,"onUpdate:modelValue":l[6]||=e=>V.value.params.max_pages=e,min:1,max:50},null,8,[`modelValue`])]),_:1}),n(g,{label:`条数上限`},{default:s(()=>[n(v,{modelValue:V.value.params.max_results,"onUpdate:modelValue":l[7]||=e=>V.value.params.max_results=e,min:1,max:500},null,8,[`modelValue`])]),_:1})],64)):i(``,!0),(r(!0),e(u,null,d(ge.value,t=>(r(),m(g,{key:t.key,label:t.label,required:t.required},{default:s(()=>[t.type===`checkbox`?(r(),m(b,{key:0,modelValue:V.value.params[t.key],"onUpdate:modelValue":e=>V.value.params[t.key]=e},{default:s(()=>[(r(!0),e(u,null,d(t.options,e=>(r(),m(y,{key:e,value:e},{default:s(()=>[a(p(e),1)]),_:2},1032,[`value`]))),128))]),_:2},1032,[`modelValue`,`onUpdate:modelValue`])):t.type===`number`?(r(),m(v,{key:1,modelValue:V.value.params[t.key],"onUpdate:modelValue":e=>V.value.params[t.key]=e,min:t.min??1,max:t.max??50},null,8,[`modelValue`,`onUpdate:modelValue`,`min`,`max`])):t.type===`textarea`?(r(),m(_,{key:2,modelValue:V.value.params[t.key],"onUpdate:modelValue":e=>V.value.params[t.key]=e,type:`textarea`,rows:3,placeholder:t.placeholder},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])):(r(),m(_,{key:3,modelValue:V.value.params[t.key],"onUpdate:modelValue":e=>V.value.params[t.key]=e,placeholder:t.placeholder},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`]))]),_:2},1032,[`label`,`required`]))),128)),n(x,{type:`primary`,"native-type":`submit`,loading:D.value},{default:s(()=>[...l[21]||=[a(` 手动抓取 `,-1)]]),_:1},8,[`loading`])]),_:1}),A.value?(r(),m(C,{key:0,class:`result-alert`,type:`success`,closable:!1,"show-icon":``},{default:s(()=>[c(`p`,null,`地址:`+p(A.value.request_url||A.value.platform_url),1),A.value.source_name?(r(),e(`p`,se,`采集源:`+p(A.value.source_name),1)):i(``,!0),c(`p`,null,`状态:`+p(A.value.status===`completed`?`已完成`:A.value.status),1),A.value.result_summary?(r(),e(`p`,ce,p(A.value.result_summary),1)):i(``,!0),V.value.target_type===`paper`&&A.value.preview_teacher_lead_count?(r(),e(`p`,le,` 第一作者待入库:`+p(A.value.preview_teacher_lead_count)+` 人 `,1)):i(``,!0),A.value.items_imported?(r(),e(`p`,ue,`已入库 `+p(A.value.items_imported)+` 条`,1)):i(``,!0)]),_:1})):i(``,!0),A.value?(r(),e(`div`,de,[Re()?(r(),m(x,{key:0,type:`primary`,onClick:Pe},{default:s(()=>[a(` 查看抓取内容(`+p(A.value.items_fetched)+` 条) `,1)]),_:1})):i(``,!0),n(x,{onClick:Le},{default:s(()=>[...l[22]||=[a(`在库中查看已入库`,-1)]]),_:1})])):i(``,!0)]),_:1}),n(U,{modelValue:P.value,"onUpdate:modelValue":l[16]||=e=>P.value=e,title:`本次抓取结果(勾选后入库)`,width:`960px`,"destroy-on-close":``,onClosed:l[17]||=e=>B.value=[]},{footer:s(()=>[n(x,{onClick:l[15]||=e=>P.value=!1},{default:s(()=>[...l[28]||=[a(`关闭`,-1)]]),_:1}),n(x,{type:`primary`,loading:k.value,onClick:Ie},{default:s(()=>[a(p(ze.value),1)]),_:1},8,[`loading`])]),default:s(()=>[V.value.target_type===`paper`?(r(),m(re,{key:0,modelValue:F.value,"onUpdate:modelValue":l[8]||=e=>F.value=e,class:`preview-tabs`},{default:s(()=>[n(T,{label:`论文(${I.value.length})`,name:`paper`},null,8,[`label`]),n(T,{label:`入库老师(${L.value.length})`,name:`teacher_lead`},null,8,[`label`])]),_:1},8,[`modelValue`])):i(``,!0),V.value.target_type===`industry_news`?(r(),e(`div`,fe,[n(_,{modelValue:G.value.source,"onUpdate:modelValue":l[9]||=e=>G.value.source=e,placeholder:`批量来源(选填)`,clearable:``,style:{width:`200px`}},null,8,[`modelValue`]),n(M,{modelValue:G.value.category_id,"onUpdate:modelValue":l[10]||=e=>G.value.category_id=e,placeholder:`批量资讯分类(选填)`,clearable:``,filterable:``,style:{width:`200px`}},{default:s(()=>[(r(!0),e(u,null,d(W.value,e=>(r(),m(E,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),l[23]||=c(`span`,{class:`batch-hint`},`选填;不填则使用每条抓取到的来源与自动匹配分类`,-1)])):i(``,!0),V.value.target_type===`teacher`?(r(),e(`div`,pe,[n(M,{modelValue:J.value.university_id,"onUpdate:modelValue":l[11]||=e=>J.value.university_id=e,filterable:``,placeholder:`批量高校(选填)`,clearable:``,style:{width:`200px`},onChange:ke},{default:s(()=>[(r(!0),e(u,null,d(K.value,e=>(r(),m(E,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),n(_,{modelValue:J.value.city,"onUpdate:modelValue":l[12]||=e=>J.value.city=e,placeholder:`批量城市(选填)`,clearable:``,style:{width:`140px`}},null,8,[`modelValue`]),n(M,{modelValue:J.value.research_direction_ids,"onUpdate:modelValue":l[13]||=e=>J.value.research_direction_ids=e,multiple:``,filterable:``,"collapse-tags":``,placeholder:`研究方向(可选)`,style:{width:`220px`}},{default:s(()=>[(r(!0),e(u,null,d(q.value,e=>(r(),m(E,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),l[24]||=c(`span`,{class:`batch-hint`},`选填;不填则使用每条抓取到的学校/机构信息`,-1)])):i(``,!0),ne((r(),m(H,{data:he.value,"row-key":`id`,size:`small`,onSelectionChange:Fe},{default:s(()=>[n(N,{type:`selection`,width:`48`,selectable:e=>!!e.selectable},null,8,[`selectable`]),V.value.target_type===`paper`&&F.value===`paper`?(r(),e(u,{key:0},[n(N,{prop:`title`,label:`论文标题`,"min-width":`200`,"show-overflow-tooltip":``}),n(N,{prop:`authors`,label:`作者`,width:`120`,"show-overflow-tooltip":``}),n(N,{label:`发表日期`,width:`110`},{default:s(({row:e})=>[a(p(Q(e.published_at)),1)]),_:1}),n(N,{prop:`school_name`,label:`学校`,width:`120`,"show-overflow-tooltip":``})],64)):V.value.target_type===`paper`&&F.value===`teacher_lead`?(r(),e(u,{key:1},[n(N,{prop:`lead_author_name`,label:`姓名`,width:`100`}),n(N,{prop:`lead_author_email`,label:`邮箱`,width:`160`,"show-overflow-tooltip":``}),n(N,{prop:`lead_author_university`,label:`学校`,width:`160`,"show-overflow-tooltip":``},{default:s(({row:e})=>[a(p(e.lead_author_university||e.school_name||`—`),1)]),_:1}),n(N,{prop:`paper_title`,label:`来源论文`,"min-width":`200`,"show-overflow-tooltip":``})],64)):V.value.target_type===`teacher`?(r(),e(u,{key:2},[n(N,{prop:`title`,label:`姓名`,width:`96`}),n(N,{label:`职称`,width:`88`,"show-overflow-tooltip":``},{default:s(({row:e})=>[a(p(e.lead_author_academic_title||`—`),1)]),_:1}),n(N,{prop:`lead_author_university`,label:`高校`,width:`140`,"show-overflow-tooltip":``},{default:s(({row:e})=>[a(p(e.lead_author_university||e.school_name||`—`),1)]),_:1}),n(N,{prop:`lead_author_email`,label:`邮箱`,width:`150`,"show-overflow-tooltip":``}),n(N,{prop:`summary`,label:`简介`,"min-width":`160`,"show-overflow-tooltip":``})],64)):(r(),e(u,{key:3},[n(N,{prop:`title`,label:`标题`,"min-width":`200`,"show-overflow-tooltip":``}),n(N,{prop:`source_name`,label:`采集源`,width:`120`,"show-overflow-tooltip":``}),n(N,{prop:`category_label`,label:`匹配分类`,width:`120`,"show-overflow-tooltip":``},{default:s(({row:e})=>[a(p(e.category_label||`—`),1)]),_:1}),n(N,{label:`发布时间`,width:`110`},{default:s(({row:e})=>[a(p(Q(e.published_at)),1)]),_:1})],64)),n(N,{label:`状态`,width:`88`},{default:s(({row:e})=>[e.is_duplicate?(r(),m(R,{key:0,type:`info`,size:`small`},{default:s(()=>[...l[25]||=[a(`已存在`,-1)]]),_:1})):e.status===`imported`?(r(),m(R,{key:1,type:`success`,size:`small`},{default:s(()=>[...l[26]||=[a(`已入库`,-1)]]),_:1})):(r(),m(R,{key:2,type:`warning`,size:`small`},{default:s(()=>[...l[27]||=[a(`待入库`,-1)]]),_:1}))]),_:1}),n(N,{label:`链接`,width:`64`},{default:s(({row:t})=>[t.url?(r(),e(`a`,{key:0,href:t.url,target:`_blank`,rel:`noopener`,onClick:l[14]||=te(()=>{},[`stop`])},`查看`,8,me)):i(``,!0)]),_:1})]),_:1},8,[`data`])),[[Y,z.value]])]),_:1},8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-2b93f235`]]);export{D as default}; \ No newline at end of file +import{C as e,D as t,E as n,G as r,S as i,T as a,X as ee,Y as o,at as s,b as c,f as te,ht as l,m as u,ot as ne,q as d,rt as f,tn as p,x as m,y as h}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{l as g,o as _,s as v}from"./index-D3i1HG2q.js";import{t as y}from"./usePageLoad-DFTLo_Lv.js";import{a as b,f as x,m as S,o as C,p as w}from"./assets-CxiSHyud.js";import{r as T}from"./research-directions-B9hhzvVH.js";import{p as re}from"./teachers-BbYywEyV.js";import{a as E}from"./dict-Brh9rLpP.js";var ie={class:`list-page`},ae={key:0,class:`crawl-resolve-hint`},oe={key:1,class:`crawl-resolve-hint`},se={key:0},ce={key:1},le={key:2},ue={key:3},de={key:1,class:`result-actions`},fe={key:1,class:`teacher-batch-bar`},pe={key:2,class:`teacher-batch-bar`},me=[`href`],D=v(t({__name:`index`,setup(t){let v=_(),D=l(!1),O=l(!1),k=l(!1),A=l(null),j=l(null),M=l(null),N=null,P=l(!1),F=l(`paper`),I=l([]),L=l([]),R=l([]),z=l(!1),B=l([]),V=l({target_type:`paper`,request_url:`https://arxiv.org/`,params:{}}),H={paper:[{key:`keyword`,type:`textarea`,label:`搜索关键词(选填)`,required:!1,placeholder:`多个关键词用逗号或换行分隔,如:graph neural, AI`},{key:`max_results`,type:`number`,label:`条数上限`,default:20,min:1,max:50}],industry_news:[{key:`keyword`,type:`textarea`,label:`搜索关键词(选填)`,required:!1,placeholder:`多个关键词用空格、逗号或换行分隔,如:融资 科创板 AI`},{key:`max_pages`,type:`number`,label:`抓取页数`,default:5,min:1,max:50},{key:`max_results`,type:`number`,label:`条数上限`,default:30,min:1,max:50}]},U=l([]),W=l([]),G=l({source:``,category_id:void 0}),K=l([]),q=l([]),J=l({university_id:void 0,city:``,research_direction_ids:[]}),he=h(()=>V.value.target_type===`teacher`?R.value:F.value===`teacher_lead`?L.value:I.value),ge=h(()=>V.value.target_type===`teacher`?U.value.filter(e=>e.key!==`keyword`&&e.key!==`max_results`&&e.key!==`max_pages`):[]);function Y(e){return e===`paper`||e===`industry_news`?H[e]:[]}function X(e,t=!0){let n=Y(e);if(n.length===0)return;U.value=n;let r=t?{...V.value.params}:{};if(xe(n),t)for(let e of n)r[e.key]!==void 0&&(V.value.params[e.key]=r[e.key])}function Z(){V.value.target_type===`teacher`&&(V.value.params.keyword===void 0&&(V.value.params.keyword=``),V.value.params.max_results===void 0&&(V.value.params.max_results=200),V.value.params.max_pages===void 0&&(V.value.params.max_pages=5))}function _e(){V.value.target_type===`industry_news`&&(V.value.params.keyword===void 0&&(V.value.params.keyword=``),V.value.params.max_pages===void 0&&(V.value.params.max_pages=5),V.value.params.max_results===void 0&&(V.value.params.max_results=30))}function ve(e){(e===`paper`||e===`industry_news`)&&(X(e,!0),e===`industry_news`&&_e())}function Q(e){if(!e)return`—`;let t=e.match(/^(\d{4}-\d{2}-\d{2})/);return t?t[1]:e}function ye(e){return!!(e.lead_author_university?.trim()||e.school_name?.trim())}function be(e){return[...e].sort((e,t)=>{let n=ye(e);return n===ye(t)?(e.lead_author_name||``).localeCompare(t.lead_author_name||``,`zh-CN`):n?-1:1})}function xe(e){let t={};for(let n of e)n.type===`checkbox`?t[n.key]=Array.isArray(n.default)?[...n.default]:[]:n.type===`number`?t[n.key]=n.default??20:t[n.key]=n.default??``;V.value.params=t}function Se(e){return e===`paper`?`https://arxiv.org/`:e===`teacher`?`https://`:`https://www.pedaily.cn/all/`}function Ce(e){let t=e.trim();return t&&!/^https?:\/\//i.test(t)?`https://${t}`:t}function we(){A.value=null,P.value=!1,I.value=[],L.value=[],R.value=[],B.value=[],G.value={source:``,category_id:void 0}}function Te(){we(),F.value=`paper`,D.value=!1,k.value=!1,V.value={target_type:`paper`,request_url:Se(`paper`),params:{}},j.value=null,M.value=null,U.value=[],ve(`paper`),$()}async function $(){if(N)return N;N=(async()=>{if(!V.value.request_url){j.value=null,M.value=null;return}let e=Ce(V.value.request_url);e!==V.value.request_url&&(V.value.request_url=e);let t=V.value.target_type;(t===`paper`||t===`industry_news`)&&X(t,!0),O.value=!0;try{j.value=await w({request_url:V.value.request_url,target_type:t}),M.value=V.value.request_url,t===`teacher`?(U.value=j.value.param_schema?.fields??[],xe(U.value),Z()):X(t,!0)}catch{j.value=null,M.value=null,t===`teacher`?U.value=[]:X(t,!0)}finally{O.value=!1}})();try{await N}finally{N=null}}async function Ee(){if(!V.value.request_url.trim())return g.warning(`请填写目标地址`),!1;let e=Ce(V.value.request_url);return e!==V.value.request_url&&(V.value.request_url=e),(!j.value||M.value!==V.value.request_url)&&await $(),!!j.value}async function De(){await $()}f(()=>V.value.target_type,e=>{we(),j.value=null,M.value=null,U.value=[],V.value.request_url=Se(e),e===`teacher`?Z():(e===`paper`||e===`industry_news`)&&X(e,!1),e===`industry_news`&&Ne(),$()});async function Oe(){let[e,t]=await Promise.all([re({page:1,page_size:300}),T()]);K.value=e.items.map(e=>({id:e.id,name:e.name,city:e.city})),q.value=t.map(e=>({id:e.id,name:e.name}))}function ke(e){if(!e)return;let t=K.value.find(t=>t.id===e);t?.city&&!J.value.city&&(J.value.city=t.city||``)}function Ae(){let e=G.value.source.trim(),t=G.value.category_id;if(!(!e&&!t))return{source:e||void 0,category_dict_item_id:t}}function je(){let{university_id:e,city:t,research_direction_ids:n}=J.value,r=e!=null&&e>0,i=t.trim()!==``,a=n.length>0;if(!(!r&&!i&&!a))return{university_id:r?e:void 0,city:i?t.trim():void 0,research_direction_ids:a?n:void 0}}async function Me(){if(!await Ee()){g.warning(`无法识别该地址,请检查入库类型与 URL 是否可访问(需为 http/https 列表或详情页)`);return}D.value=!0;try{A.value=await S({target_type:V.value.target_type,request_url:V.value.request_url,params:V.value.params});let e=A.value.items_fetched??A.value.preview_count??0,t=V.value.target_type===`paper`&&(A.value.preview_teacher_lead_count??0)>0?`,另 ${A.value.preview_teacher_lead_count} 位第一作者待入库`:``;g.success(`抓取完成,共 ${e} 条待预览${t}`)}finally{D.value=!1}}async function Ne(){if(!(W.value.length>0))try{W.value=(await E(`news_category`)).items.map(e=>({id:e.id,label:e.label}))}catch{g.warning(`资讯分类加载失败`)}}async function Pe(){if(A.value?.id){z.value=!0,P.value=!0,B.value=[],F.value=V.value.target_type===`teacher`?`teacher`:`paper`;try{V.value.target_type===`industry_news`&&await Ne(),V.value.target_type===`teacher`&&await Oe();let e=A.value.id;if(V.value.target_type===`paper`){let[t,n]=await Promise.all([b(e,{item_kind:`paper`}),b(e,{item_kind:`teacher_lead`})]);I.value=t,L.value=be(n)}else V.value.target_type===`teacher`?R.value=await b(e,{item_kind:`teacher`}):I.value=await b(e)}finally{z.value=!1}}}function Fe(e){B.value=e.filter(e=>e.selectable)}f(F,()=>{B.value=[]});async function Ie(){if(!A.value?.id)return;if(B.value.length===0){g.warning(`请先勾选要入库的条目`);return}let e={item_ids:B.value.map(e=>e.id)},t=je();if(t&&(e.teacher_defaults=t),V.value.target_type===`industry_news`){let t=Ae();t&&(e.news_defaults=t)}k.value=!0;try{let t=await x(A.value.id,e),n=t.failed>0?`,失败 ${t.failed} 条`:``;g.success(`已入库 ${t.imported} 条,跳过 ${t.skipped} 条${n}`),await Pe(),A.value=await C(A.value.id)}finally{k.value=!1}}function Le(){A.value?.id&&(V.value.target_type===`paper`?v.push({path:`/papers`,query:{crawl_job_id:String(A.value.id)}}):V.value.target_type===`teacher`?v.push({path:`/teachers`}):v.push({path:`/news`,query:{crawl_job_id:String(A.value.id)}}))}let Re=()=>A.value?.status===`completed`&&(A.value.items_fetched??0)>0,ze=h(()=>{let e=B.value.length;return V.value.target_type===`industry_news`?`入库资讯(已勾选 ${e} 条)`:V.value.target_type===`teacher`||F.value===`teacher_lead`?`入库老师(已勾选 ${e} 条)`:`入库论文(已勾选 ${e} 条)`});return y(Te),(t,l)=>{let f=o(`el-radio`),h=o(`el-radio-group`),g=o(`el-form-item`),_=o(`el-input`),v=o(`el-input-number`),y=o(`el-checkbox`),b=o(`el-checkbox-group`),x=o(`el-button`),S=o(`el-form`),C=o(`el-alert`),w=o(`el-card`),T=o(`el-tab-pane`),re=o(`el-tabs`),E=o(`el-option`),M=o(`el-select`),N=o(`el-table-column`),R=o(`el-tag`),H=o(`el-table`),U=o(`el-dialog`),Y=ee(`loading`);return r(),e(`div`,ie,[l[29]||=c(`div`,{class:`page-header`},[c(`h1`,{class:`page-title`},`数据采集`)],-1),n(w,{shadow:`never`,class:`admin-list-card`},{default:s(()=>[n(S,{"label-position":`top`,class:`crawler-form`,onSubmit:te(Me,[`prevent`])},{default:s(()=>[n(g,{label:`入库类型`,required:``},{default:s(()=>[n(h,{modelValue:V.value.target_type,"onUpdate:modelValue":l[0]||=e=>V.value.target_type=e},{default:s(()=>[n(f,{label:`paper`},{default:s(()=>[...l[18]||=[a(`论文 → 论文库`,-1)]]),_:1}),n(f,{label:`industry_news`},{default:s(()=>[...l[19]||=[a(`行业资讯 → 资讯管理`,-1)]]),_:1}),n(f,{label:`teacher`},{default:s(()=>[...l[20]||=[a(`老师库 → 老师库`,-1)]]),_:1})]),_:1},8,[`modelValue`])]),_:1}),n(g,{label:`目标地址`,required:``},{default:s(()=>[n(_,{modelValue:V.value.request_url,"onUpdate:modelValue":l[1]||=e=>V.value.request_url=e,type:`url`,placeholder:`https:// 资讯/论文列表页或单篇详情页`,onBlur:De},null,8,[`modelValue`]),O.value?(r(),e(`p`,ae,`正在识别采集源…`)):j.value?.source_name?(r(),e(`p`,oe,` 已识别采集源:`+p(j.value.source_name),1)):i(``,!0)]),_:1}),V.value.target_type===`paper`||V.value.target_type===`industry_news`?(r(),e(u,{key:0},[n(g,{label:`搜索关键词(选填)`},{default:s(()=>[n(_,{modelValue:V.value.params.keyword,"onUpdate:modelValue":l[2]||=e=>V.value.params.keyword=e,type:`textarea`,rows:2,placeholder:V.value.target_type===`paper`?`多个关键词用逗号或换行分隔,如:graph neural, AI`:`多个关键词用空格、逗号或换行分隔,如:融资 科创板 AI`},null,8,[`modelValue`,`placeholder`])]),_:1}),V.value.target_type===`industry_news`?(r(),m(g,{key:0,label:`抓取页数`},{default:s(()=>[n(v,{modelValue:V.value.params.max_pages,"onUpdate:modelValue":l[3]||=e=>V.value.params.max_pages=e,min:1,max:50},null,8,[`modelValue`])]),_:1})):i(``,!0),n(g,{label:`条数上限`},{default:s(()=>[n(v,{modelValue:V.value.params.max_results,"onUpdate:modelValue":l[4]||=e=>V.value.params.max_results=e,min:1,max:50},null,8,[`modelValue`])]),_:1})],64)):i(``,!0),V.value.target_type===`teacher`?(r(),e(u,{key:1},[n(g,{label:`搜索关键词(选填)`},{default:s(()=>[n(_,{modelValue:V.value.params.keyword,"onUpdate:modelValue":l[5]||=e=>V.value.params.keyword=e,type:`textarea`,rows:2,placeholder:`多个关键词用空格、逗号或换行分隔`},null,8,[`modelValue`])]),_:1}),n(g,{label:`抓取页数`},{default:s(()=>[n(v,{modelValue:V.value.params.max_pages,"onUpdate:modelValue":l[6]||=e=>V.value.params.max_pages=e,min:1,max:50},null,8,[`modelValue`])]),_:1}),n(g,{label:`条数上限`},{default:s(()=>[n(v,{modelValue:V.value.params.max_results,"onUpdate:modelValue":l[7]||=e=>V.value.params.max_results=e,min:1,max:500},null,8,[`modelValue`])]),_:1})],64)):i(``,!0),(r(!0),e(u,null,d(ge.value,t=>(r(),m(g,{key:t.key,label:t.label,required:t.required},{default:s(()=>[t.type===`checkbox`?(r(),m(b,{key:0,modelValue:V.value.params[t.key],"onUpdate:modelValue":e=>V.value.params[t.key]=e},{default:s(()=>[(r(!0),e(u,null,d(t.options,e=>(r(),m(y,{key:e,value:e},{default:s(()=>[a(p(e),1)]),_:2},1032,[`value`]))),128))]),_:2},1032,[`modelValue`,`onUpdate:modelValue`])):t.type===`number`?(r(),m(v,{key:1,modelValue:V.value.params[t.key],"onUpdate:modelValue":e=>V.value.params[t.key]=e,min:t.min??1,max:t.max??50},null,8,[`modelValue`,`onUpdate:modelValue`,`min`,`max`])):t.type===`textarea`?(r(),m(_,{key:2,modelValue:V.value.params[t.key],"onUpdate:modelValue":e=>V.value.params[t.key]=e,type:`textarea`,rows:3,placeholder:t.placeholder},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])):(r(),m(_,{key:3,modelValue:V.value.params[t.key],"onUpdate:modelValue":e=>V.value.params[t.key]=e,placeholder:t.placeholder},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`]))]),_:2},1032,[`label`,`required`]))),128)),n(x,{type:`primary`,"native-type":`submit`,loading:D.value},{default:s(()=>[...l[21]||=[a(` 手动抓取 `,-1)]]),_:1},8,[`loading`])]),_:1}),A.value?(r(),m(C,{key:0,class:`result-alert`,type:`success`,closable:!1,"show-icon":``},{default:s(()=>[c(`p`,null,`地址:`+p(A.value.request_url||A.value.platform_url),1),A.value.source_name?(r(),e(`p`,se,`采集源:`+p(A.value.source_name),1)):i(``,!0),c(`p`,null,`状态:`+p(A.value.status===`completed`?`已完成`:A.value.status),1),A.value.result_summary?(r(),e(`p`,ce,p(A.value.result_summary),1)):i(``,!0),V.value.target_type===`paper`&&A.value.preview_teacher_lead_count?(r(),e(`p`,le,` 第一作者待入库:`+p(A.value.preview_teacher_lead_count)+` 人 `,1)):i(``,!0),A.value.items_imported?(r(),e(`p`,ue,`已入库 `+p(A.value.items_imported)+` 条`,1)):i(``,!0)]),_:1})):i(``,!0),A.value?(r(),e(`div`,de,[Re()?(r(),m(x,{key:0,type:`primary`,onClick:Pe},{default:s(()=>[a(` 查看抓取内容(`+p(A.value.items_fetched)+` 条) `,1)]),_:1})):i(``,!0),n(x,{onClick:Le},{default:s(()=>[...l[22]||=[a(`在库中查看已入库`,-1)]]),_:1})])):i(``,!0)]),_:1}),n(U,{modelValue:P.value,"onUpdate:modelValue":l[16]||=e=>P.value=e,title:`本次抓取结果(勾选后入库)`,width:`960px`,"destroy-on-close":``,onClosed:l[17]||=e=>B.value=[]},{footer:s(()=>[n(x,{onClick:l[15]||=e=>P.value=!1},{default:s(()=>[...l[28]||=[a(`关闭`,-1)]]),_:1}),n(x,{type:`primary`,loading:k.value,onClick:Ie},{default:s(()=>[a(p(ze.value),1)]),_:1},8,[`loading`])]),default:s(()=>[V.value.target_type===`paper`?(r(),m(re,{key:0,modelValue:F.value,"onUpdate:modelValue":l[8]||=e=>F.value=e,class:`preview-tabs`},{default:s(()=>[n(T,{label:`论文(${I.value.length})`,name:`paper`},null,8,[`label`]),n(T,{label:`入库老师(${L.value.length})`,name:`teacher_lead`},null,8,[`label`])]),_:1},8,[`modelValue`])):i(``,!0),V.value.target_type===`industry_news`?(r(),e(`div`,fe,[n(_,{modelValue:G.value.source,"onUpdate:modelValue":l[9]||=e=>G.value.source=e,placeholder:`批量来源(选填)`,clearable:``,style:{width:`200px`}},null,8,[`modelValue`]),n(M,{modelValue:G.value.category_id,"onUpdate:modelValue":l[10]||=e=>G.value.category_id=e,placeholder:`批量资讯分类(选填)`,clearable:``,filterable:``,style:{width:`200px`}},{default:s(()=>[(r(!0),e(u,null,d(W.value,e=>(r(),m(E,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),l[23]||=c(`span`,{class:`batch-hint`},`选填;不填则使用每条抓取到的来源与自动匹配分类`,-1)])):i(``,!0),V.value.target_type===`teacher`?(r(),e(`div`,pe,[n(M,{modelValue:J.value.university_id,"onUpdate:modelValue":l[11]||=e=>J.value.university_id=e,filterable:``,placeholder:`批量高校(选填)`,clearable:``,style:{width:`200px`},onChange:ke},{default:s(()=>[(r(!0),e(u,null,d(K.value,e=>(r(),m(E,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),n(_,{modelValue:J.value.city,"onUpdate:modelValue":l[12]||=e=>J.value.city=e,placeholder:`批量城市(选填)`,clearable:``,style:{width:`140px`}},null,8,[`modelValue`]),n(M,{modelValue:J.value.research_direction_ids,"onUpdate:modelValue":l[13]||=e=>J.value.research_direction_ids=e,multiple:``,filterable:``,"collapse-tags":``,placeholder:`研究方向(可选)`,style:{width:`220px`}},{default:s(()=>[(r(!0),e(u,null,d(q.value,e=>(r(),m(E,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),l[24]||=c(`span`,{class:`batch-hint`},`选填;不填则使用每条抓取到的学校/机构信息`,-1)])):i(``,!0),ne((r(),m(H,{data:he.value,"row-key":`id`,size:`small`,onSelectionChange:Fe},{default:s(()=>[n(N,{type:`selection`,width:`48`,selectable:e=>!!e.selectable},null,8,[`selectable`]),V.value.target_type===`paper`&&F.value===`paper`?(r(),e(u,{key:0},[n(N,{prop:`title`,label:`论文标题`,"min-width":`200`,"show-overflow-tooltip":``}),n(N,{prop:`authors`,label:`作者`,width:`120`,"show-overflow-tooltip":``}),n(N,{label:`发表日期`,width:`110`},{default:s(({row:e})=>[a(p(Q(e.published_at)),1)]),_:1}),n(N,{prop:`school_name`,label:`学校`,width:`120`,"show-overflow-tooltip":``})],64)):V.value.target_type===`paper`&&F.value===`teacher_lead`?(r(),e(u,{key:1},[n(N,{prop:`lead_author_name`,label:`姓名`,width:`100`}),n(N,{prop:`lead_author_email`,label:`邮箱`,width:`160`,"show-overflow-tooltip":``}),n(N,{prop:`lead_author_university`,label:`学校`,width:`160`,"show-overflow-tooltip":``},{default:s(({row:e})=>[a(p(e.lead_author_university||e.school_name||`—`),1)]),_:1}),n(N,{prop:`paper_title`,label:`来源论文`,"min-width":`200`,"show-overflow-tooltip":``})],64)):V.value.target_type===`teacher`?(r(),e(u,{key:2},[n(N,{prop:`title`,label:`姓名`,width:`96`}),n(N,{label:`职称`,width:`88`,"show-overflow-tooltip":``},{default:s(({row:e})=>[a(p(e.lead_author_academic_title||`—`),1)]),_:1}),n(N,{prop:`lead_author_university`,label:`高校`,width:`140`,"show-overflow-tooltip":``},{default:s(({row:e})=>[a(p(e.lead_author_university||e.school_name||`—`),1)]),_:1}),n(N,{prop:`lead_author_email`,label:`邮箱`,width:`150`,"show-overflow-tooltip":``}),n(N,{prop:`summary`,label:`简介`,"min-width":`160`,"show-overflow-tooltip":``})],64)):(r(),e(u,{key:3},[n(N,{prop:`title`,label:`标题`,"min-width":`200`,"show-overflow-tooltip":``}),n(N,{prop:`source_name`,label:`采集源`,width:`120`,"show-overflow-tooltip":``}),n(N,{prop:`category_label`,label:`匹配分类`,width:`120`,"show-overflow-tooltip":``},{default:s(({row:e})=>[a(p(e.category_label||`—`),1)]),_:1}),n(N,{label:`发布时间`,width:`110`},{default:s(({row:e})=>[a(p(Q(e.published_at)),1)]),_:1})],64)),n(N,{label:`状态`,width:`88`},{default:s(({row:e})=>[e.is_duplicate?(r(),m(R,{key:0,type:`info`,size:`small`},{default:s(()=>[...l[25]||=[a(`已存在`,-1)]]),_:1})):e.status===`imported`?(r(),m(R,{key:1,type:`success`,size:`small`},{default:s(()=>[...l[26]||=[a(`已入库`,-1)]]),_:1})):(r(),m(R,{key:2,type:`warning`,size:`small`},{default:s(()=>[...l[27]||=[a(`待入库`,-1)]]),_:1}))]),_:1}),n(N,{label:`链接`,width:`64`},{default:s(({row:t})=>[t.url?(r(),e(`a`,{key:0,href:t.url,target:`_blank`,rel:`noopener`,onClick:l[14]||=te(()=>{},[`stop`])},`查看`,8,me)):i(``,!0)]),_:1})]),_:1},8,[`data`])),[[Y,z.value]])]),_:1},8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-2b93f235`]]);export{D as default}; \ No newline at end of file diff --git a/public/admin/assets/csv-export-BJBhoiZr.css b/public/admin/assets/csv-export-BJBhoiZr.css new file mode 100644 index 0000000..5f172b3 --- /dev/null +++ b/public/admin/assets/csv-export-BJBhoiZr.css @@ -0,0 +1 @@ +.qr-dialog-body[data-v-1377f159]{flex-direction:column;align-items:center;gap:8px;display:flex}.qr-image[data-v-1377f159],.qr-empty[data-v-1377f159]{border-radius:8px;width:200px;height:200px;display:block}.qr-empty[data-v-1377f159]{color:var(--el-text-color-secondary);background:var(--el-fill-color-light);text-align:center;box-sizing:border-box;justify-content:center;align-items:center;padding:12px;font-size:13px;display:flex}.qr-empty.is-error[data-v-1377f159]{color:var(--el-color-danger)}.qr-warn[data-v-1377f159]{color:var(--el-color-warning);text-align:center;margin:0;font-size:12px;line-height:1.5}.qr-code-text[data-v-1377f159]{color:var(--el-text-color-primary);word-break:break-all;text-align:center;margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:13px}.qr-hint[data-v-1377f159]{color:var(--el-text-color-secondary);text-align:center;margin:0;font-size:12px;line-height:1.5}.course-signin-qr-dialog.el-dialog{height:auto!important;max-height:none!important}.course-signin-qr-dialog .el-dialog__body{flex:none!important;padding:12px 20px 8px!important}.course-signin-qr-dialog .el-dialog__footer{padding-top:8px;padding-bottom:12px} diff --git a/public/admin/assets/csv-export-BctnjsYJ.js b/public/admin/assets/csv-export-BctnjsYJ.js deleted file mode 100644 index fac1688..0000000 --- a/public/admin/assets/csv-export-BctnjsYJ.js +++ /dev/null @@ -1,17 +0,0 @@ -import{t as e}from"./rolldown-runtime-BYbx6iT9.js";import{C as t,D as n,E as r,G as i,S as a,T as o,Y as s,at as c,b as l,ht as u,rt as d,tn as f,x as p,z as m}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{i as h,r as g,s as _}from"./index-jhdMOnS8.js";async function v(e){try{let{data:t}=await g.get(`/admin/v1/signin-qrcode`,{params:{code:e},responseType:`blob`});return t}catch(e){throw h.isAxiosError(e)&&e.response?.data instanceof Blob?Error(await y(e.response.data)):e}}async function y(e){try{let t=await e.text();return JSON.parse(t).message||`生成小程序码失败`}catch{return`生成小程序码失败`}}var b=e(((e,t)=>{t.exports=function(){return typeof Promise==`function`&&Promise.prototype&&Promise.prototype.then}})),x=e((e=>{var t,n=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];e.getSymbolSize=function(e){if(!e)throw Error(`"version" cannot be null or undefined`);if(e<1||e>40)throw Error(`"version" should be in range from 1 to 40`);return e*4+17},e.getSymbolTotalCodewords=function(e){return n[e]},e.getBCHDigit=function(e){let t=0;for(;e!==0;)t++,e>>>=1;return t},e.setToSJISFunction=function(e){if(typeof e!=`function`)throw Error(`"toSJISFunc" is not a valid function.`);t=e},e.isKanjiModeEnabled=function(){return t!==void 0},e.toSJIS=function(e){return t(e)}})),S=e((e=>{e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function t(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`l`:case`low`:return e.L;case`m`:case`medium`:return e.M;case`q`:case`quartile`:return e.Q;case`h`:case`high`:return e.H;default:throw Error(`Unknown EC Level: `+t)}}e.isValid=function(e){return e&&e.bit!==void 0&&e.bit>=0&&e.bit<4},e.from=function(n,r){if(e.isValid(n))return n;try{return t(n)}catch{return r}}})),C=e(((e,t)=>{function n(){this.buffer=[],this.length=0}n.prototype={get:function(e){let t=Math.floor(e/8);return(this.buffer[t]>>>7-e%8&1)==1},put:function(e,t){for(let n=0;n>>t-n-1&1)==1)},getLengthInBits:function(){return this.length},putBit:function(e){let t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}},t.exports=n})),w=e(((e,t)=>{function n(e){if(!e||e<1)throw Error(`BitMatrix size must be defined and greater than 0`);this.size=e,this.data=new Uint8Array(e*e),this.reservedBit=new Uint8Array(e*e)}n.prototype.set=function(e,t,n,r){let i=e*this.size+t;this.data[i]=n,r&&(this.reservedBit[i]=!0)},n.prototype.get=function(e,t){return this.data[e*this.size+t]},n.prototype.xor=function(e,t,n){this.data[e*this.size+t]^=n},n.prototype.isReserved=function(e,t){return this.reservedBit[e*this.size+t]},t.exports=n})),T=e((e=>{var t=x().getSymbolSize;e.getRowColCoords=function(e){if(e===1)return[];let n=Math.floor(e/7)+2,r=t(e),i=r===145?26:Math.ceil((r-13)/(2*n-2))*2,a=[r-7];for(let e=1;e{var t=x().getSymbolSize,n=7;e.getPositions=function(e){let r=t(e);return[[0,0],[r-n,0],[0,r-n]]}})),D=e((e=>{e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var t={N1:3,N2:3,N3:40,N4:10};e.isValid=function(e){return e!=null&&e!==``&&!isNaN(e)&&e>=0&&e<=7},e.from=function(t){return e.isValid(t)?parseInt(t,10):void 0},e.getPenaltyN1=function(e){let n=e.size,r=0,i=0,a=0,o=null,s=null;for(let c=0;c=5&&(r+=t.N1+(i-5)),o=n,i=1),n=e.get(l,c),n===s?a++:(a>=5&&(r+=t.N1+(a-5)),s=n,a=1)}i>=5&&(r+=t.N1+(i-5)),a>=5&&(r+=t.N1+(a-5))}return r},e.getPenaltyN2=function(e){let n=e.size,r=0;for(let t=0;t=10&&(i===1488||i===93)&&r++,a=a<<1&2047|e.get(o,t),o>=10&&(a===1488||a===93)&&r++}return r*t.N3},e.getPenaltyN4=function(e){let n=0,r=e.data.length;for(let t=0;t{var t=S(),n=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],r=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];e.getBlocksCount=function(e,r){switch(r){case t.L:return n[(e-1)*4+0];case t.M:return n[(e-1)*4+1];case t.Q:return n[(e-1)*4+2];case t.H:return n[(e-1)*4+3];default:return}},e.getTotalCodewordsCount=function(e,n){switch(n){case t.L:return r[(e-1)*4+0];case t.M:return r[(e-1)*4+1];case t.Q:return r[(e-1)*4+2];case t.H:return r[(e-1)*4+3];default:return}}})),k=e((e=>{var t=new Uint8Array(512),n=new Uint8Array(256);(function(){let e=1;for(let r=0;r<255;r++)t[r]=e,n[e]=r,e<<=1,e&256&&(e^=285);for(let e=255;e<512;e++)t[e]=t[e-255]})(),e.log=function(e){if(e<1)throw Error(`log(`+e+`)`);return n[e]},e.exp=function(e){return t[e]},e.mul=function(e,r){return e===0||r===0?0:t[n[e]+n[r]]}})),A=e((e=>{var t=k();e.mul=function(e,n){let r=new Uint8Array(e.length+n.length-1);for(let i=0;i=0;){let e=r[0];for(let i=0;i{var n=A();function r(e){this.genPoly=void 0,this.degree=e,this.degree&&this.initialize(this.degree)}r.prototype.initialize=function(e){this.degree=e,this.genPoly=n.generateECPolynomial(this.degree)},r.prototype.encode=function(e){if(!this.genPoly)throw Error(`Encoder not initialized`);let t=new Uint8Array(e.length+this.degree);t.set(e);let r=n.mod(t,this.genPoly),i=this.degree-r.length;if(i>0){let e=new Uint8Array(this.degree);return e.set(r,i),e}return r},t.exports=r})),M=e((e=>{e.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}})),N=e((e=>{var t=`[0-9]+`,n=`[A-Z $%*+\\-./:]+`,r=`(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+`;r=r.replace(/u/g,`\\u`);var i=`(?:(?![A-Z0-9 $%*+\\-./:]|`+r+`)(?:.|[\r -]))+`;e.KANJI=new RegExp(r,`g`),e.BYTE_KANJI=RegExp(`[^A-Z0-9 $%*+\\-./:]+`,`g`),e.BYTE=new RegExp(i,`g`),e.NUMERIC=new RegExp(t,`g`),e.ALPHANUMERIC=new RegExp(n,`g`);var a=RegExp(`^`+r+`$`),o=RegExp(`^`+t+`$`),s=RegExp(`^[A-Z0-9 $%*+\\-./:]+$`);e.testKanji=function(e){return a.test(e)},e.testNumeric=function(e){return o.test(e)},e.testAlphanumeric=function(e){return s.test(e)}})),P=e((e=>{var t=M(),n=N();e.NUMERIC={id:`Numeric`,bit:1,ccBits:[10,12,14]},e.ALPHANUMERIC={id:`Alphanumeric`,bit:2,ccBits:[9,11,13]},e.BYTE={id:`Byte`,bit:4,ccBits:[8,16,16]},e.KANJI={id:`Kanji`,bit:8,ccBits:[8,10,12]},e.MIXED={bit:-1},e.getCharCountIndicator=function(e,n){if(!e.ccBits)throw Error(`Invalid mode: `+e);if(!t.isValid(n))throw Error(`Invalid version: `+n);return n>=1&&n<10?e.ccBits[0]:n<27?e.ccBits[1]:e.ccBits[2]},e.getBestModeForData=function(t){return n.testNumeric(t)?e.NUMERIC:n.testAlphanumeric(t)?e.ALPHANUMERIC:n.testKanji(t)?e.KANJI:e.BYTE},e.toString=function(e){if(e&&e.id)return e.id;throw Error(`Invalid mode`)},e.isValid=function(e){return e&&e.bit&&e.ccBits};function r(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`numeric`:return e.NUMERIC;case`alphanumeric`:return e.ALPHANUMERIC;case`kanji`:return e.KANJI;case`byte`:return e.BYTE;default:throw Error(`Unknown mode: `+t)}}e.from=function(t,n){if(e.isValid(t))return t;try{return r(t)}catch{return n}}})),F=e((e=>{var t=x(),n=O(),r=S(),i=P(),a=M(),o=7973,s=t.getBCHDigit(o);function c(t,n,r){for(let i=1;i<=40;i++)if(n<=e.getCapacity(i,r,t))return i}function l(e,t){return i.getCharCountIndicator(e,t)+4}function u(e,t){let n=0;return e.forEach(function(e){let r=l(e.mode,t);n+=r+e.getBitsLength()}),n}function d(t,n){for(let r=1;r<=40;r++)if(u(t,r)<=e.getCapacity(r,n,i.MIXED))return r}e.from=function(e,t){return a.isValid(e)?parseInt(e,10):t},e.getCapacity=function(e,r,o){if(!a.isValid(e))throw Error(`Invalid QR Code version`);o===void 0&&(o=i.BYTE);let s=(t.getSymbolTotalCodewords(e)-n.getTotalCodewordsCount(e,r))*8;if(o===i.MIXED)return s;let c=s-l(o,e);switch(o){case i.NUMERIC:return Math.floor(c/10*3);case i.ALPHANUMERIC:return Math.floor(c/11*2);case i.KANJI:return Math.floor(c/13);case i.BYTE:default:return Math.floor(c/8)}},e.getBestVersionForData=function(e,t){let n,i=r.from(t,r.M);if(Array.isArray(e)){if(e.length>1)return d(e,i);if(e.length===0)return 1;n=e[0]}else n=e;return c(n.mode,n.getLength(),i)},e.getEncodedBits=function(e){if(!a.isValid(e)||e<7)throw Error(`Invalid QR Code version`);let n=e<<12;for(;t.getBCHDigit(n)-s>=0;)n^=o<{var t=x(),n=1335,r=21522,i=t.getBCHDigit(n);e.getEncodedBits=function(e,a){let o=e.bit<<3|a,s=o<<10;for(;t.getBCHDigit(s)-i>=0;)s^=n<{var n=P();function r(e){this.mode=n.NUMERIC,this.data=e.toString()}r.getBitsLength=function(e){return 10*Math.floor(e/3)+(e%3?e%3*3+1:0)},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(e){let t,n,r;for(t=0;t+3<=this.data.length;t+=3)n=this.data.substr(t,3),r=parseInt(n,10),e.put(r,10);let i=this.data.length-t;i>0&&(n=this.data.substr(t),r=parseInt(n,10),e.put(r,i*3+1))},t.exports=r})),te=e(((e,t)=>{var n=P(),r=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:`.split(``);function i(e){this.mode=n.ALPHANUMERIC,this.data=e}i.getBitsLength=function(e){return 11*Math.floor(e/2)+e%2*6},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(e){let t;for(t=0;t+2<=this.data.length;t+=2){let n=r.indexOf(this.data[t])*45;n+=r.indexOf(this.data[t+1]),e.put(n,11)}this.data.length%2&&e.put(r.indexOf(this.data[t]),6)},t.exports=i})),L=e(((e,t)=>{var n=P();function r(e){this.mode=n.BYTE,typeof e==`string`?this.data=new TextEncoder().encode(e):this.data=new Uint8Array(e)}r.getBitsLength=function(e){return e*8},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(e){for(let t=0,n=this.data.length;t{var n=P(),r=x();function i(e){this.mode=n.KANJI,this.data=e}i.getBitsLength=function(e){return e*13},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(e){let t;for(t=0;t=33088&&n<=40956)n-=33088;else if(n>=57408&&n<=60351)n-=49472;else throw Error(`Invalid SJIS character: `+this.data[t]+` -Make sure your charset is UTF-8`);n=(n>>>8&255)*192+(n&255),e.put(n,13)}},t.exports=i})),z=e(((e,t)=>{var n={single_source_shortest_paths:function(e,t,r){var i={},a={};a[t]=0;var o=n.PriorityQueue.make();o.push(t,0);for(var s,c,l,u,d,f,p,m,h;!o.empty();)for(l in s=o.pop(),c=s.value,u=s.cost,d=e[c]||{},d)d.hasOwnProperty(l)&&(f=d[l],p=u+f,m=a[l],h=a[l]===void 0,(h||m>p)&&(a[l]=p,o.push(l,p),i[l]=c));if(r!==void 0&&a[r]===void 0){var g=[`Could not find a path from `,t,` to `,r,`.`].join(``);throw Error(g)}return i},extract_shortest_path_from_predecessor_list:function(e,t){for(var n=[],r=t;r;)n.push(r),e[r],r=e[r];return n.reverse(),n},find_path:function(e,t,r){var i=n.single_source_shortest_paths(e,t,r);return n.extract_shortest_path_from_predecessor_list(i,r)},PriorityQueue:{make:function(e){var t=n.PriorityQueue,r={},i;for(i in e||={},t)t.hasOwnProperty(i)&&(r[i]=t[i]);return r.queue=[],r.sorter=e.sorter||t.default_sorter,r},default_sorter:function(e,t){return e.cost-t.cost},push:function(e,t){var n={value:e,cost:t};this.queue.push(n),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};t!==void 0&&(t.exports=n)})),B=e((e=>{var t=P(),n=ee(),r=te(),i=L(),a=R(),o=N(),s=x(),c=z();function l(e){return unescape(encodeURIComponent(e)).length}function u(e,t,n){let r=[],i;for(;(i=e.exec(n))!==null;)r.push({data:i[0],index:i.index,mode:t,length:i[0].length});return r}function d(e){let n=u(o.NUMERIC,t.NUMERIC,e),r=u(o.ALPHANUMERIC,t.ALPHANUMERIC,e),i,a;return s.isKanjiModeEnabled()?(i=u(o.BYTE,t.BYTE,e),a=u(o.KANJI,t.KANJI,e)):(i=u(o.BYTE_KANJI,t.BYTE,e),a=[]),n.concat(r,i,a).sort(function(e,t){return e.index-t.index}).map(function(e){return{data:e.data,mode:e.mode,length:e.length}})}function f(e,o){switch(o){case t.NUMERIC:return n.getBitsLength(e);case t.ALPHANUMERIC:return r.getBitsLength(e);case t.KANJI:return a.getBitsLength(e);case t.BYTE:return i.getBitsLength(e)}}function p(e){return e.reduce(function(e,t){let n=e.length-1>=0?e[e.length-1]:null;return n&&n.mode===t.mode?(e[e.length-1].data+=t.data,e):(e.push(t),e)},[])}function m(e){let n=[];for(let r=0;r{var t=x(),n=S(),r=C(),i=w(),a=T(),o=E(),s=D(),c=O(),l=j(),u=F(),d=I(),f=P(),p=B();function m(e,t){let n=e.size,r=o.getPositions(t);for(let t=0;t=0&&t<=6&&(r===0||r===6)||r>=0&&r<=6&&(t===0||t===6)||t>=2&&t<=4&&r>=2&&r<=4?e.set(i+t,a+r,!0,!0):e.set(i+t,a+r,!1,!0))}}function h(e){let t=e.size;for(let n=8;n>t&1)==1,e.set(i,a,o,!0),e.set(a,i,o,!0)}function v(e,t,n){let r=e.size,i=d.getEncodedBits(t,n),a,o;for(a=0;a<15;a++)o=(i>>a&1)==1,a<6?e.set(a,8,o,!0):a<8?e.set(a+1,8,o,!0):e.set(r-15+a,8,o,!0),a<8?e.set(8,r-a-1,o,!0):a<9?e.set(8,15-a-1+1,o,!0):e.set(8,15-a-1,o,!0);e.set(r-8,8,1,!0)}function y(e,t){let n=e.size,r=-1,i=n-1,a=7,o=0;for(let s=n-1;s>0;s-=2)for(s===6&&s--;;){for(let n=0;n<2;n++)if(!e.isReserved(i,s-n)){let r=!1;o>>a&1)==1),e.set(i,s-n,r),a--,a===-1&&(o++,a=7)}if(i+=r,i<0||n<=i){i-=r,r=-r;break}}}function b(e,n,i){let a=new r;i.forEach(function(t){a.put(t.mode.bit,4),a.put(t.getLength(),f.getCharCountIndicator(t.mode,e)),t.write(a)});let o=(t.getSymbolTotalCodewords(e)-c.getTotalCodewordsCount(e,n))*8;for(a.getLengthInBits()+4<=o&&a.put(0,4);a.getLengthInBits()%8!=0;)a.putBit(0);let s=(o-a.getLengthInBits())/8;for(let e=0;e=7&&_(d,n),y(d,l),isNaN(a)&&(a=s.getBestMask(d,v.bind(null,d,r))),s.applyMask(a,d),v(d,r,a),{modules:d,version:n,errorCorrectionLevel:r,maskPattern:a,segments:o}}e.create=function(e,r){if(e===void 0||e===``)throw Error(`No input text`);let i=n.M,a,o;return r!==void 0&&(i=n.from(r.errorCorrectionLevel,n.M),a=u.from(r.version),o=s.from(r.maskPattern),r.toSJISFunc&&t.setToSJISFunction(r.toSJISFunc)),A(e,a,i,o)}})),H=e((e=>{function t(e){if(typeof e==`number`&&(e=e.toString()),typeof e!=`string`)throw Error(`Color should be defined as hex string`);let t=e.slice().replace(`#`,``).split(``);if(t.length<3||t.length===5||t.length>8)throw Error(`Invalid hex color: `+e);(t.length===3||t.length===4)&&(t=Array.prototype.concat.apply([],t.map(function(e){return[e,e]}))),t.length===6&&t.push(`F`,`F`);let n=parseInt(t.join(``),16);return{r:n>>24&255,g:n>>16&255,b:n>>8&255,a:n&255,hex:`#`+t.slice(0,6).join(``)}}e.getOptions=function(e){e||={},e.color||={};let n=e.margin===void 0||e.margin===null||e.margin<0?4:e.margin,r=e.width&&e.width>=21?e.width:void 0,i=e.scale||4;return{width:r,scale:r?4:i,margin:n,color:{dark:t(e.color.dark||`#000000ff`),light:t(e.color.light||`#ffffffff`)},type:e.type,rendererOpts:e.rendererOpts||{}}},e.getScale=function(e,t){return t.width&&t.width>=e+t.margin*2?t.width/(e+t.margin*2):t.scale},e.getImageWidth=function(t,n){let r=e.getScale(t,n);return Math.floor((t+n.margin*2)*r)},e.qrToImageData=function(t,n,r){let i=n.modules.size,a=n.modules.data,o=e.getScale(i,r),s=Math.floor((i+r.margin*2)*o),c=r.margin*o,l=[r.color.light,r.color.dark];for(let e=0;e=c&&n>=c&&e{var t=H();function n(e,t,n){e.clearRect(0,0,t.width,t.height),t.style||={},t.height=n,t.width=n,t.style.height=n+`px`,t.style.width=n+`px`}function r(){try{return document.createElement(`canvas`)}catch{throw Error(`You need to specify a canvas element`)}}e.render=function(e,i,a){let o=a,s=i;o===void 0&&(!i||!i.getContext)&&(o=i,i=void 0),i||(s=r()),o=t.getOptions(o);let c=t.getImageWidth(e.modules.size,o),l=s.getContext(`2d`),u=l.createImageData(c,c);return t.qrToImageData(u.data,e,o),n(l,s,c),l.putImageData(u,0,0),s},e.renderToDataURL=function(t,n,r){let i=r;i===void 0&&(!n||!n.getContext)&&(i=n,n=void 0),i||={};let a=e.render(t,n,i),o=i.type||`image/png`,s=i.rendererOpts||{};return a.toDataURL(o,s.quality)}})),W=e((e=>{var t=H();function n(e,t){let n=e.a/255,r=t+`="`+e.hex+`"`;return n<1?r+` `+t+`-opacity="`+n.toFixed(2).slice(1)+`"`:r}function r(e,t,n){let r=e+t;return n!==void 0&&(r+=` `+n),r}function i(e,t,n){let i=``,a=0,o=!1,s=0;for(let c=0;c0&&l>0&&e[c-1]||(i+=o?r(`M`,l+n,.5+u+n):r(`m`,a,0),a=0,o=!1),l+1`:``,d=``,f=`viewBox="0 0 `+l+` `+l+`"`,p=``+u+d+` -`;return typeof a==`function`&&a(null,p),p}}));e((e=>{var t=b(),n=V(),r=U(),i=W();function a(e,r,i,a,o){let s=[].slice.call(arguments,1),c=s.length,l=typeof s[c-1]==`function`;if(!l&&!t())throw Error(`Callback required as last argument`);if(l){if(c<2)throw Error(`Too few arguments provided`);c===2?(o=i,i=r,r=a=void 0):c===3&&(r.getContext&&o===void 0?(o=a,a=void 0):(o=a,a=i,i=r,r=void 0))}else{if(c<1)throw Error(`Too few arguments provided`);return c===1?(i=r,r=a=void 0):c===2&&!r.getContext&&(a=i,i=r,r=void 0),new Promise(function(t,o){try{t(e(n.create(i,a),r,a))}catch(e){o(e)}})}try{let t=n.create(i,a);o(null,e(t,r,a))}catch(e){o(e)}}e.create=n.create,e.toCanvas=a.bind(null,r.render),e.toDataURL=a.bind(null,r.renderToDataURL),e.toString=a.bind(null,function(e,t,n){return i.render(e,n)})}))();function G(e){return e?e.signin_code||e.code||e.code_prefix||`COURSE-${String(e.id).padStart(3,`0`)}`:``}function K(e){return e?e.signin_code||e.code||`ACTIVITY-${String(e.id).padStart(3,`0`)}`:``}function q(e,t,n,r,i,a,o){e.font=a,e.fillStyle=o,e.textAlign=`center`,e.textBaseline=`middle`;let s=t||``;for(;s.length>0&&e.measureText(s).width>i;)s=s.slice(0,-1);s.length<(t||``).length&&(s=`${s.slice(0,-1)}…`),e.fillText(s,n,r)}function J(e,t,n){let r=document.createElement(`canvas`),i=r.getContext(`2d`);if(!i)return``;let a=`${t||`课程`}签到`;return r.width=420,r.height=480,i.fillStyle=`#fff`,i.fillRect(0,0,r.width,r.height),i.strokeStyle=`#d9dee7`,i.lineWidth=2,i.strokeRect(18,18,r.width-36,r.height-36),q(i,a,210,64,340,`700 22px sans-serif`,`#1f2937`),i.drawImage(e,90,108,240,240),q(i,n,210,372,340,`14px monospace`,`#475569`),q(i,`请使用微信扫码签到`,210,394,340,`14px sans-serif`,`#64748b`),r.toDataURL(`image/png`)}function Y(e){return`${(e||`课程`).replace(/[\\/:*?"<>|]/g,`-`)}签到码.png`}function X(e,t){let n=window.open(``,`_blank`);n&&(n.document.open(),n.document.write(`打印签到二维码 - -${t} - +