科研机构审核列表

This commit is contained in:
熊丽君
2022-01-26 13:29:49 +08:00
parent 916ee5515b
commit 30e01df9ae
9 changed files with 437 additions and 131 deletions

View File

@ -0,0 +1,42 @@
import request from '@/utils/request'
// 专家列表
export function expertList(data) {
return request({
url: '/admin/v1/manage/expert',
method: 'post',
data,
})
}
// 专家信息添加
export function expertAdd(data) {
return request({
url: '/admin/v1/manage/expert/add',
method: 'post',
data,
})
}
// 专家详细信息
export function expertDetail(data) {
return request({
url: '/admin/v1/manage/expert/detail',
method: 'post',
data,
})
}
// 专家信息修改
export function expertEdit(data) {
return request({
url: '/admin/v1/manage/expert/edit',
method: 'post',
data,
})
}
// 专家审核操作
export function expertExamine(data) {
return request({
url: '/admin/v1/manage/expert/examine',
method: 'post',
data,
})
}

View File

@ -0,0 +1,10 @@
import request from '@/utils/request'
// 实验室筛选信息
export function laboratorySelect(data) {
return request({
url: '/admin/v1/laboratory/select',
method: 'post',
data,
})
}

View File

@ -1,34 +1,34 @@
import request from '@/utils/request' import request from '@/utils/request'
// 专家审核列表 // // 专家审核列表
export function expertList(data) { // export function expertList(data) {
return request({ // return request({
url: '/admin/v1/manage/expert', // url: '/admin/v1/manage/expert',
method: 'post', // method: 'post',
data, // data,
}) // })
} // }
// 专家详细信息 // // 专家详细信息
export function expertDetail(data) { // export function expertDetail(data) {
return request({ // return request({
url: '/admin/v1/manage/expert/detail', // url: '/admin/v1/manage/expert/detail',
method: 'post', // method: 'post',
data, // data,
}) // })
} // }
// 专家审核操作 // // 专家审核操作
export function expertExamine(data) { // export function expertExamine(data) {
return request({ // return request({
url: '/admin/v1/manage/expert/examine', // url: '/admin/v1/manage/expert/examine',
method: 'post', // method: 'post',
data, // data,
}) // })
} // }
// 专家信息添加 // // 专家信息添加
export function expertAdd(data) { // export function expertAdd(data) {
return request({ // return request({
url: '/admin/v1/manage/expert/add', // url: '/admin/v1/manage/expert/add',
method: 'post', // method: 'post',
data, // data,
}) // })
} // }

View File

