update
This commit is contained in:
parent
57c0135413
commit
590499fb84
71
components/noData.vue
Normal file
71
components/noData.vue
Normal file
@ -0,0 +1,71 @@
|
||||
<template>
|
||||
<div class="no-data-tip">
|
||||
<!-- <image :src="noDataPath" v-if="type === 1"></image> -->
|
||||
<div v-if="type === 1" class="imgBox">
|
||||
<image style="width: 72rpx; height: 72rpx" :src="newNoDataPath"></image>
|
||||
</div>
|
||||
<image :src="noCoupon" v-else class="imgBigBox"></image>
|
||||
<div class="textBox" @click="refresh">{{ text }}</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters } from "vuex";
|
||||
export default {
|
||||
props: {
|
||||
// 基础类型检测, null意味着任何类型都行
|
||||
text: String,
|
||||
isShow: Boolean,
|
||||
type: {
|
||||
type: Number,
|
||||
default: 1,
|
||||
},
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
newNoDataPath: "/static/images/home/lostAndFoundIcon.svg",
|
||||
noDataPath: "https://eshangtech.com/ShopICO/no-data.png",
|
||||
noCoupon: "https://eshangtech.com/ShopICO/no-coupon.png",
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapGetters({
|
||||
isLoading: "isLoading",
|
||||
}),
|
||||
},
|
||||
methods: {
|
||||
refresh() {
|
||||
if (this.text.indexOf("点击") > -1) {
|
||||
this.$emit("refresh");
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.no-data-tip {
|
||||
width: 100%;
|
||||
|
||||
.imgBox {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.imgBigBox {
|
||||
width: 200px;
|
||||
height: 150px;
|
||||
}
|
||||
|
||||
.textBox {
|
||||
font-size: 28rpx;
|
||||
font-weight: bolder;
|
||||
color: #b8b7b4;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
margin-top: 8rpx;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
16
pages.json
16
pages.json
@ -54,6 +54,22 @@
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarBackgroundColor": "#F5F6F7"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "attendanceStatistics",
|
||||
"style": {
|
||||
"navigationBarTitleText": "考勤统计",
|
||||
"navigationBarBackgroundColor": "#F5F6F7",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "roster",
|
||||
"style": {
|
||||
"navigationBarTitleText": "排班表",
|
||||
"navigationBarBackgroundColor": "#F5F6F7",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
484
pages/attendanceStatus/attendanceStatistics.vue
Normal file
484
pages/attendanceStatus/attendanceStatistics.vue
Normal file
@ -0,0 +1,484 @@
|
||||
<!-- 考勤统计 -->
|
||||
<template>
|
||||
<page-meta :page-style="'overflow:' + (showPopup ? 'hidden' : 'visible')"></page-meta>
|
||||
<view class="main">
|
||||
<!-- 自定义的页面顶部内容 -->
|
||||
<view class="summaryTab" :style="{ height: (menu.bottom + 14) + 'px' }">
|
||||
<view class="leftArrow" :style="{ top: (menu.top + ((menu.height - 24) / 2)) + 'px' }">
|
||||
<image class="img" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/navigation-left.svg"
|
||||
@click="handleBack"></image>
|
||||
<view class="picker" :style="{ top: (menu.bottom + 24) + 'px' }" @click="handleChangeService">
|
||||
<view class="selectService">
|
||||
<image class="img" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/fixed.svg"></image>
|
||||
<view class="select">
|
||||
<view class="content">
|
||||
<view class="uni-input">{{ serviceInfo.SERVERPART_NAME ? serviceInfo.SERVERPART_NAME :
|
||||
'' }}
|
||||
</view>
|
||||
<image class="rightArrow"
|
||||
src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/rightArrow.svg"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 考勤统计的列表 -->
|
||||
<view class="attendanceListBox" :style="{ paddingTop: (menu.bottom + 30) + 'px' }">
|
||||
<view class="onDutyPersonBoxHeader">
|
||||
<text class="title">考勤统计</text>
|
||||
<!-- 居中的日历时间 -->
|
||||
<view class="dateBox">
|
||||
<view class="centerDateBox">
|
||||
<image class="arrowIcon" src="https://eshangtech.com/cyy_DIB/leftArrowIcon.png"
|
||||
@click="handleChangeDate(2)" />
|
||||
<view class="center">
|
||||
<text class="date-text">{{ selectDate ? $util.cutDate(new Date(selectDate), 'YYYY-MM') : ""
|
||||
}}</text>
|
||||
<!-- <text class="date-icon">📅</text> -->
|
||||
</view>
|
||||
<image class="arrowIcon" src="https://eshangtech.com/cyy_DIB/rightArrowIcon.png"
|
||||
@click="handleChangeDate(1)" />
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
||||
|
||||
|
||||
<view class="attendanceStatisticsItem" v-for="(item, index) in attendanceStatisticsData" :key="index"
|
||||
:style="{
|
||||
borderTopRightRadius: index === 0 ? '0' : '',
|
||||
borderTopLeftRadius: index === 0 ? '0' : '',
|
||||
marginBottom: index + 1 === attendanceStatisticsData.length ? '0' : '24rpx'
|
||||
}">
|
||||
<view class="attendanceStatisticsItemTop">
|
||||
<view class="eventsItem" style="margin-bottom: 16rpx;">
|
||||
<view class="eventsHaveImgLabel">
|
||||
<image class="eventsHaveImg" src="https://eshangtech.com/cyy_DIB/personIcon.png" />
|
||||
<view class="eventsHaveLabel">联系人:</view>
|
||||
</view>
|
||||
<view class="eventsValue">{{ item.userName || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsItem">
|
||||
<view class="eventsHaveImgLabel">
|
||||
<image class="eventsHaveImg" src="https://eshangtech.com/cyy_DIB/phoneLabelIcon.png" />
|
||||
<view class="eventsHaveLabel">联系电话:</view>
|
||||
</view>
|
||||
<view class="eventsValue">{{ item.phone || "" }}</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="line"></view>
|
||||
|
||||
|
||||
<view class="attendanceStatisticsItemTop attendanceStatisticsItemBottom">
|
||||
<view class="eventsItem">
|
||||
<view class="eventsHaveImgLabel">
|
||||
<view class="eventsHaveLabel">当月排班:</view>
|
||||
</view>
|
||||
<view class="eventsValue">{{ item.scheduleTotal || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsItem">
|
||||
<view class="eventsHaveImgLabel">
|
||||
<view class="eventsHaveLabel">出勤:</view>
|
||||
</view>
|
||||
<view class="eventsValue">{{ item.attendTotal || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsItem">
|
||||
<view class="eventsHaveImgLabel">
|
||||
<view class="eventsHaveLabel">休息:</view>
|
||||
</view>
|
||||
<view class="eventsValue">{{ item.restTotal || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsItem">
|
||||
<view class="eventsHaveImgLabel">
|
||||
<view class="eventsHaveLabel">迟到:</view>
|
||||
</view>
|
||||
<view class="eventsValue">{{ item.lateTotal || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsItem" style="margin-bottom: 0;">
|
||||
<view class="eventsHaveImgLabel">
|
||||
<view class="eventsHaveLabel">早退:</view>
|
||||
</view>
|
||||
<view class="eventsValue">{{ item.earlyTotal || "" }}</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import request from "@/util/index.js";
|
||||
import { formatTime } from '@/util/dateTime/index.js'
|
||||
export default {
|
||||
data() {
|
||||
const nowDay = this.$util.cutDate(new Date(), 'YYYY-MM-DD') // 有数据的最近日期
|
||||
return {
|
||||
menu: {},
|
||||
serviceInfo: {},
|
||||
showPopup: false,
|
||||
selectDate: nowDay,// 选中的时间
|
||||
attendanceStatisticsData: [],
|
||||
isFirst: true,
|
||||
seatInfo: {}
|
||||
}
|
||||
},
|
||||
onLoad() {
|
||||
this.menu = uni.getMenuButtonBoundingClientRect()
|
||||
let currentService = uni.getStorageSync('currentService')
|
||||
this.serviceInfo = currentService
|
||||
this.handleGetServerpartDetail(currentService.Serverpart_ID || currentService.SERVERPART_ID)
|
||||
this.handleGetData(currentService.SERVERPART_NAME)
|
||||
},
|
||||
async onShow() {
|
||||
let currentService = uni.getStorageSync('currentService')
|
||||
if (currentService.Serverpart_ID !== this.serviceInfo.SERVERPART_ID && !this.isFirst) {
|
||||
this.handleGetServerpartDetail(currentService.Serverpart_ID)
|
||||
this.handleGetData(currentService.SERVERPART_NAME)
|
||||
}
|
||||
this.isFirst = false
|
||||
},
|
||||
methods: {
|
||||
// 拿到数据
|
||||
async handleGetData(SERVERPART_NAME) {
|
||||
let req = {
|
||||
bsessionKey: "0B30475A94674D608022885F7763959B",
|
||||
workTime: new Date(this.selectDate).getTime(),
|
||||
saName: SERVERPART_NAME || "",// 服务区名称
|
||||
phone: "",// 手机号码
|
||||
}
|
||||
uni.showLoading({
|
||||
title: "加载中..."
|
||||
})
|
||||
|
||||
const data = await new Promise((resolve, reject) => {
|
||||
uni.request({
|
||||
url: "https://fwqznxj.yciccloud.com:9081/ynjt/pushManage/queryUserSchedule",
|
||||
method: "POST",
|
||||
data: req,
|
||||
header: {
|
||||
"content-type": "application/x-www-form-urlencoded",
|
||||
},
|
||||
success(res) {
|
||||
resolve(res.data.data)
|
||||
},
|
||||
});
|
||||
});
|
||||
uni.hideLoading()
|
||||
|
||||
let list = data
|
||||
|
||||
if (list && list.length > 0) {
|
||||
list.forEach((item) => {
|
||||
item.dutyClockInTime = item.dutyClockInTime ? formatTime(item.dutyClockInTime) : ""
|
||||
item.offDutyClockInTime = item.offDutyClockInTime ? formatTime(item.offDutyClockInTime) : ""
|
||||
})
|
||||
}
|
||||
this.attendanceStatisticsData = list
|
||||
},
|
||||
// 查询服务区详情
|
||||
async handleGetServerpartDetail(id) {
|
||||
let currentService = uni.getStorageSync("currentService");
|
||||
let seatInfo = uni.getStorageSync("seatInfo");
|
||||
this.seatInfo = JSON.parse(seatInfo);
|
||||
let req = {
|
||||
ServerpartId: id || currentService.Serverpart_ID || currentService.SERVERPART_ID,
|
||||
latitude: this.seatInfo.latitude,
|
||||
longitude: this.seatInfo.longitude,
|
||||
};
|
||||
console.log('req', req);
|
||||
|
||||
uni.showLoading({
|
||||
title: "加载中...",
|
||||
});
|
||||
|
||||
const data = await request.$webJavaGet(
|
||||
"/third-party/getServerPartInfo",
|
||||
req
|
||||
);
|
||||
uni.hideLoading();
|
||||
|
||||
let obj = data.Result_Data;
|
||||
this.serviceInfo = obj;
|
||||
this.$forceUpdate();
|
||||
|
||||
console.log('this.serviceInfo', this.serviceInfo);
|
||||
|
||||
},
|
||||
// 改变服务区
|
||||
handleChangeService() {
|
||||
this.$util.toNextRoute("navigateTo", "/pages/map/index?type=attendanceStatus");
|
||||
},
|
||||
handleBack() {
|
||||
uni.navigateBack({
|
||||
delta: 1
|
||||
});
|
||||
},
|
||||
// 修改日期
|
||||
async handleChangeDate(type) {
|
||||
this.attendanceStatisticsData = []
|
||||
// type 1 加一天 2 减一天
|
||||
// 兼容 iOS,把 2025-08-15 转成 2025/08/15
|
||||
const cur = new Date((this.selectDate || '').replace(/-/g, '/'));
|
||||
if (Number.isNaN(cur.getTime())) return;
|
||||
|
||||
// 1:加一月;2:减一月;其他:不变
|
||||
const delta = type === 1 ? 1 : (type === 2 ? -1 : 0);
|
||||
|
||||
// 目标月份的最后一天:new Date(年, 目标月+1, 0)
|
||||
const last = new Date(cur.getFullYear(), cur.getMonth() + delta + 1, 0);
|
||||
|
||||
const y = last.getFullYear();
|
||||
const m = String(last.getMonth() + 1).padStart(2, '0');
|
||||
const d = String(last.getDate()).padStart(2, '0');
|
||||
|
||||
this.selectDate = `${y}-${m}-${d}`;
|
||||
await this.handleGetData(this.serviceInfo.SERVERPART_NAME)
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
@bg: #f8f9fa;
|
||||
@muted: #666;
|
||||
@card: #fff;
|
||||
@shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
||||
@primary: #27B25F;
|
||||
@primary2: #4CCC7F;
|
||||
@ok: #2ed573;
|
||||
@warn: #ff9f43;
|
||||
@danger: #ff4757;
|
||||
|
||||
.main {
|
||||
width: 100vw;
|
||||
min-height: 100vh;
|
||||
background-color: #f0f2f3;
|
||||
box-sizing: border-box;
|
||||
padding-bottom: constant(safe-area-inset-bottom);
|
||||
padding-bottom: env(safe-area-inset-bottom);
|
||||
|
||||
.summaryTab {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100vw;
|
||||
// background: #fff;
|
||||
background-image: url("https://eshangtech.com/minTestImg/pageBg.png");
|
||||
z-index: 99;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
padding-bottom: 16px;
|
||||
|
||||
.leftArrow {
|
||||
width: 100%;
|
||||
height: 24px;
|
||||
position: absolute;
|
||||
// left: 16px;
|
||||
z-index: 99999999999;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 0 32rpx;
|
||||
|
||||
.img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin-right: 8px;
|
||||
z-index: 99;
|
||||
}
|
||||
|
||||
.picker {
|
||||
.selectService {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.img {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.select {
|
||||
height: 32px;
|
||||
background: #fff;
|
||||
border-radius: 0 16px 16px 0;
|
||||
transform: translateX(-40px);
|
||||
box-sizing: border-box;
|
||||
padding-left: 35px;
|
||||
padding-right: 8rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.content {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.uni-input {
|
||||
padding: 0;
|
||||
background: transparent;
|
||||
font-size: 28rpx;
|
||||
font-family: PingFangSC-Semibold, PingFang SC;
|
||||
font-weight: 600;
|
||||
color: #160002;
|
||||
}
|
||||
|
||||
.area {
|
||||
font-size: 12px;
|
||||
font-family: PingFangSC-Regular, PingFang SC;
|
||||
font-weight: 400;
|
||||
color: #786B6C;
|
||||
line-height: 40px;
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
.rightArrow {
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
}
|
||||
|
||||
.noticeText {
|
||||
font-size: 24rpx;
|
||||
font-family: PingFangSC, PingFang SC;
|
||||
font-weight: 400;
|
||||
color: #B6BACB;
|
||||
line-height: 40rpx;
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.attendanceListBox {
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
padding: 0 32rpx;
|
||||
|
||||
.onDutyPersonBoxHeader {
|
||||
background: @bg;
|
||||
padding: 0 30rpx;
|
||||
border-bottom: 1rpx solid #e9ecef;
|
||||
font-weight: 700;
|
||||
font-size: 28rpx;
|
||||
color: #2c3e50;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
border-top-left-radius: 8rpx;
|
||||
border-top-right-radius: 8rpx;
|
||||
|
||||
|
||||
.dateBox {
|
||||
box-sizing: border-box;
|
||||
padding: 16rpx 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
.centerDateBox {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10rpx;
|
||||
padding: 10rpx 20rpx;
|
||||
border-radius: 30rpx;
|
||||
background-color: #fff;
|
||||
// border: 2rpx solid #27B35F;
|
||||
// background: rgba(255, 255, 255, .15);
|
||||
|
||||
.arrowIcon {
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
}
|
||||
|
||||
.center {
|
||||
.date-text {
|
||||
font-size: 28rpx;
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.attendanceStatisticsItem {
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
padding: 24rpx;
|
||||
box-shadow: @shadow;
|
||||
border-radius: 8rpx;
|
||||
background-color: #fff;
|
||||
|
||||
.attendanceStatisticsItemTop {
|
||||
width: 100%;
|
||||
flex-wrap: wrap;
|
||||
|
||||
.eventsItem {
|
||||
width: 50%;
|
||||
display: inline-block;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.eventsHaveImgLabel {
|
||||
display: flex;
|
||||
width: 200rpx;
|
||||
align-items: center;
|
||||
|
||||
.eventsHaveImg {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
margin-right: 16rpx;
|
||||
margin-top: 6rpx;
|
||||
}
|
||||
|
||||
.eventsHaveLabel {
|
||||
width: 154rpx;
|
||||
font-size: 24rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.eventsLabel {
|
||||
width: 200rpx;
|
||||
text-align: left;
|
||||
font-size: 24rpx;
|
||||
}
|
||||
|
||||
.eventsValue {
|
||||
flex: 1;
|
||||
font-size: 24rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.line {
|
||||
width: 100%;
|
||||
height: 2rpx;
|
||||
background-color: #dad9d3;
|
||||
margin: 24rpx 0;
|
||||
|
||||
}
|
||||
|
||||
.attendanceStatisticsItemBottom {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
|
||||
.eventsItem {
|
||||
margin-bottom: 16rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -5,28 +5,27 @@
|
||||
<view class="emergencyItem" v-for="(item, index) in showList" :key="index" @click="handleShowDetail(item)"
|
||||
:style="{
|
||||
marginBottom: index + 1 === showList.length ? '0' : '',
|
||||
border: item.status === 1 ? '2rpx solid #f4db9c' : item.status === 2 ? '2rpx solid #d3d3d3' : ''
|
||||
border: item.state === '完成' ? '2rpx solid #f4db9c' : item.state === '处理中' ? '2rpx solid #d3d3d3' : ''
|
||||
}">
|
||||
<view class="emergencyItemTitle">
|
||||
<view class="emergencyItemTitleLeft">
|
||||
{{ type === 1 ? item.title || "" : type === 2 ? item.service || "" : "" }}
|
||||
{{ type === 1 ? item.title || "" : type === 2 ? item.type || "" : "" }}
|
||||
</view>
|
||||
<view class="emergencyItemTitleRight">
|
||||
<view class="emergencyItemStatus" :style="{
|
||||
background: item.status === 1 ? '#ecbd44' : item.status === 2 ? '#d3d3d3' : '',
|
||||
color: item.status === 1 ? '#fff' : item.status === 2 ? '#fff' : ''
|
||||
<view class="emergencyItemStatus" v-if="item.state" :style="{
|
||||
background: item.state === '完成' ? '#ecbd44' : item.state === '处理中' ? '#d3d3d3' : '',
|
||||
color: item.state === '完成' ? '#fff' : item.state === '处理中' ? '#fff' : ''
|
||||
}">
|
||||
{{ item.status === 1 ? '已完成' : item.status ===
|
||||
2 ? '处理中' : '' }}</view>
|
||||
{{ item.state }}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="emergencyDesc">{{ item.desc || "" }}</view>
|
||||
<view class="emergencyDesc">{{ item.sceneOverview || "" }}</view>
|
||||
|
||||
<view class="line"></view>
|
||||
|
||||
<view class="otherMessageRow">
|
||||
<image class="otherMessageIcon" src="https://eshangtech.com/cyy_DIB/personIcon.png" />
|
||||
<view class="otherMessageValue">{{ item.person }}</view>
|
||||
<view class="otherMessageValue">{{ item.userName || item.createUserName }}</view>
|
||||
</view>
|
||||
|
||||
<view class="otherMessageRow">
|
||||
@ -36,12 +35,13 @@
|
||||
|
||||
<view class="otherMessageRow" style="margin-bottom: 0;">
|
||||
<image class="otherMessageIcon" src="https://eshangtech.com/cyy_DIB/timeIcon.png" />
|
||||
<view class="otherMessageValue">{{ item.time }}</view>
|
||||
<view class="otherMessageValue">{{ item.createTime }}</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
||||
|
||||
<view class="noDataBox" v-if="!isLoading && !(showList && showList.length > 0)">
|
||||
<noData :type="1" :text="'暂无数据'" />
|
||||
</view>
|
||||
|
||||
<!-- <view :class="item.status === 1 ? 'event-item left-ok' : item.status === 2 ? 'event-item' : ''"
|
||||
v-for="(item, index) in showList" :key="index" @click="handleShowDetail(item)">
|
||||
@ -150,7 +150,7 @@
|
||||
<image class="eventsHaveImg" src="https://eshangtech.com/cyy_DIB/personIcon.png" />
|
||||
<view class="eventsHaveLabel">联系人:</view>
|
||||
</view>
|
||||
<view class="eventsValue">{{ eventsDetail.person || "" }}</view>
|
||||
<view class="eventsValue">{{ eventsDetail.createUserName || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsItem">
|
||||
<view class="eventsHaveImgLabel">
|
||||
@ -164,11 +164,11 @@
|
||||
|
||||
<view class="eventsItem">
|
||||
<view class="eventsLabel">事件片区:</view>
|
||||
<view class="eventsValue">{{ eventsDetail.area || "" }}</view>
|
||||
<view class="eventsValue">{{ eventsDetail.belongArea || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsItem">
|
||||
<view class="eventsLabel">事件服务区:</view>
|
||||
<view class="eventsValue">{{ eventsDetail.service || "" }}</view>
|
||||
<view class="eventsValue">{{ eventsDetail.saName || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsItem">
|
||||
<view class="eventsLabel">类型:</view>
|
||||
@ -176,7 +176,7 @@
|
||||
</view>
|
||||
<view class="eventsItem">
|
||||
<view class="eventsLabel">问题描述:</view>
|
||||
<view class="eventsValue">{{ eventsDetail.desc || "" }}</view>
|
||||
<view class="eventsValue">{{ eventsDetail.describe || "" }}</view>
|
||||
</view>
|
||||
|
||||
|
||||
@ -184,36 +184,36 @@
|
||||
|
||||
<view class="eventsItem">
|
||||
<view class="eventsLabel">协调处理结果:</view>
|
||||
<view class="eventsValue">{{ eventsDetail.startRes || "" }}</view>
|
||||
<view class="eventsValue">{{ eventsDetail.coorResult || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsItem">
|
||||
<view class="eventsLabel">办理人:</view>
|
||||
<view class="eventsValue">{{ eventsDetail.startPerson || "" }}</view>
|
||||
<view class="eventsValue">{{ eventsDetail.coorUserName || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsItem">
|
||||
<view class="eventsLabel">办理完成时间:</view>
|
||||
<view class="eventsValue">{{ eventsDetail.startTime || "" }}</view>
|
||||
<view class="eventsValue">{{ eventsDetail.coorEndTime || "" }}</view>
|
||||
</view>
|
||||
|
||||
<view class="eventsSmallTitle">经营公司协调处理情况</view>
|
||||
|
||||
<view class="eventsItem">
|
||||
<view class="eventsLabel">协调处理结果:</view>
|
||||
<view class="eventsPic">{{ eventsDetail.endRes || "" }}</view>
|
||||
<view class="eventsPic">{{ eventsDetail.companyResult || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsItem">
|
||||
<view class="eventsLabel">办理人:</view>
|
||||
<view class="eventsValue">{{ eventsDetail.endPerson || "" }}</view>
|
||||
<view class="eventsValue">{{ eventsDetail.companyUserName || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsItem">
|
||||
<view class="eventsLabel">办理完成时间:</view>
|
||||
<view class="eventsValue">{{ eventsDetail.endTime || "" }}</view>
|
||||
<view class="eventsValue">{{ eventsDetail.companyEndTime || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsItemPic">
|
||||
<view class="eventsLabel">事件现场照片:</view>
|
||||
<view class="eventsPic" v-if="eventsDetail.imgList && eventsDetail.imgList.length > 0">
|
||||
<view class="eventsPicItem" v-for="(item, index) in eventsDetail.imgList" :key="index"
|
||||
@click="showImg(eventsDetail.imgList, index)">
|
||||
<view class="eventsPic" v-if="eventsDetail.companyFileUp && eventsDetail.companyFileUp.length > 0">
|
||||
<view class="eventsPicItem" v-for="(item, index) in eventsDetail.companyFileUp" :key="index"
|
||||
@click="showImg(eventsDetail.companyFileUp, index)">
|
||||
<image class="eventsPicImg" :src="item.url" />
|
||||
|
||||
</view>
|
||||
@ -225,89 +225,96 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { formatTime } from '@/util/dateTime/index.js'
|
||||
import noData from '../../components/noData.vue'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
dataList: [
|
||||
{
|
||||
title: "中和停车区下行停水",
|
||||
time: "2023-09-26 13:30:38",
|
||||
area: "昭通片区管理补",// 片区
|
||||
service: "中和加油站-上行",// 事件服务区
|
||||
eventType: "事件类型1",// 事件类型
|
||||
person: "徐琴",// 联系人
|
||||
phone: "13408871099",//联系电话
|
||||
theInjured: "",// 受伤人数
|
||||
haveTime: "待定",// 处理用时
|
||||
diePerson: "0",//死亡人数
|
||||
desc: "水泵房故障,导致停水,急需处理",//事件现场概况
|
||||
lossDesc: "因突发情况 卫生间卫生无法保障",// 事件损失情况
|
||||
res: "已联系施工方,未处理",//处理结果
|
||||
imgList: [{ url: "https://eshangtech.com/cyy_DIB/1695785143848.jpg" }],// 事件现场照片
|
||||
status: 1,
|
||||
},
|
||||
{
|
||||
title: "楼坝服务区停水",
|
||||
time: "2023-08-02 13:57:27",
|
||||
area: "昭通片区管理补",// 片区
|
||||
service: "楼坝服务区-下行",// 事件服务区
|
||||
eventType: "事件类型1",// 事件类型
|
||||
person: "孔令婷",// 联系人
|
||||
phone: "19987196597",//联系电话
|
||||
theInjured: "",// 受伤人数
|
||||
haveTime: "7小时",// 处理用时
|
||||
diePerson: "0",//死亡人数
|
||||
desc: "楼坝街道主水管道被路面改造施工的挖机挖断,目前正在抢修中,预计7小时后可正常供水,服务区现用水箱里的储水进行供水。",//事件现场概况
|
||||
lossDesc: "无",// 事件损失情况
|
||||
res: "正在进行抢修,预计7小时后可正常供水,服务区现用水箱里的储水进行供水。",//处理结果
|
||||
imgList: null,// 事件现场照片
|
||||
status: 2,
|
||||
} // status 1 已完成 2 处理中
|
||||
// {
|
||||
// title: "中和停车区下行停水",
|
||||
// time: "2023-09-26 13:30:38",
|
||||
// area: "昭通片区管理补",// 片区
|
||||
// service: "中和加油站-上行",// 事件服务区
|
||||
// eventType: "事件类型1",// 事件类型
|
||||
// person: "徐琴",// 联系人
|
||||
// phone: "13408871099",//联系电话
|
||||
// theInjured: "",// 受伤人数
|
||||
// haveTime: "待定",// 处理用时
|
||||
// diePerson: "0",//死亡人数
|
||||
// desc: "水泵房故障,导致停水,急需处理",//事件现场概况
|
||||
// lossDesc: "因突发情况 卫生间卫生无法保障",// 事件损失情况
|
||||
// res: "已联系施工方,未处理",//处理结果
|
||||
// imgList: [{ url: "https://eshangtech.com/cyy_DIB/1695785143848.jpg" }],// 事件现场照片
|
||||
// status: 1,
|
||||
// },
|
||||
// {
|
||||
// title: "楼坝服务区停水",
|
||||
// time: "2023-08-02 13:57:27",
|
||||
// area: "昭通片区管理补",// 片区
|
||||
// service: "楼坝服务区-下行",// 事件服务区
|
||||
// eventType: "事件类型1",// 事件类型
|
||||
// person: "孔令婷",// 联系人
|
||||
// phone: "19987196597",//联系电话
|
||||
// theInjured: "",// 受伤人数
|
||||
// haveTime: "7小时",// 处理用时
|
||||
// diePerson: "0",//死亡人数
|
||||
// desc: "楼坝街道主水管道被路面改造施工的挖机挖断,目前正在抢修中,预计7小时后可正常供水,服务区现用水箱里的储水进行供水。",//事件现场概况
|
||||
// lossDesc: "无",// 事件损失情况
|
||||
// res: "正在进行抢修,预计7小时后可正常供水,服务区现用水箱里的储水进行供水。",//处理结果
|
||||
// imgList: null,// 事件现场照片
|
||||
// status: 2,
|
||||
// } // status 1 已完成 2 处理中
|
||||
],
|
||||
everyDayList: [
|
||||
{
|
||||
area: "版纳片区管理部", // 事件片区:
|
||||
service: "小勐养服务区-上行", // 事件服务区:
|
||||
time: "2024-09-12 09:14:47",
|
||||
type: "其他", // 类型:
|
||||
desc: "小勐养服务区上行卫生间5号蹲坑隔板底座损坏,已修复。",// 问题描述:
|
||||
person: "杨杰",// 联系人:
|
||||
phone: "13628710377",// 联系电话:
|
||||
startRes: "修复完毕,建议结束流程",// 协调处理结果:
|
||||
startPerson: "刀天华",// 办理人:
|
||||
startTime: "2024-09-12 09:43:53",// 办理完成时间:
|
||||
endRes: "",// 协调处理结果:
|
||||
endPerson: "",// 办理人:
|
||||
endTime: "流转后自动显示",// 办理完成时间:
|
||||
imgList: [
|
||||
{ url: "https://eshangtech.com/cyy_DIB/1726104387683_mmexport1726104287279.jpg" },
|
||||
{ url: "https://eshangtech.com/cyy_DIB/1726104504808_IMG_20240912_091809.jpg" }
|
||||
],// 事件现场照片
|
||||
status: 1,
|
||||
},
|
||||
{
|
||||
area: "昆东片区管理部", // 事件片区:
|
||||
service: "阳宗服务区-上行", // 事件服务区:
|
||||
time: "2024-08-08 13:45:25",
|
||||
type: "维修上报", // 类型:
|
||||
desc: "关于昆东片区管理部阳宗服务区上行更换入口车辆引导标识牌的请示",// 问题描述:
|
||||
person: "唐林波",// 联系人:
|
||||
phone: "15287959258",// 联系电话:
|
||||
startRes: "按照公司相关流程进行更换标识牌审批事宜",// 协调处理结果:
|
||||
startPerson: "申锐娟",// 办理人:
|
||||
startTime: "流转后自动显示",// 办理完成时间:
|
||||
endRes: "",// 协调处理结果:
|
||||
endPerson: "",// 办理人:
|
||||
endTime: "流转后自动显示",// 办理完成时间:
|
||||
imgList: null,// 事件现场照片
|
||||
status: 2,
|
||||
}
|
||||
// {
|
||||
// area: "版纳片区管理部", // 事件片区:
|
||||
// service: "小勐养服务区-上行", // 事件服务区:
|
||||
// time: "2024-09-12 09:14:47",
|
||||
// type: "其他", // 类型:
|
||||
// desc: "小勐养服务区上行卫生间5号蹲坑隔板底座损坏,已修复。",// 问题描述:
|
||||
// person: "杨杰",// 联系人:
|
||||
// phone: "13628710377",// 联系电话:
|
||||
// startRes: "修复完毕,建议结束流程",// 协调处理结果:
|
||||
// startPerson: "刀天华",// 办理人:
|
||||
// startTime: "2024-09-12 09:43:53",// 办理完成时间:
|
||||
// endRes: "",// 协调处理结果:
|
||||
// endPerson: "",// 办理人:
|
||||
// endTime: "流转后自动显示",// 办理完成时间:
|
||||
// imgList: [
|
||||
// { url: "https://eshangtech.com/cyy_DIB/1726104387683_mmexport1726104287279.jpg" },
|
||||
// { url: "https://eshangtech.com/cyy_DIB/1726104504808_IMG_20240912_091809.jpg" }
|
||||
// ],// 事件现场照片
|
||||
// status: 1,
|
||||
// },
|
||||
// {
|
||||
// area: "昆东片区管理部", // 事件片区:
|
||||
// service: "阳宗服务区-上行", // 事件服务区:
|
||||
// time: "2024-08-08 13:45:25",
|
||||
// type: "维修上报", // 类型:
|
||||
// desc: "关于昆东片区管理部阳宗服务区上行更换入口车辆引导标识牌的请示",// 问题描述:
|
||||
// person: "唐林波",// 联系人:
|
||||
// phone: "15287959258",// 联系电话:
|
||||
// startRes: "按照公司相关流程进行更换标识牌审批事宜",// 协调处理结果:
|
||||
// startPerson: "申锐娟",// 办理人:
|
||||
// startTime: "流转后自动显示",// 办理完成时间:
|
||||
// endRes: "",// 协调处理结果:
|
||||
// endPerson: "",// 办理人:
|
||||
// endTime: "流转后自动显示",// 办理完成时间:
|
||||
// imgList: null,// 事件现场照片
|
||||
// status: 2,
|
||||
// }
|
||||
],
|
||||
showList: [],
|
||||
eventsDetail: null,
|
||||
type: 0
|
||||
type: 0,
|
||||
serviceInfo: {},
|
||||
isLoading: false
|
||||
}
|
||||
},
|
||||
components: {
|
||||
noData
|
||||
},
|
||||
onLoad(query) {
|
||||
if (query.type) {
|
||||
this.type = Number(query.type)
|
||||
@ -320,8 +327,81 @@ export default {
|
||||
})
|
||||
}
|
||||
}
|
||||
let currentService = uni.getStorageSync('currentService')
|
||||
this.serviceInfo = currentService
|
||||
|
||||
this.handleGetData()
|
||||
},
|
||||
methods: {
|
||||
// 拿到数据
|
||||
async handleGetData() {
|
||||
let data = []
|
||||
uni.showLoading({
|
||||
title: "加载中..."
|
||||
})
|
||||
this.isLoading = true
|
||||
if (this.type === 1) {
|
||||
this.showList = []
|
||||
const req = {
|
||||
bsessionKey: "EA65F66FA29B47FD8072A4AFC66967B3",
|
||||
saName: this.serviceInfo.SERVERPART_NAME
|
||||
}
|
||||
const data = await new Promise((resolve, reject) => {
|
||||
uni.request({
|
||||
url: "https://fwqznxj.yciccloud.com:9081/ynjt/pushManage/queryEmergency",
|
||||
method: "POST",
|
||||
data: req,
|
||||
header: {
|
||||
"content-type": "application/x-www-form-urlencoded",
|
||||
},
|
||||
success(res) {
|
||||
resolve(res.data.data)
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
let list = data
|
||||
if (list && list.length > 0) {
|
||||
list.forEach((item) => {
|
||||
item.imgUp = item.imgUp ? JSON.parse(item.imgUp) : ""
|
||||
item.createTime = formatTime(item.createTime)
|
||||
})
|
||||
}
|
||||
this.showList = list
|
||||
|
||||
} else {
|
||||
this.showList = []
|
||||
const req = {
|
||||
bsessionKey: "0DAF3A5982D54A619D4B63A34CA20C55",
|
||||
saName: this.serviceInfo.SERVERPART_NAME
|
||||
}
|
||||
const data = await new Promise((resolve, reject) => {
|
||||
uni.request({
|
||||
url: "https://fwqznxj.yciccloud.com:9081/ynjt/pushManage/queryQuestions",
|
||||
method: "POST",
|
||||
data: req,
|
||||
header: {
|
||||
"content-type": "application/x-www-form-urlencoded",
|
||||
},
|
||||
success(res) {
|
||||
resolve(res.data.data)
|
||||
},
|
||||
});
|
||||
});
|
||||
let list = data
|
||||
if (list && list.length > 0) {
|
||||
list.forEach((item) => {
|
||||
item.fileUp = item.fileUp ? JSON.parse(item.fileUp) : ""
|
||||
item.createTime = item.createTime ? formatTime(item.createTime) : ""
|
||||
item.coorEndTime = item.coorEndTime ? formatTime(item.coorEndTime) : ""
|
||||
})
|
||||
}
|
||||
this.showList = data
|
||||
}
|
||||
console.log('this.showListthis.showListthis.showListthis.showList', this.showList);
|
||||
uni.hideLoading()
|
||||
this.isLoading = false
|
||||
},
|
||||
handleShowDetail(obj) {
|
||||
// this.$refs.popup.open('center')
|
||||
// this.eventsDetail = obj
|
||||
@ -410,6 +490,13 @@ export default {
|
||||
|
||||
.emergencyList {
|
||||
padding: 30rpx;
|
||||
.noDataBox{
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.emergencyItem {
|
||||
width: 100%;
|
||||
|
||||
@ -5,15 +5,14 @@
|
||||
|
||||
<view class="userDetailBox" :style="{ marginTop: pageType === 1 ? '' : '0' }">
|
||||
<view class="userDetailBoxTop">
|
||||
<view class="userDetailBoxService">{{ detailObj.service || "" }}</view>
|
||||
<view class="userDetailBoxService">{{ detailObj.saName || "" }}</view>
|
||||
|
||||
<view class="userDetailBoxServiceRight">
|
||||
<view class="userDetailBoxStatus" :style="{
|
||||
background: detailObj.status === 1 ? '#ecbd44' : detailObj.status === 2 ? '#d3d3d3' : '',
|
||||
color: detailObj.status === 1 ? '#fff' : detailObj.status === 2 ? '#fff' : ''
|
||||
background: detailObj.state === '完成' ? '#ecbd44' : detailObj.state === '处理中' ? '#d3d3d3' : '',
|
||||
color: detailObj.state === '完成' ? '#fff' : detailObj.state === '处理中' ? '#fff' : ''
|
||||
}">
|
||||
{{ detailObj.status === 1 ? '已完成' : detailObj.status ===
|
||||
2 ? '处理中' : '' }}</view>
|
||||
{{ detailObj.state }}</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@ -22,7 +21,7 @@
|
||||
<image class="eventsHaveImg" src="https://eshangtech.com/cyy_DIB/personIcon.png" />
|
||||
<view class="eventsHaveLabel">联系人:</view>
|
||||
</view>
|
||||
<view class="eventsValue">{{ detailObj.person || "" }}</view>
|
||||
<view class="eventsValue">{{ detailObj.userName || detailObj.createUserName || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsItem">
|
||||
<view class="eventsHaveImgLabel">
|
||||
@ -34,9 +33,10 @@
|
||||
<view class="eventsItem" style="margin-bottom: 0;">
|
||||
<view class="eventsHaveImgLabel">
|
||||
<image class="eventsHaveImg" src="https://eshangtech.com/cyy_DIB/timeIcon.png" />
|
||||
<view class="eventsHaveLabel">处理用时:</view>
|
||||
<view class="eventsHaveLabel">{{ pageType === 1 ? '处理用时:' : pageType === 2 ? '创建时间' : '' }}
|
||||
</view>
|
||||
<view class="eventsValue">{{ detailObj.haveTime || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsValue">{{ detailObj.handlingTime || detailObj.createTime || "" }}</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
@ -53,7 +53,7 @@
|
||||
</view> -->
|
||||
<view class="eventsItem">
|
||||
<view class="eventsLabel">事件片区:</view>
|
||||
<view class="eventsValue">{{ detailObj.area || "" }}</view>
|
||||
<view class="eventsValue">{{ detailObj.belongArea || "" }}</view>
|
||||
</view>
|
||||
<!-- <view class="eventsItem">
|
||||
<view class="eventsLabel">事件服务区:</view>
|
||||
@ -66,22 +66,23 @@
|
||||
</view> -->
|
||||
<view class="eventsItem">
|
||||
<view class="eventsLabel">事件概况:</view>
|
||||
<view class="eventsValue">{{ detailObj.desc || "" }}</view>
|
||||
<view class="eventsValue">{{ detailObj.sceneOverview || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsItem">
|
||||
<view class="eventsLabel">事件损失情况:</view>
|
||||
<view class="eventsValue">{{ detailObj.lossDesc || "" }}</view>
|
||||
<view class="eventsValue">{{ detailObj.lossSituation || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsItem">
|
||||
<view class="eventsLabel">处理结果:</view>
|
||||
<view class="eventsValue">{{ detailObj.res || "" }}</view>
|
||||
<view class="eventsValue">{{ detailObj.handlingResult || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsItemPic">
|
||||
<view class="eventsLabel">事件现场照片:</view>
|
||||
<view class="eventsPic" v-if="detailObj.imgList && detailObj.imgList.length > 0">
|
||||
<view class="eventsPicItem" v-for="(item, index) in detailObj.imgList" :key="index"
|
||||
@click="showImg(detailObj.imgList, index)">
|
||||
<image class="eventsPicImg" :src="item.url" />
|
||||
<view class="eventsPic" v-if="detailObj.imgUp && detailObj.imgUp.length > 0">
|
||||
<view class="eventsPicItem" v-for="(item, index) in detailObj.imgUp" :key="index"
|
||||
@click="showImg(detailObj.imgUp, index)">
|
||||
<image class="eventsPicImg"
|
||||
:src="'https://fwqznxj.yciccloud.com:9081/fileDownloadApi/bsys/document/docDownloadAction?fileId=' + item.fileID" />
|
||||
|
||||
</view>
|
||||
</view>
|
||||
@ -93,7 +94,7 @@
|
||||
<view class="userDetailBox noBoxShow">
|
||||
<view class="eventsItem">
|
||||
<view class="eventsLabel">事件片区:</view>
|
||||
<view class="eventsValue">{{ detailObj.area || "" }}</view>
|
||||
<view class="eventsValue">{{ detailObj.belongArea || "" }}</view>
|
||||
</view>
|
||||
<!-- <view class="eventsItem">
|
||||
<view class="eventsLabel">事件服务区:</view>
|
||||
@ -105,7 +106,7 @@
|
||||
</view>
|
||||
<view class="eventsItem" style="margin-bottom: 0;">
|
||||
<view class="eventsLabel">问题描述:</view>
|
||||
<view class="eventsValue">{{ detailObj.desc || "" }}</view>
|
||||
<view class="eventsValue">{{ detailObj.describe || "" }}</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@ -116,15 +117,15 @@
|
||||
<view class="detailBox" v-if="pageType === 2" style="padding-bottom: 24rpx;">
|
||||
<view class="eventsItem">
|
||||
<view class="eventsLabel">协调处理结果:</view>
|
||||
<view class="eventsValue">{{ detailObj.startRes || "" }}</view>
|
||||
<view class="eventsValue">{{ detailObj.coorResult || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsItem">
|
||||
<view class="eventsLabel">办理人:</view>
|
||||
<view class="eventsValue">{{ detailObj.startPerson || "" }}</view>
|
||||
<view class="eventsValue">{{ detailObj.coorUserName || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsItem" style="margin-bottom: 0;">
|
||||
<view class="eventsLabel">办理完成时间:</view>
|
||||
<view class="eventsValue">{{ detailObj.startTime || "" }}</view>
|
||||
<view class="eventsValue">{{ detailObj.coorEndTime || "" }}</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@ -133,29 +134,28 @@
|
||||
<view class="detailBox" v-if="pageType === 2" style="padding-bottom: 24rpx;">
|
||||
<view class="eventsItem">
|
||||
<view class="eventsLabel">协调处理结果:</view>
|
||||
<view class="eventsPic">{{ detailObj.endRes || "" }}</view>
|
||||
<view class="eventsPic">{{ detailObj.companyResult || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsItem">
|
||||
<view class="eventsLabel">办理人:</view>
|
||||
<view class="eventsValue">{{ detailObj.endPerson || "" }}</view>
|
||||
<view class="eventsValue">{{ detailObj.companyUserName || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsItem">
|
||||
<view class="eventsLabel">办理完成时间:</view>
|
||||
<view class="eventsValue">{{ detailObj.endTime || "" }}</view>
|
||||
<view class="eventsValue">{{ detailObj.companyEndTime || "" }}</view>
|
||||
</view>
|
||||
<view class="eventsItemPic" style="margin-bottom: 0;">
|
||||
<view class="eventsLabel">事件现场照片:</view>
|
||||
<view class="eventsPic" v-if="detailObj.imgList && detailObj.imgList.length > 0">
|
||||
<view class="eventsPicItem" v-for="(item, index) in detailObj.imgList" :key="index"
|
||||
@click="showImg(detailObj.imgList, index)">
|
||||
<image class="eventsPicImg" :src="item.url" />
|
||||
<view class="eventsPic" v-if="detailObj.fileUp && detailObj.fileUp.length > 0">
|
||||
<view class="eventsPicItem" v-for="(item, index) in detailObj.fileUp" :key="index"
|
||||
@click="showImg(detailObj.fileUp, index)">
|
||||
<image class="eventsPicImg"
|
||||
:src="'https://fwqznxj.yciccloud.com:9081/fileDownloadApi/bsys/document/docDownloadAction?fileId=' + item.fileID" />
|
||||
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
||||
</view>
|
||||
</template>
|
||||
<script>
|
||||
@ -170,6 +170,8 @@ export default {
|
||||
if (query.detail) {
|
||||
this.detailObj = JSON.parse(query.detail)
|
||||
}
|
||||
console.log('this.detailObjthis.detailObjthis.detailObjthis.detailObj', this.detailObj);
|
||||
|
||||
if (query.type) {
|
||||
this.pageType = Number(query.type)
|
||||
}
|
||||
@ -191,14 +193,14 @@ export default {
|
||||
console.log('indexindex', index);
|
||||
let urls = []
|
||||
list.forEach((item) => {
|
||||
urls.push(item.url)
|
||||
urls.push('https://fwqznxj.yciccloud.com:9081/fileDownloadApi/bsys/document/docDownloadAction?fileId=' + item.fileID)
|
||||
})
|
||||
|
||||
uni.previewImage({
|
||||
urls: urls,
|
||||
current: list[index].url,
|
||||
current: urls[index],
|
||||
});
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@ -67,24 +67,6 @@
|
||||
<uni-calendar ref="calendar" class="selectDateCalendar" :clear-date="true" :date="selectDate" :insert="false"
|
||||
:startDate="info.startDate" :range="info.range" @confirm="handleChangeTime" />
|
||||
|
||||
<!-- 人员类型的tab -->
|
||||
<view class="personTabBox">
|
||||
<view :class="selectTab === 1 ? 'personItem personItemSelect' : 'personItem '" @click="handleChangeTab(1)">
|
||||
<view class="personValue">3</view>
|
||||
<view class="personLabel">在岗人员</view>
|
||||
</view>
|
||||
|
||||
<view :class="selectTab === 2 ? 'personItem personItemSelect' : 'personItem '" @click="handleChangeTab(2)">
|
||||
<view class="personValue">4</view>
|
||||
<view class="personLabel">请假人员</view>
|
||||
</view>
|
||||
|
||||
<!-- <view :class="selectTab === 3 ? 'personItem personItemSelect' : 'personItem '" @click="handleChangeTab(3)">
|
||||
<view class="personValue">1</view>
|
||||
<view class="personLabel">值班经理</view>
|
||||
</view> -->
|
||||
</view>
|
||||
|
||||
|
||||
<view class="thingBox">
|
||||
<!-- 特情事件提醒横幅 -->
|
||||
@ -92,7 +74,7 @@
|
||||
<view class="emergency-header">
|
||||
<view class="emergency-title">
|
||||
<text>🚨 应急事件</text>
|
||||
<view class="emergency-count">{{ 2 }}</view>
|
||||
<!-- <view class="emergency-count">{{ 2 }}</view> -->
|
||||
</view>
|
||||
<!-- <text>👉</text> -->
|
||||
</view>
|
||||
@ -103,14 +85,33 @@
|
||||
<view class="emergency-header">
|
||||
<view class="emergency-title">
|
||||
<text>⚠️ 日常问题</text>
|
||||
<view class="emergency-count">{{ 2 }}</view>
|
||||
<!-- <view class="emergency-count">{{ 2 }}</view> -->
|
||||
</view>
|
||||
<!-- <text>👉</text> -->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 人员类型的tab -->
|
||||
<view class="personTabBox">
|
||||
<view :class="selectTab === 1 ? 'personItem personItemSelect' : 'personItem '" @click="handleChangeTab(1)">
|
||||
<view class="personValue">{{ onDutyPersonList && onDutyPersonList.length > 0 ? onDutyPersonList.length :
|
||||
0 }}
|
||||
</view>
|
||||
<view class="personLabel">在岗人员</view>
|
||||
</view>
|
||||
|
||||
<view :class="selectTab === 2 ? 'personItem personItemSelect' : 'personItem '" @click="handleChangeTab(2)">
|
||||
<view class="personValue">{{ EmployeesOnLeaveList && EmployeesOnLeaveList.length > 0 ?
|
||||
EmployeesOnLeaveList.length : 0 }}</view>
|
||||
<view class="personLabel">请假人员</view>
|
||||
</view>
|
||||
|
||||
<!-- <view :class="selectTab === 3 ? 'personItem personItemSelect' : 'personItem '" @click="handleChangeTab(3)">
|
||||
<view class="personValue">1</view>
|
||||
<view class="personLabel">值班经理</view>
|
||||
</view> -->
|
||||
</view>
|
||||
|
||||
<!-- 在岗人员 -->
|
||||
<view class="onDutyPersonBox">
|
||||
@ -144,17 +145,16 @@
|
||||
<view class="onDutyPersonList" v-if="selectTab === 1">
|
||||
<view class="onDutyPersonItem" v-for="(item, index) in onDutyPersonList" :key="index"
|
||||
@click="viewStaffDetails(item)">
|
||||
<view class="avatar">{{ item.name ? item.name.slice(0, 1) : "" }}</view>
|
||||
<view class="avatar">{{ item.userName ? item.userName.slice(0, 1) : "" }}</view>
|
||||
<view class="staffInfo">
|
||||
<view class="staffInfoLeft">
|
||||
<view class="staffInfoTop">
|
||||
<view class="staff-name">{{ item.name || "" }}</view>
|
||||
<view class="staff-role">{{ item.post || "" }}</view>
|
||||
<view class="staff-name">{{ item.userName || "" }}</view>
|
||||
<view class="staff-role" v-if="item.userJob">{{ item.userJob }}</view>
|
||||
</view>
|
||||
<view class="staff-status">
|
||||
<view class="status-badge status-online" v-if="item.status === 1">在岗</view>
|
||||
<view class="status-badge status-absentee" v-if="item.status === 5">旷工</view>
|
||||
<view class="status-badge status-beLate" v-if="item.status === 6">迟到</view>
|
||||
<view class="status-badge status-online" v-if="item.workType">{{ item.workType }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@ -169,17 +169,15 @@
|
||||
<view class="EmployeesOnLeaveList" v-if="selectTab === 2">
|
||||
<view class="EmployeesOnLeaveItem" v-for="(item, index) in EmployeesOnLeaveList" :key="index"
|
||||
@click="viewStaffDetails(item)">
|
||||
<view class="avatar">{{ item.name ? item.name.slice(0, 1) : "" }}</view>
|
||||
<view class="avatar">{{ item.userName ? item.userName.slice(0, 1) : "" }}</view>
|
||||
<view class="staffInfo">
|
||||
<view class="staffInfoLeft">
|
||||
<view class="staffInfoTop">
|
||||
<view class="staff-name">{{ item.name || "" }}</view>
|
||||
<view class="staff-role">{{ item.post || "" }}</view>
|
||||
<view class="staff-name">{{ item.userName || "" }}</view>
|
||||
<view class="staff-role">{{ item.userJob || "" }}</view>
|
||||
</view>
|
||||
<view class="staff-status">
|
||||
<view class="status-badge status-rest" v-if="item.status === 2">休息</view>
|
||||
<view class="status-badge status-adjust" v-if="item.status === 3">调休</view>
|
||||
<view class="status-badge status-leave" v-if="item.status === 4">请假</view>
|
||||
<view class="status-badge status-rest" v-if="item.workType">{{ item.workType }}</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@ -200,7 +198,7 @@
|
||||
<view class="staffInfoLeft">
|
||||
<view class="staffInfoTop">
|
||||
<view class="staff-name manager-name">{{ item.name || "" }}</view>
|
||||
<view class="staff-role manager-role">👑{{ item.post || "" }}</view>
|
||||
<view class="staff-role manager-role">👑{{ item.post || "-" }}</view>
|
||||
</view>
|
||||
<view class="staff-status">
|
||||
<view class="status-badge status-manager">值班中</view>
|
||||
@ -234,20 +232,20 @@
|
||||
<view class="userDetailBox">
|
||||
<view class="userAvatar">
|
||||
<image class="userAvatarIcon" v-if="userDetail.url" :src="userDetail.url" />
|
||||
<view class="userAvatarBox">{{ userDetail.name ? userDetail.name.slice(0, 1) : "" }}</view>
|
||||
<view class="userAvatarBox">{{ userDetail.userName ? userDetail.userName.slice(0, 1) : "" }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="userDetailRight">
|
||||
<view class="userDetailTop">
|
||||
<view class="userDetailName">{{ userDetail.name || "" }}</view>
|
||||
<view class="userDetailStatus" v-if="userDetail.status" :style="{
|
||||
background: userDetail.status === 1 ? '#27B25F' : '',
|
||||
color: userDetail.status === 1 ? '#fff' : '',
|
||||
}">{{ userDetail.status === 1 ? '在岗' :
|
||||
"" }}</view>
|
||||
<view class="userDetailName">{{ userDetail.userName || "" }}</view>
|
||||
<view class="userDetailStatus" v-if="userDetail.workType" :style="{
|
||||
background: userDetail.workType === '班' || userDetail.workType === '差' || userDetail.workType === '出' ? '#27B25F' : '#F6F6F6',
|
||||
color: userDetail.workType === '班' || userDetail.workType === '差' || userDetail.workType === '出' ? '#fff' : '#9FA6A3',
|
||||
}">{{ userDetail.workType }}</view>
|
||||
</view>
|
||||
<view class="userDetailPostBox">
|
||||
<span class="userDetailLabel">岗位:</span>
|
||||
<span class="userDetailValue">{{ userDetail.post || "" }}</span>
|
||||
<span class="userDetailValue">{{ userDetail.userJob || "-" }}</span>
|
||||
</view>
|
||||
<view class="userDetailPhoneBox">
|
||||
<span class="userDetailLabel">电话:</span>
|
||||
@ -261,38 +259,37 @@
|
||||
<view class="attendanceStatusBox">
|
||||
<view class="attendanceStatusItem">
|
||||
<view class="attendanceStatusLabel">当前排班信息:</view>
|
||||
<view class="attendanceStatusValue">{{ userDetail.status === 1 ? '班' : userDetail.status === 2 ?
|
||||
'休' : '' }}</view>
|
||||
<view class="attendanceStatusValue" v-if="userDetail.workType">{{ userDetail.workType }}</view>
|
||||
</view>
|
||||
<view class="attendanceStatusItem">
|
||||
<view class="attendanceStatusLabel">上班打卡地:</view>
|
||||
<view class="attendanceStatusValue">{{ userDetail.dutyPlace || "" }}</view>
|
||||
<!-- dutyPlace -->
|
||||
<view class="attendanceStatusValue">{{ userDetail.dutyClockInPlace || "" }}</view>
|
||||
<!-- dutyClockInPlace -->
|
||||
</view>
|
||||
<view class="attendanceStatusItem">
|
||||
<view class="attendanceStatusLabel">上班打卡时间:</view>
|
||||
<view class="attendanceStatusValue">{{ userDetail.dutyTime || "" }}</view>
|
||||
<!-- dutyTime -->
|
||||
<view class="attendanceStatusValue">{{ userDetail.dutyClockInTime || "" }}</view>
|
||||
<!-- dutyClockInTime -->
|
||||
</view>
|
||||
<view class="attendanceStatusItem">
|
||||
<view class="attendanceStatusLabel">迟到时长:</view>
|
||||
<view class="attendanceStatusValue">{{ userDetail.toLateTime || "" }}</view>
|
||||
<!-- toLateTime -->
|
||||
<view class="attendanceStatusValue">{{ userDetail.lateNum || "" }}</view>
|
||||
<!-- lateNum -->
|
||||
</view>
|
||||
<view class="attendanceStatusItem">
|
||||
<view class="attendanceStatusLabel">下班打卡地:</view>
|
||||
<view class="attendanceStatusValue">{{ userDetail.offWorkPlace || "" }}</view>
|
||||
<!-- offWorkPlace -->
|
||||
<view class="attendanceStatusValue">{{ userDetail.offDutyClockInPlace || "" }}</view>
|
||||
<!-- offDutyClockInPlace -->
|
||||
</view>
|
||||
<view class="attendanceStatusItem">
|
||||
<view class="attendanceStatusLabel">下班打卡时间:</view>
|
||||
<view class="attendanceStatusValue">{{ userDetail.offWorkTime || "" }}</view>
|
||||
<!-- offWorkTime -->
|
||||
<view class="attendanceStatusValue">{{ userDetail.offDutyClockInTime || "" }}</view>
|
||||
<!-- offDutyClockInTime -->
|
||||
</view>
|
||||
<view class="attendanceStatusItem">
|
||||
<view class="attendanceStatusLabel">早退时长:</view>
|
||||
<view class="attendanceStatusValue">{{ userDetail.earlyWorkTime || "" }}</view>
|
||||
<!-- earlyWorkTime -->
|
||||
<view class="attendanceStatusValue">{{ userDetail.earlyNum || "" }}</view>
|
||||
<!-- earlyNum -->
|
||||
</view>
|
||||
</view>
|
||||
<view class="line"></view>
|
||||
@ -302,28 +299,28 @@
|
||||
<view class="attendanceStatusBox">
|
||||
<view class="attendanceStatusItem">
|
||||
<view class="attendanceStatusLabel">当月排班天数:</view>
|
||||
<view class="attendanceStatusValue">{{ userDetail.monthDay || "" }}</view>
|
||||
<!-- monthDay -->
|
||||
<view class="attendanceStatusValue">{{ userDetail.scheduleTotal || "" }}</view>
|
||||
<!-- scheduleTotal -->
|
||||
</view>
|
||||
<view class="attendanceStatusItem">
|
||||
<view class="attendanceStatusLabel">出勤天数:</view>
|
||||
<view class="attendanceStatusValue">{{ userDetail.AttendanceDay || "" }}</view>
|
||||
<!-- AttendanceDay -->
|
||||
<view class="attendanceStatusValue">{{ userDetail.attendTotal || "" }}</view>
|
||||
<!-- attendTotal -->
|
||||
</view>
|
||||
<view class="attendanceStatusItem">
|
||||
<view class="attendanceStatusLabel">休息天数:</view>
|
||||
<view class="attendanceStatusValue">{{ userDetail.leaveDay || "" }}</view>
|
||||
<!-- leaveDay -->
|
||||
<view class="attendanceStatusValue">{{ userDetail.restTotal || "" }}</view>
|
||||
<!-- restTotal -->
|
||||
</view>
|
||||
<view class="attendanceStatusItem">
|
||||
<view class="attendanceStatusLabel">迟到天数:</view>
|
||||
<view class="attendanceStatusValue">{{ userDetail.beLateDay || "" }}</view>
|
||||
<!-- beLateDay -->
|
||||
<view class="attendanceStatusValue">{{ userDetail.lateTotal || "" }}</view>
|
||||
<!-- lateTotal -->
|
||||
</view>
|
||||
<view class="attendanceStatusItem">
|
||||
<view class="attendanceStatusLabel">早退天数:</view>
|
||||
<view class="attendanceStatusValue">{{ userDetail.leaveEarlyDay || "" }}</view>
|
||||
<!-- leaveEarlyDay -->
|
||||
<view class="attendanceStatusValue">{{ userDetail.earlyTotal || "" }}</view>
|
||||
<!-- earlyTotal -->
|
||||
</view>
|
||||
|
||||
</view>
|
||||
@ -334,6 +331,7 @@
|
||||
|
||||
<script>
|
||||
import request from "@/util/index.js";
|
||||
import { formatTime } from '@/util/dateTime/index.js'
|
||||
export default {
|
||||
data() {
|
||||
const nowDay = this.$util.cutDate(new Date(), 'YYYY-MM-DD') // 有数据的最近日期
|
||||
@ -346,166 +344,224 @@ export default {
|
||||
},
|
||||
selectTab: 1,
|
||||
onDutyPersonList: [
|
||||
{
|
||||
name: "曹鑫",
|
||||
post: "三级驻站经理",
|
||||
status: 1,
|
||||
phone: "13987822022",
|
||||
service: "达连坝停车区-下行",
|
||||
dutyPlace: "", // 上班打卡地
|
||||
dutyTime: "2025-08-14 07:26",// 上班打卡时间
|
||||
toLateTime: "",// 迟到时长
|
||||
offWorkPlace: "",// 下班打卡地
|
||||
offWorkTime: "",// 下班打卡时间
|
||||
earlyWorkTime: "",// 早退时长
|
||||
monthDay: "23",// 当月排班天数
|
||||
AttendanceDay: "10",// 出勤天数
|
||||
leaveDay: "8",// 休息天数
|
||||
beLateDay: "",// 迟到天数
|
||||
leaveEarlyDay: "1",// 早退天数
|
||||
},
|
||||
{
|
||||
name: "陈艳雄",
|
||||
post: "安全管理岗",
|
||||
status: 1,
|
||||
phone: "18787834836",
|
||||
service: "昆西片区管理部",
|
||||
dutyPlace: "", // 上班打卡地
|
||||
dutyTime: "",// 上班打卡时间
|
||||
toLateTime: "",// 迟到时长
|
||||
offWorkPlace: "",// 下班打卡地
|
||||
offWorkTime: "",// 下班打卡时间
|
||||
earlyWorkTime: "",// 早退时长
|
||||
monthDay: "23",// 当月排班天数
|
||||
AttendanceDay: "0",// 出勤天数
|
||||
leaveDay: "8",// 休息天数
|
||||
beLateDay: "",// 迟到天数
|
||||
leaveEarlyDay: "",// 早退天数
|
||||
},
|
||||
{
|
||||
name: "陈芝丽",
|
||||
post: "三级驻站经理",
|
||||
status: 1,
|
||||
phone: "15887779180",
|
||||
service: "猫街停车区-下行",
|
||||
dutyPlace: "", // 上班打卡地
|
||||
dutyTime: "2025-08-14 07:11",// 上班打卡时间
|
||||
toLateTime: "",// 迟到时长
|
||||
offWorkPlace: "",// 下班打卡地
|
||||
offWorkTime: "",// 下班打卡时间
|
||||
earlyWorkTime: "",// 早退时长
|
||||
monthDay: "23",// 当月排班天数
|
||||
AttendanceDay: "11",// 出勤天数
|
||||
leaveDay: "8",// 休息天数
|
||||
beLateDay: "",// 迟到天数
|
||||
leaveEarlyDay: "1",// 早退天数
|
||||
}
|
||||
// {
|
||||
// name: "曹鑫",
|
||||
// post: "三级驻站经理",
|
||||
// status: 1,
|
||||
// phone: "13987822022",
|
||||
// service: "达连坝停车区-下行",
|
||||
// dutyPlace: "", // 上班打卡地
|
||||
// dutyTime: "2025-08-14 07:26",// 上班打卡时间
|
||||
// toLateTime: "",// 迟到时长
|
||||
// offWorkPlace: "",// 下班打卡地
|
||||
// offWorkTime: "",// 下班打卡时间
|
||||
// earlyWorkTime: "",// 早退时长
|
||||
// monthDay: "23",// 当月排班天数
|
||||
// AttendanceDay: "10",// 出勤天数
|
||||
// leaveDay: "8",// 休息天数
|
||||
// beLateDay: "",// 迟到天数
|
||||
// leaveEarlyDay: "1",// 早退天数
|
||||
// },
|
||||
// {
|
||||
// name: "陈艳雄",
|
||||
// post: "安全管理岗",
|
||||
// status: 1,
|
||||
// phone: "18787834836",
|
||||
// service: "昆西片区管理部",
|
||||
// dutyPlace: "", // 上班打卡地
|
||||
// dutyTime: "",// 上班打卡时间
|
||||
// toLateTime: "",// 迟到时长
|
||||
// offWorkPlace: "",// 下班打卡地
|
||||
// offWorkTime: "",// 下班打卡时间
|
||||
// earlyWorkTime: "",// 早退时长
|
||||
// monthDay: "23",// 当月排班天数
|
||||
// AttendanceDay: "0",// 出勤天数
|
||||
// leaveDay: "8",// 休息天数
|
||||
// beLateDay: "",// 迟到天数
|
||||
// leaveEarlyDay: "",// 早退天数
|
||||
// },
|
||||
// {
|
||||
// name: "陈芝丽",
|
||||
// post: "三级驻站经理",
|
||||
// status: 1,
|
||||
// phone: "15887779180",
|
||||
// service: "猫街停车区-下行",
|
||||
// dutyPlace: "", // 上班打卡地
|
||||
// dutyTime: "2025-08-14 07:11",// 上班打卡时间
|
||||
// toLateTime: "",// 迟到时长
|
||||
// offWorkPlace: "",// 下班打卡地
|
||||
// offWorkTime: "",// 下班打卡时间
|
||||
// earlyWorkTime: "",// 早退时长
|
||||
// monthDay: "23",// 当月排班天数
|
||||
// AttendanceDay: "11",// 出勤天数
|
||||
// leaveDay: "8",// 休息天数
|
||||
// beLateDay: "",// 迟到天数
|
||||
// leaveEarlyDay: "1",// 早退天数
|
||||
// }
|
||||
],// 在岗人员 1 在岗 2 休息 3 调休 4 请假 5 旷工 6 迟到
|
||||
EmployeesOnLeaveList: [
|
||||
{
|
||||
name: "高金平",
|
||||
post: "三级驻站经理",
|
||||
status: 2,
|
||||
phone: "17787888023",
|
||||
service: "大姚服务区-下行",
|
||||
dutyPlace: "", // 上班打卡地
|
||||
dutyTime: "",// 上班打卡时间
|
||||
toLateTime: "",// 迟到时长
|
||||
offWorkPlace: "",// 下班打卡地
|
||||
offWorkTime: "",// 下班打卡时间
|
||||
earlyWorkTime: "",// 早退时长
|
||||
monthDay: "23",// 当月排班天数
|
||||
AttendanceDay: "9",// 出勤天数
|
||||
leaveDay: "8",// 休息天数
|
||||
beLateDay: "",// 迟到天数
|
||||
leaveEarlyDay: "",// 早退天数
|
||||
},
|
||||
{
|
||||
name: "雷自云",
|
||||
post: "三级驻站经理",
|
||||
status: 2,
|
||||
phone: "15825167023",
|
||||
service: "永仁停车区-下行",
|
||||
dutyPlace: "", // 上班打卡地
|
||||
dutyTime: "",// 上班打卡时间
|
||||
toLateTime: "",// 迟到时长
|
||||
offWorkPlace: "",// 下班打卡地
|
||||
offWorkTime: "",// 下班打卡时间
|
||||
earlyWorkTime: "",// 早退时长
|
||||
monthDay: "23",// 当月排班天数
|
||||
AttendanceDay: "8",// 出勤天数
|
||||
leaveDay: "8",// 休息天数
|
||||
beLateDay: "",// 迟到天数
|
||||
leaveEarlyDay: "1",// 早退天数
|
||||
},
|
||||
{
|
||||
name: "刘凯峰",
|
||||
post: "一级驻站副经理",
|
||||
status: 2,
|
||||
phone: "15198787593",
|
||||
service: "恐龙山服务区-上行",
|
||||
dutyPlace: "", // 上班打卡地
|
||||
dutyTime: "",// 上班打卡时间
|
||||
toLateTime: "",// 迟到时长
|
||||
offWorkPlace: "",// 下班打卡地
|
||||
offWorkTime: "",// 下班打卡时间
|
||||
earlyWorkTime: "",// 早退时长
|
||||
monthDay: "23",// 当月排班天数
|
||||
AttendanceDay: "9",// 出勤天数
|
||||
leaveDay: "8",// 休息天数
|
||||
beLateDay: "",// 迟到天数
|
||||
leaveEarlyDay: "",// 早退天数
|
||||
},
|
||||
{
|
||||
name: "宋永鑫",
|
||||
post: "一级驻站副经理",
|
||||
service: "读书铺服务区-上行",
|
||||
status: 2,
|
||||
phone: "13649668882",
|
||||
dutyPlace: "", // 上班打卡地
|
||||
dutyTime: "",// 上班打卡时间
|
||||
toLateTime: "",// 迟到时长
|
||||
offWorkPlace: "",// 下班打卡地
|
||||
offWorkTime: "",// 下班打卡时间
|
||||
earlyWorkTime: "",// 早退时长
|
||||
monthDay: "23",// 当月排班天数
|
||||
AttendanceDay: "13",// 出勤天数
|
||||
leaveDay: "8",// 休息天数
|
||||
beLateDay: "",// 迟到天数
|
||||
leaveEarlyDay: "",// 早退天数
|
||||
}
|
||||
// {
|
||||
// name: "高金平",
|
||||
// post: "三级驻站经理",
|
||||
// status: 2,
|
||||
// phone: "17787888023",
|
||||
// service: "大姚服务区-下行",
|
||||
// dutyPlace: "", // 上班打卡地
|
||||
// dutyTime: "",// 上班打卡时间
|
||||
// toLateTime: "",// 迟到时长
|
||||
// offWorkPlace: "",// 下班打卡地
|
||||
// offWorkTime: "",// 下班打卡时间
|
||||
// earlyWorkTime: "",// 早退时长
|
||||
// monthDay: "23",// 当月排班天数
|
||||
// AttendanceDay: "9",// 出勤天数
|
||||
// leaveDay: "8",// 休息天数
|
||||
// beLateDay: "",// 迟到天数
|
||||
// leaveEarlyDay: "",// 早退天数
|
||||
// },
|
||||
// {
|
||||
// name: "雷自云",
|
||||
// post: "三级驻站经理",
|
||||
// status: 2,
|
||||
// phone: "15825167023",
|
||||
// service: "永仁停车区-下行",
|
||||
// dutyPlace: "", // 上班打卡地
|
||||
// dutyTime: "",// 上班打卡时间
|
||||
// toLateTime: "",// 迟到时长
|
||||
// offWorkPlace: "",// 下班打卡地
|
||||
// offWorkTime: "",// 下班打卡时间
|
||||
// earlyWorkTime: "",// 早退时长
|
||||
// monthDay: "23",// 当月排班天数
|
||||
// AttendanceDay: "8",// 出勤天数
|
||||
// leaveDay: "8",// 休息天数
|
||||
// beLateDay: "",// 迟到天数
|
||||
// leaveEarlyDay: "1",// 早退天数
|
||||
// },
|
||||
// {
|
||||
// name: "刘凯峰",
|
||||
// post: "一级驻站副经理",
|
||||
// status: 2,
|
||||
// phone: "15198787593",
|
||||
// service: "恐龙山服务区-上行",
|
||||
// dutyPlace: "", // 上班打卡地
|
||||
// dutyTime: "",// 上班打卡时间
|
||||
// toLateTime: "",// 迟到时长
|
||||
// offWorkPlace: "",// 下班打卡地
|
||||
// offWorkTime: "",// 下班打卡时间
|
||||
// earlyWorkTime: "",// 早退时长
|
||||
// monthDay: "23",// 当月排班天数
|
||||
// AttendanceDay: "9",// 出勤天数
|
||||
// leaveDay: "8",// 休息天数
|
||||
// beLateDay: "",// 迟到天数
|
||||
// leaveEarlyDay: "",// 早退天数
|
||||
// },
|
||||
// {
|
||||
// name: "宋永鑫",
|
||||
// post: "一级驻站副经理",
|
||||
// service: "读书铺服务区-上行",
|
||||
// status: 2,
|
||||
// phone: "13649668882",
|
||||
// dutyPlace: "", // 上班打卡地
|
||||
// dutyTime: "",// 上班打卡时间
|
||||
// toLateTime: "",// 迟到时长
|
||||
// offWorkPlace: "",// 下班打卡地
|
||||
// offWorkTime: "",// 下班打卡时间
|
||||
// earlyWorkTime: "",// 早退时长
|
||||
// monthDay: "23",// 当月排班天数
|
||||
// AttendanceDay: "13",// 出勤天数
|
||||
// leaveDay: "8",// 休息天数
|
||||
// beLateDay: "",// 迟到天数
|
||||
// leaveEarlyDay: "",// 早退天数
|
||||
// }
|
||||
],// 请假人员列表
|
||||
dutyManagerList: [
|
||||
{ name: "王五", post: "经理", status: 1, phone: "6666", address: "G56杭瑞高速主干道昆明至滇西方向" },
|
||||
// { name: "王五", post: "经理", status: 1, phone: "6666", address: "G56杭瑞高速主干道昆明至滇西方向" },
|
||||
],// 值班经理
|
||||
jumpItemList: [
|
||||
// { label: "应急事件", value: 1, url: "https://eshangtech.com/cyy_DIB/funIcon1.png" },
|
||||
{ label: "设施状态", value: 2, url: "https://eshangtech.com/cyy_DIB/funIcon2.png" },
|
||||
{ label: "考勤统计", value: 3, url: "https://eshangtech.com/cyy_DIB/funIcon3.png" },
|
||||
{ label: "请假管理", value: 4, url: "https://eshangtech.com/cyy_DIB/funIcon4.png" },
|
||||
{ label: "排班表", value: 5, url: "https://eshangtech.com/cyy_DIB/funIcon5.png" },
|
||||
// { label: "请假管理", value: 4, url: "https://eshangtech.com/cyy_DIB/funIcon4.png" },
|
||||
// { label: "通知公告", value: 6, url: "https://eshangtech.com/cyy_DIB/funIcon6.png" },
|
||||
],
|
||||
showPopup: false,
|
||||
userDetail: null
|
||||
userDetail: null,
|
||||
isFirst: true
|
||||
};
|
||||
},
|
||||
onLoad() {
|
||||
this.menu = uni.getMenuButtonBoundingClientRect()
|
||||
let currentService = uni.getStorageSync('currentService')
|
||||
this.handleGetServerpartDetail(currentService.Serverpart_ID || currentService.SERVERPART_ID)
|
||||
this.handleGetCurrentServiceAttendanceData(currentService.SERVERPART_NAME)
|
||||
},
|
||||
onShow() {
|
||||
let currentService = uni.getStorageSync('currentService')
|
||||
console.log('currentService', currentService);
|
||||
|
||||
if (currentService.Serverpart_ID !== this.serviceInfo.SERVERPART_ID) {
|
||||
if (currentService.Serverpart_ID !== this.serviceInfo.SERVERPART_ID && !this.isFirst) {
|
||||
this.handleGetServerpartDetail(currentService.Serverpart_ID)
|
||||
this.handleGetCurrentServiceAttendanceData(currentService.SERVERPART_NAME)
|
||||
} else {
|
||||
this.isFirst = false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 拿到当前服务区的考勤数据
|
||||
async handleGetCurrentServiceAttendanceData(SERVERPART_NAME) {
|
||||
let req = {
|
||||
bsessionKey: "0B30475A94674D608022885F7763959B",
|
||||
workTime: new Date(this.selectDate).getTime(),
|
||||
saName: SERVERPART_NAME || "",// 服务区名称
|
||||
phone: "",// 手机号码
|
||||
}
|
||||
uni.showLoading({
|
||||
title: "加载中..."
|
||||
})
|
||||
|
||||
const data = await new Promise((resolve, reject) => {
|
||||
uni.request({
|
||||
url: "https://fwqznxj.yciccloud.com:9081/ynjt/pushManage/queryUserSchedule",
|
||||
method: "POST",
|
||||
data: req,
|
||||
header: {
|
||||
"content-type": "application/x-www-form-urlencoded",
|
||||
},
|
||||
success(res) {
|
||||
resolve(res.data.data)
|
||||
},
|
||||
});
|
||||
});
|
||||
uni.hideLoading()
|
||||
|
||||
this.onDutyPersonList = []
|
||||
this.EmployeesOnLeaveList = []
|
||||
// 当前服务区的人员信息
|
||||
let list = data
|
||||
console.log("listlistlistlistlistlistlistlist", list);
|
||||
|
||||
// 上班人员信息
|
||||
let workPersonList = []
|
||||
// 请假人员信息
|
||||
let leaveList = []
|
||||
|
||||
if (list && list.length > 0) {
|
||||
list.forEach((item) => {
|
||||
item.dutyClockInTime = item.dutyClockInTime ? formatTime(item.dutyClockInTime) : ""
|
||||
item.offDutyClockInTime = item.offDutyClockInTime ? formatTime(item.offDutyClockInTime) : ""
|
||||
if (item.workType === '班' || item.workType === '差' || item.workType === '出') {
|
||||
workPersonList.push(item)
|
||||
} else {
|
||||
leaveList.push(item)
|
||||
}
|
||||
})
|
||||
}
|
||||
this.onDutyPersonList = workPersonList
|
||||
this.EmployeesOnLeaveList = leaveList
|
||||
|
||||
},
|
||||
// 修改日期
|
||||
handleChangeDate(type) {
|
||||
async handleChangeDate(type) {
|
||||
// type 1 加一天 2 减一天
|
||||
// 兼容 iOS,把 2025-08-15 转成 2025/08/15
|
||||
const date = new Date(this.selectDate.replace(/-/g, "/"));
|
||||
@ -521,6 +577,9 @@ export default {
|
||||
const day = String(date.getDate()).padStart(2, "0");
|
||||
|
||||
this.selectDate = `${year}-${month}-${day}`;
|
||||
|
||||
console.log('serviceInfo', this.serviceInfo);
|
||||
await this.handleGetCurrentServiceAttendanceData(this.serviceInfo.SERVERPART_NAME)
|
||||
},
|
||||
// 查询服务区详情
|
||||
async handleGetServerpartDetail(id) {
|
||||
@ -612,7 +671,12 @@ export default {
|
||||
} else if (value === 2) {
|
||||
// this.$util.toNextRoute("navigateTo", `/pages/attendanceStatus/serviceFacility`);
|
||||
this.$util.toNextRoute('navigateTo', `/pages/summaryOfPortraits/index?index=0`)
|
||||
} else if (value === 3) {
|
||||
this.$util.toNextRoute('navigateTo', `/pages/attendanceStatus/attendanceStatistics`)
|
||||
}
|
||||
// else if (value === 5) {
|
||||
// this.$util.toNextRoute('navigateTo', `/pages/attendanceStatus/roster`)
|
||||
// }
|
||||
},
|
||||
// 会员详情信息
|
||||
viewStaffDetails(obj) {
|
||||
@ -621,7 +685,6 @@ export default {
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
onUnload() {
|
||||
|
||||
}
|
||||
|
||||
345
pages/attendanceStatus/roster.vue
Normal file
345
pages/attendanceStatus/roster.vue
Normal file
@ -0,0 +1,345 @@
|
||||
<!-- 排班表 -->
|
||||
<template>
|
||||
<view class="main" :style="{ paddingTop: (menu.bottom + 28) + 'px' }">
|
||||
<view class="summaryTab" :style="{ height: (menu.bottom + 14) + 'px' }">
|
||||
<view class="leftArrow" :style="{ top: (menu.top + ((menu.height - 24) / 2)) + 'px' }">
|
||||
<image class="img" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/navigation-left.svg"
|
||||
@click="handleBack"></image>
|
||||
<view class="picker" :style="{ top: (menu.bottom + 24) + 'px' }" @click="handleChangeService">
|
||||
<view class="selectService">
|
||||
<image class="img" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/fixed.svg"></image>
|
||||
<view class="select">
|
||||
<view class="content">
|
||||
<view class="uni-input">{{ serviceInfo.SERVERPART_NAME ? serviceInfo.SERVERPART_NAME :
|
||||
'' }}
|
||||
</view>
|
||||
<image class="rightArrow"
|
||||
src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/rightArrow.svg"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
||||
<view class="rosterContent">
|
||||
<view class="rosterContentTop">
|
||||
<view>
|
||||
<picker>
|
||||
{{ selectPerson || "-" }}
|
||||
</picker>
|
||||
</view>
|
||||
|
||||
|
||||
<!-- 居中的日历时间 -->
|
||||
<!-- <view class="dateBox">
|
||||
<view class="centerDateBox">
|
||||
<image class="arrowIcon" src="https://eshangtech.com/cyy_DIB/leftArrowIcon.png"
|
||||
@click="handleChangeDate(2)" />
|
||||
<view class="center">
|
||||
<text class="date-text">{{ selectDate ? $util.cutDate(new Date(selectDate), 'YYYY-MM') : ""
|
||||
}}</text>
|
||||
</view>
|
||||
<image class="arrowIcon" src="https://eshangtech.com/cyy_DIB/rightArrowIcon.png"
|
||||
@click="handleChangeDate(1)" />
|
||||
</view>
|
||||
</view> -->
|
||||
</view>
|
||||
|
||||
<view class="calendarBpx">
|
||||
<uni-calendar ref="calendar" class="selectDateCalendar" :insert="true" :startDate="info.startDate"
|
||||
:selected="selectedList" />
|
||||
</view>
|
||||
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
const nowDay = this.$util.cutDate(new Date(), 'YYYY-MM-DD') // 有数据的最近日期
|
||||
return {
|
||||
menu: {},
|
||||
serviceInfo: {},
|
||||
selectDate: nowDay,// 选中的时间
|
||||
selectPerson: "张三",
|
||||
selectedList: [
|
||||
{
|
||||
date: '2025-08-11',
|
||||
info: "班",
|
||||
},
|
||||
{
|
||||
date: '2025-08-12',
|
||||
info: "班",
|
||||
color: "#000"
|
||||
},
|
||||
{
|
||||
date: '2025-08-13',
|
||||
info: "班",
|
||||
},
|
||||
{
|
||||
date: '2025-08-14',
|
||||
info: "班",
|
||||
},
|
||||
{
|
||||
date: '2025-08-15',
|
||||
info: "班"
|
||||
},
|
||||
{
|
||||
date: '2025-08-16',
|
||||
info: "休",
|
||||
},
|
||||
{
|
||||
date: '2025-08-17',
|
||||
info: "休",
|
||||
},
|
||||
{
|
||||
date: '2025-08-18',
|
||||
info: "班",
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
onLoad() {
|
||||
this.menu = uni.getMenuButtonBoundingClientRect()
|
||||
let currentService = uni.getStorageSync('currentService')
|
||||
this.serviceInfo = currentService
|
||||
},
|
||||
methods: {
|
||||
// 修改日期
|
||||
async handleChangeDate(type) {
|
||||
// type 1 加一天 2 减一天
|
||||
// 兼容 iOS,把 2025-08-15 转成 2025/08/15
|
||||
const cur = new Date((this.selectDate || '').replace(/-/g, '/'));
|
||||
if (Number.isNaN(cur.getTime())) return;
|
||||
|
||||
// 1:加一月;2:减一月;其他:不变
|
||||
const delta = type === 1 ? 1 : (type === 2 ? -1 : 0);
|
||||
|
||||
// 目标月份的最后一天:new Date(年, 目标月+1, 0)
|
||||
const last = new Date(cur.getFullYear(), cur.getMonth() + delta + 1, 0);
|
||||
|
||||
const y = last.getFullYear();
|
||||
const m = String(last.getMonth() + 1).padStart(2, '0');
|
||||
const d = String(last.getDate()).padStart(2, '0');
|
||||
|
||||
this.selectDate = `${y}-${m}-${d}`;
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
<style lang="less" scoped>
|
||||
@bg: #f8f9fa;
|
||||
@muted: #666;
|
||||
@card: #fff;
|
||||
@shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
||||
@primary: #27B25F;
|
||||
@primary2: #4CCC7F;
|
||||
@ok: #2ed573;
|
||||
@warn: #ff9f43;
|
||||
@danger: #ff4757;
|
||||
|
||||
|
||||
.main {
|
||||
width: 100vw;
|
||||
min-height: 100vh;
|
||||
background-color: #f0f2f3;
|
||||
box-sizing: border-box;
|
||||
padding-bottom: constant(safe-area-inset-bottom);
|
||||
padding-bottom: env(safe-area-inset-bottom);
|
||||
padding: 16rpx 32rpx 0;
|
||||
|
||||
.summaryTab {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100vw;
|
||||
// background: #fff;
|
||||
background-image: url("https://eshangtech.com/minTestImg/pageBg.png");
|
||||
z-index: 99;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
padding-bottom: 16px;
|
||||
|
||||
.leftArrow {
|
||||
width: 100%;
|
||||
height: 24px;
|
||||
position: absolute;
|
||||
// left: 16px;
|
||||
z-index: 99999999999;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 0 32rpx;
|
||||
|
||||
.img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin-right: 8px;
|
||||
z-index: 99;
|
||||
}
|
||||
|
||||
.picker {
|
||||
.selectService {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.img {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.select {
|
||||
height: 32px;
|
||||
background: #fff;
|
||||
border-radius: 0 16px 16px 0;
|
||||
transform: translateX(-40px);
|
||||
box-sizing: border-box;
|
||||
padding-left: 35px;
|
||||
padding-right: 8rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.content {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.uni-input {
|
||||
padding: 0;
|
||||
background: transparent;
|
||||
font-size: 28rpx;
|
||||
font-family: PingFangSC-Semibold, PingFang SC;
|
||||
font-weight: 600;
|
||||
color: #160002;
|
||||
}
|
||||
|
||||
.area {
|
||||
font-size: 12px;
|
||||
font-family: PingFangSC-Regular, PingFang SC;
|
||||
font-weight: 400;
|
||||
color: #786B6C;
|
||||
line-height: 40px;
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
.rightArrow {
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
}
|
||||
|
||||
.noticeText {
|
||||
font-size: 24rpx;
|
||||
font-family: PingFangSC, PingFang SC;
|
||||
font-weight: 400;
|
||||
color: #B6BACB;
|
||||
line-height: 40rpx;
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.rosterContent {
|
||||
width: 100%;
|
||||
background-color: #fff;
|
||||
box-sizing: border-box;
|
||||
padding: 0 24rpx;
|
||||
border-radius: 8rpx;
|
||||
|
||||
.rosterContentTop {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
|
||||
.dateBox {
|
||||
box-sizing: border-box;
|
||||
padding: 16rpx 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
.centerDateBox {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10rpx;
|
||||
padding: 10rpx 20rpx;
|
||||
border-radius: 30rpx;
|
||||
background-color: #fff;
|
||||
// border: 2rpx solid #27B35F;
|
||||
// background: rgba(255, 255, 255, .15);
|
||||
|
||||
.arrowIcon {
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
}
|
||||
|
||||
.center {
|
||||
.date-text {
|
||||
font-size: 28rpx;
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.calendarBpx {
|
||||
/deep/ .uni-calendar-item__weeks-box-item {
|
||||
width: calc(100% / 7);
|
||||
|
||||
.uni-calendar-item__weeks-box-circle {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
/deep/ .uni-calendar-item--checked {
|
||||
background-color: transparent;
|
||||
color: #000 !important;
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
/deep/ .uni-calendar-item--isDay {
|
||||
background-color: transparent;
|
||||
color: #000 !important;
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
/deep/ .uni-calendar-item--isDay-text {
|
||||
white-space: nowrap;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
/deep/ .uni-calendar__backtoday {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* === info 文字颜色控制 === */
|
||||
.selectDateCalendar ::v-deep .uni-calendar__info {
|
||||
color: #000 !important;
|
||||
/* 默认黑色 */
|
||||
}
|
||||
|
||||
/* 如果 info 等于“休”,文字改为红色 */
|
||||
.selectDateCalendar ::v-deep .uni-calendar__info[title="休"],
|
||||
.selectDateCalendar ::v-deep .uni-calendar__info[data-info="休"] {
|
||||
color: red !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -303,14 +303,14 @@
|
||||
</view>
|
||||
|
||||
|
||||
<view class="funItem" @click="goToRobot">
|
||||
<!-- <view class="funItem" @click="goToRobot">
|
||||
<view class="funItemContent">
|
||||
<view class="funIconBox">
|
||||
<image class="funIcon" src="https://eshangtech.com/ShopICO/ahyd-BID/newIndex3/statistics.svg" />
|
||||
</view>
|
||||
<text class="funText">数智助手</text>
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
</view>
|
||||
|
||||
|
||||
|
||||
15
static/images/home/lostAndFoundIcon.svg
Normal file
15
static/images/home/lostAndFoundIcon.svg
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="36px" height="36px" viewBox="0 0 36 36" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>图标/失物招领_2</title>
|
||||
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="切图汇总" transform="translate(-320.000000, -459.000000)">
|
||||
<g id="图标/失物招领" transform="translate(320.000000, 459.000000)">
|
||||
<rect id="矩形" x="0" y="0" width="36" height="36"></rect>
|
||||
<g id="编组-57" transform="translate(2.916667, 3.000000)" stroke="#B8B7B4" stroke-width="1.3">
|
||||
<path d="M15,0 L15,5 M20.8333333,5.83333333 L24.1666667,2.5 M9.16666667,5.83333333 L5.83333333,2.5 M28.3333333,30 L1.66666667,30 C0.746192084,30 0,29.2538079 0,28.3333333 L0,21.2833333 C0,20.9884858 0.0782133529,20.6989149 0.226666667,20.4441667 L5.35166667,11.6608333 C5.6499609,11.1489661 6.19755834,10.8339231 6.79,10.8333333 L23.2083333,10.8333333 C23.8011993,10.8333333 24.3495289,11.1479395 24.6483333,11.66 L29.7725,20.4441667 C29.9213872,20.6990776 30,20.98896 30,21.2841667 L30,28.3333333 C30,29.2538079 29.2538079,30 28.3333333,30 Z" id="形状"></path>
|
||||
<path d="M29.5833333,19.8333333 L18.3333333,19.8333333 C18.3333333,19.8333333 17.5,22.3333333 15,22.3333333 C12.5,22.3333333 11.6666667,19.8333333 11.6666667,19.8333333 L0.416666667,19.8333333" id="路径"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
@ -6,8 +6,7 @@
|
||||
'uni-calendar-item--before-checked': weeks.beforeMultiple,
|
||||
'uni-calendar-item--multiple': weeks.multiple,
|
||||
'uni-calendar-item--after-checked': weeks.afterMultiple,
|
||||
}"
|
||||
@click="choiceDate(weeks)">
|
||||
}" @click="choiceDate(weeks)">
|
||||
<view class="uni-calendar-item__weeks-box-item">
|
||||
<text v-if="selected && weeks.extraInfo" class="uni-calendar-item__weeks-box-circle"></text>
|
||||
<text class="uni-calendar-item__weeks-box-text" :class="{
|
||||
@ -45,7 +44,7 @@
|
||||
'uni-calendar-item--multiple': weeks.multiple,
|
||||
'uni-calendar-item--after-checked': weeks.afterMultiple,
|
||||
'uni-calendar-item--disable': weeks.disable,
|
||||
}">{{weeks.extraInfo.info}}</text>
|
||||
}" :style="{ color: weeks.extraInfo.info === '休' ? 'red' : '#000' }">{{ weeks.extraInfo.info }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
@ -102,6 +101,7 @@
|
||||
$uni-opacity-disabled: 0.3;
|
||||
$uni-text-color-disable: #c0c0c0;
|
||||
$uni-primary: #2979ff !default;
|
||||
|
||||
.uni-calendar-item__weeks-box {
|
||||
flex: 1;
|
||||
/* #ifndef APP-NVUE */
|
||||
@ -176,10 +176,12 @@
|
||||
color: #fff;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.uni-calendar-item--before-checked {
|
||||
background-color: #ff5a5f;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.uni-calendar-item--after-checked {
|
||||
background-color: #ff5a5f;
|
||||
color: #fff;
|
||||
|
||||
@ -101,3 +101,25 @@ export async function getFieldEnum(params){
|
||||
}
|
||||
return data.Result_Data.List;
|
||||
}
|
||||
|
||||
|
||||
|
||||
export function formatTime(ts) {
|
||||
let n = Number(ts);
|
||||
if (!Number.isFinite(n)) return '';
|
||||
|
||||
// 兼容秒级/毫秒级时间戳
|
||||
if (n < 1e12) n *= 1000;
|
||||
|
||||
const d = new Date(n);
|
||||
const pad = (x) => String(x).padStart(2, '0');
|
||||
|
||||
const Y = d.getFullYear();
|
||||
const M = pad(d.getMonth() + 1);
|
||||
const D = pad(d.getDate());
|
||||
const h = pad(d.getHours());
|
||||
const m = pad(d.getMinutes());
|
||||
const s = pad(d.getSeconds());
|
||||
|
||||
return `${Y}-${M}-${D} ${h}:${m}:${s}`;
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user