数据字典
diff --git a/leave-school-vue/src/views/systemmanagement/datadictionary/index.vue b/leave-school-vue/src/views/systemmanagement/datadictionary/index.vue
new file mode 100644
index 0000000..75d7930
--- /dev/null
+++ b/leave-school-vue/src/views/systemmanagement/datadictionary/index.vue
@@ -0,0 +1,224 @@
+<template>
+  <div class="app-container">
+    <el-col :span="12">
+      <el-card>
+        <div class="filter-container">
+          <el-input @keyup.enter.native="handleFilter" style="width: 200px;" class="filter-item" placeholder="类型名称/编码" v-model="listQuery.name">
+          </el-input>
+          <el-button class="filter-item" type="primary" v-waves icon="el-icon-search" @click="handleFilter">查询</el-button>
+          <el-button class="filter-item" style="margin-left: 10px;" @click="handleCreate(null, 'create')" type="primary" icon="el-icon-edit">添加</el-button>
+        </div>
+        <el-table :height="height" :data="items" v-loading="listLoading" element-loading-text="Loading" border fit highlight-current-row>
+          <el-table-column label="类型编码" align="center">
+            <template slot-scope="scope">
+              {{scope.row.code}}
+            </template>
+          </el-table-column>
+          <el-table-column label="类型名称" align="center">
+            <template slot-scope="scope">
+              <span>{{scope.row.name}}</span>
+            </template>
+          </el-table-column>
+          <el-table-column
+            header-align="center"
+            align="center"
+            width="150"
+            label="操作">
+            <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="handleView(scope.row.code)">查看</el-button>
+              <el-button type="text" size="small" @click="handleDelete(scope.row.id)">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+        <div class="pagination-container">
+          <el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listQuery.pageIndex" 
+          :page-sizes="[10,20,30, 50]" :page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="recordCount">
+          </el-pagination>
+        </div>
+        
+        <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible">
+          <el-form :rules="rules" ref="dataForm" :model="temp" label-position="left" label-width="150px" style='width: 400px; margin-left:50px;'>
+            <el-form-item label="类型编码" prop="code">
+              <el-input v-model="temp.code"></el-input>
+              <input type="hidden" v-model="temp.id" />
+            </el-form-item>
+            <el-form-item label="类型名称" prop="name">
+              <el-input v-model="temp.name"></el-input>
+            </el-form-item>
+          </el-form>
+          <div slot="footer" class="dialog-footer">
+            <el-button @click="dialogFormVisible = false">返回</el-button>
+            <el-button type="primary" @click="createData">提交</el-button>
+          </div>
+        </el-dialog>
+      </el-card>
+    </el-col>
+    <el-col :span="12">
+      <el-card>
+        <div class="filter-container">
+          <el-button class="filter-item" style="margin-left: 10px;" @click="handleCreateDic(null, 'create')" type="primary" icon="el-icon-edit">添加</el-button>
+        </div>
+        <el-table :height="itemHeight" :data="dicList" v-loading="listLoading" element-loading-text="Loading" border fit highlight-current-row>
+          <el-table-column label="字典编码" align="center">
+            <template slot-scope="scope">
+              {{scope.row.code}}
+            </template>
+          </el-table-column>
+          <el-table-column label="字典名称" align="center">
+            <template slot-scope="scope">
+              <span>{{scope.row.name}}</span>
+            </template>
+          </el-table-column>
+          <el-table-column
+            header-align="center"
+            align="center"
+            width="150"
+            label="操作">
+            <template slot-scope="scope">
+              <el-button type="text" size="small" @click="handleCreateDic(scope.row.id, 'update')">修改</el-button>
+              <el-button type="text" size="small" @click="handleDeleteDic(scope.row.id)">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+        
+        <el-dialog :title="textMap[dialogStatus]" :visible.sync="dicDialogFormVisible">
+          <el-form :rules="rules" ref="dataForm" :model="temp" label-position="left" label-width="150px" style='width: 400px; margin-left:50px;'>
+            <el-form-item label="字典编码" prop="code">
+              <el-input v-model="temp.code"></el-input>
+              <input type="hidden" v-model="temp.id" />
+            </el-form-item>
+            <el-form-item label="字典名称" prop="name">
+              <el-input v-model="temp.name"></el-input>
+            </el-form-item>
+          </el-form>
+          <div slot="footer" class="dialog-footer">
+            <el-button @click="dicDialogFormVisible = false">返回</el-button>
+            <el-button type="primary" @click="createDataDic">提交</el-button>
+          </div>
+        </el-dialog>
+      </el-card>
+    </el-col>
+  </div>
+</template>
+
+<script>
+import { getPage, getType, getDicList, createType, deleteType, getDic, createDic, deleteDic } from '@/api/dictionary-api'
+import waves from '@/directive/waves' // 水波纹指令
+import { MessageBox } from 'element-ui'
+import { resetForm } from '@/utils'
+import { crudPageList, crudGetItem, crudCreate, crudDelete } from '@/utils/crud'
+import mixindata from '@/utils/crud'
+
+const initData = { sex: 'male', zt: 'on' }
+export default {
+  name: 'type',
+  directives: {
+    waves
+  },
+  mixins: [mixindata],
+  data() {
+    return {
+      dicDialogFormVisible: false,
+      dicDialogVisible: false,
+      dicList: [],
+      itemHeight: 500,
+      rules: {
+        ghxh: [{ required: true, message: '账号(工号/学号)必填', trigger: 'blur' }],
+        mm: [{ required: true, message: '密码必填', trigger: 'blur' }],
+        zhlb: [{ required: true, message: '账户类别必填', trigger: 'change' }],
+        xm: [{ required: true, message: '姓名必填', trigger: 'change' }]
+      }
+    }
+  },
+  filters: {
+    statusFilter(status) {
+      const statusMap = {
+        '1': 'success',
+        '0': 'danger'
+      }
+      return statusMap[status]
+    }
+  },
+  created() {
+    this.handlePageList()
+    this.height = window.innerHeight - 256
+    this.itemHeight = window.innerHeight - 223
+  },
+  methods: {
+    handlePageList() {
+      crudPageList(this, getPage)
+    },
+    handleCreate(rowid, dialogStatus) {
+      this.dialogStatus = dialogStatus
+      crudGetItem(this, getType, rowid, initData)
+    },
+    handleReset() {
+      resetForm(this.listQuery)
+    },
+    handleFilter() {
+      this.listQuery.pageIndex = 1
+      this.handlePageList()
+    },
+    handleSizeChange(val) {
+      this.listQuery.pageSize = val
+      this.handlePageList()
+    },
+    handleCurrentChange(val) {
+      this.listQuery.pageIndex = val
+      this.handlePageList()
+    },
+    createData() {
+      crudCreate(this, createType, this.handlePageList)
+    },
+    handleDelete(rowid) {
+      crudDelete(this, deleteType, rowid, this.handlePageList)
+    },
+    handleView(type) {
+      this.temp.type = type
+      getDicList({ type: type }).then(response => {
+        if (!response.items) {
+          MessageBox.alert('数据不存在,请确认是否已删除。', '消息', {
+            confirmButtonText: '确定'
+          })
+          return
+        }
+        this.dicDialogVisible = true
+        this.dicList = response.items
+      })
+    },
+    handleCreateDic(rowid, dialogStatus) {
+      if (!this.temp.type) {
+        MessageBox.alert('请先选择字典类型!', '消息', {
+          confirmButtonText: '确定'
+        })
+        return
+      }
+      this.dialogStatus = dialogStatus
+      const that = this
+      crudGetItem(this, getDic, rowid, { type: this.temp.type }, function() {
+        that.dicDialogFormVisible = true
+        that.dialogFormVisible = false
+      })
+    },
+    createDataDic() {
+      const that = this
+      crudCreate(this, createDic, function() {
+        that.handleView(that.temp.type)
+        that.dicDialogFormVisible = false
+      })
+    },
+    handleDeleteDic(rowid) {
+      const that = this
+      crudDelete(this, deleteDic, rowid, function() {
+        that.handleView(that.temp.type)
+      })
+    }
+  }
+}
+</script>
+<style scoped>
+.el-card {
+  margin: 5px;
+}
+</style>
diff --git a/leave-school-vue/src/views/systemmanagement/user/index.vue b/leave-school-vue/src/views/systemmanagement/user/index.vue
index c069707..453bb0e 100644
--- a/leave-school-vue/src/views/systemmanagement/user/index.vue
+++ b/leave-school-vue/src/views/systemmanagement/user/index.vue
@@ -34,7 +34,7 @@
       </el-table-column>
       <el-table-column label="性别" align="center">
         <template slot-scope="scope">
