From 6516ed63ff4128d1b3b52c00537539be369ce6ee Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期二, 02 七月 2024 16:28:03 +0800
Subject: [PATCH] #

---
 zy-asrs-admin/src/views/system/dept/index.vue                    |  261 +++++++++++++++++++++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/CodeBuilder.java |    4 
 zy-asrs-admin/src/views/system/menu/index.vue                    |   61 +++-
 zy-asrs-admin/src/views/system/user/index.vue                    |  200 ++++++++--------
 zy-asrs-admin/src/locales/en_US.js                               |   27 ++
 zy-asrs-wms/src/main/java/dept.sql                               |    9 
 zy-asrs-admin/src/views/system/dept/edit.vue                     |  118 +++++++++
 zy-asrs-admin/src/views/system/menu/edit.vue                     |   40 ++
 8 files changed, 594 insertions(+), 126 deletions(-)

diff --git a/zy-asrs-admin/src/locales/en_US.js b/zy-asrs-admin/src/locales/en_US.js
index 56c5dbc..3cf6b4f 100644
--- a/zy-asrs-admin/src/locales/en_US.js
+++ b/zy-asrs-admin/src/locales/en_US.js
@@ -147,4 +147,31 @@
     'db.sys_role.create_time':'CreateTime',
     'db.sys_role.update_time':'UpdateTime',
     'db.sys_role.memo':'Memo',
+    '':'',
+    '':'',
+    '':'',
+    '':'',
+    '':'',
+    '':'',
+    'db.sys_menu.name':'Name',
+    'db.sys_menu.route':'Route',
+    'db.sys_menu.status':'Status',
+    'db.sys_menu.create_time':'CreateTime',
+    'db.sys_menu.update_time':'UpdateTime',
+    'db.sys_menu.type':'Type',
+    'db.sys_menu.authority':'Authority',
+    'db.sys_menu.icon':'Icon',
+    'db.sys_menu.sort':'Sort',
+    '':'',
+    '':'',
+    '':'',
+    '':'',
+    '':'',
+    '':'',
+    'db.sys_dept.name':'Name',
+    'db.sys_dept.leader':'Leader',
+    'db.sys_dept.status':'Status',
+    'db.sys_dept.update_time':'UpdateTime',
+    'db.sys_dept.update_by':'UpdateBy',
+    'db.sys_dept.sort':'Sort',
 };
