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
7.9 KiB
1 line
7.9 KiB
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-EOeHqR7Z.js";import{_ as b,b as x,g as S,h as C,m as w,v as ee,x as T,y as E}from"./index-xGP6mfsH.js";import{t as D}from"./_plugin-vue_export-helper-BOai-rQB.js";import{t as O}from"./browser-CQSxnito.js";import{n as k,r as A,t as j}from"./publicSourceChannels-C9gjag2-.js";var M=O(),N={class:`source-page`},P={class:`source-toolbar`},F={class:`toolbar-actions`},I={class:`entry-url`},L={key:0,class:`qr-preview`},R={class:`qr-label`},z={class:`qr-url`},B=D(t({__name:`PublicSourceChannelManageView`,setup(t){let D=g([]),O=g(!1),B=g(!1),V=g(!1),H=g(null),U=g(!1),W=g(null),G=g(null),K=f({source_code:``,source_name:``,status:`enabled`}),q=v(()=>H.value?`编辑公开来源渠道`:`新增公开来源渠道`);function J(){H.value=null,K.source_code=``,K.source_name=``,K.status=`enabled`}async function Y(){O.value=!0;try{D.value=await k()}catch(e){C.error(e instanceof Error?e.message:`加载公开来源渠道失败`)}finally{O.value=!1}}function te(){J(),V.value=!0}function ne(e){H.value=e.id,K.source_code=e.source_code,K.source_name=e.source_name,K.status=e.status,V.value=!0}function re(){return/^[A-Za-z0-9_-]{2,64}$/.test(K.source_code.trim())?!K.source_name.trim()||K.source_name.trim().length>100?(C.warning(`渠道名称需为 1-100 个字符`),!1):!0:(C.warning(`渠道编码需为 2-64 位字母、数字、下划线或中划线`),!1)}async function X(){if(!re())return;B.value=!0;let e={source_code:K.source_code.trim(),source_name:K.source_name.trim(),status:K.status};try{H.value?await A(H.value,e):await j(e),C.success(`公开来源渠道已保存`),V.value=!1,await Y()}catch(e){C.error(e instanceof Error?e.message:`保存公开来源渠道失败`)}finally{B.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 A(e.id,{status:t}),C.success(`渠道已${n}`),await Y()}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,M.toCanvas)(t,e.entry_url,{width:n,margin:2,errorCorrectionLevel:`M`,color:{dark:`#111827`,light:`#ffffff`}})}async function oe(e){W.value=e,U.value=!0,await y(),G.value&&await Z(e,G.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.toLocaleString()}return i(()=>{Y()}),(t,i)=>{let f=s(`el-button`),g=s(`el-table-column`),v=s(`el-tag`),y=s(`el-table`),C=s(`el-input`),w=s(`el-form-item`),k=s(`el-radio-button`),A=s(`el-radio-group`),j=s(`el-form`),M=s(`el-dialog`),H=e(`loading`);return a(),l(`section`,N,[c(`div`,P,[i[11]||=c(`div`,null,[c(`h1`,null,`公开来源渠道`),c(`p`,null,`用于生成首页入口链接和二维码,仅在新用户注册时写入来源归因。`)],-1),c(`div`,F,[m(f,{icon:r(x),loading:O.value,onClick:Y},{default:d(()=>[...i[9]||=[o(`刷新`,-1)]]),_:1},8,[`icon`,`loading`]),m(f,{type:`primary`,icon:r(E),onClick:te},{default:d(()=>[...i[10]||=[o(`新增渠道`,-1)]]),_:1},8,[`icon`])])]),h((a(),n(y,{data:D.value,border:``,stripe:``,"empty-text":`暂无公开来源渠道`,class:`source-table`},{default:d(()=>[m(g,{prop:`source_name`,label:`渠道名称`,"min-width":`150`}),m(g,{prop:`source_code`,label:`渠道编码`,"min-width":`150`}),m(g,{label:`状态`,width:`100`},{default:d(({row:e})=>[m(v,{type:e.status===`enabled`?`success`:`info`},{default:d(()=>[o(u(e.status===`enabled`?`启用`:`停用`),1)]),_:2},1032,[`type`])]),_:1}),m(g,{label:`访问地址`,"min-width":`280`},{default:d(({row:e})=>[c(`div`,I,[c(`span`,null,u(e.entry_url),1),m(f,{link:``,type:`primary`,icon:r(S),onClick:t=>ae(e)},{default:d(()=>[...i[12]||=[o(` 复制 `,-1)]]),_:1},8,[`icon`,`onClick`])])]),_:1}),m(g,{label:`二维码`,width:`130`},{default:d(({row:e})=>[m(f,{size:`small`,onClick:t=>oe(e)},{default:d(()=>[...i[13]||=[o(`查看`,-1)]]),_:1},8,[`onClick`])]),_:1}),m(g,{label:`创建时间`,"min-width":`170`},{default:d(({row:e})=>[o(u(ce(e.created_at)),1)]),_:1}),m(g,{label:`操作`,width:`230`,fixed:`right`},{default:d(({row:e})=>[m(f,{size:`small`,icon:r(ee),onClick:t=>ne(e)},{default:d(()=>[...i[14]||=[o(`编辑`,-1)]]),_:1},8,[`icon`,`onClick`]),m(f,{size:`small`,icon:r(T),onClick:t=>ie(e)},{default:d(()=>[o(u(e.status===`enabled`?`停用`:`启用`),1)]),_:2},1032,[`icon`,`onClick`]),m(f,{size:`small`,icon:r(b),onClick:t=>Q(e)},{default:d(()=>[...i[15]||=[o(`下载`,-1)]]),_:1},8,[`icon`,`onClick`]),m(f,{size:`small`,icon:r(b),onClick:t=>$(e)},{default:d(()=>[...i[16]||=[o(` 不含文字 `,-1)]]),_:1},8,[`icon`,`onClick`])]),_:1})]),_:1},8,[`data`])),[[H,O.value]]),m(M,{modelValue:V.value,"onUpdate:modelValue":i[4]||=e=>V.value=e,title:q.value,width:`520px`,"destroy-on-close":``},{footer:d(()=>[m(f,{onClick:i[3]||=e=>V.value=!1},{default:d(()=>[...i[19]||=[o(`取消`,-1)]]),_:1}),m(f,{type:`primary`,loading:B.value,onClick:X},{default:d(()=>[...i[20]||=[o(`保存`,-1)]]),_:1},8,[`loading`])]),default:d(()=>[m(j,{"label-width":`96px`,onSubmit:p(X,[`prevent`])},{default:d(()=>[m(w,{label:`渠道编码`,required:``},{default:d(()=>[m(C,{modelValue:K.source_code,"onUpdate:modelValue":i[0]||=e=>K.source_code=e,modelModifiers:{trim:!0},maxlength:`64`,placeholder:`例如 wx_menu、poster_001`},null,8,[`modelValue`])]),_:1}),m(w,{label:`渠道名称`,required:``},{default:d(()=>[m(C,{modelValue:K.source_name,"onUpdate:modelValue":i[1]||=e=>K.source_name=e,modelModifiers:{trim:!0},maxlength:`100`,placeholder:`例如 公众号菜单`},null,8,[`modelValue`])]),_:1}),m(w,{label:`状态`},{default:d(()=>[m(A,{modelValue:K.status,"onUpdate:modelValue":i[2]||=e=>K.status=e},{default:d(()=>[m(k,{label:`enabled`},{default:d(()=>[...i[17]||=[o(`启用`,-1)]]),_:1}),m(k,{label:`disabled`},{default:d(()=>[...i[18]||=[o(`停用`,-1)]]),_:1})]),_:1},8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`]),m(M,{modelValue:U.value,"onUpdate:modelValue":i[8]||=e=>U.value=e,title:`渠道二维码`,width:`640px`,"destroy-on-close":``},{footer:d(()=>[m(f,{onClick:i[5]||=e=>U.value=!1},{default:d(()=>[...i[21]||=[o(`关闭`,-1)]]),_:1}),W.value?(a(),n(f,{key:0,type:`primary`,icon:r(b),onClick:i[6]||=e=>Q(W.value)},{default:d(()=>[...i[22]||=[o(` 下载二维码 `,-1)]]),_:1},8,[`icon`])):_(``,!0),W.value?(a(),n(f,{key:1,icon:r(b),onClick:i[7]||=e=>$(W.value)},{default:d(()=>[...i[23]||=[o(` 不含文字 `,-1)]]),_:1},8,[`icon`])):_(``,!0)]),default:d(()=>[W.value?(a(),l(`div`,L,[c(`canvas`,{ref_key:`qrCanvasRef`,ref:G,width:`480`,height:`480`},null,512),c(`div`,R,u(W.value.source_name)+`专属报名二维码`,1),c(`div`,z,u(W.value.entry_url),1)])):_(``,!0)]),_:1},8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-0fbad46c`]]);export{B as default}; |