47 4 months ago
parent
commit
5938b61082

+ 11 - 0
src/api/system/studentAttendance/index.ts

@@ -20,6 +20,11 @@ export const StudentAttendanceApi = {
     return await request.get({ url: `/system/student-attendance/page`, params })
   },
 
+  // 查询学生考勤记录分页(请假)
+  getStudentAttendanceExcusedPage: async (params: any) => {
+    return await request.get({ url: `/system/student-attendance/excusedPage`, params })
+  },
+
   // 查询学生考勤记录分页
   getStudentAttendanceErrorPage: async (params: any) => {
     return await request.get({ url: `/system/student-attendance/errorPage`, params })
@@ -31,6 +36,7 @@ export const StudentAttendanceApi = {
   },
 
   // 新增学生考勤记录
+  // 创建学生请假记录
   createStudentAttendance: async (data: StudentAttendanceVO) => {
     return await request.post({ url: `/system/student-attendance/create`, data })
   },
@@ -45,6 +51,11 @@ export const StudentAttendanceApi = {
     return await request.delete({ url: `/system/student-attendance/delete?id=` + id })
   },
 
+  // // 创建学生请假考勤信息
+  // createStudentAttendance: async (data: StudentAttendanceVO) => {
+  //   return await request.post({ url: `/system/student-attendance/create`, data })
+  // },
+
   // 查询学生个人考勤信息
   getStudentAttendanceSelfPage: async (params) => {
     return await request.get({ url: `/system/student-attendance/selfPage`, params })

+ 5 - 0
src/api/system/user/index.ts

@@ -183,3 +183,8 @@ export const getSimpleUserList = (): Promise<UserVO[]> => {
 export const getAttendanceTemplate = async () => {
   return request.download({ url: '/system/user/get-import-attendanceTemplate' })
 }
+
+// 删除学生人脸
+export const deletestudentFace = (userNumber: number) => {
+  return request.delete({ url: '/md/acs/deleteStudentFace?userNumber=' + userNumber })
+}

+ 2 - 4
src/views/Profile/components/FaceInfo.vue

@@ -46,12 +46,10 @@ const submitForm = async () => {
     const data = formData as unknown as ProfileVO;
     const res = await importUserData(data.photoUrl);
     console.log('API 响应:', res);
-    if (res && res.data) {
+   
       message.success('照片上传成功');
       // 在这里处理成功上传后的逻辑,例如更新用户信息
-    } else {
-      message.error('照片上传失败');
-    }
+
   } catch (error) {
     console.error(error);
     message.error('提交失败,请稍后重试');

+ 4 - 4
src/views/system/graduateStudent/UserForm.vue

@@ -85,11 +85,11 @@
         </el-col>
       </el-row>
       <el-row>
-        <el-col :span="12">
+        <!-- <el-col :span="12">
           <el-form-item v-if="formData.id === undefined" label="账号" prop="username">
             <el-input v-model="formData.username" placeholder="请输入账号" />
           </el-form-item>
-        </el-col>
+        </el-col> -->
         <el-col :span="12">
               <el-form-item label="导师名称" prop="supervisorId" v-if="userInfo.userType === '4'">
                   <el-select
@@ -110,7 +110,7 @@
           </el-form-item>
         </el-col>
         
-        <el-col :span="12">
+        <!-- <el-col :span="12">
           <el-form-item v-if="formData.id === undefined" label="用户密码" prop="password">
             <el-input
               v-model="formData.password"
@@ -119,7 +119,7 @@
               type="password"
             />
           </el-form-item>
-        </el-col>
+        </el-col> -->
       </el-row>
       <!-- <el-row>
         <el-col :span="24">

+ 25 - 11
src/views/system/graduateStudent/index.vue

@@ -23,7 +23,14 @@
           </el-form-item>
           
           <el-form-item label="年级" prop="grade">
-              <el-select
+            <el-input
+              v-model="queryParams.grade"
+              placeholder="请输入年级"
+              clearable
+              @keyup.enter="handleQuery"
+              class="!w-240px"
+            />
+              <!-- <el-select
                 v-model="queryParams.grade"
                 placeholder="请选择年级"
                 clearable
@@ -35,7 +42,7 @@
                   :label="year.toString()"
                   :value="year"
                 />
-              </el-select>
+              </el-select> -->
         </el-form-item>
           <el-form-item label="学号" prop="userNumber">
             <el-input
@@ -46,6 +53,15 @@
               class="!w-240px"
             />
           </el-form-item>
+          <el-form-item label="手机号码" prop="mobile">
+            <el-input
+              v-model="queryParams.mobile"
+              placeholder="请输入手机号码"
+              clearable
+              @keyup.enter="handleQuery"
+              class="!w-240px"
+            />
+          </el-form-item>
           <el-form-item label="邮箱" prop="email">
             <el-input
               v-model="queryParams.email"
@@ -64,15 +80,10 @@
               class="!w-240px"
             />
           </el-form-item>
-          <el-form-item label="手机号码" prop="mobile">
-            <el-input
-              v-model="queryParams.mobile"
-              placeholder="请输入手机号码"
-              clearable
-              @keyup.enter="handleQuery"
-              class="!w-240px"
-            />
+          <el-form-item label="导师" prop="leaderUserId">
+            <el-input v-model="queryParams.leaderUserId" placeholder="请输入导师" clearable @keyup.enter="handleQuery" class="!w-240px" />
           </el-form-item>
+          
           <!-- <el-form-item label="导师" prop="supervisor">
             <el-select
           v-model="queryParams.leaderUserId"
@@ -166,6 +177,7 @@
 
           <el-table-column label="年级" align="center" prop="grade" width="120" />
           <el-table-column label="学号" align="center" prop="userNumber" width="150" />
+          <el-table-column label="手机号码" align="center" prop="mobile" width="120" />
           <el-table-column label="邮箱" align="center" prop="email" width="120" />
 
           <!-- <el-table-column 
@@ -183,7 +195,7 @@
             prop="workPlace"
             :show-overflow-tooltip="true"
           />
-          <el-table-column label="手机号码" align="center" prop="mobile" width="120" />
+          
           <el-table-column 
             v-if="userInfo.userType !== '3'"
             label="导师" 
@@ -191,6 +203,7 @@
             prop="supervisor" 
             width="120" 
           />
+          <el-table-column label="备注" align="center" prop="remark" />
 
           <!-- <el-table-column
             v-if="userInfo.userType !== '3'" 
@@ -318,6 +331,7 @@ const queryParams = reactive({
   grade: undefined,
   userNumber: undefined,
   email: undefined,
+  leaderUserId: undefined,
 
 })
 const queryFormRef = ref() // 搜索的表单

+ 22 - 2
src/views/system/studentAttendanceManage/studentAttendance/index.vue

@@ -6,7 +6,7 @@
       :model="queryParams"
       ref="queryFormRef"
       :inline="true"
-      label-width="68px"
+      label-width="100px"
     >
       <el-form-item label="姓名" prop="studentName">
         <el-input
@@ -26,6 +26,24 @@
           class="!w-240px"
         />
       </el-form-item> 
+      <el-form-item label="导师姓名" prop="supervisor">
+        <el-input
+          placeholder="请输入导师姓名 "
+          v-model="queryParams.supervisor"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="工作间名称" prop="deptName">
+        <el-input
+          placeholder="请输入工作间名称 "
+          v-model="queryParams.deptName"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
       <!-- <el-form-item label="打卡状态 " prop="clockInStatus">
         <el-select
           v-model="queryParams.clockInStatus"
@@ -72,7 +90,7 @@
       <!-- <el-table-column label="工作间id" align="center" prop="deptId" /> -->
       <!-- <el-table-column label="日期" align="center" prop="date" /> -->
       <el-table-column label="学号" align="center" prop="userNumber"  />
-      <el-table-column label="导师姓名" align="center" prop="teacherName" />
+      <el-table-column label="导师姓名" align="center" prop="supervisor" />
       <el-table-column
         v-if="userInfo.userType === '4'"
         label="工作间名称"
@@ -204,6 +222,8 @@ const queryParams = reactive({
   clockInStatus: undefined,
   createTime: [],
   remark: undefined,
+  deptName: undefined,
+  supervisor: undefined,
 })
 const queryFormRef = ref() // 搜索的表单
 const exportLoading = ref(false) // 导出的加载中

+ 22 - 2
src/views/system/studentAttendanceManage/studentAttendanceError/index.vue

@@ -6,7 +6,7 @@
       :model="queryParams"
       ref="queryFormRef"
       :inline="true"
-      label-width="68px"
+      label-width="100px"
     >
         <el-form-item label="姓名" prop="studentName">
           <el-input
@@ -26,6 +26,24 @@
             class="!w-240px"
           />
         </el-form-item>
+        <el-form-item label="导师姓名" prop="supervisor">
+        <el-input
+          placeholder="请输入导师姓名 "
+          v-model="queryParams.supervisor"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="工作间名称" prop="deptName">
+        <el-input
+          placeholder="请输入工作间名称 "
+          v-model="queryParams.deptName"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
   
       <!-- <el-form-item label="创建时间" prop="createTime">
             <el-date-picker
@@ -86,7 +104,7 @@
       </el-table-column>
       <el-table-column label="姓名" align="center" prop="studentName" />
       <el-table-column label="学号" align="center" prop="userNumber"  />
-      <el-table-column label="导师姓名" align="center" prop="teacherName" />
+      <el-table-column label="导师姓名" align="center" prop="supervisor" />
       <el-table-column
         v-if="userInfo.userType === '4'"
         label="工作间名称"
@@ -190,6 +208,8 @@ const queryParams = reactive({
   clockInStatus: undefined,
   createTime: [],
   remark: undefined,
+  supervisor: undefined,
+  deptName: undefined,
 })
 const queryFormRef = ref() // 搜索的表单
 const exportLoading = ref(false) // 导出的加载中

+ 166 - 0
src/views/system/studentAttendanceManage/studentAttendanceExcused/StudentAttendanceForm.vue

@@ -0,0 +1,166 @@
+<template>
+  <Dialog :title="dialogTitle" v-model="dialogVisible">
+    <el-form
+      ref="formRef"
+      :model="formData"
+      :rules="formRules"
+      label-width="100px"
+      v-loading="formLoading"
+    >
+      <!-- <el-form-item label="学生id" prop="studentId">
+        <el-input v-model="formData.studentId" placeholder="请输入学生id" />
+      </el-form-item>
+      <el-form-item label="学生名称" prop="studentName">
+        <el-input v-model="formData.studentName" placeholder="请输入学生名称" />
+      </el-form-item>
+      <el-form-item label="学号" prop="userNumber">
+        <el-input v-model="formData.userNumber" placeholder="请输入学号" />
+      </el-form-item>
+      <el-form-item label="工作间id" prop="deptId">
+        <el-input v-model="formData.deptId" placeholder="请输入工作间id" />
+      </el-form-item>
+      <el-form-item label="工作间名称" prop="deptName">
+        <el-input v-model="formData.deptName" placeholder="请输入工作间名称" />
+      </el-form-item> -->
+      <!-- <el-form-item label="日期" prop="date">
+        <el-date-picker
+          v-model="formData.date"
+          type="date"
+          value-format="x"
+          placeholder="选择日期"
+        />
+      </el-form-item> -->
+      <!-- <el-form-item label="打卡时间" prop="clockInTime">
+        <el-date-picker
+          v-model="formData.clockInTime"
+          type="datetime"
+          value-format="x"
+          placeholder="选择打卡时间"
+        />
+      </el-form-item> -->
+      <!-- <el-form-item label="打卡状态 0正常,1迟到、2早退、3缺勤、4请假" prop="clockInStatus">
+        <el-radio-group v-model="formData.clockInStatus">
+          <el-radio label="1">请选择字典生成</el-radio>
+        </el-radio-group>
+      </el-form-item> -->
+      <!-- <el-form-item label="打卡状态 " prop="clockInStatus">
+        <el-select
+          v-model="formData.clockInStatus"
+          placeholder="请选择打卡状态 "
+          clearable
+          class="!w-240px"
+        >
+        <el-option
+          v-for="option in clockInStatusOptions"
+          :key="option.value"
+          :label="option.label"
+          :value="option.value"
+        />
+        </el-select>
+      </el-form-item> -->
+      <el-form-item label="备注原因" prop="remark">
+        <el-input v-model="formData.remark" placeholder="请输入备注原因" />
+      </el-form-item>
+    </el-form>
+    <template #footer>
+      <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
+      <el-button @click="dialogVisible = false">取 消</el-button>
+    </template>
+  </Dialog>
+</template>
+<script setup lang="ts">
+import { StudentAttendanceApi, StudentAttendanceVO } from '@/api/system/studentAttendance'
+
+/** 学生考勤记录 表单 */
+defineOptions({ name: 'StudentAttendanceForm' })
+
+const { t } = useI18n() // 国际化
+const message = useMessage() // 消息弹窗
+
+const dialogVisible = ref(false) // 弹窗的是否展示
+const dialogTitle = ref('') // 弹窗的标题
+const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
+const formType = ref('') // 表单的类型:create - 新增;update - 修改
+const formData = ref({
+  id: undefined,
+  studentId: undefined,
+  studentName: undefined,
+  userNumber: undefined,
+  deptId: undefined,
+  deptName: undefined,
+  date: undefined,
+  clockInTime: undefined,
+  clockInStatus: undefined,
+  remark: undefined,
+})
+const formRules = reactive({
+  studentId: [{ required: true, message: '学生id不能为空', trigger: 'blur' }],
+  deptId: [{ required: true, message: '工作间id不能为空', trigger: 'blur' }],
+  date: [{ required: true, message: '日期不能为空', trigger: 'blur' }],
+})
+const formRef = ref() // 表单 Ref
+
+// const clockInStatusOptions = [
+//   { label: '正常', value: 0 }, 
+//   { label: '未打卡', value: 1 }, 
+// ];
+
+/** 打开弹窗 */
+const open = async (type: string, id?: number) => {
+  dialogVisible.value = true
+  dialogTitle.value = t('action.' + type)
+  formType.value = type
+  resetForm()
+  // 修改时,设置数据
+  if (id) {
+    formLoading.value = true
+    try {
+      formData.value = await StudentAttendanceApi.getStudentAttendance(id)
+    } finally {
+      formLoading.value = false
+    }
+  }
+}
+defineExpose({ open }) // 提供 open 方法,用于打开弹窗
+
+/** 提交表单 */
+const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
+const submitForm = async () => {
+  // 校验表单
+  await formRef.value.validate()
+  // 提交请求
+  formLoading.value = true
+  try {
+    const data = formData.value as unknown as StudentAttendanceVO
+    if (formType.value === 'create') {
+      await StudentAttendanceApi.createStudentAttendance(data)
+      message.success(t('common.createSuccess'))
+    } else {
+      await StudentAttendanceApi.updateStudentAttendance(data)
+      message.success(t('common.updateSuccess'))
+    }
+    dialogVisible.value = false
+    // 发送操作成功的事件
+    emit('success')
+  } finally {
+    formLoading.value = false
+  }
+}
+
+/** 重置表单 */
+const resetForm = () => {
+  formData.value = {
+    id: undefined,
+    studentId: undefined,
+    studentName: undefined,
+    userNumber: undefined,
+    deptId: undefined,
+    deptName: undefined,
+    date: undefined,
+    clockInTime: undefined,
+    clockInStatus: undefined,
+    remark: undefined,
+  }
+  formRef.value?.resetFields()
+}
+</script>

+ 325 - 0
src/views/system/studentAttendanceManage/studentAttendanceExcused/index.vue

@@ -0,0 +1,325 @@
+<template>
+  <ContentWrap>
+    <!-- 搜索工作栏 -->
+    <el-form
+      class="-mb-15px"
+      :model="queryParams"
+      ref="queryFormRef"
+      :inline="true"
+      label-width="100px"
+    >
+        <el-form-item label="姓名" prop="studentName">
+          <el-input
+            placeholder="请输入姓名 "
+            v-model="queryParams.studentName"
+            clearable
+             @keyup.enter="handleQuery"
+            class="!w-240px"
+          />
+        </el-form-item>
+        <el-form-item label="学号" prop="userNumber">
+          <el-input
+            placeholder="请输入学号 "
+            v-model="queryParams.userNumber"
+            clearable
+            @keyup.enter="handleQuery"
+            class="!w-240px"
+          />
+        </el-form-item>
+        <el-form-item label="导师姓名" prop="supervisor">
+        <el-input
+          placeholder="请输入导师姓名 "
+          v-model="queryParams.supervisor"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="工作间名称" prop="deptName">
+        <el-input
+          placeholder="请输入工作间名称 "
+          v-model="queryParams.deptName"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+  
+      <!-- <el-form-item label="创建时间" prop="createTime">
+            <el-date-picker
+              v-model="queryParams.createTime"
+              value-format="YYYY-MM-DD HH:mm:ss"
+              type="datetimerange"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              class="!w-240px"
+            />
+          </el-form-item> -->
+
+      <!-- <el-form-item label="打卡状态 " prop="clockInStatus">
+        <el-select
+          v-model="queryParams.clockInStatus"
+          placeholder="请选择打卡状态 "
+          clearable
+          class="!w-240px"
+        >
+          <el-option :label="'正常'" :value="0" />
+          <el-option :label="'未打卡'" :value="1" />
+
+        </el-select>
+      </el-form-item> -->
+
+      <el-form-item>
+        <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
+        <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
+        <el-button
+          type="primary"
+          plain
+          @click="openForm('create')"
+          v-hasPermi="['system:student-attendance:create']"
+        >
+          <Icon icon="ep:plus" class="mr-5px" /> 新增
+        </el-button>
+        <el-button
+          type="success"
+          plain
+          @click="handleExport"
+          :loading="exportLoading"
+          v-hasPermi="['system:student-attendance:export']"
+        >
+          <Icon icon="ep:download" class="mr-5px" /> 导出
+        </el-button>
+      </el-form-item>
+    </el-form>
+  </ContentWrap>
+
+  <!-- 列表 -->
+  <ContentWrap>
+    <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
+      <el-table-column type="index" width="50" />
+      <el-table-column label="日期" align="center" prop="date">
+        <template #default="scope">
+          {{scope.row.date[0]}} 年 {{scope.row.date[1]}} 月 {{scope.row.date[2]}} 日
+        </template>
+      </el-table-column>
+      <el-table-column label="姓名" align="center" prop="studentName" />
+      <el-table-column label="学号" align="center" prop="userNumber"  />
+      <el-table-column label="导师姓名" align="center" prop="supervisor" />
+      <el-table-column
+        v-if="userInfo.userType === '4'"
+        label="工作间名称"
+        align="center"
+        prop="deptName"
+        width="100"
+      />
+      <el-table-column label="打卡类型" align="center" prop="clockInStatus">
+        <template #default="scope">
+          <dict-tag :type="DICT_TYPE.SYSTEM_STUDENT_ATTENDANCE_TYPE" :value="scope.row.clockInStatus" />
+        </template>
+      </el-table-column>
+      <!-- <el-table-column label="打卡状态 " align="center" prop="clockInStatus" >
+        <template #default="rowData">
+          <span :class="getStatusClass(rowData.row.clockInStatus)">
+            {{
+              rowData.row.clockInStatus == 0
+               ? '正常'
+                : rowData.row.clockInStatus ==1
+               ? '迟到'
+                : rowData.row.clockInStatus == 2
+               ? '早退'
+                : rowData.row.clockInStatus == 3
+               ? '缺勤'
+                : rowData.row.clockInStatus == 4
+               ? '请假'
+                : '未知类型'
+            }}
+          </span>
+        </template>
+      </el-table-column> -->
+      <!-- <el-table-column label="备注" align="center" prop="remark" /> -->
+<!--      <el-table-column label="操作" align="center" min-width="120px">-->
+<!--        <template #default="scope">-->
+<!--          <el-button-->
+<!--            link-->
+<!--            type="primary"-->
+<!--            @click="openForm('update', scope.row.id)"-->
+<!--            v-hasPermi="['system:student-attendance:update']"-->
+<!--          >-->
+<!--            编辑-->
+<!--          </el-button>-->
+<!--          <el-button-->
+<!--            link-->
+<!--            type="danger"-->
+<!--            @click="handleDelete(scope.row.id)"-->
+<!--            v-hasPermi="['system:student-attendance:delete']"-->
+<!--          >-->
+<!--            删除-->
+<!--          </el-button>-->
+<!--        </template>-->
+<!--      </el-table-column>-->
+    </el-table>
+    <!-- 分页 -->
+    <Pagination
+      :total="total"
+      v-model:page="queryParams.pageNo"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </ContentWrap>
+
+  <!-- 表单弹窗:添加/修改 -->
+  <StudentAttendanceForm ref="formRef" @success="getList" />
+</template>
+
+<script setup lang="ts">
+import { dateFormatter } from '@/utils/formatTime'
+import download from '@/utils/download'
+import { StudentAttendanceApi, StudentAttendanceVO } from '@/api/system/studentAttendance'
+import StudentAttendanceForm from './StudentAttendanceForm.vue'
+import { DICT_TYPE } from '@/utils/dict'
+import { getUserProfile, ProfileVO } from '@/api/system/user/profile'
+
+/** 学生考勤记录 列表 */
+defineOptions({ name: 'StudentAttendance' })
+
+const message = useMessage() // 消息弹窗
+const { t } = useI18n() // 国际化
+
+const userInfo = ref({} as ProfileVO)
+const getUserInfo = async () => {
+  const users = await getUserProfile()
+  console.log(users)
+  userInfo.value = users
+}
+
+const loading = ref(true) // 列表的加载中
+const list = ref<StudentAttendanceVO[]>([]) // 列表的数据
+const total = ref(0) // 列表的总页数
+const queryParams = reactive({
+  pageNo: 1,
+  pageSize: 10,
+  studentId: undefined,
+  studentName: undefined,
+  userNumber: undefined,
+  deptId: undefined,
+  date: [],
+  clockInTime: [],
+  clockInTimeRange: [],
+  clockInStatus: undefined,
+  createTime: [],
+  remark: undefined,
+  supervisor: undefined,
+  deptName: undefined,
+})
+const queryFormRef = ref() // 搜索的表单
+const exportLoading = ref(false) // 导出的加载中
+
+/** 查询列表 */
+const getList = async () => {
+  loading.value = true
+  try {
+    const data = await StudentAttendanceApi.getStudentAttendanceExcusedPage(queryParams)
+    console.log(data, 'data');
+    list.value = data.list
+    total.value = data.total
+  } finally {
+    loading.value = false
+  }
+}
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.pageNo = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value.resetFields()
+  handleQuery()
+}
+
+/** 添加/修改操作 */
+const formRef = ref()
+const openForm = (type: string, id?: number) => {
+  formRef.value.open(type, id)
+}
+
+/** 删除按钮操作 */
+const handleDelete = async (id: number) => {
+  try {
+    // 删除的二次确认
+    await message.delConfirm()
+    // 发起删除
+    await StudentAttendanceApi.deleteStudentAttendance(id)
+    message.success(t('common.delSuccess'))
+    // 刷新列表
+    await getList()
+  } catch {}
+}
+
+/** 导出按钮操作 */
+const handleExport = async () => {
+  try {
+    // 导出的二次确认
+    await message.exportConfirm()
+    // 发起导出
+    exportLoading.value = true
+    const data = await StudentAttendanceApi.exportStudentAttendance(queryParams)
+    download.excel(data, '学生考勤记录.xls')
+  } catch {
+  } finally {
+    exportLoading.value = false
+  }
+}
+
+// 状态颜色显示
+const getStatusClass = (status) => {
+  switch (status) {
+    case "0":
+      return 'status-normal';
+    case "1":
+      return 'status-late';
+    case "2":
+      return 'status-early';
+    case "3":
+      return 'status-absent';
+    case "4":
+      return 'status-leave';
+    default:
+      return 'status-unknown';
+  }
+};
+
+/** 初始化 **/
+onMounted(async () => {
+  await getUserInfo()
+  getList()
+})
+</script>
+
+<style scoped>
+.status-normal {
+  color: green;
+}
+
+.status-late {
+  color: orange;
+}
+
+.status-early {
+  color: blue;
+}
+
+.status-absent {
+  color: red;
+}
+
+.status-leave {
+  color: purple;
+}
+
+.status-unknown {
+  color: gray;
+}
+</style>

+ 1 - 1
src/views/system/studentAttendanceManage/studentFaceManage/StudentFaceForm.vue

@@ -103,7 +103,7 @@ const emit = defineEmits(['success','error'])
      // 显示错误提示
      message.error(msg);
       // 发送错误事件
-      emit('error');
+//       emit('error');
     }
   } catch (error) {
     console.error(error);

+ 27 - 7
src/views/system/studentAttendanceManage/studentFaceManage/index.vue

@@ -6,7 +6,7 @@
       :model="queryParams"
       ref="queryFormRef"
       :inline="true"
-      label-width="68px"
+      label-width="100px"
     >
       <el-form-item label="姓名" prop="nickname">
         <el-input
@@ -26,6 +26,24 @@
           class="!w-240px"
         />
       </el-form-item>
+      <el-form-item label="导师姓名" prop="supervisor">
+        <el-input
+          placeholder="请输入导师姓名 "
+          v-model="queryParams.supervisor"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="工作间名称" prop="deptName">
+        <el-input
+          placeholder="请输入工作间名称 "
+          v-model="queryParams.deptName"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
 
       <!-- <el-form-item label="导入时间" prop="createTime">
             <el-date-picker
@@ -86,7 +104,7 @@
       <el-table-column label="Id" align="center" prop="id" />
       <el-table-column label="姓名" align="center" prop="nickname" />
       <el-table-column label="学号" align="center" prop="userNumber" width="150" />
-      <el-table-column label="导师姓名" align="center" prop="teacherName" />
+      <el-table-column label="导师姓名" align="center" prop="supervisor" />
       <el-table-column 
         v-if="userInfo.userType === '4'" 
         label="工作间名称" 
@@ -149,14 +167,14 @@
           >
             编辑
           </el-button>
-          <!-- <el-button
+          <el-button
             link
             type="danger"
-            @click="handleDelete(scope.row.id)"
+            @click="handleDelete(scope.row.userNumber)"
             v-hasPermi="['system:student-attendance:query']"
           >
             删除
-          </el-button> -->
+          </el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -214,6 +232,8 @@ const queryParams = reactive({
   createTime: [],
   photoIsExist: undefined,
   remark: undefined,
+  supervisor: undefined,
+  deptName: undefined,
 })
 const queryFormRef = ref() // 搜索的表单
 const exportLoading = ref(false) // 导出的加载中
@@ -253,12 +273,12 @@ const openForm = (type: string, id?: number) => {
 }
 
 /** 删除按钮操作 */
-const handleDelete = async (id: number) => {
+const handleDelete = async (userNumber: number) => {
   try {
     // 删除的二次确认
     await message.delConfirm()
     // 发起删除
-    await UserApi.deleteUser(id)
+    await UserApi.deletestudentFace(userNumber)
     message.success(t('common.delSuccess'))
     // 刷新列表
     await getList()

+ 12 - 0
src/views/system/workroomCollege/user/student.vue

@@ -54,6 +54,17 @@
               class="!w-240px"
             />
           </el-form-item>
+          <el-form-item label="毕业条件" prop='isGraduate'>
+            <el-select 
+              v-model="queryParams.isGraduate" 
+              placeholder="是否达成毕业条件"  
+              @keyup.enter="handleQuery"
+              class="!w-240px"
+              >
+              <el-option label="未达成" :value="0" />
+              <el-option label="已达成" :value="1" />
+              </el-select>
+          </el-form-item>
           <!-- <el-form-item label="邮箱" prop="email">
             <el-input
               v-model="queryParams.email"
@@ -289,6 +300,7 @@ const queryParams = reactive({
   status: undefined,
   deptId: undefined,
   createTime: [],
+  isGraduate: undefined,
 })
 const queryFormRef = ref() // 搜索的表单
 

+ 16 - 1
src/views/system/workroomTeacher/user/student.vue

@@ -39,6 +39,9 @@
               class="!w-240px"
             />
           </el-form-item>
+          <el-form-item label="工作间" prop="deptId">
+            <el-input v-model="queryParams.deptId" placeholder="请输入工作间" clearable @keyup.enter="handleQuery" class="!w-240px" />
+          </el-form-item>
           <el-form-item label="手机号码" prop="mobile">
             <el-input
               v-model="queryParams.mobile"
@@ -48,6 +51,17 @@
               class="!w-240px"
             />
           </el-form-item>
+          <el-form-item label="毕业条件" prop='isGraduate'>
+            <el-select 
+              v-model="queryParams.isGraduate" 
+              placeholder="是否达成毕业条件"  
+              @keyup.enter="handleQuery"
+              class="!w-240px"
+              >
+              <el-option label="未达成" :value="0" />
+              <el-option label="已达成" :value="1" />
+              </el-select>
+          </el-form-item>
           <!-- <el-form-item label="状态" prop="status">
             <el-select
               v-model="queryParams.status"
@@ -262,7 +276,8 @@ const queryParams = reactive({
   mobile: undefined,
   status: undefined,
   deptId: undefined,
-  createTime: []
+  createTime: [],
+  isGraduate: undefined,
 })
 const queryFormRef = ref() // 搜索的表单