Files
ss-oa-manage-web/src/views/Basic/Salary/Comp/DialogPlan.vue
2024-07-15 15:05:11 +08:00

222 lines
6.4 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<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>