From e1ddbdbe654dd211dd67c5bf18fd4f345b8b64bd Mon Sep 17 00:00:00 2001 From: jlzhou <12020042@qq.com> Date: Fri, 27 Sep 2024 09:48:07 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E5=B8=B8=E8=A7=81=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin-ui/src/utils/dynamicTitle.js | 7 +- admin-ui/src/utils/index.js | 38 ++++-- admin-ui/src/utils/modules/base64.js | 117 ++++++++++++++++++ admin-ui/src/utils/modules/timer.js | 43 +++++++ admin-ui/src/utils/modules/timerEvent.js | 25 ---- .../service/impl/SysOssServiceImpl.java | 33 +++-- 6 files changed, 216 insertions(+), 47 deletions(-) create mode 100644 admin-ui/src/utils/modules/base64.js create mode 100644 admin-ui/src/utils/modules/timer.js delete mode 100644 admin-ui/src/utils/modules/timerEvent.js diff --git a/admin-ui/src/utils/dynamicTitle.js b/admin-ui/src/utils/dynamicTitle.js index 3094657..c33c90c 100644 --- a/admin-ui/src/utils/dynamicTitle.js +++ b/admin-ui/src/utils/dynamicTitle.js @@ -1,6 +1,5 @@ -import {store} from '@/store' +import { useSettingsStore } from '@/store' import defaultSettings from '@/settings' -import useSettingsStore from '@/store/modules/settings' /** * 动态修改标题 @@ -12,4 +11,8 @@ export function useDynamicTitle() { } else { document.title = defaultSettings.title; } +} + +export function setDynamicTitle(title) { + useSettingsStore().title = title } \ No newline at end of file diff --git a/admin-ui/src/utils/index.js b/admin-ui/src/utils/index.js index ab7b5f1..cf05d04 100644 --- a/admin-ui/src/utils/index.js +++ b/admin-ui/src/utils/index.js @@ -1,24 +1,44 @@ import { parseTime } from './ruoyi' import prototypes from "./modules/prototypes" -import timerEvent from "./modules/timerEvent"; +import timer from "./modules/timer" +import Base64 from './modules/base64' export const util = { install(Vue) { prototypes(); timerEvent(); } } +export { timerBind, timerUnBind } from "./modules/timer" + +const base64 = new Base64() + +export { base64, Base64 } + +export { getToken, setToken, removeToken } from './auth' + +export { useDict } from './dict' + +export { useDynamicTitle, setDynamicTitle } from './dynamicTitle' + +export { encrypt, decrypt } from './jsencrypt' + +export { checkPermi, checkRole } from './permission' + +import request from './request' + +export { request } /** * 表格时间格式化 */ export function formatDate(cellValue) { if (cellValue == null || cellValue == "") return ""; - var date = new Date(cellValue) + var date = new Date(cellValue) var year = date.getFullYear() var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1 - var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate() - var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours() - var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes() + var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate() + var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours() + var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes() var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds() return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds } @@ -226,7 +246,7 @@ export function getTime(type) { export function debounce(func, wait, immediate) { let timeout, args, context, timestamp, result - const later = function() { + const later = function () { // 据上一次触发时间间隔 const last = +new Date() - timestamp @@ -243,7 +263,7 @@ export function debounce(func, wait, immediate) { } } - return function(...args) { + return function (...args) { context = this timestamp = +new Date() const callNow = immediate && !timeout @@ -338,7 +358,7 @@ export function makeMap(str, expectsLowerCase) { ? val => map[val.toLowerCase()] : val => map[val] } - + export const exportDefault = 'export default ' export const beautifierConf = { @@ -395,4 +415,4 @@ export function camelCase(str) { export function isNumberStr(str) { return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str) } - + diff --git a/admin-ui/src/utils/modules/base64.js b/admin-ui/src/utils/modules/base64.js new file mode 100644 index 0000000..736816e --- /dev/null +++ b/admin-ui/src/utils/modules/base64.js @@ -0,0 +1,117 @@ +//1.加密解密方法使用: + +//1.加密 +// var str = '124中文内容'; +// var base = new Base64(); +// var result = base.encode(str); +// //document.write(result); + +// //2.解密 +// var result2 = base.decode(result); +// document.write(result2); +// //2.加密、解密算法封装: + +function Base64() { + + // private property + var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + + // public method for encoding + this.encode = function (input) { + if (!input) { console.log('请传入要加密的值'); return } + var output = ""; + var chr1, chr2, chr3, enc1, enc2, enc3, enc4; + var i = 0; + input = _utf8_encode(input); + while (i < input.length) { + chr1 = input.charCodeAt(i++); + chr2 = input.charCodeAt(i++); + chr3 = input.charCodeAt(i++); + enc1 = chr1 >> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); + enc4 = chr3 & 63; + if (isNaN(chr2)) { + enc3 = enc4 = 64; + } else if (isNaN(chr3)) { + enc4 = 64; + } + output = output + + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + + _keyStr.charAt(enc3) + _keyStr.charAt(enc4); + } + return output; + } + + // public method for decoding + this.decode = function (input) { + if (!input) { console.log('请传入要解密的值'); return } + var output = ""; + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0; + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + while (i < input.length) { + enc1 = _keyStr.indexOf(input.charAt(i++)); + enc2 = _keyStr.indexOf(input.charAt(i++)); + enc3 = _keyStr.indexOf(input.charAt(i++)); + enc4 = _keyStr.indexOf(input.charAt(i++)); + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + output = output + String.fromCharCode(chr1); + if (enc3 != 64) { + output = output + String.fromCharCode(chr2); + } + if (enc4 != 64) { + output = output + String.fromCharCode(chr3); + } + } + output = _utf8_decode(output); + return output; + } + + // private method for UTF-8 encoding + var _utf8_encode = function (string) { + string = string.replace(/\r\n/g, "\n"); + var utftext = ""; + for (var n = 0; n < string.length; n++) { + var c = string.charCodeAt(n); + if (c < 128) { + utftext += String.fromCharCode(c); + } else if ((c > 127) && (c < 2048)) { + utftext += String.fromCharCode((c >> 6) | 192); + utftext += String.fromCharCode((c & 63) | 128); + } else { + utftext += String.fromCharCode((c >> 12) | 224); + utftext += String.fromCharCode(((c >> 6) & 63) | 128); + utftext += String.fromCharCode((c & 63) | 128); + } + } + return utftext; + } + // private method for UTF-8 decoding + var _utf8_decode = function (utftext) { + var string = ""; + var i = 0; + let c = 0, c1 = 0, c2 = 0; + while (i < utftext.length) { + c = utftext.charCodeAt(i); + if (c < 128) { + string += String.fromCharCode(c); + i++; + } else if ((c > 191) && (c < 224)) { + c2 = utftext.charCodeAt(i + 1); + string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); + i += 2; + } else { + c2 = utftext.charCodeAt(i + 1); + c1 = utftext.charCodeAt(i + 2); + string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c1 & 63)); + i += 3; + } + } + return string; + } +} +export default Base64 diff --git a/admin-ui/src/utils/modules/timer.js b/admin-ui/src/utils/modules/timer.js new file mode 100644 index 0000000..8f01cfd --- /dev/null +++ b/admin-ui/src/utils/modules/timer.js @@ -0,0 +1,43 @@ +export default function () { + /** + * 触发周期性事件 + */ + let count = 0; + window.dispatchEvent(new CustomEvent("timer", { bubbles: false, detail: { count: count } })); + window.setInterval(() => { + count++; + if (count > 36000000) { + count = 0; + } + window.dispatchEvent(new CustomEvent("timer", { bubbles: false, detail: { count: count } })); + }, 1000); + +} + + +const map = {} + +/** + * 每seconds秒执行一次fn + * @param {Number} seconds + * @param {Function} fn + */ +export const timerBind = (seconds, fn) => { + map[fn] = (event) => { + //每seconds秒执行一次 + if (event.detail.count % seconds != 0) { + return + } + fn() + } + window.addEventListener("timer", map[fn]) +} + +/** + * 解除函数的绑定 + * @param {Function} fn + */ +export const timerUnBind = (fn) => { + window.removeEventListener("timer", map[fn]) + delete map[fn] +} \ No newline at end of file diff --git a/admin-ui/src/utils/modules/timerEvent.js b/admin-ui/src/utils/modules/timerEvent.js deleted file mode 100644 index 2f084a6..0000000 --- a/admin-ui/src/utils/modules/timerEvent.js +++ /dev/null @@ -1,25 +0,0 @@ -export default function(){} -/** - * 触发周期性事件 - */ -let count = 0; -window.dispatchEvent(new CustomEvent("timer", { bubbles: false, detail: { count: count } })); -window.setInterval(() => { - count++; - if (count > 36000000) { - count = 0; - } - window.dispatchEvent(new CustomEvent("timer", { bubbles: false, detail: { count: count } })); - if(count%5==0){ - window.dispatchEvent(new CustomEvent("timer5",{bubbles: false})); - } - if(count%10==0){ - window.dispatchEvent(new CustomEvent("timer10",{bubbles: false})); - } - if(count%30==0){ - window.dispatchEvent(new CustomEvent("timer30",{bubbles: false})); - } - if(count%60==0){ - window.dispatchEvent(new CustomEvent("timer60",{bubbles: false})); - } -}, 1000); \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java index 5878078..8ead5c9 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java @@ -362,26 +362,37 @@ public class SysOssServiceImpl implements ISysOssService, OssService { if (UPLOAD.equals(oss.getService())) { return oss; } else { - OssClient storage = OssFactory.instance(oss.getService()); - // 仅修改桶类型为 private 的URL,临时URL时长为120s - if (AccessPolicyType.PRIVATE == storage.getAccessPolicy()) { - oss.setUrl(storage.getPrivateUrl(oss.getFileName(), second)); - } + oss.setUrl(query(oss.getService(), oss.getUrl(), second)); return oss; } } + private String query(String service, String url, int second) { + OssClient storage = OssFactory.instance(service); + // 仅修改桶类型为 private 的URL,临时URL时长为120s + if (AccessPolicyType.PRIVATE == storage.getAccessPolicy()) { + String old = url; + if (url.indexOf("://") > -1) { + url = url.substring(url.indexOf("/", url.indexOf("//") + 2)); + } + if (url.startsWith("/")) { + url = url.substring(1); + } + url = url.substring(url.indexOf("/") + 1); + + String queryString = storage.getPrivateUrl(url, second); + queryString = queryString.substring(queryString.indexOf("?")); + return old + queryString; + } + return url; + } + @Override public String url(Service service, String url, int second) { if (Service.upload.equals(service)) { return url; } else { - OssClient storage = OssFactory.instance(service.name()); - // 仅修改桶类型为 private 的URL,临时URL时长为120s - if (AccessPolicyType.PRIVATE == storage.getAccessPolicy()) { - return storage.getPrivateUrl(url, second); - } - return url; + return query(service.name(), url, second); } }