组织机构树修改

This commit is contained in:
aoli.qu 2022-02-25 16:39:11 +08:00
parent 9a0519601f
commit 756e8f1a9b
8 changed files with 192 additions and 165 deletions

View File

@ -1,3 +1,4 @@
import _ from 'lodash'
export function timeFix() {
const time = new Date()
const hour = time.getHours()
@ -67,6 +68,12 @@ export function removeLoadingAnimate(id = '', timeout = 1500) {
}
export function listToTree(list, tree, parentId) {
list.map(item => {
const index = _.findIndex(list, ['id', item.pid])
if(index === -1){
item.pid = 0
}
})
list.forEach(item => {
if (item.pid === parentId) {
const child = {

View File

@ -11,7 +11,13 @@
<a-col :md="5" :sm="24" class="borderTop ">
<div>
<div v-if="this.orgTree != ''">
<a-tree :treeData="orgTree" v-if="orgTree.length" @select="handleClick" :defaultExpandAll="true" :defaultExpandedKeys="defaultExpandedKeys" :replaceFields="replaceFields" />
<a-tree
:treeData="orgTree"
v-if="orgTree.length"
@select="handleClick"
:defaultExpandAll="true"
:expandedKeys="expandedKeys"
:replaceFields="replaceFields" />
</div>
<div v-else>
<a-empty :image="simpleImage" />
@ -63,7 +69,7 @@ export default {
// import使
components: { STable, SearchCom },
props: {},
data() {
data () {
//
return {
queryParam: { orgId: '', orgType: 1, type: '' },
@ -75,7 +81,7 @@ export default {
//
simpleImage: Empty.PRESENTED_IMAGE_SIMPLE,
orgTree: [],
defaultExpandedKeys: [],
expandedKeys: [],
treeLoading: true,
replaceFields: {
children: 'children',
@ -91,25 +97,35 @@ export default {
{ title: '部门信息', width: 'auto', align: 'center', dataIndex: 'bmOrgName', key: 'bmOrgName' },
{ title: '证书名称', width: 'auto', align: 'center', dataIndex: 'name', key: 'name' },
{
title: '证书类型', width: 'auto', align: 'center', dataIndex: 'type', key: 'type', customRender: (text, record, index) => {
let textStr = '';
this.queryOptions[0].options.forEach(element => { if (element.value.toString() === text) textStr = element.name; });
return textStr;
title: '证书类型',
width: 'auto',
align: 'center',
dataIndex: 'type',
key: 'type',
customRender: (text, record, index) => {
let textStr = ''
this.queryOptions[0].options.forEach(element => { if (element.value.toString() === text) textStr = element.name })
return textStr
}
},
{ title: '注册日期', width: 'auto', align: 'center', dataIndex: 'registerDate', key: 'registerDate' },
{ title: '失效日期', width: 'auto', align: 'center', dataIndex: 'validityEndDate', key: 'validityEndDate' },
{
title: '证书状态', width: '80px', align: 'center', dataIndex: 'state', key: 'state', customRender: (text, record, index) => {
let textStr = '';
this.state.forEach(element => { if (element.value.toString() === text) textStr = element.name; });
return textStr;
title: '证书状态',
width: '80px',
align: 'center',
dataIndex: 'state',
key: 'state',
customRender: (text, record, index) => {
let textStr = ''
this.state.forEach(element => { if (element.value.toString() === text) textStr = element.name })
return textStr
}
},
{ title: '操作', width: '70px', key: 'operation', align: 'center', scopedSlots: { customRender: 'action' } }
],
loadData: null,
};
loadData: null
}
},
// data
computed: {},
@ -118,112 +134,111 @@ export default {
//
methods: {
//
getOrgTree() {
getOrgTree () {
orgList({ orgType: this.queryParam.orgType }).then(res => {
this.treeLoading = false
if (!res.code === 200 || !res.data.length) {
return
}
this.defaultExpandedKeys = []
this.expandedKeys = []
this.orgTree = listToTree(res.data, [], 0)
this.queryParam.orgId = this.orgTree[0].id
for (var item of this.orgTree) {
if (item.pid === 0) {
this.defaultExpandedKeys.push(item.id)
}
}
//
this.orgTree.forEach(item => {
this.expandedKeys.push(item.id)
})
if (!this.loadData) this.loadData = parameter => { return getArchivesCertificatelist(Object.assign(parameter, this.queryParam)).then(res => { return res }) };
else this.handleRefresh();
});
if (!this.loadData) this.loadData = parameter => { return getArchivesCertificatelist(Object.assign(parameter, this.queryParam)).then(res => { return res }) }
else this.handleRefresh()
})
},
//
dictionaryDropDown() {
dictionaryDropDown () {
//
dictionaryDropDown({ dictionaryCode: '0001' }).then((res) => {
this.queryOptions[0].options = res.data;
this.queryOptions[0].options = res.data
})
//
dictionaryDropDown({ dictionaryCode: '0010' }).then((res) => {
this.state = res.data;
this.state = res.data
})
},
//
editCertificateType() {
this.$router.push({ path: '/archives/certificate/CertificateType', query: {} });
editCertificateType () {
this.$router.push({ path: '/archives/certificate/CertificateType', query: {} })
},
//
handleRefresh() {
handleRefresh () {
this.$refs.table.refresh(true)
},
//
changeOrgType() {
this.queryParam.orgType = this.queryParam.orgType === 1 ? 2 : 1;
this.getOrgTree();
changeOrgType () {
this.queryParam.orgType = this.queryParam.orgType === 1 ? 2 : 1
this.getOrgTree()
// this.handleClick();
},
//
handleClick(e) {
handleClick (e) {
this.queryParam.orgId = e.toString()
this.$refs.table.refresh(true)
},
//
editPersonCertificate(record) {
editPersonCertificate (record) {
this.$router.push({
path: '/archives/certificate/EditCertificate', query: {
path: '/archives/certificate/EditCertificate',
query: {
certificateId: record.id
}
});
})
},
//
exportPersonCertificate(record) {
exportPersonCertificate (record) {
exportCertificate({ id: record.id }).then(res => {
downloadExportFile(res.data);
});
downloadExportFile(res.data)
})
},
//
delPersonCertificate(record) {
delPersonCertificate (record) {
delCertificate({ id: record.id }).then(res => {
this.$message.success("删除证书成功!");
this.$message.success('删除证书成功!')
this.$refs.table.refresh(true)
});
})
}
},
// - 访this
created() {
created () {
//
this.getOrgTree();
this.getOrgTree()
//
this.dictionaryDropDown();
this.dictionaryDropDown()
},
// - 访DOM
mounted() { },
mounted () { },
// -
beforeCreate() { },
beforeCreate () { },
// -
beforeMount() { },
beforeMount () { },
// -
beforeUpdate() { },
beforeUpdate () { },
// -
updated() { },
updated () { },
// -
beforeDestroy() { },
beforeDestroy () { },
// -
destroyed() { },
destroyed () { },
// keep-alive
activated() { }
};
activated () { }
}
</script>
<style scoped>
@ -233,4 +248,4 @@ export default {
.borderRight {
border-right: 1px solid #e8e8e8;
}
</style>
</style>

View File

@ -11,9 +11,9 @@
:onLoadData="orgTree"
v-if="orgTree.length"
@select="handleClick"
:defaultExpandAll="true"
:defaultExpandedKeys="defaultExpandedKeys"
:defaultSelectedKeys="defaultSelectedKeys"
:defaultExpandAll="false"
:expandedKeys="expandedKeys"
:defaultSelectedKeys="selectedKeys"
:replaceFields="replaceFields" />
</div>
<div v-else>
@ -60,8 +60,8 @@
v-if="orgTree.length"
@select="handleClick"
:defaultExpandAll="true"
:defaultExpandedKeys="defaultExpandedKeys"
:defaultSelectedKeys="defaultSelectedKeys"
:expandedKeys="expandedKeys"
:defaultSelectedKeys="selectedKeys"
:replaceFields="replaceFields" />
</div>
<div v-else>
@ -86,8 +86,8 @@
</a-form>
</div>
<div class="table-operator">
<a-button @click="changeSort(1)" ref="toFocus">按累计学时排序</a-button>
<a-button @click="changeSort(2)">按年度学时排序</a-button>
<a-button @click="changeSort(1)" ref="toFocus">按累计学时排序</a-button>
<a-button @click="changeSort(2)">按年度学时排序</a-button>
</div>
<s-table
@ -104,8 +104,8 @@
<a-divider>前十统计排名</a-divider>
<div class="table-operator">
<a-button @click="changeTopType(1)">公司排名年度学时前十统计</a-button>
<a-button @click="changeTopType(2)">公司累计学时学时前十统计</a-button>
<a-button @click="changeTopType(1)">公司排名年度学时前十统计</a-button>
<a-button @click="changeTopType(2)">公司累计学时学时前十统计</a-button>
</div>
<s-table
v-show="topType==1"
@ -180,7 +180,7 @@
loadData1: parameter => {
return dataOrgStatistics(Object.assign(parameter, this.queryParam)).then((res) => {
const data = res.rows
data.forEach(function(val){
data.forEach(function (val) {
val.trainRate = val.trainRate + '%'
})
return res
@ -207,7 +207,7 @@
{
title: '累计学时',
dataIndex: 'sumClassHour'
},
}
],
loadData2: parameter => {
return dataPersonalStatistics(Object.assign(parameter, this.queryParam)).then((res) => {
@ -221,7 +221,7 @@
key: 'index',
align: 'center',
width: 60,
customRender: (text,record,index) => `${index+1}`,
customRender: (text, record, index) => `${index + 1}`
},
{
title: '姓名',
@ -256,7 +256,7 @@
key: 'index',
align: 'center',
width: 60,
customRender: (text,record,index) => `${index+1}`,
customRender: (text, record, index) => `${index + 1}`
},
{
title: '姓名',
@ -287,8 +287,8 @@
orgTree: [],
selectedRowKeys: [],
selectedRows: [],
defaultExpandedKeys: [],
defaultSelectedKeys: [],
expandedKeys: [],
selectedKeys: [],
treeLoading: true,
simpleImage: Empty.PRESENTED_IMAGE_SIMPLE,
replaceFields: {
@ -314,7 +314,7 @@
this.$refs.table1.refresh(true)
}
if (key === '2') {
this.$nextTick(()=>{
this.$nextTick(() => {
// columns
this.$refs.table2.refresh(true)
this.$refs.toFocus.$el.focus()
@ -329,16 +329,15 @@
if (!res.code === 200 || !res.data.length) {
return
}
this.defaultExpandedKeys = []
this.defaultSelectedKeys = []
this.expandedKeys = []
this.selectedKeys = []
this.orgTree = listToTree(res.data, [], 0)
this.orgId = this.orgTree[0].id
this.defaultSelectedKeys.push(this.orgId)
for (var item of this.orgTree) {
if (item.pid === 0) {
this.defaultExpandedKeys.push(item.id)
}
}
this.selectedKeys.push(this.orgId)
//
this.orgTree.forEach(item => {
this.expandedKeys.push(item.id)
})
})
},
/**

View File

@ -109,11 +109,10 @@ export default {
return
}
const orgTree = listToTree(res.data, [], rootParentId)
for (var item of orgTree) {
if (item.pid === 0) {
this.expandedKeys.push(item.id)
}
}
//
orgTree.forEach(item => {
this.expandedKeys.push(item.id)
})
generateList(orgTree)
this.orgList = orgTree
})

View File

@ -62,7 +62,7 @@
<a-col :md="12" :sm="24">
<a-form :form="form">
<a-form-item label="年龄" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
<a-input readOnly v-decorator="['age']" />
<a-input disabled v-decorator="['age']" />
</a-form-item>
</a-form>
</a-col>
@ -72,7 +72,7 @@
<a-form :form="form">
<a-form-item label="性别" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-radio-group
readOnly
disabled
v-decorator="['sex', { rules: [{ required: true, message: '请选择性别!' }] }]"
>
<a-radio :value="1"></a-radio>

View File

@ -9,9 +9,9 @@
:onLoadData="orgTree"
v-if="orgTree.length"
@select="handleClick"
:defaultExpandAll="true"
:defaultExpandedKeys="defaultExpandedKeys"
:defaultSelectedKeys="defaultSelectedKeys"
:defaultExpandAll="false"
:expandedKeys="expandedKeys"
:defaultSelectedKeys="selectedKeys"
:replaceFields="replaceFields" />
</div>
<div v-else>
@ -165,7 +165,7 @@ export default {
},
{
title: '年度学时要求',
dataIndex: 'classHours'
dataIndex: 'planClassHour'
},
{
title: '注册时间',
@ -175,6 +175,7 @@ export default {
],
// Promise
loadData: parameter => {
if (!this.orgId) return []
return personPage(Object.assign(parameter, this.queryParam)).then((res) => {
return res
})
@ -182,8 +183,8 @@ export default {
orgTree: [],
selectedRowKeys: [],
selectedRows: [],
defaultExpandedKeys: [],
defaultSelectedKeys: [],
expandedKeys: [],
selectedKeys: [],
treeLoading: true,
simpleImage: Empty.PRESENTED_IMAGE_SIMPLE,
replaceFields: {
@ -226,26 +227,28 @@ export default {
async getOrgTree () {
await orgList({ orgType: this.orgType }).then(res => {
this.treeLoading = false
this.expandedKeys = []
this.selectedKeys = []
if (!res.code === 200 || !res.data.length) {
this.orgTree = []
return
}
this.defaultExpandedKeys = []
this.defaultSelectedKeys = []
this.orgTree = listToTree(res.data, [], rootParentId)
this.orgId = this.orgTree[0].id
this.defaultSelectedKeys.push(this.orgId)
for (var item of this.orgTree) {
if (item.pid === 0) {
this.defaultExpandedKeys.push(item.id)
}
}
this.selectedKeys.push(this.orgId)
//
this.orgTree.forEach(item => {
this.expandedKeys.push(item.id)
})
this.handleClick(this.orgId)
})
},
async changeOrgType () {
this.orgType = this.orgType === 1 ? 2 : 1
await this.getOrgTree()
// 使asyncawait orgTree
this.handleClick(this.orgId)
// this.handleClick(this.orgId)
},
/**
* 重置密码

View File

@ -12,9 +12,9 @@
:treeData="orgTree"
v-if="orgTree.length"
@select="onSelect"
:defaultExpandAll="true"
:defaultExpandedKeys="defaultExpandedKeys"
:defaultSelectedKeys="defaultSelectedKeys"
:defaultExpandAll="false"
:expandedKeys="expandedKeys"
:defaultSelectedKeys="selectedKeys"
:replaceFields="replaceFields"
>
<a-icon slot="switcherIcon" type="down" />
@ -105,8 +105,8 @@ export default {
replaceFields: { children: 'children', title: 'name', key: 'id', value: 'id' },
expandedKeys: [],
autoExpandParent: true,
defaultExpandedKeys: [],
defaultSelectedKeys: [],
expandedKeys: [],
selectedKeys: [],
orgTree: [],
orgId: this.$route.query.orgId,
orgType: 2,
@ -227,16 +227,15 @@ export default {
return
}
var rootParentId = res.data[0].pid
this.defaultExpandedKeys = []
this.defaultSelectedKeys = []
this.expandedKeys = []
this.selectedKeys = []
this.orgTree = listToTree(res.data, [], rootParentId)
this.orgId = this.orgTree[0].id
this.defaultSelectedKeys.push(this.orgId)
for (var item of this.orgTree) {
if (item.pid === 0) {
this.defaultExpandedKeys.push(item.id)
}
}
this.selectedKeys.push(this.orgId)
//
this.orgTree.forEach(item => {
this.expandedKeys.push(item.id)
})
})
}
},

View File

@ -10,7 +10,13 @@
<a-col :span="4" id="tree">
<a-page-header title="单位列表" sub-title="" />
<div v-if="this.orgTree != ''">
<a-tree :treeData="orgTree" v-if="orgTree.length" @select="onSelect" :defaultExpandAll="true" :defaultExpandedKeys="defaultExpandedKeys" :replaceFields="replaceFields">
<a-tree
:treeData="orgTree"
v-if="orgTree.length"
@select="onSelect"
:defaultExpandAll="false"
:expandedKeys="expandedKeys"
:replaceFields="replaceFields">
<a-icon slot="switcherIcon" type="down" />
</a-tree>
</div>
@ -71,14 +77,14 @@ export default {
// import使
components: {
orgList,
STable,
STable
},
props: {
projectForm: {
type: Object,
},
type: Object
}
},
data() {
data () {
//
return {
form: this.projectForm,
@ -87,7 +93,7 @@ export default {
replaceFields: { children: 'children', title: 'name', key: 'id', value: 'id' },
expandedKeys: [],
autoExpandParent: true,
defaultExpandedKeys: [],
expandedKeys: [],
selectedRowKeys: [],
selectedRows: this.projectForm.projectPersonLists || [],
orgTree: [],
@ -96,28 +102,28 @@ export default {
columns: [
{ title: '序号', key: 'id', dataIndex: 'id', width: 60, scopedSlots: { customRender: 'serial' } },
{ title: '姓名', dataIndex: 'name' },
{ title: '用户名', dataIndex: 'userName' },
{ title: '用户名', dataIndex: 'userName' }
],
//
//
loadData: (parameter) => {
return personPage(Object.assign(parameter, this.queryParam)).then((res) => {
return res
})
},
}
}
},
// data
computed: {
hasSelected() {
hasSelected () {
return this.selectedRowKeys.length > 0
},
}
},
// data
watch: {},
//
methods: {
//
toNext() {
//
toNext () {
this.form.projectPersonLists = this.selectedRows
this.form.personIds = this.selectedRowKeys
if (this.form.personIds.length > 0) {
@ -126,35 +132,35 @@ export default {
this.$message.warning('培训人员不能为空')
}
},
//
toPrev() {
//
toPrev () {
this.form.projectPersonLists = this.selectedRows
this.form.personIds = this.selectedRowKeys
this.$emit('prevStep', this.form)
},
/** 表格行选中后触发 */
onSelectChange(selectedRowKeys, selectedRows) {
onSelectChange (selectedRowKeys, selectedRows) {
console.log('selectedRowKeys changed: ', selectedRowKeys)
console.log('选择的表格数据 : ', selectedRows)
this.selectedRowKeys = this.uniqueKeys([...this.selectedRowKeys, ...selectedRowKeys])
this.selectedRows = this.unique([...this.selectedRows, ...selectedRows])
},
//
unique(arr) {
//
unique (arr) {
const res = new Map()
return arr.filter((arr) => !res.has(arr.id) && res.set(arr.id, 1))
},
//key
uniqueKeys(arr) {
// key
uniqueKeys (arr) {
const res = new Map()
return arr.filter((arr) => !res.has(arr) && res.set(arr, 1))
},
//
changeList(item) {
//
changeList (item) {
console.log('列表点击删除列表项 : ', item)
this.selectedRows = this.selectedRows.filter(function (i) {
return i.id != item.item.id
@ -164,78 +170,77 @@ export default {
})
},
//
removeAllSelece() {
//
removeAllSelece () {
this.selectedRowKeys = []
this.selectedRows = []
},
//
onSelect(selectedKey, info) {
//
onSelect (selectedKey, info) {
console.log('selected', selectedKey, info)
this.queryParam.orgId = selectedKey.toString()
this.orgId = selectedKey.toString()
this.$refs.table.refresh(true)
},
//使
onExpand(expandedKeys) {
// 使
onExpand (expandedKeys) {
this.expandedKeys = expandedKeys
this.autoExpandParent = false
},
//
initPersonList() {
//
initPersonList () {
if (this.form.projectPersonLists) {
this.selectedRowKeys = [],
this.form.projectPersonLists.forEach(element => {
this.selectedRowKeys.push(element.id)
});
console.log('初始化的值',this.selectedRowKeys)
})
console.log('初始化的值', this.selectedRowKeys)
}
},
/**
* 获取到机构树展开顶级下树节点考虑到后期数据量变大不建议全部展开
*/
async getOrgTree() {
async getOrgTree () {
await orgList({ orgType: this.orgType }).then((res) => {
this.treeLoading = false
if (!res.code === 200 || !res.data.length) {
return
}
this.defaultExpandedKeys = []
this.expandedKeys = []
this.orgTree = listToTree(res.data, [], rootParentId)
this.orgId = this.orgTree[0].id
for (var item of this.orgTree) {
if (item.pid === 0) {
this.defaultExpandedKeys.push(item.id)
}
}
//
this.orgTree.forEach(item => {
this.expandedKeys.push(item.id)
})
})
},
}
},
// - 访this
created() {
created () {
this.getOrgTree()
this.initPersonList()
},
// - 访DOM
mounted() { },
mounted () { },
// -
beforeCreate() { },
beforeCreate () { },
// -
beforeMount() { },
beforeMount () { },
// -
beforeUpdate() { },
beforeUpdate () { },
// -
updated() { },
updated () { },
// -
beforeDestroy() { },
beforeDestroy () { },
// -
destroyed() { },
destroyed () { },
// keep-alive
activated() { },
activated () { }
}
</script>
<style scoped>
@ -249,4 +254,4 @@ export default {
background-color: bisque;
} */
/* /project/form/ProjectPersonForm.vue */
</style>
</style>