Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion server/common/log.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ def emit(self, record):

def init_logging():
# 获取所有uvicorn的日志设定,并重置
print(logging.root.manager.loggerDict)
loggers = (
logging.getLogger(name)
for name in logging.root.manager.loggerDict
Expand Down
12 changes: 9 additions & 3 deletions server/routers/internal/dictonary.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,15 @@ async def del_dict_item(item_id: int, session: Session = Depends(get_session)):
response_model_exclude={'data': {'__all__': {'desc', 'sort', 'enable'}}})
async def get_dict(dict_code: str, session: Session = Depends(get_session)):
dict_items: List[DictItem] = crud.internal.dict_item.get_items_by_code(session, dict_code)
return ApiResponse(
data=[DictRead.from_orm(item) for item in dict_items]
)
if dict_items:
return ApiResponse(
data=[DictRead.from_orm(item) for item in dict_items]
)
else:
return ApiResponse(
code=404,
message=f"无效的数据字典:{dict_code}"
)


@router.post("/dict", summary="新建数据字典", response_model=ApiResponse[DataDict])
Expand Down
2 changes: 1 addition & 1 deletion server/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ class APISettings(BaseSettings):

settings = APISettings()

engine = create_engine(settings.DATABASE_URI, future=False)
engine = create_engine(settings.DATABASE_URI, pool_size=5, max_overflow=10, pool_timeout=30, pool_pre_ping=True)
adapter = casbin_sqlalchemy_adapter.Adapter(engine)
casbin_enforcer = casbin.Enforcer(settings.CASBIN_MODEL_PATH, adapter)
125 changes: 65 additions & 60 deletions www/src/components/AutoDict.vue
Original file line number Diff line number Diff line change
@@ -1,17 +1,23 @@
<template>
<!--数据字典自动带出组件。通过提供的URL获取信息,并根据需要选择相应的组件进行展示-->
<template v-if="type==='select'">
<template v-if="dictType==='select'">
<el-select v-model="modelValue" @change="handleUpdate">
<el-option v-for="item in itemArray" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
</template>

<template v-else-if="type === 'switch'">
<template v-if="dictType==='select+'">
<el-select v-model="modelValue" :filterable="true" :allow-create="true" @change="handleUpdate">
<el-option v-for="item in itemArray" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
</template>

<template v-else-if="dictType === 'switch'">
<el-switch v-model="modelValue" @change="handleUpdate"
style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949"/>
</template>

<template v-else-if="type === 'checkbox'">
<template v-else-if="dictType === 'checkbox'">
<el-checkbox v-model="checkAll" :indeterminate="isIndeterminate" @change="handleCheckAllChange">全选</el-checkbox>
<el-checkbox-group v-model="modelValue" @change="handleUpdate">
<el-row :gutter="20">
Expand All @@ -25,72 +31,71 @@
</template>

<script setup>
import {onMounted, ref, toRefs} from 'vue'
import {GetDictItems} from '@/api/dictonary'
import {onMounted, ref, toRefs} from 'vue'
import {GetDictItems} from '@/api/dictonary'
import {useDictStore} from "@/stores/dict";

