Files
asset-tracker/web/dist/_assets/Assets-CV_5e6kl.js

2 lines
7.5 KiB
JavaScript

import{_ as G}from"./AppNav.vue_vue_type_script_setup_true_lang-RQbRtBk5.js";import{d as z,p as J,l as N,w as a,r as i,a as e,c as O,q as Q,F as R,f as _,g as W,o as C,E as k,t as x,k as X,j as Z,h as b,m as y,b as T,s as ee,v as j}from"./index-CnyV6Gd0.js";import{_ as te}from"./PageState.vue_vue_type_script_setup_true_lang-DEQuT0jG.js";import{a as ae,u as le,c as ne,l as oe}from"./assets-BdPxpXLt.js";import{l as ie}from"./categories-Bz8nm2Da.js";import{g as L}from"./errors-E9D9vVes.js";const re=z({__name:"AssetFormDialog",props:{modelValue:{type:Boolean},editing:{default:null},categories:{}},emits:["update:modelValue","submit"],setup(d,{emit:o}){const g=d,m=o,t=W({name:"",category_id:void 0,quantity:1,unit_price:0,currency:"USD",expiry_date:""});J(()=>g.editing,c=>{c?Object.assign(t,{...c,expiry_date:c.expiry_date?c.expiry_date.slice(0,16):""}):Object.assign(t,{name:"",category_id:void 0,quantity:1,unit_price:0,currency:"USD",expiry_date:""})},{immediate:!0});function p(){if(!t.name?.trim())return k.error("资产名必填");if(Number(t.quantity)<0||Number(t.unit_price)<0)return k.error("数量/单价必须 >= 0");m("submit",{name:t.name.trim(),category_id:Number(t.category_id),quantity:Number(t.quantity),unit_price:Number(t.unit_price),currency:String(t.currency||"").toUpperCase(),expiry_date:t.expiry_date?new Date(t.expiry_date).toISOString():""})}return(c,l)=>{const v=i("el-input"),f=i("el-form-item"),D=i("el-option"),$=i("el-select"),U=i("el-input-number"),M=i("el-date-picker"),q=i("el-form"),V=i("el-button"),S=i("el-dialog");return C(),N(S,{"model-value":d.modelValue,title:d.editing?"编辑资产":"新增资产",width:"560px",onClose:l[7]||(l[7]=r=>m("update:modelValue",!1))},{footer:a(()=>[e(V,{onClick:l[6]||(l[6]=r=>m("update:modelValue",!1))},{default:a(()=>[...l[8]||(l[8]=[_("取消",-1)])]),_:1}),e(V,{type:"primary",onClick:p},{default:a(()=>[...l[9]||(l[9]=[_("保存",-1)])]),_:1})]),default:a(()=>[e(q,{"label-width":"90px"},{default:a(()=>[e(f,{label:"名称"},{default:a(()=>[e(v,{modelValue:t.name,"onUpdate:modelValue":l[0]||(l[0]=r=>t.name=r)},null,8,["modelValue"])]),_:1}),e(f,{label:"分类"},{default:a(()=>[e($,{modelValue:t.category_id,"onUpdate:modelValue":l[1]||(l[1]=r=>t.category_id=r),style:{width:"100%"}},{default:a(()=>[(C(!0),O(R,null,Q(d.categories,r=>(C(),N(D,{key:r.id,label:r.name,value:r.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(f,{label:"数量"},{default:a(()=>[e(U,{modelValue:t.quantity,"onUpdate:modelValue":l[2]||(l[2]=r=>t.quantity=r),min:0,style:{width:"100%"}},null,8,["modelValue"])]),_:1}),e(f,{label:"单价"},{default:a(()=>[e(U,{modelValue:t.unit_price,"onUpdate:modelValue":l[3]||(l[3]=r=>t.unit_price=r),min:0,style:{width:"100%"}},null,8,["modelValue"])]),_:1}),e(f,{label:"币种"},{default:a(()=>[e(v,{modelValue:t.currency,"onUpdate:modelValue":l[4]||(l[4]=r=>t.currency=r)},null,8,["modelValue"])]),_:1}),e(f,{label:"到期日"},{default:a(()=>[e(M,{modelValue:t.expiry_date,"onUpdate:modelValue":l[5]||(l[5]=r=>t.expiry_date=r),type:"datetime","value-format":"YYYY-MM-DDTHH:mm",style:{width:"100%"}},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["model-value","title"])}}}),se=z({__name:"ExpiryBadge",props:{expiryDate:{}},setup(d){const o=d;function g(m){if(!m)return"无到期日";const t=new Date(m).getTime()-Date.now(),p=Math.ceil(t/(24*3600*1e3));return p>=0?`剩余 ${p}`:`已过期 ${Math.abs(p)}`}return(m,t)=>{const p=i("el-tag");return C(),N(p,{size:"small",type:d.expiryDate?"warning":"info"},{default:a(()=>[_(x(g(o.expiryDate)),1)]),_:1},8,["type"])}}}),ue=X("assets",{state:()=>({list:[],total:0,page:1,page_size:10,status:""}),actions:{async fetch(){const d=await oe({page:this.page,page_size:this.page_size,status:this.status||void 0});this.list=d.data||[],this.total=d.total||0},async create(d){await ne(d),await this.fetch()},async update(d,o){await le(d,o),await this.fetch()},async remove(d){await ae(d),await this.fetch()}}}),de={class:"page"},me={style:{"margin-top":"12px",display:"flex","justify-content":"flex-end"}},ve=z({__name:"Assets",setup(d){const o=ue(),g=b([]),m=b(!1),t=b(null),p=b(!1),c=b(""),l=b("");let v=null;async function f(){const u=await ie();g.value=u.data||[]}async function D(){p.value=!0,c.value="";try{await Promise.all([o.fetch(),f()])}catch(u){c.value=L(u,"资产数据加载失败")}finally{p.value=!1}}function $(){t.value=null,m.value=!0}function U(u){t.value=u,m.value=!0}async function M(u){try{t.value?await o.update(t.value.id,u):await o.create(u),m.value=!1,k.success("保存成功")}catch(n){k.error(L(n,"保存失败"))}}async function q(u){await ee.confirm("确认删除该资产?","提示",{type:"warning"}),await o.remove(u),k.success("删除成功")}const V=j(()=>Object.fromEntries(g.value.map(u=>[u.id,u.name]))),S=j(()=>{const u=l.value.trim().toLowerCase();return u?(o.list||[]).filter(n=>String(n.name||"").toLowerCase().includes(u)||String(V.value[n.category_id]||"").toLowerCase().includes(u)):o.list});function r(){v&&clearTimeout(v),v=setTimeout(()=>{},300)}return Z(D),(u,n)=>{const A=i("el-option"),Y=i("el-select"),E=i("el-col"),F=i("el-input"),h=i("el-button"),I=i("el-row"),B=i("el-card"),w=i("el-table-column"),H=i("el-table"),K=i("el-pagination");return C(),O("div",de,[e(G),e(B,{class:"card"},{default:a(()=>[e(I,{gutter:12},{default:a(()=>[e(E,{xs:24,sm:8},{default:a(()=>[e(Y,{modelValue:y(o).status,"onUpdate:modelValue":n[0]||(n[0]=s=>y(o).status=s),placeholder:"状态筛选",clearable:"",onChange:y(o).fetch,style:{width:"100%"}},{default:a(()=>[e(A,{label:"active",value:"active"}),e(A,{label:"inactive",value:"inactive"})]),_:1},8,["modelValue","onChange"])]),_:1}),e(E,{xs:24,sm:8},{default:a(()=>[e(F,{modelValue:l.value,"onUpdate:modelValue":n[1]||(n[1]=s=>l.value=s),placeholder:"按资产名/分类搜索",clearable:"",onInput:r},null,8,["modelValue"])]),_:1}),e(E,{xs:24,sm:8},{default:a(()=>[e(h,{type:"primary",onClick:$},{default:a(()=>[...n[4]||(n[4]=[_("新增资产",-1)])]),_:1})]),_:1})]),_:1})]),_:1}),e(B,{class:"card"},{default:a(()=>[e(te,{loading:p.value,error:c.value,empty:!p.value&&!c.value&&S.value.length===0,"empty-text":"当前没有资产记录"},{retry:a(()=>[e(h,{onClick:D},{default:a(()=>[...n[5]||(n[5]=[_("重试",-1)])]),_:1})]),default:a(()=>[e(H,{data:S.value},{default:a(()=>[e(w,{prop:"name",label:"名称","min-width":"120"}),e(w,{label:"分类","min-width":"120"},{default:a(s=>[_(x(V.value[s.row.category_id]||s.row.category_id),1)]),_:1}),e(w,{label:"估值","min-width":"120"},{default:a(s=>[_(x(s.row.total_value)+" "+x(s.row.currency),1)]),_:1}),e(w,{label:"到期","min-width":"180"},{default:a(s=>[T("div",null,x(s.row.expiry_date||"-"),1),e(se,{"expiry-date":s.row.expiry_date},null,8,["expiry-date"])]),_:1}),e(w,{prop:"status",label:"状态",width:"100"}),e(w,{label:"操作",width:"160"},{default:a(s=>[e(h,{link:"",type:"primary",onClick:P=>U(s.row)},{default:a(()=>[...n[6]||(n[6]=[_("编辑",-1)])]),_:1},8,["onClick"]),e(h,{link:"",type:"danger",onClick:P=>q(s.row.id)},{default:a(()=>[...n[7]||(n[7]=[_("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]),T("div",me,[e(K,{background:"",layout:"prev, pager, next, total",total:y(o).total,"page-size":y(o).page_size,"current-page":y(o).page,onCurrentChange:n[2]||(n[2]=s=>{y(o).page=s,y(o).fetch()})},null,8,["total","page-size","current-page"])])]),_:1},8,["loading","error","empty"])]),_:1}),e(re,{modelValue:m.value,"onUpdate:modelValue":n[3]||(n[3]=s=>m.value=s),editing:t.value,categories:g.value,onSubmit:M},null,8,["modelValue","editing","categories"])])}}});export{ve as default};