Просмотр исходного кода

feat:对接用户管理页面接口和不同权限的功能按钮逻辑修改

wangsisi 5 дней назад
Родитель
Сommit
c521cf8edb

+ 60 - 12
src/views/old_mini/modify_work/completedWork.vue

@@ -1,6 +1,6 @@
 <template>
     <div class="completed-work">
-        <custom-header name="农事详情" :isClose="query?.hideBack ? true : false" :showClose="false"></custom-header>
+        <custom-header name="农事详情" :isClose="showBack" :showClose="false"></custom-header>
         <div class="work-content">
             <!-- <div class="step-wrap" v-show="query.status !== 'warning'">
                 <farm-steps :currentStep="currentStep" />
@@ -219,10 +219,10 @@
 
             <!-- 农资,步骤:农资已执行,请求确认 -->
             <div class="fixed-btn-wrap center" v-if="curRole == 2 && !detailData?.expectedExecuteDate">
-                <div class="fixed-btn orange" @click="selectExecuteTime">确认执行时间</div>
+                <div class="fixed-btn orange" :class="{ 'primary-text': getButtonText() }" @click="selectExecuteTime">{{ getButtonText() ? '提醒确认执行时间' : '确认执行时间' }}</div>
             </div>
             <div class="fixed-btn-wrap center" v-if="curRole == 2 && detailData?.expectedExecuteDate">
-                <div class="fixed-btn primary" @click="showOfferPopup(detailData)">上传照片</div>
+                <div class="fixed-btn primary" @click="showOfferPopup(detailData)">{{ getButtonText() ? '提醒执行' : '上传照片' }}</div>
             </div>
 
             <!-- 农资,步骤:农事已确认 -->
@@ -385,11 +385,28 @@ const showPriceSheetPopup = () => {
     priceSheetPopupRef.value.handleShowPopup(detailData.value);
 };
 
+const getButtonText = () => {
+    return agriculturalRole.value === 1 || detailData.value.executorUserId != userId.value;
+};
+
 const offerPopupRef = ref(null);
 const isGoBack = ref(false);
 const showOfferPopup = (item) => {
-    isGoBack.value = true;
-    offerPopupRef.value.openPopup(item);
+    if(getButtonText()) {
+        const query = {
+            askInfo: { title: "农事提醒", content: "是否分享该农事提醒给好友" },
+            shareText: '向您分享了一条农事执行提醒,请您尽快执行',
+            targetUrl: `completed_work`,
+            paramsPage: JSON.stringify({id: item.id}),
+            imageUrl: 'https://birdseye-img.sysuimars.com/birdseye-look-mini/invite_bg.png',
+        };
+        wx.miniProgram.navigateTo({
+            url: `/pages/subPages/share_page/index?pageParams=${JSON.stringify(query)}&type=sharePage`,
+        });
+    }else{
+        isGoBack.value = true;
+        offerPopupRef.value.openPopup(item);
+    }
 };
 
 const showCalendar = ref(false);