const props = defineProps({
//选择框类型
type: {
type: String,
validator(value) {
return ['select', 'switch', 'checkbox'].includes(value)
}
},
//数据字典对应编码
code: {
type: String,
required: true
},
//checkbox时用于对应列数
col: {
type: Number,
default: 2
},
//绑定的值
modelValue: {
required: true
const props = defineProps({
//选择框类型
dictType: {
type: String,
validator(value) {
return ['select', 'select+', 'switch', 'checkbox'].includes(value)
}
})
const emit = defineEmits(['update:modelValue'])
const {type, code, col, modelValue} = toRefs(props)
const itemArray = ref(null)
const colSpan = 24 / col.value
const checkAll = ref(false)
const isIndeterminate = ref(true)
},
//数据字典对应编码
code: {
type: String,
required: true
},
//checkbox时用于对应列数
col: {
type: Number,
default: 2
},
//绑定的值
modelValue: {
required: true
}
})
const emit = defineEmits(['update:modelValue'])
const {dictType, code, col, modelValue} = toRefs(props)
const itemArray = ref(null)
const colSpan = 24 / col.value
const checkAll = ref(false)
const isIndeterminate = ref(true)
const distStore = useDictStore()

let allItems = []
let allItems = []

function handleUpdate(currentValue) {
if (type.value === 'checkbox') {
const checkedCount = currentValue.length
checkAll.value = checkedCount === allItems.length
isIndeterminate.value = checkedCount > 0 && checkedCount < allItems.length
}
emit('update:modelValue', currentValue)
function handleUpdate(currentValue) {
if (dictType.value === 'checkbox') {
const checkedCount = currentValue.length
checkAll.value = checkedCount === allItems.length
isIndeterminate.value = checkedCount > 0 && checkedCount < allItems.length
}
emit('update:modelValue', currentValue)
}

function handleCheckAllChange(val) {
if (val) {
emit('update:modelValue', allItems)
} else {
emit('update:modelValue', [])
}
isIndeterminate.value = false
function handleCheckAllChange(val) {
if (val) {
emit('update:modelValue', allItems)
} else {
emit('update:modelValue', [])
}
isIndeterminate.value = false
}

GetDictItems(code.value).then(response => {
itemArray.value = response
if (type.value === 'checkbox') {
itemArray.value.forEach((item) => {
console.log('add to items:' + item['value'])
allItems.push(item['value'])
})
}
})

onMounted(() => {

})
onMounted(async () => {
itemArray.value = await distStore.getDictItems(code.value)
console.log(itemArray.value)
if (dictType.value === 'checkbox') {
itemArray.value.forEach((item) => {
allItems.push(item['value'])
})
}
})
</script>

<style scoped>
Expand Down
29 changes: 29 additions & 0 deletions www/src/stores/dict.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import {defineStore} from "pinia";
import {computed, ref} from 'vue'
import {GetDictItems} from '@/api/dictonary'

export const useDictStore = defineStore('dict', () => {
const dictObject = ref({})
// 通过dict,返回对应的值.构建一个带参数的getter
const dictItems = computed(() => {
return (dictName) => {
if (!dictObject.value.hasOwnProperty(dictName)) {
GetDictItems(dictName).then(response => {
dictObject.value[dictName] = response
})
}
return dictObject.value[dictName]

}
})

async function getDictItems(dictName) {
if (!dictObject.value.hasOwnProperty(dictName)) {
console.log('dictObject has no dict:'+dictName)
dictObject.value[dictName] = await GetDictItems(dictName)
}
return dictObject.value[dictName]
}

return {dictObject, dictItems, getDictItems}
})
2 changes: 1 addition & 1 deletion www/src/views/system/menus/ButtonForm.vue
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<el-input v-model="selectData.auth"></el-input>
</el-form-item>
<el-form-item label="状态">
<auto-dict v-model="selectData.enable" type="switch" code="enable_code"/>
<auto-dict v-model="selectData.enable" dict-type="switch" code="enable_code"/>
</el-form-item>
</template>

Expand Down
2 changes: 1 addition & 1 deletion www/src/views/system/menus/MenuForm.vue
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
<el-input-number v-model="selectData.sort" :step="0.1"/>
</el-form-item>
<el-form-item label="状态">
<auto-dict v-model="selectData.enable" type="switch" code="enable_code"/>
<auto-dict v-model="selectData.enable" dict-type="switch" code="enable_code"/>
</el-form-item>

<!-- icon选择对话框-->
Expand Down
11 changes: 7 additions & 4 deletions www/src/views/system/roles/RoleDialog.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<template>
<el-dialog :model-value="visible" title="角色编辑页面" width="50%" @close="$emit('update:visible', false)"
@opened="GetInfo" destroy-on-close>
destroy-on-close>
<el-form :model="selectData" label-width="80px">
<el-form-item label="角色名称">
<el-input v-model="selectData.name"></el-input>
Expand All @@ -9,7 +9,7 @@
<el-input v-model="selectData.description"></el-input>
</el-form-item>
<el-form-item label="状态">
<auto-dict v-model="selectData.enable" type="switch" code="enable_code"/>
<auto-dict v-model="selectData.enable" dict-type="switch" code="enable_code"/>
</el-form-item>
<el-form-item label="菜单权限">
<el-tree ref="menuTree" :data="menus" :props="defaultProps" accordion show-checkbox node-key="id"
Expand All @@ -32,7 +32,7 @@
</template>

<script setup>
import {ref, reactive} from 'vue'
import {ref, reactive, onMounted} from 'vue'
import {
GetRoleEnableMenus,
PutRoles,
Expand Down Expand Up @@ -110,7 +110,10 @@
return null
}

GetInfo()
onMounted(()=>{
GetInfo()
})

</script>

<style>
Expand Down
6 changes: 4 additions & 2 deletions www/src/views/system/roles/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
<el-input v-model="search.name"/>
</el-form-item>
<el-form-item label="状态" prop="enable">
<auto-dict type="select" code="enable_code" v-model="search.enable" style="width: 100px"/>
<div style="width: 100px">
<auto-dict dict-type="select" code="enable_code" v-model="search.enable"/>
</div>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSearch" :icon="Search">
Expand Down Expand Up @@ -52,7 +54,7 @@

</template>
<script setup>
import {onMounted, reactive, ref, watch} from 'vue'
import {reactive, ref, watch} from 'vue'
import {Search, RefreshRight, Plus} from '@element-plus/icons-vue'
import {GetRoles, DeleteRole} from '@/api/roles'
import usePagination from '@/composables/usePagination'
Expand Down
2 changes: 1 addition & 1 deletion www/src/views/system/user/UserDialog.vue
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<el-input v-model="selectData.name" :disabled="selectData.id !== null"></el-input>
</el-form-item>
<el-form-item label="状态">
<auto-dict type="switch" code="enable_code" v-model="selectData.enable" />
<auto-dict dict-type="switch" code="enable_code" v-model="selectData.enable" />
</el-form-item>
<el-form-item label="角色">
<el-checkbox-group v-model="enableRoleList">
Expand Down
4 changes: 3 additions & 1 deletion www/src/views/system/user/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
<el-input v-model="search.email"/>
</el-form-item>
<el-form-item label="状态" prop="enable">
<auto-dict type="select" code="enable_code" v-model="search.enable" style="width: 100px"/>
<div style="width: 100px">
<auto-dict dict-type="select" code="enable_code" v-model="search.enable"/>
</div>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSearch" :icon="Search">搜索</el-button>
Expand Down