diff --git a/src/types/api/asset.ts b/src/types/api/asset.ts index 51431cc..0686aa7 100644 --- a/src/types/api/asset.ts +++ b/src/types/api/asset.ts @@ -241,7 +241,7 @@ export interface AssetPackageUsageRecord { * 对应接口:GET /api/admin/assets/:asset_type/:id/packages?page=1&page_size=50 */ export interface AssetPackageUsageRecord { - expiry_base?: ExpiryBase | null // 鍒版湡璁℃椂鍩哄噯 + expiry_base?: ExpiryBase | null // 到期计时基准 } export interface AssetPackageListResponse { diff --git a/src/views/asset-management/asset-information/composables/useAssetFormatters.ts b/src/views/asset-management/asset-information/composables/useAssetFormatters.ts index 5aad7c7..a696a5b 100644 --- a/src/views/asset-management/asset-information/composables/useAssetFormatters.ts +++ b/src/views/asset-management/asset-information/composables/useAssetFormatters.ts @@ -196,7 +196,7 @@ export function useAssetFormatters() { return statusMap[status] || 'info' } - // 鑾峰彇鍒版湡璁℃椂鍩哄噯鏂囨 + // 获取到期计时基准文案 const getExpiryBaseLabel = (expiryBase?: string | null) => { const map: Record = { from_activation: '实名激活时起算', diff --git a/src/views/asset-management/exchange-management/index.vue b/src/views/asset-management/exchange-management/index.vue index f3b830b..19ca80d 100644 --- a/src/views/asset-management/exchange-management/index.vue +++ b/src/views/asset-management/exchange-management/index.vue @@ -51,11 +51,31 @@ > - + + + + + @@ -224,6 +244,15 @@ const createFormRef = ref() const exchangeList = ref([]) + const EXCHANGE_REASON_OTHER = '其他' + const exchangeReasonOptions = [ + { label: '管控转卡', value: '管控转卡' }, + { label: '原卡丢失', value: '原卡丢失' }, + { label: '网络问题', value: '网络问题' }, + { label: '锁卡换卡', value: '锁卡换卡' }, + { label: '卡片损坏', value: '卡片损坏' }, + { label: EXCHANGE_REASON_OTHER, value: EXCHANGE_REASON_OTHER } + ] // 搜索表单 const searchForm = reactive({ @@ -237,13 +266,29 @@ // 创建换货单表单 const createForm = reactive({ exchange_reason: '', + exchange_reason_other: '', old_asset_type: '', old_identifier: '', remark: '' }) + const validateOtherExchangeReason = (_rule: any, value: string, callback: any) => { + if (createForm.exchange_reason !== EXCHANGE_REASON_OTHER) { + callback() + return + } + + if (!value || !value.trim()) { + callback(new Error('请输入其他换货原因')) + return + } + + callback() + } + const createRules = reactive({ - exchange_reason: [{ required: true, message: '请输入换货原因', trigger: 'blur' }], + exchange_reason: [{ required: true, message: '请选择换货原因', trigger: 'change' }], + exchange_reason_other: [{ validator: validateOtherExchangeReason, trigger: 'blur' }], old_asset_type: [{ required: true, message: '请选择旧资产类型', trigger: 'change' }], old_identifier: [{ required: true, message: '请选择旧资产标识符', trigger: 'change' }] }) @@ -353,7 +398,7 @@ { prop: 'new_asset_identifier', label: '新资产标识符', - width: 180, + width: 220, formatter: (row: any) => row.new_asset_identifier }, { @@ -460,6 +505,13 @@ createDialogVisible.value = true } + const handleExchangeReasonChange = () => { + if (createForm.exchange_reason !== EXCHANGE_REASON_OTHER) { + createForm.exchange_reason_other = '' + createFormRef.value?.clearValidate('exchange_reason_other') + } + } + // 旧资产类型变更 const handleOldAssetTypeChange = async () => { // 清空旧资产标识符 @@ -584,7 +636,17 @@ createLoading.value = true try { - const res = await ExchangeService.createExchange(createForm) + const exchangeReason = + createForm.exchange_reason === EXCHANGE_REASON_OTHER + ? createForm.exchange_reason_other.trim() + : createForm.exchange_reason + + const res = await ExchangeService.createExchange({ + exchange_reason: exchangeReason, + old_asset_type: createForm.old_asset_type, + old_identifier: createForm.old_identifier, + remark: createForm.remark || undefined + }) if (res.code === 0) { ElMessage.success('换货单创建成功') createDialogVisible.value = false