PageSourceSearch

https://comeu.ai/static/js/async/321.8d33ae5e03.js

js comeu.ai collected 2026-10-05 12:02:49 UTC 16,781 bytes, 2 lines download raw bytes

1/*! LICENSE: 321.8d33ae5e03.js.LICENSE.txt */
2"use strict";(self.rspackChunknewapi_web=self.rspackChunknewapi_web||[]).push([[321],{55097(e,t,a){var s=a(56889),r=a(82763);async function n(){return(await s.FH.get("/api/support/tickets",{disableDuplicate:!0})).data.data||[]}async function i(e){return(await s.FH.post("/api/support/tickets",e)).data.data}async function l(e){return(await s.FH.get(`/api/support/tickets/${encodeURIComponent(e)}`,{disableDuplicate:!0})).data.data}async function d(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return(await s.FH.post(`/api/support/tickets/${encodeURIComponent(e)}/messages`,{body:t,attachments:a})).data.data}async function c(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return(await s.FH.get((0,r.Gx)(e,t,a),{disableDuplicate:!0,responseType:"blob",skipErrorHandler:!0})).data}async function o(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(await s.FH.get("/api/support-admin/tickets",{disableDuplicate:!0,params:e})).data.data||[]}async function u(e){return(await s.FH.get(`/api/support-admin/tickets/${encodeURIComponent(e)}`,{disableDuplicate:!0})).data.data}async function m(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return(await s.FH.post(`/api/support-admin/tickets/${encodeURIComponent(e)}/reply`,{body:t,attachments:a})).data.data}async function p(e,t){return(await s.FH.post(`/api/support-admin/tickets/${encodeURIComponent(e)}/status`,t)).data.data}a.d(t,{C1:()=>o,Cz:()=>l,dp:()=>n,li:()=>m,mq:()=>i,ok:()=>p,tK:()=>u,wA:()=>d,wZ:()=>c})},12709(e,t,a){a.d(t,{uU:()=>d,Cj:()=>o,mT:()=>c});var s=a(23579);let r=(0,a(53079).A)("image-plus",[["path",{d:"M16 5h6",key:"1vod17"}],["path",{d:"M19 2v6",key:"4bpg5p"}],["path",{d:"M21 11.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7.5",key:"1ue2ih"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}]]);var n=a(6631),i=a(31371),l=a(55097);function d(e){let{label:t,onChange:a}=e;return(0,s.jsxs)("label",{className:"border-input bg-background hover:bg-muted inline-flex h-8 w-fit cursor-pointer items-center gap-2 rounded-lg border px-3 text-sm transition-colors",children:[(0,s.jsx)(r,{className:"size-4"}),(0,s.jsx)("span",{children:t}),(0,s.jsx)("input",{className:"sr-only",type:"file",accept:"image/png,image/jpeg,image/webp,image/gif",multiple:!0,onChange:e=>{a(e.target.files),e.target.value=""}})]})}function c(e){let{attachments:t,onRemove:a}=e;return 0===t.length?null:(0,s.jsx)("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-4",children:t.map((e,t)=>(0,s.jsxs)("div",{className:"group relative overflow-hidden rounded-lg border",children:[(0,s.jsx)("img",{src:e.data_url,alt:e.file_name,className:"aspect-square w-full object-cover"}),(0,s.jsx)("button",{type:"button",className:"bg-background/90 absolute top-1 right-1 rounded-full p-1 shadow-sm",onClick:()=>a(t),"aria-label":"Remove image",children:(0,s.jsx)(n.A,{className:"size-3.5"})})]},`${e.file_name}:${e.data_url}`))})}function o(e){let{ticketId:t,message:a,admin:r=!1}=e;return a.attachments?.length?(0,s.jsx)("div",{className:"mt-3 grid grid-cols-2 gap-2",children:a.attachments.map(e=>(0,s.jsx)(u,{ticketId:t,attachment:e,admin:r},e.id))}):null}function u(e){let{ticketId:t,attachment:a,admin:r}=e,[n,d]=(0,i.useState)(""),[c,o]=(0,i.useState)(!1);return((0,i.useEffect)(()=>{let e=!0,s="";return d(""),o(!1),(0,l.wZ)(t,a,r).then(t=>{(s=URL.createObjectURL(t),e)?d(s):URL.revokeObjectURL(s)}).catch(()=>{e&&o(!0)}),()=>{e=!1,s&&URL.revokeObjectURL(s)}},[t,a,r]),c)?(0,s.jsx)("div",{className:"text-muted-foreground flex aspect-square w-full items-center justify-center rounded-lg border text-xs",children:"图片加载失败"}):n?(0,s.jsx)("a",{href:n,target:"_blank",rel:"noreferrer",className:"block overflow-hidden rounded-lg border",children:(0,s.jsx)("img",{src:n,alt:a.file_name,className:"aspect-square w-full object-cover"})}):(0,s.jsx)("div",{className:"text-muted-foreground flex aspect-square w-full items-center justify-center rounded-lg border text-xs",children:"图片加载中..."})}},82763(e,t,a){let s=new Set(["image/png","image/jpeg","image/webp","image/gif"]);function r(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return`${a?"/api/support-admin/tickets":"/api/support/tickets"}/${encodeURIComponent(e)}/attachments/${t.id}`}function n(e){let t=[...e?.items||[]].filter(e=>"file"===e.kind).map(e=>e.getAsFile()).filter(e=>!!e).filter(e=>e.type.startsWith("image/"));return t.length>0?t:[...e?.files||[]].filter(e=>e.type.startsWith("image/"))}async function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,a=[...e||[]];if(0===a.length)return[];if(a.length+t>4)throw Error("最多上传 4 张图片");let r=[];for(let e of a){if(!s.has(e.type))throw Error("仅支持 PNG、JPG、WebP 或 GIF 图片");if(e.size>3145728)throw Error("单张图片不能超过 3MB");r.push({file_name:e.name||`pasted-image-${r.length+1}.png`,content_type:e.type,data_url:await function(e){return new Promise((t,a)=>{let s=new FileReader;s.addEventListener("load",()=>t(String(s.result||"")),{once:!0}),s.addEventListener("error",()=>
2a(Error("图片读取失败")),{once:!0}),s.readAsDataURL(e)})}(e)})}return r}a.d(t,{B0:()=>i,Gx:()=>r,J4:()=>n})},94806(e,t,a){function s(e,t){return({open:t("Ticket status open"),waiting_customer:t("Ticket status waiting customer"),resolved:t("Ticket status resolved"),closed:t("Ticket status closed")})[e]||e}function r(e,t){return({normal:t("Normal"),high:t("High"),urgent:t("Urgent")})[e]||e}a.d(t,{BS:()=>r,Rh:()=>s},{gC:{open:"border-amber-200 bg-amber-50 text-amber-800 hover:bg-amber-50 dark:border-amber-900/60 dark:bg-amber-950/30 dark:text-amber-300",waiting_customer:"border-sky-200 bg-sky-50 text-sky-800 hover:bg-sky-50 dark:border-sky-900/60 dark:bg-sky-950/30 dark:text-sky-300",resolved:"border-zinc-200 bg-zinc-50 text-zinc-600 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900/40 dark:text-zinc-300",closed:"border-zinc-200 bg-zinc-50 text-zinc-600 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900/40 dark:text-zinc-300"},iS:{open:"outline",waiting_customer:"outline",resolved:"outline",closed:"outline"}})},46552(e,t,a){a.r(t),a.d(t,{component:()=>F});var s=a(23579),r=a(52093),n=a(47953),i=a(8273),l=a(31348),d=a(52651),c=a(59961),o=a(74242),u=a(2872),m=a(31371),p=a(72407),g=a(36461),h=a(64156),x=a(40278),f=a(31807),b=a(55653),j=a(11231),v=a(51183),y=a(67737),k=a(55097),w=a(12709),N=a(82763),_=a(94806);let C=["open","waiting_customer","resolved","closed"],R=["",...C],S=[{value:"all",labelKey:"All tickets"},{value:"pending",labelKey:"Pending tickets"},{value:"ended",labelKey:"Ended tickets"}],z={all:void 0,pending:["open","waiting_customer"],ended:["resolved","closed"]},A=["normal","high","urgent"];function E(){window.dispatchEvent(new Event("support-unread-refresh"))}function U(e,t){return e.username?.trim()||e.email?.trim()||e.newapi_user_id?.trim()||t}function $(e){if(!e)return"-";let t=new Date(e);return Number.isNaN(t.getTime())?"-":t.toLocaleString()}function B(e){return e.last_message_at||e.updated_at||e.created_at}function D(e){let t=Date.parse(B(e));return Number.isNaN(t)?0:t}let F=function(){let{t:e}=(0,p.Bd)(),[t,a]=(0,m.useState)([]),[F,L]=(0,m.useState)(""),[T,H]=(0,m.useState)(null),[I,M]=(0,m.useState)("all"),[q,K]=(0,m.useState)(""),[P,Z]=(0,m.useState)(""),[W,G]=(0,m.useState)("open"),[O,J]=(0,m.useState)("normal"),[V,X]=(0,m.useState)(""),[Q,Y]=(0,m.useState)([]),[ee,et]=(0,m.useState)(!0),[ea,es]=(0,m.useState)(!1),[er,en]=(0,m.useState)(!1),ei=(0,m.useMemo)(()=>t.find(e=>e.id===F),[F,t]),el=(0,m.useMemo)(()=>["",...z[I]||C],[I]),ed=(0,m.useCallback)(async()=>{et(!0);try{let e=z[I],t=P.trim()||void 0,s=[...(await Promise.all(q?[(0,k.C1)({status:q,q:t})]:(e||[void 0]).map(e=>(0,k.C1)({status:e,q:t})))).flat()].sort((e,t)=>{let a=D(t)-D(e);return 0!==a?a:t.id.localeCompare(e.id)});a(s);let r=F;return 0===s.length?(r="",L(""),H(null)):F&&s.some(e=>e.id===F)||(r=s[0].id,L(r)),r}catch{return g.oR.error(e("工单服务暂不可用")),F}finally{et(!1)}},[P,F,q,e,I]),ec=(0,m.useCallback)(async t=>{if(!t)return void H(null);es(!0);try{let e=await (0,k.tK)(t);H(e),a(a=>a.map(a=>a.id===t?e:a)),E()}catch{g.oR.error(e("无法加载工单详情"))}finally{es(!1)}},[e]);(0,m.useEffect)(()=>{ed()},[ed]),(0,m.useEffect)(()=>{ec(F)},[ec,F]);let eo=(0,m.useCallback)(async()=>{let e=await ed();e&&e===F&&await ec(e)},[ec,ed,F]);(0,m.useEffect)(()=>{T&&(G(T.status),J(T.priority))},[T]);let eu=async t=>{try{let e=await (0,N.B0)(t,Q.length);Y(t=>[...t,...e])}catch(t){g.oR.error(e(t instanceof Error?t.message:"图片读取失败"))}},em=async t=>{let a=(0,N.J4)(t.clipboardData);if(0!==a.length){t.preventDefault();try{let t=await (0,N.B0)(a,Q.length);Y(e=>[...e,...t]),g.oR.success(e("图片已添加"))}catch(t){g.oR.error(e(t instanceof Error?t.message:"图片读取失败"))}}},ep=async()=>{if(T){en(!0);try{let t=await (0,k.ok)(T.id,{status:W,priority:O});H(t),await ed(),E(),g.oR.success(e("工单状态已更新"))}catch{g.oR.error(e("工单状态更新失败"))}finally{en(!1)}}},eg=async()=>{if(T&&(V.trim()||0!==Q.length)){en(!0);try{let t=await (0,k.li)(T.id,V,Q);H(t),await ed(),E(),X(""),Y([]),g.oR.success(e("客服回复已发送"))}catch{g.oR.error(e("客服回复发送失败"))}finally{en(!1)}}},eh=T?U(T,e("Customer")):"",ex=T?.email?.trim()||"";return(0,s.jsx)(h.gZ,{children:(0,s.jsx)("div",{className:"min-h-0 flex-1 overflow-auto px-3 py-3 sm:px-4 sm:py-6",children:(0,s.jsxs)("div",{className:"mx-auto flex w-full max-w-7xl flex-col gap-4 sm:gap-6",children:[(0,s.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h1",{className:"text-xl font-semibold tracking-normal",children:e("System Tickets")}),(0,s.jsx)("p",{className:"text-muted-foreground text-sm",children:e("Manage all user tickets and support replies.")})]}),(0,s.jsxs)(f.$,{variant:"outline",onClick:eo,disabled:ee,children:[(0,s.jsx)(r.A,{}),e("Refresh")]})]}),(0,s.jsxs)("div",{className:"grid gap-4 lg:grid-cols-[minmax(0,0.95fr)_minmax(360px,0.55fr)] lg:items-start",children:[(0,s.jsxs)(b.Zp,{children:[(0,s.jsxs)(b.aR,{children:[(0,s.jsxs)(b.ZB,{className:"flex items-center gap-2",children:[(0,s.jsx)(n.A,{className:"size-4"}),e(S.find(e=>e.value===I)?.labelKey||"All tickets")]}),(0,s.jsx)(b.BT,{children:e("Admins can view all tickets and users only see their own.")})]}),(0,s.jsxs)(b.Wu,{className:"space-y-3",children:[(0,s.jsx)(v.tU,{value:
2I,onValueChange:e=>{let t=z[e];M(e),q&&t&&!t.includes(q)&&K("")},children:(0,s.jsx)(v.j7,{className:"grid w-full grid-cols-3 group-data-horizontal/tabs:h-auto",children:S.map(t=>(0,s.jsx)(v.Xi,{value:t.value,children:e(t.labelKey)},t.value))})}),(0,s.jsxs)("div",{className:"grid gap-2 sm:grid-cols-[160px_minmax(0,1fr)_auto]",children:[(0,s.jsx)("select",{className:"border-input bg-background h-9 rounded-lg border px-2.5 text-sm",value:q,onChange:e=>K(e.target.value),children:el.map(t=>(0,s.jsx)("option",{value:t,children:t?(0,_.Rh)(t,e):e("All statuses")},t||"all"))}),(0,s.jsxs)("div",{className:"relative",children:[(0,s.jsx)(i.A,{className:"text-muted-foreground pointer-events-none absolute top-2.5 left-2.5 size-4"}),(0,s.jsx)(j.p,{value:P,className:"pl-8",placeholder:e("Search tickets"),onChange:e=>Z(e.target.value),onKeyDown:e=>{"Enter"===e.key&&ed()}})]}),(0,s.jsxs)(f.$,{variant:"outline",onClick:ed,disabled:ee,children:[(0,s.jsx)(i.A,{}),e("Search")]})]}),ee&&(0,s.jsx)("div",{className:"text-muted-foreground text-sm",children:e("Loading...")}),!ee&&0===t.length&&(0,s.jsxs)("div",{className:"text-muted-foreground flex items-center gap-2 rounded-lg border p-4 text-sm",children:[(0,s.jsx)(l.A,{className:"size-4"}),e("No tickets found")]}),(0,s.jsx)("div",{className:"grid gap-2",children:t.map(t=>{let a=U(t,e("Customer"));return(0,s.jsx)("button",{type:"button",className:`hover:bg-muted/70 w-full rounded-lg border p-3 text-left transition-colors ${F===t.id?"border-primary bg-muted/60":"border-border"}`,onClick:()=>L(t.id),children:(0,s.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsx)("div",{className:"truncate text-sm font-medium",children:t.subject}),(0,s.jsxs)("div",{className:"text-muted-foreground mt-1 flex flex-wrap items-center gap-2 text-xs",children:[(0,s.jsx)("span",{children:t.id}),(0,s.jsxs)("span",{className:"flex items-center gap-1",children:[(0,s.jsx)(d.A,{className:"size-3"}),a]}),(0,s.jsxs)("span",{className:"flex items-center gap-1",children:[(0,s.jsx)(c.A,{className:"size-3"}),$(B(t))]})]})]}),(0,s.jsxs)("div",{className:"flex shrink-0 flex-col items-end gap-1",children:[(0,s.jsx)(x.E,{className:_.gC[t.status],variant:_.iS[t.status],children:(0,_.Rh)(t.status,e)}),t.unread_count>0&&(0,s.jsx)(x.E,{variant:"destructive",children:t.unread_count>99?"99+":t.unread_count}),(0,s.jsx)(x.E,{variant:"outline",children:(0,_.BS)(t.priority,e)})]})]})},t.id)})})]})]}),(0,s.jsxs)(b.Zp,{className:"lg:sticky lg:top-4",children:[(0,s.jsxs)(b.aR,{children:[(0,s.jsx)(b.ZB,{children:e("Ticket Detail")}),(0,s.jsx)(b.BT,{children:ei?.id||e("Select a ticket")})]}),(0,s.jsxs)(b.Wu,{className:"space-y-4",children:[ea&&(0,s.jsx)("div",{className:"text-muted-foreground text-sm",children:e("Loading...")}),!ea&&!T&&(0,s.jsx)("div",{className:"text-muted-foreground text-sm",children:e("Select a ticket from the list.")}),T&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,s.jsx)(x.E,{className:_.gC[T.status],variant:_.iS[T.status],children:(0,_.Rh)(T.status,e)}),(0,s.jsx)(x.E,{variant:"outline",children:(0,_.BS)(T.priority,e)})]}),(0,s.jsx)("h2",{className:"text-base font-medium",children:T.subject}),(0,s.jsxs)("div",{className:"text-muted-foreground grid gap-1 text-xs",children:[(0,s.jsxs)("span",{children:[e("Customer"),": ",eh]}),""!==ex&&ex!==eh&&(0,s.jsxs)("span",{children:[e("Email"),": ",ex]}),(0,s.jsxs)("span",{children:[e("User ID"),": ",T.newapi_user_id||"-"]}),T.order_no&&(0,s.jsxs)("span",{children:[e("Order number"),": ",T.order_no]}),T.request_id&&(0,s.jsxs)("span",{children:[e("Request ID"),": ",T.request_id]}),T.model&&(0,s.jsxs)("span",{children:[e("Model name"),": ",T.model]})]})]}),(0,s.jsxs)("div",{className:"grid gap-2 sm:grid-cols-[1fr_1fr_auto]",children:[(0,s.jsx)("select",{className:"border-input bg-background h-9 rounded-lg border px-2.5 text-sm",value:W,onChange:e=>G(e.target.value),children:R.filter(Boolean).map(t=>(0,s.jsx)("option",{value:t,children:(0,_.Rh)(t,e)},t))}),(0,s.jsx)("select",{className:"border-input bg-background h-9 rounded-lg border px-2.5 text-sm",value:O,onChange:e=>J(e.target.value),children:A.map(t=>(0,s.jsx)("option",{value:t,children:(0,_.BS)(t,e)},t))}),(0,s.jsxs)(f.$,{variant:"outline",onClick:ep,disabled:er,children:[(0,s.jsx)(o.A,{}),e("Update Status")]})]}),(0,s.jsx)("div",{className:"space-y-3",children:(T.messages||[]).map(t=>(0,s.jsxs)("div",{className:`rounded-lg border p-3 ${"agent"===t.author_type?"bg-muted/60":"bg-background"}`,children:[(0,s.jsxs)("div",{className:"text-muted-foreground mb-1 flex justify-between gap-2 text-xs",children:[(0,s.jsx)("span",{children:"agent"===t.author_type?e("Support"):"system"===t.author_type?e("System"):eh}),(0,s.jsx)("span",{children:$(t.created_at)})]}),t.body&&(0,s.jsx)("div",{className:"text-sm whitespace-pre-wrap",children:t.body}),(0,s.jsx)(w.Cj,{ticketId:T.id,message:t,admin:!0}
2)]},t.id))}),(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsx)(y.T,{value:V,className:"min-h-24",placeholder:e("Write a support reply"),onChange:e=>X(e.target.value),onPaste:em}),(0,s.jsx)(w.uU,{label:e("Add Images"),onChange:eu}),(0,s.jsx)(w.mT,{attachments:Q,onRemove:e=>Y(t=>t.filter((t,a)=>a!==e))}),(0,s.jsxs)(f.$,{onClick:eg,disabled:er||!V.trim()&&0===Q.length,children:[(0,s.jsx)(u.A,{}),e("Send Support Reply")]})]})]})]})]})]})]})})})}},59961(e,t,a){let s=(0,a(53079).A)("clock-3",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6h4",key:"135r8i"}]]);a.d(t,{},{A:s})},2872(e,t,a){let s=(0,a(53079).A)("message-circle-reply",[["path",{d:"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719",key:"1sd12s"}],["path",{d:"m10 15-3-3 3-3",key:"1pgupc"}],["path",{d:"M7 12h8a2 2 0 0 1 2 2v1",key:"89sh1g"}]]);a.d(t,{},{A:s})},52651(e,t,a){let s=(0,a(53079).A)("user-round",[["circle",{cx:"12",cy:"8",r:"5",key:"1hypcn"}],["path",{d:"M20 21a8 8 0 0 0-16 0",key:"rfgkzh"}]]);a.d(t,{},{A:s})}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.