@@ -397,9 +414,21 @@ const maxDate = ref(new Date());
 // 最小日期设置为今天,今天可以选择
 const minDate = new Date();
 const selectExecuteTime = () => {
-    console.log("detailData.value", detailData.value.executeDeadlineDate);
-    maxDate.value = new Date(detailData.value.executeDeadlineDate);
-    showCalendar.value = true;
+    if(getButtonText()) {
+        const query = {
+            askInfo: { title: "农事提醒", content: "是否分享该农事提醒给好友" },
+            shareText: '向您分享了一条农事提醒,请您尽快确认执行时间',
+            targetUrl: `completed_work`,
+            paramsPage: JSON.stringify({id: detailData.value.id}),
+            imageUrl: 'https://birdseye-img.sysuimars.com/birdseye-look-mini/invite_bg.png',
+        };
+        wx.miniProgram.navigateTo({
+            url: `/pages/subPages/share_page/index?pageParams=${JSON.stringify(query)}&type=sharePage`,
+        });
+    }else{
+        maxDate.value = new Date(detailData.value.executeDeadlineDate);
+        showCalendar.value = true;
+    }
 };
 
 const onConfirmExecuteTime = (date) => {
@@ -430,9 +459,25 @@ const toList = (val) => {
 
 const speciesList = computed(() => toList(quotationData.value.serviceSpecies));
 const equipmentList = computed(() => toList(quotationData.value.serviceEquipment));
+const showBack = ref(false);
+const agriculturalRole = ref(null);
+const userId = ref(null);
 onActivated(async () => {
+    //
+    const userInfo = JSON.parse(localStorage.getItem("localUserInfo"));
+    agriculturalRole.value = userInfo.agriculturalRole;
+    userId.value = userInfo.id;
+    //
     query.value = useRoute().query?.miniJson ? JSON.parse(useRoute().query?.miniJson) : {};
-    const id = query.value?.id;
+    let id = null;
+    if(query.value?.id){
+        id = query.value?.id;
+        showBack.value = false;
+    }else{
+        const data = JSON.parse(query.value?.paramsPage);
+        id = data?.id;
+        showBack.value = true;
+    }
     if (id) {
         await getDetail(id);
 
@@ -634,9 +679,6 @@ const handlePriceInfo = async () => {
                 color: #fff;
                 font-size: 14px;
                 box-sizing: border-box;
-                &.expert {
-                    width: 180px;
-                }
                 &.orange {
                     color: #ff953d;
                     border: 1px solid #ff953d;
@@ -650,6 +692,12 @@ const handlePriceInfo = async () => {
                     border: 1px solid rgba(153, 153, 153, 0.5);
                     color: #666666;
                 }
+                &.primary-text {
+                    width: 160px;
+                    background: rgba(33, 153, 248, 0.1);
+                    color: #2199f8;
+                    border: 1px solid #2199f8;
+                }
             }
         }
         .card-title {

+ 11 - 0
src/views/old_mini/modify_work/reviewWork.vue

@@ -357,10 +357,21 @@ const diffInDays = (date, type = "minus") => {
 };
 
 const paramsPage = ref({});
+const agriculturalRole = ref(null);
+const userId = ref(null);
 onActivated(() => {
+    const userInfo = JSON.parse(localStorage.getItem("localUserInfo"));
+    agriculturalRole.value = userInfo.agriculturalRole;
+    userId.value = userInfo.id;
+
     window.scrollTo(0, 0);
     curRole.value = localStorage.getItem("SET_USER_CUR_ROLE");
     paramsPage.value = route.query.miniJson ? JSON.parse(route.query.miniJson) : {};
+    if(paramsPage.value.paramsPage) {
+        const data = JSON.parse(paramsPage.value.paramsPage);
+        paramsPage.value.id = data.id;
+        paramsPage.value.goBack = false;
+    }
     getDetail();
     getTriggerImg(paramsPage.value.id);
 });

+ 77 - 18
src/views/old_mini/task_condition/components/task.vue

@@ -49,20 +49,20 @@
                         :ref="(el) => setTaskItemRef(el, index)"
                     >
                         <template #footer>
-                            <div class="execute-wrap">
-                                <img class="execute-icon" src="@/assets/img/monitor/execute-icon.png" alt="">
+                            <div class="execute-wrap" v-if="activeIndex === 0">
+                                <img class="execute-icon" src="@/assets/img/monitor/execute-icon.png" alt="" />
                                 <span>{{ item.executorName }}</span>
                             </div>
                             <div class="item-footer" v-if="activeIndex === 2">
                                 <div class="footer-l farm-name-text van-ellipsis">
                                     来自<span class="name-text">{{ item.farmName || "--" }}</span>
                                 </div>
-                                
+
                                 <div class="footer-r" v-if="item.reviewImage && item.reviewImage.length">
                                     <div class="btn warning" @click="generateReport(item)">生成成果报告</div>
                                 </div>
                                 <div class="footer-r" v-else>
-                                    <div class="btn primary" @click="handleAction(item)">上传复核照片</div>
+                                    <div class="btn primary" :class="{ 'primary-text': getButtonText(item) }" @click="handleAction(item)">{{ getButtonText(item) ? '提醒复核' : '上传复核照片' }}</div>
                                 </div>
                             </div>
                             <div v-else-if="activeIndex === 1" class="item-footer">
@@ -76,10 +76,22 @@
                             <div v-else-if="activeIndex === 0" class="item-footer">
                                 <div class="footer-l" @click="toDetail(item)">查看详情</div>
                                 <div class="footer-r" v-if="item.expectedExecuteDate">
-                                    <div class="btn primary primary-text" @click="showUploadExecutePopup(item)">{{ agriculturalRole === 1 ? "提醒执行" : "上传照片" }}</div>
+                                    <div
+                                        class="btn primary"
+                                        :class="{ 'primary-text': getButtonText(item) }"
+                                        @click="showUploadExecutePopup(item)"
+                                    >
+                                        {{ getButtonText(item) ? "提醒执行" : "上传照片" }}
+                                    </div>
                                 </div>
                                 <div class="footer-r" v-else>
-                                    <div class="btn warning" @click="selectExecuteTime(item)">{{ agriculturalRole === 1 ? "提醒确认执行时间" : "确认执行时间" }}</div>
+                                    <div
+                                        class="btn warning"
+                                        :class="{ 'primary-text': getButtonText(item) }"
+                                        @click="selectExecuteTime(item)"
+                                    >
+                                        {{ getButtonText(item) ? "提醒确认执行时间" : "确认执行时间" }}
+                                    </div>
                                 </div>
                             </div>
                         </template>
@@ -111,6 +123,7 @@ import { useStore } from "vuex";
 import { Popup, Calendar } from "vant";
 import IndexMap from "../../farm_manage/map/index";
 import taskItem from "@/components/taskItem.vue";
+import wx from "weixin-js-sdk";
 import customCalendar from "./calendar.vue";
 import { useRouter } from "vue-router";
 import uploadExecute from "./uploadExecute.vue";
@@ -234,10 +247,12 @@ function initTaskCounts() {
 const mapPoint = ref(null);
 
 const agriculturalRole = ref(null);
+const userId = ref(null);
 onMounted(() => {
     mapPoint.value = store.state.home.miniUserLocationPoint;
     const userInfo = JSON.parse(localStorage.getItem("localUserInfo"));
     agriculturalRole.value = userInfo.agriculturalRole;
+    userId.value = userInfo.id;
     // 初始化时获取所有状态的数量
     initTaskCounts();
     // 加载当前选中状态的数据列表
@@ -319,7 +334,7 @@ function getSimpleList() {
                 if (activeIndex.value === 0) {
                     // 传递给日历的数据应该是完整的未筛选数据
                     const calendarData = filterDate.value ? fullTaskList.value : taskList.value;
-                    console.log('calendarData', calendarData);
+                    console.log("calendarData", calendarData);
                     calendarRef.value && calendarRef.value.setSolarTerm(calendarData);
                     // 地图使用筛选后的数据
                     indexMap.initData(taskList.value);
@@ -394,7 +409,20 @@ function toPage(item) {
 
 const offerPopupRef = ref(null);
 const showUploadExecutePopup = (item) => {
-    offerPopupRef.value.openPopup(item);
+    if(getButtonText(item)) {
+        const query = {
+            askInfo: { title: "农事提醒", content: "是否分享该农事提醒给好友" },
+            shareText: '向您分享了一条农事执行提醒,请您尽快执行',
+            targetUrl: `completed_work`,
+            paramsPage: JSON.stringify({id: item.id}),
+            imageUrl: 'https://birdseye-img.sysuimars.com/birdseye-look-mini/invite_bg.png',
+        };
+        wx.miniProgram.navigateTo({
+            url: `/pages/subPages/share_page/index?pageParams=${JSON.stringify(query)}&type=sharePage`,
+        });
+    }else{
+        offerPopupRef.value.openPopup(item);
+    }
 };
 
 const generateReport = (item) => {
@@ -421,9 +449,22 @@ const maxDate = ref();
 const minDate = new Date();
 const executeItem = ref(null);
 const selectExecuteTime = (item) => {
-    executeItem.value = item;
-    maxDate.value = new Date(item.executeDeadlineDate);
-    showCalendar.value = true;
+    if (getButtonText(item)) {
+        const query = {
+            askInfo: { title: "农事提醒", content: "是否分享该农事提醒给好友" },
+            shareText: '向您分享了一条农事提醒,请您尽快确认执行时间',
+            targetUrl: `completed_work`,
+            paramsPage: JSON.stringify({id: item.id}),
+            imageUrl: 'https://birdseye-img.sysuimars.com/birdseye-look-mini/invite_bg.png',
+        };
+        wx.miniProgram.navigateTo({
+            url: `/pages/subPages/share_page/index?pageParams=${JSON.stringify(query)}&type=sharePage`,
+        });
+    } else {
+        executeItem.value = item;
+        maxDate.value = new Date(item.executeDeadlineDate);
+        showCalendar.value = true;
+    }
 };
 
 const onConfirmExecuteTime = (date) => {
@@ -438,6 +479,11 @@ const onConfirmExecuteTime = (date) => {
         });
 };
 
+// 获取上传按钮的文本(计算属性方式)
+const getButtonText = (item) => {
+    return agriculturalRole.value === 1 || item.executorUserId != userId.value;
+};
+
 const priceSheetPopupRef = ref(null);
 const showPriceSheetPopup = (item) => {
     VE_API.z_farm_work_record.getDetail({ id: item.id }).then(({ data }) => {
@@ -448,9 +494,22 @@ const showPriceSheetPopup = (item) => {
 
 const onlyShare = ref(false);
 function handleAction(item) {
-    setTimeout(() => {
-        uploadExecuteRef.value.showPopup(item, "share-sheet");
-    }, 10);
+    if(getButtonText(item)) {
+        const query = {
+            askInfo: { title: "农事提醒", content: "是否分享该农事提醒给好友" },
+            shareText: '向您分享了一条农事复核提醒,请您尽快复核',
+            targetUrl: `review_work`,
+            paramsPage: JSON.stringify({id: item.id}),
+            imageUrl: 'https://birdseye-img.sysuimars.com/birdseye-look-mini/invite_bg.png',
+        };
+        wx.miniProgram.navigateTo({
+            url: `/pages/subPages/share_page/index?pageParams=${JSON.stringify(query)}&type=sharePage`,
+        });
+    }else{
+        setTimeout(() => {
+            uploadExecuteRef.value.showPopup(item, "share-sheet");
+        }, 10);
+    }
 }
 
 function handleForward(item) {
@@ -567,7 +626,7 @@ function handleForward(item) {
         margin-top: 10px;
     }
 
-    .execute-wrap{
+    .execute-wrap {
         background: rgba(153, 153, 153, 0.1);
         border: 1px solid rgba(153, 153, 153, 0.2);
         border-radius: 2px;
@@ -577,7 +636,7 @@ function handleForward(item) {
         align-items: center;
         gap: 5px;
         margin-top: 10px;
-        .execute-icon{
+        .execute-icon {
             width: 14px;
             height: 14px;
         }
@@ -654,8 +713,8 @@ function handleForward(item) {
                 }
                 &.primary-text {
                     background: rgba(33, 153, 248, 0.1);
-                    color: #2199F8;
-                    border: 1px solid #2199F8;
+                    color: #2199f8;
+                    border: 1px solid #2199f8;
                 }
             }
             .btn + .btn {

+ 30 - 3
src/views/old_mini/user/index.vue

@@ -57,11 +57,11 @@
                                 <div class="footer-l">
                                     <div class="farm-info-footer-item">
                                         <div class="farm-info-footer-item-label">农事服务</div>
-                                        <div class="farm-info-footer-item-value">10<span class="unit">次</span></div>
+                                        <div class="farm-info-footer-item-value">{{ ele.serviceCost?.serviceCount || 0 }}<span class="unit">次</span></div>
                                     </div>
                                     <div class="farm-info-footer-item">
                                         <div class="farm-info-footer-item-label">总收益</div>
-                                        <div class="farm-info-footer-item-value">1450<span class="unit">元</span></div>
+                                        <div class="farm-info-footer-item-value">{{ ele.serviceCost?.totalCost || 0 }}<span class="unit">元</span></div>
                                     </div>
                                 </div>
                                 <div class="footer-action" @click.stop="handleDetail('plan', ele.id, ele.agriculturalStoreId)">农事规划</div>
@@ -129,7 +129,34 @@ const getUserList = async () => {
         // 清空现有的子项
         dataList.value[0].children = [];
         dataList.value[1].children = data || [];
-        getLatestBroadcast();
+        
+        // 为每个数据项的ID请求getFarmPastServiceCost,并将返回的数据添加到每一项中
+        const promises = data.map(async (item) => {
+            const farmId = item.id || item.farmId;
+            if (farmId) {
+                try {
+                    const { data: serviceCostData } = await VE_API.user.getFarmPastServiceCost({ farmId });
+                    // 将返回的数据添加到当前项中
+                    return {
+                        ...item,
+                        serviceCost: serviceCostData || {},
+                    };
+                } catch (error) {
+                    console.error(`获取农场 ${farmId} 的服务成本失败:`, error);
+                    // 如果请求失败,返回原数据
+                    return {
+                        ...item,
+                        serviceCost: {},
+                    };
+                }
+            }
+            return item;
+        });
+        
+        // 等待所有请求完成
+        const updatedData = await Promise.all(promises);
+        // 更新数据列表
+        dataList.value[1].children = updatedData;
     }
 };