From 8fa17b32d1299e52861acc41ef1b221be0294bd2 Mon Sep 17 00:00:00 2001
From: dearlin <1261008090@qq.com>
Date: Mon, 27 Nov 2023 09:39:53 +0800
Subject: [PATCH] =?UTF-8?q?add:=20=E5=88=86=E5=85=AC=E5=8F=B8=E7=B3=BB?=
 =?UTF-8?q?=E7=BB=9F=E7=AE=A1=E7=90=86=EF=BC=88=E8=8F=9C=E5=8D=95=E8=A7=92?=
 =?UTF-8?q?=E8=89=B2=E6=9D=83=E9=99=90=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/layout/components/Navbar.vue              |   7 +
 src/views/corpsystem/menus/index.vue          | 407 +++++++++
 src/views/corpsystem/menus/svg-icons.js       |  10 +
 .../corpsystem/permission/btns-per/index.vue  | 120 +++
 src/views/corpsystem/permission/index.vue     |   3 +
 .../corpsystem/permission/role-per/index.vue  | 420 ++++++++++
 src/views/presystem/buttons/index.vue         | 258 ++++++
 src/views/presystem/corptype/index.vue        | 384 +++++++++
 src/views/presystem/dictionary/index.vue      | 448 ++++++++++
 src/views/presystem/group/dept/index.vue      | 456 ++++++++++
 src/views/presystem/group/index.vue           |   3 +
 src/views/presystem/group/user/index.vue      | 777 ++++++++++++++++++
 .../homepagepicture/components/indexAdd.vue   | 248 ++++++
 .../homepagepicture/components/indexList.vue  | 320 ++++++++
 .../homepagepicture/components/index_view.vue | 444 ++++++++++
 src/views/presystem/homepagepicture/index.vue |  25 +
 src/views/presystem/logs/index.vue            | 150 ++++
 src/views/presystem/menu/index.vue            |   0
 src/views/presystem/menus/index.vue           | 407 +++++++++
 src/views/presystem/menus/svg-icons.js        |  10 +
 .../noticetemplate/components/indexAdd.vue    | 162 ++++
 .../noticetemplate/components/indexList.vue   | 261 ++++++
 .../noticetemplate/components/index_view.vue  | 444 ++++++++++
 src/views/presystem/noticetemplate/index.vue  |  36 +
 src/views/presystem/online/index.vue          | 129 +++
 .../presystem/permission/btns-per/index.vue   | 118 +++
 src/views/presystem/permission/index.vue      |   3 +
 .../presystem/permission/role-per/index.vue   | 409 +++++++++
 src/views/presystem/serviceNotice/index.vue   | 544 ++++++++++++
 src/views/presystem/templates/index.vue       | 322 ++++++++
 src/views/presystem/test/components/index.vue |  27 +
 .../presystem/test/components/index2.vue      |  27 +
 src/views/presystem/test/index.vue            |  29 +
 src/views/presystem/test/index2.vue           |  15 +
 src/views/presystem/version/index.vue         |   3 +
 .../version/versionmanager/index.vue          | 433 ++++++++++
 .../version/versionmanagerFirst/index.vue     | 474 +++++++++++
 .../version/versionmanagerReg/index.vue       | 433 ++++++++++
 .../version/versionmanagerZdgc/index.vue      | 433 ++++++++++
 39 files changed, 9199 insertions(+)
 create mode 100644 src/views/corpsystem/menus/index.vue
 create mode 100644 src/views/corpsystem/menus/svg-icons.js
 create mode 100644 src/views/corpsystem/permission/btns-per/index.vue
 create mode 100644 src/views/corpsystem/permission/index.vue
 create mode 100644 src/views/corpsystem/permission/role-per/index.vue
 create mode 100644 src/views/presystem/buttons/index.vue
 create mode 100644 src/views/presystem/corptype/index.vue
 create mode 100644 src/views/presystem/dictionary/index.vue
 create mode 100644 src/views/presystem/group/dept/index.vue
 create mode 100644 src/views/presystem/group/index.vue
 create mode 100644 src/views/presystem/group/user/index.vue
 create mode 100644 src/views/presystem/homepagepicture/components/indexAdd.vue
 create mode 100644 src/views/presystem/homepagepicture/components/indexList.vue
 create mode 100644 src/views/presystem/homepagepicture/components/index_view.vue
 create mode 100644 src/views/presystem/homepagepicture/index.vue
 create mode 100644 src/views/presystem/logs/index.vue
 create mode 100644 src/views/presystem/menu/index.vue
 create mode 100644 src/views/presystem/menus/index.vue
 create mode 100644 src/views/presystem/menus/svg-icons.js
 create mode 100644 src/views/presystem/noticetemplate/components/indexAdd.vue
 create mode 100644 src/views/presystem/noticetemplate/components/indexList.vue
 create mode 100644 src/views/presystem/noticetemplate/components/index_view.vue
 create mode 100644 src/views/presystem/noticetemplate/index.vue
 create mode 100644 src/views/presystem/online/index.vue
 create mode 100644 src/views/presystem/permission/btns-per/index.vue
 create mode 100644 src/views/presystem/permission/index.vue
 create mode 100644 src/views/presystem/permission/role-per/index.vue
 create mode 100644 src/views/presystem/serviceNotice/index.vue
 create mode 100644 src/views/presystem/templates/index.vue
 create mode 100644 src/views/presystem/test/components/index.vue
 create mode 100644 src/views/presystem/test/components/index2.vue
 create mode 100644 src/views/presystem/test/index.vue
 create mode 100644 src/views/presystem/test/index2.vue
 create mode 100644 src/views/presystem/version/index.vue
 create mode 100644 src/views/presystem/version/versionmanager/index.vue
 create mode 100644 src/views/presystem/version/versionmanagerFirst/index.vue
 create mode 100644 src/views/presystem/version/versionmanagerReg/index.vue
 create mode 100644 src/views/presystem/version/versionmanagerZdgc/index.vue

diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
index bb3b084..5d09df5 100644
--- a/src/layout/components/Navbar.vue
+++ b/src/layout/components/Navbar.vue
@@ -39,6 +39,10 @@
         <svg-icon icon-class="example" />
         <span>综合管理</span>
       </div>
+      <div v-if="loginUser.ISMAIN == '1'" class="right-menu-item hover-effect" @click="setShowModel('presystem')">
+        <svg-icon icon-class="example" />
+        <span>企业系统管理</span>
+      </div>
       <!-- <template v-if="device!=='mobile'">
         <screenfull id="screenfull" class="right-menu-item hover-effect" />
 
