This commit is contained in:
2022-09-07 16:12:00 +08:00
parent 385631583a
commit 860ca6a099
6 changed files with 741 additions and 83 deletions

8
src/api/expert/expert.js Normal file
View File

@ -0,0 +1,8 @@
import request from '@/utils/request'
// 企业审核列表列表
export function expertList() {
return request({
url: "/business/casExpert/list",
method: "get",
});
}

View File

@ -0,0 +1,107 @@
<template>
<div class="app-container">
<div style="width: 50%">
<ExpertForm
v-model="form"
:showTitle="true"
:formType="formType"
:labelWidth="140"
ref="expertFormRef"
/>
</div>
<el-button @click="submitForm('2')">审批拒绝</el-button>
<el-button type="primary" @click="submitForm('1')">审批通过</el-button>
</div>
</template>
<script setup name="EnterpriseAdd">
import ExpertForm from "@/views/components/ExpertForm/indexcopy.vue";
import tab from "@/plugins/tab";
import {
companyAdd,
companyDetail,
companyEdit,
} from "@/api/dataList/enterprise";
import { reactive, toRefs } from "vue";
import { useRoute, useRouter } from "vue-router";
import { ElMessage } from "element-plus";
const router = useRouter();
const route = useRoute();
const formType = ref(2);
const expertFormRef = ref(null);
const data = reactive({
form: {
image: undefined,
name: undefined,
tenantId: undefined,
province: undefined, // 省code
city: undefined, // 市code
district: undefined, // 区code
address: undefined, // 详细地址
product: undefined,
kind: undefined,
code: undefined,
inviterCode: undefined,
url: undefined,
industrys: [],
keywords: [],
directions: [],
introduce: undefined,
license: undefined,
examineStatus:''
},
});
const { form } = toRefs(data);
const cancel = () => {
router.back();
tab.closeOpenPage();
};
const submitForm = async (state) => {
const valid = await expertFormRef.value.validateForm();
if (valid) {
if (form.value.id != undefined) {
form.value.examineStatus=state
await companyEdit(form.value);
cancel();
ElMessage.success("修改成功");
} else {
await companyAdd(form.value);
cancel();
ElMessage.success("新增成功");
}
} else {
console.log("校验未通过");
}
};
const getDetailById = async () => {
if (route.query.id) {
const { data } = await companyDetail(route.query.id);
form.value = data;
}
};
getDetailById();
</script>
<!-- <script>
export default {
components: {
ExpertForm,
},
data() {
return {
// formType: 2,
// labelWidth: 140,
};
},
methods: {},
created() {
const { id } = this.$route.query;
if (id) {
companyDetail({ id }).then((res) => {
form.value = res.data;
});
}
},
};
</script> -->

View File

@ -195,7 +195,13 @@ const delList=async (id)=>{
.catch(() => {});
getList()
}
//
const handleDetail = (id) => {
router.push({
path: "/approval/dataList/add",
query: { id },
});
};
getList()
getSiteList()
</script>

View File

