|
@@ -3,97 +3,103 @@
|
|
|
<template #header>
|
|
|
<div class="w-36">
|
|
|
<el-select v-model="searchForm.orgDept" block clearable placeholder="选择部门" size="large" @change="changeDpet">
|
|
|
- <el-option v-for="item in department" :label="item.deptName" :value="item.id"/>
|
|
|
+ <el-option v-for="item in department" :label="item.deptName" :value="item.id" />
|
|
|
</el-select>
|
|
|
</div>
|
|
|
<div class="w-36 ml-2">
|
|
|
<el-select v-model="searchForm.userId" block clearable placeholder="选择人员" size="large">
|
|
|
- <el-option v-for="item in departmentPeople" :label="item.name" :value="item.id"/>
|
|
|
+ <el-option v-for="item in departmentPeople" :label="item.name" :value="item.id" />
|
|
|
</el-select>
|
|
|
</div>
|
|
|
<div class="w-36 ml-4">
|
|
|
- <el-date-picker class="block" v-model="searchForm.startTime" type="month" value-format="YYYY-MM" placeholder="开始日期" clearable size="large"/>
|
|
|
+ <el-date-picker v-model="searchForm.startTime" class="block" type="month" value-format="YYYY-MM" placeholder="开始日期" clearable size="large" />
|
|
|
+ </div>
|
|
|
+ <div class="mx-2">
|
|
|
+ ~
|
|
|
</div>
|
|
|
- <div class="mx-2">~</div>
|
|
|
<div class="w-36">
|
|
|
- <el-date-picker class="block" v-model="searchForm.endTime" type="month" value-format="YYYY-MM" placeholder="结束日期" clearable size="large"/>
|
|
|
+ <el-date-picker v-model="searchForm.endTime" class="block" type="month" value-format="YYYY-MM" placeholder="结束日期" clearable size="large" />
|
|
|
</div>
|
|
|
<div class="ml-4">
|
|
|
<el-button size="large" type="primary" @click="searchClick">
|
|
|
- <HcIcon name="search-2"/>
|
|
|
+ <HcIcon name="search-2" />
|
|
|
<span>搜索</span>
|
|
|
</el-button>
|
|
|
</div>
|
|
|
<div class="ml-2">
|
|
|
<el-button size="large" @click="resetClick">
|
|
|
- <HcIcon name="close-circle"/>
|
|
|
+ <HcIcon name="close-circle" />
|
|
|
<span>重置</span>
|
|
|
</el-button>
|
|
|
</div>
|
|
|
</template>
|
|
|
<template #extra>
|
|
|
- <el-button size="large" type="warning" v-if="isEditState" @click="submitLogsClick">
|
|
|
- <HcIcon name="check-double"/>
|
|
|
+ <el-button v-if="isEditState" size="large" type="warning" @click="submitLogsClick">
|
|
|
+ <HcIcon name="check-double" />
|
|
|
<span>提交日志</span>
|
|
|
</el-button>
|
|
|
<template v-else>
|
|
|
- <el-button size="large" type="primary" @click="editLogsClick" v-if="!isShowEdit">
|
|
|
- <HcIcon name="add"/>
|
|
|
+ <el-button v-if="!isShowEdit" size="large" type="primary" @click="editLogsClick">
|
|
|
+ <HcIcon name="add" />
|
|
|
<span>写日志</span>
|
|
|
</el-button>
|
|
|
<!-- 修改自己的日志 -->
|
|
|
- <el-button size="large" type="primary" v-else @click="editmyLog">
|
|
|
- <HcIcon name="add"/>
|
|
|
+ <el-button v-else size="large" type="primary" @click="editmyLog">
|
|
|
+ <HcIcon name="add" />
|
|
|
<span>写日志</span>
|
|
|
</el-button>
|
|
|
</template>
|
|
|
|
|
|
- <el-button size="large" type="primary" v-if="isEditState" @click="gobackLog">
|
|
|
- <HcIcon name="arrow-go-back"/>
|
|
|
+ <el-button v-if="isEditState" size="large" type="primary" @click="gobackLog">
|
|
|
+ <HcIcon name="arrow-go-back" />
|
|
|
<span>取消</span>
|
|
|
</el-button>
|
|
|
</template>
|
|
|
<div class="hac-logs-main-body">
|
|
|
<div class="hac-logs-user-list-body">
|
|
|
<HcCardItem scrollbar>
|
|
|
- <div class="hac-user-list-item" v-for="(item, key) in userList">
|
|
|
- <div class="label">{{key}}</div>
|
|
|
+ <div v-for="(item, key) in userList" class="hac-user-list-item">
|
|
|
+ <div class="label">
|
|
|
+ {{ key }}
|
|
|
+ </div>
|
|
|
<template v-for="items in item">
|
|
|
- <div class="user-item" :class="userItemId.id === items.id?'cur':''" @click="userItemClick(items)">
|
|
|
- <img class="avatar" :src="items?.headPicture || avatarPng" alt=""/>
|
|
|
- <div class="name">{{items?.logTitle}}</div>
|
|
|
- <div class="state" v-if="items?.isEdit === 0">
|
|
|
- <span class="text-xl text-red mr-2" v-if="items?.isRead === 0">
|
|
|
- <HcIcon name="alarm-warning"/>
|
|
|
+ <div class="user-item" :class="userItemId.id === items.id ? 'cur' : ''" @click="userItemClick(items)">
|
|
|
+ <img class="avatar" :src="items?.headPicture || avatarPng" alt="">
|
|
|
+ <div class="name">
|
|
|
+ {{ items?.logTitle }}
|
|
|
+ </div>
|
|
|
+ <div v-if="items?.isEdit === 0" class="state">
|
|
|
+ <span v-if="items?.isRead === 0" class="text-xl text-red mr-2">
|
|
|
+ <HcIcon name="alarm-warning" />
|
|
|
</span>
|
|
|
- <span>{{items?.isRead === 0 ?'未读': '已读'}}</span>
|
|
|
+ <span>{{ items?.isRead === 0 ? '未读' : '已读' }}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
</div>
|
|
|
</HcCardItem>
|
|
|
</div>
|
|
|
- <div class="hac-logs-content-body" v-loading="logLoading">
|
|
|
- <HcLogsContent :data="logForm" ref="logsRef" v-if="isEditState" :isShowmyEdit="isShowEdit" />
|
|
|
- <HcLogsContent :data="logDetail" :edit="false" v-else :undefinedNum="undefinedNum"/>
|
|
|
+ <div v-loading="logLoading" class="hac-logs-content-body">
|
|
|
+ <HcLogsContent v-if="isEditState" ref="logsRef" :data="logForm" :is-showmy-edit="isShowEdit" />
|
|
|
+ <HcLogsContent v-else :data="logDetail" :edit="false" :undefined-num="undefinedNum" />
|
|
|
</div>
|
|
|
</div>
|
|
|
</HcCard>
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
-import {onActivated, ref} from "vue";
|
|
|
-import logsApi from "~api/task/logs";
|
|
|
-import {useAppStore} from "~src/store";
|
|
|
-import {getObjValue,getArrValue,isArray} from "js-fast-way";
|
|
|
-import HcLogsContent from "./components/logs-content.vue";
|
|
|
-import avatarPng from '~src/assets/images/avatar.png';
|
|
|
-import dayjs from 'dayjs';
|
|
|
-import { getdepartmentList,getuserList} from "~api/other";
|
|
|
+import { onActivated, ref } from 'vue'
|
|
|
+import logsApi from '~api/task/logs'
|
|
|
+import { useAppStore } from '~src/store'
|
|
|
+import { getArrValue, getObjValue, isArray } from 'js-fast-way'
|
|
|
+import HcLogsContent from './components/logs-content.vue'
|
|
|
+import avatarPng from '~src/assets/images/avatar.png'
|
|
|
+import dayjs from 'dayjs'
|
|
|
+import { getdepartmentList, getuserList } from '~api/other'
|
|
|
|
|
|
const useAppState = useAppStore()
|
|
|
-const userInfo = ref(useAppState.getUserInfo);
|
|
|
-const isShowEdit=ref(false)//编辑自己的日志
|
|
|
+const userInfo = ref(useAppState.getUserInfo)
|
|
|
+const isShowEdit = ref(false)//编辑自己的日志
|
|
|
// 调用时机为首次挂载, 以及每次从缓存中被重新插入时
|
|
|
onActivated(() => {
|
|
|
isEditState.value = false
|
|
@@ -103,10 +109,10 @@ onActivated(() => {
|
|
|
|
|
|
|
|
|
})
|
|
|
-const department=ref([])
|
|
|
+const department = ref([])
|
|
|
//获取部门列表
|
|
|
-const getDepartmentDict=async()=>{
|
|
|
- const {error, code, data} = await getdepartmentList({deptType:2})
|
|
|
+const getDepartmentDict = async ()=>{
|
|
|
+ const { error, code, data } = await getdepartmentList({ deptType:2 })
|
|
|
if (!error && code === 200) {
|
|
|
department.value = getArrValue(data)
|
|
|
|
|
@@ -116,13 +122,13 @@ const getDepartmentDict=async()=>{
|
|
|
}
|
|
|
}
|
|
|
//改变部门
|
|
|
-const changeDpet=(val)=>{
|
|
|
+const changeDpet = (val)=>{
|
|
|
getDepartmentuserDict(val)
|
|
|
}
|
|
|
-const departmentPeople=ref([])
|
|
|
+const departmentPeople = ref([])
|
|
|
//获取部门人员列表
|
|
|
-const getDepartmentuserDict=async(id)=>{
|
|
|
- const {error, code, data} = await getuserList({deptId:id})
|
|
|
+const getDepartmentuserDict = async (id)=>{
|
|
|
+ const { error, code, data } = await getuserList({ deptId:id })
|
|
|
if (!error && code === 200) {
|
|
|
departmentPeople.value = getArrValue(data)
|
|
|
|
|
@@ -133,8 +139,8 @@ const getDepartmentuserDict=async(id)=>{
|
|
|
}
|
|
|
//获取所有员工
|
|
|
|
|
|
-const getUserDict=async()=>{
|
|
|
- const {error, code, data} = await getuserList({tenantId:useAppState.tenantId})
|
|
|
+const getUserDict = async ()=>{
|
|
|
+ const { error, code, data } = await getuserList({ tenantId:useAppState.tenantId })
|
|
|
if (!error && code === 200) {
|
|
|
departmentPeople.value = getArrValue(data)
|
|
|
|
|
@@ -144,7 +150,7 @@ const getUserDict=async()=>{
|
|
|
}
|
|
|
}
|
|
|
//搜索表单
|
|
|
-const searchForm = ref({orgDept: null, userId: null, startTime: null, endTime: null})
|
|
|
+const searchForm = ref({ orgDept: null, userId: null, startTime: null, endTime: null })
|
|
|
|
|
|
//搜索
|
|
|
const searchClick = () => {
|
|
@@ -164,7 +170,7 @@ const resetClick = () => {
|
|
|
//日志填报列表查询
|
|
|
const userList = ref({})
|
|
|
const getLogList = async () => {
|
|
|
- const {error, code, data, msg} = await logsApi.getLogList(searchForm.value)
|
|
|
+ const { error, code, data, msg } = await logsApi.getLogList(searchForm.value)
|
|
|
//判断状态
|
|
|
if (!error && code === 200) {
|
|
|
const res = getObjValue(data)
|
|
@@ -188,8 +194,8 @@ const userItemId = ref({})
|
|
|
const userItemClick = (item) => {
|
|
|
if (!isEditState.value) {
|
|
|
userItemId.value = item
|
|
|
- isShowEdit.value=false
|
|
|
- item.isRead=1
|
|
|
+ isShowEdit.value = false
|
|
|
+ item.isRead = 1
|
|
|
getLogDetail()
|
|
|
} else {
|
|
|
window.$message?.warning('请先提交日志或退出填写日志状态')
|
|
@@ -198,42 +204,44 @@ const userItemClick = (item) => {
|
|
|
|
|
|
//日志填报详情
|
|
|
const logDetail = ref({})
|
|
|
-const undefinedNum=ref(null)
|
|
|
+const undefinedNum = ref(null)
|
|
|
const getLogDetail = async () => {
|
|
|
const item = userItemId.value
|
|
|
- if(item.id){
|
|
|
- const {error, code, data, msg} = await logsApi.getLogDetail({
|
|
|
- id: item.id
|
|
|
+ if (item.id) {
|
|
|
+ const { error, code, data, msg } = await logsApi.getLogDetail({
|
|
|
+ id: item.id,
|
|
|
})
|
|
|
//判断状态
|
|
|
if (!error && code === 200) {
|
|
|
logDetail.value = getObjValue(data)
|
|
|
- const {real_name, avatar} = userInfo.value
|
|
|
- let logTitle=logDetail.value['logTitle']
|
|
|
- console.log(logTitle,'logTitle');
|
|
|
- let index = logTitle.lastIndexOf("的");
|
|
|
- let str = logTitle.substring(0,index);
|
|
|
+ const { real_name, avatar } = userInfo.value
|
|
|
+ let logTitle = logDetail.value['logTitle']
|
|
|
+ console.log(logTitle, 'logTitle')
|
|
|
+ let index = logTitle.lastIndexOf('的')
|
|
|
+ let str = logTitle.substring(0, index)
|
|
|
//判断是否编辑自己的日志
|
|
|
- if(real_name===str){
|
|
|
- isShowEdit.value=true
|
|
|
+ if (real_name === str) {
|
|
|
+ isShowEdit.value = true
|
|
|
}
|
|
|
} else {
|
|
|
logDetail.value = {}
|
|
|
window.$message?.error(msg)
|
|
|
}
|
|
|
//计算未完成数量
|
|
|
- console.log(logDetail.value.taskList,'taskList');
|
|
|
- let arr=[]
|
|
|
- if(isArray(logDetail.value?.taskList)){
|
|
|
- arr=logDetail.value?.taskList.filter((ele)=>{
|
|
|
- if(ele?.isOverdue==1){
|
|
|
+ console.log(logDetail.value.taskList, 'taskList')
|
|
|
+ let arr = []
|
|
|
+ if (isArray(logDetail.value?.taskList)) {
|
|
|
+ // eslint-disable-next-line array-callback-return
|
|
|
+ arr = logDetail.value?.taskList.filter((ele)=>{
|
|
|
+ // eslint-disable-next-line eqeqeq
|
|
|
+ if (ele?.isOverdue == 1) {
|
|
|
return ele
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
|
|
|
- undefinedNum.value=arr.length
|
|
|
- console.log( undefinedNum.value,' undefinedNum.value');
|
|
|
+ undefinedNum.value = arr.length
|
|
|
+ console.log( undefinedNum.value, ' undefinedNum.value')
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -251,8 +259,8 @@ const logForm = ref({
|
|
|
//当前状态,false查看模式,true写日志模式
|
|
|
const isEditState = ref(false)
|
|
|
const editLogsClick = () => {
|
|
|
- console.log('写日志');
|
|
|
- logForm.value={
|
|
|
+ console.log('写日志')
|
|
|
+ logForm.value = {
|
|
|
headPicture: '',
|
|
|
logTitle: '',
|
|
|
createTime: '',
|
|
@@ -260,7 +268,7 @@ const editLogsClick = () => {
|
|
|
workDesc: '',
|
|
|
expenseReimbursementAmount: '',
|
|
|
}
|
|
|
- const {real_name, avatar} = userInfo.value
|
|
|
+ const { real_name, avatar } = userInfo.value
|
|
|
isEditState.value = true
|
|
|
logForm.value.headPicture = avatar || avatarPng
|
|
|
logForm.value.logTitle = real_name + '的日志'
|
|
@@ -268,16 +276,16 @@ const editLogsClick = () => {
|
|
|
}
|
|
|
//修改自己的日志
|
|
|
|
|
|
-const editmyLog=()=>{
|
|
|
- console.log('修改自己的');
|
|
|
+const editmyLog = ()=>{
|
|
|
+ console.log('修改自己的')
|
|
|
isEditState.value = true
|
|
|
- logForm.value=logDetail.value
|
|
|
+ logForm.value = logDetail.value
|
|
|
|
|
|
}
|
|
|
//返回到查看日志界面
|
|
|
-const gobackLog=()=>{
|
|
|
+const gobackLog = ()=>{
|
|
|
isEditState.value = false
|
|
|
- isShowEdit.value=false
|
|
|
+ isShowEdit.value = false
|
|
|
}
|
|
|
const logsRef = ref(null)
|
|
|
const logLoading = ref(false)
|
|
@@ -290,7 +298,7 @@ const submitLogsClick = async () => {
|
|
|
delete form.headPicture
|
|
|
delete form.logTitle
|
|
|
//发起请求
|
|
|
- const {error, code, msg} = await logsApi.setLogSubmit(form)
|
|
|
+ const { error, code, msg } = await logsApi.setLogSubmit(form)
|
|
|
//判断状态
|
|
|
logLoading.value = false
|
|
|
if (!error && code === 200) {
|