diff --git a/src/utils/index.js b/src/utils/index.js index c62d6e22..caab2046 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -60,67 +60,35 @@ export function param2Obj(url) { ) } -export function deepClone(target) { - const map = new WeakMap() - - function isObject(target) { - return (typeof target === 'object' && target) || typeof target === 'function' +export function deepClone(source, map = new WeakMap()) { + // 处理基本类型和函数(直接返回) + if (typeof source !== 'object' || source === null) { + return source; } - function clone(data) { - if (!isObject(data)) { - return data - } - if ([Date, RegExp].includes(data.constructor)) { - return new data.constructor(data) - } - if (typeof data === 'function') { - return new Function('return ' + data.toString())() - } - const exist = map.get(data) - if (exist) { - return exist - } - if (data instanceof Map) { - const result = new Map() - map.set(data, result) - data.forEach((val, key) => { - if (isObject(val)) { - result.set(key, clone(val)) - } else { - result.set(key, val) - } - }) - return result - } - if (data instanceof Set) { - const result = new Set() - map.set(data, result) - data.forEach(val => { - if (isObject(val)) { - result.add(clone(val)) - } else { - result.add(val) - } - }) - return result - } - const keys = Reflect.ownKeys(data) - const allDesc = Object.getOwnPropertyDescriptors(data) - const result = Object.create(Object.getPrototypeOf(data), allDesc) - map.set(data, result) - keys.forEach(key => { - const val = data[key] - if (isObject(val)) { - result[key] = clone(val) - } else { - result[key] = val - } - }) - return result + // 处理循环引用 + if (map.has(source)) { + return map.get(source); } - return clone(target) -} + // 创建新容器 + const target = Array.isArray(source) ? [] : {}; + map.set(source, target); // 记录克隆关系 + // 克隆普通键值 + for (const key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = deepClone(source[key], map); + } + } + // 克隆Symbol键值(ES6+) + const symbolKeys = Object.getOwnPropertySymbols(source); + for (const symKey of symbolKeys) { + if (source.propertyIsEnumerable(symKey)) { + target[symKey] = deepClone(source[symKey], map); + } + } + + return target; +} \ No newline at end of file diff --git a/src/utils/stream.js b/src/utils/stream.js index 8ee5c5aa..4cec5825 100644 --- a/src/utils/stream.js +++ b/src/utils/stream.js @@ -20,7 +20,7 @@ function zipFiles(zipName, files) { ctrl.close(); } else { let { name, url } = fileInfo.value; - url = decodeUtf8(url); + // url = decodeUtf8(url); // 待定,可能做过特殊处理 return fetch(url).then(res => { ctrl.enqueue({ name, diff --git a/src/views/trials/trials-panel/trial-summary/trial-document/components/report_doc/form.vue b/src/views/trials/trials-panel/trial-summary/trial-document/components/report_doc/form.vue index 3ecc79f4..50dc2073 100644 --- a/src/views/trials/trials-panel/trial-summary/trial-document/components/report_doc/form.vue +++ b/src/views/trials/trials-panel/trial-summary/trial-document/components/report_doc/form.vue @@ -2,7 +2,7 @@
- + - - - - + - + + - + {{ $t('common:button:upload') }} + :disabled=" + !!form.PDFFileRecord && !!form.PDFFileRecord.FilePath + " + >{{ $t('common:button:upload') }} + + + {{ $t('trials:trialDocument:reportDoc:rule:mustPDF') }} + - - + - + {{ $t('common:button:upload') }} + + + {{ $t('trials:trialDocument:reportDoc:rule:mustDOCX') }} + + + + + + {{ $t('common:button:upload') }} + + + {{ $t('trials:trialDocument:reportDoc:rule:mustPDF') }} + + + + + + {{ $t('common:button:upload') }} + + + {{ $t('trials:trialDocument:reportDoc:rule:mustZIP') }} + +
- {{ $t('dictionary:browser:button:canel') }} + {{ $t('trials:trialDocument:reportDoc:button:canel') }} - {{ $t('dictionary:browser:button:save') }} + {{ $t('trials:trialDocument:reportDoc:button:save') }}