flat: 增加 所属机构

This commit is contained in:
Apcallover
2024-04-17 16:59:33 +08:00
parent 0fb5b70df5
commit 9cb647d53e
8 changed files with 353 additions and 179 deletions

View File

@@ -1,106 +1,114 @@
import request from '@/router/axios'; import request from '@/router/axios';
/*获取人才列表*/ /*获取人才列表*/
export const getList = export const getList =
(current, size, params, groupId) => { (current, size, params, groupId) => {
return request({ return request({
url: '/api/jobslink-api/tenant/talents/list', url: '/api/jobslink-api/tenant/talents/list',
method: 'get', method: 'get',
params: {...params, current, size, groupId} params: {...params, current, size, groupId}
}) })
} }
/*新增人才*/ /*新增人才*/
export const add = export const add =
(row) => { (row) => {
return request( return request(
{url: '/api/jobslink-api/tenant/talents/save', method: 'post', data: row}) {url: '/api/jobslink-api/tenant/talents/save', method: 'post', data: row})
} }
/*编辑人才*/ /*编辑人才*/
export const update = export const update =
(row) => { (row) => {
return request({ return request({
url: '/api/jobslink-api/tenant/talents/tenant/update', url: '/api/jobslink-api/tenant/talents/tenant/update',
method: 'post', method: 'post',
data: row data: row
}) })
} }
/*删除人才*/ /*删除人才*/
export const remove = export const remove =
(ids) => { (ids) => {
return request({ return request({
url: '/api/jobslink-api/tenant/talents/remove', url: '/api/jobslink-api/tenant/talents/remove',
method: 'post', method: 'post',
params: {ids} params: {ids}
}) })
} }
/*人才详情*/ /*人才详情*/
export const detail = export const detail =
(id) => { (id) => {
return request({ return request({
url: '/api/jobslink-api/tenant/talents/detail', url: '/api/jobslink-api/tenant/talents/detail',
method: 'get', method: 'get',
params: {id} params: {id}
}) })
} }
/*获取分组*/ /*获取分组*/
export const getDept = export const getDept =
(params = {}) => { (params = {}) => {
return request({ return request({
url: '/api/jobslink-api/tenant/talents/group/listAll', url: '/api/jobslink-api/tenant/talents/group/listAll',
method: 'get', method: 'get',
params params
}) })
} }
/*新建分组*/ /*新建分组*/
export const addDept = export const addDept =
(row) => { (row) => {
return request({ return request({
url: '/api/jobslink-api/tenant/talents/group/save', url: '/api/jobslink-api/tenant/talents/group/save',
method: 'post', method: 'post',
data: row data: row
}) })
} }
/*编辑分组*/ /*编辑分组*/
export const updateDept = export const updateDept =
(row) => { (row) => {
return request({ return request({
url: '/api/jobslink-api/tenant/talents/group/update', url: '/api/jobslink-api/tenant/talents/group/update',
method: 'post', method: 'post',
data: row data: row
}) })
} }
/*删除分组*/ /*删除分组*/
export const removeDept = export const removeDept =
(ids) => { (ids) => {
return request({ return request({
url: '/api/jobslink-api/tenant/talents/group/remove', url: '/api/jobslink-api/tenant/talents/group/remove',
method: 'post', method: 'post',
params: {ids} params: {ids}
}) })
} }
/*转移分组*/ /*转移分组*/
export const transferDept = export const transferDept =
(groupIds, ids) => { (groupIds, ids, deptId) => {
return request({ return request({
url: '/api/jobslink-api/tenant/talents/updateAllGroup', url: '/api/jobslink-api/tenant/talents/updateAllGroup',
method: 'post', method: 'post',
params: {groupIds, ids} params: {groupIds, ids, deptId}
}) })
} }
/*导入人才库*/ /*导入人才库*/
export const upload = () => { export const upload = () => {
return `/api/jobslink-api/tenant/talents/tenant/import-talents?isCovered=1` return `/api/jobslink-api/tenant/talents/tenant/import-talents?isCovered=1`
} }
export const getDeptMyTree = (params) => {
return request({
url: '/api/jobslink-api/system/dept/my-tree',
method: 'get',
params
})
}

View File

