flat: 6.5 改版

This commit is contained in:
Apcallover
2024-06-05 14:47:10 +08:00
parent b2fabc9000
commit 892bf6ed84
22 changed files with 4201 additions and 1376 deletions

22
package-lock.json generated
View File

@@ -6165,6 +6165,14 @@
}
}
},
"dom7": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/dom7/-/dom7-3.0.0.tgz",
"integrity": "sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==",
"requires": {
"ssr-window": "^3.0.0-alpha.1"
}
},
"domain-browser": {
"version": "1.2.0",
"resolved": "http://r.cnpmjs.org/domain-browser/download/domain-browser-1.2.0.tgz",
@@ -13065,6 +13073,11 @@
"tweetnacl": "~0.14.0"
}
},
"ssr-window": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/ssr-window/-/ssr-window-3.0.0.tgz",
"integrity": "sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA=="
},
"ssri": {
"version": "6.0.1",
"resolved": "http://r.cnpmjs.org/ssri/download/ssri-6.0.1.tgz",
@@ -13472,6 +13485,15 @@
}
}
},
"swiper": {
"version": "6.8.4",
"resolved": "https://registry.npmmirror.com/swiper/-/swiper-6.8.4.tgz",
"integrity": "sha512-O+buF9Q+sMA0H7luMS8R59hCaJKlpo8PXhQ6ZYu6Rn2v9OsFd4d1jmrv14QvxtQpKAvL/ZiovEeANI/uDGet7g==",
"requires": {
"dom7": "^3.0.0",
"ssr-window": "^3.0.0"
}
},
"table": {
"version": "4.0.2",
"resolved": "http://r.cnpmjs.org/table/download/table-4.0.2.tgz",

View File

@@ -30,6 +30,7 @@
"nprogress": "^0.2.0",
"portfinder": "^1.0.23",
"script-loader": "^0.7.2",
"swiper": "^6.8.4",
"vue": "^2.6.10",
"vue-axios": "^2.1.2",
"vue-baidu-map": "^0.21.22",

View File

@@ -1,10 +1,10 @@
import request from "@/router/axios";
/*获取人才列表*/
export const getList = (current, size, params, groupId) => {
export const getList = (params) => {
return request({
url: "/api/jobslink-api/serve/list",
url: "/api/jobslink-api/tenant/talents/list",
method: "get",
params: {...params, current, size, groupId}
params
});
};

View File

@@ -63,6 +63,14 @@ export const getDept = () => {
});
};
export const getDepTree = () => {
return request({
url: "/api/jobslink-api/serve/tree",
method: "get",
params: {}
});
};
/*新建分组*/
export const addDept = row => {
return request({
@@ -270,3 +278,20 @@ export const getMainServeUserLog = params => {
params: params
});
};
export const saveGroupServeInfo = (data) => {
return request({
url: "/api/jobslink-api/serve/tree/save",
method: "post",
data
});
};
export const updateGroupServeInfo = (data) => {
return request({
url: "/api/jobslink-api/serve/tree/update",
method: "post",
data
});
};

View File

@@ -121,3 +121,19 @@ export const getDeptAllTree = (params) => {
})
}
export const talentsEliminate = (params) => {
return request({
url: '/api/jobslink-api/tenant/talents/eliminate',
method: 'post',
data: params
})
}
export const talentsApproval = (params) => {
return request({
url: '/api/jobslink-api/tenant/talents/approval',
method: 'post',
data: params
})
}

View File

