|
@@ -11,9 +11,9 @@ import { GlobalStore } from '@/stores/index'
|
|
|
import Drawer from '@/components/Drawer/index.vue'
|
|
|
import Dialog from '@/components/dialog/Dialog.vue'
|
|
|
import { floatReg } from '@/views/salary/salary/relus'
|
|
|
-import { reactive, ref, nextTick } from 'vue'
|
|
|
+import { reactive, ref, nextTick, computed } from 'vue'
|
|
|
import TableBase from '@/components/TableBase/index.vue'
|
|
|
-import { getFormatDuration } from '@/utils/common'
|
|
|
+import { getFormatDuration, dayJs } from '@/utils/common'
|
|
|
import { Edit, Delete, View, Plus } from '@element-plus/icons-vue'
|
|
|
import { ElMessageBox, ElMessage } from 'element-plus'
|
|
|
import { ColumnProps } from '@/components/TableBase/interface/index'
|
|
@@ -21,7 +21,7 @@ import type { FormInstance, FormRules } from 'element-plus'
|
|
|
import Upload from '@/components/Upload/index.vue'
|
|
|
|
|
|
let uuid = ''
|
|
|
-let isNew = true
|
|
|
+let isNew = ref(true)
|
|
|
const search = ref('')
|
|
|
const TableStatRef = ref()
|
|
|
const disabled = ref(false)
|
|
@@ -50,18 +50,48 @@ const columns_Stat: ColumnProps[] = [
|
|
|
{ prop: 'UpdateTime', label: '时间', ellipsis: true }
|
|
|
]
|
|
|
|
|
|
-const openDrawerOvertime = (str: string, row: any) => {
|
|
|
- drawerRef.value && drawerRef.value.openDrawer()
|
|
|
- if (str === 'edit') {
|
|
|
- isNew = false
|
|
|
+const form = ref({
|
|
|
+ T_id: '',
|
|
|
+ T_text: '',
|
|
|
+ T_duration: 0,
|
|
|
+ T_end_time: '',
|
|
|
+ T_approver: '',
|
|
|
+ T_prove_img: '',
|
|
|
+ T_start_time: ''
|
|
|
+})
|
|
|
+const validate_float = (rule: any, value: any, callback: any) => {
|
|
|
+ if (value === '') {
|
|
|
+ callback(new Error('请输入加班时长'))
|
|
|
+ } else {
|
|
|
+ if (floatReg.test(value) || /\d+/.test(value)) {
|
|
|
+ callback()
|
|
|
+ } else {
|
|
|
+ callback(new Error('时间必须是数字或小数'))
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+const rules = reactive<FormRules>({
|
|
|
+ T_type: [{ required: true, message: '请选择请假类型', trigger: 'blur' }],
|
|
|
+ T_start_time: [{ required: true, message: '请选择开始时间', trigger: 'blur' }],
|
|
|
+ T_end_time: [{ required: true, message: '请选择结束时间', trigger: 'blur' }],
|
|
|
+ T_duration: [{ required: true, validator: validate_float, trigger: 'blur' }],
|
|
|
+ T_approver: [{ required: true, message: '请选择审批人', trigger: 'blur' }]
|
|
|
+})
|
|
|
+
|
|
|
+const openDrawerOvertime = (str: string, row?: any) => {
|
|
|
+ isNew.value = str === 'new' ? true : false
|
|
|
+
|
|
|
+ if (!isNew.value) {
|
|
|
nextTick(() => {
|
|
|
form.value = { ...row }
|
|
|
uuid = row.T_approver
|
|
|
- form.value.T_approver = row.T_user_name
|
|
|
+ form.value.T_approver = row.T_approver_name
|
|
|
form.value.T_id = row.Id
|
|
|
form.value.T_duration = row.T_duration / 60
|
|
|
})
|
|
|
}
|
|
|
+
|
|
|
+ drawerRef.value && drawerRef.value.openDrawer()
|
|
|
}
|
|
|
|
|
|
const OvertimeView = (row: any) => {
|
|
@@ -69,7 +99,7 @@ const OvertimeView = (row: any) => {
|
|
|
drawerRef.value && drawerRef.value.openDrawer()
|
|
|
nextTick(() => {
|
|
|
form.value = { ...row }
|
|
|
- form.value.T_approver = row.T_user_name
|
|
|
+ form.value.T_approver = row.T_approver_name
|
|
|
})
|
|
|
}
|
|
|
const OvertimeDelete = (row: any) => {
|
|
@@ -96,19 +126,19 @@ const AddOvertime = (formEl: FormInstance | undefined) => {
|
|
|
formEl.validate(async valid => {
|
|
|
if (valid) {
|
|
|
let res: any = {}
|
|
|
- let time = form.value.T_duration * 60
|
|
|
- if (isNew) {
|
|
|
+ let time = duration.value * 60
|
|
|
+ if (isNew.value) {
|
|
|
res = await Overtime_Add({ ...form.value, T_approver: uuid, T_duration: time })
|
|
|
} else {
|
|
|
res = await Overtime_Edit({ ...form.value, T_approver: uuid, T_duration: time })
|
|
|
}
|
|
|
if (res.Code === 200) {
|
|
|
- ElMessage.success(`${isNew ? '申请' : '修改'}成功!`)
|
|
|
+ ElMessage.success(`${isNew.value ? '申请' : '修改'}成功!`)
|
|
|
nextTick(() => {
|
|
|
drawerRef.value?.closeDrawer()
|
|
|
TableRef.value?.getTableList()
|
|
|
resetForm(ruleFormRef.value)
|
|
|
- isNew = true
|
|
|
+ isNew.value = true
|
|
|
})
|
|
|
}
|
|
|
} else {
|
|
@@ -121,7 +151,7 @@ const AddOvertime = (formEl: FormInstance | undefined) => {
|
|
|
type Fn = () => void
|
|
|
const callbackDrawer = (done: Fn) => {
|
|
|
disabled.value = false
|
|
|
- isNew = false
|
|
|
+ isNew.value = true
|
|
|
nextTick(() => {
|
|
|
resetForm(ruleFormRef.value)
|
|
|
done()
|
|
@@ -129,35 +159,9 @@ const callbackDrawer = (done: Fn) => {
|
|
|
}
|
|
|
const resetForm = (formEl: FormInstance | undefined) => {
|
|
|
if (!formEl) return
|
|
|
+ uploadRef.value?.clearfileList()
|
|
|
formEl.resetFields()
|
|
|
}
|
|
|
-const validate_float = (rule: any, value: any, callback: any) => {
|
|
|
- if (value === '') {
|
|
|
- callback(new Error('请输入加班时长'))
|
|
|
- } else {
|
|
|
- if (floatReg.test(value) || /\d+/.test(value)) {
|
|
|
- callback()
|
|
|
- } else {
|
|
|
- callback(new Error('时间必须是数字或小数'))
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-const form = ref({
|
|
|
- T_id: '',
|
|
|
- T_text: '',
|
|
|
- T_duration: 0,
|
|
|
- T_end_time: '',
|
|
|
- T_approver: '',
|
|
|
- T_prove_img: '',
|
|
|
- T_start_time: ''
|
|
|
-})
|
|
|
-const rules = reactive<FormRules>({
|
|
|
- T_type: [{ required: true, message: '请选择请假类型', trigger: 'blur' }],
|
|
|
- T_start_time: [{ required: true, message: '请选择开始时间', trigger: 'blur' }],
|
|
|
- T_end_time: [{ required: true, message: '请选择结束时间', trigger: 'blur' }],
|
|
|
- T_duration: [{ required: true, validator: validate_float, trigger: 'blur' }],
|
|
|
- T_approver: [{ required: true, message: '请选择审批人', trigger: 'blur' }]
|
|
|
-})
|
|
|
|
|
|
// dialog
|
|
|
const Dialogcolumns: ColumnProps[] = [{ prop: 'T_name', label: '名字', name: 'T_name' }]
|
|
@@ -179,6 +183,16 @@ const getApproverInfo = (row: any) => {
|
|
|
dialog.value?.DialogClose()
|
|
|
}
|
|
|
|
|
|
+const duration = computed(() => {
|
|
|
+ const end_time = dayJs(form.value.T_end_time)
|
|
|
+ if (!form.value.T_end_time) {
|
|
|
+ return 0
|
|
|
+ }
|
|
|
+ let count: number = end_time.diff(form.value.T_start_time, 'hour', true)
|
|
|
+ let num: number = Number(count.toFixed(2))
|
|
|
+ return Math.round(num * 10) / 10
|
|
|
+})
|
|
|
+
|
|
|
const onResize = () => {
|
|
|
const height = document.documentElement.clientHeight
|
|
|
return height / 2
|
|
@@ -198,7 +212,7 @@ const onResize = () => {
|
|
|
<template #table-header>
|
|
|
<div class="table-header">
|
|
|
<h4>我的加班</h4>
|
|
|
- <el-button type="primary" @click="openDrawerOvertime">申请加班</el-button>
|
|
|
+ <el-button type="primary" @click="openDrawerOvertime('new')">申请加班</el-button>
|
|
|
</div>
|
|
|
</template>
|
|
|
<template #T_duration="{ row }"> {{ getFormatDuration(row.T_duration) }} </template>
|
|
@@ -226,15 +240,7 @@ const onResize = () => {
|
|
|
@click="OvertimeDelete(row)"
|
|
|
>删除</el-button
|
|
|
>
|
|
|
- <el-button
|
|
|
- :disabled="row.T_State !== 1"
|
|
|
- link
|
|
|
- type="success"
|
|
|
- size="small"
|
|
|
- :icon="View"
|
|
|
- @click="OvertimeView(row)"
|
|
|
- >查看</el-button
|
|
|
- >
|
|
|
+ <el-button link type="success" size="small" :icon="View" @click="OvertimeView(row)">查看</el-button>
|
|
|
</template>
|
|
|
</TableBase></el-col
|
|
|
>
|
|
@@ -272,7 +278,7 @@ const onResize = () => {
|
|
|
type="datetime"
|
|
|
:disabled="disabled"
|
|
|
placeholder="选择开始时间"
|
|
|
- format="YYYY-MM-DD HH:mm:ss"
|
|
|
+ format="YYYY-MM-DD HH:mm"
|
|
|
value-format="YYYY-MM-DD HH:mm:ss"
|
|
|
/>
|
|
|
</el-form-item>
|
|
@@ -284,15 +290,24 @@ const onResize = () => {
|
|
|
type="datetime"
|
|
|
:disabled="disabled"
|
|
|
placeholder="选择结束时间"
|
|
|
- format="YYYY-MM-DD HH:mm:ss"
|
|
|
+ format="YYYY-MM-DD HH:mm"
|
|
|
value-format="YYYY-MM-DD HH:mm:ss"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="加班时长:" :label-width="formLabelWidth" prop="T_duration">
|
|
|
- <el-input v-model.number="form.T_duration" autocomplete="off" placeholder="请假时长" />
|
|
|
+ <el-input v-model="duration" autocomplete="off" placeholder="请假时长">
|
|
|
+ <template #suffix> 小时 </template>
|
|
|
+ </el-input>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="取证:" :label-width="formLabelWidth">
|
|
|
- <Upload ref="uploadRef" :isImg="true" :limit="1" v-model="form.T_prove_img" accept="image/*">
|
|
|
+ <el-form-item label="取证:" :label-width="formLabelWidth" prop="T_prove_img">
|
|
|
+ <Upload
|
|
|
+ ref="uploadRef"
|
|
|
+ :isImg="true"
|
|
|
+ :limit="1"
|
|
|
+ v-model="form.T_prove_img"
|
|
|
+ :disabled="disabled"
|
|
|
+ accept="image/*"
|
|
|
+ >
|
|
|
<el-icon><Plus /></el-icon>
|
|
|
</Upload>
|
|
|
</el-form-item>
|