zhengnaiwen_citu 3 周之前
父节点
当前提交
d1492ca7b6

+ 5 - 0
src/api/index.js

@@ -29,3 +29,8 @@ export function coreGraphYear (params) {
 export function exportTable (params) {
   return http.download('/digitizationData/core/graph/data/download', params)
 }
+
+// 翻译
+export function getTranslate (param) {
+  return http.post('/system/translate', param)
+}

+ 48 - 48
src/router/routes.js

@@ -2377,55 +2377,55 @@ export default {
       alwaysShow: 0,
       metastr: '{"allowClick":false,"enName":"data book","title":"数据目录","target":false}',
       open: null
-    },
-    {
-      hidden: 0,
-      rootId: 0,
-      icon: 'mdi-robot-outline',
-      type: 0,
-      path: '/model',
-      children: [
-        {
-          hidden: 1,
-          icon: '',
-          type: 1,
-          title: '模型',
-          path: '/model',
-          children: [],
-          enName: 'model',
-          redirect: '',
-          active: '',
-          label: '模型',
-          sort: 0,
-          component: 'modelManage',
-          meta: {
-            roles: [],
-            enName: 'model',
-            icon: '',
-            title: '模型',
-            fullScreen: false
-          },
-          name: 'index',
-          alwaysShow: 0
-        }
-      ],
-      enName: 'model',
-      redirect: '',
-      active: '',
-      sort: 0,
-      component: 'Layout',
-      meta: {
-        allowClick: false,
-        roles: [],
-        enName: 'model',
-        icon: 'mdi-robot-outline',
-        title: '模型',
-        target: false,
-        effectiveStatus: true
-      },
-      name: 'model',
-      alwaysShow: 0
     }
+    // {
+    //   hidden: 0,
+    //   rootId: 0,
+    //   icon: 'mdi-robot-outline',
+    //   type: 0,
+    //   path: '/model',
+    //   children: [
+    //     {
+    //       hidden: 1,
+    //       icon: '',
+    //       type: 1,
+    //       title: '模型',
+    //       path: '/model',
+    //       children: [],
+    //       enName: 'model',
+    //       redirect: '',
+    //       active: '',
+    //       label: '模型',
+    //       sort: 0,
+    //       component: 'modelManage',
+    //       meta: {
+    //         roles: [],
+    //         enName: 'model',
+    //         icon: '',
+    //         title: '模型',
+    //         fullScreen: false
+    //       },
+    //       name: 'index',
+    //       alwaysShow: 0
+    //     }
+    //   ],
+    //   enName: 'model',
+    //   redirect: '',
+    //   active: '',
+    //   sort: 0,
+    //   component: 'Layout',
+    //   meta: {
+    //     allowClick: false,
+    //     roles: [],
+    //     enName: 'model',
+    //     icon: 'mdi-robot-outline',
+    //     title: '模型',
+    //     target: false,
+    //     effectiveStatus: true
+    //   },
+    //   name: 'model',
+    //   alwaysShow: 0
+    // }
   ],
   permission: [
     'systemManage:roleManage:create',

+ 1 - 1
src/views/dataDiagram/myChartDiagram/index.vue

@@ -139,7 +139,7 @@
 
     <m-dialog
       :visible.sync="showEditBox"
-      show-drawer
+      fullscreen
       flex-box
       :title="title + '图表'"
       :footer="false"

+ 23 - 0
src/views/dataGovernance/dataIndicator/components/editBase.vue

@@ -1,6 +1,9 @@
 <template>
   <div>
     <m-form ref="form" :items="formItems" v-model="formValues">
+      <template #en_name>
+        <v-btn color="primary" class="ml-3" :loading="translateLoading" @click="getTranslate">翻译</v-btn>
+      </template>
       <template #childrenId="{ item }">
         <search-nodes v-model="item.value" v-bind="item.options" :search-value="item.search"></search-nodes>
       </template>
@@ -17,6 +20,7 @@ import {
   frequency,
   sensitivity
 } from '@/utils/dataGovernance'
+import { getTranslate } from '@/api'
 import SearchNodes from '../../components/searchNodes.vue'
 import { api } from '@/api/dataGovernance'
 export default {
@@ -49,6 +53,7 @@ export default {
         current: 1
       },
       total: 0,
+      translateLoading: false,
       loading: false
     }
   },
