工单优化(work)

This commit is contained in:
张文涛 2025-05-12 22:05:30 +08:00
parent 39c8732284
commit 67850a72d9
9 changed files with 594 additions and 189 deletions

View File

@ -23,4 +23,7 @@ export const orderRecord = (data : any = {}) => get('v1/order/record', data);
// 退单
export const ticketRevert = (data : any = {}) => post('v1/ticket.revert', data);
export const ticketRevert = (data : any = {}) => post('v1/ticket.revert', data);
// 结单
export const ticketFinish = (data : any = {}) => post('v1/ticket.finish', data);

View File

@ -41,8 +41,8 @@
<view class="li-w-94% li-mx-auto li-grid-bg li-h-250 li-rd-20 li-mt-26">
<view class="li-flex li-justify-between li-items-center li-pt-20 li-mx-20">
<text class="li-text-#19171B li-text-32">待处理工单</text>
<view @click="toPages({type:'all'})" class="li-text-#B2B2B2 li-flex li-items-center li-text-24">
查看更多<text class="ri-arrow-right-s-line"></text></view>
<!-- <view @click="toPages({type:'all'})" class="li-text-#B2B2B2 li-flex li-items-center li-text-24">
查看更多<text class="ri-arrow-right-s-line"></text></view> -->
</view>
<view class="li-flex li-justify-between li-items-center li-mx-40 li-mt-30">
<view class="li-flex li-flex-col li-justify-center li-items-center" v-for="(item,index) in workList"
@ -85,7 +85,7 @@
import { onShow, onReachBottom, Uni } from "@dcloudio/uni-app"
import { ref } from "vue"
import { useToast } from '@/uni_modules/wot-design-uni'
import { } from '@/api/login'
import { userInfo } from '@/api/login'
const Toast = useToast()
declare const uni : Uni

View File

@ -39,10 +39,10 @@
<text class="li-text-34 li-text-#0a4696 li-ml-10">%</text>
</view>
<view v-else class="li-flex li-items-baseline li-mb-15">
<text class="li-text-70 li-text-#0a4696 li-font-bold">建立</text>
<text class="li-text-50 li-text-#0a4696 li-font-bold">业主专属顾问</text>
</view>
<text
class="li-text-26 li-text-#0a4696 li-opacity-100">{{codeInfo?.config?.shop_brokerage_mode==1?'邀请的业主每笔消费,您都可获得返佣':'邀请业主建立联系'}}</text>
class="li-text-26 li-text-#0a4696 li-opacity-100">{{codeInfo?.config?.shop_brokerage_mode==1?'邀请的业主每笔消费,您都可获得返佣':'建立长期服务关系,共创双赢'}}</text>
</view>
<!-- 收益说明 -->
@ -62,8 +62,8 @@
<text class="ri-link-m li-text-36 li-text-#0070F0"></text>
</view>
<view class="li-ml-20">
<text class="li-text-30 li-text-#333">永久绑定</text>
<text class="li-text-26 li-text-#666 li-block li-mt-5">与业主建立永久绑定关系</text>
<text class="li-text-30 li-text-#333">优先关系</text>
<text class="li-text-26 li-text-#666 li-block li-mt-5">建立专属业主服务通道</text>
</view>
</view>
<view v-if="codeInfo?.config?.shop_brokerage_mode==1" class="benefit-item li-flex li-items-center">
@ -108,7 +108,7 @@
</view>
</view>
<view class="status-tag success">
绑定
建立关系
</view>
</view>
</view>
@ -134,15 +134,15 @@
<view class="rules-content li-p-30">
<view class="rule-item li-mb-15 li-flex li-items-center">
<text class="rule-icon li-mr-15">1</text>
<text class="li-text-28 li-text-#333">邀请业主加入平台并完成实名认证后您将与业主建立永久绑定关系</text>
<text class="li-text-28 li-text-#333">邀请业主加入平台并完成实名认证后您将成为业主的专属顾问</text>
</view>
<view class="rule-item li-mb-15 li-flex li-items-center">
<text class="rule-icon li-mr-15">2</text>
<text class="li-text-28 li-text-#333">每当业主在商城消费时您都可获得订单金额5%的返佣</text>
<text class="li-text-28 li-text-#333">作为专属顾问您将获得更多与业主合作的机会</text>
</view>
<view class="rule-item li-flex li-items-center">
<text class="rule-icon li-mr-15">3</text>
<text class="li-text-28 li-text-#333">返佣将在订单完成后自动发放可随时提现至银行卡</text>
<text class="li-text-28 li-text-#333">平台将不断完善业主顾问机制为您创造更多价值</text>
</view>
</view>
</view>

View File

