Admin
2022-08-18 ba9d970c2c52185e54217cbb736d879c2493ed9b
Default Changelist
已修改2个文件
已添加1个文件
已删除1个文件
1161 ■■■■ 文件已修改
src/api/specialWorkSystem/workApply/fire/index.ts 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/specialWorkSystem/workApply/index.ts 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/specialWorkSystem/workApplyManage/myJobApply/index.vue 485 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/specialWorkSystem/workApplyManage/workTicket/index.vue 621 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/specialWorkSystem/workApply/fire/index.ts
文件已删除
src/api/specialWorkSystem/workApply/index.ts
对比新文件
@@ -0,0 +1,41 @@
import request from '/@/utils/request';
export function workApplyApi() {
    return {
        // 分页获取申请列表
        getApplyListtPage: (data: object) => {
            return request({
                url: import.meta.env.VITE_API_URL + `/work/apply/applying/page/list`,
                method: 'post',
                data: data
            });
        },
        // 动火申请
        postFireApply: (data: object) => {
            return request({
                url: import.meta.env.VITE_API_URL + `/work/apply/hot`,
                method: 'post',
                data: data
            });
        },
        // 取消申请
        cancelApply: (data: object) => {
            return request({
                url: import.meta.env.VITE_API_URL + `/work/apply/cancel`,
                method: 'post',
                data: data
            });
        },
        // 查询进度
        getStatus: (data: object) => {
            return request({
                url: import.meta.env.VITE_API_URL + `/work/apply/applicant/approved/view`,
                method: 'post',
                data: data
            });
        },
    };
}
src/views/specialWorkSystem/workApplyManage/myJobApply/index.vue
@@ -1,7 +1,7 @@
<template>
    <div class="home-container">
        <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
            <el-tab-pane label="申请中" name="Applying">
            <el-tab-pane label="申请中" name="1">
                <div style="height: 100%">
                    <el-row class="homeCard">
                            <el-col :span="8">
@@ -16,11 +16,11 @@
                        <div class="main-card">
                            <el-row class="cardTop">
                                <el-col :span="12" class="mainCardBtn">
                                    <el-button type="primary" :icon="Plus" size="default">申请</el-button>
                                    <el-button type="primary" :icon="Plus" size="default" @click="toApply()">申请</el-button>
<!--                                    <el-button type="danger" :icon="Delete" size="default">删除</el-button>-->
<!--                                    <el-button type="success" size="default">设置分类</el-button>-->
                                </el-col>
                                <el-button type="primary" :icon="Refresh" size="default"/>
                                <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()"/>
                            </el-row>
                            <el-table
                                    ref="multipleTableRef"
