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