276 lines
7.5 KiB
Vue
276 lines
7.5 KiB
Vue
<template>
|
||
<div class="customer-wrap">
|
||
<div class="content-box">
|
||
<div class="form-box">
|
||
<el-form ref="searchForm" :model="searchForm">
|
||
<el-row>
|
||
<el-col :span="6">
|
||
<el-form-item label="客户名称" prop="custName" label-width="80px">
|
||
<el-input
|
||
v-model="searchForm.custName"
|
||
clearable
|
||
@keyup.enter.native="handleSearch"
|
||
@clear="handleSearch"
|
||
/>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col v-if="selectedTab === '1'" :span="6">
|
||
<el-form-item label="证件号" prop="custIdc" label-width="80px">
|
||
<el-input
|
||
v-model="searchForm.custIdc"
|
||
clearable
|
||
@keyup.enter.native="handleSearch"
|
||
@clear="handleSearch"
|
||
/>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col v-else :span="6">
|
||
<el-form-item label="统一信用码" prop="socialCreditCode" label-width="100px">
|
||
<el-input
|
||
v-model="searchForm.socialCreditCode"
|
||
clearable
|
||
@keyup.enter.native="handleSearch"
|
||
@clear="handleSearch"
|
||
/>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="5" :offset="1" style="text-align: left">
|
||
<el-button type="primary" @click="handleSearch">查询</el-button>
|
||
<el-button @click="handleReset">重置</el-button>
|
||
</el-col>
|
||
</el-row>
|
||
</el-form>
|
||
</div>
|
||
|
||
<div class="operate-btn">
|
||
<el-button @click="returnLastPage">返回上一级</el-button>
|
||
<el-button type="primary" @click="handleDownload">导出</el-button>
|
||
</div>
|
||
|
||
<div class="remark">
|
||
<span>统计日期:<span class="span-value">{{ dt }}</span></span>
|
||
<span>客群名称:<span class="span-value">{{ groupName }}</span></span>
|
||
<span>客群模式:<span class="span-value">{{ groupModeText }}</span></span>
|
||
</div>
|
||
|
||
<div class="main_table">
|
||
<el-table v-loading="loading" :data="tableData" style="width: 100%">
|
||
<el-table-column
|
||
v-for="(item, index) in tableColumns"
|
||
:key="index"
|
||
align="center"
|
||
:prop="item.prop"
|
||
:label="item.label"
|
||
show-overflow-tooltip
|
||
:width="item.width || 120"
|
||
>
|
||
<template slot-scope="scope">
|
||
<el-button
|
||
v-if="item.prop === 'custName'"
|
||
type="text"
|
||
class="special-btn"
|
||
@click="openCustomer(scope.row)"
|
||
>
|
||
{{ scope.row[item.prop] || '-' }}
|
||
</el-button>
|
||
<span v-else>{{ scope.row[item.prop] || '-' }}</span>
|
||
</template>
|
||
</el-table-column>
|
||
</el-table>
|
||
<el-pagination
|
||
:page-sizes="[10, 20, 30, 40]"
|
||
:page-size="pageSize"
|
||
layout="->,total,prev,pager,next,sizes"
|
||
:total="total"
|
||
:current-page="pageNum"
|
||
@size-change="handleSizeChange"
|
||
@current-change="handleCurrentChange"
|
||
/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
import {
|
||
getGroupPerformanceLsCustList,
|
||
getGroupPerformanceGsCustList,
|
||
exportGroupPerformanceLsCust,
|
||
exportGroupPerformanceGsCust
|
||
} from '@/api/group/performance';
|
||
import { retailDetailColumns, publicDetailColumns, groupModeDict } from '../list/list';
|
||
import { downloadFiles } from '@/utils';
|
||
|
||
export default {
|
||
name: 'GroupPerformanceCustom',
|
||
data() {
|
||
return {
|
||
loading: false,
|
||
tableData: [],
|
||
total: 0,
|
||
pageSize: 10,
|
||
pageNum: 1,
|
||
tableColumns: [],
|
||
selectedTab: '1',
|
||
dt: '',
|
||
groupId: '',
|
||
groupName: '',
|
||
groupMode: '',
|
||
searchForm: {
|
||
custName: '',
|
||
custIdc: '',
|
||
socialCreditCode: ''
|
||
}
|
||
};
|
||
},
|
||
computed: {
|
||
groupModeText() {
|
||
return groupModeDict[this.groupMode] || '-';
|
||
}
|
||
},
|
||
created() {
|
||
const { type, dt, groupId, groupName, groupMode } = this.$route.query;
|
||
this.selectedTab = type || '1';
|
||
this.dt = dt || '';
|
||
this.groupId = groupId || '';
|
||
this.groupName = groupName || '';
|
||
this.groupMode = groupMode || '';
|
||
this.tableColumns = this.selectedTab === '1' ? retailDetailColumns : publicDetailColumns;
|
||
this.getList();
|
||
},
|
||
methods: {
|
||
getList() {
|
||
this.loading = true;
|
||
const api = this.selectedTab === '1' ? getGroupPerformanceLsCustList : getGroupPerformanceGsCustList;
|
||
const params = {
|
||
groupId: this.groupId,
|
||
dt: this.dt,
|
||
custName: this.searchForm.custName,
|
||
custIdc: this.searchForm.custIdc,
|
||
socialCreditCode: this.searchForm.socialCreditCode,
|
||
pageNum: this.pageNum,
|
||
pageSize: this.pageSize
|
||
};
|
||
api(params).then(res => {
|
||
this.tableData = res.rows;
|
||
this.total = res.total;
|
||
this.loading = false;
|
||
}).catch(() => {
|
||
this.loading = false;
|
||
});
|
||
},
|
||
handleSearch() {
|
||
this.pageNum = 1;
|
||
this.getList();
|
||
},
|
||
handleReset() {
|
||
this.searchForm = {
|
||
custName: '',
|
||
custIdc: '',
|
||
socialCreditCode: ''
|
||
};
|
||
this.pageNum = 1;
|
||
this.getList();
|
||
},
|
||
handleSizeChange(size) {
|
||
this.pageSize = size;
|
||
this.getList();
|
||
},
|
||
handleCurrentChange(page) {
|
||
this.pageNum = page;
|
||
this.getList();
|
||
},
|
||
handleDownload() {
|
||
const api = this.selectedTab === '1' ? exportGroupPerformanceLsCust : exportGroupPerformanceGsCust;
|
||
const fileName = this.selectedTab === '1' ? '零售客群客户明细' : '公司客群客户明细';
|
||
api({
|
||
groupId: this.groupId,
|
||
dt: this.dt,
|
||
custName: this.searchForm.custName,
|
||
custIdc: this.searchForm.custIdc,
|
||
socialCreditCode: this.searchForm.socialCreditCode
|
||
}).then(res => {
|
||
downloadFiles(res, `${fileName}_${new Date().getTime()}.xlsx`);
|
||
});
|
||
},
|
||
returnLastPage() {
|
||
this.$router.replace({
|
||
path: '/center/groupPerformance/list'
|
||
});
|
||
},
|
||
openCustomer(row) {
|
||
const custType = row.custType;
|
||
let path = '';
|
||
const rawId = this.selectedTab === '1' ? row.custIdc : row.socialCreditCode;
|
||
const custId = rawId ? (custType === '0' ? `101${rawId}` : `202${rawId}`) : '';
|
||
if (custType === '0') {
|
||
path = '/360charts/indexcharts';
|
||
} else if (custType === '1') {
|
||
path = '/360charts/commercial/';
|
||
} else if (custType === '2') {
|
||
path = '/360charts/firm/';
|
||
}
|
||
if (!path || !custId) {
|
||
return;
|
||
}
|
||
this.$router.push({
|
||
path: path,
|
||
query: {
|
||
custId,
|
||
selectedTab: custType,
|
||
backUrl: '/center/groupPerformance/list'
|
||
}
|
||
});
|
||
}
|
||
}
|
||
};
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.customer-wrap {
|
||
background-color: #ffffff;
|
||
overflow: hidden;
|
||
box-shadow: 0 3px 8px 0 #00000017;
|
||
}
|
||
|
||
.content-box {
|
||
padding: 20px 24px 24px;
|
||
}
|
||
|
||
.operate-btn {
|
||
margin-bottom: 12px;
|
||
|
||
.el-button + .el-button {
|
||
margin-left: 12px;
|
||
}
|
||
}
|
||
|
||
.remark {
|
||
margin-bottom: 12px;
|
||
color: #666666;
|
||
|
||
span {
|
||
display: inline-block;
|
||
margin-right: 20px;
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
.span-value {
|
||
color: #333333;
|
||
font-weight: 500;
|
||
}
|
||
}
|
||
|
||
.main_table {
|
||
margin-top: 15px;
|
||
}
|
||
|
||
::v-deep .el-input {
|
||
width: 100%;
|
||
}
|
||
|
||
::v-deep .el-pagination {
|
||
margin-top: 15px;
|
||
}
|
||
</style>
|