You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
443 lines
10 KiB
443 lines
10 KiB
<template> |
|
<template v-if="currentPage === 'home'"> |
|
<view> |
|
<image src="/static/image/carousel.png" style="width: 100%" mode="widthFix"></image> |
|
</view> |
|
<view class="container"> |
|
<view class="title">我的任务</view> |
|
<view class="flex flex-wrap gap-32"> |
|
<view class="app-item" @tap="openTask('todo')"> |
|
<view class="item-icon item-number mb-6"> |
|
<text>{{ task.todoCount }}</text> |
|
</view> |
|
<view class="item-name mb-6">待处理</view> |
|
</view> |
|
<view class="app-item" @tap="openTask('done')"> |
|
<view class="item-icon item-number mb-6"> |
|
<text>{{ task.doneCount }}</text> |
|
</view> |
|
<view class="item-name">已办结</view> |
|
</view> |
|
<view class="app-item" @tap="openNegativeTodo()"> |
|
<view class="item-icon item-number mb-6"> |
|
<text>{{ task.negativeTodoCount }}</text> |
|
</view> |
|
<view class="item-name">问题处置</view> |
|
</view> |
|
</view> |
|
</view> |
|
<view class="container"> |
|
<view class="title">督察应用</view> |
|
<view class="flex flex-wrap app-container"> |
|
<view class="app-item" @tap="openTaskProblem"> |
|
<view class="item-icon mb-6"> |
|
<image src="/static/icon/ic_camera.png"></image> |
|
</view> |
|
<view class="item-name">随拍清单</view> |
|
</view> |
|
<view class="app-item" @tap="openNegative"> |
|
<view class="item-icon mb-6"> |
|
<image src="/static/icon/ic_warning.png"></image> |
|
</view> |
|
<view class="item-name">问题清单</view> |
|
</view> |
|
<view class="app-item" @tap="openSelfexamination"> |
|
<view class="item-icon mb-6"> |
|
<image src="/static/icon/ic_selfexamination.png"></image> |
|
</view> |
|
<view class="item-name">所队自查</view> |
|
</view> |
|
|
|
<view class="app-item" @tap="openDuty"> |
|
<view class="item-icon mb-6"> |
|
<image src="/static/icon/ic_card.png"></image> |
|
</view> |
|
<view class="item-name">值班报备</view> |
|
</view> |
|
<view class="app-item" @tap="openComfort"> |
|
<view class="item-icon mb-6"> |
|
<image src="/static/icon/ic_apply.png"></image> |
|
</view> |
|
<view class="item-name">抚慰申请</view> |
|
</view> |
|
<view class="app-item" @tap="openBooks"> |
|
<view class="item-icon mb-6"> |
|
<image src="/static/icon/ic_book.png"></image> |
|
</view> |
|
<view class="item-name">知识库</view> |
|
</view> |
|
</view> |
|
</view> |
|
</template> |
|
<template v-else> |
|
<view class="wrapper"> |
|
<view class="center-card flex gap-12"> |
|
<view class="avatar"> |
|
<net-image :filepath="store.state.user.avatarUrl" v-if="store.state.user.avatarUrl" /> |
|
<image src="/static/police.png" v-else></image> |
|
</view> |
|
<view class="flex flex-col justify-between"> |
|
<view> |
|
<view class="name mb-6">{{ store.state.user.nickName }}</view> |
|
<view class="second mb-6">{{ store.state.user.departName }}</view> |
|
<view class="second">{{ }}</view> |
|
</view> |
|
<view class="info flex"> |
|
<view>警号:</view> |
|
<view class="mr-20">{{ store.state.user.empNo }}</view> |
|
</view> |
|
</view> |
|
<view class="edit-btn"> |
|
<image src="/static/edit.png" style="height: 37px" mode="heightFix"></image> |
|
</view> |
|
</view> |
|
<view class="panel"> |
|
<view class="panel-h" @tap="openManual"> |
|
<image src="/static/icon/ic_c_book.png" style="height: 27px; width: 27px"></image> |
|
<view class="panel-c"> |
|
<text class="panel-text">使用手册</text> |
|
<uni-icons type="right" size="20" color="#666" /> |
|
</view> |
|
|
|
</view> |
|
<view class="panel-h" @tap="openFeedback"> |
|
<image src="/static/icon/ic_c_message.png" style="height: 27px; width: 27px"></image> |
|
|
|
<view class="panel-c"> |
|
<text class="panel-text">意见反馈</text> |
|
<uni-icons type="right" size="20" color="#666" /> |
|
</view> |
|
</view> |
|
<view class="panel-h" @tap="openAbout"> |
|
<image src="/static/icon/ic_c_app.png" style="height: 27px; width: 27px"></image> |
|
|
|
<view class="panel-c"> |
|
<text class="panel-text">关于APP</text> |
|
<uni-icons type="right" size="20" color="#666" /> |
|
</view> |
|
</view> |
|
</view> |
|
</view> |
|
</template> |
|
<view class="tab-bar"> |
|
<view v-for="item in tabBars" :class="currentPage === item.name ? 'tab-bar-item active': 'tab-bar-item'" @tap="currentPage = item.name"> |
|
<uni-icons :type="item.icon" size="50rpx"></uni-icons> |
|
<view>{{ item.text }}</view> |
|
</view> |
|
<view class="tab-bar-item_center" @tap="openCamera"> |
|
<image src="/static/camer.png" class="tab-bar-item_center-icon" mode="widthFix"></image> |
|
<view>随手拍</view> |
|
</view> |
|
</view> |
|
</template> |
|
|
|
<script lang="uts"> |
|
import permision from '@/common/permission' |
|
import { getToken } from '@/common/auth' |
|
import store from '@/store' |
|
import { setToken } from '@/common/auth' |
|
import { login } from '@/api/auth' |
|
import { getTaskCount } from '@/api/task' |
|
|
|
let _this; |
|
export default { |
|
data() { |
|
return { |
|
task: { |
|
todoCount: 0, |
|
doneCount: 0, |
|
negativeTodoCount: 0 |
|
}, |
|
user: {}, |
|
currentPage: 'home', |
|
tabBars: [ |
|
{ |
|
text: '首页', |
|
icon: 'home', |
|
name: 'home' |
|
}, |
|
{ |
|
text: '我的', |
|
icon: 'person', |
|
name: 'center' |
|
} |
|
] |
|
} |
|
}, |
|
setup() { |
|
return { |
|
store |
|
} |
|
}, |
|
async onShow() { |
|
_this = this; |
|
// const url = 'http://172.20.10.3:8080/app/'; |
|
const env = 'prod'; |
|
const url = 'http://192.168.3.21:8080/app/' |
|
// #ifdef APP-PLUS |
|
if (env === 'dev') { |
|
if (!store.state.requestUrl) { |
|
store.commit('setRequestUrl', url + 'forward') |
|
} |
|
if (!getToken() || !store.state.hasLogin) { |
|
const userData = await login({ empNo: '012893' }); |
|
setToken(userData.token); |
|
store.commit('setUser', userData.user) |
|
} |
|
} else { |
|
const event = plus.android.importClass('com.maker.supervise.Event') |
|
if (!store.state.requestUrl) { |
|
const requestUrl = event.getRequestUrl() |
|
store.commit('setRequestUrl', requestUrl) |
|
} |
|
if (!store.state.appCredential) { |
|
const appCredential = encodeURIComponent(event.getAppCredential()) |
|
store.commit('setAppCredential', appCredential) |
|
} |
|
if (!store.state.userCredential) { |
|
const userCredential = encodeURIComponent(event.getUserCredential()) |
|
store.commit('setUserCredential', userCredential) |
|
} |
|
if (!getToken() || !store.state.hasLogin) { |
|
const userData = await login({ empNo: event.getEmpNo() }); |
|
setToken(userData.token); |
|
store.commit('setUser', userData.user) |
|
} |
|
} |
|
// #endif |
|
|
|
const data = await getTaskCount() |
|
if (data) { |
|
_this.task = data; |
|
} |
|
}, |
|
methods: { |
|
openDeveloping() { |
|
uni.showModal({ |
|
title: '温馨提示', |
|
content: '功能开发中...', |
|
success: function (res) { |
|
if (res.confirm) { |
|
console.log('用户点击确定'); |
|
} else if (res.cancel) { |
|
console.log('用户点击取消'); |
|
} |
|
} |
|
}); |
|
}, |
|
openTask(taskStatus) { |
|
uni.navigateTo({ |
|
url: '/pages/task/index?taskStatus=' + taskStatus |
|
}); |
|
}, |
|
openNegativeTodo() { |
|
uni.navigateTo({ |
|
url: '/pages/negative/todo' |
|
}); |
|
}, |
|
async openCamera() { |
|
// #ifdef APP-PLUS |
|
let status = await permision.requestAndroid('android.permission.CAMERA'); |
|
if (status === null || status === 1) { |
|
uni.navigateTo({ |
|
url: '/pages/common/camera' |
|
}); |
|
} else { |
|
uni.showModal({ |
|
content: "没有开启相机权限", |
|
confirmText: "设置", |
|
success: function(res) { |
|
if (res.confirm) { |
|
permision.gotoAppSetting(); |
|
} |
|
} |
|
}) |
|
} |
|
// #endif |
|
|
|
// #ifdef H5 |
|
uni.navigateTo({ |
|
url: '/pages/common/camera' |
|
}); |
|
// #endif |
|
}, |
|
openNegative() { |
|
uni.navigateTo({ |
|
url: '/pages/negative/index' |
|
}); |
|
}, |
|
openDuty() { |
|
uni.navigateTo({ |
|
url: '/pages/duty/index' |
|
}); |
|
}, |
|
openComfort() { |
|
uni.navigateTo({ |
|
url: '/pages/comfort/list' |
|
}); |
|
}, |
|
openBooks() { |
|
uni.navigateTo({ |
|
url: '/pages/books/index' |
|
}); |
|
}, |
|
openSelfexamination() { |
|
uni.navigateTo({ |
|
url: '/pages/task/selfexamination/list' |
|
}); |
|
}, |
|
openTaskProblem() { |
|
uni.navigateTo({ |
|
url: '/pages/task/problem/list' |
|
}); |
|
}, |
|
openFeedback() { |
|
uni.navigateTo({ |
|
url: `/pages/center/feedback` |
|
}); |
|
}, |
|
openManual() { |
|
uni.navigateTo({ |
|
url: `/pages/center/manual` |
|
}); |
|
}, |
|
openAbout() { |
|
uni.navigateTo({ |
|
url: `/pages/center/about` |
|
}); |
|
}, |
|
} |
|
} |
|
</script> |
|
|
|
<style lang="scss" scoped> |
|
.container { |
|
padding: 20rpx 30rpx; |
|
.title { |
|
font-size: 28rpx; |
|
font-weight: 700; |
|
margin-bottom: 24rpx; |
|
} |
|
} |
|
.app-item { |
|
width: 124rpx; |
|
.item-icon { |
|
width: 124rpx; |
|
height: 124rpx; |
|
line-height: 124rpx; |
|
text-align: center; |
|
background: #F3F3F3; |
|
border-radius: 24rpx; |
|
image { |
|
width: 100%; |
|
height: 100%; |
|
} |
|
} |
|
.item-name { |
|
font-size: 26rpx; |
|
text-align: center; |
|
} |
|
.item-number { |
|
font-size: 42rpx; |
|
font-weight: 700; |
|
} |
|
} |
|
.app-container { |
|
gap: 24rpx 64rpx; |
|
} |
|
.tab-bar { |
|
position: fixed; |
|
left: 0; |
|
right: 0; |
|
bottom: 0; |
|
height: 96rpx; |
|
display: flex; |
|
box-shadow: inset 0 1px 0 0 #E4E4E4; |
|
.tab-bar-item { |
|
width: 50%; |
|
display: flex; |
|
align-items: center; |
|
justify-content: center; |
|
flex-direction: column; |
|
font-size: 12px; |
|
color: #666; |
|
.uni-icons { |
|
color: #666 !important; |
|
} |
|
&.active { |
|
color: var(--primary-color); |
|
.uni-icons { |
|
color: var(--primary-color) !important; |
|
} |
|
} |
|
} |
|
|
|
.tab-bar-item_center { |
|
position: absolute; |
|
left: 50%; |
|
top: -48rpx; |
|
transform: translateX(-50%); |
|
font-size: 12px; |
|
color: #666; |
|
text-align: center; |
|
.tab-bar-item_center-icon { |
|
width: 96rpx; |
|
display: block; |
|
} |
|
} |
|
} |
|
|
|
.center-card { |
|
box-shadow: 0px 10rpx 26rpx 6rpx rgba(0, 0, 0, 0.08); |
|
margin: 24rpx; |
|
padding: 24rpx; |
|
position: relative; |
|
.name { |
|
font-size: 28rpx; |
|
line-height: 40rpx; |
|
} |
|
|
|
.second { |
|
font-size: 24rpx; |
|
line-height: 34rpx; |
|
color: #666; |
|
} |
|
|
|
.info { |
|
font-size: 24rpx; |
|
} |
|
|
|
.edit-btn { |
|
position: absolute; |
|
bottom: 0; |
|
right: 0; |
|
image { |
|
display: block; |
|
} |
|
} |
|
} |
|
.panel { |
|
padding: 0 24rpx; |
|
.panel-h { |
|
display: flex; |
|
align-items: center; |
|
gap: 0 24rpx; |
|
.panel-c { |
|
height: 90rpx; |
|
line-height: 90rpx; |
|
box-shadow: inset 0 -1px 0 0 #eee; |
|
width: calc(100% - 80rpx); |
|
display: flex; |
|
justify-content: space-between; |
|
} |
|
} |
|
} |
|
.avatar { |
|
width: 136rpx; |
|
height: 205rpx; |
|
image { |
|
width: 100%; |
|
height: 100%; |
|
} |
|
} |
|
</style> |