diff --git a/api/ticket.ts b/api/ticket.ts index 272f886..9c28521 100644 --- a/api/ticket.ts +++ b/api/ticket.ts @@ -23,4 +23,7 @@ export const orderRecord = (data : any = {}) => get('v1/order/record', data); // 退单 -export const ticketRevert = (data : any = {}) => post('v1/ticket.revert', data); \ No newline at end of file +export const ticketRevert = (data : any = {}) => post('v1/ticket.revert', data); + +// 结单 +export const ticketFinish = (data : any = {}) => post('v1/ticket.finish', data); \ No newline at end of file diff --git a/pages/mine/index.vue b/pages/mine/index.vue index 7cbd049..f52a09d 100644 --- a/pages/mine/index.vue +++ b/pages/mine/index.vue @@ -41,8 +41,8 @@ 待处理工单 - - 查看更多 + % - 建立 + 业主专属顾问 {{codeInfo?.config?.shop_brokerage_mode==1?'邀请的业主每笔消费,您都可获得返佣':'邀请业主建立联系'}} + class="li-text-26 li-text-#0a4696 li-opacity-100">{{codeInfo?.config?.shop_brokerage_mode==1?'邀请的业主每笔消费,您都可获得返佣':'建立长期服务关系,共创双赢'}} @@ -62,8 +62,8 @@ - 永久绑定 - 与业主建立永久绑定关系 + 优先关系 + 建立专属业主服务通道 @@ -108,7 +108,7 @@ - 已绑定 + 已建立关系 @@ -134,15 +134,15 @@ 1 - 邀请业主加入平台并完成实名认证后,您将与业主建立永久绑定关系 + 邀请业主加入平台并完成实名认证后,您将成为业主的专属顾问 2 - 每当业主在商城消费时,您都可获得订单金额5%的返佣 + 作为专属顾问,您将获得更多与业主合作的机会 3 - 返佣将在订单完成后自动发放,可随时提现至银行卡 + 平台将不断完善业主顾问机制,为您创造更多价值 diff --git a/pagesA/my_order/detail.vue b/pagesA/my_order/detail.vue index e5406d6..59c0cad 100644 --- a/pagesA/my_order/detail.vue +++ b/pagesA/my_order/detail.vue @@ -6,11 +6,11 @@ safeAreaInsetTop fixed placeholder> @@ -92,7 +92,7 @@ - + {{product.product_name}} {{product.spec_name}} @@ -144,6 +144,44 @@ + + + + + 量房信息 + + + + + 量房位置 + {{ticketInfo?.order?.village_name}}{{ticketInfo?.order?.region_name}}{{ticketInfo?.order?.cell_name}}{{ticketInfo?.order?.house_name}}{{ticketInfo?.order?.address}} + + + 预约时间 + {{ticketInfo?.order?.appoint_date}} + {{ticketInfo?.order?.appoint_time}} + + + 量房备注 + {{ticketInfo?.order?.remark?ticketInfo?.order?.remark:'暂无备注'}} + + + 面积(平方) + {{ticketInfo?.order?.building_area}} + + + + 现场照片 + + + + + + + + @@ -159,36 +197,92 @@ {{item.remark}} + + - + + + + 结单信息 + + + + 结单照片 + + - - - - - 2025-03-13 15:42:36 - 工单已完成 - - --> + + 结单备注 + {{ticketInfo.remark}} + - + 退单 - 结单 + 结单 + + + + + + 完成工单 + + + + + + + 上传照片(选填) + + + + + + + + 添加照片 + + + + + + + 备注信息(选填) + + {{completeRemark.length}}/200 + + + + + + 确认完成 + + + + + + + @@ -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 + }) + } \ No newline at end of file diff --git a/pagesA/my_order/list.vue b/pagesA/my_order/list.vue index ff119a4..9ec89d5 100644 --- a/pagesA/my_order/list.vue +++ b/pagesA/my_order/list.vue @@ -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') } }) diff --git a/pagesA/task_hall/detail.vue b/pagesA/task_hall/detail.vue index 72d0032..a8d5a66 100644 --- a/pagesA/task_hall/detail.vue +++ b/pagesA/task_hall/detail.vue @@ -63,11 +63,17 @@ - - 上门地址 + + 上门地址 + 报修地址 {{ticketInfo?.order?.region_name}}{{ticketInfo?.order?.cell_name}}{{ticketInfo?.order?.house_name}}{{ticketInfo?.order?.address}} + 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}} + + + 商品备注 + {{ticketInfo?.order?.address}} @@ -90,7 +96,8 @@ - + 工单备注 {{ticketInfo?.order?.remark}} @@ -110,40 +117,53 @@ - - 附件上传 + 附件上传 - - - - + + - - 商品信息 - - 燕京 8度U8 500ML*12瓶/箱*2 送燕京9度菊花听500ML*12听 - - - - - + 商品信息 + + + - + + - + + + {{item.product_name}} + {{item.spec_name || ''}} + ×{{item.num}} + + + + + + + + 共 {{ticketInfo.product.length}} 件商品 @@ -352,6 +372,15 @@ const getOrderStatusText = (status : number) => { return orderStatusConfig[status]?.text || '未知状态' } + + // 预览商品图片 + const previewImage = (image) => { + if (!image) return + uni.previewImage({ + urls: [image], + current: image + }) + } \ No newline at end of file diff --git a/pagesA/task_hall/list.vue b/pagesA/task_hall/list.vue index 94c2633..abd727c 100644 --- a/pagesA/task_hall/list.vue +++ b/pagesA/task_hall/list.vue @@ -15,9 +15,9 @@ - - + {{item.ticket_no}} @@ -29,7 +29,7 @@ - + 预约时间 @@ -70,7 +70,7 @@ 元/可得佣金 -  详情  +  详情   接单  diff --git a/pagesB/call/index.vue b/pagesB/call/index.vue index 5c121b6..3934d65 100644 --- a/pagesB/call/index.vue +++ b/pagesB/call/index.vue @@ -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 || '暂无地址', diff --git a/unocss/a-hua-unocss/index.scss b/unocss/a-hua-unocss/index.scss index 36fa683..c51c38b 100644 --- a/unocss/a-hua-unocss/index.scss +++ b/unocss/a-hua-unocss/index.scss @@ -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)} -