diff --git a/components/JsonFormDialog.vue b/components/JsonFormDialog.vue
index 4c5f126..bd16b61 100644
--- a/components/JsonFormDialog.vue
+++ b/components/JsonFormDialog.vue
@@ -57,6 +57,8 @@
+ 补全数据
一键翻译
取消
@@ -132,7 +134,7 @@ function collectChineseStrings(obj: any, result: { parent: any; key: string | nu
} else if (typeof obj === 'object') {
for (const k of Object.keys(obj)) {
const val = obj[k]
- if (typeof val === 'string' && hasChinese(val)) {
+ if (typeof val === 'string' && hasChinese(val) && !k.startsWith('untranslate_')) {
result.push({ parent: obj, key: k })
} else if (typeof val === 'object') {
collectChineseStrings(val, result)
@@ -196,6 +198,46 @@ function delay(ms: number) {
return new Promise(resolve => setTimeout(resolve, ms))
}
+function handleCompleteData() {
+ if (!formData.value.ZH) return
+ if (!formData.value.EN) {
+ formData.value.EN = JSON.parse(JSON.stringify(formData.value.ZH))
+ ElMessage.success('补全完成')
+ return
+ }
+ completeFromSource(formData.value.EN, formData.value.ZH)
+ ElMessage.success('补全完成')
+}
+
+function completeFromSource(target: any, source: any) {
+ if (source === null || source === undefined) return
+
+ if (Array.isArray(source) && Array.isArray(target)) {
+ for (let i = target.length; i < source.length; i++) {
+ target.push(JSON.parse(JSON.stringify(source[i])))
+ }
+ for (let i = 0; i < Math.min(target.length, source.length); i++) {
+ if (typeof target[i] === 'object' && target[i] !== null &&
+ typeof source[i] === 'object' && source[i] !== null) {
+ completeFromSource(target[i], source[i])
+ } else if (typeof target[i] === 'string' && target[i] === '' && source[i] !== '') {
+ target[i] = JSON.parse(JSON.stringify(source[i]))
+ }
+ }
+ } else if (typeof source === 'object' && !Array.isArray(source)) {
+ for (const key of Object.keys(source)) {
+ if (!(key in target) || target[key] === undefined || target[key] === null) {
+ target[key] = JSON.parse(JSON.stringify(source[key]))
+ } else if (typeof target[key] === 'string' && target[key] === '') {
+ target[key] = JSON.parse(JSON.stringify(source[key]))
+ } else if (typeof target[key] === 'object' && target[key] !== null &&
+ typeof source[key] === 'object' && source[key] !== null) {
+ completeFromSource(target[key], source[key])
+ }
+ }
+ }
+}
+
async function handleTranslateAll() {
if (!formData.value.ZH || translating.value) return
formData.value.EN = JSON.parse(JSON.stringify(formData.value.ZH))
@@ -376,6 +418,7 @@ const NodeEditor: Component = defineComponent({
const zhVal = p.zhParent?.[key]
const showTranslateBtn = p.lang === 'EN' && typeof zhVal === 'string' && hasChinese(zhVal)
+ && !key.startsWith('untranslate_')
if (showTranslateBtn) {
return h(ElFormItem, { label, class: 'jfd-form-item' }, () =>
h('div', { class: 'jfd-field-with-translate' }, [
@@ -474,7 +517,8 @@ const NodeEditor: Component = defineComponent({
]),
h(ElCollapse, { class: 'jfd-obj-array' }, () =>
value.map((item: any, i: number) => {
- const tag = item.title || item.name || item.text || item.label || item.year || ''
+ const v = Object.values(item)
+ const tag = v[0]
return h(ElCollapseItem, {
title: `${label} #${i + 1}${tag ? ' - ' + tag : ''}`,
name: `${String(key)}-${i}`,
diff --git a/views/history/typesManage.tsx b/views/history/typesManage.tsx
index 5e63060..552c14b 100644
--- a/views/history/typesManage.tsx
+++ b/views/history/typesManage.tsx
@@ -54,6 +54,7 @@ const data: TableData = {
key: 'pid',
name: '父ID',
type: 'input',
+ hide: true
},
{
key: 'name',
@@ -86,7 +87,8 @@ const data: TableData = {
key: 'pid',
name: 'PID',
width: '80px',
- showJson: '*'
+ showJson: '*',
+ hide: true
},
{
key: 'name',
@@ -108,6 +110,7 @@ const data: TableData = {
key: 'pid',
name: '父ID',
type: 'input',
+ hide: true
},
{
key: 'name',