@@ -28,71 +28,160 @@
                                    style="width: 100%"
                                    height="calc(100% - 100px)"
                                    :header-cell-style="{background: '#fafafa'}"
                                    @selection-change="handleSelectionChange"
                            >
                                <el-table-column type="selection" width="55" />
                                <el-table-column type="index" label="作业证编号" width="200"/>
                                <el-table-column property="level" label="作业证等级" width="180" sortable />
                                <el-table-column property="applyDate" label="申请日期" sortable />
                                <el-table-column property="name" label="申请人" width="180"/>
                                <el-table-column property="department" label="申请部门" width="180" />
                                <el-table-column property="workPermitNo" label="作业申请单号" width="180"/>
                                <el-table-column property="applyUname" label="申请人"/>
                                <el-table-column property="depName" label="部门名称"/>
                                <el-table-column property="operators" label="作业人"/>
                                <el-table-column property="workTypeDesc" label="作业类型"/>
                                <el-table-column property="workLevelDesc" label="作业等级"/>
                                <el-table-column property="applyTime" label="申请时间" width="180"/>
                                <el-table-column label="申请状态" width="180">
                                    <template #default="scope">
                                        <el-tag type="success">{{ scope.row.status }}</el-tag>
                                        <el-tag type="success">{{ scope.row.statusDesc}}</el-tag>
                                    </template>
                                </el-table-column>
                                <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="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button>
                                        <el-button link type="success" size="small" :icon="View" @click="viewStatus(scope.row)">进度</el-button>
                                        <el-button link type="warning" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">取消</el-button>
                                    </template>
                                </el-table-column>
                            </el-table>
                            <div class="pageBtn">
                                <el-pagination
                                        v-model:currentPage="currentPage"
                                        v-model:page-size="pageSize"
                                        :page-sizes="[10, 15]"
                                        small=false
                                        background
                                        layout="total, sizes, prev, pager, next, jumper"
                                        :total="100"
                                        @size-change="handleSizeChange"
                                        @current-change="handleCurrentChange"
                                />
                                <el-pagination v-model:currentPage="pageIndex1" v-model:page-size="pageSize1" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize1" @size-change="handleSizeChange1" @current-change="handleCurrentChange1" />
                            </div>
                        </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.level"
                                    readonly
                            />
                        </el-form-item>
                        <el-form-item label="申请日期">
                            <el-input
                                    v-model="details.applyDate"
                                    v-model="details.workPermitNo"
                                    readonly
                            />
                        </el-form-item>
                        <el-form-item label="申请人">
                            <el-input
                                    v-model="details.name"
                                    v-model="details.applyUname"
                                    readonly
                            />
                        </el-form-item>
                        <el-form-item label="申请部门">
                        <el-form-item label="部门名称">
                            <el-input
                                    v-model="details.department"
                                    v-model="details.depName"
                                    readonly
                            />
                        </el-form-item>
                        <el-form-item label="状态">
                        <el-form-item label="作业人">
                            <el-input
                                    v-model="details.status"
                                    v-model="details.operators"
                                    readonly
                                    type="textarea"
                            />
                        </el-form-item>
                        <el-form-item label="作业类型">
                            <el-input
                                    v-model="details.workTypeDesc"
                                    readonly
                            />
                        </el-form-item>
                        <el-form-item label="作业等级">
                            <el-input
                                    v-model="details.workLevelDesc"
                                    readonly
                            />
                        </el-form-item>
                        <el-form-item label="期望开始时间">
                            <el-input
                                    v-model="details.expStartTime"
                                    readonly
                            />
                        </el-form-item>
                        <el-form-item label="期望结束时间">
                            <el-input
                                    v-model="details.expEndTime"
                                    readonly
                            />
                        </el-form-item>
                        <el-form-item label="申请时间">
                            <el-input
                                    v-model="details.applyTime"
                                    readonly
                            />
                        </el-form-item>
                        <el-form-item label="当前状态">
                            <el-input
                                    v-model="details.statusDesc"
                                    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="dialogStatus" title="作业申请进度">
                    <el-form :model="statusInfo" label-width="120px">
                        <el-form-item label="作业申请单号">
                            <el-input
                                    v-model="details.workPermitNo"
                                    readonly
                            />
                        </el-form-item>
                        <el-form-item label="申请人">
                            <el-input
                                    v-model="details.applyUname"
                                    readonly
                            />
                        </el-form-item>
                        <el-form-item label="部门名称">
                            <el-input
                                    v-model="details.depName"
                                    readonly
                            />
                        </el-form-item>
                        <el-form-item label="作业人">
                            <el-input
                                    v-model="details.operators"
                                    readonly
                            />
                        </el-form-item>
                        <el-form-item label="作业类型">
                            <el-input
                                    v-model="details.workTypeDesc"
                                    readonly
                            />
                        </el-form-item>
                        <el-form-item label="作业等级">
                            <el-input
                                    v-model="details.workLevelDesc"
                                    readonly
                            />
                        </el-form-item>
                        <el-form-item label="期望开始时间">
                            <el-input
                                    v-model="details.expStartTime"
                                    readonly
                            />
                        </el-form-item>
                        <el-form-item label="期望结束时间">
                            <el-input
                                    v-model="details.expEndTime"
                                    readonly
                            />
                        </el-form-item>
                        <el-form-item label="申请时间">
                            <el-input
                                    v-model="details.applyTime"
                                    readonly
                            />
                        </el-form-item>
                        <el-form-item label="当前状态">
                            <el-input
                                    v-model="details.statusDesc"
                                    readonly
                            />
                        </el-form-item>
