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.
- package/dist/components/avatar/index.d.ts +2 -0
- package/dist/components/avatar/index.vue.d.ts +17 -0
- package/dist/components/avatar/index.vue.mjs +8 -0
- package/dist/components/avatar/index.vue.mjs.map +1 -0
- package/dist/components/avatar/index.vue2.mjs +107 -0
- package/dist/components/avatar/index.vue2.mjs.map +1 -0
- package/dist/components/avatar/props.d.ts +5 -0
- package/dist/components/avatar/props.mjs +11 -0
- package/dist/components/avatar/props.mjs.map +1 -0
- package/dist/components/avatar/types.d.ts +9 -0
- package/dist/components/config-provider/config.d.ts +1 -0
- package/dist/components/config-provider/config.mjs +2 -0
- package/dist/components/config-provider/config.mjs.map +1 -1
- package/dist/components/config-provider/index.d.ts +15 -12
- package/dist/components/config-provider/index.mjs +17 -6
- package/dist/components/config-provider/index.mjs.map +1 -1
- package/dist/components/config-provider/types.d.ts +4 -2
- package/dist/components/crud/list.vue2.mjs +3 -0
- package/dist/components/crud/list.vue2.mjs.map +1 -1
- package/dist/components/crud/props.d.ts +3 -0
- package/dist/components/crud/table.vue2.mjs +6 -0
- package/dist/components/crud/table.vue2.mjs.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/service/list.vue.mjs +1 -1
- package/dist/components/service/list.vue2.mjs +11 -1
- package/dist/components/service/list.vue2.mjs.map +1 -1
- package/dist/components/service/props.d.ts +3 -0
- package/dist/components/service/props.mjs +5 -2
- package/dist/components/service/props.mjs.map +1 -1
- package/dist/components/service/table.vue.mjs +1 -1
- package/dist/components/service/table.vue2.mjs +24 -3
- package/dist/components/service/table.vue2.mjs.map +1 -1
- package/dist/components/service/types.d.ts +3 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/useAgentChat/index.d.ts +1 -1
- package/dist/hooks/useAgentChat/index.mjs.map +1 -1
- package/dist/hooks/useDict/index.d.ts +1 -1
- package/dist/hooks/useDict/index.mjs.map +1 -1
- package/dist/hooks/useUserAvatar/index.d.ts +5 -0
- package/dist/hooks/useUserAvatar/index.mjs +38 -0
- package/dist/hooks/useUserAvatar/index.mjs.map +1 -0
- package/dist/hooks/useUserAvatar/types.d.ts +3 -0
- package/dist/index.mjs +47 -43
- package/dist/index.mjs.map +1 -1
- package/dist/qidian-vue-ui.css +26 -8
- 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
|
}
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -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":";;;;;;AAQA,MAAM,MAAM,OAAO,cAAc;AAE1B,SAAS,aAAa,SAA8B;AACzD,QAAM,EAAE,EAAA,IAAM,UAAU,MAAM;AAC9B,QAAM,EAAE,UAAU,YAAY,aAAA,IAAiB,SAAA;AAC/C,QAAM,YAAY,OAAO,yBAAyB,CAAA;AAClD,QAAM,WAAW,EAAE,GAAG,WAAW,GAAG,QAAA;AAEpC,QAAM,UAAU,IAAI,KAAK;AACzB,QAAM,UAAU,IAAI,SAAS,OAAO;AACpC,QAAM,SAAS,IAAI,SAAS,MAAM;AAClC,QAAM,YAAY,IAAI,EAAE;AACxB,MAAI;AAEJ,iBAAe,KAAK;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GAMC;AACD,UAAM,UAAU,EAAE,SAAS,IAAI,WAAW,IAAI,eAAe,QAAW,SAAS,EAAA;AACjF,QAAI,CAAC,UAAU,QAAQ,KAAK,KAAK,QAAQ,SAAS,EAAG,QAAO;AAE5D,YAAQ,QAAQ;AAEhB,UAAM,CAAC,WAAW,MAAM,IAAI,MAAM,GAAG,cAAc;AACnD,QAAI,WAAW;AACb,cAAQ,QAAQ;AAChB,eAAS,UAAU,OAAO;AAC1B,YAAM;AAAA,IACR;AAEA,UAAM,CAAC,QAAQ,GAAG,IAAI,MAAM,GAAG,aAAa,EAAE,GAAG,QAAQ,iBAAA,CAAkB,CAAC;AAC5E,QAAI,QAAQ;AACV,cAAQ,QAAQ;AAChB,eAAS,OAAO,OAAO;AACvB,YAAM;AAAA,IACR;AAEA,UAAM,SAAS,SAAS;AACxB,QAAI,CAAC,QAAQ;AACX,cAAQ,QAAQ;AAChB,YAAM,MAAM,EAAE,wBAAwB;AACtC,eAAS,GAAG;AACZ,YAAM,IAAI,MAAM,GAAG;AAAA,IACrB;AAEA,sBAAkB,IAAI,gBAAA;AACtB,UAAM,WAAW,KAAK,IAAA;AACtB,UAAM,OAAO,KAAK,UAAU;AAAA,MAC1B,SAAS,UAAU;AAAA,MACnB,SAAS,UAAU;AAAA,MACnB,eAAe;AAAA,MACf,WAAW,OAAO;AAAA,MAClB,aAAa;AAAA,MACb,GAAG;AAAA,IAAA,CACJ;AAED,QAAI,IAAI;AAAA,MACN,QAAQ,GAAG;AAAA,MACX;AAAA,IAAA;AAEF,QAAI,IAAI,IAAI,QAAQ,GAAG,IAAI,EAAE,WAAW,QAAQ,MAAM;AACtD,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAI;AACJ,UAAI,iBAAiB;AAErB,eAAS,aAAa,KAAY;AAChC,gBAAQ,UAAU,KAAK,IAAA,IAAQ;AAC/B,YAAI,IAAI,IAAI,WAAW,GAAG,IAAI,GAAG;AACjC,gBAAQ,QAAQ;AAChB,YAAI,wBAAwB,SAAS;AACrC,kBAAU,GAAG;AACb,eAAO,GAAG;AAAA,MACZ;AAEA,eAAS,oBAAoB;AAC3B,YAAI,wBAAwB,SAAS;AACrC,oBAAY,WAAW,MAAM;AAC3B,gBAAM,MAAM,IAAI,MAAM,EAAE,+BAA+B,CAAC;AACxD,qBAAW,IAAI,OAAO;AACtB,uBAAa,GAAG;AAChB,eAAA;AAAA,QACF,GAAG,KAAK,GAAI;AAAA,MACd;AAEA,uBAAiB,OAAO,OAAO,SAAS,GAAG,GAAG;AAAA,QAC5C,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,eAAe,UAAU,OAAO,MAAM;AAAA,QAAA;AAAA,QAExC,QAAQ,iBAAiB;AAAA,QACzB,gBAAgB;AAAA,QAChB;AAAA,QAEA,QAAQ,OAAO,QAAQ;AACrB,cAAI,IAAI,IAAI,UAAU,GAAG,IAAI,GAAG;AAChC,gBAAM,SAAS,GAAG;AAAA,QACpB;AAAA,QACA,WAAW,CAAC,QAAQ;AAClB,gBAAM,EAAE,SAAS;AACjB,cAAI,SAAS,EAAE,SAAS,IAAI,WAAW,GAAA;AACvC,cAAI;AACF,qBAAS,iBAAiB,IAAI;AAC9B,gBAAI,OAAO,QAAS,SAAQ,WAAW,OAAO;AAC9C,gBAAI,OAAO,UAAW,SAAQ,aAAa,OAAO;AAGlD,gBAAK,kBAAkB,OAAO,WAAY,CAAC,gBAAgB;AACzD,+BAAiB;AACjB,gCAAA;AAAA,YACF;AAAA,UACF,SAAS,KAAK;AACZ,oBAAQ,KAAK,iCAAiC,GAAG;AAAA,UACnD;AAEA,cAAI,IAAI,IAAI,aAAa,GAAG,IAAI,QAAQ,OAAO,UAAU,GAAG,MAAM;AAClE,sBAAY,EAAE,MAAM,QAAQ,QAAA,CAAS;AAAA,QACvC;AAAA,QAEA,SAAS,MAAM;AACb,cAAI,cAAc;AAChB,gBAAI;AACF,kBAAI,wBAAwB,SAAS;AACrC,sBAAQ,gBAAgB,iBAAiB,QAAQ,OAAO;AAAA,YAC1D,SAAS,KAAK;AACZ,yBAAW;AAAA,gBACT,QAAQ,EAAE,2BAA2B;AAAA,gBACrC,MAAO,IAAc;AAAA,cAAA,CACtB;AACD,2BAAa,GAAY;AACzB;AAAA,YACF;AAEA,gBAAI,QAAQ,QAAQ,aAAa,GAAG;AAClC,oBAAM,MAAM,IAAI,MAAM,EAAE,2BAA2B,CAAC;AACpD,2BAAa;AAAA,gBACX,QAAQ,EAAE,2BAA2B;AAAA,gBACrC,MAAM,IAAI;AAAA,cAAA,CACX;AACD,2BAAa,GAAG;AAChB;AAAA,YACF;AAAA,UACF;AAEA,cAAI,wBAAwB,SAAS;AAErC,kBAAQ,UAAU,KAAK,IAAA,IAAQ;AAC/B,cAAI,IAAI,IAAI,WAAW,GAAG,IAAI,OAAO;AACrC,kBAAQ,QAAQ;AAChB,oBAAU,OAAO;AACjB,kBAAQ,OAAO;AAAA,QACjB;AAAA,QACA,SAAS,CAAC,QAAQ;AAChB,gBAAM,QAAQ,MAAM,MAAM,IAAI,MAAM,EAAE,wBAAwB,CAAC;AAC/D,qBAAW,MAAM,OAAO;AACxB,uBAAa,KAAK;AAClB,gBAAM;AAAA,QACR;AAAA,MAAA,CACD;AAAA,IACH,CAAC;AAAA,EACH;AAEA,WAAS,OAAO;AACd,QAAI,CAAC,gBAAiB;AAEtB,QAAI,IAAI,IAAI,QAAQ,UAAU,KAAK,EAAE;AACrC,oBAAgB,MAAA;AAAA,EAClB;AAEA,iBAAe,eAAe;AAC5B,QAAI,QAAQ,SAAS,OAAO,OAAO;AACjC,aAAO,EAAE,SAAS,QAAQ,OAAO,QAAQ,OAAO,MAAA;AAAA,IAClD;AAEA,UAAM,QAAQ,SAAS;AACvB,QAAI,CAAC,MAAO,OAAM,IAAI,MAAM,EAAE,8BAA8B,CAAC;AAE7D,UAAM,CAAC,KAAK,GAAG,IAAI,MAAM,wBAAwB,OAAO;AACxD,QAAI,IAAK,OAAM;AAEf,QAAI,CAAC,KAAK,WAAW,CAAC,IAAI,OAAQ,OAAM,IAAI,MAAM,EAAE,8BAA8B,CAAC;AAEnF,QAAI,IAAI,IAAI,gBAAgB,GAAG;AAC/B,WAAO;AAAA,EACT;AAEA,iBAAe,aAAa;AAAA,IAC1B,SAAAA;AAAAA,IACA,QAAAC;AAAAA,IACA;AAAA,EAAA,GAC8E;AAC9E,QAAI,UAAU,SAAS,CAAC,yBAAyB,UAAU;AAE3D,UAAM,QAAQ,SAAS;AACvB,QAAI,CAAC,MAAO,OAAM,IAAI,MAAM,EAAE,8BAA8B,CAAC;AAE7D,UAAM,CAAC,KAAK,GAAG,IAAI,MAAM,wBAAwB,MAAMD,UAASC,OAAM,CAAC;AACvE,QAAI,IAAK,OAAM;AAEf,cAAU,QAAQ;AAClB,QAAI,IAAI,IAAI,gBAAgB,GAAG;AAC/B,WAAO;AAAA,EACT;AAEA,kBAAgB,MAAM;AACpB,SAAA;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}
|
|
@@ -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,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;"}
|
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/
|
|
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
|
|
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
|
|
9
|
-
import { default as
|
|
10
|
-
import { default as
|
|
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
|
|
13
|
+
import { default as default9 } from "./components/dialog/index.vue.mjs";
|
|
13
14
|
/* empty css */
|
|
14
|
-
import { default as
|
|
15
|
-
import { default as
|
|
16
|
-
import { default as
|
|
17
|
-
import { default as
|
|
18
|
-
import { default as
|
|
19
|
-
import { default as
|
|
20
|
-
import { default as
|
|
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
|
|
23
|
-
import { default as
|
|
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
|
|
27
|
-
import { default as
|
|
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
|
|
30
|
-
import { default as
|
|
31
|
-
import { default as
|
|
32
|
-
import { default as
|
|
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
|
|
50
|
+
default3 as QdAvatar,
|
|
51
|
+
default4 as QdCard,
|
|
49
52
|
QdConfigProvider,
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/qidian-vue-ui.css
CHANGED
|
@@ -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-
|
|
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-
|
|
153
|
+
.qd-service-table[data-v-698f981f] > .t-table__content {
|
|
136
154
|
flex: 1;
|
|
137
155
|
}
|
|
138
|
-
.qd-service-table[data-v-
|
|
139
|
-
.qd-service-table[data-v-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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.
|
|
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.
|
|
45
|
+
"qidian-shared": "1.0.40"
|
|
46
46
|
},
|
|
47
47
|
"scripts": {
|
|
48
48
|
"build": "vue-tsc --noEmit && vite build && vue-tsc",
|