qidian-vue-ui 1.1.19 → 1.1.21
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 +2 -0
- package/dist/components/crud/table.vue2.mjs +3 -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 +10 -1
- package/dist/components/service/list.vue2.mjs.map +1 -1
- package/dist/components/service/props.d.ts +2 -0
- package/dist/components/service/props.mjs +4 -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 +19 -1
- package/dist/components/service/table.vue2.mjs.map +1 -1
- package/dist/components/service/types.d.ts +2 -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 +20 -8
- package/package.json +2 -2
|
@@ -11,6 +11,7 @@ export interface QdServiceTableProps<D extends TableRowData = TableRowData, R =
|
|
|
11
11
|
transformRes?: (res: R, options: TableTreeNodeExpandOptions<D>) => ServicePageRes<D> | Promise<ServicePageRes<D>>;
|
|
12
12
|
maxLevel?: number;
|
|
13
13
|
};
|
|
14
|
+
loadingWithData?: boolean;
|
|
14
15
|
}
|
|
15
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'> {
|
|
16
17
|
tableLoad?: Ref<boolean>;
|
|
@@ -37,6 +38,7 @@ export interface QdServiceListProps<D extends TableRowData = TableRowData, R = u
|
|
|
37
38
|
}) | {
|
|
38
39
|
target?: string | Element;
|
|
39
40
|
};
|
|
41
|
+
loadingWithData?: boolean;
|
|
40
42
|
}
|
|
41
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'> {
|
|
42
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":";;;;;;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
|
+
{"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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"}
|
|
@@ -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
|
@@ -110,6 +110,9 @@ p {
|
|
|
110
110
|
.t-button.t-size-s .t-button__suffix:not(:empty) {
|
|
111
111
|
margin-left: var(--td-comp-margin-xs);
|
|
112
112
|
}
|
|
113
|
+
.t-avatar > .t-image__wrapper > .t-image {
|
|
114
|
+
display: block;
|
|
115
|
+
}
|
|
113
116
|
.qd-auto-tooltip[data-v-41eb5480] {
|
|
114
117
|
width: 100%;
|
|
115
118
|
display: flex;
|
|
@@ -130,19 +133,28 @@ p {
|
|
|
130
133
|
-webkit-box-orient: vertical;
|
|
131
134
|
-webkit-line-clamp: var(--v07d46710);
|
|
132
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
|
+
}
|
|
133
145
|
[data-v-cdb247de] .qd-card__header--click {
|
|
134
146
|
cursor: pointer;
|
|
135
147
|
}
|
|
136
|
-
.qd-service-table[data-v-
|
|
148
|
+
.qd-service-table[data-v-698f981f] {
|
|
137
149
|
height: 100%;
|
|
138
150
|
display: flex;
|
|
139
151
|
flex-direction: column;
|
|
140
152
|
}
|
|
141
|
-
.qd-service-table[data-v-
|
|
153
|
+
.qd-service-table[data-v-698f981f] > .t-table__content {
|
|
142
154
|
flex: 1;
|
|
143
155
|
}
|
|
144
|
-
.qd-service-table[data-v-
|
|
145
|
-
.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 {
|
|
146
158
|
content: '';
|
|
147
159
|
position: absolute;
|
|
148
160
|
left: 0;
|
|
@@ -152,20 +164,20 @@ p {
|
|
|
152
164
|
transform: translateY(100%);
|
|
153
165
|
background-color: var(--td-component-border);
|
|
154
166
|
}
|
|
155
|
-
.qd-service-table__empty[data-v-
|
|
167
|
+
.qd-service-table__empty[data-v-698f981f] {
|
|
156
168
|
padding: var(--td-comp-paddingLR-xxl) var(--td-comp-paddingTB-xxl);
|
|
157
169
|
}
|
|
158
|
-
.qd-service-list[data-v-
|
|
170
|
+
.qd-service-list[data-v-2617cd0a] {
|
|
159
171
|
height: 100%;
|
|
160
172
|
display: flex;
|
|
161
173
|
flex-direction: column;
|
|
162
174
|
background-color: transparent;
|
|
163
175
|
}
|
|
164
|
-
.qd-service-list[data-v-
|
|
176
|
+
.qd-service-list[data-v-2617cd0a] > .t-list__load {
|
|
165
177
|
color: var(--td-text-color-secondary);
|
|
166
178
|
background-color: transparent;
|
|
167
179
|
}
|
|
168
|
-
.qd-service-list__empty[data-v-
|
|
180
|
+
.qd-service-list__empty[data-v-2617cd0a] {
|
|
169
181
|
padding: var(--td-comp-paddingLR-xxl) var(--td-comp-paddingTB-xxl);
|
|
170
182
|
}
|
|
171
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.21",
|
|
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",
|