diff --git a/leave-school-vue/src/views/procedures/node/index.vue b/leave-school-vue/src/views/procedures/node/index.vue
index 648e4f2..8c21bc2 100644
--- a/leave-school-vue/src/views/procedures/node/index.vue
+++ b/leave-school-vue/src/views/procedures/node/index.vue
@@ -76,6 +76,8 @@
         <template slot-scope="scope">
           <el-button type="text" size="small" @click="handleCreate(scope.row.id, 'update')">修改</el-button>
           <el-button type="text" size="small" @click="handleDelete(scope.row.id)">删除</el-button>
+          <el-button type="text" size="small" @click="handleAuditor(scope.row.id)">编辑审核人</el-button>
+          <el-button type="text" size="small" @click="handlePrincipal(scope.row.id)">编辑负责人</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -84,7 +86,7 @@
       </el-pagination>
     </div>
 
-    <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" width="80%" top="10vh">
+    <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" width="60%" top="10vh">
       <el-form :rules="rules" ref="dataForm" :model="temp" label-position="left" label-width="150px" style='margin-left:50px;'>
         <el-form-item label="审核环节名称" prop="name">
           <el-input v-model="temp.name"></el-input>
@@ -132,17 +134,118 @@
         <el-button type="primary" @click="createData">提交</el-button>
       </div>
     </el-dialog>
