feat: 工作台常用入口可批量编辑,简报改为横幅,列表补下拉刷新

各角色工作台支持批量保存常用入口和业务员看板;AI 简报改成单行横幅避免锁死滑动;仓库/提现/对账等列表统一下拉刷新,并补代付码弹窗。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
李琦
2026-08-18 08:53:16 +08:00
parent 97bc48c17c
commit 62ffb6fd31
85 changed files with 2809 additions and 787 deletions

View File

@@ -10,9 +10,17 @@
<script>
import InputListPage from '@/subPackages/sub_platform_admin/input/InputListPage.vue'
import { getPlatformAdminContext } from '@/subPackages/sub_platform_admin/common/context.js'
import pullRefreshMixin from '@/subPackages/sub_business_shared/common/pullRefreshMixin.js'
export default {
mixins: [pullRefreshMixin],
components: { InputListPage },
provide() { return { businessContext: getPlatformAdminContext() } },
methods: {
reload() {
const p = this.$refs.listPage
if (p && typeof p.reload === 'function') return p.reload()
},
},
onShow() {
this.$nextTick(() => this.$refs.listPage?.reload?.())
},

View File

@@ -15,6 +15,7 @@ import {
getPlatformAdminWorkbenchEntries,
getPlatformAdminEntryUserData,
togglePlatformAdminFavoriteEntry,
batchSavePlatformAdminFavoriteEntry,
reportPlatformAdminEntryUsage,
} from '@/api/platformAdmin.js'
@@ -27,12 +28,13 @@ export default {
getEntries: getPlatformAdminWorkbenchEntries,
getUserData: getPlatformAdminEntryUserData,
toggleFavorite: togglePlatformAdminFavoriteEntry,
batchSaveFavorites: batchSavePlatformAdminFavoriteEntry,
reportUsage: reportPlatformAdminEntryUsage,
},
}
},
onShow() {
// 从功能跳转的页面返回时刷新常用/最近使用(首屏加载由组件自身 mounted 完成,此时 ref 还不存在)
// 返回时刷新收藏状态(长按菜单用;常用/最近只在首页展示)
if (this.$refs.features) this.$refs.features.refreshUserData()
},
}

View File

