安全页重构:免密登录与活跃会话;按钮规范统一
CI / test (push) Successful in 53s

This commit is contained in:
2026-07-30 12:23:16 +08:00
parent d0fbecbd43
commit d675b950ee
43 changed files with 1944 additions and 475 deletions
+13 -12
View File
@@ -21,6 +21,7 @@ import {
uploadViaPar,
} from '@/api/objectstorage'
import AppInputNumber from '@/components/AppInputNumber.vue'
import ChoiceChip from '@/components/ChoiceChip.vue'
import ConfirmPop from '@/components/ConfirmPop.vue'
import FormField from '@/components/FormField.vue'
import FormModal from '@/components/FormModal.vue'
@@ -642,9 +643,9 @@ const columns = computed<DataTableColumns<Row>>(() => [
<div class="flex-1" />
<!-- 操作按钮组:移动端整组独立成行,不随标题换行散落 -->
<div class="flex items-center gap-2 max-md:w-full">
<NButton size="small" @click="openParModal('')">分享桶</NButton>
<NButton size="small" @click="emit('settings')">桶设置</NButton>
<NButton size="small" type="primary" @click="pickFiles">上传对象</NButton>
<NButton size="medium" @click="openParModal('')">分享桶</NButton>
<NButton size="medium" @click="emit('settings')">桶设置</NButton>
<NButton size="medium" type="primary" @click="pickFiles">上传对象</NButton>
</div>
<input ref="fileInput" type="file" multiple class="hidden" @change="onFilesPicked" />
</div>
@@ -734,7 +735,7 @@ const columns = computed<DataTableColumns<Row>>(() => [
class="flex items-center gap-2.5 border-b border-line-soft bg-wash/60 px-4.5 py-2 text-[12.5px]"
>
<span class="font-medium">已选 {{ checkedKeys.length }} 项</span>
<NButton size="tiny" @click="batchDownload">逐个下载</NButton>
<NButton size="tiny" quaternary @click="batchDownload">逐个下载</NButton>
<ConfirmPop
:title="`删除选中的 ${checkedKeys.length} 个对象?`"
content="未开版本控制时不可恢复。"
@@ -763,8 +764,10 @@ const columns = computed<DataTableColumns<Row>>(() => [
>
<span>每页 {{ PAGE_SIZE }} 条 · 文件夹为虚拟层级 · Archive 层需恢复后下载</span>
<span class="flex flex-none items-center gap-1.5">
<NButton size="tiny" :disabled="!cursorStack.length" @click="prevPage">上一页</NButton>
<NButton size="tiny" :disabled="!result.data.value?.nextStartWith" @click="nextPage">
<NButton size="tiny" quaternary :disabled="!cursorStack.length" @click="prevPage">
上一页
</NButton>
<NButton size="tiny" quaternary :disabled="!result.data.value?.nextStartWith" @click="nextPage">
下一页
</NButton>
</span>
@@ -922,16 +925,14 @@ const columns = computed<DataTableColumns<Row>>(() => [
class="!w-24"
/>
<span class="text-[12.5px] text-ink-2">小时</span>
<NButton
<ChoiceChip
v-for="q in QUICK_HOURS"
:key="q.value"
size="tiny"
quaternary
:type="parForm.expiresHours === q.value ? 'primary' : 'default'"
:active="parForm.expiresHours === q.value"
@click="parForm.expiresHours = q.value"
>
{{ q.label }}
</NButton>
</ChoiceChip>
</div>
</FormField>
<div
@@ -939,7 +940,7 @@ const columns = computed<DataTableColumns<Row>>(() => [
class="mt-1 flex items-center gap-2 rounded-lg border border-line-soft bg-wash px-3 py-2"
>
<span class="mono min-w-0 flex-1 truncate text-xs">{{ parUrl }}</span>
<NButton size="tiny" @click="copyParUrl">复制</NButton>
<NButton size="tiny" quaternary @click="copyParUrl">复制</NButton>
</div>
<div v-if="parUrl" class="mt-1 text-xs text-warn">
链接仅本次展示,关闭后无法再次获取,请立即保存