modify-bug
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 6m58s

This commit is contained in:
sexygoat
2026-03-28 18:31:43 +08:00
parent d6c23c8bd1
commit dbe6070207
22 changed files with 922 additions and 260 deletions

View File

@@ -64,11 +64,20 @@
>
<ElForm ref="formRef" :model="form" :rules="rules" label-width="120px">
<ElFormItem label="运营商编码" prop="carrier_code">
<ElInput
v-model="form.carrier_code"
placeholder="请输入运营商编码"
:disabled="dialogType === 'edit'"
/>
<div style="display: flex; gap: 8px">
<ElInput
v-model="form.carrier_code"
placeholder="请输入运营商编码或点击生成"
:disabled="dialogType === 'edit'"
clearable
style="flex: 1"
/>
<CodeGeneratorButton
v-if="dialogType === 'add'"
code-type="carrier"
@generated="handleCodeGenerated"
/>
</div>
</ElFormItem>
<ElFormItem label="运营商名称" prop="carrier_name">
<ElInput v-model="form.carrier_name" placeholder="请输入运营商名称" />
@@ -150,6 +159,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 {
@@ -441,6 +451,15 @@
})
}
// 处理编码生成
const handleCodeGenerated = (code: string) => {
form.carrier_code = code
// 清除该字段的验证错误提示
nextTick(() => {
formRef.value?.clearValidate('carrier_code')
})
}
// 删除运营商
const deleteCarrier = (row: any) => {
ElMessageBox.confirm(`确定删除运营商 ${row.carrier_name} 吗?`, '删除确认', {

View File

@@ -151,6 +151,23 @@
{{ formatDateTime(scope.row.created_at) }}
</template>
</ElTableColumn>
<ElTableColumn label="操作" width="150" fixed="right">
<template #default="scope">
<div v-if="scope.row.status === 99" style="display: flex; gap: 8px">
<ArtButtonTable
text="入账"
iconColor="#67C23A"
@click="handleResolveCommission(scope.row, 'release')"
/>
<ArtButtonTable
text="作废"
iconColor="#F56C6C"
@click="handleResolveCommission(scope.row, 'invalidate')"
/>
</div>
<span v-else>-</span>
</template>
</ElTableColumn>
</template>
</ArtTable>
</ElTabPane>
@@ -233,6 +250,69 @@
</ElTabPane>
</ElTabs>
</ElDrawer>
<!-- 佣金修正对话框 -->
<ElDialog
v-model="resolveDialogVisible"
:title="resolveAction === 'release' ? '佣金入账' : '佣金作废'"
width="500px"
>
<ElAlert
:title="
resolveAction === 'release'
? '确认将该笔待审佣金记录入账'
: '确认将该笔待审佣金记录作废'
"
:type="resolveAction === 'release' ? 'success' : 'warning'"
style="margin-bottom: 16px"
:closable="false"
/>
<ElForm
ref="resolveFormRef"
:model="resolveForm"
:rules="resolveRules"
label-width="100px"
>
<ElFormItem v-if="resolveAction === 'release'" label="入账金额" prop="amount">
<ElInputNumber
v-model="resolveForm.amount"
:min="0"
:step="100"
:precision="0"
controls-position="right"
style="width: 100%"
placeholder="请输入入账金额(分)"
/>
<div style="color: var(--el-text-color-secondary); font-size: 12px; margin-top: 4px">
金额单位为分例如100 = 10000
</div>
</ElFormItem>
<ElFormItem label="备注" prop="remark">
<ElInput
v-model="resolveForm.remark"
type="textarea"
:rows="3"
placeholder="请输入备注可选最多500字符"
maxlength="500"
show-word-limit
/>
</ElFormItem>
</ElForm>
<template #footer>
<div class="dialog-footer">
<ElButton @click="resolveDialogVisible = false">取消</ElButton>
<ElButton
:type="resolveAction === 'release' ? 'success' : 'warning'"
@click="handleResolveSubmit"
:loading="resolveSubmitLoading"
>
确认
</ElButton>
</div>
</template>
</ElDialog>
</div>
</template>
@@ -240,11 +320,13 @@
import { h, watch, onBeforeUnmount } from 'vue'
import { useRoute } from 'vue-router'
import { CommissionService } from '@/api/modules'
import { ElMessage, ElTag } from 'element-plus'
import { ElMessage, ElMessageBox, ElTag } from 'element-plus'
import type { FormInstance, FormRules } from 'element-plus'
import type {
ShopCommissionSummaryItem,
ShopCommissionRecordItem,
WithdrawalRequestItem
WithdrawalRequestItem,
CommissionResolveAction
} from '@/types/api/commission'
import { useCheckedColumns } from '@/composables/useCheckedColumns'
import { useAuth } from '@/composables/useAuth'
@@ -321,6 +403,34 @@
total: 0
})
// 佣金修正对话框状态
const resolveDialogVisible = ref(false)
const resolveFormRef = ref<FormInstance>()
const resolveSubmitLoading = ref(false)
const resolveAction = ref<CommissionResolveAction>('release')
const currentCommissionId = ref<number>(0)
const resolveForm = reactive({
amount: undefined as number | undefined,
remark: ''
})
// 佣金修正表单验证规则
const resolveRules = computed<FormRules>(() => ({
amount:
resolveAction.value === 'release'
? [
{ required: true, message: '请输入入账金额', trigger: 'blur' },
{
type: 'number',
min: 1,
message: '入账金额必须大于0',
trigger: 'blur'
}
]
: [],
remark: [{ max: 500, message: '备注最多500字符', trigger: 'blur' }]
}))
// 列配置
const columnOptions = [
{ label: '店铺编码', prop: 'shop_code' },
@@ -624,6 +734,68 @@
// 暂无其他菜单项
}
// 处理佣金修正
const handleResolveCommission = (row: ShopCommissionRecordItem, action: CommissionResolveAction) => {
currentCommissionId.value = row.id
resolveAction.value = action
resolveForm.amount = undefined
resolveForm.remark = ''
resolveDialogVisible.value = true
}
// 提交佣金修正
const handleResolveSubmit = async () => {
if (!resolveFormRef.value) return
await resolveFormRef.value.validate(async (valid) => {
if (valid) {
const actionText = resolveAction.value === 'release' ? '入账' : '作废'
const confirmText =
resolveAction.value === 'release'
? `确认将该笔佣金记录入账 ${formatMoney(resolveForm.amount || 0)} 吗?`
: '确认将该笔佣金记录作废吗?'
try {
await ElMessageBox.confirm(confirmText, '确认操作', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning'
})
resolveSubmitLoading.value = true
try {
const params: any = {
action: resolveAction.value
}
if (resolveAction.value === 'release' && resolveForm.amount) {
params.amount = resolveForm.amount
}
if (resolveForm.remark) {
params.remark = resolveForm.remark
}
await CommissionService.resolveCommissionRecord(currentCommissionId.value, params)
ElMessage.success(`${actionText}成功`)
resolveDialogVisible.value = false
resolveFormRef.value?.resetFields()
// 刷新佣金明细列表
loadCommissionRecords()
} catch (error: any) {
console.error(error)
ElMessage.error(error?.message || `${actionText}失败`)
} finally {
resolveSubmitLoading.value = false
}
} catch {
// 用户取消
}
}
})
}
</script>
<style lang="scss" scoped>

View File

@@ -201,6 +201,9 @@
const rejectRules = reactive<FormRules>({
reject_reason: [
{ required: true, message: t('commission.validation.rejectReasonRequired'), trigger: 'blur' }
],
remark: [
{ required: true, message: t('commission.validation.remarkRequired'), trigger: 'blur' }
]
})
@@ -402,7 +405,7 @@
try {
await CommissionService.rejectWithdrawal(currentWithdrawalId.value, {
reject_reason: rejectForm.reject_reason,
remark: rejectForm.remark || undefined
remark: rejectForm.remark
})
ElMessage.success(t('commission.messages.rejectSuccess'))
rejectDialogVisible.value = false