410 lines
12 KiB
Vue
410 lines
12 KiB
Vue
<template>
|
|
<div class="app-container">
|
|
<div class="filter-container">
|
|
<!-- <el-input
|
|
v-model="listQuery.keyword"
|
|
style="width:200px;margin-right:10px"
|
|
class="filter-item"
|
|
placeholder="请输入关键字"
|
|
clearable
|
|
/> -->
|
|
<el-select v-model="listQuery.settlementStatus" clearable class="filter-item" style="width:200px;margin-right:10px" placeholder="请选择结算状态">
|
|
<el-option v-for="item of settlementStatusOptions" :key="item.value" v-bind="item" />
|
|
</el-select>
|
|
<el-select v-model="listQuery.dealStatus" clearable class="filter-item" style="width:200px;margin-right:10px" placeholder="请选择已处理状态">
|
|
<el-option v-for="item of dealStatusOptions" :key="item.value" v-bind="item" />
|
|
</el-select>
|
|
<el-date-picker
|
|
v-model="listQuery.dateArr"
|
|
type="datetimerange"
|
|
class="filter-item"
|
|
range-separator="至"
|
|
start-placeholder="开始日期"
|
|
end-placeholder="结束日期"
|
|
value-format="timestamp"
|
|
align="right"
|
|
clearable
|
|
/>
|
|
<el-button
|
|
type="primary"
|
|
style="margin-left:10px"
|
|
@click="handleSearch"
|
|
>搜索</el-button>
|
|
<el-button
|
|
:loading="exportLoading"
|
|
icon="el-icon-download"
|
|
type="primary"
|
|
style="margin-left:10px"
|
|
@click="handleExport"
|
|
>导出</el-button>
|
|
</div>
|
|
<el-table v-loading="loading" :data="list" border style="width: 100%">
|
|
<el-table-column label="用户名" prop="residentInformation.name" />
|
|
<el-table-column label="店名" prop="residentInformation.speciallyBusinessInfo.name" />
|
|
<el-table-column label="结算积分数" prop="num" />
|
|
|
|
<el-table-column label="提交时间">
|
|
<template slot-scope="scope">
|
|
<span>{{
|
|
scope.row.createDate | parseTime("{y}-{m}-{d} {h}:{i}:{s}")
|
|
}}</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="结算状态">
|
|
<template slot-scope="scope">
|
|
<span>{{
|
|
scope.row.settlementStatus | optionsFilter(settlementStatusOptions)
|
|
}}</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="已处理状态">
|
|
<template slot-scope="scope">
|
|
<span>{{
|
|
scope.row.dealStatus | optionsFilter(dealStatusOptions)
|
|
}}</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="处理备注" prop="remark" />
|
|
<el-table-column label="发票状态">
|
|
<template slot-scope="scope">
|
|
<span>{{
|
|
scope.row.invoiceStatus | optionsFilter(invoiceStatusOptions)
|
|
}}</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="操作" width="300px" fixed="right" align="center">
|
|
<template slot-scope="scope">
|
|
<el-button
|
|
v-if="scope.row.invoiceStatus == '1' && scope.row.dealStatus == null"
|
|
type="primary"
|
|
size="mini"
|
|
style="font-size:12px;padding:10px 20px"
|
|
@click="handleEdit(scope.row)"
|
|
>处理</el-button>
|
|
<el-button
|
|
v-if="scope.row.invoiceStatus != '1'"
|
|
type="success"
|
|
size="mini"
|
|
style="font-size:12px;padding:10px 20px;border-radius:21px"
|
|
@click="handleDelivery(scope.row)"
|
|
>收到发票</el-button>
|
|
<el-button
|
|
v-if="scope.row.dealStatus != '1'"
|
|
type="primary"
|
|
size="mini"
|
|
style="font-size:12px;padding:10px 20px"
|
|
@click="handleRExport(scope.row)"
|
|
>导出结算积分</el-button>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
|
|
<pagination
|
|
v-if="total > 0"
|
|
:total="total"
|
|
:page.sync="listQuery.lastPageIndex"
|
|
:limit.sync="listQuery.size"
|
|
@pagination="getList"
|
|
/>
|
|
|
|
<el-dialog
|
|
class="dialog"
|
|
title="积分结算"
|
|
append-to-body
|
|
center
|
|
width="364px"
|
|
:visible.sync="diaVisible"
|
|
:close-on-click-modal="false"
|
|
:close-on-press-escape="false"
|
|
:close="closeDia"
|
|
>
|
|
<div class="preview-container">
|
|
<el-form
|
|
ref="form"
|
|
label-position="left"
|
|
label-width="100px"
|
|
:rules="rules"
|
|
:model="form"
|
|
>
|
|
<el-form-item label="结算状态" prop="dealStatus">
|
|
<el-radio v-model="form.dealStatus" :label="0">兑换</el-radio>
|
|
<el-radio v-model="form.dealStatus" :label="1">不兑换</el-radio>
|
|
</el-form-item>
|
|
<el-form-item label="备注" prop="remark">
|
|
<el-input
|
|
v-model="form.remark"
|
|
type="textarea"
|
|
placeholder="请输入"
|
|
/>
|
|
</el-form-item>
|
|
</el-form>
|
|
</div>
|
|
<span slot="footer" class="dialog-footer">
|
|
<el-button type="default" @click="closeDia">取消</el-button>
|
|
<el-button type="primary" @click="submitForm">提交</el-button>
|
|
</span>
|
|
</el-dialog>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import Pagination from '@/components/Pagination'
|
|
import { settlementList, settlementDeal, settlementRecordList } from '@/api/fingertipIntegral'
|
|
import { sourceOptions } from './options'
|
|
export default {
|
|
components: { Pagination },
|
|
filters: {
|
|
optionsFilter(value, options = []) {
|
|
const findItem = options.find((option) => option.value === value)
|
|
if (findItem) {
|
|
return findItem.label
|
|
}
|
|
return ''
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
total: 0,
|
|
listQuery: {
|
|
lastPageIndex: 1,
|
|
size: 10,
|
|
category: undefined,
|
|
dealStatus: undefined,
|
|
endDate: undefined,
|
|
id: undefined,
|
|
innerCategory: undefined,
|
|
keyword: undefined,
|
|
settlementStatus: undefined,
|
|
startDate: undefined,
|
|
status: undefined,
|
|
dateArr: []
|
|
},
|
|
list: undefined,
|
|
|
|
exportLoading: false,
|
|
|
|
settlementStatusOptions: [
|
|
{
|
|
label: '待处理',
|
|
value: '0'
|
|
},
|
|
{
|
|
label: '已处理',
|
|
value: '1'
|
|
}
|
|
],
|
|
dealStatusOptions: [
|
|
{
|
|
label: '兑换',
|
|
value: '0'
|
|
},
|
|
{
|
|
label: '不兑换',
|
|
value: '1'
|
|
}
|
|
],
|
|
invoiceStatusOptions: [
|
|
{
|
|
label: '未收',
|
|
value: '0'
|
|
},
|
|
{
|
|
label: '已收',
|
|
value: '1'
|
|
}
|
|
],
|
|
|
|
diaVisible: false,
|
|
form: {
|
|
dealStatus: 0,
|
|
remark: undefined
|
|
},
|
|
rules: {
|
|
dealStatus: [{ required: true, message: '请选择', trigger: 'change' }]
|
|
}
|
|
}
|
|
},
|
|
watch: {
|
|
'listQuery.lastPageIndex': {
|
|
handler(val) {
|
|
this.getList()
|
|
},
|
|
deep: true // true 深度监听
|
|
}
|
|
},
|
|
created() {
|
|
this.getList()
|
|
},
|
|
methods: {
|
|
getList() {
|
|
const listQuery = JSON.parse(JSON.stringify(this.listQuery))
|
|
const { dateArr } = listQuery
|
|
if (dateArr) {
|
|
listQuery.startDate = dateArr[0] / 1000
|
|
listQuery.endDate = dateArr[1] / 1000
|
|
}
|
|
this.loading = true
|
|
settlementList(listQuery).then(res => {
|
|
this.loading = false
|
|
this.list = res.d.records
|
|
this.total = res.d.total
|
|
// this.pageSize = res.d.pageSize
|
|
}).catch(() => {
|
|
this.loading = false
|
|
})
|
|
},
|
|
handleEdit(item) {
|
|
this.form = {
|
|
id: item.id,
|
|
dealStatus: 0,
|
|
remark: undefined,
|
|
invoiceStatus: item.invoiceStatus
|
|
}
|
|
this.$nextTick(() => {
|
|
const formEl = this.$refs['form']
|
|
if (formEl) formEl.clearValidate()
|
|
this.diaVisible = true
|
|
})
|
|
},
|
|
submitForm() {
|
|
this.$refs['form'].validate((valid) => {
|
|
if (valid) {
|
|
settlementDeal(this.form).then(() => {
|
|
this.$message({
|
|
type: 'success',
|
|
message: '操作成功!'
|
|
})
|
|
this.closeDia()
|
|
this.getList()
|
|
})
|
|
}
|
|
})
|
|
},
|
|
closeDia() {
|
|
this.diaVisible = false
|
|
},
|
|
handleExport() {
|
|
const that = this
|
|
import('@/vendor/Export2Excel').then(excel => {
|
|
const tHeader = ['用户名', '店名', '结算积分数', '提交时间', '结算状态', '已处理状态', '处理备注', '发票状态']
|
|
const filterVal = ['residentInformation.name', 'residentInformation.speciallyBusinessInfo.name', 'num', 'createDate', 'settlementStatus', 'dealStatus', 'remark', 'invoiceStatus']
|
|
this.exportLoading = true
|
|
const listQuery = JSON.parse(JSON.stringify(this.listQuery))
|
|
const { dateArr } = listQuery
|
|
if (dateArr) {
|
|
listQuery.startDate = dateArr[0] / 1000
|
|
listQuery.endDate = dateArr[1] / 1000
|
|
}
|
|
listQuery.size = 999999
|
|
settlementList(listQuery).then(res => {
|
|
setTimeout(() => {
|
|
this.exportLoading = false
|
|
}, 3000)
|
|
|
|
const data = that.formatJson(filterVal, res.d.records)
|
|
excel.export_json_to_excel({
|
|
header: tHeader,
|
|
data: data,
|
|
filename: '结算记录'
|
|
})
|
|
})
|
|
})
|
|
},
|
|
formatJson(filterVal, jsonData) {
|
|
return jsonData.map(v =>
|
|
filterVal.map(j => {
|
|
let value
|
|
if (j === 'invoiceStatus' || j === 'dealStatus' || j === 'settlementStatus') {
|
|
value = this.$options.filters['optionsFilter'](v[j], this[`${j}Options`])
|
|
} else if (j === 'createDate') {
|
|
value = this.$options.filters['parseTime'](v[j])
|
|
} else if (j === 'residentInformation.name') {
|
|
value = v['residentInformation']['name']
|
|
} else if (j === 'residentInformation.speciallyBusinessInfo.name') {
|
|
value = v['residentInformation']['speciallyBusinessInfo']['name']
|
|
} else {
|
|
value = v[j]
|
|
}
|
|
// if (!value && value !== 0) value = "N/A";
|
|
return value
|
|
})
|
|
)
|
|
},
|
|
handleRExport(item) {
|
|
const that = this
|
|
import('@/vendor/Export2Excel').then(excel => {
|
|
const tHeader = ['商户姓名', '日期', '群众姓名', '积分数量', '积分交易备注', '积分来源']
|
|
const filterVal = ['businessName', 'createDate', 'massesName', 'num', 'remark', 'source']
|
|
this.loading = true
|
|
// const listQuery = JSON.parse(JSON.stringify(this.listQuery))
|
|
// const { dateArr } = listQuery
|
|
// if (dateArr) {
|
|
// listQuery.startDate = dateArr[0] / 1000
|
|
// listQuery.endDate = dateArr[1] / 1000
|
|
// }
|
|
// listQuery.size = 999999
|
|
settlementRecordList({ id: item.id }).then(res => {
|
|
setTimeout(() => {
|
|
this.loading = false
|
|
}, 3000)
|
|
|
|
const data = that.formatDJson(filterVal, res.d)
|
|
excel.export_json_to_excel({
|
|
header: tHeader,
|
|
data: data,
|
|
filename: '积分清单'
|
|
})
|
|
}).catch(() => {
|
|
this.loading = false
|
|
})
|
|
})
|
|
},
|
|
formatDJson(filterVal, jsonData) {
|
|
return jsonData.map(v =>
|
|
filterVal.map(j => {
|
|
let value
|
|
if (j === 'createDate') {
|
|
value = this.$options.filters['parseTime'](v[j])
|
|
} else if (j === 'source') {
|
|
value = this.$options.filters['optionsFilter'](v[j], sourceOptions)
|
|
} else {
|
|
value = v[j]
|
|
}
|
|
// if (!value && value !== 0) value = "N/A";
|
|
return value
|
|
})
|
|
)
|
|
},
|
|
handleDelivery(item) {
|
|
this.$confirm('是否收到发票?', '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning'
|
|
}).then(() => {
|
|
settlementDeal({
|
|
id: item.id,
|
|
dealStatus: item.dealStatus,
|
|
invoiceStatus: 1
|
|
}).then(() => {
|
|
this.$message({
|
|
type: 'success',
|
|
message: '操作成功!'
|
|
})
|
|
this.getList()
|
|
})
|
|
})
|
|
},
|
|
handleSearch() {
|
|
const { listQuery } = this
|
|
this.listQuery.lastPageIndex = 1
|
|
Object.keys(listQuery).forEach(key => {
|
|
if (listQuery[key] === '') listQuery[key] = undefined
|
|
})
|
|
this.getList()
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style></style>
|