This commit is contained in:
GGJ
2025-02-17 08:40:19 +08:00
15 changed files with 63 additions and 144 deletions

View File

@@ -39,13 +39,14 @@ class RequestHttp {
*/
this.service.interceptors.request.use(
(config: CustomAxiosRequestConfig) => {
isFirst = true
const userStore = useUserStore()
// 当前请求不需要显示 loading在 api 服务中通过指定的第三个参数: { loading: false } 来控制
config.loading ?? (config.loading = true)
config.loading && showFullScreenLoading()
if (config.headers && typeof config.headers.set === 'function') {
config.headers.set('Authorization', 'Bearer ' + userStore.accessToken)
config.headers.set('Refresh-Token', userStore.refreshToken)
config.headers.set('Is-Refresh-Token', userStore.isRefreshToken+"")
}
return config
},
@@ -67,11 +68,14 @@ class RequestHttp {
if(data.code === ResultEnum.ACCESSTOKEN_EXPIRED){
// 用长token去换短token
userStore.setAccessToken(userStore.refreshToken)
userStore.setIsRefreshToken(true)
const result = await refreshToken()
if (result) { //获取新token成功的话
// 有新的token后重新请求
userStore.setAccessToken(result.data.accessToken)
userStore.setRefreshToken(result.data.refreshToken)
userStore.setIsRefreshToken(false)
response.config.headers.Authorization = `Bearer ${result.data.accessToken}`//重新请求前需要将更新后的新token更换掉之前无效的token,不然会死循环
const resp = await this.service.request(response.config)
return resp
@@ -84,11 +88,10 @@ class RequestHttp {
console.log("登陆失效")
userStore.setAccessToken('')
userStore.setRefreshToken('')
userStore.setIsRefreshToken(false)
userStore.setUserInfo({ name: '' })
router.replace(LOGIN_URL)
if(data.code != ResultEnum.OVERDUE){//临时处理token失效弹窗多次
ElMessage.error(data.message)
}else if(isFirst){
await router.replace(LOGIN_URL)
if(isFirst){//临时处理token失效弹窗多次
ElMessage.error(data.message)
isFirst = false
}

View File

@@ -84,4 +84,9 @@ export const generateDevReport = (params: Device.ReqDevReportParams) => {
// 装置检测报告下载
export const downloadDevData = (params: Device.ReqDevReportParams) => {
return http.download(`/report/downloadReport`, params)
}
}
export const staticsAnalyse = (params: { planId: string }) => {
return http.download(`/adPlan/analyse?planId=${params.planId}`)
}

View File

@@ -1,10 +1,16 @@
import http from '@/api'
import { type Dict } from '@/api/system/dictionary/interface'
import {c} from "vite/dist/node/types.d-aGj9QkWt";
//获取字典类型
export const getDictTreeList = (params: Dict.ResDictTree) => {
export const getDictTreeByCode = (params: Dict.ResDictTree) => {
const code = params.code || '';
return http.get(`/dictTree/getTreeByCode?code=${code}`)
}
export const getDictTreeByName = (params: Dict.ResDictTree) => {
const name = params.name || '';
return http.get(`/dictTree/getTree?keyword=${name}`, params)
return http.get(`/dictTree/getTreeByName?name=${name}`)
}
//添加字典类型

View File

@@ -77,6 +77,7 @@ const logout = () => {
userStore.setAccessToken("");
userStore.setRefreshToken("");
userStore.setUserInfo({name: ""});
userStore.setIsRefreshToken(false)
dictStore.setDictData([]);
modeStore.setCurrentMode('');
AppSceneStore.setCurrentMode('');

View File

@@ -27,7 +27,9 @@ export interface GlobalState {
/* UserState */
export interface UserState {
token: string;
accessToken: string;
refreshToken: string;
isRefreshToken: boolean;
userInfo: { name: string };
}

View File

@@ -8,6 +8,7 @@ export const useUserStore = defineStore({
state: (): UserState => ({
accessToken: "",
refreshToken: "",
isRefreshToken:false,
userInfo: { name: "admin" },
}),
getters: {},
@@ -19,6 +20,9 @@ export const useUserStore = defineStore({
setRefreshToken(refreshToken: string) {
this.refreshToken = refreshToken;
},
setIsRefreshToken(isRefreshToken: boolean) {
this.isRefreshToken = isRefreshToken;
},
// Set setUserInfo
setUserInfo(userInfo: UserState["userInfo"]) {
this.userInfo = userInfo;

View File

@@ -380,8 +380,8 @@ const open = async (_deviceId: string, chnNum: string, _scriptType: string | nul
chnList = resFormContent.chnList.map((item: { value: string, label: string }) => ({
value: item.value,
// label: item.value
label: item.label == '1' ? `${item.value}` : item.label == '2' ? `${item.value}(不符合)` : `${item.value}`
label: item.value
//label: item.label == '1' ? `${item.value}` : item.label == '2' ? `${item.value}(不符合)` : `${item.value}`
}))
let dataRuleName = dictStore.getDictData('Data_Rule').find(item => item.id == resFormContent.dataRule)?.name

View File

@@ -102,7 +102,7 @@ const columns = reactive<ColumnProps<AuditLog.ReqAuditLogParams>[]>([
},
},
{
prop: 'operate_Type',
prop: 'operateType',
label: '日志类型',
width: 100,
},

View File

@@ -428,10 +428,20 @@ const handleDevTypeChange = (value: string) => {
formContent.value.devVolt = dev.devVolt; // 默认值为1
formContent.value.icdId = dev.icd
formContent.value.power = dev.power
if(dev.name.includes('882B')){
formContent.value.ip = '172.17.102.220'
}else if(dev.name.includes('882A')){
formContent.value.ip = '172.17.102.221'
}else{
formContent.value.ip = '172.17.102.200'
}
} else {
formContent.value.devChns = 1; // 默认值为1
formContent.value.devCurr = 1; // 默认值为1
formContent.value.devVolt = 57.74; // 默认值为1
formContent.value.ip = '172.17.102.200'
}
}

View File

@@ -57,7 +57,7 @@
import { useDictStore } from '@/stores/modules/dict'
import { type ErrorSystem } from '@/api/device/interface/error';
import ErrorSystemDetailTable from '@/views/machine/errorSystem/components/errorSystemDetailTable.vue';
import {getDictTreeList} from '@/api/system/dictionary/dictTree'
import {getDictTreeByCode} from '@/api/system/dictionary/dictTree'
import { type Dict } from '@/api/system/dictionary/interface';
// 定义弹出组件元信息
const dialogFormRef = ref()
@@ -156,31 +156,31 @@ const handleTableDataUpdate = (newTableData: ErrorSystem.ErrorSystemDetail[]) =>
}
// 封装提取第二层节点的逻辑
const loadSecondLevelOptions = async () => {
const dictCode = '误差体系指标项'; // 替换为实际需要的字典代码
const dictCode2 = '脚本-误差'; // 替换为实际需要的字典代码
const dictCode = 'Err_Sys_Items'; // 替换为实际需要的字典代码
const dictCode2 = 'Script_Error'; // 替换为实际需要的字典代码
const resDictTree: Dict.ResDictTree = {
name: dictCode,
name: '',
id: '',
pid: '',
pids: '',
code: '',
code: dictCode,
sort: 0
};
const resDictTree2: Dict.ResDictTree = {
name: dictCode2,
name: '',
id: '',
pid: '',
pids: '',
code: '',
code: dictCode2,
sort: 0
};
// 并行请求两个字典树列表
const [result, result2] = await Promise.all([
getDictTreeList(resDictTree),
getDictTreeList(resDictTree2)
getDictTreeByCode(resDictTree),
getDictTreeByCode(resDictTree2)
]);
const allOptions = convertToOptions(result.data as Dict.ResDictTree[]);

View File

@@ -60,7 +60,7 @@ import { useDictStore } from '@/stores/modules/dict'
import TestScriptDetail from '@/views/machine/testScript/components/testScriptDetail.vue'
import { type TestScript } from '@/api/device/interface/testScript'
import type { Dict } from '@/api/system/dictionary/interface'
import { getDictTreeList } from '@/api/system/dictionary/dictTree'
import { getDictTreeByCode } from '@/api/system/dictionary/dictTree'
import type { CascaderOption } from 'element-plus'
const modeId = ref()
const secondLevelOptions: any[] = []
@@ -123,16 +123,16 @@ const save = () => {
// 打开弹窗,可能是新增,也可能是编辑
const open = async (sign: string, row: any, currentMode: string, id: string) => {
const dictCode = '测试脚本字典表' // 替换为实际需要的字典代码
const dictCode = 'Script_Indicator_Items' // 替换为实际需要的字典代码
const resDictTree: Dict.ResDictTree = {
name: dictCode,
name: '',
id: '',
pid: '',
pids: '',
code: '',
code: dictCode,
sort: 0
}
const result = await getDictTreeList(resDictTree)
const result = await getDictTreeByCode(resDictTree)
const allOptions = convertToOptions(result.data as Dict.ResDictTree[])
secondLevelOptions.push(...(allOptions[0]?.children || []))

View File

@@ -68,7 +68,7 @@ import ImportExcel from "@/components/ImportExcel/index.vue";
import {useDownload} from "@/hooks/useDownload";
import {getTestConfig } from '@/api/system/base/index'
import {type Base } from '@/api/system/base/interface'
import { getBoundPqDevList } from '@/api/plan/plan.ts'
import { getBoundPqDevList ,staticsAnalyse} from '@/api/plan/plan.ts'
// defineOptions({
// name: 'planList'
@@ -394,10 +394,9 @@ const showDeviceOpen = (row: Partial<Plan.ReqPlan> = {}) => {
const myDict = new Map<string, any[]>();
// 引用图表容器
const chartContainer = ref<HTMLElement | null>(null);
let myChart: echarts.ECharts | null = null;
const statisticalAnalysis = async (row: Partial<Plan.ReqPlan> = {}) => {
useDownload(staticsAnalyse,row.name+'分析结果', {planId:row.id}, false,'.xlsx')
// const response = await getTestConfig() as unknown as Base.ResTestConfig
// const maxTime= response.data.maxTime//检测最大次数
// const dev = await getBoundPqDevList({ 'planId': row.id })

View File

@@ -3,7 +3,7 @@
<ProTable
ref='proTable'
:columns='columns'
:request-api='getDictTreeList'
:request-api='getDictTreeByName'
:pagination="false"
>
@@ -29,7 +29,7 @@
import {useDictStore} from '@/stores/modules/dict'
import {useHandleData} from '@/hooks/useHandleData'
import {
getDictTreeList,
getDictTreeByName,
deleteDictTree,
} from '@/api/system/dictionary/dictTree'
import { reactive, ref } from 'vue'