qidian-vue-ui 1.1.18 → 1.1.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/components/avatar/index.d.ts +2 -0
  2. package/dist/components/avatar/index.vue.d.ts +17 -0
  3. package/dist/components/avatar/index.vue.mjs +8 -0
  4. package/dist/components/avatar/index.vue.mjs.map +1 -0
  5. package/dist/components/avatar/index.vue2.mjs +107 -0
  6. package/dist/components/avatar/index.vue2.mjs.map +1 -0
  7. package/dist/components/avatar/props.d.ts +5 -0
  8. package/dist/components/avatar/props.mjs +11 -0
  9. package/dist/components/avatar/props.mjs.map +1 -0
  10. package/dist/components/avatar/types.d.ts +9 -0
  11. package/dist/components/config-provider/config.d.ts +1 -0
  12. package/dist/components/config-provider/config.mjs +2 -0
  13. package/dist/components/config-provider/config.mjs.map +1 -1
  14. package/dist/components/config-provider/index.d.ts +15 -12
  15. package/dist/components/config-provider/index.mjs +17 -6
  16. package/dist/components/config-provider/index.mjs.map +1 -1
  17. package/dist/components/config-provider/types.d.ts +4 -2
  18. package/dist/components/crud/list.vue2.mjs +3 -0
  19. package/dist/components/crud/list.vue2.mjs.map +1 -1
  20. package/dist/components/crud/props.d.ts +3 -0
  21. package/dist/components/crud/table.vue2.mjs +6 -0
  22. package/dist/components/crud/table.vue2.mjs.map +1 -1
  23. package/dist/components/index.d.ts +1 -0
  24. package/dist/components/service/list.vue.mjs +1 -1
  25. package/dist/components/service/list.vue2.mjs +11 -1
  26. package/dist/components/service/list.vue2.mjs.map +1 -1
  27. package/dist/components/service/props.d.ts +3 -0
  28. package/dist/components/service/props.mjs +5 -2
  29. package/dist/components/service/props.mjs.map +1 -1
  30. package/dist/components/service/table.vue.mjs +1 -1
  31. package/dist/components/service/table.vue2.mjs +24 -3
  32. package/dist/components/service/table.vue2.mjs.map +1 -1
  33. package/dist/components/service/types.d.ts +3 -0
  34. package/dist/hooks/index.d.ts +1 -0
  35. package/dist/hooks/useAgentChat/index.d.ts +1 -1
  36. package/dist/hooks/useAgentChat/index.mjs.map +1 -1
  37. package/dist/hooks/useDict/index.d.ts +1 -1
  38. package/dist/hooks/useDict/index.mjs.map +1 -1
  39. package/dist/hooks/useUserAvatar/index.d.ts +5 -0
  40. package/dist/hooks/useUserAvatar/index.mjs +38 -0
  41. package/dist/hooks/useUserAvatar/index.mjs.map +1 -0
  42. package/dist/hooks/useUserAvatar/types.d.ts +3 -0
  43. package/dist/index.mjs +47 -43
  44. package/dist/index.mjs.map +1 -1
  45. package/dist/qidian-vue-ui.css +26 -8
  46. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"table.vue2.mjs","sources":["../../../src/components/service/table.vue"],"sourcesContent":["<template>\n <t-enhanced-table\n ref=\"table\"\n class=\"qd-service-table\"\n v-model:selected-row-keys=\"selectedRowKeys\"\n v-model:active-row-keys=\"activeRowKeys\"\n v-model:column-controller-visible=\"columnControllerVisible\"\n v-model:display-columns=\"displayColumns\"\n v-model:expanded-row-keys=\"expandedRowKeys\"\n v-model:filter-value=\"filterValue\"\n v-model:sort=\"sort\"\n v-model:expanded-tree-nodes=\"expandedTreeNodes\"\n v-bind=\"reProps.tableOptions\"\n :loading=\"tableLoad\"\n :data=\"data\"\n :pagination=\"rePagination\"\n >\n <template #empty>\n <t-empty class=\"qd-service-table__empty\" :title=\"t('emptyText')\" />\n </template>\n\n <template v-for=\"(_, name) in $slots\" #[name]=\"slotProps\">\n <slot :name=\"name\" v-bind=\"slotProps\" />\n </template>\n </t-enhanced-table>\n</template>\n\n<script\n setup\n lang=\"tsx\"\n generic=\"\n D extends TableRowData = TableRowData,\n R = unknown,\n P = ServicePageParams,\n TP = P,\n Pag extends ServicePagination = ServicePagination\n \"\n>\n import type { ComponentPublicInstance } from 'vue'\n import type {\n TableRowData,\n TdEnhancedTableProps,\n EnhancedTableInstanceFunctions\n } from 'tdesign-vue-next'\n import type { ServicePageParams, ServicePageRes, ServicePagination } from 'qidian-shared'\n import type { QdServiceTableInstanceFunctions, QdServiceTableProps } from './types'\n import { computed, onMounted, useTemplateRef, ref, onActivated, watch } from 'vue'\n import { EnhancedTable as TEnhancedTable, Empty as TEmpty } from 'tdesign-vue-next'\n import { easyCopy, isEmpty, suspectedWrapperPromise, useServicePagination } from 'qidian-shared'\n import { qdServiceTableProps, qdServiceTableTreeConfig } from './props'\n import { useVModels } from '@vueuse/core'\n import { AddRectangleIcon, LoadingIcon, MinusRectangleIcon } from 'tdesign-icons-vue-next'\n import { useConfig } from '../config-provider/useConfig'\n\n defineOptions({\n name: 'QdServiceTable'\n })\n\n type Props = QdServiceTableProps<D, R, P, TP, Pag>\n\n const props = withDefaults(defineProps<Props>(), qdServiceTableProps)\n const emit = defineEmits<{\n 'update:data': [Props['data']]\n 'update:selectedRowKeys': [Props['selectedRowKeys']]\n 'update:activeRowKeys': [Props['activeRowKeys']]\n 'update:columnControllerVisible': [Props['columnControllerVisible']]\n 'update:displayColumns': [Props['displayColumns']]\n 'update:expandedRowKeys': [Props['expandedRowKeys']]\n 'update:filterValue': [Props['filterValue']]\n 'update:sort': [Props['sort']]\n 'update:expandedTreeNodes': [Props['expandedTreeNodes']]\n }>()\n const {\n data,\n selectedRowKeys,\n activeRowKeys,\n columnControllerVisible,\n displayColumns,\n expandedRowKeys,\n filterValue,\n sort,\n expandedTreeNodes\n } = useVModels<typeof props, keyof typeof emit>(props, emit, { passive: true })\n\n const { t } = useConfig('crud')\n const tableRef = useTemplateRef<EnhancedTableInstanceFunctions & ComponentPublicInstance>('table')\n const treeLoadIds = ref<(string | number)[]>([])\n const scrollRecord = { top: 0, left: 0 }\n\n const reProps = computed(() => {\n const {\n service,\n manual,\n transformParams,\n transformRes,\n pagination,\n cacheKey,\n cacheTime,\n pollingInterval,\n onBefore,\n onAfter,\n onSuccess,\n onError,\n\n loading,\n selectType,\n data,\n selectedRowKeys,\n activeRowKeys,\n columns,\n columnControllerVisible,\n displayColumns,\n expandedRowKeys,\n filterValue,\n sort,\n expandedTreeNodes,\n\n selectOnRowClick,\n expandOnRowClick,\n tree,\n onScroll,\n ...tableOptions\n } = props\n\n // 处理懒加载配置\n const reTableOptions = tableOptions as TdEnhancedTableProps<D>\n let reTransformRes = transformRes\n\n const reTree = tree ? { ...tree, ...easyCopy(qdServiceTableTreeConfig) } : tree\n\n if (reTree?.lazyLoad) {\n reTransformRes = async (res) => {\n let temp: ServicePageRes<D> | undefined\n if (transformRes) {\n const [trErr, trRes] = await suspectedWrapperPromise(transformRes(res))\n if (trErr) throw trErr\n\n temp = trRes\n } else {\n temp = res as ServicePageRes<D>\n }\n\n temp.records.forEach((item) => {\n if (item.children) return\n\n item.children = true as unknown as D[]\n })\n\n return temp\n }\n\n // 如果用户没有配置 treeExpandAndFoldIcon,生成默认的\n if (!tableOptions.treeExpandAndFoldIcon) {\n reTableOptions.treeExpandAndFoldIcon = (h, { row, type }) => {\n const children = row.children as unknown\n\n if (treeLoadIds.value.includes(row.id) && children === true) {\n return <LoadingIcon style={{ color: 'var(--td-brand-color)' }} />\n }\n\n if (children === true && row.__qdTreeLoaded) {\n return <AddRectangleIcon style={{ color: 'transparent', cursor: 'default' }} />\n }\n\n return type === 'expand' ? <AddRectangleIcon /> : <MinusRectangleIcon />\n }\n }\n\n // 如果用户没有配置 onExpandedTreeNodesChange,生成默认的\n if (!tableOptions.onExpandedTreeNodesChange) {\n reTableOptions.onExpandedTreeNodesChange = async (currentExpandedTreeNodes, options) => {\n const { row, rowState } = options\n if (!row || !rowState) return\n\n const { level } = rowState\n const { __qdTreeLoaded } = row\n const { maxLevel } = reTree\n const id = row[props.rowKey || qdServiceTableProps.rowKey]\n\n // 如果已加载或达到最大层级,不再加载\n if (\n treeLoadIds.value.includes(id) ||\n __qdTreeLoaded ||\n isEmpty(level) ||\n (!isEmpty(maxLevel) && level! >= maxLevel!)\n ) {\n return\n }\n\n // 设置加载状态\n treeLoadIds.value.push(id)\n tableRef.value?.setData(id, { ...row, __qdTreeLoaded: true })\n\n const { transformParams, transformRes } = reTree\n\n const currentParams = options\n let tParams: TP | undefined\n\n if (transformParams) {\n const [tpErr, tpRes] = await suspectedWrapperPromise(transformParams(currentParams))\n if (tpErr) throw tpErr\n tParams = tpRes\n }\n\n const [serviceErr, serviceRes] = await suspectedWrapperPromise(\n service(tParams || (currentParams as TP))\n )\n if (serviceErr) {\n removeTreeLoadId(id)\n throw serviceErr\n }\n\n let temp: ServicePageRes<D> | undefined\n if (transformRes) {\n const [trErr, trRes] = await suspectedWrapperPromise(transformRes(serviceRes, options))\n if (trErr) {\n removeTreeLoadId(id)\n throw trErr\n }\n\n temp = trRes\n } else {\n temp = serviceRes as ServicePageRes<D>\n }\n\n removeTreeLoadId(id)\n if (!temp.records) temp.records = []\n if (isEmpty(temp.total)) temp.total = temp.records.length\n\n if (!temp.records.length) return\n\n const childrenKey = reTree.childrenKey || qdServiceTableTreeConfig.childrenKey\n tableRef.value?.setData(id, {\n ...row,\n __qdTreeLoaded: true,\n [childrenKey]: []\n })\n tableRef.value?.appendTo(\n id,\n temp.records.map((item) => {\n if (item.children) return item\n\n return {\n ...item,\n [childrenKey]: isEmpty(maxLevel) ? true : level! + 1 < maxLevel!\n }\n })\n )\n }\n }\n }\n\n const reColumns = columns || []\n if (selectType) {\n const selectIdx = reColumns.findIndex(\n (item) => item.type === 'single' || item.type === 'multiple'\n )\n const defaultSelect: (typeof reColumns)[number] = {\n colKey: 'row-select',\n type: selectType,\n align: 'center',\n width: 50\n }\n\n if (selectIdx > -1) {\n reColumns[selectIdx] = {\n ...defaultSelect,\n ...reColumns[selectIdx]\n }\n } else {\n reColumns.unshift(defaultSelect)\n }\n }\n\n const reSelectOnRowClick =\n selectOnRowClick ?? (!expandOnRowClick && !reTree?.expandTreeNodeOnClick)\n\n const reOnScroll: typeof onScroll = (params) => {\n onScroll?.(params)\n\n const target = params.e.target as HTMLElement\n if (!target) return\n\n const { scrollTop, scrollLeft } = target\n scrollRecord.top = scrollTop\n scrollRecord.left = scrollLeft\n }\n\n return {\n tableOptions: {\n ...reTableOptions,\n\n columns: reColumns,\n selectOnRowClick: reSelectOnRowClick,\n expandOnRowClick,\n tree: reTree,\n onScroll: reOnScroll\n } as unknown as TdEnhancedTableProps<TableRowData>,\n externalLoad: loading,\n serviceOptions: {\n service,\n manual,\n transformParams,\n transformRes: reTransformRes,\n pagination,\n cacheKey,\n cacheTime,\n pollingInterval,\n onBefore,\n onAfter,\n onSuccess,\n onError\n },\n models: {\n data,\n selectedRowKeys,\n activeRowKeys,\n columnControllerVisible,\n displayColumns,\n expandedRowKeys,\n filterValue,\n sort,\n expandedTreeNodes\n }\n }\n })\n\n const {\n firstLoad,\n manualTriggerLoad,\n loading,\n current,\n pageSize,\n total,\n changeCurrent,\n changePageSize,\n changePagination,\n runAsync,\n run,\n cancel,\n refresh,\n refreshAsync\n } = useServicePagination({\n ...reProps.value.serviceOptions,\n onSuccess: (res) => {\n data.value = res.list\n reProps.value.serviceOptions.onSuccess?.(res)\n }\n })\n\n const tableLoad = computed<TdEnhancedTableProps['loading']>(() => {\n return (\n reProps.value.externalLoad ||\n manualTriggerLoad.value ||\n (!data.value?.length && firstLoad.value)\n )\n })\n\n const rePagination = computed(() => {\n return props.pagination === false\n ? undefined\n : {\n current: current.value,\n pageSize: pageSize.value,\n total: total.value,\n onCurrentChange: changeCurrent,\n onPageSizeChange: changePageSize\n }\n })\n\n function removeTreeLoadId(id: (typeof treeLoadIds.value)[number]) {\n const index = treeLoadIds.value.findIndex((item) => item === id)\n if (index === -1) return\n\n treeLoadIds.value.splice(index, 1)\n }\n\n function resumeScrollRecord() {\n const el = tableRef.value?.$el\n if (!el) return\n\n // NOTE 暂时不考虑虚拟列表\n const scrollEl = el.querySelector('.t-table__content')\n if (!scrollEl) return\n\n const { scrollTop, scrollLeft } = scrollEl\n const { top, left } = scrollRecord\n if (top === scrollTop && left === scrollLeft) return\n\n scrollEl.scrollTo({ top, left })\n }\n\n const expose = {\n tableLoad,\n firstLoad,\n manualTriggerLoad,\n loading,\n current,\n pageSize,\n total,\n changeCurrent,\n changePageSize,\n changePagination,\n runAsync,\n run,\n cancel,\n refresh,\n refreshAsync\n } as unknown as QdServiceTableInstanceFunctions<D, R, P, TP, Pag>\n\n watch(columnControllerVisible, (visible) => {\n const { columns } = reProps.value.tableOptions\n if (visible && !displayColumns.value && columns) {\n displayColumns.value = columns.map((col) => col.colKey).filter(Boolean)\n }\n }, { immediate: true })\n\n onMounted(() => {\n Object.assign(expose, tableRef.value)\n })\n\n onActivated(() => {\n resumeScrollRecord()\n })\n\n defineExpose(expose)\n</script>\n\n<style lang=\"less\" scoped>\n .qd-service-table {\n height: 100%;\n display: flex;\n flex-direction: column;\n\n & > :deep(.t-table__content) {\n flex: 1;\n\n tbody > tr:last-child:not(.t-table__empty-row) > td,\n tfoot > tr:last-child > td {\n &::before {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n height: 1px;\n transform: translateY(100%);\n background-color: var(--td-component-border);\n }\n }\n }\n\n &__empty {\n padding: var(--td-comp-paddingLR-xxl) var(--td-comp-paddingTB-xxl);\n }\n }\n</style>\n"],"names":["props","__props","emit","__emit","data","selectedRowKeys","activeRowKeys","columnControllerVisible","displayColumns","expandedRowKeys","filterValue","sort","expandedTreeNodes","useVModels","passive","t","useConfig","tableRef","useTemplateRef","treeLoadIds","ref","scrollRecord","top","left","reProps","computed","service","manual","transformParams","transformRes","pagination","cacheKey","cacheTime","pollingInterval","onBefore","onAfter","onSuccess","onError","loading","selectType","columns","selectOnRowClick","expandOnRowClick","tree","onScroll","tableOptions","reTableOptions","reTransformRes","reTree","easyCopy","qdServiceTableTreeConfig","lazyLoad","res","temp","trErr","trRes","suspectedWrapperPromise","records","forEach","item","children","treeExpandAndFoldIcon","h","row","type","value","includes","id","_createVNode2","LoadingIcon","color","__qdTreeLoaded","AddRectangleIcon","cursor","MinusRectangleIcon","onExpandedTreeNodesChange","currentExpandedTreeNodes","options","rowState","level","maxLevel","rowKey","qdServiceTableProps","isEmpty","push","setData","currentParams","tParams","tpErr","tpRes","serviceErr","serviceRes","removeTreeLoadId","total","length","childrenKey","appendTo","map","reColumns","selectIdx","findIndex","defaultSelect","colKey","align","width","unshift","reSelectOnRowClick","expandTreeNodeOnClick","reOnScroll","params","target","e","scrollTop","scrollLeft","externalLoad","serviceOptions","models","firstLoad","manualTriggerLoad","current","pageSize","changeCurrent","changePageSize","changePagination","runAsync","run","cancel","refresh","refreshAsync","useServicePagination","list","tableLoad","rePagination","undefined","onCurrentChange","onPageSizeChange","index","splice","resumeScrollRecord","el","$el","scrollEl","querySelector","scrollTo","expose","watch","visible","col","filter","Boolean","immediate","onMounted","Object","assign","onActivated","__expose","_openBlock","_createBlock","_unref","_mergeProps","class","$event","empty","_createVNode","TEmpty","title","$slots","_","name","fn","_withCtx","slotProps","_renderSlot","_ctx","_normalizeProps","_guardReactiveProps"],"mappings":"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"}
