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

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