Quellcode durchsuchen

自动添加年级

11wqe1 vor 3 Stunden
Ursprung
Commit
c715b5dd26
2 geänderte Dateien mit 299 neuen und 43 gelöschten Zeilen
  1. 5 0
      src/api/user.js
  2. 294 43
      src/components/schoolList.vue

+ 5 - 0
src/api/user.js

@@ -18,6 +18,11 @@ export function loginOut(data) {
 export function getUser(data) {
 export function getUser(data) {
   return axios.get(`${baseApi}/selectUser`, data)
   return axios.get(`${baseApi}/selectUser`, data)
 }
 }
+
+// 删除年级
+export function deleteGrade(data) {
+  return axios.get(`${baseApi}deleteGrade`, data)
+}
 // 获取探究中心课程
 // 获取探究中心课程
 export function selectAiExp(data) {
 export function selectAiExp(data) {
   return axios.get(`${baseApi}/selectAiExp`, data)
   return axios.get(`${baseApi}/selectAiExp`, data)

+ 294 - 43
src/components/schoolList.vue

@@ -13,7 +13,7 @@
 					</el-option>
 					</el-option>
 				</el-select>
 				</el-select>
 
 
-				<el-button type="primary" size="small" @click="add_school_dialog = true">新增学校</el-button>
+				<el-button type="primary" size="small" @click="addnewsch">新增学校</el-button>
 			</div>
 			</div>
 		</div>
 		</div>
 		<div class="tableBox">
 		<div class="tableBox">
@@ -70,7 +70,7 @@
 							<button @click="permissionSetting(scope.row)"
 							<button @click="permissionSetting(scope.row)"
 								v-show="!unShowJurUser.includes(userid)">权限设置</button>
 								v-show="!unShowJurUser.includes(userid)">权限设置</button>
 							<button @click="addcommunityL(scope.row)">添加社区</button>
 							<button @click="addcommunityL(scope.row)">添加社区</button>
-							<!-- <button @click="opengradia(scope.row.id)">年级管理</button> -->
+							<button @click="opengradia(scope.row.id)">年级管理</button>
 							<button @click="delete_school(scope.row)" style="color: red">
 							<button @click="delete_school(scope.row)" style="color: red">
 								删除
 								删除
 							</button>
 							</button>
@@ -86,7 +86,7 @@
 		<!-- 新增学校弹窗 -->
 		<!-- 新增学校弹窗 -->
 		<el-dialog title="新增学校" class="table" :visible.sync="add_school_dialog" :before-close="close_add_school"
 		<el-dialog title="新增学校" class="table" :visible.sync="add_school_dialog" :before-close="close_add_school"
 			width="700px">
 			width="700px">
-			<div class="el_dialog_school_content">
+			<div class="el_dialog_school_content" v-loading="add_school_dialog_loading">
 				<form class="el-form">
 				<form class="el-form">
 					<!-- 学校名称 -->
 					<!-- 学校名称 -->
 					<div class="el-form-item" style="margin-top: 15px">
 					<div class="el-form-item" style="margin-top: 15px">
@@ -172,7 +172,7 @@
 						<div class="el-form-item__content" style="margin-left: 5px">
 						<div class="el-form-item__content" style="margin-left: 5px">
 							<span>
 							<span>
 								<div class="add_input el-input el-input--suffix">
 								<div class="add_input el-input el-input--suffix">
-									<el-select v-model="regionC" placeholder="请选择区域" class="custom-select" filterable>
+									<el-select v-model="regionC" @change="changeRegionC" placeholder="请选择区域" class="custom-select" filterable>
 										<el-option v-for="(org, index) in regionCList" :key="index" :label="org.name"
 										<el-option v-for="(org, index) in regionCList" :key="index" :label="org.name"
 											:value="org.name">
 											:value="org.name">
 											{{ org.name }}
 											{{ org.name }}
@@ -183,17 +183,38 @@
 						</div>
 						</div>
 					</div>
 					</div>
 					<!-- 年级 -->
 					<!-- 年级 -->
-					<!-- <div class="flexcol">
-						<div style="display: flex;gap: 15px;">
+					<div class="flexcol">
+						<div style="display: flex;gap: 15px;align-items: center;">
 							<span>年级</span>
 							<span>年级</span>
 							<el-checkbox :indeterminate="graisInde" v-model="gracheckAll" @change="handleCheckAllChange">全选</el-checkbox>
 							<el-checkbox :indeterminate="graisInde" v-model="gracheckAll" @change="handleCheckAllChange">全选</el-checkbox>
+							<el-button size="mini" type="primary" @click="addCustomGrade">添加年级</el-button>
 						</div>
 						</div>
-						<div>
+						<div style="max-height: 300px;overflow-y: auto;">
 							<el-checkbox-group v-model="checkedGra" @change="hangraChange">
 							<el-checkbox-group v-model="checkedGra" @change="hangraChange">
-								<el-checkbox v-for="city in gralist" :label="city" :key="city">{{city}}</el-checkbox>
+								<div v-for="(item, index) in gralist" :key="item.id" style="display: flex;align-items: center;margin-bottom: 8px;padding: 5px;border-radius: 4px;transition: background-color 0.3s;" 
+									@mouseenter="$event.currentTarget.style.backgroundColor='#f5f7fa'" 
+									@mouseleave="$event.currentTarget.style.backgroundColor='transparent'">
+									<el-checkbox :label="item.name" style="flex: 1;">{{item.name}}</el-checkbox>
+									<el-button 
+										size="mini" 
+										type="text" 
+										icon="el-icon-edit" 
+										@click="editCustomGrade(index)"
+										style="padding: 5px;margin-left: 5px;color: #409EFF;"
+										title="编辑">
+									</el-button>
+									<el-button 
+										size="mini" 
+										type="text" 
+										icon="el-icon-delete" 
+										@click="deleteCustomGrade(index)"
+										style="padding: 5px;margin-left: 2px;color: #f56c6c;"
+										title="删除">
+									</el-button>
+								</div>
 							</el-checkbox-group>
 							</el-checkbox-group>
 						</div>
 						</div>
-					</div> -->
+					</div> 
 				</form>
 				</form>
 			</div>
 			</div>
 			<!-- 按钮区域 -->
 			<!-- 按钮区域 -->
@@ -621,7 +642,14 @@
 					</template>
 					</template>
 				</el-table-column>
 				</el-table-column>
 			</el-table>
 			</el-table>
-		
+			<el-pagination
+				:current-page="grapage"
+				:page-size="gradePageSize"
+				:total="addGradeTotal"
+				@current-change="nextGradePage"
+				layout="total,prev, pager, next"
+				style="margin-top: 10px;text-align: right;">
+			</el-pagination>
         </el-dialog>
         </el-dialog>
 		<el-dialog
 		<el-dialog
             :title="`${isaddGra ? '修改' : '添加'}年级`"
             :title="`${isaddGra ? '修改' : '添加'}年级`"
@@ -649,7 +677,7 @@ import { addOp,addCommunity,
     getcylist,updateCommunity,
     getcylist,updateCommunity,
     getAddcyPersonlist,updateCommunityperson,
     getAddcyPersonlist,updateCommunityperson,
     getcypersonlist,delCommunity,updateCyOP } from "@/api/user";
     getcypersonlist,delCommunity,updateCyOP } from "@/api/user";
-import { insert_school3New,insertGrade,selectGrade,updateGrade } from "@/api/user.js";
+import { insert_school3New,insertGrade,selectGrade,updateGrade,deleteGrade } from "@/api/user.js";
 
 
 import { API_CONFIG } from "@/common/apiConfig";
 import { API_CONFIG } from "@/common/apiConfig";
 import { mapGetters } from "vuex";
 import { mapGetters } from "vuex";
@@ -661,11 +689,71 @@ export default {
 	},
 	},
 	data() {
 	data() {
 		return {
 		return {
+			add_school_dialog_loading:false,
             addcyPerloading:false,
             addcyPerloading:false,
-
-			gracheckAll: false,
-			checkedGra: [],
-			gralist: ['一年级','二年级','三年级','四年级','五年级','六年级','七年级','八年级','九年级','高一','高二','高三'],
+			gradePageSize: 10,
+			addGradePageSize: 10,
+			addGradeTotal: 0,
+			gracheckAll: true,
+			checkedGra: ['一年级','二年级','三年级','四年级','五年级','六年级','七年级','八年级','九年级','高一','高二','高三'],
+			gralist: [
+				{id: 1, name: '一年级'},
+				{id: 2, name: '二年级'},
+				{id: 3, name: '三年级'},
+				{id: 4, name: '四年级'},
+				{id: 5, name: '五年级'},
+				{id: 6, name: '六年级'},
+				{id: 7, name: '七年级'},
+				{id: 8, name: '八年级'},
+				{id: 9, name: '九年级'},
+				{id: 10, name: '高一'},
+				{id: 11, name: '高二'},
+				{id: 12, name: '高三'}
+			],
+			gralistcn: [
+				{id: 1, name: '一年级'},
+				{id: 2, name: '二年级'},
+				{id: 3, name: '三年级'},
+				{id: 4, name: '四年级'},
+				{id: 5, name: '五年级'},
+				{id: 6, name: '六年级'},
+				{id: 7, name: '七年级'},
+				{id: 8, name: '八年级'},
+				{id: 9, name: '九年级'},
+				{id: 10, name: '高一'},
+				{id: 11, name: '高二'},
+				{id: 12, name: '高三'}
+			],
+			gralistcom:[
+				{id: 1, name: 'Grade 1'},
+				{id: 2, name: 'Grade 2'},
+				{id: 3, name: 'Grade 3'},
+				{id: 4, name: 'Grade 4'},
+				{id: 5, name: 'Grade 5'},
+				{id: 6, name: 'Grade 6'},
+				{id: 7, name: 'Grade 7'},
+				{id: 8, name: 'Grade 8'},
+				{id: 9, name: 'Grade 9'},
+				{id: 10, name: 'Grade 10'},
+				{id: 11, name: 'Grade 11'},
+				{id: 12, name: 'Grade 12'}
+			],
+			gralisthk:[
+				{id: 1, name: '小一'},
+				{id: 2, name: '小二'},
+				{id: 3, name: '小三'},
+				{id: 4, name: '小四'},
+				{id: 5, name: '小五'},
+				{id: 6, name: '小六'},
+				{id: 7, name: '中一'},
+				{id: 8, name: '中二'},
+				{id: 9, name: '中三'},
+				{id: 10, name: '中四'},
+				{id: 11, name: '中五'},
+				{id: 12, name: '中六'}
+			],
+			editingGradeIndex: -1, // 正在编辑的年级索引
+			editingGradeName: '', // 正在编辑的年级名称
 			graisInde: false, //年级全选按钮
 			graisInde: false, //年级全选按钮
 			gradia:false,
 			gradia:false,
 			addgradia:false,
 			addgradia:false,
@@ -758,6 +846,139 @@ export default {
 		};
 		};
 	},
 	},
 	methods: {
 	methods: {
+		addnewsch(){
+			this.add_school_dialog = true
+			this.gralist = JSON.parse(JSON.stringify(this.gralistcn));
+			// 默认全选所有年级
+			this.checkedGra = ['一年级','二年级','三年级','四年级','五年级','六年级','七年级','八年级','九年级','高一','高二','高三'];
+		},
+		changeRegionC(value){
+			console.log('value',value);
+			if(value == 'cn'){
+				this.gralist = JSON.parse(JSON.stringify(this.gralistcn));
+				// 默认全选所有年级
+				this.checkedGra = ['一年级','二年级','三年级','四年级','五年级','六年级','七年级','八年级','九年级','高一','高二','高三'];
+			}else if(value == 'hk'){
+				this.gralist = JSON.parse(JSON.stringify(this.gralisthk));
+				// 默认全选所有年级
+				this.checkedGra = ['小一','小二','小三','小四','小五','小六','中一','中二','中三','中四','中五','中六'];
+			}else{
+				this.gralist = JSON.parse(JSON.stringify(this.gralistcom));
+				// 默认全选所有年级
+				this.checkedGra = ['Grade 1','Grade 2','Grade 3','Grade 4','Grade 5','Grade 6','Grade 7','Grade 8','Grade 9','Grade 10','Grade 11','Grade 12'];
+			}
+			this.gracheckAll = true;
+			this.graisInde = false;
+		},
+		// 添加自定义年级
+		addCustomGrade(){
+			this.$prompt('请输入年级名称', '添加年级', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				inputPattern: /.+/,
+				inputErrorMessage: '年级名称不能为空'
+			}).then(({ value }) => {
+				if(this.gralist.some(item => item.name === value)){
+					this.$message.warning('该年级已存在');
+					return;
+				}
+				const newId = Math.max(...this.gralist.map(item => item.id), 0) + 1;
+				this.gralist.push({id: newId, name: value});
+				this.$message.success('添加成功');
+			}).catch(() => {});
+		},
+		// 编辑自定义年级
+		editCustomGrade(index){
+			const grade = this.gralist[index];
+			this.$prompt('请输入年级名称', '修改年级', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				inputValue: grade.name,
+				inputPattern: /.+/,
+				inputErrorMessage: '年级名称不能为空'
+			}).then(({ value }) => {
+				if(this.gralist.some((item, idx) => item.name === value && idx !== index)){
+					this.$message.warning('该年级已存在');
+					return;
+				}
+				// 如果该年级已被选中,需要更新选中列表
+				const oldName = grade.name;
+				if(this.checkedGra.includes(oldName)){
+					const checkedIndex = this.checkedGra.indexOf(oldName);
+					this.checkedGra.splice(checkedIndex, 1, value);
+				}
+				grade.name = value;
+				this.$message.success('修改成功');
+			}).catch(() => {});
+		},
+		// 删除自定义年级
+		deleteCustomGrade(index){
+			const grade = this.gralist[index];
+			this.$confirm(`确定删除年级"${grade.name}"吗?`, '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				// 如果该年级已被选中,需要从选中列表中移除
+				if(this.checkedGra.includes(grade.name)){
+					const checkedIndex = this.checkedGra.indexOf(grade.name);
+					this.checkedGra.splice(checkedIndex, 1);
+				}
+				this.gralist.splice(index, 1);
+				this.$message.success('删除成功');
+			}).catch(() => {});
+		},
+		time() {
+			if (!this.now) {
+				this.now = new Date().getTime();
+				return true;
+			} else {
+				let time = new Date().getTime();
+				if (time - this.now > 3000) {
+				this.now = time;
+					return true;
+				} else {
+					return false;
+				}
+			}
+		},
+		//删除年级
+		delGra(id){
+			let params = {
+				id: id,
+			};
+			console.log('params',params);
+			
+			if (this.time()) {
+				this.$confirm("确定删除此年级吗?", "提示", {
+				confirmButtonText: "确定",
+				cancelButtonText: "取消",
+				type: "warning",
+				})
+				.then(() => {
+				deleteGrade(params)
+					.then(() => {
+						this.$message({
+							message: "删除成功",
+							type: "success",
+						});
+						if (this.grapage != 1 && this.gratab.length == 1) {
+							this.grapage -= 1;
+						}
+						this.opengradia(this.graoid);
+					})
+					.catch((err) => {
+						this.$message.error("删除失败");
+						console.error(err);
+					});
+				})
+				.catch(() => { });
+			}
+		},
+		nextGradePage(page) {
+			this.grapage = page;
+			this.opengradia(this.graoid);
+		},
 		graopt(val,data){
 		graopt(val,data){
 			this.isaddGra = val;
 			this.isaddGra = val;
 			if (data && data.id) {
 			if (data && data.id) {
@@ -818,7 +1039,7 @@ export default {
 			console.log('params',params);
 			console.log('params',params);
 			selectGrade(params)
 			selectGrade(params)
 				.then(async (res) => {
 				.then(async (res) => {
-					this.gratotal = res.data[0].length > 0 ? res.data[0][0].num : 0;
+					this.addGradeTotal = res.data[0].length > 0 ? res.data[0][0].num : 0;
 					this.gratab = res.data[0];
 					this.gratab = res.data[0];
 					this.graloading = false;
 					this.graloading = false;
 				})
 				})
@@ -829,7 +1050,7 @@ export default {
 		},
 		},
 		// 添加年级
 		// 添加年级
 		handleCheckAllChange(val) {
 		handleCheckAllChange(val) {
-			this.checkedGra = val ? this.gralist : [];
+			this.checkedGra = val ? this.gralist.map(item => item.name) : [];
 			this.graisInde = false;
 			this.graisInde = false;
 		},
 		},
 		hangraChange(value) {
 		hangraChange(value) {
@@ -845,26 +1066,33 @@ export default {
 				children: []
 				children: []
 			})
 			})
 		},
 		},
-		async batchInstgra(oid){
-			let kk = []
-			for (let index = 0; index < this.checkedGra.length; index++) {
-				setTimeout(async () => {
-					kk.push(await this.insertGradeL(this.checkedGra[index],oid))
-				}, 500);
+	async batchInstgra(oid){
+		let kk = []
+		for (let index = 0; index < this.checkedGra.length; index++) {
+			try {
+				const result = await this.insertGradeL(this.checkedGra[index], oid);
+				kk.push(result);
+				// console.log('result',result);
+				console.log('kk',kk);
+			} catch (error) {
+				kk.push(0);
 			}
 			}
-			Promise.all(kk)
-				.then(() => {
-					this.checkedGra = [];
-					if (kk.indexOf(0) != -1) {
-						this.$message.error('年级未全部添加成功')
-					}else{
-						this.$message.success('年级添加成功')
-					}
-				})
-				.catch((e) => {
-					console.log("👉", e);
-				});
-		},
+			// 如果不是最后一个,等待1秒再执行下一个
+			if (index < this.checkedGra.length - 1) {
+				await new Promise(resolve => setTimeout(resolve, 500));
+			}
+		}
+		this.checkedGra = [];
+		if (kk.indexOf(0) != -1) {
+			this.add_school_dialog = false;
+			this.add_school_dialog_loading = false;
+			this.$message.error('年级未全部添加成功')
+		}else{
+			this.add_school_dialog = false;
+			this.add_school_dialog_loading = false;
+			this.$message.success('年级添加成功')
+		}
+	},
 		//新增年级
 		//新增年级
 		insertGradeL(val,oid) {
 		insertGradeL(val,oid) {
 			return new Promise((resolve, reject) => {
 			return new Promise((resolve, reject) => {
@@ -883,12 +1111,12 @@ export default {
 						});
 						});
 						reject(0)
 						reject(0)
 					} else {
 					} else {
-						if (this.graoid) {
+						if (this.addgradia) {
 							this.$message({
 							this.$message({
 								message: "年级添加成功!",
 								message: "年级添加成功!",
 								type: "success",
 								type: "success",
 							});
 							});
-							this.addgradia = false;
+							// this.addgradia = false;
 							this.opengradia(this.graoid);
 							this.opengradia(this.graoid);
 						}
 						}
 						resolve(1)
 						resolve(1)
@@ -1007,6 +1235,25 @@ export default {
 		},
 		},
 		close_add_school() {
 		close_add_school() {
 			this.add_school_dialog = false;
 			this.add_school_dialog = false;
+			// 重置年级列表为默认值
+			this.gralist = [
+				{id: 1, name: '一年级'},
+				{id: 2, name: '二年级'},
+				{id: 3, name: '三年级'},
+				{id: 4, name: '四年级'},
+				{id: 5, name: '五年级'},
+				{id: 6, name: '六年级'},
+				{id: 7, name: '七年级'},
+				{id: 8, name: '八年级'},
+				{id: 9, name: '九年级'},
+				{id: 10, name: '高一'},
+				{id: 11, name: '高二'},
+				{id: 12, name: '高三'}
+			];
+			// 默认全选所有年级
+			this.checkedGra = ['一年级','二年级','三年级','四年级','五年级','六年级','七年级','八年级','九年级','高一','高二','高三'];
+			this.gracheckAll = true;
+			this.graisInde = false;
 		},
 		},
 		close_add_school2() {
 		close_add_school2() {
 			this.add_school_dialog2 = false;
 			this.add_school_dialog2 = false;
@@ -1052,7 +1299,7 @@ export default {
 				return;
 				return;
 			}
 			}
 			if (this.schoolCode2 && this.schoolCode2.length && this.schoolCode2.length != 4) return this.$message.error("随机码须4位数");
 			if (this.schoolCode2 && this.schoolCode2.length && this.schoolCode2.length != 4) return this.$message.error("随机码须4位数");
-
+			this.add_school_dialog_loading = true;
 			// 构建请求参数
 			// 构建请求参数
 			let params = 
 			let params = 
 				{
 				{
@@ -1078,15 +1325,19 @@ export default {
 								type: "error",
 								type: "error",
 								message: "该学校已存在,请重新选择!",
 								message: "该学校已存在,请重新选择!",
 							});
 							});
+							this.add_school_dialog_loading = false;
 							return;
 							return;
 						} else {
 						} else {
 							this.$message({
 							this.$message({
 								type: "success",
 								type: "success",
 								message: "学校添加成功!",
 								message: "学校添加成功!",
 							});
 							});
-							// if (this.checkedGra.length) {
-							// 	this.batchInstgra(res.data[0][0].insertId)
-							// }
+							if (this.checkedGra.length) {
+								this.batchInstgra(res.data[0][0].insertId)
+							}else{
+								this.add_school_dialog = false;
+								this.add_school_dialog_loading = false;
+							}
 							await addOp({
 							await addOp({
 								uid: this.userid,
 								uid: this.userid,
 								cid: "",
 								cid: "",
@@ -1096,11 +1347,11 @@ export default {
 						}
 						}
 					} else {
 					} else {
 						this.$message.error("插入失败,未返回有效结果");
 						this.$message.error("插入失败,未返回有效结果");
+						this.add_school_dialog_loading = false;
 					}
 					}
 					// 刷新学校列表
 					// 刷新学校列表
 					this.getSchool();
 					this.getSchool();
 					// 关闭弹窗
 					// 关闭弹窗
-					this.add_school_dialog = false;
 					// 清空输入框、下拉菜单选择和单选框
 					// 清空输入框、下拉菜单选择和单选框
 					this.sch_name = ""; // 清空学校名称
 					this.sch_name = ""; // 清空学校名称
 					this.school.parentOrgId = ""; // 清空组织选择
 					this.school.parentOrgId = ""; // 清空组织选择