11wqe1 2 dias atrás
pai
commit
eb0b593c3a

+ 82 - 8
src/components/pages/studentManageNew/component/addstu.vue

@@ -70,7 +70,7 @@
             <div class="search_stu_box" v-if="popoverVisible">
             <div class="search_stu_box" v-if="popoverVisible">
               <div class="search_stu_box_content">
               <div class="search_stu_box_content">
               
               
-                <el-tag
+                <!-- <el-tag
                   v-for="(item, index) in searchStuData"
                   v-for="(item, index) in searchStuData"
                   :key="index"
                   :key="index"
                   closable
                   closable
@@ -78,7 +78,22 @@
                   @close="handleClose(index)"
                   @close="handleClose(index)"
                 >
                 >
                   <span>{{ item }}</span>
                   <span>{{ item }}</span>
-                </el-tag>
+                </el-tag> -->
+                <div class="tagL" v-for="(item, index) in searchStuData" :key="index">
+                  <div class="tagtit" v-if="stuname2(item) == 'danger'">
+                    <div class="poptag">
+                      <img src="../../../../assets/stuImg/tishi.svg" alt=""/>
+                      <div>您添加的学生“{{ item }}”存在重复姓名。 是否继续添加?</div>
+                    </div>
+                    <div style="display: flex;justify-content: flex-end;gap: 10px;">
+                      <!-- <span>添加</span> -->
+                      <span style="cursor: pointer;" @click="addpopStu(item)">添加</span>
+
+                      <span style="cursor: pointer;color: #0052D9;" @click="delSeaStu(index)">删除</span>
+                    </div>
+                  </div>
+                  <div class="tagitem" :class="stuname2(item) == 'danger' ? 'tagitem2' :''">{{ item }}</div>
+                </div>
 
 
               </div>
               </div>
               <div class="search_stu_box_footer">
               <div class="search_stu_box_footer">
@@ -97,7 +112,7 @@
           <div class="addcla_box_item">
           <div class="addcla_box_item">
             <span class="addcla_box_item_span">已输入:</span>
             <span class="addcla_box_item_span">已输入:</span>
             <div class="selected_stu_box">
             <div class="selected_stu_box">
-              <el-tag
+              <!-- <el-tag
                 v-for="(item, index) in selectedStuData"
                 v-for="(item, index) in selectedStuData"
                 :key="index"
                 :key="index"
                 closable
                 closable
@@ -105,7 +120,21 @@
                 @close="handleSelectedStuClose(index)"
                 @close="handleSelectedStuClose(index)"
               >
               >
                 <span>{{ item }}</span>
                 <span>{{ item }}</span>
-              </el-tag>
+              </el-tag> -->
+                <div class="tagL" v-for="(item, index) in selectedStuData" :key="index">
+                  <div class="tagtit" v-if="stuname(item) == 'danger'">
+                    <div class="poptag">
+                      <img src="../../../../assets/stuImg/tishi.svg" alt=""/>
+                      <div>您添加的学生“{{ item }}”存在重复姓名。 是否继续添加?</div>
+                    </div>
+                    <div style="display: flex;justify-content: flex-end;gap: 10px;">
+                      <!-- <span>添加</span> -->
+                      <span style="cursor: pointer;" @click="addpopStu(item)">添加</span>
+                      <span style="cursor: pointer;color: #0052D9;" @click="handleSelectedStuClose(index)">删除</span>
+                    </div>
+                  </div>
+                  <div class="tagitem" :class="stuname(item) == 'danger' ? 'tagitem2' :''">{{ item }}</div>
+                </div>
             </div>
             </div>
           </div>
           </div>
         </div>
         </div>
@@ -225,7 +254,7 @@ export default {
       cascaderDataPath: [],
       cascaderDataPath: [],
 
 
       impbox:[],
       impbox:[],
-
+      addpopStuList:[],
       popBoxdia:false,
       popBoxdia:false,
       uploadfileLoading:false,
       uploadfileLoading:false,
       addStuType: 1,
       addStuType: 1,
@@ -262,21 +291,22 @@ export default {
       searchStuData: [],
       searchStuData: [],
       selectedStuData: [],
       selectedStuData: [],
       popoverVisible: false,
       popoverVisible: false,
+      
     };
     };
   },
   },
   computed: {
   computed: {
     stuname() {
     stuname() {
       return (item) => {
       return (item) => {
-        let box = this.selectedStuData.filter((e) => e === item);
+        let box = this.selectedStuData.filter((e) => (e === item && this.addpopStuList.indexOf(item) == -1));
         // console.log(box);
         // console.log(box);
         return box.length > 1 ? "danger" : "";
         return box.length > 1 ? "danger" : "";
       };
       };
     },
     },
     stuname2() {
     stuname2() {
       return (item) => {
       return (item) => {
-        let box = this.searchStuData.filter((e) => e === item);
+        let box = this.searchStuData.filter((e) => (e === item && this.addpopStuList.indexOf(item) == -1));
         // console.log(box);
         // console.log(box);
-        return box.length > 1 ? "1" : "0";
+        return box.length > 1 ? "danger" : "";
       };
       };
     },
     },
   },
   },
