Commit ecb5361a08a4e17f0bb6bb921f6dff137ddd3fd1

Authored by wuxw
1 parent 7d596bb5

优化考勤

src/components/oa/staffAttendanceReplenishCheckIn.vue
@@ -54,6 +54,13 @@ export default { @@ -54,6 +54,13 @@ export default {
54 }, 54 },
55 methods: { 55 methods: {
56 open(details) { 56 open(details) {
  57 + details.forEach(item => {
  58 + if(item.specCd === '1001'){
  59 + item.specName = this.$t('staffAttendance.work')
  60 + }else{
  61 + item.specName = this.$t('staffAttendance.offWork')
  62 + }
  63 + })
57 this.details = details || [] 64 this.details = details || []
58 this.form = { 65 this.form = {
59 detailId: '', 66 detailId: '',
src/components/org/addScheduleClassesStaff.vue
@@ -45,10 +45,13 @@ export default { @@ -45,10 +45,13 @@ export default {
45 scheduleId: this.scheduleId, 45 scheduleId: this.scheduleId,
46 staffs: this.staffs 46 staffs: this.staffs
47 } 47 }
48 - await saveScheduleClassesStaff(params)  
49 - this.$message.success(this.$t('common.operationSuccess')) 48 + const {code,msg} = await saveScheduleClassesStaff(params)
  49 + if(code === 0){
50 this.$emit('success') 50 this.$emit('success')
51 this.visible = false 51 this.visible = false
  52 + }else{
  53 + this.$message.error(msg)
  54 + }
52 } catch (error) { 55 } catch (error) {
53 this.$message.error(this.$t('common.saveError')) 56 this.$message.error(this.$t('common.saveError'))
54 } 57 }
src/views/contract/addContractList.vue
@@ -214,7 +214,7 @@ @@ -214,7 +214,7 @@
214 214
215 <!-- Approvers --> 215 <!-- Approvers -->
216 <div v-show="addContractInfo.audit == '1001'"> 216 <div v-show="addContractInfo.audit == '1001'">
217 - <purchase-approvers ref="purchaseApprovers" :flow-type="50005" @notify3="handleNotify"></purchase-approvers> 217 + <purchase-approvers ref="purchaseApprovers" flow-type="50005" @notify3="handleNotify"></purchase-approvers>
218 </div> 218 </div>
219 219
220 <!-- Buttons --> 220 <!-- Buttons -->
src/views/oa/monthAttendanceManageList.vue
@@ -228,11 +228,9 @@ export default { @@ -228,11 +228,9 @@ export default {
228 pagePath: 'monthAttendance' 228 pagePath: 'monthAttendance'
229 } 229 }
230 await exportMonthAttendance(params) 230 await exportMonthAttendance(params)
231 - this.$message.success(this.$t('common.operationSuccess')) 231 + this.$router.push('/pages/property/downloadTempFile?tab=下载中心')
232 } catch (error) { 232 } catch (error) {
233 this.$message.error(this.$t('monthAttendance.exportError')) 233 this.$message.error(this.$t('monthAttendance.exportError'))
234 - } finally {  
235 - this.loading = false  
236 } 234 }
237 }, 235 },
238 236
src/views/oa/staffAttendanceManageList.vue
@@ -38,32 +38,34 @@ @@ -38,32 +38,34 @@
38 <el-card class="box-card"> 38 <el-card class="box-card">
39 <div class="attendance-grid"> 39 <div class="attendance-grid">
40 <el-row :gutter="20"> 40 <el-row :gutter="20">
41 - <el-col v-for="index in staffAttendanceManageInfo.maxDay" :key="index" :span="4" class="attendance-day" 41 + <el-col v-for="index in staffAttendanceManageInfo.maxDay" :key="index" :span="4" class="attendance-day "
42 :style="{ backgroundColor: getBgColor(index) }"> 42 :style="{ backgroundColor: getBgColor(index) }">
43 - <div class="day-header">  
44 - {{ staffAttendanceManageInfo.curYear }}-{{ staffAttendanceManageInfo.curMonth }}-{{ index }}  
45 - </div> 43 + <div class="labeling-strip">
  44 + <div class="day-header">
  45 + {{ staffAttendanceManageInfo.curYear }}-{{ staffAttendanceManageInfo.curMonth }}-{{ index }}
  46 + </div>
46 47
47 - <div v-if="getDayAttendance(index) && getDayAttendance(index).state !== '30000'" class="replenish-btn"  
48 - @click="replenishCheckIn(index)">  
49 - {{ $t('staffAttendance.replenish') }}  
50 - </div> 48 + <div v-if="getDayAttendance(index) && getDayAttendance(index).state !== '30000'" class="strip"
  49 + @click="replenishCheckIn(index)">
  50 + <span> {{ $t('staffAttendance.replenish') }}</span>
  51 + </div>
