2 lines
6.2 KiB
JavaScript
2 lines
6.2 KiB
JavaScript
import{d as Y,u as G,r as v,e as g,f as s,g as c,j as e,h as o,w as d,Y as H,L as y,y as T,p as x,k as K,a0 as V,l as b,t as i,$ as D,n as C,m as k}from"./index-b37e64ca.js";import{I as w}from"./iconify-b5ab1212.js";import{_ as Q}from"./Jeditor.vue_vue_type_style_index_0_lang-27957db9.js";import{_ as X}from"./_plugin-vue_export-helper-c27b6911.js";import"./common-0beb20f4.js";const Z={class:"app-detail"},ee={class:"page-header"},ae={class:"header-content"},se={class:"header-text"},le={class:"header-actions"},te={class:"app-content"},oe={class:"app-card"},ie={class:"app-info-section"},ne={class:"app-content-layout"},re={class:"app-image-section"},ce=["src"],de={key:1,class:"image-actions"},pe={key:2,class:"placeholder-image"},ue={class:"upload-hint"},fe={key:3,class:"drag-overlay"},ve={class:"app-info-content"},_e={class:"info-list"},me={class:"info-item"},he={class:"label"},ge={class:"info-item"},ye={class:"label"},be={class:"info-item"},De={class:"label"},ke={class:"info-item"},we={class:"label"},Fe={class:"info-item"},Ee={class:"label"},Ue={class:"app-description-section"},xe={class:"description-content"},Ie=Y({__name:"PublishApp",setup(Ce){const A=K(),u=G(),I=v(!1),_=v(""),F=v(""),m=v(!1),E=v(null),n=v({title:"",app_name:"",subtitle:"",repository_url:"",file_url:"",description:""}),z=()=>{A.push("/app-marketplace")},j=async l=>{var t;m.value=!1;const a=(t=l.dataTransfer)==null?void 0:t.files;if(a&&a.length>0){const r=a[0];r.type.startsWith("image/")?await L({file:{file:r}}):u.error("请选择图片文件")}},M=l=>{l.preventDefault()},O=l=>{l.preventDefault(),m.value=!0},S=l=>{l.preventDefault();const a=l.currentTarget,t=l.relatedTarget;a.contains(t)||(m.value=!1)},q=()=>{var l;(l=E.value)==null||l.click()},$=async l=>{var r;const t=(r=l.target.files)==null?void 0:r[0];t&&await L({file:{file:t}})},J=()=>{_.value="",F.value="",E.value&&(E.value.value="")},L=async l=>{var h,R,N,B;const{file:a,onFinish:t,onError:r}=(h=l.file)!=null&&h.file?{file:l.file.file,onFinish:l.onFinish,onError:l.onError}:(R=l.fileList)!=null&&R.length?{file:l.fileList[0].file,onFinish:l.onFinish,onError:l.onError}:l instanceof File?{file:l,onFinish:null,onError:null}:{file:null,onFinish:null,onError:null};if(!a||!(a instanceof File)){r&&r(new Error("无效的文件"));return}const U=new FileReader;U.onload=f=>{var p;_.value=(p=f.target)==null?void 0:p.result},U.readAsDataURL(a);try{const f=new FormData;f.append("file",a);const p=await V.post("/jingrow/upload-image",f,{timeout:3e4});if(p.data.success)F.value=p.data.url,u.success("图片上传成功"),t&&t();else{const P=p.data.error||"图片上传失败";u.error(P),r&&r(new Error(P))}}catch(f){const p=((B=(N=f.response)==null?void 0:N.data)==null?void 0:B.detail)||f.message||"图片上传失败";u.error("图片上传失败: "+p),r&&r(new Error(p))}},W=async()=>{var l,a;if(!n.value.title||!n.value.app_name){u.error("请填写应用标题和应用名称");return}I.value=!0;try{const t=new FormData;Object.entries(n.value).forEach(([U,h])=>{h&&t.append(U,h)}),F.value&&t.append("app_image",F.value),(await V.post("/jingrow/create-app",t)).data.success?(u.success("应用发布成功"),A.push("/app-marketplace")):u.error("应用发布失败")}catch(t){u.error(((a=(l=t.response)==null?void 0:l.data)==null?void 0:a.detail)||"应用发布失败")}finally{I.value=!1}};return(l,a)=>(b(),g("div",Z,[s("div",ee,[s("div",ae,[s("div",se,[s("h1",null,c(e(i)("Publish App")),1)]),s("div",le,[o(e(C),{onClick:z,size:"medium"},{icon:d(()=>[o(e(D),null,{default:d(()=>[o(e(w),{icon:"tabler:arrow-left"})]),_:1})]),default:d(()=>[x(" "+c(e(i)("Back")),1)]),_:1}),o(e(C),{type:"primary",onClick:W,loading:I.value,size:"medium"},{icon:d(()=>[o(e(D),null,{default:d(()=>[o(e(w),{icon:"tabler:upload"})]),_:1})]),default:d(()=>[x(" "+c(e(i)("Publish")),1)]),_:1},8,["loading"])])])]),s("div",te,[s("div",oe,[s("div",ie,[s("div",ne,[s("div",re,[s("div",{class:H(["app-image",{"drag-over":m.value}]),onDragover:y(M,["prevent"]),onDragenter:y(O,["prevent"]),onDragleave:y(S,["prevent"]),onDrop:y(j,["prevent"]),onClick:q},[_.value?(b(),g("img",{key:0,src:_.value,alt:"应用图片预览"},null,8,ce)):T("",!0),_.value?(b(),g("div",de,[o(e(C),{type:"error",size:"small",circle:"",onClick:y(J,["stop"]),class:"remove-btn"},{icon:d(()=>[o(e(D),null,{default:d(()=>[o(e(w),{icon:"tabler:x"})]),_:1})]),_:1})])):(b(),g("div",pe,[o(e(D),{size:"80"},{default:d(()=>[o(e(w),{icon:"tabler:apps"})]),_:1}),s("p",ue,c(e(i)("Click or drag to upload")),1)])),m.value?(b(),g("div",fe,[o(e(D),{size:"60"},{default:d(()=>[o(e(w),{icon:"tabler:upload"})]),_:1}),s("p",null,c(e(i)("Drop image here")),1)])):T("",!0)],34),s("input",{ref_key:"fileInput",ref:E,type:"file",accept:"image/*",style:{display:"none"},onChange:$},null,544)]),s("div",ve,[a[8]||(a[8]=s("div",{class:"app-header"},null,-1)),s("div",_e,[s("div",me,[s("span",he,[x(c(e(i)("App Title"))+":",1),a[6]||(a[6]=s("span",{class:"required"},"*",-1))]),o(e(k),{value:n.value.title,"onUpdate:value":a[0]||(a[0]=t=>n.value.title=t),placeholder:e(i)("App title")},null,8,["value","placeholder"])]),s("div",ge,[s("span",ye,[x(c(e(i)("App Name"))+":",1),a[7]||(a[7]=s("span",{class:"required"},"*",-1))]),o(e(k),{value:n.value.app_name,"onUpdate:value":a[1]||(a[1]=t=>n.value.app_name=t),placeholder:e(i)("App name")},null,8,["value","placeholder"])]),s("div",be,[s("span",De,c(e(i)("Subtitle"))+":",1),o(e(k),{value:n.value.subtitle,"onUpdate:value":a[2]||(a[2]=t=>n.value.subtitle=t),type:"textarea",placeholder:e(i)("Brief description"),rows:3},null,8,["value","placeholder"])]),s("div",ke,[s("span",we,c(e(i)("Repository URL"))+":",1),o(e(k),{value:n.value.repository_url,"onUpdate:value":a[3]||(a[3]=t=>n.value.repository_url=t),placeholder:e(i)("Repository URL")},null,8,["value","placeholder"])]),s("div",Fe,[s("span",Ee,c(e(i)("File URL"))+":",1),o(e(k),{value:n.value.file_url,"onUpdate:value":a[4]||(a[4]=t=>n.value.file_url=t),placeholder:e(i)("File URL")},null,8,["value","placeholder"])])])])])]),s("div",Ue,[s("div",xe,[o(Q,{df:{fieldname:"description",label:e(i)("Description"),fieldtype:"Jeditor"},modelValue:n.value.description,"onUpdate:modelValue":a[5]||(a[5]=t=>n.value.description=t),ctx:{t:e(i)}},null,8,["df","modelValue","ctx"])])])])])]))}});const Pe=X(Ie,[["__scopeId","data-v-819d5383"]]);export{Pe as default};
|