Explorar el Código

Merge branch '黑龙江艺术高中职' of http://8.141.155.183:3000/bjquanjiang/DigitalScholl into 黑龙江艺术高中职

黑龙江艺术高中职
ndbs hace 5 meses
padre
commit
2bec71b76b
Se han modificado 17 ficheros con 16232 adiciones y 146 borrados
  1. +95
    -42
      Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Controllers/ArrangeLessonTermAttemperController.cs
  2. +2
    -2
      Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/ArrangeLessonTerm/coursestatictis.cshtml
  3. +1
    -1
      Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/ArrangeLessonTermAttemper/Form.cshtml
  4. +75
    -48
      Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/ArrangeLessonTermAttemper/Form.js
  5. +5
    -3
      Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/ArrangeLessonTermAttemper/FormView.cshtml
  6. +175
    -6
      Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/ArrangeLessonTermAttemper/FormView.js
  7. +1
    -1
      Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/ArrangeLessonTermAttemper/Index.js
  8. +72
    -0
      Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/PersonnelManagement/Controllers/TimeTableController.cs
  9. +32
    -11
      Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/PersonnelManagement/Views/TimeTable/IndexInEducationSelect.js
  10. BIN
      Learun.Framework.Ultimate V7/Learun.Application.Web/Content/elementui/fonts/element-icons.ttf
  11. BIN
      Learun.Framework.Ultimate V7/Learun.Application.Web/Content/elementui/fonts/element-icons.woff
  12. +15731
    -0
      Learun.Framework.Ultimate V7/Learun.Application.Web/Content/elementui/index.css
  13. +1
    -0
      Learun.Framework.Ultimate V7/Learun.Application.Web/Content/elementui/index.js
  14. +5
    -0
      Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/ArrangeLessonTermAttemper/ArrangeLessonTermAttemperEntity.cs
  15. +3
    -0
      Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/ArrangeLessonTermAttemper/ArrangeLessonTermAttemperService.cs
  16. +2
    -2
      Learun.Framework.Ultimate V7/LearunApp-2.2.0/common/wxFn.js
  17. +32
    -30
      Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/AttendanceCard/list.vue

+ 95
- 42
Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Controllers/ArrangeLessonTermAttemperController.cs Ver fichero

