diff --git a/admin-frontend-vue/src/pages/account/GroupsPage.vue b/admin-frontend-vue/src/pages/account/GroupsPage.vue
index c6935965..5ceab4b6 100644
--- a/admin-frontend-vue/src/pages/account/GroupsPage.vue
+++ b/admin-frontend-vue/src/pages/account/GroupsPage.vue
@@ -9,6 +9,7 @@ import { openAdminConfirm } from '@/components/admin-confirm'
import { deleteShopGroup, fetchShopGroups } from './shop-group-api'
import type { ShopGroupItem } from './shop-group-model'
import GroupEditorDialog from './GroupEditorDialog.vue'
+import OldPagination from '@/components/OldPagination.vue'
const session = useAdminSessionStore()
const loading = ref(false)
@@ -30,6 +31,12 @@ const filteredRows = computed(() => {
return nameOk && leaderOk
})
})
+/** 全站分页统一:分组列表客户端分页(10/20/50/100)。 */
+const page = ref(1)
+const pageSize = ref(10)
+const pagedGroups = computed(() => filteredRows.value.slice((page.value - 1) * pageSize.value, page.value * pageSize.value))
+function changeGroupPage(p: number) { page.value = p }
+function changeGroupSize(size: number) { pageSize.value = size; page.value = 1 }
function canEditOf(group: ShopGroupItem): boolean {
if (isSuperAdmin.value) return true
@@ -103,12 +110,12 @@ onMounted(loadGroups)
组员 |
创建时间 |
修改时间 |
- 操作 |
+ 操作 |
-
+
| {{ index + 1 }} |
{{ group.name }} |
{{ group.leaderUsername || '-' }} |
@@ -139,6 +146,7 @@ onMounted(loadGroups)
+
(() => {
return nameOk && typeOk
})
})
+/** 全站分页统一:菜单树展平行客户端分页(10/20/50/100)。 */
+const page = ref(1)
+const pageSize = ref(10)
+const pagedMenuRows = computed(() => filteredMenuRows.value.slice((page.value - 1) * pageSize.value, page.value * pageSize.value))
+function changeMenuPage(p: number) { page.value = p }
+function changeMenuSize(size: number) { pageSize.value = size; page.value = 1 }
/** 展平视图:前序 + depth。 */
const menuRows = computed(() => {
const out: MenuRow[] = []
@@ -240,7 +247,7 @@ onMounted(loadMenus)
+
diff --git a/admin-frontend-vue/src/pages/asin/DedupeRegistryPage.vue b/admin-frontend-vue/src/pages/asin/DedupeRegistryPage.vue
index c2ed4058..d2f19029 100644
--- a/admin-frontend-vue/src/pages/asin/DedupeRegistryPage.vue
+++ b/admin-frontend-vue/src/pages/asin/DedupeRegistryPage.vue
@@ -654,6 +654,9 @@ h3 {
font-size: 12.5px;
}
.ops-cell {
+ display: flex;
+ align-items: center;
+ gap: 8px;
white-space: nowrap;
text-align: right;
}
diff --git a/admin-frontend-vue/src/pages/asin/QueryAsinPage.vue b/admin-frontend-vue/src/pages/asin/QueryAsinPage.vue
index 80190e6a..a6a0f726 100644
--- a/admin-frontend-vue/src/pages/asin/QueryAsinPage.vue
+++ b/admin-frontend-vue/src/pages/asin/QueryAsinPage.vue
@@ -51,6 +51,21 @@ function normalizeAsinInput(country: string): void {
draftAsin[country] = draftAsin[country].trim().toUpperCase()
}
+
+async function removeShopAsin(item: QueryAsinItem) {
+ // 删除该店铺全部站点的 ASIN 配置(逐国调用现有端点)。
+ if (!window.confirm(`确定删除店铺“${item.shopName}”的全部站点 ASIN 配置吗?`)) return
+ try {
+ for (const country of QUERY_ASIN_COUNTRIES) {
+ if (asinOf(item, country)) await deleteQueryAsinCountryAsin(item.id, country)
+ }
+ ElMessage.success('已删除')
+ await load()
+ } catch (error) {
+ ElMessage.error(error instanceof Error ? error.message : '删除失败')
+ }
+}
+
async function saveConfig(): Promise {
const item = drawerItem.value
if (!item) return
@@ -385,6 +400,7 @@ onMounted(() => {
|
+
|
diff --git a/admin-frontend-vue/src/pages/records/RecordsSoftwareVersionPage.vue b/admin-frontend-vue/src/pages/records/RecordsSoftwareVersionPage.vue
index 99c460e3..847dbcc9 100644
--- a/admin-frontend-vue/src/pages/records/RecordsSoftwareVersionPage.vue
+++ b/admin-frontend-vue/src/pages/records/RecordsSoftwareVersionPage.vue
@@ -3,6 +3,7 @@ import { formatDateTime } from '@/utils/datetime'
/** 软件版本管理页 · 像素复刻旧版 admin.html panel-version(自绘:面板头+上传新版本、版本列表、全量无分页同旧版)。
* script 逻辑沿用现有 Vue 实现(上传弹窗成功留驻含链接)。 */
import { computed, onMounted, ref } from 'vue'
+import OldPagination from '@/components/OldPagination.vue'
import { ElMessage } from 'element-plus'
import { fetchSoftwareVersions, uploadSoftwareVersion } from './version-api.ts'
import type { SoftwareVersionItem } from './version-dto.ts'
@@ -17,6 +18,12 @@ const filteredItems = computed(() => {
if (!kw) return items.value
return items.value.filter((item) => `${item.version}`.toLowerCase().includes(kw))
})
+/** 全站分页统一:版本列表客户端分页(10/20/50/100)。 */
+const page = ref(1)
+const pageSize = ref(10)
+const pagedVersions = computed(() => filteredItems.value.slice((page.value - 1) * pageSize.value, page.value * pageSize.value))
+function changeVersionPage(p: number) { page.value = p }
+function changeVersionSize(size: number) { pageSize.value = size; page.value = 1 }
const uploadVisible = ref(false)
const uploading = ref(false)
@@ -108,7 +115,7 @@ onMounted(load)
-
+
| {{ row.version }} |
{{ row.fileUrl }}
@@ -130,6 +137,7 @@ onMounted(load)
|
+
diff --git a/admin-frontend-vue/src/pages/tasks/DuplicateCheckPage.vue b/admin-frontend-vue/src/pages/tasks/DuplicateCheckPage.vue
index 0c0c716a..84156694 100644
--- a/admin-frontend-vue/src/pages/tasks/DuplicateCheckPage.vue
+++ b/admin-frontend-vue/src/pages/tasks/DuplicateCheckPage.vue
@@ -787,10 +787,10 @@ onMounted(() => {
height: 34px; border-radius: 7px; padding: 0 16px; font-size: 13px; font-weight: 600;
display: inline-flex; align-items: center; gap: 6px; transition: background 0.15s, color 0.15s, border-color 0.15s;
}
-.dup-ref .btn-primary { background: var(--primary); color: #fff; }
-.dup-ref .btn-primary:hover { background: var(--primary-hover); }
+.dup-ref .btn-primary { background: #4f78a5; color: #fff; }
+.dup-ref .btn-primary:hover { background: #5d83ac; }
.dup-ref .btn-ghost { background: #fff; color: var(--text2); border: 1px solid var(--border-strong); }
-.dup-ref .btn-ghost:hover { border-color: var(--primary); color: var(--primary); }
+.dup-ref .btn-ghost:hover { border-color: #4f78a5; color: #4f78a5; }
.dup-ref .btn-sm { height: 28px; padding: 0 10px; font-size: 12px; border-radius: 6px; }
/* ---------- KPI 统计 ---------- */
diff --git a/admin-frontend-vue/src/pages/tasks/ShopDataTasksPage.vue b/admin-frontend-vue/src/pages/tasks/ShopDataTasksPage.vue
index a31e88d2..1ec25e14 100644
--- a/admin-frontend-vue/src/pages/tasks/ShopDataTasksPage.vue
+++ b/admin-frontend-vue/src/pages/tasks/ShopDataTasksPage.vue
@@ -377,7 +377,7 @@ onMounted(load)