Commit 96864d26 authored by tianhongyang's avatar tianhongyang

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

parents 94265561 83d014ec
......@@ -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("投标金额不能为空!");
}
}
......@@ -3,7 +3,7 @@
height: 100%;
transition: margin-left 0.28s;
margin-left: $base-sidebar-width;
width: calc(100% - $base-sidebar-width);
width: calc(100% - #{$base-sidebar-width});
position: relative;
background: #f5f5f5;
}
......
......@@ -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',
......
......@@ -840,6 +840,78 @@ export default {
}
}
}
::v-deep .normal-search-container {
display: flex;
align-items: center;
&.is-hover-search {
width: 238px;
background: #f4f6f9;
border-radius: 4px 4px 4px 4px;
& > img {
cursor: unset;
}
}
&:hover {
& > span {
color: #0081ff;
}
}
& > img {
width: 16px;
height: 16px;
margin-left: 12px;
cursor: pointer;
}
& > span {
color: rgba(35, 35, 35, 0.8);
font-weight: 400;
margin-left: 8px;
line-height: 22px;
font-size: 14px;
cursor: pointer;
}
.el-input {
& > .el-input__inner {
border: none;
height: 32px;
line-height: 32px;
caret-color: #0081ff;
color: rgba(35, 35, 35, 0.8);
font-size: 14px;
background: #f4f6f9;
padding-right: 26px;
padding-left: 8px;
&::placeholder {
color: rgba(35, 35, 35, 0.4) !important;
font-size: 14px !important;
line-height: 32px;
}
}
.el-input__suffix {
right: 12px;
display: flex;
align-items: center;
.el-input__suffix-inner {
height: 14px;
width: 14px;
}
img {
cursor: pointer;
vertical-align: unset;
margin-bottom: 14px;
}
}
}
}
}
}
.box {
......
......@@ -8,10 +8,23 @@
<div class="p2">建议调整关键词或筛选条件,重新搜索</div>
</div>
<div class="table_search">
<div class="newSearch">
<el-input type="text" v-model="searchParam.companyName" clearable placeholder="输入企业名称查询" @change="clearname" >
<i slot="prefix" class="el-input__icon"><img src="@/assets/images/project/sousuo.png" width="16px" @click="handleCurrentChange(1)"></i>
</el-input>
<div>
<!-- 未点击前的输入框样式 -->
<div class="normal-search-container" :class="{'is-hover-search' : hover}" @mouseover="searchHover($event)"
@mouseleave="searchUnHover($event,searchParam.companyName)">
<img src="@/assets/images/enterprise/enterprise-search-icon.svg" alt="">
<span v-show="!hover && !searchParam.companyName">搜索</span>
<el-input v-model="searchParam.companyName" placeholder="输入关键词查询"
@focus="searchFocus($event)" @blur="searchBlur($event)" @keydown.native.enter="getCustomerList"
@input="value => searchInput(value)" v-show="hover || searchParam.companyName">
<template slot="suffix">
<transition mode="out-in" appear name="fade">
<img src="@/assets/images/enterprise/search-input-clear-icon.svg" alt="" @click.stop="searchParam.companyName = '';getCustomerList()"
v-show="showClearIcon">
</transition>
</template>
</el-input>
</div>
</div>
<div class="dc">
<div class="total">共{{tableData.total}}条</div>
......@@ -239,6 +252,8 @@ export default {
keys:1,
RLcompanyName:'',//重新认领企业名称
isSkeleton:true,
showClearIcon: false,
hover: false,
}
},
created() {
......@@ -336,6 +351,28 @@ export default {
this.searchParam.pageNum=val
this.getCustomerList()
},
searchFocus(event) {
const { target } = event;
if (target?.value?.length) {
this.showClearIcon=true
}
},
searchBlur(event) {
this.showClearIcon=false
},
searchInput(value) {
if (value?.length) {
this.showClearIcon=true
}
},
searchHover(event) {
this.hover=true
},
searchUnHover(event, value) {
if (!value) {
this.hover=false
}
},
}
}
</script>
......@@ -358,6 +395,81 @@ export default {
padding-top: 16px;
width: 100%;
height: 100%;
.table_search{
::v-deep .normal-search-container {
display: flex;
align-items: center;
line-height: 32px;
height: 32px;
&.is-hover-search {
width: 238px;
background: #f4f6f9;
border-radius: 4px 4px 4px 4px;
& > img {
cursor: unset;
}
}
&:hover {
& > span {
color: #0081ff;
}
}
& > img {
width: 16px;
height: 16px;
margin-left: 12px;
cursor: pointer;
}
& > span {
color: rgba(35, 35, 35, 0.8);
font-weight: 400;
margin-left: 8px;
line-height: 22px;
font-size: 14px;
cursor: pointer;
}
.el-input {
& > .el-input__inner {
border: none;
height: 32px;
line-height: 32px;
caret-color: #0081ff;
color: rgba(35, 35, 35, 0.8);
font-size: 14px;
background: #f4f6f9;
padding-right: 26px;
padding-left: 8px;
&::placeholder {
color: rgba(35, 35, 35, 0.4) !important;
font-size: 14px !important;
line-height: 32px;
}
}
.el-input__suffix {
right: 12px;
display: flex;
align-items: center;
.el-input__suffix-inner {
height: 14px;
width: 14px;
}
img {
cursor: pointer;
vertical-align: unset;
margin-bottom: 14px;
}
}
}
}
}
}
.box{
position: relative;
......
......@@ -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();
},
......
......@@ -2776,12 +2776,10 @@ export default {
},
toEnterprise(id, html, type,name) {
// this.$tab.openPage(name, '/company/' + encodeStr(id) + '/' + (html ? '?html=' + html : '') + (type ? '&flag=true&type=' + type : ''))
this.$router.push({path:'/company/' + encodeStr(id) + '/' + (html ? html : '') + (type ? '?flag=true&type=' + type : '')} )
this.$tab.openPage(name, '/company/' + encodeStr(id) + '/' + (html ? html + '/' : '') + (type ? '?flag=true&type=' + type : ''))
},
toEnterpriseDetail(id,name) {
// this.$tab.openPage(name, '/company/' + encodeStr(id) + '/?index=true')
this.$router.push({path:'/company/' + encodeStr(id) + '/?index=true'} )
this.$tab.openPage(name, '/company/' + encodeStr(id) )
},
labelsWidth(e, t = 0) {
......
......@@ -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;
}
......
......@@ -32,19 +32,35 @@
<!--<i slot="prefix" class="el-icon-search"></i>-->
<!--<el-button slot="append" @click="handleSearch()">搜索</el-button>-->
<!--</el-input>-->
<!--&lt;!&ndash; 未点击前的输入框样式 &ndash;&gt;-->
<!--<div class="normal-search-container" @click="showSearchBox = true" v-if="!showSearchBox">-->
<!--<img src="@/assets/images/enterprise/enterprise-search-icon.svg" alt="">-->
<!--<span>搜索</span>-->
<!--</div>-->
<!--&lt;!&ndash; 输入框展开后样式 &ndash;&gt;-->
<!--<transition @enter="onEnter" appear mode="out-in">-->
<!--<div class="cooperate-name enterprise-search-container" id="focus1" v-if="showSearchBox">-->
<!--<el-input clearable @clear="handleSearch" @focus="clickFocus('focus1')" @blur="clickFocus('focus1')" v-model="queryParams.ename"-->
<!--placeholder="输入关键词查询"></el-input>-->
<!--<span @click="handleSearch">搜索</span>-->
<!--</div>-->
<!--</transition>-->
<!-- 未点击前的输入框样式 -->
<div class="normal-search-container" @click="showSearchBox = true" v-if="!showSearchBox">
<div class="normal-search-container" :class="{'is-hover-search' : hover}" @mouseover="searchHover($event)"
@mouseleave="searchUnHover($event,queryParams.ename)">
<img src="@/assets/images/enterprise/enterprise-search-icon.svg" alt="">
<span>搜索</span>
<span v-show="!hover && !queryParams.ename">搜索</span>
<el-input v-model="queryParams.ename" placeholder="输入关键词查询"
@focus="searchFocus($event)" @blur="searchBlur($event)" @keydown.native.enter="handleSearch"
@input="value => searchInput(value)" v-show="hover || queryParams.ename">
<template slot="suffix">
<transition mode="out-in" appear name="fade">
<img src="@/assets/images/enterprise/search-input-clear-icon.svg" alt="" @click.stop="queryParams.ename = '';handleSearch()"
v-show="showClearIcon">
</transition>
</template>
</el-input>
</div>
<!-- 输入框展开后样式 -->
<transition @enter="onEnter" appear mode="out-in">
<div class="cooperate-name enterprise-search-container" id="focus1" v-if="showSearchBox">
<el-input clearable @clear="handleSearch" @focus="clickFocus('focus1')" @blur="clickFocus('focus1')" v-model="queryParams.ename"
placeholder="输入关键词查询"></el-input>
<span @click="handleSearch">搜索</span>
</div>
</transition>
<span class="total">共{{tableDataTotal}}条</span>
</div>
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
......@@ -157,7 +173,8 @@ export default {
timePlaceholder:'中标时间',
inputID1:this.getUid(),
inputID2:this.getUid(),
showSearchBox: false
showClearIcon: false,
hover: false,
}
},
created() {
......@@ -315,6 +332,28 @@ export default {
this.querySubmit()
}
},
searchFocus(event) {
const { target } = event;
if (target?.value?.length) {
this.showClearIcon=true
}
},
searchBlur(event) {
this.showClearIcon=false
},
searchInput(value) {
if (value?.length) {
this.showClearIcon=true
}
},
searchHover(event) {
this.hover=true
},
searchUnHover(event, value) {
if (!value) {
this.hover=false
}
},
formatStatus: function(row, column, cellValue) {
return cellValue? cellValue : '-'
},
......@@ -593,12 +632,21 @@ export default {
margin-bottom: 3px;
}
}
.normal-search-container {
margin-left: 12px;
::v-deep .normal-search-container {
display: flex;
align-items: center;
cursor: pointer;
height: 34px;
line-height: 32px;
height: 32px;
&.is-hover-search {
width: 238px;
background: #f4f6f9;
border-radius: 4px 4px 4px 4px;
& > img {
cursor: unset;
}
}
&:hover {
& > span {
color: #0081ff;
......@@ -609,15 +657,52 @@ export default {
width: 16px;
height: 16px;
margin-left: 12px;
cursor: pointer;
}
& > span {
color: #232323;
color: rgba(35, 35, 35, 0.8);
font-weight: 400;
margin-left: 8px;
line-height: 22px;
font-size: 14px;
cursor: pointer;
}
.el-input {
& > .el-input__inner {
border: none;
height: 32px;
line-height: 32px;
caret-color: #0081ff;
color: rgba(35, 35, 35, 0.8);
font-size: 14px;
background: #f4f6f9;
padding-right: 26px;
padding-left: 8px;
&::placeholder {
color: rgba(35, 35, 35, 0.4) !important;
font-size: 14px !important;
line-height: 32px;
}
}
.el-input__suffix {
right: 12px;
display: flex;
align-items: center;
.el-input__suffix-inner {
height: 14px;
width: 14px;
}
img {
cursor: pointer;
vertical-align: unset;
margin-bottom: 14px;
}
}
}
}
.cooperate-name {
......
......@@ -44,7 +44,7 @@ export default {
} else {
this.domain = 'https://pre-plug.jiansheku.com';
// this.domain = 'http://192.168.60.8:3400';
this.domain = 'http://192.168.60.104:3400';
// this.domain = 'http://192.168.60.210:3400';
}
this.gettokens();
this.iframeObserver();
......
......@@ -151,7 +151,7 @@
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="用户编号" align="center" :key='mathkey+1' prop="userId" v-if="columns[0].visible" />
<!--<el-table-column label="用户名称" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />-->
<el-table-column label="用户称" align="center" :key='mathkey+2' prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
<el-table-column label="用户称" align="center" :key='mathkey+2' prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
<el-table-column label="组织" align="center" :key='mathkey+3' prop="dept.deptName" v-if="columns[3].visible" :show-overflow-tooltip="true" />
<el-table-column label="手机号码" align="center" :key='mathkey+4' prop="phonenumber" v-if="columns[4].visible" width="120" />
<el-table-column label="状态" align="center" :key='mathkey+5' v-if="columns[5].visible">
......
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