|
|
@@ -62,6 +62,17 @@
|
|
|
<el-table-column label="类型编码" align="center" prop="typeCode" />
|
|
|
<el-table-column label="类型名称" align="center" prop="typeName" />
|
|
|
<el-table-column label="类型说明" align="center" prop="description" />
|
|
|
+ <el-table-column label="是否均化" align="center" prop="isEqualized">
|
|
|
+ <template #default="scope">
|
|
|
+ <dict-tag :options="sys_yesno" :value="scope.row.isEqualized" />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="均化阈值" align="center" prop="equalizedThreshold">
|
|
|
+ <template #default="scope">
|
|
|
+ <span v-if="scope.row.isEqualized === '1' && scope.row.equalizedThreshold"> {{ scope.row.equalizedThreshold }}分 </span>
|
|
|
+ <span v-else>-</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
<el-table-column label="状态" align="center" prop="status">
|
|
|
<template #default="scope">
|
|
|
<dict-tag :options="sys_msg_status" :value="scope.row.status" />
|
|
|
@@ -95,6 +106,22 @@
|
|
|
<el-form-item label="类型说明" prop="description">
|
|
|
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
|
|
|
</el-form-item>
|
|
|
+ <el-form-item label="是否均化" prop="isEqualized">
|
|
|
+ <el-radio-group v-model="form.isEqualized">
|
|
|
+ <el-radio v-for="dict in sys_yesno" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ <div class="form-tip">
|
|
|
+ <el-text size="small" type="info">启用均化后,同一学生在设定时间内的相同奖励将按阈值进行分数调整</el-text>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="均化阈值" prop="equalizedThreshold" v-show="form.isEqualized === '1'">
|
|
|
+ <el-input v-model="form.equalizedThreshold" placeholder="请输入均化阈值">
|
|
|
+ <template #append>分</template>
|
|
|
+ </el-input>
|
|
|
+ <div class="form-tip">
|
|
|
+ <el-text size="small" type="info">当累计加分超过此阈值时,其他学生相同奖励的加分将进行递减处理</el-text>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
<el-form-item label="状态" prop="status">
|
|
|
<el-select v-model="form.status" placeholder="请选择状态">
|
|
|
<el-option v-for="dict in sys_msg_status" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
|
|
|
@@ -118,11 +145,12 @@
|
|
|
</template>
|
|
|
|
|
|
<script setup name="RewardType" lang="ts">
|
|
|
+import { ref, reactive, toRefs, getCurrentInstance, onMounted, ComponentInternalInstance } from 'vue';
|
|
|
import { listRewardType, getRewardType, delRewardType, addRewardType, updateRewardType } from '@/api/xskh/rewardType/rewardType';
|
|
|
import { RewardTypeVO, RewardTypeQuery, RewardTypeForm } from '@/api/xskh/rewardType/rewardType/types';
|
|
|
|
|
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|
|
-const { sys_msg_status } = toRefs<any>(proxy?.useDict('sys_msg_status'));
|
|
|
+const { sys_msg_status, sys_yesno } = toRefs<any>(proxy?.useDict('sys_msg_status', 'sys_yesno'));
|
|
|
|
|
|
const rewardTypeList = ref<RewardTypeVO[]>([]);
|
|
|
const buttonLoading = ref(false);
|
|
|
@@ -146,7 +174,9 @@ const initFormData: RewardTypeForm = {
|
|
|
typeCode: undefined,
|
|
|
typeName: undefined,
|
|
|
description: undefined,
|
|
|
- status: undefined,
|
|
|
+ isEqualized: '0', // 默认不启用均化
|
|
|
+ equalizedThreshold: undefined,
|
|
|
+ status: '0', // 默认启用状态(正常)
|
|
|
sortOrder: undefined,
|
|
|
deleted: undefined
|
|
|
};
|
|
|
@@ -166,7 +196,33 @@ const data = reactive<PageData<RewardTypeForm, RewardTypeQuery>>({
|
|
|
rules: {
|
|
|
id: [{ required: true, message: '主键ID不能为空', trigger: 'blur' }],
|
|
|
typeCode: [{ required: true, message: '类型编码不能为空', trigger: 'blur' }],
|
|
|
- typeName: [{ required: true, message: '类型名称不能为空', trigger: 'blur' }]
|
|
|
+ typeName: [{ required: true, message: '类型名称不能为空', trigger: 'blur' }],
|
|
|
+ equalizedThreshold: [
|
|
|
+ {
|
|
|
+ pattern: /^(0|[1-9]\d*)(\.\d{1,2})?$/,
|
|
|
+ message: '请输入有效的数字(支持最多2位小数)',
|
|
|
+ trigger: 'blur'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ validator: (rule: any, value: any, callback: any) => {
|
|
|
+ if (form.value.isEqualized === '1') {
|
|
|
+ if (!value && value !== '0') {
|
|
|
+ callback(new Error('启用均化时,均化阈值不能为空'));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ const numValue = parseFloat(value);
|
|
|
+ if (isNaN(numValue) || numValue < 0) {
|
|
|
+ callback(new Error('均化阈值必须大于等于0'));
|
|
|
+ } else {
|
|
|
+ callback();
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ callback();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ trigger: 'blur'
|
|
|
+ }
|
|
|
+ ]
|
|
|
}
|
|
|
});
|
|
|
|
|
|
@@ -270,3 +326,10 @@ onMounted(() => {
|
|
|
getList();
|
|
|
});
|
|
|
</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+/* 表单提示样式 */
|
|
|
+.form-tip {
|
|
|
+ margin-top: 5px;
|
|
|
+}
|
|
|
+</style>
|