莳松-行政管理系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ss-oa-manage-web/src/views/Finance/Commission/Comp/DialogPlan.vue

222 lines
6.4 KiB

9 months ago
<template>
<Dialog v-model="dialogVisible" :title="dialogTitle" style="width: 1000px">
<el-form
:model="comissionForm"
ref="formRef"
:rules="rules"
class="mt-10px"
label-width="80px"
inline
>
<el-row :gutter="20">
<el-col :span="12" :offset="0">
<el-form-item label="方案名称" prop="name">
<el-input v-model="comissionForm.name" placeholder="请输入方案名称" clearable />
</el-form-item>
</el-col>
<el-col :span="12" :offset="0">
<el-form-item label="结算方式">
<el-radio-group v-model="comissionForm.percentageType">
<el-radio :label="1">
<Tooltip message="可配置多级,命中某档位后,按照档位分级结算" />阶梯结算
</el-radio>
<el-radio :label="2">
<Tooltip message="可配置多级,命中某档位后所有金额全部按照该档位结算" />常规结算
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-button type="primary" class="mb-10px" plain @click="handleAddRules"
>添加提成档位</el-button
>
<el-row :gutter="20" class="mb-10px">
<el-col
:span="24"
:offset="0"
class="flex"
v-for="(item, index) in comissionForm.rules"
:key="index"
>
<el-select v-model="item.ruleParam1" style="width: 100px">
<el-option
v-for="it in opts.percentage_param1"
:key="Number(it.value)"
:label="it.label"
:value="Number(it.value)"
/>
</el-select>
<el-select class="ml-5px" v-model="item.ruleParam2" style="width: 100px">
<el-option
v-for="it in opts.percentage_param2"
:key="Number(it.value)"
:label="it.label"
:value="Number(it.value)"
/>
</el-select>
<span class="ml-5px"></span>
<el-input
class="ml-5px"
v-model="item.ruleParam3"
placeholder="金额"
type="number"
:min="0"
style="width: 100px"
/>
<span class="ml-5px"></span>
<el-select class="ml-5px" v-model="item.ruleParam4" style="width: 120px">
<el-option
v-for="it in opts.percentage_param4"
:key="Number(it.value)"
:label="it.label"
:value="Number(it.value)"
/>
</el-select>
<div v-if="item.ruleParam4 == 2" class="inline-flex items-center">
<el-input
class="ml-5px"
v-model="item.ruleParam7"
placeholder="金额"
type="number"
:min="0"
style="width: 100px"
/>
<span class="ml-5px">元结算</span>
</div>
<div v-else class="inline-flex items-center">
<span class="ml-5px"></span>
<el-select class="ml-5px" v-model="item.ruleParam5" style="width: 100px">
<el-option
v-for="it in opts.percentage_param5"
:key="Number(it.value)"
:label="it.label"
:value="Number(it.value)"
/>
</el-select>
<span class="ml-5px">结算</span>
<el-input
class="ml-5px"
v-model="item.ruleParam6"
placeholder="比例"
type="number"
:min="1"
style="width: 100px"
>
<template #suffix> % </template>
</el-input>
</div>
</el-col>
</el-row>
</el-form>
<template #footer>
<span>
<el-button @click="dialogVisible = false">取消</el-button>
<el-button :disabled="formLoading" type="primary" @click="submitForm">保存</el-button>
</span>
</template>
</Dialog>
</template>
<script setup name="DialogSalarySetting">
const message = useMessage() // 消息弹窗
const dialogVisible = ref(false) // 弹窗的是否展示
const dialogTitle = ref('工资条设置')
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
const comissionForm = ref({})
const rules = {
name: { required: true, message: '方案名称不可为空', trigger: 'blur' }
}
const opts = ref({
percentage_param1: [],
percentage_param2: [],
percentage_param4: [],
percentage_param5: []
})
const formType = ref('create')
/** 打开弹窗 */
const open = async (type, row) => {
dialogVisible.value = true
dialogTitle.value = type == 'create' ? `新增方案` : '修改方案'
formType.value = type
resetForm()
if (!opts.value.length) {
// const arr = await ClassApi.getCommissionParams()
// arr.map((item) => {
// opts.value[item.dictType].push(item)
// })
}
if (row?.id) {
formLoading.value = true
try {
// comissionForm.value = await UserApi.getUser(id)
} finally {
formLoading.value = false
}
}
}
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
/** 重置表单 */
const resetForm = () => {
comissionForm.value = {
name: undefined,
percentageType: 1,
rules: [
{
ruleParam1: 1,
ruleParam2: 1,
ruleParam3: 0,
ruleParam4: 1,
ruleParam5: 1,
ruleParam6: 10
}
]
}
formRef.value?.resetFields()
}
function handleAddRules() {
comissionForm.value.rules.push({
ruleParam1: 1,
ruleParam2: 1,
ruleParam3: 0,
ruleParam4: 1,
ruleParam5: 1,
ruleParam6: 1
})
}
const emit = defineEmits(['success'])
const formRef = ref()
const submitForm = async () => {
// 校验表单
if (!formRef.value) return
const valid = await formRef.value.validate()
if (!valid) return
// 提交请求
formLoading.value = true
try {
if (formType.value === 'create') {
// await ClassApi.createClassType(data)
message.success(t('common.createSuccess'))
} else {
// await ClassApi.updateClassType(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
// 发送操作成功的事件
emit('success')
} finally {
formLoading.value = false
}
}
</script>
<style lang="scss" scoped></style>