@@ -71,8 +71,10 @@
:recents="recentItems"
:favorites="favItems"
:card-long="cardLong"
:api="favEditorApi"
@item-click="onEntryTap"
@more="goFeatures"
@saved="loadUserEntries"
></workbench-user-entries>
</view>
@@ -91,11 +93,13 @@
import BusinessPageLayout from '@/subPackages/sub_platform_admin/components/business-page-layout.vue'
import { getPlatformAdminContext } from '@/subPackages/sub_platform_admin/common/context.js'
import { navigateToInputForm } from '@/subPackages/sub_salesperson/common/inputNavigation.js'
import { getPlatformAdminDashboardStats, getPlatformAdminEntryUserData, reportPlatformAdminEntryUsage } from '@/api/platformAdmin.js'
import { getPlatformAdminDashboardStats, getPlatformAdminWorkbenchEntries, getPlatformAdminEntryUserData, batchSavePlatformAdminFavoriteEntry, reportPlatformAdminEntryUsage } from '@/api/platformAdmin.js'
import { normalizeEntry } from '@/utils/workbenchEntries.js'
import { getCardStyle } from '@/utils/workbenchCardPref.js'
import pullRefreshMixin from '@/subPackages/sub_business_shared/common/pullRefreshMixin.js'
export default {
mixins: [pullRefreshMixin],
components: { BusinessPageLayout },
provide() { return { businessContext: getPlatformAdminContext() } },
data() {
@@ -122,6 +126,12 @@ export default {
recentRaw: [],
/** 卡片形态偏好:true 长卡一行两个 / false 金刚区宫格(我的页可切换,存本地) */
cardLong: false,
/** 首页快捷添加抽屉接口(与功能页同一套) */
favEditorApi: {
getEntries: getPlatformAdminWorkbenchEntries,
getUserData: getPlatformAdminEntryUserData,
batchSaveFavorites: batchSavePlatformAdminFavoriteEntry,
},
}
},
computed: {
@@ -143,6 +153,12 @@ export default {
this.loadUserEntries()
},
methods: {
/**
* 下拉刷新工作台:看板与入口一起重拉
*/
reload() {
return Promise.all([this.loadDashboard(), this.loadUserEntries()])
},
/** 拉取我的常用 + 最近使用:失败静默留空(首页有引导条 + 更多功能卡兜底) */
async loadUserEntries() {
try {

View File

@@ -56,11 +56,11 @@ export default {
if (data && Array.isArray(data.data)) return data.data
return []
},
reload() { this.page = 1; this.load(1, false) },
reload() { this.page = 1; return this.load(1, false) },
load(page, append) {
const params = { page, pageSize: 15 }
if (this.auditMode) params.status = 0
this.listApi(params)
return this.listApi(params)
.then(w => {
const items = this.parseListItems(w.data)
if (!items.length && !w.ok) {

View File

@@ -19,20 +19,43 @@
import BusinessPageLayout from '@/subPackages/sub_platform_admin/components/business-page-layout.vue'
import AdminMyPanel from '@/components/admin-my-panel/admin-my-panel.vue'
import { getPlatformAdminContext } from '@/subPackages/sub_platform_admin/common/context.js'
import { getPlatformAdminMyInfo } from '@/api/platformAdmin.js'
import pullRefreshMixin from '@/subPackages/sub_business_shared/common/pullRefreshMixin.js'
export default {
mixins: [pullRefreshMixin],
components: { BusinessPageLayout, AdminMyPanel },
provide() { return { businessContext: getPlatformAdminContext() } },
data() {
return { displayName: '', avatar: '', roleText: '平台管理员' }
},
onShow() {
// 个人中心改完昵称/头像返回时重读缓存立即生效
const user = uni.getStorageSync('platform_admin_user') || {}
this.displayName = user.nick_name || '管理员'
this.avatar = user.avatar || ''
this.roleText = (user.roles && user.roles.name) || '平台管理员'
this.applyLocalUser()
if (this.$refs.myPanel) this.$refs.myPanel.refreshWxBind()
},
methods: {
/**
* 下拉刷新:拉 my-info 写回缓存,并刷新微信绑定
*/
reload() {
return this.refreshProfile()
},
applyLocalUser() {
const user = uni.getStorageSync('platform_admin_user') || {}
this.displayName = user.nick_name || '管理员'
this.avatar = user.avatar || ''
this.roleText = (user.roles && user.roles.name) || '平台管理员'
},
async refreshProfile() {
try {
const wrap = await getPlatformAdminMyInfo()
if (wrap && wrap.ok && wrap.data) {
uni.setStorageSync('platform_admin_user', wrap.data)
}
} catch (e) { /* 保留本地缓存 */ }
this.applyLocalUser()
if (this.$refs.myPanel) return this.$refs.myPanel.refreshWxBind()
},
},
}
</script>

View File

@@ -10,9 +10,17 @@
<script>
import InputListPage from '@/subPackages/sub_platform_admin/input/InputListPage.vue'
import { getPlatformAdminContext } from '@/subPackages/sub_platform_admin/common/context.js'
import pullRefreshMixin from '@/subPackages/sub_business_shared/common/pullRefreshMixin.js'
export default {
mixins: [pullRefreshMixin],
components: { InputListPage },
provide() { return { businessContext: getPlatformAdminContext() } },
methods: {
reload() {
const p = this.$refs.listPage
if (p && typeof p.reload === 'function') return p.reload()
},
},
onShow() {
this.$nextTick(() => this.$refs.listPage?.reload?.())
},

View File

@@ -46,10 +46,12 @@
*/
import StorePageLayout from '@/subPackages/sub_platform_admin/components/store-page-layout.vue';
import { getStoreList, isSalespersonStoreMode } from '@/api/storeManage.js';
import pullRefreshMixin from '@/subPackages/sub_business_shared/common/pullRefreshMixin.js';
const ROOT = '/subPackages/sub_platform_admin/store';
export default {
mixins: [pullRefreshMixin],
components: { StorePageLayout },
data() {
return {

View File

@@ -30,8 +30,10 @@ import { getPlatformAdminContext } from '@/subPackages/sub_platform_admin/common
import platformAdminApi from '@/api/platformAdmin.js'
import { formatMoney } from '@/subPackages/sub_business_shared/common/format.js'
import { formatDateTime, withdrawalCheckStatusText } from '@/subPackages/sub_business_shared/common/display.js'
import pullRefreshMixin from '@/subPackages/sub_business_shared/common/pullRefreshMixin.js'
export default {
mixins: [pullRefreshMixin],
components: { BusinessPageLayout },
provide() { return { businessContext: getPlatformAdminContext() } },
data() {
@@ -52,6 +54,9 @@ export default {
statusText: item.check_status_txt || withdrawalCheckStatusText(item.check_status),
}
},
reload() {
return this.load()
},
load() {
platformAdminApi.getWithdrawalAuditList({ page: 1, pageSize: 50, check_status: 1 }).then(w => {
const items = (w.data && w.data.items) || []