1
+ {"version":3,"file":"table.vue2.mjs","sources":["../../../src/components/service/table.vue"],"sourcesContent":["<template>\n <t-enhanced-table\n ref=\"table\"\n :class=\"['qd-service-table', headerBg ? '' : 't-table--header-bg-inherit']\"\n v-model:selected-row-keys=\"selectedRowKeys\"\n v-model:active-row-keys=\"activeRowKeys\"\n v-model:column-controller-visible=\"columnControllerVisible\"\n v-model:display-columns=\"displayColumns\"\n v-model:expanded-row-keys=\"expandedRowKeys\"\n v-model:filter-value=\"filterValue\"\n v-model:sort=\"sort\"\n v-model:expanded-tree-nodes=\"expandedTreeNodes\"\n v-bind=\"reProps.tableOptions\"\n :loading=\"tableLoad\"\n :data=\"data\"\n :pagination=\"rePagination\"\n >\n <template #empty>\n <t-empty class=\"qd-service-table__empty\" :title=\"t('emptyText')\" />\n </template>\n\n <template v-for=\"(_, name) in $slots\" #[name]=\"slotProps\">\n <slot :name=\"name\" v-bind=\"slotProps\" />\n </template>\n </t-enhanced-table>\n</template>\n\n<script\n setup\n lang=\"tsx\"\n generic=\"\n D extends TableRowData = TableRowData,\n R = unknown,\n P = ServicePageParams,\n TP = P,\n Pag extends ServicePagination = ServicePagination\n \"\n>\n import type { ComponentPublicInstance } from 'vue'\n import type {\n TableRowData,\n TdEnhancedTableProps,\n EnhancedTableInstanceFunctions\n } from 'tdesign-vue-next'\n import type { ServicePageParams, ServicePageRes, ServicePagination } from 'qidian-shared'\n import type { QdServiceTableInstanceFunctions, QdServiceTableProps } from './types'\n import { computed, onMounted, useTemplateRef, ref, onActivated, watch } from 'vue'\n import { EnhancedTable as TEnhancedTable, Empty as TEmpty } from 'tdesign-vue-next'\n import { easyCopy, isEmpty, suspectedWrapperPromise, useServicePagination } from 'qidian-shared'\n import { qdServiceTableProps, qdServiceTableTreeConfig } from './props'\n import { useVModels } from '@vueuse/core'\n import { AddRectangleIcon, LoadingIcon, MinusRectangleIcon } from 'tdesign-icons-vue-next'\n import { useConfig } from '../config-provider/useConfig'\n\n defineOptions({\n name: 'QdServiceTable'\n })\n\n type Props = QdServiceTableProps<D, R, P, TP, Pag>\n\n const props = withDefaults(defineProps<Props>(), qdServiceTableProps)\n const emit = defineEmits<{\n 'update:data': [Props['data']]\n 'update:selectedRowKeys': [Props['selectedRowKeys']]\n 'update:activeRowKeys': [Props['activeRowKeys']]\n 'update:columnControllerVisible': [Props['columnControllerVisible']]\n 'update:displayColumns': [Props['displayColumns']]\n 'update:expandedRowKeys': [Props['expandedRowKeys']]\n 'update:filterValue': [Props['filterValue']]\n 'update:sort': [Props['sort']]\n 'update:expandedTreeNodes': [Props['expandedTreeNodes']]\n }>()\n const {\n data,\n selectedRowKeys,\n activeRowKeys,\n columnControllerVisible,\n displayColumns,\n expandedRowKeys,\n filterValue,\n sort,\n expandedTreeNodes\n } = useVModels<typeof props, keyof typeof emit>(props, emit, { passive: true })\n\n const { t } = useConfig('crud')\n const tableRef = useTemplateRef<EnhancedTableInstanceFunctions & ComponentPublicInstance>('table')\n const treeLoadIds = ref<(string | number)[]>([])\n const scrollRecord = { top: 0, left: 0 }\n\n const reProps = computed(() => {\n const {\n service,\n manual,\n transformParams,\n transformRes,\n pagination,\n cacheKey,\n cacheTime,\n pollingInterval,\n onBefore,\n onAfter,\n onSuccess,\n onError,\n\n loadingWithData,\n\n loading,\n selectType,\n data,\n selectedRowKeys,\n activeRowKeys,\n columns,\n columnControllerVisible,\n displayColumns,\n expandedRowKeys,\n filterValue,\n sort,\n expandedTreeNodes,\n\n selectOnRowClick,\n expandOnRowClick,\n tree,\n onScroll,\n ...tableOptions\n } = props\n\n // 处理懒加载配置\n const reTableOptions = tableOptions as TdEnhancedTableProps<D>\n let reTransformRes = transformRes\n\n const reTree = tree ? { ...tree, ...easyCopy(qdServiceTableTreeConfig) } : tree\n\n if (reTree?.lazyLoad) {\n reTransformRes = async (res) => {\n let temp: ServicePageRes<D> | undefined\n if (transformRes) {\n const [trErr, trRes] = await suspectedWrapperPromise(transformRes(res))\n if (trErr) throw trErr\n\n temp = trRes\n } else {\n temp = res as ServicePageRes<D>\n }\n\n temp.records.forEach((item) => {\n if (item.children) return\n\n item.children = true as unknown as D[]\n })\n\n return temp\n }\n\n // 如果用户没有配置 treeExpandAndFoldIcon,生成默认的\n if (!tableOptions.treeExpandAndFoldIcon) {\n reTableOptions.treeExpandAndFoldIcon = (h, { row, type }) => {\n const children = row.children as unknown\n\n if (treeLoadIds.value.includes(row.id) && children === true) {\n return <LoadingIcon style={{ color: 'var(--td-brand-color)' }} />\n }\n\n if (children === true && row.__qdTreeLoaded) {\n return <AddRectangleIcon style={{ color: 'transparent', cursor: 'default' }} />\n }\n\n return type === 'expand' ? <AddRectangleIcon /> : <MinusRectangleIcon />\n }\n }\n\n // 如果用户没有配置 onExpandedTreeNodesChange,生成默认的\n if (!tableOptions.onExpandedTreeNodesChange) {\n reTableOptions.onExpandedTreeNodesChange = async (currentExpandedTreeNodes, options) => {\n const { row, rowState } = options\n if (!row || !rowState) return\n\n const { level } = rowState\n const { __qdTreeLoaded } = row\n const { maxLevel } = reTree\n const id = row[props.rowKey || qdServiceTableProps.rowKey]\n\n // 如果已加载或达到最大层级,不再加载\n if (\n treeLoadIds.value.includes(id) ||\n __qdTreeLoaded ||\n isEmpty(level) ||\n (!isEmpty(maxLevel) && level! >= maxLevel!)\n ) {\n return\n }\n\n // 设置加载状态\n treeLoadIds.value.push(id)\n tableRef.value?.setData(id, { ...row, __qdTreeLoaded: true })\n\n const { transformParams, transformRes } = reTree\n\n const currentParams = options\n let tParams: TP | undefined\n\n if (transformParams) {\n const [tpErr, tpRes] = await suspectedWrapperPromise(transformParams(currentParams))\n if (tpErr) throw tpErr\n tParams = tpRes\n }\n\n const [serviceErr, serviceRes] = await suspectedWrapperPromise(\n service(tParams || (currentParams as TP))\n )\n if (serviceErr) {\n removeTreeLoadId(id)\n throw serviceErr\n }\n\n let temp: ServicePageRes<D> | undefined\n if (transformRes) {\n const [trErr, trRes] = await suspectedWrapperPromise(transformRes(serviceRes, options))\n if (trErr) {\n removeTreeLoadId(id)\n throw trErr\n }\n\n temp = trRes\n } else {\n temp = serviceRes as ServicePageRes<D>\n }\n\n removeTreeLoadId(id)\n if (!temp.records) temp.records = []\n if (isEmpty(temp.total)) temp.total = temp.records.length\n\n if (!temp.records.length) return\n\n const childrenKey = reTree.childrenKey || qdServiceTableTreeConfig.childrenKey\n tableRef.value?.setData(id, {\n ...row,\n __qdTreeLoaded: true,\n [childrenKey]: []\n })\n tableRef.value?.appendTo(\n id,\n temp.records.map((item) => {\n if (item.children) return item\n\n return {\n ...item,\n [childrenKey]: isEmpty(maxLevel) ? true : level! + 1 < maxLevel!\n }\n })\n )\n }\n }\n }\n\n const reColumns = columns || []\n if (selectType) {\n const selectIdx = reColumns.findIndex(\n (item) => item.type === 'single' || item.type === 'multiple'\n )\n const defaultSelect: (typeof reColumns)[number] = {\n colKey: 'row-select',\n type: selectType,\n align: 'center',\n width: 50\n }\n\n if (selectIdx > -1) {\n reColumns[selectIdx] = {\n ...defaultSelect,\n ...reColumns[selectIdx]\n }\n } else {\n reColumns.unshift(defaultSelect)\n }\n }\n\n const reSelectOnRowClick =\n selectOnRowClick ?? (!expandOnRowClick && !reTree?.expandTreeNodeOnClick)\n\n const reOnScroll: typeof onScroll = (params) => {\n onScroll?.(params)\n\n const target = params.e.target as HTMLElement\n if (!target) return\n\n const { scrollTop, scrollLeft } = target\n scrollRecord.top = scrollTop\n scrollRecord.left = scrollLeft\n }\n\n return {\n loadingWithData,\n tableOptions: {\n ...reTableOptions,\n\n columns: reColumns,\n selectOnRowClick: reSelectOnRowClick,\n expandOnRowClick,\n tree: reTree,\n onScroll: reOnScroll\n } as unknown as TdEnhancedTableProps<TableRowData>,\n externalLoad: loading,\n serviceOptions: {\n service,\n manual,\n transformParams,\n transformRes: reTransformRes,\n pagination,\n cacheKey,\n cacheTime,\n pollingInterval,\n onBefore,\n onAfter,\n onSuccess,\n onError\n },\n models: {\n data,\n selectedRowKeys,\n activeRowKeys,\n columnControllerVisible,\n displayColumns,\n expandedRowKeys,\n filterValue,\n sort,\n expandedTreeNodes\n }\n }\n })\n\n const {\n firstLoad,\n manualTriggerLoad,\n loading,\n current,\n pageSize,\n total,\n changeCurrent,\n changePageSize,\n changePagination,\n runAsync,\n run,\n cancel,\n refresh,\n refreshAsync\n } = useServicePagination({\n ...reProps.value.serviceOptions,\n onSuccess: (res) => {\n data.value = res.list\n reProps.value.serviceOptions.onSuccess?.(res)\n }\n })\n\n const tableLoad = computed<TdEnhancedTableProps['loading']>(() => {\n const { externalLoad, loadingWithData } = reProps.value\n if (externalLoad) return true\n if (!data.value?.length && firstLoad.value) return true\n if (manualTriggerLoad.value) {\n if (data.value?.length) {\n if (loadingWithData) return true\n return false\n }\n return true\n }\n\n return false\n })\n\n const rePagination = computed(() => {\n return props.pagination === false\n ? undefined\n : {\n current: current.value,\n pageSize: pageSize.value,\n total: total.value,\n onCurrentChange: changeCurrent,\n onPageSizeChange: changePageSize\n }\n })\n\n function removeTreeLoadId(id: (typeof treeLoadIds.value)[number]) {\n const index = treeLoadIds.value.findIndex((item) => item === id)\n if (index === -1) return\n\n treeLoadIds.value.splice(index, 1)\n }\n\n function resumeScrollRecord() {\n const el = tableRef.value?.$el\n if (!el) return\n\n // NOTE 暂时不考虑虚拟列表\n const scrollEl = el.querySelector('.t-table__content')\n if (!scrollEl) return\n\n const { scrollTop, scrollLeft } = scrollEl\n const { top, left } = scrollRecord\n if (top === scrollTop && left === scrollLeft) return\n\n scrollEl.scrollTo({ top, left })\n }\n\n const expose = {\n tableLoad,\n firstLoad,\n manualTriggerLoad,\n loading,\n current,\n pageSize,\n total,\n changeCurrent,\n changePageSize,\n changePagination,\n runAsync,\n run,\n cancel,\n refresh,\n refreshAsync\n } as unknown as QdServiceTableInstanceFunctions<D, R, P, TP, Pag>\n\n watch(\n columnControllerVisible,\n (visible) => {\n const { columns } = reProps.value.tableOptions\n if (visible && !displayColumns.value && columns) {\n displayColumns.value = columns.map((col) => col.colKey).filter(Boolean)\n }\n },\n { immediate: true }\n )\n\n onMounted(() => {\n Object.assign(expose, tableRef.value)\n })\n\n onActivated(() => {\n resumeScrollRecord()\n })\n\n defineExpose(expose)\n</script>\n\n<style lang=\"less\" scoped>\n .qd-service-table {\n height: 100%;\n display: flex;\n flex-direction: column;\n\n & > :deep(.t-table__content) {\n flex: 1;\n\n tbody > tr:last-child:not(.t-table__empty-row) > td,\n tfoot > tr:last-child > td {\n &::before {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n height: 1px;\n transform: translateY(100%);\n background-color: var(--td-component-border);\n }\n }\n }\n\n &__empty {\n padding: var(--td-comp-paddingLR-xxl) var(--td-comp-paddingTB-xxl);\n }\n }\n</style>\n"],"names":["props","__props","emit","__emit","data","selectedRowKeys","activeRowKeys","columnControllerVisible","displayColumns","expandedRowKeys","filterValue","sort","expandedTreeNodes","useVModels","passive","t","useConfig","tableRef","useTemplateRef","treeLoadIds","ref","scrollRecord","top","left","reProps","computed","service","manual","transformParams","transformRes","pagination","cacheKey","cacheTime","pollingInterval","onBefore","onAfter","onSuccess","onError","loadingWithData","loading","selectType","columns","selectOnRowClick","expandOnRowClick","tree","onScroll","tableOptions","reTableOptions","reTransformRes","reTree","easyCopy","qdServiceTableTreeConfig","lazyLoad","res","temp","trErr","trRes","suspectedWrapperPromise","records","forEach","item","children","treeExpandAndFoldIcon","h","row","type","value","includes","id","_createVNode2","LoadingIcon","color","__qdTreeLoaded","AddRectangleIcon","cursor","MinusRectangleIcon","onExpandedTreeNodesChange","currentExpandedTreeNodes","options","rowState","level","maxLevel","rowKey","qdServiceTableProps","isEmpty","push","setData","currentParams","tParams","tpErr","tpRes","serviceErr","serviceRes","removeTreeLoadId","total","length","childrenKey","appendTo","map","reColumns","selectIdx","findIndex","defaultSelect","colKey","align","width","unshift","reSelectOnRowClick","expandTreeNodeOnClick","reOnScroll","params","target","e","scrollTop","scrollLeft","externalLoad","serviceOptions","models","firstLoad","manualTriggerLoad","current","pageSize","changeCurrent","changePageSize","changePagination","runAsync","run","cancel","refresh","refreshAsync","useServicePagination","list","tableLoad","rePagination","undefined","onCurrentChange","onPageSizeChange","index","splice","resumeScrollRecord","el","$el","scrollEl","querySelector","scrollTo","expose","watch","visible","col","filter","Boolean","immediate","onMounted","Object","assign","onActivated","__expose","_openBlock","_createBlock","_unref","_mergeProps","class","headerBg","$event","empty","_createVNode","TEmpty","title","$slots","_","name","fn","_withCtx","slotProps","_renderSlot","_ctx","_normalizeProps","_guardReactiveProps"],"mappings":"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"}
@@ -4,12 +4,14 @@ import type { TableRowData, TdEnhancedTableProps, TableTreeNodeExpandOptions, En
4
4
  export interface QdServiceTableProps<D extends TableRowData = TableRowData, R = unknown, P = ServicePageParams, TP = P, Pag extends ServicePagination = ServicePagination> extends Omit<TdEnhancedTableProps<D>, 'rowKey' | 'pagination' | 'tree'>, ServicePaginationOptions<D, R, P, TP, Pag> {
5
5
  rowKey?: string;
6
6
  selectType?: 'single' | 'multiple';
7
+ headerBg?: boolean;
7
8
  tree?: TdEnhancedTableProps<D>['tree'] & {
8
9
  lazyLoad?: boolean;
9
10
  transformParams?: (options: TableTreeNodeExpandOptions<D>) => TP | Promise<TP>;
10
11
  transformRes?: (res: R, options: TableTreeNodeExpandOptions<D>) => ServicePageRes<D> | Promise<ServicePageRes<D>>;
11
12
  maxLevel?: number;
12
13
  };
14
+ loadingWithData?: boolean;
13
15
  }
14
16
  export interface QdServiceTableInstanceFunctions<D extends TableRowData = TableRowData, R = unknown, P = ServicePageParams, TP = P, Pag extends ServicePagination = ServicePagination> extends EnhancedTableInstanceFunctions, Pick<ReturnType<typeof useServicePagination<D, R, P, TP, Pag>>, 'firstLoad' | 'manualTriggerLoad' | 'loading' | 'current' | 'pageSize' | 'total' | 'changeCurrent' | 'changePageSize' | 'changePagination' | 'runAsync' | 'run' | 'cancel' | 'refresh' | 'refreshAsync'> {
15
17
  tableLoad?: Ref<boolean>;
@@ -36,6 +38,7 @@ export interface QdServiceListProps<D extends TableRowData = TableRowData, R = u
36
38
  }) | {
37
39
  target?: string | Element;
38
40
  };
41
+ loadingWithData?: boolean;
39
42
  }
40
43
  export interface QdServiceListInstanceFunctions<D extends TableRowData = TableRowData, R = unknown, P = ServicePageParams, TP = P, Pag extends ServicePagination = ServicePagination> extends ListInstanceFunctions, Pick<ReturnType<typeof useServiceLoadMore<D, R, P, TP, Pag>>, 'firstLoad' | 'manualTriggerLoad' | 'loading' | 'loadingMore' | 'noMore' | 'error' | 'refresh' | 'refreshAsync' | 'cancel' | 'loadMore' | 'loadMoreAsync' | 'mutate'> {
41
44
  }
@@ -3,3 +3,4 @@ export * from './useModal';
3
3
  export * from './useDict';
4
4
  export * from './useReadonly';
5
5
  export * from './useDisabled';
6
+ export * from './useUserAvatar';
@@ -12,4 +12,4 @@ export declare function useAgentChat(options: UseAgentChatOptions): {
12
12
  }>;
13
13
  stop: () => void;
14
14
  };
15
- export type { SendOptions, SendFile } from './types';
15
+ export type { UseAgentChatOptions, SendOptions, SendFile } from './types';
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../src/hooks/useAgentChat/index.ts"],"sourcesContent":["import type { SendOptions, UseAgentChatOptions } from './types'\nimport { onBeforeUnmount, ref } from 'vue'\nimport { isEmpty, parseRelaxedJSON, suspectedWrapperPromise, to, useCsl } from 'qidian-shared'\nimport { fetchEventSource } from '@microsoft/fetch-event-source'\nimport { useModal } from '../useModal'\nimport { useConfig } from '../../components/config-provider/useConfig'\nimport dayjs from 'dayjs'\n\nconst csl = useCsl('useAgentChat')\n\nexport function useAgentChat(options: UseAgentChatOptions) {\n const { t } = useConfig('chat')\n const { msgError, alertError, alertWarning } = useModal()\n const globalOpt = window.__QIDIAN_AGENT_CHAT__ || {}\n const mergeOpt = { ...globalOpt, ...options }\n\n const loading = ref(false)\n const agentId = ref(mergeOpt.agentId)\n const apiKey = ref(mergeOpt.apiKey)\n const sessionId = ref('')\n let abortController: AbortController | undefined\n\n async function send({\n prompt,\n files,\n reSend,\n extParams,\n refreshSessionId,\n parseContent,\n onOpen,\n onMessage,\n onClose,\n onError\n }: SendOptions): Promise<{\n content: string\n reasoning: string\n parsedContent: unknown\n useTime: number\n }> {\n const allData = { content: '', reasoning: '', parsedContent: undefined, useTime: 0 }\n if (!prompt && isEmpty(files) && isEmpty(extParams)) return allData\n\n loading.value = true\n\n const [agInfoErr, agInfo] = await to(getAgentInfo())\n if (agInfoErr) {\n loading.value = false\n msgError(agInfoErr.message)\n throw agInfoErr\n }\n\n const [sIdErr, sId] = await to(getSessionId({ ...agInfo, refreshSessionId }))\n if (sIdErr) {\n loading.value = false\n msgError(sIdErr.message)\n throw sIdErr\n }\n\n const getUrl = mergeOpt.getUrl\n if (!getUrl) {\n loading.value = false\n const msg = t('failedObtainUrlMessage')\n msgError(msg)\n throw new Error(msg)\n }\n\n abortController = new AbortController()\n const sendTime = Date.now()\n const body = JSON.stringify({\n message: prompt || '',\n re_chat: reSend ?? false,\n document_list: files,\n client_id: agInfo.apiKey,\n client_type: 'API_KEY',\n ...extParams\n })\n\n csl.log.dev(\n `send.${sId}`,\n '------------------------------------------------------------------------------------'\n )\n csl.log.dev(`send.${sId}`, { agentInfo: agInfo, body })\n return new Promise((resolve, reject) => {\n let timeoutId: NodeJS.Timeout | undefined\n let isFirstMessage = true\n\n function triggerError(err: Error) {\n allData.useTime = Date.now() - sendTime\n csl.log.dev(`onError.${sId}`, err)\n loading.value = false\n if (timeoutId) clearTimeout(timeoutId)\n onError?.(err)\n reject(err)\n }\n\n function setTimeoutHandler() {\n if (timeoutId) clearTimeout(timeoutId)\n timeoutId = setTimeout(() => {\n const err = new Error(t('agentProcessingTimeoutMessage'))\n alertError(err.message)\n triggerError(err)\n stop()\n }, 20 * 1000)\n }\n\n fetchEventSource(getUrl(agInfo.agentId, sId), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json;charset=UTF-8',\n Authorization: `Bearer ${agInfo.apiKey}`\n },\n signal: abortController?.signal,\n openWhenHidden: true,\n body,\n\n onopen: async (res) => {\n csl.log.dev(`onOpen.${sId}`, res)\n await onOpen?.(res)\n },\n onmessage: (res) => {\n const { data } = res\n let reData = { content: '', reasoning: '' }\n try {\n reData = parseRelaxedJSON(data)\n if (reData.content) allData.content += reData.content\n if (reData.reasoning) allData.reasoning += reData.reasoning\n\n // 第一次正确获取数据后,开始60秒超时计时\n if ((isFirstMessage && reData.content) || !isFirstMessage) {\n isFirstMessage = false\n setTimeoutHandler()\n }\n } catch (err) {\n console.warn('[useAgentChat.send.onMessage]', err)\n }\n\n csl.log.dev(`onMessage.${sId}`, dayjs().format('HH:mm:ss'), reData)\n onMessage?.({ data: reData, allData })\n },\n\n onclose: () => {\n if (parseContent) {\n try {\n if (timeoutId) clearTimeout(timeoutId)\n allData.parsedContent = parseRelaxedJSON(allData.content)\n } catch (err) {\n alertError({\n header: t('failedParseContentMessage'),\n body: (err as Error).message\n })\n triggerError(err as Error)\n return\n }\n\n if (isEmpty(allData.parsedContent)) {\n const err = new Error(t('parsedContentEmptyMessage'))\n alertWarning({\n header: t('failedParseContentMessage'),\n body: err.message\n })\n triggerError(err)\n return\n }\n }\n\n if (timeoutId) clearTimeout(timeoutId)\n\n allData.useTime = Date.now() - sendTime\n csl.log.dev(`onClose.${sId}`, allData)\n loading.value = false\n onClose?.(allData)\n resolve(allData)\n },\n onerror: (err) => {\n const reErr = err ? err : new Error(t('apiUnknownErrorMessage'))\n alertError(reErr.message)\n triggerError(reErr)\n throw reErr\n }\n })\n })\n }\n\n function stop() {\n if (!abortController) return\n\n csl.log.dev(`stop.${sessionId.value}`)\n abortController.abort()\n }\n\n async function getAgentInfo() {\n if (agentId.value && apiKey.value) {\n return { agentId: agentId.value, apiKey: apiKey.value }\n }\n\n const getFn = mergeOpt.getAgentInfo\n if (!getFn) throw new Error(t('failedObtainAgentInfoMessage'))\n\n const [err, res] = await suspectedWrapperPromise(getFn())\n if (err) throw err\n\n if (!res?.agentId || !res.apiKey) throw new Error(t('failedObtainAgentInfoMessage'))\n\n csl.log.dev('getAgentInfo', res)\n return res as { agentId: string; apiKey: string }\n }\n\n async function getSessionId({\n agentId,\n apiKey,\n refreshSessionId\n }: { agentId: string; apiKey: string } & Pick<SendOptions, 'refreshSessionId'>) {\n if (sessionId.value && !refreshSessionId) return sessionId.value\n\n const getFn = mergeOpt.getSessionId\n if (!getFn) throw new Error(t('failedObtainSessionIdMessage'))\n\n const [err, res] = await suspectedWrapperPromise(getFn(agentId, apiKey))\n if (err) throw err\n\n sessionId.value = res\n csl.log.dev('getSessionId', res)\n return res\n }\n\n onBeforeUnmount(() => {\n stop()\n })\n\n return {\n loading,\n agentId,\n apiKey,\n sessionId,\n send,\n stop\n }\n}\n\nexport type { SendOptions, SendFile } from './types'\n"],"names":["agentId","apiKey"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/hooks/useAgentChat/index.ts"],"sourcesContent":["import type { SendOptions, UseAgentChatOptions } from './types'\nimport { onBeforeUnmount, ref } from 'vue'\nimport { isEmpty, parseRelaxedJSON, suspectedWrapperPromise, to, useCsl } from 'qidian-shared'\nimport { fetchEventSource } from '@microsoft/fetch-event-source'\nimport { useModal } from '../useModal'\nimport { useConfig } from '../../components/config-provider/useConfig'\nimport dayjs from 'dayjs'\n\nconst csl = useCsl('useAgentChat')\n\nexport function useAgentChat(options: UseAgentChatOptions) {\n const { t } = useConfig('chat')\n const { msgError, alertError, alertWarning } = useModal()\n const globalOpt = window.__QIDIAN_AGENT_CHAT__ || {}\n const mergeOpt = { ...globalOpt, ...options }\n\n const loading = ref(false)\n const agentId = ref(mergeOpt.agentId)\n const apiKey = ref(mergeOpt.apiKey)\n const sessionId = ref('')\n let abortController: AbortController | undefined\n\n async function send({\n prompt,\n files,\n reSend,\n extParams,\n refreshSessionId,\n parseContent,\n onOpen,\n onMessage,\n onClose,\n onError\n }: SendOptions): Promise<{\n content: string\n reasoning: string\n parsedContent: unknown\n useTime: number\n }> {\n const allData = { content: '', reasoning: '', parsedContent: undefined, useTime: 0 }\n if (!prompt && isEmpty(files) && isEmpty(extParams)) return allData\n\n loading.value = true\n\n const [agInfoErr, agInfo] = await to(getAgentInfo())\n if (agInfoErr) {\n loading.value = false\n msgError(agInfoErr.message)\n throw agInfoErr\n }\n\n const [sIdErr, sId] = await to(getSessionId({ ...agInfo, refreshSessionId }))\n if (sIdErr) {\n loading.value = false\n msgError(sIdErr.message)\n throw sIdErr\n }\n\n const getUrl = mergeOpt.getUrl\n if (!getUrl) {\n loading.value = false\n const msg = t('failedObtainUrlMessage')\n msgError(msg)\n throw new Error(msg)\n }\n\n abortController = new AbortController()\n const sendTime = Date.now()\n const body = JSON.stringify({\n message: prompt || '',\n re_chat: reSend ?? false,\n document_list: files,\n client_id: agInfo.apiKey,\n client_type: 'API_KEY',\n ...extParams\n })\n\n csl.log.dev(\n `send.${sId}`,\n '------------------------------------------------------------------------------------'\n )\n csl.log.dev(`send.${sId}`, { agentInfo: agInfo, body })\n return new Promise((resolve, reject) => {\n let timeoutId: NodeJS.Timeout | undefined\n let isFirstMessage = true\n\n function triggerError(err: Error) {\n allData.useTime = Date.now() - sendTime\n csl.log.dev(`onError.${sId}`, err)\n loading.value = false\n if (timeoutId) clearTimeout(timeoutId)\n onError?.(err)\n reject(err)\n }\n\n function setTimeoutHandler() {\n if (timeoutId) clearTimeout(timeoutId)\n timeoutId = setTimeout(() => {\n const err = new Error(t('agentProcessingTimeoutMessage'))\n alertError(err.message)\n triggerError(err)\n stop()\n }, 20 * 1000)\n }\n\n fetchEventSource(getUrl(agInfo.agentId, sId), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json;charset=UTF-8',\n Authorization: `Bearer ${agInfo.apiKey}`\n },\n signal: abortController?.signal,\n openWhenHidden: true,\n body,\n\n onopen: async (res) => {\n csl.log.dev(`onOpen.${sId}`, res)\n await onOpen?.(res)\n },\n onmessage: (res) => {\n const { data } = res\n let reData = { content: '', reasoning: '' }\n try {\n reData = parseRelaxedJSON(data)\n if (reData.content) allData.content += reData.content\n if (reData.reasoning) allData.reasoning += reData.reasoning\n\n // 第一次正确获取数据后,开始60秒超时计时\n if ((isFirstMessage && reData.content) || !isFirstMessage) {\n isFirstMessage = false\n setTimeoutHandler()\n }\n } catch (err) {\n console.warn('[useAgentChat.send.onMessage]', err)\n }\n\n csl.log.dev(`onMessage.${sId}`, dayjs().format('HH:mm:ss'), reData)\n onMessage?.({ data: reData, allData })\n },\n\n onclose: () => {\n if (parseContent) {\n try {\n if (timeoutId) clearTimeout(timeoutId)\n allData.parsedContent = parseRelaxedJSON(allData.content)\n } catch (err) {\n alertError({\n header: t('failedParseContentMessage'),\n body: (err as Error).message\n })\n triggerError(err as Error)\n return\n }\n\n if (isEmpty(allData.parsedContent)) {\n const err = new Error(t('parsedContentEmptyMessage'))\n alertWarning({\n header: t('failedParseContentMessage'),\n body: err.message\n })\n triggerError(err)\n return\n }\n }\n\n if (timeoutId) clearTimeout(timeoutId)\n\n allData.useTime = Date.now() - sendTime\n csl.log.dev(`onClose.${sId}`, allData)\n loading.value = false\n onClose?.(allData)\n resolve(allData)\n },\n onerror: (err) => {\n const reErr = err ? err : new Error(t('apiUnknownErrorMessage'))\n alertError(reErr.message)\n triggerError(reErr)\n throw reErr\n }\n })\n })\n }\n\n function stop() {\n if (!abortController) return\n\n csl.log.dev(`stop.${sessionId.value}`)\n abortController.abort()\n }\n\n async function getAgentInfo() {\n if (agentId.value && apiKey.value) {\n return { agentId: agentId.value, apiKey: apiKey.value }\n }\n\n const getFn = mergeOpt.getAgentInfo\n if (!getFn) throw new Error(t('failedObtainAgentInfoMessage'))\n\n const [err, res] = await suspectedWrapperPromise(getFn())\n if (err) throw err\n\n if (!res?.agentId || !res.apiKey) throw new Error(t('failedObtainAgentInfoMessage'))\n\n csl.log.dev('getAgentInfo', res)\n return res as { agentId: string; apiKey: string }\n }\n\n async function getSessionId({\n agentId,\n apiKey,\n refreshSessionId\n }: { agentId: string; apiKey: string } & Pick<SendOptions, 'refreshSessionId'>) {\n if (sessionId.value && !refreshSessionId) return sessionId.value\n\n const getFn = mergeOpt.getSessionId\n if (!getFn) throw new Error(t('failedObtainSessionIdMessage'))\n\n const [err, res] = await suspectedWrapperPromise(getFn(agentId, apiKey))\n if (err) throw err\n\n sessionId.value = res\n csl.log.dev('getSessionId', res)\n return res\n }\n\n onBeforeUnmount(() => {\n stop()\n })\n\n return {\n loading,\n agentId,\n apiKey,\n sessionId,\n send,\n stop\n }\n}\n\nexport type { UseAgentChatOptions, SendOptions, SendFile } from './types'\n"],"names":["agentId","apiKey"],"mappings":"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"}
@@ -15,4 +15,4 @@ export declare function useDictDynamic(dictType: Ref<string | undefined>, hookOp
15
15
  options: Ref<QdDictItem[]>;
16
16
  loading: Ref<boolean>;
17
17
  };
18
- export type { QdDictItem } from './types';
18
+ export type { QdDictBaseOptions, QdDictItem } from './types';
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../src/hooks/useDict/index.ts"],"sourcesContent":["import type { Ref } from 'vue'\nimport type { QdDictItem } from './types'\nimport { suspectedWrapperPromise, to, camelize } from 'qidian-shared'\nimport { ref, toRefs, watchEffect } from 'vue'\n\n// 类型版本的 camelize\ntype Camelize<T extends string> = T extends `${infer First}_${infer Rest}`\n ? `${First}${Capitalize<Camelize<Rest>>}`\n : T extends `${infer First}-${infer Rest}`\n ? `${First}${Capitalize<Camelize<Rest>>}`\n : T\n\nconst dictCache = new Map<string, QdDictItem[]>()\nconst dictPromiseCache = new Map<string, Promise<QdDictItem[]>>()\n\nexport function useDict<T extends string>(\n ...args: T[]\n): { [K in T as `${Camelize<K>}`]: Ref<QdDictItem[]> } & {\n [K in T as `${Camelize<K>}Load`]: Ref<boolean>\n} & {\n [K in T as `${Camelize<K>}Ready`]: (\n callback?: (data: QdDictItem[]) => void\n ) => Promise<QdDictItem[]>\n} {\n const res = ref<Record<string, QdDictItem[]>>({})\n const loadingMap = ref<Record<string, boolean>>({})\n\n args.forEach(async (dictType) => {\n const camelKey = camelize(dictType)\n res.value[camelKey] = [] as QdDictItem[]\n const loadKey = `${camelKey}Load`\n loadingMap.value[loadKey] = false\n\n // 先从缓存中获取\n if (dictCache.has(camelKey)) {\n res.value[camelKey] = dictCache.get(camelKey)!\n } else {\n // 设置 loading\n loadingMap.value[loadKey] = true\n\n // 缓存中没有则调用服务获取\n let dictPromise: Promise<QdDictItem[]>\n\n if (dictPromiseCache.has(camelKey)) {\n dictPromise = dictPromiseCache.get(camelKey)!\n } else {\n dictPromise = getDict(dictType)\n dictPromiseCache.set(camelKey, dictPromise)\n }\n\n const [dictErr, dictRes] = await to(dictPromise)\n if (dictErr) {\n loadingMap.value[loadKey] = false\n dictPromiseCache.delete(camelKey)\n return\n }\n\n dictCache.set(camelKey, dictRes as QdDictItem[])\n res.value[camelKey] = dictRes as QdDictItem[]\n loadingMap.value[loadKey] = false\n dictPromiseCache.delete(camelKey)\n }\n })\n\n // 使用 toRefs 保持响应式\n const result = toRefs(res.value) as Record<string, Ref<QdDictItem[]>>\n const loadingRefs = toRefs(loadingMap.value) as Record<string, Ref<boolean>>\n\n const readyMethods = {} as Record<\n string,\n (callback?: (data: QdDictItem[]) => void) => Promise<QdDictItem[]>\n >\n args.forEach((dictType) => {\n const camelKey = camelize(dictType)\n const loadKey = `${camelKey}Load`\n\n readyMethods[`${camelKey}Ready`] = async (callback?: (data: QdDictItem[]) => void) => {\n // 如果已经有缓存,直接执行\n if (dictCache.has(camelKey)) {\n const data = dictCache.get(camelKey)!\n callback?.(data)\n return data\n }\n\n // 等待 loading 变成 false\n while (loadingMap.value[loadKey]) {\n await new Promise((resolve) => setTimeout(resolve, 10))\n }\n\n // 返回数据并执行回调\n const data = dictCache.get(camelKey) || []\n callback?.(data)\n return data\n }\n })\n\n return {\n ...result,\n ...loadingRefs,\n ...readyMethods\n } as { [K in T as `${Camelize<K>}`]: Ref<QdDictItem[]> } & {\n [K in T as `${Camelize<K>}Load`]: Ref<boolean>\n } & {\n [K in T as `${Camelize<K>}Ready`]: (\n callback?: (data: QdDictItem[]) => void\n ) => Promise<QdDictItem[]>\n }\n}\n\ninterface UseDictDynamicOptions {\n onInit?: (options: QdDictItem[]) => void\n}\n\nexport function useDictDynamic(\n dictType: Ref<string | undefined>,\n hookOptions?: UseDictDynamicOptions\n): {\n options: Ref<QdDictItem[]>\n loading: Ref<boolean>\n} {\n const dictOptions = ref<QdDictItem[]>([])\n const loading = ref(false)\n\n async function loadDict(type?: string) {\n if (!type) {\n dictOptions.value = []\n hookOptions?.onInit?.([])\n return\n }\n\n const camelKey = type ? camelize(type) : type\n\n // 先从缓存中获取\n if (dictCache.has(camelKey)) {\n dictOptions.value = dictCache.get(camelKey)!\n hookOptions?.onInit?.(dictOptions.value)\n return\n }\n\n // 设置 loading\n loading.value = true\n\n // 缓存中没有则调用服务获取\n let dictPromise: Promise<QdDictItem[]>\n\n if (dictPromiseCache.has(camelKey)) {\n dictPromise = dictPromiseCache.get(camelKey)!\n } else {\n dictPromise = getDict(type)\n dictPromiseCache.set(camelKey, dictPromise)\n }\n\n const [dictErr, dictRes] = await to(dictPromise)\n if (dictErr) {\n dictOptions.value = []\n loading.value = false\n dictPromiseCache.delete(camelKey)\n hookOptions?.onInit?.([])\n return\n }\n\n dictCache.set(camelKey, dictRes as QdDictItem[])\n dictOptions.value = dictRes as QdDictItem[]\n loading.value = false\n dictPromiseCache.delete(camelKey)\n hookOptions?.onInit?.(dictOptions.value)\n }\n\n watchEffect(() => {\n loadDict(dictType.value)\n })\n\n return {\n options: dictOptions,\n loading\n }\n}\n\nasync function getDict(dictType: string) {\n const dictOptions = window.__QIDIAN_DICT__\n if (!dictOptions) {\n const msg = '[useDict] 字典服务未提供,请确保使用了 QdConfigProvider'\n console.warn(msg)\n throw new Error(msg)\n }\n\n const { service, transformParams, transformRes } = dictOptions\n\n let currentParams = dictType\n if (transformParams) {\n const [tpErr, tpRes] = await suspectedWrapperPromise(transformParams(currentParams))\n if (tpErr) throw tpErr\n\n currentParams = tpRes\n }\n\n const [serviceErr, serviceRes] = await suspectedWrapperPromise(service(currentParams))\n if (serviceErr) throw serviceErr\n\n let res: QdDictItem[] | undefined\n if (transformRes) {\n const [trErr, trRes] = await suspectedWrapperPromise(transformRes(serviceRes))\n if (trErr) throw trErr\n\n res = trRes\n } else {\n res = serviceRes as QdDictItem[]\n }\n\n return res\n}\n\nexport type { QdDictItem } from './types'\n"],"names":["data"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/hooks/useDict/index.ts"],"sourcesContent":["import type { Ref } from 'vue'\nimport type { QdDictItem } from './types'\nimport { suspectedWrapperPromise, to, camelize } from 'qidian-shared'\nimport { ref, toRefs, watchEffect } from 'vue'\n\n// 类型版本的 camelize\ntype Camelize<T extends string> = T extends `${infer First}_${infer Rest}`\n ? `${First}${Capitalize<Camelize<Rest>>}`\n : T extends `${infer First}-${infer Rest}`\n ? `${First}${Capitalize<Camelize<Rest>>}`\n : T\n\nconst dictCache = new Map<string, QdDictItem[]>()\nconst dictPromiseCache = new Map<string, Promise<QdDictItem[]>>()\n\nexport function useDict<T extends string>(\n ...args: T[]\n): { [K in T as `${Camelize<K>}`]: Ref<QdDictItem[]> } & {\n [K in T as `${Camelize<K>}Load`]: Ref<boolean>\n} & {\n [K in T as `${Camelize<K>}Ready`]: (\n callback?: (data: QdDictItem[]) => void\n ) => Promise<QdDictItem[]>\n} {\n const res = ref<Record<string, QdDictItem[]>>({})\n const loadingMap = ref<Record<string, boolean>>({})\n\n args.forEach(async (dictType) => {\n const camelKey = camelize(dictType)\n res.value[camelKey] = [] as QdDictItem[]\n const loadKey = `${camelKey}Load`\n loadingMap.value[loadKey] = false\n\n // 先从缓存中获取\n if (dictCache.has(camelKey)) {\n res.value[camelKey] = dictCache.get(camelKey)!\n } else {\n // 设置 loading\n loadingMap.value[loadKey] = true\n\n // 缓存中没有则调用服务获取\n let dictPromise: Promise<QdDictItem[]>\n\n if (dictPromiseCache.has(camelKey)) {\n dictPromise = dictPromiseCache.get(camelKey)!\n } else {\n dictPromise = getDict(dictType)\n dictPromiseCache.set(camelKey, dictPromise)\n }\n\n const [dictErr, dictRes] = await to(dictPromise)\n if (dictErr) {\n loadingMap.value[loadKey] = false\n dictPromiseCache.delete(camelKey)\n return\n }\n\n dictCache.set(camelKey, dictRes as QdDictItem[])\n res.value[camelKey] = dictRes as QdDictItem[]\n loadingMap.value[loadKey] = false\n dictPromiseCache.delete(camelKey)\n }\n })\n\n // 使用 toRefs 保持响应式\n const result = toRefs(res.value) as Record<string, Ref<QdDictItem[]>>\n const loadingRefs = toRefs(loadingMap.value) as Record<string, Ref<boolean>>\n\n const readyMethods = {} as Record<\n string,\n (callback?: (data: QdDictItem[]) => void) => Promise<QdDictItem[]>\n >\n args.forEach((dictType) => {\n const camelKey = camelize(dictType)\n const loadKey = `${camelKey}Load`\n\n readyMethods[`${camelKey}Ready`] = async (callback?: (data: QdDictItem[]) => void) => {\n // 如果已经有缓存,直接执行\n if (dictCache.has(camelKey)) {\n const data = dictCache.get(camelKey)!\n callback?.(data)\n return data\n }\n\n // 等待 loading 变成 false\n while (loadingMap.value[loadKey]) {\n await new Promise((resolve) => setTimeout(resolve, 10))\n }\n\n // 返回数据并执行回调\n const data = dictCache.get(camelKey) || []\n callback?.(data)\n return data\n }\n })\n\n return {\n ...result,\n ...loadingRefs,\n ...readyMethods\n } as { [K in T as `${Camelize<K>}`]: Ref<QdDictItem[]> } & {\n [K in T as `${Camelize<K>}Load`]: Ref<boolean>\n } & {\n [K in T as `${Camelize<K>}Ready`]: (\n callback?: (data: QdDictItem[]) => void\n ) => Promise<QdDictItem[]>\n }\n}\n\ninterface UseDictDynamicOptions {\n onInit?: (options: QdDictItem[]) => void\n}\n\nexport function useDictDynamic(\n dictType: Ref<string | undefined>,\n hookOptions?: UseDictDynamicOptions\n): {\n options: Ref<QdDictItem[]>\n loading: Ref<boolean>\n} {\n const dictOptions = ref<QdDictItem[]>([])\n const loading = ref(false)\n\n async function loadDict(type?: string) {\n if (!type) {\n dictOptions.value = []\n hookOptions?.onInit?.([])\n return\n }\n\n const camelKey = type ? camelize(type) : type\n\n // 先从缓存中获取\n if (dictCache.has(camelKey)) {\n dictOptions.value = dictCache.get(camelKey)!\n hookOptions?.onInit?.(dictOptions.value)\n return\n }\n\n // 设置 loading\n loading.value = true\n\n // 缓存中没有则调用服务获取\n let dictPromise: Promise<QdDictItem[]>\n\n if (dictPromiseCache.has(camelKey)) {\n dictPromise = dictPromiseCache.get(camelKey)!\n } else {\n dictPromise = getDict(type)\n dictPromiseCache.set(camelKey, dictPromise)\n }\n\n const [dictErr, dictRes] = await to(dictPromise)\n if (dictErr) {\n dictOptions.value = []\n loading.value = false\n dictPromiseCache.delete(camelKey)\n hookOptions?.onInit?.([])\n return\n }\n\n dictCache.set(camelKey, dictRes as QdDictItem[])\n dictOptions.value = dictRes as QdDictItem[]\n loading.value = false\n dictPromiseCache.delete(camelKey)\n hookOptions?.onInit?.(dictOptions.value)\n }\n\n watchEffect(() => {\n loadDict(dictType.value)\n })\n\n return {\n options: dictOptions,\n loading\n }\n}\n\nasync function getDict(dictType: string) {\n const dictOptions = window.__QIDIAN_DICT__\n if (!dictOptions) {\n const msg = '[useDict] 字典服务未提供,请确保使用了 QdConfigProvider'\n console.warn(msg)\n throw new Error(msg)\n }\n\n const { service, transformParams, transformRes } = dictOptions\n\n let currentParams = dictType\n if (transformParams) {\n const [tpErr, tpRes] = await suspectedWrapperPromise(transformParams(currentParams))\n if (tpErr) throw tpErr\n\n currentParams = tpRes\n }\n\n const [serviceErr, serviceRes] = await suspectedWrapperPromise(service(currentParams))\n if (serviceErr) throw serviceErr\n\n let res: QdDictItem[] | undefined\n if (transformRes) {\n const [trErr, trRes] = await suspectedWrapperPromise(transformRes(serviceRes))\n if (trErr) throw trErr\n\n res = trRes\n } else {\n res = serviceRes as QdDictItem[]\n }\n\n return res\n}\n\nexport type { QdDictBaseOptions, QdDictItem } from './types'\n"],"names":["data"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function useUserAvatar(): {
2
+ loading: import("vue").Ref<boolean, boolean>;
3
+ getAvatar: (id: string | number | undefined) => Promise<string | number | undefined>;
4
+ };
5
+ export type { QdAvatarBaseOptions } from './types';
@@ -0,0 +1,38 @@
1
+ import { isEmpty, validator, to } from "qidian-shared";
2
+ import { ref } from "vue";
3
+ const avatarCache = /* @__PURE__ */ new Map();
4
+ const avatarPromiseCache = /* @__PURE__ */ new Map();
5
+ function useUserAvatar() {
6
+ const loading = ref(false);
7
+ async function getAvatar(id) {
8
+ const avatarOptions = window.__QIDIAN_AVATAR__;
9
+ if (!avatarOptions) {
10
+ const msg = "[useDict] 用户头像未提供,请确保使用了 QdConfigProvider";
11
+ console.warn(msg);
12
+ return id;
13
+ }
14
+ const { service } = avatarOptions;
15
+ if (!service || isEmpty(id) || validator(id, "url")) {
16
+ return id;
17
+ }
18
+ if (avatarCache.has(id)) return avatarCache.get(id);
19
+ if (avatarPromiseCache.has(id)) return avatarPromiseCache.get(id);
20
+ const avatarPromise = service(id);
21
+ avatarPromiseCache.set(id, avatarPromise);
22
+ loading.value = true;
23
+ const [err, res] = await to(avatarPromise);
24
+ loading.value = false;
25
+ avatarPromiseCache.delete(id);
26
+ if (err) return id;
27
+ avatarCache.set(id, res);
28
+ return res;
29
+ }
30
+ return {
31
+ loading,
32
+ getAvatar
33
+ };
34
+ }
35
+ export {
36
+ useUserAvatar
37
+ };
38
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/hooks/useUserAvatar/index.ts"],"sourcesContent":["import { to, isEmpty, validator } from 'qidian-shared'\nimport { ref } from 'vue'\n\nconst avatarCache = new Map<string | number, string>()\nconst avatarPromiseCache = new Map<string | number, Promise<string>>()\n\nexport function useUserAvatar() {\n const loading = ref(false)\n\n async function getAvatar(id: string | number | undefined): Promise<string | number | undefined> {\n const avatarOptions = window.__QIDIAN_AVATAR__\n if (!avatarOptions) {\n const msg = '[useDict] 用户头像未提供,请确保使用了 QdConfigProvider'\n console.warn(msg)\n return id\n }\n\n const { service } = avatarOptions\n\n if (!service || isEmpty(id) || validator(id, 'url')) {\n return id\n }\n\n // 先从缓存中获取\n if (avatarCache.has(id)) return avatarCache.get(id)\n\n // 如果正在请求中,返回同一个 Promise\n if (avatarPromiseCache.has(id)) return avatarPromiseCache.get(id)!\n\n // 创建新的请求 Promise\n const avatarPromise = service(id)\n avatarPromiseCache.set(id, avatarPromise)\n\n loading.value = true\n const [err, res] = await to(avatarPromise)\n loading.value = false\n\n // 清理 Promise 缓存\n avatarPromiseCache.delete(id)\n\n if (err) return id\n\n // 缓存结果\n avatarCache.set(id, res)\n return res\n }\n\n return {\n loading,\n getAvatar\n }\n}\n\nexport type { QdAvatarBaseOptions } from './types'\n"],"names":[],"mappings":";;AAGA,MAAM,kCAAkB,IAAA;AACxB,MAAM,yCAAyB,IAAA;AAExB,SAAS,gBAAgB;AAC9B,QAAM,UAAU,IAAI,KAAK;AAEzB,iBAAe,UAAU,IAAuE;AAC9F,UAAM,gBAAgB,OAAO;AAC7B,QAAI,CAAC,eAAe;AAClB,YAAM,MAAM;AACZ,cAAQ,KAAK,GAAG;AAChB,aAAO;AAAA,IACT;AAEA,UAAM,EAAE,YAAY;AAEpB,QAAI,CAAC,WAAW,QAAQ,EAAE,KAAK,UAAU,IAAI,KAAK,GAAG;AACnD,aAAO;AAAA,IACT;AAGA,QAAI,YAAY,IAAI,EAAE,EAAG,QAAO,YAAY,IAAI,EAAE;AAGlD,QAAI,mBAAmB,IAAI,EAAE,EAAG,QAAO,mBAAmB,IAAI,EAAE;AAGhE,UAAM,gBAAgB,QAAQ,EAAE;AAChC,uBAAmB,IAAI,IAAI,aAAa;AAExC,YAAQ,QAAQ;AAChB,UAAM,CAAC,KAAK,GAAG,IAAI,MAAM,GAAG,aAAa;AACzC,YAAQ,QAAQ;AAGhB,uBAAmB,OAAO,EAAE;AAE5B,QAAI,IAAK,QAAO;AAGhB,gBAAY,IAAI,IAAI,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EAAA;AAEJ;"}
@@ -0,0 +1,3 @@
1
+ export interface QdAvatarBaseOptions {
2
+ service?: (id: string | number) => Promise<string>;
3
+ }
package/dist/index.mjs CHANGED
@@ -1,35 +1,36 @@
1
1
  /* empty css */
2
2
  import { default as default2 } from "./components/auto-tooltip/index.vue.mjs";
3
- import { default as default3 } from "./components/card/index.vue.mjs";
3
+ import { default as default3 } from "./components/avatar/index.vue.mjs";
4
+ import { default as default4 } from "./components/card/index.vue.mjs";
4
5
  import { QdConfigProvider } from "./components/config-provider/index.mjs";
5
- import { default as default4 } from "./components/config-renderer/index.vue.mjs";
6
+ import { default as default5 } from "./components/config-renderer/index.vue.mjs";
6
7
  import { qdAsyncCompute, qdCompute, qdUseComputeValue } from "./components/config-renderer/compute.mjs";
7
8
  import { getValueByPath, parseVModelPath, resolveVModelBinding, setValueByPath } from "./components/config-renderer/utils.mjs";
8
- import { default as default5 } from "./components/crud/table.vue.mjs";
9
- import { default as default6 } from "./components/crud/list.vue.mjs";
10
- import { default as default7 } from "./components/crud/search.vue.mjs";
9
+ import { default as default6 } from "./components/crud/table.vue.mjs";
10
+ import { default as default7 } from "./components/crud/list.vue.mjs";
11
+ import { default as default8 } from "./components/crud/search.vue.mjs";
11
12
  import { defineQdCrudList, defineQdCrudTable } from "./components/crud/define.mjs";
12
- import { default as default8 } from "./components/dialog/index.vue.mjs";
13
+ import { default as default9 } from "./components/dialog/index.vue.mjs";
13
14
  /* empty css */
14
- import { default as default9 } from "./components/dialog/form.vue.mjs";
15
- import { default as default10 } from "./components/dict/select.vue.mjs";
16
- import { default as default11 } from "./components/dict/radio-group.vue.mjs";
17
- import { default as default12 } from "./components/dict/checkbox-group.vue.mjs";
18
- import { default as default13 } from "./components/dict/tag.vue.mjs";
19
- import { default as default14 } from "./components/office/pdf/index.vue.mjs";
20
- import { default as default15 } from "./components/org/select/index.vue.mjs";
15
+ import { default as default10 } from "./components/dialog/form.vue.mjs";
16
+ import { default as default11 } from "./components/dict/select.vue.mjs";
17
+ import { default as default12 } from "./components/dict/radio-group.vue.mjs";
18
+ import { default as default13 } from "./components/dict/checkbox-group.vue.mjs";
19
+ import { default as default14 } from "./components/dict/tag.vue.mjs";
20
+ import { default as default15 } from "./components/office/pdf/index.vue.mjs";
21
+ import { default as default16 } from "./components/org/select/index.vue.mjs";
21
22
  /* empty css */
22
- import { default as default16 } from "./components/form/index.vue.mjs";
23
- import { default as default17 } from "./components/form/item.vue.mjs";
23
+ import { default as default17 } from "./components/form/index.vue.mjs";
24
+ import { default as default18 } from "./components/form/item.vue.mjs";
24
25
  import { PROVIDE_FORM_ADD_BEFORE_SUBMIT_QUEUE } from "./components/form/config.mjs";
25
26
  import { qdFormGrid, qdFormGutter } from "./components/form/props.mjs";
26
- import { default as default18 } from "./components/grid/index.vue.mjs";
27
- import { default as default19 } from "./components/grid/item.vue.mjs";
27
+ import { default as default19 } from "./components/grid/index.vue.mjs";
28
+ import { default as default20 } from "./components/grid/item.vue.mjs";
28
29
  import { PROVIDE_GRID_ITEM_PROPS_KEY, PROVIDE_GRID_WIDTH_KEY } from "./components/grid/config.mjs";
29
- import { default as default20 } from "./components/service/table.vue.mjs";
30
- import { default as default21 } from "./components/service/list.vue.mjs";
31
- import { default as default22 } from "./components/service/select.vue.mjs";
32
- import { default as default23 } from "./components/upload/index.vue.mjs";
30
+ import { default as default21 } from "./components/service/table.vue.mjs";
31
+ import { default as default22 } from "./components/service/list.vue.mjs";
32
+ import { default as default23 } from "./components/service/select.vue.mjs";
33
+ import { default as default24 } from "./components/upload/index.vue.mjs";
33
34
  import { qdUploadAcceptMap } from "./components/upload/config.mjs";
34
35
  import { hasPermi, hasPermiDirective } from "./directive/hasPermi.mjs";
35
36
  import { hasRole, hasRoleDirective } from "./directive/hasRole.mjs";
@@ -38,6 +39,7 @@ import { useModal } from "./hooks/useModal.mjs";
38
39
  import { useDict, useDictDynamic } from "./hooks/useDict/index.mjs";
39
40
  import { useReadonly } from "./hooks/useReadonly.mjs";
40
41
  import { useDisabled } from "./hooks/useDisabled.mjs";
42
+ import { useUserAvatar } from "./hooks/useUserAvatar/index.mjs";
41
43
  import * as auth from "./utils/auth.mjs";
42
44
  import { formatDuration } from "./utils/time.mjs";
43
45
  export {
@@ -45,28 +47,29 @@ export {
45
47
  PROVIDE_GRID_ITEM_PROPS_KEY,
46
48
  PROVIDE_GRID_WIDTH_KEY,
47
49
  default2 as QdAutoTooltip,
48
- default3 as QdCard,
50
+ default3 as QdAvatar,
51
+ default4 as QdCard,
49
52
  QdConfigProvider,
50
- default4 as QdConfigRenderer,
51
- default6 as QdCrudList,
52
- default7 as QdCrudSearch,
53
- default5 as QdCrudTable,
54
- default8 as QdDialog,
55
- default9 as QdDialogForm,
56
- default12 as QdDictCheckboxGroup,
57
- default11 as QdDictRadioGroup,
58
- default10 as QdDictSelect,
59
- default13 as QdDictTag,
60
- default16 as QdForm,
61
- default17 as QdFormItem,
62
- default18 as QdGrid,
63
- default19 as QdGridItem,
64
- default14 as QdOfficePdf,
65
- default15 as QdOrgSelect,
66
- default21 as QdServiceList,
67
- default22 as QdServiceSelect,
68
- default20 as QdServiceTable,
69
- default23 as QdUpload,
53
+ default5 as QdConfigRenderer,
54
+ default7 as QdCrudList,
55
+ default8 as QdCrudSearch,
56
+ default6 as QdCrudTable,
57
+ default9 as QdDialog,
58
+ default10 as QdDialogForm,
59
+ default13 as QdDictCheckboxGroup,
60
+ default12 as QdDictRadioGroup,
61
+ default11 as QdDictSelect,
62
+ default14 as QdDictTag,
63
+ default17 as QdForm,
64
+ default18 as QdFormItem,
65
+ default19 as QdGrid,
66
+ default20 as QdGridItem,
67
+ default15 as QdOfficePdf,
68
+ default16 as QdOrgSelect,
69
+ default22 as QdServiceList,
70
+ default23 as QdServiceSelect,
71
+ default21 as QdServiceTable,
72
+ default24 as QdUpload,
70
73
  auth,
71
74
  defineQdCrudList,
72
75
  defineQdCrudTable,
@@ -90,6 +93,7 @@ export {
90
93
  useDictDynamic,
91
94
  useDisabled,
92
95
  useModal,
93
- useReadonly
96
+ useReadonly,
97
+ useUserAvatar
94
98
  };
95
99
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -54,10 +54,16 @@ p {
54
54
  .t-table__header > tr > th {
55
55
  background-color: var(--td-bg-color-secondarycontainer);
56
56
  }
57
+ .t-table__cell--title {
58
+ justify-content: space-between;
59
+ }
57
60
  .t-table__body > tr > td .t-input__extra {
58
61
  position: initial;
59
62
  text-align: left;
60
63
  }
64
+ .t-table--header-bg-inherit .t-table__header > tr > th {
65
+ background-color: inherit !important;
66
+ }
61
67
  .t-message__list {
62
68
  display: flex;
63
69
  flex-direction: column;
@@ -104,6 +110,9 @@ p {
104
110
  .t-button.t-size-s .t-button__suffix:not(:empty) {
105
111
  margin-left: var(--td-comp-margin-xs);
106
112
  }
113
+ .t-avatar > .t-image__wrapper > .t-image {
114
+ display: block;
115
+ }
107
116
  .qd-auto-tooltip[data-v-41eb5480] {
108
117
  width: 100%;
109
118
  display: flex;
@@ -124,19 +133,28 @@ p {
124
133
  -webkit-box-orient: vertical;
125
134
  -webkit-line-clamp: var(--v07d46710);
126
135
  }
136
+ .qd-avatar[data-v-527dccf6] {
137
+ display: inline-flex;
138
+ align-items: center;
139
+ font: var(--td-font-body-medium);
140
+ color: var(--td-text-color-primary);
141
+ }
142
+ .qd-avatar__name[data-v-527dccf6] {
143
+ margin-left: var(--td-comp-margin-s);
144
+ }
127
145
  [data-v-cdb247de] .qd-card__header--click {
128
146
  cursor: pointer;
129
147
  }
130
- .qd-service-table[data-v-5a4b2682] {
148
+ .qd-service-table[data-v-698f981f] {
131
149
  height: 100%;
132
150
  display: flex;
133
151
  flex-direction: column;
134
152
  }
135
- .qd-service-table[data-v-5a4b2682] > .t-table__content {
153
+ .qd-service-table[data-v-698f981f] > .t-table__content {
136
154
  flex: 1;
137
155
  }
138
- .qd-service-table[data-v-5a4b2682] > .t-table__content tbody > tr:last-child:not(.t-table__empty-row) > td::before,
139
- .qd-service-table[data-v-5a4b2682] > .t-table__content tfoot > tr:last-child > td::before {
156
+ .qd-service-table[data-v-698f981f] > .t-table__content tbody > tr:last-child:not(.t-table__empty-row) > td::before,
157
+ .qd-service-table[data-v-698f981f] > .t-table__content tfoot > tr:last-child > td::before {
140
158
  content: '';
141
159
  position: absolute;
142
160
  left: 0;
@@ -146,20 +164,20 @@ p {
146
164
  transform: translateY(100%);
147
165
  background-color: var(--td-component-border);
148
166
  }
149
- .qd-service-table__empty[data-v-5a4b2682] {
167
+ .qd-service-table__empty[data-v-698f981f] {
150
168
  padding: var(--td-comp-paddingLR-xxl) var(--td-comp-paddingTB-xxl);
151
169
  }
152
- .qd-service-list[data-v-0b051d29] {
170
+ .qd-service-list[data-v-d3e35e7a] {
153
171
  height: 100%;
154
172
  display: flex;
155
173
  flex-direction: column;
156
174
  background-color: transparent;
157
175
  }
158
- .qd-service-list[data-v-0b051d29] > .t-list__load {
176
+ .qd-service-list[data-v-d3e35e7a] > .t-list__load {
159
177
  color: var(--td-text-color-secondary);
160
178
  background-color: transparent;
161
179
  }
162
- .qd-service-list__empty[data-v-0b051d29] {
180
+ .qd-service-list__empty[data-v-d3e35e7a] {
163
181
  padding: var(--td-comp-paddingLR-xxl) var(--td-comp-paddingTB-xxl);
164
182
  }
165
183
  .qd-service-select__load[data-v-b3729d31] {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qidian-vue-ui",
3
- "version": "1.1.18",
3
+ "version": "1.1.20",
4
4
  "description": "基于 TDesign 的 QiDian Vue UI 组件库",
5
5
  "author": "qidian",
6
6
  "license": "MIT",
@@ -42,7 +42,7 @@
42
42
  "vue": ">=3.1.0",
43
43
  "tdesign-vue-next": "^1.16.1",
44
44
  "tdesign-icons-vue-next": "^0.3.7",
45
- "qidian-shared": "1.0.38"
45
+ "qidian-shared": "1.0.40"
46
46
  },
47
47
  "scripts": {
48
48
  "build": "vue-tsc --noEmit && vite build && vue-tsc",