@@ -6,7 +6,9 @@
:before-close="handleClose"
append-to-body>
<span>{{ subTitle }}</span>
<div v-if="status === 1">
<slot name="header"></slot>
<div v-if="flagState === 1">
<slot name="content"></slot>
<div class="input_box">
<el-input type="textarea" v-model="input" placeholder="请输入内容"></el-input>
</div>
@@ -18,9 +20,10 @@
</div>
</div>
<span slot="footer" class="dialog-footer">
<slot name="footer"></slot>
<el-button @click="handleClose"> </el-button>
<el-button :type="btnTypes[status]" @click="handleCancel"> </el-button>
<el-button type="primary" @click="handleConfirm"> </el-button>
<el-button v-if="backBtnHide" :type="btnTypes[flagState]" @click="handleCancel"> </el-button>
<el-button type="primary" @click="handleConfirm">{{ submitText }}</el-button>
</span>
</el-dialog>
</template>
@@ -50,6 +53,20 @@ export default {
}
},
props: {
backBtnStatus: {
default: 0,
type: Number,
required: false,
},
submitText: {
default: '通 过',
type: String,
required: false,
},
backBtnHide: {
default: true,
type: Boolean,
},
visible: {
default: false,
type: Boolean,
@@ -76,7 +93,14 @@ export default {
}
}
},
computed: {},
computed: {
flagState() {
if (this.backBtnStatus) {
return 1
}
return this.status
}
},
methods: {
handleClose() {
this.$emit('onClose')

View File

@@ -9,7 +9,7 @@ export default [
children: [{
path: 'index',
name: '首页',
meta: {i18n: 'dashboard',code: "wel"},
meta: {i18n: 'dashboard', code: "wel"},
component: () =>
// import(/* webpackChunkName: "views" */ '@/views/wel/index')
import(/* webpackChunkName: "views" */ '@/views/workstation/workbench')
@@ -87,7 +87,7 @@ export default [
children: [{
path: 'index',
name: '客户消息',
meta: {i18n: 'news',code:'news'},
meta: {i18n: 'news', code: 'news'},
component: () =>
import(/* webpackChunkName: "views" */ '@/views/tenant/news/index')
}]
@@ -191,7 +191,7 @@ export default [
},
props: true,
component: () => import(
/* webpackChunkName: "views" */ '@/views/tenant/main/serve/Dialog/addLog')
/* webpackChunkName: "views" */ '@/views/tenant/main/serveCopy/Dialog/addLog')
}
]
},

View File

@@ -326,7 +326,7 @@ export default {
}, 1000),
leftSearch() {
this.leftPages.currentPage = 1
this.getLeftUserList('serve')
this.getLeftUserList('serveCopy')
console.log('leftpages:', this.leftPages)
},
leftCurrentPageChange(current) {
@@ -366,7 +366,7 @@ export default {
}
},
groupNameChange() {
this.getLeftUserList('serve')
this.getLeftUserList('serveCopy')
},
async pushPostAndUser() {
this.pushState = true

View File

@@ -206,7 +206,7 @@
</el-col>
</el-row>
<!-- <serve-detail ref="copy" @back="backIndex" v-show="false"></serve-detail> -->
<!-- <serveCopy-detail ref="copy" @back="backIndex" v-show="false"></serveCopy-detail> -->
<el-drawer
size="85%"
append-to-body
@@ -398,7 +398,7 @@ import workView from "./workMissionView.vue"
import {serviceType} from "@/common/dic";
import Tinymce from "@/components/Tinymce";
import {deepClone} from "@/util/util";
import PushService from "@/views/tenant/main/serve/Dialog/pushService.vue";
import PushService from "@/views/tenant/main/serveCopy/Dialog/pushService.vue";
import TextTooltip from "@/components/text-tooltip/index.vue";
const page = {

View File

@@ -0,0 +1,423 @@
<template>
<!-- 新建分组模板 -->
<el-dialog
:title="title"
append-to-body
:visible.sync="box"
:close-on-click-modal="false"
:close-on-press-escape="false"
@closed="closed"
width="70%"
>
<el-form
:model="form"
@submit.native.prevent
:rules="rules"
ref="groups"
label-position="right"
label-width="100px"
>
<el-collapse v-model="activeNames">
<el-collapse-item title="分组信息" name="1">
<el-form-item style="width: 400px" label="分组名称" prop="groupName">
<el-input v-model="form.groupName" placeholder="请输入 分组名称" size="small" :disabled="loading"
maxlength="40"
show-word-limit></el-input>
</el-form-item>
<el-form-item style="width: 400px" label="分组排序" prop="sort">
<el-input type="number" v-model="form.sort" min="0" placeholder="请输入 分组名称"
size="small"></el-input>
</el-form-item>
</el-collapse-item>
<el-collapse-item title="服务信息" name="2">
<div class="scroll-row">
<el-card class="card-row" shadow="hover" v-for="(item, index) in serveAll" :key="index">
<div :class="`card-row-name ${selectServer.id === item.id && 'color-blue'}`" @click="changeCard(item)">
{{ item.name }}
</div>
<div class="del-btn" @click="delServer(item)">
<i style="font-size: 18px" class="el-icon-circle-close"></i>
</div>
</el-card>
<el-card class="card-row card-add" shadow="hover">
<div class="card-row-name" @click="changeCard(null)">添加<i
class="el-icon-circle-plus-outline"></i></div>
</el-card>
</div>
<div class="car-content" v-if="selectShow">
<el-form-item style="width: 400px" label="服务名称" prop="name">
<el-input v-model="serveForm.name" placeholder="请输入 服务名称" size="small"></el-input>
</el-form-item>
<!-- <el-form-item style="width: 400px" label="机构名称" prop="companyName">-->
<!-- <el-input v-model="serveForm.companyName" placeholder="请输入 机构名称" size="small"></el-input>-->
<!-- </el-form-item>-->
<el-form-item label="服务场景" prop="serveLabels">
<tag-select v-model="serveForm.serveLabels" :prop="{ label: 'name', value: 'name' }" :data="workDataList">
</tag-select>
</el-form-item>
<el-form-item label="政策指南" prop="policyIds">
<el-cascader
style="width: 100%"
size="small"
v-model="serveForm.policyIds"
:options="listAllPolicyTree"
:props="{ expandTrigger: 'hover', multiple: true, label: 'name', value: 'value', children: 'child'}"
@change="handleChange"
filterable
></el-cascader>
</el-form-item>
<el-form-item label="重点人群" prop="talentsGroupId">
<el-select style="width: 100%" v-model="serveForm.talentsGroupId" multiple filterable
placeholder="请输入 重点人群">
<el-option
v-for="item in talentsList"
:key="item.id"
:label="item.groupName"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remarks">
<el-input type="textarea" v-model="serveForm.remarks" placeholder="请输入 备注"
size="small"></el-input>
</el-form-item>
</div>
</el-collapse-item>
</el-collapse>
</el-form>
<div slot="footer" style="text-align:right">
<el-button
type="primary"
size="mini"
icon="el-icon-check"
@click="handleSubmit"
:loading="loading"
>提交
</el-button>
<el-button size="mini" icon="el-icon-circle-close" @click=" box = false" :loading="loading">取消</el-button>
</div>
</el-dialog>
</template>
<script>
import {saveGroupServeInfo, updateDept, updateGroupServeInfo} from "@/api/tenant/serve";
import {deepClone} from "@/util/util";
const prefix = 'custom-'
const initRule = {
groupName: [
{
required: true,
whitespace: true,
message: "请填写分组名称",
trigger: "change",
},
],
}
const initFormValue = {
groupName: "",
sort: 0,
}
const initServeForm = {
companyName: '',
name: '',
serveLabels: [],
policyIds: [],
talentsGroupId: [],
remarks: '',
}
export default {
props: {
treeData: {
type: Array,
default: [],
},
listAllPolicyTree: {
type: Array,
default: [],
},
data: {
type: Array,
default: [],
},
worktypeDic: {
type: Object,
default: {},
},
talentsList: {
type: Array,
default: [],
}
},
data() {
return {
type: "",
title: "",
groupId: "",
loading: false,
box: false,
form: Object.assign({}, initFormValue),
serveForm: Object.assign({}, initServeForm),
rules: Object.assign({}, initRule),
activeNames: ['1', '2'],
serveAll: [],
selectServer: {},
selectShow: false,
selectLabelNameTypes: [],
tempWorkType: [],
tabDataSource: [],
editData: null,
customNum: 1,
};
},
created() {
console.log('watch', this.data)
},
computed: {
workDataList() {
let rel = deepClone(this.data)
for (let i = 0; i < this.tempWorkType.length; i++) {
const key = this.tempWorkType[i];
if (key && !this.worktypeDic.hasOwnProperty(key)) {
rel.push({name: key});
}
}
return rel
},
},
methods: {
closed() {
this.form = {
groupName: "",
};
if (this.$refs.groups) {
this.$refs.groups.resetFields();
}
this.loading = false;
},
openDialog(type, data) {
this.type = type;
if (this.type === "add") {
this.title = "新建分组";
this.form.groupName = '';
// this.form.sort = 0;
this.serveAll = []
this.editData = null
this.box = true;
} else if (this.type === "edit") {
this.title = "编辑分组";
this.groupId = data.id;
this.form.groupName = data.groupName;
// this.form.sort = data.sort;
this.serveAll = data.children
this.editData = data
this.box = true;
}
this.selectShow = false
this.selectServer = {}
this.serveForm = Object.assign({}, initServeForm)
this.customNum = 1
},
async handleSubmit() {
if (this.selectServer.id) {
let copyForm = deepClone(this.serveForm)
let serve = {
...this.selectServer,
...copyForm,
policyIds: copyForm.policyIds ? copyForm.policyIds.join(',') : '',
talentsGroupId: copyForm.talentsGroupId ? copyForm.talentsGroupId.join(',') : '',
serveLabels: copyForm.serveLabels ? copyForm.serveLabels.map((item) => item.name).join(',') : '',
}
if (this.tabDataSource.find((item) => item.id === serve.id)) {
this.tabDataSource = this.tabDataSource.map((item) => {
if (item.id === serve.id) {
return deepClone(serve)
}
return item
})
} else {
this.tabDataSource = [...this.tabDataSource.filter((item) => item.id !== serve.id), deepClone(serve)]
}
}
const serveAll = deepClone(this.serveAll)
const tabDataSource = deepClone(this.tabDataSource)
// prefix
const customList = tabDataSource.filter((item) => /^custom-/ig.test(item.id))
// 替换数据
for (let i = 0; i < tabDataSource.length; i++) {
for (let j = 0; j < serveAll.length; j++) {
if (serveAll[j].id === tabDataSource[i].id) {
serveAll[j] = tabDataSource[i]
break
}
}
}
serveAll.forEach((item) => {
if (/^custom-/ig.test(item.id)) {
delete item.id
}
})
let params, resData
switch (true) {
case this.type === 'add' :
params = {
...this.form,
children: serveAll
}
if (this.form.groupName) {
this.loading = true;
resData = await saveGroupServeInfo(params)
} else {
this.$message.error('请输入分组名称');
}
break
case this.type === 'edit' :
params = {
...this.editData,
...this.form,
children: serveAll
}
if (this.form.groupName) {
this.loading = true;
resData = await updateGroupServeInfo(params)
} else {
this.$message.error('请输入分组名称');
}
}
if (resData.data.code === 200) {
this.$message.success('操作成功!');
this.loading = false;
this.$emit("refresh");
this.box = false;
} else {
this.loading = false;
this.$message.success('操作失败!');
}
},
changeCard(data) {
// 校验
if (this.selectServer.id) {
let copyForm = deepClone(this.serveForm)
let serve = {
...this.selectServer,
...copyForm,
policyIds: copyForm.policyIds ? copyForm.policyIds.join(',') : '',
talentsGroupId: copyForm.talentsGroupId ? copyForm.talentsGroupId.join(',') : '',
serveLabels: copyForm.serveLabels ? copyForm.serveLabels.map((item) => item.name).join(',') : '',
}
if (this.tabDataSource.find((item) => item.id === serve.id)) {
this.tabDataSource = this.tabDataSource.map((item) => {
if (item.id === serve.id) {
return deepClone(serve)
}
return item
})
} else {
this.tabDataSource = [...this.tabDataSource.filter((item) => item.id !== serve.id), deepClone(serve)]
}
}
// 新增
if (!data) {
const fm = {
...Object.assign({}, initServeForm),
name: `自定义服务名${this.customNum}`,
id: `${prefix}${this.customNum}`
}
this.selectShow = true
this.selectServer = fm
this.serveForm = fm
this.tempWorkType = []
this.customNum++
this.serveAll = [...this.serveAll, deepClone(fm)]
this.tabDataSource.push(fm)
return
}
// 回填
let source = deepClone(data)
if (this.tabDataSource.find((item) => item.id === data.id)) {
source = deepClone(this.tabDataSource.filter((item) => (item.id === data.id))[0])
} else {
this.tabDataSource.push(data)
}
this.selectShow = true
this.selectServer = source
this.tempWorkType = source.serveLabels ? source.serveLabels.split(",") : [];
this.serveForm.talentsGroupId = source.talentsGroupId ? source.talentsGroupId.split(',') : []
this.serveForm.serveLabels = source.serveLabels ? source.serveLabels.split(',').map((item) => ({name: item})) : []
const policyIds = this.treeIteration(this.listAllPolicyTree, source.policyIds.split(','))
this.serveForm.policyIds = policyIds
// this.serveForm.companyName = source.companyName
this.serveForm.name = source.name
this.serveForm.remarks = source.remarks
this.serveForm.id = source.id
},
delServer(data) {
this.serveAll = this.serveAll.filter((item) => item.id !== data.id)
this.tabDataSource = this.tabDataSource.filter((item) => item.id !== data.id)
},
handleChange(policy) {
console.log(policy)
this.serveForm.policyIds = policy
},
treeIteration(tree, ids) {
if (!(tree.length && ids.length)) return;
let arr = []
tree.forEach((treeItem) => {
treeItem.child.forEach((item) => {
if (ids.some((id) => item.value === id)) {
arr.push([treeItem.value, item.value])
}
})
})
return arr;
},
},
watch: {}
};
</script>
<style scoped>
.color-blue {
color: blue;
}
.scroll-row {
overflow-x: scroll;
width: 100%;
height: fit-content;
display: -webkit-box;
padding: 10px;
margin-bottom: 10px;
}
.card-row {
width: fit-content;
margin-right: 10px;
display: flex;
align-content: center;
justify-content: center;
text-align: center;
position: relative;
}
.del-btn {
position: absolute;
right: 0;
top: 0;
}
.card-row-name {
width: 100%;
height: 100%;
}
.card-add {
color: #e5e5e5;
}
.car-content {
}
</style>

View File

@@ -333,7 +333,7 @@ export default {
}, 1000),
leftSearch() {
this.leftPages.currentPage = 1
this.getLeftUserList('serve')
this.getLeftUserList('serveCopy')
console.log('leftpages:', this.leftPages)
},
leftCurrentPageChange(current) {
@@ -373,7 +373,7 @@ export default {
}
},
groupNameChange() {
this.getLeftUserList('serve')
this.getLeftUserList('serveCopy')
},
async pushPostAndUser() {
this.pushState = true

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,594 @@
<template>
<el-drawer size="100%" append-to-body title="推送服务" :visible.sync="viewDrawer">
<div>
<div class="content">
<!-- 用户板块 -->
<div class="content-left relative">
<avue-crud height="900" width="500" ref="crud1" :data="leftUserDataList" :option="leftUserOptions"
:page.sync="leftPages"
@current-change="leftCurrentPageChange" @size-change="leftSizePageChange"
@selection-change="leftSelectionChange">
<template slot="menuLeft">
<div class="leftInput">
<el-input size="small" v-model="formInline.userName" class="input-with-select" placeholder="用户名">
<el-select size="small" v-model="formInline.groupId" slot="prepend" class="selectWidth"
placeholder="请选择">
<el-option v-for="item in leftServeOptions" :key="item.id" :label="item.groupName"
:value="item.value">
</el-option>
</el-select>
<el-button size="small" slot="append" class="input-search" @click="leftSearch">搜索</el-button>
</el-input>
</div>
</template>
<template slot="labelsBase" slot-scope="{row}">
<TextTooltip :content="row.labelsBase" length="20"></TextTooltip>
</template>
</avue-crud>
<CustomLoading :visible="leftLoading" size="largeXXL" loading-text="用户数据加载中"></CustomLoading>
</div>
<!-- 操作 -->
<div class="content-center">
<div>
<el-button type="primary" size="small" @click="changeTabs(0)">匹配政策</el-button>
</div>
<div style="margin-top: 30px">
<el-button :disabled="leftUserSelections.length > 0 ? false : true"
type="primary" @click="changeTabs(1)" size="small">匹配岗位
</el-button>
</div>
</div>
<!-- 列表 -->
<div class="content-right relative">
<avue-crud height="900" ref="crud2" :data="rightDataList"
:option="rightTabs ? rightPostOptions : rightPolicyOptions" :page.sync="rightPages"
@current-change="rightCurrentPageChange" @size-change="rightSizePageChange"
@selection-change="rightSelectionChange">
<template slot="menuLeft">
<el-input style="width: 300px" placeholder="搜索岗位" v-show="rightTabs === 1"
prefix-icon="el-icon-search"
@input="searchInputChange" v-model="searchInput" clearable>
</el-input>
</template>
<template slot="labelName" slot-scope="{row}">
<TextTooltip :content="row.labelName" length="40"></TextTooltip>
</template>
<template slot="jobDescription" slot-scope="{row}">
<TextTooltip :content="row.jobDescription" length="40"></TextTooltip>
</template>
<template slot="address" slot-scope="{row}">
<TextTooltip :content="row.address" length="40"></TextTooltip>
</template>
</avue-crud>
<CustomLoading :visible="rightLoading" size="largeXXL" loading-text="智能分析匹配中"></CustomLoading>
</div>
</div>
</div>
<div class="content-footer">
<el-button type="primary" style="width: 80px" size="small" :disabled="pushState" @click="onSubmit">
{{ pushState ? '推送中...' : rightTabs ? '推送岗位' : '推送政策' }}
</el-button>
</div>
</el-drawer>
</template>
<script>
import {
getListByids,
getSearchAll,
getSearchAllByUserId,
pushPolicyUserServe,
pushPostUserServe,
getListAllByPolicy
} from "@/api/tenant/serve.js";
import TextTooltip from "@/components/text-tooltip/index.vue";
import {debounce} from '@/util/util'
import {DateTime} from "@/util/dateTime";
import CustomLoading from "@/components/Custom-Loading/index.vue";
const pages = {pagerCount: 3, total: 0, size: 10, currentPage: 1}
const baseOptions = {
size: 'medium',
dateBtn: false,
addBtn: false,
editBtn: false,
delBtn: false,
height: "auto",
reserveSelection: false,
border: true,
columnBtn: false,
refreshBtn: false,
menu: false,
tip: false,
selection: true,
align: 'center',
}
let leftUserOptions = {
...baseOptions,
column: [
{
label: '机构名称',
prop: 'companyName',
fixed: true,
}, {
label: '姓名',
prop: 'name',
fixed: true,
}, {
label: '姓别',
prop: 'aac004',
type: 'select',
dicUrl: "/api/jobslink-api/system/dict-biz/tadict?code=AAC004",
props: {
label: "dictValue",
value: "dictKey",
},
rules: [
{
required: true,
message: "请输入性别",
trigger: "blur",
},
],
}, {
label: '身份证',
prop: 'idNumber',
width: 150,
}, {
label: '手机号',
prop: 'telphone',
}, {
label: "求职意愿",
prop: "willingJob",
}, {
label: "民族",
prop: "aac005",
type: 'select',
dicUrl: "/api/jobslink-api/system/dict-biz/tadict?code=AAC005",
props: {
label: "dictValue",
value: "dictKey",
},
rules: [
{
required: true,
message: "请输入民族",
trigger: "blur",
},
],
}, {
label: "户口性质",
prop: "aac009",
type: 'select',
dicUrl: "/api/jobslink-api/system/dict-biz/tadict?code=AAC009",
props: {
label: "dictValue",
value: "dictKey",
},
rules: [
{
required: true,
message: "请输入户口性质",
trigger: "blur",
},
],
}, {
label: "户口所在地",
prop: "aac010",
width: 150,
}, {
label: "文化程度",
prop: "aac011",
type: 'select',
dicUrl: "/api/jobslink-api/system/dict-biz/tadict?code=AAC011",
props: {
label: "dictValue",
value: "dictKey",
},
rules: [
{
required: true,
message: "请输入文化程度",
trigger: "blur",
},
],
}, {
label: '个人标签',
prop: 'labelsBase',
width: 150,
slot: true,
},
]
}
let rightPolicyOptions = {
...baseOptions,
column: [{
label: '政策名称',
prop: 'name',
}, {
label: '政策标签',
prop: 'labelName',
slot: true,
}]
}
let rightPostOptions = {
...baseOptions,
column: [
{
label: '岗位名称',
prop: 'jobName',
}, {
label: '用工单位',
prop: 'companyName',
}, {
label: '详细地址',
prop: 'address',
slot: true,
}, {
label: '岗位描述',
prop: 'jobDescription',
slot: true,
}, {
label: "岗位类型",
prop: "type1",
type: "select",
dicData: [
{
value: "0",
label: "零工岗位",
},
{
value: "1",
label: "全职岗位",
},
],
display: false,
hide: true,
},
]
}
export default {
components: {TextTooltip, CustomLoading},
data() {
return {
formInline: {},
leftServeOptions: [],
leftUserDataList: [],
leftUserPages: {},
leftUserSelections: [],
leftPages: Object.assign({}, pages),
leftUserOptions: Object.assign({}, leftUserOptions),
leftLoading: false,
rightLoading: false,
rightDataList: [],
rightDataSelections: [],
rightPages: Object.assign({}, pages),
rightPolicyOptions: Object.assign({}, rightPolicyOptions),
rightPostOptions: Object.assign({}, rightPostOptions),
searchInput: '',
rightTabs: 0, // 0 政策, 1 岗位
pushState: false,
}
},
props: {
visible: Boolean,
rowData: {default: null, type: Function},
changeVisible: {default: null, type: Function},
},
computed: {
viewDrawer: {
get() {
return this.visible;
},
set(val) {
this.$emit("update:visible", val);
},
},
},
watch: {
viewDrawer(val) {
val ? this.onPageLoad() : this.onPageInit()
}
},
methods: {
onPageLoad() {
console.log('row', this.rowData)
if (!this.rowData) return
this.getLeftSignGroupList()
this.getLeftUserList()
// this.getRightListPolicy()
},
onPageInit() {
this.formInline = {}
this.leftServeOptions = []
this.leftUserDataList = []
this.leftUserSelections = []
this.leftUserPages = Object({}, pages)
this.leftPages = Object.assign({}, pages)
this.leftUserOptions = Object.assign({}, leftUserOptions)
this.leftLoading = false
this.rightLoading = false
this.rightDataList = []
this.rightDataSelections = []
this.rightPages = Object.assign({}, pages)
this.rightPolicyOptions = Object.assign({}, rightPolicyOptions)
this.rightPostOptions = Object.assign({}, rightPostOptions)
this.searchInput = ''
this.rightTabs = 0 // 0 政策
this.pushState = false
this.$refs.crud1.selectClear()
this.$refs.crud2.selectClear()
},
changeTabs(type) {
this.rightDataList = []
this.rightTabs = type
this.rightDataSelections = []
this.$message.success('智能分析匹配中');
type === 0 && this.getRightListPolicy()
type === 1 && this.getRightSearchByUserId()
},
searchInputChange: debounce(function (val) {
this.getRightSearch()
}, 1000),
leftSearch() {
this.leftPages.currentPage = 1
this.getLeftUserList('serveCopy')
console.log('leftpages:', this.leftPages)
},
leftCurrentPageChange(current) {
this.leftPages.currentPage = current
this.getLeftUserList()
console.log('leftpages:', this.leftPages)
},
leftSizePageChange(current) {
this.leftPages.size = current
this.getLeftUserList()
console.log('leftpages:', this.leftPages)
},
rightCurrentPageChange(current) {
this.rightPages.currentPage = current
this.rightTabs === 0 && this.getRightListPolicy()
this.rightTabs === 1 && this.getRightSearchByUserId()
},
rightSizePageChange(current) {
this.rightPages.size = current
this.rightTabs === 0 && this.getRightListPolicy()
this.rightTabs === 1 && this.getRightSearchByUserId()
},
leftSelectionChange(val) {
this.leftUserSelections = val
console.log(val, '--------------------00000');
},
rightSelectionChange(val) {
this.rightDataSelections = val
},
onSubmit() {
if (!this.leftUserSelections.length) return this.$message.info('请选择推送用户')
if (!this.rightDataSelections.length) return this.$message.info('请选择推送政策或岗位')
if (this.rightTabs === 0) {
this.pushPolicyAndUser()
} else {
this.pushPostAndUser()
}
},
groupNameChange() {
this.getLeftUserList('serveCopy')
},
async pushPostAndUser() {
this.pushState = true
const createTime = Date.now() + 2000
// console.log(this.rightDataSelections,);
let params = {
serveId: this.rowData.id,
posts: this.rightDataSelections.map((item) => ({id: item.id, type: item.type1, jobName: item.jobName})),
users: this.leftUserSelections.map((item) => ({
idNumber: item.idNumber,
talentsId: item.id,
userId: item.userId,
userName: item.name
}))
}
console.log(params, "999999999999999999999999999");
let resData = await pushPostUserServe(params)
if (resData.data.code === 200) {
const timed = createTime - Date.now() > 0 ? createTime - Date.now() : 0
setTimeout(() => {
this.$message.success('岗位推送成功')
this.$refs.crud1.selectClear()
this.$refs.crud2.selectClear()
this.pushState = false
}, timed)
}
},
async pushPolicyAndUser() {
this.pushState = true
const createTime = Date.now() + 2000
let params = {
serveId: this.rowData.id,
policyIds: this.rightDataSelections.map((item) => item.id),
users: this.leftUserSelections.map((item) => ({
idNumber: item.idNumber,
talentsId: item.id,
userId: item.userId,
userName: item.name
}))
}
let resData = await pushPolicyUserServe(params)
if (resData.data.code === 200) {
const timed = createTime - Date.now() > 0 ? createTime - Date.now() : 0
setTimeout(() => {
this.$message.success('政策推送成功')
this.$refs.crud1.selectClear()
this.$refs.crud2.selectClear()
this.pushState = false
}, timed)
}
},
async getRightSearch() {
let params = {keywords: this.searchInput || '1'}
const createTime = Date.now() + 3000
this.rightLoading = true
let resData = await getSearchAll(params)
if (resData.data.code === 200) {
const timed = createTime - Date.now() > 0 ? createTime - Date.now() : 0
setTimeout(() => {
this.rightLoading = false
this.rightDataList = resData.data.data
}, timed)
}
},
async getRightSearchByUserId() {
const {currentPage, size} = this.rightPages
const idNumbers = this.leftUserSelections.map(item => item.idNumber).join(',');
const willingJobs = this.leftUserSelections.map(item => item.willingJob);
const createTime = Date.now() + 3000
this.rightLoading = true
let params = {
idNumbers,
current: currentPage,
size,
}
let paramsBody = {
willingJobs: willingJobs
}
console.log(params, paramsBody)
let resData = await getSearchAllByUserId(params, paramsBody)
if (resData.data.code === 200) {
const timed = createTime - Date.now() > 0 ? createTime - Date.now() : 0
setTimeout(() => {
const {records, total, size, current} = resData.data.data
this.rightLoading = false
this.rightDataList = records
this.rightPages = {total, size, currentPage: current}
}, timed)
}
},
async getRightListPolicy() {
const {currentPage, size} = this.rightPages
let params = {
ids: this.rowData.policyIds,
current: currentPage,
size,
}
const createTime = Date.now() + 3000
this.rightLoading = true
let resData = await getListByids(params)
if (resData.data.code === 200) {
const timed = createTime - Date.now() > 0 ? createTime - Date.now() : 0
setTimeout(() => {
// const {records, total, size, current} = resData.data.data
this.rightLoading = false
// this.rightDataList = records
// this.rightPages = {total, size, currentPage: current}
this.rightPages = {total: resData.data.data.length, currentPage: 1}
this.rightDataList = resData.data.data
}, timed)
}
},
async getLeftUserList(type) {
const {currentPage, size} = this.leftPages
const createTime = Date.now() + 3000
let params = {
...this.formInline,
current: currentPage,
size,
labels: this.rowData.talentsNames.join(','),
talentsGroupId: this.rowData.talentsGroupId
}
console.log('params', params)
// params.labels = '未分组'
this.leftLoading = true
let resData = await getListAllByPolicy(params)
if (resData.data.code === 200) {
const timed = createTime - Date.now() > 0 ? createTime - Date.now() : 0
setTimeout(() => {
const {records, total, size, current} = resData.data.data
this.leftUserDataList = records
this.leftPages = {total, size, currentPage: current}
console.log('leftpages:', this.leftPages)
this.leftLoading = false
}, timed)
}
},
async getLeftSignGroupList() {
const arr = this.rowData.talentsNames.map((v) => ({groupName: v, value: v}))
this.leftServeOptions = [{groupName: '全部'}, ...arr]
// let params = { labels: this.rowData.talentsNames.join(',') }
// params.labels = '未分组'
// let resData = await getListAllByPolicy(params)
// if ( resData.data.code === 200 ) {
// this.leftServeOptions = [{groupName: '全部', value: ''}, ...resData.data.data]
// }
}
}
}
</script>
<style lang="scss" scoped>
.content {
display: grid;
grid-template-columns: calc(50% - 40px) 80px calc(50% - 80px);
grid-gap: 20px;
.content-left {
}
.content-center {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
.content-right {
//修改动画的大小 给文字加粗效果
.right-search {
width: 100%;
}
}
.leftInput {
width: 500px;
.selectWidth {
width: 160px !important;
}
.el-input__inner {
width: 300px;
}
.input-search {
margin-right: -15px;
margin-bottom: -10px;
}
}
}
/deep/ .el-loading-spinner {
font-size: 80px;
font-weight: bold;
}
/deep/ .el-loading-spinner .circular {
width: 80px;
height: 80px;
}
.content-footer {
float: right;
}
.relative {
position: relative;
}
</style>

File diff suppressed because it is too large Load Diff

View File

@@ -93,6 +93,21 @@
<span v-else>{{ row.name }}<span style="color: red;">未实名</span></span> -->
</template>
<template slot-scope="{row}" slot="menu">
<el-button type="text"
icon="el-icon-document"
size="small"
@click="serveLog(row)"
>查看日志
</el-button>
<el-button type="text"
icon="el-icon-circle-check"
size="small"
@click="checkUserInfo(row)"
>剔除
</el-button>
</template>
<!--/自定义按钮-->
<template slot="menuRight">
<el-button
@@ -106,6 +121,37 @@
</template>
</avue-crud>
<el-drawer
title="服务日志"
size="80%"
:append-to-body="true"
:before-close="handleCloseLog"
:visible.sync="innerDrawerLog">
<!-- <div>
<span>姓名</span>
<span>身份证号</span>
</div> -->
<avue-crud
:data="logDataSource"
:option="logOption"
:page.sync="logPage"
:table-loading="loadingLog"
@row-save="saveLog"
@row-update="saveUpdateLog"
@row-del="removeLog"
@size-change="logSizeChange"
@current-change="logCurrentChange"
>
<!-- <template slot="menuLeft">
<el-button @click="addNewLog" icon="el-icon-plus" type="primary" size="mini">添加</el-button>
</template>
<template slot="menu" slot-scope="{row}">
<el-button type="text" @click="editLogInfo(row.id)" icon="el-icon-edit" size="mini">修改</el-button>
<el-button type="text" @click="editLogInfo(row.id)" icon="el-icon-edit" size="mini">查看附件</el-button>
</template> -->
</avue-crud>
</el-drawer>
<!--批量导入-->
<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"
@@ -125,6 +171,28 @@
<transfer-groups ref="transferGroups" @refresh="refresh" :ids="ids"></transfer-groups>
<!--/转移分组dialog-->
<resume ref="resume" v-show="false"></resume>
<PromptDialog
:visible="dialogFlag"
title="剔除"
:back-btn-hide="false"
submit-text=" "
sub-title="请核对人员信息后再进行审核通过剔除该用户将从人群中删除在人员服务日志中可见"
:tips="[
'人员信息描述不清晰或过于简单;',
'人员信息存在违法违规行为;',
'人员信息的薪资、福利等待遇不符合市场标准;',
]"
@onClose="dialogFlag = false; backInput = ''"
@onConfirm="diaLogConfirm"
>
<template v-slot:header>
<div class="input_box" style="margin-top: 20px">
<el-input type="textarea" v-model="backInput" placeholder="请输入备注"></el-input>
</div>
</template>
</PromptDialog>
</basic-container>
<ied ref="ied"></ied>
</el-col>
@@ -140,7 +208,9 @@ import {
detail,
getDept,
removeDept,
upload, getDeptMyTree,
upload,
getDeptMyTree,
talentsEliminate
} from "@/api/tenant/talents";
import {getWorkTypes, getLabelList} from "@/api/tenant/common";
import {mapGetters} from "vuex";
@@ -152,7 +222,14 @@ import {getTemplate, getTemplateRecommendExportList} from "@/api/resource/templa
import ied from "@/views/util/import-error-dialog";
import {excelAccept} from "@/common/accept";
import TextTooltip from '@/components/text-tooltip'
import {addServeLog, getMainServeUserLog, removeServeLog, updateServeLog} from "@/api/tenant/serve";
import PromptDialog from "@/components/promptDialog/index.vue";
let page = {
pageSize: 10,
currentPage: 1,
total: 0,
}
export default {
filters: {
ellipsis(value) {
@@ -166,6 +243,8 @@ export default {
name: "tenant_talents",
data() {
return {
dialogFlag: false,
dialogInfo: null,
downloadButton: false,
activeNames: "1",
isIndeterminate: false,
@@ -196,9 +275,15 @@ export default {
obj: {},
depTree: [],
excelForm: {isCovered: 1},
logPage: Object.assign({}, page),
logDataSource: [],
loadingLog: false,
innerDrawerLog: false,
selectUserServeLog: null,
backInput: ''
};
},
components: {addGroups, transferGroups, Resume, ied, TextTooltip},
components: {addGroups, transferGroups, Resume, ied, TextTooltip, PromptDialog},
watch: {},
computed: {
...mapGetters(["permission"]),
@@ -256,6 +341,7 @@ export default {
searchShow: true,
viewBtn: true,
searchMenuSpan: 6,
menuWidth: 170,
border: true,
index: false,
indexLabel: "序号",
@@ -549,6 +635,45 @@ export default {
}
return rel;
},
logOption() {
return {
editBtn: true,
delBtn: true,
addBtn: true,
viewBtn: true,
border: true,
index: true,
indexLabel: "序号",
refreshBtn: false,
dialogType: "drawer",
addBtnText: "新增日志",
height: '100',
column: [{
label: '服务时间',
prop: 'createTime',
type: 'date',
format: "yyyy-MM-dd",
valueFormat: "yyyy-MM-dd HH:mm:ss",
}, {
label: '服务发起人',
prop: 'fromName',
display: false,
}, {
label: '服务对象',
prop: 'toName',
display: false,
}, {
label: '服务主题',
prop: 'serveTheme'
}, {
label: '服务内容',
prop: 'serveContent'
}, {
label: '备注说明',
prop: 'bak1'
}]
}
}
},
created() {
this.initDept();
@@ -557,6 +682,33 @@ export default {
this.getDept()
},
methods: {
checkUserInfo(row) {
this.dialogInfo = row
this.dialogFlag = true
},
diaLogConfirm() {
if (!this.backInput) {
return this.$message.info('请输入剔除备注');
}
const params = {
idNumber: this.dialogInfo.idNumber,
content: this.backInput,
name: this.dialogInfo.name,
}
this.$confirm("确定将选择数据剔除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
return talentsEliminate(params);
})
.then(() => {
this.onLoad(this.page, this.query);
this.dialogFlag = false
this.$message.success('操作成功');
});
},
handleExport() {
this.downloadButton = true
// 0 潜在 1 已认定
@@ -1035,6 +1187,95 @@ export default {
this.selectionClear();
});
},
async saveLog(row, index, done, loading) {
let params = {
...row,
serveId: this.selectUserServeLog.serveId,
serveUserId: this.selectUserServeLog.serveUserId,
talentsId: this.selectUserServeLog.id,
idNumber: this.selectUserServeLog.idNumber,
toName: this.selectUserServeLog.name,
fromName: this.userInfo.real_name
}
console.log(params)
let resData = await addServeLog(params)
done()
if (resData.data.code === 200) {
this.$message({
type: "success",
message: "添加成功!",
});
this.serveLog(this.selectUserServeLog)
}
},
async saveUpdateLog(row, index, done, loading) {
let params = {
id: row.id,
createTime: row.createTime,
fromName: row.fromName,
toName: row.toName,
serveTheme: row.serveTheme,
serveContent: row.serveContent,
bak1: row.bak1,
}
let resData = await updateServeLog(params)
done()
if (resData.data.code === 200) {
this.$message({
type: "success",
message: "修改成功!",
});
this.serveLog(this.selectUserServeLog)
}
},
removeLog(row, index, done, loading) {
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
return removeServeLog({ids: row.id});
})
.then(() => {
this.serveLog(this.selectUserServeLog)
this.$message({
type: "success",
message: "操作成功!",
});
});
},
handleCloseLog() {
this.innerDrawerLog = false
},
logSizeChange(pageSize) {
this.logPage.pageSize = pageSize;
this.serveLog(this.selectUserServeLog)
},
logCurrentChange(currentPage) {
this.logPage.currentPage = currentPage;
this.serveLog(this.selectUserServeLog)
},
serveLog(row) {
console.log('服务日志', row)
this.selectUserServeLog = row
this.loadingLog = true
getMainServeUserLog({
idNumber: row.idNumber,
current: this.logPage.currentPage,
size: this.logPage.pageSize
}).then(res => {
this.loadingLog = false
const {records, current, size, total} = res.data.data
this.logDataSource = records
this.innerDrawerLog = true
this.logPage = {
pageSize: size,
currentPage: current,
total: total,
}
})
},
},
};
</script>

View File

@@ -101,8 +101,7 @@
:disabled="downloadButton"
@click="handleExport"
>导出
</el-button
>
</el-button>
</template>
<template slot-scope="{row}" slot="menu">
<el-button type="text"
@@ -111,6 +110,12 @@
@click="serveLog(row)"
>查看日志
</el-button>
<el-button type="text"
icon="el-icon-circle-check"
size="small"
@click="checkUserInfo(row)"
>审核
</el-button>
</template>
</avue-crud>
@@ -141,6 +146,7 @@
:data="logDataSource"
:option="logOption"
:page.sync="logPage"
:table-loading="loadingLog"
@row-save="saveLog"
@row-update="saveUpdateLog"
@row-del="removeLog"
@@ -163,6 +169,36 @@
<transfer-groups ref="transferGroups" @refresh="refresh" :ids="ids"></transfer-groups>
<!--/转移分组dialog-->
<resume ref="resume" v-show="false"></resume>
<PromptDialog
:visible="dialogFlag"
title="审核"
:back-btn-status="1"
submit-text=" "
sub-title="请核对人员信息后再进行审核通过通过将在已认定人群可见驳回该用户将从人群中删除在人员服务日志中可见"
:tips="[
'人员信息描述不清晰或过于简单;',
'人员信息存在违法违规行为;',
'人员信息的薪资、福利等待遇不符合市场标准;',
]"
@onClose="dialogFlag = false; GroupValue = ''"
@onCancel="diaLogCancel"
@onConfirm="diaLogConfirm"
>
<template v-slot:header>
<div class="input_box" style="margin-top: 20px">
<el-select style="width: 100%" clearable v-model="GroupValue" placeholder="请选择分组 (驳回不用选择此项)">
<el-option
v-for="item in selecTreeData"
:key="item.id"
:label="item.groupName"
:value="item.id">
</el-option>
</el-select>
</div>
</template>
</PromptDialog>
</basic-container>
<ied ref="ied"></ied>
</el-col>
@@ -179,7 +215,8 @@ import {
getDept,
removeDept,
upload,
getDeptMyTree
getDeptMyTree,
talentsApproval, talentsEliminate
} from "@/api/tenant/talents";
import {getWorkTypes, getLabelList} from "@/api/tenant/common";
import {mapGetters} from "vuex";
@@ -193,6 +230,7 @@ import {excelAccept} from "@/common/accept";
import TextTooltip from '@/components/text-tooltip'
import {exportList} from "@/api/workstation/post";
import {addServeLog, getMainServeUserLog, removeServeLog, updateServeLog} from "@/api/tenant/serve";
import PromptDialog from "@/components/promptDialog/index.vue";
let page = {
pageSize: 10,
@@ -212,6 +250,8 @@ export default {
name: "tenant_talents",
data() {
return {
dialogFlag: false,
dialogInfo: null,
downloadButton: false,
activeNames: "1",
isIndeterminate: false,
@@ -231,6 +271,7 @@ export default {
page: Object.assign({}, page),
logPage: Object.assign({}, page),
logDataSource: [],
loadingLog: false,
innerDrawerLog: false,
selectUserServeLog: null,
tempWorkType: [],
@@ -242,9 +283,11 @@ export default {
data: [],
obj: {},
excelForm: {isCovered: 1},
selecTreeData: [],
GroupValue: ''
};
},
components: {addGroups, transferGroups, Resume, ied, TextTooltip},
components: {addGroups, transferGroups, Resume, ied, TextTooltip, PromptDialog},
watch: {},
computed: {
...mapGetters(["permission", "userInfo"]),
@@ -301,6 +344,7 @@ export default {
searchBtn: true,
searchShow: true,
viewBtn: true,
menuWidth: 170,
searchMenuSpan: 6,
border: true,
index: false,
@@ -655,11 +699,72 @@ export default {
},
created() {
this.initDept();
this.groupTypeDept()
// this.getWorkTypes();
this.getLabelList();
this.getDept()
},
methods: {
groupTypeDept() {
getDept({groupType: 1}).then((res) => {
this.selecTreeData = res.data.data.list;
});
},
checkUserInfo(row) {
this.dialogInfo = row
this.dialogFlag = true
},
diaLogCancel(value) {
if (value) {
let params = {
idNumber: this.dialogInfo.idNumber,
id: this.dialogInfo.id,
approvalStatus: 1,
content: value,
}
this.$confirm("确定将选择数据驳回?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
return talentsApproval(params);
})
.then(() => {
this.onLoad(this.page, this.query);
this.dialogFlag = false
this.$message.success('操作成功');
});
} else {
this.$message.error("请填写驳回原因");
}
},
diaLogConfirm(value) {
if (this.GroupValue) {
let params = {
idNumber: this.dialogInfo.idNumber,
id: this.dialogInfo.id,
approvalStatus: 0,
content: value,
groupId: this.GroupValue
}
this.$confirm("确定通过?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
return talentsApproval(params);
})
.then(() => {
this.onLoad(this.page, this.query);
this.dialogFlag = false
this.$message.success('操作成功');
});
} else {
this.$message.error("请选择分组");
}
},
handleExport() {
this.downloadButton = true
// 0 潜在 1 已认定
@@ -1186,17 +1291,17 @@ export default {
serveLog(row) {
console.log('服务日志', row)
this.selectUserServeLog = row
this.loadingLog = true
getMainServeUserLog({
idNumber: row.id,
idNumber: row.idNumber,
current: this.logPage.currentPage,
size: this.logPage.pageSize
}).then(res => {
let _this = this;
this.loadingLog = false
const {records, current, size, total} = res.data.data
console.log(records, total)
_this.logDataSource = records
_this.innerDrawerLog = true
_this.logPage = {
this.logDataSource = records
this.innerDrawerLog = true
this.logPage = {
pageSize: size,
currentPage: current,
total: total,

View File

@@ -15,14 +15,77 @@
@size-change="sizeChange"
class="customPage"
>
<!--自定义列-->
<template slot="labelsBase" slot-scope="{ row }">
<el-tooltip effect="dark" placement="top">
<div slot="content" v-for="(item,index) in row.labelsBaseArr" :key="index">{{ item }}<br/></div>
<div>{{ row.labelsBase | ellipsis }}</div>
</el-tooltip>
</template>
<template slot-scope="{row}" slot="menu">
<el-button type="text"
icon="el-icon-document"
size="small"
@click="serveLog(row)"
>查看日志
</el-button>
<el-button type="text"
icon="el-icon-document"
size="small"
@click="addServeLog(row)"
>新增日志
</el-button>
</template>
</avue-crud>
</basic-container>
<el-drawer
title="服务日志"
size="80%"
:append-to-body="true"
:before-close="handleCloseLog"
:visible.sync="innerDrawerLog">
<!-- <div>
<span>姓名</span>
<span>身份证号</span>
</div> -->
<avue-crud
:data="logDataSource"
:option="logOption"
:page.sync="logPage"
:table-loading="loadingLog"
@row-save="saveLog"
@row-update="saveUpdateLog"
@row-del="removeLog"
@size-change="logSizeChange"
@current-change="logCurrentChange"
>
<!-- <template slot="menuLeft">
<el-button @click="addNewLog" icon="el-icon-plus" type="primary" size="mini">添加</el-button>
</template>
<template slot="menu" slot-scope="{row}">
<el-button type="text" @click="editLogInfo(row.id)" icon="el-icon-edit" size="mini">修改</el-button>
<el-button type="text" @click="editLogInfo(row.id)" icon="el-icon-edit" size="mini">查看附件</el-button>
</template> -->
</avue-crud>
</el-drawer>
<el-drawer
title="新增"
size="60%"
:append-to-body="true"
:before-close="() => innerDrawerAddLog = false"
:visible.sync="innerDrawerAddLog">
<avue-form ref="form" :option="logOption" v-model="logValues" @submit="handleSubmitLog"/>
</el-drawer>
</el-row>
</template>
<script>
import {mapGetters} from "vuex";
import {getList} from "@/api/tenant/personnelserve";
import {isvalidatemobile} from "@/util/validate";
import {getDept, getDeptMyTree} from "@/api/tenant/talents";
import {addServeLog, getMainServeUserLog, removeServeLog, updateServeLog} from "@/api/tenant/serve";
const page = {
pageSize: 10,
@@ -36,6 +99,7 @@ const baseOptions = {
editBtn: false,
delBtn: false,
height: "auto",
menuWidth: 130,
reserveSelection: false,
border: true,
columnBtn: false,
@@ -48,16 +112,33 @@ const baseOptions = {
searchLabelWidth: 60,
}
export default {
filters: {
ellipsis(value) {
if (!value) return "";
if (value.length > 15) {
return value.slice(0, 14) + "...";
}
return value;
},
},
data() {
return {
loading: false,
dataSource: [],
crudValues: {},
page: Object.assign({}, page)
depTree: [],
page: Object.assign({}, page),
treeData: [],
logPage: Object.assign({}, page),
logDataSource: [],
loadingLog: false,
innerDrawerLog: false,
innerDrawerAddLog: false,
logValues: {}
}
},
computed: {
...mapGetters(["permission"]),
...mapGetters(["permission", "userInfo"]),
permissionList() {
return {
addBtn: this.vaildData(this.permission.tenant_main_talents_latent_index_add, false),
@@ -67,30 +148,308 @@ export default {
};
},
option() {
const self = this;
const IdCardNo = (rule, value, callback) => {
// if (check18IdCardNo(value)) {
callback();
// } else {
// callback(new Error("身份证格式不正确"));
// }
};
const validateTel = (rule, value, callback) => {
if (isvalidatemobile(value)[0]) {
callback(new Error(isvalidatemobile(value)[1]));
} else {
callback();
}
};
return {
...baseOptions,
column: [
{
label: "所属机构",
prop: "createDept",
type: "tree",
multiple: false,
dicData: this.depTree,
props: {
label: "title",
value: 'value'
},
checkStrictly: true,
span: 24,
search: true,
searchLabelWidth: 80,
change: this.deptChange
},
{
label: "姓名",
prop: "name",
// search: true,
span: 24,
rules: [
{
required: true,
whitespace: true,
message: "请输入姓名",
trigger: "blur",
},
],
search: true,
searchSpan: 6,
},
{
label: "姓别",
prop: "aac004",
type: 'select',
dicUrl: "/api/jobslink-api/system/dict-biz/tadict?code=AAC004",
props: {
label: "dictValue",
value: "dictKey",
},
rules: [
{
required: true,
message: "请输入性别",
trigger: "blur",
},
],
span: 24,
},
{
label: "身份证",
prop: "idNumber",
// hide: true,
span: 24,
rules: [
{required: true, message: "请输入身份证号", trigger: "blur"},
{trigger: "blur", validator: IdCardNo},
],
search: true,
searchSpan: 6,
},
{
label: "手机号",
prop: "phone",
prop: "telphone",
span: 24,
hide: false,
rules: [
{
required: true,
validator: validateTel,
trigger: "blur",
},
]
],
},
{
label: "民族",
prop: "aac005",
type: 'select',
dicUrl: "/api/jobslink-api/system/dict-biz/tadict?code=AAC005",
props: {
label: "dictValue",
value: "dictKey",
},
rules: [
{
required: true,
message: "请输入民族",
trigger: "blur",
},
],
span: 24,
},
{
label: "户口性质",
prop: "aac009",
type: 'select',
dicUrl: "/api/jobslink-api/system/dict-biz/tadict?code=AAC009",
props: {
label: "dictValue",
value: "dictKey",
},
rules: [
{
required: true,
message: "请输入户口性质",
trigger: "blur",
},
],
span: 24,
},
{
label: "户口所在地",
prop: "aac010",
// hide: true,
span: 24,
rules: [
{required: true, message: "请输入口所在地", trigger: "blur"},
],
},
{
label: "文化程度",
prop: "aac011",
type: 'select',
dicUrl: "/api/jobslink-api/system/dict-biz/tadict?code=AAC011",
props: {
label: "dictValue",
value: "dictKey",
},
rules: [
{
required: true,
message: "请输入文化程度",
trigger: "blur",
},
],
span: 24,
},
{
label: "经办时间",
prop: "aae036",
display: false,
span: 24,
rules: [
{required: true, message: "请输入经办时间", trigger: "blur"},
],
},
{
label: "用户类型",
prop: "userId",
type: "select",
dicData: [
{
value: "0",
label: "未注册用户",
},
{
value: "1",
label: "已注册用户",
},
],
display: false,
hide: true,
// search: true
},
{
label: "分组",
prop: "groupId",
type: "tree",
span: 24,
display: true,
dicData: self.treeData,
props: {
label: "groupName",
value: "id",
},
rules: [
{
required: true,
message: "请选择分组",
trigger: "change",
},
],
placeholder: "请选择 分组",
},
{
label: "标签名称",
prop: "labelsBase",
rules: [
{
required: true,
message: "请选择标签名称",
trigger: ["blur"],
},
],
slot: true,
formslot: true,
span: 24,
},
{
label: "备注",
prop: "remarks",
type: "textarea",
slot: true,
hide: true,
span: 24,
maxlength: 100,
showWordLimit: true,
},
],
}
},
logOption() {
return {
editBtn: true,
delBtn: true,
addBtn: true,
viewBtn: true,
border: true,
index: true,
indexLabel: "序号",
refreshBtn: false,
dialogType: "drawer",
addBtnText: "新增日志",
height: '100',
column: [{
label: '服务时间',
prop: 'createTime',
type: 'date',
format: "yyyy-MM-dd",
valueFormat: "yyyy-MM-dd HH:mm:ss",
}, {
label: '服务发起人',
prop: 'fromName',
display: false,
}, {
label: '服务对象',
prop: 'toName',
display: false,
}, {
label: '服务主题',
prop: 'serveTheme'
}, {
label: '服务内容',
prop: 'serveContent'
}, {
label: '备注说明',
prop: 'bak1'
}]
}
}
},
created() {
this.getDept()
this.initDept()
this.onLoad(this.page, this.query)
},
methods: {
async getDept() {
let params = {
tenantId: '000000'
}
let resData = await getDeptMyTree(params)
if (resData.data.code === 200) {
this.depTree = resData.data.data
}
},
initDept(groupId) {
getDept({groupType: 0}).then((res) => {
const data = res.data.data.list;
this.treeData = data;
let treeDataOne = {
companyId: "",
createTime: "",
groupName: "全部",
id: "",
remarks: "",
sort: '',
sumNum: res.data.data.sum,
type: '',
};
this.treeData.unshift(treeDataOne);
this.loading = false;
});
},
searchChange(params, done) {
this.query = params;
this.page.currentPage = 1;
@@ -109,24 +468,139 @@ export default {
this.page.pageSize = pageSize;
this.onLoad(this.page, this.query);
},
logSizeChange(pageSize) {
this.logPage.pageSize = pageSize;
this.serveLog(this.selectUserServeLog);
},
logCurrentChange(currentPage) {
this.logPage.currentPage = currentPage;
this.serveLog(this.selectUserServeLog);
},
onLoad(page, params = {}) {
const {releaseTimeRange} = params;
let values = {
...params,
let paramsed = {
currentPage: page.currentPage,
pageSize: page.pageSize,
...this.query
};
this.loading = true;
getList(
page.currentPage,
page.pageSize,
Object.assign(values, this.query)
).then((res) => {
const {total, records, page} = res.data.data
this.page.total = total;
// this.page.currentPage = page
getList(paramsed).then((res) => {
const {total, size, current, records, page} = res.data.data
this.dataSource = records;
this.loading = false;
this.page = {
pageSize: size,
currentPage: current,
total: total,
}
});
},
serveLog(row) {
console.log('服务日志', row)
this.selectUserServeLog = row
this.loadingLog = true
getMainServeUserLog({
idNumber: row.idNumber,
current: this.logPage.currentPage,
size: this.logPage.pageSize
}).then(res => {
this.loadingLog = false
const {records, current, size, total} = res.data.data
this.logDataSource = records
this.innerDrawerLog = true
this.logPage = {
pageSize: size,
currentPage: current,
total: total,
}
})
},
addServeLog(row) {
this.selectUserServeLog = row
this.innerDrawerAddLog = true
},
async handleSubmitLog(row, done) {
let params = {
...row,
serveId: this.selectUserServeLog.serveId,
serveUserId: this.selectUserServeLog.serveUserId,
talentsId: this.selectUserServeLog.id,
idNumber: this.selectUserServeLog.idNumber,
toName: this.selectUserServeLog.name,
fromName: this.userInfo.real_name
}
console.log(params)
let resData = await addServeLog(params)
done()
if (resData.data.code === 200) {
this.$message({
type: "success",
message: "添加成功!",
});
this.innerDrawerAddLog = false
}
},
async saveLog(row, index, done, loading) {
let params = {
...row,
serveId: this.selectUserServeLog.serveId,
serveUserId: this.selectUserServeLog.serveUserId,
talentsId: this.selectUserServeLog.id,
idNumber: this.selectUserServeLog.idNumber,
toName: this.selectUserServeLog.name,
fromName: this.userInfo.real_name
}
console.log(params)
let resData = await addServeLog(params)
done()
if (resData.data.code === 200) {
this.$message({
type: "success",
message: "添加成功!",
});
this.serveLog(this.selectUserServeLog)
}
},
async saveUpdateLog(row, index, done, loading) {
let params = {
id: row.id,
createTime: row.createTime,
fromName: row.fromName,
toName: row.toName,
serveTheme: row.serveTheme,
serveContent: row.serveContent,
bak1: row.bak1,
}
let resData = await updateServeLog(params)
done()
if (resData.data.code === 200) {
this.$message({
type: "success",
message: "修改成功!",
});
this.serveLog(this.selectUserServeLog)
}
},
removeLog(row, index, done, loading) {
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
return removeServeLog({ids: row.id});
})
.then(() => {
this.serveLog(this.selectUserServeLog)
this.$message({
type: "success",
message: "操作成功!",
});
});
},
handleCloseLog() {
this.innerDrawerLog = false
},
}
}

View File

@@ -24,7 +24,7 @@ module.exports = {
port: 1888,
proxy: {
"/api": {
target: 'http://10.165.0.173:8000',
target: 'http://192.168.1.105:8000',
ws: true,
changeOrigin: true,
pathRewrite: {