| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588 | <template>	<view class="box">		<u-navbar :autoBack="true" title="志愿者管理" bgColor="rgba(255,255,255,0)" :placeholder="true" titleStyle="font-weight:bold;color:#000000"></u-navbar>		<view class="filter-box">			<view class="b-item" v-for="(item, index) in tabList" :key="index" :class="{ active: index == tab }" @click="tabBtn(index)">				<view class="">					{{ item.name }}					<view v-if="item.name === '审核' && daishenhe > 0" class="badge">{{ daishenhe }}</view>				</view>			</view>		</view>		<!-- 名单 -->		<view class="" v-if="tab === 0">			<view class="top_box">				<view class="" style="width: 100%; display: flex; justify-content: space-between; align-items: center">					<view class="top_item">						<view class="">区域:</view>						<view class="xz2" @click="selectArea">							<view class="">{{ Areatit ? Areatit : '请选择' }}</view>							<view class="">								<uni-icons type="down" size="22" color=""></uni-icons>							</view>						</view>					</view>					<view class="top_item" @click="show = true">						<view class="">状态:</view>						<view class="xz">							<view class="">{{ statetit ? statetit : '请选择' }}</view>							<view class="">								<uni-icons type="down" size="22" color=""></uni-icons>							</view>						</view>					</view>				</view>				<view class="scarch_box">					<u-search						@custom="search"						:actionStyle="{ color: '#985741', fontSize: '28rpx', fontWeight: 'bold' }"						height="25"						shape="square"						placeholder="输入关键字搜索"						v-model.trim="value"					></u-search>				</view>			</view>			<view class="jl_box">				<view class="tit_box">					<view style="width: 130rpx" class="">姓名</view>					<view style="width: 130rpx">电话</view>					<view style="width: 130rpx">地址</view>					<view style="width: 130rpx">操作</view>				</view>				<scroll-view v-if="recordList.length > 0" style="height: 800rpx" scroll-y="true" @scrolltolower="LoadMore">					<view @click="mingDandetailsBtn(item.id)" class="jl_item" v-for="item in recordList" :key="item.id">						<view class="bk">							{{ item.name }}						</view>						<view class="bk sl">							{{ item.mobile }}						</view>						<view class="bk">							{{ item.address }}						</view>						<view class="bk">							<view class="ck">详情</view>						</view>					</view>				</scroll-view>				<u-empty v-else text="暂无数据" mode="data" icon="http://cdn.uviewui.com/uview/empty/data.png"></u-empty>			</view>		</view>		<u-picker keyName="label" :show="show" @cancel="show = false" :columns="columnsList" @close="close" :closeOnClickOverlay="true" @confirm="qyBtn"></u-picker>		<!-- 审核 -->		<view class="" v-if="tab === 1">			<view class="jl_box">				<view class="tit_box">					<view style="width: 130rpx" class="">姓名</view>					<view style="width: 130rpx">电话</view>					<view style="width: 130rpx">地址</view>					<view style="width: 130rpx">状态</view>					<view style="width: 130rpx">操作</view>				</view>				<scroll-view v-if="toExamine.length > 0" style="height: 800rpx" scroll-y="true" @scrolltolower="LoadMoress">					<view class="jl_item" v-for="item in toExamine" :key="item.id">						<view class="bk">							{{ item.name }}						</view>						<view class="bk">							{{ item.mobile }}						</view>						<view class="bk">							{{ item.address }}						</view>						<view class="bk" :class="{ zhuxiao: item.status_text == '注销' }">							{{ item.status_text }}						</view>						<view class="bk" @click="detailsBtn(item.id)">							<view class="ck">详情</view>							<!-- <view style="width: 170rpx; margin-left: 20rpx" class="ck">								<view class="" @click.stop="agreeBtn(item.id)">同意</view>								<view class="">/</view>								<view @click.stop="returnBtn(item.id)" style="margin-left: 10rpx">驳回</view>							</view> -->						</view>					</view>				</scroll-view>				<u-empty v-else text="暂无数据" mode="data" icon="http://cdn.uviewui.com/uview/empty/data.png"></u-empty>			</view>		</view>		<!-- 信息弹层 -->		<u-popup bgColor="#f2c8a2" :show="detailsShow" @close="close" mode="center" customStyle="width:600rpx;padding: 30rpx;" round="20rpx">			<view class="ban_box">				<view>					<view class="">姓名:{{ detailsList.name }}</view>					<view class="">联系方式:{{ detailsList.mobile }}</view>					<view class="">认领文物:{{ detailsList.cr_list[0].title }}</view>					<view class="">住址:{{ detailsList.address }}</view>					<view class="">单位:{{ detailsList.unit_name }}</view>					<view class="">身份证:{{ detailsList.id_card }}</view>					<view class="">申请时间:{{ detailsList.created_at }}</view>				</view>				<view style="height: 300rpx; overflow: scroll">个人简介:{{ detailsList.intro || '暂无介绍' }}</view>				<view class="bt_box">					<view class="bt1" @click="(detailsShow = false), (returnShow = true)">驳回</view>					<view @click="agreeBtn" class="bt2">同意</view>				</view>			</view>		</u-popup>		<!-- 驳回描述弹层 -->		<u-popup bgColor="#f2c8a2" :show="returnShow" @close="close" mode="center" customStyle="width:600rpx;padding: 30rpx;" round="20rpx">			<view style="text-align: center; font-size: 30rpx">确认驳回该申请吗?</view>			<view style="margin-top: 20rpx">				<u--textarea height="80" v-model.trim="returnVal" placeholder="请填写驳回原因:"></u--textarea>			</view>			<view class="bt_box">				<view					class="bt1"					@click.stop="						returnShow = false;						returnVal = '';					"				>					取消				</view>				<view @click.stop="isOk" class="bt2">确认</view>			</view>		</u-popup>		<tki-tree ref="tkitree" idKey="id" @confirm="onnodeclick" :range="regionList" rangeKey="title" selectParent confirmColor="#4e8af7" />	</view></template><script>let that;export default {	data() {		return {			Areatit: '',			statetit: '',			id: '' /* 区域管理id */,			id2: '' /* 记录区域管理id */,			regionList: [] /* 区域列表 */,			value: '',			page: 1,			tab: 0,			statusId: '',			AreaId: '',			volunteer_id: '' /*志愿者id */,			isLoading: false,			show: false,			returnId: '',			detailsShow: false /* 详情弹层 */,			detailsList: {} /* 详情 */,			returnShow: false /* 弹层 */,			returnVal: '' /* 驳回原因 */,			tabList: [				{					name: '名单'				},				{					name: '审核'				}			],			columnsList: [				[					{ label: '培训中', id: 1 },					{ label: '待审核', id: 0 },					{ label: '驳回', id: -1 },					{ label: '申请注销', id: -2 },					{ label: '已注销', id: -3 }				]			],			optionIndex: 0,			optionList: [],			// 名单			recordList: [],			/* 审核数据列表 */			toExamine: [],			daishenhe: 0		};	},	onLoad(o) {		that = this;		this.id = o.id;		this.id2 = o.id;		this.lists();		this.getDaishenhe();		this.getCulturalRelicCategory();	},	methods: {		//待审核数量		getDaishenhe() {			this.$api.daishenhe({}, function (res) {				if (res.code == 1) {					that.daishenhe = res.data;				// console.log(that.daishenhe, '待审核数量');				} else {					that.$common.errorToShow(res.msg);				}			});		},		// 名单		lists(id) {			this.isLoading = true;			this.$api.lists({ region_id: id || this.id, status: this.statusId, keywords: this.value, page: this.page, pageSize: 30, main_body_id: 1 }, function (res) {				// console.log(res, '名单');				if (res.code == 1) {					that.isLoading = false;					that.recordList = [...that.recordList, ...res.data];				} else {					that.$common.errorToShow(res.msg);				}			});		},		auditingLists() {			this.isLoading = true;			this.$api.lists({ status: '0,-2', page: this.page, pageSize: 10, main_body_id: 1 }, function (res) {				// console.log(res, '审核列表');				if (res.code == 1) {					that.isLoading = false;					that.toExamine = [...that.toExamine, ...res.data];				}			});		},		LoadMore() {			if (this.isLoading) {				return;			} else {				// this.value = '';				this.page++;				this.lists();			}		},		LoadMoress() {			if (this.isLoading) {				return;			} else {				this.page++;				this.auditingLists();			}		},		// 详情		detailsBtn(id) {			// console.log(id, 'idid');			this.volunteer_id = id;			this.detailsShow = true;			this.$api.details({ main_body_id: 1, volunteer_id: id }, function (res) {				// console.log(res, 666666666);				if (res.code === 1) {					that.detailsList = res.data;				} else {					that.$common.errorToShow(res.msg);				}			});		},		mingDandetailsBtn(id) {			uni.navigateTo({				url: '/index_fenbao/fuWu/paiMing/xiangQing?id=' + id			});		},		tabBtn(i) {			this.tab = i;			this.page = 1;			this.statusId = '';			// this.id = this.id;			if (i == 0) {				that.toExamine = [];				this.lists();			} else {				that.recordList = [];				this.auditingLists();			}		},		qyBtn(e) {			// console.log(e);			this.statetit = e.value[0].label;			this.statusId = e.value[0].id;			this.page = 1;			that.recordList = [];			this.value = '';			this.lists();			this.show = false;		},		search(e) {			this.page = 1;			that.recordList = [];			this.statusId = '';			this.statetit = '';			this.AreaId = '';			this.Areatit = '';			this.id = this.id2;			this.lists();		},		// 审核		examineVolunteer(id, status) {			// console.log(id, status, 454);			this.$api.examineVolunteer({ volunteer_id: id, status: status, main_body_id: 1, feedback: this.returnVal || '' }, function (res) {				console.log(res);				if (res.code == 1) {					// 同意后从列表删除该项					const index = that.toExamine.findIndex((item) => item.id === id);					if (index !== -1) {						that.toExamine.splice(index, 1);					}					that.$common.errorToShow(res.msg);				} else {					that.$common.errorToShow(res.msg);				}			});		},		// 通过申请		agreeBtn() {			this.detailsShow = false;			this.examineVolunteer(this.volunteer_id, 2);			// console.log('通过申请', this.volunteer_id);		},		// 确认驳回		isOk() {			if (this.returnVal != '' && this.returnVal.length > 0) {				this.examineVolunteer(this.volunteer_id, -1);				// console.log('驳回', this.volunteer_id);				this.returnShow = false;				this.detailsShow = false;			} else {				that.$common.errorToShow('请填写驳回原因');			}		},		selectArea() {			//打开选择器			this.$refs.tkitree._show();		},		// 区域		getCulturalRelicCategory() {			this.$api.getCulturalRelicCategory({ main_body_id: 1, type: this.id, withself: true }, function (res) {				if (res.code == 1) {					// 创建一个字典,键为id,值为对象,便于快速查找					const itemsById = res.data.reduce((acc, item) => {						acc[item.id] = {							...item,							children: []						};						return acc;					}, {});					// console.log(itemsById, 1212);					// 构建树结构					const tree = res.data						.filter((item) => {							const parent = itemsById[item.pid];							if (parent) {								// 找到字节点								parent.children.push(itemsById[item.id]);								return false;							}							// 未找到字节点,则是根节点							return true; // 没有父节点,所以这是一个根节点						})						.map((id) => itemsById[id.id]);					that.regionList = tree;				}			});		},		onnodeclick(e) {			this.id = e[0].id;			this.AreaId = e[0].id;			this.Areatit = e[0].title;			this.page = 1;			that.recordList = [];			this.value = '';			this.lists(this.AreaId);		},		close() {			this.show = false;			this.returnShow = false;			this.detailsShow = false;		}	}};</script><style>.box {	width: 100%;	padding-bottom: 50rpx;	background-image: url('https://huli-app.wenlvti.net/app_static/WenWuGuanJia/image/xbg_2.png');	background-size: 100% 100%;	background-attachment: fixed;	background-repeat: repeat-y;	height: 100%;}.badge {  display: inline-flex;  align-items: center;  justify-content: center;  width: 20px;  height: 20px;  background-color: red;  color: white;  border-radius: 50%; /* 创建圆形 */  font-size: 12px;  margin-left: 8px; /* 根据需要调整间距 */}.zhuxiao {	color: #f73131;}.filter-box {	padding: 30upx 50upx 0 50upx;	margin-bottom: 30upx;	display: flex;	align-items: center;	justify-content: space-between;}.filter-box .b-item {	width: 278rpx;	height: 80rpx;	font-size: 30rpx;	color: #ffefc4;	font-weight: 600;	text-align: center;	line-height: 80rpx;	background-image: url('https://huli-app.wenlvti.net/app_static/WenWuGuanJia/image/cy_tit2.png');	background-size: 100% 100%;}.scarch_box {	width: 670rpx;	height: 82rpx;	margin: auto;	margin-top: 40rpx;	padding: 15rpx 0 0 30rpx;	background-image: url('/static/img/search_bg1.png');	background-size: 100% 100%;}/deep/.u-search__content.data-v-0a306a29 {	border-radius: 0 !important;}.active {	color: #fae5bb !important;	background-image: url('https://huli-app.wenlvti.net/app_static/WenWuGuanJia/image/cy_tit1.png') !important;}.top_box {	display: flex;	flex-wrap: wrap;	justify-content: space-between;	width: 90%;	margin: auto;}.top_item {	display: flex;	align-items: center;	/* margin-top: 30rpx; */}.xz {	display: flex;	align-items: center;	justify-content: space-around;	width: 240rpx;	height: 60rpx;	background-image: url('/static/img/search_bg1.png');	background-size: 100% 100%;}.xz2 {	display: flex;	align-items: center;	justify-content: space-around;	width: 240rpx;	height: 60rpx;	background-image: url('/static/img/search_bg1.png');	background-size: 100% 100%;}.jl_box {	margin: auto;	margin-top: 40rpx;	text-align: center;}.tit_box {	display: flex;	height: 60rpx;	line-height: 60rpx;	font-weight: 700;	font-size: 28rpx;	justify-content: space-around;	background-color: #e4c3a6;}.jl_item {	display: flex;	justify-content: space-around;	height: 100rpx;	line-height: 80rpx;	font-size: 28rpx;	/* background-color: #e7cbad; */}.bk {	width: 100%;	overflow-x: auto;	white-space: nowrap;}.sl {	white-space: nowrap;	overflow: hidden;	text-overflow: ellipsis;}.ck {	display: flex;	justify-content: space-around;	width: 145rpx;	height: 50rpx;	font-size: 30rpx;	line-height: 50rpx;	margin-top: 15rpx;	margin-left: 20rpx;	background-color: #b75830;}.bt_box {	display: flex;	margin-top: 100rpx;	justify-content: space-around;}.bt1 {	width: 220rpx;	height: 78rpx;	border: 1px solid #312520;	border-radius: 39rpx;	text-align: center;	line-height: 78rpx;	color: black;}.bt2 {	width: 220rpx;	height: 78rpx;	background: #ca5642;	border-radius: 39rpx;	text-align: center;	line-height: 78rpx;	color: #ffffff;}.ban_box {	width: 92%;	margin: auto;	color: #90523c;	font-size: 30rpx;	line-height: 50rpx;	font-weight: 600;}.input-value-border {	border: none !important;}.placeholder {	color: #333333 !important;}.input-arrow {	width: 22rpx !important;	height: 22rpx !important;	border-left: 1px solid #000 !important;	border-bottom: 1px solid #000 !important;}.uni-data-tree {	width: 310rpx !important;}</style>
 |