1
This commit is contained in:
parent
4bc0f47b97
commit
6ee2cda0f1
@ -25,7 +25,8 @@
|
||||
</template>
|
||||
</lay-table>
|
||||
</lay-card>
|
||||
<lay-layer v-model="addShow" :title="addIsEdit==1?'新增考评时间':'编辑考评时间'" :type="4" :shade="true" :area="['950px','100%']" :btn="addButton">
|
||||
<lay-layer v-model="addShow" :title="addIsEdit==1?'新增考评时间':'编辑考评时间'" :type="4" :shade="true"
|
||||
:area="['950px','100%']" :btn="addButton">
|
||||
<lay-container fluid="true" style="padding: 20px">
|
||||
<lay-form :model="addData">
|
||||
<lay-form-item required label-width="150px" label="考评类型" prop="score_type">
|
||||
@ -44,10 +45,28 @@
|
||||
<lay-input-number v-model="addData.time"></lay-input-number>
|
||||
</lay-form-item>
|
||||
<lay-form-item required label-width="150px" label="考评开始时间" prop="single_score_min">
|
||||
<lay-date-picker type="datetime" v-model="addData.start_time" placeholder="考评开始时间" allow-clear></lay-date-picker>
|
||||
<lay-date-picker type="datetime" v-model="addData.start_time" placeholder="考评开始时间"
|
||||
allow-clear></lay-date-picker>
|
||||
</lay-form-item>
|
||||
<lay-form-item required label-width="150px" label="考评结束时间" prop="single_score_min">
|
||||
<lay-date-picker type="datetime" v-model="addData.end_time" placeholder="考评结束时间" allow-clear></lay-date-picker>
|
||||
<lay-date-picker type="datetime" v-model="addData.end_time" placeholder="考评结束时间"
|
||||
allow-clear></lay-date-picker>
|
||||
</lay-form-item>
|
||||
<lay-form-item required label-width="150px" label="考评范围" prop="score_type">
|
||||
<lay-cascader :checkStrictly="false" size="lg" :options="groupList" search
|
||||
:replaceFields="replaceFields"
|
||||
v-model="addData.group_id"
|
||||
placeholder="选择考评范围" allow-clear></lay-cascader>
|
||||
</lay-form-item>
|
||||
<lay-form-item required label-width="150px" label="考评内容" prop="score_type">
|
||||
<lay-tree
|
||||
:tail-node-icon="false"
|
||||
:data="contentList"
|
||||
:showCheckbox="true"
|
||||
v-model:checkedKeys="addData.rules"
|
||||
:replaceFields="contentFields"
|
||||
@check-change="getTree">
|
||||
</lay-tree>
|
||||
</lay-form-item>
|
||||
<lay-form-item required label-width="150px" label="规则描述" prop="scoring_criteria">
|
||||
<lay-textarea placeholder="请输入" v-model="addData.rule_description"></lay-textarea>
|
||||
@ -59,30 +78,138 @@
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import {
|
||||
homeGetHierarchicalData,
|
||||
menuData,
|
||||
scheduleCreate, scheduleDelete,
|
||||
scheduleList, scheduleUpdate,
|
||||
scheduleList, scheduleUpdate, userGroupData
|
||||
} from '../../api/module/home'
|
||||
import {ref, watch, onMounted, reactive} from 'vue'
|
||||
import {layer} from '@layui/layer-vue'
|
||||
import {verificationImg} from "@/api/module/commone";
|
||||
|
||||
const selectedIds = ref([]);
|
||||
// 处理取消选中时的逻辑优化
|
||||
const getTree = (node) => {
|
||||
console.log(node)
|
||||
if (node.isChecked) {
|
||||
// 选中逻辑:合并父链和子节点ID(原有逻辑)
|
||||
const relatedIds = collectRelatedIds(node);
|
||||
selectedIds.value = [...new Set([...selectedIds.value, ...relatedIds])];
|
||||
} else {
|
||||
// 取消选中逻辑分两步处理 --------------------------
|
||||
|
||||
// 第一步:移除当前节点及其所有子节点的ID
|
||||
const childIds = collectChildIds(node);
|
||||
selectedIds.value = selectedIds.value.filter(id => !childIds.includes(id));
|
||||
|
||||
// 第二步:检查父节点是否需要移除(逐级向上)
|
||||
let parent = node.parentNode;
|
||||
while (parent) {
|
||||
// 判断父节点是否还有被选中的子节点
|
||||
const hasOtherCheckedChild = parent.children.some(
|
||||
child => child.id !== node.id && selectedIds.value.includes(child.id)
|
||||
);
|
||||
|
||||
if (!hasOtherCheckedChild) {
|
||||
// 无其他选中子节点,移除父节点ID
|
||||
selectedIds.value = selectedIds.value.filter(id => id !== parent.id);
|
||||
} else {
|
||||
// 有其他选中子节点,终止向上检查
|
||||
break;
|
||||
}
|
||||
|
||||
parent = parent.parentNode; // 继续检查更上层父节点
|
||||
}
|
||||
}
|
||||
};
|
||||
const collectRelatedIds = (node) => {
|
||||
const ids = new Set();
|
||||
|
||||
// 向上收集父节点及自身
|
||||
let current = node;
|
||||
while (current) {
|
||||
ids.add(current.id);
|
||||
current = current.parentNode;
|
||||
}
|
||||
|
||||
// 向下收集所有子节点
|
||||
const stack = [node];
|
||||
while (stack.length > 0) {
|
||||
const currentNode = stack.pop();
|
||||
ids.add(currentNode.id);
|
||||
if (currentNode.children) {
|
||||
stack.push(...currentNode.children);
|
||||
}
|
||||
}
|
||||
|
||||
return Array.from(ids);
|
||||
};
|
||||
// 辅助函数:仅收集当前节点及子节点ID(不包含父节点)
|
||||
const collectChildIds = (node) => {
|
||||
const ids = new Set();
|
||||
const stack = [node];
|
||||
while (stack.length > 0) {
|
||||
const currentNode = stack.pop();
|
||||
ids.add(currentNode.id);
|
||||
if (currentNode.children) {
|
||||
stack.push(...currentNode.children);
|
||||
}
|
||||
}
|
||||
return Array.from(ids);
|
||||
};
|
||||
//列表内容
|
||||
const dataSource6 = ref([]);
|
||||
const addShow = ref(false)
|
||||
//1 add 2 edit
|
||||
const addIsEdit = ref(1)
|
||||
const addData = reactive({
|
||||
evaluation_type:null,
|
||||
evaluation_start_type:null,
|
||||
start_time:null,
|
||||
end_time:null,
|
||||
time:0,
|
||||
rule_description:'',
|
||||
evaluation_type: null,
|
||||
evaluation_start_type: null,
|
||||
start_time: null,
|
||||
end_time: null,
|
||||
time: 0,
|
||||
rule_description: '',
|
||||
group_id: [],
|
||||
rules: []
|
||||
})
|
||||
const categoryList= ref();
|
||||
onMounted(() => {
|
||||
getHierarchicalData()
|
||||
//getHierarchicalTwoList();
|
||||
getGroupList();
|
||||
getContentList();
|
||||
})
|
||||
const contentFields = {
|
||||
title: 'project_name',
|
||||
id: 'id',
|
||||
children: 'children'
|
||||
}
|
||||
const contentList = ref([]);
|
||||
const getContentList = () => {
|
||||
homeGetHierarchicalData({}).then((res) => {
|
||||
console.log(res)
|
||||
if (res.code == 1) {
|
||||
contentList.value = res.data;
|
||||
} else {
|
||||
layer.msg(res.msg, {icon: 2})
|
||||
}
|
||||
})
|
||||
}
|
||||
const replaceFields = {
|
||||
label: 'name',
|
||||
value: 'id',
|
||||
children: 'children'
|
||||
}
|
||||
const groupList = ref([]);
|
||||
const getGroupList = () => {
|
||||
userGroupData({}).then((res) => {
|
||||
console.log(res)
|
||||
if (res.code == 1) {
|
||||
res.data.unshift({name: '全部人员', id: 0, children: []});
|
||||
groupList.value = res.data;
|
||||
} else {
|
||||
layer.msg(res.msg, {icon: 2})
|
||||
}
|
||||
})
|
||||
}
|
||||
const getHierarchicalData = () => {
|
||||
scheduleList({}).then((res) => {
|
||||
console.log(res)
|
||||
@ -95,26 +222,26 @@ const getHierarchicalData = () => {
|
||||
}
|
||||
const addShowMsd = () => {
|
||||
addShow.value = true;
|
||||
addIsEdit.value=1;
|
||||
addData.id=0;
|
||||
addData.evaluation_type=null;
|
||||
addData.time=0;
|
||||
addData.evaluation_start_type=null;
|
||||
addData.start_time=null;
|
||||
addData.end_time=null;
|
||||
addData.rule_description='';
|
||||
addIsEdit.value = 1;
|
||||
addData.id = 0;
|
||||
addData.evaluation_type = null;
|
||||
addData.time = 0;
|
||||
addData.evaluation_start_type = null;
|
||||
addData.start_time = null;
|
||||
addData.end_time = null;
|
||||
addData.rule_description = '';
|
||||
}
|
||||
const editShowMsd = (data) => {
|
||||
console.log(data);
|
||||
addShow.value = true;
|
||||
addData.id=data.id;
|
||||
addData.evaluation_type=parseInt(data.evaluation_type);
|
||||
addData.time=data.time;
|
||||
addData.evaluation_start_type=parseInt(data.evaluation_start_type);
|
||||
addData.start_time=data.start_time;
|
||||
addData.end_time=data.end_time;
|
||||
addData.rule_description=data.rule_description;
|
||||
addIsEdit.value=2;
|
||||
addData.id = data.id;
|
||||
addData.evaluation_type = parseInt(data.evaluation_type);
|
||||
addData.time = data.time;
|
||||
addData.evaluation_start_type = parseInt(data.evaluation_start_type);
|
||||
addData.start_time = data.start_time;
|
||||
addData.end_time = data.end_time;
|
||||
addData.rule_description = data.rule_description;
|
||||
addIsEdit.value = 2;
|
||||
}
|
||||
const delShowMsd = async (data) => {
|
||||
var res = await scheduleDelete({id: data.id});
|
||||
@ -148,7 +275,7 @@ const columns6 = [
|
||||
title: "规则描述",
|
||||
width: "100px",
|
||||
key: "rule_description",
|
||||
ellipsisTooltip:true,
|
||||
ellipsisTooltip: true,
|
||||
},
|
||||
{
|
||||
title: "考评开始时间",
|
||||
@ -175,27 +302,29 @@ const addButton = ref([
|
||||
text: "确认",
|
||||
callback: async () => {
|
||||
console.log(addData);
|
||||
console.log(selectedIds.value)
|
||||
return;
|
||||
if (addData.evaluation_type == null || addData.evaluation_type == '') {
|
||||
layer.msg('请选择考评类型!', {icon: 2, time: 1000})
|
||||
}
|
||||
if (addData.time <=0) {
|
||||
if (addData.time <= 0) {
|
||||
layer.msg('请填写时间(天)!', {icon: 2, time: 1000})
|
||||
}
|
||||
if (addData.evaluation_start_type ==null) {
|
||||
if (addData.evaluation_start_type == null) {
|
||||
layer.msg('请选择考评开始类型!', {icon: 2, time: 1000})
|
||||
}
|
||||
if (addData.start_time ==null) {
|
||||
if (addData.start_time == null) {
|
||||
layer.msg('请选择考评开始时间!', {icon: 2, time: 1000})
|
||||
}
|
||||
if (addData.end_time ==null) {
|
||||
if (addData.end_time == null) {
|
||||
layer.msg('请选择考评结束时间!', {icon: 2, time: 1000})
|
||||
}
|
||||
if (addData.rule_description =='') {
|
||||
if (addData.rule_description == '') {
|
||||
layer.msg('请填写规则描述!', {icon: 2, time: 1000})
|
||||
}
|
||||
if(addIsEdit.value==1){
|
||||
if (addIsEdit.value == 1) {
|
||||
var res = await scheduleCreate(addData);
|
||||
}else{
|
||||
} else {
|
||||
var res = await scheduleUpdate(addData);
|
||||
}
|
||||
console.log(res)
|
||||
|
Loading…
x
Reference in New Issue
Block a user