@ -0,0 +1,502 @@
<template>
<el-form
ref="formRef"
:model="modelValue"
:rules="rules"
:label-width="labelWidth + 'px'"
>
<div class="form_title" v-if="showTitle">基本信息</div>
<el-row>
<el-col :span="24">
<el-form-item :label="imageName" prop="image">
<ImageUpload v-model="modelValue.image" :fileSize="2" :limit="1" />
</el-form-item>
</el-col>
</el-row>
<el-row v-if="formType == 2">
<el-col :span="24">
<el-form-item :label="nameName" prop="name">
<el-input
v-model="modelValue.name"
:disabled="isAdd ? false : true"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="formType == 2">
<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="modelValue.code" :disabled="!isAdd"></el-input>
</el-col>
<el-col :span="3">
<el-button type="primary" @click="" :disabled="!isAdd"
>查找</el-button
>
</el-col>
</el-row>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="formType == 2">
<el-col :span="24">
<el-form-item label="企业类型:" prop="kind">
<el-select v-model="modelValue.kind" placeholder="请选择">
<el-option
v-for="item in enterpriseOptions"
:key="item.key"
:label="item.value"
:value="item.key"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="核心成果核心产品:" prop="product">
<el-input v-model="modelValue.product"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="formType == 1">
<el-col :span="12">
<el-form-item label="姓名:" prop="name">
<el-input
v-model="modelValue.name"
:disabled="isAdd ? false : true"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="手机号:" prop="mobile">
<el-input
v-model="modelValue.mobile"
:disabled="isAdd ? false : true"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="所属站点:" prop="tenantId">
<SiteOptions v-model="modelValue.tenantId" :site-list="siteList" />
</el-form-item>
</el-col>
</el-row>
<el-row v-if="formType == 1">
<el-col :span="12">
<el-form-item label="所属单位:" prop="researchId">
<el-select
v-model="modelValue.researchId"
filterable
placeholder="请选择"
@change="setLaboratory"
>
<el-option
v-for="item in researchOptions"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属实验室:">
<el-select
v-model="modelValue.laboratory_id"
filterable
placeholder="请选择"
>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<CityOptions
v-model="modelValue"
:labelWidth="labelWidth"
ref="cityFormRef"
/>
<el-row>
<el-col :span="24">
<el-form-item label="详细地址:">
<el-input v-model="modelValue.address"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="formType == 1">
<el-col :span="24">
<el-form-item label="毕业院校:" prop="school">
<el-input v-model="modelValue.school"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="formType == 1">
<el-col :span="12">
<el-form-item label="最高学历:" prop="education">
<el-select v-model="modelValue.education" placeholder="请选择">
<el-option
v-for="item in educationOptions"
:key="item.text"
:label="item.text"
:value="item.text"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="主修专业:" prop="major">
<el-input v-model="modelValue.major"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="formType == 1">
<el-col :span="12">
<el-form-item label="职务:" prop="job">
<el-input v-model="modelValue.job"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="职称:" prop="title">
<el-input v-model="modelValue.title"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="formType == 1">
<el-col :span="12">
<el-form-item label="从业时间:" prop="workAt">
<el-date-picker
v-model="modelValue.workAt"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择日期"
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="性别:" prop="gender">
<el-radio v-model="modelValue.gender" :label="1">男</el-radio>
<el-radio v-model="modelValue.gender" :label="2">女</el-radio>
</el-form-item>
</el-col>
</el-row>
<FieldOptions
v-model="modelValue"
:labelWidth="labelWidth"
ref="fieldFormRef"
/>
<InputBoxAdd
:labelWidth="labelWidth"
v-model="modelValue"
title="关键词"
placeholder="应用场景关键词+技术产品关键词"
fieldKey="keywords"
ref="keywordsFormRef"
/>
<InputBoxAdd
v-if="formType != 2"
:labelWidth="labelWidth"
v-model="modelValue"
title="研究方向"
placeholder="请输入研究方向"
fieldKey="researchs"
ref="researchsFormRef"
/>
<InputBoxAdd
v-if="formType == 2"
:labelWidth="labelWidth"
v-model="modelValue"
title="生产方向"
placeholder="请输入生产方向"
fieldKey="directions"
ref="directionsFormRef"
/>
<el-row v-if="formType == 2">
<el-col :span="24">
<el-form-item label="邀请码:">
<el-input
v-model="modelValue.inviterCode"
:disabled="!isAdd"
></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="企业网站:">
<el-input v-model="modelValue.url"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="formType == 2">
<el-col :span="24">
<el-form-item label="营业执照:" prop="license">
<ImageUpload
v-model="modelValue.license"
:isShowTip="false"
:limit="1"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item :label="introduceName" prop="introduce">
<el-input
v-if="formType == 1"
v-model="modelValue.introduce"
type="textarea"
:autosize="{ minRows: 2, maxRows: 6 }"
/>
<WangEditor v-else v-model="modelValue.introduce" minHeight="150px" />
<!-- <Editor
v-else
v-model="modelValue.introduce"
:minHeight="150"
ref="introduceRef"
@click.native="handleEditAble"
/> -->
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
<script setup name="ExpertForm">
import CityOptions from "@/views/components/CityOptions";
// import FieldOptions from "@/views/components/FieldOptions";
import InputBoxAdd from "@/views/components/InputBoxAdd";
import { researchSelect } from "@/api/dataList/research";
import { laboratorySelect } from "@/api/dataList/laboratory";
import { tenantSelect } from "@/api/subPlatform/tenant";
import { enterpriseOptions } from "@/utils/parameter";
import { reactive, ref, toRefs } from "vue";
import WangEditor from "../../../components/WangEditor/index.vue";
import SiteOptions from "@/views/components/SiteOptions";
import FieldOptions from "@/views/components/FieldOptions";
const props = defineProps({
modelValue: { type: Object },
isAdd: {
type: Boolean,
default: true,
},
showTitle: {
type: Boolean,
default: false,
},
formType: {
type: Number,
default: 1,
},
labelWidth: {
type: Number,
default: 120,
},
});
const { formType, modelValue, labelWidth, showTitle, isAdd } = toRefs(props);
const cityFormRef = ref(null);
const formRef = ref(null);
const keywordsFormRef = ref(null);
const researchsFormRef = ref(null);
const fieldFormRef = ref(null);
const directionsFormRef = ref([]);
const researchOptions = ref([]);
const options = ref([]);
const siteList = ref([]);
const data = reactive({
rules: {
product: [{ required: true, message: "请输入", trigger: "blur" }],
name: [{ required: true, message: "请输入", trigger: "blur" }],
kind: [{ required: true, message: "请选择", trigger: "change" }],
code: [{ required: true, message: "请输入", trigger: "blur" }],
mobile: [
{ required: true, message: "请输入", trigger: "blur" },
{
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: "请输入正确的手机号码",
trigger: "blur",
},
],
researchId: [{ required: true, message: "请选择", trigger: "change" }],
tenantId: [
{
required: true,
message: "请选择",
trigger: ["blur", "change"],
},
],
school: [{ required: true, message: "请输入", trigger: "blur" }],
education: [{ required: true, message: "请选择", trigger: "change" }],
major: [{ required: true, message: "请输入", trigger: "blur" }],
job: [{ required: true, message: "请输入", trigger: "blur" }],
title: [{ required: true, message: "请输入", trigger: "blur" }],
workAt: [
{
required: true,
message: "从业时间不能为空",
trigger: ["change", "blur"],
},
],
license: [
{
required: true,
message: "请上传",
trigger: ["blur", "change"],
},
],
introduce: [{ required: true, message: "请输入", trigger: "blur" }],
},
});
const { rules } = toRefs(data);
const introduceName = computed(() => {
if (formType.value === 1) {
return "个人简介:";
} else if (formType.value === 2) {
return "单位简介:";
} else {
return "";
}
});
const imageName = computed(() => {
if (formType.value === 1) {
return "专家头像:";
} else if (formType.value === 2) {
return "企业logo:";
} else {
return "";
}
});
const nameName = computed(() => {
if (formType.value === 2) {
return "单位名称:";
} else {
return "";
}
});
const validateForm = async () => {
let formValid;
try {
formValid = await formRef.value.validate();
} catch (error) {
formValid = false;
}
const cityFormValid = await cityFormRef.value.validateForm();
const fieldFormValid = await fieldFormRef.value.validateForm();
const keywordsFormValid = await keywordsFormRef.value.validateForm();
if (formType.value == 1) {
//个人
const researchsFormValid = await researchsFormRef.value.validateForm(); // 研究方向验证
return (
formValid &&
cityFormValid &&
fieldFormValid &&
keywordsFormValid &&
researchsFormValid
);
} else if (formType.value == 2) {
//企业
const directionsFormValid = await directionsFormRef.value.validateForm(); //生产方向验证
return (
formValid &&
cityFormValid &&
fieldFormValid &&
keywordsFormValid &&
directionsFormValid
);
} else {
throw "未知的formType";
}
};
// 获取站点列表
const getSiteList = async () => {
const resp = await tenantSelect();
siteList.value = resp.rows;
};
getSiteList();
defineExpose({
validateForm,
});
</script>
<!-- <script>
export default {
data() {
return {};
},
watch: {
"modelmodelValue.tenantId"(newOld) {
console.log(newOld);
if (newOld) {
if (this.formType == 1) {
// this.formType == 1 专家表单
// 获取所属单位-研究机构options
researchSelect({ tenantId: newOld }).then(({ data }) => {
this.researchOptions = data;
});
}
} else {
this.researchOptions = [];
if (this.modelmodelValue.researchId) this.modelmodelValue.researchId = undefined;
}
},
},
mounted() {
console.log(this.formType);
if (this.formType != 1) {
// 取消富文本自动聚焦
this.$nextTick(() => {
this.$refs.introduceRef.Quill.enable(false);
});
}
},
methods: {
// 富文本聚焦
handleEditAble() {
this.$refs.introduceRef.Quill.enable(true);
this.$refs.introduceRef.Quill.focus();
},
setLaboratory(e) {
laboratorySelect({ researchId: e }).then((res) => {
console.log(res);
});
},
},
};
</script> -->
<style lang="scss" scoped>
.form_title {
font-weight: 700;
margin-bottom: 30px;
}
</style>

