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
10 KiB

import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as ee,Xt as s,Y as c,at as l,b as u,d as te,ht as d,m as f,ot as ne,q as p,tn as m,x as h}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as g,l as _,s as v,t as y}from"./index-BKGTVidA.js";import{n as re,t as b}from"./usePageLoad-D9c6HmVf.js";import{n as ie,t as x}from"./admin-list-DjncsyJC.js";import{a as S}from"./dict-yXQAO4jv.js";import{a as C,n as w,o as T,r as E,s as D}from"./demands-C2g35neD.js";import{r as O}from"./users-DHe1cFsc.js";var k={class:`list-page demands-page`},ae={class:`page-header`},oe={class:`list-filter-bar`},se={class:`table-row-actions`},ce={class:`list-pager`},le={class:`follow-teacher-summary`},ue={class:`follow-history-list`},de={class:`follow-history-head`},fe={class:`follow-history-title`},pe={class:`follow-history-date`},me={class:`follow-history-body`},he={class:`follow-teacher-summary`},A=v(n({__name:`index`,setup(n){let v=y();function A(){let e=v.user?.id;return e!=null&&B.value.some(t=>t.id===e)?e:B.value[0]?.id}let j=d(!1),M=d([]),N=d({current_page:1,per_page:20,total:0}),P=d(1),F=d(``),I=d(``),L=d(``),R=d([]),z=d([]),B=d([]),V=d(!1),H=d(null),U=d([]),W=d(!1),G=d(``),K=d([]),q=d(!1),J=d(null),Y=d({handled_at:new Date().toISOString().slice(0,10),admin_user_id:void 0,status_dict_item_id:void 0,content:``,next_plan:``,next_follow_date:``});async function X(){let[e,t,n]=await Promise.all([S(`demand_type`),S(`demand_status`),O({page:1,page_size:200,status:1})]);R.value=e.items,z.value=t.items,B.value=n.items.map(e=>({id:e.id,label:e.real_name||e.username}))}async function Z(){j.value=!0;try{let e={page:P.value,page_size:N.value.per_page};F.value&&(e.keyword=F.value),I.value!==``&&(e.type_dict_item_id=I.value),L.value!==``&&(e.status_dict_item_id=L.value);let t=await D(e);M.value=t.items,N.value=t.meta}finally{j.value=!1}}function ge(){F.value=``,I.value=``,L.value=``,P.value=1,Z()}function Q(){P.value=1,Z()}async function _e(e){H.value=await C(e.id),U.value=await T(e.id),V.value=!0}async function ve(e){G.value=e.title,K.value=await T(e.id),W.value=!0}function $(e){J.value=e,Y.value={handled_at:new Date().toISOString().slice(0,10),admin_user_id:A(),status_dict_item_id:e.status_dict_item_id,content:``,next_plan:``,next_follow_date:``},q.value=!0}async function ye(){if(!J.value)return;let e=Y.value;if(!e.content.trim()||!e.status_dict_item_id||!e.admin_user_id){_.warning(`请填写跟进内容、处理状态与跟进人员`);return}await w(J.value.id,{...e}),_.success(`已保存跟进`),q.value=!1,await Z()}async function be(e){await g.confirm(`确定删除需求「${e.title}」?`,`确认删除`,{type:`warning`}),await E(e.id),_.success(`已删除`),await Z()}function xe(){H.value&&(V.value=!1,$(H.value))}return b(async()=>{await X(),await Z()}),(n,d)=>{let g=c(`el-input`),_=c(`el-option`),v=c(`el-select`),y=c(`el-button`),b=c(`el-table-column`),S=c(`el-table`),C=c(`el-pagination`),w=c(`el-card`),T=c(`el-col`),E=c(`el-row`),D=c(`el-dialog`),O=c(`el-empty`),A=c(`el-date-picker`),X=c(`el-form-item`),Se=c(`el-form`),Ce=ee(`loading`);return i(),e(`div`,k,[u(`div`,ae,[r(re)]),r(w,{shadow:`never`,class:`admin-list-card`},{default:l(()=>[u(`div`,oe,[r(g,{modelValue:F.value,"onUpdate:modelValue":d[0]||=e=>F.value=e,class:`filter-search`,placeholder:`搜索标题、姓名、公司、类型…`,clearable:``,onKeyup:te(Q,[`enter`])},null,8,[`modelValue`]),r(v,{modelValue:I.value,"onUpdate:modelValue":d[1]||=e=>I.value=e,placeholder:`类型`,clearable:``,class:`filter-select-wide`},{default:l(()=>[(i(!0),e(f,null,p(R.value,e=>(i(),h(_,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(v,{modelValue:L.value,"onUpdate:modelValue":d[2]||=e=>L.value=e,placeholder:`处理状态`,clearable:``,class:`filter-select`},{default:l(()=>[(i(!0),e(f,null,p(z.value,e=>(i(),h(_,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(y,{type:`primary`,class:`btn-create`,onClick:Q},{default:l(()=>[...d[16]||=[o(`搜索`,-1)]]),_:1}),r(y,{onClick:ge},{default:l(()=>[...d[17]||=[o(`重置`,-1)]]),_:1})]),ne((i(),h(S,{data:M.value,"row-key":`id`},{default:l(()=>[r(b,{label:`类型`,width:`110`},{default:l(({row:e})=>[u(`span`,{class:s([`type-badge`,t(ie)(e.type_item?.value)])},m(e.type_item?.label),3)]),_:1}),r(b,{prop:`title`,label:`标题`,"min-width":`220`,"show-overflow-tooltip":``}),r(b,{prop:`contact_name`,label:`姓名`,width:`100`}),r(b,{prop:`company`,label:`公司`,width:`140`,"show-overflow-tooltip":``}),r(b,{prop:`submitted_at`,label:`时间`,width:`110`}),r(b,{label:`处理状态`,width:`100`},{default:l(({row:e})=>[u(`span`,{class:s([`status-badge`,t(x)(e.status_item?.value)])},m(e.status_item?.label),3)]),_:1}),r(b,{label:`跟进记录`,width:`96`,align:`center`},{default:l(({row:e})=>[r(y,{size:`small`,class:`btn-action-secondary table-inline-btn`,onClick:t=>ve(e)},{default:l(()=>[o(m(e.handle_logs_count||0)+`条记录 `,1)]),_:2},1032,[`onClick`])]),_:1}),r(b,{label:`操作`,width:`220`,fixed:`right`},{default:l(({row:e})=>[u(`div`,se,[r(y,{class:`btn-action-secondary`,onClick:t=>_e(e)},{default:l(()=>[...d[18]||=[o(`详情`,-1)]]),_:1},8,[`onClick`]),r(y,{class:`btn-action-brand`,onClick:t=>be(e)},{default:l(()=>[...d[19]||=[o(`删除`,-1)]]),_:1},8,[`onClick`]),r(y,{class:`btn-action-info`,onClick:t=>$(e)},{default:l(()=>[...d[20]||=[o(`跟进`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[Ce,j.value]]),u(`div`,ce,[r(C,{"current-page":P.value,"onUpdate:currentPage":d[3]||=e=>P.value=e,"page-size":N.value.per_page,total:N.value.total,layout:`total, prev, pager, next`,onCurrentChange:Z},null,8,[`current-page`,`page-size`,`total`])])]),_:1}),r(D,{modelValue:V.value,"onUpdate:modelValue":d[5]||=e=>V.value=e,title:H.value?.title||`需求详情`,width:`800px`,"destroy-on-close":``},{footer:l(()=>[r(y,{onClick:d[4]||=e=>V.value=!1},{default:l(()=>[...d[27]||=[o(`关闭`,-1)]]),_:1}),r(y,{type:`primary`,class:`btn-create`,onClick:xe},{default:l(()=>[...d[28]||=[o(`添加跟进`,-1)]]),_:1})]),default:l(()=>[H.value?(i(),e(f,{key:0},[r(E,{gutter:12,class:`detail-meta`},{default:l(()=>[r(T,{span:6},{default:l(()=>[d[21]||=u(`label`,{class:`field-label`},`需求类型`,-1),r(g,{"model-value":H.value.type_item?.label||``,readonly:``},null,8,[`model-value`])]),_:1}),r(T,{span:6},{default:l(()=>[d[22]||=u(`label`,{class:`field-label`},`提交人`,-1),r(g,{"model-value":H.value.contact_name||``,readonly:``},null,8,[`model-value`])]),_:1}),r(T,{span:6},{default:l(()=>[d[23]||=u(`label`,{class:`field-label`},`提交时间`,-1),r(g,{"model-value":H.value.submitted_at||``,readonly:``},null,8,[`model-value`])]),_:1}),r(T,{span:6},{default:l(()=>[d[24]||=u(`label`,{class:`field-label`},`处理状态`,-1),r(g,{"model-value":H.value.status_item?.label||``,readonly:``},null,8,[`model-value`])]),_:1}),r(T,{span:24},{default:l(()=>[d[25]||=u(`label`,{class:`field-label`},`需求描述`,-1),r(g,{"model-value":H.value.content,type:`textarea`,rows:3,readonly:``},null,8,[`model-value`])]),_:1})]),_:1}),d[26]||=u(`h3`,{class:`sub-title`},`处理记录`,-1),r(S,{data:U.value,size:`small`},{default:l(()=>[r(b,{prop:`handled_at`,label:`跟进日期`,width:`110`}),r(b,{prop:`operator_name`,label:`跟进人员`,width:`100`}),r(b,{label:`处理状态`,width:`100`},{default:l(({row:e})=>[u(`span`,{class:s([`status-badge`,t(x)(e.status_item?.value)])},m(e.status_item?.label),3)]),_:1}),r(b,{prop:`content`,label:`跟进内容`,"min-width":`160`,"show-overflow-tooltip":``}),r(b,{prop:`next_plan`,label:`下次跟进计划`,width:`140`,"show-overflow-tooltip":``}),r(b,{prop:`next_follow_date`,label:`下次跟进日期`,width:`120`})]),_:1},8,[`data`])],64)):a(``,!0)]),_:1},8,[`modelValue`,`title`]),r(D,{modelValue:W.value,"onUpdate:modelValue":d[7]||=e=>W.value=e,title:`跟进记录`,width:`640px`},{footer:l(()=>[r(y,{onClick:d[6]||=e=>W.value=!1},{default:l(()=>[...d[29]||=[o(`关闭`,-1)]]),_:1})]),default:l(()=>[u(`div`,le,m(G.value),1),u(`div`,ue,[(i(!0),e(f,null,p(K.value,t=>(i(),e(`div`,{key:t.id,class:`follow-history-card`},[u(`div`,de,[u(`div`,null,[u(`span`,fe,m(t.operator_name),1),u(`span`,pe,m(t.handled_at),1)])]),u(`div`,me,m(t.content),1)]))),128)),K.value.length?a(``,!0):(i(),h(O,{key:0,description:`暂无记录`}))])]),_:1},8,[`modelValue`]),r(D,{modelValue:q.value,"onUpdate:modelValue":d[15]||=e=>q.value=e,title:`需求跟进`,width:`720px`,"destroy-on-close":``},{footer:l(()=>[r(y,{onClick:d[14]||=e=>q.value=!1},{default:l(()=>[...d[30]||=[o(`取消`,-1)]]),_:1}),r(y,{type:`primary`,class:`btn-create`,onClick:ye},{default:l(()=>[...d[31]||=[o(`保存`,-1)]]),_:1})]),default:l(()=>[u(`div`,he,m(J.value?.title),1),r(Se,{"label-position":`top`,class:`form-small`,style:{"margin-top":`12px`}},{default:l(()=>[r(E,{gutter:12},{default:l(()=>[r(T,{span:8},{default:l(()=>[r(X,{label:`跟进日期`,required:``},{default:l(()=>[r(A,{modelValue:Y.value.handled_at,"onUpdate:modelValue":d[8]||=e=>Y.value.handled_at=e,type:`date`,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),r(T,{span:8},{default:l(()=>[r(X,{label:`跟进人员`,required:``},{default:l(()=>[r(v,{modelValue:Y.value.admin_user_id,"onUpdate:modelValue":d[9]||=e=>Y.value.admin_user_id=e,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(B.value,e=>(i(),h(_,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(T,{span:8},{default:l(()=>[r(X,{label:`处理状态`,required:``},{default:l(()=>[r(v,{modelValue:Y.value.status_dict_item_id,"onUpdate:modelValue":d[10]||=e=>Y.value.status_dict_item_id=e,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(z.value,e=>(i(),h(_,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(T,{span:24},{default:l(()=>[r(X,{label:`跟进内容`,required:``},{default:l(()=>[r(g,{modelValue:Y.value.content,"onUpdate:modelValue":d[11]||=e=>Y.value.content=e,type:`textarea`,rows:4,placeholder:`请输入本次跟进内容`},null,8,[`modelValue`])]),_:1})]),_:1}),r(T,{span:16},{default:l(()=>[r(X,{label:`下次跟进计划`},{default:l(()=>[r(g,{modelValue:Y.value.next_plan,"onUpdate:modelValue":d[12]||=e=>Y.value.next_plan=e,placeholder:`请输入下一步计划`},null,8,[`modelValue`])]),_:1})]),_:1}),r(T,{span:8},{default:l(()=>[r(X,{label:`下次跟进日期`},{default:l(()=>[r(A,{modelValue:Y.value.next_follow_date,"onUpdate:modelValue":d[13]||=e=>Y.value.next_follow_date=e,type:`date`,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-55f95cba`]]);export{A as default};