Commit b4f33b30 authored by yht15023815643's avatar yht15023815643

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

parents 48d6bb00 60a833cc
......@@ -61,9 +61,9 @@ public class BusinessOpenTenderServiceImpl implements IBusinessOpenTenderService
}
private void verifyBean(BusinessOpenTender bo){
if(ObjectUtils.isArray(bo.getBusinessId())) throw new BeanException("项目id不能为空!");
if(ObjectUtils.isArray(bo.getTenderer())) throw new BeanException("开标人不能为空!");
if(ObjectUtils.isArray(bo.getTendererNature())) throw new BeanException("企业性质不能为空!");
if(ObjectUtils.isArray(bo.getTenderAmount())) throw new BeanException("投标金额不能为空!");
if(ObjectUtils.isEmpty(bo.getBusinessId())) throw new BeanException("项目id不能为空!");
if(ObjectUtils.isEmpty(bo.getTenderer())) throw new BeanException("投标人不能为空!");
// if(ObjectUtils.isEmpty(bo.getTendererNature())) throw new BeanException("企业性质不能为空!");
// if(ObjectUtils.isEmpty(bo.getTenderAmount())) throw new BeanException("投标金额不能为空!");
}
}
......@@ -309,8 +309,7 @@ export const modifyBidOpeningRecordApi = (data) => request({
*/
export const removeBidOpeningRecordApi = (params) => request({
method: "DELETE",
url: "/business/open/tender",
params
url: `/business/open/tender/${params}`,
});
<svg width="24" height="24" viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg"><path d="M23.063 13.171a1.2 1.2 0 011.874 0l13.503 16.88c.629.785.07 1.949-.937 1.949H10.497c-1.006 0-1.566-1.164-.937-1.95l13.503-16.879z"/></svg>
\ No newline at end of file
<svg width="24" height="24" viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg"><path d="M24.937 34.829a1.2 1.2 0 01-1.874 0L9.56 17.949C8.93 17.165 9.49 16 10.497 16h27.006c1.007 0 1.566 1.164.937 1.95L24.937 34.829z"/></svg>
\ No newline at end of file
......@@ -16,3 +16,7 @@
.fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
opacity: 0;
}
.el-message {
z-index: 3000 !important;
}
......@@ -44,7 +44,7 @@
<svg :class="isActive(tag)?'tags-icon tags-icon-active':'tags-icon'" aria-hidden="true">
<use :xlink:href="iconName(tag)" />
</svg>
<span :id="isActive(tag)?'tagTitle':''">{{ tag.title }}</span>
<span :id="isActive(tag)?'tagTitle':''">{{ tag.title.replace(/<[^>]+>/g, '') }}</span>
<span v-if="!isAffix(tag)" class="el-icon-close" @click.prevent.stop="closeSelectedTag(tag)" />
<i :class="index!=visitedViews.length-1 && index != isActiveIndex() && index != isActiveIndex()-1?'tags-item-line':'tags-item-line item-color'" />
</router-link>
......
......@@ -159,6 +159,18 @@ export const constantRoutes = [
}
]
},
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/JumpPage.html',
component: () => import('@/views/detail'),
}
]
},
//乙方-企业详情
{
path: '/company',
......
/*
* @Author: thy
* @Date: 2023-10-26 14:56:41
* @LastEditors: thy
* @LastEditTime: 2023-10-26 16:00:22
* @Description: file content
* @FilePath: \dsk-operate-ui\src\utils\postMessageBridge\bridge\index.js
*/
class PostMessageBridge {
constructor() {
}
}
\ No newline at end of file
......@@ -37,7 +37,7 @@ export default {
this.domain='https://plug.jiansheku.com'
}else {
this.domain='https://pre-plug.jiansheku.com'
this.domain='http://192.168.60.210:3400'
// this.domain='http://192.168.60.210:3400'
}
this.gettokens();
},
......
......@@ -35,11 +35,6 @@
</transition>
</template>
</el-input>
<!-- <div class="cooperate-name enterprise-search-container" :id="'focus'+i">
<el-input clearable @clear="changeSelect" @focus="clickFocus('focus'+i)" @blur="clickFocus('focus'+i)" v-model="form.value"
:placeholder="form.placeholder" :style="form.width?'width:'+form.width+'px':'width:180px'"></el-input>
<span @click="changeSelect">搜索</span>
</div> -->
</div>
</template>
<!-- 多选 -->
......
......@@ -221,7 +221,7 @@
<p>温馨提示:此操作可能会影响正在使用的用户,建议合理安排同步时间</p>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogVisible1 = false">取消</el-button>
<el-button type="primary" @click="handleConfirm()" >同步</el-button>
<el-button type="primary" @click="handleConfirm()" :loading="state">同步</el-button>
</div>
</el-dialog>
</div>
......@@ -305,7 +305,8 @@
},
//企业方案列表
packageList:[],
syncItem:{}
syncItem:{},
state:false,
};
},
created() {
......@@ -390,8 +391,10 @@
/** 同步按钮操作 */
handleConfirm() {
let _this = this
this.state=true
syncTenantPackage({tenantId:this.syncItem.tenantId,packageId:this.syncItem.packageId}).then(res => {
if(res.code === 200){
this.state=false
_this.$message.success(res.msg);
this.dialogVisible1=false;
}
......
......@@ -11,9 +11,9 @@
<script>
import { steerScroll } from '@/assets/js/jskplug';
import { dskAccessToken } from '@/api/common';
import {encodeStr} from "@/assets/js/common"
import { encodeStr } from "@/assets/js/common";
import MaxPageSizeTip from "@/views/components/MaxPageSizeTip.vue";
import { getUipIdByCid } from '@/api/macro/macro'
import { getUipIdByCid } from '@/api/macro/macro';
export default {
name: 'Enterprise',
components: {
......@@ -42,13 +42,13 @@ export default {
if (window.location.host === 'http://szh.jiansheku.com' || window.location.host === 'szh.jiansheku.com') {
this.domain = 'https://plug.jiansheku.com';
} else {
this.domain='https://pre-plug.jiansheku.com'
this.domain = 'https://pre-plug.jiansheku.com';
// this.domain = 'http://192.168.60.8:3400';
this.domain = 'http://192.168.60.210:3400';
// this.domain = 'http://192.168.60.210:3400';
}
this.gettokens();
this.iframeObserver();
let that = this
let that = this;
window.addEventListener("message", this.pagecapListener, { passive: true });
window.addEventListener('message', this.linkListener, false);
},
......@@ -66,26 +66,26 @@ export default {
this.iframeIns.contentWindow.postMessage("removeHtmlLayoutStyle", { targetOrigin: this.domain, });
},
methods: {
linkListener(event){
let {data} = event
if(data.id){
getUipIdByCid([data.id]).then(res=>{
if (res.code==200) {
if(res.data&&res.data.length>0&&res.data[0].uipId){
this.$router.push({path: '/enterprise/'+this.encodeStr(data.id)})
}else{
this.$tab.openPage(data.title, '/company/'+this.encodeStr(data.id))
linkListener(event) {
let { data } = event;
if (data.id) {
getUipIdByCid([data.id]).then(res => {
if (res.code == 200) {
if (res.data && res.data.length > 0 && res.data[0].uipId) {
this.$router.push({ path: '/enterprise/' + this.encodeStr(data.id) });
} else {
this.$tab.openPage(data.title, '/company/' + this.encodeStr(data.id));
}
}
}).catch(error=>{
}).catch(error => {
});
}else{
if(data.url){
} else {
if (data.url) {
this.$tab.openPage(data.title, data.url).then(() => {
// 执行结束的逻辑
})
});
}
}
},
......@@ -151,9 +151,13 @@ export default {
<style lang="scss" scoped>
.market-container {
width: 100%;
height: 100%;
padding: 16px 24px;
padding-right: 15px;
box-sizing: border-box;
position: absolute;
left: 0;
top: 0;
.market-iframe {
width: 100%;
......
<template>
<div class="batch-import-com">
<!-- 导入弹窗 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px">
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url" :disabled="upload.isUploading"
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<span>仅允许导入xls、xlsx格式文件。</span>
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm">确 定</el-button>
<el-button @click="upload.open = false">取 消</el-button>
</div>
</el-dialog>
<!--导入结果-->
<el-dialog title="导入失败" :visible.sync="upload.showResult" width="60%" class="batch-import-upload-dialog-container"
custom-class="batch-import-upload-dialog" @close="importResultClose">
<div class="batch-import-upload-inner">
<el-table :data="uploadResult.errorMsg" border stripe v-if="uploadResult.errorMsg.length" class="error-msg-list-table" max-height="500px">
<el-table-column label="导入状态">
<template slot-scope="scope">
<span style="color:red;">导入失败</span>
</template>
</el-table-column>
<!-- <el-table-column label="投标人">
<template slot-scope="scope">
<span></span>
</template>
</el-table-column> -->
<el-table-column label="导入失败原因">
<template slot-scope="scope">
<span style="color:red;">{{scope.row}}</span>
</template>
</el-table-column>
</el-table>
<el-row style="padding-top: 20px;text-align: right">
<el-button @click="upload.showResult = false">取消</el-button>
<el-button type="primary" @click="upload.showResult = false">确定</el-button>
</el-row>
</div>
</el-dialog>
</div>
</template>
<script>
export default {
name: "batchImportCom",
props: {
uploadOptions: {
type: Object,
default: () => ({})
}
},
watch: {
"uploadOptions": {
handler(newValue, oldValue) {
this.upload = newValue;
},
deep: true
}
},
data() {
return {
// 导入参数
upload: this.uploadOptions,
// 导入结果
uploadResult: {
successCount: 0,
errorCount: 0,
errorMsg: []
}
};
},
//可访问data属性
created() {
},
//计算集
computed: {
},
//方法集
methods: {
// 文件上传中处理
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
// 文件上传成功处理
handleFileSuccess(response, file, fileList) {
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
if (response.code == 200) {
this.$message.success('上传成功!');
if (response.data) {
this.uploadResult.successCount = response.data.sucessCount;
this.uploadResult.errorCount = response.data.errorCount;
response.data.errorMsg ? this.uploadResult.errorMsg = response.data.errorMsg : null;
this.upload.showResult = true;
}
} else {
this.$message.error(`上传失败,${response.msg ? response.msg : "请根据模板正确填写表格内容!"}`);
}
},
// 提交上传文件
submitFileForm() {
this.$refs.upload.submit();
},
/** 下载模板操作 */
importTemplate() {
let a = document.createElement("a");
a.setAttribute("href", this.upload.fileTemplateUrl);
a.setAttribute("download", `${this.upload.fileName}_${new Date().getTime()}.xlsx`);
document.body.appendChild(a);
a.click();
a.remove();
},
importResultClose() {
this.upload.showResult = false;
this.uploadResult = this.$options.data.call(this).uploadResult;
},
},
}
</script>
<style lang="scss" scoped>
.batch-import-com {
::v-deep.batch-import-upload-dialog-container {
.batch-import-upload-dialog {
width: 100%;
max-height: 85%;
overflow: auto;
.el-dialog__header {
position: sticky;
top: 0px;
background: #fff;
z-index: 99;
padding-bottom: 0px;
}
.batch-import-upload-inner {
width: 100%;
display: flex;
flex-direction: column;
.result-count {
line-height: 32px;
.success {
color: #67c23a;
}
.error {
color: #f56c6c;
}
}
.error-msg-list-table {
margin-top: 8px;
}
}
}
}
}
</style>
......@@ -106,8 +106,8 @@ export default {
},
onSuccess(res, file, fileList) {
if (res.code == 200) {
this.successCount = res.successCount;
let str = '成功导入条数' + res.successCount + ',失败条数' + res.errorCount;
this.successCount = res.data.successCount;
let str = '成功导入条数' + res.data.successCount + ',失败条数' + res.data.errorCount;
this.messages = str;
this.addsuccess = true;
} else {
......
......@@ -226,6 +226,10 @@
<span>总投资:</span>
<span v-html="item.money+'万元'"></span>
</p>
<p class="list-content-text"v-if="item.handleTime">
<span>最新审批日期:</span>
<span>{{item.handleTime}}</span>
</p>
<p class="list-content-text"v-if="item.planStartTime">
<span>计划开工日期:</span>
<span>{{item.planStartTime}}</span>
......@@ -598,7 +602,7 @@
}else{
this.page = page;
this.search(page, this.limit);
this.jump1();
window.scrollTo(0, 400);
}
},
fieldCommand(command) {
......
......@@ -345,9 +345,6 @@
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<!--<div class="el-upload__tip" slot="tip">-->
<!--<el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据-->
<!--</div>-->
<span>仅允许导入xls、xlsx格式文件。</span>
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link>
</div>
......
package com.dsk.system.service.impl;
import cn.dev33.satoken.secure.BCrypt;
import cn.dev33.satoken.session.SaSession;
import cn.dev33.satoken.session.TokenSign;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dsk.common.constant.CacheNames;
......@@ -15,9 +20,11 @@ import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.domain.entity.SysDictData;
import com.dsk.common.core.domain.entity.SysDictType;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.enums.UserStatus;
import com.dsk.common.exception.ServiceException;
import com.dsk.common.utils.PasswordUtils;
import com.dsk.common.utils.StringUtils;
import com.dsk.common.utils.redis.RedisUtils;
import com.dsk.system.domain.*;
import com.dsk.system.domain.bo.SysTenantBo;
import com.dsk.system.domain.vo.SysTenantVo;
......@@ -201,6 +208,7 @@ public class ISysTenantServiceImpl implements ISysTenantService {
String password = PasswordUtils.generatePwd(8);
user.setPassword(BCrypt.hashpw(password));
user.setDeptId(deptId);
user.setCreateTime(new DateTime());
userMapper.insert(user);
//新增系统用户后,默认当前用户为部门的负责人
SysDept sd = new SysDept();
......@@ -393,6 +401,24 @@ public class ISysTenantServiceImpl implements ISysTenantService {
roleMenuMapper.delete(
new LambdaQueryWrapper<SysRoleMenu>().in(SysRoleMenu::getRoleId, roleIds).notIn(!menuIds.isEmpty(), SysRoleMenu::getMenuId, menuIds));
}
try {
//清除企业用户登录信息
List<SysUser> tenantUsers = userMapper.selectList(Wrappers.<SysUser>lambdaQuery()
.eq(SysUser::getTenantId, tenantId).eq(SysUser::getStatus, UserStatus.OK.getCode()));
if (!CollectionUtils.isEmpty(tenantUsers)) {
for (SysUser tenantUser : tenantUsers) {
String key = "global:Authorization:login:session:00:" + tenantUser.getUserId();
if (RedisUtils.hasKey(key)) {
SaSession session = RedisUtils.getCacheObject(key);
List<TokenSign> tokenSignList = session.getTokenSignList();
tokenSignList.forEach(sign -> StpUtil.kickoutByTokenValue(sign.getValue()));
}
}
}
} catch (Exception e) {
log.error("清除企业用户登录信息操作失败!error={}", e.getMessage());
}
return true;
}
......
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