|
@@ -17,7 +17,13 @@
|
|
</div>
|
|
</div>
|
|
<div class="filter-control">
|
|
<div class="filter-control">
|
|
<span>IP:</span>
|
|
<span>IP:</span>
|
|
- <el-input v-model="listQuery.ip" placeholder="IP" clearable @keyup.enter.native="getList" @clear="getList" />
|
|
|
|
|
|
+ <el-input
|
|
|
|
+ v-model="listQuery.ip"
|
|
|
|
+ placeholder="IP"
|
|
|
|
+ clearable
|
|
|
|
+ @keyup.enter.native="getList"
|
|
|
|
+ @clear="getList"
|
|
|
|
+ />
|
|
</div>
|
|
</div>
|
|
<div class="filter-control">
|
|
<div class="filter-control">
|
|
<span>手机号:</span>
|
|
<span>手机号:</span>
|
|
@@ -43,7 +49,12 @@
|
|
</div>
|
|
</div>
|
|
<div class="filter-control">
|
|
<div class="filter-control">
|
|
<span>公司类型:</span>
|
|
<span>公司类型:</span>
|
|
- <el-select v-model="listQuery.companyType" style="width: 120px" clearable @change="getList">
|
|
|
|
|
|
+ <el-select
|
|
|
|
+ v-model="listQuery.companyType"
|
|
|
|
+ style="width: 120px"
|
|
|
|
+ clearable
|
|
|
|
+ @change="getList"
|
|
|
|
+ >
|
|
<el-option value="" label="请选择" />
|
|
<el-option value="" label="请选择" />
|
|
<el-option :value="1" label="游客" />
|
|
<el-option :value="1" label="游客" />
|
|
<el-option :value="2" label="机构" />
|
|
<el-option :value="2" label="机构" />
|
|
@@ -52,7 +63,12 @@
|
|
</div>
|
|
</div>
|
|
<div class="filter-control">
|
|
<div class="filter-control">
|
|
<span>访问客户端:</span>
|
|
<span>访问客户端:</span>
|
|
- <el-select v-model="listQuery.accessClient" style="width: 120px" clearable @change="getList">
|
|
|
|
|
|
+ <el-select
|
|
|
|
+ v-model="listQuery.accessClient"
|
|
|
|
+ style="width: 120px"
|
|
|
|
+ clearable
|
|
|
|
+ @change="getList"
|
|
|
|
+ >
|
|
<el-option value="" label="请选择" />
|
|
<el-option value="" label="请选择" />
|
|
<el-option :value="0" label="网站" />
|
|
<el-option :value="0" label="网站" />
|
|
<el-option :value="1" label="小程序" />
|
|
<el-option :value="1" label="小程序" />
|
|
@@ -62,27 +78,53 @@
|
|
<span>关联供应商:</span>
|
|
<span>关联供应商:</span>
|
|
<el-select v-model="listQuery.relevanceShop" filterable @change="getList">
|
|
<el-select v-model="listQuery.relevanceShop" filterable @change="getList">
|
|
<el-option value="" label="请选择" />
|
|
<el-option value="" label="请选择" />
|
|
- <el-option v-for="item in supplierList" :key="item.shopId" :label="item.shopName" :value="item.shopName" />
|
|
|
|
|
|
+ <el-option
|
|
|
|
+ v-for="item in supplierList"
|
|
|
|
+ :key="item.shopId"
|
|
|
|
+ :label="item.shopName"
|
|
|
|
+ :value="item.shopName"
|
|
|
|
+ />
|
|
</el-select>
|
|
</el-select>
|
|
</div>
|
|
</div>
|
|
<div class="filter-control">
|
|
<div class="filter-control">
|
|
<span>供应商标签:</span>
|
|
<span>供应商标签:</span>
|
|
- <el-select v-model="tagsList" multiple filterable placeholder="请选择" @change="handleTagsOptions">
|
|
|
|
- <el-option v-for="item in tagsOptions" :key="item.id" :label="item.value" :value="item.value" />
|
|
|
|
|
|
+ <el-select
|
|
|
|
+ v-model="tagsList"
|
|
|
|
+ multiple
|
|
|
|
+ filterable
|
|
|
|
+ placeholder="请选择"
|
|
|
|
+ @change="handleTagsOptions"
|
|
|
|
+ >
|
|
|
|
+ <el-option
|
|
|
|
+ v-for="(item, index) in tagsOptions"
|
|
|
|
+ :key="index"
|
|
|
|
+ :label="item.value"
|
|
|
|
+ :value="item.value"
|
|
|
|
+ />
|
|
</el-select>
|
|
</el-select>
|
|
</div>
|
|
</div>
|
|
<div class="filter-control">
|
|
<div class="filter-control">
|
|
<span>父标签:</span>
|
|
<span>父标签:</span>
|
|
<el-select v-model="listQuery.pageLabels" filterable @change="getList">
|
|
<el-select v-model="listQuery.pageLabels" filterable @change="getList">
|
|
<el-option value="" label="请选择" />
|
|
<el-option value="" label="请选择" />
|
|
- <el-option v-for="item in labelsOptions" :key="item.id" :label="item.value" :value="item.value" />
|
|
|
|
|
|
+ <el-option
|
|
|
|
+ v-for="item in labelsOptions"
|
|
|
|
+ :key="item.id"
|
|
|
|
+ :label="item.value"
|
|
|
|
+ :value="item.value"
|
|
|
|
+ />
|
|
</el-select>
|
|
</el-select>
|
|
</div>
|
|
</div>
|
|
<div class="filter-control">
|
|
<div class="filter-control">
|
|
<span>页面类型:</span>
|
|
<span>页面类型:</span>
|
|
<el-select v-model="listQuery.pageTypes" filterable @change="getList">
|
|
<el-select v-model="listQuery.pageTypes" filterable @change="getList">
|
|
<el-option value="" label="请选择" />
|
|
<el-option value="" label="请选择" />
|
|
- <el-option v-for="item in typesOptions" :key="item.id" :label="item.pageType" :value="item.pageType" />
|
|
|
|
|
|
+ <el-option
|
|
|
|
+ v-for="item in typesOptions"
|
|
|
|
+ :key="item.id"
|
|
|
|
+ :label="item.pageType"
|
|
|
|
+ :value="item.pageType"
|
|
|
|
+ />
|
|
</el-select>
|
|
</el-select>
|
|
</div>
|
|
</div>
|
|
<div v-if="tabsCurrent === 1" class="filter-control">
|
|
<div v-if="tabsCurrent === 1" class="filter-control">
|
|
@@ -99,6 +141,20 @@
|
|
@change="getList"
|
|
@change="getList"
|
|
/>
|
|
/>
|
|
</div>
|
|
</div>
|
|
|
|
+ <div class="filter-control">
|
|
|
|
+ <span>注册时间:</span>
|
|
|
|
+ <el-date-picker
|
|
|
|
+ v-model="time1"
|
|
|
|
+ type="daterange"
|
|
|
|
+ unlink-panels
|
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
|
+ range-separator="至"
|
|
|
|
+ start-placeholder="开始日期"
|
|
|
|
+ end-placeholder="结束日期"
|
|
|
|
+ :picker-options="pickerOptions"
|
|
|
|
+ @change="getList"
|
|
|
|
+ />
|
|
|
|
+ </div>
|
|
<div class="filter-control">
|
|
<div class="filter-control">
|
|
<span>协销:</span>
|
|
<span>协销:</span>
|
|
<el-select v-model="listQuery.headUserId" placeholder="协销" @change="getList">
|
|
<el-select v-model="listQuery.headUserId" placeholder="协销" @change="getList">
|
|
@@ -123,19 +179,43 @@
|
|
</div>
|
|
</div>
|
|
<div class="filter-control">
|
|
<div class="filter-control">
|
|
<el-button type="primary" @click="getList">查询</el-button>
|
|
<el-button type="primary" @click="getList">查询</el-button>
|
|
- <el-button v-permission="'keyword:list:export'" type="primary" @click="handleExport"> 导出 </el-button>
|
|
|
|
|
|
+ <el-button
|
|
|
|
+ v-permission="'keyword:list:export'"
|
|
|
|
+ type="primary"
|
|
|
|
+ @click="handleExport"
|
|
|
|
+ >
|
|
|
|
+ 导出
|
|
|
|
+ </el-button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- 关键词列表 -->
|
|
<!-- 关键词列表 -->
|
|
- <el-table v-loading="isLoading" :data="list" border style="width: 100%" :height="tableHeight">
|
|
|
|
|
|
+ <el-table
|
|
|
|
+ v-loading="isLoading"
|
|
|
|
+ :data="list"
|
|
|
|
+ border
|
|
|
|
+ style="width: 100%"
|
|
|
|
+ :height="tableHeight"
|
|
|
|
+ >
|
|
<el-table-column prop="ip" fixed label="IP" align="center" width="80" />
|
|
<el-table-column prop="ip" fixed label="IP" align="center" width="80" />
|
|
<el-table-column prop="region" fixed label="地区" align="center" width="100" />
|
|
<el-table-column prop="region" fixed label="地区" align="center" width="100" />
|
|
- <el-table-column prop="accessClient" fixed label="访问客户端" align="center" width="70">
|
|
|
|
|
|
+ <el-table-column
|
|
|
|
+ prop="accessClient"
|
|
|
|
+ fixed
|
|
|
|
+ label="访问客户端"
|
|
|
|
+ align="center"
|
|
|
|
+ width="70"
|
|
|
|
+ >
|
|
<template slot-scope="{ row }">
|
|
<template slot-scope="{ row }">
|
|
{{ row.accessClient | accessClientFilters }}
|
|
{{ row.accessClient | accessClientFilters }}
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column prop="companyType" fixed label="公司类型" align="center" width="70">
|
|
|
|
|
|
+ <el-table-column
|
|
|
|
+ prop="companyType"
|
|
|
|
+ fixed
|
|
|
|
+ label="公司类型"
|
|
|
|
+ align="center"
|
|
|
|
+ width="70"
|
|
|
|
+ >
|
|
<template slot-scope="{ row }">
|
|
<template slot-scope="{ row }">
|
|
{{ row.companyType | companyTypeFilters }}
|
|
{{ row.companyType | companyTypeFilters }}
|
|
</template>
|
|
</template>
|
|
@@ -144,11 +224,11 @@
|
|
<template slot-scope="{ row }">
|
|
<template slot-scope="{ row }">
|
|
<template v-if="row.companyType === '2'">
|
|
<template v-if="row.companyType === '2'">
|
|
<a style="color: #2fa4e7" target="_blank" :href="handleClubHrefLink(row)">
|
|
<a style="color: #2fa4e7" target="_blank" :href="handleClubHrefLink(row)">
|
|
- {{ row.corporateName ? row.corporateName : '---' }}
|
|
|
|
|
|
+ {{ row.corporateName ? row.corporateName : "---" }}
|
|
</a>
|
|
</a>
|
|
</template>
|
|
</template>
|
|
<template v-else>
|
|
<template v-else>
|
|
- {{ row.corporateName ? row.corporateName : '---' }}
|
|
|
|
|
|
+ {{ row.corporateName ? row.corporateName : "---" }}
|
|
</template>
|
|
</template>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
@@ -156,29 +236,34 @@
|
|
<template slot-scope="{ row }">
|
|
<template slot-scope="{ row }">
|
|
<template v-if="row.companyType === '2'">
|
|
<template v-if="row.companyType === '2'">
|
|
<a style="color: #2fa4e7" target="_blank" :href="handleClubHrefLink(row)">
|
|
<a style="color: #2fa4e7" target="_blank" :href="handleClubHrefLink(row)">
|
|
- {{ row.contacts ? row.contacts : '---' }}
|
|
|
|
|
|
+ {{ row.contacts ? row.contacts : "---" }}
|
|
</a>
|
|
</a>
|
|
</template>
|
|
</template>
|
|
<template v-else>
|
|
<template v-else>
|
|
- {{ row.contacts ? row.contacts : '---' }}
|
|
|
|
|
|
+ {{ row.contacts ? row.contacts : "---" }}
|
|
</template>
|
|
</template>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
<el-table-column prop="phoneNumber" label="手机号" align="center" width="110">
|
|
<el-table-column prop="phoneNumber" label="手机号" align="center" width="110">
|
|
<template slot-scope="{ row }">
|
|
<template slot-scope="{ row }">
|
|
- {{ row.phoneNumber ? row.phoneNumber : '---' }}
|
|
|
|
|
|
+ {{ row.phoneNumber ? row.phoneNumber : "---" }}
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
<el-table-column prop="spName" label="所属协销" align="center" width="100">
|
|
<el-table-column prop="spName" label="所属协销" align="center" width="100">
|
|
<template slot-scope="{ row }">
|
|
<template slot-scope="{ row }">
|
|
- {{ row.spName ? row.spName : '---' }}
|
|
|
|
|
|
+ {{ row.spName ? row.spName : "---" }}
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column prop="relevanceShop" label="关联供应商" align="center" width="210">
|
|
|
|
|
|
+ <el-table-column
|
|
|
|
+ prop="relevanceShop"
|
|
|
|
+ label="关联供应商"
|
|
|
|
+ align="center"
|
|
|
|
+ width="210"
|
|
|
|
+ >
|
|
<template slot-scope="{ row }">
|
|
<template slot-scope="{ row }">
|
|
<template v-if="row.relevanceShop">
|
|
<template v-if="row.relevanceShop">
|
|
<p v-for="item in handleRelevanceShop(row.relevanceShop)" :key="item">
|
|
<p v-for="item in handleRelevanceShop(row.relevanceShop)" :key="item">
|
|
- {{ item ? item : '---' }}
|
|
|
|
|
|
+ {{ item ? item : "---" }}
|
|
</p>
|
|
</p>
|
|
</template>
|
|
</template>
|
|
<p v-else>---</p>
|
|
<p v-else>---</p>
|
|
@@ -187,25 +272,32 @@
|
|
<el-table-column prop="spName" label="供应商标签" align="center" width="120">
|
|
<el-table-column prop="spName" label="供应商标签" align="center" width="120">
|
|
<template slot-scope="{ row }">
|
|
<template slot-scope="{ row }">
|
|
<el-popover placement="top-start" width="400" trigger="hover">
|
|
<el-popover placement="top-start" width="400" trigger="hover">
|
|
- <span>{{ row.label ? row.label : '---' }}</span>
|
|
|
|
- <span slot="reference">{{ row.label ? row.label.substr(0, 9) + '...' : '--' }}</span>
|
|
|
|
|
|
+ <span>{{ row.label ? row.label : "---" }}</span>
|
|
|
|
+ <span slot="reference">{{
|
|
|
|
+ row.label ? row.label.substr(0, 9) + "..." : "--"
|
|
|
|
+ }}</span>
|
|
</el-popover>
|
|
</el-popover>
|
|
<!-- {{ row.label ? row.label : '---' }} -->
|
|
<!-- {{ row.label ? row.label : '---' }} -->
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
<el-table-column prop="addTime" label="注册时间" align="center" width="100">
|
|
<el-table-column prop="addTime" label="注册时间" align="center" width="100">
|
|
<template slot-scope="{ row }">
|
|
<template slot-scope="{ row }">
|
|
- {{ row.addTime ? row.addTime : '---' }}
|
|
|
|
|
|
+ {{ row.addTime ? row.addTime : "---" }}
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
<el-table-column prop="numbers" label="访问页面数量" align="center" width="50">
|
|
<el-table-column prop="numbers" label="访问页面数量" align="center" width="50">
|
|
<template slot-scope="{ row }">
|
|
<template slot-scope="{ row }">
|
|
- {{ row.numbers ? row.numbers : '0' }}
|
|
|
|
|
|
+ {{ row.numbers ? row.numbers : "0" }}
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
<el-table-column prop="accessDuration" label="总时长" align="center" width="80" />
|
|
<el-table-column prop="accessDuration" label="总时长" align="center" width="80" />
|
|
<el-table-column prop="accessDate" label="访问日期" align="center" width="100" />
|
|
<el-table-column prop="accessDate" label="访问日期" align="center" width="100" />
|
|
- <el-table-column prop="lastAccessTime" label="最后访问时间" align="center" width="100" />
|
|
|
|
|
|
+ <el-table-column
|
|
|
|
+ prop="lastAccessTime"
|
|
|
|
+ label="最后访问时间"
|
|
|
|
+ align="center"
|
|
|
|
+ width="100"
|
|
|
|
+ />
|
|
<el-table-column fixed="right" label="操作" align="center" width="120">
|
|
<el-table-column fixed="right" label="操作" align="center" width="120">
|
|
<template slot-scope="{ row }">
|
|
<template slot-scope="{ row }">
|
|
<el-button type="primary" size="mini" @click="handleRecordDetail(row)">查看详情</el-button>
|
|
<el-button type="primary" size="mini" @click="handleRecordDetail(row)">查看详情</el-button>
|
|
@@ -223,6 +315,13 @@
|
|
@pagination="fetchRecordList"
|
|
@pagination="fetchRecordList"
|
|
/>
|
|
/>
|
|
</el-tabs>
|
|
</el-tabs>
|
|
|
|
+ <!-- 详情弹窗 -->
|
|
|
|
+ <detail-dialog
|
|
|
|
+ v-if="dialogVisible"
|
|
|
|
+ ref="detailDialog"
|
|
|
|
+ :detail-query="detailQuery"
|
|
|
|
+ @cancel="handleCancel"
|
|
|
|
+ />
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
|
|
|
|
@@ -233,6 +332,7 @@ import { fetchShopRelevanceList, searchBehaviorList } from '@/api/user/supplier/
|
|
import { export_json_to_excel } from '@/vendor/Export2Excel'
|
|
import { export_json_to_excel } from '@/vendor/Export2Excel'
|
|
import pickerOptions from '@/utils/time-picker.js'
|
|
import pickerOptions from '@/utils/time-picker.js'
|
|
import { getServiceList } from '@/api/library/keyword'
|
|
import { getServiceList } from '@/api/library/keyword'
|
|
|
|
+import DetailDialog from './components/detail-dialog'
|
|
const defaultListQuery = {
|
|
const defaultListQuery = {
|
|
todayType: 0, // 0 今日数据 1 以往数据
|
|
todayType: 0, // 0 今日数据 1 以往数据
|
|
ip: '', // 访问人ID
|
|
ip: '', // 访问人ID
|
|
@@ -249,6 +349,8 @@ const defaultListQuery = {
|
|
pageLabels: '', // 父级标签
|
|
pageLabels: '', // 父级标签
|
|
startTime: '',
|
|
startTime: '',
|
|
endTime: '',
|
|
endTime: '',
|
|
|
|
+ registerStartTime: '', // 注册开始时间
|
|
|
|
+ registerEndTime: '', // 注册结束时间
|
|
pageNum: 1,
|
|
pageNum: 1,
|
|
pageSize: 100,
|
|
pageSize: 100,
|
|
headUserId: '', // 协销id
|
|
headUserId: '', // 协销id
|
|
@@ -256,6 +358,9 @@ const defaultListQuery = {
|
|
}
|
|
}
|
|
export default {
|
|
export default {
|
|
name: 'RecordList',
|
|
name: 'RecordList',
|
|
|
|
+ components: {
|
|
|
|
+ DetailDialog
|
|
|
|
+ },
|
|
filters: {
|
|
filters: {
|
|
companyTypeFilters(value) {
|
|
companyTypeFilters(value) {
|
|
// 公司类型
|
|
// 公司类型
|
|
@@ -281,6 +386,7 @@ export default {
|
|
isLoading: true,
|
|
isLoading: true,
|
|
pickerOptions,
|
|
pickerOptions,
|
|
time: [],
|
|
time: [],
|
|
|
|
+ time1: [],
|
|
listQuery: Object.assign({}, defaultListQuery),
|
|
listQuery: Object.assign({}, defaultListQuery),
|
|
shopListQuery: {
|
|
shopListQuery: {
|
|
shopName: '',
|
|
shopName: '',
|
|
@@ -300,7 +406,9 @@ export default {
|
|
sellerList: [], // 协销列表
|
|
sellerList: [], // 协销列表
|
|
tabsCurrent: 0,
|
|
tabsCurrent: 0,
|
|
tableHeight: window.innerHeight - 120, // 表格动态高度
|
|
tableHeight: window.innerHeight - 120, // 表格动态高度
|
|
- screenHeight: window.innerHeight // 内容区域高度
|
|
|
|
|
|
+ screenHeight: window.innerHeight, // 内容区域高度
|
|
|
|
+ dialogVisible: false,
|
|
|
|
+ detailQuery: {}
|
|
}
|
|
}
|
|
},
|
|
},
|
|
computed: {},
|
|
computed: {},
|
|
@@ -395,6 +503,13 @@ export default {
|
|
this.listQuery.startTime = ''
|
|
this.listQuery.startTime = ''
|
|
this.listQuery.endTime = ''
|
|
this.listQuery.endTime = ''
|
|
}
|
|
}
|
|
|
|
+ if (this.time1 && this.time1.length > 0) {
|
|
|
|
+ this.listQuery.registerStartTime = this.time1[0]
|
|
|
|
+ this.listQuery.registerEndTime = this.time1[1]
|
|
|
|
+ } else {
|
|
|
|
+ this.listQuery.registerStartTime = ''
|
|
|
|
+ this.listQuery.registerEndTime = ''
|
|
|
|
+ }
|
|
this.fetchRecordList()
|
|
this.fetchRecordList()
|
|
this.fetchShopRelevanceList()
|
|
this.fetchShopRelevanceList()
|
|
this.searchBehaviorList()
|
|
this.searchBehaviorList()
|
|
@@ -458,17 +573,24 @@ export default {
|
|
},
|
|
},
|
|
// 查看详情
|
|
// 查看详情
|
|
handleRecordDetail(row) {
|
|
handleRecordDetail(row) {
|
|
- this.$router.push({
|
|
|
|
- path: '/user/detail-list',
|
|
|
|
- query: { ip: row.ip, accessDate: row.accessDate, userId: row.userId }
|
|
|
|
- })
|
|
|
|
|
|
+ console.log('111111111')
|
|
|
|
+ this.detailQuery = { ip: row.ip, accessDate: row.accessDate, userId: row.userId }
|
|
|
|
+ this.dialogVisible = true
|
|
|
|
+ // this.$router.push({
|
|
|
|
+ // path: '/user/detail-list',
|
|
|
|
+ // query: { ip: row.ip, accessDate: row.accessDate, userId: row.userId }
|
|
|
|
+ // })
|
|
|
|
+ },
|
|
|
|
+ // 关闭详情弹窗
|
|
|
|
+ handleCancel() {
|
|
|
|
+ this.dialogVisible = false
|
|
},
|
|
},
|
|
-
|
|
|
|
// 导出
|
|
// 导出
|
|
async handleExport() {
|
|
async handleExport() {
|
|
if (this.tabsCurrent === 0) {
|
|
if (this.tabsCurrent === 0) {
|
|
// 导出今日数据
|
|
// 导出今日数据
|
|
- const url = process.env.VUE_APP_BASE_API + '/user/behavior/exportToday?todayType=0'
|
|
|
|
|
|
+ const url =
|
|
|
|
+ process.env.VUE_APP_BASE_API + '/user/behavior/exportToday?todayType=0'
|
|
downloadWithUrl(url, '用户行为记录')
|
|
downloadWithUrl(url, '用户行为记录')
|
|
} else {
|
|
} else {
|
|
const url =
|
|
const url =
|