Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
D
dsk-operate-sys-cscec
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
fulixin
dsk-operate-sys-cscec
Commits
b4f33b30
Commit
b4f33b30
authored
Oct 26, 2023
by
yht15023815643
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'V20230915' of
http://192.168.60.201/root/dsk-operate-sys
into V20230915
parents
48d6bb00
60a833cc
Changes
22
Show whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
1542 additions
and
1239 deletions
+1542
-1239
BusinessOpenTenderServiceImpl.java
...m/dsk/biz/service/impl/BusinessOpenTenderServiceImpl.java
+4
-4
project.js
dsk-operate-ui/src/api/project/project.js
+1
-2
asc.svg
dsk-operate-ui/src/assets/icons/svg/asc.svg
+1
-0
desc.svg
dsk-operate-ui/src/assets/icons/svg/desc.svg
+1
-0
common.css
dsk-operate-ui/src/assets/styles/common.css
+4
-0
index.vue
dsk-operate-ui/src/layout/components/TagsView/index.vue
+1
-1
index.js
dsk-operate-ui/src/router/index.js
+12
-0
index.js
dsk-operate-ui/src/utils/postMessageBridge/bridge/index.js
+13
-0
index.js
dsk-operate-ui/src/utils/postMessageBridge/index.js
+0
-0
index.vue
dsk-operate-ui/src/views/custom/customList/index.vue
+588
-597
detail.vue
dsk-operate-ui/src/views/detail.vue
+1
-1
HeadFormNew.vue
...ate-ui/src/views/detail/party-a/component/HeadFormNew.vue
+0
-5
index.vue
dsk-operate-ui/src/views/enterpriseManagement/index.vue
+5
-2
index.vue
dsk-operate-ui/src/views/market/index.vue
+23
-19
BatchImportCom.vue
...rc/views/project/projectList/component/BatchImportCom.vue
+168
-0
BidOpeningRecord.vue
.../views/project/projectList/component/BidOpeningRecord.vue
+113
-35
batchImportReset.vue
.../views/project/projectList/component/batchImportReset.vue
+2
-2
index.vue
dsk-operate-ui/src/views/project/projectList/index.vue
+417
-410
index.vue
...ate-ui/src/views/radar/components/Establishment/index.vue
+81
-77
index.vue
...operate-ui/src/views/radar/components/bxprozbgg/index.vue
+81
-81
index.vue
dsk-operate-ui/src/views/system/user/index.vue
+0
-3
ISysTenantServiceImpl.java
...va/com/dsk/system/service/impl/ISysTenantServiceImpl.java
+26
-0
No files found.
dsk-module/dsk-biz-api/src/main/java/com/dsk/biz/service/impl/BusinessOpenTenderServiceImpl.java
View file @
b4f33b30
...
...
@@ -61,9 +61,9 @@ public class BusinessOpenTenderServiceImpl implements IBusinessOpenTenderService
}
private
void
verifyBean
(
BusinessOpenTender
bo
){
if
(
ObjectUtils
.
is
Arra
y
(
bo
.
getBusinessId
()))
throw
new
BeanException
(
"项目id不能为空!"
);
if
(
ObjectUtils
.
is
Array
(
bo
.
getTenderer
()))
throw
new
BeanException
(
"开
标人不能为空!"
);
if
(
ObjectUtils
.
isArra
y
(
bo
.
getTendererNature
()))
throw
new
BeanException
(
"企业性质不能为空!"
);
if
(
ObjectUtils
.
isArra
y
(
bo
.
getTenderAmount
()))
throw
new
BeanException
(
"投标金额不能为空!"
);
if
(
ObjectUtils
.
is
Empt
y
(
bo
.
getBusinessId
()))
throw
new
BeanException
(
"项目id不能为空!"
);
if
(
ObjectUtils
.
is
Empty
(
bo
.
getTenderer
()))
throw
new
BeanException
(
"投
标人不能为空!"
);
// if(ObjectUtils.isEmpt
y(bo.getTendererNature())) throw new BeanException("企业性质不能为空!");
// if(ObjectUtils.isEmpt
y(bo.getTenderAmount())) throw new BeanException("投标金额不能为空!");
}
}
dsk-operate-ui/src/api/project/project.js
View file @
b4f33b30
...
...
@@ -309,8 +309,7 @@ export const modifyBidOpeningRecordApi = (data) => request({
*/
export
const
removeBidOpeningRecordApi
=
(
params
)
=>
request
({
method
:
"DELETE"
,
url
:
"/business/open/tender"
,
params
url
:
`/business/open/tender/
${
params
}
`
,
});
dsk-operate-ui/src/assets/icons/svg/asc.svg
0 → 100644
View file @
b4f33b30
<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
dsk-operate-ui/src/assets/icons/svg/desc.svg
0 → 100644
View file @
b4f33b30
<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
dsk-operate-ui/src/assets/styles/common.css
View file @
b4f33b30
...
...
@@ -16,3 +16,7 @@
.fade-leave-to
/* .fade-leave-active below version 2.1.8 */
{
opacity
:
0
;
}
.el-message
{
z-index
:
3000
!important
;
}
dsk-operate-ui/src/layout/components/TagsView/index.vue
View file @
b4f33b30
...
...
@@ -44,7 +44,7 @@
<svg
:class=
"isActive(tag)?'tags-icon tags-icon-active':'tags-icon'"
aria-hidden=
"true"
>
<use
:xlink:href=
"iconName(tag)"
/>
</svg>
<span
:id=
"isActive(tag)?'tagTitle':''"
>
{{
tag
.
title
}}
</span>
<span
:id=
"isActive(tag)?'tagTitle':''"
>
{{
tag
.
title
.
replace
(
/<
[^
>
]
+>/g
,
''
)
}}
</span>
<span
v-if=
"!isAffix(tag)"
class=
"el-icon-close"
@
click
.
prevent
.
stop=
"closeSelectedTag(tag)"
/>
<i
:class=
"index!=visitedViews.length-1 && index != isActiveIndex() && index != isActiveIndex()-1?'tags-item-line':'tags-item-line item-color'"
/>
</router-link>
...
...
dsk-operate-ui/src/router/index.js
View file @
b4f33b30
...
...
@@ -159,6 +159,18 @@ export const constantRoutes = [
}
]
},
{
path
:
''
,
component
:
Layout
,
hidden
:
true
,
redirect
:
'noredirect'
,
children
:
[
{
path
:
'/JumpPage.html'
,
component
:
()
=>
import
(
'@/views/detail'
),
}
]
},
//乙方-企业详情
{
path
:
'/company'
,
...
...
dsk-operate-ui/src/utils/postMessageBridge/bridge/index.js
0 → 100644
View file @
b4f33b30
/*
* @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
dsk-operate-ui/src/utils/postMessageBridge/index.js
0 → 100644
View file @
b4f33b30
dsk-operate-ui/src/views/custom/customList/index.vue
View file @
b4f33b30
<
template
>
<div
@
click =
'handleALL'
class=
"app
-container"
>
<div
@
click=
'handleALL'
class=
"custom-list
-container"
>
<div
class=
"miantitle"
>
<span>
客户管理
</span>
<span>
/ 客户列表
</span>
</div>
<div>
<el-card
class=
"box-card noborder
min1370
"
>
<el-card
class=
"box-card noborder"
>
<div
class=
"tables "
>
<div
class=
"empty"
v-if=
"tableData.total==0 && !isSkeleton"
>
<img
src=
"@/assets/images/project/empty.png"
>
...
...
@@ -18,51 +18,39 @@
<div>
<el-form
ref=
"queryForm"
:model=
"searchParam"
:inline=
"true"
size=
"small"
>
<el-form-item>
<el-cascader
ref=
"address1"
: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-cascader
ref=
"address1"
: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
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-select>
</el-form-item>
<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-select>
</el-form-item>
<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-select>
</el-form-item>
<el-form-item
prop=
"companyName"
>
<!--
<div
class=
"newSearch"
>
-->
<!--
<el-input
type=
"text"
v-model=
"searchParam.companyName"
clearable
placeholder=
"输入企业名称查询"
@
change=
"clearname"
>
-->
<!--
<i
slot=
"prefix"
class=
"el-input__icon"
><img
src=
"@/assets/images/project/sousuo.png"
width=
"16px"
@
click=
"handleCurrentChange(1)"
></i>
-->
<!--
</el-input>
-->
<!--
</div>
-->
<!-- 未点击前的输入框样式 -->
<div
class=
"normal-search-container"
:class=
"
{'is-hover-search' : hover}" @mouseover="searchHover($event)"
@mouseleave="searchUnHover($event,searchParam.companyName)">
<div
class=
"normal-search-container"
:class=
"
{'is-hover-search' : searchHoverStatus}" @mouseover="searchHover($event)"
@mouseleave="searchUnHover($event,form)">
<img
src=
"@/assets/images/enterprise/enterprise-search-icon.svg"
alt=
""
>
<span
v-show=
"!
hover
&& !searchParam.companyName"
>
搜索
</span>
<el-input
v-model=
"searchParam.companyName"
placeholder=
"输入关键词查询"
@
focus=
"searchFocus($event)"
@
blur=
"searchBlur($event)"
@
keydown
.
native
.
enter=
"handleSearch
"
@
input=
"value => searchInput(value)"
v-show=
"hover || searchParam.companyName
"
>
<span
v-show=
"!
searchHoverStatus
&& !searchParam.companyName"
>
搜索
</span>
<el-input
v-model=
"searchParam.companyName"
placeholder=
"输入关键词查询"
style=
"width:238px;"
@
focus=
"searchFocus($event)"
@
blur=
"searchBlur($event)"
@
input=
"value => searchInput(value)"
v-show=
"searchHoverStatus || searchParam.companyName
"
@
keydown
.
native
.
enter=
"handleSearch
"
>
<template
slot=
"suffix"
>
<transition
mode=
"out-in"
appear
name=
"fade"
>
<img
src=
"@/assets/images/enterprise/search-input-clear-icon.svg"
alt=
""
@
click
.
stop=
"searchParam.companyName = '';handleSearch()"
v-show=
"showClearIcon"
>
<img
src=
"@/assets/images/enterprise/search-input-clear-icon.svg"
alt=
""
@
click
.
stop=
"searchParam.companyName = '';handleSearch"
v-show=
"showClearIcon"
>
</transition>
</
template
>
</el-input>
...
...
@@ -74,109 +62,79 @@
<div
class=
"dc"
>
<div
class=
"total"
>
共{{tableData.total}}条
</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>
<skeleton
v-if=
"isSkeleton"
></skeleton>
<div
class=
"table-item"
>
<el-table
v-show=
"!isSkeleton&&tableData.total > 0"
class=
"fixed-table"
v-horizontal-scroll=
"'hover'"
ref=
"thistables"
:data=
"tableData.rows"
stripe
border
style=
"width: 100%"
>
<el-table-column
prop=
"index"
label=
"序号"
fixed=
"left"
width=
"60"
>
:data=
"tableData.rows"
stripe
border
style=
"width: 100%"
>
<el-table-column
prop=
"index"
label=
"序号"
fixed=
"left"
width=
"60"
>
<
template
slot-scope=
'scope'
>
<span>
{{
(
searchParam
.
pageNum
-
1
)
*
searchParam
.
pageSize
+
scope
.
$index
+
1
}}
</span>
</
template
>
</el-table-column>
<el-table-column
prop=
"date"
label=
"企业名称"
fixed=
"left"
width=
"316"
>
<el-table-column
prop=
"date"
label=
"企业名称"
fixed=
"left"
width=
"316"
>
<
template
slot-scope=
"scope"
>
<div
class=
"ps1"
>
<div
class=
"wordprimary ps2"
@
click=
"toDetail(scope.row,'business')"
v-html=
"scope.row.companyName"
></div>
<div
class=
"ps3"
>
<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
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>
</div>
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"cooperationProject"
label=
"合作项目"
width=
"90"
>
<el-table-column
prop=
"cooperationProject"
label=
"合作项目"
width=
"90"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
cooperationProject
||
'--'
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"followProject"
label=
"跟进项目"
width=
"90"
>
<el-table-column
prop=
"followProject"
label=
"跟进项目"
width=
"90"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
followProject
||
'--'
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"reserveProject"
label=
"储备项目"
width=
"90"
>
<el-table-column
prop=
"reserveProject"
label=
"储备项目"
width=
"90"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
reserveProject
||
'--'
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"legalPerson"
label=
"法定代表人"
width=
"110"
>
<el-table-column
prop=
"legalPerson"
label=
"法定代表人"
width=
"110"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
legalPerson
||
'--'
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"registerAddress"
label=
"注册地区"
width=
"160"
>
<el-table-column
prop=
"registerAddress"
label=
"注册地区"
width=
"160"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
registerAddress
||
'--'
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"registerCapitalStr"
label=
"注册资本金(万元)"
width=
"160"
>
<el-table-column
prop=
"registerCapitalStr"
label=
"注册资本金(万元)"
width=
"160"
>
<
template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.registerCapital && scope.row.registerCapital>0"
>
{{
scope
.
row
.
registerCapital
}}
</span><span
v-else
>
--
</span>
</
template
>
</el-table-column>
<el-table-column
prop=
"creditLevel"
label=
"企业主体评级"
width=
"120"
>
<el-table-column
prop=
"creditLevel"
label=
"企业主体评级"
width=
"120"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
creditLevel
||
'--'
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"isOn"
label=
"上市公司"
width=
"90"
>
<el-table-column
prop=
"isOn"
label=
"上市公司"
width=
"90"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
isOn
==
1
?
"是"
:
"否"
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"isMajor"
label=
"局级大客户"
width=
"90"
>
<el-table-column
prop=
"isMajor"
label=
"局级大客户"
width=
"90"
>
<
template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.isMajor != null"
>
{{
scope
.
row
.
isMajor
==
1
?
"是"
:
"否"
}}
...
...
@@ -184,37 +142,27 @@
<span
v-else
>
--
</span>
</
template
>
</el-table-column>
<el-table-column
prop=
"customerLevel"
label=
"客户等级"
width=
"90"
>
<el-table-column
prop=
"customerLevel"
label=
"客户等级"
width=
"90"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
customerLevel
||
'--'
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"companyNature"
label=
"客户性质"
width=
"90"
>
<el-table-column
prop=
"companyNature"
label=
"客户性质"
width=
"90"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
companyNature
||
'--'
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"companyLevel"
label=
"客户级别"
width=
"90"
>
<el-table-column
prop=
"companyLevel"
label=
"客户级别"
width=
"90"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
companyLevel
||
'--'
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"address"
label=
"企业母公司"
width=
"200"
>
<el-table-column
prop=
"address"
label=
"企业母公司"
width=
"200"
>
<
template
slot-scope=
"scope"
>
<div
class=
""
>
{{
scope
.
row
.
superCompany
||
'--'
}}
</div>
</
template
>
</el-table-column>
<el-table-column
:key=
"keys"
prop=
"mainBusiness"
label=
"主营业务"
width=
"300"
>
<el-table-column
:key=
"keys"
prop=
"mainBusiness"
label=
"主营业务"
width=
"300"
>
<
template
slot-scope=
"scope"
>
<div
v-if=
"scope.row.mainBusiness == null || scope.row.mainBusiness == ''"
>
--
</div>
<div
v-if=
"scope.row.mainBusiness1"
>
...
...
@@ -224,9 +172,7 @@
<div
v-else
>
{{
scope
.
row
.
mainBusiness
}}
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"companyAttribute"
:key=
"keys+2"
label=
"发包属性"
width=
"300"
>
<el-table-column
prop=
"companyAttribute"
:key=
"keys+2"
label=
"发包属性"
width=
"300"
>
<
template
slot-scope=
"scope"
>
<div
v-if=
"scope.row.companyAttribute == null || scope.row.companyAttribute == ''"
>
--
</div>
<div
v-if=
"scope.row.companyAttribute1"
>
...
...
@@ -236,9 +182,7 @@
<div
v-else
>
{{
scope
.
row
.
companyAttribute
}}
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"followUser"
label=
"跟进人"
width=
"110"
>
<el-table-column
prop=
"followUser"
label=
"跟进人"
width=
"110"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
followUser
||
'--'
}}
</
template
>
...
...
@@ -246,23 +190,12 @@
</el-table>
</div>
<div
class=
"bottems"
v-if=
"tableData.total>searchParam.pageSize"
>
<el-pagination
background
:page-size=
"searchParam.pageSize"
:current-page=
"searchParam.pageNum"
@
current-change=
"handleCurrentChange"
layout=
"prev, pager, next"
:total=
"tableData.total"
>
<el-pagination
background
:page-size=
"searchParam.pageSize"
:current-page=
"searchParam.pageNum"
@
current-change=
"handleCurrentChange"
layout=
"prev, pager, next"
:total=
"tableData.total"
>
</el-pagination>
</div>
</div>
<el-dialog
class=
"popups"
:visible
.
sync=
"dialogVisible"
width=
"534px"
:close-on-click-modal=
"false"
@
close=
"resetForm('ruleForm')"
>
<el-dialog
class=
"popups"
:visible
.
sync=
"dialogVisible"
width=
"534px"
:close-on-click-modal=
"false"
@
close=
"resetForm('ruleForm')"
>
<div
class=
"poptitle"
>
<img
src=
"@/assets/images/economies/icon.png"
>
<span>
添加客户
</span>
...
...
@@ -271,7 +204,8 @@
<el-form-item
label=
"企业名称:"
class=
"row"
prop=
"companyName"
>
<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=
"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>
</el-form-item>
<el-form-item
label=
"客户等级:"
class=
"row"
>
...
...
@@ -286,7 +220,8 @@
<el-input
type=
"text"
placeholder=
"请输入"
v-model=
"queryParam.registerCapital"
@
input=
'number'
></el-input>
</el-form-item>
<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
label=
"统一社会信用代码:"
class=
"row"
>
<el-input
type=
"text"
placeholder=
"请输入"
v-model=
"queryParam.creditCode"
></el-input>
...
...
@@ -305,73 +240,72 @@
</template>
<
script
>
import
{
getToken
}
from
'@/utils/auth'
import
'@/assets/styles/project.scss'
import
{
addCustomer
,
getCustomerList
,
importData
}
from
'@/api/custom/custom'
import
{
getDictType
,
getEnterprise
}
from
'@/api/main'
import
prvinceTree
from
'@/assets/json/provinceTree'
import
batchimport
from
'../../project/projectList/component/batchImport'
import
skeleton
from
'../../project/projectList/component/skeleton'
import
{
encodeStr
}
from
'@/assets/js/common'
import
{
v4
}
from
"uuid"
;
import
gsap
from
"gsap"
;
export
default
{
import
{
getToken
}
from
'@/utils/auth'
;
import
'@/assets/styles/project.scss'
;
import
{
addCustomer
,
getCustomerList
,
importData
}
from
'@/api/custom/custom'
;
import
{
getDictType
,
getEnterprise
}
from
'@/api/main'
;
import
prvinceTree
from
'@/assets/json/provinceTree'
;
import
batchimport
from
'../../project/projectList/component/batchImport'
;
import
skeleton
from
'../../project/projectList/component/skeleton'
;
import
{
encodeStr
}
from
'@/assets/js/common'
;
import
{
v4
}
from
"uuid"
;
export
default
{
name
:
'CustomList'
,
components
:
{
batchimport
,
skeleton
},
components
:
{
batchimport
,
skeleton
},
data
()
{
return
{
return
{
encodeStr
,
pldr
:
false
,
types
:
'custom'
,
searchParam
:{
companyName
:
''
,
pageNum
:
1
,
pageSize
:
20
types
:
'custom'
,
searchParam
:
{
companyName
:
''
,
pageNum
:
1
,
pageSize
:
20
},
address
:
''
,
props
:{
checkStrictly
:
true
,
expandTrigger
:
'hover'
},
dialogVisible
:
false
,
textarea
:
""
,
nowedit
:
-
1
,
//当前正在编辑的文本
tipslit
:[],
//项目标签
tipsvalue
:
""
,
//标签填写内容
address
:
''
,
props
:
{
checkStrictly
:
true
,
expandTrigger
:
'hover'
},
dialogVisible
:
false
,
textarea
:
""
,
nowedit
:
-
1
,
//当前正在编辑的文本
tipslit
:
[],
//项目标签
tipsvalue
:
""
,
//标签填写内容
tableData
:
[],
//列表
companData
:[],
//联想企业列表
companData
:
[],
//联想企业列表
addressProps
:
{
multiple
:
true
,
expandTrigger
:
'hover'
},
//上市公司
isMajorlist
:[
isMajorlist
:
[
{
dictValue
:
0
,
dictLabel
:
'否'
,
dictLabel
:
'否'
,
},
{
dictValue
:
1
,
dictLabel
:
'是'
,
dictLabel
:
'是'
,
}
],
companyNaturelist
:[],
//客户性质
creditLevellist
:[],
//资信评级
customerLevel
:[],
//客户等级
addressList
:[],
//地区
companyNaturelist
:
[],
//客户性质
creditLevellist
:
[],
//资信评级
customerLevel
:
[],
//客户等级
addressList
:
[],
//地区
//添加客户
queryParam
:{
companyId
:
''
,
//jsk企业id
companyName
:
''
,
//客户名称(企业名称
customerLevel
:
''
,
//客户等级
legalPerson
:
''
,
//法定代表人
registerCapital
:
''
,
//注册资本
registerAddress
:
''
,
//企业注册地址
creditCode
:
''
,
//社会统一信用代码
address
:
''
,
//选择的地址
provinceId
:
''
,
cityId
:
''
,
districtId
:
''
,
queryParam
:
{
companyId
:
''
,
//jsk企业id
companyName
:
''
,
//客户名称(企业名称
customerLevel
:
''
,
//客户等级
legalPerson
:
''
,
//法定代表人
registerCapital
:
''
,
//注册资本
registerAddress
:
''
,
//企业注册地址
creditCode
:
''
,
//社会统一信用代码
address
:
''
,
//选择的地址
provinceId
:
''
,
cityId
:
''
,
districtId
:
''
,
},
rules
:{
companyName
:[{
required
:
true
,
message
:
'请输入非空格字符!'
,
trigger
:
'blur'
},]
rules
:
{
companyName
:
[{
required
:
true
,
message
:
'请输入非空格字符!'
,
trigger
:
'blur'
},]
},
//批量导入
action
:
process
.
env
.
VUE_APP_BASE_API
+
"/customer/importData"
,
...
...
@@ -380,119 +314,126 @@
Authorization
:
"Bearer "
+
getToken
(),
},
// isNew:true,
showlist
:
false
,
keys
:
1
,
isSkeleton
:
true
,
companypage
:
1
,
isscroll
:
false
,
inputID1
:
this
.
getUid
(),
inputID2
:
this
.
getUid
(),
inputID3
:
this
.
getUid
(),
inputID4
:
this
.
getUid
(),
show
ClearIcon
:
false
,
hover
:
false
,
}
showlist
:
false
,
keys
:
1
,
isSkeleton
:
true
,
companypage
:
1
,
isscroll
:
false
,
inputID1
:
this
.
getUid
(),
inputID2
:
this
.
getUid
(),
inputID3
:
this
.
getUid
(),
inputID4
:
this
.
getUid
(),
show
SearchBox
:
false
,
searchHoverStatus
:
false
,
showClearIcon
:
false
}
;
},
created
()
{
if
(
this
.
$route
.
query
.
key
)
{
this
.
searchParam
.
companyName
=
this
.
$route
.
query
.
key
;
if
(
this
.
$route
.
query
.
key
)
{
this
.
searchParam
.
companyName
=
this
.
$route
.
query
.
key
;
}
if
(
this
.
$route
.
query
.
type
===
'1'
)
{
this
.
searchParam
.
companyNatures
=
[
'国有企业'
]
if
(
this
.
$route
.
query
.
type
===
'1'
)
{
this
.
searchParam
.
companyNatures
=
[
'国有企业'
];
}
if
(
this
.
$route
.
query
.
type
===
'2'
)
{
this
.
searchParam
.
companyNatures
=
[
'央企'
]
if
(
this
.
$route
.
query
.
type
===
'2'
)
{
this
.
searchParam
.
companyNatures
=
[
'央企'
];
}
if
(
this
.
$route
.
query
.
type
===
'3'
)
{
this
.
searchParam
.
companyNatures
=
[
'事业单位'
,
'机关单位'
]
if
(
this
.
$route
.
query
.
type
===
'3'
)
{
this
.
searchParam
.
companyNatures
=
[
'事业单位'
,
'机关单位'
];
}
this
.
$watch
(()
=>
this
.
$route
.
params
,()
=>
{
this
.
getCustomerList
()
this
.
getDictType
()
this
.
prvinceTree
()
this
.
handleQuery
()
this
.
searchParam
.
companyName
=
''
this
.
$watch
(()
=>
this
.
$route
.
params
,
()
=>
{
this
.
getCustomerList
();
this
.
getDictType
();
this
.
prvinceTree
();
this
.
handleQuery
();
this
.
searchParam
.
companyName
=
''
;
},
// 组件创建完后获取数据,
// 此时 data 已经被 observed 了
{
immediate
:
true
}
)
)
;
},
methods
:{
onEnter
(
el
,
done
)
{
gsap
.
from
(
el
,
{
opacity
:
0
,
width
:
0
,
});
gsap
.
to
(
el
,
{
opacity
:
1
,
width
:
242
,
onComplete
()
{
// 完成动画聚焦输入框
el
.
querySelector
(
"input"
).
focus
();
done
();
methods
:
{
searchFocus
(
event
)
{
const
{
target
}
=
event
;
if
(
target
?.
value
?.
length
)
{
this
.
showClearIcon
=
true
;
}
},
searchBlur
(
event
)
{
this
.
showClearIcon
=
false
;
},
searchInput
(
value
)
{
if
(
value
?.
length
)
{
this
.
showClearIcon
=
true
;
}
},
searchHover
(
event
)
{
this
.
searchHoverStatus
=
true
;
},
searchUnHover
(
event
)
{
if
(
!
this
.
searchParam
.
companyName
)
{
this
.
searchHoverStatus
=
false
;
}
});
},
async
handleQuery
()
{
let
[
type1
,
type2
]
=
await
Promise
.
all
([
let
[
type1
,
type2
]
=
await
Promise
.
all
([
getDictType
(
'company_nature_type'
),
getDictType
(
'credit_level_type'
),
])
if
(
type1
.
code
==
200
)
{
])
;
if
(
type1
.
code
==
200
)
{
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
=>
{
this
.
creditLevellist
.
push
({
dictLabel
:
item
.
dictLabel
,
dictValue
:
item
.
dictLabel
})
})
this
.
creditLevellist
.
push
({
dictLabel
:
item
.
dictLabel
,
dictValue
:
item
.
dictLabel
});
})
;
}
},
sq1
(
item
,
sq
)
{
this
.
$nextTick
(()
=>
{
item
.
sq1
=
sq
this
.
keys
++
;
})
sq1
(
item
,
sq
)
{
this
.
$nextTick
(()
=>
{
item
.
sq1
=
sq
;
this
.
keys
++
;
})
;
},
sq2
(
item
,
sq
)
{
this
.
$nextTick
(()
=>
{
item
.
sq2
=
sq
this
.
keys
++
;
})
sq2
(
item
,
sq
)
{
this
.
$nextTick
(()
=>
{
item
.
sq2
=
sq
;
this
.
keys
++
;
})
;
},
handleALL
(
event
){
handleALL
(
event
)
{
var
one
=
document
.
getElementById
(
"box"
);
if
(
one
)
{
if
(
!
one
.
contains
(
event
.
target
))
{
this
.
showlist
=
false
if
(
one
)
{
if
(
!
one
.
contains
(
event
.
target
))
{
this
.
showlist
=
false
;
}
}
},
toct
(){
this
.
dialogVisible
=
false
this
.
$router
.
push
({
path
:
'/macro/urban'
})
toct
()
{
this
.
dialogVisible
=
false
;
this
.
$router
.
push
({
path
:
'/macro/urban'
});
},
getDictType
(){
getDictType
()
{
//获取客户等级
getDictType
(
'customer_level_type'
).
then
(
result
=>
{
this
.
customerLevel
=
result
.
code
==
200
?
result
.
data
:[]
})
getDictType
(
'customer_level_type'
).
then
(
result
=>
{
this
.
customerLevel
=
result
.
code
==
200
?
result
.
data
:
[];
})
;
},
pldrs
(){
this
.
pldr
=
true
pldrs
()
{
this
.
pldr
=
true
;
},
cancelimport
(){
this
.
pldr
=
false
cancelimport
()
{
this
.
pldr
=
false
;
},
//获取客户列表
getCustomerList
(){
let
params
=
this
.
searchParam
if
(
this
.
address
.
length
>
0
)
{
getCustomerList
()
{
let
params
=
this
.
searchParam
;
if
(
this
.
address
.
length
>
0
)
{
let
arr
=
this
.
$refs
.
address1
.
getCheckedNodes
();
let
provinceCode
=
[],
cityCode
=
[],
countyCode
=
[];
let
provinceCode
=
[],
cityCode
=
[],
countyCode
=
[];
for
(
var
i
in
arr
)
{
if
(
arr
[
i
].
parent
)
{
if
(
!
arr
[
i
].
parent
.
checked
)
{
...
...
@@ -500,197 +441,175 @@
!
arr
[
i
].
hasChildren
&&
countyCode
.
push
(
arr
[
i
].
value
);
}
}
else
{
provinceCode
.
push
(
arr
[
i
].
value
)
provinceCode
.
push
(
arr
[
i
].
value
)
;
}
}
if
(
provinceCode
.
length
>
0
)
{
params
.
provinceIds
=
provinceCode
if
(
provinceCode
.
length
>
0
)
{
params
.
provinceIds
=
provinceCode
;
}
if
(
cityCode
.
length
>
0
)
{
params
.
cityIds
=
cityCode
if
(
cityCode
.
length
>
0
)
{
params
.
cityIds
=
cityCode
;
}
if
(
countyCode
.
length
>
0
)
{
params
.
districtIds
=
countyCode
if
(
countyCode
.
length
>
0
)
{
params
.
districtIds
=
countyCode
;
}
}
else
{
if
(
params
.
provinceIds
)
{
delete
params
.
provinceIds
}
else
{
if
(
params
.
provinceIds
)
{
delete
params
.
provinceIds
;
}
if
(
params
.
cityIds
)
{
delete
params
.
cityIds
if
(
params
.
cityIds
)
{
delete
params
.
cityIds
;
}
if
(
params
.
districtIds
)
{
delete
params
.
districtIds
if
(
params
.
districtIds
)
{
delete
params
.
districtIds
;
}
}
getCustomerList
(
params
).
then
(
result
=>
{
this
.
isSkeleton
=
false
this
.
tableData
=
result
this
.
tableData
.
rows
.
forEach
(
item
=>
{
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
)
{
item
.
mainBusiness1
=
item
.
mainBusiness
.
substring
(
0
,
81
)
item
.
sq1
=
true
}
else
{
item
.
sq1
=
false
}
if
(
item
.
companyAttribute
!=
""
&&
item
.
companyAttribute
!=
null
&&
item
.
companyAttribute
.
length
>
84
)
{
item
.
companyAttribute1
=
item
.
companyAttribute
.
substring
(
0
,
81
)
item
.
sq2
=
true
}
else
{
item
.
sq2
=
false
getCustomerList
(
params
).
then
(
result
=>
{
this
.
isSkeleton
=
false
;
this
.
tableData
=
result
;
this
.
tableData
.
rows
.
forEach
(
item
=>
{
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
)
{
item
.
mainBusiness1
=
item
.
mainBusiness
.
substring
(
0
,
81
);
item
.
sq1
=
true
;
}
else
{
item
.
sq1
=
false
;
}
if
(
item
.
companyAttribute
!=
""
&&
item
.
companyAttribute
!=
null
&&
item
.
companyAttribute
.
length
>
84
)
{
item
.
companyAttribute1
=
item
.
companyAttribute
.
substring
(
0
,
81
);
item
.
sq2
=
true
;
}
else
{
item
.
sq2
=
false
;
}
// console.log(item)
})
})
});
})
;
},
//跳转到客户详情
toDetail
(
row
,
type
)
{
let
customerId
=
row
.
customerId
let
companyId
=
row
.
companyId
let
path
=
type
toDetail
(
row
,
type
)
{
let
customerId
=
row
.
customerId
;
let
companyId
=
row
.
companyId
;
let
path
=
type
;
// if(type == "" && companyId == null){
// path = 'business'
// }
this
.
$router
.
push
({
path
:
'/enterprise/'
+
encodeStr
(
companyId
),
query
:{
customerId
:
customerId
,
path
:
path
}})
},
searchFocus
(
event
)
{
const
{
target
}
=
event
;
if
(
target
?.
value
?.
length
)
{
this
.
showClearIcon
=
true
}
},
searchBlur
(
event
)
{
this
.
showClearIcon
=
false
},
searchInput
(
value
)
{
if
(
value
?.
length
)
{
this
.
showClearIcon
=
true
}
this
.
$router
.
push
({
path
:
'/enterprise/'
+
encodeStr
(
companyId
),
query
:
{
customerId
:
customerId
,
path
:
path
}
});
},
searchHover
(
event
)
{
this
.
hover
=
true
},
searchUnHover
(
event
,
value
)
{
if
(
!
value
)
{
this
.
hover
=
false
}
},
handleSearch
(){
handleSearch
()
{
this
.
$nextTick
(()
=>
{
this
.
searchParam
.
pageNum
=
1
this
.
getCustomerList
()
})
this
.
searchParam
.
pageNum
=
1
;
this
.
getCustomerList
()
;
})
;
},
clearname
(
value
){
if
(
value
==
""
)
{
this
.
handleCurrentChange
(
1
)
clearname
(
value
)
{
if
(
value
==
""
)
{
this
.
handleCurrentChange
(
1
)
;
}
},
//翻页
handleCurrentChange
(
val
)
{
this
.
isSkeleton
=
true
this
.
pldr
=
false
this
.
isSkeleton
=
true
;
this
.
pldr
=
false
;
// this.isNew = false
this
.
searchParam
.
pageNum
=
val
this
.
getCustomerList
()
this
.
searchParam
.
pageNum
=
val
;
this
.
getCustomerList
()
;
},
//打开新建窗口
opennew
(){
this
.
dialogVisible
=
true
opennew
()
{
this
.
dialogVisible
=
true
;
},
getAddr
(
obj
){
if
(
obj
.
length
==
0
)
{
this
.
queryParam
.
provinceId
=
''
this
.
queryParam
.
cityId
=
''
this
.
queryParam
.
districtId
=
''
return
false
getAddr
(
obj
)
{
if
(
obj
.
length
==
0
)
{
this
.
queryParam
.
provinceId
=
''
;
this
.
queryParam
.
cityId
=
''
;
this
.
queryParam
.
districtId
=
''
;
return
false
;
}
let
labelString
=
this
.
$refs
.
address
.
getCheckedNodes
()[
0
].
pathLabels
.
join
(
"-"
);
this
.
queryParam
.
registerAddress
=
labelString
this
.
queryParam
.
provinceId
=
obj
[
0
]
this
.
queryParam
.
cityId
=
obj
.
length
>=
1
?
obj
[
1
]:
''
this
.
queryParam
.
districtId
=
obj
.
length
>=
2
?
obj
[
2
]:
''
this
.
queryParam
.
registerAddress
=
labelString
;
this
.
queryParam
.
provinceId
=
obj
[
0
]
;
this
.
queryParam
.
cityId
=
obj
.
length
>=
1
?
obj
[
1
]
:
''
;
this
.
queryParam
.
districtId
=
obj
.
length
>=
2
?
obj
[
2
]
:
''
;
},
//获取建设库客户
getCompany
(
value
){
this
.
queryParam
.
companyId
=
null
if
(
value
==
1
)
{
this
.
companData
=
[]
this
.
companypage
=
1
getCompany
(
value
)
{
this
.
queryParam
.
companyId
=
null
;
if
(
value
==
1
)
{
this
.
companData
=
[]
;
this
.
companypage
=
1
;
}
if
(
this
.
queryParam
.
companyName
.
length
>=
2
)
{
if
(
this
.
queryParam
.
companyName
.
length
>=
2
)
{
let
param
=
{
keyword
:
this
.
queryParam
.
companyName
,
page
:{
limit
:
20
,
page
:
this
.
companypage
}
}
getEnterprise
(
JSON
.
stringify
(
param
)).
then
(
result
=>
{
if
(
result
.
code
!=
200
)
{
return
false
}
if
(
result
.
data
.
list
!=
null
&&
result
.
data
.
list
.
length
>
0
)
{
this
.
isscroll
=
true
if
(
this
.
companData
.
length
===
0
)
{
this
.
companData
=
result
.
data
.
list
keyword
:
this
.
queryParam
.
companyName
,
page
:
{
limit
:
20
,
page
:
this
.
companypage
}
}
;
getEnterprise
(
JSON
.
stringify
(
param
)).
then
(
result
=>
{
if
(
result
.
code
!=
200
)
{
return
false
;
}
if
(
result
.
data
.
list
!=
null
&&
result
.
data
.
list
.
length
>
0
)
{
this
.
isscroll
=
true
;
if
(
this
.
companData
.
length
===
0
)
{
this
.
companData
=
result
.
data
.
list
;
}
else
{
let
arr2
=
result
.
data
.
list
let
arr2
=
result
.
data
.
list
;
arr2
.
unshift
(
2
,
0
);
Array
.
prototype
.
splice
.
apply
(
this
.
companData
,
arr2
);
}
if
(
this
.
companData
.
length
===
0
)
{
this
.
showlist
=
false
}
else
{
this
.
showlist
=
true
if
(
this
.
companData
.
length
===
0
)
{
this
.
showlist
=
false
;
}
else
{
this
.
showlist
=
true
;
}
this
.
companypage
+=
1
}
else
{
this
.
isscroll
=
false
this
.
companypage
+=
1
;
}
else
{
this
.
isscroll
=
false
;
}
})
})
;
}
},
load
(){
if
(
this
.
isscroll
)
{
this
.
getCompany
(
2
)
load
()
{
if
(
this
.
isscroll
)
{
this
.
getCompany
(
2
)
;
}
},
selCompany
(
item
){
this
.
queryParam
.
companyId
=
item
.
jskEid
this
.
queryParam
.
companyName
=
item
.
name
.
replace
(
/<
[^
>
]
+>/g
,
''
)
this
.
queryParam
.
legalPerson
=
item
.
legalPerson
let
registeredCapitalStr
=
""
if
(
item
.
registeredCapitalStr
==
"0"
||
item
.
registeredCapitalStr
==
0
)
{
registeredCapitalStr
=
''
}
else
{
registeredCapitalStr
=
item
.
registeredCapitalStr
}
this
.
queryParam
.
registerCapital
=
registeredCapitalStr
this
.
queryParam
.
creditCode
=
item
.
creditCode
this
.
queryParam
.
provinceId
=
item
.
provinceId
this
.
queryParam
.
cityId
=
item
.
cityId
this
.
queryParam
.
districtId
=
item
.
cityId
selCompany
(
item
)
{
this
.
queryParam
.
companyId
=
item
.
jskEid
;
this
.
queryParam
.
companyName
=
item
.
name
.
replace
(
/<
[^
>
]
+>/g
,
''
)
;
this
.
queryParam
.
legalPerson
=
item
.
legalPerson
;
let
registeredCapitalStr
=
""
;
if
(
item
.
registeredCapitalStr
==
"0"
||
item
.
registeredCapitalStr
==
0
)
{
registeredCapitalStr
=
''
;
}
else
{
registeredCapitalStr
=
item
.
registeredCapitalStr
;
}
this
.
queryParam
.
registerCapital
=
registeredCapitalStr
;
this
.
queryParam
.
creditCode
=
item
.
creditCode
;
this
.
queryParam
.
provinceId
=
item
.
provinceId
;
this
.
queryParam
.
cityId
=
item
.
cityId
;
this
.
queryParam
.
districtId
=
item
.
cityId
;
let
list
=
[]
if
(
item
.
provinceId
!=
null
&&
item
.
provinceId
!=
""
)
list
.
push
(
item
.
provinceId
)
if
(
item
.
cityId
!=
null
&&
item
.
cityId
!=
""
)
list
.
push
(
item
.
cityId
)
if
(
item
.
districtId
!=
null
&&
item
.
districtId
!=
""
)
list
.
push
(
item
.
districtId
)
this
.
$nextTick
(()
=>
{
this
.
queryParam
.
address
=
list
let
_this
=
this
setTimeout
(
function
()
{
if
(
_this
.
$refs
.
address
)
{
_this
.
queryParam
.
registerAddress
=
_this
.
$refs
.
address
.
getCheckedNodes
()[
0
].
pathLabels
.
join
(
"-"
)
}
},
1000
)
})
this
.
showlist
=
false
let
list
=
[]
;
if
(
item
.
provinceId
!=
null
&&
item
.
provinceId
!=
""
)
list
.
push
(
item
.
provinceId
)
;
if
(
item
.
cityId
!=
null
&&
item
.
cityId
!=
""
)
list
.
push
(
item
.
cityId
)
;
if
(
item
.
districtId
!=
null
&&
item
.
districtId
!=
""
)
list
.
push
(
item
.
districtId
)
;
this
.
$nextTick
(()
=>
{
this
.
queryParam
.
address
=
list
;
let
_this
=
this
;
setTimeout
(
function
()
{
if
(
_this
.
$refs
.
address
)
{
_this
.
queryParam
.
registerAddress
=
_this
.
$refs
.
address
.
getCheckedNodes
()[
0
].
pathLabels
.
join
(
"-"
)
;
}
},
1000
);
})
;
this
.
showlist
=
false
;
},
//添加客户
submitForm
(
formName
)
{
...
...
@@ -701,36 +620,36 @@
// }
this
.
$refs
[
formName
].
validate
((
valid
)
=>
{
if
(
valid
)
{
addCustomer
(
this
.
queryParam
).
then
(
result
=>
{
if
(
result
.
code
==
200
)
{
this
.
$message
.
success
(
'添加成功!'
)
this
.
dialogVisible
=
false
this
.
handleCurrentChange
(
1
)
this
.
resetForm
(
'ruleForm'
)
}
else
{
this
.
$message
.
error
(
result
.
msg
)
}
})
addCustomer
(
this
.
queryParam
).
then
(
result
=>
{
if
(
result
.
code
==
200
)
{
this
.
$message
.
success
(
'添加成功!'
)
;
this
.
dialogVisible
=
false
;
this
.
handleCurrentChange
(
1
)
;
this
.
resetForm
(
'ruleForm'
)
;
}
else
{
this
.
$message
.
error
(
result
.
msg
)
;
}
})
;
}
else
{
}
});
},
resetForm
(
formName
)
{
this
.
queryParam
=
{
companyId
:
''
,
//jsk企业id
companyName
:
''
,
//客户名称(企业名称
customerLevel
:
''
,
//客户等级
legalPerson
:
''
,
//法定代表人
registerCapital
:
''
,
//注册资本
registerAddress
:
''
,
//企业注册地址
creditCode
:
''
,
//社会统一信用代码
address
:
''
,
//选择的地址
provinceId
:
''
,
cityId
:
''
,
districtId
:
''
,
companyId
:
''
,
//jsk企业id
companyName
:
''
,
//客户名称(企业名称
customerLevel
:
''
,
//客户等级
legalPerson
:
''
,
//法定代表人
registerCapital
:
''
,
//注册资本
registerAddress
:
''
,
//企业注册地址
creditCode
:
''
,
//社会统一信用代码
address
:
''
,
//选择的地址
provinceId
:
''
,
cityId
:
''
,
districtId
:
''
,
},
this
.
dialogVisible
=
false
this
.
showlist
=
false
this
.
dialogVisible
=
false
;
this
.
showlist
=
false
;
},
//地区
...
...
@@ -746,26 +665,26 @@
// })
// console.log(prvinceTree)
this
.
addressList
=
prvinceTree
;
this
.
getadd
(
this
.
addressList
)
this
.
getadd
(
this
.
addressList
)
;
},
//处理注册地数据
getadd
(
row
)
{
this
.
addrcallback
(
row
,
this
.
getadd
)
this
.
addrcallback
(
row
,
this
.
getadd
);
},
addrcallback
(
row
,
callback
)
{
if
(
row
)
{
addrcallback
(
row
,
callback
)
{
if
(
row
)
{
row
.
forEach
(
item
=>
{
item
.
value
=
item
.
id
callback
&&
callback
(
item
.
children
)
})
item
.
value
=
item
.
id
;
callback
&&
callback
(
item
.
children
);
})
;
}
},
//输入数字
number
(
value
){
if
(
value
==
''
)
this
.
queryParam
.
registerCapital
=
value
number
(
value
)
{
if
(
value
==
''
)
this
.
queryParam
.
registerCapital
=
value
;
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
)
{
multiple
?
this
.
multipleAdaptiveHandle
(
uid
)
:
this
.
iptAdaptiveHandle
(
uid
);
...
...
@@ -841,10 +760,10 @@
textContainer
.
textContent
=
iptChild
.
value
?
iptChild
.
value
:
iptChild
.
getAttribute
(
"placeholder"
);
document
.
body
.
append
(
textContainer
);
// let containerWidth = textContainer.offsetWidth + 12 + 8;
let
containerWidth
=
0
if
(
iptChild
.
value
)
{
let
containerWidth
=
0
;
if
(
iptChild
.
value
)
{
containerWidth
=
70
;
}
else
{
}
else
{
containerWidth
=
130
;
}
...
...
@@ -864,31 +783,62 @@
</
script
>
<
style
lang=
"scss"
scoped
>
.app-container
{
height
:
calc
(
100vh
-
134px
)
.custom-list-container
{
width
:
100%
;
height
:
100%
;
padding
:
24px
;
box-sizing
:
border-box
;
.miantitle
{
padding
:
12px
0px
;
padding-top
:
0px
;
margin
:
0px
;
}
::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
{
}
}
}
.box-card
{
@import
"@/assets/styles/search-common.scss"
;
padding-top
:
16px
;
width
:
100%
;
height
:
100%
;
.table_search
{
::v-deep
.el-form
{
.el-input
{
.table_search
{
::v-deep
.el-form
{
.el-input
{
line-height
:
32px
;
.el-input__inner
{
.el-input__inner
{
height
:
32px
;
line-height
:
32px
;
border-radius
:
4px
;
border
:
0
;
}
}
.is-focus
{
.el-input__inner
{
background
:
#
F4F6F
9
;
.is-focus
{
.el-input__inner
{
background
:
#
f4f6f
9
;
}
}
}
::v-deep
.normal-search-container
{
display
:
flex
;
...
...
@@ -963,90 +913,98 @@
}
}
}
}
.box
{
.box
{
position
:
relative
;
>
span
{
>
span
{
position
:
absolute
;
right
:
10px
;
bottom
:
0
;
color
:
#0081
FF
;
color
:
#0081
ff
;
cursor
:
pointer
;
&
:hover
{
color
:
#006
AD
1
;
&
:hover
{
color
:
#006
ad
1
;
}
}
}
.dc
{
.dc
{
font-size
:
12px
;
color
:
#3D3D3D
;
color
:
#3d3d3d
;
font-weight
:
400
;
position
:
relative
;
&
:
:
after
{
content
:
' '
;
&
:
:
after
{
content
:
" "
;
width
:
2px
;
height
:
2px
;
background
:
rgba
(
35
,
35
,
35
,
0
.4
);
background
:
rgba
(
35
,
35
,
35
,
0
.4
);
border-radius
:
50%
;
position
:
absolute
;
top
:
16px
;
left
:
14px
;
}
>
div
{
>
div
{
display
:
inline-block
;
margin-left
:
20px
;
}
}
.img.img1
{
}
.img.img1
{
margin-right
:
2px
;
background
:
url('../../../../src/assets/images/project/add_2.png')
no-repeat
center
center
;
background
:
url("../../../../src/assets/images/project/add_2.png")
no-repeat
center
center
;
background-size
:
100%
;
}
.w88
{
}
.w88
{
width
:
88px
;
}
.tables
{
}
.tables
{
position
:
relative
;
min-height
:
calc
(
100vh
-
134px
);
/*overflow: auto;*/
.empty
{
.empty
{
position
:
absolute
;
top
:
50%
;
left
:
50%
;
transform
:
translate
(
-50%
,
-
50%
);
.btn
{
transform
:
translate
(
-50%
,
-50%
);
.btn
{
margin-right
:
8px
;
margin-top
:
16px
;
}
}
.table_search
{
::v-deep
.el-cascader
{
.table_search
{
::v-deep
.el-cascader
{
height
:
32px
;
line-height
:
32px
;
.el-input
{
input
{
.el-input
{
input
{
height
:
32px
!
important
;
}
}
.el-cascader__tags
{
.el-cascader__tags
{
flex-wrap
:
inherit
;
margin-top
:
1px
;
.el-tag
{
.el-tag
{
/*max-width: 120px;*/
}
}
.el-input__suffix
{
.el-input__suffix
{
top
:
1px
;
}
}
.normal-search-container
{
margin-left
:
1
2px
;
::v-deep
.normal-search-container
{
height
:
3
2px
;
display
:
flex
;
align-items
:
center
;
cursor
:
pointer
;
height
:
34px
;
&
.is-hover-search
{
width
:
238px
;
background
:
#f4f6f9
;
border-radius
:
4px
4px
4px
4px
;
&
>
img
{
cursor
:
unset
;
}
}
&
:hover
{
&
>
span
{
color
:
#0081ff
;
...
...
@@ -1057,15 +1015,51 @@
width
:
16px
;
height
:
16px
;
margin-left
:
12px
;
cursor
:
pointer
;
}
&
>
span
{
color
:
#232323
;
color
:
rgba
(
35
,
35
,
35
,
0
.4
);
color
:
rgba
(
35
,
35
,
35
,
0
.8
);
font-weight
:
400
;
margin-left
:
8px
;
line-height
:
22px
;
font-size
:
14px
;
cursor
:
pointer
;
}
.el-input
{
&
>
.el-input__inner
{
border
:
none
;
height
:
32px
;
line-height
:
32px
;
caret-color
:
#0081ff
;
color
:
rgba
(
35
,
35
,
35
,
0
.8
);
font-size
:
14px
;
background
:
#f4f6f9
;
padding-right
:
26px
;
padding-left
:
8px
;
&
:
:
placeholder
{
color
:
rgba
(
35
,
35
,
35
,
0
.4
)
!
important
;
font-size
:
14px
!
important
;
line-height
:
32px
;
}
}
.el-input__suffix
{
right
:
12px
;
display
:
flex
;
align-items
:
center
;
.el-input__suffix-inner
{
height
:
14px
;
width
:
14px
;
}
img
{
cursor
:
pointer
;
vertical-align
:
unset
;
}
}
}
}
.cooperate-name
{
...
...
@@ -1111,52 +1105,49 @@
}
}
}
}
.ps1
{
}
.ps1
{
display
:
flex
;
justify-content
:
space-between
;
.ps2
{
.ps2
{
width
:
350px
;
}
.ps3
{
.ps3
{
width
:
60px
;
display
:
flex
;
justify-content
:
right
;
>
div
{
>
div
{
margin-left
:
12px
;
>
img
{
>
img
{
float
:
right
;
margin
:
3px
0
0
4px
;
width
:
14px
;
}
.i
{
.i
{
display
:
inline-block
;
}
.o
{
.o
{
display
:
none
;
}
&
:hover
{
&
:hover
{
cursor
:
pointer
;
.i
{
.i
{
display
:
none
;
}
.o
{
.o
{
display
:
inline-block
;
}
}
}
}
}
.popbot
{
.wordprimary
{
}
.popbot
{
.wordprimary
{
display
:
inline
;
padding-right
:
26px
;
}
}
.app-container
{
height
:
auto
;
}
.searchInput
{
}
.searchInput
{
width
:
240px
;
}
}
</
style
>
dsk-operate-ui/src/views/detail.vue
View file @
b4f33b30
...
...
@@ -37,7 +37,7 @@ export default {
this
.
domain
=
'https://plug.jiansheku.com'
}
else
{
this
.
domain
=
'https://pre-plug.jiansheku.com'
this
.
domain
=
'http://192.168.60.210:3400'
//
this.domain='http://192.168.60.210:3400'
}
this
.
gettokens
();
},
...
...
dsk-operate-ui/src/views/detail/party-a/component/HeadFormNew.vue
View file @
b4f33b30
...
...
@@ -35,11 +35,6 @@
</transition>
</
template
>
</el-input>
<!-- <div class="cooperate-name enterprise-search-container" :id="'focus'+i">
<el-input clearable @clear="changeSelect" @focus="clickFocus('focus'+i)" @blur="clickFocus('focus'+i)" v-model="form.value"
:placeholder="form.placeholder" :style="form.width?'width:'+form.width+'px':'width:180px'"></el-input>
<span @click="changeSelect">搜索</span>
</div> -->
</div>
</template>
<!-- 多选 -->
...
...
dsk-operate-ui/src/views/enterpriseManagement/index.vue
View file @
b4f33b30
...
...
@@ -221,7 +221,7 @@
<p>
温馨提示:此操作可能会影响正在使用的用户,建议合理安排同步时间
</p>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"dialogVisible1 = false"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"handleConfirm()"
>
同步
</el-button>
<el-button
type=
"primary"
@
click=
"handleConfirm()"
:loading=
"state"
>
同步
</el-button>
</div>
</el-dialog>
</div>
...
...
@@ -305,7 +305,8 @@
},
//企业方案列表
packageList
:[],
syncItem
:{}
syncItem
:{},
state
:
false
,
};
},
created
()
{
...
...
@@ -390,8 +391,10 @@
/** 同步按钮操作 */
handleConfirm
()
{
let
_this
=
this
this
.
state
=
true
syncTenantPackage
({
tenantId
:
this
.
syncItem
.
tenantId
,
packageId
:
this
.
syncItem
.
packageId
}).
then
(
res
=>
{
if
(
res
.
code
===
200
){
this
.
state
=
false
_this
.
$message
.
success
(
res
.
msg
);
this
.
dialogVisible1
=
false
;
}
...
...
dsk-operate-ui/src/views/market/index.vue
View file @
b4f33b30
...
...
@@ -11,9 +11,9 @@
<
script
>
import
{
steerScroll
}
from
'@/assets/js/jskplug'
;
import
{
dskAccessToken
}
from
'@/api/common'
;
import
{
encodeStr
}
from
"@/assets/js/common"
import
{
encodeStr
}
from
"@/assets/js/common"
;
import
MaxPageSizeTip
from
"@/views/components/MaxPageSizeTip.vue"
;
import
{
getUipIdByCid
}
from
'@/api/macro/macro'
import
{
getUipIdByCid
}
from
'@/api/macro/macro'
;
export
default
{
name
:
'Enterprise'
,
components
:
{
...
...
@@ -42,13 +42,13 @@ export default {
if
(
window
.
location
.
host
===
'http://szh.jiansheku.com'
||
window
.
location
.
host
===
'szh.jiansheku.com'
)
{
this
.
domain
=
'https://plug.jiansheku.com'
;
}
else
{
this
.
domain
=
'https://pre-plug.jiansheku.com'
this
.
domain
=
'https://pre-plug.jiansheku.com'
;
// this.domain = 'http://192.168.60.8:3400';
this
.
domain
=
'http://192.168.60.210:3400'
;
//
this.domain = 'http://192.168.60.210:3400';
}
this
.
gettokens
();
this
.
iframeObserver
();
let
that
=
this
let
that
=
this
;
window
.
addEventListener
(
"message"
,
this
.
pagecapListener
,
{
passive
:
true
});
window
.
addEventListener
(
'message'
,
this
.
linkListener
,
false
);
},
...
...
@@ -66,26 +66,26 @@ export default {
this
.
iframeIns
.
contentWindow
.
postMessage
(
"removeHtmlLayoutStyle"
,
{
targetOrigin
:
this
.
domain
,
});
},
methods
:
{
linkListener
(
event
){
let
{
data
}
=
event
if
(
data
.
id
)
{
getUipIdByCid
([
data
.
id
]).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
if
(
res
.
data
&&
res
.
data
.
length
>
0
&&
res
.
data
[
0
].
uipId
)
{
this
.
$router
.
push
({
path
:
'/enterprise/'
+
this
.
encodeStr
(
data
.
id
)})
}
else
{
this
.
$tab
.
openPage
(
data
.
title
,
'/company/'
+
this
.
encodeStr
(
data
.
id
))
linkListener
(
event
)
{
let
{
data
}
=
event
;
if
(
data
.
id
)
{
getUipIdByCid
([
data
.
id
]).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
if
(
res
.
data
&&
res
.
data
.
length
>
0
&&
res
.
data
[
0
].
uipId
)
{
this
.
$router
.
push
({
path
:
'/enterprise/'
+
this
.
encodeStr
(
data
.
id
)
});
}
else
{
this
.
$tab
.
openPage
(
data
.
title
,
'/company/'
+
this
.
encodeStr
(
data
.
id
));
}
}
}).
catch
(
error
=>
{
}).
catch
(
error
=>
{
});
}
else
{
if
(
data
.
url
)
{
}
else
{
if
(
data
.
url
)
{
this
.
$tab
.
openPage
(
data
.
title
,
data
.
url
).
then
(()
=>
{
// 执行结束的逻辑
})
})
;
}
}
},
...
...
@@ -151,9 +151,13 @@ export default {
<
style
lang=
"scss"
scoped
>
.market-container
{
width
:
100%
;
height
:
100%
;
padding
:
16px
24px
;
padding-right
:
15px
;
box-sizing
:
border-box
;
position
:
absolute
;
left
:
0
;
top
:
0
;
.market-iframe
{
width
:
100%
;
...
...
dsk-operate-ui/src/views/project/projectList/component/BatchImportCom.vue
0 → 100644
View file @
b4f33b30
<
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
>
dsk-operate-ui/src/views/project/projectList/component/BidOpeningRecord.vue
View file @
b4f33b30
...
...
@@ -3,7 +3,7 @@
<div
class=
"bid-opening-record-inner"
>
<!-- 查询功能 -->
<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=
"search-btn add"
@
click
.
stop=
"addBidOpeningRecord"
>
<img
src=
"@/assets/images/project/project-bid-opening-record-add.svg"
alt=
""
>
...
...
@@ -25,7 +25,21 @@
<div
class=
"table-data-list-container"
v-else-if=
"!isLoadingData || !tableDataList.length"
>
<table-list-com
:formColum=
"formColum"
:queryParams=
"queryParams"
:tableData=
"tableDataList"
:tableDataTotal=
"tableDataTotal"
: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"
>
<div
class=
"action-field-bar-container"
>
<span
class=
"action-field-bar-btn modify"
@
click
.
stop=
"modifyBidOpeningRecord(scope.row)"
>
编辑
</span>
...
...
@@ -41,23 +55,32 @@
: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>
</template>
<
script
>
import
skeleton
from
'./skeleton'
;
import
TableListCom
from
"@/components/TableListCom"
;
import
BatchImport
Reset
from
"./batchImportReset
"
;
import
BatchImport
Com
from
"./BatchImportCom
"
;
import
{
getBidOpeningRecordListApi
,
addBidOpeningRecordApi
,
modifyBidOpeningRecordApi
,
removeBidOpeningRecordApi
}
from
"@/api/project/project"
;
import
AddBidOpeningRecord
from
"./AddBidOpeningRecord.vue"
;
import
{
getToken
}
from
"@/utils/auth"
;
export
default
{
components
:
{
skeleton
,
TableListCom
,
AddBidOpeningRecord
,
BatchImport
Reset
},
components
:
{
skeleton
,
TableListCom
,
AddBidOpeningRecord
,
BatchImport
Com
},
name
:
"bidOpeningRecord"
,
data
()
{
// 必填字符串长度验证
function
tendererStrLengthValidator
(
target
)
{
return
function
(
rule
,
value
,
callback
)
{
if
(
!
value
&&
!
value
?.
toString
()?.
trim
())
{
return
callback
(
new
Error
(
`请输入
${
target
}
`
));
}
return
callback
();
};
};
function
requiredStrLengthValidator
(
target
)
{
return
function
(
rule
,
value
,
callback
)
{
if
(
!
value
||
!
value
?.
toString
()?.
trim
())
{
if
(
value
&&
!
value
?.
toString
()?.
trim
())
{
return
callback
(
new
Error
(
`请输入
${
target
}
`
));
}
return
callback
();
...
...
@@ -86,7 +109,7 @@ export default {
// 金额验证
const
amountReg
=
/^
(?!
0
\d)\d
+
(\.\d
+
)?
$/
;
function
amountValidator
(
rule
,
value
,
callback
)
{
if
((
!
value
&&
value
!=
"0"
)
||
!
value
?.
toString
()?.
trim
())
{
if
((
value
&&
value
!=
"0"
)
&&
!
value
?.
toString
()?.
trim
())
{
return
callback
(
new
Error
(
`请输入投标金额`
));
}
if
(
value
&&
!
amountReg
.
test
(
value
))
{
...
...
@@ -100,12 +123,12 @@ export default {
isLoadingData
:
false
,
// 列表列数据
formColum
:
[
{
label
:
'投标人'
,
prop
:
'tenderer'
,
w
idth
:
"468px"
},
{
label
:
'企业性质'
,
prop
:
'tendererNature'
,
w
idth
:
"96px"
},
{
label
:
'项目经理'
,
prop
:
'businessManager'
,
w
idth
:
"115px"
},
{
label
:
'联系方式'
,
prop
:
'contact'
,
width
:
"133px"
},
{
label
:
'投标金额(万元)'
,
prop
:
'tenderAmount'
,
width
:
"168px"
,
s
ortable
:
"custom
"
},
{
label
:
'操作'
,
prop
:
'action-field-bar'
,
minW
idth
:
"151px"
,
fixed
:
"right"
},
{
label
:
'投标人'
,
prop
:
'tenderer'
,
minW
idth
:
"468px"
},
{
label
:
'企业性质'
,
prop
:
'tendererNature'
,
minW
idth
:
"96px"
},
{
label
:
'项目经理'
,
prop
:
'businessManager'
,
minW
idth
:
"115px"
},
{
label
:
'联系方式'
,
prop
:
'contact'
,
width
:
"133px"
,
},
{
label
:
'投标金额(万元)'
,
prop
:
'tenderAmount'
,
width
:
"168px"
,
s
lot
:
true
,
slotHeader
:
true
,
slotName
:
"tenderAmountHeader
"
},
{
label
:
'操作'
,
prop
:
'action-field-bar'
,
w
idth
:
"151px"
,
fixed
:
"right"
},
],
needSelection
:
{
flag
:
true
,
...
...
@@ -132,17 +155,34 @@ export default {
tenderAmount
:
""
},
formRules
:
{
tenderer
:
[{
required
:
true
,
trigger
:
"blur"
,
validator
:
required
StrLengthValidator
(
"投标人"
)
}],
tendererNature
:
[{
required
:
true
,
trigger
:
"blur"
,
validator
:
requiredStrLengthValidator
(
"企业性质"
)
}],
tenderer
:
[{
required
:
true
,
trigger
:
"blur"
,
validator
:
tenderer
StrLengthValidator
(
"投标人"
)
}],
tendererNature
:
[{
trigger
:
"blur"
,
validator
:
requiredStrLengthValidator
(
"企业性质"
)
}],
businessManager
:
[{
trigger
:
[
"change"
,
"blur"
],
validator
:
strLengthValidator
(
"项目经理"
)
}],
contact
:
[{
trigger
:
[
"blur"
],
validator
:
phoneNumberValidator
}],
tenderAmount
:
[{
required
:
true
,
trigger
:
[
"blur"
],
validator
:
amountValidator
}],
tenderAmount
:
[{
trigger
:
[
"blur"
],
validator
:
amountValidator
}],
},
selectionArray
:
[],
// 展示新增弹窗
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属性
...
...
@@ -218,9 +258,15 @@ export default {
// 验证通过提交数据
async
validatorSuccess
()
{
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
);
if
(
result
.
code
==
200
)
{
console
.
log
(
result
);
this
.
$message
.
success
(
`
${
this
.
formData
.
id
?
"修改成功!"
:
"新增成功!"
}
`
);
this
.
dialogClose
();
await
this
.
getTableList
();
}
...
...
@@ -241,18 +287,26 @@ export default {
},
// 批量删除
async
batchDeletion
(
id
)
{
try
{
if
(
!
this
.
selectionArray
?.
length
&&
!
id
)
return
;
this
.
$confirm
(
'此操作将会删除该数据, 是否继续?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(
async
()
=>
{
try
{
const
array
=
id
?
[{
id
}]
:
this
.
selectionArray
;
const
result
=
await
removeBidOpeningRecordApi
({
ids
:
(
array
.
map
(
item
=>
item
.
id
))
});
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
(()
=>
{
});
},
// 复选框选中
selectionChange
(
array
)
{
...
...
@@ -263,11 +317,11 @@ export default {
this
.
getTableList
(
pageNum
,
pageSize
,
orderByColumn
,
isAsc
);
},
// 列排序
sortChange
(
{
column
,
order
,
prop
}
)
{
sortChange
(
prop
,
order
)
{
this
.
queryParams
.
orderByColumn
=
prop
;
if
(
order
==
"asc
ending
"
)
{
if
(
order
==
"asc"
)
{
this
.
queryParams
.
isAsc
=
"asc"
;
}
else
if
(
order
==
"desc
ending
"
)
{
}
else
if
(
order
==
"desc"
)
{
this
.
queryParams
.
isAsc
=
"desc"
;
}
this
.
hasConditions
();
...
...
@@ -279,10 +333,10 @@ export default {
},
// 批量导入
batchImport
()
{
this
.
showImport
=
true
;
this
.
uploadOptions
.
open
=
true
;
},
cancelimport
()
{
this
.
showImport
=
false
;
this
.
uploadOptions
.
open
=
false
;
},
getdatas
()
{
this
.
getTableList
();
...
...
@@ -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
;
}
}
}
}
}
}
}
...
...
dsk-operate-ui/src/views/project/projectList/component/batchImportReset.vue
View file @
b4f33b30
...
...
@@ -106,8 +106,8 @@ export default {
},
onSuccess
(
res
,
file
,
fileList
)
{
if
(
res
.
code
==
200
)
{
this
.
successCount
=
res
.
successCount
;
let
str
=
'成功导入条数'
+
res
.
successCount
+
',失败条数'
+
res
.
errorCount
;
this
.
successCount
=
res
.
data
.
successCount
;
let
str
=
'成功导入条数'
+
res
.
data
.
successCount
+
',失败条数'
+
res
.
data
.
errorCount
;
this
.
messages
=
str
;
this
.
addsuccess
=
true
;
}
else
{
...
...
dsk-operate-ui/src/views/project/projectList/index.vue
View file @
b4f33b30
...
...
@@ -2,8 +2,12 @@
<div
class=
"app-container"
>
<el-card
class=
"box-card noborder"
>
<div
class=
"btns"
>
<div
class=
"btn btn_default h28"
@
click=
"addNew(true)"
><div
class=
"img img1"
></div>
新建项目商机
</div>
<div
class=
"btn btn_primary h28"
@
click=
"pldrs"
><div
class=
"img img2"
></div>
批量导入
</div>
<div
class=
"btn btn_default h28"
@
click=
"addNew(true)"
>
<div
class=
"img img1"
></div>
新建项目商机
</div>
<div
class=
"btn btn_primary h28"
@
click=
"pldrs"
>
<div
class=
"img img2"
></div>
批量导入
</div>
</div>
<el-tabs
v-model=
"activeName"
@
tab-click=
"handleClick"
class=
"tabpane w100"
>
<el-tab-pane
label=
"我参与的项目"
name=
"first"
></el-tab-pane>
...
...
@@ -23,9 +27,7 @@
项目地区
{{
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>
</span>
<el-cascader
class=
"cascader-region select-location"
ref=
"myCascader"
:props=
'props'
:options=
"addressList"
<el-cascader
class=
"cascader-region select-location"
ref=
"myCascader"
:props=
'props'
:options=
"addressList"
@
change=
"handleChange"
></el-cascader>
</div>
</div>
...
...
@@ -135,10 +137,12 @@
<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-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"
>
<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-con"
v-if=
"item.projectType"
>
<span>
项目类型:
</span>
...
...
@@ -154,7 +158,8 @@
</div>
<div
class=
"det-con"
v-if=
"item.ownerCompany "
>
<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>
</div>
</div>
...
...
@@ -174,13 +179,8 @@
</div>
</div>
<div
class=
"pagination-box"
v-if=
"total>searchParam.pageSize"
>
<el-pagination
background
:page-size=
"searchParam.pageSize"
:current-page=
"searchParam.pageNum"
@
current-change=
"handleCurrentChange"
layout=
"prev, pager, next"
:total=
"total"
>
<el-pagination
background
:page-size=
"searchParam.pageSize"
:current-page=
"searchParam.pageNum"
@
current-change=
"handleCurrentChange"
layout=
"prev, pager, next"
:total=
"total"
>
</el-pagination>
</div>
</el-card>
...
...
@@ -191,203 +191,207 @@
</
template
>
<
script
>
import
"@/assets/styles/project.scss"
import
"@/assets/styles/public.scss"
import
prvinceTree
from
'@/assets/json/provinceTree'
import
{
getProjectlist
,
delProject
}
from
'@/api/project/project'
import
{
getDictType
,}
from
'@/api/main'
import
addproject
from
'./component/addProject'
import
batchimport
from
'./component/batchImport'
import
skeleton
from
'./component/skeleton'
import
{
encodeStr
}
from
"@/assets/js/common.js"
import
"@/assets/styles/project.scss"
;
import
"@/assets/styles/public.scss"
;
import
prvinceTree
from
'@/assets/json/provinceTree'
;
import
{
getProjectlist
,
delProject
}
from
'@/api/project/project'
;
import
{
getDictType
,
}
from
'@/api/main'
;
import
addproject
from
'./component/addProject'
;
import
batchimport
from
'./component/batchImport'
;
import
skeleton
from
'./component/skeleton'
;
import
{
encodeStr
}
from
"@/assets/js/common.js"
;
export
default
{
name
:
'ProjectList'
,
components
:
{
addproject
,
batchimport
,
skeleton
},
components
:
{
addproject
,
batchimport
,
skeleton
},
data
()
{
return
{
encodeStr
,
types
:
'project'
,
props
:
{
multiple
:
true
},
activeName
:
'first'
,
projectStage
:[],
//项目阶段
isshow
:
false
,
//新增商机
pldr
:
false
,
//批量导入
types
:
'project'
,
props
:
{
multiple
:
true
},
activeName
:
'first'
,
projectStage
:
[],
//项目阶段
isshow
:
false
,
//新增商机
pldr
:
false
,
//批量导入
//项目地区
addressList
:[],
addressList
:
[],
addressType
:
[],
// 查询参数
minAmount
:
''
,
//投资估算最小值
maxAmount
:
''
,
//投资估算最大值
minAmount
:
''
,
//投资估算最小值
maxAmount
:
''
,
//投资估算最大值
searchParam
:
{
isPrivate
:
1
,
//0 公司 1 个人
projectName
:
''
,
//项目名称
ownerCompany
:
''
,
//业主单位
projectType
:
''
,
//项目类型
projectStage
:
''
,
//项目阶段
minAmount
:
''
,
//投资估算最小值
maxAmount
:
''
,
//投资估算最大值
Amount
:
''
,
//投资估算
isPrivate
:
1
,
//0 公司 1 个人
projectName
:
''
,
//项目名称
ownerCompany
:
''
,
//业主单位
projectType
:
''
,
//项目类型
projectStage
:
''
,
//项目阶段
minAmount
:
''
,
//投资估算最小值
maxAmount
:
''
,
//投资估算最大值
Amount
:
''
,
//投资估算
provinceId
:
[],
cityId
:
[],
districtId
:
[],
pageNum
:
1
,
pageSize
:
20
,
status
:
null
,
},
domicile
:[],
projectType
:[],
//项目类型
projectCategory
:[],
//项目类别
statusList
:[
pageNum
:
1
,
pageSize
:
20
,
status
:
null
,
},
domicile
:
[],
projectType
:
[],
//项目类型
projectCategory
:
[],
//项目类别
statusList
:
[
{
value
:
'0'
,
label
:
'储备中'
value
:
'0'
,
label
:
'储备中'
},
{
value
:
'1'
,
label
:
'跟进中'
value
:
'1'
,
label
:
'跟进中'
},
{
value
:
'2'
,
label
:
'已合作'
value
:
'2'
,
label
:
'已中标'
},
{
value
:
'3'
,
label
:
'未中标'
},
],
amountOptions
:[
amountOptions
:
[
{
label
:
"5000万以下"
,
value
:
[
0
,
5000
],
value
:
[
0
,
5000
],
},
{
label
:
"5000万-1亿"
,
value
:
[
5000
,
10000
],
value
:
[
5000
,
10000
],
},
{
label
:
"1亿-3亿"
,
value
:
[
10000
,
30000
],
value
:
[
10000
,
30000
],
},
{
label
:
"3亿以上"
,
value
:
[
30000
,
''
],
value
:
[
30000
,
''
],
},
],
contractSignTimeValue
:
""
,
transactionPriceShowPopper
:
false
,
datalist
:[],
//列表数据
ondel
:
-
1
,
total
:
0
,
isSkeleton
:
true
}
datalist
:
[],
//列表数据
ondel
:
-
1
,
total
:
0
,
isSkeleton
:
true
}
;
},
created
()
{
},
mounted
(){
this
.
prvinceTree
()
mounted
()
{
this
.
prvinceTree
()
;
//项目阶段
getDictType
(
'project_stage_type'
).
then
(
result
=>
{
this
.
projectStage
=
result
.
code
==
200
?
result
.
data
:[]
})
getDictType
(
'project_stage_type'
).
then
(
result
=>
{
this
.
projectStage
=
result
.
code
==
200
?
result
.
data
:
[];
})
;
//项目类型
getDictType
(
'project_type'
).
then
(
result
=>
{
this
.
projectType
=
result
.
code
==
200
?
result
.
data
:[]
})
getDictType
(
'project_type'
).
then
(
result
=>
{
this
.
projectType
=
result
.
code
==
200
?
result
.
data
:
[];
})
;
//项目类别
getDictType
(
'project_category'
).
then
(
result
=>
{
this
.
projectCategory
=
result
.
code
==
200
?
result
.
data
:[]
})
if
(
this
.
$route
.
query
.
type
==
1
)
{
getDictType
(
'project_category'
).
then
(
result
=>
{
this
.
projectCategory
=
result
.
code
==
200
?
result
.
data
:
[];
})
;
if
(
this
.
$route
.
query
.
type
==
1
)
{
this
.
activeName
=
'second'
;
}
if
(
this
.
$route
.
query
.
status
)
{
if
(
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
.
getList
(
1
)
this
.
getList
(
1
)
;
},
methods
:
{
statusBtn
(){
statusBtn
()
{
},
dc
(){
this
.
$message
.
warning
(
'功能正在开发中'
)
dc
()
{
this
.
$message
.
warning
(
'功能正在开发中'
)
;
},
deldetail
(
index
){
this
.
ondel
=
index
deldetail
(
index
)
{
this
.
ondel
=
index
;
},
deleteProject
(
id
){
delProject
(
id
).
then
(
result
=>
{
if
(
result
.
code
==
200
)
{
this
.
$message
.
success
(
'删除成功!'
)
this
.
getList
(
1
)
this
.
ondel
=
-
1
}
else
{
this
.
$message
.
error
(
result
.
msg
)
deleteProject
(
id
)
{
delProject
(
id
).
then
(
result
=>
{
if
(
result
.
code
==
200
)
{
this
.
$message
.
success
(
'删除成功!'
)
;
this
.
getList
(
1
)
;
this
.
ondel
=
-
1
;
}
else
{
this
.
$message
.
error
(
result
.
msg
)
;
}
})
})
;
},
getdatas
(){
this
.
getList
(
1
)
getdatas
()
{
this
.
getList
(
1
)
;
},
cancelimport
(){
this
.
pldr
=
false
cancelimport
()
{
this
.
pldr
=
false
;
},
pldrs
(){
this
.
pldr
=
true
pldrs
()
{
this
.
pldr
=
true
;
},
//获取商机列表
getList
(
pageNum
){
this
.
isSkeleton
=
true
this
.
searchParam
.
pageNum
=
pageNum
if
(
this
.
activeName
==
'first'
)
{
this
.
searchParam
.
isPrivate
=
1
}
else
{
this
.
searchParam
.
isPrivate
=
0
}
this
.
searchParam
.
ownerCompany
=
this
.
searchParam
.
projectName
getProjectlist
(
this
.
searchParam
).
then
(
result
=>
{
this
.
isSkeleton
=
false
if
(
result
.
code
==
200
)
{
this
.
datalist
=
result
.
rows
this
.
total
=
result
.
total
this
.
datalist
.
forEach
(
item
=>
{
let
str
=
item
.
provinceName
if
(
item
.
cityName
!=
""
&&
item
.
cityName
!=
null
)
str
+=
'-'
+
item
.
cityName
if
(
item
.
districtName
!=
""
&&
item
.
districtName
!=
null
)
str
+=
'-'
+
item
.
districtName
item
.
address
=
str
item
.
nickName1
=
item
.
nickName
?
item
.
nickName
.
slice
(
0
,
1
):
''
item
.
labels
=
[]
if
(
item
.
label
!=
null
&&
item
.
label
!=
""
)
{
item
.
labels
=
item
.
label
.
split
(
','
)
getList
(
pageNum
)
{
this
.
isSkeleton
=
true
;
this
.
searchParam
.
pageNum
=
pageNum
;
if
(
this
.
activeName
==
'first'
)
{
this
.
searchParam
.
isPrivate
=
1
;
}
else
{
this
.
searchParam
.
isPrivate
=
0
;
}
this
.
searchParam
.
ownerCompany
=
this
.
searchParam
.
projectName
;
getProjectlist
(
this
.
searchParam
).
then
(
result
=>
{
this
.
isSkeleton
=
false
;
if
(
result
.
code
==
200
)
{
this
.
datalist
=
result
.
rows
;
this
.
total
=
result
.
total
;
this
.
datalist
.
forEach
(
item
=>
{
let
str
=
item
.
provinceName
;
if
(
item
.
cityName
!=
""
&&
item
.
cityName
!=
null
)
str
+=
'-'
+
item
.
cityName
;
if
(
item
.
districtName
!=
""
&&
item
.
districtName
!=
null
)
str
+=
'-'
+
item
.
districtName
;
item
.
address
=
str
;
item
.
nickName1
=
item
.
nickName
?
item
.
nickName
.
slice
(
0
,
1
)
:
''
;
item
.
labels
=
[];
if
(
item
.
label
!=
null
&&
item
.
label
!=
""
)
{
item
.
labels
=
item
.
label
.
split
(
','
)
;
}
})
})
;
}
})
})
;
},
reset
(){
reset
()
{
this
.
$nextTick
(()
=>
{
this
.
$refs
.
myCascader
.
$refs
.
panel
.
clearCheckedNodes
()
this
.
$refs
.
myCascader
.
$refs
.
panel
.
activePath
=
[]
})
this
.
searchParam
=
{
isPrivate
:
1
,
projectName
:
''
,
//项目名称
ownerCompany
:
''
,
//业主单位
projectType
:
''
,
//项目类型
projectStage
:
''
,
//项目阶段
minAmount
:
''
,
//投资估算最小值
maxAmount
:
''
,
//投资估算最大值
Amount
:
''
,
//投资估算
this
.
$refs
.
myCascader
.
$refs
.
panel
.
clearCheckedNodes
()
;
this
.
$refs
.
myCascader
.
$refs
.
panel
.
activePath
=
[]
;
})
;
this
.
searchParam
=
{
isPrivate
:
1
,
projectName
:
''
,
//项目名称
ownerCompany
:
''
,
//业主单位
projectType
:
''
,
//项目类型
projectStage
:
''
,
//项目阶段
minAmount
:
''
,
//投资估算最小值
maxAmount
:
''
,
//投资估算最大值
Amount
:
''
,
//投资估算
provinceId
:
[],
cityId
:
[],
districtId
:
[],
pageNum
:
1
,
pageSize
:
20
,
status
:
null
}
this
.
getList
(
1
)
pageNum
:
1
,
pageSize
:
20
,
status
:
null
}
;
this
.
getList
(
1
)
;
},
//地区
async
prvinceTree
()
{
...
...
@@ -402,44 +406,44 @@ export default {
// })
// console.log(prvinceTree)
this
.
addressList
=
prvinceTree
;
this
.
getadd
(
this
.
addressList
)
this
.
getadd
(
this
.
addressList
)
;
},
//处理项目地区
getadd
(
row
)
{
this
.
addrcallback
(
row
,
this
.
getadd
)
this
.
addrcallback
(
row
,
this
.
getadd
);
},
addrcallback
(
row
,
callback
)
{
if
(
row
)
{
addrcallback
(
row
,
callback
)
{
if
(
row
)
{
row
.
forEach
(
item
=>
{
item
.
value
=
item
.
id
callback
&&
callback
(
item
.
children
)
})
item
.
value
=
item
.
id
;
callback
&&
callback
(
item
.
children
);
})
;
}
},
//新建项目
showNew
(){
this
.
isshow
=
true
showNew
()
{
this
.
isshow
=
true
;
},
addNew
(
isshow
){
this
.
isshow
=
isshow
addNew
(
isshow
)
{
this
.
isshow
=
isshow
;
},
add
(){
this
.
isshow
=
false
this
.
getList
(
1
)
add
()
{
this
.
isshow
=
false
;
this
.
getList
(
1
)
;
},
toDetail
(
id
,
tag
)
{
this
.
$router
.
push
({
path
:
'/project/projectList/detail'
,
query
:
{
id
:
id
,
tag
:
tag
}
});
toDetail
(
id
,
tag
)
{
this
.
$router
.
push
({
path
:
'/project/projectList/detail'
,
query
:
{
id
:
id
,
tag
:
tag
}
});
},
toEnterprise
(
item
){
if
(
item
.
ownerCompanyUipId
)
{
this
.
$router
.
push
({
path
:
'/enterprise/'
+
this
.
encodeStr
(
item
.
ownerCompanyCid
)
});
}
else
if
(
item
.
ownerCompanyCid
)
{
this
.
$router
.
push
({
path
:
'/company/'
+
this
.
encodeStr
(
item
.
ownerCompanyCid
)
});
toEnterprise
(
item
)
{
if
(
item
.
ownerCompanyUipId
)
{
this
.
$router
.
push
({
path
:
'/enterprise/'
+
this
.
encodeStr
(
item
.
ownerCompanyCid
)
});
}
else
if
(
item
.
ownerCompanyCid
)
{
this
.
$router
.
push
({
path
:
'/company/'
+
this
.
encodeStr
(
item
.
ownerCompanyCid
)
});
}
},
handleClick
(){
this
.
reset
()
handleClick
()
{
this
.
reset
()
;
},
handleChange
(
value
)
{
// console.log(value);
...
...
@@ -508,71 +512,74 @@ export default {
//翻页
handleCurrentChange
(
val
)
{
this
.
getList
(
val
)
this
.
getList
(
val
)
;
},
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.btn_primary
{
.btn_primary
{
margin-top
:
16px
;
}
.jabph_popper_box
{
}
.jabph_popper_box
{
left
:
110px
;
}
.noborder
{
}
.noborder
{
position
:
relative
;
}
.btns
{
}
.btns
{
position
:
absolute
;
top
:
-6px
;
right
:
12px
;
z-index
:
2
;
.img.img1
{
background
:
url('../../../../src/assets/images/add.png')
no-repeat
center
center
;
.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
;
.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
;
.img.img2
{
background
:
url("../../../../src/assets/images/import.png")
no-repeat
center
center
;
background-size
:
100%
;
}
}
.scbtns
{
border-top
:
1px
solid
#EFEFEF
;
}
.scbtns
{
border-top
:
1px
solid
#efefef
;
padding
:
24px
0
8px
;
.btn
{
.btn
{
margin
:
0
16px
0
0
;
}
}
.sellist
{
}
.sellist
{
width
:
100%
;
padding
:
10px
0
;
.selli
{
.selli
{
width
:
100%
;
height
:
34px
;
line-height
:
34px
;
font-size
:
14px
;
color
:
#232323
;
>
span
{
>
span
{
float
:
left
;
margin-right
:
28px
;
opacity
:
0
.8
;
}
}
}
.titles
{
}
.titles
{
color
:
#232323
;
font-size
:
16px
;
font-weight
:
bold
;
height
:
60px
;
line-height
:
64px
;
border-bottom
:
1px
solid
#EFEFEF
;
border-bottom
:
1px
solid
#efefef
;
padding-left
:
2px
;
padding-right
:
24px
;
/*&::after{
...
...
@@ -584,133 +591,133 @@ export default {
margin-left: -10px;
margin-top: 24px;
}*/
.dc
{
.dc
{
width
:
100%
;
float
:
right
;
font-size
:
12px
;
color
:
#3D3D3D
;
color
:
#3d3d3d
;
font-weight
:
400
;
position
:
relative
;
&
:
:
after
{
content
:
' '
;
&
:
:
after
{
content
:
" "
;
width
:
2px
;
height
:
2px
;
background
:
rgba
(
35
,
35
,
35
,
0
.4
);
background
:
rgba
(
35
,
35
,
35
,
0
.4
);
border-radius
:
50%
;
position
:
absolute
;
top
:
30px
;
left
:
14px
;
}
>
div
{
>
div
{
display
:
inline-block
;
margin-left
:
20px
;
}
.btn-export
{
.btn-export
{
float
:
right
;
margin-top
:
18px
;
}
}
}
.datalist
{
.datali
{
}
.datalist
{
.datali
{
padding
:
16px
16px
0
;
position
:
relative
;
.operates
{
.operates
{
position
:
absolute
;
z-index
:
1
;
right
:
0
;
top
:
24px
;
>
div
{
>
div
{
padding-right
:
16px
;
display
:
inline-block
;
font-size
:
12px
;
>
img
{
>
img
{
float
:
left
;
margin-right
:
5px
;
width
:
16px
;
}
}
.i1
:hover
{
color
:
#3CB4FF
;
.i1
:hover
{
color
:
#3cb4ff
;
}
.i2
:hover
{
color
:
#0CBC6D
;
.i2
:hover
{
color
:
#0cbc6d
;
}
.i3
:hover
{
color
:
#FF3C3C
;
.i3
:hover
{
color
:
#ff3c3c
;
}
.tits
{
.tits
{
padding
:
12px
0
;
}
}
.delform
{
.delform
{
right
:
16px
;
top
:
-94px
;
.btnsmall
{
.btnsmall
{
margin-top
:
0
;
}
}
&
:hover
{
background-color
:
#F6F9FC
;
&
:hover
{
background-color
:
#f6f9fc
;
cursor
:
pointer
;
}
.det-title
{
color
:
#3D3D3D
;
.det-title
{
color
:
#3d3d3d
;
font-size
:
16px
;
font-weight
:
700
;
line-height
:
23px
;
padding-right
:
190px
;
.people
{
.people
{
padding-left
:
10px
;
color
:
#4f4f4f
;
font-weight
:
400
;
font-size
:
14px
;
i
{
i
{
width
:
20px
;
height
:
20px
;
background
:
#E3EEF
9
;
background
:
#e3eef
9
;
border-radius
:
50%
;
font-style
:
initial
;
font-size
:
12px
;
display
:
inline-block
;
color
:
#0081FF
;
color
:
#0081ff
;
text-align
:
center
;
line-height
:
20px
;
margin-right
:
4px
;
}
}
}
.det-tips
{
padding
:
8px
0
;
.det-tips
{
padding
:
8px
0
;
}
.det-contets
{
.det-contets
{
padding
:
4px
0
16px
;
.det-con
{
.det-con
{
font-size
:
14px
;
display
:
inline-block
;
padding-right
:
32px
;
&
:last-child
{
&
:last-child
{
padding-right
:
0
;
}
span
:nth-child
(
2n-1
)
{
span
:nth-child
(
2n-1
)
{
color
:
#a7a7a7
;
}
}
}
}
}
}
.popbot
{
.wordprimary
{
.popbot
{
.wordprimary
{
padding-right
:
26px
;
float
:
left
;
margin-top
:
6px
;
}
.btn_primary
{
.btn_primary
{
padding
:
0
;
}
}
.btn
{
}
.btn
{
padding
:
0
12px
;
}
}
</
style
>
dsk-operate-ui/src/views/radar/components/Establishment/index.vue
View file @
b4f33b30
...
...
@@ -226,6 +226,10 @@
<span>
总投资:
</span>
<span
v-html=
"item.money+'万元'"
></span>
</p>
<p
class=
"list-content-text"
v-if=
"item.handleTime"
>
<span>
最新审批日期:
</span>
<span>
{{
item
.
handleTime
}}
</span>
</p>
<p
class=
"list-content-text"
v-if=
"item.planStartTime"
>
<span>
计划开工日期:
</span>
<span>
{{
item
.
planStartTime
}}
</span>
...
...
@@ -598,7 +602,7 @@
}
else
{
this
.
page
=
page
;
this
.
search
(
page
,
this
.
limit
);
this
.
jump1
(
);
window
.
scrollTo
(
0
,
400
);
}
},
fieldCommand
(
command
)
{
...
...
dsk-operate-ui/src/views/radar/components/bxprozbgg/index.vue
View file @
b4f33b30
dsk-operate-ui/src/views/system/user/index.vue
View file @
b4f33b30
...
...
@@ -345,9 +345,6 @@
<i
class=
"el-icon-upload"
></i>
<div
class=
"el-upload__text"
>
将文件拖到此处,或
<em>
点击上传
</em></div>
<div
class=
"el-upload__tip text-center"
slot=
"tip"
>
<!--<div class="el-upload__tip" slot="tip">-->
<!--<el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据-->
<!--</div>-->
<span>
仅允许导入xls、xlsx格式文件。
</span>
<el-link
type=
"primary"
:underline=
"false"
style=
"font-size:12px;vertical-align: baseline;"
@
click=
"importTemplate"
>
下载模板
</el-link>
</div>
...
...
dsk-system/src/main/java/com/dsk/system/service/impl/ISysTenantServiceImpl.java
View file @
b4f33b30
package
com
.
dsk
.
system
.
service
.
impl
;
import
cn.dev33.satoken.secure.BCrypt
;
import
cn.dev33.satoken.session.SaSession
;
import
cn.dev33.satoken.session.TokenSign
;
import
cn.dev33.satoken.stp.StpUtil
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.convert.Convert
;
import
cn.hutool.core.date.DateTime
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.RandomUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.CollectionUtils
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.dsk.common.constant.CacheNames
;
...
...
@@ -15,9 +20,11 @@ import com.dsk.common.core.domain.PageQuery;
import
com.dsk.common.core.domain.entity.SysDictData
;
import
com.dsk.common.core.domain.entity.SysDictType
;
import
com.dsk.common.core.page.TableDataInfo
;
import
com.dsk.common.enums.UserStatus
;
import
com.dsk.common.exception.ServiceException
;
import
com.dsk.common.utils.PasswordUtils
;
import
com.dsk.common.utils.StringUtils
;
import
com.dsk.common.utils.redis.RedisUtils
;
import
com.dsk.system.domain.*
;
import
com.dsk.system.domain.bo.SysTenantBo
;
import
com.dsk.system.domain.vo.SysTenantVo
;
...
...
@@ -201,6 +208,7 @@ public class ISysTenantServiceImpl implements ISysTenantService {
String
password
=
PasswordUtils
.
generatePwd
(
8
);
user
.
setPassword
(
BCrypt
.
hashpw
(
password
));
user
.
setDeptId
(
deptId
);
user
.
setCreateTime
(
new
DateTime
());
userMapper
.
insert
(
user
);
//新增系统用户后,默认当前用户为部门的负责人
SysDept
sd
=
new
SysDept
();
...
...
@@ -393,6 +401,24 @@ public class ISysTenantServiceImpl implements ISysTenantService {
roleMenuMapper
.
delete
(
new
LambdaQueryWrapper
<
SysRoleMenu
>().
in
(
SysRoleMenu:
:
getRoleId
,
roleIds
).
notIn
(!
menuIds
.
isEmpty
(),
SysRoleMenu:
:
getMenuId
,
menuIds
));
}
try
{
//清除企业用户登录信息
List
<
SysUser
>
tenantUsers
=
userMapper
.
selectList
(
Wrappers
.<
SysUser
>
lambdaQuery
()
.
eq
(
SysUser:
:
getTenantId
,
tenantId
).
eq
(
SysUser:
:
getStatus
,
UserStatus
.
OK
.
getCode
()));
if
(!
CollectionUtils
.
isEmpty
(
tenantUsers
))
{
for
(
SysUser
tenantUser
:
tenantUsers
)
{
String
key
=
"global:Authorization:login:session:00:"
+
tenantUser
.
getUserId
();
if
(
RedisUtils
.
hasKey
(
key
))
{
SaSession
session
=
RedisUtils
.
getCacheObject
(
key
);
List
<
TokenSign
>
tokenSignList
=
session
.
getTokenSignList
();
tokenSignList
.
forEach
(
sign
->
StpUtil
.
kickoutByTokenValue
(
sign
.
getValue
()));
}
}
}
}
catch
(
Exception
e
)
{
log
.
error
(
"清除企业用户登录信息操作失败!error={}"
,
e
.
getMessage
());
}
return
true
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment