|
@ -9,22 +9,6 @@ |
|
|
@keyup.enter.native="handleQuery" |
|
|
@keyup.enter.native="handleQuery" |
|
|
/> |
|
|
/> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
<el-form-item label="动作标识" prop="action"> |
|
|
|
|
|
<el-input |
|
|
|
|
|
v-model="queryParams.action" |
|
|
|
|
|
placeholder="请输入具体动作标识" |
|
|
|
|
|
clearable |
|
|
|
|
|
@keyup.enter.native="handleQuery" |
|
|
|
|
|
/> |
|
|
|
|
|
</el-form-item> |
|
|
|
|
|
<el-form-item label="目标ID" prop="targetId"> |
|
|
|
|
|
<el-input |
|
|
|
|
|
v-model="queryParams.targetId" |
|
|
|
|
|
placeholder="请输入目标对象ID" |
|
|
|
|
|
clearable |
|
|
|
|
|
@keyup.enter.native="handleQuery" |
|
|
|
|
|
/> |
|
|
|
|
|
</el-form-item> |
|
|
|
|
|
<el-form-item label="IP地址" prop="ip"> |
|
|
<el-form-item label="IP地址" prop="ip"> |
|
|
<el-input |
|
|
<el-input |
|
|
v-model="queryParams.ip" |
|
|
v-model="queryParams.ip" |
|
@ -33,6 +17,26 @@ |
|
|
@keyup.enter.native="handleQuery" |
|
|
@keyup.enter.native="handleQuery" |
|
|
/> |
|
|
/> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
|
|
|
<el-form-item label="行为类型" prop="behaviorType"> |
|
|
|
|
|
<el-select v-model="queryParams.behaviorType" placeholder="请选择行为类型" clearable> |
|
|
|
|
|
<el-option |
|
|
|
|
|
v-for="dict in behaviorTypeOptions" |
|
|
|
|
|
:key="dict.dictValue" |
|
|
|
|
|
:label="dict.dictLabel" |
|
|
|
|
|
:value="dict.dictValue" |
|
|
|
|
|
/> |
|
|
|
|
|
</el-select> |
|
|
|
|
|
</el-form-item> |
|
|
|
|
|
<el-form-item label="设备类型" prop="deviceType"> |
|
|
|
|
|
<el-select v-model="queryParams.deviceType" placeholder="请选择设备类型" clearable> |
|
|
|
|
|
<el-option |
|
|
|
|
|
v-for="dict in deviceTypeOptions" |
|
|
|
|
|
:key="dict.dictValue" |
|
|
|
|
|
:label="dict.dictLabel" |
|
|
|
|
|
:value="dict.dictValue" |
|
|
|
|
|
/> |
|
|
|
|
|
</el-select> |
|
|
|
|
|
</el-form-item> |
|
|
<el-form-item label="平台类型" prop="platform"> |
|
|
<el-form-item label="平台类型" prop="platform"> |
|
|
<el-select v-model="queryParams.platform" placeholder="请选择平台类型" clearable> |
|
|
<el-select v-model="queryParams.platform" placeholder="请选择平台类型" clearable> |
|
|
<el-option |
|
|
<el-option |
|
@ -44,7 +48,10 @@ |
|
|
</el-select> |
|
|
</el-select> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
<el-form-item> |
|
|
<el-form-item> |
|
|
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('common.button.search') }}</el-button> |
|
|
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ |
|
|
|
|
|
$t('common.button.search') |
|
|
|
|
|
}} |
|
|
|
|
|
</el-button> |
|
|
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('common.button.reset') }}</el-button> |
|
|
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('common.button.reset') }}</el-button> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
</el-form> |
|
|
</el-form> |
|
@ -103,16 +110,29 @@ |
|
|
<el-table-column type="selection" width="55" align="center"/> |
|
|
<el-table-column type="selection" width="55" align="center"/> |
|
|
<el-table-column label="ID" align="center" prop="id" v-if="true"/> |
|
|
<el-table-column label="ID" align="center" prop="id" v-if="true"/> |
|
|
<el-table-column label="用户ID" align="center" prop="userId"/> |
|
|
<el-table-column label="用户ID" align="center" prop="userId"/> |
|
|
<el-table-column label="行为类型" align="center" prop="behaviorType"/> |
|
|
<el-table-column label="用户名" align="center" prop="userName"/> |
|
|
<el-table-column label="动作标识" align="center" prop="action"/> |
|
|
<el-table-column label="行为类型" align="center" prop="behaviorType"> |
|
|
<el-table-column label="目标ID" align="center" prop="targetId"/> |
|
|
<template slot-scope="scope"> |
|
|
<el-table-column label="目标对象类型" align="center" prop="targetType"/> |
|
|
<span>{{ getBehaviorTypeLabel(scope.row.behaviorType) }}</span> |
|
|
|
|
|
</template> |
|
|
|
|
|
</el-table-column> |
|
|
|
|
|
<!-- <el-table-column label="动作标识" align="center" prop="action"/> --> |
|
|
|
|
|
<!-- <el-table-column label="目标ID" align="center" prop="targetId"/> |
|
|
|
|
|
<el-table-column label="目标对象类型" align="center" prop="targetType"/> --> |
|
|
<el-table-column label="IP地址" align="center" prop="ip"/> |
|
|
<el-table-column label="IP地址" align="center" prop="ip"/> |
|
|
<el-table-column label="浏览器" align="center" prop="ua"/> |
|
|
<el-table-column label="浏览器" align="center" prop="ua"/> |
|
|
<el-table-column label="设备类型" align="center" prop="deviceType"/> |
|
|
<el-table-column label="设备类型" align="center" prop="deviceType"> |
|
|
<el-table-column label="平台类型" align="center" prop="platform"/> |
|
|
<template slot-scope="scope"> |
|
|
<el-table-column label="地理位置" align="center" prop="location"/> |
|
|
<span>{{ getDeviceTypeLabel(scope.row.deviceType) }}</span> |
|
|
<!-- <el-table-column label="扩展字段,用于存储额外信息" align="center" prop="extraInfo"/>--> |
|
|
</template> |
|
|
|
|
|
</el-table-column> |
|
|
|
|
|
<el-table-column label="平台类型" align="center" prop="platform"> |
|
|
|
|
|
<template slot-scope="scope"> |
|
|
|
|
|
<span>{{ getPlatformLabel(scope.row.platform) }}</span> |
|
|
|
|
|
</template> |
|
|
|
|
|
</el-table-column> |
|
|
|
|
|
<!-- <el-table-column label="地理位置" align="center" prop="location"/> --> |
|
|
|
|
|
<!-- <el-table-column label="扩展字段,用于存储额外信息" align="center" prop="extraInfo"/> --> |
|
|
<el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width"> |
|
|
<el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width"> |
|
|
<template slot-scope="scope"> |
|
|
<template slot-scope="scope"> |
|
|
<el-button |
|
|
<el-button |
|
@ -156,24 +176,54 @@ |
|
|
<el-form-item label="关联用户ID" prop="userId"> |
|
|
<el-form-item label="关联用户ID" prop="userId"> |
|
|
<el-input v-model="form.userId" placeholder="请输入关联用户ID"/> |
|
|
<el-input v-model="form.userId" placeholder="请输入关联用户ID"/> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
<el-form-item label="具体动作标识" prop="action"> |
|
|
<!-- <el-form-item label="具体动作标识" prop="action"> |
|
|
<el-input v-model="form.action" placeholder="请输入具体动作标识"/> |
|
|
<el-input v-model="form.action" placeholder="请输入具体动作标识"/> |
|
|
</el-form-item> |
|
|
</el-form-item> --> |
|
|
<el-form-item label="目标对象ID" prop="targetId"> |
|
|
<!-- <el-form-item label="目标对象ID" prop="targetId"> |
|
|
<el-input v-model="form.targetId" placeholder="请输入目标对象ID"/> |
|
|
<el-input v-model="form.targetId" placeholder="请输入目标对象ID"/> |
|
|
</el-form-item> |
|
|
</el-form-item> --> |
|
|
<el-form-item label="客户端IP地址" prop="ip"> |
|
|
<el-form-item label="客户端IP地址" prop="ip"> |
|
|
<el-input v-model="form.ip" placeholder="请输入客户端IP地址"/> |
|
|
<el-input v-model="form.ip" placeholder="请输入客户端IP地址"/> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
<el-form-item label="浏览器" prop="ua"> |
|
|
<el-form-item label="浏览器" prop="ua"> |
|
|
<el-input v-model="form.ua" type="textarea" placeholder="请输入内容"/> |
|
|
<el-input v-model="form.ua" placeholder="请输入内容"/> |
|
|
|
|
|
</el-form-item> |
|
|
|
|
|
<el-form-item label="行为类型" prop="behaviorType"> |
|
|
|
|
|
<el-select v-model="form.behaviorType" placeholder="请选择行为类型"> |
|
|
|
|
|
<el-option |
|
|
|
|
|
v-for="dict in behaviorTypeOptions" |
|
|
|
|
|
:key="dict.dictValue" |
|
|
|
|
|
:label="dict.dictLabel" |
|
|
|
|
|
:value="dict.dictValue" |
|
|
|
|
|
/> |
|
|
|
|
|
</el-select> |
|
|
|
|
|
</el-form-item> |
|
|
|
|
|
<el-form-item label="设备类型" prop="deviceType"> |
|
|
|
|
|
<el-select v-model="form.deviceType" placeholder="请选择设备类型"> |
|
|
|
|
|
<el-option |
|
|
|
|
|
v-for="dict in deviceTypeOptions" |
|
|
|
|
|
:key="dict.dictValue" |
|
|
|
|
|
:label="dict.dictLabel" |
|
|
|
|
|
:value="dict.dictValue" |
|
|
|
|
|
/> |
|
|
|
|
|
</el-select> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
<el-form-item label="平台类型" prop="platform"> |
|
|
<el-form-item label="平台类型" prop="platform"> |
|
|
<el-input v-model="form.platform" placeholder="请输入平台类型"/> |
|
|
<el-select v-model="form.platform" placeholder="请选择平台类型"> |
|
|
|
|
|
<el-option |
|
|
|
|
|
v-for="dict in platformOptions" |
|
|
|
|
|
:key="dict.dictValue" |
|
|
|
|
|
:label="dict.dictLabel" |
|
|
|
|
|
:value="dict.dictValue" |
|
|
|
|
|
/> |
|
|
|
|
|
</el-select> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
</el-form> |
|
|
</el-form> |
|
|
<div slot="footer" class="dialog-footer"> |
|
|
<div slot="footer" class="dialog-footer"> |
|
|
<el-button :loading="buttonLoading" type="primary" @click="submitForm">{{ $t('common.button.confirm') }}</el-button> |
|
|
<el-button :loading="buttonLoading" type="primary" @click="submitForm">{{ |
|
|
|
|
|
$t('common.button.confirm') |
|
|
|
|
|
}} |
|
|
|
|
|
</el-button> |
|
|
<el-button @click="cancel">{{ $t('common.button.cancel') }}</el-button> |
|
|
<el-button @click="cancel">{{ $t('common.button.cancel') }}</el-button> |
|
|
</div> |
|
|
</div> |
|
|
</el-dialog> |
|
|
</el-dialog> |
|
@ -184,20 +234,29 @@ |
|
|
<el-form-item label="关联用户ID:"> |
|
|
<el-form-item label="关联用户ID:"> |
|
|
{{ form.userId }} |
|
|
{{ form.userId }} |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
<el-form-item label="具体动作标识:"> |
|
|
<el-form-item label="用户名:"> |
|
|
{{ form.action }} |
|
|
{{ form.userName }} |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
<el-form-item label="目标对象ID:"> |
|
|
<!-- <el-form-item label="具体动作标识:"> |
|
|
|
|
|
{{ form.action }} |
|
|
|
|
|
</el-form-item> --> |
|
|
|
|
|
<!-- <el-form-item label="目标对象ID:"> |
|
|
{{ form.targetId }} |
|
|
{{ form.targetId }} |
|
|
</el-form-item> |
|
|
</el-form-item> --> |
|
|
<el-form-item label="客户端IP地址:"> |
|
|
<el-form-item label="客户端IP地址:"> |
|
|
{{ form.ip }} |
|
|
{{ form.ip }} |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
<el-form-item label="浏览器:"> |
|
|
<el-form-item label="浏览器:"> |
|
|
{{ form.ua }} |
|
|
{{ form.ua }} |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
|
|
|
<el-form-item label="行为类型:"> |
|
|
|
|
|
{{ getBehaviorTypeLabel(form.behaviorType) }} |
|
|
|
|
|
</el-form-item> |
|
|
|
|
|
<el-form-item label="设备类型:"> |
|
|
|
|
|
{{ getDeviceTypeLabel(form.deviceType) }} |
|
|
|
|
|
</el-form-item> |
|
|
<el-form-item label="平台类型:"> |
|
|
<el-form-item label="平台类型:"> |
|
|
{{ form.platform }} |
|
|
{{ getPlatformLabel(form.platform) }} |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
</el-form> |
|
|
</el-form> |
|
|
<div slot="footer" class="dialog-footer"> |
|
|
<div slot="footer" class="dialog-footer"> |
|
@ -261,15 +320,29 @@ export default { |
|
|
// 表单参数 |
|
|
// 表单参数 |
|
|
form: {}, |
|
|
form: {}, |
|
|
platformOptions: [ |
|
|
platformOptions: [ |
|
|
{dictValue: 'PC', dictLabel: 'PC'}, |
|
|
{dictValue: '1', dictLabel: 'Web'}, |
|
|
{dictValue: 'Mobile', dictLabel: 'Mobile'}, |
|
|
{dictValue: '2', dictLabel: 'iOS'}, |
|
|
{dictValue: 'Tablet', dictLabel: 'Tablet'}, |
|
|
{dictValue: '3', dictLabel: 'Android'}, |
|
|
{dictValue: 'WebApp', dictLabel: 'WebApp'}, |
|
|
], |
|
|
{dictValue: 'Other', dictLabel: 'Other'} |
|
|
behaviorTypeOptions: [ |
|
|
|
|
|
{dictValue: '1', dictLabel: '登录'}, |
|
|
|
|
|
{dictValue: '2', dictLabel: '支付'}, |
|
|
|
|
|
{dictValue: '3', dictLabel: '实名认证'}, |
|
|
|
|
|
{dictValue: '4', dictLabel: '点击操作'}, |
|
|
|
|
|
{dictValue: '5', dictLabel: '访问页面'}, |
|
|
|
|
|
{dictValue: '6', dictLabel: '登出'} |
|
|
|
|
|
], |
|
|
|
|
|
deviceTypeOptions: [ |
|
|
|
|
|
{dictValue: '1', dictLabel: 'PC'}, |
|
|
|
|
|
{dictValue: '2', dictLabel: '移动设备'}, |
|
|
|
|
|
{dictValue: '3', dictLabel: '平板设备'} |
|
|
], |
|
|
], |
|
|
// 表单校验 |
|
|
// 表单校验 |
|
|
rules: { |
|
|
rules: { |
|
|
} |
|
|
userId: [ |
|
|
|
|
|
{ required: true, message: "用户关联ID不能为空", trigger: "blur" }, |
|
|
|
|
|
{ pattern: /^\d+$/, message: "用户关联ID必须为数字", trigger: "blur" } |
|
|
|
|
|
],} |
|
|
}; |
|
|
}; |
|
|
}, |
|
|
}, |
|
|
created() { |
|
|
created() { |
|
@ -400,7 +473,23 @@ export default { |
|
|
this.download('business/userBehaviorLog/export', { |
|
|
this.download('business/userBehaviorLog/export', { |
|
|
...this.queryParams |
|
|
...this.queryParams |
|
|
}, `userBehaviorLog_${new Date().getTime()}.xlsx`) |
|
|
}, `userBehaviorLog_${new Date().getTime()}.xlsx`) |
|
|
|
|
|
}, |
|
|
|
|
|
// 获取行为类型显示值 |
|
|
|
|
|
getBehaviorTypeLabel(value) { |
|
|
|
|
|
const item = this.behaviorTypeOptions.find(dict => dict.dictValue == value); |
|
|
|
|
|
return item ? item.dictLabel : value; |
|
|
|
|
|
}, |
|
|
|
|
|
// 获取设备类型显示值 |
|
|
|
|
|
getDeviceTypeLabel(value) { |
|
|
|
|
|
const item = this.deviceTypeOptions.find(dict => dict.dictValue == value); |
|
|
|
|
|
return item ? item.dictLabel : value; |
|
|
|
|
|
}, |
|
|
|
|
|
// 获取平台类型显示值 |
|
|
|
|
|
getPlatformLabel(value) { |
|
|
|
|
|
const item = this.platformOptions.find(dict => dict.dictValue == value); |
|
|
|
|
|
return item ? item.dictLabel : value; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
}; |
|
|
}; |
|
|
</script> |
|
|
</script> |
|
|