bug fix and performance improvements
This commit is contained in:
@ -2,93 +2,110 @@ import request from "@/utils/request";
|
||||
|
||||
// 公司企业列表
|
||||
export function companyList(params) {
|
||||
return request({
|
||||
url: "/business/enterprise/list",
|
||||
method: "get",
|
||||
params,
|
||||
});
|
||||
return request({
|
||||
url: "/business/enterprise/list",
|
||||
method: "get",
|
||||
params,
|
||||
});
|
||||
}
|
||||
|
||||
// 公司企业信息添加
|
||||
export function companyAdd(data) {
|
||||
return request({
|
||||
url: "/business/enterprise",
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
return request({
|
||||
url: "/business/enterprise",
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
// 公司企业信息删除
|
||||
export function companyDelete(ids) {
|
||||
return request({
|
||||
url: `/business/enterprise/${ids}`,
|
||||
method: "delete",
|
||||
});
|
||||
return request({
|
||||
url: `/business/enterprise/${ids}`,
|
||||
method: "delete",
|
||||
});
|
||||
}
|
||||
|
||||
// 公司企业详细信息
|
||||
export function companyDetail(id) {
|
||||
return request({
|
||||
url: `/business/enterprise/${id}`,
|
||||
method: "get",
|
||||
});
|
||||
return request({
|
||||
url: `/business/enterprise/${id}`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
// 公司企业信息修改
|
||||
export function companyEdit(data) {
|
||||
return request({
|
||||
url: "/business/enterprise",
|
||||
method: "put",
|
||||
data,
|
||||
});
|
||||
return request({
|
||||
url: "/business/enterprise",
|
||||
method: "put",
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
export const companyExport = () => {
|
||||
return request({
|
||||
url: "/business/enterprise/export",
|
||||
method: "get",
|
||||
});
|
||||
return request({
|
||||
url: "/business/enterprise/export",
|
||||
method: "get",
|
||||
});
|
||||
};
|
||||
|
||||
// 公司企业分配账号
|
||||
export function allocateAccount(data) {
|
||||
return request({
|
||||
url: "/business/enterprise/allocateAccount",
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
return request({
|
||||
url: "/business/enterprise/allocateAccount",
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
// 公司企业获取账号
|
||||
export function getAccount(id) {
|
||||
return request({
|
||||
url: `/business/enterprise/getAccount/${id}`,
|
||||
method: "get",
|
||||
});
|
||||
return request({
|
||||
url: `/business/enterprise/getAccount/${id}`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
// 公司企业重置密码
|
||||
export function restPassword(id, password) {
|
||||
return request({
|
||||
url: `/business/enterprise/restPassword/${id}/${password}`,
|
||||
method: "put",
|
||||
});
|
||||
return request({
|
||||
url: `/business/enterprise/restPassword/${id}/${password}`,
|
||||
method: "put",
|
||||
});
|
||||
}
|
||||
|
||||
// 公司企业获取会员详情
|
||||
export function getCasVip(id) {
|
||||
return request({
|
||||
url: `/business/casVip/${id}`,
|
||||
method: "get",
|
||||
});
|
||||
return request({
|
||||
url: `/business/casVip/${id}`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
// 公司企业开通会员详情
|
||||
export function openCasVip(data) {
|
||||
return request({
|
||||
url: `/business/casVip`,
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
return request({
|
||||
url: `/business/casVip`,
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
// 公司企业修改会员
|
||||
export function updateCasVip(data) {
|
||||
return request({
|
||||
url: `/business/casVip`,
|
||||
method: "put",
|
||||
data,
|
||||
});
|
||||
return request({
|
||||
url: `/business/casVip`,
|
||||
method: "put",
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
export const downloadEnterpriseTemplate = () => {
|
||||
return request({
|
||||
url: "/business/enterprise/importTemplate",
|
||||
method: "get",
|
||||
responseType: "blob",
|
||||
});
|
||||
}
|
||||
@ -44,33 +44,42 @@ import request from "@/utils/request";
|
||||
|
||||
// 专家分配账号
|
||||
export function allocateAccount(data) {
|
||||
return request({
|
||||
url: "/business/casExpert/allocateAccount",
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
return request({
|
||||
url: "/business/casExpert/allocateAccount",
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
// 专家获取账号
|
||||
export function getAccount(id) {
|
||||
return request({
|
||||
url: `/business/casExpert/getAccount/${id}`,
|
||||
method: "get",
|
||||
});
|
||||
return request({
|
||||
url: `/business/casExpert/getAccount/${id}`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
// 专家重置密码
|
||||
export function restPassword(id, password) {
|
||||
return request({
|
||||
url: `/business/casExpert/restPassword/${id}/${password}`,
|
||||
method: "put",
|
||||
});
|
||||
return request({
|
||||
url: `/business/casExpert/restPassword/${id}/${password}`,
|
||||
method: "put",
|
||||
});
|
||||
}
|
||||
|
||||
// 专家删除
|
||||
export function expertDelete(ids) {
|
||||
return request({
|
||||
url: `/business/casExpert/${ids}`,
|
||||
method: "delete",
|
||||
});
|
||||
return request({
|
||||
url: `/business/casExpert/${ids}`,
|
||||
method: "delete",
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
export const downloadExpertTemplate = () => {
|
||||
return request({
|
||||
url: '/business/casExpert/importTemplate',
|
||||
method: 'get',
|
||||
responseType: 'blob'
|
||||
})
|
||||
}
|
||||
@ -2,80 +2,89 @@ import request from "@/utils/request";
|
||||
|
||||
// 实验室列表
|
||||
export function casLaboratoryList(params) {
|
||||
return request({
|
||||
url: "/business/casLaboratory/list",
|
||||
method: "GET",
|
||||
params,
|
||||
});
|
||||
return request({
|
||||
url: "/business/casLaboratory/list",
|
||||
method: "GET",
|
||||
params,
|
||||
});
|
||||
}
|
||||
|
||||
// 新增
|
||||
export function casLaboratoryAdd(data) {
|
||||
return request({
|
||||
url: "/business/casLaboratory",
|
||||
method: "POST",
|
||||
data,
|
||||
});
|
||||
return request({
|
||||
url: "/business/casLaboratory",
|
||||
method: "POST",
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
// 修改
|
||||
export function casLaboratoryUpdate(data) {
|
||||
return request({
|
||||
url: "/business/casLaboratory",
|
||||
method: "PUT",
|
||||
data,
|
||||
});
|
||||
return request({
|
||||
url: "/business/casLaboratory",
|
||||
method: "PUT",
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
// id详情
|
||||
export function casLaboratoryDetail(id) {
|
||||
return request({
|
||||
url: `/business/casLaboratory/${id}`,
|
||||
method: "GET",
|
||||
});
|
||||
return request({
|
||||
url: `/business/casLaboratory/${id}`,
|
||||
method: "GET",
|
||||
});
|
||||
}
|
||||
|
||||
// 删除
|
||||
export function casLaboratoryDelete(ids) {
|
||||
return request({
|
||||
url: `/business/casLaboratory`,
|
||||
method: "DELETE",
|
||||
data: {
|
||||
ids,
|
||||
},
|
||||
});
|
||||
return request({
|
||||
url: `/business/casLaboratory`,
|
||||
method: "DELETE",
|
||||
data: {
|
||||
ids,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// 导入
|
||||
export function casLaboratoryImportData(data) {
|
||||
return request({
|
||||
url: `/business/casLaboratory/importData`,
|
||||
method: "POST",
|
||||
data,
|
||||
});
|
||||
return request({
|
||||
url: `/business/casLaboratory/importData`,
|
||||
method: "POST",
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
// 实验室获取账号
|
||||
export function getAccount(id) {
|
||||
return request({
|
||||
url: `/business/casLaboratory/getAccount/${id}`,
|
||||
method: "GET",
|
||||
});
|
||||
return request({
|
||||
url: `/business/casLaboratory/getAccount/${id}`,
|
||||
method: "GET",
|
||||
});
|
||||
}
|
||||
|
||||
// 实验室分配账号
|
||||
export function allocateAccount(data) {
|
||||
return request({
|
||||
url: "/business/casLaboratory/allocateAccount",
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
return request({
|
||||
url: "/business/casLaboratory/allocateAccount",
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
// 实验室重置密码
|
||||
export function restPassword(id, password) {
|
||||
return request({
|
||||
url: `/business/casLaboratory/restPassword/${id}/${password}`,
|
||||
method: "put",
|
||||
});
|
||||
return request({
|
||||
url: `/business/casLaboratory/restPassword/${id}/${password}`,
|
||||
method: "put",
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
export const downloadLabTemplate = () => {
|
||||
return request({
|
||||
url: "/business/casLaboratory/importData",
|
||||
method: "get",
|
||||
responseType: "blob",
|
||||
})
|
||||
}
|
||||
@ -2,84 +2,92 @@ import request from "@/utils/request";
|
||||
|
||||
// 科研机构列表
|
||||
export function researchList(params) {
|
||||
return request({
|
||||
url: "/business/casResearch/list",
|
||||
method: "GET",
|
||||
params,
|
||||
});
|
||||
return request({
|
||||
url: "/business/casResearch/list",
|
||||
method: "GET",
|
||||
params,
|
||||
});
|
||||
}
|
||||
|
||||
// 科研机构获取账号
|
||||
export function getAccount(id) {
|
||||
return request({
|
||||
url: `/business/casResearch/getAccount/${id}`,
|
||||
method: "get",
|
||||
});
|
||||
return request({
|
||||
url: `/business/casResearch/getAccount/${id}`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
// 科研机构筛选信息
|
||||
export function researchSelect(data) {
|
||||
return request({
|
||||
url: "/admin/v1/manage/research/select",
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
return request({
|
||||
url: "/admin/v1/manage/research/select",
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
// 科研机构信息添加
|
||||
export function researchAdd(data) {
|
||||
return request({
|
||||
url: "/business/casResearch",
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
return request({
|
||||
url: "/business/casResearch",
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
// 科研机构信息修改
|
||||
export function researchEdit(data) {
|
||||
return request({
|
||||
url: "/business/casResearch",
|
||||
method: "PUT",
|
||||
data,
|
||||
});
|
||||
return request({
|
||||
url: "/business/casResearch",
|
||||
method: "PUT",
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
// 机构重置密码
|
||||
export function resetPassword(id, password) {
|
||||
return request({
|
||||
url: `/business/casResearch/restPassword/${id}/${password}`,
|
||||
method: "put",
|
||||
});
|
||||
return request({
|
||||
url: `/business/casResearch/restPassword/${id}/${password}`,
|
||||
method: "put",
|
||||
});
|
||||
}
|
||||
|
||||
// 科研机构详细信息
|
||||
export function researchDetail(id) {
|
||||
return request({
|
||||
url: `/business/casResearch/${id}`,
|
||||
method: "GET",
|
||||
});
|
||||
return request({
|
||||
url: `/business/casResearch/${id}`,
|
||||
method: "GET",
|
||||
});
|
||||
}
|
||||
|
||||
// 科研机构详细信息
|
||||
export function researchDelete(ids) {
|
||||
return request({
|
||||
url: `/business/casResearch/${ids}`,
|
||||
method: "DELETE",
|
||||
});
|
||||
return request({
|
||||
url: `/business/casResearch/${ids}`,
|
||||
method: "DELETE",
|
||||
});
|
||||
}
|
||||
|
||||
// 分配账号
|
||||
export function allocateAccount(data) {
|
||||
return request({
|
||||
url: "/business/casResearch/allocateAccount",
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
return request({
|
||||
url: "/business/casResearch/allocateAccount",
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
export function casResearchDelete(ids) {
|
||||
return request({
|
||||
url: `/business/casResearch/${ids}`,
|
||||
method: "DELETE",
|
||||
});
|
||||
return request({
|
||||
url: `/business/casResearch/${ids}`,
|
||||
method: "DELETE",
|
||||
});
|
||||
}
|
||||
|
||||
export const casResearchImportData = () => {
|
||||
return request({
|
||||
url: `/business/casResearch/importTemplate`,
|
||||
method: "GET",
|
||||
responseType: 'blob'
|
||||
})
|
||||
}
|
||||
@ -125,6 +125,6 @@ export const countryOptions = [
|
||||
},
|
||||
{
|
||||
key: "kg",
|
||||
zh: "吉尔吉斯斯坦",
|
||||
value: "吉尔吉斯斯坦",
|
||||
}
|
||||
];
|
||||
@ -338,14 +338,13 @@
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item :label="introduceName" prop="introduce">
|
||||
<!-- <el-input
|
||||
v-if="formType == 1"
|
||||
<el-input
|
||||
v-model="modelValue.introduce"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 2, maxRows: 6 }"
|
||||
/> -->
|
||||
:autosize="{ minRows: 6, maxRows: 8 }"
|
||||
/>
|
||||
<!-- v-else -->
|
||||
<WangEditor v-model="modelValue.introduce" minHeight="150px"/>
|
||||
<!-- <WangEditor v-model="modelValue.introduce" minHeight="150px"/>-->
|
||||
<!-- <Editor
|
||||
v-else
|
||||
v-model="modelValue.introduce"
|
||||
|
||||
@ -1,20 +1,20 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-form
|
||||
v-show="showSearch"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
:model="queryParams"
|
||||
label-width="68px"
|
||||
v-show="showSearch"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
:model="queryParams"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="企业名称" prop="name">
|
||||
<el-input
|
||||
v-model="queryParams.name"
|
||||
clearable
|
||||
placeholder="请输入企业名称"
|
||||
size="default"
|
||||
style="width: 240px"
|
||||
@keyup.enter.native="handleQuery"
|
||||
v-model="queryParams.name"
|
||||
clearable
|
||||
placeholder="请输入企业名称"
|
||||
size="default"
|
||||
style="width: 240px"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="所属站点" prop="tenantId">
|
||||
@ -23,14 +23,14 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-button
|
||||
icon="search"
|
||||
size="default"
|
||||
type="primary"
|
||||
@click="handleQuery"
|
||||
>搜索
|
||||
icon="search"
|
||||
size="default"
|
||||
type="primary"
|
||||
@click="handleQuery"
|
||||
>搜索
|
||||
</el-button>
|
||||
<el-button icon="refresh" size="default" @click="resetQuery"
|
||||
>重置
|
||||
>重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
@ -38,57 +38,57 @@
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
icon="plus"
|
||||
plain
|
||||
size="default"
|
||||
type="primary"
|
||||
@click="handleAdd"
|
||||
>新增
|
||||
icon="plus"
|
||||
plain
|
||||
size="default"
|
||||
type="primary"
|
||||
@click="handleAdd"
|
||||
>新增
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
icon="upload"
|
||||
plain
|
||||
size="default"
|
||||
type="info"
|
||||
@click="handleImport"
|
||||
>导入
|
||||
icon="upload"
|
||||
plain
|
||||
size="default"
|
||||
type="info"
|
||||
@click="handleImport"
|
||||
>导入
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
icon="download"
|
||||
plain
|
||||
size="default"
|
||||
type="warning"
|
||||
@click="handleExport"
|
||||
>导出
|
||||
icon="download"
|
||||
plain
|
||||
size="default"
|
||||
type="warning"
|
||||
@click="handleExport"
|
||||
>导出
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
:disabled="!ids.length"
|
||||
icon="delete"
|
||||
type="danger"
|
||||
@click="handleDelete()"
|
||||
>批量删除
|
||||
:disabled="!ids.length"
|
||||
icon="delete"
|
||||
type="danger"
|
||||
@click="handleDelete()"
|
||||
>批量删除
|
||||
</el-button>
|
||||
</el-col>
|
||||
<right-toolbar
|
||||
:showSearch.sync="showSearch"
|
||||
@queryTable="getList"
|
||||
:showSearch.sync="showSearch"
|
||||
@queryTable="getList"
|
||||
></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
:data="dataList"
|
||||
@selection-change="handleSelectionChange"
|
||||
v-loading="loading"
|
||||
:data="dataList"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column align="center" label="数据编号" prop="id" />
|
||||
<el-table-column align="center" label="企业名称" prop="name" />
|
||||
<el-table-column type="selection" width="55"/>
|
||||
<el-table-column align="center" label="数据编号" prop="id"/>
|
||||
<el-table-column align="center" label="企业名称" prop="name"/>
|
||||
<!-- <el-table-column label="统一社会信用代码" align="center" prop="code" /> -->
|
||||
<el-table-column align="center" label="所属领域" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
@ -100,7 +100,7 @@
|
||||
{{ siteList.find((el) => el.id === row.tenantId)?.name ?? "无" }}
|
||||
</template>
|
||||
</el-table-column> -->
|
||||
<el-table-column align="center" label="所在地" prop="address" />
|
||||
<el-table-column align="center" label="所在地" prop="address"/>
|
||||
<el-table-column align="center" label="企业类型" prop="kind">
|
||||
<template #default="{ row }">
|
||||
<div>
|
||||
@ -116,73 +116,73 @@
|
||||
<el-table-column align="center" label="操作">
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="handleDetail(row.id)"
|
||||
>修改
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="handleDetail(row.id)"
|
||||
>修改
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="delete"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="handleDelete(row.id)"
|
||||
>删除
|
||||
icon="delete"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="handleDelete(row.id)"
|
||||
>删除
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="openAssignAccount(row.id)"
|
||||
>分配账号
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="openAssignAccount(row.id)"
|
||||
>分配账号
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="openResetPassword(row.id)"
|
||||
>重置密码
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="openResetPassword(row.id)"
|
||||
>重置密码
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="handleOpenVip(row.id)"
|
||||
>开通会员
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="handleOpenVip(row.id)"
|
||||
>开通会员
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
v-model:page="queryParams.pageNum"
|
||||
:total="total"
|
||||
@pagination="getList"
|
||||
v-show="total > 0"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
v-model:page="queryParams.pageNum"
|
||||
:total="total"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 用户导入对话框 -->
|
||||
<el-dialog
|
||||
v-model="upload.open"
|
||||
:title="upload.title"
|
||||
append-to-body
|
||||
width="400px"
|
||||
v-model="upload.open"
|
||||
:title="upload.title"
|
||||
append-to-body
|
||||
width="400px"
|
||||
>
|
||||
<el-upload
|
||||
ref="uploadRef"
|
||||
:action="upload.url"
|
||||
:auto-upload="false"
|
||||
:disabled="upload.isUploading"
|
||||
:headers="upload.headers"
|
||||
:limit="1"
|
||||
:on-progress="handleFileUploadProgress"
|
||||
:on-success="handleFileSuccess"
|
||||
accept=".xlsx, .xls"
|
||||
drag
|
||||
ref="uploadRef"
|
||||
:action="upload.url"
|
||||
:auto-upload="false"
|
||||
:disabled="upload.isUploading"
|
||||
:headers="upload.headers"
|
||||
:limit="1"
|
||||
:on-progress="handleFileUploadProgress"
|
||||
:on-success="handleFileSuccess"
|
||||
accept=".xlsx, .xls"
|
||||
drag
|
||||
>
|
||||
<el-icon class="el-icon--upload">
|
||||
<upload-filled />
|
||||
<upload-filled/>
|
||||
</el-icon>
|
||||
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||
<template #tip>
|
||||
@ -193,6 +193,22 @@
|
||||
/>是否更新已经存在的用户数据
|
||||
</div> -->
|
||||
<span>仅允许导入xls、xlsx格式文件。</span>
|
||||
<el-link type="primary" size="small" @click="downloadImportTemplate">下载导入模版</el-link>
|
||||
<br/>
|
||||
<span>企业导入说明:</span>
|
||||
<ol style="text-align: left">
|
||||
<li>
|
||||
<span>关键词/生产方向 多个用|隔开 (人工智能|量子计算)</span>
|
||||
</li>
|
||||
<li>
|
||||
<span>
|
||||
所属领域 (>拼接上下级 多个用|隔开)
|
||||
<br/>
|
||||
例如 : 航空航天>航天技术>运载火箭技术|生物与新医药>中药、天然药物>创新药物研发技术
|
||||
</span>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<!-- <el-link
|
||||
type="primary"
|
||||
:underline="false"
|
||||
@ -212,34 +228,34 @@
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
v-model="showAssignAccount"
|
||||
append-to-body
|
||||
title="分配账号"
|
||||
width="400px"
|
||||
v-model="showAssignAccount"
|
||||
append-to-body
|
||||
title="分配账号"
|
||||
width="400px"
|
||||
>
|
||||
<el-form
|
||||
ref="assignAccountFormRef"
|
||||
:model="assignAccountForm"
|
||||
:rules="assignAccoutRules"
|
||||
label-width="80px"
|
||||
ref="assignAccountFormRef"
|
||||
:model="assignAccountForm"
|
||||
:rules="assignAccoutRules"
|
||||
label-width="80px"
|
||||
>
|
||||
<el-form-item label="手机号" prop="username">
|
||||
<el-input
|
||||
v-model="assignAccountForm.username"
|
||||
:maxlength="11"
|
||||
v-model="assignAccountForm.username"
|
||||
:maxlength="11"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="密码" prop="password">
|
||||
<el-input
|
||||
v-model="assignAccountForm.password"
|
||||
show-password
|
||||
v-model="assignAccountForm.password"
|
||||
show-password
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" @click="submitAssignAccount"
|
||||
>确 定
|
||||
>确 定
|
||||
</el-button>
|
||||
<el-button @click="closeAssignAccount">取 消</el-button>
|
||||
</div>
|
||||
@ -247,28 +263,28 @@
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
v-model="showResetPassword"
|
||||
append-to-body
|
||||
title="重置密码"
|
||||
width="400px"
|
||||
v-model="showResetPassword"
|
||||
append-to-body
|
||||
title="重置密码"
|
||||
width="400px"
|
||||
>
|
||||
<el-form
|
||||
ref="resetPasswordFormRef"
|
||||
:model="resetPasswordForm"
|
||||
:rules="assignAccoutRules"
|
||||
label-width="80px"
|
||||
ref="resetPasswordFormRef"
|
||||
:model="resetPasswordForm"
|
||||
:rules="assignAccoutRules"
|
||||
label-width="80px"
|
||||
>
|
||||
<el-form-item label="密码" prop="password">
|
||||
<el-input
|
||||
v-model="resetPasswordForm.password"
|
||||
show-password
|
||||
v-model="resetPasswordForm.password"
|
||||
show-password
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" @click="submitResetPassword"
|
||||
>确 定
|
||||
>确 定
|
||||
</el-button>
|
||||
<el-button @click="closeResetPassword">取 消</el-button>
|
||||
</div>
|
||||
@ -276,16 +292,16 @@
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
v-model="showOpenVip"
|
||||
:title="vipForm.id ? `修改会员` : `开通会员`"
|
||||
append-to-body
|
||||
width="400px"
|
||||
v-model="showOpenVip"
|
||||
:title="vipForm.id ? `修改会员` : `开通会员`"
|
||||
append-to-body
|
||||
width="400px"
|
||||
>
|
||||
<el-form
|
||||
ref="vipFormRef"
|
||||
:model="vipForm"
|
||||
:rules="assignAccoutRules"
|
||||
label-width="80px"
|
||||
ref="vipFormRef"
|
||||
:model="vipForm"
|
||||
:rules="assignAccoutRules"
|
||||
label-width="80px"
|
||||
>
|
||||
<el-form-item label="会员类型" prop="vipType">
|
||||
<el-radio-group v-model="vipForm.vipType">
|
||||
@ -295,25 +311,25 @@
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="vipForm.vipType != '0'"
|
||||
label="到期时间"
|
||||
prop="expireTime"
|
||||
v-if="vipForm.vipType != '0'"
|
||||
label="到期时间"
|
||||
prop="expireTime"
|
||||
>
|
||||
<el-date-picker
|
||||
v-model="vipForm.expireTime"
|
||||
placeholder="选择到期时间"
|
||||
type="datetime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
v-model="vipForm.expireTime"
|
||||
placeholder="选择到期时间"
|
||||
type="datetime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button
|
||||
:disabled="vipForm.vipType == 0"
|
||||
type="primary"
|
||||
@click="submitVip"
|
||||
>确 定
|
||||
:disabled="vipForm.vipType == 0"
|
||||
type="primary"
|
||||
@click="submitVip"
|
||||
>确 定
|
||||
</el-button>
|
||||
<el-button @click="closeVip">取 消</el-button>
|
||||
</div>
|
||||
@ -326,7 +342,7 @@
|
||||
import {
|
||||
allocateAccount,
|
||||
companyDelete,
|
||||
companyList,
|
||||
companyList, downloadEnterpriseTemplate,
|
||||
getAccount,
|
||||
getCasVip,
|
||||
openCasVip,
|
||||
@ -334,17 +350,17 @@ import {
|
||||
updateCasVip,
|
||||
} from "@/api/dataList/enterprise";
|
||||
import md5 from "js-md5";
|
||||
import { getToken } from "@/utils/auth";
|
||||
import {getToken} from "@/utils/auth";
|
||||
// import SiteOptions from "@/views/components/SiteOptions";
|
||||
// import axios from "axios";
|
||||
// import { download } from "@/utils/request";
|
||||
// import dayjs from "dayjs";
|
||||
import { blobValidate } from "@/utils/ruoyi";
|
||||
import { saveAs } from "file-saver";
|
||||
import { reactive, ref, toRefs } from "vue";
|
||||
import { useRouter } from "vue-router";
|
||||
import { enterpriseOptions } from "@/utils/parameter";
|
||||
import { ElLoading, ElMessage, ElMessageBox } from "element-plus";
|
||||
import {blobValidate} from "@/utils/ruoyi";
|
||||
import {saveAs} from "file-saver";
|
||||
import {reactive, ref, toRefs} from "vue";
|
||||
import {useRouter} from "vue-router";
|
||||
import {enterpriseOptions} from "@/utils/parameter";
|
||||
import {ElLoading, ElMessage, ElMessageBox} from "element-plus";
|
||||
import request from "@/utils/request";
|
||||
import dayjs from "dayjs";
|
||||
|
||||
@ -370,12 +386,12 @@ const upload = reactive({
|
||||
// 是否更新已经存在的用户数据
|
||||
// updateSupport: 0,
|
||||
// 设置上传的请求头部
|
||||
headers: { Authorization: "Bearer " + getToken() },
|
||||
headers: {Authorization: "Bearer " + getToken()},
|
||||
// 上传的地址
|
||||
url: import.meta.env.VITE_APP_BASE_API + "/business/enterprise/importData",
|
||||
});
|
||||
|
||||
const { queryParams } = toRefs(data);
|
||||
const {queryParams} = toRefs(data);
|
||||
const showSearch = ref(true);
|
||||
// const siteList = ref([]);
|
||||
const loading = ref(true);
|
||||
@ -408,17 +424,17 @@ const handleQuery = () => {
|
||||
|
||||
const assignAccoutRules = {
|
||||
username: [
|
||||
{ required: true, message: "请输入手机号", trigger: "blur" },
|
||||
{required: true, message: "请输入手机号", trigger: "blur"},
|
||||
{
|
||||
pattern: /^1[3-9]\d{9}$/,
|
||||
message: "请输入正确的手机号码",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
password: [{ required: true, message: "请输入密码", trigger: "blur" }],
|
||||
vipType: [{ required: true, message: "请选择会员类型", trigger: "change" }],
|
||||
password: [{required: true, message: "请输入密码", trigger: "blur"}],
|
||||
vipType: [{required: true, message: "请选择会员类型", trigger: "change"}],
|
||||
expireTime: [
|
||||
{ required: true, message: "请选择到期时间", trigger: "change" },
|
||||
{required: true, message: "请选择到期时间", trigger: "change"},
|
||||
],
|
||||
};
|
||||
const showAssignAccount = ref(false);
|
||||
@ -435,7 +451,7 @@ const showResetPassword = ref(false);
|
||||
|
||||
const openAssignAccount = async (id) => {
|
||||
resetForm();
|
||||
const { have, data } = await getAccount(id);
|
||||
const {have, data} = await getAccount(id);
|
||||
if (have) {
|
||||
ElMessageBox.alert(`已经存在账号:${data}`, "账号已经存在");
|
||||
} else {
|
||||
@ -446,7 +462,7 @@ const openAssignAccount = async (id) => {
|
||||
|
||||
const openResetPassword = async (id) => {
|
||||
resetForm();
|
||||
const { have, userId } = await getAccount(id);
|
||||
const {have, userId} = await getAccount(id);
|
||||
if (have) {
|
||||
resetPasswordForm.id = userId;
|
||||
showResetPassword.value = true;
|
||||
@ -494,15 +510,15 @@ const submitResetPassword = async () => {
|
||||
//TODO:
|
||||
/** 开通vip操作 */
|
||||
const vipData = reactive({
|
||||
vipForm: { userType: "1" },
|
||||
vipForm: {userType: "1"},
|
||||
});
|
||||
const { vipForm } = toRefs(vipData);
|
||||
const {vipForm} = toRefs(vipData);
|
||||
const showOpenVip = ref(false);
|
||||
const vipFormRef = ref();
|
||||
|
||||
const handleOpenVip = async (id) => {
|
||||
resetVipForm();
|
||||
const { have, userId } = await getAccount(id);
|
||||
const {have, userId} = await getAccount(id);
|
||||
if (have) {
|
||||
const resp = await getCasVip(userId);
|
||||
if (resp.have) {
|
||||
@ -531,7 +547,7 @@ const submitVip = async () => {
|
||||
};
|
||||
|
||||
const resetVipForm = () => {
|
||||
vipForm.value = { userType: "1" };
|
||||
vipForm.value = {userType: "1"};
|
||||
if (vipFormRef.value) {
|
||||
vipFormRef.value.resetFields();
|
||||
}
|
||||
@ -557,7 +573,7 @@ const handleAdd = () => {
|
||||
const handleDetail = (id) => {
|
||||
router.push({
|
||||
path: "/dataList/enterprise/add",
|
||||
query: { id },
|
||||
query: {id},
|
||||
});
|
||||
};
|
||||
const uploadRef = ref(null);
|
||||
@ -571,9 +587,9 @@ function handleImport() {
|
||||
/** 下载模板操作 */
|
||||
function importTemplate() {
|
||||
proxy.download(
|
||||
"system/user/importTemplate",
|
||||
{},
|
||||
`user_template_${new Date().getTime()}.xlsx`
|
||||
"system/user/importTemplate",
|
||||
{},
|
||||
`user_template_${new Date().getTime()}.xlsx`
|
||||
);
|
||||
}
|
||||
|
||||
@ -587,11 +603,11 @@ const handleFileSuccess = (response, file, fileList) => {
|
||||
upload.isUploading = false;
|
||||
uploadRef.value.handleRemove(file);
|
||||
ElMessageBox.alert(
|
||||
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
|
||||
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
|
||||
response.msg +
|
||||
"</div>",
|
||||
"导入结果",
|
||||
{ dangerouslyUseHTMLString: true }
|
||||
"导入结果",
|
||||
{dangerouslyUseHTMLString: true}
|
||||
);
|
||||
getList();
|
||||
};
|
||||
@ -601,15 +617,21 @@ function submitFileForm() {
|
||||
uploadRef.value.submit();
|
||||
}
|
||||
|
||||
const downloadImportTemplate = async () => {
|
||||
const blob = await downloadEnterpriseTemplate()
|
||||
saveAs(blob, "企业导入模版.xlsx")
|
||||
}
|
||||
|
||||
const handleDelete = async (id) => {
|
||||
const delIds = id || ids.value.join(",");
|
||||
ElMessageBox.confirm(`是否确认删除编号为${delIds}的数据项?`)
|
||||
.then(async () => {
|
||||
await companyDelete(delIds);
|
||||
getList();
|
||||
ElMessage.success("删除成功");
|
||||
})
|
||||
.catch(() => {});
|
||||
.then(async () => {
|
||||
await companyDelete(delIds);
|
||||
getList();
|
||||
ElMessage.success("删除成功");
|
||||
})
|
||||
.catch(() => {
|
||||
});
|
||||
};
|
||||
|
||||
let downloadLoadingInstance;
|
||||
@ -619,41 +641,41 @@ const download = (url, filename) => {
|
||||
background: "rgba(0, 0, 0, 0.7)",
|
||||
});
|
||||
return request
|
||||
.get(url, {
|
||||
// transformRequest: [
|
||||
// (params) => {
|
||||
// return tansParams(params);
|
||||
// },
|
||||
// ],
|
||||
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
||||
responseType: "blob",
|
||||
})
|
||||
.then(async (data) => {
|
||||
const isLogin = await blobValidate(data);
|
||||
if (isLogin) {
|
||||
const blob = new Blob([data]);
|
||||
saveAs(blob, filename);
|
||||
} else {
|
||||
const resText = await data.text();
|
||||
const rspObj = JSON.parse(resText);
|
||||
const errMsg =
|
||||
errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
|
||||
ElMessage.error(errMsg);
|
||||
}
|
||||
downloadLoadingInstance.close();
|
||||
})
|
||||
.catch((r) => {
|
||||
console.error(r);
|
||||
ElMessage.error("下载文件出现错误,请联系管理员!");
|
||||
downloadLoadingInstance.close();
|
||||
});
|
||||
.get(url, {
|
||||
// transformRequest: [
|
||||
// (params) => {
|
||||
// return tansParams(params);
|
||||
// },
|
||||
// ],
|
||||
headers: {"Content-Type": "application/x-www-form-urlencoded"},
|
||||
responseType: "blob",
|
||||
})
|
||||
.then(async (data) => {
|
||||
const isLogin = await blobValidate(data);
|
||||
if (isLogin) {
|
||||
const blob = new Blob([data]);
|
||||
saveAs(blob, filename);
|
||||
} else {
|
||||
const resText = await data.text();
|
||||
const rspObj = JSON.parse(resText);
|
||||
const errMsg =
|
||||
errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
|
||||
ElMessage.error(errMsg);
|
||||
}
|
||||
downloadLoadingInstance.close();
|
||||
})
|
||||
.catch((r) => {
|
||||
console.error(r);
|
||||
ElMessage.error("下载文件出现错误,请联系管理员!");
|
||||
downloadLoadingInstance.close();
|
||||
});
|
||||
};
|
||||
|
||||
const handleExport = () => {
|
||||
ElMessageBox.confirm(`是否确认企业列表?`).then(() => {
|
||||
download(
|
||||
`/business/enterprise/export`,
|
||||
`企业信息(${dayjs().format("YYYYMMDDHHmmss")}).xlsx`
|
||||
`/business/enterprise/export`,
|
||||
`企业信息(${dayjs().format("YYYYMMDDHHmmss")}).xlsx`
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
@ -180,6 +180,22 @@
|
||||
/>是否更新已经存在的用户数据
|
||||
</div> -->
|
||||
<span>仅允许导入xls、xlsx格式文件。</span>
|
||||
<el-link type="primary" @click="downloadTemplate" size="small">下载导入模版</el-link>
|
||||
<br/>
|
||||
<span>专家导入说明:</span>
|
||||
<ol style="text-align: left">
|
||||
<li><span>
|
||||
从业时间格式 1976-01-01
|
||||
</span>
|
||||
</li>
|
||||
<li><span>
|
||||
关键词/研究方向 多个用|隔开 (人工智能|量子计算)
|
||||
</span></li>
|
||||
<li><span>
|
||||
所属领域 (>拼接上下级 多个用|隔开)<br/>
|
||||
例如 : 航空航天>航天技术>运载火箭技术|生物与新医药>中药、天然药物>创新药物研发技术
|
||||
</span></li>
|
||||
</ol>
|
||||
<!-- <el-link
|
||||
type="primary"
|
||||
:underline="false"
|
||||
@ -265,7 +281,7 @@
|
||||
</template>
|
||||
<script setup>
|
||||
import {
|
||||
allocateAccount,
|
||||
allocateAccount, downloadExpertTemplate,
|
||||
expertDelete,
|
||||
getAccount,
|
||||
restPassword,
|
||||
@ -497,6 +513,11 @@ const handleDelete = async (id) => {
|
||||
});
|
||||
};
|
||||
|
||||
const downloadTemplate = async () => {
|
||||
const templateBlob = await downloadExpertTemplate()
|
||||
saveAs(templateBlob, "专家导入模板.xlsx");
|
||||
}
|
||||
|
||||
let downloadLoadingInstance;
|
||||
const download = (url, filename) => {
|
||||
downloadLoadingInstance = ElLoading.service({
|
||||
|
||||
@ -3,11 +3,11 @@
|
||||
<el-form :inline="true" :model="queryParams">
|
||||
<el-form-item label="姓名" prop="name">
|
||||
<el-input
|
||||
v-model="queryParams.name"
|
||||
clearable
|
||||
placeholder="请输入关键字"
|
||||
size="default"
|
||||
style="width: 240px"
|
||||
v-model="queryParams.name"
|
||||
clearable
|
||||
placeholder="请输入关键字"
|
||||
size="default"
|
||||
style="width: 240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<!--
|
||||
@ -17,14 +17,14 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-button
|
||||
icon="search"
|
||||
size="default"
|
||||
type="primary"
|
||||
@click="handleQuery"
|
||||
>搜索
|
||||
icon="search"
|
||||
size="default"
|
||||
type="primary"
|
||||
@click="handleQuery"
|
||||
>搜索
|
||||
</el-button>
|
||||
<el-button icon="refresh" size="default" @click="resetQuery"
|
||||
>重置
|
||||
>重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
@ -32,58 +32,58 @@
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
icon="plus"
|
||||
plain
|
||||
size="default"
|
||||
type="primary"
|
||||
@click="handleAdd"
|
||||
>新增
|
||||
icon="plus"
|
||||
plain
|
||||
size="default"
|
||||
type="primary"
|
||||
@click="handleAdd"
|
||||
>新增
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
icon="upload"
|
||||
plain
|
||||
size="default"
|
||||
type="info"
|
||||
@click="handleImport"
|
||||
>导入
|
||||
icon="upload"
|
||||
plain
|
||||
size="default"
|
||||
type="info"
|
||||
@click="handleImport"
|
||||
>导入
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
:disabled="!ids.length"
|
||||
icon="delete"
|
||||
type="danger"
|
||||
@click="handleDelete()"
|
||||
>批量删除
|
||||
:disabled="!ids.length"
|
||||
icon="delete"
|
||||
type="danger"
|
||||
@click="handleDelete()"
|
||||
>批量删除
|
||||
</el-button>
|
||||
</el-col>
|
||||
<right-toolbar
|
||||
:showSearch.sync="showSearch"
|
||||
@queryTable="getList"
|
||||
:showSearch.sync="showSearch"
|
||||
@queryTable="getList"
|
||||
></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<!-- 表格区域 -->
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
:data="dataList"
|
||||
@selection-change="handleSelectionChange"
|
||||
v-loading="loading"
|
||||
:data="dataList"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column align="center" label="数据编号" prop="id" />
|
||||
<el-table-column align="center" label="实验室全称" prop="name" />
|
||||
<el-table-column align="center" label="所属院所或高校" prop="school" />
|
||||
<el-table-column type="selection" width="55"/>
|
||||
<el-table-column align="center" label="数据编号" prop="id"/>
|
||||
<el-table-column align="center" label="实验室全称" prop="name"/>
|
||||
<el-table-column align="center" label="所属院所或高校" prop="school"/>
|
||||
<el-table-column align="center" label="实验室简介" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<div v-html="row.introduction"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
label="核心成员及简介"
|
||||
show-overflow-tooltip
|
||||
align="center"
|
||||
label="核心成员及简介"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<div v-html="row.member"></div>
|
||||
@ -91,49 +91,49 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
label="研究方向"
|
||||
prop="researchDirection"
|
||||
show-overflow-tooltip
|
||||
align="center"
|
||||
label="研究方向"
|
||||
prop="researchDirection"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
align="center"
|
||||
label="主要技术应用场景"
|
||||
prop="primaryTechnology"
|
||||
align="center"
|
||||
label="主要技术应用场景"
|
||||
prop="primaryTechnology"
|
||||
/>
|
||||
<el-table-column align="center" label="所属行业领域" prop="industryStr" />
|
||||
<el-table-column align="center" label="联系电话" prop="phone" />
|
||||
<el-table-column align="center" label="网址" prop="url" />
|
||||
<el-table-column align="center" label="所属行业领域" prop="industryStr"/>
|
||||
<el-table-column align="center" label="联系电话" prop="phone"/>
|
||||
<el-table-column align="center" label="网址" prop="url"/>
|
||||
<!-- <el-table-column label="关键词" align="center" prop="address" /> -->
|
||||
<el-table-column align="center" label="操作">
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="handleDetail(row.id)"
|
||||
>修改
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="handleDetail(row.id)"
|
||||
>修改
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="handleDelete(row.id)"
|
||||
>删除
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="handleDelete(row.id)"
|
||||
>删除
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="openAssignAccount(row.id)"
|
||||
>分配账号
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="openAssignAccount(row.id)"
|
||||
>分配账号
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="openResetPassword(row.id)"
|
||||
>重置密码
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="openResetPassword(row.id)"
|
||||
>重置密码
|
||||
</el-button>
|
||||
<!-- <el-button
|
||||
size="small"
|
||||
@ -157,34 +157,34 @@
|
||||
|
||||
<!-- 分页器 -->
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
v-model:page="queryParams.pageNum"
|
||||
:total="total"
|
||||
@pagination="getList"
|
||||
v-show="total > 0"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
v-model:page="queryParams.pageNum"
|
||||
:total="total"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 用户导入对话框 -->
|
||||
<el-dialog
|
||||
v-model="upload.open"
|
||||
:title="upload.title"
|
||||
append-to-body
|
||||
width="400px"
|
||||
v-model="upload.open"
|
||||
:title="upload.title"
|
||||
append-to-body
|
||||
width="400px"
|
||||
>
|
||||
<el-upload
|
||||
ref="uploadRef"
|
||||
:action="upload.url"
|
||||
:auto-upload="false"
|
||||
:disabled="upload.isUploading"
|
||||
:headers="upload.headers"
|
||||
:limit="1"
|
||||
:on-progress="handleFileUploadProgress"
|
||||
:on-success="handleFileSuccess"
|
||||
accept=".xlsx, .xls"
|
||||
drag
|
||||
ref="uploadRef"
|
||||
:action="upload.url"
|
||||
:auto-upload="false"
|
||||
:disabled="upload.isUploading"
|
||||
:headers="upload.headers"
|
||||
:limit="1"
|
||||
:on-progress="handleFileUploadProgress"
|
||||
:on-success="handleFileSuccess"
|
||||
accept=".xlsx, .xls"
|
||||
drag
|
||||
>
|
||||
<el-icon class="el-icon--upload">
|
||||
<upload-filled />
|
||||
<upload-filled/>
|
||||
</el-icon>
|
||||
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||
<template #tip>
|
||||
@ -195,6 +195,19 @@
|
||||
/>是否更新已经存在的用户数据
|
||||
</div> -->
|
||||
<span>仅允许导入xls、xlsx格式文件。</span>
|
||||
<br/>
|
||||
<span>实验室导入说明:</span>
|
||||
<el-link type="primary" size="small" @click="downloadImportTemplate">下载导入模版</el-link>
|
||||
<ol style="text-align: left">
|
||||
<li>
|
||||
<span>关键词/研究方向 多个用英文逗号(,)隔开 (人工智能,量子计算)</span>
|
||||
</li>
|
||||
<li>
|
||||
<span>所属领域 (>拼接上下级 多个用|隔开)<br/>
|
||||
航空航天>航天技术>运载火箭技术|生物与新医药>中药、天然药物>创新药物研发技术</span>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<!-- <el-link
|
||||
type="primary"
|
||||
:underline="false"
|
||||
@ -214,34 +227,34 @@
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
v-model="showAssignAccount"
|
||||
append-to-body
|
||||
title="分配账号"
|
||||
width="400px"
|
||||
v-model="showAssignAccount"
|
||||
append-to-body
|
||||
title="分配账号"
|
||||
width="400px"
|
||||
>
|
||||
<el-form
|
||||
ref="assignAccountFormRef"
|
||||
:model="assignAccountForm"
|
||||
:rules="assignAccoutRules"
|
||||
label-width="80px"
|
||||
ref="assignAccountFormRef"
|
||||
:model="assignAccountForm"
|
||||
:rules="assignAccoutRules"
|
||||
label-width="80px"
|
||||
>
|
||||
<el-form-item label="手机号" prop="username">
|
||||
<el-input
|
||||
v-model="assignAccountForm.username"
|
||||
:maxlength="11"
|
||||
v-model="assignAccountForm.username"
|
||||
:maxlength="11"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="密码" prop="password">
|
||||
<el-input
|
||||
v-model="assignAccountForm.password"
|
||||
show-password
|
||||
v-model="assignAccountForm.password"
|
||||
show-password
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" @click="submitAssignAccount"
|
||||
>确 定
|
||||
>确 定
|
||||
</el-button>
|
||||
<el-button @click="closeAssignAccount">取 消</el-button>
|
||||
</div>
|
||||
@ -249,29 +262,29 @@
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
v-model="showResetPassword"
|
||||
append-to-body
|
||||
title="重置密码"
|
||||
width="400px"
|
||||
v-model="showResetPassword"
|
||||
append-to-body
|
||||
title="重置密码"
|
||||
width="400px"
|
||||
>
|
||||
<el-form
|
||||
ref="resetPasswordFormRef"
|
||||
:model="resetPasswordForm"
|
||||
:rules="assignAccoutRules"
|
||||
label-width="80px"
|
||||
ref="resetPasswordFormRef"
|
||||
:model="resetPasswordForm"
|
||||
:rules="assignAccoutRules"
|
||||
label-width="80px"
|
||||
>
|
||||
<el-form-item label="密码" prop="password">
|
||||
<el-input
|
||||
autocomplete="off"
|
||||
v-model="resetPasswordForm.password"
|
||||
show-password
|
||||
autocomplete="off"
|
||||
v-model="resetPasswordForm.password"
|
||||
show-password
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" @click="submitResetPassword"
|
||||
>确 定
|
||||
>确 定
|
||||
</el-button>
|
||||
<el-button @click="closeResetPassword">取 消</el-button>
|
||||
</div>
|
||||
@ -280,20 +293,20 @@
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import { tenantSelect } from "@/api/subPlatform/tenant";
|
||||
import {tenantSelect} from "@/api/subPlatform/tenant";
|
||||
import {
|
||||
allocateAccount,
|
||||
casLaboratoryDelete,
|
||||
casLaboratoryList,
|
||||
casLaboratoryList, downloadLabTemplate,
|
||||
getAccount,
|
||||
restPassword,
|
||||
} from "@/api/dataList/laboratory";
|
||||
import { useRouter } from "vue-router";
|
||||
import { getToken } from "@/utils/auth";
|
||||
import { blobValidate } from "@/utils/ruoyi";
|
||||
import { ElLoading, ElMessage, ElMessageBox } from "element-plus";
|
||||
import {useRouter} from "vue-router";
|
||||
import {getToken} from "@/utils/auth";
|
||||
import {blobValidate} from "@/utils/ruoyi";
|
||||
import {ElLoading, ElMessage, ElMessageBox} from "element-plus";
|
||||
import request from "@/utils/request";
|
||||
import { reactive, ref, toRefs } from "vue";
|
||||
import {reactive, ref, toRefs} from "vue";
|
||||
import errorCode from "@/utils/errorCode";
|
||||
import md5 from "js-md5";
|
||||
|
||||
@ -320,26 +333,26 @@ const upload = reactive({
|
||||
// 是否更新已经存在的用户数据
|
||||
// updateSupport: 0,
|
||||
// 设置上传的请求头部
|
||||
headers: { Authorization: "Bearer " + getToken() },
|
||||
headers: {Authorization: "Bearer " + getToken()},
|
||||
// 上传的地址
|
||||
url: import.meta.env.VITE_APP_BASE_API + "/business/casLaboratory/importData",
|
||||
});
|
||||
|
||||
const { queryParams } = toRefs(data);
|
||||
const {queryParams} = toRefs(data);
|
||||
|
||||
const assignAccoutRules = {
|
||||
username: [
|
||||
{ required: true, message: "请输入用户名", trigger: "blur" },
|
||||
{required: true, message: "请输入用户名", trigger: "blur"},
|
||||
{
|
||||
pattern: /^1[3-9]\d{9}$/,
|
||||
message: "请输入正确的手机号码",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
password: [{ required: true, message: "请输入密码", trigger: "blur" }],
|
||||
vipType: [{ required: true, message: "请选择会员类型", trigger: "change" }],
|
||||
password: [{required: true, message: "请输入密码", trigger: "blur"}],
|
||||
vipType: [{required: true, message: "请选择会员类型", trigger: "change"}],
|
||||
expireTime: [
|
||||
{ required: true, message: "请选择到期时间", trigger: "change" },
|
||||
{required: true, message: "请选择到期时间", trigger: "change"},
|
||||
],
|
||||
};
|
||||
const showAssignAccount = ref(false);
|
||||
@ -356,7 +369,7 @@ const showResetPassword = ref(false);
|
||||
|
||||
const openAssignAccount = async (id) => {
|
||||
resetForm();
|
||||
const { have, data } = await getAccount(id);
|
||||
const {have, data} = await getAccount(id);
|
||||
if (have) {
|
||||
ElMessageBox.alert(`已经存在账号:${data}`, "账号已经存在");
|
||||
} else {
|
||||
@ -367,7 +380,7 @@ const openAssignAccount = async (id) => {
|
||||
|
||||
const openResetPassword = async (id) => {
|
||||
resetForm();
|
||||
const { have, userId } = await getAccount(id);
|
||||
const {have, userId} = await getAccount(id);
|
||||
if (have) {
|
||||
resetPasswordForm.id = userId;
|
||||
showResetPassword.value = true;
|
||||
@ -416,6 +429,10 @@ const handleSelectionChange = (selection) => {
|
||||
ids.value = selection.map((el) => el.id);
|
||||
};
|
||||
|
||||
const downloadImportTemplate = async () => {
|
||||
const blob = await downloadLabTemplate()
|
||||
saveAs(blob, "实验室导入模板.xlsx")
|
||||
}
|
||||
// 获取站点列表
|
||||
const getSiteList = async () => {
|
||||
const resp = await tenantSelect();
|
||||
@ -439,7 +456,7 @@ const handleAdd = () => {
|
||||
const handleDetail = (id) => {
|
||||
router.push({
|
||||
path: "/dataList/laboratory/add",
|
||||
query: { id },
|
||||
query: {id},
|
||||
});
|
||||
};
|
||||
// 认领专利
|
||||
@ -471,9 +488,9 @@ function handleImport() {
|
||||
/** 下载模板操作 */
|
||||
function importTemplate() {
|
||||
proxy.download(
|
||||
"system/user/importTemplate",
|
||||
{},
|
||||
`user_template_${new Date().getTime()}.xlsx`
|
||||
"system/user/importTemplate",
|
||||
{},
|
||||
`user_template_${new Date().getTime()}.xlsx`
|
||||
);
|
||||
}
|
||||
|
||||
@ -487,11 +504,11 @@ const handleFileSuccess = (response, file, fileList) => {
|
||||
upload.isUploading = false;
|
||||
uploadRef.value.handleRemove(file);
|
||||
ElMessageBox.alert(
|
||||
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
|
||||
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
|
||||
response.msg +
|
||||
"</div>",
|
||||
"导入结果",
|
||||
{ dangerouslyUseHTMLString: true }
|
||||
"导入结果",
|
||||
{dangerouslyUseHTMLString: true}
|
||||
);
|
||||
getList();
|
||||
};
|
||||
@ -509,12 +526,13 @@ const handleDelete = async (id) => {
|
||||
delIds = ids.value;
|
||||
}
|
||||
ElMessageBox.confirm(`是否确认删除编号为${delIds.join(",")}的数据项?`)
|
||||
.then(async () => {
|
||||
await casLaboratoryDelete(delIds);
|
||||
getList();
|
||||
ElMessage.success("删除成功");
|
||||
})
|
||||
.catch(() => {});
|
||||
.then(async () => {
|
||||
await casLaboratoryDelete(delIds);
|
||||
getList();
|
||||
ElMessage.success("删除成功");
|
||||
})
|
||||
.catch(() => {
|
||||
});
|
||||
};
|
||||
|
||||
let downloadLoadingInstance;
|
||||
@ -524,34 +542,34 @@ const download = (url, filename) => {
|
||||
background: "rgba(0, 0, 0, 0.7)",
|
||||
});
|
||||
return request
|
||||
.get(url, {
|
||||
// transformRequest: [
|
||||
// (params) => {
|
||||
// return tansParams(params);
|
||||
// },
|
||||
// ],
|
||||
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
||||
responseType: "blob",
|
||||
})
|
||||
.then(async (data) => {
|
||||
const isLogin = await blobValidate(data);
|
||||
if (isLogin) {
|
||||
const blob = new Blob([data]);
|
||||
saveAs(blob, filename);
|
||||
} else {
|
||||
const resText = await data.text();
|
||||
const rspObj = JSON.parse(resText);
|
||||
const errMsg =
|
||||
errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
|
||||
ElMessage.error(errMsg);
|
||||
}
|
||||
downloadLoadingInstance.close();
|
||||
})
|
||||
.catch((r) => {
|
||||
console.error(r);
|
||||
ElMessage.error("下载文件出现错误,请联系管理员!");
|
||||
downloadLoadingInstance.close();
|
||||
});
|
||||
.get(url, {
|
||||
// transformRequest: [
|
||||
// (params) => {
|
||||
// return tansParams(params);
|
||||
// },
|
||||
// ],
|
||||
headers: {"Content-Type": "application/x-www-form-urlencoded"},
|
||||
responseType: "blob",
|
||||
})
|
||||
.then(async (data) => {
|
||||
const isLogin = await blobValidate(data);
|
||||
if (isLogin) {
|
||||
const blob = new Blob([data]);
|
||||
saveAs(blob, filename);
|
||||
} else {
|
||||
const resText = await data.text();
|
||||
const rspObj = JSON.parse(resText);
|
||||
const errMsg =
|
||||
errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
|
||||
ElMessage.error(errMsg);
|
||||
}
|
||||
downloadLoadingInstance.close();
|
||||
})
|
||||
.catch((r) => {
|
||||
console.error(r);
|
||||
ElMessage.error("下载文件出现错误,请联系管理员!");
|
||||
downloadLoadingInstance.close();
|
||||
});
|
||||
};
|
||||
|
||||
// const handleExport = () => {
|
||||
|
||||
@ -1,20 +1,20 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-form
|
||||
v-show="showSearch"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
:model="queryParams"
|
||||
label-width="68px"
|
||||
v-show="showSearch"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
:model="queryParams"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="企业名称" prop="name">
|
||||
<el-input
|
||||
v-model="queryParams.name"
|
||||
clearable
|
||||
placeholder="请输入企业名称"
|
||||
size="default"
|
||||
style="width: 240px"
|
||||
@keyup.enter.native="handleQuery"
|
||||
v-model="queryParams.name"
|
||||
clearable
|
||||
placeholder="请输入企业名称"
|
||||
size="default"
|
||||
style="width: 240px"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="所属站点" prop="tenantId">
|
||||
@ -23,14 +23,14 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-button
|
||||
icon="search"
|
||||
size="default"
|
||||
type="primary"
|
||||
@click="handleQuery"
|
||||
>搜索
|
||||
icon="search"
|
||||
size="default"
|
||||
type="primary"
|
||||
@click="handleQuery"
|
||||
>搜索
|
||||
</el-button>
|
||||
<el-button icon="refresh" size="default" @click="resetQuery"
|
||||
>重置
|
||||
>重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
@ -38,22 +38,22 @@
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
icon="plus"
|
||||
plain
|
||||
size="default"
|
||||
type="primary"
|
||||
@click="handleAdd"
|
||||
>新增
|
||||
icon="plus"
|
||||
plain
|
||||
size="default"
|
||||
type="primary"
|
||||
@click="handleAdd"
|
||||
>新增
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
icon="upload"
|
||||
plain
|
||||
size="default"
|
||||
type="info"
|
||||
@click="handleImport"
|
||||
>导入
|
||||
icon="upload"
|
||||
plain
|
||||
size="default"
|
||||
type="info"
|
||||
@click="handleImport"
|
||||
>导入
|
||||
</el-button>
|
||||
</el-col>
|
||||
<!-- <el-col :span="1.5">-->
|
||||
@ -69,35 +69,35 @@
|
||||
<!-- </el-col>-->
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
:disabled="!ids.length"
|
||||
icon="delete"
|
||||
type="danger"
|
||||
@click="handleDelete()"
|
||||
>批量删除
|
||||
:disabled="!ids.length"
|
||||
icon="delete"
|
||||
type="danger"
|
||||
@click="handleDelete()"
|
||||
>批量删除
|
||||
</el-button>
|
||||
</el-col>
|
||||
<right-toolbar
|
||||
:showSearch.sync="showSearch"
|
||||
@queryTable="getList"
|
||||
:showSearch.sync="showSearch"
|
||||
@queryTable="getList"
|
||||
></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
:data="dataList"
|
||||
@selection-change="handleSelectionChange"
|
||||
v-loading="loading"
|
||||
:data="dataList"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column align="center" label="机构名称" prop="name" />
|
||||
<el-table-column align="center" label="统一社会信用代码" prop="code" />
|
||||
<el-table-column align="center" label="主要研究方向" prop="research" />
|
||||
<el-table-column type="selection" width="55"/>
|
||||
<el-table-column align="center" label="机构名称" prop="name"/>
|
||||
<el-table-column align="center" label="统一社会信用代码" prop="code"/>
|
||||
<el-table-column align="center" label="主要研究方向" prop="research"/>
|
||||
|
||||
<!-- <el-table-column label="站点" align="center">
|
||||
<template #default="{ row }">
|
||||
{{ siteList.find((el) => el.id === row.tenantId)?.name ?? "无" }}
|
||||
</template>
|
||||
</el-table-column> -->
|
||||
<el-table-column align="center" label="所在地" prop="address" />
|
||||
<el-table-column align="center" label="所在地" prop="address"/>
|
||||
<el-table-column align="center" label="申请时间">
|
||||
<template #default="{ row }">
|
||||
<span>{{ row.createTime }}</span>
|
||||
@ -106,66 +106,66 @@
|
||||
<el-table-column align="center" label="操作">
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="handleDetail(row.id)"
|
||||
>修改
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="handleDetail(row.id)"
|
||||
>修改
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="delete"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="handleDelete(row.id)"
|
||||
>删除
|
||||
icon="delete"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="handleDelete(row.id)"
|
||||
>删除
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="openAssignAccount(row.id)"
|
||||
>分配账号
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="openAssignAccount(row.id)"
|
||||
>分配账号
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="openResetPassword(row.id)"
|
||||
>重置密码
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="openResetPassword(row.id)"
|
||||
>重置密码
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
v-model:page="queryParams.pageNum"
|
||||
:total="total"
|
||||
@pagination="getList"
|
||||
v-show="total > 0"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
v-model:page="queryParams.pageNum"
|
||||
:total="total"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 用户导入对话框 -->
|
||||
<el-dialog
|
||||
v-model="upload.open"
|
||||
:title="upload.title"
|
||||
append-to-body
|
||||
width="400px"
|
||||
v-model="upload.open"
|
||||
:title="upload.title"
|
||||
append-to-body
|
||||
width="400px"
|
||||
>
|
||||
<el-upload
|
||||
ref="uploadRef"
|
||||
:action="upload.url"
|
||||
:auto-upload="false"
|
||||
:disabled="upload.isUploading"
|
||||
:headers="upload.headers"
|
||||
:limit="1"
|
||||
:on-progress="handleFileUploadProgress"
|
||||
:on-success="handleFileSuccess"
|
||||
accept=".xlsx, .xls"
|
||||
drag
|
||||
ref="uploadRef"
|
||||
:action="upload.url"
|
||||
:auto-upload="false"
|
||||
:disabled="upload.isUploading"
|
||||
:headers="upload.headers"
|
||||
:limit="1"
|
||||
:on-progress="handleFileUploadProgress"
|
||||
:on-success="handleFileSuccess"
|
||||
accept=".xlsx, .xls"
|
||||
drag
|
||||
>
|
||||
<el-icon class="el-icon--upload">
|
||||
<upload-filled />
|
||||
<upload-filled/>
|
||||
</el-icon>
|
||||
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||
<template #tip>
|
||||
@ -176,13 +176,25 @@
|
||||
/>是否更新已经存在的用户数据
|
||||
</div> -->
|
||||
<span>仅允许导入xls、xlsx格式文件。</span>
|
||||
<!-- <el-link
|
||||
type="primary"
|
||||
:underline="false"
|
||||
style="font-size: 12px; vertical-align: baseline"
|
||||
@click="importTemplate"
|
||||
>下载模板</el-link
|
||||
> -->
|
||||
<el-link
|
||||
type="primary"
|
||||
:underline="false"
|
||||
style="font-size: 12px; vertical-align: baseline"
|
||||
@click="importTemplate"
|
||||
>下载模板
|
||||
</el-link
|
||||
>
|
||||
<br/>
|
||||
<span>科研机构导入说明:</span>
|
||||
<ol style="text-align: left">
|
||||
<li>
|
||||
<span>研究方向 多个用|隔开 (人工智能|量子计算)</span>
|
||||
</li>
|
||||
<li>
|
||||
<span>所属领域 (>拼接上下级 多个用|隔开)
|
||||
航空航天>航天技术>运载火箭技术|生物与新医药>中药、天然药物>创新药物研发技术</span>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</template>
|
||||
</el-upload>
|
||||
@ -195,34 +207,34 @@
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
v-model="showAssignAccount"
|
||||
append-to-body
|
||||
title="分配账号"
|
||||
width="400px"
|
||||
v-model="showAssignAccount"
|
||||
append-to-body
|
||||
title="分配账号"
|
||||
width="400px"
|
||||
>
|
||||
<el-form
|
||||
ref="assignAccountFormRef"
|
||||
:model="assignAccountForm"
|
||||
:rules="assignAccoutRules"
|
||||
label-width="80px"
|
||||
ref="assignAccountFormRef"
|
||||
:model="assignAccountForm"
|
||||
:rules="assignAccoutRules"
|
||||
label-width="80px"
|
||||
>
|
||||
<el-form-item label="手机号" prop="username">
|
||||
<el-input
|
||||
v-model="assignAccountForm.username"
|
||||
:maxlength="11"
|
||||
v-model="assignAccountForm.username"
|
||||
:maxlength="11"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="密码" prop="password">
|
||||
<el-input
|
||||
v-model="assignAccountForm.password"
|
||||
show-password
|
||||
v-model="assignAccountForm.password"
|
||||
show-password
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" @click="submitAssignAccount"
|
||||
>确 定
|
||||
>确 定
|
||||
</el-button>
|
||||
<el-button @click="closeAssignAccount">取 消</el-button>
|
||||
</div>
|
||||
@ -230,28 +242,28 @@
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
v-model="showResetPassword"
|
||||
append-to-body
|
||||
title="重置密码"
|
||||
width="400px"
|
||||
v-model="showResetPassword"
|
||||
append-to-body
|
||||
title="重置密码"
|
||||
width="400px"
|
||||
>
|
||||
<el-form
|
||||
ref="resetPasswordFormRef"
|
||||
:model="resetPasswordForm"
|
||||
:rules="assignAccoutRules"
|
||||
label-width="80px"
|
||||
ref="resetPasswordFormRef"
|
||||
:model="resetPasswordForm"
|
||||
:rules="assignAccoutRules"
|
||||
label-width="80px"
|
||||
>
|
||||
<el-form-item label="密码" prop="password">
|
||||
<el-input
|
||||
v-model="resetPasswordForm.password"
|
||||
show-password
|
||||
v-model="resetPasswordForm.password"
|
||||
show-password
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" @click="submitResetPassword"
|
||||
>确 定
|
||||
>确 定
|
||||
</el-button>
|
||||
<el-button @click="closeResetPassword">取 消</el-button>
|
||||
</div>
|
||||
@ -263,18 +275,18 @@
|
||||
<script name="Enterprise" setup>
|
||||
import {
|
||||
allocateAccount,
|
||||
casResearchDelete,
|
||||
casResearchDelete, casResearchImportData,
|
||||
getAccount,
|
||||
researchList,
|
||||
resetPassword,
|
||||
} from "@/api/dataList/research";
|
||||
import md5 from "js-md5";
|
||||
import { getToken } from "@/utils/auth";
|
||||
import { blobValidate } from "@/utils/ruoyi";
|
||||
import { saveAs } from "file-saver";
|
||||
import { reactive, ref, toRefs } from "vue";
|
||||
import { useRouter } from "vue-router";
|
||||
import { ElLoading, ElMessage, ElMessageBox } from "element-plus";
|
||||
import {getToken} from "@/utils/auth";
|
||||
import {blobValidate} from "@/utils/ruoyi";
|
||||
import {saveAs} from "file-saver";
|
||||
import {reactive, ref, toRefs} from "vue";
|
||||
import {useRouter} from "vue-router";
|
||||
import {ElLoading, ElMessage, ElMessageBox} from "element-plus";
|
||||
import request from "@/utils/request";
|
||||
import dayjs from "dayjs";
|
||||
|
||||
@ -300,12 +312,12 @@ const upload = reactive({
|
||||
// 是否更新已经存在的用户数据
|
||||
// updateSupport: 0,
|
||||
// 设置上传的请求头部
|
||||
headers: { Authorization: "Bearer " + getToken() },
|
||||
headers: {Authorization: "Bearer " + getToken()},
|
||||
// 上传的地址
|
||||
url: import.meta.env.VITE_APP_BASE_API + "/business/casResearch/importData",
|
||||
});
|
||||
|
||||
const { queryParams } = toRefs(data);
|
||||
const {queryParams} = toRefs(data);
|
||||
const showSearch = ref(true);
|
||||
// const siteList = ref([]);
|
||||
const loading = ref(true);
|
||||
@ -338,17 +350,17 @@ const handleQuery = () => {
|
||||
|
||||
const assignAccoutRules = {
|
||||
username: [
|
||||
{ required: true, message: "请输入用户名", trigger: "blur" },
|
||||
{required: true, message: "请输入用户名", trigger: "blur"},
|
||||
{
|
||||
pattern: /^1[3-9]\d{9}$/,
|
||||
message: "请输入正确的手机号码",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
password: [{ required: true, message: "请输入密码", trigger: "blur" }],
|
||||
vipType: [{ required: true, message: "请选择会员类型", trigger: "change" }],
|
||||
password: [{required: true, message: "请输入密码", trigger: "blur"}],
|
||||
vipType: [{required: true, message: "请选择会员类型", trigger: "change"}],
|
||||
expireTime: [
|
||||
{ required: true, message: "请选择到期时间", trigger: "change" },
|
||||
{required: true, message: "请选择到期时间", trigger: "change"},
|
||||
],
|
||||
};
|
||||
const showAssignAccount = ref(false);
|
||||
@ -365,7 +377,7 @@ const showResetPassword = ref(false);
|
||||
|
||||
const openAssignAccount = async (id) => {
|
||||
resetForm();
|
||||
const { have, data } = await getAccount(id);
|
||||
const {have, data} = await getAccount(id);
|
||||
if (have) {
|
||||
ElMessageBox.alert(`已经存在账号:${data}`, "账号已经存在");
|
||||
} else {
|
||||
@ -376,7 +388,7 @@ const openAssignAccount = async (id) => {
|
||||
|
||||
const openResetPassword = async (id) => {
|
||||
resetForm();
|
||||
const { have, userId } = await getAccount(id);
|
||||
const {have, userId} = await getAccount(id);
|
||||
if (have) {
|
||||
resetPasswordForm.id = userId;
|
||||
showResetPassword.value = true;
|
||||
@ -424,9 +436,9 @@ const submitResetPassword = async () => {
|
||||
//TODO:
|
||||
/** 开通vip操作 */
|
||||
const vipData = reactive({
|
||||
vipForm: { userType: "1" },
|
||||
vipForm: {userType: "1"},
|
||||
});
|
||||
const { vipForm } = toRefs(vipData);
|
||||
const {vipForm} = toRefs(vipData);
|
||||
const showOpenVip = ref(false);
|
||||
const vipFormRef = ref();
|
||||
|
||||
@ -443,7 +455,7 @@ const vipFormRef = ref();
|
||||
// };
|
||||
|
||||
const resetVipForm = () => {
|
||||
vipForm.value = { userType: "1" };
|
||||
vipForm.value = {userType: "1"};
|
||||
if (vipFormRef.value) {
|
||||
vipFormRef.value.resetFields();
|
||||
}
|
||||
@ -469,7 +481,7 @@ const handleAdd = () => {
|
||||
const handleDetail = (id) => {
|
||||
router.push({
|
||||
path: "/dataList/research-institutions/edit",
|
||||
query: { id },
|
||||
query: {id},
|
||||
});
|
||||
};
|
||||
const uploadRef = ref(null);
|
||||
@ -481,12 +493,9 @@ function handleImport() {
|
||||
}
|
||||
|
||||
/** 下载模板操作 */
|
||||
function importTemplate() {
|
||||
proxy.download(
|
||||
"system/user/importTemplate",
|
||||
{},
|
||||
`user_template_${new Date().getTime()}.xlsx`
|
||||
);
|
||||
async function importTemplate() {
|
||||
const blob = await casResearchImportData()
|
||||
saveAs(blob, "科研机构导入模板.xlsx");
|
||||
}
|
||||
|
||||
/**文件上传中处理 */
|
||||
@ -499,11 +508,11 @@ const handleFileSuccess = (response, file, fileList) => {
|
||||
upload.isUploading = false;
|
||||
uploadRef.value.handleRemove(file);
|
||||
ElMessageBox.alert(
|
||||
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
|
||||
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
|
||||
response.msg +
|
||||
"</div>",
|
||||
"导入结果",
|
||||
{ dangerouslyUseHTMLString: true }
|
||||
"导入结果",
|
||||
{dangerouslyUseHTMLString: true}
|
||||
);
|
||||
getList();
|
||||
};
|
||||
@ -516,12 +525,13 @@ function submitFileForm() {
|
||||
const handleDelete = async (id) => {
|
||||
const delIds = id || ids.value.join(",");
|
||||
ElMessageBox.confirm(`是否确认删除编号为${delIds}的数据项?`)
|
||||
.then(async () => {
|
||||
await casResearchDelete(delIds);
|
||||
getList();
|
||||
ElMessage.success("删除成功");
|
||||
})
|
||||
.catch(() => {});
|
||||
.then(async () => {
|
||||
await casResearchDelete(delIds);
|
||||
getList();
|
||||
ElMessage.success("删除成功");
|
||||
})
|
||||
.catch(() => {
|
||||
});
|
||||
};
|
||||
|
||||
let downloadLoadingInstance;
|
||||
@ -531,41 +541,41 @@ const download = (url, filename) => {
|
||||
background: "rgba(0, 0, 0, 0.7)",
|
||||
});
|
||||
return request
|
||||
.get(url, {
|
||||
// transformRequest: [
|
||||
// (params) => {
|
||||
// return tansParams(params);
|
||||
// },
|
||||
// ],
|
||||
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
||||
responseType: "blob",
|
||||
})
|
||||
.then(async (data) => {
|
||||
const isLogin = await blobValidate(data);
|
||||
if (isLogin) {
|
||||
const blob = new Blob([data]);
|
||||
saveAs(blob, filename);
|
||||
} else {
|
||||
const resText = await data.text();
|
||||
const rspObj = JSON.parse(resText);
|
||||
const errMsg =
|
||||
errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
|
||||
ElMessage.error(errMsg);
|
||||
}
|
||||
downloadLoadingInstance.close();
|
||||
})
|
||||
.catch((r) => {
|
||||
console.error(r);
|
||||
ElMessage.error("下载文件出现错误,请联系管理员!");
|
||||
downloadLoadingInstance.close();
|
||||
});
|
||||
.get(url, {
|
||||
// transformRequest: [
|
||||
// (params) => {
|
||||
// return tansParams(params);
|
||||
// },
|
||||
// ],
|
||||
headers: {"Content-Type": "application/x-www-form-urlencoded"},
|
||||
responseType: "blob",
|
||||
})
|
||||
.then(async (data) => {
|
||||
const isLogin = await blobValidate(data);
|
||||
if (isLogin) {
|
||||
const blob = new Blob([data]);
|
||||
saveAs(blob, filename);
|
||||
} else {
|
||||
const resText = await data.text();
|
||||
const rspObj = JSON.parse(resText);
|
||||
const errMsg =
|
||||
errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
|
||||
ElMessage.error(errMsg);
|
||||
}
|
||||
downloadLoadingInstance.close();
|
||||
})
|
||||
.catch((r) => {
|
||||
console.error(r);
|
||||
ElMessage.error("下载文件出现错误,请联系管理员!");
|
||||
downloadLoadingInstance.close();
|
||||
});
|
||||
};
|
||||
|
||||
const handleExport = () => {
|
||||
ElMessageBox.confirm(`是否确认企业列表?`).then(() => {
|
||||
download(
|
||||
`/business/enterprise/export`,
|
||||
`企业信息(${dayjs().format("YYYYMMDDHHmmss")}).xlsx`
|
||||
`/business/enterprise/export`,
|
||||
`企业信息(${dayjs().format("YYYYMMDDHHmmss")}).xlsx`
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user