提交 efe087b8 编写于 作者: 张平's avatar 张平

Merge branch 'dev-risk-20201204' into 'release'

风控系统   code reviewer: 张平

风控系统

See merge request !1
...@@ -7,7 +7,7 @@ module.exports = { ...@@ -7,7 +7,7 @@ module.exports = {
index: path.resolve(__dirname, '../dist/index.html'), index: path.resolve(__dirname, '../dist/index.html'),
assetsRoot: path.resolve(__dirname, '../dist'), assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'static', assetsSubDirectory: 'static',
assetsPublicPath: '/sensitive/', // 上线前改为相应的路径名称 assetsPublicPath: '/pica_risk/', // 上线前改为相应的路径名称
productionSourceMap: false, productionSourceMap: false,
// Gzip off by default as many popular static hosts such as // Gzip off by default as many popular static hosts such as
// Surge or Netlify already gzip all static assets for you. // Surge or Netlify already gzip all static assets for you.
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>数据服务</title> <title>风控系统</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name ="viewport" content ="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"> <meta name ="viewport" content ="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
<meta content="" name="description"/> <meta content="" name="description"/>
......
...@@ -8223,6 +8223,22 @@ ...@@ -8223,6 +8223,22 @@
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"v-viewer": {
"version": "1.5.1",
"resolved": "http://192.168.110.93:4873/v-viewer/-/v-viewer-1.5.1.tgz",
"integrity": "sha512-Q5ICKzmYQD0qTf+hti2Lhgy6UYY2zgFr+YrN9a3yPgr7pOjYrG405Pz4+6Z6FXlhdhGysCWFJUNCI2tsIyvjWQ==",
"requires": {
"throttle-debounce": "^2.0.1",
"viewerjs": "^1.5.0"
},
"dependencies": {
"throttle-debounce": {
"version": "2.3.0",
"resolved": "http://192.168.110.93:4873/throttle-debounce/-/throttle-debounce-2.3.0.tgz",
"integrity": "sha1-/TGGXmZQIHHkEYF+JBRls+nDcuI="
}
}
},
"validate-npm-package-license": { "validate-npm-package-license": {
"version": "3.0.3", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
...@@ -8257,6 +8273,11 @@ ...@@ -8257,6 +8273,11 @@
"extsprintf": "^1.2.0" "extsprintf": "^1.2.0"
} }
}, },
"viewerjs": {
"version": "1.9.0",
"resolved": "http://192.168.110.93:4873/viewerjs/-/viewerjs-1.9.0.tgz",
"integrity": "sha1-bfr1REDDsvdpG4Vma6bSdwjtlZI="
},
"vm-browserify": { "vm-browserify": {
"version": "0.0.4", "version": "0.0.4",
"resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
......
...@@ -24,7 +24,9 @@ ...@@ -24,7 +24,9 @@
"vue-table-with-tree-grid": "^0.2.4", "vue-table-with-tree-grid": "^0.2.4",
"vue-xlsx-table": "^1.2.8", "vue-xlsx-table": "^1.2.8",
"vuedraggable": "^2.16.0", "vuedraggable": "^2.16.0",
"vuex": "^3.0.1" "vuex": "^3.0.1",
"v-viewer": "^1.2.1",
"viewerjs": "^1.3.0"
}, },
"devDependencies": { "devDependencies": {
"autoprefixer": "^6.7.2", "autoprefixer": "^6.7.2",
......
...@@ -54,7 +54,7 @@ export const getAddress = () => { ...@@ -54,7 +54,7 @@ export const getAddress = () => {
Url = ipAddress + "/ADMIN_CMS_FE/rest/"; Url = ipAddress + "/ADMIN_CMS_FE/rest/";
//msUrl = "http://10.177.15.117:10201" + "/contents/"; //msUrl = "http://10.177.15.117:10201" + "/contents/";
// msUrl = "http://10.177.15.154:10203" + "/contents/"; // msUrl = "http://10.177.15.154:10203" + "/contents/";
msUrl = "http://dev-sc.yunqueyi.com" + "/contents/"; msUrl = "https://dev-sc.yunqueyi.com" + "/contents/";
lectureUrl = "https://dev-sc.yunqueyi.com" lectureUrl = "https://dev-sc.yunqueyi.com"
liveUrl = "https://dev-sc.yunqueyi.com/campaign/"; liveUrl = "https://dev-sc.yunqueyi.com/campaign/";
kfUrl = "http://test1-kf.yunqueyi.com" + "/api/"; kfUrl = "http://test1-kf.yunqueyi.com" + "/api/";
...@@ -63,7 +63,7 @@ export const getAddress = () => { ...@@ -63,7 +63,7 @@ export const getAddress = () => {
// qiniuUrl = "http://10.177.15.154:10203/contents/admin/qiniu/token"; //不再使用middle服务获取七牛token // qiniuUrl = "http://10.177.15.154:10203/contents/admin/qiniu/token"; //不再使用middle服务获取七牛token
qiniuUrl = "https://dev-sc.yunqueyi.com/contents/admin/qiniu/token"; qiniuUrl = "https://dev-sc.yunqueyi.com/contents/admin/qiniu/token";
// qiniuFileUrl = "http://10.177.15.154:10203/contents/admin/qiniu/token1"; // qiniuFileUrl = "http://10.177.15.154:10203/contents/admin/qiniu/token1";
qiniuFileUrl = "http://dev-sc.yunqueyi.com/contents/admin/qiniu/token1"; qiniuFileUrl = "https://dev-sc.yunqueyi.com/contents/admin/qiniu/token1";
qiniuResourceUrl = "https://test1-videos.yunqueyi.com"; qiniuResourceUrl = "https://test1-videos.yunqueyi.com";
} else if (isNotEmptyUtils(env)) {//测试test1 test2 uat } else if (isNotEmptyUtils(env)) {//测试test1 test2 uat
versionUrl = 'https://' + env + '-dev.yunqueyi.com'; versionUrl = 'https://' + env + '-dev.yunqueyi.com';
......
...@@ -102,4 +102,22 @@ export function getStrCodeNum(str) { ...@@ -102,4 +102,22 @@ export function getStrCodeNum(str) {
return false return false
} }
return true return true
}
// 封装一下请求通用的方法
export function getData(context, type, url, req, callback) {
openLoading(context);
context.$axios[type](localStorage.getItem("lectureUrl") + url, req)
.then(res => {
closeLoading(context);
let data = res.data;
if (data.code == "000000") {
if (callback) callback(data);
} else {
context.$message.error(data.message);
}
}).catch(error => {
closeLoading(this);
this.$message.error("网络出现点问题");
});
} }
\ No newline at end of file
<template> <template>
<div class="header"> <div class="header">
<div class="logo">数据服务</div> <div class="logo">风控系统</div>
<div class="user-info"> <div class="user-info">
<el-dropdown trigger="click" @command="handleCommand"> <el-dropdown trigger="click" @command="handleCommand">
<span class="el-dropdown-link"> <span class="el-dropdown-link">
......
...@@ -3,14 +3,14 @@ ...@@ -3,14 +3,14 @@
<el-menu :default-active="onRoutes" class="el-menu-vertical-demo" theme="dark" unique-opened router> <el-menu :default-active="onRoutes" class="el-menu-vertical-demo" theme="dark" unique-opened router>
<template v-for="(item, index) in items"> <template v-for="(item, index) in items">
<template v-if="item.subs"> <template v-if="item.subs">
<el-submenu :index="'index_' + index"> <el-submenu :index="'index_' + index" :key="index">
<template slot="title"><i :class="item.icon"></i>{{ item.title }}</template> <template slot="title"><i :class="item.icon"></i>{{ item.title }}</template>
<el-menu-item v-for="(subItem,i) in item.subs" :key="i" :index="subItem.index">{{ subItem.title}} <el-menu-item v-for="(subItem,i) in item.subs" :key="i" :index="subItem.index">{{ subItem.title}}
</el-menu-item> </el-menu-item>
</el-submenu> </el-submenu>
</template> </template>
<template v-else> <template v-else>
<el-menu-item :index="item.index"> <el-menu-item :index="item.index" :key="index">
<i :class="item.icon"></i>{{ item.title }} <i :class="item.icon"></i>{{ item.title }}
</el-menu-item> </el-menu-item>
</template> </template>
...@@ -20,7 +20,16 @@ ...@@ -20,7 +20,16 @@
</template> </template>
<script> <script>
import {isEmptyUtils, isNotEmptyUtils, errorResponseCheck, responseCheck, openLoading, closeLoading, messageBox, getConstantList, isNotEmptyList} from '../../common/utils'; import {
isEmptyUtils,
isNotEmptyUtils,
errorResponseCheck,
responseCheck,
openLoading,
closeLoading,
messageBox,
getConstantList,
isNotEmptyList } from '../../common/utils';
import menuApi from '../../api/menu' import menuApi from '../../api/menu'
...@@ -56,19 +65,6 @@ ...@@ -56,19 +65,6 @@
responseCheck(res, self); responseCheck(res, self);
// console.log("获取菜单成功===========",res); // console.log("获取菜单成功===========",res);
self.items = res.data.data.picapMenuModels; self.items = res.data.data.picapMenuModels;
// 敏感数据查看系统 测试 Start <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 开发前期写死的,后续改成接口获取
// self.items = [{
// icon: null,
// index: "#",
// subs: [
// {icon: null, index: "data-in", title: "数据导入", subs: []},
// {icon: null, index: "data-view", title: "数据查看", subs: []},
// ],
// title: "敏感数据",
// }]
// 敏感数据查看系统 测试 End <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
let data = JSON.parse(JSON.stringify(res.data.data));//通过这个实现深拷贝 let data = JSON.parse(JSON.stringify(res.data.data));//通过这个实现深拷贝
localStorage.setItem("privilege_data", JSON.stringify(data.picapMenuModels)); localStorage.setItem("privilege_data", JSON.stringify(data.picapMenuModels));
localStorage.setItem("user_name", data.user_name); localStorage.setItem("user_name", data.user_name);
...@@ -84,7 +80,7 @@ ...@@ -84,7 +80,7 @@
}, },
computed: { computed: {
onRoutes() { onRoutes() {
return this.$route.path.replace('/', ''); return this.$route.path;
} }
} }
} }
......
此差异已折叠。
<template>
<el-dialog title="数据修改" :visible.sync="showModal" width="750px" @close="close" center>
<el-form ref="form" :model="form">
<el-form-item label="审批编号">
<el-input style="width:220px" v-model="form.dingdingNumber" placeholder="请输入内容" required></el-input>
</el-form-item>
<el-form-item label="申请日期">
<el-date-picker v-model="form.dingdingDate" type="date" placeholder="选择日期"></el-date-picker>
</el-form-item>
<el-form-item label="sheet名称">
<el-select v-model="form.dataSheetName" placeholder="请选择">
<el-option
v-for="item in options"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="数据需求方类型">
<el-radio-group v-model="form.dataType" @change="changeinout">
<el-radio :label="1">内部</el-radio>
<el-radio :label="2">外部</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="数据需求方姓名">
<el-input style="width:200px" v-model="form.reviseName" placeholder="请输入内容"></el-input>
</el-form-item>
<el-form-item label="数据需求方手机号">
<el-input style="width:200px" v-model="form.revisePhone" placeholder="请输入内容"></el-input>
</el-form-item>
<el-form-item label="敏感信息查看">
<el-radio v-model="form.warning_radio" label="1">&#12288;&#12288;</el-radio>
<el-radio v-model="form.warning_radio" label="2"></el-radio>
</el-form-item>
<el-form-item label="分发人员">
<el-select v-model="form.revisemsgSend" filterable placeholder="请选择">
<el-option
v-for="item in options"
:key="item.revisemsgSend"
:label="item.label"
:value="item.revisemsgSend"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="数据有效期">
<el-date-picker
v-model="form.reviseUsefulDate"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<el-form-item label="数据访问次数">
<!-- <span>数据访问次数&#12288;&#12288;</span> -->
<el-input style="width:200px" v-model="form.dataCount" placeholder="请输入内容"></el-input>
</el-form-item>
<el-form-item label="敏感信息所在位置">
<!-- <span>敏感信息所在位置</span> -->
<el-input style="width:200px" v-model="form.reviseSensitivePosition" placeholder="请输入内容"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="showModal=false">取 消</el-button>
<el-button type="primary" @click="submitForm('form')">确 定</el-button>
</span>
</el-dialog>
</template>
<script>
export default{
props: {
form: Object,
rules: Object
},
data(){
return {
options: [
{
value: "选项1",
label: "黄金糕"
},
{
value: "选项2",
label: "双皮奶"
},
{
value: "选项3",
label: "蚵仔煎"
},
{
value: "选项4",
label: "龙须面"
}
],
showModal: true
}
},
methods: {
// 切换数据需求方类型为【内部】【外部】
changeinout(value) {
console.log("handle value: ", value);
},
beforeUpload(file) {
var FileExt = file.name.replace(/.+\./, "");
if (["xls", "xlsx"].indexOf(FileExt.toLowerCase()) === -1) {
this.$message({
type: "warning",
message: "请上传后缀名为xls,xlsx的原文件!"
});
return false;
}
},
close(){
this.$emit('close')
},
submitForm(formName) {
this.$refs[formName].validate(valid => {
if (valid) {
alert("submit!");
} else {
console.log("error submit!!");
return false;
}
});
console.log("submitform触发");
},
}
}
</script>
\ No newline at end of file
...@@ -10,12 +10,16 @@ import 'element-ui/lib/theme-chalk/index.css'; // 默认主题 ...@@ -10,12 +10,16 @@ import 'element-ui/lib/theme-chalk/index.css'; // 默认主题
import {getAddress, loadCommonFilter} from './common/env' import {getAddress, loadCommonFilter} from './common/env'
import vueFilter from './common/filter'; import vueFilter from './common/filter';
import vViewer from 'v-viewer';
import 'viewerjs/dist/viewer.css';
//加载环境变量 //加载环境变量
getAddress(); getAddress();
loadCommonFilter(); loadCommonFilter();
//加载elementUi //加载elementUi
Vue.use(ElementUI); Vue.use(ElementUI);
Vue.use(vViewer);
Vue.prototype.$echarts = echarts; Vue.prototype.$echarts = echarts;
// Vue.use(vueXlsxTable, {rABS: false}) // Vue.use(vueXlsxTable, {rABS: false})
......
...@@ -18,37 +18,30 @@ export default new Router({ ...@@ -18,37 +18,30 @@ export default new Router({
children: [ children: [
{ {
path: '/', path: '/',
redirect: '/data-view', redirect: '/doctor-black',
},{ // 数据导入 },{
path: '/data-in', path: '/doctor-black', // 医生黑名单
component: resolve => require(['../views/sensitive-control/data-in.vue'], resolve), component: resolve => require(['../views/black-list/doctor-black.vue'], resolve),
}, { // 数据统计 },{
path: '/data-statistic', path: '/empty-phone', // 居民假空号
component: resolve => require(['../views/sensitive-control/data-statistic.vue'], resolve), component: resolve => require(['../views/black-list/empty-phone.vue'], resolve),
},{
},{ // 数据查看 path: '/strategy-list', // 策略管理
path: '/data-view', component: resolve => require(['../views/strategy-data/strategy-list.vue'], resolve),
component: resolve => require(['../views/sensitive-control/data-view.vue'], resolve) },{
}, path: '/strategy-edit',
{ // 用户路径分析 component: resolve => require(['../views/strategy-data/strategy-edit.vue'], resolve),
path: '/user-path', },{
component: resolve => require(['../views/user-path/funnel.vue'], resolve) path: '/order-list', // 云药房订单
}, component: resolve => require(['../views/order-list/order-list.vue'], resolve),
{ // 用户路径分析--新增转化漏斗 },{
path: '/add-funnel', path: '/order-detail',
component: resolve => require(['../views/user-path/add-funnel.vue'], resolve) component: resolve => require(['../views/order-list/order-detail.vue'], resolve),
},
{ // 用户路径分析--查看数据
path: '/path-data',
component: resolve => require(['../views/user-path/funnel-data.vue'], resolve)
}, },
] ]
}, },
{ // 短信中的 数据查看页面
path: '/data-view-message',
component: resolve => require(['../views/sensitive-control/data-view-message.vue'], resolve)
},
] ]
......
此差异已折叠。
此差异已折叠。
<template>
<div class="order-detail-container">
<div class="title">
<el-breadcrumb separator="/">
<el-breadcrumb-item :to="{ path: '/order-list' }">订单列表</el-breadcrumb-item>
<el-breadcrumb-item>订单详情</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="order">
<p>订单信息</p>
<div>
<span class="label">订单ID:</span><span class="con">{{rowId}}</span>
<span class="label">下单时间:</span><span class="con">{{detailData.orderTime}}</span>
<span class="label">订单金额:</span><span class="con">{{detailData.totalPrice}}</span>
<span class="label">支付方式:</span><span class="con">{{payTypeText}}</span>
</div>
<div class="info">
<span v-for="(item, index) in detailData.goodsRespList" :key="index">
<span class="label">商品{{index + 1}}</span><span class="con">{{item.goodsName}}*{{item.purchaseNum}}__{{item.purchasingPrice}}</span>
</span>
</div>
</div>
<div class="order">
<p>开单店铺信息</p>
<span class="label">店铺名称:</span><span class="con">{{detailData.storeName}}</span>
<span class="label">店铺所在区:</span><span class="con">{{detailData.storeAddress}}</span>
</div>
<div class="order">
<p>下单人信息</p>
<span class="label">下单人姓名:</span><span class="con">{{detailData.placeOrderName}}</span>
<span class="label">手机号:</span><span class="con">{{detailData.placeOrderMobile}}</span>
<span class="label">地区归属:</span><span class="con">{{detailData.placeOrderAddress}}</span>
</div>
<div class="order">
<p>处方信息</p>
<div class="">暂无处方信息/处方图片:</div>
<div class="approveImg images order-img" v-viewer="{movable: true}">
<img v-for="(item, index) in detailData.recipeUrlList" :key="index" :src="item"/>
</div>
</div>
<div class="order">
<p>收货人信息</p>
<span class="label">姓名:</span><span class="con">{{detailData.receiverName}}</span>
<span class="label">手机号:</span><span class="con">{{detailData.receiverMobile}}</span>
<span class="label">详细地址:</span><span class="con">{{detailData.receiverAddress}}</span>
</div>
</div>
</template>
<script>
// import { openLoading, closeLoading } from "../../common/utils";
import { getData } from "../../common";
export default {
data() {
return {
rowId: '',
detailData: {},
payTypeText: ''
}
},
created() {
this.rowId = this.$route.query.id;
},
mounted() {
this.getDetailData();
},
methods: {
getDetailData() {
getData(this,
"get", `/riskcontrol/tradeOrder/info/${this.rowId}`, {},
data => {
this.detailData = data.data;
this.payTypeText = this.detailData.payType == 1 ? "医生支付" : "医生代付"
}
);
}
}
}
</script>
<style lang="less" scoped>
.order-detail-container {
.title {
margin-bottom: 30px;
}
.order {
border-bottom: 1px solid #efefef;
padding-bottom: 20px;
p {
padding: 20px 0px 20px;
font-size: 16px;
font-weight: 700;
}
span.label {
display: inline-block;
width: 9%;
color: #606266;
font-size: 14px;
}
.info {
margin-top: 20px;
}
.con {
display: inline-block;
width: 15%;
color: #606266;
font-size: 14px;
}
.order-img {
display: inline-block;
img {
width: 200px;
display: inline-block;
padding-right: 20px;
}
}
}
}
</style>
\ No newline at end of file
<template>
<div class="order-container">
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-form ref="form" :model="searchParam" label-suffix=":" label-width="80px" style="width: 100%;">
<el-col :span="5">
<el-form-item label="订单信息">
<el-input v-model="searchParam.searchName" clearable placeholder="请输入订单信息"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="时间">
<el-date-picker
v-model="searchParam.date"
type="date"
placeholder="选择日期"
value-format="yyyy-MM-dd">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="风险定级">
<el-select
clearable
v-model="searchParam.riskLevel"
placeholder="请选择风险等级">
<el-option
v-for="item in riskSelectData"
:key="item.level"
:label="item.level"
:value="item.level"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="3" style="padding:0;text-align:right;padding-right:15px;">
<el-button type="primary" size="small" @click="search(1)">查询</el-button>
</el-col>
</el-form>
</el-row>
<el-table
class="search-table"
:data="tableData"
style="width: 100%">
<el-table-column prop="strOrderId" label="订单ID" min-width="140" align="center"></el-table-column>
<el-table-column prop="storeName" label="店铺名称" min-width="140" align="center"></el-table-column>
<el-table-column prop="prescriberName" label="开单人" min-width="150" align="center"></el-table-column>
<el-table-column prop="placeOrderName" label="下单人" min-width="150" align="center"></el-table-column>
<el-table-column prop="orderTime" label="下单时间" min-width="150" align="center"></el-table-column>
<el-table-column prop="riskLevel" label="风险定级" min-width="150" align="center"></el-table-column>
<el-table-column prop="riskStrategy" label="命中策略" min-width="150" align="center"></el-table-column>
<el-table-column label="操作" fixed="right" align="center" min-width="200">
<template slot-scope="scope">
<el-button type="primary" size="small" @click="reviewDetail(scope.row)">查看详情</el-button>
<el-button :disabled="scope.row.orderTimeType != 1" type="primary" size="small" @click="changeRisk(scope.row)">变更风险等级</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="searchParam.pageNo"
:page-sizes="[15, 30, 50, 100, 200, 500, 700, 1000, 1500, 2000]"
:page-size="searchParam.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows">
</el-pagination>
</div>
<!-- 调整风险定级 -->
<el-dialog
title="变更风险定级"
:visible.sync="changeDialogVisible"
width="30%"
center>
<el-form ref="importForm" :model="addParam" label-suffix=":" label-width="80px">
<el-form-item label="风险定级">
<el-select v-model="addParam.riskLevel" placeholder="请选择风险等级">
<el-option
v-for="item in riskSelectData"
:key="item.level"
:label="item.level"
:value="item.level"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="变更理由">
<el-input v-model="addParam.riskLevelRemark" style="width: 300px;"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="changeDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="confirmChange">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { getData } from "../../common";
export default {
data() {
return {
changeDialogVisible: false,
searchParam: {
searchName: '',
date: '',
riskLevel: '',
pageNo: 1,
pageSize: 15
},
addParam: {
riskLevel: '',
riskLevelRemark: ''
},
riskSelectData: [],
tableData: [],
totalRows: 0,
base64: '',
orderId: ''
}
},
mounted() {
this.search();
this.getRiskLeverData();
},
methods: {
// 获取风险等级数据
getRiskLeverData() {
getData(this,
"get", `/riskcontrol/tradeOrder/riskLevel`, {},
data => {
let arr = data.data;
arr.forEach((element, index) => {
this.riskSelectData.push({
level: element
})
});
}
);
},
search(param) {
if(param) this.searchParam.pageNo = 1;
if(!this.searchParam.date) this.searchParam.date = '';
getData(this,
"get", `/riskcontrol/tradeOrder/list?searchName=${this.searchParam.searchName}&pageNo=${this.searchParam.pageNo}&pageSize=${this.searchParam.pageSize}&date=${this.searchParam.date}&riskLevel=${this.searchParam.riskLevel}`, {},
data => {
this.tableData = data.data.tradeOrders;
this.totalRows = data.data.total;
}
);
},
// 查看详情
reviewDetail(row) {
this.$router.push({path: 'order-detail',query: {id: row.strOrderId}})
},
// 调整定级
changeRisk(row) {
this.changeDialogVisible = true;
this.orderId = row.strOrderId;
this.addParam.riskLevel = '';
this.addParam.riskLevelRemark = '';
},
confirmChange() {
let req = {
orderId: this.orderId,
riskLevel: this.addParam.riskLevel,
riskLevelRemark: this.addParam.riskLevelRemark
};
getData(this,
"post", `/riskcontrol/tradeOrder/changeRiskLevel`, req,
data => {
if(data.code == '000000') {
this.changeDialogVisible = false;
this.search();
}
}
);
},
handleSizeChange(value) {
this.searchParam.pageSize = value;
this.search();
},
handleCurrentChange(value) {
this.searchParam.pageNo = value;
this.search();
}
}
}
</script>
<style lang="less" scoped>
</style>
\ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
<template>
<div class="strategy-container">
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-form ref="form" :model="searchParam" label-suffix=":" style="width:100%;">
<el-col :span="18">
<el-form-item label="策略分类">
<el-select
v-model="searchParam.bizTypeId"
size="small"
placeholder="请选择策略分类"
clearable
style="margin-left: 20px"
>
<el-option
v-for="item in strategyData"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6" style="padding:0;text-align:right;padding-right:15px;">
<el-button type="primary" size="small" @click="search(1)">查询</el-button>
<el-button type="primary" size="small" @click="addStrategy">新增策略</el-button>
</el-col>
</el-form>
</el-row>
<el-table
class="search-table"
:data="tableData"
style="width: 100%">
<el-table-column prop="name" label="策略名称" min-width="140" align="center"></el-table-column>
<el-table-column prop="bizTypeName" label="策略分类" min-width="140" align="center"></el-table-column>
<el-table-column prop="paramsStyle" label="策略定义" min-width="150" align="center"></el-table-column>
<el-table-column prop="score" label="击中分值" min-width="150" align="center"></el-table-column>
<el-table-column prop="type" label="策略状态" min-width="150" align="center">
<template slot-scope="scope">
<span>{{scope.row.publishFlag | statusFilter}}</span>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" align="center" min-width="200">
<template slot-scope="scope">
<el-button v-if="scope.row.publishFlag == 1" :disabled="scope.row.type == 1 || scope.row.type == 2" type="primary" size="small" @click="actived(scope.row)">激活</el-button>
<el-button v-if="scope.row.publishFlag == 2" :disabled="scope.row.type == 1 || scope.row.type == 2" type="danger" size="small" @click="downLine(scope.row)">下线</el-button>
<el-button :disabled="scope.row.type == 1 || scope.row.type == 2" type="primary" size="small" @click="reviewData(scope.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="searchParam.pageNo"
:page-sizes="[15, 30, 50, 100, 200, 500, 700, 1000, 1500, 2000]"
:page-size="searchParam.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows">
</el-pagination>
</div>
<!-- 下线确认框 -->
<el-dialog
title="策略下线确认"
:visible.sync="downDialogVisible"
width="30%"
center>
<span>一旦下线后,后续该业务分类订单将不执行本策略检查,请记得同步完成风险定级变更</span>
<span slot="footer" class="dialog-footer">
<el-button @click="downDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="confirmDown">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { getData } from "../../common";
export default {
data() {
return {
downDialogVisible: false,
searchParam: {
bizTypeId: '',
pageNo: 1,
pageSize: 15
},
totalRows: 0,
tableData: [],
strategyData: [],
downLineId: '',
downLineFlag: 0
}
},
mounted() {
this.getCategyData();
this.search();
},
filters: {
statusFilter: function statusFilter(value) {
if (!value) return '';
let hash = {
1: '未激活',
2: '已激活',
};
return hash[value];
}
},
methods: {
search(param) {
if(param) this.searchParam.pageNo = 1;
getData(this,
"get", `/riskcontrol/strategy/list?bizTypeId=${this.searchParam.bizTypeId}&pageNo=${this.searchParam.pageNo}&pageSize=${this.searchParam.pageSize}`, {},
data => {
this.tableData = data.data.data;
this.totalRows = data.data.totalRows;
}
);
},
// 获取策略下拉数据
getCategyData() {
getData(this,
"get", `/riskcontrol/strategy/listBizType`, {},
data => {
this.strategyData = data.data;
}
);
},
// 新增策略
addStrategy() {
this.$router.push({ path: 'strategy-edit' })
},
// 激活
actived(row) {
let req = {
id: row.id,
publishFlag: 2 // 1 下线 2 激活
}
getData(this,
"post", `/riskcontrol/strategy/deploy`, req,
data => {
if(data.code == '000000') {
this.search();
}
}
);
},
// 下线
downLine(row) {
this.downDialogVisible = true;
this.downLineId = row.id;
},
confirmDown() {
let req = {
id: this.downLineId,
publishFlag: 1 // 1 下线 2 激活
}
getData(this,
"post", `/riskcontrol/strategy/deploy`, req,
data => {
if(data.code == '000000') {
this.downDialogVisible = false;
this.search();
}
}
);
},
// 编辑
reviewData(row) {
this.$router.push({ path: 'strategy-edit', query: {id: row.id} })
},
handleSizeChange(value) {
this.searchParam.pageSize = value;
this.search();
},
handleCurrentChange(value) {
this.searchParam.pageNo = value;
this.search();
}
}
}
</script>
<style lang="less" scoped>
</style>
\ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册