fix : 修复新增需求征集所属公司选择弹框
This commit is contained in:
@@ -4,10 +4,10 @@
|
||||
:destroy-on-close="true">
|
||||
<div class="picker">
|
||||
<div class="candidate" v-loading="loading">
|
||||
<el-input v-model="filterText" @change="getList(1)"
|
||||
clearable placeholder="输入部门/昵称进行搜索">
|
||||
<el-input v-model="filterText" @change="getList()"
|
||||
clearable placeholder="输入部门进行搜索">
|
||||
<template #append>
|
||||
<el-button @click="getList(1)">搜索</el-button>
|
||||
<el-button @click="getList()">搜索</el-button>
|
||||
</template>
|
||||
</el-input>
|
||||
<!-- 人员选择 -->
|
||||
@@ -15,26 +15,12 @@
|
||||
<el-scrollbar style="height:90%;">
|
||||
<div class="tree">
|
||||
<el-tree :data="dataList" ref="tree" :props="defaultProps" empty-text="" node-key="value"
|
||||
:default-expanded-keys="expandedKeys" lazy accordion
|
||||
@node-click="handleChange" @node-expand="handleChange">
|
||||
default-expand-all :show-checkbox="showCheckbox" highlight-current :default-checked-keys="defaultChecked"
|
||||
:check-strictly="multiple===false" @node-click="(node,check)=>handle(node,check)"
|
||||
@check-change="handleChange" :filter-node-method="filterNode">
|
||||
<template #default="{ node, data }">
|
||||
<div class="tree-node">
|
||||
<div v-if="data.type === 0" style="display: flex;align-items: center;padding: 3px 0">
|
||||
<el-icon>
|
||||
<UserFilled/>
|
||||
</el-icon>
|
||||
{{ node.label }}-{{ data.companyName }}
|
||||
</div>
|
||||
<div v-else-if="data.type ===1">
|
||||
<el-icon>
|
||||
<UserFilled/>
|
||||
</el-icon>
|
||||
{{ node.label }}
|
||||
</div>
|
||||
<div v-else>
|
||||
<el-icon>
|
||||
<FolderOpened/>
|
||||
</el-icon>
|
||||
<div style="display: flex;align-items: center;padding: 3px 0">
|
||||
{{ node.label }}
|
||||
</div>
|
||||
</div>
|
||||
@@ -51,8 +37,9 @@
|
||||
<div class="org-items">
|
||||
<el-empty :image-size="100" description="请点击左侧列表选择数据" v-show="selectList.length === 0"/>
|
||||
<div v-for="(selectItem, selectIndex) in selectList" :key="selectIndex" class="org-item">
|
||||
{{ selectItem.name }}-{{ selectItem.companyName }}
|
||||
<el-icon @click="noSelected(selectItem)" size="20" style="margin-left: 10px;cursor: pointer;">
|
||||
{{ selectItem.label }}
|
||||
<el-icon @click="noSelected(selectItem)" size="20" style="margin-left: 10px;cursor: pointer;"
|
||||
v-if="showCheckbox===false">
|
||||
<CircleClose/>
|
||||
</el-icon>
|
||||
</div>
|
||||
@@ -67,9 +54,8 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import {computed, defineProps, defineExpose} from "vue";
|
||||
import {ElMessageBox} from "element-plus";
|
||||
import {getMosrDept} from "@/api/workflow/process-user";
|
||||
import {getSubCompOpt} from "@/api/user/user";
|
||||
|
||||
const props = defineProps({
|
||||
value: {
|
||||
@@ -93,28 +79,22 @@ let selectItem = reactive({
|
||||
type: -1,
|
||||
value: "0"
|
||||
});
|
||||
const activeNames = ref(["1"]);
|
||||
const visible = ref(false);
|
||||
const loading = ref(false);
|
||||
const title = ref("请选择");
|
||||
const selectList = ref([]);
|
||||
const filterText = ref("");
|
||||
const dataList = ref([]);
|
||||
const defaultChecked = ref([]);
|
||||
const tree = ref([]);
|
||||
const isSearch = ref(false);
|
||||
const expandedKeys = ref([]);
|
||||
const defaultProps = {
|
||||
value: "value",
|
||||
label: "name",
|
||||
children: "children",
|
||||
isLeaf: (data) => {
|
||||
if (data.type === 0) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
label: "label",
|
||||
children: "children"
|
||||
};
|
||||
const emit = defineEmits();
|
||||
|
||||
const _value = computed({
|
||||
get() {
|
||||
return props.value;
|
||||
@@ -125,135 +105,102 @@ const _value = computed({
|
||||
});
|
||||
|
||||
watch(() => filterText.value, (newVal) => {
|
||||
console.log('filterText.value', newVal)
|
||||
filterText.value = newVal
|
||||
tree.value.filter(newVal);
|
||||
});
|
||||
|
||||
const getList = (flag) => {
|
||||
let params = {}
|
||||
if (flag === 1) {
|
||||
isSearch.value = true;
|
||||
params = {
|
||||
chooseId: 0,
|
||||
chooseName: filterText.value
|
||||
}
|
||||
selectItem = {
|
||||
type: -1,
|
||||
value: "0"
|
||||
};
|
||||
} else {
|
||||
|
||||
params = {
|
||||
chooseId: radio.value,
|
||||
chooseName: filterText.value
|
||||
}
|
||||
}
|
||||
getMosrDept(params).then(res => {
|
||||
console.log('selectItem.type', selectItem.type)
|
||||
// if (res.data) {
|
||||
if (selectItem.type === -1) {
|
||||
dataList.value = res.data;
|
||||
} else if (selectItem.type === 1) {
|
||||
selectItem.children = res.data;
|
||||
if (res.data.length === 0) {
|
||||
selectItem.children = [{
|
||||
type: 1,
|
||||
name: '暂无数据'
|
||||
}]
|
||||
}
|
||||
} else if (selectItem.type === 2) {
|
||||
selectItem.children = res.data;
|
||||
}
|
||||
// }
|
||||
const getList = () => {
|
||||
getSubCompOpt().then(res => {
|
||||
dataList.value = res.data;
|
||||
});
|
||||
};
|
||||
|
||||
const setData = (source) => {
|
||||
// for (let item of source) {
|
||||
// this.$set(item, "value", selectItem.value + "-" + item.id)
|
||||
// }
|
||||
return source;
|
||||
};
|
||||
|
||||
//通过关键字过滤树节点
|
||||
// filterNode(value, data) {
|
||||
// if (!value) return true;
|
||||
// return data.name.indexOf(value) !== -1;
|
||||
// },
|
||||
//用于用户选择
|
||||
const showUserPicker = () => {
|
||||
selectItem = {
|
||||
type: -1,
|
||||
value: "0"
|
||||
};
|
||||
dataList.value = [];
|
||||
selectList.value = []
|
||||
chooseId.value = 0;
|
||||
radio.value = 0;
|
||||
visible.value = true;
|
||||
expandedKeys.value = [];
|
||||
getList();
|
||||
const filterNode = (value, data) => {
|
||||
//通过关键字过滤树节点
|
||||
if (!value) return true;
|
||||
return data.label.indexOf(value) !== -1;
|
||||
};
|
||||
const handleChange = (item, data) => {
|
||||
selectItem = item;
|
||||
if (isSearch.value && item.type !== 0) {
|
||||
filterText.value = ""
|
||||
radio.value = item.id;
|
||||
getList();
|
||||
return;
|
||||
} else if (!isSearch.value) {
|
||||
//渲染子节点用户或部门及用户数据
|
||||
if (data.expanded) {
|
||||
if (expandedKeys.value.indexOf(item.value) === -1) {
|
||||
expandedKeys.value.push(item.value);
|
||||
if (item.type !== 0) {
|
||||
radio.value = item.id;
|
||||
getList();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if(expandedKeys.value.indexOf(item.value)==-1){
|
||||
// expandedKeys.value.push(item.value);
|
||||
// }else {
|
||||
// if (data.expanded === true) {
|
||||
// if (item.type !== 0) {
|
||||
// chooseId.value = item.id;
|
||||
// getList();
|
||||
// return;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
//仅选择用户
|
||||
if (item.type === 0) {
|
||||
//用于用户选择
|
||||
const show = () => {
|
||||
//用于弹开部门选择
|
||||
visible.value = true;
|
||||
selectList.value=_value.value
|
||||
defaultChecked.value=_value.value.map(item=>item.value)
|
||||
getList()
|
||||
};
|
||||
const handleChange = (data, checked) => {
|
||||
// 左侧有选择框
|
||||
if (props.showCheckbox) {
|
||||
// 左侧有选择框 + 多选
|
||||
if (props.multiple) {
|
||||
//不添加重复的数据到右边
|
||||
for (let i = 0; i < selectList.value.length; i++) {
|
||||
if (selectList.value[i].id === item.id) {
|
||||
if (selectList.value[i].value === data.value) {
|
||||
selectList.value.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
selectList.value.push(item);
|
||||
} else {
|
||||
selectList.value = [item];
|
||||
if (checked) {
|
||||
if (data.children === undefined) {
|
||||
selectList.value.push(data);
|
||||
}
|
||||
} else if (data === "1") {
|
||||
tree.value.setCheckedKeys([]);
|
||||
selectList.value = [];
|
||||
}
|
||||
} else {// 左侧有选择框 + 单选
|
||||
//不添加重复的数据到右边
|
||||
for (let i = 0; i < selectList.value.length; i++) {
|
||||
if (selectList.value[i].value === data.value) {
|
||||
selectList.value.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (checked) {
|
||||
tree.value.setCheckedNodes([data]);
|
||||
// this.$refs.tree.setCheckedKeys([]);
|
||||
selectList.value = [data];
|
||||
} else if (data === "1") {
|
||||
selectList.value = [];
|
||||
tree.value.setCheckedKeys([]);
|
||||
}
|
||||
}
|
||||
}
|
||||
// _value = selectList.value
|
||||
};
|
||||
|
||||
const handle = (node, check) => {
|
||||
if (check.isLeaf !== false) {
|
||||
if (props.multiple) {
|
||||
//不添加重复的数据到右边
|
||||
for (let i = 0; i < selectList.value.length; i++) {
|
||||
if (selectList.value[i].value === node.value) {
|
||||
selectList.value.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
check.checked = true;
|
||||
selectList.value.push(node);
|
||||
} else {
|
||||
check.checked = true;
|
||||
selectList.value = [node];
|
||||
}
|
||||
}
|
||||
// _value.value = selectList.value
|
||||
};
|
||||
const noSelected = (selectItem) => {
|
||||
//右侧的x
|
||||
//左侧无选择框时,右侧显示×
|
||||
for (let i = 0; i < selectList.value.length; i++) {
|
||||
if (selectList.value[i].value === selectItem.value) {
|
||||
selectList.value.splice(i, 1);
|
||||
tree.value.setCheckedKeys(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
selectItem.selected = false;
|
||||
if (props.showCheckbox) {
|
||||
// 左侧有选择框 + 单选
|
||||
if (props.multiple === false) {
|
||||
tree.value.setCheckedKeys([]);
|
||||
}
|
||||
}
|
||||
};
|
||||
const clearSelected = () => {
|
||||
//清空
|
||||
@@ -262,7 +209,11 @@ const clearSelected = () => {
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
selectList.value = [];
|
||||
if (!props.showCheckbox) {
|
||||
selectList.value = [];
|
||||
} else {
|
||||
handleChange("1");
|
||||
}
|
||||
});
|
||||
};
|
||||
const selectConfirm = () => {
|
||||
@@ -272,8 +223,9 @@ const selectConfirm = () => {
|
||||
visible.value = false;
|
||||
};
|
||||
defineExpose({
|
||||
showUserPicker
|
||||
show
|
||||
});
|
||||
getList()
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
@@ -5,7 +5,7 @@ export const matterTree = (array,data, id) => {
|
||||
array.push(data[i].label);
|
||||
}
|
||||
if (data[i].children && data[i].children.length > 0) {
|
||||
matterTree(data[i].children)
|
||||
matterTree(array,data[i].children,id)
|
||||
}
|
||||
}
|
||||
return array;
|
||||
|
||||
@@ -34,9 +34,10 @@
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="所属公司" prop="companyIds" class="tree-select">
|
||||
<!-- <el-button @click="showCompany">请选择</el-button>-->
|
||||
<el-tree-select v-model="formData.companyIds" :data="companyOption"
|
||||
filterable clearable :check-strictly="true" multiple/>
|
||||
<div>{{ getName(companyList) }}</div>
|
||||
<el-button @click="showCompany">{{companyList.length===0?'请选择':'更改'}}</el-button>
|
||||
<!-- <el-tree-select v-model="formData.companyIds" :data="companyOption"-->
|
||||
<!-- filterable clearable :check-strictly="true" multiple/>-->
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
@@ -93,6 +94,7 @@
|
||||
<el-button color="#DED0B2" v-else @click="handleResubmit">重新提交</el-button>
|
||||
<el-button @click="handleBack">返回</el-button>
|
||||
</div>
|
||||
<company-picker :multiple="true" ref="companyRef" title="请选择所属公司" v-model:value="companyList" @ok="selected"/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -109,12 +111,15 @@ import {
|
||||
} from "@/api/project-demand/index.js";
|
||||
import FileUpload from "@/components/FileUpload.vue";
|
||||
import ProcessDiagramViewer from '@/views/workflow/common/ProcessDiagramViewer.vue';
|
||||
import {ElMessageBox, ElNotification} from "element-plus";
|
||||
import {ElNotification} from "element-plus";
|
||||
import {useRoute, useRouter} from 'vue-router'
|
||||
import {getSubCompOpt} from '@/api/user/user.js'
|
||||
import {useTagsView} from '@/stores/tagsview.js'
|
||||
import {getFundOption} from "@/api/special-fund";
|
||||
import CompanyPicker from "@/components/DetailComponent/CompanyPicker.vue";
|
||||
|
||||
const companyRef = ref()
|
||||
const companyList = ref([])
|
||||
const changeDiagram = ref(false)
|
||||
const tagsViewStore = useTagsView()
|
||||
const authStore = useAuthStore()
|
||||
@@ -124,7 +129,7 @@ const demandForm = ref()
|
||||
const dateValue = ref()
|
||||
const formData = ref({
|
||||
requirementName: '',
|
||||
companyIds: '',
|
||||
companyIds: [],
|
||||
collectType: '',
|
||||
deadline: '',
|
||||
collectExplain: '',
|
||||
@@ -200,7 +205,24 @@ const tableConfig = reactive({
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
const getName = (list) => {
|
||||
return list.map(item => item.label).join(',')
|
||||
}
|
||||
const showCompany = () => {
|
||||
companyRef.value.show()
|
||||
}
|
||||
const selected = (select) => {
|
||||
let companyInfoList = []
|
||||
for (let val of select) {
|
||||
let companyInfo = {
|
||||
value: val.value,
|
||||
label: val.label
|
||||
}
|
||||
companyInfoList.push(companyInfo)
|
||||
formData.value.companyIds.push(val.value)
|
||||
}
|
||||
companyList.value = companyInfoList
|
||||
}
|
||||
const checkFormPrem = (formKey) => {
|
||||
if (formPermMap.value.hasOwnProperty(formKey)) {
|
||||
let formItem = formPermMap.value[formKey];
|
||||
@@ -208,7 +230,6 @@ const checkFormPrem = (formKey) => {
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const handleDownload = (row) => {
|
||||
@@ -291,6 +312,15 @@ const init = async () => {
|
||||
})
|
||||
}
|
||||
const submitParam = (item) => {
|
||||
console.log('item..',item.companyIds)
|
||||
if(item.companyIds.length===0){
|
||||
ElNotification({
|
||||
title: '提示',
|
||||
message: '请选择所属公司',
|
||||
type: 'error'
|
||||
})
|
||||
return;
|
||||
}
|
||||
let files = []
|
||||
item.fileList.forEach(item => {
|
||||
let obj = {
|
||||
|
||||
Reference in New Issue
Block a user