View File

@ -1,82 +0,0 @@
<template>
<div class="app-container">
<div style="width: 50%">
<ExpertForm
v-model="form"
:showTitle="true"
:formType="formType"
:labelWidth="140"
ref="expertFormRef"
/>
</div>
<el-button @click="cancel">取消</el-button>
<el-button type="primary" @click="submitForm">提交</el-button>
</div>
</template>
<script setup name="EnterpriseAdd">
import ExpertForm from "@/views/components/ExpertForm";
import tab from "@/plugins/tab";
import {
companyAdd,
companyDetail,
companyEdit,
} from "@/api/dataList/enterprise";
import { reactive, toRefs } from "vue";
import { useRoute, useRouter } from "vue-router";
import { ElMessage } from "element-plus";
const router = useRouter();
const route = useRoute();
const formType = ref(2);
const expertFormRef = ref(null);
const data = reactive({
form: {
image: undefined,
name: undefined,
tenantId: undefined,
province: undefined, // 省code
city: undefined, // 市code
district: undefined, // 区code
address: undefined, // 详细地址
product: undefined,
kind: undefined,
code: undefined,
inviterCode: undefined,
url: undefined,
industrys: [],
keywords: [],
directions: [],
introduce: undefined,
license: undefined,
},
});
const { form } = toRefs(data);
const cancel = () => {
router.back();
tab.closeOpenPage();
};
const submitForm = async () => {
const valid = await expertFormRef.value.validateForm();
if (valid) {
if (form.value.id != undefined) {
await companyEdit(form.value);
cancel();
ElMessage.success("修改成功");
} else {
await companyAdd(form.value);
cancel();
ElMessage.success("新增成功");
}
} else {
console.log("校验未通过");
}
};
const getDetailById = async () => {
if (route.query.id) {
const { data } = await companyDetail(route.query.id);
form.value = data;
}
};
getDetailById();
</script>

