This commit is contained in:
2026-10-08 18:34:09 +08:00
commit 2933904f4c
905 changed files with 112129 additions and 0 deletions
+659
View File
@@ -0,0 +1,659 @@
<template> <!-- 现货详情 -->
<view class="wrap">
<!-- 吸顶 -->
<u-sticky offset-top="0" customNavHeight="0">
<!-- 顶部 -->
<uiheader></uiheader>
</u-sticky>
<!-- 内容 -->
<view class="layout layout-detail" v-if="sheet">
<view class="company flex m-top-20">
<view class="info flex-1 p-left-20">
<view class="font-bold">
{{ sheet.supplier.companyName ? sheet.supplier.companyName : sheet.supplier.personalName }}
</view>
<view class="zhu">
{{ sheet._add_time_str }} 发布
</view>
</view>
</view>
<view class="card-title m-top-30">物资信息</view>
<view class="detail m-top-20">
<view class="detail-title">
<text>{{ sheet.title }}</text>
<text class="text-main" v-if="sheet.isUrgent">[加急]</text>
</view>
<view class="m-top-20">
<file-type v-for="(item, index) in sheet.files" :key="index" :item="item"/>
</view>
<view class="detail-text">物资分类:{{ sheet.category[1] }}</view>
<view class="detail-text" v-if="sheet.addressRegion && sheet.addressRegion.city">
物资所在地:{{ sheet.addressRegion.province.name }}{{
sheet.addressRegion.city.name
}}{{ sheet.addressRegion.area.name }}{{ sheet.addressDetail }}
</view>
<view class="detail-text" v-if="[1, 2].includes(sheet.type) && sheet.deliverAddressRegion.city">
{{
sheet.type === 2 ? (sheet.rentType === 0 ? '物资交货地' : '物资装货地') : '物资交货地'
}}:{{ sheet.deliverAddressRegion.province.name }}{{
sheet.deliverAddressRegion.city.name
}}{{ sheet.deliverAddressRegion.area.name }}{{ sheet.deliverAddressDetail }}
</view>
<view class="detail-text">详情:{{ sheet.desc ? sheet.desc : '无' }}</view>
<template v-if="sheet.type === 0">
<view class="detail-text">起拍计价单位:{{
sheet.startNum ? sheet.startNum : ''
}}{{ sheet.unit ? sheet.unit : '' }}
</view>
<view class="detail-text">起拍人民币单价:{{
sheet.startAmount ? `${sheet.startAmount}元` : ''
}}
</view>
<view class="detail-text">拍卖信息失效时间:{{ sheet.expiredTime ? sheet.expiredTime : '' }}</view>
</template>
</view>
<view v-if="[0, 1, 2].includes(sheet.type)">
<view class="card-title m-top-30">合同条款</view>
<view class="detail m-top-20">
<view class="detail-text">是否含税:{{ sheet.invoice ? '含税' : '不含税' }}</view>
<template v-if="sheet.invoice">
<view class="detail-text" v-if="sheet.invoiceOther">税票要求:{{ sheet.invoiceOther }}</view>
<template v-else>
<view class="detail-text">
开票时间:{{ sheet.writeInvoiceTime ? sheet.writeInvoiceTime : '无' }}
</view>
<view class="detail-text">
纳税人身份:{{ sheet.taxType ? sheet.taxType : '无' }}
</view>
<view class="detail-text">
发票种类:{{ sheet.invoiceType ? sheet.invoiceType : '无' }}
</view>
<view class="detail-text">
税率:{{ sheet.taxRate ? sheet.taxRate : '无' }}
</view>
</template>
</template>
<view class="detail-text">报价明细:{{ sheet.invoiceDetail ? sheet.invoiceDetail : '无' }}</view>
</view>
</view>
<template v-if="sheet.type !== 3">
<view class="card-title m-top-30">交易说明</view>
<view class="detail m-top-20">
<view class="mt-15 detail-text">报价区域:{{
sheet.offerAddressNoLimit ? '不限区域' :
(sheet.offerAddressRegion && sheet.offerAddressRegion.province) ? `${sheet.offerAddressRegion.province.name} ${sheet.offerAddressRegion.city ? sheet.offerAddressRegion.city.name : ''} ${sheet.offerAddressRegion.area ? sheet.offerAddressRegion.area.name : '无'}` : '无'
}}
</view>
<view class="mt-15 detail-text" v-if="sheet.payMethod">付款方式:{{ sheet.payMethod }}{{
sheet.payMethod === '预付' ? `${sheet.prePayRate}%,货到付全款` : ''
}}
</view>
<view class="mt-15 detail-text" v-if="sheet.payMethod === '其他付款方式描述'">{{
sheet.otherPayMethodDesc
}}
</view>
<!-- <view class="mt-15">报价形式:{{ sheet.offerType === 0 ? '整单报价' : '可分项报价' }}</view>-->
</view>
</template>
<template v-if="sheet.type === 1">
<view class="item-wrap">
<view class="card-title m-top-30">采购商信息</view>
<template v-if="sheet.isMine || sheet.hasQuote || userInfo.userLevel > 0">
<template v-if="sheet.user && sheet.user.accountType === 2">
<view class="mt-15" v-if="sheet.buyer.companyName">公司信息:{{
sheet.buyer.companyName ? sheet.buyer.companyName : ''
}}
</view>
<view class="mt-15" v-if="sheet.buyer.contract">公司联系方式:{{
sheet.buyer.contract ? sheet.buyer.contract : ''
}}
</view>
</template>
<template v-else>
<view class="mt-15" v-if="sheet.buyer.personalName">个人信息:{{
sheet.buyer.personalName ? sheet.buyer.personalName : ''
}}
</view>
<view class="mt-15" v-if="sheet.buyer.personalContract">个人联系方式:{{
sheet.buyer.personalContract ? sheet.buyer.personalContract : ''
}}
</view>
</template>
<view class="mt-15" v-if="sheet.buyer.managerName">授权人姓名:{{
sheet.buyer.managerName ? sheet.buyer.managerName : ''
}}
</view>
<view class="mt-15" v-if="sheet.buyer.managerContract">授权联系方式:{{
sheet.buyer.managerContract ? sheet.buyer.managerContract : ''
}}
</view>
</template>
<template v-else>
<template v-if="sheet.user && sheet.user.accountType === 2">
<view class="mt-15" v-if="sheet.buyer.companyName">公司信息:{{
sheet.buyer.companyName ? sheet.buyer.companyName.replace(/^(.)(.).*(.)(.)(.)(.)$/, "$1$2***$3$4$5$6") : ''
}}
</view>
<view class="mt-15" v-if="sheet.buyer.contract">公司联系方式:{{
sheet.buyer.contract ? sheet.buyer.contract.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2") : ''
}}
</view>
</template>
<template v-else>
<view class="mt-15" v-if="sheet.buyer.personalName">个人信息:{{
sheet.buyer.personalName ? sheet.buyer.personalName.replace(/^(.).*(.)$/, "$1***$2") : ''
}}
</view>
<view class="mt-15" v-if="sheet.buyer.personalContract">个人联系方式:{{
sheet.buyer.personalContract ? sheet.buyer.personalContract.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2") : ''
}}
</view>
</template>
<view class="mt-15" v-if="sheet.buyer.managerName">授权人姓名:{{
sheet.buyer.managerName ? sheet.buyer.managerName.replace(/^(.).*(.)$/, "$1***$2") : ''
}}
</view>
<view class="mt-15" v-if="sheet.buyer.managerContract">授权联系方式:{{
sheet.buyer.managerContract ? sheet.buyer.managerContract.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2") : ''
}}
</view>
</template>
</view>
</template>
<template v-else>
<view class="item-wrap">
<view class="card-title m-top-30">{{ sheet.type === 3 ? '回收单位信息' : '供货商信息' }}</view>
<template v-if="sheet.isMine || sheet.hasQuote || userInfo.userLevel > 0">
<template v-if="sheet.user && sheet.user.accountType === 2">
<view class="mt-15" v-if="sheet.supplier.companyName">公司信息:{{
sheet.supplier.companyName ? sheet.supplier.companyName : ''
}}
</view>
<view class="mt-15" v-if="sheet.supplier.contract">公司联系方式:{{
sheet.supplier.contract ? sheet.supplier.contract : ''
}}
</view>
</template>
<template v-else>
<view class="mt-15" v-if="sheet.supplier.personalName">个人信息:{{
sheet.supplier.personalName ? sheet.supplier.personalName : ''
}}
</view>
<view class="mt-15" v-if="sheet.supplier.personalContract">
个人联系方式:{{
sheet.supplier.personalContract ? sheet.supplier.personalContract : ''
}}
</view>
</template>
<view class="mt-15" v-if="sheet.supplier.managerName">授权人姓名:{{
sheet.supplier.managerName ? sheet.supplier.managerName : ''
}}
</view>
<view class="mt-15" v-if="sheet.supplier.managerContract">授权联系方式:{{
sheet.supplier.managerContract ? sheet.supplier.managerContract : ''
}}
</view>
</template>
<template v-else>
<template v-if="sheet.user && sheet.user.accountType === 2">
<view class="mt-15" v-if="sheet.supplier.companyName">公司信息:{{
sheet.supplier.companyName ? sheet.supplier.companyName.replace(/^(.)(.).*(.)(.)(.)(.)$/, "$1$2***$3$4$5$6") : ''
}}
</view>
<view class="mt-15" v-if="sheet.supplier.contract">公司联系方式:{{
sheet.supplier.contract ? sheet.supplier.contract.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2") : ''
}}
</view>
</template>
<template v-else>
<view class="mt-15" v-if="sheet.supplier.personalName">个人信息:{{
sheet.supplier.personalName ? sheet.supplier.personalName.replace(/^(.).*(.)$/, "$1***$2") : ''
}}
</view>
<view class="mt-15" v-if="sheet.supplier.personalContract">
个人联系方式:{{
sheet.supplier.personalContract ? sheet.supplier.personalContract.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2") : ''
}}
</view>
</template>
<view class="mt-15" v-if="sheet.supplier.managerName">授权人姓名:{{
sheet.supplier.managerName ? sheet.supplier.managerName.replace(/^(.).*(.)$/, "$1***$2") : ''
}}
</view>
<view class="mt-15" v-if="sheet.supplier.managerContract">授权联系方式:{{
sheet.supplier.managerContract ? sheet.supplier.managerContract.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2") : ''
}}
</view>
</template>
</view>
</template>
<view v-if="sheet.signMethod === 0" style="line-height: 32rpx">
<view class="card-title m-top-30">合同条款</view>
<view class="detail m-top-20 text-25">
<view class="mt-15">违约责任:</view>
<view class="mt-15">
1.乙方所交产品品种、型号、规格、质量不符合规定的,如果甲方同意利用,应当按质论价;如果甲方不能利用的,应根据产品的具体情况,由乙方负责包换或包修,并承担修理、调换或退货而支付的实际费用;2.乙方不予供货违约责任为甲方的实际损失+违约金,如乙方材料符合订货标准,甲方不能退货和不收货,甲方无条件应按实际本合同订货数量支付100%货款,并支付乙方因此产生的实际费用。带有甲乙双方单位相关收货人和发货人签字的本合同的发货清单事项和内容均视为本合同的补充合同,与本合同有相同的法律效力,双方应共同遵照执行。
</view>
<view class="mt-15">解决纠纷的方法:</view>
<view class="mt-15">
1、凡因本合同引起的或与本合同有关的任何争议,均可友好协商或仲裁解决,协商或仲裁不成的,双方协商同意在合同签订地人民法院管辖地起诉,违约一方或对合同争议承担主要责任的一方,应承担对方因仲裁和起诉而产生的全部律师代理费、鉴定(检验)费、诉讼保全费、诉讼保险费、公告费、差旅费、执行费、误工費和获取证据产生费用等其他相关费用。2、双方本合同相关权利放弃均应有双方书面作出并加盖公章或授权委托人签字后生效。
</view>
<view class="mt-15">不可抗力:</view>
<view class="mt-15">
甲乙双方的任何一方由于不可抗力或突发公共事件的原因不能履行合同时,应及时向对方通报不能履行或不能完全履行的理由,以减轻可能给对方造成的损失,在取得有关机构证明以后,允许延期履行、部分履行或者不履行合同,并根据情况可部分或全部免予承担违约责任。
</view>
<view class="mt-15">其他:</view>
<view class="mt-15">
本合同的全部内容由双方平等共同协商一致,共同起草制定,非一方事先拟定,不属于格式条款。本合同自双方签字盖章后生效(包括电子签字、盖章),按本合同内容地址、联系方式寄送的一切文书、函件送达与否,均为视为送达有法律效力,通知途径和本合同内联系方式或地址送达文件双方均予以验证。
</view>
<view class="mt-15">采购方补充条款: {{ sheet.supplementary }}</view>
</view>
</view>
<!-- <view class="card-title m-top-30">已收到的合作申请</view>-->
<!-- <view class="table-box m-top-30">-->
<!-- <view class="thead">-->
<!-- <view class="tr">-->
<!-- <view class="th">企业</view>-->
<!-- <view class="th">申请人</view>-->
<!-- <view class="th">联系方式</view>-->
<!-- <view class="th">合作留言</view>-->
<!-- <view class="th">申请时间</view>-->
<!-- </view>-->
<!-- </view>-->
<!-- <view class="tbody" v-if="sheet">-->
<!-- <view class="tr" v-for="(item, index) in sheet.quoteList" :key="index">-->
<!-- <view class="td">-->
<!-- <text v-if="item.user">{{-->
<!-- item.user.accountType === 2 ? item.user.company.companyName.replace(/^(.)(.).*(.)(.)(.)(.)$/, "$1$2***$3$4$5$6") : item.user.person.personName.replace(/^(.)(.).*(.)(.)(.)(.)$/, "$1$2***$3$4$5$6")-->
<!-- }}-->
<!-- </text>-->
<!-- </view>-->
<!-- <view class="td">{{ item.name }}</view>-->
<!-- <view class="td">{{ item.mobile }}</view>-->
<!-- <view class="td">{{ item.remark }}</view>-->
<!-- <view class="td">{{ item._add_time_str }}</view>-->
<!-- </view>-->
<!-- </view>-->
<!-- </view>-->
</view>
<!-- 底部 -->
<view class="fiexd-bottom flex justify-between align-center bg-white" v-if="sheet && sheet.type < 3">
<u-icon name="integral" color="#A92924" size="26"></u-icon>
<view class="text red flex-1 m-left-20">{{ sheet.quoteList.length }}家已报价</view>
<view class="apply-btn" @click="toCooperate" v-if="userInfo._id !== sheet.uid && sheet.status === 0 ">
{{ sheet.type === 3 ? '我要询价' : '我要报价' }}
</view>
<view class="apply-btn" @click="isPopup = true" v-else-if="userInfo._id === sheet.uid">收到的报价申请
</view>
</view>
<!-- 弹出窗 -->
<u-popup :show="isPopup" mode="center" @close="isPopup = false" @open="open" :custom-style="{width: '100%'}">
<view class="popup-box" v-if="isPopup">
<view class="popup-title flex justify-between align-center">
<view class="title">收到的合作申请列表</view>
<view class="close" @click="isPopup = false">关闭</view>
</view>
<view class="py-20 border-bottom text-25" v-for="(item, index) in sheet.quoteList" :key="index">
<view class="flex justify-start items-center mb-20">
<text class="mr-10">报价方:</text>
<text>{{ item.subjectName }}</text>
</view>
<view class="flex justify-start items-center mb-20">
<text class="mr-10">报价时间:</text>
<text>{{ item._add_time_str }}</text>
</view>
<view class="flex justify-start items-center mb-20">
<text class="mr-10">联系方式:</text>
<text>{{ item.user.mobile }}</text>
</view>
<view class="flex justify-start items-center mb-20">
<text class="mr-10">报价:</text>
<text>{{ item.totalPrice }}元</text>
</view>
<view class="flex justify-start items-center mb-20">
<text class="mr-10">详情:</text>
<text>{{ item.remark }}</text>
</view>
<view class="flex justify-start items-center mb-20">
<text class="mr-10">附件:</text>
<template v-if="item.files.length > 0">
<file-type v-for="(file, fileIndex) in item.files" :key="fileIndex" :item="file"
@click.native="openDownload(file)"/>
</template>
<text v-else>无</text>
</view>
<u-button v-if="sheet.status === 0 && sheet.type !== 3"
size="mini" type="error" text="选择" style="width: 60rpx;"
@click="confirmQuote(item._id)"
></u-button>
</view>
</view>
</u-popup>
</view>
</template>
<script>
import uiheader from '@/components/index/header'
import dayjs from 'dayjs';
import {INVOICE_TYPE, WRITE_INVOICE_TIME} from "../../util";
import FileType from "@/components/file-type/file-type.vue";
export default {
components: {
FileType,
uiheader,
},
data() {
return {
isPopup: false,
sheet: null,
allChildCate: [],
userInfo: null
};
},
methods: {
INVOICE_TYPE() {
return INVOICE_TYPE
},
WRITE_INVOICE_TIME() {
return WRITE_INVOICE_TIME
},
getCategoryTreeData(id) {
vk.callFunction({
url: 'client/spot/category/pub/getTree',
title: '请求中...',
data: {},
success: (data) => {
this.allChildCate = []
data.rows.forEach(item => {
item.children.forEach(child => {
this.allChildCate.push(child)
})
})
this.getInfo(id)
}
});
},
applyLink() {
uni.$u.route('/pages/goods/apply', {
id: 0,
});
},
getDetail() {
vk.callFunction({
url: 'client/old/pub/getDetail',
title: '请求中...',
data: {
id: this.id
},
success: (res) => {
this.sheet = res
this.sheet.address = ''
this.sheet.deliverAddress = ''
this.sheet.offerAddress = ''
if (this.sheet.addressRegion && this.sheet.addressRegion.length > 0)
this.sheet.address = this.sheet?.addressRegion[0]?.name + this.sheet?.addressRegion[1]?.name + this.sheet?.addressRegion[2]?.name + this.sheet.addressDetail
if (this.sheet.deliverAddress && this.sheet.deliverAddress.length > 0)
this.sheet.deliverAddress = this.sheet?.deliverAddressRegion[0]?.name + this.sheet?.deliverAddressRegion[1]?.name + this.sheet?.deliverAddressRegion[2]?.name + this.sheet.addressDetail
if (this.sheet.offerAddress && this.sheet.offerAddress.length > 0)
this.sheet.offerAddress = !this.sheet.offerAddressNoLimit ? (this.sheet?.offerAddressRegion[0]?.name + this.sheet?.offerAddressRegion[1]?.name + this.sheet?.offerAddressRegion[2]?.name) : '无限制'
this.sheet.expiredTime = dayjs(this.sheet.expiredTime).format('YYYY-MM-DD')
}
});
},
async toCooperate() {
const {userInfo, accountNum} = await vk.callFunction({
url: 'user/kh/getMyUserInfo'
})
if (!userInfo.fadadaConfirm || [-1, 2].includes(userInfo.authStatus)) {
uni.showModal({
title: '提示',
content: '您尚未认证, 是否前往认证?',
success: res => {
if (res.confirm) {
uni.setStorageSync('user_tab', 0)
uni.switchTab({url: '/pages/user/user'})
}
}
})
} else if (vk.pubfn.isNull(userInfo.businessCard)) {
uni.showModal({
title: '提示',
content: '请完善名片信息',
success: res => {
if (res.confirm) {
uni.setStorageSync('user_tab', 1)
uni.switchTab({url: '/pages/user/user'})
}
}
})
} else if (accountNum === 0) {
uni.showModal({
title: '提示',
content: '请先到个人中心添加收款账户',
success: res => {
if (res.confirm) {
uni.setStorageSync('user_tab', 7)
uni.switchTab({url: '/pages/user/user'})
}
}
})
} else {
vk.navigateTo({url: `/pages/junk/apply?id=${this.sheet._id}&userId=${this.sheet.userId}`});
}
},
async confirmQuote(quoteId) {
await vk.callFunction({
url: 'client/old/kh/confirmQuote',
title: '请求中...',
data: {
quoteId,
}
});
this.showDialog = false
this.$message({
message: "选择成功",
type: 'success'
})
if (this.sheet.signMethod === 0) vk.navigateTo('/pages/public/contract?tab=1')
else {
if (this.sheet.signMethod === 1) vk.navigateTo('/pages/user/seller?menuIndex=2')
else vk.navigateTo('/pages/public/contract')
}
},
openDownload(url) {
window.location.href = url
// window.open(url)
}
},
onLoad({id}) {
this.id = id
this.userInfo = vk.getStorageSync('uni_id_user_info')
this.getDetail()
}
}
</script>
<style lang="scss">
page {
padding-bottom: 150rpx;
background: #ffffff;
}
.card-title {
position: relative;
padding-left: 20rpx;
font-size: 28rpx;
font-weight: 600;
line-height: 48rpx;
color: #A92924;
&:before {
position: absolute;
left: 0;
top: 50%;
z-index: 9;
margin-top: -14rpx;
content: '';
width: 6rpx;
height: 28rpx;
background: #A92924;
}
.more {
font-size: 24rpx;
font-weight: normal;
color: #999999;
}
}
.layout-detail {
padding: 20rpx 30rpx;
}
.company {
padding-bottom: 40rpx;
border-bottom: 1px solid #f2f2f2;
.logo {
width: 120rpx;
height: 120rpx;
}
.name-text {
max-width: 380rpx;
font-size: 30rpx;
font-weight: 600;
line-height: 40rpx;
color: #333333;
}
.name-icon {
width: 80rpx;
height: 32rpx;
}
.zhu {
margin-top: 10rpx;
font-size: 24rpx;
line-height: 32rpx;
color: #999999;
}
}
.detail-title {
font-size: 26rpx;
font-weight: 600;
line-height: 40rpx;
color: #101010;
}
.detail-text {
margin-top: 10rpx;
font-size: 24rpx;
line-height: 40rpx;
color: #999999;
}
.fiexd-bottom {
position: fixed;
left: 0;
bottom: 0;
z-index: 99;
width: 100%;
height: 130rpx;
padding: 0 30rpx;
box-sizing: border-box;
border-top: 1px solid #f2f2f2;
.text {
font-size: 26rpx;
line-height: 40rpx;
}
.apply-btn {
width: 220rpx;
height: 70rpx;
font-size: 26rpx;
line-height: 70rpx;
text-align: center;
color: #ffffff;
background: #A92924;
}
}
.table-box {
font-size: 24rpx;
line-height: 28rpx;
text-align: center;
}
.tr {
display: flex;
justify-content: space-between;
align-items: center;
}
.th {
color: #666 !important;
background: #FFF8F2;
}
.th, .td {
display: flex;
justify-content: center;
align-items: center;
width: 50%;
height: 76rpx;
color: #999;
overflow: hidden;
box-sizing: border-box;
border-left: 1px solid #f2f2f2;
border-right: 1px solid #f2f2f2;
border-bottom: 1px solid #f2f2f2;
}
.td {
border-right: 1px solid #f2f2f2;
border-bottom: 1px solid #f2f2f2;
background: #ffffff;
}
.td-3 {
width: 33.33%;
}
.popup-box {
padding: 20rpx 20rpx;
}
.popup-title {
padding: 18rpx 0;
border-bottom: 1px solid #A92924;
.title {
font-size: 24rpx;
line-height: 40rpx;
color: #A92924;
}
.close {
width: 80rpx;
height: 40rpx;
font-size: 22rpx;
line-height: 40rpx;
text-align: center;
color: #ffffff;
background: #A92924;
}
}
.item-wrap {
margin-top: 10rpx;
font-size: 24rpx;
line-height: 40rpx;
color: #999999;
}
</style>