buffeyu 4 years ago
parent
commit
5797c602f7
23 changed files with 2273 additions and 2149 deletions
  1. 38
      apis/trade.js
  2. 2
      components/bussiness-components/packingStationItem.vue
  3. 1487
      pages/add-paper/index.vue
  4. 547
      pages/add-record/index.vue
  5. 4
      pages/client-detail/base-paper-deals.vue
  6. 8
      pages/client-detail/basic-information.vue
  7. 18
      pages/client-detail/equipment-information.vue
  8. 2
      pages/client-detail/index.vue
  9. 6
      pages/client-detail/lv-select.vue
  10. 2
      pages/contract-manage/index.vue
  11. 6
      pages/credit-order-list/index.vue
  12. 12
      pages/follow-up-records/index.vue
  13. 4
      pages/mall/index.vue
  14. 200
      pages/message/platform-message.vue
  15. 204
      pages/message/system-message.vue
  16. 13
      pages/mine/index.vue
  17. 444
      pages/my-offer/index.vue
  18. 1172
      pages/quotation-details/index.vue
  19. 20
      pages/setting/index.vue
  20. 225
      pages/submit-quotation/index.vue
  21. 4
      pages/trade/orderList.vue
  22. 4
      pages/trade/quotationList.vue
  23. BIN
      static/imgs/mall/edit.png

38
apis/trade.js

@ -19,9 +19,9 @@ export function gettradingHallList(data) {
},
{ hideLoading: true }
)
}
// 我的报价
export function getMyreplyList(data) {
}
// 我的报价
export function getMyReplyList(data) {
return http.get(
{
url: '/base-paper-trading/get/my-reply-list',
@ -29,24 +29,24 @@ export function getMyreplyList(data) {
},
{ hideLoading: true }
)
}
// 提交报价
export function updataEnquiryReply(data) {
}
// 提交报价
export function updateEnquiryReply(data) {
return http.post({
url: '/base-paper-trading/update/enquiry-reply?userId='+data.userId,
url: '/base-paper-trading/update/enquiry-reply?userId=' + data.userId,
data
})
}
// 获取报价详情
}
// 获取报价详情
export function enquiryReplyDetail(data) {
return http.get(
{
url: '/base-paper-trading/get/enquiry-reply-detail/'+data,
url: '/base-paper-trading/get/enquiry-reply-detail/' + data
},
{ hideLoading: true }
)
}
// 消息列表
}
// 消息列表
export function systemMessageList(data) {
return http.get(
{
@ -55,19 +55,11 @@ export function systemMessageList(data) {
},
{ hideLoading: true }
)
}
// 系统消息已读
}
// 系统消息已读
export function systemRead(data) {
return http.post({
url: '/base-paper-trading/set/message-read',
data
})
}
}

2
components/bussiness-components/packingStationItem.vue

