forked from opentiny/tiny-vue
styles(area): [area] add area types (#1311)
This commit is contained in:
parent
5a51f2e08b
commit
c35e1978cb
|
@ -11,14 +11,25 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { getRegion, changeOffice, getRep, getOffice, fetchDefaultData, beforeMount } from './index'
|
import { getRegion, changeOffice, getRep, getOffice, fetchDefaultData, beforeMount } from './index'
|
||||||
|
import type {
|
||||||
|
IAreaProps,
|
||||||
|
IAreaApi,
|
||||||
|
IAreaState,
|
||||||
|
ISharedRenderlessParamHooks,
|
||||||
|
ISharedRenderlessParamUtils
|
||||||
|
} from '@/types'
|
||||||
|
|
||||||
export const api = ['state', 'getRep', 'getRegion', 'getOffice', 'changeOffice']
|
export const api = ['state', 'getRep', 'getRegion', 'getOffice', 'changeOffice']
|
||||||
|
|
||||||
export const renderless = (props, { onBeforeMount, reactive }, { emit, service, refs, nextTick }) => {
|
export const renderless = (
|
||||||
const api = {}
|
props: IAreaProps,
|
||||||
|
{ onBeforeMount, reactive }: ISharedRenderlessParamHooks,
|
||||||
|
{ emit, service, refs, nextTick }: ISharedRenderlessParamUtils<never>
|
||||||
|
) => {
|
||||||
|
const api: Partial<IAreaApi> = {}
|
||||||
const { fetchArea } = service || {}
|
const { fetchArea } = service || {}
|
||||||
|
|
||||||
const state = reactive({
|
const state = reactive<IAreaState>({
|
||||||
jcr: '',
|
jcr: '',
|
||||||
region: '',
|
region: '',
|
||||||
rep: '',
|
rep: '',
|
||||||
|
@ -32,14 +43,14 @@ export const renderless = (props, { onBeforeMount, reactive }, { emit, service,
|
||||||
Object.assign(api, {
|
Object.assign(api, {
|
||||||
state,
|
state,
|
||||||
changeOffice: changeOffice({ emit, state }),
|
changeOffice: changeOffice({ emit, state }),
|
||||||
beforeMount: beforeMount({ api, props }),
|
beforeMount: beforeMount({ api: api as IAreaApi, props }),
|
||||||
getRep: getRep({ emit, fetchArea, nextTick, props, refs, state }),
|
getRep: getRep({ emit, fetchArea, nextTick, props, refs, state }),
|
||||||
getRegion: getRegion({ emit, fetchArea, nextTick, props, refs, state }),
|
getRegion: getRegion({ emit, fetchArea, nextTick, props, refs, state }),
|
||||||
getOffice: getOffice({ emit, fetchArea, nextTick, props, refs, state }),
|
getOffice: getOffice({ emit, fetchArea, nextTick, props, refs, state }),
|
||||||
fetchDefaultData: fetchDefaultData({ emit, fetchArea, nextTick, props, refs, state })
|
fetchDefaultData: fetchDefaultData({ emit, fetchArea, nextTick, props, refs, state })
|
||||||
})
|
})
|
||||||
|
|
||||||
onBeforeMount(api.beforeMount)
|
onBeforeMount((api as IAreaApi).beforeMount)
|
||||||
|
|
||||||
return api
|
return api as IAreaApi
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
import type { ExtractPropTypes } from 'vue'
|
||||||
|
import type { areaProps } from '@/area/src'
|
||||||
|
import type { getRegion, changeOffice, getRep, getOffice, fetchDefaultData, beforeMount } from '../src/area'
|
||||||
|
import type { ISharedRenderlessParamUtils } from '@/types'
|
||||||
|
|
||||||
|
export interface LabeValue {
|
||||||
|
label: string
|
||||||
|
value: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IAreaState {
|
||||||
|
jcr: string
|
||||||
|
region: string
|
||||||
|
rep: string
|
||||||
|
office: string
|
||||||
|
jcrData: LabeValue[]
|
||||||
|
regionData: LabeValue[]
|
||||||
|
repData: LabeValue[]
|
||||||
|
officeData: LabeValue[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IAreaRenderlessParams {
|
||||||
|
emit: ISharedRenderlessParamUtils['emit']
|
||||||
|
fetchArea: (args: { label: string; parent: string }) => Promise<LabeValue[]>
|
||||||
|
nextTick: ISharedRenderlessParamUtils['nextTick']
|
||||||
|
props: IAreaProps
|
||||||
|
refs: ISharedRenderlessParamUtils['refs']
|
||||||
|
state: IAreaState
|
||||||
|
}
|
||||||
|
|
||||||
|
export type IAreaProps = ExtractPropTypes<typeof areaProps>
|
||||||
|
|
||||||
|
export interface IAreaApi {
|
||||||
|
state: IAreaState
|
||||||
|
changeOffice: ReturnType<typeof changeOffice>
|
||||||
|
beforeMount: ReturnType<typeof beforeMount>
|
||||||
|
getRep: ReturnType<typeof getRep>
|
||||||
|
getRegion: ReturnType<typeof getRegion>
|
||||||
|
getOffice: ReturnType<typeof getOffice>
|
||||||
|
fetchDefaultData: ReturnType<typeof fetchDefaultData>
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
import { $prefix, $setup, defineComponent } from '@opentiny/vue-common'
|
||||||
|
import template from 'virtual-template?pc'
|
||||||
|
|
||||||
|
export const areaProps = {
|
||||||
|
modelValue: {},
|
||||||
|
placeholder: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
size: String,
|
||||||
|
disabled: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({
|
||||||
|
label: 'name_cn',
|
||||||
|
value: 'org_id'
|
||||||
|
})
|
||||||
|
},
|
||||||
|
fetchJcr: {
|
||||||
|
type: Function
|
||||||
|
},
|
||||||
|
fetchRegion: {
|
||||||
|
type: Function
|
||||||
|
},
|
||||||
|
fetchRep: {
|
||||||
|
type: Function
|
||||||
|
},
|
||||||
|
fetchOffice: {
|
||||||
|
type: Function
|
||||||
|
},
|
||||||
|
popperClass: String,
|
||||||
|
popperAppendToBody: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
name: $prefix + 'Area',
|
||||||
|
props: areaProps,
|
||||||
|
setup(props, context) {
|
||||||
|
return $setup({ props, context, template })
|
||||||
|
}
|
||||||
|
})
|
Loading…
Reference in New Issue