diff --git a/src/components/business/CodeGeneratorButton.vue b/src/components/business/CodeGeneratorButton.vue index 693b60b..a428f6d 100644 --- a/src/components/business/CodeGeneratorButton.vue +++ b/src/components/business/CodeGeneratorButton.vue @@ -10,12 +10,13 @@ generateSeriesCode, generatePackageCode, generateShopCode, - generateCarrierCode + generateCarrierCode, + generateEnterpriseCode } from '@/utils/codeGenerator' interface Props { - // 编码类型: series(套餐系列) | package(套餐) | shop(店铺) | carrier(运营商) - codeType: 'series' | 'package' | 'shop' | 'carrier' + // 编码类型: series(套餐系列) | package(套餐) | shop(店铺) | carrier(运营商) | enterprise(企业) + codeType: 'series' | 'package' | 'shop' | 'carrier' | 'enterprise' // 按钮文字 buttonText?: string // 表单字段名,用于清除验证 @@ -47,6 +48,9 @@ case 'carrier': code = generateCarrierCode() break + case 'enterprise': + code = generateEnterpriseCode() + break default: ElMessage.error('未知的编码类型') return diff --git a/src/types/api/common.ts b/src/types/api/common.ts index c36dc16..14be888 100644 --- a/src/types/api/common.ts +++ b/src/types/api/common.ts @@ -24,9 +24,8 @@ export interface PaginationParams { export interface PaginationData { items: T[] // 数据列表 total: number // 总数 - page_size: number // 每页数量 + size: number // 每页数量 page: number // 当前页 - total_pages: number // 总页数 } // 分页响应 diff --git a/src/types/api/enterpriseDevice.ts b/src/types/api/enterpriseDevice.ts index f9e1f7f..42c5953 100644 --- a/src/types/api/enterpriseDevice.ts +++ b/src/types/api/enterpriseDevice.ts @@ -39,7 +39,7 @@ export interface EnterpriseDevicePageResult { * 授权设备请求参数 */ export interface AllocateDevicesRequest { - virtual_nos: string[] | null // 虚拟号列表(最多100个,原 device_nos) + device_nos: string[] | null // 设备号列表(最多100个) remark?: string // 授权备注 } @@ -76,7 +76,7 @@ export interface AllocateDevicesResponse { * 撤销设备授权请求参数 */ export interface RecallDevicesRequest { - virtual_nos: string[] | null // 虚拟号列表(最多100个,原 device_nos) + device_nos: string[] | null // 设备号列表(最多100个) } /** diff --git a/src/types/api/wechatConfig.ts b/src/types/api/wechatConfig.ts index a834499..73c1c71 100644 --- a/src/types/api/wechatConfig.ts +++ b/src/types/api/wechatConfig.ts @@ -3,7 +3,7 @@ */ // 支付渠道类型 -export type PaymentProviderType = 'wechat' | 'fuiou' +export type PaymentProviderType = 'wechat' | 'wechat_v2' | 'fuiou' // 微信支付配置 export interface WechatConfig { diff --git a/src/utils/codeGenerator.ts b/src/utils/codeGenerator.ts index 16cf29b..ff89576 100644 --- a/src/utils/codeGenerator.ts +++ b/src/utils/codeGenerator.ts @@ -89,3 +89,25 @@ export function generateCarrierCode(): string { return `CARRIER${year}${month}${day}${hours}${minutes}${seconds}${randomChars}` } + +/** + * 生成企业编码 + * 规则: ENT + 年月日时分秒 + 4位随机数 + * 示例: ENT20260331143025ABCD + */ +export function generateEnterpriseCode(): string { + const now = new Date() + const year = now.getFullYear() + const month = String(now.getMonth() + 1).padStart(2, '0') + const day = String(now.getDate()).padStart(2, '0') + const hours = String(now.getHours()).padStart(2, '0') + const minutes = String(now.getMinutes()).padStart(2, '0') + const seconds = String(now.getSeconds()).padStart(2, '0') + + // 生成4位随机大写字母 + const randomChars = Array.from({ length: 4 }, () => + String.fromCharCode(65 + Math.floor(Math.random() * 26)) + ).join('') + + return `ENT${year}${month}${day}${hours}${minutes}${seconds}${randomChars}` +} diff --git a/src/views/account-management/enterprise-customer/index.vue b/src/views/account-management/enterprise-customer/index.vue index db76ae7..5aae805 100644 --- a/src/views/account-management/enterprise-customer/index.vue +++ b/src/views/account-management/enterprise-customer/index.vue @@ -57,28 +57,28 @@ width="600px" > + +
+ + +
+
- - - - - - - - - - - - @@ -86,6 +86,11 @@ + + + + + + + @@ -225,6 +232,7 @@ import ArtButtonTable from '@/components/core/forms/ArtButtonTable.vue' import ArtMenuRight from '@/components/core/others/ArtMenuRight.vue' import TableContextMenuHint from '@/components/core/others/TableContextMenuHint.vue' + import CodeGeneratorButton from '@/components/business/CodeGeneratorButton.vue' import type { MenuItemType } from '@/components/core/others/ArtMenuRight.vue' import { formatDateTime } from '@/utils/business/format' import { regionData } from '@/utils/constants/regionData' @@ -478,7 +486,7 @@ { prop: 'operation', label: '操作', - width: 190, + width: 280, fixed: 'right', formatter: (row: EnterpriseItem) => { const buttons = [] @@ -501,6 +509,15 @@ ) } + if (hasAuth('enterprise_customer:device_authorization')) { + buttons.push( + h(ArtButtonTable, { + text: '设备授权', + onClick: () => manageDevices(row) + }) + ) + } + return h('div', { style: 'display: flex; gap: 8px;' }, buttons) } } @@ -712,6 +729,11 @@ }) } + // 处理企业编码生成 + const handleCodeGenerated = (code: string) => { + form.enterprise_code = code + } + // 提交表单 const handleSubmit = async (formEl: FormInstance | undefined) => { if (!formEl) return @@ -810,6 +832,13 @@ }) } + const manageDevices = (row: EnterpriseItem) => { + router.push({ + path: '/asset-management/enterprise-devices', + query: { id: row.id } + }) + } + // 企业客户操作菜单项配置 const enterpriseOperationMenuItems = computed((): MenuItemType[] => { const items: MenuItemType[] = [] diff --git a/src/views/asset-management/enterprise-devices/index.vue b/src/views/asset-management/enterprise-devices/index.vue index 4af4b58..84a03b9 100644 --- a/src/views/asset-management/enterprise-devices/index.vue +++ b/src/views/asset-management/enterprise-devices/index.vue @@ -24,6 +24,7 @@ @@ -73,45 +74,55 @@ - + + + +
+ 已选择 {{ selectedAvailableDevices.length }} 台设备 +
+ - - + + -
- {{ - $t('enterpriseDevices.form.selectedCount', { - count: allocateForm.virtual_nos?.length || 0 - }) - }} -
-
- - - -
+ +