\ No newline at end of file
diff --git a/zy-asrs-admin/src/views/system/dept/edit.vue b/zy-asrs-admin/src/views/system/dept/edit.vue
new file mode 100644
index 0000000..b7b5ee0
--- /dev/null
+++ b/zy-asrs-admin/src/views/system/dept/edit.vue
@@ -0,0 +1,118 @@
+<script setup>
+import { ref, nextTick } from 'vue';
+import { get, post, postBlob, postForm } from '@/utils/request.js'
+import { formatMessage } from '@/utils/localeUtils.js';
+import { message } from 'ant-design-vue';
+
+const submitButton = ref(null);
+const isSave = ref(true);
+const open = ref(false);
+const initFormData = {}
+let formData = ref(initFormData);
+const treeData = ref(null);
+
+const emit = defineEmits(['tableReload'])
+
+const handleOk = (e) => {
+    nextTick(() => {
+        setTimeout(() => {
+            submitButton.value.$el.click();
+        }, 100);
+    });
+};
+
+const onFinish = values => {
+    // console.log('Success:', values);
+    open.value = false;
+    post(isSave.value ? '/api/dept/save' : '/api/dept/update', formData.value).then((resp) => {
+        let result = resp.data;
+        if (result.code === 200) {
+            message.success(formatMessage('page.update.success', '鏇存柊鎴愬姛'));
+        } else {
+            message.error(result.msg);
+        }
+        emit('tableReload', 'reload')
+    })
+};
+const onFinishFailed = errorInfo => {
+    console.log('Failed:', errorInfo);
+};
+
+const UserQueryList = ref(null);
+UserQuery();
+function UserQuery() {
+    postForm('/api/user/query', {}).then(resp => {
+        let result = resp.data;
+        UserQueryList.value = result.data;
+    })
+}
+
+
+defineExpose({
+    open,
+    formData,
+    initFormData,
+    treeData,
+    isSave,
+})
+
+</script>
+
+<script>
+export default {
+    name: '閮ㄩ棬绠$悊-edit'
+}
+</script>
+
+<template>
+    <div>
+        <a-modal v-model:open="open"
+            :title="isSave ? formatMessage('page.add', '娣诲姞') : formatMessage('page.edit', '缂栬緫')" @ok="handleOk"
+            style="width: 600px;">
+            <a-form :model="formData" name="formTable" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }"
+                style="display: flex;justify-content: space-between;flex-wrap: wrap;" autocomplete="off"
+                @finish="onFinish" @finishFailed="onFinishFailed">
+                <a-form-item label="涓婄骇閮ㄩ棬" name="parentId" style="width: 250px;"
+                    :rules="[{ required: true, message: '涓婄骇鑿滃崟涓嶈兘涓虹┖!' }]">
+                    <a-tree-select v-model:value="formData.parentId" show-search style="width: 100%"
+                        :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" :placeholder="formatMessage('page.input', '璇疯緭鍏�')"
+                        allow-clea tree-data-simple-mode :tree-data="treeData" tree-node-filter-prop="name"
+                        :field-names="{
+                            children: 'children',
+                            label: 'name',
+                            value: 'id',
+                        }">
+                        <template #title="{ value: id, name }">
+                            {{ name }}
+                        </template>
+                    </a-tree-select>
+                </a-form-item>
+                <a-form-item label="閮ㄩ棬鍚嶇О" name="name" style="width: 250px;" :rules="[{ required: true }]">
+                    <a-input v-model:value="formData.name" />
+                </a-form-item>
+                <a-form-item label="璐熻矗浜�" name="leader" style="width: 250px;">
+                    <a-input v-model:value="formData.leader" />
+                </a-form-item>
+                <a-form-item label="鎺掑簭" name="sort" style="width: 250px;">
+                    <a-input v-model:value="formData.sort" />
+                </a-form-item>
+                <a-form-item label="鐘舵��" name="status" style="width: 250px;">
+                    <a-select v-model:value="formData.status" :options="[
+                        { label: '姝e父', value: 1 },
+                        { label: '绂佺敤', value: 0 },
+                    ]">
+                    </a-select>
+                </a-form-item>
+                <a-form-item label="澶囨敞" name="memo" style="width: 250px;">
+                    <a-input v-model:value="formData.memo" />
+                </a-form-item>
+                <a-form-item>
+                    <a-button type="primary" html-type="submit" ref="submitButton"
+                        style="visibility: hidden;">Submit</a-button>
+                </a-form-item>
+            </a-form>
+        </a-modal>
+    </div>
+</template>
+
+<style></style>
diff --git a/zy-asrs-admin/src/views/system/dept/index.vue b/zy-asrs-admin/src/views/system/dept/index.vue
new file mode 100644
index 0000000..235c238
--- /dev/null
+++ b/zy-asrs-admin/src/views/system/dept/index.vue
@@ -0,0 +1,261 @@
+<script setup>
+import { getCurrentInstance, ref, computed, reactive } from 'vue';
+import { useRouter } from "vue-router";
+import { get, post, postBlob } from '@/utils/request.js'
+import { message, Modal } from 'ant-design-vue';
+import { logout } from '@/config.js';
+import EditView from './edit.vue'
+import { formatMessage } from '@/utils/localeUtils.js';
+const context = getCurrentInstance()?.appContext.config.globalProperties;
+
+const router = useRouter();
+
+const TABLE_KEY = 'table-dept';
+let currentPage = 1;
+let pageSize = 10;
+const searchInput = ref("")
+const editChild = ref(null)
+
+let tableData = ref([]);
+getPage();
+
+const columns = [
+  {
+    title: formatMessage('db.sys_dept.name', '鍚嶇О'),
+    dataIndex: 'name',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_dept.parent_id', '涓婄骇閮ㄩ棬'),
+    dataIndex: 'parentId',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_dept.parent_name', '涓婄骇閮ㄩ棬鍚�'),
+    dataIndex: 'parentName',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_dept.path', '鍏宠仈璺緞'),
+    dataIndex: 'path',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_dept.path_name', '鍏宠仈璺緞鍚�'),
+    dataIndex: 'pathName',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_dept.full_name', '鍏ㄧО'),
+    dataIndex: 'fullName',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_dept.brief', '绠�杩�'),
+    dataIndex: 'brief',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_dept.code', '鏍囪瘑'),
+    dataIndex: 'code',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_dept.type', '绫诲瀷'),
+    dataIndex: 'type',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_dept.leader', '璐熻矗浜�'),
+    dataIndex: 'leader',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_dept.count', '鏁伴噺'),
+    dataIndex: 'count',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_dept.sort', '鎺掑簭'),
+    dataIndex: 'sort',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_dept.status', '鐘舵��'),
+    dataIndex: 'status$',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_dept.create_time', '娣诲姞鏃堕棿'),
+    dataIndex: 'createTime$',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_dept.create_by', '娣诲姞浜哄憳'),
+    dataIndex: 'createBy$',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_dept.update_time', '淇敼鏃堕棿'),
+    dataIndex: 'updateTime$',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_dept.update_by', '淇敼浜哄憳'),
+    dataIndex: 'updateBy$',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_dept.memo', '澶囨敞'),
+    dataIndex: 'memo',
+    width: 140,
+  },
+
+  {
+    title: formatMessage('common.operation', '鎿嶄綔'),
+    name: 'oper',
+    dataIndex: 'oper',
+    key: 'oper',
+    width: 140,
+  },
+];
+
+const state = reactive({
+  selectedRowKeys: [],
+  loading: false,
+});
+const hasSelected = computed(() => state.selectedRowKeys.length > 0);
+const start = () => {
+  state.loading = true;
+  // ajax request after empty completing
+  setTimeout(() => {
+    state.loading = false;
+    state.selectedRowKeys = [];
+  }, 1000);
+};
+const onSelectChange = selectedRowKeys => {
+  // console.log('selectedRowKeys changed: ', selectedRowKeys);
+  state.selectedRowKeys = selectedRowKeys;
+};
+
+function getPage() {
+  post('/api/dept/tree', {
+    current: currentPage,
+    pageSize: pageSize,
+    condition: searchInput.value
+  }).then((resp) => {
+    let result = resp.data;
+    if (result.code == 200) {
+      let data = result.data;
+      tableData.value = data;
+
+      editChild.value.treeData = [{
+        id: 0,
+        name: '鏍圭洰褰�',
+        children: data
+      }];
+    } else if (result.code === 401) {
+      message.error(result.msg);
+      logout()
+    } else {
+      message.error(result.msg);
+    }
+  })
+}
+
+const handleEdit = (item) => {
+  editChild.value.open = true;
+  editChild.value.formData = item == null ? editChild.value.initFormData : JSON.parse(JSON.stringify(item));
+  editChild.value.isSave = item == null;
+}
+
+const handleDel = (rows) => {
+  Modal.confirm({
+    title: formatMessage('page.delete', '鍒犻櫎'),
+    content: formatMessage('page.delete.confirm', '纭畾鍒犻櫎璇ラ」鍚楋紵'),
+    maskClosable: true,
+    onOk: async () => {
+      const hide = message.loading(formatMessage('common.loading', '璇锋眰涓�'));
+      try {
+        post('/api/dept/remove/' + rows.map((row) => row.id).join(','), {}).then(resp => {
+          let result = resp.data;
+          if (result.code === 200) {
+            message.success(result.msg);
+          } else {
+            message.error(result.msg);
+          }
+          getPage()
+          hide()
+        })
+      } catch (error) {
+        message.error(formatMessage('common.fail', '璇锋眰澶辫触'));
+      }
+    },
+  });
+}
+
+const handleExport = async (intl) => {
+  postBlob('/api/dept/export', {}).then(result => {
+    const blob = new Blob([result.data], { type: 'application/vnd.ms-excel' });
+    window.location.href = window.URL.createObjectURL(blob);
+    return true;
+  })
+};
+
+const onSearch = () => {
+  // console.log('search');
+  getPage()
+}
+
+const onPageChange = (page, size) => {
+  currentPage = page;
+  pageSize = size;
+  getPage();
+}
+
+function handleTableReload(value) {
+  getPage()
+}
+
+</script>
+
+<script>
+export default {
+  name: '閮ㄩ棬绠$悊'
+}
+</script>
+
+<template>
+  <div>
+    <EditView ref="editChild" @tableReload="handleTableReload" />
+    <div class="table-header">
+      <a-input-search v-model:value="searchInput" :placeholder="formatMessage('page.input', '璇疯緭鍏�')"
+        style="width: 200px;" @search="onSearch" />
+      <div class="table-header-right">
+        <a-button @click="handleEdit(null)" type="primary">{{ formatMessage('page.add', '娣诲姞') }}</a-button>
+        <a-button @click="handleExport">{{ formatMessage('page.export', '瀵煎嚭') }}</a-button>
+      </div>
+    </div>
+
+    <a-table :row-selection="{ selectedRowKeys: state.selectedRowKeys, onChange: onSelectChange }"
+      :data-source="tableData" :defaultExpandAllRows="false" key="menu" rowKey="id">
+      <a-table-column :title="formatMessage('db.sys_dept.name', '閮ㄩ棬鍚嶇О')" key="name" data-index="name" />
+      <a-table-column :title="formatMessage('db.sys_dept.leader', '璐熻矗浜�')" key="leader" data-index="leader" />
+      <a-table-column :title="formatMessage('db.sys_dept.sort', '鎺掑簭')" key="sort" data-index="sort" />
+      <a-table-column :title="formatMessage('db.sys_dept.status', '鐘舵��')" key="status$" data-index="status$" />
+      <a-table-column :title="formatMessage('db.sys_dept.update_time', '淇敼鏃堕棿')" key="updateTime$" data-index="updateTime$" />
+      <a-table-column :title="formatMessage('db.sys_dept.update_by', '淇敼浜哄憳')" key="updateBy$" data-index="updateBy$" />
+      <a-table-column :title="formatMessage('common.operation', '鎿嶄綔')" key="oper" data-index="oper">
+        <template #default="{ record }">
+          <div style="display: flex;justify-content: space-evenly;">
+            <a-button type="link" primary @click="handleEdit(record)">{{ formatMessage('page.edit', '缂栬緫') }}</a-button>
+            <a-button type="link" danger @click="handleDel([record])">{{ formatMessage('page.delete', '鍒犻櫎')
+              }}</a-button>
+          </div>
+        </template>
+      </a-table-column>
+    </a-table>
+  </div>
+</template>
+
+<style></style>
diff --git a/zy-asrs-admin/src/views/system/menu/edit.vue b/zy-asrs-admin/src/views/system/menu/edit.vue
index 32e143f..628c9a9 100644
--- a/zy-asrs-admin/src/views/system/menu/edit.vue
+++ b/zy-asrs-admin/src/views/system/menu/edit.vue
@@ -1,12 +1,16 @@
 <script setup>
