bug fix and performance improvements

This commit is contained in:
quantulr
2023-08-18 17:31:34 +08:00
parent 198b363997
commit d54b5aad2f
10 changed files with 830 additions and 717 deletions

View File

@ -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",
});
}

View File

@ -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'
})
}

View File

@ -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",
})
}

View File

@ -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'
})
}

View File

@ -125,6 +125,6 @@ export const countryOptions = [
},
{
key: "kg",
zh: "吉尔吉斯斯坦",
value: "吉尔吉斯斯坦",
}
];

View File

@ -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"

View File

@ -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>仅允许导入xlsxlsx格式文件</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`
);
});
};

View File

@ -180,6 +180,22 @@
/>是否更新已经存在的用户数据
</div> -->
<span>仅允许导入xlsxlsx格式文件</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({

View File

@ -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>仅允许导入xlsxlsx格式文件</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 = () => {

View File

@ -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>仅允许导入xlsxlsx格式文件</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`
);
});
};