Merge remote-tracking branch 'origin/main' into main

# Conflicts:
#	src/views/reporting/RepTemplate/components/Write.vue
main
zhangxiaodi1 9 months ago
commit b55a799331

@ -47,8 +47,8 @@ export const exportTemplateApi = (params: any) => {
return request.doExport({ url: '/RepTemplate/sdi/reporting/RepTemplate/RepTemplateExportXls', params }); return request.doExport({ url: '/RepTemplate/sdi/reporting/RepTemplate/RepTemplateExportXls', params });
}; };
/** 获取某个字典 */ /** 获取报告分类 */
export const getCsckCheckType = ({ paramName, systemCode }): Promise<IResponse> => { export const getCategory = ({ paramName, systemCode }): Promise<IResponse> => {
return request.postJson({ return request.postJson({
url: '/param/spi/param/systemparam', url: '/param/spi/param/systemparam',
data: { data: {

@ -53,4 +53,4 @@ export type FormModel = {
tDescription?: string tDescription?: string
/** 所属机构 */ /** 所属机构 */
organCode?: string organCode?: string
} }

@ -1818,7 +1818,16 @@ export const asyncRouterMap: AppRouteRecordRaw[] = [
name: 'indexClassManage', name: 'indexClassManage',
menuId: 'indexClassManage', menuId: 'indexClassManage',
meta: { meta: {
title: '指标分类管理', title: '指标分类管理'
}
},
{
path: 'indexSearchServiceMs',
component: () => import('@/views/dataset/IndexSearchServiceMs/IndexSearchServiceMs.vue'),
name: 'IndexSearchServiceMs',
menuId: 'indexSearchServiceMs',
meta: {
title: '指标查询',
alwaysShow: true, alwaysShow: true,
type:"ybt", type:"ybt",
sort:4, sort:4,

@ -27,8 +27,11 @@ import { ContentWrap } from '@/components/ContentWrap'
import Write from './components/Write.vue' import Write from './components/Write.vue'
import Detail from './components/Detail.vue' import Detail from './components/Detail.vue'
import { Dialog } from '@/components/Dialog' import { Dialog } from '@/components/Dialog'
import router from '@/router'
defineOptions({
name: 'IndexSearchServiceMs',
});
const { t } = useI18n() const { t } = useI18n()
const ids = ref<string[]>([]) const ids = ref<string[]>([])
@ -55,6 +58,10 @@ const { tableRegister, tableState, tableMethods } = useTable({
const { loading, dataList, total, currentPage, pageSize } = tableState const { loading, dataList, total, currentPage, pageSize } = tableState
const { getList, refresh } = tableMethods const { getList, refresh } = tableMethods
const lookRule = async (row: any) => {
router.push(`/dataset/indexSearchServiceMs`)
};
const tableColumns = reactive<TableColumn[]>([ const tableColumns = reactive<TableColumn[]>([
{ {
field: 'selection', field: 'selection',
@ -92,6 +99,9 @@ const tableColumns = reactive<TableColumn[]>([
default: (data: any) => { default: (data: any) => {
return ( return (
<> <>
<ElLink type="primary" underline={false} onClick={() => action(data.row, 'edit')}>
{t('tableDemo.edit')}
</ElLink>
<ElPopconfirm <ElPopconfirm
title={t('common.delTableMsg')} title={t('common.delTableMsg')}
width={200} width={200}
@ -108,7 +118,7 @@ const tableColumns = reactive<TableColumn[]>([
}} }}
onConfirm={() => delData(data.row)} onConfirm={() => delData(data.row)}
></ElPopconfirm> ></ElPopconfirm>
<ElLink type="primary" underline={false} onClick={() => action(data.row, 'detail')}> <ElLink type="primary" underline={false} onClick={() => lookRule(data.row)}>
{'查询'} {'查询'}
</ElLink> </ElLink>
</> </>

@ -23,27 +23,33 @@ const { setValues, getFormData, getElFormExpose } = formMethods
const formSchema = reactive<FormSchema[]>([ const formSchema = reactive<FormSchema[]>([
{ {
field: 'dicid', field: 'dicid',
label: '分类编号' label: '分类编号',
component: 'Input',
}, },
{ {
field: 'dicname', field: 'dicname',
label: '分类名称' label: '分类名称',
component: 'Input',
}, },
{ {
field: 'dicvalue', field: 'dicvalue',
label: '分类值' label: '分类值',
component: 'Input',
}, },
{ {
field: 'parentname', field: 'parentname',
label: '上级分类' label: '上级分类',
component: 'Input',
}, },
{ {
field: 'description', field: 'description',
label: '分类描述' label: '分类描述',
component: 'Input',
}, },
{ {
field: 'status', field: 'status',
label: '分类状态' label: '分类状态',
component: 'Input',
} }
]) ])

@ -19,7 +19,7 @@ import RuleConfig from './components/Ruleconfig.vue'
import Write from './components/Write.vue' import Write from './components/Write.vue'
import { Dialog } from '@/components/Dialog' import { Dialog } from '@/components/Dialog'
import { getWidth } from '@/utils'; import { getWidth } from '@/utils';
import { method } from 'lodash-es' import { INDEX_CATAGOTY_LIST } from './constants'
const { t } = useI18n() const { t } = useI18n()
/** /**
@ -197,7 +197,9 @@ const indexDefineSearchSchema = reactive<FormSchema[]>([
{ {
field: 'tCategory', field: 'tCategory',
label: '指标计算类型', label: '指标计算类型',
componentProps: {}, componentProps: {
options:INDEX_CATAGOTY_LIST
},
component: 'Select' component: 'Select'
}, },
{ {

@ -0,0 +1,11 @@
//指标计算类型
export const INDEX_CATAGOTY_LIST = [
{
value:"1",
label:"自动"
},
{
value:"0",
label:"手动"
},
]

@ -23,6 +23,9 @@ import { useValidator } from '@/hooks/web/useValidator'
import { getLoginOrganCodeByUserInfo } from '@/utils/auth' import { getLoginOrganCodeByUserInfo } from '@/utils/auth'
import { getOrganTree } from '@/api/common' import { getOrganTree } from '@/api/common'
defineOptions({
name: 'IndexSearchServiceMs',
});
const { t } = useI18n() const { t } = useI18n()
const { required } = useValidator(); const { required } = useValidator();
@ -64,11 +67,11 @@ const tableColumns = reactive<TableColumn[]>([
}, },
{ {
field: 'createTime', field: 'createTime',
label: '机构' label: '机构名称'
}, },
{ {
field: 'tName', field: 'tName',
label: '日期' label: '数据日期'
}, },
{ {
field: 'tCategory', field: 'tCategory',
@ -84,16 +87,17 @@ const searchSchema = reactive<FormSchema[]>([
{ {
field: 'orgCode', field: 'orgCode',
label: '机构', label: '机构',
colProps: { span: 100 },
componentProps: { componentProps: {
checkStrictly: true, checkStrictly: true,
nodeKey: 'id', nodeKey: 'key',
props: { children: 'childs', label: 'nodeName' }, props: { children: 'childrens', label: 'value' },
filterable: true, filterable: true,
multiple: true, multiple: true,
collapseTags: true, collapseTags: true,
showCheckbox: true, showCheckbox: true,
// style: { minWidth: '300px' }, style: { minWidth: '200px' },
style: 'width: 100%', //style: 'width: 100%',
checkOnClickNode: true, checkOnClickNode: true,
}, },
component: 'TreeSelect', component: 'TreeSelect',
@ -111,10 +115,13 @@ const searchSchema = reactive<FormSchema[]>([
}, },
}, },
{ {
field: 'tName', field: 'Datadate',
label: '日期', label: '日期',
componentProps: {}, componentProps: {
component: 'Input', type: 'date',
valueFormat: 'YYYYMMDD',
},
component: 'DatePicker',
formItemProps: { formItemProps: {
rules: [required()], rules: [required()],
}, },
@ -223,7 +230,7 @@ const onSelectionChange = (selection: TableData[]) => {
disabled.value = selection.length === 0 disabled.value = selection.length === 0
} }
const onContextMenu = (row: any, column: any, cell: HTMLTableCellElement, event: Event) => { const onContextMenu = (row: any, column: any, cell: HTMLTableCellElement, event: Event) => {
console.log(row,column,cell,event);
} }
@ -248,14 +255,7 @@ const onContextMenu = (row: any, column: any, cell: HTMLTableCellElement, event:
@register="tableRegister" @register="tableRegister"
@refresh="refresh" @refresh="refresh"
@cell-contextmenu="onContextMenu" @cell-contextmenu="onContextMenu"
> />
<template #buttons>
<ElButton type="primary" @click="AddAction">{{ t('tableDemo.add') }}</ElButton>
<ElButton :loading="delLoading" type="primary" :disabled="disabled" @click="delDataBatch()">
{{ t('tableDemo.del') }}
</ElButton>
</template>
</Table>
</ContentWrap> </ContentWrap>
<Dialog v-model="dialogVisible" :title="dialogTitle"> <Dialog v-model="dialogVisible" :title="dialogTitle">

@ -17,10 +17,17 @@ import { FormSchema } from '@/components/Form'
import { ContentWrap } from '@/components/ContentWrap' import { ContentWrap } from '@/components/ContentWrap'
import Write from './components/Write.vue' import Write from './components/Write.vue'
import { Dialog } from '@/components/Dialog' import { Dialog } from '@/components/Dialog'
import { getWidth } from '@/utils'; import { getWidth, transfDictList } from '@/utils';
import Detail from './components/Detail.vue' import Detail from './components/Detail.vue'
import { useValidator } from '@/hooks/web/useValidator'
import { getOrganTree } from '@/api/common'
import { getLoginOrganCodeByUserInfo } from '@/utils/auth'
import { getCategory } from '@/api/reporting/RepTemplate/RepTemplate'
const { t } = useI18n() const { t } = useI18n();
const { required } = useValidator();
//
const loginOrganCode = getLoginOrganCodeByUserInfo();
const ids = ref<string[]>([]) const ids = ref<string[]>([])
@ -92,29 +99,64 @@ const tableColumns = reactive<TableColumn[]>([
const searchSchema = reactive<FormSchema[]>([ const searchSchema = reactive<FormSchema[]>([
{ {
field: 'createTime', field: 'organCode',
label: '生成时间', label: '机构',
componentProps: {type: 'daterange'}, colProps: { span: 100 },
component: 'DatePicker' componentProps: {
checkStrictly: true,
nodeKey: 'key',
props: { children: 'childrens', label: 'value' },
filterable: true,
multiple: true,
collapseTags: true,
showCheckbox: true,
style: { minWidth: '200px' },
//style: 'width: 100%',
checkOnClickNode: true,
},
component: 'TreeSelect',
optionApi: async () => {
const res = await getOrganTree({
treeid: '1',
systemCode: 'portal',
loginOrganCode,
});
return res.body.result;
},
value: loginOrganCode,
formItemProps: {
rules: [required()],
},
}, },
{ {
field: 'tName', field: 'dataDate',
label: '报告名称', label: '日期',
componentProps: {}, componentProps: {
component: 'Input' type: 'date',
valueFormat: 'YYYYMMDD',
},
component: 'DatePicker',
formItemProps: {
rules: [required()],
},
}, },
{ {
field: 'tCategory', field: 'tCategory',
label: '报告分类', label: '报告分类',
componentProps: {}, optionApi: async () => {
component: 'Select' const res = await getCategory({ paramName: 'reportingType_param', systemCode: 'ordb' });
return transfDictList(res.body.result);
},
value: '1',
component: 'Select'
}, },
{ {
field: 'organCode', field: 'tName',
label: '所属机构', label: '报告名称',
componentProps: {}, componentProps: {},
component: 'Select' component: 'Input'
} }
]) ])
const searchParams = ref({}) const searchParams = ref({})

@ -7,19 +7,21 @@ import {
delRepTemplateApi, delRepTemplateApi,
exportTemplateApi, exportTemplateApi,
queryRepTemplateApi, queryRepTemplateApi,
getCategory,
} from '@/api/reporting/RepTemplate/RepTemplate' } from '@/api/reporting/RepTemplate/RepTemplate'
import { TableData } from '@/api/reporting/RepTemplate/RepTemplate/types' import { TableData } from '@/api/reporting/RepTemplate/RepTemplate/types'
import { useTable } from '@/hooks/web/useTable' import { useTable } from '@/hooks/web/useTable'
import { useI18n } from '@/hooks/web/useI18n' import { useI18n } from '@/hooks/web/useI18n'
import { Table, TableColumn } from '@/components/Table' import { Table, TableColumn } from '@/components/Table'
import { ElButton, ElLink, ElLoading, ElPopconfirm, ElMessage } from 'element-plus' import { ElButton, ElLink, ElLoading, ElPopconfirm, ElMessage, ElTag } from 'element-plus'
import { Search } from '@/components/Search' import { Search } from '@/components/Search'
import { FormSchema } from '@/components/Form' import { FormSchema } from '@/components/Form'
import { ContentWrap } from '@/components/ContentWrap' import { ContentWrap } from '@/components/ContentWrap'
import Write from './components/Write.vue' import Write from './components/Write.vue'
import { Dialog } from '@/components/Dialog' import { Dialog } from '@/components/Dialog'
import { getWidth } from '@/utils'; import { getWidth, transfDictList } from '@/utils';
import Detail from './components/Detail.vue' import Detail from './components/Detail.vue'
import { REPORTING_TATUS_LIST } from './constants'
const { t } = useI18n() const { t } = useI18n()
@ -75,10 +77,6 @@ const tableColumns = reactive<TableColumn[]>([
field: 'uploadUser', field: 'uploadUser',
label: '上传人' label: '上传人'
}, },
{
field: 'tStatus',
label: '状态'
},
{ {
field: 'tVersion', field: 'tVersion',
label: '版本' label: '版本'
@ -95,6 +93,19 @@ const tableColumns = reactive<TableColumn[]>([
field: 'tDescription', field: 'tDescription',
label: '描述' label: '描述'
}, },
{
field: 'tStatus',
label: '状态',
formatter:(row:Recordable,_:TableColumn) =>{
const state=REPORTING_TATUS_LIST.find((item)=>item.value===row.tStatus)
if(state&&state.value =='1'){
return <ElTag type="primary">{state.label}</ElTag>
}
else{
return <ElTag type="info">停用</ElTag>
}
}
},
{ {
field: 'action', field: 'action',
label: t('tableDemo.action'), label: t('tableDemo.action'),
@ -131,17 +142,15 @@ const tableColumns = reactive<TableColumn[]>([
].map(item => ({ minWidth: item.label ? getWidth(item.label) : 120, ...item }) as TableColumn)) ].map(item => ({ minWidth: item.label ? getWidth(item.label) : 120, ...item }) as TableColumn))
const searchSchema = reactive<FormSchema[]>([ const searchSchema = reactive<FormSchema[]>([
{
field: 'tName',
label: '名称',
componentProps: {},
component: 'Input'
},
{ {
field: 'tCategory', field: 'tCategory',
label: '报告分类', label: '报告分类',
componentProps: {}, component: 'Select',
component: 'Select' optionApi: async () => {
const res = await getCategory({ paramName: 'reportingType_param', systemCode: 'ordb' });
return transfDictList(res.body.result);
},
value: '1'
}, },
{ {
field: 'createUser', field: 'createUser',
@ -149,6 +158,12 @@ const searchSchema = reactive<FormSchema[]>([
componentProps: {}, componentProps: {},
component: 'Input' component: 'Input'
}, },
{
field: 'tName',
label: '名称',
componentProps: {},
component: 'Input'
},
{ {
field: 'createTime', field: 'createTime',
label: '上传时间', label: '上传时间',
@ -249,7 +264,6 @@ const disabled = ref(true)
const onSelectionChange = (selection: TableData[]) => { const onSelectionChange = (selection: TableData[]) => {
disabled.value = selection.length === 0 disabled.value = selection.length === 0
} }
</script> </script>
<template> <template>

@ -1,153 +1,147 @@
<script setup lang="tsx"> <script setup lang="tsx">
import { Form, FormSchema } from '@/components/Form' import { Form, FormSchema } from '@/components/Form'
import { useForm } from '@/hooks/web/useForm' import { useForm } from '@/hooks/web/useForm'
import { PropType, reactive, watch } from 'vue' import { PropType, reactive, watch } from 'vue'
import { useValidator } from '@/hooks/web/useValidator' import { useValidator } from '@/hooks/web/useValidator'
import { ElButton, ElMessage, ElMessageBox } from 'element-plus'; import { ElButton, ElMessage, ElMessageBox } from 'element-plus';
let fileChoose = null;
const { required } = useValidator()
const props = defineProps({ const { required } = useValidator()
currentRow: {
type: Object as PropType<any>,
default: () => null
},
actionType: {
type: String,
default: 'add'
}
})
const { formRegister, formMethods } = useForm() const props = defineProps({
const { setValues, getFormData, getElFormExpose } = formMethods currentRow: {
type: Object as PropType<any>,
default: () => null
},
actionType: {
type: String,
default: 'add'
}
})
const formSchema = reactive < FormSchema[] > ([ const { formRegister, formMethods } = useForm()
{ const { setValues, getFormData, getElFormExpose } = formMethods
field: 'tId',
label: '编号',
component: 'Input',
hidden: true
},
{
field: 'tCategory',
label: '报告分类',
component: 'Select',
componentProps: {
}, const formSchema = reactive<FormSchema[]>([
{
field: 'tId',
label: '编号',
component: 'Input',
hidden: true
},
{
field: 'tCategory',
label: '报告分类',
component: 'Select',
componentProps: {
}, },
{ },
field: 'createUser', {
label: '编写人', field: 'createUser',
component: 'Input', label: '编写人',
componentProps: { component: 'Input',
componentProps: {
},
}, },
{ },
field: 'tVersion', {
label: '报告版本', field: 'tVersion',
component: 'Input', label: '报告版本',
componentProps: { component: 'Input',
componentProps: {
},
}, },
{ },
field: 'tStatus', {
label: '报告状态', field: 'tStatus',
component: 'Select', label: '报告状态',
componentProps: { component: 'Select',
componentProps: {
},
}, },
{ },
field: 'tDescription', {
label: '报告描述', field: 'tDescription',
component: 'Input', label: '报告描述',
colProps: { span: 24 }, component: 'Input',
componentProps: { colProps: { span: 24 },
type: 'textarea' componentProps: {
}, type: 'textarea'
}, },
{ },
field: 'organCode', {
label: '报告模版', field: 'organCode',
component: 'Upload', label: '报告模版',
colProps: { span: 160 }, component: 'Upload',
componentProps: { colProps: { span: 160 },
limit: 1, componentProps: {
drag: true, limit: 1,
accept: ".doc,.docx", drag:true,
action: null, accept:".doc,.docx",
autoUpload:false, action: 'https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15',
multiple: false, multiple: true,
fileList: [], onPreview: (uploadFile) => {
onPreview: (uploadFile) => { console.log(uploadFile)
console.log(uploadFile) },
}, onRemove: (file) => {
onRemove: (file) => { console.log(file)
console.log(file) },
}, beforeRemove: (uploadFile) => {
beforeRemove: (uploadFile) => { return ElMessageBox.confirm(`Cancel the transfer of ${uploadFile.name} ?`).then(
return ElMessageBox.confirm(`Cancel the transfer of ${uploadFile.name} ?`).then( () => true,
() => true, () => false
() => false )
)
},
onExceed: (files, uploadFiles) => {
ElMessage.warning(
`The limit is 1, you selected ${files.length} files this time, add up to ${files.length + uploadFiles.length
} 总共`
)
},
slots: {
default: () => <div class="el-upload"><div class="el-upload__text">拖曳报告模版到这里或<em>上传报告模版</em></div></div>,
tip: () => <div class="el-upload__tip">doc,docx文件</div>,
file: (file) => {
fileChoose = file.file.raw;
console.log(file, "file信息");
}
}
}, },
} onExceed: (files, uploadFiles) => {
]) ElMessage.warning(
`The limit is 1, you selected ${files.length} files this time, add up to ${
files.length + uploadFiles.length
} 总共`
)
},
slots: {
default: () =><div class="el-upload"><div class="el-upload__text">拖曳报告模版到这里或<em>上传报告模版</em></div></div>,
tip: () => <div class="el-upload__tip">doc,docx文件</div>
}
},
}
])
const rules = reactive({ const rules = reactive({
})
const submit = async () => {
const elForm = await getElFormExpose()
const valid = await elForm?.validate().catch((err) => {
console.log(err)
}) })
if (valid) {
const submit = async () => { const formData = await getFormData()
const elForm = await getElFormExpose() return formData
const valid = await elForm?.validate().catch((err) => {
console.log(err)
})
if (valid) {
const formData = await getFormData()
formData.file = fileChoose;
console.log(formData);
return formData
}
} }
}
watch( watch(
() => props.currentRow, () => props.currentRow,
(currentRow) => { (currentRow) => {
if (!currentRow) return if (!currentRow) return
setValues(currentRow) setValues(currentRow)
}, },
{ {
deep: true, deep: true,
immediate: true immediate: true
} }
) )
defineExpose({ defineExpose({
submit submit
}) })
</script> </script>
<template> <template>
<Form :rules="rules" @register="formRegister" :schema="formSchema" /> <Form :rules="rules" @register="formRegister" :schema="formSchema" />
</template> </template>

@ -0,0 +1,11 @@
//报告状态选择列表
export const REPORTING_STATUS_LIST = [
{
value:"1",
label:"启用"
},
{
value:"0",
label:"停用"
},
]
Loading…
Cancel
Save