From 89380e6260a75d1d3b94de687ebcc2f50d50659d Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Tue, 03 Feb 2026 15:44:33 +0800
Subject: [PATCH] feat:环境变量配置调整
---
uniapps/work-app/src/subPackages/workDetail/index.vue | 577 +++++++++++++++++++++++++++++++++++----------------------
1 files changed, 354 insertions(+), 223 deletions(-)
diff --git a/uniapps/work-app/src/subPackages/workDetail/index.vue b/uniapps/work-app/src/subPackages/workDetail/index.vue
index b10d337..1a5768b 100644
--- a/uniapps/work-app/src/subPackages/workDetail/index.vue
+++ b/uniapps/work-app/src/subPackages/workDetail/index.vue
@@ -1,41 +1,29 @@
<!-- 工单详情 -->
<template>
- <div class="workDetailContainer">
- <!-- 自定义导航栏 -->
- <u-navbar
- title="工单详情"
- :is-back="true"
- back-text=""
- :back-icon-size="40"
- @left-click="onBackClick"
- >
- <template #right>
- <div class="share-btn" @click="onShareClick">分享</div>
- </template>
- </u-navbar>
- <div class="detailTop">
- <div class="image-container">
- <u-swiper
- class="detailImage"
- :list="getImageList"
- mode="round"
- indicator
- indicatorMode="dot"
- indicatorActiveColor="#4C85FF"
- indicatorInactiveColor="#fff"
- indicatorPosition="center"
- height="410rpx"
- @click="previewImage"
- ></u-swiper>
- <!-- <div class="detailTitle">-->
- <!-- <div class="titleText">-->
- <!-- <div class="itemName">{{workDetailData.event_name}}</div>-->
- <!-- <div class="itemTime">{{formatDate(workDetailData.create_time)}}</div>-->
- <!-- </div>-->
- <!-- </div>-->
- </div>
- </div>
-
+ <div class="workDetailContainer">
+ <!-- 自定义导航栏 -->
+ <u-navbar title="工单详情" :is-back="true" back-text="" :back-icon-size="40" @left-click="onBackClick">
+ <template #right>
+ <div v-if="isH5" class="tapShare-icon"><img src="/static/images/work/share.svg" @click="onShareClick"/></div>
+ <div v-else class="share-btn" @click="onShareClick"></div>
+ </template>
+ </u-navbar>
+ <div class="detailTop">
+ <div class="image-container">
+ <u-swiper
+ class="detailImage"
+ :list="getImageList"
+ mode="round"
+ indicator
+ indicatorMode="dot"
+ indicatorActiveColor="#4C85FF"
+ indicatorInactiveColor="#fff"
+ indicatorPosition="center"
+ height="410rpx"
+ @click="previewImage"
+ ></u-swiper>
+ </div>
+ </div>
<!-- 工单内容 -->
<div class="worderContainer">
<div class="workOrderContent">
@@ -43,45 +31,71 @@
<div class="workOrderContainer">
<div class="orderRow">
<div class="rowTitle">工单编号</div>
- <div>{{ workDetailData.event_num }}</div>
+ <div>{{ workDetailData.eventNum }}</div>
</div>
<div class="orderRow">
<div class="rowTitle">工单处置人</div>
- <div>{{ workDetailData.event_num?.slice(0, 2) === 'AI' ? 'AI 小飞' : workDetailData.creator }}</div>
+ <div>{{ workDetailData.disposeUserName }}</div>
</div>
<div class="orderRow">
<div class="rowTitle">处置部门</div>
- <div>{{ workDetailData.dept_name }}</div>
+ <div>{{ workDetailData.disposeDeptName }}</div>
</div>
<div class="orderRow">
<div class="rowTitle">拍摄时间</div>
- <div>{{ workDetailData.create_time }}</div>
+ <div>{{ workDetailData.shootTime }}</div>
</div>
<div class="orderRow">
<div class="rowTitle">分发人员</div>
- <div>{{ workDetailData.remark }}</div>
+ <div>{{ workDetailData.distributeUserName }}</div>
</div>
<div class="orderRow">
<div class="rowTitle">分发部门</div>
- <div>{{ workDetailData.remark }}</div>
+ <div>{{ workDetailData.distributeDeptName }}</div>
</div>
<div class="orderRow">
<div class="rowTitle">分发时间</div>
- <div>{{ workDetailData.create_time }}</div>
+ <div>{{ workDetailData.distributeTime }}</div>
</div>
<div class="orderRow">
<div class="rowTitle">工单位置</div>
- <div class="rowAddress" @click="jumpMap(workDetailData)">{{ workDetailData.address }}</div>
+ <div class="rowAddress" @click="jumpMap(workDetailData)">{{ workDetailData.eventLocation }}</div>
</div>
</div>
</div>
</div>
<!-- 操作按钮 -->
- <div class="actionButton">
- <div class="btngroups">
- <up-button type="primary" color="#AEAEAE" text="退回"></up-button>
- <up-button type="primary" color="#1D6FE9" text="确认"></up-button>
+ <div class="actionButton" >
+ <div class="btngroups" v-if="workDetailData.eventStatus !== 3">
+ <up-button type="primary" color="#AEAEAE" text="退回" @click="rejectTicket"></up-button>
+ <up-button type="primary" color="#1D6FE9" text="确认" @click="confirmTheTicket"></up-button>
+ </div>
+ <div class="btngroups" v-if="workDetailData.eventStatus === 3">
+ <up-button type="primary" color="#1D6FE9" text="已确认" @click="confirmedHandle"></up-button>
+ </div>
+ </div>
+ <!-- 分享弹出层 -->
+ <div v-if="showShareModal" class="share-modal-overlay" @click="onShareModalClose">
+ <div class="share-modal-content" @click.stop>
+ <div class="share-modal-header">
+ <div class="share-modal-title">分享到</div>
+ <div class="share-modal-close" @click="onShareModalClose">×</div>
+ </div>
+ <div class="share-modal-body">
+ <div class="share-item" @click="shareToWechat">
+ <div class="share-icon wechat"></div>
+ <div class="share-name">微信好友</div>
+ </div>
+ <div class="share-item" @click="shareToMoments">
+ <div class="share-icon moments"></div>
+ <div class="share-name">朋友圈</div>
+ </div>
+ <div class="share-item" @click="copyLink">
+ <div class="share-icon link"></div>
+ <div class="share-name">复制链接</div>
+ </div>
+ </div>
</div>
</div>
</div>
@@ -89,67 +103,43 @@
<script setup>
// import { getShowImg, getSmallImg } from '@/utils/util'
-import { ref, computed } from 'vue'
-import { getList, flowEvent } from '/src/api/work/index.js'
+import {getGddetailedData,backGdApi} from '/src/api/work/index.js'
import dayjs from 'dayjs'
-
const formatDate = dateString => {
return dayjs(dateString).format('MM/DD HH:mm')
}
const eventNum = ref('')
// 工单内容
-const workDetailData = ref({
- "id": 8474,
- "wayline_job_id": "51835088-cd94-42f8-b2ec-a9069ced4e7b",
- "event_name": "测试",
- "device_sn": "7CTDM5E00B3H61",
- "status": 3,
- "photo_url": "https://wrj.shuixiongit.com/minio/cloud-bucket/upload/20260113/f090f03fdc52499473ab9cbfcdc0876d.jpeg",
- "file_path": "upload/20260113/f090f03fdc52499473ab9cbfcdc0876d.jpeg",
- "longitude": "115.85649472222222",
- "latitude": "28.624301527777778",
- "create_time": "2026-01-13 16:51:57",
- "media_type": "PHOTO_TYPE",
- "event_num": "BHJC20260113002",
- "ai_types": "道路裂缝",
- "ai_type_key_list": [
- "DLLFSB"
- ],
- "work_order_type_dict_key": "ZHZLL",
- "work_order_type": "交通运输与交管",
- "create_user": "曾超杰",
- "update_user": "管理员",
- "dept_name": "中图智飞(江西省)",
- "create_user_id": "2009140684346388482",
- "user_id": "1991745495648227330",
- "handle_user_id": "1123598821738675201",
- "address": "江西省南昌市西湖区朝农街道抚生南路1806号南昌台湾健康产业城",
- "update_photo_url": "https://wrj.shuixiongit.com/minio/cloud-bucket/upload/20260113/f090f03fdc52499473ab9cbfcdc0876d.jpeg",
- "content": "测试",
- "work_type": "3",
- "job_name": "定向拍照2",
- "is_review": 0,
- "job_create_time": "2026-01-13 16:51:57"
-},)
+const workDetailData = ref({})
+// 环境判断
+const isH5 = ref(false)
onLoad(async options => {
- eventNum.value = options.eventNum
- // await getDataList(eventNum.value)
+ eventNum.value = options.id
+ await getDataList(options.id)
+ checkEnvironment()
})
const getDataList = async val => {
const params = {
- current: 1,
- size: 9999,
- source: 1,
- event_name: val,
+ id: val,
}
- const res = await getList(params)
- const response = res.data.data.records
- workDetailData.value = response[0]
+ const res = await getGddetailedData(params)
+ const response = res.data.data
+ workDetailData.value = response
+}
+// 检查运行环境
+const checkEnvironment = () => {
+ const systemInfo = uni.getSystemInfoSync()
+ // #ifdef APP-PLUS
+ isH5.value = false
+ // #endif
- console.log('详情', response)
+ // #ifdef H5
+ isH5.value = true
+ // #endif
+
+ console.log('当前环境:', isH5.value ? 'H5' : 'App')
}
// 图片预览
-
const previewImage = index => {
if (getImageList.value.length === 0) return
const currentIndex = typeof index === 'number' ? index : 0
@@ -161,105 +151,161 @@
const getImageList = computed(() => {
const imageArr = []
const detail = workDetailData.value
- if (detail.photo_url) {
- const smallUrl = detail.photo_url
+ if (detail.eventImageUrl) {
+ const smallUrl = detail.eventImageUrl
imageArr.push(smallUrl)
}
- if (detail.update_photo_url) {
- const smallUrl = detail.update_photo_url
- imageArr.push(smallUrl)
- }
+ // if (detail.update_photo_url) {
+ // const smallUrl = detail.update_photo_url
+ // imageArr.push(smallUrl)
+ // }
return imageArr
})
// 跳转地图
const jumpMap = item => {
+ const contactStr = encodeURIComponent(JSON.stringify(item))
uni.navigateTo({
- url: `/subPackages/workDetail/mapWork/index?eventNum=${item.event_num}`,
+ url: `/subPackages/workDetail/mapWork/index?eventNum=${contactStr}`,
})
}
-
-// 分享按钮点击事件
-const onShareClick = () => {
- // 检查当前平台是否支持分享功能
- const platform = uni.getSystemInfoSync().platform
-
- // H5平台不支持uni.share API
- if (platform === 'web') {
+// 退回
+const rejectTicket = () => {
+ const id = workDetailData.value.id
+ backGdApi({eventId : id,eventStatus:'0'}).then(res => {
uni.showToast({
- title: 'H5平台暂不支持分享功能',
- icon: 'none'
+ title: '退回成功',
+ icon: 'success',
+ duration: 1500
})
- return
- }
-
- uni.showActionSheet({
- itemList: ['分享给微信好友', '分享到朋友圈'],
- success: res => {
- // 检查uni.share是否存在
- if (typeof uni.share !== 'function') {
- uni.showToast({
- title: '当前环境不支持分享功能',
- icon: 'none'
- })
- return
- }
-
- try {
- switch (res.tapIndex) {
- case 0:
- // 分享给微信好友
- uni.share({
- provider: 'weixin',
- scene: 'WXSceneSession',
- type: 0,
- title: '工单详情',
- summary: workDetailData.value.event_name,
- href: 'https://example.com/workDetail?eventNum=' + workDetailData.value.event_num,
- imageUrl: workDetailData.value.photo_url,
- success: () => {
- uni.showToast({ title: '分享成功', icon: 'success' })
- },
- fail: (err) => {
- console.log('分享失败', err.errMsg)
- uni.showToast({
- title: err.errMsg,
- icon: 'none'
- })
- }
- })
- break
- case 1:
- // 分享到朋友圈
- uni.share({
- provider: 'weixin',
- scene: 'WXSceneTimeline',
- type: 0,
- title: workDetailData.value.event_name,
- summary: '查看工单详情',
- href: 'https://example.com/workDetail?eventNum=' + workDetailData.value.event_num,
- imageUrl: workDetailData.value.photo_url,
- success: () => {
- uni.showToast({ title: '分享成功', icon: 'success' })
- },
- fail: (err) => {
- console.log('分享失败', err)
- uni.showToast({
- title: '分享失败,请检查配置',
- icon: 'none'
- })
- }
- })
- break
- }
- } catch (error) {
- console.error('分享出错:', error)
- uni.showToast({
- title: '分享功能异常',
- icon: 'none'
- })
- }
- }
+ setTimeout(() => {
+ uni.navigateBack()
+ })
})
+
+}
+// 确认工单
+const confirmTheTicket = () => {
+ const id = workDetailData.value.id
+ backGdApi({eventId : id,eventStatus:'1'}).then(res => {
+ uni.showToast({
+ title: '确认成功',
+ icon: 'success',
+ duration: 1500
+ })
+ setTimeout(() => {
+ uni.navigateBack()
+ })
+ })
+}
+// 已确认
+const confirmedHandle = () => {
+ uni.navigateBack()
+}
+// 分享模态框状态
+const showShareModal = ref(false)
+
+// 分享按钮点击事件 - 显示分享模态框
+const onShareClick = () => {
+ showShareModal.value = true
+}
+
+// 关闭分享模态框
+const onShareModalClose = () => {
+ showShareModal.value = false
+}
+
+// 微信好友分享
+const shareToWechat = () => {
+ shareToPlatform('weixin', 'WXSceneSession')
+}
+
+// 朋友圈分享
+const shareToMoments = () => {
+ shareToPlatform('weixin', 'WXSceneTimeline')
+}
+
+// 复制链接
+const copyLink = async () => {
+ const shareUrl = 'https://example.com/workDetail?eventNum=' + workDetailData.value.event_num
+ try {
+ await uni.setClipboardData({
+ data: shareUrl,
+ })
+ uni.showToast({
+ title: '链接已复制',
+ icon: 'success',
+ })
+ } catch (error) {
+ console.error('复制失败:', error)
+ uni.showToast({
+ title: '复制失败,请重试',
+ icon: 'none',
+ })
+ }
+ onShareModalClose()
+}
+
+// 通用分享平台函数
+const shareToPlatform = (provider, scene = '') => {
+ // 检查当前平台是否支持分享功能
+ const platform = uni.getSystemInfoSync().platform
+
+ // H5平台不支持uni.share API
+ if (platform === 'web') {
+ uni.showToast({
+ title: 'H5平台暂不支持分享功能',
+ icon: 'none',
+ })
+ onShareModalClose()
+ return
+ }
+
+ // 检查uni.share是否存在
+ if (typeof uni.share !== 'function') {
+ uni.showToast({
+ title: '当前环境不支持分享功能',
+ icon: 'none',
+ })
+ onShareModalClose()
+ return
+ }
+
+ try {
+ const shareConfig = {
+ provider,
+ type: 0,
+ title: workDetailData.value.event_name || '工单详情',
+ summary: '查看工单详情',
+ href: 'https://example.com/workDetail?eventNum=' + workDetailData.value.event_num,
+ imageUrl: workDetailData.value.eventImageUrl,
+ success: () => {
+ uni.showToast({ title: '分享成功', icon: 'success' })
+ onShareModalClose()
+ },
+ fail: err => {
+ console.log('分享失败', err)
+ uni.showToast({
+ title: '分享失败,请重试',
+ icon: 'none',
+ })
+ onShareModalClose()
+ },
+ }
+
+ // 添加场景参数(如果有)
+ if (scene) {
+ shareConfig.scene = scene
+ }
+
+ uni.share(shareConfig)
+ } catch (error) {
+ console.error('分享出错:', error)
+ uni.showToast({
+ title: '分享功能异常',
+ icon: 'none',
+ })
+ onShareModalClose()
+ }
}
// 返回按钮点击事件
@@ -276,14 +322,37 @@
</script>
<style lang="scss" scoped>
.workDetailContainer {
- // 分享按钮样式
+ // 添加导航栏高度的padding-top,避免内容被遮挡
+ padding-top: 88rpx;
+ :deep(){
+ .u-navbar__content{
+ background: url("https://wrj.shuixiongit.com/aiskyminio/cloud-bucket/ztzf_app_assets/images/user/bg.png") no-repeat !important;
+ background-size: 100%!important;
+ height: 88rpx !important;
+ }
+} // 分享按钮样式
.share-btn {
- color: #1D6FE9;
- font-size: 14px;
- padding: 0 10px;
- line-height: 44px;
+ // #ifdef APP-PLUS
+ width: 40rpx;
+ height: 40rpx;
+ background-image: url('/static/images/work/share.svg');
+ background-size: contain;
+ background-repeat: no-repeat;
+ background-position: center;
+ // #endif
+ }
+ .tapShare-icon {
+ width: 40rpx;
+ height: 40rpx;
+ img {
+ width: 40rpx;
+ height: 40rpx;
+ }
}
.detailTop {
+ // #ifdef APP-PLUS
+ padding-top: 60rpx;
+ // #endif
.image-container {
position: relative;
width: 100%;
@@ -312,37 +381,7 @@
width: 5px !important;
}
}
- .detailTitle {
- position: absolute;
- left: 0;
- top: 0;
- width: 100%;
- height: 60rpx;
- line-height: 60rpx;
- background: rgba(7, 7, 7, 0.4);
- }
- .titleText {
- display: flex;
- width: 100%;
- justify-content: space-between;
- align-items: center;
- color: #fff;
-
- .itemName,
- .itemTime {
- font-family: Source Han Sans CN, Source Han Sans CN;
- font-weight: 400;
- font-size: 28rpx;
- color: #ffffff;
- }
- .itemName {
- padding-left: 20rpx;
- }
- .itemTime {
- padding-right: 20rpx;
- }
- }
}
}
@@ -384,11 +423,9 @@
font-weight: 400;
font-size: 28rpx;
color: #1d6fe9;
- //white-space: nowrap;
- ///* 禁止换行 */
- //overflow: hidden;
- //text-overflow: ellipsis;
- // max-width: 74%;
+ text-decoration: underline;
+ text-align: right;
+
padding-top: 1px;
padding-left: 5px;
padding-right: 2px;
@@ -412,7 +449,7 @@
align-items: center;
:deep(.u-button) {
width: 276rpx !important;
- height: 100rpx !important;
+ height: 76rpx !important;
&:last-child {
margin-left: 30rpx;
}
@@ -420,4 +457,98 @@
}
}
}
+
+/* 分享弹出层样式 */
+.share-modal-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-color: rgba(0, 0, 0, 0.6);
+ display: flex;
+ justify-content: flex-end;
+ align-items: flex-end;
+ z-index: 9999;
+}
+
+.share-modal-content {
+ background-color: #fff;
+ border-radius: 20rpx 20rpx 0 0;
+ padding: 30rpx;
+ width: 100%;
+ max-height: 80vh;
+ overflow-y: auto;
+}
+
+.share-modal-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 30rpx;
+}
+
+.share-modal-title {
+ font-size: 36rpx;
+ font-weight: bold;
+ color: #222324;
+ text-align: center;
+ flex: 1;
+}
+
+.share-modal-close {
+ font-size: 60rpx;
+ color: #999;
+ line-height: 40rpx;
+}
+
+.share-modal-body {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-around;
+ padding-bottom: 30rpx;
+}
+
+.share-modal-footer {
+ display: flex;
+ justify-content: space-around;
+ padding-top: 30rpx;
+ border-top: 1px solid #f0f0f0;
+}
+
+.share-item {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ margin: 20rpx;
+ width: 120rpx;
+}
+
+.share-icon {
+ width: 90rpx;
+ height: 90rpx;
+ border-radius: 50%;
+ margin-bottom: 15rpx;
+ background-size: contain;
+ background-repeat: no-repeat;
+ background-position: center;
+}
+
+.share-icon.wechat {
+ background-image: url('@/static/images/work/wechat.svg');
+}
+
+.share-icon.moments {
+ background-image: url('@/static/images/work/moments.svg');
+}
+
+
+.share-icon.link {
+ background-image: url('@/static/images/work/link.svg');
+}
+.share-name {
+ font-size: 24rpx;
+ color: #666;
+ margin-top: 10rpx;
+}
</style>
--
Gitblit v1.9.3