SanHQin 6 mēneši atpakaļ
vecāks
revīzija
e3e98c4079

BIN
src/assets/icon/classroomObservation/aiImage2.png


+ 5 - 0
src/assets/icon/classroomObservation/courseIcon.svg

@@ -0,0 +1,5 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M2.5 14.5V5.5V4H5.5H8.5H13.5V14.5H2.5Z" fill="#3681FC"/>
+<path d="M13.5 1.5H3.5C2.94771 1.5 2.5 1.94772 2.5 2.5V4M2.5 4H5.5M2.5 4L2.5 5.5V14.5H13.5V4H8.5M5.5 4V9.5L7 8.5L8.5 9.5V4M5.5 4H8.5" stroke="#3681FC" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M8.5 4.5H5.5V9.5L7 8.5L8.5 9.5V4.5Z" fill="white"/>
+</svg>

+ 6 - 0
src/assets/icon/classroomObservation/del2.svg

@@ -0,0 +1,6 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M6.25 3.125C6.25 2.77982 6.52982 2.5 6.875 2.5H13.125C13.4702 2.5 13.75 2.77982 13.75 3.125C13.75 3.47018 13.4702 3.75 13.125 3.75H6.875C6.52982 3.75 6.25 3.47018 6.25 3.125Z" fill="black" fill-opacity="0.6"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M2.5 5.625C2.5 5.26481 2.77982 5 3.125 5H16.875C17.2202 5 17.5 5.26481 17.5 5.625C17.5 6.03952 17.2202 6.25 16.875 6.25L15.625 6.30435V17.5H4.375V6.25H3.125C2.77982 6.25 2.5 6.03952 2.5 5.625ZM5.625 6.25V16.1957L14.375 16.25V6.30435L5.625 6.25Z" fill="black" fill-opacity="0.6"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M8.125 8.06838C8.47018 8.06838 8.75 8.32276 8.75 8.63656V13.7502C8.75 14.064 8.47018 14.3184 8.125 14.3184C7.77982 14.3184 7.5 14.064 7.5 13.7502V8.63656C7.5 8.32276 7.77982 8.06838 8.125 8.06838Z" fill="black" fill-opacity="0.6"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M11.875 8.06838C12.2202 8.06838 12.5 8.32276 12.5 8.63656V13.7502C12.5 14.064 12.2202 14.3184 11.875 14.3184C11.5298 14.3184 11.25 14.064 11.25 13.7502V8.63656C11.25 8.32276 11.5298 8.06838 11.875 8.06838Z" fill="black" fill-opacity="0.6"/>
+</svg>

+ 4 - 0
src/assets/icon/classroomObservation/editIcon2.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="M2 2.5C2 2.22386 2.22386 2 2.5 2H8.5C8.77614 2 9 2.22386 9 2.5C9 2.77614 8.77614 3 8.5 3H3V13H13V8.5C13 8.22386 13.2239 8 13.5 8C13.7761 8 14 8.22386 14 8.5V13.5C14 13.7761 13.7761 14 13.5 14H2.5C2.22386 14 2 13.7761 2 13.5V2.5Z" fill="black" fill-opacity="0.4"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M13.8536 2.14645C14.0488 2.34171 14.0488 2.65829 13.8536 2.85355L7.85355 8.85355C7.65829 9.04882 7.34171 9.04882 7.14645 8.85355C6.95118 8.65829 6.95118 8.34171 7.14645 8.14645L13.1464 2.14645C13.3417 1.95118 13.6583 1.95118 13.8536 2.14645Z" fill="black" fill-opacity="0.4"/>
+</svg>

+ 5 - 0
src/assets/icon/classroomObservation/moreIcon.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 d="M5.25 11.9997C5.25 12.3975 5.40802 12.779 5.6893 13.0603C5.97058 13.3416 6.35208 13.4996 6.74987 13.4996C7.14766 13.4996 7.52915 13.3416 7.81043 13.0603C8.09171 12.779 8.24973 12.3975 8.24973 11.9997C8.24973 11.6019 8.09171 11.2204 7.81043 10.9392C7.52915 10.6579 7.14766 10.4999 6.74987 10.4999C6.35208 10.4999 5.97058 10.6579 5.6893 10.9392C5.40802 11.2204 5.25 11.6019 5.25 11.9997Z" fill="black" fill-opacity="0.9"/>
+<path d="M10.5 11.9997C10.5 12.3975 10.658 12.779 10.9393 13.0603C11.2206 13.3416 11.6021 13.4996 11.9999 13.4996C12.3977 13.4996 12.7792 13.3416 13.0604 13.0603C13.3417 12.779 13.4997 12.3975 13.4997 11.9997C13.4997 11.6019 13.3417 11.2204 13.0604 10.9392C12.7792 10.6579 12.3977 10.4999 11.9999 10.4999C11.6021 10.4999 11.2206 10.6579 10.9393 10.9392C10.658 11.2204 10.5 11.6019 10.5 11.9997Z" fill="black" fill-opacity="0.9"/>
+<path d="M15.75 11.9997C15.75 12.3975 15.908 12.779 16.1893 13.0603C16.4706 13.3416 16.8521 13.4996 17.2499 13.4996C17.6477 13.4996 18.0292 13.3416 18.3104 13.0603C18.5917 12.779 18.7497 12.3975 18.7497 11.9997C18.7497 11.6019 18.5917 11.2204 18.3104 10.9392C18.0292 10.6579 17.6477 10.4999 17.2499 10.4999C16.8521 10.4999 16.4706 10.6579 16.1893 10.9392C15.908 11.2204 15.75 11.6019 15.75 11.9997Z" fill="black" fill-opacity="0.9"/>
+</svg>

BIN
src/assets/icon/classroomObservation/startPageIcon1.png


BIN
src/assets/icon/classroomObservation/startPageIcon2.png


+ 856 - 28
src/components/pages/classroomObservation/components/addNewAnalysisDialog.vue

@@ -17,15 +17,15 @@
             clearable
           >
           </el-input>
-
+          <!-- 
           <el-button
-					v-if="canAddNew"
+            v-if="canAddNew"
             style="margin-left: 30px;"
             size="mini"
             @click.stop="addNew()"
             round
             >新建分析模块</el-button
-          >
+          > -->
         </div>
         <div class="a-d-t-right">
           <span @click.stop="close()">×</span>
@@ -33,7 +33,17 @@
       </div>
       <div style="display: flex; height: 100%">
         <div class="a-d-t-left">
-          <!-- <div class="itemTit">我的模块</div> -->
+          <div
+            class="itemTit"
+            :style="
+              tagIndex == -1 || tagIndex == -2
+                ? 'background: rgba(226, 238, 255, 1);color: rgba(54, 129, 252, 1)'
+                : ''
+            "
+            @click.stop="tagIndex = -1"
+          >
+            我的模块
+          </div>
           <div
             :style="
               tagIndex == index
@@ -48,7 +58,7 @@
             {{ item.name }}
           </div>
         </div>
-        <div class="a-d-box">
+        <div class="a-d-box" v-if="[0, 1, 2].includes(tagIndex)">
           <div
             style="
 							font-family: PingFang SC;
@@ -106,7 +116,7 @@
                   <!-- <div class="a-d-b-i-t-btn">详情</div> -->
                   <div
                     class="a-d-b-i-t-btn1"
-                    @click="addAnalysisItem(item.name,item.id)"
+                    @click="addAnalysisItem(item.name, item.id)"
                   >
                     添加
                   </div>
@@ -115,18 +125,388 @@
             </div>
           </div>
         </div>
