Files
FileShare/server/web/dist/assets/FilesView-lLPRhmyI.js
T
SKYMirror 6f1a925833
Release 镜像 / 测试(推送前置门禁) (push) Failing after 12s
Release 镜像 / 多架构构建并推送 ACR (push) Skipped
26.9:品牌统一(fileshare)+ 版本号改为日期式
- 数据库默认文件 filecodebox.db → fileshare.db(config.go 默认值与全部文档/编排同步)
- Go module filecodebox → fileshare(全部 import 同步,build/vet/test 全绿)
- 应用版本 APP_VERSION 2.5.6 → 26.9(health 接口已验证返回 26.9)
- deploy 编排统一:compose 项目名、Postgres 默认凭据、minio 桶名、env 注释
- JWT issuer、存储临时目录前缀、web 包名同步 fileshare
- CI:镜像 tag 以 APP_VERSION 为唯一版本源,main/tag 推送即发布
  ${VER} + latest;tag 触发时校验 tag 名与 APP_VERSION 一致,防错版
- 本地开发库文件已改名 fileshare.db(含 -shm/-wal 清理)
2026-09-05 06:32:18 +08:00

2 lines
8.4 KiB
JavaScript

import{d as N,I as V,P as Y,z as J,c as f,w as $,b as e,t as a,Q as X,n as Z,g as L,T as ee,o as p,u as te,a as ne,i as ie,f as l,C as S,D as T,q as z,F as se,r as le,G as D,A as ae,j as _,R as A,H as x,e as B,s as oe,K as E,k as w,p as de,M as ce}from"./index-BKnWAKao.js";import{a as ue,b as re,c as me,d as pe}from"./admin-KnbIpHLF.js";import{p as fe}from"./share-B-zR67vw.js";import{_ as he}from"./Pager.vue_vue_type_script_setup_true_lang-DZv_x-2P.js";const be=["aria-label"],ve={class:"modal-title"},ge=N({__name:"AppModal",props:{open:{type:Boolean},title:{},width:{}},emits:["close"],setup(h,{emit:t}){const k=h,d=t;function r(b){b.key==="Escape"&&k.open&&d("close")}return V(()=>document.addEventListener("keydown",r)),Y(()=>document.removeEventListener("keydown",r)),(b,g)=>(p(),J(ee,{to:"body"},[h.open?(p(),f("div",{key:0,class:"modal-overlay",onClick:g[0]||(g[0]=$(m=>d("close"),["self"]))},[e("div",{class:"modal",style:Z(h.width?{maxWidth:h.width}:void 0),role:"dialog","aria-modal":"true","aria-label":h.title},[e("h3",ve,a(h.title),1),X(b.$slots,"default")],12,be)])):L("",!0)]))}}),ye={class:"toolbar"},_e={class:"page-title"},xe={class:"page-sub"},ke=["placeholder"],Ce={class:"btn",type:"submit"},Se=["disabled","title"],Te={key:0,class:"loading-block"},$e={key:1,class:"card empty"},Fe={key:2,class:"table-wrap"},ze={class:"table"},De={style:{width:"36px"}},Ae=["checked"],Be={style:{"min-width":"210px"}},Ee=["checked","onChange"],we={class:"code-cell"},Ne=["title"],Ve={class:"row-actions"},Le=["onClick"],Me=["onClick"],Ue=["onClick"],Ie=["onClick"],Re=["onClick"],He={class:"field"},Pe={class:"field"},Oe={class:"field"},je=["value"],qe={class:"modal-actions"},Ke=["disabled"],Je=N({__name:"FilesView",setup(h){const{t}=te(),k=ne(),d=ie(),r=_([]),b=_(0),g=_(!1),m=A({page:1,size:10,keyword:""}),c=_(new Set);async function v(){g.value=!0;try{const n=await ue({...m});r.value=n.data,b.value=n.total,c.value=new Set}catch(n){d.error(n instanceof x?n.msg:t("admin.files.loadFailed"))}finally{g.value=!1}}function M(){m.page=1,v()}function U(n,i){m.page=n,m.size=i,v()}function I(n){const i=new Set(c.value);i.has(n)?i.delete(n):i.add(n),c.value=i}const F=()=>r.value.length>0&&r.value.every(n=>c.value.has(n.id));function R(){c.value=F()?new Set:new Set(r.value.map(n=>n.id))}async function H(n){if(window.confirm(t("admin.files.confirmDelete",{name:n.name||n.code})))try{await me(n.id),d.success(t("admin.files.deleteSuccess")),v()}catch(i){d.error(i instanceof x?i.msg:t("admin.files.deleteFailed"))}}async function P(){if(c.value.size&&window.confirm(t("admin.files.confirmBatchDelete",{count:c.value.size})))try{await re([...c.value]),d.success(t("admin.files.batchDeleteSuccess")),v()}catch(n){d.error(n instanceof x?n.msg:t("admin.files.batchDeleteFailed"))}}const y=_(!1),C=_(!1),o=A({id:0,code:"",expired_at:"",expired_count:null,original:null});function O(n){o.id=n.id,o.code=n.code,o.original=n,o.expired_at=n.expiredAt?j(n.expiredAt):"",o.expired_count=n.expiredCount,y.value=!0}function j(n){const i=new Date(n);if(Number.isNaN(i.getTime()))return"";const s=u=>`${u}`.padStart(2,"0");return`${i.getFullYear()}-${s(i.getMonth()+1)}-${s(i.getDate())}T${s(i.getHours())}:${s(i.getMinutes())}`}async function q(){const n=o.original;if(!n)return;const i={id:o.id};o.code.trim()&&o.code.trim()!==n.code&&(i.code=o.code.trim());const s=o.expired_count;if(s!==null&&s!==n.expiredCount&&(i.expired_count=s),o.expired_at){const u=new Date(o.expired_at).toISOString();u!==n.expiredAt&&(i.expired_at=u)}if(Object.keys(i).length===1){d.info(t("admin.files.nothingChanged")),y.value=!1;return}C.value=!0;try{await pe(i),d.success(t("admin.files.updateSuccess")),y.value=!1,v()}catch(u){d.error(u instanceof x?u.msg:t("admin.files.updateFailed"))}finally{C.value=!1}}async function K(n){await w(de(n.code,k.shareLinkBase))?d.success(t("admin.files.linkCopied")):d.error(t("common.copyFailed"))}async function W(n){await w(n.code)?d.success(t("admin.files.codeCopied")):d.error(t("common.copyFailed"))}async function G(n){try{const i=await fe(n.code);ce(new Blob([i],{type:"text/plain;charset=utf-8"}),n.name||`${n.code}.txt`)}catch(i){d.error(i instanceof x?i.msg:t("admin.files.fetchTextFailed"))}}function Q(n){return n.expiredCount===null||n.expiredCount<0?t("admin.files.remainingUnlimited"):t("admin.files.remainingCount",{n:n.expiredCount})}return V(v),(n,i)=>(p(),f("div",null,[e("div",ye,[e("div",null,[e("h2",_e,a(l(t)("admin.files.title")),1),e("p",xe,a(l(t)("admin.files.totalRecords",{total:b.value})),1)]),e("form",{class:"toolbar-actions",onSubmit:$(M,["prevent"])},[S(e("input",{"onUpdate:modelValue":i[0]||(i[0]=s=>m.keyword=s),class:"input",placeholder:l(t)("admin.files.searchPlaceholder"),style:{"max-width":"220px"}},null,8,ke),[[T,m.keyword]]),e("button",Ce,a(l(t)("common.search")),1),e("button",{class:"btn btn-ghost",type:"button",onClick:v},a(l(t)("common.refresh")),1),e("button",{class:"btn btn-danger-ghost",type:"button",disabled:!c.value.size,title:c.value.size?l(t)("admin.files.deleteSelectedTitle",{count:c.value.size}):l(t)("admin.files.selectFirst"),onClick:P},a(c.value.size?l(t)("admin.files.batchDeleteWithCount",{count:c.value.size}):l(t)("admin.files.batchDelete")),9,Se)],32)]),g.value?(p(),f("div",Te,[i[6]||(i[6]=e("span",{class:"spin","aria-hidden":"true"},null,-1)),z(" "+a(l(t)("admin.files.loading")),1)])):r.value.length?(p(),f("div",Fe,[e("table",ze,[e("thead",null,[e("tr",null,[e("th",De,[e("input",{type:"checkbox",checked:F(),onChange:R},null,40,Ae)]),e("th",null,a(l(t)("admin.files.colCode")),1),e("th",null,a(l(t)("admin.files.colName")),1),e("th",null,a(l(t)("admin.files.colType")),1),e("th",null,a(l(t)("admin.files.colSize")),1),e("th",null,a(l(t)("admin.files.colUsed")),1),e("th",null,a(l(t)("admin.files.colRemaining")),1),e("th",null,a(l(t)("admin.files.colExpireAt")),1),e("th",null,a(l(t)("admin.files.colStatus")),1),e("th",null,a(l(t)("admin.files.colCreatedAt")),1),e("th",Be,a(l(t)("common.actions")),1)])]),e("tbody",null,[(p(!0),f(se,null,le(r.value,s=>(p(),f("tr",{key:s.id},[e("td",null,[e("input",{type:"checkbox",checked:c.value.has(s.id),onChange:u=>I(s.id)},null,40,Ee)]),e("td",we,a(s.code),1),e("td",{class:"wrap",title:s.name},a(s.name||"-"),9,Ne),e("td",null,[e("span",{class:B(["badge",s.isText?"badge-muted":""])},a(s.isText?l(t)("common.text"):l(t)("common.file")),3)]),e("td",null,a(s.isText?"-":l(oe)(s.size)),1),e("td",null,a(s.usedCount),1),e("td",null,a(Q(s)),1),e("td",null,a(s.expiredAt?l(E)(s.expiredAt):l(t)("time.permanent")),1),e("td",null,[e("span",{class:B(["badge",s.isExpired?"badge-danger":"badge-success"])},a(s.isExpired?l(t)("admin.files.statusExpired"):l(t)("admin.files.statusValid")),3)]),e("td",null,a(l(E)(s.createdAt)),1),e("td",null,[e("div",Ve,[e("button",{class:"btn btn-ghost btn-sm",type:"button",onClick:u=>W(s)},a(l(t)("admin.files.copyCode")),9,Le),e("button",{class:"btn btn-ghost btn-sm",type:"button",onClick:u=>K(s)},a(l(t)("admin.files.copyLink")),9,Me),e("button",{class:"btn btn-ghost btn-sm",type:"button",onClick:u=>O(s)},a(l(t)("admin.files.edit")),9,Ue),s.isText?(p(),f("button",{key:0,class:"btn btn-ghost btn-sm",type:"button",onClick:u=>G(s)},a(l(t)("admin.files.fetchText")),9,Ie)):L("",!0),e("button",{class:"btn btn-danger-ghost btn-sm",type:"button",onClick:u=>H(s)},a(l(t)("admin.files.delete")),9,Re)])])]))),128))])])])):(p(),f("div",$e,[i[7]||(i[7]=e("div",{class:"empty-icon"},"🗂",-1)),z(" "+a(l(t)("admin.files.empty")),1)])),D(he,{page:m.page,size:m.size,total:b.value,onChange:U},null,8,["page","size","total"]),D(ge,{open:y.value,title:l(t)("admin.files.editModalTitle"),onClose:i[5]||(i[5]=s=>y.value=!1)},{default:ae(()=>[e("form",{onSubmit:$(q,["prevent"])},[e("div",He,[e("label",null,a(l(t)("admin.files.colCode")),1),S(e("input",{"onUpdate:modelValue":i[1]||(i[1]=s=>o.code=s),class:"input input-mono",maxlength:"32"},null,512),[[T,o.code]])]),e("div",Pe,[e("label",null,a(l(t)("admin.files.expireAtHint")),1),S(e("input",{"onUpdate:modelValue":i[2]||(i[2]=s=>o.expired_at=s),class:"input",type:"datetime-local"},null,512),[[T,o.expired_at]])]),e("div",Oe,[e("label",null,a(l(t)("admin.files.expireCountHint")),1),e("input",{class:"input",type:"number",value:o.expired_count??-1,onInput:i[3]||(i[3]=s=>o.expired_count=Number(s.target.value))},null,40,je)]),e("div",qe,[e("button",{class:"btn btn-ghost",type:"button",onClick:i[4]||(i[4]=s=>y.value=!1)},a(l(t)("common.cancel")),1),e("button",{class:"btn",type:"submit",disabled:C.value},a(l(t)("common.save")),9,Ke)])],32)]),_:1},8,["open","title"])]))}});export{Je as default};