| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306 | <script setup>	import {		ref	} from "vue";	import {		onLoad,	} from "@dcloudio/uni-app";	import {		getPersonList,		createMessage	} from "@/api/work/message.js";	let userNameList = ref(null);	let pageForm = ref({		content: null, //消息内容		consumes: [], //消息接收者列表	});	function sendMessage() {		createMessage(pageForm.value).then(res => {			if (res.code === 200) {				uni.showToast({					title: "消息发送成功。",					icon: "success",					duration: 2000				})				uni.navigateBack({});			} else {				uni.showToast({					title: "消息发送失败。",					icon: "error",					duration: 2000				})			}		}).catch(() => {			uni.showToast({				title: "消息发送失败。",				icon: "error",				duration: 2000			})		});	};	// 选人弹窗	let userChoose = ref(false);	function userChooseClose() {};	function userChooseOpen() {		getPersonPage();	};	// 选人	let chooseParams = ref({		pageNo: 1,		pageSize: 10,		unitName: null,		userName: null,	})	let personList = ref([]);	let personTotal = ref(0);	function getPersonPage() {		getPersonList(chooseParams.value).then(res => {			personList.value = res.data.list;			personTotal.value = res.data.total;		})	}	function paginationChange(e) {		chooseParams.value.pageNo = e.current;		getPersonPage();	}	let personSelectIndex = [];	function personSelect(e) {		personSelectIndex = e.detail.index;	}	// 打开弹窗	function openPopup() {		userChoose.value = true;	}	// 关闭弹窗	function closePopup(type) {		if (type === "confirm") {			let tempArr = [];			for (let i in personSelectIndex) {				tempArr.push(personList.value[personSelectIndex[i]])			};			// 名称展示			userNameList.value = tempArr.map(item => item.userName).join("、");			// 筛选数据			pageForm.value.consumes = tempArr.map(item => {				return {					userId: item.id,					userName: item.userName				};			})		}		userChoose.value = false;	}	//清空	function clear() {		userNameList.value = ''		pageForm.value.content = ''	}</script><template>	<view class="container">		<page-title rightText='清空' @rightTextClick='clear'>消息详情</page-title>		<!-- <view class="clear">清空</view> -->		<view class="content">			<view class="card only-card">				<view class="card-name" @click="openPopup()">					<view class="card-name-title">						<text class="card-name-description">接收人</text>					</view>					<view class="select-item">						<view>{{userNameList}}</view>						<u-icon name="arrow-right" color="#343437" size="16" customStyle="margin-left:10rpx"></u-icon>					</view>				</view>				<view class="card-item">					<view class="card-item-name">内容</view>					<view class="item-textarea">						<u--textarea v-model="pageForm.content" maxlength="-1" height='294rpx'></u--textarea>					</view>				</view>				<view class="card-item">					<view class="card-btn fat-btn" @click="sendMessage()">确定</view>				</view>			</view>		</view>		<u-popup :show="userChoose" @open="userChooseOpen" @close="userChooseClose" mode="center">			<view class="user-choose">				<view class="user-choose-title">					<view class="uesr-choose-icon hide"></view>					人员筛选					<view class="uesr-choose-icon" @click="closePopup('close')"></view>				</view>				<view class="search-item">					<view class="search-item-name">单位</view>					<input class="search-item-content" v-model="chooseParams.unitName" @blur="getPersonPage()"						placeholder='请输入单位名称' placeholder-style="color: #D8D8D8;font-size:28rpx" />				</view>				<view class="search-item">					<view class="search-item-name">用户姓名</view>					<input class="search-item-content" v-model="chooseParams.userName" @blur="getPersonPage()"						placeholder='请输入用户名称' placeholder-style="color: #D8D8D8;font-size:28rpx" />				</view>				<view class="search-item">					<scroll-view class="swiper-item-content" scroll-y>						<uni-table type="selection" emptyText="暂无更多数据" @selection-change="personSelect">							<!-- 表头行 -->							<uni-tr>								<uni-th align="center">用户</uni-th>								<uni-th align="center">单位</uni-th>								<uni-th align="center">科室</uni-th>								<uni-th align="center">手机号</uni-th>							</uni-tr>							<!-- 表格数据行 -->							<uni-tr v-for="(item,index) in personList" :key="index">								<uni-td align="center">{{item.userName}}</uni-td>								<uni-td align="center">{{item.unitName}}</uni-td>								<uni-td align="center">{{item.departName}}</uni-td>								<uni-td align="center">{{item.tel}}</uni-td>							</uni-tr>						</uni-table>					</scroll-view>				</view>				<uni-pagination title="标题文字" show-icon="true" :total="personTotal" :current="chooseParams.pageNo"					@change="paginationChange"></uni-pagination>				<view class="search-btn" @click="closePopup('confirm')">确定</view>			</view>		</u-popup>	</view></template><style lang="scss" scoped>	.clear {		position: absolute;		top: 90px;		right: 4%;		display: flex;		font-size: 40rpx;		font-weight: 500;		color: #FFF;	}	.content {		position: absolute;		top: 5%;		left: 0;		width: 100%;		height: 95%;		padding: 100rpx 4% 0;		box-sizing: border-box;		// border-radius: 40rpx 40rpx 0 0;		background-color: #fff;	}	.select-item {		display: flex;		align-items: center;		font-size: 32rpx;		color: #343437;	}	.item-textarea {		width: 100%;		min-height: 294rpx;		padding: 20rpx;		border: 2rpx solid #D0D9E7;		border-radius: 20rpx;	}	.user-choose {		width: 666rpx;		min-height: 688rpx;		padding: 30rpx 28rpx;		.user-choose-title {			display: flex;			justify-content: space-between;			width: 100%;			margin-bottom: 54rpx;			font-weight: 500;			color: #3D3D3D;			font-size: 32rpx;			.uesr-choose-icon {				width: 44rpx;				height: 44rpx;				background: url("@/static/message-close.svg");				background-size: 100% 100%;			}			.hide {				background: none;			}		}		.search-item {			display: flex;			justify-content: space-between;			align-items: flex-start;			width: 606rpx;			min-height: 88rpx;			padding: 26rpx 30rpx;			margin-bottom: 32rpx;			font-size: 28rpx;			border-radius: 20rpx;			border: 2rpx solid #D0D9E7;			.search-item-name {				min-width: 128rpx;				color: #939AA5;			}			.search-item-content {				color: #3D3D3D;				text-align: right;			}			.swiper-item-content {				height: 286rpx;			}		}		.search-btn {			width: 606rpx;			height: 64rpx;			margin-top: 50rpx;			line-height: 64rpx;			text-align: center;			color: #FFFFFF;			font-size: 28rpx;			background: #1869F6;			border-radius: 16rpx;		}	}	::v-deep .u-popup__content {		border-radius: 28rpx !important;	}</style>
 |