diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/scripts/weixinlogin.js b/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/scripts/weixinlogin.js
index 25040bdd0..e85594037 100644
--- a/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/scripts/weixinlogin.js
+++ b/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/scripts/weixinlogin.js
@@ -1,4 +1,4 @@
-function GetQueryString(name) {
+function GetQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);//search,查询?后面的参数,并匹配正则
if (r != null) return unescape(r[2]); return null;
diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Controllers/StuInfoFreshController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Controllers/StuInfoFreshController.cs
index 2b16551e5..7a7ed688d 100644
--- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Controllers/StuInfoFreshController.cs
+++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Controllers/StuInfoFreshController.cs
@@ -665,7 +665,7 @@ namespace Learun.Application.Web.Areas.EducationalAdministration.Controllers
FinaChargesStandardList = FinaChargesStandardList,
StuInfoFreshFamilyList = stuInfoFreshFamily,
PayFeeTotal = PayFeeTotal,
- YJAmount = FeeOrderList.Sum(x => x.SJAmount)
+ YJAmount = FinaChargesStandardList.Sum(x => x.PayedMoney)
};
return Success(jsonData);
}
@@ -1321,9 +1321,6 @@ namespace Learun.Application.Web.Areas.EducationalAdministration.Controllers
if (!string.IsNullOrEmpty(imgUrl))
{
- // model.PayFeeDetail = entity.PayFeeDetail;
- // model.PayMoney = entity.PayMoney;
- model.LoanMoney = entity.LoanMoney;
model.orderid = orderid;
stuInfoFreshIBLL.SaveFeeData(keyValue, model, list);
}
diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/StuInfoBasic_PayFee/PayFeeForm.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/StuInfoBasic_PayFee/PayFeeForm.js
index 5b3bcea2d..b60c0fd5b 100644
--- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/StuInfoBasic_PayFee/PayFeeForm.js
+++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/StuInfoBasic_PayFee/PayFeeForm.js
@@ -115,6 +115,7 @@ var bootstrap = function ($, learun) {
var detail = "";
var ifisnull = false;
$('.paydetail').each(function (i, item) {
+ $(this).attr('disabled', 'disabled');
var value = 0;
if (!!$(this).val()) {
value = parseFloat($(this).val());
@@ -142,8 +143,6 @@ var bootstrap = function ($, learun) {
param.PayMoney = $('#PayMoney').html();
learun.loading(true, '正在生成付款信息请稍等...');
$("#confirmPayFee").hide();
- console.log(JSON.stringify(param));
- console.log(JSON.stringify(list));
learun.httpAsyncPost(top.$.rootUrl + '/EducationalAdministration/StuInfoBasic_PayFee/PayFeeQRCode?keyValue=' + keyValue, { strEntity: JSON.stringify(param), detailList: JSON.stringify(list) }, function (res) {
learun.loading(false);
$('#qrcodeImg').attr('src', res.info);
diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/StuInfoBasic_PayFee/PayFeeIndex.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/StuInfoBasic_PayFee/PayFeeIndex.js
index 3e35a3640..d81f978cf 100644
--- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/StuInfoBasic_PayFee/PayFeeIndex.js
+++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/StuInfoBasic_PayFee/PayFeeIndex.js
@@ -52,7 +52,7 @@ var bootstrap = function ($, learun) {
title: '二维码缴费',
url: top.$.rootUrl + '/EducationalAdministration/StuInfoBasic_PayFee/PayFeeForm?keyValue=' + keyValue,
width: 800,
- height: 650,
+ height: 690,
btn: null
});
}
@@ -108,7 +108,7 @@ var bootstrap = function ($, learun) {
{
label: "性别", name: "GenderNo", width: 80, align: "left",
formatter: function (cellvalue) {
- return cellvalue == true ? "男" : "女";
+ return cellvalue === true ? "男" : "女";
}
},
{ label: "身份证号", name: "IdentityCardNo", width: 150, align: "left" },
diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/StuInfoFresh/PayFeeForm.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/StuInfoFresh/PayFeeForm.js
index b2e933427..94fcac8ec 100644
--- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/StuInfoFresh/PayFeeForm.js
+++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/StuInfoFresh/PayFeeForm.js
@@ -102,7 +102,7 @@ var bootstrap = function ($, learun) {
$.each(data['FinaChargesStandardList'], function (i, item) {
html += '
' + item.ChargeItemName + ' | ' + item.Standard + '元 | |
';
});
- html += '应缴合计 | ' + data['PayFeeTotal'] + '元 | |
';
+ html += '应缴合计 | ' + data['PayFeeTotal'] + '元 | ' + PayFeeTotal+' |
';
html += ' | |
';
html += '已缴金额 | ' + YJAmount + ' |
';
$('#PayFeeDetail').html(html);
@@ -114,6 +114,7 @@ var bootstrap = function ($, learun) {
var detail = "";
var ifisnull = false;
$('.paydetail').each(function (i, item) {
+ $(this).attr('disabled', 'disabled');
var value = 0;
if (!!$(this).val()) {
value = parseFloat($(this).val());
diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/StuInfoFresh/PayFeeIndex.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/StuInfoFresh/PayFeeIndex.js
index 5378db388..d2e3bcadf 100644
--- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/StuInfoFresh/PayFeeIndex.js
+++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/StuInfoFresh/PayFeeIndex.js
@@ -53,7 +53,7 @@ var bootstrap = function ($, learun) {
title: '二维码缴费',
url: top.$.rootUrl + '/EducationalAdministration/StuInfoFresh/PayFeeForm?keyValue=' + keyValue,
width: 800,
- height: 650,
+ height: 690,
btn: null
});
}
@@ -302,8 +302,14 @@ var bootstrap = function ($, learun) {
{ label: '学号', name: 'StuNo', width: 100, align: "left" },
{ label: '姓名', name: 'StuName', width: 100, align: "left" },
{
- label: '线上缴费状态', name: 'PayFeeStatus', width: 100, align: "left", formatter: function (value) {
- return value == 1 ? "已缴费" : "未缴费";
+ label: '线上缴费状态', name: 'PayFeeStatus', width: 100, align: "left", formatterAsync: function (callback, value, row, op, $cell) {
+ learun.clientdata.getAsync('dataItem', {
+ key: value,
+ code: 'PayStatus',
+ callback: function (_data) {
+ callback(_data.text);
+ }
+ });
}
},
{ label: '线上缴费时间', name: 'PayFeeDate', width: 130, align: "left" },
diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Views/UserCenter/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Views/UserCenter/Index.cshtml
index 650777d0a..067e4e9a1 100644
--- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Views/UserCenter/Index.cshtml
+++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Views/UserCenter/Index.cshtml
@@ -15,14 +15,14 @@
- - 基本信息
+ - 基本信息
@*- 联系方式
*@
- 我的头像
- 修改密码
- 我的日志
@if (ViewBag.UserType == "学生")
{
- - 选修流程
+ @*- 选修流程
*@
}
- 语言设置
@@ -190,6 +190,7 @@
},
filters: {
sex: function (value) {
+ console.log(value);
return value ? "男生" : "女生";
},
@@ -686,7 +687,7 @@
@if (ViewBag.UserType == "学生")
{
-
+ @*
西昌民族幼儿师范高等专科学校
@@ -710,7 +711,7 @@
3、选择课只开放三天,三天后自动关闭选课功能,每门选修课记2个选修学分,如果修不够选修学分将会无法毕业。
-
+
*@
}
@if (ViewBag.UserType == "学生" || ViewBag.UserType == "教师")
@@ -742,8 +743,8 @@
$("#headUrl").attr("src", "/LR_OrganizationModule/User/GetImg?userId=" + loginInfo.userId);
if ('@ViewBag.UserType' == '学生') {
- $("#lr_left_list").children('li').eq(4).addClass("active");
- $('.lr-layout-wrap-item').eq(5).addClass("active");
+ $("#lr_left_list").children('li').eq(0).addClass("active");
+ $('.lr-layout-wrap-item').eq(0).addClass("active");
} else {
$("#lr_left_list").children('li').eq(0).addClass("active");
diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/system.config b/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/system.config
index e17755adc..26ba167ed 100644
--- a/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/system.config
+++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/system.config
@@ -154,7 +154,7 @@
-
+
diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj
index b15e9bd60..9d30b0df7 100644
--- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj
+++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj
@@ -156,6 +156,9 @@
+
+ ..\packages\ThoughtWorks.QRCode.1.1.0\lib\ThoughtWorks.QRCode.dll
+
..\packages\WebGrease.1.5.2\lib\WebGrease.dll
@@ -192,6 +195,8 @@
+
+
diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/AnnexesApiWx.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/AnnexesApiWx.cs
index 4795d3d47..8d754269b 100644
--- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/AnnexesApiWx.cs
+++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/AnnexesApiWx.cs
@@ -7,136 +7,135 @@ using System.IO;
namespace Learun.Application.WebApi.Modules
{
- public class AnnexesApiWx : BaseApi
- {
- public AnnexesApiWx()
- : base("/learun/adms/annexes")
+ public class AnnexesApiWx : BaseApi
{
- Get["/wxlist"] = WxGetList;
- Get["/wxdown"] = WxDownload;
- Get["/wxfileinfo"] = WxFileInfo;
- Post["/wxupload"] = WxUpload;
- Post["/wxdelete"] = WxDeleteFile;
+ public AnnexesApiWx()
+ : base("/learun/adms/annexes")
+ {
+ Get["/wxlist"] = WxGetList;
+ Get["/wxdown"] = WxDownload;
+ Get["/wxfileinfo"] = WxFileInfo;
+ Post["/wxupload"] = WxUpload;
+ Post["/wxdelete"] = WxDeleteFile;
+ }
+ private AnnexesFileIBLL annexesFileIBLL = new AnnexesFileBLL();
+
+ ///
+ /// 获取附件列表
+ ///
+ ///
+ ///
+ public Response WxGetList(dynamic _)
+ {
+ var keyValue = this.GetReqData();
+ var list = annexesFileIBLL.GetList(keyValue);
+
+ return Success(list);
+ }
+
+ ///
+ /// 上传附件图片文件
+ ///
+ ///
+ public Response WxUpload(dynamic _)
+ {
+ var files = (List)this.Context.Request.Files;
+ string folderId = Request.Form["folderId"];
+ string filePath = Config.GetValue("AnnexesFile");
+ string uploadDate = DateTime.Now.ToString("yyyyMMdd");
+ string fileEextension = Path.GetExtension(files[0].Name);
+ string fileType = fileEextension.Replace(".", "");
+ string fileGuid = Guid.NewGuid().ToString();
+
+ string virtualPath = string.Format("{0}/{1}/{2}/{3}{4}", filePath, userInfo.userId, uploadDate, fileGuid, fileEextension);
+
+ //创建文件夹
+ string path = Path.GetDirectoryName(virtualPath);
+ Directory.CreateDirectory(path);
+ AnnexesFileEntity fileAnnexesEntity = new AnnexesFileEntity();
+ if (!System.IO.File.Exists(virtualPath))
+ {
+ byte[] bytes = new byte[files[0].Value.Length];
+ files[0].Value.Read(bytes, 0, bytes.Length);
+ FileInfo file = new FileInfo(virtualPath);
+ FileStream fs = file.Create();
+ fs.Write(bytes, 0, bytes.Length);
+ fs.Close();
+
+ //文件信息写入数据库
+ fileAnnexesEntity.F_Id = fileGuid;
+ fileAnnexesEntity.F_FileName = files[0].Name;
+ fileAnnexesEntity.F_FilePath = virtualPath;
+ fileAnnexesEntity.F_FileSize = files[0].Value.Length.ToString();
+ fileAnnexesEntity.F_FileExtensions = fileEextension;
+ fileAnnexesEntity.F_FileType = fileType;
+ fileAnnexesEntity.F_CreateUserId = userInfo.userId;
+ fileAnnexesEntity.F_CreateUserName = userInfo.realName;
+
+ annexesFileIBLL.SaveEntity(folderId, fileAnnexesEntity);
+ }
+
+ return SuccessString(folderId);
+ }
+
+ ///
+ /// 获取文件信息
+ ///
+ ///
+ ///
+ public Response WxFileInfo(dynamic _)
+ {
+ var fileId = this.GetReqData();
+ var fileEntity = annexesFileIBLL.GetEntity(fileId);
+
+ return Success(fileEntity);
+ }
+
+ ///
+ /// 删除文件
+ ///
+ ///
+ ///
+ public Response WxDeleteFile(dynamic _)
+ {
+ var fileId = this.GetReqData();
+ AnnexesFileEntity fileInfoEntity = annexesFileIBLL.GetEntity(fileId);
+ annexesFileIBLL.DeleteEntity(fileId);
+ //删除文件
+ if (System.IO.File.Exists(fileInfoEntity.F_FilePath))
+ {
+ System.IO.File.Delete(fileInfoEntity.F_FilePath);
+ }
+
+ return Success("删除成功");
+ }
+
+ ///
+ /// 下载文件,微信小程序用
+ ///
+ /// 微信小程序可以预览图片、文档
+ /// 支持的图片格式:.jpg .png .webp .gif
+ /// 支持的文档格式:.doc(x) .xls(x) .ppt(x) .pdf
+ ///
+ /// 对于其他格式的文件,微信小程序官方未提供打开或预览的 API,文件对用户来说不可访问
+ ///
+ ///
+ ///
+ public Response WxDownload(dynamic _)
+ {
+ string name = this.GetReqData();
+ string fileId = name.Split('.')[0];
+ var fileEntity = annexesFileIBLL.GetEntity(fileId);
+ string filepath = fileEntity.F_FilePath;
+
+ if (!FileDownHelper.FileExists(filepath))
+ {
+ return 404;
+ }
+
+ FileDownHelper.DownLoadWx(filepath, fileEntity.F_FileType);
+
+ return Success("");
+ }
}
- private AnnexesFileIBLL annexesFileIBLL = new AnnexesFileBLL();
-
- ///
- /// 获取附件列表
- ///
- ///
- ///
- public Response WxGetList(dynamic _)
- {
- var keyValue = this.GetReqData();
- var list = annexesFileIBLL.GetList(keyValue);
-
- return Success(list);
- }
-
- ///
- /// 上传附件图片文件
- ///
- ///
- public Response WxUpload(dynamic _)
- {
- var files = (List)this.Context.Request.Files;
- var folderId = this.GetReqData();
-
- string filePath = Config.GetValue("AnnexesFile");
- string uploadDate = DateTime.Now.ToString("yyyyMMdd");
- string fileEextension = Path.GetExtension(files[0].Name);
- string fileType = fileEextension.Replace(".", "");
- string fileGuid = Guid.NewGuid().ToString();
-
- string virtualPath = string.Format("{0}/{1}/{2}/{3}{4}", filePath, userInfo.userId, uploadDate, fileGuid, fileEextension);
-
- //创建文件夹
- string path = Path.GetDirectoryName(virtualPath);
- Directory.CreateDirectory(path);
- AnnexesFileEntity fileAnnexesEntity = new AnnexesFileEntity();
- if (!System.IO.File.Exists(virtualPath))
- {
- byte[] bytes = new byte[files[0].Value.Length];
- files[0].Value.Read(bytes, 0, bytes.Length);
- FileInfo file = new FileInfo(virtualPath);
- FileStream fs = file.Create();
- fs.Write(bytes, 0, bytes.Length);
- fs.Close();
-
- //文件信息写入数据库
- fileAnnexesEntity.F_Id = fileGuid;
- fileAnnexesEntity.F_FileName = files[0].Name;
- fileAnnexesEntity.F_FilePath = virtualPath;
- fileAnnexesEntity.F_FileSize = files[0].Value.Length.ToString();
- fileAnnexesEntity.F_FileExtensions = fileEextension;
- fileAnnexesEntity.F_FileType = fileType;
- fileAnnexesEntity.F_CreateUserId = userInfo.userId;
- fileAnnexesEntity.F_CreateUserName = userInfo.realName;
-
- annexesFileIBLL.SaveEntity(folderId, fileAnnexesEntity);
- }
-
- return SuccessString(fileGuid);
- }
-
- ///
- /// 获取文件信息
- ///
- ///
- ///
- public Response WxFileInfo(dynamic _)
- {
- var fileId = this.GetReqData();
- var fileEntity = annexesFileIBLL.GetEntity(fileId);
-
- return Success(fileEntity);
- }
-
- ///
- /// 删除文件
- ///
- ///
- ///
- public Response WxDeleteFile(dynamic _)
- {
- var fileId = this.GetReqData();
- AnnexesFileEntity fileInfoEntity = annexesFileIBLL.GetEntity(fileId);
- annexesFileIBLL.DeleteEntity(fileId);
- //删除文件
- if (System.IO.File.Exists(fileInfoEntity.F_FilePath))
- {
- System.IO.File.Delete(fileInfoEntity.F_FilePath);
- }
-
- return Success("删除成功");
- }
-
- ///
- /// 下载文件,微信小程序用
- ///
- /// 微信小程序可以预览图片、文档
- /// 支持的图片格式:.jpg .png .webp .gif
- /// 支持的文档格式:.doc(x) .xls(x) .ppt(x) .pdf
- ///
- /// 对于其他格式的文件,微信小程序官方未提供打开或预览的 API,文件对用户来说不可访问
- ///
- ///
- ///
- public Response WxDownload(dynamic _)
- {
- string name = this.GetReqData();
- string fileId = name.Split('.')[0];
- var fileEntity = annexesFileIBLL.GetEntity(fileId);
- string filepath = fileEntity.F_FilePath;
-
- if (!FileDownHelper.FileExists(filepath))
- {
- return 404;
- }
-
- FileDownHelper.DownLoadWx(filepath, fileEntity.F_FileType);
-
- return Success("");
- }
- }
}
\ No newline at end of file
diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/FormApi.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/FormApi.cs
index a574ac806..0a2ac508e 100644
--- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/FormApi.cs
+++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/FormApi.cs
@@ -21,12 +21,28 @@ namespace Learun.Application.WebApi.Modules
{
Get["/scheme"] = GetScheme;
Get["/data"] = GetData;
+ Get["/folderkey"] = GetFolderkey;
Post["/save"] = Save;
Post["/delete"] = DeleteForm;
}
private FormSchemeIBLL formSchemeIBLL = new FormSchemeBLL();
+
+ private Response GetFolderkey(dynamic _)
+ {
+ List req = this.GetReqData>();// 获取模板请求数据
+ Dictionary dic = new Dictionary();
+ foreach (var item in req)
+ {
+ if (!string.IsNullOrEmpty(item.processIdName))
+ {
+ var data = formSchemeIBLL.GetFolderKey(item.schemeInfoId, item.processIdName, item.keyValue);//
+ dic = data;
+ }
+ }
+ return Success(dic);
+ }
///
/// 获取表单模板数据
///
@@ -104,6 +120,35 @@ namespace Learun.Application.WebApi.Modules
}
#region 请求参数
+
+ private class FolderKeyReq
+ {
+ ///
+ /// 表单请求Id
+ ///
+ public string id { get; set; }
+ ///
+ /// 当前自定义表单版本号
+ ///
+ public string ver { get; set; }
+ ///
+ /// 流程模板id
+ ///
+ public string schemeInfoId { get; set; }
+ ///
+ /// 关联字段名称
+ ///
+ public string processIdName { get; set; }
+ ///
+ /// 数据主键值
+ ///
+ public string keyValue { get; set; }
+ ///
+ /// 表单数据
+ ///
+ public string formData { get; set; }
+ }
+
private class SchemeReq {
///
/// 表单请求Id
diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/StuFreshPayFeeApi.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/StuFreshPayFeeApi.cs
new file mode 100644
index 000000000..961802cc4
--- /dev/null
+++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/StuFreshPayFeeApi.cs
@@ -0,0 +1,219 @@
+using System;
+using Learun.Application.Organization;
+using Learun.Application.TwoDevelopment.EducationalAdministration;
+using Learun.Application.TwoDevelopment.EvaluationTeach;
+using Learun.Util;
+using Nancy;
+using System.Collections.Generic;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Security.Cryptography;
+using System.Text;
+using System.Web;
+using System.Web.Mvc;
+using Learun.Application.Base.SystemModule;
+using Learun.Application.TwoDevelopment.Ask;
+using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement;
+using Newtonsoft.Json;
+using ThoughtWorks.QRCode.Codec;
+
+namespace Learun.Application.WebApi.Modules
+{
+ ///
+ /// 版 本 Learun-ADMS V7.0.0 数字化智慧校园
+ /// Copyright (c) 2013-2018 北京泉江科技有限公司
+ /// 创建人:数字化智慧校园-框架开发组
+ /// 日 期:2018.01.04
+ /// 描 述:部门管理
+ ///
+ public class StuFreshPayFeeApi : BaseApi
+ {
+ public StuFreshPayFeeApi()
+ : base("/learun/freshpayfee")
+ {
+ Get["/getpayfeelist"] = GetPayfeeList;// 获取缴费列表
+ Get["/getpayfeeinfo"] = GetPayfeeInfo;//获取缴费明细
+ Post["/generateqrcode"] = PayFeeQRCode;//生成缴费二维码
+ Get["/getinvoice"] = GetInvoice;//获取发票
+ }
+
+ private StuInfoFreshIBLL stuInfoFreshIBLL = new StuInfoFreshBLL();
+ private FinaChargesStandardIBLL finaChargesStandardIBLL = new FinaChargesStandardBLL();
+
+ public Response GetInvoice(dynamic _)
+ {
+ string keyValue = Request.Query["keyValue"];
+ var list = stuInfoFreshIBLL.GetStuEnrollFeeOrder(keyValue, true);
+ return Success(list);
+ }
+
+ public Response GetPayfeeList(dynamic _)
+ {
+ ReqPageParam parameter = this.GetReqData();
+ var data = stuInfoFreshIBLL.GetPageList(parameter.pagination, parameter.queryJson);
+ var jsonData = new
+ {
+ rows = data,
+ total = parameter.pagination.total,
+ page = parameter.pagination.page,
+ records = parameter.pagination.records
+ };
+ return Success(jsonData);
+ }
+
+ public Response GetPayfeeInfo(dynamic _)
+ {
+ string keyValue = Request.Query["keyValue"];
+ int jiaoFeiYear = DateTime.Now.Year;
+ var StuInfoFreshData = stuInfoFreshIBLL.GetStuInfoFreshEntity(keyValue);
+ var stuInfoFreshFamily = stuInfoFreshIBLL.GetStuInfoFreshFamilyList(keyValue);
+ //当前年度缴费记录
+ var FeeOrderList = stuInfoFreshIBLL.GetFeeOrderList(StuInfoFreshData.StuNo, jiaoFeiYear);
+ var FinaChargesStandardList = new List();
+ FinaChargesStandardList = finaChargesStandardIBLL.GetFinaChargesStandardListByYongYou(StuInfoFreshData.StuNo, jiaoFeiYear).ToList();
+ var PayFeeTotal = FinaChargesStandardList.Select(x => x.Standard).Sum();
+ var jsonData = new
+ {
+ StuInfoFreshData = StuInfoFreshData,
+ FinaChargesStandardList = FinaChargesStandardList,
+ StuInfoFreshFamilyList = stuInfoFreshFamily,
+ PayFeeTotal = PayFeeTotal,
+ YJAmount = FeeOrderList.Sum(x => x.SJAmount)
+ };
+ return Success(jsonData);
+ }
+
+
+ public class PayfeeRequest
+ {
+ public string strEntity { get; set; }
+ public string detailList { get; set; }
+ }
+
+ ///
+ /// 生成缴费二维码
+ ///
+ ///
+ public Response PayFeeQRCode(dynamic _)
+ {
+ string keyValue = Request.Query["keyValue"];
+ PayfeeRequest parameter = this.GetReqData();
+ StuInfoFreshEntity entity = parameter.strEntity.ToObject();
+ List list = parameter.detailList.ToObject>();
+ var model = stuInfoFreshIBLL.GetStuInfoFreshEntity(keyValue);
+ var imgUrl = "";
+ Random ran = new Random();
+ string merchantid = "105000082201406";//商户号
+ string posid = "043724806";//商户柜台代码
+ string branchid = "510000000";//分行代码
+ string orderid = DateTime.Now.ToString("yyyyMMddhhmmss") + ran.Next(0, 100000);
+ string payment = entity.PayMoney.ToString();
+ string curcode = "01";
+ string txcode = "530550";
+ string remark1 = model.StuNo;
+ string remark2 = "20" + model.Grade;
+ string returntype = "3";
+ string timeout = DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss");
+ string pub32tr2 = "40d987faa793a0a27e7a86ef020111";
+ string bankURL = "https://ibsbjstar.ccb.com.cn/CCBIS/ccbMain?CCB_IBSVersion=V6";
+ string tmp = "MERCHANTID=" + merchantid + "&POSID=" + posid + "&BRANCHID=" + branchid + "&ORDERID=" + orderid;
+ tmp += "&PAYMENT=" + payment + "&CURCODE=" + curcode + "&TXCODE=" + txcode + "&REMARK1=" + remark1;
+ tmp += "&REMARK2=" + remark2 + "&RETURNTYPE=" + returntype + "&TIMEOUT=" + timeout;
+ MD5 md5 = MD5.Create();
+ string tmp1 = tmp;
+ tmp += "&PUB=" + pub32tr2;
+ byte[] buffer = Encoding.Default.GetBytes(tmp);
+ byte[] md5Buffer = md5.ComputeHash(buffer);
+ string strMd5 = "";
+ //hdnOrderId.Value = orderid;
+ foreach (byte item in md5Buffer)
+ {
+ strMd5 += item.ToString("x2");
+ }
+ string url = bankURL + "&" + tmp1 + "&MAC=" + strMd5;
+ string reJson = HttpMethods.Post(url);
+ LogEntity logEntity = new LogEntity();
+ logEntity.F_CategoryId = 121;
+ logEntity.F_ExecuteResultJson = reJson;
+ logEntity.WriteLog();
+ //HttpConnect conn = new HttpConnect();
+ //string reJson = conn.Post(url, "");
+ JsonBean MemberInfoList = JsonConvert.DeserializeObject(reJson);
+ if (MemberInfoList.SUCCESS.Equals("true"))
+ {
+ string imgCode = HttpMethods.Post(MemberInfoList.PAYURL);
+ logEntity.F_CategoryId = 121;
+ logEntity.F_ExecuteResultJson = imgCode;
+ logEntity.WriteLog();
+ MemberInfoList = JsonConvert.DeserializeObject(imgCode);
+ if (MemberInfoList.SUCCESS.Equals("true"))
+ {
+ imgUrl = CreateQRImg(MemberInfoList.QRURL, orderid);
+ }
+ }
+
+ if (!string.IsNullOrEmpty(imgUrl))
+ {
+ // model.PayFeeDetail = entity.PayFeeDetail;
+ // model.PayMoney = entity.PayMoney;
+ model.LoanMoney = entity.LoanMoney;
+ model.orderid = orderid;
+ stuInfoFreshIBLL.SaveFeeData(keyValue, model, list);
+ }
+
+ return Success(imgUrl);
+ }
+
+ public class JsonBean
+ {
+ ///
+ ///
+ ///
+ public string SUCCESS { get; set; }
+ public string PAYURL { get; set; }
+ public string QRURL { get; set; }
+ }
+ ///
+ /// 生成并保存二维码图片的方法
+ ///
+ /// 输入的内容
+ public string CreateQRImg(string str, string orderId)
+ {
+ string QRCodeFile = Config.GetValue("QRCodeFile");
+ Random ran = new Random();
+ Bitmap bt;
+ str = HttpUtility.UrlDecode(str);
+ string enCodeString = str;
+ //生成设置编码实例
+ QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
+ //设置二维码的规模,默认4
+ qrCodeEncoder.QRCodeScale = 3;
+ //设置二维码的版本,默认7
+ qrCodeEncoder.QRCodeVersion = 7;
+ //设置错误校验级别,默认中等
+ qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
+ //生成二维码图片
+ bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);
+ //二维码图片的名称
+ string filename = orderId;
+ if (!DirFileHelper.IsExistFile(QRCodeFile + "/Content/images/QRCode/"))
+ {
+ Directory.CreateDirectory(QRCodeFile + "/Content/images/QRCode/");
+ }
+ var path = QRCodeFile + "/Content/images/QRCode/" + filename + ".jpg";
+ //保存二维码图片在photos路径下
+ try
+ {
+ bt.Save(path);
+ }
+ catch (Exception ex)
+ {
+ return "";
+ }
+
+ //图片控件要显示的二维码图片路径
+ return QRCodeFile + "/Content/images/QRCode/" + filename + ".jpg";
+ }
+ }
+}
\ No newline at end of file
diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/StuPayFeeApi.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/StuPayFeeApi.cs
new file mode 100644
index 000000000..52cc62442
--- /dev/null
+++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/StuPayFeeApi.cs
@@ -0,0 +1,215 @@
+using System;
+using Learun.Application.Organization;
+using Learun.Application.TwoDevelopment.EducationalAdministration;
+using Learun.Application.TwoDevelopment.EvaluationTeach;
+using Learun.Util;
+using Nancy;
+using System.Collections.Generic;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Security.Cryptography;
+using System.Text;
+using System.Web;
+using System.Web.Mvc;
+using Learun.Application.Base.SystemModule;
+using Learun.Application.TwoDevelopment.Ask;
+using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement;
+using Newtonsoft.Json;
+using ThoughtWorks.QRCode.Codec;
+
+namespace Learun.Application.WebApi.Modules
+{
+ ///
+ /// 版 本 Learun-ADMS V7.0.0 数字化智慧校园
+ /// Copyright (c) 2013-2018 北京泉江科技有限公司
+ /// 创建人:数字化智慧校园-框架开发组
+ /// 日 期:2018.01.04
+ /// 描 述:部门管理
+ ///
+ public class StuPayFeeApi : BaseApi
+ {
+ public StuPayFeeApi()
+ : base("/learun/payfee")
+ {
+ Get["/getpayfeelist"] = GetPayfeeList;// 获取缴费列表
+ Get["/getpayfeeinfo"] = GetPayfeeInfo;//获取缴费明细
+ Post["/generateqrcode"] = PayFeeQRCode;//生成缴费二维码
+ Get["/getinvoice"] = GetInvoice;//获取发票
+ }
+
+ private StuInfoBasic_PayFeeIBLL stuInfoBasic_PayFeeIBLL = new StuInfoBasic_PayFeeBLL();
+ private StuInfoBasicIBLL stuInfoBasicIbll = new StuInfoBasicBLL();
+ private StuInfoFreshIBLL stuInfoFreshIBLL = new StuInfoFreshBLL();
+ private FinaChargesStandardIBLL finaChargesStandardIBLL = new FinaChargesStandardBLL();
+
+ public Response GetInvoice(dynamic _)
+ {
+ string keyValue = Request.Query["keyValue"];
+ var list = stuInfoFreshIBLL.GetStuEnrollFeeOrder(keyValue, false);
+ return Success(list);
+ }
+
+ public Response GetPayfeeList(dynamic _)
+ {
+ ReqPageParam parameter = this.GetReqData();
+ var data = stuInfoBasic_PayFeeIBLL.GetPageList(parameter.pagination, parameter.queryJson);
+ var jsonData = new
+ {
+ rows = data,
+ total = parameter.pagination.total,
+ page = parameter.pagination.page,
+ records = parameter.pagination.records
+ };
+ return Success(jsonData);
+ }
+
+ public Response GetPayfeeInfo(dynamic _)
+ {
+ string keyValue = Request.Query["keyValue"];
+ var stuInfoBasic_PayFeeEntity = stuInfoBasic_PayFeeIBLL.GetStuInfoBasic_PayFeeEntity(keyValue);
+ var StuInfoFreshData = stuInfoBasicIbll.GetStuInfoBasicEntityByStuNo(stuInfoBasic_PayFeeEntity.StuNo);
+ //当前年度缴费记录
+ var FinaChargesStandardList = new List();
+ FinaChargesStandardList = finaChargesStandardIBLL.GetFinaChargesStandardListByYongYou(StuInfoFreshData.StuNo, stuInfoBasic_PayFeeEntity.PayYear.Value).ToList();
+ var PayFeeTotal = FinaChargesStandardList.Select(x => x.SJAmount).Sum();
+ var jsonData = new
+ {
+ StuInfoFreshData = StuInfoFreshData,
+ FinaChargesStandardList = FinaChargesStandardList,
+ PayFeeTotal = PayFeeTotal,
+ YJAmount = FinaChargesStandardList.Sum(x => x.PayedMoney)
+ };
+ return Success(jsonData);
+ }
+
+
+ public class PayfeeRequest
+ {
+ public string strEntity { get; set; }
+ public string detailList { get; set; }
+ }
+
+ ///
+ /// 生成缴费二维码
+ ///
+ ///
+ public Response PayFeeQRCode(dynamic _)
+ {
+ string keyValue = Request.Query["keyValue"];
+ PayfeeRequest parameter = this.GetReqData();
+ StuInfoFreshEntity entity = parameter.strEntity.ToObject();
+ List list = parameter.detailList.ToObject>();
+ var model = stuInfoBasic_PayFeeIBLL.GetStuInfoBasic_PayFeeEntity(keyValue);
+ var imgUrl = "";
+ Random ran = new Random();
+ string merchantid = "105000082201406";//商户号
+ string posid = "043724806";//商户柜台代码
+ string branchid = "510000000";//分行代码
+ string orderid = DateTime.Now.ToString("yyyyMMddhhmmss") + ran.Next(0, 100000);
+ string payment = entity.PayMoney.ToString();
+ string curcode = "01";
+ string txcode = "530550";
+ string remark1 = model.StuNo;
+ string remark2 = model.PayYear.ToString();
+ string returntype = "3";
+ string timeout = DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss");
+ string pub32tr2 = "40d987faa793a0a27e7a86ef020111";
+ string bankURL = "https://ibsbjstar.ccb.com.cn/CCBIS/ccbMain?CCB_IBSVersion=V6";
+ string tmp = "MERCHANTID=" + merchantid + "&POSID=" + posid + "&BRANCHID=" + branchid + "&ORDERID=" + orderid;
+ tmp += "&PAYMENT=" + payment + "&CURCODE=" + curcode + "&TXCODE=" + txcode + "&REMARK1=" + remark1;
+ tmp += "&REMARK2=" + remark2 + "&RETURNTYPE=" + returntype + "&TIMEOUT=" + timeout;
+ MD5 md5 = MD5.Create();
+ string tmp1 = tmp;
+ tmp += "&PUB=" + pub32tr2;
+ byte[] buffer = Encoding.Default.GetBytes(tmp);
+ byte[] md5Buffer = md5.ComputeHash(buffer);
+ string strMd5 = "";
+ //hdnOrderId.Value = orderid;
+ foreach (byte item in md5Buffer)
+ {
+ strMd5 += item.ToString("x2");
+ }
+ string url = bankURL + "&" + tmp1 + "&MAC=" + strMd5;
+ string reJson = HttpMethods.Post(url);
+ LogEntity logEntity = new LogEntity();
+ logEntity.F_CategoryId = 121;
+ logEntity.F_ExecuteResultJson = reJson;
+ logEntity.WriteLog();
+ //HttpConnect conn = new HttpConnect();
+ //string reJson = conn.Post(url, "");
+ JsonBean MemberInfoList = JsonConvert.DeserializeObject(reJson);
+ if (MemberInfoList.SUCCESS.Equals("true"))
+ {
+ string imgCode = HttpMethods.Post(MemberInfoList.PAYURL);
+ logEntity.F_CategoryId = 121;
+ logEntity.F_ExecuteResultJson = imgCode;
+ logEntity.WriteLog();
+ MemberInfoList = JsonConvert.DeserializeObject(imgCode);
+ if (MemberInfoList.SUCCESS.Equals("true"))
+ {
+ imgUrl = CreateQRImg(MemberInfoList.QRURL, orderid);
+ }
+ }
+
+ if (!string.IsNullOrEmpty(imgUrl))
+ {
+ model.orderid = orderid;
+ stuInfoFreshIBLL.SaveFeeData(keyValue, model, list);
+ }
+
+ return Success(imgUrl);
+ }
+
+ public class JsonBean
+ {
+ ///
+ ///
+ ///
+ public string SUCCESS { get; set; }
+ public string PAYURL { get; set; }
+ public string QRURL { get; set; }
+ }
+ ///
+ /// 生成并保存二维码图片的方法
+ ///
+ /// 输入的内容
+ public string CreateQRImg(string str, string orderId)
+ {
+ string QRCodeFile = Config.GetValue("QRCodeFile");
+ Random ran = new Random();
+ Bitmap bt;
+ str = HttpUtility.UrlDecode(str);
+ string enCodeString = str;
+ //生成设置编码实例
+ QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
+ //设置二维码的规模,默认4
+ qrCodeEncoder.QRCodeScale = 3;
+ //设置二维码的版本,默认7
+ qrCodeEncoder.QRCodeVersion = 7;
+ //设置错误校验级别,默认中等
+ qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
+ //生成二维码图片
+ bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);
+ //二维码图片的名称
+ string filename = orderId;
+ if (!DirFileHelper.IsExistFile(QRCodeFile+"/Content/images/QRCode/"))
+ {
+ Directory.CreateDirectory(QRCodeFile + "/Content/images/QRCode/");
+ }
+ var path = QRCodeFile + "/Content/images/QRCode/" + filename + ".jpg";
+ //保存二维码图片在photos路径下
+ try
+ {
+ bt.Save(path);
+ }
+ catch (Exception ex)
+ {
+ return "";
+ }
+
+ //图片控件要显示的二维码图片路径
+ return QRCodeFile + "/Content/images/QRCode/" + filename + ".jpg";
+ }
+ }
+}
\ No newline at end of file
diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/WeixinApi.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/WeixinApi.cs
index ee3d82139..36e9881ad 100644
--- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/WeixinApi.cs
+++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/WeixinApi.cs
@@ -36,6 +36,8 @@ namespace Learun.Application.WebApi.Modules
Get["/weixinconfig"] = GetWeixinConfig;
Post["/getweixinaccess_token"] = GetWeixinAccess_token;
Post["/login"] = Login;
+ //新生首次登陆
+ Post["/loginbyidcard"] = LoginByIdCard;
Get["/getweixinwebaccess_token"] = GetWeixinWebaccess_token;
//获取ACIp
Get["/GetACIp"] = GetACIp;
@@ -100,6 +102,13 @@ namespace Learun.Application.WebApi.Modules
return Success(new { appid, secret });
}
+ public class wxinfo
+ {
+ public string errcode { get; set; }
+ public string errmsg { get; set; }
+ public string openid { get; set; }
+ }
+
public Response GetWeixinAccess_token(dynamic _)
{
var entity = weChatConfigIbll.GetEnableEntity();
@@ -110,7 +119,7 @@ namespace Learun.Application.WebApi.Modules
var responsejson = HttpGet("https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appid + "&secret=" + secret + "&code=" + code + "&grant_type=authorization_code");
if (!string.IsNullOrEmpty(responsejson))
{
- var weixintokenobj = JsonConvert.DeserializeObject(responsejson);
+ var weixintokenobj = JsonConvert.DeserializeObject(responsejson);
if (string.IsNullOrEmpty(weixintokenobj.errcode))
{
string openid = weixintokenobj.openid;
@@ -241,6 +250,77 @@ namespace Learun.Application.WebApi.Modules
#endregion
}
+ private Response LoginByIdCard(dynamic _)
+ {
+ LoginModel loginModel = this.GetReqData();
+
+ #region 内部账户验证
+ UserEntity userEntity = userIbll.CheckLoginByIdCard(loginModel.username, loginModel.password);
+
+ #region 写入日志
+ LogEntity logEntity = new LogEntity();
+ logEntity.F_CategoryId = 1;
+ logEntity.F_OperateTypeId = ((int)OperationType.Login).ToString();
+ logEntity.F_OperateType = EnumAttribute.GetDescription(OperationType.Login);
+ logEntity.F_OperateAccount = loginModel.username + "(" + userEntity.F_RealName + ")";
+ logEntity.F_OperateUserId = !string.IsNullOrEmpty(userEntity.F_UserId) ? userEntity.F_UserId : loginModel.username;
+ logEntity.F_Module = Config.GetValue("SoftName");
+ logEntity.F_Description = "移动端";
+ #endregion
+
+ if (!userEntity.LoginOk)//登录失败
+ {
+ //写入日志
+ logEntity.F_ExecuteResult = 0;
+ logEntity.F_ExecuteResultJson = "登录失败:" + userEntity.LoginMsg;
+ logEntity.WriteLog();
+ return Fail(userEntity.LoginMsg);
+ }
+ else
+ {
+ ReqParameter req = this.Bind();
+ string token = OperatorHelper.Instance.AddLoginUser(userEntity.F_Account, "Learun_ADMS_6.1_App", req.loginMark, false);//写入缓存信息
+ //写入日志
+ logEntity.F_ExecuteResult = 1;
+ logEntity.F_ExecuteResultJson = "登录成功";
+ logEntity.WriteLog();
+ OperatorResult res = OperatorHelper.Instance.IsOnLine(token, req.loginMark);
+ res.userInfo.password = null;
+ res.userInfo.secretkey = null;
+ var studententity = stuInfoBasicIBLL.GetStuInfoBasicEntityByStuNo(userEntity.F_Account);
+ if (studententity != null)
+ {
+ res.userInfo.grade = studententity.Grade;
+ var majorinfo = majorIbll.GetCdMajorEntityByMajorNo(studententity.MajorNo);
+ if (majorinfo != null)
+ {
+ res.userInfo.majorno = majorinfo.ID ?? "";
+ }
+
+ }
+ //是否强密码验证
+ bool pwd = false;
+ if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["verifypwd"]) && ConfigurationManager.AppSettings["verifypwd"] == "true" && loginModel.up == false)
+ {
+ pwd = true;
+ }
+ else
+ {
+ //保存用户设备号
+ userIbll.UpdateWeixinOpenId(userEntity.F_UserId, loginModel.openid);
+ }
+ var jsonData = new
+ {
+ baseinfo = res.userInfo,
+ post = postIBLL.GetListByPostIds(res.userInfo.postIds),
+ role = roleIBLL.GetListByRoleIds(res.userInfo.roleIds),
+ pwd = pwd
+ };
+ return Success(jsonData);
+ }
+ #endregion
+ }
+
public Response GetWeixinWebaccess_token(dynamic _)
{
var entity = weChatConfigIbll.GetEnableEntity();
diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/XmlConfig/system.config b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/XmlConfig/system.config
index 0fac6f538..39f36d613 100644
--- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/XmlConfig/system.config
+++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/XmlConfig/system.config
@@ -66,6 +66,7 @@
+
diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/packages.config b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/packages.config
index b9d939563..05bbc23ba 100644
--- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/packages.config
+++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/packages.config
@@ -30,6 +30,7 @@
+
\ No newline at end of file
diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Form/Scheme/FormSchemeBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Form/Scheme/FormSchemeBLL.cs
index 1e3296b7e..778209e76 100644
--- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Form/Scheme/FormSchemeBLL.cs
+++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Form/Scheme/FormSchemeBLL.cs
@@ -551,7 +551,91 @@ namespace Learun.Application.Form
}
}
}
-
+
+ public Dictionary GetFolderKey(string schemeInfoId, string processIdName, string keyValue)
+ {
+ Dictionary res = new Dictionary();
+
+ try
+ {
+ FormSchemeInfoEntity formSchemeInfoEntity = GetSchemeInfoEntity(schemeInfoId);
+ FormSchemeEntity formSchemeEntity = GetSchemeEntity(formSchemeInfoEntity.F_SchemeId);
+ FormSchemeModel formSchemeModel = formSchemeEntity.F_Scheme.ToObject();
+
+ // 确定主从表之间的关系
+ List> TableTree = new List>();// 从表
+ foreach (var table in formSchemeModel.dbTable)
+ {
+ TreeModelEx treeone = new TreeModelEx();
+ treeone.data = table;
+ treeone.id = table.name;
+ treeone.parentId = table.relationName;
+ if (string.IsNullOrEmpty(table.relationName))
+ {
+ treeone.parentId = "0";
+ }
+ TableTree.Add(treeone);
+ }
+ TableTree = TableTree.ToTree();
+
+ // 确定表与组件之间的关系
+ Dictionary> tableComponts = new Dictionary>();
+ foreach (var tab in formSchemeModel.data)
+ {
+ foreach (var compont in tab.componts)
+ {
+ if (!string.IsNullOrEmpty(compont.table))
+ {
+ if (!tableComponts.ContainsKey(compont.table))
+ {
+ tableComponts[compont.table] = new List();
+ }
+ if (compont.type == "upload")
+ {
+ tableComponts[compont.table].Add(compont);
+ }
+ if (compont.type == "guid")
+ {
+ tableComponts[compont.table].Add(compont);
+ }
+
+ }
+ }
+ }
+ GetInstanceTableData(TableTree, tableComponts, formSchemeModel.dbId, keyValue, processIdName, null, res);
+ Dictionary < string,string> uploadfieldkeyvalue=new Dictionary();
+ foreach (var itemCompont in tableComponts)
+ {
+ foreach (FormCompontModel formitem in itemCompont.Value)
+ {
+ if (formitem.type=="upload")
+ {
+ foreach (var resitem in res)
+ {
+ if (resitem.Value.Rows.Count>0)
+ {
+ if (resitem.Value.Rows[0][formitem.field] != null)
+ uploadfieldkeyvalue.Add(formitem.id, resitem.Value.Rows[0][formitem.field].ToString());
+ }
+ }
+ }
+ }
+ }
+ return uploadfieldkeyvalue;
+ }
+ catch (Exception ex)
+ {
+ if (ex is ExceptionEx)
+ {
+ throw;
+ }
+ else
+ {
+ throw ExceptionEx.ThrowBusinessException(ex);
+ }
+ }
+ }
+
///
/// 保存自定义表单数据
///
diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Form/Scheme/FormSchemeIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Form/Scheme/FormSchemeIBLL.cs
index 571d48c9d..72444597a 100644
--- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Form/Scheme/FormSchemeIBLL.cs
+++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Form/Scheme/FormSchemeIBLL.cs
@@ -137,5 +137,7 @@ namespace Learun.Application.Form
/// 数据主键值
void DeleteInstanceForm(string schemeInfoId, string keyValue);
#endregion
+
+ Dictionary GetFolderKey(string itemSchemeInfoId, string itemProcessIdName, string itemKeyValue);
}
}
diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/StuInfoBasic_PayFee/StuInfoBasic_PayFeeEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/StuInfoBasic_PayFee/StuInfoBasic_PayFeeEntity.cs
index 1714c2271..a2fc7c44e 100644
--- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/StuInfoBasic_PayFee/StuInfoBasic_PayFeeEntity.cs
+++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/StuInfoBasic_PayFee/StuInfoBasic_PayFeeEntity.cs
@@ -62,7 +62,7 @@ namespace Learun.Application.TwoDevelopment.EducationalAdministration
[NotMapped] public string StuCode { get; set; }
[NotMapped] public string StuName { get; set; }
- [NotMapped] public string GenderNo { get; set; }
+ [NotMapped] public bool? GenderNo { get; set; }
[NotMapped] public string IdentityCardNo { get; set; }
[NotMapped] public string DeptNo { get; set; }
[NotMapped] public string MajorNo { get; set; }
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/.hbuilderx/launch.json b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/.hbuilderx/launch.json
index b9c0a3291..34b613be0 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/.hbuilderx/launch.json
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/.hbuilderx/launch.json
@@ -10,6 +10,10 @@
{
"launchtype" : "remote"
},
+ "mp-weixin" :
+ {
+ "launchtype" : "remote"
+ },
"type" : "uniCloud"
}
]
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/App.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/App.vue
index 55e9bb57a..46d92c1be 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/App.vue
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/App.vue
@@ -10,7 +10,7 @@
// H5 刷新时获取当前页面路径
const pagePath = "/" + param.path;
// 如果 H5 刷新后访问的不是首页/登录页/注册页,直接跳转回首页
- if (!["/pages/login", "/pages/home", "/pages/signup"].includes(pagePath)) {
+ if (!["/pages/login", "/pages/weixinLogin","/pages/home", "/pages/signup","/pages/my/newpassword"].includes(pagePath)) {
this.$nextTick(() => {
this.TAB_TO("/pages/home");
return;
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/common/customform.js b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/common/customform.js
index 4a171f0b1..55fe2542c 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/common/customform.js
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/common/customform.js
@@ -24,274 +24,310 @@ import moment from 'moment'
*/
export default {
- methods: {
- /**
- * 获取一个 scheme 表单项的源数据 (加载表单时使用)
- * 参数: 单个 schemeItem
- *
- * radio、select、checkbox、layer 这四种表单项,需要加载额外的选单数据
- * 选单数据有两种获取方式:
- * 1、来自数据字典:
- * 数据字典在 this.GET_GLOBAL('dataDictionary')
- * 表单使用的字段在 schemeItem.itemCode
- * 选单数据中的 text 字段作为显示, value 字段作为值
- *
- * 2、来自数据源:
- * 将 schemeItem.dataSourceId 按符号「,」逗号分割为数组,分割为: [code, displayField, valueField]
- * 数据源需要请求 API 来获取,请求需要带上数据源的编号 code
- * displayField、valueField 分别为展示字段和值绑定字段
- *
- * 选单数据有两种格式:
- * 1、对于 radio、select、checkbox 来说:
- * 只需要一个数组,数组形如: [{ text: '选项文字', value: '选项值' }, ...]
- * 将获取的数据绑定到组件的 range 属性上即可
- * 全局数据中默认是对象形式,使用 Object.values() 转化即可
- *
- * 2、对于 layer 来说:
- * 返回一个对象,形如 { source, layerData, selfField }
- * source: 为弹层中列出的数据,是一个数组
- * layerData: 需要在弹层窗口中展示的字段及标题文字,形如: [{ name:'要展示的字段名', label:'标题文字' }]
- * selfField: 该表单值绑定哪个字段,默认为绑定到自身的字段
- */
- async getSourceData(schemeItem) {
- if (['radio', 'select', 'checkbox'].includes(schemeItem.type)) {
- // radio select checkbox 三种情况
- if (!schemeItem.dataSource || Number(schemeItem.dataSource) === 0) {
- // dataSource 为 0,使用 clientData
- return Object
- .values(this.GET_GLOBAL('dataDictionary')[schemeItem.itemCode])
- .map(t => ({ value: t.value, text: t.text }))
-
- } else {
- // dataSource 不为 0,使用数据源,需要请求接口,并且提取出显示字段和实际字段
- const [code, displayField = schemeItem.showField, valueField = schemeItem.saveField] = schemeItem.dataSourceId
- .split(',')
- const sourceData = await this.FETCH_DATASOURCE(code)
- if (!sourceData) { return [] }
-
- return sourceData.data.map(t => ({ text: t[displayField], value: t[valueField] }))
- }
-
- } else if (['layer'].includes(schemeItem.type)) {
- // layer 需要更多属性
- if (!schemeItem.dataSource || Number(schemeItem.dataSource) === 0) {
- // dataSource 为 0,使用 clientData
- // clientData 对象转数组后,隐含 key:item.text 和 value:item.value 的关系
- const [keyItem, valueItem] = schemeItem.layerData
- const source = Object
- .values(this.GET_GLOBAL('dataDictionary')[schemeItem.itemCode])
- .map(t => ({ value: t.value, text: t.text }))
-
- return {
- source,
- layerData: [
- { name: 'text', label: keyItem.label || '', value: keyItem.value || '' },
- { name: 'value', label: valueItem.label || '', value: valueItem.value || '' }
- ]
- }
- } else {
- // dataSource 不为 0,使用数据源,需要请求接口,并且提取出显示字段和实际字段
- const [code] = schemeItem.dataSourceId.split(',')
- const sourceData = await this.FETCH_DATASOURCE(code)
- if (!sourceData) { return [] }
-
- const source = sourceData.data
-
- return { source, layerData: schemeItem.layerData.filter(t => (!t.hide) && (t.value || t.label)) }
- }
- }
-
- return []
- },
-
- /**
- * 获取一个 scheme 表单项的默认值 (用户新建表单时使用,或是编辑草稿)
- * 参数: 单个 schemeItem , { processId }
- *
- * 每种类别的表单项分别获取的默认值:
- *
- * currentInfo: 根据类别取当前用户/部门/公司/时间日期
- * datetime: 根据 dfValue 字段表示昨天/今天/明天,格式化为字符串
- * radio、select: 有 dfValue 则使用,否则取第一条
- * checkbox: 有 dfValue 则使用,否则为空数组
- * encode: 根据 rulecode 请求表单编码
- * upload: 空数组
- * guid: 赋值第二个参数中的 processId,但是如果在子表格中,赋空字符串
- * girdtable: 递归所有表格项 scheme 依次为它们生成默认值
- * datetimerange: 字符串 0
- */
- async getDefaultData(item, prop) {
- const { processId } = prop
- switch (item.type) {
- case 'currentInfo':
- switch (item.dataType) {
- case 'user':
- return this.GET_GLOBAL('loginUser').userId
- case 'department':
- return this.GET_GLOBAL('loginUser').departmentId
- case 'company':
- return this.GET_GLOBAL('loginUser').companyId
- case 'time':
- return moment().format('YYYY-MM-DD HH:mm:ss')
- default:
- return ''
- }
-
- case 'datetime':
- const datetimeFormat = item.table ?
- (Number(item.dateformat) === 0 ? 'YYYY-MM-DD' : 'YYYY-MM-DD HH:mm:ss') :
- (item.datetime === 'datetime' ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD')
- const today = moment()
- const dfDatetime = [
- today.subtract(1, 'day'),
- today,
- today.add(1, 'day')
- ][Number(item.dfvalue)] || today
-
- return dfDatetime.format(datetimeFormat) || ''
-
- case 'radio':
- case 'select':
- const radioItem = item.__sourceData__.find(t => t.value === item.dfvalue) || item.__sourceData__[0]
- return item.type === 'radio' ? radioItem.value : ''
-
- case 'checkbox':
- if (!item.dfvalue) {
- return []
- }
- return item.dfvalue.split(',').filter(t => item.__sourceData__.find(s => s.value === t))
-
- case 'encode':
- const result = await this.FETCH_ENCODE(item.rulecode)
- return result
-
- case 'upload':
- return []
-
- case 'guid':
- return item.table ? processId : ''
-
- case 'girdtable':
- const tableItemObj = {}
- for (const fieldItem of item.fieldsData) {
- tableItemObj[fieldItem.field] = await this.getDefaultData(fieldItem, prop)
- }
- return this.COPY(tableItemObj)
-
- case 'datetimerange':
- return '0'
-
- default:
- return item.dfvalue || ''
- }
- },
-
- /**
- * 将单条 formData 值转化为 formValue 值 (拉取表单数据时使用)
- * 参数: 单个 schemeItem , 数据值
- *
- * 具体执行逻辑:
- * radio、select: 剔除无效值
- * checkbox: 分割成数组并剔除无效值
- * upload: 分割成数组,拉取其中所有文件的信息
- * datetime: 按照时间日期格式进行格式化字符串
- * 其他类型: 保留原值
- */
- async convertToFormValue(item, val) {
- switch (item.type) {
- case 'upload':
- if (!val) { return [] }
- const uidList = val.split(',')
- const fileList = []
-
- for (const uid of uidList || []) {
- const fileInfo = await this.FETCH_FILEINFO(uid)
- if (!fileInfo) { continue }
-
- const fileType = fileInfo.F_FileType
- const fileSize = fileInfo.F_FileSize
-
- const path = this.API + '/learun/adms/annexes/wxdown?' + this.URL_QUERY(uid, true)
-
- fileList.push({ path, type: fileType, uid, size: fileSize })
- }
- return fileList
-
- case 'select':
- case 'radio':
- if (!val || !item.__sourceData__.map(t => t.value).includes(val)) {
- return ''
- }
- return val
-
- case 'checkbox':
- const validValue = item.__sourceData__.map(t => t.value)
- const checkboxVal = val.split(',') || []
- return checkboxVal.filter(t => validValue.includes(t))
-
- case 'datetime':
- if (!val) {
- return ''
- }
- return moment(val).format(
- Number(item.dateformat) === 0 || item.datetime === 'date' ?
- 'YYYY-MM-DD' :
- 'YYYY-MM-DD HH:mm:ss'
- )
-
- default:
- return val || ''
- }
- },
-
- /**
- * 将一个 formValue 值转化为 post 提交值(提交表单数据时使用)
- * 参数: 单个 schemeItem , 表单项值 , 所有 formValue , scheme
- *
- * 具体执行逻辑:
- * checkbox: 将数组使用符号「,」逗号拼接成字符串
- * datetimerange: 获取开始日期、结束日期,计算差值天数并保留整数
- * datetime: 格式化为完整时间日期字符串
- * upload: 依次上传文件,将返回的文件 ID 使用符号「,」逗号拼接成字符串
- * 其他类型: 保留原值
- */
- async convertToPostData(item, val, formValue, scheme) {
- switch (item.type) {
- case 'checkbox':
- return val ? val.join(',') : ''
-
- case 'datetimerange':
- const startTime = get(formValue, scheme.find(t => t.id === item.startTime).__valuePath__, null)
- const endTime = get(formValue, scheme.find(t => t.id === item.endTime).__valuePath__, null)
- if (!startTime || !endTime || moment(endTime).isBefore(startTime)) {
- return ''
- } else {
- return moment.duration(moment(endTime).diff(moment(startTime))).asDays().toFixed(0)
- }
-
- case 'datetime':
- return val ? moment(val).format('YYYY-MM-DD HH:mm:ss') : ''
-
- case 'upload':
- const uploadUid = []
- // { path, uid }
- for (const item of val) {
- if (item.uid) {
- uploadUid.push(item.uid)
- continue
- }
-
- const fileId = await this.HTTP_UPLOAD(item.path||item)
- if (fileId) {
- uploadUid.push(fileId)
- }
- }
-
- return uploadUid.join(',')
-
- default:
- return val || ''
- }
- }
- }
+ methods: {
+ /**
+ * 获取一个 scheme 表单项的源数据 (加载表单时使用)
+ * 参数: 单个 schemeItem
+ *
+ * radio、select、checkbox、layer 这四种表单项,需要加载额外的选单数据
+ * 选单数据有两种获取方式:
+ * 1、来自数据字典:
+ * 数据字典在 this.GET_GLOBAL('dataDictionary')
+ * 表单使用的字段在 schemeItem.itemCode
+ * 选单数据中的 text 字段作为显示, value 字段作为值
+ *
+ * 2、来自数据源:
+ * 将 schemeItem.dataSourceId 按符号「,」逗号分割为数组,分割为: [code, displayField, valueField]
+ * 数据源需要请求 API 来获取,请求需要带上数据源的编号 code
+ * displayField、valueField 分别为展示字段和值绑定字段
+ *
+ * 选单数据有两种格式:
+ * 1、对于 radio、select、checkbox 来说:
+ * 只需要一个数组,数组形如: [{ text: '选项文字', value: '选项值' }, ...]
+ * 将获取的数据绑定到组件的 range 属性上即可
+ * 全局数据中默认是对象形式,使用 Object.values() 转化即可
+ *
+ * 2、对于 layer 来说:
+ * 返回一个对象,形如 { source, layerData, selfField }
+ * source: 为弹层中列出的数据,是一个数组
+ * layerData: 需要在弹层窗口中展示的字段及标题文字,形如: [{ name:'要展示的字段名', label:'标题文字' }]
+ * selfField: 该表单值绑定哪个字段,默认为绑定到自身的字段
+ */
+ async getSourceData(schemeItem) {
+ if (['radio', 'select', 'checkbox'].includes(schemeItem.type)) {
+ // radio select checkbox 三种情况
+ if (!schemeItem.dataSource || Number(schemeItem.dataSource) === 0) {
+ // dataSource 为 0,使用 clientData
+ return Object
+ .values(this.GET_GLOBAL('dataDictionary')[schemeItem.itemCode])
+ .map(t => ({
+ value: t.value,
+ text: t.text
+ }))
+
+ } else {
+ // dataSource 不为 0,使用数据源,需要请求接口,并且提取出显示字段和实际字段
+ const [code, displayField = schemeItem.showField, valueField = schemeItem.saveField] =
+ schemeItem.dataSourceId
+ .split(',')
+ const sourceData = await this.FETCH_DATASOURCE(code)
+ if (!sourceData) {
+ return []
+ }
+
+ return sourceData.data.map(t => ({
+ text: t[displayField],
+ value: t[valueField]
+ }))
+ }
+
+ } else if (['layer'].includes(schemeItem.type)) {
+ // layer 需要更多属性
+ if (!schemeItem.dataSource || Number(schemeItem.dataSource) === 0) {
+ // dataSource 为 0,使用 clientData
+ // clientData 对象转数组后,隐含 key:item.text 和 value:item.value 的关系
+ const [keyItem, valueItem] = schemeItem.layerData
+ const source = Object
+ .values(this.GET_GLOBAL('dataDictionary')[schemeItem.itemCode])
+ .map(t => ({
+ value: t.value,
+ text: t.text
+ }))
+
+ return {
+ source,
+ layerData: [{
+ name: 'text',
+ label: keyItem.label || '',
+ value: keyItem.value || ''
+ },
+ {
+ name: 'value',
+ label: valueItem.label || '',
+ value: valueItem.value || ''
+ }
+ ]
+ }
+ } else {
+ // dataSource 不为 0,使用数据源,需要请求接口,并且提取出显示字段和实际字段
+ const [code] = schemeItem.dataSourceId.split(',')
+ const sourceData = await this.FETCH_DATASOURCE(code)
+ if (!sourceData) {
+ return []
+ }
+
+ const source = sourceData.data
+
+ return {
+ source,
+ layerData: schemeItem.layerData.filter(t => (!t.hide) && (t.value || t.label))
+ }
+ }
+ }
+
+ return []
+ },
+
+ /**
+ * 获取一个 scheme 表单项的默认值 (用户新建表单时使用,或是编辑草稿)
+ * 参数: 单个 schemeItem , { processId }
+ *
+ * 每种类别的表单项分别获取的默认值:
+ *
+ * currentInfo: 根据类别取当前用户/部门/公司/时间日期
+ * datetime: 根据 dfValue 字段表示昨天/今天/明天,格式化为字符串
+ * radio、select: 有 dfValue 则使用,否则取第一条
+ * checkbox: 有 dfValue 则使用,否则为空数组
+ * encode: 根据 rulecode 请求表单编码
+ * upload: 空数组
+ * guid: 赋值第二个参数中的 processId,但是如果在子表格中,赋空字符串
+ * girdtable: 递归所有表格项 scheme 依次为它们生成默认值
+ * datetimerange: 字符串 0
+ */
+ async getDefaultData(item, prop) {
+ const {
+ processId
+ } = prop
+ switch (item.type) {
+ case 'currentInfo':
+ switch (item.dataType) {
+ case 'user':
+ return this.GET_GLOBAL('loginUser').userId
+ case 'department':
+ return this.GET_GLOBAL('loginUser').departmentId
+ case 'company':
+ return this.GET_GLOBAL('loginUser').companyId
+ case 'time':
+ return moment().format('YYYY-MM-DD HH:mm:ss')
+ default:
+ return ''
+ }
+
+ case 'datetime':
+ const datetimeFormat = item.table ?
+ (Number(item.dateformat) === 0 ? 'YYYY-MM-DD' : 'YYYY-MM-DD HH:mm:ss') :
+ (item.datetime === 'datetime' ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD')
+ const today = moment()
+ const dfDatetime = [
+ today.subtract(1, 'day'),
+ today,
+ today.add(1, 'day')
+ ][Number(item.dfvalue)] || today
+
+ return dfDatetime.format(datetimeFormat) || ''
+
+ case 'radio':
+ case 'select':
+ const radioItem = item.__sourceData__.find(t => t.value === item.dfvalue) || item
+ .__sourceData__[0]
+ return item.type === 'radio' ? radioItem.value : ''
+
+ case 'checkbox':
+ if (!item.dfvalue) {
+ return []
+ }
+ return item.dfvalue.split(',').filter(t => item.__sourceData__.find(s => s.value === t))
+
+ case 'encode':
+ const result = await this.FETCH_ENCODE(item.rulecode)
+ return result
+
+ case 'upload':
+ return []
+
+ case 'guid':
+ return item.table ? processId : ''
+
+ case 'girdtable':
+ const tableItemObj = {}
+ for (const fieldItem of item.fieldsData) {
+ tableItemObj[fieldItem.field] = await this.getDefaultData(fieldItem, prop)
+ }
+ return this.COPY(tableItemObj)
+
+ case 'datetimerange':
+ return '0'
+
+ default:
+ return item.dfvalue || ''
+ }
+ },
+
+ /**
+ * 将单条 formData 值转化为 formValue 值 (拉取表单数据时使用)
+ * 参数: 单个 schemeItem , 数据值
+ *
+ * 具体执行逻辑:
+ * radio、select: 剔除无效值
+ * checkbox: 分割成数组并剔除无效值
+ * upload: 分割成数组,拉取其中所有文件的信息
+ * datetime: 按照时间日期格式进行格式化字符串
+ * 其他类型: 保留原值
+ */
+ async convertToFormValue(item, val) {
+ switch (item.type) {
+ case 'upload':
+ if (!val) {
+ return []
+ }
+ const uidList = val;
+ const fileList = []
+ const wxlist = await this.FETCH_FILEList(uidList);
+ for (const wxfile of wxlist) {
+ const fileInfo = await this.FETCH_FILEINFO(wxfile.F_Id)
+ if (!fileInfo) {
+ continue
+ }
+
+ const fileType = fileInfo.F_FileType
+ const fileSize = fileInfo.F_FileSize
+
+ const path = this.API + '/learun/adms/annexes/wxdown?' + this.URL_QUERY(wxfile.F_Id, true)
+ fileList.push({
+ path,
+ type: fileType,
+ uid:wxfile.F_Id,
+ folderId:wxfile.F_FolderId,
+ size: fileSize
+ })
+ }
+ return fileList
+
+ case 'select':
+ case 'radio':
+ if (!val || !item.__sourceData__.map(t => t.value).includes(val)) {
+ return ''
+ }
+ return val
+
+ case 'checkbox':
+ const validValue = item.__sourceData__.map(t => t.value)
+ const checkboxVal = val.split(',') || []
+ return checkboxVal.filter(t => validValue.includes(t))
+
+ case 'datetime':
+ if (!val) {
+ return ''
+ }
+ return moment(val).format(
+ Number(item.dateformat) === 0 || item.datetime === 'date' ?
+ 'YYYY-MM-DD' :
+ 'YYYY-MM-DD HH:mm:ss'
+ )
+
+ default:
+ return val || ''
+ }
+ },
+
+ /**
+ * 将一个 formValue 值转化为 post 提交值(提交表单数据时使用)
+ * 参数: 单个 schemeItem , 表单项值 , 所有 formValue , scheme
+ *
+ * 具体执行逻辑:
+ * checkbox: 将数组使用符号「,」逗号拼接成字符串
+ * datetimerange: 获取开始日期、结束日期,计算差值天数并保留整数
+ * datetime: 格式化为完整时间日期字符串
+ * upload: 依次上传文件,将返回的文件 ID 使用符号「,」逗号拼接成字符串
+ * 其他类型: 保留原值
+ */
+ async convertToPostData(item, val, formValue, scheme, guid) {
+ switch (item.type) {
+ case 'checkbox':
+ return val ? val.join(',') : ''
+
+ case 'datetimerange':
+ const startTime = get(formValue, scheme.find(t => t.id === item.startTime).__valuePath__, null)
+ const endTime = get(formValue, scheme.find(t => t.id === item.endTime).__valuePath__, null)
+ if (!startTime || !endTime || moment(endTime).isBefore(startTime)) {
+ return ''
+ } else {
+ return moment.duration(moment(endTime).diff(moment(startTime))).asDays().toFixed(0)
+ }
+
+ case 'datetime':
+ return val ? moment(val).format('YYYY-MM-DD HH:mm:ss') : ''
+
+ case 'upload':
+ var uploadUid = '';
+
+ for (const item of val) {
+ if (item.uid) {
+ uploadUid = item.uid
+ continue
+ }
+
+ const fileId = await this.HTTP_UPLOAD(item.path || item, undefined, guid || '')
+ if (fileId) {
+ uploadUid = fileId;
+ }
+ }
+
+ return uploadUid;
+
+ default:
+ return val || ''
+ }
+ }
+ }
}
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/common/custompage.js b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/common/custompage.js
index b48efc4f9..786db8dc0 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/common/custompage.js
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/common/custompage.js
@@ -1,3 +1,4 @@
+import { conforms } from 'lodash'
import get from 'lodash/get'
import omit from 'lodash/omit'
import moment from 'moment'
@@ -233,7 +234,11 @@ export default {
} else {
for (const [fieldName, scheme] of Object.entries(schemeItem)) {
const dataSource = get(this.dataSource, `${tableName}.${fieldName}`)
- data[tableName][fieldName] = await this.convertToFormValue(scheme, data[tableName][fieldName], dataSource)
+ if(data[tableName]){
+ data[tableName][fieldName] = await this.convertToFormValue(scheme, data[tableName][fieldName], dataSource)
+ }else{
+ this.scheme[tableName][fieldName] = await this.convertToFormValue(scheme, this.scheme[tableName][fieldName], dataSource)
+ }
}
}
}
@@ -257,7 +262,6 @@ export default {
const fileSize = fileInfo.F_FileSize
const path = this.API + '/learun/adms/annexes/wxdown?' + this.URL_QUERY(uid, true)
-
fileList.push({ path, type: fileType, uid, size: fileSize })
}
return fileList
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/common/mixins.js b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/common/mixins.js
index a796f6dac..c33aa8c52 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/common/mixins.js
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/common/mixins.js
@@ -229,6 +229,14 @@ export default {
return await this.HTTP_GET('learun/adms/annexes/wxfileinfo', fileId)
},
+ //获取文件夹下文件列表
+ async FETCH_FILEList(folderId) {
+ if (!folderId) {
+ return null
+ }
+
+ return await this.HTTP_GET('learun/adms/annexes/wxlist', folderId)
+ },
// 封装的 GET 请求,集成了验证信息
// 返回请求结果或 null
@@ -258,8 +266,8 @@ export default {
// url 为请求地址
// filePath 为临时文件的路径
// formData 为请求附带的提交数据
- async HTTP_UPLOAD(filePath, formData) {
- const [err, res] = await this.UPLOAD('/learun/adms/annexes/wxupload', filePath, formData)
+ async HTTP_UPLOAD(filePath, formData,guid) {
+ const [err, res] = await this.UPLOAD('/learun/adms/annexes/wxupload', filePath, formData,guid)
return this.handleResult(err, res)
},
@@ -308,11 +316,12 @@ export default {
// 返回结果是一个数组: [error, result]
// error 表示错误,一般是网络错误,请求很可能根本没有发出
// result 包含 { statusCode, data } 分别表示状态码、接口返回的数据
- async UPLOAD(url, filePath, formData) {
+ async UPLOAD(url, filePath, formData,guid) {
const uploadUrl = this.handleUrl(url)
const query = {
loginMark: this.getLoginMark(),
- token: this.GET_GLOBAL('token')
+ token: this.GET_GLOBAL('token'),
+ folderId:guid
}
if (formData && typeof formData === 'object') {
@@ -683,13 +692,13 @@ export default {
if(result.data.code != 200){
uni.hideLoading()
uni.showToast({
- title: tips||result.data.info||"未知错误",
+ title: result.data.info,
icon: 'none'
})
return null
}
- return result.data.data||true
+ return result.data.data
},
// 【即将废弃】请使用 this.CONFIG() 来替代
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/components/learun-app/customform.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/components/learun-app/customform.vue
index 9ff9a6f73..3dafa1ce7 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/components/learun-app/customform.vue
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/components/learun-app/customform.vue
@@ -194,12 +194,14 @@ export default {
// 依次验证表单项,返回一个所有错误提示的数组,如果为空数组则表示无错误
verifyValue() {
const errorList = []
-
+ console.log(this.scheme)
this.scheme
.filter(t => t.verify)
.forEach(schemeItem => {
if (schemeItem.table && schemeItem.field) {
+ console.log(schemeItem.verify,'hemeItem.verify')
const verifyFunc = this.verify[schemeItem.verify]
+ console.log(schemeItem.verify)
const verifyResult = verifyFunc(this.getValue(schemeItem.__valuePath__))
if (verifyResult !== true) {
errorList.push(`[${schemeItem.title}]: ${verifyResult}`)
@@ -304,7 +306,8 @@ export default {
MobileOrPhoneOrNull: t =>
t.length <= 0 || /^1[0-9]{10}$/.test(t) || /^[+0-9- ]*$/.test(t) || '须留空或符合手机/电话号码格式',
Uri: t => /^[a-zA-z]+:\/\/[^\s]*$/.test(t) || '须符合网址Url格式',
- UriOrNull: t => t.length <= 0 || /^[a-zA-z]+:\/\/[^\s]*$/.test(t) || '须留空或符合网址Url格式'
+ UriOrNull: t => t.length <= 0 || /^[a-zA-z]+:\/\/[^\s]*$/.test(t) || '须留空或符合网址Url格式',
+ PositiveFloatint:t=> /^([1-9]\d*|(0|[1-9]\d*)\.\d*[1-9])$/.test(t) || '请输入正确的整数或小数(不能为零和负数)'
}
}
}
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/components/learun-app/upload-file.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/components/learun-app/upload-file.vue
index 969f835be..e2300312a 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/components/learun-app/upload-file.vue
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/components/learun-app/upload-file.vue
@@ -89,7 +89,7 @@ export default {
// #endif
// #ifndef MP-DINGTALK
- uni.chooseImage({
+ uni.chooseFile({
count: Number(this.number),
sizeType: ['original', 'compressed'],
sourceType: ['album', 'camera'],
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/components/upload-file.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/components/upload-file.vue
index 6927690a6..f3947f199 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/components/upload-file.vue
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/components/upload-file.vue
@@ -1,296 +1,293 @@
-
-
-
-
-
-
- {{item.name}}
-
-
-
-
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/EducationalAdministration/Thermography/measure/list.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/EducationalAdministration/Thermography/measure/list.vue
index 72b52976c..c227fb63f 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/EducationalAdministration/Thermography/measure/list.vue
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/EducationalAdministration/Thermography/measure/list.vue
@@ -508,6 +508,7 @@ export default{
text-align: center;
font-size: 14px;
color: #1a1a1a;
+ background-color: #ffffff;
}
.timeTableAlertLi.active {
@@ -518,10 +519,6 @@ export default{
background-color: #fbfdff;
}
-.timeTableAlertLi:nth-child(2n - 1) {
- background-color: #ffffff;
-}
-
#MeasureTime {
text-align: center;
}
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/login.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/login.vue
index 93c2abbfc..a6170c951 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/login.vue
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/login.vue
@@ -273,7 +273,7 @@ page {
.otherLogin{
display: flex;
- justify-content: right;
+ justify-content: flex-end;
.textBtn{
width: 100px;
color: #606266;
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/msg.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/msg.vue
index bd59cb137..58981285d 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/msg.vue
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/msg.vue
@@ -132,7 +132,7 @@ export default {
return null
}
- return this.API + `/user/img?data=${item.F_OtherUserId}`
+ return this.API + `/learun/adms/user/img?data=${item.F_OtherUserId}`
}
},
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/msg/chat.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/msg/chat.vue
index 1b8e6bd8a..0cebe305f 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/msg/chat.vue
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/msg/chat.vue
@@ -186,7 +186,7 @@ export default {
// 获取用户头像图片 url
avatar(id) {
- return id === this.chatUserId && this.isSystem ? null : this.API + `/user/img?data=${id}`
+ return id === this.chatUserId && this.isSystem ? null : this.API + `/learun/adms/user/img?data=${id}`
}
},
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/my.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/my.vue
index 0ae3c6381..7774d7de3 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/my.vue
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/my.vue
@@ -156,7 +156,7 @@ export default {
return ''
}
- return this.API + `/user/img?data=${this.currentUser.userId}`
+ return this.API + `/learun/adms/user/img?data=${this.currentUser.userId}`
}
},
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/my/info.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/my/info.vue
index 1b87fb850..93b978381 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/my/info.vue
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/my/info.vue
@@ -34,7 +34,7 @@ export default {
// 头像图片 url
avatarSrc() {
- return this.API + `/user/img?data=${this.currentUser.userId}`
+ return this.API + `/learun/adms/user/img?data=${this.currentUser.userId}`
}
}
}
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/my/qrcode.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/my/qrcode.vue
index 272bde806..3297a7881 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/my/qrcode.vue
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/my/qrcode.vue
@@ -30,7 +30,7 @@ export default {
// 头像图片 url
avatar() {
- return this.API + `/user/img?data=${this.currentUser.userId}`
+ return this.API + `/learun/adms/user/img?data=${this.currentUser.userId}`
},
// 用户公司部门 tag
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/myAttendance/single.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/myAttendance/single.vue
index db1c4bdef..a6e26cce8 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/myAttendance/single.vue
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/myAttendance/single.vue
@@ -38,7 +38,7 @@
-
+
{{ k.Sort }}
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/nworkflow/myflow/single.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/nworkflow/myflow/single.vue
index f4f45cbed..eca58e1be 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/nworkflow/myflow/single.vue
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/nworkflow/myflow/single.vue
@@ -95,14 +95,15 @@ export default {
// t.formId 使用表单,根据这个 formId 来获取 scheme 等信息
// t.appurl 使用移动页面,直接跳转到本地的页面;表单结构等均写死在页面里
const { wfForms } = this.currentNode
- console.log(wfForms);
-
// 处理没有有效表单的情况,停止加载
if (!wfForms || wfForms.every(t => !t.formId && !t.appurl)) {
this.HIDE_LOADING()
this.TOAST('移动表单数据(wfForms)中无有效表单')
return
}
+
+ const fetchFolderkeyData=await this.fetchFolderkeyData(this.currentNode , this.processId);
+ uni.setStorageSync('guids',JSON.stringify(fetchFolderkeyData));
// 处理移动端本地表单(也就是系统表单)的情况,直接跳转过去
const appSysPage = wfForms.find(t => t.appurl)
@@ -151,8 +152,6 @@ export default {
// 不是子流程,可以直接渲染
const schemeData = await this.fetchSchemeData(this.currentNode)
const formData = await this.fetchFormData(this.currentNode, this.processId)
- console.log(schemeData)
- console.log(formData)
const { formValue, scheme, rel } = await this.getCustomForm({
formData,
schemeData,
@@ -161,7 +160,6 @@ export default {
code: null
})
this.scheme = scheme
- console.log(scheme)
this.formValue = formValue
this.rel = rel
}
@@ -201,7 +199,7 @@ export default {
return
}
this.LOADING(`提交${actionText}中…`)
- this.HTTP_POST(`/newwf${actionUrl}`, actionData, `提交${actionText}失败`).then(success => {
+ this.HTTP_POST(`/learun/adms/newwf${actionUrl}`, actionData, `提交${actionText}失败`).then(success => {
this.HIDE_LOADING()
if (success) {
this.EMIT('task-list-change')
@@ -220,7 +218,7 @@ export default {
this.LOADING('正在提交…')
const draftFormValue = this.$refs.form.getFormValue()
const draftPostData = await this.getPostData(draftFormValue, this.scheme)
- this.HTTP_POST('/newwf/draft', draftPostData, '提交草稿失败').then(success => {
+ this.HTTP_POST('/learun/adms/newwf/draft', draftPostData, '提交草稿失败').then(success => {
this.HIDE_LOADING()
if (success) {
this.EMIT('task-list-change')
@@ -249,7 +247,7 @@ export default {
postData.parentTaskId = this.taskId
}
const errorTips = '流程发起失败'
- this.HTTP_POST('/newwf/createchildflow', postData, errorTips).then(success => {
+ this.HTTP_POST('/learun/adms/newwf/createchildflow', postData, errorTips).then(success => {
this.HIDE_LOADING()
if (success) {
this.EMIT('task-list-change')
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/nworkflow/releasetask/single.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/nworkflow/releasetask/single.vue
index 7691f9422..f8269c91d 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/nworkflow/releasetask/single.vue
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/nworkflow/releasetask/single.vue
@@ -110,7 +110,10 @@ export default {
this.needTitle = this.type !== 'again' && Number(currentNode.isTitle) === 1
const formData = await this.fetchFormData(currentNode, processId)
- const schemeData = await this.fetchSchemeData(currentNode)
+
+ const schemeData = await this.fetchSchemeData(currentNode);
+ const fetchFolderkeyData=await this.fetchFolderkeyData(currentNode, processId);
+ uni.setStorageSync('guids',JSON.stringify(fetchFolderkeyData));
const { formValue, scheme, rel } = await this.getCustomForm({
schemeData,
processId,
@@ -119,14 +122,15 @@ export default {
code: this.type === 'again' ? null : code,
useDefault: true
})
+
this.rel = rel
this.scheme = scheme
this.formValue = formValue
this.code = code
this.processId = processId
-
this.ready = true
this.HIDE_LOADING()
+
},
// 提交草稿按钮
@@ -153,9 +157,10 @@ export default {
// 发起流程按钮
async submit() {
const isAgain = this.type === 'again'
-
+
// 先验证表单,验证不通过则提示
const verifyResult = this.verifyValue()
+
if (verifyResult.length > 0) {
this.CONFIRM('表单验证失败', verifyResult.join('\n'))
return
@@ -191,6 +196,7 @@ export default {
// 获取表单验证结果,是一个包含错误信息的数组,长度为 0 则没有错误
verifyValue() {
+
const errList = this.$refs.form.verifyValue()
if (this.needTitle && !this.title) {
errList.push(`流程的标题不能为空`)
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/nworkflow/workflow.js b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/nworkflow/workflow.js
index c3689c50f..d53429cf3 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/nworkflow/workflow.js
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/nworkflow/workflow.js
@@ -32,298 +32,383 @@ import customForm from '@/common/customform.js'
* (以上只是简单介绍;实际使用中,如果打开子流程,需要拉取父/子两个流程信息)
*/
export default {
- mixins: [customForm],
-
- methods: {
- /**
- * 从流程信息中生成 scheme、formValue
- * 参数: { schemeData (必填), processId, currentNode, formData (新建时为 null), code, useDefault }
- * 返回: { scheme, formValue, rel }
- *
- * 参数:
- * schemeData: 使用 fetchSchemeData 方法拉取到的原始 scheme 数据,未经过格式化处理
- * processId: 表单 GUID;如果是新建表单,可以用 this.GUID('-') 生成一个
- * currentNode: 使用 getCurrentNode 方法拉取到的当前节点信息,用于权限控制
- * formData: 填入表单的表单值,新建表单时此项为 null 即可
- * code: 表单编号 code,会被赋值到返回的 formValue.code;重新发起流程的场合赋 null
- * useDefault: 如果 formData 中某一项为空,是否对这一项填入默认值;通常在编辑草稿时启用
- *
- * 该方法返回的 scheme 项可能带有以下属性:
- * __valuePath__: 表单值在 formValue 中的路径,使用 lodash 的 get、set 方法即可读写
- * __sourceData__: 表单值的选单数据
- * __defaultItem__: 类型为 girdtable 的表单项带有此属性,表示添加一行表格时候表格项的默认值
- * __schemeIndex__: (暂时用不到)表单项位于 schemeData 根级内的第几个子项中
- * __dataIndex__: (暂时用不到)表单项位于 F_Scheme.data 中的第几个子项中
- */
- async getCustomForm(prop) {
- const { schemeData, formData, currentNode, code, processId, useDefault } = prop
-
- // 处理字段之间的级联、绑定关系
- // 需要绑定 change 事件的:
- // datetime: 修改后重新计算 datetimerange
- // organize: 修改后重设级联到该组件的其他组件的值,user 一级无需处理
- // 需要绑定某值的:
- // organize: 级联到某个组件,company 一级无需处理
- const schemeRef = {}
- const refList = []
-
- // 最终返回值:scheme、rel、formValue
- const scheme = []
- const rel = {}
- const formValue = { processId, formreq: [] }
- if (code) {
- formValue.code = code
- }
-
- // 遍历 schemeData 中所有的 scheme
- const schemeList = Array.isArray(schemeData) ? schemeData : Object.values(schemeData)
- for (let schemeIndex = 0; schemeIndex < schemeList.length; ++schemeIndex) {
- const schemeItem = schemeList[schemeIndex]
- schemeItem.F_Scheme = JSON.parse(schemeItem.F_Scheme)
- // 已有表单值的时候,舍弃掉不存在表单值中的 scheme
- if (formData && !formData[schemeItem.F_SchemeInfoId]) {
- continue
- }
-
- // 设置 formreq 的内容,非新建模式下需要设置 keyValue
- const { formId, field } = get(currentNode, `wfForms.${schemeIndex}`, {})
- const formreqObj = { schemeInfoId: formId, processIdName: field, formData: {} }
- if (formData) {
- if (Object.values(get(formData, `${schemeItem.F_SchemeInfoId}`, {})).some(t => t && t.length > 0)) {
- formreqObj.keyValue = processId
- }
- }
- formValue.formreq[schemeIndex] = formreqObj
-
- for (let dataIndex = 0; dataIndex < schemeItem.F_Scheme.data.length; ++dataIndex) {
- const { componts } = schemeItem.F_Scheme.data[dataIndex]
- for (const t of componts) {
- // 之后的 t 即表示每个 scheme 项
- t.__valuePath__ = `formreq.${schemeIndex}.formData.${t.id}`
- // 以下两个属性暂时用不到
- t.__schemeIndex__ = schemeIndex
- t.__dataIndex__ = dataIndex
-
- if (t.type === 'girdtable' && t.table) {
- // 数据项是表格的情况
- // 先设置源数据,不然无法获取默认值
- for (const fieldItem of t.fieldsData) {
- fieldItem.__sourceData__ = await this.getSourceData(fieldItem)
- }
- t.__defaultItem__ = await this.getDefaultData(t, prop)
- if (formData) {
- // 有表单值的情况,从表单值中获取数据
- const val = []
- for (const valueItem of get(formData, `${schemeItem.F_SchemeInfoId}.${t.table}`, [])) {
- const tableItemValue = {}
- for (const fieldItem of t.fieldsData.filter(t => t.field)) {
- const formDataValue = get(valueItem, fieldItem.field.toLowerCase())
- tableItemValue[fieldItem.field] = await this.convertToFormValue(fieldItem, formDataValue)
- }
-
- val.push(tableItemValue)
- }
-
- // useDefault 表示在从 formData 取不到值的时候使用默认值
- if ((!val || val.length <= 0) && useDefault) {
- set(formValue, t.__valuePath__, [this.COPY(t.__defaultItem__)])
- } else {
- set(formValue, t.__valuePath__, val)
- }
-
- } else {
- // 无表单值的情况,默认值
- set(formValue, t.__valuePath__, [this.COPY(t.__defaultItem__)])
- }
-
- } else if (t.field) {
- // 数据项不是表格的情况
- // 先设置源数据,不然无法获取默认值
- t.__sourceData__ = await this.getSourceData(t)
- if (formData) {
- // 有表单值的情况,从表单值中获取数据
- const path = `${schemeItem.F_SchemeInfoId}.${t.table}.${dataIndex}.${t.field.toLowerCase()}`
- const formDataValue = get(formData, path)
-
- // useDefault 表示在从 formData 取不到值的时候使用默认值
- if (!formDataValue && useDefault) {
- set(formValue, t.__valuePath__, await this.getDefaultData(t, prop))
- } else {
- set(formValue, t.__valuePath__, await this.convertToFormValue(t, formDataValue))
- }
-
- } else {
- // 无表单值的情况,默认值
- set(formValue, t.__valuePath__, await this.getDefaultData(t, prop))
- }
- }
-
- // 权限控制
- const authObj = get(currentNode, `wfForms.${schemeIndex}.authorize.${t.id}`, {})
- t.edit = authObj.isEdit
- if (Number(t.isHide) !== 1 && authObj.isLook !== 0) {
- // 加入 scheme
- scheme.push(t)
-
- // organize、datetime 可能作为其他 organize 或 datetimerange 的依赖项,引用它们
- if (['organize', 'datetime'].includes(t.type)) {
- schemeRef[t.id] = t
- }
-
- // datetimerange、带有 relation 级联字段的 organize,依赖其他项
- if ((t.type === 'datetimerange' && t.startTime && t.endTime) || (t.type === 'organize' && t.relation)) {
- refList.push(t)
- }
- }
- }
- }
- }
-
- // 依次处理表单关联
- refList.forEach(t => {
- if (t.type === 'organize') {
- // 处理组件结构级联
- // 给当前组件赋上级级联的值路径 __relationPath__
- const parent = schemeRef[t.relation]
- t.__relationPath__ = parent.__valuePath__
- // 给上级级联的组件注册自动重置当前组件的 change 事件
- const relItem = { type: 'organize', id: t.id, path: t.__valuePath__ }
- rel[parent.id] = rel[parent.id] ? rel[parent.id].concat(relItem) : [relItem]
-
- } else if (t.type === 'datetimerange') {
- // 处理日期区间
- const start = schemeRef[t.startTime]
- const end = schemeRef[t.endTime]
-
- const relItem = {
- type: 'datetimerange',
- path: t.__valuePath__,
- id: t.id,
- startPath: start.__valuePath__,
- endPath: end.__valuePath__,
- }
-
- rel[start.id] = rel[start.id] ? rel[start.id].concat(relItem) : [relItem]
- rel[end.id] = rel[end.id] ? rel[end.id].concat(relItem) : [relItem]
-
- }
- })
-
- return { scheme, formValue, rel }
- },
-
- /**
- * 获取最终需要 POST 的数据
- * 参数:formValue, scheme
- * 返回:用于提交的数据
- *
- * 遍历 formValue,将其中的表单值依次使用 convertToPostData 这个方法转化为提交值
- */
- async getPostData(originFormValue, scheme) {
- const formValue = this.COPY(originFormValue)
-
- // 依次按照 scheme 项目遍历
- for (const item of scheme) {
- if (item.field) {
- // 不是表格的情况
- const path = item.__valuePath__
- const val = get(formValue, path)
- const result = await this.convertToPostData(item, val, originFormValue, scheme)
- set(formValue, path, result)
-
- } else if (item.table && item.fieldsData) {
- // 是表格的情况
- const tableValue = get(formValue, item.__valuePath__, [])
- for (let valueIndex = 0; valueIndex < tableValue.length; ++valueIndex) {
- for (const schemeItem of item.fieldsData) {
- const path = `${item.__valuePath__}.${valueIndex}.${schemeItem.field}`
- const val = get(formValue, path)
- const result = await this.convertToPostData(schemeItem, val, originFormValue, scheme)
- set(formValue, path, result)
- }
- }
- }
- }
-
- formValue.formreq.forEach(t => { t.formData = JSON.stringify(t.formData) })
- formValue.formreq = JSON.stringify(formValue.formreq)
-
- return formValue
- },
-
- /**
- * 获取流程信息
- * 参数: { code, processId, taskId }
- *
- */
- async fetchProcessInfo({ code, processId, taskId }) {
- const url = processId ? 'learun/adms/newwf/processinfo' : 'learun/adms/newwf/scheme'
- const reqObj = { processId }
- if (taskId) {
- reqObj.taskId = taskId
- }
- const data = processId ? reqObj : code
- const result = await this.HTTP_GET(url, data)
-
- if (!result) { return {} }
-
- if (result.info) {
- result.info.Scheme = JSON.parse(result.info.Scheme)
- } else if (result.F_Content) {
- result.F_Content = JSON.parse(result.F_Content)
- }
-
- return result
- },
-
- /**
- * 从 processInfo 流程信息中,提取出 currentNode
- * 参数: processInfo
- *
- */
- getCurrentNode(processInfo) {
- if (processInfo.info) {
- return processInfo.info.Scheme.nodes.find(t => t.id === processInfo.info.CurrentNodeId)
- } else if (processInfo.F_Content) {
- return processInfo.F_Content.nodes.find(t => t.type === 'startround')
- }
-
- return {}
- },
-
- /**
- * 拉取表单的 schemeData
- * 参数: currentNode
- *
- * 从当前节点 currentNode 中提取出表单 id,然后自 API 地址 /form/scheme 中拉取表单数据并返回
- */
- async fetchSchemeData(currentNode, currentTask, type) {
- const { wfForms } = currentNode
-
- const data = wfForms.filter(t => t.formId).map(t => ({ id: t.formId, ver: '' }))
- const schemeData = await this.HTTP_GET('learun/adms/form/scheme', data)
-
- return schemeData || {}
- },
-
- /**
- * 拉取表单的 formData
- * 参数: currentNode, keyValue
- *
- * 提取当前节点信息、表单主键信息,从 API 地址 /form/data 中拉取表单数据
- */
- async fetchFormData({ wfForms }, keyValue) {
- const reqData = wfForms
- .filter(t => t.formId)
- .map(t => ({
- schemeInfoId: t.formId,
- processIdName: t.field,
- keyValue
- }))
-
- const formData = await this.HTTP_GET('learun/adms/form/data', reqData)
-
- return formData || {}
- }
- }
+ mixins: [customForm],
+
+ methods: {
+ /**
+ * 从流程信息中生成 scheme、formValue
+ * 参数: { schemeData (必填), processId, currentNode, formData (新建时为 null), code, useDefault }
+ * 返回: { scheme, formValue, rel }
+ *
+ * 参数:
+ * schemeData: 使用 fetchSchemeData 方法拉取到的原始 scheme 数据,未经过格式化处理
+ * processId: 表单 GUID;如果是新建表单,可以用 this.GUID('-') 生成一个
+ * currentNode: 使用 getCurrentNode 方法拉取到的当前节点信息,用于权限控制
+ * formData: 填入表单的表单值,新建表单时此项为 null 即可
+ * code: 表单编号 code,会被赋值到返回的 formValue.code;重新发起流程的场合赋 null
+ * useDefault: 如果 formData 中某一项为空,是否对这一项填入默认值;通常在编辑草稿时启用
+ *
+ * 该方法返回的 scheme 项可能带有以下属性:
+ * __valuePath__: 表单值在 formValue 中的路径,使用 lodash 的 get、set 方法即可读写
+ * __sourceData__: 表单值的选单数据
+ * __defaultItem__: 类型为 girdtable 的表单项带有此属性,表示添加一行表格时候表格项的默认值
+ * __schemeIndex__: (暂时用不到)表单项位于 schemeData 根级内的第几个子项中
+ * __dataIndex__: (暂时用不到)表单项位于 F_Scheme.data 中的第几个子项中
+ */
+ async getCustomForm(prop) {
+ const {
+ schemeData,
+ formData,
+ currentNode,
+ code,
+ processId,
+ useDefault
+ } = prop
+ // 处理字段之间的级联、绑定关系
+ // 需要绑定 change 事件的:
+ // datetime: 修改后重新计算 datetimerange
+ // organize: 修改后重设级联到该组件的其他组件的值,user 一级无需处理
+ // 需要绑定某值的:
+ // organize: 级联到某个组件,company 一级无需处理
+ const schemeRef = {}
+ const refList = []
+
+ // 最终返回值:scheme、rel、formValue
+ const scheme = []
+ const rel = {}
+ const formValue = {
+ processId,
+ formreq: []
+ }
+ if (code) {
+ formValue.code = code
+ }
+
+ // 遍历 schemeData 中所有的 scheme
+ const schemeList = Array.isArray(schemeData) ? schemeData : Object.values(schemeData)
+ for (let schemeIndex = 0; schemeIndex < schemeList.length; ++schemeIndex) {
+
+ const schemeItem = schemeList[schemeIndex]
+ schemeItem.F_Scheme = JSON.parse(schemeItem.F_Scheme)
+ // 已有表单值的时候,舍弃掉不存在表单值中的 scheme
+ if (formData && !formData[schemeItem.F_SchemeInfoId]) {
+ continue
+ }
+
+ // 设置 formreq 的内容,非新建模式下需要设置 keyValue
+ const {
+ formId,
+ field
+ } = get(currentNode, `wfForms.${schemeIndex}`, {})
+ const formreqObj = {
+ schemeInfoId: formId,
+ processIdName: field,
+ formData: {}
+ }
+ if (formData) {
+ if (Object.values(get(formData, `${schemeItem.F_SchemeInfoId}`, {})).some(t => t && t.length >
+ 0)) {
+ formreqObj.keyValue = processId
+ }
+ }
+ formValue.formreq[schemeIndex] = formreqObj
+
+ for (let dataIndex = 0; dataIndex < schemeItem.F_Scheme.data.length; ++dataIndex) {
+ const {
+ componts
+ } = schemeItem.F_Scheme.data[dataIndex]
+ for (const t of componts) {
+ // 之后的 t 即表示每个 scheme 项
+ t.__valuePath__ = `formreq.${schemeIndex}.formData.${t.id}`
+ // 以下两个属性暂时用不到
+ t.__schemeIndex__ = schemeIndex
+ t.__dataIndex__ = dataIndex
+
+ if (t.type === 'girdtable' && t.table) {
+ // 数据项是表格的情况
+ // 先设置源数据,不然无法获取默认值
+ for (const fieldItem of t.fieldsData) {
+ fieldItem.__sourceData__ = await this.getSourceData(fieldItem)
+ }
+ t.__defaultItem__ = await this.getDefaultData(t, prop)
+ if (formData) {
+ // 有表单值的情况,从表单值中获取数据
+ const val = []
+ for (const valueItem of get(formData, `${schemeItem.F_SchemeInfoId}.${t.table}`,
+ [])) {
+ const tableItemValue = {}
+ for (const fieldItem of t.fieldsData.filter(t => t.field)) {
+ const formDataValue = get(valueItem, fieldItem.field.toLowerCase())
+ tableItemValue[fieldItem.field] = await this.convertToFormValue(fieldItem,
+ formDataValue)
+ }
+
+ val.push(tableItemValue)
+ }
+
+ // useDefault 表示在从 formData 取不到值的时候使用默认值
+ if ((!val || val.length <= 0) && useDefault) {
+ set(formValue, t.__valuePath__, [this.COPY(t.__defaultItem__)])
+ } else {
+ set(formValue, t.__valuePath__, val)
+ }
+
+ } else {
+ // 无表单值的情况,默认值
+ set(formValue, t.__valuePath__, [this.COPY(t.__defaultItem__)])
+ }
+
+ } else if (t.field) {
+ // 数据项不是表格的情况
+ // 先设置源数据,不然无法获取默认值
+ t.__sourceData__ = await this.getSourceData(t)
+ if (formData) {
+ // 有表单值的情况,从表单值中获取数据
+ const path =
+ `${schemeItem.F_SchemeInfoId}.${t.table}.${dataIndex}.${t.field.toLowerCase()}`
+ const formDataValue = get(formData, path)
+
+ // useDefault 表示在从 formData 取不到值的时候使用默认值
+ if (!formDataValue && useDefault) {
+ set(formValue, t.__valuePath__, await this.getDefaultData(t, prop))
+ } else {
+ set(formValue, t.__valuePath__, await this.convertToFormValue(t, formDataValue))
+ }
+
+ } else {
+ // 无表单值的情况,默认值
+ set(formValue, t.__valuePath__, await this.getDefaultData(t, prop))
+ }
+ }
+
+ // 权限控制
+ const authObj = get(currentNode, `wfForms.${schemeIndex}.authorize.${t.id}`, {})
+ t.edit = authObj.isEdit
+ if (Number(t.isHide) !== 1 && authObj.isLook !== 0) {
+ // 加入 scheme
+ scheme.push(t)
+
+ // organize、datetime 可能作为其他 organize 或 datetimerange 的依赖项,引用它们
+ if (['organize', 'datetime'].includes(t.type)) {
+ schemeRef[t.id] = t
+ }
+
+ // datetimerange、带有 relation 级联字段的 organize,依赖其他项
+ if ((t.type === 'datetimerange' && t.startTime && t.endTime) || (t.type ===
+ 'organize' && t.relation)) {
+ refList.push(t)
+ }
+ }
+ }
+ }
+ }
+
+ // 依次处理表单关联
+ refList.forEach(t => {
+ if (t.type === 'organize') {
+ // 处理组件结构级联
+ // 给当前组件赋上级级联的值路径 __relationPath__
+ const parent = schemeRef[t.relation]
+ t.__relationPath__ = parent.__valuePath__
+ // 给上级级联的组件注册自动重置当前组件的 change 事件
+ const relItem = {
+ type: 'organize',
+ id: t.id,
+ path: t.__valuePath__
+ }
+ rel[parent.id] = rel[parent.id] ? rel[parent.id].concat(relItem) : [relItem]
+
+ } else if (t.type === 'datetimerange') {
+ // 处理日期区间
+ const start = schemeRef[t.startTime]
+ const end = schemeRef[t.endTime]
+
+ const relItem = {
+ type: 'datetimerange',
+ path: t.__valuePath__,
+ id: t.id,
+ startPath: start.__valuePath__,
+ endPath: end.__valuePath__,
+ }
+
+ rel[start.id] = rel[start.id] ? rel[start.id].concat(relItem) : [relItem]
+ rel[end.id] = rel[end.id] ? rel[end.id].concat(relItem) : [relItem]
+
+ }
+ })
+
+ return {
+ scheme,
+ formValue,
+ rel
+ }
+ },
+ newguid() {
+ return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+ var r = Math.random() * 16 | 0,
+ v = c == 'x' ? r : (r & 0x3 | 0x8);
+ return v.toString(16);
+ });
+ },
+ /**
+ * 获取最终需要 POST 的数据
+ * 参数:formValue, scheme
+ * 返回:用于提交的数据
+ *
+ * 遍历 formValue,将其中的表单值依次使用 convertToPostData 这个方法转化为提交值
+ */
+ async getPostData(originFormValue, scheme) {
+ const formValue = this.COPY(originFormValue)
+ // 依次按照 scheme 项目遍历
+ for (const item of scheme) {
+ if (item.field) {
+ // 不是表格的情况
+ const path = item.__valuePath__
+ const val = get(formValue, path)
+
+ if (item.type == 'upload') {
+ // 先生成一个guid
+ var guid = this.newguid();
+ // 取出当前列对应的labelId
+ var labeId = item.id
+ // 从缓存取出当前审批流程所有的guid
+ var guids = JSON.parse(uni.getStorageSync('guids'))
+ if (guids&&JSON.stringify(guids)!=='{}') {
+ guid = guids[labeId]
+ }
+ }
+ const result = await this.convertToPostData(item, val, originFormValue, scheme, guid)
+ set(formValue, path, result)
+
+ } else if (item.table && item.fieldsData) {
+ // 是表格的情况
+ const tableValue = get(formValue, item.__valuePath__, [])
+ for (let valueIndex = 0; valueIndex < tableValue.length; ++valueIndex) {
+ for (const schemeItem of item.fieldsData) {
+ const path = `${item.__valuePath__}.${valueIndex}.${schemeItem.field}`
+ const val = get(formValue, path)
+
+ const result = await this.convertToPostData(schemeItem, val, originFormValue, scheme,
+ guid)
+ set(formValue, path, result)
+ }
+ }
+ }
+ }
+
+ formValue.formreq.forEach(t => {
+ t.formData = JSON.stringify(t.formData)
+ })
+ formValue.formreq = JSON.stringify(formValue.formreq)
+
+ return formValue
+ },
+
+ /**
+ * 获取流程信息
+ * 参数: { code, processId, taskId }
+ *
+ */
+ async fetchProcessInfo({
+ code,
+ processId,
+ taskId
+ }) {
+ const url = processId ? 'learun/adms/newwf/processinfo' : 'learun/adms/newwf/scheme'
+ const reqObj = {
+ processId
+ }
+ if (taskId) {
+ reqObj.taskId = taskId
+ }
+ const data = processId ? reqObj : code
+ const result = await this.HTTP_GET(url, data)
+
+ if (!result) {
+ return {}
+ }
+
+ if (result.info) {
+ result.info.Scheme = JSON.parse(result.info.Scheme)
+ } else if (result.F_Content) {
+ result.F_Content = JSON.parse(result.F_Content)
+ }
+
+ return result
+ },
+
+ /**
+ * 从 processInfo 流程信息中,提取出 currentNode
+ * 参数: processInfo
+ *
+ */
+ getCurrentNode(processInfo) {
+ if (processInfo.info) {
+ return processInfo.info.Scheme.nodes.find(t => t.id === processInfo.info.CurrentNodeId)
+ } else if (processInfo.F_Content) {
+ return processInfo.F_Content.nodes.find(t => t.type === 'startround')
+ }
+
+ return {}
+ },
+
+ /**
+ * 拉取表单的 schemeData
+ * 参数: currentNode
+ *
+ * 从当前节点 currentNode 中提取出表单 id,然后自 API 地址 /form/scheme 中拉取表单数据并返回
+ */
+ async fetchSchemeData(currentNode, currentTask, type) {
+ const {
+ wfForms
+ } = currentNode
+
+ const data = wfForms.filter(t => t.formId).map(t => ({
+ id: t.formId,
+ ver: ''
+ }))
+ const schemeData = await this.HTTP_GET('learun/adms/form/scheme', data)
+
+ return schemeData || {}
+ },
+
+ /**
+ * 拉取表单的 formData
+ * 参数: currentNode, keyValue
+ *
+ * 提取当前节点信息、表单主键信息,从 API 地址 /form/data 中拉取表单数据
+ */
+ async fetchFormData({
+ wfForms
+ }, keyValue) {
+ const reqData = wfForms
+ .filter(t => t.formId)
+ .map(t => ({
+ schemeInfoId: t.formId,
+ processIdName: t.field,
+ keyValue
+ }))
+
+ const formData = await this.HTTP_GET('learun/adms/form/data', reqData)
+
+ return formData || {}
+ },
+ async fetchFolderkeyData(currentNode, keyValue) {
+ const {
+ wfForms
+ } = currentNode
+
+ const reqData = wfForms
+ .filter(t => t.formId)
+ .map(t => ({
+ id: t.formId,
+ ver: '',
+ schemeInfoId: t.formId,
+ processIdName: t.field,
+ keyValue
+ }))
+ const folderkeyData = await this.HTTP_GET('learun/adms/form/folderkey', reqData)
+ return folderkeyData || {}
+ },
+ }
}
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/onlienpay/list.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/onlienpay/list.vue
index 12e6bc94c..6d4a550f6 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/onlienpay/list.vue
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/onlienpay/list.vue
@@ -14,6 +14,7 @@
支 付
+ 查看发票
@@ -44,6 +45,9 @@ export default {
this.TOAST('缴费成功');
}
});
+ },
+ lookInvoice(){
+ this.NAV_TO("./payInvioce")
}
},
created() {
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/onlienpay/payInvioce.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/onlienpay/payInvioce.vue
new file mode 100644
index 000000000..48f5000dd
--- /dev/null
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/onlienpay/payInvioce.vue
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/onlienpay/payqrcode.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/onlienpay/payqrcode.vue
new file mode 100644
index 000000000..b9a1b61c0
--- /dev/null
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/onlienpay/payqrcode.vue
@@ -0,0 +1,47 @@
+
+
+
+ 查询结果
+ 取消
+
+
+
+
+
+
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/studentAttendance/single.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/studentAttendance/single.vue
index a0a2db9b2..e16bb6b93 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/studentAttendance/single.vue
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/studentAttendance/single.vue
@@ -36,7 +36,7 @@
暂时没有信息
-
+
{{ weekData.rows[ind].StuName }}
学号: {{ weekData.rows[ind].StuNo }}
@@ -55,7 +55,7 @@
{{ n.txt }}
@@ -491,6 +491,7 @@ export default{
text-align: center;
font-size: 14px;
color: #1a1a1a;
+ background-color: #ffffff;
}
.timeTableAlertLi.active {
@@ -500,8 +501,4 @@ export default{
.timeTableAlertLi:nth-child(2n) {
background-color: #fbfdff;
}
-
-.timeTableAlertLi:nth-child(2n - 1) {
- background-color: #ffffff;
-}
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/studentSee/list.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/studentSee/list.vue
index f798c045f..7a944a59d 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/studentSee/list.vue
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/studentSee/list.vue
@@ -72,7 +72,6 @@ export default {
'加载数据时出错'
).then( res => {
this.HIDE_LOADING()
- // console.log(res)
if (res == null || JSON.stringify(res) == '{}') {
_this.flag = false;
return;
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/timeTable/list.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/timeTable/list.vue
index 9d5960cd4..1bc43b77d 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/timeTable/list.vue
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/timeTable/list.vue
@@ -28,10 +28,10 @@
-
+
该时间段没有课表
-
+
第 {{ k.jc }} 节
diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/weixinLogin.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/weixinLogin.vue
index 4a7041cc3..3e53e5411 100644
--- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/weixinLogin.vue
+++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/weixinLogin.vue
@@ -25,13 +25,13 @@
-
+
- 确 认
+ 确 认
常规登陆
@@ -68,11 +68,14 @@