update code
parent
a6536b1d93
commit
3c24f82b78
|
@ -4,8 +4,7 @@
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" href="favicon.ico" />
|
<link rel="icon" href="favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>算法测试验证软件平台</title>
|
<title>算法测试验证软件平台</title>
|
||||||
<link rel="stylesheet" href="./css/main.css">
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
.dev-state{
|
|
||||||
background-size: 100% 100%;
|
|
||||||
display: inline-block;
|
|
||||||
width: 40px;
|
|
||||||
height: 40px;
|
|
||||||
&.dev-s{
|
|
||||||
background-image: url('../images/dev/dev-s.png');
|
|
||||||
}
|
|
||||||
&.dev-w{
|
|
||||||
background-image: url('../images/dev/dev-w.png');
|
|
||||||
}
|
|
||||||
&.dev-e{
|
|
||||||
background-image: url('../images/dev/dev-e.png');
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -4,10 +4,11 @@ import router from "@/router";
|
||||||
import { setupStore } from "@/store";
|
import { setupStore } from "@/store";
|
||||||
import { setupDirective } from "@/directive";
|
import { setupDirective } from "@/directive";
|
||||||
import { setupElIcons, setupI18n, setupPermission } from "@/plugins";
|
import { setupElIcons, setupI18n, setupPermission } from "@/plugins";
|
||||||
|
// @ts-ignore
|
||||||
import JsonViewer from "vue3-json-viewer"
|
import JsonViewer from "vue3-json-viewer"
|
||||||
// 本地SVG图标
|
// 本地SVG图标
|
||||||
import "virtual:svg-icons-register";
|
import "virtual:svg-icons-register";
|
||||||
|
import './styles/main.css'
|
||||||
// 样式
|
// 样式
|
||||||
import "element-plus/theme-chalk/dark/css-vars.css";
|
import "element-plus/theme-chalk/dark/css-vars.css";
|
||||||
import "vue3-json-viewer/dist/index.css"
|
import "vue3-json-viewer/dist/index.css"
|
||||||
|
|
|
@ -39,7 +39,7 @@ export const useUserStore = defineStore("user", () => {
|
||||||
function getUserInfo() {
|
function getUserInfo() {
|
||||||
return new Promise<UserInfo>((resolve, reject) => {
|
return new Promise<UserInfo>((resolve, reject) => {
|
||||||
UserAPI.getInfo()
|
UserAPI.getInfo()
|
||||||
.then((data) => {
|
.then((data:any) => {
|
||||||
if (!data) {
|
if (!data) {
|
||||||
reject("Verification failed, please Login again.");
|
reject("Verification failed, please Login again.");
|
||||||
return;
|
return;
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 2.9 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.0 KiB |
Binary file not shown.
After Width: | Height: | Size: 2.8 KiB |
|
@ -5,11 +5,11 @@
|
||||||
height: 40px;
|
height: 40px;
|
||||||
}
|
}
|
||||||
.dev-state.dev-s {
|
.dev-state.dev-s {
|
||||||
background-image: url('../images/dev/dev-s.png');
|
background-image: url('./dev/dev-s.png');
|
||||||
}
|
}
|
||||||
.dev-state.dev-w {
|
.dev-state.dev-w {
|
||||||
background-image: url('../images/dev/dev-w.png');
|
background-image: url('./dev/dev-w.png');
|
||||||
}
|
}
|
||||||
.dev-state.dev-e {
|
.dev-state.dev-e {
|
||||||
background-image: url('../images/dev/dev-e.png');
|
background-image: url('./dev/dev-e.png');
|
||||||
}
|
}
|
|
@ -26,7 +26,7 @@ service.interceptors.request.use(
|
||||||
|
|
||||||
// 响应拦截器
|
// 响应拦截器
|
||||||
service.interceptors.response.use(
|
service.interceptors.response.use(
|
||||||
(response: AxiosResponse) => {
|
(response: any) => {
|
||||||
// 检查配置的响应类型是否为二进制类型('blob' 或 'arraybuffer'), 如果是,直接返回响应对象
|
// 检查配置的响应类型是否为二进制类型('blob' 或 'arraybuffer'), 如果是,直接返回响应对象
|
||||||
if (
|
if (
|
||||||
response.config.responseType === "blob" ||
|
response.config.responseType === "blob" ||
|
||||||
|
|
|
@ -122,13 +122,13 @@ onMounted(() => {
|
||||||
.flow-card {
|
.flow-card {
|
||||||
height: 80%;
|
height: 80%;
|
||||||
width: calc(100% - 450px);
|
width: calc(100% - 450px);
|
||||||
|
margin: 0px 12px;
|
||||||
.el-card__body {
|
.el-card__body {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
margin: 0px 12px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.node-panel {
|
.node-panel {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="index-notice" v-if="loadNotice!=null">
|
<div class="index-notice" v-if="loadNotice!=null">
|
||||||
<div v-for="(it,idx) in noticeList" :key="idx" class="notice-item">
|
<div v-for="(it,idx) in noticeList" :key="idx" class="notice-item">
|
||||||
<div style="font-size: 12px;color: #333;" v-if="1==2">
|
<div style="font-size: 12px;color: #333;" v-if="false">
|
||||||
<svg-icon class="icon-info" icon-class="info" v-if="it.type=='info'" color="orange"></svg-icon>
|
<svg-icon class="icon-info" icon-class="info" v-if="it.type=='info'" color="orange"></svg-icon>
|
||||||
<svg-icon class="icon-warn" icon-class="warn" v-if="it.type=='warn'" color="red"></svg-icon>
|
<svg-icon class="icon-warn" icon-class="warn" v-if="it.type=='warn'" color="red"></svg-icon>
|
||||||
{{ it.type=="info"?"系统信息":"告警信息" }}
|
{{ it.type=="info"?"系统信息":"告警信息" }}
|
||||||
|
|
|
@ -108,7 +108,7 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang='ts' setup>
|
<script setup>
|
||||||
import LogApi from '@/api/log'
|
import LogApi from '@/api/log'
|
||||||
let info = reactive({
|
let info = reactive({
|
||||||
cnt1: 0,
|
cnt1: 0,
|
||||||
|
|
|
@ -177,11 +177,11 @@ onMounted(() => {
|
||||||
.flow-card{
|
.flow-card{
|
||||||
height: 80%;
|
height: 80%;
|
||||||
width:calc(100% - 450px);
|
width:calc(100% - 450px);
|
||||||
|
margin: 0px 12px;
|
||||||
.el-card__body{
|
.el-card__body{
|
||||||
height:100%;
|
height:100%;
|
||||||
padding:4px;
|
padding:4px;
|
||||||
}
|
}
|
||||||
margin: 0px 12px;
|
|
||||||
}
|
}
|
||||||
.node-panel{
|
.node-panel{
|
||||||
width:240px;
|
width:240px;
|
||||||
|
|
|
@ -67,13 +67,10 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup>
|
||||||
import md5 from 'js-md5';
|
import md5 from 'js-md5';
|
||||||
import { useSettingsStore, useUserStore } from "@/store";
|
import { useSettingsStore, useUserStore } from "@/store";
|
||||||
import AuthAPI from "@/api/auth";
|
import { useRoute } from "vue-router";
|
||||||
import { LoginData } from "@/api/auth/model";
|
|
||||||
import type { FormInstance } from "element-plus";
|
|
||||||
import { LocationQuery, LocationQueryValue, useRoute } from "vue-router";
|
|
||||||
import router from "@/router";
|
import router from "@/router";
|
||||||
import defaultSettings from "@/settings";
|
import defaultSettings from "@/settings";
|
||||||
import { ThemeEnum } from "@/enums/ThemeEnum";
|
import { ThemeEnum } from "@/enums/ThemeEnum";
|
||||||
|
@ -91,10 +88,10 @@ const icpVisible = ref(true);
|
||||||
const loading = ref(false); // 按钮loading
|
const loading = ref(false); // 按钮loading
|
||||||
const isCapslock = ref(false); // 是否大写锁定
|
const isCapslock = ref(false); // 是否大写锁定
|
||||||
const captchaBase64 = ref(); // 验证码图片Base64字符串
|
const captchaBase64 = ref(); // 验证码图片Base64字符串
|
||||||
const loginFormRef = ref<FormInstance>(); // 登录表单ref
|
const loginFormRef = ref(); // 登录表单ref
|
||||||
const { height } = useWindowSize();
|
const { height } = useWindowSize();
|
||||||
|
|
||||||
const loginData = ref<LoginData>({
|
const loginData = ref({
|
||||||
username: "admin",
|
username: "admin",
|
||||||
password: "12345678",
|
password: "12345678",
|
||||||
pass: "12345678",
|
pass: "12345678",
|
||||||
|
@ -144,7 +141,7 @@ function getCaptcha() {
|
||||||
/** 登录 */
|
/** 登录 */
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
function handleLogin() {
|
function handleLogin() {
|
||||||
loginFormRef.value?.validate((valid: boolean) => {
|
loginFormRef.value?.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
loginData.value.pasw = loginData.value.password;
|
loginData.value.pasw = loginData.value.password;
|
||||||
|
@ -152,10 +149,10 @@ function handleLogin() {
|
||||||
userStore
|
userStore
|
||||||
.login(loginData.value)
|
.login(loginData.value)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
const query: LocationQuery = route.query;
|
const query = route.query;
|
||||||
const redirect = (query.redirect as LocationQueryValue) ?? "/";
|
const redirect = (query.redirect) ?? "/";
|
||||||
const otherQueryParams = Object.keys(query).reduce(
|
const otherQueryParams = Object.keys(query).reduce(
|
||||||
(acc: any, cur: string) => {
|
(acc, cur) => {
|
||||||
if (cur !== "redirect") {
|
if (cur !== "redirect") {
|
||||||
acc[cur] = query[cur];
|
acc[cur] = query[cur];
|
||||||
}
|
}
|
||||||
|
@ -194,7 +191,7 @@ watchEffect(() => {
|
||||||
});
|
});
|
||||||
|
|
||||||
/** 检查输入大小写 */
|
/** 检查输入大小写 */
|
||||||
function checkCapslock(event: KeyboardEvent) {
|
function checkCapslock(event) {
|
||||||
// 防止浏览器密码自动填充时报错
|
// 防止浏览器密码自动填充时报错
|
||||||
if (event instanceof KeyboardEvent) {
|
if (event instanceof KeyboardEvent) {
|
||||||
isCapslock.value = event.getModifierState("CapsLock");
|
isCapslock.value = event.getModifierState("CapsLock");
|
||||||
|
|
|
@ -68,7 +68,7 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup>
|
||||||
import ConstApi from "@/api/const";
|
import ConstApi from "@/api/const";
|
||||||
import OperatorApi from "@/api/operator";
|
import OperatorApi from "@/api/operator";
|
||||||
import { toJson } from '@/utils/'
|
import { toJson } from '@/utils/'
|
||||||
|
@ -79,7 +79,7 @@ const fileStatus = ref(false); // 文件状态
|
||||||
const codeHtml = ref(""); // 文件信息
|
const codeHtml = ref(""); // 文件信息
|
||||||
|
|
||||||
// 上传组件
|
// 上传组件
|
||||||
const uploadRef = ref<UploadInstance>();
|
const uploadRef = ref();
|
||||||
// 表单数据
|
// 表单数据
|
||||||
const formData = reactive({
|
const formData = reactive({
|
||||||
status: 1,
|
status: 1,
|
||||||
|
@ -108,7 +108,7 @@ function handleChangeRules() {
|
||||||
|
|
||||||
/** 表单提交 */
|
/** 表单提交 */
|
||||||
const handleSubmit = useThrottleFn(() => {
|
const handleSubmit = useThrottleFn(() => {
|
||||||
formRef.value.validate((valid: any) => {
|
formRef.value.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
OperatorApi.add(formData)
|
OperatorApi.add(formData)
|
||||||
|
|
|
@ -5,78 +5,51 @@
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="flex justify-between">
|
<div class="flex justify-between">
|
||||||
<div>
|
<div>
|
||||||
<el-button type="primary" @click="handleAdd"
|
<el-button type="primary" @click="handleAdd"><i-ep-plus />添加算子</el-button>
|
||||||
><i-ep-plus />添加算子</el-button
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||||
<el-form-item label="算子名称" prop="operator_name">
|
<el-form-item label="算子名称" prop="operator_name">
|
||||||
<el-input
|
<el-input v-model="queryParams.operator_name" placeholder="请输入算子名称" clearable style="width: 200px"
|
||||||
v-model="queryParams.operator_name"
|
@keyup.enter="handleQuery" />
|
||||||
placeholder="请输入算子名称"
|
|
||||||
clearable
|
|
||||||
style="width: 200px"
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" @click="handleQuery"
|
<el-button type="primary" @click="handleQuery"><i-ep-search />搜索</el-button>
|
||||||
><i-ep-search />搜索</el-button
|
|
||||||
>
|
|
||||||
<el-button @click="resetQuery">
|
<el-button @click="resetQuery">
|
||||||
<i-ep-refresh />
|
<i-ep-refresh />
|
||||||
重置</el-button
|
重置</el-button>
|
||||||
>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<el-table
|
<el-table v-loading="loading" :data="pageData" stripe @selection-change="handleSelectionChange">
|
||||||
v-loading="loading"
|
|
||||||
:data="pageData"
|
|
||||||
stripe
|
|
||||||
@selection-change="handleSelectionChange"
|
|
||||||
>
|
|
||||||
<el-table-column label="算子名称" align="left" prop="operator_name" width="300" />
|
<el-table-column label="算子名称" align="left" prop="operator_name" width="300" />
|
||||||
<el-table-column label="算子主类型" align="left" prop="oper_main_type_name" width="180"/>
|
<el-table-column label="算子主类型" align="left" prop="oper_main_type_name" width="180" />
|
||||||
<el-table-column label="算子子类型" align="left" prop="oper_sub_type_name" width="180" />
|
<el-table-column label="算子子类型" align="left" prop="oper_sub_type_name" width="180" />
|
||||||
<el-table-column label="算子说明" align="left" prop="operator_desc" />
|
<el-table-column label="算子说明" align="left" prop="operator_desc" />
|
||||||
<el-table-column label="创建时间" width="180" align="left" prop="create_time" />
|
<el-table-column label="创建时间" width="180" align="left" prop="create_time" />
|
||||||
<el-table-column label="操作" fixed="right" align="center" width="280">
|
<el-table-column label="操作" fixed="right" align="center" width="280">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button
|
<el-button text type="primary" size="small"
|
||||||
text
|
@click="handleDetail(scope.row.operator_id)"><i-ep-view />查看</el-button>
|
||||||
type="primary"
|
<el-button text type="primary" size="small"
|
||||||
size="small"
|
@click="handleDelete(scope.row.operator_id)"><i-ep-delete />删除</el-button>
|
||||||
@click="handleDetail(scope.row.operator_id)"
|
<el-button text type="primary" size="small"
|
||||||
><i-ep-view />查看</el-button
|
@click="handlePushParams(scope.row)"><i-ep-plus />添加算子程序</el-button>
|
||||||
>
|
|
||||||
<el-button text type="primary" size="small" @click="handleDelete(scope.row.operator_id)"
|
|
||||||
><i-ep-delete />删除</el-button
|
|
||||||
>
|
|
||||||
<el-button text type="primary" size="small" @click="handlePushParams(scope.row)"
|
|
||||||
><i-ep-plus />添加算子程序</el-button
|
|
||||||
>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
<pagination
|
<pagination v-if="total > 0" v-model:total="total" v-model:page="queryParams.page_num"
|
||||||
v-if="total > 0"
|
v-model:limit="queryParams.page_size" @pagination="handleQuery" />
|
||||||
v-model:total="total"
|
|
||||||
v-model:page="queryParams.page_num"
|
|
||||||
v-model:limit="queryParams.page_size"
|
|
||||||
@pagination="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-card>
|
</el-card>
|
||||||
<paramDialog ref="paramDialogRef"></paramDialog>
|
<paramDialog ref="paramDialogRef"></paramDialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup>
|
||||||
import OperatorApi from '@/api/operator'
|
import OperatorApi from '@/api/operator'
|
||||||
import paramDialog from "../calculateParam/dialog.vue";
|
import paramDialog from "../calculateParam/dialog.vue";
|
||||||
|
|
||||||
|
@ -90,10 +63,10 @@ const queryFormRef = ref(ElForm); // 查询表单
|
||||||
const queryParams = reactive({
|
const queryParams = reactive({
|
||||||
page_num: 1,
|
page_num: 1,
|
||||||
page_size: 10,
|
page_size: 10,
|
||||||
order_type:null,
|
order_type: null,
|
||||||
order_by:null,
|
order_by: null,
|
||||||
operator_name:null,
|
operator_name: null,
|
||||||
oper_main_type:null
|
oper_main_type: null
|
||||||
});
|
});
|
||||||
const paramDialogRef = ref(""); // 算子程序子组件
|
const paramDialogRef = ref(""); // 算子程序子组件
|
||||||
|
|
||||||
|
@ -107,7 +80,7 @@ function handleQuery() {
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 重置查询 */
|
/** 重置查询 */
|
||||||
|
@ -115,19 +88,19 @@ function resetQuery() {
|
||||||
queryFormRef.value.resetFields();
|
queryFormRef.value.resetFields();
|
||||||
queryParams.pageNum = 1;
|
queryParams.pageNum = 1;
|
||||||
queryParams.order_type = null,
|
queryParams.order_type = null,
|
||||||
queryParams.order_by = null,
|
queryParams.order_by = null,
|
||||||
queryParams.operator_name = null,
|
queryParams.operator_name = null,
|
||||||
queryParams.oper_main_type = null
|
queryParams.oper_main_type = null
|
||||||
handleQuery();
|
handleQuery();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 行选中 */
|
/** 行选中 */
|
||||||
function handleSelectionChange(selection: any) {
|
function handleSelectionChange(selection) {
|
||||||
removeIds.value = selection.map((item: any) => item.operator_id);
|
removeIds.value = selection.map((item) => item.operator_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 删除数据 */
|
/** 删除数据 */
|
||||||
function handleDelete(id?: number) {
|
function handleDelete(id) {
|
||||||
ElMessageBox.confirm("删除时也会删除对应的算子软件,是否确认删除算子?", "警告", {
|
ElMessageBox.confirm("删除时也会删除对应的算子软件,是否确认删除算子?", "警告", {
|
||||||
confirmButtonText: "确定",
|
confirmButtonText: "确定",
|
||||||
cancelButtonText: "取消",
|
cancelButtonText: "取消",
|
||||||
|
@ -141,13 +114,13 @@ function handleDelete(id?: number) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 添加算子程序 */
|
/** 添加算子程序 */
|
||||||
function handlePushParams(data){
|
function handlePushParams(data) {
|
||||||
paramDialogRef.value.show(data);
|
paramDialogRef.value.show(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 查看算子 */
|
/** 查看算子 */
|
||||||
function handleDetail(operator_id?: number) {
|
function handleDetail(operator_id) {
|
||||||
router.push({path:"/operatorLibrary/calculateDetail",query:{id:operator_id}})
|
router.push({ path: "/operatorLibrary/calculateDetail", query: { id: operator_id } })
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 新增算子 */
|
/** 新增算子 */
|
||||||
|
|
|
@ -87,7 +87,7 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup>
|
||||||
import OperatorApi from "@/api/operator";
|
import OperatorApi from "@/api/operator";
|
||||||
import paramDialog from "../calculateParam/dialog.vue";
|
import paramDialog from "../calculateParam/dialog.vue";
|
||||||
import { toJson } from '@/utils/'
|
import { toJson } from '@/utils/'
|
||||||
|
|
|
@ -3,49 +3,30 @@
|
||||||
<div class="app-container model-detail">
|
<div class="app-container model-detail">
|
||||||
<!-- 新增/编辑表单 -->
|
<!-- 新增/编辑表单 -->
|
||||||
<el-card v-loading="loading">
|
<el-card v-loading="loading">
|
||||||
<template #header
|
<template #header><svg-icon icon-class="pause" style="width: 20px; height: 20px" />
|
||||||
><svg-icon icon-class="pause" style="width: 20px; height: 20px" />
|
|
||||||
算子程序基本信息
|
算子程序基本信息
|
||||||
</template>
|
</template>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :lg="12" :xs="24">
|
<el-col :lg="12" :xs="24">
|
||||||
<el-form ref="formRef" :model="formData" :rules="rules" label-width="80px">
|
<el-form ref="formRef" :model="formData" :rules="rules" label-width="80px">
|
||||||
<el-form-item label="算子类型" prop="oper_main_type">
|
<el-form-item label="算子类型" prop="oper_main_type">
|
||||||
<el-select
|
<el-select v-model="formData.oper_main_type" placeholder="请选择算子主类型" style="width: 100%"
|
||||||
v-model="formData.oper_main_type"
|
@change="handleChange">
|
||||||
placeholder="请选择算子主类型"
|
<el-option v-for="item in listOpt.operTypeList" :key="item.oper_main_type"
|
||||||
style="width: 100%"
|
:label="item.oper_main_type_name" :value="item.oper_main_type" />
|
||||||
@change="handleChange"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in listOpt.operTypeList"
|
|
||||||
:key="item.oper_main_type"
|
|
||||||
:label="item.oper_main_type_name"
|
|
||||||
:value="item.oper_main_type"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="算子名称" prop="operator_id">
|
<el-form-item label="算子名称" prop="operator_id">
|
||||||
<el-select
|
<el-select v-model="formData.operator_id" placeholder="请选择算子名称" style="width: 100%"
|
||||||
v-model="formData.operator_id"
|
@change="handleChangeOperator">
|
||||||
placeholder="请选择算子名称"
|
<el-option v-for="item in listOpt.operatorList" :key="item.operator_id" :label="item.operator_name"
|
||||||
style="width: 100%"
|
:value="item.operator_id">
|
||||||
@change="handleChangeOperator"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in listOpt.operatorList"
|
|
||||||
:key="item.operator_id"
|
|
||||||
:label="item.operator_name"
|
|
||||||
:value="item.operator_id"
|
|
||||||
>
|
|
||||||
<span style="float: left">{{ item.operator_name }}</span>
|
<span style="float: left">{{ item.operator_name }}</span>
|
||||||
<span
|
<span style="
|
||||||
style="
|
|
||||||
float: right;
|
float: right;
|
||||||
color: var(--el-text-color-secondary);
|
color: var(--el-text-color-secondary);
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
"
|
">
|
||||||
>
|
|
||||||
{{ item.oper_sub_type_name }}
|
{{ item.oper_sub_type_name }}
|
||||||
</span>
|
</span>
|
||||||
</el-option>
|
</el-option>
|
||||||
|
@ -83,42 +64,21 @@
|
||||||
</el-select> -->
|
</el-select> -->
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="适配硬件" prop="cmpt_hardware_type">
|
<el-form-item label="适配硬件" prop="cmpt_hardware_type">
|
||||||
<el-select
|
<el-select v-model="formData.cmpt_hardware_type" placeholder="请选择适配硬件类型" style="width: 100%"
|
||||||
v-model="formData.cmpt_hardware_type"
|
@change="handleChangeCmpt">
|
||||||
placeholder="请选择适配硬件类型"
|
<el-option v-for="item in listOpt.cmptHardwareTypeList" :key="item" :label="item" :value="item" />
|
||||||
style="width: 100%"
|
|
||||||
@change="handleChangeCmpt"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in listOpt.cmptHardwareTypeList"
|
|
||||||
:key="item"
|
|
||||||
:label="item"
|
|
||||||
:value="item"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="程序版本" prop="program_version">
|
<el-form-item label="程序版本" prop="program_version">
|
||||||
<el-input
|
<el-input v-model="formData.program_version" type="number" placeholder="请输入程序版本" />
|
||||||
v-model="formData.program_version"
|
|
||||||
type="number"
|
|
||||||
placeholder="请输入程序版本"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="程序文件" prop="program_file_name">
|
<el-form-item label="程序文件" prop="program_file_name">
|
||||||
<el-upload
|
<el-upload v-model:file-list="fileList"
|
||||||
v-model:file-list="fileList"
|
action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" ref="uploadRef"
|
||||||
action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
|
class="upload-demo" :on-exceed="handleFileExceed" :auto-upload="false" :limit="1"
|
||||||
ref="uploadRef"
|
accept="application/x-tar">
|
||||||
class="upload-demo"
|
<el-button type="primary"><el-icon class="el-icon--upload"> <i-ep-upload-filled />
|
||||||
:on-exceed="handleFileExceed"
|
</el-icon>选择文件</el-button>
|
||||||
:auto-upload="false"
|
|
||||||
:limit="1"
|
|
||||||
accept="application/x-tar"
|
|
||||||
>
|
|
||||||
<el-button type="primary"
|
|
||||||
><el-icon class="el-icon--upload"> <i-ep-upload-filled /> </el-icon
|
|
||||||
>选择文件</el-button
|
|
||||||
>
|
|
||||||
<template #tip>
|
<template #tip>
|
||||||
<div class="el-upload__tip">
|
<div class="el-upload__tip">
|
||||||
请上传大小不超过 <strong style="color: red">10M</strong>,格式为
|
请上传大小不超过 <strong style="color: red">10M</strong>,格式为
|
||||||
|
@ -132,9 +92,7 @@
|
||||||
<el-col :lg="12" :xs="24">
|
<el-col :lg="12" :xs="24">
|
||||||
<div style="padding-left: 35px" v-if="fileStatus">
|
<div style="padding-left: 35px" v-if="fileStatus">
|
||||||
<el-form label-width="100px" size="small">
|
<el-form label-width="100px" size="small">
|
||||||
<el-divider content-position="left"
|
<el-divider content-position="left"><strong style="color: #409eff">算子文件预览</strong></el-divider>
|
||||||
><strong style="color: #409eff">算子文件预览</strong></el-divider
|
|
||||||
>
|
|
||||||
<el-input v-model="codeJson" :disabled="true" type="textarea" :rows="20" />
|
<el-input v-model="codeJson" :disabled="true" type="textarea" :rows="20" />
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
|
@ -148,7 +106,7 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup>
|
||||||
import ConstApi from "@/api/const";
|
import ConstApi from "@/api/const";
|
||||||
import { useUserStore } from "@/store";
|
import { useUserStore } from "@/store";
|
||||||
import OperatorApi from "@/api/operator";
|
import OperatorApi from "@/api/operator";
|
||||||
|
@ -161,7 +119,7 @@ const fileStatus = ref(false); // 文件状态
|
||||||
const codeJson = ref(""); // 文件信息
|
const codeJson = ref(""); // 文件信息
|
||||||
|
|
||||||
// 上传组件
|
// 上传组件
|
||||||
const uploadRef = ref<UploadInstance>();
|
const uploadRef = ref();
|
||||||
// 表单数据
|
// 表单数据
|
||||||
const formData = reactive({
|
const formData = reactive({
|
||||||
status: 1,
|
status: 1,
|
||||||
|
@ -186,7 +144,7 @@ const rules = reactive({
|
||||||
|
|
||||||
/** 表单提交 */
|
/** 表单提交 */
|
||||||
const handleSubmit = useThrottleFn(() => {
|
const handleSubmit = useThrottleFn(() => {
|
||||||
formRef.value.validate((valid: any) => {
|
formRef.value.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
formData.user_id = userStore.user?.id;
|
formData.user_id = userStore.user?.id;
|
||||||
|
@ -217,7 +175,7 @@ function closeBack() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 搜索算子 */
|
/** 搜索算子 */
|
||||||
const remoteMethod = (query: string) => {
|
const remoteMethod = (query) => {
|
||||||
if (query) {
|
if (query) {
|
||||||
selLoading.value = true;
|
selLoading.value = true;
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
@ -259,9 +217,9 @@ function handleChangeOperator() {
|
||||||
OperatorApi.findOne(formData.operator_id).then((res) => {
|
OperatorApi.findOne(formData.operator_id).then((res) => {
|
||||||
//JSON转换
|
//JSON转换
|
||||||
codeJson.value = JSON.stringify(res.data.data.parameters);
|
codeJson.value = JSON.stringify(res.data.data.parameters);
|
||||||
if(codeJson.value=='{}'){
|
if (codeJson.value == '{}') {
|
||||||
fileStatus.value = false;
|
fileStatus.value = false;
|
||||||
}else{
|
} else {
|
||||||
fileStatus.value = true;
|
fileStatus.value = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -294,21 +252,27 @@ onMounted(() => {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.sp-file {
|
.sp-file {
|
||||||
color: #29d;
|
color: #29d;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tb-base-info {
|
.tb-base-info {
|
||||||
line-height: 30px;
|
line-height: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.svg-icon) {
|
:deep(.svg-icon) {
|
||||||
margin-right: 8px;
|
margin-right: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-footer {
|
.card-footer {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
width: calc(100% - 215px);
|
width: calc(100% - 215px);
|
||||||
bottom: 0px;
|
bottom: 0px;
|
||||||
|
|
||||||
:deep(.el-card__body) {
|
:deep(.el-card__body) {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
|
|
||||||
.el-pagination {
|
.el-pagination {
|
||||||
justify-content: end;
|
justify-content: end;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,8 +3,7 @@
|
||||||
<div class="app-container model-detail">
|
<div class="app-container model-detail">
|
||||||
<!-- 算子程序详情 -->
|
<!-- 算子程序详情 -->
|
||||||
<el-card>
|
<el-card>
|
||||||
<template #header
|
<template #header><svg-icon icon-class="pause" style="width: 20px; height: 20px" />
|
||||||
><svg-icon icon-class="pause" style="width: 20px; height: 20px" />
|
|
||||||
算子参数基本信息
|
算子参数基本信息
|
||||||
</template>
|
</template>
|
||||||
<el-row>
|
<el-row>
|
||||||
|
@ -12,25 +11,14 @@
|
||||||
<el-form v-loading="loading" label-width="100px" size="small">
|
<el-form v-loading="loading" label-width="100px" size="small">
|
||||||
<el-form-item label="参数名称" prop="username"> 目标分类模型 </el-form-item>
|
<el-form-item label="参数名称" prop="username"> 目标分类模型 </el-form-item>
|
||||||
<el-form-item label="算子类型" prop="nickname33">
|
<el-form-item label="算子类型" prop="nickname33">
|
||||||
前处理/缩放算子</el-form-item
|
前处理/缩放算子</el-form-item>
|
||||||
>
|
|
||||||
<el-form-item label="参数说明" prop="nickname33">
|
<el-form-item label="参数说明" prop="nickname33">
|
||||||
<el-input
|
<el-input v-model="formData.usernamedd1" :disabled="true" placeholder="请输入数据集名称" :rows="3"
|
||||||
v-model="formData.usernamedd1"
|
type="textarea" />
|
||||||
:disabled="true"
|
|
||||||
placeholder="请输入数据集名称"
|
|
||||||
:rows="3"
|
|
||||||
type="textarea"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="算子参数" prop="nickname33">
|
<el-form-item label="算子参数" prop="nickname33">
|
||||||
<el-input
|
<el-input v-model="formData.usernamedd2" :disabled="true" placeholder="请输入数据集名称" :rows="12"
|
||||||
v-model="formData.usernamedd2"
|
type="textarea" />
|
||||||
:disabled="true"
|
|
||||||
placeholder="请输入数据集名称"
|
|
||||||
:rows="12"
|
|
||||||
type="textarea"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
@ -43,7 +31,7 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup>
|
||||||
import OperatorApi from "@/api/operator";
|
import OperatorApi from "@/api/operator";
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
|
@ -53,7 +41,7 @@ const loading = ref(false); // 加载状态
|
||||||
const dataInfo = ref({});
|
const dataInfo = ref({});
|
||||||
|
|
||||||
// 用户表单数据
|
// 用户表单数据
|
||||||
const formData = reactive<UserForm>({
|
const formData = reactive({
|
||||||
status: 1,
|
status: 1,
|
||||||
usernamedd1: "参数说明说明参数",
|
usernamedd1: "参数说明说明参数",
|
||||||
usernamedd2: `{
|
usernamedd2: `{
|
||||||
|
@ -117,21 +105,27 @@ onMounted(() => {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.sp-file {
|
.sp-file {
|
||||||
color: #29d;
|
color: #29d;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tb-base-info {
|
.tb-base-info {
|
||||||
line-height: 30px;
|
line-height: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.svg-icon) {
|
:deep(.svg-icon) {
|
||||||
margin-right: 8px;
|
margin-right: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-footer {
|
.card-footer {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
width: calc(100% - 215px);
|
width: calc(100% - 215px);
|
||||||
bottom: 0px;
|
bottom: 0px;
|
||||||
|
|
||||||
:deep(.el-card__body) {
|
:deep(.el-card__body) {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
|
|
||||||
.el-pagination {
|
.el-pagination {
|
||||||
justify-content: end;
|
justify-content: end;
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,7 +103,7 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup >
|
||||||
import ConstApi from "@/api/const";
|
import ConstApi from "@/api/const";
|
||||||
import DataSetApi from "@/api/dataSet";
|
import DataSetApi from "@/api/dataSet";
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@ const fileStatus = ref(false); // 文件状态
|
||||||
const codeHtml = ref(""); // 文件信息
|
const codeHtml = ref(""); // 文件信息
|
||||||
|
|
||||||
// 上传组件
|
// 上传组件
|
||||||
const uploadRef = ref<UploadInstance>();
|
const uploadRef = ref();
|
||||||
|
|
||||||
// 基础数据列表
|
// 基础数据列表
|
||||||
let listOpt = reactive({
|
let listOpt = reactive({
|
||||||
|
@ -145,7 +145,7 @@ const rules = reactive({
|
||||||
|
|
||||||
/** 表单提交 */
|
/** 表单提交 */
|
||||||
const handleSubmit = useThrottleFn(() => {
|
const handleSubmit = useThrottleFn(() => {
|
||||||
formRef.value.validate((valid: any) => {
|
formRef.value.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
if (!form.value.image_width) {
|
if (!form.value.image_width) {
|
||||||
ElMessage.error("请输入图片分辨率宽度!");
|
ElMessage.error("请输入图片分辨率宽度!");
|
||||||
|
|
|
@ -138,10 +138,9 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup>
|
||||||
import ConstApi from "@/api/const";
|
import ConstApi from "@/api/const";
|
||||||
import DataSetApi from "@/api/dataSet";
|
import DataSetApi from "@/api/dataSet";
|
||||||
import { json } from 'stream/consumers';
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
|
@ -159,7 +158,7 @@ const imgCount = ref(0); // 图片信息
|
||||||
const imageList = ref([]); // 图片列表
|
const imageList = ref([]); // 图片列表
|
||||||
const remImageList = ref([]); // 删除图片列表
|
const remImageList = ref([]); // 删除图片列表
|
||||||
// 上传组件
|
// 上传组件
|
||||||
const uploadRef = ref<UploadInstance>();
|
const uploadRef = ref();
|
||||||
|
|
||||||
const autoTime = ref(""); // 自动上传
|
const autoTime = ref(""); // 自动上传
|
||||||
const autoUpload = ref(false); // 自动上传
|
const autoUpload = ref(false); // 自动上传
|
||||||
|
@ -195,7 +194,7 @@ const rules = reactive({
|
||||||
|
|
||||||
/** 表单提交 */
|
/** 表单提交 */
|
||||||
const handleSubmit = useThrottleFn(() => {
|
const handleSubmit = useThrottleFn(() => {
|
||||||
formRef.value.validate((valid: any) => {
|
formRef.value.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
if (!form.value.image_width) {
|
if (!form.value.image_width) {
|
||||||
ElMessage.error("请输入图片分辨率宽度!");
|
ElMessage.error("请输入图片分辨率宽度!");
|
||||||
|
|
|
@ -72,7 +72,7 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup>
|
||||||
import DeviceApi from "@/api/device";
|
import DeviceApi from "@/api/device";
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
@ -95,7 +95,7 @@ const queryParams = reactive({
|
||||||
});
|
});
|
||||||
|
|
||||||
/** 选中未注册设备 */
|
/** 选中未注册设备 */
|
||||||
function getCurrentRow(row: { [key: string]: any }) {
|
function getCurrentRow(row) {
|
||||||
form.uuid = row.uuid;
|
form.uuid = row.uuid;
|
||||||
form.infomation = row.manufacturer;
|
form.infomation = row.manufacturer;
|
||||||
form.manufacturer = row.manufacturer;
|
form.manufacturer = row.manufacturer;
|
||||||
|
@ -108,7 +108,7 @@ function getCurrentRow(row: { [key: string]: any }) {
|
||||||
|
|
||||||
/** 表单提交 */
|
/** 表单提交 */
|
||||||
const handleSubmit = useThrottleFn(() => {
|
const handleSubmit = useThrottleFn(() => {
|
||||||
formRef.value.validate((valid: any) => {
|
formRef.value.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
if (!form.unregisted) {
|
if (!form.unregisted) {
|
||||||
ElMessage.error("请选择要注册的设备");
|
ElMessage.error("请选择要注册的设备");
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup>
|
||||||
import DeviceApi from "@/api/device";
|
import DeviceApi from "@/api/device";
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
@ -71,7 +71,7 @@ const queryParams = reactive({
|
||||||
});
|
});
|
||||||
|
|
||||||
/** 选中未注册设备 */
|
/** 选中未注册设备 */
|
||||||
function getCurrentRow(row: { [key: string]: any }) {
|
function getCurrentRow(row) {
|
||||||
form.uuid = row.uuid;
|
form.uuid = row.uuid;
|
||||||
form.pcie_index = row.pcie_index;
|
form.pcie_index = row.pcie_index;
|
||||||
form.infomation = row.manufacturer;
|
form.infomation = row.manufacturer;
|
||||||
|
@ -85,7 +85,7 @@ function getCurrentRow(row: { [key: string]: any }) {
|
||||||
|
|
||||||
/** 表单提交 */
|
/** 表单提交 */
|
||||||
const handleSubmit = useThrottleFn(() => {
|
const handleSubmit = useThrottleFn(() => {
|
||||||
formRef.value.validate((valid: any) => {
|
formRef.value.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
if (!form.unregisted) {
|
if (!form.unregisted) {
|
||||||
ElMessage.error("请选择要注册的设备");
|
ElMessage.error("请选择要注册的设备");
|
||||||
|
|
|
@ -56,7 +56,7 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup>
|
||||||
import DeviceApi from "@/api/device";
|
import DeviceApi from "@/api/device";
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
|
@ -76,7 +76,7 @@ const rules = reactive({
|
||||||
|
|
||||||
/** 表单提交 */
|
/** 表单提交 */
|
||||||
const handleSubmit = useThrottleFn(() => {
|
const handleSubmit = useThrottleFn(() => {
|
||||||
formRef.value.validate((valid: any) => {
|
formRef.value.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
DeviceApi.updateDevices(form.value.device_id,form.value)
|
DeviceApi.updateDevices(form.value.device_id,form.value)
|
||||||
|
|
|
@ -76,7 +76,7 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup >
|
||||||
import DeviceApi from "@/api/device";
|
import DeviceApi from "@/api/device";
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
@ -114,12 +114,12 @@ function resetQuery() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 行选中 */
|
/** 行选中 */
|
||||||
function handleSelectionChange(selection: any) {
|
function handleSelectionChange(selection) {
|
||||||
removeIds.value = selection.map((item: any) => item.id);
|
removeIds.value = selection.map((item) => item.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 删除数据 */
|
/** 删除数据 */
|
||||||
function handleDelete(row: { [key: string]: any }) {
|
function handleDelete(row) {
|
||||||
ElMessageBox.confirm("确认删除设备信息?", "警告", {
|
ElMessageBox.confirm("确认删除设备信息?", "警告", {
|
||||||
confirmButtonText: "确定",
|
confirmButtonText: "确定",
|
||||||
cancelButtonText: "取消",
|
cancelButtonText: "取消",
|
||||||
|
@ -145,17 +145,17 @@ function handleAddNet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 修改设备信息 */
|
/** 修改设备信息 */
|
||||||
function handleUpdate(row: { [key: string]: any }) {
|
function handleUpdate(row) {
|
||||||
router.push({ path: "/tester/equipmentEdit", query: { id: row.device_id } });
|
router.push({ path: "/tester/equipmentEdit", query: { id: row.device_id } });
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 设备信息详情 */
|
/** 设备信息详情 */
|
||||||
function handleDetail(row: { [key: string]: any }) {
|
function handleDetail(row) {
|
||||||
router.push({ path: "/tester/equipmentDetail", query: { id: row.device_id } });
|
router.push({ path: "/tester/equipmentDetail", query: { id: row.device_id } });
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 设备升级 */
|
/** 设备升级 */
|
||||||
function openUpGrades(row: { [key: string]: any }) {
|
function openUpGrades(row) {
|
||||||
ElMessage.error("【error】待提供!");
|
ElMessage.error("【error】待提供!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -105,19 +105,16 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup>
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: "User",
|
name: "User",
|
||||||
inheritAttrs: false,
|
inheritAttrs: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
import UserAPI from "@/api/user";
|
|
||||||
import { UserForm } from "@/api/user/model";
|
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const loading = ref(false); // 加载状态
|
const loading = ref(false); // 加载状态
|
||||||
|
|
||||||
const calTypeList = ref<OptionType[]>(); // 角色下拉数据源
|
const calTypeList = ref(); // 角色下拉数据源
|
||||||
|
|
||||||
// 用户表单数据
|
// 用户表单数据
|
||||||
const formData = reactive<UserForm>({
|
const formData = reactive<UserForm>({
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup>
|
||||||
import DeviceApi from "@/api/device";
|
import DeviceApi from "@/api/device";
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
|
|
|
@ -91,7 +91,7 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup>
|
||||||
import ToolChainshApi from "@/api/tool";
|
import ToolChainshApi from "@/api/tool";
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const formRef = ref(ElForm); // 表单
|
const formRef = ref(ElForm); // 表单
|
||||||
|
@ -102,7 +102,7 @@ const formData = reactive({
|
||||||
unregisted: null,
|
unregisted: null,
|
||||||
});
|
});
|
||||||
// 上传组件
|
// 上传组件
|
||||||
const uploadRef = ref<UploadInstance>();
|
const uploadRef = ref();
|
||||||
|
|
||||||
// 基础数据列表
|
// 基础数据列表
|
||||||
let listOpt = reactive({
|
let listOpt = reactive({
|
||||||
|
@ -135,7 +135,7 @@ const rules = reactive({
|
||||||
|
|
||||||
/** 表单提交 */
|
/** 表单提交 */
|
||||||
const handleSubmit = useThrottleFn(() => {
|
const handleSubmit = useThrottleFn(() => {
|
||||||
formRef.value.validate((valid: any) => {
|
formRef.value.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
if (!formData.unregisted) {
|
if (!formData.unregisted) {
|
||||||
ElMessage.error("请选择要注册的工具链");
|
ElMessage.error("请选择要注册的工具链");
|
||||||
|
@ -157,7 +157,7 @@ const handleSubmit = useThrottleFn(() => {
|
||||||
}, 3000);
|
}, 3000);
|
||||||
|
|
||||||
/** 选中未注册工具链 */
|
/** 选中未注册工具链 */
|
||||||
function getCurrentRow(row: { [key: string]: any }) {
|
function getCurrentRow(row) {
|
||||||
formData.uuid = row.uuid;
|
formData.uuid = row.uuid;
|
||||||
formData.tool_type = row.tool_type;
|
formData.tool_type = row.tool_type;
|
||||||
formData.cmpt_hardware_type = row.cmpt_hardware_type;
|
formData.cmpt_hardware_type = row.cmpt_hardware_type;
|
||||||
|
|
|
@ -3,12 +3,7 @@
|
||||||
<div class="app-container model-detail">
|
<div class="app-container model-detail">
|
||||||
<!-- 用户新增/编辑表单 -->
|
<!-- 用户新增/编辑表单 -->
|
||||||
<el-card v-loading="loading">
|
<el-card v-loading="loading">
|
||||||
<template #header
|
<template #header><svg-icon icon-class="pause" style="width: 20px; height: 20px" />工具链基本信息</template>
|
||||||
><svg-icon
|
|
||||||
icon-class="pause"
|
|
||||||
style="width: 20px; height: 20px"
|
|
||||||
/>工具链基本信息</template
|
|
||||||
>
|
|
||||||
<el-form ref="baseFormRef" :model="baseForm" :rules="baseRules" label-width="100px">
|
<el-form ref="baseFormRef" :model="baseForm" :rules="baseRules" label-width="100px">
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :lg="12" :xs="12">
|
<el-col :lg="12" :xs="12">
|
||||||
|
@ -18,29 +13,15 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :lg="12" :xs="12">
|
<el-col :lg="12" :xs="12">
|
||||||
<el-form-item label="厂商名称" prop="manufacturer">
|
<el-form-item label="厂商名称" prop="manufacturer">
|
||||||
<el-input
|
<el-input v-model="baseForm.manufacturer" disabled placeholder="请输入厂商名称" />
|
||||||
v-model="baseForm.manufacturer"
|
|
||||||
disabled
|
|
||||||
placeholder="请输入厂商名称"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :lg="12" :xs="12">
|
<el-col :lg="12" :xs="12">
|
||||||
<el-form-item label="工具链类型" prop="tool_type">
|
<el-form-item label="工具链类型" prop="tool_type">
|
||||||
<el-select
|
<el-select v-model="baseForm.tool_type" disabled placeholder="请选择工具链类型" style="width: 100%">
|
||||||
v-model="baseForm.tool_type"
|
<el-option v-for="item in listOpt.typeList" :key="item.type" :label="item.name" :value="item.type" />
|
||||||
disabled
|
|
||||||
placeholder="请选择工具链类型"
|
|
||||||
style="width: 100%"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in listOpt.typeList"
|
|
||||||
:key="item.type"
|
|
||||||
:label="item.name"
|
|
||||||
:value="item.type"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
@ -53,32 +34,19 @@
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :lg="12" :xs="12">
|
<el-col :lg="12" :xs="12">
|
||||||
<el-form-item label="工具链版本" prop="tool_version">
|
<el-form-item label="工具链版本" prop="tool_version">
|
||||||
<el-input
|
<el-input v-model="baseForm.tool_version" disabled placeholder="请输入工具链版本" />
|
||||||
v-model="baseForm.tool_version"
|
|
||||||
disabled
|
|
||||||
placeholder="请输入工具链版本"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :lg="12" :xs="12">
|
<el-col :lg="12" :xs="12">
|
||||||
<el-form-item label="硬件类型" prop="cmpt_hardware_type">
|
<el-form-item label="硬件类型" prop="cmpt_hardware_type">
|
||||||
<el-input
|
<el-input v-model="baseForm.cmpt_hardware_type" disabled placeholder="请输入硬件类型" />
|
||||||
v-model="baseForm.cmpt_hardware_type"
|
|
||||||
disabled
|
|
||||||
placeholder="请输入硬件类型"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :lg="12" :xs="12">
|
<el-col :lg="12" :xs="12">
|
||||||
<el-form-item label="工具链描述" prop="tool_desc">
|
<el-form-item label="工具链描述" prop="tool_desc">
|
||||||
<el-input
|
<el-input v-model="baseForm.tool_desc" :rows="2" type="textarea" placeholder="请输入工具链描述" />
|
||||||
v-model="baseForm.tool_desc"
|
|
||||||
:rows="2"
|
|
||||||
type="textarea"
|
|
||||||
placeholder="请输入工具链描述"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :lg="12" :xs="12"></el-col>
|
<el-col :lg="12" :xs="12"></el-col>
|
||||||
|
@ -87,18 +55,11 @@
|
||||||
</el-card>
|
</el-card>
|
||||||
<el-row style="padding: 10px 15px">
|
<el-row style="padding: 10px 15px">
|
||||||
<el-col :lg="24" :xs="24">
|
<el-col :lg="24" :xs="24">
|
||||||
<el-button type="primary" @click="handlePushParams"
|
<el-button type="primary" @click="handlePushParams"><i-ep-plus />添加运行参数</el-button>
|
||||||
><i-ep-plus />添加运行参数</el-button
|
|
||||||
>
|
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-card v-loading="loading" style="padding-bottom: 50px">
|
<el-card v-loading="loading" style="padding-bottom: 50px">
|
||||||
<template #header
|
<template #header><svg-icon icon-class="pause" style="width: 20px; height: 20px" />工具链运行参数信息</template>
|
||||||
><svg-icon
|
|
||||||
icon-class="pause"
|
|
||||||
style="width: 20px; height: 20px"
|
|
||||||
/>工具链运行参数信息</template
|
|
||||||
>
|
|
||||||
<el-table :data="pageData" style="width: 100%" stripe v-loading="queryLoading">
|
<el-table :data="pageData" style="width: 100%" stripe v-loading="queryLoading">
|
||||||
<el-table-column prop="params_name" label="运行参数名称" align="left" />
|
<el-table-column prop="params_name" label="运行参数名称" align="left" />
|
||||||
<el-table-column prop="params_desc" label="运行参数描述" align="left" />
|
<el-table-column prop="params_desc" label="运行参数描述" align="left" />
|
||||||
|
@ -107,75 +68,37 @@
|
||||||
<el-table-column prop="create_time" label="创建时间" align="left" />
|
<el-table-column prop="create_time" label="创建时间" align="left" />
|
||||||
<el-table-column label="操作" fixed="right" align="center">
|
<el-table-column label="操作" fixed="right" align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button text type="primary" size="small" @click="handleDetail(scope.row)"
|
<el-button text type="primary" size="small" @click="handleDetail(scope.row)"><i-ep-view />查看</el-button>
|
||||||
><i-ep-view />查看</el-button
|
<el-button text type="primary" size="small" @click="handleDelete(scope.row)"><i-ep-delete />删除</el-button>
|
||||||
>
|
|
||||||
<el-button text type="primary" size="small" @click="handleDelete(scope.row)"
|
|
||||||
><i-ep-delete />删除</el-button
|
|
||||||
>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<pagination
|
<pagination v-if="total > 0" v-model:total="total" v-model:page="queryParams.page_num"
|
||||||
v-if="total > 0"
|
v-model:limit="queryParams.page_size" @pagination="handleQuery" />
|
||||||
v-model:total="total"
|
|
||||||
v-model:page="queryParams.page_num"
|
|
||||||
v-model:limit="queryParams.page_size"
|
|
||||||
@pagination="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-card>
|
</el-card>
|
||||||
<el-card class="card-footer">
|
<el-card class="card-footer">
|
||||||
<el-button type="primary" @click="handleSubmit"><i-ep-check />确 定</el-button>
|
<el-button type="primary" @click="handleSubmit"><i-ep-check />确 定</el-button>
|
||||||
<el-button @click="closeBack"><i-ep-close />取 消</el-button>
|
<el-button @click="closeBack"><i-ep-close />取 消</el-button>
|
||||||
</el-card>
|
</el-card>
|
||||||
<el-dialog v-model="dialogFormVisible" title="添加工具链运行参数" width="880">
|
<el-dialog v-model="dialogFormVisible" title="添加工具链运行参数" width="880">
|
||||||
<el-form
|
<el-form ref="formRef" :model="form" v-loading="formLoading" :rules="rules" label-width="108px">
|
||||||
ref="formRef"
|
|
||||||
:model="form"
|
|
||||||
v-loading="formLoading"
|
|
||||||
:rules="rules"
|
|
||||||
label-width="108px"
|
|
||||||
>
|
|
||||||
<el-form-item label="运行参数名称" prop="params_name">
|
<el-form-item label="运行参数名称" prop="params_name">
|
||||||
<el-input v-model="form.params_name" placeholder="请输入运行参数名称" />
|
<el-input v-model="form.params_name" placeholder="请输入运行参数名称" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="运行参数描述" prop="params_desc">
|
<el-form-item label="运行参数描述" prop="params_desc">
|
||||||
<el-input
|
<el-input v-model="form.params_desc" :rows="3" type="textarea" placeholder="请输入运行参数描述" />
|
||||||
v-model="form.params_desc"
|
|
||||||
:rows="3"
|
|
||||||
type="textarea"
|
|
||||||
placeholder="请输入运行参数描述"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="适用模型类型" prop="modl_sub_type">
|
<el-form-item label="适用模型类型" prop="modl_sub_type">
|
||||||
<el-select
|
<el-select v-model="form.modl_sub_type" placeholder="请选择适用模型类型" style="width: 100%">
|
||||||
v-model="form.modl_sub_type"
|
<el-option v-for="item in listOpt.modlSubTypeList" :key="item.modl_sub_type"
|
||||||
placeholder="请选择适用模型类型"
|
:label="item.modl_sub_type_name" :value="item.modl_sub_type" />
|
||||||
style="width: 100%"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in listOpt.modlSubTypeList"
|
|
||||||
:key="item.modl_sub_type"
|
|
||||||
:label="item.modl_sub_type_name"
|
|
||||||
:value="item.modl_sub_type"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="运行参数文件" prop="params_content">
|
<el-form-item label="运行参数文件" prop="params_content">
|
||||||
<el-upload
|
<el-upload ref="uploadRef" class="upload-demo" :on-change="handleFileChange" :on-remove="handleFileRemove"
|
||||||
ref="uploadRef"
|
:on-exceed="handleFileExceed" :auto-upload="false" :limit="1" accept="application/json">
|
||||||
class="upload-demo"
|
<el-button type="primary"><el-icon class="el-icon--upload"> <i-ep-upload-filled />
|
||||||
:on-change="handleFileChange"
|
</el-icon>选择文件</el-button>
|
||||||
:on-remove="handleFileRemove"
|
|
||||||
:on-exceed="handleFileExceed"
|
|
||||||
:auto-upload="false"
|
|
||||||
:limit="1"
|
|
||||||
accept="application/json"
|
|
||||||
>
|
|
||||||
<el-button type="primary"
|
|
||||||
><el-icon class="el-icon--upload"> <i-ep-upload-filled /> </el-icon
|
|
||||||
>选择文件</el-button
|
|
||||||
>
|
|
||||||
<template #tip>
|
<template #tip>
|
||||||
<div class="el-upload__tip">
|
<div class="el-upload__tip">
|
||||||
请上传大小不超过 <strong style="color: red">10M</strong>,格式为
|
请上传大小不超过 <strong style="color: red">10M</strong>,格式为
|
||||||
|
@ -203,20 +126,10 @@
|
||||||
{{ dataInfo.modl_sub_type_name }}
|
{{ dataInfo.modl_sub_type_name }}
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="运行参数名称">
|
<el-form-item label="运行参数名称">
|
||||||
<el-input
|
<el-input v-model="dataInfo.params_name" disabled placeholder="请输入运行参数名称" />
|
||||||
v-model="dataInfo.params_name"
|
|
||||||
disabled
|
|
||||||
placeholder="请输入运行参数名称"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="运行参数描述">
|
<el-form-item label="运行参数描述">
|
||||||
<el-input
|
<el-input v-model="dataInfo.params_desc" :rows="3" type="textarea" disabled placeholder="请输入运行参数描述" />
|
||||||
v-model="dataInfo.params_desc"
|
|
||||||
:rows="3"
|
|
||||||
type="textarea"
|
|
||||||
disabled
|
|
||||||
placeholder="请输入运行参数描述"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="运行参数文件" prop="params_content">
|
<el-form-item label="运行参数文件" prop="params_content">
|
||||||
<el-input v-model="paramsContent" :rows="10" type="textarea" disabled />
|
<el-input v-model="paramsContent" :rows="10" type="textarea" disabled />
|
||||||
|
@ -231,7 +144,7 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup >
|
||||||
import ConstApi from "@/api/const";
|
import ConstApi from "@/api/const";
|
||||||
import ToolChainshApi from "@/api/tool";
|
import ToolChainshApi from "@/api/tool";
|
||||||
|
|
||||||
|
@ -309,7 +222,7 @@ const dialogInfoVisible = ref(false); // 弹窗加载状态
|
||||||
|
|
||||||
/** 表单提交 */
|
/** 表单提交 */
|
||||||
const handleSubmit = useThrottleFn(() => {
|
const handleSubmit = useThrottleFn(() => {
|
||||||
baseFormRef.value.validate((valid: any) => {
|
baseFormRef.value.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
ToolChainshApi.editTool(baseForm.value.tool_id, baseForm.value)
|
ToolChainshApi.editTool(baseForm.value.tool_id, baseForm.value)
|
||||||
|
@ -328,7 +241,7 @@ const handleSubmit = useThrottleFn(() => {
|
||||||
|
|
||||||
/** 表单提交 */
|
/** 表单提交 */
|
||||||
const handleSubmitFile = useThrottleFn(() => {
|
const handleSubmitFile = useThrottleFn(() => {
|
||||||
formRef.value.validate((valid: any) => {
|
formRef.value.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
formLoading.value = true;
|
formLoading.value = true;
|
||||||
ToolChainshApi.addToolParams(form)
|
ToolChainshApi.addToolParams(form)
|
||||||
|
@ -434,7 +347,7 @@ function closeBack() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 查看运行参数详情 */
|
/** 查看运行参数详情 */
|
||||||
function handleDetail(row: { [key: string]: any }) {
|
function handleDetail(row) {
|
||||||
infoLoading.value = true;
|
infoLoading.value = true;
|
||||||
ToolChainshApi.paramsInfo(row.params_id)
|
ToolChainshApi.paramsInfo(row.params_id)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
|
@ -454,7 +367,7 @@ function handleDetail(row: { [key: string]: any }) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 删除运行参数数据 */
|
/** 删除运行参数数据 */
|
||||||
function handleDelete(row: { [key: string]: any }) {
|
function handleDelete(row) {
|
||||||
ElMessageBox.confirm("确认删除运行参数信息?", "警告", {
|
ElMessageBox.confirm("确认删除运行参数信息?", "警告", {
|
||||||
confirmButtonText: "确定",
|
confirmButtonText: "确定",
|
||||||
cancelButtonText: "取消",
|
cancelButtonText: "取消",
|
||||||
|
@ -516,21 +429,27 @@ onMounted(() => {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.sp-file {
|
.sp-file {
|
||||||
color: #29d;
|
color: #29d;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tb-base-info {
|
.tb-base-info {
|
||||||
line-height: 30px;
|
line-height: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.svg-icon) {
|
:deep(.svg-icon) {
|
||||||
margin-right: 8px;
|
margin-right: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-footer {
|
.card-footer {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
width: calc(100% - 215px);
|
width: calc(100% - 215px);
|
||||||
bottom: 0px;
|
bottom: 0px;
|
||||||
|
|
||||||
:deep(.el-card__body) {
|
:deep(.el-card__body) {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
|
|
||||||
.el-pagination {
|
.el-pagination {
|
||||||
justify-content: end;
|
justify-content: end;
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,21 +44,19 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup>
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: "calculateIndex",
|
name: "calculateIndex",
|
||||||
inheritAttrs: false,
|
inheritAttrs: false,
|
||||||
});
|
});
|
||||||
import ModelApi from '@/api/models'
|
import ModelApi from '@/api/models'
|
||||||
|
|
||||||
import { UserQuery } from "@/api/user/model";
|
|
||||||
|
|
||||||
const queryFormRef = ref(ElForm); // 查询表单
|
const queryFormRef = ref(ElForm); // 查询表单
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
const loading = ref(false); // 加载状态
|
const loading = ref(false); // 加载状态
|
||||||
const removeIds = ref([]); // 删除用户ID集合 用于批量删除
|
const removeIds = ref([]); // 删除用户ID集合 用于批量删除
|
||||||
let queryParams = reactive<any>({
|
let queryParams = reactive({
|
||||||
page_num: 1,
|
page_num: 1,
|
||||||
page_size: 10,
|
page_size: 10,
|
||||||
model_name: ''
|
model_name: ''
|
||||||
|
@ -102,12 +100,12 @@ function resetQuery() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 行选中 */
|
/** 行选中 */
|
||||||
function handleSelectionChange(selection: any) {
|
function handleSelectionChange(selection) {
|
||||||
removeIds.value = selection.map((item: any) => item.model_id);
|
removeIds.value = selection.map((item) => item.model_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 删除数据 */
|
/** 删除数据 */
|
||||||
function handleDelete(row: { [key: string]: any }) {
|
function handleDelete(row) {
|
||||||
ElMessageBox.confirm("确认删除模型?", "警告", {
|
ElMessageBox.confirm("确认删除模型?", "警告", {
|
||||||
confirmButtonText: "确定",
|
confirmButtonText: "确定",
|
||||||
cancelButtonText: "取消",
|
cancelButtonText: "取消",
|
||||||
|
@ -123,7 +121,7 @@ function handleDelete(row: { [key: string]: any }) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const doShowModelDetail = (row: any) => {
|
const doShowModelDetail = (row) => {
|
||||||
router.push({ path: "/modelMgr/modelDetail", query: { id: row.model_id, from: 'model' } })
|
router.push({ path: "/modelMgr/modelDetail", query: { id: row.model_id, from: 'model' } })
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -132,7 +130,7 @@ const doShowModelDetail = (row: any) => {
|
||||||
* @param type 弹窗类型 用户表单:user-form | 用户导入:user-import
|
* @param type 弹窗类型 用户表单:user-form | 用户导入:user-import
|
||||||
* @param id 用户ID
|
* @param id 用户ID
|
||||||
*/
|
*/
|
||||||
async function openDialog(type: string, id?: number) {
|
async function openDialog(type, id) {
|
||||||
router.push({ path: "/operatorLibrary/calculateEdit" });
|
router.push({ path: "/operatorLibrary/calculateEdit" });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ const options = {
|
||||||
},
|
},
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: "axis",
|
trigger: "axis",
|
||||||
valueFormatter:v=>v+"%",
|
valueFormatter:(v:any)=>v+"%",
|
||||||
axisPointer: {
|
axisPointer: {
|
||||||
type: "cross",
|
type: "cross",
|
||||||
crossStyle: {
|
crossStyle: {
|
||||||
|
|
|
@ -134,7 +134,10 @@ const info = reactive({
|
||||||
const doExport=async () => {
|
const doExport=async () => {
|
||||||
try{
|
try{
|
||||||
let dom=document.querySelector("#print_simulation_report_desc");
|
let dom=document.querySelector("#print_simulation_report_desc");
|
||||||
const canvas = await html2canvas(dom);
|
const canvas = await html2canvas(dom,{
|
||||||
|
allowTaint: true,
|
||||||
|
useCORS: true,
|
||||||
|
});
|
||||||
const img = canvas.toDataURL('image/png');
|
const img = canvas.toDataURL('image/png');
|
||||||
const link = document.createElement('a');
|
const link = document.createElement('a');
|
||||||
link.href = img;
|
link.href = img;
|
||||||
|
@ -328,9 +331,13 @@ html.report-print {
|
||||||
height: unset !important;
|
height: unset !important;
|
||||||
|
|
||||||
.simulation-report-desc {
|
.simulation-report-desc {
|
||||||
|
|
||||||
|
.el-scrollbar__view{
|
||||||
|
vertical-align: unset !important;
|
||||||
|
}
|
||||||
.el-table {
|
.el-table {
|
||||||
table {
|
table {
|
||||||
width: 100% !important;
|
width: unset !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,255 +1,215 @@
|
||||||
<!-- 用户管理 -->
|
<!-- 用户管理 -->
|
||||||
<template>
|
<template>
|
||||||
<div class="app-container model-detail">
|
<div class="app-container model-detail">
|
||||||
<el-card v-loading="loading">
|
<el-card v-loading="loading">
|
||||||
<template #header
|
<template #header><svg-icon icon-class="pause" style="width: 20px; height: 20px" />菜单基本信息</template>
|
||||||
><svg-icon
|
<el-row>
|
||||||
icon-class="pause"
|
<el-col :lg="12" :xs="24">
|
||||||
style="width: 20px; height: 20px"
|
<el-form ref="menuFormRef" :model="formData" :rules="rules" label-width="160px">
|
||||||
/>菜单基本信息</template
|
<el-form-item label="父级菜单" prop="parentId">
|
||||||
>
|
<el-tree-select v-model="formData.parentId" placeholder="选择上级菜单" :data="menuOptions" filterable
|
||||||
<el-row>
|
check-strictly :render-after-expand="false" />
|
||||||
<el-col :lg="12" :xs="24">
|
</el-form-item>
|
||||||
<el-form ref="menuFormRef" :model="formData" :rules="rules" label-width="160px">
|
|
||||||
<el-form-item label="父级菜单" prop="parentId">
|
|
||||||
<el-tree-select
|
|
||||||
v-model="formData.parentId"
|
|
||||||
placeholder="选择上级菜单"
|
|
||||||
:data="menuOptions"
|
|
||||||
filterable
|
|
||||||
check-strictly
|
|
||||||
:render-after-expand="false"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<el-form-item label="菜单名称" prop="name">
|
<el-form-item label="菜单名称" prop="name">
|
||||||
<el-input v-model="formData.name" placeholder="请输入菜单名称" />
|
<el-input v-model="formData.name" placeholder="请输入菜单名称" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="菜单类型" prop="type">
|
<el-form-item label="菜单类型" prop="type">
|
||||||
<el-radio-group v-model="formData.type" @change="onMenuTypeChange">
|
<el-radio-group v-model="formData.type" @change="onMenuTypeChange">
|
||||||
<el-radio label="CATALOG">目录</el-radio>
|
<el-radio label="CATALOG">目录</el-radio>
|
||||||
<el-radio label="MENU">菜单</el-radio>
|
<el-radio label="MENU">菜单</el-radio>
|
||||||
<el-radio label="BUTTON">按钮</el-radio>
|
<el-radio label="BUTTON">按钮</el-radio>
|
||||||
<el-radio label="EXTLINK">外链</el-radio>
|
<el-radio label="EXTLINK">外链</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- v-if="
|
<!-- v-if="
|
||||||
formData.type == MenuTypeEnum.CATALOG || formData.type == MenuTypeEnum.MENU
|
formData.type == MenuTypeEnum.CATALOG || formData.type == MenuTypeEnum.MENU
|
||||||
" -->
|
" -->
|
||||||
<el-form-item
|
<el-form-item label="路由路径" prop="path">
|
||||||
label="路由路径"
|
<el-input v-model="formData.path" placeholder="system" />
|
||||||
prop="path"
|
</el-form-item>
|
||||||
>
|
|
||||||
<el-input
|
|
||||||
v-model="formData.path"
|
|
||||||
placeholder="system"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<!-- 组件页面完整路径 -->
|
<!-- 组件页面完整路径 -->
|
||||||
<el-form-item
|
<el-form-item label="页面路径" prop="component">
|
||||||
label="页面路径"
|
<el-input v-model="formData.component" placeholder="system/user/index" style="width: 95%">
|
||||||
prop="component"
|
<template #prepend>src/views/</template>
|
||||||
>
|
<template #append>.vue</template>
|
||||||
<el-input
|
</el-input>
|
||||||
v-model="formData.component"
|
</el-form-item>
|
||||||
placeholder="system/user/index"
|
|
||||||
style="width: 95%"
|
|
||||||
>
|
|
||||||
<template #prepend
|
|
||||||
>src/views/</template
|
|
||||||
>
|
|
||||||
<template #append>.vue</template>
|
|
||||||
</el-input>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<el-form-item
|
<el-form-item prop="visible" label="显示状态">
|
||||||
prop="visible"
|
<el-radio-group v-model="formData.visible">
|
||||||
label="显示状态"
|
<el-radio :label="1">显示</el-radio>
|
||||||
>
|
<el-radio :label="0">隐藏</el-radio>
|
||||||
<el-radio-group v-model="formData.visible">
|
</el-radio-group>
|
||||||
<el-radio :label="1">显示</el-radio>
|
</el-form-item>
|
||||||
<el-radio :label="0">隐藏</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<el-form-item
|
<el-form-item label="是否始终显示">
|
||||||
label="是否始终显示"
|
<template #label>
|
||||||
>
|
<div>
|
||||||
<template #label>
|
是否始终显示
|
||||||
<div>
|
<el-tooltip placement="bottom" effect="light">
|
||||||
是否始终显示
|
<template #content>
|
||||||
<el-tooltip placement="bottom" effect="light">
|
当设置为始终显示时,即使只有一个子菜单也会显示
|
||||||
<template #content>
|
</template>
|
||||||
当设置为始终显示时,即使只有一个子菜单也会显示
|
<i-ep-QuestionFilled class="inline-block" />
|
||||||
</template>
|
</el-tooltip>
|
||||||
<i-ep-QuestionFilled class="inline-block" />
|
</div>
|
||||||
</el-tooltip>
|
</template>
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<el-radio-group v-model="formData.alwaysShow">
|
<el-radio-group v-model="formData.alwaysShow">
|
||||||
<el-radio :label="1">是</el-radio>
|
<el-radio :label="1">是</el-radio>
|
||||||
<el-radio :label="0">否</el-radio>
|
<el-radio :label="0">否</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="是否缓存">
|
<el-form-item label="是否缓存">
|
||||||
<el-radio-group v-model="formData.keepAlive">
|
<el-radio-group v-model="formData.keepAlive">
|
||||||
<el-radio :label="1">是</el-radio>
|
<el-radio :label="1">是</el-radio>
|
||||||
<el-radio :label="0">否</el-radio>
|
<el-radio :label="0">否</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="排序" prop="sort">
|
<el-form-item label="排序" prop="sort">
|
||||||
<el-input-number
|
<el-input-number v-model="formData.sort" style="width: 100px" controls-position="right" :min="0" />
|
||||||
v-model="formData.sort"
|
</el-form-item>
|
||||||
style="width: 100px"
|
|
||||||
controls-position="right"
|
|
||||||
:min="0"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<!-- 权限标识 -->
|
<!-- 权限标识 -->
|
||||||
<el-form-item
|
<el-form-item label="权限标识" prop="perm">
|
||||||
label="权限标识"
|
<el-input v-model="formData.perm" placeholder="sys:user:add" />
|
||||||
prop="perm"
|
</el-form-item>
|
||||||
>
|
|
||||||
<el-input v-model="formData.perm" placeholder="sys:user:add" />
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<el-form-item
|
<el-form-item label="图标" prop="icon">
|
||||||
label="图标"
|
<!-- 图标选择器 -->
|
||||||
prop="icon"
|
<icon-select v-model="formData.icon" />
|
||||||
>
|
</el-form-item>
|
||||||
<!-- 图标选择器 -->
|
|
||||||
<icon-select v-model="formData.icon" />
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<el-form-item label="跳转路由">
|
<el-form-item label="跳转路由">
|
||||||
<el-input v-model="formData.redirect" placeholder="跳转路由" />
|
<el-input v-model="formData.redirect" placeholder="跳转路由" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :lg="12" :xs="24"> </el-col>
|
<el-col :lg="12" :xs="24"> </el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-card>
|
</el-card>
|
||||||
<el-card class="card-footer">
|
<el-card class="card-footer">
|
||||||
<el-button type="primary" @click="handleSubmit"><i-ep-check />确 定</el-button>
|
<el-button type="primary" @click="handleSubmit"><i-ep-check />确 定</el-button>
|
||||||
<el-button @click="closeBack"><i-ep-close />取 消</el-button>
|
<el-button @click="closeBack"><i-ep-close />取 消</el-button>
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup>
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: "User",
|
name: "User",
|
||||||
inheritAttrs: false,
|
inheritAttrs: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
import UserAPI from "@/api/user";
|
const router = useRouter();
|
||||||
import { UserForm } from "@/api/user/model";
|
const loading = ref(false); // 加载状态
|
||||||
|
|
||||||
const router = useRouter();
|
const calTypeList = ref(); // 角色下拉数据源
|
||||||
const loading = ref(false); // 加载状态
|
|
||||||
|
// 用户表单数据
|
||||||
const calTypeList = ref<OptionType[]>(); // 角色下拉数据源
|
const formData = reactive({
|
||||||
|
status: 1,
|
||||||
// 用户表单数据
|
});
|
||||||
const formData = reactive<UserForm>({
|
|
||||||
status: 1,
|
const radioSelected = ref('');
|
||||||
});
|
|
||||||
|
// 校验规则
|
||||||
const radioSelected = ref('');
|
const rules = reactive({
|
||||||
|
username: [{ required: true, message: "不能为空", trigger: "blur" }],
|
||||||
// 校验规则
|
nickname: [{ required: true, message: "不能为空", trigger: "blur" }],
|
||||||
const rules = reactive({
|
deptId: [{ required: true, message: "不能为空", trigger: "blur" }],
|
||||||
username: [{ required: true, message: "不能为空", trigger: "blur" }],
|
roleIds: [{ required: true, message: "不能为空", trigger: "blur" }],
|
||||||
nickname: [{ required: true, message: "不能为空", trigger: "blur" }],
|
email: [
|
||||||
deptId: [{ required: true, message: "不能为空", trigger: "blur" }],
|
|
||||||
roleIds: [{ required: true, message: "不能为空", trigger: "blur" }],
|
|
||||||
email: [
|
|
||||||
{
|
|
||||||
pattern: /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/,
|
|
||||||
message: "请输入正确的邮箱地址",
|
|
||||||
trigger: "blur",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
mobile: [
|
|
||||||
{
|
|
||||||
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
|
|
||||||
message: "请输入正确的手机号码",
|
|
||||||
trigger: "blur",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
});
|
|
||||||
|
|
||||||
const list = [
|
|
||||||
{
|
{
|
||||||
csmc: "10.0.8.12",
|
pattern: /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/,
|
||||||
csms: "DOCKER-TOOL",
|
message: "请输入正确的邮箱地址",
|
||||||
csmc1: "acd0032a-6833-4348-b0fc-04798f94354c",
|
trigger: "blur",
|
||||||
csmc2: "华为",
|
|
||||||
csmc3: "1.2",
|
|
||||||
csmc4: "已连接",
|
|
||||||
},
|
},
|
||||||
|
],
|
||||||
|
mobile: [
|
||||||
{
|
{
|
||||||
csmc: "192.10.71.44",
|
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
|
||||||
csms: "ETL",
|
message: "请输入正确的手机号码",
|
||||||
csmc1: "ac1232a-6233-4348-b0fc-04798f94551",
|
trigger: "blur",
|
||||||
csmc2: "华为",
|
|
||||||
csmc3: "1.2",
|
|
||||||
csmc4: "已连接",
|
|
||||||
},
|
},
|
||||||
];
|
],
|
||||||
|
});
|
||||||
/** 表单提交 */
|
|
||||||
const handleSubmit = useThrottleFn(() => {
|
const list = [
|
||||||
loading.value = true;
|
{
|
||||||
setTimeout(() => {
|
csmc: "10.0.8.12",
|
||||||
ElMessage.success("保存成功");
|
csms: "DOCKER-TOOL",
|
||||||
loading.value = false;
|
csmc1: "acd0032a-6833-4348-b0fc-04798f94354c",
|
||||||
closeBack();
|
csmc2: "华为",
|
||||||
}, 1000);
|
csmc3: "1.2",
|
||||||
}, 3000);
|
csmc4: "已连接",
|
||||||
|
},
|
||||||
/** 返回默认页面 */
|
{
|
||||||
function closeBack() {
|
csmc: "192.10.71.44",
|
||||||
router.push({ path: "/system/menu" });
|
csms: "ETL",
|
||||||
|
csmc1: "ac1232a-6233-4348-b0fc-04798f94551",
|
||||||
|
csmc2: "华为",
|
||||||
|
csmc3: "1.2",
|
||||||
|
csmc4: "已连接",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
/** 表单提交 */
|
||||||
|
const handleSubmit = useThrottleFn(() => {
|
||||||
|
loading.value = true;
|
||||||
|
setTimeout(() => {
|
||||||
|
ElMessage.success("保存成功");
|
||||||
|
loading.value = false;
|
||||||
|
closeBack();
|
||||||
|
}, 1000);
|
||||||
|
}, 3000);
|
||||||
|
|
||||||
|
/** 返回默认页面 */
|
||||||
|
function closeBack() {
|
||||||
|
router.push({ path: "/system/menu" });
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
//handleQuery();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.model-detail {
|
||||||
|
:deep(.el-card__header) {
|
||||||
|
padding: 8px 4px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
onMounted(() => {
|
|
||||||
//handleQuery();
|
.sp-file {
|
||||||
});
|
color: #29d;
|
||||||
</script>
|
}
|
||||||
<style scoped lang="scss">
|
|
||||||
.model-detail {
|
.tb-base-info {
|
||||||
:deep(.el-card__header) {
|
line-height: 30px;
|
||||||
padding: 8px 4px;
|
}
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
:deep(.svg-icon) {
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-footer {
|
||||||
|
position: fixed;
|
||||||
|
width: calc(100% - 215px);
|
||||||
|
bottom: 0px;
|
||||||
|
|
||||||
|
:deep(.el-card__body) {
|
||||||
|
padding: 10px;
|
||||||
|
|
||||||
|
.el-pagination {
|
||||||
|
justify-content: end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.sp-file {
|
}
|
||||||
color: #29d;
|
</style>
|
||||||
}
|
|
||||||
.tb-base-info {
|
|
||||||
line-height: 30px;
|
|
||||||
}
|
|
||||||
:deep(.svg-icon) {
|
|
||||||
margin-right: 8px;
|
|
||||||
}
|
|
||||||
.card-footer {
|
|
||||||
position: fixed;
|
|
||||||
width: calc(100% - 215px);
|
|
||||||
bottom: 0px;
|
|
||||||
:deep(.el-card__body) {
|
|
||||||
padding: 10px;
|
|
||||||
.el-pagination {
|
|
||||||
justify-content: end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
|
@ -4,47 +4,30 @@
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="flex justify-between">
|
<div class="flex justify-between">
|
||||||
<div>
|
<div>
|
||||||
<el-button type="primary" @click="openDialog('user-form')"
|
<el-button type="primary" @click="openDialog('user-form')"><i-ep-plus />新增菜单</el-button>
|
||||||
><i-ep-plus />新增菜单</el-button
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||||
<el-form-item label="菜单名称" prop="keywords">
|
<el-form-item label="菜单名称" prop="keywords">
|
||||||
<el-input
|
<el-input v-model="queryParams.keywords" placeholder="请输入菜单名称" clearable style="width: 200px"
|
||||||
v-model="queryParams.keywords"
|
@keyup.enter="handleQuery" />
|
||||||
placeholder="请输入菜单名称"
|
|
||||||
clearable
|
|
||||||
style="width: 200px"
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" @click="handleQuery"
|
<el-button type="primary" @click="handleQuery"><i-ep-search />搜索</el-button>
|
||||||
><i-ep-search />搜索</el-button
|
|
||||||
>
|
|
||||||
<el-button @click="resetQuery">
|
<el-button @click="resetQuery">
|
||||||
<i-ep-refresh />
|
<i-ep-refresh />
|
||||||
重置</el-button
|
重置</el-button>
|
||||||
>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<el-table
|
<el-table v-loading="loading" :data="tableData" highlight-current-row row-key="id" :expand-row-keys="['1']"
|
||||||
v-loading="loading"
|
@row-click="onRowClick" :tree-props="{
|
||||||
:data="tableData"
|
|
||||||
highlight-current-row
|
|
||||||
row-key="id"
|
|
||||||
:expand-row-keys="['1']"
|
|
||||||
@row-click="onRowClick"
|
|
||||||
:tree-props="{
|
|
||||||
children: 'children',
|
children: 'children',
|
||||||
hasChildren: 'hasChildren',
|
hasChildren: 'hasChildren',
|
||||||
}"
|
}">
|
||||||
>
|
|
||||||
<el-table-column label="菜单名称" min-width="200">
|
<el-table-column label="菜单名称" min-width="200">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<svg-icon :icon-class="scope.row.icon" />
|
<svg-icon :icon-class="scope.row.icon" />
|
||||||
|
@ -54,18 +37,10 @@
|
||||||
|
|
||||||
<el-table-column label="类型" align="center" width="80">
|
<el-table-column label="类型" align="center" width="80">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-tag v-if="scope.row.type === MenuTypeEnum.CATALOG" type="warning"
|
<el-tag v-if="scope.row.type === MenuTypeEnum.CATALOG" type="warning">目录</el-tag>
|
||||||
>目录</el-tag
|
<el-tag v-if="scope.row.type === MenuTypeEnum.MENU" type="success">菜单</el-tag>
|
||||||
>
|
<el-tag v-if="scope.row.type === MenuTypeEnum.BUTTON" type="danger">按钮</el-tag>
|
||||||
<el-tag v-if="scope.row.type === MenuTypeEnum.MENU" type="success"
|
<el-tag v-if="scope.row.type === MenuTypeEnum.EXTLINK" type="info">外链</el-tag>
|
||||||
>菜单</el-tag
|
|
||||||
>
|
|
||||||
<el-tag v-if="scope.row.type === MenuTypeEnum.BUTTON" type="danger"
|
|
||||||
>按钮</el-tag
|
|
||||||
>
|
|
||||||
<el-tag v-if="scope.row.type === MenuTypeEnum.EXTLINK" type="info"
|
|
||||||
>外链</el-tag
|
|
||||||
>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
|
@ -86,30 +61,15 @@
|
||||||
|
|
||||||
<el-table-column fixed="right" align="center" label="操作" width="220">
|
<el-table-column fixed="right" align="center" label="操作" width="220">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button
|
<el-button v-if="scope.row.type == 'CATALOG' || scope.row.type == 'MENU'" type="primary" link size="small"
|
||||||
v-if="scope.row.type == 'CATALOG' || scope.row.type == 'MENU'"
|
@click.stop="openDialog(scope.row.id)">
|
||||||
type="primary"
|
|
||||||
link
|
|
||||||
size="small"
|
|
||||||
@click.stop="openDialog(scope.row.id)"
|
|
||||||
>
|
|
||||||
<i-ep-plus />新增
|
<i-ep-plus />新增
|
||||||
</el-button>
|
</el-button>
|
||||||
|
|
||||||
<el-button
|
<el-button type="primary" link size="small" @click.stop="openDialog(undefined, scope.row.id)">
|
||||||
type="primary"
|
|
||||||
link
|
|
||||||
size="small"
|
|
||||||
@click.stop="openDialog(undefined, scope.row.id)"
|
|
||||||
>
|
|
||||||
<i-ep-edit />编辑
|
<i-ep-edit />编辑
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button type="primary" link size="small" @click.stop="handleDelete(scope.row.id)"><i-ep-delete />
|
||||||
type="primary"
|
|
||||||
link
|
|
||||||
size="small"
|
|
||||||
@click.stop="handleDelete(scope.row.id)"
|
|
||||||
><i-ep-delete />
|
|
||||||
删除
|
删除
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
|
@ -117,25 +77,12 @@
|
||||||
</el-table>
|
</el-table>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-dialog
|
<el-dialog v-model="dialog.visible" :title="dialog.title" destroy-on-close append-to-body width="1000px"
|
||||||
v-model="dialog.visible"
|
@close="closeDialog" top="5vh">
|
||||||
:title="dialog.title"
|
|
||||||
destroy-on-close
|
|
||||||
append-to-body
|
|
||||||
width="1000px"
|
|
||||||
@close="closeDialog"
|
|
||||||
top="5vh"
|
|
||||||
>
|
|
||||||
<el-form ref="menuFormRef" :model="formData" :rules="rules" label-width="160px">
|
<el-form ref="menuFormRef" :model="formData" :rules="rules" label-width="160px">
|
||||||
<el-form-item label="父级菜单" prop="parentId">
|
<el-form-item label="父级菜单" prop="parentId">
|
||||||
<el-tree-select
|
<el-tree-select v-model="formData.parentId" placeholder="选择上级菜单" :data="menuOptions" filterable check-strictly
|
||||||
v-model="formData.parentId"
|
:render-after-expand="false" />
|
||||||
placeholder="选择上级菜单"
|
|
||||||
:data="menuOptions"
|
|
||||||
filterable
|
|
||||||
check-strictly
|
|
||||||
:render-after-expand="false"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="菜单名称" prop="name">
|
<el-form-item label="菜单名称" prop="name">
|
||||||
|
@ -155,56 +102,31 @@
|
||||||
<el-input v-model="formData.path" placeholder="请输入外链完整路径" />
|
<el-input v-model="formData.path" placeholder="请输入外链完整路径" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item
|
<el-form-item v-if="
|
||||||
v-if="
|
formData.type == MenuTypeEnum.CATALOG || formData.type == MenuTypeEnum.MENU
|
||||||
formData.type == MenuTypeEnum.CATALOG || formData.type == MenuTypeEnum.MENU
|
" label="路由路径" prop="path">
|
||||||
"
|
<el-input v-if="formData.type == MenuTypeEnum.CATALOG" v-model="formData.path" placeholder="system" />
|
||||||
label="路由路径"
|
|
||||||
prop="path"
|
|
||||||
>
|
|
||||||
<el-input
|
|
||||||
v-if="formData.type == MenuTypeEnum.CATALOG"
|
|
||||||
v-model="formData.path"
|
|
||||||
placeholder="system"
|
|
||||||
/>
|
|
||||||
<el-input v-else v-model="formData.path" placeholder="user" />
|
<el-input v-else v-model="formData.path" placeholder="user" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<!-- 组件页面完整路径 -->
|
<!-- 组件页面完整路径 -->
|
||||||
<el-form-item
|
<el-form-item v-if="formData.type == MenuTypeEnum.MENU" label="页面路径" prop="component">
|
||||||
v-if="formData.type == MenuTypeEnum.MENU"
|
<el-input v-model="formData.component" placeholder="system/user/index" style="width: 95%">
|
||||||
label="页面路径"
|
<template v-if="formData.type == MenuTypeEnum.MENU" #prepend>src/views/</template>
|
||||||
prop="component"
|
|
||||||
>
|
|
||||||
<el-input
|
|
||||||
v-model="formData.component"
|
|
||||||
placeholder="system/user/index"
|
|
||||||
style="width: 95%"
|
|
||||||
>
|
|
||||||
<template v-if="formData.type == MenuTypeEnum.MENU" #prepend
|
|
||||||
>src/views/</template
|
|
||||||
>
|
|
||||||
<template v-if="formData.type == MenuTypeEnum.MENU" #append>.vue</template>
|
<template v-if="formData.type == MenuTypeEnum.MENU" #append>.vue</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item
|
<el-form-item v-if="formData.type !== MenuTypeEnum.BUTTON" prop="visible" label="显示状态">
|
||||||
v-if="formData.type !== MenuTypeEnum.BUTTON"
|
|
||||||
prop="visible"
|
|
||||||
label="显示状态"
|
|
||||||
>
|
|
||||||
<el-radio-group v-model="formData.visible">
|
<el-radio-group v-model="formData.visible">
|
||||||
<el-radio :label="1">显示</el-radio>
|
<el-radio :label="1">显示</el-radio>
|
||||||
<el-radio :label="0">隐藏</el-radio>
|
<el-radio :label="0">隐藏</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item
|
<el-form-item v-if="
|
||||||
v-if="
|
formData.type === MenuTypeEnum.CATALOG || formData.type === MenuTypeEnum.MENU
|
||||||
formData.type === MenuTypeEnum.CATALOG || formData.type === MenuTypeEnum.MENU
|
" label="是否始终显示">
|
||||||
"
|
|
||||||
label="是否始终显示"
|
|
||||||
>
|
|
||||||
<template #label>
|
<template #label>
|
||||||
<div>
|
<div>
|
||||||
是否始终显示
|
是否始终显示
|
||||||
|
@ -231,28 +153,15 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="排序" prop="sort">
|
<el-form-item label="排序" prop="sort">
|
||||||
<el-input-number
|
<el-input-number v-model="formData.sort" style="width: 100px" controls-position="right" :min="0" />
|
||||||
v-model="formData.sort"
|
|
||||||
style="width: 100px"
|
|
||||||
controls-position="right"
|
|
||||||
:min="0"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<!-- 权限标识 -->
|
<!-- 权限标识 -->
|
||||||
<el-form-item
|
<el-form-item v-if="formData.type == MenuTypeEnum.BUTTON" label="权限标识" prop="perm">
|
||||||
v-if="formData.type == MenuTypeEnum.BUTTON"
|
|
||||||
label="权限标识"
|
|
||||||
prop="perm"
|
|
||||||
>
|
|
||||||
<el-input v-model="formData.perm" placeholder="sys:user:add" />
|
<el-input v-model="formData.perm" placeholder="sys:user:add" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item
|
<el-form-item v-if="formData.type !== MenuTypeEnum.BUTTON" label="图标" prop="icon">
|
||||||
v-if="formData.type !== MenuTypeEnum.BUTTON"
|
|
||||||
label="图标"
|
|
||||||
prop="icon"
|
|
||||||
>
|
|
||||||
<!-- 图标选择器 -->
|
<!-- 图标选择器 -->
|
||||||
<icon-select v-model="formData.icon" />
|
<icon-select v-model="formData.icon" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
@ -272,14 +181,13 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup>
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: "Menu",
|
name: "Menu",
|
||||||
inheritAttrs: false,
|
inheritAttrs: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
import MenuAPI from "@/api/menu";
|
import MenuAPI from "@/api/menu";
|
||||||
import { MenuQuery, MenuForm, MenuVO } from "@/api/menu/model";
|
|
||||||
import { MenuTypeEnum } from "@/enums/MenuTypeEnum";
|
import { MenuTypeEnum } from "@/enums/MenuTypeEnum";
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const queryFormRef = ref(ElForm);
|
const queryFormRef = ref(ElForm);
|
||||||
|
@ -291,12 +199,12 @@ const dialog = reactive({
|
||||||
visible: false,
|
visible: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
const queryParams = reactive<MenuQuery>({});
|
const queryParams = reactive({});
|
||||||
const menuList = ref<MenuVO[]>([]);
|
const menuList = ref([]);
|
||||||
|
|
||||||
const menuOptions = ref<OptionType[]>([]);
|
const menuOptions = ref([]);
|
||||||
|
|
||||||
const formData = reactive<MenuForm>({
|
const formData = reactive({
|
||||||
parentId: 0,
|
parentId: 0,
|
||||||
visible: 1,
|
visible: 1,
|
||||||
sort: 1,
|
sort: 1,
|
||||||
|
@ -316,7 +224,7 @@ const rules = reactive({
|
||||||
});
|
});
|
||||||
|
|
||||||
// 选择表格的行菜单ID
|
// 选择表格的行菜单ID
|
||||||
const selectedRowMenuId = ref<number | undefined>();
|
const selectedRowMenuId = ref();
|
||||||
|
|
||||||
const menuCacheData = reactive({
|
const menuCacheData = reactive({
|
||||||
type: "",
|
type: "",
|
||||||
|
@ -330,7 +238,7 @@ const tableData = [
|
||||||
name: "算法分割管理",
|
name: "算法分割管理",
|
||||||
type: "MENU",
|
type: "MENU",
|
||||||
path: "/modelMgr",
|
path: "/modelMgr",
|
||||||
component:"/modelMgr/index",
|
component: "/modelMgr/index",
|
||||||
perm: "system:deployment:list",
|
perm: "system:deployment:list",
|
||||||
visible: 1,
|
visible: 1,
|
||||||
sort: 1,
|
sort: 1,
|
||||||
|
@ -383,7 +291,7 @@ const tableData = [
|
||||||
name: "互联协议管理",
|
name: "互联协议管理",
|
||||||
type: "MENU",
|
type: "MENU",
|
||||||
path: "/modelMgr",
|
path: "/modelMgr",
|
||||||
component:"/modelMgr/index",
|
component: "/modelMgr/index",
|
||||||
perm: "system:deployment:list",
|
perm: "system:deployment:list",
|
||||||
visible: 1,
|
visible: 1,
|
||||||
sort: 2,
|
sort: 2,
|
||||||
|
@ -456,7 +364,7 @@ function resetQuery() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**行点击事件 */
|
/**行点击事件 */
|
||||||
function onRowClick(row: MenuVO) {
|
function onRowClick(row) {
|
||||||
selectedRowMenuId.value = row.id;
|
selectedRowMenuId.value = row.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -466,7 +374,7 @@ function onRowClick(row: MenuVO) {
|
||||||
* @param parentId 父菜单ID
|
* @param parentId 父菜单ID
|
||||||
* @param menuId 菜单ID
|
* @param menuId 菜单ID
|
||||||
*/
|
*/
|
||||||
function openDialog(parentId?: number, menuId?: number) {
|
function openDialog(parentId, menuId) {
|
||||||
router.push({ path: "/system/menuEdit" });
|
router.push({ path: "/system/menuEdit" });
|
||||||
// MenuAPI.getOptions()
|
// MenuAPI.getOptions()
|
||||||
// .then((data) => {
|
// .then((data) => {
|
||||||
|
@ -500,7 +408,7 @@ function onMenuTypeChange() {
|
||||||
|
|
||||||
/** 菜单保存提交 */
|
/** 菜单保存提交 */
|
||||||
function submitForm() {
|
function submitForm() {
|
||||||
menuFormRef.value.validate((isValid: boolean) => {
|
menuFormRef.value.validate((isValid) => {
|
||||||
if (isValid) {
|
if (isValid) {
|
||||||
const menuId = formData.id;
|
const menuId = formData.id;
|
||||||
if (menuId) {
|
if (menuId) {
|
||||||
|
@ -521,7 +429,7 @@ function submitForm() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 删除菜单 */
|
/** 删除菜单 */
|
||||||
function handleDelete(menuId: number) {
|
function handleDelete(menuId) {
|
||||||
// if (!menuId) {
|
// if (!menuId) {
|
||||||
// ElMessage.warning("请勾选删除项");
|
// ElMessage.warning("请勾选删除项");
|
||||||
// return false;
|
// return false;
|
||||||
|
|
|
@ -1,173 +1,160 @@
|
||||||
<!-- 用户管理 -->
|
<!-- 用户管理 -->
|
||||||
<template>
|
<template>
|
||||||
<div class="app-container model-detail">
|
<div class="app-container model-detail">
|
||||||
<el-card v-loading="loading">
|
<el-card v-loading="loading">
|
||||||
<template #header
|
<template #header><svg-icon icon-class="pause" style="width: 20px; height: 20px" />角色基本信息</template>
|
||||||
><svg-icon
|
<el-row>
|
||||||
icon-class="pause"
|
<el-col :lg="12" :xs="24">
|
||||||
style="width: 20px; height: 20px"
|
<el-form ref="roleFormRef" :model="formData" :rules="rules" label-width="100px">
|
||||||
/>角色基本信息</template
|
<el-form-item label="角色名称" prop="name">
|
||||||
>
|
<el-input v-model="formData.name" placeholder="请输入角色名称" />
|
||||||
<el-row>
|
</el-form-item>
|
||||||
<el-col :lg="12" :xs="24">
|
|
||||||
<el-form
|
|
||||||
ref="roleFormRef"
|
|
||||||
:model="formData"
|
|
||||||
:rules="rules"
|
|
||||||
label-width="100px"
|
|
||||||
>
|
|
||||||
<el-form-item label="角色名称" prop="name">
|
|
||||||
<el-input v-model="formData.name" placeholder="请输入角色名称" />
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<el-form-item label="角色编码" prop="code">
|
<el-form-item label="角色编码" prop="code">
|
||||||
<el-input v-model="formData.code" placeholder="请输入角色编码" />
|
<el-input v-model="formData.code" placeholder="请输入角色编码" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="数据权限" prop="dataScope">
|
<el-form-item label="数据权限" prop="dataScope">
|
||||||
<el-select v-model="formData.dataScope">
|
<el-select v-model="formData.dataScope">
|
||||||
<el-option :key="0" label="全部数据" :value="0" />
|
<el-option :key="0" label="全部数据" :value="0" />
|
||||||
<el-option :key="1" label="部门及子部门数据" :value="1" />
|
<el-option :key="1" label="部门及子部门数据" :value="1" />
|
||||||
<el-option :key="2" label="本部门数据" :value="2" />
|
<el-option :key="2" label="本部门数据" :value="2" />
|
||||||
<el-option :key="3" label="本人数据" :value="3" />
|
<el-option :key="3" label="本人数据" :value="3" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="状态" prop="status">
|
<el-form-item label="状态" prop="status">
|
||||||
<el-radio-group v-model="formData.status">
|
<el-radio-group v-model="formData.status">
|
||||||
<el-radio :label="1">正常</el-radio>
|
<el-radio :label="1">正常</el-radio>
|
||||||
<el-radio :label="0">停用</el-radio>
|
<el-radio :label="0">停用</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="排序" prop="sort">
|
<el-form-item label="排序" prop="sort">
|
||||||
<el-input-number
|
<el-input-number v-model="formData.sort" controls-position="right" :min="0" style="width: 100px" />
|
||||||
v-model="formData.sort"
|
</el-form-item>
|
||||||
controls-position="right"
|
</el-form>
|
||||||
:min="0"
|
</el-col>
|
||||||
style="width: 100px"
|
<el-col :lg="12" :xs="24"> </el-col>
|
||||||
/>
|
</el-row>
|
||||||
</el-form-item>
|
</el-card>
|
||||||
</el-form>
|
<el-card class="card-footer">
|
||||||
</el-col>
|
<el-button type="primary" @click="handleSubmit"><i-ep-check />确 定</el-button>
|
||||||
<el-col :lg="12" :xs="24"> </el-col>
|
<el-button @click="closeBack"><i-ep-close />取 消</el-button>
|
||||||
</el-row>
|
</el-card>
|
||||||
</el-card>
|
</div>
|
||||||
<el-card class="card-footer">
|
</template>
|
||||||
<el-button type="primary" @click="handleSubmit"><i-ep-check />确 定</el-button>
|
|
||||||
<el-button @click="closeBack"><i-ep-close />取 消</el-button>
|
<script setup>
|
||||||
</el-card>
|
defineOptions({
|
||||||
</div>
|
name: "User",
|
||||||
</template>
|
inheritAttrs: false,
|
||||||
|
});
|
||||||
<script setup lang="ts">
|
|
||||||
defineOptions({
|
const router = useRouter();
|
||||||
name: "User",
|
const loading = ref(false); // 加载状态
|
||||||
inheritAttrs: false,
|
|
||||||
});
|
const calTypeList = ref(); // 角色下拉数据源
|
||||||
|
|
||||||
import UserAPI from "@/api/user";
|
// 用户表单数据
|
||||||
import { UserForm } from "@/api/user/model";
|
const formData = reactive({
|
||||||
|
status: 1,
|
||||||
const router = useRouter();
|
});
|
||||||
const loading = ref(false); // 加载状态
|
|
||||||
|
const radioSelected = ref('');
|
||||||
const calTypeList = ref<OptionType[]>(); // 角色下拉数据源
|
|
||||||
|
// 校验规则
|
||||||
// 用户表单数据
|
const rules = reactive({
|
||||||
const formData = reactive<UserForm>({
|
username: [{ required: true, message: "不能为空", trigger: "blur" }],
|
||||||
status: 1,
|
nickname: [{ required: true, message: "不能为空", trigger: "blur" }],
|
||||||
});
|
deptId: [{ required: true, message: "不能为空", trigger: "blur" }],
|
||||||
|
roleIds: [{ required: true, message: "不能为空", trigger: "blur" }],
|
||||||
const radioSelected = ref('');
|
email: [
|
||||||
|
|
||||||
// 校验规则
|
|
||||||
const rules = reactive({
|
|
||||||
username: [{ required: true, message: "不能为空", trigger: "blur" }],
|
|
||||||
nickname: [{ required: true, message: "不能为空", trigger: "blur" }],
|
|
||||||
deptId: [{ required: true, message: "不能为空", trigger: "blur" }],
|
|
||||||
roleIds: [{ required: true, message: "不能为空", trigger: "blur" }],
|
|
||||||
email: [
|
|
||||||
{
|
|
||||||
pattern: /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/,
|
|
||||||
message: "请输入正确的邮箱地址",
|
|
||||||
trigger: "blur",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
mobile: [
|
|
||||||
{
|
|
||||||
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
|
|
||||||
message: "请输入正确的手机号码",
|
|
||||||
trigger: "blur",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
});
|
|
||||||
|
|
||||||
const list = [
|
|
||||||
{
|
{
|
||||||
csmc: "10.0.8.12",
|
pattern: /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/,
|
||||||
csms: "DOCKER-TOOL",
|
message: "请输入正确的邮箱地址",
|
||||||
csmc1: "acd0032a-6833-4348-b0fc-04798f94354c",
|
trigger: "blur",
|
||||||
csmc2: "华为",
|
|
||||||
csmc3: "1.2",
|
|
||||||
csmc4: "已连接",
|
|
||||||
},
|
},
|
||||||
|
],
|
||||||
|
mobile: [
|
||||||
{
|
{
|
||||||
csmc: "192.10.71.44",
|
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
|
||||||
csms: "ETL",
|
message: "请输入正确的手机号码",
|
||||||
csmc1: "ac1232a-6233-4348-b0fc-04798f94551",
|
trigger: "blur",
|
||||||
csmc2: "华为",
|
|
||||||
csmc3: "1.2",
|
|
||||||
csmc4: "已连接",
|
|
||||||
},
|
},
|
||||||
];
|
],
|
||||||
|
});
|
||||||
/** 表单提交 */
|
|
||||||
const handleSubmit = useThrottleFn(() => {
|
const list = [
|
||||||
loading.value = true;
|
{
|
||||||
setTimeout(() => {
|
csmc: "10.0.8.12",
|
||||||
ElMessage.success("保存成功");
|
csms: "DOCKER-TOOL",
|
||||||
loading.value = false;
|
csmc1: "acd0032a-6833-4348-b0fc-04798f94354c",
|
||||||
closeBack();
|
csmc2: "华为",
|
||||||
}, 1000);
|
csmc3: "1.2",
|
||||||
}, 3000);
|
csmc4: "已连接",
|
||||||
|
},
|
||||||
/** 返回默认页面 */
|
{
|
||||||
function closeBack() {
|
csmc: "192.10.71.44",
|
||||||
router.push({ path: "/system/role" });
|
csms: "ETL",
|
||||||
|
csmc1: "ac1232a-6233-4348-b0fc-04798f94551",
|
||||||
|
csmc2: "华为",
|
||||||
|
csmc3: "1.2",
|
||||||
|
csmc4: "已连接",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
/** 表单提交 */
|
||||||
|
const handleSubmit = useThrottleFn(() => {
|
||||||
|
loading.value = true;
|
||||||
|
setTimeout(() => {
|
||||||
|
ElMessage.success("保存成功");
|
||||||
|
loading.value = false;
|
||||||
|
closeBack();
|
||||||
|
}, 1000);
|
||||||
|
}, 3000);
|
||||||
|
|
||||||
|
/** 返回默认页面 */
|
||||||
|
function closeBack() {
|
||||||
|
router.push({ path: "/system/role" });
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
//handleQuery();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.model-detail {
|
||||||
|
:deep(.el-card__header) {
|
||||||
|
padding: 8px 4px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
onMounted(() => {
|
|
||||||
//handleQuery();
|
.sp-file {
|
||||||
});
|
color: #29d;
|
||||||
</script>
|
}
|
||||||
<style scoped lang="scss">
|
|
||||||
.model-detail {
|
.tb-base-info {
|
||||||
:deep(.el-card__header) {
|
line-height: 30px;
|
||||||
padding: 8px 4px;
|
}
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
:deep(.svg-icon) {
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-footer {
|
||||||
|
position: fixed;
|
||||||
|
width: calc(100% - 215px);
|
||||||
|
bottom: 0px;
|
||||||
|
|
||||||
|
:deep(.el-card__body) {
|
||||||
|
padding: 10px;
|
||||||
|
|
||||||
|
.el-pagination {
|
||||||
|
justify-content: end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.sp-file {
|
}
|
||||||
color: #29d;
|
</style>
|
||||||
}
|
|
||||||
.tb-base-info {
|
|
||||||
line-height: 30px;
|
|
||||||
}
|
|
||||||
:deep(.svg-icon) {
|
|
||||||
margin-right: 8px;
|
|
||||||
}
|
|
||||||
.card-footer {
|
|
||||||
position: fixed;
|
|
||||||
width: calc(100% - 215px);
|
|
||||||
bottom: 0px;
|
|
||||||
:deep(.el-card__body) {
|
|
||||||
padding: 10px;
|
|
||||||
.el-pagination {
|
|
||||||
justify-content: end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
|
@ -5,41 +5,26 @@
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="flex justify-between">
|
<div class="flex justify-between">
|
||||||
<div>
|
<div>
|
||||||
<el-button type="primary" @click="openDialog('user-form')"
|
<el-button type="primary" @click="openDialog('user-form')"><i-ep-plus />新增角色</el-button>
|
||||||
><i-ep-plus />新增角色</el-button
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||||
<el-form-item label="角色名称" prop="keywords">
|
<el-form-item label="角色名称" prop="keywords">
|
||||||
<el-input
|
<el-input v-model="queryParams.keywords" placeholder="请输入角色名称" clearable style="width: 200px"
|
||||||
v-model="queryParams.keywords"
|
@keyup.enter="handleQuery" />
|
||||||
placeholder="请输入角色名称"
|
|
||||||
clearable
|
|
||||||
style="width: 200px"
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" @click="handleQuery"
|
<el-button type="primary" @click="handleQuery"><i-ep-search />搜索</el-button>
|
||||||
><i-ep-search />搜索</el-button
|
|
||||||
>
|
|
||||||
<el-button @click="resetQuery">
|
<el-button @click="resetQuery">
|
||||||
<i-ep-refresh />
|
<i-ep-refresh />
|
||||||
重置</el-button
|
重置</el-button>
|
||||||
>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<el-table
|
<el-table ref="dataTableRef" v-loading="loading" :data="tableData" highlight-current-row>
|
||||||
ref="dataTableRef"
|
|
||||||
v-loading="loading"
|
|
||||||
:data="tableData"
|
|
||||||
highlight-current-row
|
|
||||||
>
|
|
||||||
<el-table-column label="角色名称" prop="name" />
|
<el-table-column label="角色名称" prop="name" />
|
||||||
<el-table-column label="角色编码" prop="code" />
|
<el-table-column label="角色编码" prop="code" />
|
||||||
<el-table-column label="状态" align="center">
|
<el-table-column label="状态" align="center">
|
||||||
|
@ -51,56 +36,26 @@
|
||||||
<el-table-column label="排序" align="center" prop="sort" />
|
<el-table-column label="排序" align="center" prop="sort" />
|
||||||
<el-table-column fixed="right" label="操作" width="220">
|
<el-table-column fixed="right" label="操作" width="220">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button
|
<el-button type="primary" size="small" link @click="openMenuDialog(scope.row)">
|
||||||
type="primary"
|
|
||||||
size="small"
|
|
||||||
link
|
|
||||||
@click="openMenuDialog(scope.row)"
|
|
||||||
>
|
|
||||||
<i-ep-position />分配权限
|
<i-ep-position />分配权限
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button type="primary" size="small" link @click="openDialog(scope.row.id)">
|
||||||
type="primary"
|
|
||||||
size="small"
|
|
||||||
link
|
|
||||||
@click="openDialog(scope.row.id)"
|
|
||||||
>
|
|
||||||
<i-ep-edit />编辑
|
<i-ep-edit />编辑
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button type="primary" size="small" link @click="handleDelete(scope.row.id)">
|
||||||
type="primary"
|
|
||||||
size="small"
|
|
||||||
link
|
|
||||||
@click="handleDelete(scope.row.id)"
|
|
||||||
>
|
|
||||||
<i-ep-delete />删除
|
<i-ep-delete />删除
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
<pagination
|
<pagination v-if="total > 0" v-model:total="total" v-model:page="queryParams.pageNum"
|
||||||
v-if="total > 0"
|
v-model:limit="queryParams.pageSize" @pagination="handleQuery" />
|
||||||
v-model:total="total"
|
|
||||||
v-model:page="queryParams.pageNum"
|
|
||||||
v-model:limit="queryParams.pageSize"
|
|
||||||
@pagination="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<!-- 角色表单弹窗 -->
|
<!-- 角色表单弹窗 -->
|
||||||
<el-dialog
|
<el-dialog v-model="dialog.visible" :title="dialog.title" width="500px" @close="closeDialog">
|
||||||
v-model="dialog.visible"
|
<el-form ref="roleFormRef" :model="formData" :rules="rules" label-width="100px">
|
||||||
:title="dialog.title"
|
|
||||||
width="500px"
|
|
||||||
@close="closeDialog"
|
|
||||||
>
|
|
||||||
<el-form
|
|
||||||
ref="roleFormRef"
|
|
||||||
:model="formData"
|
|
||||||
:rules="rules"
|
|
||||||
label-width="100px"
|
|
||||||
>
|
|
||||||
<el-form-item label="角色名称" prop="name">
|
<el-form-item label="角色名称" prop="name">
|
||||||
<el-input v-model="formData.name" placeholder="请输入角色名称" />
|
<el-input v-model="formData.name" placeholder="请输入角色名称" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
@ -126,12 +81,7 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="排序" prop="sort">
|
<el-form-item label="排序" prop="sort">
|
||||||
<el-input-number
|
<el-input-number v-model="formData.sort" controls-position="right" :min="0" style="width: 100px" />
|
||||||
v-model="formData.sort"
|
|
||||||
controls-position="right"
|
|
||||||
:min="0"
|
|
||||||
style="width: 100px"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
|
@ -144,19 +94,9 @@
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
<!-- 分配菜单弹窗 -->
|
<!-- 分配菜单弹窗 -->
|
||||||
<el-dialog
|
<el-dialog v-model="menuDialogVisible" :title="'【' + checkedRole.name + '】权限分配'" width="800px">
|
||||||
v-model="menuDialogVisible"
|
|
||||||
:title="'【' + checkedRole.name + '】权限分配'"
|
|
||||||
width="800px"
|
|
||||||
>
|
|
||||||
<el-scrollbar v-loading="loading" max-height="600px">
|
<el-scrollbar v-loading="loading" max-height="600px">
|
||||||
<el-tree
|
<el-tree ref="menuRef" node-key="value" show-checkbox :data="tableData2" :default-expand-all="true">
|
||||||
ref="menuRef"
|
|
||||||
node-key="value"
|
|
||||||
show-checkbox
|
|
||||||
:data="tableData2"
|
|
||||||
:default-expand-all="true"
|
|
||||||
>
|
|
||||||
<template #default="{ data }">
|
<template #default="{ data }">
|
||||||
{{ data.label }}
|
{{ data.label }}
|
||||||
</template>
|
</template>
|
||||||
|
@ -165,9 +105,7 @@
|
||||||
|
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<div class="dialog-footer">
|
<div class="dialog-footer">
|
||||||
<el-button type="primary" @click="handleRoleMenuSubmit"
|
<el-button type="primary" @click="handleRoleMenuSubmit">确 定</el-button>
|
||||||
>确 定</el-button
|
|
||||||
>
|
|
||||||
<el-button @click="menuDialogVisible = false">取 消</el-button>
|
<el-button @click="menuDialogVisible = false">取 消</el-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -175,12 +113,8 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup>
|
||||||
import RoleAPI from "@/api/role";
|
import RoleAPI from "@/api/role";
|
||||||
import MenuAPI from "@/api/menu";
|
|
||||||
|
|
||||||
import { RolePageVO, RoleForm, RoleQuery } from "@/api/role/model";
|
|
||||||
|
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: "Role",
|
name: "Role",
|
||||||
inheritAttrs: false,
|
inheritAttrs: false,
|
||||||
|
@ -191,7 +125,7 @@ const roleFormRef = ref(ElForm);
|
||||||
const menuRef = ref(ElTree);
|
const menuRef = ref(ElTree);
|
||||||
|
|
||||||
const loading = ref(false);
|
const loading = ref(false);
|
||||||
const ids = ref<number[]>([]);
|
const ids = ref([]);
|
||||||
const total = ref(0);
|
const total = ref(0);
|
||||||
|
|
||||||
const queryParams = reactive<RoleQuery>({
|
const queryParams = reactive<RoleQuery>({
|
||||||
|
@ -199,7 +133,7 @@ const queryParams = reactive<RoleQuery>({
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
});
|
});
|
||||||
|
|
||||||
const roleList = ref<RolePageVO[]>();
|
const roleList = ref();
|
||||||
|
|
||||||
const dialog = reactive({
|
const dialog = reactive({
|
||||||
title: "",
|
title: "",
|
||||||
|
@ -237,7 +171,7 @@ const tableData2 = [
|
||||||
label: "算法分割管理",
|
label: "算法分割管理",
|
||||||
type: "MENU",
|
type: "MENU",
|
||||||
path: "/modelMgr",
|
path: "/modelMgr",
|
||||||
component:"/modelMgr/index",
|
component: "/modelMgr/index",
|
||||||
perm: "system:deployment:list",
|
perm: "system:deployment:list",
|
||||||
visible: 1,
|
visible: 1,
|
||||||
sort: 1,
|
sort: 1,
|
||||||
|
@ -290,7 +224,7 @@ const tableData2 = [
|
||||||
label: "互联协议管理",
|
label: "互联协议管理",
|
||||||
type: "MENU",
|
type: "MENU",
|
||||||
path: "/modelMgr",
|
path: "/modelMgr",
|
||||||
component:"/modelMgr/index",
|
component: "/modelMgr/index",
|
||||||
perm: "system:deployment:list",
|
perm: "system:deployment:list",
|
||||||
visible: 1,
|
visible: 1,
|
||||||
sort: 2,
|
sort: 2,
|
||||||
|
@ -355,13 +289,9 @@ const rules = reactive({
|
||||||
|
|
||||||
const menuDialogVisible = ref(false);
|
const menuDialogVisible = ref(false);
|
||||||
|
|
||||||
const menuList = ref<OptionType[]>([]);
|
const menuList = ref([]);
|
||||||
|
|
||||||
interface CheckedRole {
|
let checkedRole= reactive({});
|
||||||
id?: number;
|
|
||||||
name?: string;
|
|
||||||
}
|
|
||||||
let checkedRole: CheckedRole = reactive({});
|
|
||||||
|
|
||||||
/** 查询 */
|
/** 查询 */
|
||||||
function handleQuery() {
|
function handleQuery() {
|
||||||
|
@ -385,12 +315,12 @@ function resetQuery() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 行checkbox 选中事件 */
|
/** 行checkbox 选中事件 */
|
||||||
function handleSelectionChange(selection: any) {
|
function handleSelectionChange(selection) {
|
||||||
ids.value = selection.map((item: any) => item.id);
|
ids.value = selection.map((item) => item.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 打开角色表单弹窗 */
|
/** 打开角色表单弹窗 */
|
||||||
function openDialog(roleId?: number) {
|
function openDialog(roleId) {
|
||||||
router.push({ path: "/system/roleEdit" });
|
router.push({ path: "/system/roleEdit" });
|
||||||
// dialog.visible = true;
|
// dialog.visible = true;
|
||||||
// if (roleId) {
|
// if (roleId) {
|
||||||
|
@ -405,7 +335,7 @@ function openDialog(roleId?: number) {
|
||||||
|
|
||||||
/** 角色保存提交 */
|
/** 角色保存提交 */
|
||||||
function handleSubmit() {
|
function handleSubmit() {
|
||||||
roleFormRef.value.validate((valid: any) => {
|
roleFormRef.value.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
const roleId = formData.id;
|
const roleId = formData.id;
|
||||||
|
@ -447,7 +377,7 @@ function resetForm() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 删除角色 */
|
/** 删除角色 */
|
||||||
function handleDelete(roleId?: number) {
|
function handleDelete(roleId) {
|
||||||
const roleIds = [roleId || ids.value].join(",");
|
const roleIds = [roleId || ids.value].join(",");
|
||||||
if (!roleIds) {
|
if (!roleIds) {
|
||||||
ElMessage.warning("请勾选删除项");
|
ElMessage.warning("请勾选删除项");
|
||||||
|
@ -470,8 +400,8 @@ function handleDelete(roleId?: number) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 打开分配菜单弹窗 */
|
/** 打开分配菜单弹窗 */
|
||||||
async function openMenuDialog(row: RolePageVO) {
|
async function openMenuDialog(row) {
|
||||||
checkedRole.name="管理员";
|
checkedRole.name = "管理员";
|
||||||
menuDialogVisible.value = true;
|
menuDialogVisible.value = true;
|
||||||
// const roleId = row.id;
|
// const roleId = row.id;
|
||||||
// if (roleId) {
|
// if (roleId) {
|
||||||
|
@ -503,9 +433,9 @@ async function openMenuDialog(row: RolePageVO) {
|
||||||
function handleRoleMenuSubmit() {
|
function handleRoleMenuSubmit() {
|
||||||
const roleId = checkedRole.id;
|
const roleId = checkedRole.id;
|
||||||
if (roleId) {
|
if (roleId) {
|
||||||
const checkedMenuIds: number[] = menuRef.value
|
const checkedMenuIds = menuRef.value
|
||||||
.getCheckedNodes(false, true)
|
.getCheckedNodes(false, true)
|
||||||
.map((node: any) => node.value);
|
.map((node) => node.value);
|
||||||
|
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
RoleAPI.updateRoleMenus(roleId, checkedMenuIds)
|
RoleAPI.updateRoleMenus(roleId, checkedMenuIds)
|
||||||
|
|
|
@ -2,59 +2,32 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="app-container model-detail">
|
<div class="app-container model-detail">
|
||||||
<el-card v-loading="loading">
|
<el-card v-loading="loading">
|
||||||
<template #header
|
<template #header><svg-icon icon-class="pause" style="width: 20px; height: 20px" />用户基本信息</template>
|
||||||
><svg-icon
|
|
||||||
icon-class="pause"
|
|
||||||
style="width: 20px; height: 20px"
|
|
||||||
/>用户基本信息</template
|
|
||||||
>
|
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :lg="12" :xs="24">
|
<el-col :lg="12" :xs="24">
|
||||||
<el-form ref="userFormRef" :model="formData" :rules="rules" label-width="100px">
|
<el-form ref="userFormRef" :model="formData" :rules="rules" label-width="100px">
|
||||||
<el-form-item label="用户名" prop="username">
|
<el-form-item label="用户名" prop="username">
|
||||||
<el-input
|
<el-input v-model="formData.username" :readonly="!!formData.id" placeholder="请输入用户名" />
|
||||||
v-model="formData.username"
|
|
||||||
:readonly="!!formData.id"
|
|
||||||
placeholder="请输入用户名"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="性别" prop="gender">
|
<el-form-item label="性别" prop="gender">
|
||||||
<el-select v-model="formData.gender" placeholder="请选择">
|
<el-select v-model="formData.gender" placeholder="请选择">
|
||||||
<el-option
|
<el-option v-for="item in roleList" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
v-for="item in roleList"
|
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="角色" prop="roleIds">
|
<el-form-item label="角色" prop="roleIds">
|
||||||
<el-select v-model="formData.roleIds" multiple placeholder="请选择">
|
<el-select v-model="formData.roleIds" multiple placeholder="请选择">
|
||||||
<el-option
|
<el-option v-for="item in roleList" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
v-for="item in roleList"
|
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="手机号码" prop="mobile">
|
<el-form-item label="手机号码" prop="mobile">
|
||||||
<el-input
|
<el-input v-model="formData.mobile" placeholder="请输入手机号码" maxlength="11" />
|
||||||
v-model="formData.mobile"
|
|
||||||
placeholder="请输入手机号码"
|
|
||||||
maxlength="11"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="邮箱" prop="email">
|
<el-form-item label="邮箱" prop="email">
|
||||||
<el-input
|
<el-input v-model="formData.email" placeholder="请输入邮箱" maxlength="50" />
|
||||||
v-model="formData.email"
|
|
||||||
placeholder="请输入邮箱"
|
|
||||||
maxlength="50"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="状态" prop="status">
|
<el-form-item label="状态" prop="status">
|
||||||
|
@ -75,22 +48,19 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup>
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: "User",
|
name: "User",
|
||||||
inheritAttrs: false,
|
inheritAttrs: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
import UserAPI from "@/api/user";
|
|
||||||
import { UserForm } from "@/api/user/model";
|
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const loading = ref(false); // 加载状态
|
const loading = ref(false); // 加载状态
|
||||||
|
|
||||||
const calTypeList = ref<OptionType[]>(); // 角色下拉数据源
|
const calTypeList = ref(); // 角色下拉数据源
|
||||||
|
|
||||||
// 用户表单数据
|
// 用户表单数据
|
||||||
const formData = reactive<UserForm>({
|
const formData = reactive({
|
||||||
status: 1,
|
status: 1,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -145,21 +115,27 @@ onMounted(() => {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.sp-file {
|
.sp-file {
|
||||||
color: #29d;
|
color: #29d;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tb-base-info {
|
.tb-base-info {
|
||||||
line-height: 30px;
|
line-height: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.svg-icon) {
|
:deep(.svg-icon) {
|
||||||
margin-right: 8px;
|
margin-right: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-footer {
|
.card-footer {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
width: calc(100% - 215px);
|
width: calc(100% - 215px);
|
||||||
bottom: 0px;
|
bottom: 0px;
|
||||||
|
|
||||||
:deep(.el-card__body) {
|
:deep(.el-card__body) {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
|
|
||||||
.el-pagination {
|
.el-pagination {
|
||||||
justify-content: end;
|
justify-content: end;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,9 +6,7 @@
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="flex justify-between">
|
<div class="flex justify-between">
|
||||||
<div>
|
<div>
|
||||||
<el-button type="primary" @click="openDialog()"
|
<el-button type="primary" @click="openDialog()"><i-ep-plus />新增用户</el-button>
|
||||||
><i-ep-plus />新增用户</el-button
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
<!-- <div>
|
<!-- <div>
|
||||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||||
|
@ -35,85 +33,43 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<el-table
|
<el-table v-loading="loading" :data="pageData" @selection-change="handleSelectionChange">
|
||||||
v-loading="loading"
|
|
||||||
:data="pageData"
|
|
||||||
@selection-change="handleSelectionChange"
|
|
||||||
>
|
|
||||||
<el-table-column key="id" label="编号" align="left" prop="user_id" />
|
<el-table-column key="id" label="编号" align="left" prop="user_id" />
|
||||||
<el-table-column label="用户名" align="left" prop="user_name" />
|
<el-table-column label="用户名" align="left" prop="user_name" />
|
||||||
<el-table-column label="角色编号" align="left" prop="user_role" />
|
<el-table-column label="角色编号" align="left" prop="user_role" />
|
||||||
<el-table-column label="角色名称" align="left" prop="user_role_name" />
|
<el-table-column label="角色名称" align="left" prop="user_role_name" />
|
||||||
<el-table-column label="操作" align="center" fixed="right" width="320">
|
<el-table-column label="操作" align="center" fixed="right" width="320">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button type="primary" size="small" text @click="resetPassword(scope.row)"
|
<el-button type="primary" size="small" text
|
||||||
><i-ep-refresh-left />修改密码</el-button
|
@click="resetPassword(scope.row)"><i-ep-refresh-left />修改密码</el-button>
|
||||||
>
|
<el-button type="primary" size="small" text @click="openDialogEdit(scope.row)"><i-ep-edit />修改角色</el-button>
|
||||||
<el-button type="primary" size="small" text @click="openDialogEdit(scope.row)"
|
<el-button type="primary" text size="small"
|
||||||
><i-ep-edit />修改角色</el-button
|
@click="handleDelete(scope.row.user_id)"><i-ep-delete />删除</el-button>
|
||||||
>
|
|
||||||
<el-button
|
|
||||||
type="primary"
|
|
||||||
text
|
|
||||||
size="small"
|
|
||||||
@click="handleDelete(scope.row.user_id)"
|
|
||||||
><i-ep-delete />删除</el-button
|
|
||||||
>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
<pagination
|
<pagination v-if="total > 0" v-model:total="total" v-model:page="queryParams.page_num"
|
||||||
v-if="total > 0"
|
v-model:limit="queryParams.page_size" @pagination="handleQuery" />
|
||||||
v-model:total="total"
|
|
||||||
v-model:page="queryParams.page_num"
|
|
||||||
v-model:limit="queryParams.page_size"
|
|
||||||
@pagination="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<!-- 弹窗 -->
|
<!-- 弹窗 -->
|
||||||
<el-dialog v-model="formVisible" :title="title" width="680">
|
<el-dialog v-model="formVisible" :title="title" width="680">
|
||||||
<!-- 用户新增/编辑表单 -->
|
<!-- 用户新增/编辑表单 -->
|
||||||
<el-form
|
<el-form ref="formRef" v-loading="formLoading" :model="form" :rules="rules" label-width="80px">
|
||||||
ref="formRef"
|
|
||||||
v-loading="formLoading"
|
|
||||||
:model="form"
|
|
||||||
:rules="rules"
|
|
||||||
label-width="80px"
|
|
||||||
>
|
|
||||||
<el-form-item label="用户名" prop="user_name">
|
<el-form-item label="用户名" prop="user_name">
|
||||||
<el-input
|
<el-input v-model="form.user_name" :disabled="form.user_id != null" placeholder="请输入用户名" />
|
||||||
v-model="form.user_name"
|
|
||||||
:disabled="form.user_id != null"
|
|
||||||
placeholder="请输入用户名"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="用户角色" prop="user_role">
|
<el-form-item label="用户角色" prop="user_role">
|
||||||
<el-select v-model="form.user_role" placeholder="请选择用户角色">
|
<el-select v-model="form.user_role" placeholder="请选择用户角色">
|
||||||
<el-option
|
<el-option v-for="item in listOpt.roleList" :key="item.key" :label="item.name" :value="item.key" />
|
||||||
v-for="item in listOpt.roleList"
|
|
||||||
:key="item.key"
|
|
||||||
:label="item.name"
|
|
||||||
:value="item.key"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="登录密码" prop="user_password" v-if="form.user_id == null">
|
<el-form-item label="登录密码" prop="user_password" v-if="form.user_id == null">
|
||||||
<el-input
|
<el-input v-model="form.user_password" type="password" placeholder="请输入登录密码" show-password />
|
||||||
v-model="form.user_password"
|
|
||||||
type="password"
|
|
||||||
placeholder="请输入登录密码"
|
|
||||||
show-password
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="确认密码" prop="password" v-if="form.user_id == null">
|
<el-form-item label="确认密码" prop="password" v-if="form.user_id == null">
|
||||||
<el-input
|
<el-input v-model="form.password" type="password" placeholder="请输入确认密码" show-password />
|
||||||
v-model="form.password"
|
|
||||||
type="password"
|
|
||||||
placeholder="请输入确认密码"
|
|
||||||
show-password
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<!-- 弹窗底部操作按钮 -->
|
<!-- 弹窗底部操作按钮 -->
|
||||||
|
@ -127,7 +83,7 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup>
|
||||||
import md5 from 'js-md5';
|
import md5 from 'js-md5';
|
||||||
import UserAPI from "@/api/myUser";
|
import UserAPI from "@/api/myUser";
|
||||||
|
|
||||||
|
@ -207,12 +163,12 @@ function resetQuery() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 行选中 */
|
/** 行选中 */
|
||||||
function handleSelectionChange(selection: any) {
|
function handleSelectionChange(selection) {
|
||||||
removeIds.value = selection.map((item: any) => item.id);
|
removeIds.value = selection.map((item) => item.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 重置密码 */
|
/** 重置密码 */
|
||||||
function resetPassword(row: { [key: string]: any }) {
|
function resetPassword(row) {
|
||||||
ElMessageBox.prompt("请输入用户「" + row.user_name + "」的新密码", "重置密码", {
|
ElMessageBox.prompt("请输入用户「" + row.user_name + "」的新密码", "重置密码", {
|
||||||
confirmButtonText: "确定",
|
confirmButtonText: "确定",
|
||||||
cancelButtonText: "取消",
|
cancelButtonText: "取消",
|
||||||
|
@ -244,7 +200,7 @@ function openDialog() {
|
||||||
/**
|
/**
|
||||||
* 打开弹窗
|
* 打开弹窗
|
||||||
*/
|
*/
|
||||||
function openDialogEdit(row: { [key: string]: any }) {
|
function openDialogEdit(row) {
|
||||||
reset();
|
reset();
|
||||||
title.value = "修改用户角色";
|
title.value = "修改用户角色";
|
||||||
form.user_id = row.user_id;
|
form.user_id = row.user_id;
|
||||||
|
@ -262,7 +218,7 @@ function closeDialog() {
|
||||||
|
|
||||||
/** 表单提交 */
|
/** 表单提交 */
|
||||||
const handleSubmit = useThrottleFn(() => {
|
const handleSubmit = useThrottleFn(() => {
|
||||||
formRef.value.validate((valid: any) => {
|
formRef.value.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
if (form.user_id) {
|
if (form.user_id) {
|
||||||
//修改角色
|
//修改角色
|
||||||
|
@ -312,7 +268,7 @@ function reset() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 删除用户 */
|
/** 删除用户 */
|
||||||
function handleDelete(id?: number) {
|
function handleDelete(id) {
|
||||||
ElMessageBox.confirm("确认删除用户?", "警告", {
|
ElMessageBox.confirm("确认删除用户?", "警告", {
|
||||||
confirmButtonText: "确定",
|
confirmButtonText: "确定",
|
||||||
cancelButtonText: "取消",
|
cancelButtonText: "取消",
|
||||||
|
|
|
@ -10,7 +10,7 @@ import IconsResolver from "unplugin-icons/resolver";
|
||||||
|
|
||||||
import { createSvgIconsPlugin } from "vite-plugin-svg-icons";
|
import { createSvgIconsPlugin } from "vite-plugin-svg-icons";
|
||||||
import mockDevServerPlugin from "vite-plugin-mock-dev-server";
|
import mockDevServerPlugin from "vite-plugin-mock-dev-server";
|
||||||
import { terser } from 'rollup-plugin-terser';
|
import { terser } from "rollup-plugin-terser";
|
||||||
import UnoCSS from "unocss/vite";
|
import UnoCSS from "unocss/vite";
|
||||||
import { resolve } from "path";
|
import { resolve } from "path";
|
||||||
import {
|
import {
|
||||||
|
@ -213,18 +213,10 @@ export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
|
||||||
drop_debugger: true, // 生产环境去除 debugger
|
drop_debugger: true, // 生产环境去除 debugger
|
||||||
},
|
},
|
||||||
format: {
|
format: {
|
||||||
comments: false, // 删除注释
|
comments: false, // 删除注释
|
||||||
},
|
|
||||||
},
|
|
||||||
rollupOptions: {
|
|
||||||
minify: 'terser', // 使用terser插件进行代码混淆
|
|
||||||
terserOptions: {
|
|
||||||
compress: {
|
|
||||||
drop_console: true, // 混淆时去除console语句
|
|
||||||
drop_debugger: true, // 去除debugger语句
|
|
||||||
},
|
|
||||||
|
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
rollupOptions: {
|
||||||
plugins: [terser()],
|
plugins: [terser()],
|
||||||
output: {
|
output: {
|
||||||
// manualChunks: {
|
// manualChunks: {
|
||||||
|
|
Loading…
Reference in New Issue