From 4a125073dfb0acfefc473e9439ff6a551735e0e5 Mon Sep 17 00:00:00 2001 From: Admin <978517621@qq.com> Date: 星期五, 05 八月 2022 15:07:42 +0800 Subject: [PATCH] 班组接口对接 --- src/api/basicDateManage/personShiftManage/workingHours/index.ts | 2 src/views/system/personShiftManage/personTimeManage/timeStrategy/index.vue | 159 ++- src/api/basicDateManage/personShiftManage/holidayTime/index.ts | 50 + src/views/system/personShiftManage/personTimeManage/workingHoursSet/index.vue | 3 src/api/basicDateManage/personShiftManage/timeStrategy/index.ts | 85 ++ src/views/system/personShiftManage/shiftManage/teamStrategy/index.vue | 718 +++++++++++++++++ /dev/null | 567 ------------- src/api/basicDateManage/personShiftManage/teamStrategy/index.ts | 51 + src/views/system/personShiftManage/shiftManage/teamManage/index.vue | 278 +++--- src/api/basicDateManage/personShiftManage/holidayTimeGroup/index.ts | 58 + src/api/basicDateManage/personShiftManage/teamManage/index.ts | 95 ++ src/views/system/personShiftManage/personTimeManage/holidayTime/index.vue | 323 +++++-- src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue | 66 src/views/system/personShiftManage/personTimeManage/durationManage/index.vue | 0 14 files changed, 1,535 insertions(+), 920 deletions(-) diff --git a/src/api/basicDateManage/personShiftManage/holidayTime/index.ts b/src/api/basicDateManage/personShiftManage/holidayTime/index.ts new file mode 100644 index 0000000..fa82be1 --- /dev/null +++ b/src/api/basicDateManage/personShiftManage/holidayTime/index.ts @@ -0,0 +1,50 @@ +import request from '/@/utils/request'; + +export function holidayTimeApi() { + return { + // 分页获取休息日列表 + getAllBreakTimeRuleByPage: (data: object) => { + return request({ + url: `/breakTime/getAllBreakTimeRuleByPage`, + method: 'post', + data: data + }); + }, + + // 新增休息日 + addBreakTime: (data: object) => { + return request({ + url: `/breakTime/addBreakTimeRule`, + method: 'post', + data: data + }); + }, + + // 修改休息日 + updateBreakTime: (data: object) => { + return request({ + url: `/breakTime/updateBreakTimeRule`, + method: 'post', + data: data + }); + }, + + // 删除休息日 + deleteBreakTime: (data: object) => { + return request({ + url: `/breakTime/deleteBreakTimeRule`, + method: 'post', + data: data + }); + }, + + // 删除休息日 + deleteBatch: (data: object) => { + return request({ + url: `/breakTime/deleteBatchBreakTimeRule`, + method: 'post', + data: data + }); + }, + }; +} diff --git a/src/api/basicDateManage/personShiftManage/holidayTimeGroup/index.ts b/src/api/basicDateManage/personShiftManage/holidayTimeGroup/index.ts new file mode 100644 index 0000000..08b29b6 --- /dev/null +++ b/src/api/basicDateManage/personShiftManage/holidayTimeGroup/index.ts @@ -0,0 +1,58 @@ +import request from '/@/utils/request'; + +export function holidayGroupApi() { + return { + //休息时间组分页列表 + getRecordPage: (data: object)=>{ + return request({ + url: `/breakTime/getAllBreakTimeGroupByPage`, + method: 'post', + data: data + }) + }, + + // 休息时间组新增 + addRecord: (data: object)=>{ + return request({ + url: `/breakTime/addBreakTimeGroup`, + method: 'post', + data: data + }) + }, + + // 休息时间组修改 + updateRecord: (data: object)=>{ + return request({ + url: `/breakTime/updateBreakTimeGroup`, + method: 'post', + data: data + }) + }, + + // 休息时间组删除 + deleteRecord: (data: object)=>{ + return request({ + url: `/breakTime/deleteBreakTimeGroup`, + method: 'post', + data: data + }) + }, + + // 休息时间组批量删除 + deletBatchRecord: (data: object)=>{ + return request({ + url: `/breakTime/deleteBatchBreakTimeGroup`, + method: 'post', + data: data + }) + }, + + //休息时间列表 + getAllBreak: ()=>{ + return request({ + url: `/breakTime/getAllBreakTimeRule`, + method: 'get' + }) + }, + }; +} diff --git a/src/api/basicDateManage/personShiftManage/teamManage/index.ts b/src/api/basicDateManage/personShiftManage/teamManage/index.ts new file mode 100644 index 0000000..895f601 --- /dev/null +++ b/src/api/basicDateManage/personShiftManage/teamManage/index.ts @@ -0,0 +1,95 @@ +import request from '/@/utils/request'; + +export function teamManageApi() { + return { + //班组分页列表 + getRecordPage: (data: object)=>{ + return request({ + url: `/schedule/group/page/list`, + method: 'post', + data: data + }) + }, + + //班组列表 + getRecord: (data: object)=>{ + return request({ + url: `/schedule/group/list`, + method: 'post', + data: data + }) + }, + + //班组-班组成员分页列表 + getAllRecordPage: (data: object)=>{ + return request({ + url: `/schedule/group/member/page/list`, + method: 'post', + data: data + }) + }, + + //所有部门列表 + getAllDepartment: ()=>{ + return request({ + url: `/department/list`, + method: 'post' + }) + }, + + + //用户-部门所有用户 + getAllMember: (data: number)=>{ + return request({ + url: `/account/dep/list?depId=${data}`, + method: 'get', + data: data + }) + }, + + // 班组-班组成员列表 + getAllRecord: (data: object)=>{ + return request({ + url: `/schedule/group/member/list`, + method: 'get', + data: data + }) + }, + + // 班组新增 + addRecord: (data: object)=>{ + return request({ + url: `/schedule/group/add`, + method: 'post', + data: data + }) + }, + + // 班组修改 + updateRecord: (data: object)=>{ + return request({ + url: `/schedule/group/mod`, + method: 'post', + data: data + }) + }, + + // 班组删除 + deleteRecord: (data: object)=>{ + return request({ + url: `/schedule/group/del`, + method: 'post', + data: data + }) + }, + + // 时间策略批量删除 + // deletBatchRecord: (data: object)=>{ + // return request({ + // url: `/timeStrategy/deleteBatchTimeStrategy`, + // method: 'post', + // data: data + // }) + // }, + }; +} diff --git a/src/api/basicDateManage/personShiftManage/teamStrategy/index.ts b/src/api/basicDateManage/personShiftManage/teamStrategy/index.ts new file mode 100644 index 0000000..0a4a38e --- /dev/null +++ b/src/api/basicDateManage/personShiftManage/teamStrategy/index.ts @@ -0,0 +1,51 @@ +import request from '/@/utils/request'; + +export function teamStrategyApi() { + return { + + //获取班组策略分页列表 + getRecordPage: (data: object)=>{ + return request({ + url: `/schedule/groupStrategy/page/list`, + method: 'post', + data: data + }) + }, + + // 班组策略新增 + addRecord: (data: object)=>{ + return request({ + url: `/schedule/groupStrategy/add`, + method: 'post', + data: data + }) + }, + + // 班组策略修改 + updateRecord: (data: object)=>{ + return request({ + url: `/schedule/groupStrategy/mod`, + method: 'post', + data: data + }) + }, + + // 班组策略删除 + deleteRecord: (data: object)=>{ + return request({ + url: `/schedule/groupStrategy/del`, + method: 'post', + data: data + }) + }, + + // 时间策略批量删除 + // deletBatchRecord: (data: object)=>{ + // return request({ + // url: `/timeStrategy/deleteBatchTimeStrategy`, + // method: 'post', + // data: data + // }) + // }, + }; +} diff --git a/src/api/basicDateManage/personShiftManage/timeStrategy/index.ts b/src/api/basicDateManage/personShiftManage/timeStrategy/index.ts new file mode 100644 index 0000000..d07dbad --- /dev/null +++ b/src/api/basicDateManage/personShiftManage/timeStrategy/index.ts @@ -0,0 +1,85 @@ +import request from '/@/utils/request'; + +export function timeStrategyApi() { + return { + //获取工作时间组列表 + getWorkTimeList: ()=>{ + return request({ + url: `/workTime/getWorkTimeGroup`, + method: 'get' + }) + }, + + //获取休息时间组列表 + getRestTimeList: ()=>{ + return request({ + url: `/breakTime/getAllBreakTimeGroup`, + method: 'get' + }) + }, + + //时间策略分页列表 + getRecordPage: (data: object)=>{ + return request({ + url: `/timeStrategy/getAllTimeStrategyByPage`, + method: 'post', + data: data + }) + }, + + // 时间策略全部列表 + getAllRecord: ()=>{ + return request({ + url: `/timeStrategy/getAllTimeStrategy`, + method: 'get' + }) + }, + + + + //根据id获取时间策略列表 + getRecordById: (data:object)=>{ + return request({ + url: `/timeStrategy/getTimeStrategyById`, + method: 'post', + data: data + }) + }, + + // 时间策略新增 + addRecord: (data: object)=>{ + return request({ + url: `/timeStrategy/addTimeStrategy`, + method: 'post', + data: data + }) + }, + + // 时间策略修改 + updateRecord: (data: object)=>{ + return request({ + url: `/timeStrategy/updateTimeStrategy`, + method: 'post', + data: data + }) + }, + + // 时间策略删除 + deleteRecord: (data: object)=>{ + return request({ + url: `/timeStrategy/deleteTimeStrategy`, + method: 'post', + data: data + }) + }, + + // 时间策略批量删除 + deletBatchRecord: (data: object)=>{ + return request({ + url: `/timeStrategy/deleteBatchTimeStrategy`, + method: 'post', + data: data + }) + }, + }; +} diff --git a/src/api/basicDateManage/personShiftManage/workingHours/index.ts b/src/api/basicDateManage/personShiftManage/workingHours/index.ts index d1ad847..f3bc789 100644 --- a/src/api/basicDateManage/personShiftManage/workingHours/index.ts +++ b/src/api/basicDateManage/personShiftManage/workingHours/index.ts @@ -3,7 +3,7 @@ export function workingHoursApi() { return { // 获取工作时间段列表 - getWorkTimePeriod: (value: { name: string }) => { + getWorkTimePeriod: () => { return request({ url: `/workTime/getWorkTimePeriod`, method: 'get' diff --git a/src/views/system/personShiftManage/holidayTime/index.vue b/src/views/system/personShiftManage/holidayTime/index.vue deleted file mode 100644 index 7bfacde..0000000 --- a/src/views/system/personShiftManage/holidayTime/index.vue +++ /dev/null @@ -1,625 +0,0 @@ -<template> - <div class="home-container"> - <div style="height: 100%"> - <el-row class="homeCard"> - <el-col :span="8"> - <div class="grid-content topInfo"> - <el-input v-model="searchWord" placeholder="休息日名称"></el-input> - <el-button type="primary" @click="searchRecord">查询</el-button> - <el-button plain @click="clearSearch">重置</el-button> - </div> - </el-col> - </el-row> - <div class="homeCard"> - <div class="main-card"> - <el-row class="cardTop"> - <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> -<!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> - <el-button type="danger" :icon="Delete" size="default" plain @click="deleteWorkTimePeriods">删除</el-button> - </el-col> - <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()"/> - </el-row> - <el-table - ref="multipleTableRef" - :data="tableData" - style="width: 100%" - height="calc(100% - 100px)" - :header-cell-style="{background: '#fafafa'}" - @selection-change="handleSelectionChange" - > - <el-table-column type="selection" width="100" /> - <el-table-column property="name" label="休息日名称"/> - <el-table-column property="type" label="休息日类型"/> - <el-table-column property="info" label="描述信息"/> - <el-table-column fixed="right" label="操作" align="center" width="250"> - <template #default="scope"> - <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> - <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> - <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.row)">删除</el-button> - </template> - </el-table-column> - </el-table> - <div class="pageBtn"> - <el-pagination - v-model:currentPage="pageIndex" - v-model:page-size="pageSize" - :page-sizes="[10, 15]" - small=false - background - layout="total, sizes, prev, pager, next, jumper" - :total="totalSize" - @size-change="handleSizeChange" - @current-change="handleCurrentChange" - /> - </div> - </div> - </div> - </div> - <el-dialog v-model="dialogDetails" title="休息时间"> - <el-form :model="details" label-width="120px"> - <el-form-item label="名称"> - <el-input - v-model="details.name" - readonly - /> - </el-form-item> - <el-form-item label="休假类型"> - <el-input - v-model="details.type" - readonly - /> - </el-form-item> - <el-form-item label="休假时间" v-if="details.content.length>0"> - <el-input - v-model="details.content" - readonly - /> - </el-form-item> - <el-form-item label="描述信息" v-if="details.info"> - <el-input - v-model="details.info" - type="textarea" - readonly - /> - </el-form-item> - <el-form-item> - <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> - </el-form-item> - </el-form> - </el-dialog> - <el-dialog v-model="dialogAddRecord" title="休息时间编辑" @close="closeAdd" @open="openAdd"> - <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> - <el-form-item label="休息日名称" prop="name"> - <el-input - v-model="addRecord.name" - > - </el-input> - </el-form-item> - <el-form-item label="休假类型" prop="type"> - <el-cascader - v-model="addRecord.type" - :options="holidayList" - :props="casProps" - @change="handleChange" - /> - </el-form-item> - <el-form-item label="选择休假时间" prop="content" v-if="addRecord.type && JSON.parse(JSON.stringify(addRecord.type))[1] == '每周'"> - <el-checkbox-group v-model="addRecord.content"> - <el-checkbox v-for="(item,i) in weekDays" :label="item" :key="i"/> - </el-checkbox-group> - </el-form-item> - <el-form-item label="选择休假时间" prop="content" v-if="addRecord.type && JSON.parse(JSON.stringify(addRecord.type))[1] == '每月'"> - <el-checkbox-group v-model="addRecord.content"> - <el-checkbox v-for="index in 31" :label="index" :key="index"/> - </el-checkbox-group> - </el-form-item> - <el-form-item label="描述信息" prop="info"> - <el-input - v-model="addRecord.info" - type="textarea" - > - </el-input> - </el-form-item> - <el-form-item> - <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> - <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> - </el-form-item> - </el-form> - </el-dialog> - <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> - <span>您确定要删除该条记录吗?</span> - <template #footer> - <span class="dialog-footer"> - <el-button @click="deleteDialog = false" size="default">取消</el-button> - <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script lang="ts"> - import { toRefs, reactive, ref, onMounted } from 'vue'; - import { storeToRefs } from 'pinia'; - import { initBackEndControlRoutes } from '/@/router/backEnd'; - import {useUserInfo} from "/@/stores/userInfo"; - import { Session } from '/@/utils/storage'; - import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue' - import { ElTable } from 'element-plus' - import { FormInstance, FormRules, ElMessage } from 'element-plus' - import { workingHoursApi } from '/@/api/basicDateManage/personShiftManage/workingHours'; - - - - // 定义接口来定义对象的类型 - interface stateType { - tableData: Array<string>, - multipleSelection: Array<any>, - deleteArr: Array<any>, - dialogDetails: boolean, - dialogAddRecord: boolean, - deleteDialog: boolean, - pageIndex: number, - pageSize: number, - searchWord: string, - totalSize: number, - addRecord: { - name: string, - type: string, - content: Array<any>, - info: string - }, - details: { - name: string, - type: string, - content: Array<any>, - info: string - } - } - - export default { - name: 'workingHours', - components:{}, - setup() { - const userInfo = useUserInfo() - const {userInfos} = storeToRefs(userInfo); - - const state = reactive<stateType>({ - pageIndex: 1, - pageSize: 10, - totalSize: 0, - chosenIndex: null, - searchWord: '', - tableData: [], - multipleSelection: [], - dialogDetails: false, - dialogAddRecord: false, - deleteDialog: false, - holidayList:[ - { - value: '每周公休假日', - label: '每周公休假日' - }, - { - value: '每年法定节假日', - label: '每年法定节假日' - }, - { - value: '自定义休息日', - label: '自定义休息日', - children: [ - { - value: '每周', - label: '每周', - }, - { - value: '每月', - label: '每月', - } - ] - } - ], - weekDays: ['周一','周二','周三','周四','周五','周六','周日'], - casProps: { - expandTrigger: 'hover', - }, - addRecord: { - name: '', - type: '', - content: [], - info: '' - }, - details: { - name: '', - type: '', - content: [], - info: '' - }, - deleteId: null, - deleteArr: [] - }) - interface User { - name: string, - type: string, - content: [], - info: string - } - - const handleChange = (value) => { - state.addRecord.content = [] - console.log(JSON.parse(JSON.stringify(value))) - } - - const multipleTableRef = ref<InstanceType<typeof ElTable>>() - const toggleSelection = (rows?: User[]) => { - if (rows) { - rows.forEach((row) => { - // TODO: improvement typing when refactor table - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-expect-error - multipleTableRef.value!.toggleRowSelection(row, undefined) - }) - } else { - multipleTableRef.value!.clearSelection() - } - } - - // 多选 - const handleSelectionChange = (val: User[]) => { - state.multipleSelection = JSON.parse(JSON.stringify(val)) - state.deleteArr = state.multipleSelection.map((item)=>{ - item = item.id - return item - }) - } - - const addRef = ref<FormInstance>() - const addRules = reactive<FormRules>({ - name: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - type: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - content: [{required: true, message: '该内容不能为空', trigger: 'blur'}] - }) - - // 页面载入时执行方法 - onMounted(() => { - // getWorkTimePeriod() - getListByPage() - }) - - // 获取工作时段列表 - const getWorkTimePeriod = async () => { - let res = await workingHoursApi().getWorkTimePeriod({name: state.searchWord}); - if (res.data.code === '200') { - state.tableData = res.data.data.map((item)=>{ - item.startHour = item.startHour==null?'00':(item.startHour.toString()[1]?item.startHour.toString():'0'+item.startHour.toString()) - item.startMin = item.startMin==null?'00':(item.startMin.toString()[1]?item.startMin.toString():'0'+item.startMin.toString()) - item.endHour = item.endHour==null?'00':(item.endHour.toString()[1]?item.endHour.toString():'0'+item.endHour.toString()) - item.endMin = item.endMin==null?'00':(item.endMin.toString()[1]?item.endMin.toString():'0'+item.endMin.toString()) - item.startTime = item.startHour + ':' + item.startMin - item.endTime = item.endHour + ':' + item.endMin - return item - }) - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } - - // 分页获取工作时段列表 - const getListByPage = async ()=>{ - const data = {pageSize: state.pageSize,pageIndex: state.pageIndex,searchParams:{name: state.searchWord}} - let res = await workingHoursApi().postPeriodPage(data); - if (res.data.code === '200') { - state.tableData = res.data.data.map((item)=>{ - item.startHour = item.startHour==null?'00':(item.startHour.toString()[1]?item.startHour.toString():'0'+item.startHour.toString()) - item.startMin = item.startMin==null?'00':(item.startMin.toString()[1]?item.startMin.toString():'0'+item.startMin.toString()) - item.endHour = item.endHour==null?'00':(item.endHour.toString()[1]?item.endHour.toString():'0'+item.endHour.toString()) - item.endMin = item.endMin==null?'00':(item.endMin.toString()[1]?item.endMin.toString():'0'+item.endMin.toString()) - item.startTime = item.startHour + ':' + item.startMin - item.endTime = item.endHour + ':' + item.endMin - return item - }) - state.totalSize = res.data.total - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } - - // 关键词查询记录 - const searchRecord = async()=>{ - if(state.searchWord==''){ - ElMessage({ - type: 'warning', - message: '请输入查询关键词' - }); - }else{ - getListByPage() - } - } - - const clearSearch = async()=>{ - state.searchWord='' - getListByPage() - } - - // 添加工作时段 - const addWorkTimePeriod = async (data:any) => { - let res = await workingHoursApi().postWorkTimePeriod(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }; - - // 修改工作时段 - const editWorkTimePeriod = async (data:any) => { - let res = await workingHoursApi().updateWorkTimePeriod(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } - - // 删除工作时段 - const deleteWorkTimePeriod = async (data:any) => { - let res = await workingHoursApi().deletWorkTimePeriod(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } - - const deleteRecord = (row) => { - state.deleteId = row.id - state.deleteDialog = true - } - - const conFirmDelete = () => { - deleteWorkTimePeriod({ id: state.deleteId }) - state.deleteDialog = false - } - - // 批量删除 - const deleteWorkTimePeriods = async () => { - if(state.deleteArr.length>0){ - console.log(state.deleteArr) - let res = await workingHoursApi().deleteBatchWorkTimePeriod({ids: state.deleteArr}); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }else{ - ElMessage({ - type: 'warning', - message: '请先选择要删除的记录' - }); - } - } - - const handleSizeChange = (val: number) => { - state.pageSize = val - getListByPage() - } - const handleCurrentChange = (val: number) => { - state.pageIndex = val - getListByPage() - } - - // 查看记录 - const viewRecord = (row) => { - state.details = row - state.dialogDetails = true - } - - // 刷新 - const reLoadData = async () =>{ - getListByPage() - } - const editRecord = (index, row) => { - state.dialogAddRecord = true - state.chosenIndex = index - state.addRecord = JSON.parse(JSON.stringify(row)) - } - - // 新增修改记录 - const confirmAddRecord = async (formEl: FormInstance | undefined) => { - if (!formEl) return - await formEl.validate(async (valid, fields) => { - if (valid) { - const data = { - name: state.addRecord.name, - info: state.addRecord.info, - startHour: Number(state.addRecord.startTime.substring(0, 2)), - startMin: Number(state.addRecord.startTime.substring(3)), - endHour: Number(state.addRecord.endTime.substring(0, 2)), - endMin: Number(state.addRecord.endTime.substring(3)) - } - if (state.chosenIndex == null) { - // if (state.addRecord.startTime >= state.addRecord.endTime) { - // state.addRecord.endTime = '次日' + state.addRecord.endTime - // } - // state.tableData.unshift(data) - await addWorkTimePeriod(data) - } else { - // if (state.addRecord.startTime >= state.addRecord.endTime) { - // state.addRecord.endTime = '次日' + state.addRecord.endTime - // } - // state.tableData[state.chosenIndex] = state.addRecord - data.id = state.addRecord.id, - await editWorkTimePeriod(data) - } - state.dialogAddRecord = false - } else { - console.log('error submit!', fields) - } - }) - - } - const closeAdd = () => { - state.addRecord = {} - state.chosenIndex = null - } - const openAdd = () => { - if (state.chosenIndex == null) { - state.addRecord.info = '' - } - } - const indexClear = () => { - state.deleteId = null - } - - // 折线图 - const renderMenu = async (value: string) => { - Session.set('projectId', value) - userInfos.value.projectId = value - await initBackEndControlRoutes(); - }; - return { - addRef, - addRules, - View, - Edit, - Delete, - Refresh, - Plus, - toggleSelection, - handleSelectionChange, - deleteWorkTimePeriods, - searchRecord, - clearSearch, - viewRecord, - deleteRecord, - conFirmDelete, - getWorkTimePeriod, - getListByPage, - reLoadData, - deleteWorkTimePeriod, - handleSizeChange, - handleCurrentChange, - confirmAddRecord, - closeAdd, - openAdd, - indexClear, - editRecord, - ...toRefs(state) - }; - } - } -</script> - -<style scoped lang="scss"> - $homeNavLengh: 8; - .home-container { - height: calc(100vh - 114px); - box-sizing: border-box; - overflow: hidden; - .homeCard{ - width: 100%; - padding: 20px; - box-sizing: border-box; - background: #fff; - border-radius: 4px; - - .main-card{ - width: 100%; - height: 100%; - .cardTop{ - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 20px; - .mainCardBtn{ - margin: 0; - } - } - .pageBtn{ - height: 60px; - display: flex; - align-items: center; - justify-content: right; - - .demo-pagination-block + .demo-pagination-block { - margin-top: 10px; - } - .demo-pagination-block .demonstration { - margin-bottom: 16px; - } - } - } - &:last-of-type{ - height: calc(100% - 100px); - } - } - .el-row{ - display: flex; - align-items: center; - margin-bottom: 20px; - &:last-child { - margin-bottom: 0; - } - .grid-content{ - align-items: center; - min-height: 36px; - } - - .topInfo { - display: flex; - align-items: center; - font-size: 16px; - font-weight: bold; - - &>div{ - white-space: nowrap; - margin-right: 20px; - } - } - } - } - .el-input{ - width: 100% !important; - } - .el-date-editor::v-deep{ - width: 100%; - } - .el-select{ - width: 100%; - } -</style> diff --git a/src/views/system/personShiftManage/holidayTimeGroup/index.vue b/src/views/system/personShiftManage/holidayTimeGroup/index.vue deleted file mode 100644 index a3531bc..0000000 --- a/src/views/system/personShiftManage/holidayTimeGroup/index.vue +++ /dev/null @@ -1,567 +0,0 @@ -<template> - <div class="home-container"> - <div style="height: 100%"> - <el-row class="homeCard"> - <el-col :span="8"> - <div class="grid-content topInfo"> - <el-input v-model="searchWord" placeholder="休息时间组名称"></el-input> - <el-button type="primary" @click="searchRecord">查询</el-button> - <el-button plain @click="clearSearch">重置</el-button> - </div> - </el-col> - </el-row> - <div class="homeCard"> - <div class="main-card"> - <el-row class="cardTop"> - <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> -<!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> - <el-button type="danger" :icon="Delete" size="default" plain @click="deleteWorkTimePeriods">删除</el-button> - </el-col> - <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()"/> - </el-row> - <el-table - ref="multipleTableRef" - :data="tableData" - style="width: 100%" - height="calc(100% - 100px)" - :header-cell-style="{background: '#fafafa'}" - @selection-change="handleSelectionChange" - > - <el-table-column type="selection" width="100" /> - <el-table-column property="name" label="休息时间组名称"/> - <el-table-column property="content" label="关联休息时间"/> - <el-table-column property="info" label="描述信息"/> - <el-table-column fixed="right" label="操作" align="center" width="250"> - <template #default="scope"> - <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> - <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> - <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.row)">删除</el-button> - </template> - </el-table-column> - </el-table> - <div class="pageBtn"> - <el-pagination - v-model:currentPage="pageIndex" - v-model:page-size="pageSize" - :page-sizes="[10, 15]" - small=false - background - layout="total, sizes, prev, pager, next, jumper" - :total="totalSize" - @size-change="handleSizeChange" - @current-change="handleCurrentChange" - /> - </div> - </div> - </div> - </div> - <el-dialog v-model="dialogDetails" title="休息时间组"> - <el-form :model="details" label-width="120px"> - <el-form-item label="时间组名称"> - <el-input - v-model="details.name" - readonly - /> - </el-form-item> - <el-form-item label="关联休息时间" v-if="details.content.length>0"> - <el-input - v-model="details.content" - readonly - /> - </el-form-item> - <el-form-item label="描述信息" v-if="details.info"> - <el-input - v-model="details.info" - type="textarea" - readonly - /> - </el-form-item> - <el-form-item> - <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> - </el-form-item> - </el-form> - </el-dialog> - <el-dialog v-model="dialogAddRecord" title="休息时间组编辑" @close="closeAdd" @open="openAdd"> - <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> - <el-form-item label="时间组名称" prop="name"> - <el-input - v-model="addRecord.name" - > - </el-input> - </el-form-item> - <el-form-item label="关联休息时间" prop="content"> - <el-select v-model="addRecord.content"> - <el-option label="周末休息" value="周末休息" /> - <el-option label="节假日休息" value="节假日休息" /> - </el-select> - </el-form-item> - <el-form-item label="描述信息" prop="info"> - <el-input - v-model="addRecord.info" - type="textarea" - > - </el-input> - </el-form-item> - <el-form-item> - <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> - <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> - </el-form-item> - </el-form> - </el-dialog> - <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> - <span>您确定要删除该条记录吗?</span> - <template #footer> - <span class="dialog-footer"> - <el-button @click="deleteDialog = false" size="default">取消</el-button> - <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script lang="ts"> - import { toRefs, reactive, ref, onMounted } from 'vue'; - import { storeToRefs } from 'pinia'; - import { initBackEndControlRoutes } from '/@/router/backEnd'; - import {useUserInfo} from "/@/stores/userInfo"; - import { Session } from '/@/utils/storage'; - import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue' - import { ElTable } from 'element-plus' - import { FormInstance, FormRules, ElMessage } from 'element-plus' - import { workingHoursApi } from '/@/api/basicDateManage/personShiftManage/workingHours'; - - - - // 定义接口来定义对象的类型 - interface stateType { - tableData: Array<string>, - multipleSelection: Array<any>, - deleteArr: Array<any>, - dialogDetails: boolean, - dialogAddRecord: boolean, - deleteDialog: boolean, - pageIndex: number, - pageSize: number, - searchWord: string, - totalSize: number, - addRecord: { - name: string, - content: Array<any>, - info: string - }, - details: { - name: string, - content: Array<any>, - info: string - } - } - - export default { - name: 'workingHours', - components:{}, - setup() { - const userInfo = useUserInfo() - const {userInfos} = storeToRefs(userInfo); - - const state = reactive<stateType>({ - pageIndex: 1, - pageSize: 10, - totalSize: 0, - chosenIndex: null, - searchWord: '', - tableData: [], - multipleSelection: [], - dialogDetails: false, - dialogAddRecord: false, - deleteDialog: false, - addRecord: { - name: '', - content: [], - info: '' - }, - details: { - name: '', - content: [], - info: '' - }, - deleteId: null, - deleteArr: [] - }) - interface User { - name: string, - content: [], - info: string - } - const multipleTableRef = ref<InstanceType<typeof ElTable>>() - const toggleSelection = (rows?: User[]) => { - if (rows) { - rows.forEach((row) => { - // TODO: improvement typing when refactor table - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-expect-error - multipleTableRef.value!.toggleRowSelection(row, undefined) - }) - } else { - multipleTableRef.value!.clearSelection() - } - } - - // 多选 - const handleSelectionChange = (val: User[]) => { - state.multipleSelection = JSON.parse(JSON.stringify(val)) - state.deleteArr = state.multipleSelection.map((item)=>{ - item = item.id - return item - }) - } - - const addRef = ref<FormInstance>() - const addRules = reactive<FormRules>({ - name: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - content: [{required: true, message: '该内容不能为空', trigger: 'blur'}] - }) - - // 页面载入时执行方法 - onMounted(() => { - // getWorkTimePeriod() - getListByPage() - }) - - // 获取工作时段列表 - const getWorkTimePeriod = async () => { - let res = await workingHoursApi().getWorkTimePeriod({name: state.searchWord}); - if (res.data.code === '200') { - state.tableData = res.data.data.map((item)=>{ - item.startHour = item.startHour==null?'00':(item.startHour.toString()[1]?item.startHour.toString():'0'+item.startHour.toString()) - item.startMin = item.startMin==null?'00':(item.startMin.toString()[1]?item.startMin.toString():'0'+item.startMin.toString()) - item.endHour = item.endHour==null?'00':(item.endHour.toString()[1]?item.endHour.toString():'0'+item.endHour.toString()) - item.endMin = item.endMin==null?'00':(item.endMin.toString()[1]?item.endMin.toString():'0'+item.endMin.toString()) - item.startTime = item.startHour + ':' + item.startMin - item.endTime = item.endHour + ':' + item.endMin - return item - }) - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } - - // 分页获取工作时段列表 - const getListByPage = async ()=>{ - const data = {pageSize: state.pageSize,pageIndex: state.pageIndex,searchParams:{name: state.searchWord}} - let res = await workingHoursApi().postPeriodPage(data); - if (res.data.code === '200') { - state.tableData = res.data.data.map((item)=>{ - item.startHour = item.startHour==null?'00':(item.startHour.toString()[1]?item.startHour.toString():'0'+item.startHour.toString()) - item.startMin = item.startMin==null?'00':(item.startMin.toString()[1]?item.startMin.toString():'0'+item.startMin.toString()) - item.endHour = item.endHour==null?'00':(item.endHour.toString()[1]?item.endHour.toString():'0'+item.endHour.toString()) - item.endMin = item.endMin==null?'00':(item.endMin.toString()[1]?item.endMin.toString():'0'+item.endMin.toString()) - item.startTime = item.startHour + ':' + item.startMin - item.endTime = item.endHour + ':' + item.endMin - return item - }) - state.totalSize = res.data.total - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } - - // 关键词查询记录 - const searchRecord = async()=>{ - if(state.searchWord==''){ - ElMessage({ - type: 'warning', - message: '请输入查询关键词' - }); - }else{ - getListByPage() - } - } - - const clearSearch = async()=>{ - state.searchWord='' - getListByPage() - } - - // 添加工作时段 - const addWorkTimePeriod = async (data:any) => { - let res = await workingHoursApi().postWorkTimePeriod(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }; - - // 修改工作时段 - const editWorkTimePeriod = async (data:any) => { - let res = await workingHoursApi().updateWorkTimePeriod(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } - - // 删除工作时段 - const deleteWorkTimePeriod = async (data:any) => { - let res = await workingHoursApi().deletWorkTimePeriod(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } - - const deleteRecord = (row) => { - state.deleteId = row.id - state.deleteDialog = true - } - - const conFirmDelete = () => { - deleteWorkTimePeriod({ id: state.deleteId }) - state.deleteDialog = false - } - - // 批量删除 - const deleteWorkTimePeriods = async () => { - if(state.deleteArr.length>0){ - console.log(state.deleteArr) - let res = await workingHoursApi().deleteBatchWorkTimePeriod({ids: state.deleteArr}); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }else{ - ElMessage({ - type: 'warning', - message: '请先选择要删除的记录' - }); - } - } - - const handleSizeChange = (val: number) => { - state.pageSize = val - getListByPage() - } - const handleCurrentChange = (val: number) => { - state.pageIndex = val - getListByPage() - } - - // 查看记录 - const viewRecord = (row) => { - state.details = row - state.dialogDetails = true - } - - // 刷新 - const reLoadData = async () =>{ - getListByPage() - } - const editRecord = (index, row) => { - state.dialogAddRecord = true - state.chosenIndex = index - state.addRecord = JSON.parse(JSON.stringify(row)) - } - - // 新增修改记录 - const confirmAddRecord = async (formEl: FormInstance | undefined) => { - if (!formEl) return - await formEl.validate(async (valid, fields) => { - if (valid) { - const data = { - name: state.addRecord.name, - info: state.addRecord.info, - startHour: Number(state.addRecord.startTime.substring(0, 2)), - startMin: Number(state.addRecord.startTime.substring(3)), - endHour: Number(state.addRecord.endTime.substring(0, 2)), - endMin: Number(state.addRecord.endTime.substring(3)) - } - if (state.chosenIndex == null) { - // if (state.addRecord.startTime >= state.addRecord.endTime) { - // state.addRecord.endTime = '次日' + state.addRecord.endTime - // } - // state.tableData.unshift(data) - await addWorkTimePeriod(data) - } else { - // if (state.addRecord.startTime >= state.addRecord.endTime) { - // state.addRecord.endTime = '次日' + state.addRecord.endTime - // } - // state.tableData[state.chosenIndex] = state.addRecord - data.id = state.addRecord.id, - await editWorkTimePeriod(data) - } - state.dialogAddRecord = false - } else { - console.log('error submit!', fields) - } - }) - - } - const closeAdd = () => { - state.addRecord = {} - state.chosenIndex = null - } - const openAdd = () => { - if (state.chosenIndex == null) { - state.addRecord.info = '' - } - } - const indexClear = () => { - state.deleteId = null - } - - // 折线图 - const renderMenu = async (value: string) => { - Session.set('projectId', value) - userInfos.value.projectId = value - await initBackEndControlRoutes(); - }; - return { - addRef, - addRules, - View, - Edit, - Delete, - Refresh, - Plus, - toggleSelection, - handleSelectionChange, - deleteWorkTimePeriods, - searchRecord, - clearSearch, - viewRecord, - deleteRecord, - conFirmDelete, - getWorkTimePeriod, - getListByPage, - reLoadData, - deleteWorkTimePeriod, - handleSizeChange, - handleCurrentChange, - confirmAddRecord, - closeAdd, - openAdd, - indexClear, - editRecord, - ...toRefs(state) - }; - } - } -</script> - -<style scoped lang="scss"> - $homeNavLengh: 8; - .home-container { - height: calc(100vh - 114px); - box-sizing: border-box; - overflow: hidden; - .homeCard{ - width: 100%; - padding: 20px; - box-sizing: border-box; - background: #fff; - border-radius: 4px; - - .main-card{ - width: 100%; - height: 100%; - .cardTop{ - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 20px; - .mainCardBtn{ - margin: 0; - } - } - .pageBtn{ - height: 60px; - display: flex; - align-items: center; - justify-content: right; - - .demo-pagination-block + .demo-pagination-block { - margin-top: 10px; - } - .demo-pagination-block .demonstration { - margin-bottom: 16px; - } - } - } - &:last-of-type{ - height: calc(100% - 100px); - } - } - .el-row{ - display: flex; - align-items: center; - margin-bottom: 20px; - &:last-child { - margin-bottom: 0; - } - .grid-content{ - align-items: center; - min-height: 36px; - } - - .topInfo { - display: flex; - align-items: center; - font-size: 16px; - font-weight: bold; - - &>div{ - white-space: nowrap; - margin-right: 20px; - } - } - } - } - .el-input{ - width: 100% !important; - } - .el-date-editor::v-deep{ - width: 100%; - } - .el-select{ - width: 100%; - } -</style> diff --git a/src/views/system/personShiftManage/durationManage/index.vue b/src/views/system/personShiftManage/personTimeManage/durationManage/index.vue similarity index 100% rename from src/views/system/personShiftManage/durationManage/index.vue rename to src/views/system/personShiftManage/personTimeManage/durationManage/index.vue diff --git a/src/views/system/personShiftManage/workingHoursSet/index.vue b/src/views/system/personShiftManage/personTimeManage/holidayTime/index.vue similarity index 66% copy from src/views/system/personShiftManage/workingHoursSet/index.vue copy to src/views/system/personShiftManage/personTimeManage/holidayTime/index.vue index 7eeca06..edb8aa9 100644 --- a/src/views/system/personShiftManage/workingHoursSet/index.vue +++ b/src/views/system/personShiftManage/personTimeManage/holidayTime/index.vue @@ -4,7 +4,7 @@ <el-row class="homeCard"> <el-col :span="8"> <div class="grid-content topInfo"> - <el-input v-model="searchWord" placeholder="休息时间组名称"></el-input> + <el-input v-model="searchWord" placeholder="休息日名称"></el-input> <el-button type="primary" @click="searchRecord">查询</el-button> <el-button plain @click="clearSearch">重置</el-button> </div> @@ -29,8 +29,10 @@ @selection-change="handleSelectionChange" > <el-table-column type="selection" width="100" /> - <el-table-column property="name" label="工作时间组名称"/> - <el-table-column property="list" :formatter="toNames" label="关联工作时段"/> + <el-table-column property="name" label="休息日名称"/> + <el-table-column property="typeName" label="休息日类型"/> + <el-table-column property="ruleName" label="休息日规则"/> + <el-table-column property="ruleNumber" label="休息日"/> <el-table-column property="info" label="描述信息"/> <el-table-column fixed="right" label="操作" align="center" width="250"> <template #default="scope"> @@ -56,17 +58,29 @@ </div> </div> </div> - <el-dialog v-model="dialogDetails" title="工作时间组"> + <el-dialog v-model="dialogDetails" title="休息时间"> <el-form :model="details" label-width="120px"> - <el-form-item label="时间组名称"> + <el-form-item label="名称"> <el-input v-model="details.name" readonly /> </el-form-item> - <el-form-item label="关联工作时段" v-if="details.list.length>0"> + <el-form-item label="休假类型"> <el-input - v-model="details.list" + v-model="details.typeName" + readonly + /> + </el-form-item> + <el-form-item label="休假规则" v-if="details.type == 2"> + <el-input + v-model="details.ruleName" + readonly + /> + </el-form-item> + <el-form-item label="休假时间" v-if="details.type == 2"> + <el-input + v-model="details.ruleNumber" readonly /> </el-form-item> @@ -82,18 +96,33 @@ </el-form-item> </el-form> </el-dialog> - <el-dialog v-model="dialogAddRecord" title="工作时间组编辑" @close="closeAdd" @open="openAdd"> + <el-dialog v-model="dialogAddRecord" title="休息时间编辑" @close="closeAdd"> <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> - <el-form-item label="时间组名称" prop="name"> + <el-form-item label="休息日名称" prop="name"> <el-input v-model="addRecord.name" > </el-input> </el-form-item> - <el-form-item label="关联工作时段" prop="list"> - <el-select v-model="addRecord.list" multiple> - <el-option v-for="(item,index) in workTimeList" :key="index" :label="item.name" :value="item.id" /> + <el-form-item label="休假类型" prop="type"> + <el-select v-model="addRecord.type" placeholder="请选择休假类型" style="width: 100%" @change="typeChange"> + <el-option v-for="(item,index) in typeList" :key="index" :label="item.name" :value="item.value"/> </el-select> + </el-form-item> + <el-form-item label="休假规则" prop="rule" v-if="addRecord.type == '自定义休息日' || addRecord.type == 2"> + <el-select v-model="addRecord.rule" placeholder="请选择休假规则" style="width: 100%" @change="ruleChange"> + <el-option v-for="(item,index) in ruleList" :key="index" :label="item.name" :value="item.value"/> + </el-select> + </el-form-item> + <el-form-item label="选择休假时间" prop="ruleNumber" v-if="addRecord.rule == '每周'|| addRecord.rule == 1"> + <el-checkbox-group v-model="addRecord.ruleNumber"> + <el-checkbox v-for="(item,i) in weekDays" :label="item.value" :key="i">{{item.name}}</el-checkbox> + </el-checkbox-group> + </el-form-item> + <el-form-item label="选择休假时间" prop="ruleNumber" v-if="addRecord.rule == '每月'|| addRecord.rule == 2"> + <el-checkbox-group v-model="addRecord.ruleNumber"> + <el-checkbox v-for="index in 31" :label="index" :key="index"/> + </el-checkbox-group> </el-form-item> <el-form-item label="描述信息" prop="info"> <el-input @@ -138,35 +167,42 @@ import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue' import { ElTable } from 'element-plus' import { FormInstance, FormRules, ElMessage } from 'element-plus' - import { workingHoursSetApi } from '/@/api/basicDateManage/personShiftManage/workingHoursSet'; - import { workingHoursApi } from '/@/api/basicDateManage/personShiftManage/workingHours'; + import { holidayTimeApi } from '/@/api/basicDateManage/personShiftManage/holidayTime'; + import {workingHoursSetApi} from "/@/api/basicDateManage/personShiftManage/workingHoursSet"; + // 定义接口来定义对象的类型 interface stateType { tableData: Array<string>, - pageRecord: Array<string>, - workTimeList: Array<string>, multipleSelection: Array<any>, deleteArr: Array<any>, + weekDays: Array<any>, + typeList: Array<any>, + ruleList: Array<any>, dialogDetails: boolean, dialogAddRecord: boolean, deleteDialog: boolean, - deleteSetDialog: boolean; + deleteSetDialog: boolean, pageIndex: number, pageSize: number, - chosenIndex: null | number, - deleteId: null | number, searchWord: string, + chosenIndex: null| number, + casProps: object, + deleteId: null| number, totalSize: number, addRecord: { name: string, - list: Array<any>, + type: number | string, + rule: number | string, + ruleNumber: Array<number> | string, info: string }, details: { name: string, - list: Array<any>, + type: string, + rule: string, + ruleNumber: string, info: string } } @@ -185,21 +221,80 @@ chosenIndex: null, searchWord: '', tableData: [], - pageRecord: [], - workTimeList: [], + typeList: [ + { + name: '每周公休假日', + value: 0 + }, + { + name: '国家法定节假日', + value: 1 + }, + { + name: '自定义休息日', + value: 2 + } + ], + ruleList: [ + { + name: '每周', + value: 1 + }, + { + name: '每月', + value: 2 + } + ], multipleSelection: [], dialogDetails: false, dialogAddRecord: false, deleteDialog: false, deleteSetDialog: false, + weekDays: [ + { + name: '周一', + value: 1 + }, + { + name: '周二', + value: 2 + }, + { + name: '周三', + value: 3 + }, + { + name: '周四', + value: 4 + }, + { + name: '周五', + value: 5 + }, + { + name: '周六', + value: 6 + }, + { + name: '周日', + value: 7 + } + ], + casProps: { + expandTrigger: 'hover', + }, addRecord: { name: '', - list: [], + type: '', + rule: '', + ruleNumber: [], info: '' }, details: { name: '', - list: [], + type: '', + rule: '', + ruleNumber: '', info: '' }, deleteId: null, @@ -207,9 +302,28 @@ }) interface User { name: string, - list: [], + type: number | string, + rule: number | string, + ruleNumber: Array<number> | string, info: string } + + // 排序 + const compare = (x,y)=> { + if (x < y) { + return -1; + } else if (x > y) { + return 1; + } else { + return 0; + } + } + + const handleChange = (value) => { + state.addRecord.content = [] + console.log(JSON.parse(JSON.stringify(value))) + } + const multipleTableRef = ref<InstanceType<typeof ElTable>>() const toggleSelection = (rows?: User[]) => { if (rows) { @@ -224,6 +338,16 @@ } } + // 休息类型改变时操作 + const typeChange =()=>{ + state.addRecord.rule = '' + state.addRecord.ruleNumber = [] + } + // 休息规则改变时操作 + const ruleChange =()=>{ + state.addRecord.ruleNumber = [] + } + // 多选 const handleSelectionChange = (val: User[]) => { state.multipleSelection = JSON.parse(JSON.stringify(val)) @@ -236,61 +360,34 @@ const addRef = ref<FormInstance>() const addRules = reactive<FormRules>({ name: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - list: [{required: true, message: '该内容不能为空', trigger: 'blur'}] + type: [{required: true, message: '该内容不能为空', trigger: 'blur'}], + rule: [{required: true, message: '该内容不能为空', trigger: 'blur'}], + ruleNumber: [{required: true, message: '该内容不能为空', trigger: 'blur'}] }) // 页面载入时执行方法 onMounted(() => { + // getWorkTimePeriod() getListByPage() - getWorkTimePeriod() }) - // 分页获取工作时间组列表 + // 休假类型格式化 + // const typeName =(row, column, cellValue, index) =>{ + // return row.type == 0? '每周公休假日':(row.type == 1? '国家法定节假日': '自定义休息日') + // } + + // 分页获取工作时段列表 const getListByPage = async ()=>{ const data = {pageSize: state.pageSize,pageIndex: state.pageIndex,searchParams:{name: state.searchWord}} - let res = await workingHoursSetApi().postWorkTimeGroupPage(data); + let res = await holidayTimeApi().getAllBreakTimeRuleByPage(data); if (res.data.code === '200') { - state.pageRecord = res.data.data state.tableData = res.data.data.map((item)=>{ - if(item.list == null){ - item.list = [] - }else{ - item.list= Array.from(item.list,({workTimePeriodId})=>workTimePeriodId) - } + item.typeName = item.type===0?'每周公休假日':(item.type===1?'国家法定节假日':(item.type===2?'自定义休息日':'')) + item.ruleName = item.rule===1?'每周':(item.rule===2?'每月':'') return item }) + console.log(state.tableData,'列表获取的tableData') state.totalSize = res.data.total - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } - - // 表格数据格式化 - const toNames =(row, column, cellValue, index) => { - if(row.list==[]){ - return [] - }else{ - const nameList = [] - for(let i=0;i<row.list.length;i++){ - for(let t=0;t<state.workTimeList.length;t++){ - if(row.list[i]==state.workTimeList[t].id){ - nameList.push(state.workTimeList[t].name) - } - } - } - return nameList.join() - } - } - - // 获取工作时段列表 - const getWorkTimePeriod = async () => { - let res = await workingHoursApi().getWorkTimePeriod(); - if (res.data.code === '200') { - state.workTimeList = res.data.data - console.log(state.workTimeList,'list') } else { ElMessage({ type: 'warning', @@ -316,9 +413,9 @@ getListByPage() } - // 添加工作时段方法 + // 添加休息时间 const addRecord = async (data:any) => { - let res = await workingHoursSetApi().addWorkTimeGroup(data); + let res = await holidayTimeApi().addBreakTime(data); if (res.data.code === '200') { ElMessage({ type: 'success', @@ -333,9 +430,21 @@ } }; - // 修改工作时段方法 + // 修改休息时间 + const editRecordBtn = (index, row) => { + state.dialogAddRecord = true + state.chosenIndex = index + console.log(row,'编辑时的row') + console.log(state.tableData,'编辑时的tableData') + state.addRecord = JSON.parse(JSON.stringify(row)) + state.addRecord.ruleNumber = row.ruleNumber.split(',').map((i)=>{ + return Number(i) + }) + console.log(state.addRecord) + } + const editRecord = async (data:any) => { - let res = await workingHoursSetApi().updateWorkTimeGroup(data); + let res = await holidayTimeApi().updateBreakTime(data); if (res.data.code === '200') { ElMessage({ type: 'success', @@ -358,13 +467,23 @@ const data = { name: state.addRecord.name, info: state.addRecord.info, - workTimePeriodIds: state.addRecord.list + type: Number(state.addRecord.type), + rule: Number(state.addRecord.rule), + ruleNumber: state.addRecord.ruleNumber.sort(compare).join(',') } if (state.chosenIndex == null) { - await addRecord(data) + if(data.type == 2 && data.ruleNumber==''){ + ElMessage({ + type: 'warning', + message: '请至少选择一个休息时间' + }); + return + } else{ + await addRecord(data) + } } else { - data.id = JSON.stringify(state.addRecord.id), - console.log(data,'修改参数') + data.id = state.addRecord.id, + console.log(data,'提交时的参数data') await editRecord(data) } state.dialogAddRecord = false @@ -374,10 +493,20 @@ }) } + const closeAdd = () => { + state.addRecord = { + name: '', + type: '', + rule: '', + ruleNumber: [], + info: '' + } + state.chosenIndex = null + } - // 删除工作时间组方法 + // 删除工作时段 const deleteRecord = async (data:any) => { - let res = await workingHoursSetApi().deleteWorkTimeGroup(data); + let res = await holidayTimeApi().deleteBreakTime(data); if (res.data.code === '200') { ElMessage({ type: 'success', @@ -415,7 +544,7 @@ }; const conFirmDeleteBatch = async () => { - let res = await workingHoursSetApi().deletBatchWorkTimeGroup({ids: state.deleteArr}); + let res = await holidayTimeApi().deleteBatch({ids: state.deleteArr}); if (res.data.code === '200') { state.deleteSetDialog = false ElMessage({ @@ -444,18 +573,6 @@ // 查看记录 const viewRecord = (row) => { state.details = JSON.parse(JSON.stringify(row)) - if(row.list==[]){ - state.details.list = [] - }else{ - state.details.list = [] - for(let i=0;i<row.list.length;i++){ - for(let t=0;t<state.workTimeList.length;t++){ - if(row.list[i]==state.workTimeList[t].id){ - state.details.list.push(state.workTimeList[t].name) - } - } - } - } state.dialogDetails = true } @@ -463,21 +580,7 @@ const reLoadData = async () =>{ getListByPage() } - // 点击修改 - const editRecordBtn = (index, row) => { - state.dialogAddRecord = true - state.chosenIndex = index - state.addRecord = JSON.parse(JSON.stringify(row)) - } - const closeAdd = () => { - state.addRecord = {} - state.chosenIndex = null - } - const openAdd = () => { - if (state.chosenIndex == null) { - state.addRecord.info = '' - } - } + const indexClear = () => { state.deleteId = null } @@ -496,25 +599,25 @@ Delete, Refresh, Plus, - toNames, + typeChange, + ruleChange, + compare, toggleSelection, handleSelectionChange, + deleteBatchBtn, + conFirmDeleteBatch, searchRecord, clearSearch, viewRecord, deleteRecordBtn, conFirmDelete, getListByPage, - getWorkTimePeriod, reLoadData, deleteRecord, - deleteBatchBtn, - conFirmDeleteBatch, handleSizeChange, handleCurrentChange, confirmAddRecord, closeAdd, - openAdd, indexClear, editRecordBtn, ...toRefs(state) diff --git a/src/views/system/personShiftManage/workingHoursSet/index.vue b/src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue similarity index 87% copy from src/views/system/personShiftManage/workingHoursSet/index.vue copy to src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue index 7eeca06..b71469e 100644 --- a/src/views/system/personShiftManage/workingHoursSet/index.vue +++ b/src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue @@ -29,8 +29,8 @@ @selection-change="handleSelectionChange" > <el-table-column type="selection" width="100" /> - <el-table-column property="name" label="工作时间组名称"/> - <el-table-column property="list" :formatter="toNames" label="关联工作时段"/> + <el-table-column property="name" label="休息时间组名称"/> + <el-table-column property="list" :formatter="toNames" label="关联休息时间"/> <el-table-column property="info" label="描述信息"/> <el-table-column fixed="right" label="操作" align="center" width="250"> <template #default="scope"> @@ -56,7 +56,7 @@ </div> </div> </div> - <el-dialog v-model="dialogDetails" title="工作时间组"> + <el-dialog v-model="dialogDetails" title="休息时间组"> <el-form :model="details" label-width="120px"> <el-form-item label="时间组名称"> <el-input @@ -64,7 +64,7 @@ readonly /> </el-form-item> - <el-form-item label="关联工作时段" v-if="details.list.length>0"> + <el-form-item label="关联休息时间" v-if="details.list.length>0"> <el-input v-model="details.list" readonly @@ -82,7 +82,7 @@ </el-form-item> </el-form> </el-dialog> - <el-dialog v-model="dialogAddRecord" title="工作时间组编辑" @close="closeAdd" @open="openAdd"> + <el-dialog v-model="dialogAddRecord" title="休息时间组编辑" @close="closeAdd" @open="openAdd"> <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> <el-form-item label="时间组名称" prop="name"> <el-input @@ -90,9 +90,9 @@ > </el-input> </el-form-item> - <el-form-item label="关联工作时段" prop="list"> + <el-form-item label="关联休息时间" prop="list"> <el-select v-model="addRecord.list" multiple> - <el-option v-for="(item,index) in workTimeList" :key="index" :label="item.name" :value="item.id" /> + <el-option v-for="(item,index) in holidayTimeList" :key="index" :label="item.name" :value="item.id" /> </el-select> </el-form-item> <el-form-item label="描述信息" prop="info"> @@ -138,15 +138,13 @@ import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue' import { ElTable } from 'element-plus' import { FormInstance, FormRules, ElMessage } from 'element-plus' - import { workingHoursSetApi } from '/@/api/basicDateManage/personShiftManage/workingHoursSet'; - import { workingHoursApi } from '/@/api/basicDateManage/personShiftManage/workingHours'; + import { holidayGroupApi } from '/@/api/basicDateManage/personShiftManage/holidayTimeGroup'; // 定义接口来定义对象的类型 interface stateType { tableData: Array<string>, - pageRecord: Array<string>, - workTimeList: Array<string>, + holidayTimeList: Array<string>, multipleSelection: Array<any>, deleteArr: Array<any>, dialogDetails: boolean, @@ -185,8 +183,7 @@ chosenIndex: null, searchWord: '', tableData: [], - pageRecord: [], - workTimeList: [], + holidayTimeList: [], multipleSelection: [], dialogDetails: false, dialogAddRecord: false, @@ -207,7 +204,7 @@ }) interface User { name: string, - list: [], + list: Array<any>, info: string } const multipleTableRef = ref<InstanceType<typeof ElTable>>() @@ -242,20 +239,19 @@ // 页面载入时执行方法 onMounted(() => { getListByPage() - getWorkTimePeriod() + getAllBreak() }) - // 分页获取工作时间组列表 + // 分页获取休息时间组列表 const getListByPage = async ()=>{ const data = {pageSize: state.pageSize,pageIndex: state.pageIndex,searchParams:{name: state.searchWord}} - let res = await workingHoursSetApi().postWorkTimeGroupPage(data); + let res = await holidayGroupApi().getRecordPage(data); if (res.data.code === '200') { - state.pageRecord = res.data.data state.tableData = res.data.data.map((item)=>{ if(item.list == null){ item.list = [] }else{ - item.list= Array.from(item.list,({workTimePeriodId})=>workTimePeriodId) + item.list= Array.from(item.list,({breakTimeRuleId})=>breakTimeRuleId) } return item }) @@ -275,9 +271,9 @@ }else{ const nameList = [] for(let i=0;i<row.list.length;i++){ - for(let t=0;t<state.workTimeList.length;t++){ - if(row.list[i]==state.workTimeList[t].id){ - nameList.push(state.workTimeList[t].name) + for(let t=0;t<state.holidayTimeList.length;t++){ + if(row.list[i]==state.holidayTimeList[t].id){ + nameList.push(state.holidayTimeList[t].name) } } } @@ -286,11 +282,10 @@ } // 获取工作时段列表 - const getWorkTimePeriod = async () => { - let res = await workingHoursApi().getWorkTimePeriod(); + const getAllBreak = async () => { + let res = await holidayGroupApi().getAllBreak(); if (res.data.code === '200') { - state.workTimeList = res.data.data - console.log(state.workTimeList,'list') + state.holidayTimeList = res.data.data } else { ElMessage({ type: 'warning', @@ -318,7 +313,7 @@ // 添加工作时段方法 const addRecord = async (data:any) => { - let res = await workingHoursSetApi().addWorkTimeGroup(data); + let res = await holidayGroupApi().addRecord(data); if (res.data.code === '200') { ElMessage({ type: 'success', @@ -335,7 +330,7 @@ // 修改工作时段方法 const editRecord = async (data:any) => { - let res = await workingHoursSetApi().updateWorkTimeGroup(data); + let res = await holidayGroupApi().updateRecord(data); if (res.data.code === '200') { ElMessage({ type: 'success', @@ -358,13 +353,12 @@ const data = { name: state.addRecord.name, info: state.addRecord.info, - workTimePeriodIds: state.addRecord.list + breakTimeRuleIds: state.addRecord.list } if (state.chosenIndex == null) { await addRecord(data) } else { data.id = JSON.stringify(state.addRecord.id), - console.log(data,'修改参数') await editRecord(data) } state.dialogAddRecord = false @@ -377,7 +371,7 @@ // 删除工作时间组方法 const deleteRecord = async (data:any) => { - let res = await workingHoursSetApi().deleteWorkTimeGroup(data); + let res = await holidayGroupApi().deleteRecord(data); if (res.data.code === '200') { ElMessage({ type: 'success', @@ -415,7 +409,7 @@ }; const conFirmDeleteBatch = async () => { - let res = await workingHoursSetApi().deletBatchWorkTimeGroup({ids: state.deleteArr}); + let res = await holidayGroupApi().deletBatchRecord({ids: state.deleteArr}); if (res.data.code === '200') { state.deleteSetDialog = false ElMessage({ @@ -449,9 +443,9 @@ }else{ state.details.list = [] for(let i=0;i<row.list.length;i++){ - for(let t=0;t<state.workTimeList.length;t++){ - if(row.list[i]==state.workTimeList[t].id){ - state.details.list.push(state.workTimeList[t].name) + for(let t=0;t<state.holidayTimeList.length;t++){ + if(row.list[i]==state.holidayTimeList[t].id){ + state.details.list.push(state.holidayTimeList[t].name) } } } @@ -505,7 +499,7 @@ deleteRecordBtn, conFirmDelete, getListByPage, - getWorkTimePeriod, + getAllBreak, reLoadData, deleteRecord, deleteBatchBtn, diff --git a/src/views/system/personShiftManage/workingHoursSet/index.vue b/src/views/system/personShiftManage/personTimeManage/timeStrategy/index.vue similarity index 77% copy from src/views/system/personShiftManage/workingHoursSet/index.vue copy to src/views/system/personShiftManage/personTimeManage/timeStrategy/index.vue index 7eeca06..45800d3 100644 --- a/src/views/system/personShiftManage/workingHoursSet/index.vue +++ b/src/views/system/personShiftManage/personTimeManage/timeStrategy/index.vue @@ -4,7 +4,7 @@ <el-row class="homeCard"> <el-col :span="8"> <div class="grid-content topInfo"> - <el-input v-model="searchWord" placeholder="休息时间组名称"></el-input> + <el-input v-model="searchWord" placeholder="时间策略名称"></el-input> <el-button type="primary" @click="searchRecord">查询</el-button> <el-button plain @click="clearSearch">重置</el-button> </div> @@ -29,8 +29,9 @@ @selection-change="handleSelectionChange" > <el-table-column type="selection" width="100" /> - <el-table-column property="name" label="工作时间组名称"/> - <el-table-column property="list" :formatter="toNames" label="关联工作时段"/> + <el-table-column property="name" label="时间策略名称"/> + <el-table-column property="workList" label="关联工作时间组"/> + <el-table-column property="restList" label="关联休息时间组"/> <el-table-column property="info" label="描述信息"/> <el-table-column fixed="right" label="操作" align="center" width="250"> <template #default="scope"> @@ -56,17 +57,23 @@ </div> </div> </div> - <el-dialog v-model="dialogDetails" title="工作时间组"> + <el-dialog v-model="dialogDetails" title="时间策略"> <el-form :model="details" label-width="120px"> - <el-form-item label="时间组名称"> + <el-form-item label="策略名称"> <el-input v-model="details.name" readonly /> </el-form-item> - <el-form-item label="关联工作时段" v-if="details.list.length>0"> + <el-form-item label="关联工作时间组"> <el-input - v-model="details.list" + v-model="details.workList" + readonly + /> + </el-form-item> + <el-form-item label="关联休息时间组"> + <el-input + v-model="details.restList" readonly /> </el-form-item> @@ -82,17 +89,22 @@ </el-form-item> </el-form> </el-dialog> - <el-dialog v-model="dialogAddRecord" title="工作时间组编辑" @close="closeAdd" @open="openAdd"> + <el-dialog v-model="dialogAddRecord" title="时间策略编辑" @close="closeAdd" @open="openAdd"> <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> - <el-form-item label="时间组名称" prop="name"> + <el-form-item label="策略名称" prop="name"> <el-input v-model="addRecord.name" > </el-input> </el-form-item> - <el-form-item label="关联工作时段" prop="list"> - <el-select v-model="addRecord.list" multiple> + <el-form-item label="关联工作时间组" prop="workList"> + <el-select v-model="addRecord.workList"> <el-option v-for="(item,index) in workTimeList" :key="index" :label="item.name" :value="item.id" /> + </el-select> + </el-form-item> + <el-form-item label="关联休息时间组" prop="restList"> + <el-select v-model="addRecord.restList"> + <el-option v-for="(item,index) in restTimeList" :key="index" :label="item.name" :value="item.id" /> </el-select> </el-form-item> <el-form-item label="描述信息" prop="info"> @@ -138,15 +150,14 @@ import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue' import { ElTable } from 'element-plus' import { FormInstance, FormRules, ElMessage } from 'element-plus' - import { workingHoursSetApi } from '/@/api/basicDateManage/personShiftManage/workingHoursSet'; - import { workingHoursApi } from '/@/api/basicDateManage/personShiftManage/workingHours'; + import { timeStrategyApi } from '/@/api/basicDateManage/personShiftManage/timeStrategy'; // 定义接口来定义对象的类型 interface stateType { tableData: Array<string>, - pageRecord: Array<string>, workTimeList: Array<string>, + restTimeList: Array<string>, multipleSelection: Array<any>, deleteArr: Array<any>, dialogDetails: boolean, @@ -161,12 +172,14 @@ totalSize: number, addRecord: { name: string, - list: Array<any>, + workList: string, + restList: string, info: string }, details: { name: string, - list: Array<any>, + workList: string, + restList: string, info: string } } @@ -185,8 +198,8 @@ chosenIndex: null, searchWord: '', tableData: [], - pageRecord: [], workTimeList: [], + restTimeList: [], multipleSelection: [], dialogDetails: false, dialogAddRecord: false, @@ -194,12 +207,14 @@ deleteSetDialog: false, addRecord: { name: '', - list: [], + workList: '', + restList: '', info: '' }, details: { name: '', - list: [], + workList: '', + restList: '', info: '' }, deleteId: null, @@ -207,7 +222,8 @@ }) interface User { name: string, - list: [], + workList: string, + restList: string, info: string } const multipleTableRef = ref<InstanceType<typeof ElTable>>() @@ -236,29 +252,46 @@ const addRef = ref<FormInstance>() const addRules = reactive<FormRules>({ name: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - list: [{required: true, message: '该内容不能为空', trigger: 'blur'}] + workList: [{required: true, message: '该内容不能为空', trigger: 'blur'}], + restList: [{required: true, message: '该内容不能为空', trigger: 'blur'}] }) // 页面载入时执行方法 onMounted(() => { getListByPage() - getWorkTimePeriod() + getWorkTimeList() + getRestTimeList() }) - // 分页获取工作时间组列表 + // 分页获取休息时间组列表 const getListByPage = async ()=>{ const data = {pageSize: state.pageSize,pageIndex: state.pageIndex,searchParams:{name: state.searchWord}} - let res = await workingHoursSetApi().postWorkTimeGroupPage(data); + let res = await timeStrategyApi().getRecordPage(data); if (res.data.code === '200') { - state.pageRecord = res.data.data state.tableData = res.data.data.map((item)=>{ - if(item.list == null){ - item.list = [] + // if(item.workTimeGroupRespDTO == null || item.workTimeGroupRespDTO.list == []){ + // item.workList = [] + // }else{ + // item.workList= Array.from(item.workTimeGroupRespDTO.list,({workTimeGroupId})=>workTimeGroupId) + // } + // if(item.breakTimeGroupRespDTO == null || item.breakTimeGroupRespDTO.list == []){ + // item.restList = [] + // }else{ + // item.restList= Array.from(item.breakTimeGroupRespDTO.list,({breakTimeGroupId})=>breakTimeGroupId) + // } + if(item.workTimeGroupRespDTO == null){ + item.workList = '' }else{ - item.list= Array.from(item.list,({workTimePeriodId})=>workTimePeriodId) + item.workList= item.workTimeGroupRespDTO.name + } + if(item.breakTimeGroupRespDTO == null){ + item.restList = '' + }else{ + item.restList= item.breakTimeGroupRespDTO.name } return item }) + console.log(state.tableData,'state.tableData') state.totalSize = res.data.total } else { ElMessage({ @@ -268,29 +301,24 @@ } } - // 表格数据格式化 - const toNames =(row, column, cellValue, index) => { - if(row.list==[]){ - return [] - }else{ - const nameList = [] - for(let i=0;i<row.list.length;i++){ - for(let t=0;t<state.workTimeList.length;t++){ - if(row.list[i]==state.workTimeList[t].id){ - nameList.push(state.workTimeList[t].name) - } - } - } - return nameList.join() + // 获取工作时间组列表 + const getWorkTimeList = async () => { + let res = await timeStrategyApi().getWorkTimeList(); + if (res.data.code === '200') { + state.workTimeList = res.data.data + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); } } - // 获取工作时段列表 - const getWorkTimePeriod = async () => { - let res = await workingHoursApi().getWorkTimePeriod(); + // 获取休息时间组列表 + const getRestTimeList = async () => { + let res = await timeStrategyApi().getRestTimeList(); if (res.data.code === '200') { - state.workTimeList = res.data.data - console.log(state.workTimeList,'list') + state.restTimeList = res.data.data } else { ElMessage({ type: 'warning', @@ -318,7 +346,7 @@ // 添加工作时段方法 const addRecord = async (data:any) => { - let res = await workingHoursSetApi().addWorkTimeGroup(data); + let res = await timeStrategyApi().addRecord(data); if (res.data.code === '200') { ElMessage({ type: 'success', @@ -335,7 +363,7 @@ // 修改工作时段方法 const editRecord = async (data:any) => { - let res = await workingHoursSetApi().updateWorkTimeGroup(data); + let res = await timeStrategyApi().updateRecord(data); if (res.data.code === '200') { ElMessage({ type: 'success', @@ -358,13 +386,19 @@ const data = { name: state.addRecord.name, info: state.addRecord.info, - workTimePeriodIds: state.addRecord.list + workTimeGroupId: state.addRecord.workList, + breakTimeGroupId: state.addRecord.restList } if (state.chosenIndex == null) { await addRecord(data) } else { - data.id = JSON.stringify(state.addRecord.id), - console.log(data,'修改参数') + data.id = JSON.stringify(state.addRecord.id) + if(typeof state.addRecord.workList == 'string'){ + data.workTimeGroupId = state.addRecord.workTimeGroupId + } + if(typeof state.addRecord.restList == 'string'){ + data.breakTimeGroupId = state.addRecord.breakTimeGroupId + } await editRecord(data) } state.dialogAddRecord = false @@ -377,7 +411,7 @@ // 删除工作时间组方法 const deleteRecord = async (data:any) => { - let res = await workingHoursSetApi().deleteWorkTimeGroup(data); + let res = await timeStrategyApi().deleteRecord(data); if (res.data.code === '200') { ElMessage({ type: 'success', @@ -415,7 +449,7 @@ }; const conFirmDeleteBatch = async () => { - let res = await workingHoursSetApi().deletBatchWorkTimeGroup({ids: state.deleteArr}); + let res = await timeStrategyApi().deletBatchRecord({ids: state.deleteArr}); if (res.data.code === '200') { state.deleteSetDialog = false ElMessage({ @@ -444,18 +478,6 @@ // 查看记录 const viewRecord = (row) => { state.details = JSON.parse(JSON.stringify(row)) - if(row.list==[]){ - state.details.list = [] - }else{ - state.details.list = [] - for(let i=0;i<row.list.length;i++){ - for(let t=0;t<state.workTimeList.length;t++){ - if(row.list[i]==state.workTimeList[t].id){ - state.details.list.push(state.workTimeList[t].name) - } - } - } - } state.dialogDetails = true } @@ -468,6 +490,7 @@ state.dialogAddRecord = true state.chosenIndex = index state.addRecord = JSON.parse(JSON.stringify(row)) + console.log(state.addRecord,'state.addRecord') } const closeAdd = () => { state.addRecord = {} @@ -496,7 +519,6 @@ Delete, Refresh, Plus, - toNames, toggleSelection, handleSelectionChange, searchRecord, @@ -505,7 +527,8 @@ deleteRecordBtn, conFirmDelete, getListByPage, - getWorkTimePeriod, + getWorkTimeList, + getRestTimeList, reLoadData, deleteRecord, deleteBatchBtn, diff --git a/src/views/system/personShiftManage/workingHoursSet/index.vue b/src/views/system/personShiftManage/personTimeManage/workingHoursSet/index.vue similarity index 99% rename from src/views/system/personShiftManage/workingHoursSet/index.vue rename to src/views/system/personShiftManage/personTimeManage/workingHoursSet/index.vue index 7eeca06..160f8d3 100644 --- a/src/views/system/personShiftManage/workingHoursSet/index.vue +++ b/src/views/system/personShiftManage/personTimeManage/workingHoursSet/index.vue @@ -145,7 +145,6 @@ // 定义接口来定义对象的类型 interface stateType { tableData: Array<string>, - pageRecord: Array<string>, workTimeList: Array<string>, multipleSelection: Array<any>, deleteArr: Array<any>, @@ -185,7 +184,6 @@ chosenIndex: null, searchWord: '', tableData: [], - pageRecord: [], workTimeList: [], multipleSelection: [], dialogDetails: false, @@ -250,7 +248,6 @@ const data = {pageSize: state.pageSize,pageIndex: state.pageIndex,searchParams:{name: state.searchWord}} let res = await workingHoursSetApi().postWorkTimeGroupPage(data); if (res.data.code === '200') { - state.pageRecord = res.data.data state.tableData = res.data.data.map((item)=>{ if(item.list == null){ item.list = [] diff --git a/src/views/system/personShiftManage/workingHoursSet/index.vue b/src/views/system/personShiftManage/shiftManage/teamManage/index.vue similarity index 69% copy from src/views/system/personShiftManage/workingHoursSet/index.vue copy to src/views/system/personShiftManage/shiftManage/teamManage/index.vue index 7eeca06..56e9ca5 100644 --- a/src/views/system/personShiftManage/workingHoursSet/index.vue +++ b/src/views/system/personShiftManage/shiftManage/teamManage/index.vue @@ -4,7 +4,7 @@ <el-row class="homeCard"> <el-col :span="8"> <div class="grid-content topInfo"> - <el-input v-model="searchWord" placeholder="休息时间组名称"></el-input> + <el-input v-model="searchWord" placeholder="时间策略名称"></el-input> <el-button type="primary" @click="searchRecord">查询</el-button> <el-button plain @click="clearSearch">重置</el-button> </div> @@ -29,9 +29,9 @@ @selection-change="handleSelectionChange" > <el-table-column type="selection" width="100" /> - <el-table-column property="name" label="工作时间组名称"/> - <el-table-column property="list" :formatter="toNames" label="关联工作时段"/> - <el-table-column property="info" label="描述信息"/> + <el-table-column property="groupName" label="班组名称"/> + <el-table-column property="groupMembers" label="班组人员" width="180" :show-overflow-tooltip="true"/> + <el-table-column property="groupInfo" label="描述"/> <el-table-column fixed="right" label="操作" align="center" width="250"> <template #default="scope"> <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> @@ -56,48 +56,50 @@ </div> </div> </div> - <el-dialog v-model="dialogDetails" title="工作时间组"> + <el-dialog v-model="dialogDetails" title="时间策略"> <el-form :model="details" label-width="120px"> - <el-form-item label="时间组名称"> + <el-form-item label="班组名称"> <el-input - v-model="details.name" + v-model="details.groupName" readonly /> </el-form-item> - <el-form-item label="关联工作时段" v-if="details.list.length>0"> - <el-input - v-model="details.list" - readonly - /> + <el-form-item label="班组人员"> + <el-input v-model="details.groupMembers" type="textarea" readonly/> </el-form-item> - <el-form-item label="描述信息" v-if="details.info"> - <el-input - v-model="details.info" - type="textarea" - readonly - /> + <el-form-item label="描述"> + <el-input v-model="details.groupInfo" type="textarea" readonly/> </el-form-item> <el-form-item> <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> </el-form-item> </el-form> </el-dialog> - <el-dialog v-model="dialogAddRecord" title="工作时间组编辑" @close="closeAdd" @open="openAdd"> + <el-dialog v-model="dialogAddRecord" title="时间策略编辑" @close="closeAdd" @open="openAdd"> <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> - <el-form-item label="时间组名称" prop="name"> + <el-form-item label="班组名称" prop="groupName"> <el-input - v-model="addRecord.name" + v-model="addRecord.groupName" > </el-input> </el-form-item> - <el-form-item label="关联工作时段" prop="list"> - <el-select v-model="addRecord.list" multiple> - <el-option v-for="(item,index) in workTimeList" :key="index" :label="item.name" :value="item.id" /> + <el-form-item label="选择部门" prop="department"> + <el-cascader + v-model="addRecord.department" + :options="departmentList" + :props="casProps" + :show-all-levels="false" + @change="handleChange" + /> + </el-form-item> + <el-form-item label="选择人员" prop="groupMembers" v-if="addRecord.department !== ''"> + <el-select v-model="addRecord.groupMembers" multiple> + <el-option v-for="(item,index) in workerList" :label="item.username" :key="index" :value="item.uid">{{item.username}}</el-option> </el-select> </el-form-item> - <el-form-item label="描述信息" prop="info"> + <el-form-item label="描述" prop="groupInfo"> <el-input - v-model="addRecord.info" + v-model="addRecord.groupInfo" type="textarea" > </el-input> @@ -138,15 +140,15 @@ import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue' import { ElTable } from 'element-plus' import { FormInstance, FormRules, ElMessage } from 'element-plus' - import { workingHoursSetApi } from '/@/api/basicDateManage/personShiftManage/workingHoursSet'; - import { workingHoursApi } from '/@/api/basicDateManage/personShiftManage/workingHours'; + import { teamManageApi } from '/@/api/basicDateManage/personShiftManage/teamManage'; // 定义接口来定义对象的类型 interface stateType { tableData: Array<string>, - pageRecord: Array<string>, - workTimeList: Array<string>, + departmentList: Array<any>, + workerList: Array<string>, + casProps: {}, multipleSelection: Array<any>, deleteArr: Array<any>, dialogDetails: boolean, @@ -160,14 +162,17 @@ searchWord: string, totalSize: number, addRecord: { - name: string, - list: Array<any>, - info: string + groupName: string, + department: number | null, + depId: number | null, + groupMembers: Array<any>, + groupInfo: string }, details: { - name: string, - list: Array<any>, - info: string + groupName: string, + department: number | null, + groupMembers: Array<any>, + groupInfo: string } } @@ -185,30 +190,43 @@ chosenIndex: null, searchWord: '', tableData: [], - pageRecord: [], - workTimeList: [], + departmentList: [], + department: '', + workerList: [], + casProps: { + expandTrigger: 'hover', + emitPath: false, + value: 'depId', + label: 'depName' + }, multipleSelection: [], dialogDetails: false, dialogAddRecord: false, deleteDialog: false, deleteSetDialog: false, addRecord: { - name: '', - list: [], - info: '' + groupName: '', + department: null, + groupMembers: [], + depId: null, + groupInfo: '' }, details: { - name: '', - list: [], - info: '' + groupName: '', + department: null, + groupMembers: [], + depId: null, + groupInfo: '' }, deleteId: null, deleteArr: [] }) interface User { - name: string, - list: [], - info: string + groupName: string, + department: number | null, + depId: number, + groupMembers: Array<any>, + groupInfo: string } const multipleTableRef = ref<InstanceType<typeof ElTable>>() const toggleSelection = (rows?: User[]) => { @@ -235,27 +253,27 @@ const addRef = ref<FormInstance>() const addRules = reactive<FormRules>({ - name: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - list: [{required: true, message: '该内容不能为空', trigger: 'blur'}] + groupName: [{required: true, message: '该内容不能为空', trigger: 'blur'}], + department: [{required: true, message: '该内容不能为空', trigger: 'blur'}], + groupMembers: [{required: true, message: '该内容不能为空', trigger: 'blur'}] }) // 页面载入时执行方法 onMounted(() => { getListByPage() - getWorkTimePeriod() + getAllDepartment() }) - // 分页获取工作时间组列表 + // 分页获取班组管理列表 const getListByPage = async ()=>{ - const data = {pageSize: state.pageSize,pageIndex: state.pageIndex,searchParams:{name: state.searchWord}} - let res = await workingHoursSetApi().postWorkTimeGroupPage(data); + const data = {pageSize: state.pageSize,pageIndex: state.pageIndex,searchParams:{groupName: state.searchWord,containGroupMemberEnable: true}} + let res = await teamManageApi().getRecordPage(data); if (res.data.code === '200') { - state.pageRecord = res.data.data state.tableData = res.data.data.map((item)=>{ - if(item.list == null){ - item.list = [] + if(!item.groupMembers || item.groupMembers == null){ + item.groupMembers = [] }else{ - item.list= Array.from(item.list,({workTimePeriodId})=>workTimePeriodId) + item.groupMembers= Array.from(item.groupMembers,({username})=>username) } return item }) @@ -268,30 +286,26 @@ } } - // 表格数据格式化 - const toNames =(row, column, cellValue, index) => { - if(row.list==[]){ - return [] - }else{ - const nameList = [] - for(let i=0;i<row.list.length;i++){ - for(let t=0;t<state.workTimeList.length;t++){ - if(row.list[i]==state.workTimeList[t].id){ - nameList.push(state.workTimeList[t].name) - } - } - } - return nameList.join() + // 获取部门列表 + const getAllDepartment = async () => { + let res = await teamManageApi().getAllDepartment(); + if (res.data.code === '200') { + state.departmentList = res.data.data + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); } } - // 获取工作时段列表 - const getWorkTimePeriod = async () => { - let res = await workingHoursApi().getWorkTimePeriod(); - if (res.data.code === '200') { - state.workTimeList = res.data.data - console.log(state.workTimeList,'list') - } else { + const handleChange = async (value)=>{ + state.addRecord.depId = value + console.log(state.addRecord.department,'de') + let res = await teamManageApi().getAllMember(value); + if(res.data.code === '200'){ + state.workerList = res.data.data + }else{ ElMessage({ type: 'warning', message: res.data.msg @@ -316,9 +330,9 @@ getListByPage() } - // 添加工作时段方法 + // 添加班组管理方法 const addRecord = async (data:any) => { - let res = await workingHoursSetApi().addWorkTimeGroup(data); + let res = await teamManageApi().addRecord(data); if (res.data.code === '200') { ElMessage({ type: 'success', @@ -334,8 +348,16 @@ }; // 修改工作时段方法 + const editRecordBtn = async (index, row) => { + state.addRecord = JSON.parse(JSON.stringify(row)) + state.addRecord.department = '' + state.addRecord.groupMembers = [] + state.dialogAddRecord = true + state.chosenIndex = index + } + const editRecord = async (data:any) => { - let res = await workingHoursSetApi().updateWorkTimeGroup(data); + let res = await teamManageApi().updateRecord(data); if (res.data.code === '200') { ElMessage({ type: 'success', @@ -356,15 +378,15 @@ await formEl.validate(async (valid, fields) => { if (valid) { const data = { - name: state.addRecord.name, - info: state.addRecord.info, - workTimePeriodIds: state.addRecord.list + groupName: state.addRecord.groupName, + groupInfo: state.addRecord.groupInfo, + depId: state.addRecord.depId, + groupMemberIds: state.addRecord.groupMembers } if (state.chosenIndex == null) { await addRecord(data) } else { - data.id = JSON.stringify(state.addRecord.id), - console.log(data,'修改参数') + data.groupId = JSON.stringify(state.addRecord.groupId) await editRecord(data) } state.dialogAddRecord = false @@ -377,7 +399,7 @@ // 删除工作时间组方法 const deleteRecord = async (data:any) => { - let res = await workingHoursSetApi().deleteWorkTimeGroup(data); + let res = await teamManageApi().deleteRecord(data); if (res.data.code === '200') { ElMessage({ type: 'success', @@ -393,44 +415,49 @@ } const deleteRecordBtn = (row) => { - state.deleteId = row.id + console.log(row,'row') + state.deleteId = row.groupId state.deleteDialog = true } const conFirmDelete = () => { - deleteRecord({ id: state.deleteId }) + deleteRecord({ groupId: state.deleteId }) state.deleteDialog = false } // 批量删除 const deleteBatchBtn = async () => { - if (state.deleteArr.length > 0) { - state.deleteSetDialog = true - } else { - ElMessage({ - type: 'warning', - message: '请先选择要删除的记录' - }); - } + ElMessage({ + type: 'warning', + message: '抱歉,本页面暂不支持批量删除' + }); + // if (state.deleteArr.length > 0) { + // state.deleteSetDialog = true + // } else { + // ElMessage({ + // type: 'warning', + // message: '请先选择要删除的记录' + // }); + // } }; - const conFirmDeleteBatch = async () => { - let res = await workingHoursSetApi().deletBatchWorkTimeGroup({ids: state.deleteArr}); - if (res.data.code === '200') { - state.deleteSetDialog = false - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - state.deleteSetDialog = false - } - } + // const conFirmDeleteBatch = async () => { + // let res = await teamManageApi().deletBatchRecord({ids: state.deleteArr}); + // if (res.data.code === '200') { + // state.deleteSetDialog = false + // ElMessage({ + // type: 'success', + // message: res.data.msg + // }); + // getListByPage() + // } else { + // ElMessage({ + // type: 'warning', + // message: res.data.msg + // }); + // state.deleteSetDialog = false + // } + // } const handleSizeChange = (val: number) => { state.pageSize = val @@ -444,18 +471,6 @@ // 查看记录 const viewRecord = (row) => { state.details = JSON.parse(JSON.stringify(row)) - if(row.list==[]){ - state.details.list = [] - }else{ - state.details.list = [] - for(let i=0;i<row.list.length;i++){ - for(let t=0;t<state.workTimeList.length;t++){ - if(row.list[i]==state.workTimeList[t].id){ - state.details.list.push(state.workTimeList[t].name) - } - } - } - } state.dialogDetails = true } @@ -463,12 +478,7 @@ const reLoadData = async () =>{ getListByPage() } - // 点击修改 - const editRecordBtn = (index, row) => { - state.dialogAddRecord = true - state.chosenIndex = index - state.addRecord = JSON.parse(JSON.stringify(row)) - } + const closeAdd = () => { state.addRecord = {} state.chosenIndex = null @@ -496,7 +506,7 @@ Delete, Refresh, Plus, - toNames, + handleChange, toggleSelection, handleSelectionChange, searchRecord, @@ -505,11 +515,9 @@ deleteRecordBtn, conFirmDelete, getListByPage, - getWorkTimePeriod, reLoadData, deleteRecord, deleteBatchBtn, - conFirmDeleteBatch, handleSizeChange, handleCurrentChange, confirmAddRecord, diff --git a/src/views/system/personShiftManage/shiftManage/teamStrategy/index.vue b/src/views/system/personShiftManage/shiftManage/teamStrategy/index.vue new file mode 100644 index 0000000..a31fdcd --- /dev/null +++ b/src/views/system/personShiftManage/shiftManage/teamStrategy/index.vue @@ -0,0 +1,718 @@ +<template> + <div class="home-container"> + <div style="height: 100%"> + <el-row class="homeCard"> + <el-col :span="8"> + <div class="grid-content topInfo"> + <el-input v-model="searchWord" placeholder="时间策略名称"></el-input> + <el-button type="primary" @click="searchRecord">查询</el-button> + <el-button plain @click="clearSearch">重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <div class="main-card"> + <el-row class="cardTop"> + <el-col :span="12" class="mainCardBtn"> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> +<!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain @click="deleteBatchBtn">删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + height="calc(100% - 100px)" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="100" /> + <el-table-column property="groupStrategyName" label="班组策略名称"/> + <el-table-column property="timeStrategy" label="时间策略" width="180" :show-overflow-tooltip="true"/> + <el-table-column property="cycleName" label="循环类型" :show-overflow-tooltip="true"/> + <el-table-column property="groupNames" label="班组"/> + <el-table-column property="cycleStartTime" label="排班开始时间" width="160"/> + <el-table-column property="groupStrategyInfo" label="描述信息"/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecordBtn(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="totalSize" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </div> + </div> + <el-dialog v-model="dialogDetails" title="班组策略"> + <el-form :model="details" label-width="120px"> + <el-form-item label="策略名称"> + <el-input + v-model="details.groupStrategyName" + readonly + /> + </el-form-item> + <el-form-item label="时间策略"> + <el-input + v-model="details.timeStrategy" + readonly + /> + </el-form-item> + <el-form-item label="循环类型"> + <el-input + v-model="details.cycleName" + readonly + /> + </el-form-item> + <el-form-item label="班组"> + <el-input + v-model="details.groupNames" + type="textarea" + readonly + /> + </el-form-item> + <el-form-item label="排班开始时间"> + <el-input + v-model="details.cycleStartTime" + readonly + /> + </el-form-item> + <el-form-item label="描述信息" v-if="details.groupStrategyInfo"> + <el-input + v-model="details.groupStrategyInfo" + type="textarea" + readonly + /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="班组策略编辑" @close="closeAdd" @open="openAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="策略名称" prop="groupStrategyName"> + <el-input + v-model="addRecord.groupStrategyName" + > + </el-input> + </el-form-item> + <el-form-item label="时间策略" prop="timeStrategyId"> + <el-select v-model="addRecord.timeStrategyId"> + <el-option v-for="(item,index) in timeList" :key="index" :label="item.name" :value="item.id" /> + </el-select> + </el-form-item> + <el-form-item label="循环类型" prop="cycle"> + <el-select v-model="addRecord.cycle"> + <el-option v-for="(item,index) in cycleList" :key="index" :label="item.name" :value="item.value" /> + </el-select> + </el-form-item> + <el-form-item label="班组选择" prop="groupIds" > + <el-select v-model="addRecord.groupIds" multiple> + <el-option v-for="(item,index) in teamList" :key="index" :label="item.groupName" :value="item.id" /> + </el-select> + </el-form-item> + <el-form-item label="排班开始时间" prop="cycleStartTime"> + <el-date-picker v-model="addRecord.cycleStartTime" type="date" value-format="YYYY-MM-DD"/> + </el-form-item> + <el-form-item label="描述信息" prop="groupStrategyInfo"> + <el-input + v-model="addRecord.groupStrategyInfo" + type="textarea" + > + </el-input> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + <el-dialog v-model="deleteSetDialog" title="提示" width="30%" center> + <span>您确定要删除这些记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteSetDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDeleteBatch" size="default">确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, ref, onMounted } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue' + import { ElTable } from 'element-plus' + import { FormInstance, FormRules, ElMessage } from 'element-plus' + import { teamStrategyApi } from '/@/api/basicDateManage/personShiftManage/teamStrategy'; + import { timeStrategyApi } from '/@/api/basicDateManage/personShiftManage/timeStrategy'; + import { teamManageApi } from '/@/api/basicDateManage/personShiftManage/teamManage'; + + // 定义接口来定义对象的类型 + interface stateType { + tableData: Array<string>, + pageRecord: Array<string>, + timeList: Array<any>, + teamList: Array<any>, + cycleList: Array<any>, + multipleSelection: Array<any>, + deleteArr: Array<any>, + dialogDetails: boolean, + dialogAddRecord: boolean, + deleteDialog: boolean, + deleteSetDialog: boolean; + pageIndex: number, + pageSize: number, + chosenIndex: null | number, + deleteId: null | number, + searchWord: string, + totalSize: number, + addRecord: { + groupStrategyName: string, + timeStrategyId: number | null, + timeStrategy: string, + groupIds: Array<number>, + cycle: number | null, + cycleName: string, + cycleStartTime: string, + groupStrategyInfo: string, + groupStrategyId: number | null + }, + details: { + groupStrategyName: string, + timeStrategyId: number | null, + timeStrategy: string, + groups: Array<any>, + cycle: number | null, + cycleName: string, + cycleStartTime: string, + groupStrategyInfo: string + } + } + + export default { + name: 'teamStrategy', + components:{}, + setup() { + const userInfo = useUserInfo() + const {userInfos} = storeToRefs(userInfo); + + const state = reactive<stateType>({ + pageIndex: 1, + pageSize: 10, + totalSize: 0, + chosenIndex: null, + searchWord: '', + tableData: [], + pageRecord: [], + timeList: [], + teamList: [], + cycleList: [ + { + name: '周', + value: 3 + }, + { + name: '月', + value: 2 + }, + { + name: '年', + value: 1 + } + ], + multipleSelection: [], + dialogDetails: false, + dialogAddRecord: false, + deleteDialog: false, + deleteSetDialog: false, + addRecord: { + groupStrategyName: '', + timeStrategyId: null, + timeStrategy: '', + groupIds: [], + cycle: null, + cycleName: '', + cycleStartTime: '', + groupStrategyInfo: '', + groupStrategyId: null + }, + details: { + groupStrategyName: '', + timeStrategyId: null, + timeStrategy: '', + groups: [], + cycle: null, + cycleName: '', + cycleStartTime: '', + groupStrategyInfo: '' + }, + deleteId: null, + deleteArr: [] + }) + interface User { + groupStrategyName: string, + timeStrategyId: null | number, + timeStrategy: string, + groups: Array<any>, + cycle: null | number, + cycleName: string, + cycleStartTime: string, + groupStrategyInfo: string + } + const multipleTableRef = ref<InstanceType<typeof ElTable>>() + const toggleSelection = (rows?: User[]) => { + if (rows) { + rows.forEach((row) => { + // TODO: improvement typing when refactor table + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + multipleTableRef.value!.toggleRowSelection(row, undefined) + }) + } else { + multipleTableRef.value!.clearSelection() + } + } + + // 多选 + const handleSelectionChange = (val: User[]) => { + state.multipleSelection = JSON.parse(JSON.stringify(val)) + state.deleteArr = state.multipleSelection.map((item)=>{ + item = item.id + return item + }) + } + + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + groupStrategyName: [{required: true, message: '该内容不能为空', trigger: 'blur'}], + timeStrategyId: [{required: true, message: '该内容不能为空', trigger: 'blur'}], + groupIds: [{required: true, message: '该内容不能为空', trigger: 'blur'}], + cycle: [{required: true, message: '该内容不能为空', trigger: 'blur'}], + cycleStartTime: [{required: true, message: '该内容不能为空', trigger: 'blur'}] + }) + + // 页面载入时执行方法 + onMounted(() => { + getListByPage() + getTimeList() + getTeamList() + }) + + // 分页获取班组策略列表 + const getListByPage = async ()=>{ + const data = {pageSize: state.pageSize,pageIndex: state.pageIndex,searchParams:{name: state.searchWord,containGroupEnable:true}} + let res = await teamStrategyApi().getRecordPage(data); + if (res.data.code === '200') { + state.pageRecord = res.data.data + state.tableData = res.data.data.map((item)=>{ + item.cycleName = item.cycle==1?'年':(item.cycle==2?'月':(item.cycle==3?'周':'')) + if(!item.groups || item.groups == null){ + item.groups = [] + }else{ + item.groups = item.groups.map((i) =>{ + return Object.assign({},{'groupId':i.groupId,'groupName':i.groupName}) + }) + item.groupIds= Array.from(item.groups,({groupId})=> groupId) + item.groupNames= Array.from(item.groups,({groupName})=> groupName) + } + return item + }) + state.tableData.map(async(item)=>{ + if(!item.timeStrategyId || item.timeStrategyId == null){ + item.timeStrategy = '' + }else{ + let op = await timeStrategyApi().getRecordById({id: item.timeStrategyId}) + if(op.data.code&&op.data.code === '200'){ + if(op.data.data){ + item.timeStrategy = op.data.data.name + }else{ + item.timeStrategy = '' + } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + return item + }) + console.log(state.tableData,'state.tableData') + state.totalSize = res.data.total + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + + // 循环类型格式化 + // const toNames =(row, column, cellValue, index) =>{ + // return row.cycle == 1? '年':(row.type == 2? '月': '周') + // } + + // 时间策略格式化 + // const timeName = async (row, column, cellValue, index) =>{ + // let res = await timeStrategyApi().getRecordById({id: row.timeStrategyId}) + // if (res.data.code === '200') { + // return row.timeStrategyId = res.name + // } else { + // ElMessage({ + // type: 'warning', + // message: res.data.msg + // }); + // } + // } + + // 获取时间策略列表 + const getTimeList = async () => { + let res = await timeStrategyApi().getAllRecord(); + if (res.data.code === '200') { + console.log(res.data.data,'timestrategy') + state.timeList = res.data.data + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + + // 获取班组列表 + const getTeamList = async () => { + let res = await teamManageApi().getRecord({name: ''}); + if (res.data.code === '200') { + state.teamList = res.data.data + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + + // 关键词查询记录 + const searchRecord = async()=>{ + if(state.searchWord==''){ + ElMessage({ + type: 'warning', + message: '请输入查询关键词' + }); + }else{ + getListByPage() + } + } + + const clearSearch = async()=>{ + state.searchWord='' + getListByPage() + } + + // 添加班组策略方法 + const addRecord = async (data:any) => { + let res = await teamStrategyApi().addRecord(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage() + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // 修改工作时段方法 + const editRecord = async (data:any) => { + let res = await teamStrategyApi().updateRecord(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage() + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + + // 新增修改记录 + const confirmAddRecord = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate(async (valid, fields) => { + if (valid) { + const data = { + groupStrategyName: state.addRecord.groupStrategyName, + groupStrategyInfo: state.addRecord.groupStrategyInfo, + groupStrategyCycleType: state.addRecord.cycle, + timeStrategyId: state.addRecord.timeStrategyId, + groupIds: state.addRecord.groupIds, + cycleStartTime: state.addRecord.cycleStartTime + } + if (state.chosenIndex == null) { + await addRecord(data) + } else { + data.groupStrategyId = JSON.stringify(state.addRecord.groupStrategyId) + await editRecord(data) + } + state.dialogAddRecord = false + } else { + console.log('error submit!', fields) + } + }) + + } + + // 删除班组策略方法 + const deleteRecord = async (data:any) => { + let res = await teamStrategyApi().deleteRecord(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage() + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + + const deleteRecordBtn = (row) => { + state.deleteId = row.groupStrategyId + state.deleteDialog = true + } + + const conFirmDelete = () => { + deleteRecord({ groupStrategyId: state.deleteId }) + state.deleteDialog = false + } + + // 批量删除 + const deleteBatchBtn = async () => { + ElMessage({ + type: 'warning', + message: '抱歉,本页面暂不支持批量删除' + }); + // if (state.deleteArr.length > 0) { + // state.deleteSetDialog = true + // } else { + // ElMessage({ + // type: 'warning', + // message: '请先选择要删除的记录' + // }); + // } + }; + + // const conFirmDeleteBatch = async () => { + // let res = await timeStrategyApi().deletBatchRecord({ids: state.deleteArr}); + // if (res.data.code === '200') { + // state.deleteSetDialog = false + // ElMessage({ + // type: 'success', + // message: res.data.msg + // }); + // getListByPage() + // } else { + // ElMessage({ + // type: 'warning', + // message: res.data.msg + // }); + // state.deleteSetDialog = false + // } + // } + + const handleSizeChange = (val: number) => { + state.pageSize = val + getListByPage() + } + const handleCurrentChange = (val: number) => { + state.pageIndex = val + getListByPage() + } + + // 查看记录 + const viewRecord = (row) => { + state.details = JSON.parse(JSON.stringify(row)) + state.dialogDetails = true + } + + // 刷新 + const reLoadData = async () =>{ + getListByPage() + } + // 点击修改 + const editRecordBtn = (index, row) => { + state.dialogAddRecord = true + state.chosenIndex = index + state.addRecord = JSON.parse(JSON.stringify(row)) + console.log(state.addRecord,'state.addRecord') + } + const closeAdd = () => { + state.addRecord = {} + state.chosenIndex = null + } + const openAdd = () => { + if (state.chosenIndex == null) { + state.addRecord.info = '' + } + } + const indexClear = () => { + state.deleteId = null + } + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId', value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + return { + addRef, + addRules, + View, + Edit, + Delete, + Refresh, + Plus, + toggleSelection, + handleSelectionChange, + searchRecord, + clearSearch, + viewRecord, + deleteRecordBtn, + conFirmDelete, + getListByPage, + reLoadData, + deleteRecord, + deleteBatchBtn, + handleSizeChange, + handleCurrentChange, + confirmAddRecord, + closeAdd, + openAdd, + indexClear, + editRecordBtn, + ...toRefs(state) + }; + } + } +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: calc(100vh - 114px); + box-sizing: border-box; + overflow: hidden; + .homeCard{ + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + + .main-card{ + width: 100%; + height: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + .pageBtn{ + height: 60px; + display: flex; + align-items: center; + justify-content: right; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + &:last-of-type{ + height: calc(100% - 100px); + } + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } +</style> -- Gitblit v1.9.2