@core-pilot/client-vue 0.0.12 → 0.0.13

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.
@@ -1,2 +1,2 @@
1
- "use strict";const e=require("vue"),t=require("element-plus");/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */;/* empty css */const s=require("./assets/upload.svg.js"),l=require("./assets/temp.svg.js"),a=require("./assets/delete.svg.js");;/* empty css */const i=e.defineComponent({name:"CoreUpload",props:{action:{type:String,default:"/openapi/v1/app/files/upload"},accept:{type:String,default:".xlsx,.xls,.csv"},maxSize:{type:Number,default:10},multiple:{type:Boolean,default:!0},fileList:{type:Array,default:()=>[]},templateUrl:{type:String,default:""},templateFileName:{type:String,default:"模板文件"},tips:{type:String,default:""},disabled:{type:Boolean,default:!1},httpRequest:{type:Function,default:void 0},headers:{type:Object,default:()=>({Authorization:"Bearer ApiSecretKey_mEKsrCMvxNLzzUUKeQmpzaUZqwZxFyJf",appId:"9a673565-d4f6-4382-bc67-f1beb07df435"})},extendData:{type:Object,default:()=>({user:"abc-123"})}},emits:["update:fileList","success","remove","download-template","error"],setup(s,{emit:l}){const a=e.ref(),i=e.ref(s.fileList||[]);e.watch(()=>s.fileList,e=>{e&&JSON.stringify(e)!==JSON.stringify(i.value)&&(i.value=[...e||[]])},{deep:!0,immediate:!0});const r=e.computed(()=>{if(s.tips)return s.tips;return`支持 ${s.accept.split(",").map(e=>e.replace(".","").toUpperCase()).join(" 或 ")} 格式。文件大小不超过 ${s.maxSize}MB。`});return{uploadRef:a,fileList:i,tipsText:r,formatFileSize:e=>e<1024?e+" B":e<1048576?(e/1024).toFixed(2)+" KB":(e/1048576).toFixed(2)+" MB",beforeUpload:e=>!!(e=>{const l=s.accept.split(",").map(e=>e.trim().toLowerCase()),a=(e=>{const t=e.lastIndexOf(".");return-1!==t?e.substring(t).toLowerCase():""})(e.name);if(!l.some(t=>t.startsWith(".")?t===a:e.type&&e.type.includes(t.replace(".","")))){const e=s.accept.split(",").map(e=>e.replace(".","").toUpperCase()).join(" 或 ");return t.ElMessage.error(`只能上传 ${e} 格式的文件!`),!1}return!0})(e)&&!!(e=>{const l=1024*s.maxSize*1024;return!(e.size>l&&(t.ElMessage.error(`文件大小不能超过 ${s.maxSize}MB!`),1))})(e),handleRemove:(e,t)=>{i.value=t.map(e=>({name:e.name,...e.response||{}})),l("update:fileList",i.value),l("remove",e,t)},handleError:(e,s)=>{t.ElMessage.error(`文件 ${s.name} 上传失败:${e.message}`),l("error",e,s)},handleSuccess:(e,t,s)=>{i.value=s.map(t=>({name:t.name,...e||{}})),l("update:fileList",i.value),l("success",e,t,i)},handleDownloadTemplate:()=>{if(!s.templateUrl)return void t.ElMessage.warning("模板文件地址未配置");l("download-template",s.templateUrl);const e=document.createElement("a");e.href=s.templateUrl,e.download=s.templateFileName,document.body.appendChild(e),e.click(),document.body.removeChild(e)},handleDelete:e=>{const t=i.value.findIndex(t=>t.uid===e.uid);-1!==t&&(i.value.splice(t,1),l("update:fileList",i.value),l("remove",e,i.value))}}},render(){return e.createVNode("div",{class:"core-upload"},[e.createVNode("div",{class:"core-upload__actions"},[e.createVNode(t.ElUpload,{ref:"uploadRef",class:"core-upload__upload",action:this.action,accept:this.accept,headers:this.headers,data:this.extendData,multiple:this.multiple,fileList:this.fileList,beforeUpload:this.beforeUpload,onRemove:this.handleRemove,onError:this.handleError,onSuccess:this.handleSuccess,httpRequest:this.httpRequest,disabled:this.disabled,showFileList:!1},{trigger:()=>e.createVNode(t.ElButton,{type:"primary",icon:e.createVNode("img",{src:s,alt:"upload"},null),disabled:this.disabled},{default:()=>[e.createTextVNode("上传文件")]})}),e.createVNode(t.ElButton,{icon:e.createVNode("img",{src:l,alt:"download"},null),onClick:this.handleDownloadTemplate,disabled:this.disabled},{default:()=>[e.createTextVNode("下载模板")]})]),this.tipsText&&e.createVNode("div",{class:"core-upload__tips"},[this.tipsText]),this.fileList&&this.fileList.length>0&&e.createVNode("div",{class:"core-upload__file-list"},[this.fileList.map(t=>e.createVNode("div",{key:t.uid,class:"core-upload__file-item"},[e.createVNode("div",{class:"core-upload__file-info"},[e.createVNode("span",{class:"core-upload__file-icon"},[e.createTextVNode("📄")]),e.createVNode("span",{class:"core-upload__file-name",title:t.name},[t.name])]),e.createVNode("img",{onClick:()=>this.handleDelete(t),src:a,alt:"delete",class:"core-upload__file-delete"},null)]))])])}});module.exports=i;
1
+ "use strict";const e=require("vue"),t=require("element-plus");/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */;/* empty css */const s=require("./assets/upload.svg.js"),l=require("./assets/temp.svg.js"),a=require("./assets/delete.svg.js");;/* empty css */const i=e.defineComponent({name:"CoreUpload",props:{action:{type:String,default:"/openapi/v1/app/files/upload"},accept:{type:String,default:".xlsx,.xls,.csv"},maxSize:{type:Number,default:10},multiple:{type:Boolean,default:!0},fileList:{type:Array,default:()=>[]},templateUrl:{type:String,default:""},templateFileName:{type:String,default:"模板文件"},tips:{type:String,default:""},disabled:{type:Boolean,default:!1},httpRequest:{type:Function,default:void 0},headers:{type:Object,default:()=>({Authorization:"Bearer ApiSecretKey_mEKsrCMvxNLzzUUKeQmpzaUZqwZxFyJf",appId:"9a673565-d4f6-4382-bc67-f1beb07df435"})},extendData:{type:Object,default:()=>({user:"abc-123"})}},emits:["update:fileList","success","remove","download-template","error"],setup(s,{emit:l}){const a=e.ref(),i=e.ref(s.fileList||[]);e.watch(()=>s.fileList,e=>{e&&JSON.stringify(e)!==JSON.stringify(i.value)&&(i.value=[...e||[]])},{deep:!0,immediate:!0});const r=e.computed(()=>{if(s.tips)return s.tips;return`支持 ${s.accept.split(",").map(e=>e.replace(".","").toUpperCase()).join(" 或 ")} 格式。文件大小不超过 ${s.maxSize}MB。`});return{uploadRef:a,fileList:i,tipsText:r,formatFileSize:e=>e<1024?e+" B":e<1048576?(e/1024).toFixed(2)+" KB":(e/1048576).toFixed(2)+" MB",beforeUpload:e=>!!(e=>{const l=s.accept.split(",").map(e=>e.trim().toLowerCase()),a=(e=>{const t=e.lastIndexOf(".");return-1!==t?e.substring(t).toLowerCase():""})(e.name);if(!l.some(t=>t.startsWith(".")?t===a:e.type&&e.type.includes(t.replace(".","")))){const e=s.accept.split(",").map(e=>e.replace(".","").toUpperCase()).join(" 或 ");return t.ElMessage.error(`只能上传 ${e} 格式的文件!`),!1}return!0})(e)&&!!(e=>{const l=1024*s.maxSize*1024;return!(e.size>l&&(t.ElMessage.error(`文件大小不能超过 ${s.maxSize}MB!`),1))})(e),handleRemove:(e,t)=>{i.value=t.map(e=>({name:e.name,...e.response||{}})),l("update:fileList",i.value),l("remove",e,t)},handleError:(e,s)=>{t.ElMessage.error(`文件 ${s.name} 上传失败:${e.message}`),l("error",e,s)},handleSuccess:(e,t,s)=>{i.value=s.map(t=>({name:t.name,...e||{}})),l("update:fileList",i.value),l("success",e,t,i)},handleDownloadTemplate:()=>{if(!s.templateUrl)return void t.ElMessage.warning("模板文件地址未配置");l("download-template",s.templateUrl);const e=document.createElement("a");e.href=s.templateUrl,e.download=s.templateFileName,document.body.appendChild(e),e.click(),document.body.removeChild(e)},handleDelete:e=>{if(s.disabled)return;const t=i.value.findIndex(t=>t.uid===e.uid);-1!==t&&(i.value.splice(t,1),l("update:fileList",i.value),l("remove",e,i.value))}}},render(){return e.createVNode("div",{class:"core-upload"},[e.createVNode("div",{class:"core-upload__actions"},[e.createVNode(t.ElUpload,{ref:"uploadRef",class:"core-upload__upload",action:this.action,accept:this.accept,headers:this.headers,data:this.extendData,multiple:this.multiple,fileList:this.fileList,beforeUpload:this.beforeUpload,onRemove:this.handleRemove,onError:this.handleError,onSuccess:this.handleSuccess,httpRequest:this.httpRequest,disabled:this.disabled,showFileList:!1},{trigger:()=>e.createVNode(t.ElButton,{type:"primary",icon:e.createVNode("img",{src:s,alt:"upload"},null),disabled:this.disabled},{default:()=>[e.createTextVNode("上传文件")]})}),e.createVNode(t.ElButton,{icon:e.createVNode("img",{src:l,alt:"download"},null),onClick:this.handleDownloadTemplate,disabled:this.disabled},{default:()=>[e.createTextVNode("下载模板")]})]),this.tipsText&&e.createVNode("div",{class:"core-upload__tips"},[this.tipsText]),this.fileList&&this.fileList.length>0&&e.createVNode("div",{class:"core-upload__file-list"},[this.fileList.map(t=>e.createVNode("div",{key:t.uid,class:"core-upload__file-item"},[e.createVNode("div",{class:"core-upload__file-info"},[e.createVNode("span",{class:"core-upload__file-icon"},[e.createTextVNode("📄")]),e.createVNode("span",{class:"core-upload__file-name",title:t.name},[t.name])]),!this.disabled&&e.createVNode("img",{onClick:()=>this.handleDelete(t),src:a,alt:"delete",class:"core-upload__file-delete"},null)]))])])}});module.exports=i;
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/core-upload/index.tsx"],"sourcesContent":["import { defineComponent, ref, PropType, computed, watch } from 'vue';\nimport { ElUpload, ElButton, ElMessage, ElIcon } from 'element-plus';\nimport type { UploadFile, UploadFiles, UploadRequestOptions } from 'element-plus';\n// @ts-ignore\nimport uploadIcon from './assets/upload.svg';\n// @ts-ignore\nimport tempIcon from './assets/temp.svg';\n// @ts-ignore\nimport deleteIcon from './assets/delete.svg';\nimport './style.less';\n\nexport interface UploadFileItem {\n name: string;\n url?: string;\n response?: any;\n [key: string]: any;\n}\n\nexport default defineComponent({\n name: 'CoreUpload',\n props: {\n // 上传地址\n action: {\n type: String,\n default: '/openapi/v1/app/files/upload',\n },\n // 允许上传的文件类型\n accept: {\n type: String,\n default: '.xlsx,.xls,.csv',\n },\n // 文件大小限制(单位:MB)\n maxSize: {\n type: Number,\n default: 10,\n },\n // 是否支持多文件上传\n multiple: {\n type: Boolean,\n default: true,\n },\n // 文件列表\n fileList: {\n type: Array as PropType<UploadFileItem[]>,\n default: () => [],\n },\n // 下载模板的URL\n templateUrl: {\n type: String,\n default: '',\n },\n // 下载模板的文件名\n templateFileName: {\n type: String,\n default: '模板文件',\n },\n // 提示文本\n tips: {\n type: String,\n default: '',\n },\n // 是否禁用\n disabled: {\n type: Boolean,\n default: false,\n },\n // 自定义上传请求\n httpRequest: {\n type: Function as PropType<(options: UploadRequestOptions) => void>,\n default: undefined,\n },\n headers: {\n type: Object,\n default: () => ({\n Authorization: 'Bearer ApiSecretKey_mEKsrCMvxNLzzUUKeQmpzaUZqwZxFyJf',\n appId: '9a673565-d4f6-4382-bc67-f1beb07df435'\n }),\n },\n extendData: {\n type: Object,\n default: () => ({\n \"user\": \"abc-123\",\n }),\n },\n },\n emits: ['update:fileList', 'success', 'remove', 'download-template', 'error'],\n setup(props, { emit }) {\n const uploadRef = ref<InstanceType<typeof ElUpload>>();\n const fileList = ref<UploadFileItem[]>(props.fileList || []);\n\n // 监听外部 fileList 变化\n watch(\n () => props.fileList,\n (newFileList) => {\n if (newFileList && JSON.stringify(newFileList) !== JSON.stringify(fileList.value)) {\n fileList.value = [...(newFileList || [])];\n }\n },\n { deep: true, immediate: true }\n );\n\n // 生成提示文本\n const tipsText = computed(() => {\n if (props.tips) {\n return props.tips;\n }\n const acceptTypes = props.accept\n .split(',')\n .map((type) => type.replace('.', '').toUpperCase())\n .join(' 或 ');\n return `支持 ${acceptTypes} 格式。文件大小不超过 ${props.maxSize}MB。`;\n });\n\n // 格式化文件大小\n const formatFileSize = (size: number): string => {\n if (size < 1024) {\n return size + ' B';\n } else if (size < 1024 * 1024) {\n return (size / 1024).toFixed(2) + ' KB';\n } else {\n return (size / (1024 * 1024)).toFixed(2) + ' MB';\n }\n };\n\n // 获取文件扩展名\n const getFileExtension = (filename: string): string => {\n const lastDot = filename.lastIndexOf('.');\n return lastDot !== -1 ? filename.substring(lastDot).toLowerCase() : '';\n };\n\n // 验证文件类型\n const validateFileType = (file: File): boolean => {\n const acceptTypes = props.accept.split(',').map((type) => type.trim().toLowerCase());\n const fileExt = getFileExtension(file.name);\n const isValid = acceptTypes.some((type) => {\n if (type.startsWith('.')) {\n return type === fileExt;\n }\n // 支持 MIME 类型\n return file.type && file.type.includes(type.replace('.', ''));\n });\n\n if (!isValid) {\n const acceptTypesText = props.accept\n .split(',')\n .map((type) => type.replace('.', '').toUpperCase())\n .join(' 或 ');\n ElMessage.error(`只能上传 ${acceptTypesText} 格式的文件!`);\n return false;\n }\n return true;\n };\n\n // 验证文件大小\n const validateFileSize = (file: File): boolean => {\n const maxSizeBytes = props.maxSize * 1024 * 1024;\n if (file.size > maxSizeBytes) {\n ElMessage.error(`文件大小不能超过 ${props.maxSize}MB!`);\n return false;\n }\n return true;\n };\n\n // 上传前的校验\n const beforeUpload = (file: File): boolean => {\n // 类型校验\n if (!validateFileType(file)) {\n return false;\n }\n // 大小校验\n if (!validateFileSize(file)) {\n return false;\n }\n return true;\n };\n\n // 文件移除时的钩子\n const handleRemove = (uploadFile: UploadFile, uploadFiles: UploadFiles) => {\n fileList.value = uploadFiles.map((file) => ({\n name: file.name,\n ...(file.response || {} as any),\n }));\n emit('update:fileList', fileList.value);\n emit('remove', uploadFile, uploadFiles);\n };\n\n // 上传失败时的钩子\n const handleError = (error: Error, uploadFile: UploadFile) => {\n ElMessage.error(`文件 ${uploadFile.name} 上传失败:${error.message}`);\n emit('error', error, uploadFile);\n };\n\n // 下载模板\n const handleDownloadTemplate = () => {\n if (!props.templateUrl) {\n ElMessage.warning('模板文件地址未配置');\n return;\n }\n emit('download-template', props.templateUrl);\n \n // 如果没有自定义下载处理,则使用默认下载方式\n const link = document.createElement('a');\n link.href = props.templateUrl;\n link.download = props.templateFileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n };\n\n // 删除文件\n const handleDelete = (file: UploadFileItem) => {\n const index = fileList.value.findIndex((item) => item.uid === file.uid);\n if (index !== -1) {\n fileList.value.splice(index, 1);\n emit('update:fileList', fileList.value);\n emit('remove', file, fileList.value);\n }\n };\n\n // 上传成功时的钩子\n const handleSuccess = (response: any, file: UploadFile, fileLists: UploadFiles) => {\n fileList.value = fileLists.map((file) => ({\n name: file.name,\n ...(response || {} as any),\n }));\n emit('update:fileList', fileList.value);\n emit('success', response, file, fileList);\n };\n\n return {\n uploadRef,\n fileList,\n tipsText,\n formatFileSize,\n beforeUpload,\n handleRemove,\n handleError,\n handleSuccess,\n handleDownloadTemplate,\n handleDelete,\n };\n },\n render() {\n return (\n <div class=\"core-upload\">\n {/* 第一层:上传文件、下载模板按钮 */}\n <div class=\"core-upload__actions\">\n <ElUpload\n ref=\"uploadRef\"\n class=\"core-upload__upload\"\n action={this.action}\n accept={this.accept}\n headers={this.headers}\n data={this.extendData}\n multiple={this.multiple}\n fileList={this.fileList}\n beforeUpload={this.beforeUpload}\n onRemove={this.handleRemove}\n onError={this.handleError}\n onSuccess={this.handleSuccess}\n httpRequest={this.httpRequest}\n disabled={this.disabled}\n showFileList={false}\n >\n {{\n trigger: () => (\n <ElButton\n type=\"primary\"\n icon={<img src={uploadIcon} alt=\"upload\" />}\n disabled={this.disabled}\n >\n 上传文件\n </ElButton>\n ),\n }}\n </ElUpload>\n <ElButton\n icon={<img src={tempIcon} alt=\"download\" />}\n onClick={this.handleDownloadTemplate}\n disabled={this.disabled}\n >\n 下载模板\n </ElButton>\n </div>\n\n {/* 第二层:tips 简要描述当前上传限制 */}\n {this.tipsText && (\n <div class=\"core-upload__tips\">\n {this.tipsText}\n </div>\n )}\n\n {/* 第三层:已经上传的列表,支持删除 */}\n {this.fileList && this.fileList.length > 0 && (\n <div class=\"core-upload__file-list\">\n {this.fileList.map((file) => (\n <div key={file.uid} class=\"core-upload__file-item\">\n <div class=\"core-upload__file-info\">\n <span class=\"core-upload__file-icon\">📄</span>\n <span\n class=\"core-upload__file-name\"\n title={file.name}\n >\n {file.name}\n </span>\n </div>\n <img onClick={() => this.handleDelete(file)} src={deleteIcon} alt=\"delete\" class=\"core-upload__file-delete\" />\n </div>\n ))}\n </div>\n )}\n </div>\n );\n },\n});\n\n"],"names":["CoreUpload","name","props","action","type","String","default","accept","maxSize","Number","multiple","Boolean","fileList","Array","templateUrl","templateFileName","tips","disabled","httpRequest","Function","undefined","headers","Object","Authorization","appId","extendData","user","emits","setup","emit","uploadRef","ref","watch","newFileList","JSON","stringify","value","deep","immediate","tipsText","computed","split","map","replace","toUpperCase","join","formatFileSize","size","toFixed","beforeUpload","file","acceptTypes","trim","toLowerCase","fileExt","filename","lastDot","lastIndexOf","substring","getFileExtension","some","startsWith","includes","acceptTypesText","ElMessage","error","validateFileType","maxSizeBytes","validateFileSize","handleRemove","uploadFile","uploadFiles","response","handleError","message","handleSuccess","fileLists","handleDownloadTemplate","warning","link","document","createElement","href","download","body","appendChild","click","removeChild","handleDelete","index","findIndex","item","uid","splice","render","_createVNode","class","ElUpload","this","data","onRemove","onError","onSuccess","showFileList","trigger","ElButton","icon","src","uploadIcon","alt","_createTextVNode","tempIcon","onClick","length","key","title","deleteIcon"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/core-upload/index.tsx"],"sourcesContent":["import { defineComponent, ref, PropType, computed, watch } from 'vue';\nimport { ElUpload, ElButton, ElMessage, ElIcon } from 'element-plus';\nimport type { UploadFile, UploadFiles, UploadRequestOptions } from 'element-plus';\n// @ts-ignore\nimport uploadIcon from './assets/upload.svg';\n// @ts-ignore\nimport tempIcon from './assets/temp.svg';\n// @ts-ignore\nimport deleteIcon from './assets/delete.svg';\nimport './style.less';\n\nexport interface UploadFileItem {\n name: string;\n url?: string;\n response?: any;\n [key: string]: any;\n}\n\nexport default defineComponent({\n name: 'CoreUpload',\n props: {\n // 上传地址\n action: {\n type: String,\n default: '/openapi/v1/app/files/upload',\n },\n // 允许上传的文件类型\n accept: {\n type: String,\n default: '.xlsx,.xls,.csv',\n },\n // 文件大小限制(单位:MB)\n maxSize: {\n type: Number,\n default: 10,\n },\n // 是否支持多文件上传\n multiple: {\n type: Boolean,\n default: true,\n },\n // 文件列表\n fileList: {\n type: Array as PropType<UploadFileItem[]>,\n default: () => [],\n },\n // 下载模板的URL\n templateUrl: {\n type: String,\n default: '',\n },\n // 下载模板的文件名\n templateFileName: {\n type: String,\n default: '模板文件',\n },\n // 提示文本\n tips: {\n type: String,\n default: '',\n },\n // 是否禁用\n disabled: {\n type: Boolean,\n default: false,\n },\n // 自定义上传请求\n httpRequest: {\n type: Function as PropType<(options: UploadRequestOptions) => void>,\n default: undefined,\n },\n headers: {\n type: Object,\n default: () => ({\n Authorization: 'Bearer ApiSecretKey_mEKsrCMvxNLzzUUKeQmpzaUZqwZxFyJf',\n appId: '9a673565-d4f6-4382-bc67-f1beb07df435'\n }),\n },\n extendData: {\n type: Object,\n default: () => ({\n \"user\": \"abc-123\",\n }),\n },\n },\n emits: ['update:fileList', 'success', 'remove', 'download-template', 'error'],\n setup(props, { emit }) {\n const uploadRef = ref<InstanceType<typeof ElUpload>>();\n const fileList = ref<UploadFileItem[]>(props.fileList || []);\n\n // 监听外部 fileList 变化\n watch(\n () => props.fileList,\n (newFileList) => {\n if (newFileList && JSON.stringify(newFileList) !== JSON.stringify(fileList.value)) {\n fileList.value = [...(newFileList || [])];\n }\n },\n { deep: true, immediate: true }\n );\n\n // 生成提示文本\n const tipsText = computed(() => {\n if (props.tips) {\n return props.tips;\n }\n const acceptTypes = props.accept\n .split(',')\n .map((type) => type.replace('.', '').toUpperCase())\n .join(' 或 ');\n return `支持 ${acceptTypes} 格式。文件大小不超过 ${props.maxSize}MB。`;\n });\n\n // 格式化文件大小\n const formatFileSize = (size: number): string => {\n if (size < 1024) {\n return size + ' B';\n } else if (size < 1024 * 1024) {\n return (size / 1024).toFixed(2) + ' KB';\n } else {\n return (size / (1024 * 1024)).toFixed(2) + ' MB';\n }\n };\n\n // 获取文件扩展名\n const getFileExtension = (filename: string): string => {\n const lastDot = filename.lastIndexOf('.');\n return lastDot !== -1 ? filename.substring(lastDot).toLowerCase() : '';\n };\n\n // 验证文件类型\n const validateFileType = (file: File): boolean => {\n const acceptTypes = props.accept.split(',').map((type) => type.trim().toLowerCase());\n const fileExt = getFileExtension(file.name);\n const isValid = acceptTypes.some((type) => {\n if (type.startsWith('.')) {\n return type === fileExt;\n }\n // 支持 MIME 类型\n return file.type && file.type.includes(type.replace('.', ''));\n });\n\n if (!isValid) {\n const acceptTypesText = props.accept\n .split(',')\n .map((type) => type.replace('.', '').toUpperCase())\n .join(' 或 ');\n ElMessage.error(`只能上传 ${acceptTypesText} 格式的文件!`);\n return false;\n }\n return true;\n };\n\n // 验证文件大小\n const validateFileSize = (file: File): boolean => {\n const maxSizeBytes = props.maxSize * 1024 * 1024;\n if (file.size > maxSizeBytes) {\n ElMessage.error(`文件大小不能超过 ${props.maxSize}MB!`);\n return false;\n }\n return true;\n };\n\n // 上传前的校验\n const beforeUpload = (file: File): boolean => {\n // 类型校验\n if (!validateFileType(file)) {\n return false;\n }\n // 大小校验\n if (!validateFileSize(file)) {\n return false;\n }\n return true;\n };\n\n // 文件移除时的钩子\n const handleRemove = (uploadFile: UploadFile, uploadFiles: UploadFiles) => {\n fileList.value = uploadFiles.map((file) => ({\n name: file.name,\n ...(file.response || {} as any),\n }));\n emit('update:fileList', fileList.value);\n emit('remove', uploadFile, uploadFiles);\n };\n\n // 上传失败时的钩子\n const handleError = (error: Error, uploadFile: UploadFile) => {\n ElMessage.error(`文件 ${uploadFile.name} 上传失败:${error.message}`);\n emit('error', error, uploadFile);\n };\n\n // 下载模板\n const handleDownloadTemplate = () => {\n if (!props.templateUrl) {\n ElMessage.warning('模板文件地址未配置');\n return;\n }\n emit('download-template', props.templateUrl);\n \n // 如果没有自定义下载处理,则使用默认下载方式\n const link = document.createElement('a');\n link.href = props.templateUrl;\n link.download = props.templateFileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n };\n\n // 删除文件\n const handleDelete = (file: UploadFileItem) => {\n // disabled 状态下不允许删除\n if (props.disabled) {\n return;\n }\n const index = fileList.value.findIndex((item) => item.uid === file.uid);\n if (index !== -1) {\n fileList.value.splice(index, 1);\n emit('update:fileList', fileList.value);\n emit('remove', file, fileList.value);\n }\n };\n\n // 上传成功时的钩子\n const handleSuccess = (response: any, file: UploadFile, fileLists: UploadFiles) => {\n fileList.value = fileLists.map((file) => ({\n name: file.name,\n ...(response || {} as any),\n }));\n emit('update:fileList', fileList.value);\n emit('success', response, file, fileList);\n };\n\n return {\n uploadRef,\n fileList,\n tipsText,\n formatFileSize,\n beforeUpload,\n handleRemove,\n handleError,\n handleSuccess,\n handleDownloadTemplate,\n handleDelete,\n };\n },\n render() {\n return (\n <div class=\"core-upload\">\n {/* 第一层:上传文件、下载模板按钮 */}\n <div class=\"core-upload__actions\">\n <ElUpload\n ref=\"uploadRef\"\n class=\"core-upload__upload\"\n action={this.action}\n accept={this.accept}\n headers={this.headers}\n data={this.extendData}\n multiple={this.multiple}\n fileList={this.fileList}\n beforeUpload={this.beforeUpload}\n onRemove={this.handleRemove}\n onError={this.handleError}\n onSuccess={this.handleSuccess}\n httpRequest={this.httpRequest}\n disabled={this.disabled}\n showFileList={false}\n >\n {{\n trigger: () => (\n <ElButton\n type=\"primary\"\n icon={<img src={uploadIcon} alt=\"upload\" />}\n disabled={this.disabled}\n >\n 上传文件\n </ElButton>\n ),\n }}\n </ElUpload>\n <ElButton\n icon={<img src={tempIcon} alt=\"download\" />}\n onClick={this.handleDownloadTemplate}\n disabled={this.disabled}\n >\n 下载模板\n </ElButton>\n </div>\n\n {/* 第二层:tips 简要描述当前上传限制 */}\n {this.tipsText && (\n <div class=\"core-upload__tips\">\n {this.tipsText}\n </div>\n )}\n\n {/* 第三层:已经上传的列表,支持删除 */}\n {this.fileList && this.fileList.length > 0 && (\n <div class=\"core-upload__file-list\">\n {this.fileList.map((file) => (\n <div key={file.uid} class=\"core-upload__file-item\">\n <div class=\"core-upload__file-info\">\n <span class=\"core-upload__file-icon\">📄</span>\n <span\n class=\"core-upload__file-name\"\n title={file.name}\n >\n {file.name}\n </span>\n </div>\n {!this.disabled && (\n <img onClick={() => this.handleDelete(file)} src={deleteIcon} alt=\"delete\" class=\"core-upload__file-delete\" />\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n },\n});\n\n"],"names":["CoreUpload","name","props","action","type","String","default","accept","maxSize","Number","multiple","Boolean","fileList","Array","templateUrl","templateFileName","tips","disabled","httpRequest","Function","undefined","headers","Object","Authorization","appId","extendData","user","emits","setup","emit","uploadRef","ref","watch","newFileList","JSON","stringify","value","deep","immediate","tipsText","computed","split","map","replace","toUpperCase","join","formatFileSize","size","toFixed","beforeUpload","file","acceptTypes","trim","toLowerCase","fileExt","filename","lastDot","lastIndexOf","substring","getFileExtension","some","startsWith","includes","acceptTypesText","ElMessage","error","validateFileType","maxSizeBytes","validateFileSize","handleRemove","uploadFile","uploadFiles","response","handleError","message","handleSuccess","fileLists","handleDownloadTemplate","warning","link","document","createElement","href","download","body","appendChild","click","removeChild","handleDelete","index","findIndex","item","uid","splice","render","_createVNode","class","ElUpload","this","data","onRemove","onError","onSuccess","showFileList","trigger","ElButton","icon","src","uploadIcon","alt","_createTextVNode","tempIcon","onClick","length","key","title","deleteIcon"],"mappings":"6hCAkBA,MAAAA,oBAA+B,CAC7BC,KAAM,aACNC,MAAO,CAELC,OAAQ,CACNC,KAAMC,OACNC,QAAS,gCAGXC,OAAQ,CACNH,KAAMC,OACNC,QAAS,mBAGXE,QAAS,CACPJ,KAAMK,OACNH,QAAS,IAGXI,SAAU,CACRN,KAAMO,QACNL,SAAS,GAGXM,SAAU,CACRR,KAAMS,MACNP,QAASA,IAAM,IAGjBQ,YAAa,CACXV,KAAMC,OACNC,QAAS,IAGXS,iBAAkB,CAChBX,KAAMC,OACNC,QAAS,QAGXU,KAAM,CACJZ,KAAMC,OACNC,QAAS,IAGXW,SAAU,CACRb,KAAMO,QACNL,SAAS,GAGXY,YAAa,CACXd,KAAMe,SACNb,aAASc,GAEXC,QAAS,CACPjB,KAAMkB,OACNhB,QAASA,KAAAA,CACPiB,cAAe,uDACfC,MAAO,0CAGXC,WAAY,CACVrB,KAAMkB,OACNhB,QAASA,KAAAA,CACPoB,KAAQ,cAIdC,MAAO,CAAC,kBAAmB,UAAW,SAAU,oBAAqB,SACrEC,KAAAA,CAAM1B,GAAO2B,KAAEA,IACb,MAAMC,EAAYC,EAAAA,MACZnB,EAAWmB,EAAAA,IAAsB7B,EAAMU,UAAY,IAGzDoB,EAAAA,MACE,IAAM9B,EAAMU,SACXqB,IACKA,GAAeC,KAAKC,UAAUF,KAAiBC,KAAKC,UAAUvB,EAASwB,SACzExB,EAASwB,MAAQ,IAAKH,GAAe,MAGzC,CAAEI,MAAM,EAAMC,WAAW,IAI3B,MAAMC,EAAWC,EAAAA,SAAS,KACxB,GAAItC,EAAMc,KACR,OAAOd,EAAMc,KAMf,MAAO,MAJad,EAAMK,OACvBkC,MAAM,KACNC,IAAKtC,GAASA,EAAKuC,QAAQ,IAAK,IAAIC,eACpCC,KAAK,qBAC+B3C,EAAMM,eA2H/C,MAAO,CACLsB,YACAlB,WACA2B,WACAO,eA3HsBC,GAClBA,EAAO,KACFA,EAAO,KACLA,EAAO,SACRA,EAAO,MAAMC,QAAQ,GAAK,OAE1BD,EAAAA,SAAsBC,QAAQ,GAAK,MAsH7CC,aA1EoBC,KAjCIA,CAAAA,IACxB,MAAMC,EAAcjD,EAAMK,OAAOkC,MAAM,KAAKC,IAAKtC,GAASA,EAAKgD,OAAOC,eAChEC,EARkBC,CAAAA,IACxB,MAAMC,EAAUD,EAASE,YAAY,KACrC,OAAmB,IAAZD,EAAiBD,EAASG,UAAUF,GAASH,cAAgB,IAMpDM,CAAiBT,EAAKjD,MAStC,IARgBkD,EAAYS,KAAMxD,GAC5BA,EAAKyD,WAAW,KACXzD,IAASkD,EAGXJ,EAAK9C,MAAQ8C,EAAK9C,KAAK0D,SAAS1D,EAAKuC,QAAQ,IAAK,MAG7C,CACZ,MAAMoB,EAAkB7D,EAAMK,OAC3BkC,MAAM,KACNC,IAAKtC,GAASA,EAAKuC,QAAQ,IAAK,IAAIC,eACpCC,KAAK,OAER,OADAmB,EAAAA,UAAUC,MAAM,QAAQF,aACjB,CACT,CACA,OAAO,GAgBFG,CAAiBhB,MAZEA,CAAAA,IACxB,MAAMiB,EAA+B,KAAhBjE,EAAMM,QAAiB,KAC5C,QAAI0C,EAAKH,KAAOoB,IACdH,EAAAA,UAAUC,MAAM,YAAY/D,EAAMM,cAC3B,KAYJ4D,CAAiBlB,GAqEtBmB,aA9DmBA,CAACC,EAAwBC,KAC5C3D,EAASwB,MAAQmC,EAAY7B,IAAKQ,IAAAA,CAChCjD,KAAMiD,EAAKjD,QACPiD,EAAKsB,UAAY,CAAA,KAEvB3C,EAAK,kBAAmBjB,EAASwB,OACjCP,EAAK,SAAUyC,EAAYC,IAyD3BE,YArDkBA,CAACR,EAAcK,KACjCN,YAAUC,MAAM,MAAMK,EAAWrE,aAAagE,EAAMS,WACpD7C,EAAK,QAASoC,EAAOK,IAoDrBK,cAjBoBA,CAACH,EAAetB,EAAkB0B,KACtDhE,EAASwB,MAAQwC,EAAUlC,IAAKQ,IAAAA,CAC9BjD,KAAMiD,EAAKjD,QACPuE,GAAY,CAAA,KAElB3C,EAAK,kBAAmBjB,EAASwB,OACjCP,EAAK,UAAW2C,EAAUtB,EAAMtC,IAYhCiE,uBAjD6BA,KAC7B,IAAK3E,EAAMY,YAET,YADAkD,EAAAA,UAAUc,QAAQ,aAGpBjD,EAAK,oBAAqB3B,EAAMY,aAGhC,MAAMiE,EAAOC,SAASC,cAAc,KACpCF,EAAKG,KAAOhF,EAAMY,YAClBiE,EAAKI,SAAWjF,EAAMa,iBACtBiE,SAASI,KAAKC,YAAYN,GAC1BA,EAAKO,QACLN,SAASI,KAAKG,YAAYR,IAqC1BS,aAjCoBtC,IAEpB,GAAIhD,EAAMe,SACR,OAEF,MAAMwE,EAAQ7E,EAASwB,MAAMsD,aAAoBC,EAAKC,MAAQ1C,EAAK0C,MACrD,IAAVH,IACF7E,EAASwB,MAAMyD,OAAOJ,EAAO,GAC7B5D,EAAK,kBAAmBjB,EAASwB,OACjCP,EAAK,SAAUqB,EAAMtC,EAASwB,SA0BpC,EACA0D,MAAAA,GACE,OAAAC,EAAAA,YAAA,MAAA,CAAAC,MAAA,eAAA,CAAAD,EAAAA,YAAA,MAAA,CAAAC,MAAA,wBAAA,CAAAD,EAAAA,YAAAE,WAAA,CAAAlE,IAAA,YAAAiE,MAAA,sBAAA7F,OAOgB+F,KAAK/F,OAAMI,OACX2F,KAAK3F,OAAMc,QACV6E,KAAK7E,QAAO8E,KACfD,KAAKzE,WAAUf,SACXwF,KAAKxF,SAAQE,SACbsF,KAAKtF,SAAQqC,aACTiD,KAAKjD,aAAYmD,SACrBF,KAAK7B,aAAYgC,QAClBH,KAAKzB,YAAW6B,UACdJ,KAAKvB,cAAazD,YAChBgF,KAAKhF,YAAWD,SACnBiF,KAAKjF,SAAQsF,cACT,GAAK,CAGjBC,QAASA,IAAAT,EAAAA,YAAAU,WAAA,CAAArG,KAAA,UAAAsG,KAAAX,EAAAA,YAAA,MAAA,CAAAY,IAGWC,EAAUC,IAAA,UAAA,MAAA5F,SAChBiF,KAAKjF,UAAQ,CAAAX,QAAAA,IAAA,CAAAwG,EAAAA,gBAAA,aAI1Bf,EAAAA,YAAAU,WAAA,CAAAC,KAAAX,EAAAA,YAAA,MAAA,CAAAY,IAIaI,EAAQF,IAAA,YAAA,MAAAG,QACfd,KAAKrB,uBAAsB5D,SAC1BiF,KAAKjF,UAAQ,CAAAX,QAAAA,IAAA,CAAAwG,EAAAA,gBAAA,aAO1BZ,KAAK3D,UAAQwD,EAAAA,YAAA,MAAA,CAAAC,MAAA,qBAAA,CAETE,KAAK3D,WAKT2D,KAAKtF,UAAYsF,KAAKtF,SAASqG,OAAS,GAAClB,EAAAA,YAAA,MAAA,CAAAC,MAAA,0BAAA,CAErCE,KAAKtF,SAAS8B,IAAKQ,GAAI6C,EAAAA,YAAA,MAAA,CAAAmB,IACZhE,EAAK0C,IAAGI,MAAA,0BAAA,CAAAD,EAAAA,YAAA,MAAA,CAAAC,MAAA,0BAAA,CAAAD,EAAAA,YAAA,OAAA,CAAAC,MAAA,0BAAA,CAAAc,EAAAA,wBAAAf,EAAAA,YAAA,OAAA,CAAAC,MAAA,yBAAAmB,MAKLjE,EAAKjD,MAAI,CAEfiD,EAAKjD,UAGRiG,KAAKjF,UAAQ8E,EAAAA,YAAA,MAAA,CAAAiB,QACCA,IAAMd,KAAKV,aAAatC,GAAKyD,IAAOS,EAAUP,IAAA,SAAAb,MAAA,4BAAA,YAQ5E"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),r=require("../../../node_modules/.pnpm/@vueuse_core@14.0.0_vue@3.5.24_typescript@5.6.3_/node_modules/@vueuse/core/dist/index.js");exports.useFormHandler=(t,i)=>{const u=r.useTemplateRefsList(),n=e.ref(0),o=e.ref(!1);let a=0;return{formRefs:u,curIndex:n,isRewrite:o,btnClick:async(e,r,a,s)=>{var l;if("inner_next"===r)return void(n.value+=1);if("inner_prev"===r)return void(n.value-=1);if("inner_rewrite"===r)return void(o.value=!0);let v={action:r,payload:{}};a&&"form"!==s?v={action:r,payload:a}:(await(null==(l=u.value[e])?void 0:l.validate()),v={action:r,payload:{...t.value[e],...a}}),o.value&&r.startsWith("core_")&&(o.value=!1),i("coreSubmit",v)},resetCurInit:()=>{a=0},getCurInit:()=>{const e=a;return a++,e}}};
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),r=require("../../../node_modules/.pnpm/@vueuse_core@14.0.0_vue@3.5.24_typescript@5.6.3_/node_modules/@vueuse/core/dist/index.js");exports.useFormHandler=(t,i)=>{const u=r.useTemplateRefsList(),n=e.ref(0),o=e.ref(!1);let a=0;return{formRefs:u,curIndex:n,isRewrite:o,btnClick:async(e,r,a,s,l)=>{var v;if("inner_next"===r)return void(n.value+=1);if("inner_prev"===r)return void(n.value-=1);if("inner_rewrite"===r)return void(o.value=!0);let d={action:r,payload:{}};"form"!==s||l?d={action:r,payload:a}:(await(null==(v=u.value[e])?void 0:v.validate()),d={action:r,payload:{...t.value[e],...a}}),o.value&&r.startsWith("core_")&&(o.value=!1),i("coreSubmit",d)},resetCurInit:()=>{a=0},getCurInit:()=>{const e=a;return a++,e}}};
2
2
  //# sourceMappingURL=useFormHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFormHandler.js","sources":["../../../../../src/components/x-markdown/composables/useFormHandler.ts"],"sourcesContent":["/**\n * 表单处理 Composable\n * 处理表单验证、按钮点击等交互\n */\n\nimport { ref, Ref } from 'vue';\nimport { useTemplateRefsList } from '@vueuse/core';\nimport { ElForm } from 'element-plus';\n\nexport const useFormHandler = (\n hitlData: Ref<Array<Record<string, any>>>,\n emit: (event: 'coreSubmit', ...args: any[]) => void\n) => {\n const formRefs = useTemplateRefsList<typeof ElForm>();\n const curIndex = ref(0);\n const isRewrite = ref(false);\n // 用于表单渲染的索引\n let curInit = 0;\n\n /**\n * 按钮点击处理\n */\n const btnClick = async (\n index: number,\n action: string,\n payload: any,\n parentScope?: 'form' | 'table'\n ) => {\n if (action === 'inner_next') {\n curIndex.value += 1;\n return;\n }\n if (action === 'inner_prev') {\n curIndex.value -= 1;\n return;\n }\n if (action === 'inner_rewrite') {\n isRewrite.value = true;\n return;\n }\n\n let res = {\n action,\n payload: {},\n };\n \n // 区分是否为form组件的按钮,如果带有payload 则约定为非form组件的按钮\n if (payload && parentScope !== 'form') {\n res = {\n action,\n payload,\n };\n } else {\n await formRefs.value[index]?.validate();\n res = {\n action,\n payload: {\n ...hitlData.value[index],\n ...payload,\n }\n };\n }\n \n if (isRewrite.value && action.startsWith('core_')) {\n isRewrite.value = false;\n }\n \n emit('coreSubmit', res);\n };\n\n /**\n * 重置 curInit(在组件更新时调用)\n */\n const resetCurInit = () => {\n curInit = 0;\n };\n\n /**\n * 获取当前表单索引(用于表单渲染)\n */\n const getCurInit = () => {\n const current = curInit;\n curInit++;\n return current;\n };\n\n return {\n formRefs,\n curIndex,\n isRewrite,\n btnClick,\n resetCurInit,\n getCurInit,\n };\n};\n\n"],"names":["hitlData","emit","formRefs","useTemplateRefsList","curIndex","ref","isRewrite","curInit","btnClick","async","index","action","payload","parentScope","value","res","_a","validate","startsWith","resetCurInit","getCurInit","current"],"mappings":"gQAS8B,CAC5BA,EACAC,KAEA,MAAMC,EAAWC,EAAAA,sBACXC,EAAWC,EAAAA,IAAI,GACfC,EAAYD,EAAAA,KAAI,GAEtB,IAAIE,EAAU,EAqEd,MAAO,CACLL,WACAE,WACAE,YACAE,SApEeC,MACfC,EACAC,EACAC,EACAC,WAEA,GAAe,eAAXF,EAEF,YADAP,EAASU,OAAS,GAGpB,GAAe,eAAXH,EAEF,YADAP,EAASU,OAAS,GAGpB,GAAe,kBAAXH,EAEF,YADAL,EAAUQ,OAAQ,GAIpB,IAAIC,EAAM,CACRJ,SACAC,QAAS,CAAA,GAIPA,GAA2B,SAAhBC,EACbE,EAAM,CACJJ,SACAC,kBAGI,OAAAI,EAAAd,EAASY,MAAMJ,SAAf,EAAAM,EAAuBC,YAC7BF,EAAM,CACJJ,SACAC,QAAS,IACJZ,EAASc,MAAMJ,MACfE,KAKLN,EAAUQ,OAASH,EAAOO,WAAW,WACvCZ,EAAUQ,OAAQ,GAGpBb,EAAK,aAAcc,IAwBnBI,aAlBmB,KACnBZ,EAAU,GAkBVa,WAZiB,KACjB,MAAMC,EAAUd,EAEhB,OADAA,IACOc"}
