opt:越南富佳看板优化、库存增导出功能
This commit is contained in:
@@ -1,21 +1,29 @@
|
|||||||
package org.nl.wms.basedata_manage.controller;
|
package org.nl.wms.basedata_manage.controller;
|
||||||
|
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.alibaba.fastjson.TypeReference;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.nl.common.base.TableDataInfo;
|
import org.nl.common.base.TableDataInfo;
|
||||||
import org.nl.common.domain.query.PageQuery;
|
import org.nl.common.domain.query.PageQuery;
|
||||||
import org.nl.common.logging.annotation.Log;
|
import org.nl.common.logging.annotation.Log;
|
||||||
|
import org.nl.common.utils.MapOf;
|
||||||
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleextService;
|
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleextService;
|
||||||
|
import org.nl.wms.system_manage.service.columnInfo.ColumnInfoService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -35,9 +43,40 @@ public class StructIvtController {
|
|||||||
@Resource
|
@Resource
|
||||||
private final IMdPbStoragevehicleextService iMdPbStoragevehicleextService;
|
private final IMdPbStoragevehicleextService iMdPbStoragevehicleextService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ColumnInfoService columnInfoService;
|
||||||
|
|
||||||
@GetMapping
|
@GetMapping
|
||||||
@Log("查询库存")
|
@Log("查询库存")
|
||||||
public ResponseEntity<Object> query(@RequestParam Map whereJson, PageQuery page) {
|
public ResponseEntity<Object> query(@RequestParam Map whereJson, PageQuery page) {
|
||||||
return new ResponseEntity<>(TableDataInfo.build(iMdPbStoragevehicleextService.queryAll(whereJson, page)), HttpStatus.OK);
|
return new ResponseEntity<>(TableDataInfo.build(iMdPbStoragevehicleextService.queryAll(whereJson, page)), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/exportFile")
|
||||||
|
public void exportFile(@RequestBody Map whereJson, PageQuery page, HttpServletResponse response) {
|
||||||
|
page.setPage(0);
|
||||||
|
page.setSize(99999);
|
||||||
|
IPage<JSONObject> pmFormDataDtoIPage = iMdPbStoragevehicleextService.queryAll(whereJson, page);
|
||||||
|
List<JSONObject> pmFormDataDtos = pmFormDataDtoIPage.getRecords();
|
||||||
|
|
||||||
|
List<Map> maps = pmFormDataDtos.stream().map(jsonObject -> {
|
||||||
|
try {
|
||||||
|
return jsonObject.toJavaObject(new TypeReference<Map<String, Object>>() {});
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return new HashMap();
|
||||||
|
}
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
try {
|
||||||
|
columnInfoService.exportFile("md_pb_groupplate", maps, response,
|
||||||
|
null, MapOf.of(
|
||||||
|
"material_code","物料编号","material_name","物料名称","sect_name","库区名称"
|
||||||
|
,"stor_name","仓库名称","struct_name","仓位名称","struct_code","仓位编码"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.info("EXCEL 导出异常,异常原因=【{}】",e.getMessage());
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -112,7 +112,7 @@
|
|||||||
|
|
||||||
<select id="overview" resultType="com.alibaba.fastjson.JSONObject">
|
<select id="overview" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
select
|
select
|
||||||
SUM(CASE WHEN is_used =1 THEN 1 ELSE 0 END) AS totalLocations ,
|
SUM(CASE WHEN is_used =1 and sect_code ='FJ01' THEN 1 ELSE 0 END) AS totalLocations ,
|
||||||
COUNT(DISTINCT SUBSTRING_INDEX(struct_code, '-', 1)) AS totalShelves ,
|
COUNT(DISTINCT SUBSTRING_INDEX(struct_code, '-', 1)) AS totalShelves ,
|
||||||
SUM(CASE WHEN is_used =1 and storagevehicle_code is not null THEN 1 ELSE 0 END) AS currentInventory ,
|
SUM(CASE WHEN is_used =1 and storagevehicle_code is not null THEN 1 ELSE 0 END) AS currentInventory ,
|
||||||
SUM(CASE WHEN is_used =1 and storagevehicle_code is null THEN 1 ELSE 0 END) AS availableLocations ,
|
SUM(CASE WHEN is_used =1 and storagevehicle_code is null THEN 1 ELSE 0 END) AS availableLocations ,
|
||||||
|
|||||||
@@ -441,7 +441,9 @@ public class BigScreenServiceImpl implements BigScreenService {
|
|||||||
QueryWrapper<Structattr> structattrWrapper = new QueryWrapper<>();
|
QueryWrapper<Structattr> structattrWrapper = new QueryWrapper<>();
|
||||||
structattrWrapper.lambda().eq(Structattr::getStor_code, storCode)
|
structattrWrapper.lambda().eq(Structattr::getStor_code, storCode)
|
||||||
.eq(Structattr::getIs_used, Boolean.TRUE)
|
.eq(Structattr::getIs_used, Boolean.TRUE)
|
||||||
.ne(Structattr::getSect_code,"SSX");
|
.eq(Structattr::getSect_code,"FJ01")
|
||||||
|
.ne(Structattr::getSect_code,"SSX")
|
||||||
|
.ne(Structattr::getSect_code,"FJError");
|
||||||
stats.put("locationCount", iStructattrService.count(structattrWrapper));
|
stats.put("locationCount", iStructattrService.count(structattrWrapper));
|
||||||
|
|
||||||
// 在库数量
|
// 在库数量
|
||||||
@@ -449,6 +451,7 @@ public class BigScreenServiceImpl implements BigScreenService {
|
|||||||
new QueryWrapper<Structattr>().lambda()
|
new QueryWrapper<Structattr>().lambda()
|
||||||
.eq(Structattr::getStor_code, storCode)
|
.eq(Structattr::getStor_code, storCode)
|
||||||
.eq(Structattr::getIs_used, Boolean.TRUE)
|
.eq(Structattr::getIs_used, Boolean.TRUE)
|
||||||
|
.eq(Structattr::getSect_code,"FJ01")
|
||||||
.isNotNull(Structattr::getStoragevehicle_code));
|
.isNotNull(Structattr::getStoragevehicle_code));
|
||||||
stats.put("inventoryCount", inventoryCount);
|
stats.put("inventoryCount", inventoryCount);
|
||||||
|
|
||||||
@@ -459,6 +462,14 @@ public class BigScreenServiceImpl implements BigScreenService {
|
|||||||
.eq(SchBaseTask::getIs_delete, Boolean.FALSE)
|
.eq(SchBaseTask::getIs_delete, Boolean.FALSE)
|
||||||
.eq(SchBaseTask::getTask_status,TaskStatus.FINISHED.getCode()));
|
.eq(SchBaseTask::getTask_status,TaskStatus.FINISHED.getCode()));
|
||||||
stats.put("inboundCount", inboundCount);
|
stats.put("inboundCount", inboundCount);
|
||||||
|
// 剩余数量
|
||||||
|
int remainingCount = iStructattrService.count(
|
||||||
|
new QueryWrapper<Structattr>().lambda()
|
||||||
|
.eq(Structattr::getStor_code, storCode)
|
||||||
|
.eq(Structattr::getIs_used, Boolean.TRUE)
|
||||||
|
.eq(Structattr::getSect_code,"FJ01")
|
||||||
|
.isNull(Structattr::getStoragevehicle_code));
|
||||||
|
stats.put("remainingCount", remainingCount);
|
||||||
// 出库数量
|
// 出库数量
|
||||||
int outboundCount = iSchBaseTaskService.count(
|
int outboundCount = iSchBaseTaskService.count(
|
||||||
new QueryWrapper<SchBaseTask>().lambda()
|
new QueryWrapper<SchBaseTask>().lambda()
|
||||||
|
|||||||
@@ -481,7 +481,9 @@ public class PdaBigScreenServiceImpl implements PdaBigScreenService {
|
|||||||
QueryWrapper<Structattr> structattrWrapper = new QueryWrapper<>();
|
QueryWrapper<Structattr> structattrWrapper = new QueryWrapper<>();
|
||||||
structattrWrapper.lambda().eq(Structattr::getStor_code, storCode)
|
structattrWrapper.lambda().eq(Structattr::getStor_code, storCode)
|
||||||
.eq(Structattr::getIs_used, Boolean.TRUE)
|
.eq(Structattr::getIs_used, Boolean.TRUE)
|
||||||
.ne(Structattr::getSect_code,"SSX");
|
.eq(Structattr::getSect_code,"FJ01")
|
||||||
|
.ne(Structattr::getSect_code,"SSX")
|
||||||
|
.ne(Structattr::getSect_code,"FJError");
|
||||||
stats.put("locationCount", iStructattrService.count(structattrWrapper));
|
stats.put("locationCount", iStructattrService.count(structattrWrapper));
|
||||||
|
|
||||||
// 在库数量
|
// 在库数量
|
||||||
@@ -489,6 +491,7 @@ public class PdaBigScreenServiceImpl implements PdaBigScreenService {
|
|||||||
new QueryWrapper<Structattr>().lambda()
|
new QueryWrapper<Structattr>().lambda()
|
||||||
.eq(Structattr::getStor_code, storCode)
|
.eq(Structattr::getStor_code, storCode)
|
||||||
.eq(Structattr::getIs_used, Boolean.TRUE)
|
.eq(Structattr::getIs_used, Boolean.TRUE)
|
||||||
|
.eq(Structattr::getSect_code,"FJ01")
|
||||||
.isNotNull(Structattr::getStoragevehicle_code));
|
.isNotNull(Structattr::getStoragevehicle_code));
|
||||||
stats.put("inventoryCount", inventoryCount);
|
stats.put("inventoryCount", inventoryCount);
|
||||||
|
|
||||||
@@ -499,6 +502,14 @@ public class PdaBigScreenServiceImpl implements PdaBigScreenService {
|
|||||||
.eq(SchBaseTask::getIs_delete, Boolean.FALSE)
|
.eq(SchBaseTask::getIs_delete, Boolean.FALSE)
|
||||||
.eq(SchBaseTask::getTask_status,TaskStatus.FINISHED.getCode()));
|
.eq(SchBaseTask::getTask_status,TaskStatus.FINISHED.getCode()));
|
||||||
stats.put("inboundCount", inboundCount);
|
stats.put("inboundCount", inboundCount);
|
||||||
|
// 剩余数量
|
||||||
|
int remainingCount = iStructattrService.count(
|
||||||
|
new QueryWrapper<Structattr>().lambda()
|
||||||
|
.eq(Structattr::getStor_code, storCode)
|
||||||
|
.eq(Structattr::getIs_used, Boolean.TRUE)
|
||||||
|
.eq(Structattr::getSect_code,"FJ01")
|
||||||
|
.isNull(Structattr::getStoragevehicle_code));
|
||||||
|
stats.put("remainingCount", remainingCount);
|
||||||
// 出库数量
|
// 出库数量
|
||||||
int outboundCount = iSchBaseTaskService.count(
|
int outboundCount = iSchBaseTaskService.count(
|
||||||
new QueryWrapper<SchBaseTask>().lambda()
|
new QueryWrapper<SchBaseTask>().lambda()
|
||||||
|
|||||||
@@ -60,17 +60,17 @@ public class ColumnInfoServiceImpl implements ColumnInfoService {
|
|||||||
}
|
}
|
||||||
List<Map<String, Object>> excel_lst = new ArrayList<>();
|
List<Map<String, Object>> excel_lst = new ArrayList<>();
|
||||||
Map<String, String> map = new LinkedHashMap<>();
|
Map<String, String> map = new LinkedHashMap<>();
|
||||||
|
if(!CollectionUtils.isEmpty(customizMap)) {
|
||||||
|
map.putAll(customizMap);
|
||||||
|
}
|
||||||
if (!StringUtils.isEmpty(tableName)) {
|
if (!StringUtils.isEmpty(tableName)) {
|
||||||
map = this.TableColumn(tableName);
|
map.putAll(this.TableColumn(tableName));
|
||||||
if (!CollectionUtils.isEmpty(passParam)) {
|
if (!CollectionUtils.isEmpty(passParam)) {
|
||||||
for (Object s : passParam) {
|
for (Object s : passParam) {
|
||||||
map.remove(s);
|
map.remove(s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!CollectionUtils.isEmpty(customizMap)) {
|
|
||||||
map.putAll(customizMap);
|
|
||||||
}
|
|
||||||
if (CollectionUtils.isEmpty(map)) {
|
if (CollectionUtils.isEmpty(map)) {
|
||||||
throw new BadRequestException("导出失败,表结构信息失败" + tableName);
|
throw new BadRequestException("导出失败,表结构信息失败" + tableName);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,10 +9,11 @@ spring:
|
|||||||
druid:
|
druid:
|
||||||
db-type: com.alibaba.druid.pool.DruidDataSource
|
db-type: com.alibaba.druid.pool.DruidDataSource
|
||||||
driverClassName: com.mysql.cj.jdbc.Driver
|
driverClassName: com.mysql.cj.jdbc.Driver
|
||||||
url: jdbc:mysql://${DB_HOST:192.168.81.251}:${DB_PORT:3306}/${DB_NAME:fujia_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
|
# url: jdbc:mysql://${DB_HOST:192.168.81.251}:${DB_PORT:3306}/${DB_NAME:fujia_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
|
||||||
# url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:wms_oulun}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
|
url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:fujia}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
|
||||||
username: ${DB_USER:root}
|
username: ${DB_USER:root}
|
||||||
password: ${DB_PWD:P@ssw0rd.}
|
password: ${DB_PWD:123456}
|
||||||
|
# password: ${DB_PWD:P@ssw0rd.}
|
||||||
# 初始连接数
|
# 初始连接数
|
||||||
initial-size: 15
|
initial-size: 15
|
||||||
# 最小连接数
|
# 最小连接数
|
||||||
|
|||||||
BIN
nladmin-ui/dist.rar
Normal file
BIN
nladmin-ui/dist.rar
Normal file
Binary file not shown.
@@ -72,6 +72,10 @@
|
|||||||
<div class="stat-title">在库数量</div>
|
<div class="stat-title">在库数量</div>
|
||||||
<div class="stat-value">{{ stats.inventoryCount }}</div>
|
<div class="stat-value">{{ stats.inventoryCount }}</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
<el-card class="stat-card" shadow="hover">
|
||||||
|
<div class="stat-title">剩余库位</div>
|
||||||
|
<div class="stat-value">{{ stats.remainingCount }}</div>
|
||||||
|
</el-card>
|
||||||
<el-card class="stat-card" shadow="hover">
|
<el-card class="stat-card" shadow="hover">
|
||||||
<div class="stat-title">入库数量</div>
|
<div class="stat-title">入库数量</div>
|
||||||
<div class="stat-value">{{ stats.inboundCount }}</div>
|
<div class="stat-value">{{ stats.inboundCount }}</div>
|
||||||
@@ -80,11 +84,6 @@
|
|||||||
<div class="stat-title">出库数量</div>
|
<div class="stat-title">出库数量</div>
|
||||||
<div class="stat-value">{{ stats.outboundCount }}</div>
|
<div class="stat-value">{{ stats.outboundCount }}</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card class="stat-card" shadow="hover">
|
|
||||||
<div class="stat-title">运转数量</div>
|
|
||||||
<div class="stat-value">{{ stats.operationCount }}</div>
|
|
||||||
</el-card>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 任务统计图表 - 合并为一个组件 -->
|
<!-- 任务统计图表 - 合并为一个组件 -->
|
||||||
@@ -158,7 +157,7 @@ export default {
|
|||||||
monthTasks: 0,
|
monthTasks: 0,
|
||||||
monthlyAvg: 0,
|
monthlyAvg: 0,
|
||||||
locationCount: 0,
|
locationCount: 0,
|
||||||
inventoryCount: 0,
|
remainingCount: 0,
|
||||||
outboundCount: 0,
|
outboundCount: 0,
|
||||||
operationCount: 0
|
operationCount: 0
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -78,6 +78,14 @@
|
|||||||
>
|
>
|
||||||
{{ $t('wms.statement.structivt.export_excel') }}
|
{{ $t('wms.statement.structivt.export_excel') }}
|
||||||
</el-button>-->
|
</el-button>-->
|
||||||
|
<el-button
|
||||||
|
slot="right"
|
||||||
|
class="filter-item"
|
||||||
|
type="primary"
|
||||||
|
size="mini"
|
||||||
|
@click="exportExcel"
|
||||||
|
>导出excel
|
||||||
|
</el-button>
|
||||||
</crudOperation>
|
</crudOperation>
|
||||||
<!--表格渲染-->
|
<!--表格渲染-->
|
||||||
<el-table
|
<el-table
|
||||||
@@ -86,6 +94,8 @@
|
|||||||
:data="crud.data"
|
:data="crud.data"
|
||||||
size="mini"
|
size="mini"
|
||||||
style="width: 100%;"
|
style="width: 100%;"
|
||||||
|
show-summary
|
||||||
|
:summary-method="getSummaries"
|
||||||
@selection-change="crud.selectionChangeHandler"
|
@selection-change="crud.selectionChangeHandler"
|
||||||
>
|
>
|
||||||
<el-table-column prop="struct_code" :label="$t('wms.statement.structivt.location_code')" :min-width="flexWidth('struct_code',crud.data,'仓位编码')" />
|
<el-table-column prop="struct_code" :label="$t('wms.statement.structivt.location_code')" :min-width="flexWidth('struct_code',crud.data,'仓位编码')" />
|
||||||
@@ -109,7 +119,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import crudStructivt from '@/views/wms/statement/structivt/structivt'
|
import crudStructivt, { exportFile } from '@/views/wms/statement/structivt/structivt'
|
||||||
import CRUD, { presenter, header, crud } from '@crud/crud'
|
import CRUD, { presenter, header, crud } from '@crud/crud'
|
||||||
import rrOperation from '@crud/RR.operation'
|
import rrOperation from '@crud/RR.operation'
|
||||||
import crudOperation from '@crud/CRUD.operation'
|
import crudOperation from '@crud/CRUD.operation'
|
||||||
@@ -150,6 +160,43 @@ export default {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
// 导出Excel功能
|
||||||
|
exportExcel() {
|
||||||
|
// 构建文件名称:仓位管理导出yyyymmdd.xlsx
|
||||||
|
const now = new Date()
|
||||||
|
const year = now.getFullYear()
|
||||||
|
const month = String(now.getMonth() + 1).padStart(2, '0')
|
||||||
|
const day = String(now.getDate()).padStart(2, '0')
|
||||||
|
const fileName = `入库管理导出${year}${month}${day}.xlsx`
|
||||||
|
if (this.query.createTime) {
|
||||||
|
this.query.start_time = this.query.createTime[0]
|
||||||
|
this.query.begin_time = this.query.createTime[0]
|
||||||
|
if (this.query.createTime.length > 1) {
|
||||||
|
this.query.end_time = this.query.createTime[1]
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.query.start_time = ''
|
||||||
|
this.query.end_time = ''
|
||||||
|
}
|
||||||
|
// 使用导入的exportFile方法调用后端接口
|
||||||
|
exportFile(this.query).then(res => {
|
||||||
|
// 创建Blob对象
|
||||||
|
const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
|
||||||
|
// 创建下载链接
|
||||||
|
const link = document.createElement('a')
|
||||||
|
link.href = URL.createObjectURL(blob)
|
||||||
|
link.download = fileName
|
||||||
|
// 触发下载
|
||||||
|
document.body.appendChild(link)
|
||||||
|
link.click()
|
||||||
|
// 清理
|
||||||
|
document.body.removeChild(link)
|
||||||
|
URL.revokeObjectURL(link.href)
|
||||||
|
this.crud.notify('导出成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
|
||||||
|
}).catch(() => {
|
||||||
|
this.crud.notify('导出失败', CRUD.NOTIFICATION_TYPE.ERROR)
|
||||||
|
})
|
||||||
|
},
|
||||||
// 钩子:在获取表格数据之前执行,false 则代表不获取数据
|
// 钩子:在获取表格数据之前执行,false 则代表不获取数据
|
||||||
[CRUD.HOOK.beforeRefresh]() {
|
[CRUD.HOOK.beforeRefresh]() {
|
||||||
return true
|
return true
|
||||||
@@ -185,6 +232,26 @@ export default {
|
|||||||
this.showDtlLoading = false
|
this.showDtlLoading = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
getSummaries(param) {
|
||||||
|
const { columns, data } = param
|
||||||
|
const sums = []
|
||||||
|
columns.forEach((column, index) => {
|
||||||
|
if (index === 0) {
|
||||||
|
sums[index] = '合计'
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (column.property === 'qty') {
|
||||||
|
const total = data.reduce((sum, item) => {
|
||||||
|
const qty = Number(item.qty) || 0
|
||||||
|
return sum + qty
|
||||||
|
}, 0)
|
||||||
|
sums[index] = parseFloat(total).toFixed(3)
|
||||||
|
} else {
|
||||||
|
sums[index] = ''
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return sums
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,4 +62,12 @@ export function excelImport(data) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export default { add, edit, del, getStruct, getStructById, getUnits, save, excelImport }
|
export function exportFile(query) {
|
||||||
|
return request({
|
||||||
|
url: 'api/structivt/exportFile',
|
||||||
|
method: 'post',
|
||||||
|
data: query,
|
||||||
|
responseType: 'blob'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export default { add, edit, del, getStruct, getStructById, getUnits, save, excelImport, exportFile }
|
||||||
|
|||||||
Reference in New Issue
Block a user