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