<template>
	<view class="container">
		<view class="top_bg"></view>

		<!-- 状态统计区域 后勤管理端 -->
		<view class="top_types2" v-if="btns.includes('首页分段器')">
			<view class="top">
				<uni-segmented-control :current="current" :values="items" @clickItem="onClickItem" styleType="text" activeColor="#6FB6B8"></uni-segmented-control>
			</view>
			<view class="bottom">
				<view class="bottom_box">
					<view class="box_num">100</view>
					<view class="box_info">工单数</view>
				</view>

				<view class="bottom_box">
					<view class="box_num">10</view>
					<view class="box_info">处理中</view>
				</view>
				<view class="bottom_box">
					<view class="box_num">50</view>
					<view class="box_info">已完成</view>
				</view>
				<view class="bottom_box">
					<view class="box_num">60</view>
					<view class="box_info">已超时</view>
				</view>
			</view>
		</view>

		<!-- 状态统计区域 维修师傅端 -->
		<view class="top_types" v-else>
			<view class="types_box">
				<view class="box_num">100</view>
				<view class="box_info">工单数</view>
			</view>

			<view class="types_box">
				<view class="box_num">10</view>
				<view class="box_info">处理中</view>
			</view>
			<view class="types_box">
				<view class="box_num">50</view>
				<view class="box_info">已完成</view>
			</view>
			<view class="types_box">
				<view class="box_num">60</view>
				<view class="box_info">已超时</view>
			</view>
		</view>

		<!-- 排班区域 -->
		<view class="watch">
			<view class="watch_title">
				<img src="../../static/images/repairsImg/watch.png" />
				排班
			</view>
			<!-- 表格区域 -->
			<uni-table stripe emptyText="暂无更多数据">
				<!-- 表头行 -->
				<uni-tr>
					<uni-th width="80" align="center">姓名</uni-th>
					<uni-th width="50" align="center">工种</uni-th>
					<uni-th width="80" align="center">状态</uni-th>
					<uni-th width="70" align="center">是否值班</uni-th>
				</uni-tr>
				<!-- 表格数据行 -->
				<uni-tr v-for="(item, index) in tableData" :key="index">
					<!-- 姓名区域 -->
					<uni-td align="center">{{ item.name }}</uni-td>
					<!-- 工种区域 -->
					<uni-td align="center">{{ item.type }}</uni-td>
					<!-- 状态区域 -->
					<uni-td align="center">
						<picker :disabled="!btns.includes('表格编辑')" @change="bindPickerChange($event, item)" :range="typeArray">
							<view class="watch_color" v-if="item.status == '0'">{{ typeArray[item.status] }}</view>
							<view class="watch_color2" v-if="item.status == '1'">{{ typeArray[item.status] }}</view>
							<view class="watch_color3" v-if="item.status == '2'">{{ typeArray[item.status] }}</view>
						</picker>
					</uni-td>
					<!-- 是否值班 -->
					<uni-td align="center">
						<view @click="handleChange(item, index)">{{ getCutting(item.work) }}</view>
					</uni-td>
				</uni-tr>
			</uni-table>

			<!-- 是否值班弹窗区域 -->
			<uni-popup ref="popup_work" background-color="#fff">
				<view class="watch_pop">
					<view class="poop_title">
						<view class="cancel" @click="$refs.popup_work.close()">取消</view>
						<view class="confirm" @click="handlePopConfirm">确定</view>
					</view>

					<view class="poop_body">
						<view class="body_item" v-for="(item, index_pop) in workArray" :key="index_pop" @click="handleChangeWork(item)">
							<view class="body_item_info">
								{{ item }}
							</view>
							<view class="body_item_icon" v-if="defaultList.includes(item)">✔</view>
						</view>
					</view>
				</view>
			</uni-popup>
		</view>

		<!-- 排行榜区域 -->
		<view class="rank">
			<view class="rank_title">
				<img src="../../static/images/repairsImg/rank.png" />
				工单完成排行榜
			</view>
			<!-- 排行榜柱状图 -->
			<view class="rank_charts">
				<!-- 加上canvas2d属性后 模拟器上图表显示异常，真机调试没有问题，开发时不添加canvas2d属性，发布时添加canvas2d属性 -->
				<qiun-data-charts type="bar" :opts="opts" :chartData="chartData" />
			</view>
		</view>

		<!-- 悬浮按钮区域 -->
		<view class="fixed">
			<img src="../../static/images/repairsImg/add.png" @click="handleGoRepairs" />
			<uni-badge :offset="[5, 5]" absolute="rightTop" text="8">
				<img class="img" src="../../static/images/repairsImg/message.png" @click="handleGoMsg" />
			</uni-badge>
		</view>
	</view>
</template>