@@ -139,55 +139,108 @@ namespace Learun.Application.Web.Areas.EducationalAdministration.Controllers
[AjaxOnly]
public ActionResult SaveForm(string keyValue, string strEntity)
{
//[{"AttemperId":"3ec8df23-c045-428c-b37c-c370b73f53ef","Day":"5","LessonTime":"53","LessonDate":"2024-03-08","SchooldId":"207fa1a9-160c-4943-a89b-8fa4db0547ce","Academicyear":"23-24","Semester":"2","DeptNo":"01","Deptname":"","MajorNo":"GZ13","LessonNo":"GZ1303001","Curriculum":"爵士舞","TeachClassNo":"G2201010303","ClassName":"22高职男班(舞蹈表演)","Empno":"2224","Teacher":"魏志勇","ClassRoomNo":"3102","ClassRoom":"舞蹈楼102","LessonSortNo":"1"},{"AttemperId":"e4970ebb-1af5-4298-b03c-f8014e1adb06","Day":"5","LessonTime":"53","LessonDate":"2024-03-08","SchooldId":"207fa1a9-160c-4943-a89b-8fa4db0547ce","Academicyear":"23-24","Semester":"2","DeptNo":"01","Deptname":"","MajorNo":"GZ13","LessonNo":"GZ1302005","Curriculum":"中国古典舞身韵","TeachClassNo":"G2201010303","ClassName":"22高职男班(舞蹈表演)","Empno":"5526","Teacher":"焦晓天","ClassRoomNo":"3102","ClassRoom":"舞蹈楼102","LessonSortNo":"1"}]
//"CreateUserId":"System","CreateUserName":"超级管理员","CreateTime":"2024-06-25 13:14:35","AttemperType":"02","AttemperTimeType":"","NewAcademicYearNo":"","NewSemester":"","NewDeptNo":"","NewMajorNo":"","NewLessonNo":"","NewTeachClassNo":"","NewEmpNo":"","NewClassroomNo":"","AttemperStartTime":"","AttemperEndTime":"","AttemperRemark":"22"
JObject jo = (JObject)JsonConvert.DeserializeObject(strEntity);
ArrangeLessonTermAttemperEntity entity = strEntity.ToObject<ArrangeLessonTermAttemperEntity>();
if (entity.AttemperType == "03")
if (entity.AttemperType == "01")
{
//if (entity.F_SchoolId != entity.NewF_SchoolId || entity.AcademicYearNo != entity.NewAcademicYearNo || entity.Semester != entity.NewSemester)
if (entity.AcademicYearNo != entity.NewAcademicYearNo || entity.Semester != entity.NewSemester)
{
return Fail("校区、学年、学期不一致!");
}
//调课
}
if (entity.AttemperType=="04")
else if (entity.AttemperType == "02")
{
JObject jo = (JObject)JsonConvert.DeserializeObject(strEntity);
List<ArrangeLessonTermAttrmperChildEntity> query = new List<ArrangeLessonTermAttrmperChildEntity>();
string[] targetjieci = jo["tardata"]["targetjieci"].ToString().TrimEnd(';').Split(';');
string targettime = jo["tardata"]["targettime"].ToString();
string lastdata = "";
int i = 0;
int index = 0;
foreach (var item in jo["predata"])
{
//index++;
if (string.IsNullOrEmpty(lastdata) || lastdata != item["LessonTime"].ToString())
{
lastdata = item["LessonTime"].ToString();
if ( index >= jo["predata"].Count()/2)
{
i++;
}
}
DateTime NewLessonDate = Convert.ToDateTime(jo["tardata"]["targettime"].ToString());
string newlessontime = Convert.ToInt32(NewLessonDate.DayOfWeek).ToString()+ targetjieci[i].Replace("节","");
ArrangeLessonTermAttrmperChildEntity term = new ArrangeLessonTermAttrmperChildEntity
{
LessonId = !string.IsNullOrEmpty(keyValue) ? item["LessonId"].ToString(): item["AltId"].ToString(),
LessonDate = Convert.ToDateTime(item["LessonDate"].ToString()),
LessonTime = item["LessonTime"].ToString(),
NewLessonDate =NewLessonDate ,
NewLessonTime = newlessontime
};
query.Add(term);
index++;
}
entity.query = query;
//停课

}
else if (entity.AttemperType == "03")
{
//换课

}
#region 旧逻辑
//if (entity.AttemperType == "03")
//{
// //if (entity.F_SchoolId != entity.NewF_SchoolId || entity.AcademicYearNo != entity.NewAcademicYearNo || entity.Semester != entity.NewSemester)
// if (entity.AcademicYearNo != entity.NewAcademicYearNo || entity.Semester != entity.NewSemester)
// {
// return Fail("校区、学年、学期不一致!");
// }
//}
//if (entity.AttemperType == "04")
//{
// //JObject jo = (JObject)JsonConvert.DeserializeObject(strEntity);
// List<ArrangeLessonTermAttrmperChildEntity> query = new List<ArrangeLessonTermAttrmperChildEntity>();
// string[] targetjieci = jo["tardata"]["targetjieci"].ToString().TrimEnd(';').Split(';');
// string targettime = jo["tardata"]["targettime"].ToString();
// string lastdata = "";
// int i = 0;
// int index = 0;
// foreach (var item in jo["predata"])
// {
// //index++;
// if (string.IsNullOrEmpty(lastdata) || lastdata != item["LessonTime"].ToString())
// {
// lastdata = item["LessonTime"].ToString();
// if (index >= jo["predata"].Count() / 2)
// {
// i++;
// }
// }
// DateTime NewLessonDate = Convert.ToDateTime(jo["tardata"]["targettime"].ToString());
// string newlessontime = Convert.ToInt32(NewLessonDate.DayOfWeek).ToString() + targetjieci[i].Replace("节", "");
// ArrangeLessonTermAttrmperChildEntity term = new ArrangeLessonTermAttrmperChildEntity
// {
// LessonId = !string.IsNullOrEmpty(keyValue) ? item["LessonId"].ToString() : item["AltId"].ToString(),
// LessonDate = Convert.ToDateTime(item["LessonDate"].ToString()),
// LessonTime = item["LessonTime"].ToString(),
// NewLessonDate = NewLessonDate,
// NewLessonTime = newlessontime
// };
// query.Add(term);
// index++;
// }
// entity.query = query;
//}
#endregion

foreach (var item in jo["query"])
{
ArrangeLessonTermAttemperEntity itementity = new ArrangeLessonTermAttemperEntity();
itementity.CreateUserId = entity.CreateUserId;
itementity.CreateUserName = entity.CreateUserName;
itementity.CreateTime = entity.CreateTime;
itementity.AttemperRemark = entity.AttemperRemark;
itementity.AttemperType = entity.AttemperType;//调课类型

itementity.NewAcademicYearNo= entity.NewAcademicYearNo;
itementity.NewSemester = entity.NewSemester;
itementity.NewDeptNo = entity.NewDeptNo;
itementity.NewMajorNo = entity.NewMajorNo;
itementity.NewLessonNo = entity.NewLessonNo;
itementity.NewTeachClassNo = entity.NewTeachClassNo;
itementity.NewEmpNo = entity.NewEmpNo;
itementity.NewClassroomNo = entity.NewClassroomNo;

itementity.AcademicYearNo = item["Academicyear"].ToString();
itementity.Semester = item["Semester"].ToString();
itementity.DeptNo = item["DeptNo"].ToString();
itementity.MajorNo = item["MajorNo"].ToString();
itementity.LessonNo = item["LessonNo"].ToString();
itementity.TeachClassNo = item["TeachClassNo"].ToString();
itementity.EmpNo = item["Empno"].ToString();
itementity.ClassroomNo = item["ClassRoomNo"].ToString();

entity.Status = 0;
entity.CheckStatus = 0;
arrangeLessonTermAttemperIBLL.SaveEntity(keyValue, entity);
itementity.AttemperTimeType = entity.AttemperTimeType;//调度时限

itementity.AttemperStartTime = entity.AttemperStartTime;
itementity.AttemperEndTime = entity.AttemperEndTime;
itementity.Status = 0;
itementity.CheckStatus = 0;
arrangeLessonTermAttemperIBLL.SaveEntity(keyValue, itementity);
}

return Success("保存成功!");
}


+ 2
- 2
Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/ArrangeLessonTerm/coursestatictis.cshtml Ver fichero

@@ -13,8 +13,8 @@
<div class="lr-layout-tool-item">
<div class=" btn-group btn-group-sm">
<script src="~/Content/vue/vue.js"></script>
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<link rel="stylesheet" href="~/Content/elementui/index.css">
<script src="~/Content/elementui/index.js"></script>
<div id="app">
<a id="timeNoCludes" class="btn btn-default" v-on:click="nocludesVisible = true">时间段排除</a>
<el-dialog title="时间段排除"


+ 1
- 1
Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/ArrangeLessonTermAttemper/Form.cshtml Ver fichero

@@ -57,7 +57,7 @@
<div class="lr-form-item-title">校区<font face="宋体">*</font></div>
<div id="F_SchoolId" readonly isvalid="yes" checkexpession="NotNull"></div>
</div>*@
<div id="sourcedata"class="col-xs-12 lr-form-item lr-form-item-grid">
<div id="sourcedata" class="col-xs-12 lr-form-item lr-form-item-grid">
<div id="gridtable2"></div>
@*<div class="col-xs-4 lr-form-item" data-table="ArrangeLessonTermAttemper">
<div class="lr-form-item-title">学年<font face="宋体">*</font></div>


