Your Name
2022-07-05 39d90ac360f55f8835920c6e12e5cd1e4246bdcc
'风险'
已修改9个文件
902 ■■■■ 文件已修改
src/main.ts 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/homeMenu/homeMenu.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/specialWorkSystem/approvalProcess/addApproveProcess/index.vue 122 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/specialWorkSystem/approvalProcess/approveProcessManagement/index.vue 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/specialWorkSystem/approvalProcess/approveProcessSetting/index.vue 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/specialWorkSystem/approvalProcess/reportTypeSetting/index.vue 111 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/specialWorkSystem/workApplyManagement/workApply/index.vue 523 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/specialWorkSystem/workPlan/workAppointSummary/index.vue 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/specialWorkSystem/workPlan/workReservation/index.vue 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.ts
@@ -12,6 +12,7 @@
import '/@/theme/index.scss';
import mitt from 'mitt';
import VueGridLayout from 'vue-grid-layout';
import locale from 'element-plus/lib/locale/lang/zh-cn'
const app = createApp(App);
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
@@ -20,6 +21,6 @@
directive(app);
other.elSvg(app);
app.use(pinia).use(router).use(ElementPlus, { i18n: i18n.global.t }).use(i18n).use(VueGridLayout).mount('#app');
app.use(pinia).use(router).use(ElementPlus, { i18n: i18n.global.t,locale }).use(i18n).use(VueGridLayout).mount('#app');
app.config.globalProperties.mittBus = mitt();
src/views/homeMenu/homeMenu.vue
@@ -96,10 +96,10 @@
            await initBackEndControlRoutes();
            router.push('/home')
        };
        //点击进入特殊作业
        const toSpecialWorkSys = () => {
            router.push('/layoutPage');
        };
        // //点击进入特殊作业
        // const toSpecialWorkSys = () => {
        //     router.push('/layoutPage');
        // };
        // 页面加载时
        onMounted(() => {
            NextLoading.done();
@@ -111,7 +111,6 @@
            loginIconTwo,
            getThemeConfig,
            renderMenu,
            toSpecialWorkSys,
            ...toRefs(state),
        };
    },
src/views/specialWorkSystem/approvalProcess/addApproveProcess/index.vue
@@ -1,34 +1,37 @@
<template>
    <div class="home-container">
        <el-scrollbar height="100%">
        <div class="homeCard">
        <el-row>
            <el-button type="primary" size="large" @click="addApprove">新建审批环节</el-button>
        </el-row>
        <el-row>
            <el-table :data="tableData" border style="width: 100%">
                <el-table-column prop="id" label="编号" width="180" />
                <el-table-column prop="step" label="环节名称" width="180" />
                <el-table-column prop="type" label="审核类型"/>
                <el-table-column type="index" label="编号" width="100"/>
                <el-table-column prop="step" label="环节名称"/>
                <el-table-column prop="type" label="审核类型" width="180"/>
                <el-table-column prop="createTime" label="创建时间" width="180" />
                <el-table-column prop="editor" label="最新编辑人" width="180" />
                <el-table-column prop="editorTime" label="最新编辑时间" />
                <el-table-column prop="editeTime" label="最新编辑时间" width="180" />
                <el-table-column fixed="right" label="操作" width="180">
                    <template #default>
                        <el-button link type="primary" size="small">编辑</el-button>
                        <el-button link type="danger" size="small">删除</el-button>
                    <template #default="scope">
                        <el-button link type="primary" size="small" @click="editeRow(scope.$index,scope.row)">编辑</el-button>
                        <el-button link type="danger" size="small" @click="deleteRow(scope.$index)">删除</el-button>
                    </template>
                </el-table-column>
            </el-table>
        </el-row>
        <el-dialog v-model="dialogAddForm" title="新建审批环节">
            <el-form :model="reportForm" label-width="120px">
                <el-form-item label="环节名称">
        </div>
        <el-dialog v-model="dialogAddForm" title="新建审批环节" @close="dialogColse">
            <el-form :model="reportForm" label-width="120px" ref="ruleFormRef" :rules="rules">
                <el-form-item label="环节名称" prop="step">
                    <el-select v-model="reportForm.step" placeholder="选择环节名称">
                        <el-option label="作业负责人审批" value="作业负责人审批" />
                        <el-option label="作业负责人审批2" value="作业负责人审批2" />
                        <el-option label="作业负责人审批3" value="作业负责人审批3" />
                    </el-select>
                </el-form-item>
                <el-form-item label="审核类型">
                <el-form-item label="审核类型" prop="type">
                    <el-select v-model="reportForm.type" placeholder="选择审核类型">
                        <el-option label="上报审批意见" value="上报审批意见" />
                        <el-option label="上报气体检测数据" value="上报气体检测数据" />
@@ -39,11 +42,12 @@
                    <el-input v-model="reportForm.editor" />
                </el-form-item>
                <el-form-item>
                    <el-button type="primary" @click="onSubmitAddForm" size="default">确认</el-button>
                    <el-button size="default">取消</el-button>
                    <el-button type="primary" @click="onSubmitAddForm(ruleFormRef)" size="default">确认</el-button>
                    <el-button size="default" @click="dialogAddForm = false">取消</el-button>
                </el-form-item>
            </el-form>
        </el-dialog>
        </el-scrollbar>
    </div>