<script>
export default {
	data() {
		return {
			// 按钮权限
			btns: [],
			// 是否值班弹窗默认选中数组
			defaultList: [],
			// 改变的是第几个索引
			changeIndex: 0,
			// 排班状态数组
			typeArray: ['接单中', '订单饱和', '停止接单'],
			// 值班状态数组
			workArray: ['正常班次', '值班班次'],
			// 分段器数组数据
			items: ['团队数据统计', '个人数据统计'],
			// 分段器当前索引
			current: 0,
			// 柱状图数据
			chartData: {
				categories: ['张三', '李四', '王五', '老六', '刘八'],
				series: [
					{
						name: '好评数',
						data: [35, 36, 31, 33, 13]
					},
					{
						name: '完成数',
						data: [18, 27, 21, 24, 6]
					}
				]
			},
			opts: {
				color: ['#1890FF', '#91CB74', '#FAC858', '#EE6666', '#73C0DE', '#3CA272', '#FC8452', '#9A60B4', '#ea7ccc'],
				padding: [15, 30, 0, 5],
				enableScroll: false,
				legend: {},
				xAxis: {
					boundaryGap: 'justify',
					disableGrid: false,
					gridType: 'dash',
					gridColor: '#E5E5E5',
					min: 0,
					axisLine: false,
					max: 40
				},
				yAxis: {},
				extra: {
					bar: {
						type: 'group',
						width: 15,
						meterBorde: 1,
						meterFillColor: '#FFFFFF',
						activeBgColor: '#000000',
						activeBgOpacity: 0.08,
						linearType: 'custom',
						barBorderCircle: true,
						seriesGap: 2,
						categoryGap: 2
					}
				}
			},
			// 表格数据
			// status状态: 0 接单中  1 订单饱和  2 停止接单
			// work状态: 0 正常班次  1 值班班次
			tableData: [
				{
					name: '张三',
					type: '电工',
					status: 0,
					work: ['正常班次', '值班班次']
				},
				{
					name: '张三三',
					type: '泥工',
					status: 1,
					work: ['值班班次']
				},
				{
					name: '张三',
					type: '电工',
					status: 2,
					work: ['正常班次']
				},
				{
					name: '张三三',
					type: '泥工',
					status: 0,
					work: ['值班班次']
				},
				{
					name: '张三',
					type: '电工',
					status: 1,
					work: ['值班班次']
				},
				{
					name: '张三三',
					type: '泥工',
					status: 2,
					work: ['正常班次']
				}
			]
		}
	},
	mounted() {
		console.log('主页页面加载')
		const repairsUserInfo = uni.getStorageSync('repairsUserInfo')
		this.btns = repairsUserInfo.btns
		console.log(this.btns)
	},
	methods: {
		// 是否值班弹窗确定按钮回调
		handlePopConfirm() {
			uni.showModal({
				title: '提示',
				content: '确定修改是否值班状态吗？',
				success: (res) => {
					if (res.confirm) {
						this.tableData[this.changeIndex].work = this.defaultList
						console.log('用户点击确定')
					} else if (res.cancel) {
						console.log('用户点击取消')
					}
				}
			})
			this.$refs.popup_work.close()
		},
		// 点击值班状态回调
		handleChange(item, index) {
			if (this.btns.includes('表格编辑')) {
				this.$refs.popup_work.open('bottom')
				this.changeIndex = index
				this.defaultList = JSON.parse(JSON.stringify(item.work))
			}
		},
		// 切换值班状态回调
		handleChangeWork(item) {
			if (this.defaultList.includes(item)) {
				const temIndex = this.defaultList.indexOf(item)
				this.defaultList.splice(temIndex, 1)
			} else {
				this.defaultList.push(item)
			}
		},

		// 切换排班状态回调
		bindPickerChange(e, item) {
			uni.showModal({
				title: '提示',
				content: '确定修改状态吗？',
				success: (res) => {
					if (res.confirm) {
						item.status = e.detail.value
						console.log('用户点击确定')
					} else if (res.cancel) {
						console.log('用户点击取消')
					}
				}
			})
		},

		// 点击悬浮消息按钮回调
		handleGoMsg() {
			uni.navigateTo({
				url: '/pagesRepairs/message/message'
			})
		},
		// 点击悬浮加号按钮回调
		handleGoRepairs() {
			uni.$emit('goToRepairs', {
				show: 'repairs',
				title: '报修'
			})
		},
		// 顶部分段器切换回调
		onClickItem(e) {
			if (this.current != e.currentIndex) {
				this.current = e.currentIndex
				console.log(this.current)
			}
		},
		// 把数组每一项的第一个文字切割出来
		getCutting(list) {
			let str = ''
			list.forEach((ele, index) => {
				if (index + 1 == list.length && list.length > 1) {
					str += '、' + ele.substring(0, 1)
				} else {
					str += ele.substring(0, 1)
				}
			})
			return str
		}
	}
}
</script>