1
+ {"version":3,"file":"useFormHandler.js","sources":["../../../../../src/components/x-markdown/composables/useFormHandler.ts"],"sourcesContent":["/**\n * 表单处理 Composable\n * 处理表单验证、按钮点击等交互\n */\n\nimport { ref, Ref } from 'vue';\nimport { useTemplateRefsList } from '@vueuse/core';\nimport { ElForm } from 'element-plus';\n\nexport const useFormHandler = (\n hitlData: Ref<Array<Record<string, any>>>,\n emit: (event: 'coreSubmit', ...args: any[]) => void\n) => {\n const formRefs = useTemplateRefsList<typeof ElForm>();\n const curIndex = ref(0);\n const isRewrite = ref(false);\n // 用于表单渲染的索引\n let curInit = 0;\n\n /**\n * 按钮点击处理\n */\n const btnClick = async (\n index: number,\n action: string,\n payload: any,\n parentScope?: 'form' | 'table',\n skipValidation?: boolean\n ) => {\n if (action === 'inner_next') {\n curIndex.value += 1;\n return;\n }\n if (action === 'inner_prev') {\n curIndex.value -= 1;\n return;\n }\n if (action === 'inner_rewrite') {\n isRewrite.value = true;\n return;\n }\n\n let res = {\n action,\n payload: {},\n };\n \n // 区分是否为form组件的按钮,如果带有payload 则约定为非form组件的按钮\n if (parentScope !== 'form') {\n res = {\n action,\n payload,\n };\n } else {\n if (!skipValidation) {\n await formRefs.value[index]?.validate();\n res = {\n action,\n payload: {\n ...hitlData.value[index],\n ...payload,\n }\n };\n } else {\n res = {\n action,\n payload,\n };\n }\n \n }\n \n if (isRewrite.value && action.startsWith('core_')) {\n isRewrite.value = false;\n }\n \n emit('coreSubmit', res);\n };\n\n /**\n * 重置 curInit(在组件更新时调用)\n */\n const resetCurInit = () => {\n curInit = 0;\n };\n\n /**\n * 获取当前表单索引(用于表单渲染)\n */\n const getCurInit = () => {\n const current = curInit;\n curInit++;\n return current;\n };\n\n return {\n formRefs,\n curIndex,\n isRewrite,\n btnClick,\n resetCurInit,\n getCurInit,\n };\n};\n\n"],"names":["hitlData","emit","formRefs","useTemplateRefsList","curIndex","ref","isRewrite","curInit","btnClick","async","index","action","payload","parentScope","skipValidation","value","res","_a","validate","startsWith","resetCurInit","getCurInit","current"],"mappings":"gQAS8B,CAC5BA,EACAC,KAEA,MAAMC,EAAWC,EAAAA,sBACXC,EAAWC,EAAAA,IAAI,GACfC,EAAYD,EAAAA,KAAI,GAEtB,IAAIE,EAAU,EA8Ed,MAAO,CACLL,WACAE,WACAE,YACAE,SA7EeC,MACfC,EACAC,EACAC,EACAC,EACAC,WAEA,GAAe,eAAXH,EAEF,YADAP,EAASW,OAAS,GAGpB,GAAe,eAAXJ,EAEF,YADAP,EAASW,OAAS,GAGpB,GAAe,kBAAXJ,EAEF,YADAL,EAAUS,OAAQ,GAIpB,IAAIC,EAAM,CACRL,SACAC,QAAS,CAAA,GAIS,SAAhBC,GAMGC,EALLE,EAAM,CACJL,SACAC,kBAIM,OAAAK,EAAAf,EAASa,MAAML,SAAf,EAAAO,EAAuBC,YAC7BF,EAAM,CACJL,SACAC,QAAS,IACJZ,EAASe,MAAML,MACfE,KAYPN,EAAUS,OAASJ,EAAOQ,WAAW,WACvCb,EAAUS,OAAQ,GAGpBd,EAAK,aAAce,IAwBnBI,aAlBmB,KACnBb,EAAU,GAkBVc,WAZiB,KACjB,MAAMC,EAAUf,EAEhB,OADAA,IACOe"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),s=require("element-plus");/* empty css *//* empty css */require("../../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/form-item.scss.js"),/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */require("../../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/date-picker.scss.js"),/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */require("../../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/config-provider.scss.js");const l=require("../../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/es/locale/lang/zh-cn.js"),r=require("../../core-text/index.js"),t=require("../../core-tips/index.js"),o=require("../../core-result/index.js"),p=require("../../core-table/index.js"),i=require("../../core-chart/index.js"),n=require("../../core-card/index.js"),u=require("../../core-upload/index.js"),a=require("../utils/parseCorePilotSchema.js"),d=require("../utils/jsonUtils.js"),m=require("../utils/disabledUtils.js"),c=()=>e.h("div",{class:"hitl-skeleton"},[e.h("div",{class:"skeleton-header"},[e.h("div",{class:"skeleton-avatar"}),e.h("div",{class:"skeleton-title"})]),e.h("div",{class:"skeleton-item skeleton-item-long"}),e.h("div",{class:"skeleton-item skeleton-item-medium"}),e.h("div",{class:"skeleton-item skeleton-item-short"}),e.h("div",{class:"skeleton-item skeleton-item-long"}),e.h("div",{class:"skeleton-item skeleton-item-medium"})]),_=(h,v,f,k)=>{var g,b,N,j,q,E,y,C,x,P,D,w,S,T,V,R,U,I;if(!h)return null;const{hitlData:F,formRefs:O,curIndex:B,getCurInit:G,btnClick:J,uploadHeaders:L,uploadExtendData:z,disabledContext:H}=v;let M=[];var A,K;switch(["sub","pre","text","ElForm"].includes(h.tagName)||(A=h.children||[],K=f,M=A&&0!==A.length?A.map((e,s)=>_(e,v,void 0!==K?K:f,k)):[]),h.type){case"root":return e.h("div",{class:"markdown-body"},e.h(s.ElConfigProvider,{locale:l},M));case"element":if("sub"===h.tagName){const s=[{type:"element",tagName:"span",properties:{class:"x-markdown-split"}},...h.children||[]].map(e=>_(e,v,f));return e.h("span",{...h.properties,class:"x-markdown-sub"},s)}if("span"===h.tagName)return e.h("span",{...h.properties},M);if("img"===h.tagName)return e.h("img",{...h.properties,class:"markdown-image","data-processed":"false"});if("a"===h.tagName){const s=(null==(g=h.properties)?void 0:g.href)||"",l=s?s.split(".").pop():null;return e.h("a",{...h.properties,class:"file-link","data-file-type":l},M)}if("ElTimeline"===h.tagName)return e.h(s.ElTimeline,{...h.properties},M);if("table"===h.tagName)return e.h("div",{class:"custom-table-container"},[e.h("table",M)]);if("view"===h.tagName)return e.h("div",{class:"custom-view-container"},[M[B]]);if("ElRow"===h.tagName)return e.h(s.ElRow,{...h.properties},M);if("ElCol"===h.tagName)return e.h(s.ElCol,{...h.properties},M);if("ElCard"===h.tagName)return e.h(s.ElCard,{...h.properties},M);if("ElTag"===h.tagName)return e.h(s.ElTag,{...h.properties},M);if("CoreCard"===h.tagName){const s={};return(null==(b=h.slots)?void 0:b.header)&&(s.header=()=>h.slots.header.map(e=>_(e,v,f))),M&&M.length>0&&(s.default=()=>M),e.h(n,{...h.properties},s)}if("ElForm"===h.tagName){const l=G(),r=(h.children||[]).map(e=>_(e,v,l));return e.h(s.ElForm,{ref:O.set,model:F[l],...h.properties,disabled:m.checkDisabled(h,H)},r)}if("ElFormItem"===h.tagName)return e.h(s.ElFormItem,{...h.properties},M);if("ElButton"===h.tagName){let l=null==(N=h.properties)?void 0:N.payload;"table"===h.parentScope&&(l=k);const r="form"===h.parentScope?f:void 0;return e.h(s.ElButton,{...h.properties,disabled:m.checkDisabled(h,H),onClick:()=>{var e;J(void 0!==r?r:void 0!==f?f:0,null==(e=h.properties)?void 0:e.action,l,h.parentScope)}},M)}if("ElSelect"===h.tagName)return e.h(s.ElSelect,{...h.properties,disabled:m.checkDisabled(h,H),modelValue:null==(q=F[f])?void 0:q[null==(j=h.properties)?void 0:j.formProp],"onUpdate:modelValue":e=>{var s;F[f]&&(F[f][null==(s=h.properties)?void 0:s.formProp]=e)}},M);if("ElDatePicker"===h.tagName)return e.h(s.ElDatePicker,{...h.properties,disabled:m.checkDisabled(h,H),modelValue:null==(y=F[f])?void 0:y[null==(E=h.properties)?void 0:E.formProp],"onUpdate:modelValue":e=>{var s;F[f]&&(F[f][null==(s=h.properties)?void 0:s.formProp]=e)}},M);if("ElInput"===h.tagName)return e.h(s.ElInput,{...h.properties,disabled:m.checkDisabled(h,H),modelValue:null==(x=F[f])?void 0:x[null==(C=h.properties)?void 0:C.formProp],"onUpdate:modelValue":e=>{var s;F[f]&&(F[f][null==(s=h.properties)?void 0:s.formProp]=e)}},M);if("ElRadioGroup"===h.tagName)return e.h(s.ElRadioGroup,{...h.properties,disabled:m.checkDisabled(h,H),modelValue:null==(D=F[f])?void 0:D[null==(P=h.properties)?void 0:P.formProp],"onUpdate:modelValue":e=>{var s;F[f]&&(F[f][null==(s=h.properties)?void 0:s.formProp]=e)}},M);if("ElRadio"===h.tagName)return e.h(s.ElRadio,{...h.properties,disabled:m.checkDisabled(h,H)},M);if("ElTable"===h.tagName)return e.h(p,{...h.properties},M);if("ElTableColumn"===h.tagName)return e.h(s.ElTableColumn,{...h.properties},{default:e=>{const s=(h.children||[]).map(s=>_(s,v,-1/0,e.row)),l=(h.children||[]).findIndex(s=>{var l;return s.value===e.row[null==(l=h.properties)?void 0:l.prop]&&void 0!==s.value});return-1===l?s:null==s?void 0:s[l]}});if("CoreText"===h.tagName)return e.h(r,{...h.properties});if("CoreTips"===h.tagName)return e.h(t,{...h.properties});if("CoreResult"===h.tagName)return e.h(o,{...h.properties});if("CoreChart"===h.tagName)return e.h(i,{...h.properties});if("CoreUpload"===h.tagName){if("form"===h.parentScope&&(null==(w=h.properties)?void 0:w.formProp)){const s=h.properties.formProp;return e.h(u,{headers:L,extendData:z,...h.properties,disabled:m.checkDisabled(h,H),fileList:(null==(S=F[f])?void 0:S[s])||[],"onUpdate:fileList":e=>{F[f]||(F[f]={}),F[f].__files__||(F[f].__files__={}),F[f].__files__[s]=e,F[f][s]=e}})}return e.h(u,{...h.properties,disabled:m.checkDisabled(h,H)})}if("pre"===h.tagName){const s=null==(T=h.children)?void 0:T.find(e=>"code"===e.tagName);if(s&&(null==(R=null==(V=s.properties)?void 0:V.className)?void 0:R.includes("language-CorePilot"))){const l=(null==(I=null==(U=s.children)?void 0:U[0])?void 0:I.value)||"";if(!d.isCompleteJSON(l))return c();try{const s=JSON.parse(l),r=a.parseCorePilot(s),t=_(r,v);return e.h("div",{class:"hitl-wrapper"},[t])}catch(Q){return c()}}}return e.h(h.tagName,h.properties,M);case"text":return h.value.trim();default:return null}};exports.hastToVNode=_;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),r=require("element-plus");/* empty css *//* empty css */require("../../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/form-item.scss.js"),/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */require("../../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/date-picker.scss.js"),/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */require("../../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/config-provider.scss.js");const s=require("../../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/es/locale/lang/zh-cn.js"),l=require("../../core-text/index.js"),t=require("../../core-tips/index.js"),o=require("../../core-result/index.js"),p=require("../../core-table/index.js"),i=require("../../core-chart/index.js"),n=require("../../core-card/index.js"),u=require("../../core-upload/index.js"),a=require("../utils/parseCorePilotSchema.js"),d=require("../utils/jsonUtils.js"),m=require("../utils/disabledUtils.js"),c=()=>e.h("div",{class:"hitl-skeleton"},[e.h("div",{class:"skeleton-header"},[e.h("div",{class:"skeleton-avatar"}),e.h("div",{class:"skeleton-title"})]),e.h("div",{class:"skeleton-item skeleton-item-long"}),e.h("div",{class:"skeleton-item skeleton-item-medium"}),e.h("div",{class:"skeleton-item skeleton-item-short"}),e.h("div",{class:"skeleton-item skeleton-item-long"}),e.h("div",{class:"skeleton-item skeleton-item-medium"})]),_=(h,v,f,k)=>{var g,b,N,j,q,y,E,C,x,P,w,D,S,T,V,R,U,I,F;if(!h)return null;const{hitlData:O,formRefs:A,curIndex:B,getCurInit:G,btnClick:J,uploadHeaders:L,uploadExtendData:z,disabledContext:H}=v;let M=[];var K,Q;switch(["sub","pre","text","ElForm"].includes(h.tagName)||(K=h.children||[],Q=f,M=K&&0!==K.length?K.map((e,r)=>_(e,v,void 0!==Q?Q:f,k)):[]),h.type){case"root":return e.h("div",{class:"markdown-body"},e.h(r.ElConfigProvider,{locale:s},M));case"element":if("sub"===h.tagName){const r=[{type:"element",tagName:"span",properties:{class:"x-markdown-split"}},...h.children||[]].map(e=>_(e,v,f));return e.h("span",{...h.properties,class:"x-markdown-sub"},r)}if("span"===h.tagName)return e.h("span",{...h.properties},M);if("img"===h.tagName)return e.h("img",{...h.properties,class:"markdown-image","data-processed":"false"});if("a"===h.tagName){const r=(null==(g=h.properties)?void 0:g.href)||"",s=r?r.split(".").pop():null;return e.h("a",{...h.properties,class:"file-link","data-file-type":s},M)}if("ElTimeline"===h.tagName)return e.h(r.ElTimeline,{...h.properties},M);if("table"===h.tagName)return e.h("div",{class:"custom-table-container"},[e.h("table",M)]);if("view"===h.tagName)return e.h("div",{class:"custom-view-container"},[M[B]]);if("ElRow"===h.tagName)return e.h(r.ElRow,{...h.properties},M);if("ElCol"===h.tagName)return e.h(r.ElCol,{...h.properties},M);if("ElCard"===h.tagName)return e.h(r.ElCard,{...h.properties},M);if("ElTag"===h.tagName)return e.h(r.ElTag,{...h.properties},M);if("CoreCard"===h.tagName){const r={};return(null==(b=h.slots)?void 0:b.header)&&(r.header=()=>h.slots.header.map(e=>_(e,v,f))),M&&M.length>0&&(r.default=()=>M),e.h(n,{...h.properties},r)}if("ElForm"===h.tagName){const s=G(),l=(h.children||[]).map(e=>_(e,v,s));return e.h(r.ElForm,{ref:A.set,model:O[s],...h.properties,disabled:m.checkDisabled(h,H)},l)}if("ElFormItem"===h.tagName)return e.h(r.ElFormItem,{...h.properties},M);if("ElButton"===h.tagName){let s=null==(N=h.properties)?void 0:N.payload;"table"===h.parentScope&&(s={...s,...k});const l="form"===h.parentScope?f:void 0,t=(null==(j=h.properties)?void 0:j.skipValidation)||!1;return e.h(r.ElButton,{...h.properties,disabled:m.checkDisabled(h,H),onClick:()=>{var e;J(void 0!==l?l:void 0!==f?f:0,null==(e=h.properties)?void 0:e.action,s,h.parentScope,t)}},M)}if("ElSelect"===h.tagName)return e.h(r.ElSelect,{...h.properties,disabled:m.checkDisabled(h,H),modelValue:null==(y=O[f])?void 0:y[null==(q=h.properties)?void 0:q.formProp],"onUpdate:modelValue":e=>{var r;O[f]&&(O[f][null==(r=h.properties)?void 0:r.formProp]=e)}},M);if("ElDatePicker"===h.tagName)return e.h(r.ElDatePicker,{...h.properties,disabled:m.checkDisabled(h,H),modelValue:null==(C=O[f])?void 0:C[null==(E=h.properties)?void 0:E.formProp],"onUpdate:modelValue":e=>{var r;O[f]&&(O[f][null==(r=h.properties)?void 0:r.formProp]=e)}},M);if("ElInput"===h.tagName)return e.h(r.ElInput,{...h.properties,disabled:m.checkDisabled(h,H),modelValue:null==(P=O[f])?void 0:P[null==(x=h.properties)?void 0:x.formProp],"onUpdate:modelValue":e=>{var r;O[f]&&(O[f][null==(r=h.properties)?void 0:r.formProp]=e)}},M);if("ElRadioGroup"===h.tagName)return e.h(r.ElRadioGroup,{...h.properties,disabled:m.checkDisabled(h,H),modelValue:null==(D=O[f])?void 0:D[null==(w=h.properties)?void 0:w.formProp],"onUpdate:modelValue":e=>{var r;O[f]&&(O[f][null==(r=h.properties)?void 0:r.formProp]=e)}},M);if("ElRadio"===h.tagName)return e.h(r.ElRadio,{...h.properties,disabled:m.checkDisabled(h,H)},M);if("ElTable"===h.tagName)return e.h(p,{...h.properties},M);if("ElTableColumn"===h.tagName)return e.h(r.ElTableColumn,{...h.properties},{default:e=>{var r,s,l;const t=e.row[null==(r=h.properties)?void 0:r.prop];if(Array.isArray(t))return t.map(e=>{var r;return null==(r=h.children)?void 0:r.find(r=>r.value===e&&void 0!==r.value)}).map(r=>_(r,v,-1/0,e.row));const o=(h.children||[]).findIndex(r=>{var s;return r.value===e.row[null==(s=h.properties)?void 0:s.prop]&&void 0!==r.value});return-1!==o?_(null==(s=h.children)?void 0:s[o],v,-1/0,e.row):null==(l=h.children)?void 0:l.map(r=>_(r,v,-1/0,e.row))}});if("CoreText"===h.tagName)return e.h(l,{...h.properties});if("CoreTips"===h.tagName)return e.h(t,{...h.properties});if("CoreResult"===h.tagName)return e.h(o,{...h.properties});if("CoreChart"===h.tagName)return e.h(i,{...h.properties});if("CoreUpload"===h.tagName){if("form"===h.parentScope&&(null==(S=h.properties)?void 0:S.formProp)){const r=h.properties.formProp;return e.h(u,{headers:L,extendData:z,...h.properties,disabled:m.checkDisabled(h,H),fileList:(null==(T=O[f])?void 0:T[r])||[],"onUpdate:fileList":e=>{O[f]||(O[f]={}),O[f].__files__||(O[f].__files__={}),O[f].__files__[r]=e,O[f][r]=e}})}return e.h(u,{...h.properties,disabled:m.checkDisabled(h,H)})}if("pre"===h.tagName){const r=null==(V=h.children)?void 0:V.find(e=>"code"===e.tagName);if(r&&(null==(U=null==(R=r.properties)?void 0:R.className)?void 0:U.includes("language-CorePilot"))){const s=(null==(F=null==(I=r.children)?void 0:I[0])?void 0:F.value)||"";if(!d.isCompleteJSON(s))return c();try{const r=JSON.parse(s),l=a.parseCorePilot(r),t=_(l,v);return e.h("div",{class:"hitl-wrapper"},[t])}catch(W){return c()}}}return e.h(h.tagName,h.properties,M);case"text":return h.value.trim();default:return null}};exports.hastToVNode=_;
2
2
  //# sourceMappingURL=hastRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hastRenderer.js","sources":["../../../../../src/components/x-markdown/renderers/hastRenderer.ts"],"sourcesContent":["/**\n * HAST (HTML AST) 渲染器\n * 将 HAST 节点转换为 Vue VNode\n * 优化了复杂表单的性能问题\n */\n\nimport { h } from 'vue';\nimport {\n ElMessage,\n ElForm,\n ElFormItem,\n ElInput,\n ElCard,\n ElButton,\n ElSelect,\n ElDatePicker,\n ElTableColumn,\n ElTimeline,\n ElRow,\n ElCol,\n ElRadioGroup,\n ElRadio,\n ElConfigProvider,\n ElTag,\n} from 'element-plus';\nimport zhCN from 'element-plus/es/locale/lang/zh-cn';\nimport CoreText from '../../core-text';\nimport CoreTips from '../../core-tips';\nimport CoreResult from '../../core-result';\nimport CoreTable from '../../core-table';\nimport CoreChart from '../../core-chart';\nimport CoreCard from '../../core-card';\nimport CoreUpload from '../../core-upload';\nimport { parseCorePilot } from '../utils/parseCorePilotSchema';\nimport { isCompleteJSON } from '../utils/jsonUtils';\nimport { checkDisabled, DisabledCheckContext } from '../utils/disabledUtils';\nimport { InputSchema } from '@/types/index.ts';\n\n/**\n * 渲染骨架屏组件\n */\nconst renderSkeleton = () => {\n return h(\"div\", {\n class: \"hitl-skeleton\",\n }, [\n // 头部骨架\n h(\"div\", {\n class: \"skeleton-header\",\n }, [\n h(\"div\", { class: \"skeleton-avatar\" }),\n h(\"div\", { class: \"skeleton-title\" }),\n ]),\n // 内容骨架\n h(\"div\", { class: \"skeleton-item skeleton-item-long\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-medium\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-short\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-long\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-medium\" }),\n ]);\n};\n\n/**\n * 渲染器配置接口\n */\nexport interface RendererConfig {\n hitlData: Array<Record<string, any>>;\n formRefs: any;\n curIndex: number;\n getCurInit: () => number;\n btnClick: (index: number, action: string, payload: any, parentScope?: 'form' | 'table') => void;\n uploadHeaders: Record<string, string>;\n uploadExtendData: Record<string, any>;\n disabledContext: DisabledCheckContext;\n}\n\n/**\n * 将hast(HTML AST)转换为Vue VNode\n * 性能优化:\n * 1. 使用缓存避免重复计算\n * 2. 延迟子节点渲染(仅在需要时渲染)\n * 3. 优化递归深度\n * \n * @param node - hast节点\n * @param config - 渲染器配置\n * @param index - 表单索引\n * @param row - 表格行数据\n * @returns Vue虚拟节点\n */\nexport const hastToVNode = (\n node: any,\n config: RendererConfig,\n index?: number,\n row?: any\n): any => {\n if (!node) return null;\n\n const {\n hitlData,\n formRefs,\n curIndex,\n getCurInit,\n btnClick,\n uploadHeaders,\n uploadExtendData,\n disabledContext,\n } = config;\n\n // 缓存子节点渲染函数,避免重复计算\n const renderChildren = (children: any[], formIndex?: number) => {\n if (!children || children.length === 0) return [];\n \n // 对于复杂表单,使用批量渲染优化\n // 优先使用传入的 formIndex,如果没有则使用当前的 index\n return children.map((child, idx) => {\n return hastToVNode(child, config, formIndex !== undefined ? formIndex : index, row);\n });\n };\n\n const blackTagNames = ['sub', 'pre', 'text', 'ElForm'];\n let children: any[] = [];\n\n if (!blackTagNames.includes(node.tagName)) {\n // 如果当前节点在表单中(index 是数字),继续传递这个 index 给子节点\n // 这样可以确保表单内的所有子节点(包括按钮)都能获取到正确的表单索引\n children = renderChildren(node.children || [], index);\n }\n\n switch (node.type) {\n case \"root\":\n return h(\n \"div\",\n { class: \"markdown-body\" },\n h(ElConfigProvider, {\n locale: zhCN,\n }, children)\n );\n\n case \"element\":\n // 处理 sub 标签(引用标记)\n if (node.tagName === \"sub\") {\n const formatChildren = [\n {\n type: \"element\",\n tagName: \"span\",\n properties: {\n class: \"x-markdown-split\",\n },\n },\n ...(node.children || [])\n ];\n const subChildren = formatChildren.map(child => hastToVNode(child, config, index));\n return h(\"span\", {\n ...node.properties,\n class: \"x-markdown-sub\",\n }, subChildren);\n }\n\n if (node.tagName === \"span\") {\n return h(\"span\", {\n ...node.properties,\n }, children);\n }\n\n // 处理特殊元素:图片、链接、代码块等\n if (node.tagName === \"img\") {\n return h(\"img\", {\n ...node.properties,\n class: \"markdown-image\",\n \"data-processed\": \"false\"\n });\n }\n\n if (node.tagName === \"a\") {\n const href = node.properties?.href || '';\n const fileType = href ? href.split('.').pop() : null;\n return h(\n \"a\",\n {\n ...node.properties,\n class: 'file-link',\n 'data-file-type': fileType,\n },\n children\n );\n }\n\n if (node.tagName === 'ElTimeline') {\n return h(ElTimeline, {\n ...node.properties,\n }, children);\n }\n\n if (node.tagName === 'table') {\n return h(\n \"div\",\n { class: 'custom-table-container' },\n [h(\"table\", children)]\n );\n }\n\n if (node.tagName === 'view') {\n return h(\n 'div',\n { class: 'custom-view-container' },\n [children[curIndex]]\n );\n }\n\n if (node.tagName === 'ElRow') {\n return h(ElRow, {\n ...node.properties,\n }, children);\n }\n\n if (node.tagName === 'ElCol') {\n return h(ElCol, {\n ...node.properties,\n }, children);\n }\n\n if (node.tagName === 'ElCard') {\n return h(ElCard, {\n ...node.properties,\n }, children);\n }\n\n if (node.tagName === 'ElTag') {\n return h(\n ElTag,\n {\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'CoreCard') {\n const slots: any = {};\n \n if (node.slots?.header) {\n slots.header = () => {\n return node.slots.header.map((slotItem: any) => {\n return hastToVNode(slotItem, config, index);\n });\n };\n }\n \n if (children && children.length > 0) {\n slots.default = () => children;\n }\n \n return h(CoreCard, {\n ...node.properties,\n }, slots);\n }\n\n // 表单相关元素\n if (node.tagName === 'ElForm') {\n const formIndex = getCurInit();\n const formChildren = (node.children || []).map((child: any) => \n hastToVNode(child, config, formIndex)\n );\n \n return h(\n ElForm,\n {\n ref: formRefs.set,\n model: hitlData[formIndex],\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n },\n formChildren\n );\n }\n\n if (node.tagName === 'ElFormItem') {\n return h(ElFormItem, {\n ...node.properties,\n }, children);\n }\n\n // 表单控件\n if (node.tagName === 'ElButton') {\n let payload = node.properties?.payload;\n if (node.parentScope === 'table') {\n payload = row;\n }\n // 确保按钮在表单中使用正确的表单索引\n // 当 parentScope 是 'form' 时,index 应该是表单索引(从表单渲染时传递下来的)\n // 当 parentScope 不是 'form' 时,index 可能是 undefined 或其他值,但不会用于表单验证\n const buttonFormIndex = node.parentScope === 'form' ? index : undefined;\n return h(\n ElButton,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n onClick: () => {\n // 如果按钮在表单中(parentScope === 'form'),必须使用正确的表单索引进行验证\n // 如果不在表单中,使用 0 作为默认值(但不会触发表单验证,因为 btnClick 会检查 parentScope)\n // 关键:index 在表单渲染时已经正确传递,所以 buttonFormIndex 应该是正确的表单索引\n const validateIndex = buttonFormIndex !== undefined ? buttonFormIndex : (index !== undefined ? index : 0);\n btnClick(validateIndex, node.properties?.action, payload, node.parentScope);\n },\n },\n children\n );\n }\n\n if (node.tagName === 'ElSelect') {\n return h(\n ElSelect,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n modelValue: hitlData[index!]?.[node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n if (hitlData[index!]) {\n hitlData[index!][node.properties?.formProp] = value;\n }\n },\n },\n children\n );\n }\n\n if (node.tagName === 'ElDatePicker') {\n return h(\n ElDatePicker,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n modelValue: hitlData[index!]?.[node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n if (hitlData[index!]) {\n hitlData[index!][node.properties?.formProp] = value;\n }\n },\n },\n children\n );\n }\n\n if (node.tagName === 'ElInput') {\n return h(\n ElInput,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n modelValue: hitlData[index!]?.[node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n if (hitlData[index!]) {\n hitlData[index!][node.properties?.formProp] = value;\n }\n },\n },\n children\n );\n }\n\n if (node.tagName === 'ElRadioGroup') {\n return h(\n ElRadioGroup,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n modelValue: hitlData[index!]?.[node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n if (hitlData[index!]) {\n hitlData[index!][node.properties?.formProp] = value as string;\n }\n }\n },\n children\n );\n }\n\n if (node.tagName === 'ElRadio') {\n return h(\n ElRadio,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n },\n children\n );\n }\n\n // 表格相关\n if (node.tagName === 'ElTable') {\n return h(\n CoreTable,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElTableColumn') {\n return h(\n ElTableColumn,\n {\n ...node.properties,\n },\n {\n default: (scope: any) => {\n const columnChildren = (node.children || []).map((child: any) => \n hastToVNode(child, config, -Infinity, scope.row)\n );\n const childIndex = (node.children || []).findIndex(\n (child: any) => child.value === scope.row[node.properties?.prop] && child.value !== undefined\n );\n return childIndex === -1 ? columnChildren : columnChildren?.[childIndex];\n },\n }\n );\n }\n\n // 自定义组件\n if (node.tagName === 'CoreText') {\n return h(CoreText, {\n ...node.properties,\n });\n }\n\n if (node.tagName === 'CoreTips') {\n return h(CoreTips, {\n ...node.properties,\n });\n }\n\n if (node.tagName === 'CoreResult') {\n return h(CoreResult, {\n ...node.properties,\n });\n }\n\n if (node.tagName === 'CoreChart') {\n return h(CoreChart, {\n ...node.properties,\n });\n }\n\n if (node.tagName === 'CoreUpload') {\n // 如果在表单中,需要处理 formProp 和双向绑定\n if (node.parentScope === 'form' && node.properties?.formProp) {\n const formProp = node.properties.formProp;\n return h(\n CoreUpload,\n {\n headers: uploadHeaders,\n extendData: uploadExtendData,\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n fileList: hitlData[index!]?.[formProp] || [],\n 'onUpdate:fileList': (value: any) => {\n if (!hitlData[index!]) {\n hitlData[index!] = {};\n }\n // 针对目前上传的文件解析,CA 这边必须得放在files 属性中,故被迫需要进行兼容\n // 这里将基于 __files__ 去识别,后续在coreagent 的 adapter 中进行处理\n if (!hitlData[index!].__files__) {\n hitlData[index!].__files__ = {};\n }\n hitlData[index!].__files__[formProp] = value;\n hitlData[index!][formProp] = value;\n },\n }\n );\n }\n // 非表单场景,直接渲染\n return h(\n CoreUpload,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n }\n );\n }\n\n // 处理CorePilot代码块\n if (node.tagName === \"pre\") {\n const codeNode = node.children?.find((child: any) => child.tagName === \"code\");\n if (codeNode) {\n if (codeNode.properties?.className?.includes(\"language-CorePilot\")) {\n const code = codeNode.children?.[0]?.value || '';\n // 检查 JSON 是否完整\n if (!isCompleteJSON(code)) {\n // JSON 不完整,显示骨架屏\n return renderSkeleton();\n }\n try {\n const schema = JSON.parse(code);\n const viewTree = parseCorePilot(schema);\n const corePilotChildren = hastToVNode(viewTree, config);\n return h(\"div\", {\n class: \"hitl-wrapper\",\n }, [corePilotChildren]);\n } catch (error) {\n // JSON 解析失败,可能是格式错误,显示骨架屏\n return renderSkeleton();\n }\n }\n }\n }\n\n // 其他普通元素\n return h(\n node.tagName,\n node.properties,\n children\n );\n\n case \"text\":\n return node.value.trim();\n\n default:\n return null;\n }\n};\n\n"],"names":["renderSkeleton","h","class","hastToVNode","node","config","index","row","hitlData","formRefs","curIndex","getCurInit","btnClick","uploadHeaders","uploadExtendData","disabledContext","children","formIndex","includes","tagName","length","map","child","idx","type","ElConfigProvider","locale","zhCN","subChildren","properties","href","_a","fileType","split","pop","ElTimeline","ElRow","ElCol","ElCard","ElTag","slots","_b","header","slotItem","default","CoreCard","formChildren","ElForm","ref","set","model","disabled","checkDisabled","ElFormItem","payload","_c","parentScope","buttonFormIndex","ElButton","onClick","action","ElSelect","modelValue","_e","_d","formProp","value","ElDatePicker","_g","_f","ElInput","_i","_h","ElRadioGroup","_k","_j","ElRadio","CoreTable","ElTableColumn","scope","columnChildren","Infinity","childIndex","findIndex","prop","CoreText","CoreTips","CoreResult","CoreChart","_l","CoreUpload","headers","extendData","fileList","_m","__files__","codeNode","_n","find","_p","_o","className","code","_r","_q","isCompleteJSON","schema","JSON","parse","viewTree","parseCorePilot","corePilotChildren","error","trim"],"mappings":"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"}