@ -134,7 +134,7 @@ export default {
.info {
width: 750rpx;
padding: 30rpx 32rpx 48rpx;
border-bottom: 2rpx solid #dddddd;
border-bottom: 2rpx solid rgba(221, 221, 221, 0.5);
display: flex;
flex-direction: row;
align-items: flex-start;

1487
pages/add-paper/index.vue
File diff suppressed because it is too large
View File

547
pages/add-record/index.vue

@ -1,290 +1,287 @@
<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>
<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 { createVisitRecord } from '@/apis/followUpRecords.js'
const validateFields = [
'content',
'respondent'
]
const validateFields = ['content', 'respondent']
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>
<style lang="scss" scoped>
.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>

4
pages/client-detail/base-paper-deals.vue

@ -191,7 +191,7 @@ export default {
align-items: center;
height: 88rpx;
background: #ffffff;
border-bottom: 2rpx solid #dddddd;
border-bottom: 2rpx solid rgba(221, 221, 221, 0.5);
padding: 0rpx 32rpx;
.left-title {
font-size: 30rpx;
@ -213,7 +213,7 @@ export default {
align-items: center;
height: 148rpx;
background: #ffffff;
border-bottom: 2rpx solid #dddddd;
border-bottom: 2rpx solid rgba(221, 221, 221, 0.5);
padding: 0rpx 32rpx;
.image {
width: 100rpx;

8
pages/client-detail/basic-information.vue

@ -251,7 +251,7 @@ export default {
},
methods: {
gotoTap() {
go2('follow-up-records')
go2('follow-up-records', { customerEnterpriseId: this.info.id })
},
getBaseInfo() {
getBaseInfo({ customerId: this.customerId }).then((res) => {
@ -296,7 +296,7 @@ export default {
justify-content: space-between;
height: 88rpx;
line-height: 88rpx;
border-bottom: 2rpx solid #dddddd;
border-bottom: 2rpx solid rgba(221, 221, 221, 0.5);
padding: 0rpx 32rpx;
.left-text {
@ -395,7 +395,7 @@ export default {
height: 80rpx;
line-height: 80rpx;
background: #ffffff;
border-top: 2rpx solid #dddddd;
border-top: 2rpx solid rgba(221, 221, 221, 0.5);
padding: 0rpx 32rpx;
.icon {
@ -423,7 +423,7 @@ export default {
height: 80rpx;
line-height: 80rpx;
background: #ffffff;
border-top: 2rpx solid #dddddd;
border-top: 2rpx solid rgba(221, 221, 221, 0.5);
padding: 0rpx 32rpx;
font-size: 28rpx;
color: #007aff;

18
pages/client-detail/equipment-information.vue

@ -125,15 +125,15 @@ export default {
emptyText: '暂无设备信息~',
background: '#F7F8FA',
disabled: false,
emptyImage: '/static/imgs/order/order-empty.png'
emptyImage: '/static/imgs/order/order-empty.png'
},
seemoreFlag: 0,
params: {
asc: '',
desc: '',
duration: '3',
customerEnterpriseId: this.$store.state.supplierInfo.id || null, // IDid
// customerEnterpriseId: '651107734133018624',
customerEnterpriseId: this.$store.state.supplierInfo.id || null // IDid
// customerEnterpriseId: '651107734133018624',
},
pagination: {
pageNum: 0, //
@ -180,10 +180,10 @@ export default {
.then((res) => {
// console.log('', res.records)
if (res) {
res.records.forEach((el) => {
el.collapse = false
el.isShowSelect = false
})
res.records.forEach((el) => {
el.collapse = false
el.isShowSelect = false
})
if (this.pagination.pageNum == 1) {
this.list = res.records
} else {
@ -309,8 +309,8 @@ export default {
}
}
.content {
border-bottom: 2rpx solid #dddddd;
border-top: 2rpx solid #dddddd;
border-bottom: 2rpx solid rgba(221, 221, 221, 0.5);
border-top: 2rpx solid rgba(221, 221, 221, 0.5);
.info {
display: flex;
flex-direction: row;

2
pages/client-detail/index.vue

@ -215,7 +215,7 @@ export default {
align-items: center;
height: 96rpx;
background: #ffffff;
border-top: 2rpx solid #dddddd;
border-top: 2rpx solid rgba(221, 221, 221, 0.5);
.cancel-text {
flex-grow: 1;
flex-shrink: 1;

6
pages/client-detail/lv-select.vue

@ -186,7 +186,7 @@
box-sizing: border-box;
}
.unishadow{
box-shadow: 0rpx 1rpx 5rpx #DDDDDD;
box-shadow: 0rpx 1rpx 5rpx rgba(221,221,221,0.5);
}
.uni-search-form{
position: relative;
@ -247,7 +247,7 @@
width: 75%; //
background-color: #FFFFFF;
border-radius: 6px;
box-shadow: #DDDDDD 4px 4px 8px, #DDDDDD -4px -4px 8px;
box-shadow: rgba(221,221,221,0.5) 4px 4px 8px, rgba(221,221,221,0.5) -4px -4px 8px;
z-index: 999;
}
.uni-combox__selector-scroll {
@ -282,7 +282,7 @@
color: #808080;
}
.uni-combox__selector-item:hover {
background-color: #DDDDDD;
background-color: rgba(221,221,221,0.5);
}
.uni-combox__selector-empty:last-child,
.uni-combox__selector-item:last-child {

2
pages/contract-manage/index.vue

@ -251,7 +251,7 @@ export default {
.footer {
width: 750rpx;
padding: 24rpx 32rpx;
border-top: 1px solid #dddddd;
border-top: 1px solid rgba(221, 221, 221, 0.5);
}
}
</style>

6
pages/credit-order-list/index.vue

@ -34,7 +34,7 @@
class="order-item flex-row-center-start"
v-for="(order, index) in item.orderItmes"
:key="order.productId"
:style="{ borderTop: index == 0 ? '' : '1px solid #dddddd' }"
:style="{ borderTop: index == 0 ? '' : '1px solid rgba(221,221,221,0.5)' }"
>
<image class="img" :src="order.productImg"></image>
<view class="flex-col-start-start">
@ -184,12 +184,12 @@ export default {
margin-bottom: 20rpx;
.header {
padding: 24rpx 32rpx;
border-bottom: 1px solid #dddddd;
border-bottom: 1px solid rgba(221, 221, 221, 0.5);
}
.content {
padding: 0 32rpx;
width: 750rpx;
border-bottom: 1px solid #dddddd;
border-bottom: 1px solid rgba(221, 221, 221, 0.5);
.order-item {
width: 686rpx;
padding: 24rpx 0;

12
pages/follow-up-records/index.vue

@ -77,7 +77,7 @@ export default {
params: {
asc: '',
desc: '',
customerEnterpriseId: [this.$store.state.supplierInfo.id],
customerEnterpriseId: null,
mallSupplierId: this.$store.state.supplierInfo.supplierId || null
// enterpriseIds : ['651107734133018624'],
// mallSupplierId : '670334117090562048',
@ -99,8 +99,12 @@ export default {
})
},
onShow() {
console.log('onShow')
this.getList()
this.downCallback()
},
onLoad(option) {
if (option.customerEnterpriseId) {
this.params.customerEnterpriseId = option.customerEnterpriseId
}
},
methods: {
back,
@ -213,7 +217,7 @@ export default {
justify-content: center;
padding-top: 20rpx;
background: #ffffff;
// border-top: 2rpx solid #dddddd;
// border-top: 2rpx solid rgba(221,221,221,0.5);
// padding: 0rpx 32rpx;
font-size: 28rpx;
color: #007aff;

4
pages/mall/index.vue

@ -117,7 +117,7 @@ export default {
pageSize: 10,
storeId: null,
name: null,
supplierId: this.$store.state.supplierInfo.supplierId
supplierId: this.$store.state.supplierInfo.supplierId,
},
listData: [],
logo: 'https://qncloud.oss-cn-shenzhen.aliyuncs.com/ztb_pic/testPic.jfif',
@ -342,7 +342,7 @@ export default {
}
.content {
background: #ffffff;
border-bottom: 2rpx solid #dddddd;
border-bottom: 2rpx solid rgba(221, 221, 221, 0.5);
display: flex;
flex-direction: row;
padding: 24rpx 0rpx 24rpx 32rpx;

200
pages/message/platform-message.vue

@ -1,113 +1,111 @@
<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>
<script>
import { back, go2 } from '@/utils/hook.js'
import { back, go2 } from '@/utils/hook.js'
export default {
data() {
return {}
},
methods: {
jumpInfo(){
go2('platform-message-info')
},
}
data() {
return {}
},
methods: {
jumpInfo() {
go2('platform-message-info')
}
}
}
</script>
<style lang="scss">
.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>

204
pages/message/system-message.vue

@ -1,116 +1,144 @@
<template>
<view class="system-message">
<scroll-list ref="messageRef" :option="option" @load="quotationUp" @refresh="quotationDown">
<view v-for="(item,index) in list" :key="index">
<view class="system-message-main">
<view class="system-message-main-top">
<view class="system-message-title">
<view class="">客户下单</view>
<view class="dian" v-if="item.readOrNot === 0"></view>
</view>
<view class="system-message-subtitle">{{item.createTime}}</view>
</view>
<view class="system-message-contant">{{item.content}}</view>
</view>
</view>
</scroll-list>
<scroll-list ref="messageRef" :option="option" @load="quotationUp" @refresh="quotationDown">
<view v-for="(item, index) in list" :key="index">
<view class="system-message-main">
<view class="system-message-main-top">
<view class="system-message-title">
<view class="">{{ item.messageType | meesageTypeFilter }}</view>
<view class="dian" v-if="item.readOrNot === 0"></view>
</view>
<view class="system-message-subtitle">{{ item.createTime }}</view>
</view>
<view class="system-message-contant">{{ item.content }}</view>
</view>
</view>
</scroll-list>
</view>
</template>
<script>
import { systemMessageList,systemRead } from '@/apis/trade'
import { systemMessageList, systemRead } from '@/apis/trade'
export default {
data() {
return {
option: {
size: 10,
auto: true,
emptyText: '暂无消息~',
background: '#F7F8FA',
fontSize: '40rpx'
size: 10,
auto: true,
emptyText: '暂无消息~',
background: '#F7F8FA',
fontSize: '40rpx'
},
pagination: {
pageNum: 0, //
pageSize: 10
pageNum: 0, //
pageSize: 10
},
list:[]
list: []
}
},
filters: {
meesageTypeFilter(value) {
var mes = ''
if (value) {
switch (value) {
case 1:
mes = '客户下单'
break
case 2:
mes = '客户付款'
break
case 3:
mes = '客户收货'
break
case 4:
mes = '客户询价'
break
case 4:
mes = '取消订单'
bre
default:
break
}
}
return mes
// 1- 2- 3- 4- 5-
}
},
onLoad(option) {
this.queryData()
},
onLoad(option) {
this.queryData()
},
methods: {
queryData(){
queryData() {
return new Promise((resolve, reject) => {
systemMessageList({...this.pagination })
.then((res) => {
if (res) {
var data= res.records
var count = 0
for(let i =0;i<data.length;i++){
if(data[i].readOrNot === 0){
count = count + 1
}
}
this.$emit('systemCount',count)
if (this.pagination.pageNum === 0) {
this.list = res.records
} else {
this.list = this.list.concat(res.records)
}
resolve({ list: this.list, total: res.total })
} else {
reject()
}
})
.catch((err) => {
reject(err)
})
systemMessageList({ ...this.pagination })
.then(res => {
if (res) {
var data = res.records
var count = 0
for (let i = 0; i < data.length; i++) {
if (data[i].readOrNot === 0) {
count = count + 1
}
}
this.$emit('systemCount', count)
if (this.pagination.pageNum === 0) {
this.list = res.records
} else {
this.list = this.list.concat(res.records)
}
resolve({ list: this.list, total: res.total })
} else {
reject()
}
})
.catch(err => {
reject(err)
})
})
},
//
quotationUp(page) {
this.pagination.pageNum++
this.queryData()
.then(({ list, total }) => {
this.$refs.messageRef.refreshSuccess({ list, total })
})
.catch(() => {
this.$refs.messageRef.loadFail()
})
this.pagination.pageNum++
this.queryData()
.then(({ list, total }) => {
this.$refs.messageRef.refreshSuccess({ list, total })
})
.catch(() => {
this.$refs.messageRef.loadFail()
})
},
//
quotationDown() {
this.pagination.pageNum = 0
this.queryData()
.then(({ list, total }) => {
this.$refs.messageRef.refreshSuccess({ list, total })
})
.catch(() => {
this.$refs.messageRef.refreshFail()
})
this.pagination.pageNum = 0
this.queryData()
.then(({ list, total }) => {
this.$refs.messageRef.refreshSuccess({ list, total })
})
.catch(() => {
this.$refs.messageRef.refreshFail()
})
},
allread(){
allread() {
return new Promise((resolve, reject) => {
var meesage = this.list.map(item => {return item.id})
systemRead(meesage)
.then((res) => {
if (res) {
uni.showToast({
title: '操作成功',
icon: 'success'
})
this.pagination.pageNum = 0
this.queryData()
} else {
reject()
}
})
.catch((err) => {
reject(err)
})
var meesage = this.list.map(item => {
return item.id
})
systemRead(meesage)
.then(res => {
if (res) {
uni.showToast({
title: '操作成功',
icon: 'success'
})
this.pagination.pageNum = 0
this.queryData()
} else {
reject()
}
})
.catch(err => {
reject(err)
})
})
}
}
@ -153,7 +181,7 @@ export default {
height: 100rpx;
}
.dian {
background: #FF0000 ;
background: #ff0000;
height: 14rpx;
width: 14rpx;
border-radius: 20rpx;

13
pages/mine/index.vue

@ -49,7 +49,7 @@
</view>
<text class="center">立即开通会员 尊享特权</text>
<view class="right">
<text class="text">开通会员</text>
<text class="text">{{ isVip ? '续费会员' : '开通会员' }}</text>
</view>
</view>
</view>
@ -126,14 +126,13 @@
</view> -->
</view>
</view>
<view @click="logout">mine</view>
<view @click="go2('client-credit')">client-credit</view>
<view @click="go2('enterprise-info')">enterprise-info</view>
</view>
</template>
<script>
import { exit, go2, loginGo2 } from '@/utils/hook.js'
import { go2, loginGo2 } from '@/utils/hook.js'
import { fddEnterpriseStatus } from '@/enums/index.js'
import { getBaseInfo, getVerifyUrl } from '@/apis/commonApi.js'
import qnDataPicker from '@/components/qn-data-picker/qn-data-picker.vue'
@ -182,10 +181,8 @@ export default {
}
}
},
methods: {
logout() {
exit()
},
//
certifyCompany() {
if (this.userInfo.fddEnterpriseStatus === fddEnterpriseStatus.UNCERTIFIED || this.userInfo.fddEnterpriseStatus === fddEnterpriseStatus.CERTIFIED_FAIL) {
@ -249,9 +246,11 @@ export default {
},
computed: {
hasLogin() {
console.log('token:', this.$store.state.qnToken)
return this.$store.state.qnToken != ''
},
isVip() {
return this.$store.state.supplierInfo.isVip == true
},
curAvatar() {
if (!this.hasLogin) {
return '/static/imgs/mine/user-avatar.png'

444
pages/my-offer/index.vue

@ -1,237 +1,239 @@
<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>
<script>
import { back, go2 } from '@/utils/hook.js'
import uGap from '@/components/u-gap/u-gap.vue'
import scrollList from '@/components/scroll-list/scroll-list.vue'
import { getMyreplyList } from '@/apis/trade.js'
import { getMyReplyList } from '@/apis/trade.js'
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>
<style lang="scss">
.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

20
pages/setting/index.vue

@ -17,11 +17,18 @@
</view>
</view>
</view>
<qn-footer fixed height="120">
<view class="flex-row-center-center">
<view class="button flex-row-center-center" @click="exit">
<text class="text">退出登录</text>
</view>
</view>
</qn-footer>
</view>
</template>
<script>
import { back, go2, uploadFile } from '@/utils/hook.js'
import { back, go2, uploadFile, exit } from '@/utils/hook.js'
export default {
data() {
return {
@ -30,6 +37,7 @@ export default {
},
methods: {
back,
exit,
//
checkCompany(msg = '请完善企业信息') {
let company = this.$store.state.supplierInfo
@ -107,4 +115,14 @@ export default {
font-weight: 400;
}
}
.button {
width: 608rpx;
height: 86rpx;
background: #007aff;
border-radius: 42rpx;
.text {
font-size: 32rpx;
color: #ffffff;
}
}
</style>

225
pages/submit-quotation/index.vue

@ -11,51 +11,53 @@
<view><text class="submit-main-title">交货要求</text></view>
<view>
<text class="submit-main-subTitle">询价客户</text>
<text class="submit-main-subContant">{{ upDataObj.belongEnterpriseName }}</text>
<text class="submit-main-subContent">{{ upDataObj.belongEnterpriseName }}</text>
</view>
<view>
<text class="submit-main-subTitle">交货区域</text>
<text class="submit-main-subContant">{{ upDataObj.deliveryArea }}</text>
<text class="submit-main-subContent">{{ upDataObj.deliveryArea }}</text>
</view>
<view>
<text class="submit-main-subTitle">交货时间</text>
<text class="submit-main-subContant">{{ upDataObj.deliveryDay }}</text>
<text class="submit-main-subContent">{{ upDataObj.deliveryDay }}</text>
</view>
</view>
<uGap></uGap>
<view class="submit-deadline">
<view class="submit-text">报价截止</view>
<view class="submit-time">
<text class="submit-time-text">{{ upDataObj.enquiryValidTimeSplit[0] }}</text>
<text class="submit-time-text">{{ hour }}</text>
</view>
<view class="sbumit-colon">:</view>
<view class="submit-colon">:</view>
<view class="submit-time">
<text class="submit-time-text">{{ upDataObj.enquiryValidTimeSplit[1] }}</text>
<text class="submit-time-text">{{ min }}</text>
</view>
<view class="sbumit-colon">:</view>
<view class="submit-colon">:</view>
<view class="submit-time">
<text class="submit-time-text">{{ upDataObj.enquiryValidTimeSplit[2] }}</text>
<text class="submit-time-text">{{ second }}</text>
</view>
</view>
<uGap></uGap>
<view class="submit-contant" v-for="(items, index) in upDataObj.itemList" :key="index">
<view class="submit-contant-head">
<view class="submit-contant-title">
<view class="submit-content" v-for="(items, index) in upDataObj.itemList" :key="index">
<view class="submit-content-head">
<view class="submit-content-title">
{{ items.paperName }} | {{ items.gramWeight }}g | {{ items.length }}*{{ items.width }} | {{ items.quantity }}
</view>
<view class="" v-if="upDataObj.replyStatus !== 30102" @click="commodityModify(items, index)">
<image class="submit-image" src="../../static/imgs/trade/myPrice.png" mode=""></image>
</view>
</view>
<view class="submit-contant-body">
<view class="submit-content-body">
<view class="">
<text class="submit-contant-body-title">重量()</text>
<text class="submit-contant-body-subtitle">{{ items.weight }}</text>
<text class="submit-content-body-title">重量()</text>
<text class="submit-content-body-subtitle">{{ items.weight }}</text>
</view>
<view>
<text class="submit-contant-body-title">单价(/)</text>
<text class="submit-contant-body-subtitle">
{{ items.unitFee }}
<view class="flex-row-center-space">
<text class="submit-content-body-title">单价(/)</text>
<view class="flex-row-center-start">
<text class="submit-content-body-subtitle">
{{ items.unitFee }}
</text>
<image
v-if="upDataObj.replyStatus !== 30102"
@click="priceModify(items, index)"
@ -63,44 +65,49 @@
src="../../static/imgs/trade/myPrice.png"
mode=""
></image>
</text>
</view>
</view>
<view>
<text class="submit-contant-body-title">小计()</text>
<text class="submit-contant-body-subtitle">{{ items.totalPrice }}</text>
<text class="submit-content-body-title">小计()</text>
<text class="submit-content-body-subtitle">{{ items.totalPrice }}</text>
</view>
<view class="submit-contant-body-input">
<uni-easyinput maxlength="100" class="submit-contant-body-inputClass" v-model="value" placeholder="请输入内容"></uni-easyinput>
<view class="flex-row-center-start">
<text class="submit-content-body-title">备注信息</text>
<text class="submit-content-body-subtitle">{{ items.remark }}</text>
</view>
</view>
</view>
<view class="submit-contant-order">
<view class="submit-content-order">
<view class="">
<text class="submit-contant-order-title">其他费用</text>
<text class="submit-contant-order-subtitle">¥ {{ upDataObj.otherFee }}</text>
<text class="submit-content-order-title">其他费用</text>
<text class="submit-content-order-subtitle">¥ {{ upDataObj.otherFee }}</text>
</view>
<view class="">
<text class="submit-contant-order-title">合计</text>
<text class="submit-contant-order-money">¥ {{ upDataObj.totalAllPrice }}</text>
<text class="submit-content-order-title">合计</text>
<text class="submit-content-order-money">¥ {{ upDataObj.totalAllPrice }}</text>
</view>
</view>
<uGap></uGap>
<view class="submit-contant-time">
<view class="submit-content-time">
<view class="">
<text class="submit-contant-time-title">有效时间</text>
<text class="submit-contant-time-title">{{ upDataObj.enquiryValidTime }}</text>
<text class="submit-content-time-title">有效时间</text>
<text class="submit-content-time-title">{{ upDataObj.enquiryValidTime }}</text>
</view>
<view class="" v-if="upDataObj.replyStatus !== 30102" @click="resetTime()"><text class="submit-contant-time-subtitle">设置</text></view>
<view class="" v-if="upDataObj.replyStatus !== 30102" @click="resetTime()"><text class="submit-content-time-subtitle">设置</text></view>
</view>
<uGap></uGap>
<view class="submit-contant-remark">
<view class="submit-contant-remark-title">报价备注</view>
<view class="submit-content-remark">
<view class="submit-content-remark-title">报价备注</view>
<view class="">
<uni-easyinput maxlength="200" type="textarea" class="submit-contant-remark-input" v-model="value1" placeholder="请输入内容"></uni-easyinput>
<uni-easyinput maxlength="200" type="textarea" class="submit-content-remark-input" v-model="quotationRemark" placeholder="请输入内容"></uni-easyinput>
</view>
</view>
<uGap></uGap>
<view class="submit-btnBg" v-if="upDataObj.replyStatus !== 30102"><button class="submit-btn" type="primary" @click="updateQuery()">提交报价</button></view>
<qn-footer fixed height="120rpx" v-if="upDataObj.replyStatus !== 30102">
<view class="submit-btnBg flex-row-center-center">
<view class="submit-btn flex-row-center-center" @click="updateQuery()"><text class="text">提交报价</text></view>
</view>
</qn-footer>
<view class="">
<uni-popup ref="popup" :mask-click="false">
<view class="submit-popup">
@ -170,7 +177,7 @@
<view class="">
<uni-easyinput
:inputBorder="false"
@blur="pricesUnutFee()"
@blur="pricesUnitFee()"
class="submit-popup-input"
type="number"
v-model="prices.unitFee"
@ -219,7 +226,7 @@
import { back, go2 } from '@/utils/hook.js'
import qnHeader from '@/components/qn-header/qn-header.vue'
import uGap from '@/components/u-gap/u-gap.vue'
import { updateEnquiryReply, enquiryReplyDetail } from '@/apis/trade'
import { updateEnquiryReply, enquiryReplyDetail } from '@/apis/trade.js'
import { round } from '@/utils/index.js'
export default {
@ -241,8 +248,7 @@ export default {
months.push(i + '小时')
}
return {
value: '',
value1: '',
quotationRemark: '',
vModelValue: '',
indicatorStyle: `height: 50px;`,
visible: true,
@ -263,7 +269,12 @@ export default {
totalPrice: 0
},
modifyIndex: 0,
pricesIndex: 0
pricesIndex: 0,
curStartTime: '',
day: '0',
hour: '00',
min: '00',
second: '00'
// items: []
}
},
@ -282,9 +293,8 @@ export default {
.then((res) => {
if (res) {
this.upDataObj = res
var timeb = this.upDataObj.enquiryValidTime.split(' ')
var timeabs = timeb[1].split(':')
this.$set(this.upDataObj, 'enquiryValidTimeSplit', timeabs)
this.curStartTime = res.enquiryValidTime
this.countTime()
this.$set(this.upDataObj, 'otherFee', 0)
this.$set(this.upDataObj, 'totalAllPrice', 0)
this.priceFree()
@ -295,9 +305,49 @@ export default {
}
}
})
.catch((err) => {
reject(err)
})
.catch((err) => {})
},
setEnquiryTime(time) {
var timeb = time.split(' ')
var timeabs = timeb[1].split(':')
this.$set(this.upDataObj, 'enquiryValidTimeSplit', timeabs)
},
countTime(time) {
//
let date = new Date()
let now = date.getTime()
//
let endDate = new Date(this.curStartTime) // this.curStartTime
let end = endDate.getTime()
//
let leftTime = end - now
// d,h,m,s
if (leftTime >= 0) {
//
this.day = Math.floor(leftTime / 1000 / 60 / 60 / 24)
//
let h = Math.floor((leftTime / 1000 / 60 / 60) % 24)
this.hour = h < 10 ? '0' + h : h
//
let m = Math.floor((leftTime / 1000 / 60) % 60)
this.min = m < 10 ? '0' + m : m
//
let s = Math.floor((leftTime / 1000) % 60)
this.second = s < 10 ? '0' + s : s
} else {
this.day = 0
this.hour = '00'
this.min = '00'
this.second = '00'
}
// this.setEnquiryTime()
// 0
if (Number(this.hour) === 0 && Number(this.day) === 0 && Number(this.min) === 0 && Number(this.second) === 0) {
return
} else {
// countTime,
setTimeout(this.countTime, 1000)
}
},
//
surePrice() {
@ -350,9 +400,7 @@ export default {
console.log('timeValue', this.timeValue)
this.$refs.popupTime.close()
var abs = this.addDate(new Date(), this.timeValue[0] + 1, this.timeValue[1] + 1)
var timeb = abs.split(' ')
var timeabs = timeb[1].split(':')
this.$set(this.upDataObj, 'enquiryValidTimeSplit', timeabs)
this.curStartTime = abs
this.$set(this.upDataObj, 'enquiryValidTime', abs)
console.log(abs)
},
@ -405,9 +453,9 @@ export default {
this.priceFree()
},
//
pricesUnutFee(item) {
pricesUnitFee(item) {
var abs = parseFloat(this.prices.unitFee) * parseFloat(this.prices.weight)
this.prices.totalPrice = Math.abs(abs, 2)
this.prices.totalPrice = round(abs, 2)
},
//
pricesSure() {
@ -432,7 +480,18 @@ export default {
},
//
updateQuery() {
for (let i = 0; i < this.upDataObj.itemList.length; i++) {
let target = this.upDataObj.itemList[i]
if (target.weight == 0 || target.unitFee == 0 || target.totalPrice == 0) {
uni.showToast({
title: '请填写报价完整信息,费用、单价、重量不能为0',
icon: 'none'
})
return
}
}
var params = {
remark: this.quotationRemark, //
...this.upDataObj,
userId: this.$store.state.userInfo.userId
}
@ -501,7 +560,7 @@ export default {
letter-spacing: 0;
font-weight: 400;
}
.submit-main-subContant {
.submit-main-subContent {
font-family: PingFangSC-Regular;
font-size: 28rpx;
color: #333333;
@ -516,13 +575,14 @@ export default {
box-shadow: 0rpx 2rpx 12rpx 0rpx rgba(100, 101, 102, 0.12);
display: flex;
justify-content: center;
align-items: center;
.submit-text {
font-family: PingFangSC-Medium;
font-size: 28rpx;
color: rgba(0, 0, 0, 0.5);
letter-spacing: 0;
font-weight: 500;
margin-top: 22rpx;
// margin-top: 22rpx;
width: 130rpx;
}
.submit-time {
@ -530,7 +590,7 @@ export default {
height: 40rpx;
background: #ee0a24;
border-radius: 8rpx;
margin-top: 20rpx;
// margin-top: 20rpx;
text-align: center;
}
.submit-time-text {
@ -541,7 +601,7 @@ export default {
line-height: 32rpx;
font-weight: 600;
}
.sbumit-colon {
.submit-colon {
width: 24rpx;
height: 32rpx;
font-family: PingFangSC-Regular;
@ -550,15 +610,15 @@ export default {
text-align: center;
line-height: 32rpx;
font-weight: 400;
margin-top: 20rpx;
// margin: 0 6rpx;
}
}
.submit-contant {
.submit-content {
background-color: #ffffff;
// height: 368rpx;
border-bottom: 2rpx solid #dddddd;
border-bottom: 2rpx solid rgba(221, 221, 221, 0.5);
padding-bottom: 20rpx;
.submit-contant-head {
.submit-content-head {
line-height: 90rpx;
width: 750rpx;
height: 90rpx;
@ -566,7 +626,7 @@ export default {
display: flex;
justify-content: space-between;
}
.submit-contant-title {
.submit-content-title {
font-family: PingFangSC-Semibold;
font-size: 30rpx;
color: rgba(0, 0, 0, 0.75);
@ -575,34 +635,33 @@ export default {
font-weight: 600;
padding: 0rpx 0rpx 0rpx 32rpx;
}
.submit-contant-body {
.submit-content-body {
line-height: 68rpx;
padding-left: 32rpx;
.submit-contant-body-title {
padding: 0 32rpx;
.submit-content-body-title {
font-family: PingFangSC-Regular;
font-size: 28rpx;
color: #555555;
letter-spacing: 0;
font-weight: 400;
}
.submit-contant-body-subtitle {
.submit-content-body-subtitle {
font-family: PingFangSC-Regular;
font-size: 28rpx;
color: #555555;
letter-spacing: 0;
font-weight: 400;
float: right;
margin-right: 32rpx;
}
.submit-contant-body-input {
.submit-content-body-input {
margin-right: 32rpx;
}
.submit-contant-body-inputClass {
.submit-content-body-inputClass {
background-color: #f7f8fa;
}
}
}
.submit-contant-order {
.submit-content-order {
width: 750rpx;
height: 90rpx;
line-height: 90rpx;
@ -611,7 +670,7 @@ export default {
padding-left: 32rpx;
padding-right: 32rpx;
justify-content: space-between;
.submit-contant-order-title {
.submit-content-order-title {
width: 140rpx;
height: 40rpx;
font-family: PingFangSC-Regular;
@ -619,7 +678,7 @@ export default {
color: rgba(0, 0, 0, 0.5);
font-weight: 400;
}
.submit-contant-order-subtitle {
.submit-content-order-subtitle {
width: 101rpx;
height: 40rpx;
font-family: PingFangSC-Regular;
@ -629,7 +688,7 @@ export default {
text-align: left;
font-weight: 400;
}
.submit-contant-order-money {
.submit-content-order-money {
width: 172rpx;
height: 42rpx;
font-family: PingFangSC-Semibold;
@ -640,7 +699,7 @@ export default {
font-weight: 600;
}
}
.submit-contant-time {
.submit-content-time {
width: 750rpx;
height: 88rpx;
background: #ffffff;
@ -649,7 +708,7 @@ export default {
padding-left: 32rpx;
padding-right: 32rpx;
justify-content: space-between;
.submit-contant-time-title {
.submit-content-time-title {
width: 230rpx;
height: 40rpx;
font-size: 28rpx;
@ -657,7 +716,7 @@ export default {
letter-spacing: 0;
font-weight: 400;
}
.submit-contant-time-subtitle {
.submit-content-time-subtitle {
width: 56rpx;
height: 40rpx;
font-size: 28rpx;
@ -668,11 +727,11 @@ export default {
cursor: pointer;
}
}
.submit-contant-remark {
.submit-content-remark {
width: 750rpx;
height: 336rpx;
background: #ffffff;
.submit-contant-remark-title {
.submit-content-remark-title {
font-family: PingFangSC-Regular;
font-size: 30rpx;
color: #000000;
@ -680,7 +739,7 @@ export default {
font-weight: 400;
padding: 28rpx 0rpx 0rpx 32rpx;
}
.submit-contant-remark-input {
.submit-content-remark-input {
background: #f7f8fa;
border-radius: 20rpx;
margin: 10rpx 32rpx 32rpx 32rpx;
@ -689,16 +748,16 @@ export default {
}
.submit-btnBg {
width: 750rpx;
height: 120rx;
background: #ffffff;
box-shadow: 0rpx 2rpx 12rpx 0rpx rgba(100, 101, 102, 0.12);
padding: 12rpx 32rpx 12rpx 32rpx;
}
.submit-btn {
width: 686rpx;
height: 96rpx;
background: #007aff;
border-radius: 10rpx;
.text {
font-size: 36rpx;
color: #ffffff;
}
}
.submit-image {
width: 24.38rpx;

4
pages/trade/orderList.vue

@ -6,7 +6,7 @@
@clickItem="onClickItem"
styleType="text"
activeColor="#007AFF"
style="border-bottom: 2rpx solid #dddddd"
style="border-bottom: 2rpx solid rgba(221, 221, 221, 0.5)"
>
>
</uni-segmented-control>
@ -175,7 +175,7 @@ export default {
margin-bottom: 0px;
background: #ffffff;
.list-border {
border-bottom: 2rpx solid #dddddd;
border-bottom: 2rpx solid rgba(221, 221, 221, 0.5);
}
.list-title-line {
width: 750rpx;

4
pages/trade/quotationList.vue

@ -200,8 +200,8 @@ export default {
.quotation-list {
margin-bottom: 0rpx;
.list-border {
// border-top: 1px solid #dddddd;
border-bottom: 2rpx solid #dddddd;
// 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;

BIN
static/imgs/mall/edit.png

Before After
Width: 32  |  Height: 32  |  Size: 1.0 KiB
Loading…
Cancel
Save