| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292 |
- <template>
- <view class="order-card" :class="{ 'order-card-overTime': order.isDelay }" @click.stop="handleClick(order)">
- <view class="order-card-header">
- <view class="order-card-header-left">
- <view class="order-card-header-left-band" style="backgroundColor: #007AFF;" v-show="order.itemBrand">
- {{ order.itemBrand }}
- </view>
- <view class="order-card-header-left-band" v-for="value in order.tags" :key="value.id"
- :style="{ backgroundColor: value.color }">
- {{ value.name }}
- </view>
- <!-- <view class="order-card-header-left-band" v-if="order.tags.length == 0" style="backgroundColor: #999;">
- 暂无标签
- </view> -->
- </view>
- <view class="order-card-header-right">
- <view class="order-card-header-right-price">
- ¥{{ order.priceRange ? order.priceRange : '暂无价格' }}
- </view>
- </view>
- </view>
- <view class="order-card-content">
- <view class="order-card-content-left">
- <image :src="order.image ? order.image : '/static/acceptOrder/orderCardPic.jpg'" mode="scaleToFill" />
- </view>
- <view class="order-card-content-right">
- <view>{{ order.item }}</view>
- <view>发单人:{{ order.createNickName }}</view>
- <view>{{ order.sendDate }}</view>
- </view>
- </view>
- <view class="order-card-bottom">
- <u-row justify="between" v-if="order.status == '1' || order.status == null">
- <u-col span="5.5">
- <view @click.stop="handleAcceptOrder(order)">
- <u-button type="primary" size="medium">立即接单</u-button>
- </view>
- </u-col>
- <u-col span="5.5">
- <view @click.stop="handleBusy(order)">
- <u-button type="primary" size="medium">在忙({{ buzyTime / 1000 }}s)</u-button>
- </view>
- </u-col>
- </u-row>
- <u-row justify="between" v-if="order.status == '2'">
- <u-col span="5.5">
- <view @click.stop="handleWillFollow(order)">
- <u-button type="primary" size="medium">待跟进</u-button>
- </view>
- </u-col>
- <u-col span="5.5">
- <view @click.stop="handleTag(order)">
- <u-button type="primary" size="medium">打标签</u-button>
- </view>
- </u-col>
- </u-row>
- <u-row justify="between" v-if="order.status == '3'">
- <u-col span="12">
- <view @click.stop="handleShare(order)">
- <u-button type="primary" size="medium">一键分享</u-button>
- </view>
- </u-col>
- </u-row>
- <u-row justify="between" v-if="order.status == '4'">
- <u-col span="12">
- <view @click.stop="handleShare(order)">
- <u-button type="primary" size="medium">待跟进</u-button>
- </view>
- </u-col>
- </u-row>
- </view>
- </view>
- </template>
- <script>
- // order.status 1未接,2已接单,3完成一键分享,4未接待跟进
- export default {
- props: {
- order: {
- type: Object,
- default: () => ({})
- }
- },
- data() {
- return {
- buzyTime: 300000,
- // buzyTime: 5000,
- busyTimer: null,
- }
- },
- computed: {
- statue() {
- switch (this.order.status) {
- case 'pending':
- return '待接单';
- case 'received':
- return '已接单';
- case 'rejected':
- return '已拒绝';
- }
- }
- },
- watch: {
- buzyTime: {
- handler(newVal) {
- // console.log('newVal', newVal);
- if (newVal == 0) {
- // 移动到最后
- this.handleBusy(this.order)
- }
- },
- deep: true
- }
- },
- mounted() {
- this.openTimer()
- console.log('order', this.order);
- },
- beforeDestroy() {
- this.closeTimer()
- },
- methods: {
- handleAcceptOrder(order) {
- console.log('立即接单', order);
- this.$emit('handleCardClick', order);
- },
- handleWillFollow(order) {
- console.log('待跟进', order);
- },
- handleBusy(order) {
- this.closeTimer()
- console.log('在忙', order);
- this.$emit('handleBuzyBtnClick', {
- ...order,
- });
- },
- handleTag(order) {
- console.log('打标签', order);
- },
- handleShare(order) {
- console.log('一键分享', order);
- },
- handleClick(order) {
- console.log('点击了订单', order);
- this.$emit('handleCardClick', order);
- },
- openTimer() {
- // 组件挂载时启动定时器
- console.log('组件挂载时启动定时器');
- this.busyTimer = setInterval(() => {
- this.buzyTime -= 1000;
- }, 1000);
- },
- closeTimer() {
- // 组件卸载时清理定时器,防止内存泄漏
- if (this.busyTimer) {
- clearInterval(this.busyTimer);
- this.busyTimer = null;
- }
- }
- }
- }
- </script>
- <style scoped>
- /* 样式部分无修改,保持原样 */
- .order-card {
- box-sizing: border-box;
- margin: 20rpx;
- padding: 16rpx;
- border-radius: 20rpx;
- background-color: #fff;
- box-shadow: 0 2px 12px rgba(0, 0, 0, 0.04);
- border: 1px solid #000;
- border-color: rgb(254 226 226 / var(--tw-border-opacity, 1));
- }
- .order-card-overTime {
- background-color: rgba(254, 242, 242, 1);
- }
- .order-card-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- }
- .order-card-header-left {
- display: flex;
- }
- .order-card-header-left>view {
- height: 30rpx;
- line-height: 30rpx;
- padding: 0 12rpx;
- border-radius: 10rpx;
- font-size: 20rpx;
- font-weight: 700;
- padding: 5rpx 12rpx;
- margin-right: 10rpx;
- }
- .order-card-header-left-band {
- --tw-text-opacity: 1;
- --tw-border-opacity: 1;
- --tw-bg-opacity: 1;
- color: #fff;
- background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));
- border: 1px solid #000;
- border-color: rgb(219 234 254 / var(--tw-border-opacity, 1));
- }
- .order-card-header-left-status {
- --tw-text-opacity: 1;
- --tw-bg-opacity: 1;
- color: rgb(255 107 107 / var(--tw-text-opacity, 1));
- background-color: rgb(255 241 241 / var(--tw-bg-opacity, 1));
- border: 1px solid #000;
- border-color: rgb(219 234 254 / var(--tw-border-opacity, 1));
- }
- .order-card-header-left-timeout {
- --tw-text-opacity: 1;
- --tw-bg-opacity: 1;
- color: rgb(255 107 107 / var(--tw-text-opacity, 1));
- background-color: rgb(255 241 241 / var(--tw-bg-opacity, 1));
- border: 1px solid #000;
- border-color: rgb(219 234 254 / var(--tw-border-opacity, 1));
- }
- .order-card-header-left-phone {
- --tw-text-opacity: 1;
- --tw-bg-opacity: 1;
- color: rgb(255 107 107 / var(--tw-text-opacity, 1));
- background-color: rgb(255 241 241 / var(--tw-bg-opacity, 1));
- border: 1px solid #000;
- border-color: rgb(219 234 254 / var(--tw-border-opacity, 1));
- }
- .order-card-header-right-price {
- font-weight: 800;
- font-size: 1.5rem;
- }
- .order-card-content {
- display: flex;
- align-items: center;
- margin-top: 20rpx;
- }
- .order-card-content image {
- width: 150rpx;
- height: 150rpx;
- margin-right: 20rpx;
- border-radius: 20rpx;
- }
- .order-card-content .order-card-content-right {
- flex: 1;
- font-size: 24rpx;
- display: flex;
- flex-direction: column;
- gap: 10rpx;
- font-size: 24rpx;
- font-weight: 700;
- }
- .order-card-content .order-card-content-right>view:nth-child(1) {
- font-size: 35rpx;
- margin-bottom: 10rpx;
- }
- .order-card-bottom {
- margin-top: 20rpx;
- }
- .order-card-bottom .u-button {
- height: 70rpx;
- border-radius: 20rpx;
- font-size: 24rpx;
- font-weight: 700;
- }
- </style>
|