Преглед изворни кода

feat(student): add anonymous mode and like function

1. 新增多语言词条:匿名、实名、匿名用户
2. 在题目详情弹窗中添加匿名切换开关和点赞功能
3. 当开启匿名模式时,将用户列表替换为匿名用户标识
4. 根据toolType自动初始化匿名状态
lsc пре 5 дана
родитељ
комит
bc8994c791

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

@@ -122,6 +122,10 @@
                 <Switch :value="canValue" @update:value="handleCanChange" />
                 <span>{{ lang.ssShowResult }}</span>
               </div>
+              <div class="switch">
+                <Switch :value="anonymousValue" @update:value="handleAnonymousChange" />
+                <span>{{anonymousValue ? lang.ssAnonymous : lang.ssRealName}}</span>
+              </div>
             </div>
           </div>
           <div class="c_t45_msg" v-if="props.roleType == 1">
@@ -321,6 +325,10 @@
                 <Switch :value="canValue" @update:value="handleCanChange" />
                 <span>{{ lang.ssShowResult }}</span>
               </div>
+              <div class="switch">
+                <Switch :value="likeValue" @update:value="handleLikeChange" />
+                <span>{{ lang.ssLike }}</span>
+              </div>
             </div>
           </div>
         </div>
@@ -346,6 +354,12 @@
             <div class="c_t73_c_i_bottom" v-else>
               <span>{{ lang.ssNoPhoto }}</span>
             </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>
 
@@ -394,6 +408,10 @@
                 <Switch :value="canValue" @update:value="handleCanChange" />
                 <span>{{ lang.ssShowResult }}</span>
               </div>
+              <div class="switch">
+                <Switch :value="likeValue" @update:value="handleLikeChange" />
+                <span>{{ lang.ssLike }}</span>
+              </div>
             </div>
           </div>
         </div>
@@ -412,6 +430,12 @@
               <span>S</span>
               <div>{{ item.name }}</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>
 
@@ -504,6 +528,10 @@
                 <Switch :value="canValue" @update:value="handleCanChange" />
                 <span>{{ lang.ssShowResult }}</span>
               </div>
+              <div class="switch">
+                <Switch :value="likeValue" @update:value="handleLikeChange" />
+                <span>{{ lang.ssLike }}</span>
+              </div>
             </div>
           </div>
         </div>
@@ -525,6 +553,12 @@
             <div class="c_t73_c_i_bottom">
               <img :src="item.content" />
             </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>
 
@@ -609,6 +643,14 @@ watch(() => props.resultArray?.like, (newVal) => {
   likeValue.value = newVal
 })
 
+const anonymousValue = ref(props.resultArray?.anonymous ?? false)
+
+watch(() => props.resultArray?.anonymous, (newVal) => {
+  anonymousValue.value = newVal
+})
+
+
+
 const handleCanChange = (value: boolean) => {
   console.log(value)
   console.log(props.resultArray)
@@ -624,6 +666,13 @@ const handleLikeChange = (value: boolean) => {
   emit('setIsResultArray', value, 'like')
 }
 
+const handleAnonymousChange = (value: boolean) => {
+  console.log(value)
+  console.log(props.resultArray)
+  emit('setIsResultArray', value, 'anonymous')
+}
+
+
 import _ from 'lodash'
 
 const handleLikeClick = _.debounce((item: any) => {
@@ -1033,7 +1082,11 @@ const setEchartsArea1 = () => {
       if (selectedOption && selectUserDialogRef.value) {
         // console.log(selectedOption)
         console.log('selectedOption', selectedOption)
-        selectUserDialogRef.value.open(`${lang.ssSelectUser.replace('{a}', '<span>' + selectedOption.index + '</span>')}`, selectedOption)
+        const selectedOption2 = {...selectedOption}
+        if (anonymousValue.value) {
+          selectedOption2.user = selectedOption2.user.map((item: any, index: number) => lang.ssAnonymousUser + (index + 1))
+        }
+        selectUserDialogRef.value.open(`${lang.ssSelectUser.replace('{a}', '<span>' + selectedOption2.index + '</span>')}`, selectedOption2)
       }
     })
   }

+ 5 - 0
src/views/Student/index.vue

@@ -2803,10 +2803,15 @@ const getCourseDetail = async () => {
               const elements = jsonObj.slides[i].elements.some((element: any) => {
                 return element.type === 'frame' && !notTool.includes(element.toolType)
               })
+              const toolType = jsonObj.slides[i].elements[0].toolType || 0
               const json = {
                 isTool: elements,
                 can: false,
                 like: false,
+                anonymous: false,
+              }
+              if (toolType === 78) {
+                json.anonymous = true
               }
               isResultArray.value[i] = json
             }

+ 4 - 1
src/views/lang/cn.json

@@ -912,5 +912,8 @@
   "ssConfirmAdd": "确认添加",
   "ssShowResult": "展示结果",
   "ssLikeSucc": "点赞成功",
-  "ssLike": "点赞"
+  "ssLike": "点赞",
+  "ssAnonymous": "匿名",
+  "ssRealName": "实名",
+  "ssAnonymousUser": "匿名用户"
 }

+ 4 - 1
src/views/lang/en.json

@@ -912,5 +912,8 @@
   "ssConfirmAdd": "Confirm Add",
   "ssShowResult": "Show Result",
   "ssLikeSucc": "Like Success",
-  "ssLike": "Like"
+  "ssLike": "Like",
+  "ssAnonymous": "Anonymous",
+  "ssRealName": "Real Name",
+  "ssAnonymousUser": "Anonymous User"
 }

+ 4 - 1
src/views/lang/hk.json

@@ -912,5 +912,8 @@
   "ssConfirmAdd": "確認添加",
   "ssShowResult": "展示結果",
   "ssLikeSucc": "點贊成功",
-  "ssLike": "點贊"
+  "ssLike": "點贊",
+  "ssAnonymous": "匿名",
+  "ssRealName": "實名",
+  "ssAnonymousUser": "匿名用戶"
 }