@@ -215,6 +219,7 @@ export default {
       imgUrl: require('@/assets/images/user-logo.png'),
       config: config,
       fwebsocket: {},
+      loginUser: JSON.parse(sessionStorage.getItem('user')),
       alarmSocket: {},
       dialogFormEdit: false,
       dialogMessageEdit: false,
@@ -305,6 +310,8 @@ export default {
       }
     },
     setShowModel(model) {
+      console.log('model')
+      console.log(model)
       this.$store.dispatch('permission/setShowModel', model)
     },
     toggleSideBar() {
diff --git a/src/views/corpsystem/menus/index.vue b/src/views/corpsystem/menus/index.vue
new file mode 100644
index 0000000..0e0d58f
--- /dev/null
+++ b/src/views/corpsystem/menus/index.vue
@@ -0,0 +1,407 @@
+<template>
+  <div class="icons-container">
+    <el-container>
+      <el-aside width="300px" style="background-color:#fff">
+        <el-input
+          v-model="filterText"
+          placeholder="输入关键字进行过滤"
+          style="margin:10px 0"/>
+        <el-tree
+          v-loading="treeLoading"
+          ref="tree"
+          :data="treeData"
+          :props="defaultProps"
+          :filter-node-method="filterNode"
+          class="filter-tree"
+          @node-click="handleNodeClick"/>
+      </el-aside>
+      <el-main>
+        <div class="filter-btn-group">
+          <div>
+            <el-button type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button>
+            <el-button v-show="MENU_ID != '0'" icon="el-icon-arrow-left" @click="getList(pd.PARENT_ID)">返回</el-button>
+          </div>
+        </div>
+        <el-table
+          v-loading="listLoading"
+          ref="multipleTable"
+          :data="varList"
+          :header-cell-style="{
+            'font-weight': 'bold',
+            'color': '#000'
+          }"
+          tooltip-effect="dark"
+          border
+          fit
+          highlight-current-row
+        >
+          <el-table-column type="index" prop="numb" label="序号" width="50" align="center" />
+          <el-table-column label="名称" >
+            <template slot-scope="{row}">
+              <div class="link-type" @click="getList(row.menu_ID)">
+                <svg-icon :icon-class="row.menu_ICON" class-name="disabled" /> {{ row.menu_NAME }} <i class="el-icon-arrow-right" />
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column label="资源路径">
+            <template slot-scope="{row}">
+              {{ row.menu_URL == '#' ? '&nbsp;&nbsp;&nbsp;&nbsp;(无)': row.menu_URL }}
+            </template>
+          </el-table-column>
+          <el-table-column label="权限标识">
+            <template slot-scope="{row}">
+              {{ '' == row.shiro_KEY || null == row.shiro_KEY ?'(无)': row.shiro_KEY }}
+            </template>
+          </el-table-column>
+          <el-table-column label="状态" width="100" >
+            <template slot-scope="{row}">
+              <template v-if="row.menu_STATE==1">
+                <el-tag size="mini">
+                  显示
+                </el-tag>
+              </template>
+              <template v-else>
+                <el-tag size="mini" type="info">
+                  隐藏
+                </el-tag>
+              </template>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" align="center" width="300">
+            <template slot-scope="{row}">
+              <el-button v-show="MENU_ID == '0' && edit" type="success" icon="el-icon-picture-outline" size="mini" @click="handleEditIcon(row.menu_ID)">图标</el-button>
+              <el-button type="primary" icon="el-icon-edit" size="mini" @click="handleEdit(row.menu_ID)">编辑</el-button>
+              <el-button type="danger" icon="el-icon-delete" size="mini" @click="handleDelete(row.menu_ID, row.menu_NAME)">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+
+      </el-main>
+    </el-container>
+
+    <el-dialog :visible.sync="dialogFormAdd" :title="dialogType==='edit'?'修改':'新增'" width="600px">
+      <el-tag class="mark_up" size="medium">上级菜单:{{ MENU_ID == '0' ?'(无) 此项为顶级菜单':pds.MENU_NAME }}</el-tag>
+      <el-form ref="form" :model="form" :rules="rules" label-width="110px" style="width: 500px;">
+        <el-form-item label="菜单名称" prop="MENU_NAME">
+          <el-input v-model="form.MENU_NAME" placeholder="这里输入菜单名称..." />
+        </el-form-item>
+        <el-form-item label="菜单链接">
+          <el-input v-model="form.MENU_URL" placeholder="这里输入菜单链接..." />
+        </el-form-item>
+        <el-form-item label="组件路径">
+          <el-input v-model="form.COMPONENT" placeholder="这里输入组件路径..." />
+        </el-form-item>
+        <el-form-item label="权限标识" prop="SHIRO_KEY">
+          <el-input v-model="form.SHIRO_KEY" placeholder="这里输入权限标识..." />
+        </el-form-item>
+        <el-form-item v-show="MENU_ID == '0'" label="显示模式" prop="SHOW_MODEL">
+          <el-input v-model="form.SHOW_MODEL" placeholder="这里输入显示模式..." />
+        </el-form-item>
+        <el-form-item label="菜单序号" prop="MENU_ORDER">
+          <el-input v-model.number="form.MENU_ORDER" placeholder="这里输入菜单序号..." />
+        </el-form-item>
+        <el-form-item label="菜单状态">
+          <el-radio-group v-model="form.MENU_STATE">
+            <el-radio :label="1">显示</el-radio>
+            <el-radio :label="0">隐藏</el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormAdd = false">取 消</el-button>
+        <el-button type="primary" @click="confirm">确 定</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :visible.sync="dialogEditIcon" title="编辑图标" width="960px">
+      <div class="grid">
+        <div v-for="item of svgIcons" :key="item">
+          <div class="icon-item" @click="confirmIcon(item)">
+            <svg-icon :icon-class="item" class-name="disabled" />
+            <span>{{ item }}</span>
+          </div>
+        </div>
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogEditIcon = false">取 消</el-button>
+        <!--        <el-button type="primary" @click="confirm">确 定</el-button>-->
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+
+import svgIcons from './svg-icons'
+import { requestFN } from '@/utils/request'
+export default {
+  name: 'Icons',
+  data() {
+    return {
+      listLoading: false,			// 加载状态
+      treeLoading: false,
+      svgIcons,
+      radio: 1,
+      dialogFormAdd: false,
+      dialogEditIcon: false,
+      dialogType: 'add',
+      // 树形菜单
+      filterText: '',
+      treeData: [],
+      defaultProps: {
+        children: 'nodes',
+        label: 'name'
+      },
+      // 列表
+      varList: [],	// list
+      MENU_ID: '0',	// 主键ID
+      pd: [],
+      form: {
+        MENU_ID: '',	 // 主键ID
+        MENU_TYPE: '1', // 类型
+        MENU_STATE: 1,	 // 状态
+        PARENT_ID: '',	 // 上级ID
+        MENU_NAME: '',	 // 菜单名称
+        MENU_URL: '',	 // 菜单链接
+        COMPONENT: '', // 组件路径
+        SHIRO_KEY: '(无)', // 权限标识
+        SHOW_MODEL: '', // 显示模式
+        MENU_ORDER: ''	 // 菜单序号
+      },
+      pds: [],
+      add: false,
+      del: false,
+      edit: false,
+      rules: {
+        MENU_NAME: [
+          { required: true, message: '菜单名称不能为空', trigger: 'change' },
+          { min: 2, max: 30, message: '长度在 2 到 30 个字符', trigger: 'blur' }
+        ],
+        MENU_ORDER: [
+          { required: true, message: '菜单序号不能为空', trigger: 'change' },
+          { type: 'number', message: '菜单序号必须为数字' }
+        ]
+      }
+    }
+  },
+  watch: {
+    filterText(val) {
+      this.$refs.tree.filter(val)
+    }
+  },
+  created() {
+    this.getTreeList()
+    this.getList(this.MENU_ID)
+  },
+  methods: {
+    filterNode(value, data) {
+      if (!value) return true
+      return data.name.indexOf(value) !== -1
+    },
+    handleNodeClick(node, data, value) {
+      this.handleEdit(node.id)
+    },
+    handleAdd() {
+      this.dialogType = 'add'
+      this.resetForm()
+      requestFN(
+        '/corpMenu/toAdd',
+        {
+          MENU_ID: this.MENU_ID
+        }
+      ).then((data) => {
+        this.form.PARENT_ID = this.MENU_ID
+        this.pds = data.pds	|| []					// 父级菜单信息
+      }).catch((e) => {
+
+      })
+      this.dialogFormAdd = true
+    },
+    handleEdit(MENU_ID) {
+      this.dialogType = 'edit'
+      requestFN(
+        '/corpMenu/toEdit',
+        {
+          MENU_ID: MENU_ID
+        }
+      ).then((data) => {
+        this.form = Object.assign({}, data.pd) // copy obj
+        this.form.MENU_ID = MENU_ID
+        this.form.PARENT_ID = data.pd.PARENT_ID
+        this.pds = data.pds || []						// 父级菜单信息
+      }).catch((e) => {
+        this.listLoading = false
+      })
+      this.dialogFormAdd = true
+    },
+    confirm() {
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.listLoading = true
+          requestFN(
+            '/corpMenu/' + this.dialogType,
+            this.form
+          ).then((data) => {
+            this.listLoading = false
+            this.dialogFormAdd = false
+            this.getTreeList()
+            this.getList(this.MENU_ID)
+          }).catch((e) => {
+            this.listLoading = false
+          })
+        } else {
+          return false
+        }
+      })
+    },
+    handleDelete(id, name) {
+      this.$confirm('确定要删除[' + name + ']吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/corpMenu/delete',
+          {
+            MENU_ID: id
+          }
+        ).then(() => {
+          this.listLoading = false
+          this.getTreeList()
+          this.getList(this.MENU_ID)
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    handleEditIcon(MENU_ID) {
+      this.dialogEditIcon = true
+      this.form.MENU_ID = MENU_ID
+    },
+    confirmIcon(symbol) {
+      const MENU_ICON = symbol
+      this.listLoading = true
+      requestFN(
+        '/corpMenu/editicon',
+        {
+          MENU_ID: this.form.MENU_ID,
+          MENU_ICON: MENU_ICON
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.dialogEditIcon = false
+        this.getList(this.MENU_ID)
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    generateIconCode(symbol) {
+      return `<svg-icon icon-class="${symbol}" />`
+    },
+    getTreeList() {
+      this.treeLoading = true
+      requestFN(
+        'corpMenu/listAllMenu',
+        {
+
+        }
+      ).then((data) => {
+        this.treeLoading = false
+        this.treeData = JSON.parse(data.zTreeNodes)
+      }).catch((e) => {
+        this.treeLoading = false
+      })
+    },
+    getList(MENU_ID) {
+      this.listLoading = true
+      this.varList = []
+      this.MENU_ID = MENU_ID
+      requestFN(
+        'corpMenu/list',
+        {
+          MENU_ID: this.MENU_ID
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.varList = data.menuList
+        this.pd = data.pd || []
+        this.hasButton()
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    resetForm() {
+      this.form = {
+        MENU_ID: '',	 // 主键ID
+        MENU_TYPE: '1', // 类型
+        MENU_STATE: 1,	 // 状态
+        PARENT_ID: '',	 // 上级ID
+        MENU_NAME: '',	 // 菜单名称
+        MENU_URL: '',	 // 菜单链接
+        COMPONENT: '', // 组件路径
+        SHIRO_KEY: '(无)', // 权限标识
+        SHOW_MODEL: '', // 显示模式
+        MENU_ORDER: ''	 // 菜单序号
+      }
+    },
+    hasButton: function() {
+      var keys = 'menu:add,menu:del,menu:edit'
+      requestFN(
+        '/head/hasButton',
+        {
+          keys: keys
+        }
+      ).then((data) => {
+        this.add = data.menufhadminadd
+        this.del = data.menufhadmindel
+        this.edit = data.menufhadminedit
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.el-dialog__body{
+  padding: 0;
+  background: red;
+}
+.mark_up{
+  margin-bottom:20px;
+  margin-left: 110px;
+}
+.icons-container {
+  margin: 0;
+  overflow: hidden;
+
+  .grid {
+    position: relative;
+    display: grid;
+    grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
+  }
+
+  .icon-item {
+    margin-bottom: 10px;
+    height: 70px;
+    text-align: center;
+    width: 100px;
+    float: left;
+    font-size: 24px;
+    color: #24292e;
+    cursor: pointer;
+    span {
+    display: block;
+    font-size: 14px;
+    margin-top: 10px;
+    }
+
+  }
+
+  .disabled {
+    pointer-events: none;
+  }
+}
+</style>
diff --git a/src/views/corpsystem/menus/svg-icons.js b/src/views/corpsystem/menus/svg-icons.js
new file mode 100644
index 0000000..b538086
--- /dev/null
+++ b/src/views/corpsystem/menus/svg-icons.js
@@ -0,0 +1,10 @@
+const req = require.context('../../../icons/svg', false, /\.svg$/)
+const requireAll = requireContext => requireContext.keys()
+
+const re = /\.\/(.*)\.svg/
+
+const svgIcons = requireAll(req).map(i => {
+  return i.match(re)[1]
+})
+
+export default svgIcons
diff --git a/src/views/corpsystem/permission/btns-per/index.vue b/src/views/corpsystem/permission/btns-per/index.vue
new file mode 100644
index 0000000..e67070f
--- /dev/null
+++ b/src/views/corpsystem/permission/btns-per/index.vue
@@ -0,0 +1,120 @@
+<template>
+  <div class="app-container">
+    <el-tabs v-model="activeTab" type="border-card" @tab-click="handleClick">
+      <el-tab-pane v-for="role in roleList" :name="role.role_ID" :key="role.role_ID" :label="role.role_NAME">
+        <el-table
+          v-loading="listLoading"
+          :data="roleList_z"
+          :header-cell-style="{
+            'font-weight': 'bold',
+            'color': '#000',
+            'padding':'14px 0'
+          }"
+          :row-style="{'height':'54px'}"
+          border
+          fit
+          highlight-current-row>
+          <el-table-column type="index" label="序号" fixed width="50" align="center"/>
+          <el-table-column prop="role_NAME" label="角色" fixed width="200" show-overflow-tooltip/>
+          <el-table-column v-for="item in buttonlist" :key="item.FHBUTTON_ID" :label="item.NAME" :render-header="labelHead" align="center">
+            <template slot-scope="{row}">
+              <template v-for="(varRb,vsRb) in roleFhbuttonlist">
+                <template v-if="row.role_ID == varRb.ROLE_ID && item.FHBUTTON_ID == varRb.BUTTON_ID">
+                  <span :key="vsRb" style="display: none;">{{ switchModel[row.role_ID + '_' + item.FHBUTTON_ID] = true }}</span>
+                </template>
+              </template>
+              <el-switch v-model="switchModel[row.role_ID + '_' + item.FHBUTTON_ID]" @change="upRb(row.role_ID,item.FHBUTTON_ID)"/>
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+import { requestFN } from '@/utils/request'
+export default {
+  data() {
+    return {
+      activeTab: '',
+      roleList: [],			// list 列出组(页面横向排列的一级组)
+      roleList_z: [],			// list 列出此组下架角色
+      buttonlist: [],			// list 列出所有按钮
+      roleFhbuttonlist: [],	// list 列出所有角色按钮关联数据
+      pd: [],					// map
+      ROLE_ID: '1',			// 角色ID
+      switchModel: {},
+      edit: false,
+      listLoading: false			// 加载状态
+    }
+  },
+  created() {
+    this.getList(this.ROLE_ID)
+  },
+  methods: {
+    labelHead(h, { column, index }) {
+      const l = column.label.length
+      const f = 34 // 自定义文字宽度
+      column.minWidth = f * l
+      return h('div', { class: 'table-head', style: { width: '100%' }}, [column.label])
+    },
+    handleClick(tab) {
+      this.ROLE_ID = tab.name
+      this.roleList_z = []
+      this.getList(this.ROLE_ID)
+    },
+    getList(ROLE_ID) {
+      this.listLoading = true
+      this.ROLE_ID = ROLE_ID
+      requestFN(
+        '/buttonrights/list',
+        {
+          ROLE_ID: ROLE_ID
+        }
+      ).then((data) => {
+        this.roleList = data.roleList
+        this.roleList_z = data.roleList_z
+        this.buttonlist = data.buttonlist
+        this.roleFhbuttonlist = data.roleFhbuttonlist
+        this.pd = data.pd
+        this.ROLE_ID = data.pd.ROLE_ID
+        this.activeTab = data.pd.ROLE_ID
+        this.hasButton()
+        this.listLoading = false
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    hasButton: function() {
+      var keys = 'buttonrights:edit'
+      requestFN(
+        '/head/hasButton',
+        {
+          keys: keys
+        }
+      ).then((data) => {
+        this.edit = data.buttonrightsfhadminedit
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    upRb: function(ROLE_ID, FHBUTTON_ID) {
+      requestFN(
+        '/buttonrights/upRb',
+        {
+          ROLE_ID: ROLE_ID,
+          BUTTON_ID: FHBUTTON_ID
+        }
+      ).then((data) => {
+        this.switchModel = {}
+        this.roleFhbuttonlist = []
+        this.getList(this.activeTab)
+      }).catch((e) => {
+
+      })
+    }
+  }
+}
+</script>
+
diff --git a/src/views/corpsystem/permission/index.vue b/src/views/corpsystem/permission/index.vue
new file mode 100644
index 0000000..98240ae
--- /dev/null
+++ b/src/views/corpsystem/permission/index.vue
@@ -0,0 +1,3 @@
+<template>
+  <router-view />
+</template>
diff --git a/src/views/corpsystem/permission/role-per/index.vue b/src/views/corpsystem/permission/role-per/index.vue
new file mode 100644
index 0000000..77a0b46
--- /dev/null
+++ b/src/views/corpsystem/permission/role-per/index.vue
@@ -0,0 +1,420 @@
+<template>
+  <div class="app-container">
+    <!--    <div class="filter-container">-->
+    <!--      <el-button-group>-->
+    <!--        &lt;!&ndash;        <el-button type="primary" icon="el-icon-document-add" @click="handleAdd(0)">新增组</el-button>&ndash;&gt;-->
+    <!--        &lt;!&ndash;        <el-button type="primary" icon="el-icon-edit" @click="handleEdit()">修改组</el-button>&ndash;&gt;-->
+    <!--        &lt;!&ndash;        <el-button v-if="ROLE_ID!=1" type="primary" icon="el-icon-delete" @click="handleDelete()">删除组</el-button>&ndash;&gt;-->
+    <!--        <el-button type="primary" icon="el-icon-collection-tag" @click="handleTree('listAllMenuV2',activeTab)">账号菜单权限</el-button>-->
+    <!--      </el-button-group>-->
+    <!--    </div>-->
+    <el-tabs v-model="activeTab" type="border-card" @tab-click="handleClick">
+      <el-tab-pane v-for="role in roleList" :name="role.role_ID" :key="role.role_ID" :label="role.role_NAME">
+        <el-table
+          v-loading="listLoading"
+          :data="roleList_z"
+          :header-cell-style="{
+            'font-weight': 'bold',
+            'color': '#000'
+          }"
+          border
+          fit
+          highlight-current-row>
+          <el-table-column type="index" label="序号" width="50" align="center" />
+          <el-table-column prop="role_NAME" label="角色" width="180" />
+          <el-table-column prop="rnumber" label="编码" />
+          <el-table-column label="增" align="center" width="60">
+            <template slot-scope="{row}">
+              <el-button icon="el-icon-document-add" circle @click="handleTree('b4ButtonV2',row.role_ID,'add_qx')" />
+            </template>
+          </el-table-column>
+          <el-table-column label="删" align="center" width="60">
+            <template slot-scope="{row}">
+              <el-button icon="el-icon-delete" circle @click="handleTree('b4ButtonV2',row.role_ID,'del_qx')"/>
+            </template>
+          </el-table-column>
+          <el-table-column label="改" align="center" width="60">
+            <template slot-scope="{row}">
+              <el-button icon="el-icon-edit" circle @click="handleTree('b4ButtonV2',row.role_ID,'edit_qx')"/>
+            </template>
+          </el-table-column>
+          <el-table-column label="查" align="center" width="60">
+            <template slot-scope="{row}">
+              <el-button icon="el-icon-view" circle @click="handleTree('b4ButtonV2',row.role_ID,'cha_qx')"/>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" align="center" width="290">
+            <template slot-scope="scope">
+              <el-button type="success" icon="el-icon-collection-tag" size="mini" @click="handleTree('listAllMenuV2',scope.row.role_ID)">权限</el-button>
+              <el-button type="primary" icon="el-icon-edit" size="mini" @click="handleUpdate(scope.row.role_ID, scope.row.role_NAME, scope.row.dept_TYPE, scope.row.primarynum, scope.row.level)">编辑</el-button>
+              <el-button type="danger" icon="el-icon-delete" size="mini" @click="handleDelete(scope.row.role_ID, scope.row.role_NAME)">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-tab-pane>
+    </el-tabs>
+    <div class="page-btn-group">
+      <div>
+        <el-button type="primary" icon="el-icon-plus" @click="handleCreate(activeTab)">新增</el-button>
+      </div>
+      <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getRoleList(ROLE_ID)" />
+    </div>
+
+    <el-dialog :visible.sync="dialogFormAdd" :title="dialogType==='edit'?'修改':'新增'" width="600px">
+      <el-form ref="roleForm" :model="form" :rules="formRules" label-width="120px" style="width: 500px;">
+        <el-form-item label="名称" prop="name">
+          <el-input v-model="form.name" autocomplete="off" placeholder="这里输入名称..." />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormAdd = false">取 消</el-button>
+        <el-button type="primary" @click="confirmRole">确 定</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :visible.sync="dialogFormVisible" :title="dialogType==='edit'?'修改':'新增'" width="600px">
+      <el-form ref="roleForm" :model="form" :rules="formRules" label-width="120px" style="width: 500px;">
+        <el-form-item label="名称" prop="name">
+          <el-input v-model="form.name" autocomplete="off" placeholder="这里输入名称..." />
+        </el-form-item>
+        <el-form-item label="单位类型" prop="dept_TYPE">
+          <el-select ref="refDeptType" v-model="form.dept_TYPE" placeholder="请选择" class="filter-item">
+            <el-option v-for="item in unitTypeList" :key="item.DICTIONARIES_ID" :label="item.NAME" :value="item.DICTIONARIES_ID" />
+          </el-select>
+        </el-form-item>
+        <!--        <el-form-item label="是否为主账号" prop="primarynum">-->
+        <!--          <el-select v-model="form.primarynum" placeholder="请选择" class="filter-item">-->
+        <!--            <el-option v-for="item in statearr" :key="item.value" :label="item.label" :value="item.value" />-->
+        <!--          </el-select>-->
+        <!--        </el-form-item>-->
+        <el-form-item label="用户查看等级" prop="roleLevel">
+          <el-select v-model="form.roleLevel" placeholder="请选择" class="filter-item">
+            <el-option v-for="item in userRoleLevel" :key="item.value" :label="item.label" :value="item.value" />
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible = false">取 消</el-button>
+        <el-button type="primary" @click="confirmRole">确 定</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :visible.sync="dialogFormTree" title="授权'新增'权限" width="500px">
+      <el-tree
+        ref="tree"
+        :data="treeData"
+        :props="defaultProps"
+        show-checkbox
+        node-key="id"/>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormTree = false">取 消</el-button>
+        <el-button type="primary" @click="confirmTree">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import { requestFN } from '@/utils/request'
+export default {
+  components: { Pagination },
+  data() {
+    return {
+      activeTab: '80ecf7dfc9ce49c3a4a7f75269826988',
+      listLoading: true,
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      total: 0,
+      roleList: [], // list 列出组(页面横向排列的一级组)
+      roleList_z: [], // list 列出此组下架角色
+      pd: [], // map
+      ROLE_ID: '',	// 角色ID
+      dialogFormVisible: false,
+      dialogFormGroup: false,
+      dialogType: 'add',
+      dialogFormTree: false,
+      dialogFormAdd: false,
+      form: {
+        id: '',
+        parent_id: '',
+        name: '',
+        dept_TYPE: '',
+        primarynum: '', // 0是1否
+        LEVENL: '',
+        roleLevel: ''
+      },
+      formRules: {
+        name: [
+          { required: true, message: '名不能为空', trigger: 'change' },
+          { min: 2, max: 30, message: '长度在 2 到 30 个字符', trigger: 'blur' }
+        ],
+        dept_TYPE: [
+          { required: true, message: '请选择单位类型', trigger: 'blur' }
+        ],
+        // primarynum: [
+        //   { required: true, message: '请选择是否为主账号', trigger: 'blur' }
+        // ],
+        roleLevel: [
+          { required: true, message: '请选择用户等级', trigger: 'blur' }
+        ]
+      },
+      treeData: [],
+      confirmTreeForm: {
+        url: '',
+        id: '',
+        msg: ''
+      },
+      statearr: [
+        { value: '0', label: '是' },
+        { value: '1', label: '否' }
+      ],
+      userRoleLevel: [
+        { value: '0', label: '公司领导' },
+        { value: '1', label: '部门领导' },
+        { value: '2', label: '普通员工' }
+      ],
+      defaultProps: {
+        children: 'nodes',
+        label: 'name'
+      },
+      unitTypeList: []
+    }
+  },
+  created() {
+    this.getRoleList(this.ROLE_ID)
+    this.getDict('3f3a6ac41247438e91df2830765068ba', 'unitTypeList')// 获取单位类型
+  },
+  methods: {
+    handleClick(tab) {
+      this.ROLE_ID = tab.name
+      this.roleList_z = []
+      this.listQuery.page = 1
+      this.form.parent_id = this.ROLE_ID
+      this.getRoleList(this.ROLE_ID)
+    },
+    getRoleList(ROLE_ID, dept_TYPE, primarynum) {
+      this.listLoading = true
+      this.ROLE_ID = ROLE_ID
+      requestFN(
+        '/corpRrole/list',
+        {
+          ROLE_ID: ROLE_ID
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.ROLE_ID = data.pd.ROLE_ID
+        this.activeTab = data.pd.ROLE_ID
+        this.form.dept_TYPE = dept_TYPE
+        this.form.primarynum = primarynum
+        this.roleList = data.roleList
+        this.roleList_z = data.roleList_z.filter((item, index) => index < this.listQuery.limit * this.listQuery.page && index >= this.listQuery.limit * (this.listQuery.page - 1))
+        this.total = data.roleList_z.length
+        this.pd = data.pd
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    handleAdd(parentId) {
+      this.dialogType = 'add'
+      this.form.name = ''
+      this.form.parent_id = parentId
+      this.dialogFormAdd = true
+    },
+    handleCreate(parentId) {
+      this.dialogType = 'add'
+      this.form.name = ''
+      this.form.parent_id = parentId
+      this.dialogFormVisible = true
+    },
+    handleEdit(roleId, roleName) {
+      this.dialogType = 'edit'
+      if (roleId) {
+        this.form.id = roleId
+        this.form.name = roleName
+      } else {
+        for (const role of this.roleList) {
+          if (role.role_ID === this.activeTab) {
+            this.form.id = role.role_ID
+            this.form.name = role.role_NAME
+          }
+        }
+      }
+      this.dialogFormAdd = true
+    },
+    handleUpdate(roleId, roleName, dept_TYPE, primarynum, level) {
+      this.dialogType = 'edit'
+      if (roleId) {
+        this.form.id = roleId
+        this.form.name = roleName
+        this.form.dept_TYPE = dept_TYPE
+        this.form.primarynum = primarynum
+        this.form.roleLevel = level
+      } else {
+        for (const role of this.roleList) {
+          if (role.role_ID === this.activeTab) {
+            this.form.id = role.role_ID
+            this.form.name = role.role_NAME
+          }
+        }
+      }
+      this.dialogFormVisible = true
+    },
+    handleDelete(roleId, roleName) {
+      if (roleId) {
+        this.form.id = roleId
+        this.form.name = roleName
+      } else {
+        for (const role of this.roleList) {
+          if (role.role_ID === this.activeTab) {
+            this.form.id = role.role_ID
+            this.form.name = role.role_NAME
+          }
+        }
+      }
+      this.$confirm('确定要删除[' + this.form.name + ']吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/corpRrole/delete',
+          {
+            ROLE_ID: this.form.id
+          }
+        ).then(() => {
+          this.$message({
+            message: '删除成功',
+            type: 'success'
+          })
+          this.listLoading = false
+          this.roleList = []
+          this.roleList_z = []
+          this.listQuery.page = 1
+          this.getRoleList('1')
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    handleTree(url, roldId, msg) {
+      if (url === 'listAllMenuV2') {
+        this.confirmTreeForm.str = 'saveMenuqx'
+      } else {
+        this.confirmTreeForm.str = 'saveB4Button'
+      }
+      this.confirmTreeForm.id = roldId
+      this.confirmTreeForm.msg = msg || ''
+      this.listLoading = true
+      requestFN(
+        '/corpRrole/' + url,
+        {
+          ROLE_ID: roldId,
+          msg: msg
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.treeData = JSON.parse(data.zTreeNodes)
+        this.dialogFormTree = true
+        this.$nextTick(() => {
+          var checkedMenuIds = []
+          this.getCheckNode(this.treeData, checkedMenuIds)
+          this.$refs.tree.setCheckedKeys(checkedMenuIds) // 设置目前勾选的节点
+        })
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    confirmRole() {
+      this.$refs.roleForm.validate(valid => {
+        if (valid) {
+          this.listLoading = true
+          requestFN(
+            '/corpRrole/' + this.dialogType,
+            {
+              ROLE_ID: this.form.id,
+              ROLE_NAME: this.form.name,
+              PARENT_ID: this.form.parent_id,
+              DEPT_TYPE: this.form.dept_TYPE,
+              PRIMARYNUM: this.form.primarynum,
+              LEVEL: this.form.roleLevel
+            }
+          ).then((data) => {
+            this.listLoading = false
+            this.dialogFormVisible = false
+            this.dialogFormAdd = false
+            this.roleList = []
+            this.roleList_z = []
+            this.listQuery.page = 1
+            if (this.form.parent_id == '') {
+              this.getRoleList('1')
+            } else {
+              this.getRoleList(this.form.parent_id)
+            }
+            // if (data.pd.PARENT_ID === '0') {
+            //
+            // } else {
+            //   this.getRoleList(this.form.parent_id)
+            // }
+          }).catch((e) => {
+            this.listLoading = false
+          })
+        } else {
+          return false
+        }
+      })
+    },
+    confirmTree() {
+      this.listLoading = true
+      const ids = this.$refs.tree.getCheckedKeys().concat(this.$refs.tree.getHalfCheckedKeys())
+      requestFN(
+        '/corpRrole/' + this.confirmTreeForm.str,
+        {
+          ROLE_ID: this.confirmTreeForm.id,
+          menuIds: ids.join(','),
+          msg: this.confirmTreeForm.msg
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.dialogFormTree = false
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    getCheckNode(menuList, checkedMenuIds) {
+      if (menuList != null && menuList.length > 0) {
+        for (let i = 0; i < menuList.length; i++) {
+          const menu = menuList[i]
+          if ((menu.nodes == null || menu.nodes.length === 0) && menu.checked.toString() === 'true') {
+            checkedMenuIds.push(menu.id)
+          }
+          if (menu.nodes != null && menu.nodes.length > 0) {
+            this.getCheckNode(menu.nodes, checkedMenuIds)
+          }
+        }
+      }
+    },
+    // 获取数据字典数据
+    getDict(dicID, listName) {
+      requestFN(
+        'dictionaries/getLevels',
+        { DICTIONARIES_ID: dicID }
+      ).then((data) => {
+        this[listName] = data.list
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    }
+  },
+  handleGroup(parentId) {
+    this.dialogType = 'add'
+    this.form.name = ''
+    this.form.parent_id = '0'
+    this.dialogFormGroup = true
+  }
+}
+</script>
+
diff --git a/src/views/presystem/buttons/index.vue b/src/views/presystem/buttons/index.vue
new file mode 100644
index 0000000..4606a79
--- /dev/null
+++ b/src/views/presystem/buttons/index.vue
@@ -0,0 +1,258 @@
+<template>
+  <div class="app-container">
+    <div class="filter-container">
+      <el-input v-model="KEYWORDS" placeholder="搜索" class="filter-item" style="width: 200px;"/>
+      <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="getQuery">
+        搜索
+      </el-button>
+    </div>
+    <el-table
+      v-loading="listLoading"
+      ref="multipleTable"
+      :data="varList"
+      :row-key="getRowKey"
+      :header-cell-style="{
+        'font-weight': 'bold',
+        'color': '#000'
+      }"
+      tooltip-effect="dark"
+      border
+      fit
+      highlight-current-row
+    >
+      <el-table-column
+        :reserve-selection="true"
+        type="selection"
+        width="55"
+        align="center"/>
+      <el-table-column type="index" label="序号" width="50" align="center" />
+      <el-table-column prop="NAME" label="名称" />
+      <el-table-column prop="SHIRO_KEY" label="权限标识" />
+      <el-table-column prop="BZ" label="备注" />
+      <el-table-column label="操作" align="center" width="200">
+        <template slot-scope="{row}">
+          <el-button v-show="edit" type="primary" icon="el-icon-edit" size="mini" @click="handleEdit(row)">编辑</el-button>
+          <el-button v-show="del" type="danger" icon="el-icon-delete" size="mini" @click="handleDelete(row.FHBUTTON_ID, row.NAME)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-btn-group">
+      <div>
+        <el-button v-show="add" type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button>
+        <el-button v-show="del" type="danger" icon="el-icon-delete" plain @click="batchDel">删除</el-button>
+      </div>
+      <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
+    </div>
+
+    <el-dialog :visible.sync="dialogFormEdit" :title="dialogType==='edit'?'修改':'新增'" width="600px">
+      <el-form ref="form" :rules="rules" :model="pd" label-width="110px" style="width: 500px;">
+        <el-form-item label="按钮名称" prop="NAME">
+          <el-input v-model="pd.NAME" placeholder="这里输入按钮名称..." />
+        </el-form-item>
+        <el-form-item label="权限标识" prop="SHIRO_KEY">
+          <el-input v-model="pd.SHIRO_KEY" placeholder="这里输入权限标识..." />
+        </el-form-item>
+        <el-form-item label="备注说明">
+          <el-input v-model="pd.BZ" placeholder="这里输入备注说明..." />
+        </el-form-item>
+        <el-form-item label="标签代码">
+          <el-input v-model="code" :autosize="{ minRows: 4}" type="textarea" disabled/>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormEdit = false">取 消</el-button>
+        <el-button type="primary" @click="confirm">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves' // waves directive
+export default {
+  components: { Pagination },
+  directives: { waves },
+  data() {
+    return {
+      listLoading: true,
+      add: false,
+      del: false,
+      edit: false,
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      total: 0,
+      KEYWORDS: '',
+      varList: [],
+      pd: [],
+      multipleSelectionAll: [], // 所有选中的数据包含跨页数据
+      multipleSelection: [], // 当前页选中的数据
+      dialogFormEdit: false,
+      dialogType: 'add',
+      rules: {
+        NAME: [{ required: true, message: '按钮名称不能为空', trigger: 'blur' }],
+        SHIRO_KEY: [{ required: true, message: '权限标识不能为空', trigger: 'blur' }]
+      }
+    }
+  },
+  computed: {
+    code: {
+      get() {
+        if (this.pd.SHIRO_KEY) {
+          return '<a v-show="' + this.pd.SHIRO_KEY + '" class="btn btn-light btn-sm">按钮</a>'
+        } else {
+          return ''
+        }
+      },
+      set(val) {
+
+      }
+    }
+  },
+  created() {
+    this.getList(this.ROLE_ID)
+    this.hasButton()
+  },
+  methods: {
+    getRowKey(row) {
+      return row.FHBUTTON_ID
+    },
+    handleAdd() {
+      this.dialogType = 'add'
+      this.pd = {}
+      this.code = ''
+      this.dialogFormEdit = true
+    },
+    handleEdit(row) {
+      this.dialogType = 'edit'
+      this.pd = Object.assign({}, row)
+      this.dialogFormEdit = true
+    },
+    getQuery() {
+      this.$refs.multipleTable.clearSelection()
+      this.getList()
+    },
+    getList() {
+      this.listLoading = true
+      requestFN(
+        '/fhbutton/list?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
+        {
+          KEYWORDS: this.KEYWORDS
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.varList = data.varList
+        this.total = data.page.totalResult
+        this.pd = data.pd
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    confirm() {
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.listLoading = true
+          requestFN(
+            '/fhbutton/' + this.dialogType,
+            {
+              FHBUTTON_ID: this.pd.FHBUTTON_ID,
+              NAME: this.pd.NAME,
+              SHIRO_KEY: this.pd.SHIRO_KEY,
+              BZ: this.pd.BZ
+            }
+          ).then((data) => {
+            this.listLoading = false
+            this.dialogFormEdit = false
+            this.varList = []
+            this.listQuery.page = 1
+            this.getList()
+          }).catch((e) => {
+            this.listLoading = false
+          })
+        } else {
+          return false
+        }
+      })
+    },
+    handleDelete(id, name) {
+      this.$confirm('确定要删除[' + name + ']吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/fhbutton/delete',
+          {
+            FHBUTTON_ID: id
+          }
+        ).then(() => {
+          this.listLoading = false
+          this.varList = []
+          this.listQuery.page = 1
+          this.getList()
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    batchDel() {
+      const _selectData = this.$refs.multipleTable.selection
+      if (_selectData == null || _selectData.length == 0) {
+        this.$message({
+          message: '请选中要删除的项...',
+          type: 'error'
+        })
+        return false
+      }
+      const ids = _selectData.map((item, index) => {
+        return item.FHBUTTON_ID
+      }).join(',')
+
+      this.$confirm('确定要删除选中的数据吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/fhbutton/deleteAll',
+          {
+            DATA_IDS: ids
+          }
+        ).then(() => {
+          this.listLoading = false
+          this.varList = []
+          this.listQuery.page = 1
+          this.$refs.multipleTable.clearSelection()
+          this.getList()
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    // 判断按钮权限,用于是否显示按钮
+    hasButton: function() {
+      var keys = 'fhbutton:add,fhbutton:del,fhbutton:edit'
+      requestFN(
+        '/head/hasButton',
+        {
+          keys: keys
+        }
+      ).then((data) => {
+        this.add = data.fhbuttonfhadminadd
+        this.del = data.fhbuttonfhadmindel
+        this.edit = data.fhbuttonfhadminedit
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    }
+  }
+}
+</script>
+
diff --git a/src/views/presystem/corptype/index.vue b/src/views/presystem/corptype/index.vue
new file mode 100644
index 0000000..ccac5c9
--- /dev/null
+++ b/src/views/presystem/corptype/index.vue
@@ -0,0 +1,384 @@
+<template>
+  <div class="app-container">
+    <div class="filter-container">
+      <el-input v-model="KEYWORDS" placeholder="搜索" class="filter-item" style="width: 200px;"/>
+      <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="getQuery">
+        搜索
+      </el-button>
+    </div>
+    <el-table
+      v-loading="listLoading"
+      ref="multipleTable"
+      :data="varList"
+      :row-key="getRowKey"
+      :header-cell-style="{
+        'font-weight': 'bold',
+        'color': '#000'
+      }"
+      tooltip-effect="dark"
+      border
+      fit
+      highlight-current-row
+    >
+      <el-table-column
+        :reserve-selection="true"
+        type="selection"
+        width="55"
+        align="center"/>
+      <el-table-column type="index" label="序号" width="50" align="center" />
+      <el-table-column label="类型名称" >
+        <template slot-scope="{row}">
+          <div class="link-type" @click="getList(row.CORPTYPE_ID)">
+            {{ row.NAME }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column prop="DESCR" label="备注" />
+      <el-table-column label="操作" align="center" width="200">
+        <template slot-scope="{row}">
+          <el-button v-show="edit" type="primary" icon="el-icon-edit" size="mini" @click="handleEdit(row.CORPTYPE_ID)">编辑</el-button>
+          <el-button v-show="del" type="danger" icon="el-icon-delete" size="mini" @click="handleDelete(row.CORPTYPE_ID)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-btn-group">
+      <div>
+        <el-button v-show="add" type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button>
+        <el-button v-show="CORPTYPE_ID != '0'" icon="el-icon-arrow-left" @click="getList(pd.PARENT_ID)">返回</el-button>
+        <el-button v-show="del" type="danger" icon="el-icon-delete" plain @click="batchDel">删除</el-button>
+      </div>
+    </div>
+
+    <el-dialog :visible.sync="dialogFormEdit" :title="dialogType==='edit'?'修改':'新增'" width="600px">
+      <el-tag class="mark_up" size="medium">上级类型:{{ CORPTYPE_ID == '0' ?'(无) 此项为顶级类型':pd.NAME }}</el-tag>
+      <el-form ref="form" :rules="rules" :model="form" label-width="110px" style="width: 500px;">
+        <el-form-item label="类型名称" prop="NAME">
+          <el-input id="NAME" ref="NAME" v-model="form.NAME" maxlength="255" placeholder="这里输入类型名称..." title="类型名称"/>
+        </el-form-item>
+        <el-form-item v-for="(item) in cityDeptList" :key="item.BIANMA" :label="item.NAME">
+          <el-select v-model="cityMap[item.BIANMA]" placeholder="请选择" @change="$forceUpdate()">
+            <el-option v-for="dept in item.varList" :key="dept.DEPARTMENT_ID" :label="dept.NAME" :value="dept.DEPARTMENT_ID" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="备注" prop="DESCR">
+          <el-input id="DESCR" ref="DESCR" v-model="form.DESCR" maxlength="255" placeholder="这里输入备注..." title="备注"/>
+        </el-form-item>
+        <el-form-item label="序号" prop="CORPTYPE_ORDER">
+          <el-input v-model.number="form.CORPTYPE_ORDER" placeholder="这里输入序号..." />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormEdit = false">取 消</el-button>
+        <el-button type="primary" @click="confirm">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves' // waves directive
+export default {
+  components: { Pagination },
+  directives: { waves },
+  data() {
+    return {
+      listLoading: true,
+      add: false,
+      del: false,
+      edit: false,
+      CITY_CODE: '',
+      KEYWORDS: '',
+      varList: [],
+      CORPTYPE_ID: '0',	// 主键ID
+      pd: [],
+      form: {
+        CORPTYPE_ID: '',
+        NAME: '', // 类型名称
+        PARENT_ID: '', // 父类型
+        DESCR: '', // 备注
+        CORPTYPE_ORDER: ''
+      },
+      cityMap: {},
+      cityDeptList: [],
+      multipleSelectionAll: [], // 所有选中的数据包含跨页数据
+      multipleSelection: [], // 当前页选中的数据
+      dialogFormEdit: false,
+      dialogType: 'add',
+      rules: {
+        NAME: [{ required: true, message: '类型名称不能为空', trigger: 'blur' }],
+        CORPTYPE_ORDER: [
+          { required: true, message: '序号不能为空', trigger: 'change' },
+          { type: 'number', message: '序号必须为数字' }
+        ]
+      }
+    }
+  },
+  async created() {
+    await this.getList(this.CORPTYPE_ID)
+  },
+  methods: {
+    getRowKey(row) {
+      return row.CORPTYPE_ID
+    },
+    // 搜索
+    getQuery() {
+      this.$refs.multipleTable.clearSelection()
+      this.getList(this.CORPTYPE_ID)
+    },
+    // 获取列表
+    getList(CORPTYPE_ID) {
+      return new Promise((resolve) => {
+        this.listLoading = true
+        requestFN(
+          '/corptype/list',
+          {
+            KEYWORDS: this.KEYWORDS,
+            PARENT_ID: CORPTYPE_ID
+          }
+        ).then((data) => {
+          this.listLoading = false
+          this.varList = data.varList
+          this.pd = data.pd
+          this.CORPTYPE_ID = CORPTYPE_ID
+          this.CITY_CODE = data.CITY_CODE
+          this.hasButton()
+          this.pd = data.pd
+          resolve()
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      })
+    },
+    // 添加
+    async handleAdd() {
+      this.dialogType = 'add'
+      this.resetForm()
+      this.cityMap = {}
+      this.form.PARENT_ID = this.CORPTYPE_ID
+      this.cityDeptList = []
+      await this.getCity()
+      this.dialogFormEdit = true
+    },
+    // 修改
+    async handleEdit(ID) {
+      this.cityMap = {}
+      this.cityDeptList = []
+      this.getCity()
+      this.dialogType = 'edit'
+      requestFN(
+        '/corptype/goEdit',
+        {
+          CORPTYPE_ID: ID
+        }
+      ).then((data) => {
+        this.form = Object.assign({}, data.pd) // copy obj
+        data.ctodList.map((e) => {
+          this.cityMap[e.BIANMA.toString()] = e.DEPARTMENT_ID
+        })
+        this.dialogFormEdit = true
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    async getCity() {
+      const data = await this.getDictionarieData(this.CITY_CODE)
+      const deptMap = {}
+      deptMap.NAME = data.pd.NAME
+      deptMap.BIANMA = data.pd.BIANMA
+      deptMap.varList = await this.getCityDept(deptMap.BIANMA)
+      this.cityDeptList.push(deptMap)
+
+      const countryList = await this.getCountryList(data.pd.DICTIONARIES_ID)
+      for (let i = 0; i < countryList.length; i++) {
+        const countryData = await this.getDictionarieData(countryList[i].DICTIONARIES_ID)
+        const countryDeptMap = {}
+        countryDeptMap.NAME = countryData.pd.NAME
+        countryDeptMap.BIANMA = countryData.pd.BIANMA
+        countryDeptMap.varList = await this.getCountryDept(countryDeptMap.BIANMA)
+        this.cityDeptList.push(countryDeptMap)
+      }
+    },
+    getCountryList(CITY) {
+      return new Promise((resolve) => {
+        requestFN(
+          '/dictionaries/getLevels',
+          {
+            DICTIONARIES_ID: CITY
+          }
+        ).then((data) => {
+          resolve(data.list)
+        }).catch((e) => {
+        })
+      })
+    },
+    getCityDept(CITY) {
+      return new Promise((resolve) => {
+        requestFN(
+          '/department/listAll',
+          {
+            LEVEL: 1,
+            CATEGORY: 1,
+            TYPE: 2,
+            CITY: CITY
+          }
+        ).then((data) => {
+          resolve(data.varList)
+        }).catch((e) => {
+        })
+      })
+    },
+    getCountryDept(COUNTRY) {
+      return new Promise((resolve) => {
+        requestFN(
+          '/department/listAll',
+          {
+            LEVEL: 2,
+            CATEGORY: 1,
+            TYPE: 2,
+            COUNTRY: COUNTRY
+          }
+        ).then((data) => {
+          resolve(data.varList)
+        }).catch((e) => {
+        })
+      })
+    },
+    getDictionarieData(DICTIONARIES_ID) {
+      return new Promise((resolve) => {
+        requestFN(
+          '/dictionaries/goEdit',
+          {
+            DICTIONARIES_ID: DICTIONARIES_ID
+          }
+        ).then((data) => {
+          resolve(data)
+        }).catch((e) => {
+        })
+      })
+    },
+    // 保存
+    confirm() {
+      this.form.cityMap = JSON.stringify(this.cityMap)
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.listLoading = true
+          requestFN(
+            '/corptype/' + this.dialogType,
+            this.form
+          ).then((data) => {
+            this.listLoading = false
+            this.dialogFormEdit = false
+            this.getList(this.CORPTYPE_ID)
+          }).catch((e) => {
+            this.listLoading = false
+          })
+        } else {
+          return false
+        }
+      })
+    },
+
+    handleDelete(id) {
+      this.$confirm('确定要删除吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/corptype/delete',
+          {
+            CORPTYPE_ID: id
+          }
+        ).then(() => {
+          this.$message({
+            message: '删除成功',
+            type: 'success'
+          })
+          this.listLoading = false
+          this.varList = []
+          this.listQuery.page = 1
+          this.getList(this.CORPTYPE_ID)
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+
+    batchDel() {
+      const _selectData = this.$refs.multipleTable.selection
+      if (_selectData == null || _selectData.length == 0) {
+        this.$message({
+          message: '请选中要删除的项...',
+          type: 'error'
+        })
+        return false
+      }
+      const ids = _selectData.map((item, index) => {
+        return item.CORPTYPE_ID
+      }).join(',')
+
+      this.$confirm('确定要删除选中的数据吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/corptype/deleteAll',
+          {
+            DATA_IDS: ids
+          }
+        ).then(() => {
+          this.$message({
+            message: '删除成功',
+            type: 'success'
+          })
+          this.listLoading = false
+          this.varList = []
+          this.listQuery.page = 1
+          this.$refs.multipleTable.clearSelection()
+          this.getList(this.CORPTYPE_ID)
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    // 判断按钮权限,用于是否显示按钮
+    hasButton: function() {
+      var keys = 'corptype:add,corptype:del,corptype:edit,toExcel'
+      requestFN(
+        '/head/hasButton',
+        {
+          keys: keys
+        }
+      ).then((data) => {
+        this.add = data.corptypefhadminadd		// 新增权限
+        this.del = data.corptypefhadmindel		// 删除权限
+        this.edit = data.corptypefhadminedit	// 修改权限
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    resetForm() {
+      this.form = {
+        CORPTYPE_ID: '',
+        NAME: '', // 类型名称
+        PARENT_ID: '', // 父类型
+        DESCR: '', // 备注
+        CORPTYPE_ORDER: ''
+      }
+    }
+  }
+}
+
+</script>
+<style lang="scss" scoped>
+  .mark_up{
+    margin-bottom:20px;
+    margin-left: 110px;
+  }
+</style>
diff --git a/src/views/presystem/dictionary/index.vue b/src/views/presystem/dictionary/index.vue
new file mode 100644
index 0000000..d5bd49e
--- /dev/null
+++ b/src/views/presystem/dictionary/index.vue
@@ -0,0 +1,448 @@
+<template>
+  <div class="icons-container">
+    <el-container>
+      <el-aside width="300px" style="background-color:#fff">
+        <el-input
+          v-model="filterText"
+          placeholder="输入关键字进行过滤"
+          style="margin:10px 0"/>
+        <el-tree
+          v-loading="treeLoading"
+          ref="tree"
+          :data="treeData"
+          :props="defaultProps"
+          :filter-node-method="filterNode"
+          :load="getTreeChildren"
+          class="filter-tree"
+          accordion
+          lazy
+          @node-click="handleNodeClick"/>
+      </el-aside>
+      <el-main>
+        <div class="filter-btn-group">
+          <div>
+            <el-button v-show="add" type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button>
+            <el-button v-show="DICTIONARIES_ID != '0'" icon="el-icon-arrow-left" @click="getList(PARENT_ID,1)">返回</el-button>
+          </div>
+        </div>
+        <el-table
+          v-loading="listLoading"
+          ref="multipleTable"
+          :data="varList"
+          :row-key="getRowKey"
+          :header-cell-style="{
+            'font-weight': 'bold',
+            'color': '#000'
+          }"
+          tooltip-effect="dark"
+          border
+          fit
+          highlight-current-row
+        >
+          <el-table-column
+            :reserve-selection="true"
+            type="selection"
+            width="55"
+            align="center"/>
+          <el-table-column type="index" label="序号" width="50" align="center" />
+          <el-table-column label="名称">
+            <template slot-scope="{row}">
+              <div class="link-type" @click="getList(row.DICTIONARIES_ID,1)">
+                <svg-icon :icon-class="row.NAME" class-name="disabled" /> {{ row.NAME }} <i class="el-icon-arrow-right" />
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column prop="NAME_EN" label="英文" />
+          <el-table-column prop="BIANMA" label="编码"/>
+          <el-table-column prop="DICTIONARIES_ID" label="ID"/>
+          <el-table-column prop="ORDER_BY" label="排序" width="50" align="center"/>
+          <el-table-column v-if="DICTIONARIES_ID == '0'" prop="VISIBLE" label="企业是否可见" width="70" align="center">
+            <template slot-scope="{row}">
+              {{ row.VISIBLE==='1'?'可见':'不可见' }}
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" align="center" width="200">
+            <template slot-scope="{row}">
+              <el-button v-show="edit" type="primary" icon="el-icon-edit" size="mini" @click="handleEdit(row)">编辑</el-button>
+              <el-button v-show="del" type="danger" icon="el-icon-delete" size="mini" @click="handleDelete(row.DICTIONARIES_ID, row.NAME)">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+        <div class="page-btn-group">
+          <div/>
+          <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
+        </div>
+      </el-main>
+    </el-container>
+
+    <el-dialog :visible.sync="dialogFormAdd" :title="msg==='edit'?'修改':'新增'" width="580px">
+      <el-tag class="mark_up" size="medium">上级菜单:{{ PARENT_NAME == '0' ?'(无) 此项为顶级菜单':PARENT_NAME }}</el-tag>
+      <el-form ref="form" :model="form" :rules="rules" label-width="100px" style="width: 500px;">
+        <el-form-item label="名称" prop="NAME">
+          <el-input v-model="form.NAME" placeholder="这里输入名称..." />
+        </el-form-item>
+        <el-form-item label="英文" prop="NAME_EN">
+          <el-input v-model="form.NAME_EN" placeholder="这里输入英文名称..." />
+        </el-form-item>
+        <el-form-item label="编码" prop="BIANMA">
+          <el-input v-model="form.BIANMA" :disabled="msg == 'edit'" placeholder="这里输入编码(不重复,禁止修改)" />
+        </el-form-item>
+        <el-form-item label="排序" prop="ORDER_BY">
+          <el-input v-model.number="form.ORDER_BY" placeholder="这里输入排序..." />
+        </el-form-item>
+        <el-form-item label="排查表" prop="TBSNAME">
+          <el-input v-model="form.TBSNAME" placeholder="这里输入表名,多个用逗号分隔(非必录)" />
+        </el-form-item>
+        <el-form-item label="关联字段" prop="TBFIELD">
+          <el-input v-model="form.TBFIELD" placeholder="这里输入关联字段,默认BIANMA(非必录)" />
+        </el-form-item>
+        <el-form-item v-if="DICTIONARIES_ID == '0'" label="企业是否可见" prop="VISIBLE">
+          <el-select v-model="form.VISIBLE" placeholder="请选择">
+            <el-option
+              key="1"
+              label="可见"
+              value="1"/>
+            <el-option
+              key="2"
+              label="不可见"
+              value="2"/>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="备注" prop="BZ">
+          <el-input v-model="form.BZ" :autosize="{ minRows: 1}" type="textarea" placeholder="这里输入备注..." />
+        </el-form-item>
+        <el-form-item label="禁止删除">
+          <el-radio-group v-model="form.YNDEL">
+            <el-radio label="yes">是</el-radio>
+            <el-radio label="no">否</el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormAdd = false">取 消</el-button>
+        <el-button type="primary" @click="confirm()">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import { requestFN } from '@/utils/request'
+export default {
+  components: { Pagination },
+  data() {
+    return {
+      treeLoading: false,
+      radio: 3,
+      form: {
+        NAME: '',
+        NAME_EN: '',
+        BIANMA: '',
+        ORDER_BY: '',
+        TBSNAME: '',
+        TBFIELD: '',
+        BZ: '',
+        YNDEL: '',
+        PARENT_ID: '',
+        ISDELETE: '',
+        VISIBLE: '0'
+      },
+      rules: {
+        NAME: [
+          { required: true, message: '字典名称不能为空', trigger: 'change' },
+          { min: 2, max: 30, message: '长度在 2 到 30 个字符', trigger: 'blur' }
+        ],
+        NAME_EN: [
+          { required: true, message: '字典英文名称不能为空', trigger: 'change' },
+          { min: 2, max: 30, message: '长度在 2 到 30 个字符', trigger: 'blur' }
+        ],
+        BIANMA: [
+          { required: true, message: '字典编码名称不能为空', trigger: 'change' },
+          { min: 2, max: 30, message: '长度在 2 到 30 个字符', trigger: 'blur' }
+        ],
+        ORDER_BY: [
+          { required: true, message: '字典序号名称不能为空', trigger: 'change' },
+          { type: 'number', message: '字典序号必须为数字' }
+        ]
+      },
+      filterText: '',
+      defaultProps: {
+        children: 'nodes',
+        label: 'NAME'
+      },
+      treeData: [],
+      dialogFormAdd: false,
+      dialogEditIcon: false,
+      varList: [],
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      total: 0,
+      DICTIONARIES_ID: '0',
+      ALL_ID:	'0',
+      PARENT_ID: '0',
+      PARENT_NAME: '0',
+      TYPE: 1,
+      msg: 'add',
+      add: false,
+      del: false,
+      edit: false,
+      resMsg: ''
+    }
+  },
+  watch: {
+    filterText(val) {
+      this.$refs.tree.filter(val)
+    }
+  },
+  created() {
+    // 初始化方法
+    this.dialogFormEdit = false
+    this.listQuery.page = 1
+    // this.getMenuList()
+    this.getList(this.DICTIONARIES_ID, 1)
+    this.hasButton()
+  },
+  methods: {
+    getRowKey(row) {
+      return row.FHBUTTON_ID
+    },
+    async getTreeChildren(node, resolve) {
+      if (node.level === 0) {
+        requestFN(
+          '/dictionaries/getLevels',
+          {
+            DICTIONARIES_ID: 0
+          }
+        ).then((data) => {
+          return resolve(data.list)
+        }).catch((e) => {
+        })
+      } else {
+        requestFN(
+          '/dictionaries/getLevels',
+          {
+            DICTIONARIES_ID: node.data.DICTIONARIES_ID
+          }
+        ).then((data) => {
+          resolve(data.list)
+        }).catch((e) => {
+        })
+      }
+    },
+    filterNode(value, data) {
+      if (!value) return true
+      return data.NAME.indexOf(value) !== -1
+    },
+    handleAdd() {
+      this.dialogFormAdd = true
+      this.resetForm()
+      this.form.YNDEL = 'no'
+      if (this.$refsform !== undefined) {
+        this.$refs.form.resetFields()
+      }
+      this.msg = 'add'
+    },
+    // 获取左侧树
+    getMenuList() {
+      this.listLoading = true
+      requestFN(
+        '/dictionaries/listAllDictMent',
+        {
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.treeData = JSON.parse(data.zTreeNodes)
+      })
+        .catch((e) => {
+          this.listLoading = false
+        })
+    },
+    getList(DICTIONARIES_ID, TYPE) {
+      this.listLoading = true
+      this.TYPE = TYPE
+      if (TYPE == 1) {
+        this.DICTIONARIES_ID = DICTIONARIES_ID
+      } else if (this.ALL_ID == '') {
+        this.DICTIONARIES_ID = ''
+      }
+      requestFN(
+        '/dictionaries/list?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
+        {
+          KEYWORDS: this.KEYWORDS,
+          DICTIONARIES_ID: this.DICTIONARIES_ID
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.varList = data.varList
+        this.total = data.page.totalResult
+        if (TYPE == 1 || this.ALL_ID != '') {
+          this.PARENT_ID = data.PARENT_ID
+          if (data.PARENT_NAME) {
+            this.PARENT_NAME = data.PARENT_NAME
+          }
+          this.ALL_ID = this.DICTIONARIES_ID
+        } else {
+          this.DICTIONARIES_ID = '0'
+          this.PARENT_ID = '0'
+        }
+      })
+        .catch((e) => {
+          this.listLoading = false
+        })
+    },
+    handleNodeClick(node, data, value) {
+      this.getList(node.DICTIONARIES_ID, 1)
+    },
+    resetForm() {
+      this.form = {
+        NAME: '',
+        NAME_EN: '',
+        BIANMA: '',
+        ORDER_BY: '',
+        TBSNAME: '',
+        TBFIELD: '',
+        BZ: '',
+        YNDEL: '',
+        PARENT_ID: '',
+        DICTIONARIES_ID: '',
+        ISDELETE: '',
+        VISIBLE: '0'
+      }
+    },
+    confirm() {
+      this.form.PARENT_ID = this.DICTIONARIES_ID
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.listLoading = true
+          requestFN(
+            '/dictionaries/' + this.msg,
+            this.form
+          ).then((data) => {
+            if (data.result == 'fail') {
+              this.$message({
+                message: data.resMsg,
+                type: 'error'
+              })
+              this.erroMsg = Math.random()
+              this.$nextTick(() => { this.erroMsg = '' })
+              return false
+            }
+            this.listLoading = false
+            this.dialogFormAdd = false
+            // this.getMenuList()
+            this.getList(this.DICTIONARIES_ID, 1)
+
+            this.msg = 'add'
+          }).catch((e) => {
+            this.resMsg = e.resMsg
+            this.listLoading = false
+          })
+        } else {
+          return false
+        }
+      })
+    },
+    handleDelete(id, name) {
+      this.$confirm('确定要删除[' + name + ']吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/dictionaries/delete',
+          {
+            DICTIONARIES_ID: id
+          }
+        ).then((data) => {
+          if (data.result == 'success') {
+            this.listLoading = false
+            // this.getMenuList()
+            this.getList(this.DICTIONARIES_ID, 1)
+          }
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    handleEdit(data) {
+      this.form = {
+        NAME: data.NAME,
+        NAME_EN: data.NAME_EN,
+        BIANMA: data.BIANMA,
+        ORDER_BY: data.ORDER_BY,
+        TBSNAME: data.TBSNAME,
+        TBFIELD: data.TBFIELD,
+        BZ: data.BZ,
+        YNDEL: data.YNDEL,
+        PARENT_ID: data.PARENT_ID,
+        DICTIONARIES_ID: data.DICTIONARIES_ID,
+        ISDELETE: data.ISDELETE,
+        VISIBLE: data.VISIBLE
+      }
+      this.dialogFormAdd = true
+      this.msg = 'edit'
+    },
+    hasButton: function() {
+      var keys = 'dictionaries:add,dictionaries:del,dictionaries:edit'
+      requestFN(
+        '/head/hasButton',
+        {
+          keys: keys
+        }
+      ).then((data) => {
+        this.add = data.dictionariesfhadminadd
+        this.del = data.dictionariesfhadmindel
+        this.edit = data.dictionariesfhadminedit
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.el-dialog__body{
+  padding: 0;
+  background: red;
+}
+.mark_up{
+  margin-bottom:20px;
+  margin-left: 90px;
+}
+.icons-container {
+  margin: 0;
+  overflow: hidden;
+
+  .grid {
+    position: relative;
+    display: grid;
+    grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
+  }
+
+  .icon-item {
+    margin-bottom: 10px;
+    height: 70px;
+    text-align: center;
+    width: 100px;
+    float: left;
+    font-size: 24px;
+    color: #24292e;
+    cursor: pointer;
+    span {
+    display: block;
+    font-size: 14px;
+    margin-top: 10px;
+    }
+
+  }
+
+  .disabled {
+    pointer-events: none;
+  }
+}
+</style>
diff --git a/src/views/presystem/group/dept/index.vue b/src/views/presystem/group/dept/index.vue
new file mode 100644
index 0000000..d75cc23
--- /dev/null
+++ b/src/views/presystem/group/dept/index.vue
@@ -0,0 +1,456 @@
+<template>
+  <div class="icons-container">
+    <el-container>
+      <el-aside width="300px" style="background-color:#fff">
+        <el-input
+          v-model="filterText"
+          placeholder="输入关键字进行过滤"
+          style="margin:10px 0"/>
+        <el-tree
+          v-loading="treeLoading"
+          ref="tree"
+          :data="treeData"
+          :props="defaultProps"
+          :filter-node-method="filterNode"
+          class="filter-tree"
+          @node-click="handleNodeClick"/>
+      </el-aside>
+      <el-main>
+        <div class="filter-container">
+          <div class="filter-lable w80">部门名称:</div>
+          <el-input v-model="keydeptName" clearable placeholder="搜索用户名" class="filter-item" style="width: 200px;"/>
+          <div class="filter-lable w80">部门级别:</div>
+          <el-select ref="refDeptLevel" v-model="keyDeptLevel" clearable placeholder="请选择部门级别" class="filter-item">
+            <el-option v-for="item in levelList" :key="item.DICTIONARIES_ID" :label="item.NAME" :value="item.DICTIONARIES_ID" />
+          </el-select>
+          <div class="filter-lable w80">单位类型:</div>
+          <el-select ref="refDeptType" v-model="keyDeptType" clearable placeholder="请选择单位类型" class="filter-item">
+            <el-option v-for="item in DEPT_TYPEList" :key="item.DICTIONARIES_ID" :label="item.NAME" :value="item.DICTIONARIES_ID" />
+          </el-select>
+          <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="getQuery">
+            搜索
+          </el-button>
+          <el-button v-waves class="filter-item" type="success" icon="el-icon-refresh" @click="goKeyReset">
+            重置
+          </el-button>
+        </div>
+        <div class="filter-btn-group">
+          <div>
+            <el-button v-show="DEPARTMENT_ID != '0'" type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button>
+            <el-button v-show="DEPARTMENT_ID != '0'" icon="el-icon-arrow-left" @click="getList(form.PARENT_ID)">返回</el-button>
+          </div>
+        </div>
+        <el-table
+          v-loading="listLoading"
+          ref="multipleTable"
+          :data="varList"
+          :header-cell-style="{
+            'font-weight': 'bold',
+            'color': '#000'
+          }"
+          tooltip-effect="dark"
+          border
+          fit
+          highlight-current-row
+        >
+          <el-table-column type="index" prop="numb" label="序号" width="50" align="center" />
+          <el-table-column label="名称" >
+            <template slot-scope="{row}">
+              <div class="link-type" @click="getList(row.DEPARTMENT_ID)">{{ row.NAME }}</div>
+            </template>
+          </el-table-column>
+          <el-table-column prop="deptLevelName" label="部门级别"/>
+          <el-table-column prop="chargeName" label="负责人"/>
+          <el-table-column prop="leaderName" label="分管领导"/>
+          <el-table-column prop="DEP_ORDER" label="排序" width="100" />
+          <el-table-column label="操作" align="center" width="300">
+            <template slot-scope="{row}">
+              <el-button v-show="edit && DEPARTMENT_ID != '0'" type="primary" icon="el-icon-edit" size="mini" @click="handleEdit(row.DEPARTMENT_ID)">编辑</el-button>
+              <el-button v-show="del && DEPARTMENT_ID != '0'" type="danger" icon="el-icon-delete" size="mini" @click="handleDelete(row.DEPARTMENT_ID, row.NAME)">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+        <div class="page-btn-group">
+          <div/>
+          <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList(DEPARTMENT_ID)" />
+        </div>
+      </el-main>
+    </el-container>
+
+    <el-dialog :visible.sync="dialogFormAdd" :title="dialogType==='edit'?'修改':'新增'" width="600px">
+      <el-tag class="mark_up" size="medium">上级部门:{{ DEPARTMENT_ID == '0' ?'(无) 此项为顶级部门':pds.NAME }}</el-tag>
+      <el-form ref="form" :model="form" :rules="rules" label-width="110px" style="width: 500px;">
+        <el-form-item label="部门名称" prop="NAME">
+          <el-input v-model="form.NAME" placeholder="这里输入部门名称..." />
+        </el-form-item>
+        <el-form-item label="部门级别" prop="LEVEL">
+          <el-select v-model="form.LEVEL" placeholder="请选择" class="filter-item">
+            <el-option v-for="item in levelList" :key="item.DICTIONARIES_ID" :label="item.NAME" :value="item.DICTIONARIES_ID" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="单位类型" prop="DEPT_TYPE">
+          <el-select v-model="form.DEPT_TYPE" placeholder="请选择" class="filter-item">
+            <el-option v-for="item in DEPT_TYPEList" :key="item.DICTIONARIES_ID" :label="item.NAME" :value="item.DICTIONARIES_ID" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="部门排序" prop="DEP_ORDER">
+          <el-input v-model.number="form.DEP_ORDER" placeholder="这里输入部门排序..." />
+        </el-form-item>
+        <el-form-item label="部门负责人" prop="HEADMAN">
+          <el-select v-model="form.IN_CHARGE" placeholder="请选择部门负责人" class="filter-item">
+            <el-option v-for="item in userAllList" :key="item.USER_ID" :label="item.NAME" :value="item.USER_ID" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="分管领导" prop="HEADMAN">
+          <el-select v-model="form.IN_LEADER" placeholder="请选择分管领导" class="filter-item">
+            <el-option v-for="item in userAllList" :key="item.USER_ID" :label="item.NAME" :value="item.USER_ID" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="安全管理部门" prop="STATE">
+          <el-select v-model="form.STATE" placeholder="请选择" class="filter-item">
+            <el-option v-for="item in options" :key="item.label" :label="item.label" :value="item.value" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="备注">
+          <el-input :rows="3" v-model="form.BZ" type="textarea" placeholder="这里输入备注..." />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormAdd = false">取 消</el-button>
+        <el-button type="primary" @click="confirm">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves' // waves directive
+export default {
+  name: 'Icons',
+  components: { Pagination },
+  directives: { waves },
+  data() {
+    return {
+      listLoading: false,			// 加载状态
+      treeLoading: false,
+      dialogFormAdd: false,
+      dialogEditIcon: false,
+      dialogType: 'add',
+      // 树形部门
+      filterText: '',
+      treeData: [],
+      defaultProps: {
+        children: 'nodes',
+        label: 'name'
+      },
+      // 列表
+      varList: [],	// list
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      total: 0,
+      keydeptName: '',
+      keyDeptLevel: '',
+      keyDeptType: '',
+      DEPARTMENT_ID: '0',	// 主键ID
+      PARENT_ID: '0',				// 上级ID
+      pd: [],
+      options: [{
+        value: '0',
+        label: '安监部门'
+      }, {
+        value: '2',
+        label: '消防部门'
+      }],
+      form: {
+        STATE: '',
+        DEPARTMENT_ID: '',	 // 主键ID
+        PARENT_ID: '',
+        NAME: '',
+        LEVEL: '',
+        DEP_ORDER: '',	 //
+        HEADMAN: '',	 //
+        TEL: '',	 //
+        FUNCTIONS: '', //
+        DEPT_TYPE: '', // 单位类型
+        IN_CHARGE: '', // 负责人
+        IN_LEADER: '', // 分管领导
+        BZ: '' //
+      },
+      pds: [],
+      levelList: [],
+      DEPT_TYPEList: [],
+      add: false,
+      del: false,
+      edit: false,
+      rules: {
+        NAME: [
+          { required: true, message: '部门名称不能为空', trigger: 'change' }
+        ],
+        LEVEL: [
+          { required: true, message: '部门级别不能为空', trigger: 'change' }
+        ],
+        DEPT_TYPE: [
+          { required: true, message: '单位类型不能为空', trigger: 'change' }
+        ],
+        DEP_ORDER: [
+          { required: true, message: '部门序号不能为空', trigger: 'change' },
+          { type: 'number', message: '部门序号必须为数字' }
+        ]
+      },
+      userAllList: []
+    }
+  },
+  watch: {
+    filterText(val) {
+      this.$refs.tree.filter(val)
+    }
+  },
+  created() {
+    this.getTreeList()
+    this.getList(this.DEPARTMENT_ID)
+    this.getDict()
+    this.varList = []
+  },
+  methods: {
+    filterNode(value, data) {
+      if (!value) return true
+      return data.name.indexOf(value) !== -1
+    },
+    handleNodeClick(node, data, value) {
+      this.form.PARENT_ID = node.id
+      this.getList(node.id)
+    },
+    handleAdd() {
+      this.userAllList = []
+      this.dialogType = 'add'
+      this.resetForm()
+      requestFN(
+        '/department/goAdd',
+        {
+          DEPARTMENT_ID: this.DEPARTMENT_ID
+        }
+      ).then((data) => {
+        this.form.PARENT_ID = this.DEPARTMENT_ID
+        this.pds = data.pds	|| []					// 父级部门信息
+      }).catch((e) => {
+
+      })
+      this.dialogFormAdd = true
+    },
+    handleEdit(DEPARTMENT_ID) {
+      this.dialogType = 'edit'
+      requestFN(
+        '/department/goEdit',
+        {
+          DEPARTMENT_ID: DEPARTMENT_ID
+        }
+      ).then((data) => {
+        this.form = Object.assign({}, data.pd) // copy obj
+        this.getUserAllList(data.pd.DEPARTMENT_ID)
+        this.pds = data.pds || []						// 父级部门信息
+      }).catch((e) => {
+        this.listLoading = false
+      })
+      this.dialogFormAdd = true
+    },
+    confirm() {
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.listLoading = true
+          requestFN(
+            '/department/' + this.dialogType,
+            this.form
+          ).then((data) => {
+            this.listLoading = false
+            this.dialogFormAdd = false
+            this.getTreeList()
+            this.getList(this.DEPARTMENT_ID)
+          }).catch((e) => {
+            this.listLoading = false
+          })
+        } else {
+          return false
+        }
+      })
+    },
+    handleDelete(id, name) {
+      this.$confirm('确定要删除[' + name + ']吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/department/delete',
+          {
+            DEPARTMENT_ID: id
+          }
+        ).then(() => {
+          this.$message({
+            message: '删除成功',
+            type: 'success'
+          })
+          this.listLoading = false
+          this.getTreeList()
+          this.getList(this.DEPARTMENT_ID)
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    getTreeList() {
+      this.treeLoading = true
+      requestFN(
+        '/department/listTree',
+        {}
+      ).then((data) => {
+        this.treeLoading = false
+        this.treeData = JSON.parse(data.zTreeNodes)
+      }).catch((e) => {
+        this.treeLoading = false
+      })
+    },
+    getList(DEPARTMENT_ID) {
+      this.listLoading = true
+      this.varList = []
+      this.DEPARTMENT_ID = DEPARTMENT_ID
+      requestFN(
+        '/department/list?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
+        {
+          DEPARTMENT_ID: this.DEPARTMENT_ID,
+          keydeptName: this.keydeptName,
+          keyDeptLevel: this.keyDeptLevel,
+          keyDeptType: this.keyDeptType
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.varList = data.varList
+        this.form.PARENT_ID = data.PARENT_ID
+        this.total = data.page.totalResult
+        this.hasButton()
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    resetForm() {
+      this.form = {
+        DEPARTMENT_ID: '',	 // 主键ID
+        PARENT_ID: '',
+        NAME: '',
+        LEVEL: '',
+        DEP_ORDER: '',	 //
+        HEADMAN: '',	 //
+        TEL: '',	 //
+        FUNCTIONS: '', //
+        BZ: '' //
+      }
+    },
+    // 获取数据字典数据
+    getDict() {
+      requestFN(
+        'dictionaries/getLevels',
+        { DICTIONARIES_ID: '3e057d284c294a48af32948d58e92e3d' }
+      ).then((data) => {
+        this.levelList = data.list
+      }).catch((e) => {
+        this.listLoading = false
+      })
+      requestFN(
+        'dictionaries/getLevels',
+        { DICTIONARIES_ID: '3f3a6ac41247438e91df2830765068ba' }
+      ).then((data) => {
+        this.DEPT_TYPEList = data.list
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    hasButton: function() {
+      var keys = 'department:add,department:del,department:edit'
+      requestFN(
+        '/head/hasButton',
+        {
+          keys: keys
+        }
+      ).then((data) => {
+        this.add = data.departmentfhadminadd
+        this.del = data.departmentfhadmindel
+        this.edit = data.departmentfhadminedit
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    getUserAllList(DEPARTMENT_ID) {
+      requestFN(
+        'user/listAll',
+        { DEPARTMENT_ID: this.form.DEPARTMENT_ID || '0' }
+      ).then((data) => {
+        this.userAllList = data.userList
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    getQuery() {
+      this.$refs.multipleTable.clearSelection()
+      this.getList()
+    },
+    goKeyReset() {
+      this.keydeptName = ''
+      this.keyDeptLevel = ''
+      this.keyDeptType = ''
+      // if (this.$refs.refDeptLevel) {
+      //   this.$refs.refDeptLevel.clearHandle()
+      // }
+      // if (this.$refs.refDeptType) {
+      //   this.$refs.refDeptType.clearHandle()
+      // }
+      this.getList()
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+  .el-dialog__body{
+    padding: 0;
+    background: red;
+  }
+  .mark_up{
+    margin-bottom:20px;
+    margin-left: 110px;
+  }
+  .icons-container {
+    margin: 0;
+    overflow: hidden;
+
+    .grid {
+      position: relative;
+      display: grid;
+      grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
+    }
+
+    .icon-item {
+      margin-bottom: 10px;
+      height: 70px;
+      text-align: center;
+      width: 100px;
+      float: left;
+      font-size: 24px;
+      color: #24292e;
+      cursor: pointer;
+      span {
+        display: block;
+        font-size: 14px;
+        margin-top: 10px;
+      }
+
+    }
+
+    .disabled {
+      pointer-events: none;
+    }
+  }
+</style>
diff --git a/src/views/presystem/group/index.vue b/src/views/presystem/group/index.vue
new file mode 100644
index 0000000..98240ae
--- /dev/null
+++ b/src/views/presystem/group/index.vue
@@ -0,0 +1,3 @@
+<template>
+  <router-view />
+</template>
diff --git a/src/views/presystem/group/user/index.vue b/src/views/presystem/group/user/index.vue
new file mode 100644
index 0000000..528d6b4
--- /dev/null
+++ b/src/views/presystem/group/user/index.vue
@@ -0,0 +1,777 @@
+<template>
+  <div class="app-container">
+    <el-container>
+      <el-aside width="300px" style="background-color:#fff">
+        <el-input
+          v-model="filterText"
+          placeholder="输入关键字进行过滤"
+          style="margin:10px 0"/>
+        <el-tree
+          v-loading="treeLoading"
+          ref="tree"
+          :data="treeData"
+          :props="defaultProps"
+          :filter-node-method="filterNode"
+          class="filter-tree"
+          @node-click="handleNodeClick"/>
+      </el-aside>
+      <el-main>
+        <div class="filter-container">
+          <div class="filter-lable w80">用户名称:</div>
+          <el-input v-model="keyUserName" clearable placeholder="搜索用户名" class="filter-item" style="width: 200px;"/>
+          <div class="filter-lable w80">职务级别:</div>
+          <el-select ref="refDeptLeven" v-model="keyJobLeven" clearable placeholder="请选择部门级别" class="filter-item" style="width: 200px;" >
+            <el-option v-for="item in deptTypeLevenAllList" :key="item.BIANMA" :label="item.NAME" :value="item.DICTIONARIES_ID" />
+          </el-select>
+          <!--          <div class="filter-lable w80">行政区域:</div>-->
+          <!--          <el-cascader ref="shudi" v-model="keyShudi" :props="areaprops" clearable placeholder="请选择行政区域" style="width: 200px" />-->
+          <!--          <div class="filter-lable w80">单位类型:</div>-->
+          <!--          <el-select ref="refDeptType" v-model="keyDeptType" clearable placeholder="请选择单位类型" class="filter-item">-->
+          <!--            <el-option v-for="item in unitTypeList" :key="item.DICTIONARIES_ID" :label="item.NAME" :value="item.DICTIONARIES_ID" />-->
+          <!--          </el-select>-->
+          <div class="filter-lable w80">部门名称:</div>
+          <el-input v-model="keyDepeName" clearable placeholder="搜索部门名称" class="filter-item" style="width: 200px;"/>
+          <!--          <div class="filter-lable w80">职务级别:</div>-->
+          <!--          <el-select ref="refJobLeven" v-model="keyJobLeven" clearable placeholder="请选择" class="filter-item">-->
+          <!--            <el-option v-for="item in jobTypeAllList" :key="item.DICTIONARIES_ID" :label="item.NAME" :value="item.DICTIONARIES_ID" />-->
+          <!--          </el-select>-->
+          <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="getQuery">
+            搜索
+          </el-button>
+          <el-button v-waves class="filter-item" type="success" icon="el-icon-refresh" @click="goKeyReset">
+            重置
+          </el-button>
+          <el-button v-waves v-if="LOGIN_USER === '1'" class="filter-item" type="warning" icon="el-icon-warning" size="mini" plain @click="resetPassword">
+            一键密码重置
+          </el-button>
+        </div>
+        <el-table
+          ref="multipleTable"
+          :data="varList"
+          :header-cell-style="{
+            'font-weight': 'bold',
+            'color': '#000'
+          }"
+          tooltip-effect="dark"
+          border
+          fit
+          highlight-current-row
+        >
+          <el-table-column
+            type="selection"
+            width="55"
+            align="center"/>
+          <el-table-column type="index" label="序号" width="50" align="center" />
+          <el-table-column prop="USERNAME" label="用户名" />
+          <el-table-column prop="NAME" label="姓名" />
+          <el-table-column prop="SEX" label="性别">
+            <template slot-scope="{row}">
+              <span v-if="row.SEX =='0'">男</span>
+              <span v-if="row.SEX =='1'">女</span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="DEPARTMENT_NAME" label="部门" />
+          <el-table-column prop="jobLevenName" label="职务级别" />
+          <el-table-column prop="STATUS" label="状态" >
+            <template slot-scope="{row}">
+              <span v-if="row.STATUS =='0'">启用</span>
+              <span v-if="row.STATUS =='1'">禁用</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" align="center" width="400">
+            <template slot-scope="{row}">
+              <el-button v-show="edit" type="primary" icon="el-icon-edit" size="mini" @click="handleEdit(row)">编辑</el-button>
+              <el-button v-show="edit" type="success" icon="el-icon-view" size="mini" @click="resetPwd(row.USER_ID)">重置密码</el-button>
+              <el-button v-show="edit && row.STATUS === '99'" type="warning" icon="el-icon-unlock" size="mini" @click="unLockUser(row.USER_ID, row.NAME)">帐号解锁</el-button>
+              <el-button v-show="row.STATUS== 0" type="primary" icon="el-icon-edit" size="mini" @click="handleEditStatus(row,'1', row.USER_ID)">禁用</el-button>
+              <el-button v-show="row.STATUS== 1" type="primary" icon="el-icon-edit" size="mini" @click="handleEditStatus(row,'0', row.USER_ID)">启用</el-button>
+              <el-button v-show="del" type="danger" icon="el-icon-delete" size="mini" @click="handleDelete(row.USER_ID,row.USERNAME)">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+        <div class="page-btn-group">
+          <div>
+            <template >
+              <el-button v-show="add" type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button>
+              <el-button v-show="del" type="danger" icon="el-icon-delete" plain @click="makeAll('0')">删除</el-button>
+            </template>
+          </div>
+          <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
+        </div>
+      </el-main>
+    </el-container>
+    <el-dialog v-loading="editloading" :visible.sync="dialogFormEdit" :title="dialogType==='editUser'?'修改':'新增'" width="600px">
+      <el-form ref="form" :rules="rules" :model="pd" label-width="110px" style="width: 500px;">
+        <el-form-item label="角色" prop="ROLE_ID">
+          <el-select v-model="pd.ROLE_ID" multiple placeholder="请选择角色">
+            <el-option v-for="item in roleList" :key="item.role_ID" :label="item.role_NAME" :value="item.role_ID" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="用户名" prop="USERNAME">
+          <el-input v-model="pd.USERNAME" :disabled="dialogType == 'editUser'" placeholder="这里输入用户名..." />
+        </el-form-item>
+        <el-form-item label="姓名" prop="NAME">
+          <el-input v-model="pd.NAME" placeholder="这里输入姓名..." />
+        </el-form-item>
+        <el-form-item v-if="dialogType != 'editUser'" label="密码" prop="PASSWORD">
+          <el-input v-model="pd.userPASSWORD" show-password placeholder="这里输入密码..." />
+        </el-form-item>
+        <el-form-item label="性别" prop="SEX">
+          <el-radio v-model="pd.SEX" :label="'0'">男</el-radio>
+          <el-radio v-model="pd.SEX" :label="'1'">女</el-radio>
+        </el-form-item>
+        <el-form-item label="手机号" prop="PHONE">
+          <el-input v-model="pd.PHONE" placeholder="这里输入手机号..." />
+        </el-form-item>
+        <!--        <el-form-item label="部门级别" prop="deptTypeID"> &lt;!&ndash;(目的是选择部门到这个级别)  &ndash;&gt;-->
+        <!--          <el-select v-model="pd.deptTypeID" placeholder="请选择" class="filter-item" >-->
+        <!--            <el-option v-for="item in deptTypeLevenAllList" :key="item.BIANMA" :label="item.NAME" :value="item.DICTIONARIES_ID" />-->
+        <!--          </el-select>-->
+        <!--        </el-form-item>-->
+        <el-form-item label="单位部门" prop="DEPARTMENT_ID">
+          <SelectTree
+            v-if="dialogFormEdit"
+            ref="deptTree"
+            :clearable="false"
+            :options="deptTreeData"
+            :props="deptDefaultProps"
+            v-model="pd.DEPARTMENT_ID"
+            placeholder="请选择部门"
+          />
+        </el-form-item>
+        <el-form-item label="行政区域" prop="shudi"> <!--河北省的就可以  -->
+          <el-cascader v-if="dialogFormEdit" id="shudi" ref="shudi" v-model="pd.shudi" :props="areaprops" placeholder="请选择省市县" style="width: 100%" />
+        </el-form-item>
+        <el-form-item label="职务级别" prop="JOB_LEVEL">
+          <el-select ref="refJobLevel" v-model="pd.JOB_LEVEL" placeholder="请选择" class="filter-item">
+            <el-option v-for="item in deptTypeLevenAllList" :key="item.BIANMA" :label="item.NAME" :value="item.DICTIONARIES_ID" />
+          </el-select>
+        </el-form-item>
+        <!-- 相关方的业务需求,是否为审核人员.如果为是的情况,就是可以在入场培训中选择 -->
+        <el-form-item label="是否审核人员" prop="ISASSESS">
+          <el-radio v-model="pd.ISASSESS" :label="'1'">是</el-radio>
+          <el-radio v-model="pd.ISASSESS" :label="'0'">否</el-radio>
+        </el-form-item>
+        <el-form-item label="职务" prop="JOB">
+          <el-input v-model="pd.JOB" placeholder="这里输入职务..." />
+        </el-form-item>
+        <el-form-item label="邮箱" prop="EMAIL">
+          <el-input v-model="pd.EMAIL" placeholder="这里输入邮箱..." />
+        </el-form-item>
+        <el-form-item label="排序" prop="SORT">
+          <el-input v-model.number="pd.SORT" placeholder="这里输入排序..." />
+        </el-form-item>
+        <el-form-item label="备注">
+          <el-input v-model="pd.BZ" type="textarea" placeholder="这里输入备注说明..." />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormEdit = false">取 消</el-button>
+        <el-button type="primary" @click="confirm">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves' // waves directive
+import SelectTree from '@/components/SelectTree'
+export default {
+  components: { Pagination, SelectTree },
+  directives: { waves },
+  data() {
+    var hasUser = (rule, value, callback) => {
+      if (this.dialogType != 'editUser') {
+        requestFN(
+          '/user/hasUser',
+          {
+            USERNAME: value,
+            tm: new Date().getTime()
+          }
+        ).then((data) => {
+          if (data.result == 'success') {
+            callback()
+          } else {
+            callback(new Error('用户名重复'))
+          }
+        }).catch((e) => {
+
+        })
+      } else {
+        callback()
+      }
+    }
+    var hasEmail = (rule, value, callback) => {
+      if (value) {
+        requestFN(
+          '/user/hasEmail',
+          {
+            EMAIL: value,
+            USERNAME: this.pd.USERNAME
+          }
+        ).then((data) => {
+          if (data.result == 'success') {
+            callback()
+          } else {
+            callback(new Error('邮箱重复'))
+          }
+        }).catch((e) => {
+
+        })
+      } else {
+        callback()
+      }
+    }
+    return {
+      LOGIN_USER: JSON.parse(sessionStorage.getItem('user')).USER_ID,
+      treeLoading: false,
+      treeData: [],
+      defaultProps: {
+        children: 'nodes',
+        label: 'name'
+      },
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      total: 0,
+      varList: [],
+      filterText: '',
+      keyUserName: '',
+      keyDeptLeven: '',
+      keyShudi: '',
+      keyDeptType: '',
+      keyDepeName: '',
+      keyJobLeven: '',
+      dialogFormEdit: false,
+      editloading: false,
+      dialogType: 'add',
+      rules: {
+        EMAIL: [
+          { required: false, message: '请输入邮箱', trigger: 'blur' },
+          {
+            pattern: /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/,
+            message: '请输入正确的邮箱'
+          },
+          { validator: hasEmail, trigger: 'blur' }
+        ],
+        ROLE_ID: [
+          { required: true, message: '角色不能为空', trigger: 'blur' }
+        ],
+        USERNAME: [
+          { required: true, message: '用户名不能为空', trigger: 'blur' },
+          { min: 2, max: 30, message: '长度在 2 到 30 个字符', trigger: 'blur' },
+          { validator: hasUser, trigger: 'blur' }
+        ],
+        NAME: [
+          { required: true, message: '姓名不能为空', trigger: 'blur' },
+          { min: 2, max: 30, message: '长度在 2 到 30 个字符', trigger: 'blur' }
+        ],
+        SEX: [
+          { required: true, message: '请选择性别', trigger: 'blur' }
+        ],
+        PHONE: [
+          { required: true, message: '手机号不能为空', trigger: 'blur' },
+          { min: 11, max: 11, message: '请输入11位手机号码', trigger: 'blur' },
+          {
+            pattern: /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/,
+            message: '请输入正确的手机号码'
+          }
+        ],
+        deptTypeID: [
+          { required: true, message: '请选择部门级别', trigger: 'blur' }
+        ],
+        shudi: [
+          { required: true, message: '请选择属地', trigger: 'blur' }
+        ],
+        JOB_LEVEL: [
+          { required: true, message: '请选择职务级别', trigger: 'blur' }
+        ],
+        DEPARTMENT_ID: [
+          { required: true, message: '请选择单位部门', trigger: 'blur' }
+        ],
+        ISASSESS: [
+          { required: true, message: '请选择是否审核人员', trigger: 'blur' }
+        ]
+      },
+      pd: {
+        ROLE_ID: [], // 角色ID
+        USERNAME: '', // 用户名
+        NAME: '', // 姓名
+        userPASSWORD: 'Aa@123456789', // 密码
+        SEX: '', // 性别(0男,1女)
+        PHONE: '', // 电话
+        deptTypeID: '', // 需要选择的部门级别,只有相等的时候可以
+        DEPARTMENT_ID: '', // 用户部门
+        shudi: '',
+        BZ: '', // 备注
+        EMAIL: '', // 邮箱
+        SORT: '', // 人员在部门中的排序
+        PROVINCE: '', // 所属省
+        CITY: '', // 所属市级
+        COUNTRY: '', // 所属区县
+        VILLAGE: '', // 所属乡镇
+        JOB_LEVEL: '', // 职务级别
+        ISASSESS: '',
+        JOB: ''// 职务
+      },
+      roleList: [],
+      multipleSelectionAll: [], // 所有选中的数据包含跨页数据
+      multipleSelection: [], // 当前页选中的数据
+      fromExcel: false, // 从excel导入权限
+      toExcel: false,	// 导出到excel权限
+      add: false,		// 新增按钮
+      del: false,		// 删除按钮
+      edit: false,	// 修改按钮
+      hasUserRet: false,
+      deptTypeLevenAllList: [], // 单位类型
+      jobTypeAllList: [], // 职务级别
+      deptTreeData: [], // 部门树数据,
+      deptDefaultProps: {
+        value: 'id',
+        children: 'nodes',
+        label: 'name'
+      },
+      unitTypeList: [],
+      areaprops: {
+        lazy: true,
+        lazyLoad(node, resolve) {
+          setTimeout(() => {
+            const areaLeven = node.level
+            var areaParID = ''
+            if (areaLeven == '0') {
+              areaParID = 'e725d2a91b8248f4b8f49889038df7de'
+            } else {
+              areaParID = node.data.id
+            }
+            requestFN(
+              'dictionaries/getLevels',
+              { DICTIONARIES_ID: areaParID }
+            ).then((data) => {
+              const nodes = data.list.map(item => ({
+                value: item.DICTIONARIES_ID,
+                label: item.NAME.toString(),
+                id: item.DICTIONARIES_ID.toString(),
+                leaf: areaLeven > 2
+              }))
+              resolve(nodes) // 通过调用resolve将子节点数据返回,通知组件数据加载完成
+            }).catch((e) => {
+              this.editloading = false
+              this.listLoading = false
+            })
+          }, 500)
+        }
+      }
+    }
+  },
+  watch: {
+    filterText(val) {
+      this.$refs.tree.filter(val)
+    }
+  },
+  created() {
+    this.getList()
+    this.hasButton()
+    this.getDict('3e057d284c294a48af32948d58e92e3d', 'deptTypeLevenAllList')
+    this.getDict('3f3a6ac41247438e91df2830765068ba', 'unitTypeList')
+    this.getDepartTreeList()
+    this.getDict('f1fbdf9a286342ae98e6a56bf823f221', 'jobTypeAllList')
+    this.goAddUser()
+    this.getTreeList()
+  },
+  methods: {
+    getList() {
+      this.listLoading = true
+      requestFN(
+        '/user/list?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
+        {
+          keyUserName: this.keyUserName,
+          keyDeptLeven: this.keyDeptLeven,
+          keyShudi: this.keyShudi,
+          keyDeptType: this.keyDeptType,
+          keyDepeName: this.keyDepeName,
+          keyJobLeven: this.keyJobLeven,
+          DEPARTMENT_ID: this.DEPARTMENT_ID,
+          PROVINCE: this.keyShudi[0] || '',
+          CITY: this.keyShudi[1] || '',
+          COUNTRY: this.keyShudi[2] || '',
+          VILLAGE: this.keyShudi[3] || ''
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.varList = data.userList
+        this.total = data.page.totalResult
+      })
+        .catch((e) => {
+          this.listLoading = false
+        })
+    },
+
+    goKeyReset() {
+      this.keyUserName = ''
+      this.keyDeptLeven = ''
+      this.keyShudi = ''
+      this.keyDeptType = ''
+      this.keyDepeName = ''
+      this.keyJobLeven = ''
+      this.getList()
+      if (this.$refs.refDeptLeven) {
+        this.$refs.refDeptLeven.clearHandle()
+      }
+      if (this.$refs.shudi) {
+        this.$refs.shudi.clearHandle()
+      }
+      if (this.$refs.refDeptType) {
+        this.$refs.refDeptType.clearHandle()
+      }
+      if (this.$refs.refJobLeven) {
+        this.$refs.refJobLeven.clearHandle()
+      }
+    },
+    goAddUser() { // 点击添加用户的时候,获取角色
+      requestFN(
+        '/user/goAddUser',
+        {
+        }
+      ).then((data) => {
+        this.roleList = data.roleList
+      })
+        .catch((e) => {
+        })
+    },
+
+    unLockUser(id, name) {
+      this.$confirm('确定要解锁 [ 帐号:' + name + ' ] 吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/user/unLockUser',
+          {
+            USER_ID: id
+          }
+        ).then(() => {
+          this.$message({
+            message: '解锁成功',
+            type: 'success'
+          })
+          this.listLoading = false
+          this.varList = []
+          this.listQuery.page = 1
+          this.getList()
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    handleAdd() {
+      this.dialogFormEdit = true
+      this.pd = {}
+      this.dialogType = 'saveUser'
+      this.pd.PASSWORD = 'Aa@123456789'
+    },
+    confirm() {
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.listLoading = true
+          if (this.pd.ROLE_ID) {
+            var roleIDs = ''
+            this.pd.ROLE_ID.forEach((item) => {
+              roleIDs += item + ';'
+            })
+            this.pd.roleIDs = roleIDs
+          }
+          if (this.pd.shudi) {
+            this.pd.PROVINCE = this.pd.shudi[0]
+            this.pd.CITY = this.pd.shudi[1]
+            this.pd.COUNTRY = this.pd.shudi[2] || ''
+            this.pd.VILLAGE = this.pd.shudi[3] || ''
+          }
+          requestFN(
+            '/user/' + this.dialogType,
+            this.pd
+          ).then((data) => {
+            this.listLoading = false
+            this.dialogFormEdit = false
+            this.varList = []
+            this.$refs.deptTree.clearHandle()
+            this.listQuery.page = 1
+            this.getList()
+          }).catch((e) => {
+            this.listLoading = false
+          })
+        } else {
+          return false
+        }
+      })
+    },
+    handleDelete(id, name) {
+      this.$confirm('确定要删除[' + name + ']吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/user/deleteUser',
+          {
+            USER_ID: id
+          }
+        ).then((data) => {
+          if (data.result == 'success') {
+            this.listLoading = false
+            this.getList()
+          }
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    makeAll(msg) {
+      const _selectData = this.$refs.multipleTable.selection
+      if (_selectData == null || _selectData.length == 0) {
+        this.$message({
+          message: '请选中要删除的项...',
+          type: 'error'
+        })
+        return false
+      }
+      const ids = _selectData.map((item, index) => {
+        return item.USER_ID
+      }).join(',')
+      var tishi = ''
+      if (msg == '0') {
+        tishi = '确定要删除选中的数据吗?'
+      } else if (msg == '1') {
+        tishi = '确定要给选中的用户发送站内信吗?'
+      } else {
+        this.$message({
+          message: '请选择操作类型...',
+          type: 'error'
+        })
+        return false
+      }
+      this.$confirm(tishi, {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        if (msg == '0') {
+          this.listLoading = true
+          requestFN(
+            '/user/deleteAllUser',
+            {
+              USER_IDS: ids
+            }
+          ).then(() => {
+            this.listLoading = false
+            this.varList = []
+            this.listQuery.page = 1
+            this.$refs.multipleTable.clearSelection()
+            this.getList()
+          }).catch((e) => {
+            this.listLoading = false
+          })
+        }
+      }).catch(() => {
+      })
+    },
+    getQuery() {
+      this.$refs.multipleTable.clearSelection()
+      this.getList()
+    },
+    async handleEdit(row) {
+      console.log(row)
+      this.dialogType = 'editUser'
+      this.pd = JSON.parse(JSON.stringify(row))
+      const areaRefID = []
+      if (this.pd.PROVINCE) {
+        areaRefID.push(this.pd.PROVINCE)
+      }
+      if (this.pd.CITY) {
+        areaRefID.push(this.pd.CITY)
+      }
+      if (this.pd.COUNTRY) {
+        areaRefID.push(this.pd.COUNTRY)
+      }
+      if (this.pd.VILLAGE) {
+        areaRefID.push(this.pd.VILLAGE)
+      }
+      this.$set(this.pd, 'shudi', areaRefID)
+
+      const refDeptLevelVal = {}
+      refDeptLevelVal.id = this.pd.deptLevenlID
+      const deptRefsValue = {}
+      deptRefsValue.id = this.pd.DEPARTMENT_ID
+      var arrString = []
+      if (this.pd.ROLE_ID != null && this.pd.ROLE_ID != '') {
+        arrString.push(this.pd.ROLE_ID)
+      }
+      if (this.pd.ROLE_IDS != null && this.pd.ROLE_IDS != '' && this.pd.ROLE_IDS != undefined && this.pd.ROLE_IDS != 'undefined') {
+        // 将字符串转换成数组,此时是字符串数组
+        this.pd.ROLE_IDS = this.pd.ROLE_IDS.substring(0, this.pd.ROLE_IDS.length - 1)
+        var arrList = this.pd.ROLE_IDS && this.pd.ROLE_IDS != '' ? this.pd.ROLE_IDS.split(';') : ''
+        // eslint-disable-next-line no-unused-vars
+        for (const item1 of arrList) { // 循环取出多个角色的ID
+          arrString.push(item1)
+        }
+      }
+      this.pd.ROLE_ID = arrString
+      this.dialogFormEdit = true
+      await this.$nextTick()
+    },
+    handleEditStatus(row, type) {
+      const typeName = type == '1' ? '禁用' : '启用'
+      this.$confirm('确定要' + typeName + '[' + row.USERNAME + ']吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/user/updateUserStatus',
+          {
+            USER_ID: row.USER_ID,
+            status: type
+          }
+        ).then((data) => {
+          if (data.result == 'success') {
+            this.listLoading = false
+            this.getList()
+          }
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    hasButton: function() {
+      var keys = 'user:add,user:del,user:edit,fhSms,email,fromExcel,toExcel'
+      requestFN(
+        '/head/hasButton',
+        {
+          keys: keys, tm: new Date().getTime()
+        }
+      ).then((data) => {
+        if (data.result == 'success') {
+          this.add = data.userfhadminadd	// 增
+          this.del = data.userfhadmindel	// 删
+          this.edit = data.userfhadminedit	// 改
+          this.fromExcel = data.fromExcel	// 从excel导入权限
+          this.toExcel = data.toExcel		// 导出到excel权限
+        } else if (data.result == 'exception') {
+          // showException('按钮权限', data.exception)// 显示异常
+        }
+      })
+        .catch((e) => {
+          this.listLoading = false
+        })
+    },
+    // 获取数据字典数据
+    getDict(dicID, listName) {
+      requestFN(
+        'dictionaries/getLevels',
+        { DICTIONARIES_ID: dicID }
+      ).then((data) => {
+        this[listName] = data.list
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    getDepartTreeList() {
+      this.pd.DEPARTMENT_ID = ''
+      if (this.$refs.deptTree) {
+        this.$refs.deptTree.clearHandle()
+      }
+      return new Promise((resolve) => {
+        requestFN(
+          '/department/listTreeByType'
+        ).then((data) => {
+          this.deptTreeData = JSON.parse(data.zTreeNodes)
+          resolve()
+        }).catch((e) => {
+        })
+      })
+    },
+    resetPwd(id, name) {
+      this.$confirm('是否重置密码为Aa@123456789?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/user/resetPwd',
+          {
+            USER_ID: id
+          }
+        ).then(() => {
+          this.$message({
+            message: '重置成功',
+            type: 'success'
+          })
+          this.listLoading = false
+          this.varList = []
+          this.listQuery.page = 1
+          this.getList()
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    filterNode(value, data) {
+      if (!value) return true
+      return data.name.indexOf(value) !== -1
+    },
+    handleNodeClick(node, data, value) {
+      this.DEPARTMENT_ID = node.id
+      this.getList()
+    },
+    resetPassword() {
+      this.$confirm('一键重置密码,会将所有未修改过密码的用户进行密码重置重置,是否继续?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/user/resetPwdAll',
+          {}
+        ).then(() => {
+          this.$message({
+            message: '重置成功',
+            type: 'success'
+          })
+          this.listLoading = false
+          this.varList = []
+          this.listQuery.page = 1
+          this.getList()
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    getTreeList() {
+      this.treeLoading = true
+      requestFN(
+        '/department/listTree',
+        {}
+      ).then((data) => {
+        this.treeLoading = false
+        this.treeData = JSON.parse(data.zTreeNodes)
+      }).catch((e) => {
+        this.treeLoading = false
+      })
+    }
+  }
+}
+</script>
+
diff --git a/src/views/presystem/homepagepicture/components/indexAdd.vue b/src/views/presystem/homepagepicture/components/indexAdd.vue
new file mode 100644
index 0000000..e670f87
--- /dev/null
+++ b/src/views/presystem/homepagepicture/components/indexAdd.vue
@@ -0,0 +1,248 @@
+<template>
+  <div>
+    <el-form ref="form" :rules="rules" :model="form" label-position="right" label-width="160px" style="padding:10px 40px">
+      <el-row>
+        <el-col :span="24">
+          <el-form-item label="上传图片">
+            <el-upload
+              ref="upload"
+              :on-preview="handlePictureCardPreview"
+              :on-change="beforeFileUpload"
+              :auto-upload="false"
+              class="avatar-uploader"
+              action="#"
+              accept=".jpg,.jpeg,.png"
+              list-type="picture-card">
+              <i class="el-icon-plus" />
+            </el-upload>
+            <el-dialog :visible.sync="dialogVisible">
+              <img :src="dialogImageUrl" width="100%" alt="">
+            </el-dialog>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+
+    <div class="heightt"/>
+    <div class="subdy-foot">
+      <el-row style="text-align: center">
+        <el-button @click="goBack">取 消</el-button>
+        <el-button type="primary" @click="confirm">确 定</el-button>
+      </el-row>
+    </div>
+
+    <!--    <el-dialog :visible.sync="dialogFormEdit" title="请选择位置" width="600px">-->
+    <!--      <label>坐标:<input v-model="lng" disabled><input v-model="lat" disabled></label>-->
+    <!--      <label><el-input v-model="addressKeyword" placeholder="请输入关键字" style="width: 200px;"/></label>-->
+    <!--      <baidu-map v-loading="loadingMap" :zoom="zoom" :scroll-wheel-zoom="true" style="height: 400px;width: 100%" @ready="handler" @click="getPoint">-->
+    <!--        <bm-view style="width: 100%; height:100%; flex: 1"/>-->
+    <!--        <bm-local-search :keyword="addressKeyword" :auto-viewport="true" style="display: none"/>-->
+    <!--      </baidu-map>-->
+    <!--      <div slot="footer" class="dialog-footer">-->
+    <!--        <el-button @click="dialogFormEdit = false">取 消</el-button>-->
+    <!--        <el-button type="primary" @click="setPoint">确 定</el-button>-->
+    <!--      </div>-->
+    <!--    </el-dialog>-->
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import { requestFN } from '@/utils/request'
+import { upload } from '@/utils/upload'
+import waves from '@/directive/waves' // waves directive
+import SelectTree from '@/components/SelectTree'
+export default {
+  components: { Pagination, SelectTree },
+  directives: { waves },
+  data() {
+    return {
+      config: config,
+      dialogVisible: false,
+      dialogImageUrl: '',
+      certificate_files: [],
+      hImgs: [],
+      form: {
+        shudi: [],
+        CORP_NAME: '',
+        POSTAL_CODE: '',
+        CODE: '',
+        PROVINCE: '',
+        CITY: '',
+        COUNTRY: '',
+        INDUSTRY: '',
+        ECO_TYPE: '',
+        ADDRESS_BUSINESS: '',
+        CORP_STATE: '',
+        LATITUDE: '',
+        LONGITUDE: '',
+        jinweidu: '',
+        CONTACTS: '',
+        CONTACTS_PHONE: '',
+        LR_NAME: '',
+        LR_MOBILE: '',
+        AREA_COVERED: '',
+        EMPLOYEES: '',
+        CREATE_DATE: '',
+        REGCAPITAL: '',
+        TOTALASSETS: '',
+        SUBORDINATION: '',
+        SCALE: '',
+        SCALE_TYPE: ''
+      },
+      rules: {
+        CORP_NAME: [{ required: true, message: '分公司名称不能为空', trigger: 'blur' }],
+        shudi: [{ required: true, message: '属地不能为空', trigger: 'blur' }],
+        POSTAL_CODE: [{ required: true, message: '邮政编码不能为空', trigger: 'blur' }],
+        CODE: [{ required: true, message: '统一社会信用代码不能为空', trigger: 'blur' }],
+        INDUSTRY: [{ required: true, message: '所属行业不能为空', trigger: 'blur' }],
+        ECO_TYPE: [{ required: true, message: '经济类型不能为空', trigger: 'blur' }],
+        ADDRESS_BUSINESS: [{ required: true, message: '企事业单位经营地址不能为空', trigger: 'blur' }],
+        CORP_STATE: [{ required: true, message: '分公司状态不能为空', trigger: 'blur' }],
+        jinweidu: [{ required: true, message: '精纬度不能为空', trigger: 'blur' }],
+        CONTACTS: [{ required: true, message: '主要负责人不能为空', trigger: 'blur' }],
+        CONTACTS_PHONE: [{ required: true, message: '主要负责人手机号不能为空', trigger: 'blur' }],
+        LR_NAME: [{ required: true, message: '法定代表人不能为空', trigger: 'blur' }],
+        LR_MOBILE: [{ required: true, message: '法人手机号不能为空', trigger: 'blur' }],
+        AREA_COVERED: [{ required: true, message: '占地面积不能为空', trigger: 'blur' }],
+        EMPLOYEES: [{ required: true, message: '职工人数不能为空', trigger: 'blur' }],
+        CREATE_DATE: [{ required: true, message: '成立时间不能为空', trigger: 'blur' }],
+        REGCAPITAL: [{ required: true, message: '注册资金不能为空', trigger: 'blur' }],
+        TOTALASSETS: [{ required: true, message: '资产总额不能为空', trigger: 'blur' }],
+        SUBORDINATION: [{ required: true, message: '隶属关系不能为空', trigger: 'blur' }],
+        SCALE: [{ required: true, message: '规模不能为空', trigger: 'blur' }],
+        SCALE_TYPE: [{ required: true, message: '是否规模以上不能为空', trigger: 'blur' }]
+      },
+      props: { value: 'value', label: 'label', children: 'children', checkStrictly: true },
+      propsCorpType: { value: 'value', label: 'label', children: 'children', checkStrictly: true },
+      propsCorpFoType: { value: 'id', id: 'id', label: 'label', children: 'children' },
+      propsEcoType: { value: 'value', label: 'label', children: 'children', checkStrictly: true },
+      loadingMap: true,
+      BMap: '',
+      map: '',
+      showMap: false,
+      addressKeyword: '',
+      pointLngLat: '',
+      zoom: 16,
+      location: '',
+      lng: '',
+      lat: '',
+      dialogFormEdit: false,
+      qyztList: [],
+      industryList: [],
+      economicsList: [],
+      scaleList: [],
+      areaprops: {
+        lazy: true,
+        lazyLoad(node, resolve) {
+          setTimeout(() => {
+            const areaLeven = node.level
+            var areaParID = ''
+            if (areaLeven == '0') {
+              areaParID = 'e725d2a91b8248f4b8f49889038df7de'
+            } else {
+              areaParID = node.data.id
+            }
+            requestFN(
+              'dictionaries/getLevels',
+              { DICTIONARIES_ID: areaParID }
+            ).then((data) => {
+              const nodes = data.list.map(item => ({
+                value: item.BIANMA,
+                label: item.NAME.toString(),
+                id: item.DICTIONARIES_ID.toString(),
+                leaf: areaLeven > 1
+              }))
+              resolve(nodes) // 通过调用resolve将子节点数据返回,通知组件数据加载完成
+            }).catch((e) => {})
+          }, 500)
+        }
+      }
+    }
+  },
+  created() {
+    this.$parent.indexVal && this.getData()
+  },
+  methods: {
+    // 保存
+    confirm() {
+      this.uploadImg()
+    },
+
+    beforeFileUpload(file, fileList) {
+      const types = ['image/jpeg', 'image/jpg', 'image/png']
+      const isImage = types.includes(file.raw.type)
+      if (!isImage) {
+        this.$message.error('上传图片只能是 JPG、JPEG、PNG 格式!')
+        fileList.pop()
+      } else {
+        this.certificate_files.push(file.raw)
+      }
+    },
+    handlePictureCardPreview(file) {
+      this.dialogImageUrl = file.url
+      this.dialogVisible = true
+    },
+    uploadImg() {
+      const formData = new FormData()
+      for (var i = 0; i < this.certificate_files.length; i++) {
+        if (this.certificate_files[i]) {
+          formData.append('FFILE', this.certificate_files[i])
+        }
+      }
+      console.log(formData.get('FFILE'))
+
+      upload(
+        '/homepage/add',
+        formData
+      ).then((data) => {
+        this.goBack()
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    deleteCertificate(index) {
+      this.$confirm('确定要删除吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        requestFN(
+          '/homepage/delete',
+          {
+            IMGFILES_ID: index
+          }
+        ).then(() => {
+          this.$message({
+            message: '删除成功',
+            type: 'success'
+          })
+          this.hImgs.splice(index, 1)
+        }).catch((e) => {
+        })
+      }).catch(() => {
+      })
+    },
+    // 返回
+    goBack() {
+      this.$parent.activeName = 'IndexList'
+    },
+    setPoint() {
+      this.form.LATITUDE = this.lat
+      this.form.LONGITUDE = this.lng
+      this.dialogFormEdit = false
+      this.form.jinweidu = this.lat + '-' + this.lng
+    }
+  }
+}
+
+</script>
+<style scoped>
+    .el-divider__text{
+        color: #2a90d2;
+        font-size: 15px;
+    }
+    .el-radio-group{
+        margin-left: 20px;
+    }
+</style>
diff --git a/src/views/presystem/homepagepicture/components/indexList.vue b/src/views/presystem/homepagepicture/components/indexList.vue
new file mode 100644
index 0000000..4fa7e1f
--- /dev/null
+++ b/src/views/presystem/homepagepicture/components/indexList.vue
@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <div class="hidden-container">
+      <div class="hidden-right">
+        <el-button v-waves class="filter-item" type="primary" icon="el-icon-plus" @click="handleAdd">
+          新增首页图片
+        </el-button>
+      </div>
+    </div>
+    <el-table
+      v-loading="listLoading"
+      ref="multipleTable"
+      :data="varList"
+      :row-key="getRowKey"
+      :header-cell-style="{
+        'font-weight': 'bold',
+        'color': '#000'
+      }"
+      tooltip-effect="dark"
+      border
+      fit
+      highlight-current-row
+    >
+      <el-table-column
+        :reserve-selection="true"
+        type="selection"
+        width="55"
+        align="center"/>
+      <el-table-column type="index" label="序号" width="50" align="center" />
+      <el-table-column prop="imgPatn" label="照片" >
+        <template slot-scope="{row}">
+          <!--          <viewer>-->
+          <!--            <img :src="imgurl(row.FILEPATH)" width="100" height="100">-->
+          <!--          </viewer>-->
+          <el-image
+            :src="imgurl(row.FILEPATH)"
+            :preview-src-list="[imgurl(row.FILEPATH)]"
+            style="width: 100px; height: 100px"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="left" width="150">
+        <template slot-scope="{row}">
+          <el-button type="primary" icon="el-icon-edit" size="mini" @click="deleteCertificate(row.IMGFILES_ID)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-btn-group">
+      <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
+    </div>
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves' // waves directive
+export default {
+  components: { Pagination },
+  directives: { waves },
+  data() {
+    return {
+      listLoading: true,
+      add: true,
+      del: true,
+      edit: true,
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      searchForm: {
+        CORP_NAME: '',
+        PROVINCE: '',
+        CITY: '',
+        CORP_STATE: '',
+        CREATTIME: ''
+      },
+      total: 0,
+      varList: [],
+      qyztList: [],
+      industryList: [],
+      countryList: [],
+      villageList: [],
+      CITY_CODE: '',
+      COUNTRY: '',
+      VILLAGE: '',
+      config: config,
+      dialogFormEdit: false,
+      rules: {
+        CORP_NAME: [{ required: true, message: '分公司名称不能为空', trigger: 'blur' }],
+        NEWCORP_NAME: [{ required: true, message: '新分公司名称不能为空', trigger: 'blur' }],
+        PASSWORD: [{ required: true, message: '分公司密码不能为空', trigger: 'blur' }]
+      },
+      updateBranchNameForm: {
+        CORPINFO_ID: '',
+        CORP_NAME: '',
+        NEWCORP_NAME: '',
+        PASSWORD: ''
+      }
+    }
+  },
+  created() {
+    this.getList()
+    this.getDicList('qyztList', '07c2674470c1498ba1ebd74906b3b518')
+    this.getDicList('industryList', 'f2598ba72e864eadabf0ca4b664d26b9')
+  },
+  methods: {
+    getRowKey(row) {
+      return row.CORPINFO_ID
+    },
+    // 搜索
+    getQuery() {
+      this.getList()
+    },
+    imgurl(img) {
+      return config.fileUrl + img
+      // eslint-disable-next-line no-unreachable
+      console.log(config.fileUrl + img)
+    },
+    // 获取列表
+    getList() {
+      this.listLoading = true
+      requestFN(
+        '/homepage/list?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
+        { ...this.searchForm }
+      ).then((data) => {
+        this.listLoading = false
+        this.varList = data.hImgs
+        this.total = data.page.totalResult
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    getCountryList() {
+      requestFN(
+        '/dictionaries/getLevels',
+        {
+          DICTIONARIES_ID: this.CITY_CODE
+        }
+      ).then((data) => {
+        this.countryList = data.list
+      }).catch((e) => {
+      })
+    },
+    getVillageList(value, id) {
+      this.COUNTRY = value
+      requestFN(
+        '/dictionaries/getLevels',
+        {
+          DICTIONARIES_ID: id
+        }
+      ).then((data) => {
+        this.villageList = data.list
+      }).catch((e) => {
+      })
+    },
+    changeVillage(village) {
+      this.VILLAGE = village
+    },
+    // 添加
+    handleAdd() {
+      this.$parent.activeName = 'IndexAdd'
+      this.$parent.indexVal = ''
+    },
+    // 修改
+    handleEdit(ID) {
+      this.$parent.activeName = 'IndexAdd'
+      this.$parent.indexVal = ID
+    },
+    enableORDisable(ISUSE, CORPINFO_ID) {
+      this.$confirm(ISUSE === '0' ? '确定要启用该账户吗?' : '确定要禁用该账户吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/corpinfo/editisuse',
+          {
+            CORPINFO_ID,
+            ISUSE
+          }
+        ).then(() => {
+          this.$message({
+            message: ISUSE === '0' ? '启用成功' : '禁用成功',
+            type: 'success'
+          })
+          this.listLoading = false
+          this.varList = []
+          this.listQuery.page = 1
+          this.getList()
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {})
+    },
+    // 判断按钮权限,用于是否显示按钮
+    hasButton: function() {
+      var keys = 'corpinfo:add,corpinfo:del,corpinfo:edit,toExcel'
+      requestFN(
+        '/head/hasButton',
+        {
+          keys: keys
+        }
+      ).then((data) => {
+        this.add = data.corpinfofhadminadd		// 新增权限
+        this.del = data.corpinfofhadmindel		// 删除权限
+        this.edit = data.corpinfofhadminedit	// 修改权限
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    goKeyReset() {
+      this.searchForm = {
+        CORP_NAME: '',
+        PROVINCE: '',
+        CITY: '',
+        CORP_STATE: '',
+        CREATTIME: ''
+      }
+      this.getList()
+    },
+    resetPwd(id) {
+      this.$confirm('确定要重置选中的密码吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/corpinfo/resetPwd',
+          {
+            CORPINFO_ID: id
+          }
+        ).then(() => {
+          this.$message({
+            message: '重置成功',
+            type: 'success'
+          })
+          this.listLoading = false
+          this.varList = []
+          this.listQuery.page = 1
+          this.getList()
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    // 获取数据字典
+    getDicList(list, DICTIONARIES_ID) {
+      requestFN(
+        '/dictionaries/getLevels',
+        {
+          DICTIONARIES_ID
+        }
+      ).then((data) => {
+        this[list] = data.list
+      }).catch((e) => {
+      })
+    },
+    translate(list, id) {
+      for (let i = 0; i < list.length; i++) {
+        if (list[i].BIANMA === id || list[i].DICTIONARIES_ID === id) {
+          return list[i].NAME
+        }
+      }
+    },
+    deleteCertificate(index) {
+      this.$confirm('确定要删除吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        requestFN(
+          '/homepage/delete',
+          {
+            IMGFILES_ID: index
+          }
+        ).then(() => {
+          this.$message({
+            message: '删除成功',
+            type: 'success'
+          })
+          this.getList()
+          this.hImgs.splice(index, 1)
+        }).catch((e) => {
+        })
+      }).catch(() => {
+      })
+    },
+    showBranchName(CORPINFO_ID, CORP_NAME) {
+      this.$refs.form && this.$refs.form.resetFields()
+      this.dialogFormEdit = true
+      this.updateBranchNameForm.CORPINFO_ID = CORPINFO_ID
+      this.updateBranchNameForm.CORP_NAME = CORP_NAME
+    },
+    updateBranchName() {
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.listLoading = true
+          requestFN(
+            '/corpinfo/editname',
+            {
+              ...this.updateBranchNameForm
+            }
+          ).then((data) => {
+            this.$message.success('修改成功')
+            this.listLoading = false
+            this.varList = []
+            this.listQuery.page = 1
+            this.getList()
+          }).catch((e) => { this.listLoading = false })
+        } else {
+          return false
+        }
+      })
+    }
+  }
+}
+</script>
diff --git a/src/views/presystem/homepagepicture/components/index_view.vue b/src/views/presystem/homepagepicture/components/index_view.vue
new file mode 100644
index 0000000..c17d5c5
--- /dev/null
+++ b/src/views/presystem/homepagepicture/components/index_view.vue
@@ -0,0 +1,444 @@
+<template>
+  <div>
+    <el-form label-position="right" label-width="160px" style="padding:10px 40px">
+      <el-divider content-position="left">基本信息</el-divider>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="企业名称" prop="CORP_NAME">
+            <el-input id="CORP_NAME" ref="CORP_NAME" :disabled="true" v-model="pd.CORP_NAME" maxlength="2000" placeholder="这里输入企业名称..." title="企业名称"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="登录账号">
+            <el-input id="LOGIN_USER_ID" :disabled="true" v-model="pd.logingUserName" maxlength="255" placeholder="这里输入登录账号..." title="登录账号"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="属地" prop="shudi">
+            <el-input id="shudiVal" ref="shudiVal" :disabled="true" v-model="pd.shudiVal" maxlength="255" placeholder="请选择省市县..." title="请选择省市县"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="企事业单位注册地址" prop="ADDRESS">
+            <el-input id="ADDRESS" ref="ADDRESS" :disabled="true" v-model="pd.ADDRESS" maxlength="255" placeholder="企事业单位注册地址..." title="企事业单位注册地址"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="企事业单位经营地址" prop="ADDRESS_BUSINESS">
+            <el-input id="ADDRESS_BUSINESS" ref="ADDRESS_BUSINESS" :disabled="true" v-model="pd.ADDRESS_BUSINESS" maxlength="255" placeholder="这里输入企事业单位经营地址..." title="企事业单位经营地址"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="企事业单位办公地址" prop="ADDRESS_OFFICE">
+            <el-input id="ADDRESS_OFFICE" ref="ADDRESS_OFFICE" :disabled="true" v-model="pd.ADDRESS_OFFICE" maxlength="255" placeholder="这里输入企事业单位办公地址..." title="企事业单位办公地址"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="统一社会信用代码" prop="CODE">
+            <el-input id="code" ref="CODE" :disabled="true" v-model="pd.CODE" maxlength="255" placeholder="这里输入统一社会信用代码..." title="统一社会信用代码"/>
+          </el-form-item>
+        </el-col><el-col :span="12">
+          <el-form-item label="企业状态" prop="CORP_STATE">
+            <el-input :disabled="true" v-model="pd.CORP_STATE_VAL" maxlength="255" placeholder="这里输入企业状态.." title="企业状态"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="国民经济行业分类" prop="CORP_TYPE">
+            <el-input :disabled="true" v-model="pd.corpTypeVal" maxlength="255" placeholder="国民经济行业分类.." title="国民经济行业分类"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="成立日期" prop="CREATE_DATE">
+          <el-date-picker id="CREATE_DATE" ref="CREATE_DATE" :disabled="true" v-model="pd.CREATE_DATE" style="width: 100%" type="date" placeholder="选择成立日期"/></el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="注册资金" prop="REGCAPITAL">
+            <el-input id="REGCAPITAL" ref="REGCAPITAL" :disabled="true" v-model="pd.REGCAPITAL" maxlength="255" placeholder="这里输入注册资金..." title="注册资金"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="固定资产" prop="FIXED_ASSETS">
+            <el-input id="FIXED_ASSETS" ref="FIXED_ASSETS" :disabled="true" v-model="pd.FIXED_ASSETS" maxlength="255" placeholder="这里输入固定资产..." title="固定资产"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="年利润(万元)" prop="ANNUALPROFIT">
+            <el-input id="ANNUALPROFIT" ref="ANNUALPROFIT" :disabled="true" v-model="pd.ANNUALPROFIT" maxlength="255" placeholder="这里输入年利润(万元)..." title="年利润(万元)"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="年产值" prop="YEAR_OUTPUT_VALUE">
+            <el-input id="YEAR_OUTPUT_VALUE" ref="YEAR_OUTPUT_VALUE" :disabled="true" v-model="pd.YEAR_OUTPUT_VALUE" maxlength="255" placeholder="这里输入年产值..." title="年产值" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="企业经济类型" prop="ECO_TYPE">
+            <el-input :disabled="true" v-model="pd.ECO_TYPE_VAL" maxlength="255" placeholder="这里输入企业经济类型..." title="企业经济类型" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="隶属关系" prop="SUBORDINATION">
+            <el-input :disabled="true" v-model="pd.SUBORDINATION_VAL" maxlength="255" placeholder="这里输入隶属关系..." title="隶属关系" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="企业类型" prop="CORP_OF_TYPE">
+            <el-input :disabled="true" v-model="pd.CORP_OF_TYPE_VAL" maxlength="255" placeholder="这里输入企业类型..." title="企业类型" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="行业监管部门" prop="INDUSTRY_DEPARTMENT">
+            <el-input :disabled="true" v-model="pd.INDUSTRY_DEPARTMENT" maxlength="255" placeholder="这里输入行业监管部门..." title="行业监管部门" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="企业规模" prop="SCALE">
+            <el-input :disabled="true" v-model="pd.SCALE_VAL" maxlength="255" placeholder="这里输入企业规模..." title="企业规模" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="是否规模以上" prop="SCALE_TYPE">
+            <el-radio-group id="SCALE_TYPE" ref="SCALE_TYPE" :disabled="true" v-model="pd.SCALE_TYPE">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="经度/纬度" prop="LONGITUDE">
+            <el-input id="LONGITUDE" ref="LONGITUDE" :disabled="true" v-model="pd.jinweidu" maxlength="255" placeholder="这里输入纬度..." title="经度/纬度" />
+          </el-form-item>
+        </el-col>
+        <!-- <el-col :span="12">
+          <el-form-item label="纬度" prop="LATITUDE">
+            <el-input id="LATITUDE" ref="LATITUDE" :disabled="true" v-model="pd.LATITUDE" maxlength="255" placeholder="这里输入纬度..." title="纬度" />
+          </el-form-item>
+        </el-col> -->
+      </el-row>
+      <el-divider content-position="left">法定代表人信息</el-divider>
+
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="姓名" prop="LR_NAME">
+            <el-input id="LR_NAME" ref="LR_NAME" :disabled="true" v-model="pd.LR_NAME" maxlength="255" placeholder="这里输入法定代表人姓名..." title="法定代表人姓名"/>
+          </el-form-item>
+        </el-col><el-col :span="12">
+          <el-form-item label="手机号码" prop="LR_PHONE">
+            <el-input id="LR_PHONE" ref="LR_PHONE" :disabled="true" v-model="pd.LR_PHONE" maxlength="255" placeholder="这里输入法定代表人手机号..." title="法定代表人手机号"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-divider content-position="left">主要负责人信息</el-divider>
+
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="姓名" prop="CONTACTS">
+            <el-input id="CONTACTS" ref="CONTACTS" :disabled="true" v-model="pd.CONTACTS" maxlength="255" placeholder="这里输入主要负责人姓名..." title="主要负责人姓名"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="手机号码" prop="CONTACTS_PHONE">
+            <el-input id="CONTACTS_PHONE" ref="CONTACTS_PHONE" :disabled="true" v-model="pd.CONTACTS_PHONE" maxlength="255" placeholder="这里输入主要负责人手机号..." title="主要负责人手机号"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-divider content-position="left">安全负责人信息</el-divider>
+
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="姓名" prop="SAFETY_NAME">
+            <el-input id="SAFETY_NAME" ref="SAFETY_NAME" :disabled="true" v-model="pd.SAFETY_NAME" maxlength="255" placeholder="这里输入安全负责人信息..." title="安全负责人信息"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="职务" prop="SAFETY_POST">
+            <el-input id="SAFETY_POST" ref="SAFETY_POST" :disabled="true" v-model="pd.SAFETY_POST" maxlength="255" placeholder="这里输入安全负责人职务..." title="安全负责人职务"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="单位电话" prop="SAFETY_NUMBER">
+            <el-input id="SAFETY_NUMBER" ref="SAFETY_NUMBER" :disabled="true" v-model="pd.SAFETY_NUMBER" maxlength="255" placeholder="这里输入安全负责人单位电话..." title="安全负责人单位电话"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="手机号码" prop="SAFETY_PHONE">
+            <el-input id="SAFETY_PHONE" ref="SAFETY_PHONE" :disabled="true" v-model="pd.SAFETY_PHONE" maxlength="255" placeholder="这里输入安全负责人手机号码..." title="安全负责人手机号码"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-divider content-position="left">安全标准化</el-divider>
+
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="安全标准化等级" prop="AQ_BZ_LEVEL">
+            <el-select id="AQ_BZ_LEVEL" ref="AQ_BZ_LEVEL" :disabled="true" v-model="pd.AQ_BZ_LEVEL" style="width:100%" clearable placeholder="请选择安全标准化等级">
+              <el-input id="AQ_BZ_LEVEL" ref="AQ_BZ_LEVEL_VAL" :disabled="true" v-model="pd.AQ_BZ_NO" maxlength="255" placeholder="这里输入安全标准化等级..." title="安全标准化等级"/>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="安全标准化证书编号" prop="AQ_BZ_NO">
+            <el-input id="AQ_BZ_NO" ref="AQ_BZ_NO" :disabled="true" v-model="pd.AQ_BZ_NO" maxlength="255" placeholder="这里输入安全标准化证书编号..." title="安全标准化证书编号"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="安全标准化发证单位" prop="AQ_BZ_UNIT">
+            <el-input id="AQ_BZ_UNIT" ref="AQ_BZ_UNIT" :disabled="true" v-model="pd.AQ_BZ_UNIT" maxlength="255" placeholder="这里输入安全标准化发证单位..." title="安全标准化发证单位"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="安全标准化有效期" prop="AQ_BZ_TIME">
+            <el-input id="AQ_BZ_TIME" ref="AQ_BZ_TIME" :disabled="true" v-model="pd.AQ_BZ_TIME" maxlength="255" placeholder="这里输入安全标准化有效期..." title="安全标准化有效期"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-divider content-position="left">企业相关属性</el-divider>
+
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="有无职业卫生信息" prop="WHETHER_HYGIENE">
+            <el-radio-group id="WHETHER_HYGIENE" ref="WHETHER_HYGIENE" :disabled="true" v-model="pd.WHETHER_HYGIENE">
+              <el-radio :label="0">无</el-radio>
+              <el-radio :label="1">有</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="有无重大危险源" prop="WHETHER_HAZARDS">
+            <el-radio-group id="WHETHER_HAZARDS" ref="WHETHER_HAZARDS" :disabled="true" v-model="pd.WHETHER_HAZARDS">
+              <el-radio :label="0">无</el-radio>
+              <el-radio :label="1">有</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="是否有稀缺大型应急物资或设施" prop="WHETHER_SCARCE">
+            <el-radio-group id="WHETHER_SCARCE" ref="WHETHER_SCARCE" :disabled="true" v-model="pd.WHETHER_SCARCE">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="是否涉及危化品" prop="WHETHER_CHEMICALS">
+            <el-radio-group id="WHETHER_CHEMICALS" ref="WHETHER_CHEMICALS" :disabled="true" v-model="pd.WHETHER_CHEMICALS">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="有无特种设备" prop="WHETHER_SPECIALEQUIPMENT">
+            <el-radio-group id="WHETHER_SPECIALEQUIPMENT" ref="WHETHER_SPECIALEQUIPMENT" :disabled="true" v-model="pd.WHETHER_SPECIALEQUIPMENT">
+              <el-radio :label="0">无</el-radio>
+              <el-radio :label="1">有</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="有无特存种作业人员" prop="WHETHER_SPECIALPEOPLE">
+            <el-radio-group id="WHETHER_SPECIALPEOPLE" ref="WHETHER_SPECIALPEOPLE" :disabled="true" v-model="pd.WHETHER_SPECIALPEOPLE">
+              <el-radio :label="0">无</el-radio>
+              <el-radio :label="1">有</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="是否涉及煤气" prop="WHETHER_COALGAS">
+            <el-radio-group id="WHETHER_COALGAS" ref="WHETHER_COALGAS" :disabled="true" v-model="pd.WHETHER_COALGAS">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="是否属于消防重点单位" prop="WHETHER_FIRE">
+            <el-radio-group id="WHETHER_FIRE" ref="WHETHER_FIRE" :disabled="true" v-model="pd.WHETHER_FIRE">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="是否在有限空间作业" prop="WHETHER_CONFINED">
+            <el-radio-group id="WHETHER_CONFINED" ref="WHETHER_CONFINED" :disabled="true" v-model="pd.WHETHER_CONFINED">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="是否存在涉爆粉尘作业" prop="WHETHER_POWDER">
+            <el-radio-group id="WHETHER_POWDER" ref="WHETHER_POWDER" :disabled="true" v-model="pd.WHETHER_POWDER">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="是否涉及防雷防静电" prop="WHETHER_LIGHTNING">
+            <el-radio-group id="WHETHER_LIGHTNING" ref="WHETHER_LIGHTNING" :disabled="true" v-model="pd.WHETHER_LIGHTNING">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="是否持有放射源" prop="WHETHER_ACTINOGEN">
+            <el-radio-group id="WHETHER_ACTINOGEN" ref="WHETHER_ACTINOGEN" :disabled="true" v-model="pd.WHETHER_ACTINOGEN">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="是否涉及液氨制冷" prop="WHETHER_LIQUIDAMMONIA">
+            <el-radio-group id="WHETHER_LIQUIDAMMONIA" ref="WHETHER_LIQUIDAMMONIA" :disabled="true" v-model="pd.WHETHER_LIQUIDAMMONIA">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="是否涉及危化品管道" prop="WHETHER_PIPELINE">
+            <el-radio-group id="WHETHER_PIPELINE" ref="WHETHER_PIPELINE" :disabled="true" v-model="pd.WHETHER_PIPELINE">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+
+    <div class="heightt"/>
+    <div class="subdy-foot">
+      <el-row type="flex" justify="space-around" style="width:700px; margin:0 auto">
+        <el-button @click="goBack">返 回</el-button>
+
+      </el-row>
+    </div>
+
+  </div>
+</template>
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves' // waves directive
+export default {
+  components: { Pagination },
+  directives: { waves },
+  data() {
+    return {
+      listLoading: true,
+      pd: {},
+      corpInfoId: ''
+    }
+  },
+  created() {
+    this.corpInfoId = this.$parent.indexVal
+    if (this.corpInfoId) {
+      this.getCorpInfo(this.$parent.indexVal)
+    }
+  },
+  methods: {
+    // 获取列表
+    getCorpInfo(corpId) {
+      this.listLoading = true
+      requestFN(
+        '/corpinfo/goEdit',
+        { tm: new Date().getTime(),
+          CORPINFO_ID: corpId,
+          KEYWORDS: this.KEYWORDS
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.pd = data.pd
+        if (data.pd.PROVINCE_VAL) {
+          this.pd.shudiVal = data.pd.PROVINCE_VAL
+        }
+        if (data.pd.CITY_VAL) {
+          this.pd.shudiVal += '/' + data.pd.CITY_VAL
+        }
+        if (data.pd.COUNTRY_VAL) {
+          this.pd.shudiVal += '/' + data.pd.COUNTRY_VAL
+        }
+        if (data.pd.VILLAGE_VAL) {
+          this.pd.shudiVal += '/' + data.pd.VILLAGE_VAL
+        }
+        if (data.pd.CORP_TYPE_VAL) {
+          this.pd.corpTypeVal = data.pd.CORP_TYPE_VAL
+        }
+        if (data.pd.CORP_TYPE2_VAL) {
+          this.pd.corpTypeVal += '/' + data.pd.CORP_TYPE2_VAL
+        }
+        if (data.pd.CORP_TYPE3_VAL) {
+          this.pd.corpTypeVal += '/' + data.pd.CORP_TYPE3_VAL
+        }
+        if (data.pd.CORP_TYPE4_VAL) {
+          this.pd.corpTypeVal += '/' + data.pd.CORP_TYPE4_VAL
+        }
+        this.pd.jinweidu = data.pd.LONGITUDE || '0'
+        this.pd.jinweidu += '-' + data.pd.LATITUDE || '0'
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    // 返回
+    goBack() {
+      this.$parent.activeName = 'IndexList'
+      this.$parent.indexVal = ''
+      this.corpInfoId = ''
+      if (this.$refs.form !== undefined) {
+        this.$refs.form.resetFields()
+        this.resetForm()
+      }
+    }
+  }
+}
+
+</script>
+<style scoped>
+.el-divider__text{
+  color: #2a90d2;
+  font-size: 15px;
+}
+.el-radio-group{
+  margin-left: 20px;
+}
+</style>
diff --git a/src/views/presystem/homepagepicture/index.vue b/src/views/presystem/homepagepicture/index.vue
new file mode 100644
index 0000000..5e040b9
--- /dev/null
+++ b/src/views/presystem/homepagepicture/index.vue
@@ -0,0 +1,25 @@
+<template>
+  <div class="">
+    <transition name="fade" mode="out-in">
+      <component :is="activeName"/>
+    </transition>
+
+  </div>
+</template>
+<script>
+import IndexList from './components/indexList'
+import IndexAdd from './components/indexAdd'
+import IndexView from './components/index_view'
+export default {
+  components: { IndexList, IndexAdd, IndexView },
+  data() {
+    return { //  src/views/corpInfo/examine/index.vue
+      activeName: 'IndexList'
+    }
+  },
+  methods: {
+
+  }
+}
+
+</script>
diff --git a/src/views/presystem/logs/index.vue b/src/views/presystem/logs/index.vue
new file mode 100644
index 0000000..82c3b38
--- /dev/null
+++ b/src/views/presystem/logs/index.vue
@@ -0,0 +1,150 @@
+<template>
+  <div class="app-container">
+    <div class="filter-container">
+      <el-input v-model="KEYWORDS" placeholder="搜索" class="filter-item" style="width: 200px;"/>
+      <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="getQuery">
+        搜索
+      </el-button>
+    </div>
+    <el-table
+      ref="multipleTable"
+      :data="varList"
+      :header-cell-style="{
+        'font-weight': 'bold',
+        'color': '#000'
+      }"
+      tooltip-effect="dark"
+      border
+      fit
+      highlight-current-row
+    >
+      <el-table-column
+        type="selection"
+        width="55"
+        align="center"/>
+      <el-table-column type="index" label="序号" width="50" align="center" />
+      <el-table-column prop="USERNAME" label="用户名" />
+      <el-table-column prop="CONTENT" label="事件" />
+      <el-table-column prop="CZTIME" label="操作时间"/>
+      <el-table-column label="操作" align="center" width="200">
+        <template slot-scope="{row}">
+          <el-button type="danger" icon="el-icon-delete" size="mini" @click="handleDelete(row.FHLOG_ID)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-btn-group">
+      <div>
+        <template >
+          <el-button type="danger" icon="el-icon-delete" plain @click="batchDel">删除</el-button>
+        </template>
+      </div>
+      <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
+    </div>
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves' // waves directive
+export default {
+  components: { Pagination },
+  directives: { waves },
+  data() {
+    return {
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      total: 0,
+      varList: [],
+      KEYWORDS: ''
+    }
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    getList() {
+      this.listLoading = true
+      requestFN(
+        '/fhlog/list?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
+        {
+          KEYWORDS: this.KEYWORDS
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.varList = data.varList
+        this.total = data.page.totalResult
+        this.pd = data.pd
+      })
+        .catch((e) => {
+          this.listLoading = false
+        })
+    },
+    handleDelete(id) {
+      this.$confirm('确定要删除吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/fhlog/delete',
+          {
+            FHLOG_ID: id
+          }
+        ).then((data) => {
+          if (data.result == 'success') {
+            this.listLoading = false
+            this.getList()
+          }
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    getQuery() {
+      this.getList()
+      this.$refs.multipleTable.clearSelection()
+    },
+    batchDel() {
+      const _selectData = this.$refs.multipleTable.selection
+      if (_selectData == null || _selectData.length == 0) {
+        this.$message({
+          message: '请选中要删除的项...',
+          type: 'error'
+        })
+        return false
+      }
+      const ids = _selectData.map((item, index) => {
+        return item.FHLOG_ID
+      }).join(',')
+      this.$confirm('确定要删除选中的数据吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/fhlog/deleteAll',
+          {
+            DATA_IDS: ids
+          }
+        ).then(() => {
+          this.listLoading = false
+          this.varList = []
+          this.listQuery.page = 1
+          this.$refs.multipleTable.clearSelection()
+          this.getList()
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    }
+  }
+}
+</script>
+
diff --git a/src/views/presystem/menu/index.vue b/src/views/presystem/menu/index.vue
new file mode 100644
index 0000000..e69de29
diff --git a/src/views/presystem/menus/index.vue b/src/views/presystem/menus/index.vue
new file mode 100644
index 0000000..91fbf42
--- /dev/null
+++ b/src/views/presystem/menus/index.vue
@@ -0,0 +1,407 @@
+<template>
+  <div class="icons-container">
+    <el-container>
+      <el-aside width="300px" style="background-color:#fff">
+        <el-input
+          v-model="filterText"
+          placeholder="输入关键字进行过滤"
+          style="margin:10px 0"/>
+        <el-tree
+          v-loading="treeLoading"
+          ref="tree"
+          :data="treeData"
+          :props="defaultProps"
+          :filter-node-method="filterNode"
+          class="filter-tree"
+          @node-click="handleNodeClick"/>
+      </el-aside>
+      <el-main>
+        <div class="filter-btn-group">
+          <div>
+            <el-button v-show="add" type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button>
+            <el-button v-show="MENU_ID != '0'" icon="el-icon-arrow-left" @click="getList(pd.PARENT_ID)">返回</el-button>
+          </div>
+        </div>
+        <el-table
+          v-loading="listLoading"
+          ref="multipleTable"
+          :data="varList"
+          :header-cell-style="{
+            'font-weight': 'bold',
+            'color': '#000'
+          }"
+          tooltip-effect="dark"
+          border
+          fit
+          highlight-current-row
+        >
+          <el-table-column type="index" prop="numb" label="序号" width="50" align="center" />
+          <el-table-column label="名称" >
+            <template slot-scope="{row}">
+              <div class="link-type" @click="getList(row.menu_ID)">
+                <svg-icon :icon-class="row.menu_ICON" class-name="disabled" /> {{ row.menu_NAME }} <i class="el-icon-arrow-right" />
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column label="资源路径">
+            <template slot-scope="{row}">
+              {{ row.menu_URL == '#' ? '&nbsp;&nbsp;&nbsp;&nbsp;(无)': row.menu_URL }}
+            </template>
+          </el-table-column>
+          <el-table-column label="权限标识">
+            <template slot-scope="{row}">
+              {{ '' == row.shiro_KEY || null == row.shiro_KEY ?'(无)': row.shiro_KEY }}
+            </template>
+          </el-table-column>
+          <el-table-column label="状态" width="100" >
+            <template slot-scope="{row}">
+              <template v-if="row.menu_STATE==1">
+                <el-tag size="mini">
+                  显示
+                </el-tag>
+              </template>
+              <template v-else>
+                <el-tag size="mini" type="info">
+                  隐藏
+                </el-tag>
+              </template>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" align="center" width="300">
+            <template slot-scope="{row}">
+              <el-button v-show="MENU_ID == '0' && edit" type="success" icon="el-icon-picture-outline" size="mini" @click="handleEditIcon(row.menu_ID)">图标</el-button>
+              <el-button v-show="edit" type="primary" icon="el-icon-edit" size="mini" @click="handleEdit(row.menu_ID)">编辑</el-button>
+              <el-button v-show="del" type="danger" icon="el-icon-delete" size="mini" @click="handleDelete(row.menu_ID, row.menu_NAME)">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+
+      </el-main>
+    </el-container>
+
+    <el-dialog :visible.sync="dialogFormAdd" :title="dialogType==='edit'?'修改':'新增'" width="600px">
+      <el-tag class="mark_up" size="medium">上级菜单:{{ MENU_ID == '0' ?'(无) 此项为顶级菜单':pds.MENU_NAME }}</el-tag>
+      <el-form ref="form" :model="form" :rules="rules" label-width="110px" style="width: 500px;">
+        <el-form-item label="菜单名称" prop="MENU_NAME">
+          <el-input v-model="form.MENU_NAME" placeholder="这里输入菜单名称..." />
+        </el-form-item>
+        <el-form-item label="菜单链接">
+          <el-input v-model="form.MENU_URL" placeholder="这里输入菜单链接..." />
+        </el-form-item>
+        <el-form-item label="组件路径">
+          <el-input v-model="form.COMPONENT" placeholder="这里输入组件路径..." />
+        </el-form-item>
+        <el-form-item label="权限标识" prop="SHIRO_KEY">
+          <el-input v-model="form.SHIRO_KEY" placeholder="这里输入权限标识..." />
+        </el-form-item>
+        <el-form-item v-show="MENU_ID == '0'" label="显示模式" prop="SHOW_MODEL">
+          <el-input v-model="form.SHOW_MODEL" placeholder="这里输入显示模式..." />
+        </el-form-item>
+        <el-form-item label="菜单序号" prop="MENU_ORDER">
+          <el-input v-model.number="form.MENU_ORDER" placeholder="这里输入菜单序号..." />
+        </el-form-item>
+        <el-form-item label="菜单状态">
+          <el-radio-group v-model="form.MENU_STATE">
+            <el-radio :label="1">显示</el-radio>
+            <el-radio :label="0">隐藏</el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormAdd = false">取 消</el-button>
+        <el-button type="primary" @click="confirm">确 定</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :visible.sync="dialogEditIcon" title="编辑图标" width="960px">
+      <div class="grid">
+        <div v-for="item of svgIcons" :key="item">
+          <div class="icon-item" @click="confirmIcon(item)">
+            <svg-icon :icon-class="item" class-name="disabled" />
+            <span>{{ item }}</span>
+          </div>
+        </div>
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogEditIcon = false">取 消</el-button>
+        <!--        <el-button type="primary" @click="confirm">确 定</el-button>-->
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+
+import svgIcons from './svg-icons'
+import { requestFN } from '@/utils/request'
+export default {
+  name: 'Icons',
+  data() {
+    return {
+      listLoading: false,			// 加载状态
+      treeLoading: false,
+      svgIcons,
+      radio: 1,
+      dialogFormAdd: false,
+      dialogEditIcon: false,
+      dialogType: 'add',
+      // 树形菜单
+      filterText: '',
+      treeData: [],
+      defaultProps: {
+        children: 'nodes',
+        label: 'name'
+      },
+      // 列表
+      varList: [],	// list
+      MENU_ID: '0',	// 主键ID
+      pd: [],
+      form: {
+        MENU_ID: '',	 // 主键ID
+        MENU_TYPE: '1', // 类型
+        MENU_STATE: 1,	 // 状态
+        PARENT_ID: '',	 // 上级ID
+        MENU_NAME: '',	 // 菜单名称
+        MENU_URL: '',	 // 菜单链接
+        COMPONENT: '', // 组件路径
+        SHIRO_KEY: '(无)', // 权限标识
+        SHOW_MODEL: '', // 显示模式
+        MENU_ORDER: ''	 // 菜单序号
+      },
+      pds: [],
+      add: false,
+      del: false,
+      edit: false,
+      rules: {
+        MENU_NAME: [
+          { required: true, message: '菜单名称不能为空', trigger: 'change' },
+          { min: 2, max: 30, message: '长度在 2 到 30 个字符', trigger: 'blur' }
+        ],
+        MENU_ORDER: [
+          { required: true, message: '菜单序号不能为空', trigger: 'change' },
+          { type: 'number', message: '菜单序号必须为数字' }
+        ]
+      }
+    }
+  },
+  watch: {
+    filterText(val) {
+      this.$refs.tree.filter(val)
+    }
+  },
+  created() {
+    this.getTreeList()
+    this.getList(this.MENU_ID)
+  },
+  methods: {
+    filterNode(value, data) {
+      if (!value) return true
+      return data.name.indexOf(value) !== -1
+    },
+    handleNodeClick(node, data, value) {
+      this.handleEdit(node.id)
+    },
+    handleAdd() {
+      this.dialogType = 'add'
+      this.resetForm()
+      requestFN(
+        '/menu/toAdd',
+        {
+          MENU_ID: this.MENU_ID
+        }
+      ).then((data) => {
+        this.form.PARENT_ID = this.MENU_ID
+        this.pds = data.pds	|| []					// 父级菜单信息
+      }).catch((e) => {
+
+      })
+      this.dialogFormAdd = true
+    },
+    handleEdit(MENU_ID) {
+      this.dialogType = 'edit'
+      requestFN(
+        '/menu/toEdit',
+        {
+          MENU_ID: MENU_ID
+        }
+      ).then((data) => {
+        this.form = Object.assign({}, data.pd) // copy obj
+        this.form.MENU_ID = MENU_ID
+        this.form.PARENT_ID = data.pd.PARENT_ID
+        this.pds = data.pds || []						// 父级菜单信息
+      }).catch((e) => {
+        this.listLoading = false
+      })
+      this.dialogFormAdd = true
+    },
+    confirm() {
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.listLoading = true
+          requestFN(
+            '/menu/' + this.dialogType,
+            this.form
+          ).then((data) => {
+            this.listLoading = false
+            this.dialogFormAdd = false
+            this.getTreeList()
+            this.getList(this.MENU_ID)
+          }).catch((e) => {
+            this.listLoading = false
+          })
+        } else {
+          return false
+        }
+      })
+    },
+    handleDelete(id, name) {
+      this.$confirm('确定要删除[' + name + ']吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/menu/delete',
+          {
+            MENU_ID: id
+          }
+        ).then(() => {
+          this.listLoading = false
+          this.getTreeList()
+          this.getList(this.MENU_ID)
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    handleEditIcon(MENU_ID) {
+      this.dialogEditIcon = true
+      this.form.MENU_ID = MENU_ID
+    },
+    confirmIcon(symbol) {
+      const MENU_ICON = symbol
+      this.listLoading = true
+      requestFN(
+        '/menu/editicon',
+        {
+          MENU_ID: this.form.MENU_ID,
+          MENU_ICON: MENU_ICON
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.dialogEditIcon = false
+        this.getList(this.MENU_ID)
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    generateIconCode(symbol) {
+      return `<svg-icon icon-class="${symbol}" />`
+    },
+    getTreeList() {
+      this.treeLoading = true
+      requestFN(
+        '/menu/listAllMenu',
+        {
+
+        }
+      ).then((data) => {
+        this.treeLoading = false
+        this.treeData = JSON.parse(data.zTreeNodes)
+      }).catch((e) => {
+        this.treeLoading = false
+      })
+    },
+    getList(MENU_ID) {
+      this.listLoading = true
+      this.varList = []
+      this.MENU_ID = MENU_ID
+      requestFN(
+        '/menu/list',
+        {
+          MENU_ID: this.MENU_ID
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.varList = data.menuList
+        this.pd = data.pd || []
+        this.hasButton()
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    resetForm() {
+      this.form = {
+        MENU_ID: '',	 // 主键ID
+        MENU_TYPE: '1', // 类型
+        MENU_STATE: 1,	 // 状态
+        PARENT_ID: '',	 // 上级ID
+        MENU_NAME: '',	 // 菜单名称
+        MENU_URL: '',	 // 菜单链接
+        COMPONENT: '', // 组件路径
+        SHIRO_KEY: '(无)', // 权限标识
+        SHOW_MODEL: '', // 显示模式
+        MENU_ORDER: ''	 // 菜单序号
+      }
+    },
+    hasButton: function() {
+      var keys = 'menu:add,menu:del,menu:edit'
+      requestFN(
+        '/head/hasButton',
+        {
+          keys: keys
+        }
+      ).then((data) => {
+        this.add = data.menufhadminadd
+        this.del = data.menufhadmindel
+        this.edit = data.menufhadminedit
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.el-dialog__body{
+  padding: 0;
+  background: red;
+}
+.mark_up{
+  margin-bottom:20px;
+  margin-left: 110px;
+}
+.icons-container {
+  margin: 0;
+  overflow: hidden;
+
+  .grid {
+    position: relative;
+    display: grid;
+    grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
+  }
+
+  .icon-item {
+    margin-bottom: 10px;
+    height: 70px;
+    text-align: center;
+    width: 100px;
+    float: left;
+    font-size: 24px;
+    color: #24292e;
+    cursor: pointer;
+    span {
+    display: block;
+    font-size: 14px;
+    margin-top: 10px;
+    }
+
+  }
+
+  .disabled {
+    pointer-events: none;
+  }
+}
+</style>
diff --git a/src/views/presystem/menus/svg-icons.js b/src/views/presystem/menus/svg-icons.js
new file mode 100644
index 0000000..b538086
--- /dev/null
+++ b/src/views/presystem/menus/svg-icons.js
@@ -0,0 +1,10 @@
+const req = require.context('../../../icons/svg', false, /\.svg$/)
+const requireAll = requireContext => requireContext.keys()
+
+const re = /\.\/(.*)\.svg/
+
+const svgIcons = requireAll(req).map(i => {
+  return i.match(re)[1]
+})
+
+export default svgIcons
diff --git a/src/views/presystem/noticetemplate/components/indexAdd.vue b/src/views/presystem/noticetemplate/components/indexAdd.vue
new file mode 100644
index 0000000..b4b83ed
--- /dev/null
+++ b/src/views/presystem/noticetemplate/components/indexAdd.vue
@@ -0,0 +1,162 @@
+<template>
+  <div>
+    <el-form ref="form" :rules="rules" :model="form" label-position="right" label-width="160px" style="padding:10px 40px">
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="名称" prop="NAME">
+            <el-input v-model="form.NAME" type="text" placeholder="这里输入名称"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="编码" prop="BIANMA">
+            <el-input v-model="form.BIANMA" placeholder="这里输入编码"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="描述" prop="REPRESENT">
+            <el-input v-model="form.REPRESENT" type="text" placeholder="描述信息"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="内容" prop="CONTENT">
+            <el-input v-model="form.CONTENT" type="text" placeholder="这里输入内容"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+
+    <div class="heightt"/>
+    <div class="subdy-foot">
+      <el-row style="text-align: center">
+        <el-button @click="goBack">取 消</el-button>
+        <el-button type="primary" @click="confirm">确 定</el-button>
+      </el-row>
+    </div>
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import { requestFN } from '@/utils/request'
+// import { upload } from '@/utils/upload'
+import waves from '@/directive/waves' // waves directive
+import SelectTree from '@/components/SelectTree'
+export default {
+  components: { Pagination, SelectTree },
+  directives: { waves },
+  data() {
+    return {
+      config: config,
+      dialogVisible: false,
+      dialogImageUrl: '',
+      certificate_files: [],
+      hImgs: [],
+      form: {
+        NAME: '',
+        BIANMA: '',
+        REPRESENT: '',
+        CONTENT: ''
+      },
+      rules: {
+        NAME: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
+        BIANMA: [{ required: true, message: '编码不能为空', trigger: 'blur' }],
+        CONTENT: [{ required: true, message: '内容不能为空', trigger: 'blur' }]
+      },
+      loadingMap: true,
+      BMap: '',
+      map: '',
+      showMap: false,
+      addressKeyword: '',
+      pointLngLat: '',
+      zoom: 16,
+      location: '',
+      lng: '',
+      lat: '',
+      dialogFormEdit: false,
+      qyztList: [],
+      industryList: [],
+      economicsList: [],
+      scaleList: [],
+      areaprops: {
+        lazy: true,
+        lazyLoad(node, resolve) {
+          setTimeout(() => {
+            const areaLeven = node.level
+            var areaParID = ''
+            if (areaLeven == '0') {
+              areaParID = 'e725d2a91b8248f4b8f49889038df7de'
+            } else {
+              areaParID = node.data.id
+            }
+            requestFN(
+              'dictionaries/getLevels',
+              { DICTIONARIES_ID: areaParID }
+            ).then((data) => {
+              const nodes = data.list.map(item => ({
+                value: item.BIANMA,
+                label: item.NAME.toString(),
+                id: item.DICTIONARIES_ID.toString(),
+                leaf: areaLeven > 1
+              }))
+              resolve(nodes) // 通过调用resolve将子节点数据返回,通知组件数据加载完成
+            }).catch((e) => {})
+          }, 500)
+        }
+      }
+    }
+  },
+  created() {
+    this.$parent.indexVal && this.getData()
+  },
+  methods: {
+    // 保存
+    confirm() {
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          requestFN(
+            this.$parent.indexVal ? '/noticetemplate/edit' : '/noticetemplate/add',
+            {
+              ...this.form
+            }
+          ).then((data) => {
+            this.$message.success('新建成功')
+            this.goBack()
+          }).catch((e) => { })
+        } else {
+          return false
+        }
+      })
+    },
+    getData() {
+      requestFN(
+        '/noticetemplate/goEdit',
+        {
+          NOTICETEMPLATE_ID: this.$parent.indexVal
+        }
+      ).then((data) => {
+        this.form = data.pd
+      }).catch((e) => { })
+    },
+    // 返回
+    goBack() {
+      this.$parent.activeName = 'IndexList'
+    },
+    setPoint() {
+      this.form.LATITUDE = this.lat
+      this.form.LONGITUDE = this.lng
+      this.dialogFormEdit = false
+      this.form.jinweidu = this.lat + '-' + this.lng
+    }
+  }
+}
+
+</script>
+<style scoped>
+    .el-divider__text{
+        color: #2a90d2;
+        font-size: 15px;
+    }
+    .el-radio-group{
+        margin-left: 20px;
+    }
+</style>
diff --git a/src/views/presystem/noticetemplate/components/indexList.vue b/src/views/presystem/noticetemplate/components/indexList.vue
new file mode 100644
index 0000000..8844d6c
--- /dev/null
+++ b/src/views/presystem/noticetemplate/components/indexList.vue
@@ -0,0 +1,261 @@
+<template>
+  <div class="app-container">
+    <div class="hidden-container">
+      <div class="hidden-right">
+        <el-button v-waves class="filter-item" type="primary" icon="el-icon-plus" @click="handleAdd">
+          新建模板
+        </el-button>
+      </div>
+    </div>
+    <el-table
+      v-loading="listLoading"
+      ref="multipleTable"
+      :data="varList"
+      :row-key="getRowKey"
+      :header-cell-style="{
+        'font-weight': 'bold',
+        'color': '#000'
+      }"
+      tooltip-effect="dark"
+      border
+      fit
+      highlight-current-row
+    >
+      <el-table-column
+        :reserve-selection="true"
+        type="selection"
+        width="55"
+        align="center"/>
+      <el-table-column type="index" label="序号" width="50" align="center" />
+      <el-table-column prop="NAME" label="模板名称" />
+      <el-table-column prop="BIANMA" label="编码" />
+      <el-table-column prop="REPRESENT" label="描述" />
+      <el-table-column prop="CONTENT" label="内容" />
+      <el-table-column label="操作" align="left" width="250">
+        <template slot-scope="{row}">
+          <el-button type="primary" icon="el-icon-edit" size="mini" @click="handleEdit(row.NOTICETEMPLATE_ID)">修改</el-button>
+          <el-button type="primary" icon="el-icon-edit" size="mini" @click="deleteCertificate(row.NOTICETEMPLATE_ID)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-btn-group">
+      <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
+    </div>
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves' // waves directive
+export default {
+  components: { Pagination },
+  directives: { waves },
+  data() {
+    return {
+      listLoading: true,
+      add: true,
+      del: true,
+      edit: true,
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      searchForm: {
+        CORP_NAME: '',
+        PROVINCE: '',
+        CITY: '',
+        CORP_STATE: '',
+        CREATTIME: ''
+      },
+      total: 0,
+      varList: [],
+      qyztList: [],
+      industryList: [],
+      countryList: [],
+      villageList: [],
+      CITY_CODE: '',
+      COUNTRY: '',
+      VILLAGE: '',
+      config: config,
+      dialogFormEdit: false,
+      rules: {
+        CORP_NAME: [{ required: true, message: '分公司名称不能为空', trigger: 'blur' }],
+        NEWCORP_NAME: [{ required: true, message: '新分公司名称不能为空', trigger: 'blur' }],
+        PASSWORD: [{ required: true, message: '分公司密码不能为空', trigger: 'blur' }]
+      },
+      updateBranchNameForm: {
+        CORPINFO_ID: '',
+        CORP_NAME: '',
+        NEWCORP_NAME: '',
+        PASSWORD: ''
+      }
+    }
+  },
+  created() {
+    this.getList()
+    this.getDicList('qyztList', '07c2674470c1498ba1ebd74906b3b518')
+    this.getDicList('industryList', 'f2598ba72e864eadabf0ca4b664d26b9')
+  },
+  methods: {
+    getRowKey(row) {
+      return row.CORPINFO_ID
+    },
+    // 搜索
+    getQuery() {
+      this.getList()
+    },
+    imgurl(img) {
+      return config.fileUrl + img
+      // eslint-disable-next-line no-unreachable
+      console.log(config.fileUrl + img)
+    },
+    // 获取列表
+    getList() {
+      this.varList = []
+      this.listLoading = true
+      requestFN(
+        '/noticetemplate/list?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
+        { ...this.form }
+      ).then((data) => {
+        this.listLoading = false
+        this.varList = data.varList
+        this.total = data.page.totalResult
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    // 添加
+    handleAdd() {
+      this.$parent.activeName = 'IndexAdd'
+      this.$parent.indexVal = ''
+    },
+    // 修改
+    handleEdit(ID) {
+      this.$parent.activeName = 'IndexAdd'
+      this.$parent.indexVal = ID
+    },
+    // 判断按钮权限,用于是否显示按钮
+    hasButton: function() {
+      var keys = 'corpinfo:add,corpinfo:del,corpinfo:edit,toExcel'
+      requestFN(
+        '/head/hasButton',
+        {
+          keys: keys
+        }
+      ).then((data) => {
+        this.add = data.corpinfofhadminadd		// 新增权限
+        this.del = data.corpinfofhadmindel		// 删除权限
+        this.edit = data.corpinfofhadminedit	// 修改权限
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    goKeyReset() {
+      this.searchForm = {
+        CORP_NAME: '',
+        PROVINCE: '',
+        CITY: '',
+        CORP_STATE: '',
+        CREATTIME: ''
+      }
+      this.getList()
+    },
+    resetPwd(id) {
+      this.$confirm('确定要重置选中的密码吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/corpinfo/resetPwd',
+          {
+            CORPINFO_ID: id
+          }
+        ).then(() => {
+          this.$message({
+            message: '重置成功',
+            type: 'success'
+          })
+          this.listLoading = false
+          this.varList = []
+          this.listQuery.page = 1
+          this.getList()
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    // 获取数据字典
+    getDicList(list, DICTIONARIES_ID) {
+      requestFN(
+        '/dictionaries/getLevels',
+        {
+          DICTIONARIES_ID
+        }
+      ).then((data) => {
+        this[list] = data.list
+      }).catch((e) => {
+      })
+    },
+    translate(list, id) {
+      for (let i = 0; i < list.length; i++) {
+        if (list[i].BIANMA === id || list[i].DICTIONARIES_ID === id) {
+          return list[i].NAME
+        }
+      }
+    },
+    deleteCertificate(index) {
+      this.$confirm('确定要删除吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        requestFN(
+          '/noticetemplate/delete',
+          {
+            NOTICETEMPLATE_ID: index
+          }
+        ).then(() => {
+          this.$message({
+            message: '删除成功',
+            type: 'success'
+          })
+          this.getList()
+        }).catch((e) => {
+        })
+      }).catch(() => {
+      })
+    },
+    showBranchName(CORPINFO_ID, CORP_NAME) {
+      this.$refs.form && this.$refs.form.resetFields()
+      this.dialogFormEdit = true
+      this.updateBranchNameForm.CORPINFO_ID = CORPINFO_ID
+      this.updateBranchNameForm.CORP_NAME = CORP_NAME
+    },
+    updateBranchName() {
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.listLoading = true
+          requestFN(
+            '/corpinfo/editname',
+            {
+              ...this.updateBranchNameForm
+            }
+          ).then((data) => {
+            this.$message.success('修改成功')
+            this.listLoading = false
+            this.varList = []
+            this.listQuery.page = 1
+            this.getList()
+          }).catch((e) => { this.listLoading = false })
+        } else {
+          return false
+        }
+      })
+    }
+  }
+}
+</script>
diff --git a/src/views/presystem/noticetemplate/components/index_view.vue b/src/views/presystem/noticetemplate/components/index_view.vue
new file mode 100644
index 0000000..c17d5c5
--- /dev/null
+++ b/src/views/presystem/noticetemplate/components/index_view.vue
@@ -0,0 +1,444 @@
+<template>
+  <div>
+    <el-form label-position="right" label-width="160px" style="padding:10px 40px">
+      <el-divider content-position="left">基本信息</el-divider>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="企业名称" prop="CORP_NAME">
+            <el-input id="CORP_NAME" ref="CORP_NAME" :disabled="true" v-model="pd.CORP_NAME" maxlength="2000" placeholder="这里输入企业名称..." title="企业名称"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="登录账号">
+            <el-input id="LOGIN_USER_ID" :disabled="true" v-model="pd.logingUserName" maxlength="255" placeholder="这里输入登录账号..." title="登录账号"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="属地" prop="shudi">
+            <el-input id="shudiVal" ref="shudiVal" :disabled="true" v-model="pd.shudiVal" maxlength="255" placeholder="请选择省市县..." title="请选择省市县"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="企事业单位注册地址" prop="ADDRESS">
+            <el-input id="ADDRESS" ref="ADDRESS" :disabled="true" v-model="pd.ADDRESS" maxlength="255" placeholder="企事业单位注册地址..." title="企事业单位注册地址"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="企事业单位经营地址" prop="ADDRESS_BUSINESS">
+            <el-input id="ADDRESS_BUSINESS" ref="ADDRESS_BUSINESS" :disabled="true" v-model="pd.ADDRESS_BUSINESS" maxlength="255" placeholder="这里输入企事业单位经营地址..." title="企事业单位经营地址"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="企事业单位办公地址" prop="ADDRESS_OFFICE">
+            <el-input id="ADDRESS_OFFICE" ref="ADDRESS_OFFICE" :disabled="true" v-model="pd.ADDRESS_OFFICE" maxlength="255" placeholder="这里输入企事业单位办公地址..." title="企事业单位办公地址"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="统一社会信用代码" prop="CODE">
+            <el-input id="code" ref="CODE" :disabled="true" v-model="pd.CODE" maxlength="255" placeholder="这里输入统一社会信用代码..." title="统一社会信用代码"/>
+          </el-form-item>
+        </el-col><el-col :span="12">
+          <el-form-item label="企业状态" prop="CORP_STATE">
+            <el-input :disabled="true" v-model="pd.CORP_STATE_VAL" maxlength="255" placeholder="这里输入企业状态.." title="企业状态"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="国民经济行业分类" prop="CORP_TYPE">
+            <el-input :disabled="true" v-model="pd.corpTypeVal" maxlength="255" placeholder="国民经济行业分类.." title="国民经济行业分类"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="成立日期" prop="CREATE_DATE">
+          <el-date-picker id="CREATE_DATE" ref="CREATE_DATE" :disabled="true" v-model="pd.CREATE_DATE" style="width: 100%" type="date" placeholder="选择成立日期"/></el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="注册资金" prop="REGCAPITAL">
+            <el-input id="REGCAPITAL" ref="REGCAPITAL" :disabled="true" v-model="pd.REGCAPITAL" maxlength="255" placeholder="这里输入注册资金..." title="注册资金"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="固定资产" prop="FIXED_ASSETS">
+            <el-input id="FIXED_ASSETS" ref="FIXED_ASSETS" :disabled="true" v-model="pd.FIXED_ASSETS" maxlength="255" placeholder="这里输入固定资产..." title="固定资产"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="年利润(万元)" prop="ANNUALPROFIT">
+            <el-input id="ANNUALPROFIT" ref="ANNUALPROFIT" :disabled="true" v-model="pd.ANNUALPROFIT" maxlength="255" placeholder="这里输入年利润(万元)..." title="年利润(万元)"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="年产值" prop="YEAR_OUTPUT_VALUE">
+            <el-input id="YEAR_OUTPUT_VALUE" ref="YEAR_OUTPUT_VALUE" :disabled="true" v-model="pd.YEAR_OUTPUT_VALUE" maxlength="255" placeholder="这里输入年产值..." title="年产值" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="企业经济类型" prop="ECO_TYPE">
+            <el-input :disabled="true" v-model="pd.ECO_TYPE_VAL" maxlength="255" placeholder="这里输入企业经济类型..." title="企业经济类型" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="隶属关系" prop="SUBORDINATION">
+            <el-input :disabled="true" v-model="pd.SUBORDINATION_VAL" maxlength="255" placeholder="这里输入隶属关系..." title="隶属关系" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="企业类型" prop="CORP_OF_TYPE">
+            <el-input :disabled="true" v-model="pd.CORP_OF_TYPE_VAL" maxlength="255" placeholder="这里输入企业类型..." title="企业类型" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="行业监管部门" prop="INDUSTRY_DEPARTMENT">
+            <el-input :disabled="true" v-model="pd.INDUSTRY_DEPARTMENT" maxlength="255" placeholder="这里输入行业监管部门..." title="行业监管部门" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="企业规模" prop="SCALE">
+            <el-input :disabled="true" v-model="pd.SCALE_VAL" maxlength="255" placeholder="这里输入企业规模..." title="企业规模" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="是否规模以上" prop="SCALE_TYPE">
+            <el-radio-group id="SCALE_TYPE" ref="SCALE_TYPE" :disabled="true" v-model="pd.SCALE_TYPE">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="经度/纬度" prop="LONGITUDE">
+            <el-input id="LONGITUDE" ref="LONGITUDE" :disabled="true" v-model="pd.jinweidu" maxlength="255" placeholder="这里输入纬度..." title="经度/纬度" />
+          </el-form-item>
+        </el-col>
+        <!-- <el-col :span="12">
+          <el-form-item label="纬度" prop="LATITUDE">
+            <el-input id="LATITUDE" ref="LATITUDE" :disabled="true" v-model="pd.LATITUDE" maxlength="255" placeholder="这里输入纬度..." title="纬度" />
+          </el-form-item>
+        </el-col> -->
+      </el-row>
+      <el-divider content-position="left">法定代表人信息</el-divider>
+
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="姓名" prop="LR_NAME">
+            <el-input id="LR_NAME" ref="LR_NAME" :disabled="true" v-model="pd.LR_NAME" maxlength="255" placeholder="这里输入法定代表人姓名..." title="法定代表人姓名"/>
+          </el-form-item>
+        </el-col><el-col :span="12">
+          <el-form-item label="手机号码" prop="LR_PHONE">
+            <el-input id="LR_PHONE" ref="LR_PHONE" :disabled="true" v-model="pd.LR_PHONE" maxlength="255" placeholder="这里输入法定代表人手机号..." title="法定代表人手机号"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-divider content-position="left">主要负责人信息</el-divider>
+
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="姓名" prop="CONTACTS">
+            <el-input id="CONTACTS" ref="CONTACTS" :disabled="true" v-model="pd.CONTACTS" maxlength="255" placeholder="这里输入主要负责人姓名..." title="主要负责人姓名"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="手机号码" prop="CONTACTS_PHONE">
+            <el-input id="CONTACTS_PHONE" ref="CONTACTS_PHONE" :disabled="true" v-model="pd.CONTACTS_PHONE" maxlength="255" placeholder="这里输入主要负责人手机号..." title="主要负责人手机号"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-divider content-position="left">安全负责人信息</el-divider>
+
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="姓名" prop="SAFETY_NAME">
+            <el-input id="SAFETY_NAME" ref="SAFETY_NAME" :disabled="true" v-model="pd.SAFETY_NAME" maxlength="255" placeholder="这里输入安全负责人信息..." title="安全负责人信息"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="职务" prop="SAFETY_POST">
+            <el-input id="SAFETY_POST" ref="SAFETY_POST" :disabled="true" v-model="pd.SAFETY_POST" maxlength="255" placeholder="这里输入安全负责人职务..." title="安全负责人职务"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="单位电话" prop="SAFETY_NUMBER">
+            <el-input id="SAFETY_NUMBER" ref="SAFETY_NUMBER" :disabled="true" v-model="pd.SAFETY_NUMBER" maxlength="255" placeholder="这里输入安全负责人单位电话..." title="安全负责人单位电话"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="手机号码" prop="SAFETY_PHONE">
+            <el-input id="SAFETY_PHONE" ref="SAFETY_PHONE" :disabled="true" v-model="pd.SAFETY_PHONE" maxlength="255" placeholder="这里输入安全负责人手机号码..." title="安全负责人手机号码"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-divider content-position="left">安全标准化</el-divider>
+
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="安全标准化等级" prop="AQ_BZ_LEVEL">
+            <el-select id="AQ_BZ_LEVEL" ref="AQ_BZ_LEVEL" :disabled="true" v-model="pd.AQ_BZ_LEVEL" style="width:100%" clearable placeholder="请选择安全标准化等级">
+              <el-input id="AQ_BZ_LEVEL" ref="AQ_BZ_LEVEL_VAL" :disabled="true" v-model="pd.AQ_BZ_NO" maxlength="255" placeholder="这里输入安全标准化等级..." title="安全标准化等级"/>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="安全标准化证书编号" prop="AQ_BZ_NO">
+            <el-input id="AQ_BZ_NO" ref="AQ_BZ_NO" :disabled="true" v-model="pd.AQ_BZ_NO" maxlength="255" placeholder="这里输入安全标准化证书编号..." title="安全标准化证书编号"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="安全标准化发证单位" prop="AQ_BZ_UNIT">
+            <el-input id="AQ_BZ_UNIT" ref="AQ_BZ_UNIT" :disabled="true" v-model="pd.AQ_BZ_UNIT" maxlength="255" placeholder="这里输入安全标准化发证单位..." title="安全标准化发证单位"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="安全标准化有效期" prop="AQ_BZ_TIME">
+            <el-input id="AQ_BZ_TIME" ref="AQ_BZ_TIME" :disabled="true" v-model="pd.AQ_BZ_TIME" maxlength="255" placeholder="这里输入安全标准化有效期..." title="安全标准化有效期"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-divider content-position="left">企业相关属性</el-divider>
+
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="有无职业卫生信息" prop="WHETHER_HYGIENE">
+            <el-radio-group id="WHETHER_HYGIENE" ref="WHETHER_HYGIENE" :disabled="true" v-model="pd.WHETHER_HYGIENE">
+              <el-radio :label="0">无</el-radio>
+              <el-radio :label="1">有</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="有无重大危险源" prop="WHETHER_HAZARDS">
+            <el-radio-group id="WHETHER_HAZARDS" ref="WHETHER_HAZARDS" :disabled="true" v-model="pd.WHETHER_HAZARDS">
+              <el-radio :label="0">无</el-radio>
+              <el-radio :label="1">有</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="是否有稀缺大型应急物资或设施" prop="WHETHER_SCARCE">
+            <el-radio-group id="WHETHER_SCARCE" ref="WHETHER_SCARCE" :disabled="true" v-model="pd.WHETHER_SCARCE">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="是否涉及危化品" prop="WHETHER_CHEMICALS">
+            <el-radio-group id="WHETHER_CHEMICALS" ref="WHETHER_CHEMICALS" :disabled="true" v-model="pd.WHETHER_CHEMICALS">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="有无特种设备" prop="WHETHER_SPECIALEQUIPMENT">
+            <el-radio-group id="WHETHER_SPECIALEQUIPMENT" ref="WHETHER_SPECIALEQUIPMENT" :disabled="true" v-model="pd.WHETHER_SPECIALEQUIPMENT">
+              <el-radio :label="0">无</el-radio>
+              <el-radio :label="1">有</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="有无特存种作业人员" prop="WHETHER_SPECIALPEOPLE">
+            <el-radio-group id="WHETHER_SPECIALPEOPLE" ref="WHETHER_SPECIALPEOPLE" :disabled="true" v-model="pd.WHETHER_SPECIALPEOPLE">
+              <el-radio :label="0">无</el-radio>
+              <el-radio :label="1">有</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="是否涉及煤气" prop="WHETHER_COALGAS">
+            <el-radio-group id="WHETHER_COALGAS" ref="WHETHER_COALGAS" :disabled="true" v-model="pd.WHETHER_COALGAS">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="是否属于消防重点单位" prop="WHETHER_FIRE">
+            <el-radio-group id="WHETHER_FIRE" ref="WHETHER_FIRE" :disabled="true" v-model="pd.WHETHER_FIRE">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="是否在有限空间作业" prop="WHETHER_CONFINED">
+            <el-radio-group id="WHETHER_CONFINED" ref="WHETHER_CONFINED" :disabled="true" v-model="pd.WHETHER_CONFINED">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="是否存在涉爆粉尘作业" prop="WHETHER_POWDER">
+            <el-radio-group id="WHETHER_POWDER" ref="WHETHER_POWDER" :disabled="true" v-model="pd.WHETHER_POWDER">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="是否涉及防雷防静电" prop="WHETHER_LIGHTNING">
+            <el-radio-group id="WHETHER_LIGHTNING" ref="WHETHER_LIGHTNING" :disabled="true" v-model="pd.WHETHER_LIGHTNING">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="是否持有放射源" prop="WHETHER_ACTINOGEN">
+            <el-radio-group id="WHETHER_ACTINOGEN" ref="WHETHER_ACTINOGEN" :disabled="true" v-model="pd.WHETHER_ACTINOGEN">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="是否涉及液氨制冷" prop="WHETHER_LIQUIDAMMONIA">
+            <el-radio-group id="WHETHER_LIQUIDAMMONIA" ref="WHETHER_LIQUIDAMMONIA" :disabled="true" v-model="pd.WHETHER_LIQUIDAMMONIA">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="是否涉及危化品管道" prop="WHETHER_PIPELINE">
+            <el-radio-group id="WHETHER_PIPELINE" ref="WHETHER_PIPELINE" :disabled="true" v-model="pd.WHETHER_PIPELINE">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+
+    <div class="heightt"/>
+    <div class="subdy-foot">
+      <el-row type="flex" justify="space-around" style="width:700px; margin:0 auto">
+        <el-button @click="goBack">返 回</el-button>
+
+      </el-row>
+    </div>
+
+  </div>
+</template>
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves' // waves directive
+export default {
+  components: { Pagination },
+  directives: { waves },
+  data() {
+    return {
+      listLoading: true,
+      pd: {},
+      corpInfoId: ''
+    }
+  },
+  created() {
+    this.corpInfoId = this.$parent.indexVal
+    if (this.corpInfoId) {
+      this.getCorpInfo(this.$parent.indexVal)
+    }
+  },
+  methods: {
+    // 获取列表
+    getCorpInfo(corpId) {
+      this.listLoading = true
+      requestFN(
+        '/corpinfo/goEdit',
+        { tm: new Date().getTime(),
+          CORPINFO_ID: corpId,
+          KEYWORDS: this.KEYWORDS
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.pd = data.pd
+        if (data.pd.PROVINCE_VAL) {
+          this.pd.shudiVal = data.pd.PROVINCE_VAL
+        }
+        if (data.pd.CITY_VAL) {
+          this.pd.shudiVal += '/' + data.pd.CITY_VAL
+        }
+        if (data.pd.COUNTRY_VAL) {
+          this.pd.shudiVal += '/' + data.pd.COUNTRY_VAL
+        }
+        if (data.pd.VILLAGE_VAL) {
+          this.pd.shudiVal += '/' + data.pd.VILLAGE_VAL
+        }
+        if (data.pd.CORP_TYPE_VAL) {
+          this.pd.corpTypeVal = data.pd.CORP_TYPE_VAL
+        }
+        if (data.pd.CORP_TYPE2_VAL) {
+          this.pd.corpTypeVal += '/' + data.pd.CORP_TYPE2_VAL
+        }
+        if (data.pd.CORP_TYPE3_VAL) {
+          this.pd.corpTypeVal += '/' + data.pd.CORP_TYPE3_VAL
+        }
+        if (data.pd.CORP_TYPE4_VAL) {
+          this.pd.corpTypeVal += '/' + data.pd.CORP_TYPE4_VAL
+        }
+        this.pd.jinweidu = data.pd.LONGITUDE || '0'
+        this.pd.jinweidu += '-' + data.pd.LATITUDE || '0'
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    // 返回
+    goBack() {
+      this.$parent.activeName = 'IndexList'
+      this.$parent.indexVal = ''
+      this.corpInfoId = ''
+      if (this.$refs.form !== undefined) {
+        this.$refs.form.resetFields()
+        this.resetForm()
+      }
+    }
+  }
+}
+
+</script>
+<style scoped>
+.el-divider__text{
+  color: #2a90d2;
+  font-size: 15px;
+}
+.el-radio-group{
+  margin-left: 20px;
+}
+</style>
diff --git a/src/views/presystem/noticetemplate/index.vue b/src/views/presystem/noticetemplate/index.vue
new file mode 100644
index 0000000..ae45bb3
--- /dev/null
+++ b/src/views/presystem/noticetemplate/index.vue
@@ -0,0 +1,36 @@
+<template>
+  <div class="">
+    <!--    <transition name="fade" mode="out-in">-->
+    <!--      <component :is="activeName"/>-->
+    <!--    </transition>-->
+    <div>
+      <IndexList v-show="activeName=='IndexList'" ref="list" />
+      <IndexAdd v-if="activeName=='IndexAdd'" />
+      <IndexView v-if="activeName=='IndexView'" />
+    </div>
+  </div>
+</template>
+<script>
+import IndexList from './components/indexList'
+import IndexAdd from './components/indexAdd'
+import IndexView from './components/index_view'
+export default {
+  components: { IndexList, IndexAdd, IndexView },
+  data() {
+    return { //  src/views/corpInfo/examine/index.vue
+      activeName: 'IndexList'
+    }
+  },
+  watch: {
+    activeName(val) {
+      if (val == 'IndexList') {
+        this.$refs.list.getList()
+      }
+    }
+  },
+  methods: {
+
+  }
+}
+
+</script>
diff --git a/src/views/presystem/online/index.vue b/src/views/presystem/online/index.vue
new file mode 100644
index 0000000..1edff38
--- /dev/null
+++ b/src/views/presystem/online/index.vue
@@ -0,0 +1,129 @@
+<template>
+  <div class="app-container">
+    <template >
+      在线人数: {{ userCount }}
+    </template>
+    <el-table
+      ref="multipleTable"
+      :data="userList"
+      :header-cell-style="{
+        'font-weight': 'bold',
+        'color': '#000'
+      }"
+      tooltip-effect="dark"
+      border
+      fit
+      highlight-current-row
+    >
+
+      <el-table-column
+        type="selection"
+        width="55"
+        align="center"/>
+      <el-table-column type="index" label="序号" width="50" align="center" />
+      <el-table-column prop="username" label="用户名" />
+      <el-table-column label="操作" align="center" width="200">
+        <template slot-scope="{row}">
+          <el-button type="danger" icon="el-icon-delete" size="mini" @click="goOutTUser(row.username)" >强制下线</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-btn-group">
+      <div>
+        <el-button type="danger" icon="el-icon-delete" plain >强制下线</el-button>
+      </div>
+      <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" />
+    </div>
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import waves from '@/directive/waves' // waves directive
+export default {
+  components: { Pagination, global },
+  directives: { waves },
+  data() {
+    return {
+      tableData: [
+        {
+          numb: '1',
+          username: '	15203255716'
+        }, {
+          numb: '1',
+          username: '	15203255716'
+        }
+      ],
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      total: 0,
+      KEYWORDS: '',
+      userList: [],
+      userCount: 0,
+      onlineAdress: '',
+      websocketonline: ''
+    }
+  },
+  created() {
+    this.onlineAdress = sessionStorage.getItem('onlineAdress')
+    this.getList()
+  },
+  methods: {
+    getList() {
+      var _this = this
+      var onlineAdress = this.onlineAdress
+      this.listLoading = true
+
+      if (window.WebSocket) {
+        this.loading = true
+        _this.websocketonline = new WebSocket(encodeURI('ws://' + onlineAdress)) // onlineAdress在index.js文件定义
+        _this.websocketonline.onopen = function() {
+          _this.websocketonline.send('[QQ313596790]fhadmin')// 连接成功
+        }
+        _this.websocketonline.onerror = function() {
+          // 连接失败
+        }
+        _this.websocketonline.onclose = function() {
+          // 连接断开
+        }
+        // 消息接收
+        _this.websocketonline.onmessage = function(message) {
+          var messageData = JSON.parse(message.data)
+          if (messageData.type == 'count') {
+            // userCount = message.msg
+          } else if (messageData.type == 'userlist') {
+            for (let i = 0; i < messageData.list.length; ++i) {
+              var data1 = { username: messageData.list[i] }
+              _this.userList.push(data1)
+            }
+            _this.userCount = messageData.list.length
+          } else if (messageData.type == 'addUser') {
+            var addUserData = { username: messageData.user }
+            _this.userList.push(addUserData)
+            _this.userList = _this.userList.reverse()
+            _this.userCount = _this.userList.length
+          }
+        }
+      }
+    },
+    // 强制某用户下线
+    goOutTUser: function(theuser) {
+      var _this = this
+      theuser = theuser.replace('mobile-', '')
+      if (theuser == 'admin') {
+        // return
+      }
+      this.$confirm('确定要强制[' + theuser + ']下线吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        _this.websocketonline.send('[goOut]' + theuser)
+      })
+    }
+  }
+}
+</script>
+
diff --git a/src/views/presystem/permission/btns-per/index.vue b/src/views/presystem/permission/btns-per/index.vue
new file mode 100644
index 0000000..cdbf736
--- /dev/null
+++ b/src/views/presystem/permission/btns-per/index.vue
@@ -0,0 +1,118 @@
+<template>
+  <div class="app-container">
+    <el-tabs v-model="activeTab" type="border-card" @tab-click="handleClick">
+      <el-tab-pane v-for="role in roleList" :name="role.role_ID" :key="role.role_ID" :label="role.role_NAME">
+        <el-table
+          v-loading="listLoading"
+          :data="roleList_z"
+          :header-cell-style="{
+            'font-weight': 'bold',
+            'color': '#000',
+            'padding':'14px 0'
+          }"
+          :row-style="{'height':'54px'}"
+          border
+          fit
+          highlight-current-row>
+          <el-table-column type="index" label="序号" fixed width="50" align="center"/>
+          <el-table-column prop="role_NAME" label="角色" fixed width="200" show-overflow-tooltip/>
+          <el-table-column v-for="item in buttonlist" :key="item.FHBUTTON_ID" :label="item.NAME" :render-header="labelHead" align="center">
+            <template slot-scope="{row}">
+              <template v-for="(varRb,vsRb) in roleFhbuttonlist">
+                <template v-if="row.role_ID == varRb.ROLE_ID && item.FHBUTTON_ID == varRb.BUTTON_ID">
+                  <span :key="vsRb" style="display: none;">{{ switchModel[row.role_ID + '_' + item.FHBUTTON_ID] = true }}</span>
+                </template>
+              </template>
+              <el-switch v-model="switchModel[row.role_ID + '_' + item.FHBUTTON_ID]" @change="upRb(row.role_ID,item.FHBUTTON_ID)"/>
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+import { requestFN } from '@/utils/request'
+export default {
+  data() {
+    return {
+      activeTab: '1',
+      roleList: [],			// list 列出组(页面横向排列的一级组)
+      roleList_z: [],			// list 列出此组下架角色
+      buttonlist: [],			// list 列出所有按钮
+      roleFhbuttonlist: [],	// list 列出所有角色按钮关联数据
+      pd: [],					// map
+      ROLE_ID: '1',			// 角色ID
+      switchModel: {},
+      edit: false,
+      listLoading: false			// 加载状态
+    }
+  },
+  created() {
+    this.getList(this.ROLE_ID)
+  },
+  methods: {
+    labelHead(h, { column, index }) {
+      const l = column.label.length
+      const f = 34 // 自定义文字宽度
+      column.minWidth = f * l
+      return h('div', { class: 'table-head', style: { width: '100%' }}, [column.label])
+    },
+    handleClick(tab) {
+      this.ROLE_ID = tab.name
+      this.roleList_z = []
+      this.getList(this.ROLE_ID)
+    },
+    getList(ROLE_ID) {
+      this.listLoading = true
+      this.ROLE_ID = ROLE_ID
+      requestFN(
+        '/buttonrights/list',
+        {
+          ROLE_ID: ROLE_ID
+        }
+      ).then((data) => {
+        this.roleList = data.roleList
+        this.roleList_z = data.roleList_z
+        this.buttonlist = data.buttonlist
+        this.roleFhbuttonlist = data.roleFhbuttonlist
+        this.pd = data.pd
+        this.hasButton()
+        this.listLoading = false
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    hasButton: function() {
+      var keys = 'buttonrights:edit'
+      requestFN(
+        '/head/hasButton',
+        {
+          keys: keys
+        }
+      ).then((data) => {
+        this.edit = data.buttonrightsfhadminedit
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    upRb: function(ROLE_ID, FHBUTTON_ID) {
+      requestFN(
+        '/buttonrights/upRb',
+        {
+          ROLE_ID: ROLE_ID,
+          BUTTON_ID: FHBUTTON_ID
+        }
+      ).then((data) => {
+        this.switchModel = {}
+        this.roleFhbuttonlist = []
+        this.getList(this.activeTab)
+      }).catch((e) => {
+
+      })
+    }
+  }
+}
+</script>
+
diff --git a/src/views/presystem/permission/index.vue b/src/views/presystem/permission/index.vue
new file mode 100644
index 0000000..98240ae
--- /dev/null
+++ b/src/views/presystem/permission/index.vue
@@ -0,0 +1,3 @@
+<template>
+  <router-view />
+</template>
diff --git a/src/views/presystem/permission/role-per/index.vue b/src/views/presystem/permission/role-per/index.vue
new file mode 100644
index 0000000..f97d416
--- /dev/null
+++ b/src/views/presystem/permission/role-per/index.vue
@@ -0,0 +1,409 @@
+<template>
+  <div class="app-container">
+    <div class="filter-container">
+      <el-button-group>
+        <!--        <el-button type="primary" icon="el-icon-document-add" @click="handleAdd(0)">新增组</el-button>-->
+        <el-button type="primary" icon="el-icon-edit" @click="handleEdit()">修改组</el-button>
+        <!--        <el-button v-if="ROLE_ID!=1" type="primary" icon="el-icon-delete" @click="handleDelete()">删除组</el-button>-->
+        <el-button type="primary" icon="el-icon-collection-tag" @click="handleTree('listAllMenuV2',activeTab)">账号菜单权限</el-button>
+      </el-button-group>
+    </div>
+    <el-tabs v-model="activeTab" type="border-card" @tab-click="handleClick">
+      <el-tab-pane v-for="role in roleList" :name="role.role_ID" :key="role.role_ID" :label="role.role_NAME">
+        <el-table
+          v-loading="listLoading"
+          :data="roleList_z"
+          :header-cell-style="{
+            'font-weight': 'bold',
+            'color': '#000'
+          }"
+          border
+          fit
+          highlight-current-row>
+          <el-table-column type="index" label="序号" width="50" align="center" />
+          <el-table-column prop="role_NAME" label="角色" width="180" />
+          <el-table-column prop="rnumber" label="编码" />
+          <el-table-column label="增" align="center" width="60">
+            <template slot-scope="{row}">
+              <el-button icon="el-icon-document-add" circle @click="handleTree('b4ButtonV2',row.role_ID,'add_qx')" />
+            </template>
+          </el-table-column>
+          <el-table-column label="删" align="center" width="60">
+            <template slot-scope="{row}">
+              <el-button icon="el-icon-delete" circle @click="handleTree('b4ButtonV2',row.role_ID,'del_qx')"/>
+            </template>
+          </el-table-column>
+          <el-table-column label="改" align="center" width="60">
+            <template slot-scope="{row}">
+              <el-button icon="el-icon-edit" circle @click="handleTree('b4ButtonV2',row.role_ID,'edit_qx')"/>
+            </template>
+          </el-table-column>
+          <el-table-column label="查" align="center" width="60">
+            <template slot-scope="{row}">
+              <el-button icon="el-icon-view" circle @click="handleTree('b4ButtonV2',row.role_ID,'cha_qx')"/>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" align="center" width="290">
+            <template slot-scope="scope">
+              <el-button type="success" icon="el-icon-collection-tag" size="mini" @click="handleTree('listAllMenuV2',scope.row.role_ID)">权限</el-button>
+              <el-button type="primary" icon="el-icon-edit" size="mini" @click="handleUpdate(scope.row.role_ID, scope.row.role_NAME, scope.row.dept_TYPE, scope.row.primarynum,scope.row.level)">编辑</el-button>
+              <el-button type="danger" icon="el-icon-delete" size="mini" @click="handleDelete(scope.row.role_ID, scope.row.role_NAME)">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-tab-pane>
+    </el-tabs>
+    <div class="page-btn-group">
+      <div>
+        <el-button type="primary" icon="el-icon-plus" @click="handleCreate(activeTab)">新增</el-button>
+      </div>
+      <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getRoleList(ROLE_ID)" />
+    </div>
+    <el-dialog :visible.sync="dialogFormAdd" :title="dialogType==='edit'?'修改':'新增'" width="600px">
+      <el-form ref="roleForm" :model="form" :rules="formRules" label-width="120px" style="width: 500px;">
+        <el-form-item label="名称" prop="name">
+          <el-input v-model="form.name" autocomplete="off" placeholder="这里输入名称..." />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormAdd = false">取 消</el-button>
+        <el-button type="primary" @click="confirmRole">确 定</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :visible.sync="dialogFormVisible" :title="dialogType==='edit'?'修改':'新增'" width="600px">
+      <el-form ref="roleForm" :model="form" :rules="formRules" label-width="120px" style="width: 500px;">
+        <el-form-item label="名称" prop="name">
+          <el-input v-model="form.name" autocomplete="off" placeholder="这里输入名称..." />
+        </el-form-item>
+        <el-form-item label="单位类型" prop="dept_TYPE">
+          <el-select ref="refDeptType" v-model="form.dept_TYPE" placeholder="请选择" class="filter-item">
+            <el-option v-for="item in unitTypeList" :key="item.DICTIONARIES_ID" :label="item.NAME" :value="item.DICTIONARIES_ID" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="是否为主账号" prop="primarynum">
+          <el-select v-model="form.primarynum" placeholder="请选择" class="filter-item">
+            <el-option v-for="item in statearr" :key="item.value" :label="item.label" :value="item.value" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="用户查看等级" prop="roleLevel">
+          <el-select v-model="form.roleLevel" placeholder="请选择" class="filter-item">
+            <el-option v-for="item in userRoleLevel" :key="item.value" :label="item.label" :value="item.value" />
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible = false">取 消</el-button>
+        <el-button type="primary" @click="confirmRole">确 定</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :visible.sync="dialogFormTree" title="授权'新增'权限" width="500px">
+      <el-tree
+        ref="tree"
+        :data="treeData"
+        :props="defaultProps"
+        show-checkbox
+        node-key="id"/>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormTree = false">取 消</el-button>
+        <el-button type="primary" @click="confirmTree">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import { requestFN } from '@/utils/request'
+export default {
+  components: { Pagination },
+  data() {
+    return {
+      activeTab: '1',
+      listLoading: true,
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      total: 0,
+      roleList: [], // list 列出组(页面横向排列的一级组)
+      roleList_z: [], // list 列出此组下架角色
+      pd: [], // map
+      ROLE_ID: '1',	// 角色ID
+      dialogFormVisible: false,
+      dialogFormAdd: false,
+      dialogType: 'add',
+
+      dialogFormTree: false,
+      form: {
+        id: '',
+        parent_id: '',
+        name: '',
+        dept_TYPE: '',
+        primarynum: '', // 0是1否
+        roleLevel: ''
+      },
+
+      formRules: {
+        name: [
+          { required: true, message: '名不能为空', trigger: 'change' },
+          { min: 2, max: 30, message: '长度在 2 到 30 个字符', trigger: 'blur' }
+        ],
+        dept_TYPE: [
+          { required: true, message: '请选择单位类型', trigger: 'blur' }
+        ],
+        primarynum: [
+          { required: true, message: '请选择是否为主账号', trigger: 'blur' }
+        ],
+        roleLevel: [
+          { required: true, message: '请选择用户等级', trigger: 'blur' }
+        ]
+      },
+
+      treeData: [],
+      confirmTreeForm: {
+        url: '',
+        id: '',
+        msg: ''
+      },
+      defaultProps: {
+        children: 'nodes',
+        label: 'name'
+      },
+      statearr: [
+        { value: '0', label: '是' },
+        { value: '1', label: '否' }
+      ],
+      userRoleLevel: [
+        { value: '0', label: '公司领导' },
+        { value: '1', label: '部门领导' },
+        { value: '2', label: '普通员工' }
+      ],
+      unitTypeList: []
+    }
+  },
+  created() {
+    this.getRoleList(this.ROLE_ID)
+    this.getDict('3f3a6ac41247438e91df2830765068ba', 'unitTypeList')// 获取单位类型
+  },
+  methods: {
+    handleClick(tab) {
+      this.ROLE_ID = tab.name
+      this.roleList = []
+      this.roleList_z = []
+      this.listQuery.page = 1
+      this.form.parent_id = this.ROLE_ID
+      this.getRoleList(this.ROLE_ID)
+    },
+    getRoleList(ROLE_ID, dept_TYPE, primarynum) {
+      this.listLoading = true
+      this.ROLE_ID = ROLE_ID
+      requestFN(
+        '/role/list',
+        {
+          ROLE_ID: ROLE_ID
+
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.activeTab = ROLE_ID
+        this.form.dept_TYPE = dept_TYPE
+        this.form.primarynum = primarynum
+        this.roleList = data.roleList
+        this.roleList_z = data.roleList_z.filter((item, index) => index < this.listQuery.limit * this.listQuery.page && index >= this.listQuery.limit * (this.listQuery.page - 1))
+        this.total = data.roleList_z.length
+        this.total = data.page.totalResult
+        this.pd = data.pd
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    handleAdd(parentId) {
+      this.dialogType = 'add'
+      this.form.name = ''
+      this.form.parent_id = parentId
+      this.dialogFormAdd = true
+    },
+    handleCreate(parentId) {
+      this.dialogType = 'add'
+      this.form.name = ''
+      this.form.parent_id = parentId
+      this.dialogFormVisible = true
+    },
+    handleEdit(roleId, roleName) {
+      this.dialogType = 'edit'
+      if (roleId) {
+        this.form.id = roleId
+        this.form.name = roleName
+      } else {
+        for (const role of this.roleList) {
+          if (role.role_ID === this.activeTab) {
+            this.form.id = role.role_ID
+            this.form.name = role.role_NAME
+          }
+        }
+      }
+      this.dialogFormAdd = true
+    },
+    handleUpdate(roleId, roleName, dept_TYPE, primarynum, level) {
+      this.dialogType = 'edit'
+      if (roleId) {
+        this.form.id = roleId
+        this.form.name = roleName
+        this.form.dept_TYPE = dept_TYPE
+        this.form.primarynum = primarynum
+        this.form.roleLevel = level
+      } else {
+        for (const role of this.roleList) {
+          if (role.role_ID === this.activeTab) {
+            this.form.id = role.role_ID
+            this.form.name = role.role_NAME
+          }
+        }
+      }
+      this.dialogFormVisible = true
+    },
+
+    handleDelete(roleId, roleName) {
+      if (roleId) {
+        this.form.id = roleId
+        this.form.name = roleName
+      } else {
+        for (const role of this.roleList) {
+          if (role.role_ID === this.activeTab) {
+            this.form.id = role.role_ID
+            this.form.name = role.role_NAME
+          }
+        }
+      }
+      this.$confirm('确定要删除[' + this.form.name + ']吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/role/delete',
+          {
+            ROLE_ID: this.form.id
+          }
+        ).then(() => {
+          this.listLoading = false
+          this.roleList = []
+          this.roleList_z = []
+          this.listQuery.page = 1
+          this.getRoleList('1')
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    handleTree(url, roldId, msg) {
+      if (url === 'listAllMenuV2') {
+        this.confirmTreeForm.str = 'saveMenuqx'
+      } else {
+        this.confirmTreeForm.str = 'saveB4Button'
+      }
+      this.confirmTreeForm.id = roldId
+      this.confirmTreeForm.msg = msg || ''
+      this.listLoading = true
+      requestFN(
+        '/role/' + url,
+        {
+          ROLE_ID: roldId,
+          msg: msg
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.treeData = JSON.parse(data.zTreeNodes)
+        this.dialogFormTree = true
+        this.$nextTick(() => {
+          var checkedMenuIds = []
+          this.getCheckNode(this.treeData, checkedMenuIds)
+          this.$refs.tree.setCheckedKeys(checkedMenuIds) // 设置目前勾选的节点
+        })
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    confirmRole() {
+      this.$refs.roleForm.validate(valid => {
+        if (valid) {
+          this.listLoading = true
+          requestFN(
+            '/role/' + this.dialogType,
+            {
+              ROLE_ID: this.form.id,
+              ROLE_NAME: this.form.name,
+              PARENT_ID: this.form.parent_id,
+              DEPT_TYPE: this.form.dept_TYPE,
+              PRIMARYNUM: this.form.primarynum,
+              LEVEL: this.form.roleLevel
+            }
+          ).then((data) => {
+            this.listLoading = false
+            this.dialogFormVisible = false
+            this.dialogFormAdd = false
+            this.roleList = []
+            this.roleList_z = []
+            this.listQuery.page = 1
+            this.getRoleList(this.form.parent_id)
+            // if (data.pd.PARENT_ID === '0') {
+            //
+            // } else {
+            //   this.getRoleList(this.form.parent_id)
+            // }
+          }).catch((e) => {
+            this.listLoading = false
+          })
+        } else {
+          return false
+        }
+      })
+    },
+    confirmTree() {
+      this.listLoading = true
+      const ids = this.$refs.tree.getCheckedKeys().concat(this.$refs.tree.getHalfCheckedKeys())
+      requestFN(
+        '/role/' + this.confirmTreeForm.str,
+        {
+          ROLE_ID: this.confirmTreeForm.id,
+          menuIds: ids.join(','),
+          msg: this.confirmTreeForm.msg
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.dialogFormTree = false
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    getCheckNode(menuList, checkedMenuIds) {
+      if (menuList != null && menuList.length > 0) {
+        for (let i = 0; i < menuList.length; i++) {
+          const menu = menuList[i]
+          if ((menu.nodes == null || menu.nodes.length === 0) && menu.checked.toString() === 'true') {
+            checkedMenuIds.push(menu.id)
+          }
+          if (menu.nodes != null && menu.nodes.length > 0) {
+            this.getCheckNode(menu.nodes, checkedMenuIds)
+          }
+        }
+      }
+    },
+    // 获取数据字典数据
+    getDict(dicID, listName) {
+      requestFN(
+        'dictionaries/getLevels',
+        { DICTIONARIES_ID: dicID }
+      ).then((data) => {
+        this[listName] = data.list
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    }
+  }
+}
+</script>
+
diff --git a/src/views/presystem/serviceNotice/index.vue b/src/views/presystem/serviceNotice/index.vue
new file mode 100644
index 0000000..870df92
--- /dev/null
+++ b/src/views/presystem/serviceNotice/index.vue
@@ -0,0 +1,544 @@
+<template>
+  <div class="app-container">
+    <el-form label-width="80px">
+      <el-row>
+        <el-col :span="4">
+          <el-form-item label="公告简介">
+            <el-input v-model="KEYWORDS" placeholder="公告简介"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item label-width="10px">
+            <el-button v-waves type="primary" icon="el-icon-search" @click="getQuery">
+              搜索
+            </el-button>
+            <el-button v-waves type="success" icon="el-icon-refresh" @click="goKeyReset">
+              重置
+            </el-button>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table v-loading="listLoading" ref="multipleTable" :data="varList" :row-key="getRowKey" :header-cell-style="{'font-weight': 'bold','color': '#000'}" tooltip-effect="dark" border fit highlight-current-row>
+      <el-table-column :reserve-selection="true" type="selection" width="55" align="center" />
+      <el-table-column type="index" label="序号" width="50" align="center" />
+      <el-table-column prop="CREATOR" label="发布人" />
+      <el-table-column prop="CREATTIME" label="发布时间" />
+      <el-table-column prop="CREATOR" label="公告简介">
+        <template slot-scope="{row}">
+          <div class="link-type" @click="handleShow(row)">{{ (row.SYNOPSIS).substring(0,13) }}...</div>
+        </template>
+      </el-table-column>
+      <el-table-column prop="CREATOR" label="启用状态">
+        <template slot-scope="{row}">
+          <el-switch v-model="row.STATUS" active-value="1" inactive-value="0" @change="changeStatus(row.NOTICE_ID)" />
+        </template>
+      </el-table-column>
+      <el-table-column prop="NAME" label="查看状态">
+        <template slot-scope="{row}">
+          <div class="link-type" @click="handleRead(row.NOTICE_ID,row.ISALL)">{{ row.countCk }} / {{ row.countAll }}</div>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" width="200">
+        <template slot-scope="{row}">
+          <el-button v-show="edit && row.ISTOP==0" type="success" size="mini" @click="zhiding(row.NOTICE_ID,1,'置顶')">置顶</el-button>
+          <el-button v-show="edit && row.ISTOP==1" type="success" size="mini" @click="zhiding(row.NOTICE_ID,0,'取消置顶')">取消置顶</el-button>
+          <el-button v-show="del" type="danger" icon="el-icon-delete" size="mini" @click="handleDelete(row.NOTICE_ID)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-btn-group">
+      <div>
+        <el-button v-show="add" type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button>
+        <el-button v-show="del" type="danger" icon="el-icon-delete" plain @click="batchDel">删除</el-button>
+      </div>
+      <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
+    </div>
+
+    <el-dialog :visible.sync="dialogFormEdit" :title="dialogType==='edit'?'修改':'新增'" width="800px">
+      <el-form ref="form" :rules="rules" :model="form" label-width="110px" style="padding:0 40px 0 20px">
+        <el-form-item label="公告简介" prop="SYNOPSIS">
+          <el-input id="SYNOPSIS" ref="SYNOPSIS" v-model="form.SYNOPSIS" maxlength="255" placeholder="这里输入公告简介..." title="公告简介" />
+        </el-form-item>
+        <el-form-item label="是否全部通知" prop="ISALL">
+          <el-radio-group id="ISALL" ref="ISALL" v-model="form.ISALL">
+            <el-radio :label="'yes'">全部通知</el-radio>
+            <el-radio :label="'no'">部分通知</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item v-if="form.ISALL=='no'" label="选择通知人" prop="ISALL">
+          <div class="uo-flex">
+            <el-input v-model="form.corpinfoNames" placeholder="请选择通知人..." disabled />
+            <el-button type="primary" style="margin-left:10px" icon="el-icon-arrow-down" @click="handleCorp">请选择</el-button>
+          </div>
+        </el-form-item>
+        <el-form-item label="内容" prop="CONTENT">
+          <!--          <tinymce v-model="form.CONTENT" :height="300" />-->
+          <quill-editor
+            ref="myQuillEditor"
+            v-model="form.CONTENT"
+            :options="editorOption"
+            style="min-height: 300px"
+          />
+        </el-form-item>
+        <!--        <el-form-item label="附件路径">-->
+        <!--          <div class="uo-flex">-->
+        <!--            <el-input v-model="form.fileName" :disabled="true" title="请上传附件" />-->
+        <!--            <el-upload :before-upload="beforeFileUpload" class="avatar-uploader" action="#">-->
+        <!--              <el-button type="primary" icon="el-icon-upload" style="margin-left:10px; ">上传附件</el-button>-->
+        <!--            </el-upload>-->
+        <!--          </div>-->
+        <!--        </el-form-item>-->
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormEdit = false">取 消</el-button>
+        <el-button type="primary" @click="confirm">确 定</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :visible.sync="dialogFormShow" title="查看" width="800px">
+      <table class="table-ui">
+        <tr>
+          <td class="tbg">发布人</td>
+          <td>{{ pd.CREATOR }}</td>
+        </tr>
+        <tr>
+          <td class="tbg">发布时间</td>
+          <td>{{ pd.CREATTIME }}</td>
+        </tr>
+        <tr>
+          <td class="tbg">内容</td>
+          <td>
+            <div v-html="pd.CONTENT" />
+          </td>
+        </tr>
+        <!--        <tr v-if="pd.FILEPATH">-->
+        <!--          <td class="tbg">附件</td>-->
+        <!--          <td><a @click="download(pd.FILEPATH)">下载</a></td>-->
+        <!--        </tr>-->
+      </table>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormShow = false">关 闭</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :visible.sync="dialogFormRead" title="查看" width="800px">
+      <el-table v-loading="readListLoading" ref="multipleTable_read" :data="readVarList" :header-cell-style="{'font-weight': 'bold','color': '#000'}" tooltip-effect="dark" border fit highlight-current-row>
+        <el-table-column type="index" label="序号" width="50" align="center" />
+        <el-table-column prop="CORP_NAME" label="企业名称" />
+        <el-table-column prop="CREATTIME" label="阅读状态">
+          <template slot-scope="{row}">
+            <span v-if="row.TYPE=='1'">已阅</span>
+            <span v-else>未阅</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="CREATOR" label="阅读时间" />
+        <el-table-column prop="CONTENT" label="回复内容" />
+      </el-table>
+      <div class="page-btn-group">
+        <div>
+          <el-button @click="dialogFormRead = false">关 闭</el-button>
+        </div>
+        <pagination :total="readTotal" :page.sync="readListQuery.page" :limit.sync="readListQuery.limit" @pagination="getReadList" />
+      </div>
+    </el-dialog>
+
+    <el-dialog :visible.sync="dialogFormUser" title="查看" width="800px">
+      <div class="filter-container">
+        <el-input v-model="KEYWORDS_CORP" placeholder="搜索" class="filter-item" style="width: 200px;" />
+        <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="getCorpList">
+          搜索
+        </el-button>
+      </div>
+      <el-table v-loading="corpListLoading" ref="multipleTable_corp" :row-key="getCorpRowKey" :data="corpVarList" :header-cell-style="{'font-weight': 'bold','color': '#000'}" tooltip-effect="dark" border fit highlight-current-row>
+        <el-table-column :reserve-selection="true" type="selection" width="55" align="center" />
+        <el-table-column type="index" label="序号" width="50" align="center" />
+        <el-table-column prop="CORP_NAME" label="企业名称" />
+        <el-table-column prop="COMPANY_AREA" label="所属区域" />
+        <el-table-column prop="ADDRESS" label="注册地址" />
+        <el-table-column prop="LR_NAME" label="法定代表人" />
+      </el-table>
+      <div class="page-btn-group">
+        <div>
+          <el-button type="primary" @click="confirmUser">确 定</el-button>
+          <el-button @click="dialogFormUser = false">关 闭</el-button>
+        </div>
+        <pagination :total="corpTotal" :page.sync="corpListQuery.page" :limit.sync="corpListQuery.limit" @pagination="getCorpList" />
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves' // waves directive
+import { quillEditor } from 'vue-quill-editor'
+import 'quill/dist/quill.core.css'
+import 'quill/dist/quill.snow.css'
+import 'quill/dist/quill.bubble.css'
+// import Tinymce from '@/components/Tinymce'
+export default {
+  components: { Pagination, quillEditor },
+  directives: { waves },
+  data() {
+    return {
+      listLoading: true,
+      readListLoading: true,
+      corpListLoading: true,
+      add: false,
+      del: false,
+      edit: false,
+      editorOption: {},
+      serverurl: config.fileUrl,
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      total: 0,
+      KEYWORDS: '',
+      varList: [],
+
+      pd: [],
+
+      NOTICE_ID: '',
+      isAll: '',
+      readListQuery: {
+        page: 1,
+        limit: 20
+      },
+      readTotal: 0,
+      readVarList: [],
+
+      KEYWORDS_CORP: '',
+      corpListQuery: {
+        page: 1,
+        limit: 20
+      },
+      corpTotal: 0,
+      corpVarList: [],
+      form: {
+        SYNOPSIS: '',
+        ISALL: 'yes',
+        CONTENT: '',
+        corpinfoIds: '',
+        corpinfoNames: '',
+        file: '',
+        fileName: ''
+      },
+      multipleSelectionAll: [], // 所有选中的数据包含跨页数据
+      multipleSelection: [], // 当前页选中的数据
+      dialogFormEdit: false,
+      dialogFormShow: false,
+      dialogFormRead: false,
+      dialogFormUser: false,
+      dialogType: 'add',
+      rules: {
+        SYNOPSIS: [{ required: true, message: '公告简介不能为空', trigger: 'blur' }],
+        CONTENT: [{ required: true, message: '内容不能为空', trigger: 'blur' }]
+      }
+    }
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    getRowKey(row) {
+      return row.NOTICECORP_ID
+    },
+    // 搜索
+    getQuery() {
+      this.$refs.multipleTable.clearSelection()
+      this.getList()
+    },
+    goKeyReset() {
+      this.KEYWORDS = ''
+      this.getQuery()
+    },
+    // 获取列表
+    getList() {
+      this.listLoading = true
+      requestFN(
+        '/service/notice/list?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
+        {
+          KEYWORDS: this.KEYWORDS,
+          tm: new Date().getTime()
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.varList = data.varList
+        var countNotList = data.countNotList
+        for (var i = 0; i < data.varList.length; i++) {
+          var notMap = data.varList[i]
+          var notId = notMap.NOTICE_ID
+          var countCk = 0
+          var countWCK = 0
+          for (var j = 0; j < countNotList.length; j++) {
+            var countNotId = countNotList[j].NOTICE_ID
+            if (notId == countNotId) {
+              if (countNotList[j].type == '1') {
+                countCk = countNotList[j].count
+              }
+              if (countNotList[j].type == '0') {
+                countWCK = countNotList[j].count
+              }
+            }
+          }
+          if (notMap.ISALL == 'no') {
+            notMap.countAll = countCk + countWCK
+          } else if (notMap.ISALL == 'yes') {
+            notMap.countAll = data.corpInfoCount
+          }
+          notMap.countCk = countCk
+        }
+        this.total = data.page.totalResult
+        this.hasButton(data.varList)
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    handleShow(row) {
+      this.dialogFormShow = true
+      this.pd = Object.assign({}, row)
+    },
+    handleRead(id, isAll) {
+      this.NOTICE_ID = id
+      this.isAll = isAll
+      this.dialogFormRead = true
+      this.getReadList()
+    },
+    getReadList() {
+      this.readListLoading = true
+      requestFN(
+        '/service/notice/listCorpRead?showCount=' + this.readListQuery.limit + '&currentPage=' + this.readListQuery.page,
+        {
+          NOTICE_ID: this.NOTICE_ID,
+          isAll: this.isAll,
+          tm: new Date().getTime()
+        }
+      ).then((data) => {
+        this.readListLoading = false
+        this.readVarList = data.varList
+        this.readTotal = data.page.totalResult
+      }).catch((e) => {
+        this.readListLoading = false
+      })
+    },
+
+    handleCorp() {
+      this.dialogFormUser = true
+      this.getCorpList()
+    },
+    getCorpRowKey(row) {
+      return row.CORPINFO_ID
+    },
+    getCorpList() {
+      this.corpListLoading = true
+      requestFN(
+        '/corpinfo/list?showCount=' + this.corpListQuery.limit + '&currentPage=' + this.corpListQuery.page,
+        {
+          KEYWORDS: this.KEYWORDS_CORP,
+          tm: new Date().getTime()
+        }
+      ).then((data) => {
+        this.corpListLoading = false
+        this.corpVarList = data.varList
+        this.corpTotal = data.page.totalResult
+      }).catch((e) => {
+        this.corpListLoading = false
+      })
+    },
+    confirmUser() {
+      const _selectData = this.$refs.multipleTable_corp.selection
+      const ids = _selectData.map((item, index) => {
+        return item.CORPINFO_ID
+      }).join(',')
+      const names = _selectData.map((item, index) => {
+        return item.CORP_NAME
+      }).join(',')
+      this.form.corpinfoIds = ids
+      this.form.corpinfoNames = names
+      this.dialogFormUser = false
+    },
+    // 添加
+    handleAdd() {
+      this.dialogType = 'add'
+      this.resetForm()
+      this.dialogFormEdit = true
+    },
+    // 保存
+    confirm() {
+      this.$refs.form.validate(valid => {
+        requestFN(
+          '/service/notice/add',
+          {
+            NOTICE_ID: this.NOTICE_ID,
+            SYNOPSIS: this.form.SYNOPSIS,
+            CONTENT: this.form.CONTENT,
+            ISALL: this.form.ISALL,
+            corpInfoIds: this.form.corpinfoIds,
+            tm: new Date().getTime()
+          }
+        ).then((data) => {
+          this.dialogFormEdit = false
+          this.getList()
+        }).catch((e) => {
+        })
+      })
+    },
+    beforeFileUpload(file) {
+      this.form.file = file
+      this.form.fileName = file.name
+      this.$forceUpdate()
+      return false
+    },
+    // 处理按钮点击
+    changeStatus(NOTICE_ID) {
+      requestFN(
+        '/service/notice/changeStatus',
+        {
+          NOTICE_ID: NOTICE_ID
+        }
+      ).then(() => {
+        this.$message({
+          message: '状态修改成功',
+          type: 'success'
+        })
+        this.listLoading = false
+        this.varList = []
+        this.listQuery.page = 1
+        this.getList()
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    zhiding(id, ISTOP, str) {
+      this.$confirm('确定要' + str + '吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/service/notice/changeIsTop',
+          {
+            NOTICE_ID: id,
+            ISTOP: ISTOP
+          }
+        ).then(() => {
+          this.$message({
+            message: '操作成功',
+            type: 'success'
+          })
+          this.listLoading = false
+          this.varList = []
+          this.listQuery.page = 1
+          this.getList()
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    handleDelete(id) {
+      this.$confirm('确定要删除吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/service/notice/delete',
+          {
+            NOTICE_ID: id
+          }
+        ).then(() => {
+          this.$message({
+            message: '删除成功',
+            type: 'success'
+          })
+          this.listLoading = false
+          this.varList = []
+          this.listQuery.page = 1
+          this.getList()
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    batchDel() {
+      const _selectData = this.$refs.multipleTable.selection
+      if (_selectData == null || _selectData.length == 0) {
+        this.$message({
+          message: '请选中要删除的项...',
+          type: 'error'
+        })
+        return false
+      }
+      const ids = _selectData.map((item, index) => {
+        return item.TIMINGBACKUP_ID
+      }).join(',')
+      this.$confirm('确定要删除选中的数据吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/noticecorp/deleteAll',
+          {
+            DATA_IDS: ids
+          }
+        ).then(() => {
+          this.listLoading = false
+          this.varList = []
+          this.listQuery.page = 1
+          this.$refs.multipleTable.clearSelection()
+          this.getList()
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    // 判断按钮权限,用于是否显示按钮
+    hasButton() {
+      var keys = 'serviceNotice:add,serviceNotice:del,serviceNotice:edit,toExcel'
+      requestFN(
+        '/head/hasButton',
+        {
+          keys: keys
+        }
+      ).then((data) => {
+        this.add = data.serviceNoticefhadminadd		// 新增权限
+        this.del = data.serviceNoticefhadmindel		// 删除权限
+        this.edit = data.serviceNoticefhadminedit	// 修改权限
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    // 获取数据字典数据
+    getDict() {
+    },
+    download(filePah) {
+      window.location.href = config.fileUrl + filePah
+    },
+    resetForm() {
+      this.form = {
+        SYNOPSIS: '',
+        ISALL: 'yes',
+        CONTENT: '',
+        corpinfoIds: '',
+        corpinfoNames: '',
+        file: '',
+        fileName: ''
+      }
+    }
+  }
+}
+
+</script>
+<style lang="sass" scoped>
+.uo-flex
+  display: flex
+</style>
diff --git a/src/views/presystem/templates/index.vue b/src/views/presystem/templates/index.vue
new file mode 100644
index 0000000..2be56f5
--- /dev/null
+++ b/src/views/presystem/templates/index.vue
@@ -0,0 +1,322 @@
+<template>
+  <div class="icons-container">
+    <el-table
+      ref="multipleTable"
+      :data="varList"
+      :header-cell-style="{
+        'font-weight': 'bold',
+        'color': '#000'
+      }"
+      tooltip-effect="dark"
+      border
+      fit
+      highlight-current-row
+    >
+      <el-table-column
+        type="selection"
+        width="55"
+        align="center"/>
+      <el-table-column type="index" label="序号" width="50" align="center" />
+      <!--      <el-table-column prop="TEMPLATES_ID" label="模板id" />-->
+      <el-table-column prop="ENCODE" label="编码" width="150px"/>
+      <el-table-column prop="SYNOPSIS" label="简介" width="250px"/>
+      <el-table-column prop="CONTENT" label="模板内容" />
+      <el-table-column prop="URL" label="跳转地址" />
+      <el-table-column label="操作" align="center" width="200">
+        <template slot-scope="{row}">
+          <el-button type="danger" icon="el-icon-delete" size="mini" @click="handleDelete(row.TEMPLATES_ID)">删除</el-button>
+          <el-button type="primary" icon="el-icon-delete" size="mini" @click="handleEdit(row.TEMPLATES_ID)">修改</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-btn-group">
+      <div>
+        <el-button type="primary" icon="el-icon-plus" @click="handleAdd(activeTab)">新增</el-button>
+      </div>
+      <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
+    </div>
+    <el-dialog :visible.sync="dialogFormAdd" :title="dialogType==='edit'?'修改':'新增'" width="600px">
+      <el-form ref="roleForm" :model="form" :rules="formRules" label-width="120px" style="width: 500px;">
+        <el-form-item label="模板id" prop="TEMPLATES_ID">
+          <el-input v-model="form.TEMPLATES_ID" autocomplete="off" placeholder="这里输入模板id..." />
+        </el-form-item>
+        <el-form-item label="模板名称" prop="NAME">
+          <el-input v-model="form.NAME" autocomplete="off" placeholder="这里输入模板名称..." />
+        </el-form-item>
+        <el-form-item label="模板内容" prop="CONTENT" >
+          <el-input v-model="form.CONTENT" type="textarea" autocomplete="off" placeholder="这里输入模板内容..." />
+        </el-form-item>
+        <el-form-item label="跳转地址" prop="URL">
+          <el-input v-model="form.URL" type="textarea" autocomplete="off" placeholder="这里输入跳转地址..." />
+        </el-form-item>
+        <el-form-item label="简介" prop="SYNOPSIS">
+          <el-input v-model="form.SYNOPSIS" type="textarea" autocomplete="off" placeholder="这里输入简介..." />
+        </el-form-item>
+        <el-form-item label="编码" prop="ENCODE">
+          <el-input v-model="form.ENCODE" autocomplete="off" placeholder="这里输入编码..." />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormAdd = false">取 消</el-button>
+        <el-button type="primary" @click="confirm">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import { requestFN } from '@/utils/request'
+export default {
+  name: 'Icons',
+  components: { Pagination },
+  data() {
+    return {
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      total: 0,
+      listLoading: false,			// 加载状态
+      treeLoading: false,
+      radio: 1,
+      dialogFormAdd: false,
+      dialogEditIcon: false,
+      dialogType: 'add',
+      // 列表
+      varList: [],	// list
+      TEMPLATES_ID: '0',	// 主键ID
+      pd: [],
+      form: {
+        TEMPLATES_ID: '', // 模板id
+        NAME: '1', // 模板名称
+        CONTENT: 1, // 模板内容
+        URL: '', // 跳转地址
+        PID: '', // 跳转页关联ID
+        PARAMETER1: '', // 参数1
+        PARAMETER2: '', // 参数2
+        PARAMETER3: '(无)', // 参数3
+        SYNOPSIS: '', // 简介
+        ENCODE: '', // 编码
+        WEIGHT: '', // 权重
+        CREATE_TIME: '' // 创建时间
+      },
+      pds: [],
+      add: false,
+      del: false,
+      edit: false,
+      rules: {
+        MENU_NAME: [
+          { required: true, message: '菜单名称不能为空', trigger: 'change' },
+          { min: 2, max: 30, message: '长度在 2 到 30 个字符', trigger: 'blur' }
+        ],
+        MENU_ORDER: [
+          { required: true, message: '菜单序号不能为空', trigger: 'change' },
+          { type: 'number', message: '菜单序号必须为数字' }
+        ]
+      }
+    }
+  },
+  watch: {
+    filterText(val) {
+      this.$refs.tree.filter(val)
+    }
+  },
+  created() {
+    this.getList(this.TEMPLATES_ID)
+  },
+  methods: {
+    filterNode(value, data) {
+      if (!value) return true
+      return data.name.indexOf(value) !== -1
+    },
+    handleNodeClick(node, data, value) {
+      this.handleEdit(node.id)
+    },
+    handleAdd() {
+      this.dialogType = 'add'
+      this.resetForm()
+      requestFN(
+        '/message/toAdd',
+        {
+          TEMPLATES_ID: this.TEMPLATES_ID
+        }
+      ).then((data) => {
+        this.form.PARENT_ID = this.TEMPLATES_ID
+        this.pds = data.pds	|| []					// 父级菜单信息
+      }).catch((e) => {
+
+      })
+      this.dialogFormAdd = true
+    },
+    handleEdit(TEMPLATES_ID) {
+      this.dialogType = 'edit'
+      requestFN(
+        '/message/toEdit',
+        {
+          TEMPLATES_ID: TEMPLATES_ID
+        }
+      ).then((data) => {
+        this.form = Object.assign({}, data.pd) // copy obj
+        this.form.TEMPLATES_ID = TEMPLATES_ID
+        this.form.PARENT_ID = data.pd.PARENT_ID
+        this.pds = data.pds || []						// 父级菜单信息
+      }).catch((e) => {
+        this.listLoading = false
+      })
+      this.dialogFormAdd = true
+    },
+    confirm() {
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.listLoading = true
+          requestFN(
+            '/message/' + this.dialogType,
+            this.form
+          ).then((data) => {
+            this.listLoading = false
+            this.dialogFormAdd = false
+            this.getList(this.TEMPLATES_ID)
+          }).catch((e) => {
+            this.listLoading = false
+          })
+        } else {
+          return false
+        }
+      })
+    },
+    handleDelete(id, name) {
+      this.$confirm('确定要删除[' + name + ']吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/message/delete',
+          {
+            TEMPLATES_ID: id
+          }
+        ).then(() => {
+          this.listLoading = false
+          this.getList(this.TEMPLATES_ID)
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    handleEditIcon(TEMPLATES_ID) {
+      this.dialogEditIcon = true
+      this.form.TEMPLATES_ID = TEMPLATES_ID
+    },
+    confirmIcon(symbol) {
+      const MENU_ICON = symbol
+      this.listLoading = true
+      requestFN(
+        '/message/editicon',
+        {
+          TEMPLATES_ID: this.form.TEMPLATES_ID,
+          MENU_ICON: MENU_ICON
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.dialogEditIcon = false
+        this.getList(this.TEMPLATES_ID)
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    getList(TEMPLATES_ID) {
+      this.listLoading = true
+      this.varList = []
+      this.TEMPLATES_ID = TEMPLATES_ID
+      requestFN(
+        '/message/list?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
+        {
+          TEMPLATES_ID: this.TEMPLATES_ID
+        }
+      ).then((data) => {
+        console.log(data)
+        this.listLoading = false
+        this.varList = data.templates
+        this.total = data.page.totalResult
+        this.pd = data.pd || []
+        this.hasButton()
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    resetForm() {
+      this.form = {
+        TEMPLATES_ID: '',	 // 主键ID
+        MENU_TYPE: '1', // 类型
+        MENU_STATE: 1,	 // 状态
+        PARENT_ID: '',	 // 上级ID
+        MENU_NAME: '',	 // 菜单名称
+        MENU_URL: '',	 // 菜单链接
+        COMPONENT: '', // 组件路径
+        SHIRO_KEY: '(无)', // 权限标识
+        SHOW_MODEL: '', // 显示模式
+        MENU_ORDER: ''	 // 菜单序号
+      }
+    },
+    hasButton: function() {
+      var keys = 'menu:add,menu:del,menu:edit'
+      requestFN(
+        '/head/hasButton',
+        {
+          keys: keys
+        }
+      ).then((data) => {
+        this.add = data.menufhadminadd
+        this.del = data.menufhadmindel
+        this.edit = data.menufhadminedit
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.el-dialog__body{
+  padding: 0;
+  background: red;
+}
+.mark_up{
+  margin-bottom:20px;
+  margin-left: 110px;
+}
+.icons-container {
+  margin: 0;
+  overflow: hidden;
+
+  .grid {
+    position: relative;
+    display: grid;
+    grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
+  }
+
+  .icon-item {
+    margin-bottom: 10px;
+    height: 70px;
+    text-align: center;
+    width: 100px;
+    float: left;
+    font-size: 24px;
+    color: #24292e;
+    cursor: pointer;
+    span {
+      display: block;
+      font-size: 14px;
+      margin-top: 10px;
+    }
+
+  }
+
+  .disabled {
+    pointer-events: none;
+  }
+}
+</style>
diff --git a/src/views/presystem/test/components/index.vue b/src/views/presystem/test/components/index.vue
new file mode 100644
index 0000000..61bead3
--- /dev/null
+++ b/src/views/presystem/test/components/index.vue
@@ -0,0 +1,27 @@
+<template>
+  <div id="vue">
+    Hello Vue{{ this.$parent.val1 }}
+    <el-button class="filter-item" type="primary" @click="getQuery">
+      搜索
+    </el-button>
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+
+    }
+  },
+  methods: {
+    getQuery() {
+      this.$parent.indexVal = '2333'
+      this.$parent.activeName = 'Index2'
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/src/views/presystem/test/components/index2.vue b/src/views/presystem/test/components/index2.vue
new file mode 100644
index 0000000..9b99417
--- /dev/null
+++ b/src/views/presystem/test/components/index2.vue
@@ -0,0 +1,27 @@
+<template>
+  <div id="vue">
+    Hello Vue{{ this.$parent.indexVal }}
+    <el-button class="filter-item" type="primary" @click="getQuery">
+      返回
+    </el-button>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+
+    }
+  },
+  methods: {
+    getQuery() {
+      this.$parent.activeName = 'Index'
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/src/views/presystem/test/index.vue b/src/views/presystem/test/index.vue
new file mode 100644
index 0000000..9c1a0cd
--- /dev/null
+++ b/src/views/presystem/test/index.vue
@@ -0,0 +1,29 @@
+<template>
+  <div class="app-container">
+    <transition name="fade" mode="out-in">
+      <component :is="activeName"/>
+    </transition>
+
+  </div>
+</template>
+<script>
+import Index from './components/index'
+import Index2 from './components/index2'
+export default {
+  components: { Index, Index2 },
+  data() {
+    return {
+      val1: '3',
+      activeName: 'Index',
+      val: '1',
+      indexVal: ''
+    }
+  },
+  methods: {
+    getQuery() {
+      this.activeName = 'Index2'
+    }
+  }
+}
+
+</script>
diff --git a/src/views/presystem/test/index2.vue b/src/views/presystem/test/index2.vue
new file mode 100644
index 0000000..8d85220
--- /dev/null
+++ b/src/views/presystem/test/index2.vue
@@ -0,0 +1,15 @@
+<template>
+  <div id="vue">
+    Hello Vue2
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'Index'
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/src/views/presystem/version/index.vue b/src/views/presystem/version/index.vue
new file mode 100644
index 0000000..98240ae
--- /dev/null
+++ b/src/views/presystem/version/index.vue
@@ -0,0 +1,3 @@
+<template>
+  <router-view />
+</template>
diff --git a/src/views/presystem/version/versionmanager/index.vue b/src/views/presystem/version/versionmanager/index.vue
new file mode 100644
index 0000000..6051100
--- /dev/null
+++ b/src/views/presystem/version/versionmanager/index.vue
@@ -0,0 +1,433 @@
+<template>
+  <div class="app-container">
+    <div class="filter-container">
+      <el-input v-model="KEYWORDS" placeholder="搜索" class="filter-item" style="width: 200px;"/>
+      <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="getQuery">
+        搜索
+      </el-button>
+      <el-button v-waves class="filter-item" type="success" icon="el-icon-refresh" @click="getReset">
+        重置
+      </el-button>
+    </div>
+    <el-table
+      v-loading="listLoading"
+      ref="multipleTable"
+      :data="varList"
+      :row-key="getRowKey"
+      :header-cell-style="{
+        'font-weight': 'bold',
+        'color': '#000'
+      }"
+      tooltip-effect="dark"
+      border
+      fit
+      highlight-current-row
+    >
+      <el-table-column
+        :reserve-selection="true"
+        type="selection"
+        width="55"
+        align="center"/>
+      <el-table-column type="index" label="序号 " width="50" align="center" />
+      <el-table-column prop="VERSION" label="版本" />
+      <el-table-column prop="FILEURL" label="文件地址">
+        <template slot-scope="{row}">
+          <span v-if="row.FILEURL" @click="download(row.FILEURL)">[下载]</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="FILETYPE" label="文件类型" />
+      <el-table-column prop="OPUSER" label="操作人" />
+      <el-table-column prop="OPTIME" label="操作日期" />
+      <el-table-column prop="ISEFFECTIVE" label="是否有效">
+        <template slot-scope="{row}">
+          <span v-if="row.ISEFFECTIVE =='1'">是</span>
+          <span v-if="row.ISEFFECTIVE =='2'">否</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="ISUPDATE" label="是否强制更新">
+        <template slot-scope="{row}">
+          <span v-if="row.ISUPDATE =='1'">是</span>
+          <span v-if="row.ISUPDATE =='2'">否</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" width="200">
+        <template slot-scope="{row}">
+          <!--          <el-button v-show="edit" type="primary" icon="el-icon-edit" size="mini" @click="handleEdit(row.VERSIONMANAGER_ID)">编辑</el-button>-->
+          <el-button v-show="edit" type="success" icon="el-icon-view" size="mini" @click="handleShow(row.VERSIONMANAGER_ID)">查看</el-button>
+          <!--          <el-button v-show="del" type="danger" icon="el-icon-delete" size="mini" @click="handleDelete(row.VERSIONMANAGER_ID)">删除</el-button>-->
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-btn-group">
+      <div>
+        <el-button v-show="add" type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button>
+        <!--        <el-button v-show="del" type="danger" icon="el-icon-delete" plain @click="batchDel">删除</el-button>-->
+      </div>
+      <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
+    </div>
+    <el-dialog :visible.sync="dialogFormShow" :title="dialogType==='edit'?'查看':'新增'" width="600px">
+      <el-form ref="form" :rules="rules" :model="form" label-width="110px" style="width: 500px;">
+        <el-form-item label="版本" prop="VERSION">
+          <el-input ref="VERSION" v-model="form.VERSION" maxlength="255" placeholder="这里输入版本..." title="版本"/>
+        </el-form-item>
+        <el-form-item label="文件地址" prop="FILEURL">
+          <el-row v-if="form.FILEURL && form.FILEURL.length >0" style="width: 100%">
+            <el-col :span="12">
+              <a v-if="form.FILEURL" @click="download(form.FILEURL)">下载</a>
+            </el-col>
+          </el-row>
+          <el-row v-else style="width: 100%">
+            <div style="display: flex;">
+              <el-input v-model="form.FILEURLName" :disabled="true" title="文件名称"/>
+              <el-upload
+                :before-upload="beforeListingFileUpload"
+                class="avatar-uploader"
+                action="#">
+                <el-button type="primary" icon="el-icon-upload" style="margin-left:10px; " plain>上传附件</el-button>
+              </el-upload>
+            </div>
+          </el-row>
+        </el-form-item>
+        <el-form-item label="文件类型" prop="FILETYPE">
+          <el-input ref="FILETYPE" v-model="form.FILETYPE" maxlength="255" placeholder="这里输入文件类型..." title="文件类型"/>
+        </el-form-item>
+        <el-form-item label="是否有效" prop="ISEFFECTIVE">
+          <el-radio v-model="form.ISEFFECTIVE" label="1">是</el-radio>
+          <el-radio v-model="form.ISEFFECTIVE" label="2">否</el-radio>
+        </el-form-item>
+        <el-form-item label="是否强制更新" prop="ISUPDATE">
+          <el-radio v-model="form.ISUPDATE" label="1">强制更新</el-radio>
+          <el-radio v-model="form.ISUPDATE" label="2">不强制更新</el-radio>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
+
+    <el-dialog :visible.sync="dialogFormEdit" :title="dialogType==='edit'?'查看':'新增'" width="600px">
+      <el-form ref="form" :rules="rules" :model="form" label-width="110px" style="width: 500px;">
+        <el-form-item label="版本" prop="VERSION">
+          <el-input id="VERSION" ref="VERSION" v-model="form.VERSION" maxlength="255" placeholder="这里输入版本..." title="版本"/>
+        </el-form-item>
+        <el-form-item label="文件地址" prop="FILEURL">
+          <el-row v-if="form.FILEURL && form.FILEURL.length >0" style="width: 100%">
+            <el-col :span="12">
+              <a v-if="form.FILEURL" @click="download(form.FILEURL)">下载</a>
+            </el-col>
+            <el-col :span="12">
+              <el-button @click="chongzhiFujian('FILEURL')">重置</el-button>
+            </el-col>
+          </el-row>
+          <el-row v-else style="width: 100%">
+            <div style="display: flex;">
+              <el-input v-model="form.FILEURLName" :disabled="true" title="文件名称"/>
+              <el-upload
+                :before-upload="beforeListingFileUpload"
+                class="avatar-uploader"
+                accept=".apk"
+                action="#">
+                <el-button type="primary" icon="el-icon-upload" style="margin-left:10px; " plain>上传附件</el-button>
+              </el-upload>
+            </div>
+          </el-row>
+        </el-form-item>
+        <el-form-item label="文件类型" prop="FILETYPE">
+          <el-input id="FILETYPE" ref="FILETYPE" v-model="form.FILETYPE" maxlength="255" disabled placeholder="这里输入文件类型..." title="文件类型"/>
+        </el-form-item>
+        <!--        <el-form-item label="是否有效" prop="ISEFFECTIVE">-->
+        <!--          <el-input id="ISEFFECTIVE" ref="ISEFFECTIVE" v-model="form.ISEFFECTIVE" maxlength="255" placeholder="这里输入是否有效..." title="是否有效"/>-->
+        <!--        </el-form-item>-->
+        <el-form-item label="是否有效" prop="ISEFFECTIVE">
+          <!--          <el-input ref="ISEFFECTIVE" v-model="form.ISEFFECTIVE" maxlength="255" placeholder="这里输入是否有效..." title="是否有效"/>-->
+          <el-radio v-model="form.ISEFFECTIVE" label="1">是</el-radio>
+          <el-radio v-model="form.ISEFFECTIVE" label="2">否</el-radio>
+        </el-form-item>
+        <el-form-item label="是否强制更新" prop="ISUPDATE">
+          <el-radio v-model="form.ISUPDATE" label="1">强制更新</el-radio>
+          <el-radio v-model="form.ISUPDATE" label="2">不强制更新</el-radio>
+          <!--          <el-input id="ISUPDATE" ref="ISUPDATE" v-model="form.ISUPDATE" maxlength="255" placeholder="这里输入是否更新 1,强制更新,2不强制更新..." title="是否更新 1,强制更新,2不强制更新"/>-->
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormEdit = false">取 消</el-button>
+        <el-button type="primary" @click="confirm">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves' // waves directive
+import { upload } from '@/utils/upload'
+export default {
+  components: { Pagination },
+  directives: { waves },
+  data() {
+    return {
+      listLoading: true,
+      add: false,
+      del: false,
+      edit: false,
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      total: 0,
+      KEYWORDS: '',
+      varList: [],
+      pd: [],
+      form: {
+        VERSIONMANAGER_ID: '', // 备注1
+        VERSION: '', // 版本
+        FILEURL: '', // 文件地址
+        FILEURLName: '',
+        FILETYPE: '', // 文件类型
+        OPUSER: '', // 操作人
+        OPTIME: '', // 操作日期
+        ISEFFECTIVE: '', // 是否有效
+        ISUPDATE: ''// 是否更新 1,强制更新,2不强制更新
+      },
+      multipleSelectionAll: [], // 所有选中的数据包含跨页数据
+      multipleSelection: [], // 当前页选中的数据
+      dialogFormEdit: false,
+      dialogFormShow: false,
+      dialogType: 'add',
+      rules: {
+        VERSIONMANAGER_ID: [{ required: true, message: '备注1不能为空', trigger: 'blur' }],
+        VERSION: [{ required: true, message: '版本不能为空', trigger: 'blur' }],
+        FILEURL: [{ required: true, message: '文件地址不能为空', trigger: 'blur' }],
+        FILETYPE: [{ required: true, message: '文件类型不能为空', trigger: 'blur' }],
+        OPUSER: [{ required: true, message: '操作人不能为空', trigger: 'blur' }],
+        OPTIME: [{ required: true, message: '操作日期不能为空', trigger: 'blur' }],
+        ISEFFECTIVE: [{ required: true, message: '是否有效不能为空', trigger: 'blur' }],
+        ISUPDATE: [{ required: true, message: '是否更新 1,强制更新,2不强制更新不能为空', trigger: 'blur' }]
+      },
+      config: config
+    }
+  },
+  created() {
+    this.getList(this.ROLE_ID)
+  },
+  methods: {
+    getRowKey(row) {
+      return row.VERSIONMANAGER_ID
+    },
+    // 搜索
+    getQuery() {
+      this.$refs.multipleTable.clearSelection()
+      this.getList()
+    },
+    getReset() {
+      this.KEYWORDS = null
+      this.getList()
+    },
+    // 获取列表
+    getList() {
+      this.listLoading = true
+      requestFN(
+        '/versionmanager/list?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
+        {
+          KEYWORDS: this.KEYWORDS,
+          ISUPDATE: this.ISUPDATE
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.varList = data.varList
+        this.total = data.page.totalResult
+        this.hasButton()
+        this.pd = data.pd
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    // 添加
+    handleAdd() {
+      this.dialogType = 'add'
+      this.resetForm()
+      this.getDict()
+      this.dialogFormEdit = true
+    },
+    // 查看
+    handleShow(ID) {
+      this.getDict()
+      this.dialogType = 'edit'
+      requestFN(
+        '/versionmanager/goEdit',
+        {
+          VERSIONMANAGER_ID: ID
+        }
+      ).then((data) => {
+        this.form = Object.assign({}, data.pd) // copy obj
+      }).catch((e) => {
+        this.listLoading = false
+      })
+      this.dialogFormShow = true
+    },
+    // 修改
+    handleEdit(ID) {
+      this.getDict()
+      this.dialogType = 'edit'
+      requestFN(
+        '/versionmanager/goEdit',
+        {
+          VERSIONMANAGER_ID: ID
+        }
+      ).then((data) => {
+        this.form = Object.assign({}, data.pd) // copy obj
+      }).catch((e) => {
+        this.listLoading = false
+      })
+      this.dialogFormEdit = true
+    },
+    // 保存
+    confirm() {
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.listLoading = true
+          const formData = new FormData()
+          Object.keys(this.form).map(key => {
+            formData.append(key, this.form[key])
+          })
+          upload(
+            '/versionmanager/' + this.dialogType,
+            formData
+          ).then((data) => {
+            this.listLoading = false
+            this.dialogFormEdit = false
+            this.getList()
+          }).catch((e) => {
+            this.listLoading = false
+          })
+        } else {
+          return false
+        }
+      })
+    },
+
+    handleDelete(id) {
+      this.$confirm('确定要删除吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/versionmanager/delete',
+          {
+            VERSIONMANAGER_ID: id
+          }
+        ).then(() => {
+          this.$message({
+            message: '删除成功',
+            type: 'success'
+          })
+          this.listLoading = false
+          this.varList = []
+          this.listQuery.page = 1
+          this.getList()
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+
+    batchDel() {
+      const _selectData = this.$refs.multipleTable.selection
+      if (_selectData == null || _selectData.length == 0) {
+        this.$message({
+          message: '请选中要删除的项...',
+          type: 'error'
+        })
+        return false
+      }
+      const ids = _selectData.map((item, index) => {
+        return item.VERSIONMANAGER_ID
+      }).join(',')
+
+      this.$confirm('确定要删除选中的数据吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/versionmanager/deleteAll',
+          {
+            DATA_IDS: ids
+          }
+        ).then(() => {
+          this.$message({
+            message: '删除成功',
+            type: 'success'
+          })
+          this.listLoading = false
+          this.varList = []
+          this.listQuery.page = 1
+          this.$refs.multipleTable.clearSelection()
+          this.getList()
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    // 判断按钮权限,用于是否显示按钮
+    hasButton: function() {
+      var keys = 'versionmanager:add,versionmanager:del,versionmanager:edit,toExcel'
+      requestFN(
+        '/head/hasButton',
+        {
+          keys: keys
+        }
+      ).then((data) => {
+        this.add = data.versionmanagerfhadminadd		// 新增权限
+        this.del = data.versionmanagerfhadmindel		// 删除权限
+        this.edit = data.versionmanagerfhadminedit	// 修改权限
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    // 获取数据字典数据
+    getDict: function() {
+    },
+    resetForm() {
+      this.form = {
+        VERSIONMANAGER_ID: '', // 备注1
+        VERSION: '', // 版本
+        FILEURL: '', // 文件地址
+        FILETYPE: 1, // 文件类型
+        OPUSER: '', // 操作人
+        OPTIME: '', // 操作日期
+        ISEFFECTIVE: '', // 是否有效
+        ISDELETE: 0,
+        ISUPDATE: ''// 是否更新 1,强制更新,2不强制更新
+      }
+    },
+    beforeListingFileUpload(file) {
+      const suffix = file.name.substring(file.name.lastIndexOf('.'), file.name.length)
+      if (suffix === '.apk') {
+        this.form.FILEURL = file
+        this.form.FILEURLName = file.name
+        this.$forceUpdate()
+        return false
+      } else {
+        this.$message.warning('请上传apk文件')
+      }
+      return false
+    },
+    // beforeListingFileUpload(file) {
+    //   this.form.FILEURL = file
+    //   this.form.FILEURLName = file.name
+    //   this.$forceUpdate()
+    //   return false
+    // },
+    chongzhiFujian(key) {
+      this.form[key] = ''
+    },
+    download(filePah) {
+      window.open(this.config.fileUrl + filePah, '_blank')
+    }
+  }
+}
+
+</script>
diff --git a/src/views/presystem/version/versionmanagerFirst/index.vue b/src/views/presystem/version/versionmanagerFirst/index.vue
new file mode 100644
index 0000000..08961fc
--- /dev/null
+++ b/src/views/presystem/version/versionmanagerFirst/index.vue
@@ -0,0 +1,474 @@
+<template>
+  <div class="app-container">
+    <div class="filter-container">
+      <el-input v-model="KEYWORDS" placeholder="搜索" class="filter-item" style="width: 200px;"/>
+      <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="getQuery">
+        搜索
+      </el-button>
+      <el-button v-waves class="filter-item" type="success" icon="el-icon-refresh" @click="getReset">
+        重置
+      </el-button>
+    </div>
+    <el-table
+      v-loading="listLoading"
+      ref="multipleTable"
+      :data="varList"
+      :row-key="getRowKey"
+      :header-cell-style="{
+        'font-weight': 'bold',
+        'color': '#000'
+      }"
+      tooltip-effect="dark"
+      border
+      fit
+      highlight-current-row
+    >
+      <el-table-column
+        :reserve-selection="true"
+        type="selection"
+        width="55"
+        align="center"/>
+      <el-table-column type="index" label="序号 " width="50" align="center" />
+      <el-table-column prop="VERSION" label="版本" />
+      <el-table-column prop="FILEURL" label="文件地址">
+        <template slot-scope="{row}">
+          <span v-if="row.FILEURL" @click="download(row.FILEURL)">[下载]</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="FILETYPE" label="文件类型" />
+      <el-table-column prop="OPUSER" label="操作人" />
+      <el-table-column prop="OPTIME" label="操作日期" />
+      <el-table-column prop="ISEFFECTIVE" label="是否有效">
+        <template slot-scope="{row}">
+          <span v-if="row.ISEFFECTIVE =='1'">是</span>
+          <span v-if="row.ISEFFECTIVE =='2'">否</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="ISUPDATE" label="是否强制更新">
+        <template slot-scope="{row}">
+          <span v-if="row.ISUPDATE =='1'">是</span>
+          <span v-if="row.ISUPDATE =='2'">否</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" width="200">
+        <template slot-scope="{row}">
+          <!--          <el-button v-show="edit" type="primary" icon="el-icon-edit" size="mini" @click="handleEdit(row.VERSIONMANAGER_ID)">编辑</el-button>-->
+          <el-button type="primary" icon="el-icon-edit" size="mini" @click="handleShow(row.VERSIONMANAGER_ID)">查看</el-button>
+          <!--          <el-button v-show="del" type="danger" icon="el-icon-delete" size="mini" @click="handleDelete(row.VERSIONMANAGER_ID)">删除</el-button>-->
+          <el-button type="success" icon="el-icon-edit" size="mini" @click="handleCover(row.VERSIONMANAGER_ID)">覆盖</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-btn-group">
+      <div>
+        <el-button v-show="add" type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button>
+        <el-button v-show="del" type="danger" plain @click="goqrcode">二维码</el-button>
+      </div>
+      <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
+    </div>
+    <el-dialog :visible.sync="dialogFormShow" :title="dialogType==='edit'?'':'新增'" width="600px">
+      <el-form ref="form" :rules="rules" :model="form" label-width="110px" style="width: 500px;">
+        <el-form-item label="版本" prop="VERSION">
+          <el-input ref="VERSION" v-model="form.VERSION" maxlength="255" placeholder="这里输入版本..." title="版本"/>
+        </el-form-item>
+        <el-form-item label="文件地址" prop="FILEURL">
+          <el-row v-if="form.FILEURL && form.FILEURL.length >0" style="width: 100%">
+            <el-col :span="12">
+              <a v-if="form.FILEURL" @click="download(form.FILEURL)">下载</a>
+            </el-col>
+          </el-row>
+          <el-row v-else style="width: 100%">
+            <div style="display: flex;">
+              <el-input v-model="form.FILEURLName" :disabled="true" title="文件名称"/>
+              <el-upload
+                :before-upload="beforeListingFileUpload"
+                accept=".apk"
+                class="avatar-uploader"
+                action="#">
+                <el-button type="primary" icon="el-icon-upload" style="margin-left:10px; " plain>上传附件</el-button>
+              </el-upload>
+            </div>
+          </el-row>
+        </el-form-item>
+        <el-form-item label="文件类型" prop="FILETYPE">
+          <el-input ref="FILETYPE" v-model="form.FILETYPE" maxlength="255" placeholder="这里输入文件类型..." title="文件类型"/>
+        </el-form-item>
+        <el-form-item label="是否有效" prop="ISEFFECTIVE">
+          <el-radio v-model="form.ISEFFECTIVE" label="1">是</el-radio>
+          <el-radio v-model="form.ISEFFECTIVE" label="2">否</el-radio>
+        </el-form-item>
+        <el-form-item label="是否强制更新" prop="ISUPDATE">
+          <el-radio v-model="form.ISUPDATE" label="1">强制更新</el-radio>
+          <el-radio v-model="form.ISUPDATE" label="2">不强制更新</el-radio>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
+
+    <el-dialog :visible.sync="dialogFormEdit" :title="dialogType==='edit'?'查看':'新增'" width="600px">
+      <el-form ref="form" :rules="rules" :model="form" label-width="110px" style="width: 500px;">
+        <el-form-item label="版本" prop="VERSION">
+          <el-input id="VERSION" ref="VERSION" v-model="form.VERSION" maxlength="255" placeholder="这里输入版本..." title="版本"/>
+        </el-form-item>
+        <el-form-item label="文件地址" prop="FILEURL">
+          <el-row v-if="form.FILEURL && form.FILEURL.length >0" style="width: 100%">
+            <el-col :span="12">
+              <a v-if="form.FILEURL" @click="download(form.FILEURL)">下载</a>
+            </el-col>
+            <el-col :span="12">
+              <el-button @click="chongzhiFujian('FILEURL')">重置</el-button>
+            </el-col>
+          </el-row>
+          <el-row v-else style="width: 100%">
+            <div style="display: flex;">
+              <el-input v-model="form.FILEURLName" :disabled="true" title="文件名称"/>
+              <el-upload
+                :before-upload="beforeListingFileUpload"
+                accept=".apk"
+                class="avatar-uploader"
+                action="#">
+                <el-button type="primary" icon="el-icon-upload" style="margin-left:10px; " plain>上传附件</el-button>
+              </el-upload>
+            </div>
+          </el-row>
+        </el-form-item>
+        <el-form-item label="文件类型" prop="FILETYPE">
+          <el-input id="FILETYPE" ref="FILETYPE" v-model="form.FILETYPE" maxlength="255" disabled placeholder="这里输入文件类型..." title="文件类型"/>
+        </el-form-item>
+        <!--        <el-form-item label="是否有效" prop="ISEFFECTIVE">-->
+        <!--          <el-input id="ISEFFECTIVE" ref="ISEFFECTIVE" v-model="form.ISEFFECTIVE" maxlength="255" placeholder="这里输入是否有效..." title="是否有效"/>-->
+        <!--        </el-form-item>-->
+        <el-form-item label="是否有效" prop="ISEFFECTIVE">
+          <!--          <el-input ref="ISEFFECTIVE" v-model="form.ISEFFECTIVE" maxlength="255" placeholder="这里输入是否有效..." title="是否有效"/>-->
+          <el-radio v-model="form.ISEFFECTIVE" label="1">是</el-radio>
+          <el-radio v-model="form.ISEFFECTIVE" label="2">否</el-radio>
+        </el-form-item>
+        <el-form-item label="是否强制更新" prop="ISUPDATE">
+          <el-radio v-model="form.ISUPDATE" label="1">强制更新</el-radio>
+          <el-radio v-model="form.ISUPDATE" label="2">不强制更新</el-radio>
+          <!--          <el-input id="ISUPDATE" ref="ISUPDATE" v-model="form.ISUPDATE" maxlength="255" placeholder="这里输入是否更新 1,强制更新,2不强制更新..." title="是否更新 1,强制更新,2不强制更新"/>-->
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormEdit = false">取 消</el-button>
+        <el-button type="primary" @click="confirm">确 定</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :visible.sync="dialogFormQrcode" title="港股一公司APP下载" width="340px">
+      <el-form ref="form" label-width="110px" style="width: 300px;">
+        <vue-qr :text="qrcodeStr" :margin="0" :size="300" color-dark="#000000" color-light="#fff"/>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormQrcode = false">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves' // waves directive
+import { upload } from '@/utils/upload'
+import vueQr from 'vue-qr'
+export default {
+  components: { Pagination, vueQr },
+  directives: { waves },
+  data() {
+    return {
+      listLoading: true,
+      add: false,
+      del: false,
+      edit: false,
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      total: 0,
+      KEYWORDS: '',
+      varList: [],
+      pd: [],
+      form: {
+        VERSIONMANAGER_ID: '', // 备注1
+        VERSION: '', // 版本
+        FILEURL: '', // 文件地址
+        FILEURLName: '',
+        FILETYPE: '', // 文件类型
+        OPUSER: '', // 操作人
+        OPTIME: '', // 操作日期
+        ISEFFECTIVE: '', // 是否有效
+        ISUPDATE: ''// 是否更新 1,强制更新,2不强制更新
+      },
+      multipleSelectionAll: [], // 所有选中的数据包含跨页数据
+      multipleSelection: [], // 当前页选中的数据
+      dialogFormEdit: false,
+      dialogFormShow: false,
+      dialogType: 'add',
+      rules: {
+        VERSIONMANAGER_ID: [{ required: true, message: '备注1不能为空', trigger: 'blur' }],
+        VERSION: [{ required: true, message: '版本不能为空', trigger: 'blur' }],
+        FILEURL: [{ required: true, message: '文件地址不能为空', trigger: 'blur' }],
+        FILETYPE: [{ required: true, message: '文件类型不能为空', trigger: 'blur' }],
+        OPUSER: [{ required: true, message: '操作人不能为空', trigger: 'blur' }],
+        OPTIME: [{ required: true, message: '操作日期不能为空', trigger: 'blur' }],
+        ISEFFECTIVE: [{ required: true, message: '是否有效不能为空', trigger: 'blur' }],
+        ISUPDATE: [{ required: true, message: '是否更新 1,强制更新,2不强制更新不能为空', trigger: 'blur' }]
+      },
+      qrcodeStr: '',
+      dialogFormQrcode: false,
+      config: config
+    }
+  },
+  created() {
+    this.getList(this.ROLE_ID)
+  },
+  methods: {
+    getRowKey(row) {
+      return row.VERSIONMANAGER_ID
+    },
+    // 搜索
+    getQuery() {
+      this.$refs.multipleTable.clearSelection()
+      this.getList()
+    },
+    getReset() {
+      this.KEYWORDS = null
+      this.getList()
+    },
+    // 获取列表
+    getList() {
+      this.listLoading = true
+      requestFN(
+        '/versionmanagerFirst/list?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
+        {
+          KEYWORDS: this.KEYWORDS,
+          ISUPDATE: this.ISUPDATE
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.varList = data.varList
+        this.total = data.page.totalResult
+        this.hasButton()
+        this.pd = data.pd
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    // 添加
+    handleAdd() {
+      this.dialogType = 'add'
+      this.resetForm()
+      this.getDict()
+      this.dialogFormEdit = true
+    },
+    // 查看
+    handleShow(ID) {
+      this.getDict()
+      this.dialogType = 'edit'
+      requestFN(
+        '/versionmanagerFirst/goEdit',
+        {
+          VERSIONMANAGER_ID: ID
+        }
+      ).then((data) => {
+        this.form = Object.assign({}, data.pd) // copy obj
+      }).catch((e) => {
+        this.listLoading = false
+      })
+      this.dialogFormShow = true
+    },
+    // 修改
+    handleEdit(ID) {
+      this.getDict()
+      this.dialogType = 'edit'
+      requestFN(
+        '/versionmanagerFirst/goEdit',
+        {
+          VERSIONMANAGER_ID: ID
+        }
+      ).then((data) => {
+        this.form = Object.assign({}, data.pd) // copy obj
+      }).catch((e) => {
+        this.listLoading = false
+      })
+      this.dialogFormEdit = true
+    },
+    handleCover(ID) {
+      this.$confirm('确定要覆盖现有的扫码版本吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        requestFN(
+          '/versionmanagerFirst/cover',
+          {
+            VERSIONMANAGER_ID: ID
+          }
+        ).then((data) => {
+          this.$message({
+            message: data.result === 'success' ? 'App版本' + data.pd.VERSION + '覆盖成功' : 'App版本' + data.pd.VERSION + '覆盖异常',
+            type: data.result
+          })
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    // 保存
+    confirm() {
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.listLoading = true
+          const formData = new FormData()
+          Object.keys(this.form).map(key => {
+            formData.append(key, this.form[key])
+          })
+          upload(
+            '/versionmanagerFirst/' + this.dialogType,
+            formData
+          ).then((data) => {
+            this.listLoading = false
+            this.dialogFormEdit = false
+            this.getList()
+          }).catch((e) => {
+            this.listLoading = false
+          })
+        } else {
+          return false
+        }
+      })
+    },
+
+    handleDelete(id) {
+      this.$confirm('确定要删除吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/versionmanagerFirst/delete',
+          {
+            VERSIONMANAGER_ID: id
+          }
+        ).then(() => {
+          this.$message({
+            message: '删除成功',
+            type: 'success'
+          })
+          this.listLoading = false
+          this.varList = []
+          this.listQuery.page = 1
+          this.getList()
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+
+    batchDel() {
+      const _selectData = this.$refs.multipleTable.selection
+      if (_selectData == null || _selectData.length == 0) {
+        this.$message({
+          message: '请选中要删除的项...',
+          type: 'error'
+        })
+        return false
+      }
+      const ids = _selectData.map((item, index) => {
+        return item.VERSIONMANAGER_ID
+      }).join(',')
+
+      this.$confirm('确定要删除选中的数据吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/versionmanagerFirst/deleteAll',
+          {
+            DATA_IDS: ids
+          }
+        ).then(() => {
+          this.$message({
+            message: '删除成功',
+            type: 'success'
+          })
+          this.listLoading = false
+          this.varList = []
+          this.listQuery.page = 1
+          this.$refs.multipleTable.clearSelection()
+          this.getList()
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    // 判断按钮权限,用于是否显示按钮
+    hasButton: function() {
+      var keys = 'versionmanager:add,versionmanager:del,versionmanager:edit,toExcel'
+      requestFN(
+        '/head/hasButton',
+        {
+          keys: keys
+        }
+      ).then((data) => {
+        this.add = data.versionmanagerfhadminadd		// 新增权限
+        this.del = data.versionmanagerfhadmindel		// 删除权限
+        this.edit = data.versionmanagerfhadminedit	// 修改权限
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    // 获取数据字典数据
+    getDict: function() {
+    },
+    resetForm() {
+      this.form = {
+        VERSIONMANAGER_ID: '', // 备注1
+        VERSION: '', // 版本
+        FILEURL: '', // 文件地址
+        FILETYPE: 1, // 文件类型
+        OPUSER: '', // 操作人
+        OPTIME: '', // 操作日期
+        ISEFFECTIVE: '', // 是否有效
+        ISDELETE: 0,
+        ISUPDATE: ''// 是否更新 1,强制更新,2不强制更新
+      }
+    },
+    // beforeListingFileUpload(file) {
+    //   this.form.FILEURL = file
+    //   this.form.FILEURLName = file.name
+    //   this.$forceUpdate()
+    //   return false
+    // },
+    beforeListingFileUpload(file) {
+      const suffix = file.name.substring(file.name.lastIndexOf('.'), file.name.length)
+      if (suffix === '.apk') {
+        this.form.FILEURL = file
+        this.form.FILEURLName = file.name
+        this.$forceUpdate()
+        return false
+      } else {
+        this.$message.warning('请上传apk文件')
+      }
+      return false
+    },
+    chongzhiFujian(key) {
+      this.form[key] = ''
+    },
+    // 生成二维码
+    goqrcode() {
+      this.qrcodeStr = config.fileUrl + 'uploadFiles/app/first.apk'
+      this.dialogFormQrcode = true
+    },
+    download(filePah) {
+      window.open(this.config.fileUrl + filePah, '_blank')
+    }
+  }
+}
+
+</script>
diff --git a/src/views/presystem/version/versionmanagerReg/index.vue b/src/views/presystem/version/versionmanagerReg/index.vue
new file mode 100644
index 0000000..47ddc65
--- /dev/null
+++ b/src/views/presystem/version/versionmanagerReg/index.vue
@@ -0,0 +1,433 @@
+<template>
+  <div class="app-container">
+    <div class="filter-container">
+      <el-input v-model="KEYWORDS" placeholder="搜索" class="filter-item" style="width: 200px;"/>
+      <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="getQuery">
+        搜索
+      </el-button>
+      <el-button v-waves class="filter-item" type="success" icon="el-icon-refresh" @click="getReset">
+        重置
+      </el-button>
+    </div>
+    <el-table
+      v-loading="listLoading"
+      ref="multipleTable"
+      :data="varList"
+      :row-key="getRowKey"
+      :header-cell-style="{
+        'font-weight': 'bold',
+        'color': '#000'
+      }"
+      tooltip-effect="dark"
+      border
+      fit
+      highlight-current-row
+    >
+      <el-table-column
+        :reserve-selection="true"
+        type="selection"
+        width="55"
+        align="center"/>
+      <el-table-column type="index" label="序号 " width="50" align="center" />
+      <el-table-column prop="VERSION" label="版本" />
+      <el-table-column prop="FILEURL" label="文件地址">
+        <template slot-scope="{row}">
+          <span v-if="row.FILEURL" @click="download(row.FILEURL)">[下载]</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="FILETYPE" label="文件类型" />
+      <el-table-column prop="OPUSER" label="操作人" />
+      <el-table-column prop="OPTIME" label="操作日期" />
+      <el-table-column prop="ISEFFECTIVE" label="是否有效">
+        <template slot-scope="{row}">
+          <span v-if="row.ISEFFECTIVE =='1'">是</span>
+          <span v-if="row.ISEFFECTIVE =='2'">否</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="ISUPDATE" label="是否强制更新">
+        <template slot-scope="{row}">
+          <span v-if="row.ISUPDATE =='1'">是</span>
+          <span v-if="row.ISUPDATE =='2'">否</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" width="200">
+        <template slot-scope="{row}">
+          <!--          <el-button v-show="edit" type="primary" icon="el-icon-edit" size="mini" @click="handleEdit(row.VERSIONMANAGER_ID)">编辑</el-button>-->
+          <el-button v-show="edit" type="success" icon="el-icon-view" size="mini" @click="handleShow(row.VERSIONMANAGER_ID)">查看</el-button>
+          <!--          <el-button v-show="del" type="danger" icon="el-icon-delete" size="mini" @click="handleDelete(row.VERSIONMANAGER_ID)">删除</el-button>-->
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-btn-group">
+      <div>
+        <el-button v-show="add" type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button>
+        <!--        <el-button v-show="del" type="danger" icon="el-icon-delete" plain @click="batchDel">删除</el-button>-->
+      </div>
+      <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
+    </div>
+    <el-dialog :visible.sync="dialogFormShow" :title="dialogType==='edit'?'查看':'新增'" width="600px">
+      <el-form ref="form" :rules="rules" :model="form" label-width="110px" style="width: 500px;">
+        <el-form-item label="版本" prop="VERSION">
+          <el-input ref="VERSION" v-model="form.VERSION" maxlength="255" placeholder="这里输入版本..." title="版本"/>
+        </el-form-item>
+        <el-form-item label="文件地址" prop="FILEURL">
+          <el-row v-if="form.FILEURL && form.FILEURL.length >0" style="width: 100%">
+            <el-col :span="12">
+              <a v-if="form.FILEURL" @click="download(form.FILEURL)">下载</a>
+            </el-col>
+          </el-row>
+          <el-row v-else style="width: 100%">
+            <div style="display: flex;">
+              <el-input v-model="form.FILEURLName" :disabled="true" title="文件名称"/>
+              <el-upload
+                :before-upload="beforeListingFileUpload"
+                class="avatar-uploader"
+                action="#">
+                <el-button type="primary" icon="el-icon-upload" style="margin-left:10px; " plain>上传附件</el-button>
+              </el-upload>
+            </div>
+          </el-row>
+        </el-form-item>
+        <el-form-item label="文件类型" prop="FILETYPE">
+          <el-input ref="FILETYPE" v-model="form.FILETYPE" maxlength="255" placeholder="这里输入文件类型..." title="文件类型"/>
+        </el-form-item>
+        <el-form-item label="是否有效" prop="ISEFFECTIVE">
+          <el-radio v-model="form.ISEFFECTIVE" label="1">是</el-radio>
+          <el-radio v-model="form.ISEFFECTIVE" label="2">否</el-radio>
+        </el-form-item>
+        <el-form-item label="是否强制更新" prop="ISUPDATE">
+          <el-radio v-model="form.ISUPDATE" label="1">强制更新</el-radio>
+          <el-radio v-model="form.ISUPDATE" label="2">不强制更新</el-radio>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
+
+    <el-dialog :visible.sync="dialogFormEdit" :title="dialogType==='edit'?'查看':'新增'" width="600px">
+      <el-form ref="form" :rules="rules" :model="form" label-width="110px" style="width: 500px;">
+        <el-form-item label="版本" prop="VERSION">
+          <el-input id="VERSION" ref="VERSION" v-model="form.VERSION" maxlength="255" placeholder="这里输入版本..." title="版本"/>
+        </el-form-item>
+        <el-form-item label="文件地址" prop="FILEURL">
+          <el-row v-if="form.FILEURL && form.FILEURL.length >0" style="width: 100%">
+            <el-col :span="12">
+              <a v-if="form.FILEURL" @click="download(form.FILEURL)">下载</a>
+            </el-col>
+            <el-col :span="12">
+              <el-button @click="chongzhiFujian('FILEURL')">重置</el-button>
+            </el-col>
+          </el-row>
+          <el-row v-else style="width: 100%">
+            <div style="display: flex;">
+              <el-input v-model="form.FILEURLName" :disabled="true" title="文件名称"/>
+              <el-upload
+                :before-upload="beforeListingFileUpload"
+                accept=".apk"
+                class="avatar-uploader"
+                action="#">
+                <el-button type="primary" icon="el-icon-upload" style="margin-left:10px; " plain>上传附件</el-button>
+              </el-upload>
+            </div>
+          </el-row>
+        </el-form-item>
+        <el-form-item label="文件类型" prop="FILETYPE">
+          <el-input id="FILETYPE" ref="FILETYPE" v-model="form.FILETYPE" maxlength="255" disabled placeholder="这里输入文件类型..." title="文件类型"/>
+        </el-form-item>
+        <!--        <el-form-item label="是否有效" prop="ISEFFECTIVE">-->
+        <!--          <el-input id="ISEFFECTIVE" ref="ISEFFECTIVE" v-model="form.ISEFFECTIVE" maxlength="255" placeholder="这里输入是否有效..." title="是否有效"/>-->
+        <!--        </el-form-item>-->
+        <el-form-item label="是否有效" prop="ISEFFECTIVE">
+          <!--          <el-input ref="ISEFFECTIVE" v-model="form.ISEFFECTIVE" maxlength="255" placeholder="这里输入是否有效..." title="是否有效"/>-->
+          <el-radio v-model="form.ISEFFECTIVE" label="1">是</el-radio>
+          <el-radio v-model="form.ISEFFECTIVE" label="2">否</el-radio>
+        </el-form-item>
+        <el-form-item label="是否强制更新" prop="ISUPDATE">
+          <el-radio v-model="form.ISUPDATE" label="1">强制更新</el-radio>
+          <el-radio v-model="form.ISUPDATE" label="2">不强制更新</el-radio>
+          <!--          <el-input id="ISUPDATE" ref="ISUPDATE" v-model="form.ISUPDATE" maxlength="255" placeholder="这里输入是否更新 1,强制更新,2不强制更新..." title="是否更新 1,强制更新,2不强制更新"/>-->
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormEdit = false">取 消</el-button>
+        <el-button type="primary" @click="confirm">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves' // waves directive
+import { upload } from '@/utils/upload'
+export default {
+  components: { Pagination },
+  directives: { waves },
+  data() {
+    return {
+      listLoading: true,
+      add: false,
+      del: false,
+      edit: false,
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      total: 0,
+      KEYWORDS: '',
+      varList: [],
+      pd: [],
+      form: {
+        VERSIONMANAGER_ID: '', // 备注1
+        VERSION: '', // 版本
+        FILEURL: '', // 文件地址
+        FILEURLName: '',
+        FILETYPE: '', // 文件类型
+        OPUSER: '', // 操作人
+        OPTIME: '', // 操作日期
+        ISEFFECTIVE: '', // 是否有效
+        ISUPDATE: ''// 是否更新 1,强制更新,2不强制更新
+      },
+      multipleSelectionAll: [], // 所有选中的数据包含跨页数据
+      multipleSelection: [], // 当前页选中的数据
+      dialogFormEdit: false,
+      dialogFormShow: false,
+      dialogType: 'add',
+      rules: {
+        VERSIONMANAGER_ID: [{ required: true, message: '备注1不能为空', trigger: 'blur' }],
+        VERSION: [{ required: true, message: '版本不能为空', trigger: 'blur' }],
+        FILEURL: [{ required: true, message: '文件地址不能为空', trigger: 'blur' }],
+        FILETYPE: [{ required: true, message: '文件类型不能为空', trigger: 'blur' }],
+        OPUSER: [{ required: true, message: '操作人不能为空', trigger: 'blur' }],
+        OPTIME: [{ required: true, message: '操作日期不能为空', trigger: 'blur' }],
+        ISEFFECTIVE: [{ required: true, message: '是否有效不能为空', trigger: 'blur' }],
+        ISUPDATE: [{ required: true, message: '是否更新 1,强制更新,2不强制更新不能为空', trigger: 'blur' }]
+      },
+      config: config
+    }
+  },
+  created() {
+    this.getList(this.ROLE_ID)
+  },
+  methods: {
+    getRowKey(row) {
+      return row.VERSIONMANAGER_ID
+    },
+    // 搜索
+    getQuery() {
+      this.$refs.multipleTable.clearSelection()
+      this.getList()
+    },
+    getReset() {
+      this.KEYWORDS = null
+      this.getList()
+    },
+    // 获取列表
+    getList() {
+      this.listLoading = true
+      requestFN(
+        '/versionmanagerReg/list?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
+        {
+          KEYWORDS: this.KEYWORDS,
+          ISUPDATE: this.ISUPDATE
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.varList = data.varList
+        this.total = data.page.totalResult
+        this.hasButton()
+        this.pd = data.pd
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    // 添加
+    handleAdd() {
+      this.dialogType = 'add'
+      this.resetForm()
+      this.getDict()
+      this.dialogFormEdit = true
+    },
+    // 查看
+    handleShow(ID) {
+      this.getDict()
+      this.dialogType = 'edit'
+      requestFN(
+        '/versionmanagerReg/goEdit',
+        {
+          VERSIONMANAGER_ID: ID
+        }
+      ).then((data) => {
+        this.form = Object.assign({}, data.pd) // copy obj
+      }).catch((e) => {
+        this.listLoading = false
+      })
+      this.dialogFormShow = true
+    },
+    // 修改
+    handleEdit(ID) {
+      this.getDict()
+      this.dialogType = 'edit'
+      requestFN(
+        '/versionmanagerReg/goEdit',
+        {
+          VERSIONMANAGER_ID: ID
+        }
+      ).then((data) => {
+        this.form = Object.assign({}, data.pd) // copy obj
+      }).catch((e) => {
+        this.listLoading = false
+      })
+      this.dialogFormEdit = true
+    },
+    // 保存
+    confirm() {
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.listLoading = true
+          const formData = new FormData()
+          Object.keys(this.form).map(key => {
+            formData.append(key, this.form[key])
+          })
+          upload(
+            '/versionmanagerReg/' + this.dialogType,
+            formData
+          ).then((data) => {
+            this.listLoading = false
+            this.dialogFormEdit = false
+            this.getList()
+          }).catch((e) => {
+            this.listLoading = false
+          })
+        } else {
+          return false
+        }
+      })
+    },
+
+    handleDelete(id) {
+      this.$confirm('确定要删除吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/versionmanagerReg/delete',
+          {
+            VERSIONMANAGER_ID: id
+          }
+        ).then(() => {
+          this.$message({
+            message: '删除成功',
+            type: 'success'
+          })
+          this.listLoading = false
+          this.varList = []
+          this.listQuery.page = 1
+          this.getList()
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+
+    batchDel() {
+      const _selectData = this.$refs.multipleTable.selection
+      if (_selectData == null || _selectData.length == 0) {
+        this.$message({
+          message: '请选中要删除的项...',
+          type: 'error'
+        })
+        return false
+      }
+      const ids = _selectData.map((item, index) => {
+        return item.VERSIONMANAGER_ID
+      }).join(',')
+
+      this.$confirm('确定要删除选中的数据吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/versionmanagerReg/deleteAll',
+          {
+            DATA_IDS: ids
+          }
+        ).then(() => {
+          this.$message({
+            message: '删除成功',
+            type: 'success'
+          })
+          this.listLoading = false
+          this.varList = []
+          this.listQuery.page = 1
+          this.$refs.multipleTable.clearSelection()
+          this.getList()
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    // 判断按钮权限,用于是否显示按钮
+    hasButton: function() {
+      var keys = 'versionmanager:add,versionmanager:del,versionmanager:edit,toExcel'
+      requestFN(
+        '/head/hasButton',
+        {
+          keys: keys
+        }
+      ).then((data) => {
+        this.add = data.versionmanagerfhadminadd		// 新增权限
+        this.del = data.versionmanagerfhadmindel		// 删除权限
+        this.edit = data.versionmanagerfhadminedit	// 修改权限
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    // 获取数据字典数据
+    getDict: function() {
+    },
+    resetForm() {
+      this.form = {
+        VERSIONMANAGER_ID: '', // 备注1
+        VERSION: '', // 版本
+        FILEURL: '', // 文件地址
+        FILETYPE: 1, // 文件类型
+        OPUSER: '', // 操作人
+        OPTIME: '', // 操作日期
+        ISEFFECTIVE: '', // 是否有效
+        ISDELETE: 0,
+        ISUPDATE: ''// 是否更新 1,强制更新,2不强制更新
+      }
+    },
+    beforeListingFileUpload(file) {
+      const suffix = file.name.substring(file.name.lastIndexOf('.'), file.name.length)
+      if (suffix === '.apk') {
+        this.form.FILEURL = file
+        this.form.FILEURLName = file.name
+        this.$forceUpdate()
+        return false
+      } else {
+        this.$message.warning('请上传apk文件')
+      }
+      return false
+    },
+    // beforeListingFileUpload(file) {
+    //   this.form.FILEURL = file
+    //   this.form.FILEURLName = file.name
+    //   this.$forceUpdate()
+    //   return false
+    // },
+    chongzhiFujian(key) {
+      this.form[key] = ''
+    },
+    download(filePah) {
+      window.open(this.config.fileUrl + filePah, '_blank')
+    }
+  }
+}
+
+</script>
diff --git a/src/views/presystem/version/versionmanagerZdgc/index.vue b/src/views/presystem/version/versionmanagerZdgc/index.vue
new file mode 100644
index 0000000..58ec096
--- /dev/null
+++ b/src/views/presystem/version/versionmanagerZdgc/index.vue
@@ -0,0 +1,433 @@
+<template>
+  <div class="app-container">
+    <div class="filter-container">
+      <el-input v-model="KEYWORDS" placeholder="搜索" class="filter-item" style="width: 200px;"/>
+      <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="getQuery">
+        搜索
+      </el-button>
+      <el-button v-waves class="filter-item" type="success" icon="el-icon-refresh" @click="getReset">
+        重置
+      </el-button>
+    </div>
+    <el-table
+      v-loading="listLoading"
+      ref="multipleTable"
+      :data="varList"
+      :row-key="getRowKey"
+      :header-cell-style="{
+        'font-weight': 'bold',
+        'color': '#000'
+      }"
+      tooltip-effect="dark"
+      border
+      fit
+      highlight-current-row
+    >
+      <el-table-column
+        :reserve-selection="true"
+        type="selection"
+        width="55"
+        align="center"/>
+      <el-table-column type="index" label="序号 " width="50" align="center" />
+      <el-table-column prop="VERSION" label="版本" />
+      <el-table-column prop="FILEURL" label="文件地址">
+        <template slot-scope="{row}">
+          <span v-if="row.FILEURL" @click="download(row.FILEURL)">[下载]</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="FILETYPE" label="文件类型" />
+      <el-table-column prop="OPUSER" label="操作人" />
+      <el-table-column prop="OPTIME" label="操作日期" />
+      <el-table-column prop="ISEFFECTIVE" label="是否有效">
+        <template slot-scope="{row}">
+          <span v-if="row.ISEFFECTIVE =='1'">是</span>
+          <span v-if="row.ISEFFECTIVE =='2'">否</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="ISUPDATE" label="是否强制更新">
+        <template slot-scope="{row}">
+          <span v-if="row.ISUPDATE =='1'">是</span>
+          <span v-if="row.ISUPDATE =='2'">否</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" width="200">
+        <template slot-scope="{row}">
+          <!--          <el-button v-show="edit" type="primary" icon="el-icon-edit" size="mini" @click="handleEdit(row.VERSIONMANAGER_ID)">编辑</el-button>-->
+          <el-button v-show="edit" type="success" icon="el-icon-view" size="mini" @click="handleShow(row.VERSIONMANAGER_ID)">查看</el-button>
+          <!--          <el-button v-show="del" type="danger" icon="el-icon-delete" size="mini" @click="handleDelete(row.VERSIONMANAGER_ID)">删除</el-button>-->
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-btn-group">
+      <div>
+        <el-button v-show="add" type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button>
+        <!--        <el-button v-show="del" type="danger" icon="el-icon-delete" plain @click="batchDel">删除</el-button>-->
+      </div>
+      <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
+    </div>
+    <el-dialog :visible.sync="dialogFormShow" :title="dialogType==='edit'?'查看':'新增'" width="600px">
+      <el-form ref="form" :rules="rules" :model="form" label-width="110px" style="width: 500px;">
+        <el-form-item label="版本" prop="VERSION">
+          <el-input ref="VERSION" v-model="form.VERSION" maxlength="255" placeholder="这里输入版本..." title="版本"/>
+        </el-form-item>
+        <el-form-item label="文件地址" prop="FILEURL">
+          <el-row v-if="form.FILEURL && form.FILEURL.length >0" style="width: 100%">
+            <el-col :span="12">
+              <a v-if="form.FILEURL" @click="download(form.FILEURL)">下载</a>
+            </el-col>
+          </el-row>
+          <el-row v-else style="width: 100%">
+            <div style="display: flex;">
+              <el-input v-model="form.FILEURLName" :disabled="true" title="文件名称"/>
+              <el-upload
+                :before-upload="beforeListingFileUpload"
+                class="avatar-uploader"
+                action="#">
+                <el-button type="primary" icon="el-icon-upload" style="margin-left:10px; " plain>上传附件</el-button>
+              </el-upload>
+            </div>
+          </el-row>
+        </el-form-item>
+        <el-form-item label="文件类型" prop="FILETYPE">
+          <el-input ref="FILETYPE" v-model="form.FILETYPE" maxlength="255" placeholder="这里输入文件类型..." title="文件类型"/>
+        </el-form-item>
+        <el-form-item label="是否有效" prop="ISEFFECTIVE">
+          <el-radio v-model="form.ISEFFECTIVE" label="1">是</el-radio>
+          <el-radio v-model="form.ISEFFECTIVE" label="2">否</el-radio>
+        </el-form-item>
+        <el-form-item label="是否强制更新" prop="ISUPDATE">
+          <el-radio v-model="form.ISUPDATE" label="1">强制更新</el-radio>
+          <el-radio v-model="form.ISUPDATE" label="2">不强制更新</el-radio>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
+
+    <el-dialog :visible.sync="dialogFormEdit" :title="dialogType==='edit'?'查看':'新增'" width="600px">
+      <el-form ref="form" :rules="rules" :model="form" label-width="110px" style="width: 500px;">
+        <el-form-item label="版本" prop="VERSION">
+          <el-input id="VERSION" ref="VERSION" v-model="form.VERSION" maxlength="255" placeholder="这里输入版本..." title="版本"/>
+        </el-form-item>
+        <el-form-item label="文件地址" prop="FILEURL">
+          <el-row v-if="form.FILEURL && form.FILEURL.length >0" style="width: 100%">
+            <el-col :span="12">
+              <a v-if="form.FILEURL" @click="download(form.FILEURL)">下载</a>
+            </el-col>
+            <el-col :span="12">
+              <el-button @click="chongzhiFujian('FILEURL')">重置</el-button>
+            </el-col>
+          </el-row>
+          <el-row v-else style="width: 100%">
+            <div style="display: flex;">
+              <el-input v-model="form.FILEURLName" :disabled="true" title="文件名称"/>
+              <el-upload
+                :before-upload="beforeListingFileUpload"
+                class="avatar-uploader"
+                accept=".apk"
+                action="#">
+                <el-button type="primary" icon="el-icon-upload" style="margin-left:10px; " plain>上传附件</el-button>
+              </el-upload>
+            </div>
+          </el-row>
+        </el-form-item>
+        <el-form-item label="文件类型" prop="FILETYPE">
+          <el-input id="FILETYPE" ref="FILETYPE" v-model="form.FILETYPE" maxlength="255" disabled placeholder="这里输入文件类型..." title="文件类型"/>
+        </el-form-item>
+        <!--        <el-form-item label="是否有效" prop="ISEFFECTIVE">-->
+        <!--          <el-input id="ISEFFECTIVE" ref="ISEFFECTIVE" v-model="form.ISEFFECTIVE" maxlength="255" placeholder="这里输入是否有效..." title="是否有效"/>-->
+        <!--        </el-form-item>-->
+        <el-form-item label="是否有效" prop="ISEFFECTIVE">
+          <!--          <el-input ref="ISEFFECTIVE" v-model="form.ISEFFECTIVE" maxlength="255" placeholder="这里输入是否有效..." title="是否有效"/>-->
+          <el-radio v-model="form.ISEFFECTIVE" label="1">是</el-radio>
+          <el-radio v-model="form.ISEFFECTIVE" label="2">否</el-radio>
+        </el-form-item>
+        <el-form-item label="是否强制更新" prop="ISUPDATE">
+          <el-radio v-model="form.ISUPDATE" label="1">强制更新</el-radio>
+          <el-radio v-model="form.ISUPDATE" label="2">不强制更新</el-radio>
+          <!--          <el-input id="ISUPDATE" ref="ISUPDATE" v-model="form.ISUPDATE" maxlength="255" placeholder="这里输入是否更新 1,强制更新,2不强制更新..." title="是否更新 1,强制更新,2不强制更新"/>-->
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormEdit = false">取 消</el-button>
+        <el-button type="primary" @click="confirm">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
+import { requestFN } from '@/utils/request'
+import waves from '@/directive/waves' // waves directive
+import { upload } from '@/utils/upload'
+export default {
+  components: { Pagination },
+  directives: { waves },
+  data() {
+    return {
+      listLoading: true,
+      add: false,
+      del: false,
+      edit: false,
+      listQuery: {
+        page: 1,
+        limit: 20
+      },
+      total: 0,
+      KEYWORDS: '',
+      varList: [],
+      pd: [],
+      form: {
+        VERSIONMANAGER_ID: '', // 备注1
+        VERSION: '', // 版本
+        FILEURL: '', // 文件地址
+        FILEURLName: '',
+        FILETYPE: '', // 文件类型
+        OPUSER: '', // 操作人
+        OPTIME: '', // 操作日期
+        ISEFFECTIVE: '', // 是否有效
+        ISUPDATE: ''// 是否更新 1,强制更新,2不强制更新
+      },
+      multipleSelectionAll: [], // 所有选中的数据包含跨页数据
+      multipleSelection: [], // 当前页选中的数据
+      dialogFormEdit: false,
+      dialogFormShow: false,
+      dialogType: 'add',
+      rules: {
+        VERSIONMANAGER_ID: [{ required: true, message: '备注1不能为空', trigger: 'blur' }],
+        VERSION: [{ required: true, message: '版本不能为空', trigger: 'blur' }],
+        FILEURL: [{ required: true, message: '文件地址不能为空', trigger: 'blur' }],
+        FILETYPE: [{ required: true, message: '文件类型不能为空', trigger: 'blur' }],
+        OPUSER: [{ required: true, message: '操作人不能为空', trigger: 'blur' }],
+        OPTIME: [{ required: true, message: '操作日期不能为空', trigger: 'blur' }],
+        ISEFFECTIVE: [{ required: true, message: '是否有效不能为空', trigger: 'blur' }],
+        ISUPDATE: [{ required: true, message: '是否更新 1,强制更新,2不强制更新不能为空', trigger: 'blur' }]
+      },
+      config: config
+    }
+  },
+  created() {
+    this.getList(this.ROLE_ID)
+  },
+  methods: {
+    getRowKey(row) {
+      return row.VERSIONMANAGER_ID
+    },
+    // 搜索
+    getQuery() {
+      this.$refs.multipleTable.clearSelection()
+      this.getList()
+    },
+    getReset() {
+      this.KEYWORDS = null
+      this.getList()
+    },
+    // 获取列表
+    getList() {
+      this.listLoading = true
+      requestFN(
+        '/versionmanagerXgf/list?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
+        {
+          KEYWORDS: this.KEYWORDS,
+          ISUPDATE: this.ISUPDATE
+        }
+      ).then((data) => {
+        this.listLoading = false
+        this.varList = data.varList
+        this.total = data.page.totalResult
+        this.hasButton()
+        this.pd = data.pd
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    // 添加
+    handleAdd() {
+      this.dialogType = 'add'
+      this.resetForm()
+      this.getDict()
+      this.dialogFormEdit = true
+    },
+    // 查看
+    handleShow(ID) {
+      this.getDict()
+      this.dialogType = 'edit'
+      requestFN(
+        '/versionmanagerXgf/goEdit',
+        {
+          VERSIONMANAGER_ID: ID
+        }
+      ).then((data) => {
+        this.form = Object.assign({}, data.pd) // copy obj
+      }).catch((e) => {
+        this.listLoading = false
+      })
+      this.dialogFormShow = true
+    },
+    // 修改
+    handleEdit(ID) {
+      this.getDict()
+      this.dialogType = 'edit'
+      requestFN(
+        '/versionmanagerXgf/goEdit',
+        {
+          VERSIONMANAGER_ID: ID
+        }
+      ).then((data) => {
+        this.form = Object.assign({}, data.pd) // copy obj
+      }).catch((e) => {
+        this.listLoading = false
+      })
+      this.dialogFormEdit = true
+    },
+    // 保存
+    confirm() {
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.listLoading = true
+          const formData = new FormData()
+          Object.keys(this.form).map(key => {
+            formData.append(key, this.form[key])
+          })
+          upload(
+            '/versionmanagerXgf/' + this.dialogType,
+            formData
+          ).then((data) => {
+            this.listLoading = false
+            this.dialogFormEdit = false
+            this.getList()
+          }).catch((e) => {
+            this.listLoading = false
+          })
+        } else {
+          return false
+        }
+      })
+    },
+
+    handleDelete(id) {
+      this.$confirm('确定要删除吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/versionmanagerXgf/delete',
+          {
+            VERSIONMANAGER_ID: id
+          }
+        ).then(() => {
+          this.$message({
+            message: '删除成功',
+            type: 'success'
+          })
+          this.listLoading = false
+          this.varList = []
+          this.listQuery.page = 1
+          this.getList()
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+
+    batchDel() {
+      const _selectData = this.$refs.multipleTable.selection
+      if (_selectData == null || _selectData.length == 0) {
+        this.$message({
+          message: '请选中要删除的项...',
+          type: 'error'
+        })
+        return false
+      }
+      const ids = _selectData.map((item, index) => {
+        return item.VERSIONMANAGER_ID
+      }).join(',')
+
+      this.$confirm('确定要删除选中的数据吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.listLoading = true
+        requestFN(
+          '/versionmanagerXgf/deleteAll',
+          {
+            DATA_IDS: ids
+          }
+        ).then(() => {
+          this.$message({
+            message: '删除成功',
+            type: 'success'
+          })
+          this.listLoading = false
+          this.varList = []
+          this.listQuery.page = 1
+          this.$refs.multipleTable.clearSelection()
+          this.getList()
+        }).catch((e) => {
+          this.listLoading = false
+        })
+      }).catch(() => {
+      })
+    },
+    // 判断按钮权限,用于是否显示按钮
+    hasButton: function() {
+      var keys = 'versionmanager:add,versionmanager:del,versionmanager:edit,toExcel'
+      requestFN(
+        '/head/hasButton',
+        {
+          keys: keys
+        }
+      ).then((data) => {
+        this.add = data.versionmanagerfhadminadd		// 新增权限
+        this.del = data.versionmanagerfhadmindel		// 删除权限
+        this.edit = data.versionmanagerfhadminedit	// 修改权限
+      }).catch((e) => {
+        this.listLoading = false
+      })
+    },
+    // 获取数据字典数据
+    getDict: function() {
+    },
+    resetForm() {
+      this.form = {
+        VERSIONMANAGER_ID: '', // 备注1
+        VERSION: '', // 版本
+        FILEURL: '', // 文件地址
+        FILETYPE: 1, // 文件类型
+        OPUSER: '', // 操作人
+        OPTIME: '', // 操作日期
+        ISEFFECTIVE: '', // 是否有效
+        ISDELETE: 0,
+        ISUPDATE: ''// 是否更新 1,强制更新,2不强制更新
+      }
+    },
+    beforeListingFileUpload(file) {
+      const suffix = file.name.substring(file.name.lastIndexOf('.'), file.name.length)
+      if (suffix === '.apk') {
+        this.form.FILEURL = file
+        this.form.FILEURLName = file.name
+        this.$forceUpdate()
+        return false
+      } else {
+        this.$message.warning('请上传apk文件')
+      }
+      return false
+    },
+    // beforeListingFileUpload(file) {
+    //   this.form.FILEURL = file
+    //   this.form.FILEURLName = file.name
+    //   this.$forceUpdate()
+    //   return false
+    // },
+    chongzhiFujian(key) {
+      this.form[key] = ''
+    },
+    download(filePah) {
+      window.open(this.config.fileUrl + filePah, '_blank')
+    }
+  }
+}
+
+</script>