✨ update
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
<div class="comment">
|
||||
<AFlex :vertical="false">
|
||||
<AFlex :vertical="true">
|
||||
<AAvatar :size="50" class="comment-avatar" shape="circle" src="https://api.multiavatar.com/Starcrasher.svg"/>
|
||||
<AAvatar :size="50" class="comment-avatar" shape="circle" :src="user.user.userInfo.avatar"/>
|
||||
</AFlex>
|
||||
<AFlex :vertical="true" class="comment-content">
|
||||
<ATextarea :rows="4" class="comment-text" @focus="onFocusHandler"
|
||||
@@ -198,7 +198,7 @@ async function commentSubmit(point: any) {
|
||||
const contentWithEmoji = content.replace(regex, (_match, p1) => {
|
||||
return `<img style="width: 30px; height: 30px;" loading="lazy" src="/emoji/qq/gif/${p1}" alt="emoji ${p1}" />`;
|
||||
});
|
||||
const regexWithLottieEmoji = /:((1[0-0-8]|[1-9]?[0-9])\.gif):/g; // 匹配 :1.gif: 的字符串
|
||||
const regexWithLottieEmoji = /\:((1[0-0-8]|[1-9]?[0-9])\.gif)\:/g; // 匹配 :1.gif: 的字符串
|
||||
const contentWithLottieEmoji = contentWithEmoji.replace(regexWithLottieEmoji, (_match, p1) => {
|
||||
return `<img style="width: 80px; height: 80px;" loading="lazy" src="/emoji/qq/lottie/${p1}" alt="emoji ${p1}" />`;
|
||||
});
|
||||
|
@@ -11,7 +11,7 @@
|
||||
<!-- 回复头像-->
|
||||
<AFlex :vertical="false" class="reply-input-content">
|
||||
<AFlex :vertical="true" class="reply-input-avatar">
|
||||
<AAvatar :size="40" shape="circle" src="https://api.multiavatar.com/landaiqing.svg"/>
|
||||
<AAvatar :size="40" shape="circle" :src="user.user.userInfo.avatar"/>
|
||||
</AFlex>
|
||||
<!-- 评论输入框 -->
|
||||
<AFlex :vertical="true" class="reply-input-content-text">
|
||||
|
@@ -13,7 +13,7 @@
|
||||
<!-- 回复头像-->
|
||||
<AFlex :vertical="false" class="reply-input-content-child">
|
||||
<AFlex :vertical="true" class="reply-input-avatar-child">
|
||||
<AAvatar :size="40" shape="circle" src="https://api.multiavatar.com/landaiqing.svg"/>
|
||||
<AAvatar :size="40" shape="circle" :src="user.user.userInfo.avatar"/>
|
||||
</AFlex>
|
||||
<!-- 评论输入框 -->
|
||||
<AFlex :vertical="true" class="reply-input-content-text-child">
|
||||
|
@@ -10,6 +10,16 @@ export const useAuthStore = defineStore(
|
||||
uid: '',
|
||||
refreshToken: '',
|
||||
expiresAt: 0,
|
||||
userInfo: {
|
||||
username: '',
|
||||
nickname: '',
|
||||
email: '',
|
||||
phone: '',
|
||||
avatar: '',
|
||||
gender: '',
|
||||
status: '',
|
||||
created_at: '',
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
|
@@ -35,9 +35,7 @@ const {onAuthRequired, onResponseRefreshToken} = createServerTokenAuthentication
|
||||
} else {
|
||||
message.error(i18n.global.t('error.loginExpired'));
|
||||
localStorage.removeItem('user');
|
||||
setTimeout(() => {
|
||||
window.location.href = '/login';
|
||||
}, 2000);
|
||||
window.location.href = '/login';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -9,7 +9,10 @@ let isInit: boolean = false;
|
||||
const initNSFWJs = async (): Promise<NSFWJS> => {
|
||||
tf.enableProdMode();
|
||||
if (!isInit) {
|
||||
const initialLoad = await nsfwjs.load("/nsfw/model/mobilenet_v2_mid/model.json", {size: 224, type: "graph"});
|
||||
const initialLoad: nsfwjs.NSFWJS = await nsfwjs.load("/nsfw/model/mobilenet_v2_mid/", {
|
||||
size: 224,
|
||||
type: "graph"
|
||||
});
|
||||
await initialLoad.model.save("indexeddb://nsfwjs-model");
|
||||
isInit = true;
|
||||
}
|
||||
@@ -22,7 +25,6 @@ const initNSFWJs = async (): Promise<NSFWJS> => {
|
||||
*/
|
||||
const predictNSFW = async (model: NSFWJS, image: tf.Tensor3D | ImageData | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement): Promise<boolean> => {
|
||||
const predictions = await model.classify(image, 5);
|
||||
console.log(predictions);
|
||||
// 定义阈值与对应的类别
|
||||
const thresholds = {
|
||||
'Porn': 0.5,
|
||||
|
@@ -114,11 +114,12 @@ function openGithubUrl() {
|
||||
const data: any = JSON.parse(e.data);
|
||||
if (data.code === 200 && data.data) {
|
||||
const user = useStore().user;
|
||||
const {access_token, refresh_token, uid, expires_at} = data.data;
|
||||
const {access_token, refresh_token, uid, expires_at, user_info} = data.data;
|
||||
user.user.accessToken = access_token;
|
||||
user.user.refreshToken = refresh_token;
|
||||
user.user.uid = uid;
|
||||
user.user.expiresAt = expires_at;
|
||||
user.user.userInfo = user_info;
|
||||
await getUserDevice(uid);
|
||||
message.success(t('login.loginSuccess'));
|
||||
window.removeEventListener("message", messageHandler);
|
||||
@@ -157,11 +158,12 @@ function openGiteeUrl() {
|
||||
const data: any = JSON.parse(e.data);
|
||||
if (data.code === 200 && data.data) {
|
||||
const user = useStore().user;
|
||||
const {access_token, refresh_token, uid, expires_at} = data.data;
|
||||
const {access_token, refresh_token, uid, expires_at, user_info} = data.data;
|
||||
user.user.accessToken = access_token;
|
||||
user.user.refreshToken = refresh_token;
|
||||
user.user.uid = uid;
|
||||
user.user.expiresAt = expires_at;
|
||||
user.user.userInfo = user_info;
|
||||
await getUserDevice(uid);
|
||||
message.success(t('login.loginSuccess'));
|
||||
window.removeEventListener("message", messageHandler);
|
||||
@@ -198,11 +200,12 @@ function openQQUrl() {
|
||||
const data: any = JSON.parse(e.data);
|
||||
if (data.code === 200 && data.data) {
|
||||
const user = useStore().user;
|
||||
const {access_token, refresh_token, uid, expires_at} = data.data;
|
||||
const {access_token, refresh_token, uid, expires_at, user_info} = data.data;
|
||||
user.user.accessToken = access_token;
|
||||
user.user.refreshToken = refresh_token;
|
||||
user.user.uid = uid;
|
||||
user.user.expiresAt = expires_at;
|
||||
user.user.userInfo = user_info;
|
||||
await getUserDevice(uid);
|
||||
message.success(t('login.loginSuccess'));
|
||||
window.removeEventListener("message", messageHandler);
|
||||
|
@@ -377,13 +377,15 @@ async function phoneLoginSubmit() {
|
||||
.validate()
|
||||
.then(async () => {
|
||||
const res: any = await phoneLoginApi(phoneLoginForm);
|
||||
console.log(res);
|
||||
if (res.code === 200 && res.success) {
|
||||
const userStore = useStore().user;
|
||||
const {uid, access_token, refresh_token, expires_at} = res.data;
|
||||
const {uid, access_token, refresh_token, expires_at, user_info} = res.data;
|
||||
userStore.user.uid = uid;
|
||||
userStore.user.accessToken = access_token;
|
||||
userStore.user.refreshToken = refresh_token;
|
||||
userStore.user.expiresAt = expires_at;
|
||||
userStore.user.userInfo = user_info;
|
||||
message.success(t('login.loginSuccess'));
|
||||
loginLoading.value = false;
|
||||
setTimeout(() => {
|
||||
@@ -461,11 +463,12 @@ async function checkAccountLoginCaptcha(angle: number) {
|
||||
const res: any = await accountLoginApi(params);
|
||||
if (res.code === 200 && res.success) {
|
||||
const userStore = useStore().user;
|
||||
const {uid, access_token, refresh_token, expires_at} = res.data;
|
||||
const {uid, access_token, refresh_token, expires_at, user_info} = res.data;
|
||||
userStore.user.uid = uid;
|
||||
userStore.user.accessToken = access_token;
|
||||
userStore.user.refreshToken = refresh_token;
|
||||
userStore.user.expiresAt = expires_at;
|
||||
userStore.user.userInfo = user_info;
|
||||
message.success(t('login.loginSuccess'));
|
||||
loginLoading.value = false;
|
||||
showAccountRotateCaptcha.value = false;
|
||||
|
@@ -131,11 +131,12 @@ async function handleListenMessage() {
|
||||
websocket.on('message', async (data: any) => {
|
||||
if (data.code === 200 && data.data) {
|
||||
const user = useStore().user;
|
||||
const {access_token, refresh_token, uid, expires_at} = data.data;
|
||||
const {access_token, refresh_token, uid, expires_at, user_info} = data.data;
|
||||
user.user.accessToken = access_token;
|
||||
user.user.refreshToken = refresh_token;
|
||||
user.user.uid = uid;
|
||||
user.user.expiresAt = expires_at;
|
||||
user.user.userInfo = user_info;
|
||||
status.value = 'scanned';
|
||||
await getUserDevice(uid);
|
||||
message.success(t('login.loginSuccess'));
|
||||
|
@@ -115,11 +115,12 @@ function openGithubUrl() {
|
||||
const data: any = JSON.parse(e.data);
|
||||
if (data.code === 200 && data.data) {
|
||||
const user = useStore().user;
|
||||
const {access_token, refresh_token, uid, expires_at} = data.data;
|
||||
const {access_token, refresh_token, uid, expires_at, user_info} = data.data;
|
||||
user.user.accessToken = access_token;
|
||||
user.user.refreshToken = refresh_token;
|
||||
user.user.uid = uid;
|
||||
user.user.expiresAt = expires_at;
|
||||
user.user.userInfo = user_info;
|
||||
await getUserDevice(uid);
|
||||
message.success(t('login.loginSuccess'));
|
||||
window.removeEventListener("message", messageHandler);
|
||||
@@ -157,11 +158,12 @@ function openGiteeUrl() {
|
||||
const data: any = JSON.parse(e.data);
|
||||
if (data.code === 200 && data.data) {
|
||||
const user = useStore().user;
|
||||
const {access_token, refresh_token, uid, expires_at} = data.data;
|
||||
const {access_token, refresh_token, uid, expires_at, user_info} = data.data;
|
||||
user.user.accessToken = access_token;
|
||||
user.user.refreshToken = refresh_token;
|
||||
user.user.uid = uid;
|
||||
user.user.expiresAt = expires_at;
|
||||
user.user.userInfo = user_info;
|
||||
await getUserDevice(uid);
|
||||
message.success(t('login.loginSuccess'));
|
||||
window.removeEventListener("message", messageHandler);
|
||||
@@ -198,11 +200,12 @@ function openQQUrl() {
|
||||
const data: any = JSON.parse(e.data);
|
||||
if (data.code === 200 && data.data) {
|
||||
const user = useStore().user;
|
||||
const {access_token, refresh_token, uid, expires_at} = data.data;
|
||||
const {access_token, refresh_token, uid, expires_at, user_info} = data.data;
|
||||
user.user.accessToken = access_token;
|
||||
user.user.refreshToken = refresh_token;
|
||||
user.user.uid = uid;
|
||||
user.user.expiresAt = expires_at;
|
||||
user.user.userInfo = user_info;
|
||||
await getUserDevice(uid);
|
||||
message.success(t('login.loginSuccess'));
|
||||
window.removeEventListener("message", messageHandler);
|
||||
|
@@ -45,6 +45,7 @@ export default defineConfig(({mode}: { mode: string }): object => {
|
||||
}),
|
||||
nodePolyfills(),
|
||||
viteCompression({
|
||||
filter: /\.(js|mjs|css|html)$/i, // 压缩的文件类型
|
||||
verbose: true, // 是否在控制台中输出压缩结果
|
||||
disable: false,
|
||||
threshold: 10240, // 如果体积大于阈值,将被压缩,单位为b,体积过小时请不要压缩,以免适得其反
|
||||
@@ -93,7 +94,7 @@ export default defineConfig(({mode}: { mode: string }): object => {
|
||||
},
|
||||
|
||||
esbuild: {
|
||||
// drop: ["console", "debugger"],
|
||||
drop: env.VITE_NODE_ENV === 'production' ? ['console', 'debugger'] : [],
|
||||
},
|
||||
build: {
|
||||
outDir: "dist", // 指定输出路径
|
||||
|
Reference in New Issue
Block a user