Your Name
2022-08-03 eacc804728a4aceab6be02cbbcdb3754b29ad769
Merge branch 'master' of https://sinanoaq.cn:8888/r/gtqt
已修改3个文件
353 ■■■■■ 文件已修改
src/api/basicDateManage/personShiftManage/workingHoursSet/index.ts 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/personShiftManage/durationManage/index.vue 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/personShiftManage/workingHoursSet/index.vue 264 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/basicDateManage/personShiftManage/workingHoursSet/index.ts
@@ -1,6 +1,6 @@
import request from '/@/utils/request';
export function workingHoursApi() {
export function workingHoursSetApi() {
    return {
        //工作时间组分页列表
        postWorkTimeGroupPage: (data: object)=>{
@@ -9,6 +9,42 @@
                method: 'post',
                data: data
            })
        },
        // 工作时间组新增
        addWorkTimeGroup: (data: object)=>{
            return request({
                url: `/workTime/addWorkTimeGroup`,
                method: 'post',
                data: data
            })
        },
        // 工作时间组修改
        updateWorkTimeGroup: (data: object)=>{
            return request({
                url: `/workTime/updateWorkTimeGroup`,
                method: 'post',
                data: data
            })
        },
        // 工作时间组删除
        deleteWorkTimeGroup: (data: object)=>{
            return request({
                url: `/workTime/deleteWorkTimeGroup`,
                method: 'post',
                data: data
            })
        },
        // 工作时间组批量删除
        deletBatchWorkTimeGroup: (data: object)=>{
            return request({
                url: `/workTime/deletBatchWorkTimeGroup`,
                method: 'post',
                data: data
            })
        }
    };
}
src/views/system/personShiftManage/durationManage/index.vue
@@ -16,7 +16,7 @@
                        <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-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>
@@ -88,6 +88,15 @@
                </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>
