if (query.indexWorkCode) {
this.queryParams.workCode = query.indexWorkCode
}
else if (query.fxName) {
// 风险总览跳转获取参数
let str = this.\$route.query.fxName
let index1 = str.indexOf('(')
let index2 = str.indexOf(')')
this.queryParams.workCode = str.substring(index1 + 1, index2)
} else if (query.fxTableWorkCode) {
this.queryParams.workCode = query.fxTableWorkCode
}
else if (query.unusualId) {
this.queryParams.workCode = query.unusualId
}
else if (query.leaderCode) {
this.queryParams.workCode = query.leaderCode
}
else if (query.logCode) {
this.queryParams.workCode = query.logCode
}
else if (query.leaderEndTime) {
this.queryParams.endTime = query.leaderEndTime
}
else if (query.leaderStartTime) {
this.queryParams.startTime = query.leaderStartTime
}
else if (query.logStartTime) {
this.queryParams.startTime = query.logStartTime
}
else if (query.logEndTime) {
this.queryParams.endTime = query.logEndTime
}
const queryParamKeys = {
indexWorkCode: "workCode",
fxName: (str) => {
let index1 = str.indexOf("(");
let index2 = str.indexOf(")");
return str.substring(index1 + 1, index2);
},
fxTableWorkCode: "workCode",
unusualId: "workCode",
leaderCode: "workCode",
logCode: "workCode",
leaderEndTime: "endTime",
leaderStartTime: "startTime",
logStartTime: "startTime",
logEndTime: "endTime",
};
for (let queryKey in this.$route.query) {
if (queryKey in queryParamKeys) {
let queryParamsKey = queryParamKeys[queryKey];
let queryParamsValue =
typeof queryParamKeys[queryKey] === "function"
? queryParamKeys[queryKey](this.$route.query\[queryKey])
: this.\$route.query\[queryKey];
this.queryParams\[queryParamsKey] = queryParamsValue;
}
}
可以将所有的查询参数和对应的键名存储到一个对象中,然后遍历这个对象,判断当前查询参数是否存在于这个对象中,如果存在,则将对应的值赋值给`this.queryParams`。对于需要截取的`fxName`参数,可以在对象中将其对应的值设为一个函数,该函数接受一个字符串参数,返回需要赋值给`workCode`的值。
改写后的代码如下:
const queryParamKeys = {
indexWorkCode: "workCode",
fxName: (str) => {
let index1 = str.indexOf("(");
let index2 = str.indexOf(")");
return str.substring(index1 + 1, index2);
},
fxTableWorkCode: "workCode",
unusualId: "workCode",
leaderCode: "workCode",
logCode: "workCode",
leaderEndTime: "endTime",
leaderStartTime: "startTime",
logStartTime: "startTime",
logEndTime: "endTime",
};
for (let queryKey in this.$route.query) {
if (queryKey in queryParamKeys) {
let queryParamsKey = queryParamKeys[queryKey];
let queryParamsValue =
typeof queryParamKeys[queryKey] === "function"
? queryParamKeys[queryKey](this.$route.query[queryKey])
: this.$route.query[queryKey];
this.queryParams[queryParamsKey] = queryParamsValue;
}
}
这样,就可以将原来的多个if语句简化为一个循环语句,代码更加简洁易懂。需要注意的是,如果存在多个查询参数对应同一个键名(例如fxName和fxTableWorkCode都对应workCode),则后面的查询参数会覆盖前面的查询参数。如果需要保留所有查询参数,可以将this.queryParams[queryParamsKey]改为一个数组,将所有查询参数值存储到这个数组中。
const queryParamKeys = {
indexWorkCode: "workCode",
fxName: (str) => {
let index1 = str.indexOf("(");
let index2 = str.indexOf(")");
return str.substring(index1 + 1, index2);
},
fxTableWorkCode: "workCode",
unusualId: "workCode",
leaderCode: "workCode",
logCode: "workCode",
leaderEndTime: "endTime",
leaderStartTime: "startTime",
logStartTime: "startTime",
logEndTime: "endTime",
};
for (let queryKey in this.$route.query) {
if (queryKey in queryParamKeys) {
let queryParamsKey = queryParamKeys[queryKey];
let queryParamsValue =
typeof queryParamKeys[queryKey] === "function"
? queryParamKeys[queryKey](this.$route.query\[queryKey])
: this.\$route.query\[queryKey];
if (Array.isArray(this.queryParams\[queryParamsKey])) {
this.queryParams\[queryParamsKey].push(queryParamsValue);
} else if (this.queryParams\[queryParamsKey]) {
this.queryParams\[queryParamsKey] = \[this.queryParams\[queryParamsKey], queryParamsValue];
} else {
this.queryParams\[queryParamsKey] = queryParamsValue;
}
}
}
如果需要保留所有查询参数的值,可以将this.queryParams[queryParamsKey]改为一个数组,将所有查询参数值存储到这个数组中。这样,如果存在多个查询参数对应同一个键名,就可以将所有的查询参数值都保存下来,而不是只保留最后一个查询参数的值。
改写后的代码如下:
const queryParamKeys = {
indexWorkCode: "workCode",
fxName: (str) => {
let index1 = str.indexOf("(");
let index2 = str.indexOf(")");
return str.substring(index1 + 1, index2);
},
fxTableWorkCode: "workCode",
unusualId: "workCode",
leaderCode: "workCode",
logCode: "workCode",
leaderEndTime: "endTime",
leaderStartTime: "startTime",
logStartTime: "startTime",
logEndTime: "endTime",
};
for (let queryKey in this.$route.query) {
if (queryKey in queryParamKeys) {
let queryParamsKey = queryParamKeys[queryKey];
let queryParamsValue =
typeof queryParamKeys[queryKey] === "function"
? queryParamKeys[queryKey](this.$route.query[queryKey])
: this.$route.query[queryKey];
if (Array.isArray(this.queryParams[queryParamsKey])) {
this.queryParams[queryParamsKey].push(queryParamsValue);
} else if (this.queryParams[queryParamsKey]) {
this.queryParams[queryParamsKey] = [this.queryParams[queryParamsKey], queryParamsValue];
} else {
this.queryParams[queryParamsKey] = queryParamsValue;
}
}
}
这样,如果存在多个查询参数对应同一个键名,就会将所有的查询参数值都保存到一个数组中。如果只有一个查询参数对应一个键名,仍然会将其保存到一个普通变量中。
我项目中不存在,是不同的页面跳转到该页面,