fix: 回调配置, 调整信用位置, 套餐
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 6m55s

This commit is contained in:
luo
2026-07-29 18:20:42 +08:00
parent 4394ae0f78
commit 17d2eeebc5
39 changed files with 2687 additions and 1532 deletions

View File

@@ -303,6 +303,12 @@
</div>
</template>
</ElDialog>
<ShopCreditLimitDialog
v-model="creditDialogVisible"
:shop="currentCreditShop"
@submitted="getShopList"
/>
</ElCard>
</div>
</ArtTableFullScreen>
@@ -326,21 +332,23 @@
import { useCheckedColumns } from '@/composables/useCheckedColumns'
import { useAuth } from '@/composables/useAuth'
import { generateShopCode } from '@/utils/codeGenerator'
import { ShopService, RoleService } from '@/api/modules'
import { CommissionService, ShopService, RoleService } from '@/api/modules'
import ShopCreditLimitDialog from '@/components/business/ShopCreditLimitDialog.vue'
import type { SearchFormItem } from '@/types'
import type {
CreateShopParams,
ShopBusinessOwnerCandidate,
ShopResponse,
ShopRoleResponse,
UpdateShopParams
} from '@/types/api'
import { RoleType, RoleStatus } from '@/types/api'
import type {
CreateShopParams,
ShopBusinessOwnerCandidate,
ShopResponse,
ShopRoleResponse,
UpdateShopParams
} from '@/types/api'
import type { ShopFundSummaryItem } from '@/types/api/commission'
import { RoleType, RoleStatus } from '@/types/api'
import { formatDateTime } from '@/utils/business/format'
import { getCompatibleNumericId } from '@/utils/business/id'
import { CommonStatus, getStatusText, STATUS_SELECT_OPTIONS } from '@/config/constants'
import { regionData } from '@/utils/constants/regionData'
import { RoutesAlias } from '@/router/routesAlias'
import { CommonStatus, getStatusText, STATUS_SELECT_OPTIONS } from '@/config/constants'
import { regionData } from '@/utils/constants/regionData'
import { RoutesAlias } from '@/router/routesAlias'
defineOptions({ name: 'Shop' })
@@ -355,7 +363,10 @@
const defaultRoleLoading = ref(false)
const defaultRoleList = ref<any[]>([])
const salespersonLoading = ref(false)
const salespersonOptions = ref<ShopBusinessOwnerCandidate[]>([])
const salespersonOptions = ref<ShopBusinessOwnerCandidate[]>([])
const creditDialogVisible = ref(false)
const currentCreditShop = ref<ShopFundSummaryItem | null>(null)
const creditLoadingShopId = ref<number | null>(null)
// 级联选择相关
const parentShopCascadeOptions = ref<any[]>([])
@@ -422,11 +433,11 @@
const searchPlatformSalespeople = async (query: string) => {
salespersonLoading.value = true
try {
const res = await ShopService.getBusinessOwnerCandidates({
page: 1,
page_size: 20,
keyword: query || undefined
})
const res = await ShopService.getBusinessOwnerCandidates({
page: 1,
page_size: 20,
keyword: query || undefined
})
if (res.code === 0) {
salespersonOptions.value = res.data.items || []
}
@@ -438,20 +449,20 @@
}
}
const formatBusinessOwner = (shop: ShopResponse) => {
if (!shop.business_owner_username) return '-'
return shop.business_owner_phone_summary
? `${shop.business_owner_username} (${shop.business_owner_phone_summary})`
: shop.business_owner_username
}
const formatBusinessOwner = (shop: ShopResponse) => {
if (!shop.business_owner_username) return '-'
return shop.business_owner_phone_summary
? `${shop.business_owner_username} (${shop.business_owner_phone_summary})`
: shop.business_owner_username
}
const handleNameClick = (row: ShopResponse) => {
if (hasAuth('shop:detail')) {
void router.push(`${RoutesAlias.ShopDetail}/${row.id}`)
} else {
ElMessage.warning('您没有查看详情的权限')
}
}
const handleNameClick = (row: ShopResponse) => {
if (hasAuth('shop:detail')) {
void router.push(`${RoutesAlias.ShopDetail}/${row.id}`)
} else {
ElMessage.warning('您没有查看详情的权限')
}
}
// 定义表单搜索初始值
const initialSearchState = {
@@ -575,8 +586,8 @@
},
options: () =>
salespersonOptions.value.map((salesperson) => ({
label: `${salesperson.username} (${salesperson.phone_summary})`,
value: salesperson.id
label: `${salesperson.username} (${salesperson.phone_summary})`,
value: salesperson.id
}))
}
])
@@ -619,8 +630,8 @@
formData.address = row.address || ''
formData.contact_name = row.contact_name || ''
formData.contact_phone = row.contact_phone || ''
formData.business_owner_account_id = row.business_owner_account_id ?? null
formData.client_login_disabled = row.client_login_disabled
formData.business_owner_account_id = row.business_owner_account_id ?? null
formData.client_login_disabled = row.client_login_disabled
formData.status = row.status
formData.init_username = ''
formData.init_password = ''
@@ -638,8 +649,8 @@
formData.address = ''
formData.contact_name = ''
formData.contact_phone = ''
formData.business_owner_account_id = null
formData.client_login_disabled = false
formData.business_owner_account_id = null
formData.client_login_disabled = false
formData.status = CommonStatus.ENABLED
formData.init_username = ''
formData.init_password = ''
@@ -680,29 +691,29 @@
// 动态列配置
const { columnChecks, columns } = useCheckedColumns(() => [
{
prop: 'shop_name',
label: '店铺名称',
width: 160,
showOverflowTooltip: true,
formatter: (row: ShopResponse) => {
const hasPermission = hasAuth('shop:detail')
return h(
'span',
{
style: hasPermission
? 'color: var(--el-color-primary); cursor: pointer; text-decoration: underline;'
: '',
onClick: hasPermission
? (event: MouseEvent) => {
event.stopPropagation()
handleNameClick(row)
}
: undefined
},
row.shop_name
)
}
{
prop: 'shop_name',
label: '店铺名称',
width: 160,
showOverflowTooltip: true,
formatter: (row: ShopResponse) => {
const hasPermission = hasAuth('shop:detail')
return h(
'span',
{
style: hasPermission
? 'color: var(--el-color-primary); cursor: pointer; text-decoration: underline;'
: '',
onClick: hasPermission
? (event: MouseEvent) => {
event.stopPropagation()
handleNameClick(row)
}
: undefined
},
row.shop_name
)
}
},
{
prop: 'shop_code',
@@ -741,19 +752,19 @@
label: '联系电话',
width: 130
},
{
prop: 'business_owner_username',
label: '平台业务员',
minWidth: 180,
showOverflowTooltip: true,
formatter: (row: ShopResponse) => formatBusinessOwner(row)
},
{
prop: 'client_login_disabled',
label: 'C 端登录',
width: 110,
formatter: (row: ShopResponse) => (row.client_login_disabled ? '已限制' : '正常')
},
{
prop: 'business_owner_username',
label: '平台业务员',
minWidth: 180,
showOverflowTooltip: true,
formatter: (row: ShopResponse) => formatBusinessOwner(row)
},
{
prop: 'client_login_disabled',
label: 'C 端登录',
width: 110,
formatter: (row: ShopResponse) => (row.client_login_disabled ? '已限制' : '正常')
},
...(canModifyShopStatus
? [
{
@@ -803,6 +814,14 @@
})
}
if (hasAuth('shop:credit_limit_manage')) {
actions.push({
label: '调整实际信用额度',
handler: () => showCreditDialog(row),
type: 'primary'
})
}
if (hasAuth('shop:edit')) {
actions.push({
label: '编辑',
@@ -822,6 +841,34 @@
return actions
}
const showCreditDialog = async (row: ShopResponse) => {
if (creditLoadingShopId.value === row.id) return
creditLoadingShopId.value = row.id
try {
const res = await CommissionService.getShopFundSummary({
page: 1,
page_size: 100,
shop_name: row.shop_name
})
const summary =
res.code === 0 ? (res.data.items || []).find((item) => item.shop_id === row.id) : null
if (!summary) {
ElMessage.warning('未获取到该店铺的资金概况,请刷新店铺列表后重试')
return
}
currentCreditShop.value = summary
creditDialogVisible.value = true
} catch (error) {
console.error('获取店铺资金概况失败:', error)
ElMessage.error('获取店铺资金概况失败,请稍后重试')
} finally {
creditLoadingShopId.value = null
}
}
// 表单实例
const formRef = ref<FormInstance>()
@@ -843,8 +890,8 @@
init_password: '',
init_phone: '',
default_role_id: undefined as number | undefined,
business_owner_account_id: null as number | null,
client_login_disabled: false
business_owner_account_id: null as number | null,
client_login_disabled: false
})
// 处理编码生成
@@ -874,10 +921,10 @@
const searchDefaultRoles = async (query: string) => {
defaultRoleLoading.value = true
try {
const params: any = {
page: 1,
page_size: 20,
role_type: RoleType.CUSTOMER, // 仅客户角色
const params: any = {
page: 1,
page_size: 20,
role_type: RoleType.CUSTOMER, // 仅客户角色
status: RoleStatus.ENABLED // 仅启用的角色
}
if (query) {
@@ -1013,8 +1060,8 @@
init_password: formData.init_password,
init_phone: formData.init_phone,
default_role_id: formData.default_role_id!,
business_owner_account_id: formData.business_owner_account_id,
client_login_disabled: formData.client_login_disabled
business_owner_account_id: formData.business_owner_account_id,
client_login_disabled: formData.client_login_disabled
}
// 可选字段 - parent_id 可能是数组(级联选择器)或数字
@@ -1036,8 +1083,8 @@
const data: UpdateShopParams = {
shop_name: formData.shop_name,
status: formData.status,
business_owner_account_id: formData.business_owner_account_id,
client_login_disabled: formData.client_login_disabled
business_owner_account_id: formData.business_owner_account_id,
client_login_disabled: formData.client_login_disabled
}
// 可选字段