OfficeApp/pages/oaHome/oaHome.vue
weipengfei ae253bcbc6 优化
2023-08-01 16:51:05 +08:00

636 lines
16 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="oa_home" style="oaColor">
<!-- <image class="header_bg" src="../../static/img/home/head-bg.png"></image> -->
<view class="home_header" :class="!ApproveList.length>0?'home_header_no_data':''">
<!-- #ifdef APP-PLUS||H5 -->
<view style="height: var(--status-bar-height);"></view>
<view style="height: 100rpx"></view>
<!-- #endif -->
<view class="my_info flex_a_c">
<view class="">
<u--image :showLoading="true" :src="myOaInfo.avatar||'../../static/img/public/avatar.png'" width="130.28rpx"
height="130.28rpx" shape="circle"></u--image>
</view>
<view v-if="!$store.state.app.token" @click="login" class="mesg_box">
<view class="name">
<text class="nickname">立即登录</text>
</view>
<view class="duty">
登录后可查看更多
</view>
</view>
<view v-else class="mesg_box">
<view class="name">
<text class="nickname">姓名:{{ myOaInfo.nickname }}</text>
</view>
<view class="duty">
<!-- ({{ myOaInfo.did_name }}){{myOaInfo.label_name}} -->
电话:{{myOaInfo.account}}<br />
公司:<text v-if="myOaInfo.company">{{ myOaInfo.company.company_name }}</text>
</view>
</view>
</view>
<!-- 占位 -->
<view style="height: 130rpx;"></view>
<!-- 任务状态 -->
<!-- <view class="task_panel">
<block v-for="(item,index) in assessData" :key="index">
<view class="task_item">
<view class="plan">{{ item.num }}</view>
<view class="">{{ item.name }}</view>
</view>
</block>
</view> -->
<view class="backlog" :class="!ApproveList.length>0?'backlog_no_data':''">
<view class="head_title flex_a_c_j_sb">
<view class="title">公告列表</view>
<view class="flex_a_c" @click="navTo('/subpkg/noticeList/noticeList')">更多 <view class="iconfont icon-you">
<uni-icons type="forward"></uni-icons>
</view>
</view>
</view>
<block v-if="ApproveList.length>0">
<view class="backlog_item flex_a_c_j_sb" v-for="(item,index) in ApproveList.slice(0,2)" :key="index"
@click="clickNotice(item.id)">
<view class="text">{{ item.title }}</view>
<i class="iconfont icon-you"><uni-icons type="forward"></uni-icons></i>
</view>
</block>
<view v-else class="backlog_no flex_a_c_j_sb">
<view class="text">暂无更多消息</view>
<i class="iconfont icon-you"><uni-icons type="forward"></uni-icons></i>
</view>
</view>
</view>
<view class="fast_track">
<block v-for="(item,index) in oaHomeData" :key="index">
<view class="track_item" @click="navTwo(item.url,index)">
<u--image :showLoading="true" :src="item.icon" width="77.19rpx" height="77.19rpx"></u--image>
<view class="title">{{ item.text }}</view>
</view>
</block>
</view>
<view class="my_task">
<view class="task_title flex_a_c_j_sb">
<view class="title">配送信息</view>
<view class="flex_a_c" @click="navTo('')">更多 <view class="iconfont icon-you">
<uni-icons type="forward"></uni-icons>
</view>
</view>
</view>
<block v-if="myTaskList.length>0">
<taskCard></taskCard>
</block>
<view v-else class="no_task">
<view class="title">暂无配送信息</view>
<view class="tips" v-if="!$store.state.app.token">登录后查看配送信息详情</view>
</view>
<!-- <view class="head_title flex_a_c_j_sb">
<view class="">我的任务</view>
<view class="flex_a_c" @click="test">更多 <view class="iconfont icon-you"></view>
</view>
</view>
<block v-for="(item,index) in myTaskList" :key="index">
<view class="task_list" @click="naviTaskDetails(item.id)">
<view class="title flex_a_c_j_sb">
<view class="flex_a_c">
<view v-if="item.priority==4" class="tag">{{ item.priority_name }}</view>
<view v-else class="tag1">{{ item.priority_name }}</view>
<view class="text">{{ item.title }}</view>
</view>
<view v-if="item.flow_status==1" class="if_take take1">{{ item.flow_name }}</view>
<view v-else-if="item.flow_status==2" class="if_take take2">{{ item.flow_name }}</view>
<view v-else="item.flow_status==3" class="if_take take3">{{ item.flow_name }}</view>
</view>
<view class="describe">{{ item.content }}</view>
<view class="task_deta flex_a_c_j_sb">
<view class="">任务性质{{ item.is_bug }}</view>
<view class="">计划完成日期{{ item.end_time }}</view>
</view>
</view>
</block> -->
</view>
<view class="no_login" @click="login" v-if="!$store.state.app.token">
<view class="view">
<view class="text">登录里海OA,开启线上便捷办公</view>
<button class="btn">立即登录</button>
</view>
</view>
<!-- <tabbar></tabbar> -->
</view>
</template>
<script>
import { Toast } from '@/libs/uniApi.js'
import { oaHomeData } from '@/static/server/server.js'
import { noticeList } from "@/api/notice.js"
// import tabbar from '../components/tabbar'
import { getIndexListAPI, getTaskListAPI, getMyTaskListAPI, getApproveListAPI, getUserIndexAPI } from '@/api/oaApi.js'
export default {
components: {
// tabbar
},
data() {
return {
oaHomeData: [],
src: 'https://cdn.uviewui.com/uview/album/1.jpg',
assessData: [{
num: '0',
name: '任务'
},
{
num: '0',
name: '已完成'
},
{
num: '0',
name: '未完成'
},
{
num: '0%',
name: '完成率'
},
],
project: {},
task: {},
page: 1,
myTaskList: [],
flowState: '#47B347', // 任务状态
priority: '', // 任务紧急度
myOaInfo: {
avatar: '',
nickname: '',
mobile: '',
did_name: '',
label_name: '',
},
ApproveList: []
}
},
onReady() {
uni.setNavigationBarColor({
frontColor: '#ffffff',
backgroundColor: '#3175f9'
})
},
onLoad() {},
onShow() {
// this.getUserIndex()
// this.getIndexList()
this.getApproveList()
this.initUserInfo()
this.showToask()
this.initOaHomeDada()
},
computed: {},
methods: {
// test() {
// wx.chooseMessageFile({
// count: 1, //限制选择的文件数量
// type: 'all', //非图片和视频的文件,不选默认为all
// //type:'video',//视频
// //type:'image',//图片
// success(res) {
// const tempFilePaths = res.tempFiles
// console.log(res);
// }
// })
// },
initUserInfo() {
this.$store.state.app.userInfo ? this.myOaInfo = this.$store.state.app.userInfo : this.myOaInfo.avatar = '';
},
initOaHomeDada() {
if (this.$store.state.app.userInfo.admin_id == 0) { // 如果用户不是管理员
let arr = oaHomeData.filter(item => !item.admin); //过滤掉管理员专属页面
this.oaHomeData = arr;
} else {
this.oaHomeData = oaHomeData;
// let arr = oaHomeData.filter(item=>!item.personnel);//过滤掉普通用户专属页面
// this.oaHomeData = arr;
}
},
async getApproveList() {
const res = await noticeList({
keyword: '',
page_no: 1,
page_size: 2
})
this.ApproveList = res.data.lists
},
async getIndexList() {
const { project, task } = await getIndexListAPI()
console.log(task, '222');
this.assessData[0].num = project.count
this.assessData[1].num = project.count_ok
this.assessData[2].num = project.count_no
this.assessData[3].num = project.count_lv + '%'
this.assessData[4].num = task.count
this.assessData[5].num = task.count_ok
this.assessData[6].num = task.count_no
this.assessData[7].num = task.count_lv + '%'
this.myTaskList = task.list
},
async getMyTask() {
let data = {
page: this.page,
limit: 10
}
const res = getMyTaskListAPI(data)
},
naviTaskDetails(id) {
uni.navigateTo({
url: `/pages/views/task_details?id=${id}`
})
},
navTo(url) {
url ?
uni.navigateTo({
url: url,
fail() {
uni.switchTab({
url: url
})
}
}) : Toast('暂未开放')
},
navTwo(url, key) {
let role_id = this.$store.state.app?.userInfo?.admin?.role_id || null;
var arr = [3, 6];
if (role_id && role_id[0] == 9) {
if (arr.indexOf(key) == -1) {
Toast('请先成立公司后开放')
return false
}
}
this.navTo(url);
},
// 点击公告
clickNotice(e) {
uni.navigateTo({
url: `/pages/oaNews/oaNews?id=${e}`
})
},
// 判断当前是否登录,显示任务及完成率
showToask() {
if (!this.$store.state.app.token) {
this.assessData = this.assessData.map(item => {
item.num = '*';
return item;
})
} else {
// 新增接口后要替换为接口
this.assessData = this.assessData.map(item => {
item.num = '0';
return item;
})
}
},
login() {
console.log('ss');
uni.navigateTo({
url: '/pages/oaLogin/oaLogin'
})
},
async getUserIndex() {
const res = await getUserIndexAPI()
this.myOaInfo = res
}
},
onPullDownRefresh() {
// this.getIndexList()
uni.stopPullDownRefresh()
}
}
</script>
<style lang="scss">
.oa_home {
padding-bottom: 120rpx;
}
.header_bg {
position: absolute;
width: 100%;
// z-index: -1;
}
.home_header {
position: relative;
padding: 28.07rpx;
// height: 607.02rpx;
// height: 480.02rpx;
width: 100%;
// background-color: $theme-oa-color;
margin-bottom: 133.33rpx;
background-image: url('../../static/img/home/head-bg.png');
background-repeat: no-repeat;
background-size: 100% 100%;
.my_info {
.mesg_box {
color: #fff;
margin-left: 31.58rpx;
.nickname {
font-size: 32rpx;
font-weight: 500;
margin-right: 30rpx;
}
.duty {
margin-top: 10.53rpx;
}
}
}
.task_panel {
color: #fff;
display: flex;
justify-content: space-between;
flex-wrap: wrap;
align-content: space-between;
text-align: center;
padding-bottom: 110rpx;
.task_item {
margin-top: 42.11rpx;
.plan {
width: 173.68rpx;
font-size: 38.6rpx;
margin-bottom: 21.05rpx;
}
}
}
.backlog {
position: absolute;
left: 50%;
bottom: -121.75rpx;
transform: translate(-50%);
width: 694.74rpx;
background: #FFFFFF;
border-radius: 12px;
padding: 28.07rpx;
display: flex;
flex-direction: column;
justify-content: space-between;
font-size: 25rpx;
font-weight: 400;
.title {
font-size: 32rpx;
font-weight: 500;
}
&_item {
margin-top: 19.3rpx;
color: #666666;
.text {
font-size: 28.04rpx;
white-space: nowrap;
/* 禁止换行 */
overflow: hidden;
/* 溢出隐藏 */
text-overflow: ellipsis;
/* 使用省略号代表被截断的文本 */
width: 580rpx;
/* 设置元素宽度,根据需要进行调整 */
&::before {
content: '公告';
display: inline-block;
color: #FF8C1A;
padding: 2px 8px;
border-radius: 4px;
border: 1px solid #FF8C1A;
margin-right: 14.04rpx;
}
}
}
&_no {
margin-top: 19.3rpx;
color: #666666;
.text {
font-size: 28.04rpx;
white-space: nowrap;
/* 禁止换行 */
overflow: hidden;
/* 溢出隐藏 */
text-overflow: ellipsis;
/* 使用省略号代表被截断的文本 */
width: 580rpx;
/* 设置元素宽度,根据需要进行调整 */
&::before {
content: none;
}
}
}
}
.backlog_no_data {
bottom: -70rpx;
}
}
.home_header_no_data {
margin-bottom: 93.33rpx;
}
.fast_track {
width: 694rpx;
// height: 331rpx;
display: flex;
flex-wrap: wrap;
justify-content: left;
align-content: space-between;
margin: 0 auto;
padding: 15rpx 38.6rpx;
background-color: #fff;
border-radius: 12px;
.track_item {
width: 154.39rpx;
font-size: 24.56rpx;
margin: 25rpx 0;
display: flex;
flex-direction: column;
align-items: center;
.title {
margin-top: 14.04rpx;
}
}
}
.my_task {
width: 694.74rpx;
margin: 0 auto;
// margin-top: 31.58rpx;
// background-color: #fff;
border-radius: 12px;
// padding: 28.07rpx;
.no_task {
width: 694rpx;
height: 140rpx;
padding: 28rpx;
background: #FFFFFF;
border-radius: 21rpx 21rpx 21rpx 21rpx;
display: flex;
flex-direction: column;
justify-content: space-evenly;
.title {
font-size: 28rpx;
font-weight: 500;
color: #000000CC;
line-height: 35rpx;
}
.tips {
font-size: 25rpx;
font-weight: 400;
color: #333333FF;
line-height: 35rpx;
}
}
.task_title {
font-size: 25rpx;
font-weight: 400;
padding: 28rpx;
.title {
font-size: 32rpx;
font-weight: 500;
}
}
.task_list {
height: 196.49rpx;
border-bottom: 1px solid #CCCCCC;
padding: 21.05rpx 0;
display: flex;
flex-direction: column;
justify-content: space-between;
.title {
.tag {
color: #F24848;
font-size: 24.56rpx;
padding: 0 7.02rpx;
margin-right: 14.04rpx;
background: #FFE4E4;
border-radius: 4px;
}
.tag1 {
color: #3274F9;
font-size: 24.56rpx;
padding: 0 7.02rpx;
margin-right: 14.04rpx;
background: #E4EDFF;
border-radius: 4px;
}
.text {
font-size: 28.07rpx;
width: 403.51rpx;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.if_take {
font-size: 28.07rpx;
text-align: center;
line-height: 49.12rpx;
width: 115.79rpx;
height: 49.12rpx;
border-radius: 100px;
}
.take1 {
color: #47B347;
background: #DFFCDF;
}
.take2 {
color: #3274F9;
background: #E4EDFF;
}
.take3 {
color: #999999;
background: #F5F5F5;
}
}
.describe {
font-size: 24.56rpx;
}
.task_deta {
color: #999;
font-size: 24.56rpx;
}
}
}
.no_login {
position: fixed;
left: 0;
bottom: 0;
width: 100vw;
height: 112rpx;
/* #ifdef H5 */
height: 212rpx;
/* #endif */
background: rgba(#333333, 0.4);
border-radius: 14rpx 14rpx 0rpx 0rpx;
padding: 28rpx 28rpx;
.view {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
.text {
font-size: 28rpx;
font-weight: 500;
color: #FFFFFF;
}
.btn {
width: 158rpx;
height: 60rpx;
background: #3274F9;
border-radius: 30rpx 30rpx 30rpx 30rpx;
font-size: 28rpx;
font-weight: 500;
color: #FFFFFF;
display: flex;
justify-content: center;
align-items: center;
}
}
}
</style>