Browse Source

客户授信全流程

devlop
邓雄飞 4 years ago
parent
commit
1d63ccefff
18 changed files with 839 additions and 131 deletions
  1. 1
      .gitignore
  2. 35
      apis/clientCreditApi.js
  3. 10
      apis/commonApi.js
  4. 36
      enums/index.js
  5. 8
      pages.json
  6. 154
      pages/client-credit-detail/index.vue
  7. 188
      pages/client-credit-list/index.vue
  8. 180
      pages/fs-credit/index.vue
  9. 234
      pages/guarantee-agreement/index.vue
  10. 29
      pages/mine/index.vue
  11. 75
      pages/month-credit/index.vue
  12. 9
      pages/page-view/index.vue
  13. BIN
      static/imgs/client-credit-list/auditing.png
  14. BIN
      static/imgs/client-credit-list/client-default.png
  15. BIN
      static/imgs/client-credit-list/pass.png
  16. BIN
      static/imgs/client-credit-list/reject.png
  17. BIN
      static/imgs/client-credit-list/waiting-audit.png
  18. 11
      utils/index.js

1
.gitignore

@ -5,3 +5,4 @@ pages/client/index2.vue
unpackage/
.vscode/

35
apis/clientCreditApi.js

@ -25,7 +25,40 @@ export function getCustomerCreditInfo(data) {
*/
export function makeMonthlyCreditInfo(data) {
return http.post({
url: '/yyt-uec/supplier/create/customer/credit',
url: '/yyt-uec/supplier/create/customer/credit?mallSupplierId=' + data.mallSupplierId,
data
})
}
/**
* 创建飞算授信
* @param {*} data
*/
export function makeFsCreditInfo(data) {
return http.post({
url: '/yyt-uec/supplier/create/customer/feisuan-credit?mallSupplierId=' + data.mallSupplierId,
data
})
}
/**
* 获取飞算授信客户列表
* @param {*} data
*/
export function getFsCreditList(data) {
return http.get({
url: '/yyt-uec/supplier/get/customer/feisuan-credit-list',
data
})
}
/**
* 获取客户飞算授信详情
* @param {*} data
*/
export function getFsCreditDetail(data) {
return http.get({
url: '/yyt-uec/supplier/get/customer/feisuan-credit-detail',
data
})
}

10
apis/commonApi.js

@ -50,5 +50,13 @@ export function getBaseInfo(data = {}, refresh = false) {
* @param {object} data 参数 enterpriseId
*/
export function getVerifyUrl(data = {}) {
return http.post({ url: '/yyt-uec/get/fdd-enterprise-verify-url', data })
return http.post({ url: '/yyt-uec/get/fdd-enterprise-verify-url?enterpriseId=' + data.enterpriseId, data })
}
/**
* 生成担保合同的签约地址同意纸盘商只需要签约一次即可
* @param {object} data 参数 mallSupplierId
*/
export function getGuaranteeContract(data = {}) {
return http.post({ url: '/yyt-uec/create/supplier/guarantee-contract?mallSupplierId=' + data.mallSupplierId, data })
}

36
enums/index.js

@ -71,3 +71,39 @@ export const settlementPeriodEnum = [
label: '月结90'
}
]
/**
* 结算周期112233
*/
export const fsSettlementPeriodEnum = [
{
value: 1,
label: '1期'
},
{
value: 2,
label: '2期'
},
{
value: 3,
label: '3期'
}
]
/**
* 飞算结算方式 1: 先息后本
*/
export const fsSettlementMethodEnum = [
{
value: 1,
label: '先息后本'
}
]
/**
* 飞算授信审核状态 0: 待客户申请 1: 审核中 2: 通过 3: 拒绝
*/
export const fsAuditStatus = {
WAIT_APPLY: 0,
AUDITING: 1,
PASS: 2,
REJECT: 3
}

8
pages.json

@ -151,6 +151,14 @@
"enablePullDownRefresh": false
}
},
{
"path": "pages/client-credit-detail/index",
"style": {
"navigationBarTitleText": "授信信息",
"navigationStyle": "custom",
"enablePullDownRefresh": false
}
},
{
"path": "pages/my-offer/index",
"style": {

154
pages/client-credit-detail/index.vue

@ -0,0 +1,154 @@
<template>
<view>
<uni-nav-bar left-icon="back" @clickLeft="back" statusBar fixed title="飞算授信"></uni-nav-bar>
<view class="card">
<text class="label">授信额度()</text>
<text class="value">5{{ info.creditLine }}</text>
</view>
<qn-form-item label="授信客户信息" type="title"></qn-form-item>
<qn-form-item label="客户名称" required>
<text class="item_text">{{ info.name }}</text>
</qn-form-item>
<qn-form-item label="结算方式" required>
<text class="item_text">{{ transformMethod(info.settlementMethod) }}</text>
</qn-form-item>
<qn-form-item label="结算周期" required>
<text class="item_text">{{ transformPeriod(info.settlementPeriod) }}</text>
</qn-form-item>
<qn-form-item label="授信状态" required>
<text class="item_text" style="color: #007aff">{{ transform(info.status) }}</text>
</qn-form-item>
</view>
</template>
<script>
import { back } from '@/utils/hook.js'
import { fsSettlementPeriodEnum, fsSettlementMethodEnum, fsAuditStatus } from '@/enums/index.js'
import { getFsCreditDetail } from '@/apis/clientCreditApi.js'
const statusMap = [
{
label: '待客户申请',
value: fsAuditStatus.WAIT_APPLY
},
{
label: '审核中',
value: fsAuditStatus.AUDITING
},
{
label: '通过',
value: fsAuditStatus.PASS
},
{
label: '拒绝',
value: fsAuditStatus.REJECT
}
]
export default {
data() {
return {
id: null,
info: {
creditLine: 0,
name: '',
settlementMethod: 1,
settlementPeriod: null,
status: null
}
}
},
methods: {
back,
//
getCreditInfo() {
getFsCreditDetail({ id: this.id, mallSupplierId: this.$store.state.supplierInfo.supplierId }).then((res) => {
if (res) {
Object.keys(this.info).forEach((key) => {
this.info[key] = res[key]
})
}
})
},
transform(status) {
return statusMap.find((item) => item.value == status)?.label || ''
},
transformPeriod(period) {
return fsSettlementPeriodEnum.find((item) => item.value == period)?.label || ''
},
transformMethod(method) {
return fsSettlementMethodEnum.find((item) => item.value == method)?.label || ''
}
},
onLoad(option) {
if (option) {
this.id = option.id
} else {
uni.showToast({
title: '参数错误',
icon: 'none',
complete: () => {
setTimeout(() => {
back()
}, 1500)
}
})
}
},
created() {
this.getCreditInfo()
}
}
</script>
<style lang="scss" scoped>
.item_text {
font-size: 28rpx;
color: #333333;
}
.button_area {
width: 750rpx;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
padding: 0 32rpx;
.button__submit {
flex-grow: 1;
height: 88rpx;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
background: #007aff;
border-radius: 10rpx;
.text {
font-size: 30rpx;
color: #ffffff;
}
}
.button__submit--disabled {
opacity: 0.5;
}
}
.card {
width: 750rpx;
height: 254rpx;
background: #fff;
border-radius: 10rpx;
padding: 50rpx 32rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
.label {
font-size: 32rpx;
color: #000000;
font-weight: 600;
}
.value {
margin-top: 24rpx;
font-size: 64rpx;
color: #000000;
font-weight: 600;
}
}
</style>

188
pages/client-credit-list/index.vue

@ -0,0 +1,188 @@
<template>
<view class="content">
<uni-nav-bar left-icon="back" @clickLeft="back" statusBar fixed title="授信记录"></uni-nav-bar>
<view class="list-area">
<scroll-list ref="list" :option="option" @load="upCallback" @refresh="downCallback">
<view v-for="item in list" :key="item.id" class="container">
<view class="list-item">
<image class="item_image" src="/static/imgs/client-credit-list/client-default.png"></image>
<view class="item">
<view class="name">{{ item.name }}</view>
<text class="business">{{ transformBusiness(item.mainProducts) }}</text>
</view>
<image class="icon" style="width: 160rpx" :src="showIcon(item.status)"></image>
</view>
<view class="item-footer">
<text class="time">{{ formatTime(item.createTime) }}</text>
<text class="button" @click="go2('client-credit-detail', { id: item.id })">查看授信</text>
</view>
</view>
</scroll-list>
</view>
</view>
</template>
<script>
import { go2, back } from '@/utils/hook.js'
import { dateTimeFormat } from '@/utils/index.js'
import { getFsCreditList } from '@/apis/clientCreditApi'
import { fsAuditStatus } from '@/enums/index.js'
export default {
data() {
return {
option: {
size: 10,
auto: true,
emptyText: '暂无授信~',
background: '#F7F8FA'
},
list: [],
pagination: {
pageNum: 0, //
pageSize: 10
}
}
},
methods: {
go2,
back,
transformBusiness(business) {
let text = business?.trim() || ''
if (text.length > 17) {
text = text.substr(0, 17) + '...'
}
return '主营:' + (text || '-')
},
formatTime(time) {
return dateTimeFormat(new Date(time), 'yyyy/mm/dd')
},
showIcon(status) {
let src = ''
switch (status) {
case fsAuditStatus.AUDITING:
src = '/static/imgs/client-credit-list/auditing.png'
break
case fsAuditStatus.PASS:
src = '/static/imgs/client-credit-list/pass.png'
break
case fsAuditStatus.REJECT:
src = '/static/imgs/client-credit-list/reject.png'
break
default:
src = '/static/imgs/client-credit-list/waiting-audit.png'
break
}
return src
},
getList() {
return new Promise((resolve, reject) => {
getFsCreditList({ mallSupplierId: this.$store.state.supplierInfo.supplierId, ...this.pagination })
.then((res) => {
if (res) {
if (this.pagination.pageNum == 1) {
this.list = res.records
} else {
this.list = this.list.concat(res.records)
}
// this.list = []
// this.list = [...this.list, ...[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
resolve({ list: this.list, total: res.total })
}
})
.catch((err) => {
reject(err)
})
})
},
downCallback() {
this.pagination.pageNum = 1
this.getList()
.then(({ list, total }) => {
this.$refs.list.refreshSuccess({ list, total })
})
.catch(() => {
this.$refs.list.refreshFail()
})
},
upCallback(page) {
this.pagination.pageNum++
this.getList()
.then(({ list, total }) => {
this.$refs.list.loadSuccess({ list, total })
})
.catch(() => {
this.$refs.list.loadFail()
})
}
}
}
</script>
<style lang="scss" scoped>
.content {
display: flex;
flex-direction: column;
flex: 1;
height: 100vh;
.list-area {
flex-grow: 1;
overflow: hidden;
}
}
.container {
background-color: #fff;
margin-bottom: 20rpx;
.list-item {
width: 750rpx;
height: 148rpx;
padding: 24rpx 32rpx;
display: flex;
flex-direction: row;
align-items: flex-start;
border-bottom: 2rpx solid #eee;
position: relative;
.item_image {
flex-grow: 0;
flex-basis: auto;
width: 100rpx;
height: 100rpx;
margin-right: 20rpx;
}
.item {
.name {
font-size: 30rpx;
margin-bottom: 26rpx;
color: #333333;
max-width: 400rpx;
}
.business {
font-size: 26rpx;
color: #888888;
}
}
.icon {
position: absolute;
right: 0;
top: 0;
height: 50rpx;
}
}
.item-footer {
width: 750rpx;
height: 80rpx;
padding: 0 32rpx;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
.time {
font-size: 28rpx;
color: #888888;
}
.button {
font-size: 28rpx;
color: #007aff;
}
}
}
</style>

180
pages/fs-credit/index.vue

@ -0,0 +1,180 @@
<template>
<view>
<uni-nav-bar left-icon="back" @clickLeft="back" statusBar fixed title="飞算授信"></uni-nav-bar>
<view class="card">
<text class="label">最高授信额度()</text>
<text class="value">500,000.00</text>
</view>
<qn-form-item label="授信客户信息" type="title"></qn-form-item>
<qn-form-item label="客户名称" required>
<text class="item_text">{{ form.enterpriseName }}</text>
</qn-form-item>
<qn-form-item label="结算方式" required>
<qn-data-picker
v-model="form.settlementMethod"
text="right"
:border="false"
placeholder="请选择结算方式"
popup-title="请选择结算方式"
:map="{ text: 'label', value: 'value' }"
:clear-icon="false"
:localdata="fsSettlementMethodEnum"
></qn-data-picker>
</qn-form-item>
<qn-form-item label="结算周期" required>
<qn-data-picker
v-model="form.settlementPeriod"
text="right"
:border="false"
placeholder="请选择结算周期"
popup-title="请选择结算周期"
:map="{ text: 'label', value: 'value' }"
:clear-icon="false"
:localdata="fsSettlementPeriodEnum"
></qn-data-picker>
</qn-form-item>
<qn-form-item label="授信额度(元)" required>
<qn-easyinput :maxlength="9" v-model="form.creditLine" :inputBorder="false" text="right" placeholder="请设置授信额度"></qn-easyinput>
</qn-form-item>
<qn-footer fixed height="120rpx">
<view class="button_area">
<view :class="{ button__submit: true, 'button__submit--disabled': !canSubmit }" @click="canSubmit && makeCredit()">
<text class="text">立即授信</text>
</view>
</view>
</qn-footer>
</view>
</template>
<script>
import { back, go2 } from '@/utils/hook.js'
import { fsSettlementPeriodEnum, fsSettlementMethodEnum } from '@/enums/index.js'
import { makeFsCreditInfo } from '@/apis/clientCreditApi.js'
export default {
data() {
return {
form: {
enterpriseId: null,
legalPersonName: null,
enterpriseName: null,
creditLine: null,
settlementPeriod: 1,
settlementMethod: 1,
mallSupplierId: null
},
fsSettlementPeriodEnum: Object.freeze(fsSettlementPeriodEnum),
fsSettlementMethodEnum: Object.freeze(fsSettlementMethodEnum),
canSubmit: false
}
},
methods: {
back,
makeCredit() {
makeFsCreditInfo(this.form).then((res) => {
if (res) {
uni.showToast({
title: '授信成功',
icon: 'success',
duration: 2000,
success: () => {
setTimeout(() => {
go2('client-credit-list', {}, true)
}, 1500)
}
})
}
})
}
},
onLoad(option) {
if (option) {
this.form.enterpriseId = option.enterpriseId
this.form.mallSupplierId = option.mallSupplierId
this.form.legalPersonName = option.legalPersonName
this.form.enterpriseName = option.enterpriseName
}
},
created() {
if (!this.form.enterpriseId) {
uni.showToast({
title: '进入页面错误',
icon: 'error',
duration: 2000,
complete: () => {
back()
}
})
}
},
watch: {
form: {
handler(val) {
let keys = Object.keys(val)
let flag = true
for (let key of keys) {
if (!val[key]) {
flag = false
break
}
}
this.canSubmit = flag
},
deep: true
}
}
}
</script>
<style lang="scss" scoped>
.item_text {
font-size: 28rpx;
color: #333333;
}
.button_area {
width: 750rpx;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
padding: 0 32rpx;
.button__submit {
flex-grow: 1;
height: 88rpx;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
background: #007aff;
border-radius: 10rpx;
.text {
font-size: 30rpx;
color: #ffffff;
}
}
.button__submit--disabled {
opacity: 0.5;
}
}
.card {
width: 750rpx;
height: 254rpx;
background: #fff;
border-radius: 10rpx;
padding: 50rpx 32rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
.label {
font-size: 32rpx;
color: #000000;
font-weight: 600;
}
.value {
margin-top: 24rpx;
font-size: 64rpx;
color: #000000;
font-weight: 600;
}
}
</style>

234
pages/guarantee-agreement/index.vue

@ -1,7 +1,89 @@
<template>
<view>
<uni-nav-bar left-icon="back" @clickLeft="back" statusBar fixed title="担保协议"></uni-nav-bar>
<text v-html="content" style="white-space: pre-wrap; line-height: 1.5"></text>
<!-- prettier-ignore -->
<view class="container">
<view class="title">
<text class="title_text">千鸟互联纸掌柜保证协议</text>
</view>
<view class="paragraph">
<text class="sentence strong">甲方: 广州千鸟云纸信息科技有限公司</text>
<text class="sentence">注册地址: 广州市白云区钟落潭镇广从七路28号101</text>
<text class="sentence">法定代表人/负责人:邹依倩</text>
<text class="sentence">联系电话:</text>
</view>
<view class="paragraph">
<text class="sentence strong">乙方:</text>
<text class="sentence">注册地址:</text>
<text class="sentence">法定代表人/负责人:</text>
<text class="sentence">联系电话:</text>
</view>
<view class="paragraph">
<text class="sentence strong">鉴于</text>
<text class="sentence">1甲方广州千鸟云纸信息科技有限公司以下简称千鸟云纸隶属千鸟互联千鸟互联旗下产品纸掌柜以下简称平台为原纸贸易商及印刷包装企业提供原纸采销供应链金融等服务</text>
<text class="sentence">2乙方是原纸贸易商通过平台进行原纸销售推荐合作的原纸采购商以下简称交易客户使用平台供应链金融服务</text>
<text class="sentence">鉴于乙方通过平台进行原纸销售并将与原纸交易客户账期结算的交易订单通过乙方的推荐和担保交易客户通过使用甲方平台的供应链金融产品将应付货款提前支付给乙方形成交易客户与平台资金方的债务关系为保证交易客户对平台资金方债务履行保障平台资金方对交易客户债权的实现乙方自愿为交易客户对平台资金方的债务承担连带担保责任经甲乙双方共同协商在平等自愿的基础上达成如下协议</text>
</view>
<view class="paragraph">
<text class="sentence strong">具体合作</text>
<text class="sentence">1乙方通过平台于________年___月___日与原纸采购商_____________________________以下简称交易客户签订了编号为_____________的原纸购销协议以下简称购销协议在交易客户通过使用甲方平台供应链金融产品将应付货款提前支付给乙方时乙方为交易客户针对购销协议所欠平台资金方的债务承担的连带担保责任同时生效以下简称乙方担保</text>
<text class="sentence">2乙方对交易客户针对购销协议所欠平台资金方的债务承担经济上法律上的连带责任担保范围包括债务本金利息服务费如有违约金实现债权的费用包括但不限于诉讼费仲裁费执行费律师费公告费差旅费等</text>
<text class="sentence">3乙方对交易客户针对购销协议所欠平台资金方债务的担保责任期限为担保责任生效之日起至交易客户全部履行完毕对平台资金方项下全部债务义务之日止</text>
<text class="sentence">4乙方对交易客户针对购销协议所欠平台资金方债务的担保是独立持续有效不可撤销和无条件的不受任何相关方确定并生效的相关文件效力影响在交易客户同时另有抵押质押担保或其他保证人的情况下即使放弃变更或解除抵押质押担保或变更解除其他保证人保证责任乙方依然按本协议对交易客户承担连带保证责任</text>
</view>
<view class="paragraph">
<text class="sentence strong">其他约定</text>
<text class="sentence">1乙方对担保是绝无异议的当交易客户未按期偿还平台资金方欠款时平台资金方如果从甲方保证金账户扣除交易客户欠款乙方依然承担担保责任乙方同意在收到经甲方或平台资金方发出的书面索偿通知后五个工作日内如数偿还书面索偿通知中的债务而无须平台或资金方出具任何证明及其他文件除非发生明显及重大错误乙方接受甲方或平台资金方索偿要求的款项金额为准确数据甲方及平台有权采取认为适当的方式包括但不限于传真邮寄专人送达在公众媒体上公告等方式对乙方进行催收</text>
<text class="sentence">2乙方保证是依法成立的具有保证人资格的法人愿意用保证人所有或依法有权处分的资产作担保保证履行本保证担保书规定的义务同时乙方保证此担保是乙方的真实意思表示不存在任何欺诈或胁迫的因素担保决定符合企业章程规定并已获得充分授权并经上级部门/董事/股东会等有权机构批准</text>
<text class="sentence">3如乙方未如期履行担保义务甲方有权冻结乙方通过平台销售货款的待回款金额及冻结乙方的原纸货物销售待还清担保金额后</text>
<text class="sentence">4乙方保证不管本企业的工商登记事项组织结构股权结构经营方式或财务状况发生任何变化或发生债务重组重大关联交易等事项均不影响在此协议项下对乙方的法律约束力如发生上述变化可能影响乙方履行本保证担保书的能力时乙方有义务立即通知甲方或平台资金方</text>
<text class="sentence">5乙方保证一旦发生涉及或可能涉及重大经济纠纷诉讼仲裁执行或财产被依法查封扣押冻结或监管或发生影响偿债能力的其他重大不利事项时乙方应及时通知甲方并按要求落实债务的清偿及担保</text>
<text class="sentence">6非经甲方事先书面同意乙方不得转让本协议项下的保证义务经甲方事先同意而转让的乙方在本协议项下的权利义务继受人或受让人均应受本协议担保书全部条款的约束</text>
<text class="sentence">7如针对本协议项下的担保人系两人或两人以上则每一担保人对本协议主债权承担无限连带责任各担保人均不得以其他人未承担担保责任为由提出偿还顺序先后偿还金额份额分配等抗辩</text>
<text class="sentence">8在本协议担保书有效期间甲方或平台资金方对借款人及/或保证人的任何违约或延误行为施以任何宽容宽限或延缓执行相关借款合同和本协议内应享有的权益或权利均不能损害影响或限制甲方或平台资金方有关法律规定和本协议作为债权人应享有的一切权益和权利也不能视为甲方或平台资金方放弃对现有或将来违约行为采取行动的权利</text>
</view>
<view class="paragraph">
<text class="sentence strong">违约责任</text>
<text class="sentence">乙方违反本协议的任何保证或条款的的同意甲方有权选择采取下列部分或全部措施</text>
<text class="sentence">1视情节轻重暂停减少或取消乙方在平台展示或销售的合作规模</text>
<text class="sentence">2要求乙方赔偿由此给甲方或平台造成的全部损失损失包括但不限于直接经济损失以及为此支出的诉讼费(或仲裁费)保全费评估费拍卖费执行费律师代理费调查取证费等费用采取法律法规规定的其他救济措施</text>
</view>
<view class="paragraph">
<text class="sentence strong">争议及纠纷解决方式</text>
<text class="sentence">本协议适用中华人民共和国法律因本协议所产生的争议及纠纷乙方同意采取平台或甲乙双方其它协议约定的纠纷解决方式解决</text>
</view>
<view class="paragraph">
<text class="sentence strong">术语</text>
<text class="sentence">本协议所使用术语除另有明确说明外均具有与平台规定相同的含义</text>
</view>
<view class="paragraph">
<text class="sentence strong">通知</text>
<text class="sentence">1乙方与甲方或平台资金方之间关于本协议或担保所提的通知要求等应以书面形式或平台消息发送信息发出则视为送达收件方拒收的于拒收日视为送达以邮政信函方式递交的寄出后满3日视为送达以传真方式递交的收件方传真系统收到传真后视为送达或在以在公众媒体上公告的方式向乙方催收的自公告之日视为送达</text>
<text class="sentence">2乙方的联系地址为_______________________________________________乙方变更联系地址应当及时通知甲方或平台资金方否则自行承担因此可能产生的损失</text>
</view>
<view class="paragraph">
<text class="sentence strong">其他</text>
<text class="sentence">1本协议于双方盖章之日起生效本协议部分条款被认定无效的不影响其他条款的效力其他部分仍然有效</text>
<text class="sentence">2本协议属商业机密乙方不得向第三方透露对于泄密行为甲方有权通过法律手段追究其违约责任</text>
<text class="sentence">3本保证担保书一式肆份贵公司保证人各执贰份具同等法律效力</text>
</view>
<view class="paragraph">
<text class="sentence strong">以下无正文千鸟互联纸掌柜保证协议书之签章页</text>
</view>
<view class="sign">
<text class="sentence"> (盖章): </text>
<text class="sentence">法定代表人/委托代理人(签名):</text>
<text class="sentence"> : </text>
</view>
<view class="sign">
<text class="sentence"> (盖章): </text>
<text class="sentence">法定代表人/委托代理人(签名):</text>
<text class="sentence"> : </text>
</view>
<view class="footer">
<text class="sentence">签订地点广州天河区</text>
</view>
</view>
<qn-footer height="120rpx">
<view class="button-area">
<view class="button button__cancel" @click="back">
@ -16,74 +98,9 @@
</template>
<script>
const content = `
千鸟互联纸掌柜保证协议
甲方: 广州千鸟云纸信息科技有限公司
注册地址: 广州市白云区钟落潭镇广从七路28号101
法定代表人/负责人:邹依倩
联系电话:
乙方:
注册地址:
法定代表人/负责人:
联系电话:
鉴于
1甲方广州千鸟云纸信息科技有限公司以下简称千鸟云纸隶属千鸟互联千鸟互联旗下产品纸掌柜以下简称平台为原纸贸易商及印刷包装企业提供原纸采销供应链金融等服务
2乙方是原纸贸易商通过平台进行原纸销售推荐合作的原纸采购商以下简称交易客户使用平台供应链金融服务
鉴于乙方通过平台进行原纸销售并将与原纸交易客户账期结算的交易订单通过乙方的推荐和担保交易客户通过使用甲方平台的供应链金融产品将应付货款提前支付给乙方形成交易客户与平台资金方的债务关系为保证交易客户对平台资金方债务履行保障平台资金方对交易客户债权的实现乙方自愿为交易客户对平台资金方的债务承担连带担保责任经甲乙双方共同协商在平等自愿的基础上达成如下协议
具体合作
1乙方通过平台于 日与原纸采购商 以下简称交易客户签订了编号为 原纸购销协议以下简称购销协议在交易客户通过使用甲方平台供应链金融产品将应付货款提前支付给乙方时乙方为交易客户针对购销协议所欠平台资金方的债务承担的连带担保责任同时生效以下简称乙方担保
2乙方对交易客户针对购销协议所欠平台资金方的债务承担经济上法律上的连带责任担保范围包括债务本金利息服务费如有违约金实现债权的费用包括但不限于诉讼费仲裁费执行费律师费公告费差旅费等
3乙方对交易客户针对购销协议所欠平台资金方债务的担保责任期限为担保责任生效之日起至交易客户全部履行完毕对平台资金方项下全部债务义务之日止
4乙方对交易客户针对购销协议所欠平台资金方债务的担保是独立持续有效不可撤销和无条件的不受任何相关方确定并生效的相关文件效力影响在交易客户同时另有抵押质押担保或其他保证人的情况下即使放弃变更或解除抵押质押担保或变更解除其他保证人保证责任乙方依然按本协议对交易客户承担连带保证责任
其他约定
1乙方对担保是绝无异议的当交易客户未按期偿还平台资金方欠款时平台资金方如果从甲方保证金账户扣除交易客户欠款乙方依然承担担保责任乙方同意在收到经甲方或平台资金方发出的书面索偿通知后五个工作日内如数偿还书面索偿通知中的债务而无须平台或资金方出具任何证明及其他文件除非发生明显及重大错误乙方接受甲方或平台资金方索偿要求的款项金额为准确数据甲方及平台有权采取认为适当的方式包括但不限于传真邮寄专人送达在公众媒体上公告等方式对乙方进行催收
2乙方保证是依法成立的具有保证人资格的法人愿意用保证人所有或依法有权处分的资产作担保保证履行本保证担保书规定的义务同时乙方保证此担保是乙方的真实意思表示不存在任何欺诈或胁迫的因素担保决定符合企业章程规定并已获得充分授权并经上级部门/董事/股东会等有权机构批准
3如乙方未如期履行担保义务甲方有权冻结乙方通过平台销售货款的待回款金额及冻结乙方的原纸货物销售待还清担保金额后
4乙方保证不管本企业的工商登记事项组织结构股权结构经营方式或财务状况发生任何变化或发生债务重组重大关联交易等事项均不影响在此协议项下对乙方的法律约束力如发生上述变化可能影响乙方履行本保证担保书的能力时乙方有义务立即通知甲方或平台资金方
5乙方保证一旦发生涉及或可能涉及重大经济纠纷诉讼仲裁执行或财产被依法查封扣押冻结或监管或发生影响偿债能力的其他重大不利事项时乙方应及时通知甲方并按要求落实债务的清偿及担保
6非经甲方事先书面同意乙方不得转让本协议项下的保证义务经甲方事先同意而转让的乙方在本协议项下的权利义务继受人或受让人均应受本协议担保书全部条款的约束
7如针对本协议项下的担保人系两人或两人以上则每一担保人对本协议主债权承担无限连带责任各担保人均不得以其他人未承担担保责任为由提出偿还顺序先后偿还金额份额分配等抗辩
8在本协议担保书有效期间甲方或平台资金方对借款人及/或保证人的任何违约或延误行为施以任何宽容宽限或延缓执行相关借款合同和本协议内应享有的权益或权利均不能损害影响或限制甲方或平台资金方有关法律规定和本协议作为债权人应享有的一切权益和权利也不能视为甲方或平台资金方放弃对现有或将来违约行为采取行动的权利
违约责任
乙方违反本协议的任何保证或条款的的同意甲方有权选择采取下列部分或全部措施
1视情节轻重暂停减少或取消乙方在平台展示或销售的合作规模
2要求乙方赔偿由此给甲方或平台造成的全部损失损失包括但不限于直接经济损失以及为此支出的诉讼费(或仲裁费)保全费评估费拍卖费执行费律师代理费调查取证费等费用
采取法律法规规定的其他救济措施
争议及纠纷解决方式
本协议适用中华人民共和国法律因本协议所产生的争议及纠纷乙方同意采取平台或甲乙双方其它协议约定的纠纷解决方式解决
术语
本协议所使用术语除另有明确说明外均具有与平台规定相同的含义
通知
1乙方与甲方或平台资金方之间关于本协议或担保所提的通知要求等应以书面形式或平台消息发送信息发出则视为送达收件方拒收的于拒收日视为送达以邮政信函方式递交的寄出后满3日视为送达以传真方式递交的收件方传真系统收到传真后视为送达或在以在公众媒体上公告的方式向乙方催收的自公告之日视为送达
2乙方的联系地址为 乙方变更联系地址应当及时通知甲方或平台资金方否则自行承担因此可能产生的损失
其他
1本协议于双方盖章之日起生效本协议部分条款被认定无效的不影响其他条款的效力其他部分仍然有效
2本协议属商业机密乙方不得向第三方透露对于泄密行为甲方有权通过法律手段追究其违约责任
3本保证担保书一式肆份贵公司保证人各执贰份具同等法律效力
以下无正文千鸟互联纸掌柜保证协议书之签章页
(盖章):
法定代表人/委托代理人(签名):
:
(盖章):
法定代表人/委托代理人(签名):
:
签订地点广州天河区
`
import { getBaseInfo, getVerifyUrl } from '@/apis/commonApi.js'
import { getBaseInfo, getVerifyUrl, getGuaranteeContract } from '@/apis/commonApi.js'
import { go2, back, exit } from '@/utils/hook.js'
import { fddEnterpriseStatus } from '@/enums/index.js'
export default {
data() {
return {
@ -93,8 +110,7 @@ export default {
* @value {String} legalPersonName
* @value {String} mallSupplierId
*/
params: null,
content
params: null
}
},
onLoad(option) {
@ -143,8 +159,31 @@ export default {
})
return
}
//
if (target.supplier.isFinishedContract) {
uni.showToast({
title: '您已签署过担保协议,即将跳转',
icon: 'none',
complete: () => {
setTimeout(() => {
go2('fs-credit', { ...this.params })
}, 1000)
}
})
return
}
//
if (target.fddEnterpriseStatus === 3) {
if (target.fddEnterpriseStatus === fddEnterpriseStatus.CERTIFIED_SUCCESS) {
getGuaranteeContract({ mallSupplierId: this.params.mallSupplierId }).then((res) => {
if (res) {
// #ifdef APP-PLUS
go2('page-view', { title: '签约担保协议', url: encodeURIComponent(res), params: this.params })
// #endif
// #ifdef H5
window ? (window.location.href = res) : ''
// #endif
}
})
} else {
//
uni.showModal({
@ -154,7 +193,12 @@ export default {
if (res.confirm) {
getVerifyUrl({ enterpriseId: target.id }).then((res) => {
if (res) {
// #ifdef APP-PLUS
go2('page-view', { title: '实名认证', url: encodeURIComponent(res) })
// #endif
// #ifdef H5
window ? (window.location.href = res) : ''
// #endif
}
})
} else if (res.cancel) {
@ -169,6 +213,54 @@ export default {
</script>
<style lang="scss" scoped>
.container {
padding: 24rpx 32rpx;
.title {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
margin-bottom: 56rpx;
.title_text {
font-size: 34rpx;
color: #000;
font-weight: 600;
}
}
.paragraph {
display: flex;
flex-direction: column;
justify-content: center;
align-items: flex-start;
margin-bottom: 28rpx;
.strong {
font-size: 30rpx;
color: #000;
font-weight: 500;
}
}
.sentence {
font-size: 28rpx;
color: #666;
line-height: 36rpx;
white-space: pre-wrap;
margin-bottom: 14rpx;
}
.sign {
display: flex;
flex-direction: column;
justify-content: center;
align-items: flex-start;
margin-top: 84rpx;
}
.footer {
display: flex;
flex-direction: row;
justify-content: flex-end;
align-items: center;
}
}
.button-area {
width: 750rpx;
padding: 0 32rpx;

29
pages/mine/index.vue

@ -18,7 +18,7 @@
<view class="user__name">
<text class="name">{{ userInfo.name }}</text>
<image v-if="userInfo.fddEnterpriseStatus === fddStatus.UNCERTIFIED" class="image" src="/static/imgs/mine/certified-icon.png"></image>
<image v-else class="image" src="/static/imgs/mine/non-certified-icon.png"></image>
<image v-else class="image" @click="certifyCompany()" src="/static/imgs/mine/non-certified-icon.png"></image>
</view>
<view style="margin-top: 10rpx">
<text style="font-size: 26rpx; color: #fff; font-weight: 400; word-break: break-all">{{ userInfo.supplierName }}</text>
@ -116,6 +116,10 @@
<image class="icon" src="/static/imgs/mine/credit-icon.png"></image>
<text class="label">征信管理</text>
</view>
<view class="icon-item" @click="go2('client-credit-list')">
<image class="icon" src="/static/imgs/mine/credit-icon.png"></image>
<text class="label">授信记录</text>
</view>
<!-- <view class="icon-item">
<image class="icon" src="/static/imgs/mine/contract-icon.png"></image>
<text class="label">服务区域</text>
@ -188,6 +192,27 @@ export default {
logout() {
exit()
},
//
certifyCompany() {
if (this.userInfo.fddEnterpriseStatus === fddEnterpriseStatus.UNCERTIFIED || this.userInfo.fddEnterpriseStatus === fddEnterpriseStatus.CERTIFIED_FAIL) {
getVerifyUrl({ enterpriseId: this.$store.state.supplierInfo.id }).then((res) => {
if (res) {
// #ifdef APP-PLUS
go2('page-view', { title: '实名认证', url: encodeURIComponent(res) })
// #endif
// #ifdef H5
window ? (window.location.href = res) : ''
// #endif
}
})
}
if (this.userInfo.fddEnterpriseStatus === fddEnterpriseStatus.UNCERTIFIED) {
uni.showToast({
title: '认证中,请稍后~',
icon: 'none'
})
}
},
go2,
//
getStatistics() {
@ -501,6 +526,8 @@ export default {
flex-direction: column;
align-items: center;
justify-content: center;
min-width: 140rpx;
margin-bottom: 36rpx;
.icon {
width: 68rpx;
height: 68rpx;

75
pages/month-credit/index.vue

@ -1,25 +1,28 @@
<template>
<view>
<uni-nav-bar left-icon="back" @clickLeft="back" statusBar fixed title="月结授信"></uni-nav-bar>
<qn-form :columns="columns">
<text slot="enterpriseName" class="item_text">{{ form.enterpriseName }}</text>
<text slot="legalPersonName" class="item_text">{{ form.legalPersonName }}</text>
<view slot="creditLine">
<qn-easyinput :maxlength="9" v-model="form.creditLine" :inputBorder="false" text="right" placeholder="请设置授信额度"></qn-easyinput>
</view>
<view slot="settlementPeriod">
<qn-data-picker
v-model="form.settlementPeriod"
text="right"
:border="false"
placeholder="请选择结算周期"
popup-title="请选择结算周期"
:map="{ text: 'label', value: 'value' }"
:clear-icon="false"
:localdata="settlementPeriodEnum"
></qn-data-picker>
</view>
</qn-form>
<qn-form-item label="授信客户信息" type="title"></qn-form-item>
<qn-form-item label="企业名称" required>
<text class="item_text">{{ form.enterpriseName }}</text>
</qn-form-item>
<qn-form-item label="法人姓名" required>
<text class="item_text">{{ form.legalPersonName }}</text>
</qn-form-item>
<qn-form-item label="授信额度(元)" required>
<qn-easyinput :maxlength="9" v-model="form.creditLine" :inputBorder="false" text="right" placeholder="请设置授信额度"></qn-easyinput>
</qn-form-item>
<qn-form-item label="结算周期" required>
<qn-data-picker
v-model="form.settlementPeriod"
text="right"
:border="false"
placeholder="请选择结算周期"
popup-title="请选择结算周期"
:map="{ text: 'label', value: 'value' }"
:clear-icon="false"
:localdata="settlementPeriodEnum"
></qn-data-picker>
</qn-form-item>
<qn-footer fixed height="120rpx">
<view class="button_area">
<view :class="{ button__submit: true, 'button__submit--disabled': !canSubmit }" @click="canSubmit && makeCredit()">
@ -35,42 +38,9 @@ import { back, go2 } from '@/utils/hook.js'
import qnDataPicker from '@/components/qn-data-picker/qn-data-picker.vue'
import qnEasyinput from '@/components/qn-easyinput/qn-easyinput.vue'
import { settlementPeriodEnum } from '@/enums/index.js'
import qnForm from '@/components/qn-form/qn-form.vue'
import { makeMonthlyCreditInfo } from '@/apis/clientCreditApi.js'
const column = [
{
key: 1,
type: 'title',
label: '授信客户信息'
},
{
key: 'enterpriseName',
type: 'item',
label: '企业名称',
required: true
},
{
key: 'legalPersonName',
type: 'item',
label: '法人姓名',
required: true
},
{
key: 'creditLine',
type: 'item',
label: '授信额度(元)',
required: true
},
{
key: 'settlementPeriod',
type: 'item',
label: '结算周期',
required: true
}
]
export default {
components: {
qnForm,
qnDataPicker,
qnEasyinput
},
@ -85,7 +55,6 @@ export default {
mallSupplierId: null
},
settlementPeriodEnum: Object.freeze(settlementPeriodEnum),
columns: Object.freeze(column),
canSubmit: false
}
},

9
pages/page-view/index.vue

@ -38,7 +38,14 @@ export default {
},
methods: {
getMessage(data) {
console.log('getMessage:', data)
//
if (data.type == 'signSuccess') {
// go2('paper-mall-order-detail', { id: data.orderId }, true)
}
//
if (data.type == 'certificatedSuccess') {
back()
}
},
destroySocket() {
if (this.socket) {

BIN
static/imgs/client-credit-list/auditing.png

Before After
Width: 170  |  Height: 50  |  Size: 4.1 KiB

BIN
static/imgs/client-credit-list/client-default.png

Before After
Width: 140  |  Height: 140  |  Size: 13 KiB

BIN
static/imgs/client-credit-list/pass.png

Before After
Width: 150  |  Height: 50  |  Size: 3.6 KiB

BIN
static/imgs/client-credit-list/reject.png

Before After
Width: 170  |  Height: 50  |  Size: 4.1 KiB

BIN
static/imgs/client-credit-list/waiting-audit.png

Before After
Width: 170  |  Height: 50  |  Size: 3.7 KiB

11
utils/index.js

@ -3,7 +3,7 @@ import store from '@/store/index.js'
/**
* 日期格式化样例 yyyy-mm-dd hh:MM:ss
* @param date Date 需要转换的日期
* @param fmt string 转化的格式
* @param fmt string 转化的格式 yyyy-mm-dd hh:MM:ss
*/
export const dateTimeFormat = (date, fmt) => {
if (!date) {
@ -50,10 +50,15 @@ export const makeSocket = async ({ pageInfo = '', retry = false }) => {
async function createSocket() {
let url = ''
// if (env == 'production') {
// url = 'wss://api-client-yyt.qniao.cn/qn-websocket-service/wechatwebsock?token='
// } else if (env == 'test') {
// url = 'wss://api-client-yyt-test.qniao.cn/qn-websocket-service/wechatwebsock?token='
// }
if (env == 'production') {
url = 'wss://api-client-yyt.qniao.cn/qn-websocket-service/wechatwebsock?token='
url = 'wss://api-client-yyt.qniao.cn/trading-center/wechatwebsock?token='
} else if (env == 'test') {
url = 'wss://api-client-yyt-test.qniao.cn/qn-websocket-service/wechatwebsock?token='
url = 'wss://api-client-yyt-test.qniao.cn/trading-center/wechatwebsock?token='
}
const token = store.state.qnToken
const socketTask = await uni.connectSocket({

Loading…
Cancel
Save