</template>
@@ -53,7 +57,8 @@
    import { initBackEndControlRoutes } from '/@/router/backEnd';
    import {useUserInfo} from "/@/stores/userInfo";
    import { Session } from '/@/utils/storage';
    import { ElMessage } from 'element-plus'
    import type { FormInstance, FormRules } from 'element-plus'
    let global: any = {
        homeChartOne: null,
        homeChartTwo: null,
@@ -67,52 +72,100 @@
    interface type {
    }
    interface User {
        step: string,
        type: string,
        createTime: string
    }
    export default defineComponent({
        name: 'reportTypeSetting',
        setup() {
            const userInfo = useUserInfo()
            const { userInfos } = storeToRefs(userInfo);
            const state  = reactive<stateType>({});
            const tableData = [
            const tableData = reactive([
                {
                    id: '0',
                    step: '作业负责人审批',
                    type: '',
                    createTime: '',
                    editor: '',
                    editorTime: ''
                    editeTime: ''
                },
                {
                    id: '1',
                    step: '作业负责人审批',
                    type: '',
                    createTime: '',
                    editor: '',
                    editorTime: ''
                    editeTime: ''
                },
                {
                    id: '2',
                    step: '作业负责人审批',
                    type: '',
                    createTime: '',
                    editor: '',
                    editorTime: ''
                    editeTime: ''
                }
            ];
            ]);
            const dialogAddForm = ref(false);
            const reportForm = reactive({
                id: '',
            const rowIndex = ref(-1)
            const reportForm = ref({
                step: '',
                type: '',
                createTime: '',
                editor: '',
                editorTime: ''
                editeTime: ''
            })
            const addApprove = ()=>{
                dialogAddForm.value = true
            };
            const onSubmitAddForm = () => {
                console.log('submit!')
            const ruleFormRef = ref<FormInstance>()
            const rules = reactive<FormRules>({
                step:[{required: true, message: '该内容不能为空',trigger:'blur'}],
                type:[{required: true, message: '该内容不能为空',trigger:'blur'}]
            })
            const onSubmitAddForm = async (formEl: FormInstance | undefined) => {
                if (!formEl) return
                await formEl.validate((valid, fields) => {
                    if (valid) {
                        if(rowIndex.value == -1){
                            reportForm.value.createTime = new Date().toLocaleString()
                            reportForm.value.editeTime = new Date().toLocaleString()
                            tableData.push(reportForm.value)
                        }else{
                            tableData[rowIndex.value] = reportForm.value
                        }
                        // reportForm.value = {
                        //     step: '',
                        //     type: '',
                        //     createTime: '',
                        //     editor: '',
                        //     editeTime: ''
                        // }
                        dialogAddForm.value = false
                    } else {
                        console.log('error submit!', fields)
                    }
                })
            }
            const editeRow = (index: number, row: User) =>{
                dialogAddForm.value = true
                rowIndex.value = index
                reportForm.value = JSON.parse(JSON.stringify(row))
                reportForm.value.editeTime = new Date().toLocaleString()
            }
            const deleteRow = (index)=>{
                tableData.splice( index,1)
            }
            const dialogColse = () =>{
                reportForm.value = {
                    step: '',
                    type: '',
                    createTime: '',
                    editor: '',
                    editeTime: ''
                }
                rowIndex.value = -1
            }
            // 折线图
            const renderMenu = async (value: string) => {
@@ -125,6 +178,12 @@
                tableData,
                dialogAddForm,
                reportForm,
                ruleFormRef,
                rules,
                rowIndex,
                dialogColse,
                editeRow,
                deleteRow,
                addApprove,
                onSubmitAddForm,
                ...toRefs(state),
@@ -137,7 +196,14 @@
    $homeNavLengh: 8;
    .home-container {
        overflow: hidden;
        padding: 80px;
        padding: 20px;
        height: 100%;
        .homeCard{
            width: 100%;
            padding: 20px;
            background: #fff;
            border-radius: 4px;
        }
        .el-row{
            margin-bottom: 20px;
        }
src/views/specialWorkSystem/approvalProcess/approveProcessManagement/index.vue
@@ -1,6 +1,8 @@
<template>
    <div class="home-container">
        <el-scrollbar height="100%">
        <el-row>
            <div class="homeCard">
            <el-col :span="12">
                <div class="grid-content topInfo">
                    <div>流程名称</div>
@@ -9,8 +11,9 @@
                    <el-button plain>重置</el-button>
                </div>
            </el-col>
            </div>
        </el-row>
        <div class="mainPages">
        <div class="homeCard">
            <div class="main-card">
                <el-row class="cardTop">
                    <el-col :span="12" class="mainCardBtn">
@@ -65,6 +68,7 @@
                />
            </div>
        </div>
        </el-scrollbar>
    </div>
</template>
@@ -222,19 +226,21 @@
<style scoped lang="scss">
    $homeNavLengh: 8;
    .home-container {
        height: 100%;
        overflow: hidden;
        padding: 20px 40px;
        padding: 20px;
        .homeCard{
            width: 100%;
            padding: 20px;
            background: #fff;
            border-radius: 4px;
        }
        .el-row{
            display: flex;
            align-items: center;
            margin-bottom: 20px;
            &:last-child {
                margin-bottom: 0;
            }
            .el-col{
                display: flex;
                align-items: center;
                margin: 20px 0;
            }
            .grid-content{
                align-items: center;
@@ -261,12 +267,11 @@
        }
        .main-card{
            width: 100%;
            padding: 20px;
            background: #fff;
            .cardTop{
                display: flex;
                align-items: center;
                justify-content: space-between;
                margin-bottom: 20px;
                .mainCardBtn{
                    margin: 0;
                }
src/views/specialWorkSystem/approvalProcess/approveProcessSetting/index.vue
@@ -1,5 +1,8 @@
<template>
    <div class="home-container">
        <el-scrollbar height="100%">
        <div class="homeCard">
        <div>
        <div v-for="(item,index) in approveSteps" class="stepItem">
            <div class="stepNum">{{index+1}}</div>
            <div class="stepCard">
@@ -19,29 +22,31 @@
                </el-card>
            </div>
        </div>
        </div>
        <el-row>
            <el-button type="primary" @click="confirmEdit" size="default">确认</el-button>
            <el-button @click="cancelEdit" size="default">取消</el-button>
            <el-button type="primary" @click="confirmEdit" size="large">确认</el-button>
            <el-button @click="cancelEdit" size="large">取消</el-button>
        </el-row>
        <el-drawer v-model="showAdd" direction="rtl">
        </div>
        <el-drawer v-model="showAdd" direction="rtl" @close="colseDrawer">
            <template #title>
                <h4>新增审批流</h4>
            </template>
            <template #default>
                <el-form :model="addProgress" label-width="120px">
                    <el-form-item label="审批部门">
                <el-form :model="addProgress" label-width="120px" ref="ruleFormRef" :rules="ProgressRules">
                    <el-form-item label="审批部门" prop="department">
                        <el-select v-model="addProgress.department" placeholder="请选择审批部门">
                            <el-option label="动土" value="动土" />
                            <el-option label="动火" value="动火" />
                        </el-select>
                    </el-form-item>
                    <el-form-item label="审批人员">
                    <el-form-item label="审批人员" prop="manager">
                        <el-select v-model="addProgress.manager" placeholder="请选择审批人员">
                            <el-option label="人员1" value="人员1" />
                            <el-option label="人员2" value="人员2" />
                        </el-select>
                    </el-form-item>
                    <el-form-item label="其他参数">
                    <el-form-item label="其他参数" prop="others">
                        <el-input v-model="addProgress.others" />
                    </el-form-item>
                </el-form>
@@ -62,6 +67,7 @@
              </span>
            </template>
        </el-dialog>
    </el-scrollbar>
    </div>
</template>
@@ -72,6 +78,7 @@
    import {useUserInfo} from "/@/stores/userInfo";
    import { Session } from '/@/utils/storage';
    import { ElMessage } from 'element-plus'
    import type { FormInstance, FormRules } from 'element-plus'
    let global: any = {
        homeChartOne: null,
        homeChartTwo: null,
@@ -115,13 +122,24 @@
                manager: '',
                others: ''
            })
            const confirmClick = () => {
                approveSteps.splice(chosenIndex.value+1,0,addProgress.value)
                addProgress.value = {
                    department: '',
                    manager: '',
                    others: ''
                }
            const ruleFormRef = ref<FormInstance>()
            const ProgressRules = reactive<FormRules>({
                department: [{required:true,message: '该选项不能为空',trigger: 'blur'}],
                manager: [{required:true,message: '该选项不能为空',trigger: 'blur'}]
            })
            const confirmClick = async (formEl: FormInstance | undefined) => {
                if (!formEl) return
                await formEl.validate((valid, fields) => {
                    if (valid) {
                        approveSteps.splice(chosenIndex.value+1,0,addProgress.value)
                        showAdd.value = false
                    } else {
                        console.log('error submit!', fields)
                    }
                })
            }
            const cancelClick=()=>{
                showAdd.value = false
            }
            const addFlow = (index) => {
@@ -144,6 +162,13 @@
                approveSteps.splice( i,1)
                deleteDialog.value = false
            }
            const colseDrawer = ()=>{
                addProgress.value = {
                    department: '',
                    manager: '',
                    others: ''
                }
            }
            const cancelEdit = () => {
            }
@@ -162,9 +187,13 @@
                showAdd,
                approveSteps,
                addProgress,
                ruleFormRef,
                ProgressRules,
                chosenIndex,
                deleteDialog,
                colseDrawer,
                conFirmDelete,
                cancelClick,
                deleteFlow,
                addFlow,
                confirmClick,
@@ -179,14 +208,25 @@
<style scoped lang="scss">
    $homeNavLengh: 8;
    .home-container {
        height: 100%;
        overflow: hidden;
        padding: 80px;
        padding: 20px;
        .homeCard{
            width: 100%;
            padding: 20px;
            background: #fff;
            border-radius: 4px;
        }
        .stepItem{
            display: flex;
            align-items: flex-start;
            margin-bottom: 30px;
            margin-left: 30px;
            padding-bottom: 30px;
            border-left: 2px solid #ccc;
            &:first-of-type{
                margin-top: 30px;
            }
            &:last-of-type{
                margin-bottom: 0;
                border-left: none;
src/views/specialWorkSystem/approvalProcess/reportTypeSetting/index.vue
@@ -1,27 +1,30 @@
<template>
    <div class="home-container">
        <el-scrollbar height="100%">
        <div class="homeCard">
        <el-row>
            <el-button type="primary" size="large" @click="addReport">新建上报类型</el-button>
        </el-row>
        <el-row>
            <el-table :data="tableData" border style="width: 100%">
                <el-table-column prop="id" label="标识" width="180" />
                <el-table-column type="index" label="标识" width="100"/>
                <el-table-column prop="type" label="上报数据类型名称" width="180" />
                <el-table-column prop="founder" label="创建人"/>
                <el-table-column prop="createTime" label="创建时间" width="180" />
                <el-table-column prop="editor" label="最新编辑人" width="180" />
                <el-table-column prop="editorTime" label="最新编辑时间" />
                <el-table-column prop="editeTime" label="最新编辑时间" />
                <el-table-column fixed="right" label="操作" width="180">
                    <template #default>
                        <el-button link type="primary" size="small">编辑</el-button>
                        <el-button link type="danger" size="small">删除</el-button>
                    <template #default="scope">
                        <el-button link type="primary" size="small" @click="editeRow(scope.$index,scope.row)">编辑</el-button>
                        <el-button link type="danger" size="small" @click="deleteRow(scope.$index)">删除</el-button>
                    </template>
                </el-table-column>
            </el-table>
        </el-row>
        <el-dialog v-model="dialogAddForm" title="新建上报类型">
            <el-form :model="reportForm" label-width="120px">
                <el-form-item label="上报数据类型">
        </div>
        <el-dialog v-model="dialogAddForm" title="新建上报类型" @close="dialogColse">
            <el-form :model="reportForm" label-width="120px" ref="ruleFormRef" :rules="addRules">
                <el-form-item label="上报数据类型" prop="type">
                    <el-select v-model="reportForm.type" placeholder="选择上报数据类型">
                        <el-option label="上报审批意见" value="上报审批意见" />
                        <el-option label="上报气体监测数据" value="上报气体监测数据" />
@@ -29,20 +32,21 @@
                    </el-select>
                </el-form-item>
                <el-form-item label="创建人">
                    <el-select v-model="reportForm.founder" placeholder="选择创建人">
                    <el-select v-model="reportForm.founder" property="founder" placeholder="选择创建人">
                        <el-option label="创建人1" value="创建人1" />
                        <el-option label="创建人2" value="创建人2" />
                    </el-select>
                </el-form-item>
                <el-form-item label="最新编辑人">
                <el-form-item label="最新编辑人" prop="editor">
                    <el-input v-model="reportForm.editor" />
                </el-form-item>
                <el-form-item>
                    <el-button type="primary" @click="onSubmitAddForm" size="default">确认</el-button>
                    <el-button size="default">取消</el-button>
                    <el-button type="primary" @click="onSubmitAddForm(ruleFormRef)" size="default">确认</el-button>
                    <el-button size="default" @click="dialogAddForm = false">取消</el-button>
                </el-form-item>
            </el-form>
        </el-dialog>
        </el-scrollbar>
    </div>
</template>
@@ -52,7 +56,7 @@
    import { initBackEndControlRoutes } from '/@/router/backEnd';
    import {useUserInfo} from "/@/stores/userInfo";
    import { Session } from '/@/utils/storage';
    import { ElMessage } from 'element-plus'
    import { FormInstance, FormRules } from 'element-plus'
    let global: any = {
        homeChartOne: null,
        homeChartTwo: null,
@@ -66,52 +70,93 @@
    interface type {
    }
    interface User {
        type: string,
        founder: string,
        editor: string
    }
    export default defineComponent({
        name: 'reportTypeSetting',
        setup() {
            const userInfo = useUserInfo()
            const { userInfos } = storeToRefs(userInfo);
            const state  = reactive<stateType>({});
            const tableData = [
            const tableData =reactive([
                {
                    id: '0',
                    type: '上报审批意见',
                    founder: '',
                    createTime: '',
                    editor: '',
                    editorTime: ''
                    editeTime: ''
                },
                {
                    id: '1',
                    type: '上报气体检测数据',
                    founder: '',
                    createTime: '',
                    editor: '',
                    editorTime: ''
                    editeTime: ''
                },
                {
                    id: '2',
                    type: '上报安全措施确认',
                    founder: '',
                    createTime: '',
                    editor: '',
                    editorTime: ''
                    editeTime: ''
                }
            ];
            ])
            const dialogAddForm = ref(false);
            const reportForm = reactive({
                id: '',
            const rowIndex = ref(-1)
            const reportForm = ref({
                type: '',
                founder: '',
                createTime: '',
                editor: '',
                editorTime: ''
                editeTime: ''
            })
            const addReport = ()=>{
                dialogAddForm.value = true
            };
            const onSubmitAddForm = () => {
                console.log('submit!')
            const ruleFormRef = ref<FormInstance>()
            const addRules = reactive<FormRules>({
                type:[{required: true, message: '该内容不能为空',trigger:'blur'}],
                founder:[{required: true, message: '该内容不能为空',trigger:'blur'}],
                editor:[{required: true, message: '该内容不能为空',trigger:'blur'}]
            })
            const onSubmitAddForm = async (formEl: FormInstance | undefined) => {
                if (!formEl) return
                await formEl.validate((valid, fields) => {
                    if (valid) {
                        if(rowIndex.value == -1){
                            reportForm.value.createTime = new Date().toLocaleString()
                            reportForm.value.editeTime = new Date().toLocaleString()
                            tableData.push(reportForm.value)
                        }else{
                            tableData[rowIndex.value] = reportForm.value
                        }
                        dialogAddForm.value = false
                    } else {
                        console.log('error submit!', fields)
                    }
                })
            }
            const editeRow = (index: number, row: User) =>{
                dialogAddForm.value = true
                rowIndex.value = index
                reportForm.value = JSON.parse(JSON.stringify(row))
                reportForm.value.editeTime = new Date().toLocaleString()
            }
            const deleteRow = (index)=>{
                tableData.splice( index,1)
            }
            const dialogColse = () =>{
                reportForm.value = {
                    type: '',
                    founder: '',
                    createTime: '',
                    editor: '',
                    editeTime: ''
                }
                rowIndex.value = -1
            }
            // 折线图
            const renderMenu = async (value: string) => {
@@ -124,6 +169,11 @@
                tableData,
                dialogAddForm,
                reportForm,
                ruleFormRef,
                addRules,
                dialogColse,
                editeRow,
                deleteRow,
                addReport,
                onSubmitAddForm,
                ...toRefs(state),
@@ -135,8 +185,15 @@
<style scoped lang="scss">
    $homeNavLengh: 8;
    .home-container {
        height: 100%;
        overflow: hidden;
        padding: 80px;
        padding: 20px;
        .homeCard{
            width: 100%;
            padding: 20px;
            background: #fff;
            border-radius: 4px;
        }
        .el-row{
            margin-bottom: 20px;
        }
src/views/specialWorkSystem/workApplyManagement/workApply/index.vue
@@ -1,6 +1,8 @@
<template>
    <div class="home-container">
        <el-form :model="form" label-width="120px">
        <el-scrollbar height="100%">
        <div class="homeCard">
        <el-form :model="form" label-width="150px">
            <el-row>
                <el-col :span="8">
                    <el-form-item label="申请部门">
@@ -12,10 +14,15 @@
                </el-col>
                <el-col :span="8">
                    <el-form-item label="申请人">
                        <el-select v-model="form.applyName" placeholder="请选择">
                            <el-option label="胡海涛" value="胡海涛" />
                            <el-option label="其他人" value="其他人" />
                        </el-select>
                        <el-input
                            v-model="form.applyName"
                            placeholder="请输入"
                            class="input-with-select"
                        >
                            <template #append>
                                <el-button :icon="Search" />
                            </template>
                        </el-input>
                    </el-form-item>
                </el-col>
            </el-row>
@@ -48,11 +55,332 @@
                </el-col>
            </el-row>
            <el-row>
                <el-col :span="8">
                    <el-button type="primary" size="default">添加作业人</el-button>
                <el-col :span="3"><el-button type="primary" size="default" @click="dialogAddWorker = true">添加作业人</el-button></el-col>
                <el-col :span="21">
                    <el-table :data="form.workerList" style="width: 100%">
                        <el-table-column type="index" label="序号" width="100"/>
                        <el-table-column prop="worker" label="作业人"/>
                        <el-table-column prop="role" label="作业人角色" width="180" />
                        <el-table-column prop="unit" label="所属单位" width="180" />
                        <el-table-column prop="certificate" label="证书名称" width="180" />
                        <el-table-column prop="certificateId" label="证书号" />
                        <el-table-column fixed="right" label="操作">
                            <template #default="scope">
                                <el-button link type="danger" size="small" @click="deleteRow(scope.$index)">删除</el-button>
                            </template>
                        </el-table-column>
                    </el-table>
                </el-col>
            </el-row>
            <el-row>
                <el-col :span="12">
                    <el-form-item label="作业地点">
                        <el-input
                            v-model="form.workLocation"
                            placeholder="请输入"
                            class="input-with-select"
                        >
                            <template #append>
                                <el-button :icon="Search" />
                            </template>
                        </el-input>
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="作业期限">
                        <el-date-picker
                            v-model="form.workTimeLine"
                            type="daterange"
                            unlink-panels
                            range-separator="至"
                            start-placeholder="开始日期"
                            end-placeholder="结束日期"
                            :shortcuts="shortcuts"
                        />
                    </el-form-item>
                </el-col>
            </el-row>
            <el-row>
                <el-col :span="12">
                    <el-form-item label="作业内容">
                        <el-input
                            v-model="form.workContent"
                            placeholder="请输入"
                            class="input-with-select"
                        >
                            <template #append>
                                <el-button :icon="Search" />
                            </template>
                        </el-input>
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="作业单位">
                        <el-input
                            v-model="form.workUnit"
                            placeholder="请输入"
                            class="input-with-select"
                        >
                            <template #append>选择作业单位</template>
                        </el-input>
                    </el-form-item>
                </el-col>
            </el-row>
            <el-row>
                <el-col :span="6">
                    <el-form-item label="作业负责人">
                        <el-input
                            v-model="form.responser"
                            placeholder="请输入"
                            class="input-with-select"
                        >
                            <template #append>
                                <el-button :icon="Search" />
                            </template>
                        </el-input>
                    </el-form-item>
                </el-col>
                <el-col :span="6">
                    <el-form-item label="监护人">
                        <el-input
                            v-model="form.monitor"
                            placeholder="请输入"
                            class="input-with-select"
                        >
                            <template #append>
                                <el-button :icon="Search" />
                            </template>
                        </el-input>
                    </el-form-item>
                </el-col>
                <el-col :span="6">
                    <el-form-item label="监护人岗位">
                        <el-input
                            v-model="form.monitorStation"
                            placeholder="请输入"
                            class="input-with-select"
                        >
                            <template #append>
                                <el-button :icon="Search" />
                            </template>
                        </el-input>
                    </el-form-item>
                </el-col>
            </el-row>
            <el-row>
                <el-col :span="12">
                    <el-form-item label="生产车间负责人">
                        <el-input
                            v-model="form.workhouseLeader"
                            placeholder="请输入"
                            class="input-with-select"
                        >
                            <template #append>
                                <el-button :icon="Search" />
                            </template>
                        </el-input>
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="申请日期">
                        <el-date-picker
                            size="large"
                            v-model="form.applyDate"
                            type="date"
                            placeholder="请选择"
                            style="width: 100%"
                        ></el-date-picker>
                    </el-form-item>
                </el-col>
            </el-row>
            <el-divider />
            <el-row>
                <el-col :span="24">
                    <el-form-item label="涉及的其他特殊作业">
                        <el-checkbox-group v-model="form.otherSpecialWorks">
                            <el-checkbox label="动火作业" />
                            <el-checkbox label="受限空间" />
                            <el-checkbox label="高处作业" />
                            <el-checkbox label="吊装作业" />
                            <el-checkbox label="临时用电" />
                            <el-checkbox label="设备检修" />
                            <el-checkbox label="盲板抽堵" />
                            <el-checkbox label="断路作业" />
                            <el-checkbox label="动土作业" />
                        </el-checkbox-group>
                    </el-form-item>
                </el-col>
            </el-row>
            <el-row>
                <el-col>
                    <el-form-item label="防护用品">
                        <el-cascader
                            v-model="form.protections"
                            :options="protectOption"
                            :props="{expandTrigger: 'hover'}"
                            @change="protectionsChange"
                            placeholder="请选择"
                            style="width: 100%"
                        />
                    </el-form-item>
                </el-col>
            </el-row>
            <el-row>
                <el-col :span="6"><el-button type="primary" size="default" @click="dialogAddFile = true">点击添加安全交底和风险告知书</el-button></el-col>
            </el-row>
            <el-row>
                <el-col :span="12">
                    <el-form-item label="实施安全教育人">
                        <el-input
                            v-model="form.safetyMan"
                            placeholder="请输入"
                            class="input-with-select"
                        >
                            <template #append>
                                <el-button :icon="Search" />
                            </template>
                        </el-input>
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="被教育人">
                        <el-input
                            v-model="form.educated"
                            placeholder="请输入"
                            class="input-with-select"
                        >
                            <template #append>
                                <el-button :icon="Search" />
                            </template>
                        </el-input>
                    </el-form-item>
                </el-col>
            </el-row>
            <el-divider />
            <el-row>
                <el-col :span="24" class="submitBtn">
                    <el-button type="primary" size="large" plain>发起申请</el-button>
                </el-col>
            </el-row>
        </el-form>
        </div>
        <el-dialog v-model="dialogAddWorker" title="添加作业人">
            <el-form :model="addWorkerForm" label-width="120px">
                <el-form-item label="作业人">
                    <el-input
                            v-model="addWorkerForm.worker"
                            placeholder="请输入"
                            class="input-with-select"
                    >
                        <template #append>
                            <el-button :icon="Search" />
                        </template>
                    </el-input>
                </el-form-item>
                <el-form-item label="作业人角色">
                    <el-input
                            v-model="addWorkerForm.role"
                            placeholder="请输入"
                            class="input-with-select"
                    >
                        <template #append>
                            <el-button :icon="Search" />
                        </template>
                    </el-input>
                </el-form-item>
                <el-form-item label="作业人角色">
                    <el-input
                            v-model="addWorkerForm.unit"
                            placeholder="请输入"
                            class="input-with-select"
                    >
                        <template #append>
                            <el-button :icon="Search" />
                        </template>
                    </el-input>
                </el-form-item>
                <el-form-item label="证书名称">
                    <el-input
                            v-model="addWorkerForm.certificate"
                            placeholder="请输入"
                            class="input-with-select"
                    >
                        <template #append>
                            <el-button :icon="Search" />
                        </template>
                    </el-input>
                </el-form-item>
                <el-form-item label="证书号">
                    <el-input
                            v-model="addWorkerForm.certificateId"
                            placeholder="请输入"
                            class="input-with-select"
                    >
                        <template #append>
                            <el-button :icon="Search" />
                        </template>
                    </el-input>
                </el-form-item>
                <el-form-item>
                    <el-button type="primary" @click="onSubmitAddForm" size="default">确认</el-button>
                    <el-button size="default" @click="cancleAdd">取消</el-button>
                </el-form-item>
            </el-form>
        </el-dialog>
        <el-dialog v-model="dialogAddFile" title="安全交底和风险告知">
            <el-form :model="saftyFileForm" label-width="0" ref="ruleFormRef" :rules="saftyFileRules">
                <el-form-item label="" prop="surrounding">
                    <div>1.作业许可范围及作业环境:</div>
                    <el-input
                            v-model="saftyFileForm.surrounding"
                            :rows="2"
                            type="textarea"
                            placeholder="请输入"
                    />
                </el-form-item>
                <el-form-item label="" prop="risk">
                    <div>2.作业风险:</div>
                    <el-input
                            v-model="saftyFileForm.risk"
                            :rows="2"
                            type="textarea"
                            placeholder="请输入"
                    />
                </el-form-item>
                <el-form-item label="" prop="protection">
                    <div>3.防范措施(工艺、设备、个体防护等):</div>
                    <el-input
                            v-model="saftyFileForm.protection"
                            :rows="2"
                            type="textarea"
                            placeholder="请输入"
                    />
                </el-form-item>
                <el-form-item label="" prop="emergency">
                    <div>4.应急措施:</div>
                    <el-input
                            v-model="saftyFileForm.emergency"
                            :rows="2"
                            type="textarea"
                            placeholder="请输入"
                    />
                </el-form-item>
                <el-form-item label="" prop="otherStuff">
                    <div>5.其他注意事项:</div>
                    <el-input
                            v-model="saftyFileForm.otherStuff"
                            :rows="2"
                            type="textarea"
                            placeholder="请输入"
                    />
                </el-form-item>
                <el-form-item>
                    <el-button type="primary" @click="onSubmitAddFile(ruleFormRef)" size="default">确认</el-button>
                    <el-button size="default" @click="cancleAddFile">取消</el-button>
                </el-form-item>
            </el-form>
        </el-dialog>
    </el-scrollbar>
    </div>
</template>
@@ -62,6 +390,8 @@
    import { initBackEndControlRoutes } from '/@/router/backEnd';
    import {useUserInfo} from "/@/stores/userInfo";
    import { Session } from '/@/utils/storage';
    import { Search } from '@element-plus/icons-vue'
    import type { FormInstance, FormRules } from 'element-plus'
    let global: any = {
        homeChartOne: null,
        homeChartTwo: null,
@@ -88,11 +418,141 @@
                applyName: '',
                level: '',
                riskIdentify: '',
                workWay: ''
                workWay: '',
                workerList: [],
                workLocation: '',
                workTimeLine: '',
                workContent: '',
                workUnit: '',
                responser: '',
                monitor: '',
                workMonitor: '',
                monitorStation: '',
                workhouseLeader: '',
                applyDate: '',
                otherSpecialWorks: [],
                protections: '',
                saftyFile: {},
                safetyMan: '',
                educated: ''
            })
            const dialogAddWorker = ref(false)
            const dialogAddFile = ref(false)
            const addWorkerForm = ref({
                worker: '',
                role: '',
                unit: '',
                certificate: '',
                certificateId: ''
            })
            const saftyFileForm = reactive({
                surrounding: '',
                risk: '',
                protection: '',
                emergency: '',
                otherStuff: ''
            })
            const shortcuts = [
                {
                    text: 'Last week',
                    value: () => {
                        const end = new Date()
                        const start = new Date()
                        start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
                        return [start, end]
                    },
                },
                {
                    text: 'Last month',
                    value: () => {
                        const end = new Date()
                        const start = new Date()
                        start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
                        return [start, end]
                    },
                },
                {
                    text: 'Last 3 months',
                    value: () => {
                        const end = new Date()
                        const start = new Date()
                        start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
                        return [start, end]
                    },
                },
            ]
            const protectOption = [
                {
                    value: 'guide',
                    label: 'Guide',
                    children: [
                        {
                            value: 'disciplines',
                            label: 'Disciplines',
                            children: [
                                {
                                    value: 'consistency',
                                    label: 'Consistency',
                                },
                                {
                                    value: 'feedback',
                                    label: 'Feedback',
                                }
                            ],
                        },
                        {
                            value: 'navigation',
                            label: 'Navigation',
                            children: [
                                {
                                    value: 'side nav',
                                    label: 'Side Navigation',
                                }
                            ],
                        },
                    ],
                }
            ]
            const ruleFormRef = ref<FormInstance>()
            const saftyFileRules = reactive<FormRules>({
                surrounding: [{required: true,message: '该选项不能为空'}],
                risk: [{required: true,message: '该选项不能为空'}],
                protection: [{required: true,message: '该选项不能为空'} ],
                emergency: [{required: true,message: '该选项不能为空'} ]
            })
            const protectionsChange = (value) => {
                console.log(value)
            }
            const onSubmit = () => {
                console.log('submit!')
            const onSubmitAddForm = () => {
                form.workerList.push(addWorkerForm.value)
                addWorkerForm.value = {
                    worker: '',
                    role: '',
                    unit: '',
                    certificate: '',
                    certificateId: ''
                }
                dialogAddWorker.value = false
            }
            const onSubmitAddFile = () =>{
            }
            const cancleAdd = ()=> {
                addWorkerForm.value = {
                    worker: '',
                    role: '',
                    unit: '',
                    certificate: '',
                    certificateId: ''
                }
                dialogAddWorker.value = false
            }
            const cancleAddFile = ()=>{
            }
            const deleteRow = (index) =>{
                form.workerList.splice( index,1)
            }
            // 折线图
            const renderMenu = async (value: string) => {
@@ -103,7 +563,21 @@
            return {
                renderMenu,
                form,
                onSubmit,
                Search,
                shortcuts,
                protectOption,
                dialogAddWorker,
                dialogAddFile,
                addWorkerForm,
                saftyFileForm,
                ruleFormRef,
                saftyFileRules,
                cancleAddFile,
                deleteRow,
                cancleAdd,
                onSubmitAddForm,
                onSubmitAddFile,
                protectionsChange,
                ...toRefs(state),
            };
        },
@@ -111,10 +585,16 @@
</script>
<style scoped lang="scss">
    $homeNavLengh: 8;
    .home-container {
        height: 100%;
        overflow: hidden;
        padding: 40px;
        padding: 20px;
        .homeCard{
            width: 100%;
            padding: 20px;
            background: #fff;
            border-radius: 4px;
        }
        .el-row{
            margin-bottom: 20px;
        }
@@ -122,9 +602,24 @@
            margin-bottom: 0;
        }
        .el-col{
            display: flex;
            align-items: center;
            margin-bottom: 10px;
        }
        .el-input{
            width: 100% !important;
        }
        .el-date-editor::v-deep{
            width: 100%;
        }
        .el-select{
            width: 100%;
        }
        .el-cascader{
            width: 100% !important;
        }
        .submitBtn{
            display: flex;
            justify-content: center;
        }
    }
</style>
src/views/specialWorkSystem/workPlan/workAppointSummary/index.vue
@@ -1,6 +1,8 @@
<template>
    <div class="home-container">
        <el-scrollbar height="100%">
        <el-row>
            <div class="homeCard">
            <el-col :span="6">
                <div class="grid-content topInfo">
                    <div>预约时间:</div>
@@ -31,12 +33,14 @@
            </el-col>
            <el-col :span="12" class="topBtns">
                <div class="grid-content topInfo">
                    <div style="margin-right: 20px"><el-button type="primary" plain size="default">查询历史</el-button></div>
                    <div><el-button type="primary" @click="dialogChartsVisible = true" size="default">查看统计图表</el-button></div>
                    <div style="margin-right: 20px"><el-button type="primary" plain>查询历史</el-button></div>
                    <div><el-button type="primary" @click="dialogChartsVisible = true">查看统计图表</el-button></div>
                </div>
            </el-col>
            </div>
        </el-row>
        <el-row>
            <div class="homeCard">
            <el-table :data="tableData" border style="width: 100%">
                <el-table-column prop="id" label="编号" width="180" />
                <el-table-column prop="time" label="预约时间" width="180" />
@@ -55,6 +59,7 @@
                    </template>
                </el-table-column>
            </el-table>
            </div>
        </el-row>
        <el-dialog v-model="dialogChartsVisible" title="统计图表">
            <el-row>
@@ -65,7 +70,7 @@
                            v-model="dateRange"
                            type="daterange"
                            unlink-panels
                            range-separator="To"
                            range-separator="至"
                            start-placeholder="Start date"
                            end-placeholder="End date"
                            :shortcuts="shortcuts"
@@ -89,6 +94,7 @@
            </el-row>
            <div ref="myChart" style="width: 100%;height:400px;"></div>
        </el-dialog>
        </el-scrollbar>
    </div>
</template>
@@ -427,19 +433,24 @@
<style scoped lang="scss">
    $homeNavLengh: 8;
    .home-container {
        height: 100%;
        overflow: hidden;
        padding: 20px 40px;
        padding: 20px;
        .el-row{
            margin-bottom: 20px;
        }
        .el-row:last-child {
            margin-bottom: 0;
        }
        .el-col{
        .homeCard{
            width: 100%;
            display: flex;
            align-items: center;
            margin: 40px 0;
            padding: 20px;
            background: #fff;
            border-radius: 4px;
        }
        .grid-content{
            display: flex;
            align-items: center;
src/views/specialWorkSystem/workPlan/workReservation/index.vue
@@ -1,6 +1,8 @@
<template>
    <div class="home-container">
        <el-scrollbar height="100%">
        <el-row>
            <div class="homeCard">
            <el-col :span="6">
                <div class="grid-content topInfo">
                    <div>当前所属部门:</div>
@@ -41,8 +43,10 @@
                    <div><el-button type="success" @click="dialogFormVisible = true">新增预约</el-button></div>
                </div>
            </el-col>
        </div>
        </el-row>
        <el-row>
            <div class="homeCard">
            <el-table :data="tableData" border style="width: 100%">
                <el-table-column prop="id" label="编号" width="120" />
                <el-table-column prop="time" label="预约时间" width="150" />
@@ -61,6 +65,7 @@
                    </template>
                </el-table-column>
            </el-table>
            </div>
        </el-row>
        <el-dialog v-model="dialogFormVisible" title="新增预约">
            <el-form :model="reservationForm">
@@ -92,6 +97,7 @@
              </span>
            </template>
        </el-dialog>
        </el-scrollbar>
    </div>
</template>
@@ -219,18 +225,22 @@
<style scoped lang="scss">
    $homeNavLengh: 8;
    .home-container {
        height: 100%;
        overflow: hidden;
        padding: 20px 40px;
        padding: 20px;
        .el-row{
            margin-bottom: 20px;
        }
        .el-row:last-child {
        .el-row:last-of-type {
            margin-bottom: 0;
        }
        .el-col{
        .homeCard{
            width: 100%;
            display: flex;
            align-items: center;
            margin: 40px 0 20px;
            padding: 20px;
            background: #fff;
            border-radius: 4px;
        }
        .grid-content{
            align-items: center;