From 9f0eeddb0d3977dd39f3e317fedc50faf389c375 Mon Sep 17 00:00:00 2001
From: Your Name <123456>
Date: 星期三, 31 八月 2022 17:09:40 +0800
Subject: [PATCH] 特殊作业

---
 src/api/approveRule.js                                                                   |   62 +
 src/views/specialWorkManage/workFlow/approveBasic/components/approveBasicDialog.vue      |  187 ++++
 src/assets/style/index.css                                                               |   15 
 src/views/specialWorkManage/workFlow/approveRule/index.vue                               |  409 ++++++++
 src/views/specialWorkManage/workTicket/myApproval/index.vue                              |   13 
 src/api/safetyAction.js                                                                  |   62 +
 src/views/specialWorkManage/foundationSet/index.vue                                      |   13 
 src/views/roleManage/menu/index.vue                                                      |    2 
 src/views/specialWorkManage/workTicket/index.vue                                         |   13 
 src/views/specialWorkManage/workFlow/approveRule/components/approveItemDialog.vue        |  143 +++
 src/views/specialWorkManage/workFlow/approveRule/components/approveLevelDialog.vue       |  246 +++++
 src/views/specialWorkManage/workTicket/workApply/index.vue                               |   13 
 src/views/specialWorkManage/foundationSet/safetyAction/components/safetyActionDialog.vue |  166 +++
 src/api/approveBasic.js                                                                  |   63 +
 src/main.js                                                                              |    2 
 src/views/specialWorkManage/workFlow/index.vue                                           |   13 
 src/views/doublePreventAction/hiddenDanger/hiddenDangerReform/accept/index.vue           |   31 
 src/views/specialWorkManage/foundationSet/safetyAction/index.vue                         |  367 +++++++
 src/views/doublePreventAction/hiddenDanger/hiddenDangerReform/rectify/index.vue          |   18 
 src/views/specialWorkManage/workFlow/approveRule/components/approveRuleDialog.vue        |  484 ++++++++++
 src/views/specialWorkManage/workFlow/approveBasic/index.vue                              |  365 +++++++
 src/views/doublePreventAction/hiddenDanger/hiddenDangerReform/report/index.vue           |   18 
 src/views/specialWorkManage/workTicket/myJobApply/index.vue                              |   13 
 23 files changed, 2,710 insertions(+), 8 deletions(-)

diff --git a/src/api/approveBasic.js b/src/api/approveBasic.js
new file mode 100644
index 0000000..c7c9a97
--- /dev/null
+++ b/src/api/approveBasic.js
@@ -0,0 +1,63 @@
+import request from '@/utils/request'
+import { getToken } from '@/utils/auth'
+
+
+export function approveBasicApi() {
+    return {
+        // v1
+        getApproveBasicList: (data) => {
+            return request({
+                headers:{
+                    'Authorization':getToken()
+                },
+                url: process.env.BASE_API + `/work/ruleItemStand/page/list`,
+                method: 'post',
+                data: data
+            });
+        },
+        // v1
+        addApproveBasic: (data) => {
+            return request({
+                headers:{
+                    'Authorization':getToken()
+                },
+                url: process.env.BASE_API + `/work/ruleItemStand/save`,
+                method: 'post',
+                data: data
+            });
+        },
+        // v1
+        modApproveBasic: (data) => {
+            return request({
+                headers:{
+                    'Authorization':getToken()
+                },
+                url: process.env.BASE_API + `/work/ruleItemStand/update`,
+                method: 'post',
+                data: data
+            });
+        },
+        // v1
+        deleteApproveBasic: (data) => {
+            return request({
+                headers:{
+                    'Authorization':getToken()
+                },
+                url: process.env.BASE_API + `/work/ruleItemStand/delete`,
+                method: 'post',
+                data: data
+            });
+        },
+        // v1
+        getAllApproveBasicList: (data) => {
+            return request({
+                headers:{
+                    'Authorization':getToken()
+                },
+                url: process.env.BASE_API + `/work/ruleItemStand/list`,
+                method: 'post',
+                data
+            });
+        }
+    };
+}
diff --git a/src/api/approveRule.js b/src/api/approveRule.js
new file mode 100644
index 0000000..f17de77
--- /dev/null
+++ b/src/api/approveRule.js
@@ -0,0 +1,62 @@
+import request from '@/utils/request'
+import { getToken } from '@/utils/auth'
+
+export function approveRuleApi() {
+    return {
+        // v1
+        getApproveRuleList: (data) => {
+            return request({
+                headers:{
+                    'Authorization':getToken()
+                },
+                url: process.env.BASE_API +  `/rule/listByPage`,
+                method: 'post',
+                data: data
+            });
+        },
+        // v1
+        addApproveRule: (data) => {
+            return request({
+                headers:{
+                    'Authorization':getToken()
+                },
+                url: process.env.BASE_API +  `/rule/save`,
+                method: 'post',
+                data: data
+            });
+        },
+        // v1
+        modApproveRule: (data) => {
+            return request({
+                headers:{
+                    'Authorization':getToken()
+                },
+                url: process.env.BASE_API +  `/rule/update`,
+                method: 'post',
+                data: data
+            });
+        },
+        // v1
+        deleteApproveRule: (data) => {
+            return request({
+                headers:{
+                    'Authorization':getToken()
+                },
+                url: process.env.BASE_API +  `/rule/del`,
+                method: 'post',
+                data: data
+            });
+        },
+        // v1
+        getAllApproveRuleList: (data) => {
+            return request({
+                headers:{
+                    'Authorization':getToken()
+                },
+                url: process.env.BASE_API +  `/prevent/device/select/listDevices`,
+                method: 'post',
+                data
+            });
+        }
+    };
+}
diff --git a/src/api/safetyAction.js b/src/api/safetyAction.js
new file mode 100644
index 0000000..7d7b1d8
--- /dev/null
+++ b/src/api/safetyAction.js
@@ -0,0 +1,62 @@
+import request from '@/utils/request'
+import { getToken } from '@/utils/auth'
+
+export function safetyActionApi() {
+    return {
+        // v1
+        getSafetyActionList: (data) => {
+            return request({
+                headers:{
+                    'Authorization':getToken()
+                },
+                url: process.env.BASE_API + `/rule/measure/page/list`,
+                method: 'post',
+                data: data
+            });
+        },
+        // v1
+        addSafetyAction: (data) => {
+            return request({
+                headers:{
+                    'Authorization':getToken()
+                },
+                url: process.env.BASE_API + `/rule/measure/save`,
+                method: 'post',
+                data: data
+            });
+        },
+        // v1
+        modSafetyAction: (data) => {
+            return request({
+                headers:{
+                    'Authorization':getToken()
+                },
+                url: process.env.BASE_API + `/rule/measure/mod`,
+                method: 'post',
+                data: data
+            });
+        },
+        // v1
+        deleteSafetyAction: (data) => {
+            return request({
+                headers:{
+                    'Authorization':getToken()
+                },
+                url: process.env.BASE_API + `/rule/measure/delete`,
+                method: 'post',
+                data: data
+            });
+        },
+        // v1
+        getAllSafetyActionList: (data) => {
+            return request({
+                headers:{
+                    'Authorization':getToken()
+                },
+                url: process.env.BASE_API + `/rule/measure/list`,
+                method: 'post',
+                data: data
+            });
+        }
+    };
+}
diff --git a/src/assets/style/index.css b/src/assets/style/index.css
new file mode 100644
index 0000000..3dfdd07
--- /dev/null
+++ b/src/assets/style/index.css
@@ -0,0 +1,15 @@
+.input-box{
+    width: 200px !important;
+    padding-right: 10px;
+    padding-bottom: 10px;
+}
+.input-add{
+    width: 90% !important;
+}
+.basic-line{
+    display: inline-block;
+    padding-left: 10px;
+}
+.page-position{
+    float: right;
+}
diff --git a/src/main.js b/src/main.js
index 2dd6f5f..46c3c3d 100644
--- a/src/main.js
+++ b/src/main.js
@@ -1,7 +1,7 @@
 import Vue from 'vue'
 
 import Cookies from 'js-cookie'
-
+import './assets/style/index.css'
 import 'normalize.css/normalize.css' // A modern alternative to CSS resets
 import 'default-passive-events'
 
diff --git a/src/views/doublePreventAction/hiddenDanger/hiddenDangerReform/accept/index.vue b/src/views/doublePreventAction/hiddenDanger/hiddenDangerReform/accept/index.vue
index 055ac2d..93aba82 100644
--- a/src/views/doublePreventAction/hiddenDanger/hiddenDangerReform/accept/index.vue
+++ b/src/views/doublePreventAction/hiddenDanger/hiddenDangerReform/accept/index.vue
@@ -12,7 +12,16 @@
                     ></el-option>
                 </el-select>
             </div>
-
+            <div class="basic_search">
+                <span>验收部门:</span>
+                <el-select v-model="filter.depId"  clearable filterable class="analyseUnit_box">
+                    <el-option
+                        v-for="item in departmentList"
+                        :key="item.id"
+                        :label="item.department"
+                        :value="item.id"
+                    ></el-option>
+                </el-select>            </div>
             <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-search"
                        @click="queryHandle">搜索</el-button>
         </div>
@@ -92,6 +101,8 @@
 import {deleteHiddenDangerReport, hiddenDangerAcceptList} from "../../../../../api/hiddenDanger";
 import {safetyInspectionItemName} from "../../../../../api/safetySelfInspection";
 import AcceptDialog from "./components/acceptDialog";
+import {getAllProductionDeviceList} from "../../../../../api/riskSource";
+import {getDepartmentList} from "../../../../../api/departmentManage";
 
 export default {
     name: "rectify",
@@ -123,12 +134,14 @@
                 pageIndex:1,
                 pageSize:10,
                 checkAcceptPersonid: null,
+                depId: null,
             }
         }
     },
     created() {
         this.hiddenDangerList();
         this.getUser()
+        this.getDepartmentData()
     },
     methods: {
         queryHandle: function () {
@@ -175,6 +188,22 @@
             }
         },
 