+        <div class="a-d-box" v-if="[-1, -2].includes(tagIndex)">
+          <div
+            class="d_d_b_type"
+            v-if="[-1].includes(tagIndex)"
+            v-loading="formLoading"
+          >
+            <div class="d_d_b_t_head">
+              <div>我的模块</div>
+              <div @click.stop="addNewAnalysis">新建分析模块</div>
+            </div>
+
+            <div class="a-d-b-subject">
+              <span
+                v-for="(item, index) in tagSubjectList"
+                :class="[
+                  'a_d_b_s_btn',
+                  tagSubject == item ? 'a_d_b_s_ActiveBtn' : ''
+                ]"
+                :key="index + '-' + tagIndex"
+                @click.stop="
+                  tagSubject == item ? (tagSubject = '') : (tagSubject = item)
+                "
+                >{{ item }}</span
+              >
+            </div>
+
+            <div style="display: flex; flex-wrap: wrap">
+              <div
+                class="a-d-b-item"
+                v-for="(item, index) in searchMyselfDataList"
+                :key="index"
+              >
+                <div class="a-d-b-i-top">
+                  <img
+                    style="height: 22px; width: 22px"
+                    :src="
+                      require('../../../../assets/icon/classroomObservation/digImg.svg')
+                    "
+                  />
+                  <div
+                    class="a-d-b-i-t-title"
+                    style="width: calc(100% - 40px);"
+                  >
+                    {{ item.name }}
+                  </div>
+                  <div class="a_d_b_i_t_t_editIcon">
+                    <span @click.stop="showModelDialog = item.id">
+                      <svg
+                        width="16"
+                        height="16"
+                        viewBox="0 0 16 16"
+                        fill="none"
+                        xmlns="http://www.w3.org/2000/svg"
+                      >
+                        <path
+                          d="M2.25 8C2.25 8.33152 2.3817 8.64946 2.61612 8.88388C2.85054 9.1183 3.16848 9.25 3.5 9.25C3.83152 9.25 4.14946 9.1183 4.38388 8.88388C4.6183 8.64946 4.75 8.33152 4.75 8C4.75 7.66848 4.6183 7.35054 4.38388 7.11612C4.14946 6.8817 3.83152 6.75 3.5 6.75C3.16848 6.75 2.85054 6.8817 2.61612 7.11612C2.3817 7.35054 2.25 7.66848 2.25 8ZM6.75 8C6.75 8.33152 6.8817 8.64946 7.11612 8.88388C7.35054 9.1183 7.66848 9.25 8 9.25C8.33152 9.25 8.64946 9.1183 8.88388 8.88388C9.1183 8.64946 9.25 8.33152 9.25 8C9.25 7.66848 9.1183 7.35054 8.88388 7.11612C8.64946 6.8817 8.33152 6.75 8 6.75C7.66848 6.75 7.35054 6.8817 7.11612 7.11612C6.8817 7.35054 6.75 7.66848 6.75 8ZM11.25 8C11.25 8.33152 11.3817 8.64946 11.6161 8.88388C11.8505 9.1183 12.1685 9.25 12.5 9.25C12.8315 9.25 13.1495 9.1183 13.3839 8.88388C13.6183 8.64946 13.75 8.33152 13.75 8C13.75 7.66848 13.6183 7.35054 13.3839 7.11612C13.1495 6.8817 12.8315 6.75 12.5 6.75C12.1685 6.75 11.8505 6.8817 11.6161 7.11612C11.3817 7.35054 11.25 7.66848 11.25 8Z"
+                          fill="black"
+                        />
+                      </svg>
+                    </span>
+
+                    <div
+                      class="a_d_b_i_t_t_editDialog"
+                      v-if="showModelDialog == item.id"
+                      v-click-outside="() => (showModelDialog = '')"
+                    >
+                      <div
+                        v-if="['0'].includes(item.open)"
+                        @click.stop="editAnalysis(0, item)"
+                      >
+                        <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="M2 2.5C2 2.22386 2.22386 2 2.5 2H6.5C6.77614 2 7 2.22386 7 2.5C7 2.77614 6.77614 3 6.5 3H3V13H13V8.5C13 8.22386 13.2239 8 13.5 8C13.7761 8 14 8.22386 14 8.5V13.5C14 13.7761 13.7761 14 13.5 14H2.5C2.22386 14 2 13.7761 2 13.5V2.5Z"
+                            fill="black"
+                            fill-opacity="0.9"
+                          />
+                          <path
+                            fill-rule="evenodd"
+                            clip-rule="evenodd"
+                            d="M12.0849 2.06707C11.8458 1.929 11.54 2.01094 11.4019 2.25008C11.2639 2.48923 11.3458 2.79503 11.5849 2.9331L12.1204 3.24226C9.77846 3.65788 8 5.70382 8 8.16515V8.66515C8 8.94129 8.22386 9.16515 8.5 9.16515C8.77614 9.16515 9 8.94129 9 8.66515V8.16515C9 6.09309 10.5755 4.38901 12.5939 4.18551L12.134 4.98213C11.9959 5.22128 12.0778 5.52708 12.317 5.66515C12.5561 5.80322 12.8619 5.72128 13 5.48213L14 3.75008C14.1381 3.51094 14.0561 3.20514 13.817 3.06707L12.0849 2.06707Z"
+                            fill="black"
+                            fill-opacity="0.9"
+                          />
+                        </svg>
+                        <span>公开到社区</span>
+                      </div>
+                      <div
+                        v-if="!['0'].includes(item.open)"
+                        @click.stop="editAnalysis(1, item)"
+                      >
+                        <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="M4.5 5C4.5 3.61929 5.61929 2.5 7 2.5C8.38071 2.5 9.5 3.61929 9.5 5C9.5 6.38071 8.38071 7.5 7 7.5C5.61929 7.5 4.5 6.38071 4.5 5ZM7 8.5C8.933 8.5 10.5 6.933 10.5 5C10.5 3.067 8.933 1.5 7 1.5C5.067 1.5 3.5 3.067 3.5 5C3.5 6.19029 4.09418 7.24181 5.0021 7.87412C2.95231 8.67365 1.5 10.6672 1.5 13V14.5C1.5 14.7761 1.72386 15 2 15C2.27614 15 2.5 14.7761 2.5 14.5V13C2.5 10.5147 4.51472 8.5 7 8.5Z"
+                            fill="black"
+                            fill-opacity="0.9"
+                          />
+                          <path
+                            fill-rule="evenodd"
+                            clip-rule="evenodd"
+                            d="M9.5 10.5C9.5 10.2239 9.72386 10 10 10H11C11.2761 10 11.5 10.2239 11.5 10.5V11H9.5V10.5ZM8.5 11V10.5C8.5 9.67157 9.17157 9 10 9H11C11.8284 9 12.5 9.67157 12.5 10.5V11H13C13.2761 11 13.5 11.2239 13.5 11.5V14.5C13.5 14.7761 13.2761 15 13 15H8C7.72386 15 7.5 14.7761 7.5 14.5V11.5C7.5 11.2239 7.72386 11 8 11H8.5ZM8.5 14V12H12.5V14H8.5Z"
+                            fill="black"
+                            fill-opacity="0.9"
+                          />
+                        </svg>
+
+                        <span>恢复隐私</span>
+                      </div>
+                      <span></span>
+                      <div @click.stop="editAnalysis(2, item)">
+                        <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="M8.00001 1.5C8.1894 1.5 8.36253 1.61128 8.44723 1.78745L10.3276 5.69853L14.062 6.18401C14.2515 6.20865 14.411 6.34338 14.4729 6.53124C14.5349 6.71909 14.4886 6.92726 14.3536 7.06769L11.5537 9.9795L12.4851 13.8539C12.5302 14.0413 12.4715 14.2393 12.3329 14.368C12.1942 14.4967 11.9984 14.5347 11.8245 14.4669L8.00001 12.9754L4.17558 14.4669C4.0016 14.5347 3.80578 14.4967 3.66714 14.368C3.52849 14.2393 3.46988 14.0413 3.51494 13.8539L4.44628 9.9795L1.64646 7.06769C1.51143 6.92726 1.4651 6.71909 1.52708 6.53124C1.58905 6.34338 1.7485 6.20865 1.938 6.18401L5.67247 5.69853L7.5528 1.78745C7.6375 1.61128 7.81063 1.5 8.00001 1.5ZM8.00001 3.18275L6.44723 6.41255C6.37246 6.56806 6.22792 6.67442 6.06203 6.69598L3.07646 7.08411L5.35357 9.4523C5.47776 9.58146 5.52768 9.76891 5.48509 9.94611L4.71603 13.1454L7.82445 11.9331C7.93764 11.889 8.06238 11.889 8.17558 11.9331L11.284 13.1454L10.5149 9.94611C10.4723 9.76891 10.5223 9.58146 10.6465 9.4523L12.9236 7.08411L9.938 6.69598C9.77211 6.67442 9.62756 6.56806 9.5528 6.41255L8.00001 3.18275Z"
+                            fill="black"
+                            fill-opacity="0.9"
+                          />
+                        </svg>
+                        <span>收藏</span>
+                      </div>
+                      <div @click.stop="editAnalysis(3, item)">
+                        <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="M2 2.5C2 2.22386 2.22386 2 2.5 2H8.5C8.77614 2 9 2.22386 9 2.5C9 2.77614 8.77614 3 8.5 3H3V13H13V8.5C13 8.22386 13.2239 8 13.5 8C13.7761 8 14 8.22386 14 8.5V13.5C14 13.7761 13.7761 14 13.5 14H2.5C2.22386 14 2 13.7761 2 13.5V2.5Z"
+                            fill="black"
+                            fill-opacity="0.9"
+                          />
+                          <path
+                            fill-rule="evenodd"
+                            clip-rule="evenodd"
+                            d="M13.8536 2.14645C14.0488 2.34171 14.0488 2.65829 13.8536 2.85355L7.85355 8.85355C7.65829 9.04882 7.34171 9.04882 7.14645 8.85355C6.95118 8.65829 6.95118 8.34171 7.14645 8.14645L13.1464 2.14645C13.3417 1.95118 13.6583 1.95118 13.8536 2.14645Z"
+                            fill="black"
+                            fill-opacity="0.9"
+                          />
+                        </svg>
+                        <span>编辑</span>
+                      </div>
+                      <div @click.stop="editAnalysis(4, item)">
+                        <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="M5 2.5C5 2.22386 5.22386 2 5.5 2H10.5C10.7761 2 11 2.22386 11 2.5C11 2.77614 10.7761 3 10.5 3H5.5C5.22386 3 5 2.77614 5 2.5Z"
+                            fill="black"
+                            fill-opacity="0.9"
+                          />
+                          <path
+                            fill-rule="evenodd"
+                            clip-rule="evenodd"
+                            d="M2 4.5C2 4.21185 2.22386 4 2.5 4H13.5C13.7761 4 14 4.21185 14 4.5C14 4.83161 13.7761 5 13.5 5L12.5 5.04348V14H3.5V5H2.5C2.22386 5 2 4.83161 2 4.5ZM4.5 5V12.9565L11.5 13V5.04348L4.5 5Z"
+                            fill="black"
+                            fill-opacity="0.9"
+                          />
+                          <path
+                            fill-rule="evenodd"
+                            clip-rule="evenodd"
+                            d="M6.5 6.45461C6.77614 6.45461 7 6.65811 7 6.90915V11.0001C7 11.2511 6.77614 11.4546 6.5 11.4546C6.22386 11.4546 6 11.2511 6 11.0001V6.90915C6 6.65811 6.22386 6.45461 6.5 6.45461Z"
+                            fill="black"
+                            fill-opacity="0.9"
+                          />
+                          <path
+                            fill-rule="evenodd"
+                            clip-rule="evenodd"
+                            d="M9.5 6.45461C9.77614 6.45461 10 6.65811 10 6.90915V11.0001C10 11.2511 9.77614 11.4546 9.5 11.4546C9.22386 11.4546 9 11.2511 9 11.0001V6.90915C9 6.65811 9.22386 6.45461 9.5 6.45461Z"
+                            fill="black"
+                            fill-opacity="0.9"
+                          />
+                        </svg>
+                        <span>删除</span>
+                      </div>
+                    </div>
+                  </div>
+                </div>
+                <div class="a-d-b-i-bottom">{{ item.detail }}</div>
+                <div class="a-d-b-i-bottomPer" style="display: block">
+                  {{ item.count }}人已使用
+                </div>
+                <div class="a-d-b-i-bottomBtn" style="display: none">
+                  <div
+                    style="
+										display: flex;
+										width: 100%;
+										justify-content: space-around;
+									"
+                  >
+                    <!-- <div class="a-d-b-i-t-btn">详情</div> -->
+                    <div
+                      class="a-d-b-i-t-btn1"
+                      @click="addAnalysisItem(item.name, item.id)"
+                    >
+                      添加
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div
+            class="d_d_b_addType"
+            v-if="[-2].includes(tagIndex)"
+            v-loading="formLoading"
+          >
+            <div>新建模块</div>
+
+            <el-form
+              :model="form"
+              :rules="rules"
+              ref="ruleForm"
+              label-position="top"
+            >
+              <div class="d_d_b_at_inputArea">
+                <el-form-item
+                  label="模板名称"
+                  prop="name"
+                  style="margin-right: 50px;"
+                  class="d_d_b_at_input"
+                >
+                  <el-input
+                    v-model="form.name"
+                    placeholder="请输入模板名称"
+                  ></el-input>
+                </el-form-item>
+
+                <el-form-item
+                  label="所属分类"
+                  prop="type"
+                  style="margin-right: 50px;"
+                  class="d_d_b_at_input"
+                >
+                  <el-select v-model="form.type" placeholder="请选择所属分类">
+                    <el-option
+                      v-for="item in dialogTagList"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.id"
+                    >
+                    </el-option>
+                  </el-select>
+                  <!-- <el-input v-model="form.subject" placeholder="请输入所属学科" style="width: 300px;"></el-input> -->
+                </el-form-item>
+
+                <el-form-item
+                  label="所属学科"
+                  prop="subject"
+                  style="margin-right: 50px;"
+                  class="d_d_b_at_input"
+                >
+                  <el-select
+                    v-model="form.subject"
+                    placeholder="请选择所属学科"
+                  >
+                    <el-option
+                      v-for="item in subjectList"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.label"
+                    >
+                    </el-option>
+                  </el-select>
+                  <!-- <el-input v-model="form.subject" placeholder="请输入所属学科" style="width: 300px;"></el-input> -->
+                </el-form-item>
+              </div>
+              <el-form-item
+                label="模板简介"
+                prop="detail"
+                class="d_d_b_at_input"
+              >
+                <el-input
+                  type="textarea"
+                  v-model="form.detail"
+                  :rows="3"
+                  :maxlength="30"
+                  resize="none"
+                  placeholder="请输入内容,不超过30字"
+                ></el-input>
+              </el-form-item>
+
+              <el-form-item label="提示词" prop="tips" class="d_d_b_at_input">
+                <el-input
+                  type="textarea"
+                  v-model="form.tips"
+                  :rows="6"
+                  resize="none"
+                  placeholder="请输入提示词"
+                ></el-input>
+              </el-form-item>
+
+              <el-form-item label="是否公开" prop="open" class="d_d_b_at_input">
+                <el-switch v-model="form.open"></el-switch>
+                <!-- <el-select v-model="form.open" placeholder="请选择是否公开">
+  					  <el-option
+  					    v-for="item in openList"
+  					    :key="item.value"
+  					    :label="item.label"
+  					    :value="item.value">
+  					  </el-option>
+  					</el-select> -->
+                <!-- <el-input v-model="form.subject" placeholder="请输入所属学科" style="width: 300px;"></el-input> -->
+              </el-form-item>
+            </el-form>
+            <div class="d_d_b_at_btnArea">
+              <el-button @click.stop="cancelSubmit()">取消</el-button>
+              <el-button type="primary" @click.stop="submitForm('ruleForm')"
+                >确认</el-button
+              >
+            </div>
+          </div>
+        </div>
       </div>
       <!-- </div> -->
     </el-dialog>
