SanHQin 7 months ago
parent
commit
85a7de6532

BIN
src/assets/icon/course/aiLogo.png


File diff suppressed because it is too large
+ 30 - 0
src/assets/icon/course/aiWait2.svg


+ 4 - 0
src/assets/icon/course/brush.svg

@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12 6.75C12.2508 6.75 12.4849 6.87533 12.624 7.08397L15.624 11.584C15.7062 11.7072 15.75 11.8519 15.75 12V21C15.75 21.4142 15.4142 21.75 15 21.75C14.5858 21.75 14.25 21.4142 14.25 21V12.75H9.75V21C9.75 21.4142 9.41421 21.75 9 21.75C8.58579 21.75 8.25 21.4142 8.25 21V12C8.25 11.8519 8.29383 11.7072 8.37596 11.584L11.376 7.08397C11.5151 6.87533 11.7492 6.75 12 6.75ZM10.4014 11.25H13.5986L12 8.85208L10.4014 11.25Z" fill="#3681FC"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21ZM12 22.5C17.799 22.5 22.5 17.799 22.5 12C22.5 6.20101 17.799 1.5 12 1.5C6.20101 1.5 1.5 6.20101 1.5 12C1.5 17.799 6.20101 22.5 12 22.5Z" fill="black" fill-opacity="0.9"/>
+</svg>

+ 3 - 0
src/assets/icon/course/cancel_left.svg

@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M11 6.61328L6 9.50003L11 12.3868V10H14.5C16.1569 10 17.5 11.3432 17.5 13C17.5 14.6569 16.1569 16 14.5 16H6C5.72386 16 5.5 16.2239 5.5 16.5C5.5 16.7762 5.72386 17 6 17H14.5C16.7091 17 18.5 15.2092 18.5 13C18.5 10.7909 16.7091 9.00003 14.5 9.00003H11V6.61328Z" fill="black" fill-opacity="0.9"/>
+</svg>

+ 3 - 0
src/assets/icon/course/cancel_right.svg

@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M13 6.61328L18 9.50003L13 12.3868V10H9.5C7.84315 10 6.5 11.3432 6.5 13C6.5 14.6569 7.84315 16 9.5 16H18C18.2761 16 18.5 16.2239 18.5 16.5C18.5 16.7762 18.2761 17 18 17H9.5C7.29086 17 5.5 15.2092 5.5 13C5.5 10.7909 7.29086 9.00003 9.5 9.00003H13V6.61328Z" fill="black" fill-opacity="0.9"/>
+</svg>

+ 9 - 0
src/assets/icon/course/changeType.svg

