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