doomiwork 4.0.8 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -54,6 +54,16 @@ class controller {
54
54
  let excelResult = await exportUtility.recordset2ExcelFile(data,excelkey, this.beforeExportExcel)
55
55
  return excelResult;
56
56
  }
57
+ /**
58
+ * 导出数据到Excel的多个workseet中
59
+ * @param {*} data
60
+ * @param {*} excelkey
61
+ */
62
+ async export2MutlisheetExcel(datainfo) {
63
+ if (!Array.isArray(datainfo) || datainfo.length == 0) return {successed:false};
64
+ let excelResult = await exportUtility.recordset2MutlisheetExcelFile(datainfo, this.beforeExportExcel)
65
+ return excelResult;
66
+ }
57
67
  /**
58
68
  * 写入Excel数据
59
69
  * @param {*} data
@@ -217,11 +227,11 @@ class controller {
217
227
  /*
218
228
  * 获取详细记录的方法
219
229
  */
220
- async getDataById(req, dataKey, sqlCommand) {
230
+ async getDataById(req, dataKey, sqlCommand,idValue) {
221
231
  if (this.logger) this.logger.trace("准备获取dataconfig文件中对应的 %s 详细数据",dataKey)
222
232
  const detailinfo = getDetailInfo(req, dataKey);
223
233
  if (!detailinfo) return { successed: false, errcode: -10, errmsg: `缺失${dataKey}对应的详情配置` };
224
- let beforeData = await this.beforeAccessDB(req, sqlCommand || this._daoModel.getByIdSql(), req.params.id, "detail", this);
234
+ let beforeData = await this.beforeAccessDB(req, sqlCommand || this._daoModel.getByIdSql(), idValue ||req.params.id, "detail", this);
225
235
  ////如果返回Null,则表示不加载数据了
226
236
  if (beforeData.canceled===true) return { successed: false, errorcode: 1, errormessage: "操作已取消" };
227
237
  /////处理SQL中的一些定义符
package/index.js CHANGED
@@ -4,6 +4,7 @@ exports = module.exports = {
4
4
  model: require('./core/database/daoBase'),
5
5
  appsetting:require('./configuration/appsetting'),
6
6
  actionresult:require('./core/actionresult'),
7
+ excelutility:require('./utilities/excelutility'),
7
8
  tokenHelper:require('./utilities/tokenutility'),
8
9
  constants:require('./core/enumconst'),
9
10
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "doomiwork",
3
- "version": "4.0.8",
3
+ "version": "4.1.1",
4
4
  "description": "doomisoft nodejs web framework",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -48,7 +48,7 @@ class ExcelUtility {
48
48
  let _saveDir = path.dirname(fileName);
49
49
  ///创建本地文件夹
50
50
  if (!this.mkdirsSync(_saveDir)) return { success: false, errorcode: 1, errmessage: 'create folder failed!' };
51
- const buffer = xlsx.build([{ name: workSheetName, data: data }]);
51
+ const buffer = xlsx.build([{ name: sheetName, data: data }]);
52
52
  return new Promise(reslove => {
53
53
  return fs.writeFile(fileName, buffer, (err) => {
54
54
  return reslove({ successed: !err, errmessage: err, fileName:randomFile })
@@ -65,7 +65,7 @@ class ExcelUtility {
65
65
  let setting = exportConfig ? _instance.excelConfig[exportConfig] : null;
66
66
  let dataBuffer = [], worksheetName = "sheet1", fieldKey = [], titleRow = [];
67
67
  if (setting != null) {
68
- worksheetName = setting.worksheet == null ? "sheet1" : setting.worksheet;
68
+ worksheetName = setting.worksheet ?? "sheet1"; //== null ? "sheet1" : setting.worksheet;
69
69
  ////第一行导出标题行
70
70
  setting.columns.forEach((field) => {
71
71
  var dataOption = { type: 'title', config: exportConfig, title: field.title, field: field.name };
@@ -102,6 +102,75 @@ class ExcelUtility {
102
102
  return result;
103
103
  }
104
104
 
105
+ ///写Excel文件
106
+ async writeMutlisheetExcel(sheetinfo) {
107
+ //let sheetName = 'sheet1';
108
+ //if (workSheetName == null) sheetName = workSheetName;
109
+ let randomFile = uuid.v4() + '.xlsx';
110
+ let fileName = path.resolve(this.exportFolder, randomFile);
111
+ let _saveDir = path.dirname(fileName);
112
+ ///创建本地文件夹
113
+ if (!this.mkdirsSync(_saveDir)) return { success: false, errorcode: 1, errmessage: 'create folder failed!' };
114
+ const buffer = xlsx.build(sheetinfo);// ([{ name: sheetName, data: data }]);
115
+ return new Promise(reslove => {
116
+ return fs.writeFile(fileName, buffer, (err) => {
117
+ return reslove({ successed: !err, errmessage: err, fileName: randomFile })
118
+ })
119
+ })
120
+ }
121
+ /**
122
+ * 导出记录集到Excel的多个worksheet中
123
+ * @param {*} dataRow
124
+ * @param {*} exportConfig
125
+ * @param {*} readyDataFunc
126
+ * @returns
127
+ */
128
+ async recordset2MutlisheetExcelFile(sheetsInfo, readyDataFunc) {
129
+ let _instance = this;
130
+ let sheetinfo = [];
131
+ for (const { data: dataRow, mapping: exportConfig } of sheetsInfo){
132
+ let setting = exportConfig ? _instance.excelConfig[exportConfig] : null;
133
+ let dataBuffer = [], worksheetName = "sheet1", fieldKey = [], titleRow = [];
134
+ if (setting != null) {
135
+ worksheetName = setting.worksheet == null ? "sheet1" : setting.worksheet;
136
+ ////第一行导出标题行
137
+ setting.columns.forEach((field) => {
138
+ var dataOption = { type: 'title', config: exportConfig, title: field.title, field: field.name };
139
+ if (readyDataFunc != null && typeof (readyDataFunc) == "function")
140
+ dataOption = readyDataFunc(dataOption)
141
+ titleRow.push(dataOption.title);
142
+ fieldKey.push(dataOption.field);
143
+ });
144
+ }
145
+ else if (dataRow.length > 0) {
146
+ var firstRow = dataRow[0];
147
+ Object.keys(firstRow).forEach(key => {
148
+ var dataOption = { type: 'title', config: null, title: key, field: key };
149
+ if (readyDataFunc != null && typeof (readyDataFunc) == "function")
150
+ dataOption = readyDataFunc(dataOption)
151
+ titleRow.push(dataOption.title);
152
+ fieldKey.push(dataOption.field);
153
+ });
154
+ }
155
+ if (titleRow.length > 0) {
156
+ dataBuffer.push(titleRow);
157
+ dataRow.forEach((rowItem) => {
158
+ var dataRow = [];
159
+ fieldKey.forEach((field) => {
160
+ var dataOption = { type: 'data', config: exportConfig, field: field, data: rowItem, value: rowItem[field] };
161
+ if (readyDataFunc != null && typeof (readyDataFunc) == "function")
162
+ dataOption = readyDataFunc(dataOption)
163
+ dataRow.push(dataOption.value);
164
+ });
165
+ dataBuffer.push(dataRow);
166
+ })
167
+ }
168
+ sheetinfo.push({ name: worksheetName, data: dataBuffer });
169
+ }
170
+ const result = await _instance.writeMutlisheetExcel(sheetinfo);
171
+ return result;
172
+ }
173
+
105
174
  /**
106
175
  * 递归创建多级目录
107
176
  * @param {*} dirpath
@@ -108,7 +108,7 @@ module.exports.getListInfo = (req, dataKey, cfgType = 0, dao) => {
108
108
  // 防止页面数据传入非数字
109
109
  if (!page || isNaN(page)) page = 1
110
110
  ///最大允许获取100条数据
111
- pageSize = Math.min(pageSize, 100);
111
+ pageSize = Math.min(pageSize, 10000);
112
112
  ///拼接排序的语句
113
113
  if (order && sort && ORDER_STRING.includes(order.toLowerCase())) sort = sort + ' ' + order
114
114
  //req.order =req.sort? utility.ifNull((req.body.order || req.query.order), ""):'';