You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 line
12 KiB

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 f,f as p,ht as m,m as h,ot as g,q as _,rt as v,tn as y,w as b,x}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as S,l as C,r as w,s as T}from"./index-BKGTVidA.js";import{n as E,t as D}from"./usePageLoad-D9c6HmVf.js";import{n as O,t as ee}from"./RichTextEditor--JhJgtyr.js";import{s as k}from"./activities-CCTU_3qV.js";import{l as A}from"./courses-DlpilFy4.js";import{a as j}from"./news-DsaeuNoa.js";import{r as te}from"./admin-list-DjncsyJC.js";var M=T(n({__name:`RemotePagedSelect`,props:{modelValue:{},placeholder:{default:`请搜索选择`},pageSize:{default:20},initialOption:{default:null},fetchPage:{}},emits:[`update:modelValue`],setup(t,{expose:n,emit:a}){let o=t,s=a,c=m(!1),f=m([]),g=m(``),y=m(1),S=m(0);function C(e){let t=o.initialOption;return!t||e.some(e=>e.id===t.id)?e:[t,...e]}async function w(e=1,t=g.value){c.value=!0;try{let n=await o.fetchPage({keyword:t,page:e,pageSize:o.pageSize});f.value=C(n.items),S.value=n.total,y.value=e,g.value=t}finally{c.value=!1}}function T(e){w(1,e)}function E(e){w(e,g.value)}function D(e){e&&w(1,g.value)}return v(()=>o.initialOption,()=>{f.value=C(f.value)}),n({reload:()=>w(1,g.value)}),(n,a)=>{let o=l(`el-option`),m=l(`el-pagination`),g=l(`el-select`);return i(),x(g,{"model-value":t.modelValue,filterable:``,remote:``,"reserve-keyword":``,placeholder:t.placeholder,"remote-method":T,loading:c.value,style:{width:`100%`},"onUpdate:modelValue":a[2]||=e=>s(`update:modelValue`,e),onVisibleChange:D},b({default:u(()=>[(i(!0),e(h,null,_(f.value,e=>(i(),x(o,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:2},[S.value>t.pageSize?{name:`footer`,fn:u(()=>[d(`div`,{class:`remote-paged-select-footer`,onClick:a[0]||=p(()=>{},[`stop`]),onMousedown:a[1]||=p(()=>{},[`stop`])},[r(m,{small:``,layout:`total, prev, pager, next`,total:S.value,"page-size":t.pageSize,"current-page":y.value,onCurrentChange:E},null,8,[`total`,`page-size`,`current-page`])],32)]),key:`0`}:void 0]),1032,[`model-value`,`placeholder`,`loading`])}}}),[[`__scopeId`,`data-v-6c878f54`]]);async function N(e){let{data:t}=await w.get(`/admin/v1/banners`,{params:e});return t.data}async function P(e){let{data:t}=await w.get(`/admin/v1/banners/${e}`);return t.data}async function F(e){let{data:t}=await w.post(`/admin/v1/banners`,e);return t.data}async function I(e,t){let{data:n}=await w.put(`/admin/v1/banners/${e}`,t);return n.data}async function L(e){let{data:t}=await w.delete(`/admin/v1/banners/${e}`);return t}var ne={class:`list-page`},re={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`},ue=[`src`],R=20,z=T(n({__name:`index`,setup(n){let p=[{value:`course`,label:`课程`},{value:`activity`,label:`活动`},{value:`news`,label:`资讯`},{value:`custom`,label:`自定义`}],v=m(!1),b=m(!1),w=m([]),T=m({current_page:1,per_page:20,total:0}),z=m(1),B=m(``),V=m(``),H=m(``),U=m(!1),W=m(null),G=m({type:`course`,course_id:void 0,activity_id:void 0,news_id:void 0,title:``,cover_url:``,content_html:``,sort:0,status:1}),K=m(null),q=m(null),J=m(null),Y=m(0);async function X(){v.value=!0;try{let e={page:z.value,page_size:T.value.per_page};B.value&&(e.keyword=B.value),V.value&&(e.type=V.value),H.value!==``&&(e.status=H.value);let t=await N(e);w.value=t.items,T.value=t.meta}finally{v.value=!1}}function Z(){z.value=1,X()}function de(){B.value=``,V.value=``,H.value=``,z.value=1,X()}async function fe({keyword:e,page:t,pageSize:n}){let r=await A({keyword:e||void 0,page:t,page_size:n});return{items:r.items.map(e=>({id:e.id,label:e.title})),total:r.meta.total}}async function pe({keyword:e,page:t,pageSize:n}){let r=await k({keyword:e||void 0,page:t,page_size:n});return{items:r.items.map(e=>({id:e.id,label:e.title})),total:r.meta.total}}async function me({keyword:e,page:t,pageSize:n}){let r=await j({keyword:e||void 0,page:t,page_size:n,status:1});return{items:r.items.map(e=>({id:e.id,label:e.title})),total:r.meta.total}}function Q(){K.value=null,q.value=null,J.value=null,Y.value+=1}function he(){G.value.course_id=void 0,G.value.activity_id=void 0,G.value.news_id=void 0,G.value.title=``,G.value.cover_url=``,G.value.content_html=``,Q()}function ge(){W.value=null,G.value={type:`course`,course_id:void 0,activity_id:void 0,news_id:void 0,title:``,cover_url:``,content_html:``,sort:0,status:1},Q(),U.value=!0}async function _e(e){W.value=e;let t=await P(e.id);G.value={type:t.type,course_id:t.course_id??void 0,activity_id:t.activity_id??void 0,news_id:t.news_id??void 0,title:t.title||``,cover_url:t.cover_url||``,content_html:t.content_html||``,sort:t.sort,status:t.status},K.value=t.type===`course`&&t.course_id?{id:t.course_id,label:t.course_title||`#${t.course_id}`}:null,q.value=t.type===`activity`&&t.activity_id?{id:t.activity_id,label:t.activity_title||`#${t.activity_id}`}:null,J.value=t.type===`news`&&t.news_id?{id:t.news_id,label:t.news_title||`#${t.news_id}`}:null,Y.value+=1,U.value=!0}function $(){if(G.value.type===`course`&&!G.value.course_id)return C.warning(`请选择课程`),!1;if(G.value.type===`activity`&&!G.value.activity_id)return C.warning(`请选择活动`),!1;if(G.value.type===`news`&&!G.value.news_id)return C.warning(`请选择资讯`),!1;if(G.value.type===`custom`){if(!G.value.title.trim())return C.warning(`请填写标题`),!1;if(!G.value.cover_url)return C.warning(`请上传封面图`),!1}return!0}async function ve(){if(!$())return;let e={type:G.value.type,sort:G.value.sort,status:G.value.status,course_id:G.value.type===`course`?G.value.course_id:null,activity_id:G.value.type===`activity`?G.value.activity_id:null,news_id:G.value.type===`news`?G.value.news_id:null,title:G.value.type===`custom`?G.value.title.trim():null,cover_url:G.value.type===`custom`?G.value.cover_url:null,content_html:G.value.type===`custom`&&G.value.content_html?.replace(/<[^>]+>/g,``).trim()?G.value.content_html:null};b.value=!0;try{W.value?await I(W.value.id,e):await F(e),C.success(`已保存`),U.value=!1,await X()}finally{b.value=!1}}async function ye(e){await S.confirm(`确定删除 Banner「${e.summary||e.id}」?`,`提示`,{type:`warning`}),await L(e.id),C.success(`已删除`),await X()}async function be(e){let t=e.file,n=t instanceof File?t:t.raw;if(!n){e.onError?.(Error(`no file`));return}try{let t=await O(n);G.value.cover_url=t.url,C.success(`封面上传成功`),e.onSuccess?.({})}catch{C.error(`封面上传失败`),e.onError?.(Error(`upload failed`))}}return D(X),(n,m)=>{let S=l(`el-button`),C=l(`el-input`),D=l(`el-option`),O=l(`el-select`),k=l(`el-table-column`),A=l(`el-image`),j=l(`el-table`),N=l(`el-pagination`),P=l(`el-card`),F=l(`el-form-item`),I=l(`el-col`),L=l(`el-input-number`),Q=l(`el-switch`),$=l(`el-row`),xe=l(`el-upload`),Se=l(`el-form`),Ce=l(`el-dialog`),we=s(`loading`);return i(),e(h,null,[d(`div`,ne,[d(`div`,re,[r(E),r(S,{type:`primary`,size:`small`,class:`btn-create`,onClick:ge},{default:u(()=>[...m[15]||=[o(`新增 Banner`,-1)]]),_:1})]),r(P,{shadow:`never`,class:`admin-list-card`},{default:u(()=>[d(`div`,ie,[r(C,{modelValue:B.value,"onUpdate:modelValue":m[0]||=e=>B.value=e,placeholder:`搜索标题、课程、活动、资讯…`,clearable:``,class:`filter-search`,onKeyup:f(Z,[`enter`])},null,8,[`modelValue`]),r(O,{modelValue:V.value,"onUpdate:modelValue":m[1]||=e=>V.value=e,clearable:``,placeholder:`类型`,class:`filter-select`},{default:u(()=>[(i(),e(h,null,_(p,e=>r(D,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`]),r(O,{modelValue:H.value,"onUpdate:modelValue":m[2]||=e=>H.value=e,clearable:``,placeholder:`状态`,class:`filter-select`},{default:u(()=>[r(D,{label:`启用`,value:1}),r(D,{label:`停用`,value:0})]),_:1},8,[`modelValue`]),r(S,{type:`primary`,onClick:Z},{default:u(()=>[...m[16]||=[o(`搜索`,-1)]]),_:1}),r(S,{onClick:de},{default:u(()=>[...m[17]||=[o(`重置`,-1)]]),_:1})]),g((i(),x(j,{data:w.value,"row-key":`id`},{default:u(()=>[r(k,{prop:`type_label`,label:`类型`,width:`90`}),r(k,{prop:`summary`,label:`展示内容`,"min-width":`200`,"show-overflow-tooltip":``}),r(k,{label:`封面`,width:`100`,align:`center`},{default:u(({row:t})=>[t.type===`custom`&&t.cover_url?(i(),x(A,{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(k,{prop:`sort`,label:`排序`,width:`80`,align:`center`}),r(k,{label:`状态`,width:`90`,align:`center`},{default:u(({row:e})=>[d(`span`,{class:c([`status-badge`,t(te)(e.status)])},y(e.status===1?`启用`:`停用`),3)]),_:1}),r(k,{label:`操作`,width:`160`,fixed:`right`},{default:u(({row:e})=>[d(`div`,oe,[r(S,{class:`btn-action-primary`,onClick:t=>_e(e)},{default:u(()=>[...m[18]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),r(S,{class:`btn-action-brand`,onClick:t=>ye(e)},{default:u(()=>[...m[19]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[we,v.value]]),d(`div`,se,[r(N,{"current-page":z.value,"onUpdate:currentPage":m[3]||=e=>z.value=e,layout:`total, prev, pager, next`,total:T.value.total,"page-size":T.value.per_page,onCurrentChange:X},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),r(Ce,{modelValue:U.value,"onUpdate:modelValue":m[14]||=e=>U.value=e,title:W.value?`编辑 Banner`:`新增 Banner`,width:`960px`,top:`4vh`,"destroy-on-close":``,class:`banner-dialog`},{footer:u(()=>[r(S,{onClick:m[13]||=e=>U.value=!1},{default:u(()=>[...m[22]||=[o(`取消`,-1)]]),_:1}),r(S,{type:`primary`,loading:b.value,onClick:ve},{default:u(()=>[...m[23]||=[o(`保存`,-1)]]),_:1},8,[`loading`])]),default:u(()=>[r(Se,{"label-position":`top`,class:`banner-form`},{default:u(()=>[r($,{gutter:16},{default:u(()=>[r(I,{span:8},{default:u(()=>[r(F,{label:`类型`,required:``},{default:u(()=>[r(O,{modelValue:G.value.type,"onUpdate:modelValue":m[4]||=e=>G.value.type=e,style:{width:`100%`},onChange:he},{default:u(()=>[(i(),e(h,null,_(p,e=>r(D,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(I,{span:8},{default:u(()=>[r(F,{label:`排序`,required:``},{default:u(()=>[r(L,{modelValue:G.value.sort,"onUpdate:modelValue":m[5]||=e=>G.value.sort=e,min:0,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),r(I,{span:8},{default:u(()=>[r(F,{label:`状态`},{default:u(()=>[r(Q,{modelValue:G.value.status,"onUpdate:modelValue":m[6]||=e=>G.value.status=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1}),G.value.type===`course`?(i(),x(F,{key:0,label:`选择课程`,required:``},{default:u(()=>[(i(),x(M,{key:`course-${Y.value}`,modelValue:G.value.course_id,"onUpdate:modelValue":m[7]||=e=>G.value.course_id=e,placeholder:`搜索课程名称或编号`,"page-size":R,"initial-option":K.value,"fetch-page":fe},null,8,[`modelValue`,`initial-option`]))]),_:1})):a(``,!0),G.value.type===`activity`?(i(),x(F,{key:1,label:`选择活动`,required:``},{default:u(()=>[(i(),x(M,{key:`activity-${Y.value}`,modelValue:G.value.activity_id,"onUpdate:modelValue":m[8]||=e=>G.value.activity_id=e,placeholder:`搜索活动名称`,"page-size":R,"initial-option":q.value,"fetch-page":pe},null,8,[`modelValue`,`initial-option`]))]),_:1})):a(``,!0),G.value.type===`news`?(i(),x(F,{key:2,label:`选择资讯`,required:``},{default:u(()=>[(i(),x(M,{key:`news-${Y.value}`,modelValue:G.value.news_id,"onUpdate:modelValue":m[9]||=e=>G.value.news_id=e,placeholder:`搜索已发布资讯标题`,"page-size":R,"initial-option":J.value,"fetch-page":me},null,8,[`modelValue`,`initial-option`]))]),_:1})):a(``,!0),G.value.type===`custom`?(i(),e(h,{key:3},[r(F,{label:`标题`,required:``},{default:u(()=>[r(C,{modelValue:G.value.title,"onUpdate:modelValue":m[10]||=e=>G.value.title=e,placeholder:`请输入 Banner 标题`},null,8,[`modelValue`])]),_:1}),r(F,{label:`封面图`,required:``},{default:u(()=>[d(`div`,ce,[r(xe,{"show-file-list":!1,accept:`image/*`,"http-request":be},{default:u(()=>[r(S,{type:`primary`,plain:``,size:`small`},{default:u(()=>[...m[20]||=[o(`上传图片`,-1)]]),_:1})]),_:1}),G.value.cover_url?(i(),x(S,{key:0,size:`small`,onClick:m[11]||=e=>G.value.cover_url=``},{default:u(()=>[...m[21]||=[o(`移除`,-1)]]),_:1})):a(``,!0)]),G.value.cover_url?(i(),e(`div`,le,[d(`img`,{src:G.value.cover_url,alt:`封面`},null,8,ue)])):a(``,!0)]),_:1}),r(F,{label:`内容`,class:`intro-form-item`},{default:u(()=>[r(ee,{modelValue:G.value.content_html,"onUpdate:modelValue":m[12]||=e=>G.value.content_html=e,scope:`banners`,height:320},null,8,[`modelValue`])]),_:1})],64)):a(``,!0)]),_:1})]),_:1},8,[`modelValue`,`title`])],64)}}}),[[`__scopeId`,`data-v-17c72380`]]);export{z as default};