View File

@ -0,0 +1,117 @@
<template>
<div class="app-container">
<!-- 顶部搜索区域 -->
<el-form :model="queryData" :inline="true">
<el-form-item label="专家姓名">
<el-input style="width: 150px;" v-model="queryData.name" placeholder="请输入关键字"></el-input>
</el-form-item>
<el-form-item label="审核状态">
<el-select style="width: 100px;" v-model="queryData.examineStatus" class="m-2" placeholder="请选择" >
<el-option
label="已审核"
:value="1"
/>
<el-option
label="已拒绝"
:value="2"
/>
</el-select>
</el-form-item>
<el-form-item label="站点">
<SiteOptions v-model="queryData.tenantId" :site-list="siteList" style="width:160px;"/>
</el-form-item>
<el-form-item style="float: right;">
<el-button
type="primary"
icon="search"
size="default"
@click="handleQuery"
>搜索</el-button
>
<el-button icon="refresh" size="default"
@click="resetQuery"
>重置</el-button
>
</el-form-item>
</el-form>
<!--表格区域-->
<!-- <el-table :data="dataList" style="width: 100%" border >
<el-table-column prop="name" label="企业名称" align="center"/>
<el-table-column prop="code" label="统一社会信用代码" align="center"/>
<el-table-column label="所属领域" align="center">
<template #default="{ row }">
<div>{{ row.industrys[row.industrys.length - 1] }}</div>
</template>
</el-table-column>
<el-table-column prop="" label="站点" align="center">
<template #default="{ row }">
{{ siteList.find((el) => el.id === row.tenantId)?.name ?? "无" }}
</template>
</el-table-column>
<el-table-column prop="address" label="所在地" align="center"/>
<el-table-column prop="examineStatus" label="审核状态" align="center">
<template #default="{row}">
{{row.examineStatus==='1'?'已通过':'已拒绝'}}
</template>
</el-table-column>
<el-table-column prop="kind" label="企业类型" align="center">
<template #default="{ row }">
<div>
{{ enterpriseOptions.find((e) => row.kind == e.key).value }}
</div>
</template>
</el-table-column>
<el-table-column prop="createdAt" label="申请时间" align="center"/>
<el-table-column prop="" label="操作" width="200px" align="center">
<template #default="{row}">
<el-button
size="small"
type="text"
@click="handleDetail(row.id)"
>审核</el-button
>
</template>
</el-table-column>
</el-table> -->
<!-- 分页器 -->
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryData.pageNum"
v-model:limit="queryData.page_size"
@pagination="getList"
/>
</div>
</template>
<script setup>
import SiteOptions from "@/views/components/SiteOptions";
import {expertList} from '@/api/expert/expert'
const data=reactive({
queryData:{
pageNum:1,
pageSize:10,
examineStatus:''
}
})
const total = ref(0);
const dataList=ref([])
const { queryData } = toRefs(data);
// 获取专家列表
const getList=async ()=>{
const res=await expertList(queryData.value)
dataList.value=res.rows
total.value=res.total
}
// 获取站点列表
const getSiteList = async () => {
const resp = await tenantSelect();
siteList.value = resp.rows;
};
getList()
getSiteList()
</script>
<style></style>