Selaa lähdekoodia

Merge branch 'refs/heads/20240604-dev' into 20240904-zyy

周玉佂 2 viikkoa sitten
vanhempi
commit
813b6c2dea

+ 1 - 0
src/api/tester/evaluation/scale.ts

@@ -97,6 +97,7 @@ export interface EvaluationScaleVO {
   /** 参考文献 */
   reference?: string
   /** 评定-量表创建时间 */
+  type?: string
   ctime?: string
   cuser?: string
   note?: string

+ 192 - 148
src/types/components.d.ts

@@ -7,153 +7,197 @@ export {}
 
 declare module 'vue' {
   export interface GlobalComponents {
-    AddTester: (typeof import('./../views/tester/components/AddTester/index.vue'))['default']
-    ADLPower: (typeof import('./../views/gameCenter/components/games/ADLPower/index.vue'))['default']
-    AppLink: (typeof import('./../components/AppLink/index.vue'))['default']
-    AppMain: (typeof import('./../layout/components/AppMain/index.vue'))['default']
-    AssignTraining: (typeof import('./../views/gameCenter/components/games/AssignTraining/index.vue'))['default']
-    ATMainShow: (typeof import('./../views/gameCenter/components/games/AssignTraining/components/ATMainShow/index.vue'))['default']
-    Avatar: (typeof import('./../components/Chat/Avatar/index.vue'))['default']
-    BarChart: (typeof import('./../views/dashboard/components/BarChart.vue'))['default']
-    IndexSmallTitle: (typeof import('./../views/dashboard/components/IndexSmallTitle.vue'))['default']
-    IndexBarA: (typeof import('./../views/dashboard/components/IndexBarA.vue'))['default']
-    IndexBarS: (typeof import('./../views/dashboard/components/IndexBarS.vue'))['default']
-    IndexSmallPieS: (typeof import('./../views/dashboard/components/IndexSmallPieS.vue'))['default']
-    IndexProgressBar: (typeof import('./../views/dashboard/components/IndexProgressBar.vue'))['default']
-    IndexSmoothLineS: (typeof import('./../views/dashboard/components/IndexSmoothLineS.vue'))['default']
-    Breadcrumb: (typeof import('./../components/Breadcrumb/index.vue'))['default']
-    BreadthTraining: (typeof import('./../views/gameCenter/components/games/BreadthTraining/index.vue'))['default']
-    BTRandomPentagram: (typeof import('./../views/gameCenter/components/games/BreadthTraining/components/BTRandomPentagram/index.vue'))['default']
-    CalculationExercises: (typeof import('./../views/gameCenter/components/games/CalculationExercises/index.vue'))['default']
-    CalculationRules: (typeof import('./../views/gameCenter/components/games/CalculationRules/index.vue'))['default']
-    CaseAdd: (typeof import('./../views/tester/components/CaseInformation/CaseAdd/index.vue'))['default']
-    CaseInformation: (typeof import('./../views/tester/components/CaseInformation/index.vue'))['default']
-    CaseLog: (typeof import('./../views/tester/components/CaseInformation/CaseLog/index.vue'))['default']
-    CExercisesMainShow: (typeof import('./../views/gameCenter/components/games/CalculationExercises/components/CExercisesMainShow/index.vue'))['default']
-    CharacterMemory: (typeof import('./../views/gameCenter/components/games/CharacterMemory/index.vue'))['default']
-    CharacterMemoryChild: (typeof import('./../views/gameCenter/components/games/CharacterMemory/components/CharacterMemoryChild/index.vue'))['default']
-    ChatComponent: (typeof import('./../components/Chat/ChatComponent/index.vue'))['default']
-    CocosDialog: (typeof import('./../views/gameCenter/components/games/CocosDialog/index.vue'))['default']
-    CognitiveAbility5EC301: (typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbility5EC301/index.vue'))['default']
-    CognitiveAbilitySellingTest: (typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilitySellingTest/index.vue'))['default']
-    CognitiveAbilityStarShapedSales: (typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilityStarShapedSales/index.vue'))['default']
-    CognitiveAbilityTask: (typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/index.vue'))['default']
-    CognitiveAbilityTaskBoston: (typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilityTaskBoston/index.vue'))['default']
-    CognitiveAbilityTaskDigitalMemoryTest: (typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilityTaskDigitalMemoryTest/index.vue'))['default']
-    CognitiveAbilityTaskDrawClock: (typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilityTaskDrawClock/index.vue'))['default']
-    CognitiveAbilityTaskMMSE: (typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilityTaskMMSE/index.vue'))['default']
-    CognitiveAbilityTaskMoca: (typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilityTaskMoca/index.vue'))['default']
-    CognitiveAbilityWisconsin: (typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilityWisconsin/index.vue'))['default']
-    Computation: (typeof import('./../views/gameCenter/components/games/Computation/index.vue'))['default']
-    ConceptFormation: (typeof import('./../views/gameCenter/components/games/ConceptFormation/index.vue'))['default']
-    CountingDots: (typeof import('./../views/gameCenter/components/games/CountingDots/index.vue'))['default']
-    CountingDotsChild: (typeof import('./../views/gameCenter/components/games/CountingDots/components/CountingDotsChild/index.vue'))['default']
-    CRRuleShow: (typeof import('./../views/gameCenter/components/games/CalculationRules/components/CRRuleShow/index.vue'))['default']
-    CTopicShow: (typeof import('./../views/gameCenter/components/games/Computation/components/CTopicShow/index.vue'))['default']
-    DeptTree: (typeof import('./../views/system/user/components/dept-tree.vue'))['default']
-    Dictionary: (typeof import('./../components/Dictionary/index.vue'))['default']
-    DigitalUnderstanding: (typeof import('./../views/gameCenter/components/games/DigitalUnderstanding/index.vue'))['default']
-    DUMainShow: (typeof import('./../views/gameCenter/components/games/DigitalUnderstanding/components/DUMainShow/index.vue'))['default']
-    EditDiv: (typeof import('./../components/Chat/EditDiv/index.vue'))['default']
-    EmojiSelector: (typeof import('./../components/Chat/emoji-selector/index.vue'))['default']
-    FileUpload: (typeof import('./../components/Upload/FileUpload.vue'))['default']
-    FindNumberTraining: (typeof import('./../views/gameCenter/components/games/FindNumberTraining/index.vue'))['default']
-    Fish: (typeof import('./../views/gameCenter/components/games/SuppressionControlTest/components/fish/index.vue'))['default']
-    FixedTransfer: (typeof import('./../views/gameCenter/components/games/FixedTransfer/index.vue'))['default']
-    FluidDnd: (typeof import('./../views/gameCenter/components/games/DigitalUnderstanding/components/FluidDnd/index.vue'))['default']
-    FormatCountDown: (typeof import('./../components/FormatCountDown/index.vue'))['default']
-    FunnelChart: (typeof import('./../views/dashboard/components/FunnelChart.vue'))['default']
-    GithubCorner: (typeof import('./../components/GithubCorner/index.vue'))['default']
-    Hamburger: (typeof import('./../components/Hamburger/index.vue'))['default']
-    IconSelect: (typeof import('./../components/IconSelect/index.vue'))['default']
-    IndexBack: (typeof import('./../components/Chat/emoji-selector/index-back.vue'))['default']
-    InputWithBorder: (typeof import('./../components/WuInput/InputWithBorder/index.vue'))['default']
-    Introduction: (typeof import('./../views/gameCenter/components/Introduction/index.vue'))['default']
-    LangSelect: (typeof import('./../components/LangSelect/index.vue'))['default']
-    LayoutSelect: (typeof import('./../layout/components/Settings/components/LayoutSelect.vue'))['default']
-    LogicalReasoning: (typeof import('./../views/gameCenter/components/games/LogicalReasoning/index.vue'))['default']
-    NumMdel: (typeof import('./../views/gameCenter/components/games/LogicalReasoning/components/numMdel/index.vue'))['default']
-    Ability: (typeof import('@/views/gameCenter/components/games/WorkingMemory/components/ability/index.vue'))['default']
-    Blend: (typeof import('@/views/gameCenter/components/games/WorkingMemory/components/blend/index.vue'))['default']
-    Login: (typeof import('./../views/login/components/login/index.vue'))['default']
-    MessageItem: (typeof import('./../components/Chat/MessageItem/index.vue'))['default']
-    MultiUpload: (typeof import('./../components/Upload/MultiUpload.vue'))['default']
-    MyFullScreenDialog: (typeof import('./../components/MyFullScreenDialog/index.vue'))['default']
-    NavBar: (typeof import('./../layout/components/NavBar/index.vue'))['default']
-    NavbarLeft: (typeof import('./../layout/components/NavBar/components/NavbarLeft.vue'))['default']
-    NavbarRight: (typeof import('./../layout/components/NavBar/components/NavbarRight.vue'))['default']
-    ObjectRecognition: (typeof import('./../views/gameCenter/components/games/ObjectRecognition/index.vue'))['default']
-    PageContent: (typeof import('./../components/CURD/PageContent.vue'))['default']
-    PageForm: (typeof import('./../components/CURD/PageForm.vue'))['default']
-    PageModal: (typeof import('./../components/CURD/PageModal.vue'))['default']
-    PageSearch: (typeof import('./../components/CURD/PageSearch.vue'))['default']
-    Pagination: (typeof import('./../components/Pagination/index.vue'))['default']
-    PicturePuzzle: (typeof import('./../views/gameCenter/components/games/PicturePuzzle/index.vue'))['default']
-    PicturePuzzleChild: (typeof import('./../views/gameCenter/components/games/PicturePuzzle/components/PicturePuzzleChild/index.vue'))['default']
-    PieChart: (typeof import('./../views/dashboard/components/PieChart.vue'))['default']
-    RadarChart: (typeof import('./../views/dashboard/components/RadarChart.vue'))['default']
-    Register: (typeof import('./../views/login/components/register/index.vue'))['default']
-    RehabilitationEvaluationLog: (typeof import('./../views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationLog/index.vue'))['default']
-    RehabilitationEvaluationLogDetail: (typeof import('./../views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationLogDetail/index.vue'))['default']
-    RehabilitationEvaluationLogIntro: (typeof import('./../views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationLogIntro/index.vue'))['default']
-    RehabilitationEvaluationMgr: (typeof import('./../views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationMgr/index.vue'))['default']
-    RehabilitationEvaluationMgrCognition: (typeof import('./../views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationMgr/components/RehabilitationEvaluationMgrCognition/index.vue'))['default']
-    RehabilitationEvaluationMgrScale: (typeof import('./../views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationMgr/components/RehabilitationEvaluationMgrScale/index.vue'))['default']
-    RehabilitationEvaluationReport: (typeof import('./../views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationReport/index.vue'))['default']
-    RehabilitationEvaluationReportLog: (typeof import('./../views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationReportLog/index.vue'))['default']
-    RehabilitationEvaluationResultDetail: (typeof import('./../views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationResultDetail/index.vue'))['default']
-    RehabilitationEvaluationResultList: (typeof import('./../views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationResultList/index.vue'))['default']
-    RehabilitationEvaluationScaleTestPage: (typeof import('./../views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationScaleTestPage/index.vue'))['default']
-    RehabilitationGoals: (typeof import('./../views/tester/components/RehabilitationGoals/index.vue'))['default']
-    RehabilitationTrainingAchievement: (typeof import('./../views/tester/components/RehabilitationTraining/RehabilitationTrainingAchievement/index.vue'))['default']
-    RehabilitationTrainingAdd: (typeof import('./../views/tester/components/RehabilitationTraining/RehabilitationTrainingAdd/index.vue'))['default']
-    RehabilitationTrainingAddTestItem: (typeof import('./../views/tester/components/RehabilitationTraining/RehabilitationTrainingAdd/components/RehabilitationTrainingAddTestItem/index.vue'))['default']
-    RehabilitationTrainingDetailAnalysis: (typeof import('./../views/tester/components/RehabilitationTraining/RehabilitationTrainingAchievement/components/RehabilitationTrainingDetailAnalysis/index.vue'))['default']
-    RehabilitationTrainingList: (typeof import('./../views/tester/components/RehabilitationTraining/RehabilitationTrainingList/index.vue'))['default']
-    RehabilitationTrainingTestItem: (typeof import('./../views/tester/components/RehabilitationTraining/RehabilitationTrainingList/components/RehabilitationTrainingTestItem/index.vue'))['default']
-    ResetPsw: (typeof import('./../views/login/components/resetPsw/index.vue'))['default']
-    ResidualDialog: (typeof import('./../components/ResidualDialog/index.vue'))['default']
-    ResidueRecognition: (typeof import('./../views/gameCenter/components/games/ResidueRecognition/index.vue'))['default']
-    RightToLeftDiv: (typeof import('./../components/MoveDiv/RightToLeftDiv/index.vue'))['default']
-    RouterLink: (typeof import('vue-router'))['RouterLink']
-    RouterView: (typeof import('vue-router'))['RouterView']
-    SeriesInference: (typeof import('./../views/gameCenter/components/games/SeriesInference/index.vue'))['default']
-    SeriesInferenceChild: (typeof import('./../views/gameCenter/components/games/SeriesInference/components/SeriesInferenceChild/index.vue'))['default']
-    Settings: (typeof import('./../layout/components/Settings/index.vue'))['default']
-    SetTransferTest: (typeof import('./../views/gameCenter/components/games/SetTransferTest/index.vue'))['default']
-    Sidebar: (typeof import('./../layout/components/Sidebar/index.vue'))['default']
-    SidebarLogo: (typeof import('./../layout/components/Sidebar/components/SidebarLogo.vue'))['default']
-    SidebarMenu: (typeof import('./../layout/components/Sidebar/components/SidebarMenu.vue'))['default']
-    SidebarMenuItem: (typeof import('./../layout/components/Sidebar/components/SidebarMenuItem.vue'))['default']
-    SidebarMenuItemTitle: (typeof import('./../layout/components/Sidebar/components/SidebarMenuItemTitle.vue'))['default']
-    SidebarMixTopMenu: (typeof import('./../layout/components/Sidebar/components/SidebarMixTopMenu.vue'))['default']
-    SimpleTitle: (typeof import('./../components/SimpleTitle/index.vue'))['default']
-    SingleUpload: (typeof import('./../components/Upload/SingleUpload.vue'))['default']
-    SizeSelect: (typeof import('./../components/SizeSelect/index.vue'))['default']
-    SpatialPositioning: (typeof import('./../views/gameCenter/components/games/SpatialPositioning/index.vue'))['default']
-    SuppressionControlTest: (typeof import('./../views/gameCenter/components/games/SuppressionControlTest/index.vue'))['default']
-    SvgIcon: (typeof import('./../components/SvgIcon/index.vue'))['default']
-    TableHeaderDiv: (typeof import('./../views/tester/manage/manage/components/TableHeaderDiv/index.vue'))['default']
-    TableInfoItem: (typeof import('./../views/tester/manage/manage/components/TableInfoItem/index.vue'))['default']
-    TableInfoLine: (typeof import('./../views/tester/manage/manage/components/TableInfoLine/index.vue'))['default']
-    TableSelect: (typeof import('./../components/TableSelect/index.vue'))['default']
-    TagsView: (typeof import('./../layout/components/TagsView/index.vue'))['default']
-    TesterManageTableButtons: (typeof import('./../views/tester/manage/manage/components/TesterManageTableButtons/index.vue'))['default']
-    TesterPersonalInfo: (typeof import('./../views/tester/components/TesterPersonalInfo/index.vue'))['default']
-    ThemeColorPicker: (typeof import('./../layout/components/Settings/components/ThemeColorPicker.vue'))['default']
-    TopRightClose: (typeof import('./../components/Close/TopRightClose/index.vue'))['default']
-    TotalScore: (typeof import('./../components/TotalScore/index.vue'))['default']
-    TransferTraining: (typeof import('./../views/gameCenter/components/games/TransferTraining/index.vue'))['default']
-    TTimerBtn: (typeof import('./../components/Button/TTimerBtn/index.vue'))['default']
-    TTShapeShow: (typeof import('./../views/gameCenter/components/games/TransferTraining/components/TTShapeShow/index.vue'))['default']
-    UserImport: (typeof import('./../views/system/user/components/user-import.vue'))['default']
-    VerbalMemory: (typeof import('./../views/gameCenter/components/games/VerbalMemory/index.vue'))['default']
-    VideoTemp: (typeof import('./../components/VideoTemp/index.vue'))['default']
-    VirtualKeyboardNumberInput: (typeof import('./../views/gameCenter/components/games/AssignTraining/components/VirtualKeyboardNumberInput/index.vue'))['default']
-    VoiceImp: (typeof import('./../components/VoiceImp/index.vue'))['default']
-    WangEditor: (typeof import('./../components/WangEditor/index.vue'))['default']
-    WorkingMemory: (typeof import('./../views/gameCenter/components/games/WorkingMemory/index.vue'))['default']
-    WuCountDown: (typeof import('./../components/WuCountDown/index.vue'))['default']
-    WuIsCorrect: (typeof import('./../components/WuIsCorrect/index.vue'))['default']
+    Ability: typeof import('./../views/gameCenter/components/games/WorkingMemory/components/ability/index.vue')['default']
+    AddTester: typeof import('./../views/tester/components/AddTester/index.vue')['default']
+    ADLPower: typeof import('./../views/gameCenter/components/games/ADLPower/index.vue')['default']
+    AppLink: typeof import('./../components/AppLink/index.vue')['default']
+    AppMain: typeof import('./../layout/components/AppMain/index.vue')['default']
+    AssignTraining: typeof import('./../views/gameCenter/components/games/AssignTraining/index.vue')['default']
+    ATMainShow: typeof import('./../views/gameCenter/components/games/AssignTraining/components/ATMainShow/index.vue')['default']
+    Avatar: typeof import('./../components/Chat/Avatar/index.vue')['default']
+    BarChart: typeof import('./../views/dashboard/components/BarChart.vue')['default']
+    Blend: typeof import('./../views/gameCenter/components/games/WorkingMemory/components/blend/index.vue')['default']
+    Breadcrumb: typeof import('./../components/Breadcrumb/index.vue')['default']
+    BreadthTraining: typeof import('./../views/gameCenter/components/games/BreadthTraining/index.vue')['default']
+    BTRandomPentagram: typeof import('./../views/gameCenter/components/games/BreadthTraining/components/BTRandomPentagram/index.vue')['default']
+    CalculationExercises: typeof import('./../views/gameCenter/components/games/CalculationExercises/index.vue')['default']
+    CalculationRules: typeof import('./../views/gameCenter/components/games/CalculationRules/index.vue')['default']
+    CaseAdd: typeof import('./../views/tester/components/CaseInformation/CaseAdd/index.vue')['default']
+    CaseInformation: typeof import('./../views/tester/components/CaseInformation/index.vue')['default']
+    CaseLog: typeof import('./../views/tester/components/CaseInformation/CaseLog/index.vue')['default']
+    CExercisesMainShow: typeof import('./../views/gameCenter/components/games/CalculationExercises/components/CExercisesMainShow/index.vue')['default']
+    CharacterMemory: typeof import('./../views/gameCenter/components/games/CharacterMemory/index.vue')['default']
+    CharacterMemoryChild: typeof import('./../views/gameCenter/components/games/CharacterMemory/components/CharacterMemoryChild/index.vue')['default']
+    ChatComponent: typeof import('./../components/Chat/ChatComponent/index.vue')['default']
+    CocosDialog: typeof import('./../views/gameCenter/components/games/CocosDialog/index.vue')['default']
+    CognitiveAbility5EC301: typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbility5EC301/index.vue')['default']
+    CognitiveAbilitySellingTest: typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilitySellingTest/index.vue')['default']
+    CognitiveAbilityStarShapedSales: typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilityStarShapedSales/index.vue')['default']
+    CognitiveAbilityTask: typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/index.vue')['default']
+    CognitiveAbilityTaskAuditoryTraining: typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilityTaskAuditoryTraining/index.vue')['default']
+    CognitiveAbilityTaskBoston: typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilityTaskBoston/index.vue')['default']
+    CognitiveAbilityTaskDigitalMemoryTest: typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilityTaskDigitalMemoryTest/index.vue')['default']
+    CognitiveAbilityTaskDrawClock: typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilityTaskDrawClock/index.vue')['default']
+    CognitiveAbilityTaskMMSE: typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilityTaskMMSE/index.vue')['default']
+    CognitiveAbilityTaskMoca: typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilityTaskMoca/index.vue')['default']
+    CognitiveAbilityTaskOralExpression: typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilityTaskOralExpression/index.vue')['default']
+    CognitiveAbilityTaskVisualTraining: typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilityTaskVisualTraining/index.vue')['default']
+    CognitiveAbilityWisconsin: typeof import('./../views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilityWisconsin/index.vue')['default']
+    Computation: typeof import('./../views/gameCenter/components/games/Computation/index.vue')['default']
+    ConceptFormation: typeof import('./../views/gameCenter/components/games/ConceptFormation/index.vue')['default']
+    CountingDots: typeof import('./../views/gameCenter/components/games/CountingDots/index.vue')['default']
+    CountingDotsChild: typeof import('./../views/gameCenter/components/games/CountingDots/components/CountingDotsChild/index.vue')['default']
+    CRRuleShow: typeof import('./../views/gameCenter/components/games/CalculationRules/components/CRRuleShow/index.vue')['default']
+    CTopicShow: typeof import('./../views/gameCenter/components/games/Computation/components/CTopicShow/index.vue')['default']
+    DeptTree: typeof import('./../views/system/user/components/dept-tree.vue')['default']
+    Dictionary: typeof import('./../components/Dictionary/index.vue')['default']
+    DigitalUnderstanding: typeof import('./../views/gameCenter/components/games/DigitalUnderstanding/index.vue')['default']
+    DUMainShow: typeof import('./../views/gameCenter/components/games/DigitalUnderstanding/components/DUMainShow/index.vue')['default']
+    EditDiv: typeof import('./../components/Chat/EditDiv/index.vue')['default']
+    ElBacktop: typeof import('element-plus/es')['ElBacktop']
+    ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
+    ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
+    ElButton: typeof import('element-plus/es')['ElButton']
+    ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
+    ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
+    ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
+    ElDialog: typeof import('element-plus/es')['ElDialog']
+    ElDivider: typeof import('element-plus/es')['ElDivider']
+    ElDrawer: typeof import('element-plus/es')['ElDrawer']
+    ElDropdown: typeof import('element-plus/es')['ElDropdown']
+    ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
+    ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
+    ElForm: typeof import('element-plus/es')['ElForm']
+    ElFormItem: typeof import('element-plus/es')['ElFormItem']
+    ElIcon: typeof import('element-plus/es')['ElIcon']
+    ElImage: typeof import('element-plus/es')['ElImage']
+    ElMenu: typeof import('element-plus/es')['ElMenu']
+    ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
+    ElOption: typeof import('element-plus/es')['ElOption']
+    ElPageHeader: typeof import('element-plus/es')['ElPageHeader']
+    ElPagination: typeof import('element-plus/es')['ElPagination']
+    ElProgress: typeof import('element-plus/es')['ElProgress']
+    ElRadio: typeof import('element-plus/es')['ElRadio']
+    ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
+    ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
+    ElSelect: typeof import('element-plus/es')['ElSelect']
+    ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
+    ElSwitch: typeof import('element-plus/es')['ElSwitch']
+    ElTooltip: typeof import('element-plus/es')['ElTooltip']
+    ElWatermark: typeof import('element-plus/es')['ElWatermark']
+    EmojiSelector: typeof import('./../components/Chat/emoji-selector/index.vue')['default']
+    FileUpload: typeof import('./../components/Upload/FileUpload.vue')['default']
+    FindNumberTraining: typeof import('./../views/gameCenter/components/games/FindNumberTraining/index.vue')['default']
+    Fish: typeof import('./../views/gameCenter/components/games/SuppressionControlTest/components/fish/index.vue')['default']
+    FixedTransfer: typeof import('./../views/gameCenter/components/games/FixedTransfer/index.vue')['default']
+    FluidDnd: typeof import('./../views/gameCenter/components/games/DigitalUnderstanding/components/FluidDnd/index.vue')['default']
+    FormatCountDown: typeof import('./../components/FormatCountDown/index.vue')['default']
+    FunnelChart: typeof import('./../views/dashboard/components/FunnelChart.vue')['default']
+    GithubCorner: typeof import('./../components/GithubCorner/index.vue')['default']
+    Hamburger: typeof import('./../components/Hamburger/index.vue')['default']
+    IconSelect: typeof import('./../components/IconSelect/index.vue')['default']
+    IEpArrowLeft: typeof import('~icons/ep/arrow-left')['default']
+    IEpArrowRight: typeof import('~icons/ep/arrow-right')['default']
+    IEpClose: typeof import('~icons/ep/close')['default']
+    IEpRefresh: typeof import('~icons/ep/refresh')['default']
+    IEpSearch: typeof import('~icons/ep/search')['default']
+    IEpTimer: typeof import('~icons/ep/timer')['default']
+    IEpUpload: typeof import('~icons/ep/upload')['default']
+    IndexBack: typeof import('./../components/Chat/emoji-selector/index-back.vue')['default']
+    IndexBarA: typeof import('./../views/dashboard/components/IndexBarA.vue')['default']
+    IndexBarS: typeof import('./../views/dashboard/components/IndexBarS.vue')['default']
+    IndexProgressBar: typeof import('./../views/dashboard/components/IndexProgressBar.vue')['default']
+    IndexSmallPieS: typeof import('./../views/dashboard/components/IndexSmallPieS.vue')['default']
+    IndexSmallTitle: typeof import('./../views/dashboard/components/IndexSmallTitle.vue')['default']
+    IndexSmoothLineS: typeof import('./../views/dashboard/components/IndexSmoothLineS.vue')['default']
+    InputWithBorder: typeof import('./../components/WuInput/InputWithBorder/index.vue')['default']
+    Introduction: typeof import('./../views/gameCenter/components/Introduction/index.vue')['default']
+    LangSelect: typeof import('./../components/LangSelect/index.vue')['default']
+    LayoutSelect: typeof import('./../layout/components/Settings/components/LayoutSelect.vue')['default']
+    LogicalReasoning: typeof import('./../views/gameCenter/components/games/LogicalReasoning/index.vue')['default']
+    Login: typeof import('./../views/login/components/login/index.vue')['default']
+    MessageItem: typeof import('./../components/Chat/MessageItem/index.vue')['default']
+    MultiUpload: typeof import('./../components/Upload/MultiUpload.vue')['default']
+    MyFullScreenDialog: typeof import('./../components/MyFullScreenDialog/index.vue')['default']
+    NavBar: typeof import('./../layout/components/NavBar/index.vue')['default']
+    NavbarLeft: typeof import('./../layout/components/NavBar/components/NavbarLeft.vue')['default']
+    NavbarRight: typeof import('./../layout/components/NavBar/components/NavbarRight.vue')['default']
+    NumMdel: typeof import('./../views/gameCenter/components/games/LogicalReasoning/components/numMdel/index.vue')['default']
+    ObjectRecognition: typeof import('./../views/gameCenter/components/games/ObjectRecognition/index.vue')['default']
+    PageContent: typeof import('./../components/CURD/PageContent.vue')['default']
+    PageForm: typeof import('./../components/CURD/PageForm.vue')['default']
+    PageModal: typeof import('./../components/CURD/PageModal.vue')['default']
+    PageSearch: typeof import('./../components/CURD/PageSearch.vue')['default']
+    Pagination: typeof import('./../components/Pagination/index.vue')['default']
+    PicturePuzzle: typeof import('./../views/gameCenter/components/games/PicturePuzzle/index.vue')['default']
+    PicturePuzzleChild: typeof import('./../views/gameCenter/components/games/PicturePuzzle/components/PicturePuzzleChild/index.vue')['default']
+    PieChart: typeof import('./../views/dashboard/components/PieChart.vue')['default']
+    RadarChart: typeof import('./../views/dashboard/components/RadarChart.vue')['default']
+    Register: typeof import('./../views/login/components/register/index.vue')['default']
+    RehabilitationEvaluationLog: typeof import('./../views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationLog/index.vue')['default']
+    RehabilitationEvaluationLogDetail: typeof import('./../views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationLogDetail/index.vue')['default']
+    RehabilitationEvaluationLogIntro: typeof import('./../views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationLogIntro/index.vue')['default']
+    RehabilitationEvaluationMgr: typeof import('./../views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationMgr/index.vue')['default']
+    RehabilitationEvaluationMgrCognition: typeof import('./../views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationMgr/components/RehabilitationEvaluationMgrCognition/index.vue')['default']
+    RehabilitationEvaluationMgrScale: typeof import('./../views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationMgr/components/RehabilitationEvaluationMgrScale/index.vue')['default']
+    RehabilitationEvaluationReport: typeof import('./../views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationReport/index.vue')['default']
+    RehabilitationEvaluationReportLog: typeof import('./../views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationReportLog/index.vue')['default']
+    RehabilitationEvaluationResultDetail: typeof import('./../views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationResultDetail/index.vue')['default']
+    RehabilitationEvaluationResultList: typeof import('./../views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationResultList/index.vue')['default']
+    RehabilitationEvaluationScaleTestPage: typeof import('./../views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationScaleTestPage/index.vue')['default']
+    RehabilitationGoals: typeof import('./../views/tester/components/RehabilitationGoals/index.vue')['default']
+    RehabilitationTrainingAchievement: typeof import('./../views/tester/components/RehabilitationTraining/RehabilitationTrainingAchievement/index.vue')['default']
+    RehabilitationTrainingAdd: typeof import('./../views/tester/components/RehabilitationTraining/RehabilitationTrainingAdd/index.vue')['default']
+    RehabilitationTrainingAddTestItem: typeof import('./../views/tester/components/RehabilitationTraining/RehabilitationTrainingAdd/components/RehabilitationTrainingAddTestItem/index.vue')['default']
+    RehabilitationTrainingDetailAnalysis: typeof import('./../views/tester/components/RehabilitationTraining/RehabilitationTrainingAchievement/components/RehabilitationTrainingDetailAnalysis/index.vue')['default']
+    RehabilitationTrainingList: typeof import('./../views/tester/components/RehabilitationTraining/RehabilitationTrainingList/index.vue')['default']
+    RehabilitationTrainingTestItem: typeof import('./../views/tester/components/RehabilitationTraining/RehabilitationTrainingList/components/RehabilitationTrainingTestItem/index.vue')['default']
+    ResetPsw: typeof import('./../views/login/components/resetPsw/index.vue')['default']
+    ResidualDialog: typeof import('./../components/ResidualDialog/index.vue')['default']
+    ResidueRecognition: typeof import('./../views/gameCenter/components/games/ResidueRecognition/index.vue')['default']
+    RightToLeftDiv: typeof import('./../components/MoveDiv/RightToLeftDiv/index.vue')['default']
+    RouterLink: typeof import('vue-router')['RouterLink']
+    RouterView: typeof import('vue-router')['RouterView']
+    SeriesInference: typeof import('./../views/gameCenter/components/games/SeriesInference/index.vue')['default']
+    SeriesInferenceChild: typeof import('./../views/gameCenter/components/games/SeriesInference/components/SeriesInferenceChild/index.vue')['default']
+    Settings: typeof import('./../layout/components/Settings/index.vue')['default']
+    SetTransferTest: typeof import('./../views/gameCenter/components/games/SetTransferTest/index.vue')['default']
+    Sidebar: typeof import('./../layout/components/Sidebar/index.vue')['default']
+    SidebarLogo: typeof import('./../layout/components/Sidebar/components/SidebarLogo.vue')['default']
+    SidebarMenu: typeof import('./../layout/components/Sidebar/components/SidebarMenu.vue')['default']
+    SidebarMenuItem: typeof import('./../layout/components/Sidebar/components/SidebarMenuItem.vue')['default']
+    SidebarMenuItemTitle: typeof import('./../layout/components/Sidebar/components/SidebarMenuItemTitle.vue')['default']
+    SidebarMixTopMenu: typeof import('./../layout/components/Sidebar/components/SidebarMixTopMenu.vue')['default']
+    SimpleTitle: typeof import('./../components/SimpleTitle/index.vue')['default']
+    SingleUpload: typeof import('./../components/Upload/SingleUpload.vue')['default']
+    SizeSelect: typeof import('./../components/SizeSelect/index.vue')['default']
+    SpatialPositioning: typeof import('./../views/gameCenter/components/games/SpatialPositioning/index.vue')['default']
+    SuppressionControlTest: typeof import('./../views/gameCenter/components/games/SuppressionControlTest/index.vue')['default']
+    SvgIcon: typeof import('./../components/SvgIcon/index.vue')['default']
+    TableHeaderDiv: typeof import('./../views/tester/manage/manage/components/TableHeaderDiv/index.vue')['default']
+    TableInfoItem: typeof import('./../views/tester/manage/manage/components/TableInfoItem/index.vue')['default']
+    TableInfoLine: typeof import('./../views/tester/manage/manage/components/TableInfoLine/index.vue')['default']
+    TableSelect: typeof import('./../components/TableSelect/index.vue')['default']
+    TagsView: typeof import('./../layout/components/TagsView/index.vue')['default']
+    TesterManageTableButtons: typeof import('./../views/tester/manage/manage/components/TesterManageTableButtons/index.vue')['default']
+    TesterPersonalInfo: typeof import('./../views/tester/components/TesterPersonalInfo/index.vue')['default']
+    ThemeColorPicker: typeof import('./../layout/components/Settings/components/ThemeColorPicker.vue')['default']
+    TopRightClose: typeof import('./../components/Close/TopRightClose/index.vue')['default']
+    TotalScore: typeof import('./../components/TotalScore/index.vue')['default']
+    TransferTraining: typeof import('./../views/gameCenter/components/games/TransferTraining/index.vue')['default']
+    TTimerBtn: typeof import('./../components/Button/TTimerBtn/index.vue')['default']
+    TTShapeShow: typeof import('./../views/gameCenter/components/games/TransferTraining/components/TTShapeShow/index.vue')['default']
+    UserImport: typeof import('./../views/system/user/components/user-import.vue')['default']
+    VerbalMemory: typeof import('./../views/gameCenter/components/games/VerbalMemory/index.vue')['default']
+    VideoTemp: typeof import('./../components/VideoTemp/index.vue')['default']
+    VirtualKeyboardNumberInput: typeof import('./../views/gameCenter/components/games/AssignTraining/components/VirtualKeyboardNumberInput/index.vue')['default']
+    VoiceImp: typeof import('./../components/VoiceImp/index.vue')['default']
+    WangEditor: typeof import('./../components/WangEditor/index.vue')['default']
+    WorkingMemory: typeof import('./../views/gameCenter/components/games/WorkingMemory/index.vue')['default']
+    WuCountDown: typeof import('./../components/WuCountDown/index.vue')['default']
+    WuIsCorrect: typeof import('./../components/WuIsCorrect/index.vue')['default']
+  }
+  export interface ComponentCustomProperties {
+    vLoading: typeof import('element-plus/es')['ElLoadingDirective']
   }
 }

+ 6 - 6
src/utils/websoket.ts

@@ -43,25 +43,25 @@ class Socket {
   }
   //打开
   onOpen(event: Event) {
-    console.log('WebSocket opened:', event)
+    // console.log('WebSocket opened:', event)
     this.reconnectAttempts = 0
     this.startHeartbeat()
     this.emit('open', event)
   }
   //收到的WebSocket消息
   onMessage(event: MessageEvent) {
-    console.log('WebSocket message received:', event.data)
+    // console.log('WebSocket message received:', event.data)
     this.emit('message', event.data)
   }
   //错误
   onError(event: Event) {
-    console.error('WebSocket error:', event)
+    // console.error('WebSocket error:', event)
     this.emit('error', event)
   }
   //重连逻辑中,在连接失败后自动重新连接
   onClose(event: CloseEvent) {
-    console.log('WebSocket closed:', event)
-    this.stopHeartbeat()
+    // console.log('WebSocket closed:', event)
+    // this.stopHeartbeat()
     this.emit('close', event)
     // 重连逻辑中,在连接失败后自动重新连接,但会限制重连的次数和每次重连之间的间隔时间
     if (this.opts.maxReconnectAttempts !== 0 && this.reconnectAttempts < this.opts.maxReconnectAttempts!) {
@@ -117,7 +117,7 @@ class Socket {
 }
 
 export function useSocket(url: string = import.meta.env.VITE_WEBSOCKET_SERVER, opts?: SocketOptions) {
-  console.log('websocket-url: ', url)
+  // console.log('websocket-url: ', url)
   const socket = new Socket(url, opts)
 
   onUnmounted(() => {

+ 6 - 1
src/views/gameCenter/components/Introduction/index.vue

@@ -26,7 +26,12 @@
       </div>
 
       <div class="w-full flex-center mt-[200px]">
-        <el-button type="primary" @click="beginGame()" size="large" class="text-[24px] p-x-[48px] p-y-[24px]">
+        <el-button
+          type="primary"
+          @click="beginGame()"
+          size="large"
+          class="text-[24px] p-x-[48px] p-y-[2px] flex-center"
+        >
           开始游戏
         </el-button>
       </div>

+ 112 - 0
src/views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilityTask-demo/index.vue

@@ -0,0 +1,112 @@
+<template>
+  <section class="boston-container wh-full overflow-hidden relative">
+    <div v-if="showCountDown" class="absolute top-[50%] left-[50%] translate-[-50%] w-[400px] h-[200px] flex-center">
+      <div class="w-[120px] h-[120px] relative">
+        <wu-count-down :begin="countDownBegin" :num="5" @count-down-end="countDownEnd" />
+      </div>
+      <span v-if="!countDownBegin" class="font-600 text-[36px] text-[#089BAB]">{{ countDownStr }}</span>
+    </div>
+    <div
+      v-else
+      class="absolute top-[50%] left-[50%] translate-[-50%] w-[1100px] h-[640px] rounded-[8px] bg-[#ffffffff] shadow-lg flex flex-row items-center justify-around"
+    ></div>
+  </section>
+</template>
+
+<script setup lang="ts">
+/*
+ * 组件名: CognitiveAbilityTask-demo
+ * 组件用途: 认知任务-模板
+ * 创建日期: 2024/7/16
+ * 编写者: JutarryWu
+ */
+import EvaluationSTRecordInfoAPI from '@/api/tester/evaluation/stRecord'
+import { useUserStore } from '@/store'
+
+const isMainWin = ref(false)
+
+defineOptions({
+  name: 'CognitiveAbilityTask-demo',
+  inheritAttrs: false
+})
+
+const props = defineProps({
+  parentId: {
+    type: String,
+    default: ''
+  }
+})
+
+const emits = defineEmits(['showResult', 'close'])
+const userStore = useUserStore()
+const showCountDown = ref(true)
+const countDownBegin = ref(false)
+const countDownStr = ref('测试马上开始!')
+const loading = ref(false)
+const dialogVisible = ref(false) // 学历弹窗
+
+const closeDialog = () => {
+  dialogVisible.value = false
+  localStorage.setItem('tow-win-draw-clock-show-dialog', 'NO')
+}
+
+/**
+ * 提交操作
+ */
+const handleSubmit = () => {}
+
+const countDownEnd = () => {
+  countDownBegin.value = false
+  showCountDown.value = false
+  setTimeout(() => {
+    console.log('')
+  }, 1000)
+}
+
+async function exec() {
+  isMainWin.value = window.location.href.includes('win=main')
+  if (isMainWin.value) {
+    countDownEnd()
+  } else {
+    setTimeout(() => {
+      countDownBegin.value = true
+    }, 2300)
+  }
+}
+
+onMounted(() => {
+  exec()
+
+  window.addEventListener('storage', (val) => {
+    if (isMainWin.value) {
+      console.log('')
+    } else {
+      console.log('')
+    }
+  })
+})
+</script>
+
+<style scoped lang="scss">
+.boston-container {
+  background: url('/static/image/user/bg-evaluate.png') no-repeat 0 0 / 100% 100% border-box border-box fixed;
+
+  .el-button + .el-button {
+    margin-left: 0;
+  }
+
+  .shadow {
+    scale: 1.37;
+    box-shadow:
+      0 0 0 2px #fdfdfd inset,
+      0 0 0 0 rgba(0, 0, 0, 0);
+  }
+}
+
+:deep(h3) {
+  margin-top: 18px !important;
+  margin-bottom: 5px !important;
+  margin-block-end: 5px !important;
+  margin-block-start: 18px !important;
+}
+</style>

+ 112 - 0
src/views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilityTaskAuditoryTraining/index.vue

@@ -0,0 +1,112 @@
+<template>
+  <section class="boston-container wh-full overflow-hidden relative">
+    <div v-if="showCountDown" class="absolute top-[50%] left-[50%] translate-[-50%] w-[400px] h-[200px] flex-center">
+      <div class="w-[120px] h-[120px] relative">
+        <wu-count-down :begin="countDownBegin" :num="5" @count-down-end="countDownEnd" />
+      </div>
+      <span v-if="!countDownBegin" class="font-600 text-[36px] text-[#089BAB]">{{ countDownStr }}</span>
+    </div>
+    <div
+      v-else
+      class="absolute top-[50%] left-[50%] translate-[-50%] w-[1100px] h-[640px] rounded-[8px] bg-[#ffffffff] shadow-lg flex flex-row items-center justify-around"
+    ></div>
+  </section>
+</template>
+
+<script setup lang="ts">
+/*
+ * 组件名: CognitiveAbilityTaskAuditoryTraining
+ * 组件用途: 常规听康复训练
+ * 创建日期: 2024/7/16
+ * 编写者: JutarryWu
+ */
+import EvaluationSTRecordInfoAPI from '@/api/tester/evaluation/stRecord'
+import { useUserStore } from '@/store'
+
+const isMainWin = ref(false)
+
+defineOptions({
+  name: 'CognitiveAbilityTaskAuditoryTraining',
+  inheritAttrs: false
+})
+
+const props = defineProps({
+  parentId: {
+    type: String,
+    default: ''
+  }
+})
+
+const emits = defineEmits(['showResult', 'close'])
+const userStore = useUserStore()
+const showCountDown = ref(true)
+const countDownBegin = ref(false)
+const countDownStr = ref('测试马上开始!')
+const loading = ref(false)
+const dialogVisible = ref(false) // 学历弹窗
+
+const closeDialog = () => {
+  dialogVisible.value = false
+  localStorage.setItem('tow-win-draw-clock-show-dialog', 'NO')
+}
+
+/**
+ * 提交操作
+ */
+const handleSubmit = () => {}
+
+const countDownEnd = () => {
+  countDownBegin.value = false
+  showCountDown.value = false
+  setTimeout(() => {
+    console.log('')
+  }, 1000)
+}
+
+async function exec() {
+  isMainWin.value = window.location.href.includes('win=main')
+  if (isMainWin.value) {
+    countDownEnd()
+  } else {
+    setTimeout(() => {
+      countDownBegin.value = true
+    }, 2300)
+  }
+}
+
+onMounted(() => {
+  exec()
+
+  window.addEventListener('storage', (val) => {
+    if (isMainWin.value) {
+      console.log('')
+    } else {
+      console.log('')
+    }
+  })
+})
+</script>
+
+<style scoped lang="scss">
+.boston-container {
+  background: url('/static/image/user/bg-evaluate.png') no-repeat 0 0 / 100% 100% border-box border-box fixed;
+
+  .el-button + .el-button {
+    margin-left: 0;
+  }
+
+  .shadow {
+    scale: 1.37;
+    box-shadow:
+      0 0 0 2px #fdfdfd inset,
+      0 0 0 0 rgba(0, 0, 0, 0);
+  }
+}
+
+:deep(h3) {
+  margin-top: 18px !important;
+  margin-bottom: 5px !important;
+  margin-block-end: 5px !important;
+  margin-block-start: 18px !important;
+}
+</style>

+ 112 - 0
src/views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilityTaskOralExpression/index.vue

@@ -0,0 +1,112 @@
+<template>
+  <section class="boston-container wh-full overflow-hidden relative">
+    <div v-if="showCountDown" class="absolute top-[50%] left-[50%] translate-[-50%] w-[400px] h-[200px] flex-center">
+      <div class="w-[120px] h-[120px] relative">
+        <wu-count-down :begin="countDownBegin" :num="5" @count-down-end="countDownEnd" />
+      </div>
+      <span v-if="!countDownBegin" class="font-600 text-[36px] text-[#089BAB]">{{ countDownStr }}</span>
+    </div>
+    <div
+      v-else
+      class="absolute top-[50%] left-[50%] translate-[-50%] w-[1100px] h-[640px] rounded-[8px] bg-[#ffffffff] shadow-lg flex flex-row items-center justify-around"
+    ></div>
+  </section>
+</template>
+
+<script setup lang="ts">
+/*
+ * 组件名: CognitiveAbilityTaskOralExpression
+ * 组件用途: 常规康复训练 - 口语表达
+ * 创建日期: 2024/7/16
+ * 编写者: JutarryWu
+ */
+import EvaluationSTRecordInfoAPI from '@/api/tester/evaluation/stRecord'
+import { useUserStore } from '@/store'
+
+const isMainWin = ref(false)
+
+defineOptions({
+  name: 'CognitiveAbilityTaskOralExpression',
+  inheritAttrs: false
+})
+
+const props = defineProps({
+  parentId: {
+    type: String,
+    default: ''
+  }
+})
+
+const emits = defineEmits(['showResult', 'close'])
+const userStore = useUserStore()
+const showCountDown = ref(true)
+const countDownBegin = ref(false)
+const countDownStr = ref('测试马上开始!')
+const loading = ref(false)
+const dialogVisible = ref(false) // 学历弹窗
+
+const closeDialog = () => {
+  dialogVisible.value = false
+  localStorage.setItem('tow-win-draw-clock-show-dialog', 'NO')
+}
+
+/**
+ * 提交操作
+ */
+const handleSubmit = () => {}
+
+const countDownEnd = () => {
+  countDownBegin.value = false
+  showCountDown.value = false
+  setTimeout(() => {
+    console.log('')
+  }, 1000)
+}
+
+async function exec() {
+  isMainWin.value = window.location.href.includes('win=main')
+  if (isMainWin.value) {
+    countDownEnd()
+  } else {
+    setTimeout(() => {
+      countDownBegin.value = true
+    }, 2300)
+  }
+}
+
+onMounted(() => {
+  exec()
+
+  window.addEventListener('storage', (val) => {
+    if (isMainWin.value) {
+      console.log('')
+    } else {
+      console.log('')
+    }
+  })
+})
+</script>
+
+<style scoped lang="scss">
+.boston-container {
+  background: url('/static/image/user/bg-evaluate.png') no-repeat 0 0 / 100% 100% border-box border-box fixed;
+
+  .el-button + .el-button {
+    margin-left: 0;
+  }
+
+  .shadow {
+    scale: 1.37;
+    box-shadow:
+      0 0 0 2px #fdfdfd inset,
+      0 0 0 0 rgba(0, 0, 0, 0);
+  }
+}
+
+:deep(h3) {
+  margin-top: 18px !important;
+  margin-bottom: 5px !important;
+  margin-block-end: 5px !important;
+  margin-block-start: 18px !important;
+}
+</style>

+ 112 - 0
src/views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/CognitiveAbilityTaskVisualTraining/index.vue

@@ -0,0 +1,112 @@
+<template>
+  <section class="boston-container wh-full overflow-hidden relative">
+    <div v-if="showCountDown" class="absolute top-[50%] left-[50%] translate-[-50%] w-[400px] h-[200px] flex-center">
+      <div class="w-[120px] h-[120px] relative">
+        <wu-count-down :begin="countDownBegin" :num="5" @count-down-end="countDownEnd" />
+      </div>
+      <span v-if="!countDownBegin" class="font-600 text-[36px] text-[#089BAB]">{{ countDownStr }}</span>
+    </div>
+    <div
+      v-else
+      class="absolute top-[50%] left-[50%] translate-[-50%] w-[1100px] h-[640px] rounded-[8px] bg-[#ffffffff] shadow-lg flex flex-row items-center justify-around"
+    ></div>
+  </section>
+</template>
+
+<script setup lang="ts">
+/*
+ * 组件名: CognitiveAbilityTaskVisualTraining
+ * 组件用途: 常规视康复训练
+ * 创建日期: 2024/7/16
+ * 编写者: JutarryWu
+ */
+import EvaluationSTRecordInfoAPI from '@/api/tester/evaluation/stRecord'
+import { useUserStore } from '@/store'
+
+const isMainWin = ref(false)
+
+defineOptions({
+  name: 'CognitiveAbilityTaskVisualTraining',
+  inheritAttrs: false
+})
+
+const props = defineProps({
+  parentId: {
+    type: String,
+    default: ''
+  }
+})
+
+const emits = defineEmits(['showResult', 'close'])
+const userStore = useUserStore()
+const showCountDown = ref(true)
+const countDownBegin = ref(false)
+const countDownStr = ref('测试马上开始!')
+const loading = ref(false)
+const dialogVisible = ref(false) // 学历弹窗
+
+const closeDialog = () => {
+  dialogVisible.value = false
+  localStorage.setItem('tow-win-draw-clock-show-dialog', 'NO')
+}
+
+/**
+ * 提交操作
+ */
+const handleSubmit = () => {}
+
+const countDownEnd = () => {
+  countDownBegin.value = false
+  showCountDown.value = false
+  setTimeout(() => {
+    console.log('')
+  }, 1000)
+}
+
+async function exec() {
+  isMainWin.value = window.location.href.includes('win=main')
+  if (isMainWin.value) {
+    countDownEnd()
+  } else {
+    setTimeout(() => {
+      countDownBegin.value = true
+    }, 2300)
+  }
+}
+
+onMounted(() => {
+  exec()
+
+  window.addEventListener('storage', (val) => {
+    if (isMainWin.value) {
+      console.log('')
+    } else {
+      console.log('')
+    }
+  })
+})
+</script>
+
+<style scoped lang="scss">
+.boston-container {
+  background: url('/static/image/user/bg-evaluate.png') no-repeat 0 0 / 100% 100% border-box border-box fixed;
+
+  .el-button + .el-button {
+    margin-left: 0;
+  }
+
+  .shadow {
+    scale: 1.37;
+    box-shadow:
+      0 0 0 2px #fdfdfd inset,
+      0 0 0 0 rgba(0, 0, 0, 0);
+  }
+}
+
+:deep(h3) {
+  margin-top: 18px !important;
+  margin-bottom: 5px !important;
+  margin-block-end: 5px !important;
+  margin-block-start: 18px !important;
+}
+</style>

+ 21 - 0
src/views/tester/components/RehabilitationEvaluation/CognitiveAbilityTask/index.vue

@@ -68,6 +68,27 @@
       @show-result="showResult"
       @close="handleClose"
     />
+    <!-- 常规视康复训练 -->
+    <cognitive-ability-task-visual-training
+      v-if="props.cognitionId === '98' && taskBegin"
+      :parent-id="props.parentId"
+      @show-result="showResult"
+      @close="handleClose"
+    />
+    <!-- 常规听康复训练 -->
+    <cognitive-ability-task-auditory-training
+      v-if="props.cognitionId === '99' && taskBegin"
+      :parent-id="props.parentId"
+      @show-result="showResult"
+      @close="handleClose"
+    />
+    <!-- 口语表达 -->
+    <cognitive-ability-task-oral-expression
+      v-if="props.cognitionId === '100' && taskBegin"
+      :parent-id="props.parentId"
+      @show-result="showResult"
+      @close="handleClose"
+    />
 
     <el-drawer v-model="detailVisible" :with-header="false" append-to-body destroy-on-close size="84%">
       <rehabilitation-evaluation-result-detail v-if="detailVisible" :id="resultId" @close="closeDrawer" />

+ 10 - 3
src/views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationLogDetail/index.vue

@@ -10,7 +10,11 @@
           :key="`scale-${index}`"
           class="d-list-item m-[12px] rounded-[8px] flex flex-row"
         >
-          <el-image :src="`static/image/cover/icon-item-${parseInt(<string>item.id) % 9}.png`" fit="fill" class="w-[190px] h-full" />
+          <el-image
+            :src="`static/image/cover/icon-item-${parseInt(<string>item.id) % 9}.png`"
+            fit="fill"
+            class="w-[190px] h-full"
+          />
           <div class="flex-1 p-[16px] pos-relative">
             <div class="text-[20px] font-600 line-height-[24px]">{{ item.sname }}</div>
             <div class="text-[15px] text-[#666] mt-[8px] text-2-ellipsis">{{ item.info?.intro }}</div>
@@ -80,6 +84,7 @@
         :parent-id="targetItem.parentId"
         :id="targetItem.id"
         :name="targetItem.name"
+        :mode="targetItem.mode"
         @close="showInfoDetail = false"
       />
     </right-to-left-div>
@@ -119,7 +124,8 @@ const targetItem = ref({
   type: 0,
   parentId: '',
   id: '',
-  name: ''
+  name: '',
+  mode: -1
 })
 
 /**
@@ -141,7 +147,8 @@ const beginTest = (item: EvaluationScaleSubjectVO | EvaluationCognitionSubjectVO
       type: type,
       parentId: item.id!, // 康复评定中评定任务的关联ID
       id: type === 0 ? item.subjectId! : item.taskId!, // 评定任务的真实ID
-      name: type === 0 ? item.sname! : item.tname!
+      name: type === 0 ? item.sname! : item.tname!,
+      mode: type === 0 ? 2 : Number(item.info!.type) // 0:双人模式 1:单人模式 2:量表无模式
     }
     showInfoDetail.value = true
 

+ 5 - 1
src/views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationLogIntro/index.vue

@@ -85,6 +85,10 @@ const props = defineProps({
   name: {
     type: String,
     default: ''
+  },
+  mode: {
+    type: Number,
+    default: -1
   }
 })
 
@@ -125,7 +129,7 @@ function optTestPage() {
   }
 
   // 如果是副窗口 则通知Electron打开住窗口 并启动显示主副标识程序
-  if (!window.location.href.includes('win=main')) {
+  if (props.mode === 0 && !window.location.href.includes('win=main')) {
     // 设置主副窗口标识: instance用来通知当前窗口显示主副标识  localStorage用来通知其他窗口显示主副标识
     instance?.proxy?.$Bus.emit('tow-win-show-is-main-win', 'YES')
     localStorage.setItem('tow-win-show-is-main-win', 'YES')

+ 6 - 1
src/views/tester/components/RehabilitationEvaluation/RehabilitationEvaluationMgr/components/RehabilitationEvaluationMgrCognition/index.vue

@@ -37,7 +37,12 @@
         @selection-change="handleSelectionChange"
       >
         <el-table-column type="selection" min-width="1" align="center" :reserve-selection="true" />
-        <el-table-column prop="name" label="认知任务名称" min-width="5" />
+        <el-table-column prop="name" label="认知任务名称" min-width="5">
+          <template #default="scope">
+            <span class="inline-block mr-12px">{{ scope.row.name }}</span>
+            <el-tag v-if="scope.row.type === '0'" type="primary" size="small">双人模式</el-tag>
+          </template>
+        </el-table-column>
         <el-table-column prop="intro" label="简介" show-overflow-tooltip min-width="19" />
       </el-table>