51 52
52 - <div v-for="(item, detailIndex) in getAttendanceDetail(index)" :key="detailIndex"  
53 - class="attendance-detail">  
54 - <div v-if="item.rest">{{ item.rest }}</div>  
55 - <div v-else>  
56 - {{ item.specCd === '1001' ? $t('staffAttendance.work') : $t('staffAttendance.offWork') }}:  
57 - <span v-if="item.state !== '10000'">{{ formatTime(item.checkTime) }}</span>  
58 - <span v-else> - </span>  
59 - <span>({{ item.stateName }})</span> 53 + <div v-for="(item, detailIndex) in getAttendanceDetail(index)" :key="detailIndex"
  54 + class="attendance-detail">
  55 + <div v-if="item.rest">{{ item.rest }}</div>
  56 + <div v-else>
  57 + {{ item.specCd === '1001' ? $t('staffAttendance.work') : $t('staffAttendance.offWork') }}:
  58 + <span v-if="item.state !== '10000'">{{ formatTime(item.checkTime) }}</span>
  59 + <span v-else> - </span>
  60 + <span>({{ item.stateName }})</span>
  61 + </div>
60 </div> 62 </div>
61 - </div>  
62 63
63 - <div class="log-link">  
64 - <el-link type="primary" @click="checkInLog(index)">  
65 - {{ $t('staffAttendance.log') }}  
66 - </el-link> 64 + <div class="log-link">
  65 + <el-link type="primary" @click="checkInLog(index)">
  66 + {{ $t('staffAttendance.log') }}
  67 + </el-link>
  68 + </div>
67 </div> 69 </div>
68 </el-col> 70 </el-col>
69 </el-row> 71 </el-row>
@@ -76,7 +78,7 @@ @@ -76,7 +78,7 @@
76 78
77 <choose-org-tree ref="chooseOrgTree" @switchOrg="handleSwitchOrg"></choose-org-tree> 79 <choose-org-tree ref="chooseOrgTree" @switchOrg="handleSwitchOrg"></choose-org-tree>
78 <staff-attendance-detail ref="staffAttendanceDetail"></staff-attendance-detail> 80 <staff-attendance-detail ref="staffAttendanceDetail"></staff-attendance-detail>
79 - <staff-attendance-replenish-check-in ref="staffAttendanceReplenishCheckIn"></staff-attendance-replenish-check-in> 81 + <staff-attendance-replenish-check-in ref="staffAttendanceReplenishCheckIn" @success="loadStaffAttendances"></staff-attendance-replenish-check-in>
80 </div> 82 </div>
81 </template> 83 </template>
82 84
@@ -177,6 +179,7 @@ export default { @@ -177,6 +179,7 @@ export default {
177 179
178 const { data } = await queryAttendanceClassesTask(params) 180 const { data } = await queryAttendanceClassesTask(params)
179 this.staffAttendanceManageInfo.attendances = data || [] 181 this.staffAttendanceManageInfo.attendances = data || []
  182 + console.log(this.staffAttendanceManageInfo.attendances)
180 } catch (error) { 183 } catch (error) {
181 console.error('Failed to load staff attendances:', error) 184 console.error('Failed to load staff attendances:', error)
182 } 185 }
@@ -199,8 +202,12 @@ export default { @@ -199,8 +202,12 @@ export default {
199 202
200 getDayAttendance(day) { 203 getDayAttendance(day) {
201 if (!this.staffAttendanceManageInfo.attendances) return null 204 if (!this.staffAttendanceManageInfo.attendances) return null
  205 + const attendance = this.staffAttendanceManageInfo.attendances.find(item => item.taskDay == day)
202 206
203 - return this.staffAttendanceManageInfo.attendances.find(item => item.taskDay === day) || null 207 + if (!attendance) {
  208 + return null
  209 + }
  210 + return attendance
204 }, 211 },
205 212
206 getAttendanceDetail(day) { 213 getAttendanceDetail(day) {
@@ -306,11 +313,39 @@ export default { @@ -306,11 +313,39 @@ export default {
306 } 313 }
307 314
308 .attendance-grid { 315 .attendance-grid {
  316 +
  317 +
309 .attendance-day { 318 .attendance-day {
310 padding: 10px; 319 padding: 10px;
311 margin-bottom: 20px; 320 margin-bottom: 20px;
312 border-radius: 4px; 321 border-radius: 4px;
313 box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); 322 box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
  323 + height: 120px;
  324 +
  325 + .labeling-strip {
  326 + position: relative;
  327 +
  328 + .strip {
  329 + position: absolute;
  330 + top: 0;
  331 + right: 0;
  332 + background-color: #409eff;
  333 + color: #fff;
  334 + padding: 4px 8px;
  335 + font-size: 12px;
  336 + border-radius: 0 4px 0 4px;
  337 + cursor: pointer;
  338 + z-index: 1;
  339 +
  340 + &:hover {
  341 + background-color: #66b1ff;
  342 + }
  343 +
  344 + span {
  345 + white-space: nowrap;
  346 + }
  347 + }
  348 + }
314 349
315 .day-header { 350 .day-header {
316 font-weight: bold; 351 font-weight: bold;
@@ -318,6 +353,10 @@ export default { @@ -318,6 +353,10 @@ export default {
318 text-align: center; 353 text-align: center;
319 } 354 }
320 355
  356 +
  357 +
  358 +
  359 +
321 .replenish-btn { 360 .replenish-btn {
322 color: #409eff; 361 color: #409eff;
323 cursor: pointer; 362 cursor: pointer;