From 01f5b4673b51f887e25be6568b262665e93d74a8 Mon Sep 17 00:00:00 2001 From: bb_pan Date: Sat, 3 Jan 2026 14:19:46 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/login.js | 12 - src/components/FileImageUpload/index.vue | 38 +- src/permission.js | 2 +- src/router/index.js | 5 - src/views/login.vue | 5 - src/views/login1.vue | 13 - src/views/register.vue | 263 ----------- src/views/register1.vue | 409 ------------------ .../components/left/TotalPriceMore.vue | 2 +- src/views/screen/widescreen/cityScreen.vue | 3 +- .../screen/widescreen/cityWidescreen.vue | 3 +- src/views/screen/widescreen/gwScreen.vue | 3 +- src/views/screen/widescreen/index.vue | 3 +- src/views/screen/widescreen/shareScreen.vue | 3 +- src/views/screen/widescreen/wsScreen.vue | 3 +- .../components/left/TotalPriceMore.vue | 2 +- .../components/left/TotalPriceMore.vue | 2 +- src/views/system/user/index.vue | 91 ++-- 18 files changed, 102 insertions(+), 760 deletions(-) delete mode 100644 src/views/register.vue delete mode 100644 src/views/register1.vue diff --git a/src/api/login.js b/src/api/login.js index cd029b1c..ef8eff1d 100644 --- a/src/api/login.js +++ b/src/api/login.js @@ -62,18 +62,6 @@ export function getPhoneCode(payload) { }) } -// 注册方法 -export function register(data) { - return request({ - url: '/auth/register', - headers: { - isToken: false - }, - method: 'post', - data: data - }) -} - // 刷新方法 export function refreshToken() { return request({ diff --git a/src/components/FileImageUpload/index.vue b/src/components/FileImageUpload/index.vue index a4fde74d..53c71491 100644 --- a/src/components/FileImageUpload/index.vue +++ b/src/components/FileImageUpload/index.vue @@ -219,25 +219,49 @@ export default { isWord(file) { return /\.(doc|docx)$/i.test(file.name) }, + isValidFileUrl(rawUrl) { + if (!rawUrl || typeof rawUrl !== 'string') return false + + try { + const url = new URL(rawUrl, window.location.origin) + + // 1️⃣ 协议校验 + if (!['http:', 'https:'].includes(url.protocol)) { + return false + } + + // 2️⃣ 文件后缀校验 + const pathname = url.pathname.toLowerCase() + + return /\.(jpg|jpeg|png|gif|webp|pdf|doc|docx)$/.test(pathname) + } catch (e) { + return false + } + }, // 预览 handlePictureCardPreview(file) { - console.log('🚀 ~ file:', file) - const url = file.url || file.response?.data?.url + const rawUrl = file.url || file.response?.data?.url + // 🚨 新增:文件类型校验 + if (!this.isValidFileUrl(rawUrl)) { + this.$modal.msgError('非法文件地址') + return + } + + const safeUrl = new URL(rawUrl, window.location.origin).toString() + console.log('🚀 ~ safeUrl:', safeUrl) if (this.isPDF(file)) { - // PDF 新窗口打开 - window.open(url, '_blank') + window.open(safeUrl, '_blank') return } if (this.isWord(file)) { - // Word:直接跳转浏览器下载 - window.location.href = url + window.location.href = safeUrl return } if (!this.isImage(file)) { - window.open(url, '_blank') + window.open(safeUrl, '_blank') return } diff --git a/src/permission.js b/src/permission.js index e09afb0d..8861e138 100644 --- a/src/permission.js +++ b/src/permission.js @@ -8,7 +8,7 @@ import { isRelogin } from "@/utils/request"; NProgress.configure({ showSpinner: false }); -const whiteList = ["/login", "/register", "/qrCode/qrCodePage","/screen/cityScreen"]; +const whiteList = ["/login", "/qrCode/qrCodePage","/screen/cityScreen"]; router.beforeEach((to, from, next) => { NProgress.start(); diff --git a/src/router/index.js b/src/router/index.js index 4116e178..9cc0ec06 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -46,11 +46,6 @@ export const constantRoutes = [ component: () => import('@/views/login1'), hidden: true }, - { - path: '/register', - component: () => import('@/views/register1'), - hidden: true - }, { path: '/404', component: () => import('@/views/error/404'), diff --git a/src/views/login.vue b/src/views/login.vue index c8410b7e..17ab5edd 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -70,11 +70,6 @@ 登 录 登 录 中... -
- 立即注册 -
diff --git a/src/views/login1.vue b/src/views/login1.vue index 4f499640..df58790d 100644 --- a/src/views/login1.vue +++ b/src/views/login1.vue @@ -105,15 +105,6 @@ {{ loginMethod === 'password' ? '短信登录' : '密码登录' }} - @@ -207,10 +198,6 @@ export default { phoneCode: false, emailCode: false }, - registersConfig: { - phoneRegisters: true, - emailRegisters: true - } } ) // 获取 JSON 对象 }, diff --git a/src/views/register.vue b/src/views/register.vue deleted file mode 100644 index 3a8ce4d3..00000000 --- a/src/views/register.vue +++ /dev/null @@ -1,263 +0,0 @@ - - - - - diff --git a/src/views/register1.vue b/src/views/register1.vue deleted file mode 100644 index 0f1324d4..00000000 --- a/src/views/register1.vue +++ /dev/null @@ -1,409 +0,0 @@ - - - - - diff --git a/src/views/screen/gwScreen/components/left/TotalPriceMore.vue b/src/views/screen/gwScreen/components/left/TotalPriceMore.vue index ad6604f8..445f08b0 100644 --- a/src/views/screen/gwScreen/components/left/TotalPriceMore.vue +++ b/src/views/screen/gwScreen/components/left/TotalPriceMore.vue @@ -44,7 +44,7 @@ export default { // 造点假数据 const categories = ['2020', '2021', '2022', '2023', '2024', '2025'] - const data = Array.from({ length: 6 }, () => Math.floor(Math.random() * 1000 + 500)) + const data = [520, 680, 750, 820, 910, 1050] const option = { tooltip: { diff --git a/src/views/screen/widescreen/cityScreen.vue b/src/views/screen/widescreen/cityScreen.vue index 99f5815e..81cd1bb6 100644 --- a/src/views/screen/widescreen/cityScreen.vue +++ b/src/views/screen/widescreen/cityScreen.vue @@ -8,8 +8,9 @@ export default { return {} }, mounted() { + const url = process.env.VUE_APP_BASE_API == '/iws/jiju-api' ? 'iws/glweb/#' : '' // 打开大屏 - window.open('iws/glweb/#/screen/cityScreen', '_blank') + window.open(`${url}/screen/cityScreen`, '_blank') // 关闭当前标签页 this.$tab.closePage() }, diff --git a/src/views/screen/widescreen/cityWidescreen.vue b/src/views/screen/widescreen/cityWidescreen.vue index 822fbf1d..8ebbd35e 100644 --- a/src/views/screen/widescreen/cityWidescreen.vue +++ b/src/views/screen/widescreen/cityWidescreen.vue @@ -8,8 +8,9 @@ export default { return {} }, mounted() { + const url = process.env.VUE_APP_BASE_API == '/iws/jiju-api' ? 'iws/glweb/#' : '' // 打开大屏 - window.open('iws/glweb/#/screen/cityWidescreen', '_blank') + window.open(`${url}/screen/cityWidescreen`, '_blank') // 关闭当前标签页 this.$tab.closePage() }, diff --git a/src/views/screen/widescreen/gwScreen.vue b/src/views/screen/widescreen/gwScreen.vue index 0195fcf4..0dd6bfe2 100644 --- a/src/views/screen/widescreen/gwScreen.vue +++ b/src/views/screen/widescreen/gwScreen.vue @@ -8,8 +8,9 @@ export default { return {} }, mounted() { + const url = process.env.VUE_APP_BASE_API == '/iws/jiju-api' ? 'iws/glweb/#' : '' // 打开大屏 - window.open('iws/glweb/#/screen/gwScreen', '_blank') + window.open(`${url}/screen/gwScreen`, '_blank') // 关闭当前标签页 this.$tab.closePage() }, diff --git a/src/views/screen/widescreen/index.vue b/src/views/screen/widescreen/index.vue index abafe1f6..d75c8d39 100644 --- a/src/views/screen/widescreen/index.vue +++ b/src/views/screen/widescreen/index.vue @@ -8,8 +8,9 @@ export default { return {} }, mounted() { + const url = process.env.VUE_APP_BASE_API == '/iws/jiju-api' ? 'iws/glweb/#' : '' // 打开大屏 - window.open('iws/glweb/#/screen/wsScreenWidescreen', '_blank') + window.open(`${url}/screen/wsScreenWidescreen`, '_blank') // 关闭当前标签页 this.$tab.closePage() }, diff --git a/src/views/screen/widescreen/shareScreen.vue b/src/views/screen/widescreen/shareScreen.vue index a34adbd7..93513458 100644 --- a/src/views/screen/widescreen/shareScreen.vue +++ b/src/views/screen/widescreen/shareScreen.vue @@ -8,8 +8,9 @@ export default { return {} }, mounted() { + const url = process.env.VUE_APP_BASE_API == '/iws/jiju-api' ? 'iws/glweb/#' : '' // 打开大屏 - window.open('iws/glweb/#/screen/shareScreen', '_blank') + window.open(`${url}/screen/shareScreen`, '_blank') // 关闭当前标签页 this.$tab.closePage() }, diff --git a/src/views/screen/widescreen/wsScreen.vue b/src/views/screen/widescreen/wsScreen.vue index 065d4d7d..768514a5 100644 --- a/src/views/screen/widescreen/wsScreen.vue +++ b/src/views/screen/widescreen/wsScreen.vue @@ -8,8 +8,9 @@ export default { return {} }, mounted() { + const url = process.env.VUE_APP_BASE_API == '/iws/jiju-api' ? 'iws/glweb/#' : '' // 打开大屏 - window.open('iws/glweb/#/screen/wsScreen', '_blank') + window.open(`${url}/screen/wsScreen`, '_blank') // 关闭当前标签页 this.$tab.closePage() }, diff --git a/src/views/screen/wsScreen/components/left/TotalPriceMore.vue b/src/views/screen/wsScreen/components/left/TotalPriceMore.vue index a2c4873f..e54de6d1 100644 --- a/src/views/screen/wsScreen/components/left/TotalPriceMore.vue +++ b/src/views/screen/wsScreen/components/left/TotalPriceMore.vue @@ -44,7 +44,7 @@ export default { // 造点假数据 const categories = ['2020', '2021', '2022', '2023', '2024', '2025'] - const data = Array.from({ length: 6 }, () => Math.floor(Math.random() * 1000 + 500)) + const data = [520, 680, 750, 820, 910, 1050] const option = { tooltip: { diff --git a/src/views/screen/wsScreenWidescreen/components/left/TotalPriceMore.vue b/src/views/screen/wsScreenWidescreen/components/left/TotalPriceMore.vue index ad6604f8..445f08b0 100644 --- a/src/views/screen/wsScreenWidescreen/components/left/TotalPriceMore.vue +++ b/src/views/screen/wsScreenWidescreen/components/left/TotalPriceMore.vue @@ -44,7 +44,7 @@ export default { // 造点假数据 const categories = ['2020', '2021', '2022', '2023', '2024', '2025'] - const data = Array.from({ length: 6 }, () => Math.floor(Math.random() * 1000 + 500)) + const data = [520, 680, 750, 820, 910, 1050] const option = { tooltip: { diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue index 1949950e..fcc44d41 100644 --- a/src/views/system/user/index.vue +++ b/src/views/system/user/index.vue @@ -695,30 +695,31 @@ export default { }) }, confirmPassword(row) { - this.$prompt('请输入密码,鉴别用户', '提示', { - confirmButtonText: '确定', - cancelButtonText: '取消', - closeOnClickModal: false, - inputPattern: /^.{8,16}$/, - inputErrorMessage: '用户密码长度必须介于 8 和 16 之间', - inputValidator: (value) => { - // 调用 validateNewPassword 校验 - const errorMessage = function (error) { - if (error) { - return error.message; - } else { - console.log('验证通过'); - } - }; - validateNewPassword(null, value, errorMessage); - } - }).then(({value}) => { - confirmPassword(value).then(response => { - this.$modal.msgSuccess('验证成功') - this.handleUpdate(row) - }) - }).catch(() => { - }) + this.handleUpdate(row) + // this.$prompt('请输入密码,鉴别用户', '提示', { + // confirmButtonText: '确定', + // cancelButtonText: '取消', + // closeOnClickModal: false, + // inputPattern: /^.{8,16}$/, + // inputErrorMessage: '用户密码长度必须介于 8 和 16 之间', + // inputValidator: (value) => { + // // 调用 validateNewPassword 校验 + // const errorMessage = function (error) { + // if (error) { + // return error.message; + // } else { + // console.log('验证通过'); + // } + // }; + // validateNewPassword(null, value, errorMessage); + // } + // }).then(({value}) => { + // confirmPassword(value).then(response => { + // this.$modal.msgSuccess('验证成功') + // this.handleUpdate(row) + // }) + // }).catch(() => { + // }) }, confirmResetPwd(row) { this.$prompt('请输入密码,鉴别用户', '提示', { @@ -752,25 +753,43 @@ export default { confirmButtonText: '确定', cancelButtonText: '取消', closeOnClickModal: false, - inputPattern: /^.{8,16}$/, - inputErrorMessage: '用户密码长度必须介于 8 和 16 之间', inputValidator: (value) => { - // 调用 validateNewPassword 校验 - const errorMessage = function (error) { + // 1️⃣ 空值校验 + if (!value || value.trim() === '') { + return '密码不能为空' + } + + // 2️⃣ 不能包含空格(任意位置) + if (/\s/.test(value)) { + return '密码不能包含空格' + } + + // 3️⃣ 长度校验 + if (value.length < 8 || value.length > 16) { + return '用户密码长度必须介于 8 和 16 之间' + } + + // 4️⃣ 调用原有校验 + let errorMsg = '' + validateNewPassword(null, value, (error) => { if (error) { - return error.message; - } else { - console.log('验证通过'); + errorMsg = error.message } - }; - validateNewPassword(null, value, errorMessage); + }) + + if (errorMsg) { + return errorMsg + } + + return true } - }).then(({value}) => { - resetUserPwd(row.userId, value).then(response => { + }) + .then(({ value }) => { + resetUserPwd(row.userId, value).then(() => { this.$modal.msgSuccess('修改成功,新密码是:' + value) }) - }).catch(() => { }) + .catch(() => {}) }, /** 分配角色操作 */ handleAuthRole: function (row) {