|
@@ -12,7 +12,7 @@ import { User_List } from '@/api/user/index'
|
|
|
import { UpFileToken } from '@/api/public/index'
|
|
|
import Dialog from '@/components/dialog/Dialog.vue'
|
|
|
import Drawer from '@/components/Drawer/index.vue'
|
|
|
-import { Edit, Delete, ZoomIn, Download, Plus } from '@element-plus/icons-vue'
|
|
|
+import { Edit, Delete, View, Plus } from '@element-plus/icons-vue'
|
|
|
import type {
|
|
|
FormInstance,
|
|
|
FormRules,
|
|
@@ -25,10 +25,12 @@ import type {
|
|
|
import { ElMessageBox, ElMessage, genFileId } from 'element-plus'
|
|
|
import { floatReg } from '@/views/salary/salary/relus'
|
|
|
import { GlobalStore } from '@/stores/index'
|
|
|
-import { dayJs } from '@/utils/common'
|
|
|
+import { dayJs, getFormatDuration, qiniuUpLoadFun, upLoadQiniu } from '@/utils/common'
|
|
|
+
|
|
|
const globalStore = GlobalStore()
|
|
|
|
|
|
const TableRef = ref()
|
|
|
+const TableStatRef = ref()
|
|
|
const columns: ColumnProps[] = [
|
|
|
{ prop: 'T_start_time', label: '开始时间' },
|
|
|
{ prop: 'T_end_time', label: '结束时间' },
|
|
@@ -49,22 +51,61 @@ const initParam = {
|
|
|
const openDrawerOvertime = (str: string, row: any) => {
|
|
|
drawerRef.value.openDrawer()
|
|
|
if (str === 'edit') {
|
|
|
- // isNew = false
|
|
|
- // nextTick(() => {
|
|
|
- // form.value = { ...row }
|
|
|
- // uuid = row.T_approver
|
|
|
- // form.value.T_approver = row.T_user_name
|
|
|
- // form.value.T_id = row.Id
|
|
|
- // })
|
|
|
+ isNew = false
|
|
|
+ nextTick(() => {
|
|
|
+ form.value = { ...row }
|
|
|
+ uuid = row.T_approver
|
|
|
+ form.value.T_approver = row.T_user_name
|
|
|
+ form.value.T_id = row.Id
|
|
|
+ })
|
|
|
}
|
|
|
}
|
|
|
-const OvertimeDelete = (row: any) => {}
|
|
|
+const disabled = ref(false)
|
|
|
+const OvertimeView = (row: any) => {
|
|
|
+ disabled.value = true
|
|
|
+ drawerRef.value.openDrawer()
|
|
|
+ nextTick(() => {
|
|
|
+ form.value = { ...row }
|
|
|
+ form.value.T_approver = row.T_user_name
|
|
|
+ })
|
|
|
+}
|
|
|
+const OvertimeDelete = (row: any) => {
|
|
|
+ ElMessageBox.confirm('您确定要删除加班申请吗?', '警告', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ })
|
|
|
+ .then(async () => {
|
|
|
+ const res: any = await Overtime_Del({ User_tokey: globalStore.GET_User_tokey, T_id: row.Id })
|
|
|
+ if (res.Code === 200) {
|
|
|
+ ElMessage({
|
|
|
+ type: 'success',
|
|
|
+ message: '删除成功!'
|
|
|
+ })
|
|
|
+ nextTick(() => {
|
|
|
+ TableRef.value.getTableList()
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ ElMessage({
|
|
|
+ type: 'warning',
|
|
|
+ message: '取消成功!'
|
|
|
+ })
|
|
|
+ })
|
|
|
+}
|
|
|
const AddOvertime = (formEl: FormInstance | undefined) => {
|
|
|
if (!formEl) return
|
|
|
+ if (!prove_img) {
|
|
|
+ ElMessage({
|
|
|
+ type: 'warning',
|
|
|
+ message: `请等待图片上传完成`
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
formEl.validate(async valid => {
|
|
|
if (valid) {
|
|
|
let res: any = {}
|
|
|
- // form.value.T_duration = form.value.T_duration
|
|
|
form.value.T_duration = duration.value * 60
|
|
|
if (isNew) {
|
|
|
res = await Overtime_Add({ ...form.value, T_approver: uuid })
|
|
@@ -93,8 +134,11 @@ const drawerRef = ref()
|
|
|
const ruleFormRef = ref<FormInstance>()
|
|
|
type Fn = () => void
|
|
|
const callbackDrawer = (done: Fn) => {
|
|
|
- resetForm(ruleFormRef.value)
|
|
|
- done()
|
|
|
+ disabled.value = false
|
|
|
+ nextTick(() => {
|
|
|
+ resetForm(ruleFormRef.value)
|
|
|
+ done()
|
|
|
+ })
|
|
|
}
|
|
|
const resetForm = (formEl: FormInstance | undefined) => {
|
|
|
if (!formEl) return
|
|
@@ -134,6 +178,7 @@ const form = ref({
|
|
|
T_duration: 0,
|
|
|
T_text: '',
|
|
|
T_approver: '',
|
|
|
+ T_prove_img: '',
|
|
|
T_id: ''
|
|
|
})
|
|
|
const formLabelWidth = ref('100px')
|
|
@@ -169,16 +214,19 @@ const onResize = () => {
|
|
|
|
|
|
// upload file
|
|
|
const upload = ref()
|
|
|
-let uploadData = { token: '' }
|
|
|
+let uploadData = { token: '', key: '' }
|
|
|
const dialogImageUrl = ref('')
|
|
|
const dialogVisible = ref(false)
|
|
|
const fileList = ref([])
|
|
|
-const handlePictureCardPreview = (file: UploadFile) => {
|
|
|
+let prove_img = true
|
|
|
+const handlePictureCardPreview = async (file: any) => {
|
|
|
console.log(file, fileList)
|
|
|
dialogImageUrl.value = file.url as string
|
|
|
dialogVisible.value = true
|
|
|
}
|
|
|
const beforeUpload = async (file: any) => {
|
|
|
+ console.log(file)
|
|
|
+
|
|
|
let reg = /^image/g
|
|
|
if (!reg.test(file.type)) {
|
|
|
ElMessage({
|
|
@@ -187,8 +235,11 @@ const beforeUpload = async (file: any) => {
|
|
|
})
|
|
|
return
|
|
|
}
|
|
|
- const res: any = await UpFileToken({ User_tokey: globalStore.GET_User_tokey })
|
|
|
+ prove_img = false
|
|
|
+ let suffix = file.type.split('/')[1]
|
|
|
+ const res: any = await UpFileToken({ User_tokey: globalStore.GET_User_tokey, T_suffix: suffix })
|
|
|
uploadData.token = res.Data
|
|
|
+ uploadData.key = file.name
|
|
|
}
|
|
|
const handleExceed: UploadProps['onExceed'] = (files: any) => {
|
|
|
console.log(files)
|
|
@@ -207,16 +258,27 @@ const submitUpload = () => {
|
|
|
|
|
|
const onSuccess = (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => {
|
|
|
console.log(response, uploadFile, uploadFiles)
|
|
|
+ form.value.T_prove_img = response.key
|
|
|
+ prove_img = true
|
|
|
+ ElMessage({
|
|
|
+ type: 'success',
|
|
|
+ message: '图片上传成功!!'
|
|
|
+ })
|
|
|
}
|
|
|
-const onError = (error: Error, uploadFile: UploadFile, uploadFiles: UploadFiles) => {
|
|
|
- console.log(error, uploadFile, uploadFiles)
|
|
|
+const onError = () => {
|
|
|
+ // console.log(error, uploadFile, uploadFiles)
|
|
|
+ ElMessage({
|
|
|
+ type: 'error',
|
|
|
+ message: '图片上传失败!!'
|
|
|
+ })
|
|
|
}
|
|
|
-// const handleRemove = (file: UploadFile) => {
|
|
|
-// console.log(file)
|
|
|
-// }
|
|
|
const handleRemove: UploadProps['onRemove'] = (uploadFile, uploadFiles) => {
|
|
|
console.log(uploadFile, uploadFiles, fileList)
|
|
|
+ form.value.T_prove_img = ''
|
|
|
}
|
|
|
+// const handleProgress = (evt: UploadProgressEvent, uploadFile: UploadFile, uploadFiles: UploadFiles) => {
|
|
|
+// console.log(evt, uploadFile, uploadFiles)
|
|
|
+// }
|
|
|
</script>
|
|
|
|
|
|
<template>
|
|
@@ -235,23 +297,41 @@ const handleRemove: UploadProps['onRemove'] = (uploadFile, uploadFiles) => {
|
|
|
<el-button type="primary" @click="openDrawerOvertime">申请加班</el-button>
|
|
|
</div>
|
|
|
</template>
|
|
|
- <template #T_duration="{ row }"> {{ row.T_duration }}分钟 </template>
|
|
|
+ <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>
|
|
|
<template #right="{ row }">
|
|
|
- <el-button link type="primary" size="small" :icon="Edit" @click="openDrawerOvertime('edit', row)"
|
|
|
+ <el-button
|
|
|
+ v-if="row.T_State !== 1"
|
|
|
+ link
|
|
|
+ type="primary"
|
|
|
+ size="small"
|
|
|
+ :icon="Edit"
|
|
|
+ @click="openDrawerOvertime('edit', row)"
|
|
|
>编辑</el-button
|
|
|
>
|
|
|
- <el-button link type="danger" size="small" :icon="Delete" @click="OvertimeDelete(row)">删除</el-button>
|
|
|
+ <el-button
|
|
|
+ v-if="row.T_State !== 1"
|
|
|
+ link
|
|
|
+ type="danger"
|
|
|
+ size="small"
|
|
|
+ :icon="Delete"
|
|
|
+ @click="OvertimeDelete(row)"
|
|
|
+ >删除</el-button
|
|
|
+ >
|
|
|
+ <el-button v-if="row.T_State === 1" link type="success" size="small" :icon="View" @click="OvertimeView(row)"
|
|
|
+ >查看</el-button
|
|
|
+ >
|
|
|
+ <!-- <el-icon><View /></el-icon> -->
|
|
|
</template>
|
|
|
</TableBase></el-col
|
|
|
>
|
|
|
<el-col :span="12" class="h-100" style="overflow: hidden">
|
|
|
<TableBase
|
|
|
- ref="TableRef"
|
|
|
+ ref="TableStatRef"
|
|
|
:columns="columns_Stat"
|
|
|
:requestApi="Overtime_Stat"
|
|
|
:initParam="initParam"
|
|
@@ -278,6 +358,7 @@ const handleRemove: UploadProps['onRemove'] = (uploadFile, uploadFiles) => {
|
|
|
class="my-date-picker"
|
|
|
v-model="form.T_start_time"
|
|
|
type="datetime"
|
|
|
+ :disabled="disabled"
|
|
|
placeholder="选择开始时间"
|
|
|
format="YYYY-MM-DD HH:mm:ss"
|
|
|
value-format="YYYY-MM-DD HH:mm:ss"
|
|
@@ -289,6 +370,7 @@ const handleRemove: UploadProps['onRemove'] = (uploadFile, uploadFiles) => {
|
|
|
class="my-date-picker"
|
|
|
v-model="form.T_end_time"
|
|
|
type="datetime"
|
|
|
+ :disabled="disabled"
|
|
|
placeholder="选择结束时间"
|
|
|
format="YYYY-MM-DD HH:mm:ss"
|
|
|
value-format="YYYY-MM-DD HH:mm:ss"
|
|
@@ -300,6 +382,7 @@ const handleRemove: UploadProps['onRemove'] = (uploadFile, uploadFiles) => {
|
|
|
<el-form-item label="取证:" :label-width="formLabelWidth">
|
|
|
<el-upload
|
|
|
ref="upload"
|
|
|
+ :disabled="disabled"
|
|
|
v-model:file-list="fileList"
|
|
|
action="https://up-z2.qiniup.com"
|
|
|
list-type="picture-card"
|
|
@@ -319,9 +402,10 @@ const handleRemove: UploadProps['onRemove'] = (uploadFile, uploadFiles) => {
|
|
|
<img w-full :src="dialogImageUrl" class="full-img" alt="Preview Image" />
|
|
|
</el-dialog>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="内容:" :label-width="formLabelWidth">
|
|
|
+ <el-form-item label="内容:" :label-width="formLabelWidth" prop="T_text">
|
|
|
<el-input
|
|
|
v-model="form.T_text"
|
|
|
+ :disabled="disabled"
|
|
|
autocomplete="off"
|
|
|
type="textarea"
|
|
|
:autosize="{ minRows: 4, maxRows: 6 }"
|
|
@@ -329,10 +413,18 @@ const handleRemove: UploadProps['onRemove'] = (uploadFile, uploadFiles) => {
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="审批:" :label-width="formLabelWidth" prop="T_approver">
|
|
|
- <el-input v-model="form.T_approver" autocomplete="off" placeholder="审批人" @focus="selectApprover" />
|
|
|
+ <el-input
|
|
|
+ :disabled="disabled"
|
|
|
+ v-model="form.T_approver"
|
|
|
+ autocomplete="off"
|
|
|
+ placeholder="审批人"
|
|
|
+ @focus="selectApprover"
|
|
|
+ />
|
|
|
</el-form-item>
|
|
|
<el-form-item :label-width="formLabelWidth">
|
|
|
- <el-button v-if="isNew" color="#626aef" @click="AddOvertime(ruleFormRef)">添加</el-button>
|
|
|
+ <el-button v-if="isNew" color="#626aef" @click="AddOvertime(ruleFormRef)" :disabled="disabled"
|
|
|
+ >添加</el-button
|
|
|
+ >
|
|
|
<el-button v-else color="#626aef" @click="AddOvertime(ruleFormRef)">修改</el-button>
|
|
|
</el-form-item>
|
|
|
</el-form>
|