@@ -285,6 +315,21 @@ export default {
     this.getSchoolName();
     this.getSchoolName();
   },
   },
   methods: {
   methods: {
+    stardop(){
+      this.addStuVisible = true;
+      this.searchStuName= "";
+      console.log('666');
+      this.addStuType=1
+      this.searchStuData= [];
+      this.selectedStuData= [];
+      this.cascaderDataPath=[];
+      this.impbox=[];
+      this.addpopStuList=[];
+
+    },
+    addpopStu(val){
+      this.addpopStuList.push(val)
+    },
     delSeaStu(ind){
     delSeaStu(ind){
       this.searchStuData.splice(ind,1)
       this.searchStuData.splice(ind,1)
     },
     },
@@ -805,12 +850,41 @@ export default {
   box-sizing: border-box;
   box-sizing: border-box;
   background: #E7F3FF;
   background: #E7F3FF;
   border: 1px #DDE4E5 solid;
   border: 1px #DDE4E5 solid;
+  position: relative;
 }
 }
 .tagitem{
 .tagitem{
   height: 100%;
   height: 100%;
   padding: 0 8px;
   padding: 0 8px;
   box-sizing: border-box;
   box-sizing: border-box;
 }
 }
+
+.tagtit{
+  position: absolute;
+  top: -116px;
+  right: 0;
+  background: #999;
+  display: none;
+  width: 304px;
+  height: 116px;
+  background: #FFFFFF;
+  border-radius: 8px 8px 8px 8px;
+  padding: 10px;
+  float: left;
+  box-sizing: border-box;
+}
+.poptag{
+  display: flex !important;
+  gap: 10px;
+  align-items: flex-start;
+}
+.tagtit img{
+  width: 20px;
+  margin-top: 5px;
+}
+/* tagtit 与 tagitem 是兄弟关系,需通过父元素 tagL 来联动 */
+.tagL:hover .tagtit{
+  display: block !important;
+}
 .tagitem2{
 .tagitem2{
   background: #FEF0F0;
   background: #FEF0F0;
   border: 1px #FEF0F0 solid;
   border: 1px #FEF0F0 solid;

+ 109 - 50
src/components/pages/studentManageNew/component/table.vue

@@ -330,35 +330,37 @@
 
 
 
 
     <!-- 移动班级学生弹框 -->
     <!-- 移动班级学生弹框 -->
-    <el-dialog :visible.sync="moveClaVisible" width="500px">
+    <el-dialog :visible.sync="moveClaVisible" width="440px">
       <template slot="title">
       <template slot="title">
         <div class="dia_title_box">
         <div class="dia_title_box">
-          <span>移动班级学生</span>
+          <span>移动学生</span>
         </div>
         </div>
       </template>
       </template>
-      <el-cascader
-        :options="cascaderData"
-        v-model="moveClaCascaderDataPath"
-        @change="handlemoveChangecascader"
-        popper-class="myCascader2"
-        style="width: 100%;"
-        :props="{
-          label: 'name',
-          value: 'id',
-          children: 'children',
-        }"
-      >
-        <template slot-scope="{ data, node }">
-          <!-- 一级选项(年级) -->
-          <span v-if="node.level === 1">{{ data.name }}</span>
-          <!-- 二级选项(班级)- 可以自定义显示 -->
-          <span v-else-if="node.level === 2" class="cascader-class-item">
-            <span>{{ data.name }}</span>
-          </span>
-          <!-- 其他级别(兜底) -->
-          <span v-else>{{ data.name }}</span>
-        </template>
-      </el-cascader>
+      <div style="width: 100%;height: 300px;padding-top: 20px;box-sizing: border-box;">
+        <el-cascader
+          :options="cascaderData"
+          v-model="moveClaCascaderDataPath"
+          @change="handlemoveChangecascader"
+          popper-class="myCascader2"
+          style="width: 100%;"
+          :props="{
+            label: 'name',
+            value: 'id',
+            children: 'children',
+          }"
+        >
+          <template slot-scope="{ data, node }">
+            <!-- 一级选项(年级) -->
+            <span v-if="node.level === 1">{{ data.name }}</span>
+            <!-- 二级选项(班级)- 可以自定义显示 -->
+            <span v-else-if="node.level === 2" class="cascader-class-item">
+              <span>{{ data.name }}</span>
+            </span>
+            <!-- 其他级别(兜底) -->
+            <span v-else>{{ data.name }}</span>
+          </template>
+        </el-cascader>
+      </div>
       <div slot="footer" class="dialog-footer">
       <div slot="footer" class="dialog-footer">
         <el-button @click="moveClaVisible = false">取消</el-button>
         <el-button @click="moveClaVisible = false">取消</el-button>
         <el-button type="primary" @click="confirmMoveClaEdit">确定</el-button>
         <el-button type="primary" @click="confirmMoveClaEdit">确定</el-button>
@@ -432,17 +434,29 @@
         :show-close="false"
         :show-close="false"
       >
       >
         <div class="msgCon">
         <div class="msgCon">
-            <img style="width: 20px;" src="../../../../assets/stuImg/tishi.svg" alt="">
+            <img style="width: 20px;" v-if="deltypy == 7 || deltypy == 8" src="../../../../assets/stuImg/duil.svg" alt="">
+            <img style="width: 20px;" v-else src="../../../../assets/stuImg/tishi.svg" alt="">
+
             <div class="msgContxt">
             <div class="msgContxt">
               <div v-if="deltypy == 1">确认删除“{{delStuinfo.username}}”学生? </div>
               <div v-if="deltypy == 1">确认删除“{{delStuinfo.username}}”学生? </div>
               <div v-if="deltypy == 2">确认删除这 {{selectedData.length}} 位学生? </div>
               <div v-if="deltypy == 2">确认删除这 {{selectedData.length}} 位学生? </div>
               <div v-if="deltypy == 3">此操作将删除该班级,及班级所有已产生的授课数据, 是否继续? </div>
               <div v-if="deltypy == 3">此操作将删除该班级,及班级所有已产生的授课数据, 是否继续? </div>
               <div v-if="deltypy == 4">确定从当前班级移除{{ selectedData.length }}名学生吗? </div>
               <div v-if="deltypy == 4">确定从当前班级移除{{ selectedData.length }}名学生吗? </div>
               <div v-if="deltypy == 5">确定要重置 {{selectedData.length}} 个学生的密码吗? </div>
               <div v-if="deltypy == 5">确定要重置 {{selectedData.length}} 个学生的密码吗? </div>
+              <div v-if="deltypy == 6">确定要重置 {{this.stuEditInfo.username}} 的密码吗? </div>
+            </div>
+            <div class="msgContxt" v-if="deltypy == 7 || deltypy == 8">
+              <div v-if="deltypy == 7">对{{selectedData.length}}个账户重置密码成功! </div>
+              <div v-if="deltypy == 8">重置密码成功! </div>
+              <div>
+                <span>默认密码为:Coco1234</span>
+                <img @click="copyText" style="width: 20px;cursor: pointer;scale: 1.2;" src="../../../../assets/stuImg/copy2.svg" alt="">
+              </div>
             </div>
             </div>
         </div>
         </div>
         <span slot="footer" class="dialog-footer">
         <span slot="footer" class="dialog-footer">
           <el-button @click="closeDia"
           <el-button @click="closeDia"
+          v-if="deltypy != 7 && deltypy != 8"
             >取 消</el-button
             >取 消</el-button
           >
           >
           <el-button type="primary" @click="confirmDelStu"
           <el-button type="primary" @click="confirmDelStu"
@@ -632,7 +646,33 @@ export default {
     },
     },
   },
   },
   methods: {
   methods: {
-
+    copyText(){
+      const text = 'Coco1234';
+      if (navigator.clipboard && navigator.clipboard.writeText) {
+        navigator.clipboard.writeText(text).then(() => {
+          this.$message.success('已复制到剪贴板');
+        }).catch(() => {
+          this.fallbackCopy(text);
+        });
+      } else {
+        this.fallbackCopy(text);
+      }
+    },
+    fallbackCopy(text) {
+      const textarea = document.createElement('textarea');
+      textarea.value = text;
+      textarea.style.position = 'fixed';
+      textarea.style.opacity = '0';
+      document.body.appendChild(textarea);
+      textarea.select();
+      try {
+        document.execCommand('copy');
+        this.$message.success('已复制到剪贴板');
+      } catch (err) {
+        this.$message.error('复制失败');
+      }
+      document.body.removeChild(textarea);
+    },
 // 年级方法区域
 // 年级方法区域
     // 打开删除班级弹框
     // 打开删除班级弹框
     deleteCla(cid,val,uid) {
     deleteCla(cid,val,uid) {
@@ -894,9 +934,9 @@ export default {
           });
           });
           Promise.all(promises)
           Promise.all(promises)
             .then(() => {
             .then(() => {
-              this.$refs.msgboxref.dialogVisible = true;
               this.popBoxdia = false;
               this.popBoxdia = false;
-              this.cancelAllSelection();
+              this.deltypy = 7;
+              this.popBoxdia = true;
             })
             })
             .catch((err) => {
             .catch((err) => {
               console.error(err);
               console.error(err);
@@ -927,17 +967,25 @@ export default {
       });
       });
     },
     },
     inPassword() {
     inPassword() {
-      this.$confirm(
-        `确定要重置 ${this.stuEditInfo.username} 的密码吗?`,
-        "提示",
-        {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning",
-        }
-      )
-        .then(() => {
-          let params = [
+      this.deltypy = 6;
+      this.popBoxdia = true;
+
+      // this.$confirm(
+      //   `确定要重置 ${this.stuEditInfo.username} 的密码吗?`,
+      //   "提示",
+      //   {
+      //     confirmButtonText: "确定",
+      //     cancelButtonText: "取消",
+      //     type: "warning",
+      //   }
+      // )
+      //   .then(() => {
+         
+      //   })
+      //   .catch(() => {});
+    },
+    confirminPassword(){
+        let params = [
             {
             {
               uid: this.stuEditInfo.userid,
               uid: this.stuEditInfo.userid,
               pa: "Coco1234",
               pa: "Coco1234",
@@ -946,21 +994,25 @@ export default {
           this.ajax
           this.ajax
             .post(this.$store.state.api + "iniPassword", params)
             .post(this.$store.state.api + "iniPassword", params)
             .then((res) => {
             .then((res) => {
-              this.$message({
-                message: "密码重置成功",
-                type: "success",
-              });
+              // this.$message({
+              //   message: "密码重置成功",
+              //   type: "success",
+              // });
+              this.popBoxdia = false;
+              this.deltypy = 8
+              this.popBoxdia = true;
+
+              // this.$refs.msgboxref.dialogVisible = true;
+
             })
             })
             .catch((err) => {
             .catch((err) => {
+              this.popBoxdia = false;
               this.$message({
               this.$message({
                 message: "密码重置失败",
                 message: "密码重置失败",
                 type: "error",
                 type: "error",
               });
               });
             });
             });
-        })
-        .catch(() => {});
     },
     },
-
     // 打开批量删除弹框
     // 打开批量删除弹框
     deleteSelectionStudent() {
     deleteSelectionStudent() {
       this.deltypy = 2
       this.deltypy = 2
@@ -984,6 +1036,13 @@ export default {
         this.confirmRemove()
         this.confirmRemove()
       }else if(this.deltypy == 5){
       }else if(this.deltypy == 5){
         this.confirmrestpsd()
         this.confirmrestpsd()
+      }else if(this.deltypy == 6){
+        this.confirminPassword()
+      }else if(this.deltypy == 7){
+        this.cancelAllSelection();
+        this.popBoxdia = false;
+      }else if(this.deltypy == 8){
+        this.popBoxdia = false;
       }
       }
     },
     },
     onedelstu(){
     onedelstu(){
@@ -1068,7 +1127,7 @@ export default {
     },
     },
     // 添加学生
     // 添加学生
     addStudent() {
     addStudent() {
-      this.$refs.addStu.addStuVisible = true;
+      this.$refs.addStu.stardop()
       this.$refs.addStu.classInfo = this.activeinfo;
       this.$refs.addStu.classInfo = this.activeinfo;
     },
     },
 
 
@@ -1576,10 +1635,10 @@ export default {
   display: block !important;
   display: block !important;
 }
 }
 .myCascader2 .el-cascader-panel{
 .myCascader2 .el-cascader-panel{
-  width: 460px !important;
+  width: 400px !important;
 }
 }
 .myCascader2 .el-cascader-menu__list{
 .myCascader2 .el-cascader-menu__list{
-  width: 230px;
+  width: 200px;
 }
 }
 </style>
 </style>