@ -17,7 +17,7 @@ module.exports = {
/** /**
* 是否显示 tagsView * 是否显示 tagsView
*/ */
tagsView: false, tagsView: true,
/** /**
* 是否固定头部 * 是否固定头部

View File

@ -1,19 +1,41 @@
<template> <template>
<el-form ref="form" :model="value" :rules="rules" label-width="100px"> <el-form ref="form" :model="value" :rules="rules" label-width="100px">
<div class="form_title" v-if="showTitle">基本信息</div>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="专家头像:" prop="image"> <el-form-item :label="imageName" prop="image">
<ImageUpload <ImageUpload v-model="value.image" :fileSize="2" :limit="1" />
v-model="value.image"
:isShowTip="true"
:fileSize="2"
:limit="1"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row v-if="formType == 3">
<el-col :span="24">
<el-form-item label="机构名称:" prop="name">
<el-input
v-model="value.name"
:disabled="isAdd ? false : true"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="formType == 3">
<el-col :span="24">
<el-form-item label="机构代码:" prop="code">
<el-row type="flex" justify="space-between">
<el-col :span="20">
<el-input v-model="value.code"></el-input>
</el-col>
<el-col :span="3">
<el-button type="primary" @click="" disabled>查找</el-button>
</el-col>
</el-row>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="formType == 1">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="姓名:" prop="name"> <el-form-item label="姓名:" prop="name">
<el-input <el-input
@ -33,18 +55,27 @@
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="24">
<el-form-item label="所属站点:" prop="tenant_id">
<SiteOptions :size="''" :limitWidth="false" v-model="value" />
</el-form-item>
</el-col>
</el-row>
<el-row v-if="formType == 1">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="所属单位:" prop="research_id"> <el-form-item label="所属单位:" prop="research_id">
<el-select <el-select
v-model="value.research_id" v-model="value.research_id"
filterable filterable
placeholder="请选择" placeholder="请选择"
@change="setLaboratory"
> >
<el-option <el-option
v-for="item in options" v-for="item in researchOptions"
:key="item.value" :key="item.id"
:label="item.label" :label="item.name"
:value="item.value" :value="item.id"
> >
</el-option> </el-option>
</el-select> </el-select>
@ -69,14 +100,6 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row>
<el-col :span="24">
<el-form-item label="所属站点:" prop="tenant_id">
<SiteOptions :size="''" :limitWidth="false" v-model="value" />
</el-form-item>
</el-col>
</el-row>
<CityOptions v-model="value" ref="cityForm" /> <CityOptions v-model="value" ref="cityForm" />
<el-row> <el-row>
@ -87,7 +110,7 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row v-if="formType == 1">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="毕业院校:" prop="school"> <el-form-item label="毕业院校:" prop="school">
<el-input v-model="value.school"></el-input> <el-input v-model="value.school"></el-input>
@ -95,7 +118,7 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row v-if="formType == 1">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="最高学历:" prop="education"> <el-form-item label="最高学历:" prop="education">
<el-select v-model="value.education" placeholder="请选择"> <el-select v-model="value.education" placeholder="请选择">
@ -116,7 +139,7 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row v-if="formType == 1">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="职务:" prop="job"> <el-form-item label="职务:" prop="job">
<el-input v-model="value.job"></el-input> <el-input v-model="value.job"></el-input>
@ -129,7 +152,7 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row v-if="formType == 1">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="从业时间:" prop="work_at"> <el-form-item label="从业时间:" prop="work_at">
<el-date-picker <el-date-picker
@ -152,6 +175,7 @@
<FieldOptions v-model="value" ref="fieldForm" /> <FieldOptions v-model="value" ref="fieldForm" />
<InputBoxAdd <InputBoxAdd
v-if="formType == 1"
v-model="value" v-model="value"
title="关键词" title="关键词"
placeholder="应用场景关键词+技术产品关键词" placeholder="应用场景关键词+技术产品关键词"
@ -165,15 +189,29 @@
fieldKey="researchs" fieldKey="researchs"
ref="researchsForm" ref="researchsForm"
/> />
<el-row v-if="formType == 3">
<el-col :span="24">
<el-form-item label="营业执照:" prop="license">
<ImageUpload v-model="value.license" :isShowTip="false" :limit="1" />
</el-form-item>
</el-col>
</el-row>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="个人简介:" prop="introduce"> <el-form-item :label="introduceName" prop="introduce">
<el-input <el-input
v-if="formType == 1"
v-model="value.introduce" v-model="value.introduce"
type="textarea" type="textarea"
:autosize="{ minRows: 2, maxRows: 6 }" :autosize="{ minRows: 2, maxRows: 6 }"
/> />
<Editor
v-model="value.introduce"
:minHeight="150"
ref="introduceRef"
@click.native="handleEditAble"
v-if="formType == 3"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -183,6 +221,8 @@
import CityOptions from "@/views/components/CityOptions"; import CityOptions from "@/views/components/CityOptions";
import FieldOptions from "@/views/components/FieldOptions"; import FieldOptions from "@/views/components/FieldOptions";
import InputBoxAdd from "@/views/components/InputBoxAdd"; import InputBoxAdd from "@/views/components/InputBoxAdd";
import { researchSelect } from "@/api/dataList/research";
import { laboratorySelect } from "@/api/dataList/laboratory";
export default { export default {
components: { components: {
CityOptions, CityOptions,
@ -195,50 +235,93 @@ export default {
type: Boolean, type: Boolean,
default: true, default: true,
}, },
showTitle: {
type: Boolean,
default: false,
},
formType: {
type: Number,
default: 1,
},
},
computed: {
introduceName() {
let str = "";
switch (this.formType) {
case 1:
str = "个人简介:";
break;
case 2:
str = ":";
break;
case 3:
str = "机构简介:";
break;
case 4:
str = ":";
break;
case 5:
str = ":";
break;
default:
break;
}
return str;
},
imageName() {
let str = "";
switch (this.formType) {
case 1:
str = "专家头像:";
break;
case 2:
str = "企业logo:";
break;
case 3:
str = "机构logo:";
break;
case 4:
str = ":";
break;
case 5:
str = ":";
break;
default:
break;
}
return str;
},
}, },
data() { data() {
return { return {
researchOptions: [],
options: [ options: [
{ // { value: "", label: "" }
value: "选项1",
label: "黄金糕",
},
{
value: "选项2",
label: "双皮奶",
},
], ],
rules: { rules: {
name: [{ required: true, message: "名称不能为空", trigger: "blur" }], name: [{ required: true, message: "请输入", trigger: "blur" }],
code: [{ required: true, message: "请输入", trigger: "blur" }],
mobile: [ mobile: [
{ required: true, message: "手机号不能为空", trigger: "blur" }, { required: true, message: "请输入", trigger: "blur" },
{ {
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: "请输入正确的手机号码", message: "请输入正确的手机号码",
trigger: "blur", trigger: "blur",
}, },
], ],
research_id: [ research_id: [{ required: true, message: "请选择", trigger: "change" }],
{ required: true, message: "请选择所属单位", trigger: "change" },
],
tenant_id: [ tenant_id: [
{ {
required: true, required: true,
message: "请选择所属站点", message: "请选择",
trigger: ["blur", "change"], trigger: ["blur", "change"],
}, },
], ],
school: [ school: [{ required: true, message: "请输入", trigger: "blur" }],
{ required: true, message: "毕业院校不能为空", trigger: "blur" }, education: [{ required: true, message: "请选择", trigger: "change" }],
], major: [{ required: true, message: "请输入", trigger: "blur" }],
education: [ job: [{ required: true, message: "请输入", trigger: "blur" }],
{ required: true, message: "请选择所最高学历", trigger: "change" }, title: [{ required: true, message: "请输入", trigger: "blur" }],
],
major: [
{ required: true, message: "主修专业不能为空", trigger: "blur" },
],
job: [{ required: true, message: "职务不能为空", trigger: "blur" }],
title: [{ required: true, message: "职称不能为空", trigger: "blur" }],
work_at: [ work_at: [
{ {
required: true, required: true,
@ -246,31 +329,86 @@ export default {
trigger: ["change", "blur"], trigger: ["change", "blur"],
}, },
], ],
introduce: [ license: [
{ required: true, message: "个人简介不能为空", trigger: "blur" }, {
required: true,
message: "请上传",
trigger: ["blur", "change"],
},
], ],
introduce: [{ required: true, message: "请输入", trigger: "blur" }],
}, },
}; };
}, },
watch: {
"value.tenant_id"(newOld) {
console.log(newOld);
if (newOld) {
if (this.formType == 1) {
// this.formType == 1 专家表单
// 获取所属单位-研究机构options
researchSelect({ tenant_id: newOld }).then(({ data }) => {
this.researchOptions = data;
});
}
} else {
this.researchOptions = [];
if (this.value.research_id) this.value.research_id = undefined;
}
},
},
mounted() {
console.log(this.formType);
if (this.formType != 1) {
// 取消富文本自动聚焦
this.$nextTick(() => {
this.$refs.introduceRef.Quill.enable(false);
});
}
},
methods: { methods: {
// 富文本聚焦
handleEditAble() {
this.$refs.introduceRef.Quill.enable(true);
this.$refs.introduceRef.Quill.focus();
},
setLaboratory(e) {
laboratorySelect({ research_id: e }).then((res) => {
console.log(res);
});
},
submitForm() { submitForm() {
let flag = false; let flag = false;
if (this.formType == 1) {
this.$refs["form"].validate((valid) => { this.$refs["form"].validate((valid) => {
const cityForm = this.$refs.cityForm.submitForm(); const cityForm = this.$refs.cityForm.submitForm(); // 城市
const fieldForm = this.$refs.fieldForm.submitForm(); const fieldForm = this.$refs.fieldForm.submitForm(); // 所属领域
const keywordsForm = this.$refs.keywordsForm.submitForm(); const keywordsForm = this.$refs.keywordsForm.submitForm(); // 关键词
const researchsForm = this.$refs.researchsForm.submitForm(); const researchsForm = this.$refs.researchsForm.submitForm(); // 研究方向
if (cityForm && fieldForm && keywordsForm && researchsForm) { if (cityForm && fieldForm && keywordsForm && researchsForm) {
console.log(true);
flag = !flag; flag = !flag;
} }
}); });
} else {
this.$refs["form"].validate((valid) => {
const cityForm = this.$refs.cityForm.submitForm();
const fieldForm = this.$refs.fieldForm.submitForm();
const researchsForm = this.$refs.researchsForm.submitForm();
if (cityForm && fieldForm && researchsForm) {
flag = !flag;
}
});
}
return flag; return flag;
}, },
}, },
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.form_title {
font-weight: 700;
margin-bottom: 30px;
}
// 上传图片框限制 // 上传图片框限制
// ::v-deep .el-upload--picture-card { // ::v-deep .el-upload--picture-card {
// width: 120px; // width: 120px;

View File

@ -0,0 +1,76 @@
<template>
<div class="app-container">
<div style="width: 50%">
<ExpertForm
v-model="form"
:showTitle="true"
:formType="formType"
ref="expertForm"
/>
</div>
<el-button @click="$router.go(-1)">取消</el-button>
<el-button type="primary" @click="submitForm">提交</el-button>
</div>
</template>
<script>
import ExpertForm from "@/views/components/ExpertForm";
import {
researchAdd,
researchDetail,
researchEdit,
} from "@/api/dataList/research";
export default {
components: {
ExpertForm,
},
data() {
return {
formType: 3,
form: {
id: undefined,
image: undefined,
name: undefined,
code: undefined,
tenant_id: undefined,
province: undefined, // 省code
city: undefined, // 市code
district: undefined, // 区code
address: undefined, // 详细地址
industrys: [], // 领域
researchs: [], // 研究方向
license: undefined, // 营业执照地址
introduce: undefined, // 介绍
},
};
},
methods: {
submitForm() {
if (this.$refs.expertForm.submitForm()) {
if (this.form.id != undefined) {
researchEdit(this.form).then((response) => {
this.$store.dispatch("tagsView/delView", this.$route);
this.$router.go(-1);
this.$modal.msgSuccess("修改成功");
});
} else {
researchAdd(this.form).then((res) => {
this.$store.dispatch("tagsView/delView", this.$route);
this.$router.go(-1);
this.$modal.msgSuccess("新增成功");
});
}
} else {
console.log("校验未通过");
}
},
},
created() {
const { id } = this.$route.query;
if (id) {
researchDetail({ id }).then((res) => {
this.form = res.data;
});
}
},
};
</script>

View File

@ -3,6 +3,7 @@
<el-form <el-form
:model="queryParams" :model="queryParams"
ref="queryForm" ref="queryForm"
v-show="showSearch"
:inline="true" :inline="true"
label-width="68px" label-width="68px"
> >
@ -16,7 +17,7 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="审核状态" prop="examine_status"> <!-- <el-form-item label="审核状态" prop="examine_status">
<el-select <el-select
v-model="queryParams.examine_status" v-model="queryParams.examine_status"
placeholder="审核状态" placeholder="审核状态"
@ -29,7 +30,7 @@
<el-option label="审核通过" :value="2" /> <el-option label="审核通过" :value="2" />
<el-option label="审核拒绝" :value="3" /> <el-option label="审核拒绝" :value="3" />
</el-select> </el-select>
</el-form-item> </el-form-item> -->
<el-form-item label="所属站点" prop="tenant_id" v-if="is_super"> <el-form-item label="所属站点" prop="tenant_id" v-if="is_super">
<SiteOptions v-model="queryParams" /> <SiteOptions v-model="queryParams" />
</el-form-item> </el-form-item>
@ -48,25 +49,53 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-table v-loading="loading" :data="userList"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button
>
</el-col>
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="dataList">
<el-table-column label="数据编号" align="center" width="150" prop="id" /> <el-table-column label="数据编号" align="center" width="150" prop="id" />
<el-table-column label="机构名称" align="center" prop="name" /> <el-table-column label="机构名称" align="center" prop="name" />
<el-table-column label="统一社会信用代码" align="center" prop="code" />
<el-table-column <el-table-column
label="统一社会信用代码" label="研究方向"
align="center"
prop="researchs"
show-overflow-tooltip
>
<template slot-scope="scope">
<div>{{ scope.row.researchs.join(";") }}</div>
</template>
</el-table-column>
<el-table-column
label="研究领域"
align="center" align="center"
prop="industrys" prop="industrys"
/> show-overflow-tooltip
>
<template slot-scope="scope">
<div>{{ scope.row.industrys[scope.row.industrys.length - 1] }}</div>
</template>
</el-table-column>
<el-table-column <el-table-column
label="主要研究方向" label="所在地"
align="center" align="center"
prop="research_name" prop="address"
show-overflow-tooltip
/> />
<el-table-column
label="主要研究领域"
align="center"
prop="laboratory_name"
/>
<el-table-column label="所在地" align="center" prop="address" />
<el-table-column label="站点" align="center" prop="area" /> <el-table-column label="站点" align="center" prop="area" />
<el-table-column label="申请时间" align="center" prop="created_at"> <el-table-column label="申请时间" align="center" prop="created_at">
<template slot-scope="scope"> <template slot-scope="scope">
@ -76,12 +105,11 @@
<el-table-column label="操作" align="center"> <el-table-column label="操作" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
:disabled="scope.row.examine_status != 1"
size="mini" size="mini"
type="text" type="text"
icon="el-icon-edit" icon="el-icon-edit"
@click="handleDetail(scope.row.id)" @click="handleEdit(scope.row.id)"
>审核</el-button >修改</el-button
> >
</template> </template>
</el-table-column> </el-table-column>
@ -104,12 +132,13 @@ export default {
data() { data() {
return { return {
is_super: this.$store.getters.is_super, is_super: this.$store.getters.is_super,
showSearch: true,
// 遮罩层 // 遮罩层
loading: true, loading: true,
// 总条数 // 总条数
total: 0, total: 0,
// 机构表格数据 // 机构表格数据
userList: null, dataList: null,
// 查询参数 // 查询参数
queryParams: { queryParams: {
page_num: 1, page_num: 1,
@ -125,7 +154,7 @@ export default {
getList() { getList() {
this.loading = true; this.loading = true;
researchList(this.queryParams).then((response) => { researchList(this.queryParams).then((response) => {
// this.userList = response.data.data; this.dataList = response.data.data;
this.total = response.data.count; this.total = response.data.count;
this.loading = false; this.loading = false;
}); });
@ -141,11 +170,17 @@ export default {
this.resetForm("queryForm"); this.resetForm("queryForm");
this.handleQuery(); this.handleQuery();
}, },
handleDetail(id) { handleAdd() {
console.log(id);
this.$router.push({ this.$router.push({
path: "/examine/expertDetail", path: "/dataList/researchAdd",
query: { id }, });
},
handleEdit(id) {
this.$router.push({
path: "/dataList/researchAdd",
query: {
id,
},
}); });
}, },
}, },

View File

@ -9,7 +9,7 @@
</template> </template>
<script> <script>
import ExpertForm from "@/views/components/ExpertForm"; import ExpertForm from "@/views/components/ExpertForm";
import { expertDetail, expertExamine } from "@/api/examine/expert"; import { expertDetail, expertEdit, expertExamine } from "@/api/dataList/expert";
export default { export default {
components: { components: {
ExpertForm, ExpertForm,
@ -43,6 +43,7 @@ export default {
}, },
methods: { methods: {
submitForm(status) { submitForm(status) {
console.log(this.form);
if (this.$refs.expertForm.submitForm()) { if (this.$refs.expertForm.submitForm()) {
const str = const str =
status == 2 status == 2
@ -56,6 +57,8 @@ export default {
inputType: "textarea", inputType: "textarea",
}) })
.then(({ value }) => { .then(({ value }) => {
expertEdit(this.form).then((res) => {
if (res.code == 200) {
const query = { const query = {
id: this.form.id, id: this.form.id,
status, status,
@ -66,6 +69,8 @@ export default {
this.$router.go(-1); this.$router.go(-1);
this.$modal.msgSuccess("处理成功"); this.$modal.msgSuccess("处理成功");
}); });
}
});
}) })
.catch(() => {}); .catch(() => {});
} else { } else {

View File

@ -19,7 +19,7 @@
<el-form-item label="审核状态" prop="examine_status"> <el-form-item label="审核状态" prop="examine_status">
<el-select <el-select
v-model="queryParams.examine_status" v-model="queryParams.examine_status"
placeholder="审核状态" placeholder="请选择审核状态"
clearable clearable
size="small" size="small"
style="width: 240px" style="width: 240px"
@ -58,7 +58,7 @@
show-overflow-tooltip show-overflow-tooltip
> >
<template slot-scope="scope"> <template slot-scope="scope">
<div>{{ scope.row.industrys[0] }}</div> <div>{{ scope.row.industrys[scope.row.industrys.length - 1] }}</div>
<!-- <div v-for="item in scope.row.industrys" :key="item">{{ item }}</div> --> <!-- <div v-for="item in scope.row.industrys" :key="item">{{ item }}</div> -->
</template> </template>
</el-table-column> </el-table-column>
@ -111,7 +111,7 @@
</template> </template>
<script> <script>
import { expertList } from "@/api/examine/expert"; import { expertList } from "@/api/dataList/expert";
export default { export default {
data() { data() {