1
0
mirror of https://github.com/ZeroCatDev/Classworks.git synced 2026-02-04 07:53:11 +00:00

Merge pull request #30 from user111192/main

如果token为只读则将“点击添加作业”改为“当日无作业”
This commit is contained in:
Sunwuyuan 2026-01-03 17:45:49 +08:00 committed by GitHub
commit d83dd3993d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 115 additions and 5 deletions

View File

@ -19,5 +19,48 @@ export default [
rules: { rules: {
'vue/multi-word-component-names': 'off', 'vue/multi-word-component-names': 'off',
}, },
},
{
languageOptions: {
globals: {
// Browser globals
window: 'readonly',
document: 'readonly',
navigator: 'readonly',
localStorage: 'readonly',
sessionStorage: 'readonly',
console: 'readonly',
alert: 'readonly',
confirm: 'readonly',
prompt: 'readonly',
setTimeout: 'readonly',
setInterval: 'readonly',
fetch: 'readonly',
XMLHttpRequest: 'readonly',
URL: 'readonly',
URLSearchParams: 'readonly',
atob: 'readonly',
btoa: 'readonly',
// Vite globals
import: 'readonly',
process: 'readonly',
// Service Worker globals
self: 'readonly',
caches: 'readonly',
// Web API
Notification: 'readonly',
ServiceWorker: 'readonly',
PushManager: 'readonly',
PushSubscription: 'readonly',
// Web Storage API
Storage: 'readonly',
StorageEvent: 'readonly',
// Web Socket
WebSocket: 'readonly',
// Web Workers
Worker: 'readonly',
SharedWorker: 'readonly',
},
},
} }
] ]

View File

@ -153,7 +153,9 @@
variant="tonal" variant="tonal"
@click="handleCardClick('dialog', subject.name)" @click="handleCardClick('dialog', subject.name)"
> >
<v-icon start size="small">mdi-plus</v-icon> <v-icon start size="small">
{{ isReadOnlyToken ? 'mdi-cancel' : 'mdi-plus' }}
</v-icon>
{{ subject.name }} {{ subject.name }}
</v-chip> </v-chip>
</div> </div>
@ -165,7 +167,9 @@
:key="subject.name" :key="subject.name"
@click="handleCardClick('dialog', subject.name)" @click="handleCardClick('dialog', subject.name)"
> >
<v-icon start> mdi-plus</v-icon> <v-icon start>
{{ isReadOnlyToken ? 'mdi-cancel' : 'mdi-plus' }}
</v-icon>
{{ subject.name }} {{ subject.name }}
</v-btn> </v-btn>
</v-btn-group> </v-btn-group>
@ -183,8 +187,14 @@
{{ subject.name }} {{ subject.name }}
</v-card-title> </v-card-title>
<v-card-text class="text-center"> <v-card-text class="text-center">
<template v-if="isReadOnlyToken">
<v-icon color="grey" size="small"> mdi-cancel </v-icon>
<div class="text-caption text-grey"> 当日无作业 </div>
</template>
<template v-else>
<v-icon color="grey" size="small"> mdi-plus </v-icon> <v-icon color="grey" size="small"> mdi-plus </v-icon>
<div class="text-caption text-grey"> 点击添加作业 </div> <div class="text-caption text-grey"> 点击添加作业 </div>
</template>
</v-card-text> </v-card-text>
</v-card> </v-card>
</TransitionGroup> </TransitionGroup>
@ -233,10 +243,17 @@ export default {
}, },
}, },
emits: ["open-dialog", "open-attendance", "disabled-click"], emits: ["open-dialog", "open-attendance", "disabled-click"],
mounted() { data() {
return {
isReadOnlyToken: false,
}
},
async mounted() {
/* eslint-disable no-undef */
this.resizeObserver = new ResizeObserver(() => { this.resizeObserver = new ResizeObserver(() => {
this.resizeAllGridItems(); this.resizeAllGridItems();
}); });
/* eslint-enable no-undef */
// Observe the grid container for width changes // Observe the grid container for width changes
if (this.$refs.gridContainer) { if (this.$refs.gridContainer) {
@ -256,6 +273,9 @@ export default {
}); });
} }
}); });
//
await this.checkReadOnlyStatus();
}, },
updated() { updated() {
// When items change, re-observe new items // When items change, re-observe new items
@ -276,6 +296,53 @@ export default {
} }
}, },
methods: { methods: {
async checkReadOnlyStatus() {
// StudentNameManager
try {
// Vue 2$parent$root访
let manager = null;
// 访
if (this.$parent && this.$parent.$refs && this.$parent.$refs.studentNameManager) {
manager = this.$parent.$refs.studentNameManager;
} else if (this.$root && this.$root.$refs && this.$root.$refs.studentNameManager) {
manager = this.$root.$refs.studentNameManager;
}
if (manager && typeof manager.isReadOnly !== 'undefined') {
this.isReadOnlyToken = manager.isReadOnly;
} else {
// 访managertoken
// 使utils/settings
const { getSetting } = await import('@/utils/settings');
const token = getSetting('server.kvToken');
if (token) {
// APItoken
const { default: axios } = await import('@/axios/axios');
const serverUrl = getSetting('server.domain');
if (serverUrl) {
try {
const tokenResponse = await axios.get(`${serverUrl}/kv/_token`, {
headers: {
Authorization: `Bearer ${token}`
}
});
if (tokenResponse.data && typeof tokenResponse.data.isReadOnly !== 'undefined') {
this.isReadOnlyToken = tokenResponse.data.isReadOnly;
}
} catch (err) {
console.error('获取Token信息失败:', err);
}
}
}
}
} catch (error) {
console.error('检查只读状态失败:', error);
}
},
resizeGridItem(item) { resizeGridItem(item) {
const grid = this.$refs.gridContainer; const grid = this.$refs.gridContainer;
if (!grid) return; if (!grid) return;