@@ -56,6 +61,7 @@ export default {
     formItems () {
       return [
         { type: 'text', key: 'name', label: '请输入名称 *', rules: [v => !!v || '请输入名称'] },
+        { type: 'text', key: 'en_name', label: '请输入英文名称 *', rules: [v => !!v || '请输入英文名称'], slotName: 'en_name' },
         { type: 'autocomplete', key: 'category', label: '请选择分类 *', rules: [v => !!v || '请选择分类'], items: metadata },
         { type: 'text', key: 'organization', label: '请输入所属机构 *', rules: [v => !!v || '请输入所属机构'] },
         { type: 'text', key: 'leader', label: '请输入负责人 *', rules: [v => !!v || '请输入负责人'] },
@@ -129,6 +135,23 @@ export default {
         this.$snackbar.error(error)
       }
     },
+    async getTranslate () {
+      if (!this.formValues.name) {
+        this.$snackbar.error('请输入名称')
+        return
+      }
+      this.translateLoading = true
+      try {
+        const { data } = await getTranslate({
+          node_name: this.formValues.name
+        })
+        this.formValues.en_name = data.translated
+      } catch (error) {
+        this.$snackbar.error(error)
+      } finally {
+        this.translateLoading = false
+      }
+    },
     getValue () {
       if (!this.$refs.form.validate()) {
         return

+ 1 - 1
src/views/dataGovernance/dataIndicator/index.vue

@@ -38,7 +38,7 @@
     <m-dialog
       :visible.sync="show"
       :title="title"
-      :show-drawer="true"
+      :fullscreen="true"
       body-style="display: flex;padding: 0;"
       :footer="false"
     >

+ 29 - 1
src/views/dataGovernance/dataModules/components/editBase.vue

@@ -1,6 +1,9 @@
 <template>
   <div>
     <m-form ref="form" :items="formItems" v-model="formValues">
+      <template #en_name>
+        <v-btn color="primary" class="ml-3" :loading="translateLoading" @click="getTranslate">翻译</v-btn>
+      </template>
       <template #childrenId="{ item }">
         <search-nodes v-model="item.value" v-bind="item.options" :search-value="item.search"></search-nodes>
       </template>
@@ -12,6 +15,7 @@
 
 import MForm from '@/components/MForm'
 // import { combinationTagsPage } from '@/api/dataBook'
+import { getTranslate } from '@/api'
 import {
   metadata,
   frequency,
@@ -53,6 +57,7 @@ export default {
       },
       total: 0,
       loading: false,
+      translateLoading: false,
       tagItems: []
     }
   },
@@ -60,7 +65,13 @@ export default {
     formItems () {
       return [
         { type: 'text', key: 'name', label: '请输入名称 *', rules: [v => !!v || '请输入名称'] },
-        { type: 'text', key: 'en_name', label: '请输入英文名称 *', rules: [v => !!v || '请输入英文名称'] },
+        {
+          type: 'text',
+          key: 'en_name',
+          label: '请输入英文名称 *',
+          rules: [v => !!v || '请输入英文名称'],
+          slotName: 'en_name'
+        },
         { type: 'autocomplete', key: 'category', label: '请选择分类 *', rules: [v => !!v || '请选择分类'], items: metadata },
         { type: 'text', key: 'organization', label: '请输入所属机构 *', rules: [v => !!v || '请输入所属机构'] },
         { type: 'text', key: 'leader', label: '请输入负责人 *', rules: [v => !!v || '请输入负责人'] },
@@ -131,6 +142,23 @@ export default {
         this.$snackbar.error(error)
       }
     },
+    async getTranslate () {
+      if (!this.formValues.name) {
+        this.$snackbar.error('请输入名称')
+        return
+      }
+      this.translateLoading = TextTrackCue
+      try {
+        const { data } = await getTranslate({
+          node_name: this.formValues.name
+        })
+        this.formValues.en_name = data.translated
+      } catch (error) {
+        this.$snackbar.error(error)
+      } finally {
+        this.translateLoading = false
+      }
+    },
     getValue () {
       if (!this.$refs.form.validate()) {
         return

+ 1 - 1
src/views/dataGovernance/dataModules/index.vue

@@ -42,7 +42,7 @@
     <edit-dialog
       :visible.sync="show"
       :title="title"
-      :show-drawer="true"
+      :fullscreen="true"
       body-style="display: flex;padding: 0;"
       :footer="false"
     >

+ 41 - 23
src/views/dataGovernance/dataProcess/components/edit.vue

@@ -27,24 +27,6 @@
     <v-card class="width-auto">
       <div class="pa-3 fullscreen">
         <div class="fullscreen d-flex flex-column">
-          <v-card outlined class="height-auto">
-            <Toolbar
-                style="border-bottom: 1px solid #ccc"
-                :editor="editor"
-                :defaultConfig="toolbarConfig"
-                :mode="mode"
-            ></Toolbar>
-            <Editor
-                style="overflow-y: hidden; height: calc(100% - 100px);"
-                v-model="changeObj.script_requirement"
-                :defaultConfig="editorConfig"
-                :mode="mode"
-                @onCreated="onCreated"
-            />
-            <div class="d-flex align-end justify-end pa-3">
-              <v-btn color="primary" @click="onGenerating">生成代码</v-btn>
-            </div>
-          </v-card>
           <div class="mt-3 d-flex">
 
             <v-text-field
@@ -67,7 +49,25 @@
               :rules="[v => !!v || '请输入目标表']">
             </v-text-field>
           </div>
-          <div class="mt-3">
+          <v-card outlined class="height-auto mt-3">
+            <Toolbar
+                style="border-bottom: 1px solid #ccc"
+                :editor="editor"
+                :defaultConfig="toolbarConfig"
+                :mode="mode"
+            ></Toolbar>
+            <Editor
+                style="overflow-y: hidden; height: calc(100% - 50px);"
+                v-model="changeObj.script_requirement"
+                :defaultConfig="editorConfig"
+                :mode="mode"
+                @onCreated="onCreated"
+            />
+          </v-card>
+          <div class="d-flex align-end justify-end pa-3">
+            <v-btn color="primary" @click="onGenerating">生成代码</v-btn>
+          </div>
+          <div>
             <v-textarea
               v-model="changeObj.script_content"
               outlined
@@ -127,9 +127,11 @@
               <div class="fullscreen overflow-y-auto">
                 <v-tabs-items v-model="tab">
                   <v-tab-item>
-                    <div v-html="ruleItem.calculateFormulas[0]?.content"></div>
+                    <div class="text-right mb-3"><v-btn color="primary" @click="onUse">使用规则</v-btn></div>
+                    <div v-html="ruleItem.calculateFormulas?.[0]?.content"></div>
                   </v-tab-item>
                   <v-tab-item class="pa-3">
+                    <div class="text-right mb-3"><v-btn color="primary" @click="onUseParam">使用参数</v-btn></div>
                     <v-expansion-panels
                       v-model="panelActive"
                       multiple
@@ -232,8 +234,8 @@ export default {
       clickItem: null,
       clickId: null,
       changeObj: {
-        script_content: null,
-        script_requirement: null,
+        script_content: '',
+        script_requirement: '',
         source_table: null,
         target_table: null
       }
@@ -267,6 +269,16 @@ export default {
     onCreated (editor) {
       this.editor = Object.seal(editor) // 一定要用 Object.seal() ,否则会报错
     },
+    onUse () {
+      this.changeObj.script_requirement += `\n${this.ruleItem.calculateFormulas?.[0]?.content}`
+    },
+    onUseParam () {
+      const str = this.ruleItem.calculateConfigurations.reduce((t, v) => {
+        return t + `<p>${v.name}=${v.value}</p>`
+      }, '\n')
+      this.changeObj.script_requirement += str
+      console.log(str)
+    },
     // 详情
     async getDetails () {
       try {
@@ -371,12 +383,18 @@ export default {
       }
     },
     async onClick (e) {
-      this.loading = true
       try {
+        this.loading = true
         const { data } = await this.fetchData('/op/base/performance/solution/detail', {
           performanceSolutionId: e.performanceSolutionId
         })
         this.clickId = data.entity.performanceSolutionId
+        if (!data.performanceSolutionDetailRespCategoryVos.length) {
+          this.loading = false
+          this.$snackbar.warning('该方案暂无数据')
+          this.drawer = false
+          return
+        }
         this.clickItem = data.performanceSolutionDetailRespCategoryVos
         this.drawer = true
       } catch (error) {

+ 23 - 1
src/views/dataGovernance/dataProcess/components/editBase.vue

@@ -1,6 +1,9 @@
 <template>
   <div>
     <m-form ref="form" :items="formItems" v-model="formValues">
+      <template #name_en>
+        <v-btn color="primary" class="ml-3" :loading="translateLoading" @click="getTranslate">翻译</v-btn>
+      </template>
       <template #childrenId="{ item }">
         <search-nodes v-model="item.value" v-bind="item.options" :search-value="item.search"></search-nodes>
       </template>
@@ -10,6 +13,7 @@
 
 <script>
 
+import { getTranslate } from '@/api'
 import MForm from '@/components/MForm'
 // import { combinationTagsPage } from '@/api/dataBook'
 import {
@@ -50,6 +54,7 @@ export default {
         current: 1
       },
       total: 0,
+      translateLoading: false,
       loading: false
     }
   },
@@ -57,7 +62,7 @@ export default {
     formItems () {
       return [
         { type: 'text', key: 'name_zh', label: '名称 *', rules: [v => !!v || '请输入名称'] },
-        { type: 'text', key: 'name_en', label: '英文名称 *', rules: [v => !!v || '请输入英文名称'] },
+        { type: 'text', key: 'name_en', label: '英文名称 *', rules: [v => !!v || '请输入英文名称'], slotName: 'name_en' },
         { type: 'autocomplete', key: 'category', label: '请选择分类 *', rules: [v => !!v || '请选择分类'], items: [...metadata] },
         { type: 'text', key: 'leader', label: '创建者 *', rules: [v => !!v || '请输入负责人'] },
         { type: 'text', key: 'organization', label: '请输入所属机构 *', rules: [v => !!v || '请输入所属机构'] },
@@ -120,6 +125,23 @@ export default {
     // })
   },
   methods: {
+    async getTranslate () {
+      if (!this.formValues.name_zh) {
+        this.$snackbar.error('请输入名称')
+        return
+      }
+      this.translateLoading = true
+      try {
+        const { data } = await getTranslate({
+          node_name: this.formValues.name_zh
+        })
+        this.formValues.name_en = data.translated
+      } catch (error) {
+        this.$snackbar.error(error)
+      } finally {
+        this.translateLoading = false
+      }
+    },
     setValues (item) {
       this.formValues = {
         name_zh: item.name_zh,

+ 24 - 1
src/views/dataGovernance/dataResource/components/editBase.vue

@@ -1,6 +1,9 @@
 <template>
   <div>
     <m-form ref="form" :items="formItems" v-model="formValues">
+      <template #en_name>
+        <v-btn color="primary" class="ml-3" :loading="translateLoading" @click="getTranslate">翻译</v-btn>
+      </template>
     </m-form>
   </div>
 </template>
@@ -15,6 +18,7 @@ import {
 import {
   getDatasourceList
 } from '@/api/dataOrigin'
+import { getTranslate } from '@/api'
 import { api } from '@/api/dataGovernance'
 export default {
   name: 'edit-base',
@@ -51,6 +55,7 @@ export default {
         current: 1
       },
       loading: false,
+      translateLoading: false,
       labelItems: [],
       dataSourceItems: []
     }
@@ -68,7 +73,8 @@ export default {
           type: 'text',
           key: 'en_name',
           label: '请输入英文名称 *',
-          rules: [v => !!v || '请输入名称']
+          rules: [v => !!v || '请输入名称'],
+          slotName: 'en_name'
         },
         {
           type: 'autocomplete',
@@ -191,6 +197,23 @@ export default {
         this.$snackbar.error(error)
       }
     },
+    async getTranslate () {
+      if (!this.formValues.name) {
+        this.$snackbar.error('请输入名称')
+        return
+      }
+      this.translateLoading = true
+      try {
+        const { data } = await getTranslate({
+          node_name: this.formValues.name
+        })
+        this.formValues.en_name = data.translated
+      } catch (error) {
+        this.$snackbar.error(error)
+      } finally {
+        this.translateLoading = false
+      }
+    },
     getValue () {
       if (!this.$refs.form.validate()) {
         return

+ 1 - 1
src/views/dataGovernance/dataResource/index.vue

@@ -46,7 +46,7 @@
     <m-dialog
       :title="title"
       :visible.sync="show"
-      :show-drawer="true"
+      :fullscreen="true"
       body-style="display: flex;padding: 0;"
       :footer="false"
     >

+ 28 - 2
src/views/dataGovernance/metadata/components/edit.vue

@@ -1,9 +1,16 @@
 <template>
-  <m-form ref="form" class="mt-5" :items="formItems" v-model="formValues"></m-form>
+  <m-form ref="form" class="mt-5" :items="formItems" v-model="formValues">
+    <template #en_name>
+      <v-btn color="primary" class="ml-3" @click="getTranslate" :loading="translateLoading">翻译</v-btn>
+    </template>
+  </m-form>
 </template>
 
 <script>
 import MForm from '@/components/MForm'
+import {
+  getTranslate
+} from '@/api'
 
 import { metadata, metadataType } from '@/utils/dataGovernance'
 import { api } from '@/api/dataGovernance'
@@ -19,6 +26,7 @@ export default {
   },
   data () {
     return {
+      translateLoading: false,
       formValues: {},
       pageInfo: {
         size: 50,
@@ -42,7 +50,8 @@ export default {
           type: 'text',
           key: 'en_name',
           label: '请输入英文名称 *',
-          rules: [v => !!v || '请输入英文名称']
+          rules: [v => !!v || '请输入英文名称'],
+          slotName: 'en_name'
         },
         {
           type: 'autocomplete',
@@ -126,6 +135,23 @@ export default {
         this.$snackbar.error(error)
       }
     },
+    async getTranslate () {
+      if (!this.formValues.name) {
+        this.$snackbar.error('请输入名称')
+        return
+      }
+      this.translateLoading = true
+      try {
+        const { data } = await getTranslate({
+          node_name: this.formValues.name
+        })
+        this.formValues.en_name = data.translated
+      } catch (error) {
+        this.$snackbar.error(error)
+      } finally {
+        this.translateLoading = false
+      }
+    },
     getValue () {
       if (!this.$refs.form.validate()) {
         return