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
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 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-1Xc2Vk2V.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-CNzyXH3a.js";import{l as C}from"./courses-C4HzeF4c.js";import{t as w}from"./upload-BFLFj2ir.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}; |