1、修改了移动端邮件连接无法打开的问题。
修改文件:\RoadFlow.WebUIMobile\pages\index.vue
2、流程步骤增加了子表数据过滤条件设置。
修改文件:\RoadFlow.WebUIElement\src\roadui-pages\flow\design\step.vue
多语言版要更新语言包:
修改文件:\RoadFlow.Model\FlowRunModel\Step.cs
修改文件:\RoadFlow.Service\Flow.cs
修改文件:\RoadFlow.Service\Form.cs
/// <summary> /// 得到表单前端显示数据json /// </summary> /// <param name="formId">表单id(rf_form表id)</param> /// <param name="instanceId">实例id,主键值</param> /// <param name="subtableWhere">子表过滤条件</param> /// <param name="isSelectSubtable">是否只查询子表数据</param> /// <returns></returns> public static JObject GetFormData(long formId, string instanceId, string? subtableWhere = "", bool isSelectSubtable = false) { JObject jObject = new(); if (string.IsNullOrWhiteSpace(instanceId)) { return jObject; } var formModel = Get(formId); if (formModel == null) { return jObject; } JObject formAttrJObject = RoadFlow.Utility.Json.ParseObject(formModel.AttrJson); if (formAttrJObject.IsNullOrEmpty()) { return jObject; } long dbConnId = formAttrJObject.GetLong("dbConn"); JArray fieldsArrayNode = RoadFlow.Utility.Json.ParseArray(formModel.FieldsJson); //2023-08-20增加if条件,判断只查询子表数据。 if (!isSelectSubtable) { string dbTable = formAttrJObject.GetString("dbTable"); string dbTablePrimaryKey = formAttrJObject.GetString("dbTablePrimaryKey");//表单字段格式 if (dbConnId < IdGenerator.MinValue || string.IsNullOrWhiteSpace(dbTable) || string.IsNullOrWhiteSpace(dbTablePrimaryKey)) { return jObject; } var formData = RoadFlow.Service.DbConnection.GetDictionary(dbConnId, dbTable, dbTablePrimaryKey, instanceId); if (formData == null) { return jObject; } foreach (var kv in formData) { string id = (dbTable + "-" + kv.Key).ToLower(); var fieldJObject = fieldsArrayNode.GetJObject("id", id); if (fieldJObject.IsNullOrEmpty()) { continue; } AddFormFieldValue(jObject, id, kv.Value == null ? string.Empty : kv.Value.ToString(), fieldJObject.GetString("type"), fieldJObject.GetString("format")); } } //子表 JArray subtableJArray = RoadFlow.Utility.Json.ParseArray(formModel.SubtableJson); foreach (var subtableJ in subtableJArray) { string subtableId = subtableJ.GetString("id"); string subtableTable = subtableJ.GetString("table"); string subtablePrimaryKey = subtableJ.GetString("primaryKey"); string subtableLinkField = subtableJ.GetString("linkField"); JArray subtableColumns = subtableJ.GetJArray("columns"); var subtableFieldsArrayNode = fieldsArrayNode.GetJObject("id", subtableId).GetJArray("fields");//子表字段数据类型,格式设置。 var subtableData = RoadFlow.Service.DbConnection.GetDataTable(dbConnId, subtableTable, subtableLinkField, instanceId, "", RoadFlow.Service.Wildcard.Replace(subtableWhere)); JArray subtableDataJArray = new(); foreach (System.Data.DataRow dr in subtableData.Rows) { JObject columnJObject = new(); columnJObject.Add("key", dr[subtablePrimaryKey].ToString()); foreach (var subtableColumn in subtableColumns) { string field = subtableColumn.GetString("field"); var subtableFieldJObject = subtableFieldsArrayNode.GetJObject("id", field); if (subtableData.Columns.Contains(field)) { AddFormFieldValue(columnJObject, field, dr[field].ToString(), subtableFieldJObject.GetString("type"), subtableFieldJObject.GetString("format")); } } subtableDataJArray.Add(columnJObject); } jObject.Add(subtableId, subtableDataJArray); } return jObject; }
修改文件:\RoadFlow.Service\DbConnection.cs
修改文件:\RoadFlow.Data\DbConnection.cs
3、修改了流程设计步骤名称换行方式。
修改文件:\RoadFlow.WebUIElement\src\roadui-pages\flow\design\design.vue
修改文件:\RoadFlow.WebUIElement\src\roadui-pages\flow\run\flow-show.js
修改文件:\RoadFlow.Service\Flow.cs
4、修改了附件只读显示为图片时可查看大图。
修改文件:\RoadFlow.WebUIElement\src\roadui-components\el_selectfile.vue
<span v-for="(file,index) in fileList" :key="file.id+index"> <span v-if="showImg&&utils.isImageFile(file.name)" @click="showFile(file)" :style="showStyle +';background-image:url('+config.SERVER_WEBADDRESS+'/Files/show?id='+file.id+'&nroadflow-token='+token+');'" class="roadui_file_img_span"> <span><el-icon><ZoomIn /></el-icon></span> </span> <a v-else class="roaduia" href="javascript:;" @click="showFile(file)" :style="showStyle">{{showIndex?++index+'. ':''}}{{file.name}}</a> </span>
修改文件:\RoadFlow.WebUIElement\src\roadui-assets\share.css
.roadui_file_img_span { display: inline-flex; background-size: cover; background-position: center; } .roadui_file_img_span span { display: inline-flex; cursor: pointer; align-items: center; justify-content: center; width: 100%; height: 100%; background-color: rgba(0,0,0,0.3); } .roadui_file_img_span span i { color: #fff; font-size: 22px; } .roadui_file_img_span span i:hover { color: var(--el-color-primary); }
5、修改了附件查看图片大图时可自动适应窗口大小。
修改文件:\RoadFlow.WebUIElement\src\roadui-assets\utils.js
//获取图片大小 getImageSize(url) { return new Promise(function (resolve, reject) { let image = new Image(); image.onload = function () { resolve({ width: image.width, height: image.height }); }; image.onerror = function () { reject({ width: 0, height: 0 }); }; image.src = url; }); },
//显示文件 openMenu:首页的openMenu方法;file:要显示的文件对象;serverAddress:服务器地址 isMobile:是否是移动端 showFile(openMenu, file, serverAddress, isMobile) { const isInlineFile = this.isInlineFile(file.name); const contenTtype = isInlineFile ? 'inline' : 'attachment'; const url = serverAddress + '/Files/Show?id=' + file.id + '&contenttype=' + contenTtype + '&nroadflow-token=' + this.getToken(); //如果可以在线预览 if (isInlineFile) { const w = document.body.clientWidth - (isMobile ? 20 : 300); const h = document.body.clientHeight - (isMobile ? 160 : 180); let t = (document.body.clientHeight - h) / 2 - 30; if (t < 10) { t = 10; } //如果是图片,获取图片尺寸来设置窗口大小 if (this.isImageFile(file.name)) { this.getImageSize(url).then((res) => { const w1 = res.width < w ? res.width + 50 : w; const h1 = res.height < h ? res.height : h; openMenu({ id: file.id, url: url, title: file.name, openMode: 1, width: w1 + 'px', height: h1 + 'px', top: t + 'px', isShowFile: true }); }); } else { openMenu({ id: file.id, url: url, title: file.name, openMode: 1, width: w + 'px', height: h + 'px', top: t + 'px', isShowFile: true }); } } else { this.open(url, 300, 200, file.name, false); } },
6、修改了流程实例管理中跳转时带出步骤设置的处理人。
修改文件:\RoadFlow.Web\Areas\RoadFlowApi\Controllers\FlowController.cs
/// <summary> /// 得到跳转步骤 /// </summary> /// <returns></returns> [HttpPost("InstanceManageGetGotoSteps")] [ApiValidate(Url = "/flow/instance/index")] public string InstanceManageGetGotoSteps() { long taskId = Request.FormLong("taskId"); JArray jArray = new(); var taskModel = RoadFlow.Service.FlowTask.Get(taskId); if (taskModel == null) { return RoadFlow.Utility.Json.GetResponseJsonString(jArray); } var flowRunModel = RoadFlow.Service.Flow.GetFlowRunModel(taskModel.FlowId); if (flowRunModel == null) { return RoadFlow.Utility.Json.GetResponseJsonString(jArray); } var currentStepModel = flowRunModel.Steps.Where(p => p.Id == taskModel.StepId).First(); var groupTasks = RoadFlow.Service.FlowTask.GetListByGroupId(taskModel.GroupId); foreach (var runStepModel in flowRunModel.Steps) { var handler = RoadFlow.Service.FlowRun.GetStepDefaultHandler(flowRunModel, runStepModel, currentStepModel, taskModel, groupTasks, null, null); jArray.Add(new JObject() { { "id", runStepModel.Id.ToString() }, { "name", runStepModel.Name }, { "members", handler.Item1 }, }); } return RoadFlow.Utility.Json.GetResponseJsonString(jArray); }
7、修改了移动端邮件增加返回按钮。
修改文件:\RoadFlow.WebUIMobile\pages\mail\index.vue
8、修改了移动端显示PDF文件。
安装pdfjs-dist
npm install pdfjs-dist@2.11.338
增加文件:\RoadFlow.WebUIElement\src\roadui-pages\pdf.vue
修改文件:\RoadFlow.WebUIElement\src\roadui-assets\utils.js
//显示文件 openMenu:首页的openMenu方法;file:要显示的文件对象;serverAddress:服务器地址 isMobile:是否是移动端 showFile(openMenu, file, serverAddress, isMobile) { const isInlineFile = this.isInlineFile(file.name); const contenTtype = isInlineFile ? 'inline' : 'attachment'; const isminiprogram = this.query('isminiprogram', this.decodeURI(this.getQuery())); const url = serverAddress + '/Files/Show?id=' + file.id + '&contenttype=' + contenTtype + '&ismobile=' + (isMobile ? '1' : '0') + '&isminiprogram=' + isminiprogram + '&nroadflow-token=' + this.getToken(); //如果可以在线预览 if (isInlineFile) { const w = document.body.clientWidth - (isMobile ? 20 : 300); const h = document.body.clientHeight - (isMobile ? 160 : 180); let t = (document.body.clientHeight - h) / 2 - 30; if (t < 10) { t = 10; } //如果是图片,获取图片尺寸来设置窗口大小 if (this.isImageFile(file.name)) { this.getImageSize(url).then((res) => { const w1 = res.width < w ? res.width + 50 : w; const h1 = res.height < h ? res.height : h; openMenu({ id: file.id, url: url, title: file.name, openMode: 1, width: w1 + 'px', height: h1 + 'px', top: t + 'px', isShowFile: true }); }); } else { openMenu({ id: file.id, url: url, title: file.name, openMode: 1, width: w + 'px', height: h + 'px', top: t + 'px', isShowFile: true }); } } else { if (isMobile) { this.openNew(url); } else { this.open(url, 300, 200, file.name, false); } } },
修改文件:\RoadFlow.WebUIElement\src\roadui-pages\index.vue
<div v-if="dialogIsIframe"> <!--移动端显示pdf--> <span v-if="utils.query('ismobile',dialogFileUrl)==1&&(utils.isPdfFile(dialogTitle)||utils.isOfficeFile(dialogTitle))"> <VuePdf :src="dialogFileUrl" :style="`width:100%;height:${dialogHeight};border:0;`"></VuePdf> </span> <iframe v-else :src="dialogIsShowFile?dialogFileUrl:dialogComponentId" :style="`width:100%;height:${dialogHeight};border:0;`" frameborder="0"></iframe> </div> <div v-else :style="`width:100%;height:${dialogHeight};overflow:auto;`"> <component :is="dialogComponentId" :query="dialogComponentQuery"></component> </div>
增加文件:\RoadFlow.WebUIElement\public\roadui-assets\pdf.worker.min.js
修改文件:\RoadFlow.WebUIElement\index.html
9、增加了移动端组织架构选择搜索。
修改文件:\RoadFlow.WebUIElement\src\roadui-components\el-selectorg.vue
<div v-if="showSearch&&isMobile" v-show="showType==='0'"> <el-input size="small" v-model="searchKey" :placeholder="$t(`components.org.search_tip`)" clearable class="roadui_selectorg_searchinput" style="width:60%;"></el-input> <el-button size="small" type="primary" style="vertical-align:middle;" @click="isSearch=true;loadTreeNode({level:0})">{{$t(`components.org.search`)}}</el-button> </div>
<div v-if="showSearch&&isMobile" v-show="showType==='1'"> <el-input size="small" v-model="wgSearchKey" :placeholder="$t(`components.org.search_tip`)" clearable class="roadui_selectorg_searchinput" style="width:60%;"></el-input> <el-button size="small" type="primary" style="vertical-align:middle;" @click="wgIsSearch=true;wgLoadTreeNode({level:0})">{{$t(`components.org.search`)}}</el-button> </div>
10、修改了调查问卷单选多选查看结果前面会显示true|false的问题。
由于element-plus版本升级引起的,以前的版本不会显示。
修改文件:\RoadFlow.WebUIElement\src\roadui-pages\system\questionnaire\resultsubject.vue
11、首页设置增加图表显示。
表rf_home增加字段:
文件:\RoadFlow.Model\Home.cs实体类增加字段
修改文件:\RoadFlow.Web\Areas\RoadFlowApi\Controllers\HomeSetController.cs
修改文件:\RoadFlow.Service\Home.cs
/// <summary> /// 得到一个用户的首页模块 /// </summary> /// <param name="userModel">用户实体</param> /// <returns></returns> public static JObject GetUserHomeSetJObject(RoadFlow.Model.User? userModel) { JObject jObject = new(); if (userModel == null) { return jObject; } var homeSetList = GetAll().Where(p => p.UseUserIdList == null || p.UseUserIdList.Contains(userModel.Id)).GroupBy(p => p.Type); foreach (var homeSetGrouping in homeSetList) { JArray typeJArray = new(); foreach (var homeSetModel in homeSetGrouping) { //如果是SQL统计,SQL的值。 string? dataSource = homeSetModel.DatasourceType == 0 ? homeSetModel.ConnId.HasValue ? RoadFlow.Service.DbConnection.GetFieldValue(homeSetModel.ConnId.Value, RoadFlow.Service.Wildcard.Replace(homeSetModel.Datasource, userModel)) : string.Empty : homeSetModel.Datasource; int isCharts = string.IsNullOrWhiteSpace(homeSetModel.Charts) ? 0 : 1; //如果是图表,则要加载图表数据。 JArray chartsData = new(); if (isCharts == 1 && homeSetModel.ConnId.HasValue && !string.IsNullOrWhiteSpace(homeSetModel.Datasource)) { DataTable dt = RoadFlow.Service.DbConnection.GetDataTable(homeSetModel.ConnId.Value, RoadFlow.Service.Wildcard.Replace(homeSetModel.Datasource, userModel)); chartsData = JArray.FromObject(dt); } typeJArray.Add(new JObject() { { "id", homeSetModel.Id.ToString() }, { "type", homeSetGrouping.Key }, { "title", homeSetModel.Title }, { "title_en", string.IsNullOrWhiteSpace(homeSetModel.Title_EN) ? homeSetModel.Title : homeSetModel.Title_EN }, { "title_tw", string.IsNullOrWhiteSpace(homeSetModel.Title_TW) ? homeSetModel.Title : homeSetModel.Title_TW }, { "dataSource", dataSource }, { "linkUrl", homeSetModel.LinkUrl }, { "icon", homeSetModel.Icon }, { "background", homeSetModel.Background }, { "isCharts", isCharts }, { "charts", isCharts == 1 ? RoadFlow.Utility.Json.ParseObject(homeSetModel.Charts) : new JObject() }, { "chartsData", chartsData }, { "chartsHeight", homeSetModel.ChartsHeight.HasValue ? homeSetModel.ChartsHeight : 0 }, { "chartsScripts", homeSetModel.ChartsScripts }, { "sort", homeSetModel.Sort }, }); } jObject.Add("type_" + homeSetGrouping.Key.ToString(), typeJArray); } return jObject; }
修改文件:\RoadFlow.WebUIElement\src\roadui-pages\home.vue
//加载图表 const loadCharts = (c) => { const componentId_chart = 'roadflow_home_chart_' + utils.createGuid(false); const component_chart = { data() { return { width: '100%', height: 300, option: {}, rows: [], data: [], }; }, mounted() { this.$nextTick(() => { setTimeout(() => { this.loadChart(); }, 100); }); }, methods: { //渲染chart loadChart() { var programChart = echarts.init(document.getElementById('programChartRef_' + c.id), ''); this.option = c.charts; this.rows = c.chartsData; this.data = c.chartsData; this.height = c.chartsHeight || 300; //执行数据替换脚本 if (utils.length(c.chartsScripts) > 0) { eval(c.chartsScripts); } programChart.setOption(this.option); } }, template: `<div id="programChartRef_${c.id}" ref="programChartRef_${c.id}" :style="'width:'+width+'px;height:'+height+'px'"></div>`, }; app.component(componentId_chart, component_chart); c['componentId'] = componentId_chart; };
修改文件:\RoadFlow.WebUIElement\src\roadui-pages\system\homeset\index.vue
12、用户增加了工号,身份证号字段。
表rf_user_info增加字段:
实体类增加:\RoadFlow.Model\UserInfo.cs
修改文件:\RoadFlow.Web\Areas\RoadFlowApi\Controllers\UserController.cs
修改文件:\RoadFlow.WebUIElement\src\roadui-pages\system\organize\user.vue
联系QQ:493501010电话:136 0832 5512(微信同号)邮箱:road@roadflow.net
Copyright 2014 - 2024 重庆天知软件技术有限公司 版权所有
|