diff --git a/web/src/views/system/log/loginLog/api.js b/web/src/views/system/log/loginLog/api.js
new file mode 100644
index 0000000..337a05f
--- /dev/null
+++ b/web/src/views/system/log/loginLog/api.js
@@ -0,0 +1,19 @@
+/*
+ * @创建文件时间: 2021-06-08 10:40:32
+ * @Auther: 猿小天
+ * @最后修改人: 猿小天
+ * @最后修改时间: 2021-06-09 10:36:20
+ * 联系Qq:1638245306
+ * @文件介绍: 操作日志
+ */
+import { request } from '@/api/service'
+
+export const urlPrefix = '/api/system/login_log/'
+
+export function GetList (query) {
+ return request({
+ url: urlPrefix,
+ method: 'get',
+ params: query
+ })
+}
diff --git a/web/src/views/system/log/loginLog/crud.js b/web/src/views/system/log/loginLog/crud.js
new file mode 100644
index 0000000..d7352c8
--- /dev/null
+++ b/web/src/views/system/log/loginLog/crud.js
@@ -0,0 +1,293 @@
+import { BUTTON_WHETHER_BOOL } from '@/config/button'
+
+export const crudOptions = (vm) => {
+ return {
+ pageOptions: {
+ compact: true
+ },
+ options: {
+ tableType: 'vxe-table',
+ rowKey: true, // 必须设置,true or false
+ rowId: 'id',
+ height: '100%', // 表格高度100%, 使用toolbar必须设置
+ highlightCurrentRow: false
+
+ },
+ rowHandle: {
+ fixed: 'right',
+ view: {
+ thin: true,
+ text: '',
+ disabled () {
+ return !vm.hasPermissions('Retrieve')
+ }
+ },
+ width: 70,
+ edit: {
+ thin: true,
+ text: '',
+ show: false,
+ disabled () {
+ return !vm.hasPermissions('Update')
+ }
+ },
+ remove: {
+ thin: true,
+ text: '删除',
+ show: false,
+ disabled () {
+ return !vm.hasPermissions('Delete')
+ }
+ }
+ },
+ viewOptions: {
+ componentType: 'form'
+ },
+ formOptions: {
+ disabled: true,
+ defaultSpan: 12 // 默认的表单 span
+ },
+ indexRow: { // 或者直接传true,不显示title,不居中
+ title: '序号',
+ align: 'center',
+ width: 70
+ },
+ columns: [
+ {
+ title: '关键词',
+ key: 'search',
+ show: false,
+ disabled: true,
+ search: {
+ disabled: false
+ },
+ form: {
+ show: false,
+ component: {
+ placeholder: '请输入关键词'
+ }
+ }
+ },
+ {
+ title: 'ID',
+ key: 'id',
+ width: 90,
+ disabled: true,
+ form: {
+ disabled: true
+ }
+ },
+ {
+ title: '登录用户名',
+ key: 'username',
+ search: {
+ disabled: false
+ },
+ width: 140,
+ type: 'input',
+ form: {
+ disabled: true,
+ component: {
+ placeholder: '请输入登录用户名'
+ }
+ }
+ },
+ {
+ title: '登录ip',
+ key: 'ip',
+ search: {
+ disabled: false
+ },
+ width: 130,
+ type: 'input',
+ form: {
+ disabled: true,
+ component: {
+ placeholder: '请输入登录ip'
+ }
+ }
+ }, {
+ title: '运营商',
+ key: 'isp',
+ search: {
+ disabled: true
+ },
+ disabled: true,
+ width: 180,
+ type: 'input',
+ form: {
+ component: {
+ placeholder: '请输入操作系统'
+ }
+ }
+ }, {
+ title: '大州',
+ key: 'continent',
+ width: 80,
+ type: 'input',
+ form: {
+ disabled: true,
+ component: {
+ placeholder: '请输入州'
+ }
+ },
+ component: { props: { color: 'auto' } } // 自动染色
+ }, {
+ title: '国家',
+ key: 'country',
+ width: 80,
+ type: 'input',
+ form: {
+ component: {
+ placeholder: '请输入国家'
+ }
+ },
+ component: { props: { color: 'auto' } } // 自动染色
+ }, {
+ title: '省份',
+ key: 'province',
+ width: 80,
+ type: 'input',
+ form: {
+ component: {
+ placeholder: '请输入省份'
+ }
+ },
+ component: { props: { color: 'auto' } } // 自动染色
+ }, {
+ title: '城市',
+ key: 'city',
+ width: 80,
+ type: 'input',
+ form: {
+ component: {
+ placeholder: '请输入城市'
+ }
+ },
+ component: { props: { color: 'auto' } } // 自动染色
+ }, {
+ title: '县区',
+ key: 'district',
+ width: 80,
+ type: 'input',
+ form: {
+ component: {
+ placeholder: '请输入县区'
+ }
+ },
+ component: { props: { color: 'auto' } } // 自动染色
+ }, {
+ title: '区域代码',
+ key: 'area_code',
+ width: 100,
+ type: 'input',
+ form: {
+ component: {
+ placeholder: '请输入区域代码'
+ }
+ },
+ component: { props: { color: 'auto' } } // 自动染色
+ }, {
+ title: '英文全称',
+ key: 'country_english',
+ width: 120,
+ type: 'input',
+ form: {
+ component: {
+ placeholder: '请输入英文全称'
+ }
+ },
+ component: { props: { color: 'auto' } } // 自动染色
+ }, {
+ title: '简称',
+ key: 'country_code',
+ width: 100,
+ type: 'input',
+ form: {
+ component: {
+ placeholder: '请输入简称'
+ }
+ },
+ component: { props: { color: 'auto' } } // 自动染色
+ }, {
+ title: '经度',
+ key: 'longitude',
+ width: 80,
+ type: 'input',
+ disabled: true,
+ form: {
+ component: {
+ placeholder: '请输入经度'
+ }
+ },
+ component: { props: { color: 'auto' } } // 自动染色
+ }, {
+ title: '纬度',
+ key: 'latitude',
+ width: 80,
+ type: 'input',
+ disabled: true,
+ form: {
+ component: {
+ placeholder: '请输入纬度'
+ }
+ },
+ component: { props: { color: 'auto' } } // 自动染色
+ }, {
+ title: '登录类型',
+ key: 'login_type',
+ width: 100,
+ type: 'select',
+ search: {
+ disabled: false
+ },
+ dict: {
+ data: [{ label: '普通登录', value: 1 }]
+ },
+ form: {
+ component: {
+ placeholder: '请选择登录类型'
+ }
+ },
+ component: { props: { color: 'auto' } } // 自动染色
+ }, {
+ title: '操作系统',
+ key: 'os',
+ width: 180,
+ type: 'input',
+ form: {
+ component: {
+ placeholder: '请输入操作系统'
+ }
+ }
+ }, {
+ title: '浏览器名',
+ key: 'browser',
+ width: 180,
+ type: 'input',
+ form: {
+ component: {
+ placeholder: '请输入操作系统'
+ }
+ }
+ }, {
+ title: 'agent信息',
+ key: 'agent',
+ disabled: true,
+ width: 180,
+ type: 'input',
+ form: {
+ component: {
+ placeholder: '请输入操作系统'
+ }
+ }
+ }, {
+ fixed: 'right',
+ title: '登录时间',
+ key: 'create_datetime',
+ width: 160,
+ type: 'datetime'
+ }
+ ]
+ }
+}
diff --git a/web/src/views/system/log/loginLog/index.vue b/web/src/views/system/log/loginLog/index.vue
new file mode 100644
index 0000000..cd6c6a3
--- /dev/null
+++ b/web/src/views/system/log/loginLog/index.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+