@@ -101,6 +110,7 @@
import { ElTable } from 'element-plus';
import { FormInstance, FormRules, ElMessage } from 'element-plus';
import { workingHoursApi } from '/@/api/basicDateManage/personShiftManage/workingHours';
import {workingHoursSetApi} from "/@/api/basicDateManage/personShiftManage/workingHoursSet";
// 定义接口来定义对象的类型
interface stateType {
@@ -110,6 +120,7 @@
    dialogDetails: boolean;
    dialogAddRecord: boolean;
    deleteDialog: boolean;
    deleteSetDialog: boolean;
    pageIndex: number;
    pageSize: number;
    searchWord: string;
@@ -149,6 +160,7 @@
            dialogDetails: false,
            dialogAddRecord: false,
            deleteDialog: false,
            deleteSetDialog: false,
            addRecord: {
                id: null,
                name: '',
@@ -330,22 +342,9 @@
        };
        // 批量删除
        const deleteWorkTimePeriods = async () => {
        const deleteBatchBtn = 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
                    });
                }
                state.deleteSetDialog = true
            } else {
                ElMessage({
                    type: 'warning',
@@ -353,6 +352,23 @@
                });
            }
        };
        const conFirmDeleteBatch = async () => {
            let res = await workingHoursApi().deleteBatchWorkTimePeriod({ 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;
@@ -441,11 +457,12 @@
            Plus,
            toggleSelection,
            handleSelectionChange,
            deleteWorkTimePeriods,
            conFirmDeleteBatch,
            searchRecord,
            clearSearch,
            viewRecord,
            deleteRecord,
            deleteBatchBtn,
            conFirmDelete,
            getWorkTimePeriod,
            getListByPage,
src/views/system/personShiftManage/workingHoursSet/index.vue
@@ -16,7 +16,7 @@
                    <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-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>
@@ -29,14 +29,14 @@
                        @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="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">
                            <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>
                            <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>
@@ -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,9 +64,9 @@
                            readonly
                    />
                </el-form-item>
                <el-form-item label="关联休息时间" v-if="details.content.length>0">
                <el-form-item label="关联工作时段" v-if="details.list.length>0">
                    <el-input
                            v-model="details.content"
                            v-model="details.list"
                            readonly
                    />
                </el-form-item>
@@ -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,10 +90,9 @@
                    >
                    </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-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-select>
                </el-form-item>
                <el-form-item label="描述信息" prop="info">
@@ -118,6 +117,15 @@
          </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>
@@ -130,30 +138,35 @@
    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';
    // 定义接口来定义对象的类型
    interface stateType {
        tableData: Array<string>,
        pageRecord: Array<string>,
        workTimeList: Array<string>,
        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: {
            name: string,
            content: Array<any>,
            list: Array<any>,
            info: string
        },
        details: {
            name: string,
            content: Array<any>,
            list: Array<any>,
            info: string
        }
    }
@@ -172,18 +185,21 @@
            chosenIndex: null,
            searchWord: '',
            tableData: [],
            pageRecord: [],
            workTimeList: [],
            multipleSelection: [],
            dialogDetails: false,
            dialogAddRecord: false,
            deleteDialog: false,
            deleteSetDialog: false,
            addRecord: {
                name: '',
                content: [],
                list: [],
                info: ''
            },
            details: {
                name: '',
                content: [],
                list: [],
                info: ''
            },
            deleteId: null,
@@ -191,7 +207,7 @@
        })
        interface User {
            name: string,
            content: [],
            list: [],
            info: string
        }
        const multipleTableRef = ref<InstanceType<typeof ElTable>>()
@@ -220,28 +236,30 @@
        const addRef = ref<FormInstance>()
        const addRules = reactive<FormRules>({
            name: [{required: true, message: '该内容不能为空', trigger: 'blur'}],
            content: [{required: true, message: '该内容不能为空', trigger: 'blur'}]
            list: [{required: true, message: '该内容不能为空', trigger: 'blur'}]
        })
        // 页面载入时执行方法
        onMounted(() => {
            // getWorkTimePeriod()
            getListByPage()
            getWorkTimePeriod()
        })
        // 获取工作时段列表
        const getWorkTimePeriod = async () => {
            let res = await workingHoursApi().getWorkTimePeriod({name: state.searchWord});
        // 分页获取工作时间组列表
        const getListByPage = async ()=>{
            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)=>{
                    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
                    if(item.list == null){
                        item.list = []
                    }else{
                        item.list= Array.from(item.list,({workTimePeriodId})=>workTimePeriodId)
                    }
                    return item
                })
                state.totalSize = res.data.total
            } else {
                ElMessage({
                    type: 'warning',
@@ -250,21 +268,29 @@
            }
        }
        // 分页获取工作时段列表
        const getListByPage = async ()=>{
            const data = {pageSize: state.pageSize,pageIndex: state.pageIndex,searchParams:{name: state.searchWord}}
            let res = await workingHoursApi().postPeriodPage(data);
        // 表格数据格式化
        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.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
                state.workTimeList = res.data.data
                console.log(state.workTimeList,'list')
            } else {
                ElMessage({
                    type: 'warning',
@@ -290,9 +316,9 @@
            getListByPage()
        }
        // 添加工作时段
        const addWorkTimePeriod = async (data:any) => {
            let res = await workingHoursApi().postWorkTimePeriod(data);
        // 添加工作时段方法
        const addRecord = async (data:any) => {
            let res = await workingHoursSetApi().addWorkTimeGroup(data);
            if (res.data.code === '200') {
                ElMessage({
                    type: 'success',
@@ -307,9 +333,9 @@
            }
        };
        // 修改工作时段
        const editWorkTimePeriod = async (data:any) => {
            let res = await workingHoursApi().updateWorkTimePeriod(data);
        // 修改工作时段方法
        const editRecord = async (data:any) => {
            let res = await workingHoursSetApi().updateWorkTimeGroup(data);
            if (res.data.code === '200') {
                ElMessage({
                    type: 'success',
@@ -324,9 +350,34 @@
            }
        }
        // 删除工作时段
        const deleteWorkTimePeriod = async (data:any) => {
            let res = await workingHoursApi().deletWorkTimePeriod(data);
        // 新增修改记录
        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,
                        workTimePeriodIds: 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
                } else {
                    console.log('error submit!', fields)
                }
            })
        }
        // 删除工作时间组方法
        const deleteRecord = async (data:any) => {
            let res = await workingHoursSetApi().deleteWorkTimeGroup(data);
            if (res.data.code === '200') {
                ElMessage({
                    type: 'success',
@@ -341,38 +392,43 @@
            }
        }
        const deleteRecord = (row) => {
        const deleteRecordBtn = (row) => {
            state.deleteId = row.id
            state.deleteDialog = true
        }
        const conFirmDelete = () => {
            deleteWorkTimePeriod({ id: state.deleteId })
            deleteRecord({ 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{
        const deleteBatchBtn = async () => {
            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
            }
        }
@@ -387,7 +443,19 @@
        // 查看记录
        const viewRecord = (row) => {
            state.details = 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
        }
@@ -395,45 +463,11 @@
        const reLoadData = async () =>{
            getListByPage()
        }
        const editRecord = (index, row) => {
        // 点击修改
        const editRecordBtn = (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 = {}
@@ -462,25 +496,27 @@
            Delete,
            Refresh,
            Plus,
            toNames,
            toggleSelection,
            handleSelectionChange,
            deleteWorkTimePeriods,
            searchRecord,
            clearSearch,
            viewRecord,
            deleteRecord,
            deleteRecordBtn,
            conFirmDelete,
            getWorkTimePeriod,
            getListByPage,
            getWorkTimePeriod,
            reLoadData,
            deleteWorkTimePeriod,
            deleteRecord,
            deleteBatchBtn,
            conFirmDeleteBatch,
            handleSizeChange,
            handleCurrentChange,
            confirmAddRecord,
            closeAdd,
            openAdd,
            indexClear,
            editRecord,
            editRecordBtn,
            ...toRefs(state)
        };
    }