Commit 399771c6 authored by caimeng's avatar caimeng

编辑产品

parent cd33ef55
BASE_URL='' BASE_URL=''
VUE_APP_API_PATH=http://crm.newbuytek.com VUE_APP_API_PATH=https://friday.rockstect.com
This diff is collapsed.
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta content="IE=edge" http-equiv="X-UA-Compatible" /> <meta content="IE=edge" http-equiv="X-UA-Compatible" />
<meta content="width=device-width,initial-scale=1.0" name="viewport" /> <meta content="width=device-width,initial-scale=1.0" name="viewport" />
<script src="./aliyun-oss-sdk.min.js"></script>
<link href="<%= BASE_URL %>favicon.ico" rel="icon" /> <link href="<%= BASE_URL %>favicon.ico" rel="icon" />
<title><%= VUE_APP_TITLE %></title> <title><%= VUE_APP_TITLE %></title>
<meta <meta
......
...@@ -14,7 +14,7 @@ export default { ...@@ -14,7 +14,7 @@ export default {
} }
</script> </script>
<style lang="less" scoped> <style lang="scss" scoped>
.block-header { .block-header {
display: flex; display: flex;
......
import Vue from 'vue' import Vue from "vue";
import axios from 'axios' import axios from "axios";
import { import {
contentType, contentType,
debounce, debounce,
requestTimeout, requestTimeout,
successCode, successCode,
tokenName, tokenName
} from '@/config' } from "@/config";
import store from '@/store' import store from "@/store";
import qs from 'qs' import qs from "qs";
import router from '@/router' import router from "@/router";
import { isArray } from '@/utils/validate' import { isArray } from "@/utils/validate";
const API_URL = process.env.VUE_APP_API_PATH; const API_URL = process.env.VUE_APP_API_PATH;
//console.log(API_URL,'是啥'); //console.log(API_URL,'是啥');
let loadingInstance let loadingInstance;
// 操作正常Code数组 // 操作正常Code数组
const codeVerificationArray = isArray(successCode) const codeVerificationArray = isArray(successCode)
? [...successCode] ? [...successCode]
: [...[successCode]] : [...[successCode]];
const CODE_MESSAGE = { const CODE_MESSAGE = {
200: '服务器成功返回请求数据', 200: "服务器成功返回请求数据",
201: '新建或修改数据成功', 201: "新建或修改数据成功",
202: '一个请求已经进入后台排队(异步任务)', 202: "一个请求已经进入后台排队(异步任务)",
204: '删除数据成功', 204: "删除数据成功",
400: '发出信息有误', 400: "发出信息有误",
401: '用户没有权限(令牌、用户名、密码错误)', 401: "用户没有权限(令牌、用户名、密码错误)",
403: '用户得到授权,但是访问是被禁止的', 403: "用户得到授权,但是访问是被禁止的",
404: '访问资源不存在', 404: "访问资源不存在",
406: '请求格式不可得', 406: "请求格式不可得",
410: '请求资源被永久删除,且不会被看到', 410: "请求资源被永久删除,且不会被看到",
500: '服务器发生错误', 500: "服务器发生错误",
502: '网关错误', 502: "网关错误",
503: '服务不可用,服务器暂时过载或维护', 503: "服务不可用,服务器暂时过载或维护",
504: '网关超时', 504: "网关超时"
} };
//code: "500" //code: "500"
//message: "验证码发送过于频繁请稍后重试!" //message: "验证码发送过于频繁请稍后重试!"
...@@ -46,15 +46,15 @@ const CODE_MESSAGE = { ...@@ -46,15 +46,15 @@ const CODE_MESSAGE = {
//success: false //success: false
const handleData = ({ config, data, status, statusText }) => { const handleData = ({ config, data, status, statusText }) => {
if (loadingInstance) loadingInstance.close() if (loadingInstance) loadingInstance.close();
// 若data.code存在,覆盖默认code // 若data.code存在,覆盖默认code
let code = data && data.code ? data.code : status let code = data && data.code ? data.code : status;
// 若code属于操作正常code,则status修改为200 // 若code属于操作正常code,则status修改为200
if (codeVerificationArray.includes(code)) code = 200 if (codeVerificationArray.includes(code)) code = 200;
// 若data.msg存在,覆盖默认提醒消息 // 若data.msg存在,覆盖默认提醒消息
const msg = !data ? `后端接口 ${config.url} 异常 ${code}${CODE_MESSAGE[code]}` : !data.message ? `后端接口 ${config.url} 异常 ${code}${statusText}` : data.message const msg = !data ? `后端接口 ${config.url} 异常 ${code}${CODE_MESSAGE[code]}` : !data.message ? `后端接口 ${config.url} 异常 ${code}${statusText}` : data.message;
code = code*1; code = code * 1;
switch (code) { switch (code) {
case 200: case 200:
...@@ -65,55 +65,73 @@ const handleData = ({ config, data, status, statusText }) => { ...@@ -65,55 +65,73 @@ const handleData = ({ config, data, status, statusText }) => {
// 修改返回内容为 `data` 内容,对于绝大多数场景已经无须再关心业务状态码(code)和消息(msg) // 修改返回内容为 `data` 内容,对于绝大多数场景已经无须再关心业务状态码(code)和消息(msg)
// return data.data // return data.data
// 或者依然保持完整的格式 // 或者依然保持完整的格式
return data return data;
case 401: case 401:
Vue.prototype.$baseMessage(msg, 'error') Vue.prototype.$baseMessage(msg, "error");
store.dispatch('user/resetAll').catch(() => {}) store.dispatch("user/resetAll").catch(() => {
break });
break;
case 403: case 403:
store.dispatch('user/resetAll').catch(() => {}) store.dispatch("user/resetAll").catch(() => {
router.push({ path: '/login' }).catch(() => {}) });
break router.push({ path: "/login" }).catch(() => {
});
break;
default: default:
Vue.prototype.$baseMessage(msg, 'error') Vue.prototype.$baseMessage(msg, "error");
break break;
} }
return data return data;
} };
/** /**
* @description axios初始化 * @description axios初始化
*/ */
const instance = axios.create({ const instance = axios.create({
baseURL:API_URL, baseURL: API_URL,
timeout: requestTimeout, timeout: requestTimeout,
withCredentials: true, withCredentials: true,
headers: { headers: {
'Content-Type': contentType, "Content-Type": contentType
}, }
}) });
/** /**
* @description axios请求拦截器 * @description axios请求拦截器
*/ */
instance.interceptors.request.use( instance.interceptors.request.use(
(config) => { (config) => {
if (store.getters['user/accessToken']) if (store.getters["user/accessToken"]) {
config.headers[tokenName] = store.getters['user/accessToken'] config.headers[tokenName] = store.getters["user/accessToken"];
if ( }
config.data &&
config.headers['Content-Type'] === if (config.data && config.headers["Content-Type"] === "application/x-www-form-urlencoded;charset=UTF-8") {
'application/x-www-form-urlencoded;charset=UTF-8' config.data = qs.stringify(config.data);
) }
config.data = qs.stringify(config.data) if (debounce.some((item) => config.url.includes(item))) {
if (debounce.some((item) => config.url.includes(item))) loadingInstance = Vue.prototype.$baseLoading();
loadingInstance = Vue.prototype.$baseLoading() }
// 处理get 请求的数组 springmvc 可以处理
if (config.method === "post") {
//请求头转换为表单形式
//config.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'
//config.transformRequest = [function (data) {
// 在请求之前对data传参进行格式转换
// data = qs.stringify(data,{ indices: false })
// return data
//}]
return config return config
//config.data = qs.stringify(config.data,{ indices: false })
}
return config;
}, },
(error) => { (error) => {
return Promise.reject(error) return Promise.reject(error);
} }
) );
/** /**
* @description axios响应拦截器 * @description axios响应拦截器
...@@ -121,15 +139,15 @@ instance.interceptors.request.use( ...@@ -121,15 +139,15 @@ instance.interceptors.request.use(
instance.interceptors.response.use( instance.interceptors.response.use(
(response) => handleData(response), (response) => handleData(response),
(error) => { (error) => {
const { response } = error const { response } = error;
if (response === undefined) { if (response === undefined) {
Vue.prototype.$baseMessage( Vue.prototype.$baseMessage(
'未可知错误,大部分是由于后端不支持跨域CORS或无效配置引起', "未可知错误,大部分是由于后端不支持跨域CORS或无效配置引起",
'error' "error"
) );
return {} return {};
} else return handleData(response) } else return handleData(response);
} }
) );
export default instance export default instance;
...@@ -252,7 +252,6 @@ export default { ...@@ -252,7 +252,6 @@ export default {
if (valid) { if (valid) {
try { try {
this.loading = true; this.loading = true;
this.form.vfcode = "000000";
await this.login(this.form); await this.login(this.form);
console.log(this.handleRoute(), "打算跳转的地址"); console.log(this.handleRoute(), "打算跳转的地址");
await this.$router.push(this.handleRoute()); await this.$router.push(this.handleRoute());
......
...@@ -147,13 +147,11 @@ export default { ...@@ -147,13 +147,11 @@ export default {
{ {
order: 1, order: 1,
label: "机构编号", label: "机构编号",
prop: "tenantNo" prop: "tenantNo"
}, },
{ {
order: 2, order: 2,
label: "机构名称", label: "机构名称",
prop: "tenantFullName" prop: "tenantFullName"
}, },
{ {
...@@ -177,8 +175,7 @@ export default { ...@@ -177,8 +175,7 @@ export default {
}, },
{ {
order: 6, order: 6,
label: "小贷拍照", label: "小贷牌照",
prop: "loanLicenseUrl" prop: "loanLicenseUrl"
}, },
{ {
......
This diff is collapsed.
This diff is collapsed.
.merchant-new{
box-sizing: border-box;
padding: 20px;
}
.form-item{
width:500px;
margin-bottom: 24px !important;
}
.mc-form-item{
width:800px;
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;
//}
...@@ -44,271 +44,6 @@ ...@@ -44,271 +44,6 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<block-header title="产品信息" />
<el-form-item
prop="appName"
class="form-item"
label="产品名称"
>
<el-input v-model="form.appName" />
</el-form-item>
<el-form-item
prop="appLogo"
class="form-item"
label="产品LOGO"
>
<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.appLogo"
:src="form.appLogo"
class="avatar"
>
<i
v-else
class="el-icon-plus avatar-uploader-icon"
/>
</el-upload>
</el-form-item>
<el-form-item
prop="appInfo"
class="form-item"
label="产品描述"
>
<el-input v-model="form.appInfo" />
</el-form-item>
<el-form-item
prop="customerNumbers"
class="form-item"
label="客服电话"
>
<el-input
v-model="form.customerNumbers"
class="el-input"
/>
</el-form-item>
<el-form-item
prop="abstratInfo"
class="form-item"
label="产品摘要"
>
<el-input
v-model="form.abstratInfo"
type="textarea"
:rows="3"
/>
</el-form-item>
<el-form-item
class="form-item"
label="产品备注"
>
<el-input
v-model="form.memo"
type="textarea"
:rows="3"
/>
</el-form-item>
<block-header title="配置信息" />
<template v-if="appNo">
<el-form-item
prop="gradeSort"
class="form-item"
label="产品等级"
>
<el-input-number
v-model="form.gradeSort"
controls-position="right"
:min="1"
:max="1000"
/>
</el-form-item>
</template>
<el-form-item
prop="creditWay"
label="授信方式"
>
<el-radio-group v-model="form.creditWay">
<el-radio :label="1">
一次授信一次借款
</el-radio>
<el-radio :label="2">
一次授信多次借款
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
required
class="form-item"
label="额度"
>
<el-row>
<el-col :span="5">
<el-form-item prop="applyAmtMin">
<el-input
v-model="form.applyAmtMin"
style="width: 80px"
/>
</el-form-item>
</el-col>
<el-col :span="4">
<div style="text-align: center">
~
</div>
</el-col>
<el-col :span="5">
<el-form-item prop="applyAmtMin">
<el-input
v-model="form.applyAmtMax"
style="width: 130px"
>
<template slot="append">
</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-form-item>
<el-form-item
prop="withdrawSpan"
class="form-item"
label="提现跨度"
>
<el-input-number
v-model="form.withdrawSpan"
controls-position="right"
:min="1"
:max="1000"
/>
</el-form-item>
<el-form-item
prop="approvalTime"
class="form-item"
label="审批时间"
>
<el-input
v-model="form.approvalTime"
class="el-input"
>
<template slot="append">
小时
</template>
</el-input>
<div class="el-extra">
从提交授信到授信结果返回时间
</div>
</el-form-item>
<el-form-item
required
class="form-item"
label="放款时间"
>
<el-row>
<el-col :span="5">
<el-form-item prop="raiseTimeMin">
<el-input
v-model="form.raiseTimeMin"
style="width: 80px"
/>
</el-form-item>
</el-col>
<el-col :span="4">
<div style="text-align: center;">
~
</div>
</el-col>
<el-col :span="5">
<el-form-item prop="raiseTimeMax">
<el-input
v-model="form.raiseTimeMax"
style="width: 130px"
>
<template slot="append">
</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-form-item>
<el-form-item
required
class="form-item"
label="每日进件时间"
>
<el-row>
<el-col :span="5">
<el-form-item prop="incomeTimeBefore">
<el-time-picker
v-model="form.incomeTimeBefore"
value-format="HH:mm:ss"
style="width: 120px"
placeholder="起始时间"
:picker-options="{
selectableRange: '00:00:00 - 23:59:59'
}"
/>
</el-form-item>
</el-col>
<el-col :span="4">
<div style="text-align: center;">
~
</div>
</el-col>
<el-col :span="5">
<el-form-item prop="incomeTimeLate">
<el-time-picker
v-model="form.incomeTimeLate"
value-format="HH:mm:ss"
style="width: 120px"
placeholder="结束时间"
:picker-options="{
selectableRange: '00:00:00 - 23:59:59'
}"
/>
</el-form-item>
</el-col>
</el-row>
<span class="el-extra">请输入0~24之间的整数</span>
</el-form-item>
<el-form-item
prop="incomeCount"
class="form-item"
label="每日进件上限"
>
<el-input v-model="form.incomeCount" />
</el-form-item>
<el-form-item>
<el-button
type="primary"
@click="onSubmit('h5form')"
>
保存
</el-button>
<el-button @click="$router.go(-1)">
取消
</el-button>
<el-button @click="onReset('h5form')">
重置
</el-button>
</el-form-item>
</el-form> </el-form>
</div> </div>
</template> </template>
...@@ -461,6 +196,12 @@ export default { ...@@ -461,6 +196,12 @@ export default {
if (query && query.appNo) { if (query && query.appNo) {
this.appNo = query.appNo; this.appNo = query.appNo;
await this.initProd(); await this.initProd();
await this.initDict("SYS_USER_SEX");
await this.initDict("EDUCATIONAL");
await this.initDict("MONTHLY_INCOME");
await this.initDict("MARRIAGE");
await this.initDict("REGION");
} }
}, },
...@@ -482,6 +223,33 @@ export default { ...@@ -482,6 +223,33 @@ export default {
this.form = result; this.form = result;
} }
}, },
// 初始化字典
async initDict(dictType) {
const result = await API.dict({
dictType
});
if (result.success) {
const data = result.result;
switch (dictType) {
case "SYS_USER_SEX":
this.dict.sex = data;
break;
case "EDUCATIONAL":
this.dict.edu = data;
break;
case "MARRIAGE":
this.dict.marriage = data;
break;
case "REGION":
this.dict.region = data;
break;
case "MONTHLY_INCOME":
this.dict.money = data;
break;
}
}
},
handleSuccessLogo(res) { handleSuccessLogo(res) {
this.form.appLogo = res.result; this.form.appLogo = res.result;
}, },
......
...@@ -2,39 +2,3 @@ ...@@ -2,39 +2,3 @@
box-sizing: border-box; box-sizing: border-box;
padding: 20px; 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;
//}
...@@ -242,7 +242,7 @@ export default { ...@@ -242,7 +242,7 @@ export default {
handleView(row) { handleView(row) {
const { appNo } = row; const { appNo } = row;
this.$router.push({ this.$router.push({
path: "/prod/edit", path: "/prod/new",
query: { appNo } query: { appNo }
}); });
}, },
......
This diff is collapsed.
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