-import { getCurrentInstance, ref, computed, reactive, watch } from 'vue';
+import { getCurrentInstance, ref, nextTick } from 'vue';
 import { get, post } from '@/utils/request.js'
 import * as Icons from "@ant-design/icons-vue";
+import { formatMessage } from '@/utils/localeUtils.js';
+import { message } from 'ant-design-vue';
 const context = getCurrentInstance()?.appContext.config.globalProperties;
 const components = {
     ...Icons,
 };
 
+const submitButton = ref(null);
+const isSave = ref(true);
 const open = ref(false);
 const initFormData = {
     name: null
@@ -17,16 +21,25 @@
 const emit = defineEmits(['tableReload'])
 
 const handleOk = (e) => {
-    open.value = false;
-    console.log(formData.value);
-    post('/api/menu/update', formData.value).then((result) => {
-        console.log(result);
-        emit('tableReload', 'reload')
-    })
+    nextTick(() => {
+        setTimeout(() => {
+            submitButton.value.$el.click();
+        }, 100);
+    });
 };
 
 const onFinish = values => {
-    console.log('Success:', values);
+    // console.log('Success:', values);
+    open.value = false;
+    post(isSave.value ? '/api/menu/save' : '/api/menu/update', formData.value).then((resp) => {
+        let result = resp.data;
+        if (result.code === 200) {
+            message.success(formatMessage('page.update.success', '鏇存柊鎴愬姛'));
+        } else {
+            message.error(result.msg);
+        }
+        emit('tableReload', 'reload')
+    })
 };
 const onFinishFailed = errorInfo => {
     console.log('Failed:', errorInfo);
@@ -37,6 +50,7 @@
     formData,
     initFormData,
     treeData,
+    isSave,
 })
 
 </script>
