Commit b8ada42c authored by 温海元's avatar 温海元

Merge branch '4.12' into 'master'

remove some Capital files like Vcc,Xyqb

See merge request QA/qa-platform-ui!1
parents 5effe99b 18812acc
<template>
<div class="login_container">
<div class="login_box">
<div class="avatar_box">
<img src="../../assets/image/qa.jpg" />
</div>
<el-form
:model="loginForm"
ref="loginFormRef"
:rules="loginFormRules"
label-width="0px"
class="login_form"
>
<el-form-item prop="username">
<el-input v-model="loginForm.username" placeholder="请输入用户名" prefix-icon="el-icon-user"></el-input>
</el-form-item>
<el-form-item prop="password">
<el-input
v-model="loginForm.password"
placeholder="请输入密码"
type="password"
prefix-icon="el-icon-lock"
></el-input>
</el-form-item>
<el-form-item class="btns">
<el-button type="primary" @click="login">登录</el-button>
<el-button type="info" v-on:click="resetForm">重置</el-button>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script>
export default {
data() {
return {
loginForm: {
username: '',
password: ''
},
loginFormRules: {
// username: [
// { required: true, message: '请输入用户名', trigger: 'blur' },
// { min: 3, max: 8, message: '长度在3到8个字符之间', trigger: 'blur' }
// ],
// password: [
// { required: true, message: '请输入密码', trigger: 'blur' },
// { min: 6, max: 15, message: '长度在6到16个字符之间', trigger: 'blur' }
// ]
}
}
},
methods: {
resetForm() {
this.$refs.loginFormRef.resetFields()
},
login() {
this.$refs.loginFormRef.validate(valid => {
if (!valid) {
return false
} else {
this.$axios
.post('login', this.loginForm)
.then(response => {
if (response.data.meta.status === 200) {
this.$message.success('登录成功')
window.sessionStorage.setItem('token', response.data.data.token)
this.$router.push('/home')
} else {
this.$message.error('登录失败')
}
})
.catch(error => {
console.log(error)
})
}
})
}
}
}
</script>
<style lang="less" scoped>
.login_container {
background-color: #2b4b6b;
height: 100%;
}
.login_box {
width: 500px;
height: 320px;
background-color: #ffffff;
border-radius: 3px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
.avatar_box {
height: 130px;
width: 130px;
border: 1px solid #eeeeee;
border-radius: 50%;
padding: 10px;
box-shadow: 0 0 10px #dddddd;
position: absolute;
left: 50%;
transform: translate(-50%, -50%);
background-color: #ffffff;
img {
width: 100%;
height: 100%;
border-radius: 50%;
background-color: #eeeeee;
}
}
}
.login_form {
position: absolute;
bottom: 0;
width: 100%;
padding: 0 10px;
box-sizing: border-box;
}
.btns {
display: flex;
justify-content: flex-end;
}
</style>
<template>
<div>
<!-- 头部导航栏 -->
<!-- <el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item>Mock</el-breadcrumb-item>
<el-breadcrumb-item>Mock列表</el-breadcrumb-item>
</el-breadcrumb> -->
<el-card>
<div class="filter">
<el-select v-model="selectModule" placeholder="模块" @change="selectModuleChange" clearable>
<el-option v-for="item in moduleList" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
<el-button type="primary" icon="el-icon-search" @click="searchMockList">查询</el-button>
<el-button type="primary" @click="addDialogVisible = true">新增mock</el-button>
</div>
<el-table :data="mockList" border style="width: 100%">
<el-table-column prop="id" label="序号" width="80">
</el-table-column>
<el-table-column prop="url" label="路径" width="300">
</el-table-column>
<el-table-column prop="description" label="描述" width="200">
</el-table-column>
<el-table-column label="当前返回" width="100">
<slot slot-scope="scope">
<p v-if="scope.row.flag === 1">成功响应</p>
<p v-else-if="scope.row.flag === 0">失败响应</p>
</slot>
</el-table-column>
<el-table-column label="是否加密" width="100">
<slot slot-scope="scope">
<p v-if="scope.row.encrypt === 0">不加密</p>
<p v-else-if="scope.row.encrypt === 1">加密</p>
</slot>
</el-table-column>
<!-- <el-table-column prop="success" label="成功响应" width="250">
</el-table-column>
<el-table-column prop="fail" label="失败响应" width="250">
</el-table-column> -->
<el-table-column label="操作">
<slot slot-scope="scope">
<el-button type="warning" @click="openDetailDialog(scope.row)">详情</el-button>
<el-button type="success" @click="openEditDialog(scope.row)">编辑</el-button>
<!-- <el-button type="danger">删除</el-button> -->
</slot>
</el-table-column>
</el-table>
<!-- 分页 -->
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page.sync="queryModuleList.pageNum" :page-size="queryModuleList.pageSize" layout="total, prev, pager, next"
:total="totalNum"></el-pagination>
</el-card>
<!-- 详情对话框 -->
<el-dialog title="Mock详情" :visible.sync="detailDialogVisible" width="60%" @close="closeDetailDialog">
<el-tabs v-model="activeTab">
<el-tab-pane label="基本信息" name="basic">
<p>路径:{{ activeUrl }}</p>
<p>描述:{{ activeDescription }}</p>
</el-tab-pane>
<el-tab-pane label="成功响应" name="success">
<vue-json-editor v-model="successResponse" :mode="'code'" :showBtns="false" lang="zh" @json-change="onSuccessJsonChange" @json-save="onSuccessJsonSave" />
</el-tab-pane>
<el-tab-pane label="失败响应" name="fail">
<vue-json-editor v-model="failResponse" :mode="'code'" :showBtns="false" lang="zh" @json-change="onSuccessJsonChange" @json-save="onSuccessJsonSave" />
</el-tab-pane>
</el-tabs>
<!-- <span slot="footer" class="dialog-footer">
<el-button @click="detailDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="detailDialogVisible = false">保 存</el-button>
</span> -->
</el-dialog>
<!-- 新增对话框 -->
<el-dialog title="Mock详情" :visible.sync="addDialogVisible" width="60%" @close="closeEditDialog">
<el-form label-width="80px" :model="addMockForm">
<el-form-item label="路径">
<el-input v-model="addMockForm.url"></el-input>
</el-form-item>
<el-form-item label="描述">
<el-input v-model="addMockForm.description"></el-input>
</el-form-item>
<el-form-item label="返回类型">
<el-radio-group v-model="addMockForm.type">
<el-radio :label="1">json</el-radio>
<el-radio :label="2">字符串</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="是否加密">
<el-radio-group v-model="addMockForm.encrypt">
<el-radio :label="0">不加密</el-radio>
<el-radio :label="1">加密</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="所属模块">
<el-select v-model="addMockForm.modlue" placeholder="模块" clearable>
<el-option v-for="item in moduleList" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="成功响应">
<vue-json-editor v-if="addMockForm.type === 1" v-model="addMockForm.success" :mode="'code'" :showBtns="false" lang="zh" @json-change="onSuccessJsonChange" @json-save="onSuccessJsonSave" />
<el-input v-else-if="addMockForm.type === 2" v-model="addMockForm.success" type="textarea"></el-input>
</el-form-item>
<el-form-item label="失败响应">
<vue-json-editor v-if="addMockForm.type === 1" v-model="addMockForm.fail" :mode="'code'" :showBtns="false" lang="zh" @json-change="onFailJsonChange" @json-save="onFailJsonSave" />
<el-input v-else-if="addMockForm.type === 2" v-model="addMockForm.fail" type="textarea"></el-input>
</el-form-item>
<el-form-item label="当前返回">
<el-switch v-model="addMockForm.flag" active-color="#13ce66" inactive-color="#ff4949" active-value="1" inactive-value="0">
</el-switch>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="addDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="addMock">确 定</el-button>
</span>
</el-dialog>
<!-- 编辑对话框 -->
<el-dialog title="编辑Mock" :visible.sync="editDialogVisible" width="60%">
<el-form label-width="80px" :model="editMockForm">
<el-form-item label="路径">
<el-input v-model="editMockForm.url"></el-input>
</el-form-item>
<el-form-item label="描述">
<el-input v-model="editMockForm.description"></el-input>
</el-form-item>
<el-form-item label="返回类型">
<el-radio-group v-model="editMockForm.type">
<el-radio :label="1">json</el-radio>
<el-radio :label="2">字符串</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="是否加密">
<el-radio-group v-model="editMockForm.encrypt">
<el-radio :label="0">不加密</el-radio>
<el-radio :label="1">加密</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="所属模块">
<el-select v-model="editMockForm.modlue" placeholder="模块" clearable>
<el-option v-for="item in moduleList" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="成功响应">
<vue-json-editor v-if="editMockForm.type === 1" v-model="editMockForm.success" :mode="'code'" :showBtns="false" lang="zh" @json-change="onSuccessJsonChange" @json-save="onSuccessJsonSave" />
<el-input v-else-if="editMockForm.type === 2" v-model="editMockForm.success" type="textarea"></el-input>
</el-form-item>
<el-form-item label="失败响应">
<vue-json-editor v-if="editMockForm.type === 1" v-model="editMockForm.fail" :mode="'code'" :showBtns="false" lang="zh" @json-change="onFailJsonChange" @json-save="onFailJsonSave" />
<el-input v-else-if="editMockForm.type === 2" v-model="editMockForm.fail" type="textarea"></el-input>
</el-form-item>
<el-form-item label="当前返回">
<el-switch v-model="editMockForm.flag" active-color="#13ce66" inactive-color="#ff4949" active-value="1" inactive-value="0">
</el-switch>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="editDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="editMock">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { getMockList, addMock, editMock, getMockModuleList } from '@/api/mock'
import vueJsonEditor from 'vue-json-editor'
export default {
data() {
return {
queryModuleInfo: {
pageNum: 1,
pageSize: 20
},
queryModuleList: {
pageNo: 1,
pageSize: 10,
modlue: ''
},
moduleList: [],
selectModule: '',
mockList: [],
addDialogVisible: false,
detailDialogVisible: false,
editDialogVisible: false,
activeTab: 'basic',
successResponse: '',
failResponse: '',
activeUrl: '',
activeDescription: '',
addMockForm: {
url: '',
description: '',
success: '',
fail: '',
flag: '',
type: 1,
encrypt: 0,
module: ''
},
editMockForm: {
id: '',
url: '',
description: '',
success: '',
fail: '',
flag: '',
type: 1,
encrypt: 0,
module: ''
},
successJson: '',
failJson: '',
totalNum: ''
}
},
components: {
vueJsonEditor
},
methods: {
// 获取模块列表
getMockModuleList() {
getMockModuleList(this.queryModuleInfo).then((resp) => {
this.moduleList = resp.data.data.list
})
},
// 选中模块变化时
selectModuleChange() {
this.queryModuleList.modlue = this.selectModule
},
// 获取mock列表
getMockList() {
getMockList(this.queryModuleList).then((resp) => {
this.mockList = resp.data.data.list
this.totalNum = resp.data.data.total
})
},
// 打开mock详情对话框
openDetailDialog(row) {
this.detailDialogVisible = true
this.successResponse = JSON.parse(row.success)
this.failResponse = JSON.parse(row.fail)
this.activeUrl = row.url
this.activeDescription = row.description
},
// 新增mock
addMock() {
if (this.addMockForm.type === 1) {
this.addMockForm.success = JSON.stringify(this.addMockForm.success)
this.addMockForm.fail = JSON.stringify(this.addMockForm.fail)
}
addMock(this.addMockForm).then((resp) => {
if (resp.data.data === true) {
this.addDialogVisible = false
this.getMockList()
return this.$message.success('新增mock成功!')
} else {
return this.$message.error('新增mock失败!')
}
})
},
// 打开编辑mock对话框
openEditDialog(row) {
this.editDialogVisible = true
this.editMockForm.id = row.id
this.editMockForm.url = row.url
this.editMockForm.description = row.description
this.editMockForm.success = JSON.parse(row.success)
this.editMockForm.fail = JSON.parse(row.fail)
this.editMockForm.flag = String(row.flag)
this.editMockForm.type = row.type
this.editMockForm.encrypt = row.encrypt
this.editMockForm.module = row.modlue
},
// 修改mock
editMock() {
if (this.editMockForm.type === 1) {
this.editMockForm.success = JSON.stringify(this.editMockForm.success)
this.editMockForm.fail = JSON.stringify(this.editMockForm.fail)
}
editMock(this.editMockForm).then((resp) => {
if (resp.data.data === true) {
this.editDialogVisible = false
this.getMockList()
return this.$message.success('修改mock成功!')
} else {
return this.$message.error('修改mock失败!')
}
})
},
// 查询对应模块mock
searchMockList() {
this.getMockList()
},
onSuccessJsonChange() {},
onSuccessJsonSave() {},
onFailJsonChange() {},
onFailJsonSave() {},
handleSizeChange(newSize) {
this.queryModuleList.pageSize = newSize
this.getMockList()
},
handleCurrentChange(newPage) {
this.queryModuleList.pageNum = newPage
this.getMockList()
},
closeDetailDialog() {
this.activeTab = 'baisc'
},
closeEditDialog() {}
},
created() {
this.getMockModuleList()
this.getMockList()
}
}
</script>
<style lang="less" scoped>
.el-table {
margin-top: 20px;
}
.el-select {
margin-right: 20px;
}
</style>
<template>
<div>
<!-- 头部导航栏 -->
<!-- <el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item>消费分期</el-breadcrumb-item>
<el-breadcrumb-item>查询单个数据</el-breadcrumb-item>
</el-breadcrumb> -->
<el-card>
<div class="filter">
手机号:<el-input
v-model="queryInfo.phoneNo"
placeholder="请输入手机号"
></el-input>
<!-- 身份证号码:<el-input
v-model="idCardNo"
placeholder="请输入身份证号码"
></el-input> -->
<el-button type="primary" @click="checkData">查询</el-button>
</div>
<el-table :data="dataTable" border style="width: 100%">
<el-table-column
prop="phoneNo"
label="手机号"
width="120px"
></el-table-column>
<el-table-column
prop="userId"
label="userId"
width="100px"
></el-table-column>
<el-table-column
prop="uuid"
label="uuid"
width="320px"
></el-table-column>
<el-table-column
prop="registeredFrom"
label="注册渠道"
width="100px"
></el-table-column>
<el-table-column
prop="nextApplyTime"
label="过期时间"
width="180px"
></el-table-column>
<el-table-column prop="createdAt" label="创建时间" width="180px"></el-table-column>
<el-table-column prop="status" label="状态"></el-table-column>
</el-table>
</el-card>
</div>
</template>
<script>
import {queryUserData} from '@/api/checkVccData'
export default {
data() {
return {
idCardNo: '',
queryInfo: {
namespace: window.sessionStorage.getItem('env'),
phoneNo: ''
},
dataTable: []
}
},
methods: {
checkData() {
// 手机号长度限制
if (this.queryInfo.phoneNo === '') {
return this.$message.error('手机号不能为空!')
}
if (this.queryInfo.phoneNo.length !== 11) {
return this.$message.error('手机号长度不对!')
}
this.queryInfo.namespace = window.sessionStorage.getItem('env')
queryUserData(this.queryInfo).then((resp) => {
if (resp.data.code === 500) {
return this.$message.error(resp.data.data)
}
this.dataTable.push(resp.data.data)
})
}
}
}
</script>
<style lang="less" scoped>
.el-input {
width: 200px;
margin-right: 20px;
}
.el-table {
margin-top: 20px;
}
</style>
<template>
<div>
<!-- 面包屑导航栏 -->
<!-- <el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item>消费分期</el-breadcrumb-item>
<el-breadcrumb-item>生成新数据</el-breadcrumb-item>
</el-breadcrumb> -->
<!-- 卡片区域 -->
<el-card>
<div>
手机号:<el-input
v-model="genDataParams.phoneNo"
placeholder="请输入手机号"
></el-input>
用户状态:
<el-select v-model="genDataParams.status" placeholder="请选择用户状态">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
<el-button type="primary" @click="genData">生成数据</el-button>
<el-table :data="tableData" border style="width: 100%">
<el-table-column prop="phoneNo" label="手机号" width="150">
</el-table-column>
<el-table-column prop="userId" label="userId" width="100">
</el-table-column>
<el-table-column prop="uuid" label="uuid" width="320">
</el-table-column>
<el-table-column prop="eacctNo" label="卡号" width="200">
</el-table-column>
<el-table-column prop="amount" label="额度" width="150"> </el-table-column>
<el-table-column prop="openedChannel" label="开户渠道" width="100">
</el-table-column>
<el-table-column prop="msg" label="状态"> </el-table-column>
</el-table>
</div>
</el-card>
</div>
</template>
<script>
import { genVccData } from '@/api/genVccData'
export default {
data() {
return {
options: [
{
value: 1,
label: '授信成功'
},
{
value: 2,
label: '授信失败'
},
{
value: 3,
label: '开户成功'
},
{
value: 4,
label: '开户失败'
}
],
genDataParams: {
namespace: window.sessionStorage.getItem('env'),
phoneNo: '',
channel: '214',
status: ''
},
tableData: [],
loadingOptions: {
text: '数据生成中...',
lock: true,
spinner: 'el-icon-loading',
background: 'rgba(0,0,0,0.7)'
}
}
},
methods: {
// 造数据的方法
genData() {
// 手机号校验
var reg = /^[1][3,4,5,7,8][0-9]{9}$/
if (!reg.test(this.genDataParams.phoneNo)) {
return this.$message.error('手机号格式不正确!')
}
// 用户状态校验
if (this.genDataParams.status === '') {
return this.$message.error('用户状态不能为空!')
}
// 开户失败校验,尾号必须为9
if (this.genDataParams.status === 4) {
if (this.genDataParams.phoneNo.charAt(this.genDataParams.phoneNo.length - 1) !== '9') {
return this.$message.error('开户失败对应手机尾号必须为9')
}
}
var formData = new FormData()
this.genDataParams.namespace = window.sessionStorage.getItem('env')
formData.set('namespace', this.genDataParams.namespace)
formData.set('phoneNo', this.genDataParams.phoneNo)
formData.set('channel', this.genDataParams.channel)
formData.set('status', this.genDataParams.status)
const tLoading = this.$loading.service(this.loadingOptions)
genVccData(formData).then((resp) => {
if (resp !== null) {
tLoading.close()
}
this.tableData.push(resp.data.data)
})
}
}
}
</script>
<style lang="less" scoped>
.el-input {
width: 200px;
margin-right: 20px;
}
.el-button {
margin-left: 20px;
}
.el-table {
margin-top: 20px;
}
</style>
<template>
<div>
<!-- 头部导航栏 -->
<!-- <el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item>消费分期</el-breadcrumb-item>
<el-breadcrumb-item>获取特定数据</el-breadcrumb-item>
</el-breadcrumb> -->
<el-card>
<div class="filter">
用户状态:
<el-select
v-model="userStatus"
@change="selectUserStatusChange"
placeholder="请选择用户状态"
>
<el-option
v-for="item in statusOption"
:key="item.label"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
<el-button
type="primary"
style="margin-left: 20px"
@click="searchVccData"
>查询数据</el-button
>
</div>
<!-- 数据表格 -->
<div class="dataTable">
<el-table :data="dataTable" border style="width: 100%">
<el-table-column
prop="phoneNo"
label="手机号"
width="150px"
></el-table-column>
<el-table-column
prop="userId"
label="userId"
width="100px"
></el-table-column>
<el-table-column
prop="uuid"
label="uuid"
width="350px"
></el-table-column>
<el-table-column
prop="registeredFrom"
label="注册渠道"
width="100px"
></el-table-column>
<el-table-column
prop="nextApplyTime"
label="过期时间"
width="200px"
></el-table-column>
<el-table-column prop="createdAt" label="创建时间"></el-table-column>
</el-table>
</div>
<!-- 分页 -->
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="queryInfo.pageNum"
:page-size="queryInfo.pageSize"
layout="total, prev, pager, next"
:total="totalNum"
></el-pagination>
</el-card>
</div>
</template>
<script>
import {getVccData} from '@/api/getVccData'
export default {
data() {
return {
userStatus: '',
queryInfo: {
namespace: window.sessionStorage.getItem('env'),
status: '',
pageNum: 1,
pageSize: 10
},
totalNum: 0,
statusOption: [
{ label: '初始状态', value: 0 },
{ label: '授信成功未开户', value: 1 },
{ label: '授信失败', value: 2 },
{label: '禁用', value: 3},
{ label: '审核中', value: 4 },
{ label: '冻结', value: 5 },
{ label: '开户成功', value: 6 },
{ label: '开户失败', value: 7 }
],
dataTable: []
}
},
methods: {
selectUserStatusChange() {
this.queryInfo.status = this.userStatus
},
getVccData() {
getVccData(this.queryInfo).then((resp) => {
this.dataTable = resp.data.data.content
this.totalNum = resp.data.data.totalNum
})
},
// 查询vcc数据
searchVccData() {
this.queryInfo.namespace = window.sessionStorage.getItem('env')
this.queryInfo.pageNum = 1
this.queryInfo.pageSize = 10
this.getVccData()
},
handleSizeChange(newSize) {
this.queryInfo.pageSize = newSize
this.getVccData()
},
handleCurrentChange(newPage) {
this.queryInfo.pageNum = newPage
this.getVccData()
}
}
}
</script>
<style lang="less" scoped>
.filter {
margin-bottom: 15px;
font-size: 14px;
}
</style>
<template>
<div>
<!-- 头部导航栏 -->
<!-- <el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item>现金分期</el-breadcrumb-item>
<el-breadcrumb-item>生成新数据</el-breadcrumb-item>
</el-breadcrumb> -->
<!-- 卡片视图 -->
<el-card>
<div class="filter">
借款状态:
<el-select v-model="genDataBody.status" @change="handleChannelChange" placeholder="请选择类型">
<el-option
v-for="item in statusOptions"
:key="item.label"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
<!-- 渠道 -->
渠道:
<el-select
v-model="genDataBody.channel"
@change="handleChannelChange"
@clear="handleClear"
clearable
placeholder="请选择渠道"
>
<el-option
v-for="item in channelList"
:key="item.channelId"
:label="item.name"
:value="item.channelId"
></el-option>
</el-select>
<!-- 资方 -->
资方:
<el-select
v-model="genDataBody.fundId"
@change="haneleFundChange"
@clear="handleClear"
clearable
placeholder="请选择资方"
>
<el-option
v-for="item in fundList"
:key="item.fundId"
:label="item.name"
:value="item.fundId"
></el-option>
</el-select>
</div>
<div class="filter">
手机号:
<el-input
v-model="genDataBody.phoneNo"
clearable
placeholder="手机号"
maxlength="11"
style="width: 200px;"
></el-input>期数:
<el-input v-model="genDataBody.term" clearable placeholder="期数" style="width: 200px"></el-input>金额:
<el-input v-model="genDataBody.amount" clearable placeholder="金额" style="width: 200px"></el-input>
<!-- 查询数据按钮 -->
<el-button type="primary" @click="genData">生成数据</el-button>
</div>
<el-collapse v-model="activeCollapse">
<el-collapse-item title="基本信息(非必填)" name="1">
<div class="filter">
姓名:
<el-input v-model="genDataBody.name" clearable placeholder="姓名" style="width: 150px"></el-input>身份证号:
<el-input
v-model="genDataBody.idCardNo"
clearable
placeholder="身份证"
style="width: 200px"
></el-input>
</div>
<div class="filter">
银行卡号:
<el-input
v-model="genDataBody.bankCardNo"
clearable
placeholder="银行卡号"
style="width: 200px"
></el-input>银行名称:
<el-input
v-model="genDataBody.bankName"
clearable
placeholder="银行名称"
style="width: 200px"
></el-input>银行code:
<el-input
v-model="genDataBody.bankCode"
clearable
placeholder="银行code"
style="width: 100px"
></el-input>
<el-button type="primary" @click="reGenBankCardData">换一换</el-button>
</div>
<div class="filter" v-if="genDataBody.channel === 159886">
利率:
<el-input v-model="genDataBody.rate" placeholder="利率" style="width: 100px"></el-input>
出账日:
<el-input v-model="genDataBody.fixedBillDay" placeholder="出账日" style="width: 100px"></el-input>
还款日:
<el-input v-model="genDataBody.fixedRepayDay" placeholder="还款日" style="width: 100px"></el-input>
</div>
</el-collapse-item>
</el-collapse>
<!-- 数据表格 -->
<div class="dataTable">
<el-table :data="dataTableList" border style="width: 100%">
<el-table-column prop="phoneNo" label="phone_no" width="150px"></el-table-column>
<el-table-column prop="userId" label="user_id" width="100px"></el-table-column>
<!-- <el-table-column prop="uuid" label="uuid" width="330px"></el-table-column> -->
<el-table-column prop="registeredFrom" label="注册渠道id" width="120px"></el-table-column>
<el-table-column prop="fundId" label="资方id" width="120px"></el-table-column>
<el-table-column prop="createdAt" label="创建时间" width="200px"></el-table-column>
<el-table-column prop="desc" label="状态" width="200px"></el-table-column>
<!-- <el-table-column label="操作">
<template slot-scope="scope">
<el-button type="primary" @click="retryToGen(scope.row.phoneNo)">重试</el-button>
</template>
</el-table-column>-->
</el-table>
</div>
<!-- 日志区域 -->
<div style="padding:20px 0px">
<p v-if="genLog">实时日志:</p>
<textarea
id="textarea"
v-if="genLog"
v-model="genLog"
style="min-height:600px;background-color:black;width:-webkit-fill-available;color:white"
/>
</div>
</el-card>
</div>
</template>
<script>
import { uuid } from '@/utils/randomData'
import {
genData,
queryUserStatus,
getSupportChannelAndFund,
channelMappedFund,
fundMappedChannel
} from '@/api/genXyqbData'
import { getAll } from '@/api/testdata'
export default {
data() {
return {
activeCollapse: ['1'],
namespaceOptions: [],
statusOptions: [
{ label: '审核通过', value: 0 },
{ label: '审核拒绝', value: 1 },
{ label: '放款中', value: 2 },
{ label: '放款成功', value: 3 },
{ label: '放款失败', value: 4 }
],
fundList: [],
channelList: [],
selectNamespace: '',
expectNum: '1',
dataTableList: [],
// 生成数据接口的body
genDataBody: {
namespace: window.sessionStorage.getItem('env'),
status: '',
phoneNo: '',
name: '',
idCardNo: '',
channel: '',
fundId: '',
term: 6,
amount: 10000,
bankCardNo: '',
bankName: '',
bankCode: '',
fixedBillDay: '2',
fixedRepayDay: '12',
rate: '31.86',
symbol: ''
},
// 轮询状态
loopStatus: '',
timer: '',
websock: null,
genLog: ''
}
},
methods: {
// 随机生成用户基本信息
getUserBasicInfo() {
getAll({ count: 1 })
.then((resp) => {
let data = resp.data.data[0]
this.genDataBody.name = data['name']
this.genDataBody.idCardNo = data['IDCardNo']
this.genDataBody.bankCardNo = data['bankNo']
this.genDataBody.phoneNo = data['mobile']
this.genDataBody.bankName = data['bankType'].split(' ')[0]
this.genDataBody.bankCode = data['bankType'].split(' ')[1]
})
.catch((error) => console.log(error))
},
reGenBankCardData() {
this.getUserBasicInfo()
},
// 获取资方和渠道列表
getSupportChannelAndFund() {
getSupportChannelAndFund().then((resp) => {
this.channelList = resp.data.data.channelList
this.fundList = resp.data.data.fundList
})
},
// 造数据
genData() {
if (this.genDataBody.status === '') {
return this.$message.error('借款状态不能为空!')
}
if (this.genDataBody.channel === '') {
return this.$message.error('渠道不能为空!')
}
if (this.genDataBody.fundId === '') {
return this.$message.error('资方不能为空!')
}
if (this.genDataBody.phoneNo === '') {
return this.$message.error('手机号不能为空!')
}
this.genDataBody.symbol = uuid()
// 请求造数据接口
genData(this.genDataBody)
.then((resp) => {
if (resp.data.data === false) {
// 结束轮询
this.loopStatus = this.genDataBody.status
this.queryGenProgress(this.genDataBody.phoneNo)
return this.$message.error('数据生成失败!')
} else {
// 结束轮询
this.loopStatus = this.genDataBody.status
this.queryGenProgress(this.genDataBody.phoneNo)
return this.$message.success('数据生成成功!')
}
})
.catch((error) => {
console.log(error)
return this.$message.error('数据接口返回失败!')
})
this.$message.success('开始造数据!')
this.initWebSocket()
this.timer = setInterval(
this.queryGenProgress,
10000,
this.genDataBody.phoneNo
)
},
// 选定渠道有变化
handleChannelChange() {
if (this.genDataBody.channel !== '') {
channelMappedFund({ channel: this.genDataBody.channel }).then(
(resp) => {
this.fundList = resp.data.data
}
)
}
},
// 选定资方有变化
haneleFundChange() {
if (this.genDataBody.fundId !== '') {
fundMappedChannel({ fundId: this.genDataBody.fundId }).then((resp) => {
this.channelList = resp.data.data
})
}
},
// 清空下拉框
handleClear() {
this.getSupportChannelAndFund()
},
// 查询造数据过程中的用户状态
queryGenProgress(phoneNo) {
queryUserStatus({
namespace: window.sessionStorage.getItem('env'),
phoneNo: phoneNo
})
.then((resp) => {
this.loopStatus = resp.data.data.status
var flag = 0
// 如果数据已在表格中,则只更新状态
this.dataTableList.forEach((item) => {
if (item.phoneNo === resp.data.data.phoneNo) {
item.desc = resp.data.data.desc
item.fundId = resp.data.data.fundId
flag = 1
}
})
// 如果数据不在表格中,则将整条数据插入
if (flag !== 1) {
this.dataTableList.push(resp.data.data)
}
})
.catch((error) => {
console.log(error)
// 查询状态报错后,清除状态轮询定时器
clearInterval(this.timer)
})
},
// todo
retryToGen(phoneNo) {},
initWebSocket() {
const wsuri =
'wss:' +
process.env.QA_PLATFORM +
'/websocket/' +
this.genDataBody.symbol
this.websock = new WebSocket(wsuri)
this.websock.onopen = this.websocketonopen
this.websock.onerror = this.websocketonerror
this.websock.onmessage = this.websocketonmessage
this.websock.onclose = this.websocketclose
},
websocketonopen() {
console.log('WebSocket连接成功')
},
websocketonerror(e) {
console.log('WebSocket连接发生错误')
},
// 接收消息
websocketonmessage(e) {
this.genLog += e.data
this.genLog += '\n'
var textarea = document.getElementById('textarea')
if (textarea.scrollHeight) {
textarea.scrollTop = textarea.scrollHeight
}
},
websocketsend(agentData) {
// 数据发送
this.websock.send(agentData)
},
websocketclose(e) {
// 关闭
console.log('connection closed (' + e.code + ')')
}
},
mounted() {
this.getSupportChannelAndFund()
this.getUserBasicInfo()
},
// 计算属性
computed: {
statusData() {
return this.loopStatus
}
},
watch: {
statusData: function (newVal) {
// if (newVal !== this.genDataBody.status) {
// var timer = setInterval(
// this.queryGenProgress,
// 30000,
// this.genDataBody.phoneNo
// )
// }
// 当查询到的状态为最终状态时,结束轮询
if (newVal === this.genDataBody.status) {
clearInterval(this.timer)
}
// 当页面关闭的时候,结束轮询
this.$once('hook:beforeDestory', () => {
clearInterval(this.timer)
})
}
// scrollToBottom: function () {
// this.$nextTick(() => {
// var textarea = document.getElementById('textarea')
// textarea.scrollTop = textarea.scrollHeight
// })
// }
}
}
</script>
<style lang="less" scoped>
.dataTable {
margin-top: 20px;
}
.filter {
margin-bottom: 15px;
font-size: 14px;
}
.el-select {
margin-right: 15px;
}
.el-input {
margin-right: 15px;
}
.el-collapse {
margin-top: 10px;
}
</style>
<template>
<div>
<!-- 头部导航栏 -->
<!-- <el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item>现金分期</el-breadcrumb-item>
<el-breadcrumb-item>已有数据查询</el-breadcrumb-item>
</el-breadcrumb> -->
<!-- 卡片视图 -->
<el-card>
<div>
<!-- 借款状态下拉框 -->
借款状态:
<el-select v-model="selectStatus" placeholder="请选择借款状态" @change="selectStatusChange">
<el-option
v-for="item in statusOptions"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
<!-- 渠道 -->
渠道:
<el-input v-model="queryInfo.channel" clearable placeholder="渠道id" style="width: 200px;"></el-input>
<!-- 资方 -->
资方:
<el-input v-model="queryInfo.fundId" clearable placeholder="资方id" style="width: 200px;"></el-input>
<el-button type="primary" style="margin-left:20px" @click="checkData">查询数据</el-button>
</div>
<!-- <div>
手机号:
<el-input v-model="queryInfo.phone" clearable placeholder="手机号" style="width: 200px;"></el-input>
金额:
<el-input v-model="queryInfo.salary" clearable placeholder="金额" style="width: 200px;"></el-input>
期数:
<el-input v-model="queryInfo.termNo" clearable placeholder="期数" style="width: 200px;"></el-input>
</div>-->
<!-- 数据表格 -->
<div class="dataTable">
<el-table :data="dataTable" border style="width: 100%">
<el-table-column prop="phoneNo" label="手机号" width="150px"></el-table-column>
<el-table-column prop="userId" label="userId" width="100px"></el-table-column>
<el-table-column prop="uuid" label="uuid" width="330px"></el-table-column>
<el-table-column prop="registeredFrom" label="注册渠道" width="120px"></el-table-column>
<!-- <el-table-column prop="channelName" label="注册渠道名" width="120px"></el-table-column> -->
<el-table-column prop="fundId" label="资方id" width="120px"></el-table-column>
<!-- <el-table-column prop="fundName" label="资方名称" width="120px"></el-table-column> -->
<el-table-column prop="createdAt" label="创建时间" width="200px"></el-table-column>
<el-table-column prop="enable" label="enable">
<template slot-scope="scope">
<el-tag v-if="scope.row.enable === 1" type="success">启用</el-tag>
<el-tag v-else-if="scope.row.enable === 0" type="danger">停用</el-tag>
</template>
</el-table-column>
</el-table>
</div>
<!-- 分页 -->
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="queryInfo.pageNum"
:page-size="queryInfo.pageSize"
layout="total, prev, pager, next"
:total="totalNum"
></el-pagination>
</el-card>
</div>
</template>
<script>
import { getAllStatus, queryLoanUser } from '@/api/getXyqbData'
export default {
inject: ['reload'],
data() {
return {
baseUrl: '',
// namespaceOptions: [],
statusOptions: [],
dataTable: [],
// selectNamespace: '',
selectStatus: '',
totalNum: 0,
queryInfo: {
namespace: window.sessionStorage.getItem('env'),
status: '',
channel: '',
fundId: '',
phone: '',
salary: '',
termNo: '',
pageNum: 1,
pageSize: 10
}
}
},
methods: {
// 获取状态选项
getStatusOptions() {
getAllStatus()
.then((response) => {
this.statusOptions = response['data']['data']
})
.catch((error) => console.log(error))
},
// 获取表格数据
getTableData() {
if (this.selectNamespace === '') {
return this.$message.error('namespace不能为空!')
}
if (this.selectStatus === '' || this.selectStatus === null) {
return this.$message.error('状态不能为空!')
}
this.dataTable = []
queryLoanUser(this.queryInfo)
.then((response) => {
this.dataTable = response.data.data.content
this.totalNum = response.data.data.totalNum
console.log(this.dataTable)
})
.catch((error) => console.log(error))
},
checkData() {
this.queryInfo.pageNum = 1
this.queryInfo.pageSize = 10
this.getTableData()
},
// 用户状态改变
selectStatusChange() {
this.queryInfo.status = this.selectStatus
},
// namespace改变
selectNamespaceChange() {
this.queryInfo.namespace = this.selectNamespace
},
handleSizeChange(newSize) {
this.queryInfo.pageSize = newSize
this.getTableData()
},
handleCurrentChange(newPage) {
this.queryInfo.pageNum = newPage
this.getTableData()
}
},
mounted() {
// this.getNamespaceOptions()
this.getStatusOptions()
}
}
</script>
<style lang="less" scoped>
.dataTable {
margin-top: 20px;
}
.el-select {
margin-right: 15px;
margin-bottom: 10px;
}
.el-input {
margin-right: 15px;
}
</style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment