Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
H
housing-estate
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
物业总平台
housing-estate
Commits
ea405e02
提交
ea405e02
authored
6月 21, 2023
作者:
何忠建
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
生活缴费导入导出
上级
108db7c6
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
251 行增加
和
224 行删除
+251
-224
owner.vue
src/views/information/owner/owner.vue
+2
-2
living.vue
src/views/property/living/living.vue
+249
-222
没有找到文件。
src/views/information/owner/owner.vue
浏览文件 @
ea405e02
...
@@ -339,13 +339,13 @@ export default {
...
@@ -339,13 +339,13 @@ export default {
return
return
}
}
if
(
typeof
window
.
navigator
.
msSaveBlob
!==
'undefined'
)
{
if
(
typeof
window
.
navigator
.
msSaveBlob
!==
'undefined'
)
{
window
.
navigator
.
msSaveBlob
(
new
Blob
([
data
],
{
type
:
'application/vnd.ms-excel'
}
),
fileName
+
'.xls
x
'
)
window
.
navigator
.
msSaveBlob
(
new
Blob
([
data
],
{
type
:
'application/vnd.ms-excel'
}
),
fileName
+
'.xls'
)
}
else
{
}
else
{
let
url
=
window
.
URL
.
createObjectURL
(
new
Blob
([
data
],
{
type
:
'application/vnd.ms-excel'
}
))
let
url
=
window
.
URL
.
createObjectURL
(
new
Blob
([
data
],
{
type
:
'application/vnd.ms-excel'
}
))
let
link
=
document
.
createElement
(
'a'
)
let
link
=
document
.
createElement
(
'a'
)
link
.
style
.
display
=
'none'
link
.
style
.
display
=
'none'
link
.
href
=
url
link
.
href
=
url
link
.
setAttribute
(
'download'
,
fileName
+
'.xls
x
'
)
link
.
setAttribute
(
'download'
,
fileName
+
'.xls'
)
document
.
body
.
appendChild
(
link
)
document
.
body
.
appendChild
(
link
)
link
.
click
()
link
.
click
()
document
.
body
.
removeChild
(
link
)
//下载完成移除元素
document
.
body
.
removeChild
(
link
)
//下载完成移除元素
...
...
src/views/property/living/living.vue
浏览文件 @
ea405e02
...
@@ -29,11 +29,16 @@
...
@@ -29,11 +29,16 @@
<!-- 操作按钮区域 -->
<!-- 操作按钮区域 -->
<div
class=
"table-operator"
>
<div
class=
"table-operator"
>
<a-button
@
click=
"onMeterReading"
type=
"primary"
icon=
"plus"
>
抄表
</a-button>
<a-button
@
click=
"onMeterReading"
type=
"primary"
icon=
"plus"
>
抄表
</a-button>
<a-button
type=
"primary"
icon=
"download"
@
click=
"handleExportXls('t_property_settled')"
>
导出
</a-button>
<a-button
icon=
"download"
@
click=
"downloadExportXls()"
>
模板下载
</a-button>
<a-upload
name=
"file"
:showUploadList=
"false"
:multiple=
"false"
:headers=
"tokenHeader"
:action=
"importExcelUrl"
@
change=
"handleImportExcel"
>
<a-button
type=
"primary"
icon=
"import"
>
导入
</a-button>
</a-upload>
<a-button
type=
"primary"
icon=
"download"
@
click=
"handleExportXls('生活缴费')"
>
导出
</a-button>
<a-dropdown
v-if=
"selectedRowKeys.length > 0"
>
<a-dropdown
v-if=
"selectedRowKeys.length > 0"
>
<a-menu
slot=
"overlay"
>
<a-menu
slot=
"overlay"
>
<a-menu-item
key=
"1"
@
click=
"onBatchCallpay"
><a-icon
type=
"message"
/>
催缴
</a-menu-item>
<a-menu-item
key=
"1"
@
click=
"onBatchCallpay"
><a-icon
type=
"message"
/>
催缴
</a-menu-item>
<a-menu-item
key=
"2"
@
click=
"batchDel"
><a-icon
type=
"delete"
/>
删除
</a-menu-item>
<a-menu-item
key=
"2"
@
click=
"batchDel"
><a-icon
type=
"delete"
/>
删除
</a-menu-item>
</a-menu>
</a-menu>
<a-button
style=
"margin-left: 8px"
>
批量操作
<a-icon
type=
"down"
/></a-button>
<a-button
style=
"margin-left: 8px"
>
批量操作
<a-icon
type=
"down"
/></a-button>
</a-dropdown>
</a-dropdown>
...
@@ -47,24 +52,12 @@
...
@@ -47,24 +52,12 @@
<a
style=
"margin-left: 24px"
v-if=
"selectedRowKeys.length > 0"
@
click=
"onClearSelected"
>
清空
</a>
<a
style=
"margin-left: 24px"
v-if=
"selectedRowKeys.length > 0"
@
click=
"onClearSelected"
>
清空
</a>
</div>
</div>
<a-table
<a-table
ref=
"table"
size=
"middle"
:scroll=
"
{ x: 1500}" bordered rowKey="id" :columns="columns"
ref=
"table"
:dataSource="dataSource" :pagination="ipagination" :loading="loading" :rowSelection="{
size=
"middle"
:scroll=
"
{ x: 1500, y: 300 }"
bordered
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{
selectedRowKeys: selectedRowKeys,
selectedRowKeys: selectedRowKeys,
onChange: onSelectChange,
onChange: onSelectChange,
getCheckboxProps: onCheckboxProps
getCheckboxProps: onCheckboxProps
}"
}" class="j-table-force-nowrap" @change="handleTableChange">
class="j-table-force-nowrap"
@change="handleTableChange"
>
<span
slot=
"ownerId"
slot-scope=
"text, record"
>
<span
slot=
"ownerId"
slot-scope=
"text, record"
>
<span>
{{
record
.
ownerName
}}
,
{{
record
.
ownerPhone
}}
</span>
<span>
{{
record
.
ownerName
}}
,
{{
record
.
ownerPhone
}}
</span>
</span>
</span>
...
@@ -77,9 +70,9 @@
...
@@ -77,9 +70,9 @@
<span
slot=
"action"
slot-scope=
"text, record"
>
<span
slot=
"action"
slot-scope=
"text, record"
>
<a
@
click=
"onDetail(record.id)"
>
查看
</a>
<a
@
click=
"onDetail(record.id)"
>
查看
</a>
<template
v-if=
"record.paymentStatus === 'unPaid'"
>
<template
v-if=
"record.paymentStatus === 'unPaid'"
>
<a-divider
type=
"vertical"
/>
<a-divider
type=
"vertical"
/>
<a
@
click=
"onCallPay(record.id)"
>
催缴
</a>
<a
@
click=
"onCallPay(record.id)"
>
催缴
</a>
<a-divider
type=
"vertical"
/>
<a-divider
type=
"vertical"
/>
<a
@
click=
"handleDelete(record)"
>
删除
</a>
<a
@
click=
"handleDelete(record)"
>
删除
</a>
</
template
>
</
template
>
</span>
</span>
...
@@ -95,225 +88,258 @@
...
@@ -95,225 +88,258 @@
</template>
</template>
<
script
>
<
script
>
import
{
getBuildingListApi
,
getUnitListApi
,
getRoomListApi
,
callPayMentApi
}
from
'@/api/api'
import
{
getBuildingListApi
,
getUnitListApi
,
getRoomListApi
,
callPayMentApi
}
from
'@/api/api'
import
{
JeecgListMixin
}
from
'@/mixins/JeecgListMixin'
import
{
downFile
}
from
'@/api/manage'
import
NoticeModal
from
'./modules/NoticeModal'
import
{
JeecgListMixin
}
from
'@/mixins/JeecgListMixin'
import
{
PAYMENT_STATUS
,
RELATION_SHIP
,
filterDictTextByStatic
}
from
'@/assets/static.js'
import
NoticeModal
from
'./modules/NoticeModal'
import
{
PAYMENT_STATUS
,
RELATION_SHIP
,
filterDictTextByStatic
}
from
'@/assets/static.js'
const
columns
=
[
const
columns
=
[
{
{
title
:
'收费类型'
,
title
:
'收费类型'
,
dataIndex
:
'chargeTypeName'
,
dataIndex
:
'chargeTypeName'
,
key
:
'chargeTypeName'
,
key
:
'chargeTypeName'
,
width
:
120
,
width
:
120
,
align
:
'center'
align
:
'center'
,
},
{
title
:
'收费项目'
,
dataIndex
:
'chargeItem'
,
key
:
'chargeItem'
,
width
:
120
,
align
:
'center'
,
},
{
title
:
'业主'
,
dataIndex
:
'ownerId'
,
key
:
'ownerId'
,
width
:
160
,
scopedSlots
:
{
customRender
:
'ownerId'
},
align
:
'center'
,
},
{
title
:
'与业主关系'
,
dataIndex
:
'relationShip'
,
key
:
'relationShip'
,
width
:
120
,
align
:
'center'
,
customRender
:
function
(
text
)
{
return
filterDictTextByStatic
(
RELATION_SHIP
,
text
)
},
},
{
},
title
:
'收费项目'
,
{
dataIndex
:
'chargeItem'
,
title
:
'住户'
,
key
:
'chargeItem'
,
dataIndex
:
'residentPhone'
,
width
:
120
,
key
:
'residentPhone'
,
align
:
'center'
width
:
160
,
scopedSlots
:
{
customRender
:
'residentPhone'
},
align
:
'center'
,
},
{
title
:
'房屋编号'
,
dataIndex
:
'roomId'
,
scopedSlots
:
{
customRender
:
'roomId'
},
key
:
'roomId'
,
width
:
140
,
align
:
'center'
,
},
{
title
:
'金额(元)'
,
dataIndex
:
'totalAmount'
,
key
:
'totalAmount'
,
width
:
120
,
align
:
'center'
,
},
{
title
:
'本期读表时间'
,
dataIndex
:
'meterReadingTime'
,
key
:
'meterReadingTime'
,
width
:
150
,
align
:
'center'
,
},
{
title
:
'缴费状态'
,
dataIndex
:
'paymentStatus'
,
key
:
'paymentStatus'
,
width
:
120
,
align
:
'center'
,
customRender
:
function
(
text
)
{
return
filterDictTextByStatic
(
PAYMENT_STATUS
,
text
)
},
},
{
},
title
:
'业主'
,
{
dataIndex
:
'ownerId'
,
title
:
'缴费单号'
,
key
:
'ownerId'
,
dataIndex
:
'paymentNum'
,
width
:
160
,
key
:
'paymentNum'
,
scopedSlots
:
{
customRender
:
'ownerId'
},
width
:
120
,
align
:
'center'
align
:
'center'
,
},
{
title
:
'缴费日期'
,
dataIndex
:
'paymentTime'
,
key
:
'paymentTime'
,
width
:
150
,
align
:
'center'
,
},
{
title
:
'创建日期'
,
dataIndex
:
'createTime'
,
key
:
'createTime'
,
width
:
150
,
align
:
'center'
,
},
{
title
:
'操作'
,
dataIndex
:
'action'
,
scopedSlots
:
{
customRender
:
'action'
},
align
:
'center'
,
width
:
150
,
fixed
:
'right'
,
},
]
export
default
{
name
:
'PermissionListAsync'
,
mixins
:
[
JeecgListMixin
],
components
:
{
NoticeModal
},
data
()
{
return
{
// 表头
columns
:
columns
,
url
:
{
list
:
'/property-community/payment/communityPayment/list'
,
delete
:
'/property-community/payment/communityPayment/delete'
,
deleteBatch
:
'/property-community/payment/communityPayment/deleteBatch'
,
exportXlsUrl
:
'/property-community/payment/communityPayment/exportXls'
,
importExcelUrl
:
'property-community/payment/communityPayment/importExcel'
,
downloadExcelUrl
:
'/property-community/payment/communityPayment/downloadPaymentTemplate'
,
},
treeData
:
[],
}
},
created
()
{
this
.
getBuildingList
()
// this.initDictData()
},
computed
:
{
importExcelUrl
:
function
()
{
return
`
${
window
.
_CONFIG
[
'domianURL'
]}
/
${
this
.
url
.
importExcelUrl
}
`
},
},
{
},
title
:
'与业主关系'
,
methods
:
{
dataIndex
:
'relationShip'
,
onCheckboxProps
(
record
)
{
key
:
'relationShip'
,
let
props
=
{
width
:
120
,
disabled
:
record
.
paymentStatus
===
'paid'
,
align
:
'center'
,
name
:
record
.
chargeTypeName
,
customRender
:
function
(
text
)
{
return
filterDictTextByStatic
(
RELATION_SHIP
,
text
);
}
}
return
props
},
},
{
async
getBuildingList
()
{
title
:
'住户'
,
let
{
result
}
=
await
getBuildingListApi
()
dataIndex
:
'residentPhone'
,
this
.
treeData
=
result
.
map
((
item
)
=>
{
key
:
'residentPhone'
,
return
{
width
:
160
,
title
:
item
.
buildingName
,
scopedSlots
:
{
customRender
:
'residentPhone'
},
key
:
item
.
id
,
align
:
'center'
}
},
})
{
title
:
'房屋编号'
,
dataIndex
:
'roomId'
,
scopedSlots
:
{
customRender
:
'roomId'
},
key
:
'roomId'
,
width
:
140
,
align
:
'center'
},
{
title
:
'金额(元)'
,
dataIndex
:
'totalAmount'
,
key
:
'totalAmount'
,
width
:
120
,
align
:
'center'
},
{
title
:
'本期读表时间'
,
dataIndex
:
'meterReadingTime'
,
key
:
'meterReadingTime'
,
width
:
150
,
align
:
'center'
},
{
title
:
'缴费状态'
,
dataIndex
:
'paymentStatus'
,
key
:
'paymentStatus'
,
width
:
120
,
align
:
'center'
,
customRender
:
function
(
text
)
{
return
filterDictTextByStatic
(
PAYMENT_STATUS
,
text
);
}
},
},
{
onClickTree
(
value
,
optios
)
{
title
:
'缴费单号'
,
console
.
log
(
value
,
optios
)
dataIndex
:
'paymentNum'
,
key
:
'paymentNum'
,
width
:
120
,
align
:
'center'
},
},
{
onLoadData
(
treeNode
)
{
title
:
'缴费日期'
,
return
new
Promise
(
async
(
resolve
)
=>
{
dataIndex
:
'paymentTime'
,
if
(
treeNode
.
dataRef
.
children
)
{
key
:
'paymentTime'
,
resolve
()
width
:
150
,
return
align
:
'center'
}
if
(
treeNode
.
pos
.
split
(
'-'
).
length
===
2
)
{
let
{
result
}
=
await
getUnitListApi
({
id
:
treeNode
.
eventKey
})
treeNode
.
dataRef
.
children
=
result
.
map
((
item
)
=>
{
return
{
title
:
item
.
unitName
,
key
:
item
.
id
,
}
})
this
.
treeData
=
[...
this
.
treeData
]
resolve
()
}
else
{
let
{
result
}
=
await
getRoomListApi
({
id
:
treeNode
.
eventKey
})
treeNode
.
dataRef
.
children
=
result
.
map
((
item
)
=>
{
return
{
title
:
item
.
roomNum
,
key
:
item
.
id
,
isLeaf
:
true
,
}
})
this
.
treeData
=
[...
this
.
treeData
]
resolve
()
}
})
},
},
{
onMeterReading
()
{
title
:
'创建日期'
,
this
.
$refs
.
modalForm
.
add
()
dataIndex
:
'createTime'
,
this
.
$refs
.
modalForm
.
title
=
'抄表'
key
:
'createTime'
,
this
.
$refs
.
modalForm
.
disableSubmit
=
false
width
:
150
,
align
:
'center'
},
},
{
onBatchCallpay
()
{
title
:
'操作'
,
// console.log(this.selectionRows)
dataIndex
:
'action'
,
let
chooseIds
=
this
.
selectedRowKeys
.
join
(
','
)
scopedSlots
:
{
customRender
:
'action'
},
this
.
onCallPay
(
chooseIds
)
align
:
'center'
,
width
:
150
,
fixed
:
'right'
}
]
export
default
{
name
:
'PermissionListAsync'
,
mixins
:
[
JeecgListMixin
],
components
:
{
NoticeModal
},
data
()
{
return
{
// 表头
columns
:
columns
,
url
:
{
list
:
"/property-community/payment/communityPayment/list"
,
delete
:
'/property-community/payment/communityPayment/delete'
,
deleteBatch
:
'/property-community/payment/communityPayment/deleteBatch'
},
treeData
:
[]
}
},
},
created
()
{
onDetail
(
id
)
{
this
.
getBuildingList
()
this
.
$router
.
push
({
// this.initDictData()
path
:
'/property/living-detail?id='
+
id
,
})
},
},
methods
:
{
onCallPay
(
chooseIds
)
{
onCheckboxProps
(
record
)
{
let
that
=
this
let
props
=
{
this
.
$confirm
({
disabled
:
record
.
paymentStatus
===
'paid'
,
title
:
'催缴账单'
,
name
:
record
.
chargeTypeName
content
:
'是否催缴当前选择的账单发送给对应业主?'
,
}
onOk
:
function
()
{
return
props
that
.
loading
=
true
},
callPayMentApi
({
chooseIds
})
async
getBuildingList
()
{
.
then
((
res
)
=>
{
let
{
result
}
=
await
getBuildingListApi
()
this
.
treeData
=
result
.
map
(
item
=>
{
return
{
title
:
item
.
buildingName
,
key
:
item
.
id
}
})
},
onClickTree
(
value
,
optios
)
{
console
.
log
(
value
,
optios
)
},
onLoadData
(
treeNode
)
{
return
new
Promise
(
async
resolve
=>
{
if
(
treeNode
.
dataRef
.
children
)
{
resolve
();
return
;
}
if
(
treeNode
.
pos
.
split
(
'-'
).
length
===
2
)
{
let
{
result
}
=
await
getUnitListApi
({
id
:
treeNode
.
eventKey
})
treeNode
.
dataRef
.
children
=
result
.
map
(
item
=>
{
return
{
title
:
item
.
unitName
,
key
:
item
.
id
}
})
this
.
treeData
=
[...
this
.
treeData
];
resolve
();
}
else
{
let
{
result
}
=
await
getRoomListApi
({
id
:
treeNode
.
eventKey
})
treeNode
.
dataRef
.
children
=
result
.
map
(
item
=>
{
return
{
title
:
item
.
roomNum
,
key
:
item
.
id
,
isLeaf
:
true
}
})
this
.
treeData
=
[...
this
.
treeData
];
resolve
();
}
});
},
onMeterReading
()
{
this
.
$refs
.
modalForm
.
add
();
this
.
$refs
.
modalForm
.
title
=
"抄表"
;
this
.
$refs
.
modalForm
.
disableSubmit
=
false
;
},
onBatchCallpay
()
{
// console.log(this.selectionRows)
let
chooseIds
=
this
.
selectedRowKeys
.
join
(
','
)
this
.
onCallPay
(
chooseIds
)
},
onDetail
(
id
)
{
this
.
$router
.
push
({
path
:
'/property/living-detail?id='
+
id
});
},
onCallPay
(
chooseIds
)
{
let
that
=
this
this
.
$confirm
({
title
:
"催缴账单"
,
content
:
"是否催缴当前选择的账单发送给对应业主?"
,
onOk
:
function
()
{
that
.
loading
=
true
;
callPayMentApi
({
chooseIds
}).
then
((
res
)
=>
{
if
(
res
.
success
)
{
if
(
res
.
success
)
{
//重新计算分页问题
//重新计算分页问题
that
.
$message
.
success
(
res
.
message
)
;
that
.
$message
.
success
(
res
.
message
)
// that.searchQuery();
// that.searchQuery();
that
.
onClearSelected
()
;
that
.
onClearSelected
()
}
else
{
}
else
{
that
.
$message
.
warning
(
res
.
message
)
;
that
.
$message
.
warning
(
res
.
message
)
}
}
}).
finally
(()
=>
{
})
that
.
loading
=
false
;
.
finally
(()
=>
{
});
that
.
loading
=
false
}
})
});
},
}
})
}
},
}
downloadExportXls
()
{
let
fileName
=
'生活缴费模板'
downFile
(
this
.
url
.
downloadExcelUrl
,
''
).
then
((
data
)
=>
{
if
(
!
data
)
{
this
.
$message
.
warning
(
'文件下载失败'
)
return
}
if
(
typeof
window
.
navigator
.
msSaveBlob
!==
'undefined'
)
{
window
.
navigator
.
msSaveBlob
(
new
Blob
([
data
],
{
type
:
'application/vnd.ms-excel'
}),
fileName
+
'.xls'
)
}
else
{
let
url
=
window
.
URL
.
createObjectURL
(
new
Blob
([
data
],
{
type
:
'application/vnd.ms-excel'
}))
let
link
=
document
.
createElement
(
'a'
)
link
.
style
.
display
=
'none'
link
.
href
=
url
link
.
setAttribute
(
'download'
,
fileName
+
'.xls'
)
document
.
body
.
appendChild
(
link
)
link
.
click
()
document
.
body
.
removeChild
(
link
)
//下载完成移除元素
window
.
URL
.
revokeObjectURL
(
url
)
//释放掉blob对象
}
})
},
},
}
</
script
>
</
script
>
<
style
scoped
>
<
style
scoped
>
@import
'~@assets/less/common.less'
;
@import
'~@assets/less/common.less'
;
</
style
>
</
style
>
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论