-          {{scope.row.xb}}
+          {{scope.row.sex}}
         </template>
       </el-table-column>
       <el-table-column label="状态" align="center">
@@ -97,7 +97,7 @@
           <input type="hidden" v-model="temp.id" />
         </el-form-item>
         <el-form-item label="密码" prop="mm">
-          <el-input type="password" v-model="temp.mm"></el-input>
+          <el-input type="password" v-model="temp.mm"></el-input>密码为6-20位数字或字母
         </el-form-item>
         <el-form-item label="账户类别" prop="zhlb">
           <el-select clearable class="filter-item" v-model="temp.zhlb" placeholder="账户类别">
@@ -106,8 +106,8 @@
           </el-select>
         </el-form-item>
         <el-form-item label="性别">
-          <el-radio-group v-model="temp.xb">
-            <el-radio v-for="item in pagedata.xbList" :label="item.value" :key="item.value" >{{item.label}}</el-radio>
+          <el-radio-group v-model="temp.sex">
+            <el-radio v-for="item in pagedata.sexList" :label="item.value" :key="item.value" >{{item.label}}</el-radio>
           </el-radio-group>
         </el-form-item>
         <el-form-item label="状态">
@@ -164,7 +164,7 @@
 import { crudPageList, crudGetItem, crudCreate, crudDelete } from '@/utils/crud'
 import mixindata from '@/utils/crud'
 
-const initData = { xb: 'male', zt: 'on' }
+const initData = { sex: 'male', zt: 'on' }
 export default {
   name: 'user',
   directives: {