Browse Source

客服和用户行为国际化函数替换

main
yyd 1 month ago
parent
commit
2e8aadc8cd
  1. 14
      src/languages/zh.js
  2. 16
      src/views/business/customerServiceChat/index.vue
  3. 108
      src/views/business/faq/index.vue
  4. 110
      src/views/business/userBehaviorLog/index.vue
  5. 90
      src/views/business/userBehaviorRuleRisk/index.vue
  6. 96
      src/views/business/userBehaviorStats/index.vue

14
src/languages/zh.js

@ -828,15 +828,6 @@ export default {
userCredit: {}, userCredit: {},
userCreditRecord: {}, userCreditRecord: {},
}, },
behavior: {
userBehaviorLog: {},
userBehaviorStats: {},
rule: {
userBehaviorRuleRisk: {},
userBehaviorRuleAction: {},
},
behaviorModelInfo: {},
},
order: { order: {
dealPayment: {}, dealPayment: {},
dealReceipt: {}, dealReceipt: {},
@ -949,11 +940,6 @@ export default {
receipt: '收款', receipt: '收款',
withdrawal: '提现', withdrawal: '提现',
}, },
},
customerSupport: {
commonFeedback: {},
customerServiceChat: {},
faq: {},
} }
} }
} }

16
src/views/business/customerServiceChat/index.vue