+    <el-dialog title="编辑审核人" :visible.sync="dialogAuditorVisible" width="70%" top="10vh">
+      <el-form :inline="true" class="demo-form-inline"  :model="auditor" style='margin-left:50px;' >
+        <el-form-item label="工号" prop="ghxh">
+          <el-input v-model="auditor.ghxh" @blur="handleGetAuditor"></el-input>
+          <input type="hidden" v-model="auditor.id" />
+          <input type="hidden" v-model="nodeId" />
+        </el-form-item>
+        <el-form-item label="姓名" prop="xm">
+          <el-input v-model="auditor.xm" disabled="true"></el-input>
+        </el-form-item>
+        <el-form-item label="性别" prop="xb">
+          <el-input v-model="auditor.xb" disabled="true"></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="handleSaveAuditor">保存</el-button>
+        </el-form-item>
+      </el-form>
+      <el-table :data="auditorList" v-loading="listLoading" element-loading-text="Loading" border fit highlight-current-row>
+      <el-table-column align="center" type="index" label='序号' width="95">
+      </el-table-column>
+      <el-table-column label="工号" align="center">
+        <template slot-scope="scope">
+          {{scope.row.user.ghxh}}
+        </template>
+      </el-table-column>
+      <el-table-column label="姓名" align="center">
+        <template slot-scope="scope">
+          <span>{{scope.row.user.xm}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="性别" align="center">
+        <template slot-scope="scope">
+          {{scope.row.user.xb.label}}
+        </template>
+      </el-table-column>
+      <el-table-column
+        fixed="right"
+        header-align="center"
+        align="center"
+        width="150"
+        label="操作">
+        <template slot-scope="scope">
+          <el-button type="text" size="small" @click="handleDeleteAuditor(scope.row.id)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogAuditorVisible = false">返回</el-button>
+      </div>
+    </el-dialog>
+    <el-dialog title="编辑负责人" :visible.sync="dialogPrincipalVisible" width="70%" top="10vh">
+      <el-form :inline="true" class="demo-form-inline"  :model="principal" style='margin-left:50px;' >
+        <el-form-item label="工号" prop="ghxh">
+          <el-input v-model="principal.ghxh" @blur="handleGetPrincipal"></el-input>
+          <input type="hidden" v-model="principal.id" />
+          <input type="hidden" v-model="nodeId" />
+        </el-form-item>
+        <el-form-item label="姓名" prop="xm">
+          <el-input v-model="principal.xm" disabled="true"></el-input>
+        </el-form-item>
+        <el-form-item label="性别" prop="xb">
+          <el-input v-model="principal.xb" disabled="true"></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="handleSavePrincipal">保存</el-button>
+        </el-form-item>
+      </el-form>
+      <el-table :data="principalList" v-loading="listLoading" element-loading-text="Loading" border fit highlight-current-row>
+      <el-table-column align="center" type="index" label='序号' width="95">
+      </el-table-column>
+      <el-table-column label="工号" align="center">
+        <template slot-scope="scope">
+          {{scope.row.user.ghxh}}
+        </template>
+      </el-table-column>
+      <el-table-column label="姓名" align="center">
+        <template slot-scope="scope">
+          <span>{{scope.row.user.xm}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="性别" align="center">
+        <template slot-scope="scope">
+          {{scope.row.user.xb.label}}
+        </template>
+      </el-table-column>
+      <el-table-column
+        fixed="right"
+        header-align="center"
+        align="center"
+        width="150"
+        label="操作">
+        <template slot-scope="scope">
+          <el-button type="text" size="small" @click="handleDeletePrincipal(scope.row.id)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogPrincipalVisible = false">返回</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import { getList, getItem, createNode, deleteNode } from '@/api/leaveschoolnode-api'
+import { getList, getItem, createNode, deleteNode, getUser, getAuditorList, createNodeAuditor, deleteNodeAuditor, getPrincipalList, createNodePrincipal, deleteNodePrincipal } from '@/api/leaveschoolnode-api'
 import { getDicList } from '@/api/dictionary-api'
 import { getDeptList } from '@/api/department-api'
 import waves from '@/directive/waves' // 水波纹指令
 import { resetForm } from '@/utils'
 import { crudPageList, crudGetItem, crudCreate, crudDelete } from '@/utils/crud'
 import mixindata from '@/utils/crud'
+import { MessageBox } from 'element-ui'
 
 const initData = { auditType: '25', defaultAuditStatus: '22' }
 export default {
@@ -161,6 +264,15 @@
       auditTypeList: [],
       scopeList: [],
       statusList: [],
+      nodeId: '',
+      dialogAuditorVisible: false,
+      dialogPrincipalVisible: false,
+      auditor: {},
+      nodeAuditor: {},
+      auditorList: [],
+      principal: {},
+      nodePrincipal: {},
+      principalList: [],
       rules: {
         name: [{ required: true, message: '环节名称', trigger: 'blur' }],
         scope: [{ required: true, message: '范围控制', trigger: 'change' }],
@@ -225,6 +337,110 @@
     },
     handleDelete(rowid) {
       crudDelete(this, deleteNode, rowid, this.handlePageList)
+    },
+    handleAuditor(rowid) {
+      this.auditor = {}
+      this.nodeId = rowid
+      this.handleAuditorList()
+      this.dialogAuditorVisible = true
+    },
+    handleAuditorList() {
+      getAuditorList({ nodeId: this.nodeId }).then(response => {
+        this.auditorList = response.items
+      })
+    },
+    handleGetAuditor(event) {
+      const ghxh = event.target.value
+      if (ghxh) {
+        getUser({ ghxh: ghxh }).then(response => {
+          if (response.data) {
+            this.auditor = { 'id': response.data.id, 'ghxh': response.data.ghxh, 'xm': response.data.xm, 'xb': response.data.xb.label }
+          } else {
+            MessageBox.alert('用户不存在，请重新重新输入工号！', '消息', {
+              confirmButtonText: '确定'
+            })
+            this.auditor = {}
+          }
+        })
+      } else {
+        MessageBox.alert('请填写工号！', '消息', {
+          confirmButtonText: '确定'
+        })
+        this.auditor = {}
+      }
+    },
+    handleSaveAuditor() {
+      if (!this.auditor.id) {
+        MessageBox.alert('请填写正确的工号！', '消息', {
+          confirmButtonText: '确定'
+        })
+        return
+      }
+      this.nodeAuditor = { 'auditNode': { 'id': this.nodeId }, 'user': { 'id': this.auditor.id }}
+      createNodeAuditor(this.nodeAuditor).then(response => {
+        this.handleAuditorList()
+        this.$notify({
+          title: '成功',
+          message: '创建成功',
+          type: 'success',
+          duration: 2000
+        })
+      })
+    },
+    handleDeleteAuditor(rowid) {
+      crudDelete(this, deleteNodeAuditor, rowid, this.handleAuditorList)
+    },
+    handlePrincipal(rowid) {
+      this.principal = {}
+      this.nodeId = rowid
+      this.handlePrincipalList()
+      this.dialogPrincipalVisible = true
+    },
+    handlePrincipalList() {
+      getPrincipalList({ nodeId: this.nodeId }).then(response => {
+        this.principalList = response.items
+      })
+    },
+    handleGetPrincipal(event) {
+      const ghxh = event.target.value
+      if (ghxh) {
+        getUser({ ghxh: ghxh }).then(response => {
+          if (response.data) {
+            this.principal = { 'id': response.data.id, 'ghxh': response.data.ghxh, 'xm': response.data.xm, 'xb': response.data.xb.label }
+          } else {
+            MessageBox.alert('用户不存在，请重新重新输入工号！', '消息', {
+              confirmButtonText: '确定'
+            })
+            this.principal = {}
+          }
+        })
+      } else {
+        MessageBox.alert('请填写工号！', '消息', {
+          confirmButtonText: '确定'
+        })
+        this.principal = {}
+      }
+    },
+    handleSavePrincipal() {
+      if (!this.principal.id) {
+        MessageBox.alert('请填写正确的工号！', '消息', {
+          confirmButtonText: '确定'
+        })
+        return
+      }
+      this.nodePrincipal = { 'auditNode': { 'id': this.nodeId }, 'user': { 'id': this.principal.id }}
+      createNodePrincipal(this.nodePrincipal).then(response => {
+        this.handlePrincipalList()
+        this.$notify({
+          title: '成功',
+          message: '创建成功',
+          type: 'success',
+          duration: 2000
+        })
+      })
+    },
+    handleDeletePrincipal(rowid) {
+      crudDelete(this, deleteNodePrincipal, rowid, this.handlePrincipalList)
     }
   }
 }
