diff --git a/eslint.config.js b/eslint.config.js
index 944e82b..dc39e85 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -19,5 +19,48 @@ export default [
rules: {
'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',
+ },
+ },
}
]
diff --git a/src/components/home/HomeworkGrid.vue b/src/components/home/HomeworkGrid.vue
index 46d7949..c821997 100644
--- a/src/components/home/HomeworkGrid.vue
+++ b/src/components/home/HomeworkGrid.vue
@@ -153,7 +153,9 @@
variant="tonal"
@click="handleCardClick('dialog', subject.name)"
>
- mdi-plus
+
+ {{ isReadOnlyToken ? 'mdi-cancel' : 'mdi-plus' }}
+
{{ subject.name }}
@@ -165,7 +167,9 @@
:key="subject.name"
@click="handleCardClick('dialog', subject.name)"
>
- mdi-plus
+
+ {{ isReadOnlyToken ? 'mdi-cancel' : 'mdi-plus' }}
+
{{ subject.name }}
@@ -183,8 +187,14 @@
{{ subject.name }}
- mdi-plus
- 点击添加作业
+
+ mdi-cancel
+ 当日无作业
+
+
+ mdi-plus
+ 点击添加作业
+
@@ -233,10 +243,17 @@ export default {
},
},
emits: ["open-dialog", "open-attendance", "disabled-click"],
- mounted() {
+ data() {
+ return {
+ isReadOnlyToken: false,
+ }
+ },
+ async mounted() {
+ /* eslint-disable no-undef */
this.resizeObserver = new ResizeObserver(() => {
this.resizeAllGridItems();
});
+ /* eslint-enable no-undef */
// Observe the grid container for width changes
if (this.$refs.gridContainer) {
@@ -256,6 +273,9 @@ export default {
});
}
});
+
+ // 检查只读状态
+ await this.checkReadOnlyStatus();
},
updated() {
// When items change, re-observe new items
@@ -276,6 +296,53 @@ export default {
}
},
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 {
+ // 如果无法直接访问manager,尝试通过全局设置获取token信息
+ // 这里需要使用utils/settings中的函数
+ const { getSetting } = await import('@/utils/settings');
+ const token = getSetting('server.kvToken');
+
+ if (token) {
+ // 通过API获取token信息来判断是否只读
+ 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) {
const grid = this.$refs.gridContainer;
if (!grid) return;