Merge pull request #50 from mizhexiaoxiao/dev

Dev
This commit is contained in:
mizhexiaoxiao 2024-09-20 14:55:24 +08:00 committed by GitHub
commit 4d808e240b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 38 additions and 46 deletions

View File

@ -14,7 +14,9 @@ async def get_audit_log_list(
page_size: int = Query(10, description="每页数量"),
username: str = Query("", description="操作人名称"),
module: str = Query("", description="功能模块"),
method: str = Query("", description="请求方法"),
summary: str = Query("", description="接口描述"),
status: int = Query(None, description="状态码"),
start_time: str = Query("", description="开始时间"),
end_time: str = Query("", description="结束时间"),
):
@ -23,8 +25,12 @@ async def get_audit_log_list(
q &= Q(username__icontains=username)
if module:
q &= Q(module__icontains=module)
if method:
q &= Q(method__icontains=method)
if summary:
q &= Q(summary__icontains=summary)
if status:
q &= Q(status__icontains=status)
if start_time and end_time:
q &= Q(created_at__range=[start_time, end_time])
elif start_time:

View File

@ -24,7 +24,7 @@ class User(BaseModel, TimestampMixin):
class Role(BaseModel, TimestampMixin):
name = fields.CharField(max_length=20, unique=True, description="角色名称", index=True)
desc = fields.CharField(max_length=500, null=True, blank=True, description="角色描述")
desc = fields.CharField(max_length=500, null=True, description="角色描述")
menus = fields.ManyToManyField("models.Menu", related_name="role_menus")
apis = fields.ManyToManyField("models.Api", related_name="role_apis")
@ -44,16 +44,16 @@ class Api(BaseModel, TimestampMixin):
class Menu(BaseModel, TimestampMixin):
name = fields.CharField(max_length=20, description="菜单名称", index=True)
remark = fields.JSONField(null=True, description="保留字段", blank=True)
menu_type = fields.CharEnumField(MenuType, null=True, blank=True, description="菜单类型")
icon = fields.CharField(max_length=100, null=True, blank=True, description="菜单图标")
remark = fields.JSONField(null=True, description="保留字段")
menu_type = fields.CharEnumField(MenuType, null=True, description="菜单类型")
icon = fields.CharField(max_length=100, null=True, description="菜单图标")
path = fields.CharField(max_length=100, description="菜单路径", index=True)
order = fields.IntField(default=0, description="排序", index=True)
parent_id = fields.IntField(default=0, max_length=10, description="父菜单ID", index=True)
is_hidden = fields.BooleanField(default=False, description="是否隐藏")
component = fields.CharField(max_length=100, description="组件")
keepalive = fields.BooleanField(default=True, description="存活")
redirect = fields.CharField(max_length=100, null=True, blank=True, description="重定向")
redirect = fields.CharField(max_length=100, null=True, description="重定向")
class Meta:
table = "menu"
@ -61,7 +61,7 @@ class Menu(BaseModel, TimestampMixin):
class Dept(BaseModel, TimestampMixin):
name = fields.CharField(max_length=20, unique=True, description="部门名称", index=True)
desc = fields.CharField(max_length=500, null=True, blank=True, description="备注")
desc = fields.CharField(max_length=500, null=True, description="备注")
is_deleted = fields.BooleanField(default=False, description="软删除标记", index=True)
order = fields.IntField(default=0, description="排序", index=True)
parent_id = fields.IntField(default=0, max_length=10, description="父部门ID", index=True)

View File

@ -124,7 +124,7 @@ function handleSearch() {
async function handleReset() {
const queryItems = { ...props.queryItems }
for (const key in queryItems) {
queryItems[key] = ''
queryItems[key] = null
}
emit('update:queryItems', { ...queryItems, ...initQuery })
await nextTick()

View File

@ -2,7 +2,6 @@
import '@/styles/reset.css'
import 'uno.css'
import '@/styles/global.scss'
import 'virtual:svg-icons-register'
import { createApp } from 'vue'
import { setupRouter } from '@/router'

View File

@ -1,47 +1,18 @@
<script setup>
import { onMounted, ref, resolveDirective } from 'vue'
import { onMounted, ref } from 'vue'
import { NInput, NSelect } from 'naive-ui'
import CommonPage from '@/components/page/CommonPage.vue'
import QueryBarItem from '@/components/query-bar/QueryBarItem.vue'
import CrudTable from '@/components/table/CrudTable.vue'
import { useCRUD } from '@/composables'
import api from '@/api'
defineOptions({ name: '操作日志' })
defineOptions({ name: '审计日志' })
const $table = ref(null)
const queryItems = ref({})
const {
modalVisible,
modalTitle,
modalLoading,
handleSave,
modalForm,
modalFormRef,
handleEdit,
handleDelete,
handleAdd,
} = useCRUD({
name: '操作日志',
initForm: {
args: {
ping_sleep: 1,
ping_threshold: 500,
agent_data_check_threshold: 2,
agent_incoming_traffic_threshold: 30,
before_start_clean_sleep: 2,
before_stop_disposal_sleep: 20,
},
},
doCreate: api.createHostMonitor,
doUpdate: api.updateHostMonitor,
doDelete: api.deleteHostMonitor,
refresh: () => $table.value?.handleSearch(),
})
onMounted(() => {
$table.value?.handleSearch()
})
@ -75,14 +46,21 @@ function getEndOfDayTimestamp() {
return now.getTime()
}
// 使
const startOfDayTimestamp = getStartOfDayTimestamp()
const endOfDayTimestamp = getEndOfDayTimestamp()
queryItems.value.start_time = formatTimestamp(startOfDayTimestamp)
queryItems.value.end_time = formatTimestamp(endOfDayTimestamp)
const datetimeRange = ref([startOfDayTimestamp, endOfDayTimestamp])
const handleDateRangeChange = (value) => {
queryItems.value.start_time = formatTimestamp(value[0])
queryItems.value.end_time = formatTimestamp(value[1])
if (value == null) {
queryItems.value.start_time = null
queryItems.value.end_time = null
} else {
queryItems.value.start_time = formatTimestamp(value[0])
queryItems.value.end_time = formatTimestamp(value[1])
}
}
const methodOptions = [
@ -200,19 +178,28 @@ const columns = [
</QueryBarItem>
<QueryBarItem label="请求方法" :label-width="70">
<NSelect
v-model:value="modalForm.method"
style="width: 150px"
v-model:value="queryItems.method"
style="width: 180px"
:options="methodOptions"
clearable
placeholder="请选择请求方法"
/>
</QueryBarItem>
<QueryBarItem label="API路径" :label-width="70">
<QueryBarItem label="请求路径" :label-width="70">
<NInput
v-model:value="queryItems.path"
clearable
type="text"
placeholder="请输入API路径"
placeholder="请输入请求路径"
@keypress.enter="$table?.handleSearch()"
/>
</QueryBarItem>
<QueryBarItem label="状态码" :label-width="70">
<NInput
v-model:value="queryItems.status"
clearable
type="text"
placeholder="请输入状态码"
@keypress.enter="$table?.handleSearch()"
/>
</QueryBarItem>