-    <newAnalysisModule v-if="canAddNew" ref="newAnalysisModuleRef" @success="successNew"/>
+    <!-- <newAnalysisModule
+      v-if="canAddNew"
+      ref="newAnalysisModuleRef"
+      @success="successNew"
+    /> -->
   </div>
 </template>
 
 <script>
-import newAnalysisModule from "./newAnalysisModule.vue";
+// import newAnalysisModule from "./newAnalysisModule.vue";
+// 自定义指令,用于处理点击外部区域的事件
+const clickOutside = {
+  bind(el, binding) {
+    // 在元素上绑定一个点击事件监听器
+    el.clickOutsideEvent = function(event) {
+      // 检查点击事件是否发生在元素的内部
+      if (!(el === event.target || el.contains(event.target))) {
+        // 如果点击事件发生在元素的外部,则触发指令绑定的方法,将点击的event数据传过去
+        binding.value(event);
+      }
+    };
+    // 在文档上添加点击事件监听器
+    document.addEventListener("click", el.clickOutsideEvent);
+  },
+  unbind(el) {
+    // 在元素上解除点击事件监听器
+    document.removeEventListener("click", el.clickOutsideEvent);
+  }
+};
 export default {
   components: {
-    newAnalysisModule
+    // newAnalysisModule
+  },
+  directives: {
+    "click-outside": clickOutside // 注册自定义指令
   },
   props: {
     dialogTagDataList: {
@@ -143,15 +523,53 @@ export default {
   data() {
     return {
       dialogVisible: false,
+      userId: this.$route.query["userid"],
       input2: "",
+
       tagIndex: 0,
       tagSubject: "",
+      boxType: 0, //0 新建  1修改
       dialogTagList: [
         { id: 0, name: "通用课堂分析" },
         { id: 1, name: "学科课堂分析" },
         { id: 2, name: "扩展分析" }
         //{ id: 3, name: "增值性分析" },
-      ]
+      ],
+      subjectList: [
+        { value: "1", label: "语文" },
+        { value: "2", label: "数学" },
+        { value: "3", label: "英语" },
+        { value: "4", label: "科学" },
+        { value: "5", label: "物理" },
+        { value: "6", label: "化学" },
+        { value: "7", label: "生物" },
+        { value: "8", label: "历史" },
+        { value: "9", label: "地理" },
+        { value: "10", label: "政治" },
+        { value: "11", label: "其它" }
+      ],
+      form: {
+        name: "",
+        detail: "",
+        tips: "",
+        type: "",
+        subject: "",
+        open: false
+      },
+      showModelDialog: "",
+      formLoading: false,
+      rules: {
+        name: [{ required: true, message: "请输入模块名称", trigger: "blur" }],
+        tips: [
+          { required: true, message: "请输入模块提示词", trigger: "blur" }
+        ],
+        type: [
+          { required: true, message: "请选择模块所属分类", trigger: "change" }
+        ],
+        subject: [
+          { required: true, message: "请选择模块所属学科", trigger: "change" }
+        ]
+      }
     };
   },
   computed: {
@@ -166,15 +584,36 @@ export default {
 
       return _result;
     },
+    searchMyselfDataList() {
+      let _result = this.dialogTagDataList.filter(i => i.userid == this.userId);
+      if (this.input2) {
+        _result = _result.filter(i => i.name.indexOf(this.input2) > -1);
+      }
+      if (this.tagSubject) {
+        _result = _result.filter(i => i.subject == this.tagSubject);
+      }
+      return _result;
+    },
     tagSubjectList() {
       let _result = [];
-      this.dialogTagDataList
-        .filter(i => i.type == this.tagIndex)
-        .forEach(i => {
-          if (i.subject && !_result.includes(i.subject)) {
-            _result.push(i.subject);
-          }
-        });
+      if ([-1, -2].includes(this.tagIndex)) {
+        this.dialogTagDataList
+          .filter(i => i.userid == this.userId)
+          .forEach(i => {
+            if (i.subject && !_result.includes(i.subject)) {
+              _result.push(i.subject);
+            }
+          });
+      } else {
+        this.dialogTagDataList
+          .filter(i => i.type == this.tagIndex)
+          .forEach(i => {
+            if (i.subject && !_result.includes(i.subject)) {
+              _result.push(i.subject);
+            }
+          });
+      }
+
       return _result;
     }
   },
@@ -184,6 +623,15 @@ export default {
       this.input2 = "";
       this.tagSubject = "";
       this.dialogVisible = true;
+      this.form = {
+        name: "",
+        detail: "",
+        tips: "",
+        type: "",
+        subject: "",
+        open: false
+      };
+      this.$emit("update");
     },
     close() {
       this.dialogVisible = false;
@@ -191,15 +639,242 @@ export default {
       this.input2 = "";
       this.tagSubject = "";
     },
-    addAnalysisItem(title,id) {
-      this.$emit("success", title,id);
+    addAnalysisItem(title, id) {
+      this.$emit("success", title, id);
     },
     addNew() {
       this.$refs.newAnalysisModuleRef.open();
     },
-		successNew(){
-			this.$emit("update");
-		}
+    successNew() {
+      this.$emit("update");
+    },
+    addNewAnalysis() {
+      this.boxType = 0;
+      this.tagIndex = -2;
+      this.form = {
+        name: "",
+        detail: "",
+        tips: "",
+        type: "",
+        subject: "",
+        open: false
+      };
+      //新建模块
+    },
+    editAnalysis(mid) {
+      console.log(mid);
+    },
+    submitForm(ref) {
+      this.$refs[ref].validate(valid => {
+        if (valid) {
+          if (this.boxType == 0) {
+            let params = [
+              {
+                nuid: this.userId,
+                nname: this.form.name,
+                ndetail: this.form.detail,
+                nsubject: this.form.subject,
+                ntype: this.form.type,
+                nopen: this.form.open ? 2 : 0,
+                nagentid: "",
+                ntips: this.form.tips
+              }
+            ];
+
+            // console.log(this.form)
+            this.formLoading = true;
+            this.ajax
+              .post(this.$store.state.api + "insert_smodel", params)
+              .then(res => {
+                if (typeof res.data == "object") {
+                  this.$message.warning("该新建的模块名称已存在,请重新输入");
+                } else if (res.data == 1) {
+                  this.successNew();
+                  this.boxType = 0;
+                  this.tagIndex = -1;
+                  this.form = {
+                    name: "",
+                    detail: "",
+                    tips: "",
+                    type: "",
+                    subject: "",
+                    open: false
+                  };
+                  this.$message.success("创建成功");
+                } else {
+                  this.$message.error("新建失败");
+                }
+								this.successNew();
+                this.formLoading = false;
+              })
+              .catch(e => {
+                console.log(e);
+                this.loading = false;
+                this.$message.error("新建失败");
+								this.successNew();
+              });
+          } else if (this.boxType == 1) {
+            let params = [
+              {
+                nuid: this.userId,
+                mid: this.form.id,
+                nname: this.form.name,
+                ndetail: this.form.detail,
+                nsubject: this.form.subject,
+                ntype: this.form.type,
+                nopen: this.form.open ? 2 : 0,
+                nagentid: this.form.agentid,
+                ntips: this.form.tips
+              }
+            ];
+            this.ajax
+              .post(this.$store.state.api + "update_smodel", params)
+              .then(res => {
+                if (res.data == 1) {
+                  this.$message.success("修改成功");
+									this.tagIndex = -1;
+									this.boxType = 0; 
+                } else {
+                  this.$message.error("修改失败");
+                }
+                this.successNew();
+                this.formLoading = false;
+              })
+              .catch(e => {
+                console.log(e);
+                this.$message.error("修改失败");
+                this.successNew();
+              });
+          }
+        }
+      });
+      // });
+    },
+    cancelSubmit() {
+      this.formLoading = false;
+      this.tagIndex = -1;
+      this.boxType = 0;
+      this.form = {
+        name: "",
+        detail: "",
+        tips: "",
+        type: "",
+        subject: "",
+        open: false
+      };
+    },
+    editAnalysis(type, data) {
+      if (type == 0) {
+        let params = [
+          {
+            nuid: data.userid,
+            mid: data.id,
+            nname: data.name,
+            ndetail: data.detail,
+            nsubject: data.subject,
+            ntype: data.type,
+            nopen: 2,
+            nagentid: data.agentid,
+            ntips: data.tips
+          }
+        ];
+        this.formLoading = true;
+        this.ajax
+          .post(this.$store.state.api + "update_smodel", params)
+          .then(res => {
+            if (res.data == 1) {
+              this.$message.success("公开成功");
+            } else {
+              this.$message.error("公开失败");
+            }
+            this.successNew();
+            this.formLoading = false;
+          })
+          .catch(e => {
+            console.log(e);
+            this.$message.error("公开失败");
+            this.successNew();
+          });
+        this.showModelDialog = "";
+      } else if (type == 1) {
+        let params = [
+          {
+            nuid: data.userid,
+            mid: data.id,
+            nname: data.name,
+            ndetail: data.detail,
+            nsubject: data.subject,
+            ntype: data.type,
+            nopen: 0,
+            nagentid: data.agentid,
+            ntips: data.tips
+          }
+        ];
+        this.formLoading = true;
+        this.ajax
+          .post(this.$store.state.api + "update_smodel", params)
+          .then(res => {
+            if (res.data == 1) {
+              this.$message.success("设为隐私成功");
+            } else {
+              this.$message.error("设为隐私失败");
+            }
+            this.successNew();
+            this.formLoading = false;
+          })
+          .catch(e => {
+            console.log(e);
+            this.$message.error("设为隐私失败");
+            this.successNew();
+          });
+        this.showModelDialog = "";
+      } else if (type == 2) {
+        console.log("收藏");
+      } else if (type == 3) {
+        this.boxType = 1;
+        this.tagIndex = -2;
+        this.form = {
+          id: data.id,
+          name: data.name,
+          detail: data.detail,
+          tips: data.tips,
+          type: data.type,
+          subject: data.subject,
+          agentid: data.agentid,
+          open: data.open == 0 ? false : true
+        };
+        this.showModelDialog = "";
+      } else if (type == 4) {
+        this.$confirm("该操作会永远删除该分析,确定删除?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            this.formLoading = true;
+            this.ajax
+              .post(this.$store.state.api + "delete_smodelById", [
+                { uid: this.userId, mid: data.id }
+              ])
+              .then(res => {
+                let data = res.data;
+                if (data == 1) {
+                  this.$message.success("删除成功");
+                } else {
+                  this.$message.error("删除失败");
+                }
+                this.successNew();
+                this.formLoading = false;
+              })
+              .catch(e => {
+                this.$message.error("删除失败");
+              });
+          })
+          .catch(_ => {
+            console.log("取消");
+          });
+      }
+    }
   }
 };
 </script>
@@ -309,8 +984,7 @@ export default {
   width: 100%;
   height: 100%;
   background-color: #f0f2f5;
-  overflow: scroll;
-  overflow-x: hidden;
+  overflow: auto;
   box-sizing: border-box;
   padding: 15px;
   padding-bottom: 50px;
@@ -446,14 +1120,32 @@ export default {
   display: none;
 }
 .itemTit {
-  width: 136px;
-  height: 32px;
+  width: calc(136px - 10px);
+  height: auto;
   padding: 5px 8px 5px 8px;
   gap: 8px;
-  opacity: 0px;
   margin: 20px 0;
   margin-bottom: 10px;
-  border-bottom: 1px #ccc solid;
+  /* border-bottom: 1px #ccc solid; */
+  cursor: pointer;
+  font-size: 14px;
+  border-radius: 5px;
+  display: flex;
+  padding: 8px 5px;
+  /* justify-content: center; */
+  align-items: center;
+  position: relative;
+  font-weight: bold;
+}
+
+.itemTit::after {
+  content: "";
+  width: 100%;
+  height: 1px;
+  background-color: #ccc;
+  position: absolute;
+  bottom: -10px;
+  left: 0;
 }
 
 .a-d-b-subject {
@@ -480,4 +1172,140 @@ export default {
   background-color: rgba(54, 129, 252, 1);
   color: #fff;
 }
+
+.d_d_b_type {
+  width: 100%;
+  height: auto;
+}
+
+.d_d_b_t_head {
+  width: 100%;
+  height: auto;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 0;
+  margin: 20px 0;
+  box-sizing: border-box;
+}
+
+.d_d_b_t_head > div:nth-of-type(1) {
+  font-family: PingFang SC;
+  font-size: 16px;
+  font-weight: 600;
+  /* line-height: 22px; */
+  text-align: left;
+  margin-bottom: 10px;
+}
+
+.d_d_b_t_head > div:nth-of-type(2) {
+  padding: 10px 20px;
+  background-color: #3681fc;
+  color: #fff;
+  border-radius: 4px;
+  cursor: pointer;
+}
+
+.d_d_b_addType {
+  width: 100%;
+  height: 100%;
+  background-color: #fff;
+  border-radius: 4px;
+  box-sizing: border-box;
+  padding: 20px;
+  position: relative;
+}
+
+.d_d_b_addType > div {
+  font-size: 20px;
+  font-weight: bold;
+}
+
+.d_d_b_at_inputArea {
+  display: flex;
+}
+
+.d_d_b_at_btnArea {
+  position: absolute;
+  bottom: 20px;
+  right: 20px;
+}
+
+.d_d_b_at_input >>> .el-form-item__label {
+  padding: 0;
+}
+.a_d_b_i_t_t_editIcon {
+  width: 30px;
+  height: 30px;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  position: relative;
+}
+
+.a_d_b_i_t_t_editIcon > span {
+  width: 30px;
+  height: 30px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.a_d_b_i_t_t_editIcon > span > svg {
+  width: 100%;
+  height: 100%;
+  cursor: pointer;
+}
+
+.a_d_b_i_t_t_editDialog {
+  width: auto;
+  background: #ffffff;
+  height: auto;
+  padding: 10px;
+  border-radius: 8px;
+  position: absolute;
+  top: 100%;
+  right: 0;
+  box-shadow: 0px 8px 10px -5px #00000014;
+
+  box-shadow: 0px 16px 24px 2px #0000000a;
+
+  box-shadow: 0px 6px 30px 5px #0000000d;
+}
+
+.a_d_b_i_t_t_editDialog > div {
+  width: 100%;
+  height: auto;
+  padding: 5px 0;
+  display: flex;
+  white-space: nowrap;
+  align-items: center;
+  background-color: #fff;
+  margin-bottom: 10px;
+  border-radius: 4px;
+  transition: 0.3s;
+  cursor: pointer;
+}
+
+.a_d_b_i_t_t_editDialog > span {
+  width: 100%;
+  height: 1px;
+  display: flex;
+  margin-bottom: 10px;
+  background-color: #e7e7e7;
+}
+
+.a_d_b_i_t_t_editDialog > div:hover {
+  background-color: #f0f2f5;
+}
+
+.a_d_b_i_t_t_editDialog > div > svg {
+  width: 20px;
+  height: 20px;
+  margin-left: 10px;
+}
+
+.a_d_b_i_t_t_editDialog > div > span {
+  margin: 0 5px 0 10px;
+}
 </style>

+ 260 - 13
src/components/pages/classroomObservation/components/analysis.vue

@@ -1,15 +1,92 @@
 <template>
   <div class="analysis">
-    <div class="a-header">
-      <div class="a-h-left" @click.stop="changeShowItem(!showItem)">
+    <div class="a-header" :style="showItem ? '' : 'border-radius:5px'">
+      <div class="a-h-left" @click="changeShowItem(!showItem)">
         <span :class="['a-h-l-icon', showItem ? 'a-h-l-showIcon' : '']"></span>
-        <span class="a-h-l-title">{{ title }}</span>
+        <span class="a-h-l-title" v-if="!editTitle">{{ title }}</span>
+        <div class="a_h_l_t_input" v-if="editTitle" @click.stop="() => {}">
+          <el-form ref="form" :model="form" :rules="rules" label-position="top">
+            <el-form-item prop="name">
+              <el-input
+                v-model="form.name"
+               	@blur="editNameCheckFn()"
+                ref="editNameInputRef"
+                placeholder="请输入新的名称"
+              ></el-input>
+            </el-form-item>
+						<!--   @blur="editNameCheckFn()" -->
+          </el-form>
+        </div>
+        <el-tooltip
+          v-if="!editTitle"
+          class="item"
+          effect="light"
+          content="修改名称"
+          placement="top"
+        >
+          <span class="a_h_l_edit" @click.stop="editTitleFn()">
+            <img
+              src="../../../../assets/icon/classroomObservation/editIcon2.svg"
+            /> </span
+          >>
+        </el-tooltip>
       </div>
       <div class="a-h-right">
-        <div class="a-h-r-btn" @click.stop="addTemplate">
+        <!-- <el-popover placement="bottom-end" width="150" v-model="visible" trigger="manual">
+          <div class="a_h_r_boxList" v-click-outside="()=>visible = false">
+					</div> -->
+        <div
+          class="a_h_r_more"
+          slot="reference"
+          @click.stop="visible = !visible"
+        >
+          <img src="@/assets/icon/classroomObservation/moreIcon.svg" alt="" />
+        </div>
+
+        <div
+          class="a_h_r_boxList"
+          v-if="visible"
+          v-click-outside="() => (visible = false)"
+        >
+          <div @click="addTemplate">
+            <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="M2.00003 4C2.00003 3.72386 2.22389 3.5 2.50003 3.5H4C4.27614 3.5 4.5 3.72386 4.5 4C4.5 4.27614 4.27614 4.5 4 4.5H3.00003L3 14H11V11C11 10.7239 11.2239 10.5 11.5 10.5C11.7762 10.5 12 10.7239 12 11V14.5C12 14.7761 11.7762 15 11.5 15H2.5C2.36739 15 2.24021 14.9473 2.14645 14.8536C2.05268 14.7598 2 14.6326 2 14.5L2.00003 4Z"
+                fill="black"
+                fill-opacity="0.9"
+              />
+              <path
+                fill-rule="evenodd"
+                clip-rule="evenodd"
+                d="M5 5.5C5 5.22386 5.22386 5 5.5 5H13.5C13.7761 5 14 5.22386 14 5.5C14 5.77614 13.7761 6 13.5 6H5.5C5.22386 6 5 5.77614 5 5.5Z"
+                fill="black"
+                fill-opacity="0.9"
+              />
+              <path
+                fill-rule="evenodd"
+                clip-rule="evenodd"
+                d="M9.5 1C9.77614 1 10 1.22386 10 1.5V9.5C10 9.77614 9.77614 10 9.5 10C9.22386 10 9 9.77614 9 9.5V1.5C9 1.22386 9.22386 1 9.5 1Z"
+                fill="black"
+                fill-opacity="0.9"
+              />
+            </svg>
+
+            添加模块
+          </div>
+        </div>
+        <!-- </el-popover> -->
+        <!-- <div class="a-h-r-btn" @click.stop="addTemplate">
           <img src="@/assets/icon/classroomObservation/newcon.svg" alt="" />
           添加模块
-        </div>
+        </div> -->
       </div>
     </div>
     <div class="a-main" v-show="showItem">
@@ -62,19 +139,45 @@
         暂无模块...
       </div>
     </div>
+    <editNameDialog ref="editNameDialogRef" @success="editNameSuccess" />
   </div>
 </template>
 
 <script>
 import analysisItem from "./analysisItem";
 import analysisSpecialItem from "./analysisSpecialItem";
+import editNameDialog from "./editNameDialog.vue";
 var OpenCC = require("opencc-js");
 let converter2 = OpenCC.Converter({
   from: "hk",
   to: "cn"
 });
+
+// 自定义指令,用于处理点击外部区域的事件
+const clickOutside = {
+  bind(el, binding) {
+    // 在元素上绑定一个点击事件监听器
+    el.clickOutsideEvent = function(event) {
+      // 检查点击事件是否发生在元素的内部
+      if (!(el === event.target || el.contains(event.target))) {
+        // 如果点击事件发生在元素的外部,则触发指令绑定的方法,将点击的event数据传过去
+        binding.value(event);
+      }
+    };
+    // 在文档上添加点击事件监听器
+    document.addEventListener("click", el.clickOutsideEvent);
+  },
+  unbind(el) {
+    // 在元素上解除点击事件监听器
+    document.removeEventListener("click", el.clickOutsideEvent);
+  }
+};
+
 export default {
   emits: ["delItem", "editItem", "saveItem"],
+  directives: {
+    "click-outside": clickOutside // 注册自定义指令
+  },
   props: {
     bmData: {
       type: Object,
@@ -117,7 +220,8 @@ export default {
   },
   components: {
     analysisItem,
-    analysisSpecialItem
+    analysisSpecialItem,
+    editNameDialog
   },
   computed: {
     converter() {
@@ -129,12 +233,29 @@ export default {
   data() {
     return {
       showDialog: false,
-      showItem: true
+      showItem: true,
+      visible: false,
+      form: {
+        name: ""
+      },
+      editTitle: false,
+      rules: {
+        name: [
+          { required: true, trigger: "change", message: "请输入新的名称" },
+          {
+            min: 1,
+            max: 20,
+            trigger: "change",
+            message: "长度需在1-20个字符之间"
+          }
+        ]
+      }
     };
   },
   methods: {
     addTemplate() {
       if (!this.tid) return this.$message.error("请新建课堂,或选择历史课堂");
+      this.visible = false;
       this.$emit("updateMessage", this.type);
     },
     changeShowItem(newValue) {
@@ -163,6 +284,32 @@ export default {
           ].editBtn(false);
         });
       }
+    },
+    editTitleFn() {
+      if (!this.tid) return this.$message.info("请新建课堂,或选择历史课堂");
+      this.form.name = this.title;
+      this.editTitle = true;
+      this.$nextTick(() => {
+        this.$refs.editNameInputRef.focus();
+      });
+      // this.$refs.editNameDialogRef.open(this.title)
+    },
+    editNameCheckFn() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          this.editTitle = false;
+          this.editNameSuccess(this.form.name);
+        } else {
+          this.$nextTick(() => {
+            this.$refs.editNameInputRef.focus();
+						this.$message.error("该名称不符合规则")
+          });
+        }
+      });
+    },
+    editNameSuccess(name) {
+      this.$emit("changeAnalysisName", { name: name, type: this.type });
+      // this.$refs.editNameDialogRef.close()
     }
   }
 };
@@ -182,27 +329,32 @@ export default {
 .analysis {
   width: 100%;
   height: auto;
+  margin-top: 20px;
 }
 
 .a-header {
-  width: 100%;
-  height: 50px;
+  width: calc(100% - 10px);
+  height: 60px;
   display: flex;
   align-items: center;
   justify-content: space-between;
   box-sizing: border-box;
-  padding-right: 10px;
+  padding: 0 10px;
+  background-color: #f8f9fa;
+  border-radius: 5px 5px 0 0;
 }
 
 .a-h-left {
   display: flex;
   align-items: center;
   cursor: pointer;
+  flex: 1;
+  height: 100%;
 }
 
 .a-h-l-icon {
-  width: 16px;
-  height: 16px;
+  width: 18px;
+  height: 18px;
   background: url("../../../../assets/icon/classroomObservation/right.svg")
     no-repeat;
   background-size: 100% 100%;
@@ -216,6 +368,7 @@ export default {
 
 .a-h-l-title {
   font-size: 18px;
+  font-weight: bold;
 }
 
 .a-h-r-btn {
@@ -241,8 +394,11 @@ export default {
 }
 
 .a-main {
-  width: calc(100%);
+  width: calc(100% - 10px - 30px);
   height: auto;
+  background-color: #fff;
+  border-radius: 0 0 5px 5px;
+  padding: 15px;
 }
 
 .a-dialog {
@@ -488,4 +644,95 @@ export default {
   font-size: 14px;
   color: #555555;
 }
+
+.a_h_r_more {
+  margin-right: 10px;
+  width: 35px;
+  height: 35px;
+}
+
+.a_h_r_more > img {
+  width: 35px;
+  height: 35px;
+  cursor: pointer;
+}
+
+.a_h_r_boxList {
+  width: auto;
+  height: auto;
+  position: absolute;
+  top: calc(100% - 10px);
+  right: 0;
+  border: 1px solid #e7e7e7;
+  box-shadow: 0px 8px 10px -5px #00000014;
+
+  box-shadow: 0px 16px 24px 2px #0000000a;
+
+  box-shadow: 0px 6px 30px 5px #0000000d;
+  border-radius: 8px;
+  background-color: #fff;
+  padding: 10px;
+  z-index: 10;
+}
+
+.a_h_r_boxList > div {
+  width: auto;
+  white-space: nowrap;
+  display: flex;
+  align-items: center;
+  box-sizing: border-box;
+  padding: 10px;
+  font-size: 14px;
+  background-color: #fff;
+  border-radius: 8px;
+  transition: 0.3s;
+  cursor: pointer;
+}
+
+.a_h_r_boxList > div:hover {
+  background-color: #f0f2f5;
+}
+
+.a_h_r_boxList > div > svg {
+  width: 16px;
+  height: 16px;
+  margin-right: 4px;
+}
+
+.a-h-right {
+  height: 100%;
+  display: flex;
+  align-items: center;
+  position: relative;
+}
+
+.a_h_l_edit {
+  width: 20px;
+  height: 20px;
+  margin-left: 10px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.a_h_l_edit > img {
+  width: 100%;
+  height: 100%;
+}
+.a_h_l_t_input {
+	width: 25%;
+	min-width: 220px;
+  height: 100%;
+  display: flex;
+  align-items: center;
+}
+
+.a_h_l_t_input>>>.el-form{
+	width: 100%;
+	min-width: 220px;
+}
+
+.a_h_l_t_input>>>.el-form-item{
+	margin-bottom: 0;
+}
 </style>

+ 125 - 8
src/components/pages/classroomObservation/components/analysisItem.vue

@@ -1,11 +1,29 @@
 <template>
 	<div class="analysisItem">
 		<div class="ai-header" v-show="data.jsonData.name != '词频词汇分析'">
-			<div class="ai-h-left" @click.stop="changeOpenItem(!openItem)">
+			<div class="ai-h-left" @click="changeOpenItem(!openItem)">
 				<span
 					:class="['ai-h-l-icon', openItem ? 'ai-h-l-iconActive' : '']"
 				></span>
-				<span class="ai-h-l-text">{{ data.jsonData.name }}</span>
+				<span class="ai-h-l-text" v-if="!editTitle">{{ data.jsonData.anotherName?data.jsonData.anotherName:data.jsonData.name }}</span>
+				<div class="a_h_l_t_input" v-if="editTitle" @click.stop="() => {}">
+          <el-form ref="form" :model="form" :rules="rules" label-position="top">
+            <el-form-item prop="name">
+              <el-input
+                v-model="form.name"
+               	@blur="editNameCheckFn()"
+                ref="editNameInputRef"
+                placeholder="请输入新的名称"
+              ></el-input>
+            </el-form-item>
+						<!--   @blur="editNameCheckFn()" -->
+          </el-form>
+        </div>
+				<el-tooltip v-if="!editTitle" class="item" effect="light" content="修改名称" placement="top">
+    		  <span class="a_h_l_edit" @click.stop="editTitleFn()">
+						<img src="../../../../assets/icon/classroomObservation/editIcon2.svg">
+					</span>
+    		</el-tooltip>
 			</div>
 			<div class="ai-h-right">
 				<span style="width: 100px;" class="generateError" v-if="loadNum == 2"
@@ -27,7 +45,7 @@
 				<span
 					v-if="loadNum == 0 && !openItem && tid"
 					class="ai-h-r-icon4"
-					@click.stop="delBtn()"
+					@click="delBtn()"
 				>
 					<el-tooltip
 						class="item"
@@ -46,7 +64,7 @@
 				<span
 					v-if="loadNum == 0 && openItem"
 					:class="['ai-h-r-icon1', showIndex <= 0 ? 'ai_h_r_iconOpacity' : '']"
-					@click.stop="changeShowIndex(-1)"
+					@click="changeShowIndex(-1)"
 				>
 					<el-tooltip
 						class="item"
@@ -67,7 +85,7 @@
 					:class="[
 						showIndex >= historyResult.length - 1 ? 'ai_h_r_iconOpacity' : '',
 					]"
-					@click.stop="changeShowIndex(1)"
+					@click="changeShowIndex(1)"
 				>
 					<el-tooltip
 						class="item"
@@ -83,7 +101,7 @@
 					</el-tooltip>
 				</span>
 
-				<span v-if="loadNum != 1 && openItem && tid" @click.stop="editBtn()">
+				<span v-if="loadNum != 1 && openItem && tid" @click="editBtn()">
 					<el-tooltip
 						class="item"
 						effect="light"
@@ -132,6 +150,7 @@
 				</div>
 			</div>
 		</div>
+		<!-- <editNameDialog ref="editNameDialogRef" @success="changeNameSuccess"/> -->
 	</div>
 </template>
 
@@ -139,11 +158,13 @@
 import mdView from "./mdView.vue";
 import pieChart from "./pieChart.vue";
 import { v4 as uuidv4 } from "uuid";
+// import editNameDialog from './editNameDialog.vue'
 export default {
 	emits: ["delItem", "editItem", "saveItem"],
 	components: {
 		mdView,
 		pieChart,
+		// editNameDialog
 	},
 	props: {
 		data: {
@@ -201,6 +222,21 @@ export default {
 				"tiff",
 			],
 			oldData: {},
+			form: {
+        name: ""
+      },
+      editTitle: false,
+      rules: {
+        name: [
+          { required: true, trigger: "change", message: "请输入新的名称" },
+          {
+            min: 1,
+            max: 20,
+            trigger: "change",
+            message: "长度需在1-20个字符之间"
+          }
+        ]
+      }
 		};
 	},
 	computed: {
@@ -232,6 +268,8 @@ export default {
 				this.loadNum = 1;
 				let type = 0;//0 用agentId  1:用提示词 3:啥都没有
 				let assistant = this.dialogTagDataList.find(
+					(i) => i.id == this.data.jsonData.mId
+				) || this.dialogTagDataList.find(
 					(i) => i.name == this.data.jsonData.name
 				);
 
@@ -417,6 +455,39 @@ export default {
 			this.$emit("editItem", this.data.id, _copyData);
 			this.$emit("saveItem", this.data.id, _copyData);
 		},
+		// editTitle(){
+		// 	this.$refs.editNameDialogRef.open(this.data.jsonData.anotherName?this.data.jsonData.anotherName:this.data.jsonData.name)
+		// },
+		changeNameSuccess(newName){
+			let _copyData = JSON.parse(JSON.stringify(this.data));
+			_copyData.jsonData.anotherName = newName;
+			_copyData.json_data = JSON.stringify(_copyData.jsonData);
+			this.$emit("editItem", this.data.id, _copyData);
+			this.$emit("saveItem", this.data.id, _copyData);
+			// this.$refs.editNameDialogRef.close();
+		},
+		editTitleFn() {
+      if (!this.tid) return this.$message.info("请新建课堂,或选择历史课堂");
+      this.form.name = this.data.jsonData.anotherName?this.data.jsonData.anotherName:this.data.jsonData.name;
+      this.editTitle = true;
+      this.$nextTick(() => {
+        this.$refs.editNameInputRef.focus();
+      });
+      // this.$refs.editNameDialogRef.open(this.title)
+    },
+    editNameCheckFn() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          this.editTitle = false;
+          this.changeNameSuccess(this.form.name);
+        } else {
+          this.$nextTick(() => {
+            this.$refs.editNameInputRef.focus();
+						this.$message.error("该名称不符合规则")
+          });
+        }
+      });
+    },
 	},
 	mounted() {
 		if (this.data.jsonData.content) {
@@ -431,10 +502,18 @@ export default {
 	width: 100%;
 	height: auto;
 
-	margin: 11.7px 0px;
+	/* margin: 11.7px 0px; */
 
 	padding-right: 10px;
 	box-sizing: border-box;
+	margin-bottom:10px ;
+	border: 1px solid #E7E7E7;
+	border-radius: 4px;
+	transition: .3s;
+}
+
+.analysisItem:hover{
+	border: 1px solid #3681FC;
 }
 .text1 {
 	color: rgba(54, 129, 252, 1);
@@ -520,13 +599,16 @@ export default {
 
 .ai-header:hover .ai-h-r-icon4 {
 	display: block;
+	/* opacity: 1; */
 }
 
 .ai-h-r-icon4 {
-	background: url("../../../../assets/icon/classroomObservation/del.svg");
+	background: url("../../../../assets/icon/classroomObservation/del2.svg");
 	/* position: absolute; */
 	/* right: -40px; */
 	display: none;
+	/* opacity: 0; */
+	/* transition: .3s; */
 }
 
 .analysisItem:hover .ai-h-r-icon4 {
@@ -588,4 +670,39 @@ th {
 	display: flex;
 	align-items: center;
 }
+
+.a_h_l_edit{
+	width: 16px;
+	height: 16px;
+	margin-left: 10px;
+	display: none;
+	align-items: center;
+	justify-content: center;
+}
+
+.a_h_l_edit>img{
+	width: 100%;
+	height: 100%;
+}
+
+.ai-h-left:hover .a_h_l_edit{
+	display: flex;
+}
+
+.a_h_l_t_input {
+	width: 25%;
+	min-width: 220px;
+  height: 100%;
+  display: flex;
+  align-items: center;
+}
+
+.a_h_l_t_input>>>.el-form{
+	width: 100%;
+	min-width: 220px;
+}
+
+.a_h_l_t_input>>>.el-form-item{
+	margin-bottom: 0;
+}
 </style>

+ 100 - 5
src/components/pages/classroomObservation/components/analysisSpecialItem.vue

@@ -5,7 +5,26 @@
 				<span
 					:class="['ai-h-l-icon', openItem ? 'ai-h-l-iconActive' : '']"
 				></span>
-				<span class="ai-h-l-text">{{ data.jsonData.name }}</span>
+				<span class="ai-h-l-text" v-if="!editTitle">{{ data.jsonData.anotherName?data.jsonData.anotherName:data.jsonData.name }}</span>
+
+				<div class="a_h_l_t_input" v-if="editTitle" @click.stop="() => {}">
+          <el-form ref="form" :model="form" :rules="rules" label-position="top">
+            <el-form-item prop="name">
+              <el-input
+                v-model="form.name"
+               	@blur="editNameCheckFn()"
+                ref="editNameInputRef"
+                placeholder="请输入新的名称"
+              ></el-input>
+            </el-form-item>
+						<!--   @blur="editNameCheckFn()" -->
+          </el-form>
+        </div>
+				<el-tooltip v-if="!editTitle" class="item" effect="light" content="修改名称" placement="top">
+    		  <span class="a_h_l_edit" @click.stop="editTitleFn()">
+						<img src="../../../../assets/icon/classroomObservation/editIcon2.svg">
+					</span>
+    		</el-tooltip>
 			</div>
 			<div class="ai-h-right">
 				<span style="width: 100px" class="generateError" v-if="loadNum == 2"
@@ -134,6 +153,7 @@
 			</div>
 			<mdView :text="data.jsonData.content" />
 		</div>
+		<!-- <editNameDialog ref="editNameDialogRef" @success="changeNameSuccess"/> -->
 	</div>
 </template>
 
@@ -145,12 +165,13 @@ let converter2 = OpenCC.Converter({
 })
 import mdView from "./mdView.vue";
 import eChartTemplate from "./eChartTemplate";
-
+// import editNameDialog from './editNameDialog.vue'
 export default {
 	emits: ["delItem", "editItem", "saveItem"],
 	components: {
 		mdView,
 		eChartTemplate,
+		// editNameDialog
 	},
 	props: {
 		data: {
@@ -209,6 +230,21 @@ export default {
 				"tiff",
 			],
 			oldData: {},
+			form: {
+        name: ""
+      },
+      editTitle: false,
+      rules: {
+        name: [
+          { required: true, trigger: "change", message: "请输入新的名称" },
+          {
+            min: 1,
+            max: 20,
+            trigger: "change",
+            message: "长度需在1-20个字符之间"
+          }
+        ]
+      }
 		};
 	},
 	computed: {
@@ -335,7 +371,8 @@ export default {
 			};
 		},
 		getData() {
-			if (this.bmData.editorBarData.type != 0) {
+			if (!this.bmData.editorBarData || this.bmData.editorBarData.type != 0) {
+				this.loadNum = 2;
 				return this.$message.info("请上传表格形式的转录文稿");
 			}
 			try {
@@ -601,7 +638,38 @@ export default {
 		  let parts = time.split(':');
 		  let seconds = (+parts[0]) * 3600 + (+parts[1]) * 60 + (+parts[2]);
 		  return seconds;
-		}
+		},
+		
+		changeNameSuccess(newName){
+			let _copyData = JSON.parse(JSON.stringify(this.data));
+			_copyData.jsonData.anotherName = newName;
+			_copyData.json_data = JSON.stringify(_copyData.jsonData);
+			this.$emit("editItem", this.data.id, _copyData);
+			this.$emit("saveItem", this.data.id, _copyData);
+			// this.$refs.editNameDialogRef.close();
+		},
+		editTitleFn() {
+      if (!this.tid) return this.$message.info("请新建课堂,或选择历史课堂");
+      this.form.name = this.data.jsonData.anotherName?this.data.jsonData.anotherName:this.data.jsonData.name;
+      this.editTitle = true;
+      this.$nextTick(() => {
+        this.$refs.editNameInputRef.focus();
+      });
+      // this.$refs.editNameDialogRef.open(this.title)
+    },
+    editNameCheckFn() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          this.editTitle = false;
+          this.changeNameSuccess(this.form.name);
+        } else {
+          this.$nextTick(() => {
+            this.$refs.editNameInputRef.focus();
+						this.$message.error("该名称不符合规则")
+          });
+        }
+      });
+    },
 	},
 	mounted() {
 		if (this.data.jsonData.content) {
@@ -616,10 +684,18 @@ export default {
 	width: 100%;
 	height: auto;
 
-	margin: 11.7px 0px;
+	/* margin: 11.7px 0px; */
 
 	padding-right: 10px;
 	box-sizing: border-box;
+	margin-bottom:10px ;
+	border: 1px solid #E7E7E7;
+	border-radius: 4px;
+	transition: .3s;
+}
+
+.analysisItem:hover{
+	border: 1px solid #3681FC;
 }
 .text1 {
 	color: rgba(54, 129, 252, 1);
@@ -799,4 +875,23 @@ th {
 	/* 斜体字 */
 	font-style: italic;
 }
+
+
+.a_h_l_edit{
+	width: 16px;
+	height: 16px;
+	margin-left: 10px;
+	display: none;
+	align-items: center;
+	justify-content: center;
+}
+
+.a_h_l_edit>img{
+	width: 100%;
+	height: 100%;
+}
+
+.ai-h-left:hover .a_h_l_edit{
+	display: flex;
+}
 </style>

+ 7 - 4
src/components/pages/classroomObservation/components/analysisTemplateDialog.vue

@@ -719,8 +719,12 @@ export default {
 			this.$refs.addNewAnalysisDialogRef.open(type);
 		},
 		//添加某条
-		addNewAnalysisItem(name) {
-			let _data = this.dataList.find((i) => i.name == name);
+		addNewAnalysisItem(name,id) {
+			let _data = this.dataList.find(
+					(i) => i.id == id
+				) || this.dataList.find(
+					(i) => i.name == name
+				);
 			console.log(_data)
 			this.analysisDetail.tips.push({
 				id: "",
@@ -968,8 +972,7 @@ export default {
 	width: 100%;
 	height: 100%;
 	background-color: #f0f2f5;
-	overflow: scroll;
-	overflow-x: hidden;
+	overflow: auto;
 	box-sizing: border-box;
 	padding: 15px;
 	padding-bottom: 50px;

+ 33 - 8
src/components/pages/classroomObservation/components/baseMessage.vue

@@ -1,6 +1,6 @@
 <template>
 	<div class="message">
-		<div class="m-header" @click.stop="changeShowMain(!showMain)">
+		<div class="m-header" :style="showMain?'':'border-radius:5px'" @click.stop="changeShowMain(!showMain)">
 			<span :class="['m-h-icon', showMain ? 'm-h-icon-active' : '']"></span>
 			<span class="m-h-title">{{ title }}</span>
 		</div>
@@ -30,17 +30,21 @@
 
 				<div class="m-m-formItem" style="width: clamp(22%,22%,22%)"">
 					<div class="m-m-fi-label">授课时间</div>
-					<div class="m-m-fi-input">
+					<div class="m-m-fi-input" style="position: relative;">
 						<el-date-picker
 							v-model="data.time"
 							type="datetime"
 							format="yyyy-MM-dd HH:mm:ss"
 							value-format="yyyy-MM-dd HH:mm:ss"
-							style="width: 100%"
+							style="width: 100%;"
+							class="m_m_fi_inputDisabledIcon"
+							prefix-icon="none"
 							@change="changeData()"
 							placeholder="请选择授课时间"
 						>
+						
 						</el-date-picker>
+						<i class="el-icon-date" style="position: absolute; right: 10px; top: 50%; transform: translateY(-50%); pointer-events: none;"></i>
 					</div>
 				</div>
 
@@ -787,6 +791,7 @@ ${this.data.editorBarData?this.data.editorBarData.content:""}
 .message {
 	width: 100%;
 	height: auto;
+	/* background-color: red; */
 }
 .imgTit {
 	height: 40px;
@@ -834,16 +839,20 @@ ${this.data.editorBarData?this.data.editorBarData.content:""}
 }
 
 .m-header {
-	width: 100%;
-	height: 50px;
+	width: calc(100% - 10px);
+	height: 60px;
 	display: flex;
 	align-items: center;
 	cursor: pointer;
+	border-radius: 5px 5px 0 0;
+	box-sizing: border-box;
+	padding: 0 10px;
+	background-color: #F8F9FA;
 }
 
 .m-h-icon {
-	width: 16px;
-	height: 16px;
+	width: 18px;
+	height: 18px;
 	background: url("../../../../assets/icon/classroomObservation/right.svg")
 		no-repeat;
 	background-size: 100% 100%;
@@ -857,12 +866,13 @@ ${this.data.editorBarData?this.data.editorBarData.content:""}
 
 .m-h-title {
 	font-size: 18px;
+	font-weight: bold;
 }
 
 .m-main {
 	width: calc(100% - 10px);
 	height: auto;
-	border-radius: 5px;
+	border-radius:0 0 5px 5px;
 	background-color: #ffffff;
 	padding: 20px 20px 0 20px;
 	box-sizing: border-box;
@@ -893,6 +903,14 @@ ${this.data.editorBarData?this.data.editorBarData.content:""}
 	max-width: 100%;
 }
 
+.m_m_fi_inputDisabledIcon>>> .el-input__prefix{
+	display: none;
+}
+
+.m_m_fi_inputDisabledIcon>>>.el-input__inner{
+	padding-left: 15px;
+}
+
 .m-m-fi-label {
 	font-size: 16px;
 	display: flex;
@@ -938,6 +956,9 @@ ${this.data.editorBarData?this.data.editorBarData.content:""}
 	cursor: pointer;
 	position: relative;
 	margin-bottom: 10px;
+	border-radius: 4px;
+	border: dashed 1px #DCDCDC;
+	overflow: hidden;
 }
 .m-m-fi-imageItem > .itemUrl {
 	width: 100%;
@@ -1081,6 +1102,10 @@ ${this.data.editorBarData?this.data.editorBarData.content:""}
 	cursor: pointer;
 	position: relative;
 	margin-bottom: 10px;
+	border-radius: 4px;
+	border: dashed 1px #DCDCDC;
+	overflow: hidden;
+
 }
 .m-m-fi-nephogramItem> .itemUrl {
 	width: 100%;

+ 81 - 0
src/components/pages/classroomObservation/components/editNameDialog.vue

@@ -0,0 +1,81 @@
+<template>
+	<div class="addNewCourse">
+		<el-dialog title="修改名称" :visible.sync="dialogVisible" width="500px">
+			<div>
+				<el-form ref="form" :model="form" :rules="rules" label-position="top">
+					<el-form-item label="名称" prop="name">
+						<el-input
+							v-model="form.name"
+							placeholder="请输入新的名称"
+						></el-input>
+					</el-form-item>
+				</el-form>
+			</div>
+			<span slot="footer" class="dialog-footer">
+				<el-button @click="dialogVisible = false">取 消</el-button>
+				<el-button type="primary" @click="submit('form')">确 定</el-button>
+			</span>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+export default {
+	emits: ["success"],
+	props: {
+	
+	},
+	data() {
+		// let validateNo = (rule, value, callback) => {
+		// 	if (value.trim().length == 0) {
+		// 		callback(new Error("请输入课堂编号"));
+		// 	}else if(this.courseList.findIndex(i=>i.value==value.trim())!=-1){
+		// 		callback(new Error("该课堂编号已存在"));
+		// 	} else {
+		// 		callback();
+		// 	}
+		// };
+		// let validateName = (rule, value, callback) => {
+		// 	if (value.trim().length == 0) {
+		// 		callback(new Error("请输入课堂名称"));
+		// 	} else {
+		// 		callback();
+		// 	}
+		// };
+		return {
+			dialogVisible: false,
+			form: {
+				name: "",
+			},
+			rules: {
+				name: [
+					{ required:true,trigger: "change",message:"请输入新的名称"},
+					{min:1,max:20,trigger: "change",message:"长度需在1-20个字符之间"}
+			],
+			},
+		};
+	},
+	methods: {
+		open(name='新的名称') {
+			this.form.name = name;
+			this.dialogVisible = true;
+		},
+		close(){
+			this.dialogVisible = false;
+		},
+		submit(formName) {
+			this.$refs[formName].validate((valid) => {
+				if (valid) {
+					this.$emit("success", this.form.name);
+				} else {
+					return false;
+				}
+			});
+		},
+	},
+};
+</script>
+
+<style scoped>
+
+</style>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 952 - 1086
src/components/pages/classroomObservation/components/messageArea.vue


+ 213 - 127
src/components/pages/classroomObservation/components/startPage.vue

@@ -1,21 +1,42 @@
 <template>
-	<div class="startPage">
-		<div class="sp-introduce" v-if="showIntroduce">
-			<span class="sp-i-personIcon"></span>
-			<div class="sp-i-p-p">
-				<div class="sp-i-title">您好,我是 CocoClass 课堂观察</div>
-				<div class="sp-i-brief">
-					基于课堂录音和实录文稿进行分析,为您提供不同启发。
-				</div>
-			</div>
+  <div class="startPage">
+    <div class="sp-introduce" v-if="showIntroduce">
+      <!-- <span class="sp-i-personIcon"></span> -->
+      <img
+        src="../../../../assets/icon/classroomObservation/aiImage2.png"
+        alt=""
+      />
+      <div class="sp-i-p-p">
+        <div class="sp-i-title">您好,欢迎来到课堂观察</div>
+        <div class="sp-i-brief">
+          <!-- 基于课堂录音和实录文稿进行分析,为您提供不同启发。 -->
+          实时将会议录音转为文字,AI 自动生成会议纪要。
+        </div>
+      </div>
 
-			<!-- <span class="sp-i-icon1"></span>
+      <!-- <span class="sp-i-icon1"></span>
 			<span class="sp-i-icon2"></span> -->
-			<div class="sp-i-btn" @click="showIntroduce = false">我已了解并关闭</div>
-		</div>
-		<div class="sp-main">
-			<div class="sp-m-item" @click.stop="$emit('startTape')">
-				<!-- <span class="sp-m-i-icon1"></span> -->
+      <div class="sp-i-btn" @click="showIntroduce = false">我已了解并关闭</div>
+    </div>
+    <div class="sp-main">
+      <div class="sp_m_box">
+        <div class="sp_m_b_top"></div>
+        <div class="sp_m_b_bottom">
+          <div  @click.stop="$emit('startTape')">
+						<div>开始录音</div>
+						<span>实时语音转录文字</span>
+						<span>智能课堂观察</span>
+						<img src="../../../../assets/icon/classroomObservation/startPageIcon2.png">
+					</div>
+          <div  @click.stop="$emit('uploadTape')">
+						<div>上传文件</div>
+						<span>录音复盘</span>
+						<span>一键分析课堂情况</span>
+						<img src="../../../../assets/icon/classroomObservation/startPageIcon1.png">
+					</div>
+        </div>
+      </div>
+      <!-- <div class="sp-m-item" @click.stop="$emit('startTape')">
 				<div class="sp-m-item1">开始录音</div>
 				<div class="sp-m-item2">
 					<p>实时语音转录文字</p>
@@ -37,7 +58,6 @@
 				</div>
 			</div>
 			<div class="sp-m-item" @click.stop="$emit('uploadTape')">
-				<!-- <span class="sp-m-i-icon2"></span> -->
 				<div class="sp-m-item1">上传文件</div>
 				<div class="sp-m-item2">
 					<p>上传录音或实录文稿</p>
@@ -50,170 +70,236 @@
 							alt=""
 						/>
 				</div>
-			</div>
-		</div>
-	</div>
+			</div> -->
+    </div>
+  </div>
 </template>
 
 <script>
 export default {
-	emits: ["startTape", "uploadTape"],
-	data() {
-		return {
-			showIntroduce: true,
-		};
-	},
-	methods: {},
+  emits: ["startTape", "uploadTape"],
+  data() {
+    return {
+      showIntroduce: true
+    };
+  },
+  methods: {}
 };
 </script>
 
 <style scoped>
 .startPage {
-	width: 100%;
-	height: calc(100vh - 290px);
-	position: relative;
-	display: flex;
-	flex-direction: column;
-	overflow: auto;
+  width: 100%;
+  height: calc(100vh - 290px);
+  position: relative;
+  display: flex;
+  flex-direction: column;
+  overflow: auto;
 }
 
 .sp-introduce {
-	width: 100%;
-	min-height: 116px;
-	height: 116px;
-	background-color: #e2eeff;
-	display: flex;
-	flex-direction: column;
-	box-sizing: border-box;
-	padding-left: 220px;
-	padding-top: 20px;
-	position: relative;
-	margin-top: 7%;
+  width: 100%;
+  min-height: 116px;
+  height: 116px;
+  background-color: #e2eeff;
+  display: flex;
+  flex-direction: column;
+  box-sizing: border-box;
+  padding-left: 220px;
+  padding-top: 20px;
+  position: relative;
+  margin-top: 7%;
+}
+
+.sp-introduce > img {
+  width: 200px;
+  position: absolute;
+  left: 0px;
+  bottom: 0;
 }
 
 .sp-i-title {
-	font-size: 24px;
-	font-weight: 600;
-	color: #3681fc;
+  font-size: 24px;
+  font-weight: 600;
+  color: #3681fc;
 }
 
 .sp-i-p-p {
-	position: absolute;
-	bottom: 30%;
+  position: absolute;
+  bottom: 30%;
 }
 
 .sp-i-title > span {
-	margin: 0 10px;
-	white-space: nowrap;
+  margin: 0 10px;
+  white-space: nowrap;
 }
 
 .sp-i-brief {
-	font-size: 14px;
-	margin-top: 10px;
+  font-size: 14px;
+  margin-top: 10px;
 }
 
 .sp-i-personIcon {
-	width: 200px;
-	height: 200px;
-	position: absolute;
-	left: 0px;
-	bottom: 0;
-	background: url("../../../../assets/icon/classroomObservation/aiImage.png")
-		no-repeat;
-	background-size: 100% 100%;
-	background-position: center 20px;
+  width: 200px;
+  /* height: 200px; */
+  position: absolute;
+  left: 0px;
+  bottom: 0;
+  background: url("../../../../assets/icon/classroomObservation/aiImage2.png")
+    no-repeat;
+  background-size: 100% 100%;
+  background-position: center 20px;
 }
 
 .sp-i-btn {
-	width: auto;
-	height: auto;
-	padding: 5px 10px;
-	position: absolute;
-	right: 10px;
-	bottom: 10px;
-	background-color: #3a76fc;
-	font-size: 12px;
-	border-radius: 20px;
-	cursor: pointer;
-	color: white;
+  width: auto;
+  height: auto;
+  padding: 5px 10px;
+  position: absolute;
+  right: 10px;
+  bottom: 10px;
+  background-color: #3a76fc;
+  font-size: 12px;
+  border-radius: 20px;
+  cursor: pointer;
+  color: white;
 }
 
 .sp-main {
-	width: 80%;
-	margin: 10px auto;
-	flex: 1;
-	display: flex;
-	/* align-items: flex-end; */
-	align-items: center;
-	/* align-content: center; */
-	justify-content: space-around;
-	box-sizing: border-box;
-	/* padding-bottom: 15%; */
+  width: 80%;
+  margin: 10px auto;
+  flex: 1;
+  display: flex;
+  align-items: flex-end;
+  /* align-content: center; */
+  justify-content: space-around;
+  box-sizing: border-box;
+  /* padding-bottom: 15%; */
 }
 
-.sp-m-item {
-	width: 220px;
-	height: 330px;
-	gap: 0px;
-	display: flex;
+.sp_m_box {
+  width: 70%;
+  height: 100%;
+	/* max-height: 550px; */
+	max-height: 400px;
+  display: flex;
+  flex-direction: column;
+  margin-bottom: 8%;
+}
+
+.sp_m_b_bottom {
+  width: 100%;
+  flex: 1;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+
+.sp_m_b_bottom > div {
+  height: 100%;
+  flex: 1;
+  display: flex;
+  /* align-items: center; */
+  /* justify-content: center; */
+  box-sizing: border-box;
+  border: 1px solid #aeccfe;
+  box-shadow: 0px 4px 10px 0px #1d398314;
+
+  box-shadow: 1px 1px 20px 4px #1d39830d;
+	background-color: #fff;
+	border-radius: 8px;
+	padding: 40px;
 	flex-direction: column;
-	border-radius: 8px 0px 0px 0px;
-	/* opacity: 0px; */
-	background: rgba(224, 234, 251, 1);
-	box-sizing: border-box;
-	padding: 20px;
-	border-radius: 10px;
 	cursor: pointer;
+	position: relative;
+}
+
+.sp_m_b_bottom > div>img{
+	width: 50%;
+	position: absolute;
+	right: 0;
+	bottom: 0;
+}
+
+.sp_m_b_bottom > div>div{
+	font-size: 30px;
+	font-weight: bold;
+	margin-bottom: 10px;
+}
+
+.sp_m_b_bottom > div>span{
+	margin-top: 5px;
+	color: #00000066;
+}
+
+.sp_m_b_bottom > div:nth-of-type(2) {
+  margin-left: 20px;
+}
+
+.sp-m-item {
+  width: 220px;
+  height: 330px;
+  gap: 0px;
+  display: flex;
+  flex-direction: column;
+  border-radius: 8px 0px 0px 0px;
+  /* opacity: 0px; */
+  background: rgba(224, 234, 251, 1);
+  box-sizing: border-box;
+  padding: 20px;
+  border-radius: 10px;
+  cursor: pointer;
 }
 .sp-m-item1 {
-	font-family: PingFang SC;
-	font-size: 28px;
-	font-weight: 600;
-	line-height: 36px;
-	text-align: left;
+  font-family: PingFang SC;
+  font-size: 28px;
+  font-weight: 600;
+  line-height: 36px;
+  text-align: left;
 }
 .sp-m-item2 {
-	margin: 20px 0;
-	margin: 0;
+  margin: 20px 0;
+  margin: 0;
 }
 .sp-m-item2 {
-	font-size: 14px;
-	font-weight: normal;
-	margin: 20px 0; 
+  font-size: 14px;
+  font-weight: normal;
+  margin: 20px 0;
 }
-.sp-m-item2 > p{
-	margin: 0;
-	margin-bottom: 5px;
+.sp-m-item2 > p {
+  margin: 0;
+  margin-bottom: 5px;
 }
 .sp-m-item3 {
-	width: 100%;
-	flex: 1;
-	display: flex;
-	align-items: center;
-	justify-content: center;
+  width: 100%;
+  flex: 1;
+  display: flex;
+  align-items: center;
+  justify-content: center;
 }
 .img1 {
-	width: 128px;
-	height: 128px;
+  width: 128px;
+  height: 128px;
 }
 .img2 {
-	width: 90px;
-	height: 90px;
-	position: absolute;
-	top: 50%;
-	left: 50%;
-	margin: 0;
-	background-color: #5e9afc;
-	/* overflow: hidden; */
-	border-radius: 50%;
-	transform: translate(-50%, -50%);
+  width: 90px;
+  height: 90px;
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  margin: 0;
+  background-color: #5e9afc;
+  /* overflow: hidden; */
+  border-radius: 50%;
+  transform: translate(-50%, -50%);
 }
 
 .sp-m-item > span {
-	width: 40%;
-	height: 40%;
-	background-size: 100% 100%;
-	margin-bottom: 15px;
+  width: 40%;
+  height: 40%;
+  background-size: 100% 100%;
+  margin-bottom: 15px;
 }
 
 /* .sp-m-i-icon1 {

+ 5 - 5
src/components/pages/classroomObservation/index.vue

@@ -16,8 +16,9 @@
 					class="co-h2-l-icon"
 					@click="$refs.addNewCourseDialogRef.open()"
 				></span> -->
-				<span class="co-h2-l-icon" @click="addNewCourse()"></span>
-				<span class="co-h2-l-hr"></span>
+				<span class="co-h2-l-icon"></span>
+				<!-- @click="addNewCourse()" -->
+				<!--<span class="co-h2-l-hr"></span>-->
 				<span class="co-h2-l-text">
 					<el-select
 						class="co_h2_l_t_select"
@@ -532,7 +533,6 @@ export default {
 			this.ajax
 				.post("https://gpt4.cocorobo.cn/get_classroom_observation_new", pram)
 				.then((res) => {
-					console.log(res);
 					let _data = res.data.FunctionResponse.result.length
 						? JSON.parse(res.data.FunctionResponse.result)
 						: [];
@@ -776,9 +776,9 @@ export default {
 	width: 20px;
 	height: 20px;
 	position: relative;
-	background: url("../../../assets/icon/classroomObservation/close.png")
+	background: url("../../../assets/icon/classroomObservation/courseIcon.svg")
 		no-repeat;
-	transform: rotate(45deg);
+	/* transform: rotate(45deg); */
 	cursor: pointer;
 	background-size: 100% 100%;
 }

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels