| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | 
							- <script setup lang="ts" generic="T extends AnyObject">
 
- import { UnwrapRef } from 'vue'
 
- const props = withDefaults(
 
-   defineProps<{
 
-     request?: (query: Partial<T>) => Promise<IResData<T[]>>
 
-     items?: T[]
 
-     query?: Partial<T>
 
-     automatic?: boolean
 
-     mockList?: Partial<T>[]
 
-     contentClass?: string
 
-     customClass?: string
 
-   }>(),
 
-   {
 
-     automatic: true,
 
-     query: () => ({}),
 
-     contentClass: 'flex flex-col',
 
-   },
 
- )
 
- const slot = defineSlots<{
 
-   default(props: { item: UnwrapRef<T>; index: number; isLast: boolean }): any
 
- }>()
 
- const request = computed(() => {
 
-   if (props.request) {
 
-     return props.request
 
-   } else {
 
-     return async () => {
 
-       return { code: 0, msg: '', data: props.items }
 
-     }
 
-   }
 
- })
 
- const { data, run: setData } = useRequest(() => request.value({ ...props.query }), {
 
-   immediate: false,
 
- })
 
- onMounted(async () => {
 
-   if (props.mockList) {
 
-     data.value = props.mockList as T[]
 
-     return
 
-   }
 
-   if (props.automatic) {
 
-     await setData()
 
-   }
 
- })
 
- watch(
 
-   () => props.query,
 
-   async () => {
 
-     if (props.mockList) {
 
-       data.value = props.mockList as T[]
 
-       return
 
-     }
 
-     await setData()
 
-   },
 
- )
 
- defineExpose({
 
-   reload: async () => {
 
-     await setData()
 
-   },
 
- })
 
- </script>
 
- <script lang="ts">
 
- export default {
 
-   options: {
 
-     virtualHost: true,
 
-     styleIsolation: 'shared',
 
-   },
 
- }
 
- </script>
 
- <template>
 
-   <div class="flex-grow relative flex flex-col" :class="customClass">
 
-     <div :class="contentClass">
 
-       <template v-for="(it, index) in data" :key="index">
 
-         <slot
 
-           :item="it as UnwrapRef<T>"
 
-           :index="index"
 
-           :isLast="index == (data?.length ?? 0) - 1"
 
-         ></slot>
 
-       </template>
 
-     </div>
 
-     <div
 
-       v-if="mockList"
 
-       class="construction-dashed absolute top-0 right-0 left-0 bottom-0 bg-red/20 flex items-center justify-center pointer-events-none"
 
-     >
 
-       <div class="text-16 text-black/30">Debug</div>
 
-     </div>
 
-   </div>
 
- </template>
 
- <style scoped lang="scss">
 
- //@layer utilities {
 
- .construction-dashed {
 
-   @apply border-4 border-black/50 border-dashed; /* 基础虚线样式 */
 
-   animation: dashed-move 2s linear infinite; /* 虚线移动动画 */
 
- }
 
- //}
 
- @keyframes dashed-move {
 
-   from {
 
-     border-spacing: 0;
 
-   }
 
-   to {
 
-     border-spacing: 10px;
 
-   }
 
- }
 
- </style>
 
 
  |