Commit 0fc75f92 authored by liuChang's avatar liuChang

Merge branch 'V20230915' of 192.168.60.201:root/dsk-operate-sys into V20230915

parents d4a4d9d3 8c82824d
package com.dsk.web.controller.system;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.system.domain.SysUserFileRecord;
import com.dsk.system.service.ISysUserFileRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* 系统用户文件记录
*
* @author lcl
* @create 2023/9/15
*/
@RestController
@RequestMapping("/user/file/record")
public class SysUserFileRecordController extends BaseController {
@Autowired
private ISysUserFileRecordService baseService;
/**
* 获取用户文件记录列表
*/
@GetMapping(value = "/list")
public TableDataInfo<SysUserFileRecord> userList(PageQuery page){
return baseService.userList(page);
}
/**
* 添加用户文件记录列表
*/
@PostMapping()
public R<Void> add(@RequestBody SysUserFileRecord bean){
return toAjax(baseService.add(bean));
}
}
......@@ -159,6 +159,7 @@ tenant:
- sys_user_role
- sys_client
- sys_region
- sys_user_file_record
- contact_info
- customer_user
- customer_follow_record
......
package com.dsk.component;
import com.dsk.common.core.domain.R;
import com.dsk.oss.core.OssClient;
import com.dsk.oss.entity.UploadResult;
import com.dsk.oss.factory.OssFactory;
import com.dsk.system.domain.SysUserFileRecord;
import com.dsk.system.domain.vo.SysOssVo;
import com.dsk.system.service.ISysOssService;
import com.dsk.system.service.ISysUserFileRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
/**
* 上传组件
* @author lcl
* @create 2023/9/15
*/
@Component
public class UploadComponent {
@Autowired
private ISysOssService ossService;
@Autowired
private ISysUserFileRecordService fileRecordService;
public R<SysOssVo> upload(String title, ByteArrayOutputStream ba, String suffix, String contentType) {
ByteArrayInputStream bio = new ByteArrayInputStream(ba.toByteArray());
OssClient client = OssFactory.instance();
UploadResult uploadResult = client.uploadSuffix(bio, suffix, contentType);
//总文件记录
SysOssVo sysOssVo = ossService.buildResultEntity(title.concat(suffix), suffix, client.getConfigKey(), uploadResult);
//用户文件记录
fileRecordService.add(new SysUserFileRecord(sysOssVo.getOriginalName(), 1, sysOssVo.getUrl()));
return R.ok(sysOssVo);
}
}
//package com.dsk.jsk.controller;
//
//
//import com.dsk.common.core.domain.AjaxResult;
//import com.dsk.jsk.domain.PageQueryLimit;
//import com.dsk.jsk.domain.bo.ComposeQueryDto;
//import com.dsk.jsk.service.BusinessOpportunityRadarService;
//import org.springframework.web.bind.annotation.*;
//
//import javax.annotation.Resource;
//
//
///**
// * 查企业
// * @author Administrator
// *
// */
//@RequestMapping("/enterprise")
//@RestController
//public class CompanySearchController {
//
//
// @Resource
// BusinessOpportunityRadarService opportunityRadarService;
//
// /*
// * 模糊查询企业名称
// */
// @PostMapping("/index")
// public AjaxResult landMarketPage(@RequestBody ComposeQueryDto dto) {
// if (PageQueryLimit.pageLimit(dto.getPage())){
// return AjaxResult.error("翻页已达到上限");
// }
// return opportunityRadarService.enterpriseIndex(dto);
// }
//
// /*
// * 完全匹配企业名称
// */
// @GetMapping("/findByName/{keyword}")
// public AjaxResult findByName(@PathVariable String keyword) {
// return opportunityRadarService.enterpriseByName(keyword);
// }
//
// /*
// * 完全匹配企业名称
// */
// @PostMapping("/page")
// public AjaxResult page(@RequestBody ComposeQueryDto dto) {
// if (PageQueryLimit.pageLimit(dto.getPage())){
// return AjaxResult.error("翻页已达到上限");
// }
// return opportunityRadarService.enterprisePage(dto);
// }
//}
......@@ -8,6 +8,7 @@ import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.core.service.OssService;
import com.dsk.component.UploadComponent;
import com.dsk.jsk.domain.JskCombineBidPageDto;
import com.dsk.jsk.domain.JskCombineCertificateDto;
import com.dsk.jsk.domain.JskCombineCountDto;
......@@ -18,8 +19,10 @@ import com.dsk.jsk.service.JskCombineInfoService;
import com.dsk.oss.core.OssClient;
import com.dsk.oss.entity.UploadResult;
import com.dsk.oss.factory.OssFactory;
import com.dsk.system.domain.SysUserFileRecord;
import com.dsk.system.domain.vo.SysOssVo;
import com.dsk.system.service.ISysOssService;
import com.dsk.system.service.ISysUserFileRecordService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......@@ -44,7 +47,7 @@ public class JskCombineInfoController extends BaseController {
@Autowired
private JskCombineInfoService baseService;
@Autowired
private ISysOssService ossService;
private UploadComponent uploadComponent;
/**
* 集团成员列表
......@@ -164,11 +167,12 @@ public class JskCombineInfoController extends BaseController {
*/
@PostMapping("/export/win/bid")
@SaCheckPermission("combine:info:export:win:bid")
public void exportWinBid(@RequestBody JskCombineSearchDto dto, HttpServletResponse response) {
public R<SysOssVo> exportWinBid(@RequestBody JskCombineSearchDto dto) {
List<JskCombineWinBidProjectExportVo> list = baseService.exportWinBid(dto);
String title = dto.getCombineName().concat("中标业绩清单");
ExcelUtils<JskCombineWinBidProjectExportVo> util = new ExcelUtils<>(JskCombineWinBidProjectExportVo.class);
util.exportExcel(response, list, "集团中标", dto.getCombineName().concat("中标业绩清单"), true);
// String fileName = util.localInit(list, "集团中标", dto.getCombineName().concat("中标业绩清单"), true);
ByteArrayOutputStream ba = util.exportExcel(list, "集团中标", title, true);
return uploadComponent.upload(title, ba, Constants.SUFFIX_XLSX, Constants.CONTENT_TYPE_XLSX);
}
/**
......@@ -176,10 +180,12 @@ public class JskCombineInfoController extends BaseController {
*/
@PostMapping("/export/bid")
@SaCheckPermission("combine:info:export:bid")
public void exportBid(@RequestBody JskCombineBidPageDto dto, HttpServletResponse response) {
public R<SysOssVo> exportBid(@RequestBody JskCombineBidPageDto dto) {
List<JskCombineBidProjectExportVo> list = baseService.exportBid(dto);
String title = dto.getCombineName().concat("招标公告清单");
ExcelUtils<JskCombineBidProjectExportVo> util = new ExcelUtils<>(JskCombineBidProjectExportVo.class);
util.exportExcel(response, list, "集团招标", dto.getCombineName().concat("招标公告清单"), true);
ByteArrayOutputStream ba = util.exportExcel(list, "集团招标", title, true);
return uploadComponent.upload(title, ba, Constants.SUFFIX_XLSX, Constants.CONTENT_TYPE_XLSX);
}
......@@ -191,24 +197,6 @@ public class JskCombineInfoController extends BaseController {
return baseService.bidPage(dto);
}
/**
* 导出上传oss测试
*/
@PostMapping("/export/upload")
public R<SysOssVo> exportuUpload(@RequestBody JskCombineSearchDto dto) {
List<JskCombineWinBidProjectExportVo> list = baseService.exportWinBid(dto);
String title = dto.getCombineName().concat("中标业绩清单");
ExcelUtils<JskCombineWinBidProjectExportVo> util = new ExcelUtils<>(JskCombineWinBidProjectExportVo.class);
ByteArrayOutputStream ba = util.exportExcel(list, "集团中标", title, true);
ByteArrayInputStream bio = new ByteArrayInputStream(ba.toByteArray());
OssClient client = OssFactory.instance();
UploadResult uploadResult = client.uploadSuffix(bio, Constants.SUFFIX_XLSX, Constants.CONTENT_TYPE_XLSX);
//总文件记录
SysOssVo sysOssVo = ossService.buildResultEntity(title.concat(Constants.SUFFIX_XLSX), Constants.SUFFIX_XLSX, client.getConfigKey(), uploadResult);
return R.ok(sysOssVo);
}
/***
*@Description: 获取集团logo
*@Param:
......@@ -217,7 +205,7 @@ public class JskCombineInfoController extends BaseController {
*@date: 2023/9/12 16:05
*/
@RequestMapping(value = "/combineMemberLogo", method = RequestMethod.POST)
public R combineMemberLogo(@RequestBody Map<String,Object> paramMap) {
public R combineMemberLogo(@RequestBody Map<String, Object> paramMap) {
return baseService.combineMemberLogo(paramMap);
}
......
......@@ -3,17 +3,24 @@ package com.dsk.search.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.alibaba.fastjson2.JSONObject;
import com.dsk.biz.utils.ExcelUtils;
import com.dsk.common.constant.Constants;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.domain.R;
import com.dsk.common.utils.poi.ExcelUtil;
import com.dsk.component.UploadComponent;
import com.dsk.jsk.domain.bo.ComposeQueryDto;
import com.dsk.jsk.domain.vo.ImportantProjectExportVo;
import com.dsk.jsk.domain.vo.JskCombineBidProjectExportVo;
import com.dsk.search.service.BusinessOpportunityRadarService;
import com.dsk.system.domain.vo.SysOssVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.util.List;
......@@ -29,6 +36,8 @@ public class BusinessOpportunityRadarController {
@Resource
private BusinessOpportunityRadarService opportunityRadarService;
@Autowired
private UploadComponent uploadComponent;
/*
* 公招标讯
......@@ -184,11 +193,12 @@ public class BusinessOpportunityRadarController {
*/
@RequestMapping("/export/important")
@SaCheckPermission("radar:export:important")
public void exportBid(@RequestBody JSONObject object, HttpServletResponse response) {
public R<SysOssVo> exportBid(@RequestBody JSONObject object, HttpServletResponse response) {
List<ImportantProjectExportVo> list = opportunityRadarService.exportImportant(object);
// ExcelUtil<ImportantProjectExportVo> util = new ExcelUtil<>(ImportantProjectExportVo.class);
String title = "重点项目导出明细";
ExcelUtils<ImportantProjectExportVo> util = new ExcelUtils<>(ImportantProjectExportVo.class);
util.exportExcel(response, list, "重点项目", "重点项目导出明细", true);
ByteArrayOutputStream ba = util.exportExcel(list, "重点项目", title, true);
return uploadComponent.upload(title, ba, Constants.SUFFIX_XLSX, Constants.CONTENT_TYPE_XLSX);
}
/*
......
......@@ -76,6 +76,14 @@ export function bidPage(data) {
data: data
})
}
// 集团业绩导出
export function exportWinBid(data) {
return request({
url: '/combine/info/export/win/bid',
method: 'post',
data: data
})
}
// 集团招标导出
export function exportBid(data) {
return request({
......
......@@ -133,3 +133,12 @@ export function deptTreeSelect() {
method: 'get'
})
}
// 用户文件记录列表
export function fileList(data) {
return request({
url: '/user/file/record/list',
method: 'get',
params:data
})
}
......@@ -53,7 +53,7 @@
<script>
import mixin from '../../party-a/mixins/mixin'
import {businessList} from '@/api/detail/groupAccount/groupAccount'
import {businessList,exportWinBid} from '@/api/detail/groupAccount/groupAccount'
import dataRegion from '@/assets/json/dataRegion1'
import { getDictType } from '@/api/main'
export default {
......@@ -271,8 +271,27 @@
this.dataEXCEL.pageSize=this.tableDataTotal;
}
delete this.dataEXCEL.pageNum
this.$download.exportByPost('/combine/info/export/win/bid',this.dataEXCEL,'集团中标.xlsx');
exportWinBid(this.dataEXCEL).then(res=>{
if(res.code === 200){
this.downloadFile(res.data.url,res.data.originalName)
}
})
// this.$download.exportByPost('/combine/info/export/win/bid',this.dataEXCEL,'集团中标.xlsx');
},
downloadFile(url, fileName) {
const x = new XMLHttpRequest()
x.open("GET", url, true)
x.responseType = 'blob'
x.onload=function(e) {
const url = window.URL.createObjectURL(x.response)
const a = document.createElement('a')
a.href = url
a.download = fileName
a.click()
a.remove()
}
x.send()
}
}
}
</script>
......
......@@ -363,7 +363,25 @@
this.dataEXCEL.pageSize=this.tableDataTotal;
}
delete this.dataEXCEL.pageNum
this.$download.exportByPost('/combine/info/export/bid',this.dataEXCEL,'集团招标.xlsx');
exportBid(this.dataEXCEL).then(res=>{
if(res.code === 200){
this.downloadFile(res.data.url,res.data.originalName)
}
})
},
downloadFile(url, fileName) {
const x = new XMLHttpRequest()
x.open("GET", url, true)
x.responseType = 'blob'
x.onload=function(e) {
const url = window.URL.createObjectURL(x.response)
const a = document.createElement('a')
a.href = url
a.download = fileName
a.click()
a.remove()
}
x.send()
},
clickFocus(e){
document.getElementById(e).classList.toggle('span-ba')
......
......@@ -17,6 +17,7 @@
return {
loading: false, // 是否加载完成-当前页控制
iframeTimer: '', // 是否加载中定时器-当前页控制
footHeight: 0, //底部高度,若为0(页面内部嵌套或者没有底部板块)
iframeHight: window.innerHeight, // iframe高度-当前页控制
navigation: {isFixed: true, fixedHeight: 56, totalHeight: 68}, // iframe之外页面顶部对象,ifFixed:是否浮动;fixedHeight:浮动对象高度;totalHeight:顶部整体高度
src: '', //iframe嵌套页面地址
......@@ -34,11 +35,11 @@
},
mounted() {
this.iframeLoading() // 判断iframe页面是否加载完成-当前页控制
steerScroll('companyIframe', this.navigation, true) // 监听滚动(iframe的id、页面排除iframe后页面剩下顶部高度[例:80]、增加监听[不传就是移除监听]、父级id[不带默认就是铺满整个页面]]
steerScroll('companyIframe', this.navigation, this.footHeight, true) // iframeId: iframe的id;navigation:页面排除iframe后剩下的顶部高度;footHeight: 页面排除iframe后剩下的底部高度;state:监听or移除监听;parentId: 父级id[不带默认就是铺满整个页面]];_this:指向当前实例(可忽略
},
beforeDestroy() {
clearInterval(this.iframeTimer) // -当前页控制
steerScroll('companyIframe', this.navigation) // 销毁滚动
steerScroll('companyIframe', this.navigation, this.footHeight) // iframeId: iframe的id;navigation:页面排除iframe后剩下的顶部高度;footHeight: 页面排除iframe后剩下的底部高度;state:监听or移除监听;parentId: 父级id[不带默认就是铺满整个页面]];_this:指向当前实例(可忽略)
clearInterval(this.tokentimer)
},
methods: {
......
......@@ -272,8 +272,8 @@
if(this.nosend == true){
return false
}
// logincaptchaSms(this.dxform).then(res=>{
// if(res.code == 200){
logincaptchaSms(this.dxform).then(res=>{
if(res.code == 200){
this.$message.success('已发送短信!')
let _this = this
......@@ -288,14 +288,14 @@
_this.smstime = 60
}
},1000)
// }else{
// this.$message.error(res.msg)
// this.getCode()
// this.showcode = true
// }
// }).catch(res=>{
// this.$message.error(res.msg)
// })
}else{
this.$message.error(res.msg)
this.getCode()
this.showcode = true
}
}).catch(res=>{
this.$message.error(res.msg)
})
},
handleLogin() {
this.$refs.loginForm.validate(valid => {
......
......@@ -40,20 +40,36 @@
<el-table-column prop="major" label="资质类型"/>
<el-table-column label="特级" align="right">
<el-table-column prop="tjCount" label="数量(个)" align="right"/>
<el-table-column prop="tjRate" label="占比(%)" align="right"/>
<el-table-column prop="tjCount" label="数量" align="right">
<template slot-scope="scope">{{ scope.row.tjCount }}</template>
</el-table-column>
<el-table-column prop="tjRate" label="占比" align="right">
<template slot-scope="scope">{{ scope.row.tjRate }}%</template>
</el-table-column>
</el-table-column>
<el-table-column label="一级" align="right">
<el-table-column prop="oneCount" label="数量(个)" align="right"/>
<el-table-column prop="oneRate" label="占比(%)" align="right"/>
<el-table-column prop="oneCount" label="数量" align="right">
<template slot-scope="scope">{{ scope.row.oneCount }}</template>
</el-table-column>
<el-table-column prop="oneRate" label="占比" align="right">
<template slot-scope="scope">{{ scope.row.oneRate }}%</template>
</el-table-column>
</el-table-column>
<el-table-column label="二级" align="right">
<el-table-column prop="twoCount" label="数量(个)" align="right"/>
<el-table-column prop="twoRate" label="占比(%)" align="right"/>
<el-table-column prop="twoCount" label="数量" align="right">
<template slot-scope="scope">{{ scope.row.twoCount }}</template>
</el-table-column>
<el-table-column prop="twoRate" label="占比" align="right">
<template slot-scope="scope">{{ scope.row.twoRate }}%</template>
</el-table-column>
</el-table-column>
<el-table-column label="三级" align="right">
<el-table-column prop="threeCount" label="数量(个)" align="right"/>
<el-table-column prop="threeRate" label="占比(%)" align="right"/>
<el-table-column prop="threeCount" label="数量" align="right">
<template slot-scope="scope">{{ scope.row.threeCount }}</template>
</el-table-column>
<el-table-column prop="threeRate" label="占比" align="right">
<template slot-scope="scope">{{ scope.row.threeRate }}%</template>
</el-table-column>
</el-table-column>
</el-table>
</div>
......@@ -85,20 +101,36 @@
</el-table-column>
<el-table-column prop="province" label="地区"/>
<el-table-column label="特级" align="right">
<el-table-column prop="tjCount" label="数量(个)" align="right"/>
<el-table-column prop="tjRate" label="占比(%)" align="right"/>
<el-table-column prop="tjCount" label="数量" align="right">
<template slot-scope="scope">{{ scope.row.tjCount }}</template>
</el-table-column>
<el-table-column prop="tjRate" label="占比" align="right">
<template slot-scope="scope">{{ scope.row.tjRate }}%</template>
</el-table-column>
</el-table-column>
<el-table-column label="一级" align="right">
<el-table-column prop="oneCount" label="数量(个)" align="right"/>
<el-table-column prop="oneRate" label="占比(%)" align="right"/>
<el-table-column prop="oneCount" label="数量" align="right">
<template slot-scope="scope">{{ scope.row.oneCount }}</template>
</el-table-column>
<el-table-column prop="oneRate" label="占比" align="right">
<template slot-scope="scope">{{ scope.row.oneRate }}%</template>
</el-table-column>
</el-table-column>
<el-table-column label="二级" align="right">
<el-table-column prop="twoCount" label="数量(个)" align="right"/>
<el-table-column prop="twoRate" label="占比(%)" align="right"/>
<el-table-column prop="twoCount" label="数量" align="right">
<template slot-scope="scope">{{ scope.row.twoCount }}</template>
</el-table-column>
<el-table-column prop="twoRate" label="占比" align="right">
<template slot-scope="scope">{{ scope.row.twoRate }}%</template>
</el-table-column>
</el-table-column>
<el-table-column label="三级" align="right">
<el-table-column prop="threeCount" label="数量(个)" align="right"/>
<el-table-column prop="threeRate" label="占比(%)" align="right"/>
<el-table-column prop="threeCount" label="数量" align="right">
<template slot-scope="scope">{{ scope.row.threeCount }}</template>
</el-table-column>
<el-table-column prop="threeRate" label="占比" align="right">
<template slot-scope="scope">{{ scope.row.threeRate }}%</template>
</el-table-column>
</el-table-column>
</el-table>
</div>
......@@ -127,7 +159,9 @@
<template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column>
<el-table-column prop="province" label="地区" />
<el-table-column prop="count" label="企业异地备案数量(个)" sortable align="right"/>
<el-table-column prop="count" label="企业异地备案数量" sortable align="right">
<template slot-scope="scope">{{ scope.row.count }}</template>
</el-table-column>
<!--<el-table-column prop="zb" label="占比"/>-->
</el-table>
</div>
......
......@@ -167,6 +167,7 @@
getYears(){
getYears({}).then(res => {
this.yearOptions=res.data.reverse();
this.queryParams.year=this.yearOptions[0].year
})
},
//地区
......
......@@ -31,8 +31,12 @@
<template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column>
<el-table-column prop="type" label="供应方式" :formatter="formatStatus"/>
<el-table-column prop="count" label="土地交易项目 (个)" align="right" :formatter="formatStatus" sortable/>
<el-table-column prop="rate" label="占比(%)" align="right" :formatter="formatStatus" width="100"/>
<el-table-column prop="count" label="土地交易项目" align="right" :formatter="formatStatus" sortable>
<template slot-scope="scope">{{ scope.row.count }}</template>
</el-table-column>
<el-table-column prop="rate" label="占比" align="right" :formatter="formatStatus" width="90">
<template slot-scope="scope">{{ scope.row.rate }}%</template>
</el-table-column>
</el-table>
</div>
</div>
......@@ -70,8 +74,12 @@
<template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column>
<el-table-column prop="type" label="供应方式" :formatter="formatStatus"/>
<el-table-column prop="count" label="土地交易项目 (个)" align="right" :formatter="formatStatus" sortable/>
<el-table-column prop="rate" label="占比(%)" align="right" :formatter="formatStatus" width="100"/>
<el-table-column prop="count" label="土地交易项目" align="right" :formatter="formatStatus" sortable>
<template slot-scope="scope">{{ scope.row.count }}</template>
</el-table-column>
<el-table-column prop="rate" label="占比" align="right" :formatter="formatStatus" width="90">
<template slot-scope="scope">{{ scope.row.rate }}%</template>
</el-table-column>
</el-table>
</div>
</div>
......@@ -112,8 +120,12 @@
<template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column>
<el-table-column prop="province" label="地区" :formatter="formatStatus"/>
<el-table-column prop="count" label="土地交易项目 (个)" align="right" :formatter="formatStatus" sortable/>
<el-table-column prop="rate" label="占比(%)" align="right" :formatter="formatStatus" width="100"/>
<el-table-column prop="count" label="土地交易项目" align="right" :formatter="formatStatus" sortable>
<template slot-scope="scope">{{ scope.row.count }}</template>
</el-table-column>
<el-table-column prop="rate" label="占比" align="right" :formatter="formatStatus" width="90">
<template slot-scope="scope">{{ scope.row.rate }}%</template>
</el-table-column>
</el-table>
</div>
</div>
......@@ -147,8 +159,12 @@
<template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column>
<el-table-column prop="type" label="年份" :formatter="formatStatus"/>
<el-table-column prop="count" label="土地交易项目 (个)" align="right" :formatter="formatStatus" sortable/>
<el-table-column prop="rate" label="占比(%)" align="right" :formatter="formatStatus" width="100"/>
<el-table-column prop="count" label="土地交易项目" align="right" :formatter="formatStatus" sortable>
<template slot-scope="scope">{{ scope.row.count }}</template>
</el-table-column>
<el-table-column prop="rate" label="占比" align="right" :formatter="formatStatus" width="90">
<template slot-scope="scope">{{ scope.row.rate }}%</template>
</el-table-column>
</el-table>
</div>
</div>
......@@ -789,6 +805,9 @@ export default {
width: 33%;
float: right;
::v-deep .el-table{
.caret-wrapper{
width: 13px;
}
.sort-caret.ascending{
border-bottom-color: rgba(0,129,255,0.5);
}
......
......@@ -27,7 +27,9 @@
<template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column>
<el-table-column prop="type" label="年份" :formatter="formatStatus"/>
<el-table-column prop="count" label="招标数量(个)" align="right" :formatter="formatStatus" sortable/>
<el-table-column prop="count" label="招标数量" align="right" :formatter="formatStatus" sortable>
<template slot-scope="scope">{{ scope.row.count }}</template>
</el-table-column>
</el-table>
</div>
</div>
......@@ -63,8 +65,12 @@
<template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column>
<el-table-column prop="province" label="地区" :formatter="formatStatus"/>
<el-table-column prop="count" label="招标数量 (个)" align="right" :formatter="formatStatus" sortable/>
<el-table-column prop="rate" label="占比(%)" align="right" :formatter="formatStatus" width="100" />
<el-table-column prop="count" label="招标数量" align="right" :formatter="formatStatus" sortable>
<template slot-scope="scope">{{ scope.row.count }}</template>
</el-table-column>
<el-table-column prop="rate" label="占比" align="right" :formatter="formatStatus" width="100">
<template slot-scope="scope">{{ scope.row.rate }}%</template>
</el-table-column>
</el-table>
</div>
</div>
......@@ -101,8 +107,12 @@
<template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column>
<el-table-column prop="label" label="时间" :formatter="formatStatus"/>
<el-table-column prop="count" label="招标数量(个)" align="right" :formatter="formatStatus" sortable/>
<el-table-column prop="rate" label="占比(%)" align="right" :formatter="formatStatus" width="100" />
<el-table-column prop="count" label="招标数量" align="right" :formatter="formatStatus" sortable>
<template slot-scope="scope">{{ scope.row.count }}</template>
</el-table-column>
<el-table-column prop="rate" label="占比" align="right" :formatter="formatStatus" width="100">
<template slot-scope="scope">{{ scope.row.rate }}%</template>
</el-table-column>
</el-table>
</div>
......
......@@ -30,10 +30,18 @@
<template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column>
<el-table-column prop="type" label="项目类型" :formatter="formatStatus" width="100"/>
<el-table-column prop="count" label="中标数量 (个)" align="right" :formatter="formatStatus" sortable width="130"/>
<el-table-column prop="countRate" label="数量占比(%)" align="right" :formatter="formatStatus" sortable width="140"/>
<el-table-column prop="money" label="中标总金额 (万元)" align="right" :formatter="formatStatus" sortable width="170"/>
<el-table-column prop="moneyRate" label="金额占比(%)" align="right" :formatter="formatStatus" sortable width="140"/>
<el-table-column prop="count" label="中标数量" align="right" :formatter="formatStatus" sortable width="130">
<template slot-scope="scope">{{ scope.row.count }}</template>
</el-table-column>
<el-table-column prop="countRate" label="数量占比" align="right" :formatter="formatStatus" sortable width="140">
<template slot-scope="scope">{{ scope.row.countRate }}%</template>
</el-table-column>
<el-table-column prop="money" label="中标总金额" align="right" :formatter="formatStatus" sortable width="190">
<template slot-scope="scope">{{ scope.row.money }}万元</template>
</el-table-column>
<el-table-column prop="moneyRate" label="金额占比" align="right" :formatter="formatStatus" sortable width="120">
<template slot-scope="scope">{{ scope.row.moneyRate }}%</template>
</el-table-column>
</el-table>
</div>
</div>
......@@ -70,10 +78,18 @@
<template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column>
<el-table-column prop="province" label="地区" :formatter="formatStatus" width="100"/>
<el-table-column prop="count" label="中标数量 (个)" align="right" :formatter="formatStatus" sortable width="130"/>
<el-table-column prop="countRate" label="数量占比(%)" align="right" :formatter="formatStatus" sortable width="150"/>
<el-table-column prop="sumMoney" label="中标总金额 (万元)" align="right" :formatter="formatStatus" sortable width="170"/>
<el-table-column prop="moneyRate" label="金额占比(%)" align="right" :formatter="formatStatus" sortable width="145"/>
<el-table-column prop="count" label="中标数量" align="right" :formatter="formatStatus" sortable width="130">
<template slot-scope="scope">{{ scope.row.count }}</template>
</el-table-column>
<el-table-column prop="countRate" label="数量占比" align="right" :formatter="formatStatus" sortable width="140">
<template slot-scope="scope">{{ scope.row.countRate }}%</template>
</el-table-column>
<el-table-column prop="sumMoney" label="中标总金额" align="right" :formatter="formatStatus" sortable width="190">
<template slot-scope="scope">{{ scope.row.sumMoney }}万元</template>
</el-table-column>
<el-table-column prop="moneyRate" label="金额占比" align="right" :formatter="formatStatus" sortable width="120">
<template slot-scope="scope">{{ scope.row.moneyRate }}%</template>
</el-table-column>
</el-table>
</div>
</div>
......@@ -110,8 +126,12 @@
<template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column>
<el-table-column prop="rangeName" label="中标金额" :formatter="formatStatus"/>
<el-table-column prop="count" label="中标数量 (个)" align="right" :formatter="formatStatus" sortable/>
<el-table-column prop="rate" label="占比(%)" align="right" :formatter="formatStatus" width="120" sortable/>
<el-table-column prop="count" label="中标数量" align="right" :formatter="formatStatus" sortable>
<template slot-scope="scope">{{ scope.row.count }}</template>
</el-table-column>
<el-table-column prop="rate" label="占比" align="right" :formatter="formatStatus" width="120" sortable>
<template slot-scope="scope">{{ scope.row.rate }}%</template>
</el-table-column>
</el-table>
</div>
</div>
......@@ -145,8 +165,12 @@
<template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column>
<el-table-column prop="year" label="年份" :formatter="formatStatus" width="100"/>
<el-table-column prop="count" label="中标数量 (个)" align="right" :formatter="formatStatus" sortable/>
<el-table-column prop="sumMoney" label="中标总金额(万元)" align="right" :formatter="formatStatus"/>
<el-table-column prop="count" label="中标数量" align="right" :formatter="formatStatus" sortable>
<template slot-scope="scope">{{ scope.row.count }}</template>
</el-table-column>
<el-table-column prop="sumMoney" label="中标总金额" align="right" :formatter="formatStatus">
<template slot-scope="scope">{{ scope.row.sumMoney }}万元</template>
</el-table-column>
</el-table>
</div>
</div>
......@@ -183,8 +207,12 @@
<template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column>
<el-table-column prop="label" label="时间" :formatter="formatStatus" width="130"/>
<el-table-column prop="rate" label="下浮率(%)" align="right" :formatter="formatStatus" sortable/>
<el-table-column prop="count" label="统计项目数量 (个)" align="right" :formatter="formatStatus"/>
<el-table-column prop="rate" label="下浮率" align="right" :formatter="formatStatus" sortable>
<template slot-scope="scope">{{ scope.row.rate }}%</template>
</el-table-column>
<el-table-column prop="count" label="统计项目数量" align="right" :formatter="formatStatus">
<template slot-scope="scope">{{ scope.row.count }}</template>
</el-table-column>
</el-table>
</div>
</div>
......@@ -225,9 +253,15 @@
<template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column>
<el-table-column prop="month" label="时间" :formatter="formatStatus" width="120"/>
<el-table-column prop="sgRate" label="施工类下浮率(%)" align="right" :formatter="formatStatus" width="160"/>
<el-table-column prop="kcsjRate" label="勘察设计类下浮率(%)" align="right" :formatter="formatStatus"/>
<el-table-column prop="jlRate" label="监理类下浮率(%)" align="right" :formatter="formatStatus" width="160"/>
<el-table-column prop="sgRate" label="施工类下浮率" align="right" :formatter="formatStatus" width="160">
<template slot-scope="scope">{{ scope.row.sgRate }}%</template>
</el-table-column>
<el-table-column prop="kcsjRate" label="勘察设计类下浮率" align="right" :formatter="formatStatus">
<template slot-scope="scope">{{ scope.row.kcsjRate }}%</template>
</el-table-column>
<el-table-column prop="jlRate" label="监理类下浮率" align="right" :formatter="formatStatus" width="160">
<template slot-scope="scope">{{ scope.row.jlRate }}%</template>
</el-table-column>
</el-table>
</div>
</div>
......
......@@ -673,7 +673,6 @@ export default {
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
this.form.userName = this.form.phonenumber
if (this.form.userId != undefined) {
updateUser(this.form).then(response => {
if(response.code == 200){
......@@ -687,6 +686,7 @@ export default {
}
});
} else {
this.form.userName = this.form.phonenumber
addUser(this.form).then(response => {
if(response.code == 200){
this.$modal.msgSuccess("新增成功");
......
......@@ -53,6 +53,38 @@
</el-tab-pane>
</el-tabs>
</el-card>
<el-card style="margin-top: 16px" v-if="tableDataTotal > 0">
<div slot="header" class="clearfix">
<span>数据导出</span>
</div>
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<div class="table-item">
<el-table
class="fixed-table"
:data="tableData"
element-loading-text="Loading"
v-horizontal-scroll="'hover'"
max-height="640px"
border
highlight-current-row
v-if="tableDataTotal > 0 && !isSkeleton"
>
<el-table-column label="序号" width="60" align="left">
<template slot-scope="scope">{{ (params.pageNum - 1 )* params.pageSize + scope.$index + 1 }}</template>
</el-table-column>
<el-table-column label="导出表格名称" align="left" prop="fileName"></el-table-column>
<el-table-column label="导出时间" align="left" prop="createTime"></el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope" align="left">
<div class="wordprimary" style="text-align: left" @click="getFile(scope.row.url)">下载表格</div>
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination-box" v-if="tableDataTotal>params.pageSize">
<el-pagination background :current-page="params.pageNum" :page-size="params.pageSize" :total="tableDataTotal" layout="prev, pager, next, jumper" @current-change="handleCurrentChange" @size-change="handleSizeChange" />
</div>
</el-card>
</el-col>
</el-row>
</div>
......@@ -62,21 +94,27 @@
import userAvatar from "./userAvatar";
import userInfo from "./userInfo";
import resetPwd from "./resetPwd";
import { getUserProfile } from "@/api/system/user";
import { getUserProfile,fileList } from "@/api/system/user";
import skeleton from '@/views/project/projectList/component/skeleton'
export default {
name: "Profile",
components: { userAvatar, userInfo, resetPwd },
components: { userAvatar, userInfo, resetPwd,skeleton },
data() {
return {
user: {},
roleGroup: {},
postGroup: {},
activeTab: "userinfo"
activeTab: "userinfo",
isSkeleton:true,
tableData:[],
tableDataTotal:0,
params:{pageNum:1,pageSize:10},
};
},
created() {
this.getUser();
this.fileList()
},
methods: {
getUser() {
......@@ -85,6 +123,30 @@ export default {
this.roleGroup = response.data.roleGroup;
this.postGroup = response.data.postGroup;
});
},
fileList(){
fileList(this.params).then(res=>{
if(res.code == 200){
this.tableData = res.rows
this.tableDataTotal = res.total
}else{
this.tableData = []
this.tableDataTotal = 0
}
this.isSkeleton = false
})
},
handleCurrentChange(val){
this.params.pageNum = val
this.fileList()
},
handleSizeChange(val){
this.params.pageNum = 1
this.params.pageSize = val
this.fileList()
},
getFile(url){
window.open(url)
}
}
};
......
package com.dsk.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author lcl
* @create 2023/9/15
*/
@Data
@NoArgsConstructor
@TableName("sys_user_file_record")
public class SysUserFileRecord implements Serializable {
@TableId(value = "id")
private Long id;
private String fileName;
private Integer type;
private String url;
private Long userId;
private Integer status;
private String remark;
private Date createTime;
public SysUserFileRecord(String fileName, Integer type, String url) {
this.fileName = fileName;
this.type = type;
this.url = url;
}
}
package com.dsk.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.system.domain.SysUserFileRecord;
/**
* 用户文件记录
* @author lcl
* @create 2023/9/15
*/
public interface SysUserFileRecordMapper extends BaseMapper<SysUserFileRecord> {
}
package com.dsk.system.service;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.system.domain.SysUserFileRecord;
/**
* @author lcl
* @create 2023/9/15
*/
public interface ISysUserFileRecordService {
TableDataInfo<SysUserFileRecord> userList(PageQuery page);
boolean add(SysUserFileRecord bean);
}
package com.dsk.system.service.impl;
import cn.hutool.core.bean.BeanException;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.helper.LoginHelper;
import com.dsk.system.domain.SysUserFileRecord;
import com.dsk.system.mapper.SysUserFileRecordMapper;
import com.dsk.system.service.ISysUserFileRecordService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.util.Date;
/**
* 用户文件记录
*
* @author lcl
* @create 2023/9/15
*/
@Slf4j
@Service
public class SysUserFileRecordServiceImpl implements ISysUserFileRecordService
{
@Resource
private SysUserFileRecordMapper baseMapper;
@Override
public TableDataInfo<SysUserFileRecord> userList(PageQuery page)
{
return TableDataInfo.build(
baseMapper.selectPage(page.build(), Wrappers.<SysUserFileRecord>lambdaQuery()
.eq(SysUserFileRecord::getUserId, LoginHelper.getUserId())
.eq(SysUserFileRecord::getType, 1)
.ge(SysUserFileRecord::getCreateTime, DateUtil.offsetDay(new Date(), -30))
.orderByDesc(SysUserFileRecord::getCreateTime))
);
}
@Override
public boolean add(SysUserFileRecord bean)
{
dataVerify(bean);
return baseMapper.insert(bean) != 0;
}
private void dataVerify(SysUserFileRecord bean)
{
if(ObjectUtils.isEmpty(bean.getUrl())) throw new BeanException("文件存储链接不能为空!");
if(ObjectUtils.isEmpty(bean.getFileName())) throw new BeanException("文件名称不能为空!");
if(ObjectUtils.isEmpty(bean.getType())) throw new BeanException("文件类型不能为空!");
bean.setUserId(LoginHelper.getUserId());
}
}
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