diff --git a/src/api/oa/addAttendanceClassesStaffApi.js b/src/api/oa/addAttendanceClassesStaffApi.js new file mode 100644 index 0000000..74bf503 --- /dev/null +++ b/src/api/oa/addAttendanceClassesStaffApi.js @@ -0,0 +1,104 @@ +import request from '@/utils/request' + +/** + * 保存考勤班次员工信息 + * @param {Object} data 员工信息 + * @returns {Promise} + */ +export function saveAttendanceClassesStaff(data) { + return new Promise((resolve, reject) => { + request({ + url: '/attendanceClasses.saveAttendanceClassesStaff', + method: 'post', + data + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +/** + * 上传图片 + * @param {FormData} formData 包含图片文件的FormData + * @returns {Promise} + */ +export function uploadFile(formData) { + return new Promise((resolve, reject) => { + request({ + url: '/uploadImage', + method: 'post', + data: formData, + headers: { + 'Content-Type': 'multipart/form-data' + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +/** + * 查询员工信息 + * @param {Object} params 查询参数 + * @returns {Promise} + */ +export function queryStaffInfos(params) { + return new Promise((resolve, reject) => { + request({ + url: '/query.staff.infos', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +/** + * 获取组织树 + * @param {Object} params 查询参数 + * @returns {Promise} + */ +export function listOrgTree(params) { + return new Promise((resolve, reject) => { + request({ + url: '/org.listOrgTree', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +/** + * 下载文件 + * @param {Object} params 文件参数 + * @returns {Promise} + */ +export function downloadFile(params) { + return new Promise((resolve, reject) => { + request({ + url: '/callComponent/download/getFile/file', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/oa/attendanceClassesManageApi.js b/src/api/oa/attendanceClassesManageApi.js new file mode 100644 index 0000000..593e6e1 --- /dev/null +++ b/src/api/oa/attendanceClassesManageApi.js @@ -0,0 +1,78 @@ +import request from '@/utils/request' +import { getCommunityId } from '@/api/community/communityApi' + +// 获取考勤班组列表 +export function listAttendanceClassess(params) { + return new Promise((resolve, reject) => { + request({ + url: '/attendanceClasses.listAttendanceClassess', + method: 'get', + params: { + ...params, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 添加考勤班组 +export function saveAttendanceClasses(data) { + return new Promise((resolve, reject) => { + request({ + url: '/attendanceClasses.saveAttendanceClasses', + method: 'post', + data: { + ...data, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 修改考勤班组 +export function updateAttendanceClasses(data) { + return new Promise((resolve, reject) => { + request({ + url: '/attendanceClasses.updateAttendanceClasses', + method: 'post', + data: { + ...data, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 删除考勤班组 +export function deleteAttendanceClasses(data) { + return new Promise((resolve, reject) => { + request({ + url: '/attendanceClasses.deleteAttendanceClasses', + method: 'post', + data: { + ...data, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/oa/attendanceClassesStaffManageApi.js b/src/api/oa/attendanceClassesStaffManageApi.js new file mode 100644 index 0000000..ac42285 --- /dev/null +++ b/src/api/oa/attendanceClassesStaffManageApi.js @@ -0,0 +1,49 @@ +import request from '@/utils/request' + +// 获取考勤班次列表 +export function listAttendanceClassess(params) { + return new Promise((resolve, reject) => { + request({ + url: '/attendanceClasses.listAttendanceClassess', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 获取考勤班次员工列表 +export function listAttendanceClassesStaff(params) { + return new Promise((resolve, reject) => { + request({ + url: '/attendanceClasses.listAttendanceClassesStaff', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 删除考勤班次员工 +export function deleteAttendanceClassesStaff(data) { + return new Promise((resolve, reject) => { + request({ + url: '/attendanceClasses.deleteAttendanceClassesStaff', + method: 'post', + data + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/oa/attendanceLogManageApi.js b/src/api/oa/attendanceLogManageApi.js new file mode 100644 index 0000000..b6662fb --- /dev/null +++ b/src/api/oa/attendanceLogManageApi.js @@ -0,0 +1,31 @@ +import request from '@/utils/request' + +/** + * 查询考勤记录列表 + * @param {Object} params 查询参数 + * @param {string} params.classesName 班组名称 + * @param {string} params.departmentName 部门名称 + * @param {string} params.date 打卡日期 + * @param {string} params.staffName 员工名称 + * @param {number} params.page 当前页码 + * @param {number} params.row 每页条数 + * @returns {Promise} 考勤记录列表 + */ +export function queryAttendanceLog(params) { + return new Promise((resolve, reject) => { + request({ + url: '/attendanceClass/queryAttendanceLog', + method: 'get', + params: { + ...params, + classesName: params.classesName.trim() || '', + departmentName: params.departmentName.trim() || '' + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/oa/monthAttendanceManageApi.js b/src/api/oa/monthAttendanceManageApi.js new file mode 100644 index 0000000..3df3223 --- /dev/null +++ b/src/api/oa/monthAttendanceManageApi.js @@ -0,0 +1,49 @@ +import request from '@/utils/request' + +// 获取月考勤列表 +export function getMonthAttendance(params) { + return new Promise((resolve, reject) => { + request({ + url: '/attendanceClass/getMonthAttendance', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 获取考勤班次列表 +export function getAttendanceClasses(params) { + return new Promise((resolve, reject) => { + request({ + url: '/attendanceClasses.listAttendanceClassess', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 导出月考勤数据 +export function exportMonthAttendance(params) { + return new Promise((resolve, reject) => { + request({ + url: '/export.exportData', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/oa/newOaWorkflowDoingApi.js b/src/api/oa/newOaWorkflowDoingApi.js new file mode 100644 index 0000000..626d736 --- /dev/null +++ b/src/api/oa/newOaWorkflowDoingApi.js @@ -0,0 +1,33 @@ +import request from '@/utils/request' + +// 获取待办信息 +export function getUndoInfo(params) { + return new Promise((resolve, reject) => { + request({ + url: '/callComponent/undo/list', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 查询OA工作流列表 +export function listNewOaWorkflows(params) { + return new Promise((resolve, reject) => { + request({ + url: '/oaWorkflow/queryOaWorkflow', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/oa/newOaWorkflowManageApi.js b/src/api/oa/newOaWorkflowManageApi.js new file mode 100644 index 0000000..e26fb5a --- /dev/null +++ b/src/api/oa/newOaWorkflowManageApi.js @@ -0,0 +1,30 @@ +import request from '@/utils/request' + +/** + * 查询OA工作流列表 + * @param {Object} params 查询参数 + * @returns {Promise} Promise对象 + */ +export function queryOaWorkflow(params) { + return new Promise((resolve, reject) => { + request({ + url: '/oaWorkflow/queryOaWorkflow', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +/** + * 检查工作流是否部署 + * @param {Object} params 查询参数 + * @returns {Promise} Promise对象 + */ +export function checkWorkflowDeployment(params) { + return queryOaWorkflow(params) +} \ No newline at end of file diff --git a/src/api/oa/staffAttendanceManageApi.js b/src/api/oa/staffAttendanceManageApi.js new file mode 100644 index 0000000..9f70d8a --- /dev/null +++ b/src/api/oa/staffAttendanceManageApi.js @@ -0,0 +1,92 @@ +import request from '@/utils/request' +import { getCommunityId } from '@/api/community/communityApi' + +// 查询员工信息列表 +export function queryStaffInfos(params) { + return new Promise((resolve, reject) => { + request({ + url: '/query.staff.infos', + method: 'get', + params: { + ...params, + communityId: getCommunityId() + } + }).then(response => { + resolve(response.data) + }).catch(error => { + reject(error) + }) + }) +} + +// 查询考勤任务 +export function queryAttendanceClassesTask(params) { + return new Promise((resolve, reject) => { + request({ + url: '/attendanceClass/queryAttendanceClassesTask', + method: 'get', + params: { + ...params, + communityId: getCommunityId() + } + }).then(response => { + resolve(response.data) + }).catch(error => { + reject(error) + }) + }) +} + +// 查询考勤日志 +export function queryAttendanceLog(params) { + return new Promise((resolve, reject) => { + request({ + url: '/attendanceClass/queryAttendanceLog', + method: 'get', + params: { + ...params, + communityId: getCommunityId() + } + }).then(response => { + resolve(response.data) + }).catch(error => { + reject(error) + }) + }) +} + +// 补考勤 +export function attendanceReplenishCheckIn(data) { + return new Promise((resolve, reject) => { + request({ + url: '/attendanceClasses.attendanceReplenishCheckIn', + method: 'post', + data, + headers: { + 'Content-Type': 'application/json' + } + }).then(response => { + resolve(response.data) + }).catch(error => { + reject(error) + }) + }) +} + +// 查询组织树 +export function listOrgTree(params) { + return new Promise((resolve, reject) => { + request({ + url: '/org.listOrgTree', + method: 'get', + params: { + ...params, + communityId: getCommunityId() + } + }).then(response => { + resolve(response.data) + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/oa/todayAttendanceManageApi.js b/src/api/oa/todayAttendanceManageApi.js new file mode 100644 index 0000000..da0ea80 --- /dev/null +++ b/src/api/oa/todayAttendanceManageApi.js @@ -0,0 +1,25 @@ +import request from '@/utils/request' + +/** + * 查询今日考勤列表 + * @param {Object} params 查询参数 + * @returns {Promise} Promise对象 + */ +export function queryAttendanceClassesTask(params) { + return new Promise((resolve, reject) => { + request({ + url: '/attendanceClass/queryAttendanceClassesTask', + method: 'get', + params + }).then(response => { + const res = response.data + resolve({ + data: res.data, + total: res.total, + records: res.records + }) + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/components/oa/addAttendanceClasses.vue b/src/components/oa/addAttendanceClasses.vue new file mode 100644 index 0000000..86a2ec8 --- /dev/null +++ b/src/components/oa/addAttendanceClasses.vue @@ -0,0 +1,128 @@ + + + \ No newline at end of file diff --git a/src/components/oa/chooseOrgTree.vue b/src/components/oa/chooseOrgTree.vue new file mode 100644 index 0000000..311494f --- /dev/null +++ b/src/components/oa/chooseOrgTree.vue @@ -0,0 +1,107 @@ + + + + + \ No newline at end of file diff --git a/src/components/oa/deleteAttendanceClasses.vue b/src/components/oa/deleteAttendanceClasses.vue new file mode 100644 index 0000000..57b0312 --- /dev/null +++ b/src/components/oa/deleteAttendanceClasses.vue @@ -0,0 +1,69 @@ + + + + + \ No newline at end of file diff --git a/src/components/oa/deleteAttendanceClassesStaff.vue b/src/components/oa/deleteAttendanceClassesStaff.vue new file mode 100644 index 0000000..6dfc956 --- /dev/null +++ b/src/components/oa/deleteAttendanceClassesStaff.vue @@ -0,0 +1,61 @@ + + + \ No newline at end of file diff --git a/src/components/oa/editAttendanceClasses.vue b/src/components/oa/editAttendanceClasses.vue new file mode 100644 index 0000000..9bf5ec5 --- /dev/null +++ b/src/components/oa/editAttendanceClasses.vue @@ -0,0 +1,145 @@ + + + \ No newline at end of file diff --git a/src/components/oa/orgTreeShow.vue b/src/components/oa/orgTreeShow.vue index 07b21cf..79c453f 100644 --- a/src/components/oa/orgTreeShow.vue +++ b/src/components/oa/orgTreeShow.vue @@ -1,87 +1,78 @@ \ No newline at end of file diff --git a/src/components/oa/staffAttendanceDetail.vue b/src/components/oa/staffAttendanceDetail.vue new file mode 100644 index 0000000..98adec9 --- /dev/null +++ b/src/components/oa/staffAttendanceDetail.vue @@ -0,0 +1,91 @@ + + + + + \ No newline at end of file diff --git a/src/components/oa/staffAttendanceReplenishCheckIn.vue b/src/components/oa/staffAttendanceReplenishCheckIn.vue new file mode 100644 index 0000000..3c9130d --- /dev/null +++ b/src/components/oa/staffAttendanceReplenishCheckIn.vue @@ -0,0 +1,94 @@ + + + + + \ No newline at end of file diff --git a/src/components/oa/todayAttendanceDetail.vue b/src/components/oa/todayAttendanceDetail.vue new file mode 100644 index 0000000..832b3b0 --- /dev/null +++ b/src/components/oa/todayAttendanceDetail.vue @@ -0,0 +1,110 @@ + + + + + \ No newline at end of file diff --git a/src/components/oa/uploadImageUrl.vue b/src/components/oa/uploadImageUrl.vue index 9d93c32..a304fbf 100644 --- a/src/components/oa/uploadImageUrl.vue +++ b/src/components/oa/uploadImageUrl.vue @@ -3,34 +3,36 @@
- + fit="cover" + style="width: 100px; height: 100px;" + :preview-src-list="[image]" + > - + class="el-icon-delete remove-icon" + @click="handleRemoveImage(image)" + >
- +
+ v-if="photos.length < imageCount" + class="upload-button" + @click="triggerUpload" + >
- + + hidden + @change="handleFileChange" + > + + \ No newline at end of file diff --git a/src/i18n/oaI18n.js b/src/i18n/oaI18n.js index 1337f88..b14d0b3 100644 --- a/src/i18n/oaI18n.js +++ b/src/i18n/oaI18n.js @@ -27,6 +27,16 @@ import { messages as addExamineStaffMessages } from '../views/oa/addExamineStaff import { messages as editExamineStaffMessages } from '../views/oa/editExamineStaffLang' import { messages as examineStaffValueMessages } from '../views/oa/examineStaffValueLang' import { messages as oaWorkflowManageMessages } from '../views/oa/oaWorkflowManageLang' +import { messages as newOaWorkflowManageMessages } from '../views/oa/newOaWorkflowManageLang' +import { messages as newOaWorkflowDoingMessages } from '../views/oa/newOaWorkflowDoingLang' +import { messages as attendanceClassesManageMessages } from '../views/oa/attendanceClassesManageLang' +import { messages as attendanceClassesStaffManageMessages } from '../views/oa/attendanceClassesStaffManageLang' +import { messages as todayAttendanceManageMessages } from '../views/oa/todayAttendanceManageLang' +import { messages as addAttendanceClassesStaffMessages } from '../views/oa/addAttendanceClassesStaffLang' + +import { messages as monthAttendanceManageMessages } from '../views/oa/monthAttendanceManageLang' +import { messages as staffAttendanceManageMessages } from '../views/oa/staffAttendanceManageLang' +import { messages as attendanceLogManageMessages } from '../views/oa/attendanceLogManageLang' export const messages ={ en:{ @@ -59,6 +69,15 @@ export const messages ={ ...editExamineStaffMessages.en, ...examineStaffValueMessages.en, ...oaWorkflowManageMessages.en, + ...newOaWorkflowManageMessages.en, + ...newOaWorkflowDoingMessages.en, + ...attendanceClassesManageMessages.en, + ...attendanceClassesStaffManageMessages.en, + ...todayAttendanceManageMessages.en, + ...addAttendanceClassesStaffMessages.en, + ...monthAttendanceManageMessages.en, + ...staffAttendanceManageMessages.en, + ...attendanceLogManageMessages.en, }, zh:{ ...activitiesTypeManageMessages.zh, @@ -90,5 +109,14 @@ export const messages ={ ...editExamineStaffMessages.zh, ...examineStaffValueMessages.zh, ...oaWorkflowManageMessages.zh, + ...newOaWorkflowManageMessages.zh, + ...newOaWorkflowDoingMessages.zh, + ...attendanceClassesManageMessages.zh, + ...attendanceClassesStaffManageMessages.zh, + ...todayAttendanceManageMessages.zh, + ...addAttendanceClassesStaffMessages.zh, + ...monthAttendanceManageMessages.zh, + ...staffAttendanceManageMessages.zh, + ...attendanceLogManageMessages.zh, } } \ No newline at end of file diff --git a/src/router/oaRouter.js b/src/router/oaRouter.js index b549205..f568e02 100644 --- a/src/router/oaRouter.js +++ b/src/router/oaRouter.js @@ -125,8 +125,53 @@ export default [ component: () => import('@/views/oa/examineStaffValueList.vue') }, { - path:'/pages/property/oaWorkflowManage', - name:'/pages/property/oaWorkflowManage', + path: '/pages/property/oaWorkflowManage', + name: '/pages/property/oaWorkflowManage', component: () => import('@/views/oa/oaWorkflowManageList.vue') + }, + { + path: '/pages/property/newOaWorkflowManage', + name: '/pages/property/newOaWorkflowManage', + component: () => import('@/views/oa/newOaWorkflowManageList.vue') + }, + { + path: '/pages/property/newOaWorkflowDoing', + name: '/pages/property/newOaWorkflowDoing', + component: () => import('@/views/oa/newOaWorkflowDoingList.vue') + }, + { + path: '/pages/property/attendanceClassesManage', + name: '/pages/property/attendanceClassesManage', + component: () => import('@/views/oa/attendanceClassesManageList.vue') + }, + { + path: '/pages/attendance/attendanceClassesStaffManage', + name: '/pages/attendance/attendanceClassesStaffManage', + component: () => import('@/views/oa/attendanceClassesStaffManageList.vue') + }, + { + path: '/pages/property/todayAttendanceManage', + name: '/pages/property/todayAttendanceManage', + component: () => import('@/views/oa/todayAttendanceManageList.vue') + }, + { + path: '/views/oa/addAttendanceClassesStaff', + name: '/views/oa/addAttendanceClassesStaff', + component: () => import('@/views/oa/addAttendanceClassesStaffList.vue') + }, + { + path: '/pages/property/monthAttendanceManage', + name: '/pages/property/monthAttendanceManage', + component: () => import('@/views/oa/monthAttendanceManageList.vue') + }, + { + path:'/pages/property/staffAttendanceManage', + name:'/pages/property/staffAttendanceManage', + component: () => import('@/views/oa/staffAttendanceManageList.vue') }, + { + path:'/pages/property/attendanceLogManage', + name:'/pages/property/attendanceLogManage', + component: () => import('@/views/oa/attendanceLogManageList.vue') + }, ] \ No newline at end of file diff --git a/src/views/oa/addAttendanceClassesStaffLang.js b/src/views/oa/addAttendanceClassesStaffLang.js new file mode 100644 index 0000000..8614a40 --- /dev/null +++ b/src/views/oa/addAttendanceClassesStaffLang.js @@ -0,0 +1,54 @@ +export const messages = { + en: { + addAttendanceClassesStaff: { + title: 'Add Attendance Classes Staff', + staffName: 'Staff Name', + staffNamePlaceholder: 'Required, please select staff', + staffNameRequired: 'Staff name is required', + attendanceFace: 'Attendance Face', + submitSuccess: 'Add success', + submitFailed: 'Add failed' + }, + uploadImage: { + imageSizeLimit: 'Image size cannot exceed 2MB', + uploadFailed: 'Upload failed' + }, + selectStaff: { + title: 'Select Staff', + orgInfo: 'Organization Information', + staffInfo: 'Staff Information', + submitter: 'Submitter', + dynamicAssign: 'Dynamic Assign', + loadStaffFailed: 'Failed to load staff list' + }, + orgTree: { + loadFailed: 'Failed to load organization tree' + } + }, + zh: { + addAttendanceClassesStaff: { + title: '添加考勤班次员工', + staffName: '员工名称', + staffNamePlaceholder: '必填,请选择员工', + staffNameRequired: '员工名称不能为空', + attendanceFace: '考勤人脸', + submitSuccess: '添加成功', + submitFailed: '添加失败' + }, + uploadImage: { + imageSizeLimit: '图片大小不能超过2MB', + uploadFailed: '上传失败' + }, + selectStaff: { + title: '选择员工', + orgInfo: '组织信息', + staffInfo: '员工信息', + submitter: '提交者', + dynamicAssign: '动态指定', + loadStaffFailed: '加载员工列表失败' + }, + orgTree: { + loadFailed: '加载组织树失败' + } + } +} \ No newline at end of file diff --git a/src/views/oa/addAttendanceClassesStaffList.vue b/src/views/oa/addAttendanceClassesStaffList.vue new file mode 100644 index 0000000..760b061 --- /dev/null +++ b/src/views/oa/addAttendanceClassesStaffList.vue @@ -0,0 +1,147 @@ + + + + + \ No newline at end of file diff --git a/src/views/oa/attendanceClassesManageLang.js b/src/views/oa/attendanceClassesManageLang.js new file mode 100644 index 0000000..eafab10 --- /dev/null +++ b/src/views/oa/attendanceClassesManageLang.js @@ -0,0 +1,144 @@ +export const messages = { + en: { + attendanceClassesManage: { + title: 'Attendance Settings', + document: 'Document', + add: 'Add', + classesId: 'Classes ID', + classesName: 'Classes Name', + timeOffset: 'Clock-in Range', + lateOffset: 'Late Range', + leaveOffset: 'Early Leave Range', + maxLastOffset: 'Last Clock-out Range', + operation: 'Operation', + minute: 'minute', + fetchError: 'Failed to fetch attendance classes data' + }, + addAttendanceClasses: { + title: 'Add Attendance Classes', + classesName: 'Classes Name', + classesNamePlaceholder: 'Required, please enter classes name', + classesNameRequired: 'Classes name is required', + classesNameMaxLength: 'Classes name format error', + timeOffset: 'Clock-in Range', + timeOffsetPlaceholder: 'Required, please enter clock-in range (minutes)', + timeOffsetRequired: 'Clock-in range is required', + timeOffsetFormat: 'Clock-in range format error', + lateOffset: 'Late Range', + lateOffsetPlaceholder: 'Required, please enter late range (minutes)', + lateOffsetRequired: 'Late range is required', + lateOffsetMaxLength: 'Late range error', + leaveOffset: 'Early Leave Range', + leaveOffsetPlaceholder: 'Required, please enter early leave range (minutes)', + leaveOffsetRequired: 'Early leave range is required', + leaveOffsetMaxLength: 'Early leave range error', + maxLastOffset: 'Last Clock-out Range', + maxLastOffsetPlaceholder: 'Required, please enter last clock-out range (minutes)', + maxLastOffsetRequired: 'Last clock-out range is required', + saveSuccess: 'Added successfully' + }, + editAttendanceClasses: { + title: 'Edit Attendance Classes', + classesName: 'Classes Name', + classesNamePlaceholder: 'Required, please enter classes name', + classesNameRequired: 'Classes name is required', + classesNameMaxLength: 'Classes name format error', + timeOffset: 'Clock-in Range', + timeOffsetPlaceholder: 'Required, please enter clock-in range (minutes)', + timeOffsetRequired: 'Clock-in range is required', + timeOffsetFormat: 'Clock-in range format error', + lateOffset: 'Late Range', + lateOffsetPlaceholder: 'Required, please enter late range (minutes)', + lateOffsetRequired: 'Late range is required', + lateOffsetMaxLength: 'Late range error', + leaveOffset: 'Early Leave Range', + leaveOffsetPlaceholder: 'Required, please enter early leave range (minutes)', + leaveOffsetRequired: 'Early leave range is required', + leaveOffsetMaxLength: 'Early leave range error', + maxLastOffset: 'Last Clock-out Range', + maxLastOffsetPlaceholder: 'Required, please enter last clock-out range (minutes)', + maxLastOffsetRequired: 'Last clock-out range is required', + classesIdRequired: 'Classes ID is required', + editSuccess: 'Modified successfully' + }, + deleteAttendanceClasses: { + title: 'Confirm Operation', + confirmText: 'Are you sure to delete this attendance classes?', + cancel: 'Cancel', + confirm: 'Confirm Delete', + deleteSuccess: 'Deleted successfully', + deleteError: 'Failed to delete attendance classes' + } + }, + zh: { + attendanceClassesManage: { + title: '考勤设置', + document: '文档', + add: '添加', + classesId: '班组ID', + classesName: '班组名称', + timeOffset: '打卡范围', + lateOffset: '迟到范围', + leaveOffset: '早退范围', + maxLastOffset: '当日下班范围', + operation: '操作', + minute: '分钟', + fetchError: '获取考勤班组数据失败' + }, + addAttendanceClasses: { + title: '添加考勤班组', + classesName: '班次名称', + classesNamePlaceholder: '必填,请填写班次名称', + classesNameRequired: '班次名称不能为空', + classesNameMaxLength: '班次名称格式错误', + timeOffset: '打卡范围', + timeOffsetPlaceholder: '必填,请填写打卡范围(分钟)', + timeOffsetRequired: '打卡范围不能为空', + timeOffsetFormat: '打卡范围格式错误', + lateOffset: '迟到范围', + lateOffsetPlaceholder: '必填,请填写迟到范围(分钟)', + lateOffsetRequired: '迟到范围不能为空', + lateOffsetMaxLength: '迟到范围错误', + leaveOffset: '早退范围', + leaveOffsetPlaceholder: '必填,请填写早退范围(分钟)', + leaveOffsetRequired: '早退范围不能为空', + leaveOffsetMaxLength: '早退范围错误', + maxLastOffset: '当日下班范围', + maxLastOffsetPlaceholder: '必填,请填写当日最后一次下班打卡范围(分钟)', + maxLastOffsetRequired: '当日下班范围不能为空', + saveSuccess: '添加成功' + }, + editAttendanceClasses: { + title: '修改考勤班组', + classesName: '班次名称', + classesNamePlaceholder: '必填,请填写班次名称', + classesNameRequired: '班次名称不能为空', + classesNameMaxLength: '班次名称格式错误', + timeOffset: '打卡范围', + timeOffsetPlaceholder: '必填,请填写打卡范围(分钟)', + timeOffsetRequired: '打卡范围不能为空', + timeOffsetFormat: '打卡范围格式错误', + lateOffset: '迟到范围', + lateOffsetPlaceholder: '必填,请填写迟到范围(分钟)', + lateOffsetRequired: '迟到范围不能为空', + lateOffsetMaxLength: '迟到范围错误', + leaveOffset: '早退范围', + leaveOffsetPlaceholder: '必填,请填写早退范围(分钟)', + leaveOffsetRequired: '早退范围不能为空', + leaveOffsetMaxLength: '早退范围错误', + maxLastOffset: '当日下班范围', + maxLastOffsetPlaceholder: '必填,请填写当日最后一次下班打卡范围(分钟)', + maxLastOffsetRequired: '当日下班范围不能为空', + classesIdRequired: '班组ID不能为空', + editSuccess: '修改成功' + }, + deleteAttendanceClasses: { + title: '请确认您的操作', + confirmText: '确定删除考勤班组吗?', + cancel: '点错了', + confirm: '确认删除', + deleteSuccess: '删除成功', + deleteError: '删除考勤班组失败' + } + } +} \ No newline at end of file diff --git a/src/views/oa/attendanceClassesManageList.vue b/src/views/oa/attendanceClassesManageList.vue new file mode 100644 index 0000000..bd24a54 --- /dev/null +++ b/src/views/oa/attendanceClassesManageList.vue @@ -0,0 +1,161 @@ + + + + + \ No newline at end of file diff --git a/src/views/oa/attendanceClassesStaffManageLang.js b/src/views/oa/attendanceClassesStaffManageLang.js new file mode 100644 index 0000000..5d9fb4f --- /dev/null +++ b/src/views/oa/attendanceClassesStaffManageLang.js @@ -0,0 +1,52 @@ +export const messages = { + en: { + attendanceClassesStaffManage: { + search: { + title: 'Search Conditions', + staffName: 'Please enter staff name' + }, + list: { + title: 'Attendance Staff List' + }, + table: { + face: 'Face', + staffId: 'Staff ID', + staffName: 'Staff Name', + createTime: 'Create Time' + }, + delete: { + title: 'Confirm Operation', + confirmText: 'Are you sure to delete this attendance staff?', + success: 'Delete successfully', + error: 'Delete failed' + }, + fetchError: 'Failed to fetch attendance staff data', + fetchClassError: 'Failed to fetch attendance classes data' + } + }, + zh: { + attendanceClassesStaffManage: { + search: { + title: '查询条件', + staffName: '请输入员工姓名' + }, + list: { + title: '考勤员工列表' + }, + table: { + face: '人脸', + staffId: '员工编号', + staffName: '员工名称', + createTime: '创建时间' + }, + delete: { + title: '确认操作', + confirmText: '确定删除该考勤员工吗?', + success: '删除成功', + error: '删除失败' + }, + fetchError: '获取考勤员工数据失败', + fetchClassError: '获取考勤班次数据失败' + } + } +} \ No newline at end of file diff --git a/src/views/oa/attendanceClassesStaffManageList.vue b/src/views/oa/attendanceClassesStaffManageList.vue new file mode 100644 index 0000000..04ef886 --- /dev/null +++ b/src/views/oa/attendanceClassesStaffManageList.vue @@ -0,0 +1,241 @@ + + + + + \ No newline at end of file diff --git a/src/views/oa/attendanceLogManageLang.js b/src/views/oa/attendanceLogManageLang.js new file mode 100644 index 0000000..93ac085 --- /dev/null +++ b/src/views/oa/attendanceLogManageLang.js @@ -0,0 +1,48 @@ +export const messages = { + en: { + attendanceLogManage: { + search: { + title: 'Search Conditions', + classesName: 'Please enter class name', + departmentName: 'Please enter department name', + date: 'Please select clock time', + staffName: 'Please enter staff name' + }, + list: { + title: 'Attendance Records' + }, + table: { + face: 'Face', + departmentName: 'Department Name', + staffName: 'Staff Name', + staffId: 'Staff ID', + clockTime: 'Clock Time', + remark: 'Remark' + }, + fetchError: 'Failed to fetch attendance records' + } + }, + zh: { + attendanceLogManage: { + search: { + title: '查询条件', + classesName: '请输入班组名称', + departmentName: '请输入部门名称', + date: '请选择打卡时间', + staffName: '请输入员工名称' + }, + list: { + title: '考勤记录' + }, + table: { + face: '人脸', + departmentName: '部门名称', + staffName: '员工名称', + staffId: '员工ID', + clockTime: '考勤时间', + remark: '说明' + }, + fetchError: '获取考勤记录失败' + } + } +} \ No newline at end of file diff --git a/src/views/oa/attendanceLogManageList.vue b/src/views/oa/attendanceLogManageList.vue new file mode 100644 index 0000000..e6dddd2 --- /dev/null +++ b/src/views/oa/attendanceLogManageList.vue @@ -0,0 +1,162 @@ + + + + + \ No newline at end of file diff --git a/src/views/oa/monthAttendanceManageLang.js b/src/views/oa/monthAttendanceManageLang.js new file mode 100644 index 0000000..3e71a45 --- /dev/null +++ b/src/views/oa/monthAttendanceManageLang.js @@ -0,0 +1,64 @@ +export const messages = { + en: { + monthAttendance: { + search: { + title: 'Search Conditions', + classes: 'Classes', + selectClasses: 'Please select classes', + staffName: 'Staff Name', + inputStaffName: 'Please input staff name', + date: 'Date', + selectDate: 'Please select date' + }, + table: { + title: 'Monthly Attendance', + classes: 'Classes', + staffName: 'Staff Name', + clockIn: 'Normal Attendance', + late: 'Late', + early: 'Leave Early', + noClockIn: 'Absenteeism', + free: 'No Need Attendance' + }, + work: 'Work', + offWork: 'Off Work', + notTime: 'Not time yet', + noNeed: 'No need attendance', + fetchError: 'Failed to fetch attendance data', + fetchClassesError: 'Failed to fetch classes data', + exportSuccess: 'Export successfully', + exportError: 'Failed to export' + } + }, + zh: { + monthAttendance: { + search: { + title: '查询条件', + classes: '班次', + selectClasses: '请选择班次', + staffName: '员工名称', + inputStaffName: '请输入员工名称', + date: '打卡时间', + selectDate: '请选择打卡时间' + }, + table: { + title: '月考勤', + classes: '考勤组', + staffName: '员工名称', + clockIn: '正常考勤', + late: '迟到', + early: '早退', + noClockIn: '旷工', + free: '免考勤' + }, + work: '上班', + offWork: '下班', + notTime: '未到时间', + noNeed: '无需考勤', + fetchError: '获取考勤数据失败', + fetchClassesError: '获取班次数据失败', + exportSuccess: '导出成功', + exportError: '导出失败' + } + } +} \ No newline at end of file diff --git a/src/views/oa/monthAttendanceManageList.vue b/src/views/oa/monthAttendanceManageList.vue new file mode 100644 index 0000000..14e649d --- /dev/null +++ b/src/views/oa/monthAttendanceManageList.vue @@ -0,0 +1,283 @@ + + + + + \ No newline at end of file diff --git a/src/views/oa/newOaWorkflowDoingLang.js b/src/views/oa/newOaWorkflowDoingLang.js new file mode 100644 index 0000000..8e8fddd --- /dev/null +++ b/src/views/oa/newOaWorkflowDoingLang.js @@ -0,0 +1,56 @@ +export const messages = { + en: { + newOaWorkflowDoing: { + myPending: 'My Pending', + myCompleted: 'My Completed', + refresh: 'Refresh', + repairPending: 'Repair Pending', + complaintPending: 'Complaint Pending', + purchasePending: 'Purchase Pending', + collectionPending: 'Collection Pending', + contractApplyPending: 'Contract Draft Pending', + contractChangePending: 'Contract Change Pending', + allocationPending: 'Allocation Pending', + itemReleasePending: 'Item Release Pending', + visitPending: 'Visit Pending', + repairCompleted: 'Repair Completed', + complaintCompleted: 'Complaint Completed', + purchaseCompleted: 'Purchase Completed', + collectionCompleted: 'Collection Completed', + contractApplyCompleted: 'Contract Draft Completed', + contractChangeCompleted: 'Contract Change Completed', + allocationCompleted: 'Allocation Completed', + itemReleaseCompleted: 'Item Release Completed', + visitCompleted: 'Visit Completed', + pending: 'Pending', + completed: 'Completed' + } + }, + zh: { + newOaWorkflowDoing: { + myPending: '我的待办', + myCompleted: '我的已办', + refresh: '刷新', + repairPending: '报修待办', + complaintPending: '投诉待办', + purchasePending: '采购待办', + collectionPending: '物品领用待办', + contractApplyPending: '合同起草待办', + contractChangePending: '合同变更待办', + allocationPending: '调拨待办', + itemReleasePending: '物品放行待办', + visitPending: '访客待办', + repairCompleted: '报修已办', + complaintCompleted: '投诉已办', + purchaseCompleted: '采购已办', + collectionCompleted: '物品领用已办', + contractApplyCompleted: '合同起草已办', + contractChangeCompleted: '合同变更已办', + allocationCompleted: '调拨已办', + itemReleaseCompleted: '物品放行已办', + visitCompleted: '访客已办', + pending: '待办', + completed: '已办' + } + } +} \ No newline at end of file diff --git a/src/views/oa/newOaWorkflowDoingList.vue b/src/views/oa/newOaWorkflowDoingList.vue new file mode 100644 index 0000000..84f0900 --- /dev/null +++ b/src/views/oa/newOaWorkflowDoingList.vue @@ -0,0 +1,206 @@ + + + + + \ No newline at end of file diff --git a/src/views/oa/newOaWorkflowManageLang.js b/src/views/oa/newOaWorkflowManageLang.js new file mode 100644 index 0000000..d15bef2 --- /dev/null +++ b/src/views/oa/newOaWorkflowManageLang.js @@ -0,0 +1,14 @@ +export const messages = { + en: { + newOaWorkflowManage: { + noPublishedFlow: 'You have not published any workflows, please publish them in the workflow instances first', + flowNotDeployed: 'Workflow is not deployed' + } + }, + zh: { + newOaWorkflowManage: { + noPublishedFlow: '您还没有发布流程,请先到流程实例中发布流程', + flowNotDeployed: '流程未部署' + } + } +} \ No newline at end of file diff --git a/src/views/oa/newOaWorkflowManageList.vue b/src/views/oa/newOaWorkflowManageList.vue new file mode 100644 index 0000000..85371be --- /dev/null +++ b/src/views/oa/newOaWorkflowManageList.vue @@ -0,0 +1,113 @@ + + + + + \ No newline at end of file diff --git a/src/views/oa/staffAttendanceManageLang.js b/src/views/oa/staffAttendanceManageLang.js new file mode 100644 index 0000000..181eba1 --- /dev/null +++ b/src/views/oa/staffAttendanceManageLang.js @@ -0,0 +1,66 @@ +export const messages = { + en: { + staffAttendance: { + monthPlaceholder: 'Select month', + orgPlaceholder: 'Select organization', + staffPlaceholder: 'Staff name', + replenish: 'Replenish', + work: 'Work', + offWork: 'Off work', + log: 'Attendance log', + notTime: 'Not time yet', + noNeed: 'No need', + noTask: 'No replenish task', + chooseOrg: 'Select Organization', + loadOrgFailed: 'Failed to load organizations', + selectOrgFirst: 'Please select an organization first', + attendanceDetail: 'Attendance Details', + staffName: 'Staff Name', + face: 'Face', + clockTime: 'Clock Time', + loadDetailFailed: 'Failed to load attendance details', + replenishCheckIn: 'Replenish Attendance', + attendanceTask: 'Attendance Task', + selectTask: 'Please select task', + selectTaskFirst: 'Please select a task first', + reason: 'Reason', + inputReason: 'Please input reason', + inputReasonFirst: 'Please input reason first', + submitReplenish: 'Submit Replenish', + replenishSuccess: 'Replenish successfully', + replenishFailed: 'Replenish failed' + } + }, + zh: { + staffAttendance: { + monthPlaceholder: '请选择月份', + orgPlaceholder: '请选择组织', + staffPlaceholder: '员工名称', + replenish: '补考勤', + work: '上班', + offWork: '下班', + log: '考勤记录', + notTime: '未到时间', + noNeed: '无需考勤', + noTask: '不存在补考勤任务', + chooseOrg: '选择组织', + loadOrgFailed: '加载组织失败', + selectOrgFirst: '请先选择组织', + attendanceDetail: '考勤明细', + staffName: '员工名称', + face: '人脸', + clockTime: '考勤时间', + loadDetailFailed: '加载考勤明细失败', + replenishCheckIn: '补考勤', + attendanceTask: '考勤任务', + selectTask: '请选择考勤任务', + selectTaskFirst: '请先选择考勤任务', + reason: '原因', + inputReason: '请填写原因', + inputReasonFirst: '请先填写原因', + submitReplenish: '提交补考勤', + replenishSuccess: '补考勤成功', + replenishFailed: '补考勤失败' + } + } +} \ No newline at end of file diff --git a/src/views/oa/staffAttendanceManageList.vue b/src/views/oa/staffAttendanceManageList.vue new file mode 100644 index 0000000..61a199d --- /dev/null +++ b/src/views/oa/staffAttendanceManageList.vue @@ -0,0 +1,337 @@ + + + + + \ No newline at end of file diff --git a/src/views/oa/todayAttendanceManageLang.js b/src/views/oa/todayAttendanceManageLang.js new file mode 100644 index 0000000..e5a9421 --- /dev/null +++ b/src/views/oa/todayAttendanceManageLang.js @@ -0,0 +1,74 @@ +export const messages = { + en: { + todayAttendanceManage: { + search: { + title: 'Search Conditions', + classesName: 'Please enter team name', + departmentName: 'Please enter department name', + date: 'Please select attendance date', + staffName: 'Please enter staff name' + }, + list: { + title: 'Today Attendance' + }, + table: { + staffName: 'Staff Name', + classesName: 'Attendance Team', + attendanceDate: 'Attendance Date', + stateName: 'Attendance Status', + operation: 'Operation' + }, + fetchError: 'Failed to fetch attendance data' + }, + todayAttendanceDetail: { + title: 'Attendance Details', + table: { + name: 'Name', + work: 'Work', + offWork: 'Off Work', + attendanceRange: 'Attendance Range', + lateEarly: 'Late/Early', + status: 'Status', + attendanceTime: 'Attendance Time', + notCheckIn: 'Not Checked In', + snapshot: 'Snapshot' + } + } + }, + zh: { + todayAttendanceManage: { + search: { + title: '查询条件', + classesName: '请输入班组名称', + departmentName: '请输入部门名称', + date: '请选择打卡时间', + staffName: '请输入员工名称' + }, + list: { + title: '今日考勤' + }, + table: { + staffName: '员工名称', + classesName: '考勤班组', + attendanceDate: '考勤时间', + stateName: '考勤状态', + operation: '操作' + }, + fetchError: '获取考勤数据失败' + }, + todayAttendanceDetail: { + title: '考勤详情', + table: { + name: '名称', + work: '上班', + offWork: '下班', + attendanceRange: '打卡范围', + lateEarly: '迟到/早退', + status: '状态', + attendanceTime: '打卡时间', + notCheckIn: '未打卡', + snapshot: '抓拍' + } + } + } +} \ No newline at end of file diff --git a/src/views/oa/todayAttendanceManageList.vue b/src/views/oa/todayAttendanceManageList.vue new file mode 100644 index 0000000..aa77ac1 --- /dev/null +++ b/src/views/oa/todayAttendanceManageList.vue @@ -0,0 +1,211 @@ + + + + + \ No newline at end of file