@@ -102,16 +191,16 @@
                    </el-form>
                </el-dialog>
                <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear">
                    <span>您确定要删除该条记录吗?</span>
                    <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" v-throttle>确认</el-button>
                    <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button>
                          </span>
                    </template>
                </el-dialog>
            </el-tab-pane>
            <el-tab-pane label="已通过" name="passed">
            <el-tab-pane label="已通过" name="2">
                <div style="height: 100%">
                    <el-row class="homeCard">
                        <el-col :span="8">
@@ -124,14 +213,6 @@
                    </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">申请</el-button>-->
<!--                                    <el-button type="danger" :icon="Delete" size="default">删除</el-button>-->
<!--                                    <el-button type="success" size="default">设置分类</el-button>-->
<!--                                </el-col>-->
<!--                                <el-button type="primary" size="default" :icon="Refresh" />-->
<!--                            </el-row>-->
                            <el-table
                                    ref="multipleTableRef"
                                    :data="passedData"
@@ -153,17 +234,7 @@
                                </el-table-column>
                            </el-table>
                            <div class="pageBtn">
                                <el-pagination
                                        v-model:currentPage="currentPage"
                                        v-model:page-size="pageSize"
                                        :page-sizes="[10, 15]"
                                        small=false
                                        background
                                        layout="total, sizes, prev, pager, next, jumper"
                                        :total="100"
                                        @size-change="handleSizeChange"
                                        @current-change="handleCurrentChange"
                                />
                                <el-pagination v-model:currentPage="pageIndex2" v-model:page-size="pageSize2" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize2" @size-change="handleSizeChange2" @current-change="handleCurrentChange2" />
                            </div>
                        </div>
                    </div>
@@ -173,110 +244,242 @@
    </div>
</template>
<script lang="ts" setup>
    import { toRefs, reactive, defineComponent, ref } from 'vue';
