research update

This commit is contained in:
2023-06-09 17:30:58 +08:00
parent 575bbc3962
commit 5940dfa4aa
31 changed files with 1648 additions and 1631 deletions

View File

@ -1,20 +1,20 @@
<template>
<div class="app-container">
<el-form
v-show="showSearch"
:model="queryParams"
ref="queryFormRef"
:inline="true"
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"
placeholder="请输入企业名称"
clearable
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,16 @@
<el-form-item>
<el-button
type="primary"
icon="search"
size="default"
@click="handleQuery"
>搜索</el-button
icon="search"
size="default"
type="primary"
@click="handleQuery"
>搜索
</el-button
>
<el-button icon="refresh" size="default" @click="resetQuery"
>重置</el-button
>重置
</el-button
>
</el-form-item>
</el-form>
@ -38,59 +40,63 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="plus"
size="default"
@click="handleAdd"
>新增</el-button
icon="plus"
plain
size="default"
type="primary"
@click="handleAdd"
>新增
</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="info"
plain
icon="upload"
size="default"
@click="handleImport"
>导入</el-button
icon="upload"
plain
size="default"
type="info"
@click="handleImport"
>导入
</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="download"
size="default"
@click="handleExport"
>导出</el-button
icon="download"
plain
size="default"
type="warning"
@click="handleExport"
>导出
</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
:disabled="!ids.length"
type="danger"
icon="delete"
@click="handleDelete()"
>批量删除</el-button
: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 label="数据编号" align="center" prop="id" />
<el-table-column label="企业名称" align="center" 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 label="所属领域" align="center" show-overflow-tooltip>
<el-table-column align="center" label="所属领域" show-overflow-tooltip>
<template #default="{ row }">
<div>{{ row.industrys[row.industrys.length - 1] }}</div>
</template>
@ -100,88 +106,95 @@
{{ siteList.find((el) => el.id === row.tenantId)?.name ?? "无" }}
</template>
</el-table-column> -->
<el-table-column label="所在地" align="center" prop="address" />
<el-table-column label="企业类型" align="center" prop="kind">
<el-table-column align="center" label="所在地" prop="address"/>
<el-table-column align="center" label="企业类型" prop="kind">
<template #default="{ row }">
<div>
{{ enterpriseOptions.find((e) => row.kind == e.key).value }}
</div>
</template>
</el-table-column>
<el-table-column label="申请时间" align="center">
<el-table-column align="center" label="申请时间">
<template #default="{ row }">
<span>{{ row.createdAt }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<el-table-column align="center" label="操作">
<template #default="{ row }">
<el-button
size="small"
type="text"
icon="edit"
@click="handleDetail(row.id)"
>修改</el-button
icon="edit"
size="small"
type="text"
@click="handleDetail(row.id)"
>修改
</el-button
>
<el-button
size="small"
type="text"
icon="delete"
@click="handleDelete(row.id)"
>删除</el-button
icon="delete"
size="small"
type="text"
@click="handleDelete(row.id)"
>删除
</el-button
>
<el-button
size="small"
type="text"
icon="edit"
@click="openAssignAccount(row.id)"
>分配账号</el-button
icon="edit"
size="small"
type="text"
@click="openAssignAccount(row.id)"
>分配账号
</el-button
>
<el-button
size="small"
type="text"
icon="edit"
@click="openResetPassword(row.id)"
>重置密码</el-button
icon="edit"
size="small"
type="text"
@click="openResetPassword(row.id)"
>重置密码
</el-button
>
<el-button
size="small"
type="text"
icon="edit"
@click="handleOpenVip(row.id)"
>开通会员</el-button
icon="edit"
size="small"
type="text"
@click="handleOpenVip(row.id)"
>开通会员
</el-button
>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
v-show="total > 0"
v-model:limit="queryParams.pageSize"
v-model:page="queryParams.pageNum"
:total="total"
@pagination="getList"
/>
<!-- 用户导入对话框 -->
<el-dialog
:title="upload.title"
v-model="upload.open"
width="400px"
append-to-body
v-model="upload.open"
:title="upload.title"
append-to-body
width="400px"
>
<el-upload
ref="uploadRef"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
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 /></el-icon>
<el-icon class="el-icon--upload">
<upload-filled/>
</el-icon>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<template #tip>
<div class="el-upload__tip text-center">
@ -210,31 +223,32 @@
</el-dialog>
<el-dialog
title="分配账号"
v-model="showAssignAccount"
width="400px"
append-to-body
v-model="showAssignAccount"
append-to-body
title="分配账号"
width="400px"
>
<el-form
:model="assignAccountForm"
:rules="assignAccoutRules"
label-width="80px"
ref="assignAccountFormRef"
ref="assignAccountFormRef"
:model="assignAccountForm"
:rules="assignAccoutRules"
label-width="80px"
>
<el-form-item label="用户名" prop="username">
<el-input v-model="assignAccountForm.username"></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
>
<el-button @click="closeAssignAccount"> </el-button>
</div>
@ -242,28 +256,29 @@
</el-dialog>
<el-dialog
title="重置密码"
v-model="showResetPassword"
width="400px"
append-to-body
v-model="showResetPassword"
append-to-body
title="重置密码"
width="400px"
>
<el-form
:model="resetPasswordForm"
:rules="assignAccoutRules"
label-width="80px"
ref="resetPasswordFormRef"
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
>
<el-button @click="closeResetPassword"> </el-button>
</div>
@ -271,16 +286,16 @@
</el-dialog>
<el-dialog
:title="vipForm.id ? `修改会员` : `开通会员`"
v-model="showOpenVip"
width="400px"
append-to-body
v-model="showOpenVip"
:title="vipForm.id ? `修改会员` : `开通会员`"
append-to-body
width="400px"
>
<el-form
:model="vipForm"
:rules="assignAccoutRules"
label-width="80px"
ref="vipFormRef"
ref="vipFormRef"
:model="vipForm"
:rules="assignAccoutRules"
label-width="80px"
>
<el-form-item label="会员类型" prop="vipType">
<el-radio-group v-model="vipForm.vipType">
@ -290,25 +305,26 @@
</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"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="选择到期时间"
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
type="primary"
@click="submitVip"
:disabled="vipForm.vipType == 0"
> </el-button
:disabled="vipForm.vipType == 0"
type="primary"
@click="submitVip"
>
</el-button
>
<el-button @click="closeVip"> </el-button>
</div>
@ -317,31 +333,29 @@
</div>
</template>
<script setup name="Enterprise">
<script name="Enterprise" setup>
import {
companyList,
companyExport,
companyDelete,
allocateAccount,
companyDelete,
companyList,
getAccount,
restPassword,
openCasVip,
getCasVip,
openCasVip,
restPassword,
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 { tansParams, blobValidate } from "@/utils/ruoyi";
import { saveAs } from "file-saver";
import { tenantSelect } from "@/api/subPlatform/tenant";
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";
@ -350,9 +364,9 @@ const data = reactive({
queryParams: {
pageNum: 1,
pageSize: 10,
examine_status: 2,
// examine_status: 2,
name: undefined,
tenantId: undefined,
// tenantId: undefined,
},
});
@ -367,12 +381,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);
@ -404,11 +418,11 @@ const handleQuery = () => {
};
const assignAccoutRules = {
username: [{ required: true, message: "请输入用户名", trigger: "blur" }],
password: [{ required: true, message: "请输入密码", trigger: "blur" }],
vipType: [{ required: true, message: "请选择会员类型", trigger: "change" }],
username: [{required: true, message: "请输入用户名", trigger: "blur"}],
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);
@ -425,7 +439,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 {
@ -436,9 +450,9 @@ const openAssignAccount = async (id) => {
const openResetPassword = async (id) => {
resetForm();
const { have } = await getAccount(id);
const {have, userId} = await getAccount(id);
if (have) {
resetPasswordForm.id = id;
resetPasswordForm.id = userId;
showResetPassword.value = true;
} else {
ElMessageBox.alert(`尚未分配账号,请先分配账号`, "尚未分配账号");
@ -484,15 +498,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) {
@ -521,7 +535,7 @@ const submitVip = async () => {
};
const resetVipForm = () => {
vipForm.value = { userType: "1" };
vipForm.value = {userType: "1"};
if (vipFormRef.value) {
vipFormRef.value.resetFields();
}
@ -547,23 +561,26 @@ const handleAdd = () => {
const handleDetail = (id) => {
router.push({
path: "/dataList/enterprise/add",
query: { id },
query: {id},
});
};
const uploadRef = ref(null);
/** 导入按钮操作 */
function handleImport() {
upload.title = "用户导入";
upload.open = true;
}
/** 下载模板操作 */
function importTemplate() {
proxy.download(
"system/user/importTemplate",
{},
`user_template_${new Date().getTime()}.xlsx`
"system/user/importTemplate",
{},
`user_template_${new Date().getTime()}.xlsx`
);
}
/**文件上传中处理 */
const handleFileUploadProgress = (event, file, fileList) => {
upload.isUploading = true;
@ -574,11 +591,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();
};
@ -587,15 +604,17 @@ const handleFileSuccess = (response, file, fileList) => {
function submitFileForm() {
uploadRef.value.submit();
}
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;
@ -605,41 +624,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`
);
});
};