Bladeren bron

元数据-创建审核记录

Xiao_123 1 week geleden
bovenliggende
commit
efecfa8b3c

+ 4 - 0
src/api/dataGovernance.js

@@ -27,6 +27,10 @@ const metadata = {
   // 元数据图谱
   getMetaDataGraph: (param) => {
     return http.post('/meta/node/graph', param)
+  },
+  // 创建审核记录
+  createAuditRecord: (param) => {
+    return http.post('/meta/review/create', param)
   }
 }
 

+ 196 - 0
src/views/dataGovernance/metadata/components/addAudit.vue

@@ -0,0 +1,196 @@
+<template>
+   <div>
+    <MForm ref="form" class="mt-5" :items="formItems" v-model="formValues"></MForm>
+    <MCard title="候选元数据" class="mt-3">
+      <template #title>
+        <div style="width: 300px; font-weight: normal;">
+          <v-text-field
+            v-model="search"
+            placeholder="输入中文名称回车查找"
+            outlined
+            hide-details
+            dense
+            clearable
+            append-icon="mdi-magnify"
+            @click:append="handleSearch"
+            @keyup.enter="handleSearch"
+            @click:clear="handleSearch(true)"
+          ></v-text-field>
+        </div>
+      </template>
+      <TableList
+        ref="table"
+        :loading="loading"
+        :headers="headers"
+        :items="items"
+        :total="total"
+        :singleSelect="true"
+        height="400px"
+        :select-item="true"
+        fixed-header
+        :page-info="pageInfo"
+        :is-tools="false"
+        :show-select="true"
+        :disable-sort="true"
+        @pageHandleChange="pageHandleChange"
+        @selected="handleSelected"
+      >
+      </TableList>
+    </MCard>
+  </div>
+</template>
+
+<script>
+import MForm from '@/components/MForm'
+import MCard from '@/components/MCard'
+import TableList from '@/components/List/table'
+import { api } from '@/api/dataGovernance'
+
+export default {
+  name: 'metadata-add-audit',
+  components: { MCard, TableList, MForm },
+  props: {
+    itemData: {
+      type: Object,
+      default: () => ({})
+    }
+  },
+  data () {
+    return {
+      search: null,
+      pageInfo: {
+        size: 10,
+        current: 1
+      },
+      total: 0,
+      loading: false,
+      items: [],
+      headers: [
+        { text: '中文名称', value: 'name_zh' },
+        { text: '英文名称', value: 'name_en' },
+        { text: '数据类型', value: 'data_type' }
+      ],
+      formValues: {
+        name_zh: null,
+        source: 'manual',
+        notes: null,
+        record_type: null,
+        meta1: {},
+        meta2: {}
+      }
+    }
+  },
+  computed: {
+    formItems () {
+      return [
+        {
+          type: 'text',
+          key: 'name_zh',
+          disabled: true,
+          label: '主元数据 *',
+          col: 6
+        },
+        {
+          type: 'text',
+          key: 'source',
+          value: 'manual',
+          label: '请选择触发来源 *',
+          col: 6
+        },
+        {
+          type: 'autocomplete',
+          key: 'record_type',
+          label: '请选择审核记录类型 *',
+          items: [{ label: '疑似重复', value: 'redundancy' }, { label: '疑似变动', value: 'change' }, { label: '合并请求', value: 'merge' }],
+          col: 6,
+          rules: [v => !!v || '请选择审核记录类型']
+        },
+        {
+          type: 'text',
+          key: 'notes',
+          label: '请输入备注',
+          col: 6
+        }
+      ]
+    }
+  },
+  created () {
+    this.init()
+    if (!Object.keys(this.itemData).length) {
+      return
+    }
+    this.formValues.name_zh = this.itemData.name_zh
+    this.formValues.meta1 = {
+      id: this.itemData.id,
+      name_zh: this.itemData.name_zh,
+      name_en: this.itemData.name_en,
+      data_type: this.itemData.data_type,
+      status: this.itemData.status
+    }
+  },
+  methods: {
+    async init () {
+      try {
+        this.loading = true
+        try {
+          const { data } = await api.getMetaDataList({
+            ...this.pageInfo,
+            name_zh: this.search
+          })
+          this.items = data.records
+          this.total = data.total
+        } catch (error) {
+          this.$snackbar.error(error)
+        } finally {
+          this.loading = false
+        }
+      } catch (error) {
+        this.$snackbar.error(error)
+      }
+    },
+    pageHandleChange (index) {
+      this.pageInfo.current = index
+      this.init()
+    },
+    handleSearch (clear) {
+      if (clear === true) {
+        this.search = null
+      }
+      this.pageInfo.current = 1
+      this.init()
+    },
+    handleSelected (selected) {
+      if (!selected || !selected.length) {
+        this.formValues.meta2 = {}
+        return
+      }
+      const item = selected[0]
+      if (item.id === this.itemData.id) {
+        this.$snackbar.warning('候选元数据不能与主元数据相同')
+        return
+      }
+      this.formValues.meta2 = {
+        id: item.id,
+        name_zh: item.name_zh,
+        name_en: item.name_en,
+        data_type: item.data_type,
+        status: item.status
+      }
+    },
+    getValue () {
+      if (!this.$refs.form.validate()) {
+        return
+      }
+      const { name_zh: nameZh, ...rest } = this.formValues
+      return {
+        ...rest
+      }
+    }
+  }
+
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 59 - 4
src/views/dataGovernance/metadata/index.vue

@@ -36,12 +36,18 @@
           text
           :disabled="loading"
           color="primary"
-          @click="handleEdit(item)">编辑</v-btn>
+          @click="handleEdit(item)"
+        >
+          编辑
+        </v-btn>
         <v-btn
           text
           :disabled="loading"
           color="error"
-          @click="handleDelete(item.id)">删除</v-btn>
+          @click="handleDelete(item.id)"
+        >
+          删除
+        </v-btn>
         <v-btn
           text
           :disabled="loading"
@@ -50,12 +56,29 @@
         >
           {{ item.status ? '禁用' : '启用' }}
         </v-btn>
+        <v-btn
+          text
+          color="indigo"
+          @click="handleAddAudit(item)"
+        >
+          添加审核
+        </v-btn>
       </template>
     </table-list>
 
     <edit-dialog :visible.sync="show" :title="title" @submit="handleSubmit">
       <edit v-if="show" v-loading="submitLoading" ref="form" class="mt-5" :item-data="itemData"></edit>
     </edit-dialog>
+
+    <edit-dialog
+      :visible.sync="showAudit"
+      title="疑似元数据添加审核"
+      width-type="0"
+      @submit="handleAuditSubmit"
+      @close="handleAuditClose"
+    >
+      <add-audit v-if="showAudit" ref="formAudit" :item-data="itemDataAudit"></add-audit>
+    </edit-dialog>
   </div>
 </template>
 
@@ -64,16 +87,18 @@ import FilterList from '../components/Filter'
 import TableList from '@/components/List/table'
 import EditDialog from '@/components/Dialog'
 import Edit from './components/edit'
+import AddAudit from './components/addAudit'
 
 import { api } from '@/api/dataGovernance'
 export default {
   name: 'meta-data',
-  components: { FilterList, TableList, EditDialog, Edit },
+  components: { FilterList, TableList, EditDialog, Edit, AddAudit },
   data () {
     return {
       submitLoading: false,
       show: false,
       loading: false,
+      showAudit: false,
       headers: [
         { text: '中文名', value: 'name_zh' },
         { text: '英文名', value: 'name_en' },
@@ -93,7 +118,8 @@ export default {
       },
       query: {},
       orders: [],
-      itemData: {}
+      itemData: {},
+      itemDataAudit: {} // 审核记录信息
     }
   },
   computed: {
@@ -196,6 +222,35 @@ export default {
     pageHandleChange (index) {
       this.pageInfo.current = index
       this.init()
+    },
+    // 添加审核
+    handleAddAudit (item) {
+      this.itemDataAudit = item
+      this.showAudit = true
+    },
+    handleAuditClose () {
+      this.showAudit = false
+      this.itemDataAudit = {}
+    },
+    async handleAuditSubmit () {
+      const obj = this.$refs.formAudit.getValue()
+      if (!obj) {
+        return this.$snackbar.warning('请将信息填写完整后再提交')
+      }
+      if (!obj.meta2 || !Object.keys(obj.meta2).length) {
+        return this.$snackbar.warning('请选择候选元数据')
+      }
+      if (obj.meta1.id === obj.meta2.id) {
+        return this.$snackbar.warning('候选元数据不能与主元数据相同')
+      }
+      try {
+        await api.createAuditRecord(obj)
+        this.$snackbar.success('审核记录创建成功')
+        this.handleAuditClose()
+        this.init()
+      } catch (error) {
+        this.$snackbar.error(error)
+      }
     }
   }
 }