@@ -49,14 +63,16 @@
 
 <template>
     <div>
-        <a-modal v-model:open="open" :title="formData == null ? '娣诲姞' : '缂栬緫'" @ok="handleOk" style="width: 600px;">
+        <a-modal v-model:open="open"
+            :title="isSave ? formatMessage('page.add', '娣诲姞') : formatMessage('page.edit', '缂栬緫')" @ok="handleOk"
+            style="width: 600px;">
             <a-form :model="formData" name="menu" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }"
                 style="display: flex;justify-content: space-between;flex-wrap: wrap;" autocomplete="off"
                 @finish="onFinish" @finishFailed="onFinishFailed">
                 <a-form-item label="涓婄骇鑿滃崟" name="parentId" style="width: 250px;"
                     :rules="[{ required: true, message: '涓婄骇鑿滃崟涓嶈兘涓虹┖!' }]">
                     <a-tree-select v-model:value="formData.parentId" show-search style="width: 100%"
-                        :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" placeholder="Please select"
+                        :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" :placeholder="formatMessage('page.input', '璇疯緭鍏�')"
                         allow-clea tree-data-simple-mode :tree-data="treeData" tree-node-filter-prop="name"
                         :field-names="{
                             children: 'children',
@@ -97,6 +113,10 @@
                         { label: '姝e父', value: 1 },
                     ]"></a-select>
                 </a-form-item>
