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
10 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 ee,Xt as te,Y as s,at as c,b as l,d as u,ht as d,m as f,ot as p,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,u as y}from"./index-CpW3rNmm.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-GFF4qxN4.js";import{l as C}from"./courses-BmbVb4j4.js";import{t as w}from"./upload-D5ZZkqqP.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`},ie={class:`page-header`},ae={class:`list-filter-bar`},oe={key:1,class:`text-mute`},se={class:`table-row-actions`},ce={class:`list-pager`},le={class:`upload-row`},j={key:0,class:`thumb-preview`},M=[`src`],N={class:`quill-wrap`},P=g(n({__name:`index`,setup(n){let g=[[`bold`,`italic`,`underline`],[{header:[2,3,!1]}],[{list:`ordered`},{list:`bullet`}],[`link`],[`clean`]],v=[{value:`course`,label:`课程`},{value:`activity`,label:`活动`},{value:`custom`,label:`自定义`}],P=d(!1),F=d(!1),I=d([]),L=d({current_page:1,per_page:20,total:0}),R=d(1),z=d(``),B=d(``),V=d(``),H=d(!1),U=d(null),W=d({type:`course`,course_id:void 0,activity_id:void 0,title:``,cover_url:``,content_html:``,sort:0,status:1}),G=d([]),K=d([]),q=d(!1),J=d(!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 y.warning(`请选择课程`),!1;if(W.value.type===`activity`&&!W.value.activity_id)return y.warning(`请选择活动`),!1;if(W.value.type===`custom`){if(!W.value.title.trim())return y.warning(`请填写标题`),!1;if(!W.value.cover_url)return y.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),y.success(`已保存`),H.value=!1,await Y()}finally{F.value=!1}}async function he(e){await _.confirm(`确定删除 Banner「${e.summary||e.id}」?`,`提示`,{type:`warning`}),await A(e.id),y.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,y.success(`封面上传成功`),e.onSuccess?.({})}catch{y.error(`封面上传失败`),e.onError?.(Error(`upload failed`))}}return x(Y),(n,d)=>{let _=s(`el-button`),y=s(`el-input`),x=s(`el-option`),S=s(`el-select`),C=s(`el-table-column`),w=s(`el-image`),E=s(`el-table`),D=s(`el-pagination`),O=s(`el-card`),k=s(`el-form-item`),A=s(`el-col`),$=s(`el-input-number`),_e=s(`el-switch`),ve=s(`el-row`),ye=s(`el-upload`),be=s(`el-form`),xe=s(`el-dialog`),Se=ee(`loading`);return i(),e(f,null,[l(`div`,re,[l(`div`,ie,[d[15]||=l(`h1`,{class:`page-title`},`Banner图管理`,-1),r(_,{type:`primary`,size:`small`,class:`btn-create`,onClick:fe},{default:c(()=>[...d[14]||=[o(`新增 Banner`,-1)]]),_:1})]),r(O,{shadow:`never`,class:`admin-list-card`},{default:c(()=>[l(`div`,ae,[r(y,{modelValue:z.value,"onUpdate:modelValue":d[0]||=e=>z.value=e,placeholder:`搜索标题、课程、活动…`,clearable:``,class:`filter-search`,onKeyup:u(X,[`enter`])},null,8,[`modelValue`]),r(S,{modelValue:B.value,"onUpdate:modelValue":d[1]||=e=>B.value=e,clearable:``,placeholder:`类型`,class:`filter-select`},{default:c(()=>[(i(),e(f,null,m(v,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":d[2]||=e=>V.value=e,clearable:``,placeholder:`状态`,class:`filter-select`},{default:c(()=>[r(x,{label:`启用`,value:1}),r(x,{label:`停用`,value:0})]),_:1},8,[`modelValue`]),r(_,{type:`primary`,onClick:X},{default:c(()=>[...d[16]||=[o(`搜索`,-1)]]),_:1}),r(_,{onClick:ue},{default:c(()=>[...d[17]||=[o(`重置`,-1)]]),_:1})]),p((i(),h(E,{data:I.value,"row-key":`id`},{default:c(()=>[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:c(({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`,oe,``))]),_:1}),r(C,{prop:`sort`,label:`排序`,width:`80`,align:`center`}),r(C,{label:`状态`,width:`90`,align:`center`},{default:c(({row:e})=>[l(`span`,{class:te([`status-badge`,t(T)(e.status)])},ne(e.status===1?`启用`:`停用`),3)]),_:1}),r(C,{label:`操作`,width:`160`,fixed:`right`},{default:c(({row:e})=>[l(`div`,se,[r(_,{class:`btn-action-secondary`,onClick:t=>pe(e)},{default:c(()=>[...d[18]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),r(_,{class:`btn-action-secondary`,onClick:t=>he(e)},{default:c(()=>[...d[19]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[Se,P.value]]),l(`div`,ce,[r(D,{"current-page":R.value,"onUpdate:currentPage":d[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":d[13]||=e=>H.value=e,title:U.value?`编辑 Banner`:`新增 Banner`,width:`960px`,top:`4vh`,"destroy-on-close":``,class:`banner-dialog`},{footer:c(()=>[r(_,{onClick:d[12]||=e=>H.value=!1},{default:c(()=>[...d[22]||=[o(`取消`,-1)]]),_:1}),r(_,{type:`primary`,loading:F.value,onClick:me},{default:c(()=>[...d[23]||=[o(`保存`,-1)]]),_:1},8,[`loading`])]),default:c(()=>[r(be,{"label-position":`top`,class:`banner-form`},{default:c(()=>[r(ve,{gutter:16},{default:c(()=>[r(A,{span:8},{default:c(()=>[r(k,{label:`类型`,required:``},{default:c(()=>[r(S,{modelValue:W.value.type,"onUpdate:modelValue":d[4]||=e=>W.value.type=e,style:{width:`100%`},onChange:de},{default:c(()=>[(i(),e(f,null,m(v,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:c(()=>[r(k,{label:`排序`,required:``},{default:c(()=>[r($,{modelValue:W.value.sort,"onUpdate:modelValue":d[5]||=e=>W.value.sort=e,min:0,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),r(A,{span:8},{default:c(()=>[r(k,{label:`状态`},{default:c(()=>[r(_e,{modelValue:W.value.status,"onUpdate:modelValue":d[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:c(()=>[r(S,{modelValue:W.value.course_id,"onUpdate:modelValue":d[7]||=e=>W.value.course_id=e,filterable:``,remote:``,"reserve-keyword":``,placeholder:`搜索课程名称或编号`,"remote-method":Z,loading:q.value,style:{width:`100%`}},{default:c(()=>[(i(!0),e(f,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:c(()=>[r(S,{modelValue:W.value.activity_id,"onUpdate:modelValue":d[8]||=e=>W.value.activity_id=e,filterable:``,remote:``,"reserve-keyword":``,placeholder:`搜索活动名称`,"remote-method":Q,loading:J.value,style:{width:`100%`}},{default:c(()=>[(i(!0),e(f,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(f,{key:2},[r(k,{label:`标题`,required:``},{default:c(()=>[r(y,{modelValue:W.value.title,"onUpdate:modelValue":d[9]||=e=>W.value.title=e,placeholder:`请输入 Banner 标题`},null,8,[`modelValue`])]),_:1}),r(k,{label:`封面图`,required:``},{default:c(()=>[l(`div`,le,[r(ye,{"show-file-list":!1,accept:`image/*`,"http-request":ge},{default:c(()=>[r(_,{type:`primary`,plain:``,size:`small`},{default:c(()=>[...d[20]||=[o(`上传图片`,-1)]]),_:1})]),_:1}),W.value.cover_url?(i(),h(_,{key:0,size:`small`,onClick:d[10]||=e=>W.value.cover_url=``},{default:c(()=>[...d[21]||=[o(`移除`,-1)]]),_:1})):a(``,!0)]),W.value.cover_url?(i(),e(`div`,j,[l(`img`,{src:W.value.cover_url,alt:`封面`},null,8,M)])):a(``,!0)]),_:1}),r(k,{label:`内容`,class:`intro-form-item`},{default:c(()=>[l(`div`,N,[r(t(b),{content:W.value.content_html,"onUpdate:content":d[11]||=e=>W.value.content_html=e,"content-type":`html`,theme:`snow`,toolbar:g},null,8,[`content`])])]),_:1})],64)):a(``,!0)]),_:1})]),_:1},8,[`modelValue`,`title`])],64)}}}),[[`__scopeId`,`data-v-cc2d69e5`]]);export{P as default};