yxuse 3.0.68 → 3.0.70
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/lib/api.cjs.js +0 -1
- package/lib/api.es.js +0 -1
- package/lib/app.cjs.js +0 -1
- package/lib/app.es.js +0 -1
- package/lib/components.cjs.js +0 -1
- package/lib/components.es.js +0 -1
- package/lib/directives.cjs.js +0 -1
- package/lib/directives.es.js +0 -1
- package/lib/hooks.cjs.js +0 -1
- package/lib/hooks.es.js +0 -1
- package/lib/index.cjs.js +0 -1
- package/lib/index.cjs10.js +0 -1
- package/lib/index.cjs11.js +1 -2
- package/lib/index.cjs12.js +1 -2
- package/lib/index.cjs13.js +1 -2
- package/lib/index.cjs14.js +0 -1
- package/lib/index.cjs2.js +1 -2
- package/lib/index.cjs3.js +0 -1
- package/lib/index.cjs4.js +0 -1
- package/lib/index.cjs5.js +1 -2
- package/lib/index.cjs5.js.gz +0 -0
- package/lib/index.cjs6.js +1 -2
- package/lib/index.cjs6.js.gz +0 -0
- package/lib/index.cjs7.js +0 -1
- package/lib/index.cjs8.js +0 -1
- package/lib/index.cjs9.js +0 -1
- package/lib/index.es.js +0 -1
- package/lib/index.es10.js +0 -1
- package/lib/index.es11.js +1 -2
- package/lib/index.es12.js +1 -2
- package/lib/index.es12.js.gz +0 -0
- package/lib/index.es13.js +1 -2
- package/lib/index.es14.js +0 -1
- package/lib/index.es2.js +1 -2
- package/lib/index.es3.js +0 -1
- package/lib/index.es4.js +0 -1
- package/lib/index.es5.js +8 -2
- package/lib/index.es5.js.gz +0 -0
- package/lib/index.es6.js +8 -6
- package/lib/index.es6.js.gz +0 -0
- package/lib/index.es7.js +0 -1
- package/lib/index.es8.js +0 -1
- package/lib/index.es9.js +0 -1
- package/lib/theme.cjs.js +1 -2
- package/lib/theme.es.js +5 -2
- package/lib/translate.cjs.js +1 -2
- package/lib/translate.es.js +7 -2
- package/lib/utils.cjs.js +0 -1
- package/lib/utils.es.js +0 -1
- package/lib/vendor-axios.cjs.js +1 -0
- package/lib/vendor-axios.cjs.js.gz +0 -0
- package/lib/vendor-axios.es.js +2378 -0
- package/lib/vendor-axios.es.js.gz +0 -0
- package/lib/vendor-dayjs.cjs.js +1 -0
- package/lib/vendor-dayjs.es.js +294 -0
- package/lib/vendor-dayjs.es.js.gz +0 -0
- package/lib/vendor-file-saver.cjs.js +1 -0
- package/lib/vendor-file-saver.es.js +77 -0
- package/lib/vendor-localforage.cjs.js +7 -0
- package/lib/vendor-localforage.cjs.js.gz +0 -0
- package/lib/vendor-localforage.es.js +2139 -0
- package/lib/vendor-localforage.es.js.gz +0 -0
- package/lib/vendor-lodash.cjs.js +9 -0
- package/lib/vendor-lodash.cjs.js.gz +0 -0
- package/lib/vendor-lodash.es.js +5493 -0
- package/lib/vendor-lodash.es.js.gz +0 -0
- package/lib/vendor-mqtt.cjs.js +1 -0
- package/lib/vendor-mqtt.cjs.js.gz +0 -0
- package/lib/vendor-mqtt.es.js +6822 -0
- package/lib/vendor-mqtt.es.js.gz +0 -0
- package/lib/vendor-sortablejs.cjs.js +7 -0
- package/lib/vendor-sortablejs.cjs.js.gz +0 -0
- package/lib/vendor-sortablejs.es.js +2160 -0
- package/lib/vendor-sortablejs.es.js.gz +0 -0
- package/lib/yxIcon.cjs.js +0 -1
- package/lib/yxIcon.es.js +0 -1
- package/lib/yxi18n.cjs.js +0 -1
- package/lib/yxi18n.es.js +0 -1
- package/lib/yxuse.css +1 -1
- package/lib/yxuse.css.gz +0 -0
- package/package.json +1 -1
- package/lib/.pnpm.cjs.js +0 -26
- package/lib/.pnpm.cjs.js.gz +0 -0
- package/lib/.pnpm.cjs.js.map +0 -1
- package/lib/.pnpm.es.js +0 -54020
- package/lib/.pnpm.es.js.gz +0 -0
- package/lib/.pnpm.es.js.map +0 -1
- package/lib/api.cjs.js.map +0 -1
- package/lib/api.es.js.map +0 -1
- package/lib/app.cjs.js.map +0 -1
- package/lib/app.es.js.map +0 -1
- package/lib/components.cjs.js.map +0 -1
- package/lib/components.es.js.map +0 -1
- package/lib/directives.cjs.js.map +0 -1
- package/lib/directives.es.js.map +0 -1
- package/lib/hooks.cjs.js.map +0 -1
- package/lib/hooks.es.js.map +0 -1
- package/lib/index.cjs.js.map +0 -1
- package/lib/index.cjs10.js.map +0 -1
- package/lib/index.cjs11.js.map +0 -1
- package/lib/index.cjs12.js.map +0 -1
- package/lib/index.cjs13.js.map +0 -1
- package/lib/index.cjs14.js.map +0 -1
- package/lib/index.cjs2.js.map +0 -1
- package/lib/index.cjs3.js.map +0 -1
- package/lib/index.cjs4.js.map +0 -1
- package/lib/index.cjs5.js.map +0 -1
- package/lib/index.cjs6.js.map +0 -1
- package/lib/index.cjs7.js.map +0 -1
- package/lib/index.cjs8.js.map +0 -1
- package/lib/index.cjs9.js.map +0 -1
- package/lib/index.es.js.map +0 -1
- package/lib/index.es10.js.map +0 -1
- package/lib/index.es11.js.map +0 -1
- package/lib/index.es12.js.map +0 -1
- package/lib/index.es13.js.map +0 -1
- package/lib/index.es14.js.map +0 -1
- package/lib/index.es2.js.map +0 -1
- package/lib/index.es3.js.map +0 -1
- package/lib/index.es4.js.map +0 -1
- package/lib/index.es5.js.map +0 -1
- package/lib/index.es6.js.map +0 -1
- package/lib/index.es7.js.map +0 -1
- package/lib/index.es8.js.map +0 -1
- package/lib/index.es9.js.map +0 -1
- package/lib/theme.cjs.js.map +0 -1
- package/lib/theme.es.js.map +0 -1
- package/lib/translate.cjs.js.map +0 -1
- package/lib/translate.es.js.map +0 -1
- package/lib/utils.cjs.js.map +0 -1
- package/lib/utils.es.js.map +0 -1
- package/lib/yxIcon.cjs.js.map +0 -1
- package/lib/yxIcon.es.js.map +0 -1
- package/lib/yxi18n.cjs.js.map +0 -1
- package/lib/yxi18n.es.js.map +0 -1
package/lib/index.es5.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.es5.js","sources":["../packages/theme/config.ts","../packages/components/YxTablePro/index.tsx","../packages/components/Toolbar/src/utils/mounted.ts","../packages/components/Toolbar/src/utils/move.ts","../packages/components/Toolbar/src/index.config.ts","../packages/components/Toolbar/src/svg/theme.svg","../packages/components/Toolbar/src/svg/issue.svg","../packages/components/Toolbar/src/svg/lang.svg","../packages/translate/db.js","../packages/translate/utils.js","../packages/translate/api.js","../packages/translate/index.ts","../packages/components/Toolbar/src/components/Badge.vue","../packages/components/Toolbar/src/components/ToolbarContainer.vue","../packages/components/Toolbar/src/svg/menu.svg","../packages/components/Toolbar/src/index.vue","../packages/components/Toolbar/index.ts","../packages/theme/index.ts","../packages/bc/index.ts"],"sourcesContent":["/*\n * @Author: WangXin\n * @Date: 2023-08-21 16:05:51\n * @LastEditors: WangXin\n * @LastEditTime: 2024-11-20 09:27:35\n * @FilePath: /yxuse/packages/theme/config.ts\n * @Description:\n *\n * Copyright (c) 2023 by YuXing, All Rights Reserved.\n */\n//标题\nconst YX_TITLE =\n\t\"@font-face {font-family: 'YX-TITLE';font-size: 16px; src: url('https://yx-picture.obs.cn-north-4.myhuaweicloud.com/ttc/bucket/1699612675710_ALIBABAPUHUITI-2-105-HEAVY.TTF') format('woff'), url('https://yx-picture.obs.cn-north-4.myhuaweicloud.com/ttc/bucket/1699612675710_ALIBABAPUHUITI-2-105-HEAVY.TTF') format('woff2'); font-style: normal;font-display: swap;}\";\n//特殊标题\nconst YX_SP_TITLE =\n\t\"@font-face { font-family: 'YX-SP-TITLE'; font-size: 16px; src: url('https://yx-picture.obs.cn-north-4.myhuaweicloud.com/ttc/bucket/1699844184489_bt.ttf') format('woff'),url('https://yx-picture.obs.cn-north-4.myhuaweicloud.com/ttc/bucket/1699844184489_bt.ttf') format('woff2');font-style: normal; font-display: swap}\";\n//普通文字\nconst YX_TEXT =\n\t\"@font-face {font-family: 'YX-TEXT'; font-size: 16px;src: url('https://yx-picture.obs.cn-north-4.myhuaweicloud.com/ttc/bucket/1699611032932_ALIBABAPUHUITI-2-65-MEDIUM.TTF') format('woff'),url('https://yx-picture.obs.cn-north-4.myhuaweicloud.com/ttc/bucket/1699611032932_ALIBABAPUHUITI-2-65-MEDIUM.TTF') format('woff2'); font-style: normal; font-display: swap;}\";\n\n//繁体字\nconst YX_TEXT_HK =\n\t\"@font-face {font-family: 'PingFang SC'; font-size: 16px;src: url('https://yx-picture.obs.cn-north-4.myhuaweicloud.com/ttc/bucket/苹方-繁 中黑体.otf') format('woff'),url('https://yx-picture.obs.cn-north-4.myhuaweicloud.com/ttc/bucket/苹方-繁 中黑体.otf') format('woff2'); font-style: normal; font-display: swap}\";\n\nexport const ttcFontFamily = YX_TITLE + YX_SP_TITLE + YX_TEXT + YX_TEXT_HK;\n\nexport const defaultConfig = {\n\tloginUrl: \"/ttc/cloud/#/login\",\n\thomeUrl: \"/ttc/cloud/#/cloud\",\n\tlang: \"zh\", //默认语言\n\tthemeApiUrl: \"/gateway/integrated-management/api/v1/theme/list\",\n\tloginApiUrl: \"/gateway/integrated-management/api/v1/account/login\",\n\ttranslateApiUrl: \"/gateway/integrated-management/api/v1/translate/get\",\n\tuserConfigApiUrl: \"/gateway/integrated-management/api/v1/basic/data/frontendConfig\",\n\tenvironment: \"production\",\n\tisRenderToolbar: true,\n\tisRenderIssue: true,\n\tisRenderLang: false,\n\tsystemKey: \"\",\n\tisTranslateApi: false,\n\twhitelistTranslateApi: []\n};\n","/*\n * @Author: WangXin\n * @Date: 2025-05-28 16:31:24\n * @LastEditors: WangXin\n * @LastEditTime: 2025-06-03 15:19:04\n * @FilePath: /yxuse/packages/components/YxTablePro/index.tsx\n * @Description:\n *\n * Copyright (c) ${2024} by YuXing, All Rights Reserved.\n */\nimport { defineComponent, ref, onMounted, nextTick, onBeforeMount, resolveComponent, withModifiers, watch } from \"vue\";\nimport type { PropType } from \"vue\";\nimport type { YxTableProProps, TableProColumn } from \"./type\";\nimport Sortable from \"sortablejs\";\nconst tableProRef = ref();\n/***渲染动态组件 */\nconst dynamicComponent = (column: TableProColumn, { rowData }: any) => {\n\tconst { renderType, event = {}, prop, label, config = {} } = column;\n\tif (!prop || !renderType) return null;\n\tconst Component = resolveComponent(\"el-\" + renderType) as any;\n\tconst { options = [], ...restConfig } = config;\n\t// 渲染子组件(如 select 的 options)\n\tconst renderChildComponent = () => {\n\t\tif (!options || options.length === 0) return null;\n\t\tif (renderType === \"select\") {\n\t\t\treturn options.map((item: any) => <el-option label={item.label} value={item.value} key={item.value} />);\n\t\t}\n\t\tif (renderType === \"radio-group\") {\n\t\t\treturn options.map((item: any) => (\n\t\t\t\t<el-radio label={item.value} key={item.value}>\n\t\t\t\t\t{item.label}\n\t\t\t\t</el-radio>\n\t\t\t));\n\t\t}\n\t\treturn null;\n\t};\n\t// 单独处理 cascader\n\tif (renderType === \"cascader\") {\n\t\treturn <el-cascader v-model={rowData[prop]} placeholder={`请选择${label}`} options={options} {...event} {...restConfig} />;\n\t}\n\t// 通用组件渲染\n\tconst isSelect = [\"select\", \"cascader\"].includes(renderType);\n\n\tconst modelValue = rowData[prop];\n\tconst updateModelValue = (val: any) => {\n\t\t//处理配置是数值类型\n\t\trowData[prop] = config?.type === \"number\" ? Number(val) : val;\n\t};\n\tconst component = (\n\t\t<Component\n\t\t\tmodelValue={modelValue}\n\t\t\tonUpdate:modelValue={updateModelValue}\n\t\t\tplaceholder={`请${isSelect ? \"选择\" : \"输入\"}${label}`}\n\t\t\t{...event}\n\t\t\t{...restConfig}\n\t\t>\n\t\t\t{renderChildComponent()}\n\t\t</Component>\n\t);\n\treturn component;\n\t// if (!isFormCell) return component;\n\t// //编辑表格\n\t// return renderForm(prop, $index, component);\n};\n/**远程加载下拉数据 */\nconst loadOptions = async (config: any) => {\n\tif (config?.options && config?.options.length === 0 && config?.loadOptions && typeof config?.loadOptions === \"function\") {\n\t\tconfig.options = await config?.loadOptions();\n\t}\n};\n\nconst YxTablePro = defineComponent({\n\tname: \"YxTablePro\",\n\tprops: {\n\t\ttableData: {\n\t\t\ttype: Array as PropType<YxTableProProps[\"tableData\"]>,\n\t\t\tdefault: () => []\n\t\t},\n\t\trowKey: {\n\t\t\ttype: String as PropType<YxTableProProps[\"rowKey\"]>,\n\t\t\tdefault: \"\",\n\t\t\trequired: false\n\t\t},\n\t\tcolumns: {\n\t\t\ttype: [Array, Function] as PropType<YxTableProProps[\"columns\"]>,\n\t\t\tdefault: () => []\n\t\t},\n\t\tpageInfo: {\n\t\t\ttype: Object as PropType<YxTableProProps[\"pageInfo\"]>,\n\t\t\tdefault: () => {},\n\t\t\trequired: false\n\t\t},\n\t\tsort: {\n\t\t\ttype: Boolean as PropType<YxTableProProps[\"sort\"]>,\n\t\t\tdefault: false,\n\t\t\trequired: false\n\t\t}\n\t},\n\temits: [\"operate-handle\", \"update-page\", \"sort-end\"],\n\tsetup(props: YxTableProProps, { emit, attrs, expose }) {\n\t\tconst columns = ref<any>([]);\n\t\tconst { tableData, rowKey, pageInfo } = props;\n\t\tonBeforeMount(() => {\n\t\t\tinitTable();\n\t\t});\n\t\tonMounted(() => {\n\t\t\tnextTick(() => {\n\t\t\t\tstartSort();\n\t\t\t});\n\t\t});\n\t\twatch(\n\t\t\t() => props.columns,\n\t\t\t() => {\n\t\t\t\tinitTable();\n\t\t\t}\n\t\t);\n\t\texpose({\n\t\t\ttableProRef\n\t\t});\n\t\t/**Columns转换 */\n\t\tconst initTable = async () => {\n\t\t\tconst columnsList = typeof props.columns === \"function\" ? await props.columns() : props.columns;\n\t\t\tcolumns.value = columnsList\n\t\t\t\t.filter(cell => !cell.show || cell.show(cell))\n\t\t\t\t.map((col: TableProColumn) => {\n\t\t\t\t\tconst { width, ...res } = col;\n\t\t\t\t\tif (col?.renderType && [\"select\", \"cascader\"].includes(col?.renderType) && col?.config?.loadOptions) {\n\t\t\t\t\t\tloadOptions(col.config);\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tflexGrow: width ? 0 : 1,\n\t\t\t\t\t\twidth: width ?? 100,\n\t\t\t\t\t\tcellRenderer: (scope: any) => getCellRenderer(col, scope),\n\t\t\t\t\t\theaderCellRenderer: col.headerRender ?? null,\n\t\t\t\t\t\ttitle: col.label,\n\t\t\t\t\t\tdataKey: col.prop,\n\t\t\t\t\t\tkey: col.prop,\n\t\t\t\t\t\t...res\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t};\n\t\t/**排序 */\n\t\tconst startSort = () => {\n\t\t\tif (!props.sort) return;\n\t\t\tconst sortDom = tableProRef.value?.$el?.querySelector(\".el-table-v2__body\").children[0]?.children[0];\n\t\t\tSortable.create(sortDom, {\n\t\t\t\tanimation: 200,\n\t\t\t\tsort: true,\n\t\t\t\thandle: props.sortHandle ? `.${props.sortHandle}` : null,\n\t\t\t\tonEnd: ({ oldIndex, newIndex }: { oldIndex: number; newIndex: number }) => {\n\t\t\t\t\temit(\"sort-end\", oldIndex, newIndex);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t\tconst getCellRenderer = (cell: TableProColumn, scope: any) => {\n\t\t\tif (cell?.renderType === \"operate\") return renderOperate(cell, scope);\n\t\t\t//处理动态渲染的组件,绑定动态row\n\t\t\tif (cell?.renderType && cell?.renderType !== \"operate\") {\n\t\t\t\treturn dynamicComponent(cell, scope);\n\t\t\t}\n\t\t\tif (cell?.render) return cell.render(scope, scope.rowIndex, cell);\n\t\t\tif (cell.type === \"index\") return <span class=\"w-full\">{scope.rowIndex + 1}</span>;\n\t\t\treturn scope.rowData[scope.column.dataKey];\n\t\t};\n\t\t/**渲染操作栏 */\n\t\tconst renderOperate = (cell: TableProColumn, { rowIndex, rowData }: any) => {\n\t\t\treturn (\n\t\t\t\t<div class={`flex justify-center items-center cursor-pointer gap-10 ${cell.config?.className ?? \"\"}`}>\n\t\t\t\t\t{cell.operate\n\t\t\t\t\t\t?.filter(op => !op.show || op.show(rowData))\n\t\t\t\t\t\t.map(op => {\n\t\t\t\t\t\t\tif (op?.render) return op.render(rowData, rowIndex);\n\t\t\t\t\t\t\tconst disabled = typeof op?.disabled === \"function\" ? op.disabled(rowData, rowIndex) : op?.disabled ?? false;\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tonClick={withModifiers(() => {\n\t\t\t\t\t\t\t\t\t\tif (!disabled) {\n\t\t\t\t\t\t\t\t\t\t\top?.onClick && op?.onClick(rowData, rowIndex);\n\t\t\t\t\t\t\t\t\t\t\temit(\"operate-handle\", op.key, rowData, rowIndex);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}, [\"stop\"])}\n\t\t\t\t\t\t\t\t\tclass={`table-handle whitespace-nowrap ${op?.className ?? \"\"} ${disabled ? \"table-handle-disabled\" : \"\"}`}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{op.label}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t);\n\t\t};\n\t\t//分页\n\t\tconst pagination = () => {\n\t\t\tif (!pageInfo || pageInfo.total === 0) return null;\n\t\t\tconst handleSizeChange = (e: number) => {\n\t\t\t\temit(\"update-page\", \"pageSize\", e);\n\t\t\t};\n\t\t\tconst handleCurrentChange = (e: number) => {\n\t\t\t\temit(\"update-page\", \"pageIndex\", e);\n\t\t\t};\n\t\t\treturn (\n\t\t\t\t<div class=\"pagination-wrap\">\n\t\t\t\t\t<el-pagination\n\t\t\t\t\t\tv-model:currentPage={pageInfo.pageIndex}\n\t\t\t\t\t\tv-model:pageSize={pageInfo.pageSize}\n\t\t\t\t\t\tsmall={false}\n\t\t\t\t\t\tdisabled={false}\n\t\t\t\t\t\tpage-sizes={[10, 20, 50, 100]}\n\t\t\t\t\t\tlayout={pageInfo?.layout ? pageInfo?.layout : \"total,sizes,prev, pager, next\"}\n\t\t\t\t\t\tbackground={false}\n\t\t\t\t\t\ttotal={pageInfo.total}\n\t\t\t\t\t\tonSizeChange={handleSizeChange}\n\t\t\t\t\t\tonCurrentChange={handleCurrentChange}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\t};\n\t\tconst getTableHeight = (height: number) => height - (!pageInfo || pageInfo.total === 0 ? 0 : 52);\n\t\treturn () => {\n\t\t\treturn (\n\t\t\t\t<el-auto-resizer>\n\t\t\t\t\t{{\n\t\t\t\t\t\tdefault: ({ width, height }: { width: number; height: number }) => (\n\t\t\t\t\t\t\t<div class=\"w-full h-full\">\n\t\t\t\t\t\t\t\t<el-table-v2\n\t\t\t\t\t\t\t\t\tborder\n\t\t\t\t\t\t\t\t\trow-key={rowKey}\n\t\t\t\t\t\t\t\t\twidth={width}\n\t\t\t\t\t\t\t\t\theight={getTableHeight(height)}\n\t\t\t\t\t\t\t\t\tcolumns={columns.value}\n\t\t\t\t\t\t\t\t\tdata={tableData}\n\t\t\t\t\t\t\t\t\t{...attrs}\n\t\t\t\t\t\t\t\t\tref={tableProRef}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{pagination()}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)\n\t\t\t\t\t}}\n\t\t\t\t</el-auto-resizer>\n\t\t\t);\n\t\t};\n\t}\n});\nexport default YxTablePro;\nexport * from \"./type\";\n","Array.prototype.handler = function (func) {\n\treturn func(this);\n};\n","/*\n * @Author: WangXin\n * @Date: 2023-12-11 17:02:53\n * @LastEditors: WangXin\n * @LastEditTime: 2023-12-18 09:50:11\n * @FilePath: \\yxUse\\packages\\components\\Toolbar\\src\\utils\\move.js\n * @Description:\n *\n * Copyright (c) 2023 by YuXing, All Rights Reserved.\n */\n/**\n * 设置元素可拖拽\n */\nexport function moveElement(movedEle) {\n\t/** 移动状态 */\n\tlet move = false;\n\t/** 鼠标与当前元素的相对位置X */\n\tlet deltaLeft = 0;\n\t/** 鼠标与当前元素的相对位置Y */\n\tlet deltaTop = 0;\n\n\tmovedEle.onmousedown = e => {\n\t\tdeltaLeft = e.clientX - movedEle.offsetLeft;\n\t\tdeltaTop = e.clientY - movedEle.offsetTop;\n\t\tmove = false;\n\t\tconst handleMove = e => {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\tmove = true;\n\t\t\tconst cx = e.clientX;\n\t\t\tconst cy = e.clientY;\n\t\t\tlet dx = cx - deltaLeft;\n\t\t\tlet dy = cy - deltaTop;\n\t\t\tif (dx < 0) dx = 0;\n\t\t\tif (dy < 0) dy = 0;\n\t\t\tif (dx > document.body.clientWidth - movedEle.clientWidth) dx = document.body.clientWidth - movedEle.clientWidth;\n\t\t\tif (dy > document.body.clientHeight - movedEle.clientHeight) dy = document.body.clientHeight - movedEle.clientHeight;\n\t\t\tmovedEle.style.left = dx + \"px\";\n\t\t\tmovedEle.style.top = dy + \"px\";\n\t\t};\n\t\tconst up = () => {\n\t\t\tmove = false;\n\t\t\tdocument.removeEventListener(\"mousemove\", handleMove);\n\t\t\tdocument.removeEventListener(\"mouseup\", up);\n\t\t};\n\t\tdocument.addEventListener(\"mousemove\", handleMove);\n\t\tdocument.addEventListener(\"mouseup\", up);\n\t};\n}","/*\n * @Author: WangXin\n * @Date: 2023-12-31 17:00:52\n * @LastEditors: WangXin\n * @LastEditTime: 2023-12-31 18:40:41\n * @FilePath: \\yxUse\\packages\\components\\Toolbar\\src\\index.config.ts\n * @Description:\n *\n * Copyright (c) 2023 by YuXing, All Rights Reserved.\n */\nimport { moveElement } from \"./utils/move\";\n\nexport enum PositionEnum {\n\t/** 左上 */\n\tLT = \"left-top\",\n\t/** 右上 */\n\tRT = \"right-top\",\n\t/** 左下 */\n\tLB = \"left-bottom\",\n\t/** 右下 */\n\tRB = \"right-bottom\"\n}\n\nexport interface DataType {\n\t/** 初始状态 */\n\tstatus: boolean;\n\t/** 容器Dom */\n\twrapDom?: HTMLElement | null;\n\t/** 面板dom */\n\tpanelDom?: HTMLElement | null;\n\t/** 悬浮球dom */\n\ttoolDom?: HTMLElement | null;\n\t/** 悬浮球位置属性 */\n\ttoolPos?: DOMRect;\n\t/** 面板位置属性 */\n\tpanelPos?: DOMRect;\n\tpanelWidth?: number;\n\tpanelHeight?: number;\n\tmousePoint?: { x: number; y: number };\n}\n\n/** 初始数据 */\nexport const initData: DataType = {\n\tstatus: false,\n\ttoolDom: null,\n\tpanelWidth: 200,\n\tpanelHeight: 200,\n\tmousePoint: { x: 0, y: 0 }\n};\n\n/**\n * 获取某个元素的dom\n */\nfunction getEleDom(selector: string): HTMLElement {\n\treturn document.querySelector(selector);\n}\n\nexport default {\n\tdata() {\n\t\treturn initData;\n\t},\n\tmounted() {\n\t\tthis.getAllDom();\n\t\tthis.move();\n\t},\n\tcomputed: {\n\t\tpanelWidthPX() {\n\t\t\treturn this.panelWidth + \"px\";\n\t\t},\n\t\tpanelHeightPX() {\n\t\t\treturn this.panelHeight + \"px\";\n\t\t}\n\t},\n\tmethods: {\n\t\t/** 获取所有的dom */\n\t\tgetAllDom() {\n\t\t\tthis.wrapDom = getEleDom(\"#toolbar-wrap\");\n\t\t\tthis.toolDom = getEleDom(\"#toolbar-wrap .tool\");\n\t\t\tthis.panelDom = getEleDom(\"#toolbar-wrap .panel\");\n\t\t},\n\n\t\t/** 加入移动元素方法 */\n\t\tmove() {\n\t\t\tmoveElement(this.toolDom);\n\t\t}\n\t}\n};\n","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createStaticVNode as _createStaticVNode } from \"vue\"\n\nconst _hoisted_1 = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"50\",\n height: \"50\",\n fill: \"none\",\n viewBox: \"0 0 16 16\"\n}\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _cache[0] || (_cache[0] = [\n _createStaticVNode(\"<g stroke=\\\"currentColor\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"1.333\\\" clip-path=\\\"url(#a)\\\"><path d=\\\"M8 14.666c1.986 0 .778-2.954 2-4.333 1.042-1.176 4.666-.638 4.666-2.333A6.667 6.667 0 1 0 8 14.666Z\\\"></path><path d=\\\"M9.333 5.667a1 1 0 1 0 0-2 1 1 0 0 0 0 2ZM5.333 7a1 1 0 1 0 0-2 1 1 0 0 0 0 2ZM5.667 11.333a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\\\"></path></g><defs><clipPath id=\\\"a\\\"><path fill=\\\"#fff\\\" d=\\\"M0 0h16v16H0z\\\"></path></clipPath></defs>\", 2)\n ])))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"50\",\n height: \"50\",\n fill: \"none\",\n viewBox: \"0 0 16 16\"\n}\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _cache[0] || (_cache[0] = [\n _createElementVNode(\"g\", {\n stroke: \"currentColor\",\n \"stroke-linecap\": \"round\",\n \"stroke-width\": \"1.333\"\n }, [\n _createElementVNode(\"path\", {\n \"stroke-linejoin\": \"round\",\n d: \"M13.333 11v3a.667.667 0 0 1-.666.667H10.5M13.334 5.333V2a.667.667 0 0 0-.667-.667H3.334A.667.667 0 0 0 2.667 2v12c0 .368.298.666.667.666h2\"\n }),\n _createElementVNode(\"path\", { d: \"M5.333 5.333H10M7.667 14.667l5.667-7M5.333 8H8\" })\n ], -1)\n ])))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"1.2em\",\n height: \"1.2em\",\n viewBox: \"0 0 24 24\"\n}\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _cache[0] || (_cache[0] = [\n _createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"m18.5 10 4.4 11h-2.155l-1.201-3h-4.09l-1.199 3h-2.154L16.5 10zM10 2v2h6v2h-1.968a18.2 18.2 0 0 1-3.62 6.301 15 15 0 0 0 2.336 1.707l-.751 1.878A17 17 0 0 1 9 13.725a16.7 16.7 0 0 1-6.201 3.548l-.536-1.929a14.7 14.7 0 0 0 5.327-3.042A18 18 0 0 1 4.767 8h2.24A16 16 0 0 0 9 10.877a16.2 16.2 0 0 0 2.91-4.876L2 6V4h6V2zm7.5 10.885L16.253 16h2.492z\"\n }, null, -1)\n ])))\n}\nexport default { render: render }","/*\n * @Author: WangXin\n * @Date: 2024-03-09 16:24:36\n * @LastEditors: WangXin\n * @LastEditTime: 2024-11-18 18:25:39\n * @FilePath: /yxuse/packages/translate/db.js\n * @Description:\n *\n * Copyright (c) 2024 by YuXing, All Rights Reserved.\n */\nimport localforage from \"localforage\";\nimport { auth } from \"@packages/api\";\nlocalforage.config({\n\tname: \"yxI18n\"\n});\nexport const dbSetItem = async (key, value) => {\n\tawait localforage.setItem(key, value);\n};\n\nexport const dbGetItem = async key => {\n\treturn await localforage.getItem(key);\n};\n\nexport const setLang = lang => {\n\tauth.changeSystemConfig(\"lang\", lang);\n};\n","/*\n * @Author: WangXin\n * @Date: 2024-02-23 09:50:04\n * @LastEditors: WangXin\n * @LastEditTime: 2024-06-06 14:51:15\n * @FilePath: /yxuse/packages/translate/utils.js\n * @Description:\n * Copyright (c) 2024 by YuXing, All Rights Reserved.\n */\nimport { getSystemConfig } from \"@packages/api/auth\";\nimport http from \"@packages/utils/http\";\nimport { MD5 } from \"./md5\";\nconst defaultApiUrl = {\n\tURL: \"/gateway/integrated-management/api/v1/translate/get\"\n};\nexport const config = {\n\tURL: getSystemConfig(\"translateApiUrl\") || defaultApiUrl.URL\n};\nexport const translate = async ({ words, systemFlag, toSource = \"en\", fromSource = \"zh\", translateApiUrl }) => {\n\ttry {\n\t\tconst { data } = await http.post(\n\t\t\ttranslateApiUrl ? translateApiUrl : config.URL,\n\t\t\t{\n\t\t\t\twords,\n\t\t\t\tsystemFlag,\n\t\t\t\ttoSource,\n\t\t\t\tfromSource\n\t\t\t},\n\t\t\t{ headers: { noLoading: true } }\n\t\t);\n\t\treturn data.dstMap || {};\n\t} catch (e) {\n\t\treturn null;\n\t}\n};\nfunction truncate(q) {\n\tvar len = q.length;\n\tif (len <= 20) return q;\n\treturn q.substring(0, 10) + len + q.substring(len - 10, len);\n}\n","/*\n * @Author: WangXin\n * @Date: 2024-11-18 17:41:58\n * @LastEditors: WangXin\n * @LastEditTime: 2024-11-18 18:35:59\n * @FilePath: /yxuse/packages/translate/api.js\n * @Description:\n *\n * Copyright (c) ${2024} by YuXing, All Rights Reserved.\n */\nimport { dbGetItem, dbSetItem } from \"./db\";\nimport { translate } from \"./utils\";\nimport { auth } from \"@packages/api\";\nconst sqlKey = `${auth.getSystemConfig(\"systemKey\")}_${window.lang}`;\nexport const whitelistApi = [\n\t\"/gateway/integrated-management/api/v1/theme/list\",\n\t\"/gateway/integrated-management/api/v1/translate/get\",\n\t...auth.getSystemConfig(\"whitelistTranslateApi\")\n];\nconst getYxI18nThesaurus = async () => {\n\tconst lang = await dbGetItem(\"lang\");\n\treturn await dbGetItem(`${auth.getSystemConfig(\"systemKey\")}_${lang}`);\n};\nexport const handleTranslation = async data => {\n\tlet result = JSON.stringify(data);\n\tconst chineseRegex = /[\\u4e00-\\u9fa5]+/g;\n\tconst matches = result.match(chineseRegex);\n\tconst yxI18nThesaurus = await getYxI18nThesaurus();\n\tlet waitWords = [];\n\tif (matches) {\n\t\tfor (const match of matches) {\n\t\t\t// 替换原始中文为翻译结果\n\t\t\tif (yxI18nThesaurus[match]) {\n\t\t\t\tresult = result.replace(new RegExp(match, \"g\"), yxI18nThesaurus[match]);\n\t\t\t} else {\n\t\t\t\tif (!waitWords.includes(match)) {\n\t\t\t\t\twaitWords.push(match);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (waitWords.length > 0) {\n\t\t\tconst i18nMap = await translatedText(waitWords);\n\t\t\twaitWords.forEach(word => {\n\t\t\t\tresult = result.replace(new RegExp(word, \"g\"), i18nMap[word]);\n\t\t\t});\n\t\t\tconst newYxI18nThesaurus = { ...yxI18nThesaurus, ...i18nMap };\n\t\t\tawait dbSetItem(sqlKey, newYxI18nThesaurus);\n\t\t\twaitWords = [];\n\t\t}\n\t}\n\n\treturn JSON.parse(result);\n};\n\nasync function translatedText(words) {\n\tconst result = await translate({ words, toSource: window.lang, systemFlag: auth.getSystemConfig(\"systemKey\") });\n\treturn result;\n}\n","import { dbSetItem, dbGetItem, setLang } from \"./db\";\nimport { translate } from \"./utils\";\nexport * from \"./api\";\nimport _ from \"lodash\";\nimport { BC } from \"@packages/index\";\nimport { BC_LANG_NAME } from \"@packages/config\";\nconst zhPattern = /[\\u4e00-\\u9fa5]+/; // 匹配中文字符的正则表达式\nlet TASK_CONTROL; // 更新任务队列控制\n// 排除svg标签\nconst excludeTag = [\"svg\", \"g\", \"path\", \"polyline\", \"circle\"];\nconst config = {\n\tchildList: true,\n\tsubtree: true,\n\tcharacterData: true,\n\tattributes: true,\n\tattributeFilter: [\"readonly\", \"placeholder\", \"aria-expanded\"]\n};\nlet observer; //观察者\nclass Translate {\n\tprivate from: string;\n\tpublic to: string;\n\tpublic yxI18nThesaurus: object;\n\tpublic systemKey: string;\n\tprivate asyncThesaurusList: Array<string>; //需要同步的词库列表\n\tprivate dbKey: string;\n\tprivate unknownWords: Array<string>;\n\tprivate unknownWordsNode: any;\n\tprivate rootDocument: any;\n\tprivate unknownWordsInputNode: any;\n\tpublic translateApiUrl: any;\n\tprivate maxWordsLength: number;\n\tconstructor() {\n\t\tthis.from = \"zh\"; //源语言\n\t\tthis.to = \"en\"; //目标语言\n\t\tthis.yxI18nThesaurus = {}; //当前语言的词库\n\t\tthis.systemKey = \"station-control\"; //系统标识\n\t\tthis.dbKey = \"\";\n\t\tthis.initTranslate = this.initTranslate.bind(this);\n\t\tthis.unknownWords = []; //词库未有的词汇\n\t\tthis.unknownWordsNode = new Map(); //未翻译的node节点\n\t\tthis.unknownWordsInputNode = new Map(); //未翻译的input节点\n\t\tthis.rootDocument = null;\n\t\tthis.translateApiUrl = null;\n\t\tthis.maxWordsLength = 100;\n\t}\n\tasync initTranslate({\n\t\tto,\n\t\tsystemKey,\n\t\ttranslateApiUrl,\n\t\tasyncThesaurusList\n\t}: {\n\t\tto: any;\n\t\tsystemKey: any;\n\t\ttranslateApiUrl?: any;\n\t}) {\n\t\t//目标语言为中文时直接刷新页面\n\t\tif (to === \"zh\") return;\n\t\tif (to === \"cht\") return this.handleTraditionalChinese();\n\t\tif (translateApiUrl) {\n\t\t\tthis.translateApiUrl = translateApiUrl;\n\t\t}\n\t\t//初始化配置\n\t\tconsole.log(\"开始初始化\");\n\t\tawait this.initConfig({ to, systemKey, asyncThesaurusList });\n\t\tconsole.log(\"初始化配置已完成\");\n\t\t//开启监听\n\t\tthis.observerRouteChange();\n\t\t//监听title变化\n\t\t// this.observerTitleChange();\n\t}\n\t// 繁体字处理\n\thandleTraditionalChinese() {\n\t\tdocument.body.style.fontFamily = \"PingFang SC\";\n\t\tdocument.body.style[\"font-variant-east-asian\"] = \"traditional\";\n\t\tdocument.documentElement.lang = \"zh-tw\";\n\t}\n\t//监听页面路由变化,说明发生了页面切换,再次进行全量翻译\n\tobserverRouteChange() {\n\t\tobserver = new MutationObserver(mutations => {\n\t\t\tif (mutations.length > 0) {\n\t\t\t\tmutations.forEach((mutation, index) => {\n\t\t\t\t\tswitch (mutation.type) {\n\t\t\t\t\t\tcase \"characterData\":\n\t\t\t\t\t\t\tthis.handleTextNodes(mutation.target);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"childList\":\n\t\t\t\t\t\t\t//说明当前更新的dom为新增节点或者删除节点\n\t\t\t\t\t\t\tthis.handleChildListMutation(mutation);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"attributes\":\n\t\t\t\t\t\t\tif (mutation.attributeName === \"placeholder\" && zhPattern.test(mutation.target.placeholder)) {\n\t\t\t\t\t\t\t\tthis.replaceInputValue(mutation.target, \"placeholder\");\n\t\t\t\t\t\t\t} else if (mutation.attributeName === \"readonly\") {\n\t\t\t\t\t\t\t\tthis.replaceInputValue(mutation.target, \"value\");\n\t\t\t\t\t\t\t\tthis.replaceInputValue(mutation.target, \"placeholder\");\n\t\t\t\t\t\t\t} else if (mutation.attributeName === \"aria-expanded\" && mutation.target.ariaExpanded === \"false\") {\n\t\t\t\t\t\t\t\t//处理el-cascader\n\t\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\t\tthis.replaceInputValue(mutation.target, \"value\");\n\t\t\t\t\t\t\t\t}, 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault: //考虑性能问题,暂时不考虑监听class变化\n\t\t\t\t\t\t\t// if (mutation.attributeName === 'class') {\n\t\t\t\t\t\t\t// if (mutation.target.className.includes('el-input')) {\n\t\t\t\t\t\t\t// hasCharacterDataMutation = true;\n\t\t\t\t\t\t\t// this.traversingNode(mutation.target);\n\t\t\t\t\t\t\t// } else {\n\t\t\t\t\t\t\t// console.log('下拉框选中值', mutation);\n\t\t\t\t\t\t\t// }\n\t\t\t\t\t\t\t// }\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t// 观察配置\n\t\t// 开始观察根元素,通常是#app或body\n\t\tobserver.observe(this.rootDocument, config);\n\t\t// 获取未处理的 DOM 变化记录\n\t\tconst unprocessedRecords = observer.takeRecords();\n\t\t// 手动处理未处理的记录\n\t\tif (unprocessedRecords.length > 0) {\n\t\t\tconsole.log(\"DOM变化检测到,未处理的Dom\", unprocessedRecords);\n\t\t\tunprocessedRecords.forEach(record => {\n\t\t\t\t// 处理未处理的记录\n\t\t\t});\n\t\t}\n\t}\n\t//处理纯文本节点\n\thandleTextNodes(node) {\n\t\tif (zhPattern.test(node?.data) || zhPattern.test(node?.nodeValue)) {\n\t\t\t//此处不使用replaceValue的原因是 文本节点在词库中不存在时重新赋值相同的值,会触发监听\n\t\t\tconst nodeValue = node.nodeValue.replace(/\\s/g, \"\");\n\t\t\tif (this.yxI18nThesaurus[nodeValue]) {\n\t\t\t\tnode.nodeValue = this.yxI18nThesaurus[nodeValue];\n\t\t\t} else {\n\t\t\t\tif (!this.unknownWords.includes(nodeValue) && nodeValue.length <= this.maxWordsLength) {\n\t\t\t\t\tthis.unknownWords.push(nodeValue);\n\t\t\t\t}\n\t\t\t\tthis.collectNeedsTranslateNode(node, nodeValue);\n\t\t\t}\n\t\t}\n\t}\n\t//处理监听节点是childList的情况,动态处理各种组件的情况\n\thandleChildListMutation(mutation) {\n\t\t//节点替换\n\t\tif (mutation.addedNodes.length > 0 && mutation.removedNodes.length > 0) {\n\t\t\treturn this.addedNode(mutation);\n\t\t}\n\t\t//删除节点不做处理\n\t\tif (mutation.removedNodes.length > 0 && mutation.removedNodes[0].id !== \"nprogress\") return;\n\t\t//处理新增节点\n\t\tthis.addedNode(mutation);\n\t}\n\t//节点新增\n\taddedNode(mutation) {\n\t\tif (mutation.addedNodes.length > 0) {\n\t\t\tconst tagName = mutation.target.tagName.toLowerCase();\n\t\t\tif (excludeTag.includes(tagName)) return;\n\t\t\tif (excludeTag.includes(mutation.addedNodes[0]?.tagName?.toLowerCase())) return;\n\t\t\tconst className = mutation.addedNodes[0]?.className;\n\n\t\t\tconst parentNodeValue = mutation.target.nodeValue; //当前节点的文本\n\t\t\tif (className && className !== \"\") {\n\t\t\t\t//messageBox\n\t\t\t\tif (className.includes(\"v-modal\")) {\n\t\t\t\t\t//如果当前新增的节点是遮罩层,则去替换他的兄弟节点\n\t\t\t\t\tthis.throttleTraversingNode(mutation.previousSibling);\n\t\t\t\t\t// this.startMicroTaskQueue();\n\t\t\t\t}\n\t\t\t\t//tooltip组件\n\t\t\t\telse if (className.includes(\"tooltip\")) {\n\t\t\t\t\tconsole.log(\"监听到了tooltip发生了更新!!!\", mutation.addedNodes[0]);\n\n\t\t\t\t\t// this.replaceValue(\"innerText\", mutation.addedNodes[0]);\n\t\t\t\t\tthis.throttleTraversingNode(mutation.addedNodes[0]);\n\t\t\t\t} else if (className.includes(\"message\")) {\n\t\t\t\t\tconsole.log(\"message组件更新!!\");\n\t\t\t\t\tthis.throttleTraversingNode(mutation.addedNodes[0]);\n\t\t\t\t\t// this.startMicroTaskQueue();\n\t\t\t\t}\n\t\t\t\t//如果有loading、message dom,则直接翻译兄弟节点 [\"message\",\"loading\"]\n\t\t\t\telse if (className.includes(\"loading\")) {\n\t\t\t\t\tthis.throttleTraversingNode(mutation.addedNodes[0]);\n\t\t\t\t}\n\t\t\t\t//如果当前元素中有nodeValue,就进行替换\n\t\t\t\telse if (parentNodeValue) {\n\t\t\t\t\tthis.replaceValue(\"nodeValue\", mutation.target);\n\t\t\t\t}\n\t\t\t\t//当前元素没有nodeValue,\n\t\t\t\telse if (zhPattern.test(mutation.addedNodes[0].innerText)) {\n\t\t\t\t\tthis.throttleTraversingNode(mutation.addedNodes[0]);\n\t\t\t\t\t// this.startMicroTaskQueue();\n\t\t\t\t} else if (className.includes(\"input\")) {\n\t\t\t\t\tthis.throttleTraversingNode(mutation.addedNodes[0]);\n\t\t\t\t}\n\t\t\t\t//新增元素,过滤掉icon的显示隐藏,排除svg标签\n\t\t\t\t// else if (!className.includes('suffix')) {\n\t\t\t\t// this.throttleTraversingNode(mutation.target);\n\t\t\t\t// this.startMicroTaskQueue();\n\t\t\t\t// }\n\t\t\t\t// else {\n\t\t\t\t// console.log('其他新增情况');\n\t\t\t\t// this.throttleTraversingNode(mutation.target);\n\t\t\t\t// this.startMicroTaskQueue();\n\t\t\t\t// }\n\t\t\t} else {\n\t\t\t\tconst node = mutation.addedNodes[0];\n\t\t\t\tif (node && node.nodeType === Node.TEXT_NODE && zhPattern.test(node.nodeValue)) {\n\t\t\t\t\tthis.replaceValue(\"nodeValue\", node);\n\t\t\t\t\t// this.startMicroTaskQueue();\n\t\t\t\t} else {\n\t\t\t\t\tthis.throttleTraversingNode(node);\n\t\t\t\t\t// this.startMicroTaskQueue();\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t//替换title\n\t\t\tconsole.log(\"其他情况\", mutation);\n\t\t\tthis.throttleTraversingNode(mutation.target);\n\t\t\tthis.replaceDocumentTitle();\n\t\t}\n\t\t// this.startMicroTaskQueue();\n\t}\n\t//处理独立元素\n\t//每当页面发生更新时,开启微任务队列\n\tstartMicroTaskQueue() {\n\t\t// 创建一个微任务队列\n\t\tTASK_CONTROL && clearTimeout(TASK_CONTROL);\n\t\tTASK_CONTROL = setTimeout(() => {\n\t\t\tconsole.log(\"更新结束,开始清空未翻译dom队列\");\n\t\t\tconsole.log(\"需要被翻译的词\", this.unknownWords);\n\t\t\t//替换页面title\n\t\t\tthis.replaceDocumentTitle();\n\t\t\tif (this.unknownWords.length > 0) {\n\t\t\t\tconsole.log(\"DOM更新结束,未替换的词汇有:\", this.unknownWords.length + \"个\");\n\t\t\t\t//节流处理\n\t\t\t\tconst translateUnknownWords = _.throttle(\n\t\t\t\t\t() => this.translateUnknownWords(this.unknownWords, this.unknownWordsNode.size),\n\t\t\t\t\t1000,\n\t\t\t\t\t{\n\t\t\t\t\t\tleading: true\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\ttranslateUnknownWords();\n\t\t\t} else {\n\t\t\t\t//检查是否还有未翻译的dom\n\t\t\t\t//处理input\n\t\t\t\tconsole.log(this.unknownWordsInputNode);\n\t\t\t\tif (this.unknownWordsInputNode.size > 0) {\n\t\t\t\t\tconsole.log(\"处理input节点\", this.unknownWordsInputNode);\n\t\t\t\t\tfor (const node of this.unknownWordsInputNode.values()) {\n\t\t\t\t\t\tthis.replaceInputValue(node, \"placeholder\", true);\n\t\t\t\t\t\tif (node.value !== \"\") {\n\t\t\t\t\t\t\tthis.replaceInputValue(node, \"value\", true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.unknownWordsInputNode.clear();\n\t\t\t\t}\n\t\t\t\tthis.replaceUnknownWordsNodeList(true);\n\t\t\t}\n\t\t}, 500);\n\t}\n\t//节流处理\n\tthrottleTraversingNode(originNode) {\n\t\tconst traversingNode = _.throttle(() => this.traversingNode(originNode), 500, {\n\t\t\tleading: true\n\t\t});\n\t\ttraversingNode();\n\t}\n\t//遍历节点\n\ttraversingNode(originNode) {\n\t\tif (!originNode) return;\n\t\tconst processNode = node => this.replaceTextByNode(node);\n\t\tconst walker = document.createTreeWalker(originNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT, {\n\t\t\tacceptNode(node) {\n\t\t\t\tif (node.tagName && node.tagName.toLowerCase() === \"svg\") return NodeFilter.FILTER_REJECT;\n\t\t\t\tprocessNode(node);\n\t\t\t\treturn NodeFilter.FILTER_SKIP;\n\t\t\t}\n\t\t});\n\t\tlet node;\n\t\twhile ((node = walker.nextNode())) {\n\t\t\tprocessNode(node);\n\t\t}\n\t}\n\n\t//根据node类型处理node text\n\treplaceTextByNode(node, isTranslate = false) {\n\t\t//记录当前翻译的时间\n\t\tif (node.title && zhPattern.test(node.title)) {\n\t\t\tthis.replaceValue(\"title\", node);\n\t\t}\n\t\tif (node.nodeType === Node.ELEMENT_NODE) {\n\t\t\t//input\n\t\t\tif ([\"textarea\", \"input\"].includes(node.tagName.toLowerCase())) {\n\t\t\t\tif (zhPattern.test(node.placeholder)) {\n\t\t\t\t\tthis.replaceInputValue(node, \"placeholder\");\n\t\t\t\t}\n\t\t\t\t//如果input节点有value值,则也进行替换;\n\t\t\t\tif (node.value && zhPattern.test(node.value)) {\n\t\t\t\t\tthis.replaceInputValue(node, \"value\");\n\t\t\t\t}\n\t\t\t\t//如果input节点有value值,且是readonly的,直接进行收集\n\t\t\t\tif (node.value !== \"\" && node.readOnly) {\n\t\t\t\t\tthis.collectNeedsTranslateInputNode(node);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (node.nodeType === Node.TEXT_NODE && (zhPattern.test(node.nodeValue) || zhPattern.test(node.data))) {\n\t\t\tthis.replaceValue(\"nodeValue\", node, isTranslate);\n\t\t}\n\t}\n\treplaceInputValue(inputNode, key, isTranslate = false) {\n\t\tconst value = inputNode[key];\n\t\t// console.log(inputNode, value);\n\t\tif (!zhPattern.test(value)) return;\n\t\t//如果是级联选择器,进行替换翻译\n\t\tif (this.yxI18nThesaurus[value]) {\n\t\t\tinputNode[key] = this.yxI18nThesaurus[value];\n\t\t} else {\n\t\t\tif (!this.unknownWords.includes(value) && value.length <= this.maxWordsLength) {\n\t\t\t\tthis.unknownWords.push(value);\n\t\t\t\tconsole.log(\"未找到匹配项:\", value, this.yxI18nThesaurus);\n\t\t\t}\n\t\t\tif (!isTranslate) {\n\t\t\t\tthis.collectNeedsTranslateInputNode(inputNode);\n\t\t\t}\n\t\t}\n\t}\n\t//收集input节点\n\tcollectNeedsTranslateInputNode(inputNode) {\n\t\tconst key = Math.random().toString(16).split(\".\")[1];\n\t\tif (!this.unknownWordsInputNode.has(key)) {\n\t\t\tthis.unknownWordsInputNode.set(key, inputNode);\n\t\t\tthis.startMicroTaskQueue(); //有新node被收集 就重开启宏任务500ms\n\t\t}\n\t}\n\treplaceDocumentTitle() {\n\t\tconst title = document.title;\n\t\tif (zhPattern.test(title)) {\n\t\t\tif (this.yxI18nThesaurus[title]) {\n\t\t\t\tdocument.title = this.yxI18nThesaurus[title];\n\t\t\t}\n\t\t}\n\t}\n\tcollectNeedsTranslateNode(node) {\n\t\tconst key = Math.random().toString(16).split(\".\")[1];\n\t\tif (!this.unknownWordsNode.has(key)) {\n\t\t\tthis.unknownWordsNode.set(key, node);\n\t\t\tthis.startMicroTaskQueue(); //有新node被收集 就重开启宏任务500ms\n\t\t}\n\t}\n\treplaceValue(key, node, isTranslate = false) {\n\t\t//过滤空字符串;\n\t\tif (node[key] === \"\") return;\n\t\tconst nodeValue = node[key].replace(/\\s/g, \"\");\n\t\tif (this.yxI18nThesaurus[nodeValue]) {\n\t\t\tnode[key] = this.yxI18nThesaurus[nodeValue];\n\t\t} else {\n\t\t\tif (!this.unknownWords.includes(nodeValue) && nodeValue.length <= this.maxWordsLength) {\n\t\t\t\tthis.unknownWords.push(nodeValue);\n\t\t\t\tconsole.log(\"未找到匹配项:\");\n\t\t\t}\n\t\t\t//收集未匹配到的node节点,待翻译后再次翻译\n\t\t\t//非翻译替换时再进行收集\n\t\t\tif (!isTranslate) {\n\t\t\t\tthis.collectNeedsTranslateNode(node);\n\t\t\t} else {\n\t\t\t\tconsole.log(\"异步处理时被新收集进去的值\", nodeValue);\n\t\t\t\tthis.startMicroTaskQueue(); //有新node被收集 就重开启宏任务500ms\n\t\t\t}\n\t\t}\n\t}\n\t//等待本次同步后,收集未翻译的字符,去后端进行翻译\n\tasync translateUnknownWords(unknownWords, size) {\n\t\t//过滤空字符串\n\t\tif (unknownWords.length == 0) return;\n\n\t\tconst unknownWordsFilter = unknownWords.filter(item => (item + \"\").trim() !== \"\");\n\t\tif (unknownWordsFilter.length === 0) return;\n\t\tconst words = Array.from(new Set(unknownWordsFilter));\n\t\tconsole.log(\"开始远程翻译\", words.length + \"个\");\n\t\tconsole.log(\"需要替换的dom有\", size);\n\t\tconst result = await translate({\n\t\t\twords,\n\t\t\ttoSource: this.to,\n\t\t\tsystemFlag: this.systemKey,\n\t\t\ttranslateApiUrl: this.translateApiUrl\n\t\t});\n\t\t//判定为参数错误,避免进入堆栈溢出,\n\t\tif (!result || Object.keys(result).length === 0) {\n\t\t\tthis.unknownWords = [];\n\t\t\treturn;\n\t\t}\n\t\tthis.yxI18nThesaurus = { ...this.yxI18nThesaurus, ...result };\n\t\t//同步词库到本地\n\t\tawait dbSetItem(this.dbKey, this.yxI18nThesaurus);\n\t\tconsole.log(\"远程翻译结束!!!\");\n\t\t//清空未翻译的词\n\t\tthis.unknownWords = [];\n\t\t//处理文本\n\t\tthis.replaceUnknownWordsNodeList();\n\t\t//处理上一轮未被替换的dom\n\t\tconsole.log(\"更新翻译完成!!!\");\n\t\tthis.startMicroTaskQueue();\n\t\t//清空收集的dom\n\t}\n\treplaceUnknownWordsNodeList(isClear = false) {\n\t\tif (this.unknownWordsNode.size > 0) {\n\t\t\tfor (const dom of this.unknownWordsNode.values()) {\n\t\t\t\t//true是翻译后进行替换dom,防止在替换时,有新的dom被收集,此时词库中还未有翻译,会陷入收集翻译的堆栈溢出\n\t\t\t\tif (zhPattern.test(dom.nodeValue)) {\n\t\t\t\t\tthis.replaceTextByNode(dom, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\tisClear && this.unknownWordsNode.clear();\n\t\t}\n\t}\n\t//初始化配置\n\tasync initConfig({ to, systemKey, asyncThesaurusList }) {\n\t\tthis.to = to || this.to;\n\t\tthis.systemKey = systemKey || this.systemKey;\n\t\tthis.dbKey = `${this.systemKey}_${this.to}`;\n\t\t//给html写入指定语言类名,用于样式适配\n\t\tdocument.querySelector(\"html\").classList.add(to);\n\t\tthis.rootDocument = document.querySelector(\"body\"); //根节点\n\t\t// 设置当前的语言模式,并写入缓存\n\t\tconst lang = await dbGetItem(\"lang\");\n\t\tlang !== to ? await dbSetItem(\"lang\", to) : \"\";\n\t\t//检查缓存中是否有当前系统的词库,没有则去创建,有则同步到对象中\n\t\tconsole.log(\"开始同步词库!!!\");\n\t\tconst db = await dbGetItem(this.dbKey);\n\t\tconst asyncThesaurus = async () => {\n\t\t\tconst result = await translate({\n\t\t\t\twords: [],\n\t\t\t\ttoSource: this.to,\n\t\t\t\tsystemFlag: this.systemKey,\n\t\t\t\ttranslateApiUrl: this.translateApiUrl\n\t\t\t});\n\t\t\t//同步词库\n\t\t\tthis.yxI18nThesaurus = result;\n\t\t\tawait dbSetItem(this.dbKey, this.yxI18nThesaurus);\n\t\t\tconsole.log(\"同步词库已完成!!!\");\n\t\t};\n\t\tif (!db) {\n\t\t\tawait dbSetItem(this.dbKey, {});\n\t\t\tasyncThesaurus();\n\t\t} else {\n\t\t\ttry {\n\t\t\t\tasyncThesaurus();\n\t\t\t\t// this.yxI18nThesaurus = db;\n\t\t\t} catch (error) {\n\t\t\t\tthis.yxI18nThesaurus = db;\n\t\t\t}\n\t\t}\n\n\t\tif (asyncThesaurusList && asyncThesaurusList.length > 0) {\n\t\t\tfor (const systemKey of asyncThesaurusList) {\n\t\t\t\tconst result = await translate({\n\t\t\t\t\twords: [],\n\t\t\t\t\ttoSource: this.to,\n\t\t\t\t\tsystemFlag: systemKey,\n\t\t\t\t\ttranslateApiUrl: this.translateApiUrl\n\t\t\t\t});\n\t\t\t\tconst dbKey = `${systemKey}_${this.to}`;\n\t\t\t\tawait dbSetItem(dbKey, result);\n\t\t\t}\n\t\t}\n\t}\n\tgetYxI18nThesaurus() {\n\t\treturn this.yxI18nThesaurus;\n\t}\n}\nconst yxTranslate = new Translate();\nexport const initTranslate = yxTranslate.initTranslate;\nexport const changeLang = async to => {\n\tconsole.log(\"切换语言\", to);\n\tsetLang(to);\n\t//切换语言\n\tconst lang = await dbGetItem(\"lang\");\n\tif (lang !== to) {\n\t\tawait dbSetItem(\"lang\", to);\n\t\tnew BC(BC_LANG_NAME).postMessage(JSON.stringify({ type: \"lang\" }));\n\t\tlocation.reload();\n\t}\n};\n\nexport const getLang = async () => {\n\treturn (await dbGetItem(\"lang\")) || \"\";\n};\n//在词库中查找某个词语的翻译\nexport const getWordByYxI18nThesaurus = word => {\n\tconst i18nThesaurus = yxTranslate.getYxI18nThesaurus();\n\treturn i18nThesaurus[word] || word;\n};\n\n//在词库中通过翻译过的词语查找原始的词语\nexport const getZhWordByYxI18nThesaurus = word => {\n\tconst i18nThesaurus = yxTranslate.getYxI18nThesaurus();\n\treturn Object.keys(i18nThesaurus).find(key => i18nThesaurus[key] === word) || word;\n};\n\n//加载自定义词库\nexport const loadCustomThesaurus = async (systemKey: string, lang: string) => {\n\tif (lang === \"zh\") return {};\n\ttry {\n\t\tconst thesaurus = await translate({\n\t\t\twords: [],\n\t\t\ttoSource: lang,\n\t\t\tsystemFlag: systemKey,\n\t\t\ttranslateApiUrl: yxTranslate.translateApiUrl\n\t\t});\n\n\t\tawait dbSetItem(`${systemKey}_${lang}`, thesaurus);\n\t\treturn thesaurus;\n\t} catch (error) {\n\t\treturn dbGetItem(`${systemKey}_${lang}`);\n\t}\n};\n","<!--\n * @Author: WangXin\n * @Date: 2024-01-01 11:17:12\n * @LastEditors: WangXin\n * @LastEditTime: 2024-01-01 13:47:00\n * @FilePath: \\yxUse\\packages\\components\\Toolbar\\src\\components\\Badge.vue\n * @Description: \n * \n * Copyright (c) 2024 by YuXing, All Rights Reserved. \n-->\n<script>\nexport default {\n\tprops: {\n\t\tvalue: {\n\t\t\ttypeof: Number\n\t\t}\n\t}\n};\n</script>\n<template>\n\t<div class=\"badge-container\" v-show=\"value > 0\">\n\t\t<sup>{{ value }}</sup>\n\t</div>\n</template>\n<style scoped lang=\"scss\">\n.badge-container {\n\tdisplay: inline-flex;\n\tjustify-content: center;\n\talign-items: center;\n\theight: 18px;\n\tborder-radius: 10px;\n\twidth: fit-content;\n\tposition: absolute;\n\ttop: 0;\n\tright: 18px;\n\tbackground: var(--color-error-100);\n\tcolor: #fff;\n\ttransform: translateY(-50%) translate(100%);\n\tpadding: 0 6px;\n}\n</style>\n","<template>\n\t<!-- 外层容器 -->\n\t<transition name=\"zoom\" mode=\"out-in\">\n\t\t<div v-show=\"showTool\" class=\"toolbar-container\" :class=\"showTool ? 'zoom-in' : 'zoom-out '\">\n\t\t\t<div\n\t\t\t\t:style=\"{ 'grid-template-columns': columns, 'grid-template-rows': rows }\"\n\t\t\t\tclass=\"toolbar-wrap\"\n\t\t\t\tv-if=\"!curComponent.name\"\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclass=\"flex justify-center items-center\"\n\t\t\t\t\tv-for=\"item in configList\"\n\t\t\t\t\t@click=\"configHandle(item)\"\n\t\t\t\t\t:style=\"{ 'grid-area': item['grid-area'] }\"\n\t\t\t\t>\n\t\t\t\t\t<div :title=\"item.label\" class=\"flex flex-col justify-center items-center\">\n\t\t\t\t\t\t<div class=\"tool-icon relative flex justify-center items-center\">\n\t\t\t\t\t\t\t<i\n\t\t\t\t\t\t\t\tclass=\"yx-icon\"\n\t\t\t\t\t\t\t\tstyle=\"color: var(--color-main-100)\"\n\t\t\t\t\t\t\t\tcolor=\"var(--color-main-100) \n \"\n\t\t\t\t\t\t\t\tsize=\"24\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<component :is=\"item.icon\" />\n\t\t\t\t\t\t\t</i>\n\t\t\t\t\t\t\t<Badge :value=\"badgeValue\" v-if=\"item.isShowBadge\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<span class=\"mt-10 text-center\">{{ item.label }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div v-if=\"curComponent.name\" class=\"w-full h-full\">\n\t\t\t\t<div class=\"toolbar-wrap-component\" v-if=\"curComponent.name === 'theme'\">\n\t\t\t\t\t<div class=\"flex flex-col toolbar-center items-center\" @click=\"curComponent = {}\" title=\"返回\">\n\t\t\t\t\t\t<i class=\"yx-icon\" style=\"color: var(--color-main-100)\" color=\"var(--color-main-100)\" size=\"30\">\n\t\t\t\t\t\t\t<component :is=\"curComponent.icon\" />\n\t\t\t\t\t\t</i>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div\n\t\t\t\t\t\t:style=\"[{ background: item.themeColor, boxShadow: `0px 4px 7px 0px ${item.themeColor}` }, getPosition(index)]\"\n\t\t\t\t\t\t:title=\"item.name\"\n\t\t\t\t\t\tclass=\"theme\"\n\t\t\t\t\t\t:class=\"curTheme === item.id ? 'select' : ''\"\n\t\t\t\t\t\tv-for=\"(item, index) in curComponent.data\"\n\t\t\t\t\t\t@click=\"chooseTheme(item)\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div v-else-if=\"curComponent.name === 'lang'\" class=\"box-border w-full h-full py-10 overflow-y-auto\">\n\t\t\t\t\t<div @click=\"curComponent = {}\" class=\"px-10 cursor-pointer\">返回</div>\n\t\t\t\t\t<div\n\t\t\t\t\t\t@click=\"changeLang(item.lang)\"\n\t\t\t\t\t\t:title=\"item.name\"\n\t\t\t\t\t\tclass=\"px-10 cursor-pointer mt-10 whitespace-nowrap truncate\"\n\t\t\t\t\t\tv-for=\"item in langList\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ item.name }}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</transition>\n</template>\n<script>\nimport theme from \"../svg/theme.svg\";\nimport issue from \"../svg/issue.svg\";\nimport lang from \"../svg/lang.svg\";\nimport { changeTheme, getCurTheme } from \"@packages/theme\";\nimport { changeLang } from \"@packages/translate\";\nimport Badge from \"./Badge.vue\";\nexport default {\n\tcomponents: { theme, issue, Badge, lang },\n\tprops: {\n\t\tshowTool: {\n\t\t\ttypeof: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tbadgeValue: {\n\t\t\ttypeof: Number\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tcolumns: \"repeat(2, 1fr)\",\n\t\t\trows: window.isRenderLang ? \"repeat(2, 1fr)\" : \"lfr\",\n\t\t\tconfig: [\n\t\t\t\t{\n\t\t\t\t\tname: \"theme\",\n\t\t\t\t\tlabel: \"主题切换\",\n\t\t\t\t\ticon: \"theme\",\n\t\t\t\t\ticon_active: \"https://yx-picture.obs.cn-north-4.myhuaweicloud.com/ttc/bucket/toolbar-theme-back.svg\",\n\t\t\t\t\tposition: [50, 0],\n\t\t\t\t\tdesc: \"跳转到问题反馈页面\",\n\t\t\t\t\taction: \"hiddenTool\",\n\t\t\t\t\tcomponent: \"Theme\",\n\t\t\t\t\tdata: window.theme,\n\t\t\t\t\t\"grid-area\": window.isRenderLang ? \"1 / 1 / 2 / 3\" : \"1 / 1 / 2 / 2\",\n\t\t\t\t\tshow: window.theme.length > 0\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"lang\",\n\t\t\t\t\tlabel: \"语言切换\",\n\t\t\t\t\ticon: \"lang\",\n\t\t\t\t\tposition: [100, 0],\n\t\t\t\t\tdesc: \"语言切换\",\n\t\t\t\t\tcomponent: \"Lang\",\n\t\t\t\t\tisShowBadge: true,\n\t\t\t\t\t\"grid-area\": \"2 / 1 / 3 / 2\",\n\t\t\t\t\tshow: window.isRenderLang ? window.isRenderLang : false\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"issue\",\n\t\t\t\t\tlabel: \"问题反馈\",\n\t\t\t\t\ticon: \"issue\",\n\t\t\t\t\tposition: [100, 0],\n\t\t\t\t\tdesc: \"跳转到问题反馈页面\",\n\t\t\t\t\tcomponent: \"Issue\",\n\t\t\t\t\tisShowBadge: true,\n\t\t\t\t\t\"grid-area\": window.isRenderLang ? \"2 / 2 / 3 / 3\" : \"1 / 2 / 2 / 3\",\n\t\t\t\t\tshow: window.isRenderIssue ? window.isRenderIssue : false\n\t\t\t\t}\n\t\t\t],\n\t\t\tcurComponent: {},\n\t\t\tcurTheme: getCurTheme(),\n\t\t\tlangList: [\n\t\t\t\t{ name: \"中文-Chinese\", lang: \"zh\" },\n\t\t\t\t{ name: \"中文(香港)-Chinese(Hong Kong)\", lang: \"cht\" },\n\t\t\t\t{ name: \"英语-English\", lang: \"en\" }\n\t\t\t]\n\t\t};\n\t},\n\tcomputed: {\n\t\tconfigList() {\n\t\t\treturn this.config.filter(item => item.show);\n\t\t}\n\t},\n\twatch: {\n\t\tshowTool(val) {\n\t\t\tif (!val) {\n\t\t\t\tthis.curComponent = {};\n\t\t\t} else {\n\t\t\t\tthis.curTheme = this.getCurTheme();\n\t\t\t}\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.curTheme = this.getCurTheme();\n\t},\n\tmethods: {\n\t\tchangeLang,\n\t\tgetCurTheme() {\n\t\t\treturn getCurTheme();\n\t\t\t// this.$nextTick(() => {});\n\t\t},\n\t\tconfigHandle(item) {\n\t\t\tif (item.name === \"issue\") {\n\t\t\t\tconst systemName = window.location.pathname.split(\"/\")[1];\n\t\t\t\twindow.open(`/${systemName}/integrated/#/workOrderManagement`);\n\t\t\t\tthis.$emit(\"zero\");\n\t\t\t} else {\n\t\t\t\tthis.curComponent = item;\n\t\t\t}\n\t\t},\n\t\tchooseTheme(item) {\n\t\t\tchangeTheme(item);\n\t\t\tthis.curTheme = item.id;\n\t\t},\n\t\tgetPosition(index) {\n\t\t\tconst styleObj = {\n\t\t\t\t0: {\n\t\t\t\t\t\"grid-row\": 2,\n\t\t\t\t\t\"grid-column\": 1\n\t\t\t\t},\n\t\t\t\t1: {\n\t\t\t\t\t\"grid-row\": 1,\n\t\t\t\t\t\"grid-column\": 2\n\t\t\t\t},\n\t\t\t\t2: {\n\t\t\t\t\t\"grid-row\": 2,\n\t\t\t\t\t\"grid-column\": 3\n\t\t\t\t},\n\t\t\t\t3: {\n\t\t\t\t\t\"grid-row\": 3,\n\t\t\t\t\t\"grid-column\": 2\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn styleObj[index];\n\t\t}\n\t}\n};\n</script>\n<style scoped>\n.yx-icon {\n\tposition: relative;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 1em;\n\theight: 1em;\n\tfont-size: 24px;\n\tline-height: 1em;\n\tfill: currentColor;\n}\n\n.toolbar-container {\n\tposition: absolute;\n\tz-index: 99999;\n\twidth: 200px;\n\theight: 200px;\n\tbackground: var(--color-main-20);\n\tborder-radius: 10px;\n\tbox-shadow: 1px 2px 6px 3px #00000033;\n\tbackdrop-filter: blur(5px);\n\n\t.toolbar-wrap {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 1fr 1fr;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tcolor: var(--text-color-body);\n\t\tcursor: pointer;\n\n\t\t.tool-icon {\n\t\t\twidth: 40px;\n\t\t\theight: 40px;\n\t\t\tline-height: 40px;\n\t\t\ttext-align: center;\n\t\t\tbackground-color: #ffffff;\n\t\t\tborder-radius: 100%;\n\t\t\tbox-shadow: 0 4px 7px 0 #00000033;\n\n\t\t\t&:hover {\n\t\t\t\ttransition: all 0.2s;\n\t\t\t\ttransform: scale(1.1);\n\t\t\t}\n\t\t}\n\t}\n\n\t.toolbar-wrap-component {\n\t\tdisplay: grid;\n\t\tgrid-template-rows: repeat(3, 1fr);\n\n\t\t/* 设置4行等高 */\n\t\tgrid-template-columns: repeat(3, 1fr);\n\n\t\t/* 设置4列等宽 */\n\t\tgap: 5px;\n\n\t\t/* 设置网格间距 */\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tcursor: pointer;\n\n\t\t.theme {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\twidth: 40px;\n\t\t\theight: 40px;\n\t\t\tmargin: auto;\n\t\t\ttext-align: center;\n\t\t\tborder-radius: 100%;\n\t\t\tbox-shadow: 0 4px 7px 0 #70aaf7;\n\n\t\t\t&:hover {\n\t\t\t\ttransition: all 0.2s;\n\t\t\t\ttransform: scale(1.1);\n\t\t\t}\n\n\t\t\t&.select {\n\t\t\t\t&::before {\n\t\t\t\t\tfont-size: 20px;\n\t\t\t\t\tcolor: #ffffff;\n\t\t\t\t\tcontent: \"✔\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t.toolbar-center {\n\t\t\tdisplay: flex;\n\t\t\tgrid-row: 2;\n\t\t\tgrid-column: 2;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\twidth: 40px;\n\t\t\theight: 40px;\n\t\t\tmargin: auto;\n\t\t\ttext-align: center;\n\t\t\tbackground-color: #ffffff;\n\t\t\tborder-radius: 100%;\n\t\t\tbox-shadow: 0 4px 7px 0 #00000033;\n\n\t\t\t&:hover {\n\t\t\t\ttransition: all 0.2s;\n\t\t\t\ttransform: scale(1.1);\n\t\t\t}\n\t\t}\n\t}\n}\n\n.theme-first {\n\tgrid-row: 2;\n\tgrid-column: 1;\n}\n\n.zoom-in {\n\tanimation: zoom-in 0.2s ease-in-out;\n}\n\n@keyframes zoom-in {\n\t0% {\n\t\ttransform: scale(0);\n\t}\n\n\t100% {\n\t\ttransform: scale(1);\n\t}\n}\n\n.zoom-out {\n\tanimation: zoom-out 0.2s ease-in-out;\n}\n\n@keyframes zoom-out {\n\t0% {\n\t\ttransform: scale(1);\n\t}\n\n\t100% {\n\t\ttransform: scale(0);\n\t}\n}\n</style>\n","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"50\",\n height: \"50\",\n fill: \"none\",\n viewBox: \"0 0 25 25\"\n}\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _cache[0] || (_cache[0] = [\n _createElementVNode(\"g\", {\n stroke: \"currentColor\",\n \"stroke-linejoin\": \"round\",\n \"stroke-width\": \"2\"\n }, [\n _createElementVNode(\"path\", { d: \"M9 3H4a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1h5a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1ZM9 14H4a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1h5a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1ZM20 3h-5a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1h5a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1ZM20 14h-5a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1h5a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1Z\" })\n ], -1)\n ])))\n}\nexport default { render: render }","<script lang=\"ts\">\nimport configMixins from \"./index.config\";\nimport { PositionEnum } from \"./index.config\";\nimport ToolbarContainer from \"./components/ToolbarContainer.vue\";\nimport Badge from \"./components/Badge.vue\";\nimport menuIcon from \"./svg/menu.svg\";\nimport { getCommentUntreatedCount } from \"@packages/api\";\nexport default {\n\tname: \"YxToolbar\",\n\tcomponents: { ToolbarContainer, menuIcon, Badge },\n\tmixins: [configMixins],\n\tdata() {\n\t\treturn {\n\t\t\tshowTool: false,\n\t\t\tposition: {\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0\n\t\t\t},\n\t\t\tbadgeValue: 0,\n\t\t\tshowBadge: window.isRenderIssue\n\t\t};\n\t},\n\tcomputed: {\n\t\tshowClass() {\n\t\t\treturn this.status ? \"expanded\" : \"folded\";\n\t\t}\n\t},\n\tmounted() {\n\t\tif (this.showBadge) {\n\t\t\tthis.getCount();\n\t\t}\n\t\tthis.initToolPosition();\n\t},\n\tmethods: {\n\t\tinitToolPosition() {\n\t\t\tconst toolWrap = document.querySelector(\".toolbar-wrap\");\n\t\t\tconst left = window.innerWidth - 60 - 100 + \"px\";\n\t\t\tconst top = window.innerHeight - 60 - 100 + \"px\";\n\t\t\ttoolWrap.style.setProperty(\"--tool-left\", left);\n\t\t\ttoolWrap.style.setProperty(\"--tool-top\", top);\n\t\t},\n\t\tasync getCount() {\n\t\t\tconst { data } = await getCommentUntreatedCount();\n\t\t\tthis.badgeValue = data.count;\n\t\t},\n\t\t/** 点击悬浮球事件 */\n\t\thandlerClickTool(e: MouseEvent) {\n\t\t\tconst flag = this.mousePoint.x === e.screenX && this.mousePoint.y === e.screenY;\n\t\t\tif (!flag) return;\n\t\t\t// 切换状态\n\t\t\tthis.switchStatus();\n\t\t\t// 获取悬浮球位置\n\t\t\tthis.getAllPosition();\n\t\t\t// 设置悬浮球\n\t\t\tthis.setPanel();\n\t\t\tthis.showTool = true;\n\t\t},\n\t\t/** 切换状态 */\n\t\tswitchStatus() {\n\t\t\tthis.status = !this.status;\n\t\t},\n\t\tgetAllPosition() {\n\t\t\tthis.toolPos = this.getDomPosition(this.toolDom);\n\t\t\tthis.panelPos = this.getDomPosition(this.panelDom);\n\t\t},\n\t\t/** 获取悬浮球的位置 */\n\t\tgetDomPosition(dom: HTMLElement) {\n\t\t\treturn dom.getBoundingClientRect();\n\t\t},\n\t\t/** 设置悬浮球 */\n\t\tsetPanel() {\n\t\t\tconst minX = 0;\n\t\t\tconst minY = 0;\n\t\t\tconst maxX = window.innerWidth - this.panelWidth;\n\t\t\tconst maxY = window.innerHeight - this.panelHeight;\n\t\t\tlet x = this.toolPos.left + this.toolPos.width / 2 - this.panelWidth / 2;\n\t\t\tlet y = this.toolPos.top + this.toolPos.height / 2 - this.panelHeight / 2;\n\n\t\t\tif (x < minX) x = minX;\n\t\t\tif (y < minY) y = minY;\n\t\t\tif (x > maxX) x = maxX - 40;\n\t\t\tif (y > maxY) y = maxY - 40;\n\n\t\t\tthis.setPanelPosition(x, y);\n\t\t},\n\t\t/** 设置panel的位置 */\n\t\tsetPanelPosition(x, y) {\n\t\t\tthis.panelDom.style.left = x + \"px\";\n\t\t\tthis.panelDom.style.top = y + \"px\";\n\t\t},\n\t\t/** 点击Tool */\n\t\tmousedownTool(e) {\n\t\t\tthis.mousePoint.x = e.screenX;\n\t\t\tthis.mousePoint.y = e.screenY;\n\t\t},\n\t\tclose() {\n\t\t\tthis.status = false;\n\t\t\tthis.showTool = false;\n\t\t}\n\t}\n};\n</script>\n\n<template>\n\t<!-- 外层容器 -->\n\t<div id=\"toolbar-wrap\" class=\"toolbar-wrap\">\n\t\t<!-- 悬浮球 -->\n\t\t<div class=\"tool\" :class=\"`${showClass}`\" @click=\"handlerClickTool\" @mousedown=\"mousedownTool\" @mouseup=\"mouseupTool\">\n\t\t\t<i class=\"yx-icon\">\n\t\t\t\t<component :is=\"'menuIcon'\" />\n\t\t\t</i>\n\t\t\t<!-- <el-icon size=\"30\">\n\t\t\t</el-icon> -->\n\t\t\t<Badge v-if=\"showBadge\" :value=\"badgeValue\" />\n\t\t</div>\n\n\t\t<div class=\"mask\" :class=\"`${showClass}`\" @click=\"close\" />\n\n\t\t<!-- 面板 -->\n\t\t<ToolbarContainer @zero=\"badgeValue = 0\" :badgeValue=\"badgeValue\" class=\"panel\" :showTool=\"showTool\" />\n\t</div>\n</template>\n\n<style scoped lang=\"scss\">\n.yx-icon {\n\tposition: relative;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 1em;\n\theight: 1em;\n\tfont-size: 35px;\n\tline-height: 1em;\n\tfill: currentColor;\n}\n\n.toolbar-wrap {\n\t--tool-left: \"0px\";\n\t--tool-top: \"0px\";\n\n\tz-index: 99;\n\tdisplay: flex;\n\n\t.tool {\n\t\tposition: fixed;\n\t\ttop: var(--tool-top);\n\t\tleft: var(--tool-left);\n\t\tz-index: 99;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 60px;\n\t\theight: 60px;\n\t\tcolor: var(--button-text-color);\n\t\tcursor: pointer;\n\t\tbackground-color: var(--color-main-100);\n\t\tborder-radius: 100%;\n\t\tbox-shadow: 1px 2px 6px 3px #00000017;\n\t\tbackdrop-filter: blur(20px);\n\n\t\t&.expanded {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t&.folded {\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t.panel {\n\t\t// background-color: rgba(255, 255, 255, 0.5);\n\t\tposition: fixed;\n\t\ttop: 400px;\n\t\tleft: 400px;\n\t\tz-index: 100000;\n\t\twidth: v-bind(panelWidthPX);\n\t\theight: v-bind(panelHeightPX);\n\t\tmargin: 20px;\n\t\tborder-radius: 10px;\n\n\t\t&.expanded {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\t&.folded {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t.mask {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tz-index: 99999;\n\t\twidth: 100vw;\n\t\theight: 100vh;\n\n\t\t&.folded {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n</style>\n","/*\n * @Author: WangXin\n * @Date: 2024-04-02 20:01:00\n * @LastEditors: WangXin\n * @LastEditTime: 2024-04-15 15:48:58\n * @FilePath: /yxuse/packages/components/Toolbar/index.ts\n * @Description:\n *\n * Copyright (c) 2024 by YuXing, All Rights Reserved.\n */\nimport { version, createApp } from \"vue\";\nimport \"./src/utils/mounted\";\nimport ToolbarApp from \"./src/index.vue\";\n\n/** 主题配置 */\ninterface ThemeConfig {\n\t/** 主题id */\n\tid: number;\n\t/** 主题名 */\n\ttheme: string;\n\t/** 主题url */\n\tthemeUrl: string;\n\t/** 默认主题id */\n\tdefaultTheme: number;\n\t/** 背景色 工具悬浮球的主题背景色:backgroundColor属性 */\n\tthemeColor: string;\n\t/** 创建者 */\n\tcreator?: string;\n\t/** 创建时间 */\n\tcreateTime?: string;\n}\n\n/** Toolbar的配置 */\ninterface ToolbarConfig {\n\ttheme: ThemeConfig[];\n\t/** 是否渲染工单 */\n\tisRenderIssue?: boolean;\n\t/** 是否渲染切换语言 */\n\tisRenderLang?: boolean;\n}\n\n/**\n * 悬浮球工具\n */\nclass Toolbar {\n\t/** 单例对象 */\n\tstatic instance: Toolbar | null = null;\n\n\t/** 工具挂载domId */\n\t#elId: string = \"yxToolbarV2\";\n\n\t/** 当前vue版本 */\n\tget vueVersion(): \"2\" | \"3\" {\n\t\treturn version[0] as `${\"2\" | \"3\"}`;\n\t}\n\n\tconstructor(config: ToolbarConfig) {\n\t\tconst { theme, isRenderIssue, isRenderLang } = config;\n\n\t\tif (!Toolbar.instance) {\n\t\t\t// @ts-expect-error\n\t\t\twindow.theme = theme;\n\t\t\twindow.isRenderIssue = isRenderIssue;\n\t\t\twindow.isRenderLang = isRenderLang;\n\t\t\tthis.init();\n\t\t\tToolbar.instance = this;\n\t\t}\n\t\treturn Toolbar.instance;\n\t}\n\n\t/** 初始化 */\n\tinit() {\n\t\tthis.mount();\n\t}\n\n\t/** 挂载初始化容器 */\n\tmount() {\n\t\t// 1. 新建标签\n\t\tconst el = document.createElement(\"div\");\n\t\tel.id = this.#elId;\n\t\tdocument.body.appendChild(el);\n\t\t// 2. 挂载\n\t\tif (this.vueVersion === \"3\") {\n\t\t\treturn createApp(ToolbarApp).mount(`#${this.#elId}`);\n\t\t} else {\n\t\t\tconst Vue = require(\"vue\");\n\t\t\treturn new Vue({ render: h => h(ToolbarApp) }).$mount(`#${this.#elId}`);\n\t\t}\n\t}\n}\nexport default Toolbar;\n","/*\n * @Author: WangXin\n * @Date: 2023-08-17 13:42:02\n * @LastEditors: WangXin\n * @LastEditTime: 2024-09-24 16:10:18\n * @FilePath: /yxuse/packages/theme/index.ts\n * @Description:\n *\n * Copyright (c) 2023 by YuXing, All Rights Reserved.\n */\n\nimport { ttcFontFamily, defaultConfig } from \"./config\";\nimport { getUserThemeList } from \"@packages/api\";\n// import { YxTable } from \"@packages/components\";\nimport { Toolbar } from \"@packages/components\";\nimport { yxSubscribe, isColorEqual } from \"@packages/utils\";\nimport { BC } from \"@packages/index\";\nimport { BC_THEME_NAME, BC_LANG_NAME } from \"@packages/config\";\nimport { setSystemConfig } from \"@packages/api/auth\";\nimport http from \"@packages/utils/http\";\nimport type { ThemeDTO, YxuseOptions } from \"./type.ts\";\nimport { getLang, initTranslate } from \"@packages/translate\";\n\n/**\n * @description:注册主题下的css变量\n * @options isRenderToolbar :是否需要渲染Toolbar\n * @param isJumpLogin :是否在没有token或token过期时自动跳转至登录页\n */\nexport const install = async (config: YxuseOptions): Promise<void> => {\n\t//同步默认配置\n\tconfig = { ...defaultConfig, ...config };\n\t// 获取当前主题\n\t// 如何当前系统没有主题,则自动添加默认主题\n\tlet themeId = getCurTheme();\n\ttry {\n\t\tawait handleSystemConfig(config);\n\t\tconst { data } = await http.get(config?.themeApiUrl, {}, { headers: { noLoading: true } });\n\t\twindow[\"YX_THEME_LIST\"] = data;\n\t\t//是否需要在没有token或token过期时自动跳转至登录页\n\t\tconsole.log(config);\n\t\t//如果需要加载翻译\n\t\tif (config.isRenderLang && config.systemKey) {\n\t\t\tconst lang = await getLang();\n\t\t\t//默认为中文\n\t\t\tawait initTranslate({ to: lang ? lang : config.lang, systemKey: config.systemKey });\n\t\t}\n\t\t//初始化完毕后,挂载toolbar组件\n\t\tif (config.isRenderToolbar) {\n\t\t\tnew Toolbar({ theme: data, isRenderIssue: config.isRenderIssue, isRenderLang: config.isRenderLang });\n\t\t}\n\n\t\t//如果已经设置了主题 则使用缓存中的主题,反正则去设置默认主题\n\t\t//当前要注册的themeUrl\n\t\tlet themeUrl = themeId ? data.find((item: ThemeDTO) => item.id === themeId)?.themeUrl : \"\";\n\n\t\tif (!themeId || !themeUrl) {\n\t\t\t//网关首次进来设置默认主题,并同步主题变量到\n\t\t\tconst defaultTheme = data.find((item: ThemeDTO) => item.defaultTheme === 1);\n\t\t\tconst theme = defaultTheme || data[0];\n\t\t\tthemeUrl = theme.themeUrl;\n\t\t\tthemeId = theme.id;\n\t\t}\n\t\tconst themeCssVar = await setCssVar(themeUrl);\n\t\tsaveCssVar({ themeCssVar, themeId });\n\t\tinitTtcFont();\n\n\t\t//监听当前广播的消息,有切换主题的消息就切换主题\n\t\tnew BC(BC_THEME_NAME).onmessage = (event: any) => {\n\t\t\tconst data = JSON.parse(event.data);\n\t\t\t// setCssVar(data.data.themeUrl);\n\t\t\tinstallCssVarInSystemTheme(data.data.themeCssVar);\n\t\t\t//通知订阅回调的系统\n\t\t\tyxSubscribe.publish({ type: \"theme\", data: null });\n\t\t};\n\t\tnew BC(BC_LANG_NAME).onmessage = (event: any) => {\n\t\t\tlocation.reload();\n\t\t};\n\n\t\tconsole.log(\"主题初始化完毕!!!\");\n\t} catch (err) {\n\t\t//请求报错使用缓存中兜底css变量\n\t\tinitTtcFont();\n\t\tupdateTheme();\n\t}\n};\n//处理系统配置\nconst handleSystemConfig = (config: YxuseOptions) => {\n\t//存储当前的系统配置\n\tsetSystemConfig({ ...config });\n};\n//初始化字体\nconst initTtcFont = () => {\n\tconst style = document.createElement(\"style\");\n\tstyle.innerHTML = ttcFontFamily;\n\tdocument.head.appendChild(style);\n};\nexport const saveCssVar = ({ themeCssVar, themeId }) => {\n\tconst ttcGlobalState = localStorage.getItem(\"ttcGlobalState\") || \"{}\";\n\tconst globalState = JSON.parse(ttcGlobalState);\n\tglobalState.theme = {\n\t\tthemeCssVar,\n\t\tid: themeId\n\t};\n\tlocalStorage.setItem(\"ttcGlobalState\", JSON.stringify(globalState));\n};\n/**\n * @description:修改主题\n * @param theme 主题\n */\nexport const changeTheme = async (theme: ThemeDTO) => {\n\tconst themeCssVar = await setCssVar(theme.themeUrl);\n\tsaveCssVar({ themeCssVar, themeId: theme?.id });\n\n\t//通知其他分系统\n\tnew BC(BC_THEME_NAME).postMessage(\n\t\tJSON.stringify({\n\t\t\ttype: \"theme\",\n\t\t\tdata: {\n\t\t\t\tthemeId: theme?.id,\n\t\t\t\tthemeUrl: theme?.themeUrl,\n\t\t\t\tthemeCssVar: themeCssVar\n\t\t\t}\n\t\t})\n\t);\n\t//触发当前系统的主题修改回调\n\tyxSubscribe.publish({ type: \"theme\", data: theme });\n};\n\n/**\n * @description:更新主题\n */\nexport const updateTheme = () => {\n\tconst themeCssVar = getCurThemeCssVar();\n\tconst root = document.documentElement;\n\tObject.keys(themeCssVar).forEach(classifyName => {\n\t\tif (classifyName !== \"exclude\") {\n\t\t\tObject.keys(themeCssVar[classifyName]).forEach(varName => {\n\t\t\t\tconst cssVarName = `--${classifyName}-${varName}`;\n\t\t\t\troot.style.setProperty(cssVarName, themeCssVar[classifyName][varName]);\n\t\t\t});\n\t\t}\n\t});\n};\n/**\n * 注册主题变量\n */\nexport const setCssVar = async (themeUrl: string) => {\n\tconst cssVar = await fetch(themeUrl);\n\tconst themeCssVar = await cssVar.json();\n\tconst cssText = () => {\n\t\tlet cssText = \":root {\\n\"; // 开始构建 CSS 变量内容\n\t\tObject.keys(themeCssVar).forEach(classifyName => {\n\t\t\tif (classifyName !== \"exclude\") {\n\t\t\t\tObject.keys(themeCssVar[classifyName]).forEach(varName => {\n\t\t\t\t\tconst cssVarName = `--${classifyName}-${varName}`;\n\t\t\t\t\tconst value = themeCssVar[classifyName][varName];\n\t\t\t\t\tcssText += ` ${cssVarName}: ${value};\\n`; // 将变量及其值添加到 CSS 内容中\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tcssText += \"}\"; // 结束 CSS 变量内容\n\t\treturn cssText;\n\t};\n\t//如果已经有了class 为theme的style标签,则直替换内容,否则创建一个\n\tconst themeStyle = document.querySelector(\".YX_THEME_STYLE\");\n\tif (themeStyle) {\n\t\tthemeStyle.innerHTML = \"\";\n\t\tthemeStyle.appendChild(document.createTextNode(cssText()));\n\t} else {\n\t\tconst styleTag = document.createElement(\"style\"); // 创建一个 <style> 标签\n\t\tstyleTag.className = \"YX_THEME_STYLE\";\n\t\tstyleTag.appendChild(document.createTextNode(cssText())); // 将 CSS 内容添加到 <style> 标签中\n\t\tdocument.head.appendChild(styleTag); // 将 <style> 标签添加到 <head> 中\n\t}\n\treturn themeCssVar;\n};\n\n/**\n * @description:获取默认主题URl\n */\nexport const getDefaultThemeUrl = async () => {\n\tconst { data } = await getUserThemeList();\n\tconst defaultTheme = data.find((item: ThemeDTO) => item.defaultTheme === 1);\n\tconst defaultThemeUrl = defaultTheme ? defaultTheme.themeUrl : data[0].themeUrl;\n\treturn defaultThemeUrl;\n};\n/**\n * @description:获取当前主题\n */\nexport const getCurTheme = () => {\n\tconst ttcGlobalState = localStorage.getItem(\"ttcGlobalState\");\n\tconst theme = ttcGlobalState && JSON.parse(ttcGlobalState)?.theme;\n\treturn theme?.id || null;\n};\n/**\n * @description:获取当前主题变量\n */\nexport const getCurThemeCssVar = () => {\n\tconst ttcGlobalState = localStorage.getItem(\"ttcGlobalState\");\n\tconst theme = ttcGlobalState && JSON.parse(ttcGlobalState)?.theme;\n\treturn theme?.themeCssVar || {};\n};\n\n/**\n * @description:获取当前主题下的某个组/模块配置颜色\n * @param groupName 名称\n */\nexport const getGroupColor = (groupName: string): object => {\n\tconst theme = getCurThemeCssVar();\n\treturn theme?.[groupName] || {};\n};\n\n/**\n * @description:判断当前css变量的色值是否在所有主题中\n * @param cssVarName 色值变量\n * @param color 名称\n */\n\nexport const findColorByTheme = (cssVarName: string, color: string) => {\n\tconst cssVar = getCurThemeCssVar();\n\tif (!cssVar[\"exclude\"]) return null;\n\tfor (let id in cssVar[\"exclude\"]) {\n\t\tconst keys = cssVar[\"exclude\"][id];\n\t\tfor (let css of Object.keys(keys)) {\n\t\t\tfor (let key of Object.keys(keys[css])) {\n\t\t\t\tconst currentCssVar = `--${css}-${key}`;\n\t\t\t\tif (currentCssVar === cssVarName && isColorEqual(keys[css][key], color)) {\n\t\t\t\t\treturn color; // 找到匹配的颜色,立即返回结果\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null; // 未找到匹配的颜色\n};\n\n/**\n * @description:注册当前系统私有css变量\n * @param systemName 系统名称\n */\n// export const installSystemTheme = (systemName: string): void => {\n// \tconst curTheme = getCurTheme();\n// \tconst systemConfig = config[curTheme][systemName];\n// \tconst root = document.documentElement;\n// \tObject.keys(systemConfig).forEach(varName => {\n// \t\tconst cssVarName = `--${varName}`;\n// \t\troot.style.setProperty(cssVarName, systemConfig[varName]);\n// \t});\n// };\n\n//将css变量注册在当前的系统中\nexport const installCssVarInSystemTheme = (cssVar?: any, className?: string): void => {\n\tconst themeCssVar = cssVar || getCurThemeCssVar();\n\t// console.log(\"当前缓存中的主题是\", themeCssVar[\"color\"]);\n\tconst cssText = () => {\n\t\tlet cssText = \":root {\\n\"; // 开始构建 CSS 变量内容\n\t\tObject.keys(themeCssVar).forEach(classifyName => {\n\t\t\tif (classifyName !== \"exclude\") {\n\t\t\t\tObject.keys(themeCssVar[classifyName]).forEach(varName => {\n\t\t\t\t\tconst cssVarName = `--${classifyName}-${varName}`;\n\t\t\t\t\tconst value = themeCssVar[classifyName][varName];\n\t\t\t\t\tcssText += ` ${cssVarName}: ${value};\\n`; // 将变量及其值添加到 CSS 内容中\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tcssText += \"}\"; // 结束 CSS 变量内容\n\t\treturn cssText;\n\t};\n\t//如果已经有了class 为theme的style标签,则直替换内容,否则创建一个\n\tconst styleClassName = className || \"YX_THEME_STYLE\";\n\tconst themeStyle = document.querySelector(`.${styleClassName}`);\n\tif (themeStyle) {\n\t\tthemeStyle.innerHTML = \"\";\n\t\tthemeStyle.appendChild(document.createTextNode(cssText()));\n\t} else {\n\t\tconst styleTag = document.createElement(\"style\"); // 创建一个 <style> 标签\n\t\tstyleTag.className = \"YX_THEME_STYLE\";\n\t\tstyleTag.appendChild(document.createTextNode(cssText())); // 将 CSS 内容添加到 <style> 标签中\n\t\tdocument.head.appendChild(styleTag); // 将 <style> 标签添加到 <head> 中\n\t}\n};\n","/*\n * @Author: WangXin\n * @Date: 2024-09-24 12:26:14\n * @LastEditors: WangXin\n * @LastEditTime: 2025-05-12 10:55:49\n * @FilePath: /yxuse/packages/bc/index.ts\n * @Description:\n *\n * Copyright (c) ${2024} by YuXing, All Rights Reserved.\n */\ndeclare global {\n\tinterface Window {\n\t\t/**页面是否激活 */\n\t\tpageActive: boolean;\n\t}\n}\nexport class BC {\n\tpublic onmessage: Function;\n\tpublic postMessage: Function;\n\tstatic init() {\n\t\twindow.pageActive = document.visibilityState === \"visible\";\n\t\tdocument.addEventListener(\"visibilitychange\", () => {\n\t\t\twindow.pageActive = document.visibilityState === \"visible\";\n\t\t});\n\t}\n\tconstructor(channelName: string) {\n\t\tBC.init();\n\t\tconst broadcastChannel = new BroadcastChannel(channelName);\n\t\tthis.onmessage = (event: any) => event;\n\t\tbroadcastChannel.onmessage = event => {\n\t\t\tconst { type } = event.data;\n\t\t\tif (type === \"router\") {\n\t\t\t\tif (window.pageActive) return this.onmessage(event);\n\t\t\t} else {\n\t\t\t\tthis.onmessage(event);\n\t\t\t}\n\t\t};\n\t\tthis.postMessage = (message: any) => {\n\t\t\treturn broadcastChannel.postMessage(message);\n\t\t};\n\t}\n}\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","tableProRef","ref","dynamicComponent","column","rowData","_slot","renderType","event","prop","label","config","Component","resolveComponent","options","restConfig","renderChildComponent","length","map","item","_createVNode","_resolveComponent","value","default","_mergeProps","$event","isSelect","includes","modelValue","updateModelValue","val","type","Number","component","loadOptions","YxTablePro","defineComponent","name","props","tableData","Array","rowKey","String","required","columns","Function","pageInfo","sort","Boolean","emits","setup","emit","attrs","expose","onBeforeMount","initTable","onMounted","nextTick","startSort","watch","columnsList","filter","cell","show","col","width","res","flexGrow","cellRenderer","scope","getCellRenderer","headerCellRenderer","headerRender","title","dataKey","key","sortDom","$el","querySelector","children","Sortable","create","animation","handle","sortHandle","onEnd","oldIndex","newIndex","renderOperate","render","rowIndex","className","operate","op","disabled","withModifiers","onClick","pagination","total","handleSizeChange","e","handleCurrentChange","pageIndex","pageSize","layout","getTableHeight","height","_hoisted_1","_openBlock","_createElementBlock","_createStaticVNode","_createElementVNode","lang","auth.changeSystemConfig","auth.getSystemConfig","node","systemKey","_sfc_main","_withDirectives","_hoisted_2","_createBlock","_Transition","_withCtx","_normalizeClass","_normalizeStyle","_Fragment","_renderList","_resolveDynamicComponent","_createCommentVNode","_toDisplayString","theme","data","cssText"],"mappings":"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"}
|
package/lib/index.es6.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.es6.js","sources":["../packages/components/YxDialog/index.vue","../packages/components/YxDrawer/index.vue","../packages/utils/excel/index.ts","../packages/components/YxTable/index.vue","../packages/components/YxForm/icon/question.svg?component","../packages/components/YxForm/index.vue","../packages/utils/common/update.ts","../packages/components/Update/index.vue","../packages/components/YxIcon/index.vue","../packages/components/YxUpload/index.vue","../packages/components/LogoTitle/index.vue","../packages/components/LogoTitle/index.ts"],"sourcesContent":["<!--\n * @Author: WangXin\n * @Date: 2024-01-17 18:18:08\n * @LastEditors: WangXin\n * @LastEditTime: 2025-06-06 14:31:11\n * @FilePath: /yxuse/packages/components/YxDialog/index.vue\n * @Description: \n * \n * Copyright (c) 2024 by YuXing, All Rights Reserved. \n-->\n\n<script setup lang=\"ts\" name=\"YxDialog\">\nimport { reactive } from \"vue\";\nimport type { DialogOptions } from \"./type\";\nconst dialogOptions = reactive({\n\twidth: \"40%\",\n\tshow: false,\n\ttitle: \"\",\n\tloading: false,\n\tshowFooter: true,\n\tautoClose: true\n});\nconst close = () => {\n\tconsole.log(\"关闭\");\n\tdialogMap[\"cancel\"] && dialogMap[\"cancel\"]();\n\tdialogOptions.show = false;\n};\nconst dialogMap: Record<string, Function> = {};\nconst submit = async () => {\n\t//执行提交之前的回调\n\tif (dialogMap[\"beforeSubmit\"] && !(await dialogMap[\"beforeSubmit\"]())) return;\n\tdialogOptions.loading = true;\n\ttry {\n\t\tdialogMap[\"submit\"] && (await dialogMap[\"submit\"]());\n\t\tdialogOptions.loading = false;\n\t\tif (dialogOptions.autoClose) close();\n\t} catch (err) {\n\t\tdialogOptions.loading = false;\n\t}\n};\nconst show = async ({ width, title, submit, cancel, showFooter, autoClose, beforeOpen, beforeSubmit }: DialogOptions) => {\n\tif (width) dialogOptions.width = width;\n\tif (title) dialogOptions.title = title;\n\tif (showFooter !== undefined) dialogOptions.showFooter = showFooter;\n\tif (autoClose !== undefined) dialogOptions.autoClose = autoClose;\n\tif (submit) dialogMap[\"submit\"] = submit;\n\tif (cancel) dialogMap[\"cancel\"] = cancel;\n\tif (beforeSubmit) dialogMap[\"beforeSubmit\"] = beforeSubmit;\n\tif (beforeOpen) {\n\t\tawait beforeOpen();\n\t}\n\tdialogOptions.show = true;\n};\n\ndefineExpose({\n\tshow,\n\tclose\n});\n</script>\n\n<template>\n\t<el-dialog\n\t\t:close-on-click-modal=\"false\"\n\t\tattrs\n\t\t:width=\"dialogOptions.width\"\n\t\tv-model=\"dialogOptions.show\"\n\t\t:title=\"dialogOptions.title\"\n\t\tdestroy-on-close\n\t\t:before-close=\"close\"\n\t>\n\t\t<el-scrollbar height=\"100%\">\n\t\t\t<slot />\n\t\t</el-scrollbar>\n\t\t<template #footer v-if=\"dialogOptions.showFooter\">\n\t\t\t<span class=\"dialog-footer flex justify-end\">\n\t\t\t\t<el-button plain @click=\"dialogOptions.show = false\">取消</el-button>\n\t\t\t\t<el-button :loading=\"dialogOptions.loading\" @click=\"submit\">确认</el-button>\n\t\t\t</span>\n\t\t</template>\n\t</el-dialog>\n</template>\n\n<style scoped lang=\"scss\"></style>\n","<!--\n * @Author: WangXin\n * @Date: 2024-01-17 18:18:08\n * @LastEditors: WangXin\n * @LastEditTime: 2025-05-15 16:05:44\n * @FilePath: /yxuse/packages/components/YxDrawer/index.vue\n * @Description: \n * \n * Copyright (c) 2024 by YuXing, All Rights Reserved. \n-->\n\n<script setup lang=\"ts\" name=\"YxDrawer\">\nimport { reactive } from \"vue\";\nimport type { DrawerOptions } from \"./type\";\nconst drawerOptions = reactive({\n\twidth: \"40%\",\n\tshow: false,\n\ttitle: \"\",\n\tloading: false,\n\tshowFooter: true,\n\tautoClose: true\n});\nconst close = () => {\n\tdrawerMap[\"cancel\"] && drawerMap[\"cancel\"]();\n\tdrawerOptions.show = false;\n\tconsole.log(\"关闭\");\n};\nconst drawerMap: Record<string, Function> = {};\nconst submit = async () => {\n\t//执行提交之前的回调\n\tif (drawerMap[\"beforeSubmit\"] && !(await drawerMap[\"beforeSubmit\"]())) return;\n\tdrawerOptions.loading = true;\n\ttry {\n\t\tdrawerMap[\"submit\"] && (await drawerMap[\"submit\"]());\n\t\tdrawerOptions.loading = false;\n\t\tif (drawerOptions.autoClose) close();\n\t} catch (err) {\n\t\tdrawerOptions.loading = false;\n\t}\n};\nconst show = async ({ width, title, submit, cancel, showFooter, autoClose, beforeOpen, beforeSubmit }: DrawerOptions) => {\n\tif (width) drawerOptions.width = width;\n\tif (title) drawerOptions.title = title;\n\tif (showFooter !== undefined) drawerOptions.showFooter = showFooter;\n\tif (autoClose !== undefined) drawerOptions.autoClose = autoClose;\n\tif (submit) drawerMap[\"submit\"] = submit;\n\tif (cancel) drawerMap[\"cancel\"] = cancel;\n\tif (beforeSubmit) drawerMap[\"beforeSubmit\"] = beforeSubmit;\n\tif (beforeOpen) {\n\t\tawait beforeOpen();\n\t}\n\tdrawerOptions.show = true;\n};\ndefineExpose({\n\tshow,\n\tclose\n});\n</script>\n<template>\n\t<el-drawer\n\t\t:close-on-click-modal=\"false\"\n\t\tattrs\n\t\t:size=\"drawerOptions.width\"\n\t\tv-model=\"drawerOptions.show\"\n\t\t:title=\"drawerOptions.title\"\n\t\tdestroy-on-close\n\t\t@close=\"close\"\n\t>\n\t\t<slot />\n\t\t<template #footer v-if=\"drawerOptions.showFooter\">\n\t\t\t<span class=\"dialog-footer flex justify-end\">\n\t\t\t\t<el-button plain @click=\"drawerOptions.show = false\">取消</el-button>\n\t\t\t\t<el-button :loading=\"drawerOptions.loading\" @click=\"submit\">确认</el-button>\n\t\t\t</span>\n\t\t</template>\n\t</el-drawer>\n</template>\n\n<style scoped lang=\"scss\"></style>\n","import * as XLSX from \"xlsx\";\nimport { saveAs } from \"file-saver\";\nimport XLSXStyle from \"xlsx-js-style\";\n\nfunction generateArray(table) {\n\tlet out = [];\n\tlet rows = table.querySelectorAll(\"tr\");\n\tlet ranges = [];\n\tfor (var R = 0; R < rows.length; ++R) {\n\t\tvar outRow = [];\n\t\tlet row = rows[R];\n\t\tlet columns = row.querySelectorAll(\"td\");\n\t\tfor (let C = 0; C < columns.length; ++C) {\n\t\t\tlet cell = columns[C];\n\t\t\tlet colspan = cell.getAttribute(\"colspan\");\n\t\t\tlet rowspan = cell.getAttribute(\"rowspan\");\n\t\t\tlet cellValue = cell.innerText;\n\t\t\tif (cellValue !== \"\" && cellValue == +cellValue) cellValue = +cellValue;\n\n\t\t\t//Skip ranges\n\t\t\tranges.forEach(function (range) {\n\t\t\t\tif (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {\n\t\t\t\t\tfor (let i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t//Handle Row Span\n\t\t\tif (rowspan || colspan) {\n\t\t\t\trowspan = rowspan || 1;\n\t\t\t\tcolspan = colspan || 1;\n\t\t\t\tranges.push({\n\t\t\t\t\ts: {\n\t\t\t\t\t\tr: R,\n\t\t\t\t\t\tc: outRow.length\n\t\t\t\t\t},\n\t\t\t\t\te: {\n\t\t\t\t\t\tr: R + rowspan - 1,\n\t\t\t\t\t\tc: outRow.length + colspan - 1\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//Handle Value\n\t\t\toutRow.push(cellValue !== \"\" ? cellValue : null);\n\n\t\t\t//Handle Colspan\n\t\t\tif (colspan) for (let k = 0; k < colspan - 1; ++k) outRow.push(null);\n\t\t}\n\t\tout.push(outRow);\n\t}\n\treturn [out, ranges];\n}\n\nfunction datenum(v, date1904) {\n\tif (date1904) v += 1462;\n\tlet epoch = Date.parse(v);\n\treturn (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);\n}\n\nfunction sheet_from_array_of_arrays(data, opts) {\n\tlet ws = {};\n\tlet range = {\n\t\ts: {\n\t\t\tc: 10000000,\n\t\t\tr: 10000000\n\t\t},\n\t\te: {\n\t\t\tc: 0,\n\t\t\tr: 0\n\t\t}\n\t};\n\tfor (let R = 0; R != data.length; ++R) {\n\t\tfor (let C = 0; C != data[R].length; ++C) {\n\t\t\tif (range.s.r > R) range.s.r = R;\n\t\t\tif (range.s.c > C) range.s.c = C;\n\t\t\tif (range.e.r < R) range.e.r = R;\n\t\t\tif (range.e.c < C) range.e.c = C;\n\t\t\tlet cell = {\n\t\t\t\tv: data[R][C]\n\t\t\t};\n\t\t\tif (cell.v == null) continue;\n\t\t\tlet cell_ref = XLSX.utils.encode_cell({\n\t\t\t\tc: C,\n\t\t\t\tr: R\n\t\t\t});\n\n\t\t\tif (typeof cell.v === \"number\") cell.t = \"n\";\n\t\t\telse if (typeof cell.v === \"boolean\") cell.t = \"b\";\n\t\t\telse if (cell.v instanceof Date) {\n\t\t\t\tcell.t = \"n\";\n\t\t\t\tcell.z = XLSX.SSF._table[14];\n\t\t\t\tcell.v = datenum(cell.v);\n\t\t\t} else cell.t = \"s\";\n\n\t\t\tws[cell_ref] = cell;\n\t\t}\n\t}\n\tif (range.s.c < 10000000) ws[\"!ref\"] = XLSX.utils.encode_range(range);\n\treturn ws;\n}\n\nfunction Workbook() {\n\tif (!(this instanceof Workbook)) return new Workbook();\n\tthis.SheetNames = [];\n\tthis.Sheets = {};\n}\n\nfunction s2ab(s) {\n\tlet buf = new ArrayBuffer(s.length);\n\tlet view = new Uint8Array(buf);\n\tfor (let i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;\n\treturn buf;\n}\n\nexport function export_table_to_excel(id) {\n\tlet theTable = document.getElementById(id);\n\tlet oo = generateArray(theTable);\n\tlet ranges = oo[1];\n\n\t/* original data */\n\tlet data = oo[0];\n\tlet ws_name = \"SheetJS\";\n\n\tlet wb = new Workbook(),\n\t\tws = sheet_from_array_of_arrays(data);\n\n\t/* add ranges to worksheet */\n\t// ws['!cols'] = ['apple', 'banan'];\n\tws[\"!merges\"] = ranges;\n\n\t/* add worksheet to workbook */\n\twb.SheetNames.push(ws_name);\n\twb.Sheets[ws_name] = ws;\n\n\tlet wbout = XLSX.write(wb, {\n\t\tbookType: \"xlsx\",\n\t\tbookSST: false,\n\t\ttype: \"binary\"\n\t});\n\n\tsaveAs(\n\t\tnew Blob([s2ab(wbout)], {\n\t\t\ttype: \"application/octet-stream\"\n\t\t}),\n\t\t\"test.xlsx\"\n\t);\n}\n\nexport function export_json_to_excel({\n\tmultiHeader = [],\n\theader,\n\tdata,\n\tfilename,\n\tmerges = [],\n\tautoWidth = true,\n\texcelWidth = true,\n\tbookType = \"xlsx\"\n} = {}) {\n\t/* original data */\n\t// console.log( multiHeader,header,data,filename)\n\tfilename = filename || \"excel-list\";\n\tdata = [...data];\n\tdata.unshift(header);\n\n\tfor (let i = multiHeader.length - 1; i > -1; i--) {\n\t\tdata.unshift(multiHeader[i]);\n\t}\n\n\tlet ws_name = \"SheetJS\";\n\tlet wb = new Workbook(),\n\t\tws = sheet_from_array_of_arrays(data);\n\n\tif (merges.length > 0) {\n\t\tif (!ws[\"!merges\"]) ws[\"!merges\"] = [];\n\t\tmerges.forEach(item => {\n\t\t\tws[\"!merges\"].push(XLSX.utils.decode_range(item));\n\t\t});\n\t}\n\n\tif (autoWidth) ws[\"!cols\"] = getColWidth(data);\n\tif (excelWidth) setColMaxW(data, ws);\n\n\t/* add worksheet to workbook */\n\twb.SheetNames.push(ws_name);\n\twb.Sheets[ws_name] = ws;\n\n\tlet wbout = XLSX.write(wb, {\n\t\tbookType: bookType,\n\t\tbookSST: false,\n\t\ttype: \"binary\"\n\t});\n\tsaveAs(\n\t\tnew Blob([s2ab(wbout)], {\n\t\t\ttype: \"application/octet-stream\"\n\t\t}),\n\t\t`${filename}.${bookType}`\n\t);\n}\n\n// export function readFile(file) {\n// return new Promise((resolve) => {\n// let reader = new FileReader();\n// reader.readAsBinaryString(file);\n// reader.onload = (ev) => {\n// let dataBinary = ev.target.result;\n// let workBook = XLSX.read(dataBinary, { type: \"binary\", cellDates: true });\n// let workSheet = workBook.Sheets[workBook.SheetNames[0]];\n// const data = XLSX.utils.sheet_to_json(workSheet, {defval:\"\"});\n// resolve(data);\n// };\n// });\n// }\n\nexport function readFile(file) {\n\treturn new Promise(resolve => {\n\t\tlet reader = new FileReader();\n\t\treader.readAsBinaryString(file);\n\t\treader.onload = ev => {\n\t\t\tresolve(ev.target.result);\n\t\t};\n\t});\n}\n\n// 读取excel,返回一维数组,第一行格式:{列名:值,列名:值}\nexport async function readExcel(file) {\n\tlet dataBinary = await readFile(file);\n\tlet workBook = XLSX.read(dataBinary, { type: \"binary\", cellDates: true });\n\tlet workSheet = workBook.Sheets[workBook.SheetNames[0]];\n\tconst data = XLSX.utils.sheet_to_json(workSheet, { defval: \"\" });\n\treturn data;\n}\n\n// 读取excel,返回二维数组,第一行表头,后面行是数据\nexport async function readExcelToArray(file) {\n\tlet dataBinary = await readFile(file);\n\tlet workBook = XLSX.read(dataBinary, { type: \"binary\", cellDates: true });\n\tlet workSheet = workBook.Sheets[workBook.SheetNames[0]];\n\tconst data = XLSX.utils.sheet_to_json(workSheet, { defval: \"\", header: 1 });\n\treturn data;\n}\n\nexport async function saveFile(content, fileName) {\n\tlet file = new Blob([content]);\n\tsaveAs(file, fileName);\n}\n\n// 判断列宽\nfunction getColWidth(list) {\n\t/*设置worksheet每列的最大宽度*/\n\tconst colWidth = list.map(row =>\n\t\trow.map(val => {\n\t\t\t/*先判断是否为null/undefined*/\n\t\t\tif (val == null) {\n\t\t\t\treturn {\n\t\t\t\t\twch: 10\n\t\t\t\t};\n\t\t\t} else if (val.toString().charCodeAt(0) > 255) {\n\t\t\t\t/*再判断是否为中文*/\n\t\t\t\treturn {\n\t\t\t\t\twch: val.toString().length * 2\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\twch: val.toString().length\n\t\t\t\t};\n\t\t\t}\n\t\t})\n\t);\n\t/*以第一行为初始值*/\n\tlet result = colWidth[0];\n\tfor (let i = 1; i < colWidth.length; i++) {\n\t\tfor (let j = 0; j < colWidth[i].length; j++) {\n\t\t\tif (result[j][\"wch\"] < colWidth[i][j][\"wch\"]) {\n\t\t\t\tresult[j][\"wch\"] = colWidth[i][j][\"wch\"];\n\t\t\t}\n\t\t}\n\t}\n\treturn result;\n}\n\n// 设置最大列宽\nfunction setColMaxW(list, ws) {\n\t/*设置worksheet每列的最大宽度*/\n\tconst colWidth = list.map(row =>\n\t\trow.map(val => {\n\t\t\t/*先判断是否为null/undefined*/\n\t\t\t// console.log(val)\n\t\t\tif (val == null) {\n\t\t\t\treturn {\n\t\t\t\t\twch: 10\n\t\t\t\t};\n\t\t\t} else if (val.toString().charCodeAt(0) > 255) {\n\t\t\t\t/*再判断是否为中文*/\n\t\t\t\treturn {\n\t\t\t\t\twch: 20\n\t\t\t\t};\n\t\t\t} else if (val.toString().indexOf(\"<operation\") !== -1) {\n\t\t\t\t/* 判断是否为报文数据*/\n\t\t\t\treturn {\n\t\t\t\t\twch: 30\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\twch: val.toString().length\n\t\t\t\t};\n\t\t\t}\n\t\t})\n\t);\n\t// console.log(colWidth)\n\t/*以第一行为初始值*/\n\tlet result = colWidth[0];\n\tfor (let i = 1; i < colWidth.length; i++) {\n\t\tfor (let j = 0; j < colWidth[i].length; j++) {\n\t\t\tif (result[j][\"wch\"] < colWidth[i][j][\"wch\"]) {\n\t\t\t\tresult[j][\"wch\"] = colWidth[i][j][\"wch\"];\n\t\t\t}\n\t\t}\n\t}\n\t// console.log(result)\n\tresult[0].wch = 20;\n\tresult[4] ? (result[4].wch = 10) : \"\";\n\tws[\"!cols\"] = result;\n}\n\n// 导出excel,且可带单元格注释及样式\nconst englishLetter = [\n\t\"A\",\n\t\"B\",\n\t\"C\",\n\t\"D\",\n\t\"E\",\n\t\"F\",\n\t\"G\",\n\t\"H\",\n\t\"I\",\n\t\"J\",\n\t\"K\",\n\t\"L\",\n\t\"M\",\n\t\"N\",\n\t\"O\",\n\t\"P\",\n\t\"Q\",\n\t\"R\",\n\t\"S\",\n\t\"T\",\n\t\"U\",\n\t\"V\",\n\t\"W\",\n\t\"X\",\n\t\"Y\",\n\t\"X\"\n];\nexport function export_excel_style({ header, data, filename, merges = [], autoWidth = true, excelWidth = true } = {}) {\n\t// 创建一个工作簿\n\tconst workBook = XLSX.utils.book_new();\n\tdata = [...data];\n\tdata.unshift(header.map(item => item.label));\n\t// 创建工作表 worksheet\n\tconst workSheet = sheet_from_array_of_arrays(data);\n\tif (merges.length > 0) {\n\t\tif (!workSheet[\"!merges\"]) workSheet[\"!merges\"] = [];\n\t\tmerges.forEach(item => {\n\t\t\tworkSheet[\"!merges\"].push(XLSX.utils.decode_range(item));\n\t\t});\n\t}\n\tif (autoWidth) workSheet[\"!cols\"] = getColWidth(data);\n\tif (excelWidth) setColMaxW(data, workSheet);\n\theader.forEach((head, index) => {\n\t\tlet cell = workSheet[`${englishLetter[index]}1`];\n\t\t// cell.s = { font:{ bold: true } };\n\t\tif (cell && head.note) {\n\t\t\tif (!cell.c) cell.c = [];\n\t\t\tcell.c.hidden = true;\n\t\t\tcell.c.push({ a: head.label, t: head.note });\n\t\t}\n\t});\n\t// 将工作表放入工作簿中\n\tXLSX.utils.book_append_sheet(workBook, workSheet, \"Sheet1\");\n\t// 生成数据保存\n\tXLSXStyle.writeFile(workBook, `${filename}.xlsx`, { bookType: \"xlsx\" });\n}\n\n// 验证文件格式\nexport function checkFileType(file, fileType) {\n\tlet index = file.name.lastIndexOf(\".\");\n\tlet ext = file.name.substr(index);\n\tlet extList = fileType instanceof Array ? fileType : [fileType];\n\tif (fileType === \"Excel\") {\n\t\textList = [\".xls\", \".xlsx\", \".csv\"];\n\t}\n\tif (!extList.includes(ext)) {\n\t\treturn `请上传${extList.join(\"或\") || \"指定格式\"}文件!`;\n\t}\n\treturn \"\";\n}\n\n// 解析文件并判断文件类型\nexport async function parseFile(file, config) {\n\tlet typeErrorMsg = checkFileType(file, config.fileType);\n\tif (typeErrorMsg) return { code: 0, message: typeErrorMsg };\n\tif (config.fileType === \"Excel\") {\n\t\tlet data = await readExcelToArray(file);\n\t\treturn { code: 200, data };\n\t}\n\tlet dataBinary = await readFile(file);\n\treturn { code: 200, data: dataBinary };\n}\n\n// 导出多Sheet Excel\nexport async function exportMultiSheetExcel(fileName, list) {\n\tconst wb = XLSX.utils.book_new();\n\n\t// 使用 Promise 包装异步操作\n\tconst generateSheetAsync = async section => {\n\t\treturn new Promise(resolve => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tconst ws = XLSX.utils.json_to_sheet(section.data);\n\t\t\t\tXLSX.utils.book_append_sheet(wb, ws, section.sheetName.replace(/[\\\\/:*?\\[\\]]/g, \"-\"));\n\t\t\t\tresolve(true);\n\t\t\t}, 0);\n\t\t});\n\t};\n\n\t// 使用 for...of 循环和 await 处理异步操作\n\tfor (const section of list) {\n\t\tawait generateSheetAsync(section);\n\t}\n\n\tconst excelBuffer = XLSX.write(wb, { bookType: \"xlsx\", type: \"array\" });\n\tconst data = new Blob([excelBuffer], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\n\tsaveAs(data, fileName);\n}\n\nexport const exportToExcel = ({ header, tableData, fileName }: any) => {\n\t// 1. 获取表头(columns)并处理为 Excel 中的第一行\n\tconst tHeader = header.map(col => col.label); // 获取每一列的 label 作为表头\n\t// 2. 获取表格数据(data)\n\tconst data = tableData.map(row => {\n\t\treturn header.map(col => row[col.prop]); // 按照表头的顺序排列每行数据\n\t});\n\t// 3. 将表头和数据合并\n\tconst finalData = [tHeader, ...data]; // 把表头和数据组合成一个数组\n\t// 4. 创建工作表(sheet)\n\tconst ws = XLSX.utils.aoa_to_sheet(finalData); // 使用 aoa_to_sheet 转换为工作表\n\tconst wb = XLSX.utils.book_new(); // 创建工作簿\n\tXLSX.utils.book_append_sheet(wb, ws, \"Sheet1\"); // 添加工作表\n\n\t// 5. 导出 Excel 文件\n\tXLSX.writeFile(wb, `${fileName}.xlsx`); // 下载 Excel 文件\n};\n","<!--\n * @Author: WangXin\n * @Date: 2024-01-04 16:35:08\n * @LastEditors: WangXin\n * @LastEditTime: 2025-06-06 15:03:46\n * @FilePath: /yxuse/packages/components/YxTable/index.vue\n * @Description: \n * \n * Copyright (c) 2024 by YuXing, All Rights Reserved. \n-->\n<script setup lang=\"tsx\">\nimport {\n\tref,\n\tonMounted,\n\tonBeforeMount,\n\tnextTick,\n\tuseSlots,\n\tuseAttrs,\n\twithModifiers,\n\twatch,\n\tresolveComponent,\n\tdefineOptions\n} from \"vue\";\nimport type { FormItemRule } from \"element-plus\";\nimport type { TableColumn, YxTableProps, ColumnsConfig } from \"./type.ts\";\nimport { exportToExcel } from \"@packages/utils/excel\";\nimport Sortable from \"sortablejs\";\nconst props = defineProps<YxTableProps>();\nconst slots = useSlots();\nconst attrs = useAttrs();\nconst tableRef = ref();\nconst tableFormRef = ref();\nconst columns = ref<TableColumn[]>([]);\n/**是否为编辑表单,且需要进行表格校验 */\nconst isFormTable = ref(false);\nconst formTableRules = ref<{ [key: string]: FormItemRule[] }>({});\nconst emit = defineEmits<{\n\t(e: \"operate-handle\", type: string, data: object, index: number): void;\n\t(e: \"sort-end\", oldIndex: number, newIndex: number): void;\n\t(e: \"update-page\", type: string, value: number): void;\n}>();\nonMounted(() => {\n\tnextTick(() => {\n\t\tstartSort();\n\t});\n});\nwatch(\n\t() => props.columns,\n\t() => {\n\t\tinitTable();\n\t}\n);\nonBeforeMount(async () => {\n\tawait initTable();\n});\nconst initTable = async () => {\n\tcolumns.value = typeof props.columns === \"function\" ? await props.columns() : props.columns;\n\tcolumns.value.forEach((col: TableColumn) => {\n\t\tif (col.required || col.rules?.length) {\n\t\t\tisFormTable.value = true;\n\t\t}\n\t\tif (col?.renderType && [\"select\", \"cascader\"].includes(col?.renderType) && col?.config?.loadOptions) {\n\t\t\tloadOptions(col.config);\n\t\t}\n\t});\n\tif (isFormTable.value) {\n\t\tgetRules();\n\t}\n};\n/**远程加载下拉数据 */\nconst loadOptions = async (config: any) => {\n\tif (config?.options && config?.options.length === 0 && config?.loadOptions && typeof config?.loadOptions === \"function\") {\n\t\tconfig.options = await config?.loadOptions();\n\t}\n};\nconst startSort = () => {\n\tif (!props.sort) return;\n\tconst sortDom = tableRef.value?.$el?.querySelector(\".el-table__body tbody\");\n\tSortable.create(sortDom, {\n\t\tanimation: 200,\n\t\t// group: \"el-table__row table-row\",\n\t\tsort: true,\n\t\thandle: props.sortHandle ? `.${props.sortHandle}` : null,\n\t\tonEnd: ({ oldIndex, newIndex }: { oldIndex: number; newIndex: number }) => {\n\t\t\temit(\"sort-end\", oldIndex, newIndex);\n\t\t}\n\t});\n};\n/***渲染动态组件 */\nconst dynamicComponent = (column: TableColumn, { $index, row }: any) => {\n\tconst { renderType, event = {}, prop, label, config = {}, required, rules } = column;\n\tif (!prop || !renderType) return null;\n\tconst Component = resolveComponent(\"el-\" + renderType) as any;\n\tconst { options = [], ...restConfig } = config;\n\t// 渲染子组件(如 select 的 options)\n\tconst renderChildComponent = () => {\n\t\tif (!options || options.length === 0) return null;\n\t\tif (renderType === \"select\") {\n\t\t\treturn options.map((item: any) => <el-option label={item.label} value={item.value} key={item.value} />);\n\t\t}\n\t\tif (renderType === \"radio-group\") {\n\t\t\treturn options.map((item: any) => (\n\t\t\t\t<el-radio label={item.value} key={item.value}>\n\t\t\t\t\t{item.label}\n\t\t\t\t</el-radio>\n\t\t\t));\n\t\t}\n\t\treturn null;\n\t};\n\t// 单独处理 cascader\n\tif (renderType === \"cascader\") {\n\t\treturn <el-cascader v-model={row[prop]} placeholder={`请选择${label}`} options={options} {...event} {...restConfig} />;\n\t}\n\t// 通用组件渲染\n\tconst isSelect = [\"select\", \"cascader\"].includes(renderType);\n\t//是否为编辑表格必填项\n\tconst isFormCell = required || rules?.length;\n\tconst modelValue = row[prop];\n\tconst updateModelValue = (val: any) => {\n\t\t//处理配置是数值类型\n\t\trow[prop] = config?.type === \"number\" ? Number(val) : val;\n\t};\n\tconst component = (\n\t\t<Component\n\t\t\tmodelValue={modelValue}\n\t\t\tonUpdate:modelValue={updateModelValue}\n\t\t\tplaceholder={`请${isSelect ? \"选择\" : \"输入\"}${label}`}\n\t\t\t{...event}\n\t\t\t{...restConfig}\n\t\t>\n\t\t\t{renderChildComponent()}\n\t\t</Component>\n\t);\n\tif (!isFormCell) return component;\n\t//编辑表格\n\treturn renderForm(prop, $index, component);\n};\nconst renderForm = (prop: any, index: number, component: any) => {\n\treturn (\n\t\t<el-form-item prop={\"tableData.\" + index + \".\" + prop} rules={formTableRules.value[prop]}>\n\t\t\t{component}\n\t\t</el-form-item>\n\t);\n};\n/**初始化规则 */\nconst getRules = () => {\n\tconst rules: { [key: string]: FormItemRule[] } = {};\n\tif (!isFormTable.value) return;\n\tconst handleRule = (item: TableColumn) => {\n\t\tif (!item.prop) return;\n\t\tconst isSelect = item?.renderType && [\"select\", \"cascader\"].includes(item?.renderType);\n\t\tconst defaultRule = { required: true, message: `${item.label ?? \"该字段\"}不能为空`, trigger: isSelect ? \"change\" : \"blur\" };\n\t\tif (item.required) {\n\t\t\trules[item.prop] = [defaultRule];\n\t\t}\n\t\tif (item.rules && item.rules.length > 0) {\n\t\t\trules[item.prop] = [...(rules[item?.prop] || []), ...item.rules];\n\t\t}\n\t};\n\tcolumns.value\n\t\t.filter(cell => (cell?.renderType || cell?.render) && (cell?.required || cell?.rules))\n\t\t.forEach((form: any) => {\n\t\t\tform.children?.forEach(handleRule); // 处理子项\n\t\t\thandleRule(form); // 处理自身\n\t\t});\n\tformTableRules.value = rules;\n\tconsole.log(\"rules\", formTableRules.value);\n};\n/**编辑表格校验 */\nconst tableFormValidate = async (): Promise<boolean> => {\n\tif (!isFormTable.value) return Promise.resolve(true);\n\tif (!tableFormRef.value) return Promise.resolve(false);\n\treturn await tableFormRef.value.validate(() => Promise.resolve());\n};\nconst render = (props: YxTableProps) => {\n\tconst { rowKey, tableData, pageInfo } = props;\n\t//动态插槽\n\tconst columnSlots = (cell: TableColumn, scope: any) => cell.slotName && slots[cell.slotName]?.(scope);\n\t//处理列;\n\tconst renderColumn = (columns: TableColumn[]) => {\n\t\treturn columns\n\t\t\t.filter(cell => !cell.show || cell.show(cell))\n\t\t\t.map((cell: TableColumn) => {\n\t\t\t\tconst { children, ...cellConf } = cell;\n\t\t\t\treturn (\n\t\t\t\t\t<el-table-column {...cellConf}>\n\t\t\t\t\t\t{{\n\t\t\t\t\t\t\tdefault: (scope: any) => {\n\t\t\t\t\t\t\t\t//先处理操作栏\n\t\t\t\t\t\t\t\tif (cell?.renderType === \"operate\") return renderOperate(cell, scope);\n\t\t\t\t\t\t\t\t//处理动态渲染的组件,绑定动态row\n\t\t\t\t\t\t\t\tif (cell?.renderType && cell?.renderType !== \"operate\") {\n\t\t\t\t\t\t\t\t\treturn dynamicComponent(cell, scope);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t//处理自定义渲染函数,判断是否为表单组件\n\t\t\t\t\t\t\t\tif (cell?.render) {\n\t\t\t\t\t\t\t\t\tconst renderResult = cell.render(scope.row, scope.$index, cell);\n\t\t\t\t\t\t\t\t\t//是否为编辑表单\n\t\t\t\t\t\t\t\t\tconst needsValidation = cell.required || cell.rules;\n\t\t\t\t\t\t\t\t\t//是否为组件节点\n\t\t\t\t\t\t\t\t\tconst isFragment = [\"symbol\", \"object\"].includes(typeof renderResult?.type);\n\t\t\t\t\t\t\t\t\t// 如果为表单节点且需要校验,进行form-item包裹\n\t\t\t\t\t\t\t\t\tif (needsValidation && isFragment) {\n\t\t\t\t\t\t\t\t\t\treturn renderForm(cell.prop, scope.$index, renderResult);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn renderResult;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t//处理多级表头\n\t\t\t\t\t\t\t\tif (children && children?.length > 0) return renderColumn(children);\n\t\t\t\t\t\t\t\t//处理自定义插槽\n\t\t\t\t\t\t\t\treturn cell?.slotName && columnSlots(cell, scope);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\theader: (scope: any) => {\n\t\t\t\t\t\t\t\t//添加必填标识\n\t\t\t\t\t\t\t\tif (cell?.required) {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<span class=\"flex items-center gap-5 required\">\n\t\t\t\t\t\t\t\t\t\t\t{/* <span class=\"text-[var(--color-error-100)]\">* </span> */}\n\t\t\t\t\t\t\t\t\t\t\t{scope?.column?.label ?? \"\"}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t//处理自定义渲染函数\n\t\t\t\t\t\t\t\tif (cell?.headerRender) return cell?.headerRender(scope.row);\n\t\t\t\t\t\t\t\t//处理表头自定义插槽\n\t\t\t\t\t\t\t\tif (cell?.headerSlotName) return slots[cell?.headerSlotName]?.(scope);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t</el-table-column>\n\t\t\t\t);\n\t\t\t});\n\t};\n\t//操作栏;\n\t// const renderOperate = (cell: TableColumn, scope: any) => {\n\t// \treturn (\n\t// \t\t<div class={`flex justify-center items-center cursor-pointer gap-10 ${cell.config?.className ?? \"\"}`}>\n\t// \t\t\t{cell.operate\n\t// \t\t\t\t?.filter(op => !op.show || op.show(scope.row))\n\t// \t\t\t\t.map(op => {\n\t// \t\t\t\t\tif (op?.render) return op.render(scope.row, scope.$index);\n\t// \t\t\t\t\treturn (\n\t// \t\t\t\t\t\t<span\n\t// \t\t\t\t\t\t\tonClick={withModifiers(() => {\n\t// \t\t\t\t\t\t\t\top?.onClick && op?.onClick(scope.row);\n\t// \t\t\t\t\t\t\t\temit(\"operate-handle\", op.key, scope.row, scope.$index);\n\t// \t\t\t\t\t\t\t}, [\"stop\"])}\n\t// \t\t\t\t\t\t\tclass={`table-handle whitespace-nowrap ${op?.className ?? \"\"}`}\n\t// \t\t\t\t\t\t>\n\t// \t\t\t\t\t\t\t{op.label}\n\t// \t\t\t\t\t\t</span>\n\t// \t\t\t\t\t);\n\t// \t\t\t\t})}\n\t// \t\t</div>\n\t// \t);\n\t// };\n\tconst renderOperate = (cell: TableColumn, scope: any) => {\n\t\treturn (\n\t\t\t<div class={`flex justify-center items-center cursor-pointer gap-10 ${cell.config?.className ?? \"\"}`}>\n\t\t\t\t{cell.operate\n\t\t\t\t\t?.filter(op => !op.show || op.show(scope.row))\n\t\t\t\t\t.map(op => {\n\t\t\t\t\t\tif (op?.render) return op.render(scope.row, scope.$index);\n\t\t\t\t\t\tconst disabled = typeof op?.disabled === \"function\" ? op.disabled(scope.row, scope.$index) : op?.disabled ?? false;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tonClick={withModifiers(() => {\n\t\t\t\t\t\t\t\t\tif (!disabled) {\n\t\t\t\t\t\t\t\t\t\top?.onClick && op?.onClick(scope.row);\n\t\t\t\t\t\t\t\t\t\temit(\"operate-handle\", op.key, scope.row, scope.$index);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}, [\"stop\"])}\n\t\t\t\t\t\t\t\tclass={`table-handle whitespace-nowrap ${op?.className ?? \"\"} ${disabled ? \"table-handle-disabled\" : \"\"}`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{op.label}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t</div>\n\t\t);\n\t};\n\t//分页\n\tconst pagination = () => {\n\t\tif (!pageInfo) return null;\n\t\tconst handleSizeChange = (e: number) => {\n\t\t\temit(\"update-page\", \"pageSize\", e);\n\t\t};\n\t\tconst handleCurrentChange = (e: number) => {\n\t\t\temit(\"update-page\", \"pageIndex\", e);\n\t\t};\n\t\treturn (\n\t\t\t<div class=\"pagination-wrap\">\n\t\t\t\t<el-pagination\n\t\t\t\t\tv-model:currentPage={pageInfo.pageIndex}\n\t\t\t\t\tv-model:pageSize={pageInfo.pageSize}\n\t\t\t\t\tsmall={false}\n\t\t\t\t\tdisabled={false}\n\t\t\t\t\tpage-sizes={[10, 20, 50, 100]}\n\t\t\t\t\tlayout={pageInfo?.layout ? pageInfo?.layout : \"total,sizes,prev, pager, next\"}\n\t\t\t\t\tbackground={false}\n\t\t\t\t\ttotal={pageInfo.total}\n\t\t\t\t\tonSizeChange={handleSizeChange}\n\t\t\t\t\tonCurrentChange={handleCurrentChange}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t};\n\tif (!columns.value) return;\n\treturn (\n\t\t<>\n\t\t\t{isFormTable.value ? (\n\t\t\t\t<el-form model={props} ref={tableFormRef}>\n\t\t\t\t\t{renderTable()}\n\t\t\t\t</el-form>\n\t\t\t) : (\n\t\t\t\trenderTable()\n\t\t\t)}\n\t\t\t{pagination()}\n\t\t</>\n\t);\n\t/**渲染表格 */\n\tfunction renderTable() {\n\t\treturn (\n\t\t\t<el-table ref={tableRef} {...attrs} row-key={rowKey} data={tableData}>\n\t\t\t\t{renderColumn(columns.value)}\n\t\t\t</el-table>\n\t\t);\n\t}\n};\nconst exportDataToExcel = (fileName?: string) => {\n\tconst header = columns.value.filter(cell => cell.prop);\n\tconst tableData = props.tableData;\n\texportToExcel({ header, tableData, fileName: fileName || Date.now() });\n};\n/** 更新列 */\nconst updateColumns = async (newColumns: ColumnsConfig) => {\n\tif (!columns.value) return;\n\tcolumns.value = typeof newColumns === \"function\" ? await newColumns() : newColumns;\n};\ndefineExpose({\n\ttableRef,\n\texportDataToExcel,\n\tupdateColumns,\n\ttableFormValidate\n});\ndefineOptions({\n\tname: \"YxTable\",\n\tinheritAttrs: false\n});\n</script>\n\n<template>\n\t<component :is=\"render(props)\" />\n</template>\n\n<style scoped lang=\"scss\"></style>\n","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 1024 1024\"\n}\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _cache[0] || (_cache[0] = [\n _createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592q0-64.416-42.24-101.376c-28.16-25.344-65.472-37.312-111.232-37.312m-12.672 406.208a54.27 54.27 0 0 0-38.72 14.784 49.4 49.4 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.85 54.85 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.97 51.97 0 0 0-15.488-38.016 55.94 55.94 0 0 0-39.424-14.784\"\n }, null, -1)\n ])))\n}\nexport default { render: render }","<!--\n * @Author: WangXin\n * @Date: 2023-06-08 10:10:13\n * @LastEditors: WangXin\n * @LastEditTime: 2025-06-06 14:58:42\n * @FilePath: /yxuse/packages/components/YxForm/index.vue\n * @Description: \n * \n * Copyright (c) 2023 by YuXing, All Rights Reserved. \n-->\n<script setup lang=\"tsx\">\nimport { ref, useAttrs, useSlots, resolveComponent, watch, onBeforeMount, onUnmounted } from \"vue\";\nimport type { FormInstance, FormItemRule } from \"element-plus\";\nimport type { YxFormProps, FormItem, FormStyle } from \"./type\";\nimport Question from \"./icon/question.svg?component\";\nconst formData = ref<{ [key: string]: any }>({});\nconst formRules = ref<{ [key: string]: FormItemRule[] }>({});\nconst formColumn = ref<FormItem[]>([]);\nconst attrs = useAttrs();\nconst props = withDefaults(defineProps<YxFormProps>(), {\n\tformLayout: \"horizontal\",\n\tformStyle: () => ({\n\t\trow: 3,\n\t\tgap: \"15px\",\n\t\tlabelWidth: \"100px\",\n\t\talignItems: \"start\"\n\t})\n});\nconst isOptionsComponent = (type?: string): any => type && [\"select\", \"cascader\"].includes(type);\n//初始化表单data\nconst initForm = async () => {\n\tconst { formList, formParams } = props as YxFormProps;\n\t// 获取表单配置\n\tformColumn.value = typeof formList === \"function\" ? await formList() : formList;\n\tif (!Array.isArray(formColumn.value) || formColumn.value.length === 0) {\n\t\tconsole.warn(\"请配置表单项\");\n\t\treturn;\n\t}\n\t// 初始化表单数据\n\tconst initialData: Record<string, any> = {};\n\t// 填充默认值并加载选项(递归处理嵌套)\n\tconst fillFormData = (item: any) => {\n\t\tif (item.prop && !(item.prop in initialData)) {\n\t\t\tinitialData[item.prop] = undefined;\n\t\t}\n\t\tif (isOptionsComponent(item?.renderType)) {\n\t\t\tloadOptions(item); // 异步加载选项数据\n\t\t}\n\t\tif (Array.isArray(item.children)) {\n\t\t\titem.children.forEach(fillFormData);\n\t\t}\n\t\t//如果有配置关联的选项\n\t\thandleLinkOptions(item);\n\t};\n\tformColumn.value.forEach(item => fillFormData(item));\n\t// 编辑模式下回填数据\n\tif (formParams && Object.keys(formParams).length > 0) {\n\t\tif (hasLoadOptions()) {\n\t\t\tfor (const item of formColumn.value) {\n\t\t\t\tif (!item.prop) continue;\n\t\t\t\tconst isAsyncOption = item.config?.loadOptions && typeof item.config.loadOptions === \"function\";\n\t\t\t\t// 如果不是需要跳过赋值的字段,就赋值\n\t\t\t\tif (!(isAsyncOption && formParams[item.prop] !== undefined)) {\n\t\t\t\t\tformData.value[item.prop] = formParams[item.prop];\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t//兼容老版本回写formParams数据\n\t\t\tformData.value = formParams;\n\t\t}\n\t} else {\n\t\tconsole.log(\"initialData\", initialData);\n\t\tformData.value = initialData;\n\t}\n\tconsole.log(\"formData\", formData.value);\n};\n/**处理关联选项的逻辑 */\nconst handleLinkOptions = (item: any) => {\n\tif (!item.config?.linkOptions || item?._linkedHandled) return;\n\tconst linkOptions = item.config.linkOptions;\n\tconst originOnChange = item.event?.onChange;\n\tconst newOnChange = async (e: any) => {\n\t\tconsole.log(\"执行事件\", e);\n\t\t// 执行你自己的逻辑\n\t\tconst updateForm: FormItem = formColumn.value.find((form: any) => form?.prop === linkOptions) as any;\n\t\t//没有自定义事件,不做处理\n\t\tif (!updateForm || !updateForm?.config?.loadOptions) return;\n\t\tconst options = await updateForm.config.loadOptions(e);\n\t\t//更新options\n\t\tupdateForm.config.options = options;\n\t\t// 调用原始事件\n\t\tif (typeof originOnChange === \"function\") {\n\t\t\toriginOnChange(e);\n\t\t}\n\t};\n\t// 保证 event 是对象\n\titem.event = {\n\t\t...item.event,\n\t\tonChange: newOnChange\n\t};\n\t//添加处理标识\n\titem._linkedHandled = true;\n};\n/**表单配置中是否有loadOptions兼容老版本formParams回写数据 */\nconst hasLoadOptions = () => {\n\treturn formColumn.value.some(item => item.config?.loadOptions && typeof item.config.loadOptions === \"function\");\n};\n/**远程加载下拉数据 */\nconst loadOptions = async ({ config, prop }: FormItem) => {\n\t//不自动加载选项\n\tif (!config || config.notAutoLoadOptions) return;\n\tconst { loadOptions, options } = config;\n\tif (!options || typeof loadOptions !== \"function\") return;\n\tconst { formParams } = props as YxFormProps;\n\t//回写联级表单\n\tconst parentProp = formColumn.value.find((item: any) => item?.config?.linkOptions === prop)?.prop;\n\tconst parentValue = parentProp ? formParams?.[parentProp] : undefined;\n\ttry {\n\t\tconfig.options = await loadOptions(parentValue);\n\t\t// 回填下拉框数据\n\t\tif (prop && formParams?.[prop]) {\n\t\t\tformData.value[prop] = formParams[prop];\n\t\t}\n\t} catch (err) {\n\t\tconsole.error(`加载选项失败: ${prop}`, err);\n\t}\n};\n//监听form配置更新后,则立即初始化form\nwatch(\n\t() => props.formList,\n\tformList => {\n\t\tif (formList.length > 0) {\n\t\t\tconsole.log(\"监听到了,formlist\", formList);\n\t\t\tinitForm();\n\t\t\tgetRules();\n\t\t}\n\t}\n);\n//监听默认参数变化后,重置form\nwatch(\n\t() => props.formParams,\n\tformParams => {\n\t\tif (formParams) {\n\t\t\tconsole.log(\"监听到了,formlist\");\n\t\t\tinitForm();\n\t\t}\n\t}\n);\n\n/**初始化规则 */\nconst getRules = () => {\n\tconst rules: { [key: string]: FormItemRule[] } = {};\n\tif (!formColumn.value?.length) return;\n\tconst handleRule = (item: FormItem) => {\n\t\tif (!item.prop) return;\n\t\tconst isSelect = item?.renderType && [\"select\", \"cascader\"].includes(item?.renderType);\n\t\tconst defaultRule = { required: true, message: `${item.label ?? \"该字段\"}不能为空`, trigger: isSelect ? \"change\" : \"blur\" };\n\t\tif (item.required) {\n\t\t\trules[item.prop] = [defaultRule];\n\t\t}\n\t\tif (item.rules && item.rules.length > 0) {\n\t\t\trules[item.prop] = [...(rules[item?.prop] || []), ...item.rules];\n\t\t}\n\t};\n\tformColumn.value.forEach((form: any) => {\n\t\tform.children?.forEach(handleRule); // 处理子项\n\t\thandleRule(form); // 处理自身\n\t});\n\tformRules.value = rules;\n\tconsole.log(\"rules\", rules);\n};\n\nonBeforeMount(async () => {\n\tif (props.formList) {\n\t\tawait initForm();\n\t\tgetRules();\n\t}\n});\nonUnmounted(() => {\n\t// formRef?.value && formRef?.value.resetFields();\n});\nconst formRef = ref<FormInstance>();\nconst getFormStyle = () => {\n\tconst { formStyle } = props;\n\tconst { row, gap, ...style } = formStyle as FormStyle;\n\treturn {\n\t\t\"grid-template-columns\": `repeat(${row}, 1fr)`,\n\t\t\"grid-gap\": gap,\n\t\t...style\n\t};\n};\n//分组样式\nconst getGroupStyle = (groupStyle: FormStyle) => {\n\tif (!groupStyle) return {};\n\tconst { row, gap, ...style } = groupStyle;\n\treturn {\n\t\t\"grid-template-columns\": `repeat(${row}, 1fr)`,\n\t\t\"grid-gap\": gap,\n\t\t...style\n\t};\n};\n/**动态渲染组件 */\nconst dynamicComponent = ({ renderType, event, prop, label, config }: FormItem) => {\n\tif (!prop) return;\n\tconst { options, ...conf } = config || {};\n\tif (renderType === \"cascader\")\n\t\treturn (\n\t\t\t<el-cascader\n\t\t\t\t{...event}\n\t\t\t\t{...conf}\n\t\t\t\toptions={options}\n\t\t\t\tv-model={formData.value[prop]}\n\t\t\t\tplaceholder={`请选择${label}`}\n\t\t\t></el-cascader>\n\t\t);\n\tconst Component = resolveComponent(\"el-\" + renderType) as any;\n\tconst renderChildComponent = () => {\n\t\tif (renderType === \"select\" && config?.options) {\n\t\t\treturn config?.options.map((item: any) => <el-option label={item.label} value={item.value} />);\n\t\t} else if (renderType === \"radio-group\" && config?.options) {\n\t\t\treturn config?.options.map((item: any) => <el-radio label={item.label} value={item.value} />);\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t};\n\tconst isSelect = renderType && [\"select\", \"cascader\"].includes(renderType);\n\treturn (\n\t\t<Component {...event} placeholder={`请${isSelect ? \"选择\" : \"输入\"}${label}`} {...conf} v-model={formData.value[prop]}>\n\t\t\t{renderChildComponent()}\n\t\t</Component>\n\t);\n};\nconst render = (props: YxFormProps) => {\n\tconst { formStyle, formLayout } = props;\n\tif (!formColumn.value?.length) return;\n\tconst slots = useSlots();\n\tconsole.log(\"slots\", slots);\n\t//动态插槽\n\tconst formItemSlots = (form: FormItem) => form.slotName && slots[form.slotName]?.(formData.value);\n\tconst renderFormItem = (formList: any[]) => {\n\t\tconst renderForm = (form: FormItem) => {\n\t\t\tconst { className, ...formProps } = form;\n\t\t\treturn (\n\t\t\t\t<el-form-item\n\t\t\t\t\tclass={`${formLayout === \"vertical\" ? \"flex flex-col \" : \"\"} ${formStyle?.formItemClassName ?? \"\"} ${className ?? \"\"} ${\n\t\t\t\t\t\t!form.label ? \"no-label-item\" : \"\"\n\t\t\t\t\t}`}\n\t\t\t\t\t{...formProps}\n\t\t\t\t\tprop={form.prop}\n\t\t\t\t\tlabelWidth={formStyle?.labelWidth}\n\t\t\t\t\tkey={form.prop}\n\t\t\t\t>\n\t\t\t\t\t{{\n\t\t\t\t\t\tdefault: () => {\n\t\t\t\t\t\t\tif (form?.render) return form?.render(formData.value);\n\t\t\t\t\t\t\tif (form.renderType) return dynamicComponent(form);\n\t\t\t\t\t\t\treturn form?.slotName && formItemSlots(form);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlabel: () =>\n\t\t\t\t\t\t\tform.label ? (\n\t\t\t\t\t\t\t\t<div class={`flex items-center gap-5 ${form.labelClassName ?? \"\"}`}>\n\t\t\t\t\t\t\t\t\t{form.label}\n\t\t\t\t\t\t\t\t\t{form.promptConf ? (\n\t\t\t\t\t\t\t\t\t\t<el-tooltip {...form.promptConf?.tooltipConf}>\n\t\t\t\t\t\t\t\t\t\t\t<el-icon size={form.promptConf?.size ?? 15} color={form.promptConf?.color}>\n\t\t\t\t\t\t\t\t\t\t\t\t<Question />\n\t\t\t\t\t\t\t\t\t\t\t</el-icon>\n\t\t\t\t\t\t\t\t\t\t</el-tooltip>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : null\n\t\t\t\t\t}}\n\t\t\t\t</el-form-item>\n\t\t\t);\n\t\t};\n\t\t//处理分组的情况\n\t\treturn formList\n\t\t\t.filter(form => !form.show || form.show(formData.value))\n\t\t\t.map((form: FormItem) => {\n\t\t\t\tif (form.children && form.children.length > 0) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div class={`flex flex-col ${form.groupWrapClassName ?? \"\"}`} style={{ ...form?.groupWrapStyle }}>\n\t\t\t\t\t\t\t<div class={form.groupTitleClassName ?? \"\"} style={{ ...form?.groupTitleStyle }}>\n\t\t\t\t\t\t\t\t{form.groupName}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class={`grid ${form.groupClassName ?? \"\"}`} style={{ ...getGroupStyle(form?.groupStyle ?? {}) }}>\n\t\t\t\t\t\t\t\t{form.children.filter(form => !form.show || form.show(formData.value)).map(form => renderForm(form))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\treturn renderForm(form);\n\t\t\t\t}\n\t\t\t});\n\t};\n\treturn (\n\t\t<>\n\t\t\t<el-form\n\t\t\t\tscroll-to-error\n\t\t\t\tmodel={formData.value}\n\t\t\t\trules={formRules.value}\n\t\t\t\tclass=\"grid\"\n\t\t\t\tref={formRef}\n\t\t\t\tvalidate-on-rule-change={false}\n\t\t\t\t{...attrs}\n\t\t\t\tstyle={{ ...getFormStyle() }}\n\t\t\t>\n\t\t\t\t{renderFormItem(formColumn.value)}\n\t\t\t</el-form>\n\t\t</>\n\t);\n};\n//表单验证\nconst formValidate = async (): Promise<boolean> => {\n\tif (!formRef.value) return Promise.resolve(false);\n\treturn await formRef.value.validate(() => Promise.resolve());\n};\ndefineExpose({\n\tformData,\n\tformValidate,\n\tformRef\n});\ndefineOptions({\n\tname: \"YxForm\"\n});\n</script>\n<template>\n\t<component :is=\"render(props)\" />\n</template>\n<style scoped lang=\"scss\">\n.no-label-item :deep() .el-form-item__label {\n\tpadding-right: 0;\n\theight: 0;\n\tline-height: 0;\n}\n</style>\n","/*\n * @Author: WangXin\n * @Date: 2023-12-06 17:21:49\n * @LastEditors: WangXin\n * @LastEditTime: 2023-12-08 10:35:59\n * @FilePath: \\yxUse\\packages\\utils\\common\\update.ts\n * @Description:\n *\n * Copyright (c) 2023 by YuXing, All Rights Reserved.\n */\nimport { Update } from \"@packages/components\";\nimport { createApp } from \"vue\";\nlet versionKey, versionJsonUrl, _timer, curVersion, updateApp, timeGap;\n//每5分钟请求一次\nexport const monitorUpdate = (systemName, gap = 300) => {\n\ttimeGap = gap;\n\ttimedExecution(systemName);\n};\nconst timedExecution = systemName => {\n\t_timer = setTimeout(() => {\n\t\tgetVersion(systemName);\n\t\t_timer && clearTimeout(_timer);\n\t\ttimedExecution(systemName);\n\t\t// localStorage.removeItem(versionKey + \"delayTime\");\n\t}, timeGap * 1000);\n};\nconst getVersion = async (systemName: string) => {\n\tversionKey = `${systemName}_version`;\n\tconst systemPre = window.location.pathname.split(\"/\")[1] || \"ttc\";\n\tconsole.log(versionKey, systemPre);\n\t// versionJsonUrl = `/${systemPre}/${systemName}/version.json`;\n\tversionJsonUrl = \"/version.json\";\n\tconst oldVersion = localStorage.getItem(versionKey) || \"\";\n\tconst data = await fetch(versionJsonUrl, { cache: \"no-cache\" });\n\tconst { version, message, isNotice } = await data.json();\n\t// 没有历史版本则给缓存注入版本\n\tif (!oldVersion) {\n\t\tlocalStorage.setItem(versionKey, version);\n\t}\n\t//如果新版本与用户当前版本不一致,则提醒用户有版本更新\n\n\tif (oldVersion !== version) {\n\t\tif (isNotice) {\n\t\t\t//通知用户\n\t\t\tconsole.log(\"监测到有新版本\", version);\n\t\t\tnoticeUser(message);\n\t\t}\n\t\tcurVersion = version;\n\t}\n};\n//立即更新\nexport const updateSysVersion = () => {\n\tlocalStorage.setItem(versionKey, curVersion);\n\twindow.location.reload(true);\n};\n//暂不更新,加入延迟时间1小时\nexport const delayUpdateSysVersion = () => {\n\t//隐藏弹窗\n\tupdateApp.unmount();\n\tdocument.body.removeChild(document.querySelector(\"#update\"));\n\tlocalStorage.setItem(versionKey, curVersion);\n};\nconst noticeUser = message => {\n\tif (!document.querySelector(\"#update\")) {\n\t\tconst div = document.createElement(\"div\");\n\t\tdiv.setAttribute(\"id\", \"update\");\n\t\tdiv.style.position = \"absolute\";\n\t\tdiv.style.width = \"100%\";\n\t\tdiv.style.height = \"100%\";\n\t\tdiv.style.top = \"0\";\n\t\tdiv.style.left = \"0\";\n\t\tdocument.body.appendChild(div);\n\t\tupdateApp = createApp(Update, message);\n\t\tupdateApp.mount(\"#update\");\n\t}\n};\n","<script setup lang=\"ts\">\nimport { ref, reactive, defineProps } from \"vue\";\nimport { updateSysVersion, delayUpdateSysVersion } from \"@packages/utils/common/update\";\n// const props =\ninterface UpdateProps {\n\ttitle: String;\n\tdescription: String;\n\tcontent: Object;\n\ttime: String;\n}\n\nconst props = defineProps<UpdateProps>();\nconsole.log(props);\n</script>\n<template>\n\t<div class=\"update-wrap flex items-center justify-center\">\n\t\t<div class=\"relative update-content\">\n\t\t\t<div class=\"flex items-center justify-center\">{{ props?.title }}</div>\n\t\t\t<div class=\"flex flex-col gap-5 mt-10\">\n\t\t\t\t<div class=\"update-title\">{{ props?.description }}</div>\n\t\t\t\t<div class=\"update-item px-20\" v-for=\"(item, key) in props?.content\">\n\t\t\t\t\t<span>{{ key }}:</span> <span>{{ item }}</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-end\">{{ props.time }} 软件专业部</div>\n\t\t\t\t<div class=\"flex justify-end items-center mt-10\">\n\t\t\t\t\t<el-button plain @click=\"delayUpdateSysVersion\">暂不更新</el-button>\n\t\t\t\t\t<el-button @click=\"updateSysVersion\">立即更新</el-button>\n\t\t\t\t</div>\n\t\t\t\t<span class=\"tips mt-10\"\n\t\t\t\t\t>提示: 选择立即更新后,会立即刷新页面更新系统,当前页面缓存数据会消失选择暂不更新后,请稍后自行刷新页面更新系统。</span\n\t\t\t\t>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n<style scoped lang=\"scss\">\n.update-wrap {\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tbackground: var(--dialog-overlay-background);\n\tz-index: 9999;\n\tcolor: var(--dialog-header-text-color);\n\tfont-family: YX-TEXT;\n\t.update-content {\n\t\twidth: 30%;\n\t\theight: fit-content;\n\t\tbackground: var(--dialog-background);\n\t\tborder-radius: var(--border-radius-medium);\n\t\tpadding: 20px 20px 10px 20px;\n\t\tbox-sizing: border-box;\n\t\t.tips {\n\t\t\tfont-size: 12px;\n\t\t}\n\t}\n}\n</style>\n","<!--\n * @Author: WangXin\n * @Date: 2024-04-02 20:01:00\n * @LastEditors: WangXin\n * @LastEditTime: 2024-04-11 15:11:58\n * @FilePath: /yxuse/packages/components/YxIcon/index.vue\n * @Description: \n * \n * Copyright (c) 2024 by YuXing, All Rights Reserved. \n-->\n<template>\n\t<i class=\"yx-icon\" :style=\"[{ '--color': color, 'font-size': size + 'px' }]\">\n\t\t<slot />\n\t</i>\n</template>\n\n<script>\n// import { version, createApp } from \"vue\";\n// console.log(this.$options);\nexport default {\n\tprops: {\n\t\tcolor: {\n\t\t\ttype: String,\n\t\t\tdefault: \"inherit\"\n\t\t},\n\t\tsize: {\n\t\t\ttype: String,\n\t\t\tdefault: \"16\"\n\t\t}\n\t}\n};\n</script>\n\n<style scoped>\n.yx-icon {\n\t--color: inherit;\n\tposition: relative;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 1em;\n\theight: 1em;\n\tline-height: 1em;\n\tcolor: var(--color);\n\tfill: currentColor;\n}\n</style>\n","<!--\r\n * @Author: WangXin\r\n * @Date: 2024-03-20 09:40:21\r\n * @LastEditors: WangXin\r\n * @LastEditTime: 2025-05-22 09:26:11\r\n * @FilePath: /yxuse/packages/components/YxUpload/index.vue\r\n * @Description: \r\n * \r\n * Copyright (c) 2024 by YuXing, All Rights Reserved. \r\n-->\r\n<script setup lang=\"tsx\">\r\nimport { ref, useAttrs, useSlots } from \"vue\";\r\nimport type { UploadProps, UploadRawFile, UploadUserFile, UploadInstance } from \"element-plus\";\r\nimport { genFileId } from \"element-plus\";\r\nimport type { YxUploadProps } from \"./type\";\r\nimport { assets } from \"@packages/api\";\r\nconst attrs = useAttrs();\r\nconst slots = useSlots();\r\nconst fileList = ref<UploadUserFile[]>([]);\r\nconst props = defineProps<YxUploadProps>();\r\nlet uploadFileList: UploadUserFile[] = [];\r\nconst fileObsUrl = ref(\"\");\r\nconst upload = ref<UploadInstance>();\r\nconst emit = defineEmits<{\r\n\t(e: \"update:fileObsUrl\", value: string): void;\r\n\t(e: \"getFile\", value: any): void;\r\n}>();\r\nconst uploadFile = async (file: any) => {\r\n\tif (props?.customUpload) {\r\n\t\treturn props?.customUpload(file);\r\n\t}\r\n\tconst fromData = new FormData();\r\n\tfromData.append(\"file\", file);\r\n\tconst { data } = await (props?.uploadResourceApi ? props?.uploadResourceApi(fromData) : assets.uploadResourceApi(fromData));\r\n\tfileObsUrl.value = data.fileUrl;\r\n\temit(\"update:fileObsUrl\", fileObsUrl.value);\r\n};\r\nconst onExceed: UploadProps[\"onExceed\"] = async files => {\r\n\tupload.value!.clearFiles();\r\n\tconst file = files[0] as UploadRawFile;\r\n\tfile.uid = genFileId();\r\n\tupload.value!.handleStart(file);\r\n};\r\nconst onChange = async (file: UploadUserFile, uploadFiles: UploadUserFile[]) => {\r\n\tuploadFileList = uploadFiles;\r\n\tif (attrs?.limit && attrs?.limit === 1) {\r\n\t\tawait uploadFile(uploadFileList[0]?.raw);\r\n\t} else {\r\n\t\tawait uploadFile(uploadFileList);\r\n\t}\r\n};\r\n/**多文件使用 getFileList*/\r\nconst getFileList = () => uploadFileList;\r\ndefineExpose({ upload, getFileList });\r\nconst render = (props: YxUploadProps) => {\r\n\tconst defaultTrigger = () => {\r\n\t\treturn <el-button>{props.triggerText ?? \"上传文件\"}</el-button>;\r\n\t};\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<el-upload\r\n\t\t\t\tref={upload}\r\n\t\t\t\tclass=\"w-full h-full\"\r\n\t\t\t\thttp-request={uploadFile}\r\n\t\t\t\tfile-list={fileList.value}\r\n\t\t\t\t{...attrs}\r\n\t\t\t\ton-exceed={onExceed}\r\n\t\t\t\ton-change={onChange}\r\n\t\t\t\tauto-upload={false}\r\n\t\t\t>\r\n\t\t\t\t{{\r\n\t\t\t\t\ttrigger: () => {\r\n\t\t\t\t\t\treturn props?.triggerRender\r\n\t\t\t\t\t\t\t? props?.triggerRender(fileObsUrl.value)\r\n\t\t\t\t\t\t\t: slots[\"trigger\"]\r\n\t\t\t\t\t\t\t? slots[\"trigger\"]()\r\n\t\t\t\t\t\t\t: defaultTrigger();\r\n\t\t\t\t\t},\r\n\t\t\t\t\ttip: () => {\r\n\t\t\t\t\t\treturn <div class=\"el-upload__tip\">{props?.uploadTips}</div>;\r\n\t\t\t\t\t}\r\n\t\t\t\t}}\r\n\t\t\t</el-upload>\r\n\t\t</>\r\n\t);\r\n};\r\n</script>\r\n<template>\r\n\t<component :model-value=\"fileObsUrl\" :is=\"render(props)\" />\r\n</template>\r\n<style scoped lang=\"scss\"></style>\r\n","<!--\n * @Author: WangXin\n * @Date: 2025-05-08 14:48:05\n * @LastEditors: WangXin\n * @LastEditTime: 2025-05-12 10:02:39\n * @FilePath: /yxuse/packages/components/LogoTitle/index.vue\n * @Description: \n * \n * Copyright (c) ${2024} by YuXing, All Rights Reserved. \n-->\n<script lang=\"ts\">\nimport { auth } from \"@packages/api\";\nimport type { SystemConfig } from \"./type\";\nexport default {\n\tname: \"LogoTitle\",\n\tprops: {\n\t\tshowLogo: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tshowTitle: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tlogoCanJump: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tcustomConfig: {\n\t\t\t\ticonStyle: {\n\t\t\t\t\twidth: \"116px\",\n\t\t\t\t\theight: \"20px\"\n\t\t\t\t}\n\t\t\t} as SystemConfig\n\t\t};\n\t},\n\tasync created() {\n\t\ttry {\n\t\t\tconst data = await auth.getUserConfig();\n\t\t\tthis.customConfig = {\n\t\t\t\t...this.customConfig,\n\t\t\t\t...data\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tconsole.error(\"获取用户配置失败\", e);\n\t\t}\n\t},\n\tmethods: {\n\t\tlogoJumpHandle() {\n\t\t\tif (this.customConfig?.logoCanJump === false) return;\n\t\t\tauth.jumpToHome();\n\t\t}\n\t}\n};\n</script>\n\n<template>\n\t<div\n\t\tclass=\"flex items-center gap-x-10 logo-wrap\"\n\t\t:class=\"{ 'cursor-pointer': customConfig?.logoCanJump !== false }\"\n\t\t@click=\"logoJumpHandle\"\n\t>\n\t\t<div\n\t\t\tv-if=\"showLogo && customConfig?.icon\"\n\t\t\t:style=\"customConfig.iconStyle\"\n\t\t\tclass=\"yx-icon theme-icon\"\n\t\t\tv-html=\"customConfig.icon\"\n\t\t/>\n\t\t<div\n\t\t\t:style=\"customConfig.titleStyle\"\n\t\t\tv-if=\"showTitle && customConfig?.title\"\n\t\t\tclass=\"text-xl text-[var(--text-color-title)] title\"\n\t\t>\n\t\t\t{{ customConfig?.title }}\n\t\t</div>\n\t</div>\n</template>\n\n<style scoped>\n.logo-wrap {\n\tline-height: 1;\n}\n.yx-icon :deep() svg {\n\tvertical-align: middle;\n}\n</style>\n","/*\n * @Author: WangXin\n * @Date: 2025-05-08 14:48:05\n * @LastEditors: WangXin\n * @LastEditTime: 2025-05-08 18:01:08\n * @FilePath: /yxuse/packages/components/LogoTitle/index.ts\n * @Description:\n *\n * Copyright (c) ${2024} by YuXing, All Rights Reserved.\n */\nexport { default as LogoTitle } from \"./index.vue\";\nimport { version, createApp } from \"vue\";\nimport type { LogoTitleProps } from \"./type\";\nimport LogoTitle from \"./index.vue\";\nexport class LogoTitleRender {\n\tconstructor(props: LogoTitleProps, domId: string = \"system-logo-title\") {\n\t\tthis.render(props, domId);\n\t}\n\tget vueVersion(): \"2\" | \"3\" {\n\t\treturn version[0] as `${\"2\" | \"3\"}`;\n\t}\n\trender(props: LogoTitleProps, domId: string) {\n\t\tif (this.vueVersion === \"3\") {\n\t\t\tcreateApp(LogoTitle, props).mount(`#${domId}`);\n\t\t} else {\n\t\t\tconst Vue = require(\"vue\");\n\t\t\treturn new Vue({ render: h => h(LogoTitle, { props }) }).$mount(`#${domId}`);\n\t\t}\n\t}\n}\n"],"names":["submit","XLSX.utils","XLSX.writeFile","_isSlot","s","Object","prototype","toString","call","_isVNode","props","__props","slots","useSlots","attrs","useAttrs","tableRef","ref","tableFormRef","columns","isFormTable","formTableRules","emit","__emit","onMounted","nextTick","startSort","watch","initTable","onBeforeMount","value","forEach","col","required","rules","length","renderType","includes","config","loadOptions","getRules","options","sort","sortDom","$el","querySelector","Sortable","create","animation","handle","sortHandle","onEnd","oldIndex","newIndex","dynamicComponent","column","$index","row","_slot","event","prop","label","Component","resolveComponent","restConfig","renderChildComponent","map","item","_createVNode","_resolveComponent","default","_mergeProps","$event","isSelect","isFormCell","modelValue","updateModelValue","val","type","Number","component","renderForm","index","handleRule","defaultRule","message","trigger","filter","cell","render","form","children","tableFormValidate","Promise","resolve","validate","_slot2","rowKey","tableData","pageInfo","columnSlots","scope","slotName","renderColumn","show","cellConf","renderOperate","renderResult","needsValidation","isFragment","header","headerRender","headerSlotName","className","operate","op","disabled","withModifiers","onClick","key","pagination","handleSizeChange","e","handleCurrentChange","pageIndex","pageSize","layout","total","_Fragment","renderTable","_slot3","exportDataToExcel","fileName","exportToExcel","Date","now","updateColumns","newColumns","__expose","_hoisted_1","_openBlock","_createElementBlock","_createElementVNode","formData","formRules","formColumn","isOptionsComponent","initForm","formList","formParams","Array","isArray","initialData","fillFormData","undefined","handleLinkOptions","keys","hasLoadOptions","isAsyncOption","linkOptions","_linkedHandled","originOnChange","onChange","newOnChange","updateForm","find","some","notAutoLoadOptions","parentProp","parentValue","err","onUnmounted","formRef","getFormStyle","formStyle","gap","style","getGroupStyle","groupStyle","conf","formLayout","formItemSlots","renderFormItem","formProps","formItemClassName","labelWidth","labelClassName","promptConf","tooltipConf","size","color","Question","groupWrapClassName","groupWrapStyle","groupTitleClassName","groupTitleStyle","groupName","groupClassName","formValidate","_sfc_main","_normalizeStyle","_renderSlot","fileList","uploadFileList","fileObsUrl","upload","uploadFile","file","customUpload","fromData","FormData","append","data","uploadResourceApi","assets","fileUrl","onExceed","files","clearFiles","uid","genFileId","handleStart","uploadFiles","limit","raw","getFileList","defaultTrigger","triggerText","triggerRender","tip","uploadTips","auth.getUserConfig","auth.jumpToHome","_normalizeClass","_createCommentVNode","_toDisplayString"],"mappings":"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"}
|
package/lib/index.es7.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.es7.js","sources":["../packages/yxi18n/index.ts"],"sourcesContent":["/*\n * @Author: WangXin\n * @Date: 2024-04-24 11:20:12\n * @LastEditors: WangXin\n * @LastEditTime: 2024-11-18 18:27:21\n * @FilePath: /yxuse/packages/yxi18n/index.ts\n * @Description:\n *\n * Copyright (c) ${2024} by YuXing, All Rights Reserved.\n */\nimport { createI18n } from \"vue-i18n\";\n// import { getLang } from \"@packages/translate\";\nimport { auth } from \"@packages/api\";\nconst messages = {};\nwindow.lang = auth.getSystemConfig(\"lang\");\nconst yxi18n = createI18n({\n\tlocale: window.lang || \"zh\",\n\tfallbackLocale: \"zh\",\n\tfallbackWarn: true, // 禁止警告\n\tmissing: (locale, key) => key,\n\tmessages\n});\nwindow.$yxi18n = yxi18n.global.t;\nexport default yxi18n;\n"],"names":["auth.getSystemConfig"],"mappings":";;AAaA,MAAM,WAAW,CAAC;AAClB,OAAO,OAAOA,gBAAqB,MAAM;AACzC,MAAM,SAAS,WAAW;AAAA,EACzB,QAAQ,OAAO,QAAQ;AAAA,EACvB,gBAAgB;AAAA,EAChB,cAAc;AAAA;AAAA,EACd,SAAS,CAAC,QAAQ,QAAQ;AAAA,EAC1B;AACD,CAAC;AACD,OAAO,UAAU,OAAO,OAAO;;;;;"}
|
package/lib/index.es8.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.es8.js","sources":["../packages/directives/modules/auth.ts","../packages/directives/index.ts"],"sourcesContent":["/*\n * @Author: WangXin\n * @Date: 2023-09-15 10:33:59\n * @LastEditors: WangXin\n * @LastEditTime: 2023-09-15 10:37:28\n * @FilePath: \\yxUse\\packages\\directives\\modules\\auth.ts\n * @Description:\n *\n * Copyright (c) 2023 by YuXing, All Rights Reserved.\n */\nimport type { Directive, DirectiveBinding } from \"vue\";\nimport { getUserIsHaveBtnPower } from \"@packages/api/auth\";\nconst auth: Directive = {\n\tmounted(el, binding) {\n\t\tcontrolShowByUserPower(el, binding);\n\t}\n};\nconst controlShowByUserPower = (el: HTMLElement, binding: DirectiveBinding) => {\n\tconst value = binding.value as never;\n\treturn !getUserIsHaveBtnPower(value) ? el.remove() : \"\";\n};\nexport default auth;\n","/*\n * @Author: WangXin\n * @Date: 2023-09-15 10:33:40\n * @LastEditors: WangXin\n * @LastEditTime: 2023-09-15 10:35:52\n * @FilePath: \\yxUse\\packages\\directives\\index.ts\n * @Description:\n *\n * Copyright (c) 2023 by YuXing, All Rights Reserved.\n */\nimport type { App } from \"vue\";\nimport auth from \"./modules/auth\";\nconst directivesList: any = {\n\tauth\n};\nconst directives = {\n\tinstall: function (app: App<Element>) {\n\t\tObject.keys(directivesList).forEach(key => {\n\t\t\t// 注册所有自定义指令\n\t\t\tapp.directive(key, directivesList[key]);\n\t\t});\n\t}\n};\n\nexport default directives;\n"],"names":[],"mappings":";AAYA,MAAM,OAAkB;AAAA,EACvB,QAAQ,IAAI,SAAS;AACpB,2BAAuB,IAAI,OAAO;AAAA,EAAA;AAEpC;AACA,MAAM,yBAAyB,CAAC,IAAiB,YAA8B;AAC9E,QAAM,QAAQ,QAAQ;AACtB,SAAO,CAAC,sBAAsB,KAAK,IAAI,GAAG,OAAW,IAAA;AACtD;ACRA,MAAM,iBAAsB;AAAA,EAC3B;AACD;AACA,MAAM,aAAa;AAAA,EAClB,SAAS,SAAU,KAAmB;AACrC,WAAO,KAAK,cAAc,EAAE,QAAQ,CAAO,QAAA;AAE1C,UAAI,UAAU,KAAK,eAAe,GAAG,CAAC;AAAA,IAAA,CACtC;AAAA,EAAA;AAEH;;;;;"}
|
package/lib/index.es9.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.es9.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
|
package/lib/theme.cjs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"theme.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/lib/theme.es.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"theme.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
|
package/lib/translate.cjs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"translate.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/lib/translate.es.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"translate.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
package/lib/utils.cjs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/lib/utils.es.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
package/lib/yxIcon.cjs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"yxIcon.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/lib/yxIcon.es.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"yxIcon.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
|
package/lib/yxi18n.cjs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"yxi18n.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/lib/yxi18n.es.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"yxi18n.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|