1
This commit is contained in:
parent
4bc0f47b97
commit
6ee2cda0f1
@ -25,7 +25,8 @@
|
|||||||
</template>
|
</template>
|
||||||
</lay-table>
|
</lay-table>
|
||||||
</lay-card>
|
</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-container fluid="true" style="padding: 20px">
|
||||||
<lay-form :model="addData">
|
<lay-form :model="addData">
|
||||||
<lay-form-item required label-width="150px" label="考评类型" prop="score_type">
|
<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-input-number v-model="addData.time"></lay-input-number>
|
||||||
</lay-form-item>
|
</lay-form-item>
|
||||||
<lay-form-item required label-width="150px" label="考评开始时间" prop="single_score_min">
|
<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>
|
||||||
<lay-form-item required label-width="150px" label="考评结束时间" prop="single_score_min">
|
<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>
|
||||||
<lay-form-item required label-width="150px" label="规则描述" prop="scoring_criteria">
|
<lay-form-item required label-width="150px" label="规则描述" prop="scoring_criteria">
|
||||||
<lay-textarea placeholder="请输入" v-model="addData.rule_description"></lay-textarea>
|
<lay-textarea placeholder="请输入" v-model="addData.rule_description"></lay-textarea>
|
||||||
@ -59,12 +78,85 @@
|
|||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {
|
import {
|
||||||
|
homeGetHierarchicalData,
|
||||||
|
menuData,
|
||||||
scheduleCreate, scheduleDelete,
|
scheduleCreate, scheduleDelete,
|
||||||
scheduleList, scheduleUpdate,
|
scheduleList, scheduleUpdate, userGroupData
|
||||||
} from '../../api/module/home'
|
} from '../../api/module/home'
|
||||||
import {ref, watch, onMounted, reactive} from 'vue'
|
import {ref, watch, onMounted, reactive} from 'vue'
|
||||||
import {layer} from '@layui/layer-vue'
|
import {layer} from '@layui/layer-vue'
|
||||||
import {verificationImg} from "@/api/module/commone";
|
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 dataSource6 = ref([]);
|
||||||
const addShow = ref(false)
|
const addShow = ref(false)
|
||||||
@ -77,12 +169,47 @@ const addData = reactive({
|
|||||||
end_time: null,
|
end_time: null,
|
||||||
time: 0,
|
time: 0,
|
||||||
rule_description: '',
|
rule_description: '',
|
||||||
|
group_id: [],
|
||||||
|
rules: []
|
||||||
})
|
})
|
||||||
const categoryList= ref();
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getHierarchicalData()
|
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 = () => {
|
const getHierarchicalData = () => {
|
||||||
scheduleList({}).then((res) => {
|
scheduleList({}).then((res) => {
|
||||||
console.log(res)
|
console.log(res)
|
||||||
@ -175,6 +302,8 @@ const addButton = ref([
|
|||||||
text: "确认",
|
text: "确认",
|
||||||
callback: async () => {
|
callback: async () => {
|
||||||
console.log(addData);
|
console.log(addData);
|
||||||
|
console.log(selectedIds.value)
|
||||||
|
return;
|
||||||
if (addData.evaluation_type == null || addData.evaluation_type == '') {
|
if (addData.evaluation_type == null || addData.evaluation_type == '') {
|
||||||
layer.msg('请选择考评类型!', {icon: 2, time: 1000})
|
layer.msg('请选择考评类型!', {icon: 2, time: 1000})
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user