From 727393c1382470ab9af362fa8edeb002e7a93d3d Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期二, 02 七月 2024 15:52:28 +0800
Subject: [PATCH] #
---
zy-asrs-admin/src/views/system/operationRecord/index.vue | 227 ++++++++
zy-asrs-admin/src/views/system/user/edit.vue | 305 ++++++++---
zy-asrs-wms/src/main/java/userLogin.sql | 9
zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/CodeBuilder.java | 6
zy-asrs-admin/src/views/system/role/edit.vue | 143 +++++
zy-asrs-admin/src/views/system/role/index.vue | 269 ++++++++++
zy-asrs-admin/src/views/system/operationRecord/edit.vue | 217 ++++++++
zy-asrs-admin/src/views/system/user/index.vue | 67 +-
/dev/null | 9
zy-asrs-admin/src/views/system/userLogin/index.vue | 91 +--
zy-asrs-admin/src/views/system/userLogin/edit.vue | 134 ++++-
zy-asrs-common/src/main/java/com/zy/asrs/common/sys/entity/UserLogin.java | 25
zy-asrs-admin/src/locales/en_US.js | 16
13 files changed, 1,310 insertions(+), 208 deletions(-)
diff --git a/zy-asrs-admin/src/locales/en_US.js b/zy-asrs-admin/src/locales/en_US.js
index 24b1ea4..56c5dbc 100644
--- a/zy-asrs-admin/src/locales/en_US.js
+++ b/zy-asrs-admin/src/locales/en_US.js
@@ -132,7 +132,19 @@
'':'',
'db.sys_host.name':'Name',
'db.sys_host.status':'Status',
- 'db.sys_host.create_time':'createTime',
- 'db.sys_host.update_time':'updateTime',
+ 'db.sys_host.create_time':'CreateTime',
+ 'db.sys_host.update_time':'UpdateTime',
'db.sys_host.memo':'Memo',
+ '':'',
+ '':'',
+ '':'',
+ '':'',
+ '':'',
+ '':'',
+ 'db.sys_role.name':'Name',
+ 'db.sys_role.code':'Code',
+ 'db.sys_role.status':'Status',
+ 'db.sys_role.create_time':'CreateTime',
+ 'db.sys_role.update_time':'UpdateTime',
+ 'db.sys_role.memo':'Memo',
};
\ No newline at end of file
diff --git a/zy-asrs-admin/src/views/system/operationRecord/edit.vue b/zy-asrs-admin/src/views/system/operationRecord/edit.vue
new file mode 100644
index 0000000..19d416f
--- /dev/null
+++ b/zy-asrs-admin/src/views/system/operationRecord/edit.vue
@@ -0,0 +1,217 @@
+<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/operationRecord/save' : '/api/operationRecord/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="namespace"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.namespace"
+ />
+ </a-form-item>
+ <a-form-item
+ label="鎺ュ彛鍦板潃"
+ name="url"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.url"
+ />
+ </a-form-item>
+ <a-form-item
+ label="骞冲彴瀵嗛挜"
+ name="appkey"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.appkey"
+ />
+ </a-form-item>
+ <a-form-item
+ label="鏃堕棿鎴�"
+ name="timestamp"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.timestamp"
+ />
+ </a-form-item>
+ <a-form-item
+ label="瀹㈡埛绔疘P"
+ name="clientIp"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.clientIp"
+ />
+ </a-form-item>
+ <a-form-item
+ label="璇锋眰鍐呭"
+ name="request"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.request"
+ />
+ </a-form-item>
+ <a-form-item
+ label="鍝嶅簲鍐呭"
+ name="response"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.response"
+ />
+ </a-form-item>
+ <a-form-item
+ label="娑堣�楁椂闂�"
+ name="spendTime"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.spendTime"
+ />
+ </a-form-item>
+ <a-form-item
+ label="寮傚父鍐呭"
+ name="err"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.err"
+ />
+ </a-form-item>
+ <a-form-item
+ label="缁撴灉"
+ name="result"
+ style="width: 250px;"
+ >
+ <a-select
+ v-model:value="formData.result"
+ :options="[
+ { label: '鎴愬姛', value: 1 },
+ { label: '澶辫触', value: 0 },
+ ]"
+ >
+ </a-select>
+ </a-form-item>
+ <a-form-item
+ label="鐢ㄦ埛"
+ name="userId"
+ style="width: 250px;"
+ >
+ <a-select
+ v-model:value="formData.userId"
+ placeholder="Select users"
+ style="width: 100%"
+ show-search
+ :options="UserQueryList"
+ optionFilterProp="label"
+ optionLabelProp="label"
+ >
+ </a-select>
+ </a-form-item>
+ <a-form-item
+ label="娣诲姞鏃堕棿"
+ name="createTime"
+ style="width: 250px;"
+ >
+ <a-date-picker
+ v-model:value="formData.createTime"
+ show-time
+ format="YYYY-MM-DD HH:mm:ss"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ />
+ </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/operationRecord/index.vue b/zy-asrs-admin/src/views/system/operationRecord/index.vue
new file mode 100644
index 0000000..e69d0b5
--- /dev/null
+++ b/zy-asrs-admin/src/views/system/operationRecord/index.vue
@@ -0,0 +1,227 @@
+<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-operationRecord';
+let currentPage = 1;
+let pageSize = 10;
+const searchInput = ref("")
+const editChild = ref(null)
+
+let tableData = ref([]);
+getPage();
+
+const columns = [
+ {
+ title: formatMessage('db.sys_operation_record.namespace', '鍚嶇О绌洪棿'),
+ dataIndex: 'namespace',
+ width: 140,
+ },
+ {
+ title: formatMessage('db.sys_operation_record.url', '鎺ュ彛鍦板潃'),
+ dataIndex: 'url',
+ width: 140,
+ },
+ {
+ title: formatMessage('db.sys_operation_record.appkey', '骞冲彴瀵嗛挜'),
+ dataIndex: 'appkey',
+ width: 140,
+ },
+ {
+ title: formatMessage('db.sys_operation_record.timestamp', '鏃堕棿鎴�'),
+ dataIndex: 'timestamp',
+ width: 140,
+ },
+ {
+ title: formatMessage('db.sys_operation_record.client_ip', '瀹㈡埛绔疘P'),
+ dataIndex: 'clientIp',
+ width: 140,
+ },
+ {
+ title: formatMessage('db.sys_operation_record.request', '璇锋眰鍐呭'),
+ dataIndex: 'request',
+ width: 140,
+ ellipsis: true,
+ },
+ {
+ title: formatMessage('db.sys_operation_record.response', '鍝嶅簲鍐呭'),
+ dataIndex: 'response',
+ width: 140,
+ ellipsis: true,
+ },
+ {
+ title: formatMessage('db.sys_operation_record.spend_time', '娑堣�楁椂闂�'),
+ dataIndex: 'spendTime',
+ width: 140,
+ },
+ {
+ title: formatMessage('db.sys_operation_record.err', '寮傚父鍐呭'),
+ dataIndex: 'err',
+ width: 140,
+ },
+ {
+ title: formatMessage('db.sys_operation_record.result', '缁撴灉'),
+ dataIndex: 'result$',
+ width: 140,
+ },
+ {
+ title: formatMessage('db.sys_operation_record.user_id', '鐢ㄦ埛'),
+ dataIndex: 'userId$',
+ width: 140,
+ },
+ {
+ title: formatMessage('db.sys_operation_record.create_time', '娣诲姞鏃堕棿'),
+ dataIndex: 'createTime$',
+ width: 140,
+ },
+ {
+ title: formatMessage('db.sys_operation_record.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/operationRecord/page', {
+ current: currentPage,
+ pageSize: pageSize,
+ condition: searchInput.value
+ }).then((resp) => {
+ let result = resp.data;
+ if (result.code == 200) {
+ let data = result.data;
+ tableData.value = 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/operationRecord/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/operationRecord/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.records" :defaultExpandAllRows="false" :key="TABLE_KEY" rowKey="id"
+ :pagination="{ total: tableData.total, onChange: onPageChange }"
+ :scroll="{ y: 768, scrollToFirstRowOnChange: true }" :columns="columns">
+ <template #bodyCell="{ column, text, record }">
+ <template v-if="column.dataIndex === 'oper'">
+ <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>
+ </template>
+ </a-table>
+ </div>
+</template>
+
+<style></style>
diff --git a/zy-asrs-admin/src/views/system/role/edit.vue b/zy-asrs-admin/src/views/system/role/edit.vue
new file mode 100644
index 0000000..c5fbe42
--- /dev/null
+++ b/zy-asrs-admin/src/views/system/role/edit.vue
@@ -0,0 +1,143 @@
+<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/role/save' : '/api/role/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);
+};
+
+
+
+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="name"
+ style="width: 250px;"
+ :rules="[{ required: true }]"
+ >
+ <a-input
+ v-model:value="formData.name"
+ />
+ </a-form-item>
+ <a-form-item
+ label="鏍囪瘑"
+ name="code"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.code"
+ />
+ </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="createTime"
+ style="width: 250px;"
+ >
+ <a-date-picker
+ v-model:value="formData.createTime"
+ show-time
+ format="YYYY-MM-DD HH:mm:ss"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ />
+ </a-form-item>
+ <a-form-item
+ label="淇敼鏃堕棿"
+ name="updateTime"
+ style="width: 250px;"
+ >
+ <a-date-picker
+ v-model:value="formData.updateTime"
+ show-time
+ format="YYYY-MM-DD HH:mm:ss"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ />
+ </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/role/index.vue b/zy-asrs-admin/src/views/system/role/index.vue
new file mode 100644
index 0000000..d567f88
--- /dev/null
+++ b/zy-asrs-admin/src/views/system/role/index.vue
@@ -0,0 +1,269 @@
+<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 { globalState, 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-role';
+let currentPage = 1;
+let pageSize = 10;
+const searchInput = ref("")
+const editChild = ref(null)
+const openDrawer = ref(false);
+const currentDrawerData = ref(null);
+
+let treeData = ref([]);
+let checkedKeys = ref([]);
+let halfCheckedKeys = ref([]);
+let expandedKeys = ref([]);
+let selectedKeys = ref([]);
+
+let tableData = ref([]);
+getPage();
+
+const columns = [
+ {
+ title: formatMessage('db.sys_role.name', '鍚嶇О'),
+ dataIndex: 'name',
+ width: 140,
+ },
+ {
+ title: formatMessage('db.sys_role.code', '鏍囪瘑'),
+ dataIndex: 'code',
+ width: 140,
+ },
+ {
+ title: formatMessage('db.sys_role.status', '鐘舵��'),
+ dataIndex: 'status$',
+ width: 140,
+ },
+ {
+ title: formatMessage('db.sys_role.create_time', '娣诲姞鏃堕棿'),
+ dataIndex: 'createTime$',
+ width: 140,
+ },
+ {
+ title: formatMessage('db.sys_role.update_time', '淇敼鏃堕棿'),
+ dataIndex: 'updateTime$',
+ width: 140,
+ },
+ {
+ title: formatMessage('db.sys_role.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/role/page', {
+ current: currentPage,
+ pageSize: pageSize,
+ condition: searchInput.value
+ }).then((resp) => {
+ let result = resp.data;
+ if (result.code == 200) {
+ let data = result.data;
+ tableData.value = 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 handleAssign = (item) => {
+ openDrawer.value = true;
+ currentDrawerData.value = item;
+ loadMenuTree(item)
+}
+
+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/role/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/role/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()
+}
+
+const onCloseDrawer = () => {
+ openDrawer.value = false;
+};
+
+const onSubmitDrawer = () => {
+ const hide = message.loading(formatMessage('common.loading', '璇锋眰涓�'));
+ try {
+ post('/api/role/scope/update', {
+ id: currentDrawerData.value.id,
+ menuIds: {
+ checked: checkedKeys.value,
+ halfChecked: halfCheckedKeys.value
+ }
+ }).then(resp => {
+ let result = resp.data;
+ if (result.code === 200) {
+ message.success(result.msg);
+ } else {
+ message.error(result.msg);
+ }
+ hide()
+ })
+ } catch (error) {
+ message.error(formatMessage('common.fail', '璇锋眰澶辫触'));
+ }
+
+}
+
+const loadMenuTree = (param) => {
+ post('/api/menu/tree', {}).then(resp => {
+ let result = resp.data;
+ let data = result.data;
+ treeData.value = data;
+ })
+
+ get('/api/role/scope/list', {
+ roleId: param.id
+ }).then(resp => {
+ let result = resp.data;
+ let data = result.data;
+ checkedKeys.value = data
+ })
+}
+
+const handleTreeChecked = (keys, e) => {
+ halfCheckedKeys.value = e.halfCheckedKeys;
+}
+
+</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.records" :defaultExpandAllRows="false" :key="TABLE_KEY" rowKey="id"
+ :pagination="{ total: tableData.total, onChange: onPageChange }"
+ :scroll="{ y: 768, scrollToFirstRowOnChange: true }" :columns="columns">
+ <template #bodyCell="{ column, text, record }">
+ <template v-if="column.dataIndex === 'oper'">
+ <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" primary @click="handleAssign(record)">{{ formatMessage('page.assign.permission',
+ '鍒嗛厤鏉冮檺') }}</a-button>
+ <a-button type="link" danger @click="handleDel([record])">{{ formatMessage('page.delete', '鍒犻櫎')
+ }}</a-button>
+ </div>
+ </template>
+ </template>
+ </a-table>
+
+ <a-drawer :width="500" :title="formatMessage('page.assign.role', '鍒嗛厤鏉冮檺') + ' - ' + currentDrawerData?.name"
+ placement="right" :open="openDrawer" @close="onCloseDrawer">
+ <template #extra>
+ <a-button style="margin-right: 8px" @click="onCloseDrawer">{{ formatMessage('common.cancel', '鍙栨秷') }}</a-button>
+ <a-button type="primary" @click="onSubmitDrawer">{{ formatMessage('common.submit', '鎻愪氦') }}</a-button>
+ </template>
+ <a-tree v-model:expandedKeys="expandedKeys" v-model:selectedKeys="selectedKeys" v-model:checkedKeys="checkedKeys"
+ checkable :tree-data="treeData" :field-names="{ children: 'children', title: 'name', key: 'id' }"
+ @check="handleTreeChecked">
+ <template #title="{ name, key }">
+ <span>{{ name }}</span>
+ </template>
+ </a-tree>
+ </a-drawer>
+ </div>
+</template>
+
+<style></style>
diff --git a/zy-asrs-admin/src/views/system/user/edit.vue b/zy-asrs-admin/src/views/system/user/edit.vue
index 516ef43..57f2e8c 100644
--- a/zy-asrs-admin/src/views/system/user/edit.vue
+++ b/zy-asrs-admin/src/views/system/user/edit.vue
@@ -38,18 +38,18 @@
console.log('Failed:', errorInfo);
};
-const DeptQueryList = ref(null);
+const DeptQueryList = ref(null);
DeptQuery();
-function DeptQuery() {
- postForm('/api/dept/query', {}).then(resp => {
+function DeptQuery() {
+ postForm('/api/dept/query', {}).then(resp => {
let result = resp.data;
DeptQueryList.value = result.data;
})
}
-const UserQueryList = ref(null);
+const UserQueryList = ref(null);
UserQuery();
-function UserQuery() {
- postForm('/api/user/query', {}).then(resp => {
+function UserQuery() {
+ postForm('/api/user/query', {}).then(resp => {
let result = resp.data;
UserQueryList.value = result.data;
})
@@ -80,87 +80,230 @@
<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="username" style="width: 250px;" :rules="[{ required: true }]">
- <a-input v-model:value="formData.username" />
- </a-form-item>
- <a-form-item label="瀵嗙爜" name="password" style="width: 250px;">
- <a-input v-model:value="formData.password" />
- </a-form-item>
- <a-form-item label="鏄电О" name="nickname" style="width: 250px;">
- <a-input v-model:value="formData.nickname" />
- </a-form-item>
- <a-form-item label="澶村儚" name="avatar" style="width: 250px;">
- <a-input v-model:value="formData.avatar" />
- </a-form-item>
- <a-form-item label="宸ュ彿" name="code" style="width: 250px;">
- <a-input v-model:value="formData.code" />
- </a-form-item>
- <a-form-item label="鎬у埆" name="sex" style="width: 250px;">
- <a-select v-model:value="formData.sex" :options="[
- { label: '鏈煡', value: 0 },
- { label: '鐢�', value: 1 },
- { label: '濂�', value: 2 },
- ]">
+ <a-form-item
+ label="璐﹀彿"
+ name="username"
+ style="width: 250px;"
+ :rules="[{ required: true }]"
+ >
+ <a-input
+ v-model:value="formData.username"
+ />
+ </a-form-item>
+ <a-form-item
+ label="瀵嗙爜"
+ name="password"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.password"
+ />
+ </a-form-item>
+ <a-form-item
+ label="鏄电О"
+ name="nickname"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.nickname"
+ />
+ </a-form-item>
+ <a-form-item
+ label="澶村儚"
+ name="avatar"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.avatar"
+ />
+ </a-form-item>
+ <a-form-item
+ label="宸ュ彿"
+ name="code"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.code"
+ />
+ </a-form-item>
+ <a-form-item
+ label="鎬у埆"
+ name="sex"
+ style="width: 250px;"
+ >
+ <a-select
+ v-model:value="formData.sex"
+ :options="[
+ { label: '鏈煡', value: 0 },
+ { label: '鐢�', value: 1 },
+ { label: '濂�', value: 2 },
+ ]"
+ >
</a-select>
- </a-form-item>
- <a-form-item label="鎵嬫満鍙�" name="phone" style="width: 250px;">
- <a-input v-model:value="formData.phone" />
- </a-form-item>
- <a-form-item label="閭" name="email" style="width: 250px;">
- <a-input v-model:value="formData.email" />
- </a-form-item>
- <a-form-item label="閭楠岃瘉" name="emailVerified" style="width: 250px;">
- <a-select v-model:value="formData.emailVerified" :options="[
- { label: '鍚�', value: 0 },
- { label: '鏄�', value: 1 },
- ]">
+ </a-form-item>
+ <a-form-item
+ label="鎵嬫満鍙�"
+ name="phone"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.phone"
+ />
+ </a-form-item>
+ <a-form-item
+ label="閭"
+ name="email"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.email"
+ />
+ </a-form-item>
+ <a-form-item
+ label="閭楠岃瘉"
+ name="emailVerified"
+ style="width: 250px;"
+ >
+ <a-select
+ v-model:value="formData.emailVerified"
+ :options="[
+ { label: '鍚�', value: 0 },
+ { label: '鏄�', value: 1 },
+ ]"
+ >
</a-select>
- </a-form-item>
- <a-form-item label="鎵�灞為儴闂�" name="deptId" style="width: 250px;">
- <a-select v-model:value="formData.deptId" placeholder="Select users" style="width: 100%" show-search
- :options="DeptQueryList" optionFilterProp="label" optionLabelProp="label">
+ </a-form-item>
+ <a-form-item
+ label="鎵�灞為儴闂�"
+ name="deptId"
+ style="width: 250px;"
+ >
+ <a-select
+ v-model:value="formData.deptId"
+ placeholder="Select users"
+ style="width: 100%"
+ show-search
+ :options="DeptQueryList"
+ optionFilterProp="label"
+ optionLabelProp="label"
+ >
</a-select>
- </a-form-item>
- <a-form-item label="鐪熷疄濮撳悕" name="realName" style="width: 250px;">
- <a-input v-model:value="formData.realName" />
- </a-form-item>
- <a-form-item label="韬唤璇佸彿" name="idCard" style="width: 250px;">
- <a-input v-model:value="formData.idCard" />
- </a-form-item>
- <a-form-item label="鍑虹敓鏃ユ湡" name="birthday" style="width: 250px;">
- <a-input v-model:value="formData.birthday" />
- </a-form-item>
- <a-form-item label="涓汉绠�浠�" name="introduction" style="width: 250px;">
- <a-input v-model:value="formData.introduction" />
- </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-form-item>
+ <a-form-item
+ label="鐪熷疄濮撳悕"
+ name="realName"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.realName"
+ />
+ </a-form-item>
+ <a-form-item
+ label="韬唤璇佸彿"
+ name="idCard"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.idCard"
+ />
+ </a-form-item>
+ <a-form-item
+ label="鍑虹敓鏃ユ湡"
+ name="birthday"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.birthday"
+ />
+ </a-form-item>
+ <a-form-item
+ label="涓汉绠�浠�"
+ name="introduction"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.introduction"
+ />
+ </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="createTime" style="width: 250px;">
- <a-date-picker v-model:value="formData.createTime" show-time format="YYYY-MM-DD HH:mm:ss"
- value-format="YYYY-MM-DD HH:mm:ss" />
- </a-form-item>
- <a-form-item label="娣诲姞浜哄憳" name="createBy" style="width: 250px;">
- <a-select v-model:value="formData.createBy" placeholder="Select users" style="width: 100%"
- show-search :options="UserQueryList" optionFilterProp="label" optionLabelProp="label">
+ </a-form-item>
+ <a-form-item
+ label="娣诲姞鏃堕棿"
+ name="createTime"
+ style="width: 250px;"
+ >
+ <a-date-picker
+ v-model:value="formData.createTime"
+ show-time
+ format="YYYY-MM-DD HH:mm:ss"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ />
+ </a-form-item>
+ <a-form-item
+ label="娣诲姞浜哄憳"
+ name="createBy"
+ style="width: 250px;"
+ >
+ <a-select
+ v-model:value="formData.createBy"
+ placeholder="Select users"
+ style="width: 100%"
+ show-search
+ :options="UserQueryList"
+ optionFilterProp="label"
+ optionLabelProp="label"
+ >
</a-select>
- </a-form-item>
- <a-form-item label="淇敼鏃堕棿" name="updateTime" style="width: 250px;">
- <a-date-picker v-model:value="formData.updateTime" show-time format="YYYY-MM-DD HH:mm:ss"
- value-format="YYYY-MM-DD HH:mm:ss" />
- </a-form-item>
- <a-form-item label="淇敼浜哄憳" name="updateBy" style="width: 250px;">
- <a-select v-model:value="formData.updateBy" placeholder="Select users" style="width: 100%"
- show-search :options="UserQueryList" optionFilterProp="label" optionLabelProp="label">
+ </a-form-item>
+ <a-form-item
+ label="淇敼鏃堕棿"
+ name="updateTime"
+ style="width: 250px;"
+ >
+ <a-date-picker
+ v-model:value="formData.updateTime"
+ show-time
+ format="YYYY-MM-DD HH:mm:ss"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ />
+ </a-form-item>
+ <a-form-item
+ label="淇敼浜哄憳"
+ name="updateBy"
+ style="width: 250px;"
+ >
+ <a-select
+ v-model:value="formData.updateBy"
+ placeholder="Select users"
+ style="width: 100%"
+ show-search
+ :options="UserQueryList"
+ optionFilterProp="label"
+ optionLabelProp="label"
+ >
</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-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"
diff --git a/zy-asrs-admin/src/views/system/user/index.vue b/zy-asrs-admin/src/views/system/user/index.vue
index 37c97b1..d87f625 100644
--- a/zy-asrs-admin/src/views/system/user/index.vue
+++ b/zy-asrs-admin/src/views/system/user/index.vue
@@ -21,111 +21,112 @@
const columns = [
{
- title: '璐﹀彿',
+ title: formatMessage('db.sys_user.username', '璐﹀彿'),
dataIndex: 'username',
width: 140,
},
{
- title: '瀵嗙爜',
+ title: formatMessage('db.sys_user.password', '瀵嗙爜'),
dataIndex: 'password',
width: 140,
},
{
- title: '鏄电О',
+ title: formatMessage('db.sys_user.nickname', '鏄电О'),
dataIndex: 'nickname',
width: 140,
},
{
- title: '澶村儚',
+ title: formatMessage('db.sys_user.avatar', '澶村儚'),
dataIndex: 'avatar',
width: 140,
},
{
- title: '宸ュ彿',
+ title: formatMessage('db.sys_user.code', '宸ュ彿'),
dataIndex: 'code',
width: 140,
},
{
- title: '鎬у埆',
+ title: formatMessage('db.sys_user.sex', '鎬у埆'),
dataIndex: 'sex$',
width: 140,
},
{
- title: '鎵嬫満鍙�',
+ title: formatMessage('db.sys_user.phone', '鎵嬫満鍙�'),
dataIndex: 'phone',
width: 140,
},
{
- title: '閭',
+ title: formatMessage('db.sys_user.email', '閭'),
dataIndex: 'email',
width: 140,
},
{
- title: '閭楠岃瘉',
+ title: formatMessage('db.sys_user.email_verified', '閭楠岃瘉'),
dataIndex: 'emailVerified$',
width: 140,
},
{
- title: '鎵�灞為儴闂�',
+ title: formatMessage('db.sys_user.dept_id', '鎵�灞為儴闂�'),
dataIndex: 'deptId$',
width: 140,
},
{
- title: '鐪熷疄濮撳悕',
+ title: formatMessage('db.sys_user.real_name', '鐪熷疄濮撳悕'),
dataIndex: 'realName',
width: 140,
},
{
- title: '韬唤璇佸彿',
+ title: formatMessage('db.sys_user.id_card', '韬唤璇佸彿'),
dataIndex: 'idCard',
width: 140,
},
{
- title: '鍑虹敓鏃ユ湡',
+ title: formatMessage('db.sys_user.birthday', '鍑虹敓鏃ユ湡'),
dataIndex: 'birthday',
width: 140,
},
{
- title: '涓汉绠�浠�',
+ title: formatMessage('db.sys_user.introduction', '涓汉绠�浠�'),
dataIndex: 'introduction',
width: 140,
},
{
- title: '鐘舵��',
+ title: formatMessage('db.sys_user.status', '鐘舵��'),
dataIndex: 'status$',
width: 140,
},
{
- title: '娣诲姞鏃堕棿',
+ title: formatMessage('db.sys_user.create_time', '娣诲姞鏃堕棿'),
dataIndex: 'createTime$',
width: 140,
},
{
- title: '娣诲姞浜哄憳',
+ title: formatMessage('db.sys_user.create_by', '娣诲姞浜哄憳'),
dataIndex: 'createBy$',
width: 140,
},
{
- title: '淇敼鏃堕棿',
+ title: formatMessage('db.sys_user.update_time', '淇敼鏃堕棿'),
dataIndex: 'updateTime$',
width: 140,
},
{
- title: '淇敼浜哄憳',
+ title: formatMessage('db.sys_user.update_by', '淇敼浜哄憳'),
dataIndex: 'updateBy$',
width: 140,
},
{
- title: '澶囨敞',
+ title: formatMessage('db.sys_user.memo', '澶囨敞'),
dataIndex: 'memo',
width: 140,
},
{
- title: '鎿嶄綔',
+ title: formatMessage('common.operation', '鎿嶄綔'),
name: 'oper',
dataIndex: 'oper',
key: 'oper',
+ width: 140,
},
];
@@ -178,15 +179,21 @@
content: formatMessage('page.delete.confirm', '纭畾鍒犻櫎璇ラ」鍚楋紵'),
maskClosable: true,
onOk: async () => {
- post('/api/user/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()
- })
+ const hide = message.loading(formatMessage('common.loading', '璇锋眰涓�'));
+ try {
+ post('/api/user/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', '璇锋眰澶辫触'));
+ }
},
});
}
diff --git a/zy-asrs-admin/src/views/system/userLogin/edit.vue b/zy-asrs-admin/src/views/system/userLogin/edit.vue
index e2bc9a9..22e5082 100644
--- a/zy-asrs-admin/src/views/system/userLogin/edit.vue
+++ b/zy-asrs-admin/src/views/system/userLogin/edit.vue
@@ -1,14 +1,13 @@
<script setup>
import { ref, nextTick } from 'vue';
-import { get, post } from '@/utils/request.js'
+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 = {
- name: null
-}
+const initFormData = {}
let formData = ref(initFormData);
const treeData = ref(null);
@@ -25,14 +24,29 @@
const onFinish = values => {
// console.log('Success:', values);
open.value = false;
- post(isSave.value ? '/api/userLogin/save' : '/api/userLogin/update', formData.value).then((result) => {
- console.log(result);
+ post(isSave.value ? '/api/userLogin/save' : '/api/userLogin/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,
@@ -46,7 +60,7 @@
<script>
export default {
- name: '鑿滃崟绠$悊'
+ name: '鐧诲綍鏃ュ織-edit'
}
</script>
@@ -58,28 +72,88 @@
<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="userId" style="width: 250px;"
- :rules="[{ required: true, message: '鐢ㄦ埛涓嶈兘涓虹┖!' }]">
- <a-input v-model:value="formData.userId" />
- </a-form-item>
- <a-form-item label="瀵嗛挜" name="token" style="width: 250px;">
- <a-input v-model:value="formData.token" />
- </a-form-item>
- <a-form-item label="鐧诲綍ip" name="ip" style="width: 250px;">
- <a-input v-model:value="formData.ip" />
- </a-form-item>
- <a-form-item label="绫诲瀷" name="type" style="width: 250px;"
- :rules="[{ required: true, message: '绫诲瀷涓嶈兘涓虹┖!' }]">
- <a-select v-model:value="formData.type" :options="[
- { label: '鐧诲綍鎴愬姛', value: 0 },
- { label: '鐧诲綍澶辫触', value: 1 },
- { label: '閫�鍑虹櫥褰�', value: 2 },
- { label: '缁token', value: 3 },
- ]"></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
+ label="鐢ㄦ埛"
+ name="userId"
+ style="width: 250px;"
+ :rules="[{ required: true }]"
+ >
+ <a-select
+ v-model:value="formData.userId"
+ placeholder="Select users"
+ style="width: 100%"
+ show-search
+ :options="UserQueryList"
+ optionFilterProp="label"
+ optionLabelProp="label"
+ >
+ </a-select>
+ </a-form-item>
+ <a-form-item
+ label="瀵嗛挜"
+ name="token"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.token"
+ />
+ </a-form-item>
+ <a-form-item
+ label="鐧诲綍ip"
+ name="ip"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.ip"
+ />
+ </a-form-item>
+ <a-form-item
+ label="绫诲瀷"
+ name="type"
+ style="width: 250px;"
+ >
+ <a-select
+ v-model:value="formData.type"
+ :options="[
+ { label: '鐧诲綍鎴愬姛', value: 0 },
+ { label: '鐧诲綍澶辫触', value: 1 },
+ { label: '閫�鍑虹櫥褰�', value: 2 },
+ { label: '缁token', value: 3 },
+ ]"
+ >
+ </a-select>
+ </a-form-item>
+ <a-form-item
+ label="娣诲姞鏃堕棿"
+ name="createTime"
+ style="width: 250px;"
+ >
+ <a-date-picker
+ v-model:value="formData.createTime"
+ show-time
+ format="YYYY-MM-DD HH:mm:ss"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ />
+ </a-form-item>
+ <a-form-item
+ label="鐧诲綍绯荤粺"
+ name="system"
+ style="width: 250px;"
+ >
+ <a-input
+ v-model:value="formData.system"
+ />
+ </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>
@@ -89,4 +163,4 @@
</div>
</template>
-<style></style>
\ No newline at end of file
+<style></style>
diff --git a/zy-asrs-admin/src/views/system/userLogin/index.vue b/zy-asrs-admin/src/views/system/userLogin/index.vue
index e151820..e0af397 100644
--- a/zy-asrs-admin/src/views/system/userLogin/index.vue
+++ b/zy-asrs-admin/src/views/system/userLogin/index.vue
@@ -9,6 +9,7 @@
const context = getCurrentInstance()?.appContext.config.globalProperties;
const router = useRouter();
+
const TABLE_KEY = 'table-userLogin';
let currentPage = 1;
let pageSize = 10;
@@ -20,70 +21,48 @@
const columns = [
{
- title: 'ID',
- name: 'id',
- dataIndex: 'id',
- key: 'id',
- },
- {
- title: '鐢ㄦ埛',
- name: 'userId$',
+ title: formatMessage('db.sys_user_login.user_id', '鐢ㄦ埛'),
dataIndex: 'userId$',
- key: 'userId$',
+ width: 140,
},
{
- title: '瀵嗛挜',
- name: 'token',
+ title: formatMessage('db.sys_user_login.token', '瀵嗛挜'),
dataIndex: 'token',
- key: 'token',
+ width: 140,
ellipsis: true,
},
{
- title: '鐧诲綍ip',
- name: 'ip',
+ title: formatMessage('db.sys_user_login.ip', '鐧诲綍ip'),
dataIndex: 'ip',
- key: 'ip',
+ width: 140,
},
{
- title: '绫诲瀷',
- name: 'type',
- dataIndex: 'type',
- key: 'type',
- customRender: (column) => {
- let typeMap = {
- 0: {
- text: formatMessage('login.success', '鐧诲綍鎴愬姛'),
- },
- 1: {
- text: formatMessage('login.fail', '鐧诲綍澶辫触'),
- },
- 2: {
- text: formatMessage('login.logout', '閫�鍑虹櫥褰�'),
- },
- 3: {
- text: formatMessage('login.retoken', '缁token'),
- },
- };
- return typeMap[column.value].text;
- }
+ title: formatMessage('db.sys_user_login.type', '绫诲瀷'),
+ dataIndex: 'type$',
+ width: 140,
},
{
- title: '娣诲姞鏃堕棿',
- name: 'createTime$',
+ title: formatMessage('db.sys_user_login.create_time', '娣诲姞鏃堕棿'),
dataIndex: 'createTime$',
- key: 'createTime$',
+ width: 140,
},
{
- title: '澶囨敞',
- name: 'memo',
+ title: formatMessage('db.sys_user_login.system', '鐧诲綍绯荤粺'),
+ dataIndex: 'system',
+ width: 140,
+ },
+ {
+ title: formatMessage('db.sys_user_login.memo', '澶囨敞'),
dataIndex: 'memo',
- key: 'memo',
+ width: 140,
},
+
{
- title: '鎿嶄綔',
+ title: formatMessage('common.operation', '鎿嶄綔'),
name: 'oper',
dataIndex: 'oper',
key: 'oper',
+ width: 140,
},
];
@@ -136,15 +115,21 @@
content: formatMessage('page.delete.confirm', '纭畾鍒犻櫎璇ラ」鍚楋紵'),
maskClosable: true,
onOk: async () => {
- post('/api/userLogin/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()
- })
+ const hide = message.loading(formatMessage('common.loading', '璇锋眰涓�'));
+ try {
+ post('/api/userLogin/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', '璇锋眰澶辫触'));
+ }
},
});
}
@@ -208,4 +193,4 @@
</div>
</template>
-<style></style>
\ No newline at end of file
+<style></style>
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/entity/UserLogin.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/entity/UserLogin.java
index 08e2205..02543a1 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/entity/UserLogin.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/entity/UserLogin.java
@@ -38,6 +38,12 @@
private Long userId;
/**
+ * 绫诲瀷 0: 鐧诲綍鎴愬姛 1: 鐧诲綍澶辫触 2: 閫�鍑虹櫥褰� 3: 缁token
+ */
+ @ApiModelProperty(value= "绫诲瀷 0: 鐧诲綍鎴愬姛 1: 鐧诲綍澶辫触 2: 閫�鍑虹櫥褰� 3: 缁token")
+ private Integer type;
+
+ /**
* 鍑瘉鍊�
*/
private String token;
@@ -68,4 +74,23 @@
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
}
+ public String getType$(){
+ if (Cools.isEmpty(this.getType())){
+ return "";
+ }
+ //0: 鐧诲綍鎴愬姛 1: 鐧诲綍澶辫触 2: 閫�鍑虹櫥褰� 3: 缁token
+ switch (this.getType()) {
+ case 0:
+ return "鐧诲綍鎴愬姛";
+ case 1:
+ return "鐧诲綍澶辫触";
+ case 2:
+ return "閫�鍑虹櫥褰�";
+ case 3:
+ return "缁token";
+ default:
+ return String.valueOf(this.getType());
+ }
+ }
+
}
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 a99e90c..711137a 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
@@ -15,15 +15,15 @@
generator.frontendPrefixPath = "zy-asrs-admin/";
generator.sqlOsType = SqlOsType.MYSQL;
- generator.url="localhost:3306/asrs";
+ generator.url="localhost:3306/wms_dev";
generator.username="root";
generator.password="root";
// generator.url="47.97.1.152:51433;databasename=jkasrs";
// generator.username="sa";
// generator.password="Zoneyung@zy56$";
- generator.table="sys_user";
- generator.tableName="鐢ㄦ埛绠$悊";
+ generator.table="sys_user_login";
+ generator.tableName="鐧诲綍鏃ュ織";
generator.packagePath="com.zy.asrs.wms.system";
generator.build();
diff --git a/zy-asrs-wms/src/main/java/host.sql b/zy-asrs-wms/src/main/java/host.sql
deleted file mode 100644
index 3272260..0000000
--- a/zy-asrs-wms/src/main/java/host.sql
+++ /dev/null
@@ -1,9 +0,0 @@
--- save host record
--- mysql
-insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `host_id`, `status`) values ( '鏈烘瀯绠$悊绠$悊', '0', '/system/host', '/system/host', '0' , '0', '1' , '1');
-
-insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '鏌ヨ鏈烘瀯绠$悊', '', '1', 'system:host:list', '0', '1', '1');
-insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '娣诲姞鏈烘瀯绠$悊', '', '1', 'system:host:save', '1', '1', '1');
-insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '淇敼鏈烘瀯绠$悊', '', '1', 'system:host:update', '2', '1', '1');
-insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '鍒犻櫎鏈烘瀯绠$悊', '', '1', 'system:host:remove', '3', '1', '1');
-
diff --git a/zy-asrs-wms/src/main/java/user.sql b/zy-asrs-wms/src/main/java/user.sql
deleted file mode 100644
index a704325..0000000
--- a/zy-asrs-wms/src/main/java/user.sql
+++ /dev/null
@@ -1,9 +0,0 @@
--- save user record
--- mysql
-insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `host_id`, `status`) values ( '鐢ㄦ埛绠$悊绠$悊', '0', '/system/user', '/system/user', '0' , '0', '1' , '1');
-
-insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '鏌ヨ鐢ㄦ埛绠$悊', '', '1', 'system:user:list', '0', '1', '1');
-insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '娣诲姞鐢ㄦ埛绠$悊', '', '1', 'system:user:save', '1', '1', '1');
-insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '淇敼鐢ㄦ埛绠$悊', '', '1', 'system:user:update', '2', '1', '1');
-insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '鍒犻櫎鐢ㄦ埛绠$悊', '', '1', 'system:user:remove', '3', '1', '1');
-
diff --git a/zy-asrs-wms/src/main/java/userLogin.sql b/zy-asrs-wms/src/main/java/userLogin.sql
new file mode 100644
index 0000000..2269943
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/userLogin.sql
@@ -0,0 +1,9 @@
+-- save userLogin record
+-- mysql
+insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `host_id`, `status`) values ( '鐧诲綍鏃ュ織绠$悊', '0', '/system/userLogin', '/system/userLogin', '0' , '0', '1' , '1');
+
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '鏌ヨ鐧诲綍鏃ュ織', '', '1', 'system:userLogin:list', '0', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '娣诲姞鐧诲綍鏃ュ織', '', '1', 'system:userLogin:save', '1', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '淇敼鐧诲綍鏃ュ織', '', '1', 'system:userLogin:update', '2', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '鍒犻櫎鐧诲綍鏃ュ織', '', '1', 'system:userLogin:remove', '3', '1', '1');
+
--
Gitblit v1.9.1