Commit 61602e2e by jianshuqin

优化:组件功能

parent 6907af1d
......@@ -3,33 +3,31 @@
/// <summary>
/// 列
/// </summary>
public class ColumnDTO : ControlDTO
public class ColumnDTO
{
/// <summary>
/// 编码
/// 属性
/// </summary>
public string Code { get; set; }
public bool? Sortable { get; set; }
public string Prop { get; set; }
/// <summary>
/// 排序顺序
/// 名称
/// </summary>
public int? OrderSort { get; set; }
public string Name { get; set; }
/// <summary>
/// 宽度
/// 是否隐藏
/// </summary>
public int? Width { get; set; }
public bool? IsHide { get; set; }
/// <summary>
/// 是否降序
/// 是否导出
/// </summary>
public bool? Descending { get; set; }
public bool? IsExport { get; set; }
/// <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.Models.Component.DTO;
using MySql.Data.MySqlClient;
using Newtonsoft.Json;
using NPOI.HSSF.UserModel;
......@@ -7,6 +8,7 @@ using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
namespace Bailun.DC.Services.Component
{
......@@ -71,8 +73,13 @@ namespace Bailun.DC.Services.Component
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;
int headerCount = listHeader?.Count ?? 0;
int headerCount = listColumn?.Count() ?? 0;
int tableCount = table?.Rows.Count ?? 0;
if (headerCount > 0 || tableCount > 0)
{
......@@ -98,11 +105,11 @@ namespace Bailun.DC.Services.Component
//标题
if (headerCount > 0)
{
listHeader.ForEach((l, col) =>
listColumn.ForEach((l, col) =>
{
ICell cell = headerRow.CreateCell(col);
cell.CellStyle = styleTitle;
cell.SetCellValue(l.Value);
cell.SetCellValue(l.Name);
});
}
else
......@@ -120,11 +127,31 @@ namespace Bailun.DC.Services.Component
IRow dataRow = sheet.CreateRow(row + 1);
if (headerCount > 0)
{
listHeader.ForEach((l, col) =>
listColumn.ForEach((header, col) =>
{
if (table.Columns.Contains(l.Key))
string value = table.Rows[row][header.Name]?.ToString();
if (!string.IsNullOrWhiteSpace(value))
{
dataRow.CreateCell(col).SetCellValue(table.Rows[row][l.Key]?.ToString());
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)
{
DateTime parseTime = DateTime.Now;
if (DateTime.TryParse(value, out parseTime))
{
value = parseTime.ToString(header.Format);
}
}
dataRow.CreateCell(col).SetCellValue(value);
}
});
}
......@@ -166,9 +193,14 @@ namespace Bailun.DC.Services.Component
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;
if (listHeader?.Count > 0)
if (listColumn?.Count() > 0)
{
IWorkbook workbook = null;
MemoryStream ms = null;
......@@ -189,20 +221,40 @@ namespace Bailun.DC.Services.Component
fontTitle.FontHeightInPoints = 12;
//单元格样式
ICellStyle styleTitle = workbook.CreateCellStyle();
listHeader.ForEach((l, col) =>
listColumn.ForEach((l, col) =>
{
var cell = headerRow.CreateCell(col);
cell.CellStyle = styleTitle;
cell.SetCellValue(l.Value);
cell.SetCellValue(l.Name);
});
for (int row = 0; row < excelMaxRowCount && reader.Read(); row++)
{
IRow dataRow = sheet.CreateRow(row + 1);
listHeader.ForEach((header, col) =>
listColumn.ForEach((header, col) =>
{
if (reader[header.Key] != null)
string value = reader[header.Prop]?.ToString();
if (!string.IsNullOrWhiteSpace(value))
{
dataRow.CreateCell(col).SetCellValue(reader[header.Key].ToString());
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)
{
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
}
return data;
}
}
......
......@@ -466,42 +466,50 @@ namespace Bailun.DC.Services.Component
return pageList;
}
public byte[] Export(QueryFilterDTO queryFilter)
public (string, byte[]) Export(QueryFilterDTO queryFilter)
{
byte[] b = default(byte[]);
string name = default(string);
if (queryFilter != null)
{
TableDTO entity = this.Get(queryFilter.Code);
IList<dynamic> listColumn = this.GetListColumn(queryFilter, entity);
if (listColumn != null)
if (entity != null)
{
//数据类型
DataTypeEnum?[] dataTypes = { DataTypeEnum.Table, DataTypeEnum.Sql };
name = string.Join(string.Empty, entity.ListCrumb);
//列标题
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.pageSize = null;
if (!string.IsNullOrWhiteSpace(entity.DataValue) && dataTypes.Contains(entity.DataType))
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)
{
(int, IDataReader) reader = this.GetListDataReader(queryFilter, entity);
using (reader.Item2)
//数据类型
DataTypeEnum?[] dataTypes = { DataTypeEnum.Table, DataTypeEnum.Sql };
//全部数据导出
queryFilter.CurrentPage = null;
queryFilter.pageSize = null;
if (!string.IsNullOrWhiteSpace(entity.DataValue) && dataTypes.Contains(entity.DataType))
{
b = DataReaderToExcel(listHeader, reader.Item2, reader.Item1);
(int, IDataReader) reader = this.GetListDataReader(queryFilter, entity);
using (reader.Item2)
{
b = DataReaderToExcel(listColumn, reader.Item2, reader.Item1);
}
}
}
else
{
PageListDTO pageList = this.GetListData(queryFilter, entity);
if (listColumn?.Count > 0)
else
{
b = DataTableToExcel(listHeader, pageList.List);
PageListDTO pageList = this.GetListData(queryFilter, entity);
if (listColumn?.Count() > 0)
{
b = DataTableToExcel(listColumn, pageList.List);
}
}
}
}
}
if (b != null)
{
name = $"{(name ?? "Export")}_{DateTime.Now.ToString("yyyyMMddhhmm")}.xls";
}
return b;
return (name, b);
}
/// <summary>
......
......@@ -71,8 +71,17 @@ namespace Bailun.DC.Web.Areas.Component.Controllers
byte[] data = null;
try
{
data = new TableService().Export(queryFilter);
return File(data, "text/plain", "ImportAttendeesInfol.xls");
var exportResult = new TableService().Export(queryFilter);
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)
{
......
......@@ -142,9 +142,8 @@
v-on:show-dialog="showDialog">
</el-table-control>
</template>
<template v-else-if="item.value">
<span class="text"
v-bind:style="item.color ? 'color:' + item.color: ''">{{item.value}}</span>
<template v-else-if="item.color">
<span class="text" v-bind:style="'color:' + item.color">{{item_value}}</span>
</template>
<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}}
......
<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"
v-bind:filter="setting"
v-on:search="onSearch"
......@@ -11,11 +11,11 @@
<el-container>
<el-main>
<el-table-control ref="table"
v-bind:code="code"
v-bind:filterParams="filterParams"
v-on:init="onInit"
v-on:show-dialog="showDialog"
v-on:close-dialog="closeDialog"></el-table-control>
v-bind:code="code"
v-bind:filterParams="filterParams"
v-on:init="onInit"
v-on:show-dialog="showDialog"
v-on:close-dialog="closeDialog"></el-table-control>
</el-main>
<el-footer>
<el-pagination background layout="total,sizes,jumper,prev, pager, next"
......
......@@ -70,6 +70,7 @@
var that = this;
Vue.set(that, 'setting', setting);
//初始化时设置过虑条件
Vue.set(that.filterParams, 'code', setting.code);
if (setting.listFilterControl) {
that.$refs.formFilter.filter.listFilterControl = setting.listFilterControl
Vue.set(that.filterParams, 'listFilter', that.$refs.formFilter.getFilter(true));
......@@ -124,15 +125,23 @@
headers: {
'Accept': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8'
}
}).then(function (json) {
var ext = "xlsx";
if (json.headers && json.headers.map && json.headers.map["content-disposition"] && json.headers.map["content-disposition"].length > 0) {
var fileInfo = json.headers.map["content-disposition"][0].split(';');
var fileName = fileInfo && fileInfo.length > 2 && fileInfo[1];
ext = fileName && fileName.split(".").length > 1 && fileName.split(".")[1];
}).then(function (respons) {
if (respons.bodyBlob.type == "application/json") {
that.$message(respons.body.message || " 未知错误!");
} else {
if (respons.headers && respons.headers.map && respons.headers.map["content-disposition"] && respons.headers.map["content-disposition"].length > 0) {
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) {
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