<style lang="scss" scoped>
.container {
	width: 100vw;
	height: calc(100vh - 152rpx);
	font-size: 32rpx;
	overflow-y: auto;

	.top_bg {
		height: 165rpx;
		background-color: #6fb6b8;
	}

	.top_types {
		display: flex;
		justify-content: space-evenly;
		margin: auto;
		margin-top: -100rpx;
		width: 690rpx;
		height: 188rpx;
		border-radius: 10rpx;
		box-shadow: 0px 0px 4rpx rgba(0, 0, 0, 0.25);
		background-color: #fff;

		.types_box {
			flex: 1;
			display: flex;
			flex-direction: column;
			justify-content: center;
			align-items: center;
			.box_num {
				font-size: 46rpx;
				color: #ff5733;
			}
			.box_info {
				margin-top: 10rpx;
				font-size: 34rpx;
			}
		}
	}

	.top_types2 {
		box-sizing: border-box;
		margin: auto;
		margin-top: -100rpx;
		padding: 0 30rpx;
		width: 690rpx;
		height: 282rpx;
		border-radius: 10rpx;
		box-shadow: 0px 0px 4rpx rgba(0, 0, 0, 0.25);
		background-color: #fff;

		.top {
			height: 112rpx;
			border-bottom: 1rpx solid #e6e6e6;
		}

		.bottom {
			display: flex;
			justify-content: space-evenly;
			height: 170rpx;

			.bottom_box {
				flex: 1;
				display: flex;
				flex-direction: column;
				justify-content: center;
				align-items: center;
				.box_num {
					font-size: 46rpx;
					color: #ff5733;
				}
				.box_info {
					margin-top: 10rpx;
					font-size: 34rpx;
				}
			}
		}
	}

	.watch {
		box-sizing: border-box;
		margin: 20rpx auto;
		padding: 0 30rpx;
		width: 690rpx;
		border-radius: 10rpx;
		box-shadow: 0px 0px 4rpx rgba(0, 0, 0, 0.25);

		.watch_title {
			display: flex;
			align-items: center;
			height: 95rpx;
			font-size: 36rpx;
			border-bottom: 1rpx solid #e6e6e6;

			img {
				margin-right: 14rpx;
				width: 44rpx;
				height: 44rpx;
			}
		}

		.watch_color {
			color: #6fb6b8;
		}

		.watch_color2 {
			color: #1e7dfb;
		}

		.watch_color3 {
			color: #ff5733;
		}

		.watch_td {
			display: flex;
		}

		.watch_pop {
			width: 100%;
			height: 575rpx;
			overflow-y: auto;
			background-color: #fff;

			.poop_title {
				box-sizing: border-box;
				padding: 0 30rpx;
				display: flex;
				align-items: center;
				justify-content: space-between;
				height: 100rpx;
				font-size: 34rpx;
				border-bottom: 1rpx solid #f5f5f5;

				.cancel {
					color: #888888;
				}

				.confirm {
					color: #1e7dfb;
				}
			}

			.poop_body {
				margin-top: 50rpx;

				.body_item {
					position: relative;
					display: flex;
					justify-content: center;
					align-items: center;
					height: 100rpx;
					border-bottom: 1rpx solid #f5f5f5;

					.body_item_info {
					}

					.body_item_icon {
						position: absolute;
						top: 30rpx;
						right: 85rpx;
						color: #1e7dfb;
					}
				}
			}
		}
	}

	.rank {
		position: relative;
		box-sizing: border-box;
		margin: 0 auto 100rpx;
		padding: 0 30rpx;
		width: 690rpx;
		height: 745rpx;
		border-radius: 10rpx;
		box-shadow: 0px 0px 4rpx rgba(0, 0, 0, 0.25);

		.rank_title {
			display: flex;
			align-items: center;
			height: 95rpx;
			font-size: 36rpx;
			border-bottom: 1rpx solid #e6e6e6;

			img {
				margin-right: 14rpx;
				width: 41rpx;
				height: 41rpx;
			}
		}

		.rank_charts {
			position: absolute;
			bottom: 0;
			width: 100%;
			height: 650rpx;
		}
	}

	.fixed {
		z-index: 2;
		position: fixed;
		right: 0;
		bottom: 155rpx;
		display: flex;
		justify-content: space-evenly;
		align-items: center;
		width: 252rpx;
		height: 123rpx;
		border-radius: 150rpx 0 0 150rpx;
		box-shadow: 0px 0px 7rpx rgba(0, 0, 0, 0.15);
		background-color: #fff;

		img {
			width: 76rpx;
			height: 76rpx;
		}

		.img {
			width: 88rpx;
			height: 88rpx;
		}
	}
}
</style>
