Просмотр исходного кода

feat(student): 新增六顶思考帽工具的展示与详情功能

1. 移除六顶思考帽工具卡片的默认隐藏限制
2. 在选择题详情弹窗中添加六顶思考帽工具的渲染逻辑
3. 扩展processWorkContent函数支持toolType 832的解析
lsc 4 дней назад
Родитель
Сommit
3279078e38

+ 1 - 1
src/components/CollapsibleToolbar/index2.vue

@@ -759,7 +759,7 @@
               <span>{{ lang.ssClickToViewDetail }}</span>
           </div>
         </div>
-        <div class="tool-card six-hat-card" @click="handleToolClick('sixHat')" v-show="false">
+        <div class="tool-card six-hat-card" @click="handleToolClick('sixHat')">
           <div class="tool-banner">
             <img :src="sixHat" :alt="lang.ssSixHatTitle" />
             <div class="tool-overly"></div>

+ 151 - 1
src/views/Student/components/choiceQuestionDetailDialog.vue

@@ -882,6 +882,156 @@
         </div>
         
       </div>
+
+      <!-- 六顶思考帽 -->
+      <div class="c_t72" v-if="props.showData && props.showData.toolType === 832">
+        <div class="c_t72_title">
+          <div class="c_title">
+            <span>{{ lang.ssKwlTitle }}</span>
+          </div>
+        </div>
+        <span class="c_t72_type">{{ lang.ssKwlTitle }}</span>
+        <div class="c_t72_msg" v-if="props.roleType == 1">
+          <div>{{ lang.ssAnswerCount }} {{ props.workArray.length }}<span
+              v-if="props.unsubmittedStudents.length > 0">/{{
+                props.workArray.length +
+                props.unsubmittedStudents.length
+              }}</span></div>
+          <span v-if="props.unsubmittedStudents.length > 0" @click.stop="viewUnsubmittedStudents()">{{
+            lang.ssViewSubmitStatus2 }}</span>
+        </div>
+        <div class="c_t72_content" v-show="!lookWorkData">
+          <div class="c_t72_c_item" v-for="item in processedWorkArray" :key="item.id" @click.stop="lookWork(item.id)">
+            <div class="c_t72_c_i_top">
+              <span>{{ item.name.charAt(0) }}</span>
+              <div>{{ item.name }}</div>
+              <div class="cast_sreen_btn" @click.stop="castScreen(item)"
+                v-if="props.isCreator && props.roleType == 1 && isFollowModeActive && canValue">
+                <IconCastScreen />
+                {{ lang.ssCastScreen }}
+              </div>
+            </div>
+            <div class="bottom_btn" v-if="likeValue">
+              <div class="bottom_like" :class="{ 'active': item.isLikes }" @click.stop="handleLikeClick(item)">
+                <IconThumbsUp />
+                <span>{{ item.likesCount }}</span>
+              </div>
+            </div>
+          </div>
+        </div>
+
+        <div class="aiAnalysis" style="margin-top:1rem ;"
+            v-if="processedWorkArray.length > 0 && lookWorkData === null && props.showData.toolType == '831' && props.roleType == 1"
+            @click.stop="clickContent(false)">
+            <div class="ai_header">
+              <div class="ai_title">
+                <svg viewBox="0 0 1024 1024" width="200" height="200">
+                  <path
+                    d="M512 170.666667C323.477333 170.666667 170.666667 323.477333 170.666667 512s152.810667 341.333333 341.333333 341.333333 341.333333-152.810667 341.333333-341.333333S700.522667 170.666667 512 170.666667zM85.333333 512C85.333333 276.352 276.352 85.333333 512 85.333333s426.666667 191.018667 426.666667 426.666667-191.018667 426.666667-426.666667 426.666667S85.333333 747.648 85.333333 512z">
+                  </path>
+                  <path
+                    d="M693.013333 330.986667a42.666667 42.666667 0 0 1 10.304 43.648l-75.413333 226.282666a42.666667 42.666667 0 0 1-26.986667 26.986667l-226.282666 75.413333a42.666667 42.666667 0 0 1-53.973334-53.973333l75.434667-226.261333a42.666667 42.666667 0 0 1 26.986667-26.986667l226.282666-75.413333a42.666667 42.666667 0 0 1 43.648 10.304z m-222.72 139.306666l-41.685333 125.098667 125.077333-41.706667 41.706667-125.077333-125.077333 41.706667z">
+                  </path>
+                </svg>{{ lang.ssAnalysis }}
+              </div>
+              <div class="ai_refresh" :class="{ 'disabled': currentAnalysis && currentAnalysis.loading }"
+                @click.stop="aiAnalysisRefresh831()">
+                {{ lang.ssAIGenerate }}
+                <svg viewBox="0 0 1024 1024" width="200" height="200">
+                  <path
+                    d="M875 483c-33.4 0-60.5 27.1-60.5 60.5v0.1C814.4 710.3 678.8 846 512 846S209.5 710.3 209.5 543.5 345.2 241 512 241c36.8 0 71.7 7.6 104.4 19.7-32 3-57.4 29.1-57.4 61.9 0 34.8 28.2 63 63 63h201.9c34.8 0 63-28.2 63-63V120c0-34.8-28.2-63-63-63s-63 28.2-63 63v81.4C691 150.5 605.2 120 512 120 278.1 120 88.5 309.6 88.5 543.5S278.1 967 512 967s423.5-189.6 423.5-423.5c0-33.4-27.1-60.5-60.5-60.5z">
+                  </path>
+                </svg>
+
+              </div>
+            </div>
+            <div class="ai_content" v-if="currentAnalysis && currentAnalysis.json" v-html="currentAnalysis.json.text">
+            </div>
+            <div class="ai_updateTime" v-if="currentAnalysis">{{ lang.ssUpdateTime }}:{{ currentAnalysis.update_at }}
+            </div>
+          </div>
+
+        <div class="c_t72_workDetail" v-if="lookWorkData" @click.stop="clickContent(false)">
+          <div class="c_t72_wd_top">
+            <img src="../../../assets/img/arrow_left.png" @click.stop="lookWork('')" v-if="!isCastScreen" />
+            <span>{{ lookWorkData.name.charAt(0) }}</span>
+            <div>{{ lookWorkData.name }}</div>
+            <div class="cast_sreen_btn" @click.stop="exitCastScreen"
+              v-if="(props.isCreator && props.roleType == 1 && isCastScreen) || (!isFollowModeActive && isCastScreen)">
+              <IconCastScreen />
+              {{ lang.ssExitCastScreen }}
+            </div>
+          </div>
+
+
+          <div class="c_t831_wd_content">
+            <!-- KWL 三栏 -->
+            <div class="kwl-grid" v-if="lookWorkData.content">
+              <!-- K - 已知 -->
+              <div class="kwl-col kwl-col--k">
+                <div class="kwl-col__header">
+                  <span class="kwl-col__badge">K</span>
+                  <span class="kwl-col__label">{{ lang.ssKwlKnown }}</span>
+                </div>
+                <div class="kwl-col__body">
+                  <template v-if="lookWorkData.content.know.length">
+                    <div v-for="(item, idx) in lookWorkData.content.know" :key="'k-' + idx" class="kwl-item">{{ item }}
+                    </div>
+                  </template>
+                  <div v-else class="kwl-empty">{{ lang.ssNone }}</div>
+                </div>
+              </div>
+
+              <!-- W - 想知 -->
+              <div class="kwl-col kwl-col--w">
+                <div class="kwl-col__header">
+                  <span class="kwl-col__badge">W</span>
+                  <span class="kwl-col__label">{{ lang.ssKwlWant }}</span>
+                </div>
+                <div class="kwl-col__body">
+                  <template v-if="lookWorkData.content.want.length">
+                    <div v-for="(item, idx) in lookWorkData.content.want" :key="'w-' + idx" class="kwl-item">{{ item }}
+                    </div>
+                  </template>
+                  <div v-else class="kwl-empty">{{ lang.ssNone }}</div>
+                </div>
+              </div>
+
+              <!-- L - 已学 -->
+              <div class="kwl-col kwl-col--l">
+                <div class="kwl-col__header">
+                  <span class="kwl-col__badge">L</span>
+                  <span class="kwl-col__label">{{ lang.ssKwlLearned }}</span>
+                </div>
+                <div class="kwl-col__body">
+                  <template v-if="lookWorkData.content.learned.length">
+                    <div v-for="(item, idx) in lookWorkData.content.learned" :key="'l-' + idx" class="kwl-item">{{ item
+                      }}
+                    </div>
+                  </template>
+                  <div v-else class="kwl-empty">{{ lang.ssNone }}</div>
+                </div>
+              </div>
+            </div>
+
+            <!-- 学习反思 -->
+            <div class="kwl-reflection">
+              <div class="kwl-reflection__header">
+                <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
+                  <path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z" />
+                </svg>
+                <span>{{ lang.ssKwlReflection }}</span>
+              </div>
+              <div class="kwl-reflection__body">
+                {{ lookWorkData.content.reflection ? lookWorkData.content.reflection : lang.ssNone }}
+              </div>
+            </div>
+          </div>
+
+
+        </div>
+        
+      </div>
     </div>
     <previewImageTool ref="previewImageToolRef" />
 
@@ -1107,7 +1257,7 @@ const processWorkContent = async (content: string, toolType: number): Promise<an
   }
 
   try {
-    if ([45, 15, 78, 79, 84, 831].includes(toolType)) {
+    if ([45, 15, 78, 79, 84, 831, 832].includes(toolType)) {
       return JSON.parse(decodeURIComponent(contentToParse))
     }
     else if (toolType === 72) {