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 ...@@ -61,9 +61,9 @@ public class BusinessOpenTenderServiceImpl implements IBusinessOpenTenderService
} }
private void verifyBean(BusinessOpenTender bo){ private void verifyBean(BusinessOpenTender bo){
if(ObjectUtils.isArray(bo.getBusinessId())) throw new BeanException("项目id不能为空!"); if(ObjectUtils.isEmpty(bo.getBusinessId())) throw new BeanException("项目id不能为空!");
if(ObjectUtils.isArray(bo.getTenderer())) throw new BeanException("开标人不能为空!"); if(ObjectUtils.isEmpty(bo.getTenderer())) throw new BeanException("投标人不能为空!");
if(ObjectUtils.isArray(bo.getTendererNature())) throw new BeanException("企业性质不能为空!"); // if(ObjectUtils.isEmpty(bo.getTendererNature())) throw new BeanException("企业性质不能为空!");
if(ObjectUtils.isArray(bo.getTenderAmount())) throw new BeanException("投标金额不能为空!"); // if(ObjectUtils.isEmpty(bo.getTenderAmount())) throw new BeanException("投标金额不能为空!");
} }
} }
...@@ -309,8 +309,7 @@ export const modifyBidOpeningRecordApi = (data) => request({ ...@@ -309,8 +309,7 @@ export const modifyBidOpeningRecordApi = (data) => request({
*/ */
export const removeBidOpeningRecordApi = (params) => request({ export const removeBidOpeningRecordApi = (params) => request({
method: "DELETE", method: "DELETE",
url: "/business/open/tender", url: `/business/open/tender/${params}`,
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 @@ ...@@ -16,3 +16,7 @@
.fade-leave-to /* .fade-leave-active below version 2.1.8 */ { .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
opacity: 0; opacity: 0;
} }
.el-message {
z-index: 3000 !important;
}
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
<svg :class="isActive(tag)?'tags-icon tags-icon-active':'tags-icon'" aria-hidden="true"> <svg :class="isActive(tag)?'tags-icon tags-icon-active':'tags-icon'" aria-hidden="true">
<use :xlink:href="iconName(tag)" /> <use :xlink:href="iconName(tag)" />
</svg> </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)" /> <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'" /> <i :class="index!=visitedViews.length-1 && index != isActiveIndex() && index != isActiveIndex()-1?'tags-item-line':'tags-item-line item-color'" />
</router-link> </router-link>
......
...@@ -159,6 +159,18 @@ export const constantRoutes = [ ...@@ -159,6 +159,18 @@ export const constantRoutes = [
} }
] ]
}, },
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/JumpPage.html',
component: () => import('@/views/detail'),
}
]
},
//乙方-企业详情 //乙方-企业详情
{ {
path: '/company', 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
<template> <template>
<div @click = 'handleALL' class="app-container"> <div @click='handleALL' class="custom-list-container">
<div class="miantitle"> <div class="miantitle">
<span>客户管理</span> <span>客户管理</span>
<span> / 客户列表</span> <span> / 客户列表</span>
</div> </div>
<div> <div>
<el-card class="box-card noborder min1370"> <el-card class="box-card noborder">
<div class="tables "> <div class="tables ">
<div class="empty" v-if="tableData.total==0 && !isSkeleton"> <div class="empty" v-if="tableData.total==0 && !isSkeleton">
<img src="@/assets/images/project/empty.png"> <img src="@/assets/images/project/empty.png">
...@@ -18,51 +18,39 @@ ...@@ -18,51 +18,39 @@
<div> <div>
<el-form ref="queryForm" :model="searchParam" :inline="true" size="small"> <el-form ref="queryForm" :model="searchParam" :inline="true" size="small">
<el-form-item> <el-form-item>
<el-cascader <el-cascader ref="address1" :class="[`select-adaptive-${inputID1}`]" :options="addressList" :props="addressProps" v-model="address"
ref="address1" @change="iptAdaptive(inputID1,true)" placeholder="地区选择" collapse-tags style="width: 130px;" clearable></el-cascader>
:class="[`select-adaptive-${inputID1}`]"
:options="addressList"
:props="addressProps"
v-model="address"
@change="iptAdaptive(inputID1,true)"
placeholder="地区选择"
collapse-tags
style="width: 130px;"
clearable></el-cascader>
</el-form-item> </el-form-item>
<el-form-item prop="companyNatures"> <el-form-item prop="companyNatures">
<el-select v-model="searchParam.companyNatures" :class="[`select-adaptive-${inputID2}`]" style="width: 130px;" @change="iptAdaptive(inputID2,true)" multiple collapse-tags clearable class="form-content-width" placeholder="客户性质"> <el-select v-model="searchParam.companyNatures" :class="[`select-adaptive-${inputID2}`]" style="width: 130px;"
@change="iptAdaptive(inputID2,true)" multiple collapse-tags clearable class="form-content-width" placeholder="客户性质">
<el-option v-for="(item, index) in companyNaturelist" :key="index" :label="item.dictLabel" :value="item.dictValue" /> <el-option v-for="(item, index) in companyNaturelist" :key="index" :label="item.dictLabel" :value="item.dictValue" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="isOn"> <el-form-item prop="isOn">
<el-select v-model="searchParam.isOn" :class="[`select-adaptive-${inputID3}`]" filterable clearable style="width: 130px;" @change="iptAdaptive(inputID3)" class="form-content-width" placeholder="上市公司"> <el-select v-model="searchParam.isOn" :class="[`select-adaptive-${inputID3}`]" filterable clearable style="width: 130px;"
@change="iptAdaptive(inputID3)" class="form-content-width" placeholder="上市公司">
<el-option v-for="(item, index) in isMajorlist" :key="index" :label="item.dictLabel" :value="item.dictValue" /> <el-option v-for="(item, index) in isMajorlist" :key="index" :label="item.dictLabel" :value="item.dictValue" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="creditLevels"> <el-form-item prop="creditLevels">
<el-select v-model="searchParam.creditLevels" :class="[`select-adaptive-${inputID4}`]" style="width: 130px;" @change="iptAdaptive(inputID4,true)" multiple collapse-tags clearable class="form-content-width" placeholder="资信评级"> <el-select v-model="searchParam.creditLevels" :class="[`select-adaptive-${inputID4}`]" style="width: 130px;"
@change="iptAdaptive(inputID4,true)" multiple collapse-tags clearable class="form-content-width" placeholder="资信评级">
<el-option v-for="(item, index) in creditLevellist" :key="index" :label="item.dictLabel" :value="item.dictValue" /> <el-option v-for="(item, index) in creditLevellist" :key="index" :label="item.dictLabel" :value="item.dictValue" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="companyName"> <el-form-item prop="companyName">
<!--<div class="newSearch">--> <div class="normal-search-container" :class="{'is-hover-search' : searchHoverStatus}" @mouseover="searchHover($event)"
<!--<el-input type="text" v-model="searchParam.companyName" clearable placeholder="输入企业名称查询" @change="clearname" >--> @mouseleave="searchUnHover($event,form)">
<!--<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=""> <img src="@/assets/images/enterprise/enterprise-search-icon.svg" alt="">
<span v-show="!hover && !searchParam.companyName">搜索</span> <span v-show="!searchHoverStatus && !searchParam.companyName">搜索</span>
<el-input v-model="searchParam.companyName" placeholder="输入关键词查询" <el-input v-model="searchParam.companyName" placeholder="输入关键词查询" style="width:238px;" @focus="searchFocus($event)"
@focus="searchFocus($event)" @blur="searchBlur($event)" @keydown.native.enter="handleSearch" @blur="searchBlur($event)" @input="value => searchInput(value)" v-show="searchHoverStatus || searchParam.companyName"
@input="value => searchInput(value)" v-show="hover || searchParam.companyName"> @keydown.native.enter="handleSearch">
<template slot="suffix"> <template slot="suffix">
<transition mode="out-in" appear name="fade"> <transition mode="out-in" appear name="fade">
<img src="@/assets/images/enterprise/search-input-clear-icon.svg" alt="" @click.stop="searchParam.companyName = '';handleSearch()" <img src="@/assets/images/enterprise/search-input-clear-icon.svg" alt=""
v-show="showClearIcon"> @click.stop="searchParam.companyName = '';handleSearch" v-show="showClearIcon">
</transition> </transition>
</template> </template>
</el-input> </el-input>
...@@ -74,171 +62,127 @@ ...@@ -74,171 +62,127 @@
<div class="dc"> <div class="dc">
<div class="total">共{{tableData.total}}条</div> <div class="total">共{{tableData.total}}条</div>
<div class="btn-export" @click="pldrs"><img src="@/assets/images/project/import.png">批量导入</div> <div class="btn-export" @click="pldrs"><img src="@/assets/images/project/import.png">批量导入</div>
<div class="btn btn_primary h32 p10" @click="opennew"><div class="img img1"></div>添加客户</div> <div class="btn btn_primary h32 p10" @click="opennew">
<div class="img img1"></div>添加客户
</div>
</div> </div>
</div> </div>
<skeleton v-if="isSkeleton"></skeleton> <skeleton v-if="isSkeleton"></skeleton>
<div class="table-item"> <div class="table-item">
<el-table v-show="!isSkeleton&&tableData.total > 0" class="fixed-table" v-horizontal-scroll="'hover'" ref="thistables" <el-table v-show="!isSkeleton&&tableData.total > 0" class="fixed-table" v-horizontal-scroll="'hover'" ref="thistables"
:data="tableData.rows" :data="tableData.rows" stripe border style="width: 100%">
stripe border <el-table-column prop="index" label="序号" fixed="left" width="60">
style="width: 100%">
<el-table-column
prop="index"
label="序号"
fixed="left"
width="60">
<template slot-scope='scope'> <template slot-scope='scope'>
<span>{{ (searchParam.pageNum - 1) * searchParam.pageSize + scope.$index + 1 }}</span> <span>{{ (searchParam.pageNum - 1) * searchParam.pageSize + scope.$index + 1 }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="date" label="企业名称" fixed="left" width="316">
prop="date"
label="企业名称"
fixed="left"
width="316">
<template slot-scope="scope"> <template slot-scope="scope">
<div class="ps1"> <div class="ps1">
<div class="wordprimary ps2" @click="toDetail(scope.row,'business')" v-html="scope.row.companyName"></div> <div class="wordprimary ps2" @click="toDetail(scope.row,'business')" v-html="scope.row.companyName"></div>
<div class="ps3"> <div class="ps3">
<el-tooltip class="item" effect="dark" content="写跟进" placement="top" transition="" :open-delay="450"> <el-tooltip class="item" effect="dark" content="写跟进" placement="top" transition="" :open-delay="450">
<div @click="toDetail(scope.row,'gjjl')"><img class="i" src="@/assets/images/project/edit_1.png"><img class="o" src="@/assets/images/project/edit_11.png"></div> <div @click="toDetail(scope.row,'gjjl')"><img class="i" src="@/assets/images/project/edit_1.png"><img class="o"
src="@/assets/images/project/edit_11.png"></div>
</el-tooltip> </el-tooltip>
<el-tooltip class="item" effect="dark" content="编辑信息" placement="top" transition="" :open-delay="450"> <el-tooltip class="item" effect="dark" content="编辑信息" placement="top" transition="" :open-delay="450">
<div @click="toDetail(scope.row,'business')"><img class="i" src="@/assets/images/project/edit_2.png"><img class="o" src="@/assets/images/project/edit_22.png"></div> <div @click="toDetail(scope.row,'business')"><img class="i" src="@/assets/images/project/edit_2.png"><img class="o"
src="@/assets/images/project/edit_22.png"></div>
</el-tooltip> </el-tooltip>
</div> </div>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="cooperationProject" label="合作项目" width="90">
prop="cooperationProject"
label="合作项目"
width="90">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.cooperationProject || '--'}} {{scope.row.cooperationProject || '--'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="followProject" label="跟进项目" width="90">
prop="followProject"
label="跟进项目"
width="90">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.followProject || '--'}} {{scope.row.followProject || '--'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="reserveProject" label="储备项目" width="90">
prop="reserveProject"
label="储备项目"
width="90">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.reserveProject || '--'}} {{scope.row.reserveProject || '--'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="legalPerson" label="法定代表人" width="110">
prop="legalPerson"
label="法定代表人"
width="110">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.legalPerson || '--'}} {{scope.row.legalPerson || '--'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="registerAddress" label="注册地区" width="160">
prop="registerAddress"
label="注册地区"
width="160">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.registerAddress || '--'}} {{scope.row.registerAddress || '--'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="registerCapitalStr" label="注册资本金(万元)" width="160">
prop="registerCapitalStr"
label="注册资本金(万元)"
width="160">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.registerCapital && scope.row.registerCapital>0">{{scope.row.registerCapital}}</span><span v-else>--</span> <span v-if="scope.row.registerCapital && scope.row.registerCapital>0">{{scope.row.registerCapital}}</span><span v-else>--</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="creditLevel" label="企业主体评级" width="120">
prop="creditLevel"
label="企业主体评级" width="120">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.creditLevel || '--'}} {{scope.row.creditLevel || '--'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="isOn" label="上市公司" width="90">
prop="isOn"
label="上市公司" width="90">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.isOn == 1?"是":"否"}} {{scope.row.isOn == 1?"是":"否"}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="isMajor" label="局级大客户" width="90">
prop="isMajor"
label="局级大客户" width="90">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.isMajor != null"> <span v-if="scope.row.isMajor != null">
{{scope.row.isMajor == 1?"是":"否"}} {{scope.row.isMajor == 1?"是":"否"}}
</span> </span>
<span v-else>--</span> <span v-else>--</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="customerLevel" label="客户等级" width="90">
prop="customerLevel"
label="客户等级" width="90">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.customerLevel || '--'}} {{scope.row.customerLevel || '--'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="companyNature" label="客户性质" width="90">
prop="companyNature"
label="客户性质" width="90">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.companyNature || '--'}} {{scope.row.companyNature || '--'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="companyLevel" label="客户级别" width="90">
prop="companyLevel"
label="客户级别" width="90">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.companyLevel || '--'}} {{scope.row.companyLevel || '--'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="address" label="企业母公司" width="200">
prop="address"
label="企业母公司" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<div class="">{{scope.row.superCompany || '--'}}</div> <div class="">{{scope.row.superCompany || '--'}}</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :key="keys" <el-table-column :key="keys" prop="mainBusiness" label="主营业务" width="300">
prop="mainBusiness"
label="主营业务" width="300">
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.mainBusiness == null || scope.row.mainBusiness == ''">--</div> <div v-if="scope.row.mainBusiness == null || scope.row.mainBusiness == ''">--</div>
<div v-if="scope.row.mainBusiness1"> <div v-if="scope.row.mainBusiness1">
<div class="box" v-if="scope.row.sq1==true">{{scope.row.mainBusiness1}}...<span @click="sq1(scope.row,false)">更多</span></div> <div class="box" v-if="scope.row.sq1==true">{{scope.row.mainBusiness1}}...<span @click="sq1(scope.row,false)">更多</span></div>
<div class="box" v-else>{{scope.row.mainBusiness}}<span @click="sq1(scope.row,true)">收起</span></div> <div class="box" v-else>{{scope.row.mainBusiness}}<span @click="sq1(scope.row,true)">收起</span></div>
</div> </div>
<div v-else>{{scope.row.mainBusiness}}</div> <div v-else>{{scope.row.mainBusiness}}</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="companyAttribute" :key="keys+2" label="发包属性" width="300">
prop="companyAttribute" :key="keys+2"
label="发包属性" width="300">
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.companyAttribute == null || scope.row.companyAttribute == ''">--</div> <div v-if="scope.row.companyAttribute == null || scope.row.companyAttribute == ''">--</div>
<div v-if="scope.row.companyAttribute1"> <div v-if="scope.row.companyAttribute1">
<div class="box" v-if="scope.row.sq2==true">{{scope.row.companyAttribute1}}...<span @click="sq2(scope.row,false)">更多</span></div> <div class="box" v-if="scope.row.sq2==true">{{scope.row.companyAttribute1}}...<span @click="sq2(scope.row,false)">更多</span></div>
<div class="box" v-else>{{scope.row.companyAttribute}}<span @click="sq2(scope.row,true)">收起</span></div> <div class="box" v-else>{{scope.row.companyAttribute}}<span @click="sq2(scope.row,true)">收起</span></div>
</div> </div>
<div v-else>{{scope.row.companyAttribute}}</div> <div v-else>{{scope.row.companyAttribute}}</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="followUser" label="跟进人" width="110">
prop="followUser"
label="跟进人" width="110">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.followUser || '--'}} {{scope.row.followUser || '--'}}
</template> </template>
...@@ -246,36 +190,26 @@ ...@@ -246,36 +190,26 @@
</el-table> </el-table>
</div> </div>
<div class="bottems" v-if="tableData.total>searchParam.pageSize"> <div class="bottems" v-if="tableData.total>searchParam.pageSize">
<el-pagination <el-pagination background :page-size="searchParam.pageSize" :current-page="searchParam.pageNum" @current-change="handleCurrentChange"
background layout="prev, pager, next" :total="tableData.total">
:page-size="searchParam.pageSize"
:current-page="searchParam.pageNum"
@current-change="handleCurrentChange"
layout="prev, pager, next"
:total="tableData.total">
</el-pagination> </el-pagination>
</div> </div>
</div> </div>
<el-dialog <el-dialog class="popups" :visible.sync="dialogVisible" width="534px" :close-on-click-modal="false" @close="resetForm('ruleForm')">
class="popups"
:visible.sync="dialogVisible"
width="534px"
:close-on-click-modal="false"
@close="resetForm('ruleForm')"
>
<div class="poptitle"> <div class="poptitle">
<img src="@/assets/images/economies/icon.png"> <img src="@/assets/images/economies/icon.png">
<span>添加客户</span> <span>添加客户</span>
</div> </div>
<el-form class="popform j" :model="queryParam" :rules="rules" ref="ruleForm" label-width="130px"> <el-form class="popform j" :model="queryParam" :rules="rules" ref="ruleForm" label-width="130px">
<el-form-item label="企业名称:" class="row" prop="companyName"> <el-form-item label="企业名称:" class="row" prop="companyName">
<el-input type="text" placeholder="请输入" v-model="queryParam.companyName" @input="getCompany(1)"></el-input> <el-input type="text" placeholder="请输入" v-model="queryParam.companyName" @input="getCompany(1)"></el-input>
<div class="resultlist infinite-list" v-if="showlist" id="box" v-infinite-scroll="load" style="overflow:auto"> <div class="resultlist infinite-list" v-if="showlist" id="box" v-infinite-scroll="load" style="overflow:auto">
<div class="infinite-list-item" v-for="(item,index) in companData" @click="selCompany(item)"><span v-html="item.name" :key="companypage"></span></div> <div class="infinite-list-item" v-for="(item,index) in companData" @click="selCompany(item)"><span v-html="item.name"
:key="companypage"></span></div>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="客户等级:" class="row"> <el-form-item label="客户等级:" class="row">
<el-select placeholder="请选择" v-model="queryParam.customerLevel"> <el-select placeholder="请选择" v-model="queryParam.customerLevel">
<el-option v-for="(item,index) in customerLevel" :key="index" :label="item.dictLabel" :value="item.dictValue"></el-option> <el-option v-for="(item,index) in customerLevel" :key="index" :label="item.dictLabel" :value="item.dictValue"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
...@@ -286,7 +220,8 @@ ...@@ -286,7 +220,8 @@
<el-input type="text" placeholder="请输入" v-model="queryParam.registerCapital" @input='number'></el-input> <el-input type="text" placeholder="请输入" v-model="queryParam.registerCapital" @input='number'></el-input>
</el-form-item> </el-form-item>
<el-form-item label="企业注册地:" class="row"> <el-form-item label="企业注册地:" class="row">
<el-cascader :props="props" @change="getAddr($event)" ref="address" v-model="queryParam.address" :options="addressList" clearable></el-cascader> <el-cascader :props="props" @change="getAddr($event)" ref="address" v-model="queryParam.address" :options="addressList"
clearable></el-cascader>
</el-form-item> </el-form-item>
<el-form-item label="统一社会信用代码:" class="row"> <el-form-item label="统一社会信用代码:" class="row">
<el-input type="text" placeholder="请输入" v-model="queryParam.creditCode"></el-input> <el-input type="text" placeholder="请输入" v-model="queryParam.creditCode"></el-input>
...@@ -305,73 +240,72 @@ ...@@ -305,73 +240,72 @@
</template> </template>
<script> <script>
import { getToken } from '@/utils/auth' import { getToken } from '@/utils/auth';
import '@/assets/styles/project.scss' import '@/assets/styles/project.scss';
import { addCustomer, getCustomerList, importData } from '@/api/custom/custom' import { addCustomer, getCustomerList, importData } from '@/api/custom/custom';
import { getDictType, getEnterprise } from '@/api/main' import { getDictType, getEnterprise } from '@/api/main';
import prvinceTree from '@/assets/json/provinceTree' import prvinceTree from '@/assets/json/provinceTree';
import batchimport from '../../project/projectList/component/batchImport' import batchimport from '../../project/projectList/component/batchImport';
import skeleton from '../../project/projectList/component/skeleton' import skeleton from '../../project/projectList/component/skeleton';
import { encodeStr } from '@/assets/js/common' import { encodeStr } from '@/assets/js/common';
import { v4 } from "uuid"; import { v4 } from "uuid";
import gsap from "gsap"; export default {
export default {
name: 'CustomList', name: 'CustomList',
components:{batchimport,skeleton}, components: { batchimport, skeleton },
data() { data() {
return{ return {
encodeStr, encodeStr,
pldr: false, pldr: false,
types:'custom', types: 'custom',
searchParam:{ searchParam: {
companyName:'', companyName: '',
pageNum:1, pageNum: 1,
pageSize:20 pageSize: 20
}, },
address:'', address: '',
props:{ checkStrictly: true, expandTrigger: 'hover' }, props: { checkStrictly: true, expandTrigger: 'hover' },
dialogVisible:false, dialogVisible: false,
textarea:"", textarea: "",
nowedit:-1,//当前正在编辑的文本 nowedit: -1,//当前正在编辑的文本
tipslit:[],//项目标签 tipslit: [],//项目标签
tipsvalue:"",//标签填写内容 tipsvalue: "",//标签填写内容
tableData: [],//列表 tableData: [],//列表
companData:[],//联想企业列表 companData: [],//联想企业列表
addressProps: { addressProps: {
multiple: true, multiple: true,
expandTrigger: 'hover' expandTrigger: 'hover'
}, },
//上市公司 //上市公司
isMajorlist:[ isMajorlist: [
{ {
dictValue: 0, dictValue: 0,
dictLabel:'否', dictLabel: '否',
}, },
{ {
dictValue: 1, dictValue: 1,
dictLabel:'是', dictLabel: '是',
} }
], ],
companyNaturelist:[], //客户性质 companyNaturelist: [], //客户性质
creditLevellist:[], //资信评级 creditLevellist: [], //资信评级
customerLevel:[],//客户等级 customerLevel: [],//客户等级
addressList:[],//地区 addressList: [],//地区
//添加客户 //添加客户
queryParam:{ queryParam: {
companyId:'',//jsk企业id companyId: '',//jsk企业id
companyName:'',//客户名称(企业名称 companyName: '',//客户名称(企业名称
customerLevel:'',//客户等级 customerLevel: '',//客户等级
legalPerson:'',//法定代表人 legalPerson: '',//法定代表人
registerCapital:'',//注册资本 registerCapital: '',//注册资本
registerAddress:'',//企业注册地址 registerAddress: '',//企业注册地址
creditCode:'',//社会统一信用代码 creditCode: '',//社会统一信用代码
address:'',//选择的地址 address: '',//选择的地址
provinceId:'', provinceId: '',
cityId:'', cityId: '',
districtId:'', districtId: '',
}, },
rules:{ rules: {
companyName:[{ required: true, message: '请输入非空格字符!', trigger: 'blur' },] companyName: [{ required: true, message: '请输入非空格字符!', trigger: 'blur' },]
}, },
//批量导入 //批量导入
action: process.env.VUE_APP_BASE_API + "/customer/importData", action: process.env.VUE_APP_BASE_API + "/customer/importData",
...@@ -380,119 +314,126 @@ ...@@ -380,119 +314,126 @@
Authorization: "Bearer " + getToken(), Authorization: "Bearer " + getToken(),
}, },
// isNew:true, // isNew:true,
showlist:false, showlist: false,
keys:1, keys: 1,
isSkeleton:true, isSkeleton: true,
companypage:1, companypage: 1,
isscroll:false, isscroll: false,
inputID1:this.getUid(), inputID1: this.getUid(),
inputID2:this.getUid(), inputID2: this.getUid(),
inputID3:this.getUid(), inputID3: this.getUid(),
inputID4:this.getUid(), inputID4: this.getUid(),
showClearIcon: false, showSearchBox: false,
hover: false, searchHoverStatus: false,
showClearIcon: false
} };
}, },
created() { created() {
if(this.$route.query.key){ if (this.$route.query.key) {
this.searchParam.companyName=this.$route.query.key; this.searchParam.companyName = this.$route.query.key;
} }
if(this.$route.query.type === '1'){ if (this.$route.query.type === '1') {
this.searchParam.companyNatures=['国有企业'] this.searchParam.companyNatures = ['国有企业'];
} }
if(this.$route.query.type === '2'){ if (this.$route.query.type === '2') {
this.searchParam.companyNatures=['央企'] this.searchParam.companyNatures = ['央企'];
} }
if(this.$route.query.type ==='3'){ if (this.$route.query.type === '3') {
this.searchParam.companyNatures=['事业单位','机关单位'] this.searchParam.companyNatures = ['事业单位', '机关单位'];
} }
this.$watch(() => this.$route.params,() => { this.$watch(() => this.$route.params, () => {
this.getCustomerList() this.getCustomerList();
this.getDictType() this.getDictType();
this.prvinceTree() this.prvinceTree();
this.handleQuery() this.handleQuery();
this.searchParam.companyName='' this.searchParam.companyName = '';
}, },
// 组件创建完后获取数据, // 组件创建完后获取数据,
// 此时 data 已经被 observed 了 // 此时 data 已经被 observed 了
{ immediate: true } { immediate: true }
) );
}, },
methods:{ methods: {
onEnter(el, done) { searchFocus(event) {
gsap.from(el, { const { target } = event;
opacity: 0, if (target?.value?.length) {
width: 0, this.showClearIcon = true;
}); }
gsap.to(el, { },
opacity: 1, searchBlur(event) {
width: 242, this.showClearIcon = false;
onComplete() { },
// 完成动画聚焦输入框 searchInput(value) {
el.querySelector("input").focus(); if (value?.length) {
done(); this.showClearIcon = true;
} }
}); },
searchHover(event) {
this.searchHoverStatus = true;
},
searchUnHover(event) {
if (!this.searchParam.companyName) {
this.searchHoverStatus = false;
}
}, },
async handleQuery() { async handleQuery() {
let [type1,type2] = await Promise.all([ let [type1, type2] = await Promise.all([
getDictType('company_nature_type'), getDictType('company_nature_type'),
getDictType('credit_level_type'), getDictType('credit_level_type'),
]) ]);
if(type1.code==200){ if (type1.code == 200) {
type1.data.forEach(item => { type1.data.forEach(item => {
this.companyNaturelist.push({dictLabel:item.dictLabel,dictValue:item.dictLabel}) this.companyNaturelist.push({ dictLabel: item.dictLabel, dictValue: item.dictLabel });
}) });
} }
if(type2.code==200){ if (type2.code == 200) {
type2.data.forEach(item => { type2.data.forEach(item => {
this.creditLevellist.push({dictLabel:item.dictLabel,dictValue:item.dictLabel}) this.creditLevellist.push({ dictLabel: item.dictLabel, dictValue: item.dictLabel });
}) });
} }
}, },
sq1(item,sq){ sq1(item, sq) {
this.$nextTick(()=>{ this.$nextTick(() => {
item.sq1 = sq item.sq1 = sq;
this.keys++ ; this.keys++;
}) });
}, },
sq2(item,sq){ sq2(item, sq) {
this.$nextTick(()=>{ this.$nextTick(() => {
item.sq2 = sq item.sq2 = sq;
this.keys++ ; this.keys++;
}) });
}, },
handleALL(event){ handleALL(event) {
var one = document.getElementById("box"); var one = document.getElementById("box");
if(one){ if (one) {
if(!one.contains(event.target)){ if (!one.contains(event.target)) {
this.showlist = false this.showlist = false;
} }
} }
}, },
toct(){ toct() {
this.dialogVisible = false this.dialogVisible = false;
this.$router.push({path:'/macro/urban'}) this.$router.push({ path: '/macro/urban' });
}, },
getDictType(){ getDictType() {
//获取客户等级 //获取客户等级
getDictType('customer_level_type').then(result=>{ getDictType('customer_level_type').then(result => {
this.customerLevel = result.code == 200 ? result.data:[] this.customerLevel = result.code == 200 ? result.data : [];
}) });
}, },
pldrs(){ pldrs() {
this.pldr = true this.pldr = true;
}, },
cancelimport(){ cancelimport() {
this.pldr = false this.pldr = false;
}, },
//获取客户列表 //获取客户列表
getCustomerList(){ getCustomerList() {
let params=this.searchParam let params = this.searchParam;
if(this.address.length > 0){ if (this.address.length > 0) {
let arr = this.$refs.address1.getCheckedNodes(); let arr = this.$refs.address1.getCheckedNodes();
let provinceCode = [],cityCode = [],countyCode = []; let provinceCode = [], cityCode = [], countyCode = [];
for (var i in arr) { for (var i in arr) {
if (arr[i].parent) { if (arr[i].parent) {
if (!arr[i].parent.checked) { if (!arr[i].parent.checked) {
...@@ -500,197 +441,175 @@ ...@@ -500,197 +441,175 @@
!arr[i].hasChildren && countyCode.push(arr[i].value); !arr[i].hasChildren && countyCode.push(arr[i].value);
} }
} else { } else {
provinceCode.push(arr[i].value) provinceCode.push(arr[i].value);
} }
} }
if(provinceCode.length > 0){ if (provinceCode.length > 0) {
params.provinceIds=provinceCode params.provinceIds = provinceCode;
} }
if(cityCode.length > 0){ if (cityCode.length > 0) {
params.cityIds=cityCode params.cityIds = cityCode;
} }
if(countyCode.length > 0){ if (countyCode.length > 0) {
params.districtIds=countyCode params.districtIds = countyCode;
} }
}else { } else {
if(params.provinceIds){ if (params.provinceIds) {
delete params.provinceIds delete params.provinceIds;
} }
if(params.cityIds){ if (params.cityIds) {
delete params.cityIds delete params.cityIds;
} }
if(params.districtIds){ if (params.districtIds) {
delete params.districtIds delete params.districtIds;
} }
} }
getCustomerList(params).then(result=>{ getCustomerList(params).then(result => {
this.isSkeleton = false this.isSkeleton = false;
this.tableData = result this.tableData = result;
this.tableData.rows.forEach(item=>{ this.tableData.rows.forEach(item => {
item.registerCapital = item.registerCapital == null?null: item.registerCapital.replace(/^\D*(\d*(?:\.\d{0,6})?).*$/g, '$1') item.registerCapital = item.registerCapital == null ? null : item.registerCapital.replace(/^\D*(\d*(?:\.\d{0,6})?).*$/g, '$1');
if(item.mainBusiness != "" && item.mainBusiness != null && item.mainBusiness.length>84){ if (item.mainBusiness != "" && item.mainBusiness != null && item.mainBusiness.length > 84) {
item.mainBusiness1 = item.mainBusiness.substring(0,81) item.mainBusiness1 = item.mainBusiness.substring(0, 81);
item.sq1 = true item.sq1 = true;
}else{ } else {
item.sq1 = false item.sq1 = false;
} }
if(item.companyAttribute != "" && item.companyAttribute != null && item.companyAttribute.length>84){ if (item.companyAttribute != "" && item.companyAttribute != null && item.companyAttribute.length > 84) {
item.companyAttribute1 = item.companyAttribute.substring(0,81) item.companyAttribute1 = item.companyAttribute.substring(0, 81);
item.sq2 = true item.sq2 = true;
}else{ } else {
item.sq2 = false item.sq2 = false;
} }
// console.log(item) // console.log(item)
}) });
}) });
}, },
//跳转到客户详情 //跳转到客户详情
toDetail(row,type){ toDetail(row, type) {
let customerId = row.customerId let customerId = row.customerId;
let companyId = row.companyId let companyId = row.companyId;
let path = type let path = type;
// if(type == "" && companyId == null){ // if(type == "" && companyId == null){
// path = 'business' // path = 'business'
// } // }
this.$router.push({path:'/enterprise/'+encodeStr(companyId),query:{customerId:customerId,path:path}}) this.$router.push({ path: '/enterprise/' + encodeStr(companyId), query: { customerId: customerId, path: path } });
}, },
searchFocus(event) { handleSearch() {
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
}
},
handleSearch(){
this.$nextTick(() => { this.$nextTick(() => {
this.searchParam.pageNum = 1 this.searchParam.pageNum = 1;
this.getCustomerList() this.getCustomerList();
}) });
}, },
clearname(value){ clearname(value) {
if(value == ""){ if (value == "") {
this.handleCurrentChange(1) this.handleCurrentChange(1);
} }
}, },
//翻页 //翻页
handleCurrentChange(val) { handleCurrentChange(val) {
this.isSkeleton = true this.isSkeleton = true;
this.pldr=false this.pldr = false;
// this.isNew = false // this.isNew = false
this.searchParam.pageNum=val this.searchParam.pageNum = val;
this.getCustomerList() this.getCustomerList();
}, },
//打开新建窗口 //打开新建窗口
opennew(){ opennew() {
this.dialogVisible = true this.dialogVisible = true;
}, },
getAddr(obj){ getAddr(obj) {
if(obj.length == 0){ if (obj.length == 0) {
this.queryParam.provinceId = '' this.queryParam.provinceId = '';
this.queryParam.cityId = '' this.queryParam.cityId = '';
this.queryParam.districtId = '' this.queryParam.districtId = '';
return false return false;
} }
let labelString = this.$refs.address.getCheckedNodes()[0].pathLabels.join("-"); let labelString = this.$refs.address.getCheckedNodes()[0].pathLabels.join("-");
this.queryParam.registerAddress = labelString this.queryParam.registerAddress = labelString;
this.queryParam.provinceId = obj[0] this.queryParam.provinceId = obj[0];
this.queryParam.cityId = obj.length>=1 ? obj[1]:'' this.queryParam.cityId = obj.length >= 1 ? obj[1] : '';
this.queryParam.districtId = obj.length>=2 ? obj[2]:'' this.queryParam.districtId = obj.length >= 2 ? obj[2] : '';
}, },
//获取建设库客户 //获取建设库客户
getCompany(value){ getCompany(value) {
this.queryParam.companyId = null this.queryParam.companyId = null;
if(value == 1){ if (value == 1) {
this.companData = [] this.companData = [];
this.companypage = 1 this.companypage = 1;
} }
if (this.queryParam.companyName.length>=2){ if (this.queryParam.companyName.length >= 2) {
let param = { let param = {
keyword:this.queryParam.companyName, keyword: this.queryParam.companyName,
page:{ page: {
limit:20, limit: 20,
page:this.companypage page: this.companypage
} }
} };
getEnterprise(JSON.stringify(param)).then(result=>{ getEnterprise(JSON.stringify(param)).then(result => {
if(result.code != 200){ if (result.code != 200) {
return false return false;
} }
if(result.data.list != null && result.data.list.length>0){ if (result.data.list != null && result.data.list.length > 0) {
this.isscroll = true this.isscroll = true;
if (this.companData.length===0) { if (this.companData.length === 0) {
this.companData = result.data.list this.companData = result.data.list;
} else { } else {
let arr2 = result.data.list let arr2 = result.data.list;
arr2.unshift(2, 0); arr2.unshift(2, 0);
Array.prototype.splice.apply(this.companData, arr2); Array.prototype.splice.apply(this.companData, arr2);
} }
if(this.companData.length===0) { if (this.companData.length === 0) {
this.showlist = false this.showlist = false;
}else{ } else {
this.showlist = true this.showlist = true;
} }
this.companypage += 1 this.companypage += 1;
}else{ } else {
this.isscroll = false this.isscroll = false;
} }
}) });
} }
}, },
load(){ load() {
if(this.isscroll){ if (this.isscroll) {
this.getCompany(2) this.getCompany(2);
} }
}, },
selCompany(item){ selCompany(item) {
this.queryParam.companyId = item.jskEid this.queryParam.companyId = item.jskEid;
this.queryParam.companyName = item.name.replace(/<[^>]+>/g, '') this.queryParam.companyName = item.name.replace(/<[^>]+>/g, '');
this.queryParam.legalPerson = item.legalPerson this.queryParam.legalPerson = item.legalPerson;
let registeredCapitalStr = "" let registeredCapitalStr = "";
if(item.registeredCapitalStr == "0" || item.registeredCapitalStr == 0){ if (item.registeredCapitalStr == "0" || item.registeredCapitalStr == 0) {
registeredCapitalStr = '' registeredCapitalStr = '';
}else{ } else {
registeredCapitalStr = item.registeredCapitalStr registeredCapitalStr = item.registeredCapitalStr;
} }
this.queryParam.registerCapital = registeredCapitalStr this.queryParam.registerCapital = registeredCapitalStr;
this.queryParam.creditCode = item.creditCode this.queryParam.creditCode = item.creditCode;
this.queryParam.provinceId = item.provinceId this.queryParam.provinceId = item.provinceId;
this.queryParam.cityId = item.cityId this.queryParam.cityId = item.cityId;
this.queryParam.districtId = item.cityId this.queryParam.districtId = item.cityId;
let list = [] let list = [];
if(item.provinceId != null && item.provinceId != "") if (item.provinceId != null && item.provinceId != "")
list.push(item.provinceId) list.push(item.provinceId);
if(item.cityId != null && item.cityId != "") if (item.cityId != null && item.cityId != "")
list.push(item.cityId) list.push(item.cityId);
if(item.districtId != null && item.districtId != "") if (item.districtId != null && item.districtId != "")
list.push(item.districtId) list.push(item.districtId);
this.$nextTick(()=>{ this.$nextTick(() => {
this.queryParam.address = list this.queryParam.address = list;
let _this = this let _this = this;
setTimeout(function() { setTimeout(function () {
if(_this.$refs.address){ if (_this.$refs.address) {
_this.queryParam.registerAddress = _this.$refs.address.getCheckedNodes()[0].pathLabels.join("-") _this.queryParam.registerAddress = _this.$refs.address.getCheckedNodes()[0].pathLabels.join("-");
} }
},1000) }, 1000);
}) });
this.showlist = false this.showlist = false;
}, },
//添加客户 //添加客户
submitForm(formName) { submitForm(formName) {
...@@ -701,36 +620,36 @@ ...@@ -701,36 +620,36 @@
// } // }
this.$refs[formName].validate((valid) => { this.$refs[formName].validate((valid) => {
if (valid) { if (valid) {
addCustomer(this.queryParam).then(result=>{ addCustomer(this.queryParam).then(result => {
if(result.code == 200){ if (result.code == 200) {
this.$message.success('添加成功!') this.$message.success('添加成功!');
this.dialogVisible = false this.dialogVisible = false;
this.handleCurrentChange(1) this.handleCurrentChange(1);
this.resetForm('ruleForm') this.resetForm('ruleForm');
}else{ } else {
this.$message.error(result.msg) this.$message.error(result.msg);
} }
}) });
} else { } else {
} }
}); });
}, },
resetForm(formName) { resetForm(formName) {
this.queryParam = { this.queryParam = {
companyId:'',//jsk企业id companyId: '',//jsk企业id
companyName:'',//客户名称(企业名称 companyName: '',//客户名称(企业名称
customerLevel:'',//客户等级 customerLevel: '',//客户等级
legalPerson:'',//法定代表人 legalPerson: '',//法定代表人
registerCapital:'',//注册资本 registerCapital: '',//注册资本
registerAddress:'',//企业注册地址 registerAddress: '',//企业注册地址
creditCode:'',//社会统一信用代码 creditCode: '',//社会统一信用代码
address:'',//选择的地址 address: '',//选择的地址
provinceId:'', provinceId: '',
cityId:'', cityId: '',
districtId:'', districtId: '',
}, },
this.dialogVisible = false this.dialogVisible = false;
this.showlist = false this.showlist = false;
}, },
//地区 //地区
...@@ -746,26 +665,26 @@ ...@@ -746,26 +665,26 @@
// }) // })
// console.log(prvinceTree) // console.log(prvinceTree)
this.addressList = prvinceTree; this.addressList = prvinceTree;
this.getadd(this.addressList) this.getadd(this.addressList);
}, },
//处理注册地数据 //处理注册地数据
getadd(row) { getadd(row) {
this.addrcallback(row,this.getadd) this.addrcallback(row, this.getadd);
}, },
addrcallback(row,callback){ addrcallback(row, callback) {
if(row){ if (row) {
row.forEach(item => { row.forEach(item => {
item.value = item.id item.value = item.id;
callback && callback(item.children) callback && callback(item.children);
}) });
} }
}, },
//输入数字 //输入数字
number(value){ number(value) {
if(value == '') if (value == '')
this.queryParam.registerCapital = value this.queryParam.registerCapital = value;
else else
this.queryParam.registerCapital = value.replace(/^\D*(\d*(?:\.\d{0,6})?).*$/g, '$1')//输入6位小数 this.queryParam.registerCapital = value.replace(/^\D*(\d*(?:\.\d{0,6})?).*$/g, '$1');//输入6位小数
}, },
iptAdaptive(uid, multiple = false) { iptAdaptive(uid, multiple = false) {
multiple ? this.multipleAdaptiveHandle(uid) : this.iptAdaptiveHandle(uid); multiple ? this.multipleAdaptiveHandle(uid) : this.iptAdaptiveHandle(uid);
...@@ -841,10 +760,10 @@ ...@@ -841,10 +760,10 @@
textContainer.textContent = iptChild.value ? iptChild.value : iptChild.getAttribute("placeholder"); textContainer.textContent = iptChild.value ? iptChild.value : iptChild.getAttribute("placeholder");
document.body.append(textContainer); document.body.append(textContainer);
// let containerWidth = textContainer.offsetWidth + 12 + 8; // let containerWidth = textContainer.offsetWidth + 12 + 8;
let containerWidth=0 let containerWidth = 0;
if(iptChild.value){ if (iptChild.value) {
containerWidth = 70; containerWidth = 70;
}else { } else {
containerWidth = 130; containerWidth = 130;
} }
...@@ -864,31 +783,62 @@ ...@@ -864,31 +783,62 @@
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.app-container{ .custom-list-container {
height: calc(100vh - 134px) width: 100%;
height: 100%;
padding: 24px;
box-sizing: border-box;
.miantitle {
padding: 12px 0px;
padding-top: 0px;
margin: 0px;
} }
.box-card{
::v-deep .el-card {
.table_search {
.el-form-item {
.el-input {
.el-input__inner {
&::placeholder {
color: rgba(35, 35, 35, 0.8);
font-size: 14px;
}
&:focus {
color: rgba(35, 35, 35, 1);
}
}
.el-input__suffix {
.el-input__icon {
color: rgba(35, 35, 35, 0.8);
}
}
}
}
}
}
}
.box-card {
@import "@/assets/styles/search-common.scss"; @import "@/assets/styles/search-common.scss";
padding-top: 16px; padding-top: 16px;
width: 100%; width: 100%;
height: 100%; height: 100%;
.table_search{ .table_search {
::v-deep .el-form{ ::v-deep .el-form {
.el-input{ .el-input {
line-height: 32px; line-height: 32px;
.el-input__inner{ .el-input__inner {
height: 32px; height: 32px;
line-height: 32px; line-height: 32px;
border-radius: 4px; border-radius: 4px;
border: 0; border: 0;
} }
} }
.is-focus{ .is-focus {
.el-input__inner{ .el-input__inner {
background: #F4F6F9; background: #f4f6f9;
} }
} }
} }
::v-deep .normal-search-container { ::v-deep .normal-search-container {
display: flex; display: flex;
...@@ -963,200 +913,241 @@ ...@@ -963,200 +913,241 @@
} }
} }
} }
} }
.box{ .box {
position: relative; position: relative;
>span{ > span {
position: absolute; position: absolute;
right: 10px; right: 10px;
bottom: 0; bottom: 0;
color: #0081FF; color: #0081ff;
cursor: pointer; cursor: pointer;
&:hover{ &:hover {
color: #006AD1; color: #006ad1;
} }
} }
} }
.dc{ .dc {
font-size: 12px; font-size: 12px;
color: #3D3D3D; color: #3d3d3d;
font-weight: 400; font-weight: 400;
position: relative; position: relative;
&::after{ &::after {
content: ' '; content: " ";
width: 2px; width: 2px;
height: 2px; height: 2px;
background: rgba(35,35,35,0.4); background: rgba(35, 35, 35, 0.4);
border-radius: 50%; border-radius: 50%;
position: absolute; position: absolute;
top: 16px; top: 16px;
left: 14px; left: 14px;
}
>div{
display: inline-block;
margin-left: 20px;
}
}
.img.img1{
margin-right: 2px;
background: url('../../../../src/assets/images/project/add_2.png')no-repeat center center;
background-size: 100%;
} }
.w88{ > div {
width: 88px; display: inline-block;
margin-left: 20px;
} }
.tables{ }
position: relative; .img.img1 {
min-height: calc(100vh - 134px); margin-right: 2px;
/*overflow: auto;*/ background: url("../../../../src/assets/images/project/add_2.png") no-repeat
.empty{ center center;
position: absolute; background-size: 100%;
top: 50%; }
left: 50%; .w88 {
transform: translate(-50%,-50%); width: 88px;
.btn{ }
margin-right: 8px; .tables {
margin-top: 16px; position: relative;
} min-height: calc(100vh - 134px);
/*overflow: auto;*/
.empty {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
.btn {
margin-right: 8px;
margin-top: 16px;
} }
.table_search{ }
::v-deep .el-cascader{ .table_search {
height: 32px; ::v-deep .el-cascader {
line-height: 32px; height: 32px;
.el-input{ line-height: 32px;
input{ .el-input {
height: 32px !important; input {
} height: 32px !important;
}
.el-cascader__tags{
flex-wrap: inherit;
margin-top: 1px;
.el-tag{
/*max-width: 120px;*/
}
}
.el-input__suffix{
top: 1px;
} }
} }
.normal-search-container { .el-cascader__tags {
margin-left: 12px; flex-wrap: inherit;
display: flex; margin-top: 1px;
align-items: center; .el-tag {
cursor: pointer; /*max-width: 120px;*/
height: 34px;
&:hover {
& > span {
color: #0081ff;
}
} }
}
.el-input__suffix {
top: 1px;
}
}
::v-deep .normal-search-container {
height: 32px;
display: flex;
align-items: center;
&.is-hover-search {
width: 238px;
background: #f4f6f9;
border-radius: 4px 4px 4px 4px;
& > img { & > img {
width: 16px; cursor: unset;
height: 16px;
margin-left: 12px;
} }
}
&:hover {
& > span { & > span {
color: #232323; color: #0081ff;
color: rgba(35, 35, 35, 0.4);
font-weight: 400;
margin-left: 8px;
line-height: 22px;
font-size: 14px;
} }
} }
.cooperate-name {
& > img {
width: 16px;
height: 16px;
margin-left: 12px; margin-left: 12px;
display: flex; cursor: pointer;
border-radius: 2px; }
border: 1px solid #d9d9d9;
line-height: 34px; & > span {
height: 34px; color: rgba(35, 35, 35, 0.8);
float: left; font-weight: 400;
span { margin-left: 8px;
width: 60px; line-height: 22px;
font-size: 14px;
cursor: pointer;
}
.el-input {
& > .el-input__inner {
border: none;
height: 32px; height: 32px;
line-height: 32px; line-height: 32px;
caret-color: #0081ff;
color: rgba(35, 35, 35, 0.8);
font-size: 14px; font-size: 14px;
background: #f5f5f5; background: #f4f6f9;
text-align: center; padding-right: 26px;
color: #0081ff; padding-left: 8px;
border: 1px solid #efefef;
border-left: 0; &::placeholder {
cursor: pointer; color: rgba(35, 35, 35, 0.4) !important;
} font-size: 14px !important;
&.span-ba { line-height: 32px;
border: 1px solid #0081ff;
span {
color: #ffffff;
background: #0081ff;
border: 1px solid #0081ff;
} }
} }
::v-deep .el-input { .el-input__suffix {
flex: 1; right: 12px;
display: flex;
align-items: center;
.el-input__suffix-inner {
height: 14px;
width: 14px;
}
img {
cursor: pointer;
vertical-align: unset;
}
} }
::v-deep .el-input__inner { }
border: 0; }
line-height: 32px; .cooperate-name {
height: 32px; margin-left: 12px;
position: absolute; display: flex;
top: 0; border-radius: 2px;
padding-right: 28px; border: 1px solid #d9d9d9;
font-size: 12px; line-height: 34px;
padding-left: 8px; height: 34px;
float: left;
span {
width: 60px;
height: 32px;
line-height: 32px;
font-size: 14px;
background: #f5f5f5;
text-align: center;
color: #0081ff;
border: 1px solid #efefef;
border-left: 0;
cursor: pointer;
}
&.span-ba {
border: 1px solid #0081ff;
span {
color: #ffffff;
background: #0081ff;
border: 1px solid #0081ff;
} }
} }
::v-deep .el-input {
flex: 1;
}
::v-deep .el-input__inner {
border: 0;
line-height: 32px;
height: 32px;
position: absolute;
top: 0;
padding-right: 28px;
font-size: 12px;
padding-left: 8px;
}
} }
} }
.ps1{ }
.ps1 {
display: flex;
justify-content: space-between;
.ps2 {
width: 350px;
}
.ps3 {
width: 60px;
display: flex; display: flex;
justify-content: space-between; justify-content: right;
.ps2{ > div {
width: 350px; margin-left: 12px;
} > img {
.ps3{ float: right;
width: 60px; margin: 3px 0 0 4px;
display: flex; width: 14px;
justify-content: right; }
>div{ .i {
margin-left: 12px; display: inline-block;
>img{ }
float: right; .o {
margin: 3px 0 0 4px; display: none;
width: 14px; }
} &:hover {
.i{ cursor: pointer;
display: inline-block; .i {
}
.o{
display: none; display: none;
} }
&:hover{ .o {
cursor: pointer; display: inline-block;
.i{
display: none;
}
.o{
display: inline-block;
}
} }
} }
} }
} }
.popbot{ }
.wordprimary{ .popbot {
display: inline; .wordprimary {
padding-right: 26px; display: inline;
} padding-right: 26px;
}
.app-container{
height: auto;
}
.searchInput{
width: 240px;
} }
}
.searchInput {
width: 240px;
}
</style> </style>
...@@ -37,7 +37,7 @@ export default { ...@@ -37,7 +37,7 @@ export default {
this.domain='https://plug.jiansheku.com' this.domain='https://plug.jiansheku.com'
}else { }else {
this.domain='https://pre-plug.jiansheku.com' 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(); this.gettokens();
}, },
......
...@@ -35,11 +35,6 @@ ...@@ -35,11 +35,6 @@
</transition> </transition>
</template> </template>
</el-input> </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> </div>
</template> </template>
<!-- 多选 --> <!-- 多选 -->
......
...@@ -221,7 +221,7 @@ ...@@ -221,7 +221,7 @@
<p>温馨提示:此操作可能会影响正在使用的用户,建议合理安排同步时间</p> <p>温馨提示:此操作可能会影响正在使用的用户,建议合理安排同步时间</p>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button @click="dialogVisible1 = false">取消</el-button> <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> </div>
</el-dialog> </el-dialog>
</div> </div>
...@@ -305,7 +305,8 @@ ...@@ -305,7 +305,8 @@
}, },
//企业方案列表 //企业方案列表
packageList:[], packageList:[],
syncItem:{} syncItem:{},
state:false,
}; };
}, },
created() { created() {
...@@ -390,8 +391,10 @@ ...@@ -390,8 +391,10 @@
/** 同步按钮操作 */ /** 同步按钮操作 */
handleConfirm() { handleConfirm() {
let _this = this let _this = this
this.state=true
syncTenantPackage({tenantId:this.syncItem.tenantId,packageId:this.syncItem.packageId}).then(res => { syncTenantPackage({tenantId:this.syncItem.tenantId,packageId:this.syncItem.packageId}).then(res => {
if(res.code === 200){ if(res.code === 200){
this.state=false
_this.$message.success(res.msg); _this.$message.success(res.msg);
this.dialogVisible1=false; this.dialogVisible1=false;
} }
......
...@@ -11,9 +11,9 @@ ...@@ -11,9 +11,9 @@
<script> <script>
import { steerScroll } from '@/assets/js/jskplug'; import { steerScroll } from '@/assets/js/jskplug';
import { dskAccessToken } from '@/api/common'; 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 MaxPageSizeTip from "@/views/components/MaxPageSizeTip.vue";
import { getUipIdByCid } from '@/api/macro/macro' import { getUipIdByCid } from '@/api/macro/macro';
export default { export default {
name: 'Enterprise', name: 'Enterprise',
components: { components: {
...@@ -42,13 +42,13 @@ export default { ...@@ -42,13 +42,13 @@ export default {
if (window.location.host === 'http://szh.jiansheku.com' || window.location.host === 'szh.jiansheku.com') { if (window.location.host === 'http://szh.jiansheku.com' || window.location.host === 'szh.jiansheku.com') {
this.domain = 'https://plug.jiansheku.com'; this.domain = 'https://plug.jiansheku.com';
} else { } 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.8:3400';
this.domain = 'http://192.168.60.210:3400'; // this.domain = 'http://192.168.60.210:3400';
} }
this.gettokens(); this.gettokens();
this.iframeObserver(); this.iframeObserver();
let that = this let that = this;
window.addEventListener("message", this.pagecapListener, { passive: true }); window.addEventListener("message", this.pagecapListener, { passive: true });
window.addEventListener('message', this.linkListener, false); window.addEventListener('message', this.linkListener, false);
}, },
...@@ -66,26 +66,26 @@ export default { ...@@ -66,26 +66,26 @@ export default {
this.iframeIns.contentWindow.postMessage("removeHtmlLayoutStyle", { targetOrigin: this.domain, }); this.iframeIns.contentWindow.postMessage("removeHtmlLayoutStyle", { targetOrigin: this.domain, });
}, },
methods: { methods: {
linkListener(event){ linkListener(event) {
let {data} = event let { data } = event;
if(data.id){ if (data.id) {
getUipIdByCid([data.id]).then(res=>{ getUipIdByCid([data.id]).then(res => {
if (res.code==200) { if (res.code == 200) {
if(res.data&&res.data.length>0&&res.data[0].uipId){ if (res.data && res.data.length > 0 && res.data[0].uipId) {
this.$router.push({path: '/enterprise/'+this.encodeStr(data.id)}) this.$router.push({ path: '/enterprise/' + this.encodeStr(data.id) });
}else{ } else {
this.$tab.openPage(data.title, '/company/'+this.encodeStr(data.id)) this.$tab.openPage(data.title, '/company/' + this.encodeStr(data.id));
} }
} }
}).catch(error=>{ }).catch(error => {
}); });
}else{ } else {
if(data.url){ if (data.url) {
this.$tab.openPage(data.title, data.url).then(() => { this.$tab.openPage(data.title, data.url).then(() => {
// 执行结束的逻辑 // 执行结束的逻辑
}) });
} }
} }
}, },
...@@ -151,9 +151,13 @@ export default { ...@@ -151,9 +151,13 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.market-container { .market-container {
width: 100%; width: 100%;
height: 100%;
padding: 16px 24px; padding: 16px 24px;
padding-right: 15px; padding-right: 15px;
box-sizing: border-box; box-sizing: border-box;
position: absolute;
left: 0;
top: 0;
.market-iframe { .market-iframe {
width: 100%; 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>
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<div class="bid-opening-record-inner"> <div class="bid-opening-record-inner">
<!-- 查询功能 --> <!-- 查询功能 -->
<div class="search-form-container"> <div class="search-form-container">
<div class="left-form-title">基本信息</div> <div class="left-form-title">开标记录</div>
<div class="right-form-btn-box"> <div class="right-form-btn-box">
<div class="search-btn add" @click.stop="addBidOpeningRecord"> <div class="search-btn add" @click.stop="addBidOpeningRecord">
<img src="@/assets/images/project/project-bid-opening-record-add.svg" alt=""> <img src="@/assets/images/project/project-bid-opening-record-add.svg" alt="">
...@@ -25,7 +25,21 @@ ...@@ -25,7 +25,21 @@
<div class="table-data-list-container" v-else-if="!isLoadingData || !tableDataList.length"> <div class="table-data-list-container" v-else-if="!isLoadingData || !tableDataList.length">
<table-list-com :formColum="formColum" :queryParams="queryParams" :tableData="tableDataList" :tableDataTotal="tableDataTotal" <table-list-com :formColum="formColum" :queryParams="queryParams" :tableData="tableDataList" :tableDataTotal="tableDataTotal"
:needSelection="needSelection" :stickyHeader="{offsetTop:'48px',offsetBottom : '10px'}" @selectionChange="selectionChange" :needSelection="needSelection" :stickyHeader="{offsetTop:'48px',offsetBottom : '10px'}" @selectionChange="selectionChange"
@sort-change="sortChange" @handle-current-change="pageCurrentChange" ref="tableListComParent"> @handle-current-change="pageCurrentChange" ref="tableListComParent">
<template slot="tenderAmountHeader">
<div class="tender-amount-header">
<span>投标金额(万元)</span>
<div class="tender-amount-sort">
<svg-icon icon-class="asc" :class="{'sort-active' : queryParams.isAsc == 'asc'}"
@click.stop="sortChange('tenderAmount','asc')"></svg-icon>
<svg-icon icon-class="desc" :class="{'sort-active' : queryParams.isAsc == 'desc'}"
@click.stop="sortChange('tenderAmount','desc')"></svg-icon>
</div>
</div>
</template>
<template slot="tenderAmount" slot-scope="scope">
<span>{{parseFloat(scope.row.tenderAmount) ? scope.row.tenderAmount : "--"}}</span>
</template>
<template slot="action-field-bar" slot-scope="scope"> <template slot="action-field-bar" slot-scope="scope">
<div class="action-field-bar-container"> <div class="action-field-bar-container">
<span class="action-field-bar-btn modify" @click.stop="modifyBidOpeningRecord(scope.row)">编辑</span> <span class="action-field-bar-btn modify" @click.stop="modifyBidOpeningRecord(scope.row)">编辑</span>
...@@ -41,23 +55,32 @@ ...@@ -41,23 +55,32 @@
:formRules="formRules" :formData="formData"></add-bid-opening-record> :formRules="formRules" :formData="formData"></add-bid-opening-record>
<!-- 导入弹窗 --> <!-- 导入弹窗 -->
<batch-import-reset v-if="showImport" :importtype="types" @cancels="cancelimport" @getdatas="getdatas"></batch-import-reset> <batch-import-com :uploadOptions="uploadOptions"></batch-import-com>
</div> </div>
</template> </template>
<script> <script>
import skeleton from './skeleton'; import skeleton from './skeleton';
import TableListCom from "@/components/TableListCom"; import TableListCom from "@/components/TableListCom";
import BatchImportReset from "./batchImportReset"; import BatchImportCom from "./BatchImportCom";
import { getBidOpeningRecordListApi, addBidOpeningRecordApi, modifyBidOpeningRecordApi, removeBidOpeningRecordApi } from "@/api/project/project"; import { getBidOpeningRecordListApi, addBidOpeningRecordApi, modifyBidOpeningRecordApi, removeBidOpeningRecordApi } from "@/api/project/project";
import AddBidOpeningRecord from "./AddBidOpeningRecord.vue"; import AddBidOpeningRecord from "./AddBidOpeningRecord.vue";
import { getToken } from "@/utils/auth";
export default { export default {
components: { skeleton, TableListCom, AddBidOpeningRecord, BatchImportReset }, components: { skeleton, TableListCom, AddBidOpeningRecord, BatchImportCom },
name: "bidOpeningRecord", name: "bidOpeningRecord",
data() { data() {
// 必填字符串长度验证 // 必填字符串长度验证
function tendererStrLengthValidator(target) {
return function (rule, value, callback) {
if (!value && !value?.toString()?.trim()) {
return callback(new Error(`请输入${target}`));
}
return callback();
};
};
function requiredStrLengthValidator(target) { function requiredStrLengthValidator(target) {
return function (rule, value, callback) { return function (rule, value, callback) {
if (!value || !value?.toString()?.trim()) { if (value && !value?.toString()?.trim()) {
return callback(new Error(`请输入${target}`)); return callback(new Error(`请输入${target}`));
} }
return callback(); return callback();
...@@ -86,7 +109,7 @@ export default { ...@@ -86,7 +109,7 @@ export default {
// 金额验证 // 金额验证
const amountReg = /^(?!0\d)\d+(\.\d+)?$/; const amountReg = /^(?!0\d)\d+(\.\d+)?$/;
function amountValidator(rule, value, callback) { function amountValidator(rule, value, callback) {
if ((!value && value != "0") || !value?.toString()?.trim()) { if ((value && value != "0") && !value?.toString()?.trim()) {
return callback(new Error(`请输入投标金额`)); return callback(new Error(`请输入投标金额`));
} }
if (value && !amountReg.test(value)) { if (value && !amountReg.test(value)) {
...@@ -100,12 +123,12 @@ export default { ...@@ -100,12 +123,12 @@ export default {
isLoadingData: false, isLoadingData: false,
// 列表列数据 // 列表列数据
formColum: [ formColum: [
{ label: '投标人', prop: 'tenderer', width: "468px" }, { label: '投标人', prop: 'tenderer', minWidth: "468px" },
{ label: '企业性质', prop: 'tendererNature', width: "96px" }, { label: '企业性质', prop: 'tendererNature', minWidth: "96px" },
{ label: '项目经理', prop: 'businessManager', width: "115px" }, { label: '项目经理', prop: 'businessManager', minWidth: "115px" },
{ label: '联系方式', prop: 'contact', width: "133px" }, { label: '联系方式', prop: 'contact', width: "133px", },
{ label: '投标金额(万元)', prop: 'tenderAmount', width: "168px", sortable: "custom" }, { label: '投标金额(万元)', prop: 'tenderAmount', width: "168px", slot: true, slotHeader: true, slotName: "tenderAmountHeader" },
{ label: '操作', prop: 'action-field-bar', minWidth: "151px", fixed: "right" }, { label: '操作', prop: 'action-field-bar', width: "151px", fixed: "right" },
], ],
needSelection: { needSelection: {
flag: true, flag: true,
...@@ -132,17 +155,34 @@ export default { ...@@ -132,17 +155,34 @@ export default {
tenderAmount: "" tenderAmount: ""
}, },
formRules: { formRules: {
tenderer: [{ required: true, trigger: "blur", validator: requiredStrLengthValidator("投标人") }], tenderer: [{ required: true, trigger: "blur", validator: tendererStrLengthValidator("投标人") }],
tendererNature: [{ required: true, trigger: "blur", validator: requiredStrLengthValidator("企业性质") }], tendererNature: [{ trigger: "blur", validator: requiredStrLengthValidator("企业性质") }],
businessManager: [{ trigger: ["change", "blur"], validator: strLengthValidator("项目经理") }], businessManager: [{ trigger: ["change", "blur"], validator: strLengthValidator("项目经理") }],
contact: [{ trigger: ["blur"], validator: phoneNumberValidator }], contact: [{ trigger: ["blur"], validator: phoneNumberValidator }],
tenderAmount: [{ required: true, trigger: ["blur"], validator: amountValidator }], tenderAmount: [{ trigger: ["blur"], validator: amountValidator }],
}, },
selectionArray: [], selectionArray: [],
// 展示新增弹窗 // 展示新增弹窗
showAddDialog: false, showAddDialog: false,
// 导入弹窗 // 导入开标记录配置
showImport: false uploadOptions: {
// 是否显示弹出层
open: false,
// 弹出层标题
title: "导入开标信息",
// 是否禁用上传
isUploading: false,
// 设置上传的请求头部
headers: { Authorization: "Bearer " + getToken() },
// 上传的地址
url: process.env.VUE_APP_BASE_API + `/business/open/tender/importData/${this.$route.query.id}`,
// 展示上传结果
showResult: false,
// 模板下载地址
fileTemplateUrl: "/file/bidOpeningRecordTemplate.xlsx",
// 模板名称
fileName: "bidOpeningRecordTemplate"
},
}; };
}, },
//可访问data属性 //可访问data属性
...@@ -218,9 +258,15 @@ export default { ...@@ -218,9 +258,15 @@ export default {
// 验证通过提交数据 // 验证通过提交数据
async validatorSuccess() { async validatorSuccess() {
try { try {
const temp = JSON.parse(JSON.stringify(this.formData));
const keys = Object.keys(temp);
const flag = keys.every(key => ((key == "id" || key == "businessId") ? true : (!temp[key] && temp[key] != "0") ? true : false));
if (flag) {
return this.dialogClose();
}
const result = this.formData.id ? await modifyBidOpeningRecordApi(this.formData) : await addBidOpeningRecordApi(this.formData); const result = this.formData.id ? await modifyBidOpeningRecordApi(this.formData) : await addBidOpeningRecordApi(this.formData);
if (result.code == 200) { if (result.code == 200) {
console.log(result); this.$message.success(`${this.formData.id ? "修改成功!" : "新增成功!"}`);
this.dialogClose(); this.dialogClose();
await this.getTableList(); await this.getTableList();
} }
...@@ -241,18 +287,26 @@ export default { ...@@ -241,18 +287,26 @@ export default {
}, },
// 批量删除 // 批量删除
async batchDeletion(id) { async batchDeletion(id) {
try { if (!this.selectionArray?.length && !id) return;
if (!this.selectionArray?.length && !id) return; this.$confirm('此操作将会删除该数据, 是否继续?', '提示', {
const array = id ? [{ id }] : this.selectionArray; confirmButtonText: '确定',
const result = await removeBidOpeningRecordApi({ cancelButtonText: '取消',
ids: (array.map(item => item.id)) type: 'warning'
}); }).then(async () => {
if (result.code == 200) { try {
this.getTableList(); const array = id ? [{ id }] : this.selectionArray;
const result = await removeBidOpeningRecordApi((array.map(item => item.id)).join(","));
if (result.code == 200) {
this.$message({
type: 'success',
message: '删除成功!'
});
this.getTableList();
}
} catch (error) {
console.log(error);
} }
} catch (error) { }).catch(() => { });
console.log(error);
}
}, },
// 复选框选中 // 复选框选中
selectionChange(array) { selectionChange(array) {
...@@ -263,11 +317,11 @@ export default { ...@@ -263,11 +317,11 @@ export default {
this.getTableList(pageNum, pageSize, orderByColumn, isAsc); this.getTableList(pageNum, pageSize, orderByColumn, isAsc);
}, },
// 列排序 // 列排序
sortChange({ column, order, prop }) { sortChange(prop, order) {
this.queryParams.orderByColumn = prop; this.queryParams.orderByColumn = prop;
if (order == "ascending") { if (order == "asc") {
this.queryParams.isAsc = "asc"; this.queryParams.isAsc = "asc";
} else if (order == "descending") { } else if (order == "desc") {
this.queryParams.isAsc = "desc"; this.queryParams.isAsc = "desc";
} }
this.hasConditions(); this.hasConditions();
...@@ -279,10 +333,10 @@ export default { ...@@ -279,10 +333,10 @@ export default {
}, },
// 批量导入 // 批量导入
batchImport() { batchImport() {
this.showImport = true; this.uploadOptions.open = true;
}, },
cancelimport() { cancelimport() {
this.showImport = false; this.uploadOptions.open = false;
}, },
getdatas() { getdatas() {
this.getTableList(); this.getTableList();
...@@ -399,6 +453,30 @@ export default { ...@@ -399,6 +453,30 @@ export default {
} }
} }
} }
.tender-amount-header {
display: flex;
align-items: center;
.tender-amount-sort {
margin-left: 5px;
display: flex;
flex-direction: column;
.svg-icon {
width: 10px;
height: 10px;
fill: #8bd1ff;
cursor: pointer;
&:hover {
fill: #0081ff;
}
&.sort-active {
fill: #0081ff;
}
}
}
}
} }
} }
} }
......
...@@ -106,8 +106,8 @@ export default { ...@@ -106,8 +106,8 @@ export default {
}, },
onSuccess(res, file, fileList) { onSuccess(res, file, fileList) {
if (res.code == 200) { if (res.code == 200) {
this.successCount = res.successCount; this.successCount = res.data.successCount;
let str = '成功导入条数' + res.successCount + ',失败条数' + res.errorCount; let str = '成功导入条数' + res.data.successCount + ',失败条数' + res.data.errorCount;
this.messages = str; this.messages = str;
this.addsuccess = true; this.addsuccess = true;
} else { } else {
......
...@@ -2,8 +2,12 @@ ...@@ -2,8 +2,12 @@
<div class="app-container"> <div class="app-container">
<el-card class="box-card noborder"> <el-card class="box-card noborder">
<div class="btns"> <div class="btns">
<div class="btn btn_default h28" @click="addNew(true)"><div class="img img1"></div>新建项目商机</div> <div class="btn btn_default h28" @click="addNew(true)">
<div class="btn btn_primary h28" @click="pldrs"><div class="img img2"></div>批量导入</div> <div class="img img1"></div>新建项目商机
</div>
<div class="btn btn_primary h28" @click="pldrs">
<div class="img img2"></div>批量导入
</div>
</div> </div>
<el-tabs v-model="activeName" @tab-click="handleClick" class="tabpane w100"> <el-tabs v-model="activeName" @tab-click="handleClick" class="tabpane w100">
<el-tab-pane label="我参与的项目" name="first"></el-tab-pane> <el-tab-pane label="我参与的项目" name="first"></el-tab-pane>
...@@ -15,92 +19,90 @@ ...@@ -15,92 +19,90 @@
</div> </div>
<div class="sellist"> <div class="sellist">
<div class="selli"> <div class="selli">
<span> <span>
地区团队 地区团队
</span> </span>
<div class="select-popper"> <div class="select-popper">
<span :class="{ color_text:searchParam.provinceId.length ||searchParam.cityId.length ||searchParam.districtId.length}"> <span :class="{ color_text:searchParam.provinceId.length ||searchParam.cityId.length ||searchParam.districtId.length}">
项目地区{{searchParam.provinceId.length ||searchParam.cityId.length ||searchParam.districtId.length? searchParam.provinceId.length +searchParam.cityId.length +searchParam.districtId.length +"项": ""}} 项目地区{{searchParam.provinceId.length ||searchParam.cityId.length ||searchParam.districtId.length? searchParam.provinceId.length +searchParam.cityId.length +searchParam.districtId.length +"项": ""}}
<i class="el-icon-caret-bottom"></i> <i class="el-icon-caret-bottom"></i>
</span> </span>
<el-cascader class="cascader-region select-location" <el-cascader class="cascader-region select-location" ref="myCascader" :props='props' :options="addressList"
ref="myCascader" @change="handleChange"></el-cascader>
:props='props' :options="addressList"
@change="handleChange"></el-cascader>
</div> </div>
</div> </div>
<div class="selli"> <div class="selli">
<span> <span>
项目信息 项目信息
</span>
<div class="select-popper">
<span :class="{color_text:searchParam.projectType.length}">
项目类型{{searchParam.projectType.length? searchParam.projectType.length + "项": ""}}
<i class="el-icon-caret-bottom"></i>
</span> </span>
<div class="select-popper"> <el-select placeholder="请选择" v-model="searchParam.projectType" multiple class="select-multiple">
<span :class="{color_text:searchParam.projectType.length}"> <el-option v-for="(item,index) in projectType" :key="index" :label="item.dictLabel" :value="item.dictValue"></el-option>
项目类型{{searchParam.projectType.length? searchParam.projectType.length + "项": ""}} </el-select>
<i class="el-icon-caret-bottom"></i> </div>
<div class="select-popper">
<el-dropdown @command="transactionPricehandleCommand" trigger="click" ref="transactionPriceShowPopper" :hide-on-click="false">
<span class="el-dropdown-link" :class="searchParam.minAmount ||searchParam.maxAmount ? 'color_text': ''">
投资估算{{searchParam.minAmount ||searchParam.maxAmount? " 1项": ""}}<i class="el-icon-caret-bottom"></i>
</span> </span>
<el-select placeholder="请选择" v-model="searchParam.projectType" multiple class="select-multiple"> <el-dropdown-menu slot="dropdown">
<el-option v-for="(item,index) in projectType" :key="index" :label="item.dictLabel" :value="item.dictValue"></el-option> <el-dropdown-item v-for="(item, i) in amountOptions" :class="searchParam.minAmount == item.value[0] &&searchParam.maxAmount == item.value[1] &&
</el-select>
</div>
<div class="select-popper">
<el-dropdown @command="transactionPricehandleCommand" trigger="click" ref="transactionPriceShowPopper" :hide-on-click="false">
<span class="el-dropdown-link" :class="searchParam.minAmount ||searchParam.maxAmount ? 'color_text': ''">
投资估算{{searchParam.minAmount ||searchParam.maxAmount? " 1项": ""}}<i class="el-icon-caret-bottom"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-for="(item, i) in amountOptions" :class="searchParam.minAmount == item.value[0] &&searchParam.maxAmount == item.value[1] &&
!minAmount &&!maxAmount? 'color_text': '' " :key="i" :command="item.value">{{ item.label }}</el-dropdown-item> !minAmount &&!maxAmount? 'color_text': '' " :key="i" :command="item.value">{{ item.label }}</el-dropdown-item>
<el-dropdown-item command="" style="padding: 0; text-indent: 20px"> <el-dropdown-item command="" style="padding: 0; text-indent: 20px">
<div @mouseenter="transactionPriceShowPopper = true" @mouseleave="transactionPriceShowPopper = false"> <div @mouseenter="transactionPriceShowPopper = true" @mouseleave="transactionPriceShowPopper = false">
<span :class="(minAmount || maxAmount) &&searchParam.minAmount ==minAmount && <span :class="(minAmount || maxAmount) &&searchParam.minAmount ==minAmount &&
searchParam.maxAmount == maxAmount? 'color_text': '' "> searchParam.maxAmount == maxAmount? 'color_text': '' ">
自定义<i class="el-icon-arrow-right"></i> 自定义<i class="el-icon-arrow-right"></i>
</span> </span>
<div class="jabph_popper_box" style="position: absolute" v-if="transactionPriceShowPopper"> <div class="jabph_popper_box" style="position: absolute" v-if="transactionPriceShowPopper">
<div class="jabph_popper_wrap"> <div class="jabph_popper_wrap">
<el-input class="jabph_popper_input" v-limit-num clearable v-model="minAmount"></el-input> <el-input class="jabph_popper_input" v-limit-num clearable v-model="minAmount"></el-input>
</div> </div>
<div class="jabph_popper_wrap"> <div class="jabph_popper_wrap">
<el-input class="jabph_popper_input" v-limit-num clearable v-model="maxAmount"></el-input> <el-input class="jabph_popper_input" v-limit-num clearable v-model="maxAmount"></el-input>
</div> </div>
<div style=""> <div style="">
<el-button size="mini" @click="transactionPriceCancel">取消</el-button> <el-button size="mini" @click="transactionPriceCancel">取消</el-button>
<el-button type="primary" size="mini" @click="transactionPricePopperConfirm">确定</el-button> <el-button type="primary" size="mini" @click="transactionPricePopperConfirm">确定</el-button>
</div>
</div> </div>
</div> </div>
</el-dropdown-item> </div>
</el-dropdown-menu> </el-dropdown-item>
</el-dropdown> </el-dropdown-menu>
</div> </el-dropdown>
<div class="select-popper"> </div>
<span :class="{color_text:searchParam.projectStage.length}"> <div class="select-popper">
项目阶段{{searchParam.projectStage.length? searchParam.projectStage.length + "项": ""}} <span :class="{color_text:searchParam.projectStage.length}">
项目阶段{{searchParam.projectStage.length? searchParam.projectStage.length + "项": ""}}
<i class="el-icon-caret-bottom"></i>
</span>
<el-select v-model="searchParam.projectStage" class="select-multiple" multiple placeholder="请选择">
<el-option v-for="(item,index) in projectStage" :key="index" :label="item.dictLabel" :value="item.dictValue"></el-option>
</el-select>
</div>
<div class="select-popper">
<el-dropdown trigger="click" placement='bottom-start'>
<div class="el-dropdown-link " :class="searchParam.status!=null?'select-active':''">
项目状态{{searchParam.status!=null?' 1项':''}}
<i class="el-icon-caret-bottom"></i> <i class="el-icon-caret-bottom"></i>
</span> </div>
<el-select v-model="searchParam.projectStage" class="select-multiple" multiple placeholder="请选择"> <el-dropdown-menu slot="dropdown" class="select-list select-radio">
<el-option v-for="(item,index) in projectStage" :key="index" :label="item.dictLabel" :value="item.dictValue"></el-option> <el-dropdown-item v-for="(itme,i) in statusList" :key="i">
</el-select> <el-radio :label="itme.value" v-model="searchParam.status" @input="statusBtn()">
</div> {{itme.label}}
<div class="select-popper"> </el-radio>
<el-dropdown trigger="click" placement='bottom-start'> </el-dropdown-item>
<div class="el-dropdown-link " :class="searchParam.status!=null?'select-active':''"> </el-dropdown-menu>
项目状态{{searchParam.status!=null?' 1项':''}} </el-dropdown>
<i class="el-icon-caret-bottom"></i> </div>
</div>
<el-dropdown-menu slot="dropdown" class="select-list select-radio">
<el-dropdown-item v-for="(itme,i) in statusList" :key="i">
<el-radio :label="itme.value" v-model="searchParam.status" @input="statusBtn()">
{{itme.label}}
</el-radio>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</div> </div>
</div> </div>
<div class="scbtns"> <div class="scbtns">
...@@ -115,7 +117,7 @@ ...@@ -115,7 +117,7 @@
<div class="dc"> <div class="dc">
<div class="total">{{total}}</div> <div class="total">{{total}}</div>
<!--<el-tooltip class="item" effect="dark" content="功能正在开发中" placement="top">--> <!--<el-tooltip class="item" effect="dark" content="功能正在开发中" placement="top">-->
<div class="btn-export" @click="dc"><img src="@/assets/images/EXCEL.png">导出EXCEL</div> <div class="btn-export" @click="dc"><img src="@/assets/images/EXCEL.png">导出EXCEL</div>
<!--</el-tooltip>--> <!--</el-tooltip>-->
</div> </div>
</div> </div>
...@@ -134,11 +136,13 @@ ...@@ -134,11 +136,13 @@
<div class="datali" v-for="(item,index) in datalist"> <div class="datali" v-for="(item,index) in datalist">
<div class="det-title" @click="toDetail(item.id,'xmsl')"> <div class="det-title" @click="toDetail(item.id,'xmsl')">
<span v-html="item.projectName"></span> <span v-if="activeName!='first' && item.followTime" class="people"><i>{{item.nickName1}}</i> <span v-html="item.projectName"></span> <span v-if="activeName!='first' && item.followTime" class="people"><i>{{item.nickName1}}</i>
<span v-if="item.provinceName != '' && item.provinceName!==null">{{item.provinceName}}-</span> <span v-if="item.provinceName != '' && item.provinceName!==null">{{item.provinceName}}-</span>
{{item.nickName}} <font color="#FA8A00">正在跟进</font></span></div> {{item.nickName}} <font color="#FA8A00">正在跟进</font></span>
</div>
<div class="det-tips"> <div class="det-tips">
<span class="tips tip1" v-for="label in item.labels">{{label}}</span> <span class="tips tip1" v-for="label in item.labels">{{label}}</span>
<span v-if="item.address" class="tips tip2">{{item.address}}</span></div> <span v-if="item.address" class="tips tip2">{{item.address}}</span>
</div>
<div class="det-contets"> <div class="det-contets">
<div class="det-con" v-if="item.projectType"> <div class="det-con" v-if="item.projectType">
<span>项目类型:</span> <span>项目类型:</span>
...@@ -154,12 +158,13 @@ ...@@ -154,12 +158,13 @@
</div> </div>
<div class="det-con" v-if="item.ownerCompany "> <div class="det-con" v-if="item.ownerCompany ">
<span>业主单位:</span> <span>业主单位:</span>
<span class="wordprimary" v-if="item.ownerCompanyCid||item.ownerCompanyUipId" @click="toEnterprise(item)" v-html="item.ownerCompany"></span> <span class="wordprimary" v-if="item.ownerCompanyCid||item.ownerCompanyUipId" @click="toEnterprise(item)"
v-html="item.ownerCompany"></span>
<span v-else v-html="item.ownerCompany"></span> <span v-else v-html="item.ownerCompany"></span>
</div> </div>
</div> </div>
<el-divider v-if="index != datalist.length-1"></el-divider> <el-divider v-if="index != datalist.length-1"></el-divider>
<div class="operates" v-if="activeName=='first'"> <div class="operates" v-if="activeName=='first'">
<div class="i1" @click="toDetail(item.id,'gjjl')"><img src="@/assets/images/follow.png">跟进</div> <div class="i1" @click="toDetail(item.id,'gjjl')"><img src="@/assets/images/follow.png">跟进</div>
<div class="i2" @click="toDetail(item.id,'xmsl')"><img src="@/assets/images/edit1.png">编辑</div> <div class="i2" @click="toDetail(item.id,'xmsl')"><img src="@/assets/images/edit1.png">编辑</div>
<div class="i3" @click="deldetail(index)"><img src="@/assets/images/delete.png">删除</div> <div class="i3" @click="deldetail(index)"><img src="@/assets/images/delete.png">删除</div>
...@@ -174,13 +179,8 @@ ...@@ -174,13 +179,8 @@
</div> </div>
</div> </div>
<div class="pagination-box" v-if="total>searchParam.pageSize"> <div class="pagination-box" v-if="total>searchParam.pageSize">
<el-pagination <el-pagination background :page-size="searchParam.pageSize" :current-page="searchParam.pageNum" @current-change="handleCurrentChange"
background layout="prev, pager, next" :total="total">
:page-size="searchParam.pageSize"
:current-page="searchParam.pageNum"
@current-change="handleCurrentChange"
layout="prev, pager, next"
:total="total">
</el-pagination> </el-pagination>
</div> </div>
</el-card> </el-card>
...@@ -191,203 +191,207 @@ ...@@ -191,203 +191,207 @@
</template> </template>
<script> <script>
import "@/assets/styles/project.scss" import "@/assets/styles/project.scss";
import "@/assets/styles/public.scss" import "@/assets/styles/public.scss";
import prvinceTree from '@/assets/json/provinceTree' import prvinceTree from '@/assets/json/provinceTree';
import {getProjectlist,delProject} from '@/api/project/project' import { getProjectlist, delProject } from '@/api/project/project';
import {getDictType,} from '@/api/main' import { getDictType, } from '@/api/main';
import addproject from './component/addProject' import addproject from './component/addProject';
import batchimport from './component/batchImport' import batchimport from './component/batchImport';
import skeleton from './component/skeleton' import skeleton from './component/skeleton';
import {encodeStr} from "@/assets/js/common.js" import { encodeStr } from "@/assets/js/common.js";
export default { export default {
name: 'ProjectList', name: 'ProjectList',
components:{addproject,batchimport,skeleton}, components: { addproject, batchimport, skeleton },
data() { data() {
return { return {
encodeStr, encodeStr,
types:'project', types: 'project',
props:{multiple: true}, props: { multiple: true },
activeName:'first', activeName: 'first',
projectStage:[],//项目阶段 projectStage: [],//项目阶段
isshow:false,//新增商机 isshow: false,//新增商机
pldr:false,//批量导入 pldr: false,//批量导入
//项目地区 //项目地区
addressList:[], addressList: [],
addressType: [], addressType: [],
// 查询参数 // 查询参数
minAmount:'',//投资估算最小值 minAmount: '',//投资估算最小值
maxAmount:'',//投资估算最大值 maxAmount: '',//投资估算最大值
searchParam: { searchParam: {
isPrivate:1,//0 公司 1 个人 isPrivate: 1,//0 公司 1 个人
projectName:'',//项目名称 projectName: '',//项目名称
ownerCompany:'',//业主单位 ownerCompany: '',//业主单位
projectType:'',//项目类型 projectType: '',//项目类型
projectStage:'',//项目阶段 projectStage: '',//项目阶段
minAmount:'',//投资估算最小值 minAmount: '',//投资估算最小值
maxAmount:'',//投资估算最大值 maxAmount: '',//投资估算最大值
Amount:'',//投资估算 Amount: '',//投资估算
provinceId: [], provinceId: [],
cityId: [], cityId: [],
districtId: [], districtId: [],
pageNum:1, pageNum: 1,
pageSize:20, pageSize: 20,
status:null, status: null,
}, },
domicile:[], domicile: [],
projectType:[],//项目类型 projectType: [],//项目类型
projectCategory:[],//项目类别 projectCategory: [],//项目类别
statusList:[ statusList: [
{ {
value:'0', value: '0',
label:'储备中' label: '储备中'
}, },
{ {
value:'1', value: '1',
label:'跟进中' label: '跟进中'
}, },
{ {
value:'2', value: '2',
label:'已合作' label: '已中标'
},
{
value: '3',
label: '未中标'
}, },
], ],
amountOptions:[ amountOptions: [
{ {
label: "5000万以下", label: "5000万以下",
value: [0,5000], value: [0, 5000],
}, },
{ {
label: "5000万-1亿", label: "5000万-1亿",
value: [5000,10000], value: [5000, 10000],
}, },
{ {
label: "1亿-3亿", label: "1亿-3亿",
value: [10000,30000], value: [10000, 30000],
}, },
{ {
label: "3亿以上", label: "3亿以上",
value: [30000,''], value: [30000, ''],
}, },
], ],
contractSignTimeValue: "", contractSignTimeValue: "",
transactionPriceShowPopper: false, transactionPriceShowPopper: false,
datalist:[],//列表数据 datalist: [],//列表数据
ondel:-1, ondel: -1,
total:0, total: 0,
isSkeleton:true isSkeleton: true
} };
}, },
created() { created() {
}, },
mounted(){ mounted() {
this.prvinceTree() this.prvinceTree();
//项目阶段 //项目阶段
getDictType('project_stage_type').then(result=>{ getDictType('project_stage_type').then(result => {
this.projectStage = result.code == 200 ? result.data:[] this.projectStage = result.code == 200 ? result.data : [];
}) });
//项目类型 //项目类型
getDictType('project_type').then(result=>{ getDictType('project_type').then(result => {
this.projectType = result.code == 200 ? result.data:[] this.projectType = result.code == 200 ? result.data : [];
}) });
//项目类别 //项目类别
getDictType('project_category').then(result=>{ getDictType('project_category').then(result => {
this.projectCategory = result.code == 200 ? result.data:[] this.projectCategory = result.code == 200 ? result.data : [];
}) });
if(this.$route.query.type==1){ if (this.$route.query.type == 1) {
this.activeName = 'second'; this.activeName = 'second';
} }
if(this.$route.query.status){ if (this.$route.query.status) {
this.searchParam.status = this.$route.query.status; this.searchParam.status = this.$route.query.status;
} }
if(this.$route.query.projectName){ if (this.$route.query.projectName) {
this.searchParam.projectName = this.$route.query.projectName; this.searchParam.projectName = this.$route.query.projectName;
} }
this.getList(1) this.getList(1);
}, },
methods: { methods: {
statusBtn(){ statusBtn() {
}, },
dc(){ dc() {
this.$message.warning('功能正在开发中') this.$message.warning('功能正在开发中');
}, },
deldetail(index){ deldetail(index) {
this.ondel = index this.ondel = index;
}, },
deleteProject(id){ deleteProject(id) {
delProject(id).then(result =>{ delProject(id).then(result => {
if(result.code==200){ if (result.code == 200) {
this.$message.success('删除成功!') this.$message.success('删除成功!');
this.getList(1) this.getList(1);
this.ondel = -1 this.ondel = -1;
}else{ } else {
this.$message.error(result.msg) this.$message.error(result.msg);
} }
}) });
}, },
getdatas(){ getdatas() {
this.getList(1) this.getList(1);
}, },
cancelimport(){ cancelimport() {
this.pldr = false this.pldr = false;
}, },
pldrs(){ pldrs() {
this.pldr = true this.pldr = true;
}, },
//获取商机列表 //获取商机列表
getList(pageNum){ getList(pageNum) {
this.isSkeleton = true this.isSkeleton = true;
this.searchParam.pageNum = pageNum this.searchParam.pageNum = pageNum;
if(this.activeName == 'first'){ if (this.activeName == 'first') {
this.searchParam.isPrivate = 1 this.searchParam.isPrivate = 1;
}else{ } else {
this.searchParam.isPrivate = 0 this.searchParam.isPrivate = 0;
} }
this.searchParam.ownerCompany = this.searchParam.projectName this.searchParam.ownerCompany = this.searchParam.projectName;
getProjectlist(this.searchParam).then(result=>{ getProjectlist(this.searchParam).then(result => {
this.isSkeleton = false this.isSkeleton = false;
if(result.code == 200){ if (result.code == 200) {
this.datalist = result.rows this.datalist = result.rows;
this.total = result.total this.total = result.total;
this.datalist.forEach(item=>{ this.datalist.forEach(item => {
let str = item.provinceName let str = item.provinceName;
if(item.cityName != "" && item.cityName != null) if (item.cityName != "" && item.cityName != null)
str += '-' +item.cityName str += '-' + item.cityName;
if(item.districtName != ""&& item.districtName != null) if (item.districtName != "" && item.districtName != null)
str += '-' +item.districtName str += '-' + item.districtName;
item.address = str item.address = str;
item.nickName1 = item.nickName?item.nickName.slice(0,1):'' item.nickName1 = item.nickName ? item.nickName.slice(0, 1) : '';
item.labels=[] item.labels = [];
if(item.label!=null && item.label !=""){ if (item.label != null && item.label != "") {
item.labels = item.label.split(',') item.labels = item.label.split(',');
} }
}) });
} }
}) });
}, },
reset(){ reset() {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.myCascader.$refs.panel.clearCheckedNodes() this.$refs.myCascader.$refs.panel.clearCheckedNodes();
this.$refs.myCascader.$refs.panel.activePath = [] this.$refs.myCascader.$refs.panel.activePath = [];
}) });
this.searchParam ={ this.searchParam = {
isPrivate:1, isPrivate: 1,
projectName:'',//项目名称 projectName: '',//项目名称
ownerCompany:'',//业主单位 ownerCompany: '',//业主单位
projectType:'',//项目类型 projectType: '',//项目类型
projectStage:'',//项目阶段 projectStage: '',//项目阶段
minAmount:'',//投资估算最小值 minAmount: '',//投资估算最小值
maxAmount:'',//投资估算最大值 maxAmount: '',//投资估算最大值
Amount:'',//投资估算 Amount: '',//投资估算
provinceId: [], provinceId: [],
cityId: [], cityId: [],
districtId: [], districtId: [],
pageNum:1, pageNum: 1,
pageSize:20, pageSize: 20,
status:null status: null
} };
this.getList(1) this.getList(1);
}, },
//地区 //地区
async prvinceTree() { async prvinceTree() {
...@@ -402,44 +406,44 @@ export default { ...@@ -402,44 +406,44 @@ export default {
// }) // })
// console.log(prvinceTree) // console.log(prvinceTree)
this.addressList = prvinceTree; this.addressList = prvinceTree;
this.getadd(this.addressList) this.getadd(this.addressList);
}, },
//处理项目地区 //处理项目地区
getadd(row) { getadd(row) {
this.addrcallback(row,this.getadd) this.addrcallback(row, this.getadd);
}, },
addrcallback(row,callback){ addrcallback(row, callback) {
if(row){ if (row) {
row.forEach(item => { row.forEach(item => {
item.value = item.id item.value = item.id;
callback && callback(item.children) callback && callback(item.children);
}) });
} }
}, },
//新建项目 //新建项目
showNew(){ showNew() {
this.isshow = true this.isshow = true;
}, },
addNew(isshow){ addNew(isshow) {
this.isshow = isshow this.isshow = isshow;
}, },
add(){ add() {
this.isshow = false this.isshow = false;
this.getList(1) this.getList(1);
}, },
toDetail(id,tag){ toDetail(id, tag) {
this.$router.push({ path: '/project/projectList/detail', query: {id:id,tag:tag} }); this.$router.push({ path: '/project/projectList/detail', query: { id: id, tag: tag } });
}, },
toEnterprise(item){ toEnterprise(item) {
if(item.ownerCompanyUipId){ if (item.ownerCompanyUipId) {
this.$router.push({ path: '/enterprise/'+this.encodeStr(item.ownerCompanyCid)}); this.$router.push({ path: '/enterprise/' + this.encodeStr(item.ownerCompanyCid) });
}else if(item.ownerCompanyCid){ } else if (item.ownerCompanyCid) {
this.$router.push({ path: '/company/'+this.encodeStr(item.ownerCompanyCid)}); this.$router.push({ path: '/company/' + this.encodeStr(item.ownerCompanyCid) });
} }
}, },
handleClick(){ handleClick() {
this.reset() this.reset();
}, },
handleChange(value) { handleChange(value) {
// console.log(value); // console.log(value);
...@@ -508,74 +512,77 @@ export default { ...@@ -508,74 +512,77 @@ export default {
//翻页 //翻页
handleCurrentChange(val) { handleCurrentChange(val) {
this.getList(val) this.getList(val);
}, },
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.btn_primary{ .btn_primary {
margin-top: 16px; margin-top: 16px;
} }
.jabph_popper_box{ .jabph_popper_box {
left: 110px; left: 110px;
} }
.noborder{ .noborder {
position: relative; position: relative;
}
.btns {
position: absolute;
top: -6px;
right: 12px;
z-index: 2;
.img.img1 {
background: url("../../../../src/assets/images/add.png") no-repeat center
center;
background-size: 100%;
} }
.btns{ .btn_default:hover {
position: absolute; .img1 {
top: -6px; background: url("../../../../src/assets/images/add_1.png") no-repeat
right: 12px; center center;
z-index: 2;
.img.img1{
background: url('../../../../src/assets/images/add.png')no-repeat center center;
background-size: 100%;
}
.btn_default:hover{
.img1{
background: url('../../../../src/assets/images/add_1.png')no-repeat center center;
background-size: 100%;
}
}
.img.img2{
background: url('../../../../src/assets/images/import.png')no-repeat center center;
background-size: 100%; background-size: 100%;
} }
} }
.scbtns{ .img.img2 {
border-top: 1px solid #EFEFEF; background: url("../../../../src/assets/images/import.png") no-repeat center
padding: 24px 0 8px; center;
.btn{ background-size: 100%;
margin: 0 16px 0 0;
}
} }
.sellist{ }
.scbtns {
border-top: 1px solid #efefef;
padding: 24px 0 8px;
.btn {
margin: 0 16px 0 0;
}
}
.sellist {
width: 100%;
padding: 10px 0;
.selli {
width: 100%; width: 100%;
padding: 10px 0; height: 34px;
.selli{ line-height: 34px;
width: 100%; font-size: 14px;
height: 34px; color: #232323;
line-height: 34px; > span {
font-size: 14px; float: left;
color: #232323; margin-right: 28px;
>span{ opacity: 0.8;
float: left;
margin-right: 28px;
opacity: 0.8;
}
} }
} }
.titles{ }
color: #232323; .titles {
font-size: 16px; color: #232323;
font-weight: bold; font-size: 16px;
height: 60px; font-weight: bold;
line-height: 64px; height: 60px;
border-bottom: 1px solid #EFEFEF; line-height: 64px;
padding-left: 2px; border-bottom: 1px solid #efefef;
padding-right: 24px; padding-left: 2px;
/*&::after{ padding-right: 24px;
/*&::after{
content: " "; content: " ";
width: 2px; width: 2px;
height: 14px; height: 14px;
...@@ -584,133 +591,133 @@ export default { ...@@ -584,133 +591,133 @@ export default {
margin-left: -10px; margin-left: -10px;
margin-top: 24px; margin-top: 24px;
}*/ }*/
.dc{ .dc {
width: 100%; width: 100%;
float: right;
font-size: 12px;
color: #3d3d3d;
font-weight: 400;
position: relative;
&::after {
content: " ";
width: 2px;
height: 2px;
background: rgba(35, 35, 35, 0.4);
border-radius: 50%;
position: absolute;
top: 30px;
left: 14px;
}
> div {
display: inline-block;
margin-left: 20px;
}
.btn-export {
float: right; float: right;
font-size: 12px; margin-top: 18px;
color: #3D3D3D;
font-weight: 400;
position: relative;
&::after{
content: ' ';
width: 2px;
height: 2px;
background: rgba(35,35,35,0.4);
border-radius: 50%;
position: absolute;
top: 30px;
left: 14px;
}
>div{
display: inline-block;
margin-left: 20px;
}
.btn-export{
float: right;
margin-top: 18px;
}
} }
} }
.datalist{ }
.datali{ .datalist {
padding: 16px 16px 0; .datali {
position: relative; padding: 16px 16px 0;
.operates{ position: relative;
position: absolute; .operates {
z-index: 1; position: absolute;
right: 0; z-index: 1;
top: 24px; right: 0;
>div{ top: 24px;
padding-right: 16px; > div {
display: inline-block; padding-right: 16px;
font-size: 12px; display: inline-block;
>img{ font-size: 12px;
float: left; > img {
margin-right: 5px; float: left;
width: 16px; margin-right: 5px;
} width: 16px;
}
.i1:hover{
color: #3CB4FF;
}
.i2:hover{
color: #0CBC6D;
}
.i3:hover{
color: #FF3C3C;
}
.tits{
padding: 12px 0;
} }
} }
.delform{ .i1:hover {
right: 16px; color: #3cb4ff;
top: -94px;
.btnsmall{
margin-top: 0;
}
} }
&:hover{ .i2:hover {
background-color: #F6F9FC; color: #0cbc6d;
cursor: pointer;
} }
.det-title{ .i3:hover {
color: #3D3D3D; color: #ff3c3c;
font-size: 16px;
font-weight: 700;
line-height: 23px;
padding-right: 190px;
.people{
padding-left: 10px;
color: #4f4f4f;
font-weight: 400;
font-size: 14px;
i{
width: 20px;
height: 20px;
background: #E3EEF9;
border-radius: 50%;
font-style: initial;
font-size: 12px;
display: inline-block;
color: #0081FF;
text-align: center;
line-height: 20px;
margin-right: 4px;
}
}
} }
.det-tips{ .tits {
padding: 8px 0 ; padding: 12px 0;
} }
.det-contets{ }
padding: 4px 0 16px; .delform {
.det-con{ right: 16px;
font-size: 14px; top: -94px;
.btnsmall {
margin-top: 0;
}
}
&:hover {
background-color: #f6f9fc;
cursor: pointer;
}
.det-title {
color: #3d3d3d;
font-size: 16px;
font-weight: 700;
line-height: 23px;
padding-right: 190px;
.people {
padding-left: 10px;
color: #4f4f4f;
font-weight: 400;
font-size: 14px;
i {
width: 20px;
height: 20px;
background: #e3eef9;
border-radius: 50%;
font-style: initial;
font-size: 12px;
display: inline-block; display: inline-block;
padding-right: 32px; color: #0081ff;
&:last-child{ text-align: center;
padding-right: 0; line-height: 20px;
} margin-right: 4px;
span:nth-child(2n-1){
color: #a7a7a7;
}
} }
} }
} }
} .det-tips {
padding: 8px 0;
.popbot{
.wordprimary{
padding-right: 26px;
float: left;
margin-top: 6px;
} }
.btn_primary{ .det-contets {
padding: 0; padding: 4px 0 16px;
.det-con {
font-size: 14px;
display: inline-block;
padding-right: 32px;
&:last-child {
padding-right: 0;
}
span:nth-child(2n-1) {
color: #a7a7a7;
}
}
} }
} }
.btn{ }
padding: 0 12px;
.popbot {
.wordprimary {
padding-right: 26px;
float: left;
margin-top: 6px;
}
.btn_primary {
padding: 0;
} }
}
.btn {
padding: 0 12px;
}
</style> </style>
...@@ -4,35 +4,35 @@ ...@@ -4,35 +4,35 @@
<div class="content_item content_item_padding0"> <div class="content_item content_item_padding0">
<div class="label">项目名称</div> <div class="label">项目名称</div>
<div class="content_right"> <div class="content_right">
<el-input class="ename_input" <el-input class="ename_input"
placeholder="请输入项目名称关键字" v-model="establishmentDto.keyword" ></el-input> placeholder="请输入项目名称关键字" v-model="establishmentDto.keyword" ></el-input>
</div> </div>
</div> </div>
<div class="content_item"> <div class="content_item">
<div class="label">项目业主</div> <div class="label">项目业主</div>
<div class="content_right"> <div class="content_right">
<el-input class="ename_input" <el-input class="ename_input"
placeholder="请输入项目业主名称或关键词" v-model="establishmentDto.companyName" ></el-input> placeholder="请输入项目业主名称或关键词" v-model="establishmentDto.companyName" ></el-input>
</div> </div>
</div> </div>
<div class="content_item"> <div class="content_item">
<div class="label">审批部门</div> <div class="label">审批部门</div>
<div class="content_right"> <div class="content_right">
<el-input class="ename_input" <el-input class="ename_input"
placeholder="请输入审批部门名称或关键词" v-model="establishmentDto.examineOffice" ></el-input> placeholder="请输入审批部门名称或关键词" v-model="establishmentDto.examineOffice" ></el-input>
</div> </div>
</div> </div>
<div class="content_item"> <div class="content_item">
<div class="label">建设地点</div> <div class="label">建设地点</div>
<div class="content_right"> <div class="content_right">
<el-input class="ename_input" <el-input class="ename_input"
placeholder="请输入建设地点名称关键词" v-model="establishmentDto.buildAddre" ></el-input> placeholder="请输入建设地点名称关键词" v-model="establishmentDto.buildAddre" ></el-input>
</div> </div>
</div> </div>
<div class="content_item"> <div class="content_item">
<div class="label">建设规模</div> <div class="label">建设规模</div>
<div class="content_right"> <div class="content_right">
<el-input class="ename_input" <el-input class="ename_input"
placeholder="请输入建设规模名称关键词" v-model="establishmentDto.buildScale" ></el-input> placeholder="请输入建设规模名称关键词" v-model="establishmentDto.buildScale" ></el-input>
</div> </div>
</div> </div>
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
</el-option> </el-option>
</el-select> </el-select>
</div> </div>
<div class="select-popper"> <div class="select-popper">
<span :class="{ color_text: establishmentDto.industry.length }"> <span :class="{ color_text: establishmentDto.industry.length }">
所属行业{{establishmentDto.industry.length? establishmentDto.industry.length + "项": ""}} 所属行业{{establishmentDto.industry.length? establishmentDto.industry.length + "项": ""}}
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
</el-option> </el-option>
</el-select> </el-select>
</div> </div>
<div class="select-popper"> <div class="select-popper">
<span :class="{color_text:establishmentDto.province.length ||establishmentDto.city.length ||establishmentDto.district.length,}"> <span :class="{color_text:establishmentDto.province.length ||establishmentDto.city.length ||establishmentDto.district.length,}">
项目属地{{establishmentDto.province.length ||establishmentDto.city.length ||establishmentDto.district.length 项目属地{{establishmentDto.province.length ||establishmentDto.city.length ||establishmentDto.district.length
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
总投资{{establishmentDto.startMoney || establishmentDto.endMoney? " 1项": ""}}<i class="el-icon-caret-bottom"></i> 总投资{{establishmentDto.startMoney || establishmentDto.endMoney? " 1项": ""}}<i class="el-icon-caret-bottom"></i>
</span> </span>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item v-for="(item, i) in moneyOptions" :class="establishmentDto.startMoney == item.value[0] &&establishmentDto.endMoney == item.value[1] <el-dropdown-item v-for="(item, i) in moneyOptions" :class="establishmentDto.startMoney == item.value[0] &&establishmentDto.endMoney == item.value[1]
&&!startMoney &&!endMoney? 'color_text' : ''" :key="i" :command="item.value">{{ item.label }}</el-dropdown-item> &&!startMoney &&!endMoney? 'color_text' : ''" :key="i" :command="item.value">{{ item.label }}</el-dropdown-item>
<el-dropdown-item command="" style="padding: 0; text-indent: 20px"> <el-dropdown-item command="" style="padding: 0; text-indent: 20px">
<div @mouseenter="moneyShowPopper = true" @mouseleave="moneyShowPopper = false"> <div @mouseenter="moneyShowPopper = true" @mouseleave="moneyShowPopper = false">
...@@ -155,23 +155,23 @@ ...@@ -155,23 +155,23 @@
</el-dropdown-menu> </el-dropdown-menu>
</div> </div>
</el-dropdown> </el-dropdown>
</div> </div>
</div> </div>
<div class="content_item content_item_padding0"> <div class="content_item content_item_padding0">
<div class="geduan"> <div class="geduan">
</div> </div>
</div> </div>
<div class="content_item content_item_padding0"> <div class="content_item content_item_padding0">
<div class="search-new"> <div class="search-new">
<span @click="search()">查询</span> <span @click="search()">查询</span>
<span @click="reset">重置</span> <span @click="reset">重置</span>
</div> </div>
</div> </div>
</div> </div>
<div class="bottomlist"> <div class="bottomlist">
<div class="bottomlist-title"> <div class="bottomlist-title">
...@@ -186,13 +186,13 @@ ...@@ -186,13 +186,13 @@
<span class="excel" @click="$message({message: '功能正在开发中',type: 'warning'})">导出EXCEL</span> <span class="excel" @click="$message({message: '功能正在开发中',type: 'warning'})">导出EXCEL</span>
</p> </p>
</div> </div>
</div> </div>
<div class="table-item-jf1" v-if="tableData.length==0&& !isSkeleton"> <div class="table-item-jf1" v-if="tableData.length==0&& !isSkeleton">
<img class="item-jf-img" src="@/assets/images/kong.png" alt=""> <img class="item-jf-img" src="@/assets/images/kong.png" alt="">
<div class="item-jf-titel">抱歉,没找到相关数据!</div> <div class="item-jf-titel">抱歉,没找到相关数据!</div>
<div class="item-jf-text">建议调整关键词或筛选条件,重新搜索!</div> <div class="item-jf-text">建议调整关键词或筛选条件,重新搜索!</div>
</div> </div>
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton> <skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<ul class="bottomlist-content" v-if="tableData.length>0&& !isSkeleton"> <ul class="bottomlist-content" v-if="tableData.length>0&& !isSkeleton">
<li class="bottomlist-list" v-for="item in tableData"> <li class="bottomlist-list" v-for="item in tableData">
...@@ -210,8 +210,8 @@ ...@@ -210,8 +210,8 @@
{{item.domicile}} {{item.domicile}}
</span> </span>
</div> </div>
<div class="list-content"> <div class="list-content">
<p class="list-content-text" v-if="item.companyName"> <p class="list-content-text" v-if="item.companyName">
<span>项目业主:</span> <span>项目业主:</span>
...@@ -221,11 +221,15 @@ ...@@ -221,11 +221,15 @@
<span v-else v-html="item.companyName"> <span v-else v-html="item.companyName">
</span> </span>
</p> </p>
<p class="list-content-text"v-if="item.money"> <p class="list-content-text"v-if="item.money">
<span>总投资:</span> <span>总投资:</span>
<span v-html="item.money+'万元'"></span> <span v-html="item.money+'万元'"></span>
</p> </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"> <p class="list-content-text"v-if="item.planStartTime">
<span>计划开工日期:</span> <span>计划开工日期:</span>
<span>{{item.planStartTime}}</span> <span>{{item.planStartTime}}</span>
...@@ -238,18 +242,18 @@ ...@@ -238,18 +242,18 @@
<span>是否为民间推介项目:</span> <span>是否为民间推介项目:</span>
<span>{{item.isProject==0?'否':'是'}}</span> <span>{{item.isProject==0?'否':'是'}}</span>
</p> </p>
</div> </div>
<div class="list-content" v-if="item.buildScale"> <div class="list-content" v-if="item.buildScale">
<p class="list-content-text"> <p class="list-content-text">
<span class="content-text-gc">建设规模:</span> <span class="content-text-gc">建设规模:</span>
<span class="content-text-p" v-html="item.buildScale"></span> <span class="content-text-p" v-html="item.buildScale"></span>
</p> </p>
</div> </div>
</li> </li>
</ul> </ul>
<div class="pagination clearfix" v-if="total>0&&pageFlag"> <div class="pagination clearfix" v-if="total>0&&pageFlag">
...@@ -262,11 +266,11 @@ ...@@ -262,11 +266,11 @@
:total="total>limit*500?501*limit:total"> :total="total>limit*500?501*limit:total">
</el-pagination> </el-pagination>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
...@@ -437,14 +441,14 @@ ...@@ -437,14 +441,14 @@
planEndTimeShowPopper: false, planEndTimeShowPopper: false,
pageFlag: true, pageFlag: true,
conditionsArr: [], conditionsArr: [],
tableData:[], tableData:[],
total:0, total:0,
page:1, page:1,
limit:20 limit:20
}; };
}, },
computed: { computed: {
checkEstablishmentDto() { checkEstablishmentDto() {
let arr = []; let arr = [];
...@@ -565,7 +569,7 @@ ...@@ -565,7 +569,7 @@
}, },
mounted() { mounted() {
this.init(); this.init();
}, },
...@@ -575,11 +579,11 @@ ...@@ -575,11 +579,11 @@
this.projectTypeOptions = res.projectType; this.projectTypeOptions = res.projectType;
this.industryOptions = res.establishmentIndustry this.industryOptions = res.establishmentIndustry
}).catch(error=>{ }).catch(error=>{
}); });
}, },
refresh(value) { refresh(value) {
if (value) { if (value) {
this.$router.go(0) this.$router.go(0)
...@@ -596,9 +600,9 @@ ...@@ -596,9 +600,9 @@
this.$message.warning(`对不起,最多只能访问500页`); this.$message.warning(`对不起,最多只能访问500页`);
this.reloadPage() this.reloadPage()
}else{ }else{
this.page = page; this.page = page;
this.search(page, this.limit); this.search(page, this.limit);
this.jump1(); window.scrollTo(0, 400);
} }
}, },
fieldCommand(command) { fieldCommand(command) {
...@@ -627,7 +631,7 @@ ...@@ -627,7 +631,7 @@
if(!this.ckhasValue(data)){ if(!this.ckhasValue(data)){
data={}; data={};
} }
let params = { let params = {
page: { page: {
page: this.page, page: this.page,
...@@ -644,12 +648,12 @@ ...@@ -644,12 +648,12 @@
this.total=res.data.total; this.total=res.data.total;
} }
}).catch(error=>{ }).catch(error=>{
}); });
}, },
deleteDomicile() { deleteDomicile() {
this.$refs.address.handleClear(); this.$refs.address.handleClear();
}, },
...@@ -1051,7 +1055,7 @@ ...@@ -1051,7 +1055,7 @@
}); });
} }
}, },
clearHandleTime() { clearHandleTime() {
this.handleTime = ""; this.handleTime = "";
this.handleTimeValue = ""; this.handleTimeValue = "";
...@@ -1095,10 +1099,10 @@ ...@@ -1095,10 +1099,10 @@
}else{ }else{
this.$router.push({path: '/company/'+this.encodeStr(companyId)}) this.$router.push({path: '/company/'+this.encodeStr(companyId)})
} }
} }
}).catch(error=>{ }).catch(error=>{
}); });
}, },
ckhasValue(param){ ckhasValue(param){
...@@ -1111,7 +1115,7 @@ ...@@ -1111,7 +1115,7 @@
return ckhasValue; return ckhasValue;
}, },
hasValueThroughObj(times,param,excludeKeys,excludeValues){ hasValueThroughObj(times,param,excludeKeys,excludeValues){
if(times==0){ if(times==0){
this.hasValue=false; this.hasValue=false;
} }
...@@ -1126,7 +1130,7 @@ ...@@ -1126,7 +1130,7 @@
}else{ }else{
if(objParam instanceof Object) { if(objParam instanceof Object) {
if (!excludeKeys.includes(key)&&!excludeValues.includes(objParam[key])) { if (!excludeKeys.includes(key)&&!excludeValues.includes(objParam[key])) {
this.hasValue =true; this.hasValue =true;
// return hasValue; // return hasValue;
} }
...@@ -1141,7 +1145,7 @@ ...@@ -1141,7 +1145,7 @@
this.hasValueThroughObj(1,param[key],excludeKeys,excludeValues); this.hasValueThroughObj(1,param[key],excludeKeys,excludeValues);
}else{ }else{
if (!excludeKeys.includes(key)&&!excludeValues.includes(param[key])) { if (!excludeKeys.includes(key)&&!excludeValues.includes(param[key])) {
this.hasValue =true; this.hasValue =true;
// return hasValue; // return hasValue;
} }
...@@ -1156,7 +1160,7 @@ ...@@ -1156,7 +1160,7 @@
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.content{ .content{
padding: 0px 16px; padding: 0px 16px;
padding-top: 16px; padding-top: 16px;
...@@ -1173,7 +1177,7 @@ ...@@ -1173,7 +1177,7 @@
color: rgba(35,35,35,0.8); color: rgba(35,35,35,0.8);
} }
.content_right{ .content_right{
.ename_input{ .ename_input{
width: 640px; width: 640px;
margin-right: 20px; margin-right: 20px;
...@@ -1182,12 +1186,12 @@ ...@@ -1182,12 +1186,12 @@
width: 640px; width: 640px;
} }
} }
.item_ckquery_list { .item_ckquery_list {
display: flex; display: flex;
} }
.item_ckquery_list .el-input__icon { .item_ckquery_list .el-input__icon {
position: relative; position: relative;
top: 1px; top: 1px;
...@@ -1197,7 +1201,7 @@ ...@@ -1197,7 +1201,7 @@
} }
.register_count_ipt{ .register_count_ipt{
margin-left: 0px; margin-left: 0px;
} }
.register_count_ipt .el-input__inner{ .register_count_ipt .el-input__inner{
width: 174px; width: 174px;
...@@ -1230,19 +1234,19 @@ ...@@ -1230,19 +1234,19 @@
padding: 1px 5px !important; padding: 1px 5px !important;
} }
} }
} }
.content_item_padding0{ .content_item_padding0{
padding: 0; padding: 0;
} }
} }
.bottomlist{ .bottomlist{
width: 100%; width: 100%;
background-color: #FFFFFF; background-color: #FFFFFF;
border-radius: 4px 4px 4px 4px; border-radius: 4px 4px 4px 4px;
.bottomlist-title{ .bottomlist-title{
display: flex; display: flex;
...@@ -1251,11 +1255,11 @@ ...@@ -1251,11 +1255,11 @@
margin-top: 12px; margin-top: 12px;
padding: 16px ; padding: 16px ;
border-bottom: 1px solid #EFEFEF; border-bottom: 1px solid #EFEFEF;
.title-right{ .title-right{
display: flex; display: flex;
align-items: center; align-items: center;
p:last-child{ p:last-child{
display: flex; display: flex;
align-items: center; align-items: center;
...@@ -1284,7 +1288,7 @@ ...@@ -1284,7 +1288,7 @@
} }
} }
.bottomlist-content{ .bottomlist-content{
padding-bottom: 0px; padding-bottom: 0px;
} }
.bottomlist-list{ .bottomlist-list{
...@@ -1315,26 +1319,26 @@ ...@@ -1315,26 +1319,26 @@
margin-right: 8px; margin-right: 8px;
padding: 3px 7px; padding: 3px 7px;
font-size: 12px; font-size: 12px;
} }
.list-label-wl{ .list-label-wl{
background: #e8f7f0; background: #e8f7f0;
color: #38c8bf; color: #38c8bf;
} }
.list-label-lx{ .list-label-lx{
background: #e4f3fd; background: #e4f3fd;
color: #41a1fd; color: #41a1fd;
} }
} }
.list-content{ .list-content{
margin-top: 8px; margin-top: 8px;
display: flex; display: flex;
justify-content: start; justify-content: start;
align-items: center; align-items: center;
.list-content-text{ .list-content-text{
margin-top: 7px; margin-top: 7px;
display: flex; display: flex;
...@@ -1342,7 +1346,7 @@ ...@@ -1342,7 +1346,7 @@
align-items: flex-start; align-items: flex-start;
margin-right: 27px; margin-right: 27px;
font-size: 14px; font-size: 14px;
span:first-child{ span:first-child{
font-weight: 400; font-weight: 400;
color: rgba(35,35,35,0.4); color: rgba(35,35,35,0.4);
...@@ -1362,12 +1366,12 @@ ...@@ -1362,12 +1366,12 @@
.blue{ .blue{
color: #0081FF !important; color: #0081FF !important;
cursor: pointer; cursor: pointer;
} }
} }
} }
.list-addree{ .list-addree{
width: auto; width: auto;
...@@ -1383,11 +1387,11 @@ ...@@ -1383,11 +1387,11 @@
img{ img{
width: 14px; width: 14px;
margin: 0 8px; margin: 0 8px;
} }
} }
} }
.bottomlist-list:hover{ .bottomlist-list:hover{
background: #F6F9FC; background: #F6F9FC;
...@@ -1400,6 +1404,6 @@ ...@@ -1400,6 +1404,6 @@
} }
} }
} }
</style> </style>
\ No newline at end of file
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="content_item"> <div class="content_item">
<div class="label">项目名称</div> <div class="label">项目名称</div>
<div class="content_right content_right1"> <div class="content_right content_right1">
...@@ -46,15 +46,15 @@ ...@@ -46,15 +46,15 @@
<el-input class="commonly-input" v-model="keyword" style="width: 660px;"placeholder="多个关键词用空格隔开,如:市政 园林" /> <el-input class="commonly-input" v-model="keyword" style="width: 660px;"placeholder="多个关键词用空格隔开,如:市政 园林" />
<span class="commonly" @click="cliclikeywoder()">推荐关键词</span> <span class="commonly" @click="cliclikeywoder()">推荐关键词</span>
</div> </div>
<div class="include-keywords"> <div class="include-keywords">
<span class="lefttltel" style=" border-radius: 1px 0px 0px 1px;">排除</span> <span class="lefttltel" style=" border-radius: 1px 0px 0px 1px;">排除</span>
<el-input style="width: 472px;" v-model="keywordNot" placeholder="多个关键词用空格隔开,如:市政 园林" /> <el-input style="width: 472px;" v-model="keywordNot" placeholder="多个关键词用空格隔开,如:市政 园林" />
</div> </div>
</div> </div>
</div> </div>
<div class="content_item"> <div class="content_item">
<div class="label">项目名称</div> <div class="label">项目名称</div>
<div class="content_right"> <div class="content_right">
...@@ -165,7 +165,7 @@ ...@@ -165,7 +165,7 @@
</el-dropdown-menu> </el-dropdown-menu>
</div> </div>
</el-dropdown> </el-dropdown>
</div> </div>
</div> </div>
<div class="content_item"> <div class="content_item">
...@@ -173,8 +173,8 @@ ...@@ -173,8 +173,8 @@
<div class="content_right content_right1"> <div class="content_right content_right1">
<div class="land_content_wrap-flex"> <div class="land_content_wrap-flex">
<!-- <div class="land_content_wrap_label" > <!-- <div class="land_content_wrap_label" >
</div> --> </div> -->
<el-input class="other_ipt" placeholder="输入最低金额" @change="changeMoney('start','startProjectAmount','endProjectAmount')" v-limit-num clearable <el-input class="other_ipt" placeholder="输入最低金额" @change="changeMoney('start','startProjectAmount','endProjectAmount')" v-limit-num clearable
v-model="jskBidNewsDto.startProjectAmount"></el-input> v-model="jskBidNewsDto.startProjectAmount"></el-input>
...@@ -184,10 +184,10 @@ ...@@ -184,10 +184,10 @@
<el-button slot="append" type="primary">万元</el-button> <el-button slot="append" type="primary">万元</el-button>
</el-input> </el-input>
</div> </div>
<div class="land_content_wrap-flex"> <div class="land_content_wrap-flex">
<div class="land_content_wrap_label" >合同估算价 <div class="land_content_wrap_label" >合同估算价
</div> </div>
<el-input class="other_ipt" placeholder="输入最低金额" @change="changeMoney('start','startProjectContractAmount','endProjectContractAmount')" v-limit-num clearable <el-input class="other_ipt" placeholder="输入最低金额" @change="changeMoney('start','startProjectContractAmount','endProjectContractAmount')" v-limit-num clearable
v-model="jskBidNewsDto.startProjectContractAmount"></el-input> v-model="jskBidNewsDto.startProjectContractAmount"></el-input>
...@@ -197,10 +197,10 @@ ...@@ -197,10 +197,10 @@
<el-button slot="append" type="primary">万元</el-button> <el-button slot="append" type="primary">万元</el-button>
</el-input> </el-input>
</div> </div>
<div class="land_content_wrap-flex"> <div class="land_content_wrap-flex">
<div class="land_content_wrap_label" >投标保证金 <div class="land_content_wrap_label" >投标保证金
</div> </div>
<el-input class="other_ipt" placeholder="输入最低金额" @change="changeMoney('start','startProjectEnsureAmount','endProjectEnsureAmount')" v-limit-num clearable <el-input class="other_ipt" placeholder="输入最低金额" @change="changeMoney('start','startProjectEnsureAmount','endProjectEnsureAmount')" v-limit-num clearable
v-model="jskBidNewsDto.startProjectEnsureAmount"></el-input> v-model="jskBidNewsDto.startProjectEnsureAmount"></el-input>
...@@ -210,7 +210,7 @@ ...@@ -210,7 +210,7 @@
<el-button slot="append" type="primary">万元</el-button> <el-button slot="append" type="primary">万元</el-button>
</el-input> </el-input>
</div> </div>
</div> </div>
</div> </div>
<div class="content_item"> <div class="content_item">
...@@ -227,7 +227,7 @@ ...@@ -227,7 +227,7 @@
</div> </div>
<div class="land_content_wrap-flex"> <div class="land_content_wrap-flex">
<div class="land_content_wrap_label" >勘察费暂估 <div class="land_content_wrap_label" >勘察费暂估
</div> </div>
<el-input class="other_ipt" placeholder="输入最低金额" @change="changeMoney('start','startProjectSurveyAmount','endProjectSurveyAmount')" v-limit-num clearable <el-input class="other_ipt" placeholder="输入最低金额" @change="changeMoney('start','startProjectSurveyAmount','endProjectSurveyAmount')" v-limit-num clearable
v-model="jskBidNewsDto.startProjectSurveyAmount"></el-input> v-model="jskBidNewsDto.startProjectSurveyAmount"></el-input>
...@@ -239,7 +239,7 @@ ...@@ -239,7 +239,7 @@
</div> </div>
<div class="land_content_wrap-flex"> <div class="land_content_wrap-flex">
<div class="land_content_wrap_label" >设计费暂估 <div class="land_content_wrap_label" >设计费暂估
</div> </div>
<el-input class="other_ipt" placeholder="输入最低金额" @change="changeMoney('start','startProjectDesignAmount','endProjectDesignAmount')" v-limit-num clearable <el-input class="other_ipt" placeholder="输入最低金额" @change="changeMoney('start','startProjectDesignAmount','endProjectDesignAmount')" v-limit-num clearable
v-model="jskBidNewsDto.startProjectDesignAmount"></el-input> v-model="jskBidNewsDto.startProjectDesignAmount"></el-input>
...@@ -249,14 +249,14 @@ ...@@ -249,14 +249,14 @@
<el-button slot="append" type="primary">万元</el-button> <el-button slot="append" type="primary">万元</el-button>
</el-input> </el-input>
</div> </div>
</div> </div>
</div> </div>
<div class="content_item"> <div class="content_item">
<div class="label">资质要求</div> <div class="label">资质要求</div>
<div class="content_right"> <div class="content_right">
<el-input class="ename_input" <el-input class="ename_input"
placeholder="请输入关键词句,如:施工总承包三级" v-model="jskBidNewsDto.qualiLimit" ></el-input> placeholder="请输入关键词句,如:施工总承包三级" v-model="jskBidNewsDto.qualiLimit" ></el-input>
<span class="land_content_wrap_label_tipspan"> <span class="land_content_wrap_label_tipspan">
<el-tooltip popper-class="explain_tooltip" content="根据输入的关键词全称进行匹配" <el-tooltip popper-class="explain_tooltip" content="根据输入的关键词全称进行匹配"
...@@ -269,7 +269,7 @@ ...@@ -269,7 +269,7 @@
<div class="content_item"> <div class="content_item">
<div class="label">业绩要求</div> <div class="label">业绩要求</div>
<div class="content_right"> <div class="content_right">
<el-input class="ename_input" <el-input class="ename_input"
placeholder="请输入关键词句,如:建筑工程" v-model="jskBidNewsDto.projectLimit" ></el-input> placeholder="请输入关键词句,如:建筑工程" v-model="jskBidNewsDto.projectLimit" ></el-input>
<span class="land_content_wrap_label_tipspan"> <span class="land_content_wrap_label_tipspan">
<el-tooltip popper-class="explain_tooltip" content="根据输入的关键词全称进行匹配" <el-tooltip popper-class="explain_tooltip" content="根据输入的关键词全称进行匹配"
...@@ -282,7 +282,7 @@ ...@@ -282,7 +282,7 @@
<div class="content_item"> <div class="content_item">
<div class="label">人员要求</div> <div class="label">人员要求</div>
<div class="content_right"> <div class="content_right">
<el-input class="ename_input" <el-input class="ename_input"
placeholder="请输入关键词句,如:一级建造师" v-model="jskBidNewsDto.personLimit" ></el-input> placeholder="请输入关键词句,如:一级建造师" v-model="jskBidNewsDto.personLimit" ></el-input>
<span class="land_content_wrap_label_tipspan"> <span class="land_content_wrap_label_tipspan">
<el-tooltip popper-class="explain_tooltip" content="根据输入的关键词全称进行匹配" <el-tooltip popper-class="explain_tooltip" content="根据输入的关键词全称进行匹配"
...@@ -294,7 +294,7 @@ ...@@ -294,7 +294,7 @@
</div> </div>
<div class="content_item content_item_padding0"> <div class="content_item content_item_padding0">
<div class="geduan"> <div class="geduan">
</div> </div>
</div> </div>
<div class="content_item content_item_padding0"> <div class="content_item content_item_padding0">
...@@ -303,31 +303,31 @@ ...@@ -303,31 +303,31 @@
<div class="content_right1-flex"> <div class="content_right1-flex">
<el-input style="width: 520px;" v-model="jskBidNewsDto.tenderee"clearable placeholder="请输入关键字"/> <el-input style="width: 520px;" v-model="jskBidNewsDto.tenderee"clearable placeholder="请输入关键字"/>
</div> </div>
<div class="content_right1-flex" style="margin-left: 106px;"> <div class="content_right1-flex" style="margin-left: 106px;">
<div class="label-zi" > <div class="label-zi" >
代理机构 代理机构
</div> </div>
<el-input style="width: 520px;" v-model="jskBidNewsDto.agency" clearable placeholder="请输入关键字"/> <el-input style="width: 520px;" v-model="jskBidNewsDto.agency" clearable placeholder="请输入关键字"/>
</div> </div>
</div> </div>
</div> </div>
<div class="content_item content_item_padding0"> <div class="content_item content_item_padding0">
<div class="geduan"> <div class="geduan">
</div> </div>
</div> </div>
<div class="content_item content_item_padding0"> <div class="content_item content_item_padding0">
<div class="search-new"> <div class="search-new">
<span @click="search()">查询</span> <span @click="search()">查询</span>
<span @click="reset">重置</span> <span @click="reset">重置</span>
</div> </div>
</div> </div>
</div> </div>
<div class="bottomlist"> <div class="bottomlist">
<div class="bottomlist-title"> <div class="bottomlist-title">
...@@ -342,13 +342,13 @@ ...@@ -342,13 +342,13 @@
<span class="excel" @click="$message({message: '功能正在开发中',type: 'warning'})">导出EXCEL</span> <span class="excel" @click="$message({message: '功能正在开发中',type: 'warning'})">导出EXCEL</span>
</p> </p>
</div> </div>
</div> </div>
<div class="table-item-jf1" v-if="tableData.length==0&& !isSkeleton"> <div class="table-item-jf1" v-if="tableData.length==0&& !isSkeleton">
<img class="item-jf-img" src="@/assets/images/kong.png" alt=""> <img class="item-jf-img" src="@/assets/images/kong.png" alt="">
<div class="item-jf-titel">抱歉,没找到相关数据!</div> <div class="item-jf-titel">抱歉,没找到相关数据!</div>
<div class="item-jf-text">建议调整关键词或筛选条件,重新搜索!</div> <div class="item-jf-text">建议调整关键词或筛选条件,重新搜索!</div>
</div> </div>
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton> <skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<div class="table-item" v-if="tableData.length>0&& !isSkeleton"> <div class="table-item" v-if="tableData.length>0&& !isSkeleton">
<el-table :data="tableData" element-loading-text="Loading" border fit highlight-current-row> <el-table :data="tableData" element-loading-text="Loading" border fit highlight-current-row>
...@@ -366,13 +366,13 @@ ...@@ -366,13 +366,13 @@
<template slot-scope="scope"> <template slot-scope="scope">
<router-link :to="'/radar/bxprozbgg/details/'+ scope.row.id" tag="a" class="list-titel-a" v-html="scope.row.projectName"></router-link> <router-link :to="'/radar/bxprozbgg/details/'+ scope.row.id" tag="a" class="list-titel-a" v-html="scope.row.projectName"></router-link>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="工程用途" width="161" > <el-table-column label="工程用途" width="161" >
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.projectPurposes||'--'}} {{ scope.row.projectPurposes||'--'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="zj" label="项目金额" width="161" > <el-table-column prop="zj" label="项目金额" width="161" >
<template slot-scope="scope"> <template slot-scope="scope">
...@@ -411,7 +411,7 @@ ...@@ -411,7 +411,7 @@
<li v-else>--</li> <li v-else>--</li>
</ul> </ul>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="zj" label="投标保证金(万元)" width="146" > <el-table-column prop="zj" label="投标保证金(万元)" width="146" >
<template slot-scope="scope"> <template slot-scope="scope">
...@@ -456,17 +456,17 @@ ...@@ -456,17 +456,17 @@
</span> </span>
<span v-else v-html="scope.row.tenderee"> <span v-else v-html="scope.row.tenderee">
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<div class="pagination clearfix" v-if="total>0&&pageFlag"> <div class="pagination clearfix" v-if="total>0&&pageFlag">
<el-pagination <el-pagination
background background
...@@ -477,12 +477,12 @@ ...@@ -477,12 +477,12 @@
:total="total>limit*500?501*limit:total"> :total="total>limit*500?501*limit:total">
</el-pagination> </el-pagination>
</div> </div>
</div> </div>
<!-- 关键词弹窗 --> <!-- 关键词弹窗 -->
<Keyword ref="keyword" @keywordClick="keywordClick" /> <Keyword ref="keyword" @keywordClick="keywordClick" />
</div> </div>
</template> </template>
<script> <script>
...@@ -860,7 +860,7 @@ ...@@ -860,7 +860,7 @@
} }
}, },
computed: { computed: {
checkjskBidNewsDto() { checkjskBidNewsDto() {
let arr = []; let arr = [];
...@@ -1022,7 +1022,7 @@ ...@@ -1022,7 +1022,7 @@
this.bidAssessmentWayList = res.data.bidAssessmentWay; this.bidAssessmentWayList = res.data.bidAssessmentWay;
this.projectEnsureAmountPayTypeList = res.data.bidAmountPayType; this.projectEnsureAmountPayTypeList = res.data.bidAmountPayType;
}).catch(error=>{ }).catch(error=>{
}); });
}, },
...@@ -1086,7 +1086,7 @@ ...@@ -1086,7 +1086,7 @@
}, },
//排序 //排序
handsequencingList(index) { handsequencingList(index) {
this.fieldshow = false; this.fieldshow = false;
this.field = this.fieldOptions[index].key; this.field = this.fieldOptions[index].key;
this.desc = this.fieldOptions[index].desc; this.desc = this.fieldOptions[index].desc;
...@@ -1632,7 +1632,7 @@ ...@@ -1632,7 +1632,7 @@
data.projectEnsureAmountPayType = data.projectEnsureAmountPayType.join(","); data.projectEnsureAmountPayType = data.projectEnsureAmountPayType.join(",");
data.projectLevel = data.projectLevel.join(","); data.projectLevel = data.projectLevel.join(",");
// data.hasFile = this.checked ? 'yes' : 'false'; // data.hasFile = this.checked ? 'yes' : 'false';
let params = { let params = {
page: { page: {
page: this.page, page: this.page,
...@@ -1653,11 +1653,11 @@ ...@@ -1653,11 +1653,11 @@
this.total=res.data.total; this.total=res.data.total;
} }
}).catch(error=>{ }).catch(error=>{
}); });
}, },
reset(){ reset(){
Object.assign(this.$data, this.$options.data.call(this)); //重置data Object.assign(this.$data, this.$options.data.call(this)); //重置data
...@@ -1673,7 +1673,7 @@ ...@@ -1673,7 +1673,7 @@
this.maxHeight = '36px' this.maxHeight = '36px'
} }
}, },
provinceChange(e){ provinceChange(e){
let obj='' let obj=''
obj= this.province.find(function(i){ obj= this.province.find(function(i){
...@@ -1700,10 +1700,10 @@ ...@@ -1700,10 +1700,10 @@
}else{ }else{
this.$router.push({path: '/company/'+this.encodeStr(companyId)}) this.$router.push({path: '/company/'+this.encodeStr(companyId)})
} }
} }
}).catch(error=>{ }).catch(error=>{
}); });
}, },
exportData(row,name) { exportData(row,name) {
...@@ -1744,7 +1744,7 @@ ...@@ -1744,7 +1744,7 @@
color: rgba(35,35,35,0.8); color: rgba(35,35,35,0.8);
} }
.content_right{ .content_right{
.bxpro_region{ .bxpro_region{
width: 1220px; width: 1220px;
border: 1px solid #EFEFEF; border: 1px solid #EFEFEF;
...@@ -1805,12 +1805,12 @@ ...@@ -1805,12 +1805,12 @@
} }
} }
} }
.include-keywords { .include-keywords {
display: flex; display: flex;
align-items: center; align-items: center;
position: relative; position: relative;
.lefttltel { .lefttltel {
display: inline-block; display: inline-block;
background: #F3F4F5; background: #F3F4F5;
...@@ -1823,25 +1823,25 @@ ...@@ -1823,25 +1823,25 @@
text-align: center; text-align: center;
line-height: 34px; line-height: 34px;
} }
.el-input { .el-input {
line-height: 34px; line-height: 34px;
border-radius: 0; border-radius: 0;
::v-deep .el-input__inner { ::v-deep .el-input__inner {
height: 34px; height: 34px;
line-height:34px; line-height:34px;
border-radius: 0; border-radius: 0;
} }
} }
.commonly-input { .commonly-input {
::v-deep .el-input__inner { ::v-deep .el-input__inner {
padding-right: 100px; padding-right: 100px;
border-color: #EFEFEF; border-color: #EFEFEF;
} }
} }
.commonly { .commonly {
position: absolute; position: absolute;
top: 8px; top: 8px;
...@@ -1852,7 +1852,7 @@ ...@@ -1852,7 +1852,7 @@
cursor: pointer; cursor: pointer;
} }
} }
.ename_input{ .ename_input{
width: 640px; width: 640px;
margin-right: 20px; margin-right: 20px;
...@@ -1874,7 +1874,7 @@ ...@@ -1874,7 +1874,7 @@
color: rgba(35,35,35,0.8); color: rgba(35,35,35,0.8);
margin-right:8px; margin-right:8px;
} }
.other_ipt { .other_ipt {
width: 104px; width: 104px;
height: 28px; height: 28px;
...@@ -1884,7 +1884,7 @@ ...@@ -1884,7 +1884,7 @@
line-height: 28px; line-height: 28px;
padding: 0 8px; padding: 0 8px;
} }
} }
.other_ipt1 { .other_ipt1 {
width: 153px; width: 153px;
...@@ -1896,15 +1896,15 @@ ...@@ -1896,15 +1896,15 @@
} }
.el-button{ .el-button{
height: 26px; height: 26px;
line-height: 26px; line-height: 26px;
} }
width: 49px; width: 49px;
height: 26px; height: 26px;
line-height: 26px; line-height: 26px;
padding: 0 8px; padding: 0 8px;
} }
} }
.other_label_span{ .other_label_span{
margin:0 8px; margin:0 8px;
font-size: 14px; font-size: 14px;
...@@ -1921,7 +1921,7 @@ ...@@ -1921,7 +1921,7 @@
margin-left: 4px; margin-left: 4px;
} }
} }
} }
.content_right1{ .content_right1{
display: flex; display: flex;
...@@ -1936,12 +1936,12 @@ ...@@ -1936,12 +1936,12 @@
} }
} }
} }
.item_ckquery_list { .item_ckquery_list {
display: flex; display: flex;
} }
.item_ckquery_list .el-input__icon { .item_ckquery_list .el-input__icon {
position: relative; position: relative;
top: 1px; top: 1px;
...@@ -1951,7 +1951,7 @@ ...@@ -1951,7 +1951,7 @@
} }
.register_count_ipt{ .register_count_ipt{
margin-left: 0px; margin-left: 0px;
} }
.register_count_ipt .el-input__inner{ .register_count_ipt .el-input__inner{
width: 174px; width: 174px;
...@@ -1984,19 +1984,19 @@ ...@@ -1984,19 +1984,19 @@
padding: 1px 5px !important; padding: 1px 5px !important;
} }
} }
} }
.content_item_padding0{ .content_item_padding0{
padding: 0; padding: 0;
} }
} }
.bottomlist{ .bottomlist{
width: 100%; width: 100%;
background-color: #FFFFFF; background-color: #FFFFFF;
border-radius: 4px 4px 4px 4px; border-radius: 4px 4px 4px 4px;
.bottomlist-title{ .bottomlist-title{
display: flex; display: flex;
...@@ -2018,7 +2018,7 @@ ...@@ -2018,7 +2018,7 @@
.title-right{ .title-right{
display: flex; display: flex;
align-items: center; align-items: center;
p:last-child{ p:last-child{
display: flex; display: flex;
align-items: center; align-items: center;
...@@ -2034,7 +2034,7 @@ ...@@ -2034,7 +2034,7 @@
cursor: pointer; cursor: pointer;
} }
} }
} }
.table-item{ .table-item{
padding:0px 16px; padding:0px 16px;
...@@ -2054,16 +2054,16 @@ ...@@ -2054,16 +2054,16 @@
} }
} }
.bottomlist-content{ .bottomlist-content{
padding-bottom: 0px; padding-bottom: 0px;
} }
.pagination{ .pagination{
padding: 14px ; padding: 14px ;
.el-pagination{ .el-pagination{
float: right; float: right;
margin-right:-8px; margin-right:-8px;
} }
} }
} }
......
...@@ -345,9 +345,6 @@ ...@@ -345,9 +345,6 @@
<i class="el-icon-upload"></i> <i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div> <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip"> <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> <span>仅允许导入xls、xlsx格式文件。</span>
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link> <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link>
</div> </div>
......
package com.dsk.system.service.impl; package com.dsk.system.service.impl;
import cn.dev33.satoken.secure.BCrypt; 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.bean.BeanUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dsk.common.constant.CacheNames; import com.dsk.common.constant.CacheNames;
...@@ -15,9 +20,11 @@ import com.dsk.common.core.domain.PageQuery; ...@@ -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.SysDictData;
import com.dsk.common.core.domain.entity.SysDictType; import com.dsk.common.core.domain.entity.SysDictType;
import com.dsk.common.core.page.TableDataInfo; import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.enums.UserStatus;
import com.dsk.common.exception.ServiceException; import com.dsk.common.exception.ServiceException;
import com.dsk.common.utils.PasswordUtils; import com.dsk.common.utils.PasswordUtils;
import com.dsk.common.utils.StringUtils; import com.dsk.common.utils.StringUtils;
import com.dsk.common.utils.redis.RedisUtils;
import com.dsk.system.domain.*; import com.dsk.system.domain.*;
import com.dsk.system.domain.bo.SysTenantBo; import com.dsk.system.domain.bo.SysTenantBo;
import com.dsk.system.domain.vo.SysTenantVo; import com.dsk.system.domain.vo.SysTenantVo;
...@@ -201,6 +208,7 @@ public class ISysTenantServiceImpl implements ISysTenantService { ...@@ -201,6 +208,7 @@ public class ISysTenantServiceImpl implements ISysTenantService {
String password = PasswordUtils.generatePwd(8); String password = PasswordUtils.generatePwd(8);
user.setPassword(BCrypt.hashpw(password)); user.setPassword(BCrypt.hashpw(password));
user.setDeptId(deptId); user.setDeptId(deptId);
user.setCreateTime(new DateTime());
userMapper.insert(user); userMapper.insert(user);
//新增系统用户后,默认当前用户为部门的负责人 //新增系统用户后,默认当前用户为部门的负责人
SysDept sd = new SysDept(); SysDept sd = new SysDept();
...@@ -393,6 +401,24 @@ public class ISysTenantServiceImpl implements ISysTenantService { ...@@ -393,6 +401,24 @@ public class ISysTenantServiceImpl implements ISysTenantService {
roleMenuMapper.delete( roleMenuMapper.delete(
new LambdaQueryWrapper<SysRoleMenu>().in(SysRoleMenu::getRoleId, roleIds).notIn(!menuIds.isEmpty(), SysRoleMenu::getMenuId, menuIds)); 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; 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