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
8.3 KiB
1 line
8.3 KiB
|
1 month ago
|
import{$ as e,A as t,C as n,Dt as r,G as i,J as a,O as o,Q as s,S as c,T as l,an as u,ct as d,gt as f,h as p,k as m,lt as h,vt as g,w as _,x as v,z as y}from"./vue.runtime.esm-bundler-Dt_AyShc.js";import{S as b,_ as x,b as S,g as C,h as w,s as T,v as E,x as D,y as O}from"./index-D9t8QC7c.js";import{t as k}from"./_plugin-vue_export-helper-CXTkFu_Z.js";import{t as A}from"./browser-CJw8OUwA.js";var j=A();function M(e){let t=e?.data??e;if(!t||typeof t!=`object`||!(`id`in t))throw Error(`公开来源渠道响应格式无效`);return t}async function N(){let{data:e}=await T.get(`/public-source-channels`),t=e?.data??e;if(!Array.isArray(t))throw Error(`公开来源渠道列表响应格式无效`);return t}async function P(e){let{data:t}=await T.post(`/public-source-channels`,e);return M(t)}async function F(e,t){let{data:n}=await T.put(`/public-source-channels/${e}`,t);return M(n)}var ee={class:`source-page`},te={class:`source-toolbar`},ne={class:`toolbar-actions`},re={class:`entry-url`},I={key:0,class:`qr-preview`},L={class:`qr-label`},R={class:`qr-url`},z=k(t({__name:`PublicSourceChannelManageView`,setup(t){let T=g([]),k=g(!1),A=g(!1),M=g(!1),z=g(null),B=g(!1),V=g(null),H=g(null),U=f({source_code:``,source_name:``,status:`enabled`}),W=v(()=>z.value?`编辑公开来源渠道`:`新增公开来源渠道`);function G(){z.value=null,U.source_code=``,U.source_name=``,U.status=`enabled`}async function K(){k.value=!0;try{T.value=await N()}catch(e){C.error(e instanceof Error?e.message:`加载公开来源渠道失败`)}finally{k.value=!1}}function q(){G(),M.value=!0}function J(e){z.value=e.id,U.source_code=e.source_code,U.source_name=e.source_name,U.status=e.status,M.value=!0}function Y(){return/^[A-Za-z0-9_-]{2,64}$/.test(U.source_code.trim())?!U.source_name.trim()||U.source_name.trim().length>100?(C.warning(`渠道名称需为 1-100 个字符`),!1):!0:(C.warning(`渠道编码需为 2-64 位字母、数字、下划线或中划线`),!1)}async function X(){if(!Y())return;A.value=!0;let e={source_code:U.source_code.trim(),source_name:U.source_name.trim(),status:U.status};try{z.value?await F(z.value,e):await P(e),C.success(`公开来源渠道已保存`),M.value=!1,await K()}catch(e){C.error(e instanceof Error?e.message:`保存公开来源渠道失败`)}finally{A.value=!1}}async function ie(e){let t=e.status===`enabled`?`disabled`:`enabled`,n=t===`enabled`?`启用`:`停用`;try{await w.confirm(`确认${n}「${e.source_name}」?`,`${n}渠道`,{type:t===`enabled`?`info`:`warning`,confirmButtonText:n,cancelButtonText:`取消`}),await F(e.id,{status:t}),C.success(`渠道已${n}`),await K()}catch(e){e!==`cancel`&&e!==`close`&&C.error(e instanceof Error?e.message:`渠道${n}失败`)}}async function ae(e){try{await navigator.clipboard.writeText(e.entry_url),C.success(`访问地址已复制`)}catch{C.error(`复制失败,请手动复制访问地址`)}}async function Z(e,t,n=440){await(0,j.toCanvas)(t,e.entry_url,{width:n,margin:2,errorCorrectionLevel:`M`,color:{dark:`#111827`,light:`#ffffff`}})}async function oe(e){V.value=e,B.value=!0,await y(),H.value&&await Z(e,H.value,480)}function se(e,t,n,r){let i=r-32,a=22;e.textAlign=`center`,e.textBaseline=`middle`,e.fillStyle=`#111827`;do{if(e.font=`600 ${a}px sans-serif`,e.measureText(t).width<=i||a<=12)break;--a}while(a>12);e.fillText(t,r/2,n,i)}async function Q(e){let t=document.createElement(`canvas`);await Z(e,t,720);let n=document.createElement(`canvas`);n.width=720,n.height=864;let r=n.getContext(`2d`);if(!r){C.error(`当前浏览器无法生成二维码图片`);return}r.fillStyle=`#ffffff`,r.fillRect(0,0,n.width,n.height),r.drawImage(t,0,0),se(r,`${e.source_name}专属报名二维码`,790,n.width);let i=document.createElement(`a`);i.download=`${e.source_code}-qrcode.png`,i.href=n.toDataURL(`image/png`),i.click()}async function $(e){let t=document.createElement(`canvas`);await Z(e,t,720);let n=document.createElement(`a`);n.download=`${e.source_code}-qrcode-only.png`,n.href=t.toDataURL(`image/png`),n.click()}function ce(e){if(!e)return`-`;let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toL
|