Commit 61602e2e by jianshuqin

优化:组件功能

parent 6907af1d
...@@ -3,33 +3,31 @@ ...@@ -3,33 +3,31 @@
/// <summary> /// <summary>
/// 列 /// 列
/// </summary> /// </summary>
public class ColumnDTO : ControlDTO public class ColumnDTO
{ {
/// <summary> /// <summary>
/// 编码 /// 属性
/// </summary> /// </summary>
public string Code { get; set; } public string Prop { get; set; }
public bool? Sortable { get; set; }
/// <summary> /// <summary>
/// 排序顺序 /// 名称
/// </summary> /// </summary>
public int? OrderSort { get; set; } public string Name { get; set; }
/// <summary> /// <summary>
/// 宽度 /// 是否隐藏
/// </summary> /// </summary>
public int? Width { get; set; } public bool? IsHide { get; set; }
/// <summary> /// <summary>
/// 是否降序 /// 是否导出
/// </summary> /// </summary>
public bool? Descending { get; set; } public bool? IsExport { get; set; }
/// <summary> /// <summary>
/// 是否导出 /// 格式化
/// </summary> /// </summary>
public bool? IsExport { get; set; } public dynamic Format { get; set; }
} }
} }
\ No newline at end of file
using System.Collections.Generic;
namespace Bailun.DC.Models.Component.DTO
{
/// <summary>
/// 列
/// </summary>
public class ControlDTO
{
/// <summary>
/// 类型
/// </summary>
public string Type { get; set; }
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 控件跨度
/// </summary>
public int? ColSpan { get; set; }
/// <summary>
/// 属性
/// </summary>
public string Prop { get; set; }
/// <summary>
/// 是否校验
/// </summary>
public bool? Required { get; set; }
/// <summary>
/// 禁用(表达式)
/// </summary>
public string Disabled { get; set; }
/// <summary>
/// 是否隐藏
/// </summary>
public bool? IsHide { get; set; }
/// <summary>
/// 点击事件
/// </summary>
public string Click { get; set; }
/// <summary>
/// 是否多选
/// </summary>
public bool? Multiple { get; set; }
/// <summary>
/// 是否可搜索
/// </summary>
public bool? Filterable { get; set; }
/// <summary>
/// 改变事件
/// </summary>
public string Change { get; set; }
/// <summary>
/// API地址
/// </summary>
public string Api { get; set; }
/// <summary>
/// API方式('get','post')
/// </summary>
public string ApiMethod { get; set; }
/// <summary>
/// 默认值
/// </summary>
public dynamic DefaultValue { get; set; }
/// <summary>
/// element按钮类型
/// </summary>
public string ButtonType { get; set; }
/// <summary>
/// element图标
/// </summary>
public string Icon { get; set; }
/// <summary>
/// 选项
/// </summary>
public IEnumerable<OptionDTO> ListOption { get; set; }
}
/// <summary>
/// 选项
/// </summary>
public class OptionDTO
{
/// <summary>
/// 值
/// </summary>
public string Value { get; set; }
/// <summary>
/// 文本
/// </summary>
public string Text { get; set; }
}
}
using Bailun.DC.Common; using Bailun.DC.Common;
using Bailun.DC.Models.Component.DTO;
using MySql.Data.MySqlClient; using MySql.Data.MySqlClient;
using Newtonsoft.Json; using Newtonsoft.Json;
using NPOI.HSSF.UserModel; using NPOI.HSSF.UserModel;
...@@ -7,6 +8,7 @@ using System; ...@@ -7,6 +8,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
using System.IO; using System.IO;
using System.Linq;
namespace Bailun.DC.Services.Component namespace Bailun.DC.Services.Component
{ {
...@@ -71,8 +73,13 @@ namespace Bailun.DC.Services.Component ...@@ -71,8 +73,13 @@ namespace Bailun.DC.Services.Component
public static byte[] DataTableToExcel(IDictionary<string, string> listHeader, DataTable table) public static byte[] DataTableToExcel(IDictionary<string, string> listHeader, DataTable table)
{ {
return BaseService.DataTableToExcel(listHeader?.Select(l => new ColumnDTO { Prop = l.Key, Name = l.Value }), table);
}
public static byte[] DataTableToExcel(IEnumerable<ColumnDTO> listColumn, DataTable table)
{
byte[] b = null; byte[] b = null;
int headerCount = listHeader?.Count ?? 0; int headerCount = listColumn?.Count() ?? 0;
int tableCount = table?.Rows.Count ?? 0; int tableCount = table?.Rows.Count ?? 0;
if (headerCount > 0 || tableCount > 0) if (headerCount > 0 || tableCount > 0)
{ {
...@@ -98,11 +105,11 @@ namespace Bailun.DC.Services.Component ...@@ -98,11 +105,11 @@ namespace Bailun.DC.Services.Component
//标题 //标题
if (headerCount > 0) if (headerCount > 0)
{ {
listHeader.ForEach((l, col) => listColumn.ForEach((l, col) =>
{ {
ICell cell = headerRow.CreateCell(col); ICell cell = headerRow.CreateCell(col);
cell.CellStyle = styleTitle; cell.CellStyle = styleTitle;
cell.SetCellValue(l.Value); cell.SetCellValue(l.Name);
}); });
} }
else else
...@@ -120,11 +127,31 @@ namespace Bailun.DC.Services.Component ...@@ -120,11 +127,31 @@ namespace Bailun.DC.Services.Component
IRow dataRow = sheet.CreateRow(row + 1); IRow dataRow = sheet.CreateRow(row + 1);
if (headerCount > 0) if (headerCount > 0)
{ {
listHeader.ForEach((l, col) => listColumn.ForEach((header, col) =>
{
string value = table.Rows[row][header.Name]?.ToString();
if (!string.IsNullOrWhiteSpace(value))
{
if (header.Format == true)
{
if (value.Equals("true", StringComparison.OrdinalIgnoreCase) || value == "1")
{
value = "是";
}
else if (value.Equals("false", StringComparison.OrdinalIgnoreCase) || value == "0")
{
value = "否";
}
}
else if (header.Format is string)
{ {
if (table.Columns.Contains(l.Key)) DateTime parseTime = DateTime.Now;
if (DateTime.TryParse(value, out parseTime))
{ {
dataRow.CreateCell(col).SetCellValue(table.Rows[row][l.Key]?.ToString()); value = parseTime.ToString(header.Format);
}
}
dataRow.CreateCell(col).SetCellValue(value);
} }
}); });
} }
...@@ -166,9 +193,14 @@ namespace Bailun.DC.Services.Component ...@@ -166,9 +193,14 @@ namespace Bailun.DC.Services.Component
public static byte[] DataReaderToExcel(IDictionary<string, string> listHeader, IDataReader reader, int dataCount) public static byte[] DataReaderToExcel(IDictionary<string, string> listHeader, IDataReader reader, int dataCount)
{ {
return BaseService.DataReaderToExcel(listHeader?.Select(l => new ColumnDTO { Prop = l.Key, Name = l.Value }), reader, dataCount);
}
public static byte[] DataReaderToExcel(IEnumerable<ColumnDTO> listColumn, IDataReader reader, int dataCount)
{
byte[] data = null; byte[] data = null;
if (listHeader?.Count > 0) if (listColumn?.Count() > 0)
{ {
IWorkbook workbook = null; IWorkbook workbook = null;
MemoryStream ms = null; MemoryStream ms = null;
...@@ -189,20 +221,40 @@ namespace Bailun.DC.Services.Component ...@@ -189,20 +221,40 @@ namespace Bailun.DC.Services.Component
fontTitle.FontHeightInPoints = 12; fontTitle.FontHeightInPoints = 12;
//单元格样式 //单元格样式
ICellStyle styleTitle = workbook.CreateCellStyle(); ICellStyle styleTitle = workbook.CreateCellStyle();
listHeader.ForEach((l, col) => listColumn.ForEach((l, col) =>
{ {
var cell = headerRow.CreateCell(col); var cell = headerRow.CreateCell(col);
cell.CellStyle = styleTitle; cell.CellStyle = styleTitle;
cell.SetCellValue(l.Value); cell.SetCellValue(l.Name);
}); });
for (int row = 0; row < excelMaxRowCount && reader.Read(); row++) for (int row = 0; row < excelMaxRowCount && reader.Read(); row++)
{ {
IRow dataRow = sheet.CreateRow(row + 1); IRow dataRow = sheet.CreateRow(row + 1);
listHeader.ForEach((header, col) => listColumn.ForEach((header, col) =>
{
string value = reader[header.Prop]?.ToString();
if (!string.IsNullOrWhiteSpace(value))
{
if (header.Format == true)
{ {
if (reader[header.Key] != null) if (value.Equals("true", StringComparison.OrdinalIgnoreCase) || value == "1")
{ {
dataRow.CreateCell(col).SetCellValue(reader[header.Key].ToString()); value = "是";
}
else if (value.Equals("false", StringComparison.OrdinalIgnoreCase) || value == "0")
{
value = "否";
}
}
else if (header.Format is string)
{
DateTime parseTime = DateTime.Now;
if (DateTime.TryParse(value, out parseTime))
{
value = parseTime.ToString(header.Format);
}
}
dataRow.CreateCell(col).SetCellValue(value.ToString());
} }
}); });
} }
...@@ -238,7 +290,6 @@ namespace Bailun.DC.Services.Component ...@@ -238,7 +290,6 @@ namespace Bailun.DC.Services.Component
} }
return data; return data;
} }
} }
......
...@@ -466,19 +466,22 @@ namespace Bailun.DC.Services.Component ...@@ -466,19 +466,22 @@ namespace Bailun.DC.Services.Component
return pageList; return pageList;
} }
public byte[] Export(QueryFilterDTO queryFilter) public (string, byte[]) Export(QueryFilterDTO queryFilter)
{ {
byte[] b = default(byte[]); byte[] b = default(byte[]);
string name = default(string);
if (queryFilter != null) if (queryFilter != null)
{ {
TableDTO entity = this.Get(queryFilter.Code); TableDTO entity = this.Get(queryFilter.Code);
IList<dynamic> listColumn = this.GetListColumn(queryFilter, entity); if (entity != null)
{
name = string.Join(string.Empty, entity.ListCrumb);
//列标题
IEnumerable<ColumnDTO> listColumn = JsonConvert.DeserializeObject<IList<ColumnDTO>>(JsonConvert.SerializeObject(this.GetListColumn(queryFilter, entity)))?.Where(l => l.IsExport == true || (l.IsExport == null && l.IsHide != true));
if (listColumn != null) if (listColumn != null)
{ {
//数据类型 //数据类型
DataTypeEnum?[] dataTypes = { DataTypeEnum.Table, DataTypeEnum.Sql }; DataTypeEnum?[] dataTypes = { DataTypeEnum.Table, DataTypeEnum.Sql };
//列标题
IDictionary<string, string> listHeader = (dynamic)listColumn.Where(l => l.IsExport == true || (l.IsExport == null && l.IsHide != true)).ToDictionary(l => l.Prop, l => l.Name);
//全部数据导出 //全部数据导出
queryFilter.CurrentPage = null; queryFilter.CurrentPage = null;
queryFilter.pageSize = null; queryFilter.pageSize = null;
...@@ -487,21 +490,26 @@ namespace Bailun.DC.Services.Component ...@@ -487,21 +490,26 @@ namespace Bailun.DC.Services.Component
(int, IDataReader) reader = this.GetListDataReader(queryFilter, entity); (int, IDataReader) reader = this.GetListDataReader(queryFilter, entity);
using (reader.Item2) using (reader.Item2)
{ {
b = DataReaderToExcel(listHeader, reader.Item2, reader.Item1); b = DataReaderToExcel(listColumn, reader.Item2, reader.Item1);
} }
} }
else else
{ {
PageListDTO pageList = this.GetListData(queryFilter, entity); PageListDTO pageList = this.GetListData(queryFilter, entity);
if (listColumn?.Count > 0) if (listColumn?.Count() > 0)
{ {
b = DataTableToExcel(listHeader, pageList.List); b = DataTableToExcel(listColumn, pageList.List);
} }
} }
} }
} }
}
if (b != null)
{
name = $"{(name ?? "Export")}_{DateTime.Now.ToString("yyyyMMddhhmm")}.xls";
}
return b; return (name, b);
} }
/// <summary> /// <summary>
......
...@@ -71,8 +71,17 @@ namespace Bailun.DC.Web.Areas.Component.Controllers ...@@ -71,8 +71,17 @@ namespace Bailun.DC.Web.Areas.Component.Controllers
byte[] data = null; byte[] data = null;
try try
{ {
data = new TableService().Export(queryFilter); var exportResult = new TableService().Export(queryFilter);
return File(data, "text/plain", "ImportAttendeesInfol.xls"); if (exportResult.Item2 != null)
{
data = exportResult.Item2;
return File(data, "text/plain", exportResult.Item1);
}
else
{
ResultDTO result = new ResultDTO() { Message = "无数据导出" };
return Json(result);
}
} }
catch (Exception ex) catch (Exception ex)
{ {
......
...@@ -142,9 +142,8 @@ ...@@ -142,9 +142,8 @@
v-on:show-dialog="showDialog"> v-on:show-dialog="showDialog">
</el-table-control> </el-table-control>
</template> </template>
<template v-else-if="item.value"> <template v-else-if="item.color">
<span class="text" <span class="text" v-bind:style="'color:' + item.color">{{item_value}}</span>
v-bind:style="item.color ? 'color:' + item.color: ''">{{item.value}}</span>
</template> </template>
<template v-else-if="item_value != null"> <template v-else-if="item_value != null">
{{ item.format ? (item_value.constructor === Boolean || item_value == 1 || item_value == 0 ? (item_value ? '是' : '否') :(new Date(item_value).format(item.format))) : item_value}} {{ item.format ? (item_value.constructor === Boolean || item_value == 1 || item_value == 0 ? (item_value ? '是' : '否') :(new Date(item_value).format(item.format))) : item_value}}
......
<el-container class="el-table-query"> <el-container class="el-table-query">
<el-header v-show="setting.listFilterControl && setting.listFilterControl.length && setting.listOperateControl && setting.listOperateControl.length"> <el-header v-show="(setting.listFilterControl && setting.listFilterControl.length) || (setting.listOperateControl && setting.listOperateControl.length)">
<el-form-filter ref="formFilter" <el-form-filter ref="formFilter"
v-bind:filter="setting" v-bind:filter="setting"
v-on:search="onSearch" v-on:search="onSearch"
......
...@@ -70,6 +70,7 @@ ...@@ -70,6 +70,7 @@
var that = this; var that = this;
Vue.set(that, 'setting', setting); Vue.set(that, 'setting', setting);
//初始化时设置过虑条件 //初始化时设置过虑条件
Vue.set(that.filterParams, 'code', setting.code);
if (setting.listFilterControl) { if (setting.listFilterControl) {
that.$refs.formFilter.filter.listFilterControl = setting.listFilterControl that.$refs.formFilter.filter.listFilterControl = setting.listFilterControl
Vue.set(that.filterParams, 'listFilter', that.$refs.formFilter.getFilter(true)); Vue.set(that.filterParams, 'listFilter', that.$refs.formFilter.getFilter(true));
...@@ -124,15 +125,23 @@ ...@@ -124,15 +125,23 @@
headers: { headers: {
'Accept': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8' 'Accept': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8'
} }
}).then(function (json) { }).then(function (respons) {
var ext = "xlsx"; if (respons.bodyBlob.type == "application/json") {
if (json.headers && json.headers.map && json.headers.map["content-disposition"] && json.headers.map["content-disposition"].length > 0) { that.$message(respons.body.message || " 未知错误!");
var fileInfo = json.headers.map["content-disposition"][0].split(';'); } else {
var fileName = fileInfo && fileInfo.length > 2 && fileInfo[1]; if (respons.headers && respons.headers.map && respons.headers.map["content-disposition"] && respons.headers.map["content-disposition"].length > 0) {
ext = fileName && fileName.split(".").length > 1 && fileName.split(".")[1]; var exportName = null;
var fileInfo = respons.headers.map["content-disposition"][0].split(';');
if (fileInfo.length > 2) {
exportName = decodeURI(fileInfo[2].replace(" filename*=UTF-8''", ""));
} else if (fileInfo.length > 1) {
exportName = fileInfo[1].replace(" filename=", "");
} else {
exportName = (that.setting.listCrumb && that.setting.listCrumb.length > 0 ? that.setting.listCrumb.join("") : ('Export')) + "_" + (new Date().format("yyyyMMddhhmm")) + "xls";
}
saveAs(respons.bodyBlob, exportName);
}
} }
var exportName = (that.setting.listCrumb && that.setting.listCrumb.length > 0 ? that.setting.listCrumb.join("") : ('Export')) + "_" + (new Date().format("yyyyMMddhhmm"));
saveAs(json.bodyBlob, exportName + "." + ext);
}).catch(function (error) { }).catch(function (error) {
that.$message(error.message || " 未知错误!"); that.$message(error.message || " 未知错误!");
}); });
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment