Commit 2046a987 by bingobo

修改项目档案库-上传文件类型限制

1 parent ed9f8874
...@@ -12,16 +12,20 @@ ...@@ -12,16 +12,20 @@
"@wangeditor/editor-for-vue": "^1.0.2", "@wangeditor/editor-for-vue": "^1.0.2",
"axios": "^1.6.2", "axios": "^1.6.2",
"core-js": "^3.8.3", "core-js": "^3.8.3",
"crypto-js": "^4.2.0",
"docx-preview": "^0.3.2", "docx-preview": "^0.3.2",
"echarts": "^5.5.0", "echarts": "^5.5.0",
"el-table-horizontal-scroll": "^1.2.5", "el-table-horizontal-scroll": "^1.2.5",
"element-ui": "^2.15.14", "element-ui": "^2.15.14",
"gm-crypt": "^0.0.2",
"jquery": "^3.7.1", "jquery": "^3.7.1",
"js-cookie": "^3.0.5", "js-cookie": "^3.0.5",
"js-md5": "^0.8.3",
"jszip": "^3.10.1", "jszip": "^3.10.1",
"mammoth": "^1.8.0", "mammoth": "^1.8.0",
"moment": "^2.30.1", "moment": "^2.30.1",
"scss": "^0.2.4", "scss": "^0.2.4",
"sm-crypto": "^0.3.13",
"util": "^0.12.5", "util": "^0.12.5",
"vue": "^2.7.16", "vue": "^2.7.16",
"vue-cli": "^2.9.6", "vue-cli": "^2.9.6",
...@@ -5458,6 +5462,12 @@ ...@@ -5458,6 +5462,12 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/crypto-js": {
"version": "4.2.0",
"resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz",
"integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==",
"license": "MIT"
},
"node_modules/css-declaration-sorter": { "node_modules/css-declaration-sorter": {
"version": "6.4.1", "version": "6.4.1",
"resolved": "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", "resolved": "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz",
...@@ -7686,6 +7696,15 @@ ...@@ -7686,6 +7696,15 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/gm-crypt": {
"version": "0.0.2",
"resolved": "https://registry.npmmirror.com/gm-crypt/-/gm-crypt-0.0.2.tgz",
"integrity": "sha512-eg3EaPQYCwWI7UNMvV4ReHD4rR1mtegDDyK80nr49FKw3PgyvVCZ44wIeqA88ITvjIVC3mT/8ZZG0qvH701LzA==",
"license": "MIT",
"dependencies": {
"base64-js": "^1.3.0"
}
},
"node_modules/gopd": { "node_modules/gopd": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz",
...@@ -9041,6 +9060,12 @@ ...@@ -9041,6 +9060,12 @@
"node": ">=14" "node": ">=14"
} }
}, },
"node_modules/js-md5": {
"version": "0.8.3",
"resolved": "https://registry.npmmirror.com/js-md5/-/js-md5-0.8.3.tgz",
"integrity": "sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ==",
"license": "MIT"
},
"node_modules/js-message": { "node_modules/js-message": {
"version": "1.0.7", "version": "1.0.7",
"resolved": "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz", "resolved": "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz",
...@@ -13204,6 +13229,21 @@ ...@@ -13204,6 +13229,21 @@
"slate": ">=0.65.3" "slate": ">=0.65.3"
} }
}, },
"node_modules/sm-crypto": {
"version": "0.3.13",
"resolved": "https://registry.npmmirror.com/sm-crypto/-/sm-crypto-0.3.13.tgz",
"integrity": "sha512-ztNF+pZq6viCPMA1A6KKu3bgpkmYti5avykRHbcFIdSipFdkVmfUw2CnpM2kBJyppIalqvczLNM3wR8OQ0pT5w==",
"license": "MIT",
"dependencies": {
"jsbn": "^1.1.0"
}
},
"node_modules/sm-crypto/node_modules/jsbn": {
"version": "1.1.0",
"resolved": "https://registry.npmmirror.com/jsbn/-/jsbn-1.1.0.tgz",
"integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==",
"license": "MIT"
},
"node_modules/snabbdom": { "node_modules/snabbdom": {
"version": "3.6.2", "version": "3.6.2",
"resolved": "https://registry.npmmirror.com/snabbdom/-/snabbdom-3.6.2.tgz", "resolved": "https://registry.npmmirror.com/snabbdom/-/snabbdom-3.6.2.tgz",
...@@ -20898,6 +20938,11 @@ ...@@ -20898,6 +20938,11 @@
"randomfill": "^1.0.4" "randomfill": "^1.0.4"
} }
}, },
"crypto-js": {
"version": "4.2.0",
"resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz",
"integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
},
"css-declaration-sorter": { "css-declaration-sorter": {
"version": "6.4.1", "version": "6.4.1",
"resolved": "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", "resolved": "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz",
...@@ -22591,6 +22636,14 @@ ...@@ -22591,6 +22636,14 @@
"slash": "^3.0.0" "slash": "^3.0.0"
} }
}, },
"gm-crypt": {
"version": "0.0.2",
"resolved": "https://registry.npmmirror.com/gm-crypt/-/gm-crypt-0.0.2.tgz",
"integrity": "sha512-eg3EaPQYCwWI7UNMvV4ReHD4rR1mtegDDyK80nr49FKw3PgyvVCZ44wIeqA88ITvjIVC3mT/8ZZG0qvH701LzA==",
"requires": {
"base64-js": "^1.3.0"
}
},
"gopd": { "gopd": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz",
...@@ -23552,6 +23605,11 @@ ...@@ -23552,6 +23605,11 @@
"resolved": "https://registry.npmmirror.com/js-cookie/-/js-cookie-3.0.5.tgz", "resolved": "https://registry.npmmirror.com/js-cookie/-/js-cookie-3.0.5.tgz",
"integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==" "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw=="
}, },
"js-md5": {
"version": "0.8.3",
"resolved": "https://registry.npmmirror.com/js-md5/-/js-md5-0.8.3.tgz",
"integrity": "sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ=="
},
"js-message": { "js-message": {
"version": "1.0.7", "version": "1.0.7",
"resolved": "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz", "resolved": "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz",
...@@ -26717,6 +26775,21 @@ ...@@ -26717,6 +26775,21 @@
"is-plain-object": "^5.0.0" "is-plain-object": "^5.0.0"
} }
}, },
"sm-crypto": {
"version": "0.3.13",
"resolved": "https://registry.npmmirror.com/sm-crypto/-/sm-crypto-0.3.13.tgz",
"integrity": "sha512-ztNF+pZq6viCPMA1A6KKu3bgpkmYti5avykRHbcFIdSipFdkVmfUw2CnpM2kBJyppIalqvczLNM3wR8OQ0pT5w==",
"requires": {
"jsbn": "^1.1.0"
},
"dependencies": {
"jsbn": {
"version": "1.1.0",
"resolved": "https://registry.npmmirror.com/jsbn/-/jsbn-1.1.0.tgz",
"integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A=="
}
}
},
"snabbdom": { "snabbdom": {
"version": "3.6.2", "version": "3.6.2",
"resolved": "https://registry.npmmirror.com/snabbdom/-/snabbdom-3.6.2.tgz", "resolved": "https://registry.npmmirror.com/snabbdom/-/snabbdom-3.6.2.tgz",
...@@ -11,16 +11,20 @@ ...@@ -11,16 +11,20 @@
"@wangeditor/editor-for-vue": "^1.0.2", "@wangeditor/editor-for-vue": "^1.0.2",
"axios": "^1.6.2", "axios": "^1.6.2",
"core-js": "^3.8.3", "core-js": "^3.8.3",
"crypto-js": "^4.2.0",
"docx-preview": "^0.3.2", "docx-preview": "^0.3.2",
"echarts": "^5.5.0", "echarts": "^5.5.0",
"el-table-horizontal-scroll": "^1.2.5", "el-table-horizontal-scroll": "^1.2.5",
"element-ui": "^2.15.14", "element-ui": "^2.15.14",
"gm-crypt": "^0.0.2",
"jquery": "^3.7.1", "jquery": "^3.7.1",
"js-cookie": "^3.0.5", "js-cookie": "^3.0.5",
"js-md5": "^0.8.3",
"jszip": "^3.10.1", "jszip": "^3.10.1",
"mammoth": "^1.8.0", "mammoth": "^1.8.0",
"moment": "^2.30.1", "moment": "^2.30.1",
"scss": "^0.2.4", "scss": "^0.2.4",
"sm-crypto": "^0.3.13",
"util": "^0.12.5", "util": "^0.12.5",
"vue": "^2.7.16", "vue": "^2.7.16",
"vue-cli": "^2.9.6", "vue-cli": "^2.9.6",
......
/** /**
* 系统配置文件(打包后也可进行更改) * 系统配置文件(打包后也可进行更改)
*/ */
const isOnline = false // 是否是线上环境
const nanRuiIp = '25.66.215.209'
const localIp = '192.168.0.110:18088'
const zhiJieLocalIp = '192.168.0.109:30478'
const otherIp = '10.4.34.182'
const sqlXssValidate = [
// SQL 关键字(不区分大小写)
"--", // SQL注释符
"select", // 'SELECT查询',
"insert", // '插入操作',
"update", // '更新操作',
"delete", // '删除操作',
"drop", // '删除对象',
"alter", // '修改对象',
"create", // '创建对象',
"truncate", // '截断表',
"union", // '联合查询',
"exec", // '执行命令',
"declare", // '变量声明',
"execute", // '执行存储过程',
"master", // '主数据库操作',
"backup", // '备份操作',
"executexp_cmdshell", // '系统命令执行'
'console',
'alert', // XSS攻击
'script', // XSS攻击
'javascript:', // XSS攻击
'onload=', // XSS攻击
'onerror=', // XSS攻击
'onclick=', // XSS攻击
'onmouseover=', // XSS攻击
'eval(', // XSS攻击
// 其他可能的 XSS 攻击
'document.cookie', // 访问 cookie
'window.location', // 访问窗口位置
'window.alert', // 弹出警告
'window.eval', // 执行代码
'window.open', // 打开新窗口
'window.close', // 关闭窗口
'innerHTML', // 直接操作 HTML
'outerHTML', // 直接操作 HTML
'src=', // 可能的恶意脚本源
'href=', // 可能的恶意链接
]
const SystemConfig = { const SystemConfig = {
// true是加密 false是不加密
ENCRYPT: true,
// 请求超时时间
NETWORK_TIMEOUT: 300000,
PUBLIC_PATH: '/api', PUBLIC_PATH: '/api',
VUE_APP_GET_USER: 'http://25.66.215.209/gateway/getUser', // 南瑞获取userinfo VUE_APP_GET_USER: `http://${nanRuiIp}/gateway/getUser`, // 南瑞获取userinfo
VUE_APP_OPEN_OTHER_URL: 'http://10.4.34.182/isc_sso/login?service=http%3A%2F%2F20.1.39.51%3A20888%2Fpmp_irs%2F%23%2F', VUE_APP_OPEN_OTHER_URL: `http://${otherIp}/isc_sso/login?service=http%3A%2F%2F20.1.39.51%3A20888%2Fpmp_irs%2F%23%2F`,
// VUE_APP_BASE_URL: "http://25.66.215.209/tools", // 南瑞新ip VUE_APP_BASE_URL: isOnline ? `http://${nanRuiIp}/tools` : `http://${localIp}/tools`, // 南瑞新ip
// VUE_APP_ZJ_IFRAME: "http://25.66.215.209/arch" // 南瑞新ip VUE_APP_ZJ_IFRAME: isOnline ? `http://${nanRuiIp}/arch` : `http://${zhiJieLocalIp}/arch`, // 南瑞新ip
VUE_APP_BASE_URL: "http://192.168.0.112:18088/tools", VUE_APP_MESSAGE_URL: `http://${nanRuiIp}`, // 跳转其他中心 postmessage 智捷项目需要
VUE_APP_ZJ_IFRAME: "http://localhost:30478/arch", /* 启用远程菜单 */
VUE_APP_MESSAGE_URL: "http://25.66.215.209", // 跳转其他中心 postmessage 智捷项目需要 VUE_APP_MENUAUTH_FLAG: isOnline, // 智捷项目需要
VUE_APP_MENUAUTH_FLAG: true, // 智捷项目需要
// 验证文本的防抖时间
VUE_APP_VALIDATE_DEBOUNCE_TIME: 300,
VUE_APP_INPUT_MAX_LENGTH: 50,
VUE_APP_TEXTAREA_MAX_LENGTH: 100,
VUE_APP_SQL_XSS_VALIDATE: [
// SQL 关键字(不区分大小写)
"--", // SQL注释符
"select", // 'SELECT查询',
"insert", // '插入操作',
"update", // '更新操作',
"delete", // '删除操作',
"drop", // '删除对象',
"alter", // '修改对象',
"create", // '创建对象',
"truncate", // '截断表',
"union", // '联合查询',
"exec", // '执行命令',
"declare", // '变量声明',
"execute", // '执行存储过程',
"master", // '主数据库操作',
"backup", // '备份操作',
"executexp_cmdshell", // '系统命令执行'
'console',
'alert', // XSS攻击
'script', // XSS攻击
'javascript:', // XSS攻击
'onload=', // XSS攻击
'onerror=', // XSS攻击
'onclick=', // XSS攻击
'onmouseover=', // XSS攻击
'eval(', // XSS攻击
// 其他可能的 XSS 攻击
'document.cookie', // 访问 cookie
'window.location', // 访问窗口位置
'window.alert', // 弹出警告
'window.eval', // 执行代码
'window.open', // 打开新窗口
'window.close', // 关闭窗口
'innerHTML', // 直接操作 HTML
'outerHTML', // 直接操作 HTML
'src=', // 可能的恶意脚本源
'href=', // 可能的恶意链接
],
VUE_APP_INPUT_VALIDATE: [
...sqlXssValidate,
// 特殊字符
"?", ";", "@", "#", "$", "%", "^", "&", "*", "(", ")", "+", "-", "=", "|", "<", ".", ">"
// "'", // 单引号
// "''", // 双单引号
],
VUE_APP_TEXTAREA_VALIDATE: [
...sqlXssValidate,
// 特殊字符
"?", ";", "@", "#", "$", "%", "^", "&", "*", "(", ")", "+", "-", "=", "|", "<", ".", ">"
// "'", // 单引号
// "''", // 双单引号
],
}; };
...@@ -4,35 +4,47 @@ ...@@ -4,35 +4,47 @@
<router-link to="/">Home</router-link> | <router-link to="/">Home</router-link> |
<router-link to="/about">About</router-link> <router-link to="/about">About</router-link>
</nav> --> </nav> -->
<router-view/> <router-view />
</div> </div>
</template> </template>
<script> <script>
// import './assets/bootstrap/bootstrap.min.css' // import './assets/bootstrap/bootstrap.min.css'
import axios from 'axios'; // import { createInputValidator } from '@/utils/pageInputValidate.js';
import { createDefaultValidator } from '@/utils/inputvalidate.js';
export default { export default {
data() { data() {
return{ return {
wholeRoutes: {} wholeRoutes: {},
} validatorHandler: null
};
}, },
async created() { async created() {},
mounted() {
// 创建验证处理器
this.validatorHandler = createDefaultValidator(this, {
inputMaxLength: SystemConfig.VUE_APP_INPUT_MAX_LENGTH,
textareaMaxLength: SystemConfig.VUE_APP_TEXTAREA_MAX_LENGTH,
warningMessage: '已过滤非法字符',
debounceWait: SystemConfig.VUE_APP_VALIDATE_DEBOUNCE_TIME
});
// 添加全局事件监听
window.addEventListener('input', this.validatorHandler);
}, },
methods: { beforeDestroy() {
// 移除事件监听
if (this.validatorHandler) {
window.removeEventListener('input', this.validatorHandler);
}
}, },
destroyed(){ destroyed() {
console.log('destroyed11111111'); console.log("destroyed11111111");
} },
} };
// document.cookie = "joker=dwwq12"; // document.cookie = "joker=dwwq12";
</script> </script>
<style> <style>
#app { #app {
font-family: Avenir, Helvetica, Arial, sans-serif; font-family: Avenir, Helvetica, Arial, sans-serif;
...@@ -41,11 +53,7 @@ export default { ...@@ -41,11 +53,7 @@ export default {
height: 100%; height: 100%;
text-align: center; text-align: center;
} }
body .el-table th.gutter{ body .el-table th.gutter {
display: table-cell!important; display: table-cell !important;
} }
</style> </style>
...@@ -100,7 +100,6 @@ export function ossuploadStr(params) { ...@@ -100,7 +100,6 @@ export function ossuploadStr(params) {
} }
//多文件上传(不覆盖原文件) //多文件上传(不覆盖原文件)
export function ossuploadStrAddFiles(params) { export function ossuploadStrAddFiles(params) {
// /oss/multipleFilesBatchUpload
return post(`${ARCH_EVALUATION}/oss/multipleFilesBatchUpload`, params) return post(`${ARCH_EVALUATION}/oss/multipleFilesBatchUpload`, params)
} }
//浏览 //浏览
......
...@@ -10,6 +10,9 @@ import './styles/common.scss' ...@@ -10,6 +10,9 @@ import './styles/common.scss'
import '@/assets/icon/iconfont.css' import '@/assets/icon/iconfont.css'
import initDirective from './directive' import initDirective from './directive'
// import pageInputValidate from './pageInputValidate.js';
import horizontalScroll from 'el-table-horizontal-scroll' import horizontalScroll from 'el-table-horizontal-scroll'
import { postRequest, postRequestShared } from '@/api/index' import { postRequest, postRequestShared } from '@/api/index'
...@@ -19,6 +22,28 @@ Vue.prototype.$echarts = echarts ...@@ -19,6 +22,28 @@ Vue.prototype.$echarts = echarts
Vue.config.productionTip = false Vue.config.productionTip = false
Vue.prototype.$postRequest = postRequest Vue.prototype.$postRequest = postRequest
Vue.prototype.$postRequestShared = postRequestShared Vue.prototype.$postRequestShared = postRequestShared
// 全局方法:过滤特殊字符和表情
Vue.prototype.validForbid = function (value) { value = value.replace(/[`~!@#$%^&*()_\-+=<>?:"{}|,./;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、]/g, '').replace(/\s/g, ""); return value; }
Vue.prototype.$validForbid = function(value) {
if (!value) return '';
console.log('$validForbid-输入', value);
// 过滤特殊字符
value = value.replace(/[`~!@#$%^&*()_\-+=<>?:"{}|,./;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:""【】、;'',。、]/g, '')
// 过滤空格
.replace(/\s/g, '')
// 过滤emoji表情
.replace(/[\uD83C-\uDBFF\uDC00-\uDFFF]+/g, '');
console.log('$validForbid-输出', value);
return value;
}
Vue.use(horizontalScroll) Vue.use(horizontalScroll)
Vue.use(ElementUI) Vue.use(ElementUI)
Date.prototype.format = function (fmt) { Date.prototype.format = function (fmt) {
......
...@@ -364,7 +364,7 @@ const getIscInfoAndRoutes = async (next) => { ...@@ -364,7 +364,7 @@ const getIscInfoAndRoutes = async (next) => {
sessionStorage.setItem("userloginname", res.data.content.loginName); sessionStorage.setItem("userloginname", res.data.content.loginName);
const routes = res.data.content.menuList.filter(item => item.name === '后评估管控中心') const routes = res.data.content.menuList.filter(item => item.name === '后评估管控中心')
const resRoutes = routes[0].children; const resRoutes = routes[0].children;
console.log(123123, resRoutes); // console.log(123123, resRoutes);
const souYeRoute = resRoutes.filter((item) => item.name === "首页"); const souYeRoute = resRoutes.filter((item) => item.name === "首页");
const restRoutes = resRoutes.filter((item) => item.name !== "首页"); const restRoutes = resRoutes.filter((item) => item.name !== "首页");
console.log(2222, souYeRoute, restRoutes); console.log(2222, souYeRoute, restRoutes);
...@@ -379,6 +379,10 @@ const getIscInfoAndRoutes = async (next) => { ...@@ -379,6 +379,10 @@ const getIscInfoAndRoutes = async (next) => {
code: 200, code: 200,
message: "OK", message: "OK",
content: { content: {
// loginName: "wangmeiling",
// name: "王美玲",
// loginName: "mengdejian",
// name: "孟德建",
loginName: "weizheng", loginName: "weizheng",
name: "魏征", name: "魏征",
department: "数据运营中心", department: "数据运营中心",
......
import Vue from 'vue';
import axios from 'axios';
// import router from '../router/index.js';
import { Message, MessageBox, Loading } from 'element-ui';
import { SM4Util } from "@/utils/sm4";
import md5 from 'js-md5';
axios.defaults.timeout = SystemConfig.NETWORK_TIMEOUT; // 300000;
axios.defaults.baseURL = SystemConfig.VUE_APP_BASE_URL;
axios.defaults.withCredentials = true
function encryptStringBySM4_CBC(str) {//使用sm4-cbc算法给字符串加密
const sm4 = new SM4Util();
const encryptString = sm4.encryptCustom_CBC(str, 'ZkR_SiNoSOFT=568', 'GJwsXX_BzW=gJWJW');
return encryptString;
}
function decryptStringBySM4_CBC(str) {//使用sm4-cbc算法给字符串解密
const sm4 = new SM4Util();
const decryptString = sm4.decryptCustom_CBC(str, 'ZkR_SiNoSOFT=568', 'GJwsXX_BzW=gJWJW');
return decryptString;
}
let loadingInstance
//http 请求拦截器
axios.interceptors.request.use(config => {
if (config.url.indexOf('oss/upload') != '-1' || config.url.indexOf('oss/uploadStr') != '-1') {
loadingInstance = Loading.service({
lock: true,
text: '文件上传中,请耐心等待...',
// background: 'rgba(0, 0, 0, 0.7)'
});
}
// else{
// loadingInstance = Loading.service({
// lock: true,
// text: '加载中...',
// background: 'rgba(0, 0, 0, 0.7)'
// });
// }
// console.log(1111111111, sessionStorage.getItem('authorCName'));
// console.log('url--', config.url);
// console.log('userid-sessionsss', sessionStorage.getItem('userid'));
// console.log('username-sessionsss', sessionStorage.getItem('username'));
// console.log('userloginname-sessionsss', sessionStorage.getItem('userloginname'));
// config.headers['X-USER-ID'] = sessionStorage.getItem('userid');
config.headers['X-USER-CNAME'] = encodeURIComponent(sessionStorage.getItem('username')); // 请求头中传递中文字符
config.headers['X-USER-NAME'] = sessionStorage.getItem('userloginname');
// config.headers['X-USER'] = sessionStorage.getItem('author');
// config.headers['X-USER-NAME'] = sessionStorage.getItem('authorName')
// config.headers['X-USER-CNAME'] = encodeURIComponent(sessionStorage.getItem('authorCName')) // 请求头中传递中文字符
if (config.url.indexOf('oss/downloadObject') != '-1') {
config.headers["Content-Type"] = 'application/x-www-form-urlencoded'
config.headers['responseType'] = 'blob'
}
// if (SystemConfig.ENCRYPT === '1') {
// if (config.method == 'post' && config.data) {
// const isJSON = typeof config.data === 'object';
// if (!isJSON) {
// // 如果不是JSON,可以在这里处理或者抛出错误
// console.error('请求参数不是JSON格式!');
// } else {
// let encryptString = encryptStringBySM4_CBC(JSON.stringify(config.data));
// let md5Data = md5(JSON.stringify(config.data))
// config.data = { 'params': encryptString };
// config.headers['md5'] = md5Data
// }
// }
// }
// config.headers.token = JSON.parse(localStorage.getItem('token')).token;
// if(config.method == "post"){
// let encryptString = encryptStringBySM4_CBC(JSON.stringify(config.data));
// config.data = encryptString;
// console.log(config.data);
// }
return config;
},
error => {
return Promise.reject(error);
}
);
function dealCode(code,response) {
if (code == 200) {
return response;
} else if (code == 403) {
// Vue.prototype.$alert('存在越权操作,请退出后重新登录', '提示', {
// confirmButtonText: '退出',
// callback: action => {
// loginOut().then(() => {
// let uesrInfo = JSON.parse(localStorage.getItem('userDto'))
// let params = {
// userId: uesrInfo.id,
// organizationId: uesrInfo.orgId,
// userCode: uesrInfo.userCode,
// userName: uesrInfo.name,
// }
// localStorage.clear()
// sessionStorage.clear()
// store.dispatch('tagsView/delAllViews')
// if(router.name!='login'){
// router.replace({ path: "/login" });
// }
// // window.location.reload();
// })
// }
// });;
} else if (code == 402 || code == 401) {
// store.dispatch('app/clearCancel');
// // loginOut().then(res => {
// localStorage.clear()
// sessionStorage.clear()
// Vue.prototype.$message.error('登录状态过期或者没有token,请重新登录!');
// // router.push({ path: "/login" });
// // window.location.reload();
// if(router.name!='login'){
// router.replace({ path: "/login" });
// }
// // });
} else if (code == 507 || code == 502) {
// console.log('502', response)
// if(response.data.msg){
// Vue.prototype.$message.error(response.data.msg);
// } else {
// Vue.prototype.$message.error('登录状态过期或者没有token,请重新登录!');
// }
// sessionStorage.clear()
// localStorage.clear()
// if(router.name!='login'){
// router.replace({ path: "/login" });
// }
} else if (code == 500) {
console.log('500')
// Vue.prototype.$message({message:response.data.msg,type:'error', customClass:'messageIndex_'});
return response;
} else {
return response;
}
}
//响应拦截器即异常处理
axios.interceptors.response.use(response => {
if (loadingInstance) {
loadingInstance.close();
}
// let code = response.data.code;
let code;
if (SystemConfig.ENCRYPT === '1' && !isBlob(response.data)) {
let data = JSON.parse(decryptStringBySM4_CBC(response.data))
code = data.code || ''
return dealCode(code,response)
}else {
code = response.data.code || '';
return dealCode(code,response)
}
// if (code == 200) {
// return response;
// } else if (code == 507 || code == 502) {
// // Vue.prototype.$message.error('登录状态过期或者没有token,请重新登录!');
// // sessionStorage.clear()
// // router.push({path:'/login'})
// } else if (code == 500) {
// // Vue.prototype.$message({message:response.data.msg,type:'error', customClass:'messageIndex_'});
// return response;
// } else {
// return response;
// }
}, err => {
if (loadingInstance) {
loadingInstance.close();
Message.error('上传失败')
}
if (err && err.response) {
console.log('连接到服务器失败');
} else {
console.log('未知错误');
// Message.error('连接到服务器失败')
}
return Promise.reject('err');
});
export function get(url, params = {}) {
return new Promise((resolve, reject) => {
axios.get(url, { params: params }).then(response => {
if (response) {
resolve(response);
}
}).catch(err => {
reject(err);
})
})
}
export function post(url, data = {}) {
console.log('url', url);
return new Promise((resolve, reject) => {
axios.post(url, data).then(response => {
if (response) {
try {
// console.log('response', response, SystemConfig.ENCRYPT);
// if (SystemConfig.ENCRYPT === '1') {
// let jsonObject = JSON.parse(decryptStringBySM4_CBC(response.data))
// resolve(jsonObject)
// }else {
// }
resolve(response.data);
} catch (error) {
console.error('解析错误:', error.message);
}
}
// if (response) {
// resolve(response.data);
// }
}, err => {
reject(err);
})
})
}
export function download(url, data = {}) {
return new Promise((resolve, reject) => {
axios.post(url, data, { responseType: 'blob' }).then(response => {
if (response) {
resolve(response.data);
}
}, err => {
reject(err);
})
})
}
import Vue from 'vue'; // import Vue from 'vue';
import axios from 'axios'; import axios from 'axios';
// import { sm4 } from 'sm-crypto';
// import CryptoJS from 'crypto-js';
import gmCrypt from 'gm-crypt'
// import router from '../router/index.js'; // import router from '../router/index.js';
import { Message, MessageBox, Loading } from 'element-ui'; import { Message, MessageBox, Loading } from 'element-ui';
import { SM4Util } from "./sm4"; // import { SM4Util } from "@/utils/sm4";
import md5 from 'js-md5';
import { isBlob } from '@/utils/index.js'
axios.defaults.timeout = 300000; axios.defaults.timeout = SystemConfig.NETWORK_TIMEOUT; // 300000;
axios.defaults.baseURL = SystemConfig.VUE_APP_BASE_URL; axios.defaults.baseURL = SystemConfig.VUE_APP_BASE_URL;
axios.defaults.withCredentials = true axios.defaults.withCredentials = true
function encryptStringBySM4_CBC(str) {//使用sm4-cbc算法给字符串加密 const SECRET_KEY = '1234567890abcdef';
const sm4 = new SM4Util();
const encryptString = sm4.encryptCustom_CBC(str, 'ZkR_SiNoSOFT=568', 'GJwsXX_BzW=gJWJW');
return encryptString; const newCm4 = new gmCrypt.sm4({
} key: SECRET_KEY,
mode: 'ecb', // default
cipherType: 'base64' // default is base64
})
function decryptStringBySM4_CBC(str) {//使用sm4-cbc算法给字符串解密
const sm4 = new SM4Util();
const decryptString = sm4.decryptCustom_CBC(str, 'ZkR_SiNoSOFT=568', 'GJwsXX_BzW=gJWJW');
return decryptString;
}
let loadingInstance let loadingInstance
const a = {
'项目档案库下载': '/oss/downloadObjectStr',
'项目档案库批量上传': '/oss/multipleFilesBatchUpload',
'评估结果查看下载': '/oss/downloadObject',
'评估材料获取上传': '/oss/uploadStr',
'里程碑上传': '/oss/upload',
}
//http 请求拦截器 //http 请求拦截器
axios.interceptors.request.use(config => { axios.interceptors.request.use(config => {
const uploadUrlArr = ['/oss/upload', '/oss/uploadStr', '/oss/multipleFilesBatchUpload', '/oss/downloadObjectStr', '/oss/downloadObject']
const isUploadUrl = uploadUrlArr.some(url => config.url.indexOf(url) != -1)
if (config.url.indexOf('oss/upload') != '-1' || config.url.indexOf('oss/uploadStr') != '-1') { if (config.url.indexOf('oss/upload') != '-1' || config.url.indexOf('oss/uploadStr') != '-1') {
loadingInstance = Loading.service({ loadingInstance = Loading.service({
lock: true, lock: true,
...@@ -39,12 +55,6 @@ axios.interceptors.request.use(config => { ...@@ -39,12 +55,6 @@ axios.interceptors.request.use(config => {
// background: 'rgba(0, 0, 0, 0.7)' // background: 'rgba(0, 0, 0, 0.7)'
// }); // });
// } // }
// console.log(1111111111, sessionStorage.getItem('authorCName'));
// console.log('url--', config.url);
// console.log('userid-sessionsss', sessionStorage.getItem('userid'));
// console.log('username-sessionsss', sessionStorage.getItem('username'));
// console.log('userloginname-sessionsss', sessionStorage.getItem('userloginname'));
// config.headers['X-USER-ID'] = sessionStorage.getItem('userid');
config.headers['X-USER-CNAME'] = encodeURIComponent(sessionStorage.getItem('username')); // 请求头中传递中文字符 config.headers['X-USER-CNAME'] = encodeURIComponent(sessionStorage.getItem('username')); // 请求头中传递中文字符
config.headers['X-USER-NAME'] = sessionStorage.getItem('userloginname'); config.headers['X-USER-NAME'] = sessionStorage.getItem('userloginname');
...@@ -56,14 +66,37 @@ axios.interceptors.request.use(config => { ...@@ -56,14 +66,37 @@ axios.interceptors.request.use(config => {
config.headers['responseType'] = 'blob' config.headers['responseType'] = 'blob'
} }
let fileUrl=['/oss/upload', '/oss/uploadStr', '/oss/multipleFilesBatchUpload']
// console.log('fileUrl', fileUrl, config.url, fileUrl.indexOf(config.url));
if(fileUrl.indexOf(config.url)>0){
config.headers['content-type'] = 'multipart/form-data'
}
console.log('http 请求拦截器', config.url, config.data);
// 上传文件接口不走加密
if (SystemConfig.ENCRYPT && !isUploadUrl) {
try{
if (config.method == 'post' && config.data) {
const isJSON = typeof config.data === 'object';
if (!isJSON) {
// 如果不是JSON,可以在这里处理或者抛出错误
console.error('请求参数不是JSON格式!');
} else {
let encryptString = newCm4.encrypt(JSON.stringify(config.data))
let md5Data = md5(JSON.stringify(config.data))
config.data = { 'params': encryptString };
config.headers['md5'] = md5Data
}
}
}catch(err) {
console.log('http 请求拦截器', err);
}
}
// config.headers.token = JSON.parse(localStorage.getItem('token')).token; // config.headers.token = JSON.parse(localStorage.getItem('token')).token;
// if(config.method == "post"){
// let encryptString = encryptStringBySM4_CBC(JSON.stringify(config.data));
// config.data = encryptString;
// console.log(config.data);
// }
return config; return config;
}, },
error => { error => {
...@@ -71,33 +104,88 @@ axios.interceptors.request.use(config => { ...@@ -71,33 +104,88 @@ axios.interceptors.request.use(config => {
} }
); );
//响应拦截器即异常处理
axios.interceptors.response.use(response => {
if (loadingInstance) {
loadingInstance.close();
}
let code = response.data.code;
// response.header('Access-Control-Allow-Origin', 'http://localhost:8080')
// if (response.headers.token) {
// var token = res.headers.token
// window.localStorage.setItem('user_token', token)
// }
function dealCode(code,response) {
if (code == 200) { if (code == 200) {
return response; return response;
} else if (code == 403) {
// Vue.prototype.$alert('存在越权操作,请退出后重新登录', '提示', {
// confirmButtonText: '退出',
// callback: action => {
// loginOut().then(() => {
// let uesrInfo = JSON.parse(localStorage.getItem('userDto'))
// let params = {
// userId: uesrInfo.id,
// organizationId: uesrInfo.orgId,
// userCode: uesrInfo.userCode,
// userName: uesrInfo.name,
// }
// localStorage.clear()
// sessionStorage.clear()
// store.dispatch('tagsView/delAllViews')
// if(router.name!='login'){
// router.replace({ path: "/login" });
// }
// // window.location.reload();
// })
// }
// });;
} else if (code == 402 || code == 401) {
// store.dispatch('app/clearCancel');
// // loginOut().then(res => {
// localStorage.clear()
// sessionStorage.clear()
// Vue.prototype.$message.error('登录状态过期或者没有token,请重新登录!');
// // router.push({ path: "/login" });
// // window.location.reload();
// if(router.name!='login'){
// router.replace({ path: "/login" });
// }
// // });
} else if (code == 507 || code == 502) { } else if (code == 507 || code == 502) {
// Vue.prototype.$message.error('登录状态过期或者没有token,请重新登录!'); // console.log('502', response)
// sessionStorage.clear() // if(response.data.msg){
// router.push({path:'/login'}) // Vue.prototype.$message.error(response.data.msg);
// } else {
// Vue.prototype.$message.error('登录状态过期或者没有token,请重新登录!');
// }
// sessionStorage.clear()
// localStorage.clear()
// if(router.name!='login'){
// router.replace({ path: "/login" });
// }
} else if (code == 500) { } else if (code == 500) {
console.log('500')
// Vue.prototype.$message({message:response.data.msg,type:'error', customClass:'messageIndex_'}); // Vue.prototype.$message({message:response.data.msg,type:'error', customClass:'messageIndex_'});
return response; return response;
} else { } else {
return response; return response;
} }
}
//响应拦截器即异常处理
axios.interceptors.response.use(response => {
if (loadingInstance) {
loadingInstance.close();
}
let code;
console.log('响应拦截器处理1-response', response, !isBlob(response.data));
const responseDataUploadUrls = ['/oss/upload', '/oss/uploadStr', '/oss/multipleFilesBatchUpload']
const isResUploadUrl = responseDataUploadUrls.some(url => response.config.url.indexOf(url) != -1)
if (SystemConfig.ENCRYPT && !isBlob(response.data) && !isResUploadUrl) {
// console.log('响应拦截器处理2-response', response, !isBlob(response.data));
const data = JSON.parse(newCm4.decrypt(response.data))
response.data = data
// console.log(123, response, data);
code = data.code || ''
return dealCode(code, response)
}else {
// console.log('响应拦截器处理3-response', response, !isBlob(response.data));
code = response.data.code || '';
return dealCode(code,response)
}
}, err => { }, err => {
if (loadingInstance) { if (loadingInstance) {
loadingInstance.close(); loadingInstance.close();
...@@ -106,8 +194,12 @@ axios.interceptors.response.use(response => { ...@@ -106,8 +194,12 @@ axios.interceptors.response.use(response => {
if (err && err.response) { if (err && err.response) {
console.log('连接到服务器失败'); console.log('连接到服务器失败');
} else { } else {
console.log('未知错误'); console.log(1111111, err);
// Message.error('连接到服务器失败') // 测试环境 gateway/getUser 接口不做提示
if (err.config.url.indexOf('gateway/getUser') == -1) {
console.log('未知错误', err);
Message.error('连接到服务器失败')
}
} }
return Promise.reject('err'); return Promise.reject('err');
}); });
...@@ -123,10 +215,11 @@ export function get(url, params = {}) { ...@@ -123,10 +215,11 @@ export function get(url, params = {}) {
}) })
}) })
} }
export function post(url, data = {}) { export function post(url, data = {}) {
console.log('url', url);
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
axios.post(url, data).then(response => { axios.post(url, data).then(response => {
// console.log('post-response123', url, response);
if (response) { if (response) {
resolve(response.data); resolve(response.data);
} }
...@@ -135,6 +228,7 @@ export function post(url, data = {}) { ...@@ -135,6 +228,7 @@ export function post(url, data = {}) {
}) })
}) })
} }
export function download(url, data = {}) { export function download(url, data = {}) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
axios.post(url, data, { responseType: 'blob' }).then(response => { axios.post(url, data, { responseType: 'blob' }).then(response => {
......
import Vue from 'vue';
import axios from 'axios';
// import router from '../router/index.js';
import { Message, MessageBox, Loading } from 'element-ui';
import { SM4Util } from "@/utils/sm4";
import md5 from 'js-md5';
axios.defaults.timeout = SystemConfig.NETWORK_TIMEOUT; // 300000;
axios.defaults.baseURL = SystemConfig.VUE_APP_BASE_URL;
axios.defaults.withCredentials = true
function encryptStringBySM4_CBC(str) {//使用sm4-cbc算法给字符串加密
const sm4 = new SM4Util();
const encryptString = sm4.encryptCustom_CBC(str, 'ZkR_SiNoSOFT=568', 'GJwsXX_BzW=gJWJW');
return encryptString;
}
function decryptStringBySM4_CBC(str) {//使用sm4-cbc算法给字符串解密
const sm4 = new SM4Util();
const decryptString = sm4.decryptCustom_CBC(str, 'ZkR_SiNoSOFT=568', 'GJwsXX_BzW=gJWJW');
return decryptString;
}
let loadingInstance
//http 请求拦截器
axios.interceptors.request.use(config => {
if (config.url.indexOf('oss/upload') != '-1' || config.url.indexOf('oss/uploadStr') != '-1') {
loadingInstance = Loading.service({
lock: true,
text: '文件上传中,请耐心等待...',
// background: 'rgba(0, 0, 0, 0.7)'
});
}
// else{
// loadingInstance = Loading.service({
// lock: true,
// text: '加载中...',
// background: 'rgba(0, 0, 0, 0.7)'
// });
// }
// console.log(1111111111, sessionStorage.getItem('authorCName'));
// console.log('url--', config.url);
// console.log('userid-sessionsss', sessionStorage.getItem('userid'));
// console.log('username-sessionsss', sessionStorage.getItem('username'));
// console.log('userloginname-sessionsss', sessionStorage.getItem('userloginname'));
// config.headers['X-USER-ID'] = sessionStorage.getItem('userid');
config.headers['X-USER-CNAME'] = encodeURIComponent(sessionStorage.getItem('username')); // 请求头中传递中文字符
config.headers['X-USER-NAME'] = sessionStorage.getItem('userloginname');
// config.headers['X-USER'] = sessionStorage.getItem('author');
// config.headers['X-USER-NAME'] = sessionStorage.getItem('authorName')
// config.headers['X-USER-CNAME'] = encodeURIComponent(sessionStorage.getItem('authorCName')) // 请求头中传递中文字符
if (config.url.indexOf('oss/downloadObject') != '-1') {
config.headers["Content-Type"] = 'application/x-www-form-urlencoded'
config.headers['responseType'] = 'blob'
}
// if (SystemConfig.ENCRYPT === '1') {
// if (config.method == 'post' && config.data) {
// const isJSON = typeof config.data === 'object';
// if (!isJSON) {
// // 如果不是JSON,可以在这里处理或者抛出错误
// console.error('请求参数不是JSON格式!');
// } else {
// let encryptString = encryptStringBySM4_CBC(JSON.stringify(config.data));
// let md5Data = md5(JSON.stringify(config.data))
// config.data = { 'params': encryptString };
// config.headers['md5'] = md5Data
// }
// }
// }
// config.headers.token = JSON.parse(localStorage.getItem('token')).token;
// if(config.method == "post"){
// let encryptString = encryptStringBySM4_CBC(JSON.stringify(config.data));
// config.data = encryptString;
// console.log(config.data);
// }
return config;
},
error => {
return Promise.reject(error);
}
);
function dealCode(code,response) {
if (code == 200) {
return response;
} else if (code == 403) {
Vue.prototype.$alert('存在越权操作,请退出后重新登录', '提示', {
confirmButtonText: '退出',
callback: action => {
loginOut().then(() => {
let uesrInfo = JSON.parse(localStorage.getItem('userDto'))
let params = {
userId: uesrInfo.id,
organizationId: uesrInfo.orgId,
userCode: uesrInfo.userCode,
userName: uesrInfo.name,
}
localStorage.clear()
sessionStorage.clear()
store.dispatch('tagsView/delAllViews')
if(router.name!='login'){
router.replace({ path: "/login" });
}
// window.location.reload();
})
}
});;
} else if (code == 402 || code == 401) {
store.dispatch('app/clearCancel');
// loginOut().then(res => {
localStorage.clear()
sessionStorage.clear()
Vue.prototype.$message.error('登录状态过期或者没有token,请重新登录!');
// router.push({ path: "/login" });
// window.location.reload();
if(router.name!='login'){
router.replace({ path: "/login" });
}
// });
} else if (code == 507 || code == 502) {
console.log('502', response)
if(response.data.msg){
Vue.prototype.$message.error(response.data.msg);
} else {
Vue.prototype.$message.error('登录状态过期或者没有token,请重新登录!');
}
sessionStorage.clear()
localStorage.clear()
if(router.name!='login'){
router.replace({ path: "/login" });
}
} else if (code == 500) {
console.log('500')
// Vue.prototype.$message({message:response.data.msg,type:'error', customClass:'messageIndex_'});
return response;
} else {
return response;
}
}
//响应拦截器即异常处理
axios.interceptors.response.use(response => {
if (loadingInstance) {
loadingInstance.close();
}
let code = response.data.code;
// response.header('Access-Control-Allow-Origin', 'http://localhost:8080')
// if (response.headers.token) {
// var token = res.headers.token
// window.localStorage.setItem('user_token', token)
// }
if (code == 200) {
return response;
} else if (code == 507 || code == 502) {
// Vue.prototype.$message.error('登录状态过期或者没有token,请重新登录!');
// sessionStorage.clear()
// router.push({path:'/login'})
} else if (code == 500) {
// Vue.prototype.$message({message:response.data.msg,type:'error', customClass:'messageIndex_'});
return response;
} else {
return response;
}
}, err => {
if (loadingInstance) {
loadingInstance.close();
Message.error('上传失败')
}
if (err && err.response) {
console.log('连接到服务器失败');
} else {
console.log('未知错误');
// Message.error('连接到服务器失败')
}
return Promise.reject('err');
});
export function get(url, params = {}) {
return new Promise((resolve, reject) => {
axios.get(url, { params: params }).then(response => {
if (response) {
resolve(response);
}
}).catch(err => {
reject(err);
})
})
}
export function post(url, data = {}) {
console.log('url', url);
return new Promise((resolve, reject) => {
axios.post(url, data).then(response => {
if (response) {
resolve(response.data);
}
}, err => {
reject(err);
})
})
}
export function download(url, data = {}) {
return new Promise((resolve, reject) => {
axios.post(url, data, { responseType: 'blob' }).then(response => {
if (response) {
resolve(response.data);
}
}, err => {
reject(err);
})
})
}
...@@ -89,3 +89,8 @@ export function sortByKey(array, key) { ...@@ -89,3 +89,8 @@ export function sortByKey(array, key) {
return x > y ? -1 : x < y ? 1 : 0 return x > y ? -1 : x < y ? 1 : 0
}) })
} }
export function isBlob(val) {
return toString.call(val) === '[object Blob]';
}
\ No newline at end of file
/*
*
* 1. java 定义XSS攻击的正则表达式
* private static final Pattern XSS_PATTERN = Pattern.compile(
* "<script>|</script>|javascript:|onload=|onerror=|onclick=|onmouseover=|eval\\(|alert\\(",
* Pattern.CASE_INSENSITIVE
* );
*
* 2.java 定义特殊字符过滤正则模式
* private String specialCharPattern = "[!@#$%^&*()+\\-=\\|<./?><]";
*
* 3.java 定义定义SQL注入的正则表达式
* private static final Pattern SQL_INJECTION_PATTERN = Pattern.compile(
* "('(''|[^'])*')|(;)|(--)|(\\b(select|insert|update|delete|drop|alter|create|truncate|union|exec|declare|execute|master|backup|executexp_cmdshell)\\b)",
* Pattern.CASE_INSENSITIVE
*);
*
*/
/**
* 根据我这个项目java给的定义的规则,定义js的验证规则 => validateTextArr
* pageInputValidateObj,validateTextArr这两个没有使用
* 如果是textarea的时候,validateTextArr中要过滤掉的字符是不是有些不需要过滤掉?
*/
/**
* 防抖函数
* @param {Function} func - 需要防抖的函数
* @param {number} wait - 等待时间(毫秒)
* @returns {Function} 防抖后的函数
*/
function debounce(func, wait = SystemConfig.VUE_APP_VALIDATE_DEBOUNCE_TIME) {
let timeout;
return function executedFunction(...args) {
const later = () => {
clearTimeout(timeout);
func.apply(this, args);
};
clearTimeout(timeout);
timeout = setTimeout(later, wait);
};
}
/**
* 输入验证器类
*/
export class InputValidator {
constructor(options = {}) {
// 默认配置
this.options = {
inputMaxLength: SystemConfig.VUE_APP_INPUT_MAX_LENGTH, // 输入框最大长度
textareaMaxLength: SystemConfig.VUE_APP_TEXTAREA_MAX_LENGTH, // 文本域最大长度
showWarning: true, // 是否显示警告信息
warningMessage: '检测到非法输入,已自动过滤', // 警告信息
validateRules: [], // 验证规则
debounceWait: SystemConfig.VUE_APP_VALIDATE_DEBOUNCE_TIME, // 防抖等待时间
...options
};
// 绑定方法到实例
this.handleInput = this.handleInput.bind(this);
// 创建防抖处理函数
this.debouncedHandler = debounce(this.handleInput, this.options.debounceWait);
}
/**
* 处理输入事件
* @param {Event} e - 输入事件对象
* @param {Vue} vueInstance - Vue 实例
*/
handleInput(e, vueInstance) {
if ((e.target.tagName === "INPUT" || e.target.tagName === "TEXTAREA") &&
e.target.type !== "file") {
const value = e.target.value;
let cleanedValue = value.toString();
console.log('cleanedValue', cleanedValue);
// 长度限制
const maxLength = e.target.tagName === "INPUT"
? this.options.inputMaxLength
: this.options.textareaMaxLength;
if (cleanedValue.length > maxLength) {
cleanedValue = cleanedValue.substring(0, maxLength);
}
if(e.target.tagName === "TEXTAREA") {
this.options.validateRules = SystemConfig.VUE_APP_TEXTAREA_VALIDATE;
} else if(e.target.tagName === "INPUT") {
this.options.validateRules = SystemConfig.VUE_APP_INPUT_VALIDATE;
}
// console.log('this.options.validateRules', e.target.tagName, this.options.validateRules);
// 应用验证规则
this.options.validateRules.forEach(item => {
cleanedValue = cleanedValue.replace(item, '');
});
// 如果值发生变化,更新输入框
if (cleanedValue !== value) {
vueInstance.$nextTick(() => {
e.target.value = cleanedValue;
e.target.dispatchEvent(new Event("input", { bubbles: true }));
if (this.options.showWarning) {
vueInstance.$message.warning(this.options.warningMessage);
}
});
}
}
}
/**
* 创建验证处理器
* @param {Vue} vueInstance - Vue 实例
* @returns {Function} 防抖后的处理函数
*/
createHandler(vueInstance) {
return (e) => this.debouncedHandler(e, vueInstance);
}
/**
* 销毁验证器
*/
destroy() {
// 清理防抖定时器
if (this.debouncedHandler.cancel) {
this.debouncedHandler.cancel();
}
}
}
/**
* 创建默认验证器实例
* @param {Vue} vueInstance - Vue 实例
* @param {Object} options - 配置选项
* @returns {Function} 事件处理函数
*/
export function createDefaultValidator(vueInstance, options = {}) {
const validator = new InputValidator(options);
return validator.createHandler(vueInstance);
}
\ No newline at end of file
var hexcase = 0;
var b64pad = "";
var chrsz = 8;
function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}
function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }
function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }
function calcMD5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
function md5_vm_test()
{
return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
}
function core_md5(x, len)
{
x[len >> 5] |= 0x80 << ((len) % 32);
x[(((len + 64) >>> 9) << 4) + 14] = len;
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;
for(var i = 0; i < x.length; i += 16)
{
var olda = a;
var oldb = b;
var oldc = c;
var oldd = d;
a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd);
}
return Array(a, b, c, d);
}
function md5_cmn(q, a, b, x, s, t)
{
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
}
function md5_ff(a, b, c, d, x, s, t)
{
return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t)
{
return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t)
{
return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t)
{
return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}
function core_hmac_md5(key, data)
{
var bkey = str2binl(key);
if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);
var ipad = Array(16), opad = Array(16);
for(var i = 0; i < 16; i++)
{
ipad[i] = bkey[i] ^ 0x36363636;
opad[i] = bkey[i] ^ 0x5C5C5C5C;
}
var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
return core_md5(opad.concat(hash), 512 + 128);
}
function safe_add(x, y)
{
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}
function bit_rol(num, cnt)
{
return (num << cnt) | (num >>> (32 - cnt));
}
function str2binl(str)
{
var bin = Array();
var mask = (1 << chrsz) - 1;
for(var i = 0; i < str.length * chrsz; i += chrsz)
bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
return bin;
}
function binl2hex(binarray)
{
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
var str = "";
for(var i = 0; i < binarray.length * 4; i++)
{
str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF);
}
return str;
}
function binl2b64(binarray)
{
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var str = "";
for(var i = 0; i < binarray.length * 4; i += 3)
{
var triplet = (((binarray[i >> 2] >> 8 * ( i %4)) & 0xFF) << 16)
| (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )
| ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
for(var j = 0; j < 4; j++)
{
if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
}
}
return str;
}
\ No newline at end of file
// const pageInputValidateObj = {
// type1: ['~', '!', '@', '#', '$', '^', '&', '*', '(', ')', '=', '|', '{', '}', ';', '[', ']', '<', '>', '+', '?', '¥', '……', '。', '(', ')', '!','【', '】', '‘', '’', ';', '“', '”', '、', '?', 'select', 'insert', 'drop', 'alert', 'script', 'console', 'update', 'delete', 'truncate', 'exec', 'count'],
// type2: ['~', '!', '@', '#', '$', '^', '&', '*', '(', ')', '=', '|', '{', '}', ';', '[', ']', '<', '>', '+', '?', '¥', '……', '。', '(', ')', '!','【', '】', '‘', '’', ';', '“', '”', '、', '?', 'select', 'insert', 'drop', 'alert', 'script', 'console', 'update', 'delete', 'truncate', 'exec', 'count'],
// type3: ['~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '=', '|', '{', '}', ':', ';', ',', '[', ']', '.', '<', '>', '+', '?', '¥', '……', '%', '。', '(', ')', '!','【', '】', '‘', '’', ';', ':', '“', '”', ',', '、', '?', 'select', 'insert', 'drop', 'alert', 'script', 'console', 'update', 'delete', 'truncate', 'exec', 'count'],
// type4: ['~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '=', '|', '{', '}', ':', ';', ',', '[', ']', '.', '<', '>', '+', '?', '¥', '……', '%', '。', '(', ')', '!','【', '】', '‘', '’', ';', ':', '“', '”', ',', '、', '?', 'select', 'insert', 'drop', 'alert', 'script', 'console', 'update', 'delete', 'truncate', 'exec', 'count'],
// type5: ['~', '!', '@', '#', '$', '^', '&', '*', '(', ')', '=', '|', '{', '}', ';', '[', ']', '<', '>', '+', '?', '¥', '……', '。', '(', ')', '!','【', '】', '‘', '’', ';', '“', '”', '、', '?', 'select', 'insert', 'drop', 'alert', 'script', 'console', 'update', 'delete', 'truncate', 'exec', 'count'],
// type6: ['~', '!', '@', '#', '$', '^', '&', '*', '(', ')', '=', '|', '{', '}', ';', '[', ']', '<', '>', '+', '?', '¥', '……', '。', '(', ')', '!','【', '】', '‘', '’', ';', '“', '”', '、', '?', 'select', 'insert', 'drop', 'alert', 'script', 'console', 'update', 'delete', 'truncate', 'exec', 'count'],
// type7: ['~', '!', '@', '#', '$', '^', '&', '*', '(', ')', '=', '|', '{', '}', ';', '[', ']', '<', '>', '+', '?', '¥', '……', '。', '(', ')', '!','【', '】', '‘', '’', ';', '“', '”', '、', '?', 'select', 'insert', 'drop', 'alert', 'script', 'console', 'update', 'delete', 'truncate', 'exec', 'count'],
// type8: ['~', '!', '@', '#', '$', '^', '&', '*', '(', ')', '=', '|', '{', '}', ';', '[', ']', '<', '>', '+', '?', '¥', '……', '。', '(', ')', '!','【', '】', '‘', '’', ';', '“', '”', '、', '?', 'select', 'insert', 'drop', 'alert', 'script', 'console', 'update', 'delete', 'truncate', 'exec', 'count'],
// }
// const validateTextArr = ['~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '=', '|', '_', '{', '}', ':', ';', ',', '[', ']', '.', '<', '>', '+', '-', '?', '¥', '……', '%', '。', '(', ')', '——','!','【', '】', '‘', '’', ';', ':', '“', '”', ',', '、', '?', 'select', 'insert', 'drop', 'alert', 'script', 'console', 'update', 'delete', 'truncate', 'exec', 'count'];
const validateTextArr = [
// 特殊字符
"'", // 单引号
"''", // 双单引号
";", // 分号
"--", // SQL注释符
"*",
"(",
")",
// SQL 关键字(不区分大小写)
"select", // 'SELECT查询',
"insert", // '插入操作',
"update", // '更新操作',
"delete", // '删除操作',
"drop", // '删除对象',
"alter", // '修改对象',
"create", // '创建对象',
"truncate", // '截断表',
"union", // '联合查询',
"exec", // '执行命令',
"declare", // '变量声明',
"execute", // '执行存储过程',
"master", // '主数据库操作',
"backup", // '备份操作',
"executexp_cmdshell", // '系统命令执行'
'alert', 'script', 'console'
]
export function handleInputValidation(e, vueInstance) {
console.log("addEventListener-e.target.tagName", e.target.tagName, e.target.type, e.target.value);
// console.log("addEventListener-e.target.type", e.target.type);
// console.log("addEventListener-e.target.value", e.target.value);
if (
(e.target.tagName === "INPUT" || e.target.tagName === "TEXTAREA") &&
e.target.type != "file"
) {
const value = e.target.value;
// 过滤掉的所有特殊字符 和空格
let cleanedValue = value.toString();
let maxlength = e.target.tagName === "INPUT" ? 50 : 500;
if (cleanedValue.length > maxlength) {
cleanedValue = cleanedValue.substring(0, maxlength);
}
// const validateText = pageInputValidateObj['type1'] || validateTextArr;
const validateText = validateTextArr;
validateText.forEach(
(item) => (cleanedValue = cleanedValue.replace(item, ""))
);
console.log("cleanedValue", cleanedValue);
// 如果值发生变化,更新输入框
if (cleanedValue !== value) {
// 使用 Vue 的 nextTick 确保 DOM 更新
vueInstance.$nextTick(() => {
e.target.value = cleanedValue;
// 触发 input 事件以更新 v-model
e.target.dispatchEvent(new Event("input", { bubbles: true }));
// 可选:显示提示信息
vueInstance.$message.warning('检测到非法输入,已自动过滤')
});
}
}
}
/**
* 创建输入验证处理器
* @param {Vue} vueInstance - Vue 实例
* @returns {Function} 事件处理函数
*/
export function createInputValidator(vueInstance) {
return (e) => handleInputValidation(e, vueInstance);
}
\ No newline at end of file
// import { sm4 } from 'sm-crypto'
import smCrypto from 'sm-crypto';
const sm4 = smCrypto.sm4;
// SM4 加解密工具类
export class SM4Utils {
constructor() {
// 密钥 16 进制字符串,长度 32
this.secretKey = '0123456789ABCDEFFEDCBA9876543210';
// 初始化向量 16 进制字符串,长度 32
this.iv = '00112233445566778899AABBCCDDEEFF';
// 加密配置
this.options = {
mode: 'cbc', // 加密模式 cbc 或 ecb
iv: this.iv, // 初始化向量,仅在 CBC 模式下需要
padding: 'pkcs#5', // 填充方式
isPadding: true // 是否启用填充
};
}
// 加密方法
encrypt(plaintext) {
try {
return smCrypto.sm4.encrypt(plaintext, this.secretKey, this.options);
} catch (error) {
console.error('SM4 加密失败:', error);
return '';
}
}
// 解密方法
decrypt(ciphertext) {
try {
return smCrypto.sm4.decrypt(ciphertext, this.secretKey, this.options);
} catch (error) {
console.error('SM4 解密失败:', error);
return '';
}
}
}
/** /**
* 国密SM4加密算法 * 国密SM4加密算法
* 徐一杰 * 徐一杰
...@@ -465,7 +517,6 @@ function SM4() { ...@@ -465,7 +517,6 @@ function SM4() {
} }
} }
const SM4Util = function () { const SM4Util = function () {
// 和后端secretKey一致才能正确解密,可自定义传入,如果不传,则使用下面的默认secretKey // 和后端secretKey一致才能正确解密,可自定义传入,如果不传,则使用下面的默认secretKey
this.secretKey = "GJwsXX_BzW=gJWJW"; this.secretKey = "GJwsXX_BzW=gJWJW";
...@@ -473,26 +524,85 @@ const SM4Util = function () { ...@@ -473,26 +524,85 @@ const SM4Util = function () {
this.iv = "ZkR_SiNoSOFT=568"; this.iv = "ZkR_SiNoSOFT=568";
this.hexString = false; this.hexString = false;
// ECB模式加密,默认secretKey this.utf8ToHex = function (str) {
this.encryptDefault_ECB = function (plainText) { return Array.from(str)
.map((char) => char.charCodeAt(0).toString(16).padStart(2, '0'))
.join('');
}
this.hexToBase64 = function(hex) {
return btoa(
hex
.match(/.{1,2}/g)
.map((byte) => String.fromCharCode(parseInt(byte, 16)))
.join('')
);
}
this.sm4CryptoNewFunc = function (plainText) {
console.log('plainText--输入', plainText);
try { try {
const sm4 = new SM4(); // const key = [
const ctx = new SM4_Context(); // 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
ctx.isPadding = true; // 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10
ctx.mode = sm4.SM4_ENCRYPT; // ];
const keyBytes = this.stringToByte(this.secretKey); // // ECB 模式加密
sm4.sm4_setkey_enc(ctx, keyBytes); const key = '0123456789abcdeffedcba9876543210'
const encrypted = sm4.sm4_crypt_ecb(ctx, this.stringToByte(plainText)); // const ciphertext = sm4.encrypt(plainText, key, {
const cipherText = base64js.fromByteArray(encrypted); // mode: 'ecb', // 可选 'cbc' 或 'ecb'
if (cipherText != null && cipherText.trim().length > 0) { // // iv: iv, // 使用 CBC 模式时需要 iv
cipherText.replace(/(\s*|\t|\r|\n)/g, ""); // padding: 'PKCS5Padding', // 填充方式,默认为 'pkcs#5'
} // isPadding: true // 是否启用填充,默认为 true
return cipherText; // })
} catch (e) { // return ciphertext
// 将明文转换为16进制字符串
const plaintextHex = this.utf8ToHex(plainText);
// 使用 SM4 ECB 模式加密
const encryptedHex = sm4.encrypt(plaintextHex, key, {
mode: 'ecb', // ECB 模式
padding: 'none', // 无填充
});
// 将加密结果转换为 Base64
const ciphertext = this.hexToBase64(encryptedHex);
console.log('plainText-输出', ciphertext);
return ciphertext
} catch(e) {
console.error(e); console.error(e);
return null; return null;
} }
} }
// ECB模式加密,默认secretKey
this.encryptDefault_ECB = function (plainText) {
return this.sm4CryptoNewFunc(plainText)
// console.log(1111, plainText);
// try {
// const sm4 = new SM4();
// const ctx = new SM4_Context();
// ctx.isPadding = true;
// ctx.mode = 1;
// // ctx.mode = sm4.SM4_ENCRYPT;
// const keyBytes = this.stringToByte(this.secretKey);
// sm4.sm4_setkey_enc(ctx, keyBytes);
// const encrypted = sm4.sm4_crypt_ecb(ctx, this.stringToByte(plainText));
// const cipherText = base64js.fromByteArray(encrypted);
// if (cipherText != null && cipherText.trim().length > 0) {
// cipherText.replace(/(\s*|\t|\r|\n)/g, "");
// }
// console.log(2222, cipherText, cipherText.length);
// return cipherText;
// } catch (e) {
// console.error(e);
// return null;
// }
}
// ECB模式加密,自定义secretKey // ECB模式加密,自定义secretKey
this.encryptCustom_ECB = function (plainText, secretKey) { this.encryptCustom_ECB = function (plainText, secretKey) {
try { try {
...@@ -523,6 +633,7 @@ const SM4Util = function () { ...@@ -523,6 +633,7 @@ const SM4Util = function () {
let keyBytes = this.stringToByte(this.secretKey); let keyBytes = this.stringToByte(this.secretKey);
sm4.sm4_setkey_dec(ctx, keyBytes); sm4.sm4_setkey_dec(ctx, keyBytes);
let decrypted = sm4.sm4_crypt_ecb(ctx, base64js.toByteArray(cipherText)); let decrypted = sm4.sm4_crypt_ecb(ctx, base64js.toByteArray(cipherText));
console.log('decrypted', decrypted);
return this.byteToString(decrypted); return this.byteToString(decrypted);
} catch (e) { } catch (e) {
console.error(e); console.error(e);
......
...@@ -618,7 +618,6 @@ export default { ...@@ -618,7 +618,6 @@ export default {
let resUrl = await presignedUrl(paramsUrl) let resUrl = await presignedUrl(paramsUrl)
showUrlList.push(resUrl.msg) showUrlList.push(resUrl.msg)
}) })
// console.log(showUrlList, 'showUrlList')
this.$set(item, 'images', showUrlList) this.$set(item, 'images', showUrlList)
} }
......
...@@ -154,7 +154,6 @@ ...@@ -154,7 +154,6 @@
<el-upload <el-upload
class="upload_box" class="upload_box"
ref="upload" ref="upload"
:limit="limitNum"
:class="{ uploadBox_hide: items.hideUploadEdit }" :class="{ uploadBox_hide: items.hideUploadEdit }"
:on-change="handleEditChange" :on-change="handleEditChange"
:http-request=" :http-request="
...@@ -694,6 +693,7 @@ export default { ...@@ -694,6 +693,7 @@ export default {
this.hideUploadEdit = false this.hideUploadEdit = false
this.$message.error('上传图片大小不能超过 1000k!') this.$message.error('上传图片大小不能超过 1000k!')
} }
console.log(1111, isJPG, isLt2M);
return isJPG && isLt2M return isJPG && isLt2M
}, },
......
...@@ -558,7 +558,7 @@ export default { ...@@ -558,7 +558,7 @@ export default {
// const queryString = Object.keys(params) // const queryString = Object.keys(params)
// .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`) // .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)
// .join('&') // .join('&')
window.open(`${SystemConfig.VUE_APP_OPEN_OTHER_URL}`, '_blank', 'noopener,noreferrer') window.open(`${SystemConfig.VUE_APP_OPEN_OTHER_URL}`, '_blank', 'noopener noreferrer')
}, },
timeChange(time) { timeChange(time) {
if (time) { if (time) {
...@@ -695,7 +695,8 @@ export default { ...@@ -695,7 +695,8 @@ export default {
fileupdate(items, list) { fileupdate(items, list) {
// console.log(items, list, 'list') // console.log(items, list, 'list')
this.fileList.push(list.file) this.fileList.push(list.file)
this.debounce(this.submitFile, 500, items) // this.debounce(this.submitFile, 500, items)
this.debounce(() => this.submitFile(items), 500)
}, },
debounce(fn, waits, items) { debounce(fn, waits, items) {
if (this.timer) { if (this.timer) {
...@@ -707,7 +708,7 @@ export default { ...@@ -707,7 +708,7 @@ export default {
fn.apply(this, arguments) // 把参数传进去 fn.apply(this, arguments) // 把参数传进去
}, waits) }, waits)
}, },
submitFile() { submitFile(items) {
// console.log(arguments[2], 'arguments') // console.log(arguments[2], 'arguments')
if (this.fileList.length === 0) { if (this.fileList.length === 0) {
this.$message.success('请上传文件') this.$message.success('请上传文件')
...@@ -719,7 +720,7 @@ export default { ...@@ -719,7 +720,7 @@ export default {
this.fileList.forEach((file) => { this.fileList.forEach((file) => {
formData.append('file', file) // file.raw formData.append('file', file) // file.raw
}) })
formData.append('typeCode', arguments[2].mid) formData.append('typeCode', items.MId)
formData.append('prjId', this.checkedList[0].projectCode) formData.append('prjId', this.checkedList[0].projectCode)
formData.append('bathId', this.checkedList[0].contractNumber) formData.append('bathId', this.checkedList[0].contractNumber)
ossuploadStr(formData) ossuploadStr(formData)
......
...@@ -178,12 +178,12 @@ ...@@ -178,12 +178,12 @@
</el-table-column> </el-table-column>
</el-table> --> </el-table> -->
<div class="setscrolldialog"> <div class="setscrolldialog">
<el-table <!-- @selection-change="handleSelectionChange" -->
@selection-change="handleSelectionChange" <!-- @row-click="
@row-click="
(row, column, event) => (row, column, event) =>
handleRowClick(row, column, event, 'multipleTablePGZL') handleRowClick(row, column, event, 'multipleTablePGZL')
" " -->
<el-table
:data="qdtableData" :data="qdtableData"
tooltip-effect="dark myTooltips" tooltip-effect="dark myTooltips"
style="width: 100%" style="width: 100%"
...@@ -590,6 +590,8 @@ export default { ...@@ -590,6 +590,8 @@ export default {
fileId: scope.fileId * 1, fileId: scope.fileId * 1,
}) })
console.log('handleClickXZ-response', response);
// let blob = new Blob([response]) // let blob = new Blob([response])
// if ('download' in document.createElement('a')) { // if ('download' in document.createElement('a')) {
// let elink = document.createElement('a') // let elink = document.createElement('a')
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
<el-input <el-input
v-model="ruleForm.batchName" v-model="ruleForm.batchName"
placeholder="请输入" placeholder="请输入"
@input="e => name = validForbid (e)"
clearable clearable
></el-input> ></el-input>
</el-form-item> </el-form-item>
...@@ -525,7 +526,9 @@ ...@@ -525,7 +526,9 @@
class="eltable" class="eltable"
:row-class-name="tableRowClassName" :row-class-name="tableRowClassName"
> >
<el-table-column type="selection"> </el-table-column> <el-table-column type="selection"
:selectable="(row) => !!row.iscUserId"
></el-table-column>
<el-table-column label="序号" width="55" type="index"> <el-table-column label="序号" width="55" type="index">
<!-- <template slot-scope="scope">{{ scope.row.id }}</template> --> <!-- <template slot-scope="scope">{{ scope.row.id }}</template> -->
</el-table-column> </el-table-column>
...@@ -967,6 +970,8 @@ export default { ...@@ -967,6 +970,8 @@ export default {
} }
}, },
async submitForm(info) { async submitForm(info) {
console.log(33333, info);
if (info == 999) { if (info == 999) {
this.currentPage = 1; this.currentPage = 1;
} }
...@@ -977,8 +982,10 @@ export default { ...@@ -977,8 +982,10 @@ export default {
}; };
Object.assign(params, this.ruleForm); Object.assign(params, this.ruleForm);
console.log(44444, params);
let res = await evalBatchInfo(params); let res = await evalBatchInfo(params);
console.log(2222, res);
if (res.code == "200") { if (res.code == "200") {
this.tableData = res.data.records; this.tableData = res.data.records;
...@@ -1111,6 +1118,7 @@ export default { ...@@ -1111,6 +1118,7 @@ export default {
}, },
//选中的专家 //选中的专家
handleSelectionChangeZJ(val) { handleSelectionChangeZJ(val) {
// console.log('handleSelectionChangeZJ111', val);
if (val.length > 1) { if (val.length > 1) {
this.$refs.multipleTableZJ.clearSelection(); this.$refs.multipleTableZJ.clearSelection();
this.$refs.multipleTableZJ.toggleRowSelection(val[val.length - 1]); this.$refs.multipleTableZJ.toggleRowSelection(val[val.length - 1]);
...@@ -1119,7 +1127,12 @@ export default { ...@@ -1119,7 +1127,12 @@ export default {
// console.log("选中的专家1-", this.addZJList); // console.log("选中的专家1-", this.addZJList);
}, },
currentChange(val) { currentChange(val) {
this.$refs.multipleTableZJ.toggleRowSelection(val); // console.log('currentChange', val, val.iscUserId);
if(val.iscUserId) {
this.$refs.multipleTableZJ.toggleRowSelection(val);
} else {
this.$message.warning('缺少ISC账号,不能选择!')
}
}, },
//保存专家 //保存专家
saveZJ() { saveZJ() {
......
...@@ -213,10 +213,10 @@ ...@@ -213,10 +213,10 @@
>删除</el-button >删除</el-button
> >
<!-- :limit="limitNum" -->
<el-upload <el-upload
class="upload_box" class="upload_box"
ref="upload" ref="upload"
:limit="limitNum"
:class="{ uploadBox_hide: items.hideUploadEdit }" :class="{ uploadBox_hide: items.hideUploadEdit }"
:on-change="handleEditChange" :on-change="handleEditChange"
:http-request=" :http-request="
......
...@@ -1011,7 +1011,7 @@ export default { ...@@ -1011,7 +1011,7 @@ export default {
// const queryString = Object.keys(params) // const queryString = Object.keys(params)
// .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`) // .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)
// .join('&') // .join('&')
window.open(`${SystemConfig.VUE_APP_OPEN_OTHER_URL}`, '_blank', 'noopener,noreferrer') window.open(`${SystemConfig.VUE_APP_OPEN_OTHER_URL}`, '_blank', 'noopener noreferrer')
}, },
timeChange(time) { timeChange(time) {
if (time) { if (time) {
......
...@@ -15,7 +15,9 @@ ...@@ -15,7 +15,9 @@
placeholder="请输入" placeholder="请输入"
clearable clearable
@input="numberVal" @input="numberVal"
></el-input> ></el-input>
<!-- @input="validateInput" -->
<!-- <p v-if="isInvalidInput" style="color: red;">输入无效,可能包含 SQL 注入特征。</p> -->
</el-form-item> </el-form-item>
<el-form-item label="项目名称:" prop="projectName" class="fromItem"> <el-form-item label="项目名称:" prop="projectName" class="fromItem">
<el-input <el-input
...@@ -59,6 +61,13 @@ ...@@ -59,6 +61,13 @@
clearable clearable
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="项目负责人:" prop="projectLeader" class="fromItem">
<el-input
v-model="ruleForm.projectLeader"
placeholder="请输入"
clearable
></el-input>
</el-form-item>
<!-- <el-form-item label="部门:" prop="department" class="fromItem"> <!-- <el-form-item label="部门:" prop="department" class="fromItem">
<el-input <el-input
v-model="ruleForm.department" v-model="ruleForm.department"
...@@ -239,7 +248,7 @@ ...@@ -239,7 +248,7 @@
<template slot-scope="scope"> <template slot-scope="scope">
<el-upload <el-upload
class="upload_box" class="upload_box"
:ref="`upload${scope.row.mid}`" :ref="`upload${scope.row.MId}`"
:multiple="true" :multiple="true"
:http-request=" :http-request="
(res) => { (res) => {
...@@ -250,6 +259,7 @@ ...@@ -250,6 +259,7 @@
:on-change="uploadChange" :on-change="uploadChange"
:with-credentials="true" :with-credentials="true"
:auto-upload="true" :auto-upload="true"
accept=".doc,.docx,.xls,.xlsx,.pdf"
action="" action=""
:on-success="handleSuccess" :on-success="handleSuccess"
:file-list="scope.row.fileList" :file-list="scope.row.fileList"
...@@ -455,12 +465,14 @@ export default { ...@@ -455,12 +465,14 @@ export default {
checkedList: [], checkedList: [],
yearsList: generateYearOptions(), yearsList: generateYearOptions(),
ruleForm: { ruleForm: {
// projectCode: "7122XT21888N",
projectCode: "", projectCode: "",
projectName: "", projectName: "",
issueYear: "", issueYear: "",
constructionForm: "", constructionForm: "",
contractNumber: "", contractNumber: "",
contractName: "", contractName: "",
projectLeader: "",
}, },
tableData: [], tableData: [],
currentPage: 1, currentPage: 1,
...@@ -600,6 +612,7 @@ export default { ...@@ -600,6 +612,7 @@ export default {
this.upprojectType = this.form.projectType; this.upprojectType = this.form.projectType;
}, },
async downloadObjectStr(row) { async downloadObjectStr(row) {
let params = { let params = {
fileIdStr: row.fullId, fileIdStr: row.fullId,
fullNameStr: row.fullName, fullNameStr: row.fullName,
...@@ -747,6 +760,7 @@ export default { ...@@ -747,6 +760,7 @@ export default {
current: this.currentPage, current: this.currentPage,
pageSize: this.pageSize, pageSize: this.pageSize,
}; };
console.log('this.ruleForm', this.ruleForm);
Object.assign(params, this.ruleForm); Object.assign(params, this.ruleForm);
let res = await pmProInitiation(params); let res = await pmProInitiation(params);
if (res.code == "200") { if (res.code == "200") {
...@@ -853,7 +867,8 @@ export default { ...@@ -853,7 +867,8 @@ export default {
fileupdate(items, list) { fileupdate(items, list) {
// console.log(items, "list"); // console.log(items, "list");
this.fileList.push(list.file); this.fileList.push(list.file);
this.debounce(this.submitFile, 500, items); // this.debounce(this.submitFile, 500, items);
this.debounce(() => this.submitFile(items), 500)
}, },
debounce(fn, waits, items) { debounce(fn, waits, items) {
if (this.timer) { if (this.timer) {
...@@ -866,27 +881,77 @@ export default { ...@@ -866,27 +881,77 @@ export default {
}, waits); }, waits);
}, },
submitFile(items) { submitFile(items) {
console.log('items', items, 'arguments', arguments);
// console.log(arguments[2], "arguments"); // console.log(arguments[2], "arguments");
if (this.fileList.length === 0) { if (this.fileList.length === 0) {
this.$message.success("请上传文件"); this.$message.success("请上传文件");
return; return;
} }
// 定义校验规则
const maxFileSize = 100 * 1024 * 1024; // 100MB
const allowedExtensions = ['doc', 'docx', 'xls', 'xlsx', 'pdf'];
const fileNamePattern = /^[\u4e00-\u9fa5a-zA-Z0-9_\-()【】\[\].]+$/;
console.log('this.fileList', this.fileList);
// 遍历文件列表进行校验
for (const file of this.fileList) {
// 文件扩展名校验
// const fileExtension = file.name.split('.').pop().toLowerCase();
// if (!allowedExtensions.includes(fileExtension)) {
// this.$message.error(`文件 ${file.name} 的扩展名不被允许`);
// this.fileList = []
// return;
// }
// 文件大小校验
if (file.size > maxFileSize) {
this.$message.error(`文件 ${file.name} 超过最大大小限制(100MB)`);
this.fileList = []
return;
}
console.log('file.name.length', file.name.length);
if (file.name.length > 255) {
this.$message.error(`文件名 ${file.name} 过长,不能超过255个字符`);
this.fileList = []
return;
}
// 文件名基础校验
if (!file.name || file.name.length === 0) {
this.$message.error("文件名不能为空");
this.fileList = []
return;
}
// 文件名正则校验
if (!fileNamePattern.test(file.name)) {
this.$message.error(`文件名 ${file.name} 包含非法字符`);
this.fileList = []
return;
}
}
this.uploadLoading = true; this.uploadLoading = true;
let formData = new FormData(); // 用FormData存放上传文件 let formData = new FormData(); // 用FormData存放上传文件
this.fileList.forEach((file) => { this.fileList.forEach((file) => {
console.log('file.name', file, file.name);
formData.append("file", file); // file.raw formData.append("file", file); // file.raw
}); });
formData.append("typeCode", arguments[2].mid); formData.append("typeCode", items.MId);
formData.append("prjId", this.ruleFormdialog.projectCode); formData.append("prjId", this.ruleFormdialog.projectCode);
formData.append("bathId", this.ruleFormdialog.contractNumber); formData.append("bathId", this.ruleFormdialog.contractNumber);
// return;
// ossuploadStr(formData) // ossuploadStr(formData)
ossuploadStrAddFiles(formData) ossuploadStrAddFiles(formData)
.then((response) => { .then((response) => {
if (response.code == "200") { if (response.code == "200") {
this.fileList = []; this.fileList = [];
this.MaterialWarehous(this.upprojectType); this.MaterialWarehous(this.upprojectType);
this.$refs["upload" + arguments[2].mid].clearFiles(); this.$refs["upload" + items.MId].clearFiles();
// console.log('上传成功----ossuploadStrAddFiles', response);
this.$message("上传成功"); this.$message("上传成功");
} else { } else {
this.$message("上传失败"); this.$message("上传失败");
...@@ -895,7 +960,7 @@ export default { ...@@ -895,7 +960,7 @@ export default {
.catch((error) => { .catch((error) => {
// console.error("error"); // console.error("error");
this.fileList = []; this.fileList = [];
this.$refs["upload" + arguments[2].mid].clearFiles(); this.$refs["upload" + items.MId].clearFiles();
// this.$message("上传失败"); // this.$message("上传失败");
}) })
.finally(() => { .finally(() => {
...@@ -1018,6 +1083,7 @@ export default { ...@@ -1018,6 +1083,7 @@ export default {
}); });
}, },
uploadFiles(row) { uploadFiles(row) {
console.log('uploadFiles-row', row);
if (row.fullId) { if (row.fullId) {
this.$confirm("已有文件,本次上传将覆盖历史上传文件,是否继续?", "提示", { this.$confirm("已有文件,本次上传将覆盖历史上传文件,是否继续?", "提示", {
confirmButtonText: "确定", confirmButtonText: "确定",
...@@ -1025,11 +1091,11 @@ export default { ...@@ -1025,11 +1091,11 @@ export default {
type: "warning", type: "warning",
}) })
.then((res) => { .then((res) => {
this.$refs["upload" + row.mid].$refs["upload-inner"].handleClick(); this.$refs["upload" + row.MId].$refs["upload-inner"].handleClick();
}) })
.catch(); .catch();
} else { } else {
this.$refs["upload" + row.mid].$refs["upload-inner"].handleClick(); this.$refs["upload" + row.MId].$refs["upload-inner"].handleClick();
} }
}, },
}, },
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<div v-if="false" class="head-container"> <div v-if="false" class="head-container">
<div class="logo" style="z-index: 10"> <div class="logo" style="z-index: 10">
<div class="logo-inner"> <div class="logo-inner">
<img src="../../assets/logo.png" alt="img" /> <img src="../../assets/logo.png" alt="img" />
</div> </div>
<div class="logo-right"></div> <div class="logo-right"></div>
</div> </div>
...@@ -76,7 +76,7 @@ ...@@ -76,7 +76,7 @@
</div> </div>
<div <div
id="hpg" id="hpg"
@click="navigateToChild('5', '/mainLayout')" @click="navigateToChild('5', '/mainLayout/mianHome')"
:class="active == '5' ? 'active' : ''" :class="active == '5' ? 'active' : ''"
> >
<span class="between iconfont">&#xe612;</span>&nbsp;后评估管控中心 <span class="between iconfont">&#xe612;</span>&nbsp;后评估管控中心
...@@ -108,7 +108,7 @@ ...@@ -108,7 +108,7 @@
:fullscreen="false" :fullscreen="false"
@close="closeMessage" @close="closeMessage"
> >
<div style="display: flex; flex-direction: column; gap: 10px;"> <div style="display: flex; flex-direction: column; gap: 10px">
<div <div
style=" style="
display: flex; display: flex;
...@@ -118,7 +118,11 @@ ...@@ -118,7 +118,11 @@
" "
> >
<!-- <div>消息提醒 {{ messageNum }}</div> --> <!-- <div>消息提醒 {{ messageNum }}</div> -->
<div><el-button type="primary" @click="readWhole" size="small">一键已读</el-button></div> <div>
<el-button type="primary" @click="readWhole" size="small"
>一键已读</el-button
>
</div>
</div> </div>
<div> <div>
<el-table <el-table
...@@ -135,9 +139,20 @@ ...@@ -135,9 +139,20 @@
border border
stripe stripe
> >
<el-table-column fixed label="序号" width="55" type="index" align="center"/> <el-table-column
fixed
label="序号"
width="55"
type="index"
align="center"
/>
<!-- <el-table-column fixed type="selection" /> --> <!-- <el-table-column fixed type="selection" /> -->
<el-table-column prop="projectCode" label="项目编码" width="150" align="center"/> <el-table-column
prop="projectCode"
label="项目编码"
width="150"
align="center"
/>
<el-table-column <el-table-column
prop="projectName" prop="projectName"
label="项目名称" label="项目名称"
...@@ -145,8 +160,18 @@ ...@@ -145,8 +160,18 @@
show-overflow-tooltip show-overflow-tooltip
align="center" align="center"
/> />
<el-table-column align="center" prop="issueYear" label="项目年度" width="100" /> <el-table-column
<el-table-column align="center" prop="projectType" label="项目类型" width="100"> align="center"
prop="issueYear"
label="项目年度"
width="100"
/>
<el-table-column
align="center"
prop="projectType"
label="项目类型"
width="100"
>
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.projectType == 1">咨询设计类</div> <div v-if="scope.row.projectType == 1">咨询设计类</div>
<div v-if="scope.row.projectType == 2">开发实施类</div> <div v-if="scope.row.projectType == 2">开发实施类</div>
...@@ -194,8 +219,18 @@ ...@@ -194,8 +219,18 @@
align="center" align="center"
show-overflow-tooltip show-overflow-tooltip
/> />
<el-table-column prop="createTime" align="center" label="提醒时间" width="110" /> <el-table-column
<el-table-column prop="status" align="center" label="状态" width="100"> prop="createTime"
align="center"
label="提醒时间"
width="110"
/>
<el-table-column
prop="status"
align="center"
label="状态"
width="100"
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.status === 1 ? "未读" : "已读" }} {{ scope.row.status === 1 ? "未读" : "已读" }}
</template> </template>
...@@ -207,9 +242,18 @@ ...@@ -207,9 +242,18 @@
align="center" align="center"
show-overflow-tooltip show-overflow-tooltip
/> />
<el-table-column fixed="right" label="操作" align="center" min-width="120"> <el-table-column
fixed="right"
label="操作"
align="center"
min-width="120"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button link type="primary" @click="bingoOprate(scope.row)" size="small" <el-button
link
type="primary"
@click="bingoOprate(scope.row)"
size="small"
>操作</el-button >操作</el-button
> >
</template> </template>
...@@ -234,10 +278,14 @@ ...@@ -234,10 +278,14 @@
<script> <script>
import MainLayout from "./mainLayout"; import MainLayout from "./mainLayout";
import axios from 'axios'; import axios from "axios";
import { getIscInfo, evaluationMaterials } from "@/api/index"; import { getIscInfo, evaluationMaterials } from "@/api/index";
import { getMessageListApi, updateMessageApi, readWholwMsg } from "@/api/indexzc"; import {
getMessageListApi,
updateMessageApi,
readWholwMsg,
} from "@/api/indexzc";
// import tableMixin from '@/mixins/table.mixin.js' // import tableMixin from '@/mixins/table.mixin.js'
export default { export default {
// mixins: [tableMixin], // mixins: [tableMixin],
...@@ -334,7 +382,7 @@ export default { ...@@ -334,7 +382,7 @@ export default {
], ],
}; };
}, },
created () { created() {
this.getMessageList(); this.getMessageList();
}, },
mounted() { mounted() {
...@@ -346,34 +394,35 @@ export default { ...@@ -346,34 +394,35 @@ export default {
methods: { methods: {
async readWhole() { async readWhole() {
// 一键已读 // 一键已读
this.$confirm('确认已读所有消息, 是否继续?', '提示', { this.$confirm("确认已读所有消息, 是否继续?", "提示", {
confirmButtonText: '确定', confirmButtonText: "确定",
cancelButtonText: '取消', cancelButtonText: "取消",
type: 'warning', type: "warning",
}).then(async () => { })
let res = await readWholwMsg() .then(async () => {
let res = await readWholwMsg();
// console.log('res', res); // console.log('res', res);
if (res.code == 200) { if (res.code == 200) {
this.$message({ this.$message({
type: 'success', type: "success",
message: '已读所有消息成功!', message: "已读所有消息成功!",
}) });
} else { } else {
this.$message({ this.$message({
type: 'info', type: "info",
message: '已读失败!', message: "已读失败!",
}) });
} }
}).catch(() => {
this.$message({
type: 'info',
message: '已取消已读所有',
})
}) })
.catch(() => {
this.$message({
type: "info",
message: "已取消已读所有",
});
});
}, },
async bingoOprate(row) { async bingoOprate(row) {
const a = await updateMessageApi([row.id]);
const a = await updateMessageApi([row.id])
this.showMessage = false; this.showMessage = false;
this.$router.push({ this.$router.push({
...@@ -430,23 +479,22 @@ export default { ...@@ -430,23 +479,22 @@ export default {
// } // }
// }, // },
async getMessageList() { async getMessageList() {
// if(!sessionStorage.getItem('userloginname')) {
if(!sessionStorage.getItem('userloginname')) { // // 如果没有session, 先调用该接口获取用户信息
// 如果没有session, 先调用该接口获取用户信息 // // await this.getIscInfoAndRoutes()
// await this.getIscInfoAndRoutes() // }
}
let params = { let params = {
current: this.currentPage, current: this.currentPage,
pageSize: this.pageSize, pageSize: this.pageSize,
}; };
// console.log(params); // console.log(params);
let res = await getMessageListApi(params); // let res = await getMessageListApi(params);
if (res.code == "200") { // if (res.code == "200") {
this.tableData = res.data.records; // this.tableData = res.data.records;
this.messageNum = res.data.count * 1 // this.messageNum = res.data.count * 1;
this.total = res.data.count * 1; // this.total = res.data.count * 1;
} // }
}, },
handleSizeChange(val) { handleSizeChange(val) {
this.pageSize = val; this.pageSize = val;
......
...@@ -809,7 +809,9 @@ export default { ...@@ -809,7 +809,9 @@ export default {
// console.log(e, a, "e, ae, a"); // console.log(e, a, "e, ae, a");
}, },
clicksub(a, b) { clicksub(a, b) {
// console.log("选怎", a, b); console.log("选怎", a, b);
sessionStorage.setItem("username", b.name);
sessionStorage.setItem("userloginname", b.loginName);
// sessionStorage.setItem("userloginname", b.loginName); // sessionStorage.setItem("userloginname", b.loginName);
// sessionStorage.setItem("author", b.code); // sessionStorage.setItem("author", b.code);
// sessionStorage.setItem("authorName", a.id); // sessionStorage.setItem("authorName", a.id);
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!