From d8a09595f32d977a34549fb3a8939ba9be62f163 Mon Sep 17 00:00:00 2001 From: Jeffrey Hsu Date: Sat, 22 Feb 2025 22:30:17 +0800 Subject: [PATCH] decouple code --- .../components/assessment/AssessmentStage.vue | 87 +++++++++++++++---- src/renderer/src/models/Assessment.ts | 72 +++++++++++++-- src/renderer/src/views/panel/PanelIndex.vue | 42 +-------- 3 files changed, 136 insertions(+), 65 deletions(-) diff --git a/src/renderer/src/components/assessment/AssessmentStage.vue b/src/renderer/src/components/assessment/AssessmentStage.vue index 6cd965b..7363b6e 100644 --- a/src/renderer/src/components/assessment/AssessmentStage.vue +++ b/src/renderer/src/components/assessment/AssessmentStage.vue @@ -20,9 +20,10 @@ + + + + + + + + + + + + diff --git a/src/renderer/src/models/Assessment.ts b/src/renderer/src/models/Assessment.ts index b4bd976..dc9e808 100644 --- a/src/renderer/src/models/Assessment.ts +++ b/src/renderer/src/models/Assessment.ts @@ -19,18 +19,72 @@ import { IAssessment, IAssessmentMethod } from '@renderer/types' +export class AssessmentMethod implements IAssessmentMethod { + private _method: string + private _weight: number + + constructor(method: string, weight: number) { + this._method = method + this._weight = weight + } + + public static factory() { + return new AssessmentMethod('', 0) + } + + public static factoryFromImpl(impl: IAssessmentMethod) { + return new AssessmentMethod(impl.method, Number(impl.weight)) + } + + public static factoryToImpl(): IAssessmentMethod { + return { + method: '', + weight: 0 + } + } + + public setFromImpl(impl: IAssessmentMethod) { + this._method = impl.method + this._weight = Number(impl.weight) + } + + public getCurrImpl(): IAssessmentMethod { + return { method: this._method, weight: this.weight } + } + + get method(): string { + return this._method + } + + set method(value: string) { + this._method = value + } + + get weight(): number { + return this._weight + } + + set weight(value: number) { + this._weight = value + } +} + export class AssessmentData implements IAssessment { - private readonly _method: IAssessmentMethod[] + private readonly _method: AssessmentMethod[] private _stage: string private _weight: number - constructor(stage: string, weight: number | string, method?: IAssessmentMethod[]) { + constructor(stage: string, weight: number | string, method?: AssessmentMethod[]) { this._method = method ?? [] this._stage = stage this._weight = Number(weight) } - get method(): IAssessmentMethod[] { + public static factoryToImpl(): IAssessment { + return { method: [], stage: '', weight: 0 } + } + + get method(): AssessmentMethod[] { return this._method } @@ -50,15 +104,15 @@ export class AssessmentData implements IAssessment { this._weight = Number(value) } - public addMethod(method: IAssessmentMethod) { - this._method.push({ ...method, weight: Number(method.weight) }) + public addMethod(method: AssessmentMethod) { + this._method.push(method) } - public modifyMethod(method: IAssessmentMethod, idx: number) { + public modifyMethod(method: AssessmentMethod, idx: number) { if (idx < 0 || idx >= this._method.length) { return } - this._method[idx] = { ...method, weight: Number(method.weight) } + this._method[idx] = method } public removeMethod(idx: number) { @@ -89,6 +143,10 @@ export class Assessment { ) } + public checkTotalWeight() { + return this._daily.weight + this._progress.weight + this._final.weight === 100 + } + get daily(): AssessmentData { return this._daily } diff --git a/src/renderer/src/views/panel/PanelIndex.vue b/src/renderer/src/views/panel/PanelIndex.vue index 9d911d9..129c459 100644 --- a/src/renderer/src/views/panel/PanelIndex.vue +++ b/src/renderer/src/views/panel/PanelIndex.vue @@ -50,12 +50,12 @@ const assessmentStageList = ref<{ title: string; parent: Parent; assessment: Ref { title: '平时考核', parent: 'n', - assessment: normalStage + assessment: ref(store.doc.assessment.daily) }, { title: '过程考核', parent: 'p', - assessment: processStage + assessment: ref(store.doc.assessment.progress) }, { title: '期末考核', @@ -164,43 +164,7 @@ onMounted(async () => { - - - - - - - - - - - - -
- 所有考核占比之和不是100% -
- + 课程目标