{"version":3,"file":"DZ2uRys7.js","sources":["../../../../views/tool/components/codon-select/index.ts","../../../../views/tool/components/codon-select/src/composable.ts","../../../../views/tool/components/codon-select/index.vue","../../../../views/tool/components/mutations-inputs/components/preview/src/dispose.ts","../../../../views/tool/components/mutations-inputs/components/preview/src/composable.ts","../../../../views/tool/components/mutations-inputs/components/preview/index.vue","../../../../views/tool/components/mutations-inputs/src/types.ts","../../../../views/tool/components/mutations-inputs/src/utils.ts","../../../../views/tool/components/mutations-inputs/src/composable.ts","../../../../views/tool/components/mutations-inputs/index.vue"],"sourcesContent":["import type { ExtractPropTypes, PropType } from \"vue\";\nimport type { UiTypes } from \"various-ui\";\n\nexport const UiSelectPropsOption = {\n placeholder: { type: String }, //* 提示文本\n modelValue: { type: String, required: true }, //* 选中项绑定值\n disabled: { type: Boolean, default: false }, //* 选择器是否禁用\n readonly: { type: Boolean, default: false }, //* 选择器是否只读\n contrast: { type: String, default: '' },\n matchs: { type: Array as PropType, default: [] },\n zIndex: { type: Number, default: 66 },\n width: { type: [String, Number] as PropType, default: '100%' },\n size: { type: String as PropType, default: \"default\" },\n} as const;\n\nexport type UiSelectProps = ExtractPropTypes;\n\nexport const UiSelectEmits = {\n \"update:modelValue\": (_ev: any) => true,\n \"change\": (_ev?: Event) => true,\n};\n","//* Vue\nimport type { SetupContext } from \"vue\";\n//* 组件属性\nimport type { UiSelectProps, UiSelectEmits } from \"../index\";\n//* 公共函数\nimport { node, utility, dispose, animations } from \"various-ui\";\n\nexport const useComposable = (define: UiSelectProps, emits: SetupContext[\"emit\"]) => {\n //* 静态变量\n const vars: { observer?: ResizeObserver | undefined } = {};\n //* 响应式变量\n const refs = {\n visible: ref(false),\n };\n\n const nodes = {\n body: ref(),\n container: ref(),\n };\n\n //* 函数列表\n const methods = {\n //* 候选框隐藏事件\n hidden: (ev?: Event) => {\n if (!nodes.container.value) return;\n if (ev?.target && node.includes(ev.target as HTMLElement, nodes.container.value)) return;\n else {\n //* 状态更新\n refs.visible.value = false;\n //* 注销观察者\n vars.observer?.disconnect();\n }\n },\n\n //* 候选框显示事件\n show: () => {\n //* 判断选择框是否处于异常状态\n if (define.readonly || define.disabled) return;\n //* 判断候选项是否已被激活\n if (refs.visible.value) methods.hidden();\n else {\n refs.visible.value = true;\n nextTick(() => {\n if (!nodes.container.value || !nodes.body.value) return;\n else {\n //* 隐藏事件\n addEventListener(\"click\", methods.hidden, { capture: true, once: true });\n //* 将内容添加到视图容器中\n node.append(document.body, nodes.body.value);\n //* 注册观察者\n vars.observer?.disconnect();\n vars.observer = new ResizeObserver(() => {\n if (!nodes.container.value || !nodes.body.value) return;\n else {\n //* 数据初始化\n const data = { container: nodes.container.value, view: nodes.body.value };\n const width = nodes.container.value?.offsetWidth || 0;\n dispose.boundary.relativeContainerBody(data, {\n direction: \"bottom\",\n offset: 8,\n width: { min: width },\n align: \"start\",\n });\n }\n });\n\n vars.observer.observe(document.documentElement);\n }\n });\n }\n },\n };\n\n //* 计算属性\n const computeds = {\n //* 组件值\n value: computed(() => {\n for (const i in Contrast.Protein) {\n if (Contrast.Protein[i]?.codons.includes(define.modelValue)) {\n return `${i}(${Contrast.Protein[i]?.shortnanme}): ` + define.modelValue;\n }\n }\n return \"\";\n }),\n\n //* 组件类\n className: computed(() => {\n //* 初始化数据\n const className: string[] = [];\n //* 判断候选项是否处于展示状态\n if (refs.visible.value) className.push(\"ui-form-selector\");\n //* 判断是否需要添加size类名\n if (define.size != \"default\") className.push(`ui-${define.size}`);\n //* 判断是否是禁用或只读状态\n if (define.disabled) className.push(\"ui-disabled-status\");\n else if (define.readonly) {\n className.push(\"ui-readonly-status\");\n }\n\n return className.join(\" \");\n }),\n\n //* 匹配对照表数据\n candidates: computed(() => {\n if (!define.matchs.length) return Contrast.Protein;\n else {\n const result: { [name: string]: { name: string; codons: string[]; fullname: string; shortnanme: string } } = {};\n for (const i in Contrast.Protein) {\n if (Contrast.Protein[i]?.codons.find((codon) => define.matchs.includes(codon))) {\n result[i] = Contrast.Protein[i];\n }\n }\n\n return result;\n }\n }),\n };\n\n //* 属性\n const binds = reactive({\n //* 主体\n main: computed(() => {\n return {\n value: computeds.value.value,\n disabled: define.disabled,\n placeholder: define.placeholder,\n autocomplete: \"off\",\n };\n }),\n\n //* 容器\n container: computed(() => {\n return {\n class: computeds.className.value,\n style: {\n width: utility.isNumber(define.width) ? define.width + \"px\" : define.width,\n },\n };\n }),\n });\n\n //* 响应事件\n const ons = {\n //* 候选项容器事件\n animation: animations.selector(true),\n //* 候选项事件\n candidate: (codon: string) => {\n return {\n //* 候选项选择事件\n mousedown: (ev: Event) => {\n emits(\"update:modelValue\", codon);\n emits(\"change\", ev);\n if (refs.visible.value) {\n methods.hidden();\n }\n },\n };\n },\n };\n\n return { ons, vars, refs, nodes, binds, methods, computeds };\n};\n","\n\n\n","//* 绘图库\nimport Konva from \"konva\";\n//* 多语言\nimport type { Composer } from \"vue-i18n\";\n//* 组件库\nimport { utility, type UiTooltipFunction } from \"various-ui\";\n//* 组件属性\nimport type { ModuleTranscript, ModuleFormData } from \"../../../src/types\";\n\nexport interface CanvasRadio extends CanvasData {\n omit?: boolean;\n width: number;\n radio: number;\n offset: number;\n}\n\nexport interface CanvasData {\n size: number;\n type: \"exon\" | \"intron\";\n range: { end: number; start: number };\n codons?: { range: { end: number; start: number }; size: number };\n cds?: {\n size: number;\n range: { end: number; start: number };\n ranges: { end: number; size: number; start: number }[];\n };\n}\n\nexport type CanvasView = {\n range: { end: number; start: number };\n codons?: { range: { end: number; start: number }; size: number };\n ref?: string;\n alt?: string;\n cds?: {\n size: number;\n range: { end: number; start: number };\n ranges: { end: number; size: number; start: number }[];\n };\n};\n\nexport class CanvasDispose {\n // * 实例化数据\n stage?: Konva.Stage;\n radios: CanvasRadio[] = [];\n origin: ModuleFormData;\n i18n: Composer;\n data: CanvasData[] = [];\n size: number = 0;\n //* 实例化函数\n constructor(data: ModuleFormData, option: { i18n: Composer; transcript: ModuleTranscript }) {\n //* 数据初始化\n this.i18n = option.i18n;\n this.origin = data;\n console.log(\"原始数据:\", option.transcript);\n this.dispose_areas(option.transcript);\n console.log(\"区域数据:\", this.data);\n this.dispose_ratio();\n console.log(\"绘图比例:\", this.radios);\n }\n\n //* 静态化数据\n static tips: { data: Ref; view?: InstanceType } = { data: ref() };\n\n //* 私有化数组\n private nodes: { container?: Konva.Group; slider?: Konva.Group } = {};\n\n //* 绘图区域计算\n private dispose_areas(response: ModuleTranscript) {\n //* 临时数据\n const config = { cds: 0, site: 0, codon: 0, codon_diff: 0 };\n\n //* 遍历生成绘图用的转录本数据\n response.exons.forEach((exon) => {\n //* 数据初始化\n const end = exon[1];\n const start = exon[0];\n const result: CanvasData = { range: { start, end }, size: end - start + 1, type: \"exon\" };\n //* 检测前端是否存在Intron\n if (config.site + 1 < start) {\n //* 数据更新\n this.data.push({ range: { start: config.site + 1, end: start - 1 }, size: start - config.site - 1, type: \"intron\" });\n config.site = start - 1;\n }\n\n //* 获取exon与cds间的重叠区域\n const areas: { start: number; end: number }[] = [];\n response.cds.forEach((c) => {\n //* 检查两个区间是否有重叠\n const range = { end: Math.min(end, c[1]), start: Math.max(start, c[0]) };\n if (range.end >= range.start) {\n areas.push(range);\n }\n });\n\n //* 获取exon的cds范围和codon范围\n if (areas.length) {\n //* 获取cds范围\n const start = config.cds + 1;\n const ranges: { end: number; size: number; start: number }[] = [];\n const resource = { site: config.cds, size: 0 };\n areas.forEach((area) => {\n //* 数据初始化\n const size = area.end - area.start + 1;\n //* 数据更新\n ranges.push(Object.assign(area, { size }));\n resource.size += size;\n });\n\n //* cds数据更新\n result.cds = {\n size: resource.size,\n range: { start: start, end: start + resource.size - 1 },\n ranges: ranges,\n };\n\n //* codon数据更新\n const number = Math.floor((resource.size + config.codon_diff) / 3);\n result.codons = {\n size: number,\n range: { start: config.codon + 1, end: config.codon + number },\n };\n\n //* 配置修改\n config.cds = result.cds.range.end;\n config.codon = result.codons.range.end;\n config.codon_diff = (resource.size + config.codon_diff) % 3;\n }\n\n //* 数据添加\n this.data.push(result);\n config.site = result.range.end;\n });\n\n //* 末端特殊处理\n if (config.site < this.origin.sequence.length) {\n this.data.push({\n range: { start: config.site + 1, end: this.origin.sequence.length },\n size: this.origin.sequence.length - config.site,\n type: \"intron\",\n });\n }\n }\n\n //* 绘图比例计算\n private dispose_ratio() {\n //* 数据初始化\n this.size = 0;\n this.radios = [];\n //* 临时数据\n const config = { offset: 0, size: 0 };\n //* 遍历预处理绘图数据\n this.data.forEach((value) => {\n switch (value.type) {\n case \"exon\": {\n config.size = value.size;\n if (config.size < 40) config.size = 40;\n else if (config.size > 360) {\n config.size = 360;\n }\n\n //* 数据更新\n this.size += config.size;\n this.radios.push(Object.assign(value, { width: config.size, radio: config.size / value.size, offset: config.offset }));\n config.offset += config.size;\n break;\n }\n\n case \"intron\": {\n if (value.size <= 50) {\n //* <=50bp固定25px\n this.size += 25;\n this.radios.push(Object.assign(value, { width: 25, radio: 25 / value.size, offset: config.offset }));\n config.offset += 25;\n break;\n } else if (value.size <= 100) {\n //* <=50bp 2:1比例绘制\n config.size = value.size * 0.5;\n this.size += config.size;\n this.radios.push(Object.assign(value, { width: config.size, radio: 0.5, offset: config.offset }));\n config.offset += config.size;\n break;\n } else {\n //* 左端横线固定25px, 2:1比例绘制\n this.radios.push({\n type: \"intron\",\n size: 50,\n width: 25,\n radio: 0.5,\n range: { end: value.range.start + 49, start: value.range.start },\n offset: config.offset,\n });\n\n //* 数据更新\n this.size += 25;\n config.offset += 25;\n\n //* 中间省略部分按比例绘制\n config.size = value.size - 100;\n this.radios.push({\n type: \"intron\",\n omit: true,\n size: config.size,\n width: 30,\n radio: 30 / config.size,\n range: { end: value.range.end - 50, start: value.range.start + 50 },\n offset: config.offset,\n });\n\n //* 数据更新\n this.size += 30;\n config.offset += 30;\n\n //* 右端横线固定25px, 2:1比例绘制\n this.radios.push({\n type: \"intron\",\n size: 50,\n width: 25,\n radio: 0.5,\n range: { end: value.range.end, start: value.range.end - 49 },\n offset: config.offset,\n });\n\n //* 数据更新\n this.size += 25;\n config.offset += 25;\n break;\n }\n }\n }\n });\n }\n\n //* 绘图坐标转换\n private dispose_site(site: number) {\n const data = this.radios.find((v) => v.range.start <= site && v.range.end >= site);\n if (!data) return;\n else {\n return Object.assign(utility.cloneDeep(data), { site: data.offset + (site - data.range.start) * data.radio });\n }\n }\n\n //* 获取预测位点文案\n private dispose_context() {\n const ref = this.origin.ref.length > 6 ? `${this.origin.ref.slice(0, 3)}···${this.origin.ref.slice(-3)}` : this.origin.ref;\n const alt = this.origin.alt.length > 6 ? `${this.origin.alt.slice(0, 3)}···${this.origin.alt.slice(-3)}` : this.origin.alt;\n if (!alt) return `${this.i18n.t(\"Mutant\")}: ${ref}del${ref.length}bp`;\n else {\n return `${this.i18n.t(\"Mutant\")}: ${ref} > ${alt} (${this.origin.ref.length}bp > ${this.origin.alt.length}bp)`;\n }\n }\n\n //* 获取预测位点范围内的Exon区域\n private dispose_site_area() {\n const result: { end: number; start: number; radio: number }[] = [];\n if (!this.origin.data.range) return result;\n else {\n //* 临时数据\n const config = { end: this.origin.data.range.end, start: this.origin.data.range.start };\n this.radios.forEach((v) => {\n if (v.type == \"intron\") return;\n else {\n const end = Math.min(config.end, v.range.end);\n const start = Math.max(config.start, v.range.start);\n if (end >= start) {\n result.push({ radio: v.radio, start, end });\n }\n }\n });\n }\n\n return result;\n }\n\n //* 销毁\n destroy() {\n this.stage?.destroy();\n }\n\n //* 渲染\n render(node: HTMLDivElement, tips?: InstanceType) {\n //* 数据初始化\n CanvasDispose.tips.view = tips;\n //* 舞台初始化\n this.stage = new Konva.Stage({ container: node, width: node.clientWidth, height: 154 });\n //* 场景初始化\n const canvas = new Konva.Layer();\n\n //* 绘制主体\n canvas.add(this.render_body());\n //* 绘制滚动条\n if (this.size > node.clientWidth) {\n canvas.add(this.render_scroll(node));\n }\n\n //* 绘制预测位点\n this.render_site(node);\n\n //* 绘制结束\n this.stage.add(canvas);\n }\n\n //* 主体骨架渲染\n render_body() {\n //* 绘图容器初始化\n this.nodes.container = new Konva.Group();\n //* 临时数据\n const config = { index: 1 };\n //* 遍历数据绘制\n this.radios.forEach((value) => {\n if (!this.nodes.container) return;\n switch (value.type) {\n case \"exon\": {\n return this.nodes.container.add(this.render_exon(value, config.index++));\n }\n\n case \"intron\": {\n if (value.omit) return this.nodes.container.add(this.render_intron_omit(value));\n else {\n return this.nodes.container.add(this.render_intron(value));\n }\n }\n }\n });\n\n return this.nodes.container;\n }\n\n //* 绘制外显子\n render_exon(value: CanvasRadio, index: number) {\n //* 绘图容器初始化\n const canvas = new Konva.Group();\n //* 文案初始化\n const context = new Konva.Text({ text: \"Exon\" + index, fill: \"#384053\", fontSize: 14, fontFamily: \"sans-serif\" });\n // * 初始化裁剪容器\n const clip = new Konva.Group({\n x: value.offset,\n y: 52,\n //* 裁剪函数\n clipFunc(ctx) {\n //* 设置圆角矩形的参数\n const x = 0.5; //* 矩形左上角的x坐标\n const y = 0.5; //* 矩形左上角的y坐标\n const width = value.width - 1; //* 矩形的宽度\n const height = 23; //* 矩形的高度\n const radius = 2; //* 圆角的半径\n\n //* 开始新的路径\n ctx.beginPath();\n //* 绘制矩形的左上角到右上角,并添加圆角\n ctx.moveTo(x + radius, y);\n ctx.lineTo(x + width - radius, y);\n //* 使用arcTo绘制圆角\n ctx.arcTo(x + width, y, x + width, y + radius, radius);\n //* 绘制矩形的右上角到右下角,并添加圆角\n ctx.lineTo(x + width, y + height - radius);\n ctx.arcTo(x + width, y + height, x + width - radius, y + height, radius);\n //* 绘制矩形的右下角到左下角,并添加圆角\n ctx.lineTo(x + radius, y + height);\n ctx.arcTo(x, y + height, x, y + height - radius, radius);\n //* 绘制矩形的左下角到左上角,完成路径\n ctx.lineTo(x, y + radius);\n ctx.arcTo(x, y, x + radius, y, radius);\n },\n });\n\n //* 绘制Exon区域\n clip.add(new Konva.Rect({ fill: \"#fff\", width: value.width, height: 24 }));\n value.cds?.ranges.forEach((cds) => {\n clip.add(\n new Konva.Rect({\n x: (cds.start - value.range.start) * value.radio,\n fill: \"#00C7C8\",\n width: cds.size * value.radio,\n height: 24,\n })\n );\n });\n\n //* 绘制裁剪后的Exon\n canvas.add(clip);\n // * 绘制Exon边框\n canvas.add(\n new Konva.Rect({\n x: value.offset + 0.5,\n y: 52.5,\n width: value.width - 1,\n height: 23,\n stroke: \"rgba(104, 104, 104, 0.50)\",\n strokeWidth: 1,\n cornerRadius: 2,\n strokeScaleEnabled: false,\n })\n );\n\n //* 绘制底部文本\n if (context.getWidth() + 16 <= value.width) {\n canvas.add(context.x(value.offset).y(76).width(value.width).lineHeight(2.14).align(\"center\"));\n }\n\n //* 悬浮激活窗口\n canvas.on(\"mouseleave\", () => CanvasDispose.tips.view?.hidden());\n canvas.on(\"mousemove\", (ev: Konva.KonvaEventObject) =>\n CanvasDispose.tips.view?.show(\"start\", { pageX: ev.evt.pageX, pageY: ev.evt.pageY })\n );\n canvas.on(\"mouseenter\", (ev: Konva.KonvaEventObject) => {\n CanvasDispose.tips.data.value = value;\n CanvasDispose.tips.view?.show(\"start\", { pageX: ev.evt.pageX, pageY: ev.evt.pageY, initialization: true });\n });\n\n return canvas;\n }\n\n //* 绘制内含子\n render_intron(value: CanvasRadio) {\n return new Konva.Rect({ x: value.offset, y: 63, width: value.width, height: 2, fill: \"#686868\" });\n }\n\n //* 绘制内含子(省略部分)\n render_intron_omit(value: CanvasRadio) {\n //* 绘图容器初始化\n const canvas = new Konva.Group();\n\n canvas.add(new Konva.Rect({ x: value.offset + 6, y: 63, width: 2, height: 2, fill: \"#686868\", rotation: 2 }));\n canvas.add(new Konva.Rect({ x: value.offset + 14, y: 63, width: 2, height: 2, fill: \"#686868\", rotation: 2 }));\n canvas.add(new Konva.Rect({ x: value.offset + 22, y: 63, width: 2, height: 2, fill: \"#686868\", rotation: 2 }));\n\n return canvas;\n }\n\n //* 滚动条渲染\n render_scroll(node: HTMLDivElement) {\n //* 绘图容器初始化\n const canvas = new Konva.Group();\n //* 滑块尺寸\n const size = (node.clientWidth * node.clientWidth) / this.size;\n //* 滑块容器初始化\n this.nodes.slider = new Konva.Group({ x: 0, y: 138 });\n //* 绘制滑块内区域\n this.nodes.slider.add(new Konva.Rect({ fill: \"#c7c7c7\", width: size, height: 14 }));\n this.nodes.slider.add(new Konva.Rect({ x: 1, y: 1, fill: \"#fff\", width: size - 2, height: 14 }));\n\n //* 悬浮鼠标样式修改\n this.nodes.slider.on(\"mouseenter\", () => (document.body.style.cursor = \"pointer\"));\n this.nodes.slider.on(\"mouseleave\", () => (document.body.style.cursor = \"auto\"));\n //* 滑块拖动反馈\n this.nodes.slider.on(\"mousedown\", (ev: Konva.KonvaEventObject) => {\n //* 临时数据\n const config = { site: ev.evt.clientX, offset: -(this.nodes.slider?.offsetX() || 0), result: 0 };\n //* 鼠标移动反馈事件, 边界检测\n document.onmousemove = (ev) => {\n //* 边界检测\n config.result = config.offset + (ev.clientX - config.site);\n if (config.result <= 0) config.result = 0;\n else if (config.result + size >= node.clientWidth) {\n config.result = node.clientWidth - size;\n }\n\n //* 触发移动反馈事件\n this.nodes.slider?.offsetX(-config.result);\n this.nodes.container?.offsetX((config.result * this.size) / node.clientWidth);\n };\n\n //* 鼠标松开反馈事件\n document.onmouseup = () => {\n //* 销毁事件\n document.onmouseup = null;\n document.onmousemove = null;\n //* 还原鼠标样式\n if (ev.evt.target) {\n document.body.style.cursor = \"auto\";\n }\n };\n });\n\n //* 绘制背景\n canvas.add(new Konva.Rect({ x: 0, y: 138, fill: \"#c7c7c7\", width: node.clientWidth, height: 16 }));\n //* 绘制滑块\n canvas.add(this.nodes.slider);\n\n return canvas;\n }\n\n //* 预测位点渲染\n render_site(node: HTMLDivElement) {\n //* 绘图容器初始化\n const canvas = new Konva.Group();\n if (!this.origin.data.range) return;\n else {\n //* 文案初始化\n const context = new Konva.Text({ text: this.dispose_context(), fill: \"#fff\", fontSize: 14, fontFamily: \"sans-serif\" });\n //* 临时数据\n const config = { site: -1, size: context.getTextWidth() + 16, offset: -1 };\n //* 绘制柱子、检测位点是否合法、文案位置的初始化\n if (this.origin.data.range.start == this.origin.data.range.end) {\n const result = this.dispose_site(this.origin.data.range.start);\n if (result) {\n //* 偏移处理\n config.site = result.site;\n config.offset = result.site - (config.size - 1) / 2;\n //* 绘制柱子\n canvas.add(new Konva.Rect({ x: result.site, y: 25, fill: \"#D10000\", width: 1, height: result.type == \"intron\" ? 38 : 51 }));\n }\n } else {\n const end = this.dispose_site(this.origin.data.range.end);\n const start = this.dispose_site(this.origin.data.range.start);\n if (end && start) {\n //* 尺寸更新、偏移处理\n config.size = Math.max(config.size, end.site - start.site + 17);\n config.site = start.site + (end.site - start.site) / 2;\n config.offset = start.site - (config.size - (end.site - start.site + 1)) / 2;\n //* 绘制柱子\n canvas.add(new Konva.Rect({ x: start.site, y: 25, fill: \"#D10000\", width: 1, height: start.type == \"intron\" ? 38 : 51 }));\n canvas.add(new Konva.Rect({ x: end.site, y: 25, fill: \"#D10000\", width: 1, height: end.type == \"intron\" ? 38 : 51 }));\n //* 绘制重叠范围\n const overlap = this.dispose_site_area();\n overlap.forEach((range) => {\n const end = this.dispose_site(range.end);\n const start = this.dispose_site(range.start);\n if (end && start) {\n canvas.add(\n new Konva.Rect({\n x: start.site + 0.5,\n y: 52,\n fill: \"#ff9c00\",\n width: (range.end - range.start) * range.radio,\n height: 24,\n })\n );\n }\n });\n }\n }\n\n //* 边界处理\n if (config.offset < 0) config.offset = 0;\n else if (config.offset + config.size > this.size) {\n config.offset = this.size - config.size;\n }\n\n //* 绘制文案背景\n canvas.add(new Konva.Rect({ x: config.offset, fill: \"#D10000\", width: config.size, height: 28, cornerRadius: 2 }));\n canvas.add(context.x(config.offset).width(config.size).lineHeight(2.14).align(\"center\"));\n //* 预测位点超过首屏的一半,需定位调整\n if (config.site > node.clientWidth / 2) {\n const offset = ((config.site - node.clientWidth / 2) * node.clientWidth) / this.size;\n this.nodes.slider?.offsetX(-offset);\n this.nodes.container?.offsetX((offset * this.size) / node.clientWidth);\n }\n }\n\n //* 悬浮激活窗口\n canvas.on(\"mouseleave\", () => CanvasDispose.tips.view?.hidden());\n canvas.on(\"mousemove\", (ev: Konva.KonvaEventObject) =>\n CanvasDispose.tips.view?.show(\"start\", { pageX: ev.evt.pageX, pageY: ev.evt.pageY })\n );\n canvas.on(\"mouseenter\", (ev: Konva.KonvaEventObject) => {\n CanvasDispose.tips.view?.show(\"start\", { pageX: ev.evt.pageX, pageY: ev.evt.pageY, initialization: true });\n if (this.origin.data.range) {\n CanvasDispose.tips.data.value = { range: this.origin.data.range, ref: this.origin.ref, alt: this.origin.alt };\n }\n });\n\n //* 加入场景\n this.nodes.container?.add(canvas);\n }\n}\n","//* 组件库\nimport type { UiTooltipFunction } from \"various-ui\";\n//* 组件属性\nimport type { ModuleFormData } from \"../../../src/types\";\nimport { CanvasDispose } from \"./dispose\";\n\nexport const useComposable = () => {\n //* 插件\n const i18n = useI18n();\n //* 静态数据\n const vars: { example?: CanvasDispose } = {};\n //* 响应式属性\n const refs = {\n data: ref(),\n view: CanvasDispose.tips.data,\n };\n\n //* 节点\n const nodes = {\n tips: shallowRef>(),\n canvas: shallowRef(),\n };\n\n //* 函数列表\n const methods = {\n render: (data: ModuleFormData, option?: { update: boolean }) => {\n //* 数据缓存\n refs.data.value = data;\n //* 数据获取\n const transcript = refs.data.value?.transcripts?.find((v) => v.value == refs.data.value?.transcript);\n nextTick(() => {\n if (transcript && nodes.canvas.value?.clientWidth) {\n //* 数据初始化\n const is_update_gene_info = data.id == vars.example?.origin.id || data.transcript == vars.example?.origin.transcript;\n\n /** @name 复合检验\n * * 1. 实例不存在时直接绘制\n * * 2. 实例需绘制预测位点时重新绘制\n * * 3. 实例的基因 or 转录本发生变化时重新绘制\n */\n if (!vars.example || option?.update || data.data.range || (!data.data.range && is_update_gene_info)) {\n vars.example = new CanvasDispose(data, { i18n, transcript });\n if (nodes.canvas.value) {\n vars.example?.render(nodes.canvas.value, nodes.tips.value);\n }\n }\n }\n });\n },\n };\n\n return { refs, nodes, methods };\n};\n","\n\n\n","//* 组件库\nimport type { UiTypes } from \"various-ui\";\n\nexport interface ModuleCodonContrast {\n end: number;\n start: number;\n codon: string;\n readonly: boolean;\n}\n\nexport interface ModuleTranscript extends UiTypes.candidate {\n cds: number[][];\n name: string;\n label: string;\n value: string;\n exons: number[][];\n}\n\nexport interface ModuleTranscriptContrast {\n site: number;\n char: string;\n}\n\nexport type ModuleFormData = ModuleFormVariantData | ModuleFormProteinData | ModuleFormTranscriptData;\n\nexport interface ModuleFormBaseData {\n key: number;\n id: string;\n ref: string;\n alt: string;\n name: string;\n species: string;\n visible: boolean;\n sequence: string;\n transcript: string;\n transcripts: ModuleTranscript[];\n}\n\nexport interface ModuleFormVariantData extends ModuleFormBaseData {\n mode: \"Paste\" | \"Variant\";\n data: {\n mode?: string;\n range?: { start: number; end: number };\n codons?: string[];\n keyword: string;\n };\n}\n\nexport interface ModuleFormProteinData extends ModuleFormBaseData {\n mode: \"Protein\";\n data: {\n site: number | string;\n range?: { start: number; end: number };\n codons?: string[];\n contrast: { [name: number | string]: ModuleCodonContrast | undefined };\n };\n}\n\nexport interface ModuleFormTranscriptData extends ModuleFormBaseData {\n mode: \"Transcript\";\n data: {\n coordinate: { \"start\"?: number; \"end\"?: number; \"end-steps\"?: number; \"start-steps\"?: number };\n contrast: { [name: number | string]: ModuleTranscriptContrast | undefined };\n range?: { start: number; end: number };\n };\n}\n\nexport const ModulePropsOption = {\n mode: { type: String as PropType<\"Pathogenicity\" | \"Rna\">, require: true },\n species: { type: Array as PropType<(\"Human\" | \"Mouse\" | \"Rat\")[]> },\n} as const;\n\nexport type ModuleProps = ExtractPropTypes;\n","//* Vue\nimport type { Reactive } from \"vue\";\n//* 组件库\nimport { utility, type UiTypes } from \"various-ui\";\n//* 组件属性\nimport type { ModuleFormData, ModuleTranscript, ModuleCodonContrast, ModuleTranscriptContrast } from \"./types\";\n\nlet key = 0;\nexport const utils = {\n //* 数据初始化\n data: (response?: ModuleFormData, option?: { clear?: boolean }): ModuleFormData => {\n //* 数据初始化\n const data = {\n key: key++,\n id: \"\",\n ref: \"\",\n alt: \"\",\n name: \"\",\n species: \"\",\n visible: false,\n sequence: \"\",\n transcript: \"\",\n transcripts: [],\n };\n\n //* 是否使用数据缓存\n if (!option?.clear) {\n data.id = response?.id || \"\";\n data.name = response?.name || \"\";\n data.species = response?.species || \"\";\n data.visible = response?.visible || false;\n data.sequence = response?.sequence || \"\";\n data.transcript = response?.transcript || \"\";\n data.transcripts = response?.transcripts || [];\n }\n\n switch (response?.mode) {\n case \"Transcript\":\n return Object.assign(data, { mode: response.mode || \"Transcript\", data: { coordinate: {}, contrast: {} } });\n case \"Protein\":\n return Object.assign(data, { mode: response.mode || \"Protein\", data: { site: \"\", contrast: {} } });\n default: {\n return Object.assign(data, {\n mode: response?.mode || \"Paste\",\n data: { keyword: \"\" },\n });\n }\n }\n },\n\n //* 数据清空\n clear: (data: Reactive, key: number) => {\n data[key].id = \"\";\n data[key].ref = \"\";\n data[key].alt = \"\";\n data[key].name = \"\";\n data[key].species = \"\";\n data[key].visible = false;\n data[key].sequence = \"\";\n data[key].transcript = \"\";\n data[key].transcripts = [];\n data[key].data.range = undefined;\n switch (data[key].mode) {\n case \"Transcript\": {\n data[key].data.coordinate = {};\n data[key].data.contrast = {};\n break;\n }\n case \"Protein\": {\n data[key].data.site = \"\";\n data[key].data.codons = undefined;\n data[key].data.contrast = {};\n break;\n }\n default: {\n data[key].data.mode = undefined;\n data[key].data.codons = undefined;\n data[key].data.keyword = \"\";\n break;\n }\n }\n },\n\n //* 碱基处理\n codon: (str: string) => {\n //* 数据更新\n const result = str?.toUpperCase()?.match(/[a|A|t|T|c|C|g|G]/g);\n if (!result?.length) return \"\";\n else {\n return result.slice(0, 100).join(\"\");\n }\n },\n\n //* 数据解析处理\n analysis: (data: Reactive, key: number, response?: any) => {\n //* 数据更新\n data[key].alt = utils.codon(response?.alt || \"\");\n data[key].ref = response?.ref || \"\";\n data[key].species = response?.species || \"\";\n data[key].sequence = response?.sequence || \"\";\n if (data[key].mode == \"Paste\" || data[key].mode == \"Variant\") {\n data[key].data.mode = response?.mode;\n data[key].data.range = { start: response?.range?.[0], end: response?.range?.[1] };\n data[key].data.codons = response?.codons || [];\n }\n\n if (data[key].mode == \"Paste\") {\n data[key].id = response?.id || \"\";\n data[key].name = response?.name || \"\";\n data[key].transcripts = utils.transcript(response?.transcripts);\n data[key].transcript = response?.transcript || \"\";\n }\n },\n\n //* reference蛋白质解析\n reference: (data: ModuleFormData) => {\n const codon = Contrast.Codon[data.ref];\n if (!codon) return \"\";\n else {\n return `${codon.name}(${codon.shortnanme}): ${data.ref}`;\n }\n },\n\n //* 转录本数据处理\n transcript: (data?: UiTypes.candidate[]) => {\n const result = data?.map((value) => {\n const label = `${value.value}${value.mane ? \" [MANE]\" : \"\"}`;\n return {\n cds: value.cds || [],\n name: label + (value.ensembl ? `-${value.ensembl}` : \"\"),\n label: label,\n value: value.value,\n exons: value.exons || [],\n };\n });\n\n return result || [];\n },\n\n //* 蛋白对照表生成\n codon_contrast: (data: ModuleFormData) => {\n //* 临时数据\n const config = { start: -1, codon: \"\", site: 1 };\n const result: { [name: number]: ModuleCodonContrast | undefined } = {};\n data.transcripts\n .find((value) => value.value == data.transcript)\n ?.cds?.forEach((value: number[]) => {\n for (let i = value[0]; i <= value[1]; i++) {\n if (config.codon.length == 0) {\n config.start = i;\n config.codon = data.sequence.charAt(i - 1);\n } else {\n config.codon += data.sequence.charAt(i - 1);\n if (config.codon.length >= 3) {\n result[config.site] = Object.assign(utility.cloneDeep(config), { end: i, readonly: i - config.start >= 3 });\n config.site += 1;\n config.codon = \"\";\n }\n }\n }\n });\n\n return result;\n },\n\n //* 转录本对照表生成\n transcript_contrast: (data: ModuleFormData) => {\n const transcript = data.transcripts.find((value) => value.value == data.transcript);\n if (!transcript) return {};\n else {\n const sites: number[] = [];\n transcript.exons?.forEach((value: number[]) => {\n for (let i = value[0]; i <= value[1]; i++) {\n sites.push(i);\n }\n });\n\n const result: { [name: number]: ModuleTranscriptContrast } = {};\n const config = { site: -sites.filter((value) => value < transcript.cds?.[0]?.[0]).length };\n transcript.exons?.forEach((value: number[]) => {\n for (let i = value[0]; i <= value[1]; i++) {\n if (config.site == 0) config.site = 1;\n result[config.site++] = { site: i, char: data.sequence.charAt(i - 1) };\n }\n });\n\n return result;\n }\n },\n};\n","//* 组件库\nimport { $loading, $message, type UiFormItem, type UiForm, type UiTypes, utility } from \"various-ui\";\n//* 私有组件\nimport type ModuleCodonContrast from \"../../codon-contrast/index.vue\";\nimport type ModulePreview from \"../components/preview/index.vue\";\n//* 组件属性\nimport type { ModuleFormData, ModuleProps } from \"./types\";\nimport { utils } from \"./utils\";\n\nexport const useComposable = (define: ModuleProps) => {\n //* 插件\n const i18n = useI18n();\n //* 静态数据\n const vars = {\n datas: <{ [name: number]: ModuleFormData | undefined }>{},\n modes: [\n { label: i18n.t(\"FastPaste\"), value: \"Paste\" },\n { label: i18n.t(\"InputMutation\"), value: \"Variant\" },\n { label: i18n.t(\"InputProtein\"), value: \"Protein\" },\n { label: i18n.t(\"InputTranscript\"), value: \"Transcript\" },\n ],\n };\n\n //* 表单数据\n const data = reactive([utils.data()]);\n\n //* 校验规则\n const rules: { [name: string]: UiTypes.verifyRule[] } = {\n site: [\n {\n trigger: \"verify\",\n verify: (response) => {\n //* 转录本坐标检测\n if (response.mode == \"Transcript\") {\n //* 数据初始化\n const end = response.data.range?.end || 0;\n const start = response.data.range?.start || 0;\n //* 统计序列长度\n const size = response.sequence?.length || 0;\n\n //* 坐标是否添加完整检测\n if (!response.data.coordinate.start || !response.data.coordinate.end)\n return { verify: false, message: i18n.t(\"Placeholder.TranscriptNotNull\") };\n //* 坐标超出基因范围检测\n if (start < 1 || start > size || end < 1 || end > size)\n return { verify: false, message: i18n.t(\"Placeholder.MutationExceedRange\") };\n //* 起始坐标超过终止坐标检测\n if (start > end) {\n return { verify: false, message: i18n.t(\"Placeholder.StartExceedEnd\") };\n }\n }\n\n //* 蛋白坐标检测\n if (response.mode == \"Protein\") {\n if (!response.data.site) {\n return { verify: false, message: i18n.t(\"Placeholder.ProteinNotNull\") };\n }\n }\n\n //* 突变坐标检测\n if (response.mode == \"Variant\" || response.mode == \"Paste\") {\n if (!response.data.keyword) {\n return { verify: false, message: i18n.t(\"FormatError\") };\n }\n }\n\n //* 数据处理\n if (response.mode == \"Paste\" && !response.id) return { verify: false, message: i18n.t(\"MutationsInputsError1\") };\n\n //* 坐标长度检测\n if (!response.data.range) return { verify: false, message: i18n.t(\"CoordinatesNotFound\") };\n else if (response.data.range.end - response.data.range.start + 1 > 50) {\n return { verify: false, message: i18n.t(\"MutationRangeLT50\") };\n }\n\n return { verify: true, message: \"\" };\n },\n },\n ],\n\n name: [\n {\n trigger: \"verify\",\n verify: (response) => {\n if (!response.id) return { verify: false, message: i18n.t(\"PleaseSelectGene\") };\n else {\n return { verify: true, message: \"\" };\n }\n },\n },\n ],\n };\n\n //* 节点\n const nodes = {\n forms: ref[]>([]),\n sites: ref[]>([]),\n views: ref[]>([]),\n contrast: ref>(),\n };\n\n //* 函数列表\n const methods = {\n //* 突变后碱基数据处理\n alt: (key: number) => {\n //* 数据格式更新\n nextTick(() => {\n //* 数据更新\n data[key].alt = utils.codon(data[key].alt);\n //* 触发可视化图形重绘\n nodes.views.value[key]?.render(data[key]);\n });\n },\n\n //* 预测模式切换\n mode: (key: number) => {\n //* 缓存数据取出\n const cache = utility.cloneDeep(vars.datas[key]);\n //* 数据缓存\n vars.datas[key] = utility.cloneDeep(data[key]);\n //* 初始化数据\n if (cache && ((cache.id == data[key].id && cache.transcript == data[key].transcript) || !data[key].id)) {\n data[key] = utils.data(Object.assign(cache, { mode: data[key].mode, visible: data[key].visible }), {\n clear: data[key].mode == \"Paste\",\n });\n } else {\n data[key] = utils.data(data[key], { clear: data[key].mode == \"Paste\" });\n }\n\n //* 触发可视化图形重绘\n nodes.views.value[key]?.render(data[key]);\n //* 对应模式需生成新的对照表\n switch (data[key].mode) {\n case \"Protein\": {\n return (data[key].data.contrast = utils.codon_contrast(data[key]));\n }\n\n case \"Transcript\": {\n return (data[key].data.contrast = utils.transcript_contrast(data[key]));\n }\n }\n },\n\n //* 基因选择\n gene: (key: number, result: any, callback?: () => void) => {\n console.log(\"基因信息\", result);\n //* 开启加载器\n $loading.open({ message: i18n.t(\"UnderLoad\"), delay: 200 });\n api.frontend(\"/api/gene/mrnas-info\", {\n data: { id: result.id },\n error: () => {\n $loading.close();\n utils.clear(data, key);\n },\n success: (response) => {\n $loading.close();\n //* 数据更新\n data[key].transcripts = utils.transcript(response?.data);\n data[key].transcript = data[key].transcripts?.[0]?.value || \"\";\n data[key].sequence = response?.sequence || \"\";\n data[key].species = response?.taxonomy_id || \"\";\n data[key].name = response?.name || \"\";\n data[key].id = result.id;\n //* 触发表单校验(用于重置表单校验状态)\n nodes.forms.value[key]?.clear();\n nodes.forms.value[key]?.validator(() => {}, [\"name\"]);\n //* 选择第一个转录本\n methods.transcript(key);\n //* 回调函数\n callback?.();\n },\n });\n },\n\n //* 删除\n remove: (key: number) => {\n //* 数据删除\n data.splice(key, 1);\n //* 遍历强制重绘可视化图形\n nextTick(() => {\n data.forEach((value, index) => nodes.views.value[index]?.render(value, { update: true }));\n });\n },\n\n //* 添加\n append: () => {\n //* 数据添加\n const index = data.length;\n const response = data.slice(-1)[0];\n if (response.mode == \"Paste\") data.push(utils.data(response, { clear: true }));\n else {\n data.push(utils.data(response));\n nextTick(() => {\n //* 可视化模型绘制\n if (response.visible) nodes.views.value[index]?.render(data[index]);\n //* 对应模式需生成新的对照表\n switch (data[index].mode) {\n case \"Protein\": {\n return (data[index].data.contrast = utils.codon_contrast(data[index]));\n }\n\n case \"Transcript\": {\n return (data[index].data.contrast = utils.transcript_contrast(data[index]));\n }\n }\n });\n }\n },\n\n //* 图表开关\n visible: (key: number) => {\n data[key].visible = !data[key].visible;\n if (data[key].visible) {\n //* 触发可视化图形重绘\n nodes.views.value[key]?.render(data[key]);\n }\n },\n\n //* 突变解析\n analysis: (key: number) => {\n //* 检测类型是否合法\n if (!data[key] || data[key].mode == \"Protein\" || data[key].mode == \"Transcript\") return;\n //* 解析内容空值校验\n const option: any = { keyword: data[key].data.keyword?.trim() || \"\", source: define.mode };\n if (!option.keyword) {\n utils.analysis(data, key);\n nodes.sites.value[key]?.validator();\n nextTick(() => {\n nodes.views.value[key]?.render(data[key]);\n });\n\n //* 退出解析\n return;\n }\n\n //* Variant模式下需添加id与转录本\n if (data[key].mode != \"Paste\") {\n option.id = data[key].id;\n option.transcript = data[key].transcript;\n }\n\n //* 开启加载器\n $loading.open({ message: i18n.t(\"UnderLoad\"), delay: 200 });\n //* 检测突变信息是否合法\n api.frontend(\"/api/mutations/analyze2\", {\n data: option,\n hidden: true,\n method: \"POST\",\n error: (error) => {\n //* 数据处理\n utils.analysis(data, key);\n //* 消息提示\n nodes.sites.value[key]?.show(error.message, \"error\");\n //* 突变解析失败时需要重置可视化图形\n if (data[key].mode == \"Variant\") {\n nodes.views.value[key]?.render(data[key]);\n }\n },\n finally: () => $loading.close(),\n success: (response) => {\n console.log(\"解析结果\", response);\n //* 数据处理\n if (data[key].mode != \"Paste\" || (data[key].mode == \"Paste\" && response.id)) utils.analysis(data, key, response);\n else {\n //* 数据处理\n utils.analysis(data, key);\n //* 消息提示\n nodes.sites.value[key]?.show(i18n.t(\"MutationsInputsError1\"), \"error\");\n //* 停止向下执行\n return;\n }\n\n //* 数据校验\n nextTick(() => {\n nodes.forms.value[key]?.validator((result) => {\n //* 校验失败则清空预测坐标\n if (!result) data[key].data.range = undefined;\n //* 坐标匹配失败警告\n else if (response?.msg) nodes.sites.value[key]?.show(response.msg, \"warning\");\n else {\n //* 成功提示\n $message.success(i18n.t(\"DataResolveSuccess\"));\n }\n\n //* 触发可视化图形重绘\n nodes.views.value[key]?.render(data[key]);\n });\n });\n },\n });\n },\n\n //* 转录本切换\n transcript: (key: number) => {\n //* 检测类型是否合法\n if (!data[key]) return;\n //* 公共模式处理\n if (data[key].mode != \"Paste\") {\n data[key].data.range = undefined;\n data[key].ref = \"\";\n data[key].alt = \"\";\n //* 触发可视化图形重绘\n nodes.views.value[key]?.render(data[key]);\n }\n\n //* 转录本模式处理\n if (data[key].mode == \"Transcript\") {\n //* 生成新的转录本对照表\n data[key].data.contrast = utils.transcript_contrast(data[key]);\n //* 数据重置\n data[key].data.coordinate = {};\n //* 停止向下执行\n return;\n }\n\n //* 蛋白模式处理\n if (data[key].mode == \"Protein\") {\n //* 生成新的蛋白对照表\n data[key].data.contrast = utils.codon_contrast(data[key]);\n //* 数据重置\n data[key].data.site = \"\";\n //* 停止向下执行\n return;\n }\n\n //* 解析模式处理\n if (data[key].mode == \"Variant\") {\n //* 数据重置\n data[key].data.keyword = \"\";\n //* 停止向下执行\n return;\n }\n\n //* 粘贴模式处理\n if (data[key].mode == \"Paste\") {\n //* 开启加载器\n $loading.open({ message: i18n.t(\"UnderLoad\"), delay: 200 });\n //* 检测突变信息是否合法\n api.frontend(\"/api/mutations/analyze2\", {\n data: { id: data[key].id, keyword: data[key].data.keyword.trim(), transcript: data[key].transcript, source: define.mode },\n hidden: true,\n method: \"POST\",\n error: (error) => {\n //* 数据更新\n data[key].alt = \"\";\n data[key].ref = \"\";\n data[key].data.range = undefined;\n //* 触发可视化图形重绘\n nodes.views.value[key]?.render(data[key]);\n //* 消息提示\n nodes.sites.value[key]?.show(error.message, \"error\");\n },\n finally: () => $loading.close(),\n success: (response) => {\n //* 数据更新\n data[key].alt = utils.codon(response?.alt || \"\");\n data[key].ref = response?.ref || \"\";\n data[key].data.range = { end: response?.range?.[1], start: response?.range?.[0] };\n //* 数据校验\n nextTick(() => {\n nodes.forms.value[key]?.validator((result) => {\n //* 校验失败则清空预测坐标\n if (!result) data[key].data.range = undefined;\n //* 触发可视化图形重绘\n nodes.views.value[key]?.render(data[key]);\n });\n });\n },\n });\n }\n },\n\n //* 蛋白坐标\n protein_site: (key: number) => {\n if (data[key].mode != \"Protein\") return;\n else {\n //* 数据获取\n const result = data[key].data.contrast[data[key].data.site];\n //* 数据更新\n data[key].ref = result?.codon || \"\";\n if (!result) data[key].data.range = undefined;\n else {\n data[key].data.range = { end: result.end, start: result.start };\n }\n\n //* 坐标校验\n nodes.forms.value[key]?.validator(\n (result) => {\n //* 数据更新\n if (!result) data[key].data.range = undefined;\n nextTick(() => {\n //* 触发可视化图形重绘\n nodes.views.value[key]?.render(data[key]);\n });\n },\n [\"site\"]\n );\n }\n },\n\n //* 转录本坐标\n transcript_site: (key: number) => {\n if (data[key].mode != \"Transcript\") return;\n else {\n //* 索引初始化\n const index = { start: data[key].data.coordinate?.start || 0, end: data[key].data.coordinate?.end || 0 };\n //* 数据初始化\n const end = Number(data[key].data.contrast?.[index.end]?.site) + (Number(data[key].data.coordinate?.[\"end-steps\"]) || 0);\n const start = Number(data[key].data.contrast?.[index.start]?.site) + (Number(data[key].data.coordinate?.[\"start-steps\"]) || 0);\n //* 数据更新\n data[key].ref = data[key].sequence.slice(start - 1, end);\n if (start > 0 && end > 0) data[key].data.range = { end: end, start: start };\n else {\n data[key].data.range = undefined;\n }\n\n //* 坐标校验\n nodes.forms.value[key]?.validator(\n (result) => {\n //* 数据更新\n if (!result) data[key].data.range = undefined;\n nextTick(() => {\n //* 触发可视化图形重绘\n nodes.views.value[key]?.render(data[key]);\n });\n },\n [\"site\"]\n );\n }\n },\n\n //* 初始化函数\n init: (response: { id: string; nucleotide: string; transcript: string }) => {\n //* 数据初始化\n data[0].mode = \"Variant\";\n methods.mode(0);\n methods.gene(0, response, () => {\n //* 转录本选择\n data[0].transcript = data[0].transcripts.find((v) => v.value == response.transcript)?.value || data[0].transcript;\n if (data[0].transcript) {\n methods.transcript(0);\n }\n\n //* 突变解析\n if (data[0].mode == \"Variant\") {\n data[0].data.keyword = response.nucleotide;\n if (data[0].data.keyword) {\n methods.analysis(0);\n }\n }\n });\n },\n\n //* 提交函数\n submit: (handler?: (datas: ModuleFormData[]) => void) => {\n //* 表单数据获取\n const result = { status: 200, data: [] };\n //* 递归校验函数\n const verify = async (index: number) => {\n if (!nodes.forms.value[index]) {\n if (result.status == 200) handler?.(result.data);\n } else {\n //* 表单校验\n try {\n await nodes.forms.value[index].validator((validator) => {\n if (!validator) result.status = 500;\n else {\n result.data.push(data[index]);\n }\n });\n } catch {\n result.status = 500;\n }\n\n //* 递归\n verify(index + 1);\n }\n };\n\n //* 第一次递归\n verify(0);\n },\n };\n\n return { vars, data, rules, nodes, methods };\n};\n","\n\n\n"],"names":["UiSelectPropsOption","UiSelectEmits","_ev","useComposable","define","emits","vars","refs","ref","nodes","methods","ev","node.includes","_a","nextTick","node.append","data","width","dispose.boundary.relativeContainerBody","computeds","computed","i","Contrast","_b","className","result","codon","binds","reactive","utility.isNumber","animations.selector","__props","__emit","ons","visible","container","body","candidates","onBeforeUnmount","node.remove","_CanvasDispose","option","__publicField","response","config","exon","end","start","areas","c","range","ranges","resource","area","size","number","value","site","v","utility.cloneDeep","alt","node","tips","Konva","canvas","index","context","clip","ctx","height","radius","cds","offset","_c","CanvasDispose","i18n","useI18n","shallowRef","transcript","is_update_gene_info","_d","view","__expose","ModulePropsOption","key","utils","str","label","sites","rules","cache","callback","$loading","api","error","$message","_e","_g","_f","_h","_i","handler","verify","validator","e","forms","views","contrast","renderMutationDescribe","defineComponent","render","_createVNode2","t","_createTextVNode2","renderMutationDescribe2","init","submit","onMounted","forEach","id"],"mappings":"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"}