@@ -18,6 +18,7 @@ Vue.use(VueRouter);
export const createRouter = () => export const createRouter = () =>
new VueRouter({ new VueRouter({
// mode: 'history', // mode: 'history',
// base: 'manage',
// https://router.vquejs.org/zh/guide/advanced/scroll-behavior.html#%E5%BC%82%E6%AD%A5%E6%BB%9A%E5%8A%A8 // https://router.vquejs.org/zh/guide/advanced/scroll-behavior.html#%E5%BC%82%E6%AD%A5%E6%BB%9A%E5%8A%A8
// 这个方法 是控制滚动条 // 这个方法 是控制滚动条
// 如果 retuen falsy || {} ,则不发生滚动 // 如果 retuen falsy || {} ,则不发生滚动

View File

@@ -31,13 +31,15 @@
size="small" size="small"
icon="el-icon-search" icon="el-icon-search"
@click="searchChange1" @click="searchChange1"
> </el-button >
</el-button
> >
<el-button <el-button
size="small" size="small"
icon="el-icon-delete" icon="el-icon-delete"
@click="searchReset1" @click="searchReset1"
> </el-button >
</el-button
> >
</div> </div>
<!-- </el-col> --> <!-- </el-col> -->
@@ -72,7 +74,8 @@
v-if="permission.user_role" v-if="permission.user_role"
icon="el-icon-user" icon="el-icon-user"
@click="handleGrant" @click="handleGrant"
>角色配置</el-button >角色配置
</el-button
> >
<el-button <el-button
size="small" size="small"
@@ -80,7 +83,8 @@
v-if="permission.user_reset" v-if="permission.user_reset"
icon="el-icon-refresh" icon="el-icon-refresh"
@click="handleReset" @click="handleReset"
>密码重置</el-button >密码重置
</el-button
> >
</template> </template>
<template slot-scope="{ row }" slot="companyName"> <template slot-scope="{ row }" slot="companyName">
@@ -148,14 +152,14 @@ import {
grant, grant,
resetPassword, resetPassword,
} from "@/api/system/user"; } from "@/api/system/user";
import { getDeptTree } from "@/api/system/dept"; import {getDeptTree} from "@/api/system/dept";
import { getRoleTree } from "@/api/system/role"; import {getRoleTree} from "@/api/system/role";
import { mapGetters } from "vuex"; import {mapGetters} from "vuex";
import website from "@/config/website"; import website from "@/config/website";
import { getToken } from "@/util/auth"; import {getToken} from "@/util/auth";
import { isMobile } from "@/util/validate"; import {isMobile} from "@/util/validate";
import md5 from "js-md5"; import md5 from "js-md5";
import { excelAccept } from "@/common/accept"; import {excelAccept} from "@/common/accept";
export default { export default {
name: "user", name: "user",
@@ -456,7 +460,7 @@ export default {
"excelForm.isCovered"() { "excelForm.isCovered"() {
if (this.excelForm.isCovered !== "") { if (this.excelForm.isCovered !== "") {
const column = this.findObject(this.excelOption.column, "excelFile"); const column = this.findObject(this.excelOption.column, "excelFile");
column.action = `/api/jobslink-api/system/tuser//import-user?isCovered=${this.excelForm.isCovered}`; column.action = `/api/jobslink-api/system/tuser/import-user?isCovered=${this.excelForm.isCovered}`;
} }
}, },
}, },
@@ -722,6 +726,7 @@ export default {
margin-bottom: 18px; margin-bottom: 18px;
padding: 0 10px; padding: 0 10px;
} }
.searchBtn { .searchBtn {
display: inline-block; display: inline-block;
margin-bottom: 18px; margin-bottom: 18px;

View File

@@ -19,7 +19,8 @@
</template> </template>
<script> <script>
import { transferDept } from "@/api/tenant/talents"; import {getDeptMyTree, transferDept} from "@/api/tenant/talents";
export default { export default {
props: { props: {
ids: String, ids: String,
@@ -30,12 +31,32 @@ export default {
groupId: "", groupId: "",
box: false, box: false,
form: {}, form: {},
option: { deptId: '',
depTree: []
};
},
computed: {
option() {
return {
menuPosition: "right", menuPosition: "right",
menuBtn: true, menuBtn: true,
submitBtn: true, submitBtn: true,
emptyBtn: false, emptyBtn: false,
column: [ column: [
{
label: "所属机构",
prop: "deptId",
type: "tree",
multiple: false,
dicData: this.depTree,
props: {
label: "title",
},
checkStrictly: true,
slot: true,
span: 24,
change: this.deptChange
},
{ {
label: "所属分组", label: "所属分组",
prop: "groupId", prop: "groupId",
@@ -62,11 +83,28 @@ export default {
placeholder: "请选择分组", placeholder: "请选择分组",
}, },
], ],
}, }
}; }
},
created() {
this.getDept()
}, },
computed: {},
methods: { methods: {
deptChange({value, column}) {
this.deptId = value
console.log(value)
},
async getDept() {
let params = {
tenantId: '000000'
}
let resData = await getDeptMyTree(params)
if (resData.data.code === 200) {
this.depTree = resData.data.data
console.log(this.depTree)
}
},
closed() { closed() {
this.form = {}; this.form = {};
if (this.$refs.groups) { if (this.$refs.groups) {
@@ -76,7 +114,7 @@ export default {
} }
}, },
openDialog() { openDialog() {
this.title = "转移分组"; this.title = "转移推送";
this.box = true; this.box = true;
if (this.$refs.groups) { if (this.$refs.groups) {
this.$refs.groups.init(); this.$refs.groups.init();
@@ -86,7 +124,7 @@ export default {
}, },
handleSubmit(form, done) { handleSubmit(form, done) {
//提交转移分组接口 //提交转移分组接口
transferDept(this.form.groupId, this.ids).then( transferDept(this.form.groupId, this.ids, this.deptId).then(
() => { () => {
this.box = false; this.box = false;
this.$message({ this.$message({

View File

@@ -11,7 +11,7 @@
<div class="box" :style="{ height: leftHeight }"> <div class="box" :style="{ height: leftHeight }">
<el-scrollbar style="height: 100%"> <el-scrollbar style="height: 100%">
<el-tree ref="tree" node-key="id" highlight-current :expand-on-click-node="false" @node-click="nodeClick" <el-tree ref="tree" node-key="id" highlight-current :expand-on-click-node="false" @node-click="nodeClick"
:data="treeData" :props="props"> :data="treeData" :props="props">
<span class="custom-tree-node" slot-scope="{ node, data }" style="width: 80%"> <span class="custom-tree-node" slot-scope="{ node, data }" style="width: 80%">
<!-- <el-tooltip class="item" effect="dark" :content="node.label" placement="top"> --> <!-- <el-tooltip class="item" effect="dark" :content="node.label" placement="top"> -->
<TextTooltip :content="`${node.label}(${data.sumNum}人)`" length="13" tip-width="10"></TextTooltip> <TextTooltip :content="`${node.label}(${data.sumNum}人)`" length="13" tip-width="10"></TextTooltip>
@@ -32,7 +32,8 @@
<div class="footer" style="padding-left: 6px"> <div class="footer" style="padding-left: 6px">
<el-button type="text" icon="el-icon-plus" <el-button type="text" icon="el-icon-plus"
v-if="vaildData(permission.tenant_main_talents_certain_index_groupadd, false)" v-if="vaildData(permission.tenant_main_talents_certain_index_groupadd, false)"
@click="updateGroups('add')">新建分组</el-button> @click="updateGroups('add')">新建分组
</el-button>
</div> </div>
</el-scrollbar> </el-scrollbar>
</div> </div>
@@ -63,10 +64,10 @@
</el-form> </el-form>
<!--/搜索栏--> <!--/搜索栏-->
<avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" ref="crud" v-model="obj" <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" ref="crud" v-model="obj"
:permission="permissionList" :before-open="beforeOpen" @row-del="rowDel" @row-update="rowUpdate" :permission="permissionList" :before-open="beforeOpen" @row-del="rowDel" @row-update="rowUpdate"
@row-save="rowSave" @search-change="searchChange" @search-reset="searchReset" @row-save="rowSave" @search-change="searchChange" @search-reset="searchReset"
@selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange" @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
@refresh-change="refreshChange" class="customPage"> @refresh-change="refreshChange" class="customPage">
<!--自定义列--> <!--自定义列-->
<template slot="labelsBase" slot-scope="{ row }"> <template slot="labelsBase" slot-scope="{ row }">
<el-tooltip effect="dark" placement="top"> <el-tooltip effect="dark" placement="top">
@@ -77,7 +78,8 @@
<template slot="resume" slot-scope="{ row }"> <template slot="resume" slot-scope="{ row }">
<div> <div>
<el-button type="text" size="mini" @click="$refs.resume.openDialog(row)" <el-button type="text" size="mini" @click="$refs.resume.openDialog(row)"
v-if="row.userId && row.userId !== '0'">查看简历</el-button> v-if="row.userId && row.userId !== '0'">查看简历
</el-button>
<div v-else>暂无简历</div> <div v-else>暂无简历</div>
</div> </div>
</template> </template>
@@ -89,12 +91,17 @@
<!--自定义按钮--> <!--自定义按钮-->
<template slot="menuLeft"> <template slot="menuLeft">
<el-button type="success" size="small" plain icon="el-icon-plus" @click="handleImport" <el-button type="success" size="small" plain icon="el-icon-plus" @click="handleImport"
v-show="vaildData(permission.tenant_main_talents_certain_index_add, false)">批量导入</el-button> v-show="vaildData(permission.tenant_main_talents_certain_index_add, false)">批量导入
</el-button>
<el-button type="warning" size="small" plain :disabled="!selectionList.length" icon="el-icon-sort" <el-button type="warning" size="small" plain :disabled="!selectionList.length" icon="el-icon-sort"
@click="handleTransfer" v-show="vaildData(permission.tenant_main_talents_certain_index_transfergroup, false)">转移分组</el-button> @click="handleTransfer"
v-show="vaildData(permission.tenant_main_talents_certain_index_transfergroup, false)">转移推送
</el-button>
<el-button type="danger" size="small" icon="el-icon-delete" @click="handleDelete" <el-button type="danger" size="small" icon="el-icon-delete" @click="handleDelete"
:disabled="!selectionList.length" plain v-show="vaildData(permission.tenant_main_talents_certain_index_transfergroup, false)"> :disabled="!selectionList.length" plain
删除</el-button> v-show="vaildData(permission.tenant_main_talents_certain_index_transfergroup, false)">
删除
</el-button>
</template> </template>
<template slot="name" slot-scope="{row}"> <template slot="name" slot-scope="{row}">
<span>{{ row.name }}</span> <span>{{ row.name }}</span>
@@ -108,7 +115,7 @@
<!--批量导入--> <!--批量导入-->
<el-dialog title="导入" append-to-body :visible.sync="excelBox" :close-on-click-modal="false" width="555px"> <el-dialog title="导入" append-to-body :visible.sync="excelBox" :close-on-click-modal="false" width="555px">
<avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter" <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter"
:upload-before="beforeAvatarUpload" :upload-error="uploadError"> :upload-before="beforeAvatarUpload" :upload-error="uploadError">
<template slot="excelTemplate"> <template slot="excelTemplate">
<el-button type="primary" @click="handleTemplate()" :loading="templateLoading"> <el-button type="primary" @click="handleTemplate()" :loading="templateLoading">
点击下载 点击下载
@@ -139,18 +146,19 @@ import {
detail, detail,
getDept, getDept,
removeDept, removeDept,
upload, upload, getDeptMyTree,
} from "@/api/tenant/talents"; } from "@/api/tenant/talents";
import { getWorkTypes, getLabelList } from "@/api/tenant/common"; import {getWorkTypes, getLabelList} from "@/api/tenant/common";
import { mapGetters } from "vuex"; import {mapGetters} from "vuex";
import addGroups from "./Dialog/addGroups"; import addGroups from "./Dialog/addGroups";
import transferGroups from "./Dialog/transferGroups"; import transferGroups from "./Dialog/transferGroups";
import Resume from "@/components/resume/index"; import Resume from "@/components/resume/index";
import { check18IdCardNo, isvalidatemobile, isExcel } from "@/util/validate"; import {check18IdCardNo, isvalidatemobile, isExcel} from "@/util/validate";
import { getTemplate } from "@/api/resource/template"; import {getTemplate} from "@/api/resource/template";
import ied from "@/views/util/import-error-dialog"; import ied from "@/views/util/import-error-dialog";
import { excelAccept } from "@/common/accept"; import {excelAccept} from "@/common/accept";
import TextTooltip from '@/components/text-tooltip' import TextTooltip from '@/components/text-tooltip'
export default { export default {
filters: { filters: {
ellipsis(value) { ellipsis(value) {
@@ -187,14 +195,15 @@ export default {
tempWorkType: [], tempWorkType: [],
worktypeDic: {}, worktypeDic: {},
arr: [],////// arr: [],//////
deptId: '',
excelBox: false, excelBox: false,
data: [], data: [],
obj: {}, obj: {},
excelForm: { isCovered: 1 }, depTree: [],
excelForm: {isCovered: 1},
}; };
}, },
components: { addGroups, transferGroups, Resume, ied, TextTooltip }, components: {addGroups, transferGroups, Resume, ied, TextTooltip},
watch: {}, watch: {},
computed: { computed: {
...mapGetters(["permission"]), ...mapGetters(["permission"]),
@@ -202,8 +211,9 @@ export default {
return { return {
addBtn: this.vaildData(this.permission.tenant_main_talents_certain_index_add, false), addBtn: this.vaildData(this.permission.tenant_main_talents_certain_index_add, false),
viewBtn: true, viewBtn: true,
delBtn: this.vaildData( this.permission.tenant_main_talents_certain_index_delete, false), delBtn: this.vaildData(this.permission.tenant_main_talents_certain_index_delete, false),
editBtn: this.vaildData( this.permission.tenant_main_talents_certain_index_edit,false)}; editBtn: this.vaildData(this.permission.tenant_main_talents_certain_index_edit, false)
};
}, },
ids() { ids() {
let ids = []; let ids = [];
@@ -296,8 +306,8 @@ export default {
// hide: true, // hide: true,
span: 24, span: 24,
rules: [ rules: [
{ required: true, message: "请输入身份证号", trigger: "blur" }, {required: true, message: "请输入身份证号", trigger: "blur"},
{ trigger: "blur", validator: IdCardNo }, {trigger: "blur", validator: IdCardNo},
], ],
}, },
{ {
@@ -385,11 +395,26 @@ export default {
}; };
}, },
excelOption() { excelOption() {
const url = this.tenantId ? `${upload()}&id=${this.tenantId}` : upload() const baseUrl = upload() + `&deptId=${this.deptId}`
const url = this.tenantId ? `${baseUrl}&id=${this.tenantId}` : baseUrl
return { return {
submitBtn: false, submitBtn: false,
emptyBtn: false, emptyBtn: false,
column: [ column: [
{
label: "所属机构",
prop: "deptId",
type: "tree",
multiple: false,
dicData: this.depTree,
props: {
label: "title",
},
checkStrictly: true,
slot: true,
span: 20,
change: this.deptChange
},
{ {
label: "文件上传", label: "文件上传",
prop: "excelFile", prop: "excelFile",
@@ -422,7 +447,7 @@ export default {
const result = []; const result = [];
const wt = this.obj.labelsBase.split(","); const wt = this.obj.labelsBase.split(",");
wt.forEach((item) => { wt.forEach((item) => {
result.push({ name: item }); result.push({name: item});
}); });
return result; return result;
}, },
@@ -439,7 +464,7 @@ export default {
for (let j = 0; j < this.arr.length; j++) { for (let j = 0; j < this.arr.length; j++) {
const key = this.arr[j]; const key = this.arr[j];
if (this.worktypeDic.hasOwnProperty(key)) { if (this.worktypeDic.hasOwnProperty(key)) {
rel.push({ name: key }) rel.push({name: key})
} }
} }
/* for (const key in this.worktypeDic) { /* for (const key in this.worktypeDic) {
@@ -450,7 +475,7 @@ export default {
for (let i = 0; i < this.tempWorkType.length; i++) { for (let i = 0; i < this.tempWorkType.length; i++) {
const key = this.tempWorkType[i]; const key = this.tempWorkType[i];
if (key && !this.worktypeDic.hasOwnProperty(key)) { if (key && !this.worktypeDic.hasOwnProperty(key)) {
rel.push({ name: key }); rel.push({name: key});
} }
} }
return rel; return rel;
@@ -460,8 +485,24 @@ export default {
this.initDept(); this.initDept();
// this.getWorkTypes(); // this.getWorkTypes();
this.getLabelList(); this.getLabelList();
this.getDept()
}, },
methods: { methods: {
deptChange({value, column}) {
this.deptId = value
console.log(value)
},
async getDept() {
let params = {
tenantId: '000000'
}
let resData = await getDeptMyTree(params)
if (resData.data.code === 200) {
this.depTree = resData.data.data
console.log(this.depTree)
}
},
getWorkTypes() { getWorkTypes() {
getWorkTypes().then((res) => { getWorkTypes().then((res) => {
@@ -478,7 +519,7 @@ export default {
getLabelList().then(async (res) => { getLabelList().then(async (res) => {
const arr = res.data.data.flatMap(obj => obj.child.map(item => item.concatName)); const arr = res.data.data.flatMap(obj => obj.child.map(item => item.concatName));
this.arr = arr.map(concatName => { this.arr = arr.map(concatName => {
return { name: concatName }; return {name: concatName};
}); });
}); });
}, },
@@ -504,13 +545,13 @@ export default {
this.$nextTick(function () { this.$nextTick(function () {
this.$refs.tree.setCurrentKey(groupId); this.$refs.tree.setCurrentKey(groupId);
}); //默认高亮 }); //默认高亮
this.nodeClick({ id: groupId }); this.nodeClick({id: groupId});
} else { } else {
if (this.treeData.length) { if (this.treeData.length) {
this.$nextTick(function () { this.$nextTick(function () {
this.$refs.tree.setCurrentKey(this.treeData[0].id); this.$refs.tree.setCurrentKey(this.treeData[0].id);
}); //默认高亮第一个 }); //默认高亮第一个
this.nodeClick({ id: this.treeData[0].id }); this.nodeClick({id: this.treeData[0].id});
} }
} }
this.personTotal = res.data.data.sum; this.personTotal = res.data.data.sum;
@@ -529,8 +570,8 @@ export default {
const h = this.$createElement; const h = this.$createElement;
this.$confirm( this.$confirm(
h("div", null, [ h("div", null, [
h("p", { style: "font-size: 16px" }, "您确定要删除此分组吗? "), h("p", {style: "font-size: 16px"}, "您确定要删除此分组吗? "),
h("p", { style: "color: red" }, "一旦删除则无法找回"), h("p", {style: "color: red"}, "一旦删除则无法找回"),
]), ]),
{ {
type: "warning", type: "warning",
@@ -641,6 +682,7 @@ export default {
telphone: row.telphone, telphone: row.telphone,
labelsBase: row.labelsBase, labelsBase: row.labelsBase,
remarks: row.remarks, remarks: row.remarks,
groupType: 1,
}).then( }).then(
() => { () => {
this.$message({ this.$message({
@@ -686,8 +728,8 @@ export default {
const h = this.$createElement; const h = this.$createElement;
this.$confirm( this.$confirm(
h("div", null, [ h("div", null, [
h("p", { style: "font-size: 16px" }, "您确定要删除此人才吗? "), h("p", {style: "font-size: 16px"}, "您确定要删除此人才吗? "),
h("p", { style: "color: red" }, "一旦删除则无法找回"), h("p", {style: "color: red"}, "一旦删除则无法找回"),
]), ]),
{ {
type: "warning", type: "warning",
@@ -744,7 +786,7 @@ export default {
const h = this.$createElement; const h = this.$createElement;
this.$confirm( this.$confirm(
h("div", null, [ h("div", null, [
h("p", { style: "font-size: 16px" }, "您确定要批量删除选中人才吗? "), h("p", {style: "font-size: 16px"}, "您确定要批量删除选中人才吗? "),
]), ]),
{ {
type: "warning", type: "warning",
@@ -810,13 +852,13 @@ export default {
const arr = []; const arr = [];
const data = res.data.data; const data = res.data.data;
data.error && data.error &&
data.error.errorList.forEach((item) => { data.error.errorList.forEach((item) => {
arr.push(`${item.name} ${item.remarks}`); arr.push(`${item.name} ${item.remarks}`);
}); });
data.auth && data.auth &&
data.auth.authList.forEach((item) => { data.auth.authList.forEach((item) => {
arr.push(`${item.name} ${item.remarks}`); arr.push(`${item.name} ${item.remarks}`);
}); });
this.$refs.ied.show(arr); this.$refs.ied.show(arr);
} }
this.refreshChange(); this.refreshChange();

View File

@@ -19,7 +19,8 @@
</template> </template>
<script> <script>
import { transferDept } from "@/api/tenant/talents"; import {getDeptMyTree, transferDept} from "@/api/tenant/talents";
export default { export default {
props: { props: {
ids: String, ids: String,
@@ -30,12 +31,32 @@ export default {
groupId: "", groupId: "",
box: false, box: false,
form: {}, form: {},
option: { deptId: '',
depTree: []
};
},
computed: {
option() {
return {
menuPosition: "right", menuPosition: "right",
menuBtn: true, menuBtn: true,
submitBtn: true, submitBtn: true,
emptyBtn: false, emptyBtn: false,
column: [ column: [
{
label: "所属机构",
prop: "deptId",
type: "tree",
multiple: false,
dicData: this.depTree,
props: {
label: "title",
},
checkStrictly: true,
slot: true,
span: 24,
change: this.deptChange
},
{ {
label: "所属分组", label: "所属分组",
prop: "groupId", prop: "groupId",
@@ -61,12 +82,29 @@ export default {
], ],
placeholder: "请选择分组", placeholder: "请选择分组",
}, },
], ]
}, }
}; }
},
created() {
this.getDept()
}, },
computed: {},
methods: { methods: {
deptChange({value, column}) {
this.deptId = value
console.log(value)
},
async getDept() {
let params = {
tenantId: '000000'
}
let resData = await getDeptMyTree(params)
if (resData.data.code === 200) {
this.depTree = resData.data.data
console.log(this.depTree)
}
},
closed() { closed() {
this.form = {}; this.form = {};
if (this.$refs.groups) { if (this.$refs.groups) {
@@ -76,7 +114,7 @@ export default {
} }
}, },
openDialog() { openDialog() {
this.title = "转移分组"; this.title = "转移推送";
this.box = true; this.box = true;
if (this.$refs.groups) { if (this.$refs.groups) {
this.$refs.groups.init(); this.$refs.groups.init();
@@ -86,7 +124,7 @@ export default {
}, },
handleSubmit(form, done) { handleSubmit(form, done) {
//提交转移分组接口 //提交转移分组接口
transferDept(this.form.groupId, this.ids).then( transferDept(this.form.groupId, this.ids, this.deptId).then(
() => { () => {
this.box = false; this.box = false;
this.$message({ this.$message({

View File

@@ -11,7 +11,7 @@
<div class="box" :style="{ height: leftHeight }"> <div class="box" :style="{ height: leftHeight }">
<el-scrollbar style="height: 100%"> <el-scrollbar style="height: 100%">
<el-tree ref="tree" node-key="id" highlight-current :expand-on-click-node="false" @node-click="nodeClick" <el-tree ref="tree" node-key="id" highlight-current :expand-on-click-node="false" @node-click="nodeClick"
:data="treeData" :props="props"> :data="treeData" :props="props">
<span class="custom-tree-node" slot-scope="{ node, data }" style="width: 80%"> <span class="custom-tree-node" slot-scope="{ node, data }" style="width: 80%">
<!-- <el-tooltip class="item" effect="dark" :content="node.label" placement="top"> --> <!-- <el-tooltip class="item" effect="dark" :content="node.label" placement="top"> -->
<TextTooltip :content="`${node.label}(${data.sumNum}人)`" length="10" tip-width="10"></TextTooltip> <TextTooltip :content="`${node.label}(${data.sumNum}人)`" length="10" tip-width="10"></TextTooltip>
@@ -32,7 +32,8 @@
<div class="footer" style="padding-left: 6px"> <div class="footer" style="padding-left: 6px">
<el-button type="text" icon="el-icon-plus" <el-button type="text" icon="el-icon-plus"
v-if="vaildData(permission.tenant_main_talents_latent_index_groupadd, false)" v-if="vaildData(permission.tenant_main_talents_latent_index_groupadd, false)"
@click="updateGroups('add')">新建分组</el-button> @click="updateGroups('add')">新建分组
</el-button>
</div> </div>
</el-scrollbar> </el-scrollbar>
</div> </div>
@@ -63,10 +64,10 @@
</el-form> </el-form>
<!--/搜索栏--> <!--/搜索栏-->
<avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" ref="crud" v-model="obj" <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" ref="crud" v-model="obj"
:permission="permissionList" :before-open="beforeOpen" @row-del="rowDel" @row-update="rowUpdate" :permission="permissionList" :before-open="beforeOpen" @row-del="rowDel" @row-update="rowUpdate"
@row-save="rowSave" @search-change="searchChange" @search-reset="searchReset" @row-save="rowSave" @search-change="searchChange" @search-reset="searchReset"
@selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange" @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
@refresh-change="refreshChange" class="customPage"> @refresh-change="refreshChange" class="customPage">
<!--自定义列--> <!--自定义列-->
<template slot="labelsBase" slot-scope="{ row }"> <template slot="labelsBase" slot-scope="{ row }">
<el-tooltip effect="dark" placement="top"> <el-tooltip effect="dark" placement="top">
@@ -77,7 +78,8 @@
<template slot="resume" slot-scope="{ row }"> <template slot="resume" slot-scope="{ row }">
<div> <div>
<el-button type="text" size="mini" @click="$refs.resume.openDialog(row)" <el-button type="text" size="mini" @click="$refs.resume.openDialog(row)"
v-if="row.userId && row.userId !== '0'">查看简历</el-button> v-if="row.userId && row.userId !== '0'">查看简历
</el-button>
<div v-else>暂无简历</div> <div v-else>暂无简历</div>
</div> </div>
</template> </template>
@@ -89,12 +91,17 @@
<!--自定义按钮--> <!--自定义按钮-->
<template slot="menuLeft"> <template slot="menuLeft">
<el-button type="success" size="small" plain icon="el-icon-plus" @click="handleImport" <el-button type="success" size="small" plain icon="el-icon-plus" @click="handleImport"
v-show="vaildData(permission.tenant_main_talents_latent_index_add, false)">批量导入</el-button> v-show="vaildData(permission.tenant_main_talents_latent_index_add, false)">批量导入
</el-button>
<el-button type="warning" size="small" plain :disabled="!selectionList.length" icon="el-icon-sort" <el-button type="warning" size="small" plain :disabled="!selectionList.length" icon="el-icon-sort"
@click="handleTransfer" v-show="vaildData(permission.tenant_main_talents_latent_index_tansfergroup, false)">转移分组</el-button> @click="handleTransfer"
v-show="vaildData(permission.tenant_main_talents_latent_index_tansfergroup, false)">转移推送
</el-button>
<el-button type="danger" size="small" icon="el-icon-delete" @click="handleDelete" <el-button type="danger" size="small" icon="el-icon-delete" @click="handleDelete"
:disabled="!selectionList.length" plain v-show="vaildData(permission.tenant_main_talents_latent_index_tansfergroup, false)"> :disabled="!selectionList.length" plain
删除</el-button> v-show="vaildData(permission.tenant_main_talents_latent_index_tansfergroup, false)">
删除
</el-button>
</template> </template>
<template slot="name" slot-scope="{row}"> <template slot="name" slot-scope="{row}">
<span>{{ row.name }}</span> <span>{{ row.name }}</span>
@@ -108,7 +115,7 @@
<!--批量导入--> <!--批量导入-->
<el-dialog title="导入" append-to-body :visible.sync="excelBox" :close-on-click-modal="false" width="555px"> <el-dialog title="导入" append-to-body :visible.sync="excelBox" :close-on-click-modal="false" width="555px">
<avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter" <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter"
:upload-before="beforeAvatarUpload" :upload-error="uploadError"> :upload-before="beforeAvatarUpload" :upload-error="uploadError">
<template slot="excelTemplate"> <template slot="excelTemplate">
<el-button type="primary" @click="handleTemplate()" :loading="templateLoading"> <el-button type="primary" @click="handleTemplate()" :loading="templateLoading">
点击下载 点击下载
@@ -140,16 +147,17 @@ import {
getDept, getDept,
removeDept, removeDept,
upload, upload,
getDeptMyTree
} from "@/api/tenant/talents"; } from "@/api/tenant/talents";
import { getWorkTypes, getLabelList } from "@/api/tenant/common"; import {getWorkTypes, getLabelList} from "@/api/tenant/common";
import { mapGetters } from "vuex"; import {mapGetters} from "vuex";
import addGroups from "./Dialog/addGroups"; import addGroups from "./Dialog/addGroups";
import transferGroups from "./Dialog/transferGroups"; import transferGroups from "./Dialog/transferGroups";
import Resume from "@/components/resume/index"; import Resume from "@/components/resume/index";
import { check18IdCardNo, isvalidatemobile, isExcel } from "@/util/validate"; import {check18IdCardNo, isvalidatemobile, isExcel} from "@/util/validate";
import { getTemplate } from "@/api/resource/template"; import {getTemplate} from "@/api/resource/template";
import ied from "@/views/util/import-error-dialog"; import ied from "@/views/util/import-error-dialog";
import { excelAccept } from "@/common/accept"; import {excelAccept} from "@/common/accept";
import TextTooltip from '@/components/text-tooltip' import TextTooltip from '@/components/text-tooltip'
export default { export default {
@@ -188,14 +196,15 @@ export default {
tempWorkType: [], tempWorkType: [],
worktypeDic: {}, worktypeDic: {},
arr: [],////// arr: [],//////
depTree: [],
deptId: '',
excelBox: false, excelBox: false,
data: [], data: [],
obj: {}, obj: {},
excelForm: { isCovered: 1 }, excelForm: {isCovered: 1},
}; };
}, },
components: { addGroups, transferGroups, Resume, ied, TextTooltip }, components: {addGroups, transferGroups, Resume, ied, TextTooltip},
watch: {}, watch: {},
computed: { computed: {
...mapGetters(["permission"]), ...mapGetters(["permission"]),
@@ -203,7 +212,7 @@ export default {
return { return {
addBtn: this.vaildData(this.permission.tenant_main_talents_latent_index_add, false), addBtn: this.vaildData(this.permission.tenant_main_talents_latent_index_add, false),
viewBtn: true, viewBtn: true,
delBtn: this.vaildData( this.permission.tenant_main_talents_latent_index_del, false), delBtn: this.vaildData(this.permission.tenant_main_talents_latent_index_del, false),
editBtn: this.vaildData(this.permission.tenant_main_talents_latent_index_edit, false), editBtn: this.vaildData(this.permission.tenant_main_talents_latent_index_edit, false),
}; };
}, },
@@ -298,8 +307,8 @@ export default {
// hide: true, // hide: true,
span: 24, span: 24,
rules: [ rules: [
{ required: true, message: "请输入身份证号", trigger: "blur" }, {required: true, message: "请输入身份证号", trigger: "blur"},
{ trigger: "blur", validator: IdCardNo }, {trigger: "blur", validator: IdCardNo},
], ],
}, },
{ {
@@ -387,11 +396,27 @@ export default {
}; };
}, },
excelOption() { excelOption() {
const url = this.tenantId ? `${upload()}&id=${this.tenantId}` : upload() const baseUrl = upload() + `&deptId=${this.deptId}`
const url = this.tenantId ? `${baseUrl}&id=${this.tenantId}` : baseUrl
return { return {
submitBtn: false, submitBtn: false,
emptyBtn: false, emptyBtn: false,
column: [ column: [
{
label: "所属机构",
prop: "deptId",
type: "tree",
multiple: false,
dicData: this.depTree,
props: {
label: "title",
},
checkStrictly: true,
slot: true,
span: 20,
change: this.deptChange
},
{ {
label: "文件上传", label: "文件上传",
prop: "excelFile", prop: "excelFile",
@@ -424,7 +449,7 @@ export default {
const result = []; const result = [];
const wt = this.obj.labelsBase.split(","); const wt = this.obj.labelsBase.split(",");
wt.forEach((item) => { wt.forEach((item) => {
result.push({ name: item }); result.push({name: item});
}); });
return result; return result;
}, },
@@ -441,7 +466,7 @@ export default {
for (let j = 0; j < this.arr.length; j++) { for (let j = 0; j < this.arr.length; j++) {
const key = this.arr[j]; const key = this.arr[j];
if (this.worktypeDic.hasOwnProperty(key)) { if (this.worktypeDic.hasOwnProperty(key)) {
rel.push({ name: key }) rel.push({name: key})
} }
} }
/* for (const key in this.worktypeDic) { /* for (const key in this.worktypeDic) {
@@ -452,7 +477,7 @@ export default {
for (let i = 0; i < this.tempWorkType.length; i++) { for (let i = 0; i < this.tempWorkType.length; i++) {
const key = this.tempWorkType[i]; const key = this.tempWorkType[i];
if (key && !this.worktypeDic.hasOwnProperty(key)) { if (key && !this.worktypeDic.hasOwnProperty(key)) {
rel.push({ name: key }); rel.push({name: key});
} }
} }
return rel; return rel;
@@ -462,8 +487,24 @@ export default {
this.initDept(); this.initDept();
// this.getWorkTypes(); // this.getWorkTypes();
this.getLabelList(); this.getLabelList();
this.getDept()
}, },
methods: { methods: {
deptChange({value, column}) {
this.deptId = value
console.log(value)
},
async getDept() {
let params = {
tenantId: '000000'
}
let resData = await getDeptMyTree(params)
if (resData.data.code === 200) {
this.depTree = resData.data.data
console.log(this.depTree)
}
},
getWorkTypes() { getWorkTypes() {
getWorkTypes().then((res) => { getWorkTypes().then((res) => {
@@ -480,7 +521,7 @@ export default {
getLabelList().then(async (res) => { getLabelList().then(async (res) => {
const arr = res.data.data.flatMap(obj => obj.child.map(item => item.concatName)); const arr = res.data.data.flatMap(obj => obj.child.map(item => item.concatName));
this.arr = arr.map(concatName => { this.arr = arr.map(concatName => {
return { name: concatName }; return {name: concatName};
}); });
}); });
}, },
@@ -506,13 +547,13 @@ export default {
this.$nextTick(function () { this.$nextTick(function () {
this.$refs.tree.setCurrentKey(groupId); this.$refs.tree.setCurrentKey(groupId);
}); //默认高亮 }); //默认高亮
this.nodeClick({ id: groupId }); this.nodeClick({id: groupId});
} else { } else {
if (this.treeData.length) { if (this.treeData.length) {
this.$nextTick(function () { this.$nextTick(function () {
this.$refs.tree.setCurrentKey(this.treeData[0].id); this.$refs.tree.setCurrentKey(this.treeData[0].id);
}); //默认高亮第一个 }); //默认高亮第一个
this.nodeClick({ id: this.treeData[0].id }); this.nodeClick({id: this.treeData[0].id});
} }
} }
this.personTotal = res.data.data.sum; this.personTotal = res.data.data.sum;
@@ -531,8 +572,8 @@ export default {
const h = this.$createElement; const h = this.$createElement;
this.$confirm( this.$confirm(
h("div", null, [ h("div", null, [
h("p", { style: "font-size: 16px" }, "您确定要删除此分组吗? "), h("p", {style: "font-size: 16px"}, "您确定要删除此分组吗? "),
h("p", { style: "color: red" }, "一旦删除则无法找回"), h("p", {style: "color: red"}, "一旦删除则无法找回"),
]), ]),
{ {
type: "warning", type: "warning",
@@ -643,6 +684,7 @@ export default {
telphone: row.telphone, telphone: row.telphone,
labelsBase: row.labelsBase, labelsBase: row.labelsBase,
remarks: row.remarks, remarks: row.remarks,
groupType: 0,
}).then( }).then(
() => { () => {
this.$message({ this.$message({
@@ -688,8 +730,8 @@ export default {
const h = this.$createElement; const h = this.$createElement;
this.$confirm( this.$confirm(
h("div", null, [ h("div", null, [
h("p", { style: "font-size: 16px" }, "您确定要删除此人才吗? "), h("p", {style: "font-size: 16px"}, "您确定要删除此人才吗? "),
h("p", { style: "color: red" }, "一旦删除则无法找回"), h("p", {style: "color: red"}, "一旦删除则无法找回"),
]), ]),
{ {
type: "warning", type: "warning",
@@ -746,7 +788,7 @@ export default {
const h = this.$createElement; const h = this.$createElement;
this.$confirm( this.$confirm(
h("div", null, [ h("div", null, [
h("p", { style: "font-size: 16px" }, "您确定要批量删除选中人才吗? "), h("p", {style: "font-size: 16px"}, "您确定要批量删除选中人才吗? "),
]), ]),
{ {
type: "warning", type: "warning",
@@ -812,13 +854,13 @@ export default {
const arr = []; const arr = [];
const data = res.data.data; const data = res.data.data;
data.error && data.error &&
data.error.errorList.forEach((item) => { data.error.errorList.forEach((item) => {
arr.push(`${item.name} ${item.remarks}`); arr.push(`${item.name} ${item.remarks}`);
}); });
data.auth && data.auth &&
data.auth.authList.forEach((item) => { data.auth.authList.forEach((item) => {
arr.push(`${item.name} ${item.remarks}`); arr.push(`${item.name} ${item.remarks}`);
}); });
this.$refs.ied.show(arr); this.$refs.ied.show(arr);
} }
this.refreshChange(); this.refreshChange();

View File

@@ -1,6 +1,6 @@
module.exports = { module.exports = {
//路径前缀 //路径前缀
publicPath: "/manage/", publicPath: "manage",
outputDir: "manage", outputDir: "manage",
lintOnSave: true, lintOnSave: true,
productionSourceMap: false, productionSourceMap: false,
@@ -23,7 +23,7 @@ module.exports = {
port: 1888, port: 1888,
proxy: { proxy: {
"/api": { "/api": {
target: 'http://10.165.0.173:8000', target: 'http://192.168.1.106:8000',
ws: true, ws: true,
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {