PageSourceSearch

https://fronted.familypro.io/familypro/fronted/269241651/ProductType.js

js familypro.io collected 2026-09-24 12:26:19 UTC 11,746 bytes, 1 lines download raw bytes

1import{bJ as Ce,bI as xe,c as V,r as p,z as Pe,a4 as we,aX as i,b8 as ze,C as f,O as y,R as w,Q as Ue,E as g,W as a,P as o,T as u,D as d,U as k,V as R,am as E,u as Y,bU as Ae}from"./vendors.js";import{_ as De,W as Z}from"./main.js";import{n as Ie,E as m}from"./vendor-element.js";const Se={class:"product-type-page"},je=["src"],Ne={key:1},$e={key:0,class:"text-gray-400"},Be={class:"pagination-container mt-4"},Fe=["src"],Oe={class:"bind-sort-container"},Re={class:"mb-3"},Ee={class:"flex items-center py-2 px-3 border-b bg-gray-50"},Je=["src"],qe={class:"flex-1"},Me={class:"mt-4 mb-3"},We={class:"flex items-center"},Ge=["src"],Le="/api/admin/product_type/icon/upload",Qe={__name:"ProductType",setup(Xe){const _=Ce(),h=xe(),J=V(()=>h.query.__edit__==="1"),z=V(()=>_.state.productType.productTypes),W=V(()=>_.state.productType.aiToolPages),ee=p(!1),U=p(1),A=p(10),te=V(()=>z.value.length),le=V(()=>{const l=(U.value-1)*A.value,e=l+A.value;return z.value.slice(l,e)});Pe(()=>{_.dispatch("productType/fetchProductTypes"),_.dispatch("productType/fetchAiToolPages")});const oe=l=>{A.value=l,U.value=1},ae=l=>{U.value=l},C=p(!1),D=p(!1),I=p(!1),S=p(!1),N=p(null),$=p(null),G=p(null),b=p(null),v=p([]),B=p(null),j=p([]),s=we({product_type:"",name:"",icon:"",config_json:"",status:1}),L=(l=null)=>{C.value=!0,N.value=l,l?Object.assign(s,{product_type:l.product_type||"",name:l.name||"",icon:l.icon||"",config_json:l.config_json||"",status:l.status!==void 0?l.status:1}):Object.assign(s,{product_type:"",name:"",icon:"",config_json:"",status:1})},ne=async function({file:l,onSuccess:e,onError:n}){var x,F;const c=new FormData;c.append("file",l);try{const P=await Z.post(Le,c,{headers:{"Content-Type":"multipart/form-data"}});s.icon=(F=(x=P.data)==null?void 0:x.data)==null?void 0:F.url,m.success("上传成功"),e(P.data)}catch(P){m.error("上传失败"),n(P)}},se=l=>{const e=l.type.startsWith("image/");return e||m.error("只能上传图片"),e},ue=()=>{if(!s.product_type.trim())return m.error("产品类型不能为空"),!1;
1if(s.config_json&&s.config_json.trim())try{JSON.parse(s.config_json)}catch{return m.error("配置信息必须是有效的JSON格式"),!1}return!0},de=()=>{if(!ue())return;const l={product_type:s.product_type,name:s.name,icon:s.icon,config_json:s.config_json||null,status:s.status};N.value?_.dispatch("productType/updateProductType",{id:N.value.id,product_type:l}).then(e=>{m.success("商品类别已更新"),C.value=!1}):_.dispatch("productType/addProductType",l).then(e=>{m.success("商品类别已新增"),C.value=!1})},re=l=>{$.value=l,D.value=!0},ie=()=>{_.dispatch("productType/deleteProductType",$.value.id).then(l=>{m.success("商品类别已删除"),D.value=!1})},pe=V(()=>{const l=v.value.map(e=>e.id);return W.value.filter(e=>!l.includes(e.id))}),ce=l=>{G.value=l,B.value=null;const e=(l==null?void 0:l.ai_tool_pages)||[];v.value=e.slice().sort((n,c)=>(n.rank||0)-(c.rank||0)).map(n=>({...n})),I.value=!0},me=l=>{if(!l)return;const e=W.value.find(n=>n.id===l);e&&!v.value.find(n=>n.id===l)&&(v.value.push(e),B.value=null)},fe=l=>{const e=v.value.findIndex(n=>n.id===l);e!==-1&&v.value.splice(e,1)},_e=async()=>{try{const l=v.value.map(e=>e.id);await _.dispatch("productType/bindAiToolPagesToProductType",{productTypeId:G.value.id,aiToolPageIds:l}),m.success("AI工具页面已保存"),I.value=!1}catch(l){console.error("保存失败:",l),m.error("保存失败")}},ve=V(()=>b.value?z.value.filter(l=>l.id!==b.value.id):z.value),ye=l=>{b.value=l,l.recommended_product_types&&Array.isArray(l.recommended_product_types)?j.value=l.recommended_product_types.map(e=>z.value.find(n=>n.id===e.id)||e).filter(Boolean):j.value=[],S.value=!0},ge=async()=>{try{const l=b.value.name||b.value.product_type,e=j.value.map(n=>n.name||n.product_type);await Z.post("/api/admin/product_type/recommendations/update",{product_name:l,recommended_names:e}),m.success("关联商品类别已保存"),S.value=!1,await _.dispatch("productType/fetchProductTypes")}catch(l){console.error("保存关联商品类别失败:",l),m.error("保存关联商品类别失败")}};return(l,e)=>{const n=i("el-button"),c=i("el-table-column"),x=i("el-tag"),F=i("el-table"),P=i("el-pagination"),q=i("el-input"),T=i("el-form-item"),be=i("el-upload"),Q=i("el-radio"),Te=i("el-radio-group"),X=i("el-form"),O=i("el-dialog"),M=i("el-text"),H=i("el-option"),K=i("el-select"),Ve=i("el-icon"),ke=ze("loading");return d(),f("div",Se,[J.value?(d(),y(n,{key:0,type:"primary",onClick:e[0]||(e[0]=t=>L())},{default:o(()=>[...e[18]||(e[18]=[u("新增商品类别",-1)])]),_:1})):w("",!0),Ue((d(),y(F,{data:le.value,style:{width:"100%"},class:"mt-4"},{default:o(()=>[a(c,{prop:"id",label:"类别ID",width:"100"}),a(c,{prop:"product_type",label:"产品类型"}),a(c,{prop:"name",label:"产品名称",width:"180"}),a(c,{label:"图标",width:"100"},{default:o(({row:t})=>[t.icon?(d(),f("img",{key:0,src:t.icon,class:"icon-preview-small"},null,8,je)):(d(),f("span",Ne,"无"))]),_:1}),a(c,{prop:"status",label:"状态",width:"80"},{default:o(({row:t})=>[a(x,{type:t.status===1?"success":"danger",size:"small"},{default:o(()=>[u(k(t.status===1?"可用":"不可用"),1)]),_:2},1032,["type"])]),_:1}),a(c,{label:"关联AI工具页面"},{default:o(({row:t})=>[(d(!0),f(R,null,E(t.ai_tool_pages||[],r=>(d(),y(x,{key:r.id,class:"mr-1",size:"small",type:"success"},{default:o(()=>[u(k(r.name),1)]),_:2},1024))),128))]),_:1}),a(c,{label:"关联商品类别"},{default:o(({row:t})=>[(d(!0),f(R,null,E(t.recommended_product_types||[],r=>(d(),y(x,{key:r.id,class:"mr-1",size:"small",type:"info"},{default:o(()=>[u(k(r.name),1)]),_:2},1024))),128)),!t.recommended_product_types||t.recommended_product_types.length===0?(d(),f("span",$e,"无")):w("",!0)]),_:1}),a(c,{label:"操作",width:"280"},{default:o(({row:t})=>[J.value?(d(),y(n,{key:0,type:"primary",size:"small",onClick:r=>L(t)},{default:o(()=>[...e[19]||(e[19]=[u("编辑",-1)])]),_:1},8,["onClick"])):w("",!0),J.value?(d(),y(n,{key:1,type:"danger",size:"small",onClick:r=>re(t)},{default:o(()=>[...e[20]||(e[20]=[u("删除",-1)])]),_:1},8,["onClick"])):w("",!0),a(n,{size:"small",onClick:r=>ce(t)},{default:o(()=>[...e[21]||(e[21]=[u("管理AI工具页面",-1)])]),_:1},8,["onClick"]),a(n,{type:"warning",size:"small",onClick:r=>ye(t)},{default:o(()=>[...e[22]||(e[22]=[u("绑定关联商品类别",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[ke,ee.value]]),g("div",Be,[a(P,{"current-page":U.value,"onUpdate:currentPage":e[1]||(e[1]=t=>U.value=t),"page-size":A.value,"onUpdate:pageSize":e[2]||(e[2]=t=>A.value=t),"page-sizes":[10,20,50,100],layout:"total, sizes, prev, pager, next, jumper",total:te.value,onSizeChange:oe,onCurrentChange:ae},null,8,["current-page","page-size","total"])]),a(O,{modelValue:C.value,"onUpdate:modelValue":e[8]||(e[8]=t=>C.value=t),title:N.value?"编辑商品类别":"新增商品类别",width:"700px"},{footer:o(()=>[a(n,{onClick:e[7]||(e[7]=t=>C.value=!1)},{default:o(()=>[...e[26]||(e[26]=[u("取消",-1)])]),_:1}),a(n,{type:"primary",onClick:de},{default:o(()=>[...e[27]||(e[27]=[u("保存",-1)])]),_:1})]),default:o(()=>[a(X,{model:s,"label-width":"120px"},{default:o(()=>[a(T,{label:"产品类型",required:""},{default:o(()=>[a(q,{modelValue:s.product_type,"onUpdate:modelValue":e[3]||(e[3]=t=>
1s.product_type=t),placeholder:"例如: ChatGpt, 奈飞"},null,8,["modelValue"])]),_:1}),a(T,{label:"产品名称"},{default:o(()=>[a(q,{modelValue:s.name,"onUpdate:modelValue":e[4]||(e[4]=t=>s.name=t)},null,8,["modelValue"])]),_:1}),a(T,{label:"产品图标"},{default:o(()=>[a(be,{"auto-upload":!0,"before-upload":se,"http-request":ne,"show-file-list":!1,accept:"image/*"},{default:o(()=>[s.icon?(d(),f("img",{key:0,src:s.icon,class:"icon-preview icon-opacity"},null,8,Fe)):(d(),y(n,{key:1,type:"primary"},{default:o(()=>[...e[23]||(e[23]=[u("上传图标",-1)])]),_:1}))]),_:1})]),_:1}),a(T,{label:"配置信息(JSON)"},{default:o(()=>[a(q,{modelValue:s.config_json,"onUpdate:modelValue":e[5]||(e[5]=t=>s.config_json=t),type:"textarea",rows:4,placeholder:'JSON格式,例如: {"use_help": "帮助信息", "details": "详情"}'},null,8,["modelValue"])]),_:1}),a(T,{label:"状态"},{default:o(()=>[a(Te,{modelValue:s.status,"onUpdate:modelValue":e[6]||(e[6]=t=>s.status=t)},{default:o(()=>[a(Q,{label:1},{default:o(()=>[...e[24]||(e[24]=[u("可用",-1)])]),_:1}),a(Q,{label:0},{default:o(()=>[...e[25]||(e[25]=[u("不可用",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"]),a(O,{modelValue:D.value,"onUpdate:modelValue":e[10]||(e[10]=t=>D.value=t),title:"确认删除",width:"300px"},{footer:o(()=>[a(n,{onClick:e[9]||(e[9]=t=>D.value=!1)},{default:o(()=>[...e[28]||(e[28]=[u("取消",-1)])]),_:1}),a(n,{type:"danger",onClick:ie},{default:o(()=>[...e[29]||(e[29]=[u("删除",-1)])]),_:1})]),default:o(()=>{var t,r;return[g("span",null,"确定要删除商品类别「"+k(((t=$.value)==null?void 0:t.name)||((r=$.value)==null?void 0:r.product_type))+"」吗?",1)]}),_:1},8,["modelValue"]),a(O,{modelValue:S.value,"onUpdate:modelValue":e[13]||(e[13]=t=>S.value=t),title:"绑定关联商品类别",width:"600px"},{footer:o(()=>[a(n,{onClick:e[12]||(e[12]=t=>S.value=!1)},{default:o(()=>[...e[30]||(e[30]=[u("取消",-1)])]),_:1}),a(n,{type:"primary",onClick:ge},{default:o(()=>[...e[31]||(e[31]=[u("保存",-1)])]),_:1})]),default:o(()=>[a(X,null,{default:o(()=>[a(T,{label:"当前商品"},{default:o(()=>[a(M,null,{default:o(()=>{var t,r;return[u(k(((t=b.value)==null?void 0:t.name)||((r=b.value)==null?void 0:r.product_type)),1)]}),_:1})]),_:1}),a(T,{label:"选择关联商品类别"},{default:o(()=>[a(K,{modelValue:j.value,"onUpdate:modelValue":e[11]||(e[11]=t=>j.value=t),multiple:"",filterable:"",placeholder:"请选择要关联的商品类别","value-key":"id",style:{width:"100%"}},{default:o(()=>[(d(!0),f(R,null,E(ve.value,t=>(d(),y(H,{key:t.id,label:t.name||t.product_type,value:t},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),a(O,{modelValue:I.value,"onUpdate:modelValue":e[17]||(e[17]=t=>I.value=t),title:"管理AI工具页面",width:"600px"},{footer:o(()=>[a(n,{onClick:e[16]||(e[16]=t=>I.value=!1)},{default:o(()=>[...e[35]||(e[35]=[u("取消",-1)])]),_:1}),a(n,{type:"primary",onClick:_e},{default:o(()=>[...e[36]||(e[36]=[u("保存",-1)])]),_:1})]),default:o(()=>[g("div",Oe,[g("div",Re,[a(M,{class:"text-sm"},{default:o(()=>[...e[32]||(e[32]=[u("已绑定的AI工具页面(可拖拽排序):",-1)])]),_:1})]),a(Y(Ae),{modelValue:v.value,"onUpdate:modelValue":e[14]||(e[14]=t=>v.value=t),"item-key":"id",handle:".drag-handle",class:"selected-pages-list"},{item:o(({element:t})=>[g("div",Ee,[a(Ve,{class:"drag-handle mr-2",style:{cursor:"move",color:"#909399"}},{default:o(()=>[a(Y(Ie))]),_:1}),t.icon?(d(),f("img",{key:0,src:t.icon,class:"page-icon-small mr-2"},null,8,Je)):w("",!0),g("span",qe,k(t.name),1),a(n,{type:"danger",size:"small",text:"",onClick:r=>fe(t.id)},{default:o(()=>[...e[33]||(e[33]=[u(" 移除 ",-1)])]),_:1},8,["onClick"])])]),_:1},8,["modelValue"]),g("div",Me,[a(M,{class:"text-sm"},{default:o(()=>[...e[34]||(e[34]=[u("选择要添加的AI工具页面:",-1)])]),_:1})]),a(K,{modelValue:B.value,"onUpdate:modelValue":e[15]||(e[15]=t=>B.value=t),placeholder:"请选择要添加的AI工具页面",filterable:"",style:{width:"100%"},onChange:me},{default:o(()=>[(d(!0),f(R,null,E(pe.value,t=>(d(),y(H,{key:t.id,label:t.name,value:t.id},{default:o(()=>[g("div",We,[t.icon?(d(),f("img",{key:0,src:t.icon,class:"page-icon-tiny mr-2"},null,8,Ge)):w("",!0),g("span",null,k(t.name),1)])]),_:2},1032,["label","value"]))),128))]),_:1},8,["modelValue"])])]),_:1},8,["modelValue"])])}}},Ze=De(Qe,[["__scopeId","data-v-e1733707"]]);export{Ze 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.