From b77aacb8127a5b18aacfd8279f7a13b88fd13653 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8E=E9=98=94?= Date: Wed, 20 Nov 2024 20:27:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=95=B0=E6=8D=AE=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E7=9A=84=E6=A0=B7=E5=BC=8F=E5=B7=B2=E7=BB=8F=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/dataset/RepStore/index.ts | 14 + src/views/dataset/RepStore/RepStore.vue | 14 +- .../dataset/RepStore/components/Detail.vue | 52 ++- .../dataset/RepStore/components/Write.vue | 308 ++++++++++++++---- src/views/dataset/RepStore/constants.ts | 47 ++- .../RepStoreMapping/RepStoreMapping.vue | 6 +- 6 files changed, 344 insertions(+), 97 deletions(-) diff --git a/src/api/dataset/RepStore/index.ts b/src/api/dataset/RepStore/index.ts index 33984df..6134f4c 100644 --- a/src/api/dataset/RepStore/index.ts +++ b/src/api/dataset/RepStore/index.ts @@ -61,3 +61,17 @@ export const getCsckCheckType = ({ paramName, systemCode }): Promise }); }; +/* 获取数据源列表 */ +export const RepStoreGeyDataSource = (params: any) => { + return request.postJson({url:'/RepStore/spi/dataset/RepStore/RepStoreGeyDataSource', params }) +} + +//获取schema +export const RepStoreGeySchema = (params: any) => { + return request.postJson({url:'/RepStore/spi/dataset/RepStore/RepStoreGeySchema', params }) +} + +//获取数据库表信息 +export const RepStoreGeyTables = (params: any) => { + return request.postJson({url:'/RepStore/spi/dataset/RepStore/RepStoreGeyTables', params }) +} diff --git a/src/views/dataset/RepStore/RepStore.vue b/src/views/dataset/RepStore/RepStore.vue index 847c6f1..691484f 100644 --- a/src/views/dataset/RepStore/RepStore.vue +++ b/src/views/dataset/RepStore/RepStore.vue @@ -80,9 +80,9 @@ const tableColumns = reactive([ field: 'storeType', label: '规则类型', slots:{ - default:(data:any)=>{ - return {RULE_TYPE_LIST[data.row.storeType -1]?.label} - } + default:(data:any)=>{ + return {RULE_TYPE_LIST[data.row.storeType -1]?.label} + } } }, { @@ -101,8 +101,9 @@ const tableColumns = reactive([ { field: 'action', label: t('tableDemo.action'), - width: 240, + width: 220, fixed: 'right', + headerAlign:"center", slots: { default: (data: any) => { return ( @@ -231,11 +232,12 @@ const save = async () => { if (formData) { saveLoading.value = true const res = await saveRepStoreApi(formData) - .catch(() => {}) + .catch(() => {ElMessage.error('保存失败!');}) .finally(() => { saveLoading.value = false }) if (res) { + ElMessage.success(res.head.code == '0'?'保存成功':res.head.msg); dialogVisible.value = false currentPage.value = 1 getList() @@ -308,7 +310,7 @@ const exportExcel = async () => { - + ([ - { - field: 'modelCode', - label: '模型编码 ' - }, - { - field: 'beginDate', - label: '开始日期' - }, - { - field: 'endDate', - label: '结束日期' - }, { field: 'dscode', - label: '数据源' - }, - { - field: 'storeType', - label: '规则类型' + label: '数据源', }, { - field: 'storeContent', - label: '规则内容' + field: 'redscode', + label: '备份数据源' }, { field: 'storeOperateType', - label: '操作类型' + label: '操作类型', }, { - field: 'ruleId', - label: '存储规则id' + field: 'storeType', + label: '类型', }, { field: 'schema', - label: '数据库用户' + label: 'schema', }, { - field: 'tableName', - label: '表名' + field:"tableName", + label:'数据表', }, { field: 'validateResultTable', - label: '校验结果表的表名' + label: '校验结果表', }, { - field: 'dataRule', - label: '数据规则' + field:"storeContent", + label:"数据集合", }, { - field: 'redscode', - label: '备份数据源' - } + field: 'beginDate', + label: '开始日期' + }, + { + field: 'endDate', + label: '结束日期' + }, + + ]) defineProps({ diff --git a/src/views/dataset/RepStore/components/Write.vue b/src/views/dataset/RepStore/components/Write.vue index a47ff0b..8d78e17 100644 --- a/src/views/dataset/RepStore/components/Write.vue +++ b/src/views/dataset/RepStore/components/Write.vue @@ -3,7 +3,8 @@ import { Form, FormSchema } from '@/components/Form' import { useForm } from '@/hooks/web/useForm' import { PropType, reactive, watch } from 'vue' import { useValidator } from '@/hooks/web/useValidator' -import { OPERATION_TYPE_LIST,RULE_TYPE_LIST } from '../constants'; +import { OPERATION_TYPE_LIST,RULE_TYPE_LIST,getRepStoreGeyDataSource,getRepStoreGeySchema,getRepStoreGeyTables } from '../constants'; +import {ref} from "vue" const { required } = useValidator() @@ -21,124 +22,313 @@ const props = defineProps({ const { formRegister, formMethods } = useForm() const { setValues, getFormData, getElFormExpose } = formMethods +let gradeShow = ref(true);//下面的三个高级选项是否隐藏 +//当前选中的数据源信息 +let dataSource = reactive({ + dscode:'', + dsname:'', +}); const formSchema = reactive([ { - field: 'modelCode', - label: '模型编码 ', - component: 'Input', + field: '', + label: '基础信息 ', + component: 'Divider', + }, + { + field: 'dscode', + label: '数据源', + component: 'Select', + colProps:{ + span:24 + }, componentProps: { - + on:{ + change:async (value)=>{ + dataSource = value?formSchema[1].componentProps.options.find(item=>item.dscode==value):{}; + if(dataSource.dscode){ + formSchema[5].componentProps.options = await getRepStoreGeySchema(dataSource)?await getRepStoreGeySchema(dataSource):[]; + formSchema[6].componentProps.options = await getRepStoreGeyTables(dataSource)?await getRepStoreGeyTables(dataSource):[]; + } + // formSchema.find(item=>item.field=='schema')?.componentProps.optionsApi = async ()=>{return await getRepStoreGeySchema(dataSource);} + // formSchema.find(item=>item.field=='tableName')?.componentProps.optionsApi = async ()=>{return await getRepStoreGeyTables(dataSource);} + } + } + }, + optionApi: async ()=>{return await getRepStoreGeyDataSource()} + }, + { + field: 'redscode', + label: '备份数据源', + component: 'Select', + colProps:{ + span:24 + }, + optionApi: async ()=>{return await getRepStoreGeyDataSource()} + }, + { + field: 'storeOperateType', + label: '操作类型', + component: 'Select', + colProps:{ + span:24 + }, + componentProps: { + options:OPERATION_TYPE_LIST, + style:{width:'100%'}, + }, + value:'1' + }, + { + field: 'storeType', + label: '类型', + component: 'Select', + colProps:{ + span:24 + }, + componentProps: { + options:RULE_TYPE_LIST, + style:{width:'100%'}, }, + value:'1' + }, + { + field: 'schema', + label: 'schema', + colProps:{ + span:24 + }, + component: 'Select', + componentProps:{ + options:[] + } }, { - field: 'ruleId', - label: '存储规则id', - component: 'Input', + field:"tableName", + label:'数据表', + colProps:{ + span:24 + }, + component: 'Select', + componentProps:{ + options:[] + } + }, + { + field: 'validateResultTable', + label: '校验结果表', + component: 'Select', + colProps:{ + span:24 + }, componentProps: { }, }, { - field: 'beginDate', - label: '开始日期', - component: 'DatePicker', + field:"storeContent", + label:"数据集合", + component:"Input", + colProps:{ + span:24 + }, componentProps: { - valueFormat: 'YYYYMMDD', - style:{width:'100%'} + type:'textarea', }, }, { - field: 'endDate', - label: '结束日期', - component: 'DatePicker', + field:"date", + label:'日期', + component:"DatePicker", + colProps:{ + span:24 + }, componentProps: { - valueFormat: 'YYYYMMDD', - style:{width:'100%'} + type:'daterange', + style:{width:'100%'}, + valueFormat:'YYYYMMDD', + rangeSeparator:'到', }, }, + // { + // field: 'beginDate', + // label: '开始日期', + // component: 'DatePicker', + // componentProps: { + // valueFormat: 'YYYYMMDD', + // style:{width:'100%'} + // }, + // }, + // { + // field: 'endDate', + // label: '结束日期', + // component: 'DatePicker', + // componentProps: { + // valueFormat: 'YYYYMMDD', + // style:{width:'100%'} + // }, + // }, { - field: 'dscode', - label: '数据源', - component: 'Input', + field:"controlShowGrade", + label: `高级(点击${gradeShow.value?'展开':'收起'})`, + component:"Divider", + componentProps:{ + contentPosition:"center", + borderStyle :'dashed', + style:{ + fontSize:"20px !important", + color:'rgb(29 127 29) !important', + }, + onClick:()=>{ + gradeShow.value = !gradeShow.value; + formSchema.forEach(item=>{ + if(item.field == 'controlShowGrade'){ + item.label = `高级(点击${gradeShow.value?'展开':'收起'})`; + } + for(let i in item){ + if(i == 'remove' || i == 'hidden'){ + item[i] = gradeShow.value; + } + } + }) + }, + class:'cursor-pointer' + }, + }, + { + field:"", + label:"校验结果信息", + component:"Divider", + remove:gradeShow.value + }, + { + field:"chkDscode", + label:"校验结果信息数据源", + component:"Select", + colProps:{ + span:24 + }, componentProps: { }, + hidden:gradeShow.value }, { - field: 'storeType', - label: '规则类型', - component: 'Select', + field:"chkSchema", + label:"schema", + component:"Select", + colProps:{ + span:24 + }, componentProps: { - options:RULE_TYPE_LIST, - style:{width:'100%'}, + }, - value:'1' + hidden:gradeShow.value }, { - field: 'storeContent', - label: '规则内容', - component: 'Input', + field:"chkTablename", + label:"物理表", + component:"Select", + colProps:{ + span:24 + }, componentProps: { }, + hidden:gradeShow.value }, { - field: 'storeOperateType', - label: '操作类型', - component: 'Select', + field:"", + label:"日志数据", + component:"Divider", + remove:gradeShow.value + }, + { + field:"logDscode", + label:"校验结果信息数据源", + component:"Select", + colProps:{ + span:24 + }, componentProps: { - options:OPERATION_TYPE_LIST, - style:{width:'100%'}, + }, - value:'1' + hidden:gradeShow.value }, { - field: 'schema', - label: '数据库用户', - component: 'Input', + field:"logSchema", + label:"schema", + component:"Select", + colProps:{ + span:24 + }, componentProps: { }, + hidden:gradeShow.value }, { - field: 'tableName', - label: '表名', - component: 'Input', + field:"logTablename", + label:"物理表", + component:"Select", + colProps:{ + span:24 + }, componentProps: { }, + hidden:gradeShow.value }, { - field: 'validateResultTable', - label: '校验结果表的表名', - component: 'Input', + field:"", + label:"抽样数据", + component:"Divider", + remove:gradeShow.value + }, + { + field:"resDscode", + label:"校验结果信息数据源", + component:"Select", + colProps:{ + span:24 + }, componentProps: { }, + hidden:gradeShow.value }, { - field: 'dataRule', - label: '数据规则', - component: 'Input', + field:"resSchema", + label:"schema", + component:"Select", + colProps:{ + span:24 + }, componentProps: { }, + hidden:gradeShow.value }, { - field: 'redscode', - label: '备份数据源', - component: 'Input', + field:"resTablename", + label:"物理表", + component:"Select", + colProps:{ + span:24 + }, componentProps: { }, - } + hidden:gradeShow.value + }, ]) const rules = reactive({ - modelCode: [required()], - beginDate: [required()], - endDate: [required()], - ruleId: [required()], + dscode: [required()],//数据源不能为空 + storeType:[required()],//操作类型不能为空 + storeOperateType:[required()],//类型不能为空 + storeContent:[required()],//数据集合不能为空 + date:[required()],//日期不能为空 + }) const submit = async () => { @@ -147,7 +337,11 @@ const submit = async () => { console.log(err) }) if (valid) { - const formData = await getFormData() + const formData = await getFormData(); + if(formData.date){ + formData.beginDate = formData.date[0]; + formData.endDate = formData.date[1]; + } return formData } } diff --git a/src/views/dataset/RepStore/constants.ts b/src/views/dataset/RepStore/constants.ts index a4cf51e..fe720a6 100644 --- a/src/views/dataset/RepStore/constants.ts +++ b/src/views/dataset/RepStore/constants.ts @@ -1,3 +1,8 @@ +import { + RepStoreGeyDataSource, + RepStoreGeySchema, + RepStoreGeyTables + } from '@/api/dataset/RepStore' export const OPERATION_TYPE_LIST = [//操作类型,1表,2sql { value:"1", @@ -18,4 +23,44 @@ export const RULE_TYPE_LIST = [//规则类型 1只读,2读写) value:"2", label:"读写" } -] \ No newline at end of file +] + +//获取数据源 +export async function getRepStoreGeyDataSource(){ + let DATASOURCE_LIST = []; + await RepStoreGeyDataSource({}).then(res=>{ + if(res.head.code == 0){ + DATASOURCE_LIST = res.body.list; + DATASOURCE_LIST = DATASOURCE_LIST.map(item=>{ + return { + ...item, + value:item.dscode, + label:item.dsname + } + }) + } + }) + return DATASOURCE_LIST; +} + +//获取schema +export async function getRepStoreGeySchema(params){ + let SCHEMA_LIST = []; + await RepStoreGeySchema(params).then(res=>{ + if(res.head.code == 0){ + SCHEMA_LIST = res.body.list; + } + }) + return SCHEMA_LIST; +} +//获取数据表 + +export async function getRepStoreGeyTables(params){ + let TABLE_LIST = []; + await RepStoreGeyTables(params).then(res=>{ + if(res.head.code == 0){ + TABLE_LIST = res.body.list; + } + }) + return TABLE_LIST; +} diff --git a/src/views/dataset/RepStoreMapping/RepStoreMapping.vue b/src/views/dataset/RepStoreMapping/RepStoreMapping.vue index 2407ad8..41d2b3f 100644 --- a/src/views/dataset/RepStoreMapping/RepStoreMapping.vue +++ b/src/views/dataset/RepStoreMapping/RepStoreMapping.vue @@ -121,8 +121,9 @@ const tableColumns = reactive([ { field: 'action', label: t('tableDemo.action'), - width: 160, + width: 120, fixed: 'right', + headerAlign:'center', slots: { default: (data: any) => { return ( @@ -232,11 +233,12 @@ const save = async () => { if (formData) { saveLoading.value = true const res = await saveRepStoreMappingApi(formData) - .catch(() => {}) + .catch(() => {ElMessage.warning('保存失败')}) .finally(() => { saveLoading.value = false }) if (res) { + ElMessage.success(res.head.code == '0'?'保存成功':res.head.msg); dialogVisible.value = false currentPage.value = 1 getList()