+ 75
- 48
Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/ArrangeLessonTermAttemper/Form.js Ver fichero

@@ -210,10 +210,34 @@ var bootstrap = function ($, learun) {
});
$('#TeachClassNo').lrDataSourceSelect({ code: 'bjsj', value: 'classno', text: 'classname' });
$('#NewTeachClassNo').lrDataSourceSelect({ code: 'bjsj', value: 'classno', text: 'classname' });
$('#EmpNo').lrDataSourceSelect({ code: 'EmpInfo', value: 'empno', text: 'empname' });
$('#NewEmpNo').lrDataSourceSelect({ code: 'EmpInfo', value: 'empno', text: 'empname' });
$('#ClassroomNo').lrDataSourceSelect({ code: 'ClassRoomInfo', value: 'classroomno', text: 'classroomname' });
$('#NewClassroomNo').lrDataSourceSelect({ code: 'ClassRoomInfo', value: 'classroomno', text: 'classroomname' });
$('#EmpNo').lrselect({
allowSearch: true,
url: top.$.rootUrl + '/PersonnelManagement/TimeTable/GetTeacherData',
value: 'value',
text: 'text'
});
//$('#EmpNo').lrDataSourceSelect({ code: 'EmpInfo', value: 'empno', text: 'empname' });
//$('#NewEmpNo').lrDataSourceSelect({ code: 'EmpInfo', value: 'empno', text: 'empname' });
$('#NewEmpNo').lrselect({
allowSearch: true,
url: top.$.rootUrl + '/PersonnelManagement/TimeTable/GetTeacherData',
value: 'value',
text: 'text'
});
//$('#ClassroomNo').lrDataSourceSelect({ code: 'ClassRoomInfo', value: 'classroomno', text: 'classroomname' });
$('#ClassroomNo').lrselect({
allowSearch: true,
url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'ClassRoomInfo',
value: 'classroomno',
text: 'classroomname'
});
//$('#NewClassroomNo').lrDataSourceSelect({ code: 'ClassRoomInfo', value: 'classroomno', text: 'classroomname' });
$('#NewClassroomNo').lrselect({
allowSearch: true,
url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'ClassRoomInfo',
value: 'classroomno',
text: 'classroomname'
});
//调度开始时间
$('#AttemperStartTime').lrselect({ allowSearch: true });
//调度结束时间
@@ -324,10 +348,10 @@ var bootstrap = function ($, learun) {
//{"AltId":"c7c2e0dc-12c5-4742-ba27-f8084fa712eb","day":"2","lessonTime":"21","lessonDate":"2024-06-11","schooldId":"207fa1a9-160c-4943-a89b-8fa4db0547ce","academicyear":"23-24","semester":"2","deptNo":"06","deptname":"","majorNo":"GZ02","lessonNo":"GZ0202999","curriculum":"音乐表演(民族乐器演奏方向)专业主课","teachClassNo":"G2306010301","className":"2301班(器乐系)","empno":"1132","teacher":"吴权喜","classRoomNo":"1012","classRoom":"音乐楼012","lessonSortNo":"1"}
$('#gridtable2').jfGrid({
headData: [
{ label: "学年", name: "academicyear", width: 100, align: "left" },
{ label: "学期", name: "semester", width: 100, align: "left" },
{ label: "学年", name: "Academicyear", width: 100, align: "left" },
{ label: "学期", name: "Semester", width: 100, align: "left" },
{
label: "系部", name: "deptNo", width: 100, align: "left",
label: "系部", name: "DeptNo", width: 100, align: "left",
formatterAsync: function (callback, value, row, op, $cell) {
learun.clientdata.getAsync('custmerData', {
url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdDeptInfo',
@@ -340,7 +364,7 @@ var bootstrap = function ($, learun) {
}
},
{
label: "专业", name: "majorNo", width: 100, align: "left",
label: "专业", name: "MajorNo", width: 100, align: "left",
formatterAsync: function (callback, value, row, op, $cell) {
learun.clientdata.getAsync('custmerData', {
url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdMajorInfo',
@@ -353,7 +377,7 @@ var bootstrap = function ($, learun) {
}
},
{
label: "课程", name: "lessonNo", width: 100, align: "left",
label: "课程", name: "LessonNo", width: 100, align: "left",
formatterAsync: function (callback, value, row, op, $cell) {
learun.clientdata.getAsync('custmerData', {
url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'LessonInfo',
@@ -364,9 +388,9 @@ var bootstrap = function ($, learun) {
}
});
}
},
},
{
label: "班级", name: "teachClassNo", width: 100, align: "left",
label: "班级", name: "TeachClassNo", width: 100, align: "left",
formatterAsync: function (callback, value, row, op, $cell) {
learun.clientdata.getAsync('custmerData', {
url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'bjsj',
@@ -379,7 +403,7 @@ var bootstrap = function ($, learun) {
}
},
{
label: "教师", name: "empno", width: 100, align: "left",
label: "教师", name: "Empno", width: 100, align: "left",
formatterAsync: function (callback, value, row, op, $cell) {
learun.clientdata.getAsync('custmerData', {
url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'EmpInfo',
@@ -392,7 +416,7 @@ var bootstrap = function ($, learun) {
}
},
{
label: "教室", name: "classRoomNo", width: 100, align: "left",
label: "教室", name: "ClassRoomNo", width: 100, align: "left",
formatterAsync: function (callback, value, row, op, $cell) {
learun.clientdata.getAsync('custmerData', {
url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'ClassRoomInfo',
@@ -477,14 +501,14 @@ var bootstrap = function ($, learun) {
bindDataNew = function (temprow) {
if (!!temprow) {
//$('#NewF_SchoolId').lrselectSet(temprow.schooldId);
$('#NewAcademicYearNo').lrselectSet(temprow.academicyear);
$('#NewSemester').lrselectSet(temprow.semester);
$('#NewDeptNo').lrselectSet(temprow.deptNo);
$('#NewMajorNo').lrselectSet(temprow.majorNo);
$('#NewLessonNo').lrselectSet(temprow.lessonNo);
$('#NewTeachClassNo').lrselectSet(temprow.teachClassNo);
$('#NewEmpNo').lrselectSet(temprow.empno);
$('#NewClassroomNo').lrselectSet(temprow.classRoomNo);
$('#NewAcademicYearNo').lrselectSet(temprow[0].Academicyear);
$('#NewSemester').lrselectSet(temprow[0].Semester);
$('#NewDeptNo').lrselectSet(temprow[0].DeptNo);
$('#NewMajorNo').lrselectSet(temprow[0].MajorNo);
$('#NewLessonNo').lrselectSet(temprow[0].LessonNo);
$('#NewTeachClassNo').lrselectSet(temprow[0].TeachClassNo);
$('#NewEmpNo').lrselectSet(temprow[0].Empno);
$('#NewClassroomNo').lrselectSet(temprow[0].ClassRoomNo);
}
};
// 验证数据是否填写完整
@@ -572,28 +596,31 @@ var bootstrap = function ($, learun) {
// 保存数据
save = function (processId, callBack, i) {
var formData = $('body').lrGetFormData();
if (formData.AttemperType == "03") { //对调:校区、学年、学期需要一致
//if (formData.F_SchoolId !== formData.NewF_SchoolId || formData.AcademicYearNo !== formData.NewAcademicYearNo || formData.Semester !== formData.NewSemester) {
if (formData.AcademicYearNo !== formData.NewAcademicYearNo || formData.Semester !== formData.NewSemester) {
learun.alert.warning("校区、学年、学期不一致!");
return false;
}
} else if (formData.AttemperType == "01") { //换课:调度时间比较;教师或教室必填一个;
if ((formData.NewEmpNo == null || formData.NewEmpNo == "") && (formData.NewClassroomNo == null || formData.NewClassroomNo == "")) {
learun.alert.warning("课程新安排中教师或教室不能为空!");
return false;
}
if (formData.AttemperEndTime < formData.AttemperStartTime) {
learun.alert.warning("调度结束时间不能小于调度开始时间!");
return false;
}
} else if (formData.AttemperType == "04") { //调课
if (formData) {
formData.predata = JSON.parse($('#gridtable').attr("data-val"));
formData.tardata = JSON.parse( $('#gridtable1').attr("data-val"));
}
if (false) {
//if (formData.AttemperType == "03") { //对调:校区、学年、学期需要一致
// //if (formData.F_SchoolId !== formData.NewF_SchoolId || formData.AcademicYearNo !== formData.NewAcademicYearNo || formData.Semester !== formData.NewSemester) {
// if (formData.AcademicYearNo !== formData.NewAcademicYearNo || formData.Semester !== formData.NewSemester) {
// learun.alert.warning("校区、学年、学期不一致!");
// return false;
// }
//} else if (formData.AttemperType == "01") { //换课:调度时间比较;教师或教室必填一个;
// if ((formData.NewEmpNo == null || formData.NewEmpNo == "") && (formData.NewClassroomNo == null || formData.NewClassroomNo == "")) {
// learun.alert.warning("课程新安排中教师或教室不能为空!");
// return false;
// }
// if (formData.AttemperEndTime < formData.AttemperStartTime) {
// learun.alert.warning("调度结束时间不能小于调度开始时间!");
// return false;
// }
//} else if (formData.AttemperType == "04") { //调课
// if (formData) {
// formData.predata = JSON.parse($('#gridtable').attr("data-val"));
// formData.tardata = JSON.parse( $('#gridtable1').attr("data-val"));
// }
//}
}

//获取要操作的课程列表
formData.query = $('#gridtable2').jfGridGet('rowdatas');
console.log(formData)
if (!!processId) {
formData.ProcessId = processId;
@@ -601,12 +628,12 @@ var bootstrap = function ($, learun) {
var postData = {
strEntity: JSON.stringify(formData)
};
//$.lrSaveForm(top.$.rootUrl + '/EducationalAdministration/ArrangeLessonTermAttemper/SaveForm?keyValue=' + keyValue, postData, function (res) {
// // 保存成功后才回调
// if (!!callBack) {
// callBack(res, i);
// }
//});
$.lrSaveForm(top.$.rootUrl + '/EducationalAdministration/ArrangeLessonTermAttemper/SaveForm?keyValue=' + keyValue, postData, function (res) {
// 保存成功后才回调
if (!!callBack) {
callBack(res, i);
}
});
};
page.init();
}

+ 5
- 3
Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/ArrangeLessonTermAttemper/FormView.cshtml Ver fichero

@@ -60,8 +60,10 @@
<div class="lr-form-item-title">校区<font face="宋体">*</font></div>
<div id="F_SchoolId" readonly isvalid="yes" checkexpession="NotNull"></div>
</div>*@
<div id="sourcedata">
<div class="col-xs-4 lr-form-item" data-table="ArrangeLessonTermAttemper">
<div id="sourcedata" class="col-xs-12 lr-form-item lr-form-item-grid">

<div id="gridtable2"></div>
@*<div class="col-xs-4 lr-form-item" data-table="ArrangeLessonTermAttemper">
<div class="lr-form-item-title">学年<font face="宋体">*</font></div>
<div id="AcademicYearNo" class="olddata" readonly isvalid="yes" checkexpession="NotNull"></div>
</div>
@@ -92,7 +94,7 @@
<div class="col-xs-4 lr-form-item" data-table="ArrangeLessonTermAttemper">
<div class="lr-form-item-title">教室<font face="宋体">*</font></div>
<div id="ClassroomNo" class="olddata" readonly isvalid="yes" checkexpession="NotNull"></div>
</div>
</div>*@
</div>
<!--表格-->
<div class="col-xs-12 lr-form-item lr-form-item-grid" id="oldgridtable" style="display:none">


+ 175
- 6
Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/ArrangeLessonTermAttemper/FormView.js Ver fichero

@@ -29,6 +29,7 @@ var bootstrap = function ($, learun) {
page.bindSelect();
page.bind();
page.initData();
page.initGird();
},
query: function () {
var p = {};
@@ -184,11 +185,34 @@ var bootstrap = function ($, learun) {
text: 'text',
});
$('#TeachClassNo').lrDataSourceSelect({ code: 'bjsj', value: 'classno', text: 'classname' });
$('#NewTeachClassNo').lrDataSourceSelect({ code: 'bjsj', value: 'classno', text: 'classname' });
$('#EmpNo').lrDataSourceSelect({ code: 'EmpInfo', value: 'empno', text: 'empname' });
$('#NewEmpNo').lrDataSourceSelect({ code: 'EmpInfo', value: 'empno', text: 'empname' });
$('#ClassroomNo').lrDataSourceSelect({ code: 'ClassRoomInfo', value: 'classroomno', text: 'classroomname' });
$('#NewClassroomNo').lrDataSourceSelect({ code: 'ClassRoomInfo', value: 'classroomno', text: 'classroomname' });
$('#NewTeachClassNo').lrDataSourceSelect({ code: 'bjsj', value: 'classno', text: 'classname' }); $('#EmpNo').lrselect({
allowSearch: true,
url: top.$.rootUrl + '/PersonnelManagement/TimeTable/GetTeacherData',
value: 'value',
text: 'text'
});
//$('#EmpNo').lrDataSourceSelect({ code: 'EmpInfo', value: 'empno', text: 'empname' });
//$('#NewEmpNo').lrDataSourceSelect({ code: 'EmpInfo', value: 'empno', text: 'empname' });
$('#NewEmpNo').lrselect({
allowSearch: true,
url: top.$.rootUrl + '/PersonnelManagement/TimeTable/GetTeacherData',
value: 'value',
text: 'text'
});
//$('#ClassroomNo').lrDataSourceSelect({ code: 'ClassRoomInfo', value: 'classroomno', text: 'classroomname' });
$('#ClassroomNo').lrselect({
allowSearch: true,
url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'ClassRoomInfo',
value: 'classroomno',
text: 'classroomname'
});
//$('#NewClassroomNo').lrDataSourceSelect({ code: 'ClassRoomInfo', value: 'classroomno', text: 'classroomname' });
$('#NewClassroomNo').lrselect({
allowSearch: true,
url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'ClassRoomInfo',
value: 'classroomno',
text: 'classroomname'
});
},
initData: function () {
@@ -214,6 +238,19 @@ var bootstrap = function ($, learun) {
$('#NewClassroomNo').siblings('div').html('教室');
$('#NewEmpNo').attr('readonly', 'readonly');
$('#NewClassroomNo').attr('readonly', 'readonly');
//
var tabledata = [{
Id: data[id].Id,
Academicyear: data[id].AcademicYearNo,
Semester: data[id].Semester,
DeptNo: data[id].DeptNo,
MajorNo: data[id].MajorNo,
LessonNo: data[id].LessonNo,
TeachClassNo: data[id].TeachClassNo,
Empno: data[id].EmpNo,
ClassRoomNo: data[id].ClassroomNo
}]
$('#gridtable2').jfGridSet('refreshdata', tabledata);//.attr("data-val", temprow)
if (data[id].AttemperType == "01") {
$('.AttemperTypeTiao').show();
$("#AttemperTimeType").attr("isvalid", "yes");
@@ -286,7 +323,127 @@ var bootstrap = function ($, learun) {
}
});
}
}
},
initGird: function () {
//{"AltId":"c7c2e0dc-12c5-4742-ba27-f8084fa712eb","day":"2","lessonTime":"21","lessonDate":"2024-06-11","schooldId":"207fa1a9-160c-4943-a89b-8fa4db0547ce","academicyear":"23-24","semester":"2","deptNo":"06","deptname":"","majorNo":"GZ02","lessonNo":"GZ0202999","curriculum":"音乐表演(民族乐器演奏方向)专业主课","teachClassNo":"G2306010301","className":"2301班(器乐系)","empno":"1132","teacher":"吴权喜","classRoomNo":"1012","classRoom":"音乐楼012","lessonSortNo":"1"}
$('#gridtable2').jfGrid({
headData: [
{ label: "学年", name: "Academicyear", width: 100, align: "left" },
{ label: "学期", name: "Semester", width: 100, align: "left" },
{
label: "系部", name: "DeptNo", width: 100, align: "left",
formatterAsync: function (callback, value, row, op, $cell) {
learun.clientdata.getAsync('custmerData', {
url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdDeptInfo',
key: value,
keyId: 'deptno',
callback: function (_data) {
callback(_data['deptname']);
}
});
}
},
{
label: "专业", name: "MajorNo", width: 100, align: "left",
formatterAsync: function (callback, value, row, op, $cell) {
learun.clientdata.getAsync('custmerData', {
url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdMajorInfo',
key: value,
keyId: 'majorno',
callback: function (_data) {
callback(_data['majorname']);
}
});
}
},
{
label: "课程", name: "LessonNo", width: 100, align: "left",
formatterAsync: function (callback, value, row, op, $cell) {
learun.clientdata.getAsync('custmerData', {
url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'LessonInfo',
key: value,
keyId: 'lessonno',
callback: function (_data) {
callback(_data['lessonname']);
}
});
}
},
{
label: "班级", name: "TeachClassNo", width: 100, align: "left",
formatterAsync: function (callback, value, row, op, $cell) {
learun.clientdata.getAsync('custmerData', {
url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'bjsj',
key: value,
keyId: 'classno',
callback: function (_data) {
callback(_data['classname']);
}
});
}
},
{
label: "教师", name: "Empno", width: 100, align: "left",
formatterAsync: function (callback, value, row, op, $cell) {
learun.clientdata.getAsync('custmerData', {
url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'EmpInfo',
key: value,
keyId: 'empno',
callback: function (_data) {
callback(_data['empname']);
}
});
}
},
{
label: "教室", name: "ClassRoomNo", width: 100, align: "left",
formatterAsync: function (callback, value, row, op, $cell) {
learun.clientdata.getAsync('custmerData', {
url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'ClassRoomInfo',
key: value,
keyId: 'classroomno',
callback: function (_data) {
callback(_data['classroomname']);
}
});
}
},
],
mainId: 'Id',
isPage: false,
//sord: 'desc',
//sidx: 'CreateTime'
});
//$('#gridtable').jfGrid({
// headData: [
// { label: "日期", name: "time", width: 100, align: "left" },
// { label: "节次", name: "jieci", width: 100, align: "left" },
// { label: "课程", name: "curriculum", width: 100, align: "left" },
// { label: "班级", name: "ClassName", width: 100, align: "left" },
// { label: "教师", name: "EmpName", width: 100, align: "left" },
// { label: "教室", name: "classRoom", width: 100, align: "left" },
// ],
// mainId: 'Id',
// isPage: true,
// sord: 'desc',
// sidx: 'CreateTime'
//});
//$('#gridtable1').jfGrid({
// headData: [
// { label: "日期", name: "time", width: 100, align: "left" },
// { label: "节次", name: "jieci", width: 100, align: "left" },
// { label: "课程", name: "curriculum", width: 100, align: "left" },
// { label: "班级", name: "ClassName", width: 100, align: "left" },
// { label: "教师", name: "EmpName", width: 100, align: "left" },
// { label: "教室", name: "classRoom", width: 100, align: "left" },
// ],
// mainId: 'Id',
// isPage: true,
// sord: 'desc',
// sidx: 'CreateTime'
//});
},
};
bindData = function (temprow) {
if (!!temprow) {
@@ -357,6 +514,18 @@ var bootstrap = function ($, learun) {
$('#NewClassroomNo').siblings('div').html('教室');
$('#NewEmpNo').attr('readonly', 'readonly');
$('#NewClassroomNo').attr('readonly', 'readonly');
var tabledata = [{
Id: data[id].Id,
Academicyear: data[id].AcademicYearNo,
Semester: data[id].Semester,
DeptNo: data[id].DeptNo,
MajorNo: data[id].MajorNo,
LessonNo: data[id].LessonNo,
TeachClassNo: data[id].TeachClassNo,
Empno: data[id].EmpNo,
ClassRoomNo: data[id].ClassroomNo
}]
$('#gridtable2').jfGridSet('refreshdata', tabledata);//.attr("data-val", temprow)
if (data[id].AttemperType == "01") {
$('.AttemperTypeTiao').show();
$("#AttemperTimeType").attr("isvalid", "yes");


+ 1
- 1
Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/ArrangeLessonTermAttemper/Index.js Ver fichero

@@ -102,7 +102,7 @@ var bootstrap = function ($, learun) {
var keyValue = $('#gridtable').jfGridValue('Id');
selectedRow = $('#gridtable').jfGridGet('rowdata');
if (learun.checkrow(keyValue)) {
if (selectedRow.Status !== 0) {
if (selectedRow[0].Status !== 0) {
learun.alert.warning("当前课程异动记录已提交,无法删除!");
return false;
}


+ 72
- 0
Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/PersonnelManagement/Controllers/TimeTableController.cs Ver fichero

@@ -577,6 +577,78 @@ namespace Learun.Application.Web.Areas.PersonnelManagement.Controllers
{ schoolName = "课程表", semester = $"{strAcademicYear}学年度 第{strSemester}学期", weekList = formatData };
return JsonResult(result);
}
/// <summary>
/// 课程表【教务】
/// </summary>
/// <returns></returns>
[HttpGet]
[AjaxOnly]
public ActionResult GetDataInEducationSelect_news(string startTime, string endTime, string classNo, string empNo, string schoolId)
{
var userInfo = LoginUserInfo.Get();
//开始时间
var startdate = string.IsNullOrEmpty(startTime) ? DateTime.Today : Convert.ToDateTime(startTime);
var startDate = Common.CalculateFirstDateOfWeek(startdate).ToString("yyyy-MM-dd");
var endDate = Common.CalculateLastDateOfWeek(startdate).ToString("yyyy-MM-dd");

var semesterAndYear = Common.GetSemesterAndYear(startDate);
var strAcademicYear = semesterAndYear.AcademicYearLong;
var strSemester = semesterAndYear.Semester;

var timeTableList = new List<TimeTable>();
//课程表
var data = arrangeLessonTermIBLL.GetTimeTableInEducation(startDate, endDate, classNo, empNo, schoolId, "");
timeTableList.AddRange(data);
//选修课课程表
//var dataOfElective = arrangeLessonTermOfElectiveIBLL.GetTimeTableInEducation(startDate, endDate, classNo, empNo, schoolId);
//timeTableList.AddRange(dataOfElective);

var timeTables = timeTableList.ToList();
var noDataResult = new
{ schoolName = "课程表", semester = $"{strAcademicYear}学年度 第{strSemester}学期", weekList = "" };
if (!timeTables.Any())
{
return JsonResult(noDataResult);
}
var formatData = from d in timeTables
let tt = d.LessonTime.Substring(1)
group d by tt into g
orderby g.Key
select new
{
time = g.Key,
list = from e in timeTables
let ee = e.LessonTime.Substring(1)
where ee == g.Key
select new
{
AttemperId = e.AltId,
Day = e.LessonTime.ToCharArray()[0],
LessonTime = e.LessonTime,
LessonDate = e.LessonDate.ToString("yyyy-MM-dd"),
SchooldId = e?.F_SchoolId,
Academicyear = semesterAndYear.AcademicYearShort,
Semester = strSemester,
DeptNo = e?.DeptNo,
Deptname = "",
MajorNo = e?.MajorNo,
LessonNo = e?.LessonNo,
Curriculum = e.LessonSortNo == "2" ? e.LessonName + "[选修]" : e.LessonName,
TeachClassNo = e?.TeachClassNo,
ClassName = string.IsNullOrEmpty(e.ClassName) ? "" : e.ClassName,
Empno = e?.EmpNo,
Teacher = e?.EmpName,
ClassRoomNo = string.IsNullOrEmpty(e.ClassRoomNo) ? "" : e.ClassRoomNo.Trim(),
ClassRoom = string.IsNullOrEmpty(e.ClassroomName) ? "" : e.ClassroomName.Trim(),
LessonSortNo = e.LessonSortNo
}
}
;

var result = new
{ schoolName = "课程表", semester = $"{strAcademicYear}学年度 第{strSemester}学期", weekList = formatData };
return JsonResult(result);
}

/// <summary>
/// 课程表【教务】--班级下拉框信息


+ 32
- 11
Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/PersonnelManagement/Views/TimeTable/IndexInEducationSelect.js Ver fichero

@@ -10,7 +10,7 @@ var bootstrap = function ($, learun) {
page.bindSelect();
},
loadData: function (param) {
$.lrSetFormWithParam(top.$.rootUrl + '/PersonnelManagement/TimeTable/GetDataInEducationSelect', param,
$.lrSetFormWithParam(top.$.rootUrl + '/PersonnelManagement/TimeTable/GetDataInEducationSelect_news', param,
function (data) {
// 数据处理
var html = '';
@@ -30,7 +30,7 @@ var bootstrap = function ($, learun) {
})(i); //调用时参数
}
$('.personT').text(data.schoolName);
$('.perSemester').text(data.semester);
$('.perSemester').text(data.Semester);
$('.perFestivalsBox table').html(html);

function flogs(num, data, obj) {
@@ -70,7 +70,7 @@ var bootstrap = function ($, learun) {
for (var k = 1; k < 8; k++) {
(function (arg) {
var args = arg - 1;
var datas = flogs2(arg, lists, 'day');
var datas = flogs2(arg, lists, 'Day');
if (datas.length > 0) {
html += '<td class="active">';
$.each(datas, function (i, item) {
@@ -78,16 +78,16 @@ var bootstrap = function ($, learun) {
html += '<hr>';
}
html += "<div class='box' data-val='" + JSON.stringify(item) + "'><div>课程:" +
item.curriculum +
item.Curriculum +
"</div>" +
"<div>教师:" +
item.teacher +
item.Teacher +
"</div>" +
"<div>班级:" +
item.className +
item.ClassName +
"</div>" +
"<div>教室:" +
item.classRoom +
item.ClassRoom +
"</div></div>";
});
html += '</td>';
@@ -160,11 +160,32 @@ var bootstrap = function ($, learun) {
//点击课程表内容
$('.perFestivalsBox').on('click', 'td.active div.box', function () {
var box = $(this);
//$('.perFestivalsBox').find('div.box.active').removeClass('active');
if (box[0].className.indexOf('active') >= 0) {
box.removeClass('active');
var choosedata = JSON.parse(box[0].getAttribute('data-val'));
$('.perFestivalsBox').find('div.box.active').removeClass('active');
if ($('#ClassNo').lrselectGet() == '' && $('#EmpNo').lrselectGet() == '') {
learun.alert.warning("请选择班级或者教师!");
} else {
box.addClass('active');
//{"AltId":"5b52c7e8-d5f5-4d54-a859-1544b7d62bf6","day":"2","lessonTime":"23","lessonDate":"2024-03-05","schooldId":"207fa1a9-160c-4943-a89b-8fa4db0547ce","academicyear":"23-24","semester":"2","deptNo":"01","deptname":"","majorNo":"GZ13","lessonNo":"GZ1302006","curriculum":"编舞技法基础","teachClassNo":"G2201010303","className":"22高职男班(舞蹈表演)","empno":"5516","teacher":"董东洋","classRoomNo":"1008","classRoom":"教学楼008","lessonSortNo":"1"}
//(1)合班课判断逻辑:同一时间、同一教室、相同教师(1个或多个)、多个班级学生 即为合班课
//(2)选择课程安排可以将所属合班课程同时勾选,教学调度系统流程只需发起一次即可

for (var i = 0; i < box.parent()[0].children.length; i++) {
if (box.parent()[0].children[i].getAttribute('class')) {
if (box.parent()[0].children[i].getAttribute('class').indexOf('box') >= 0) {
console.log(box.parent()[0].children[i].getAttribute('data-val'))
var item = box.parent()[0].children[i];
var itemdata = JSON.parse(item.getAttribute('data-val'));
if (choosedata.ClassRoomNo == itemdata.ClassRoomNo) {
item.setAttribute('class', 'box active')
}
}
}
}
//if (box[0].className.indexOf('active') >= 0) {
// box.removeClass('active');
//} else {
// box.addClass('active');
//}
}
});
},


BIN
Learun.Framework.Ultimate V7/Learun.Application.Web/Content/elementui/fonts/element-icons.ttf Ver fichero


BIN
Learun.Framework.Ultimate V7/Learun.Application.Web/Content/elementui/fonts/element-icons.woff Ver fichero


+ 15731
- 0
Learun.Framework.Ultimate V7/Learun.Application.Web/Content/elementui/index.css
La diferencia del archivo ha sido suprimido porque es demasiado grande
Ver fichero


+ 1
- 0
Learun.Framework.Ultimate V7/Learun.Application.Web/Content/elementui/index.js
La diferencia del archivo ha sido suprimido porque es demasiado grande
Ver fichero


+ 5
- 0
Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/ArrangeLessonTermAttemper/ArrangeLessonTermAttemperEntity.cs Ver fichero

@@ -170,6 +170,11 @@ namespace Learun.Application.TwoDevelopment.EducationalAdministration
/// </summary>
[Column("PROCESSID")]
public string ProcessId { get; set; }
///// <summary>
///// Details
///// </summary>
//[Column("DETAILS")]
//public string Details { get; set; }
#endregion

#region 扩展操作


+ 3
- 0
Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/ArrangeLessonTermAttemper/ArrangeLessonTermAttemperService.cs Ver fichero

@@ -413,6 +413,9 @@ namespace Learun.Application.TwoDevelopment.EducationalAdministration
//StuSelectLessonList
//db.ExecuteBySql($"update StuSelectLessonList set CheckMark='0' where F_SchoolId='{entity.F_SchoolId}' and AcademicYearNo='{entity.AcademicYearNo}' and Semester='{entity.Semester}' and DeptNo='{entity.DeptNo}' and MajorNo='{entity.MajorNo}' and LessonNo='{entity.LessonNo}' and TeachClassNo='{entity.TeachClassNo}' and EmpNo='{entity.EmpNo}' ");
db.ExecuteBySql($"update StuSelectLessonList set CheckMark='0' where AcademicYearNo='{entity.AcademicYearNo}' and Semester='{entity.Semester}' and DeptNo='{entity.DeptNo}' and MajorNo='{entity.MajorNo}' and LessonNo='{entity.LessonNo}' and TeachClassNo='{entity.TeachClassNo}' and EmpNo='{entity.EmpNo}' ");

//ArrangeLessonTerm
//db.ExecuteBySql($"update ArrangeLessonTerm set CheckMark='0' where F_SchoolId='{entity.F_SchoolId}' and AcademicYearNo='{entity.AcademicYearNo}' and Semester='{entity.Semester}' and DeptNo='{entity.DeptNo}' and MajorNo='{entity.MajorNo}' and LessonNo='{entity.LessonNo}' and TeachClassNo like '%{entity.TeachClassNo}%' and EmpNo='{entity.EmpNo}' and ClassroomNo='{entity.ClassroomNo}' ");
}
else if (entity.AttemperType == "03") //对调
{


+ 2
- 2
Learun.Framework.Ultimate V7/LearunApp-2.2.0/common/wxFn.js Ver fichero

@@ -57,7 +57,7 @@ export default {
}
wx.getLocation({
type: "gcj02", // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
success: function(res) {
success: (res) => {
var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
var speed = res.speed; // 速度,以米/每秒计
@@ -67,7 +67,7 @@ export default {
lng:longitude
})
},
fail: function(error) {
fail: (error) => {
this.TOAST("获取定位失败!")
resolve(false)
}


+ 32
- 30
Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/AttendanceCard/list.vue Ver fichero

@@ -108,7 +108,7 @@
methods: {
// 页面初始化
async init() {
this.isInternalNetwork(false)
await this.isInternalNetwork(false)
this.LOADING('加载数据中...')

this.now = this.getCurrentTime()
@@ -178,33 +178,35 @@
AttendanceType:this.info.AttendanceType,
AttendanceTypeString:this.info.AttendanceTypeString,
}
if (![5].includes(this.info.AttendanceType)) {
this.$set(this.info, 'AttendanceType', 4)
this.$set(this.info, 'AttendanceTypeString', '外勤打卡')
this.$set(this.postData, 'AIsOut', 1)
// 获取定位,不是外勤时候改变状态
// if (!window.BMapGL) await this.loadJScript()
if(!window.BMapGL || !BMapGL.Map){
this.TOAST('获取定位资源失败!')
return false
}
this.map = new BMapGL.Map('container');
await this.isFieldPersonnel()
if ([5].includes(this.info.AttendanceType)) return true
this.$set(this.info, 'AttendanceType', 4)
this.$set(this.info, 'AttendanceTypeString', '外勤打卡')
this.$set(this.postData, 'AIsOut', 1)
// 获取定位,不是外勤时候改变状态
// if (!window.BMapGL) await this.loadJScript()
if(!window.BMapGL || !BMapGL.Map){
this.TOAST('获取定位资源失败!')
return false
}
this.map = new BMapGL.Map('container');
await this.isFieldPersonnel()
if(!this.postData.ClockPlace){
return true
}
this.timer1 = setInterval(async ()=>{
if(this.isGetingLocal)return
if(!this.postData.ClockPlace){
return true
clearInterval(this.timer1)
}
this.timer1 = setInterval(async ()=>{
if(this.isGetingLocal)return
if(!this.postData.ClockPlace){
clearInterval(this.timer1)
}
this.isGetingLocal = true
await this.isFieldPersonnel()
// console.log(this.postData)
this.isGetingLocal = false
},3000)
}
this.isGetingLocal = true
await this.isFieldPersonnel()
// console.log(this.postData)
this.isGetingLocal = false
},3000)
return true
},
//返回
@@ -284,7 +286,7 @@
resolve(false)
}
new BMapGL.Convertor().translate([res], 3, 5, data => {
if (data.status == 0) {
if (data&&data.status == 0) {
// alert(data.points[0].lng + '' + data.points[0].lat)
this.$set(this.postData, 'ALon', data.points[0].lng)
this.$set(this.postData, 'ALat', data.points[0].lat)
@@ -304,7 +306,7 @@
this.$set(this.postData, 'ALon', '')
this.$set(this.postData, 'ALat', '')
this.$set(this.postData, 'ClockPlace', '')
this.TOAST('获取定位失败!')
this.TOAST('定位获取失败!')
resolve(false)
}

@@ -322,8 +324,8 @@
},
// 判断是否学校网络
isInternalNetwork(TOAST=true){
this.LOADING()
this.requestBase("https://mp.weixin.qq.com/intp/getuserclientip").then(res=>{
this.LOADING('加载数据中...')
return this.requestBase("https://mp.weixin.qq.com/intp/getuserclientip").then(res=>{
this.HIDE_LOADING()
let res_ = res[1]
let client_ip_start = '1.190.222.'


Cargando…
Cancelar
Guardar