<template> <view class="synergeticAdd"> <view class="body" v-if="dataInfo.list.length"> <uni-data-checkbox v-model="dataInfo.userList" multiple :localdata="dataInfo.list" mode="list" wrap icon="right" :map="{text:'name',value:'id'}" @change="selectItem"></uni-data-checkbox> </view> <view class="zanwu" v-else> <text class="newicon newicon-zanwu"></text> </view> <view class="foot_common_btns"> <button @click="goBack" type="default" class="cancelButton btn">返回</button> <button @click="confirm" type="default" class="primaryButton btn">确认</button> </view> </view> </template> <script setup> import { ref, reactive} from 'vue' import { onLoad, onPullDownRefresh, onReachBottom } from '@dcloudio/uni-app' import { api_incidentDetail } from '@/http/api.js' import { api_user } from "@/http/api.js" import { defaultColor } from '@/static/js/theme.js' import { useSetTitle } from '@/share/useSetTitle.js' import { useLoginUserStore } from '@/stores/loginUser' import { useHandlerStore } from '@/stores/handler' import { useGoBack } from '@/share/useGoBack.js' useSetTitle(); const loginUserStore = useLoginUserStore(); const handlerStore = useHandlerStore(); const { goBack } = useGoBack(); // 主题颜色 const primaryColor = ref(defaultColor) // 数据 const dataInfo = reactive({ list: [],//工单列表 idx: 0,//页码 hasMore: true,//是否有更多数据 incidentId: undefined,//事件ID incidentData: {},//事件对象 paramData: {},//传参 userList: [],//协同人列表-回显 userSelectedList: [],//协同人列表-已选择 }) // 选择 function selectItem(e){ dataInfo.userSelectedList = e.detail.data; } // 确认 function confirm(){ if(dataInfo.userSelectedList.length === 0){ uni.showToast({ icon: 'none', title: '请选择协同人员' }); return; } dataInfo.paramData.synergetic = dataInfo.userSelectedList; handlerStore.setHandlerData(dataInfo.paramData, handlerStore.handler.type, handlerStore.handler.sign); uni.navigateTo({ url: `/pages/${handlerStore.handler.type}/${handlerStore.handler.type}?incidentId=${dataInfo.incidentId}&isSummaryNext=1`, }) } // 获取列表信息 function getList(idx){ uni.showLoading({ title: "加载中", mask: true, }); dataInfo.idx = idx === undefined ? dataInfo.idx : idx; if(dataInfo.idx === 0){ dataInfo.list = []; } let postData = { idx: dataInfo.idx, sum: 20, user: { hospital:{ id:dataInfo.paramData.incidentData.duty.id?dataInfo.paramData.incidentData.duty.id:dataInfo.paramData.incidentData.duty }, roledata: { "rolecode": "first-line support" }, "engineer": 1, "simple": true, } } api_user(postData).then(res => { uni.hideLoading(); uni.stopPullDownRefresh(); if(res.status == 200){ let list = res.list || []; if(list.length){ dataInfo.hasMore = true; dataInfo.list = dataInfo.idx === 0 ? list : dataInfo.list.concat(list); }else{ dataInfo.hasMore = false; } }else{ uni.showToast({ icon: 'none', title: res.msg || '请求数据失败!' }); } }) } // 获取传递的数据 function getParamData(){ dataInfo.paramData = handlerStore.handler.data || {}; dataInfo.userSelectedList = dataInfo.paramData.synergetic || []; dataInfo.userList = dataInfo.userSelectedList.map(v => v.id); if(dataInfo.incidentId !== 'undefined'){ getIncidentDetail(); }else{ dataInfo.incidentData = handlerStore.handler.data.incidentData || {}; getList(0); } } // 获取事件详情 function getIncidentDetail(){ uni.showLoading({ title: "加载中", mask: true, }); api_incidentDetail(dataInfo.incidentId).then(res => { uni.hideLoading(); if(res.status == 200){ dataInfo.incidentData = res.data || {}; getList(0); }else{ uni.showToast({ icon: 'none', title: res.msg || '请求数据失败!' }); } }) } onLoad((option) => { dataInfo.incidentId = option.incidentId; getParamData(); }) onPullDownRefresh(() => { getList(0) }) onReachBottom(() => { dataInfo.idx += 1; if (dataInfo.hasMore) { getList(); // 当触底时加载更多数据 } }) </script> <style lang="scss" scoped> .synergeticAdd{ display: flex; flex-direction: column; justify-content: space-between; .head{ height: 88rpx; display: flex; align-items: center; padding: 0 24rpx; position: fixed; z-index: 99; width: 100%; box-sizing: border-box; background: #fff; font-size: 26rpx; color: $uni-primary; .right{ margin-top: 2rpx; } .two{ flex: 1; } } .body{ margin-bottom: 140rpx; font-size: 26rpx; .body_item{ border-bottom: 1rpx solid #DEDEDE; padding: 24rpx; } } .zanwu{ margin-bottom: 140rpx; display: flex; justify-content: center; .newicon-zanwu{ font-size: 256rpx; color: #D6D6D6; margin-top: 140rpx; } } .foot_common_btns{ position: fixed; left: 0; bottom: 0; background-color: #fff; } } </style>