|
@@ -1,351 +1,366 @@
|
|
|
<script setup lang="ts">
|
|
|
-import { User_List } from '@/api/user/index'
|
|
|
-import { GlobalStore } from '@/stores/index'
|
|
|
-import { getFormatDuration } from '@/utils/common'
|
|
|
+import {User_List} from '@/api/user/index'
|
|
|
+import {GlobalStore} from '@/stores/index'
|
|
|
+import {getFormatDuration} from '@/utils/common'
|
|
|
import Drawer from '@/components/Drawer/index.vue'
|
|
|
import TableBase from '@/components/TableBase/index.vue'
|
|
|
-import type { FormInstance, FormRules } from 'element-plus'
|
|
|
-import { ElMessage, ElMessageBox } from 'element-plus'
|
|
|
-import { ColumnProps } from '@/components/TableBase/interface/index'
|
|
|
-import { ref, reactive, computed, nextTick } from 'vue'
|
|
|
-import { Leave_Finance_List, Leave_Deduct, LeaveType_List } from '@/api/workAttendance/index'
|
|
|
-import { useTablePublic } from '@/hooks/useTablePublic'
|
|
|
+import type {FormInstance, FormRules} from 'element-plus'
|
|
|
+import {ElMessage, ElMessageBox} from 'element-plus'
|
|
|
+import {ColumnProps} from '@/components/TableBase/interface/index'
|
|
|
+import {computed, nextTick, reactive, ref} from 'vue'
|
|
|
+import {Leave_Deduct, Leave_Finance_List, LeaveType_List} from '@/api/workAttendance/index'
|
|
|
+import {useTablePublic} from '@/hooks/useTablePublic'
|
|
|
|
|
|
const LeaveType = ref<any[]>([])
|
|
|
const globalStore = GlobalStore()
|
|
|
const ruleFormRef = ref<FormInstance>()
|
|
|
const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
|
|
|
-const initParam = reactive({ User_tokey: globalStore.GET_User_tokey, T_name: '' })
|
|
|
+const initParam = reactive({User_tokey: globalStore.GET_User_tokey, T_name: ''})
|
|
|
const drawerRef = ref<InstanceType<typeof Drawer> | null>(null)
|
|
|
const LeaveTableRef = ref<InstanceType<typeof TableBase> | null>(null)
|
|
|
-const { tableRowClassName } = useTablePublic()
|
|
|
+const {tableRowClassName} = useTablePublic()
|
|
|
const tableRowClassNameHandle = (data: any): any => tableRowClassName(data.row.T_uuid, LeaveinitParam.T_uuid)
|
|
|
|
|
|
let date = new Date()
|
|
|
const month = date.getMonth()
|
|
|
const year = date.getFullYear()
|
|
|
const salaryFromData = ref({
|
|
|
- year: year + '',
|
|
|
- month: (month < 10 ? '0' : '') + month,
|
|
|
- T_uuid: ''
|
|
|
+ year: year + '',
|
|
|
+ month: (month < 10 ? '0' : '') + month,
|
|
|
+ T_uuid: ''
|
|
|
})
|
|
|
|
|
|
// 搜索以及参数
|
|
|
const columns: ColumnProps[] = [
|
|
|
- { prop: 'T_name', label: '姓名' },
|
|
|
- { prop: 'T_post_name', label: '职位', ellipsis: true }
|
|
|
+ {prop: 'T_name', label: '姓名'},
|
|
|
+ {prop: 'T_post_name', label: '职位', ellipsis: true}
|
|
|
]
|
|
|
const userColums: ColumnProps[] = [
|
|
|
- { prop: 'T_type_name', label: '请假类型' },
|
|
|
- { prop: 'T_start_time', label: '开始时间', ellipsis: true },
|
|
|
- { prop: 'T_end_time', label: '结束时间', ellipsis: true },
|
|
|
- { prop: 'T_duration', label: '请假时长', name: 'T_duration' },
|
|
|
- { prop: 'T_text', label: '理由' },
|
|
|
- { prop: 'T_State', label: '审核', name: 'T_State' }
|
|
|
+ {prop: 'T_type_name', label: '请假类型'},
|
|
|
+ {prop: 'CreateTime', label: '申请时间', ellipsis: true},
|
|
|
+ {prop: 'T_start_time', label: '开始时间', ellipsis: true},
|
|
|
+ {prop: 'T_end_time', label: '结束时间', ellipsis: true},
|
|
|
+ {prop: 'T_duration', label: '请假时长', name: 'T_duration'},
|
|
|
+ {prop: 'T_text', label: '理由'},
|
|
|
+ {prop: 'T_State', label: '审核', name: 'T_State'}
|
|
|
]
|
|
|
const dateCom = computed(() => {
|
|
|
- return `${salaryFromData.value.year}-${salaryFromData.value.month}`
|
|
|
+ return `${salaryFromData.value.year}-${salaryFromData.value.month}`
|
|
|
})
|
|
|
|
|
|
const LeaveinitParam = reactive({
|
|
|
- User_tokey: globalStore.GET_User_tokey,
|
|
|
- T_uuid: '',
|
|
|
- T_month: dateCom.value
|
|
|
+ User_tokey: globalStore.GET_User_tokey,
|
|
|
+ T_uuid: '',
|
|
|
+ T_month: dateCom.value
|
|
|
})
|
|
|
|
|
|
const getSalaryParams = (row: any) => {
|
|
|
- LeaveinitParam.T_uuid = ''
|
|
|
- setTimeout(() => {
|
|
|
- userInfo.name = row.T_name
|
|
|
- userInfo.T_dept = row.T_dept_name
|
|
|
- userInfo.T_post = row.T_post_name
|
|
|
- LeaveinitParam.T_uuid = row.T_uuid
|
|
|
- LeaveTableRef.value && LeaveTableRef.value.searchTable()
|
|
|
- }, 100)
|
|
|
+ LeaveinitParam.T_uuid = ''
|
|
|
+ setTimeout(() => {
|
|
|
+ userInfo.name = row.T_name
|
|
|
+ userInfo.T_dept = row.T_dept_name
|
|
|
+ userInfo.T_post = row.T_post_name
|
|
|
+ LeaveinitParam.T_uuid = row.T_uuid
|
|
|
+ LeaveTableRef.value && LeaveTableRef.value.searchTable()
|
|
|
+ }, 100)
|
|
|
}
|
|
|
|
|
|
const salarDateMonthChange = (val: string) => {
|
|
|
- if (!val) return
|
|
|
- if (!LeaveinitParam.T_uuid) {
|
|
|
- ElMessage.warning('请选择员工!!!')
|
|
|
- }
|
|
|
- LeaveinitParam.T_month = dateCom.value
|
|
|
- LeaveTableRef.value && LeaveTableRef?.value.searchTable()
|
|
|
+ if (!val) return
|
|
|
+ if (!LeaveinitParam.T_uuid) {
|
|
|
+ ElMessage.warning('请选择员工!!!')
|
|
|
+ }
|
|
|
+ LeaveinitParam.T_month = dateCom.value
|
|
|
+ LeaveTableRef.value && LeaveTableRef?.value.searchTable()
|
|
|
}
|
|
|
const salarDateYearChange = (val: string) => {
|
|
|
- if (!val) return
|
|
|
- if (!LeaveinitParam.T_uuid) {
|
|
|
- ElMessage.warning('请选择员工!!!')
|
|
|
- }
|
|
|
- LeaveinitParam.T_month = dateCom.value
|
|
|
- LeaveTableRef.value && LeaveTableRef.value.searchTable()
|
|
|
+ if (!val) return
|
|
|
+ if (!LeaveinitParam.T_uuid) {
|
|
|
+ ElMessage.warning('请选择员工!!!')
|
|
|
+ }
|
|
|
+ LeaveinitParam.T_month = dateCom.value
|
|
|
+ LeaveTableRef.value && LeaveTableRef.value.searchTable()
|
|
|
}
|
|
|
const userInfo = reactive({
|
|
|
- squareUrl: 'https://cube.elemecdn.com/9/c2/f0ee8a3c7c9638a54940382568c9dpng.png',
|
|
|
- name: '',
|
|
|
- T_dept: '',
|
|
|
- T_post: ''
|
|
|
+ squareUrl: 'https://cube.elemecdn.com/9/c2/f0ee8a3c7c9638a54940382568c9dpng.png',
|
|
|
+ name: '',
|
|
|
+ T_dept: '',
|
|
|
+ T_post: ''
|
|
|
})
|
|
|
|
|
|
const dataCallback = (res: any): any => res.Data.Data && res.Data.Data.filter((item: any) => item.T_approver)
|
|
|
|
|
|
// drawer
|
|
|
const form = reactive({
|
|
|
- T_type: '',
|
|
|
- T_duration: 0,
|
|
|
- hover: 0,
|
|
|
- minute: 0,
|
|
|
- T_text: ''
|
|
|
+ T_type: '',
|
|
|
+ T_duration: 0,
|
|
|
+ hover: 0,
|
|
|
+ minute: 0,
|
|
|
+ T_text: ''
|
|
|
})
|
|
|
|
|
|
const duration = computed(() => {
|
|
|
- return form.hover * 60 + form.minute
|
|
|
+ return form.hover * 60 + form.minute
|
|
|
})
|
|
|
|
|
|
const rules = reactive<FormRules>({
|
|
|
- T_type: [{ required: true, message: '请选择扣除类型', trigger: 'blur' }],
|
|
|
- T_duration: [{ required: true, message: '请输入扣除时长', trigger: 'blur' }],
|
|
|
- T_text: [{ required: true, message: '请输入扣除理由', trigger: 'blur' }]
|
|
|
+ T_type: [{required: true, message: '请选择扣除类型', trigger: 'blur'}],
|
|
|
+ T_duration: [{required: true, message: '请输入扣除时长', trigger: 'blur'}],
|
|
|
+ T_text: [{required: true, message: '请输入扣除理由', trigger: 'blur'}]
|
|
|
})
|
|
|
|
|
|
const Deductduraton = async () => {
|
|
|
- !LeaveType.value.length && getLeaveTypeList()
|
|
|
- drawerRef.value?.openDrawer()
|
|
|
+ !LeaveType.value.length && getLeaveTypeList()
|
|
|
+ drawerRef.value?.openDrawer()
|
|
|
}
|
|
|
const getLeaveTypeList = async () => {
|
|
|
- const res: any = await LeaveType_List({ User_tokey: globalStore.GET_User_tokey, T_deduct: 1 })
|
|
|
- if (res.Code === 200) {
|
|
|
- LeaveType.value = res.Data
|
|
|
- }
|
|
|
+ const res: any = await LeaveType_List({User_tokey: globalStore.GET_User_tokey, T_deduct: 1})
|
|
|
+ if (res.Code === 200) {
|
|
|
+ LeaveType.value = res.Data
|
|
|
+ }
|
|
|
}
|
|
|
const callbackDrawer = (done: () => void) => {
|
|
|
- nextTick(() => {
|
|
|
- resetForm(ruleFormRef.value)
|
|
|
- done()
|
|
|
- })
|
|
|
+ nextTick(() => {
|
|
|
+ resetForm(ruleFormRef.value)
|
|
|
+ done()
|
|
|
+ })
|
|
|
}
|
|
|
const resetForm = (formEl: FormInstance | undefined) => {
|
|
|
- if (!formEl) return
|
|
|
- form.hover = 0
|
|
|
- form.minute = 0
|
|
|
- formEl.resetFields()
|
|
|
+ if (!formEl) return
|
|
|
+ form.hover = 0
|
|
|
+ form.minute = 0
|
|
|
+ formEl.resetFields()
|
|
|
}
|
|
|
|
|
|
const AddLeave = (formEl: FormInstance | undefined) => {
|
|
|
- if (!formEl) return
|
|
|
- form.T_duration = duration.value
|
|
|
- formEl.validate(async valid => {
|
|
|
- if (valid) {
|
|
|
- open()
|
|
|
- }
|
|
|
- })
|
|
|
+ if (!formEl) return
|
|
|
+ form.T_duration = duration.value
|
|
|
+ formEl.validate(async valid => {
|
|
|
+ if (valid) {
|
|
|
+ open()
|
|
|
+ }
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
const open = () => {
|
|
|
- ElMessageBox.confirm('确定扣除?扣除后无法修改?', '警告', {
|
|
|
- confirmButtonText: '确定',
|
|
|
- cancelButtonText: '取消',
|
|
|
- type: 'warning'
|
|
|
- })
|
|
|
- .then(async () => {
|
|
|
- const params = {
|
|
|
- User_tokey: globalStore.GET_User_tokey,
|
|
|
- T_type: form.T_type,
|
|
|
- T_duration: form.T_duration,
|
|
|
- T_text: form.T_text,
|
|
|
- T_uuid: LeaveinitParam.T_uuid,
|
|
|
- T_month: dateCom.value
|
|
|
- }
|
|
|
- const res: any = await Leave_Deduct(params)
|
|
|
- if (res.Code === 200) {
|
|
|
- ElMessage.success('扣除成功!')
|
|
|
- nextTick(() => {
|
|
|
- drawerRef.value?.closeDrawer()
|
|
|
- resetForm(ruleFormRef.value)
|
|
|
- })
|
|
|
- }
|
|
|
- })
|
|
|
- .catch(() => {
|
|
|
- ElMessage.info('取消成功!')
|
|
|
- })
|
|
|
+ ElMessageBox.confirm('确定扣除?扣除后无法修改?', '警告', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ })
|
|
|
+ .then(async () => {
|
|
|
+ const params = {
|
|
|
+ User_tokey: globalStore.GET_User_tokey,
|
|
|
+ T_type: form.T_type,
|
|
|
+ T_duration: form.T_duration,
|
|
|
+ T_text: form.T_text,
|
|
|
+ T_uuid: LeaveinitParam.T_uuid,
|
|
|
+ T_month: dateCom.value
|
|
|
+ }
|
|
|
+ const res: any = await Leave_Deduct(params)
|
|
|
+ if (res.Code === 200) {
|
|
|
+ ElMessage.success('扣除成功!')
|
|
|
+ nextTick(() => {
|
|
|
+ drawerRef.value?.closeDrawer()
|
|
|
+ resetForm(ruleFormRef.value)
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ ElMessage.info('取消成功!')
|
|
|
+ })
|
|
|
}
|
|
|
const searchHandle = () => TableRef.value?.searchTable()
|
|
|
</script>
|
|
|
|
|
|
<template>
|
|
|
- <div class="RecordsFinance">
|
|
|
- <div style="width: 290px" class="RecordsFinance-table">
|
|
|
- <TableBase
|
|
|
- ref="TableRef"
|
|
|
- :columns="columns"
|
|
|
- :requestApi="User_List"
|
|
|
- :initParam="initParam"
|
|
|
- layout="prev, pager, next"
|
|
|
- :rowClick="getSalaryParams"
|
|
|
- :tableRowClassName="tableRowClassNameHandle"
|
|
|
- >
|
|
|
- <template #table-header>
|
|
|
- <el-row :gutter="24" class="input-suffix margin-left-0 margin-right-0">
|
|
|
- <el-col :span="24" class="d-flex padding-right-0 padding-left-0">
|
|
|
- <span class="inline-flex">姓名:</span>
|
|
|
- <el-input type="text" v-model="initParam.T_name" @change="searchHandle" />
|
|
|
- <el-button type="primary" @click="searchHandle">搜索</el-button>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- </template>
|
|
|
- </TableBase>
|
|
|
- </div>
|
|
|
- <transition
|
|
|
- leave-active-class="animate__animated animate__fadeOutRight"
|
|
|
- enter-active-class="animate__animated animate__fadeInLeft"
|
|
|
- >
|
|
|
- <el-row class="h-100 f-1 margin-left-3 RecordsFinance-container" v-if="LeaveinitParam.T_uuid">
|
|
|
- <el-col :span="24" class="h-100" style="overflow: hidden; display: flex; flex-direction: column">
|
|
|
- <el-card class="m-b-3">
|
|
|
- <h3 class="title m-b-5">员工基本信息</h3>
|
|
|
- <div class="info-content">
|
|
|
- <el-avatar shape="square" size="large"><img src="@/assets/images/avatar.jpg" /> </el-avatar>
|
|
|
- <div class="info-name">
|
|
|
- <h4>名字:{{ userInfo.name }}</h4>
|
|
|
- <h4>部门: {{ userInfo.T_dept }}</h4>
|
|
|
- <h4>岗位: {{ userInfo.T_post }}</h4>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </el-card>
|
|
|
- <el-card class="m-b-3">
|
|
|
- <el-row :gutter="20">
|
|
|
- <el-col :span="10" class="d-flex justify-start">
|
|
|
- <span class="demonstration">年:</span>
|
|
|
- <el-date-picker
|
|
|
- v-model="salaryFromData.year"
|
|
|
- value-format="YYYY"
|
|
|
- type="year"
|
|
|
- placeholder="请选择年"
|
|
|
- @change="salarDateYearChange"
|
|
|
- />
|
|
|
- <span class="demonstration">月:</span>
|
|
|
- <el-date-picker
|
|
|
- v-model="salaryFromData.month"
|
|
|
- popper-class="picker-date"
|
|
|
- value-format="MM"
|
|
|
- format="MM"
|
|
|
- type="month"
|
|
|
- placeholder="请选择月"
|
|
|
- @change="salarDateMonthChange"
|
|
|
- />
|
|
|
- </el-col>
|
|
|
- <el-col :span="12" class="d-flex justify-end">
|
|
|
- <el-button type="primary" @click="Deductduraton">扣除时长</el-button>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- </el-card>
|
|
|
- <div style="flex: 1">
|
|
|
- <TableBase
|
|
|
- v-if="LeaveinitParam.T_uuid"
|
|
|
- ref="LeaveTableRef"
|
|
|
- :columns="userColums"
|
|
|
- :requestApi="Leave_Finance_List"
|
|
|
- :initParam="LeaveinitParam"
|
|
|
- layout="total,prev, pager, next"
|
|
|
- :displayHeader="true"
|
|
|
- :dataCallback="dataCallback"
|
|
|
- >
|
|
|
- <template #T_duration="{ row }">{{ getFormatDuration(row.T_duration) }}</template>
|
|
|
- <template #T_State="{ row }">
|
|
|
- <el-tag v-if="row.T_State === 1" type="success">通过</el-tag>
|
|
|
- <el-tag v-else-if="row.T_State === 2" type="warning">未通过</el-tag>
|
|
|
- <el-tag v-else type="danger">待审核</el-tag>
|
|
|
- </template>
|
|
|
- </TableBase>
|
|
|
- </div>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- </transition>
|
|
|
- <Drawer ref="drawerRef" :handleClose="callbackDrawer">
|
|
|
- <template #header="{ params }">
|
|
|
- <h4 :id="params.titleId" :class="params.titleClass">扣除时长</h4>
|
|
|
- </template>
|
|
|
- <el-form ref="ruleFormRef" :model="form" :rules="rules">
|
|
|
- <el-form-item label="扣除类型:" label-width="100px" prop="T_type">
|
|
|
- <el-select v-model="form.T_type" placeholder="请选择扣除类型">
|
|
|
- <el-option v-for="item in LeaveType" :key="item.Id" :label="item.T_name" :value="item.Id" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="扣除时长:" label-width="100px" prop="T_duration">
|
|
|
- <div class="d-flex">
|
|
|
- <el-input type="text" v-model.number="form.hover"><template #suffix> 小时 </template></el-input
|
|
|
- ><el-input type="text" v-model.number="form.minute">
|
|
|
- <template #suffix> 分钟 </template>
|
|
|
- </el-input>
|
|
|
- </div>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="扣除理由:" label-width="100px" prop="T_text">
|
|
|
- <el-input
|
|
|
- v-model="form.T_text"
|
|
|
- autocomplete="off"
|
|
|
- type="textarea"
|
|
|
- :autosize="{ minRows: 4, maxRows: 6 }"
|
|
|
- placeholder="请输入扣除理由"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- <div class="d-flex">
|
|
|
- <el-button type="primary" @click="AddLeave(ruleFormRef)">提交</el-button>
|
|
|
- </div>
|
|
|
- </el-form>
|
|
|
- </Drawer>
|
|
|
- </div>
|
|
|
+ <div class="RecordsFinance">
|
|
|
+ <div style="width: 290px" class="RecordsFinance-table">
|
|
|
+ <TableBase
|
|
|
+ ref="TableRef"
|
|
|
+ :columns="columns"
|
|
|
+ :requestApi="User_List"
|
|
|
+ :initParam="initParam"
|
|
|
+ layout="prev, pager, next"
|
|
|
+ :rowClick="getSalaryParams"
|
|
|
+ :tableRowClassName="tableRowClassNameHandle"
|
|
|
+ >
|
|
|
+ <template #table-header>
|
|
|
+ <el-row :gutter="24" class="input-suffix margin-left-0 margin-right-0">
|
|
|
+ <el-col :span="24" class="d-flex padding-right-0 padding-left-0">
|
|
|
+ <span class="inline-flex">姓名:</span>
|
|
|
+ <el-input type="text" v-model="initParam.T_name" @change="searchHandle"/>
|
|
|
+ <el-button type="primary" @click="searchHandle">搜索</el-button>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </template>
|
|
|
+ </TableBase>
|
|
|
+ </div>
|
|
|
+ <transition
|
|
|
+ leave-active-class="animate__animated animate__fadeOutRight"
|
|
|
+ enter-active-class="animate__animated animate__fadeInLeft"
|
|
|
+ >
|
|
|
+ <el-row class="h-100 f-1 margin-left-3 RecordsFinance-container" v-if="LeaveinitParam.T_uuid">
|
|
|
+ <el-col :span="24" class="h-100" style="overflow: hidden; display: flex; flex-direction: column">
|
|
|
+ <el-card class="m-b-3">
|
|
|
+ <h3 class="title m-b-5">员工基本信息</h3>
|
|
|
+ <div class="info-content">
|
|
|
+ <el-avatar shape="square" size="large"><img src="@/assets/images/avatar.jpg"/></el-avatar>
|
|
|
+ <div class="info-name">
|
|
|
+ <h4>名字:{{ userInfo.name }}</h4>
|
|
|
+ <h4>部门: {{ userInfo.T_dept }}</h4>
|
|
|
+ <h4>岗位: {{ userInfo.T_post }}</h4>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-card>
|
|
|
+ <el-card class="m-b-3">
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="10" class="d-flex justify-start">
|
|
|
+ <span class="demonstration">年:</span>
|
|
|
+ <el-date-picker
|
|
|
+ v-model="salaryFromData.year"
|
|
|
+ value-format="YYYY"
|
|
|
+ type="year"
|
|
|
+ placeholder="请选择年"
|
|
|
+ @change="salarDateYearChange"
|
|
|
+ />
|
|
|
+ <span class="demonstration">月:</span>
|
|
|
+ <el-date-picker
|
|
|
+ v-model="salaryFromData.month"
|
|
|
+ popper-class="picker-date"
|
|
|
+ value-format="MM"
|
|
|
+ format="MM"
|
|
|
+ type="month"
|
|
|
+ placeholder="请选择月"
|
|
|
+ @change="salarDateMonthChange"
|
|
|
+ />
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12" class="d-flex justify-end">
|
|
|
+ <el-button type="primary" @click="Deductduraton">扣除时长</el-button>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-card>
|
|
|
+ <div style="flex: 1">
|
|
|
+ <TableBase
|
|
|
+ v-if="LeaveinitParam.T_uuid"
|
|
|
+ ref="LeaveTableRef"
|
|
|
+ :columns="userColums"
|
|
|
+ :requestApi="Leave_Finance_List"
|
|
|
+ :initParam="LeaveinitParam"
|
|
|
+ layout="total,prev, pager, next"
|
|
|
+ :displayHeader="true"
|
|
|
+ :dataCallback="dataCallback"
|
|
|
+ >
|
|
|
+ <template #T_duration="{ row }">{{ getFormatDuration(row.T_duration) }}</template>
|
|
|
+ <template #T_State="{ row }">
|
|
|
+ <el-tag v-if="row.T_State === 1" type="success">通过</el-tag>
|
|
|
+ <el-tag v-else-if="row.T_State === 2" type="warning">未通过</el-tag>
|
|
|
+ <el-tag v-else type="danger">待审核</el-tag>
|
|
|
+ </template>
|
|
|
+ </TableBase>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </transition>
|
|
|
+ <Drawer ref="drawerRef" :handleClose="callbackDrawer">
|
|
|
+ <template #header="{ params }">
|
|
|
+ <h4 :id="params.titleId" :class="params.titleClass">扣除时长</h4>
|
|
|
+ </template>
|
|
|
+ <el-form ref="ruleFormRef" :model="form" :rules="rules">
|
|
|
+ <el-form-item label="扣除类型:" label-width="100px" prop="T_type">
|
|
|
+ <el-select v-model="form.T_type" placeholder="请选择扣除类型">
|
|
|
+ <el-option v-for="item in LeaveType" :key="item.Id" :label="item.T_name" :value="item.Id"/>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="扣除时长:" label-width="100px" prop="T_duration">
|
|
|
+ <div class="d-flex">
|
|
|
+ <el-input type="text" v-model.number="form.hover">
|
|
|
+ <template #suffix> 小时</template>
|
|
|
+ </el-input
|
|
|
+ >
|
|
|
+ <el-input type="text" v-model.number="form.minute">
|
|
|
+ <template #suffix> 分钟</template>
|
|
|
+ </el-input>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="扣除理由:" label-width="100px" prop="T_text">
|
|
|
+ <el-input
|
|
|
+ v-model="form.T_text"
|
|
|
+ autocomplete="off"
|
|
|
+ type="textarea"
|
|
|
+ :autosize="{ minRows: 4, maxRows: 6 }"
|
|
|
+ placeholder="请输入扣除理由"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <div class="d-flex">
|
|
|
+ <el-button type="primary" @click="AddLeave(ruleFormRef)">提交</el-button>
|
|
|
+ </div>
|
|
|
+ </el-form>
|
|
|
+ </Drawer>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
@import '@/styles/var.scss';
|
|
|
+
|
|
|
.RecordsFinance {
|
|
|
- display: flex;
|
|
|
- height: 100%;
|
|
|
- overflow: hidden;
|
|
|
- .RecordsFinance-table {
|
|
|
- @include f-direction;
|
|
|
- z-index: 1;
|
|
|
- :deep(.table-header) {
|
|
|
- margin-bottom: 0;
|
|
|
- }
|
|
|
- .input-suffix {
|
|
|
- width: 100%;
|
|
|
- flex-direction: column;
|
|
|
+ display: flex;
|
|
|
+ height: 100%;
|
|
|
+ overflow: hidden;
|
|
|
+
|
|
|
+ .RecordsFinance-table {
|
|
|
+ @include f-direction;
|
|
|
+ z-index: 1;
|
|
|
+
|
|
|
+ :deep(.table-header) {
|
|
|
+ margin-bottom: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .input-suffix {
|
|
|
+ width: 100%;
|
|
|
+ flex-direction: column;
|
|
|
+
|
|
|
+ .inline-flex {
|
|
|
+ white-space: nowrap;
|
|
|
+ display: inline-flex;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .RecordsFinance-container {
|
|
|
+ z-index: 0;
|
|
|
|
|
|
- .inline-flex {
|
|
|
- white-space: nowrap;
|
|
|
- display: inline-flex;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- .RecordsFinance-container {
|
|
|
- z-index: 0;
|
|
|
- .title {
|
|
|
- text-align: left;
|
|
|
- }
|
|
|
- .info-content {
|
|
|
- display: flex;
|
|
|
- color: #606266;
|
|
|
- .info-name {
|
|
|
- flex: 1;
|
|
|
- display: flex;
|
|
|
- justify-content: space-around;
|
|
|
- align-items: center;
|
|
|
- padding-left: 0.75rem;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ .title {
|
|
|
+ text-align: left;
|
|
|
+ }
|
|
|
+
|
|
|
+ .info-content {
|
|
|
+ display: flex;
|
|
|
+ color: #606266;
|
|
|
+
|
|
|
+ .info-name {
|
|
|
+ flex: 1;
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-around;
|
|
|
+ align-items: center;
|
|
|
+ padding-left: 0.75rem;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
.d-flex {
|
|
|
- display: flex;
|
|
|
- justify-content: center;
|
|
|
- align-items: center;
|
|
|
- flex-wrap: nowrap;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ flex-wrap: nowrap;
|
|
|
}
|
|
|
+
|
|
|
.justify-start {
|
|
|
- justify-content: start;
|
|
|
+ justify-content: start;
|
|
|
}
|
|
|
+
|
|
|
.justify-end {
|
|
|
- justify-content: end;
|
|
|
+ justify-content: end;
|
|
|
}
|
|
|
</style>
|