PageSourceSearch

https://www.medalo.ai/js/FaqMgmt.DmPaPbhi.js

js medalo.ai collected 2026-10-05 12:17:07 UTC 14,450 bytes, 4 lines download raw bytes

1import k from"./Paging.Codo259r.js";import{c as r,z as e,s as f,g as F,F as h,l as b,D as g,V as m,G as C,B as _,W as x,b as n,a3 as w}from"./vendor-vue.DQyCMu5a.js";import{_ as I}from"./index.VRUltArI.js";import{b3 as d,ag as v}from"./vendor-misc.DlM92jT6.js";import"./vendor-vuetify.Dvtop9lb.js";import"./vendor-axios.B9ygI19o.js";import"./vendor-moment.C5S46NFB.js";import"./vendor-quill.BiOiM682.js";import"./vendor-date-io.C_LH91PS.js";import"./vendor-maps.B8dKhpM0.js";/* empty css                     */const y=["처방","수술","치료","병원운영","일반문의"],S="홈페이지 학습",q={대분류:"",중분류:"",소분류:"",질문:"",답변:""},L={name:"FaqMgmt",components:{Paging:k},data(){return{loading:!1,requestSeq:0,tabs:[...y],activeTab:y[0],keyword:"",pageSize:10,pageNo:1,totalCnt:0,faqList:[],homepageList:[],selectedIds:[],editPopFlag:!1,editMode:"insert",editId:null,editForm:{...q},optionalFields:["대분류","중분류","소분류"]}},computed:{isHomepageTab(){return this.activeTab===S},isAllChecked(){return this.faqList.length>0&&this.faqList.every(l=>this.selectedIds.includes(l.id))},fieldPlaceholders(){const l={처방:"예: 처방전 발급, 약물 복용 기간",수술:"예: 수술 방법 및 비용, 수술 후 관리",치료:"예: 치료 방법 및 비용, 치료 후 관리",병원운영:"예: 운영시간, 위치, 주차",일반문의:"예: 진료 과목, 보험 적용"};return{대분류:`예: ${this.activeTab}`,중분류:"예: 기본 환자 / 초진환자 / 공통",소분류:l[this.activeTab]||"예: 진료시간"}}},mounted(){this.loadList()},methods:{changeTab(l){this.activeTab!==l&&(this.activeTab=l,this.keyword="",this.pageNo=1,this.selectedIds=[],this.loadList())},onActivePage(l){this.pageNo=Math.max(1,l),this.selectedIds=[],this.loadList()},loadList(){this.isHomepageTab?this.loadHomepageList():this.loadFaqList()},loadFaqList(){const l=++this.requestSeq;this.loading=!0;const t={success:o=>{if(l===this.requestSeq){if(this.loading=!1,!o||o.code!=="S"){alert(o&&o.message||"FAQ 목록 조회에 실패했습니다.");return}this.selectedIds=[],this.faqList=o.data&&o.data.items||[],this.totalCnt=o.data&&o.data.total||0}},error:o=>{l===this.requestSeq&&(this.loading=!1,console.log(o))}};this.$api.report.getFaqList({category:this.activeTab,offset:(this.pageNo-1)*this.pageSize,limit:this.pageSize,keyword:this.keyword||""},t)},loadHomepageList(){const l=++this.requestSeq;this.loading=!0;const t={success:o=>{if(l===this.requestSeq){if(this.loading=!1,!o||o.code!=="S"){alert(o&&o.message||"홈페이지 학습 데이터 조회에 실패했습니다.");return}this.homepageList=o.data&&o.data.items||[],this.totalCnt=o.data&&o.data.total||0}},error:o=>{l===this.requestSeq&&(this.loading=!1,console.log(o))}};this.$api.report.getFaqHomepageList({offset:(this.pageNo-1)*this.pageSize,limit:this.pageSize},t)},toggleCheckAll(l){this.selectedIds=l?this.faqList.map(t=>t.id):[]},openInsertPop(){this.editMode="insert",this.editId=null,this.editForm={...q},this.editPopFlag=!0},openUpdatePop(l){this.editMode="update",this.editId=l.id,this.editForm={대분류:l.대분류||"",중분류:l.중분류||"",소분류:l.소분류||"",질문:l.질문||"",답변:l.답변||""},this.editPopFlag=!0},closeEditPop(){this.editPopFlag=!1},saveEdit(){if(!this.editForm.질문.trim()||!this.editForm.답변.trim()){alert("질문과 답변은 필수 입력입니다.");return}this.loading=!0;const l={success:t=>{if(this.loading=!1,!t||t.code!=="S"){alert(t&&t.message||"저장에 실패했습니다.");return}this.editPopFlag=!1,this.loadFaqList()},error:t=>{this.loading=!1,console.log(t),alert("저장에 실패했습니다.")}};this.editMode==="insert"?this.$api.report.addFaq({category:this.activeTab,row:this.editForm},l):this.$api.report.updateFaq({category:this.activeTab,id:this.editId,row:this.editForm},l)},deleteOne(l){const t=l.질문||"";confirm(`이 FAQ를 삭제할까요?
2
3질문: ${t}`)&&this.requestDelete([l.id])},deleteSelected(){this.selectedIds.length<1||confirm(`선택한 ${this.selectedIds.length}건의 FAQ를 삭제할까요?`)&&this.requestDelete(this.selectedIds)},requestDelete(l){this.loading=!0;const t={success:o=>{if(this.loading=!1,!o||o.code!=="S"){alert(o&&o.message||"삭제에 실패했습니다.");return}this.selectedIds=[],this.pageNo=1,this.loadFaqList()},error:o=>{this.loading=!1,console.log(o),alert("삭제에 실패했습니다.")}};this.$api.report.deleteFaq({category:this.activeTab,ids:l},t)},triggerCsvImport(){this.$refs.csvImportInput&&this.$refs.csvImportInput.click()},handleCsvImportFileChange(l){const t=l.target.files&&l.target.files[0];if(!t)return;const o=t.name.toLowerCase();if(!o.endsWith(".csv")&&!o.endsWith(".xlsx")){alert("CSV(UTF-8) 또는 엑셀(.xlsx) 파일만 가져올 수 있습니다."),l.target.value="";return}const u=new FormData;u.append("file",t),u.append("category",this.activeTab),this.loading=!0;const i={success:a=>{if(this.loading=!1,l.target.value="",!a||a.code!=="S"){alert(a&&a.message||"가져ì˜
3¤ê¸°ì— 실패했습니다.");return}const c=a.data||{},s=["가져오기가 완료되었습니다.",`추가 ${c.added||0}ê±´`];c.skipped&&s.push(`중복 제외 ${c.skipped}ê±´`),c.invalid&&s.push(`제외(질문/답변 누락) ${c.invalid}ê±´`),alert(s.join(`
4`)),this.pageNo=1,this.loadFaqList()},error:a=>{this.loading=!1,l.target.value="",console.log(a),alert("가져오기에 실패했습니다.")}};this.$api.report.importFaqCsv(u,i)},exportCsv(){const l={success:t=>{this.downloadFileBlob(t,`faq_${this.activeTab}.xlsx`,"엑셀 내보내기에 실패했습니다.")},error:t=>{console.log(t),alert("엑셀 내보내기에 실패했습니다.")}};this.$api.report.exportFaqCsv({category:this.activeTab},l)},downloadSample(){const l={success:t=>{this.downloadFileBlob(t,`faq_sample_${this.activeTab}.xlsx`,"샘플 양식 다운로드에 실패했습니다.")},error:t=>{console.log(t),alert("샘플 양식 다운로드에 실패했습니다.")}};this.$api.report.downloadFaqSample({category:this.activeTab},l)},downloadFileBlob(l,t,o){const u=l&&l.type||"";if(u.includes("json")||u.includes("html")){l.text().then(c=>{let s=o;try{const p=JSON.parse(c);s=p.message||p.error||o}catch{}alert(s)}).catch(()=>alert(o));return}const i=URL.createObjectURL(new Blob([l],{type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"})),a=document.createElement("a");a.href=i,a.download=t,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(i)}}},T={class:"report-content__container"},P={class:"report-content__main"},A={class:"faq-tab__wrap"},N=["onClick"],U={class:"report-search__wrap"},V={class:"report-search__inner"},E={class:"report-search__item"},M={class:"report-table__info"},z={class:"total"},B={class:"report-table__actions"},Q=["disabled"],D={class:"report-table__wrap"},H={class:"report-table__container"},O=["checked"],j=["value"],R={"data-label":"질문",class:"faq-cell__text"},K={"data-label":"답변",class:"faq-cell__text"},G={"data-label":"수정"},W=["onClick"],J={"data-label":"삭제"},Y=["onClick"],X={key:0},Z={class:"report-table__info"},$={class:"total"},tt={class:"report-table__wrap"},et={class:"report-table__container"},st={"data-label":"번호"},lt={"data-label":"학습 내용",class:"faq-cell__chunk"},ot={key:0},it={key:0,class:"report-popup__wrap"},at={class:"report-popup__box w700"},rt={class:"report-popup__header"},nt={class:"name"},dt={class:"report-popup__body"},pt={class:"faq-form__list"},ct={class:"faq-form__label"},ut=["onUpdate:modelValue","placeholder"],_t={class:"faq-form__item"},ht={class:"faq-form__item"},gt={class:"report-popup__footer"},ft={key:1,class:"faq-loading"};function bt(l,t,o,u,i,a){const c=x("paging");return n(),r("div",T,[t[39]||(t[39]=e("h2",{class:"report-content__title"}," FAQ 학습 관리 ",-1)),e("div",P,[e("div",A,[(n(!0),r(h,null,b(i.tabs,s=>(n(),r("button",{key:s,type:"button",class:v(["faq-tab__item",{active:s===i.activeTab}]),onClick:p=>a.changeTab(s)},d(s),11,N))),128))]),a.isHomepageTab?(n(),r(h,{key:1},[e("div",Z,[e("div",$,[t[28]||(t[28]=_(" 총 ")),e("strong",null,d(i.totalCnt),1),t[29]||(t[29]=_("건 "))]),t[30]||(t[30]=e("p",{class:"faq-homepage__notice"}," 홈페이지 학습 데이터는 매주 일요일 자동으로 갱신되며, 조회만 가능합니다. ",-1))]),e("div",tt,[e("table",et,[t[32]||(t[32]=e("colgroup",null,[e("col",{style:{width:"8%"}}),e("col",{style:{width:"auto"}})],-1)),t[33]||(t[33]=e("thead",null,[e("tr",null,[e("th",null,"번호"),e("th",null,"학습 내용")])],-1)),e("tbody",null,[(n(!0),r(h,null,b(i.homepageList,(s,p)=>(n(),r("tr",{key:s.id},[e("td",st,d((i.pageNo-1)*i.pageSize+p+1),1),e("td",lt,d(s.text),1)]))),128)),i.totalCnt<1?(n(),r("tr",ot,t[31]||(t[31]=[e("td",{colspan:"2",class:"report-table__empty"}," 학습된 홈페이지 데이터가 없습니다. ",-1)]))):f("",!0)])])])],64)):(n(),r(h,{key:0},[e("div",U,[e("ul",V,[e("li",E,[t[16]||(t[16]=e("label",{for:"faqKeyword",class:"report-input__label"},"검색",-1)),g(e("input",{id:"faqKeyword","onUpdate:modelValue":t[0]||(t[0]=s=>i.keyword=s),type:"text",class:"report-input__text",placeholder:"대분류/중분류/소분류/질문/답변 검색",onKeyup:t[1]||(t[1]=C(s=>a.onActivePage(1),["enter"]))},null,544),[[m,i.keyword]])])]),e("button",{type:"button",class:"report-btn__text report-btn__primary",onClick:t[2]||(t[2]=s=>a.onActivePage(1))}," 검색 ")]),e("div",M,[e("div",z,[t[17]||(t[17]=_(" 총 ")),e("strong",null,d(i.totalCnt),1),t[18]||(t[18]=_("건 "))]),e("div",B,[e("button",{type:"button",class:"report-btn__text report-btn__secondary btn-excel",onClick:t[3]||(t[3]=s=>a.downloadSample())}," 샘플 양식 다운로드 "),e("button",{type:"button",class:"report-btn__text report-btn__secondary btn-excel",onClick:t[4]||(t[4]=s=>a.exportCsv())}," 엑셀 내보내기 "),e("button",{type:"button",class:"report-btn__text report-btn__secondary btn-excel",onClick:t[5]||(t[5]=s=>a.triggerCsvImport())}
4," 가져오기 (CSV·엑셀) "),e("input",{ref:"csvImportInput",type:"file",accept:".csv,.xlsx",style:{display:"none"},onChange:t[6]||(t[6]=(...s)=>a.handleCsvImportFileChange&&a.handleCsvImportFileChange(...s))},null,544),e("button",{type:"button",class:"report-btn__text report-btn__secondary",onClick:t[7]||(t[7]=s=>a.openInsertPop())}," FAQ 등록 "),e("button",{type:"button",class:"report-btn__text report-btn__secondary faq-btn__danger",disabled:i.selectedIds.length<1,onClick:t[8]||(t[8]=s=>a.deleteSelected())}," 선택 삭제 ("+d(i.selectedIds.length)+") ",9,Q)])]),e("div",D,[e("table",H,[t[27]||(t[27]=e("colgroup",null,[e("col",{style:{width:"4%"}}),e("col",{style:{width:"8%"}}),e("col",{style:{width:"9%"}}),e("col",{style:{width:"10%"}}),e("col",{style:{width:"24%"}}),e("col",{style:{width:"auto"}}),e("col",{style:{width:"6%"}}),e("col",{style:{width:"6%"}})],-1)),e("thead",null,[e("tr",null,[e("th",null,[e("input",{type:"checkbox",checked:a.isAllChecked,onChange:t[9]||(t[9]=s=>a.toggleCheckAll(s.target.checked))},null,40,O)]),t[19]||(t[19]=e("th",null,"대분류",-1)),t[20]||(t[20]=e("th",null,"중분류",-1)),t[21]||(t[21]=e("th",null,"소분류",-1)),t[22]||(t[22]=e("th",null,"질문",-1)),t[23]||(t[23]=e("th",null,"답변",-1)),t[24]||(t[24]=e("th",null,"수정",-1)),t[25]||(t[25]=e("th",null,"삭제",-1))])]),e("tbody",null,[(n(!0),r(h,null,b(i.faqList,s=>(n(),r("tr",{key:s.id},[e("td",null,[g(e("input",{"onUpdate:modelValue":t[10]||(t[10]=p=>i.selectedIds=p),type:"checkbox",value:s.id},null,8,j),[[w,i.selectedIds]])]),e("td",{"data-label":"대분류",class:v({"faq-cell__empty":!s.대분류})},d(s.대분류||"-"),3),e("td",{"data-label":"중분류",class:v({"faq-cell__empty":!s.중분류})},d(s.중분류||"-"),3),e("td",{"data-label":"소분류",class:v({"faq-cell__empty":!s.소분류})},d(s.소분류||"-"),3),e("td",R,d(s.질문),1),e("td",K,d(s.답변),1),e("td",G,[e("a",{href:"javascript:void(0)",class:"report-link__line",onClick:p=>a.openUpdatePop(s)},"수정",8,W)]),e("td",J,[e("a",{href:"javascript:void(0)",class:"report-link__line",onClick:p=>a.deleteOne(s)},"삭제",8,Y)])]))),128)),i.totalCnt<1?(n(),r("tr",X,t[26]||(t[26]=[e("td",{colspan:"8",class:"report-table__empty"}," 학습된 FAQ가 없습니다. ",-1)]))):f("",!0)])])])],64)),F(c,{"cur-page-no":i.pageNo,"total-cnt":i.totalCnt,"page-size":i.pageSize,onActivePage:a.onActivePage},null,8,["cur-page-no","total-cnt","page-size","onActivePage"])]),i.editPopFlag?(n(),r("div",it,[e("div",at,[e("div",rt,[e("strong",nt,d(i.editMode==="insert"?"FAQ 등록":"FAQ 수정")+" ("+d(i.activeTab)+")",1),e("button",{type:"button",class:"report-btn__close",onClick:t[11]||(t[11]=s=>a.closeEditPop())},t[34]||(t[34]=[e("i",{class:"icon icon-close"},null,-1)]))]),e("div",dt,[e("ul",pt,[(n(!0),r(h,null,b(i.optionalFields,s=>(n(),r("li",{key:s,class:"faq-form__item"},[e("label",ct,[_(d(s)+" ",1),t[35]||(t[35]=e("span",{class:"faq-form__optional"},"선택",-1))]),g(e("input",{"onUpdate:modelValue":p=>i.editForm[s]=p,type:"text",class:"faq-form__input",placeholder:a.fieldPlaceholders[s]},null,8,ut),[[m,i.editForm[s]]])]))),128)),e("li",_t,[t[36]||(t[36]=e("label",{class:"faq-form__label"},[_("질문"),e("span",{class:"faq-form__required"},"*")],-1)),g(e("input",{"onUpdate:modelValue":t[12]||(t[12]=s=>i.editForm.질문=s),type:"text",class:"faq-form__input",placeholder:"예: 토요일에도 진료하나요?"},null,512),[[m,i.editForm.질문]])]),e("li",ht,[t[37]||(t[37]=e("label",{class:"faq-form__label"},[_("답변"),e("span",{class:"faq-form__required"},"*")],-1)),g(e("textarea",{"onUpdate:modelValue":t[13]||(t[13]=s=>i.editForm.답변=s),class:"faq-form__input faq-form__textarea",rows:"7",placeholder:"고객에게 안내할 답변을 입력하세요. 줄바꿈도 그대로 저장됩니다."},null,512),[[m,i.editForm.답변]])])])]),e("div",gt,[e("button",{type:"button",class:"report-btn__text report-btn__secondary",onClick:t[14]||(t[14]=s=>a.closeEditPop())}," 취소 "),e("button",{type:"button",class:"report-btn__text report-btn__primary",onClick:t[15]||(t[15]=s=>a.saveEdit())},d(i.editMode==="insert"?"등록":"수정"),1)])])])):f("",!0),i.loading?(n(),r("div",ft,t[38]||(t[38]=[e("div",{class:"faq-loading__spinner"},[e("span",{class:"faq-loading__dot"}),e("span",{class:"faq-loading__dot"}),e("span",{class:"faq-loading__dot"})],-1)]))):f("",!0)])}const Lt=I(L,[["render",bt],["__scopeId","data-v-99f04b25"]]);export{Lt as default};

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.