Files
2026-10-20 16:52:05 +03:30

3 lines
19 KiB
JavaScript

import{_ as Ye}from"./BasicMainCard-33e38576.js";import{_ as Ze}from"./button.vue_vue_type_style_index_0_lang-f90e25b2.js";import{d as et,v as tt,u as at,i as u,h as Ee,j as E,z as ot,x as nt,y as st,o as n,c as s,e as d,w as X,b as o,t as _,f as Te,F as f,q as F,n as g,l as p,k as Be,J as L,aH as R,H as z,M as lt,N as it,B as ct,s as Ue,A as rt}from"./index-1ba0f9ec.js";import{i as ut}from"./index-dfdb843b.js";import{I as G}from"./Icon-29e38d16.js";import{m as dt,n as pt,o as vt,p as _t,q as mt,r as ht,t as ft}from"./stepChallenge-5bbad908.js";import{a as gt,g as bt}from"./convert-2ad76038.js";import{I as yt}from"./index-aafc0fe2.js";import{T as $e}from"./index-f22a4554.js";import{S as kt}from"./index-4bff02a6.js";import{a as xt}from"./index-7363de82.js";import{P as wt,T as St}from"./index-e22339b6.js";import{_ as Ct}from"./_plugin-vue_export-helper-31e07528.js";import"./Grid-660f1a55.js";import"./index-c136a321.js";import"./Col-f8806a10.js";import"./styleChecker-19ce40ea.js";import"./isPlainObject-e945bc1f.js";import"./vnode-c4e67237.js";import"./index-8f2b7e91.js";import"./adminDb-b061a757.js";import"./supabaseTableQuery-e0472e9c.js";import"./SearchOutlined-95278fe5.js";import"./omit-f5d28cd3.js";import"./FormItemContext-33ef1221.js";import"./index-73cafb1e.js";import"./shallowequal-e0d9eafb.js";import"./index-3f6d5caa.js";import"./isSymbol-355a1404.js";import"./useState-dcd360f8.js";import"./useRefs-5e33302c.js";import"./_flatRest-7877cdf8.js";import"./isMobile-e2e89480.js";import"./css-aae66f86.js";import"./DialogWrap-394d7eb0.js";import"./pickAttrs-0ddf9a54.js";import"./LeftOutlined-93011b30.js";import"./index-876da578.js";import"./index-e0664925.js";import"./toArray-41940180.js";import"./useMemo-ee45fb46.js";const q=j=>(lt("data-v-0b66c0a2"),j=j(),it(),j),zt={class:"feedback-page"},qt={class:"feedback-page__inner"},It={class:"feedback-page__header"},Ft=q(()=>o("div",{class:"text-sm text-gray-500 mb-1"},"بازخوردهای چالش",-1)),Pt={class:"text-lg font-semibold m-0"},Et={class:"feedback-layout"},Tt={class:"feedback-menu"},Bt=["onClick"],Ut={class:"feedback-menu__item-main"},$t={key:0,class:"feedback-menu__steps"},At=["onClick"],Mt={key:1,class:"feedback-menu__steps-note"},Lt={key:0,class:"feedback-menu__hint"},Rt={class:"feedback-content"},jt={key:0,class:"py-16 flex justify-center"},Vt={key:0,class:"text-center text-gray-500 py-12"},Nt={key:1,class:"step-feedback-active mb-4"},Ot=q(()=>o("span",{class:"step-feedback-active__label"},"بازخوردهای فعال این مرحله:",-1)),Dt={class:"step-feedback-active__chips"},Ht={key:0,class:"text-xs text-gray-400"},Kt={key:2,class:"step-feedback-desc mb-4"},Wt={key:3,class:"text-center text-gray-500 py-12"},Jt={class:"space-y-4"},Xt={class:"flex flex-wrap items-center justify-between gap-3"},Gt=q(()=>o("h3",{class:"m-0 text-base font-semibold"},"پیشنهاد و انتقاد",-1)),Qt=q(()=>o("p",{class:"text-sm text-gray-500 m-0"}," پیام‌هایی که کاربران در پایان چالش نوشته‌اند. ",-1)),Yt={class:"space-y-4"},Zt={class:"flex flex-wrap items-center justify-between gap-3"},ea=q(()=>o("h3",{class:"m-0 text-base font-semibold"},"بازخورد متنی",-1)),ta={class:"space-y-4"},aa={class:"flex flex-wrap items-center justify-between gap-3"},oa=q(()=>o("h3",{class:"m-0 text-base font-semibold"},"عکس",-1)),na={key:0,class:"text-center text-gray-500 py-12"},sa={class:"photo-grid"},la={class:"photo-card__body"},ia=["title"],ca={class:"text-[11px] text-gray-500 mt-0.5 truncate",dir:"ltr"},ra=["onClick"],ua={key:0,class:"photo-pagination"},da={class:"space-y-4"},pa={class:"flex flex-wrap items-center justify-between gap-3"},va=q(()=>o("h3",{class:"m-0 text-base font-semibold"},"صوت ضبط‌شده",-1)),_a={key:0,class:"voice-player-row"},ma=["src"],ha=["onClick"],fa={class:"space-y-4"},ga={class:"flex flex-wrap items-center justify-between gap-3"},ba=q(()=>o("h3",{class:"m-0 text-base font-semibold"},"سوال چندگزینه‌ای",-1)),ya={key:0,class:"text-center text-gray-500 py-12"},ka={class:"mcq-block__question"},xa={class:"font-semibold text-base"},wa={class:"text-xs text-gray-500 mt-1"},Sa={class:"mcq-block__grid"},Ca={class:"mcq-block__table"},za={class:"mcq-block__chart"},qa={class:"mcq-legend"},Ia={class:"truncate"},Fa={class:"shrink-0 text-gray-600"},Pa=et({__name:"index",setup(j){const T=yt.Search,Ae=wt,V=St,Me=$e,Le=$e.TabPane,Re=tt(),je=at(),w=Number(Re.params.challengeId),_e=u(""),Q=u(!0),r=u("text"),m=u(""),P=u([]),Y=u(""),Z=u(""),ee=u(""),te=u(""),ae=u(""),oe=u([]),N=u([]),k=u(1),B=u(12),O=u(0),ne=u([]),U=u([]),me=u([]),v=Ee({text:!1,photo:!1,voice:!1,mcq:!1,completion:!1});function D(e=10){const t=Ee({current:1,pageSize:e,total:0,showSizeChanger:!0,pageSizeOptions:["10","20","50","100"],showTotal:l=>`${l} مورد`,onChange(l,c){t.current=l,t.pageSize=c}});return t}function H(e,t){e.onChange=(l,c)=>{e.current=l,e.pageSize=c,t()}}const b=D(10),x=D(10),y=D(10),h=D(8);h.pageSizeOptions=["8","16","32","50"];function se(){b.current=1,x.current=1,y.current=1,h.current=1}const le=new Map,K=new Map,$=E(()=>P.value.find(e=>String(e.id)===m.value)||null),S=E(()=>{const e=Number(m.value);return Number.isFinite(e)&&e>0?e:null}),he=[{key:"text",label:"بازخورد متنی",icon:"vuesax-linear:document-text"},{key:"photo",label:"عکس",icon:"vuesax-linear:gallery"},{key:"voice",label:"صوت ضبط‌شده",icon:"vuesax-linear:microphone-2"},{key:"mcq",label:"سوال چندگزینه‌ای",icon:"vuesax-linear:task-square"},{key:"completion",label:"پیشنهاد و انتقاد",icon:"vuesax-linear:message-text"}];function A(e,t){return t==="completion"?!0:t==="text"?!!e.enable_feedback_text:t==="photo"?!!e.enable_photo_upload:t==="voice"?!!e.enable_voice_upload:t==="mcq"?!!e.enable_mcq:!1}const fe=E(()=>he.map(e=>{if(e.key==="completion")return{...e,steps:[]};const t=P.value.filter(l=>A(l,e.key));return{...e,steps:t}}).filter(e=>e.key==="completion"||e.steps.length>0)),I=E(()=>r.value==="completion"?[]:P.value.filter(e=>A(e,r.value))),Ve=E(()=>{const e=$.value;return e?[{key:"text",label:"متنی",enabled:!!e.enable_feedback_text},{key:"photo",label:"عکس",enabled:!!e.enable_photo_upload},{key:"voice",label:"صوت",enabled:!!e.enable_voice_upload},{key:"mcq",label:"چندگزینه‌ای",enabled:!!e.enable_mcq}]:[]}),ge=E(()=>Ve.value.filter(e=>e.enabled));function ie(e){if(e==="completion")return;const t=P.value.filter(c=>A(c,e));if(!t.length){m.value="";return}t.some(c=>String(c.id)===m.value)||(m.value=String(t[0].id))}function be(){const e=$.value;if(!e||r.value==="completion"||A(e,r.value))return;const t=he.find(l=>l.key!=="completion"&&A(e,l.key));r.value=(t==null?void 0:t.key)||"completion"}function Ne(e){ie(e),r.value=e}async function Oe(e,t){const l=r.value!==e;m.value!==String(t)&&(k.value=1,se()),m.value=String(t),r.value=e,l||await J(e)}const De=[{title:"ردیف",dataIndex:"index",key:"index",width:70,align:"center"},{title:"نام کاربر",dataIndex:"user_name",key:"user_name"},{title:"شماره موبایل",dataIndex:"user_phone",key:"user_phone",width:140},{title:"متن بازخورد",dataIndex:"feedback_text",key:"feedback_text"}],He=[{title:"ردیف",dataIndex:"index",key:"index",width:70,align:"center"},{title:"نام کاربر",dataIndex:"user_name",key:"user_name"},{title:"شماره موبایل",dataIndex:"user_phone",key:"user_phone",width:140},{title:"پیشنهاد و انتقاد",dataIndex:"feedback_text",key:"feedback_text"}],Ke=[{title:"ردیف",dataIndex:"index",key:"index",width:70,align:"center"},{title:"نام کاربر",dataIndex:"user_name",key:"user_name"},{title:"شماره موبایل",dataIndex:"user_phone",key:"user_phone",width:140},{title:"صوت ضبط‌شده کاربر",key:"voice"}],We=[{title:"ردیف",dataIndex:"index",key:"index",width:60,align:"center"},{title:"نام کاربر",dataIndex:"user_name",key:"user_name"},{title:"شماره موبایل",dataIndex:"user_phone",key:"user_phone",width:120},{title:"پاسخ",dataIndex:"answer_label",key:"answer_label"}];function Je(e,t){t instanceof HTMLElement?le.set(e,t):le.delete(e)}function W(e,t="image"){return e?t==="audio"?gt(e):bt(e):""}function ye(){je.push({name:"stepChallengesMain",query:{tab:"progress"}})}async function ke(e,t,l="image"){var c;try{const C=W(e,l);if(!C){z.error("آدرس فایل معتبر نیست");return}const a=await fetch(C);if(!a.ok)throw new Error("download failed");const i=await a.blob(),ve=((c=e.split(".").pop())==null?void 0:c.split("?")[0])||"bin",Pe=URL.createObjectURL(i),M=document.createElement("a");M.href=Pe,M.download=`${t}.${ve}`,document.body.appendChild(M),M.click(),M.remove(),URL.revokeObjectURL(Pe)}catch{window.open(W(e,l),"_blank")}}function xe(){K.forEach(e=>e.dispose()),K.clear()}function Xe(){xe();const e=["#2563EB","#16A34A","#F59E0B","#DC2626","#7C3AED","#0891B2","#DB2777"];for(const t of U.value){const l=le.get(t.step_id);if(!l)continue;const c=ut(l);K.set(t.step_id,c);const C=(t.option_stats||[]).map((a,i)=>({name:a.label||`گزینه ${a.optionIndex+1}`,value:a.count,itemStyle:{color:e[i%e.length]}}));c.setOption({textStyle:{fontFamily:"iran-sans"},tooltip:{trigger:"item",textStyle:{fontFamily:"iran-sans"},formatter:a=>{const i=a.percent??0;return`${a.name}<br/>${a.value} نفر · ${i}%`}},legend:{orient:"horizontal",bottom:0,type:"scroll",textStyle:{fontFamily:"iran-sans"}},series:[{name:"آمار گزینه‌ها",type:"pie",radius:"65%",center:["50%","45%"],avoidLabelOverlap:!0,itemStyle:{borderRadius:4,borderColor:"#fff",borderWidth:2},label:{show:!0,fontFamily:"iran-sans",formatter:`{b}
{c} نفر ({d}%)`},labelLine:{show:!0},emphasis:{label:{show:!0,fontSize:14,fontWeight:"bold",fontFamily:"iran-sans"},itemStyle:{shadowBlur:10,shadowOffsetX:0,shadowColor:"rgba(0, 0, 0, 0.15)"}},data:C.length?C:[{name:"بدون پاسخ",value:0,itemStyle:{color:"#E5E7EB"}}]}]})}}async function ce(){if(!S.value){oe.value=[],b.total=0;return}v.text=!0;try{const e=await vt(w,Y.value,S.value,b.current,b.pageSize);oe.value=e.rows,b.total=e.total,b.current=e.page,b.pageSize=e.pageSize}catch(e){z.error(e.message||"خطا در بارگذاری بازخورد متنی")}finally{v.text=!1}}function we(){b.current=1,ce()}async function re(){if(!S.value){N.value=[],O.value=0;return}v.photo=!0;try{const e=await _t(w,Z.value,S.value,k.value,B.value);N.value=e.rows,O.value=e.total,k.value=e.page,B.value=e.pageSize}catch(e){z.error(e.message||"خطا در بارگذاری عکس‌ها")}finally{v.photo=!1}}function Se(){k.value=1,re()}function Ce(e,t){k.value=e,B.value=t,re()}async function ue(){if(!S.value){ne.value=[],y.total=0;return}v.voice=!0;try{const e=await mt(w,ee.value,S.value,y.current,y.pageSize);ne.value=e.rows,y.total=e.total,y.current=e.page,y.pageSize=e.pageSize}catch(e){z.error(e.message||"خطا در بارگذاری صوت‌ها")}finally{v.voice=!1}}function ze(){y.current=1,ue()}async function de(){if(!S.value){U.value=[],h.total=0;return}v.mcq=!0;try{const e=await ht(w,te.value,S.value,h.current,h.pageSize);U.value=e;const t=e[0];h.total=(t==null?void 0:t.total_answers)??0,t!=null&&t.page&&(h.current=t.page),t!=null&&t.pageSize&&(h.pageSize=t.pageSize),await ct(),Xe()}catch(e){z.error(e.message||"خطا در بارگذاری سوالات چندگزینه‌ای")}finally{v.mcq=!1}}function qe(){h.current=1,de()}async function pe(){v.completion=!0;try{const e=await ft(w,ae.value,x.current,x.pageSize);me.value=e.rows,x.total=e.total,x.current=e.page,x.pageSize=e.pageSize}catch(e){z.error(e.message||"خطا در بارگذاری پیشنهاد و انتقاد")}finally{v.completion=!1}}function Ie(){x.current=1,pe()}async function J(e){e==="text"&&await ce(),e==="photo"&&await re(),e==="voice"&&await ue(),e==="mcq"&&await de(),e==="completion"&&await pe()}H(b,ce),H(y,ue),H(h,de),H(x,pe);async function Ge(){k.value=1,se(),be(),await J(r.value)}async function Qe(){if(!w){z.error("شناسه چالش نامعتبر است"),ye();return}Q.value=!0;try{const[e,t]=await Promise.all([dt(w),pt(w)]);_e.value=(e==null?void 0:e.title)||"",P.value=t;const l=t.find(c=>c.enable_feedback_text||c.enable_photo_upload||c.enable_voice_upload||c.enable_mcq);m.value=l?String(l.id):t.length?String(t[0].id):"",be(),ie(r.value),await J(r.value)}catch(e){z.error(e.message||"خطا در بارگذاری صفحه")}finally{Q.value=!1}}ot(r,e=>{k.value=1,se(),ie(e),J(e)});function Fe(){K.forEach(e=>e.resize())}return nt(()=>{Qe(),window.addEventListener("resize",Fe)}),st(()=>{window.removeEventListener("resize",Fe),xe()}),(e,t)=>{const l=Ze,c=Ye;return n(),s("div",zt,[d(c,null,{default:X(()=>{var C;return[o("div",qt,[o("div",It,[o("div",null,[Ft,o("h2",Pt,_(_e.value||"—"),1)]),d(l,{onClick:ye},{default:X(()=>[d(G,{icon:"vuesax-linear:arrow-right",class:"ml-1"}),Te(" بازگشت به پیشرفت کاربران ")]),_:1})]),o("div",Et,[o("aside",Tt,[(n(!0),s(f,null,F(fe.value,a=>(n(),s("button",{key:a.key,type:"button",class:Ue(["feedback-menu__item",{"feedback-menu__item--active":r.value===a.key}]),onClick:i=>Ne(a.key)},[o("div",Ut,[d(G,{icon:a.icon,class:"text-lg shrink-0"},null,8,["icon"]),o("span",null,_(a.label),1)]),a.steps.length?(n(),s("div",$t,[(n(!0),s(f,null,F(a.steps,i=>(n(),s("span",{key:i.id,class:Ue(["feedback-menu__step",{"feedback-menu__step--active":r.value===a.key&&m.value===String(i.id)}]),onClick:rt(ve=>Oe(a.key,i.id),["stop"])},_(i.label),11,At))),128))])):a.key==="completion"?(n(),s("div",Mt," پایان چالش ")):g("",!0)],10,Bt))),128)),fe.value.length?g("",!0):(n(),s("p",Lt," هیچ بازخورد فعالی برای این چالش تعریف نشده است. "))]),o("section",Rt,[Q.value?(n(),s("div",jt,[d(p(kt),{size:"large"})])):(n(),s(f,{key:1},[P.value.length?(n(),s(f,{key:1},[r.value!=="completion"?(n(),s(f,{key:0},[I.value.length?(n(),Be(p(Me),{key:0,activeKey:m.value,"onUpdate:activeKey":t[0]||(t[0]=a=>m.value=a),class:"step-feedback-tabs",onChange:Ge},{default:X(()=>[(n(!0),s(f,null,F(I.value,a=>(n(),Be(p(Le),{key:String(a.id),tab:a.label},null,8,["tab"]))),128))]),_:1},8,["activeKey"])):g("",!0),$.value?(n(),s("div",Nt,[Ot,o("div",Dt,[(n(!0),s(f,null,F(ge.value,a=>(n(),s("span",{key:a.key,class:"step-feedback-chip step-feedback-chip--on"},_(a.label),1))),128)),ge.value.length?g("",!0):(n(),s("span",Ht," هیچ بازخوردی برای این مرحله فعال نیست "))])])):g("",!0),(C=$.value)!=null&&C.description?(n(),s("div",Kt,_($.value.description),1)):g("",!0),I.value.length?g("",!0):(n(),s("div",Wt," هیچ مرحله‌ای این نوع بازخورد را فعال ندارد. "))],64)):g("",!0),L(o("div",Jt,[o("div",Xt,[Gt,d(p(T),{value:ae.value,"onUpdate:value":t[1]||(t[1]=a=>ae.value=a),placeholder:"جستجو بر اساس نام، موبایل یا متن","allow-clear":"",class:"max-w-sm",onSearch:Ie,onPressEnter:Ie},null,8,["value"])]),Qt,d(p(V),{columns:He,"data-source":me.value,loading:v.completion,pagination:p(x),"row-key":"id",bordered:"",size:"middle"},null,8,["data-source","loading","pagination"])],512),[[R,r.value==="completion"]]),L(o("div",Yt,[o("div",Zt,[ea,d(p(T),{value:Y.value,"onUpdate:value":t[2]||(t[2]=a=>Y.value=a),placeholder:"جستجو بر اساس نام، موبایل یا متن","allow-clear":"",class:"max-w-sm",onSearch:we,onPressEnter:we},null,8,["value"])]),d(p(V),{columns:De,"data-source":oe.value,loading:v.text,pagination:p(b),"row-key":"id",bordered:"",size:"middle"},null,8,["data-source","loading","pagination"])],512),[[R,r.value==="text"&&I.value.length]]),L(o("div",ta,[o("div",aa,[oa,d(p(T),{value:Z.value,"onUpdate:value":t[3]||(t[3]=a=>Z.value=a),placeholder:"جستجو بر اساس نام یا شماره موبایل","allow-clear":"",class:"max-w-sm",onSearch:Se,onPressEnter:Se},null,8,["value"])]),!N.value.length&&!v.photo?(n(),s("div",na," عکسی برای این مرحله ثبت نشده است. ")):(n(),s(f,{key:1},[o("div",sa,[(n(!0),s(f,null,F(N.value,a=>(n(),s("div",{key:a.id,class:"photo-card"},[d(p(xt),{src:W(a.photo_url,"image"),preview:{mask:"پیش‌نمایش"},class:"photo-card__image"},null,8,["src"]),o("div",la,[o("div",{class:"font-semibold text-xs truncate",title:a.user_name},_(a.user_name),9,ia),o("div",ca,_(a.user_phone||"—"),1),o("button",{type:"button",class:"photo-card__download",title:"دانلود",onClick:i=>ke(a.photo_url,`photo-${a.id}`,"image")},[d(G,{icon:"vuesax-linear:document-download"}),Te(" دانلود ")],8,ra)])]))),128))]),O.value>0?(n(),s("div",ua,[d(p(Ae),{current:k.value,"onUpdate:current":t[4]||(t[4]=a=>k.value=a),"page-size":B.value,"onUpdate:pageSize":t[5]||(t[5]=a=>B.value=a),total:O.value,"show-size-changer":!0,"page-size-options":["12","24","36","48"],"show-total":a=>`${a} عکس`,onChange:Ce,onShowSizeChange:Ce},null,8,["current","page-size","total","show-total"])])):g("",!0)],64))],512),[[R,r.value==="photo"&&I.value.length]]),L(o("div",da,[o("div",pa,[va,d(p(T),{value:ee.value,"onUpdate:value":t[6]||(t[6]=a=>ee.value=a),placeholder:"جستجو بر اساس نام یا شماره موبایل","allow-clear":"",class:"max-w-sm",onSearch:ze,onPressEnter:ze},null,8,["value"])]),d(p(V),{columns:Ke,"data-source":ne.value,loading:v.voice,pagination:p(y),"row-key":"id",bordered:"",size:"middle"},{bodyCell:X(({column:a,record:i})=>[a.key==="voice"?(n(),s("div",_a,[o("audio",{src:W(i.voice_url,"audio"),controls:"",preload:"metadata",class:"voice-player"},null,8,ma),o("button",{type:"button",class:"voice-download-btn",title:"دانلود",onClick:ve=>ke(i.voice_url,`voice-${i.id}`,"audio")},[d(G,{icon:"vuesax-linear:document-download"})],8,ha)])):g("",!0)]),_:1},8,["data-source","loading","pagination"])],512),[[R,r.value==="voice"&&I.value.length]]),L(o("div",fa,[o("div",ga,[ba,d(p(T),{value:te.value,"onUpdate:value":t[7]||(t[7]=a=>te.value=a),placeholder:"جستجو بر اساس نام یا شماره موبایل","allow-clear":"",class:"max-w-sm",onSearch:qe,onPressEnter:qe},null,8,["value"])]),!U.value.length&&!v.mcq?(n(),s("div",ya," سوال چندگزینه‌ای برای این مرحله تعریف نشده یا پاسخی ثبت نشده است. ")):g("",!0),(n(!0),s(f,null,F(U.value,a=>(n(),s("div",{key:a.step_id,class:"mcq-block"},[o("div",ka,[o("div",xa,_(a.question),1),o("div",wa,"تعداد پاسخ‌ها: "+_(a.total_answers),1)]),o("div",Sa,[o("div",Ca,[d(p(V),{columns:We,"data-source":a.answers,pagination:p(h),"row-key":"id",bordered:"",size:"small"},null,8,["data-source","pagination"])]),o("div",za,[o("div",{ref_for:!0,ref:i=>Je(a.step_id,i),class:"mcq-chart"},null,512),o("div",qa,[(n(!0),s(f,null,F(a.option_stats,i=>(n(),s("div",{key:i.optionIndex,class:"mcq-legend__item"},[o("span",Ia,_(i.label||`گزینه ${i.optionIndex+1}`),1),o("span",Fa,_(i.count)+" نفر · "+_(i.percent)+"٪",1)]))),128))])])])]))),128))],512),[[R,r.value==="mcq"&&I.value.length]])],64)):(n(),s("div",Vt," مرحله‌ای برای این چالش تعریف نشده است. "))],64))])])])]}),_:1})])}}});const bo=Ct(Pa,[["__scopeId","data-v-0b66c0a2"]]);export{bo as default};