@ -103,12 +103,8 @@
<span>{{ parseTime(scope.row.timestamp, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.timestamp, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="是否已读" align="center" prop="isRead"> <el-table-column :label="$t('business.customerSupport.customerServiceChat.isRead')" align="center" prop="isRead"/>
<template slot-scope="scope"> <el-table-column :label="$t('business.customerSupport.customerServiceChat.operation')" align="center" width="200" class-name="small-padding fixed-width">
<span>{{ scope.row.isRead === '1' ? '是' : '否' }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-view" @click="handleDetail(scope.row)">{{ $t('common.button.detail') }}</el-button> <el-button size="mini" type="text" icon="el-icon-view" @click="handleDetail(scope.row)">{{ $t('common.button.detail') }}</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['business:customerServiceChat:edit']">{{ $t('common.button.edit') }}</el-button> <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['business:customerServiceChat:edit']">{{ $t('common.button.edit') }}</el-button>
@ -146,10 +142,7 @@
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="是否已读" prop="isRead"> <el-form-item label="是否已读" prop="isRead">
<el-select v-model="form.isRead" placeholder="请选择是否已读"> <el-input v-model="form.isRead" placeholder="请输入是否已读"/>
<el-option label="是" value="1"></el-option>
<el-option label="否" value="0"></el-option>
</el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
@ -169,6 +162,7 @@
</el-form-item> </el-form-item>
<el-form-item label="消息内容:"> <el-form-item label="消息内容:">
{{ form.message }} {{ form.message }}
</el-form-item> </el-form-item>
<el-form-item label="消息发送时间" prop="timestamp"> <el-form-item label="消息发送时间" prop="timestamp">
<el-date-picker clearable <el-date-picker clearable
@ -179,7 +173,7 @@
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="是否已读:"> <el-form-item label="是否已读:">
{{ form.isRead === '1' ? '是' : '否'}} {{ form.isRead }}
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">

108
src/views/business/faq/index.vue

@ -1,25 +1,25 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="问题描述" prop="question"> <el-form-item :label="$t('business.customerSupport.faq.questionDesc')" prop="question">
<el-input <el-input
v-model="queryParams.question" v-model="queryParams.question"
placeholder="请输入问题描述" :placeholder="$t('business.customerSupport.faq.enterQuestionDesc')"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="答案内容" prop="answer"> <el-form-item :label="$t('business.customerSupport.faq.answerContent')" prop="answer">
<el-input <el-input
v-model="queryParams.answer" v-model="queryParams.answer"
placeholder="请输入答案内容" :placeholder="$t('business.customerSupport.faq.enterAnswerContent')"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="问题分类" prop="category"> <el-form-item :label="$t('business.customerSupport.faq.category')" prop="category">
<!-- 下拉框--> <!-- 下拉框-->
<el-select v-model="queryParams.category" placeholder="请选择问题分类" clearable> <el-select v-model="queryParams.category" :placeholder="$t('business.customerSupport.faq.selectCategory')" clearable>
<el-option <el-option
v-for="dict in categoryOptions" v-for="dict in categoryOptions"
:key="dict.dictValue" :key="dict.dictValue"
@ -28,9 +28,9 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item :label="$t('business.customerSupport.faq.status')" prop="status">
<!-- 下拉框 --> <!-- 下拉框 -->
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable> <el-select v-model="queryParams.status" :placeholder="$t('business.customerSupport.faq.selectStatus')" clearable>
<el-option <el-option
v-for="dict in statusOptions" v-for="dict in statusOptions"
:key="dict.dictValue" :key="dict.dictValue"
@ -41,10 +41,10 @@
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{
$t('common.button.search') $t('business.customerSupport.faq.search')
}} }}
</el-button> </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('business.customerSupport.faq.reset') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -57,7 +57,7 @@
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['business:faq:add']" v-hasPermi="['business:faq:add']"
>{{ $t('common.button.add') }} >{{ $t('business.customerSupport.faq.add') }}
</el-button> </el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
@ -69,7 +69,7 @@
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['business:faq:edit']" v-hasPermi="['business:faq:edit']"
>{{ $t('common.button.edit') }} >{{ $t('business.customerSupport.faq.edit') }}
</el-button> </el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
@ -81,7 +81,7 @@
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['business:faq:remove']" v-hasPermi="['business:faq:remove']"
>{{ $t('common.button.delete') }} >{{ $t('business.customerSupport.faq.delete') }}
</el-button> </el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
@ -92,7 +92,7 @@
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['business:faq:export']" v-hasPermi="['business:faq:export']"
>{{ $t('common.button.export') }} >{{ $t('business.customerSupport.faq.export') }}
</el-button> </el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
@ -100,27 +100,27 @@
<el-table v-loading="loading" :data="faqList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="faqList" @selection-change="handleSelectionChange">
<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="$t('business.customerSupport.faq.id')" align="center" prop="id" v-if="true"/>
<el-table-column label="问题描述" align="center" prop="question"/> <el-table-column :label="$t('business.customerSupport.faq.questionDesc')" align="center" prop="question"/>
<el-table-column label="答案内容" align="center" prop="answer"/> <el-table-column :label="$t('business.customerSupport.faq.answerContent')" align="center" prop="answer"/>
<el-table-column label="问题分类" align="center" prop="category"> <el-table-column :label="$t('business.customerSupport.faq.category')" align="center" prop="category">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ formatCategory(scope.row.category) }}</span> <span>{{ formatCategory(scope.row.category) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="状态" align="center" prop="status"> <el-table-column :label="$t('business.customerSupport.faq.status')" align="center" prop="status">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ formatStatus(scope.row.status) }}</span> <span>{{ formatStatus(scope.row.status) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width"> <el-table-column :label="$t('common.tableMsg.operation')" align="center" width="200" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
icon="el-icon-view" icon="el-icon-view"
@click="handleDetail(scope.row)" @click="handleDetail(scope.row)"
>{{ $t('common.button.detail') }} >{{ $t('business.customerSupport.faq.detail') }}
</el-button> </el-button>
<el-button <el-button
size="mini" size="mini"
@ -128,7 +128,7 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
v-hasPermi="['business:faq:edit']" v-hasPermi="['business:faq:edit']"
>{{ $t('common.button.edit') }} >{{ $t('business.customerSupport.faq.edit') }}
</el-button> </el-button>
<el-button <el-button
size="mini" size="mini"
@ -136,7 +136,7 @@
icon="el-icon-delete" icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['business:faq:remove']" v-hasPermi="['business:faq:remove']"
>{{ $t('common.button.delete') }} >{{ $t('business.customerSupport.faq.delete') }}
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -153,18 +153,18 @@
<!-- 添加或修改常见问题及答案对话框 --> <!-- 添加或修改常见问题及答案对话框 -->
<el-dialog :title="title" :visible.sync="open" width="700px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="auto"> <el-form ref="form" :model="form" :rules="rules" label-width="auto">
<el-form-item label="问题描述" prop="question"> <el-form-item :label="$t('business.customerSupport.faq.questionDesc')" prop="question">
<el-input v-model="form.question" type="textarea" placeholder="请输入内容"/> <el-input v-model="form.question" type="textarea" :placeholder="$t('business.customerSupport.faq.enterQuestionDesc')"/>
</el-form-item> </el-form-item>
<el-form-item label="答案内容" prop="answer"> <el-form-item :label="$t('business.customerSupport.faq.answerContent')" prop="answer">
<el-input v-model="form.answer" type="textarea" placeholder="请输入内容"/> <el-input v-model="form.answer" type="textarea" :placeholder="$t('business.customerSupport.faq.enterAnswerContent')"/>
</el-form-item> </el-form-item>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="问题分类" prop="category"> <el-form-item :label="$t('business.customerSupport.faq.category')" prop="category">
<!-- 下拉框--> <!-- 下拉框-->
<el-select v-model="form.category" placeholder="请选择问题分类" clearable> <el-select v-model="form.category" :placeholder="$t('business.customerSupport.faq.selectCategory')" clearable>
<el-option <el-option
v-for="dict in categoryOptions" v-for="dict in categoryOptions"
:key="dict.dictValue" :key="dict.dictValue"
@ -175,7 +175,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="状态" prop="status"> <el-form-item :label="$t('business.customerSupport.faq.status')" prop="status">
<el-radio-group v-model="form.status"> <el-radio-group v-model="form.status">
<el-radio <el-radio
v-for="dict in statusOptions" v-for="dict in statusOptions"
@ -190,31 +190,31 @@
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm">{{ <el-button :loading="buttonLoading" type="primary" @click="submitForm">{{
$t('common.button.confirm') $t('business.customerSupport.faq.confirm')
}} }}
</el-button> </el-button>
<el-button @click="cancel">{{ $t('common.button.cancel') }}</el-button> <el-button @click="cancel">{{ $t('business.customerSupport.faq.cancel') }}</el-button>
</div> </div>
</el-dialog> </el-dialog>
<!-- 常见问题及答案详情 --> <!-- 常见问题及答案详情 -->
<el-dialog :title="title" :visible.sync="detailOpen" width="700px" append-to-body> <el-dialog :title="title" :visible.sync="detailOpen" width="700px" append-to-body>
<el-form ref="form" :model="form" label-width="auto"> <el-form ref="form" :model="form" label-width="auto">
<el-form-item label="问题描述:"> <el-form-item :label="$t('business.customerSupport.faq.questionDesc') + ':'">
{{ form.question }} {{ form.question }}
</el-form-item> </el-form-item>
<el-form-item label="答案内容:"> <el-form-item :label="$t('business.customerSupport.faq.answerContent') + ':'">
{{ form.answer }} {{ form.answer }}
</el-form-item> </el-form-item>
<el-form-item label="问题分类:"> <el-form-item :label="$t('business.customerSupport.faq.category') + ':'">
{{ formatCategory(form.category) }} {{ formatCategory(form.category) }}
</el-form-item> </el-form-item>
<el-form-item label="状态:"> <el-form-item :label="$t('business.customerSupport.faq.status') + ':'">
{{ formatStatus(form.status) }} {{ formatStatus(form.status) }}
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button @click="cancel">{{ $t('common.button.close') }}</el-button> <el-button @click="cancel">{{ $t('business.customerSupport.faq.close') }}</el-button>
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
@ -259,14 +259,14 @@ export default {
status: undefined, status: undefined,
}, },
categoryOptions: [ categoryOptions: [
{dictValue: '1', dictLabel: '支付问题'}, {dictValue: '1', dictLabel: this.$t('business.customerSupport.faq.categoryPayment')},
{dictValue: '2', dictLabel: '账户问题'}, {dictValue: '2', dictLabel: this.$t('business.customerSupport.faq.categoryAccount')},
{dictValue: '3', dictLabel: '交易问题'}, {dictValue: '3', dictLabel: this.$t('business.customerSupport.faq.categoryTrade')},
{dictValue: '4', dictLabel: '技术/积分问题'} {dictValue: '4', dictLabel: this.$t('business.customerSupport.faq.categoryTechOrPoints')}
], ],
statusOptions: [ statusOptions: [
{dictValue: '0', dictLabel: '无效'}, {dictValue: '0', dictLabel: this.$t('business.customerSupport.faq.invalid')},
{dictValue: '1', dictLabel: '有效'} {dictValue: '1', dictLabel: this.$t('business.customerSupport.faq.valid')}
], ],
// //
form: { form: {
@ -278,16 +278,16 @@ export default {
// //
rules: { rules: {
question: [ question: [
{required: true, message: "问题描述不能为空", trigger: "blur"} {required: true, message: this.$t('business.customerSupport.faq.questionRequired'), trigger: "blur"}
], ],
answer: [ answer: [
{required: true, message: "答案内容不能为空", trigger: "blur"} {required: true, message: this.$t('business.customerSupport.faq.answerRequired'), trigger: "blur"}
], ],
category: [ category: [
{required: true, message: "问题分类不能为空", trigger: "blur"} {required: true, message: this.$t('business.customerSupport.faq.categoryRequired'), trigger: "blur"}
], ],
status: [ status: [
{required: true, message: "状态不能为空", trigger: "change"} {required: true, message: this.$t('business.customerSupport.faq.statusRequired'), trigger: "change"}
], ],
} }
}; };
@ -354,14 +354,14 @@ export default {
handleAdd() { handleAdd() {
this.reset(); this.reset();
this.open = true; this.open = true;
this.title = "添加常见问题及答案"; this.title = this.$t("business.customerSupport.faq.addTitle");
}, },
/** 详情按钮操作 */ /** 详情按钮操作 */
handleDetail(row) { handleDetail(row) {
this.reset(); this.reset();
this.form = row; this.form = row;
this.detailOpen = true; this.detailOpen = true;
this.title = "常见问题及答案"; this.title = this.$t("business.customerSupport.faq.detailTitle");
}, },
/** 修改按钮操作 */ /** 修改按钮操作 */
handleUpdate(row) { handleUpdate(row) {
@ -372,7 +372,7 @@ export default {
this.loading = false; this.loading = false;
this.form = response.data; this.form = response.data;
this.open = true; this.open = true;
this.title = "修改常见问题及答案"; this.title = this.$t("business.customerSupport.faq.editTitle");
}); });
}, },
/** 提交按钮 */ /** 提交按钮 */
@ -382,7 +382,7 @@ export default {
this.buttonLoading = true; this.buttonLoading = true;
if (this.form.id != null) { if (this.form.id != null) {
updateFaq(this.form).then(response => { updateFaq(this.form).then(response => {
this.$modal.msgSuccess("修改成功"); this.$modal.msgSuccess(this.$t("business.customerSupport.faq.updateSuccess"));
this.open = false; this.open = false;
this.getList(); this.getList();
}).finally(() => { }).finally(() => {
@ -390,7 +390,7 @@ export default {
}); });
} else { } else {
addFaq(this.form).then(response => { addFaq(this.form).then(response => {
this.$modal.msgSuccess("新增成功"); this.$modal.msgSuccess(this.$t("business.customerSupport.faq.addSuccess"));
this.open = false; this.open = false;
this.getList(); this.getList();
}).finally(() => { }).finally(() => {
@ -403,13 +403,13 @@ export default {
/** 删除按钮操作 */ /** 删除按钮操作 */
handleDelete(row) { handleDelete(row) {
const ids = row.id || this.ids; const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除常见问题及答案编号为"' + ids + '"的数据项?').then(() => { this.$modal.confirm(this.$t('business.customerSupport.faq.deleteConfirm')).then(() => {
this.loading = true; this.loading = true;
return delFaq(ids); return delFaq(ids);
}).then(() => { }).then(() => {
this.loading = false; this.loading = false;
this.getList(); this.getList();
this.$modal.msgSuccess("删除成功"); this.$modal.msgSuccess(this.$t('business.customerSupport.faq.deleteSuccess'));
}).catch(() => { }).catch(() => {
}).finally(() => { }).finally(() => {
this.loading = false; this.loading = false;

110
src/views/business/userBehaviorLog/index.vue

@ -1,24 +1,24 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="用户ID" prop="userId"> <el-form-item :label="$t('business.behavior.userBehaviorLog.userIdLabel')" prop="userId">
<el-input <el-input
v-model="queryParams.userId" v-model="queryParams.userId"
placeholder="请输入关联用户ID" :placeholder="$t('business.behavior.userBehaviorLog.userIdPlaceholder')"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="IP地址" prop="ip"> <el-form-item :label="$t('business.behavior.userBehaviorLog.ipLabel')" prop="ip">
<el-input <el-input
v-model="queryParams.ip" v-model="queryParams.ip"
placeholder="请输入客户端IP地址" :placeholder="$t('business.behavior.userBehaviorLog.ipPlaceholder')"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="行为类型" prop="behaviorType"> <el-form-item :label="$t('business.behavior.userBehaviorLog.behaviorTypeLabel')" prop="behaviorType">
<el-select v-model="queryParams.behaviorType" placeholder="请选择行为类型" clearable> <el-select v-model="queryParams.behaviorType" :placeholder="$t('business.behavior.userBehaviorLog.behaviorTypePlaceholder')" clearable>
<el-option <el-option
v-for="dict in behaviorTypeOptions" v-for="dict in behaviorTypeOptions"
:key="dict.dictValue" :key="dict.dictValue"
@ -27,8 +27,8 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="设备类型" prop="deviceType"> <el-form-item :label="$t('business.behavior.userBehaviorLog.deviceTypeLabel')" prop="deviceType">
<el-select v-model="queryParams.deviceType" placeholder="请选择设备类型" clearable> <el-select v-model="queryParams.deviceType" :placeholder="$t('business.behavior.userBehaviorLog.deviceTypePlaceholder')" clearable>
<el-option <el-option
v-for="dict in deviceTypeOptions" v-for="dict in deviceTypeOptions"
:key="dict.dictValue" :key="dict.dictValue"
@ -37,8 +37,8 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="平台类型" prop="platform"> <el-form-item :label="$t('business.behavior.userBehaviorLog.platformLabel')" prop="platform">
<el-select v-model="queryParams.platform" placeholder="请选择平台类型" clearable> <el-select v-model="queryParams.platform" :placeholder="$t('business.behavior.userBehaviorLog.platformPlaceholder')" clearable>
<el-option <el-option
v-for="dict in platformOptions" v-for="dict in platformOptions"
:key="dict.dictValue" :key="dict.dictValue"
@ -108,10 +108,10 @@
<el-table v-loading="loading" :data="userBehaviorLogList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="userBehaviorLogList" @selection-change="handleSelectionChange">
<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="$t('business.behavior.userBehaviorLog.idLabel')" align="center" prop="id" v-if="true"/>
<el-table-column label="用户ID" align="center" prop="userId"/> <el-table-column :label="$t('business.behavior.userBehaviorLog.userIdLabel')" align="center" prop="userId"/>
<el-table-column label="用户名" align="center" prop="userName"/> <el-table-column :label="$t('business.behavior.userBehaviorLog.userNameLabel')" align="center" prop="userName"/>
<el-table-column label="行为类型" align="center" prop="behaviorType"> <el-table-column :label="$t('business.behavior.userBehaviorLog.behaviorTypeLabel')" align="center" prop="behaviorType">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ getBehaviorTypeLabel(scope.row.behaviorType) }}</span> <span>{{ getBehaviorTypeLabel(scope.row.behaviorType) }}</span>
</template> </template>
@ -119,21 +119,21 @@
<!-- <el-table-column label="动作标识" align="center" prop="action"/> --> <!-- <el-table-column label="动作标识" align="center" prop="action"/> -->
<!-- <el-table-column label="目标ID" align="center" prop="targetId"/> <!-- <el-table-column label="目标ID" align="center" prop="targetId"/>
<el-table-column label="目标对象类型" align="center" prop="targetType"/> --> <el-table-column label="目标对象类型" align="center" prop="targetType"/> -->
<el-table-column label="IP地址" align="center" prop="ip"/> <el-table-column :label="$t('business.behavior.userBehaviorLog.ipLabel')" align="center" prop="ip"/>
<el-table-column label="浏览器" align="center" prop="ua"/> <el-table-column :label="$t('business.behavior.userBehaviorLog.uaLabel')" align="center" prop="ua"/>
<el-table-column label="设备类型" align="center" prop="deviceType"> <el-table-column :label="$t('business.behavior.userBehaviorLog.deviceTypeLabel')" align="center" prop="deviceType">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ getDeviceTypeLabel(scope.row.deviceType) }}</span> <span>{{ getDeviceTypeLabel(scope.row.deviceType) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="平台类型" align="center" prop="platform"> <el-table-column :label="$t('business.behavior.userBehaviorLog.platformLabel')" align="center" prop="platform">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ getPlatformLabel(scope.row.platform) }}</span> <span>{{ getPlatformLabel(scope.row.platform) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column label="地理位置" align="center" prop="location"/> --> <!-- <el-table-column label="地理位置" align="center" prop="location"/> -->
<!-- <el-table-column label="扩展字段,用于存储额外信息" align="center" prop="extraInfo"/> --> <!-- <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="$t('business.behavior.userBehaviorLog.operationLabel')" align="center" width="200" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
@ -173,8 +173,8 @@
<!-- 添加或修改用户行为日志对话框 --> <!-- 添加或修改用户行为日志对话框 -->
<el-dialog :title="title" :visible.sync="open" width="700px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="auto"> <el-form ref="form" :model="form" :rules="rules" label-width="auto">
<el-form-item label="关联用户ID" prop="userId"> <el-form-item :label="$t('business.behavior.userBehaviorLog.userIdLabel')" prop="userId">
<el-input v-model="form.userId" placeholder="请输入关联用户ID"/> <el-input v-model="form.userId" :placeholder="$t('business.behavior.userBehaviorLog.userIdPlaceholder')"/>
</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="请输入具体动作标识"/>
@ -182,14 +182,14 @@
<!-- <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="$t('business.behavior.userBehaviorLog.ipLabel')" prop="ip">
<el-input v-model="form.ip" placeholder="请输入客户端IP地址"/> <el-input v-model="form.ip" :placeholder="$t('business.behavior.userBehaviorLog.ipPlaceholder')"/>
</el-form-item> </el-form-item>
<el-form-item label="浏览器" prop="ua"> <el-form-item :label="$t('business.behavior.userBehaviorLog.uaLabel')" prop="ua">
<el-input v-model="form.ua" placeholder="请输入内容"/> <el-input v-model="form.ua" :placeholder="$t('business.behavior.userBehaviorLog.uaPlaceholder')"/>
</el-form-item> </el-form-item>
<el-form-item label="行为类型" prop="behaviorType"> <el-form-item :label="$t('business.behavior.userBehaviorLog.behaviorTypeLabel')" prop="behaviorType">
<el-select v-model="form.behaviorType" placeholder="请选择行为类型"> <el-select v-model="form.behaviorType" :placeholder="$t('business.behavior.userBehaviorLog.behaviorTypePlaceholder')">
<el-option <el-option
v-for="dict in behaviorTypeOptions" v-for="dict in behaviorTypeOptions"
:key="dict.dictValue" :key="dict.dictValue"
@ -198,8 +198,8 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="设备类型" prop="deviceType"> <el-form-item :label="$t('business.behavior.userBehaviorLog.deviceTypeLabel')" prop="deviceType">
<el-select v-model="form.deviceType" placeholder="请选择设备类型"> <el-select v-model="form.deviceType" :placeholder="$t('business.behavior.userBehaviorLog.deviceTypePlaceholder')">
<el-option <el-option
v-for="dict in deviceTypeOptions" v-for="dict in deviceTypeOptions"
:key="dict.dictValue" :key="dict.dictValue"
@ -208,8 +208,8 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="平台类型" prop="platform"> <el-form-item :label="$t('business.behavior.userBehaviorLog.platformLabel')" prop="platform">
<el-select v-model="form.platform" placeholder="请选择平台类型"> <el-select v-model="form.platform" :placeholder="$t('business.behavior.userBehaviorLog.platformPlaceholder')">
<el-option <el-option
v-for="dict in platformOptions" v-for="dict in platformOptions"
:key="dict.dictValue" :key="dict.dictValue"
@ -231,10 +231,10 @@
<!-- 用户行为日志详情 --> <!-- 用户行为日志详情 -->
<el-dialog :title="title" :visible.sync="detailOpen" width="700px" append-to-body> <el-dialog :title="title" :visible.sync="detailOpen" width="700px" append-to-body>
<el-form ref="form" :model="form" label-width="auto"> <el-form ref="form" :model="form" label-width="auto">
<el-form-item label="关联用户ID:"> <el-form-item :label="$t('business.behavior.userBehaviorLog.detailUserIdLabel')">
{{ form.userId }} {{ form.userId }}
</el-form-item> </el-form-item>
<el-form-item label="用户名:"> <el-form-item :label="$t('business.behavior.userBehaviorLog.detailUserNameLabel')">
{{ form.userName }} {{ form.userName }}
</el-form-item> </el-form-item>
<!-- <el-form-item label="具体动作标识:"> <!-- <el-form-item label="具体动作标识:">
@ -243,19 +243,19 @@
<!-- <el-form-item label="目标对象ID:"> <!-- <el-form-item label="目标对象ID:">
{{ form.targetId }} {{ form.targetId }}
</el-form-item> --> </el-form-item> -->
<el-form-item label="客户端IP地址:"> <el-form-item :label="$t('business.behavior.userBehaviorLog.detailIpLabel')">
{{ form.ip }} {{ form.ip }}
</el-form-item> </el-form-item>
<el-form-item label="浏览器:"> <el-form-item :label="$t('business.behavior.userBehaviorLog.detailUaLabel')">
{{ form.ua }} {{ form.ua }}
</el-form-item> </el-form-item>
<el-form-item label="行为类型:"> <el-form-item :label="$t('business.behavior.userBehaviorLog.detailBehaviorTypeLabel')">
{{ getBehaviorTypeLabel(form.behaviorType) }} {{ getBehaviorTypeLabel(form.behaviorType) }}
</el-form-item> </el-form-item>
<el-form-item label="设备类型:"> <el-form-item :label="$t('business.behavior.userBehaviorLog.detailDeviceTypeLabel')">
{{ getDeviceTypeLabel(form.deviceType) }} {{ getDeviceTypeLabel(form.deviceType) }}
</el-form-item> </el-form-item>
<el-form-item label="平台类型:"> <el-form-item :label="$t('business.behavior.userBehaviorLog.detailPlatformLabel')">
{{ getPlatformLabel(form.platform) }} {{ getPlatformLabel(form.platform) }}
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -325,23 +325,23 @@ export default {
{dictValue: '3', dictLabel: 'Android'}, {dictValue: '3', dictLabel: 'Android'},
], ],
behaviorTypeOptions: [ behaviorTypeOptions: [
{dictValue: '1', dictLabel: '登录'}, {dictValue: '1', dictLabel: this.$t('business.behavior.userBehaviorLog.loginLabel')},
{dictValue: '2', dictLabel: '支付'}, {dictValue: '2', dictLabel: this.$t('business.behavior.userBehaviorLog.paymentLabel')},
{dictValue: '3', dictLabel: '实名认证'}, {dictValue: '3', dictLabel: this.$t('business.behavior.userBehaviorLog.realNameAuthLabel')},
{dictValue: '4', dictLabel: '点击操作'}, {dictValue: '4', dictLabel: this.$t('business.behavior.userBehaviorLog.clickOperationLabel')},
{dictValue: '5', dictLabel: '访问页面'}, {dictValue: '5', dictLabel: this.$t('business.behavior.userBehaviorLog.visitPageLabel')},
{dictValue: '6', dictLabel: '登出'} {dictValue: '6', dictLabel: this.$t('business.behavior.userBehaviorLog.logoutLabel')}
], ],
deviceTypeOptions: [ deviceTypeOptions: [
{dictValue: '1', dictLabel: 'PC'}, {dictValue: '1', dictLabel: 'PC'},
{dictValue: '2', dictLabel: '移动设备'}, {dictValue: '2', dictLabel: this.$t('business.behavior.userBehaviorLog.mobileDeviceLabel')},
{dictValue: '3', dictLabel: '平板设备'} {dictValue: '3', dictLabel: this.$t('business.behavior.userBehaviorLog.tabletDeviceLabel')}
], ],
// //
rules: { rules: {
userId: [ userId: [
{ required: true, message: "用户关联ID不能为空", trigger: "blur" }, { required: true, message: this.$t('business.behavior.userBehaviorLog.userIdRequired'), trigger: "blur" },
{ pattern: /^\d+$/, message: "用户关联ID必须为数字", trigger: "blur" } { pattern: /^\d+$/, message: this.$t('business.behavior.userBehaviorLog.userIdMustNumber'), trigger: "blur" }
],} ],}
}; };
}, },
@ -407,14 +407,14 @@ export default {
handleAdd() { handleAdd() {
this.reset(); this.reset();
this.open = true; this.open = true;
this.title = "添加用户行为日志"; this.title = this.$t('business.behavior.userBehaviorLog.addTitle');
}, },
/** 详情按钮操作 */ /** 详情按钮操作 */
handleDetail(row) { handleDetail(row) {
this.reset(); this.reset();
this.form = row; this.form = row;
this.detailOpen = true; this.detailOpen = true;
this.title = "用户行为日志"; this.title = this.$t('business.behavior.userBehaviorLog.behaviorLog');
}, },
/** 修改按钮操作 */ /** 修改按钮操作 */
handleUpdate(row) { handleUpdate(row) {
@ -425,7 +425,7 @@ export default {
this.loading = false; this.loading = false;
this.form = response.data; this.form = response.data;
this.open = true; this.open = true;
this.title = "修改用户行为日志"; this.title = $t('business.behavior.userBehaviorLog.editTitle');
}); });
}, },
/** 提交按钮 */ /** 提交按钮 */
@ -435,7 +435,7 @@ export default {
this.buttonLoading = true; this.buttonLoading = true;
if (this.form.id != null) { if (this.form.id != null) {
updateUserBehaviorLog(this.form).then(response => { updateUserBehaviorLog(this.form).then(response => {
this.$modal.msgSuccess("修改成功"); this.$modal.msgSuccess(this.$t('common.promptMsg.editSuccess'));
this.open = false; this.open = false;
this.getList(); this.getList();
}).finally(() => { }).finally(() => {
@ -443,7 +443,7 @@ export default {
}); });
} else { } else {
addUserBehaviorLog(this.form).then(response => { addUserBehaviorLog(this.form).then(response => {
this.$modal.msgSuccess("新增成功"); this.$modal.msgSuccess(this.$t('common.promptMsg.addSuccess'));
this.open = false; this.open = false;
this.getList(); this.getList();
}).finally(() => { }).finally(() => {
@ -456,13 +456,13 @@ export default {
/** 删除按钮操作 */ /** 删除按钮操作 */
handleDelete(row) { handleDelete(row) {
const ids = row.id || this.ids; const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除用户行为日志编号为"' + ids + '"的数据项?').then(() => { this.$modal.confirm(this.$t('common.promptMsg.deleteConfirm')).then(() => {
this.loading = true; this.loading = true;
return delUserBehaviorLog(ids); return delUserBehaviorLog(ids);
}).then(() => { }).then(() => {
this.loading = false; this.loading = false;
this.getList(); this.getList();
this.$modal.msgSuccess("删除成功"); this.$modal.msgSuccess(this.$t('common.promptMsg.deleteSuccess'));
}).catch(() => { }).catch(() => {
}).finally(() => { }).finally(() => {
this.loading = false; this.loading = false;

90
src/views/business/userBehaviorRuleRisk/index.vue

@ -1,34 +1,34 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="规则名称" prop="ruleName"> <el-form-item :label="$t('business.behavior.rule.userBehaviorRuleRisk.ruleName')" prop="ruleName">
<el-input <el-input
v-model="queryParams.ruleName" v-model="queryParams.ruleName"
placeholder="请输入规则名称" :placeholder="$t('business.behavior.rule.userBehaviorRuleRisk.ruleNamePlaceholder')"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="优先级" prop="priority"> <el-form-item :label="$t('business.behavior.rule.userBehaviorRuleRisk.priority')" prop="priority">
<el-input <el-input
v-model="queryParams.priority" v-model="queryParams.priority"
placeholder="请输入规则优先级" :placeholder="$t('business.behavior.rule.userBehaviorRuleRisk.priorityPlaceholder')"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="规则描述" prop="description"> <el-form-item :label="$t('business.behavior.rule.userBehaviorRuleRisk.description')" prop="description">
<el-input <el-input
v-model="queryParams.description" v-model="queryParams.description"
placeholder="请输入规则描述" :placeholder="$t('business.behavior.rule.userBehaviorRuleRisk.descriptionPlaceholder')"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="是否启用" prop="isEnabled"> <el-form-item :label="$t('business.behavior.rule.userBehaviorRuleRisk.isEnabled')" prop="isEnabled">
<el-select v-model="queryParams.isEnabled" placeholder="请选择是否启用"> <el-select v-model="queryParams.isEnabled" :placeholder="$t('business.behavior.rule.userBehaviorRuleRisk.isEnabledPlaceholder')">
<el-option label="是" value="1" /> <el-option :label="$t('business.behavior.rule.userBehaviorRuleRisk.enabledYes')" value="1" />
<el-option label="否" value="0" /> <el-option :label="$t('business.behavior.rule.userBehaviorRuleRisk.enabledNo')" value="0" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@ -90,17 +90,17 @@
<el-table v-loading="loading" :data="userBehaviorRuleRiskList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="userBehaviorRuleRiskList" @selection-change="handleSelectionChange">
<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="规则名称" align="center" prop="ruleName"/> <el-table-column :label="$t('business.behavior.rule.userBehaviorRuleRisk.ruleName')" align="center" prop="ruleName"/>
<el-table-column label="触发条件" align="center" prop="triggerCondition"/> <el-table-column :label="$t('business.behavior.rule.userBehaviorRuleRisk.triggerCondition')" align="center" prop="triggerCondition"/>
<el-table-column label="规则优先级" align="center" prop="priority"/> <el-table-column :label="$t('business.behavior.rule.userBehaviorRuleRisk.priority')" align="center" prop="priority"/>
<el-table-column label="规则描述" align="center" prop="description"/> <el-table-column :label="$t('business.behavior.rule.userBehaviorRuleRisk.description')" align="center" prop="description"/>
<el-table-column label="是否启用" align="center" prop="isEnabled"> <el-table-column :label="$t('business.behavior.rule.userBehaviorRuleRisk.isEnabled')" align="center" prop="isEnabled">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.isEnabled == '1' ? '是' : '否' }} {{ scope.row.isEnabled == '1' ? $t('business.behavior.rule.userBehaviorRuleRisk.enabledYes') : $t('business.behavior.rule.userBehaviorRuleRisk.enabledNo') }}
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column label="规则状态" align="center" prop="status"/> --> <!-- <el-table-column label="规则状态" align="center" prop="status"/> -->
<el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width"> <el-table-column :label="$t('business.behavior.rule.userBehaviorRuleRisk.operation')" align="center" width="200" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
@ -140,19 +140,19 @@
<!-- 添加或修改风险识别规则对话框 --> <!-- 添加或修改风险识别规则对话框 -->
<el-dialog :title="title" :visible.sync="open" width="700px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="auto"> <el-form ref="form" :model="form" :rules="rules" label-width="auto">
<el-form-item label="规则名称" prop="ruleName"> <el-form-item :label="$t('business.behavior.rule.userBehaviorRuleRisk.ruleName')" prop="ruleName">
<el-input v-model="form.ruleName" placeholder="请输入规则名称"/> <el-input v-model="form.ruleName" :placeholder="$t('business.behavior.rule.userBehaviorRuleRisk.ruleNamePlaceholder')"/>
</el-form-item> </el-form-item>
<el-form-item label="规则优先级" prop="priority"> <el-form-item :label="$t('business.behavior.rule.userBehaviorRuleRisk.priority')" prop="priority">
<el-input v-model="form.priority" placeholder="请输入规则优先级"/> <el-input v-model="form.priority" :placeholder="$t('business.behavior.rule.userBehaviorRuleRisk.priorityPlaceholder')"/>
</el-form-item> </el-form-item>
<el-form-item label="规则描述" prop="description"> <el-form-item :label="$t('business.behavior.rule.userBehaviorRuleRisk.description')" prop="description">
<el-input v-model="form.description" type="textarea" placeholder="请输入内容"/> <el-input v-model="form.description" type="textarea" :placeholder="$t('business.behavior.rule.userBehaviorRuleRisk.descriptionPlaceholder')"/>
</el-form-item> </el-form-item>
<el-form-item label="是否启用" prop="isEnabled"> <el-form-item :label="$t('business.behavior.rule.userBehaviorRuleRisk.isEnabled')" prop="isEnabled">
<el-radio-group v-model="form.isEnabled"> <el-radio-group v-model="form.isEnabled">
<el-radio label="1"></el-radio> <el-radio label="1">{{$t('business.behavior.rule.userBehaviorRuleRisk.enabledYes')}}</el-radio>
<el-radio label="0"></el-radio> <el-radio label="0">{{$t('business.behavior.rule.userBehaviorRuleRisk.enabledNo')}}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -165,17 +165,17 @@
<!-- 风险识别规则详情 --> <!-- 风险识别规则详情 -->
<el-dialog :title="title" :visible.sync="detailOpen" width="700px" append-to-body> <el-dialog :title="title" :visible.sync="detailOpen" width="700px" append-to-body>
<el-form ref="form" :model="form" label-width="auto"> <el-form ref="form" :model="form" label-width="auto">
<el-form-item label="规则名称:"> <el-form-item :label="$t('business.behavior.rule.userBehaviorRuleRisk.ruleNameLabel') + ':'">
{{ form.ruleName }} {{ form.ruleName }}
</el-form-item> </el-form-item>
<el-form-item label="规则优先级:"> <el-form-item :label="$t('business.behavior.rule.userBehaviorRuleRisk.priorityLabel') + ':'">
{{ form.priority }} {{ form.priority }}
</el-form-item> </el-form-item>
<el-form-item label="规则描述:"> <el-form-item :label="$t('business.behavior.rule.userBehaviorRuleRisk.descriptionLabel') + ':'">
{{ form.description }} {{ form.description }}
</el-form-item> </el-form-item>
<el-form-item label="是否启用:"> <el-form-item :label="$t('business.behavior.rule.userBehaviorRuleRisk.isEnabledLabel') + ':'">
{{ form.isEnabled == '1' ? '是' : '否' }} {{ form.isEnabled == '1' ? $t('business.behavior.rule.userBehaviorRuleRisk.enabledYes') : $t('business.behavior.rule.userBehaviorRuleRisk.enabledNo') }}
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
@ -236,25 +236,25 @@ export default {
// //
rules: { rules: {
id: [ id: [
{required: true, message: "不能为空", trigger: "blur"} {required: true, message: this.$t('business.behavior.rule.userBehaviorRuleRisk.idRequired'), trigger: "blur"}
], ],
ruleName: [ ruleName: [
{required: true, message: "规则名称不能为空", trigger: "blur"} {required: true, message: this.$t('business.behavior.rule.userBehaviorRuleRisk.ruleNameRequired'), trigger: "blur"}
], ],
triggerCondition: [ triggerCondition: [
{required: true, message: "触发条件不能为空", trigger: "blur"} {required: true, message: this.$t('business.behavior.rule.userBehaviorRuleRisk.triggerConditionRequired'), trigger: "blur"}
], ],
priority: [ priority: [
{required: true, message: "规则优先级不能为空", trigger: "blur"} {required: true, message: this.$t('business.behavior.rule.userBehaviorRuleRisk.priorityRequired'), trigger: "blur"}
], ],
description: [ description: [
{required: true, message: "规则描述不能为空", trigger: "blur"} {required: true, message: this.$t('business.behavior.rule.userBehaviorRuleRisk.descriptionRequired'), trigger: "blur"}
], ],
isEnabled: [ isEnabled: [
{required: true, message: "是否启用不能为空", trigger: "blur"} {required: true, message: this.$t('business.behavior.rule.userBehaviorRuleRisk.isEnabledRequired'), trigger: "blur"}
], ],
status: [ status: [
{required: true, message: "规则状态不能为空", trigger: "change"} {required: true, message: this.$t('business.behavior.rule.userBehaviorRuleRisk.statusRequired'), trigger: "change"}
], ],
} }
}; };
@ -316,14 +316,14 @@ export default {
handleAdd() { handleAdd() {
this.reset(); this.reset();
this.open = true; this.open = true;
this.title = "添加风险识别规则"; this.title = this.$t('business.behavior.rule.userBehaviorRuleRisk.addTitle');
}, },
/** 详情按钮操作 */ /** 详情按钮操作 */
handleDetail(row) { handleDetail(row) {
this.reset(); this.reset();
this.form = row; this.form = row;
this.detailOpen = true; this.detailOpen = true;
this.title = "风险识别规则"; this.title = this.$t('business.behavior.rule.userBehaviorRuleRisk.detailTitle');
}, },
/** 修改按钮操作 */ /** 修改按钮操作 */
handleUpdate(row) { handleUpdate(row) {
@ -334,7 +334,7 @@ export default {
this.loading = false; this.loading = false;
this.form = response.data; this.form = response.data;
this.open = true; this.open = true;
this.title = "修改风险识别规则"; this.title = this.$t('business.behavior.rule.userBehaviorRuleRisk.updateTitle');
}); });
}, },
/** 提交按钮 */ /** 提交按钮 */
@ -344,7 +344,7 @@ export default {
this.buttonLoading = true; this.buttonLoading = true;
if (this.form.id != null) { if (this.form.id != null) {
updateUserBehaviorRuleRisk(this.form).then(response => { updateUserBehaviorRuleRisk(this.form).then(response => {
this.$modal.msgSuccess("修改成功"); this.$modal.msgSuccess(this.$t('common.promptMsg.editSuccess'));
this.open = false; this.open = false;
this.getList(); this.getList();
}).finally(() => { }).finally(() => {
@ -352,7 +352,7 @@ export default {
}); });
} else { } else {
addUserBehaviorRuleRisk(this.form).then(response => { addUserBehaviorRuleRisk(this.form).then(response => {
this.$modal.msgSuccess("新增成功"); this.$modal.msgSuccess(this.$t('common.promptMsg.addSuccess'));
this.open = false; this.open = false;
this.getList(); this.getList();
}).finally(() => { }).finally(() => {
@ -365,13 +365,13 @@ export default {
/** 删除按钮操作 */ /** 删除按钮操作 */
handleDelete(row) { handleDelete(row) {
const ids = row.id || this.ids; const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除风险识别规则编号为"' + ids + '"的数据项?').then(() => { this.$modal.confirm(this.$t('common.promptMsg.deleteConfirm', { ids })).then(() => {
this.loading = true; this.loading = true;
return delUserBehaviorRuleRisk(ids); return delUserBehaviorRuleRisk(ids);
}).then(() => { }).then(() => {
this.loading = false; this.loading = false;
this.getList(); this.getList();
this.$modal.msgSuccess("删除成功"); this.$modal.msgSuccess(this.$t('common.promptMsg.deleteSuccess'));
}).catch(() => { }).catch(() => {
}).finally(() => { }).finally(() => {
this.loading = false; this.loading = false;

96
src/views/business/userBehaviorStats/index.vue

@ -1,12 +1,12 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="统计日期" prop="statDate"> <el-form-item :label="$t('business.behavior.userBehaviorStats.statDateLabel')" prop="statDate">
<el-date-picker clearable <el-date-picker clearable
v-model="queryParams.statDate" v-model="queryParams.statDate"
type="date" type="date"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd"
placeholder="请选择统计日期"> :placeholder="$t('business.behavior.userBehaviorStats.statDatePlaceholder')">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<!-- <el-form-item label="动作标识" prop="action"> <!-- <el-form-item label="动作标识" prop="action">
@ -17,18 +17,18 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> --> </el-form-item> -->
<el-form-item label="维度值" prop="dimensionValue"> <el-form-item :label="$t('business.behavior.userBehaviorStats.dimensionValueLabel')" prop="dimensionValue">
<el-input <el-input
v-model="queryParams.dimensionValue" v-model="queryParams.dimensionValue"
placeholder="请输入维度值" :placeholder="$t('business.behavior.userBehaviorStats.dimensionValuePlaceholder')"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="行为总数" prop="total"> <el-form-item :label="$t('business.behavior.userBehaviorStats.totalLabel')" prop="total">
<el-input <el-input
v-model="queryParams.total" v-model="queryParams.total"
placeholder="请输入行为总次数" :placeholder="$t('business.behavior.userBehaviorStats.totalPlaceholder')"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
@ -41,16 +41,16 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> --> </el-form-item> -->
<el-form-item label="停留时间" prop="avgDuration"> <el-form-item :label="$t('business.behavior.userBehaviorStats.avgDurationLabel')" prop="avgDuration">
<el-input <el-input
v-model="queryParams.avgDuration" v-model="queryParams.avgDuration"
placeholder="请输入平均停留时间" :placeholder="$t('business.behavior.userBehaviorStats.avgDurationPlaceholder')"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="行为类型" prop="behaviorType"> <el-form-item :label="$t('business.behavior.userBehaviorStats.behaviorTypeLabel')" prop="behaviorType">
<el-select v-model="queryParams.behaviorType" placeholder="请选择行为类型" clearable> <el-select v-model="queryParams.behaviorType" :placeholder="$t('business.behavior.userBehaviorStats.behaviorTypePlaceholder')" clearable>
<el-option <el-option
v-for="dict in behaviorTypeOptions" v-for="dict in behaviorTypeOptions"
:key="dict.dictValue" :key="dict.dictValue"
@ -113,25 +113,25 @@
<el-table v-loading="loading" :data="userBehaviorStatsList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="userBehaviorStatsList" @selection-change="handleSelectionChange">
<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="$t('business.behavior.userBehaviorStats.idLabel')" align="center" prop="id" v-if="true"/>
<el-table-column label="行为类型" align="center" prop="behaviorType"> <el-table-column :label="$t('business.behavior.userBehaviorStats.behaviorTypeLabel')" align="center" prop="behaviorType">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ getBehaviorTypeLabel(scope.row.behaviorType) }}</span> <span>{{ getBehaviorTypeLabel(scope.row.behaviorType) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column label="动作标识符" align="center" prop="action" /> --> <!-- <el-table-column label="动作标识符" align="center" prop="action" /> -->
<el-table-column label="维度类型" align="center" prop="dimensionType" /> <el-table-column :label="$t('business.behavior.userBehaviorStats.dimensionTypeLabel')" align="center" prop="dimensionType" />
<el-table-column label="维度值" align="center" prop="dimensionValue" /> <el-table-column :label="$t('business.behavior.userBehaviorStats.dimensionValueLabel')" align="center" prop="dimensionValue" />
<el-table-column label="行为总数" align="center" prop="total" /> <el-table-column :label="$t('business.behavior.userBehaviorStats.totalLabel')" align="center" prop="total" />
<!-- <el-table-column label="独立用户数" align="center" prop="uniqueUsers" /> --> <!-- <el-table-column label="独立用户数" align="center" prop="uniqueUsers" /> -->
<el-table-column label="平均停留时间" align="center" prop="avgDuration" /> <el-table-column :label="$t('business.behavior.userBehaviorStats.avgDurationLabel')" align="center" prop="avgDuration" />
<el-table-column label="扩展统计数据" align="center" prop="extraData" /> <el-table-column :label="$t('business.behavior.userBehaviorStats.extraDataLabel')" align="center" prop="extraData" />
<el-table-column label="统计日期" align="center" prop="statDate" width="180"> <el-table-column :label="$t('business.behavior.userBehaviorStats.statDateLabel')" align="center" prop="statDate" width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.statDate, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.statDate, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width"> <el-table-column :label="$t('business.behavior.userBehaviorStats.operationLabel')" align="center" width="200" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
@ -168,7 +168,7 @@
<!-- 添加或修改用户行为统计聚合对话框 --> <!-- 添加或修改用户行为统计聚合对话框 -->
<el-dialog :title="title" :visible.sync="open" width="700px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="auto"> <el-form ref="form" :model="form" :rules="rules" label-width="auto">
<el-form-item label="行为类型" prop="behaviorType"> <el-form-item :label="$t('business.behavior.userBehaviorStats.behaviorTypeLabel')" prop="behaviorType">
<el-select v-model="form.behaviorType" placeholder="请选择行为类型"> <el-select v-model="form.behaviorType" placeholder="请选择行为类型">
<el-option <el-option
v-for="dict in behaviorTypeOptions" v-for="dict in behaviorTypeOptions"
@ -181,24 +181,24 @@
<!-- <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="维度值" prop="dimensionValue"> <el-form-item :label="$t('business.behavior.userBehaviorStats.dimensionValueLabel')" prop="dimensionValue">
<el-input v-model="form.dimensionValue" placeholder="请输入维度值" /> <el-input v-model="form.dimensionValue" :placeholder="$t('business.behavior.userBehaviorStats.dimensionValuePlaceholder')" />
</el-form-item> </el-form-item>
<el-form-item label="行为总次数" prop="total"> <el-form-item :label="$t('business.behavior.userBehaviorStats.totalLabel')" prop="total">
<el-input v-model="form.total" placeholder="请输入行为总次数" /> <el-input v-model="form.total" :placeholder="$t('business.behavior.userBehaviorStats.totalPlaceholder')" />
</el-form-item> </el-form-item>
<!-- <el-form-item label="独立用户数" prop="uniqueUsers"> <!-- <el-form-item label="独立用户数" prop="uniqueUsers">
<el-input v-model="form.uniqueUsers" placeholder="请输入独立用户数" /> <el-input v-model="form.uniqueUsers" placeholder="请输入独立用户数" />
</el-form-item> --> </el-form-item> -->
<el-form-item label="平均停留时间" prop="avgDuration"> <el-form-item :label="$t('business.behavior.userBehaviorStats.avgDurationLabel')" prop="avgDuration">
<el-input v-model="form.avgDuration" placeholder="请输入平均停留时间" /> <el-input v-model="form.avgDuration" :placeholder="$t('business.behavior.userBehaviorStats.avgDurationPlaceholder')" />
</el-form-item> </el-form-item>
<el-form-item label="统计日期" prop="statDate"> <el-form-item :label="$t('business.behavior.userBehaviorStats.statDateLabel')" prop="statDate">
<el-date-picker clearable <el-date-picker clearable
v-model="form.statDate" v-model="form.statDate"
type="datetime" type="datetime"
value-format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择统计日期"> :placeholder="$t('business.behavior.userBehaviorStats.statDatePlaceholder')">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -211,30 +211,30 @@
<!-- 用户行为统计聚合详情 --> <!-- 用户行为统计聚合详情 -->
<el-dialog :title="title" :visible.sync="detailOpen" width="700px" append-to-body> <el-dialog :title="title" :visible.sync="detailOpen" width="700px" append-to-body>
<el-form ref="form" :model="form" label-width="auto"> <el-form ref="form" :model="form" label-width="auto">
<el-form-item label="统计日期" prop="statDate"> <el-form-item :label="$t('business.behavior.userBehaviorStats.statDateLabel')" prop="statDate">
<el-date-picker clearable <el-date-picker clearable
v-model="form.statDate" v-model="form.statDate"
type="datetime" type="datetime"
value-format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择统计日期"> :placeholder="$t('business.behavior.userBehaviorStats.statDatePlaceholder')">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<!-- <el-form-item label="具体动作标识符:"> <!-- <el-form-item label="具体动作标识符:">
{{form.action}} {{form.action}}
</el-form-item> --> </el-form-item> -->
<el-form-item label="行为类型:"> <el-form-item :label="$t('business.behavior.userBehaviorStats.behaviorTypeLabel') + ':'">
{{ getBehaviorTypeLabel(form.behaviorType) }} {{ getBehaviorTypeLabel(form.behaviorType) }}
</el-form-item> </el-form-item>
<el-form-item label="维度值:"> <el-form-item :label="$t('business.behavior.userBehaviorStats.dimensionValueLabel') + ':'">
{{form.dimensionValue}} {{form.dimensionValue}}
</el-form-item> </el-form-item>
<el-form-item label="行为总次数:"> <el-form-item :label="$t('business.behavior.userBehaviorStats.totalLabel') + ':'">
{{form.total}} {{form.total}}
</el-form-item> </el-form-item>
<!-- <el-form-item label="独立用户数:"> <!-- <el-form-item label="独立用户数:">
{{form.uniqueUsers}} {{form.uniqueUsers}}
</el-form-item> --> </el-form-item> -->
<el-form-item label="平均停留时间:"> <el-form-item :label="$t('business.behavior.userBehaviorStats.avgDurationLabel') + ':'">
{{form.avgDuration}} {{form.avgDuration}}
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -254,12 +254,12 @@ export default {
return { return {
// //
behaviorTypeOptions: [ behaviorTypeOptions: [
{dictValue: '1', dictLabel: '登录'}, {dictValue: '1', dictLabel: this.$t('business.behavior.userBehaviorStats.login')},
{dictValue: '2', dictLabel: '支付'}, {dictValue: '2', dictLabel: this.$t('business.behavior.userBehaviorStats.payment')},
{dictValue: '3', dictLabel: '实名认证'}, {dictValue: '3', dictLabel: this.$t('business.behavior.userBehaviorStats.realNameAuth')},
{dictValue: '4', dictLabel: '点击操作'}, {dictValue: '4', dictLabel: this.$t('business.behavior.userBehaviorStats.clickOperation')},
{dictValue: '5', dictLabel: '访问页面'}, {dictValue: '5', dictLabel: this.$t('business.behavior.userBehaviorStats.visitPage')},
{dictValue: '6', dictLabel: '登出'} {dictValue: '6', dictLabel: this.$t('business.behavior.userBehaviorStats.logout')}
], ],
// loading // loading
buttonLoading: false, buttonLoading: false,
@ -301,7 +301,7 @@ export default {
form: {}, form: {},
// //
rules: { rules: {
} }
}; };
}, },
@ -370,14 +370,14 @@ export default {
handleAdd() { handleAdd() {
this.reset(); this.reset();
this.open = true; this.open = true;
this.title = "添加用户行为统计聚合"; this.title = this.$t('business.behavior.userBehaviorStats.addTitle');
}, },
/** 详情按钮操作 */ /** 详情按钮操作 */
handleDetail(row){ handleDetail(row){
this.reset(); this.reset();
this.form = row; this.form = row;
this.detailOpen = true; this.detailOpen = true;
this.title = "用户行为统计聚合"; this.title = this.$t('business.behavior.userBehaviorStats.detailTitle');
}, },
/** 修改按钮操作 */ /** 修改按钮操作 */
handleUpdate(row) { handleUpdate(row) {
@ -388,7 +388,7 @@ export default {
this.loading = false; this.loading = false;
this.form = response.data; this.form = response.data;
this.open = true; this.open = true;
this.title = "修改用户行为统计聚合"; this.title = $t('business.behavior.userBehaviorStats.editTitle');
}); });
}, },
/** 提交按钮 */ /** 提交按钮 */
@ -398,7 +398,7 @@ export default {
this.buttonLoading = true; this.buttonLoading = true;
if (this.form.id != null) { if (this.form.id != null) {
updateUserBehaviorStats(this.form).then(response => { updateUserBehaviorStats(this.form).then(response => {
this.$modal.msgSuccess("修改成功"); this.$modal.msgSuccess(this.$t('common.promptMsg.editSuccess'));
this.open = false; this.open = false;
this.getList(); this.getList();
}).finally(() => { }).finally(() => {
@ -406,7 +406,7 @@ export default {
}); });
} else { } else {
addUserBehaviorStats(this.form).then(response => { addUserBehaviorStats(this.form).then(response => {
this.$modal.msgSuccess("新增成功"); this.$modal.msgSuccess(this.$t('common.promptMsg.addSuccess'));
this.open = false; this.open = false;
this.getList(); this.getList();
}).finally(() => { }).finally(() => {
@ -419,13 +419,13 @@ export default {
/** 删除按钮操作 */ /** 删除按钮操作 */
handleDelete(row) { handleDelete(row) {
const ids = row.id || this.ids; const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除用户行为统计聚合编号为"' + ids + '"的数据项?').then(() => { this.$modal.confirm(this.$t('common.promptMsg.deleteConfirm')).then(() => {
this.loading = true; this.loading = true;
return delUserBehaviorStats(ids); return delUserBehaviorStats(ids);
}).then(() => { }).then(() => {
this.loading = false; this.loading = false;
this.getList(); this.getList();
this.$modal.msgSuccess("删除成功"); this.$modal.msgSuccess(this.$t('common.promptMsg.deleteSuccess'));
}).catch(() => { }).catch(() => {
}).finally(() => { }).finally(() => {
this.loading = false; this.loading = false;

Loading…
Cancel
Save