+
+        async getDepartmentData(){
+            let res = await getDepartmentList({pageSize:1000,pageIndex:1})
+            if(res.data.code === '200'){
+                this.departmentList = res.data.result.result
+            }else{
+                this.$message({
+                    message:res.data.message,
+                    type:'warning'
+                })
+                if(res.data.code === '50001'){
+                    this.riskSourceData = []
+                }
+            }
+        },
+
         hiddenDangerList(){
             this.listLoading = true
             hiddenDangerAcceptList(this.filter)
diff --git a/src/views/doublePreventAction/hiddenDanger/hiddenDangerReform/rectify/index.vue b/src/views/doublePreventAction/hiddenDanger/hiddenDangerReform/rectify/index.vue
index b2cb38f..78cc327 100644
--- a/src/views/doublePreventAction/hiddenDanger/hiddenDangerReform/rectify/index.vue
+++ b/src/views/doublePreventAction/hiddenDanger/hiddenDangerReform/rectify/index.vue
@@ -95,6 +95,7 @@
     import reportView from "../components/reportView";
     import rectifyDialog from "./components/rectifyDialog";
     import {deleteHiddenDangerReport} from "../../../../../api/hiddenDanger";
+    import {getDepartmentList} from "../../../../../api/departmentManage";
 
     export default {
         name: "rectify",
@@ -130,7 +131,7 @@
         },
         created() {
             this.hiddenDangerList();
-
+            this.getDepartmentData()
         },
         methods: {
             queryHandle: function () {
@@ -162,7 +163,20 @@
                 window.open(fileurl, '_blank');
             },
 
-
+            async getDepartmentData(){
+                let res = await getDepartmentList({pageSize:1000,pageIndex:1})
+                if(res.data.code === '200'){
+                    this.departmentList = res.data.result.result
+                }else{
+                    this.$message({
+                        message:res.data.message,
+                        type:'warning'
+                    })
+                    if(res.data.code === '50001'){
+                        this.riskSourceData = []
+                    }
+                }
+            },
 
             hiddenDangerList(){
                 this.listLoading = true
diff --git a/src/views/doublePreventAction/hiddenDanger/hiddenDangerReform/report/index.vue b/src/views/doublePreventAction/hiddenDanger/hiddenDangerReform/report/index.vue
index efc8517..d8959cf 100644
--- a/src/views/doublePreventAction/hiddenDanger/hiddenDangerReform/report/index.vue
+++ b/src/views/doublePreventAction/hiddenDanger/hiddenDangerReform/report/index.vue
@@ -25,13 +25,23 @@
                     <el-option v-for="item in dangerTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option>
                 </el-select>
             </div>
+            <div class="basic_search">
+                <span>上报部门:</span>
+                <el-select v-model="filter.depId"  clearable filterable class="analyseUnit_box">
+                    <el-option
+                        v-for="item in departmentList"
+                        :key="item.id"
+                        :label="item.department"
+                        :value="item.id"
+                    ></el-option>
+                </el-select>            </div>
 
+            <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-search"
+                       @click="queryHandle"/>
 
             <el-button class="filter-item" style="margin-left: 10px;" type="primary"
                        icon="el-icon-plus" @click="showCreateHandle('新增', '')">新增
             </el-button>
-            <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-search"
-                       @click="queryHandle"/>
         </div>
         <div class="table_content">
             <el-table
@@ -173,7 +183,8 @@
                     rectifier:'',
                     rectifierid:'',
                     note: '',
-                    level:''
+                    level:'',
+
                 },
                 isSupervision: '',
                 filter:{
@@ -182,6 +193,7 @@
                     dangerLevel: null,
                     dangerSource: null,
                     dangerStatus: null,
+                    depId:null,
                     dangerType: null
                 },
 
diff --git a/src/views/roleManage/menu/index.vue b/src/views/roleManage/menu/index.vue
index 772138c..13f01bc 100644
--- a/src/views/roleManage/menu/index.vue
+++ b/src/views/roleManage/menu/index.vue
@@ -379,7 +379,7 @@
             handleNodeClick(data) {
                 console.log('12313')
                 // console.log(this.$route.meta, 'this.$router.meta')
-                this.form = merge({}, data)
+                this.form =  data
                 const cascaderValue = []
                 let exitFlag = false
                 for (const node of this.cascaderTree) {
diff --git a/src/views/specialWorkManage/foundationSet/index.vue b/src/views/specialWorkManage/foundationSet/index.vue
new file mode 100644
index 0000000..ea834ff
--- /dev/null
+++ b/src/views/specialWorkManage/foundationSet/index.vue
@@ -0,0 +1,13 @@
+<template>
+    <router-view></router-view>
+</template>
+
+<script>
+    export default {
+        name: "index"
+    }
+</script>
+
+<style scoped>
+
+</style>
diff --git a/src/views/specialWorkManage/foundationSet/safetyAction/components/safetyActionDialog.vue b/src/views/specialWorkManage/foundationSet/safetyAction/components/safetyActionDialog.vue
new file mode 100644
index 0000000..d6c2420
--- /dev/null
+++ b/src/views/specialWorkManage/foundationSet/safetyAction/components/safetyActionDialog.vue
@@ -0,0 +1,166 @@
+<template>
+    <div class="system-add-menu-container">
+        <el-dialog :title="title" :visible.sync="isShowSafetyActionDialog" width="600px" :close-on-click-modal="false">
+            <el-form :model="safetyActionForm" :rules="safetyActionFormRules" ref="safetyActionFormRef" size="default" label-width="120px">
+                <el-row :gutter="35">
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="作业类型" prop="workType">
+                            <el-select class="input-add" :disabled="!disabled" v-model="safetyActionForm.workType" placeholder="请选择作业类型" filterable clearable>
+                                <el-option v-for="item in workTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="措施类型" prop="type">
+                            <el-select class="input-add" :disabled="!disabled" v-model="safetyActionForm.type" placeholder="请选择措施类型" clearable filterable>
+                                <el-option v-for="item in typeList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col v-if="safetyActionForm.type === 1" :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="正确值" prop="correctVal">
+                            <el-select class="input-add" :disabled="!disabled" v-model="safetyActionForm.correctVal" placeholder="请选择正确值" clearable filterable>
+                                <el-option v-for="item in typeTwoList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="措施内容" prop="context">
+                            <el-input class="input-add" :disabled="!disabled" :rows="3" v-model.trim="safetyActionForm.context" type="textarea" placeholder="请输入描述"></el-input>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+            </el-form>
+            <template #footer>
+                <div class="dialog-footer" v-show="disabled" align="right">
+                    <el-button @click="isShowSafetyActionDialog = !isShowSafetyActionDialog" size="default">取 消</el-button>
+                    <el-button type="primary" @click="submitSafetyAction" size="default">确 定</el-button>
+                </div>
+            </template>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+import {safetyActionApi} from "../../../../../api/safetyAction";
+
+export default {
+    name: 'SafetyActionDialog',
+    data(){
+        return{
+            title: '',
+            disabled: false,
+            personTime: false,
+            departmentList: [],
+            isShowSafetyActionDialog: false,
+            workTypeList: [
+                { id: 1, name: '动火作业' },
+                { id: 2, name: '受限空间作业' },
+                { id: 3, name: '吊装作业' },
+                { id: 4, name: '动土作业' },
+                { id: 5, name: '断路作业' },
+                { id: 6, name: '高处作业' },
+                { id: 7, name: '临时用电作业' },
+                { id: 8, name: '盲板抽堵作业' }
+            ],
+            typeList: [
+                { id: 1, name: '选择' },
+                { id: 2, name: '填空' }
+            ],
+            typeTwoList: [
+                { id: 1, name: '是' },
+                { id: 2, name: '否' }
+            ],
+            safetyActionForm: {
+                workType: null,
+                type: null,
+                correctVal: null,
+                context: null
+            },
+            safetyActionFormRules: {
+                workType: [{ required: true, message: '请选择作业类型', trigger: 'change' }],
+                type: [{ required: true, message: '请选择措施类型', trigger: 'change' }],
+                correctVal: [{ required: true, message: '请选择正确值', trigger: 'change' }],
+                context: [{ required: true, message: '请填写措施内容', trigger: 'blur' }]
+            }
+        }
+    },
+    methods:{
+        showSafetyActionDialog(type, value, department) {
+            this.isShowSafetyActionDialog = true;
+            this.departmentList = department;
+            this.$nextTick(() =>{
+                this.$refs["safetyActionFormRef"].clearValidate()
+            })
+            if (type === '新增') {
+                this.disabled = true;
+                this.personTime = false;
+                this.title = '新增安全措施';
+                this.safetyActionForm = {
+                    workType: null,
+                    type: null,
+                    correctVal: null,
+                    context: null
+                };
+            } else if (type === '查看') {
+                this.disabled = false;
+                this.personTime = true;
+                this.title = '查看安全措施';
+                this.safetyActionForm = JSON.parse(JSON.stringify(value));
+            } else {
+                this.disabled = true;
+                this.personTime = false;
+                this.title = '修改安全措施';
+                this.safetyActionForm = JSON.parse(JSON.stringify(value));
+            }
+        },
+
+        submitSafetyAction() {
+            this.$refs["safetyActionFormRef"].validate(async (valid) => {
+                if (valid) {
+                    if (this.title === '新增安全措施') {
+                        let res = await safetyActionApi().addSafetyAction(this.safetyActionForm);
+                        if (res.data.code === '200') {
+                            this.$message({
+                                type: 'success',
+                                message: '安全措施新增成功',
+                                duration: 2000
+                            });
+                            this.isShowSafetyActionDialog = false;
+                            context.emit('refreshSafetyAction');
+                        } else {
+                            this.$message({
+                                type: 'warning',
+                                message: res.data.msg
+                            });
+                        }
+                    } else {
+                        let res = await safetyActionApi().modSafetyAction(this.safetyActionForm);
+                        if (res.data.code === '200') {
+                            this.$message({
+                                type: 'success',
+                                message: '安全措施改成功',
+                                duration: 2000
+                            });
+                            this.isShowSafetyActionDialog = false;
+                            context.emit('refreshSafetyAction');
+                        } else {
+                            this.$message({
+                                type: 'warning',
+                                message: res.data.msg
+                            });
+                        }
+                    }
+                } else {
+                    this.$message({
+                        type: 'warning',
+                        message: '请完善基本信息'
+                    });
+                }
+            });
+        },
+    },
+};
+</script>
+
+<style scoped></style>
diff --git a/src/views/specialWorkManage/foundationSet/safetyAction/index.vue b/src/views/specialWorkManage/foundationSet/safetyAction/index.vue
new file mode 100644
index 0000000..6c8a03b
--- /dev/null
+++ b/src/views/specialWorkManage/foundationSet/safetyAction/index.vue
@@ -0,0 +1,367 @@
+<template>
+    <div class="home-container">
+        <div style="height: 100%">
+            <el-row class="homeCard">
+                <div class="basic-line">
+                    <span>作业类型:</span>
+                    <el-select v-model="params.searchParams.workType" clearable filterable class="input-box" placeholder="作业类型">
+                        <el-option v-for="item in workTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                    </el-select>
+                </div>
+                <div class="basic-line">
+                    <span>措施类型:</span>
+                    <el-select v-model="params.searchParams.type" clearable filterable class="input-box" placeholder="措施类型">
+                        <el-option v-for="item in typeList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                    </el-select>
+                </div>
+                <div class="basic-line">
+                    <span>措施内容:</span>
+                    <el-input v-model.trim="params.searchParams.context" class="input-box" placeholder="措施内容"> </el-input>
+                </div>
+                <div style="padding-bottom: 10px">
+                    <el-button type="primary" @click="initSafetyAction">查询</el-button>
+                    <el-button plain @click="reset">重置</el-button>
+                </div>
+            </el-row>
+            <div class="homeCard">
+                <div class="main-card">
+                    <el-row class="cardTop">
+                        <el-col :span="24" class="mainCardBtn">
+                            <el-button type="primary" size="default" @click="openSafetyActionDialog('新增', {})">新建</el-button>
+                            <el-button type="danger"  size="default" @click="deleteMoreSafetyAction" plain>批量删除</el-button>
+                        </el-col>
+                    </el-row>
+                    <el-table ref="multipleTableRef" :data="safetyActionData" 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 property="workType" label="作业类型">
+                            <template slot-scope="scope">
+                                <div v-for="item in workTypeList">
+                                    <div v-if="scope.row.workType === item.id">
+                                        <span>{{item.name}}</span>
+                                    </div>
+                                </div>
+                            </template>
+                        </el-table-column>
+                        <el-table-column property="type" label="措施类型">
+                            <template slot-scope="scope">
+                                <div v-for="item in typeList">
+                                    <div v-if="scope.row.type === item.id">
+                                        <span>{{item.name}}</span>
+                                    </div>
+                                </div>
+                            </template>
+                        </el-table-column>
+                        <el-table-column property="context" label="措施内容"></el-table-column>
+                        <el-table-column prop="correctVal" label="正确值" show-overflow-tooltip>
+                            <template slot-scope="scope">
+                                <div v-for="item in typeTwoList">
+                                    <div v-if="scope.row.correctVal === item.id">
+                                        <span>{{item.name}}</span>
+                                    </div>
+                                </div>
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="createUname" label="创建人" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="gmtCreate" label="创建时间" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="modifiedUname" label="最后修改人" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="gmtModified" label="最后修改时间" show-overflow-tooltip></el-table-column>
+                        <el-table-column fixed="right" label="操作" align="center" width="300">
+                            <template slot-scope="scope">
+                                <el-button  type="text" @click="openSafetyActionDialog('查看', scope.row)">查看</el-button>
+                                <el-button  type="text" @click="openSafetyActionDialog('修改', scope.row)">修改</el-button>
+                                <el-button  style="color:red" type="text" @click="deleteSafetyAction(scope.row)">删除</el-button>
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                    <br />
+                    <el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="params.pageIndex" background v-model:page-size="params.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" class="page-position"> </el-pagination>
+                </div>
+            </div>
+        </div>
+        <safety-action-dialog ref="safetyActionDialogRef" @refreshSafetyAction="initSafetyAction"></safety-action-dialog>
+    </div>
+</template>
+
+<script>
+import safetyActionDialog from "./components/safetyActionDialog";
+import {safetyActionApi} from "../../../../api/safetyAction";
+export default {
+    name: 'index',
+    components: { safetyActionDialog },
+    data(){
+        return{
+            safetyActionData: [],
+            total: 0,
+            loading: false,
+            params: {
+                pageIndex: 1,
+                pageSize: 10,
+                searchParams: {
+                    workType: null,
+                    type: null,
+                    context: null
+                }
+            },
+            workTypeList: [
+                { id: 1, name: '动火作业' },
+                { id: 2, name: '受限空间作业' },
+                { id: 3, name: '吊装作业' },
+                { id: 4, name: '动土作业' },
+                { id: 5, name: '断路作业' },
+                { id: 6, name: '高处作业' },
+                { id: 7, name: '临时用电作业' },
+                { id: 8, name: '盲板抽堵作业' }
+            ],
+            typeList: [
+                { id: 1, name: '选择' },
+                { id: 2, name: '填空' }
+            ],
+            typeTwoList: [
+                { id: 1, name: '是' },
+                { id: 2, name: '否' }
+            ],
+            deleteList: {
+                ids: []
+            }
+        }
+    },
+    created() {
+        this.initSafetyAction()
+    },
+    methods:{
+        async initSafetyAction() {
+            let res = await safetyActionApi().getSafetyActionList(this.params);
+            if (res.data.code === '200') {
+                this.safetyActionData = res.data.data;
+                this.total = res.data.total;
+            } else {
+                this.$message({
+                    type: 'warning',
+                    message: res.data.msg
+                });
+            }
+        },
+
+        openSafetyActionDialog(type, value) {
+            this.$refs.safetyActionDialogRef.showSafetyActionDialog(type, value);
+        },
+
+        deleteMoreSafetyAction() {
+            this.$confirm(`此操作将永久删除该措施,是否继续?`, '提示', {
+                confirmButtonText: '确认',
+                cancelButtonText: '取消',
+                type: 'warning'
+            })
+                .then(async () => {
+                    let res = await safetyActionApi().deleteSafetyAction(this.deleteList);
+                    if (res.data.code === '200') {
+                        this.$message({
+                            type: 'success',
+                            duration: 2000,
+                            message: '删除成功'
+                        });
+                        await this.initSafetyAction();
+                    } else {
+                        this.$message({
+                            type: 'warning',
+                            message: res.data.msg
+                        });
+                    }
+                })
+                .catch(() => {});
+        },
+        deleteSafetyAction(row) {
+            this.$confirm(`此操作将永久删除该措施,是否继续?`, '提示', {
+                confirmButtonText: '确认',
+                cancelButtonText: '取消',
+                type: 'warning'
+            })
+                .then(async () => {
+                    let res = await safetyActionApi().deleteSafetyAction({ ids: [row.id] });
+                    if (res.data.code === '200') {
+                        this.deleteList.ids = [];
+                        this.$message({
+                            type: 'success',
+                            duration: 2000,
+                            message: '删除成功'
+                        });
+                        await this.initSafetyAction();
+                    } else {
+                        this.$message({
+                            type: 'warning',
+                            message: res.data.msg
+                        });
+                    }
+                })
+                .catch(() => {});
+        },
+        handleSelectionChange(val) {
+            this.deleteList.ids = val.map((item) => {
+                return item.id;
+            });
+        },
+
+        parseNumber(value, type) {
+            if (type === '作业类型') {
+                return this.workTypeList.find((item) => item.id === value).name;
+            } else {
+                return this.typeList.find((item) => item.id == value).name;
+            }
+        },
+
+        onHandleSizeChange(val) {
+            this.params.pageSize = val;
+            this.initSafetyAction()
+        },
+
+        onHandleCurrentChange(val) {
+            this.params.pageIndex = val;
+            this.initSafetyAction()
+        },
+
+        reset() {
+            this.params = {
+                pageIndex: 1,
+                pageSize: 10,
+                searchParams: {
+                    workType: null,
+                    type: null,
+                    context: null
+                }
+            };
+        },
+    },
+};
+</script>
+
+<style scoped lang="scss">
+$homeNavLengh: 8;
+.home-container {
+    height: calc(100vh - 100px);
+    box-sizing: border-box;
+    overflow: hidden;
+    .homeCard {
+        width: 100%;
+        padding: 20px;
+        box-sizing: border-box;
+        background: #fff;
+        border-radius: 4px;
+
+        .main-card {
+            width: 100%;
+            height: 100%;
+            .cardTop {
+                display: flex;
+                align-items: center;
+                justify-content: space-between;
+                margin-bottom: 20px;
+                .mainCardBtn {
+                    margin: 0;
+                }
+            }
+            .pageBtn {
+                height: 60px;
+                display: flex;
+                align-items: center;
+                justify-content: right;
+
+                .demo-pagination-block + .demo-pagination-block {
+                    margin-top: 10px;
+                }
+                .demo-pagination-block .demonstration {
+                    margin-bottom: 16px;
+                }
+            }
+        }
+        &:last-of-type {
+            height: calc(100% - 100px);
+        }
+    }
+    .el-row {
+        display: flex;
+        align-items: center;
+        margin-bottom: 20px;
+        &:last-child {
+            margin-bottom: 0;
+        }
+        .grid-content {
+            align-items: center;
+            min-height: 36px;
+        }
+
+        .topInfo {
+            display: flex;
+            align-items: center;
+            font-size: 16px;
+            font-weight: bold;
+
+            & > div {
+                white-space: nowrap;
+                margin-right: 20px;
+            }
+        }
+    }
+}
+.stepItem {
+    width: 100%;
+    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;
+    }
+    .stepNum {
+        width: 30px;
+        height: 30px;
+        border-radius: 15px;
+        box-sizing: border-box;
+        color: #333;
+        border: 1px solid #999;
+        line-height: 28px;
+        text-align: center;
+        margin-right: 10px;
+        margin-left: -16px;
+        margin-top: -30px;
+    }
+    .stepCard {
+        width: 100%;
+        margin-top: -30px;
+
+        .box-card {
+            width: 100%;
+            >>>.el-card__header {
+                padding: 10px 15px;
+            }
+            .card-header {
+                width: 100%;
+                display: flex;
+                justify-content: space-between;
+                align-items: center;
+                & > div:first-of-type {
+                    margin-right: 80px;
+                    font-size: 18px;
+                    font-weight: bold;
+                }
+            }
+        }
+    }
+    &:hover .card-header {
+        color: #0098f5;
+    }
+    &:hover .stepNum {
+        border: 2px solid #0098f5;
+        color: #0098f5;
+    }
+}
+.page-position{
+    float: right;
+    padding-top: 10px;
+}
+</style>
diff --git a/src/views/specialWorkManage/workFlow/approveBasic/components/approveBasicDialog.vue b/src/views/specialWorkManage/workFlow/approveBasic/components/approveBasicDialog.vue
new file mode 100644
index 0000000..cfffb74
--- /dev/null
+++ b/src/views/specialWorkManage/workFlow/approveBasic/components/approveBasicDialog.vue
@@ -0,0 +1,187 @@
+<template>
+    <div class="system-add-menu-container">
+        <el-dialog :title="title" :visible.sync="isShowApproveBasicDialog" width="600px" :close-on-click-modal="false">
+            <el-form :model="approveBasicForm" :rules="approveBasicFormRules" ref="approveBasicFormRef" size="default" label-width="120px">
+                <el-row :gutter="35">
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="标题" prop="title">
+                            <el-input class="input-add" :disabled="!disabled" v-model.trim="approveBasicForm.title" placeholder="请输入标题名称" clearable></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="标准类型" prop="ruleStandType">
+                            <el-select class="input-add" :disabled="!disabled" v-model="approveBasicForm.ruleStandType" placeholder="请选择标准类型" clearable filterable>
+                                <el-option v-for="item in ruleStandTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="最大值" prop="maxVal">
+                            <el-input :disabled="!disabled" v-model="approveBasicForm.maxVal" type="number" class="input-add" placeholder="请根据需求选择">
+                                <template slot="prepend">
+                                    <el-select :disabled="!disabled" v-model="approveBasicForm.maxValMatchPattern" placeholder="请根据需求选择" style="width: 115px">
+                                        <el-option v-for="item in typeTwoList" :key="item.id" :value="item.id" :label="item.name"> </el-option>
+                                    </el-select>
+                                </template>
+                            </el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="最小值" prop="minVal">
+                            <el-input :disabled="!disabled" v-model="approveBasicForm.minVal" type="number" class="input-add" placeholder="请根据需求选择">
+                                <template slot="prepend">
+                                    <el-select :disabled="!disabled" v-model="approveBasicForm.minValMatchPattern" placeholder="请根据需求选择" style="width: 115px">
+                                        <el-option v-for="item in typeList" :key="item.id" :value="item.id" :label="item.name"> </el-option>
+                                    </el-select>
+                                </template>
+                            </el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="描述" prop="info">
+                            <el-input class="input-add" :rows="3" :disabled="!disabled" v-model.trim="approveBasicForm.info" type="textarea" placeholder="请输入描述"></el-input>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+            </el-form>
+            <template #footer>
+                <div class="dialog-footer" v-show="disabled" align="right">
+                    <el-button @click="isShowApproveBasicDialog = !isShowApproveBasicDialog" size="default">取 消</el-button>
+                    <el-button type="primary" @click="submitApproveBasic" size="default">确 定</el-button>
+                </div>
+            </template>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+import {approveBasicApi} from "../../../../../api/approveBasic";
+export default {
+    name: 'approveBasicDialog',
+    data(){
+        return{
+            title: '',
+            disabled: false,
+            personTime: false,
+            departmentList: [],
+            isShowApproveBasicDialog: false,
+            ruleStandTypeList: [
+                { id: 1, name: '可燃气浓度' },
+                { id: 2, name: '氧气浓度' },
+                { id: 3, name: '一氧化碳浓度' },
+                { id: 4, name: '硫化氢浓度' },
+                { id: 5, name: '温度' },
+                { id: 6, name: '压力' },
+                { id: 7, name: '震动' }
+            ],
+            typeList: [
+                { id: 1, name: '大于' },
+                { id: 2, name: '等于' },
+                { id: 4, name: '大于等于' }
+            ],
+            typeTwoList: [
+                { id: 3, name: '小于' },
+                { id: 2, name: '等于' },
+                { id: 5, name: '小于等于' }
+            ],
+            approveBasicForm: {
+                ruleStandType: null,
+                minVal: null,
+                minValMatchPattern: null,
+                maxVal: null,
+                maxValMatchPattern: null,
+                title: null,
+                info: null
+            },
+            approveBasicFormRules: {
+                ruleStandType: [{ required: true, message: '请选择标准类型', trigger: 'change' }],
+                minVal: [{ required: true, message: '请填写标最低值', trigger: 'blur' }],
+                maxVal: [{ required: true, message: '请填写标最高值', trigger: 'blur' }],
+                title: [{ required: true, message: '请选择风险等级', trigger: 'blur' }],
+                info: [{ required: true, message: '请填写描述信息', trigger: 'blur' }]
+            }
+        }
+    },
+    methods:{
+        showApproveBasicDialog(type, value) {
+            this.isShowApproveBasicDialog = true;
+            this.$nextTick(() =>{
+                this.$refs["approveBasicFormRef"].clearValidate()
+            })
+            if (type === '新增') {
+                this.disabled = true;
+                this.personTime = false;
+                this.title = '新增审批标准';
+                this.approveBasicForm = {
+                    ruleStandType: null,
+                    minVal: null,
+                    minValMatchPattern: null,
+                    maxVal: null,
+                    maxValMatchPattern: null,
+                    title: null,
+                    info: null
+                };
+            } else if (type === '查看') {
+                this.disabled = false;
+                this.personTime = true;
+                this.title = '查看审批标准';
+                this.approveBasicForm = JSON.parse(JSON.stringify(value));
+            } else {
+                this.disabled = true;
+                this.personTime = false;
+                this.title = '修改审批标准';
+                this.approveBasicForm = JSON.parse(JSON.stringify(value));
+            }
+        },
+
+        submitApproveBasic() {
+            this.$refs["approveBasicFormRef"].validate(async (valid) => {
+                if (valid) {
+                    if (this.title === '新增审批标准') {
+                        let res = await approveBasicApi().addApproveBasic(this.approveBasicForm);
+                        if (res.data.code === '200') {
+                            this.$message({
+                                type: 'success',
+                                message: '审批标准新增成功',
+                                duration: 2000
+                            });
+                            this.isShowApproveBasicDialog = false;
+                            this.$emit('refreshApproveBasic');
+                        } else {
+                            this.$message({
+                                type: 'warning',
+                                message: res.data.msg
+                            });
+                        }
+                    } else {
+                        let res = await approveBasicApi().modApproveBasic(this.approveBasicForm);
+                        if (res.data.code === '200') {
+                            this.$message({
+                                type: 'success',
+                                message: '审批标准修改成功',
+                                duration: 2000
+                            });
+                            this.isShowApproveBasicDialog = false;
+                            this.$emit('refreshApproveBasic');
+                        } else {
+                            this.$message({
+                                type: 'warning',
+                                message: res.data.msg
+                            });
+                        }
+                    }
+                } else {
+                    this.$message({
+                        type: 'warning',
+                        message: '请完善基本信息'
+                    });
+                }
+            });
+        },
+    },
+
+};
+</script>
+
+<style scoped>
+</style>
diff --git a/src/views/specialWorkManage/workFlow/approveBasic/index.vue b/src/views/specialWorkManage/workFlow/approveBasic/index.vue
new file mode 100644
index 0000000..7ba45f1
--- /dev/null
+++ b/src/views/specialWorkManage/workFlow/approveBasic/index.vue
@@ -0,0 +1,365 @@
+<template>
+    <div class="home-container">
+        <div style="height: 100%">
+            <el-row class="homeCard">
+                <div class="basic-line">
+                    <span>标准类型:</span>
+                    <el-select v-model="tableData.params.searchParams.ruleStandType" clearable filterable class="input-box" placeholder="标准类型">
+                        <el-option v-for="item in ruleStandTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                    </el-select>
+                </div>
+                <div class="basic-line">
+                    <span>标题:</span>
+                    <el-input v-model.trim="tableData.params.searchParams.title" clearable filterable class="input-box" placeholder="标题"> </el-input>
+                </div>
+                <div style="padding-bottom: 10px">
+                    <el-button type="primary" @click="getInspectionTask">查询</el-button>
+                    <el-button plain @click="reset">重置</el-button>
+                </div>
+            </el-row>
+            <div class="homeCard">
+                <div class="main-card">
+                    <el-row class="cardTop">
+                        <el-col :span="24" class="mainCardBtn">
+                            <el-button type="primary" size="default" @click="openApproveBasicDialog('新增', {})">新建</el-button>
+                            <el-button type="danger" size="default" @click="deleteMoreApproveBasic" plain>批量删除</el-button>
+                        </el-col>
+                    </el-row>
+                    <el-table ref="multipleTableRef" :data="tableData.approveBasicData" 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 property="title" label="标题" />
+                        <el-table-column property="ruleStandType" label="标准类型">
+                            <template slot-scope="scope">
+                                <span>
+                                    {{ parseNumber(scope.row.ruleStandType, '标准类型') }}
+                                </span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column property="minVal" label="最低值">
+                            <template slot-scope="scope">
+                                <span>
+                                    {{ parseNumber(scope.row.minValMatchPattern, '最低值') }}
+                                </span>
+                                <span>
+                                    {{ scope.row.minVal }}
+                                </span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column property="maxVal" label="最高值">
+                            <template slot-scope="scope">
+                                <span>
+                                    {{ parseNumber(scope.row.maxValMatchPattern, '最高值') }}
+                                </span>
+                                <span>
+                                    {{ scope.row.maxVal }}
+                                </span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column property="info" label="描述" />
+                        <el-table-column prop="createUname" label="创建人" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="gmtCreate" label="创建时间" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="modifiedUname" label="最后修改人" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="gmtModified" label="最后修改时间" show-overflow-tooltip></el-table-column>
+                        <el-table-column fixed="right" label="操作" align="center" width="300">
+                            <template slot-scope="scope">
+                                <el-button link type="primary" size="small" @click="openApproveBasicDialog('查看', scope.row)">查看</el-button>
+                                <el-button link type="primary" size="small" @click="openApproveBasicDialog('修改', scope.row)">修改</el-button>
+                                <el-button link type="danger" size="small" @click="deleteApproveBasic(scope.row)">删除</el-button>
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                    <el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="tableData.params.pageIndex" background v-model:page-size="tableData.params.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="tableData.total" class="page-position"> </el-pagination>
+                </div>
+            </div>
+        </div>
+        <approve-basic-dialog ref="approveBasicDialogRef" @refreshApproveBasic="getInspectionTask"></approve-basic-dialog>
+    </div>
+</template>
+
+<script>
+import approveBasicDialog from "./components/approveBasicDialog";
+import {approveBasicApi} from "../../../../api/approveBasic";
+export default {
+    name: 'index',
+    components: { approveBasicDialog },
+    data(){
+        return{
+            tableData: {
+                approveBasicData: [],
+                total: 0,
+                loading: false,
+                params: {
+                    pageIndex: 1,
+                    pageSize: 10,
+                    searchParams: {
+                        ruleStandType: null,
+                        title: null
+                    }
+                }
+            },
+            ruleStandTypeList: [
+                { id: 1, name: '可燃气浓度' },
+                { id: 2, name: '氧气浓度' },
+                { id: 3, name: '一氧化碳浓度' },
+                { id: 4, name: '硫化氢浓度' },
+                { id: 5, name: '温度' },
+                { id: 6, name: '压力' },
+                { id: 7, name: '震动' }
+            ],
+            typeList: [
+                { id: 1, name: '大于' },
+                { id: 2, name: '等于' },
+                { id: 4, name: '大于等于' }
+            ],
+            typeTwoList: [
+                { id: 3, name: '小于' },
+                { id: 2, name: '等于' },
+                { id: 5, name: '小于等于' }
+            ],
+            deleteList: {
+                ids: []
+            }
+        }
+    },
+    created() {
+        this.getInspectionTask()
+    },
+    methods:{
+        async getInspectionTask() {
+            let res = await approveBasicApi().getApproveBasicList(this.tableData.params);
+            if (res.data.code === '200') {
+                this.tableData.approveBasicData = res.data.data;
+                this.tableData.total = res.data.total;
+            } else {
+                this.$message({
+                    type: 'warning',
+                    message: res.data.msg
+                });
+            }
+        },
+
+        parseNumber(value,type) {
+            if (type === '标准类型') {
+                return this.ruleStandTypeList.find((item) => item.id === value).name;
+            } else if (type === '最高值') {
+                return this.typeTwoList.find((item) => item.id == value).name;
+            } else {
+                return this.typeList.find((item) => item.id == value).name;
+            }
+        },
+
+        handleSelectionChange(val) {
+            this.deleteList.ids = val.map((item) => {
+                return item.ruleStandId;
+            });
+        },
+
+        openApproveBasicDialog(type, value) {
+            this.$refs.approveBasicDialogRef.showApproveBasicDialog(type, value);
+        },
+
+        deleteApproveBasic(row) {
+            this.$confirm(`此操作将永久删除该任务:“${row.title}”,是否继续?`, '提示', {
+                confirmButtonText: '确认',
+                cancelButtonText: '取消',
+                type: 'warning'
+            })
+                .then(async () => {
+                    let res = await approveBasicApi().deleteApproveBasic({ ids: [row.ruleStandId] });
+                    if (res.data.code === '200') {
+                        this.deleteList.ids = [];
+                        this.$message({
+                            type: 'success',
+                            duration: 2000,
+                            message: '删除成功'
+                        });
+                        await getInspectionTask();
+                    } else {
+                        this.$message({
+                            type: 'warning',
+                            message: res.data.msg
+                        });
+                    }
+                })
+                .catch(() => {});
+        },
+
+        deleteMoreApproveBasic() {
+            this.$confirm(`此操作将永久删除这些标准项,是否继续?`, '提示', {
+                confirmButtonText: '确认',
+                cancelButtonText: '取消',
+                type: 'warning'
+            })
+                .then(async () => {
+                    let res = await approveBasicApi().deleteApproveBasic(this.deleteList);
+                    if (res.data.code === '200') {
+                        this.$message({
+                            type: 'success',
+                            duration: 2000,
+                            message: '删除成功'
+                        });
+                        await this.getInspectionTask();
+                    } else {
+                        this.$message({
+                            type: 'warning',
+                            message: res.data.msg
+                        });
+                    }
+                })
+                .catch(() => {});
+        },
+        onHandleSizeChange(val) {
+            this.tableData.params.pageSize = val;
+            this.getInspectionTask();
+        },
+        // 分页改变
+        onHandleCurrentChange(val) {
+            this.tableData.params.pageIndex = val;
+            this.getInspectionTask();
+        },
+
+        reset() {
+            this.tableData.params = {
+                pageIndex: 1,
+                pageSize: 10,
+                searchParams: {
+                    ruleStandType: null,
+                    title: null
+                }
+            };
+        },
+    },
+};
+</script>
+
+<style scoped lang="scss">
+$homeNavLengh: 8;
+.home-container {
+    height: calc(100vh - 100px);
+    box-sizing: border-box;
+    overflow: hidden;
+    .homeCard {
+        width: 100%;
+        padding: 20px;
+        box-sizing: border-box;
+        background: #fff;
+        border-radius: 4px;
+
+        .main-card {
+            width: 100%;
+            height: 100%;
+            .cardTop {
+                display: flex;
+                align-items: center;
+                justify-content: space-between;
+                margin-bottom: 20px;
+                .mainCardBtn {
+                    margin: 0;
+                }
+            }
+            .pageBtn {
+                height: 60px;
+                display: flex;
+                align-items: center;
+                justify-content: right;
+
+                .demo-pagination-block + .demo-pagination-block {
+                    margin-top: 10px;
+                }
+                .demo-pagination-block .demonstration {
+                    margin-bottom: 16px;
+                }
+            }
+        }
+        &:last-of-type {
+            height: calc(100% - 100px);
+        }
+    }
+    .el-row {
+        display: flex;
+        align-items: center;
+        margin-bottom: 20px;
+        &:last-child {
+            margin-bottom: 0;
+        }
+        .grid-content {
+            align-items: center;
+            min-height: 36px;
+        }
+
+        .topInfo {
+            display: flex;
+            align-items: center;
+            font-size: 16px;
+            font-weight: bold;
+
+            & > div {
+                white-space: nowrap;
+                margin-right: 20px;
+            }
+        }
+    }
+}
+.stepItem {
+    width: 100%;
+    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;
+    }
+    .stepNum {
+        width: 30px;
+        height: 30px;
+        border-radius: 15px;
+        box-sizing: border-box;
+        color: #333;
+        border: 1px solid #999;
+        line-height: 28px;
+        text-align: center;
+        margin-right: 10px;
+        margin-left: -16px;
+        margin-top: -30px;
+    }
+    .stepCard {
+        width: 100%;
+        margin-top: -30px;
+
+        .box-card {
+            width: 100%;
+            >>>.el-card__header {
+                padding: 10px 15px;
+            }
+            .card-header {
+                width: 100%;
+                display: flex;
+                justify-content: space-between;
+                align-items: center;
+                & > div:first-of-type {
+                    margin-right: 80px;
+                    font-size: 18px;
+                    font-weight: bold;
+                }
+            }
+        }
+    }
+    &:hover .card-header {
+        color: #0098f5;
+    }
+    &:hover .stepNum {
+        border: 2px solid #0098f5;
+        color: #0098f5;
+    }
+}
+.page-position{
+    float: right;
+    padding-top: 10px;
+}
+</style>
diff --git a/src/views/specialWorkManage/workFlow/approveRule/components/approveItemDialog.vue b/src/views/specialWorkManage/workFlow/approveRule/components/approveItemDialog.vue
new file mode 100644
index 0000000..035315b
--- /dev/null
+++ b/src/views/specialWorkManage/workFlow/approveRule/components/approveItemDialog.vue
@@ -0,0 +1,143 @@
+<template>
+    <el-dialog :visible.sync="approveItemDialog" :title="title" :close-on-click-modal="false">
+        <el-form :model="approveItemForm" label-width="150px" ref="approveItemFormRef" :rules="approveItemFormRule">
+            <el-col :span="24" >
+                <el-form-item label="审批项名称" prop="itemName">
+                    <el-input v-model="approveItemForm.itemName" class="input-add" placeholder="请填写审批项名称"> </el-input>
+                </el-form-item>
+            </el-col>
+            <el-col :span="24" >
+                <el-form-item label="审批项类型" prop="type">
+                    <el-select v-model="approveItemForm.type" @change="clearValue" placeholder="请选择审批项类型" class="input-add" clearable filterable>
+                        <el-option v-for="item in typeList" :key="item.id" :value="item.id" :label="item.name"></el-option>
+                    </el-select>
+                </el-form-item>
+            </el-col>
+            <!--            <el-col :span="24" style="margin-bottom: 24px">-->
+            <!--                <el-form-item label="措施或标准" prop="smType">-->
+            <!--                    <el-select v-model="approveItemForm.smType" @change="clearValue" placeholder="请选择措施或标准" class="input-add" clearable filterable>-->
+            <!--                        <el-option v-for="item in smTypeList" :key="item.id" :value="item.id" :label="item.name"></el-option>-->
+            <!--                    </el-select>-->
+            <!--                </el-form-item>-->
+            <!--            </el-col>-->
+            <el-col v-if="(approveItemForm.type === 2 || approveItemForm.type === 3) && personType !== 3" :span="24">
+                <el-form-item label="措施名称" prop="measureId">
+                    <el-select v-model="approveItemForm.measureId" placeholder="请选择措施" class="input-add" clearable filterable>
+                        <el-option v-for="item in actionList" :key="item.id" :value="item.id" :label="item.context"></el-option>
+                    </el-select>
+                </el-form-item>
+            </el-col>
+            <el-col v-if="approveItemForm.type === 1" :span="24" >
+                <el-form-item label="标准名称" prop="standId">
+                    <el-select v-model="approveItemForm.standId" class="input-add" placeholder="选择标准" clearable filterable>
+                        <el-option v-for="item in standardList" :key="item.ruleStandId" :value="item.ruleStandId" :label="item.title"></el-option>
+                    </el-select>
+                </el-form-item>
+            </el-col>
+
+            <div align="right">
+                <el-button type="warning" @click="approveItemDialog = false" size="default" plain>取消</el-button>
+                <el-button type="primary" @click="submitApproveItem()" size="default">确认</el-button>
+            </div>
+        </el-form>
+    </el-dialog>
+</template>
+
+<script>
+
+export default {
+    name: 'approveItemDialog',
+    data(){
+        return{
+            title: '',
+            activeName: 'ApproveAction',
+            approveItemDialog: false,
+            approveItemForm: {
+                itemName: null,
+                type: null,
+                measureId: null,
+                smType: 1,
+                standId: null
+            },
+            approveItemFormRule: {
+                itemName: [{ required: true, message: '请填写审批项名称', trigger: 'blur' }],
+                type: [{ required: true, message: '请选择审批项类型', trigger: 'change' }],
+                measureId: [{ required: true, message: '请选择措施', trigger: 'change' }],
+                smType: [{ required: true, message: '请选择措施或标准', trigger: 'change' }],
+                standId: [{ required: true, message: '请选择标准', trigger: 'change' }]
+            },
+            actionList: [],
+            typeList: [],
+            smTypeList: [
+                { id: 1, name: '标准' },
+                { id: 2, name: '措施' }
+            ],
+            standardList: [],
+            order: null,
+            personType: null,
+        }
+    },
+    methods:{
+        showApproveItemDialog(type, value, index, approveLevelForm, standardList, actionList) {
+            this.approveItemDialog = true;
+            this.standardList = standardList;
+            this.actionList = actionList;
+            this.order = index;
+            if (approveLevelForm.type === 3) {
+                this.personType = 3
+                this.typeList = [
+                    { id: 1, name: '数值' },
+                    { id: 3, name: '填空' }
+                ];
+            } else {
+                this.typeList = [
+                    { id: 2, name: '选项' },
+                    { id: 3, name: '填空' }
+                ];
+            }
+            this.$nextTick(() => {
+                this.$refs["approveItemFormRef"].clearValidate();
+            });
+            if (type === '新增') {
+                this.title = '新增审批项';
+                this.approveItemForm = {
+                    itemName: null,
+                    type: null,
+                    measureId: null,
+                    standId: null,
+                    smType: 1
+                };
+            } else {
+                this.title = '修改审批项';
+                this.approveItemForm = JSON.parse(JSON.stringify(value));
+            }
+        },
+
+        submitApproveItem() {
+            this.$refs["approveItemFormRef"].validate((valid) => {
+                if (valid) {
+                    this.approveItemForm.smType = 1;
+                    this.$emit('addApprovalItem', this.approveItemForm, this.title, this.order);
+                    this.approveItemDialog = false;
+                } else {
+                    this.$message({
+                        type: 'warning',
+                        message: '请完善审批项基本信息'
+                    });
+                }
+            });
+        },
+
+        clearValue () {
+            if (this.approveItemForm.type === 1) {
+                this.approveItemForm.measureId = null;
+            } else {
+                this.approveItemForm.standId = null;
+            }
+        },
+    },
+
+};
+</script>
+
+<style scoped></style>
diff --git a/src/views/specialWorkManage/workFlow/approveRule/components/approveLevelDialog.vue b/src/views/specialWorkManage/workFlow/approveRule/components/approveLevelDialog.vue
new file mode 100644
index 0000000..3661acc
--- /dev/null
+++ b/src/views/specialWorkManage/workFlow/approveRule/components/approveLevelDialog.vue
@@ -0,0 +1,246 @@
+<template>
+    <div class="system-add-menu-container">
+        <el-dialog :title="title" :visible.sync="approveLevelDialog" :close-on-click-modal="false">
+            <el-form :model="approveLevelForm" label-width="150px" ref="approveLevelFormRef" :rules="approveLevelFormRule">
+                <el-col :span="24">
+                    <el-form-item label="层级名称" prop="stepName">
+                        <el-input v-model="approveLevelForm.stepName" class="input-add" placeholder="请填写层级名称"> </el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="24">
+                    <el-form-item label="审批层级" prop="type">
+                        <el-select v-model="approveLevelForm.type" placeholder="请选择审批层级" class="input-add">
+                            <el-option v-for="item in typeList" :key="item.id" :value="item.id" :label="item.name"></el-option>
+                        </el-select>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="24">
+                    <el-form-item label="审批人" prop="unitList">
+                        <el-select v-model="approveLevelForm.unitList" multiple placeholder="请选择审批人" class="input-add">
+                            <el-option v-for="item in userList" :key="item.id" :value="item.id" :label="item.realname"></el-option>
+                        </el-select>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="24">
+                    <el-form-item label="审批有效时间" prop="continueTime">
+                        <el-input type="number" v-model="approveLevelForm.continueTime" placeholder="请输入审批有效时间" class="input-add">
+                            <template slot="prepend">
+                                <el-select v-model="approveLevelForm.continueTimeUnit" placeholder="选择单位" style="width: 115px">
+                                    <el-option v-for="item in timeList" :key="item.id" :value="item.id" :label="item.name"></el-option>
+                                </el-select>
+                            </template>
+                        </el-input>
+                    </el-form-item>
+                </el-col>
+                <div class="checkUnit-point">
+
+                            <div class="filter-container">
+                                <el-button size="default" type="primary" @click="openApproveActionDialog('新增', '', 0)">
+                                    <el-icon>
+                                        <ele-FolderAdd />
+                                    </el-icon>
+                                    新增审批项
+                                </el-button>
+                            </div>
+
+                            <el-table border fit highlight-current-row :data="approveLevelForm.itemList" style="width: 100%">
+                                <el-table-column property="itemName" label="审批项名称" show-overflow-tooltip> </el-table-column>
+                                <el-table-column property="type" label="审批项类型" show-overflow-tooltip>
+                                    <template slot-scope="scope">
+                                        <div v-for="item in typeList">
+                                            <div v-if="scope.row.type === item.id">
+                                                <span>{{item.name}}</span>
+                                            </div>
+                                        </div>
+                                    </template>
+                                </el-table-column>
+                                <el-table-column property="measureId" label="措施名称" show-overflow-tooltip>
+                                    <template slot-scope="scope">
+                                        <div v-for="item in actionList">
+                                            <div v-if="scope.row.measureId === item.id">
+                                                <span>{{item.context}}</span>
+                                            </div>
+                                        </div>
+                                    </template>
+                                </el-table-column>
+                                <el-table-column property="standId" label="标准名称" show-overflow-tooltip>
+                                    <template slot-scope="scope">
+                                        <div v-for="item in standardList">
+                                            <div v-if="scope.row.standId === item.ruleStandId">
+                                                <span>{{item.text}}</span>
+                                            </div>
+                                        </div>
+                                    </template>
+                                </el-table-column>
+                                <el-table-column label="操作" width="150" align="center">
+                                    <template slot-scope="scope">
+                                        <el-button type="text" size="small" @click="openApproveActionDialog('修改', scope.row, scope.$index)">修改</el-button>
+                                        <el-button type="text" size="small" style="color: red" @click="deleteApproveItem(scope.$index)">删除</el-button>
+                                    </template>
+                                </el-table-column>
+                            </el-table>
+                </div>
+
+                <div align="right" style="padding-top: 10px">
+                    <el-button type="warning" @click="approveLevelDialog = false" size="default" plain>取消</el-button>
+                    <el-button type="primary" @click="submitApproveLevel()" size="default">确认</el-button>
+                </div>
+            </el-form>
+        </el-dialog>
+        <approve-item-dialog ref="approveItemDialogRef" @addApprovalItem="achieveApprovalItem"></approve-item-dialog>
+    </div>
+</template>
+
+<script>
+
+import approveItemDialog from './approveItemDialog.vue';
+import {safetyActionApi} from "../../../../../api/safetyAction";
+import {approveBasicApi} from "../../../../../api/approveBasic";
+
+export default {
+    name: 'approveLevelDialog',
+    components: { approveItemDialog },
+    data(){
+        return{
+            title: '',
+            tableKey:'',
+            activeName: 'ApproveAction',
+            approveLevelDialog: false,
+            approveLevelForm: {
+                id: null,
+                stepName: null,
+                stepSerial: null,
+                type: null,
+                continueTime: null,
+                continueTimeUnit: null,
+                unitList: [],
+                itemList: []
+            },
+            approveLevelFormRule: {
+                stepName: [{ required: true, message: '请填写层次名称', trigger: 'blur' }],
+                type: [{ required: true, message: '请选择审批层级', trigger: 'change' }],
+                unitList: [{ required: true, message: '请选择审批人', trigger: 'change' }],
+                continueTime: [{ required: true, message: '请填写有效时间', trigger: 'blur' }]
+            },
+            departmentList: [],
+            userList: [],
+            timeList: [
+                { id: 1, name: '日' },
+                { id: 2, name: '时' },
+                { id: 3, name: '分' }
+            ],
+            typeList: [
+                { id: 1, name: '单人' },
+                { id: 2, name: '多人' },
+                { id: 3, name: '分析人' }
+            ],
+            workLevelList: [],
+            actionList: [],
+            standardList: []
+        }
+    },
+    created() {
+        this.getActionData()
+        this.getStandardData()
+    },
+    methods:{
+        showApproveLevelDialog(type, value, userList) {
+            this.approveLevelDialog = true;
+            this.userList = userList;
+            this.$nextTick(() => {
+                this.$refs["approveLevelFormRef"].clearValidate()
+            })
+            if (type === '新增') {
+                this.title = '新增审批层级';
+                this.approveLevelForm = {
+                    id: null,
+                    stepName: null,
+                    stepSerial: null,
+                    type: null,
+                    continueTime: null,
+                    continueTimeUnit: null,
+                    unitList: [],
+                    itemList: []
+                };
+            } else {
+                this.title = '修改审批层级';
+                this.approveLevelForm = JSON.parse(JSON.stringify(value));
+                this.approveLevelForm.unitList = this.approveLevelForm.unitList.map((item) => {
+                    return item.bindUid;
+                });
+            }
+        },
+
+        openApproveActionDialog(type, value, index) {
+            this.$refs["approveLevelFormRef"].validate((valid) => {
+                if (valid) {
+                    this.$refs.approveItemDialogRef.showApproveItemDialog(type, value, index, this.approveLevelForm, this.standardList, this.actionList);
+                } else {
+                    this.$message({
+                        type: 'warning',
+                        message: '请先完善审批层级信息,才能选择审批项'
+                    });
+                }
+            });
+        },
+
+        submitApproveLevel() {
+            this.$refs["approveLevelFormRef"].validate((valid) => {
+                if (valid) {
+                    this.approveLevelForm.unitList = this.approveLevelForm.unitList.map((item) => {
+                        return { bindUid: item };
+                    });
+                    this.$emit('addApprovalLevel', this.approveLevelForm, this.title);
+                    this.approveLevelDialog = false;
+                } else {
+                    this.$message({
+                        type: 'warning',
+                        message: '请完善审批层级基本信息'
+                    });
+                }
+            });
+        },
+
+        achieveApprovalItem(value, title, index) {
+            debugger
+            if (title === '新增审批项') {
+                this.approveLevelForm.itemList.push(value);
+            } else {
+                // this.approveLevelForm.itemList[index] = JSON.parse(JSON.stringify(value));
+                this.$set(this.approveLevelForm.itemList,index,value)
+            }
+        },
+
+        deleteApproveItem(index) {
+            this.approveLevelForm.itemList.splice(index, 1);
+        },
+
+        async getActionData() {
+            let res = await safetyActionApi().getAllSafetyActionList({ workType: null, type: null, context: null });
+            if (res.data.code === '200') {
+                this.actionList = res.data.data;
+            } else {
+                this.$message({
+                    type: 'warning',
+                    message: res.data.msg
+                });
+            }
+        },
+
+        async getStandardData() {
+            let res = await approveBasicApi().getAllApproveBasicList({ ruleStandType: null, title: null });
+            if (res.data.code === '200') {
+                this.standardList = res.data.data;
+            } else {
+                this.$message({
+                    type: 'warning',
+                    message: res.data.msg
+                });
+            }
+        },
+
+    },
+};
+</script>
+
+<style scoped></style>
diff --git a/src/views/specialWorkManage/workFlow/approveRule/components/approveRuleDialog.vue b/src/views/specialWorkManage/workFlow/approveRule/components/approveRuleDialog.vue
new file mode 100644
index 0000000..ed4956e
--- /dev/null
+++ b/src/views/specialWorkManage/workFlow/approveRule/components/approveRuleDialog.vue
@@ -0,0 +1,484 @@
+<template>
+    <div class="system-add-menu-container">
+        <el-dialog :visible.sync="ifShowApproveRuleDialog" :title="title" :close-on-click-modal="false">
+            <el-form :model="approveRuleForm" label-width="120px" ref="approveRuleFormRef" :rules="approveRuleFormRules">
+                    <el-col :span="24">
+                        <el-form-item label="任务名称" prop="ruleName">
+                            <el-input v-model="approveRuleForm.ruleName" :disabled="!disabled" class="input-add" placeholder="请填写任务名称"> </el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="24">
+                        <el-form-item label="部门名称" prop="depId">
+                            <el-select v-model="approveRuleForm.depId" @change="clearValue" :disabled="!disabled" placeholder="请选择作业类型" class="input-add">
+                                <el-option v-for="item in departmentList" :key="item.id" :value="item.id" :label="item.department"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="24">
+                        <el-form-item label="作业类型" prop="workType">
+                            <el-select v-model="approveRuleForm.workType" @change="clearValue" :disabled="!disabled" placeholder="请选择作业类型" class="input-add">
+                                <el-option v-for="item in workTypeList" :key="item.id" :value="item.id" :label="item.name"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                        <el-col :span="24" v-if="approveRuleForm.workType === 3 || approveRuleForm.workType === 6 || approveRuleForm.workType === 8 || approveRuleForm.workType === 1">
+                        <el-form-item label="作业等级" prop="workLevel">
+                            <el-select v-model="approveRuleForm.workLevel" :disabled="!disabled" placeholder="请选择作业等级" class="input-add">
+                                <el-option v-for="item in workLevelList" :key="item.id" :value="item.id" :label="item.name"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="24">
+                        <el-form-item label="创建审批链">
+                            <div style="width: 100%;padding-bottom: 10px" v-show="disabled">
+                                <el-button type="primary" size="default" @click="openApproveLevelDialog('新增', '')">新增审批层级</el-button>
+                            </div>
+                            <div style="width: 100%; margin-left: -30px">
+                                <div v-for="(item, index) in approveRuleForm.stepList" class="stepItem">
+                                    <div class="stepNum">{{ index + 1 }}</div>
+                                    <div class="stepCard">
+                                        <el-card class="box-card">
+                                            <div class="text item">
+                                                层级名称:<span>{{ item.stepName }}</span>
+                                            </div>
+                                            <!--                                            <div class="text item">-->
+                                            <!--                                                所属设备区域:<span>{{ item.regionId }}</span>-->
+                                            <!--                                            </div>-->
+                                            <div class="text item" v-for="i in typeList">
+                                                <div v-if="i.id === item.type">
+                                                    审批层级:<span>{{ i.name }}</span>
+                                                </div>
+                                            </div>
+                                            <!--                                            <div class="text item">-->
+                                            <!--                                                关联RFID:<span>{{ item.rfidId }}</span>-->
+                                            <!--                                            </div>-->
+                                            <div class="text item">
+                                                审批人:<span>{{
+                                                    JSON.parse(JSON.stringify(
+                                                        item.unitList
+                                                            .map((item) => {
+                                                                // for(let i in userList){
+                                                                //     debugger
+                                                                //     if(userList[i].id === item.bindUid){
+                                                                //         return userList[i].realname
+                                                                //     }
+                                                                // }
+                                                                return userList.find((i) => i.id === item.bindUid).realname;
+                                                            })
+                                                            .join('、')
+                                                    ))
+                                                }}</span>
+                                            </div>
+                                            <!--                                            <div class="text item">-->
+                                            <!--                                                巡检指标:<span>{{ item.quotaId }}</span>-->
+                                            <!--                                            </div>-->
+                                            <div class="text item" v-for="i in timeList">
+                                                <div v-if="i.id === item.continueTimeUnit">
+                                                    审批有效时长:<span>{{ item.continueTime }}</span>
+                                                    <span>{{ i.name }}</span>
+                                                </div>
+                                            </div>
+                                            <!--                                            <div class="text item">-->
+                                            <!--                                                数据填报类型:<span>{{ item.thisReportType }}</span>-->
+                                            <!--                                            </div>-->
+                                            <div class="text item">
+                                                审批项:<span>{{
+                                                    item.itemList
+                                                        .map((item) => {
+                                                            return item.itemName;
+                                                        })
+                                                        .join('、')
+                                                }}</span>
+                                            </div>
+                                        </el-card>
+                                    </div>
+                                    <div v-show="disabled">
+                                        <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px" size="default" @click="openApproveLevelDialog('修改', item)">修改</el-button>
+                                        <el-button type="danger" size="default" @click="deleteApproveLevel(index, item)">删除</el-button>
+                                    </div>
+                                </div>
+                            </div>
+                        </el-form-item>
+                    </el-col>
+            </el-form>
+            <template #footer>
+                <div v-show="disabled" class="dialog-footer" align="right">
+                    <el-button type="warning" @click="ifShowApproveRuleDialog = false" size="default" plain>取消</el-button>
+                    <el-button type="primary" @click="submitApproveRule()" size="default">确认</el-button>
+                </div>
+            </template>
+        </el-dialog>
+        <approve-level-dialog ref="approveLevelDialogRef" @addApprovalLevel="achieveApprovalLevel"></approve-level-dialog>
+    </div>
+</template>
+
+<script>
+import approveLevelDialog from './approveLevelDialog.vue';
+
+export default {
+    name: 'approveRuleDialog',
+    components: {approveLevelDialog},
+    data() {
+        return {
+            title: '',
+            pointTitle: '',
+            disabled: true,
+            ifShowApproveRuleDialog: false,
+            inspectPointForm: {
+                id: null,
+                stepName: null,
+                stepSerial: null,
+                type: null,
+                continueTime: null,
+                continueTimeUnit: null,
+                unitList: [],
+                itemList: []
+            },
+            approveRuleForm: {
+                id: null,
+                ruleName: null,
+                depId: null,
+                workType: null,
+                workLevel: null,
+                stepList: []
+            },
+            approveRuleFormRules: {
+                ruleName: [{required: true, message: '请填写规则名称', trigger: 'blur'}],
+                depId: [{required: true, message: '请选择部门', trigger: 'change'}],
+                workLevel: [{required: true, message: '请选择作业等级', trigger: 'change'}],
+                workType: [{required: true, message: '请选择作业类型', trigger: 'cahnge'}]
+            },
+            departmentList: [],
+            userList: [],
+            typeList: [
+                {id: 1, name: '单人'},
+                {id: 2, name: '多人'},
+                {id: 3, name: '分析人'}
+            ],
+            timeList: [
+                {id: 1, name: '日'},
+                {id: 2, name: '时'},
+                {id: 3, name: '分'}
+            ],
+            workTypeList: [
+                {id: 1, name: '动火作业'},
+                {id: 2, name: '受限空间作业'},
+                {id: 3, name: '吊装作业'},
+                {id: 4, name: '动土作业'},
+                {id: 5, name: '断路作业'},
+                {id: 6, name: '高处作业'},
+                {id: 7, name: '临时用电作业'},
+                {id: 8, name: '盲板抽堵作业'}
+            ],
+            workLevelList: []
+        }
+    },
+    created() {
+
+    },
+    methods: {
+        openApproveLevelDialog(type, value) {
+            this.$refs.approveLevelDialogRef.showApproveLevelDialog(type, value, this.userList);
+        },
+
+        achieveApprovalLevel(value, title) {
+            if (title === '新增审批层级') {
+                if (this.approveRuleForm.stepList.length === 0) {
+                    value.stepSerial = 1;
+                    this.approveRuleForm.stepList.push(value);
+                } else {
+                    value.stepSerial = (this.approveRuleForm.stepList[this.approveRuleForm.stepList.length - 1].stepSerial) +1;
+                    this.approveRuleForm.stepList.push(value);
+                }
+            } else {
+                let result = this.approveRuleForm.stepList.findIndex((item) => item.stepSerial === value.stepSerial);
+                // this.approveRuleForm.stepList[result] = JSON.parse(JSON.stringify(value));
+                this.$set(this.approveRuleForm.stepList,result,value)
+            }
+        },
+
+        showApproveRuleDialog(type, value, departmentList, userList, workTypeList) {
+            this.ifShowApproveRuleDialog = true;
+            this.userList = userList;
+            this.workTypeList = workTypeList;
+            this.departmentList = departmentList;
+            this.$nextTick(()=>{
+                this.$refs["approveRuleFormRef"].clearValidate()
+            })
+            if (type === '新增') {
+                this.disabled = true;
+                this.title = '新增审批规则';
+                this.approveRuleForm = {
+                    id: null,
+                    ruleName: null,
+                    depId: null,
+                    workType: null,
+                    workLevel: null,
+                    stepList: []
+                };
+            } else if (type === '修改') {
+                this.disabled = true;
+                this.title = '修改审批规则';
+                this.approveRuleForm = JSON.parse(JSON.stringify(value));
+                this.setValue(value.workType);
+            } else {
+                this.disabled = false;
+                this.title = '查看审批规则';
+                this.setValue(value.workType);
+                this.approveRuleForm = JSON.parse(JSON.stringify(value));
+            }
+        },
+
+        deleteApproveLevel(index, item) {
+            this.approveRuleForm.stepList.splice(index, 1);
+        },
+
+        clearValue() {
+            if (this.approveRuleForm.workType === 1) {
+                this.approveRuleForm.workLevel = null;
+                this.workLevelList = [
+                    {id: 3, name: '特级动火作业'},
+                    {id: 1, name: '一级动火作业'},
+                    {id: 2, name: '二级动火作业'}
+                ];
+            } else if (this.approveRuleForm.workType === 3) {
+                this.approveRuleForm.workLevel = null;
+                this.workLevelList = [
+                    {id: 8, name: '一级吊装作业'},
+                    {id: 9, name: '二级吊装作业'},
+                    {id: 10, name: '三级吊装作业'}
+                ];
+            } else if (this.approveRuleForm.workType === 6) {
+                this.approveRuleForm.workLevel = null;
+                this.workLevelList = [
+                    {id: 7, name: '特级高处作业'},
+                    {id: 4, name: '一级高处作业'},
+                    {id: 5, name: '二级高处作业'},
+                    {id: 6, name: '三级高处作业'},
+                ];
+            } else if (this.approveRuleForm.workType === 8) {
+                this.approveRuleForm.workLevel = null;
+                this.workLevelList = [
+                    {id: 11, name: '抽盲板作业'},
+                    {id: 12, name: '堵盲板作业'}
+                ];
+            } else {
+                this.approveRuleForm.workLevel = null;
+                this.workLevelList = [];
+            }
+        },
+
+        setValue(workType) {
+            if (workType === 1) {
+                this.workLevelList = [
+                    {id: 3, name: '特级动火作业'},
+                    {id: 1, name: '一级动火作业'},
+                    {id: 2, name: '二级动火作业'},
+                ];
+            } else if (workType === 3) {
+                this.workLevelList = [
+                    {id: 8, name: '一级吊装作业'},
+                    {id: 9, name: '二级吊装作业'},
+                    {id: 10, name: '三级吊装作业'}
+                ];
+            } else if (workType === 6) {
+                this.workLevelList = [
+                    {id: 7, name: '四级高处作业'},
+                    {id: 4, name: '一级高处作业'},
+                    {id: 5, name: '二级高处作业'},
+                    {id: 6, name: '三级高处作业'}
+                ];
+            } else if (workType === 8) {
+                this.workLevelList = [
+                    {id: 11, name: '抽盲板作业'},
+                    {id: 12, name: '堵盲板作业'}
+                ];
+            } else {
+                this.workLevelList = [];
+            }
+        },
+
+        parseNumber(type, value) {
+            if (type === '时间单位') {
+                return this.timeList.find((item) => item.id === value).name;
+            }
+        },
+
+        submitApproveRule() {
+            this.$refs["approveRuleFormRef"].validate(async (valid) => {
+                if (valid) {
+                    if (this.title === '新增审批规则') {
+                        let res = await approveRuleApi().addApproveRule(this.approveRuleForm);
+                        if (res.data.code === '200') {
+                            this.$message({
+                                type: 'success',
+                                message: '审批规则新增成功',
+                                duration: 2000
+                            });
+                            this.ifShowApproveRuleDialog = false;
+                            this.$emit('refreshApproveRule');
+                        } else {
+                            this.$message({
+                                type: 'warning',
+                                message: res.data.msg
+                            });
+                        }
+                    } else {
+                        let res = await approveRuleApi().modApproveRule(this.approveRuleForm);
+                        if (res.data.code === '200') {
+                            this.$message({
+                                type: 'success',
+                                message: '审批规则修改成功',
+                                duration: 2000
+                            });
+                            this.ifShowApproveRuleDialog = false;
+                            this.$emit('refreshApproveRule');
+                        } else {
+                            this.$message({
+                                type: 'warning',
+                                message: res.data.msg
+                            });
+                        }
+                    }
+                } else {
+                    this.$message({
+                        type: 'warning',
+                        message: '请完善基本信息'
+                    });
+                }
+            });
+        }
+    },
+};
+</script>
+
+<style scoped lang="scss">
+$homeNavLengh: 8;
+.home-container {
+    height: calc(100vh - 144px);
+    box-sizing: border-box;
+    overflow: hidden;
+    .homeCard {
+        width: 100%;
+        padding: 20px;
+        box-sizing: border-box;
+        background: #fff;
+        border-radius: 4px;
+
+        .main-card {
+            width: 100%;
+            height: 100%;
+            .cardTop {
+                display: flex;
+                align-items: center;
+                justify-content: space-between;
+                margin-bottom: 20px;
+                .mainCardBtn {
+                    margin: 0;
+                }
+            }
+            .pageBtn {
+                height: 60px;
+                display: flex;
+                align-items: center;
+                justify-content: right;
+
+                .demo-pagination-block + .demo-pagination-block {
+                    margin-top: 10px;
+                }
+                .demo-pagination-block .demonstration {
+                    margin-bottom: 16px;
+                }
+            }
+        }
+        &:last-of-type {
+            height: calc(100% - 100px);
+        }
+    }
+    .el-row {
+        display: flex;
+        align-items: center;
+        margin-bottom: 20px;
+        &:last-child {
+            margin-bottom: 0;
+        }
+        .grid-content {
+            align-items: center;
+            min-height: 36px;
+        }
+
+        .topInfo {
+            display: flex;
+            align-items: center;
+            font-size: 16px;
+            font-weight: bold;
+
+            & > div {
+                white-space: nowrap;
+                margin-right: 20px;
+            }
+        }
+    }
+}
+.stepItem {
+    width: 100%;
+    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;
+    }
+    .stepNum {
+        width: 30px;
+        height: 30px;
+        border-radius: 15px;
+        box-sizing: border-box;
+        color: #333;
+        border: 1px solid #999;
+        line-height: 28px;
+        text-align: center;
+        margin-right: 10px;
+        margin-left: -16px;
+        margin-top: -30px;
+    }
+    .stepCard {
+        width: 100%;
+        margin-top: -30px;
+
+        .box-card {
+            width: 100%;
+            >>>.el-card__header {
+                padding: 10px 15px;
+            }
+            .card-header {
+                width: 100%;
+                display: flex;
+                justify-content: space-between;
+                align-items: center;
+                & > div:first-of-type {
+                    margin-right: 80px;
+                    font-size: 18px;
+                    font-weight: bold;
+                }
+            }
+        }
+    }
+    &:hover .card-header {
+        color: #0098f5;
+    }
+    &:hover .stepNum {
+        border: 2px solid #0098f5;
+        color: #0098f5;
+    }
+}
+/deep/.el-date-editor {
+    width: 100%;
+}
+</style>
diff --git a/src/views/specialWorkManage/workFlow/approveRule/index.vue b/src/views/specialWorkManage/workFlow/approveRule/index.vue
new file mode 100644
index 0000000..ec77eb0
--- /dev/null
+++ b/src/views/specialWorkManage/workFlow/approveRule/index.vue
@@ -0,0 +1,409 @@
+<template>
+    <div class="home-container">
+        <div style="height: 100%">
+            <el-row class="homeCard">
+                <div class="basic-line">
+                    <span>规则名称:</span>
+                    <el-input v-model="tableData.params.searchParams.ruleName" class="input-box" placeholder="规则名称"> </el-input>
+                </div>
+                <div class="basic-line">
+                    <span>部门:</span>
+                    <el-select v-model="tableData.params.searchParams.depId" clearable filterable class="input-box" placeholder="作业类型">
+                        <el-option v-for="item in departmentList" :key="item.id" :label="item.department" :value="item.id"></el-option>
+                    </el-select>
+                </div>
+                <div class="basic-line">
+                    <span>作业类型:</span>
+                    <el-select v-model="tableData.params.searchParams.workType" clearable filterable class="input-box" placeholder="作业类型">
+                        <el-option v-for="item in workTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                    </el-select>
+                </div>
+                <div class="basic-line">
+                    <span>作业等级:</span>
+                    <el-select v-model="tableData.params.searchParams.workLevel" clearable filterable class="input-box" placeholder="作业等级">
+                        <el-option v-for="item in workLevelList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                    </el-select>
+                </div>
+                <div style="padding-bottom: 10px">
+                    <el-button type="primary" @click="getApproveRule">查询</el-button>
+                    <el-button plain @click="reset">重置</el-button>
+                </div>
+            </el-row>
+            <div class="homeCard">
+                <div class="main-card">
+                    <el-row class="cardTop">
+                        <el-col :span="24" class="mainCardBtn">
+                            <el-button type="primary"  size="default" @click="openApproveRuleDialog('新增', {})">新建</el-button>
+                            <el-button type="danger"  size="default" @click="deleteMoreApproveRule" plain>批量删除</el-button>
+                        </el-col>
+                    </el-row>
+                    <el-table ref="multipleTableRef" :data="tableData.approveRuleData" 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 property="ruleName" label="任务名称" />
+                        <el-table-column property="workType" label="作业类型">
+                            <template slot-scope="scope">
+                                <span>
+                                    {{ parseNumber(scope.row.workType, '作业类型') }}
+                                </span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column property="workLevel" label="作业等级">
+                            <template slot-scope="scope">
+                                <span>
+                                    {{ parseNumber(scope.row.workLevel, '作业等级') }}
+                                </span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="createUname" label="创建人" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="gmtCreate" label="创建时间" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="modifiedUname" label="最后修改人" show-overflow-tooltip></el-table-column>
+                        <el-table-column prop="gmtModified" label="最后修改时间" show-overflow-tooltip></el-table-column>
+                        <el-table-column fixed="right" label="操作" align="center" width="300">
+                            <template slot-scope="scope">
+                                <el-button link type="text"  @click="openApproveRuleDialog('查看', scope.row)">查看</el-button>
+                                <el-button link type="text"  @click="openApproveRuleDialog('修改', scope.row)">修改</el-button>
+                                <el-button link type="text" style="color: red" @click="deleteApproveRule(scope.row)">删除</el-button>
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                    <div class="pageBtn">
+                        <el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="tableData.params.pageIndex" background v-model:page-size="tableData.params.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="tableData.total" class="page-position"> </el-pagination>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <approve-rule-dialog ref="approveRuleDialogRef" @refreshApproveRule="getApproveRule"></approve-rule-dialog>
+    </div>
+</template>
+
+<script>
+import approveRuleDialog from './components/approveRuleDialog'
+import { approveRuleApi } from '../../../../api/approveRule'
+import {getDepartmentList} from "../../../../api/departmentManage";
+import {safetyInspectionItemName} from "../../../../api/safetySelfInspection";
+export default {
+    name: 'index',
+    components: { approveRuleDialog },
+    data(){
+        return{
+            tableData: {
+                approveRuleData: [],
+                total: 0,
+                loading: false,
+                params: {
+                    pageIndex: 1,
+                    pageSize: 10,
+                    searchParams: {
+                        ruleName: null,
+                        depId: null,
+                        workType: null,
+                        workLevel: null
+                    }
+                }
+            },
+            workTypeList: [
+                { id: 1, name: '动火作业' },
+                { id: 2, name: '受限空间作业' },
+                { id: 3, name: '吊装作业' },
+                { id: 4, name: '动土作业' },
+                { id: 5, name: '断路作业' },
+                { id: 6, name: '高处作业' },
+                { id: 7, name: '临时用电作业' },
+                { id: 8, name: '盲板抽堵作业' }
+            ],
+            workLevelList: [
+                { id: 3, name: '特级动火作业' },
+                { id: 1, name: '一级动火作业' },
+                { id: 2, name: '二级动火作业' },
+                { id: 7, name: '特级高处作业' },
+                { id: 4, name: '一级高处作业' },
+                { id: 5, name: '二级高处作业' },
+                { id: 6, name: '三级高处作业' },
+                { id: 8, name: '一级吊装作业' },
+                { id: 9, name: '二级吊装作业' },
+                { id: 10, name: '三级吊装作业' },
+                { id: 11, name: '抽盲板作业' },
+                { id: 12, name: '堵盲板作业' }
+            ],
+            departmentList: [],
+            userList: [],
+            deleteList: { ids: [] },
+            timeType: [
+                { id: 1, name: '分' },
+                { id: 2, name: '小时' },
+                { id: 3, name: '日' },
+                { id: 4, name: '月' },
+                { id: 5, name: '年' }
+            ]
+        }
+    },
+    created(){
+        this.getApproveRule();
+        this.getDepartmentData();
+        this.getUserData();
+    },
+    methods:{
+        async getApproveRule() {
+            let res = await approveRuleApi().getApproveRuleList(this.tableData.params);
+            if (res.data.code === '200') {
+                this.tableData.approveRuleData = res.data.data;
+                this.tableData.total = res.data.total;
+            } else {
+                this.$message({
+                    type: 'warning',
+                    message: res.data.msg
+                });
+            }
+        },
+
+        openApproveRuleDialog(type, value) {
+            this.$refs.approveRuleDialogRef.showApproveRuleDialog(type, value, this.departmentList, this.userList, this.workTypeList);
+        },
+
+        async getDepartmentData() {
+            let res = await getDepartmentList({pageSize:1000,pageIndex:1})
+            if(res.data.code === '200'){
+                this.departmentList = res.data.result.result
+            }else{
+                this.$message({
+                    message:res.data.message,
+                    type:'warning'
+                })
+            }
+        },
+
+        async getUserData() {
+            let res = await safetyInspectionItemName()
+            if(res.data.code === '200'){
+                this.userList = res.data.result
+            }else{
+                this.$message({
+                    message:res.data.message,
+                    type:'warning'
+                })
+            }
+        },
+
+        deleteApproveRule(row) {
+            this.$confirm(`此操作将永久删除该审批规则,是否继续?`, '提示', {
+                confirmButtonText: '确认',
+                cancelButtonText: '取消',
+                type: 'warning'
+            })
+                .then(async () => {
+                    let res = await approveRuleApi().deleteApproveRule({ ids: [row.id] });
+                    this.deleteList.ids = [];
+                    if (res.data.code === '200') {
+                        this.$message({
+                            type: 'success',
+                            duration: 2000,
+                            message: '删除成功'
+                        });
+                        await this.getApproveRule();
+                    } else {
+                        this.$message({
+                            type: 'warning',
+                            message: res.data.msg
+                        });
+                    }
+                })
+                .catch(() => {});
+        },
+
+        deleteMoreApproveRule() {
+            this.$confirm.confirm(`此操作将永久删除这些审批规则,是否继续?`, '提示', {
+                confirmButtonText: '确认',
+                cancelButtonText: '取消',
+                type: 'warning'
+            })
+                .then(async () => {
+                    let res = await approveRuleApi().deleteApproveRule(this.deleteList);
+                    if (res.data.code === '200') {
+                        this.$message({
+                            type: 'success',
+                            duration: 2000,
+                            message: '删除成功'
+                        });
+                        await this.getApproveRule();
+                    } else {
+                        this.$message({
+                            type: 'warning',
+                            message: res.data.msg
+                        });
+                    }
+                })
+                .catch(() => {});
+        },
+
+        parseNumber(value, type) {
+            if (type === '作业类型') {
+                return this.workTypeList.find((item) => item.id === value).name;
+            } else if (type === '作业等级') {
+                return this.workLevelList.find((item) => item.id == value).name;
+            } else {
+            }
+        },
+
+        handleSelectionChange(val) {
+            this.deleteList.ids = val.map((item) => {
+                return item.ruleId;
+            });
+        },
+
+        onHandleSizeChange(val) {
+            this.tableData.params.pageSize = val;
+            this.getApproveRule();
+        },
+
+        onHandleCurrentChange(val) {
+            this.tableData.params.pageIndex = val;
+            this.getApproveRule();
+        },
+
+        reset() {
+            this.tableData.params = {
+                pageIndex: 1,
+                pageSize: 10,
+                searchParams: {
+                    ruleName: null,
+                    depId: null,
+                    workType: null,
+                    workLevel: null
+                }
+            };
+        }
+    },
+};
+</script>
+
+<style scoped lang="scss">
+$homeNavLengh: 8;
+.home-container {
+    height: calc(100vh - 100px);
+    box-sizing: border-box;
+    overflow: hidden;
+    .homeCard {
+        width: 100%;
+        padding: 20px;
+        box-sizing: border-box;
+        background: #fff;
+        border-radius: 4px;
+
+        .main-card {
+            width: 100%;
+            height: 100%;
+            .cardTop {
+                display: flex;
+                align-items: center;
+                justify-content: space-between;
+                margin-bottom: 20px;
+                .mainCardBtn {
+                    margin: 0;
+                }
+            }
+            .pageBtn {
+                height: 60px;
+                display: flex;
+                align-items: center;
+                justify-content: right;
+
+                .demo-pagination-block + .demo-pagination-block {
+                    margin-top: 10px;
+                }
+                .demo-pagination-block .demonstration {
+                    margin-bottom: 16px;
+                }
+            }
+        }
+        &:last-of-type {
+            height: calc(100% - 100px);
+        }
+    }
+    .el-row {
+        display: flex;
+        align-items: center;
+        margin-bottom: 20px;
+        &:last-child {
+            margin-bottom: 0;
+        }
+        .grid-content {
+            align-items: center;
+            min-height: 36px;
+        }
+
+        .topInfo {
+            display: flex;
+            align-items: center;
+            font-size: 16px;
+            font-weight: bold;
+
+            & > div {
+                white-space: nowrap;
+                margin-right: 20px;
+            }
+        }
+    }
+}
+.stepItem {
+    width: 100%;
+    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;
+    }
+    .stepNum {
+        width: 30px;
+        height: 30px;
+        border-radius: 15px;
+        box-sizing: border-box;
+        color: #333;
+        border: 1px solid #999;
+        line-height: 28px;
+        text-align: center;
+        margin-right: 10px;
+        margin-left: -16px;
+        margin-top: -30px;
+    }
+    .stepCard {
+        width: 100%;
+        margin-top: -30px;
+
+        .box-card {
+            width: 100%;
+            >>>.el-card__header {
+                padding: 10px 15px;
+            }
+            .card-header {
+                width: 100%;
+                display: flex;
+                justify-content: space-between;
+                align-items: center;
+                & > div:first-of-type {
+                    margin-right: 80px;
+                    font-size: 18px;
+                    font-weight: bold;
+                }
+            }
+        }
+    }
+    &:hover .card-header {
+        color: #0098f5;
+    }
+    &:hover .stepNum {
+        border: 2px solid #0098f5;
+        color: #0098f5;
+    }
+}
+.page-position{
+    float: right;
+    padding-top: 10px;
+}
+</style>
diff --git a/src/views/specialWorkManage/workFlow/index.vue b/src/views/specialWorkManage/workFlow/index.vue
new file mode 100644
index 0000000..ea834ff
--- /dev/null
+++ b/src/views/specialWorkManage/workFlow/index.vue
@@ -0,0 +1,13 @@
+<template>
+    <router-view></router-view>
+</template>
+
+<script>
+    export default {
+        name: "index"
+    }
+</script>
+
+<style scoped>
+
+</style>
diff --git a/src/views/specialWorkManage/workTicket/index.vue b/src/views/specialWorkManage/workTicket/index.vue
new file mode 100644
index 0000000..ea834ff
--- /dev/null
+++ b/src/views/specialWorkManage/workTicket/index.vue
@@ -0,0 +1,13 @@
+<template>
+    <router-view></router-view>
+</template>
+
+<script>
+    export default {
+        name: "index"
+    }
+</script>
+
+<style scoped>
+
+</style>
diff --git a/src/views/specialWorkManage/workTicket/myApproval/index.vue b/src/views/specialWorkManage/workTicket/myApproval/index.vue
new file mode 100644
index 0000000..34cd1a0
--- /dev/null
+++ b/src/views/specialWorkManage/workTicket/myApproval/index.vue
@@ -0,0 +1,13 @@
+<template>
+
+</template>
+
+<script>
+export default {
+    name: "index"
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/src/views/specialWorkManage/workTicket/myJobApply/index.vue b/src/views/specialWorkManage/workTicket/myJobApply/index.vue
new file mode 100644
index 0000000..34cd1a0
--- /dev/null
+++ b/src/views/specialWorkManage/workTicket/myJobApply/index.vue
@@ -0,0 +1,13 @@
+<template>
+
+</template>
+
+<script>
+export default {
+    name: "index"
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/src/views/specialWorkManage/workTicket/workApply/index.vue b/src/views/specialWorkManage/workTicket/workApply/index.vue
new file mode 100644
index 0000000..e826003
--- /dev/null
+++ b/src/views/specialWorkManage/workTicket/workApply/index.vue
@@ -0,0 +1,13 @@
+<template>
+<div>1</div>
+</template>
+
+<script>
+export default {
+    name: "index"
+}
+</script>
+
+<style scoped>
+
+</style>

--
Gitblit v1.9.2