1. 新增软删除功能
2. Form组件新增设置单个值功能
This commit is contained in:
parent
cbfd2e4074
commit
49d9ca7652
@ -3,6 +3,7 @@ import { ElForm } from 'element-plus'
|
|||||||
|
|
||||||
export interface FormExpose {
|
export interface FormExpose {
|
||||||
setValues: (data: Recordable) => void
|
setValues: (data: Recordable) => void
|
||||||
|
setValue: (key: string, value: any) => void
|
||||||
setProps: (props: Recordable) => void
|
setProps: (props: Recordable) => void
|
||||||
delSchema: (field: string) => void
|
delSchema: (field: string) => void
|
||||||
addSchema: (formSchema: FormSchema, index?: number) => void
|
addSchema: (formSchema: FormSchema, index?: number) => void
|
||||||
|
@ -75,6 +75,11 @@ export default defineComponent({
|
|||||||
formModel.value = Object.assign(unref(formModel), data)
|
formModel.value = Object.assign(unref(formModel), data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 对表单单个属性赋值
|
||||||
|
const setValue = (key: string, value: any) => {
|
||||||
|
formModel.value[key] = value
|
||||||
|
}
|
||||||
|
|
||||||
const setProps = (props: FormProps = {}) => {
|
const setProps = (props: FormProps = {}) => {
|
||||||
mergeProps.value = Object.assign(unref(mergeProps), props)
|
mergeProps.value = Object.assign(unref(mergeProps), props)
|
||||||
outsideProps.value = props
|
outsideProps.value = props
|
||||||
@ -115,6 +120,7 @@ export default defineComponent({
|
|||||||
|
|
||||||
expose({
|
expose({
|
||||||
setValues,
|
setValues,
|
||||||
|
setValue,
|
||||||
formModel,
|
formModel,
|
||||||
setProps,
|
setProps,
|
||||||
delSchema,
|
delSchema,
|
||||||
|
@ -32,6 +32,7 @@ export const useForm = (props?: FormProps) => {
|
|||||||
const methods: {
|
const methods: {
|
||||||
setProps: (props: Recordable) => void
|
setProps: (props: Recordable) => void
|
||||||
setValues: (data: Recordable) => void
|
setValues: (data: Recordable) => void
|
||||||
|
setValue: (key: string, value: any) => void
|
||||||
getFormData: <T = Recordable | undefined>() => Promise<T>
|
getFormData: <T = Recordable | undefined>() => Promise<T>
|
||||||
setSchema: (schemaProps: FormSetPropsType[]) => void
|
setSchema: (schemaProps: FormSetPropsType[]) => void
|
||||||
addSchema: (formSchema: FormSchema, index?: number) => void
|
addSchema: (formSchema: FormSchema, index?: number) => void
|
||||||
@ -46,13 +47,15 @@ export const useForm = (props?: FormProps) => {
|
|||||||
const form = await getForm()
|
const form = await getForm()
|
||||||
form?.setValues(data)
|
form?.setValues(data)
|
||||||
},
|
},
|
||||||
|
setValue: async (key: string, value: any) => {
|
||||||
|
const form = await getForm()
|
||||||
|
form?.setValue(key, value)
|
||||||
|
},
|
||||||
/**
|
/**
|
||||||
* @param schemaProps 需要设置的schemaProps
|
* @param schemaProps 需要设置的schemaProps
|
||||||
*/
|
*/
|
||||||
setSchema: async (schemaProps: FormSetPropsType[]) => {
|
setSchema: async (schemaProps: FormSetPropsType[]) => {
|
||||||
const form = await getForm()
|
const form = await getForm()
|
||||||
console.log(1111111111, schemaProps)
|
|
||||||
console.log(222222, form)
|
|
||||||
form?.setSchema(schemaProps)
|
form?.setSchema(schemaProps)
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -7,16 +7,17 @@
|
|||||||
# @desc : 数据库 增删改查操作
|
# @desc : 数据库 增删改查操作
|
||||||
|
|
||||||
# sqlalchemy 查询操作:https://segmentfault.com/a/1190000016767008
|
# sqlalchemy 查询操作:https://segmentfault.com/a/1190000016767008
|
||||||
|
# sqlalchemy 增删改操作:https://www.osgeo.cn/sqlalchemy/tutorial/orm_data_manipulation.html#updating-orm-objects
|
||||||
# SQLAlchemy lazy load和eager load: https://www.jianshu.com/p/dfad7c08c57a
|
# SQLAlchemy lazy load和eager load: https://www.jianshu.com/p/dfad7c08c57a
|
||||||
# Mysql中内连接,左连接和右连接的区别总结:https://www.cnblogs.com/restartyang/articles/9080993.html
|
# Mysql中内连接,左连接和右连接的区别总结:https://www.cnblogs.com/restartyang/articles/9080993.html
|
||||||
# SQLAlchemy join 内连接
|
# SQLAlchemy join 内连接
|
||||||
# selectinload 官方文档:
|
# selectinload 官方文档:
|
||||||
# https://www.osgeo.cn/sqlalchemy/orm/loading_relationships.html?highlight=selectinload#sqlalchemy.orm.selectinload
|
# https://www.osgeo.cn/sqlalchemy/orm/loading_relationships.html?highlight=selectinload#sqlalchemy.orm.selectinload
|
||||||
|
import datetime
|
||||||
from typing import List
|
from typing import List
|
||||||
from fastapi import HTTPException
|
from fastapi import HTTPException
|
||||||
from fastapi.encoders import jsonable_encoder
|
from fastapi.encoders import jsonable_encoder
|
||||||
from sqlalchemy import func, delete, and_
|
from sqlalchemy import func, delete, update
|
||||||
from sqlalchemy.future import select
|
from sqlalchemy.future import select
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from sqlalchemy.orm import selectinload
|
from sqlalchemy.orm import selectinload
|
||||||
@ -61,11 +62,11 @@ class DalBase:
|
|||||||
if key != "order" and key != "return_none" and value and getattr(self.model, key, None):
|
if key != "order" and key != "return_none" and value and getattr(self.model, key, None):
|
||||||
kwargs_exist = True
|
kwargs_exist = True
|
||||||
break
|
break
|
||||||
|
sql = select(self.model).where(self.model.delete_datetime.is_(None))
|
||||||
if data_id or kwargs_exist or keys_exist:
|
if data_id or kwargs_exist or keys_exist:
|
||||||
sql = select(self.model).where(self.model.id == data_id) if data_id else select(self.model)
|
if data_id:
|
||||||
|
sql = sql.where(self.model.id == data_id)
|
||||||
sql = self.add_filter_condition(sql, keys, options, **kwargs)
|
sql = self.add_filter_condition(sql, keys, options, **kwargs)
|
||||||
else:
|
|
||||||
sql = select(self.model)
|
|
||||||
if order and order == "desc":
|
if order and order == "desc":
|
||||||
sql = sql.order_by(self.model.create_datetime.desc())
|
sql = sql.order_by(self.model.create_datetime.desc())
|
||||||
queryset = await self.db.execute(sql)
|
queryset = await self.db.execute(sql)
|
||||||
@ -97,7 +98,9 @@ class DalBase:
|
|||||||
order_field = kwargs.get("order_field", None)
|
order_field = kwargs.get("order_field", None)
|
||||||
return_objs = kwargs.get("return_objs", False)
|
return_objs = kwargs.get("return_objs", False)
|
||||||
start_sql = kwargs.get("start_sql", None)
|
start_sql = kwargs.get("start_sql", None)
|
||||||
sql = self.add_filter_condition(start_sql if isinstance(start_sql, Select) else select(self.model), keys, options, **kwargs)
|
if not isinstance(start_sql, Select):
|
||||||
|
start_sql = select(self.model).where(self.model.delete_datetime.is_(None))
|
||||||
|
sql = self.add_filter_condition(start_sql, keys, options, **kwargs)
|
||||||
if order_field and order == "desc":
|
if order_field and order == "desc":
|
||||||
sql = sql.order_by(getattr(self.model, order_field).desc(), self.model.id.desc())
|
sql = sql.order_by(getattr(self.model, order_field).desc(), self.model.id.desc())
|
||||||
elif order_field:
|
elif order_field:
|
||||||
@ -115,7 +118,7 @@ class DalBase:
|
|||||||
|
|
||||||
async def get_count(self, keys: dict = None, **kwargs):
|
async def get_count(self, keys: dict = None, **kwargs):
|
||||||
"""获取数据总数"""
|
"""获取数据总数"""
|
||||||
sql = select(func.count(self.model.id).label('total'))
|
sql = select(func.count(self.model.id).label('total')).where(self.model.delete_datetime.is_(None))
|
||||||
sql = self.add_filter_condition(sql, keys, **kwargs)
|
sql = self.add_filter_condition(sql, keys, **kwargs)
|
||||||
queryset = await self.db.execute(sql)
|
queryset = await self.db.execute(sql)
|
||||||
return queryset.one()['total']
|
return queryset.one()['total']
|
||||||
@ -153,12 +156,17 @@ class DalBase:
|
|||||||
return schema.from_orm(obj).dict()
|
return schema.from_orm(obj).dict()
|
||||||
return self.out_dict(obj)
|
return self.out_dict(obj)
|
||||||
|
|
||||||
async def delete_datas(self, ids: List[int]):
|
async def delete_datas(self, ids: List[int], soft: bool = False):
|
||||||
"""
|
"""
|
||||||
删除多个数据
|
删除多条数据
|
||||||
|
:param ids: 数据集
|
||||||
|
:param soft: 是否执行软删除
|
||||||
"""
|
"""
|
||||||
for data_id in ids:
|
if soft:
|
||||||
await self.db.execute(delete(self.model).where(self.model.id == data_id))
|
await self.db.execute(update(self.model).where(self.model.id.in_(ids)).
|
||||||
|
values(delete_datetime=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
|
||||||
|
else:
|
||||||
|
await self.db.execute(delete(self.model).where(self.model.id.in_(ids)))
|
||||||
|
|
||||||
def add_filter_condition(self, sql: select, keys: dict = None, options: list = None, **kwargs) -> select:
|
def add_filter_condition(self, sql: select, keys: dict = None, options: list = None, **kwargs) -> select:
|
||||||
"""
|
"""
|
||||||
|
@ -21,3 +21,4 @@ class BaseModel(Model):
|
|||||||
id = Column(Integer, primary_key=True, unique=True, comment='主键ID', index=True)
|
id = Column(Integer, primary_key=True, unique=True, comment='主键ID', index=True)
|
||||||
create_datetime = Column(DateTime, server_default=func.now(), comment='创建时间')
|
create_datetime = Column(DateTime, server_default=func.now(), comment='创建时间')
|
||||||
update_datetime = Column(DateTime, server_default=func.now(), onupdate=func.now(), comment='更新时间')
|
update_datetime = Column(DateTime, server_default=func.now(), onupdate=func.now(), comment='更新时间')
|
||||||
|
delete_datetime = Column(DateTime, nullable=True, comment='删除时间')
|
Loading…
x
Reference in New Issue
Block a user