@ -6,11 +6,11 @@
safeAreaInsetTop fixed placeholder>
<template #left>
<view class="navbar-content">
<text v-if="hasMultiplePages" class="ri-arrow-left-s-line back-icon"
<text v-if="hasMultiplePages" class="ri-arrow-left-s-line li-text-70"
@click="toPages({type:'nav'})"></text>
<text v-if="!hasMultiplePages" class="ri-home-5-line home-icon"
<text v-if="!hasMultiplePages" class="ri-home-5-line li-text-55 li-mr-6 li-mb-8"
@click="toPages({type:'home'})"></text>
<text class="page-title">工单详情</text>
<text class="li-text-42">工单详情</text>
</view>
</template>
</wd-navbar>
@ -92,7 +92,7 @@
<!-- 商品列表 -->
<view v-for="(product, index) in ticketInfo?.product" :key="index" class="product-card-full">
<view class="product-main">
<image class="product-image" :src="product.picture" mode="aspectFill"></image>
<image class="product-image" :src="product.picture" mode="aspectFill" @click="product.picture && previewImages(product.picture, [product.picture])"></image>
<view class="product-details">
<text class="product-name">{{product.product_name}}</text>
<text class="product-spec">{{product.spec_name}}</text>
@ -144,6 +144,44 @@
</view>
</view>
<!-- 量房信息 -->
<view v-if="ticketInfo?.type == 'F4'" class="info-card">
<view class="card-title">
<text class="ri-tools-line title-icon"></text>
<text>量房信息</text>
</view>
<view class="info-content">
<view class="info-item">
<text class="item-label">量房位置</text>
<text
class="item-value">{{ticketInfo?.order?.village_name}}{{ticketInfo?.order?.region_name}}{{ticketInfo?.order?.cell_name}}{{ticketInfo?.order?.house_name}}{{ticketInfo?.order?.address}}</text>
</view>
<view class="info-item">
<text class="item-label">预约时间</text>
<text class="item-value">{{ticketInfo?.order?.appoint_date}}
{{ticketInfo?.order?.appoint_time}}</text>
</view>
<view class="info-item">
<text class="item-label">量房备注</text>
<text class="item-value">{{ticketInfo?.order?.remark?ticketInfo?.order?.remark:'暂无备注'}}</text>
</view>
<view v-if='ticketInfo?.order?.building_area' class="info-item">
<text class="item-label">面积(平方)</text>
<text class="item-value">{{ticketInfo?.order?.building_area}}</text>
</view>
<view v-if="ticketInfo?.order?.images" class="info-item">
<text class="item-label">现场照片</text>
<view class="scene-images">
<image v-for="(item) in ticketInfo?.order?.images?.split(',')" :key="item" class="scene-image"
:src="item" mode="aspectFill">
</image>
</view>
</view>
</view>
</view>
<!-- 工单记录 -->
<view v-if="ticketInfo?.record?.length>0" class="info-card">
<view class="card-title">
@ -159,36 +197,92 @@
<view class="timeline-text">{{item.remark}}</view>
</view>
</view>
</view>
</view>
<!-- <view v-if="ticketInfo.status >= 1" class="timeline-item">
<view class="timeline-dot"></view>
<view class="timeline-content">
<view class="timeline-time">2025-03-13 11:25:18</view>
<view class="timeline-text">工单已接单</view>
<!-- 结单信息模块 -->
<view v-if="ticketInfo.images || ticketInfo.remark" class="info-card">
<view class="card-title">
<text class="ri-check-double-line title-icon"></text>
<text>结单信息</text>
</view>
<view class="info-content">
<view v-if="ticketInfo.images" class="info-item">
<text class="item-label">结单照片</text>
<view class="scene-images">
<image v-for="(img, idx) in ticketInfo.images.split(',')"
:key="img"
class="scene-image"
:src="img"
mode="aspectFill"
@click="previewImages(img, ticketInfo.images.split(','))"
/>
</view>
</view>
<view v-if="ticketInfo.status >= 2" class="timeline-item">
<view class="timeline-dot"></view>
<view class="timeline-content">
<view class="timeline-time">2025-03-13 15:42:36</view>
<view class="timeline-text">工单已完成</view>
</view>
</view> -->
<view v-if="ticketInfo.remark" class="info-item">
<text class="item-label">结单备注</text>
<text class="item-value">{{ticketInfo.remark}}</text>
</view>
</view>
</view>
<!-- 底部按钮 -->
<view class="footer-actions">
<view class="footer-actions" v-if="!showCompleteSheet && ticketInfo?.status!=2">
<view class="action-buttons">
<wd-button @click="revert" class="action-btn cancel-btn" type="error" :round="true">退单</wd-button>
<view class="li-ml-20">
<wd-button class="action-btn confirm-btn" :round="true">结单</wd-button>
<wd-button class="action-btn confirm-btn" :round="true"
@click="showCompleteSheet = true">结单</wd-button>
</view>
</view>
</view>
<wd-message-box />
<!-- 结单底部弹出框 -->
<wd-popup v-model="showCompleteSheet" position="bottom" custom-class="complete-sheet">
<view class="complete-sheet-content">
<view class="sheet-header">
<text class="sheet-title">完成工单</text>
<text class="ri-close-line close-icon" @click="showCompleteSheet = false"></text>
</view>
<view class="sheet-body">
<!-- 照片上传区域 -->
<view class="upload-section">
<text class="section-title">上传照片选填</text>
<view class="upload-list">
<view v-for="(item, index) in uploadImages" :key="index" class="upload-item">
<image :src="item" mode="aspectFill" class="preview-image" @click="previewImages(item, uploadImages)" />
<text class="ri-close-circle-fill delete-icon" @click="deleteImage(index)"></text>
</view>
<view v-if="uploadImages.length < 9" class="upload-btn" @click="chooseImage">
<text class="ri-add-line add-icon"></text>
<text class="upload-text">添加照片</text>
</view>
</view>
</view>
<!-- 备注输入区域 -->
<view class="remark-section">
<text class="section-title">备注信息选填</text>
<textarea v-model="completeRemark" class="remark-input" placeholder="请输入备注信息"
maxlength="200"></textarea>
<text class="word-count">{{completeRemark.length}}/200</text>
</view>
</view>
<!-- 底部按钮 -->
<view class="sheet-footer">
<wd-button type="primary" block @click="handleComplete">确认完成</wd-button>
</view>
</view>
</wd-popup>
<!-- 上传图片ActionSheet -->
<wd-action-sheet v-model="showImageActionSheet" :actions="imageActions" @select="handleImageAction"
cancel-text="取消" />
<wd-toast />
</view>
</template>
@ -196,8 +290,10 @@
import { ref, computed } from 'vue'
import { onLoad, onShow } from '@dcloudio/uni-app'
import { useNavigation } from '@/hooks/useNavigation'
import { myTicketInfo, ticketRevert } from '@/api/ticket'
import { myTicketInfo, ticketRevert, ticketFinish } from '@/api/ticket'
import { useToast, useMessage } from '@/uni_modules/wot-design-uni'
import { fileUpload } from '@/utils/common'
const Toast = useToast()
const Message = useMessage()
@ -317,6 +413,100 @@
phoneNumber: value
})
}
//
const showCompleteSheet = ref(false)
const uploadImages = ref([])
const completeRemark = ref('')
//
const showImageActionSheet = ref(false)
const imageActions = [
{ name: '从相册选择' },
{ name: '拍照' }
]
//
const chooseImage = () => {
showImageActionSheet.value = true
}
//
const handleImageAction = (action) => {
if (action.index === 0) {
handleSelectAlbum()
} else if (action.index === 1) {
handleTakePhoto()
}
}
//
const handleSelectAlbum = () => {
uni.chooseImage({
count: 9 - uploadImages.value.length,
sizeType: ['compressed'],
sourceType: ['album'],
success: async (res) => {
showImageActionSheet.value = false
const tempFilePath = res.tempFilePaths[0]
const fileUrl = await fileUpload(tempFilePath)
uploadImages.value.push(fileUrl)
Toast.success('上传成功')
}
})
}
//
const handleTakePhoto = () => {
uni.chooseImage({
count: 1,
sizeType: ['compressed'],
sourceType: ['camera'],
success: async (res) => {
showImageActionSheet.value = false
const tempFilePath = res.tempFilePaths[0]
const fileUrl = await fileUpload(tempFilePath)
uploadImages.value.push(fileUrl)
Toast.success('上传成功')
}
})
}
//
const deleteImage = (index) => {
uploadImages.value.splice(index, 1)
}
//
const handleComplete = async () => {
try {
uni.showLoading({ title: '提交中...' })
const res = await ticketFinish({
ticket_id: ticketInfo.value.ticket_id,
images: uploadImages.value.join(','),
remark: completeRemark.value
})
uni.hideLoading()
if (res.code == 200) {
Toast.success('工单已完成')
showCompleteSheet.value = false
setTimeout(() => {
uni.navigateBack()
}, 1500)
}
} catch (error) {
uni.hideLoading()
uni.showToast({ title: '操作失败', icon: 'error' })
}
}
//
const previewImages = (current, images) => {
uni.previewImage({
current,
urls: images
})
}
</script>
<style lang="scss" scoped>
@ -339,13 +529,13 @@
.back-icon,
.home-icon {
font-size: 60rpx;
font-size: 70rpx;
color: #333;
margin-right: 10rpx;
}
.page-title {
font-size: 36rpx;
font-size: 42rpx;
font-weight: 500;
color: #333;
}
@ -566,26 +756,28 @@
background-color: #f9f9f9;
border-radius: 12rpx;
margin-bottom: 15rpx;
padding: 10rpx 0;
// border:solid 1px red;
padding: 16rpx 0;
.product-card-full {
width: 95%;
margin: 20rpx auto;
width: 92%;
margin: 16rpx auto;
padding-bottom: 16rpx;
border-bottom: 1px solid #f0f0f0;
&:last-child {
margin-bottom: 0;
border-bottom: none;
}
.product-main {
display: flex;
align-items: center;
align-items: flex-start;
width: 100%;
.product-image {
width: 120rpx;
height: 120rpx;
border-radius: 8rpx;
width: 140rpx;
height: 140rpx;
border-radius: 10rpx;
border: 1px solid rgba(0, 0, 0, 0.05);
background-color: #fff;
}
@ -593,6 +785,10 @@
.product-details {
flex: 1;
padding-left: 20rpx;
display: flex;
flex-direction: column;
justify-content: space-between;
min-height: 140rpx;
.product-name {
font-size: 28rpx;
@ -614,7 +810,7 @@
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 15rpx;
margin-top: auto;
.price {
font-size: 30rpx;
@ -635,12 +831,10 @@
display: flex;
justify-content: space-between;
align-items: center;
width: 95%;
margin: 20rpx auto 10rpx;
// border-top: 1px solid #f0f0f0;
width: 92%;
margin: 16rpx auto 8rpx;
border-top: solid 1px #f0f0f0;
// padding: 10rpx 0;
padding-top: 10rpx;
padding-top: 16rpx;
.summary-count {
font-size: 26rpx;
@ -769,4 +963,137 @@
align-items: center;
justify-content: space-between;
}
.complete-sheet {
border-radius: 24rpx 24rpx 0 0;
.complete-sheet-content {
width: 90%;
margin: 30rpx auto 10rpx;
padding-bottom: calc(30rpx + constant(safe-area-inset-bottom));
padding-bottom: calc(30rpx + env(safe-area-inset-bottom));
}
.sheet-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 30rpx;
.sheet-title {
font-size: 32rpx;
font-weight: bold;
color: #333;
}
.close-icon {
font-size: 40rpx;
color: #999;
padding: 10rpx;
}
}
.sheet-body {
.section-title {
font-size: 28rpx;
color: #666;
margin-bottom: 20rpx;
display: block;
}
.upload-section {
margin-bottom: 30rpx;
.upload-list {
display: flex;
flex-wrap: wrap;
margin: 0 -8rpx;
}
.upload-item {
width: 160rpx;
height: 160rpx;
margin: 8rpx;
position: relative;
.preview-image {
width: 100%;
height: 100%;
border-radius: 10rpx;
}
.delete-icon {
position: absolute;
top: -10rpx;
right: -10rpx;
font-size: 32rpx;
color: #ff4d4f;
background: #fff;
border-radius: 50%;
}
}
.upload-btn {
width: 160rpx;
height: 160rpx;
margin: 8rpx;
background: #f7f8fa;
border: 2rpx dashed #ddd;
border-radius: 10rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
.add-icon {
font-size: 40rpx;
color: #999;
margin-bottom: 6rpx;
}
.upload-text {
font-size: 22rpx;
color: #999;
}
}
}
.remark-section {
position: relative;
.remark-input {
width: 100%;
min-height: 120rpx;
max-height: 260rpx;
background: #f7f8fa;
border-radius: 12rpx;
padding: 24rpx;
font-size: 28rpx;
color: #333;
border: 2rpx solid #f0f0f0;
box-sizing: border-box;
resize: none;
transition: border-color 0.2s;
}
.remark-input:focus {
border-color: #5eafff;
background: #fff;
outline: none;
}
.word-count {
position: absolute;
right: 20rpx;
bottom: 20rpx;
font-size: 24rpx;
color: #999;
}
}
}
.sheet-footer {
margin-top: 40rpx;
}
}
</style>

View File

@ -125,7 +125,7 @@
page: 1,
limit: 10,
type: 'ALL',
status: 'ALL',
status: 1,
ticket_no: ''
})
@ -186,10 +186,10 @@
const orderStatusList = ref([
{
title: '全部',
id: 'ALL'
},
// {
// title: '',
// id: 'ALL'
// },
{
title: '待完成',
id: 1
@ -297,7 +297,7 @@
query.value.status = Number(options.status)
} else {
activeTab.value = 0
query.value.status = 'ALL'
query.value.status = 1
// handleStatusChange('ALL')
}
})

View File

@ -63,11 +63,17 @@
</view>
</view>
</view>
<view v-if="ticketInfo?.type =='F4'"
class="li-flex li-items-start li-justify-between li-mt-30 li-text-28">
<text class="li-w-150 li-text-#9a9a9a">上门地址</text>
<view class="li-flex li-items-start li-justify-between li-mt-30 li-text-28">
<text v-if="ticketInfo?.type =='F4' || ticketInfo?.type =='F2'"
class="li-w-150 li-text-#9a9a9a">上门地址</text>
<text v-if="ticketInfo?.type =='F6'" class="li-w-150 li-text-#9a9a9a">报修地址</text>
<text
class="li-w-400 li-two-line li-text-right">{{ticketInfo?.order?.region_name}}{{ticketInfo?.order?.cell_name}}{{ticketInfo?.order?.house_name}}{{ticketInfo?.order?.address}}</text>
class="li-w-400 li-two-line li-text-right">{{ticketInfo?.order?.village_name}}{{ticketInfo?.order?.region_name}}{{ticketInfo?.order?.cell_name}}{{ticketInfo?.order?.house_name}}</text>
</view>
<view v-if="ticketInfo?.type =='F2'"
class="li-flex li-items-start li-justify-between li-mt-30 li-text-28">
<text class="li-w-150 li-text-#9a9a9a">商品备注</text>
<text class="li-w-400 li-two-line li-text-right">{{ticketInfo?.order?.address}}</text>
</view>
<view v-if="ticketInfo?.type =='F4'"
class="li-flex li-items-start li-justify-between li-mt-30 li-text-28">
@ -90,7 +96,8 @@
</view>
</view>
<view v-if="ticketInfo?.order?.remark" class="li-flex li-items-start li-justify-between li-mt-30 li-text-28">
<view v-if="ticketInfo?.order?.remark"
class="li-flex li-items-start li-justify-between li-mt-30 li-text-28">
<text class="li-w-150 li-text-#9a9a9a">工单备注</text>
<text class="li-w-400 li-two-line li-text-right">{{ticketInfo?.order?.remark}}</text>
</view>
@ -110,40 +117,53 @@
</view>
</view>
<view v-if="(ticketInfo?.type =='F4' || ticketInfo?.type =='F6') && ticketInfo.images"
<view v-if="(ticketInfo?.type =='F4' || ticketInfo?.type =='F6') && ticketInfo.order.images"
class="li-flex li-items-start li-justify-between li-mt-30 li-text-28">
<text class="li-w-150 li-text-#9a9a9a">附件上传</text>
<text class="li-w-150 li-text-#9a9a9a">附件上传</text>
<view class="li-flex li-flex-col li-w-400 justify-end">
<view class="li-flex justify-between li-items-center li-mt-20">
<!-- 左侧留空 -->
<view></view>
<!-- 右侧内容 -->
<view class="li-flex li-items-center">
<image class="li-w-110 li-h-110 li-rd-10" src="../../static/logo.png" mode="">
</image>
<image class="li-w-110 li-h-110 li-rd-10 li-ml-20" src="../../static/logo.png" mode="">
<view class="li-flex li-items-center li-flex-wrap">
<image
v-for="(item, index) in ticketInfo.order.images.split(',')"
:key="index"
class="li-w-110 li-h-110 li-rd-10 li-mr-10 li-mb-10"
:src="item"
mode="aspectFill"
@click="previewImage(item)">
</image>
</view>
</view>
</view>
</view>
<view v-if="ticketInfo?.type =='F2'"
<view v-if="ticketInfo?.type =='F2' && ticketInfo?.product?.length>0"
class="li-flex li-items-start li-justify-between li-mt-30 li-text-28">
<text class="li-w-150 li-text-#9a9a9a">商品信息</text>
<view class="li-flex li-flex-col li-w-400 justify-end">
<text class="li-two-line li-text-right">燕京 8度U8 500ML*12/*2 送燕京9度菊花听500ML*12</text>
<!-- <text class="li-text-#009aff li-text-right">x2</text> -->
<view class="li-flex justify-between li-items-center li-mt-20">
<!-- 左侧留空 -->
<view></view>
<!-- 右侧内容 -->
<text class="li-w-150 li-text-#9a9a9a">商品信息</text>
<view class="li-w-400 li-flex li-flex-col">
<!-- 商品列表 -->
<view v-for="(item, index) in ticketInfo.product" :key="index" class="li-product-item li-mb-20">
<view class="li-flex li-items-center">
<image class="li-w-110 li-h-110 li-rd-10" src="../../static/swiper/1.png" mode="">
<!-- 商品图片 -->
<image class="li-product-image" :src="item.picture" mode="aspectFill"
@click="previewImage(item.picture)">
</image>
<image class="li-w-110 li-h-110 li-rd-10 li-ml-20" src="../../static/swiper/1.png"
mode=""></image>
<!-- 商品信息 -->
<view class="li-product-info">
<text class="li-product-name">{{item.product_name}}</text>
<text class="li-product-spec">{{item.spec_name || ''}}</text>
<view class="li-qty">×{{item.num}}</view>
</view>
</view>
<!-- 分隔线 -->
<view v-if="index < ticketInfo.product.length - 1" class="li-divider"></view>
</view>
<!-- 商品总计 -->
<view v-if="ticketInfo.product.length > 1" class="li-product-count">
{{ticketInfo.product.length}} 件商品
</view>
</view>
</view>
@ -352,6 +372,15 @@
const getOrderStatusText = (status : number) => {
return orderStatusConfig[status]?.text || '未知状态'
}
//
const previewImage = (image) => {
if (!image) return
uni.previewImage({
urls: [image],
current: image
})
}
</script>
<style lang="scss">
@ -473,4 +502,65 @@
align-items: center !important;
justify-content: center !important;
}
//
.li-product-item {
position: relative;
padding-bottom: 15rpx;
.li-product-image {
width: 120rpx;
height: 120rpx;
flex-shrink: 0;
border-radius: 10rpx;
background-color: #f9f9f9;
border: 1px solid #f5f5f5;
}
.li-product-info {
flex: 1;
margin-left: 20rpx;
overflow: hidden;
padding-right: 10rpx;
}
.li-product-name {
font-size: 28rpx;
color: #333;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
}
.li-product-spec {
font-size: 24rpx;
color: #999;
margin-top: 8rpx;
display: block;
}
.li-qty {
font-size: 26rpx;
color: #666;
margin-top: 10rpx;
}
.li-divider {
height: 1px;
background-color: #f5f5f5;
margin-top: 15rpx;
width: 100%;
}
}
.li-product-count {
font-size: 26rpx;
color: #999;
text-align: right;
margin-top: 10rpx;
padding-top: 15rpx;
border-top: 1px solid #f0f0f0;
}
</style>

View File

@ -15,9 +15,9 @@
</view>
<!-- list -->
<view class="li-w-92% li-mx-auto li-pb-30">
<view v-for="(item, index) in taskList" :key="index" @click="toPages({type:'detail',value:item})"
<view v-for="(item, index) in taskList" :key="index"
class="li-task-card li-bg-white li-mt-20 li-rd-15 li-pt-25 li-pb-30 li-px-30">
<view class="li-flex li-items-center li-justify-between li-bottom-border2 li-pb-15">
<view @click.stop="toPages({type:'detail',value:item})" class="li-flex li-items-center li-justify-between li-bottom-border2 li-pb-15">
<view class="li-text-28 li-flex li-items-center">
<text class="ri-file-list-line li-mr-10 li-text-#009aff"></text>
<text>{{item.ticket_no}}</text>
@ -29,7 +29,7 @@
</view>
</view>
</view>
<view>
<view @click.stop="toPages({type:'detail',value:item})">
<view v-if="item.type == 'F4'"
class="li-flex li-items-center li-justify-between li-text-26 li-mt-20">
<text class="li-text-#9a9a9a">预约时间</text>
@ -70,7 +70,7 @@
<text class="li-text-24 li-text-#333333 li-pt-4">/可得佣金</text>
</view>
<view class="li-flex li-items-center">
<wd-button custom-class="custom-shadow" size="small">&emsp;详情&emsp;</wd-button>
<wd-button @click.stop="toPages({type:'detail',value:item})" custom-class="custom-shadow" size="small">&emsp;详情&emsp;</wd-button>
<wd-button @click.stop="sumbit(item.ticket_id)" custom-class="custom-shadow1"
size="small">&emsp;接单&emsp;</wd-button>
</view>

View File

@ -254,7 +254,7 @@
//
const activeCommunity = computed(() => {
return {
id: '1',
id: '1',
name: village.value.village_name || '暂无数据',
address: `${village.value.province_name || ''}-${village.value.city_name || ''}-${village.value.area_name || ''}`,
managementAddress: village.value.address || '暂无地址',

View File

@ -1,68 +1,85 @@
.li-items-center{align-items:center}
.items-center{align-items:center}
.li-justify-center{justify-content:center}
.justify-end{justify-content:end}
.justify-center{justify-content:center}
.li-justify-between{justify-content:space-between}
.justify-between{justify-content:space-between}
.li-bg-white{background-color:rgb(255,255,255)}
.li-flex{display:flex}
.li-flex-center{display:flex;align-items:center;justify-content:center}
.li-h-100{height:100rpx}
.li-items-center{align-items:center}
.li-justify-between{justify-content:space-between}
.li-ml-20{margin-left:20rpx}
.li-ml-200{margin-left:200rpx}
.li-ml-25{margin-left:25rpx}
.li-ml-30{margin-left:30rpx}
.li-mr-10{margin-right:10rpx}
.li-mr-30{margin-right:30rpx}
.li-mt-10{margin-top:10rpx}
.li-mt-20{margin-top:20rpx}
.li-mt-300-important{margin-top:300rpx !important}
.li-pt-2{padding-top:2rpx}
.li-px-30{padding-left:30rpx;padding-right:30rpx}
.li-py-20{padding-top:20rpx;padding-bottom:20rpx}
.li-rd-full-50{border-radius:50%}
.li-text-25{font-size:25rpx}
.li-text-26{font-size:26rpx}
.li-text-30{font-size:30rpx}
.li-text-35{font-size:35rpx}
.li-text-38{font-size:38rpx}
.li-text-42{font-size:42rpx}
.li-text-46{font-size:46rpx}
.li-text-B1B0B0-color{color:rgb(177,176,176)}
.li-w-100{width:100rpx}
.li-w-full-80{width:80%}
.items-center{align-items:center}
.justify-end{justify-content:end}
.li-justify-center{justify-content:center}
.justify-center{justify-content:center}
.justify-between{justify-content:space-between}
.li-flex-col{flex-direction:column}
.li-h-130{height:130rpx}
.li-h-160{height:160rpx}
.li-h-58{height:58rpx}
.li-justify-around{justify-content:space-around}
.li-ml-22{margin-left:22rpx}
.li-ml-25{margin-left:25rpx}
.li-ml-35{margin-left:35rpx}
.li-mt-10{margin-top:10rpx}
.li-mt-12{margin-top:12rpx}
.li-mt-14{margin-top:14rpx}
.li-mt-15{margin-top:15rpx}
.li-mt-20{margin-top:20rpx}
.li-mt-30{margin-top:30rpx}
.li-mx-auto{margin-left:auto;margin-right:auto}
.li-px-25{padding-left:25rpx;padding-right:25rpx}
.li-px-30{padding-left:30rpx;padding-right:30rpx}
.li-px-40{padding-left:40rpx;padding-right:40rpx}
.li-py-25{padding-top:25rpx;padding-bottom:25rpx}
.li-rd-10{border-radius:10rpx}
.li-rd-15{border-radius:15rpx}
.li-text-010B3E-color{color:rgb(1,11,62)}
.li-text-22{font-size:22rpx}
.li-text-26{font-size:26rpx}
.li-text-28{font-size:28rpx}
.li-text-30{font-size:30rpx}
.li-text-343333-color{color:rgb(52,51,51)}
.li-text-AFB2B8-color{color:rgb(175,178,184)}
.li-text-B1B0B0-color{color:rgb(177,176,176)}
.li-w-130{width:130rpx}
.li-w-310{width:310rpx}
.li-w-58{width:58rpx}
.li-w-full-70{width:70%}
.li-w-full-88{width:88%}
.li-font-550{font-weight:550}
.li-h-68{height:68rpx}
.li-mt-100{margin-top:100rpx}
.li-mt-28{margin-top:28rpx}
.li-mt-32{margin-top:32rpx}
.li-mt-90{margin-top:90rpx}
.li-mx-10{margin-left:10rpx;margin-right:10rpx}
.li-pt-270{padding-top:270rpx}
.li-rd-40{border-radius:40rpx}
.li-text-000000-color{color:rgb(0,0,0)}
.li-text-24{font-size:24rpx}
.li-text-2EA1EA-color{color:rgb(46,161,234)}
.li-text-38{font-size:38rpx}
.li-text-a5a5a5-color{color:rgb(165,165,165)}
.li-w-150{width:150rpx}
.li-w-420{width:420rpx}
.li-w-full-80{width:80%}
.li-w-full-85{width:85%}
.li-w-full-90{width:90%}
.li-flex-center{display:flex;align-items:center;justify-content:center}
.li-h-100{height:100rpx}
.li-ml-20{margin-left:20rpx}
.li-ml-200{margin-left:200rpx}
.li-ml-30{margin-left:30rpx}
.li-mr-10{margin-right:10rpx}
.li-mr-30{margin-right:30rpx}
.li-mt-300-important{margin-top:300rpx !important}
.li-pt-2{padding-top:2rpx}
.li-py-20{padding-top:20rpx;padding-bottom:20rpx}
.li-rd-full-50{border-radius:50%}
.li-text-25{font-size:25rpx}
.li-text-35{font-size:35rpx}
.li-text-42{font-size:42rpx}
.li-text-46{font-size:46rpx}
.li-w-100{width:100rpx}
.bg-0070F0{background-color:rgb(0,112,240)}
.border-4-white{border-style:solid;border-color:rgb(255,255,255);border-width:4rpx}
.bg-FFFFFF{background-color:rgb(255,255,255)}
.border-4-white{border-style:solid;border-color:rgb(255,255,255);border-width:4rpx}
.bg-f9f9f9{background-color:rgb(249,249,249)}
.li-font-bold{font-weight:bold}
.li-mb-8{margin-bottom:8rpx}
@ -75,7 +92,6 @@
.li-pt-25{padding-top:25rpx}
.li-pt-4{padding-top:4rpx}
.li-text-009aff-color{color:rgb(0,154,255)}
.li-text-24{font-size:24rpx}
.li-text-32{font-size:32rpx}
.li-text-333333-color{color:rgb(51,51,51)}
.li-text-36{font-size:36rpx}
@ -85,33 +101,6 @@
.li-text-ff0000-color{color:rgb(255,0,0)}
.li-w-full-100{width:100%}
.li-w-full-92{width:92%}
.li-h-110{height:110rpx}
.li-items-start{align-items:start}
.li-mb-12{margin-bottom:12rpx}
.li-mb-20{margin-bottom:20rpx}
.li-mr-12{margin-right:12rpx}
.li-mr-3{margin-right:3rpx}
.li-mt-40{margin-top:40rpx}
.li-mt-90{margin-top:90rpx}
.li-pb-25{padding-bottom:25rpx}
.li-pl-20{padding-left:20rpx}
.li-pl-30{padding-left:30rpx}
.li-pr-30{padding-right:30rpx}
.li-pt-20{padding-top:20rpx}
.li-pt-30{padding-top:30rpx}
.li-py-6{padding-top:6rpx;padding-bottom:6rpx}
.li-rd-20{border-radius:20rpx}
.li-text-40{font-size:40rpx}
.li-text-5f5f5f-color{color:rgb(95,95,95)}
.li-text-666-color{color:rgb(102,102,102)}
.li-text-right{text-align:right}
.li-w-110{width:110rpx}
.li-w-150{width:150rpx}
.li-w-400{width:400rpx}
.li-w-full-85{width:85%}
.overflow-hidden{overflow:hidden}
.li-mb-25{margin-bottom:25rpx}
.li-w-full-90{width:90%}
.li-h-240{height:240rpx}
.li-h-250{height:250rpx}
.li-h-50{height:50rpx}
@ -130,14 +119,14 @@
.li-pb-10{padding-bottom:10rpx}
.li-pb-14{padding-bottom:14rpx}
.li-pb-20{padding-bottom:20rpx}
.li-pt-20{padding-top:20rpx}
.li-pt-8{padding-top:8rpx}
.li-rd-20{border-radius:20rpx}
.li-rd-tl-30-important{border-top-left-radius:30rpx !important}
.li-rd-tr-30-important{border-top-right-radius:30rpx !important}
.li-text-000000-color{color:rgb(0,0,0)}
.li-text-19171B-color{color:rgb(25,23,27)}
.li-text-20{font-size:20rpx}
.li-text-706e70-color{color:rgb(112,110,112)}
.li-text-B2B2B2-color{color:rgb(178,178,178)}
.li-text-BBBDDA-color{color:rgb(187,189,218)}
.li-text-F2F7FD-color{color:rgb(242,247,253)}
.li-text-F8C883-color{color:rgb(248,200,131)}
@ -147,51 +136,61 @@
.li-w-50{width:50rpx}
.li-w-60{width:60rpx}
.li-w-full-94{width:94%}
.li-font-550{font-weight:550}
.li-h-68{height:68rpx}
.li-mt-100{margin-top:100rpx}
.li-mt-28{margin-top:28rpx}
.li-mt-32{margin-top:32rpx}
.li-mx-10{margin-left:10rpx;margin-right:10rpx}
.li-pt-270{padding-top:270rpx}
.li-rd-40{border-radius:40rpx}
.li-text-2EA1EA-color{color:rgb(46,161,234)}
.li-text-a5a5a5-color{color:rgb(165,165,165)}
.li-w-420{width:420rpx}
.li-font-400{font-weight:400}
.li-m-30{margin:30rpx}
.li-text-595959-color{color:rgb(89,89,89)}
.li-mr-200{margin-right:200rpx}
.li-mr-4{margin-right:4rpx}
.li-text-48{font-size:48rpx}
.li-mb-30{margin-bottom:30rpx}
.li-ml-10{margin-left:10rpx}
.li-mt-100-important{margin-top:100rpx !important}
.li-mt-4{margin-top:4rpx}
.li-mt-50{margin-top:50rpx}
.li-mt-8{margin-top:8rpx}
.li-py-40{padding-top:40rpx;padding-bottom:40rpx}
.li-text-0070F0-color{color:rgb(0,112,240)}
.li-text-333-color{color:rgb(51,51,51)}
.li-text-34{font-size:34rpx}
.li-text-44{font-size:44rpx}
.li-text-90{font-size:90rpx}
.li-text-999-color{color:rgb(153,153,153)}
.li-text-center{text-align:center}
.li-text-white{color:rgb(255,255,255)}
.li-w-500{width:500rpx}
.li-border-b{border-style:solid;border-color:b;border-width:1rpx}
.li-text-666-color{color:rgb(102,102,102)}
.li-mb-25{margin-bottom:25rpx}
.li-flex-wrap{flex-wrap:wrap}
.li-h-110{height:110rpx}
.li-items-start{align-items:start}
.li-mb-10{margin-bottom:10rpx}
.li-mb-12{margin-bottom:12rpx}
.li-mb-20{margin-bottom:20rpx}
.li-mr-12{margin-right:12rpx}
.li-mr-3{margin-right:3rpx}
.li-mt-40{margin-top:40rpx}
.li-pb-25{padding-bottom:25rpx}
.li-pl-20{padding-left:20rpx}
.li-pl-30{padding-left:30rpx}
.li-pr-30{padding-right:30rpx}
.li-pt-30{padding-top:30rpx}
.li-py-6{padding-top:6rpx;padding-bottom:6rpx}
.li-text-40{font-size:40rpx}
.li-text-5f5f5f-color{color:rgb(95,95,95)}
.li-text-right{text-align:right}
.li-w-110{width:110rpx}
.li-w-400{width:400rpx}
.overflow-hidden{overflow:hidden}
.li-border-b{border-style:solid;border-color:b;border-width:1rpx}
.li-mb-15{margin-bottom:15rpx}
.li-mb-30{margin-bottom:30rpx}
.li-my-20{margin-top:20rpx;margin-bottom:20rpx}
.li-p-30{padding:30rpx}
.li-py-30{padding-top:30rpx;padding-bottom:30rpx}
.li-text-0070F0-color{color:rgb(0,112,240)}
.li-text-333-color{color:rgb(51,51,51)}
.li-text-ff6b35-color{color:rgb(255,107,53)}
.li-mt-100-important{margin-top:100rpx !important}
.li-mt-8{margin-top:8rpx}
.li-text-999-color{color:rgb(153,153,153)}
.li-ml-10{margin-left:10rpx}
.li-mt-4{margin-top:4rpx}
.li-mt-50{margin-top:50rpx}
.li-py-40{padding-top:40rpx;padding-bottom:40rpx}
.li-text-34{font-size:34rpx}
.li-text-44{font-size:44rpx}
.li-text-90{font-size:90rpx}
.li-text-center{text-align:center}
.li-text-white{color:rgb(255,255,255)}
.li-w-500{width:500rpx}
.li-h-90{height:90rpx}
.li-text-47{font-size:47rpx}
.li-w-90{width:90rpx}
.li-flex-1{flex:1}
.li-flex-wrap{flex-wrap:wrap}
.li-mt-25{margin-top:25rpx}
.li-mt-5{margin-top:5rpx}
.li-text-999999-color{color:rgb(153,153,153)}
@ -203,6 +202,7 @@
.li-rd-12{border-radius:12rpx}
.li-rd-16{border-radius:16rpx}
.li-text-0a4696-color{color:rgb(10,70,150)}
.li-text-50{font-size:50rpx}
.li-line-clamp-2{overflow:hidden;display:-webkit-box;line-clamp:2;-webkit-box-orient:vertical;-webkit-line-clamp:2}
.li-w-full-96{width:96%}
.li-mt-200{margin-top:200rpx}
@ -218,14 +218,12 @@
.li-text-ff9900-color{color:rgb(255,153,0)}
.li-flex-row-reverse{flex-direction:row-reverse}
.li-opacity-80{undefined:0.8}
.li-pb-40{padding-bottom:40rpx}
.li-py-100{padding-top:100rpx;padding-bottom:100rpx}
.li-text-100{font-size:100rpx}
.li-text-3e9bff-color{color:rgb(62,155,255)}
.li-text-50{font-size:50rpx}
.li-text-52c41a-color{color:rgb(82,196,26)}
.li-text-ff4d4f-color{color:rgb(255,77,79)}
@ -241,16 +239,3 @@
.li-block{display:block}
.li-border-b{border-style:solid;border-color:b;border-width:1rpx}
.li-items-baseline{align-items:baseline}
.li-mb-15{margin-bottom:15rpx}
.li-mr-15{margin-right:15rpx}
.li-mt-5{margin-top:5rpx}
.li-opacity-100{undefined:1}
.li-p-15{padding:15rpx}
.li-p-30{padding:30rpx}
.li-rd-12{border-radius:12rpx}
.li-rd-16{border-radius:16rpx}
.li-text-0a4696-color{color:rgb(10,70,150)}