Commit 408fa0f8 authored by caimeng's avatar caimeng

之前没有提交,新提交下

parent af1d65c1
BASE_URL=''
VUE_APP_API_PATH=http://47.99.245.36:8785
VUE_APP_API_PATH=http://114.55.246.69:8587
NODE_ENV=development
This diff is collapsed.
<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
<meta charset="utf-8" />
<meta content="IE=edge" http-equiv="X-UA-Compatible" />
<meta content="width=device-width,initial-scale=1.0" name="viewport" />
<script src="./aliyun-oss-sdk.min.js"></script>
<script src="./jQuery.1.9.1.min.js"></script>
<script src="./tdReport.1.2.min.js" charset='utf-8'></script>
<link href="favicon.png" rel="icon" type="image/png" />
<title>百灵美选管理后台</title>
<meta
content="vab,vab官网,后台管理框架,vue后台管理框架,vue-admin-beautiful,vue-admin-beautiful-pro,vue-admin-beautiful官网,vue-admin-beautiful文档,vue-element-admin,vue-element-admin官网,vue-element-admin文档,vue-admin,vue-admin官网,vue-admin文档"
name="keywords"
/>
<meta
content="百灵美选管理后台官网与文档基于vue-admin-beautiful-pro构建,简称vab(是一款超棒的vue+element中后台前端快速开发框架),QQ群972435319,作者:chuzhixin"
name="description"
/>
<meta content="chuzhixin" name="author" />
<link href="static/css/loading.css" rel="stylesheet" />
<link href="static/js/0.js" rel="prefetch"><link href="static/js/app.js" rel="preload" as="script"><link href="static/js/chunk-vendors.js" rel="preload" as="script"></head>
<body>
<div id="root"></div>
<script type="text/javascript" src="static/js/chunk-vendors.js"></script><script type="text/javascript" src="static/js/app.js"></script></body>
</html>
This diff is collapsed.
<!DOCTYPE html>
<html lang='zh-cmn-Hans'>
<head>
<meta charset='utf-8' />
<meta content='IE=edge' http-equiv='X-UA-Compatible' />
<meta content='width=device-width,initial-scale=1.0' name='viewport' />
<script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.tongdun.cn/preloan/tdreport.1.2.min.js?r=1" charset="utf-8"></script>
<link href='./favicon.png' rel='icon' type='image/png' />
<title>同盾数据报告</title>
<meta content='vab,vab官网,后台管理框架,vue后台管理框架,vue-admin-beautiful,vue-admin-beautiful-pro,vue-admin-beautiful官网,vue-admin-beautiful文档,vue-element-admin,vue-element-admin官网,vue-element-admin文档,vue-admin,vue-admin官网,vue-admin文档' name='keywords' />
<meta content='官网与文档基于vue-admin-beautiful-pro构建,简称vab(是一款超棒的vue+element中后台前端快速开发框架' name='description' />
</head>
<body>
<script>
const dataStr = localStorage.getItem('tdData')
if (dataStr) {
const data = JSON.parse(dataStr)
jQuery.showTDReport(data)
}
</script>
</body>
</html>
.first-loading-wrp {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 90vh;
min-height: 90vh;
}
.first-loading-wrp > h1 {
font-size: 30px;
font-weight: bolder;
}
.first-loading-wrp .loading-wrp {
display: flex;
align-items: center;
justify-content: center;
padding: 98px;
}
.dot {
position: relative;
box-sizing: border-box;
display: inline-block;
width: 64px;
height: 64px;
font-size: 64px;
transform: rotate(45deg);
animation: antRotate 1.2s infinite linear;
}
.dot i {
position: absolute;
display: block;
width: 28px;
height: 28px;
background-color: #1890ff;
border-radius: 100%;
opacity: 0.3;
transform: scale(0.75);
transform-origin: 50% 50%;
animation: antSpinMove 1s infinite linear alternate;
}
.dot i:nth-child(1) {
top: 0;
left: 0;
}
.dot i:nth-child(2) {
top: 0;
right: 0;
-webkit-animation-delay: 0.4s;
animation-delay: 0.4s;
}
.dot i:nth-child(3) {
right: 0;
bottom: 0;
-webkit-animation-delay: 0.8s;
animation-delay: 0.8s;
}
.dot i:nth-child(4) {
bottom: 0;
left: 0;
-webkit-animation-delay: 1.2s;
animation-delay: 1.2s;
}
@keyframes antRotate {
to {
-webkit-transform: rotate(405deg);
transform: rotate(405deg);
}
}
@-webkit-keyframes antRotate {
to {
-webkit-transform: rotate(405deg);
transform: rotate(405deg);
}
}
@keyframes antSpinMove {
to {
opacity: 1;
}
}
@-webkit-keyframes antSpinMove {
to {
opacity: 1;
}
}
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<!--
2013-9-30: Created.
-->
<svg>
<metadata>
Created by iconfont
</metadata>
<defs>
<font id="iconfont" horiz-adv-x="1024" >
<font-face
font-family="iconfont"
font-weight="500"
font-stretch="normal"
units-per-em="1024"
ascent="896"
descent="-128"
/>
<missing-glyph />
<glyph glyph-name="x" unicode="x" horiz-adv-x="1001"
d="M281 543q-27 -1 -53 -1h-83q-18 0 -36.5 -6t-32.5 -18.5t-23 -32t-9 -45.5v-76h912v41q0 16 -0.5 30t-0.5 18q0 13 -5 29t-17 29.5t-31.5 22.5t-49.5 9h-133v-97h-438v97zM955 310v-52q0 -23 0.5 -52t0.5 -58t-10.5 -47.5t-26 -30t-33 -16t-31.5 -4.5q-14 -1 -29.5 -0.5
t-29.5 0.5h-32l-45 128h-439l-44 -128h-29h-34q-20 0 -45 1q-25 0 -41 9.5t-25.5 23t-13.5 29.5t-4 30v167h911zM163 247q-12 0 -21 -8.5t-9 -21.5t9 -21.5t21 -8.5q13 0 22 8.5t9 21.5t-9 21.5t-22 8.5zM316 123q-8 -26 -14 -48q-5 -19 -10.5 -37t-7.5 -25t-3 -15t1 -14.5
t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-5 19 -11 39h-368zM336 498v228q0 11 2.5 23t10 21.5t20.5 15.5t34 6h188q31 0 51.5 -14.5t20.5 -52.5v-227h-327z" />
<glyph glyph-name="arrow-right" unicode="&#58914;" d="M725.3399071604938 383.8342991012345a41.425224691358025 41.425224691358025 0 0 0-12.924670103703681-30.074713125925918l-343.82936493827134-325.2708642765434a41.425224691358025 41.425224691358025 0 0 0-56.91825872592596 60.23227670123452l312.0976428246912 295.1961511506175-312.0976428246914 295.4447024987654a41.50807514074074 41.50807514074074 0 0 0-1.6570089876543506 58.575267713580246c15.74158538271605 16.570089876543207 42.00517783703699 17.315743920987664 58.575267713580246 1.6570089876543506l343.8293649382716-325.6022660740737a41.425224691358025 41.425224691358025 0 0 0 12.924670103703713-30.15756357530862z" horiz-adv-x="1024" />
</font>
</defs></svg>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -5,7 +5,7 @@ const theme = {
//布局种类 horizontal vertical gallery comprehensive common
layout: 'vertical',
//主题名称 default ocean green glory white
themeName: 'white',
themeName: 'glory',
//是否固定头部
fixedHeader: true,
//是否显示顶部进度条
......
This diff is collapsed.
......@@ -50,316 +50,11 @@ export default {
params
})
},
/** 授信管理接口 **/
// 预授信列表
preCreditList(data) {
return request({
url: '/credit/preList',
method: 'post',
data
})
},
// 预授信详情
preCreditDetail(params) {
return request({
url: '/credit/preDetail',
method: 'get',
params
})
},
// 预授信申述
preCreditPlead(data) {
return request({
url: '/credit/preSubmit',
method: 'post',
data
})
},
// 授信列表
creditList(data) {
return request({
url: '/credit/creditList',
method: 'post',
data
})
},
// 授信详情
creditDetail(params) {
return request({
url: '/credit/creditDetail',
method: 'get',
params
})
},
// 授信详情申述
creditPlead(data) {
OrderList(data) {
return request({
url: '/credit/myAllotSubmit',
url: 'order/orderList',
method: 'post',
data
})
},
// 我的审批列表
auditList(data) {
return request({
url: '/credit/myApproveList',
method: 'post',
data
})
},
// 我的审批详情
auditDetail(params) {
return request({
url: '/credit/myApproveDetail',
method: 'get',
params
})
},
// 初始化过滤条件的基础数据
initSearchData(data) {
return request({
url: '/credit/statusList',
method: 'post',
data
})
},
// 审批管理
// 初始化审批订单列表
initApproveList(data) {
return request({
url: '/approve/myOrderList',
method: 'post',
data
})
},
// 初始化审批订单详情
initApproveDetail(params) {
return request({
url: '/approve/myOrderDetail',
method: 'get',
params
})
},
// 审批人员上下线
initApproveOnOff(params) {
return request({
url: '/approve/getManState',
method: 'get',
params
})
},
// 审批人员上下线
approveOnOff(data) {
return request({
url: '/approve/onLineOrOffLine',
method: 'post',
data
})
},
// 转派
approveReassignment(data) {
return request({
url: '/approve/reassignment',
method: 'post',
data
})
},
// 初始化转派在线人员列表
initReassignmentUser(params) {
return request({
url: '/approve/getOnLinePerson',
method: 'get',
params
})
},
// 审批订单审批提交
approveSubmit(data) {
return request({
url: '/approve/myOrderSubmit',
method: 'post',
data
})
},
// 订单审批 选择资金方
initFinanceList(params) {
return request({
url: '/approve/financierList',
method: 'get',
params
})
},
// 风审查询
capitalSubmit(data) {
return request({
url: '/approve/fengshengCredit',
method: 'post',
data
})
},
// 查询结果
initCapitalResult(params) {
return request({
url: '/approve/capitalResult',
method: 'get',
params
})
},
// 借款管理接口
// 借款审批列表
loanAuditList(data) {
return request({
url: '/loan/auditAllotList',
method: 'post',
data
})
},
// 借款详情
loanDetail(params) {
return request({
url: '/loan/auditDetail',
method: 'get',
params
})
},
// 借款审核提交
loanAuditSubmit(data) {
return request({
url: '/loan/auditAllot',
method: 'post',
data
})
},
// 放款确认列表
loanConfirmList(data) {
return request({
url: '/loan/loanConfirmList',
method: 'post',
data
})
},
// 确认放款
loanConfirm(data) {
return request({
url: '/loan/confirmLoan',
method: 'post',
data
})
},
// 取消放款
loanCancel(data) {
return request({
url: '/loan/cancelLoan',
method: 'post',
data
})
},
// 用户管理
// 用户列表
userList(data){
return request({
url: '/user/searchAll',
method: 'post',
data
})
},
// 用户详情
userDetail(params){
return request({
url: '/user/searchAll',
method: 'get',
params
})
},
// 用户新增
userNew(data){
return request({
url: '/user/insert',
method: 'post',
data
})
},
// 用户编辑
userUpdate(data){
return request({
url: '/user/update',
method: 'post',
data
})
},
// 用户重置密码
userResetPwd(data){
return request({
url: '/user/resetPassword',
method: 'post',
data
})
},
// 用户修改密码
userUpdatePwd(data){
return request({
url: '/user/updatePassword',
method: 'post',
data
})
},
// 初始化用户角色
GetAllUserRole(params){
return request({
url: '/role/select',
method: 'get',
params
})
},
// 查询用户角色
GetUserRole(params){
return request({
url: '/user/selectUserRole',
method: 'get',
params
})
},
// 设置用户角色
SetUserRole(data){
return request({
url: '/user/userRole',
method: 'post',
data
})
},
// 获取OSS验签
initOssSign(params){
return request({
url: '/common/oss',
method: 'get',
params
})
},
// 获取OSS验签
saveExtraImg(data){
return request({
url: '/credit/uploadExtraAnnex',
method: 'post',
data
})
},
}
}
......@@ -34,13 +34,7 @@
username: 'user/username'
})
},
created() {
this.initSearchData()
},
methods: {
async initSearchData() {
await this.$store.dispatch('common/GetSearchData')
},
translateTitle,
handleCommand(command) {
switch (command) {
......
<template>
<div class="merchant-new">
<el-form
ref="h5form"
label-suffix=":"
:rules="rules"
:model="form"
label-width="120px"
>
<block-header title="创建公告" />
<el-form-item
prop="appLogo"
class="form-item"
label="公告标题ICON"
>
<el-upload
class="avatar-uploader"
:action="uploadUrl"
:with-credentials="true"
list-type="picture-card"
:show-file-list="false"
:on-success="handleSuccessLogo"
:before-upload="beforeAvatarUpload"
>
<img
v-if="form.znxTitleUrl"
:src="form.znxTitleUrl"
class="avatar"
>
<i
v-else
class="el-icon-plus avatar-uploader-icon"
/>
</el-upload>
</el-form-item>
<el-form-item
prop="znxTitle"
class="form-item"
label="公告标题"
>
<el-select
:popper-append-to-body='false'
v-model="form.znxTitle"
style="width: 100%"
size="mini"
placeholder="请选择"
>
<el-option
v-for="item in select"
:key="item.code"
:label="item.value"
:value="item.code"
/>
</el-select>
</el-form-item>
<el-form-item
prop="znxContent"
class="form-item"
label="公告内容"
>
<el-input
v-model="form.znxContent"
type="textarea"
:rows="3"
/>
</el-form-item>
<el-form-item
v-if="false"
prop="znxHref"
class="form-item"
label="公告跳转链接"
>
<el-input v-model="form.znxHref">
<template slot="prepend">
http://
</template>
</el-input>
</el-form-item>
<el-form-item>
<el-button
type="primary"
@click="onSubmit('h5form')"
>
保存
</el-button>
<el-button @click="onReset('h5form')">
重置
</el-button>
<el-button @click="$router.go(-1)">
取消
</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
import BlockHeader from "@/components/blockHeader";
import API from "@/server/api";
const $API = process.env.VUE_APP_API_PATH;
export default {
name: "MerchantNew",
components: {
"block-header": BlockHeader
},
data() {
return {
select:{},
uploadUrl: `${$API}/sysUser/upload`,
form: {
znxTitle: "",
znxTitleUrl: "",
znxContent: "",
znxHref: ""
},
rules: {
znxTitle: [{ required: true, message: "请选择公告标题", trigger: "blur" }],
znxTitleUrl: [{ required: false, message: "请上传公告标题ICON", trigger: "change" }],
znxContent: [{ required: true, message: "请输入公告内容", trigger: "blur" }],
znxHref: [{ required: false, message: "请输入公告跳转链接", trigger: "blur" }]
}
};
},
async created() {
// 再请求表单
await this.initDict();
const { query } = this.$route;
if (query && query.id) {
this.id = query.id;
await this.init();
}
},
methods: {
async initDict() {
const result = await API.dict({
dictType:'ZNXTITLE'
});
console.log(result,'hah')
if(result.success){
this.select = result.result;
}
},
async init() {
const id = this.id;
const { result, success } = await API.notice_detail({ id });
if (success) {
this.form = result;
}
},
handleSuccessLogo(res) {
this.form.znxTitleUrl = res.result;
},
beforeAvatarUpload(file) {
const isJPG = file.type === "image/jpeg";
const isPNG = file.type === "image/png";
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isJPG && !isPNG) {
this.$message.error("上传图片只能是 JPG 或者 PNG 格式!");
return false;
}
if (!isLt2M) {
this.$message.error("上传图片大小不能超过 2MB!");
return false;
}
return true;
},
onSubmit(formName) {
this.$refs[formName].validate(async (valid) => {
if (valid) {
const form = Object.assign({}, this.form);
let result;
if (this.id) {
result = await API.notice_edit({ ...form });
} else {
result = await API.notice_add({ ...form });
}
if (result.success) {
this.$baseMessage("保存成功", "success");
setTimeout(() => {
this.$router.back();
}, 1500);
}
}
});
},
onReset(formName) {
this.$refs[formName].resetFields();
}
}
};
</script>
<style lang="scss" src='../index.scss'></style>
.merchant-new{
box-sizing: border-box;
padding: 20px;
}
.form-item{
width:500px;
margin-bottom: 24px !important;
}
.avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
width: 120px;
height: 120px;
line-height: 120px;
}
.avatar-uploader .el-upload:hover {
border-color: #409eff;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 120px;
height: 120px;
line-height: 120px;
text-align: center;
}
.avatar {
width: 120px;
height: 120px;
display: block;
}
//.el-input{
// width:200px;
//}
This diff is collapsed.
<!-- 用户基础信息 -->
<template>
<el-dialog
v-drag
title='转派'
:visible.sync='visible'
:destroy-on-close='true'
:close-on-click-modal='false'
:append-to-body='false'
width='30%'
:before-close='handleClose'
>
<el-form ref='form' label-suffix=':' label-width='120' :rules='rules' :model='form'>
<el-form-item prop='user' label='转派人员'>
<template v-if='list.length'>
<el-select v-model='form.user' :popper-append-to-body='false' clearable placeholder='请选择'>
<el-option
v-for='(u,index) in list'
:key='index'
:label='u.userName'
:value='u.userId'></el-option>
</el-select>
</template>
</el-form-item>
</el-form>
<div slot='footer' class='dialog-footer'>
<el-button type='default' @click='handleClose'>取 消</el-button>
<el-button type='primary' @click='onSubmit("form")'>确 定</el-button>
</div>
</el-dialog>
</template>
<script>
import API from '@/server/api'
import _ from 'lodash'
import { mapGetters } from 'vuex'
export default {
name: 'Reassignment',
props: {
visible: {
type: Boolean,
required: true
},
//eslint-disable-next-line vue/require-default-prop
item: {
type: Object,
require: true
}
},
data() {
return {
data: null,
list: [],
rules: {
user: [
{
required: true,
trigger: 'change',
message: '请选择转派人员'
}
]
},
form: {
user: ''
}
}
},
computed: {
...mapGetters(['user'])
},
async created() {
if (this.item !== null) {
this.data = this.item
await this.initUser()
}
},
methods: {
// 初始化用户列表
async initUser() {
const result = await API.initReassignmentUser({})
console.log(result, '返回结果')
if (result.success) {
this.list = result.result
}
},
async onSubmit(formName) {
this.$refs[formName].validate(async (valid) => {
if (valid) {
console.log(this.data, '数据')
const { creditNo } = this.data
const oldAllotId = this.user.userId;
const curAllotId = this.form.user;
const result = await API.approveReassignment({
creditNo,
curAllotId,
oldAllotId
});
if(result.success){
this.$message({
type: 'success',
message: '转派成功'
})
this.$emit('callback')
this.$emit('handleClose')
}
}
})
},
handleClose() {
this.$emit('handleClose')
}
}
}
</script>
<style lang='scss'>
.custom-table-checkbox {
.el-checkbox {
display: block !important;
margin: 0 0 $base-padding/4 0;
}
}
.action-bar {
margin-bottom: 15px;
}
</style>
<template>
<div v-if='detail!==null' class='page'>
<!--用户基础信息-->
<template v-if='detail.clientDetail!==null'>
<user-base-info :contacts='detail.linkPhoneList' :base-info='detail.clientDetail' />
</template>
<!--用户项目信息-->
<template v-if='detail.projectInfoResponse!==null'>
<user-project-info :project-info='detail.projectInfoResponse' />
</template>
<!--其它信息-->
<user-other-info :info='detail' />
<!--操作日志-->
<template v-if='detail.operationLogResponse!==null'>
<block-header title='操作日志' />
<operation-log :log='detail.operationLogResponse' />
</template>
<!--申述操作-->
<template v-if='false'>
<pre-plead />
</template>
<!-- 审批操作 -->
<template v-if='visible'>
<Approval :item='item' />
</template>
</div>
</template>
<script>
import API from '@/server/api'
export default {
name: 'ApprovalDetail',
data() {
return {
// 审批相关
visible: false,
item: null,
creditNo: '',
detail: null
}
},
async created() {
const { query } = this.$route
if (query && query.creditNo) {
this.creditNo = query.creditNo
await this.init()
}
},
async mounted() {
await this.initSearchData()
},
methods: {
async initSearchData() {
await this.$store.dispatch('common/GetSearchData')
},
async init() {
const creditNo = this.creditNo
const result = await API.initApproveDetail({
creditNo
})
this.detail = result.result
// 判断是否有审批
if (this.$route.query && this.$route.query.approval) {
this.visible = true
this.item = result.result
}
console.log('审批详情', this.detail)
}
}
}
</script>
<style lang='scss' src='./index.scss'></style>
This diff is collapsed.
<!-- 预授信申述 -->
<template>
<div v-if='detail!==null' class='page'>
<block-header :title='title' />
<!--表格-->
<el-table
ref='tableSort'
border
:data='list'
style='width: 100%'
>
<el-table-column
v-for='(item, index) in finallyColumns'
:key='index'
align='center'
:label='item.label'
:sortable='item.sortable'
:width='item.width'
:fixed='!!item.fixed'
:show-overflow-tooltip='!!item.overflow'
>
<template #default='{ row }'>
<template v-if='item.label==="号码"'>
<span>{{ row.linkPhone[0] }}</span>
</template>
<span v-else>{{ row[item.prop] }}</span>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
import API from '@/server/api'
import _ from 'lodash'
export default {
name: 'Contacts',
data() {
return {
creditNo: '',
creditType: '',
title: '通讯录',
detail: null,
list: [],
listLoading: true,
checkList: ['姓名', '号码'],
columns: [
{
order: 1,
label: '姓名',
prop: 'linker'
},
{
order: 2,
label: '号码',
prop: 'linkPhone'
}
]
}
},
computed: {
finallyColumns() {
let finallyArray = []
this.checkList.forEach((checkItem) => {
finallyArray.push(
this.columns.filter((item) => item.label === checkItem)[0]
)
})
return _.sortBy(finallyArray, (item) => item.order)
}
},
async created() {
const { query } = this.$route
if (query && query.creditNo) {
this.creditNo = query.creditNo
this.creditType = query.creditType
await this.init()
}
},
methods: {
async init() {
const creditNo = this.creditNo
const creditType = this.creditType
const result = await API.creditDetail({
creditNo,
creditType
})
this.detail = result.result
const { linkPhoneList, clientDetail } = result.result
this.list = linkPhoneList
this.title = '客户『' + clientDetail.realName + '』的通讯录列表'
}
}
}
</script>
<style scoped lang='scss'>
.com-approval {
//position: relative;
margin-top: 15px;
}
</style>
<template>
<div v-if='detail!==null' class='page'>
<!--用户基础信息-->
<template v-if='detail.clientDetail!==null'>
<user-base-info
:contacts='detail.linkPhoneList'
:base-info='detail.clientDetail' />
</template>
<!--用户项目信息-->
<template v-if='detail.projectInfoResponse!==null'>
<user-project-info :project-info='detail.projectInfoResponse' />
</template>
<!--其它信息-->
<user-other-info :info='detail' />
<!--操作日志-->
<template v-if='detail.operationLogResponse!==null'>
<operation-log :log='detail.operationLogResponse' />
</template>
<!--申述操作-->
<template v-if='false'>
<pre-plead />
</template>
</div>
</template>
<script>
import API from '@/server/api'
export default {
name: 'PreDetail',
data() {
return {
creditNo: '',
creditType: '',
detail: null
}
},
async created() {
const { query } = this.$route
if (query && query.creditNo) {
this.creditNo = query.creditNo
this.creditType = query.creditType
await this.init()
}
},
methods: {
async init() {
const creditNo = this.creditNo
const creditType = this.creditType
const result = await API.creditDetail({
creditNo,
creditType
})
this.detail = result.result
}
}
}
</script>
<style lang='scss' src='./index.scss'></style>
This diff is collapsed.
<template>
<div v-if='detail!==null' class='page'>
<!--用户基础信息-->
<template v-if='detail.clientDetail!==null'>
<user-base-info
:contacts='detail.linkPhoneList'
:base-info='detail.clientDetail' />
</template>
<!--用户项目信息-->
<template v-if='detail.projectInfoResponse!==null'>
<user-project-info :project-info='detail.projectInfoResponse' />
</template>
<!--其它信息-->
<user-other-info :info='detail' />
<!--操作日志-->
<block-header title='操作日志' />
<template v-if='detail.operationLogResponse!==null'>
<operation-log :log='detail.operationLogResponse' />
</template>
<no-data v-else />
<!--申述操作-->
<template v-if='false'>
<pre-plead />
</template>
</div>
</template>
<script>
import API from '@/server/api'
export default {
name: 'PreDetail',
data() {
return {
isIncrease:false,
creditNo: '',
creditType: '',
detail: null
}
},
async created() {
const { query } = this.$route
if (query && query.creditNo) {
this.creditNo = query.creditNo
this.creditType = query.creditType
await this.init()
}
},
methods: {
async init() {
const creditNo = this.creditNo
const creditType = this.creditType
const result = await API.creditDetail({
creditNo,
creditType
})
this.detail = result.result;
if(this.$route.query && this.$route.query.increase){
this.isIncrease = true;
}
}
}
}
</script>
<style lang='scss' src='./index.scss'></style>
<template>
<div class='page-fence'>
<!--搜索-->
<block-header title='搜索' />
<div class='search'>
<el-form label-suffix=':' :inline='true' ref='form' :model='queryForm' class='form-inline'>
<el-form-item prop='creditNo' label='授信编号'>
<el-input
v-model='queryForm.creditNo'
clearable
placeholder='请输入授信编号'
/>
</el-form-item>
<el-form-item prop='realName' label='客户姓名'>
<el-input
v-model='queryForm.realName'
clearable
placeholder='请输入客户姓名'
/>
</el-form-item>
<el-form-item prop='mobile' label='手机号码'>
<el-input
v-model='queryForm.mobile'
clearable
placeholder='请输入客户手机号码'
/>
</el-form-item>
<template v-if='searchData!==null'>
<el-form-item prop='creditStatus' label='授信状态'>
<el-select :popper-append-to-body='false' v-model='queryForm.creditStatus' clearable placeholder='请选择授信状态'>
<el-option
v-for='(item,index) in searchData.creditStatusResponseList'
:label='item.creditStatusStr'
:key='index'
:value='item.creditStatus'></el-option>
</el-select>
</el-form-item>
</template>
<template v-if='searchData!==null'>
<el-form-item prop='creditResult' label='审批结果'>
<el-select :popper-append-to-body='false' v-model='queryForm.creditResult' clearable placeholder='请选择审批结果'>
<el-option
v-for='(item,index) in searchData.creditStatusResultResponseList'
:label='item.creditResultStr'
:key='index'
:value='item.creditResult'></el-option>
</el-select>
</el-form-item>
</template>
<el-form-item prop='time' label='申请时间'>
<el-date-picker
v-model='queryForm.time'
type='datetimerange'
:picker-options='pickerConfig'
:default-time="['00:00:00', '23:59:59']"
value-format='yyyy-MM-dd HH:mm:ss'
range-separator='至'
start-placeholder='开始时间'
end-placeholder='结束时间'
>
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button icon='el-icon-search' type='primary' @click='onSearch'>搜 索</el-button>
<el-button icon='el-icon-delete' type='default' @click="onReset('form')">重置</el-button>
</el-form-item>
</el-form>
</div>
<block-header title='授信列表' />
<!--表格-->
<el-table
ref='tableSort'
v-loading='listLoading'
border
:data='list'
style='width: 100%'
>
<el-table-column
v-for='(item, index) in finallyColumns'
:key='index'
align='center'
:label='item.label'
:sortable='item.sortable'
:width='item.width'
:fixed='!!item.fixed'
:show-overflow-tooltip='!!item.overflow'
>
<template #default='{ row }'>
<span v-if='item.label==="授信额度(元)"'>
{{ money(row.availableAmount) }}
</span>
<span v-else-if='item.label==="授信状态"'>
<el-tag v-if='row.creditStatus==="CREATED"' size='mini'>{{ row.creditStatusStr }}</el-tag>
<el-tag v-if='row.creditStatus==="CREDIT_ING"' type='warning' size='mini'>{{ row.creditStatusStr }}</el-tag>
<el-tag v-if='row.creditStatus==="MANUAL_CREDIT_ING"' type='warning' size='mini'>{{ row.creditStatusStr
}}</el-tag>
<el-tag v-if='row.creditStatus==="MANUAL_BACK"' type='danger' size='mini'>{{ row.creditStatusStr }}</el-tag>
<el-tag v-if='row.creditStatus==="FINISHED"' type='success' size='mini'>{{ row.creditStatusStr }}</el-tag>
</span>
<span v-else-if='item.label==="审批结果"'>
<el-tag v-if='row.creditResult==="PASS"' type='success' size='mini'>{{ row.creditResultStr }}</el-tag>
<el-tag v-if='row.creditResult==="BACK"' type='info' size='mini'>{{ row.creditResultStr }}</el-tag>
<el-tag v-if='row.creditResult==="REJECT"' type='danger' size='mini'>{{ row.creditResultStr }}</el-tag>
<el-tag v-if='row.creditResult==="RETRIAL"' type='warning' size='mini'>{{ row.creditResultStr }}</el-tag>
<el-tag v-if='row.creditResult==="NO_RESULT"' type='info' size='mini'>未出结果</el-tag>
</span>
<span v-else>{{ row[item.prop] }}</span>
</template>
</el-table-column>
<el-table-column
fixed='right'
align='center'
label='操作'
>
<template #default='{ row }'>
<el-button type='text' @click='handleDetail(row)'>详情</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
:current-page='queryForm.current'
layout='total,sizes, prev, pager, next'
:page-sizes='[10,20,30,40,50,100]'
:page-size='queryForm.size'
:total='total'
background
@size-change='handleSizeChange'
@current-change='handleCurrentChange'
/>
</div>
</template>
<script>
import _ from 'lodash'
import API from '@/server/api'
import { mapGetters } from 'vuex'
export default {
name: 'CreditList',
data() {
return {
checkList: ['授信编号', '客户姓名', '手机号码', '对应BD', '商户区域', '授信额度(元)', '申请时间', '授信状态', '审批结果'],
columns: [
{
order: 1,
label: '授信编号',
prop: 'creditNo'
},
{
order: 2,
label: '客户姓名',
prop: 'realName'
},
{
order: 3,
label: '手机号码',
width: 115,
prop: 'mobile'
},
{
order: 4,
label: '对应BD',
prop: 'bdName',
overflow: true
},
{
order: 5,
label: '商户区域',
prop: 'regionName'
},
{
order: 6,
label: '授信额度(元)',
prop: 'manualAmount'
},
{
order: 7,
label: '申请时间',
prop: 'applyDate',
width: 110
},
{
order: 9,
label: '授信状态',
prop: 'creditStatusStr'
},
{
order: 10,
label: '审批结果',
prop: 'creditResultStr'
}
],
list: [],
listLoading: true,
total: 1,
pickerConfig: this.datePickerOptions,
queryForm: {
current: 1,
size: 10,
mobile: '',
bdNo: '',
creditNo: '',
creditType:'ADD_CREDIT',
creditResult: '',
creditStatus: '',
realName: '',
time: '',
startTime: '',
endTime: '',
userId: ''
}
}
},
computed: {
finallyColumns() {
let finallyArray = []
this.checkList.forEach((checkItem) => {
finallyArray.push(
this.columns.filter((item) => item.label === checkItem)[0]
)
})
return _.sortBy(finallyArray, (item) => item.order)
},
...mapGetters(['searchData', 'user'])
},
mounted() {
this.fetchData()
},
methods: {
onSearch() {
const { time } = this.queryForm
this.queryForm.current = 1
if (time) {
this.queryForm.startTime = time[0]
this.queryForm.endTime = time[1]
} else {
this.queryForm.startTime = ''
this.queryForm.endTime = ''
}
this.fetchData()
},
// 预授信详情
handleDetail(row) {
const { creditNo, creditType} = row
this.$router.push({
path: '/credit/detail',
query: {
creditNo,
creditType,
increase:true
}
})
},
// 分页显示条数变更
handleSizeChange(val) {
this.queryForm.size = val
this.queryForm.current = 1
this.fetchData()
},
// 下一页,上一页
handleCurrentChange(val) {
this.queryForm.current = val
this.fetchData()
},
async fetchData() {
this.listLoading = true
const form = this.queryForm
const params = Object.assign({}, form)
delete params.time
//params.userId = this.user.userId;
const result = await API.creditList({ ...params })
const { records, total } = result.result
this.list = records
this.total = total
this.listLoading = false
},
// 授信申述
handlePlead() {
}
}
}
</script>
<style lang='scss' scoped>
.page-fence {
::v-deep {
i {
cursor: pointer;
}
}
box-sizing: border-box;
padding: 20px;
}
</style>
<style lang='scss'>
.custom-table-checkbox {
.el-checkbox {
display: block !important;
margin: 0 0 $base-padding/4 0;
}
}
.action-bar {
margin-bottom: 15px;
}
</style>
This diff is collapsed.
<template>
<div v-if='detail!==null' class='page'>
<block-header title='基础信息' />
<el-descriptions v-if='detail.preBasisInfoResponse!==null' style='margin-bottom: 20px;' border size='small'
:column='3'>
<el-descriptions-item label-class-name='labelCls' label='客户姓名'>{{ detail.preBasisInfoResponse.realName }}
</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='手机号码'>{{ detail.preBasisInfoResponse.mobile }}
</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='身份证号'>{{ detail.preBasisInfoResponse.idCard }}
</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='户籍地址'>{{ detail.preBasisInfoResponse.address }}
</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='申请时间'>{{ detail.preBasisInfoResponse.applyDate }}
</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='授信类型'>{{ detail.preBasisInfoResponse.creditTypeStr }}
</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='授信状态'>
{{ detail.preBasisInfoResponse.preStateStr }}
<template v-if='detail.preBasisInfoResponse.preState === "PRE_CREDIT_REFUSE"'>
<el-button @click='handlePlead' size='mini' style='margin-left: 10px' type='primary'>申诉</el-button>
</template>
</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='商户区域'>{{ detail.preBasisInfoResponse.regionName }}
</el-descriptions-item>
<!--<el-descriptions-item label-class-name='labelCls' label='首次授信'></el-descriptions-item>-->
</el-descriptions>
<block-header title='预审报告' />
<div v-if='reportResponse!==null && reportResponse.length'>
<pre-report :report='reportResponse' />
</div>
<no-data v-else />
<!--操作日志-->
<block-header title='操作日志' />
<div v-if='operationLogResponse && operationLogResponse.length'>
<operation-log :log='operationLogResponse' />
</div>
<no-data v-else />
<!--申述弹框-->
<template v-if='visible'>
<pre-plead
:dialog-visible='visible'
:item='item'
@handleClose='visible = false'
@callback='init'
/>
</template>
</div>
</template>
<script>
import API from '@/server/api'
import PreOperationLog from '@/components/operation-log'
export default {
name: 'PreDetail',
components: { PreOperationLog },
data() {
return {
visible: false,
item: null,
preCreditNo: '',
detail: null,
reportResponse:[],
operationLogResponse:[]
}
},
async created() {
const { query } = this.$route
if (query && query.preCreditNo) {
this.preCreditNo = query.preCreditNo
await this.init()
}
},
methods: {
async init() {
const preCreditNo = this.preCreditNo
const result = await API.preCreditDetail({
preCreditNo
})
const data = result.result
const {reportResponse,operationLogResponse} = data;
console.log(data,'返回数据')
this.reportResponse = reportResponse;
this.operationLogResponse = operationLogResponse;
this.detail = data;
},
// 申述
handlePlead() {
this.item = this.detail
this.item.preCreditNo = this.preCreditNo
this.visible = true
}
}
}
</script>
<style lang='scss' src='./index.scss'></style>
<template>
<div class='page-fence'>
<!--搜索-->
<block-header title='搜索' />
<div class='search'>
<el-form ref='form' label-suffix=':' :inline='true' :model='queryForm' class='form-inline'>
<el-form-item prop='orderNo' label='订单编号'>
<el-input v-model='queryForm.orderNo' clearable placeholder='请输入订单编号' />
</el-form-item>
<el-form-item prop='clientName' label='客户姓名'>
<el-input v-model='queryForm.clientName' clearable placeholder='请输入客户姓名' />
</el-form-item>
<el-form-item prop='mobile' label='手机号码'>
<el-input v-model='queryForm.mobile' clearable placeholder='请输入客户手机号码' />
</el-form-item>
<el-form-item prop='loanName' label='项目名称'>
<el-input v-model='queryForm.loanName' clearable placeholder='请输入客户手机号码' />
</el-form-item>
<template v-if='searchData!==null'>
<el-form-item prop='approvalResult' label='审批结果'>
<el-select v-model='queryForm.approvalResult' :popper-append-to-body='false' style='width: 100%;' clearable>
<el-option
v-for='(item,index) in searchData.approvalResultResponseList'
:key='index'
:value='item.approvalResult'
:label='item.approvalResultStr'>
</el-option>
</el-select>
</el-form-item>
</template>
<el-form-item prop='time' label='申请时间'>
<el-date-picker
v-model='queryForm.time'
type='datetimerange'
:picker-options='pickerConfig'
:default-time="['00:00:00', '23:59:59']"
value-format='yyyy-MM-dd HH:mm:ss'
range-separator='至'
start-placeholder='开始时间'
end-placeholder='结束时间'
>
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button icon='el-icon-search' type='primary' @click='onSearch'>搜 索</el-button>
<el-button icon='el-icon-delete' type='default' @click="onReset('form')">重 置</el-button>
</el-form-item>
</el-form>
</div>
<!--表格-->
<block-header title='借款列表' />
<el-table
ref='tableSort'
v-loading='listLoading'
border
:data='list'
style='width: 100%'
>
<el-table-column
v-for='(item, index) in finallyColumns'
:key='index'
align='center'
:label='item.label'
:sortable='item.sortable'
:width='item.width'
:fixed='!!item.fixed'
:show-overflow-tooltip='!!item.overflow'
>
<template #default='{ row }'>
<div v-if='item.label==="客户信息"'>
{{ row.realName }} <br />
{{ row.mobile }}
</div>
<div v-else-if='item.label==="借款金额"'>
{{ money(row[item.prop]) }}
</div>
<div v-else-if='item.label==="借款状态"'>
<el-tag v-if='row.loanStatus==="CANCELED"' type='info'>{{ row.loanStatusStr }}</el-tag>
<el-tag v-else-if='row.loanStatus==="SETTLED"'>{{ row.loanStatusStr }}</el-tag>
<el-tag v-else-if='row.loanStatus==="SUBMITED"' type='warning'>{{ row.loanStatusStr }}</el-tag>
<el-tag v-else type='success'>{{ row.loanStatusStr }}</el-tag>
</div>
<span v-else>{{ row[item.prop] }}</span>
</template>
</el-table-column>
<el-table-column
fixed='right'
align='center'
label='操作'
>
<template #default='{ row }'>
<template v-if='row.loanStatus==="SUBMITED" && row.stepsNo==="002"'>
<el-button size='mini' type='text' @click='handleAudit(row)'>稽核审批</el-button>
</template>
<el-button size='mini' type='text' @click='handleDetail(row)'>详情</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
:current-page='queryForm.current'
layout='total,sizes, prev, pager, next'
:page-sizes='[10,20,30,40,50,100]'
:page-size='queryForm.size'
:total='total'
background
@size-change='handleSizeChange'
@current-change='handleCurrentChange'
/>
<!--稽核弹框-->
<template v-if='visible'>
<loan-audit
:dialog-visible='visible'
:item='item'
@handleClose='visible = false'
@callback='fetchData'
/>
</template>
</div>
</template>
<script>
import _ from 'lodash'
import { doDelete, getList } from '@/api/table'
import API from '@/server/api'
import { mapGetters } from 'vuex'
export default {
name: 'Audit',
data() {
return {
visible: false,
item: null,
checkList: ['订单编号', '项目名称', '客户姓名', '手机号码', '借款金额', '借款期数', 'BD姓名', '商户区域', '创建时间', '借款状态', '资金渠道','审批结果'],
columns: [
{
order: 1,
label: '订单编号',
prop: 'orderNo'
},
{
order: 2,
label: '项目名称',
prop: 'loanName'
},
{
order: 3,
label: '客户姓名',
prop: 'realName'
},
{
order: 3,
label: '手机号码',
prop: 'mobile'
},
{
order: 5,
label: '借款金额',
prop: 'loanAmount'
},
{
order: 6,
label: '借款期数',
prop: 'loanNum'
},
{
order: 7,
label: 'BD姓名',
prop: 'bdName'
},
{
order: 8,
label: '商户区域',
prop: 'regionName'
},
{
order: 9,
width: 110,
label: '创建时间',
prop: 'gmtCreated'
},
{
order: 10,
label: '借款状态',
prop: 'loanStatusStr'
},
{
order: 11,
label: '资金渠道',
prop: 'loanSignStr'
},
{
order: 12,
label: '审批结果',
prop: 'approvalResultStr'
}
],
list: [],
listLoading: true,
pickerConfig: this.datePickerOptions,
total: 1,
queryForm: {
current: 1,
size: 10,
approvalResult:'TO_BE_REVIEWED',
mobile: '',
orderNo: '',
loanName: '',
clientName: '',
time: '',
startTime: '',
endTime: '',
userId: ''
}
}
},
computed: {
finallyColumns() {
let finallyArray = []
this.checkList.forEach((checkItem) => {
finallyArray.push(
this.columns.filter((item) => item.label === checkItem)[0]
)
})
return _.sortBy(finallyArray, (item) => item.order)
//return finallyArray
},
...mapGetters(['searchData', 'user'])
},
mounted() {
this.fetchData()
},
methods: {
onSearch() {
const { time } = this.queryForm
this.queryForm.current = 1
if (time) {
this.queryForm.startTime = time[0]
this.queryForm.endTime = time[1]
} else {
this.queryForm.startTime = ''
this.queryForm.endTime = ''
}
this.fetchData()
},
handleDetail(row) {
const { orderNo } = row
this.$router.push({
path: '/loan/detail',
query: {
orderNo
}
})
},
// 页码变更
handleSizeChange(val) {
this.queryForm.size = val
this.queryForm.current = 1
this.fetchData()
},
handleCurrentChange(val) {
this.queryForm.current = val
this.fetchData()
},
async fetchData() {
this.listLoading = true
const form = this.queryForm
const params = Object.assign({}, form)
delete params.time
const result = await API.loanAuditList({ ...params })
const { records, total } = result.result
this.list = records
this.total = total
this.listLoading = false
},
// 稽核审批
handleAudit(row) {
const { orderNo } = row
this.$router.push({
path: '/loan/detail',
query: {
orderNo,
type:"audit"
}
})
}
}
}
</script>
<style lang='scss' scoped>
.page-fence {
::v-deep {
i {
cursor: pointer;
}
}
box-sizing: border-box;
padding: 20px;
}
</style>
<style lang='scss'>
.custom-table-checkbox {
.el-checkbox {
display: block !important;
margin: 0 0 $base-padding/4 0;
}
}
.action-bar {
margin-bottom: 15px;
}
</style>
<!-- 预授信申述 -->
<template>
<el-dialog
:title='title'
:visible.sync='visible'
:destroy-on-close='true'
:close-on-click-modal='false'
:append-to-body='false'
:before-close='handleClose'
width='30%'>
<div>
<el-form ref='form' :model='form' :rules='rules' label-width='100px' label-suffix=':'>
<el-form-item label='客户名称'>
<span>{{ form.clientName }}</span>
</el-form-item>
<el-form-item label='借款金额'>
<span>{{ money(form.loanAmount) }}</span>
</el-form-item>
<el-form-item prop='memo' label='确认备注'>
<el-input v-model='form.memo' type='textarea' clearable placeholder='请输入' />
</el-form-item>
<!--<template v-if='searchData!==null && payChannelApiResponses.length && type==="confirm"'>-->
<template v-if='false'>
<el-form-item prop='payChannelApi' label='放款渠道'>
<el-radio-group v-model='form.payChannelApi'>
<el-radio
v-for='(p,index) in payChannelApiResponses'
:key='index'
:label='p.payChannelApi'>
{{ p.payChannelApiStr }}
</el-radio>
</el-radio-group>
</el-form-item>
</template>
</el-form>
</div>
<div slot='footer' class='dialog-footer'>
<el-button type='primary' @click='handleLoan("form")'>确 定</el-button>
<el-button @click='handleClose'>取 消</el-button>
</div>
</el-dialog>
</template>
<script>
import API from '@/server/api'
import { mapGetters } from 'vuex'
export default {
name: 'Approval',
props: {
visible: {
type: Boolean,
require: true
},
title: {
type: String,
require: true
},
item: {
type: Object,
require: true
}
},
data() {
return {
rules: {
payChannelApi: [
{
required: true,
trigger: 'change',
message: '请选择放款渠道'
}
],
memo: [
{
required: true,
trigger: 'blur',
message: '请输入审批备注'
}
]
},
type: '',
//payChannelApiResponses: [],
form: {
loanAmount: '',
clientName: '',
currentAction: '',
orderNo: '',
memo: '',
stepsNo: '',
userId: '',
//payChannelApi: ''
}
}
},
computed: {
...mapGetters(['searchData', 'user'])
},
created() {
if (this.item !== null) {
const { realName, loanAmount, type, currentAction, orderNo, stepsNo } = this.item
this.type = type
this.form.clientName = realName
this.form.loanAmount = loanAmount
this.form.currentAction = currentAction
this.form.orderNo = orderNo
this.form.stepsNo = stepsNo
}
},
methods: {
handleClose() {
this.$emit('handleClose')
},
handleLoan(formName) {
this.$refs[formName].validate(async (valid) => {
if (valid) {
const form = this.form
form.userId = this.user.userId
console.log(form, '表单书')
let result
if (this.type === 'confirm') {
result = await API.loanConfirm({
...form
})
} else {
result = await API.loanCancel({
...form
})
}
if (result.success) {
this.$message({
type: 'success',
message: '操作成功!'
})
this.$emit('callback')
this.$emit("handleClose")
}
}
})
}
}
}
</script>
<style lang='scss'>
</style>
This diff is collapsed.
.merchant-new{
box-sizing: border-box;
padding: 20px;
}
.form-item{
width:500px;
margin-bottom: 24px !important;
}
.avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
width: 120px;
height: 120px;
line-height: 120px;
}
.avatar-uploader .el-upload:hover {
border-color: #409eff;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 120px;
height: 120px;
line-height: 120px;
text-align: center;
}
.avatar {
width: 120px;
height: 120px;
display: block;
}
//.el-input{
// width:200px;
//}
This diff is collapsed.
......@@ -305,7 +305,7 @@ export default {
<style lang="scss" scoped>
.login-container {
height: 100vh;
background: url('~@/assets/login_images/background.jpg') center center fixed no-repeat;
background: url('~@/assets/login_images/bg1.jpg') center center fixed no-repeat;
background-size: cover;
}
......
......@@ -64,7 +64,7 @@ module.exports = {
"/api": {
//target: "http://192.168.0.199:8221",
//target: "http://192.168.0.26:8785",
target: "http://47.99.245.36:8785",
target: "http://114.55.246.69:8587",
ws: true,
changeOrigin: true,
pathRewrite: {
......
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