@@ -0,0 +1,9 @@
+<svg width="21" height="6" viewBox="0 0 21 6" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M1.05713 0.470583C1.80179 -0.155333 3.01121 -0.157081 3.75845 0.466679C5.4879 1.91035 7.86809 2.8 10.5 2.8C13.1319 2.8 15.5121 1.91035 17.2416 0.466679C17.9888 -0.157081 19.1982 -0.155333 19.9429 0.470583C20.6875 1.0965 20.6854 2.10956 19.9382 2.73332C17.5219 4.75032 14.1834 6 10.5 6C6.81664 6 3.47806 4.75032 1.06179 2.73332C0.314559 2.10956 0.312473 1.0965 1.05713 0.470583Z" fill="url(#paint0_linear_269_7318)"/>
+<defs>
+<linearGradient id="paint0_linear_269_7318" x1="0.5" y1="6" x2="20.5" y2="6" gradientUnits="userSpaceOnUse">
+<stop stop-color="#3673E8"/>
+<stop offset="1" stop-color="#AD88FD"/>
+</linearGradient>
+</defs>
+</svg>

File diff suppressed because it is too large
+ 1 - 0
src/assets/icon/course/clearScreen.svg


+ 5 - 0
src/assets/icon/course/closeIcon.svg

@@ -0,0 +1,5 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<circle cx="12" cy="12" r="10" fill="#EE3E3E"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M9.1439 7.6929C9.29275 7.89983 9.24568 8.18824 9.03876 8.33709C7.75653 9.25949 6.92308 10.7631 6.92308 12.4615C6.92308 15.2654 9.19609 17.5384 12 17.5384C14.8039 17.5384 17.0769 15.2654 17.0769 12.4615C17.0769 10.7631 16.2435 9.25949 14.9612 8.33709C14.7543 8.18824 14.7073 7.89983 14.8561 7.6929C15.005 7.48598 15.2934 7.43891 15.5003 7.58776C17.0133 8.67615 18 10.4536 18 12.4615C18 15.7752 15.3137 18.4615 12 18.4615C8.68629 18.4615 6 15.7752 6 12.4615C6 10.4536 6.98673 8.67615 8.49971 7.58776C8.70663 7.43891 8.99504 7.48598 9.1439 7.6929Z" fill="white" fill-opacity="0.9"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12 5.53845C12.2549 5.53845 12.4615 5.74509 12.4615 5.99999V11.5385C12.4615 11.7934 12.2549 12 12 12C11.7451 12 11.5385 11.7934 11.5385 11.5385V5.99999C11.5385 5.74509 11.7451 5.53845 12 5.53845Z" fill="white" fill-opacity="0.9"/>
+</svg>

+ 3 - 0
src/assets/icon/course/eraser.svg

@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M13.6464 6.14645C13.8417 5.95118 14.1583 5.95118 14.3536 6.14645L17.8536 9.64645C18.0488 9.84171 18.0488 10.1583 17.8536 10.3536L11.2071 17H17.5V18H10C9.86739 18 9.74021 17.9473 9.64645 17.8536L6.14645 14.3536C5.95118 14.1583 5.95118 13.8417 6.14645 13.6464L13.6464 6.14645ZM10 16.7929L7.20711 14L9 12.2071L11.7929 15L10 16.7929ZM12.5 14.2929L16.7929 10L14 7.20711L9.70711 11.5L12.5 14.2929Z" fill="black" fill-opacity="0.9"/>
+</svg>

+ 5 - 0
src/assets/icon/course/music.svg

@@ -0,0 +1,5 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12.0001 3.18362C7.13095 3.18362 3.18374 7.13083 3.18374 11.9999C3.18374 16.4071 6.41825 20.0602 10.6428 20.7125C11.0848 20.7808 11.5381 20.8163 12.0001 20.8163C12.4058 20.8163 12.7348 21.1452 12.7348 21.551C12.7348 21.9567 12.4058 22.2857 12.0001 22.2857C11.4627 22.2857 10.9345 22.2444 10.4186 22.1647C5.48856 21.4035 1.71436 17.1431 1.71436 11.9999C1.71436 6.3193 6.31943 1.71423 12.0001 1.71423C16.5776 1.71423 20.4549 4.70396 21.7896 8.83532C22.1119 9.83321 22.2858 10.897 22.2858 11.9999C22.2858 12.4057 21.9569 12.7346 21.5511 12.7346C21.1453 12.7346 20.8164 12.4057 20.8164 11.9999C20.8164 11.0522 20.6671 10.1407 20.3913 9.28702C19.2469 5.74447 15.9216 3.18362 12.0001 3.18362Z" fill="black" fill-opacity="0.9"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M22.0162 13.8835C22.1871 14.0192 22.2856 14.2186 22.2856 14.4285V20.1428C22.2856 20.3322 22.2053 20.5139 22.0625 20.6479L21.3005 21.3622C21.003 21.6411 20.5206 21.6411 20.2231 21.3622C19.9255 21.0832 19.9255 20.631 20.2231 20.352L20.7618 19.8469V15.2717L17.7142 15.7479V20.8571C17.7142 21.0465 17.6339 21.2282 17.491 21.3622L16.7291 22.0765C16.4316 22.3554 15.9492 22.3554 15.6516 22.0765C15.3541 21.7975 15.3541 21.3452 15.6516 21.0663L16.1904 20.5612V15.1428C16.1904 14.7936 16.4596 14.4956 16.827 14.4382L21.3984 13.724C21.6194 13.6894 21.8453 13.7478 22.0162 13.8835Z" fill="#3681FC"/>
+<path d="M14.5713 12C14.5713 13.4202 13.4201 14.5714 11.9999 14.5714C10.5797 14.5714 9.42847 13.4202 9.42847 12C9.42847 10.5799 10.5797 9.42859 11.9999 9.42859C13.4201 9.42859 14.5713 10.5799 14.5713 12Z" fill="black" fill-opacity="0.9"/>
+</svg>

BIN
src/assets/icon/course/practice.png


+ 5 - 0
src/assets/icon/course/reset.svg

@@ -0,0 +1,5 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M2.25 19.5C2.25 19.0858 2.58579 18.75 3 18.75H22.5C22.9142 18.75 23.25 19.0858 23.25 19.5C23.25 19.9142 22.9142 20.25 22.5 20.25H3C2.58579 20.25 2.25 19.9142 2.25 19.5Z" fill="black"/>
+<path d="M3 8.25L3.75 14.25L8.25 10.5L3 8.25Z" fill="black"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M6.88061 9.09714C8.37158 7.62191 10.4445 6.75 12.75 6.75C17.3064 6.75 21 10.4437 21 15C21 15.4142 21.3358 15.75 21.75 15.75C22.1643 15.75 22.5 15.4142 22.5 15C22.5 9.61522 18.1348 5.25 12.75 5.25C9.83406 5.25 7.20333 6.45088 5.41113 8.46737L3.29545 7.56065C3.04847 7.4548 2.76374 7.48917 2.54904 7.65074C2.33433 7.81231 2.22247 8.0764 2.2558 8.34303L3.0058 14.343C3.03982 14.6151 3.21963 14.847 3.47471 14.9477C3.7298 15.0483 4.01948 15.0017 4.23015 14.8262L8.73015 11.0762C8.93061 10.9091 9.02983 10.6499 8.99215 10.3917C8.95447 10.1335 8.78529 9.91343 8.54545 9.81065L6.88061 9.09714ZM4.48437 9.70214L3.9064 9.45443L4.03677 10.4974C4.17389 10.2236 4.32334 9.95829 4.48437 9.70214ZM4.91452 12.3033C5.14843 11.5796 5.47638 10.9088 5.884 10.302L6.82973 10.7073L4.91452 12.3033Z" fill="black"/>
+</svg>

+ 4 - 0
src/assets/icon/course/right.svg

@@ -0,0 +1,4 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M3.66782 3.1263C3.87421 2.94284 4.19025 2.96143 4.37371 3.16782L8.37371 7.66782C8.5421 7.85727 8.5421 8.14274 8.37371 8.33219L4.37371 12.8322C4.19025 13.0386 3.87421 13.0572 3.66782 12.8737C3.46143 12.6903 3.44284 12.3742 3.6263 12.1678L7.33103 8.00001L3.6263 3.83219C3.44284 3.6258 3.46143 3.30976 3.66782 3.1263Z" fill="black"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M7.66782 3.1263C7.87421 2.94284 8.19025 2.96143 8.37371 3.16782L12.3737 7.66782C12.5421 7.85727 12.5421 8.14274 12.3737 8.33219L8.37371 12.8322C8.19025 13.0386 7.87421 13.0572 7.66782 12.8737C7.46143 12.6903 7.44284 12.3742 7.6263 12.1678L11.331 8.00001L7.6263 3.83219C7.44284 3.6258 7.46143 3.30976 7.66782 3.1263Z" fill="black"/>
+</svg>

BIN
src/assets/icon/course/stop1.png


BIN
src/assets/icon/course/stop2.png


+ 606 - 595
src/components/classRoomHelper/component/languageAssistant.vue

@@ -1,41 +1,69 @@
 <template>
-  <div class="languageAssistant">
-    <div class="la_coco">
-      <el-image
-        style="width: 105px; height: 105px;"
-        v-show="showIndex == 2"
-        :src="require('../../../assets/icon/course/aiVanish.svg')"
-        fit="fill"
-      ></el-image>
-      <el-image
-        style="width: 105px; height: 105px;"
-        v-show="showIndex == 0"
-        :src="require('../../../assets/icon/course/aiWait.svg')"
-        fit="fill"
-      ></el-image>
-      <el-image
-        style="width: 105px; height: 105px;"
-        v-show="showIndex == 1"
-        :src="require('../../../assets/icon/course/aiTalk.svg')"
-        fit="fill"
-      ></el-image>
-    </div>
-    <div
-      class="la_message"
-      :style="show ? '' : 'height:calc(100% - 170px - 200px - 40px)'"
-      ref="messageRef"
-    >
-      <div class="la_m_talk" v-if="show">
-        <div v-if="showTextIndex == 0" v-html="htmlContent(aiText)"></div>
-        <div v-if="showTextIndex == 1">{{ userText }}</div>
-        <div v-if="showTextIndex == 2">正在组织语言...</div>
-      </div>
-    </div>
-    <div class="la_btn">
-      <div class="la_b_noTel" v-if="!show">
-        <el-tooltip class="item" effect="light" content="通话" placement="top">
-          <span>
-            <svg
+	<div class="languageAssistant">
+		<div class="la_coco">
+			<el-image
+				style="width: 105px; height: 105px"
+				v-show="showIndex == 2"
+				:src="require('../../../assets/icon/course/aiVanish.svg')"
+				fit="fill"
+			></el-image>
+			<el-image
+				style="width: 105px; height: 105px;transform: scale(1.7,1.7);"
+				v-show="showIndex == 0"
+				:src="require('../../../assets/icon/course/aiWait2.svg')"
+				fit="fill"
+			></el-image>
+			<el-image
+				style="width: 105px; height: 105px"
+				v-show="showIndex == 1"
+				:src="require('../../../assets/icon/course/aiTalk.svg')"
+				fit="fill"
+			></el-image>
+		</div>
+		<div
+			class="la_message"
+			:style="show ? '' : 'height:calc(100% - 170px - 200px - 40px)'"
+			ref="messageRef"
+		>
+			<div class="la_m_talk" v-if="show">
+				<div v-if="showTextIndex == 0" v-html="htmlContent(aiText)"></div>
+				<div v-if="showTextIndex == 1">{{ userText }}</div>
+				<div v-if="showTextIndex == 2">正在组织语言...</div>
+			</div>
+		</div>
+		<div class="la_btn">
+			<div class="la_b_noTel" v-if="!show">
+				<el-tooltip class="item" effect="light" content="通话" placement="top">
+					<span>
+						<svg
+							@click.stop="recordStart"
+							t="1721367811838"
+							viewBox="0 0 1024 1024"
+							version="1.1"
+							xmlns="http://www.w3.org/2000/svg"
+							p-id="4525"
+							width="64"
+							height="64"
+						>
+							<path
+								d="M65.771 502.182c0 246.632 199.937 446.566 446.57 446.565 246.613 0 446.549-199.934 446.551-446.565 0-246.633-199.936-446.549-446.55-446.55-246.635 0.001-446.57 199.917-446.571 446.55z m651.885-173.77c31.489 31.473 1.642 148.828-114.292 264.773C487.396 709.131 370.06 738.929 338.589 707.492c-27.278-27.315-74.96-60.574-12.892-110.423 62.087-49.886 79.429-25.343 107.582 2.772 19.674 19.711 69.436-21.368 112.394-64.328 42.94-42.996 83.986-92.719 64.368-112.43-28.155-28.153-52.679-45.511-2.792-107.562 49.904-62.049 83.125-14.405 110.406 12.891z"
+								p-id="4526"
+							></path>
+						</svg>
+					</span>
+				</el-tooltip>
+			</div>
+			<div class="la_b_isTel" v-else>
+				<el-tooltip
+					class="item"
+					effect="light"
+					content="暂停语音"
+					placement="top"
+					v-if="talkLoading"
+				>
+					<span @click.stop="stopTalk">
+						<img :src="require('../../../assets/icon/course/stop1.png')" />
+						<!-- <svg
               @click.stop="recordStart"
               t="1721367811838"
               viewBox="0 0 1024 1024"
@@ -49,83 +77,56 @@
                 d="M65.771 502.182c0 246.632 199.937 446.566 446.57 446.565 246.613 0 446.549-199.934 446.551-446.565 0-246.633-199.936-446.549-446.55-446.55-246.635 0.001-446.57 199.917-446.571 446.55z m651.885-173.77c31.489 31.473 1.642 148.828-114.292 264.773C487.396 709.131 370.06 738.929 338.589 707.492c-27.278-27.315-74.96-60.574-12.892-110.423 62.087-49.886 79.429-25.343 107.582 2.772 19.674 19.711 69.436-21.368 112.394-64.328 42.94-42.996 83.986-92.719 64.368-112.43-28.155-28.153-52.679-45.511-2.792-107.562 49.904-62.049 83.125-14.405 110.406 12.891z"
                 p-id="4526"
               ></path>
-            </svg>
-          </span>
-        </el-tooltip>
-      </div>
-      <div class="la_b_isTel" v-else>
-        <el-tooltip
-          class="item"
-          effect="light"
-          content="暂停语音"
-          placement="top"
-          v-if="talkLoading"
-        >
-          <span @click.stop="stopTalk">
-            <svg
-              t="1721372070061"
-              class="icon"
-              viewBox="0 0 1024 1024"
-              version="1.1"
-              xmlns="http://www.w3.org/2000/svg"
-              p-id="6534"
-              width="64"
-              height="64"
-            >
-              <path
-                d="M648.45 247.01c-31.64 0-57.348 27.685-57.348 57.348v427.149c0 31.64 27.685 57.348 57.348 57.348S705.8 761.17 705.8 731.507V304.358c0-31.64-27.686-57.348-57.349-57.348z m-272.9 0c-31.64 0-57.349 27.685-57.349 57.348v427.149c0 31.64 27.686 57.348 57.349 57.348s57.348-27.685 57.348-57.348V304.358c1.978-31.64-25.708-57.348-57.348-57.348z"
-                p-id="6535"
-              ></path>
-            </svg>
-          </span>
-        </el-tooltip>
+            </svg> -->
+					</span>
+				</el-tooltip>
 
-        <el-tooltip
-          class="item"
-          effect="light"
-          content="朗读"
-          placement="top"
-          v-else
-        >
-          <span @click.stop="talkAllText">
-            <svg
-              t="1721785394251"
-              class="icon"
-              viewBox="0 0 1024 1024"
-              version="1.1"
-              xmlns="http://www.w3.org/2000/svg"
-              p-id="4273"
-              width="64"
-              height="64"
-            >
-              <path
-                d="M310 130.7c-31.3 0-52.4 19.9-52.4 49.5v659.6c0 30.9 25.9 53.4 61.5 53.4 17 0 32.8-5.3 43.9-14.7l444.6-309.3 1.2-1.1c13.3-12.2 20.6-28.4 20.6-45.7s-7.3-33.5-20.6-45.7l-2.1-1.7-443.3-324.9c-13.6-11.8-34.3-19.4-53.4-19.4z"
-                p-id="4274"
-              ></path>
-            </svg>
-          </span>
-        </el-tooltip>
+				<el-tooltip
+					class="item"
+					effect="light"
+					content="朗读"
+					placement="top"
+					v-else
+				>
+					<span class="readAloud" @click.stop="talkAllText">
+						<svg
+							t="1721117381559"
+							viewBox="0 0 1024 1024"
+							version="1.1"
+							xmlns="http://www.w3.org/2000/svg"
+							p-id="12941"
+							width="64"
+							height="64"
+						>
+							<path
+								d="M161.2 839.9v-654c0-56.1 60.7-91.1 109.3-63.1l566.3 327c48.6 28 48.6 98.1 0 126.2L270.4 903c-48.5 28-109.2-7.1-109.2-63.1z"
+								p-id="12942"
+							></path>
+						</svg>
+					</span>
+				</el-tooltip>
 
-        <el-tooltip class="item" effect="light" content="挂断" placement="top">
-          <svg
-            @click.stop="stopRecord"
-            t="1721367811838"
-            viewBox="0 0 1024 1024"
-            version="1.1"
-            xmlns="http://www.w3.org/2000/svg"
-            p-id="4525"
-            width="64"
-            height="64"
-          >
-            <path
-              d="M65.771 502.182c0 246.632 199.937 446.566 446.57 446.565 246.613 0 446.549-199.934 446.551-446.565 0-246.633-199.936-446.549-446.55-446.55-246.635 0.001-446.57 199.917-446.571 446.55z m651.885-173.77c31.489 31.473 1.642 148.828-114.292 264.773C487.396 709.131 370.06 738.929 338.589 707.492c-27.278-27.315-74.96-60.574-12.892-110.423 62.087-49.886 79.429-25.343 107.582 2.772 19.674 19.711 69.436-21.368 112.394-64.328 42.94-42.996 83.986-92.719 64.368-112.43-28.155-28.153-52.679-45.511-2.792-107.562 49.904-62.049 83.125-14.405 110.406 12.891z"
-              p-id="4526"
-            ></path>
-          </svg>
-        </el-tooltip>
-        <el-tooltip class="item" effect="light" content="中断" placement="top">
-          <span @click.stop="interrupt">
-            <svg
+				<el-tooltip class="item" effect="light" content="挂断" placement="top">
+					<svg
+						@click.stop="stopRecord"
+						t="1721367811838"
+						viewBox="0 0 1024 1024"
+						version="1.1"
+						xmlns="http://www.w3.org/2000/svg"
+						p-id="4525"
+						width="64"
+						height="64"
+					>
+						<path
+							d="M65.771 502.182c0 246.632 199.937 446.566 446.57 446.565 246.613 0 446.549-199.934 446.551-446.565 0-246.633-199.936-446.549-446.55-446.55-246.635 0.001-446.57 199.917-446.571 446.55z m651.885-173.77c31.489 31.473 1.642 148.828-114.292 264.773C487.396 709.131 370.06 738.929 338.589 707.492c-27.278-27.315-74.96-60.574-12.892-110.423 62.087-49.886 79.429-25.343 107.582 2.772 19.674 19.711 69.436-21.368 112.394-64.328 42.94-42.996 83.986-92.719 64.368-112.43-28.155-28.153-52.679-45.511-2.792-107.562 49.904-62.049 83.125-14.405 110.406 12.891z"
+							p-id="4526"
+						></path>
+					</svg>
+				</el-tooltip>
+				<el-tooltip class="item" effect="light" content="中断" placement="top">
+					<span @click.stop="interrupt">
+						<img :src="require('../../../assets/icon/course/stop2.png')" />
+						<!-- <svg
               t="1721372012678"
               class="icon"
               viewBox="0 0 1024 1024"
@@ -139,544 +140,554 @@
                 d="M885.6 413.8c-32.3 0-60.1 19.8-71.9 47.9h-18.1c-16.6 0-30 13.4-30 30s13.4 30 30 30h18.1c11.8 28.1 39.5 47.9 71.9 47.9 42.9 0 77.9-34.9 77.9-77.9 0-42.9-35-77.9-77.9-77.9zM690.4 461.7h-21.1c-16.6 0-30 13.4-30 30s13.4 30 30 30h21.1c16.6 0 30-13.4 30-30s-13.4-30-30-30zM564.1 461.7h-10c-16.6 0-30 13.4-30 30s13.4 30 30 30h10c16.6 0 30-13.4 30-30s-13.4-30-30-30zM709.7 115.7c-13.7-9.4-32.3-5.9-41.7 7.8L436.5 461.8c-0.8-0.1-1.6-0.1-2.3-0.1H212.5c-11.8-28.1-39.5-47.9-71.9-47.9-39.4 0-72.1 29.5-77.2 67.5-1.2 3.2-1.8 6.7-1.8 10.3 0 3.6 0.6 7.1 1.8 10.3 5.1 38.1 37.7 67.5 77.2 67.5 32.3 0 60.1-19.8 71.9-47.9h183l-240.1 351c-9.4 13.7-5.9 32.3 7.8 41.7 5.2 3.5 11.1 5.2 16.9 5.2 9.6 0 19-4.6 24.8-13.1l512.6-749c9.4-13.5 5.9-32.2-7.8-41.6z"
                 p-id="5555"
               ></path>
-            </svg>
-          </span>
-        </el-tooltip>
-      </div>
-    </div>
-    <!-- 录音转文字 -->
-    <iframe
-      allow="camera *; microphone *;display-capture;midi;encrypted-media;"
-      src="https://beta.cloud.cocorobo.cn/browser/public/index.html"
-      ref="iiframe"
-      v-show="false"
-    ></iframe>
+            </svg> -->
+					</span>
+				</el-tooltip>
+			</div>
+		</div>
+		<!-- 录音转文字 -->
+		<iframe
+			allow="camera *; microphone *;display-capture;midi;encrypted-media;"
+			src="https://beta.cloud.cocorobo.cn/browser/public/index.html"
+			ref="iiframe"
+			v-show="false"
+		></iframe>
 
-    <!-- 文字转语音-->
-    <iframe
-      allow="camera *; microphone *;display-capture;midi;encrypted-media;"
-      src="https://beta.cloud.cocorobo.cn/browser/public/index1.html"
-      ref="iiframe2"
-      v-show="false"
-    ></iframe>
-  </div>
+		<!-- 文字转语音-->
+		<iframe
+			allow="camera *; microphone *;display-capture;midi;encrypted-media;"
+			src="https://beta.cloud.cocorobo.cn/browser/public/index1.html"
+			ref="iiframe2"
+			v-show="false"
+		></iframe>
+	</div>
 </template>
 
 <script>
 import { v4 as uuidv4 } from "uuid";
 import MarkdownIt from "markdown-it";
 export default {
-  props: {},
-  data() {
-    return {
-      show: false,
-      showIndex: 2, //0 :在说话 1 : 接收 2:待命
-      aiStatus: 0,
-      aiText: "我是可可同学,我是个小小百事通,你有什么想和我聊一聊?",
-      userText: "",
-      showTextIndex: 0, //0:ai,1:用户, 2:组织语言  3: 无
-      timer: null,
-      isOpen: false,
-      userId: this.$route.query.userid,
-      chatLoading: false,
-      talkLoading: false,
-      source: null,
-      talkTextList: []
-    };
-  },
-  computed: {
-    htmlContent() {
-      const md = new MarkdownIt();
-      return _md => {
-        return md.render(_md);
-      };
-    }
-  },
-  methods: {
-    scrollBottom() {
-      this.$nextTick(() => {
-        this.$refs.messageRef.scrollTop = this.$refs.messageRef.scrollHeight;
-      });
-    },
-    talkAllText() {
-      if (this.talkLoading && this.aiText == "") return;
-      let _resultText = this.removeMarkdown(this.aiText);
-      this.talkTextList.push(_resultText);
-      this.talkText();
-    },
-    recordStart(_text) {
-      // this.show = true;
-      // this.showIndex = 0;
-      // return
-      var OpenCC = require("opencc-js");
-      let converter = OpenCC.Converter({
-        from: "hk",
-        to: "cn"
-      });
-      if (this.isOpen)
-        return this.$message.info("已开启语音助手,无需重复开启");
-      let iiframe = this.$refs["iiframe"];
-      iiframe.contentWindow.window.document.getElementById(
-        "languageOptions"
-      ).selectedIndex = 2; //普通话
-      iiframe.contentWindow.testdoContinuousPronunciationAssessment();
-      this.isOpen = true;
-      this.show = true;
-      this.aiText = "我是可可同学,我是个小小百事通,你有什么想和我聊一聊?";
-      iiframe.contentWindow.onRecognizedResult = e => {
-        let _msg = converter(e.privText);
+	props: {},
+	data() {
+		return {
+			show: false,
+			showIndex: 2, //0 :在说话 1 : 接收 2:待命
+			aiStatus: 0,
+			aiText: "我是可可同学,我是个小小百事通,你有什么想和我聊一聊?",
+			userText: "",
+			showTextIndex: 0, //0:ai,1:用户, 2:组织语言  3: 无
+			timer: null,
+			isOpen: false,
+			userId: this.$route.query.userid,
+			chatLoading: false,
+			talkLoading: false,
+			source: null,
+			talkTextList: [],
+		};
+	},
+	computed: {
+		htmlContent() {
+			const md = new MarkdownIt();
+			return (_md) => {
+				return md.render(_md);
+			};
+		},
+	},
+	methods: {
+		scrollBottom() {
+			this.$nextTick(() => {
+				this.$refs.messageRef.scrollTop = this.$refs.messageRef.scrollHeight;
+			});
+		},
+		talkAllText() {
+			if (this.talkLoading && this.aiText == "") return;
+			let _resultText = this.removeMarkdown(this.aiText);
+			this.talkTextList.push(_resultText);
+			this.talkText();
+		},
+		recordStart(_text) {
+			// this.show = true;
+			// this.showIndex = 0;
+			// return
+			var OpenCC = require("opencc-js");
+			let converter = OpenCC.Converter({
+				from: "hk",
+				to: "cn",
+			});
+			if (this.isOpen)
+				return this.$message.info("已开启语音助手,无需重复开启");
+			let iiframe = this.$refs["iiframe"];
+			iiframe.contentWindow.window.document.getElementById(
+				"languageOptions"
+			).selectedIndex = 2; //普通话
+			iiframe.contentWindow.testdoContinuousPronunciationAssessment();
+			this.isOpen = true;
+			this.show = true;
+			this.aiText = "我是可可同学,我是个小小百事通,你有什么想和我聊一聊?";
+			iiframe.contentWindow.onRecognizedResult = (e) => {
+				let _msg = converter(e.privText);
 
-        console.log("👇");
-        console.log(_msg);
-        // _msg = converter(_msg)
-        if (!_msg) return console.log("输出为空");
-        if (this.show == true) {
-          if (
-            _msg.indexOf(converter("可可同学")) != -1 &&
-            _msg.indexOf(converter("停止")) != -1
-          ) {
-            this.stopTalk();
-          } else if (
-            this.showTextIndex == 2 ||
-            this.chatLoading ||
-            this.talkLoading
-          ) {
-            return console.log("组织语言中");
-            // }else if(_msg.indexOf('可可同学')!=-1 && _msg.indexOf("停止")!=-1){
-            // 	this.stopTalk();
-          } else {
-            this.showTextIndex = 1;
-            this.aiText = "";
-            this.userText += _msg;
-            this.scrollBottom();
-            this.aiStatus = 1;
-            if (this.timer) {
-              clearTimeout(this.timer);
-              this.timer = null;
-            }
-            this.timer = setTimeout(() => {
-              if (this.userText.indexOf(converter("关闭语音助手")) != -1) {
-                // return setTimeout(()=>{
-                this.show = false;
-                this.showTextIndex = 3;
-                this.aiStatus = 2;
-                this.aiText = "";
-                this.userText = "";
-                this.stopRecord();
-                return;
-                // },1000)
-              }
-              this.showTextIndex = 2;
-              this.aiText = "";
-              let regExp = new RegExp(
-                converter("计时") + "(.+)" + converter("分钟")
-              );
-              if (false && regExp.test(this.userText)) {
-                // setTimeout(() => {
-                // let _number = this.userText.match(regExp)[1];
-                // let _time = 0;
-                // if (!/^\d+$/.test(_number)) {
-                //   _time = this.chineseToNumber(_number) * 60;
-                // } else {
-                //   _time = parseInt(_numberList[1]) * 60;
-                // }
-                // this.$emit("startTime", _time);
-                // this.aiStatus = 0;
-                // this.showTextIndex = 0;
-                // this.aiText =
-                //   "好的,我已为您计时" +
-                //   this.userText.match(regExp)[1] +
-                //   "分钟。";
-                // this.userText = "";
-                // this.timer = setTimeout(() => {
-                //   this.showTextIndex = 3;
-                //   this.aiStatus = 2;
-                //   this.aiText = "";
-                //   this.userText = "";
-                // }, 3000);
-                // }, 2000);
-              } else {
-                this.chatLoading = true;
-                const _uuid = uuidv4();
-                let params = {
-                  assistant_id: "f8e1ebb2-2e0d-11ef-8bf4-12e77c4cb76b",
-                  userId: this.userId,
-                  message: this.userText,
-                  session_name: _uuid + "-qgt",
-                  uid: _uuid,
-                  file_ids: []
-                };
-                this.ajax
-                  // .post("https://claude3.cocorobo.cn/chat", params)
-                  // .post("https://gpt4.cocorobo.cn/chat", params)
-                  .post(
-                    "https://gpt4.cocorobo.cn/ai_agent_park_chat_new",
-                    params
-                  )
-                  .then(res => {
-                    if (
-                      converter(res.data.FunctionResponse.result) ==
-                      converter("发送成功")
-                    ) {
-                      this.userText = "";
-                    } else {
-                      // this.$message.warning(res.data.FunctionResponse.result);
-                      console.log(res.data.FunctionResponse.result);
-                      this.chatLoading = false;
-                      this.aiStatus = 0;
-                      this.showTextIndex = 0;
-                      this.aiText = "对不起,我无法理解您的问题,请重新提问";
-                      // this.timer = setTimeout(() => {
-                      //   this.showTextIndex = 3;
-                      //   this.aiStatus = 2;
-                      //   this.aiText = "";
-                      //   this.userText = "";
-                      // }, 3000);
-                    }
-                  })
-                  .catch(e => {
-                    console.log(e);
-                    this.chatLoading = false;
-                    this.aiStatus = 0;
-                    this.showTextIndex = 0;
-                    this.aiText = "对不起,我无法理解您的问题,请重新提问";
-                    // this.timer = setTimeout(() => {
-                    //   this.showTextIndex = 3;
-                    //   this.aiStatus = 2;
-                    //   this.aiText = "";
-                    //   this.userText = "";
-                    // }, 3000);
-                  });
-                // 通过流获取ai对话数据
-                this.getAtAuContent(_uuid);
-              }
-            }, 5000);
-          }
-        } else {
-          console.log("不响应");
-        }
-      };
-    },
-    stopRecord() {
-      // this.show = false;
-      // this.showIndex = 2;
-      // return
-      let iiframe = this.$refs["iiframe"];
-      iiframe.contentWindow.window.document
-        .getElementById("scenarioStopButton")
-        .click();
-      if (this.talkLoading) {
-        this.stopTalk();
-      }
-      // this.stopTalk();
-      // 录音借宿
-      iiframe.contentWindow.onSessionStopped = (s, e) => {
-        this.isOpen = false;
-        this.show = false;
-        this.showTextIndex = 3;
-        this.showIndex = 2;
-        this.$message.success("已关闭语音助手");
-        if (this.talkLoading) {
-          this.$refs.iiframe2.contentWindow.closesynthesizer();
-        }
-        this.userText = "";
-        this.aiText = "";
-      };
-    },
-    chineseToNumber(chinese) {
-      var OpenCC = require("opencc-js");
-      let converter = OpenCC.Converter({
-        from: "hk",
-        to: "cn"
-      });
-      chinese = converter(chinese);
-      const chineseNumbers = {
-        零: 0,
-        一: 1,
-        二: 2,
-        三: 3,
-        四: 4,
-        五: 5,
-        六: 6,
-        七: 7,
-        八: 8,
-        九: 9,
-        十: 10,
-        百: 100,
-        千: 1000,
-        万: 10000,
-        亿: 100000000
-      };
+				console.log("👇");
+				console.log(_msg);
+				// _msg = converter(_msg)
+				if (!_msg) return console.log("输出为空");
+				if (this.show == true) {
+					if (
+						_msg.indexOf(converter("可可同学")) != -1 &&
+						_msg.indexOf(converter("停止")) != -1
+					) {
+						this.stopTalk();
+					} else if (
+						this.showTextIndex == 2 ||
+						this.chatLoading ||
+						this.talkLoading
+					) {
+						return console.log("组织语言中");
+						// }else if(_msg.indexOf('可可同学')!=-1 && _msg.indexOf("停止")!=-1){
+						// 	this.stopTalk();
+					} else {
+						this.showTextIndex = 1;
+						this.aiText = "";
+						this.userText += _msg;
+						this.scrollBottom();
+						this.aiStatus = 1;
+						if (this.timer) {
+							clearTimeout(this.timer);
+							this.timer = null;
+						}
+						this.timer = setTimeout(() => {
+							if (this.userText.indexOf(converter("关闭语音助手")) != -1) {
+								// return setTimeout(()=>{
+								this.show = false;
+								this.showTextIndex = 3;
+								this.aiStatus = 2;
+								this.aiText = "";
+								this.userText = "";
+								this.stopRecord();
+								return;
+								// },1000)
+							}
+							this.showTextIndex = 2;
+							this.aiText = "";
+							let regExp = new RegExp(
+								converter("计时") + "(.+)" + converter("分钟")
+							);
+							if (false && regExp.test(this.userText)) {
+								// setTimeout(() => {
+								// let _number = this.userText.match(regExp)[1];
+								// let _time = 0;
+								// if (!/^\d+$/.test(_number)) {
+								//   _time = this.chineseToNumber(_number) * 60;
+								// } else {
+								//   _time = parseInt(_numberList[1]) * 60;
+								// }
+								// this.$emit("startTime", _time);
+								// this.aiStatus = 0;
+								// this.showTextIndex = 0;
+								// this.aiText =
+								//   "好的,我已为您计时" +
+								//   this.userText.match(regExp)[1] +
+								//   "分钟。";
+								// this.userText = "";
+								// this.timer = setTimeout(() => {
+								//   this.showTextIndex = 3;
+								//   this.aiStatus = 2;
+								//   this.aiText = "";
+								//   this.userText = "";
+								// }, 3000);
+								// }, 2000);
+							} else {
+								this.chatLoading = true;
+								const _uuid = uuidv4();
+								let params = {
+									assistant_id: "f8e1ebb2-2e0d-11ef-8bf4-12e77c4cb76b",
+									userId: this.userId,
+									message: this.userText,
+									session_name: _uuid + "-qgt",
+									uid: _uuid,
+									file_ids: [],
+								};
+								this.ajax
+									// .post("https://claude3.cocorobo.cn/chat", params)
+									// .post("https://gpt4.cocorobo.cn/chat", params)
+									.post(
+										"https://gpt4.cocorobo.cn/ai_agent_park_chat_new",
+										params
+									)
+									.then((res) => {
+										if (
+											converter(res.data.FunctionResponse.result) ==
+											converter("发送成功")
+										) {
+											this.userText = "";
+										} else {
+											// this.$message.warning(res.data.FunctionResponse.result);
+											console.log(res.data.FunctionResponse.result);
+											this.chatLoading = false;
+											this.aiStatus = 0;
+											this.showTextIndex = 0;
+											this.aiText = "对不起,我无法理解您的问题,请重新提问";
+											// this.timer = setTimeout(() => {
+											//   this.showTextIndex = 3;
+											//   this.aiStatus = 2;
+											//   this.aiText = "";
+											//   this.userText = "";
+											// }, 3000);
+										}
+									})
+									.catch((e) => {
+										console.log(e);
+										this.chatLoading = false;
+										this.aiStatus = 0;
+										this.showTextIndex = 0;
+										this.aiText = "对不起,我无法理解您的问题,请重新提问";
+										// this.timer = setTimeout(() => {
+										//   this.showTextIndex = 3;
+										//   this.aiStatus = 2;
+										//   this.aiText = "";
+										//   this.userText = "";
+										// }, 3000);
+									});
+								// 通过流获取ai对话数据
+								this.getAtAuContent(_uuid);
+							}
+						}, 5000);
+					}
+				} else {
+					console.log("不响应");
+				}
+			};
+		},
+		stopRecord() {
+			// this.show = false;
+			// this.showIndex = 2;
+			// return
+			let iiframe = this.$refs["iiframe"];
+			iiframe.contentWindow.window.document
+				.getElementById("scenarioStopButton")
+				.click();
+			if (this.talkLoading) {
+				this.stopTalk();
+			}
+			// this.stopTalk();
+			// 录音借宿
+			iiframe.contentWindow.onSessionStopped = (s, e) => {
+				this.isOpen = false;
+				this.show = false;
+				this.showTextIndex = 3;
+				this.showIndex = 2;
+				this.$message.success("已关闭语音助手");
+				if (this.talkLoading) {
+					this.$refs.iiframe2.contentWindow.closesynthesizer();
+				}
+				this.userText = "";
+				this.aiText = "";
+			};
+		},
+		chineseToNumber(chinese) {
+			var OpenCC = require("opencc-js");
+			let converter = OpenCC.Converter({
+				from: "hk",
+				to: "cn",
+			});
+			chinese = converter(chinese);
+			const chineseNumbers = {
+				零: 0,
+				一: 1,
+				二: 2,
+				三: 3,
+				四: 4,
+				五: 5,
+				六: 6,
+				七: 7,
+				八: 8,
+				九: 9,
+				十: 10,
+				百: 100,
+				千: 1000,
+				万: 10000,
+				亿: 100000000,
+			};
 
-      let result = 0;
-      let tempNum = 0; // 用于累积处理
-      let sectionNum = 0; // 每个段的值
+			let result = 0;
+			let tempNum = 0; // 用于累积处理
+			let sectionNum = 0; // 每个段的值
 
-      for (let i = 0; i < chinese.length; i++) {
-        const char = chinese[i];
-        const num = chineseNumbers[char];
+			for (let i = 0; i < chinese.length; i++) {
+				const char = chinese[i];
+				const num = chineseNumbers[char];
 
-        if (num === undefined) {
-          throw new Error(`Unexpected character: ${char}`);
-        }
+				if (num === undefined) {
+					throw new Error(`Unexpected character: ${char}`);
+				}
 
-        if (
-          num === 10 ||
-          num === 100 ||
-          num === 1000 ||
-          num === 10000 ||
-          num === 100000000
-        ) {
-          if (tempNum === 0) tempNum = 1; // 如果前面没有数,默认是1
-          tempNum *= num;
+				if (
+					num === 10 ||
+					num === 100 ||
+					num === 1000 ||
+					num === 10000 ||
+					num === 100000000
+				) {
+					if (tempNum === 0) tempNum = 1; // 如果前面没有数,默认是1
+					tempNum *= num;
 
-          if (num === 10000 || num === 100000000) {
-            sectionNum += tempNum;
-            result += sectionNum;
-            tempNum = 0;
-            sectionNum = 0;
-          }
-        } else {
-          tempNum += num;
-        }
-      }
+					if (num === 10000 || num === 100000000) {
+						sectionNum += tempNum;
+						result += sectionNum;
+						tempNum = 0;
+						sectionNum = 0;
+					}
+				} else {
+					tempNum += num;
+				}
+			}
 
-      result += sectionNum + tempNum;
-      return result;
-    },
-    removeMarkdown(text) {
-      return text
-        .replace(/[#*_~`>+\-]/g, "") // 移除 #、*、_、~、`、>、+、- 符号
-        .replace(/!\[.*?\]\(.*?\)/g, "") // 移除图片
-        .replace(/\[.*?\]\(.*?\)/g, "") // 移除链接
-        .replace(/```[\s\S]*?```/g, "") // 移除代码块(不使用 s 标志)
-        .replace(/`[^`]*`/g, "") // 移除行内代码
-        .replace(/\d+\./g, "") // 移除有序列表
-        .replace(/^\s*[-*+]\s+/gm, "") // 移除无序列表
-        .replace(/\s+/g, " ") // 将多个空白字符替换为一个空格
-        .trim(); // 去除字符串两端的空白字符
-    },
-    getAtAuContent(_uid) {
-      this.source = new EventSource(
-        `https://gpt4.cocorobo.cn/question/${_uid}`
-      );
-      //http://gpt4.cocorobo.cn:8011/question/   https://gpt4.cocorobo.cn/question/
-      let _allText = "";
-      let _mdText = "";
-      let _talkText = "";
-      // let _talkIndex = 0;
-      // const md = new MarkdownIt();
-      this.source.onmessage = _e => {
-        let _eData = JSON.parse(_e.data);
-        if (_eData.content.replace("'", "").replace("'", "") == "[DONE]") {
-          this.source.close();
-          this.source = null;
-          let _result = [];
-          if ("result" in _eData) {
-            _result = _eData.result;
-            for (let i = 0; i < _result.length; i++) {
-              _mdText = _mdText.replace(_result[i].text, _result[i].fileName);
-            }
-          }
-          _mdText = _mdText.replace("_", "");
-          this.aiText = _mdText;
-          this.scrollBottom();
-          if (_talkText != "") {
-            let _resultText = this.removeMarkdown(_talkText);
-            this.talkTextList.push(_resultText);
-            _talkText = "";
-            if (!this.talkLoading) this.talkText();
-          }
-          this.chatLoading = false;
-        } else {
-          // _talkIndex+=1;
-          let _text = _eData.content.replace("'", "").replace("'", "");
-          if (_allText == "") {
-            _allText = _text.replace(/^\n+/, ""); //去掉回复消息中偶尔开头就存在的连续换行符
-            _talkText += _text.replace(/^\n+/, "");
-          } else {
-            _allText += _text;
-            _talkText += _text;
-          }
-          `~`;
-          _mdText = _allText + "_";
-          _mdText = _mdText.replace(/\\n/g, "\n");
-          _mdText = _mdText.replace(/\\/g, "");
-          if (_allText.split("```").length % 2 == 0) _mdText += "\n```\n";
-          this.aiText = _mdText;
-          this.showTextIndex = 0;
-          this.scrollBottom();
-          if (/[,。:;?!)]/.test(_talkText)) {
-            let _resultText = this.removeMarkdown(_talkText);
-            this.talkTextList.push(_resultText);
-            _talkText = "";
-            if (!this.talkLoading) this.talkText();
-          }
-        }
-      };
-    },
-    talkText() {
-      let _text = this.talkTextList.shift();
-      let _talkTextIiframe2 = this.$refs.iiframe2;
+			result += sectionNum + tempNum;
+			return result;
+		},
+		removeMarkdown(text) {
+			return text
+				.replace(/[#*_~`>+\-]/g, "") // 移除 #、*、_、~、`、>、+、- 符号
+				.replace(/!\[.*?\]\(.*?\)/g, "") // 移除图片
+				.replace(/\[.*?\]\(.*?\)/g, "") // 移除链接
+				.replace(/```[\s\S]*?```/g, "") // 移除代码块(不使用 s 标志)
+				.replace(/`[^`]*`/g, "") // 移除行内代码
+				.replace(/\d+\./g, "") // 移除有序列表
+				.replace(/^\s*[-*+]\s+/gm, "") // 移除无序列表
+				.replace(/\s+/g, " ") // 将多个空白字符替换为一个空格
+				.trim(); // 去除字符串两端的空白字符
+		},
+		getAtAuContent(_uid) {
+			this.source = new EventSource(
+				`https://gpt4.cocorobo.cn/question/${_uid}`
+			);
+			//http://gpt4.cocorobo.cn:8011/question/   https://gpt4.cocorobo.cn/question/
+			let _allText = "";
+			let _mdText = "";
+			let _talkText = "";
+			// let _talkIndex = 0;
+			// const md = new MarkdownIt();
+			this.source.onmessage = (_e) => {
+				let _eData = JSON.parse(_e.data);
+				if (_eData.content.replace("'", "").replace("'", "") == "[DONE]") {
+					this.source.close();
+					this.source = null;
+					let _result = [];
+					if ("result" in _eData) {
+						_result = _eData.result;
+						for (let i = 0; i < _result.length; i++) {
+							_mdText = _mdText.replace(_result[i].text, _result[i].fileName);
+						}
+					}
+					_mdText = _mdText.replace("_", "");
+					this.aiText = _mdText;
+					this.scrollBottom();
+					if (_talkText != "") {
+						let _resultText = this.removeMarkdown(_talkText);
+						this.talkTextList.push(_resultText);
+						_talkText = "";
+						if (!this.talkLoading) this.talkText();
+					}
+					this.chatLoading = false;
+				} else {
+					// _talkIndex+=1;
+					let _text = _eData.content.replace("'", "").replace("'", "");
+					if (_allText == "") {
+						_allText = _text.replace(/^\n+/, ""); //去掉回复消息中偶尔开头就存在的连续换行符
+						_talkText += _text.replace(/^\n+/, "");
+					} else {
+						_allText += _text;
+						_talkText += _text;
+					}
+					`~`;
+					_mdText = _allText + "_";
+					_mdText = _mdText.replace(/\\n/g, "\n");
+					_mdText = _mdText.replace(/\\/g, "");
+					if (_allText.split("```").length % 2 == 0) _mdText += "\n```\n";
+					this.aiText = _mdText;
+					this.showTextIndex = 0;
+					this.scrollBottom();
+					if (/[,。:;?!)]/.test(_talkText)) {
+						let _resultText = this.removeMarkdown(_talkText);
+						this.talkTextList.push(_resultText);
+						_talkText = "";
+						if (!this.talkLoading) this.talkText();
+					}
+				}
+			};
+		},
+		talkText() {
+			let _text = this.talkTextList.shift();
+			let _talkTextIiframe2 = this.$refs.iiframe2;
 
-      if (_text) {
-        this.talkLoading = true;
-        if (this.timer) {
-          clearTimeout(this.timer);
-          this.timer = null;
-        }
-        console.log(`👉转语音:${_text}`);
-        _talkTextIiframe2.contentWindow.texttospeech(
-          _text,
-          this.talkText,
-          this.endTalk
-        );
-      } else {
-        _talkTextIiframe2.contentWindow.closesynthesizer();
-      }
-    },
-    endTalk() {
-      console.log("👉转语音结束👈");
-      this.talkLoading = false;
-    },
-    stopTalk() {
-      // return this.$message.info("停止")
-      this.talkTextList = [];
-      try {
-        let _talkTextIiframe2 = this.$refs.iiframe2;
-        _talkTextIiframe2.contentWindow.pausesynthesizer();
-        _talkTextIiframe2.contentWindow.closesynthesizer();
-        this.talkLoading = false;
-      } catch (error) {
-        this.talkLoading = false;
-      }
-    },
-    interrupt() {
-      // return this.$message.info("打断")
-      if (this.source) {
-        try {
-          this.source.close();
-        } catch (error) {
-          console.log(error);
-        }
-      }
-      this.stopTalk();
-    }
-  }
+			if (_text) {
+				this.talkLoading = true;
+				if (this.timer) {
+					clearTimeout(this.timer);
+					this.timer = null;
+				}
+				console.log(`👉转语音:${_text}`);
+				_talkTextIiframe2.contentWindow.texttospeech(
+					_text,
+					this.talkText,
+					this.endTalk
+				);
+			} else {
+				_talkTextIiframe2.contentWindow.closesynthesizer();
+			}
+		},
+		endTalk() {
+			console.log("👉转语音结束👈");
+			this.talkLoading = false;
+		},
+		stopTalk() {
+			// return this.$message.info("停止")
+			this.talkTextList = [];
+			try {
+				let _talkTextIiframe2 = this.$refs.iiframe2;
+				_talkTextIiframe2.contentWindow.pausesynthesizer();
+				_talkTextIiframe2.contentWindow.closesynthesizer();
+				this.talkLoading = false;
+			} catch (error) {
+				this.talkLoading = false;
+			}
+		},
+		interrupt() {
+			// return this.$message.info("打断")
+			if (this.source) {
+				try {
+					this.source.close();
+				} catch (error) {
+					console.log(error);
+				}
+			}
+			this.stopTalk();
+		},
+	},
 };
 </script>
 
 <style scoped>
 .languageAssistant {
-  width: 100%;
-  height: 100%;
-  border-radius: 10px 0 0 10px;
-  /* background-image: linear-gradient(to top, #007adf 0%, #00ecbc 100%);
+	width: 100%;
+	height: 100%;
+	border-radius: 10px 0 0 10px;
+	/* background-image: linear-gradient(to top, #007adf 0%, #00ecbc 100%);
 	 */
-  background-image: url('../../../assets/icon/course/aibgImage.png');
+	background-image: url("../../../assets/icon/course/aibgImage.png");
 	background-repeat: no-repeat;
 	background-size: 100% 100%;
-  /* display: flex;
+	/* display: flex;
   flex-direction: column;
   align-items: center; */
-  /* justify-content: center; */
-  overflow: auto;
-  text-align: center;
+	/* justify-content: center; */
+	overflow: auto;
+	text-align: center;
 }
 
 .la_coco {
-  height: 170px;
-  width: 100%;
-  display: flex;
-  justify-content: center;
-  align-items: flex-end;
+	height: 170px;
+	width: 100%;
+	display: flex;
+	justify-content: center;
+	align-items: flex-end;
 }
 
 .la_message {
-  /* max-height: 400px; */
-  /* min-height: 400px; */
-  height: auto;
-  max-height: calc(100% - 170px - 200px - 40px);
-  width: 100%;
-  /* display: flex; */
-  padding: 10px;
-  box-sizing: border-box;
-  margin: 20px 0;
-  overflow: auto;
+	/* max-height: 400px; */
+	/* min-height: 400px; */
+	height: auto;
+	max-height: calc(100% - 170px - 200px - 40px);
+	width: 100%;
+	/* display: flex; */
+	padding: 10px;
+	box-sizing: border-box;
+	margin: 20px 0;
+	overflow: auto;
 }
 
 .la_m_talk {
-  /* width:100%; */
-  height: auto;
-  /* max-height: calc(100% - 170px - 200px - 40px); */
-  box-sizing: border-box;
+	/* width:100%; */
+	height: auto;
+	/* max-height: calc(100% - 170px - 200px - 40px); */
+	box-sizing: border-box;
 }
 
 .la_m_talk > div {
-  background: #bfbfbf;
-  padding: 10px;
-  box-sizing: border-box;
-  border-radius: 10px;
-  text-align: left;
+	background: #bfbfbf;
+	padding: 10px;
+	box-sizing: border-box;
+	border-radius: 12px;
+	text-align: left;
+	background: #00000042;
+	color: #fff;
 }
 
 .la_btn {
-  height: 200px;
-  width: 100%;
-  display: flex;
+	height: 200px;
+	width: 100%;
+	display: flex;
 }
 
 .la_b_noTel {
-  width: 100%;
-  height: 100%;
-  display: flex;
-  justify-content: center;
-  align-items: center;
+	width: 100%;
+	height: 100%;
+	display: flex;
+	justify-content: center;
+	align-items: center;
 }
 
-.la_b_noTel >span> svg {
-  fill: #52c41a;
-  width: 80px;
-  height: 80px;
-  cursor: pointer;
+.la_b_noTel > span > svg {
+	fill: #52c41a;
+	width: 80px;
+	height: 80px;
+	cursor: pointer;
 }
 
 .la_b_isTel {
-  width: 100%;
-  height: 100%;
-  display: flex;
-  justify-content: center;
-  align-items: center;
+	width: 100%;
+	height: 100%;
+	display: flex;
+	justify-content: center;
+	align-items: center;
 }
 
 .la_b_isTel > svg {
-  fill: #ff0e55;
-  width: 80px;
-  height: 80px;
-  cursor: pointer;
-  transform: rotate(-135deg);
+	fill: #ff0e55;
+	width: 80px;
+	height: 80px;
+	cursor: pointer;
+	transform: rotate(-135deg);
+}
+
+.la_b_isTel > span > svg,
+img {
+	cursor: pointer;
 }
 
 .la_b_isTel > span {
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  width: 45px;
-  height: 45px;
-  border-radius: 50%;
-  cursor: pointer;
-  margin: 0 20px;
-  padding: 5px;
-  background: #bfbfbf;
+	width: 56px;
+	height: 56px;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	margin: 0 30px;
+}
+
+.readAloud {
+	border-radius: 100%;
+	background-color: #517291;
+	cursor: pointer;
+	box-shadow: 0px 2px 4px -1px #0000001f;
+
+	box-shadow: 0px 4px 5px 0px #00000014;
+
+	box-shadow: 0px 1px 10px 0px #0000000d;
 }
 
-.la_b_isTel > span > svg {
-  border: solid 2px black;
-  border-radius: 50%;
-  width: 100%;
-  height: 100%;
-  display: flex;
-  justify-content: center;
-  align-items: center;
+.readAloud > svg {
+	width: 22px;
+	height: 22px;
+	fill: #fff;
 }
 </style>

+ 2 - 2
src/components/classRoomHelper/component/levitatedSphere.vue

@@ -14,9 +14,9 @@
         fit="fill"
       ></el-image>
       <el-image
-        style="width: 100%; height: 100%"
+        style="width: 100%; height: 100%;transform: scale(1.3,1.3);"
         v-show="aiStatus == 0"
-        :src="require('../../../assets/icon/course/aiWait.svg')"
+        :src="require('../../../assets/icon/course/aiWait2.svg')"
         fit="fill"
       ></el-image>
     </div>

File diff suppressed because it is too large
+ 559 - 233
src/components/classRoomHelper/component/taskArea.vue


+ 215 - 161
src/components/classRoomHelper/index.vue

@@ -6,7 +6,7 @@
         ref="searchAreaRef"
         :navList="navList"
         :tcid="tcid"
-				:openMegaphone="openMegaphone"
+        :openMegaphone="openMegaphone"
         :fileId="fileId"
         :recordType="recordType"
         v-if="itemType == 1"
@@ -17,14 +17,19 @@
         :courseType="courseType"
         :taskCount="taskCount"
         :worksStudent="worksStudent"
-				:openMegaphone="openMegaphone"
+        :openMegaphone="openMegaphone"
         ref="taskAreaRef"
         :fileId="fileId"
         v-if="itemType == 2"
       />
-			<countdown ref="countdownRef"  :fileId="fileId" :courseDetail="courseDetail" v-show="itemType==3"/>
+      <countdown
+        ref="countdownRef"
+        :fileId="fileId"
+        :courseDetail="courseDetail"
+        v-show="itemType == 3"
+      />
 
-			<languageAssistant ref="languageAssistantRef" v-if="itemType==4"/>
+      <languageAssistant ref="languageAssistantRef" v-if="itemType == 4" />
       <!-- <dialogArea
         :courseDetail="courseDetail"
 				:openMegaphone="openMegaphone"
@@ -35,57 +40,19 @@
     </div>
     <div class="ch_nav_box">
       <div class="ch_nav_box_top">
-        <div @click="changeFold(!fold)">
-          <el-tooltip class="item" effect="dark" :content="fold?'折叠':'展开'" placement="top">
+        <div @click="changeFold(!fold)" ref="foldBtnRef">
+          <el-tooltip
+            class="item"
+            effect="dark"
+            :content="fold ? '折叠' : '展开'"
+            placement="top"
+          >
             <img
               :src="require('../../assets/icon/course/foldIcon.svg')"
               alt=""
-							:style="`${fold?'transform: rotate(90deg);':''}`"
+              :style="`${fold ? 'transform: rotate(90deg);' : ''}`"
             />
           </el-tooltip>
-          <div v-if="fold" class="itemFold">
-            <div @click="$emit('backPage')">
-              <el-tooltip
-                class="item"
-                effect="dark"
-                content="返回"
-                placement="top"
-              >
-                <img
-                  :src="require('../../assets/icon/course/return.png')"
-                  alt=""
-                />
-              </el-tooltip>
-            </div>
-
-            <div @click="$emit('refresh')">
-              <el-tooltip
-                class="item"
-                effect="dark"
-                content="刷新"
-                placement="top"
-              >
-                <img
-                  :src="require('../../assets/icon/course/refresh.png')"
-                  alt=""
-                />
-              </el-tooltip>
-            </div>
-
-            <div @click="$emit('authority')" v-if="tType == 1 || tType == 4">
-              <el-tooltip
-                class="item"
-                effect="dark"
-                content="权限"
-                placement="top"
-              >
-                <img
-                  :src="require('../../assets/icon/course/setting.png')"
-                  alt=""
-                />
-              </el-tooltip>
-            </div>
-          </div>
         </div>
 
         <div @click="$emit('review')" v-if="tType == 1">
@@ -98,7 +65,10 @@
           </el-tooltip>
         </div>
 
-				<div @click="startRecording()" v-if="!videoStart && (tType == 1 || tType == 4)">
+        <div
+          @click="startRecording()"
+          v-if="!videoStart && (tType == 1 || tType == 4)"
+        >
           <el-tooltip class="item" effect="dark" content="录制" placement="top">
             <img
               :src="require('../../assets/icon/course/record3.svg')"
@@ -108,7 +78,11 @@
           </el-tooltip>
         </div>
 
-				<div @click="$emit('stopRecording')" v-else-if="(tType == 1 || tType == 4)" style="background:#f63564">
+        <div
+          @click="$emit('stopRecording')"
+          v-else-if="tType == 1 || tType == 4"
+          style="background:#f63564"
+        >
           <el-tooltip class="item" effect="dark" content="下载" placement="top">
             <img
               :src="require('../../assets/icon/course/record4.svg')"
@@ -117,8 +91,6 @@
             />
           </el-tooltip>
         </div>
-
-				
       </div>
       <div class="ch_nav_box_middle">
         <div
@@ -140,7 +112,7 @@
           <div>任务</div>
         </div>
 
-				<div
+        <div
           :class="[
             'ch_nav_box_middle_item',
             itemType == 1 ? 'ch_nav_box_middle_item_active' : ''
@@ -178,21 +150,17 @@
         </div>
       </div>
       <div class="ch_nav_box_bottom">
-
-
-				<div @click.stop="commentAndAnnotate()">
-					<el-tooltip
-            class="item"
-            effect="dark"
-            content="批注"
-            placement="top"
-          >
-            <img :src="require('../../assets/icon/course/edit2.svg')" v-if="!AnnotationCanvasShow"/>
-						<img :src="require('../../assets/icon/course/edit3.svg')" v-else/>
+        <div @click.stop="commentAndAnnotate()">
+          <el-tooltip class="item" effect="dark" content="批注" placement="top">
+            <img
+              :src="require('../../assets/icon/course/edit2.svg')"
+              v-if="!AnnotationCanvasShow"
+            />
+            <img :src="require('../../assets/icon/course/edit3.svg')" v-else />
           </el-tooltip>
-				</div>
+        </div>
 
-				<!-- <div @click.stop="changeItemType(4)" :class="[itemType == 4?'ch_nav_box_middle_item_active':'']">
+        <!-- <div @click.stop="changeItemType(4)" :class="[itemType == 4?'ch_nav_box_middle_item_active':'']">
 					<el-tooltip
             class="item"
             effect="dark"
@@ -204,17 +172,23 @@
           </el-tooltip>
 				</div> -->
 
-				<div @click.stop="startAssistant()" :class="[recordType==1?'ch_nav_box_middle_item_active':'']">
-					<el-tooltip
+        <div
+          @click.stop="startAssistant()"
+          :class="[recordType == 1 ? 'ch_nav_box_middle_item_active' : '']"
+        >
+          <el-tooltip
             class="item"
             effect="dark"
-            :content="recordType==0?'开启语音助手':'关闭语音助手'"
+            :content="recordType == 0 ? '开启语音助手' : '关闭语音助手'"
             placement="top"
           >
-            <img v-if="recordType!=1" :src="require('../../assets/icon/course/robot3.svg')" />
-						<img v-else :src="require('../../assets/icon/course/robot3.svg')" />
+            <img
+              v-if="recordType != 1"
+              :src="require('../../assets/icon/course/robot3.svg')"
+            />
+            <img v-else :src="require('../../assets/icon/course/robot3.svg')" />
           </el-tooltip>
-				</div>
+        </div>
 
         <div @click.stop="$emit('goStep', 0)">
           <el-tooltip
@@ -250,9 +224,30 @@
         </div>
       </div>
     </div>
+    <div v-show="fold" class="itemFold" ref="itemFoldRef">
+      <div @click="$emit('backPage')">
+       
+          <img :src="require('../../assets/icon/course/return.png')" alt="" />
+				<span>返回</span>
+      </div>
+
+      <div @click="$emit('refresh')">
+          <img :src="require('../../assets/icon/course/refresh.png')" alt="" />
+					<span>刷新</span>
+      </div>
+
+      <div @click="$emit('authority')" v-if="tType == 1 || tType == 4">
+          <img :src="require('../../assets/icon/course/setting.png')" alt="" />
+					<span>权限</span>
+      </div>
+    </div>
     <levitatedSphere ref="levitatedSphereRef" @startTime="startTime" />
     <timepiece ref="timepieceRef" />
-		<AnnotationCanvas ref="AnnotationCanvasRef" @close="endCommentAndAnnotate" @changeStatus="changeAnnotationCanvasShow"/>
+    <AnnotationCanvas
+      ref="AnnotationCanvasRef"
+      @close="endCommentAndAnnotate"
+      @changeStatus="changeAnnotationCanvasShow"
+    />
   </div>
 </template>
 
@@ -263,19 +258,27 @@ import taskArea from "./component/taskArea.vue";
 import levitatedSphere from "./component/levitatedSphere.vue";
 import timepiece from "./component/timepiece.vue";
 import countdown from "./component/countdown.vue";
-import AnnotationCanvas from './component/AnnotationCanvas.vue'
+import AnnotationCanvas from "./component/AnnotationCanvas.vue";
 import languageAssistant from "./component/languageAssistant.vue";
 export default {
-  emits: ["refresh", "goStep", "backPage", "authority", "review","stopRecording","startRecording"],
+  emits: [
+    "refresh",
+    "goStep",
+    "backPage",
+    "authority",
+    "review",
+    "stopRecording",
+    "startRecording"
+  ],
   components: {
     searchArea,
     taskArea,
     // dialogArea,
     levitatedSphere,
     timepiece,
-		countdown,
-		AnnotationCanvas,
-		languageAssistant
+    countdown,
+    AnnotationCanvas,
+    languageAssistant
   },
   props: {
     courseDetail: {
@@ -310,24 +313,24 @@ export default {
       type: Array,
       default: () => []
     },
-		videoStart:{
-			type:Boolean,
-			default:false,
-		},
+    videoStart: {
+      type: Boolean,
+      default: false
+    }
   },
   data() {
     return {
-			userid: this.$route.query.userid,
+      userid: this.$route.query.userid,
       courseId: this.$route.query.courseId,
       type: 0,
       itemType: 0, //0--无  1-搜索  2-任务 3-对话
       fileId: [],
       recordType: 0,
-			recordLoading:false,
+      recordLoading: false,
       fold: false,
-			openMegaphone:false,//是否打开喇叭
+      openMegaphone: false, //是否打开喇叭
       getFileIdLoading: false,
-			AnnotationCanvasShow:false,
+      AnnotationCanvasShow: false
     };
   },
   mounted() {
@@ -335,33 +338,42 @@ export default {
     this.getFileId();
   },
   methods: {
-		changeAnnotationCanvasShow(newValue){
-			this.AnnotationCanvasShow = newValue;
-		},
-		startRecording(){
-			this.$emit('startRecording');
-			this.insertMemorandum(`使用<span class="btn">录制</span>功能,录制课堂`);
-		},
-		insertMemorandum(_html){//保存行为操作
-			//variable
-			//btn
-			let params = [{
-				uid:this.userid,
-				courseId:this.courseId,
-				content:_html
-			}]
-
-			this.ajax.post(this.$store.state.api+'insert_systemOperation_countdownBehavior',params).then(res=>{
-				if(res.data==1){
-					console.log('保存操作成功')
-				}else{
-					console.log('保存操作失败')
-				}
-			}).catch(e=>{
-				console.log('保存操作失败')
-				console.log(e)
-			})
-		},
+    changeAnnotationCanvasShow(newValue) {
+      this.AnnotationCanvasShow = newValue;
+    },
+    startRecording() {
+      this.$emit("startRecording");
+      this.insertMemorandum(`使用<span class="btn">录制</span>功能,录制课堂`);
+    },
+    insertMemorandum(_html) {
+      //保存行为操作
+      //variable
+      //btn
+      let params = [
+        {
+          uid: this.userid,
+          courseId: this.courseId,
+          content: _html
+        }
+      ];
+
+      this.ajax
+        .post(
+          this.$store.state.api + "insert_systemOperation_countdownBehavior",
+          params
+        )
+        .then(res => {
+          if (res.data == 1) {
+            console.log("保存操作成功");
+          } else {
+            console.log("保存操作失败");
+          }
+        })
+        .catch(e => {
+          console.log("保存操作失败");
+          console.log(e);
+        });
+    },
     setWidth() {
       let w = this.$refs.ch_box;
       let w2 = w.offsetWidth + 30 + "px";
@@ -376,8 +388,8 @@ export default {
     changeItemType(type) {
       this.type = 0;
       this.openSetting();
-			// this.$message.info("切换到"+type)
-			this.$nextTick(() => {
+      // this.$message.info("切换到"+type)
+      this.$nextTick(() => {
         // if (this.itemType == 1 && type != 1) {
         //   this.$refs.searchAreaRef.scrollBottom();
         //   this.$refs.searchAreaRef.getWantSearch();
@@ -387,13 +399,14 @@ export default {
         //   this.$refs.dialogAreaRef.scrollBottom();
         // }
         this.itemType = type;
-				if(this.itemType==4 && this.recordType==1){//关闭悬浮语音助手
-					this.$refs.levitatedSphereRef.stopRecord();
-				}
+        if (this.itemType == 4 && this.recordType == 1) {
+          //关闭悬浮语音助手
+          this.$refs.levitatedSphereRef.stopRecord();
+        }
 
-				if(this.itemType==3){
-					this.insertMemorandum(`打开<span class="btn">倒计时</span>面板`)
-				}
+        if (this.itemType == 3) {
+          this.insertMemorandum(`打开<span class="btn">倒计时</span>面板`);
+        }
       });
     },
     //计时
@@ -440,46 +453,71 @@ export default {
       });
     },
     startAssistant() {
-			if(this.recordLoading)return this.$message.info("请稍等...")
-			this.recordLoading = true;
-			if (this.recordType == 0) {
-				if(this.itemType==4){
-					this.itemType = 0;
-					this.type = 0;
-				}				
-			// this.$message.info("开启")
-				// this.changeRecordType(1)
+      if (this.recordLoading) return this.$message.info("请稍等...");
+      this.recordLoading = true;
+      if (this.recordType == 0) {
+        if (this.itemType == 4) {
+          this.itemType = 0;
+          this.type = 0;
+        }
+        // this.$message.info("开启")
+        // this.changeRecordType(1)
         this.$refs.levitatedSphereRef.recordStart();
       } else if (this.recordType == 1) {
-				// this.$message.info("关闭")
-				// this.changeRecordType(0)
+        // this.$message.info("关闭")
+        // this.changeRecordType(0)
         this.$refs.levitatedSphereRef.stopRecord();
       }
     },
-		changeMegaphone(){
-			this.openMegaphone = !this.openMegaphone;
-			if(this.openMegaphone){
-				this.$message.success("已开启AI语音")
-			}else{
-				this.$message.success("已关闭AI语音")
-			}
-		},
+    changeMegaphone() {
+      this.openMegaphone = !this.openMegaphone;
+      if (this.openMegaphone) {
+        this.$message.success("已开启AI语音");
+      } else {
+        this.$message.success("已关闭AI语音");
+      }
+    },
     // 展开
     changeFold(newValue) {
       // this.$message.info("展开");
-			this.fold = newValue;
+      this.fold = newValue;
+			console.log(this.$refs.foldBtnRef)
+			let e1 = this.$refs.foldBtnRef.getBoundingClientRect();
+			let e2 = this.$refs.ch_box.getBoundingClientRect();
+
+			console.log('👇👇')
+			console.log(e1.top - e2.top)
+			this.$refs.itemFoldRef.style.top = e1.top - e2.top + "px";
+    },
+    // 收起
+    changeUnfold(newValue) {
+      // this.$message.info("收起");
+      this.fold = newValue;
+    },
+    insertMemorandum(text) {
+      this.$refs.MemorandumRef.insertMemorandum(text);
+    },
+    // 语音识别
+    startRecord() {
+      this.$refs.levitatedSphereRef.startRecord();
+    },
+    stopRecord() {
+      this.$refs.levitatedSphereRef.stopRecord();
+    },
+    // 语音合成
+    startSpeak() {
     },
     changeRecordType(type) {
-			this.recordLoading = false;
+      this.recordLoading = false;
       this.recordType = type;
     },
-		commentAndAnnotate(){
-			this.$refs.AnnotationCanvasRef.open();
-			this.insertMemorandum(`开始使用<span class="btn">批注</span>功能`)
-		},
-		endCommentAndAnnotate(){
-			this.insertMemorandum(`结束使用<span class="btn">批注</span>功能`)
-		}
+    commentAndAnnotate() {
+      this.$refs.AnnotationCanvasRef.open();
+      this.insertMemorandum(`开始使用<span class="btn">批注</span>功能`);
+    },
+    endCommentAndAnnotate() {
+      this.insertMemorandum(`结束使用<span class="btn">批注</span>功能`);
+    }
   }
 };
 </script>
@@ -504,8 +542,8 @@ export default {
   display: flex;
   flex-direction: column;
   align-items: center;
-	overflow-y: auto !important; /* 上下溢出显示滚动条 */
-	overflow-x: hidden !important; /* 左右溢出正常溢出 */
+  overflow-y: auto !important; /* 上下溢出显示滚动条 */
+  overflow-x: hidden !important; /* 左右溢出正常溢出 */
   position: relative;
 }
 
@@ -571,7 +609,7 @@ export default {
 
 .ch_nav_box_top {
   width: 100%;
-	height:auto;
+  height: auto;
   margin-top: auto;
 }
 
@@ -588,33 +626,49 @@ export default {
 .ch_nav_box_top > div > img {
   width: 24px;
   height: 24px;
-	transition: .3s;
+  transition: 0.3s;
 }
 
 .itemFold {
   position: absolute;
-  width: 65px;
-	left:0;
-	top: 65px;
+  width: 130px;
+  right: 65px;
+  top: 0;
   background: rgb(255, 255, 255);
   box-sizing: border-box;
   border: solid 1px #eaeaea;
-	/* border-top: solid 1px #eaeaea; */
+  /* border-top: solid 1px #eaeaea; */
   z-index: 1000; /* 确保二级菜单在主菜单上层 */
-	border-radius: 10px;
+  border-radius: 10px;
+	box-sizing: border-box;
+	padding:10px;
+	display:flex;
+	flex-direction: column;
+	justify-content: center;
+	align-items: center;
 }
 
 .itemFold > div {
   width: 100%;
-  height: 65px;
+  height: 45px;
   display: flex;
   justify-content: center;
   align-items: center;
   cursor: pointer;
+	margin: 5px 0;
+	border-radius: 10px;
+}
+
+.itemFold > div:hover{
+	background:#F3F7FD;
 }
 
 .itemFold > div > img {
   width: 24px;
   height: 24px;
 }
+
+.itemFold > div > span{
+	margin-left:10px;
+}
 </style>

+ 15 - 2
src/components/easy2/studyStudent.vue

@@ -12447,8 +12447,8 @@ export default {
 				isScoreList:[],	
 			},
 			classRoomHelperWidth: '85px',
-			orgArray:['1973f6c7-1561-11ee-91d8-005056b86db5','777559d2-7239-11ee-b98c-005056b86db5','884c5665-a453-46f3-b7b6-01d575290aa9','0fec3a8a-ad04-11ed-b13d-005056b86db5','c9a6de59-8b4f-4be1-8565-a08081f649d3','7ada499f-4ec7-11ed-8c78-005056b86db5'],
-      oidArray:['f297fbdc-f0a0-11ee-b534-005056b86db5','45facc0a-1211-11ec-80ad-005056b86db5'],
+			orgArray:[],
+      oidArray:[],
       refreshKey:0,
       AIloading:[],
       worksStudentCopy:[],
@@ -12456,6 +12456,18 @@ export default {
     };
   },
   methods: {
+		getAIJ(){
+			this.ajax.get(this.$store.state.api+"getAIJ","").then(res=>{
+				let oid = res.data[0];
+				let org = res.data[1];
+				let oidArray = [];
+				let orgArray = [];
+				oid.forEach(i=>oidArray.push(i.oid))
+				org.forEach(i=>orgArray.push(i.oid))
+				this.orgArray = orgArray;
+				this.oidArray = oidArray;
+			})
+		},
     async loopEva(con,tit,stage,task,toolIndex,toolDetail,worksStudent){
         console.log(con,tit,stage,task,toolIndex,toolDetail);
 
@@ -20320,6 +20332,7 @@ export default {
     this.selectCount();
     this.getHomeWork();
     this.selectUser();
+		this.getAIJ()
     this.contentDialog = true;
     this.setContent2(true);
     if (this.tType == 4) {

+ 15 - 2
src/components/easy3/studyStudent.vue

@@ -12421,11 +12421,23 @@ export default {
 				isScoreList:[],	
 			},
 			classRoomHelperWidth: '85px',
-			orgArray:['1973f6c7-1561-11ee-91d8-005056b86db5','777559d2-7239-11ee-b98c-005056b86db5','884c5665-a453-46f3-b7b6-01d575290aa9','0fec3a8a-ad04-11ed-b13d-005056b86db5','c9a6de59-8b4f-4be1-8565-a08081f649d3',"7ada499f-4ec7-11ed-8c78-005056b86db5"],
-      oidArray:['f297fbdc-f0a0-11ee-b534-005056b86db5','45facc0a-1211-11ec-80ad-005056b86db5']
+			orgArray:[],
+      oidArray:[]
     };
   },
   methods: {
+		getAIJ(){
+			this.ajax.get(this.$store.state.api+"getAIJ","").then(res=>{
+				let oid = res.data[0];
+				let org = res.data[1];
+				let oidArray = [];
+				let orgArray = [];
+				oid.forEach(i=>oidArray.push(i.oid))
+				org.forEach(i=>orgArray.push(i.oid))
+				this.orgArray = orgArray;
+				this.oidArray = oidArray;
+			})
+		},
     gx(){
       this.$forceUpdate();
     },
@@ -20177,6 +20189,7 @@ export default {
     this.selectCount();
     this.getHomeWork();
     this.selectUser();
+		this.getAIJ();
     this.contentDialog = true;
     this.setContent2(true);
     if (this.tType == 4) {

+ 15 - 2
src/components/studyStudent.vue

@@ -12359,8 +12359,8 @@ export default {
 				isScoreList:[],	
 			},
       classRoomHelperWidth: '85px',
-			orgArray:['1973f6c7-1561-11ee-91d8-005056b86db5','777559d2-7239-11ee-b98c-005056b86db5','884c5665-a453-46f3-b7b6-01d575290aa9','0fec3a8a-ad04-11ed-b13d-005056b86db5','c9a6de59-8b4f-4be1-8565-a08081f649d3','7ada499f-4ec7-11ed-8c78-005056b86db5'],
-      oidArray:['f297fbdc-f0a0-11ee-b534-005056b86db5','45facc0a-1211-11ec-80ad-005056b86db5'],
+			orgArray:[],
+      oidArray:[],
 			toolsList:{
     58: "模拟驾驶",
     59: "路径搜索",
@@ -12404,6 +12404,18 @@ export default {
     };
   },
   methods: {
+		getAIJ(){
+			this.ajax.get(this.$store.state.api+"getAIJ","").then(res=>{
+				let oid = res.data[0];
+				let org = res.data[1];
+				let oidArray = [];
+				let orgArray = [];
+				oid.forEach(i=>oidArray.push(i.oid))
+				org.forEach(i=>orgArray.push(i.oid))
+				this.orgArray = orgArray;
+				this.oidArray = oidArray;
+			})
+		},
 		insertMemorandum(_html){//保存行为操作
 			return;
 			//variable
@@ -20203,6 +20215,7 @@ export default {
     this.selectCount();
     this.getHomeWork();
     this.selectUser();
+		this.getAIJ();
     this.contentDialog = true;
     this.setContent2(true);
     if (this.tType == 4) {

Some files were not shown because too many files changed in this diff