1
+ {"version":3,"file":"hastRenderer.js","sources":["../../../../../src/components/x-markdown/renderers/hastRenderer.ts"],"sourcesContent":["/**\n * HAST (HTML AST) 渲染器\n * 将 HAST 节点转换为 Vue VNode\n * 优化了复杂表单的性能问题\n */\n\nimport { h } from 'vue';\nimport {\n ElMessage,\n ElForm,\n ElFormItem,\n ElInput,\n ElCard,\n ElButton,\n ElSelect,\n ElDatePicker,\n ElTableColumn,\n ElTimeline,\n ElRow,\n ElCol,\n ElRadioGroup,\n ElRadio,\n ElConfigProvider,\n ElTag,\n} from 'element-plus';\nimport zhCN from 'element-plus/es/locale/lang/zh-cn';\nimport CoreText from '../../core-text';\nimport CoreTips from '../../core-tips';\nimport CoreResult from '../../core-result';\nimport CoreTable from '../../core-table';\nimport CoreChart from '../../core-chart';\nimport CoreCard from '../../core-card';\nimport CoreUpload from '../../core-upload';\nimport { parseCorePilot } from '../utils/parseCorePilotSchema';\nimport { isCompleteJSON } from '../utils/jsonUtils';\nimport { checkDisabled, DisabledCheckContext } from '../utils/disabledUtils';\nimport { InputSchema } from '@/types/index.ts';\n\n/**\n * 渲染骨架屏组件\n */\nconst renderSkeleton = () => {\n return h(\"div\", {\n class: \"hitl-skeleton\",\n }, [\n // 头部骨架\n h(\"div\", {\n class: \"skeleton-header\",\n }, [\n h(\"div\", { class: \"skeleton-avatar\" }),\n h(\"div\", { class: \"skeleton-title\" }),\n ]),\n // 内容骨架\n h(\"div\", { class: \"skeleton-item skeleton-item-long\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-medium\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-short\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-long\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-medium\" }),\n ]);\n};\n\n/**\n * 渲染器配置接口\n */\nexport interface RendererConfig {\n hitlData: Array<Record<string, any>>;\n formRefs: any;\n curIndex: number;\n getCurInit: () => number;\n btnClick: (index: number, action: string, payload: any, parentScope?: 'form' | 'table', skipValidation?: boolean) => void;\n uploadHeaders: Record<string, string>;\n uploadExtendData: Record<string, any>;\n disabledContext: DisabledCheckContext;\n}\n\n/**\n * 将hast(HTML AST)转换为Vue VNode\n * 性能优化:\n * 1. 使用缓存避免重复计算\n * 2. 延迟子节点渲染(仅在需要时渲染)\n * 3. 优化递归深度\n * \n * @param node - hast节点\n * @param config - 渲染器配置\n * @param index - 表单索引\n * @param row - 表格行数据\n * @returns Vue虚拟节点\n */\nexport const hastToVNode = (\n node: any,\n config: RendererConfig,\n index?: number,\n row?: any\n): any => {\n if (!node) return null;\n\n const {\n hitlData,\n formRefs,\n curIndex,\n getCurInit,\n btnClick,\n uploadHeaders,\n uploadExtendData,\n disabledContext,\n } = config;\n\n // 缓存子节点渲染函数,避免重复计算\n const renderChildren = (children: any[], formIndex?: number) => {\n if (!children || children.length === 0) return [];\n \n // 对于复杂表单,使用批量渲染优化\n // 优先使用传入的 formIndex,如果没有则使用当前的 index\n return children.map((child, idx) => {\n return hastToVNode(child, config, formIndex !== undefined ? formIndex : index, row);\n });\n };\n\n const blackTagNames = ['sub', 'pre', 'text', 'ElForm'];\n let children: any[] = [];\n\n if (!blackTagNames.includes(node.tagName)) {\n // 如果当前节点在表单中(index 是数字),继续传递这个 index 给子节点\n // 这样可以确保表单内的所有子节点(包括按钮)都能获取到正确的表单索引\n children = renderChildren(node.children || [], index);\n }\n\n switch (node.type) {\n case \"root\":\n return h(\n \"div\",\n { class: \"markdown-body\" },\n h(ElConfigProvider, {\n locale: zhCN,\n }, children)\n );\n\n case \"element\":\n // 处理 sub 标签(引用标记)\n if (node.tagName === \"sub\") {\n const formatChildren = [\n {\n type: \"element\",\n tagName: \"span\",\n properties: {\n class: \"x-markdown-split\",\n },\n },\n ...(node.children || [])\n ];\n const subChildren = formatChildren.map(child => hastToVNode(child, config, index));\n return h(\"span\", {\n ...node.properties,\n class: \"x-markdown-sub\",\n }, subChildren);\n }\n\n if (node.tagName === \"span\") {\n return h(\"span\", {\n ...node.properties,\n }, children);\n }\n\n // 处理特殊元素:图片、链接、代码块等\n if (node.tagName === \"img\") {\n return h(\"img\", {\n ...node.properties,\n class: \"markdown-image\",\n \"data-processed\": \"false\"\n });\n }\n\n if (node.tagName === \"a\") {\n const href = node.properties?.href || '';\n const fileType = href ? href.split('.').pop() : null;\n return h(\n \"a\",\n {\n ...node.properties,\n class: 'file-link',\n 'data-file-type': fileType,\n },\n children\n );\n }\n\n if (node.tagName === 'ElTimeline') {\n return h(ElTimeline, {\n ...node.properties,\n }, children);\n }\n\n if (node.tagName === 'table') {\n return h(\n \"div\",\n { class: 'custom-table-container' },\n [h(\"table\", children)]\n );\n }\n\n if (node.tagName === 'view') {\n return h(\n 'div',\n { class: 'custom-view-container' },\n [children[curIndex]]\n );\n }\n\n if (node.tagName === 'ElRow') {\n return h(ElRow, {\n ...node.properties,\n }, children);\n }\n\n if (node.tagName === 'ElCol') {\n return h(ElCol, {\n ...node.properties,\n }, children);\n }\n\n if (node.tagName === 'ElCard') {\n return h(ElCard, {\n ...node.properties,\n }, children);\n }\n\n if (node.tagName === 'ElTag') {\n return h(\n ElTag,\n {\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'CoreCard') {\n const slots: any = {};\n \n if (node.slots?.header) {\n slots.header = () => {\n return node.slots.header.map((slotItem: any) => {\n return hastToVNode(slotItem, config, index);\n });\n };\n }\n \n if (children && children.length > 0) {\n slots.default = () => children;\n }\n \n return h(CoreCard, {\n ...node.properties,\n }, slots);\n }\n\n // 表单相关元素\n if (node.tagName === 'ElForm') {\n const formIndex = getCurInit();\n const formChildren = (node.children || []).map((child: any) => \n hastToVNode(child, config, formIndex)\n );\n \n return h(\n ElForm,\n {\n ref: formRefs.set,\n model: hitlData[formIndex],\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n },\n formChildren\n );\n }\n\n if (node.tagName === 'ElFormItem') {\n return h(ElFormItem, {\n ...node.properties,\n }, children);\n }\n\n // 表单控件\n if (node.tagName === 'ElButton') {\n let payload = node.properties?.payload;\n if (node.parentScope === 'table') {\n payload = {\n ...payload,\n ...row,\n };\n }\n // 确保按钮在表单中使用正确的表单索引\n // 当 parentScope 是 'form' 时,index 应该是表单索引(从表单渲染时传递下来的)\n // 当 parentScope 不是 'form' 时,index 可能是 undefined 或其他值,但不会用于表单验证\n const buttonFormIndex = node.parentScope === 'form' ? index : undefined;\n const skipValidation = node.properties?.skipValidation || false;\n return h(\n ElButton,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n onClick: () => {\n // 如果按钮在表单中(parentScope === 'form'),必须使用正确的表单索引进行验证\n // 如果不在表单中,使用 0 作为默认值(但不会触发表单验证,因为 btnClick 会检查 parentScope)\n // 关键:index 在表单渲染时已经正确传递,所以 buttonFormIndex 应该是正确的表单索引\n // 如果 skipValidation 为 true,则跳过表单验证\n const validateIndex = buttonFormIndex !== undefined ? buttonFormIndex : (index !== undefined ? index : 0);\n btnClick(validateIndex, node.properties?.action, payload, node.parentScope, skipValidation);\n },\n },\n children\n );\n }\n\n if (node.tagName === 'ElSelect') {\n return h(\n ElSelect,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n modelValue: hitlData[index!]?.[node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n if (hitlData[index!]) {\n hitlData[index!][node.properties?.formProp] = value;\n }\n },\n },\n children\n );\n }\n\n if (node.tagName === 'ElDatePicker') {\n return h(\n ElDatePicker,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n modelValue: hitlData[index!]?.[node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n if (hitlData[index!]) {\n hitlData[index!][node.properties?.formProp] = value;\n }\n },\n },\n children\n );\n }\n\n if (node.tagName === 'ElInput') {\n return h(\n ElInput,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n modelValue: hitlData[index!]?.[node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n if (hitlData[index!]) {\n hitlData[index!][node.properties?.formProp] = value;\n }\n },\n },\n children\n );\n }\n\n if (node.tagName === 'ElRadioGroup') {\n return h(\n ElRadioGroup,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n modelValue: hitlData[index!]?.[node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n if (hitlData[index!]) {\n hitlData[index!][node.properties?.formProp] = value as string;\n }\n }\n },\n children\n );\n }\n\n if (node.tagName === 'ElRadio') {\n return h(\n ElRadio,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n },\n children\n );\n }\n\n // 表格相关\n if (node.tagName === 'ElTable') {\n return h(\n CoreTable,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElTableColumn') {\n return h(\n ElTableColumn,\n {\n ...node.properties,\n },\n {\n default: (scope: any) => {\n const value = scope.row[node.properties?.prop];\n if (Array.isArray(value)) {\n return value.map((item: any) => {\n return node.children?.find((child: any) => child.value === item && child.value !== undefined);\n }).map((child: any) => hastToVNode(child, config, -Infinity, scope.row));\n }\n\n const childIndex = (node.children || []).findIndex(\n (child: any) => child.value === scope.row[node.properties?.prop] && child.value !== undefined\n );\n if (childIndex !== -1) {\n return hastToVNode(node.children?.[childIndex], config, -Infinity, scope.row);\n }\n return node.children?.map((child: any) => hastToVNode(child, config, -Infinity, scope.row));\n },\n }\n );\n }\n\n // 自定义组件\n if (node.tagName === 'CoreText') {\n return h(CoreText, {\n ...node.properties,\n });\n }\n\n if (node.tagName === 'CoreTips') {\n return h(CoreTips, {\n ...node.properties,\n });\n }\n\n if (node.tagName === 'CoreResult') {\n return h(CoreResult, {\n ...node.properties,\n });\n }\n\n if (node.tagName === 'CoreChart') {\n return h(CoreChart, {\n ...node.properties,\n });\n }\n\n if (node.tagName === 'CoreUpload') {\n // 如果在表单中,需要处理 formProp 和双向绑定\n if (node.parentScope === 'form' && node.properties?.formProp) {\n const formProp = node.properties.formProp;\n return h(\n CoreUpload,\n {\n headers: uploadHeaders,\n extendData: uploadExtendData,\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n fileList: hitlData[index!]?.[formProp] || [],\n 'onUpdate:fileList': (value: any) => {\n if (!hitlData[index!]) {\n hitlData[index!] = {};\n }\n // 针对目前上传的文件解析,CA 这边必须得放在files 属性中,故被迫需要进行兼容\n // 这里将基于 __files__ 去识别,后续在coreagent 的 adapter 中进行处理\n if (!hitlData[index!].__files__) {\n hitlData[index!].__files__ = {};\n }\n hitlData[index!].__files__[formProp] = value;\n hitlData[index!][formProp] = value;\n },\n }\n );\n }\n // 非表单场景,直接渲染\n return h(\n CoreUpload,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n }\n );\n }\n\n // 处理CorePilot代码块\n if (node.tagName === \"pre\") {\n const codeNode = node.children?.find((child: any) => child.tagName === \"code\");\n if (codeNode) {\n if (codeNode.properties?.className?.includes(\"language-CorePilot\")) {\n const code = codeNode.children?.[0]?.value || '';\n // 检查 JSON 是否完整\n if (!isCompleteJSON(code)) {\n // JSON 不完整,显示骨架屏\n return renderSkeleton();\n }\n try {\n const schema = JSON.parse(code);\n const viewTree = parseCorePilot(schema);\n const corePilotChildren = hastToVNode(viewTree, config);\n return h(\"div\", {\n class: \"hitl-wrapper\",\n }, [corePilotChildren]);\n } catch (error) {\n // JSON 解析失败,可能是格式错误,显示骨架屏\n return renderSkeleton();\n }\n }\n }\n }\n\n // 其他普通元素\n return h(\n node.tagName,\n node.properties,\n children\n );\n\n case \"text\":\n return node.value.trim();\n\n default:\n return null;\n }\n};\n\n"],"names":["renderSkeleton","h","class","hastToVNode","node","config","index","row","hitlData","formRefs","curIndex","getCurInit","btnClick","uploadHeaders","uploadExtendData","disabledContext","children","formIndex","includes","tagName","length","map","child","idx","type","ElConfigProvider","locale","zhCN","subChildren","properties","href","_a","fileType","split","pop","ElTimeline","ElRow","ElCol","ElCard","ElTag","slots","_b","header","slotItem","default","CoreCard","formChildren","ElForm","ref","set","model","disabled","checkDisabled","ElFormItem","payload","_c","parentScope","buttonFormIndex","skipValidation","_d","ElButton","onClick","action","ElSelect","modelValue","_f","_e","formProp","value","ElDatePicker","_h","_g","ElInput","_j","_i","ElRadioGroup","_l","_k","ElRadio","CoreTable","ElTableColumn","scope","prop","Array","isArray","item","find","Infinity","childIndex","findIndex","CoreText","CoreTips","CoreResult","CoreChart","_m","CoreUpload","headers","extendData","fileList","_n","__files__","codeNode","_o","_q","_p","className","code","_s","_r","isCompleteJSON","schema","JSON","parse","viewTree","parseCorePilot","corePilotChildren","error","trim"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=(e,b)=>{switch(e.type){case"view":return t(e);case"form":return p(e);case"card":return s(e);case"table":return c(e);case"input":return a(e,b);case"select":return o(e,b);case"dateTimePicker":return n(e,b);case"button":return i(e,b);case"tips":return m(e,b);case"text":return u(e,b);case"formfield":return d(e,b);case"column":return l(e,b);case"row":return g(e,b);case"col":return h(e,b);case"result":return r(e,b);case"tag":return S(e,b);case"radioGroup":return y(e,b);case"radio":return N(e,b);case"echart":return v(e,b);case"upload":return E(e,b);default:const C=e;console.error(C)}},r=(e,r)=>({tagName:"CoreResult",type:"element",properties:e.properties,parentScope:r}),t=r=>({tagName:"view",type:"element",properties:{title:r.title},children:r.children.map(r=>e(r))}),p=r=>{const t=[];r.fields.forEach(r=>{t.push(e(r,"form"))});const p={tagName:"div",type:"element",properties:{class:"hitl-btn-list"},children:r.actions.map(r=>e(r,"form"))};return t.push(p),{tagName:"ElForm",type:"element",properties:{labelPosition:"right",...r.properties},children:t}},a=(e,r)=>({tagName:"ElInput",type:"element",properties:e.properties,parentScope:r}),o=(e,r)=>({tagName:"ElSelect",type:"element",properties:e.properties,parentScope:r}),n=(e,r)=>({tagName:"ElDatePicker",type:"element",properties:e.properties,parentScope:r}),i=(r,t)=>{var p,a;return{tagName:"ElButton",type:"element",properties:{...r.properties,action:r.action,payload:r.payload},parentScope:t,children:null==(a=null==(p=r.children)?void 0:p.map)?void 0:a.call(p,r=>e(r,t))}},s=r=>{var t;const p={tagName:"CoreCard",type:"element",properties:r.properties,children:r.children.map(r=>e(r))};return(null==(t=r.slots)?void 0:t.header)&&(p.slots={header:r.slots.header.map(r=>e(r))}),p},l=(r,t)=>{var p;return{tagName:"ElTableColumn",type:"element",properties:r.properties,parentScope:t,children:null==(p=r.children)?void 0:p.map(r=>e(r,t))}},c=r=>(r.properties.tableProps||(r.properties.tableProps={data:[],...r.properties}),{tagName:"ElTable",type:"element",properties:r.properties,children:r.children.map(r=>e(r,"table"))}),m=(e,r)=>({tagName:"CoreTips",type:"element",properties:e.properties,parentScope:r}),u=(e,r)=>({tagName:"CoreText",type:"element",properties:e.properties,parentScope:r}),d=(r,t)=>{const p=r.properties.prop,a=((e,r)=>e.map(e=>({...e,properties:{...e.properties,formProp:r}})))(r.children,p);return{tagName:"ElFormItem",type:"element",properties:{...r.properties,rules:(o=r.properties.rules,null==o?void 0:o.map(e=>"pattern"in e&&e.pattern?{pattern:new RegExp(e.pattern),message:e.message,trigger:e.trigger}:e))},parentScope:t,children:[e(a[0],t)]};var o},g=(r,t)=>({tagName:"ElRow",type:"element",properties:r.properties,children:r.children.map(r=>e(r,t))}),h=(r,t)=>({tagName:"ElCol",type:"element",properties:r.properties,parentScope:t,children:r.children.map(r=>e(r,t))}),y=(r,t)=>{var p;return{tagName:"ElRadioGroup",type:"element",properties:r.properties,parentScope:t,children:null==(p=r.properties.options)?void 0:p.map(r=>e({type:"radio",properties:r},t))}},N=(e,r)=>({tagName:"ElRadio",type:"element",properties:e.properties,parentScope:r}),S=(r,t)=>{const p={tagName:"ElTag",type:"element",properties:r.properties,parentScope:t,children:r.children.map(r=>e(r,t))};return"table"===t&&(p.value=r.value),p},v=(e,r)=>({tagName:"CoreChart",type:"element",properties:e.properties,parentScope:r}),E=(e,r)=>({tagName:"CoreUpload",type:"element",properties:e.properties,parentScope:r});exports.parseCorePilot=r=>e(r);
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=(e,b)=>{switch(e.type){case"view":return t(e);case"form":return p(e);case"card":return s(e);case"table":return c(e);case"input":return a(e,b);case"select":return o(e,b);case"dateTimePicker":return n(e,b);case"button":return l(e,b);case"tips":return m(e,b);case"text":return u(e,b);case"formfield":return d(e,b);case"column":return i(e,b);case"row":return g(e,b);case"col":return h(e,b);case"result":return r(e,b);case"tag":return v(e,b);case"radioGroup":return y(e,b);case"radio":return N(e,b);case"echart":return S(e,b);case"upload":return E(e,b);default:const C=e;console.error(C)}},r=(e,r)=>({tagName:"CoreResult",type:"element",properties:e.properties,parentScope:r}),t=r=>({tagName:"view",type:"element",properties:{title:r.title},children:r.children.map(r=>e(r))}),p=r=>{const t=[];r.fields.forEach(r=>{t.push(e(r,"form"))});const p={tagName:"div",type:"element",properties:{class:"hitl-btn-list"},children:r.actions.map(r=>e(r,"form"))};return t.push(p),{tagName:"ElForm",type:"element",properties:{labelPosition:"right",...r.properties},children:t}},a=(e,r)=>({tagName:"ElInput",type:"element",properties:e.properties,parentScope:r}),o=(e,r)=>({tagName:"ElSelect",type:"element",properties:e.properties,parentScope:r}),n=(e,r)=>({tagName:"ElDatePicker",type:"element",properties:e.properties,parentScope:r}),l=(r,t)=>{var p,a;const o={tagName:"ElButton",type:"element",properties:{...r.properties,action:r.action,payload:r.payload},parentScope:t,children:null==(a=null==(p=r.children)?void 0:p.map)?void 0:a.call(p,r=>e(r,t))};return"table"===t&&(o.value=r.value),o},s=r=>{var t;const p={tagName:"CoreCard",type:"element",properties:r.properties,children:r.children.map(r=>e(r))};return(null==(t=r.slots)?void 0:t.header)&&(p.slots={header:r.slots.header.map(r=>e(r))}),p},i=(r,t)=>{var p;return{tagName:"ElTableColumn",type:"element",properties:r.properties,parentScope:t,children:null==(p=r.children)?void 0:p.map(r=>e(r,t))}},c=r=>(r.properties.tableProps||(r.properties.tableProps={data:[],...r.properties}),{tagName:"ElTable",type:"element",properties:r.properties,children:r.children.map(r=>e(r,"table"))}),m=(e,r)=>({tagName:"CoreTips",type:"element",properties:e.properties,parentScope:r}),u=(e,r)=>({tagName:"CoreText",type:"element",properties:e.properties,parentScope:r}),d=(r,t)=>{const p=r.properties.prop,a=((e,r)=>e.map(e=>({...e,properties:{...e.properties,formProp:r}})))(r.children,p);return{tagName:"ElFormItem",type:"element",properties:{...r.properties,rules:(o=r.properties.rules,null==o?void 0:o.map(e=>"pattern"in e&&e.pattern?{pattern:new RegExp(e.pattern),message:e.message,trigger:e.trigger}:e))},parentScope:t,children:[e(a[0],t)]};var o},g=(r,t)=>({tagName:"ElRow",type:"element",properties:r.properties,children:r.children.map(r=>e(r,t))}),h=(r,t)=>({tagName:"ElCol",type:"element",properties:r.properties,parentScope:t,children:r.children.map(r=>e(r,t))}),y=(r,t)=>{var p;return{tagName:"ElRadioGroup",type:"element",properties:r.properties,parentScope:t,children:null==(p=r.properties.options)?void 0:p.map(r=>e({type:"radio",properties:r},t))}},N=(e,r)=>({tagName:"ElRadio",type:"element",properties:e.properties,parentScope:r}),v=(r,t)=>{const p={tagName:"ElTag",type:"element",properties:r.properties,parentScope:t,children:r.children.map(r=>e(r,t))};return"table"===t&&(p.value=r.value),p},S=(e,r)=>({tagName:"CoreChart",type:"element",properties:e.properties,parentScope:r}),E=(e,r)=>({tagName:"CoreUpload",type:"element",properties:e.properties,parentScope:r});exports.parseCorePilot=r=>e(r);
2
2
  //# sourceMappingURL=parseCorePilotSchema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseCorePilotSchema.js","sources":["../../../../../src/components/x-markdown/utils/parseCorePilotSchema.ts"],"sourcesContent":["import { \n FormSchema, \n ViewSchema,\n FormFieldSchema, \n CardSchema, \n ButtonSchema, \n TableSchema, \n TipsSchema, \n TextSchema, \n InputSchema, \n SelectSchema, \n DateTimePickerSchema, \n TableColumnSchema, \n RowSchema, \n ColSchema, \n ResultSchema, \n TagSchema,\n RadioGroupSchema,\n RadioSchema,\n EChartsSchema,\n UploadSchema,\n} from '@/types/index';\n\ntype ElementSchema = \n | ViewSchema<any> \n | FormSchema \n | FormFieldSchema \n | CardSchema \n | ButtonSchema \n | TableSchema \n | TipsSchema \n | TextSchema \n | InputSchema \n | SelectSchema \n | DateTimePickerSchema \n | TableColumnSchema \n | RowSchema \n | ColSchema \n | ResultSchema \n | TagSchema \n | RadioGroupSchema \n | RadioSchema\n | EChartsSchema\n | UploadSchema;\n\ntype ParentScopeType = 'form' | 'table';\n\nconst parseSchema = (schema: ElementSchema, type?: ParentScopeType) => {\n switch (schema.type) {\n case 'view':\n return parseView(schema);\n case 'form':\n return parseForm(schema);\n case 'card':\n return parseCard(schema);\n case 'table':\n return parseTable(schema);\n case 'input':\n return parseInput(schema, type);\n case 'select':\n return parseSelect(schema, type);\n case 'dateTimePicker':\n return parseDate(schema, type);\n case 'button':\n return parseButton(schema, type);\n case 'tips':\n return parseTips(schema, type);\n case 'text':\n return parseText(schema, type);\n case 'formfield':\n return parseFormItem(schema, type);\n case 'column':\n return parseTableColumn(schema, type);\n case 'row':\n return parseRow(schema, type);\n case 'col':\n return parseCol(schema, type);\n case 'result':\n return parseResult(schema, type);\n case 'tag':\n return parseTag(schema, type);\n case 'radioGroup':\n return parseRadioGroup(schema, type);\n case 'radio':\n return parseRadio(schema, type);\n case 'echart':\n return parseECharts(schema, type);\n case 'upload':\n return parseUpload(schema, type);\n default:\n const _: never = schema;\n console.error(_);\n }\n}\n\n// result组件解析\nconst parseResult = (schema: ResultSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreResult',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\n// view组件解析\nconst parseView = (schema: ViewSchema<any>) => {\n return {\n tagName: 'view',\n type: 'element',\n properties: {\n title: schema.title,\n },\n children: schema.children.map((item) => {\n return parseSchema(item);\n })\n }\n}\n\n// form组件解析\nconst parseForm = (schema: FormSchema) => {\n const children: any[] = [] \n schema.fields.forEach((item) => {\n children.push(parseSchema(item, 'form'));\n });\n const actionChild = {\n tagName: 'div',\n type: 'element',\n properties: {\n class: 'hitl-btn-list',\n },\n children: schema.actions.map((item) => {\n return parseSchema(item, 'form');\n })\n }\n children.push(actionChild);\n return {\n tagName: 'ElForm',\n type: 'element',\n properties: {\n labelPosition: 'right',\n ...schema.properties,\n },\n children,\n }\n}\n\nconst parseInput = (schema: InputSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElInput',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseSelect = (schema: SelectSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElSelect',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseDate = (schema: DateTimePickerSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElDatePicker',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseButton = (schema: ButtonSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElButton',\n type: 'element',\n properties: {\n ...schema.properties,\n action: schema.action,\n payload: schema.payload,\n },\n // TODO 记录父级作用域,用于在form、table 组件中使用\n parentScope: type,\n children: schema.children?.map?.((item) => {\n return parseSchema(item, type);\n })\n }\n}\n\nconst parseCard = (schema: CardSchema) => {\n const result: any = {\n tagName: 'CoreCard',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item);\n })\n };\n \n // 处理 header 插槽\n if (schema.slots?.header) {\n result.slots = {\n header: schema.slots.header.map((item) => {\n return parseSchema(item);\n })\n };\n }\n \n return result;\n}\n\nconst parseTableColumn = (schema: TableColumnSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElTableColumn',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children?.map((item) => {\n return parseSchema(item, parentType);\n })\n }\n}\n\nconst parseTable = (schema: TableSchema) => {\n // 兼容旧版本不存在tableProps属性\n if (!schema.properties.tableProps) {\n schema.properties.tableProps = {\n data: [],\n ...schema.properties,\n };\n }\n return {\n tagName: 'ElTable',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item, 'table');\n })\n }\n}\n\n\nconst parseTips = (schema: TipsSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreTips',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\nconst parseText = (schema: TextSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreText',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\nconst injectFormProp = (schema: FormFieldSchema['children'], prop: string) => {\n return schema.map((item) => {\n return {\n ...item,\n properties: {\n ...item.properties,\n formProp: prop,\n },\n }\n })\n}\nconst parseFormItem = (schema: FormFieldSchema, parentType?: ParentScopeType) => {\n const prop = schema.properties.prop;\n const children = injectFormProp(schema.children, prop);\n const formatRules = (rules: FormFieldSchema['properties']['rules']) => {\n return rules?.map((item) => {\n if ('pattern' in item && item.pattern) {\n return {\n pattern: new RegExp(item.pattern),\n message: item.message,\n trigger: item.trigger,\n }\n }\n return item;\n })\n }\n return {\n tagName: 'ElFormItem',\n type: 'element',\n properties: {\n ...schema.properties,\n rules: formatRules(schema.properties.rules),\n },\n parentScope: parentType,\n children: [\n parseSchema(children[0] as InputSchema, parentType),\n ]\n }\n}\n\nconst parseRow = (schema: RowSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRow',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item, parentType);\n })\n }\n}\n\nconst parseCol = (schema: ColSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElCol',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children.map((item) => {\n return parseSchema(item as ElementSchema, parentType);\n })\n }\n}\n\nconst parseRadioGroup = (schema: RadioGroupSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRadioGroup',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.properties.options?.map((item) => {\n return parseSchema({\n type: 'radio',\n properties: item,\n } as RadioSchema, parentType);\n })\n }\n}\n\nconst parseRadio = (schema: RadioSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRadio',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\nconst parseTag = (schema: TagSchema, parentType?: ParentScopeType) => {\n const formatSchema = {\n tagName: 'ElTag',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children.map((item) => {\n return parseSchema(item as TextSchema, parentType);\n })\n }\n if (parentType === 'table') {\n formatSchema.value = schema.value;\n }\n return formatSchema;\n}\n\n// ECharts 图表解析\nconst parseECharts = (schema: EChartsSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreChart',\n type: 'element' as const,\n properties: schema.properties,\n parentScope: parentType,\n };\n}\n\n// Upload 上传组件解析\nconst parseUpload = (schema: UploadSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreUpload',\n type: 'element' as const,\n properties: schema.properties,\n parentScope: parentType,\n };\n}\n\nexport const parseCorePilot = (schema: ViewSchema<any>) => {\n return parseSchema(schema);\n}"],"names":["parseSchema","schema","type","parseView","parseForm","parseCard","parseTable","parseInput","parseSelect","parseDate","parseButton","parseTips","parseText","parseFormItem","parseTableColumn","parseRow","parseCol","parseResult","parseTag","parseRadioGroup","parseRadio","parseECharts","parseUpload","_","console","error","parentType","tagName","properties","parentScope","title","children","map","item","fields","forEach","push","actionChild","class","actions","labelPosition","action","payload","_b","_a","call","result","slots","header","tableProps","data","prop","formProp","injectFormProp","rules","pattern","RegExp","message","trigger","options","formatSchema","value"],"mappings":"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"}
1
+ {"version":3,"file":"parseCorePilotSchema.js","sources":["../../../../../src/components/x-markdown/utils/parseCorePilotSchema.ts"],"sourcesContent":["import { \n FormSchema, \n ViewSchema,\n FormFieldSchema, \n CardSchema, \n ButtonSchema, \n TableSchema, \n TipsSchema, \n TextSchema, \n InputSchema, \n SelectSchema, \n DateTimePickerSchema, \n TableColumnSchema, \n RowSchema, \n ColSchema, \n ResultSchema, \n TagSchema,\n RadioGroupSchema,\n RadioSchema,\n EChartsSchema,\n UploadSchema,\n} from '@/types/index';\n\ntype ElementSchema = \n | ViewSchema<any> \n | FormSchema \n | FormFieldSchema \n | CardSchema \n | ButtonSchema \n | TableSchema \n | TipsSchema \n | TextSchema \n | InputSchema \n | SelectSchema \n | DateTimePickerSchema \n | TableColumnSchema \n | RowSchema \n | ColSchema \n | ResultSchema \n | TagSchema \n | RadioGroupSchema \n | RadioSchema\n | EChartsSchema\n | UploadSchema;\n\ntype ParentScopeType = 'form' | 'table';\n\nconst parseSchema = (schema: ElementSchema, type?: ParentScopeType) => {\n switch (schema.type) {\n case 'view':\n return parseView(schema);\n case 'form':\n return parseForm(schema);\n case 'card':\n return parseCard(schema);\n case 'table':\n return parseTable(schema);\n case 'input':\n return parseInput(schema, type);\n case 'select':\n return parseSelect(schema, type);\n case 'dateTimePicker':\n return parseDate(schema, type);\n case 'button':\n return parseButton(schema, type);\n case 'tips':\n return parseTips(schema, type);\n case 'text':\n return parseText(schema, type);\n case 'formfield':\n return parseFormItem(schema, type);\n case 'column':\n return parseTableColumn(schema, type);\n case 'row':\n return parseRow(schema, type);\n case 'col':\n return parseCol(schema, type);\n case 'result':\n return parseResult(schema, type);\n case 'tag':\n return parseTag(schema, type);\n case 'radioGroup':\n return parseRadioGroup(schema, type);\n case 'radio':\n return parseRadio(schema, type);\n case 'echart':\n return parseECharts(schema, type);\n case 'upload':\n return parseUpload(schema, type);\n default:\n const _: never = schema;\n console.error(_);\n }\n}\n\n// result组件解析\nconst parseResult = (schema: ResultSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreResult',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\n// view组件解析\nconst parseView = (schema: ViewSchema<any>) => {\n return {\n tagName: 'view',\n type: 'element',\n properties: {\n title: schema.title,\n },\n children: schema.children.map((item) => {\n return parseSchema(item);\n })\n }\n}\n\n// form组件解析\nconst parseForm = (schema: FormSchema) => {\n const children: any[] = [] \n schema.fields.forEach((item) => {\n children.push(parseSchema(item, 'form'));\n });\n const actionChild = {\n tagName: 'div',\n type: 'element',\n properties: {\n class: 'hitl-btn-list',\n },\n children: schema.actions.map((item) => {\n return parseSchema(item, 'form');\n })\n }\n children.push(actionChild);\n return {\n tagName: 'ElForm',\n type: 'element',\n properties: {\n labelPosition: 'right',\n ...schema.properties,\n },\n children,\n }\n}\n\nconst parseInput = (schema: InputSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElInput',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseSelect = (schema: SelectSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElSelect',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseDate = (schema: DateTimePickerSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElDatePicker',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseButton = (schema: ButtonSchema, type?: ParentScopeType) => {\n const formatSchema: any = {\n tagName: 'ElButton',\n type: 'element',\n properties: {\n ...schema.properties,\n action: schema.action,\n payload: schema.payload,\n },\n // TODO 记录父级作用域,用于在form、table 组件中使用\n parentScope: type,\n children: schema.children?.map?.((item) => {\n return parseSchema(item, type);\n })\n }\n if (type === 'table') {\n formatSchema.value = schema.value;\n }\n return formatSchema;\n}\n\nconst parseCard = (schema: CardSchema) => {\n const result: any = {\n tagName: 'CoreCard',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item);\n })\n };\n \n // 处理 header 插槽\n if (schema.slots?.header) {\n result.slots = {\n header: schema.slots.header.map((item) => {\n return parseSchema(item);\n })\n };\n }\n \n return result;\n}\n\nconst parseTableColumn = (schema: TableColumnSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElTableColumn',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children?.map((item) => {\n return parseSchema(item, parentType);\n })\n }\n}\n\nconst parseTable = (schema: TableSchema) => {\n // 兼容旧版本不存在tableProps属性\n if (!schema.properties.tableProps) {\n schema.properties.tableProps = {\n data: [],\n ...schema.properties,\n };\n }\n return {\n tagName: 'ElTable',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item, 'table');\n })\n }\n}\n\n\nconst parseTips = (schema: TipsSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreTips',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\nconst parseText = (schema: TextSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreText',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\nconst injectFormProp = (schema: FormFieldSchema['children'], prop: string) => {\n return schema.map((item) => {\n return {\n ...item,\n properties: {\n ...item.properties,\n formProp: prop,\n },\n }\n })\n}\nconst parseFormItem = (schema: FormFieldSchema, parentType?: ParentScopeType) => {\n const prop = schema.properties.prop;\n const children = injectFormProp(schema.children, prop);\n const formatRules = (rules: FormFieldSchema['properties']['rules']) => {\n return rules?.map((item) => {\n if ('pattern' in item && item.pattern) {\n return {\n pattern: new RegExp(item.pattern),\n message: item.message,\n trigger: item.trigger,\n }\n }\n return item;\n })\n }\n return {\n tagName: 'ElFormItem',\n type: 'element',\n properties: {\n ...schema.properties,\n rules: formatRules(schema.properties.rules),\n },\n parentScope: parentType,\n children: [\n parseSchema(children[0] as InputSchema, parentType),\n ]\n }\n}\n\nconst parseRow = (schema: RowSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRow',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item, parentType);\n })\n }\n}\n\nconst parseCol = (schema: ColSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElCol',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children.map((item) => {\n return parseSchema(item as ElementSchema, parentType);\n })\n }\n}\n\nconst parseRadioGroup = (schema: RadioGroupSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRadioGroup',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.properties.options?.map((item) => {\n return parseSchema({\n type: 'radio',\n properties: item,\n } as RadioSchema, parentType);\n })\n }\n}\n\nconst parseRadio = (schema: RadioSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRadio',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\nconst parseTag = (schema: TagSchema, parentType?: ParentScopeType) => {\n const formatSchema = {\n tagName: 'ElTag',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children.map((item) => {\n return parseSchema(item as TextSchema, parentType);\n })\n }\n if (parentType === 'table') {\n formatSchema.value = schema.value;\n }\n return formatSchema;\n}\n\n// ECharts 图表解析\nconst parseECharts = (schema: EChartsSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreChart',\n type: 'element' as const,\n properties: schema.properties,\n parentScope: parentType,\n };\n}\n\n// Upload 上传组件解析\nconst parseUpload = (schema: UploadSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreUpload',\n type: 'element' as const,\n properties: schema.properties,\n parentScope: parentType,\n };\n}\n\nexport const parseCorePilot = (schema: ViewSchema<any>) => {\n return parseSchema(schema);\n}"],"names":["parseSchema","schema","type","parseView","parseForm","parseCard","parseTable","parseInput","parseSelect","parseDate","parseButton","parseTips","parseText","parseFormItem","parseTableColumn","parseRow","parseCol","parseResult","parseTag","parseRadioGroup","parseRadio","parseECharts","parseUpload","_","console","error","parentType","tagName","properties","parentScope","title","children","map","item","fields","forEach","push","actionChild","class","actions","labelPosition","formatSchema","action","payload","_b","_a","call","value","result","slots","header","tableProps","data","prop","formProp","injectFormProp","rules","pattern","RegExp","message","trigger","options"],"mappings":"gFA+CA,MAAMA,EAAc,CAACC,EAAuBC,KAC1C,OAAQD,EAAOC,MACb,IAAK,OACH,OAAOC,EAAUF,GACnB,IAAK,OACH,OAAOG,EAAUH,GACnB,IAAK,OACH,OAAOI,EAAUJ,GACnB,IAAK,QACH,OAAOK,EAAWL,GACpB,IAAK,QACH,OAAOM,EAAWN,EAAQC,GAC5B,IAAK,SACH,OAAOM,EAAYP,EAAQC,GAC7B,IAAK,iBACH,OAAOO,EAAUR,EAAQC,GAC3B,IAAK,SACH,OAAOQ,EAAYT,EAAQC,GAC7B,IAAK,OACH,OAAOS,EAAUV,EAAQC,GAC3B,IAAK,OACH,OAAOU,EAAUX,EAAQC,GAC3B,IAAK,YACH,OAAOW,EAAcZ,EAAQC,GAC/B,IAAK,SACH,OAAOY,EAAiBb,EAAQC,GAClC,IAAK,MACH,OAAOa,EAASd,EAAQC,GAC1B,IAAK,MACH,OAAOc,EAASf,EAAQC,GAC1B,IAAK,SACH,OAAOe,EAAYhB,EAAQC,GAC7B,IAAK,MACH,OAAOgB,EAASjB,EAAQC,GAC1B,IAAK,aACH,OAAOiB,EAAgBlB,EAAQC,GACjC,IAAK,QACH,OAAOkB,EAAWnB,EAAQC,GAC5B,IAAK,SACH,OAAOmB,EAAapB,EAAQC,GAC9B,IAAK,SACH,OAAOoB,EAAYrB,EAAQC,GAC7B,QACE,MAAMqB,EAAWtB,EACjBuB,QAAQC,MAAMF,KAKdN,EAAc,CAAChB,EAAsByB,KAClC,CACLC,QAAS,aACTzB,KAAM,UACN0B,WAAY3B,EAAO2B,WACnBC,YAAaH,IAKXvB,EAAaF,IACV,CACL0B,QAAS,OACTzB,KAAM,UACN0B,WAAY,CACVE,MAAO7B,EAAO6B,OAEhBC,SAAU9B,EAAO8B,SAASC,IAAKC,GACtBjC,EAAYiC,MAMnB7B,EAAaH,IACjB,MAAM8B,EAAkB,GACxB9B,EAAOiC,OAAOC,QAASF,IACrBF,EAASK,KAAKpC,EAAYiC,EAAM,WAElC,MAAMI,EAAc,CAClBV,QAAS,MACTzB,KAAM,UACN0B,WAAY,CACVU,MAAO,iBAETP,SAAU9B,EAAOsC,QAAQP,IAAKC,GACrBjC,EAAYiC,EAAM,UAI7B,OADAF,EAASK,KAAKC,GACP,CACLV,QAAS,SACTzB,KAAM,UACN0B,WAAY,CACVY,cAAe,WACZvC,EAAO2B,YAEZG,aAIExB,EAAa,CAACN,EAAqBC,KAChC,CACLyB,QAAS,UACTzB,KAAM,UACN0B,WAAY3B,EAAO2B,WACnBC,YAAa3B,IAIXM,EAAc,CAACP,EAAsBC,KAClC,CACLyB,QAAS,WACTzB,KAAM,UACN0B,WAAY3B,EAAO2B,WACnBC,YAAa3B,IAIXO,EAAY,CAACR,EAA8BC,KACxC,CACLyB,QAAS,eACTzB,KAAM,UACN0B,WAAY3B,EAAO2B,WACnBC,YAAa3B,IAIXQ,EAAc,CAACT,EAAsBC,aACzC,MAAMuC,EAAoB,CACxBd,QAAS,WACTzB,KAAM,UACN0B,WAAY,IACP3B,EAAO2B,WACVc,OAAQzC,EAAOyC,OACfC,QAAS1C,EAAO0C,SAGlBd,YAAa3B,EACb6B,SAAU,OAAAa,EAAA,OAAAC,EAAA5C,EAAO8B,mBAAUC,UAAjB,EAAAY,EAAAE,KAAAD,EAAwBZ,GACzBjC,EAAYiC,EAAM/B,KAM7B,MAHa,UAATA,IACFuC,EAAaM,MAAQ9C,EAAO8C,OAEvBN,GAGHpC,EAAaJ,UACjB,MAAM+C,EAAc,CAClBrB,QAAS,WACTzB,KAAM,UACN0B,WAAY3B,EAAO2B,WACnBG,SAAU9B,EAAO8B,SAASC,IAAKC,GACtBjC,EAAYiC,KAavB,OARI,OAAAY,EAAA5C,EAAOgD,YAAP,EAAAJ,EAAcK,UAChBF,EAAOC,MAAQ,CACbC,OAAQjD,EAAOgD,MAAMC,OAAOlB,IAAKC,GACxBjC,EAAYiC,MAKlBe,GAGHlC,EAAmB,CAACb,EAA2ByB,WACnD,MAAO,CACLC,QAAS,gBACTzB,KAAM,UACN0B,WAAY3B,EAAO2B,WACnBC,YAAaH,EACbK,SAAU,OAAAc,EAAA5C,EAAO8B,eAAP,EAAAc,EAAiBb,IAAKC,GACvBjC,EAAYiC,EAAMP,MAKzBpB,EAAcL,IAEbA,EAAO2B,WAAWuB,aACrBlD,EAAO2B,WAAWuB,WAAa,CAC7BC,KAAM,MACHnD,EAAO2B,aAGP,CACLD,QAAS,UACTzB,KAAM,UACN0B,WAAY3B,EAAO2B,WACnBG,SAAU9B,EAAO8B,SAASC,IAAKC,GACtBjC,EAAYiC,EAAM,YAMzBtB,EAAY,CAACV,EAAoByB,KAC9B,CACLC,QAAS,WACTzB,KAAM,UACN0B,WAAY3B,EAAO2B,WACnBC,YAAaH,IAIXd,EAAY,CAACX,EAAoByB,KAC9B,CACLC,QAAS,WACTzB,KAAM,UACN0B,WAAY3B,EAAO2B,WACnBC,YAAaH,IAcXb,EAAgB,CAACZ,EAAyByB,KAC9C,MAAM2B,EAAOpD,EAAO2B,WAAWyB,KACzBtB,EAbe,EAAC9B,EAAqCoD,IACpDpD,EAAO+B,IAAKC,IACV,IACFA,EACHL,WAAY,IACPK,EAAKL,WACR0B,SAAUD,MAOCE,CAAetD,EAAO8B,SAAUsB,GAajD,MAAO,CACL1B,QAAS,aACTzB,KAAM,UACN0B,WAAY,IACP3B,EAAO2B,WACV4B,OAjBiBA,EAiBEvD,EAAO2B,WAAW4B,MAhBhC,MAAAA,OAAA,EAAAA,EAAOxB,IAAKC,GACb,YAAaA,GAAQA,EAAKwB,QACrB,CACLA,QAAS,IAAIC,OAAOzB,EAAKwB,SACzBE,QAAS1B,EAAK0B,QACdC,QAAS3B,EAAK2B,SAGX3B,KAUTJ,YAAaH,EACbK,SAAU,CACR/B,EAAY+B,EAAS,GAAmBL,KArBxB,IAAC8B,GA0BjBzC,EAAW,CAACd,EAAmByB,KAC5B,CACLC,QAAS,QACTzB,KAAM,UACN0B,WAAY3B,EAAO2B,WACnBG,SAAU9B,EAAO8B,SAASC,IAAKC,GACtBjC,EAAYiC,EAAMP,MAKzBV,EAAW,CAACf,EAAmByB,KAC5B,CACLC,QAAS,QACTzB,KAAM,UACN0B,WAAY3B,EAAO2B,WACnBC,YAAaH,EACbK,SAAU9B,EAAO8B,SAASC,IAAKC,GACtBjC,EAAYiC,EAAuBP,MAK1CP,EAAkB,CAAClB,EAA0ByB,WACjD,MAAO,CACLC,QAAS,eACTzB,KAAM,UACN0B,WAAY3B,EAAO2B,WACnBC,YAAaH,EACbK,SAAU,OAAAc,EAAA5C,EAAO2B,WAAWiC,cAAlB,EAAAhB,EAA2Bb,IAAKC,GACjCjC,EAAY,CACjBE,KAAM,QACN0B,WAAYK,GACIP,MAKlBN,EAAa,CAACnB,EAAqByB,KAChC,CACLC,QAAS,UACTzB,KAAM,UACN0B,WAAY3B,EAAO2B,WACnBC,YAAaH,IAIXR,EAAW,CAACjB,EAAmByB,KACnC,MAAMe,EAAe,CACnBd,QAAS,QACTzB,KAAM,UACN0B,WAAY3B,EAAO2B,WACnBC,YAAaH,EACbK,SAAU9B,EAAO8B,SAASC,IAAKC,GACtBjC,EAAYiC,EAAoBP,KAM3C,MAHmB,UAAfA,IACFe,EAAaM,MAAQ9C,EAAO8C,OAEvBN,GAIHpB,EAAe,CAACpB,EAAuByB,KACpC,CACLC,QAAS,YACTzB,KAAM,UACN0B,WAAY3B,EAAO2B,WACnBC,YAAaH,IAKXJ,EAAc,CAACrB,EAAsByB,KAClC,CACLC,QAAS,aACTzB,KAAM,UACN0B,WAAY3B,EAAO2B,WACnBC,YAAaH,2BAIczB,GACtBD,EAAYC"}
@@ -170,6 +170,9 @@ const CoreUpload = /* @__PURE__ */ defineComponent({
170
170
  document.body.removeChild(link);
171
171
  };
172
172
  const handleDelete = (file) => {
173
+ if (props.disabled) {
174
+ return;
175
+ }
173
176
  const index = fileList.value.findIndex((item) => item.uid === file.uid);
174
177
  if (index !== -1) {
175
178
  fileList.value.splice(index, 1);
@@ -253,7 +256,7 @@ const CoreUpload = /* @__PURE__ */ defineComponent({
253
256
  }, [createTextVNode("📄")]), createVNode("span", {
254
257
  "class": "core-upload__file-name",
255
258
  "title": file.name
256
- }, [file.name])]), createVNode("img", {
259
+ }, [file.name])]), !this.disabled && createVNode("img", {
257
260
  "onClick": () => this.handleDelete(file),
258
261
  "src": deleteIcon,
259
262
  "alt": "delete",
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/core-upload/index.tsx"],"sourcesContent":["import { defineComponent, ref, PropType, computed, watch } from 'vue';\nimport { ElUpload, ElButton, ElMessage, ElIcon } from 'element-plus';\nimport type { UploadFile, UploadFiles, UploadRequestOptions } from 'element-plus';\n// @ts-ignore\nimport uploadIcon from './assets/upload.svg';\n// @ts-ignore\nimport tempIcon from './assets/temp.svg';\n// @ts-ignore\nimport deleteIcon from './assets/delete.svg';\nimport './style.less';\n\nexport interface UploadFileItem {\n name: string;\n url?: string;\n response?: any;\n [key: string]: any;\n}\n\nexport default defineComponent({\n name: 'CoreUpload',\n props: {\n // 上传地址\n action: {\n type: String,\n default: '/openapi/v1/app/files/upload',\n },\n // 允许上传的文件类型\n accept: {\n type: String,\n default: '.xlsx,.xls,.csv',\n },\n // 文件大小限制(单位:MB)\n maxSize: {\n type: Number,\n default: 10,\n },\n // 是否支持多文件上传\n multiple: {\n type: Boolean,\n default: true,\n },\n // 文件列表\n fileList: {\n type: Array as PropType<UploadFileItem[]>,\n default: () => [],\n },\n // 下载模板的URL\n templateUrl: {\n type: String,\n default: '',\n },\n // 下载模板的文件名\n templateFileName: {\n type: String,\n default: '模板文件',\n },\n // 提示文本\n tips: {\n type: String,\n default: '',\n },\n // 是否禁用\n disabled: {\n type: Boolean,\n default: false,\n },\n // 自定义上传请求\n httpRequest: {\n type: Function as PropType<(options: UploadRequestOptions) => void>,\n default: undefined,\n },\n headers: {\n type: Object,\n default: () => ({\n Authorization: 'Bearer ApiSecretKey_mEKsrCMvxNLzzUUKeQmpzaUZqwZxFyJf',\n appId: '9a673565-d4f6-4382-bc67-f1beb07df435'\n }),\n },\n extendData: {\n type: Object,\n default: () => ({\n \"user\": \"abc-123\",\n }),\n },\n },\n emits: ['update:fileList', 'success', 'remove', 'download-template', 'error'],\n setup(props, { emit }) {\n const uploadRef = ref<InstanceType<typeof ElUpload>>();\n const fileList = ref<UploadFileItem[]>(props.fileList || []);\n\n // 监听外部 fileList 变化\n watch(\n () => props.fileList,\n (newFileList) => {\n if (newFileList && JSON.stringify(newFileList) !== JSON.stringify(fileList.value)) {\n fileList.value = [...(newFileList || [])];\n }\n },\n { deep: true, immediate: true }\n );\n\n // 生成提示文本\n const tipsText = computed(() => {\n if (props.tips) {\n return props.tips;\n }\n const acceptTypes = props.accept\n .split(',')\n .map((type) => type.replace('.', '').toUpperCase())\n .join(' 或 ');\n return `支持 ${acceptTypes} 格式。文件大小不超过 ${props.maxSize}MB。`;\n });\n\n // 格式化文件大小\n const formatFileSize = (size: number): string => {\n if (size < 1024) {\n return size + ' B';\n } else if (size < 1024 * 1024) {\n return (size / 1024).toFixed(2) + ' KB';\n } else {\n return (size / (1024 * 1024)).toFixed(2) + ' MB';\n }\n };\n\n // 获取文件扩展名\n const getFileExtension = (filename: string): string => {\n const lastDot = filename.lastIndexOf('.');\n return lastDot !== -1 ? filename.substring(lastDot).toLowerCase() : '';\n };\n\n // 验证文件类型\n const validateFileType = (file: File): boolean => {\n const acceptTypes = props.accept.split(',').map((type) => type.trim().toLowerCase());\n const fileExt = getFileExtension(file.name);\n const isValid = acceptTypes.some((type) => {\n if (type.startsWith('.')) {\n return type === fileExt;\n }\n // 支持 MIME 类型\n return file.type && file.type.includes(type.replace('.', ''));\n });\n\n if (!isValid) {\n const acceptTypesText = props.accept\n .split(',')\n .map((type) => type.replace('.', '').toUpperCase())\n .join(' 或 ');\n ElMessage.error(`只能上传 ${acceptTypesText} 格式的文件!`);\n return false;\n }\n return true;\n };\n\n // 验证文件大小\n const validateFileSize = (file: File): boolean => {\n const maxSizeBytes = props.maxSize * 1024 * 1024;\n if (file.size > maxSizeBytes) {\n ElMessage.error(`文件大小不能超过 ${props.maxSize}MB!`);\n return false;\n }\n return true;\n };\n\n // 上传前的校验\n const beforeUpload = (file: File): boolean => {\n // 类型校验\n if (!validateFileType(file)) {\n return false;\n }\n // 大小校验\n if (!validateFileSize(file)) {\n return false;\n }\n return true;\n };\n\n // 文件移除时的钩子\n const handleRemove = (uploadFile: UploadFile, uploadFiles: UploadFiles) => {\n fileList.value = uploadFiles.map((file) => ({\n name: file.name,\n ...(file.response || {} as any),\n }));\n emit('update:fileList', fileList.value);\n emit('remove', uploadFile, uploadFiles);\n };\n\n // 上传失败时的钩子\n const handleError = (error: Error, uploadFile: UploadFile) => {\n ElMessage.error(`文件 ${uploadFile.name} 上传失败:${error.message}`);\n emit('error', error, uploadFile);\n };\n\n // 下载模板\n const handleDownloadTemplate = () => {\n if (!props.templateUrl) {\n ElMessage.warning('模板文件地址未配置');\n return;\n }\n emit('download-template', props.templateUrl);\n \n // 如果没有自定义下载处理,则使用默认下载方式\n const link = document.createElement('a');\n link.href = props.templateUrl;\n link.download = props.templateFileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n };\n\n // 删除文件\n const handleDelete = (file: UploadFileItem) => {\n const index = fileList.value.findIndex((item) => item.uid === file.uid);\n if (index !== -1) {\n fileList.value.splice(index, 1);\n emit('update:fileList', fileList.value);\n emit('remove', file, fileList.value);\n }\n };\n\n // 上传成功时的钩子\n const handleSuccess = (response: any, file: UploadFile, fileLists: UploadFiles) => {\n fileList.value = fileLists.map((file) => ({\n name: file.name,\n ...(response || {} as any),\n }));\n emit('update:fileList', fileList.value);\n emit('success', response, file, fileList);\n };\n\n return {\n uploadRef,\n fileList,\n tipsText,\n formatFileSize,\n beforeUpload,\n handleRemove,\n handleError,\n handleSuccess,\n handleDownloadTemplate,\n handleDelete,\n };\n },\n render() {\n return (\n <div class=\"core-upload\">\n {/* 第一层:上传文件、下载模板按钮 */}\n <div class=\"core-upload__actions\">\n <ElUpload\n ref=\"uploadRef\"\n class=\"core-upload__upload\"\n action={this.action}\n accept={this.accept}\n headers={this.headers}\n data={this.extendData}\n multiple={this.multiple}\n fileList={this.fileList}\n beforeUpload={this.beforeUpload}\n onRemove={this.handleRemove}\n onError={this.handleError}\n onSuccess={this.handleSuccess}\n httpRequest={this.httpRequest}\n disabled={this.disabled}\n showFileList={false}\n >\n {{\n trigger: () => (\n <ElButton\n type=\"primary\"\n icon={<img src={uploadIcon} alt=\"upload\" />}\n disabled={this.disabled}\n >\n 上传文件\n </ElButton>\n ),\n }}\n </ElUpload>\n <ElButton\n icon={<img src={tempIcon} alt=\"download\" />}\n onClick={this.handleDownloadTemplate}\n disabled={this.disabled}\n >\n 下载模板\n </ElButton>\n </div>\n\n {/* 第二层:tips 简要描述当前上传限制 */}\n {this.tipsText && (\n <div class=\"core-upload__tips\">\n {this.tipsText}\n </div>\n )}\n\n {/* 第三层:已经上传的列表,支持删除 */}\n {this.fileList && this.fileList.length > 0 && (\n <div class=\"core-upload__file-list\">\n {this.fileList.map((file) => (\n <div key={file.uid} class=\"core-upload__file-item\">\n <div class=\"core-upload__file-info\">\n <span class=\"core-upload__file-icon\">📄</span>\n <span\n class=\"core-upload__file-name\"\n title={file.name}\n >\n {file.name}\n </span>\n </div>\n <img onClick={() => this.handleDelete(file)} src={deleteIcon} alt=\"delete\" class=\"core-upload__file-delete\" />\n </div>\n ))}\n </div>\n )}\n </div>\n );\n },\n});\n\n"],"names":["name","props","action","type","String","default","accept","maxSize","Number","multiple","Boolean","fileList","Array","templateUrl","templateFileName","tips","disabled","httpRequest","Function","undefined","headers","Object","Authorization","appId","extendData","emits","setup","emit","uploadRef","ref","watch","newFileList","JSON","stringify","value","deep","immediate","tipsText","computed","acceptTypes","split","map","replace","toUpperCase","join","formatFileSize","size","toFixed","getFileExtension","filename","lastDot","lastIndexOf","substring","toLowerCase","validateFileType","file","trim","fileExt","isValid","some","startsWith","includes","acceptTypesText","ElMessage","error","validateFileSize","maxSizeBytes","beforeUpload","handleRemove","uploadFile","uploadFiles","response","handleError","message","handleDownloadTemplate","warning","link","document","createElement","href","download","body","appendChild","click","removeChild","handleDelete","index","findIndex","item","uid","splice","handleSuccess","fileLists","render","_createVNode","ElUpload","trigger","ElButton","uploadIcon","_createTextVNode","tempIcon","length","onClick","deleteIcon"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/core-upload/index.tsx"],"sourcesContent":["import { defineComponent, ref, PropType, computed, watch } from 'vue';\nimport { ElUpload, ElButton, ElMessage, ElIcon } from 'element-plus';\nimport type { UploadFile, UploadFiles, UploadRequestOptions } from 'element-plus';\n// @ts-ignore\nimport uploadIcon from './assets/upload.svg';\n// @ts-ignore\nimport tempIcon from './assets/temp.svg';\n// @ts-ignore\nimport deleteIcon from './assets/delete.svg';\nimport './style.less';\n\nexport interface UploadFileItem {\n name: string;\n url?: string;\n response?: any;\n [key: string]: any;\n}\n\nexport default defineComponent({\n name: 'CoreUpload',\n props: {\n // 上传地址\n action: {\n type: String,\n default: '/openapi/v1/app/files/upload',\n },\n // 允许上传的文件类型\n accept: {\n type: String,\n default: '.xlsx,.xls,.csv',\n },\n // 文件大小限制(单位:MB)\n maxSize: {\n type: Number,\n default: 10,\n },\n // 是否支持多文件上传\n multiple: {\n type: Boolean,\n default: true,\n },\n // 文件列表\n fileList: {\n type: Array as PropType<UploadFileItem[]>,\n default: () => [],\n },\n // 下载模板的URL\n templateUrl: {\n type: String,\n default: '',\n },\n // 下载模板的文件名\n templateFileName: {\n type: String,\n default: '模板文件',\n },\n // 提示文本\n tips: {\n type: String,\n default: '',\n },\n // 是否禁用\n disabled: {\n type: Boolean,\n default: false,\n },\n // 自定义上传请求\n httpRequest: {\n type: Function as PropType<(options: UploadRequestOptions) => void>,\n default: undefined,\n },\n headers: {\n type: Object,\n default: () => ({\n Authorization: 'Bearer ApiSecretKey_mEKsrCMvxNLzzUUKeQmpzaUZqwZxFyJf',\n appId: '9a673565-d4f6-4382-bc67-f1beb07df435'\n }),\n },\n extendData: {\n type: Object,\n default: () => ({\n \"user\": \"abc-123\",\n }),\n },\n },\n emits: ['update:fileList', 'success', 'remove', 'download-template', 'error'],\n setup(props, { emit }) {\n const uploadRef = ref<InstanceType<typeof ElUpload>>();\n const fileList = ref<UploadFileItem[]>(props.fileList || []);\n\n // 监听外部 fileList 变化\n watch(\n () => props.fileList,\n (newFileList) => {\n if (newFileList && JSON.stringify(newFileList) !== JSON.stringify(fileList.value)) {\n fileList.value = [...(newFileList || [])];\n }\n },\n { deep: true, immediate: true }\n );\n\n // 生成提示文本\n const tipsText = computed(() => {\n if (props.tips) {\n return props.tips;\n }\n const acceptTypes = props.accept\n .split(',')\n .map((type) => type.replace('.', '').toUpperCase())\n .join(' 或 ');\n return `支持 ${acceptTypes} 格式。文件大小不超过 ${props.maxSize}MB。`;\n });\n\n // 格式化文件大小\n const formatFileSize = (size: number): string => {\n if (size < 1024) {\n return size + ' B';\n } else if (size < 1024 * 1024) {\n return (size / 1024).toFixed(2) + ' KB';\n } else {\n return (size / (1024 * 1024)).toFixed(2) + ' MB';\n }\n };\n\n // 获取文件扩展名\n const getFileExtension = (filename: string): string => {\n const lastDot = filename.lastIndexOf('.');\n return lastDot !== -1 ? filename.substring(lastDot).toLowerCase() : '';\n };\n\n // 验证文件类型\n const validateFileType = (file: File): boolean => {\n const acceptTypes = props.accept.split(',').map((type) => type.trim().toLowerCase());\n const fileExt = getFileExtension(file.name);\n const isValid = acceptTypes.some((type) => {\n if (type.startsWith('.')) {\n return type === fileExt;\n }\n // 支持 MIME 类型\n return file.type && file.type.includes(type.replace('.', ''));\n });\n\n if (!isValid) {\n const acceptTypesText = props.accept\n .split(',')\n .map((type) => type.replace('.', '').toUpperCase())\n .join(' 或 ');\n ElMessage.error(`只能上传 ${acceptTypesText} 格式的文件!`);\n return false;\n }\n return true;\n };\n\n // 验证文件大小\n const validateFileSize = (file: File): boolean => {\n const maxSizeBytes = props.maxSize * 1024 * 1024;\n if (file.size > maxSizeBytes) {\n ElMessage.error(`文件大小不能超过 ${props.maxSize}MB!`);\n return false;\n }\n return true;\n };\n\n // 上传前的校验\n const beforeUpload = (file: File): boolean => {\n // 类型校验\n if (!validateFileType(file)) {\n return false;\n }\n // 大小校验\n if (!validateFileSize(file)) {\n return false;\n }\n return true;\n };\n\n // 文件移除时的钩子\n const handleRemove = (uploadFile: UploadFile, uploadFiles: UploadFiles) => {\n fileList.value = uploadFiles.map((file) => ({\n name: file.name,\n ...(file.response || {} as any),\n }));\n emit('update:fileList', fileList.value);\n emit('remove', uploadFile, uploadFiles);\n };\n\n // 上传失败时的钩子\n const handleError = (error: Error, uploadFile: UploadFile) => {\n ElMessage.error(`文件 ${uploadFile.name} 上传失败:${error.message}`);\n emit('error', error, uploadFile);\n };\n\n // 下载模板\n const handleDownloadTemplate = () => {\n if (!props.templateUrl) {\n ElMessage.warning('模板文件地址未配置');\n return;\n }\n emit('download-template', props.templateUrl);\n \n // 如果没有自定义下载处理,则使用默认下载方式\n const link = document.createElement('a');\n link.href = props.templateUrl;\n link.download = props.templateFileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n };\n\n // 删除文件\n const handleDelete = (file: UploadFileItem) => {\n // disabled 状态下不允许删除\n if (props.disabled) {\n return;\n }\n const index = fileList.value.findIndex((item) => item.uid === file.uid);\n if (index !== -1) {\n fileList.value.splice(index, 1);\n emit('update:fileList', fileList.value);\n emit('remove', file, fileList.value);\n }\n };\n\n // 上传成功时的钩子\n const handleSuccess = (response: any, file: UploadFile, fileLists: UploadFiles) => {\n fileList.value = fileLists.map((file) => ({\n name: file.name,\n ...(response || {} as any),\n }));\n emit('update:fileList', fileList.value);\n emit('success', response, file, fileList);\n };\n\n return {\n uploadRef,\n fileList,\n tipsText,\n formatFileSize,\n beforeUpload,\n handleRemove,\n handleError,\n handleSuccess,\n handleDownloadTemplate,\n handleDelete,\n };\n },\n render() {\n return (\n <div class=\"core-upload\">\n {/* 第一层:上传文件、下载模板按钮 */}\n <div class=\"core-upload__actions\">\n <ElUpload\n ref=\"uploadRef\"\n class=\"core-upload__upload\"\n action={this.action}\n accept={this.accept}\n headers={this.headers}\n data={this.extendData}\n multiple={this.multiple}\n fileList={this.fileList}\n beforeUpload={this.beforeUpload}\n onRemove={this.handleRemove}\n onError={this.handleError}\n onSuccess={this.handleSuccess}\n httpRequest={this.httpRequest}\n disabled={this.disabled}\n showFileList={false}\n >\n {{\n trigger: () => (\n <ElButton\n type=\"primary\"\n icon={<img src={uploadIcon} alt=\"upload\" />}\n disabled={this.disabled}\n >\n 上传文件\n </ElButton>\n ),\n }}\n </ElUpload>\n <ElButton\n icon={<img src={tempIcon} alt=\"download\" />}\n onClick={this.handleDownloadTemplate}\n disabled={this.disabled}\n >\n 下载模板\n </ElButton>\n </div>\n\n {/* 第二层:tips 简要描述当前上传限制 */}\n {this.tipsText && (\n <div class=\"core-upload__tips\">\n {this.tipsText}\n </div>\n )}\n\n {/* 第三层:已经上传的列表,支持删除 */}\n {this.fileList && this.fileList.length > 0 && (\n <div class=\"core-upload__file-list\">\n {this.fileList.map((file) => (\n <div key={file.uid} class=\"core-upload__file-item\">\n <div class=\"core-upload__file-info\">\n <span class=\"core-upload__file-icon\">📄</span>\n <span\n class=\"core-upload__file-name\"\n title={file.name}\n >\n {file.name}\n </span>\n </div>\n {!this.disabled && (\n <img onClick={() => this.handleDelete(file)} src={deleteIcon} alt=\"delete\" class=\"core-upload__file-delete\" />\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n },\n});\n\n"],"names":["name","props","action","type","String","default","accept","maxSize","Number","multiple","Boolean","fileList","Array","templateUrl","templateFileName","tips","disabled","httpRequest","Function","undefined","headers","Object","Authorization","appId","extendData","emits","setup","emit","uploadRef","ref","watch","newFileList","JSON","stringify","value","deep","immediate","tipsText","computed","acceptTypes","split","map","replace","toUpperCase","join","formatFileSize","size","toFixed","getFileExtension","filename","lastDot","lastIndexOf","substring","toLowerCase","validateFileType","file","trim","fileExt","isValid","some","startsWith","includes","acceptTypesText","ElMessage","error","validateFileSize","maxSizeBytes","beforeUpload","handleRemove","uploadFile","uploadFiles","response","handleError","message","handleDownloadTemplate","warning","link","document","createElement","href","download","body","appendChild","click","removeChild","handleDelete","index","findIndex","item","uid","splice","handleSuccess","fileLists","render","_createVNode","ElUpload","trigger","ElButton","uploadIcon","_createTextVNode","tempIcon","length","onClick","deleteIcon"],"mappings":"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"}
@@ -5,7 +5,7 @@ const useFormHandler = (hitlData, emit) => {
5
5
  const curIndex = ref(0);
6
6
  const isRewrite = ref(false);
7
7
  let curInit = 0;
8
- const btnClick = async (index, action, payload, parentScope) => {
8
+ const btnClick = async (index, action, payload, parentScope, skipValidation) => {
9
9
  var _a;
10
10
  if (action === "inner_next") {
11
11
  curIndex.value += 1;
@@ -23,20 +23,27 @@ const useFormHandler = (hitlData, emit) => {
23
23
  action,
24
24
  payload: {}
25
25
  };
26
- if (payload && parentScope !== "form") {
26
+ if (parentScope !== "form") {
27
27
  res = {
28
28
  action,
29
29
  payload
30
30
  };
31
31
  } else {
32
- await ((_a = formRefs.value[index]) == null ? void 0 : _a.validate());
33
- res = {
34
- action,
35
- payload: {
36
- ...hitlData.value[index],
37
- ...payload
38
- }
39
- };
32
+ if (!skipValidation) {
33
+ await ((_a = formRefs.value[index]) == null ? void 0 : _a.validate());
34
+ res = {
35
+ action,
36
+ payload: {
37
+ ...hitlData.value[index],
38
+ ...payload
39
+ }
40
+ };
41
+ } else {
42
+ res = {
43
+ action,
44
+ payload
45
+ };
46
+ }
40
47
  }
41
48
  if (isRewrite.value && action.startsWith("core_")) {
42
49
  isRewrite.value = false;
@@ -1 +1 @@
1
- {"version":3,"file":"useFormHandler.js","sources":["../../../../../src/components/x-markdown/composables/useFormHandler.ts"],"sourcesContent":["/**\n * 表单处理 Composable\n * 处理表单验证、按钮点击等交互\n */\n\nimport { ref, Ref } from 'vue';\nimport { useTemplateRefsList } from '@vueuse/core';\nimport { ElForm } from 'element-plus';\n\nexport const useFormHandler = (\n hitlData: Ref<Array<Record<string, any>>>,\n emit: (event: 'coreSubmit', ...args: any[]) => void\n) => {\n const formRefs = useTemplateRefsList<typeof ElForm>();\n const curIndex = ref(0);\n const isRewrite = ref(false);\n // 用于表单渲染的索引\n let curInit = 0;\n\n /**\n * 按钮点击处理\n */\n const btnClick = async (\n index: number,\n action: string,\n payload: any,\n parentScope?: 'form' | 'table'\n ) => {\n if (action === 'inner_next') {\n curIndex.value += 1;\n return;\n }\n if (action === 'inner_prev') {\n curIndex.value -= 1;\n return;\n }\n if (action === 'inner_rewrite') {\n isRewrite.value = true;\n return;\n }\n\n let res = {\n action,\n payload: {},\n };\n \n // 区分是否为form组件的按钮,如果带有payload 则约定为非form组件的按钮\n if (payload && parentScope !== 'form') {\n res = {\n action,\n payload,\n };\n } else {\n await formRefs.value[index]?.validate();\n res = {\n action,\n payload: {\n ...hitlData.value[index],\n ...payload,\n }\n };\n }\n \n if (isRewrite.value && action.startsWith('core_')) {\n isRewrite.value = false;\n }\n \n emit('coreSubmit', res);\n };\n\n /**\n * 重置 curInit(在组件更新时调用)\n */\n const resetCurInit = () => {\n curInit = 0;\n };\n\n /**\n * 获取当前表单索引(用于表单渲染)\n */\n const getCurInit = () => {\n const current = curInit;\n curInit++;\n return current;\n };\n\n return {\n formRefs,\n curIndex,\n isRewrite,\n btnClick,\n resetCurInit,\n getCurInit,\n };\n};\n\n"],"names":[],"mappings":";;AASO,MAAM,iBAAiB,CAC5B,UACA,SACG;AACH,QAAM,WAAW,oBAAA;AACjB,QAAM,WAAW,IAAI,CAAC;AACtB,QAAM,YAAY,IAAI,KAAK;AAE3B,MAAI,UAAU;AAKd,QAAM,WAAW,OACf,OACA,QACA,SACA,gBACG;;AACH,QAAI,WAAW,cAAc;AAC3B,eAAS,SAAS;AAClB;AAAA,IACF;AACA,QAAI,WAAW,cAAc;AAC3B,eAAS,SAAS;AAClB;AAAA,IACF;AACA,QAAI,WAAW,iBAAiB;AAC9B,gBAAU,QAAQ;AAClB;AAAA,IACF;AAEA,QAAI,MAAM;AAAA,MACR;AAAA,MACA,SAAS,CAAA;AAAA,IAAC;AAIZ,QAAI,WAAW,gBAAgB,QAAQ;AACrC,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ,OAAO;AACL,cAAM,cAAS,MAAM,KAAK,MAApB,mBAAuB;AAC7B,YAAM;AAAA,QACJ;AAAA,QACA,SAAS;AAAA,UACP,GAAG,SAAS,MAAM,KAAK;AAAA,UACvB,GAAG;AAAA,QAAA;AAAA,MACL;AAAA,IAEJ;AAEA,QAAI,UAAU,SAAS,OAAO,WAAW,OAAO,GAAG;AACjD,gBAAU,QAAQ;AAAA,IACpB;AAEA,SAAK,cAAc,GAAG;AAAA,EACxB;AAKA,QAAM,eAAe,MAAM;AACzB,cAAU;AAAA,EACZ;AAKA,QAAM,aAAa,MAAM;AACvB,UAAM,UAAU;AAChB;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"useFormHandler.js","sources":["../../../../../src/components/x-markdown/composables/useFormHandler.ts"],"sourcesContent":["/**\n * 表单处理 Composable\n * 处理表单验证、按钮点击等交互\n */\n\nimport { ref, Ref } from 'vue';\nimport { useTemplateRefsList } from '@vueuse/core';\nimport { ElForm } from 'element-plus';\n\nexport const useFormHandler = (\n hitlData: Ref<Array<Record<string, any>>>,\n emit: (event: 'coreSubmit', ...args: any[]) => void\n) => {\n const formRefs = useTemplateRefsList<typeof ElForm>();\n const curIndex = ref(0);\n const isRewrite = ref(false);\n // 用于表单渲染的索引\n let curInit = 0;\n\n /**\n * 按钮点击处理\n */\n const btnClick = async (\n index: number,\n action: string,\n payload: any,\n parentScope?: 'form' | 'table',\n skipValidation?: boolean\n ) => {\n if (action === 'inner_next') {\n curIndex.value += 1;\n return;\n }\n if (action === 'inner_prev') {\n curIndex.value -= 1;\n return;\n }\n if (action === 'inner_rewrite') {\n isRewrite.value = true;\n return;\n }\n\n let res = {\n action,\n payload: {},\n };\n \n // 区分是否为form组件的按钮,如果带有payload 则约定为非form组件的按钮\n if (parentScope !== 'form') {\n res = {\n action,\n payload,\n };\n } else {\n if (!skipValidation) {\n await formRefs.value[index]?.validate();\n res = {\n action,\n payload: {\n ...hitlData.value[index],\n ...payload,\n }\n };\n } else {\n res = {\n action,\n payload,\n };\n }\n \n }\n \n if (isRewrite.value && action.startsWith('core_')) {\n isRewrite.value = false;\n }\n \n emit('coreSubmit', res);\n };\n\n /**\n * 重置 curInit(在组件更新时调用)\n */\n const resetCurInit = () => {\n curInit = 0;\n };\n\n /**\n * 获取当前表单索引(用于表单渲染)\n */\n const getCurInit = () => {\n const current = curInit;\n curInit++;\n return current;\n };\n\n return {\n formRefs,\n curIndex,\n isRewrite,\n btnClick,\n resetCurInit,\n getCurInit,\n };\n};\n\n"],"names":[],"mappings":";;AASO,MAAM,iBAAiB,CAC5B,UACA,SACG;AACH,QAAM,WAAW,oBAAA;AACjB,QAAM,WAAW,IAAI,CAAC;AACtB,QAAM,YAAY,IAAI,KAAK;AAE3B,MAAI,UAAU;AAKd,QAAM,WAAW,OACf,OACA,QACA,SACA,aACA,mBACG;;AACH,QAAI,WAAW,cAAc;AAC3B,eAAS,SAAS;AAClB;AAAA,IACF;AACA,QAAI,WAAW,cAAc;AAC3B,eAAS,SAAS;AAClB;AAAA,IACF;AACA,QAAI,WAAW,iBAAiB;AAC9B,gBAAU,QAAQ;AAClB;AAAA,IACF;AAEA,QAAI,MAAM;AAAA,MACR;AAAA,MACA,SAAS,CAAA;AAAA,IAAC;AAIZ,QAAI,gBAAgB,QAAQ;AAC1B,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ,OAAO;AACL,UAAI,CAAC,gBAAgB;AACnB,gBAAM,cAAS,MAAM,KAAK,MAApB,mBAAuB;AAC7B,cAAM;AAAA,UACJ;AAAA,UACA,SAAS;AAAA,YACP,GAAG,SAAS,MAAM,KAAK;AAAA,YACvB,GAAG;AAAA,UAAA;AAAA,QACL;AAAA,MAEJ,OAAO;AACL,cAAM;AAAA,UACJ;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ;AAAA,IAEF;AAEA,QAAI,UAAU,SAAS,OAAO,WAAW,OAAO,GAAG;AACjD,gBAAU,QAAQ;AAAA,IACpB;AAEA,SAAK,cAAc,GAAG;AAAA,EACxB;AAKA,QAAM,eAAe,MAAM;AACzB,cAAU;AAAA,EACZ;AAKA,QAAM,aAAa,MAAM;AACvB,UAAM,UAAU;AAChB;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}
@@ -53,7 +53,7 @@ const renderSkeleton = () => {
53
53
  ]);
54
54
  };
55
55
  const hastToVNode = (node, config, index, row) => {
56
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;
56
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s;
57
57
  if (!node) return null;
58
58
  const {
59
59
  hitlData,
@@ -211,9 +211,13 @@ const hastToVNode = (node, config, index, row) => {
211
211
  if (node.tagName === "ElButton") {
212
212
  let payload = (_c = node.properties) == null ? void 0 : _c.payload;
213
213
  if (node.parentScope === "table") {
214
- payload = row;
214
+ payload = {
215
+ ...payload,
216
+ ...row
217
+ };
215
218
  }
216
219
  const buttonFormIndex = node.parentScope === "form" ? index : void 0;
220
+ const skipValidation = ((_d = node.properties) == null ? void 0 : _d.skipValidation) || false;
217
221
  return h(
218
222
  ElButton,
219
223
  {
@@ -222,7 +226,7 @@ const hastToVNode = (node, config, index, row) => {
222
226
  onClick: () => {
223
227
  var _a2;
224
228
  const validateIndex = buttonFormIndex !== void 0 ? buttonFormIndex : index !== void 0 ? index : 0;
225
- btnClick(validateIndex, (_a2 = node.properties) == null ? void 0 : _a2.action, payload, node.parentScope);
229
+ btnClick(validateIndex, (_a2 = node.properties) == null ? void 0 : _a2.action, payload, node.parentScope, skipValidation);
226
230
  }
227
231
  },
228
232
  children
@@ -234,7 +238,7 @@ const hastToVNode = (node, config, index, row) => {
234
238
  {
235
239
  ...node.properties,
236
240
  disabled: checkDisabled(node, disabledContext),
237
- modelValue: (_e = hitlData[index]) == null ? void 0 : _e[(_d = node.properties) == null ? void 0 : _d.formProp],
241
+ modelValue: (_f = hitlData[index]) == null ? void 0 : _f[(_e = node.properties) == null ? void 0 : _e.formProp],
238
242
  "onUpdate:modelValue": (value) => {
239
243
  var _a2;
240
244
  if (hitlData[index]) {
@@ -251,7 +255,7 @@ const hastToVNode = (node, config, index, row) => {
251
255
  {
252
256
  ...node.properties,
253
257
  disabled: checkDisabled(node, disabledContext),
254
- modelValue: (_g = hitlData[index]) == null ? void 0 : _g[(_f = node.properties) == null ? void 0 : _f.formProp],
258
+ modelValue: (_h = hitlData[index]) == null ? void 0 : _h[(_g = node.properties) == null ? void 0 : _g.formProp],
255
259
  "onUpdate:modelValue": (value) => {
256
260
  var _a2;
257
261
  if (hitlData[index]) {
@@ -268,7 +272,7 @@ const hastToVNode = (node, config, index, row) => {
268
272
  {
269
273
  ...node.properties,
270
274
  disabled: checkDisabled(node, disabledContext),
271
- modelValue: (_i = hitlData[index]) == null ? void 0 : _i[(_h = node.properties) == null ? void 0 : _h.formProp],
275
+ modelValue: (_j = hitlData[index]) == null ? void 0 : _j[(_i = node.properties) == null ? void 0 : _i.formProp],
272
276
  "onUpdate:modelValue": (value) => {
273
277
  var _a2;
274
278
  if (hitlData[index]) {
@@ -285,7 +289,7 @@ const hastToVNode = (node, config, index, row) => {
285
289
  {
286
290
  ...node.properties,
287
291
  disabled: checkDisabled(node, disabledContext),
288
- modelValue: (_k = hitlData[index]) == null ? void 0 : _k[(_j = node.properties) == null ? void 0 : _j.formProp],
292
+ modelValue: (_l = hitlData[index]) == null ? void 0 : _l[(_k = node.properties) == null ? void 0 : _k.formProp],
289
293
  "onUpdate:modelValue": (value) => {
290
294
  var _a2;
291
295
  if (hitlData[index]) {
@@ -323,16 +327,24 @@ const hastToVNode = (node, config, index, row) => {
323
327
  },
324
328
  {
325
329
  default: (scope) => {
326
- const columnChildren = (node.children || []).map(
327
- (child) => hastToVNode(child, config, -Infinity, scope.row)
328
- );
330
+ var _a2, _b2, _c2;
331
+ const value = scope.row[(_a2 = node.properties) == null ? void 0 : _a2.prop];
332
+ if (Array.isArray(value)) {
333
+ return value.map((item) => {
334
+ var _a3;
335
+ return (_a3 = node.children) == null ? void 0 : _a3.find((child) => child.value === item && child.value !== void 0);
336
+ }).map((child) => hastToVNode(child, config, -Infinity, scope.row));
337
+ }
329
338
  const childIndex = (node.children || []).findIndex(
330
339
  (child) => {
331
- var _a2;
332
- return child.value === scope.row[(_a2 = node.properties) == null ? void 0 : _a2.prop] && child.value !== void 0;
340
+ var _a3;
341
+ return child.value === scope.row[(_a3 = node.properties) == null ? void 0 : _a3.prop] && child.value !== void 0;
333
342
  }
334
343
  );
335
- return childIndex === -1 ? columnChildren : columnChildren == null ? void 0 : columnChildren[childIndex];
344
+ if (childIndex !== -1) {
345
+ return hastToVNode((_b2 = node.children) == null ? void 0 : _b2[childIndex], config, -Infinity, scope.row);
346
+ }
347
+ return (_c2 = node.children) == null ? void 0 : _c2.map((child) => hastToVNode(child, config, -Infinity, scope.row));
336
348
  }
337
349
  }
338
350
  );
@@ -358,7 +370,7 @@ const hastToVNode = (node, config, index, row) => {
358
370
  });
359
371
  }
360
372
  if (node.tagName === "CoreUpload") {
361
- if (node.parentScope === "form" && ((_l = node.properties) == null ? void 0 : _l.formProp)) {
373
+ if (node.parentScope === "form" && ((_m = node.properties) == null ? void 0 : _m.formProp)) {
362
374
  const formProp = node.properties.formProp;
363
375
  return h(
364
376
  CoreUpload,
@@ -367,7 +379,7 @@ const hastToVNode = (node, config, index, row) => {
367
379
  extendData: uploadExtendData,
368
380
  ...node.properties,
369
381
  disabled: checkDisabled(node, disabledContext),
370
- fileList: ((_m = hitlData[index]) == null ? void 0 : _m[formProp]) || [],
382
+ fileList: ((_n = hitlData[index]) == null ? void 0 : _n[formProp]) || [],
371
383
  "onUpdate:fileList": (value) => {
372
384
  if (!hitlData[index]) {
373
385
  hitlData[index] = {};
@@ -390,10 +402,10 @@ const hastToVNode = (node, config, index, row) => {
390
402
  );
391
403
  }
392
404
  if (node.tagName === "pre") {
393
- const codeNode = (_n = node.children) == null ? void 0 : _n.find((child) => child.tagName === "code");
405
+ const codeNode = (_o = node.children) == null ? void 0 : _o.find((child) => child.tagName === "code");
394
406
  if (codeNode) {
395
- if ((_p = (_o = codeNode.properties) == null ? void 0 : _o.className) == null ? void 0 : _p.includes("language-CorePilot")) {
396
- const code = ((_r = (_q = codeNode.children) == null ? void 0 : _q[0]) == null ? void 0 : _r.value) || "";
407
+ if ((_q = (_p = codeNode.properties) == null ? void 0 : _p.className) == null ? void 0 : _q.includes("language-CorePilot")) {
408
+ const code = ((_s = (_r = codeNode.children) == null ? void 0 : _r[0]) == null ? void 0 : _s.value) || "";
397
409
  if (!isCompleteJSON(code)) {
398
410
  return renderSkeleton();
399
411
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hastRenderer.js","sources":["../../../../../src/components/x-markdown/renderers/hastRenderer.ts"],"sourcesContent":["/**\n * HAST (HTML AST) 渲染器\n * 将 HAST 节点转换为 Vue VNode\n * 优化了复杂表单的性能问题\n */\n\nimport { h } from 'vue';\nimport {\n ElMessage,\n ElForm,\n ElFormItem,\n ElInput,\n ElCard,\n ElButton,\n ElSelect,\n ElDatePicker,\n ElTableColumn,\n ElTimeline,\n ElRow,\n ElCol,\n ElRadioGroup,\n ElRadio,\n ElConfigProvider,\n ElTag,\n} from 'element-plus';\nimport zhCN from 'element-plus/es/locale/lang/zh-cn';\nimport CoreText from '../../core-text';\nimport CoreTips from '../../core-tips';\nimport CoreResult from '../../core-result';\nimport CoreTable from '../../core-table';\nimport CoreChart from '../../core-chart';\nimport CoreCard from '../../core-card';\nimport CoreUpload from '../../core-upload';\nimport { parseCorePilot } from '../utils/parseCorePilotSchema';\nimport { isCompleteJSON } from '../utils/jsonUtils';\nimport { checkDisabled, DisabledCheckContext } from '../utils/disabledUtils';\nimport { InputSchema } from '@/types/index.ts';\n\n/**\n * 渲染骨架屏组件\n */\nconst renderSkeleton = () => {\n return h(\"div\", {\n class: \"hitl-skeleton\",\n }, [\n // 头部骨架\n h(\"div\", {\n class: \"skeleton-header\",\n }, [\n h(\"div\", { class: \"skeleton-avatar\" }),\n h(\"div\", { class: \"skeleton-title\" }),\n ]),\n // 内容骨架\n h(\"div\", { class: \"skeleton-item skeleton-item-long\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-medium\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-short\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-long\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-medium\" }),\n ]);\n};\n\n/**\n * 渲染器配置接口\n */\nexport interface RendererConfig {\n hitlData: Array<Record<string, any>>;\n formRefs: any;\n curIndex: number;\n getCurInit: () => number;\n btnClick: (index: number, action: string, payload: any, parentScope?: 'form' | 'table') => void;\n uploadHeaders: Record<string, string>;\n uploadExtendData: Record<string, any>;\n disabledContext: DisabledCheckContext;\n}\n\n/**\n * 将hast(HTML AST)转换为Vue VNode\n * 性能优化:\n * 1. 使用缓存避免重复计算\n * 2. 延迟子节点渲染(仅在需要时渲染)\n * 3. 优化递归深度\n * \n * @param node - hast节点\n * @param config - 渲染器配置\n * @param index - 表单索引\n * @param row - 表格行数据\n * @returns Vue虚拟节点\n */\nexport const hastToVNode = (\n node: any,\n config: RendererConfig,\n index?: number,\n row?: any\n): any => {\n if (!node) return null;\n\n const {\n hitlData,\n formRefs,\n curIndex,\n getCurInit,\n btnClick,\n uploadHeaders,\n uploadExtendData,\n disabledContext,\n } = config;\n\n // 缓存子节点渲染函数,避免重复计算\n const renderChildren = (children: any[], formIndex?: number) => {\n if (!children || children.length === 0) return [];\n \n // 对于复杂表单,使用批量渲染优化\n // 优先使用传入的 formIndex,如果没有则使用当前的 index\n return children.map((child, idx) => {\n return hastToVNode(child, config, formIndex !== undefined ? formIndex : index, row);\n });\n };\n\n const blackTagNames = ['sub', 'pre', 'text', 'ElForm'];\n let children: any[] = [];\n\n if (!blackTagNames.includes(node.tagName)) {\n // 如果当前节点在表单中(index 是数字),继续传递这个 index 给子节点\n // 这样可以确保表单内的所有子节点(包括按钮)都能获取到正确的表单索引\n children = renderChildren(node.children || [], index);\n }\n\n switch (node.type) {\n case \"root\":\n return h(\n \"div\",\n { class: \"markdown-body\" },\n h(ElConfigProvider, {\n locale: zhCN,\n }, children)\n );\n\n case \"element\":\n // 处理 sub 标签(引用标记)\n if (node.tagName === \"sub\") {\n const formatChildren = [\n {\n type: \"element\",\n tagName: \"span\",\n properties: {\n class: \"x-markdown-split\",\n },\n },\n ...(node.children || [])\n ];\n const subChildren = formatChildren.map(child => hastToVNode(child, config, index));\n return h(\"span\", {\n ...node.properties,\n class: \"x-markdown-sub\",\n }, subChildren);\n }\n\n if (node.tagName === \"span\") {\n return h(\"span\", {\n ...node.properties,\n }, children);\n }\n\n // 处理特殊元素:图片、链接、代码块等\n if (node.tagName === \"img\") {\n return h(\"img\", {\n ...node.properties,\n class: \"markdown-image\",\n \"data-processed\": \"false\"\n });\n }\n\n if (node.tagName === \"a\") {\n const href = node.properties?.href || '';\n const fileType = href ? href.split('.').pop() : null;\n return h(\n \"a\",\n {\n ...node.properties,\n class: 'file-link',\n 'data-file-type': fileType,\n },\n children\n );\n }\n\n if (node.tagName === 'ElTimeline') {\n return h(ElTimeline, {\n ...node.properties,\n }, children);\n }\n\n if (node.tagName === 'table') {\n return h(\n \"div\",\n { class: 'custom-table-container' },\n [h(\"table\", children)]\n );\n }\n\n if (node.tagName === 'view') {\n return h(\n 'div',\n { class: 'custom-view-container' },\n [children[curIndex]]\n );\n }\n\n if (node.tagName === 'ElRow') {\n return h(ElRow, {\n ...node.properties,\n }, children);\n }\n\n if (node.tagName === 'ElCol') {\n return h(ElCol, {\n ...node.properties,\n }, children);\n }\n\n if (node.tagName === 'ElCard') {\n return h(ElCard, {\n ...node.properties,\n }, children);\n }\n\n if (node.tagName === 'ElTag') {\n return h(\n ElTag,\n {\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'CoreCard') {\n const slots: any = {};\n \n if (node.slots?.header) {\n slots.header = () => {\n return node.slots.header.map((slotItem: any) => {\n return hastToVNode(slotItem, config, index);\n });\n };\n }\n \n if (children && children.length > 0) {\n slots.default = () => children;\n }\n \n return h(CoreCard, {\n ...node.properties,\n }, slots);\n }\n\n // 表单相关元素\n if (node.tagName === 'ElForm') {\n const formIndex = getCurInit();\n const formChildren = (node.children || []).map((child: any) => \n hastToVNode(child, config, formIndex)\n );\n \n return h(\n ElForm,\n {\n ref: formRefs.set,\n model: hitlData[formIndex],\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n },\n formChildren\n );\n }\n\n if (node.tagName === 'ElFormItem') {\n return h(ElFormItem, {\n ...node.properties,\n }, children);\n }\n\n // 表单控件\n if (node.tagName === 'ElButton') {\n let payload = node.properties?.payload;\n if (node.parentScope === 'table') {\n payload = row;\n }\n // 确保按钮在表单中使用正确的表单索引\n // 当 parentScope 是 'form' 时,index 应该是表单索引(从表单渲染时传递下来的)\n // 当 parentScope 不是 'form' 时,index 可能是 undefined 或其他值,但不会用于表单验证\n const buttonFormIndex = node.parentScope === 'form' ? index : undefined;\n return h(\n ElButton,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n onClick: () => {\n // 如果按钮在表单中(parentScope === 'form'),必须使用正确的表单索引进行验证\n // 如果不在表单中,使用 0 作为默认值(但不会触发表单验证,因为 btnClick 会检查 parentScope)\n // 关键:index 在表单渲染时已经正确传递,所以 buttonFormIndex 应该是正确的表单索引\n const validateIndex = buttonFormIndex !== undefined ? buttonFormIndex : (index !== undefined ? index : 0);\n btnClick(validateIndex, node.properties?.action, payload, node.parentScope);\n },\n },\n children\n );\n }\n\n if (node.tagName === 'ElSelect') {\n return h(\n ElSelect,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n modelValue: hitlData[index!]?.[node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n if (hitlData[index!]) {\n hitlData[index!][node.properties?.formProp] = value;\n }\n },\n },\n children\n );\n }\n\n if (node.tagName === 'ElDatePicker') {\n return h(\n ElDatePicker,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n modelValue: hitlData[index!]?.[node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n if (hitlData[index!]) {\n hitlData[index!][node.properties?.formProp] = value;\n }\n },\n },\n children\n );\n }\n\n if (node.tagName === 'ElInput') {\n return h(\n ElInput,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n modelValue: hitlData[index!]?.[node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n if (hitlData[index!]) {\n hitlData[index!][node.properties?.formProp] = value;\n }\n },\n },\n children\n );\n }\n\n if (node.tagName === 'ElRadioGroup') {\n return h(\n ElRadioGroup,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n modelValue: hitlData[index!]?.[node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n if (hitlData[index!]) {\n hitlData[index!][node.properties?.formProp] = value as string;\n }\n }\n },\n children\n );\n }\n\n if (node.tagName === 'ElRadio') {\n return h(\n ElRadio,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n },\n children\n );\n }\n\n // 表格相关\n if (node.tagName === 'ElTable') {\n return h(\n CoreTable,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElTableColumn') {\n return h(\n ElTableColumn,\n {\n ...node.properties,\n },\n {\n default: (scope: any) => {\n const columnChildren = (node.children || []).map((child: any) => \n hastToVNode(child, config, -Infinity, scope.row)\n );\n const childIndex = (node.children || []).findIndex(\n (child: any) => child.value === scope.row[node.properties?.prop] && child.value !== undefined\n );\n return childIndex === -1 ? columnChildren : columnChildren?.[childIndex];\n },\n }\n );\n }\n\n // 自定义组件\n if (node.tagName === 'CoreText') {\n return h(CoreText, {\n ...node.properties,\n });\n }\n\n if (node.tagName === 'CoreTips') {\n return h(CoreTips, {\n ...node.properties,\n });\n }\n\n if (node.tagName === 'CoreResult') {\n return h(CoreResult, {\n ...node.properties,\n });\n }\n\n if (node.tagName === 'CoreChart') {\n return h(CoreChart, {\n ...node.properties,\n });\n }\n\n if (node.tagName === 'CoreUpload') {\n // 如果在表单中,需要处理 formProp 和双向绑定\n if (node.parentScope === 'form' && node.properties?.formProp) {\n const formProp = node.properties.formProp;\n return h(\n CoreUpload,\n {\n headers: uploadHeaders,\n extendData: uploadExtendData,\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n fileList: hitlData[index!]?.[formProp] || [],\n 'onUpdate:fileList': (value: any) => {\n if (!hitlData[index!]) {\n hitlData[index!] = {};\n }\n // 针对目前上传的文件解析,CA 这边必须得放在files 属性中,故被迫需要进行兼容\n // 这里将基于 __files__ 去识别,后续在coreagent 的 adapter 中进行处理\n if (!hitlData[index!].__files__) {\n hitlData[index!].__files__ = {};\n }\n hitlData[index!].__files__[formProp] = value;\n hitlData[index!][formProp] = value;\n },\n }\n );\n }\n // 非表单场景,直接渲染\n return h(\n CoreUpload,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n }\n );\n }\n\n // 处理CorePilot代码块\n if (node.tagName === \"pre\") {\n const codeNode = node.children?.find((child: any) => child.tagName === \"code\");\n if (codeNode) {\n if (codeNode.properties?.className?.includes(\"language-CorePilot\")) {\n const code = codeNode.children?.[0]?.value || '';\n // 检查 JSON 是否完整\n if (!isCompleteJSON(code)) {\n // JSON 不完整,显示骨架屏\n return renderSkeleton();\n }\n try {\n const schema = JSON.parse(code);\n const viewTree = parseCorePilot(schema);\n const corePilotChildren = hastToVNode(viewTree, config);\n return h(\"div\", {\n class: \"hitl-wrapper\",\n }, [corePilotChildren]);\n } catch (error) {\n // JSON 解析失败,可能是格式错误,显示骨架屏\n return renderSkeleton();\n }\n }\n }\n }\n\n // 其他普通元素\n return h(\n node.tagName,\n node.properties,\n children\n );\n\n case \"text\":\n return node.value.trim();\n\n default:\n return null;\n }\n};\n\n"],"names":["children","zhCN","_a"],"mappings":"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"}
1
+ {"version":3,"file":"hastRenderer.js","sources":["../../../../../src/components/x-markdown/renderers/hastRenderer.ts"],"sourcesContent":["/**\n * HAST (HTML AST) 渲染器\n * 将 HAST 节点转换为 Vue VNode\n * 优化了复杂表单的性能问题\n */\n\nimport { h } from 'vue';\nimport {\n ElMessage,\n ElForm,\n ElFormItem,\n ElInput,\n ElCard,\n ElButton,\n ElSelect,\n ElDatePicker,\n ElTableColumn,\n ElTimeline,\n ElRow,\n ElCol,\n ElRadioGroup,\n ElRadio,\n ElConfigProvider,\n ElTag,\n} from 'element-plus';\nimport zhCN from 'element-plus/es/locale/lang/zh-cn';\nimport CoreText from '../../core-text';\nimport CoreTips from '../../core-tips';\nimport CoreResult from '../../core-result';\nimport CoreTable from '../../core-table';\nimport CoreChart from '../../core-chart';\nimport CoreCard from '../../core-card';\nimport CoreUpload from '../../core-upload';\nimport { parseCorePilot } from '../utils/parseCorePilotSchema';\nimport { isCompleteJSON } from '../utils/jsonUtils';\nimport { checkDisabled, DisabledCheckContext } from '../utils/disabledUtils';\nimport { InputSchema } from '@/types/index.ts';\n\n/**\n * 渲染骨架屏组件\n */\nconst renderSkeleton = () => {\n return h(\"div\", {\n class: \"hitl-skeleton\",\n }, [\n // 头部骨架\n h(\"div\", {\n class: \"skeleton-header\",\n }, [\n h(\"div\", { class: \"skeleton-avatar\" }),\n h(\"div\", { class: \"skeleton-title\" }),\n ]),\n // 内容骨架\n h(\"div\", { class: \"skeleton-item skeleton-item-long\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-medium\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-short\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-long\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-medium\" }),\n ]);\n};\n\n/**\n * 渲染器配置接口\n */\nexport interface RendererConfig {\n hitlData: Array<Record<string, any>>;\n formRefs: any;\n curIndex: number;\n getCurInit: () => number;\n btnClick: (index: number, action: string, payload: any, parentScope?: 'form' | 'table', skipValidation?: boolean) => void;\n uploadHeaders: Record<string, string>;\n uploadExtendData: Record<string, any>;\n disabledContext: DisabledCheckContext;\n}\n\n/**\n * 将hast(HTML AST)转换为Vue VNode\n * 性能优化:\n * 1. 使用缓存避免重复计算\n * 2. 延迟子节点渲染(仅在需要时渲染)\n * 3. 优化递归深度\n * \n * @param node - hast节点\n * @param config - 渲染器配置\n * @param index - 表单索引\n * @param row - 表格行数据\n * @returns Vue虚拟节点\n */\nexport const hastToVNode = (\n node: any,\n config: RendererConfig,\n index?: number,\n row?: any\n): any => {\n if (!node) return null;\n\n const {\n hitlData,\n formRefs,\n curIndex,\n getCurInit,\n btnClick,\n uploadHeaders,\n uploadExtendData,\n disabledContext,\n } = config;\n\n // 缓存子节点渲染函数,避免重复计算\n const renderChildren = (children: any[], formIndex?: number) => {\n if (!children || children.length === 0) return [];\n \n // 对于复杂表单,使用批量渲染优化\n // 优先使用传入的 formIndex,如果没有则使用当前的 index\n return children.map((child, idx) => {\n return hastToVNode(child, config, formIndex !== undefined ? formIndex : index, row);\n });\n };\n\n const blackTagNames = ['sub', 'pre', 'text', 'ElForm'];\n let children: any[] = [];\n\n if (!blackTagNames.includes(node.tagName)) {\n // 如果当前节点在表单中(index 是数字),继续传递这个 index 给子节点\n // 这样可以确保表单内的所有子节点(包括按钮)都能获取到正确的表单索引\n children = renderChildren(node.children || [], index);\n }\n\n switch (node.type) {\n case \"root\":\n return h(\n \"div\",\n { class: \"markdown-body\" },\n h(ElConfigProvider, {\n locale: zhCN,\n }, children)\n );\n\n case \"element\":\n // 处理 sub 标签(引用标记)\n if (node.tagName === \"sub\") {\n const formatChildren = [\n {\n type: \"element\",\n tagName: \"span\",\n properties: {\n class: \"x-markdown-split\",\n },\n },\n ...(node.children || [])\n ];\n const subChildren = formatChildren.map(child => hastToVNode(child, config, index));\n return h(\"span\", {\n ...node.properties,\n class: \"x-markdown-sub\",\n }, subChildren);\n }\n\n if (node.tagName === \"span\") {\n return h(\"span\", {\n ...node.properties,\n }, children);\n }\n\n // 处理特殊元素:图片、链接、代码块等\n if (node.tagName === \"img\") {\n return h(\"img\", {\n ...node.properties,\n class: \"markdown-image\",\n \"data-processed\": \"false\"\n });\n }\n\n if (node.tagName === \"a\") {\n const href = node.properties?.href || '';\n const fileType = href ? href.split('.').pop() : null;\n return h(\n \"a\",\n {\n ...node.properties,\n class: 'file-link',\n 'data-file-type': fileType,\n },\n children\n );\n }\n\n if (node.tagName === 'ElTimeline') {\n return h(ElTimeline, {\n ...node.properties,\n }, children);\n }\n\n if (node.tagName === 'table') {\n return h(\n \"div\",\n { class: 'custom-table-container' },\n [h(\"table\", children)]\n );\n }\n\n if (node.tagName === 'view') {\n return h(\n 'div',\n { class: 'custom-view-container' },\n [children[curIndex]]\n );\n }\n\n if (node.tagName === 'ElRow') {\n return h(ElRow, {\n ...node.properties,\n }, children);\n }\n\n if (node.tagName === 'ElCol') {\n return h(ElCol, {\n ...node.properties,\n }, children);\n }\n\n if (node.tagName === 'ElCard') {\n return h(ElCard, {\n ...node.properties,\n }, children);\n }\n\n if (node.tagName === 'ElTag') {\n return h(\n ElTag,\n {\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'CoreCard') {\n const slots: any = {};\n \n if (node.slots?.header) {\n slots.header = () => {\n return node.slots.header.map((slotItem: any) => {\n return hastToVNode(slotItem, config, index);\n });\n };\n }\n \n if (children && children.length > 0) {\n slots.default = () => children;\n }\n \n return h(CoreCard, {\n ...node.properties,\n }, slots);\n }\n\n // 表单相关元素\n if (node.tagName === 'ElForm') {\n const formIndex = getCurInit();\n const formChildren = (node.children || []).map((child: any) => \n hastToVNode(child, config, formIndex)\n );\n \n return h(\n ElForm,\n {\n ref: formRefs.set,\n model: hitlData[formIndex],\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n },\n formChildren\n );\n }\n\n if (node.tagName === 'ElFormItem') {\n return h(ElFormItem, {\n ...node.properties,\n }, children);\n }\n\n // 表单控件\n if (node.tagName === 'ElButton') {\n let payload = node.properties?.payload;\n if (node.parentScope === 'table') {\n payload = {\n ...payload,\n ...row,\n };\n }\n // 确保按钮在表单中使用正确的表单索引\n // 当 parentScope 是 'form' 时,index 应该是表单索引(从表单渲染时传递下来的)\n // 当 parentScope 不是 'form' 时,index 可能是 undefined 或其他值,但不会用于表单验证\n const buttonFormIndex = node.parentScope === 'form' ? index : undefined;\n const skipValidation = node.properties?.skipValidation || false;\n return h(\n ElButton,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n onClick: () => {\n // 如果按钮在表单中(parentScope === 'form'),必须使用正确的表单索引进行验证\n // 如果不在表单中,使用 0 作为默认值(但不会触发表单验证,因为 btnClick 会检查 parentScope)\n // 关键:index 在表单渲染时已经正确传递,所以 buttonFormIndex 应该是正确的表单索引\n // 如果 skipValidation 为 true,则跳过表单验证\n const validateIndex = buttonFormIndex !== undefined ? buttonFormIndex : (index !== undefined ? index : 0);\n btnClick(validateIndex, node.properties?.action, payload, node.parentScope, skipValidation);\n },\n },\n children\n );\n }\n\n if (node.tagName === 'ElSelect') {\n return h(\n ElSelect,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n modelValue: hitlData[index!]?.[node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n if (hitlData[index!]) {\n hitlData[index!][node.properties?.formProp] = value;\n }\n },\n },\n children\n );\n }\n\n if (node.tagName === 'ElDatePicker') {\n return h(\n ElDatePicker,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n modelValue: hitlData[index!]?.[node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n if (hitlData[index!]) {\n hitlData[index!][node.properties?.formProp] = value;\n }\n },\n },\n children\n );\n }\n\n if (node.tagName === 'ElInput') {\n return h(\n ElInput,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n modelValue: hitlData[index!]?.[node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n if (hitlData[index!]) {\n hitlData[index!][node.properties?.formProp] = value;\n }\n },\n },\n children\n );\n }\n\n if (node.tagName === 'ElRadioGroup') {\n return h(\n ElRadioGroup,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n modelValue: hitlData[index!]?.[node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n if (hitlData[index!]) {\n hitlData[index!][node.properties?.formProp] = value as string;\n }\n }\n },\n children\n );\n }\n\n if (node.tagName === 'ElRadio') {\n return h(\n ElRadio,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n },\n children\n );\n }\n\n // 表格相关\n if (node.tagName === 'ElTable') {\n return h(\n CoreTable,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElTableColumn') {\n return h(\n ElTableColumn,\n {\n ...node.properties,\n },\n {\n default: (scope: any) => {\n const value = scope.row[node.properties?.prop];\n if (Array.isArray(value)) {\n return value.map((item: any) => {\n return node.children?.find((child: any) => child.value === item && child.value !== undefined);\n }).map((child: any) => hastToVNode(child, config, -Infinity, scope.row));\n }\n\n const childIndex = (node.children || []).findIndex(\n (child: any) => child.value === scope.row[node.properties?.prop] && child.value !== undefined\n );\n if (childIndex !== -1) {\n return hastToVNode(node.children?.[childIndex], config, -Infinity, scope.row);\n }\n return node.children?.map((child: any) => hastToVNode(child, config, -Infinity, scope.row));\n },\n }\n );\n }\n\n // 自定义组件\n if (node.tagName === 'CoreText') {\n return h(CoreText, {\n ...node.properties,\n });\n }\n\n if (node.tagName === 'CoreTips') {\n return h(CoreTips, {\n ...node.properties,\n });\n }\n\n if (node.tagName === 'CoreResult') {\n return h(CoreResult, {\n ...node.properties,\n });\n }\n\n if (node.tagName === 'CoreChart') {\n return h(CoreChart, {\n ...node.properties,\n });\n }\n\n if (node.tagName === 'CoreUpload') {\n // 如果在表单中,需要处理 formProp 和双向绑定\n if (node.parentScope === 'form' && node.properties?.formProp) {\n const formProp = node.properties.formProp;\n return h(\n CoreUpload,\n {\n headers: uploadHeaders,\n extendData: uploadExtendData,\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n fileList: hitlData[index!]?.[formProp] || [],\n 'onUpdate:fileList': (value: any) => {\n if (!hitlData[index!]) {\n hitlData[index!] = {};\n }\n // 针对目前上传的文件解析,CA 这边必须得放在files 属性中,故被迫需要进行兼容\n // 这里将基于 __files__ 去识别,后续在coreagent 的 adapter 中进行处理\n if (!hitlData[index!].__files__) {\n hitlData[index!].__files__ = {};\n }\n hitlData[index!].__files__[formProp] = value;\n hitlData[index!][formProp] = value;\n },\n }\n );\n }\n // 非表单场景,直接渲染\n return h(\n CoreUpload,\n {\n ...node.properties,\n disabled: checkDisabled(node as InputSchema, disabledContext),\n }\n );\n }\n\n // 处理CorePilot代码块\n if (node.tagName === \"pre\") {\n const codeNode = node.children?.find((child: any) => child.tagName === \"code\");\n if (codeNode) {\n if (codeNode.properties?.className?.includes(\"language-CorePilot\")) {\n const code = codeNode.children?.[0]?.value || '';\n // 检查 JSON 是否完整\n if (!isCompleteJSON(code)) {\n // JSON 不完整,显示骨架屏\n return renderSkeleton();\n }\n try {\n const schema = JSON.parse(code);\n const viewTree = parseCorePilot(schema);\n const corePilotChildren = hastToVNode(viewTree, config);\n return h(\"div\", {\n class: \"hitl-wrapper\",\n }, [corePilotChildren]);\n } catch (error) {\n // JSON 解析失败,可能是格式错误,显示骨架屏\n return renderSkeleton();\n }\n }\n }\n }\n\n // 其他普通元素\n return h(\n node.tagName,\n node.properties,\n children\n );\n\n case \"text\":\n return node.value.trim();\n\n default:\n return null;\n }\n};\n\n"],"names":["children","zhCN","_a","_b","_c"],"mappings":"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"}
@@ -117,7 +117,7 @@ const parseDate = (schema, type) => {
117
117
  };
118
118
  const parseButton = (schema, type) => {
119
119
  var _a, _b;
120
- return {
120
+ const formatSchema = {
121
121
  tagName: "ElButton",
122
122
  type: "element",
123
123
  properties: {
@@ -131,6 +131,10 @@ const parseButton = (schema, type) => {
131
131
  return parseSchema(item, type);
132
132
  })
133
133
  };
134
+ if (type === "table") {
135
+ formatSchema.value = schema.value;
136
+ }
137
+ return formatSchema;
134
138
  };
135
139
  const parseCard = (schema) => {
136
140
  var _a;
@@ -1 +1 @@
1
- {"version":3,"file":"parseCorePilotSchema.js","sources":["../../../../../src/components/x-markdown/utils/parseCorePilotSchema.ts"],"sourcesContent":["import { \n FormSchema, \n ViewSchema,\n FormFieldSchema, \n CardSchema, \n ButtonSchema, \n TableSchema, \n TipsSchema, \n TextSchema, \n InputSchema, \n SelectSchema, \n DateTimePickerSchema, \n TableColumnSchema, \n RowSchema, \n ColSchema, \n ResultSchema, \n TagSchema,\n RadioGroupSchema,\n RadioSchema,\n EChartsSchema,\n UploadSchema,\n} from '@/types/index';\n\ntype ElementSchema = \n | ViewSchema<any> \n | FormSchema \n | FormFieldSchema \n | CardSchema \n | ButtonSchema \n | TableSchema \n | TipsSchema \n | TextSchema \n | InputSchema \n | SelectSchema \n | DateTimePickerSchema \n | TableColumnSchema \n | RowSchema \n | ColSchema \n | ResultSchema \n | TagSchema \n | RadioGroupSchema \n | RadioSchema\n | EChartsSchema\n | UploadSchema;\n\ntype ParentScopeType = 'form' | 'table';\n\nconst parseSchema = (schema: ElementSchema, type?: ParentScopeType) => {\n switch (schema.type) {\n case 'view':\n return parseView(schema);\n case 'form':\n return parseForm(schema);\n case 'card':\n return parseCard(schema);\n case 'table':\n return parseTable(schema);\n case 'input':\n return parseInput(schema, type);\n case 'select':\n return parseSelect(schema, type);\n case 'dateTimePicker':\n return parseDate(schema, type);\n case 'button':\n return parseButton(schema, type);\n case 'tips':\n return parseTips(schema, type);\n case 'text':\n return parseText(schema, type);\n case 'formfield':\n return parseFormItem(schema, type);\n case 'column':\n return parseTableColumn(schema, type);\n case 'row':\n return parseRow(schema, type);\n case 'col':\n return parseCol(schema, type);\n case 'result':\n return parseResult(schema, type);\n case 'tag':\n return parseTag(schema, type);\n case 'radioGroup':\n return parseRadioGroup(schema, type);\n case 'radio':\n return parseRadio(schema, type);\n case 'echart':\n return parseECharts(schema, type);\n case 'upload':\n return parseUpload(schema, type);\n default:\n const _: never = schema;\n console.error(_);\n }\n}\n\n// result组件解析\nconst parseResult = (schema: ResultSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreResult',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\n// view组件解析\nconst parseView = (schema: ViewSchema<any>) => {\n return {\n tagName: 'view',\n type: 'element',\n properties: {\n title: schema.title,\n },\n children: schema.children.map((item) => {\n return parseSchema(item);\n })\n }\n}\n\n// form组件解析\nconst parseForm = (schema: FormSchema) => {\n const children: any[] = [] \n schema.fields.forEach((item) => {\n children.push(parseSchema(item, 'form'));\n });\n const actionChild = {\n tagName: 'div',\n type: 'element',\n properties: {\n class: 'hitl-btn-list',\n },\n children: schema.actions.map((item) => {\n return parseSchema(item, 'form');\n })\n }\n children.push(actionChild);\n return {\n tagName: 'ElForm',\n type: 'element',\n properties: {\n labelPosition: 'right',\n ...schema.properties,\n },\n children,\n }\n}\n\nconst parseInput = (schema: InputSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElInput',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseSelect = (schema: SelectSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElSelect',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseDate = (schema: DateTimePickerSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElDatePicker',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseButton = (schema: ButtonSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElButton',\n type: 'element',\n properties: {\n ...schema.properties,\n action: schema.action,\n payload: schema.payload,\n },\n // TODO 记录父级作用域,用于在form、table 组件中使用\n parentScope: type,\n children: schema.children?.map?.((item) => {\n return parseSchema(item, type);\n })\n }\n}\n\nconst parseCard = (schema: CardSchema) => {\n const result: any = {\n tagName: 'CoreCard',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item);\n })\n };\n \n // 处理 header 插槽\n if (schema.slots?.header) {\n result.slots = {\n header: schema.slots.header.map((item) => {\n return parseSchema(item);\n })\n };\n }\n \n return result;\n}\n\nconst parseTableColumn = (schema: TableColumnSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElTableColumn',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children?.map((item) => {\n return parseSchema(item, parentType);\n })\n }\n}\n\nconst parseTable = (schema: TableSchema) => {\n // 兼容旧版本不存在tableProps属性\n if (!schema.properties.tableProps) {\n schema.properties.tableProps = {\n data: [],\n ...schema.properties,\n };\n }\n return {\n tagName: 'ElTable',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item, 'table');\n })\n }\n}\n\n\nconst parseTips = (schema: TipsSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreTips',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\nconst parseText = (schema: TextSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreText',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\nconst injectFormProp = (schema: FormFieldSchema['children'], prop: string) => {\n return schema.map((item) => {\n return {\n ...item,\n properties: {\n ...item.properties,\n formProp: prop,\n },\n }\n })\n}\nconst parseFormItem = (schema: FormFieldSchema, parentType?: ParentScopeType) => {\n const prop = schema.properties.prop;\n const children = injectFormProp(schema.children, prop);\n const formatRules = (rules: FormFieldSchema['properties']['rules']) => {\n return rules?.map((item) => {\n if ('pattern' in item && item.pattern) {\n return {\n pattern: new RegExp(item.pattern),\n message: item.message,\n trigger: item.trigger,\n }\n }\n return item;\n })\n }\n return {\n tagName: 'ElFormItem',\n type: 'element',\n properties: {\n ...schema.properties,\n rules: formatRules(schema.properties.rules),\n },\n parentScope: parentType,\n children: [\n parseSchema(children[0] as InputSchema, parentType),\n ]\n }\n}\n\nconst parseRow = (schema: RowSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRow',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item, parentType);\n })\n }\n}\n\nconst parseCol = (schema: ColSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElCol',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children.map((item) => {\n return parseSchema(item as ElementSchema, parentType);\n })\n }\n}\n\nconst parseRadioGroup = (schema: RadioGroupSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRadioGroup',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.properties.options?.map((item) => {\n return parseSchema({\n type: 'radio',\n properties: item,\n } as RadioSchema, parentType);\n })\n }\n}\n\nconst parseRadio = (schema: RadioSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRadio',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\nconst parseTag = (schema: TagSchema, parentType?: ParentScopeType) => {\n const formatSchema = {\n tagName: 'ElTag',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children.map((item) => {\n return parseSchema(item as TextSchema, parentType);\n })\n }\n if (parentType === 'table') {\n formatSchema.value = schema.value;\n }\n return formatSchema;\n}\n\n// ECharts 图表解析\nconst parseECharts = (schema: EChartsSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreChart',\n type: 'element' as const,\n properties: schema.properties,\n parentScope: parentType,\n };\n}\n\n// Upload 上传组件解析\nconst parseUpload = (schema: UploadSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreUpload',\n type: 'element' as const,\n properties: schema.properties,\n parentScope: parentType,\n };\n}\n\nexport const parseCorePilot = (schema: ViewSchema<any>) => {\n return parseSchema(schema);\n}"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parseCorePilotSchema.js","sources":["../../../../../src/components/x-markdown/utils/parseCorePilotSchema.ts"],"sourcesContent":["import { \n FormSchema, \n ViewSchema,\n FormFieldSchema, \n CardSchema, \n ButtonSchema, \n TableSchema, \n TipsSchema, \n TextSchema, \n InputSchema, \n SelectSchema, \n DateTimePickerSchema, \n TableColumnSchema, \n RowSchema, \n ColSchema, \n ResultSchema, \n TagSchema,\n RadioGroupSchema,\n RadioSchema,\n EChartsSchema,\n UploadSchema,\n} from '@/types/index';\n\ntype ElementSchema = \n | ViewSchema<any> \n | FormSchema \n | FormFieldSchema \n | CardSchema \n | ButtonSchema \n | TableSchema \n | TipsSchema \n | TextSchema \n | InputSchema \n | SelectSchema \n | DateTimePickerSchema \n | TableColumnSchema \n | RowSchema \n | ColSchema \n | ResultSchema \n | TagSchema \n | RadioGroupSchema \n | RadioSchema\n | EChartsSchema\n | UploadSchema;\n\ntype ParentScopeType = 'form' | 'table';\n\nconst parseSchema = (schema: ElementSchema, type?: ParentScopeType) => {\n switch (schema.type) {\n case 'view':\n return parseView(schema);\n case 'form':\n return parseForm(schema);\n case 'card':\n return parseCard(schema);\n case 'table':\n return parseTable(schema);\n case 'input':\n return parseInput(schema, type);\n case 'select':\n return parseSelect(schema, type);\n case 'dateTimePicker':\n return parseDate(schema, type);\n case 'button':\n return parseButton(schema, type);\n case 'tips':\n return parseTips(schema, type);\n case 'text':\n return parseText(schema, type);\n case 'formfield':\n return parseFormItem(schema, type);\n case 'column':\n return parseTableColumn(schema, type);\n case 'row':\n return parseRow(schema, type);\n case 'col':\n return parseCol(schema, type);\n case 'result':\n return parseResult(schema, type);\n case 'tag':\n return parseTag(schema, type);\n case 'radioGroup':\n return parseRadioGroup(schema, type);\n case 'radio':\n return parseRadio(schema, type);\n case 'echart':\n return parseECharts(schema, type);\n case 'upload':\n return parseUpload(schema, type);\n default:\n const _: never = schema;\n console.error(_);\n }\n}\n\n// result组件解析\nconst parseResult = (schema: ResultSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreResult',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\n// view组件解析\nconst parseView = (schema: ViewSchema<any>) => {\n return {\n tagName: 'view',\n type: 'element',\n properties: {\n title: schema.title,\n },\n children: schema.children.map((item) => {\n return parseSchema(item);\n })\n }\n}\n\n// form组件解析\nconst parseForm = (schema: FormSchema) => {\n const children: any[] = [] \n schema.fields.forEach((item) => {\n children.push(parseSchema(item, 'form'));\n });\n const actionChild = {\n tagName: 'div',\n type: 'element',\n properties: {\n class: 'hitl-btn-list',\n },\n children: schema.actions.map((item) => {\n return parseSchema(item, 'form');\n })\n }\n children.push(actionChild);\n return {\n tagName: 'ElForm',\n type: 'element',\n properties: {\n labelPosition: 'right',\n ...schema.properties,\n },\n children,\n }\n}\n\nconst parseInput = (schema: InputSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElInput',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseSelect = (schema: SelectSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElSelect',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseDate = (schema: DateTimePickerSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElDatePicker',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseButton = (schema: ButtonSchema, type?: ParentScopeType) => {\n const formatSchema: any = {\n tagName: 'ElButton',\n type: 'element',\n properties: {\n ...schema.properties,\n action: schema.action,\n payload: schema.payload,\n },\n // TODO 记录父级作用域,用于在form、table 组件中使用\n parentScope: type,\n children: schema.children?.map?.((item) => {\n return parseSchema(item, type);\n })\n }\n if (type === 'table') {\n formatSchema.value = schema.value;\n }\n return formatSchema;\n}\n\nconst parseCard = (schema: CardSchema) => {\n const result: any = {\n tagName: 'CoreCard',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item);\n })\n };\n \n // 处理 header 插槽\n if (schema.slots?.header) {\n result.slots = {\n header: schema.slots.header.map((item) => {\n return parseSchema(item);\n })\n };\n }\n \n return result;\n}\n\nconst parseTableColumn = (schema: TableColumnSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElTableColumn',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children?.map((item) => {\n return parseSchema(item, parentType);\n })\n }\n}\n\nconst parseTable = (schema: TableSchema) => {\n // 兼容旧版本不存在tableProps属性\n if (!schema.properties.tableProps) {\n schema.properties.tableProps = {\n data: [],\n ...schema.properties,\n };\n }\n return {\n tagName: 'ElTable',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item, 'table');\n })\n }\n}\n\n\nconst parseTips = (schema: TipsSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreTips',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\nconst parseText = (schema: TextSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreText',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\nconst injectFormProp = (schema: FormFieldSchema['children'], prop: string) => {\n return schema.map((item) => {\n return {\n ...item,\n properties: {\n ...item.properties,\n formProp: prop,\n },\n }\n })\n}\nconst parseFormItem = (schema: FormFieldSchema, parentType?: ParentScopeType) => {\n const prop = schema.properties.prop;\n const children = injectFormProp(schema.children, prop);\n const formatRules = (rules: FormFieldSchema['properties']['rules']) => {\n return rules?.map((item) => {\n if ('pattern' in item && item.pattern) {\n return {\n pattern: new RegExp(item.pattern),\n message: item.message,\n trigger: item.trigger,\n }\n }\n return item;\n })\n }\n return {\n tagName: 'ElFormItem',\n type: 'element',\n properties: {\n ...schema.properties,\n rules: formatRules(schema.properties.rules),\n },\n parentScope: parentType,\n children: [\n parseSchema(children[0] as InputSchema, parentType),\n ]\n }\n}\n\nconst parseRow = (schema: RowSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRow',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item, parentType);\n })\n }\n}\n\nconst parseCol = (schema: ColSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElCol',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children.map((item) => {\n return parseSchema(item as ElementSchema, parentType);\n })\n }\n}\n\nconst parseRadioGroup = (schema: RadioGroupSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRadioGroup',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.properties.options?.map((item) => {\n return parseSchema({\n type: 'radio',\n properties: item,\n } as RadioSchema, parentType);\n })\n }\n}\n\nconst parseRadio = (schema: RadioSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRadio',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\nconst parseTag = (schema: TagSchema, parentType?: ParentScopeType) => {\n const formatSchema = {\n tagName: 'ElTag',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children.map((item) => {\n return parseSchema(item as TextSchema, parentType);\n })\n }\n if (parentType === 'table') {\n formatSchema.value = schema.value;\n }\n return formatSchema;\n}\n\n// ECharts 图表解析\nconst parseECharts = (schema: EChartsSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreChart',\n type: 'element' as const,\n properties: schema.properties,\n parentScope: parentType,\n };\n}\n\n// Upload 上传组件解析\nconst parseUpload = (schema: UploadSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreUpload',\n type: 'element' as const,\n properties: schema.properties,\n parentScope: parentType,\n };\n}\n\nexport const parseCorePilot = (schema: ViewSchema<any>) => {\n return parseSchema(schema);\n}"],"names":[],"mappings":"AA+CA,MAAM,cAAc,CAAC,QAAuB,SAA2B;AACrE,UAAQ,OAAO,MAAA;AAAA,IACb,KAAK;AACH,aAAO,UAAU,MAAM;AAAA,IACzB,KAAK;AACH,aAAO,UAAU,MAAM;AAAA,IACzB,KAAK;AACH,aAAO,UAAU,MAAM;AAAA,IACzB,KAAK;AACH,aAAO,WAAW,MAAM;AAAA,IAC1B,KAAK;AACH,aAAO,WAAW,QAAQ,IAAI;AAAA,IAChC,KAAK;AACH,aAAO,YAAY,QAAQ,IAAI;AAAA,IACjC,KAAK;AACH,aAAO,UAAU,QAAQ,IAAI;AAAA,IAC/B,KAAK;AACH,aAAO,YAAY,QAAQ,IAAI;AAAA,IACjC,KAAK;AACH,aAAO,UAAU,QAAQ,IAAI;AAAA,IAC/B,KAAK;AACH,aAAO,UAAU,QAAQ,IAAI;AAAA,IAC/B,KAAK;AACH,aAAO,cAAc,QAAQ,IAAI;AAAA,IACnC,KAAK;AACH,aAAO,iBAAiB,QAAQ,IAAI;AAAA,IACtC,KAAK;AACH,aAAO,SAAS,QAAQ,IAAI;AAAA,IAC9B,KAAK;AACH,aAAO,SAAS,QAAQ,IAAI;AAAA,IAC9B,KAAK;AACH,aAAO,YAAY,QAAQ,IAAI;AAAA,IACjC,KAAK;AACH,aAAO,SAAS,QAAQ,IAAI;AAAA,IAC9B,KAAK;AACH,aAAO,gBAAgB,QAAQ,IAAI;AAAA,IACrC,KAAK;AACH,aAAO,WAAW,QAAQ,IAAI;AAAA,IAChC,KAAK;AACH,aAAO,aAAa,QAAQ,IAAI;AAAA,IAClC,KAAK;AACH,aAAO,YAAY,QAAQ,IAAI;AAAA,IACjC;AACE,YAAM,IAAW;AACjB,cAAQ,MAAM,CAAC;AAAA,EAAA;AAErB;AAGA,MAAM,cAAc,CAAC,QAAsB,eAAiC;AAC1E,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,YAAY,OAAO;AAAA,IACnB,aAAa;AAAA,EAAA;AAEjB;AAGA,MAAM,YAAY,CAAC,WAA4B;AAC7C,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,YAAY;AAAA,MACV,OAAO,OAAO;AAAA,IAAA;AAAA,IAEhB,UAAU,OAAO,SAAS,IAAI,CAAC,SAAS;AACtC,aAAO,YAAY,IAAI;AAAA,IACzB,CAAC;AAAA,EAAA;AAEL;AAGA,MAAM,YAAY,CAAC,WAAuB;AACxC,QAAM,WAAkB,CAAA;AACxB,SAAO,OAAO,QAAQ,CAAC,SAAS;AAC9B,aAAS,KAAK,YAAY,MAAM,MAAM,CAAC;AAAA,EACzC,CAAC;AACD,QAAM,cAAc;AAAA,IAClB,SAAS;AAAA,IACT,MAAM;AAAA,IACN,YAAY;AAAA,MACV,OAAO;AAAA,IAAA;AAAA,IAET,UAAU,OAAO,QAAQ,IAAI,CAAC,SAAS;AACrC,aAAO,YAAY,MAAM,MAAM;AAAA,IACjC,CAAC;AAAA,EAAA;AAEH,WAAS,KAAK,WAAW;AACzB,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,YAAY;AAAA,MACV,eAAe;AAAA,MACf,GAAG,OAAO;AAAA,IAAA;AAAA,IAEZ;AAAA,EAAA;AAEJ;AAEA,MAAM,aAAa,CAAC,QAAqB,SAA2B;AAClE,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,YAAY,OAAO;AAAA,IACnB,aAAa;AAAA,EAAA;AAEjB;AAEA,MAAM,cAAc,CAAC,QAAsB,SAA2B;AACpE,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,YAAY,OAAO;AAAA,IACnB,aAAa;AAAA,EAAA;AAEjB;AAEA,MAAM,YAAY,CAAC,QAA8B,SAA2B;AAC1E,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,YAAY,OAAO;AAAA,IACnB,aAAa;AAAA,EAAA;AAEjB;AAEA,MAAM,cAAc,CAAC,QAAsB,SAA2B;AA/HtE;AAgIE,QAAM,eAAoB;AAAA,IACxB,SAAS;AAAA,IACT,MAAM;AAAA,IACN,YAAY;AAAA,MACV,GAAG,OAAO;AAAA,MACV,QAAQ,OAAO;AAAA,MACf,SAAS,OAAO;AAAA,IAAA;AAAA;AAAA,IAGlB,aAAa;AAAA,IACb,WAAU,kBAAO,aAAP,mBAAiB,QAAjB,4BAAuB,CAAC,SAAS;AACzC,aAAO,YAAY,MAAM,IAAI;AAAA,IAC/B;AAAA,EAAC;AAEH,MAAI,SAAS,SAAS;AACpB,iBAAa,QAAQ,OAAO;AAAA,EAC9B;AACA,SAAO;AACT;AAEA,MAAM,YAAY,CAAC,WAAuB;AApJ1C;AAqJE,QAAM,SAAc;AAAA,IAClB,SAAS;AAAA,IACT,MAAM;AAAA,IACN,YAAY,OAAO;AAAA,IACnB,UAAU,OAAO,SAAS,IAAI,CAAC,SAAS;AACtC,aAAO,YAAY,IAAI;AAAA,IACzB,CAAC;AAAA,EAAA;AAIH,OAAI,YAAO,UAAP,mBAAc,QAAQ;AACxB,WAAO,QAAQ;AAAA,MACb,QAAQ,OAAO,MAAM,OAAO,IAAI,CAAC,SAAS;AACxC,eAAO,YAAY,IAAI;AAAA,MACzB,CAAC;AAAA,IAAA;AAAA,EAEL;AAEA,SAAO;AACT;AAEA,MAAM,mBAAmB,CAAC,QAA2B,eAAiC;AA1KtF;AA2KE,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,YAAY,OAAO;AAAA,IACnB,aAAa;AAAA,IACb,WAAU,YAAO,aAAP,mBAAiB,IAAI,CAAC,SAAS;AACvC,aAAO,YAAY,MAAM,UAAU;AAAA,IACrC;AAAA,EAAC;AAEL;AAEA,MAAM,aAAa,CAAC,WAAwB;AAE1C,MAAI,CAAC,OAAO,WAAW,YAAY;AACjC,WAAO,WAAW,aAAa;AAAA,MAC7B,MAAM,CAAA;AAAA,MACN,GAAG,OAAO;AAAA,IAAA;AAAA,EAEd;AACA,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,YAAY,OAAO;AAAA,IACnB,UAAU,OAAO,SAAS,IAAI,CAAC,SAAS;AACtC,aAAO,YAAY,MAAM,OAAO;AAAA,IAClC,CAAC;AAAA,EAAA;AAEL;AAGA,MAAM,YAAY,CAAC,QAAoB,eAAiC;AACtE,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,YAAY,OAAO;AAAA,IACnB,aAAa;AAAA,EAAA;AAEjB;AAEA,MAAM,YAAY,CAAC,QAAoB,eAAiC;AACtE,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,YAAY,OAAO;AAAA,IACnB,aAAa;AAAA,EAAA;AAEjB;AACA,MAAM,iBAAiB,CAAC,QAAqC,SAAiB;AAC5E,SAAO,OAAO,IAAI,CAAC,SAAS;AAC1B,WAAO;AAAA,MACL,GAAG;AAAA,MACH,YAAY;AAAA,QACV,GAAG,KAAK;AAAA,QACR,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,EAEJ,CAAC;AACH;AACA,MAAM,gBAAgB,CAAC,QAAyB,eAAiC;AAC/E,QAAM,OAAO,OAAO,WAAW;AAC/B,QAAM,WAAW,eAAe,OAAO,UAAU,IAAI;AACrD,QAAM,cAAc,CAAC,UAAkD;AACrE,WAAO,+BAAO,IAAI,CAAC,SAAS;AAC1B,UAAI,aAAa,QAAQ,KAAK,SAAS;AACrC,eAAO;AAAA,UACL,SAAS,IAAI,OAAO,KAAK,OAAO;AAAA,UAChC,SAAS,KAAK;AAAA,UACd,SAAS,KAAK;AAAA,QAAA;AAAA,MAElB;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,YAAY;AAAA,MACV,GAAG,OAAO;AAAA,MACV,OAAO,YAAY,OAAO,WAAW,KAAK;AAAA,IAAA;AAAA,IAE5C,aAAa;AAAA,IACb,UAAU;AAAA,MACR,YAAY,SAAS,CAAC,GAAkB,UAAU;AAAA,IAAA;AAAA,EACpD;AAEJ;AAEA,MAAM,WAAW,CAAC,QAAmB,eAAiC;AACpE,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,YAAY,OAAO;AAAA,IACnB,UAAU,OAAO,SAAS,IAAI,CAAC,SAAS;AACtC,aAAO,YAAY,MAAM,UAAU;AAAA,IACrC,CAAC;AAAA,EAAA;AAEL;AAEA,MAAM,WAAW,CAAC,QAAmB,eAAiC;AACpE,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,YAAY,OAAO;AAAA,IACnB,aAAa;AAAA,IACb,UAAU,OAAO,SAAS,IAAI,CAAC,SAAS;AACtC,aAAO,YAAY,MAAuB,UAAU;AAAA,IACtD,CAAC;AAAA,EAAA;AAEL;AAEA,MAAM,kBAAkB,CAAC,QAA0B,eAAiC;AAzRpF;AA0RE,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,YAAY,OAAO;AAAA,IACnB,aAAa;AAAA,IACb,WAAU,YAAO,WAAW,YAAlB,mBAA2B,IAAI,CAAC,SAAS;AACjD,aAAO,YAAY;AAAA,QACjB,MAAM;AAAA,QACN,YAAY;AAAA,MAAA,GACI,UAAU;AAAA,IAC9B;AAAA,EAAC;AAEL;AAEA,MAAM,aAAa,CAAC,QAAqB,eAAiC;AACxE,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,YAAY,OAAO;AAAA,IACnB,aAAa;AAAA,EAAA;AAEjB;AAEA,MAAM,WAAW,CAAC,QAAmB,eAAiC;AACpE,QAAM,eAAe;AAAA,IACnB,SAAS;AAAA,IACT,MAAM;AAAA,IACN,YAAY,OAAO;AAAA,IACnB,aAAa;AAAA,IACb,UAAU,OAAO,SAAS,IAAI,CAAC,SAAS;AACtC,aAAO,YAAY,MAAoB,UAAU;AAAA,IACnD,CAAC;AAAA,EAAA;AAEH,MAAI,eAAe,SAAS;AAC1B,iBAAa,QAAQ,OAAO;AAAA,EAC9B;AACA,SAAO;AACT;AAGA,MAAM,eAAe,CAAC,QAAuB,eAAiC;AAC5E,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,YAAY,OAAO;AAAA,IACnB,aAAa;AAAA,EAAA;AAEjB;AAGA,MAAM,cAAc,CAAC,QAAsB,eAAiC;AAC1E,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,YAAY,OAAO;AAAA,IACnB,aAAa;AAAA,EAAA;AAEjB;AAEO,MAAM,iBAAiB,CAAC,WAA4B;AACzD,SAAO,YAAY,MAAM;AAC3B;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@core-pilot/client-vue",
3
- "version": "0.0.12",
3
+ "version": "0.0.13",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/es/index.js",
6
6
  "browser": "dist/umd/index.js",