From 246ff9f34e8f610f81af91e8767a10f754f6b154 Mon Sep 17 00:00:00 2001 From: danial Date: Mon, 1 Dec 2025 23:41:55 +0800 Subject: [PATCH] =?UTF-8?q?feat(token):=20=E6=96=B0=E5=A2=9E=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=20Token=20=E6=8E=A5=E5=8F=A3=E5=8F=8A=E7=BB=91?= =?UTF-8?q?=E5=AE=9A=E8=AE=B0=E5=BD=95=E8=A7=86=E5=9B=BE=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 apiTokenUpdatePost 接口支持修改 Token 信息 - 扩展 Token 数据结构,增加充值金额限制和次数限制相关字段 - 调整新增/编辑 Token 弹窗,支持编辑模式下的充值限制显示和输入 - 新增绑定记录卡片视图与表格视图切换功能 - 绑定记录视图显示总记录数和总金额统计信息 - 卡片视图改进绑定记录样式和交互,支持复制卡号和卡密 - 弹窗样式和分页控件优化,提升用户体验 - 修复并完善 Api 文档,补充修改 Token 接口说明和示例代码 --- src/api/generated/.openapi-generator/FILES | 4 + .../apis/jdv2-token-management-api.ts | 142 ++++++ .../generated/docs/JDV2TokenManagementApi.md | 51 +++ .../docs/KamiApiCamelOilV1CardBindingInfo.md | 2 +- .../docs/KamiApiCamelOilV1CreateTokenReq.md | 18 +- .../docs/KamiApiCamelOilV1TokenInfo.md | 34 +- .../docs/KamiApiCamelOilV1UpdateTokenReq.md | 29 ++ .../docs/KamiApiCamelOilV1UpdateTokenRes.md | 19 + src/api/generated/models/index.ts | 2 + ...kami-api-camel-oil-v1-card-binding-info.ts | 5 +- .../kami-api-camel-oil-v1-create-token-req.ts | 8 + .../kami-api-camel-oil-v1-token-info.ts | 17 +- .../kami-api-camel-oil-v1-update-token-req.ts | 40 ++ .../kami-api-camel-oil-v1-update-token-res.ts | 20 + .../token/components/add-edit-modal.vue | 125 +++-- .../components/binding-records-modal.vue | 427 ++++++++++++++++-- src/views/camel-oil-info/token/index.vue | 69 ++- 17 files changed, 931 insertions(+), 81 deletions(-) create mode 100644 src/api/generated/docs/KamiApiCamelOilV1UpdateTokenReq.md create mode 100644 src/api/generated/docs/KamiApiCamelOilV1UpdateTokenRes.md create mode 100644 src/api/generated/models/kami-api-camel-oil-v1-update-token-req.ts create mode 100644 src/api/generated/models/kami-api-camel-oil-v1-update-token-res.ts diff --git a/src/api/generated/.openapi-generator/FILES b/src/api/generated/.openapi-generator/FILES index 1cd97c3..07ea3f3 100644 --- a/src/api/generated/.openapi-generator/FILES +++ b/src/api/generated/.openapi-generator/FILES @@ -63,6 +63,8 @@ docs/KamiApiCamelOilV1OrderListItem.md docs/KamiApiCamelOilV1SubmitOrderReq.md docs/KamiApiCamelOilV1SubmitOrderRes.md docs/KamiApiCamelOilV1TokenInfo.md +docs/KamiApiCamelOilV1UpdateTokenReq.md +docs/KamiApiCamelOilV1UpdateTokenRes.md docs/KamiApiCardInfoAppleV1AppleCardListRecord.md docs/KamiApiCardInfoAppleV1AppleCardListRecordUploadUser.md docs/KamiApiCardInfoAppleV1CallBackOrderManualReq.md @@ -494,6 +496,8 @@ models/kami-api-camel-oil-v1-order-list-item.ts models/kami-api-camel-oil-v1-submit-order-req.ts models/kami-api-camel-oil-v1-submit-order-res.ts models/kami-api-camel-oil-v1-token-info.ts +models/kami-api-camel-oil-v1-update-token-req.ts +models/kami-api-camel-oil-v1-update-token-res.ts models/kami-api-card-info-apple-v1-apple-card-list-record-upload-user.ts models/kami-api-card-info-apple-v1-apple-card-list-record.ts models/kami-api-card-info-apple-v1-call-back-order-manual-req.ts diff --git a/src/api/generated/apis/jdv2-token-management-api.ts b/src/api/generated/apis/jdv2-token-management-api.ts index a0d03c6..226afa3 100644 --- a/src/api/generated/apis/jdv2-token-management-api.ts +++ b/src/api/generated/apis/jdv2-token-management-api.ts @@ -52,6 +52,10 @@ import type { KamiApiCamelOilV1GetTokenRes } from '../models'; import type { KamiApiCamelOilV1ListCardBindingsByTokenRes } from '../models'; // @ts-ignore import type { KamiApiCamelOilV1ListTokensRes } from '../models'; +// @ts-ignore +import type { KamiApiCamelOilV1UpdateTokenReq } from '../models'; +// @ts-ignore +import type { KamiApiCamelOilV1UpdateTokenRes } from '../models'; /** * JDV2TokenManagementApi - axios parameter creator */ @@ -327,6 +331,54 @@ export const JDV2TokenManagementApiAxiosParamCreator = function ( ...options.headers }; + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions + }; + }, + /** + * + * @summary 修改 Token + * @param {KamiApiCamelOilV1UpdateTokenReq} [kamiApiCamelOilV1UpdateTokenReq] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + apiTokenUpdatePost: async ( + kamiApiCamelOilV1UpdateTokenReq?: KamiApiCamelOilV1UpdateTokenReq, + options: RawAxiosRequestConfig = {} + ): Promise => { + const localVarPath = `/api/token/update`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { + method: 'POST', + ...baseOptions, + ...options + }; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter); + let headersFromBaseOptions = + baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = { + ...localVarHeaderParameter, + ...headersFromBaseOptions, + ...options.headers + }; + localVarRequestOptions.data = serializeDataIfNeeded( + kamiApiCamelOilV1UpdateTokenReq, + localVarRequestOptions, + configuration + ); + return { url: toPathString(localVarUrlObj), options: localVarRequestOptions @@ -526,6 +578,40 @@ export const JDV2TokenManagementApiFp = function ( BASE_PATH, configuration )(axios, localVarOperationServerBasePath || basePath); + }, + /** + * + * @summary 修改 Token + * @param {KamiApiCamelOilV1UpdateTokenReq} [kamiApiCamelOilV1UpdateTokenReq] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async apiTokenUpdatePost( + kamiApiCamelOilV1UpdateTokenReq?: KamiApiCamelOilV1UpdateTokenReq, + options?: RawAxiosRequestConfig + ): Promise< + ( + axios?: AxiosInstance, + basePath?: string + ) => AxiosPromise + > { + const localVarAxiosArgs = + await localVarAxiosParamCreator.apiTokenUpdatePost( + kamiApiCamelOilV1UpdateTokenReq, + options + ); + const localVarOperationServerIndex = configuration?.serverIndex ?? 0; + const localVarOperationServerBasePath = + operationServerMap['JDV2TokenManagementApi.apiTokenUpdatePost']?.[ + localVarOperationServerIndex + ]?.url; + return (axios, basePath) => + createRequestFunction( + localVarAxiosArgs, + globalAxios, + BASE_PATH, + configuration + )(axios, localVarOperationServerBasePath || basePath); } }; }; @@ -631,6 +717,24 @@ export const JDV2TokenManagementApiFactory = function ( options ) .then(request => request(axios, basePath)); + }, + /** + * + * @summary 修改 Token + * @param {JDV2TokenManagementApiApiTokenUpdatePostRequest} requestParameters Request parameters. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + apiTokenUpdatePost( + requestParameters: JDV2TokenManagementApiApiTokenUpdatePostRequest = {}, + options?: RawAxiosRequestConfig + ): AxiosPromise { + return localVarFp + .apiTokenUpdatePost( + requestParameters.kamiApiCamelOilV1UpdateTokenReq, + options + ) + .then(request => request(axios, basePath)); } }; }; @@ -698,6 +802,18 @@ export interface JDV2TokenManagementApiInterface { requestParameters: JDV2TokenManagementApiApiTokenListGetRequest, options?: RawAxiosRequestConfig ): AxiosPromise; + + /** + * + * @summary 修改 Token + * @param {JDV2TokenManagementApiApiTokenUpdatePostRequest} requestParameters Request parameters. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + apiTokenUpdatePost( + requestParameters?: JDV2TokenManagementApiApiTokenUpdatePostRequest, + options?: RawAxiosRequestConfig + ): AxiosPromise; } /** @@ -769,6 +885,13 @@ export interface JDV2TokenManagementApiApiTokenListGetRequest { readonly status?: number; } +/** + * Request parameters for apiTokenUpdatePost operation in JDV2TokenManagementApi. + */ +export interface JDV2TokenManagementApiApiTokenUpdatePostRequest { + readonly kamiApiCamelOilV1UpdateTokenReq?: KamiApiCamelOilV1UpdateTokenReq; +} + /** * JDV2TokenManagementApi - object-oriented interface */ @@ -872,6 +995,25 @@ export class JDV2TokenManagementApi ) .then(request => request(this.axios, this.basePath)); } + + /** + * + * @summary 修改 Token + * @param {JDV2TokenManagementApiApiTokenUpdatePostRequest} requestParameters Request parameters. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + public apiTokenUpdatePost( + requestParameters: JDV2TokenManagementApiApiTokenUpdatePostRequest = {}, + options?: RawAxiosRequestConfig + ) { + return JDV2TokenManagementApiFp(this.configuration) + .apiTokenUpdatePost( + requestParameters.kamiApiCamelOilV1UpdateTokenReq, + options + ) + .then(request => request(this.axios, this.basePath)); + } } export enum ApiCardBindingListByTokenGetPageSizeEnum { diff --git a/src/api/generated/docs/JDV2TokenManagementApi.md b/src/api/generated/docs/JDV2TokenManagementApi.md index b357899..7b70157 100644 --- a/src/api/generated/docs/JDV2TokenManagementApi.md +++ b/src/api/generated/docs/JDV2TokenManagementApi.md @@ -9,6 +9,7 @@ All URIs are relative to _http://localhost_ | [**apiTokenDeletePost**](#apitokendeletepost) | **POST** /api/token/delete | 删除 Token | | [**apiTokenGetGet**](#apitokengetget) | **GET** /api/token/get | 获取 Token 信息 | | [**apiTokenListGet**](#apitokenlistget) | **GET** /api/token/list | 列出 Token | +| [**apiTokenUpdatePost**](#apitokenupdatepost) | **POST** /api/token/update | 修改 Token | # **apiCardBindingListByTokenGet** @@ -260,3 +261,53 @@ No authorization required | **200** | | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **apiTokenUpdatePost** + +> KamiApiCamelOilV1UpdateTokenRes apiTokenUpdatePost() + +### Example + +```typescript +import { + JDV2TokenManagementApi, + Configuration, + KamiApiCamelOilV1UpdateTokenReq +} from './api'; + +const configuration = new Configuration(); +const apiInstance = new JDV2TokenManagementApi(configuration); + +let kamiApiCamelOilV1UpdateTokenReq: KamiApiCamelOilV1UpdateTokenReq; // (optional) + +const { status, data } = await apiInstance.apiTokenUpdatePost( + kamiApiCamelOilV1UpdateTokenReq +); +``` + +### Parameters + +| Name | Type | Description | Notes | +| ----------------------------------- | ----------------------------------- | ----------- | ----- | +| **kamiApiCamelOilV1UpdateTokenReq** | **KamiApiCamelOilV1UpdateTokenReq** | | | + +### Return type + +**KamiApiCamelOilV1UpdateTokenRes** + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +| ----------- | ----------- | ---------------- | +| **200** | | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/src/api/generated/docs/KamiApiCamelOilV1CardBindingInfo.md b/src/api/generated/docs/KamiApiCamelOilV1CardBindingInfo.md index 4f905a2..dfc6e75 100644 --- a/src/api/generated/docs/KamiApiCamelOilV1CardBindingInfo.md +++ b/src/api/generated/docs/KamiApiCamelOilV1CardBindingInfo.md @@ -10,7 +10,7 @@ | **orderId** | **number** | 订单ID | [optional] [default to undefined] | | **cardNumber** | **string** | 卡号 | [optional] [default to undefined] | | **cardPassword** | **string** | 卡密 | [optional] [default to undefined] | -| **amount** | **object** | | [optional] [default to undefined] | +| **amount** | **number** | 绑定金额 | [optional] [default to undefined] | | **createdAt** | **string** | 创建时间 | [optional] [default to undefined] | ## Example diff --git a/src/api/generated/docs/KamiApiCamelOilV1CreateTokenReq.md b/src/api/generated/docs/KamiApiCamelOilV1CreateTokenReq.md index 6bad826..39c4f93 100644 --- a/src/api/generated/docs/KamiApiCamelOilV1CreateTokenReq.md +++ b/src/api/generated/docs/KamiApiCamelOilV1CreateTokenReq.md @@ -2,12 +2,14 @@ ## Properties -| Name | Type | Description | Notes | -| -------------- | ---------- | ------------ | --------------------------------- | -| **tokenName** | **string** | Token名称 | [default to undefined] | -| **tokenValue** | **string** | Token值 | [default to undefined] | -| **phone** | **string** | 绑定的手机号 | [optional] [default to undefined] | -| **remark** | **string** | 备注 | [optional] [default to undefined] | +| Name | Type | Description | Notes | +| ----------------------- | ---------- | ------------ | --------------------------------- | +| **tokenName** | **string** | Token名称 | [default to undefined] | +| **tokenValue** | **string** | Token值 | [default to undefined] | +| **phone** | **string** | 绑定的手机号 | [optional] [default to undefined] | +| **remark** | **string** | 备注 | [optional] [default to undefined] | +| **rechargeLimitAmount** | **number** | 充值金额限制 | [default to undefined] | +| **rechargeLimitCount** | **number** | 充值次数限制 | [default to undefined] | ## Example @@ -18,7 +20,9 @@ const instance: KamiApiCamelOilV1CreateTokenReq = { tokenName, tokenValue, phone, - remark + remark, + rechargeLimitAmount, + rechargeLimitCount }; ``` diff --git a/src/api/generated/docs/KamiApiCamelOilV1TokenInfo.md b/src/api/generated/docs/KamiApiCamelOilV1TokenInfo.md index 4eff154..42474f0 100644 --- a/src/api/generated/docs/KamiApiCamelOilV1TokenInfo.md +++ b/src/api/generated/docs/KamiApiCamelOilV1TokenInfo.md @@ -2,20 +2,23 @@ ## Properties -| Name | Type | Description | Notes | -| ------------------- | ---------- | -------------- | --------------------------------- | -| **id** | **number** | Token ID | [optional] [default to undefined] | -| **tokenName** | **string** | Token名称 | [optional] [default to undefined] | -| **tokenValue** | **string** | Token值 | [optional] [default to undefined] | -| **phone** | **string** | 绑定的手机号 | [optional] [default to undefined] | -| **status** | **number** | 状态 | [optional] [default to undefined] | -| **bindCount** | **number** | 已绑定卡密数量 | [optional] [default to undefined] | -| **totalBindAmount** | **object** | | [optional] [default to undefined] | -| **lastBindAt** | **string** | 最后绑定时间 | [optional] [default to undefined] | -| **lastUsedAt** | **string** | 最后使用时间 | [optional] [default to undefined] | -| **remark** | **string** | 备注 | [optional] [default to undefined] | -| **createdAt** | **string** | 创建时间 | [optional] [default to undefined] | -| **updatedAt** | **string** | 更新时间 | [optional] [default to undefined] | +| Name | Type | Description | Notes | +| ----------------------- | ---------- | -------------- | --------------------------------- | +| **id** | **number** | Token ID | [optional] [default to undefined] | +| **tokenName** | **string** | Token名称 | [optional] [default to undefined] | +| **tokenValue** | **string** | Token值 | [optional] [default to undefined] | +| **phone** | **string** | 绑定的手机号 | [optional] [default to undefined] | +| **status** | **number** | 状态 | [optional] [default to undefined] | +| **bindCount** | **number** | 已绑定卡密数量 | [optional] [default to undefined] | +| **totalBindAmount** | **number** | 累计绑定金额 | [optional] [default to undefined] | +| **totalRechargeAmount** | **number** | 总充值金额 | [optional] [default to undefined] | +| **rechargeLimitAmount** | **number** | 充值金额限制 | [optional] [default to undefined] | +| **rechargeLimitCount** | **number** | 充值次数限制 | [optional] [default to undefined] | +| **lastBindAt** | **string** | 最后绑定时间 | [optional] [default to undefined] | +| **lastUsedAt** | **string** | 最后使用时间 | [optional] [default to undefined] | +| **remark** | **string** | 备注 | [optional] [default to undefined] | +| **createdAt** | **string** | 创建时间 | [optional] [default to undefined] | +| **updatedAt** | **string** | 更新时间 | [optional] [default to undefined] | ## Example @@ -30,6 +33,9 @@ const instance: KamiApiCamelOilV1TokenInfo = { status, bindCount, totalBindAmount, + totalRechargeAmount, + rechargeLimitAmount, + rechargeLimitCount, lastBindAt, lastUsedAt, remark, diff --git a/src/api/generated/docs/KamiApiCamelOilV1UpdateTokenReq.md b/src/api/generated/docs/KamiApiCamelOilV1UpdateTokenReq.md new file mode 100644 index 0000000..61139b2 --- /dev/null +++ b/src/api/generated/docs/KamiApiCamelOilV1UpdateTokenReq.md @@ -0,0 +1,29 @@ +# KamiApiCamelOilV1UpdateTokenReq + +## Properties + +| Name | Type | Description | Notes | +| ----------------------- | ---------- | ------------ | --------------------------------- | +| **tokenId** | **number** | Token ID | [default to undefined] | +| **tokenName** | **string** | Token名称 | [default to undefined] | +| **phone** | **string** | 绑定的手机号 | [optional] [default to undefined] | +| **remark** | **string** | 备注 | [optional] [default to undefined] | +| **rechargeLimitAmount** | **number** | 充值金额限制 | [default to undefined] | +| **rechargeLimitCount** | **number** | 充值次数限制 | [default to undefined] | + +## Example + +```typescript +import { KamiApiCamelOilV1UpdateTokenReq } from './api'; + +const instance: KamiApiCamelOilV1UpdateTokenReq = { + tokenId, + tokenName, + phone, + remark, + rechargeLimitAmount, + rechargeLimitCount +}; +``` + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/src/api/generated/docs/KamiApiCamelOilV1UpdateTokenRes.md b/src/api/generated/docs/KamiApiCamelOilV1UpdateTokenRes.md new file mode 100644 index 0000000..e0dece6 --- /dev/null +++ b/src/api/generated/docs/KamiApiCamelOilV1UpdateTokenRes.md @@ -0,0 +1,19 @@ +# KamiApiCamelOilV1UpdateTokenRes + +## Properties + +| Name | Type | Description | Notes | +| ----------- | ---------- | ----------- | --------------------------------- | +| **message** | **string** | 信息 | [optional] [default to undefined] | + +## Example + +```typescript +import { KamiApiCamelOilV1UpdateTokenRes } from './api'; + +const instance: KamiApiCamelOilV1UpdateTokenRes = { + message +}; +``` + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/src/api/generated/models/index.ts b/src/api/generated/models/index.ts index 5395abc..d1efaac 100644 --- a/src/api/generated/models/index.ts +++ b/src/api/generated/models/index.ts @@ -42,6 +42,8 @@ export * from './kami-api-camel-oil-v1-order-list-item'; export * from './kami-api-camel-oil-v1-submit-order-req'; export * from './kami-api-camel-oil-v1-submit-order-res'; export * from './kami-api-camel-oil-v1-token-info'; +export * from './kami-api-camel-oil-v1-update-token-req'; +export * from './kami-api-camel-oil-v1-update-token-res'; export * from './kami-api-card-info-apple-v1-apple-card-list-record'; export * from './kami-api-card-info-apple-v1-apple-card-list-record-upload-user'; export * from './kami-api-card-info-apple-v1-call-back-order-manual-req'; diff --git a/src/api/generated/models/kami-api-camel-oil-v1-card-binding-info.ts b/src/api/generated/models/kami-api-camel-oil-v1-card-binding-info.ts index 821c02e..7d4cbc0 100644 --- a/src/api/generated/models/kami-api-camel-oil-v1-card-binding-info.ts +++ b/src/api/generated/models/kami-api-camel-oil-v1-card-binding-info.ts @@ -37,7 +37,10 @@ export interface KamiApiCamelOilV1CardBindingInfo { * 卡密 */ cardPassword?: string; - amount?: object; + /** + * 绑定金额 + */ + amount?: number; /** * 创建时间 */ diff --git a/src/api/generated/models/kami-api-camel-oil-v1-create-token-req.ts b/src/api/generated/models/kami-api-camel-oil-v1-create-token-req.ts index 9260db0..04dcb17 100644 --- a/src/api/generated/models/kami-api-camel-oil-v1-create-token-req.ts +++ b/src/api/generated/models/kami-api-camel-oil-v1-create-token-req.ts @@ -29,4 +29,12 @@ export interface KamiApiCamelOilV1CreateTokenReq { * 备注 */ remark?: string; + /** + * 充值金额限制 + */ + rechargeLimitAmount: number; + /** + * 充值次数限制 + */ + rechargeLimitCount: number; } diff --git a/src/api/generated/models/kami-api-camel-oil-v1-token-info.ts b/src/api/generated/models/kami-api-camel-oil-v1-token-info.ts index 4fb2aad..d6cb74c 100644 --- a/src/api/generated/models/kami-api-camel-oil-v1-token-info.ts +++ b/src/api/generated/models/kami-api-camel-oil-v1-token-info.ts @@ -37,7 +37,22 @@ export interface KamiApiCamelOilV1TokenInfo { * 已绑定卡密数量 */ bindCount?: number; - totalBindAmount?: object; + /** + * 累计绑定金额 + */ + totalBindAmount?: number; + /** + * 总充值金额 + */ + totalRechargeAmount?: number; + /** + * 充值金额限制 + */ + rechargeLimitAmount?: number; + /** + * 充值次数限制 + */ + rechargeLimitCount?: number; /** * 最后绑定时间 */ diff --git a/src/api/generated/models/kami-api-camel-oil-v1-update-token-req.ts b/src/api/generated/models/kami-api-camel-oil-v1-update-token-req.ts new file mode 100644 index 0000000..a6c59ec --- /dev/null +++ b/src/api/generated/models/kami-api-camel-oil-v1-update-token-req.ts @@ -0,0 +1,40 @@ +/* tslint:disable */ + +/** + * + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +export interface KamiApiCamelOilV1UpdateTokenReq { + /** + * Token ID + */ + tokenId: number; + /** + * Token名称 + */ + tokenName: string; + /** + * 绑定的手机号 + */ + phone?: string; + /** + * 备注 + */ + remark?: string; + /** + * 充值金额限制 + */ + rechargeLimitAmount: number; + /** + * 充值次数限制 + */ + rechargeLimitCount: number; +} diff --git a/src/api/generated/models/kami-api-camel-oil-v1-update-token-res.ts b/src/api/generated/models/kami-api-camel-oil-v1-update-token-res.ts new file mode 100644 index 0000000..4bde037 --- /dev/null +++ b/src/api/generated/models/kami-api-camel-oil-v1-update-token-res.ts @@ -0,0 +1,20 @@ +/* tslint:disable */ + +/** + * + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +export interface KamiApiCamelOilV1UpdateTokenRes { + /** + * 信息 + */ + message?: string; +} diff --git a/src/views/camel-oil-info/token/components/add-edit-modal.vue b/src/views/camel-oil-info/token/components/add-edit-modal.vue index 9868e8e..bba54fa 100644 --- a/src/views/camel-oil-info/token/components/add-edit-modal.vue +++ b/src/views/camel-oil-info/token/components/add-edit-modal.vue @@ -1,7 +1,7 @@ @@ -59,6 +82,7 @@ import { jdV2TokenClient } from '@/api/index.ts'; interface Props { visible: boolean; + editData?: KamiApiCamelOilV1TokenInfo; } interface Emits { @@ -75,42 +99,68 @@ const modalVisible = computed({ set: value => emit('update:visible', value) }); +const isEditMode = computed(() => !!props.editData); + const formRef = ref(); const generateFormModel = () => { return { + tokenId: 0, tokenName: '', tokenValue: '', phone: '', - remark: '' + remark: '', + rechargeLimitAmount: 0, + rechargeLimitCount: 0 }; }; const formModel = reactive(generateFormModel()); -const rules = { +const rules = computed(() => ({ tokenName: [ { required: true, message: '请输入Token名称' }, { min: 1, max: 100, message: 'Token名称长度为1-100个字符' } ], tokenValue: [ - { required: true, message: '请输入Token值' }, + { required: !isEditMode.value, message: '请输入Token值' }, { min: 1, max: 1000, message: 'Token值长度为1-1000个字符' } ], phone: [ { required: true, message: '请输入绑定手机号' }, { match: /^1[3-9]\d{9}$/, message: '请输入正确的手机号码' } ], - remark: [{ max: 500, message: '备注长度不能超过500个字符' }] -}; + remark: [{ max: 500, message: '备注长度不能超过500个字符' }], + rechargeLimitAmount: [ + { required: true, message: '请输入充值金额限制' }, + { type: 'number', min: 0, message: '充值金额限制不能小于0' } + ], + rechargeLimitCount: [ + { required: true, message: '请输入充值次数限制' }, + { type: 'number', min: 0, message: '充值次数限制不能小于0' } + ] +})); -// 监听弹窗显示状态,重置表单 +// 监听弹窗显示状态和编辑数据,更新表单 watch( - () => props.visible, - visible => { + [() => props.visible, () => props.editData], + ([visible, editData]) => { if (visible) { - // 重置表单 - Object.assign(formModel, generateFormModel()); + if (editData && isEditMode.value) { + // 编辑模式,填充现有数据 + Object.assign(formModel, { + tokenName: editData.tokenName || '', + tokenValue: editData.tokenValue || '', + phone: editData.phone || '', + remark: editData.remark || '', + rechargeLimitAmount: editData.rechargeLimitAmount || 0, + rechargeLimitCount: editData.rechargeLimitCount || 0, + tokenId: editData.id || 0 + }); + } else { + // 新增模式,重置表单 + Object.assign(formModel, generateFormModel()); + } } }, { immediate: true } @@ -127,27 +177,50 @@ const handleBeforeOk = async () => { return false; } - // 新增Token - await jdV2TokenClient.apiTokenCreatePost({ - kamiApiCamelOilV1CreateTokenReq: { - tokenName: formModel.tokenName, - tokenValue: formModel.tokenValue, - remark: formModel.remark - } - }); + if (isEditMode.value) { + // 编辑Token + await jdV2TokenClient.apiTokenUpdatePost({ + kamiApiCamelOilV1UpdateTokenReq: { + tokenId: formModel.tokenId, + tokenName: formModel.tokenName, + phone: formModel.phone, + remark: formModel.remark, + rechargeLimitAmount: formModel.rechargeLimitAmount, + rechargeLimitCount: formModel.rechargeLimitCount + } + }); - Notification.success({ - content: '新增Token成功', - closable: true - }); + Notification.success({ + content: '编辑Token成功', + closable: true + }); + } else { + // 新增Token + await jdV2TokenClient.apiTokenCreatePost({ + kamiApiCamelOilV1CreateTokenReq: { + tokenName: formModel.tokenName, + tokenValue: formModel.tokenValue, + phone: formModel.phone, + remark: formModel.remark, + rechargeLimitAmount: formModel.rechargeLimitAmount, + rechargeLimitCount: formModel.rechargeLimitCount + } + }); + + Notification.success({ + content: '新增Token成功', + closable: true + }); + } emit('success'); emit('update:visible', false); return true; } catch (err) { - console.error('新增Token失败:', err); + const action = isEditMode.value ? '编辑' : '新增'; + console.error(`${action}Token失败:`, err); Notification.error({ - content: '新增Token失败', + content: `${action}Token失败`, closable: true }); return false; diff --git a/src/views/camel-oil-info/token/components/binding-records-modal.vue b/src/views/camel-oil-info/token/components/binding-records-modal.vue index d593160..edc7fe5 100644 --- a/src/views/camel-oil-info/token/components/binding-records-modal.vue +++ b/src/views/camel-oil-info/token/components/binding-records-modal.vue @@ -2,40 +2,188 @@ - - + + + + +
+ + + + + + + + + +
+ + +
+ +
+ + + +
+ + + + {{ record.cardNumber }} + + + + + + {{ record.cardPassword }} + + + + + + {{ formatDateTime(record.createdAt) }} + + + +
+
+
+ + +
+ +
+ + + +
+
diff --git a/src/views/camel-oil-info/token/index.vue b/src/views/camel-oil-info/token/index.vue index 2c10e76..82b7e4c 100644 --- a/src/views/camel-oil-info/token/index.vue +++ b/src/views/camel-oil-info/token/index.vue @@ -85,7 +85,7 @@ }" :columns="columns" :data="renderData" - :scroll="{ x: 1200 }" + :scroll="{ x: 1800 }" @page-change="onPageChange" @page-size-change="onPageSizeChange" > @@ -196,12 +196,60 @@ const columns: TableColumnData[] = [ dataIndex: 'bindCount', width: 100 }, + { + title: '累计绑定金额', + dataIndex: 'totalBindAmount', + width: 120, + render: ({ record }) => { + if (!record.totalBindAmount) return '-'; + return `¥${Number(record.totalBindAmount).toFixed(2)}`; + } + }, + { + title: '总充值金额', + dataIndex: 'totalRechargeAmount', + width: 120, + render: ({ record }) => { + if (!record.totalRechargeAmount) return '-'; + return `¥${Number(record.totalRechargeAmount).toFixed(2)}`; + } + }, + { + title: '充值限制', + dataIndex: 'rechargeLimitAmount', + width: 110, + render: ({ record }) => { + if (!record.rechargeLimitAmount) return '-'; + return `¥${Number(record.rechargeLimitAmount).toFixed(2)}`; + } + }, + { + title: '次数限制', + dataIndex: 'rechargeLimitCount', + width: 100, + render: ({ record }) => { + return record.rechargeLimitCount || '-'; + } + }, + { + title: '最后绑定时间', + dataIndex: 'lastBindAt', + width: 180, + ellipsis: true, + tooltip: true, + render: ({ record }) => { + return formatDateTime(record.lastBindAt); + } + }, { title: '最后使用时间', dataIndex: 'lastUsedAt', width: 180, ellipsis: true, - tooltip: true + tooltip: true, + render: ({ record }) => { + return formatDateTime(record.lastUsedAt); + } }, { title: '状态', @@ -219,7 +267,10 @@ const columns: TableColumnData[] = [ { title: '创建时间', dataIndex: 'createdAt', - width: 180 + width: 180, + render: ({ record }) => { + return formatDateTime(record.createdAt); + } }, { title: '操作', @@ -341,6 +392,18 @@ const statusMapper = (status: number): { text: string; color: string } => { } }; +const formatDateTime = (dateTime: string | undefined): string => { + if (!dateTime) return '-'; + return new Date(dateTime).toLocaleString('zh-CN', { + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit' + }); +}; + const download = () => { // TODO: 实现导出功能 Notification.info({