InspectionCleaning/pages/index/cleanPlan.vue

310 lines
6.9 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="content">
<u-navbar
:is-back="false"
title=""
:background="{ backgroundColor: '#DFEEFD' }"
:border-bottom="false"
>
<view class="slot-wrap">
<u-dropdown :title-size="42" active-color="#211D2F">
<u-dropdown-item
v-model="dropdownValue"
:title="dataInfo.planName"
:options="dropdownOptions"
@change="changeDropdown"
></u-dropdown-item>
</u-dropdown>
</view>
</u-navbar>
<view class="area-info">
<view class="name">{{
dataInfo.planDate ? dataInfo.planDate.split("T")[0] : ""
}}</view>
<view class="position">
<span v-if="dataInfo.beginTime && dataInfo.endTime">
{{ minutesToTime(dataInfo.beginTime) }}~{{
minutesToTime(dataInfo.endTime)
}}
</span>
</view>
<view class="tabs">
<view
@click="changeTab(i)"
class="tab-item"
v-for="(v, i) in selectTabs"
:key="i"
:class="{ select: selectIdx === i }"
>
{{ v.name }}
</view>
</view>
</view>
<view class="arealist">
<view class="block-info" v-for="item in dataInfo.areas" :key="item.id">
<view v-if="!item.isCompleted" class="schedule schedule-wait"
>待保洁</view
>
<view v-else class="schedule schedule-completed">已完成</view>
<view class="name">
<u-icon size="40" :name="posIcon"></u-icon>
<view class="text">{{ item.aeraNmae }}</view>
</view>
<view class="type">
<view class="value">区域类型</view>
<u-tag
:text="item.areaType"
class="tag"
border-color="transparent"
:type="item.areaType === '室外' ? 'success' : 'primary'"
/>
<!-- 特殊先隐藏没有这个字段 -->
<!-- <u-tag text="特殊" border-color="transparent" type="warning" /> -->
</view>
<view class="illustrate">
{{ item.note }}
</view>
</view>
</view>
</view>
</template>
<script>
import { GetPlanInfoAreaList, GetTodayPlanList } from "@/api/apiList";
import { minutesToTime } from "@/utils/utils";
export default {
data() {
return {
posIcon: require("@/static/images/pos-icon.png"),
selectIdx: 0,
dropdownValue: "",
dropdownOptions: [
{
label: "保洁计划1",
value: 1,
},
{
label: "保洁计划2",
value: 2,
},
{
label: "保洁计划3",
value: 3,
},
{
label: "保洁计划4",
value: 4,
},
],
selectTabs: [
{
name: "全部",
value: 0,
},
{
name: "待保洁",
value: 1,
},
],
dataInfo: {
planName: "",
},
};
},
computed: {
// dropdownTitle() {
// // 通过 dropdownValue 匹配 对应的项,展示 label
// const item = this.dropdownOptions.find(
// (item) => item.value === this.dropdownValue
// );
// return item ? item.label : "";
// },
},
onLoad(options) {
// this.paramsId = options.id;
this.dropdownValue = options.id;
},
created() {
this.getTodayPlanList();
this.getPlanInfoAreaList();
},
methods: {
minutesToTime,
changeTab(i) {
this.selectIdx = i;
this.getPlanInfoAreaList();
},
changeDropdown(e) {
this.dropdownValue = e;
this.getPlanInfoAreaList();
},
// 获取今日计划
async getTodayPlanList() {
const res = await GetTodayPlanList();
if (res.succeed) {
this.dropdownOptions = res.data.map((item) => ({
label: item.name,
value: item.id,
}));
}
},
// 获取计划区域列表
async getPlanInfoAreaList() {
const res = await GetPlanInfoAreaList({
id: this.dropdownValue,
isCompleted: this.selectIdx === 0 ? true : false,
});
if (res.succeed) {
this.dataInfo = res.data;
}
},
},
};
</script>
<style lang="scss" scoped>
.content {
// height: 100vh;
background: #f7f8fc;
.slot-wrap {
display: flex;
align-items: center;
justify-content: center;
flex: 1;
/deep/ .u-dropdown-item__options {
width: 100%;
}
}
.title {
line-height: 1;
border-left: 10rpx solid #5a7ee9;
padding-left: 16rpx;
font-weight: bold;
font-size: 36rpx;
color: #000000;
}
.area-info {
padding: 24rpx 32rpx;
padding-top: 72rpx;
display: flex;
flex-direction: column;
background: url("@/static/images/plan-icon-bg2.png") no-repeat 95% 40%;
background-size: 40%;
background-color: #dfeefd;
.name {
font-weight: 800;
font-size: 48rpx;
color: #1d1d1d;
}
.position {
margin-top: 40rpx;
font-weight: 500;
font-size: 34rpx;
color: #465161;
}
.tabs {
margin-top: 38rpx;
display: flex;
justify-content: space-between;
.tab-item {
z-index: 99;
pointer-events: auto; /* 确保可点击 */
background: #ffffff;
border-radius: 30rpx;
padding: 12rpx 0;
width: 48%;
display: flex;
align-items: center;
justify-content: center;
color: #383535;
}
.select {
color: #ffffff;
background: #4278f4;
}
}
}
.arealist {
display: flex;
flex-direction: column;
padding: 32rpx;
.block-info {
position: relative;
background: #ffffff;
border-radius: 18rpx;
padding: 65rpx 46rpx;
margin-bottom: 32rpx;
.schedule {
position: absolute;
right: 0;
top: 0;
display: flex;
align-items: center;
justify-content: center;
// background-color: #feeded; /* 背景颜色 */
color: white;
width: 160rpx;
height: 45rpx;
font-size: 30rpx;
// color: #db3636;
border-bottom-left-radius: 500rpx; /* 切角 */
}
.schedule-completed {
color: #4278f4;
background-color: #e5ebff;
}
.schedule-wait {
color: #db3636;
background-color: #feeded;
}
.name {
display: flex;
align-items: center;
.text {
margin-left: 20rpx;
font-size: 38rpx;
color: #32353b;
}
}
.type {
display: flex;
margin: 38rpx 0;
.value {
margin-right: 10rpx;
font-size: 32rpx;
color: #8896b4;
}
.tag {
margin: 0 16rpx;
}
}
.illustrate {
padding: 46rpx;
background: #f3f6f7;
border-radius: 21rpx;
font-size: 32rpx;
color: #353535;
line-height: 57rpx;
}
}
}
}
</style>