组件
Upload 上传
文件上传;本地列表用 data-pvs-upload;加 data-pvs-upload-auto + URL 走 XHR(主题/CMS 表单)。PivAdmin SPA 仍用 admin/src/api/pivark/system/upload.ts。
Dropzone
<div data-pvs-upload-wrap style="max-width:22rem">
<label class="pvs-upload" data-pvs-upload>
<span class="pvs-upload__icon" aria-hidden="true">⬆</span>
<p class="pvs-upload__title">点击或拖拽文件到此处</p>
<p class="pvs-upload__hint">选文件后下方列表自动追加</p>
<input class="pvs-upload__input" type="file" multiple />
</label>
<ul class="pvs-upload__filelist">
</ul>
</div>Progress row
进度条 DOM 仍由业务填充;JS 默认只追加文件名与大小。
- banner.jpg
<ul class="pvs-upload__filelist" style="max-width:22rem">
<li class="pvs-upload__file pvs-upload__file--uploading">
<span class="pvs-upload__file-name">banner.jpg</span>
<span class="pvs-upload__file-meta">上传中…</span>
<div class="pvs-upload__progress">
<span style="width:65%">
</span>
</div>
</li>
</ul>XHR auto upload
配置 data-pvs-upload-url(如 PivArk /upload/file)+ CSRF meta/属性;触发 pvs-upload:done。
文档站无后台会话时请求会失败,仅演示 DOM/进度条;生产页须带 CSRF 与登录 Cookie。
<div data-pvs-upload-wrap style="max-width:22rem">
<label class="pvs-upload" data-pvs-upload data-pvs-upload-auto data-pvs-upload-url="/upload/file" data-pvs-upload-scene="attachment">
<p class="pvs-upload__title">选文件即 POST(需后端 + CSRF)</p>
<input class="pvs-upload__input" type="file" />
</label>
<ul class="pvs-upload__filelist">
</ul>
</div>
<p class="pvs-text-sm pvs-text-muted pvs-mt-2 pvs-m-0">文档站无后台会话时请求会失败,仅演示 DOM/进度条;生产页须带 CSRF 与登录 Cookie。</p>数据属性
| 类名 | 说明 |
|---|---|
data-pvs-upload | 初始化拖拽 + 列表 |
data-pvs-upload-auto | 选文件后自动 XHR |
data-pvs-upload-url | POST 地址(相对后台 API 根) |
data-pvs-upload-scene | PivArk scene 字段(可选) |
data-pvs-upload-csrf-* | 或 meta pvs-csrf-field/token |
pvs-upload:done / :error | XHR 结果事件 |
PivCss.uploadFile() | 编程式上传 API |
类名速查
| 类名 | 说明 |
|---|---|
pvs-upload | 拖拽区(需 data-pvs-upload) |
pvs-upload__filelist / __file | 已选文件列表 |
pvs-upload__progress | XHR 进度条 |
data-pvs-upload-auto | 自动 POST |
PivAdmin | upload.ts · 去重/分片 · 不用 pivcss.js |