<script setup>
|
import { onMounted, reactive, ref } from 'vue'
|
import { ElMessage } from 'element-plus'
|
import { getPlatformSettings, updatePlatformSettings } from '@/api/platformSettings'
|
|
const formRef = ref()
|
const loading = ref(false)
|
const saving = ref(false)
|
const settings = reactive({
|
unacceptedAutoRefundMinutes: 5,
|
commissionRate: 15,
|
preciseDispatchOrderCount: 10,
|
preciseDispatchRating: 4.8,
|
settlementDays: 1,
|
customerServiceWechat: '',
|
customerServicePhone: '',
|
})
|
|
const rules = {
|
unacceptedAutoRefundMinutes: [
|
{ required: true, message: '请输入未接单自动退款时间', trigger: 'blur' },
|
{ type: 'number', min: 1, max: 1440, message: '请输入1至1440分钟', trigger: 'change' },
|
],
|
commissionRate: [
|
{ required: true, message: '请输入提成比例', trigger: 'blur' },
|
{ type: 'number', min: 0, max: 100, message: '请输入0至100的比例', trigger: 'change' },
|
],
|
preciseDispatchOrderCount: [
|
{ required: true, message: '请输入总接单数', trigger: 'blur' },
|
{ type: 'number', min: 0, max: 100000, message: '请输入0至100000的整数', trigger: 'change' },
|
],
|
preciseDispatchRating: [
|
{ required: true, message: '请输入综合评分', trigger: 'blur' },
|
{ type: 'number', min: 0, max: 5, message: '请输入0至5的评分', trigger: 'change' },
|
],
|
settlementDays: [
|
{ required: true, message: '请输入结算周期', trigger: 'blur' },
|
{ type: 'number', min: 0, max: 365, message: '请输入0至365天', trigger: 'change' },
|
],
|
customerServiceWechat: [
|
{ required: true, whitespace: true, message: '请输入客服微信', trigger: 'blur' },
|
{ max: 100, message: '客服微信不能超过100个字符', trigger: 'blur' },
|
],
|
customerServicePhone: [
|
{ required: true, whitespace: true, message: '请输入客服电话', trigger: 'blur' },
|
{ max: 50, message: '客服电话不能超过50个字符', trigger: 'blur' },
|
],
|
}
|
|
const loadSettings = async () => {
|
loading.value = true
|
try {
|
Object.assign(settings, await getPlatformSettings())
|
} finally {
|
loading.value = false
|
}
|
}
|
|
const saveSettings = async () => {
|
const valid = await formRef.value.validate().catch(() => false)
|
if (!valid) return
|
saving.value = true
|
try {
|
Object.assign(settings, await updatePlatformSettings({
|
...settings,
|
customerServiceWechat: settings.customerServiceWechat.trim(),
|
customerServicePhone: settings.customerServicePhone.trim(),
|
}))
|
ElMessage.success('平台设置已保存')
|
} finally {
|
saving.value = false
|
}
|
}
|
|
onMounted(loadSettings)
|
</script>
|
|
<template>
|
<section v-loading="loading" class="platform-settings-page">
|
<el-card class="settings-card" shadow="never">
|
<el-form ref="formRef" :model="settings" :rules="rules" label-position="left" label-width="202px">
|
<el-form-item label="未接单自动退款时间(分钟)" prop="unacceptedAutoRefundMinutes">
|
<el-input-number v-model="settings.unacceptedAutoRefundMinutes" :controls="false" :min="1" :max="1440" :precision="0" />
|
</el-form-item>
|
<el-form-item label="提成管理(平台)" prop="commissionRate">
|
<div class="inline-field">
|
<el-input-number v-model="settings.commissionRate" :controls="false" :min="0" :max="100" :precision="2" />
|
<span>%</span>
|
<span class="field-tip">个人导游按此配置分成,讲解队参考讲解队配置</span>
|
</div>
|
</el-form-item>
|
<el-form-item label="推单规则">
|
<strong class="rule-text">优先级:评分 → 接单数 → 注册先后</strong>
|
</el-form-item>
|
<el-form-item label="精准可用规则">
|
<div class="stacked-fields">
|
<el-form-item label="总接单数不低于" label-width="110px" prop="preciseDispatchOrderCount">
|
<el-input-number v-model="settings.preciseDispatchOrderCount" :controls="false" :min="0" :max="100000" :precision="0" />
|
</el-form-item>
|
<el-form-item label="综合评分不低于" label-width="110px" prop="preciseDispatchRating">
|
<el-input-number v-model="settings.preciseDispatchRating" :controls="false" :min="0" :max="5" :step="0.1" :precision="2" />
|
</el-form-item>
|
</div>
|
</el-form-item>
|
<el-form-item label="结算周期" prop="settlementDays">
|
<div class="inline-field settlement-field">
|
<span>T+</span>
|
<el-input-number v-model="settings.settlementDays" :controls="false" :min="0" :max="365" :precision="0" />
|
<span>天</span>
|
</div>
|
</el-form-item>
|
<el-form-item label="客服配置">
|
<div class="customer-service-fields">
|
<el-form-item label="微信" label-width="48px" prop="customerServiceWechat">
|
<el-input v-model="settings.customerServiceWechat" maxlength="100" placeholder="请输入客服微信" />
|
</el-form-item>
|
<el-form-item label="电话" label-width="48px" prop="customerServicePhone">
|
<el-input v-model="settings.customerServicePhone" maxlength="50" placeholder="请输入客服电话" />
|
</el-form-item>
|
</div>
|
</el-form-item>
|
<el-form-item class="action-item">
|
<el-button type="primary" :loading="saving" @click="saveSettings">保存</el-button>
|
</el-form-item>
|
</el-form>
|
</el-card>
|
</section>
|
</template>
|
|
<style scoped>
|
.platform-settings-page { min-height: 560px; }
|
.settings-card { min-height: 560px; border: 0; border-radius: 4px; }
|
.settings-card :deep(.el-card__body) { padding: 36px 44px; }
|
.settings-card :deep(.el-form-item) { margin-bottom: 30px; }
|
.settings-card :deep(.el-form-item__label) { color: #344054; font-weight: 600; white-space: nowrap; }
|
.settings-card :deep(.el-input-number) { width: 230px; }
|
.settings-card :deep(.el-input-number .el-input__inner) { text-align: left; }
|
.inline-field { display: flex; align-items: center; gap: 12px; }
|
.field-tip { margin-left: 28px; color: #f56c6c; font-size: 13px; }
|
.rule-text { color: #2f3542; font-size: 14px; }
|
.stacked-fields { display: flex; flex-direction: column; gap: 16px; }
|
.stacked-fields :deep(.el-form-item) { margin-bottom: 0; }
|
.settlement-field :deep(.el-input-number) { width: 190px; }
|
.customer-service-fields { display: grid; grid-template-columns: 1fr 1fr; gap: 42px; width: min(700px, 100%); }
|
.customer-service-fields :deep(.el-form-item) { margin-bottom: 0; }
|
.customer-service-fields :deep(.el-input) { width: 240px; }
|
.action-item { margin-top: 42px; margin-bottom: 0 !important; }
|
.action-item :deep(.el-button) { min-width: 74px; }
|
@media (max-width: 1360px) {
|
.field-tip { margin-left: 10px; }
|
.customer-service-fields { gap: 20px; }
|
.customer-service-fields :deep(.el-input) { width: 210px; }
|
}
|
</style>
|