Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 39s
refactor(service): 修改banner和guild删除逻辑为软删除 fix(service): 修复删除操作使用软删除而非物理删除 build: 添加SQLite测试仓库实现 docs: 新增奖励管理字段拆分和批量抽奖UI改造文档 ci: 更新CI忽略文件 style: 清理无用资源文件
2 lines
18 KiB
JavaScript
2 lines
18 KiB
JavaScript
var e=Object.defineProperty,i=Object.defineProperties,t=Object.getOwnPropertyDescriptors,a=Object.getOwnPropertySymbols,s=Object.prototype.hasOwnProperty,l=Object.prototype.propertyIsEnumerable,r=(i,t,a)=>t in i?e(i,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[t]=a,o=(e,i,t)=>new Promise((a,s)=>{var l=e=>{try{o(t.next(e))}catch(i){s(i)}},r=e=>{try{o(t.throw(e))}catch(i){s(i)}},o=e=>e.done?a(e.value):Promise.resolve(e.value).then(l,r);o((t=t.apply(e,i)).next())});import{d as n,c as d,a as u,aQ as c,w as v,e as f,f as _,p as m,z as p,h as g,k as y,F as h,G as x,y as w,m as j,l as b,B as k,ab as I,u as C,b2 as S,O as R}from"./index-CZ0Lvzl5.js";/* empty css *//* empty css */import{E as $}from"./el-pagination-CqMqz367.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{E as z,a as V}from"./el-table-column-CioBjwcM.js";/* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css *//* empty css */import{E as A,a as E}from"./el-step-eKA640ze.js";/* empty css */import{p as P,q as O,r as D,v as U,l as H}from"./adminActivities-BFodRb8S.js";import{E as L,a as T}from"./index-DhBIlDpg.js";import{E as B,a as W}from"./index-pVAXVlCV.js";import{E as F}from"./index-BQ-mpgoy.js";import{E as K}from"./index-D11sKPUb.js";import{E as M}from"./index-DR7AB6IM.js";import{E as N}from"./index-6-f3xsy2.js";import{E as q}from"./index-CWBrZtwn.js";import{E as G}from"./index-DO8sDDAh.js";import"./index-K2zzami3.js";import"./index-MV2EqMi7.js";import"./index-BW22oPP6.js";import"./index-BierC7rd.js";import"./index-C6fEXl-e.js";import"./use-form-item-BsnpemL_.js";import"./use-form-common-props-U6f9D53_.js";import"./_initCloneObject-DfOnBHdn.js";import"./isArrayLikeObject-CQAE3P4Q.js";import"./raf-C-iJO6ki.js";import"./_baseIteratee-iUx42eT-.js";import"./index-DH_vX4BK.js";import"./debounce-BWBxuUbE.js";import"./index-BZS0BBj4.js";import"./index-ZgXgJNHL.js";import"./index-BcimyWJU.js";import"./vnode-C4RX5enz.js";import"./token-DWNpOE8r.js";import"./scroll-bFiZhqzI.js";import"./index-CgoUqbdT.js";import"./use-dialog-BDM4AbF-.js";import"./index-DaNWXg3-.js";import"./refs-Cw5r5QN8.js";const J={class:"mt-4"},Q={key:0},X={key:1},Y={class:"mb-4"},Z={class:"mb-4"},ee={class:"ml-4"},ie={class:"mt-4"},te={key:2},ae={class:"mb-4"},se={key:0,class:"mt-2 text-gray-500"},le={key:3},re={key:0,class:"mb-4 p-4 bg-gray-50 rounded-lg"},oe={class:"text-center"},ne={class:"text-2xl font-bold text-green-600"},de={class:"text-center"},ue={class:"text-2xl font-bold text-red-600"},ce={class:"text-center"},ve={class:"text-2xl font-bold text-blue-600"},fe={class:"text-center"},_e={class:"text-2xl font-bold text-gray-600"},me={class:"mb-4"},pe={key:1,class:"text-gray-500"},ge={key:0,class:"text-xs"},ye={key:1,class:"mt-1 text-gray-600"},he={key:1,class:"text-gray-500"},xe=n({__name:"batch-draw-dialog",props:{activity:{}},emits:["update:modelValue"],setup(e,{emit:n}){function xe(e){if(!e)return"";if("string"==typeof e){if(/^[0-9a-fA-F]+$/.test(e))return e;try{let i=e.replace(/-/g,"+").replace(/_/g,"/");for(;i.length%4;)i+="=";const t=atob(i);return Array.from(t).map(e=>e.charCodeAt(0).toString(16).padStart(2,"0")).join("")}catch(i){return""}}if(!(Array.isArray(e)||e instanceof Uint8Array))return"";try{return Array.from(e).map(e=>{const i=e.toString(16);return 1===i.length?"0"+i:i}).join("")}catch(i){return""}}const we=e,je=n,be=d({get:()=>null!==we.activity,set:e=>je("update:modelValue",e)}),ke=u(0),Ie=u({issueId:null}),Ce=u([]),Se=u(!1),Re=u([]),$e=u([]),ze=u({nickname:"",inviteCode:""}),Ve=u(1),Ae=u(20),Ee=u(0),Pe=u(),Oe=u([]),De=d(()=>{const e={passed:0,failed:0,pending:0,total:Oe.value.length};return Oe.value.forEach(i=>{"passed"===i.verification_status?e.passed++:"failed"===i.verification_status?e.failed++:e.pending++}),e}),{width:Ue}=c(),He=d(()=>`${Math.min(900,Math.max(600,Ue.value-120))}px`);function Le(){return o(this,null,function*(){try{const e=yield P({page:Ve.value,page_size:Ae.value,nickname:ze.value.nickname||void 0,inviteCode:ze.value.inviteCode||void 0});Re.value=e.list,Ee.value=e.total}catch(e){R.error("加载用户列表失败")}})}function Te(e){$e.value=e}function Be(e){Ve.value=e,Le()}function We(e){Ae.value=e,Ve.value=1,Le()}function Fe(){var e;null==(e=Pe.value)||e.clearSelection(),$e.value=[]}function Ke(){return o(this,null,function*(){if(!$e.value.length)return void R.warning("请先选择用户");if(!Ie.value.issueId)return void R.warning("请先选择期数");if(!we.activity)return;const e=$e.value.map(e=>e.id),o=yield O(we.activity.id,Ie.value.issueId,{user_ids:e});Oe.value=o.draws.map(e=>{return o=((e,i)=>{for(var t in i||(i={}))s.call(i,t)&&r(e,t,i[t]);if(a)for(var t of a(i))l.call(i,t)&&r(e,t,i[t]);return e})({},e),i(o,t({verifying:!1,verification_status:void 0,verification_message:void 0,verification_details:void 0}));var o}),ke.value=3})}function Me(e){var i,t;try{const a=e.receipt;if(!a)return!1;const s=null!=(i=a.SelectedIndex)?i:a.selected_index,l=null!=(t=a.Items)?t:a.items;if(Array.isArray(l)&&void 0!==s&&l[s]&&l[s].Name){const e=l[s].Name;return"string"==typeof e&&e.includes("(x2)")}return!1}catch(a){return!1}}function Ne(){return o(this,null,function*(){if(!Ie.value.issueId)return void R.warning("请先选择期数");if(!we.activity)return;let e=0,i=0,t=0;for(const s of Oe.value){const l=s.receipt;if(!l){s.verification_status="failed",s.verification_message="缺少抽奖收据",s.verification_details="没有可用的验证数据",i++;continue}s.verifying=!0,s.verification_status=void 0,s.verification_message="验证中...",s.verification_details=void 0;let r,o,n,d;!(!l.algo_version&&!l.round_id)?(r=l.client_seed||l.ClientSeed,o=l.server_seed_hash||l.ServerSeedHash,n=l.items_root||l.ItemsRoot,d=l.rand_proof||l.RandProof):(r=xe(l.ClientSeed||l.client_seed||l.clientSeed),o=xe(l.ServerSeedHash||l.server_seed_hash||l.serverSeedHash),n=xe(l.ItemsRoot||l.items_root||l.itemsRoot),d=xe(l.RandProof||l.rand_proof||l.randProof));const u={algo_version:l.AlgoVersion||l.algo_version,issue_id:l.RoundId||l.round_id||l.issue_id,draw_id:l.DrawId||l.draw_id,client_seed:r,server_seed_hash:o,items_root:n,weights_total:l.WeightsTotal||l.weights_total||l.weightsTotal,selected_index:void 0!==l.SelectedIndex?l.SelectedIndex:l.selected_index||l.selectedIndex,rand_proof:d},c=["algo_version","issue_id","draw_id","client_seed","server_seed_hash","items_root","rand_proof"].filter(e=>!u[e]);if(c.length>0)s.verification_status="failed",s.verification_message=`缺少必填字段: ${c.join(", ")}`,s.verification_details="请检查收据数据完整性",s.verifying=!1,i++;else try{const a=yield U(we.activity.id,Ie.value.issueId,u);if(a.valid)s.verification_status="passed",s.verification_message="验证通过",s.verification_details="抽奖结果验证成功",e++;else{s.verification_status="failed",s.verification_message=a.message||"验证失败";let e="";a.server_seed_hash_expected&&(e+="服务器种子哈希不匹配; "),a.items_root_expected&&(e+="项目根哈希不匹配; "),a.message&&a.message.includes("rand_proof")&&(e+="随机证明验证失败; "),s.verification_details=e||"请检查抽奖数据完整性",i++}t++}catch(a){s.verification_status="failed",s.verification_message="验证请求失败",s.verification_details="网络连接错误或服务器异常",i++}finally{s.verifying=!1}}0===t?R.error("没有可验证的抽奖记录"):R.info(`验证完成:通过 ${e},失败 ${i},总计处理 ${t}`)})}function qe(){const e=Oe.value.map(e=>({user_id:e.user_id,draw_id:e.draw_id,reward_id:e.reward_id,reward_name:e.reward_name,is_winner:e.is_winner,verification_status:"passed"===e.verification_status?"通过":"failed"===e.verification_status?"失败":"未验证",verification_message:e.verification_message||"",verification_details:e.verification_details||""})),i=["用户ID,抽奖ID,奖励ID,奖励名称,中奖状态,验证状态,验证信息,详细信息"].concat(e.map(e=>`${e.user_id},${e.draw_id},${e.reward_id},"${e.reward_name}",${e.is_winner?"是":"否"},${e.verification_status},"${e.verification_message}","${e.verification_details}"`)).join("\n"),t=new Blob([i],{type:"text/csv;charset=utf-8"}),a=URL.createObjectURL(t),s=document.createElement("a");s.href=a,s.download=`batch_draw_${Date.now()}.csv`,s.click(),URL.revokeObjectURL(a)}return v(()=>we.activity,e=>{e&&(ke.value=0,Re.value=[],$e.value=[],Oe.value=[],Ie.value.issueId=null,ze.value={nickname:"",inviteCode:""},Ve.value=1,Ae.value=20,Ee.value=0,function(){o(this,null,function*(){if(we.activity){Se.value=!0;try{const e=yield H(we.activity.id,1,50);Ce.value=e.list;const i=Ce.value.find(e=>1===e.status);i&&(Ie.value.issueId=i.id)}finally{Se.value=!1}}})}())},{immediate:!0}),(e,i)=>{var t;const a=E,s=A,l=F,r=W,n=B,d=T,u=L,c=I,v=q,P=N,O=M,H=K,je=V,Ue=z,Ge=$,Je=G;return _(),f("div",null,[m(Je,{modelValue:be.value,"onUpdate:modelValue":i[11]||(i[11]=e=>be.value=e),title:`批量抽奖 - ${(null==(t=we.activity)?void 0:t.name)||""}`,width:He.value},{footer:p(()=>[m(v,{onClick:i[5]||(i[5]=e=>be.value=!1)},{default:p(()=>[...i[23]||(i[23]=[b("关闭",-1)])]),_:1}),0===ke.value&&Ie.value.issueId?(_(),w(v,{key:0,type:"primary",onClick:i[6]||(i[6]=e=>ke.value=1)},{default:p(()=>[...i[24]||(i[24]=[b("下一步",-1)])]),_:1})):y("",!0),1===ke.value?(_(),w(v,{key:1,onClick:i[7]||(i[7]=e=>ke.value=0)},{default:p(()=>[...i[25]||(i[25]=[b("上一步",-1)])]),_:1})):y("",!0),1===ke.value&&$e.value.length>0?(_(),w(v,{key:2,type:"primary",onClick:i[8]||(i[8]=e=>ke.value=2)},{default:p(()=>[...i[26]||(i[26]=[b("下一步",-1)])]),_:1})):y("",!0),2===ke.value?(_(),w(v,{key:3,onClick:i[9]||(i[9]=e=>ke.value=1)},{default:p(()=>[...i[27]||(i[27]=[b("上一步",-1)])]),_:1})):y("",!0),3===ke.value?(_(),w(v,{key:4,onClick:i[10]||(i[10]=e=>ke.value=2)},{default:p(()=>[...i[28]||(i[28]=[b("上一步",-1)])]),_:1})):y("",!0)]),default:p(()=>[m(s,{active:ke.value,"finish-status":"success"},{default:p(()=>[m(a,{title:"选择期数"}),m(a,{title:"选择用户"}),m(a,{title:"批量抽奖"}),m(a,{title:"验证结果"})]),_:1},8,["active"]),g("div",J,[0===ke.value?(_(),f("div",Q,[m(u,{model:Ie.value,"label-width":"100px"},{default:p(()=>[m(d,{label:"选择期数"},{default:p(()=>[m(n,{modelValue:Ie.value.issueId,"onUpdate:modelValue":i[0]||(i[0]=e=>Ie.value.issueId=e),placeholder:"请选择期数",loading:Se.value},{default:p(()=>[(_(!0),f(h,null,x(Ce.value,e=>(_(),w(r,{key:e.id,value:e.id,label:`期号: ${e.issue_number}`},{default:p(()=>[g("span",null,j(e.issue_number),1),m(l,{type:1===e.status?"success":"info",size:"small",class:"ml-2"},{default:p(()=>[b(j(1===e.status?"进行中":"已结束"),1)]),_:2},1032,["type"])]),_:2},1032,["value","label"]))),128))]),_:1},8,["modelValue","loading"])]),_:1})]),_:1},8,["model"])])):y("",!0),1===ke.value?(_(),f("div",X,[g("div",Y,[m(H,{gutter:20},{default:p(()=>[m(O,{span:12},{default:p(()=>[m(P,{modelValue:ze.value.nickname,"onUpdate:modelValue":i[1]||(i[1]=e=>ze.value.nickname=e),placeholder:"搜索用户昵称",clearable:"",onClear:Le,onKeyup:k(Le,["enter"])},{append:p(()=>[m(v,{onClick:Le},{default:p(()=>[m(c,null,{default:p(()=>[m(C(S))]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1}),m(O,{span:12},{default:p(()=>[m(P,{modelValue:ze.value.inviteCode,"onUpdate:modelValue":i[2]||(i[2]=e=>ze.value.inviteCode=e),placeholder:"搜索邀请码",clearable:"",onClear:Le,onKeyup:k(Le,["enter"])},{append:p(()=>[m(v,{onClick:Le},{default:p(()=>[m(c,null,{default:p(()=>[m(C(S))]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1})]),g("div",Z,[m(v,{onClick:Le},{default:p(()=>[...i[12]||(i[12]=[b("刷新用户列表",-1)])]),_:1}),m(v,{onClick:Fe},{default:p(()=>[...i[13]||(i[13]=[b("清空选择",-1)])]),_:1}),g("span",ee,"已选择 "+j($e.value.length)+" 位用户",1)]),m(Ue,{data:Re.value,size:"small","max-height":"400",onSelectionChange:Te,ref_key:"userTableRef",ref:Pe},{default:p(()=>[m(je,{type:"selection",width:"55"}),m(je,{prop:"id",label:"ID",width:"80"}),m(je,{prop:"nickname",label:"昵称"}),m(je,{prop:"invite_code",label:"邀请码",width:"120"}),m(je,{prop:"created_at",label:"注册时间",width:"180"},{default:p(({row:e})=>{return[b(j((i=e.created_at,new Date(i).toLocaleString("zh-CN"))),1)];var i}),_:1})]),_:1},8,["data"]),g("div",ie,[m(Ge,{"current-page":Ve.value,"onUpdate:currentPage":i[3]||(i[3]=e=>Ve.value=e),"page-size":Ae.value,"onUpdate:pageSize":i[4]||(i[4]=e=>Ae.value=e),total:Ee.value,"page-sizes":[10,20,50,100],layout:"total, sizes, prev, pager, next",onSizeChange:We,onCurrentChange:Be},null,8,["current-page","page-size","total"])])])):y("",!0),2===ke.value?(_(),f("div",te,[g("div",ae,[g("span",null,"已选择 "+j($e.value.length)+" 位用户进行抽奖",1),m(v,{type:"primary",onClick:Ke,class:"ml-4"},{default:p(()=>[...i[14]||(i[14]=[b("开始批量抽奖",-1)])]),_:1})]),m(Ue,{data:$e.value.slice(0,20),size:"small","max-height":"300"},{default:p(()=>[m(je,{prop:"id",label:"用户ID",width:"80"}),m(je,{prop:"nickname",label:"昵称"}),m(je,{prop:"invite_code",label:"邀请码",width:"120"})]),_:1},8,["data"]),$e.value.length>20?(_(),f("div",se," 显示前20位用户,共"+j($e.value.length)+"位 ",1)):y("",!0)])):y("",!0),3===ke.value?(_(),f("div",le,[De.value.total>0?(_(),f("div",re,[i[19]||(i[19]=g("div",{class:"text-lg font-semibold mb-2"},"验证统计",-1)),m(H,{gutter:20},{default:p(()=>[m(O,{span:6},{default:p(()=>[g("div",oe,[g("div",ne,j(De.value.passed),1),i[15]||(i[15]=g("div",{class:"text-sm text-gray-600"},"验证通过",-1))])]),_:1}),m(O,{span:6},{default:p(()=>[g("div",de,[g("div",ue,j(De.value.failed),1),i[16]||(i[16]=g("div",{class:"text-sm text-gray-600"},"验证失败",-1))])]),_:1}),m(O,{span:6},{default:p(()=>[g("div",ce,[g("div",ve,j(De.value.pending),1),i[17]||(i[17]=g("div",{class:"text-sm text-gray-600"},"待验证",-1))])]),_:1}),m(O,{span:6},{default:p(()=>[g("div",fe,[g("div",_e,j(De.value.total),1),i[18]||(i[18]=g("div",{class:"text-sm text-gray-600"},"总计",-1))])]),_:1})]),_:1})])):y("",!0),g("div",me,[g("span",null,"抽奖结果("+j(Oe.value.length)+" 条)",1),m(v,{type:"primary",onClick:Ne,class:"ml-4"},{default:p(()=>[...i[20]||(i[20]=[b("批量验证",-1)])]),_:1}),m(v,{onClick:qe,class:"ml-2"},{default:p(()=>[...i[21]||(i[21]=[b("导出结果",-1)])]),_:1})]),m(Ue,{data:Oe.value,size:"small","max-height":"400"},{default:p(()=>[m(je,{prop:"user_id",label:"用户ID",width:"80"}),m(je,{label:"奖励"},{default:p(({row:e})=>[g("span",null,j(e.reward_name),1),Me(e)?(_(),w(l,{key:0,type:"warning",size:"small",class:"ml-2"},{default:p(()=>[...i[22]||(i[22]=[b("翻倍",-1)])]),_:1})):y("",!0)]),_:1}),m(je,{prop:"is_winner",label:"中奖",width:"80"},{default:p(({row:e})=>[m(l,{type:e.is_winner?"success":"info"},{default:p(()=>[b(j(e.is_winner?"是":"否"),1)]),_:2},1032,["type"])]),_:1}),m(je,{label:"验证状态",width:"120"},{default:p(({row:e})=>[e.verification_status?(_(),w(l,{key:0,type:"passed"===e.verification_status?"success":"danger"},{default:p(()=>[b(j("passed"===e.verification_status?"验证通过":"验证失败"),1)]),_:2},1032,["type"])):(_(),f("span",pe,"未验证"))]),_:1}),m(je,{label:"验证信息","min-width":"200"},{default:p(({row:e})=>[e.verification_message?(_(),f("div",ge,["failed"===e.verification_status?(_(),w(l,{key:0,type:"danger",size:"small"},{default:p(()=>[b(j(e.verification_message),1)]),_:2},1024)):y("",!0),e.verification_details?(_(),f("div",ye,j(e.verification_details),1)):y("",!0)])):(_(),f("span",he,"-"))]),_:1}),m(je,{label:"操作",width:"100"},{default:p(({row:e})=>[m(v,{size:"small",onClick:i=>function(e){return o(this,null,function*(){if(Ie.value.issueId){if(we.activity){e.verifying=!0,e.verification_status=void 0,e.verification_message=void 0,e.verification_details=void 0;try{let t,a,s,l,r;if(e.draw_id)try{const i=yield D(e.draw_id);t={AlgoVersion:i.algo_version,RoundId:i.round_id,DrawId:i.draw_id,ClientSeed:i.client_seed,ServerSeedHash:i.server_seed_hash,ItemsRoot:i.items_root,WeightsTotal:i.weights_total,SelectedIndex:i.selected_index,RandProof:i.rand_proof}}catch(i){}if(!t&&e.receipt&&(t=e.receipt),!t)return R.error("没有可用的抽奖收据"),void(e.verifying=!1);t.algo_version||t.round_id?(a=t.client_seed||t.ClientSeed,s=t.server_seed_hash||t.ServerSeedHash,l=t.items_root||t.ItemsRoot,r=t.rand_proof||t.RandProof):(a=xe(t.ClientSeed||t.client_seed||t.clientSeed),s=xe(t.ServerSeedHash||t.server_seed_hash||t.serverSeedHash),l=xe(t.ItemsRoot||t.items_root||t.itemsRoot),r=xe(t.RandProof||t.rand_proof||t.randProof));const o={algo_version:t.AlgoVersion||t.algo_version,issue_id:t.RoundId||t.round_id||t.issue_id,draw_id:t.DrawId||t.draw_id,client_seed:a,server_seed_hash:s,items_root:l,weights_total:t.WeightsTotal||t.weights_total||t.weightsTotal,selected_index:void 0!==t.SelectedIndex?t.SelectedIndex:t.selected_index||t.selectedIndex,rand_proof:r},n=["algo_version","issue_id","draw_id","client_seed","server_seed_hash","items_root","rand_proof"].filter(e=>!o[e]);if(n.length>0)return e.verification_status="failed",e.verification_message=`缺少必填字段: ${n.join(", ")}`,e.verification_details="请检查收据数据完整性",R.error(`验证失败:缺少必填字段 - ${n.join(", ")}`),void(e.verifying=!1);const d=yield U(we.activity.id,Ie.value.issueId,o);if(d.valid)e.verification_status="passed",e.verification_message="验证通过",e.verification_details="抽奖结果验证成功",R.success("验证通过");else{e.verification_status="failed",e.verification_message=d.message||"验证失败";let i="";d.server_seed_hash_expected&&(i+="服务器种子哈希不匹配; "),d.items_root_expected&&(i+="项目根哈希不匹配; "),d.message&&d.message.includes("rand_proof")&&(i+="随机证明验证失败; "),e.verification_details=i||"请检查抽奖数据完整性",R.error("验证失败:"+d.message)}}catch(t){e.verification_status="failed",e.verification_message="验证请求失败",e.verification_details="网络连接错误或服务器异常",R.error("验证请求失败,请检查网络连接")}finally{e.verifying=!1}}}else R.warning("请先选择期数")})}(e),loading:e.verifying},{default:p(()=>[b(j(e.verifying?"验证中":"验证"),1)]),_:2},1032,["onClick","loading"])]),_:1})]),_:1},8,["data"])])):y("",!0)])]),_:1},8,["modelValue","title","width"])])}}});export{xe as default};
|