This commit is contained in:
sjl
2024-11-20 11:02:50 +08:00
parent 963c0f5713
commit f6595f784a
11 changed files with 168 additions and 27 deletions

View File

@@ -25,6 +25,7 @@ export default {
personalData: "Personal Data", personalData: "Personal Data",
changePassword: "Change Password", changePassword: "Change Password",
changeMode:"Change Mode", changeMode:"Change Mode",
versionRegister:"Version Register",
logout: "Logout" logout: "Logout"
} }
}; };

View File

@@ -25,6 +25,7 @@ export default {
personalData: "个人信息", personalData: "个人信息",
changePassword: "修改密码", changePassword: "修改密码",
changeMode:"模式切换", changeMode:"模式切换",
versionRegister:"版本注册",
logout: "退出登录" logout: "退出登录"
} }
}; };

View File

@@ -19,6 +19,9 @@
<el-dropdown-item @click="changeMode"> <el-dropdown-item @click="changeMode">
<el-icon><Edit /></el-icon>{{ $t("header.changeMode") }} <el-icon><Edit /></el-icon>{{ $t("header.changeMode") }}
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item @click="openDialog('versionRegisterRef')">
<el-icon><SetUp /></el-icon>{{ $t("header.versionRegister") }}
</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown>
@@ -29,6 +32,8 @@
<InfoDialog ref="infoRef"></InfoDialog> <InfoDialog ref="infoRef"></InfoDialog>
<!-- passwordDialog --> <!-- passwordDialog -->
<PasswordDialog ref="passwordRef"></PasswordDialog> <PasswordDialog ref="passwordRef"></PasswordDialog>
<!-- versionRegisterDialog -->
<VersionDialog ref="versionRegisterRef"></VersionDialog>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@@ -40,6 +45,7 @@ import { useUserStore } from "@/stores/modules/user";
import { ElMessageBox, ElMessage } from "element-plus"; import { ElMessageBox, ElMessage } from "element-plus";
import InfoDialog from "./InfoDialog.vue"; import InfoDialog from "./InfoDialog.vue";
import PasswordDialog from "./PasswordDialog.vue"; import PasswordDialog from "./PasswordDialog.vue";
import VersionDialog from "@/views/system/versionRegister/index.vue";
import { computed } from "vue"; import { computed } from "vue";
import { Avatar } from "@element-plus/icons-vue"; import { Avatar } from "@element-plus/icons-vue";
import AssemblySize from "./components/AssemblySize.vue"; import AssemblySize from "./components/AssemblySize.vue";
@@ -75,9 +81,12 @@ const logout = () => {
// 打开修改密码和个人信息弹窗 // 打开修改密码和个人信息弹窗
const infoRef = ref<InstanceType<typeof InfoDialog> | null>(null); const infoRef = ref<InstanceType<typeof InfoDialog> | null>(null);
const passwordRef = ref<InstanceType<typeof PasswordDialog> | null>(null); const passwordRef = ref<InstanceType<typeof PasswordDialog> | null>(null);
const versionRegisterRef = ref<InstanceType<typeof VersionDialog> | null>(null);
const openDialog = (ref: string) => { const openDialog = (ref: string) => {
if (ref == "infoRef") infoRef.value?.openDialog(); if (ref == "infoRef") infoRef.value?.openDialog();
if (ref == "passwordRef") passwordRef.value?.openDialog(); if (ref == "passwordRef") passwordRef.value?.openDialog();
if (ref == "versionRegisterRef") versionRegisterRef.value?.openDialog();
}; };
//模式切换 //模式切换
const changeMode = () => { const changeMode = () => {

View File

@@ -0,0 +1,26 @@
// src/stores/modules/mode.ts
import { defineStore } from 'pinia';
// export const useModeStore = defineStore('mode', {
// state: () => ({
// currentMode: '' as string,
// }),
// actions: {
// setCurrentMode(modeName: string) {
// this.currentMode = modeName;
// },
// },
// });
export const useModeStore = defineStore('mode', {
state: () => ({
currentMode: localStorage.getItem('currentMode') || '' as string,
}),
actions: {
setCurrentMode(modeName: string) {
this.currentMode = modeName;
localStorage.setItem('currentMode', modeName); // 保存到 localStorage
},
},
});

View File

@@ -124,11 +124,20 @@ const resetFormContent = () => {
const formRuleRef = ref<FormInstance>() const formRuleRef = ref<FormInstance>()
const rules : Ref<Record<string, Array<FormItemRule>>> = ref({ const rules : Ref<Record<string, Array<FormItemRule>>> = ref({
name :[{required:true,trigger:'blur',message:'菜单名称必填!'}], name :[{required:true,trigger:'blur',message:'菜单名称必填!'}],
path :[{required:true,trigger:'blur',message:'菜单路径必填!'}],
type :[{required:true,trigger:'change',message:'菜单类型必选!'}],
component :[{required:true,trigger:'blur',message:'组件地址必填!'}],
code :[{required:true,trigger:'blur',message:'编码必填!'}] code :[{required:true,trigger:'blur',message:'编码必填!'}]
}) })
watch(() => formContent.value.type, (newVal) => {
if (newVal === 1) {
// 选择按钮时,路由地址和组件地址无需校验
rules.value.path = [];
rules.value.component = [];
} else {
// 其他情况下,路由地址和组件地址需要校验
rules.value.path = [{ required: true, trigger: 'blur', message: '路由地址必填!' }];
rules.value.component = [{ required: true, trigger: 'blur', message: '组件地址必填!' }];
}
});
// 关闭弹窗 // 关闭弹窗
const close = () => { const close = () => {
@@ -155,7 +164,7 @@ const displayPid = computed({
const save = () => { const save = () => {
try { try {
dialogFormRef.value?.validate(async (valid: boolean) => { dialogFormRef.value?.validate(async (valid: boolean) => {
console.log(formContent.value)
if (formContent.value.pid === undefined || formContent.value.pid === null || formContent.value.pid === '') { if (formContent.value.pid === undefined || formContent.value.pid === null || formContent.value.pid === '') {
formContent.value.pid = '0'; formContent.value.pid = '0';
} }

View File

@@ -160,7 +160,6 @@
LoginNameIsShow.value = true LoginNameIsShow.value = true
formContent.value = { ...data } formContent.value = { ...data }
console.log(formContent.value,111);
} else { } else {
IsPasswordShow.value = true IsPasswordShow.value = true

View File

@@ -34,6 +34,7 @@
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import { useAuthStore } from "@/stores/modules/auth"; import { useAuthStore } from "@/stores/modules/auth";
import model from "./tabs/model.vue"; import model from "./tabs/model.vue";
import dashboard from "./tabs/dashboard.vue"; import dashboard from "./tabs/dashboard.vue";
import { onMounted } from "vue"; import { onMounted } from "vue";

View File

@@ -17,7 +17,7 @@
<el-button <el-button
size="small" size="small"
type="primary" type="primary"
@click="handelOpen(item.isActive)" @click="handelOpen(item)"
:disabled="item.isActive == false" :disabled="item.isActive == false"
>进入检测</el-button >进入检测</el-button
> >
@@ -33,7 +33,9 @@
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import { useAuthStore } from "@/stores/modules/auth"; import { useAuthStore } from "@/stores/modules/auth";
import { useModeStore } from "@/stores/modules/mode"; // 引入模式 store
const authStore = useAuthStore(); const authStore = useAuthStore();
const modeStore = useModeStore(); // 使用模式 store
const activeIndex = ref("1-1"); const activeIndex = ref("1-1");
const router = useRouter(); const router = useRouter();
const modeList = [ const modeList = [
@@ -56,8 +58,10 @@ const modeList = [
isActive: false, isActive: false,
}, },
]; ];
const handelOpen = async (isActive: any) => { const handelOpen = async (item: any) => {
await authStore.setShowMenu(); await authStore.setShowMenu();
modeStore.setCurrentMode(item.name); // 将模式名称存入 store
return; return;
if (isActive) { if (isActive) {
router.push({ path: "/static" }); router.push({ path: "/static" });

View File

@@ -6,7 +6,7 @@
<el-divider >检测配置</el-divider> <el-divider >检测配置</el-divider>
<el-row :gutter="24" > <el-row :gutter="24" >
<el-col :span="8"> <el-col :span="8">
<el-form-item label='一键检测方式' prop='autoGenerate' :label-width="100"> <el-form-item label='一键检测方式' prop='autoGenerate' :label-width="125">
<el-select v-model="TestConfigForm.autoGenerate" clearable placeholder="请选择一键检测方式" > <el-select v-model="TestConfigForm.autoGenerate" clearable placeholder="请选择一键检测方式" >
<el-option label="只检测,报告后续手动生成" :value="0"></el-option> <el-option label="只检测,报告后续手动生成" :value="0"></el-option>
<el-option label="检测和生成报告同时进行" :value="1"></el-option> <el-option label="检测和生成报告同时进行" :value="1"></el-option>
@@ -14,12 +14,12 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label='复检最大次数' prop='maxTime' :label-width="100"> <el-form-item label='复检最大次数' prop='maxTime' >
<el-input-number v-model='TestConfigForm.maxTime' :min='1' :max='999' /> <el-input-number v-model='TestConfigForm.maxTime' :min='1' :max='999' />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label='数据处理原则' prop='dataRule' :label-width="100"> <el-form-item label='数据处理原则' prop='dataRule' :label-width="125">
<el-select v-model="TestConfigForm.dataRule" clearable placeholder="请选择数据处理原则" > <el-select v-model="TestConfigForm.dataRule" clearable placeholder="请选择数据处理原则" >
<el-option <el-option
v-for="item in dictStore.getDictData('Data_Rule')" v-for="item in dictStore.getDictData('Data_Rule')"
@@ -31,7 +31,8 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-form :model="RegResForm" ref='dialogFormRef' :rules='rules' >
<el-divider >有效数据配置</el-divider> <el-divider >有效数据配置</el-divider>
<el-row :gutter="24" > <el-row :gutter="24" >
<el-col :span="8"> <el-col :span="8">
@@ -40,22 +41,22 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="实时数据有效组数" prop="realTime" :label-width="125"> <el-form-item label="实时数据有效组数" prop="realTime" :label-width="125" >
<el-input number v-model.number='RegResForm.realTime' placeholder="请输入实时数据有效组数"/> <el-input number v-model.number='RegResForm.realTime' placeholder="请输入实时数据有效组数"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="统计数据有效组数" prop="statistics" :label-width="125"> <el-form-item label="统计数据有效组数" prop="statistics" :label-width="125" >
<el-input number v-model.number='RegResForm.statistics' placeholder="请输入统计数据有效组数"/> <el-input number v-model.number='RegResForm.statistics' placeholder="请输入统计数据有效组数"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="闪变数据有效组数" prop="flicker" :label-width="125"> <el-form-item label="闪变数据有效组数" prop="flicker" :label-width="125" >
<el-input number v-model.number='RegResForm.flicker' placeholder="请输入闪变数据有效组数"/> <el-input number v-model.number='RegResForm.flicker' placeholder="请输入闪变数据有效组数"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-form>
</div> </div>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button type="primary" @click="submitForm()">保存配置</el-button> <el-button type="primary" @click="submitForm()">保存配置</el-button>
@@ -77,14 +78,18 @@
import PqPopup from '@/views/system/dictionary/dictPq/components/pqPopup.vue' import PqPopup from '@/views/system/dictionary/dictPq/components/pqPopup.vue'
import { useDictStore } from '@/stores/modules/dict' import { useDictStore } from '@/stores/modules/dict'
import { useHandleData } from '@/hooks/useHandleData' import { useHandleData } from '@/hooks/useHandleData'
import { onMounted, reactive, ref } from 'vue' import { computed, onMounted, reactive, Ref, ref } from 'vue'
import {type Base } from '@/api/system/base/interface' import {type Base } from '@/api/system/base/interface'
import {type VersionRegister } from '@/api/system/versionRegister/interface' import {type VersionRegister } from '@/api/system/versionRegister/interface'
import {getTestConfig,updateTestConfig } from '@/api/system/base/index' import {getTestConfig,updateTestConfig } from '@/api/system/base/index'
import {getRegRes,updateRegRes } from '@/api/system/versionRegister/index' import {getRegRes,updateRegRes } from '@/api/system/versionRegister/index'
import { ElMessage } from 'element-plus' import { ElMessage, FormItemRule } from 'element-plus'
import { el } from 'element-plus/es/locale' import { useModeStore } from '@/stores/modules/mode'; // 引入模式 store
const modeStore = useModeStore();
const dictStore = useDictStore() const dictStore = useDictStore()
const dialogFormRef = ref()
const mode = ref()
const TestConfigForm = ref<Base.ResTestConfig>({ const TestConfigForm = ref<Base.ResTestConfig>({
id: '', id: '',
autoGenerate: 0, autoGenerate: 0,
@@ -106,23 +111,53 @@ import { el } from 'element-plus/es/locale'
state: 1, //状态 state: 1, //状态
}) })
const RegResForm2 = ref<VersionRegister.Sys_Reg_Res>({ const RegResForm2 = ref<VersionRegister.Sys_Reg_Res>({
waveRecord: 0, id:'',
realTime: 20, waveRecord: 0,
statistics: 5, realTime: 20,
flicker: 1, statistics: 5,
}) flicker: 1,
})
// 定义弹出组件元信息
const rules = computed(() =>{
const baseRules : Ref<Record<string, Array<FormItemRule>>> = ref({
realTime :[
{required:true,trigger:'blur',message:'实时数据有效组数必填!'},
{ pattern: /^[0-9]\d*$/, message: '实时数据有效组数为含0的正整数', trigger: 'blur' }
],
statistics :[
{required:true,trigger:'blur',message:'统计数据有效组数必填!'},
{ pattern: /^[0-9]\d*$/, message: '统计数据有效组数为含0的正整数', trigger: 'blur' }
],
flicker :[
{required:true,trigger:'blur',message:'闪变数据有效组数必填!'},
{ pattern: /^[0-9]\d*$/, message: '闪变数据有效组数为含0的正整数', trigger: 'blur' }
],
});
if(mode.value == '比对式'){
baseRules.value.waveRecord = [
{required:true,trigger:'blur',message:'录波数据有效组数必填!'},
{ pattern: /^[0-9]\d*$/, message: '录波数据有效组数为含0的正整数', trigger: 'blur' }
];
}
return baseRules;
})
const TestConfigList = ref<Base.ResTestConfig>() const TestConfigList = ref<Base.ResTestConfig>()
const RegResList = ref<VersionRegister.ResSys_Reg_Res>() const RegResList = ref<VersionRegister.ResSys_Reg_Res>()
// 初始化时获取 // 初始化时获取
onMounted(async () => { onMounted(async () => {
mode.value =modeStore.currentMode.replace('模块', '');//pinia中获取当前是那个模块进来的临时处理去除模块两字
const response = await getTestConfig() const response = await getTestConfig()
TestConfigForm.value = response.data as unknown as Base.ResTestConfig TestConfigForm.value = response.data as unknown as Base.ResTestConfig
//console.log(mode)
const patternId = dictStore.getDictData('Pattern').find(item=>item.name==='模拟式')?.id const patternId = dictStore.getDictData('Pattern').find(item=>item.name=== mode.value)?.id//获取数据字典中对应的id
RegResForm.value.type = patternId || ''; RegResForm.value.type = patternId || '';
const response2 = await getRegRes(RegResForm.value) const response2 = await getRegRes(RegResForm.value)
RegResForm.value = response2.data as unknown as VersionRegister.ResSys_Reg_Res RegResForm.value = response2.data as unknown as VersionRegister.ResSys_Reg_Res
@@ -131,7 +166,8 @@ const RegResForm2 = ref<VersionRegister.Sys_Reg_Res>({
const submitForm = async () => { const submitForm = async () => {
try { try {
if (TestConfigForm.value.id) { dialogFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
await updateTestConfig(TestConfigForm.value); await updateTestConfig(TestConfigForm.value);
// 提取并传递 4 个参数 // 提取并传递 4 个参数
@@ -145,6 +181,7 @@ const RegResForm2 = ref<VersionRegister.Sys_Reg_Res>({
ElMessage.success({ message: `保存配置成功!` }) ElMessage.success({ message: `保存配置成功!` })
} }
})
} catch (err) { } catch (err) {
console.error('验证过程中出现错误', err) console.error('验证过程中出现错误', err)
} }

View File

@@ -0,0 +1,54 @@
<template>
<el-dialog v-model="dialogVisible" title="程序激活" width="500px" draggable>
<el-form :model="formContent">
<el-form-item label="程序版本号" prop="pid" :label-width="100">
</el-form-item>
<el-form-item label="模拟式模块" prop="pid" :label-width="100">
</el-form-item>
<el-form-item label="数字式模块" prop="pid" :label-width="100">
</el-form-item>
<el-form-item label="比对式模块" prop="pid" :label-width="100">
</el-form-item>
<el-form-item label="序列号" prop="pid" :label-width="100">
</el-form-item>
<el-form-item label="注册码" prop="pid" :label-width="100">
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="dialogVisible = false">激活</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts">
import { ref } from "vue";
const formContent = ref<Function.ResFunction>({
id: '',//资源表Id
pid:'',//节点0为根节点
pids:'',//节点上层所有节点
name: '',//名称
code:'',//资源标识
path:'',//路径
component:'',
icon:undefined as string | undefined, // 图标
sort:100,//排序
type:0,//资源类型0-菜单、1-按钮、2-公共资源、3-服务间调用资源
remark: '',//权限资源描述
state:1,//权限资源状态
})
const dialogVisible = ref(false);
const openDialog = () => {
dialogVisible.value = true;
};
defineExpose({ openDialog });
</script>