+                <a-form-item>
+                    <a-button type="primary" html-type="submit" ref="submitButton"
+                        style="visibility: hidden;">Submit</a-button>
+                </a-form-item>
             </a-form>
         </a-modal>
     </div>
diff --git a/zy-asrs-admin/src/views/system/menu/index.vue b/zy-asrs-admin/src/views/system/menu/index.vue
index 6fb0a91..f2054c7 100644
--- a/zy-asrs-admin/src/views/system/menu/index.vue
+++ b/zy-asrs-admin/src/views/system/menu/index.vue
@@ -3,6 +3,9 @@
 import { get, post } from '@/utils/request.js'
 import * as Icons from "@ant-design/icons-vue";
 import EditView from './edit.vue'
+import { message, Modal } from 'ant-design-vue';
+import { formatMessage } from '@/utils/localeUtils.js';
+import { logout } from '@/config.js';
 const context = getCurrentInstance()?.appContext.config.globalProperties;
 const components = {
   ...Icons,
@@ -54,8 +57,11 @@
         name: '鏍圭洰褰�',
         children: data
       }];
+    } else if (result.code === 401) {
+      message.error(result.msg);
+      logout()
     } else {
-
+      message.error(result.msg);
     }
   })
 }
@@ -63,6 +69,32 @@
 const handleEdit = (item) => {
   editChild.value.open = true;
   editChild.value.formData = item == null ? editChild.value.initFormData : item;
+  editChild.value.isSave = item == null;
+}
+
+const handleDel = (rows) => {
+  Modal.confirm({
+    title: formatMessage('page.delete', '鍒犻櫎'),
+    content: formatMessage('page.delete.confirm', '纭畾鍒犻櫎璇ラ」鍚楋紵'),
+    maskClosable: true,
+    onOk: async () => {
+      const hide = message.loading(formatMessage('common.loading', '璇锋眰涓�'));
+      try {
+        post('/api/menu/remove/' + rows.map((row) => row.id).join(','), {}).then(resp => {
+          let result = resp.data;
+          if (result.code === 200) {
+            message.success(result.msg);
+          } else {
+            message.error(result.msg);
+          }
+          getPage()
+          hide()
+        })
+      } catch (error) {
+        message.error(formatMessage('common.fail', '璇锋眰澶辫触'));
+      }
+    },
+  });
 }
 
 const handleExport = async (intl) => {
@@ -96,35 +128,36 @@
     <div class="table-header">
       <a-input-search v-model:value="searchInput" placeholder="璇疯緭鍏�" style="width: 200px;" @search="onSearch" />
       <div class="table-header-right">
-        <a-button @click="handleEdit(null)" type="primary">娣诲姞</a-button>
-        <a-button @click="handleExport">瀵煎嚭</a-button>
+        <a-button @click="handleEdit(null)" type="primary">{{ formatMessage('page.add', '娣诲姞') }}</a-button>
+        <a-button @click="handleExport">{{ formatMessage('page.export', '瀵煎嚭') }}</a-button>
       </div>
     </div>
     <a-table :row-selection="{ selectedRowKeys: state.selectedRowKeys, onChange: onSelectChange }"
       :data-source="tableData" :defaultExpandAllRows="false" key="menu" rowKey="id">
-      <a-table-column title="鑿滃崟鍚嶇О" key="name" data-index="name" />
-      <a-table-column title="璺敱鍦板潃" key="route" data-index="route" />
-      <a-table-column title="绫诲瀷" key="type" data-index="type$">
+      <a-table-column :title="formatMessage('db.sys_menu.name', '鑿滃崟鍚嶇О')" key="name" data-index="name" />
+      <a-table-column :title="formatMessage('db.sys_menu.route', '璺敱鍦板潃')" key="route" data-index="route" />
+      <a-table-column :title="formatMessage('db.sys_menu.type', '绫诲瀷')" key="type" data-index="type$">
         <template #default="{ record }">
           <span>
             <a-tag :color="typeMap[record.type].color">{{ record.type$ }}</a-tag>
           </span>
         </template>
       </a-table-column>
-      <a-table-column title="鏉冮檺鏍囪瘑" key="authority" data-index="authority" />
-      <a-table-column title="鑿滃崟鍥炬爣" key="icon" data-index="icon">
+      <a-table-column :title="formatMessage('db.sys_menu.authority', '鏉冮檺鏍囪瘑')" key="authority" data-index="authority" />
+      <a-table-column :title="formatMessage('db.sys_menu.icon', '鑿滃崟鍥炬爣')" key="icon" data-index="icon">
         <template #default="{ record }">
           <component :is="components[ref(record.icon).value]" />
         </template>
       </a-table-column>
-      <a-table-column title="鎺掑簭" key="sort" data-index="sort" />
-      <a-table-column title="鐘舵��" key="status$" data-index="status$" />
-      <a-table-column title="淇敼鏃堕棿" key="updateTime$" data-index="updateTime$" />
-      <a-table-column title="鎿嶄綔" key="oper" data-index="oper">
+      <a-table-column :title="formatMessage('db.sys_menu.sort', '鎺掑簭')" key="sort" data-index="sort" />
+      <a-table-column :title="formatMessage('db.sys_menu.status', '鐘舵��')" key="status$" data-index="status$" />
+      <a-table-column :title="formatMessage('db.sys_menu.update_time', '淇敼鏃堕棿')" key="updateTime$" data-index="updateTime$" />
+      <a-table-column :title="formatMessage('common.operation', '鎿嶄綔')" key="oper" data-index="oper">
         <template #default="{ record }">
           <div style="display: flex;justify-content: space-evenly;">
-            <a-button type="link" primary @click="handleEdit(record)">缂栬緫</a-button>
-            <a-button type="link" danger>鍒犻櫎</a-button>
+            <a-button type="link" primary @click="handleEdit(record)">{{ formatMessage('page.edit', '缂栬緫') }}</a-button>
+            <a-button type="link" danger @click="handleDel([record])">{{ formatMessage('page.delete', '鍒犻櫎')
+              }}</a-button>
           </div>
         </template>
       </a-table-column>
diff --git a/zy-asrs-admin/src/views/system/user/index.vue b/zy-asrs-admin/src/views/system/user/index.vue
index d87f625..222d914 100644
--- a/zy-asrs-admin/src/views/system/user/index.vue
+++ b/zy-asrs-admin/src/views/system/user/index.vue
@@ -20,106 +20,106 @@
 getPage();
 
 const columns = [
-        {
-            title: formatMessage('db.sys_user.username', '璐﹀彿'),
-            dataIndex: 'username',
-            width: 140,
-        },
-        {
-            title: formatMessage('db.sys_user.password', '瀵嗙爜'),
-            dataIndex: 'password',
-            width: 140,
-        },
-        {
-            title: formatMessage('db.sys_user.nickname', '鏄电О'),
-            dataIndex: 'nickname',
-            width: 140,
-        },
-        {
-            title: formatMessage('db.sys_user.avatar', '澶村儚'),
-            dataIndex: 'avatar',
-            width: 140,
-        },
-        {
-            title: formatMessage('db.sys_user.code', '宸ュ彿'),
-            dataIndex: 'code',
-            width: 140,
-        },
-        {
-            title: formatMessage('db.sys_user.sex', '鎬у埆'),
-            dataIndex: 'sex$',
-            width: 140,
-        },
-        {
-            title: formatMessage('db.sys_user.phone', '鎵嬫満鍙�'),
-            dataIndex: 'phone',
-            width: 140,
-        },
-        {
-            title: formatMessage('db.sys_user.email', '閭'),
-            dataIndex: 'email',
-            width: 140,
-        },
-        {
-            title: formatMessage('db.sys_user.email_verified', '閭楠岃瘉'),
-            dataIndex: 'emailVerified$',
-            width: 140,
-        },
-        {
-            title: formatMessage('db.sys_user.dept_id', '鎵�灞為儴闂�'),
-            dataIndex: 'deptId$',
-            width: 140,
-        },
-        {
-            title: formatMessage('db.sys_user.real_name', '鐪熷疄濮撳悕'),
-            dataIndex: 'realName',
-            width: 140,
-        },
-        {
-            title: formatMessage('db.sys_user.id_card', '韬唤璇佸彿'),
-            dataIndex: 'idCard',
-            width: 140,
-        },
-        {
-            title: formatMessage('db.sys_user.birthday', '鍑虹敓鏃ユ湡'),
-            dataIndex: 'birthday',
-            width: 140,
-        },
-        {
-            title: formatMessage('db.sys_user.introduction', '涓汉绠�浠�'),
-            dataIndex: 'introduction',
-            width: 140,
-        },
-        {
-            title: formatMessage('db.sys_user.status', '鐘舵��'),
-            dataIndex: 'status$',
-            width: 140,
-        },
-        {
-            title: formatMessage('db.sys_user.create_time', '娣诲姞鏃堕棿'),
-            dataIndex: 'createTime$',
-            width: 140,
-        },
-        {
-            title: formatMessage('db.sys_user.create_by', '娣诲姞浜哄憳'),
-            dataIndex: 'createBy$',
-            width: 140,
-        },
-        {
-            title: formatMessage('db.sys_user.update_time', '淇敼鏃堕棿'),
-            dataIndex: 'updateTime$',
-            width: 140,
-        },
-        {
-            title: formatMessage('db.sys_user.update_by', '淇敼浜哄憳'),
-            dataIndex: 'updateBy$',
-            width: 140,
-        },
-        {
-            title: formatMessage('db.sys_user.memo', '澶囨敞'),
-            dataIndex: 'memo',
-            width: 140,
-        },
+  {
+    title: formatMessage('db.sys_user.username', '璐﹀彿'),
+    dataIndex: 'username',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_user.password', '瀵嗙爜'),
+    dataIndex: 'password',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_user.nickname', '鏄电О'),
+    dataIndex: 'nickname',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_user.avatar', '澶村儚'),
+    dataIndex: 'avatar',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_user.code', '宸ュ彿'),
+    dataIndex: 'code',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_user.sex', '鎬у埆'),
+    dataIndex: 'sex$',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_user.phone', '鎵嬫満鍙�'),
+    dataIndex: 'phone',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_user.email', '閭'),
+    dataIndex: 'email',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_user.email_verified', '閭楠岃瘉'),
+    dataIndex: 'emailVerified$',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_user.dept_id', '鎵�灞為儴闂�'),
+    dataIndex: 'deptId$',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_user.real_name', '鐪熷疄濮撳悕'),
+    dataIndex: 'realName',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_user.id_card', '韬唤璇佸彿'),
+    dataIndex: 'idCard',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_user.birthday', '鍑虹敓鏃ユ湡'),
+    dataIndex: 'birthday',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_user.introduction', '涓汉绠�浠�'),
+    dataIndex: 'introduction',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_user.status', '鐘舵��'),
+    dataIndex: 'status$',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_user.create_time', '娣诲姞鏃堕棿'),
+    dataIndex: 'createTime$',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_user.create_by', '娣诲姞浜哄憳'),
+    dataIndex: 'createBy$',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_user.update_time', '淇敼鏃堕棿'),
+    dataIndex: 'updateTime$',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_user.update_by', '淇敼浜哄憳'),
+    dataIndex: 'updateBy$',
+    width: 140,
+  },
+  {
+    title: formatMessage('db.sys_user.memo', '澶囨敞'),
+    dataIndex: 'memo',
+    width: 140,
+  },
 
   {
     title: formatMessage('common.operation', '鎿嶄綔'),
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/CodeBuilder.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/CodeBuilder.java
index 711137a..fb90abb 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/CodeBuilder.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/CodeBuilder.java
@@ -22,8 +22,8 @@
 //        generator.username="sa";
 //        generator.password="Zoneyung@zy56$";
 
-        generator.table="sys_user_login";
-        generator.tableName="鐧诲綍鏃ュ織";
+        generator.table="sys_dept";
+        generator.tableName="閮ㄩ棬绠$悊";
         generator.packagePath="com.zy.asrs.wms.system";
 
         generator.build();
diff --git a/zy-asrs-wms/src/main/java/dept.sql b/zy-asrs-wms/src/main/java/dept.sql
new file mode 100644
index 0000000..10d1a49
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/dept.sql
@@ -0,0 +1,9 @@
+-- save dept record
+-- mysql
+insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `host_id`, `status`) values ( '閮ㄩ棬绠$悊绠$悊', '0', '/system/dept', '/system/dept', '0' , '0', '1' , '1');
+
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '鏌ヨ閮ㄩ棬绠$悊', '', '1', 'system:dept:list', '0', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '娣诲姞閮ㄩ棬绠$悊', '', '1', 'system:dept:save', '1', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '淇敼閮ㄩ棬绠$悊', '', '1', 'system:dept:update', '2', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '鍒犻櫎閮ㄩ棬绠$悊', '', '1', 'system:dept:remove', '3', '1', '1');
+

--
Gitblit v1.9.1