Browse Source
Merge branch 'devlop' of http://git.qniao.cn/dengxiongfei/paper-shopkeeper-app into devlop
devlop
Merge branch 'devlop' of http://git.qniao.cn/dengxiongfei/paper-shopkeeper-app into devlop
devlop
23 changed files with 2273 additions and 2149 deletions
Unified View
Diff Options
-
38apis/trade.js
-
2components/bussiness-components/packingStationItem.vue
-
1487pages/add-paper/index.vue
-
547pages/add-record/index.vue
-
4pages/client-detail/base-paper-deals.vue
-
8pages/client-detail/basic-information.vue
-
18pages/client-detail/equipment-information.vue
-
2pages/client-detail/index.vue
-
6pages/client-detail/lv-select.vue
-
2pages/contract-manage/index.vue
-
6pages/credit-order-list/index.vue
-
12pages/follow-up-records/index.vue
-
4pages/mall/index.vue
-
200pages/message/platform-message.vue
-
204pages/message/system-message.vue
-
13pages/mine/index.vue
-
444pages/my-offer/index.vue
-
1172pages/quotation-details/index.vue
-
20pages/setting/index.vue
-
225pages/submit-quotation/index.vue
-
4pages/trade/orderList.vue
-
4pages/trade/quotationList.vue
-
BINstatic/imgs/mall/edit.png
1487
pages/add-paper/index.vue
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -1,290 +1,287 @@ |
|||||
<template> |
<template> |
||||
<view class="warpper"> |
|
||||
<qnHeader class="header"> |
|
||||
<view class="header-title">跟进记录</view> |
|
||||
<view class="right-title" @click="saveClick">保存</view> |
|
||||
</qnHeader> |
|
||||
<view class="paper-price"> |
|
||||
<view class=""> |
|
||||
<view class="paper-price-image-title"> |
|
||||
<text class="add-paper-start"><uni-icons custom-prefix="iconfont" type="icon-required" size="14" color="#F5222D"></uni-icons></text> |
|
||||
<text class="add-paper-title">拜访对象</text> |
|
||||
</view> |
|
||||
<view class="paper-price-image"> |
|
||||
<qn-easyinput |
|
||||
class="paper-price-textArea bf-height" |
|
||||
:maxlength="200" |
|
||||
:styles="{ disableColor: '#F7F8FA' }" |
|
||||
v-model="form.respondent" |
|
||||
:inputBorder="false" |
|
||||
type="textarea" |
|
||||
placeholder="请输入拜访对象" |
|
||||
></qn-easyinput> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class=""> |
|
||||
<view class="paper-price-image-title"> |
|
||||
<text class="add-paper-start"><uni-icons custom-prefix="iconfont" type="icon-required" size="14" color="#F5222D"></uni-icons></text> |
|
||||
<text class="add-paper-title">沟通记录</text> |
|
||||
</view> |
|
||||
<view class="paper-price-image"> |
|
||||
<qn-easyinput |
|
||||
class="paper-price-textArea gt-height" |
|
||||
:maxlength="500" |
|
||||
:styles="{ disableColor: '#F7F8FA' }" |
|
||||
v-model="form.content" |
|
||||
:inputBorder="false" |
|
||||
type="textarea" |
|
||||
placeholder="请输入与客户的沟通记录" |
|
||||
></qn-easyinput> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class=""> |
|
||||
<view class="paper-price-image-title"> |
|
||||
<!-- <text class="add-paper-start"><uni-icons custom-prefix="iconfont" type="icon-required" size="14" color="#F5222D"></uni-icons></text> --> |
|
||||
<text class="add-paper-title">备注信息</text> |
|
||||
</view> |
|
||||
<view class="paper-price-image"> |
|
||||
<qn-easyinput |
|
||||
class="paper-price-textArea bf-height" |
|
||||
:maxlength="200" |
|
||||
:styles="{ disableColor: '#F7F8FA' }" |
|
||||
v-model="form.remark" |
|
||||
:inputBorder="false" |
|
||||
type="textarea" |
|
||||
placeholder="请输入备注" |
|
||||
></qn-easyinput> |
|
||||
<view class="location"> |
|
||||
<image class="icon" src="/static/imgs/client-detail/address-icon.png"></image> |
|
||||
<text class="text">{{form.address}}</text> |
|
||||
<!-- <uni-icons size="16" type="bottom"></uni-icons> --> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
|
<view class="warpper"> |
||||
|
<qnHeader class="header"> |
||||
|
<view class="header-title">跟进记录</view> |
||||
|
<view class="right-title" @click="saveClick">保存</view> |
||||
|
</qnHeader> |
||||
|
<view class="paper-price"> |
||||
|
<view class=""> |
||||
|
<view class="paper-price-image-title"> |
||||
|
<text class="add-paper-start"><uni-icons custom-prefix="iconfont" type="icon-required" size="14" color="#F5222D"></uni-icons></text> |
||||
|
<text class="add-paper-title">拜访对象</text> |
||||
|
</view> |
||||
|
<view class="paper-price-image"> |
||||
|
<qn-easyinput |
||||
|
class="paper-price-textArea bf-height" |
||||
|
:maxlength="200" |
||||
|
:styles="{ disableColor: '#F7F8FA' }" |
||||
|
v-model="form.respondent" |
||||
|
:inputBorder="false" |
||||
|
type="textarea" |
||||
|
placeholder="请输入拜访对象" |
||||
|
></qn-easyinput> |
||||
|
</view> |
||||
|
</view> |
||||
|
<view class=""> |
||||
|
<view class="paper-price-image-title"> |
||||
|
<text class="add-paper-start"><uni-icons custom-prefix="iconfont" type="icon-required" size="14" color="#F5222D"></uni-icons></text> |
||||
|
<text class="add-paper-title">沟通记录</text> |
||||
|
</view> |
||||
|
<view class="paper-price-image"> |
||||
|
<qn-easyinput |
||||
|
class="paper-price-textArea gt-height" |
||||
|
:maxlength="500" |
||||
|
:styles="{ disableColor: '#F7F8FA' }" |
||||
|
v-model="form.content" |
||||
|
:inputBorder="false" |
||||
|
type="textarea" |
||||
|
placeholder="请输入与客户的沟通记录" |
||||
|
></qn-easyinput> |
||||
|
</view> |
||||
|
</view> |
||||
|
<view class=""> |
||||
|
<view class="paper-price-image-title"> |
||||
|
<!-- <text class="add-paper-start"><uni-icons custom-prefix="iconfont" type="icon-required" size="14" color="#F5222D"></uni-icons></text> --> |
||||
|
<text class="add-paper-title">备注信息</text> |
||||
|
</view> |
||||
|
<view class="paper-price-image"> |
||||
|
<qn-easyinput |
||||
|
class="paper-price-textArea bf-height" |
||||
|
:maxlength="200" |
||||
|
:styles="{ disableColor: '#F7F8FA' }" |
||||
|
v-model="form.remark" |
||||
|
:inputBorder="false" |
||||
|
type="textarea" |
||||
|
placeholder="请输入备注" |
||||
|
></qn-easyinput> |
||||
|
<view class="location"> |
||||
|
<image class="icon" src="/static/imgs/client-detail/address-icon.png"></image> |
||||
|
<text class="text">{{ form.address }}</text> |
||||
|
<!-- <uni-icons size="16" type="bottom"></uni-icons> --> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
</template> |
</template> |
||||
|
|
||||
<script> |
<script> |
||||
import wgs84togcj02 from '@/utils/locationTransform.js' |
|
||||
import { back, uploadImage } from '@/utils/hook.js' |
|
||||
|
import wgs84togcj02 from '@/utils/locationTransform.js' |
||||
|
import { back, uploadImage } from '@/utils/hook.js' |
||||
import qnHeader from '@/components/qn-header/qn-header.vue' |
import qnHeader from '@/components/qn-header/qn-header.vue' |
||||
import { createVisitRecord } from '@/apis/followUpRecords.js' |
import { createVisitRecord } from '@/apis/followUpRecords.js' |
||||
const validateFields = [ |
|
||||
'content', |
|
||||
'respondent' |
|
||||
] |
|
||||
|
const validateFields = ['content', 'respondent'] |
||||
export default { |
export default { |
||||
components: { qnHeader }, |
|
||||
data() { |
|
||||
return { |
|
||||
form: { |
|
||||
address: '', |
|
||||
content: '', |
|
||||
customerEnterpriseId: this.$store.state.supplierInfo.id || null, |
|
||||
remark: '', |
|
||||
respondent: '' |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
onLoad() { |
|
||||
this.locatePosition() |
|
||||
}, |
|
||||
methods: { |
|
||||
locatePosition() { |
|
||||
uni.getLocation({ |
|
||||
type: 'gcj02', |
|
||||
geocode: true, |
|
||||
// type: 'wgs84', |
|
||||
success: (res) => { |
|
||||
console.log('location success', res) |
|
||||
if(res.address) { |
|
||||
this.form.address = res.address.province + res.address.city + res.address.district + res.address.street |
|
||||
} |
|
||||
// const { lat, lon } = wgs84togcj02(res.latitude, res.longitude) |
|
||||
}, |
|
||||
fail: (err) => { |
|
||||
uni.showToast({ |
|
||||
icon: 'error', |
|
||||
title: '定位失败:' + err.code |
|
||||
}) |
|
||||
} |
|
||||
}) |
|
||||
}, |
|
||||
// 保存 |
|
||||
saveClick() { |
|
||||
for (let i = 0; i < validateFields.length; i++) { |
|
||||
if (this.form[validateFields[i]] === null || this.form[validateFields[i]] === '') { |
|
||||
uni.showToast({ |
|
||||
title: '请完善信息', |
|
||||
icon: 'none' |
|
||||
}) |
|
||||
return |
|
||||
} |
|
||||
} |
|
||||
createVisitRecord(this.form).then(res => { |
|
||||
if(res) { |
|
||||
uni.showToast({ |
|
||||
title: '添加成功', |
|
||||
icon: 'success' |
|
||||
}) |
|
||||
setTimeout(() => { |
|
||||
back() |
|
||||
}, 1000) |
|
||||
} |
|
||||
}) |
|
||||
} |
|
||||
} |
|
||||
|
components: { qnHeader }, |
||||
|
data() { |
||||
|
return { |
||||
|
form: { |
||||
|
address: '', |
||||
|
content: '', |
||||
|
customerEnterpriseId: this.$store.state.supplierInfo.id || null, |
||||
|
remark: '', |
||||
|
respondent: '' |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
onLoad() { |
||||
|
this.locatePosition() |
||||
|
}, |
||||
|
methods: { |
||||
|
locatePosition() { |
||||
|
uni.getLocation({ |
||||
|
type: 'gcj02', |
||||
|
geocode: true, |
||||
|
// type: 'wgs84', |
||||
|
success: (res) => { |
||||
|
console.log('location success', res) |
||||
|
if (res.address) { |
||||
|
this.form.address = res.address.province + res.address.city + res.address.district + res.address.street |
||||
|
} |
||||
|
// const { lat, lon } = wgs84togcj02(res.latitude, res.longitude) |
||||
|
}, |
||||
|
fail: (err) => { |
||||
|
uni.showToast({ |
||||
|
icon: 'error', |
||||
|
title: '定位失败:' + err.code |
||||
|
}) |
||||
|
} |
||||
|
}) |
||||
|
}, |
||||
|
// 保存 |
||||
|
saveClick() { |
||||
|
for (let i = 0; i < validateFields.length; i++) { |
||||
|
if (this.form[validateFields[i]] === null || this.form[validateFields[i]] === '') { |
||||
|
uni.showToast({ |
||||
|
title: '请完善信息', |
||||
|
icon: 'none' |
||||
|
}) |
||||
|
return |
||||
|
} |
||||
|
} |
||||
|
createVisitRecord(this.form).then((res) => { |
||||
|
if (res) { |
||||
|
uni.showToast({ |
||||
|
title: '添加成功', |
||||
|
icon: 'success' |
||||
|
}) |
||||
|
setTimeout(() => { |
||||
|
back() |
||||
|
}, 1000) |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
} |
||||
} |
} |
||||
</script> |
</script> |
||||
|
|
||||
<style lang="scss" scoped> |
<style lang="scss" scoped> |
||||
.warpper { |
.warpper { |
||||
background-color: #ffffff; |
|
||||
height: 100%; |
|
||||
.header { |
|
||||
justify-content: space-between; |
|
||||
} |
|
||||
.header-title { |
|
||||
font-size: 36rpx; |
|
||||
color: #000000; |
|
||||
letter-spacing: 0; |
|
||||
text-align: center; |
|
||||
font-weight: 500; |
|
||||
} |
|
||||
|
background-color: #ffffff; |
||||
|
height: 100%; |
||||
|
.header { |
||||
|
justify-content: space-between; |
||||
|
} |
||||
|
.header-title { |
||||
|
font-size: 36rpx; |
||||
|
color: #000000; |
||||
|
letter-spacing: 0; |
||||
|
text-align: center; |
||||
|
font-weight: 500; |
||||
|
} |
||||
|
|
||||
.right-title { |
|
||||
font-size: 28rpx; |
|
||||
color: #007aff; |
|
||||
text-align: center; |
|
||||
line-height: 40rpx; |
|
||||
font-weight: 500; |
|
||||
} |
|
||||
.add-paper-start { |
|
||||
font-size: 28rpx; |
|
||||
color: #f5222d; |
|
||||
letter-spacing: 0; |
|
||||
font-weight: 400; |
|
||||
} |
|
||||
.add-paper-title { |
|
||||
font-size: 28rpx; |
|
||||
color: #000000; |
|
||||
letter-spacing: 0; |
|
||||
font-weight: 500; |
|
||||
} |
|
||||
.paper-price { |
|
||||
background-color: #ffffff; |
|
||||
padding: 20rpx 0rpx; |
|
||||
|
.right-title { |
||||
|
font-size: 28rpx; |
||||
|
color: #007aff; |
||||
|
text-align: center; |
||||
|
line-height: 40rpx; |
||||
|
font-weight: 500; |
||||
|
} |
||||
|
.add-paper-start { |
||||
|
font-size: 28rpx; |
||||
|
color: #f5222d; |
||||
|
letter-spacing: 0; |
||||
|
font-weight: 400; |
||||
|
} |
||||
|
.add-paper-title { |
||||
|
font-size: 28rpx; |
||||
|
color: #000000; |
||||
|
letter-spacing: 0; |
||||
|
font-weight: 500; |
||||
|
} |
||||
|
.paper-price { |
||||
|
background-color: #ffffff; |
||||
|
padding: 20rpx 0rpx; |
||||
|
|
||||
.paper-price-form { |
|
||||
background: #f7f8fa; |
|
||||
border-radius: 8rpx; |
|
||||
margin: 22rpx 32rpx; |
|
||||
padding: 22rpx 32rpx; |
|
||||
line-height: 60rpx; |
|
||||
margin-bottom: 30rpx; |
|
||||
} |
|
||||
.paper-price-item { |
|
||||
display: flex; |
|
||||
flex-direction: row; |
|
||||
align-items: center; |
|
||||
justify-content: space-between; |
|
||||
.flex { |
|
||||
display: flex; |
|
||||
margin-left: 4px; |
|
||||
align-items: center; |
|
||||
} |
|
||||
} |
|
||||
.delete-text { |
|
||||
font-size: 28rpx; |
|
||||
color: #f5222d; |
|
||||
letter-spacing: 0; |
|
||||
font-weight: 400; |
|
||||
} |
|
||||
.paper-price-main { |
|
||||
padding: 22rpx 32rpx; |
|
||||
height: 88rpx; |
|
||||
align-items: center; |
|
||||
border-bottom: 2rpx solid #dddddd; |
|
||||
} |
|
||||
.paper-price-image-title { |
|
||||
padding: 0rpx 32rpx; |
|
||||
align-items: center; |
|
||||
} |
|
||||
.paper-price-image { |
|
||||
padding: 16rpx 32rpx; |
|
||||
} |
|
||||
.paper-price-textArea { |
|
||||
background: #f7f8fa; |
|
||||
border-radius: 20rpx; |
|
||||
padding: 10rpx; |
|
||||
} |
|
||||
.paper-price-title { |
|
||||
font-size: 28rpx; |
|
||||
color: #000000; |
|
||||
letter-spacing: 0; |
|
||||
font-weight: 600; |
|
||||
} |
|
||||
.paper-price-subtitle { |
|
||||
font-size: 24rpx; |
|
||||
color: #888888; |
|
||||
font-weight: 400; |
|
||||
} |
|
||||
.dian { |
|
||||
background: #adbac9; |
|
||||
width: 10rpx; |
|
||||
height: 10rpx; |
|
||||
border-radius: 50%; |
|
||||
// margin-top: 28rpx; |
|
||||
margin-right: 10rpx; |
|
||||
} |
|
||||
.label_text { |
|
||||
font-size: 28rpx; |
|
||||
color: #888888; |
|
||||
letter-spacing: 0; |
|
||||
font-weight: 400; |
|
||||
} |
|
||||
.label_value { |
|
||||
padding-bottom: 5rpx; |
|
||||
border-bottom: 2rpx solid #d8d8d8; |
|
||||
width: 65%; |
|
||||
text-align: right; |
|
||||
} |
|
||||
.label-select { |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
justify-content: flex-end; |
|
||||
} |
|
||||
.text-left { |
|
||||
margin-left: 10rpx; |
|
||||
} |
|
||||
.text-right { |
|
||||
margin-right: 10rpx; |
|
||||
} |
|
||||
} |
|
||||
.bf-height { |
|
||||
height: 155rpx; |
|
||||
} |
|
||||
.gt-height { |
|
||||
height: 210rpx; |
|
||||
} |
|
||||
.location { |
|
||||
display: flex; |
|
||||
flex-direction: row; |
|
||||
align-items: center; |
|
||||
padding-top: 20rpx; |
|
||||
.icon { |
|
||||
width: 32rpx; |
|
||||
height: 32rpx; |
|
||||
} |
|
||||
.text { |
|
||||
font-size: 26rpx; |
|
||||
color: #888888; |
|
||||
letter-spacing: 0; |
|
||||
text-align: left; |
|
||||
font-weight: 400; |
|
||||
padding-left: 10rpx; |
|
||||
} |
|
||||
} |
|
||||
|
.paper-price-form { |
||||
|
background: #f7f8fa; |
||||
|
border-radius: 8rpx; |
||||
|
margin: 22rpx 32rpx; |
||||
|
padding: 22rpx 32rpx; |
||||
|
line-height: 60rpx; |
||||
|
margin-bottom: 30rpx; |
||||
|
} |
||||
|
.paper-price-item { |
||||
|
display: flex; |
||||
|
flex-direction: row; |
||||
|
align-items: center; |
||||
|
justify-content: space-between; |
||||
|
.flex { |
||||
|
display: flex; |
||||
|
margin-left: 4px; |
||||
|
align-items: center; |
||||
|
} |
||||
|
} |
||||
|
.delete-text { |
||||
|
font-size: 28rpx; |
||||
|
color: #f5222d; |
||||
|
letter-spacing: 0; |
||||
|
font-weight: 400; |
||||
|
} |
||||
|
.paper-price-main { |
||||
|
padding: 22rpx 32rpx; |
||||
|
height: 88rpx; |
||||
|
align-items: center; |
||||
|
border-bottom: 2rpx solid rgba(221, 221, 221, 0.5); |
||||
|
} |
||||
|
.paper-price-image-title { |
||||
|
padding: 0rpx 32rpx; |
||||
|
align-items: center; |
||||
|
} |
||||
|
.paper-price-image { |
||||
|
padding: 16rpx 32rpx; |
||||
|
} |
||||
|
.paper-price-textArea { |
||||
|
background: #f7f8fa; |
||||
|
border-radius: 20rpx; |
||||
|
padding: 10rpx; |
||||
|
} |
||||
|
.paper-price-title { |
||||
|
font-size: 28rpx; |
||||
|
color: #000000; |
||||
|
letter-spacing: 0; |
||||
|
font-weight: 600; |
||||
|
} |
||||
|
.paper-price-subtitle { |
||||
|
font-size: 24rpx; |
||||
|
color: #888888; |
||||
|
font-weight: 400; |
||||
|
} |
||||
|
.dian { |
||||
|
background: #adbac9; |
||||
|
width: 10rpx; |
||||
|
height: 10rpx; |
||||
|
border-radius: 50%; |
||||
|
// margin-top: 28rpx; |
||||
|
margin-right: 10rpx; |
||||
|
} |
||||
|
.label_text { |
||||
|
font-size: 28rpx; |
||||
|
color: #888888; |
||||
|
letter-spacing: 0; |
||||
|
font-weight: 400; |
||||
|
} |
||||
|
.label_value { |
||||
|
padding-bottom: 5rpx; |
||||
|
border-bottom: 2rpx solid #d8d8d8; |
||||
|
width: 65%; |
||||
|
text-align: right; |
||||
|
} |
||||
|
.label-select { |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: flex-end; |
||||
|
} |
||||
|
.text-left { |
||||
|
margin-left: 10rpx; |
||||
|
} |
||||
|
.text-right { |
||||
|
margin-right: 10rpx; |
||||
|
} |
||||
|
} |
||||
|
.bf-height { |
||||
|
height: 155rpx; |
||||
|
} |
||||
|
.gt-height { |
||||
|
height: 210rpx; |
||||
|
} |
||||
|
.location { |
||||
|
display: flex; |
||||
|
flex-direction: row; |
||||
|
align-items: center; |
||||
|
padding-top: 20rpx; |
||||
|
.icon { |
||||
|
width: 32rpx; |
||||
|
height: 32rpx; |
||||
|
} |
||||
|
.text { |
||||
|
font-size: 26rpx; |
||||
|
color: #888888; |
||||
|
letter-spacing: 0; |
||||
|
text-align: left; |
||||
|
font-weight: 400; |
||||
|
padding-left: 10rpx; |
||||
|
} |
||||
|
} |
||||
} |
} |
||||
</style> |
|
||||
|
</style> |
||||
@ -1,113 +1,111 @@ |
|||||
<template> |
<template> |
||||
<view class="platform-message"> |
|
||||
<view class="platform-message-main" @click="jumpInfo(item)"> |
|
||||
<view class="platform-message-main-top"> |
|
||||
<view class="platform-message-title"> |
|
||||
<view class="">关于12/29日纸掌柜系统维护公告</view> |
|
||||
<view class="dian"></view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="platform-message-contant">尊敬的用户,您好!\u2028因服务升级需要,纸掌柜将于2021年12月29日进..</view> |
|
||||
<view class="xian"></view> |
|
||||
<view class="platform-message-bottom"> |
|
||||
<view class="platform-message-bottom-title">2021/12/29 12:30:45</view> |
|
||||
<view class="platform-message-bottom-text"> |
|
||||
<view class="platform-message-bottom-subtitle"> |
|
||||
查看详情 |
|
||||
</view> |
|
||||
<view class=""> |
|
||||
<image class="platform-message-bottom-image" src="../../static/imgs/client-detail/arrow-right-icon.png" mode=""></image> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
|
<view class="platform-message"> |
||||
|
<view class="platform-message-main" @click="jumpInfo(item)"> |
||||
|
<view class="platform-message-main-top"> |
||||
|
<view class="platform-message-title"> |
||||
|
<view class="">关于12/29日纸掌柜系统维护公告</view> |
||||
|
<view class="dian"></view> |
||||
|
</view> |
||||
|
</view> |
||||
|
<view class="platform-message-contant">尊敬的用户,您好!\u2028因服务升级需要,纸掌柜将于2021年12月29日进..</view> |
||||
|
<view class="xian"></view> |
||||
|
<view class="platform-message-bottom"> |
||||
|
<view class="platform-message-bottom-title">2021/12/29 12:30:45</view> |
||||
|
<view class="platform-message-bottom-text"> |
||||
|
<view class="platform-message-bottom-subtitle">查看详情</view> |
||||
|
<view class=""> |
||||
|
<image class="platform-message-bottom-image" src="../../static/imgs/client-detail/arrow-right-icon.png" mode=""></image> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
</template> |
</template> |
||||
|
|
||||
<script> |
<script> |
||||
import { back, go2 } from '@/utils/hook.js' |
|
||||
|
import { back, go2 } from '@/utils/hook.js' |
||||
export default { |
export default { |
||||
data() { |
|
||||
return {} |
|
||||
}, |
|
||||
methods: { |
|
||||
jumpInfo(){ |
|
||||
go2('platform-message-info') |
|
||||
}, |
|
||||
} |
|
||||
|
data() { |
||||
|
return {} |
||||
|
}, |
||||
|
methods: { |
||||
|
jumpInfo() { |
||||
|
go2('platform-message-info') |
||||
|
} |
||||
|
} |
||||
} |
} |
||||
</script> |
</script> |
||||
|
|
||||
<style lang="scss"> |
<style lang="scss"> |
||||
.platform-message { |
.platform-message { |
||||
.platform-message-main { |
|
||||
background-color: #ffffff; |
|
||||
margin: 20rpx 32rpx; |
|
||||
border-radius: 20rpx; |
|
||||
} |
|
||||
.platform-message-main-top { |
|
||||
display: flex; |
|
||||
justify-content: space-between; |
|
||||
padding: 24rpx 32rpx; |
|
||||
} |
|
||||
.platform-message-title { |
|
||||
font-size: 32rpx; |
|
||||
color: #333333; |
|
||||
letter-spacing: 0; |
|
||||
font-weight: 600; |
|
||||
display: flex; |
|
||||
} |
|
||||
.platform-message-subtitle { |
|
||||
font-size: 24rpx; |
|
||||
color: #333333; |
|
||||
font-weight: 400; |
|
||||
} |
|
||||
.platform-message-contant { |
|
||||
font-size: 28rpx; |
|
||||
color: #888888; |
|
||||
letter-spacing: 0; |
|
||||
font-weight: 400; |
|
||||
padding: 0rpx 32rpx; |
|
||||
line-height: 40rpx; |
|
||||
overflow: auto; |
|
||||
max-height: 100rpx; |
|
||||
height: 100rpx; |
|
||||
} |
|
||||
.dian { |
|
||||
background: #ff0000; |
|
||||
height: 14rpx; |
|
||||
width: 14rpx; |
|
||||
border-radius: 20rpx; |
|
||||
margin-left: 10rpx; |
|
||||
} |
|
||||
.xian { |
|
||||
border-bottom: 2rpx solid #dddddd; |
|
||||
} |
|
||||
.platform-message-bottom { |
|
||||
display: flex; |
|
||||
justify-content: space-between; |
|
||||
padding: 20rpx 32rpx; |
|
||||
align-items: center; |
|
||||
.platform-message-bottom-title { |
|
||||
font-size: 24rpx; |
|
||||
color: #333333; |
|
||||
font-weight: 400; |
|
||||
} |
|
||||
.platform-message-bottom-subtitle { |
|
||||
font-size: 28rpx; |
|
||||
color: #007aff; |
|
||||
letter-spacing: 0; |
|
||||
font-weight: 400; |
|
||||
} |
|
||||
.platform-message-bottom-image{ |
|
||||
height: 40rpx; |
|
||||
width: 40rpx; |
|
||||
margin-top: 10rpx; |
|
||||
} |
|
||||
.platform-message-bottom-text{ |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
} |
|
||||
} |
|
||||
|
.platform-message-main { |
||||
|
background-color: #ffffff; |
||||
|
margin: 20rpx 32rpx; |
||||
|
border-radius: 20rpx; |
||||
|
} |
||||
|
.platform-message-main-top { |
||||
|
display: flex; |
||||
|
justify-content: space-between; |
||||
|
padding: 24rpx 32rpx; |
||||
|
} |
||||
|
.platform-message-title { |
||||
|
font-size: 32rpx; |
||||
|
color: #333333; |
||||
|
letter-spacing: 0; |
||||
|
font-weight: 600; |
||||
|
display: flex; |
||||
|
} |
||||
|
.platform-message-subtitle { |
||||
|
font-size: 24rpx; |
||||
|
color: #333333; |
||||
|
font-weight: 400; |
||||
|
} |
||||
|
.platform-message-contant { |
||||
|
font-size: 28rpx; |
||||
|
color: #888888; |
||||
|
letter-spacing: 0; |
||||
|
font-weight: 400; |
||||
|
padding: 0rpx 32rpx; |
||||
|
line-height: 40rpx; |
||||
|
overflow: auto; |
||||
|
max-height: 100rpx; |
||||
|
height: 100rpx; |
||||
|
} |
||||
|
.dian { |
||||
|
background: #ff0000; |
||||
|
height: 14rpx; |
||||
|
width: 14rpx; |
||||
|
border-radius: 20rpx; |
||||
|
margin-left: 10rpx; |
||||
|
} |
||||
|
.xian { |
||||
|
border-bottom: 2rpx solid rgba(221, 221, 221, 0.5); |
||||
|
} |
||||
|
.platform-message-bottom { |
||||
|
display: flex; |
||||
|
justify-content: space-between; |
||||
|
padding: 20rpx 32rpx; |
||||
|
align-items: center; |
||||
|
.platform-message-bottom-title { |
||||
|
font-size: 24rpx; |
||||
|
color: #333333; |
||||
|
font-weight: 400; |
||||
|
} |
||||
|
.platform-message-bottom-subtitle { |
||||
|
font-size: 28rpx; |
||||
|
color: #007aff; |
||||
|
letter-spacing: 0; |
||||
|
font-weight: 400; |
||||
|
} |
||||
|
.platform-message-bottom-image { |
||||
|
height: 40rpx; |
||||
|
width: 40rpx; |
||||
|
margin-top: 10rpx; |
||||
|
} |
||||
|
.platform-message-bottom-text { |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
} |
||||
|
} |
||||
} |
} |
||||
</style> |
</style> |
||||
@ -1,237 +1,239 @@ |
|||||
<template> |
<template> |
||||
<view class="my-offer"> |
|
||||
<view> |
|
||||
<uni-nav-bar left-icon="back" @clickLeft="back" statusBar fixed title=""> |
|
||||
<view class="my-offer-title">我的报价</view> |
|
||||
<view slot="left"></view> |
|
||||
<view slot="right"></view> |
|
||||
</uni-nav-bar> |
|
||||
</view> |
|
||||
<scroll-list style="touch-action: none" ref="orderRef" :option="orderOption" @load="orderUp" @refresh="orderDown"> |
|
||||
<view v-for="(items, index) in orderData" :key="index" @click="myPriceInfo(items)"> |
|
||||
<view class="list-border list-title-line"> |
|
||||
<text class="list-title">{{items.belongEnterpriseName}}</text> |
|
||||
<text class="list-title-Subtitle">{{ controlItems[items.orderStatus - 1] }}</text> |
|
||||
</view> |
|
||||
<view class="list-border list-info-line" v-for="(item, index) in items.itemList" :key="index"> |
|
||||
<view class="list-info" :class="index === items.itemList.length ? 'list-border' : ''"> |
|
||||
<view class=""><image class="list-image" :src="item.productImg || '../../static/logo.png' "></image></view> |
|
||||
<view class="list-info-contant"> |
|
||||
<view class="list-info-title">{{ item.brandName }}{{ item.categoryName }}</view> |
|
||||
<view class="list-info-text"> |
|
||||
<text>{{ item.categoryName }}/{{ item.brandName }}/</text> |
|
||||
<text>{{ item.gramWeight }}g/{{ item.length }}*{{ item.width }}/{{ item.pieceQuantity }}张</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="list-border list-bottom-contant"> |
|
||||
<view><text class="list-time">{{items.deliveryDay}}</text></view> |
|
||||
<view class=""> |
|
||||
<text class="list-title-Subtitle">¥{{ items.totalPrice }}</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
<uGap></uGap> |
|
||||
</view> |
|
||||
</scroll-list> |
|
||||
</view> |
|
||||
|
<view class="my-offer"> |
||||
|
<view> |
||||
|
<uni-nav-bar left-icon="back" @clickLeft="back" statusBar fixed title=""> |
||||
|
<view class="my-offer-title">我的报价</view> |
||||
|
<view slot="left"></view> |
||||
|
<view slot="right"></view> |
||||
|
</uni-nav-bar> |
||||
|
</view> |
||||
|
<scroll-list style="touch-action: none" ref="orderRef" :option="orderOption" @load="orderUp" @refresh="orderDown"> |
||||
|
<view v-for="(items, index) in orderData" :key="index" @click="myPriceInfo(items)"> |
||||
|
<view class="list-border list-title-line"> |
||||
|
<text class="list-title">{{ items.belongEnterpriseName }}</text> |
||||
|
<text class="list-title-Subtitle">{{ controlItems[items.orderStatus - 1] }}</text> |
||||
|
</view> |
||||
|
<view class="list-border list-info-line" v-for="(item, index) in items.itemList" :key="index"> |
||||
|
<view class="list-info" :class="index === items.itemList.length ? 'list-border' : ''"> |
||||
|
<view class=""><image class="list-image" :src="item.productImg || '../../static/logo.png'"></image></view> |
||||
|
<view class="list-info-contant"> |
||||
|
<view class="list-info-title">{{ item.brandName }}{{ item.categoryName }}</view> |
||||
|
<view class="list-info-text"> |
||||
|
<text>{{ item.categoryName }}/{{ item.brandName }}/</text> |
||||
|
<text>{{ item.gramWeight }}g/{{ item.length }}*{{ item.width }}/{{ item.pieceQuantity }}张</text> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
<view class="list-border list-bottom-contant"> |
||||
|
<view> |
||||
|
<text class="list-time">{{ items.deliveryDay }}</text> |
||||
|
</view> |
||||
|
<view class=""> |
||||
|
<text class="list-title-Subtitle">¥{{ items.totalOfferPrice }}</text> |
||||
|
</view> |
||||
|
</view> |
||||
|
<uGap></uGap> |
||||
|
</view> |
||||
|
</scroll-list> |
||||
|
</view> |
||||
</template> |
</template> |
||||
|
|
||||
<script> |
<script> |
||||
import { back, go2 } from '@/utils/hook.js' |
import { back, go2 } from '@/utils/hook.js' |
||||
import uGap from '@/components/u-gap/u-gap.vue' |
import uGap from '@/components/u-gap/u-gap.vue' |
||||
import scrollList from '@/components/scroll-list/scroll-list.vue' |
import scrollList from '@/components/scroll-list/scroll-list.vue' |
||||
import { getMyreplyList } from '@/apis/trade.js' |
|
||||
|
import { getMyReplyList } from '@/apis/trade.js' |
||||
export default { |
export default { |
||||
// props: { |
|
||||
// queryOrderData: { |
|
||||
// type: Object, |
|
||||
// default: () => {} |
|
||||
// } |
|
||||
// }, |
|
||||
components: { |
|
||||
uGap |
|
||||
}, |
|
||||
|
// props: { |
||||
|
// queryOrderData: { |
||||
|
// type: Object, |
||||
|
// default: () => {} |
||||
|
// } |
||||
|
// }, |
||||
|
components: { |
||||
|
uGap |
||||
|
}, |
||||
|
|
||||
data() { |
|
||||
return { |
|
||||
orderPagination: { |
|
||||
pageNum: 0, // 初始会执行一次下拉加载 |
|
||||
pageSize: 10 |
|
||||
}, |
|
||||
orderData: [], |
|
||||
controlCurrent: 0, |
|
||||
controlItems: ['待付款', '待发货', '待收货', '已完成', '已关闭'], |
|
||||
orderOption: { |
|
||||
size: 10, |
|
||||
auto: true, |
|
||||
emptyText: '暂无报价信息~', |
|
||||
background: '#F7F8FA', |
|
||||
fontSize: '40rpx' |
|
||||
}, |
|
||||
orderParams: { |
|
||||
cooperationState: 0, |
|
||||
latitude: 23.12616, |
|
||||
longitude: 113.38466, |
|
||||
km: 5 |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
filters: {}, |
|
||||
watch: { |
|
||||
orderParams: { |
|
||||
handler(val) { |
|
||||
this.getMyreplyListQuery() |
|
||||
}, |
|
||||
deep: true |
|
||||
} |
|
||||
}, |
|
||||
onLoad(option) { |
|
||||
if (option) { |
|
||||
option.latitude && (this.params.latitude = option.latitude) |
|
||||
option.longitude && (this.params.longitude = option.longitude) |
|
||||
option.km && (this.params.km = option.km) |
|
||||
} |
|
||||
this.getMyreplyListQuery() |
|
||||
}, |
|
||||
methods: { |
|
||||
back, |
|
||||
// 获取我的报价 |
|
||||
getMyreplyListQuery() { |
|
||||
return new Promise((resolve, reject) => { |
|
||||
getMyreplyList({...this.orderPagination }) |
|
||||
.then(res => { |
|
||||
if (res) { |
|
||||
if (this.orderPagination.pageNum == 1) { |
|
||||
this.orderData = res.records |
|
||||
} else { |
|
||||
this.orderData = this.orderData.concat(res.records) |
|
||||
} |
|
||||
resolve({ list: this.orderData, total: res.total }) |
|
||||
} |
|
||||
}) |
|
||||
.catch(err => { |
|
||||
reject(err) |
|
||||
}) |
|
||||
}) |
|
||||
}, |
|
||||
//订单分页 |
|
||||
orderUp(page) { |
|
||||
this.orderPagination.pageNum++ |
|
||||
this.getMyreplyListQuery() |
|
||||
.then(({ list, total }) => { |
|
||||
this.$refs.orderRef.loadSuccess({ list, total }) |
|
||||
}) |
|
||||
.catch(() => { |
|
||||
this.$refs.orderRef.loadFail() |
|
||||
}) |
|
||||
}, |
|
||||
//订单分页 |
|
||||
orderDown() { |
|
||||
this.orderPagination.pageNum = 1 |
|
||||
this.getMyreplyListQuery() |
|
||||
.then(({ list, total }) => { |
|
||||
this.$refs.orderRef.refreshSuccess({ list, total }) |
|
||||
}) |
|
||||
.catch(() => { |
|
||||
this.$refs.orderRef.refreshFail() |
|
||||
}) |
|
||||
}, |
|
||||
|
data() { |
||||
|
return { |
||||
|
orderPagination: { |
||||
|
pageNum: 0, // 初始会执行一次下拉加载 |
||||
|
pageSize: 10 |
||||
|
}, |
||||
|
orderData: [], |
||||
|
controlCurrent: 0, |
||||
|
controlItems: ['待付款', '待发货', '待收货', '已完成', '已关闭'], |
||||
|
orderOption: { |
||||
|
size: 10, |
||||
|
auto: true, |
||||
|
emptyText: '暂无报价信息~', |
||||
|
background: '#F7F8FA', |
||||
|
fontSize: '40rpx' |
||||
|
}, |
||||
|
orderParams: { |
||||
|
cooperationState: 0, |
||||
|
latitude: 23.12616, |
||||
|
longitude: 113.38466, |
||||
|
km: 5 |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
filters: {}, |
||||
|
watch: { |
||||
|
orderParams: { |
||||
|
handler(val) { |
||||
|
this.getMyReplyListQuery() |
||||
|
}, |
||||
|
deep: true |
||||
|
} |
||||
|
}, |
||||
|
onLoad(option) { |
||||
|
if (option) { |
||||
|
option.latitude && (this.params.latitude = option.latitude) |
||||
|
option.longitude && (this.params.longitude = option.longitude) |
||||
|
option.km && (this.params.km = option.km) |
||||
|
} |
||||
|
this.getMyReplyListQuery() |
||||
|
}, |
||||
|
methods: { |
||||
|
back, |
||||
|
// 获取我的报价 |
||||
|
getMyReplyListQuery() { |
||||
|
return new Promise((resolve, reject) => { |
||||
|
getMyReplyList({ ...this.orderPagination }) |
||||
|
.then((res) => { |
||||
|
if (res) { |
||||
|
if (this.orderPagination.pageNum == 1) { |
||||
|
this.orderData = res.records |
||||
|
} else { |
||||
|
this.orderData = this.orderData.concat(res.records) |
||||
|
} |
||||
|
resolve({ list: this.orderData, total: res.total }) |
||||
|
} |
||||
|
}) |
||||
|
.catch((err) => { |
||||
|
reject(err) |
||||
|
}) |
||||
|
}) |
||||
|
}, |
||||
|
//订单分页 |
||||
|
orderUp(page) { |
||||
|
this.orderPagination.pageNum++ |
||||
|
this.getMyReplyListQuery() |
||||
|
.then(({ list, total }) => { |
||||
|
this.$refs.orderRef.loadSuccess({ list, total }) |
||||
|
}) |
||||
|
.catch(() => { |
||||
|
this.$refs.orderRef.loadFail() |
||||
|
}) |
||||
|
}, |
||||
|
//订单分页 |
||||
|
orderDown() { |
||||
|
this.orderPagination.pageNum = 1 |
||||
|
this.getMyReplyListQuery() |
||||
|
.then(({ list, total }) => { |
||||
|
this.$refs.orderRef.refreshSuccess({ list, total }) |
||||
|
}) |
||||
|
.catch(() => { |
||||
|
this.$refs.orderRef.refreshFail() |
||||
|
}) |
||||
|
}, |
||||
|
|
||||
//跳转我的报价详情 |
|
||||
myPriceInfo(item) { |
|
||||
go2('quotation-details',item) |
|
||||
} |
|
||||
} |
|
||||
|
//跳转我的报价详情 |
||||
|
myPriceInfo(item) { |
||||
|
go2('quotation-details', item) |
||||
|
} |
||||
|
} |
||||
} |
} |
||||
</script> |
</script> |
||||
|
|
||||
<style lang="scss"> |
<style lang="scss"> |
||||
.my-offer { |
.my-offer { |
||||
margin-bottom: 0rpx; |
|
||||
.list-border { |
|
||||
// border-top: 1px solid #dddddd; |
|
||||
border-bottom: 2rpx solid #dddddd; |
|
||||
} |
|
||||
.list-title-line { |
|
||||
line-height: 88rpx; |
|
||||
padding-left: 48rpx; |
|
||||
background: #ffffff; |
|
||||
} |
|
||||
.my-offer-title { |
|
||||
width: 100%; |
|
||||
font-family: PingFangSC-Medium; |
|
||||
font-size: 36rpx; |
|
||||
color: #000000; |
|
||||
letter-spacing: 0; |
|
||||
text-align: center; |
|
||||
font-weight: 500; |
|
||||
} |
|
||||
.list-title { |
|
||||
font-family: PingFangSC-Semibold; |
|
||||
font-size: 30rpx; |
|
||||
color: #000000; |
|
||||
letter-spacing: 0; |
|
||||
font-weight: 600; |
|
||||
} |
|
||||
.list-title-Subtitle { |
|
||||
font-family: PingFangSC-Medium; |
|
||||
font-size: 30rpx; |
|
||||
color: #ff5368; |
|
||||
letter-spacing: 0; |
|
||||
text-align: right; |
|
||||
font-weight: 500; |
|
||||
float: right; |
|
||||
margin-right: 32rpx; |
|
||||
} |
|
||||
.list-info-line { |
|
||||
padding-left: 48rpx; |
|
||||
line-height: 70rpx; |
|
||||
background: #ffffff; |
|
||||
} |
|
||||
.list-info-contant { |
|
||||
margin-left: 48rpx; |
|
||||
} |
|
||||
.list-info-title { |
|
||||
font-family: PingFangSC-Medium; |
|
||||
font-size: 30rpx; |
|
||||
color: #333333; |
|
||||
letter-spacing: 0; |
|
||||
text-align: left; |
|
||||
font-weight: 550; |
|
||||
} |
|
||||
.list-info-text { |
|
||||
font-family: PingFangSC-Regular; |
|
||||
font-size: 26rpx; |
|
||||
color: #888888; |
|
||||
letter-spacing: 0; |
|
||||
text-align: left; |
|
||||
line-height: 64rpx; |
|
||||
font-weight: 400; |
|
||||
} |
|
||||
.list-image { |
|
||||
width: 100rpx; |
|
||||
height: 100rpx; |
|
||||
margin-top: 20rpx; |
|
||||
} |
|
||||
.list-info { |
|
||||
display: flex; |
|
||||
} |
|
||||
.list-bottom-contant { |
|
||||
align-items: center; |
|
||||
padding-left: 48rpx; |
|
||||
height: 80rpx; |
|
||||
background: #ffffff; |
|
||||
display: flex; |
|
||||
justify-content: space-between; |
|
||||
} |
|
||||
.list-time { |
|
||||
font-family: PingFangSC-Regular; |
|
||||
font-size: 26rpx; |
|
||||
color: #888888; |
|
||||
letter-spacing: 0; |
|
||||
line-height: 64rpx; |
|
||||
font-weight: 400; |
|
||||
} |
|
||||
|
margin-bottom: 0rpx; |
||||
|
.list-border { |
||||
|
// border-top: 1px solid rgba(221,221,221,0.5); |
||||
|
border-bottom: 2rpx solid rgba(221, 221, 221, 0.5); |
||||
|
} |
||||
|
.list-title-line { |
||||
|
line-height: 88rpx; |
||||
|
padding-left: 48rpx; |
||||
|
background: #ffffff; |
||||
|
} |
||||
|
.my-offer-title { |
||||
|
width: 100%; |
||||
|
font-family: PingFangSC-Medium; |
||||
|
font-size: 36rpx; |
||||
|
color: #000000; |
||||
|
letter-spacing: 0; |
||||
|
text-align: center; |
||||
|
font-weight: 500; |
||||
|
} |
||||
|
.list-title { |
||||
|
font-family: PingFangSC-Semibold; |
||||
|
font-size: 30rpx; |
||||
|
color: #000000; |
||||
|
letter-spacing: 0; |
||||
|
font-weight: 600; |
||||
|
} |
||||
|
.list-title-Subtitle { |
||||
|
font-family: PingFangSC-Medium; |
||||
|
font-size: 30rpx; |
||||
|
color: #ff5368; |
||||
|
letter-spacing: 0; |
||||
|
text-align: right; |
||||
|
font-weight: 500; |
||||
|
float: right; |
||||
|
margin-right: 32rpx; |
||||
|
} |
||||
|
.list-info-line { |
||||
|
padding-left: 48rpx; |
||||
|
line-height: 70rpx; |
||||
|
background: #ffffff; |
||||
|
} |
||||
|
.list-info-contant { |
||||
|
margin-left: 48rpx; |
||||
|
} |
||||
|
.list-info-title { |
||||
|
font-family: PingFangSC-Medium; |
||||
|
font-size: 30rpx; |
||||
|
color: #333333; |
||||
|
letter-spacing: 0; |
||||
|
text-align: left; |
||||
|
font-weight: 550; |
||||
|
} |
||||
|
.list-info-text { |
||||
|
font-family: PingFangSC-Regular; |
||||
|
font-size: 26rpx; |
||||
|
color: #888888; |
||||
|
letter-spacing: 0; |
||||
|
text-align: left; |
||||
|
line-height: 64rpx; |
||||
|
font-weight: 400; |
||||
|
} |
||||
|
.list-image { |
||||
|
width: 100rpx; |
||||
|
height: 100rpx; |
||||
|
margin-top: 20rpx; |
||||
|
} |
||||
|
.list-info { |
||||
|
display: flex; |
||||
|
} |
||||
|
.list-bottom-contant { |
||||
|
align-items: center; |
||||
|
padding-left: 48rpx; |
||||
|
height: 80rpx; |
||||
|
background: #ffffff; |
||||
|
display: flex; |
||||
|
justify-content: space-between; |
||||
|
} |
||||
|
.list-time { |
||||
|
font-family: PingFangSC-Regular; |
||||
|
font-size: 26rpx; |
||||
|
color: #888888; |
||||
|
letter-spacing: 0; |
||||
|
line-height: 64rpx; |
||||
|
font-weight: 400; |
||||
|
} |
||||
} |
} |
||||
</style> |
|
||||
|
</style> |
||||
1172
pages/quotation-details/index.vue
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
Write
Preview
Loading…
Cancel
Save