<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 { useUserInfo } from '/@/stores/userInfo';
    import { Session } from '/@/utils/storage';
    import { Plus, Delete, Refresh } from '@element-plus/icons-vue'
    import { ElTable } from 'element-plus'
    import { useRouter } from 'vue-router';
    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 { workApplyApi } from '/@/api/specialWorkSystem/workApply';
    import type { TabsPaneContext } from 'element-plus'
    let global: any = {
        homeChartOne: null,
        homeChartTwo: null,
        homeCharThree: null,
        dispose: [null, '', undefined],
    // 定义接口来定义对象的类型
    interface stateType {
        applyData: Array<string>;
        workTimeList: Array<string>;
        multipleSelection: Array<any>;
        deleteArr: Array<any>;
        dialogDetails: boolean;
        dialogStatus: boolean;
        deleteDialog: boolean;
        pageIndex1: number;
        pageSize1: number;
        chosenIndex: null | number;
        deleteId: null | number;
        searchWord: string;
        totalSize1: number;
        activeName:string;
        addRecord: {};
        details: {};
        statusInfo:{}
    }
    export default {
        name: 'myApply',
        components: {},
        setup() {
            const userInfo = useUserInfo();
            const { userInfos } = storeToRefs(userInfo);
            const router = useRouter();
            const state = reactive<stateType>({
                pageIndex1: 1,
                pageSize1: 10,
                totalSize1: 0,
                activeName: '1',
                chosenIndex: null,
                searchWord: '',
                applyData: [],
                workTimeList: [],
                multipleSelection: [],
                dialogDetails: false,
                dialogStatus: false,
                deleteDialog: false,
                addRecord: {},
                details: {},
                statusInfo:{},
                deleteId: null,
                deleteArr: []
            });
            interface User {
                name: string;
                list: [];
                info: string;
            }
            // 页面载入时执行方法
            onMounted(() => {
                getListByPage();
            });
            // 刷新
            const reLoadData = async () => {
                getListByPage();
    };
    interface stateType {
        homeOne: Array <type>
            // 填写表单
            const toApply =()=>{
                router.push({
                    path: 'workTicket',
                });
    }
    interface type {
    }
    interface User {
        num: string
        level: string
        applyDate: string
        name: string
        department: string
        status: string
    }
    const userInfo = useUserInfo()
    const { userInfos } = storeToRefs(userInfo);
    const activeName = ref('Applying')
    const handleClick = (tab: TabsPaneContext, event: Event) => {
        console.log(tab, event)
    }
    const multipleTableRef = ref<InstanceType<typeof ElTable>>()
    const multipleSelection = ref<User[]>([])
    const handleSelectionChange = (val: User[]) => {
        multipleSelection.value = val
    }
    const currentPage = ref(1)
    const pageSize = ref(10)
    const handleSizeChange = (val: number) => {
        console.log(`${val} items per page`)
    }
    const handleCurrentChange = (val: number) => {
        console.log(`current page: ${val}`)
    }
    const applyData = reactive([
        {
            level: '等级一',
            applyDate: '2022-07-27 14:19:33',
            name: '张三',
            department: '部门一',
            status: '审核中'
        },
        {
            level: '等级一',
            applyDate: '2022-07-27 14:19:33',
            name: '张三',
            department: '部门一',
            status: '审核中'
        },
        {
            level: '等级一',
            applyDate: '2022-07-27 14:19:33',
            name: '张三',
            department: '部门一',
            status: '审核中'
            // 分页获取工作时间组列表
            const getListByPage = async () => {
                const data = { pageSize: state.pageSize1, pageIndex: state.pageIndex1, searchParams: { name: state.searchWord } };
                let res = await workApplyApi().getApplyListtPage(data);
                if (res.data.code === '200') {
                    state.applyData = JSON.parse(JSON.stringify(res.data.data))
                    state.applyData = state.applyData.map((item) => {
                        if (item.operators == null || item.operators == []){
                            item.operators = [];
                        } else {
                            item.operators = Array.from(item.operators, ({ operatorUname }) => operatorUname);
        }
    ])
    const chosenIndex = ref(-1)
    const passedData: User[] = []
    const dialogDetails = ref(false)
    const details = ref({})
    const deleteDialog = ref(false)
                        return item;
                    });
                    state.totalSize1 = 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 searchRecord = async () => {
                if (state.searchWord == '') {
                    ElMessage({
                        type: 'warning',
                        message: '请输入查询关键词'
                    });
                } else {
                    getListByPage();
                }
            };
            const clearSearch = async () => {
                state.searchWord = '';
                getListByPage();
            };
            // 查看进度
            const viewStatus = (row)=>{
                getStatus({ workApplyId: row.workApplyId });
                state.dialogStatus = true
            };
            // 查询进度方法
            const getStatus = async (data: any) => {
                let res = await workApplyApi().getStatus(data);
                if (res.data.code === '200') {
                    state.statusInfo = JSON.parse(JSON.stringify(res.data.data))
                    console.log(state.statusInfo,'info')
                } else {
                    ElMessage({
                        type: 'warning',
                        message: res.data.msg
                    });
                }
            };
            const deleteRecordBtn = (row) => {
                state.deleteId = row.workApplyId;
                state.deleteDialog = true;
            };
            // 取消申请方法
            const deleteRecord = async (data: any) => {
                let res = await workApplyApi().cancelApply(data);
                if (res.data.code === '200') {
                    ElMessage({
                        type: 'success',
                        message: res.data.msg
                    });
                    getListByPage();
                } else {
                    ElMessage({
                        type: 'warning',
                        message: res.data.msg
                    });
                }
            };
            const conFirmDelete = () => {
                deleteRecord({ workApplyId: state.deleteId });
                state.deleteDialog = false;
            };
            const handleSizeChange1 = (val: number) => {
                state.pageSize1 = val;
                getListByPage();
            };
            const handleCurrentChange1 = (val: number) => {
                state.pageIndex1 = val;
                getListByPage();
            };
    // 查看记录
    const viewRecord = (row) =>{
        details.value = JSON.parse(JSON.stringify(row))
        dialogDetails.value = true
    }
                state.details = JSON.parse(JSON.stringify(row));
                state.dialogDetails = true;
            };
    // 删除记录
    const deleteRecord = (index) =>{
        chosenIndex.value = index
        deleteDialog.value = true
    }
    // 弹窗确认删除记录
    const conFirmDelete = ()=> {
        applyData.splice(chosenIndex.value,1)
        deleteDialog.value = false
    }
    // 折线图
    const renderMenu = async (value: string) => {
        Session.set('projectId',value)
        userInfos.value.projectId = value
                Session.set('projectId', value);
                userInfos.value.projectId = value;
        await initBackEndControlRoutes();
    };
            return {
                View,
                Edit,
                Delete,
                Refresh,
                Plus,
                reLoadData,
                toApply,
                handleClick,
                toNames,
                searchRecord,
                clearSearch,
                viewRecord,
                viewStatus,
                deleteRecordBtn,
                conFirmDelete,
                getListByPage,
                handleSizeChange1,
                handleCurrentChange1,
                ...toRefs(state)
            };
        }
    };
</script>
<style scoped lang="scss">
src/views/specialWorkSystem/workApplyManage/workTicket/index.vue
@@ -1,47 +1,45 @@
<template>
    <div class="home-container">
        <div style="height: 100%">
        <el-form :model="form" label-width="150px" :rules="applyRules" ref="ruleFormRef2">
        <el-form :model="form" label-width="120px" :rules="applyRules" ref="ruleFormRef">
            <div class="homeCard">
            <el-row>
                <el-col :span="12">
                    <el-form-item label="作业人" prop="operatorUid">
                        <el-input
                                v-model="form.operatorUid"
                                placeholder="请输入"
                                class="input-with-select"
                        >
                            <template #append>
                                <el-button :icon="Search" />
                            </template>
                        </el-input>
                    <el-form-item label="作业人" prop="operatorUids">
                        <el-select v-model="form.operatorUids" multiple>
                            <el-option
                                    v-for="item in workerList"
                                    :key="item.value"
                                    :label="item.label"
                                    :value="item.value"
                            />
                        </el-select>
                    </el-form-item>
                </el-col>
            </el-row>
            <el-row>
                <el-col :span="12">
                    <el-form-item label="作业地点" prop="workLocation">
                        <el-input
                            v-model="form.workLocation"
                            placeholder="请输入"
                            class="input-with-select"
                        >
                            <template #append>
                                <el-button :icon="Search" />
                            </template>
                        </el-input>
                    <el-form-item label="作业等级" prop="workLevel">
                        <el-select v-model="form.workLevel">
                            <el-option
                                    v-for="item in workLevelList"
                                    :key="item.value"
                                    :label="item.label"
                                    :value="item.value"
                            />
                        </el-select>
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="作业期限" prop="workTimeLine">
                    <el-form-item label="作业时间" prop="workTimeLine">
                        <el-date-picker
                            v-model="form.workTimeLine"
                            type="daterange"
                            unlink-panels
                                format="YYYY-MM-DD HH:mm"
                                value-format="YYYY-MM-DD HH:mm:00"
                                type="datetimerange"
                            range-separator="至"
                            start-placeholder="开始日期"
                            end-placeholder="结束日期"
                            :shortcuts="shortcuts"
                                start-placeholder="开始时间"
                                end-placeholder="结束时间"
                        />
                    </el-form-item>
                </el-col>
@@ -51,279 +49,52 @@
                    <el-form-item label="作业内容" prop="workContent">
                        <el-input
                            v-model="form.workContent"
                            placeholder="请输入"
                            class="input-with-select"
                        >
                            <template #append>
                                <el-button :icon="Search" />
                            </template>
                        </el-input>
                                autosize
                                type="textarea"
                                placeholder="请输入作业内容"
                        />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="作业单位" prop="workUnit">
                    <el-form-item label="作业地址" prop="workLocation">
                        <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="8">
                    <el-form-item label="作业负责人" prop="responsor">
                        <el-input
                            v-model="form.responsor"
                            placeholder="请输入"
                            class="input-with-select"
                        >
                            <template #append>
                                <el-button :icon="Search" />
                            </template>
                        </el-input>
                    </el-form-item>
                </el-col>
                <el-col :span="8">
                    <el-form-item label="监护人" prop="monitor">
                        <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="8">
                    <el-form-item label="监护人岗位" prop="monitorStation">
                        <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="生产车间负责人" prop="workhouseLeader">
                        <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="申请日期" prop="applyDate">
                        <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>
            </div>
            <div class="homeCard">
            <el-row>
                <el-col :span="24">
                    <el-form-item label="涉及的其他特殊作业" prop="otherSpecialWorks">
                        <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="防护用品" prop="protections">
                        <el-cascader
                            v-model="form.protections"
                            :options="protectOption"
                            :props="{expandTrigger: 'hover'}"
                            @change="protectionsChange"
                            placeholder="请选择"
                            style="width: 100%"
                                v-model="form.workLocation"
                                autosize
                                type="textarea"
                                placeholder="请输入作业地址"
                        />
                    </el-form-item>
                </el-col>
            </el-row>
            <el-row style="justify-content: center">
                <el-button type="primary" size="default" @click="dialogAddFile = true">点击添加安全交底和风险告知书</el-button>
            </el-row>
            <el-row>
                <el-col :span="12">
                    <el-form-item label="实施安全教育人" prop="safetyMan">
                    <el-form-item label="动火方式" prop="workDetail.hotMethod">
                        <el-input
                            v-model="form.safetyMan"
                            placeholder="请输入"
                            class="input-with-select"
                        >
                            <template #append>
                                <el-button :icon="Search"/>
                            </template>
                        </el-input>
                                v-model="form.workDetail.hotMethod"
                                autosize
                                type="textarea"
                                placeholder="请输入动火方式"
                        />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="被教育人" prop="educated">
                        <el-input
                            v-model="form.educated"
                            placeholder="请输入"
                            class="input-with-select"
                        >
                            <template #append>
                                <el-button :icon="Search" />
                            </template>
                        </el-input>
                    <el-form-item label="关联作业" prop="workDetail.otherSpecialWork">
                        <el-select v-model="form.workDetail.otherSpecialWork" multiple>
                            <el-option
                                    v-for="item in otherWorkList"
                                    :key="item.value"
                                    :label="item.label"
                                    :value="item.value"
                            />
                        </el-select>
                    </el-form-item>
                </el-col>
            </el-row>
            </div>
        </el-form>
        <div class="applyBtn">
            <el-button type="primary" size="large" plain @click="handleApply(ruleFormRef2)">发起申请</el-button>
            <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">发起申请</el-button>
        </div>
        <el-dialog v-model="dialogAddWorker" title="添加作业人">
            <el-form :model="addWorkerForm" label-width="120px" :rules="addWorkerRules" ref='ruleFormRef3'>
                <el-form-item label="作业人" prop="worker">
                    <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="作业人角色" prop="role">
                    <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="作业人角色" prop="unit">
                    <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="证书名称" prop="certificate">
                    <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="证书号" prop="certificateId">
                    <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(ruleFormRef3)" 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>
    </div>
    </div>
</template>
@@ -337,11 +108,15 @@
    import { Search } from '@element-plus/icons-vue'
    import { ElMessage } from 'element-plus'
    import type { FormInstance, FormRules } from 'element-plus'
    import { fireApplyApi } from '/@/api/specialWorkSystem/workApply/fire';
    import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
    interface stateType {
        form: Object
        form: Object,
        workerList: Array<any>,
        workTypeList: Array<any>,
        workLevelList: Array<any>,
        otherWorkList: Array<any>
    }
    export default defineComponent({
        name: 'workTicket',
@@ -351,8 +126,8 @@
            const { userInfos } = storeToRefs(userInfo);
            const state  = reactive<stateType>({
                form: {
                    operatorUid: [],
                    workType: null,
                    operatorUids: [],
                    workType: 1,
                    workLevel: null,
                    workContent: '',
                    workLocation: '',
@@ -360,170 +135,124 @@
                        hotMethod: '',
                        otherSpecialWork: []
                    },
                    workTimeLine: [],
                    expStartTime: '',
                    expEndTime: ''
                },
                workerList:[
                    {
                        label: "张三",
                        value: 53
                    },
                    {
                        label: "李四",
                        value: 54
                    },
                    {
                        label: "测试一",
                        value: 55
                    },
                    {
                        label: "测试二",
                        value: 56
                    }
                ],
                workTypeList: [
                    {
                        label: "类型一",
                        value: 1
                    },
                    {
                        label: "类型二",
                        value: 2
                    }
                ],
                workLevelList: [
                    {
                        label: "一级动火作业",
                        value: 1
                    },
                    {
                        label: "二级动火作业",
                        value: 2
                    },
                    {
                        label: "特级动火作业",
                        value: 3
                    }
                ],
                otherWorkList: [
                    {
                        label: "动火作业",
                        value: 1
                    },
                    {
                        label: "受限空间作业",
                        value: 2
                    },
                    {
                        label: "吊装作业",
                        value: 3
                    },
                    {
                        label: "动土作业",
                        value: 4
                    },
                    {
                        label: "断路作业",
                        value: 5
                    },
                    {
                        label: "高处作业",
                        value: 6
                    },
                    {
                        label: "临时用电作业",
                        value: 7
                    },
                    {
                        label: "盲板抽堵作业",
                        value: 8
                    }
                ]
            });
            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 ruleFormRef2 = ref<FormInstance>()
            const ruleFormRef3 = ref<FormInstance>()
            const addWorkerRules = reactive<FormRules>({
                worker: [{required: true,message: '此处不能为空'}],
                role: [{required: true,message: '此处不能为空'}],
                unit: [{required: true,message: '此处不能为空'}],
                certificate: [{required: true,message: '此处不能为空'}],
                certificateId: [{required: true,message: '此处不能为空'}]
            })
            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 onSubmitAddForm = async (formEl: FormInstance | undefined) => {
            const applyRules = reactive<FormRules>({
                operatorUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
                workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
                workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
                workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
                workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
                workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
                "workDetail.hotMethod": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
                "workDetail.otherSpecialWork": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
            });
            const submitForm = async (formEl: FormInstance | undefined) => {
                if (!formEl) return
                await formEl.validate((valid, fields) => {
                await formEl.validate(async (valid, fields) => {
                    if (valid) {
                        form.workerList.unshift(addWorkerForm.value)
                        addWorkerForm.value = {
                            worker: '',
                            role: '',
                            unit: '',
                            certificate: '',
                            certificateId: ''
                        state.form.expStartTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[0]
                        state.form.expEndTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[1]
                        let { workTimeLine, ...data } = JSON.parse(JSON.stringify(state.form))
                        data.workDetail.otherSpecialWork = data.workDetail.otherSpecialWork.join(',')
                        console.log(data,'data')
                        const res = await workApplyApi().postFireApply(data)
                        if (res.data.code === '200') {
                                ElMessage({
                                    type: 'success',
                                    message: '提交成功!'
                                });
                                formEl.resetFields()
                        } else {
                            ElMessage({
                                type: 'warning',
                                message: res.data.msg
                            });
                        }
                        dialogAddWorker.value = false
                    } else {
                        console.log('error submit!', fields)
                    }
                })
            }
            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 isValid = ref(false)
            const additionalForm = ref(null)
            const handleApply = async (formEl: FormInstance | undefined) =>{
                if (!formEl) return
                const flag = additionalForm.value.validateForm()
                await flag.then((res)=>{
                    isValid.value = res
                })
                await formEl.validate((valid, fields) => {
                    console.log(valid,'and',isValid.value)
                    if (valid && isValid.value) {
                        console.log('submit',form,fields)
                        ElMessage({
                            message: '提交成功!',
                            type: 'success',
                        })
                    } else {
                        // console.log('error submit!',form,fields)
                        ElMessage({
                            message: '表单未填写完整',
                            type: 'error',
                        })
                    }
                })
            }
            // 折线图
            const renderMenu = async (value: string) => {
@@ -533,28 +262,10 @@
            };
            return {
                renderMenu,
                form,
                Search,
                shortcuts,
                protectOption,
                dialogAddWorker,
                dialogAddFile,
                addWorkerForm,
                saftyFileForm,
                ruleFormRef,
                ruleFormRef2,
                ruleFormRef3,
                additionalForm,
                addWorkerRules,
                saftyFileRules,
                isValid,
                handleApply,
                cancleAddFile,
                deleteRow,
                cancleAdd,
                onSubmitAddForm,
                onSubmitAddFile,
                protectionsChange,
                applyRules,
                submitForm,
                ...toRefs(state),
            };
        },