salary
parent
ea7fae45e3
commit
8df1f7d25a
@ -0,0 +1,137 @@ |
|||||||
|
<template> |
||||||
|
<Dialog :title="dialogTitle" v-model="dialogVisible" width="900px"> |
||||||
|
<Descriptions |
||||||
|
title="申请详情" |
||||||
|
:data="orderInfo" |
||||||
|
:schema="applySchema" |
||||||
|
:columns="2" |
||||||
|
labelWidth="130px" |
||||||
|
/> |
||||||
|
<Descriptions |
||||||
|
title="审核详情" |
||||||
|
:data="orderInfo" |
||||||
|
:schema="orderInfo.state == 2 ? cancelSchema : auditSchema" |
||||||
|
:columns="orderInfo.state == 2 ? 2 : 3" |
||||||
|
labelWidth="100px" |
||||||
|
/> |
||||||
|
</Dialog> |
||||||
|
</template> |
||||||
|
<script name="DialogAfterSaleDetail" setup> |
||||||
|
import { getAfterSaleDetail } from '@/api/clue/afterSale' |
||||||
|
|
||||||
|
const dialogVisible = ref(false) // 弹窗的是否展示 |
||||||
|
const dialogTitle = ref('') // 弹窗的标题 |
||||||
|
|
||||||
|
const applySchema = [ |
||||||
|
{ |
||||||
|
field: 'name', |
||||||
|
label: '线索名称', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'phone', |
||||||
|
label: '联系方式', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'signUserName', |
||||||
|
label: '登记人', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'dealDate', |
||||||
|
label: '登记时间', |
||||||
|
dateFormat: 'YYYY-MM-DD HH:mm:ss', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'reason', |
||||||
|
label: '售后原因', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'refundAmount', |
||||||
|
label: '退款金额', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'isReturns', |
||||||
|
label: '是否退货', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'solution', |
||||||
|
label: '解决方案', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'applyUserName', |
||||||
|
label: '申请人', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'applyTime', |
||||||
|
label: '申请时间', |
||||||
|
dateFormat: 'YYYY-MM-DD HH:mm:ss', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'remark', |
||||||
|
label: '备注', |
||||||
|
span: 2, |
||||||
|
isEditor: true |
||||||
|
} |
||||||
|
] |
||||||
|
|
||||||
|
const auditSchema = [ |
||||||
|
{ |
||||||
|
field: 'stateName', |
||||||
|
label: '审核状态', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'checkUserName', |
||||||
|
label: '审核人', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'checkTime', |
||||||
|
label: '审核时间', |
||||||
|
dateFormat: 'YYYY-MM-DD HH:mm:ss', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'checkRemark', |
||||||
|
label: '备注', |
||||||
|
span: 3, |
||||||
|
isEditor: true |
||||||
|
} |
||||||
|
] |
||||||
|
|
||||||
|
const cancelSchema = [ |
||||||
|
{ |
||||||
|
field: 'stateName', |
||||||
|
label: '审核状态', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'revokeTime', |
||||||
|
label: '撤销时间', |
||||||
|
dateFormat: 'YYYY-MM-DD HH:mm:ss', |
||||||
|
span: 1 |
||||||
|
} |
||||||
|
] |
||||||
|
|
||||||
|
const orderInfo = ref({}) |
||||||
|
/** 打开弹窗 */ |
||||||
|
const open = async (id) => { |
||||||
|
dialogVisible.value = true |
||||||
|
dialogTitle.value = '售后申请详情' |
||||||
|
try { |
||||||
|
orderInfo.value = await getAfterSaleDetail({ id }) |
||||||
|
} catch (error) { |
||||||
|
console.log(error) |
||||||
|
} |
||||||
|
} |
||||||
|
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
||||||
|
</script> |
@ -0,0 +1,87 @@ |
|||||||
|
<template> |
||||||
|
<Dialog :title="dialogTitle" v-model="dialogVisible" width="600px"> |
||||||
|
<el-form ref="formRef" v-loading="formLoading" :model="formData" label-width="80px"> |
||||||
|
<el-form-item label="状态" prop="state"> |
||||||
|
<el-radio-group v-model="formData.state"> |
||||||
|
<el-radio :label="3"> 通过 </el-radio> |
||||||
|
<el-radio :label="4"> 驳回 </el-radio> |
||||||
|
</el-radio-group> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="备注" prop="remark"> |
||||||
|
<Editor v-model:modelValue="formData.remark" /> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
<template #footer> |
||||||
|
<el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button> |
||||||
|
<el-button @click="dialogVisible = false">取 消</el-button> |
||||||
|
</template> |
||||||
|
</Dialog> |
||||||
|
</template> |
||||||
|
<script name="DialogAfterSaleAudit" setup> |
||||||
|
import { batchAuditAfterSale } from '@/api/clue/afterSale' |
||||||
|
import { batchAuditPayment } from '@/api/clue/payment' |
||||||
|
|
||||||
|
const message = useMessage() // 消息弹窗 |
||||||
|
|
||||||
|
const dialogVisible = ref(false) // 弹窗的是否展示 |
||||||
|
const dialogTitle = ref('') // 弹窗的标题 |
||||||
|
|
||||||
|
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
||||||
|
const formData = ref({ |
||||||
|
state: 3, |
||||||
|
remark: '' |
||||||
|
}) |
||||||
|
const formRef = ref() // 表单 Ref |
||||||
|
const formType = ref('aftersale') |
||||||
|
const titleMap = { |
||||||
|
aftersale: '批量售后审核', |
||||||
|
feeback: '批量回款审核' |
||||||
|
} |
||||||
|
|
||||||
|
/** 打开弹窗 */ |
||||||
|
const open = (type, ids) => { |
||||||
|
dialogVisible.value = true |
||||||
|
formType.value = type |
||||||
|
dialogTitle.value = titleMap[type] || '批量审核' |
||||||
|
resetForm(ids) |
||||||
|
} |
||||||
|
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
||||||
|
|
||||||
|
/** 提交表单 */ |
||||||
|
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
||||||
|
const submitForm = async () => { |
||||||
|
// 校验表单 |
||||||
|
if (!formRef.value) return |
||||||
|
const valid = await formRef.value.validate() |
||||||
|
if (!valid) return |
||||||
|
// 提交请求 |
||||||
|
formLoading.value = true |
||||||
|
try { |
||||||
|
if (formType.value == 'aftersale') { |
||||||
|
await batchAuditAfterSale(formData.value) |
||||||
|
message.success('审核完成!') |
||||||
|
} else if (formType.value == 'feeback') { |
||||||
|
await batchAuditPayment(formData.value) |
||||||
|
message.success('审核完成!') |
||||||
|
} else { |
||||||
|
return |
||||||
|
} |
||||||
|
dialogVisible.value = false |
||||||
|
// 发送操作成功的事件 |
||||||
|
emit('success') |
||||||
|
} finally { |
||||||
|
formLoading.value = false |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** 重置表单 */ |
||||||
|
const resetForm = (ids) => { |
||||||
|
formData.value = { |
||||||
|
payIds: ids, |
||||||
|
saleIds: ids, |
||||||
|
state: 3, |
||||||
|
remark: '' |
||||||
|
} |
||||||
|
formRef.value?.resetFields() |
||||||
|
} |
||||||
|
</script> |
@ -0,0 +1,127 @@ |
|||||||
|
<template> |
||||||
|
<Dialog :title="dialogTitle" v-model="dialogVisible" width="900px"> |
||||||
|
<Descriptions |
||||||
|
title="申请详情" |
||||||
|
:data="orderInfo" |
||||||
|
:schema="applySchema" |
||||||
|
:columns="2" |
||||||
|
labelWidth="130px" |
||||||
|
/> |
||||||
|
<Descriptions |
||||||
|
title="审核详情" |
||||||
|
:data="orderInfo" |
||||||
|
:schema="orderInfo.state == 2 ? cancelSchema : auditSchema" |
||||||
|
:columns="orderInfo.state == 2 ? 2 : 3" |
||||||
|
labelWidth="100px" |
||||||
|
/> |
||||||
|
</Dialog> |
||||||
|
</template> |
||||||
|
<script name="DialogFeebackDetail" setup> |
||||||
|
import { getPaymentDetail } from '@/api/clue/payment' |
||||||
|
|
||||||
|
const dialogVisible = ref(false) // 弹窗的是否展示 |
||||||
|
const dialogTitle = ref('') // 弹窗的标题 |
||||||
|
|
||||||
|
const applySchema = [ |
||||||
|
{ |
||||||
|
field: 'name', |
||||||
|
label: '线索名称', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'phone', |
||||||
|
label: '联系方式', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'signUserName', |
||||||
|
label: '登记人', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'dealDate', |
||||||
|
label: '登记时间', |
||||||
|
dateFormat: 'YYYY-MM-DD HH:mm:ss', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'money', |
||||||
|
label: '回款金额', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'isPayoff', |
||||||
|
label: '是否结清', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'applyUserName', |
||||||
|
label: '申请人', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'applyTime', |
||||||
|
label: '申请时间', |
||||||
|
dateFormat: 'YYYY-MM-DD HH:mm:ss', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'remark', |
||||||
|
label: '备注', |
||||||
|
span: 2, |
||||||
|
isEditor: true |
||||||
|
} |
||||||
|
] |
||||||
|
|
||||||
|
const auditSchema = [ |
||||||
|
{ |
||||||
|
field: 'stateName', |
||||||
|
label: '审核状态', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'checkUserName', |
||||||
|
label: '审核人', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'checkTime', |
||||||
|
label: '审核时间', |
||||||
|
dateFormat: 'YYYY-MM-DD HH:mm:ss', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'checkRemark', |
||||||
|
label: '备注', |
||||||
|
span: 3, |
||||||
|
isEditor: true |
||||||
|
} |
||||||
|
] |
||||||
|
|
||||||
|
const cancelSchema = [ |
||||||
|
{ |
||||||
|
field: 'stateName', |
||||||
|
label: '审核状态', |
||||||
|
span: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
field: 'revokeTime', |
||||||
|
label: '撤销时间', |
||||||
|
dateFormat: 'YYYY-MM-DD HH:mm:ss', |
||||||
|
span: 1 |
||||||
|
} |
||||||
|
] |
||||||
|
|
||||||
|
const orderInfo = ref({}) |
||||||
|
/** 打开弹窗 */ |
||||||
|
const open = async (id) => { |
||||||
|
dialogVisible.value = true |
||||||
|
dialogTitle.value = '回款申请详情' |
||||||
|
try { |
||||||
|
orderInfo.value = await getPaymentDetail({ id }) |
||||||
|
} catch (error) { |
||||||
|
console.log(error) |
||||||
|
} |
||||||
|
} |
||||||
|
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
||||||
|
</script> |
Loading…
Reference in new issue