初始化仓库

This commit is contained in:
wangxiaowei
2026-04-14 16:54:04 +08:00
commit 967c25b397
553 changed files with 106514 additions and 0 deletions

View File

@ -0,0 +1,333 @@
<template>
<view class="order-shop">
<view class="m-l-20">
<shop-title :shop="{ shop_name: item.shop_name }" :is-link="false"></shop-title>
</view>
<view class="order-goods">
<order-goods :list="item.goods"></order-goods>
</view>
<view class="item flex row-between" @tap="onShowCoupon" v-if="orderType == 0">
<view>店铺优惠券</view>
<view class="flex">
<text class="primary" v-if="item.discount_amount"
>-{{ item.discount_amount }}</text
>
<text v-else class="muted">请选择</text>
<u-icon name="arrow-right muted" size="24" class="m-l-10"></u-icon>
</view>
</view>
<view class="item flex" @click="chengeDelivery">
<view>配送方式</view>
<view class="flex-1 m-l-20 muted">
<template v-if="item.delivery_type == 1">
快递费
<price-format :price="item.shipping_price"></price-format>
</template>
</view>
<!-- TODO -->
<view>
<!-- {{ deliveryType.delivery_type_text || "" }} -->
{{ item.delivery_types_arr[delivery_type_index].delivery_type_text }}
<u-icon name="arrow-right muted" size="24" class="m-l-10"></u-icon>
</view>
</view>
<view
class="flex pickCard"
@click="openLocation(item)"
v-if="item.delivery_types_arr[delivery_type_index].delivery_type_text == '线下自提'"
>
<view>
<image class="icon-md m-r-20" src="/static/images/icon_address.png"></image
></view>
<view class="text"
><view
>{{ item.province }} {{ item.city }}{{ item.district }} {{ item.address }}
</view>
<view class="muted">
营业时间:{{ item.run_start_time }} ~ {{ item.run_end_time }}
</view></view
>
<!-- <u-icon
name="arrow-right muted"
size="24"
class="m-t-10 m-l-10"
style="margin-left: auto"
></u-icon> -->
</view>
<view
class="item flex row-between col-top m-t-20"
@tap="handleInvoice(item.shop_id)"
v-if="item.open_invoice"
>
<view>开具发票</view>
<view class="invoice col-top">
<text class="muted invoice--text">{{ getCurrentShopInvoice }}</text>
<u-icon name="arrow-right muted" size="24" class="m-t-10 m-l-10"></u-icon>
</view>
</view>
<view class="item flex row-between">
<view>买家留言</view>
<u-input
v-model="remark"
class="flex-1 m-l-20"
:clearable="false"
placeholder="请添加备注150字以内"
></u-input>
</view>
<view class="item flex row-right">
{{ item.total_num || (item.goods && item.goods[0].count) }}合计
<price-format
weight="500"
:color="colorConfig.primary"
:first-size="36"
:second-size="36"
:price="item.total_amount || (item.goods && item.goods[0].team_price)"
></price-format>
</view>
<u-modal
v-model="showDelivery"
title="请选择配送方式"
showCancelButton
@confirm="changeDeliveryType"
:confirm-color="colorConfig.primary"
:z-index="9999"
>
<view
class="delivery nr"
v-for="(item2, index) in item.delivery_types_arr"
:key="index"
>
<view
class="flex row-between bg-body delivery-item"
@click="delivery_type = item2.delivery_type"
>
<text>{{ item2.delivery_type_text }}</text>
<u-checkbox
:value="item2.delivery_type == delivery_type"
shape="circle"
></u-checkbox>
</view>
</view>
</u-modal>
<u-popup
v-if="orderType == 0"
v-model="showCoupon"
border-radius="14"
mode="bottom"
closeable
:safe-area-inset-bottom="true"
>
<view class="p-30">
<view class="title">优惠券</view>
</view>
<view v-if="showCoupon">
<tabs :current="active" :bar-width="100" :is-scroll="false">
<tab :name="'可使用优惠券 (' + usableCoupon.length + ')'">
<coupon-order
:list="usableCoupon"
:type="0"
@change="onSelectCoupon"
:coupon-id="couponId"
>
</coupon-order>
</tab>
<tab :name="'不可用优惠券 (' + unusableCoupon.length + ')'">
<coupon-order
:list="unusableCoupon"
:type="1"
@change="showCoupon = false"
></coupon-order>
</tab>
</tabs>
</view>
</u-popup>
</view>
</template>
<script>
import { getOrderCoupon } from '@/api/activity'
import { invoiceType } from '@/utils/type.js'
export default {
name: 'order-shop',
props: {
item: {
type: [Object, Array]
},
teamId: {
type: [Number, undefined]
},
bargainLaunchId: {
type: [Number, undefined]
},
orderType: {
type: Number
},
invoice: {
type: [Object, Array]
}
},
data() {
return {
active: 0,
remark: '',
showCoupon: false,
showDelivery: false,
delivery_type: this.item.delivery_type,
delivery_type_index: 0,
usableCoupon: [],
unusableCoupon: [],
usableCouponL: 0,
unusableCouponL: 0,
isRequest: false,
couponId: '',
invoiceInfo: {} // 发票内容
}
},
computed: {
// 获取当前发票选择显示在视图上
getCurrentShopInvoice() {
const invoice = this.invoiceInfo
if (invoice.name) {
return `${invoice.type == 0 ? '普通发票' : '专用发票'} - ${
invoice.header_type == 0 ? '个人' : '企业'
} - ${invoice.name}`
} else {
return '不开发票'
}
}
// deliveryType() {
// console.log(this.item, 1234);
// return this.item.delivery_types_arr.find((i) => {
// return i.delivery_type == this.delivery_type;
// });
// },
},
methods: {
openLocation(row) {
uni.openLocation({
latitude: Number(row.info.latitude), //要去地点的纬度
longitude: Number(row.info.longitude), ///要去地点的经度-地址
name: row.info.name, //地点名称
address: row.info.address_detail //详细地点名称
})
},
onShowCoupon() {
if (!this.isRequest) {
uni.showLoading({
title: '加载中...'
})
this.getCoupon()
} else {
this.showCoupon = true
}
},
async getCoupon() {
const {
item: { goods, shop_id }
} = this
const params = goods.map(({ item_id, num, goods_id }) => ({
item_id,
num,
goods_id
}))
const { data, code } = await getOrderCoupon({
goods: params,
shop_id: shop_id
})
if (code == 1) {
this.isRequest = true
this.usableCoupon = data.suit
this.usableCouponL = data.suit.length
this.unusableCoupon = data.un_suit
this.unusableCouponL = data.un_suit.length
this.showCoupon = true
uni.hideLoading()
}
},
chengeDelivery() {
// if (this.item.delivery_type == 1) return;
this.showDelivery = true
},
changeDeliveryType() {
this.delivery_type_index = this.item.delivery_types_arr.findIndex(
(iten) => iten.delivery_type === this.delivery_type
)
this.$emit('changeDeliveryType', this.delivery_type)
},
// 选择发票
handleInvoice(shopId) {
this.$Router.push({
path: '/bundle/pages/invoice/invoice',
query: {
shop_id: shopId,
invoice: JSON.stringify(this.invoiceInfo),
type: invoiceType['SETTLEMENT']
}
})
},
onSelectCoupon(e) {
this.couponId = e
this.$emit('changecoupon', e)
this.showCoupon = false
}
},
watch: {
remark(val) {
this.$emit('changeremark', {
shop_id: this.item.shop_id,
remark: val
})
},
invoice(val) {
const res = val.filter((el) => el.shop_id == this.item.shop_id)
if (res.length) {
this.invoiceInfo = res[0]
} else {
this.invoiceInfo = {}
}
}
}
}
</script>
<style lang="scss">
.order-shop {
.order-goods {
border-top: $-solid-border;
}
.item {
height: 88rpx;
padding: 0 24rpx;
.invoice {
display: flex;
&--text {
width: 300rpx;
text-align: right;
}
}
}
}
.delivery {
&-item {
padding: 24rpx 14rpx;
margin: 0 40rpx 30rpx;
border-radius: 10rpx;
}
}
.pickCard {
padding: 24rpx;
height: 100rpx;
background-color: #ffefe9;
margin: 0 24rpx;
border-radius: 20rpx;
.text {
font-size: 24rpx;
}
}
</style>