Przeglądaj źródła

fix: 周日报功能完善

qiny 1 rok temu
rodzic
commit
f2fbc06b2a

+ 10 - 7
client/src/components/UserSelect/index.vue

@@ -10,15 +10,18 @@ interface ISelect {
   onChange?: (any) => any
   defaultValue?: any[] | string
 }
-const {
-  construction = 'simple',
-  multiple = false,
-  onChange,
-  defaultValue = []
-} = defineProps<ISelect>()
+const props = defineProps<ISelect>()
+const { construction = 'simple', multiple = false, onChange } = props
+const { defaultValue = [] } = toRefs<ISelect>(props)
 
+watch(
+  () => defaultValue.value,
+  () => {
+    selectUserList.value = defaultValue.value
+  }
+)
 const selectUser = ref(null) // 选中用户(单选)
-const selectUserList = ref(defaultValue) // 选中的用户列表
+const selectUserList = ref() // 选中的用户列表
 const treeUserList = ref<any[]>()
 const simpleUserList = ref<any[]>()
 const getUserList = async () => {

+ 41 - 2
client/src/views/OaSystem/marketCenter/returnMessage/MessageTable.vue

@@ -5,6 +5,8 @@
 import request from '@/config/axios'
 import { calculateTableHeight, getUserInfo } from '@/utils/tool'
 import { dateFormatter } from '@/utils/formatTime'
+import { openFlow } from '@/utils/flow'
+
 interface ITable {
   api: string // 请求地址
   type?: 'all' | 'my' | 'dept' // 所有、我的、部门
@@ -66,9 +68,46 @@ onBeforeMount(() => {
   queryContractListAjax()
 })
 
+// 根据流程id获取流程页面url
+const getFlowUrl = async (instanceId) => {
+  const result = await request.get(
+    {
+      url: '/IFlowInstance/getFlowUrl',
+      params: { flowInstanceId: instanceId }
+    },
+    '/workflow'
+  )
+  // console.log('getFlowUrl', result)
+  return result
+}
+const router = useRouter()
 // 点击查看详情
-const handleCellClick = (event) => {
-  console.log('点击查看详情', event)
+const handleCellClick = async (event) => {
+  // console.log('点击查看详情', event)
+  // if (event.projectId) {
+  //   // 跳转到合同相关页面
+  //   router.push(`/projectDetail?id=${event.projectId}&contractId=${event.contractId}`)
+  // } else {
+  //   // 跳转到开票相关页面
+  //   const flowUrl = await getFlowUrl(event.invoiceInstanceId)
+  //   if (flowUrl) {
+  //     openFlow(router, flowUrl, '开票流程')
+  //   } else {
+  //     ElMessage.info('流程页面不存在')
+  //   }
+  // }
+  if (event.messageType == '1') {
+    // 跳转到合同相关页面
+    router.push(`/projectDetail?id=${event.projectId}&contractId=${event.contractId}`)
+  } else if (event.messageType == '2') {
+    // 跳转到开票相关页面
+    const flowUrl = await getFlowUrl(event.invoiceInstanceId)
+    if (flowUrl) {
+      openFlow(router, flowUrl, '开票流程')
+    } else {
+      ElMessage.error('未查询到相关数据')
+    }
+  }
 }
 
 onMounted(() => {})

+ 4 - 4
client/src/views/OaSystem/personnelManagement/components/AmountOfWork.vue

@@ -130,15 +130,15 @@ const setInitData = () => {
 }
 
 watch(
-  () => nowDate.value,
+  () => [nowDate.value, initialData.value],
   () => {
     setInitData()
   }
 )
 
-onMounted(() => {
-  getAllProject()
-  setInitData()
+onMounted(async () => {
+  await getAllProject()
+  await setInitData()
 })
 // 获取任务列表
 const getAllProject = async () => {

+ 49 - 0
client/src/views/OaSystem/personnelManagement/components/ReportReceive.vue

@@ -0,0 +1,49 @@
+<script lang="ts" setup>
+/**
+ * @description 获取报告接收人,延用之前的接收人
+ */
+import request from '@/config/axios'
+import UserSelect from '@/components/UserSelect/index.vue'
+import { getUserInfo } from '@/utils/tool'
+import PubsubService from '@/utils/PubsubService'
+
+interface IProps {
+  onChange: (val: any) => void
+}
+const { onChange } = defineProps<IProps>()
+// const { onChange, receiveIds } = toRefs(prop)
+
+onMounted(async () => {
+  await getReceive()
+  // 执行更新日志接收人事件
+  PubsubService.subscribe('init-report-receive', () => {
+    getReceive()
+  })
+})
+// watch(
+//   () => receiveIds.value,
+//   () => {
+//     getReceive()
+//   }
+// )
+const defaultValue = ref<any>([])
+const getReceive = async () => {
+  const userInfo = getUserInfo()
+  const result = await request.get({
+    url: '/adm/report/recent-receive-user',
+    params: { userId: userInfo.id }
+  })
+  defaultValue.value = result
+  onChange(result)
+}
+</script>
+<template>
+  <UserSelect
+    ref="userSelectRef"
+    construction="tree"
+    :multiple="true"
+    :onChange="onChange"
+    :defaultValue="defaultValue"
+  />
+</template>
+<style scoped lang="scss"></style>

+ 11 - 6
client/src/views/OaSystem/personnelManagement/dailyCenter/OaCalendar.vue

@@ -55,7 +55,7 @@ const $emit = defineEmits<{
   (e: 'click', v: string | object): void
 }>()
 
-const calendar = ref()
+const calendar = ref<any>(null)
 const todayValue = ref(new Date())
 
 watch(todayValue, () => {
@@ -75,6 +75,7 @@ watch(todayValue, () => {
   }
 })
 
+// 切换月份
 const selectDate = (val) => {
   if (!calendar.value) return
   calendar.value.selectDate(val)
@@ -90,12 +91,10 @@ const selectDate = (val) => {
 }
 
 onMounted(() => {
-  initDailyReportData()
-  // 为了方便获取提交的内容,需要重置一下日期这些内容
-  const timer = setTimeout(() => {
+  initDailyReportData().then(() => {
+    // 为了方便获取提交的内容,需要重置一下日期这些内容
     $emit('click', dayReportMap.value[moment(todayValue.value).format('YYYY-MM-DD')])
-    clearTimeout(timer)
-  }, 1000)
+  })
   // 订阅提交(暂存)事件,执行重置事件
   PubsubService.subscribe('sendReportHandle-init', () => {
     initDailyReportData()
@@ -257,10 +256,16 @@ const initDailyReportData = async (): Promise<any> => {
  * 3、当天,蓝色三角+画笔 square-today
  * 4、未到,灰色三角+省略 square-future
  * 5、请假,橙色三角+假   square-leave
+ * 6、暂存,同 未填
  */
 const getDayClass = (data) => {
   const { isworkday = 0, state = '', date = '', isLog } = dayReportMap.value[data] ?? {}
+  // 是否暂存
+  const isTemp = isLog?.isTemp ?? false
   const isFuture = moment(date).isAfter(moment())
+  if (isTemp) {
+    return 'square-unfilled'
+  }
   if (date == moment().format('YYYY-MM-DD')) {
     return `square-today`
   }

+ 5 - 6
client/src/views/OaSystem/personnelManagement/dailyCenter/dailyCenter.vue

@@ -5,8 +5,8 @@
       <div class="calendarBox">
         <OaCalendar @click="dateOnChange" />
       </div>
-      <div class="contentBox" v-if="writeData?.isLog">
-        <DetailBox :detail="writeData.isLog" />
+      <div class="contentBox" v-if="writeData?.isLog && !writeData?.isLog.isTemp">
+        <DetailBox :detail="writeData?.isLog" />
       </div>
       <div class="contentBox" v-else>
         <EditorDetail :writeData="writeData" />
@@ -19,7 +19,6 @@
 import OaCalendar from './OaCalendar.vue'
 import DetailBox from '../components/DetailBox.vue'
 import EditorDetail from './editorDetail.vue'
-import moment from 'moment'
 defineOptions({ name: 'DailyCenter' })
 
 interface ItemState {
@@ -32,10 +31,10 @@ interface ItemState {
   state: string //leaveMap
 }
 const writeData = ref<any>({
-  date: moment().format('YYYY-MM-DD')
+  date: ''
 })
-const dateOnChange = (date) => {
-  writeData.value = date
+const dateOnChange = (data) => {
+  writeData.value = data ?? {}
 }
 </script>
 

+ 25 - 10
client/src/views/OaSystem/personnelManagement/dailyCenter/editorDetail.vue

@@ -11,13 +11,8 @@
             </el-form-item>
           </el-col>
           <el-col :span="16">
-            <el-form-item class="label-item" label="接收人" required>
-              <UserSelect
-                construction="tree"
-                :multiple="true"
-                :onChange="getReceiveUserIds"
-                :defaultValue="formData.receiveUserIds"
-              />
+            <el-form-item class="label-item report" label="接收人" required>
+              <ReportReceive :onChange="getReceiveUserIds" key="daily" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -41,7 +36,7 @@
     <AmountOfWork
       :onChange="getWorkTimeList"
       :initialData="formData.weeklyWorkloadList"
-      :nowDate="props.writeData?.date"
+      :nowDate="writeData?.date"
     />
     <div class="footBox" v-if="isUpDate">
       <el-button type="primary" @click="sendReportHandle(false)">更新</el-button>
@@ -56,7 +51,7 @@
 <script setup lang="ts">
 import request from '@/config/axios'
 import AmountOfWork from '../components/AmountOfWork.vue'
-import UserSelect from '@/components/UserSelect/index.vue'
+import ReportReceive from '../components/ReportReceive.vue'
 import { getUserInfo } from '@/utils/tool'
 import moment from 'moment'
 import PubsubService from '@/utils/PubsubService'
@@ -78,7 +73,7 @@ onMounted(() => {
 })
 
 watch(
-  () => writeData.value?.date,
+  () => [writeData.value?.date, writeData.value?.isLog?.id],
   () => {
     initLog()
   }
@@ -96,6 +91,12 @@ const initLog = () => {
     formData.value.weeklyWorkloadList = []
     formData.value.receiveUserIds = []
     isUpDate.value = false
+    // 发布更新日志接收人事件
+    PubsubService.publish('init-report-receive', {})
+  }
+  // 如果是暂存数据回填
+  if (writeData.value?.isLog?.isTemp) {
+    isUpDate.value = false
   }
 }
 
@@ -178,6 +179,8 @@ const sendReportHandle = async (isTemp) => {
     }
   } else if (result?.msg && isTemp) {
     message.success('日志暂存成功')
+    // 发布提交(暂存)事件
+    PubsubService.publish('sendReportHandle-init', {})
   } else {
     message.error('日志发送失败')
   }
@@ -202,6 +205,18 @@ const sendReportHandle = async (isTemp) => {
         text-align: center;
       }
     }
+    .report {
+      width: 100%;
+
+      :deep(.el-form-item__content) {
+        > div:first-child {
+          width: 100%;
+        }
+        .el-select {
+          width: 100%;
+        }
+      }
+    }
   }
   .footBox {
     // height: 100%;

+ 9 - 0
client/src/views/OaSystem/personnelManagement/weeklyCenter/WeekCalendar.vue

@@ -196,6 +196,8 @@ const setDayOfMonth = async () => {
           date: moment(dm).format('YYYY-MM'),
           index: i
         }
+        // 初始化的时候要对当前日期进行一次刷新操作,因为可能本周存在暂存数据
+        weekOnChange(sourceList.value[i], i)
       }
       sourceList.value[i][j]['am'] = attendanceStatusObj.value[dm]?.am
       sourceList.value[i][j]['pm'] = attendanceStatusObj.value[dm]?.pm
@@ -345,7 +347,14 @@ const getIsFillWeek = (arr, type: 'class' | 'font') => {
   const weekDate = moment(arr[0].dm)
   const thisDate = moment()
   const target = arr.find((item) => weekLogObj.value[item.dm])
+  const targetObj = weekLogObj.value[target?.dm]
+
+  // 是否暂存
+  const isTemp = targetObj?.isTemp ?? false
   const isClass = type === 'class'
+  if (isTemp) {
+    return isClass ? 'color2' : '(暂存)'
+  }
   if (weekDate.isAfter(thisDate)) {
     return isClass ? 'color3' : '(未到)'
   }

+ 39 - 14
client/src/views/OaSystem/personnelManagement/weeklyCenter/editorDetail.vue

@@ -20,8 +20,8 @@
             </el-form-item>
           </el-col>
           <el-col :span="14">
-            <el-form-item class="label-item" label="接收人" required>
-              <UserSelect construction="tree" :multiple="true" :onChange="getReceiveUserIds" />
+            <el-form-item class="label-item report" label="接收人" required>
+              <ReportReceive :onChange="getReceiveUserIds" key="weekly" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -61,9 +61,10 @@
 import moment from 'moment'
 import request from '@/config/axios'
 import AmountOfWork from '../components/AmountOfWork.vue'
-import UserSelect from '@/components/UserSelect/index.vue'
+import ReportReceive from '../components/ReportReceive.vue'
 import { getUserInfo } from '@/utils/tool'
 import PubsubService from '@/utils/PubsubService'
+
 defineOptions({ name: 'EditorDetail' })
 
 interface IProp {
@@ -75,11 +76,25 @@ const { writeData, weekDate } = toRefs(props)
 
 const isUpDate = ref(false) // 是否是更新周报
 
-watch(weekDate, () => {
+onMounted(() => {
+  if (!weekDate.value?.[0]) {
+    weekDate.value = [
+      moment().startOf('isoWeek').format('YYYY-MM-DD'),
+      moment().endOf('isoWeek').format('YYYY-MM-DD')
+    ]
+  }
   initLog()
 })
 
+watch(
+  () => [weekDate.value[0], writeData.value?.isLog?.id],
+  () => {
+    initLog()
+  }
+)
+
 const initLog = () => {
+  // 如果是更新周报的话回填数据
   if (writeData.value?.isLog) {
     const { reportContent, workload, receiveIds } = writeData.value.isLog
     formData.value.reportContent = reportContent
@@ -91,6 +106,12 @@ const initLog = () => {
     formData.value.weeklyWorkloadList = []
     formData.value.receiveUserIds = []
     isUpDate.value = false
+    // 发布更新日志接收人事件
+    PubsubService.publish('init-report-receive', {})
+  }
+  // 如果是暂存数据回填
+  if (writeData.value?.isLog?.isTemp) {
+    isUpDate.value = false
   }
 }
 
@@ -151,16 +172,6 @@ const sendReportHandle = async (isTemp) => {
     reportMonth: writeData.value.month, // 月份
     reportWeek: writeData.value.week // 周
     // reportDay: writeData.value.dayOfWeek // 天
-    // [
-    //   {
-    //     workTime: 1,
-    //     projectId: '859ae379-11c7-49d7-b0b9-d394aa07c785'
-    //   },
-    //   {
-    //     workTime: 20,
-    //     projectId: 'e1ce98c6-002a-40d2-a543-65381d878285'
-    //   }
-    // ]
   }
   // console.log('提交(暂存)~~~~~~~~~~~~~~~~~~~', params, weekDate.value)
   // 如果是更新的话要传一下报告id
@@ -180,6 +191,8 @@ const sendReportHandle = async (isTemp) => {
     isUpDate.value = true
   } else if (result?.msg && isTemp) {
     message.success('周报暂存成功')
+    // 发布提交(暂存)事件
+    PubsubService.publish('sendWeeklyReportHandle-init', {})
   } else {
     message.error('周报发送失败')
   }
@@ -216,6 +229,18 @@ const sendReportHandle = async (isTemp) => {
           Microsoft YaHei;
       }
     }
+    .report {
+      width: 100%;
+
+      :deep(.el-form-item__content) {
+        > div:first-child {
+          width: 100%;
+        }
+        .el-select {
+          width: 100%;
+        }
+      }
+    }
     .timer-range {
       width: 100%;
       border: 1px solid #dee0e3;

+ 2 - 6
client/src/views/OaSystem/personnelManagement/weeklyCenter/weeklyCenter.vue

@@ -5,7 +5,7 @@
       <div class="calendarBox">
         <WeekCalendar :onChange="onChange" />
       </div>
-      <div class="contentBox" v-if="writeData.isLog">
+      <div class="contentBox" v-if="writeData.isLog && !writeData.isLog.isTemp">
         <DetailBox :detail="writeData.isLog" />
       </div>
       <div class="contentBox" v-else>
@@ -19,17 +19,13 @@
 import WeekCalendar from './WeekCalendar.vue'
 import DetailBox from '../components/DetailBoxWeek.vue'
 import EditorDetail from './editorDetail.vue'
-import moment from 'moment'
 // import request from '@/config/axios'
 
 defineOptions({ name: 'WeeklyCenter' })
 
 // 本周填写的日期
 const writeData = ref<any>({
-  weekDate: [
-    moment().startOf('isoWeek').format('YYYY-MM-DD'),
-    moment().endOf('isoWeek').format('YYYY-MM-DD')
-  ]
+  weekDate: []
 })
 const onChange = (data) => {
   writeData.value = data