|
@@ -2,7 +2,6 @@
|
|
<el-dialog v-model="visible" :title="!dataForm.id ? '新增' : '修改'" :close-on-click-modal="false" :close-on-press-escape="false">
|
|
<el-dialog v-model="visible" :title="!dataForm.id ? '新增' : '修改'" :close-on-click-modal="false" :close-on-press-escape="false">
|
|
<el-form :model="dataForm" :rules="rules" ref="dataFormRef" @keyup.enter="dataFormSubmitHandle()" label-width="120px">
|
|
<el-form :model="dataForm" :rules="rules" ref="dataFormRef" @keyup.enter="dataFormSubmitHandle()" label-width="120px">
|
|
<el-form-item label="考勤日期" prop="date">
|
|
<el-form-item label="考勤日期" prop="date">
|
|
- <!-- <el-input v-model="dataForm.date" placeholder="考勤日期"></el-input> -->
|
|
|
|
<el-date-picker
|
|
<el-date-picker
|
|
v-model="dataForm.date"
|
|
v-model="dataForm.date"
|
|
type="date"
|
|
type="date"
|
|
@@ -12,7 +11,6 @@
|
|
></el-date-picker>
|
|
></el-date-picker>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="签到时间" prop="checkInTime">
|
|
<el-form-item label="签到时间" prop="checkInTime">
|
|
- <!-- <el-input v-model="dataForm.checkInTime" placeholder="签到时间"></el-input> -->
|
|
|
|
<el-date-picker
|
|
<el-date-picker
|
|
v-model="dataForm.checkInTime"
|
|
v-model="dataForm.checkInTime"
|
|
type="datetime"
|
|
type="datetime"
|
|
@@ -22,7 +20,6 @@
|
|
></el-date-picker>
|
|
></el-date-picker>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="签退时间" prop="checkOutTime">
|
|
<el-form-item label="签退时间" prop="checkOutTime">
|
|
- <!-- <el-input v-model="dataForm.checkOutTime" placeholder="签退时间"></el-input> -->
|
|
|
|
<el-date-picker
|
|
<el-date-picker
|
|
v-model="dataForm.checkOutTime"
|
|
v-model="dataForm.checkOutTime"
|
|
type="datetime"
|
|
type="datetime"
|
|
@@ -37,22 +34,18 @@
|
|
</el-select>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="照片存储路径" prop="photoPath">
|
|
<el-form-item label="照片存储路径" prop="photoPath">
|
|
- <div class="flex items-center">
|
|
|
|
- <el-input v-model="dataForm.photoPath" placeholder="照片存储路径" readonly>
|
|
|
|
- <template #append>
|
|
|
|
- <el-button slot="append" size="small" @click="fileInput?.click()">选择文件</el-button>
|
|
|
|
- </template>
|
|
|
|
- </el-input>
|
|
|
|
- <input
|
|
|
|
- type="file"
|
|
|
|
- ref="fileInput"
|
|
|
|
- @change="handleFileChange"
|
|
|
|
- style="display: none"
|
|
|
|
- accept="image/*"
|
|
|
|
- >
|
|
|
|
- </div>
|
|
|
|
|
|
+ <el-upload
|
|
|
|
+ class="avatar-uploader"
|
|
|
|
+ :action="action"
|
|
|
|
+ :headers="headers"
|
|
|
|
+ :show-file-list="false"
|
|
|
|
+ :on-success="handleAvatarSuccess"
|
|
|
|
+ :before-upload="beforeAvatarUpload"
|
|
|
|
+ >
|
|
|
|
+ <img v-if="imageUrl" :src="imageUrl" class="avatar" />
|
|
|
|
+ <el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
|
|
|
|
+ </el-upload>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
- <!-- <el-input v-model="dataForm.photoPath" placeholder="照片存储路径"></el-input> -->
|
|
|
|
<el-form-item label="备注" prop="remark">
|
|
<el-form-item label="备注" prop="remark">
|
|
<el-input v-model="dataForm.remark" placeholder="备注"></el-input>
|
|
<el-input v-model="dataForm.remark" placeholder="备注"></el-input>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -65,14 +58,22 @@
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script lang="ts" setup>
|
|
<script lang="ts" setup>
|
|
|
|
+import app from "@/constants/app";
|
|
|
|
+import { getToken } from "@/utils/cache";
|
|
import { reactive, ref } from "vue";
|
|
import { reactive, ref } from "vue";
|
|
import { parseTime } from '@/utils/ruoyi'
|
|
import { parseTime } from '@/utils/ruoyi'
|
|
import baseService from "@/service/baseService";
|
|
import baseService from "@/service/baseService";
|
|
import { ElMessage } from "element-plus";
|
|
import { ElMessage } from "element-plus";
|
|
|
|
+import { Plus } from '@element-plus/icons-vue'
|
|
|
|
+import type { UploadProps } from 'element-plus'
|
|
const emit = defineEmits(["refreshDataList"]);
|
|
const emit = defineEmits(["refreshDataList"]);
|
|
-const fileInput = ref<HTMLInputElement | null>(null);
|
|
|
|
|
|
+
|
|
|
|
+const action = `${app.api}/sys/oss/upload`;
|
|
|
|
+const headers = {token: getToken() }
|
|
|
|
+const imageUrl = ref('');
|
|
const visible = ref(false);
|
|
const visible = ref(false);
|
|
const dataFormRef = ref();
|
|
const dataFormRef = ref();
|
|
|
|
+
|
|
import useView from "@/hooks/useView";
|
|
import useView from "@/hooks/useView";
|
|
const state = reactive({ ...useView({}) });
|
|
const state = reactive({ ...useView({}) });
|
|
const dataForm = reactive({
|
|
const dataForm = reactive({
|
|
@@ -90,12 +91,7 @@ const rules = ref({
|
|
],
|
|
],
|
|
status: [
|
|
status: [
|
|
{ required: true, message: '必填项不能为空', trigger: 'blur' }
|
|
{ required: true, message: '必填项不能为空', trigger: 'blur' }
|
|
- ],
|
|
|
|
- photoPath: [
|
|
|
|
- { required: true, message: '必填项不能为空', trigger: 'blur' }
|
|
|
|
- ],
|
|
|
|
- remark: []
|
|
|
|
-
|
|
|
|
|
|
+ ]
|
|
});
|
|
});
|
|
|
|
|
|
const init = (id?: number) => {
|
|
const init = (id?: number) => {
|
|
@@ -111,6 +107,24 @@ const init = (id?: number) => {
|
|
getInfo(id);
|
|
getInfo(id);
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
+const handleAvatarSuccess: UploadProps['onSuccess'] = (
|
|
|
|
+ response,
|
|
|
|
+ uploadFile
|
|
|
|
+) => {
|
|
|
|
+ if(response.code!==0) return ElMessage.error(response.msg);
|
|
|
|
+ imageUrl.value = response?.data?.src;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+const beforeAvatarUpload: UploadProps['beforeUpload'] = (rawFile) => {
|
|
|
|
+ if (!['image/jpeg','image/png','image/jpp'].includes(rawFile.type)) {
|
|
|
|
+ ElMessage.error('请上传jpg/png格式的图片!')
|
|
|
|
+ return false
|
|
|
|
+ } else if (rawFile.size / 1024 / 1024 > 10) {
|
|
|
|
+ ElMessage.error('图片大小不能超过10MB!')
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+ return true
|
|
|
|
+}
|
|
|
|
|
|
// 获取信息
|
|
// 获取信息
|
|
const getInfo = (id: number) => {
|
|
const getInfo = (id: number) => {
|
|
@@ -124,9 +138,10 @@ const dataFormSubmitHandle = () => {
|
|
if (!valid) {
|
|
if (!valid) {
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
+ if(!imageUrl.value) return ElMessage.error('请上传图片');
|
|
dataForm.checkInTime = dataForm.checkInTime ? parseTime(new Date(dataForm.checkInTime), '{yy}-{mm}-{dd} {hh}:{ii}:{ss}') : null;
|
|
dataForm.checkInTime = dataForm.checkInTime ? parseTime(new Date(dataForm.checkInTime), '{yy}-{mm}-{dd} {hh}:{ii}:{ss}') : null;
|
|
dataForm.checkOutTime = dataForm.checkOutTime ? parseTime(new Date(dataForm.checkOutTime), '{yy}-{mm}-{dd} {hh}:{ii}:{ss}') : null;
|
|
dataForm.checkOutTime = dataForm.checkOutTime ? parseTime(new Date(dataForm.checkOutTime), '{yy}-{mm}-{dd} {hh}:{ii}:{ss}') : null;
|
|
- dataForm.status = dataForm.status ? Number(dataForm.status) : null;
|
|
|
|
|
|
+ dataForm.photoPath = imageUrl.value;
|
|
(!dataForm.id ? baseService.post : baseService.put)("/emergency/attendance", dataForm).then((res) => {
|
|
(!dataForm.id ? baseService.post : baseService.put)("/emergency/attendance", dataForm).then((res) => {
|
|
ElMessage.success({
|
|
ElMessage.success({
|
|
message: '成功',
|
|
message: '成功',
|
|
@@ -140,16 +155,38 @@ const dataFormSubmitHandle = () => {
|
|
});
|
|
});
|
|
};
|
|
};
|
|
|
|
|
|
-const handleFileChange = (event: Event) => {
|
|
|
|
- const target = event.target as HTMLInputElement;
|
|
|
|
- if (target?.files && target.files[0]) {
|
|
|
|
- // 保存文件名
|
|
|
|
- dataForm.photoPath = target.files[0].name;
|
|
|
|
- } else {
|
|
|
|
- dataForm.photoPath = '';
|
|
|
|
- }
|
|
|
|
-};
|
|
|
|
|
|
+
|
|
defineExpose({
|
|
defineExpose({
|
|
init
|
|
init
|
|
});
|
|
});
|
|
</script>
|
|
</script>
|
|
|
|
+<style scoped>
|
|
|
|
+.avatar-uploader .avatar {
|
|
|
|
+ width: 178px;
|
|
|
|
+ height: 178px;
|
|
|
|
+ display: block;
|
|
|
|
+}
|
|
|
|
+</style>
|
|
|
|
+
|
|
|
|
+<style>
|
|
|
|
+.avatar-uploader .el-upload {
|
|
|
|
+ border: 1px dashed var(--el-border-color);
|
|
|
|
+ border-radius: 6px;
|
|
|
|
+ cursor: pointer;
|
|
|
|
+ position: relative;
|
|
|
|
+ overflow: hidden;
|
|
|
|
+ transition: var(--el-transition-duration-fast);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.avatar-uploader .el-upload:hover {
|
|
|
|
+ border-color: var(--el-color-primary);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.el-icon.avatar-uploader-icon {
|
|
|
|
+ font-size: 28px;
|
|
|
|
+ color: #8c939d;
|
|
|
|
+ width: 178px;
|
|
|
|
+ height: 178px;
|
|
|
|
+ text-align: center;
|
|
|
|
+}
|
|
|
|
+</style>
|