This commit is contained in:
317
node_modules/@dcloudio/uni-components/lib-x/unicloud-db/index.uts
generated
vendored
Normal file
317
node_modules/@dcloudio/uni-components/lib-x/unicloud-db/index.uts
generated
vendored
Normal file
@@ -0,0 +1,317 @@
|
||||
type SuccessCallback<T> = (res : T | null) => void | null
|
||||
type FailCallback = (err : any | null) => void | null
|
||||
type CompleteCallback = () => void | null
|
||||
|
||||
export type MixinDatacomPaginationType = {
|
||||
current : number,
|
||||
size : number,
|
||||
count : number
|
||||
}
|
||||
|
||||
export type MixinDatacomGetOptions = {
|
||||
collection ?: UTSJSONObject,
|
||||
field ?: string,
|
||||
orderBy ?: string,
|
||||
where ?: any,
|
||||
pageData ?: string,
|
||||
pageCurrent ?: number,
|
||||
pageSize ?: number,
|
||||
getCount ?: boolean,
|
||||
getTree ?: any,
|
||||
getTreePath ?: UTSJSONObject,
|
||||
startWith ?: string,
|
||||
limitLevel ?: number,
|
||||
groupBy ?: string,
|
||||
groupField ?: string,
|
||||
distinct ?: boolean,
|
||||
pageIndistinct ?: boolean,
|
||||
foreignKey ?: string,
|
||||
loadtime ?: string,
|
||||
manual ?: boolean
|
||||
}
|
||||
|
||||
export type MixinDatacomEasyGetOptions = {
|
||||
success ?: SuccessCallback<UniCloudDBGetResult>,
|
||||
fail ?: FailCallback,
|
||||
complete ?: CompleteCallback,
|
||||
}
|
||||
|
||||
export const mixinDatacom = defineMixin({
|
||||
slots: Object as SlotsType<{
|
||||
default : {
|
||||
data : Array<UTSJSONObject>,
|
||||
loading : boolean,
|
||||
hasMore : boolean,
|
||||
pagination : MixinDatacomPaginationType,
|
||||
error : UniCloudError | null
|
||||
}
|
||||
}>,
|
||||
props: {
|
||||
localdata: {
|
||||
type: Array as PropType<Array<UTSJSONObject>>,
|
||||
default: [] as Array<UTSJSONObject>
|
||||
},
|
||||
collection: {
|
||||
type: Object,
|
||||
default: ''
|
||||
},
|
||||
field: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
orderby: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
where: {
|
||||
type: Object,
|
||||
default: ''
|
||||
},
|
||||
pageData: {
|
||||
type: String,
|
||||
default: 'add'
|
||||
},
|
||||
pageCurrent: {
|
||||
type: Number,
|
||||
default: 1
|
||||
},
|
||||
pageSize: {
|
||||
type: Number,
|
||||
default: 20
|
||||
},
|
||||
getcount: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
gettree: {
|
||||
type: Object,
|
||||
default: ''
|
||||
},
|
||||
gettreepath: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
startwith: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
limitlevel: {
|
||||
type: Number,
|
||||
default: 10
|
||||
},
|
||||
groupby: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
groupField: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
distinct: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
pageIndistinct: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
foreignKey: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
loadtime: {
|
||||
type: String,
|
||||
default: 'auto'
|
||||
},
|
||||
manual: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
mixinDatacomResData: [] as Array<UTSJSONObject>, // 请求返回的数据,调用 loadData 后会更新
|
||||
mixinDatacomLoading: false, // 网络请求状态
|
||||
mixinDatacomHasMore: false, // 是否有更多数据
|
||||
mixinDatacomPage: {
|
||||
current: 1,
|
||||
size: 20,
|
||||
count: 0,
|
||||
} as MixinDatacomPaginationType, // 分页信息,详情见 created 生命周期
|
||||
mixinDatacomError: null as UniCloudError | null, // 请求出错时的错误消息
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.mixinDatacomPage.current = this.pageCurrent
|
||||
this.mixinDatacomPage.size = this.pageSize
|
||||
|
||||
const PROPS_NAME = ['', '', 'collection', 'field', 'getcount', 'orderby', 'where', 'groupby', 'groupField', 'distinct']
|
||||
|
||||
this.$watch(
|
||||
() : any => [
|
||||
this.pageCurrent,
|
||||
this.pageSize,
|
||||
this.collection,
|
||||
this.field,
|
||||
this.getcount,
|
||||
this.orderby,
|
||||
this.where,
|
||||
this.groupby,
|
||||
this.groupField,
|
||||
this.distinct
|
||||
],
|
||||
(newValue : Array<any>, oldValue : Array<any>) => {
|
||||
this.mixinDatacomPage.size = this.pageSize
|
||||
if (newValue[0] !== oldValue[0]) {
|
||||
this.mixinDatacomPage.current = this.pageCurrent
|
||||
}
|
||||
|
||||
let needReset = false
|
||||
let changed : Array<string> = []
|
||||
for (let i = 2; i < newValue.length; i++) {
|
||||
if (newValue[i] !== oldValue[i]) {
|
||||
needReset = true
|
||||
changed.push(PROPS_NAME[i])
|
||||
}
|
||||
}
|
||||
|
||||
this.onMixinDatacomPropsChange(needReset, changed)
|
||||
}
|
||||
)
|
||||
},
|
||||
methods: {
|
||||
// props发生变化时被调用,在组件中覆盖此方法
|
||||
// 非 pageCurrent,pageSize 改变时 needReset=true,需要重置数据
|
||||
// changed,发生变化的属性名,类型为Array,例如 ['collection', 'action']
|
||||
onMixinDatacomPropsChange(_ : boolean, changed : Array<string>) {
|
||||
},
|
||||
mixinDatacomEasyGet(options ?: MixinDatacomEasyGetOptions) {
|
||||
if (this.mixinDatacomLoading) {
|
||||
return
|
||||
}
|
||||
|
||||
this.mixinDatacomLoading = true
|
||||
this.mixinDatacomError = null
|
||||
|
||||
this.mixinDatacomGet(null).then((res : UniCloudDBGetResult) => {
|
||||
const data = res.data
|
||||
const count = res.count
|
||||
|
||||
if (this.getcount && count != null) {
|
||||
this.mixinDatacomPage.count = count
|
||||
}
|
||||
|
||||
this.mixinDatacomHasMore = !((count != null) ? (this.mixinDatacomPage.current * this.mixinDatacomPage.size >= count) : (data.length < this.pageSize))
|
||||
this.mixinDatacomResData = data
|
||||
|
||||
options?.success?.(res)
|
||||
}).catch((err : any | null) => {
|
||||
this.mixinDatacomError = err as UniCloudError
|
||||
options?.fail?.(err)
|
||||
}).then(() => {
|
||||
this.mixinDatacomLoading = false
|
||||
options?.complete?.()
|
||||
}, () => {
|
||||
this.mixinDatacomLoading = false
|
||||
options?.complete?.()
|
||||
})
|
||||
},
|
||||
mixinDatacomGet(options: MixinDatacomGetOptions | null) : Promise<UniCloudDBGetResult> {
|
||||
let db = uniCloud.databaseForJQL()
|
||||
|
||||
let collection = Array.isArray(this.collection) ? db.collection(...(this.collection as Array<any>)) : db.collection(this.collection)
|
||||
|
||||
let filter : UniCloudDBFilter | null = null
|
||||
if (this.foreignKey.length > 0) {
|
||||
filter = collection.foreignKey(this.foreignKey)
|
||||
}
|
||||
|
||||
const where : any = options?.where ?? this.where
|
||||
if (typeof where == 'string') {
|
||||
const whereString = where as string
|
||||
if (whereString.length > 0) {
|
||||
filter = (filter != null) ? filter.where(where) : collection.where(where)
|
||||
}
|
||||
} else {
|
||||
filter = (filter != null) ? filter.where(where) : collection.where(where)
|
||||
}
|
||||
|
||||
let query : UniCloudDBQuery | null = null
|
||||
if (this.field.length > 0) {
|
||||
query = (filter != null) ? filter.field(this.field) : collection.field(this.field)
|
||||
}
|
||||
if (this.groupby.length > 0) {
|
||||
if (query != null) {
|
||||
query = query.groupBy(this.groupby)
|
||||
} else if (filter != null) {
|
||||
query = filter.groupBy(this.groupby)
|
||||
}
|
||||
}
|
||||
if (this.groupField.length > 0) {
|
||||
if (query != null) {
|
||||
query = query.groupField(this.groupField)
|
||||
} else if (filter != null) {
|
||||
query = filter.groupField(this.groupField)
|
||||
}
|
||||
}
|
||||
if (this.distinct == true) {
|
||||
if (query != null) {
|
||||
query = query.distinct(this.field)
|
||||
} else if (filter != null) {
|
||||
query = filter.distinct(this.field)
|
||||
}
|
||||
}
|
||||
if (this.orderby.length > 0) {
|
||||
if (query != null) {
|
||||
query = query.orderBy(this.orderby)
|
||||
} else if (filter != null) {
|
||||
query = filter.orderBy(this.orderby)
|
||||
}
|
||||
}
|
||||
|
||||
const size = this.mixinDatacomPage.size
|
||||
const current = this.mixinDatacomPage.current
|
||||
if (query != null) {
|
||||
query = query.skip(size * (current - 1)).limit(size)
|
||||
} else if (filter != null) {
|
||||
query = filter.skip(size * (current - 1)).limit(size)
|
||||
} else {
|
||||
query = collection.skip(size * (current - 1)).limit(size)
|
||||
}
|
||||
|
||||
const getOptions = {} as UTSJSONObject
|
||||
const treeOptions = {
|
||||
limitLevel: this.limitlevel,
|
||||
startWith: this.startwith
|
||||
}
|
||||
const getCount : boolean = options?.getCount ?? this.getcount
|
||||
if (this.getcount == true) {
|
||||
getOptions['getCount'] = getCount
|
||||
}
|
||||
|
||||
const getTree : any = options?.getTree ?? this.gettree
|
||||
if (typeof getTree == 'string') {
|
||||
const getTreeString = getTree as string
|
||||
if (getTreeString.length > 0) {
|
||||
getOptions['getTree'] = treeOptions
|
||||
}
|
||||
} else if (typeof getTree == 'object') {
|
||||
getOptions['getTree'] = treeOptions
|
||||
} else {
|
||||
getOptions['getTree'] = getTree
|
||||
}
|
||||
|
||||
const getTreePath = options?.getTreePath ?? this.gettreepath
|
||||
if (typeof getTreePath == 'string') {
|
||||
const getTreePathString = getTreePath as string
|
||||
if (getTreePathString.length > 0) {
|
||||
getOptions['getTreePath'] = getTreePath
|
||||
}
|
||||
} else {
|
||||
getOptions['getTreePath'] = getTreePath
|
||||
}
|
||||
|
||||
return query.get(getOptions)
|
||||
}
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user