Forráskód Böngészése

报表保存优化

hsh 2 éve
szülő
commit
6afe811a3a

+ 9 - 0
src/api/target-management/report-dict.js

@@ -53,4 +53,13 @@ export function selectReportLevel(data) {
         method: 'post',
         data,
     })
+}
+
+// 保存指标报表基本信息
+export function saveReportBaseInfo(data) {
+    return request({
+        url: '/targetManagement/saveReportBaseInfo',
+        method: 'post',
+        data,
+    })
 }

+ 27 - 47
src/views/target-management/target-dict/TargetDictInfo.vue

@@ -6,10 +6,10 @@
         <el-col :span="16">
             <PageLayer>
                 <template #header class="hd-cl">
-                    <el-date-picker v-model="queryParam.startTime" type="date" label="选择时间" placeholder="选择时间"
-                        format="YYYY-MM-DD" value-format="YYYY-MM-DD" />
-                    <el-date-picker v-model="queryParam.endTime" type="date" label="选择时间" placeholder="选择时间"
-                        format="YYYY-MM-DD" value-format="YYYY-MM-DD" />
+                    <el-date-picker v-model="queryParam.startTime" type="year" label="选择开始年份" placeholder="选择年份"
+                        format="YYYY" value-format="YYYY" />
+                    <el-date-picker v-model="queryParam.endTime" type="year" label="选择结束年份" placeholder="选择年份" format="YYYY"
+                        value-format="YYYY" />
                     <el-select-v2 ref="deptInfoRef" v-model="queryParam.deptId" clearable remote filterable
                         :remote-method="deptMethod" :options="deptWardList" />
                     <el-input v-model="queryParam.calcChild" v-if="isShowSql"></el-input>
@@ -32,21 +32,20 @@
                             <el-input v-model="targetForm.scoreRule" type="textarea" />
                         </el-form-item>
                         <el-row>
-                            <el-col :span="8">
-                                <el-form-item label="公式-分子结果" prop="childResult">
-                                    <el-input v-model="targetForm.childResult" type="textarea" />
-                                </el-form-item>
-                            </el-col>
-                            <el-col :span="8">
-                                <el-form-item label="公式-分母结果" prop="momResult">
-                                    <el-input v-model="targetForm.momResult" type="textarea" />
-                                </el-form-item>
-                            </el-col>
-                            <el-col :span="8">
-                                <el-form-item label="分子/分母-结果" prop="calcResult">
-                                    <el-input v-model="targetForm.calcResult" type="textarea" />
-                                </el-form-item>
-                            </el-col>
+                            <el-table :data="QtResultData" stripe border highlight-current-row row-key="childKey"
+                                height="200" style="width: 100%">
+                                <el-table-column prop="year" label="年份" header-align="center" />
+                                <el-table-column prop="dataType" label="数据方式" header-align="center">
+                                    <template #default="scope">
+                                        {{ scope.row.dataType == '1' ? 'sql统计' : '手动输入' }}
+                                    </template>
+                                </el-table-column>
+                                <el-table-column prop="childResult" label="分子结果" header-align="center" />
+                                <el-table-column prop="momResult" label="分母结果" header-align="center" />
+                                <el-table-column prop="calcResult" label="计算结果" header-align="center" />
+                                <el-table-column prop="op" label="统计人员" header-align="center" />
+                                <el-table-column prop="opTime" label="统计时间" header-align="center" width="200" />
+                            </el-table>
                         </el-row>
                     </el-form>
                     <el-divider />
@@ -68,11 +67,9 @@ import { ref, reactive, onMounted, nextTick } from 'vue'
 import TargetTree from '../target-comm/targetTree.vue'
 import PageLayer from '../../../layout/PageLayer.vue'
 import { ElMessage } from 'element-plus'
-import { formatDate } from '../../../utils/date'
-import { seltYearAndNowLast } from '../../../data/shortcuts'
 import type { FormInstance } from 'element-plus'
 import { selectTargetDict, selectTargetDictTree } from '../../../api/target-management/target-dict'
-import { targetSqlExecuteById, selectTargetSql } from '../../../api/target-management/target-sql'
+import { selectTargetReportResult, selectTargetSql } from '../../../api/target-management/target-sql'
 import { queryDept } from '../../../api/public-api'
 
 const targetTreeData = ref({
@@ -83,8 +80,6 @@ const targetTreeData = ref({
 const isShowTree = ref(false)
 const isShowForm = ref(true)
 const isShowSql = ref(false)
-const start = formatDate(seltYearAndNowLast[0].value[0])
-const end = formatDate(seltYearAndNowLast[1].value[1])
 const deptWardList = ref([])
 const formSize = ref('default')
 const ruleFormRef = ref<FormInstance>()
@@ -136,15 +131,10 @@ const targetForm = ref({
     calcMom: '', // 计算-分母
     childId: '', // 分子报表id
     momId: '', // 分母报表id
-    childResult: '', // 计算分子结果
-    momResult: '', // 计算分母结果
-    calcResult: '' // 计算结果
 })
 
 onMounted(() => {
     nextTick(() => {
-        queryParam.startTime = start + ' 00:00:00'
-        queryParam.endTime = end + ' 23:59:59'
         qeryTargetDictTree()
         deptMethod('')
     })
@@ -177,35 +167,25 @@ const treeNodeClick = async (data: any, node: any, obj: any) => {
         let selectTargetSqlRes = await selectTargetSql(queryParam)
         let { reportChild } = selectTargetSqlRes
         let { reportMom } = selectTargetSqlRes
-        if(reportChild){
+        if (reportChild) {
             targetForm.value.calcChild = reportChild.baseSql
             queryParam.calcChild = reportChild.baseSql
         }
-        if(reportMom){
+        if (reportMom) {
             targetForm.value.calcMom = reportMom.baseSql
             queryParam.calcMom = reportMom.baseSql
         }
-
+        selectTargetDictInfo()
     }
 }
 
+let QtResultData = ref([])
 const selectTargetDictInfo = async () => {
-    if (!queryParam.startTime) {
-        ElMessage({
-            message: '请选择时间!',
-            type: 'warning',
-            duration: 2500,
-            showClose: true,
-        })
-        return
-    }
-
     // 查询指标结果
-    let targetSqlExecuteRes = await targetSqlExecuteById(queryParam)
-    let r = JSON.parse(JSON.stringify(targetSqlExecuteRes))
-    targetForm.value.childResult = r.r1
-    targetForm.value.momResult = r.r2
-    targetForm.value.calcResult = r.r3
+    selectTargetReportResult(queryParam)
+        .then((res: any) => {
+            QtResultData.value = res
+        });
 
     // 查询指标分子,分母明细结果(默认查询分子)
     // let selectTargetSqlDetialRes = await selectTargetSqlDetail(queryParam)

+ 94 - 41
src/views/target-management/target-dict/TargetReportConfig.vue

@@ -19,7 +19,7 @@
                 </template>
                 <template #main>
                     <el-form ref="ruleFormRef" :model="reportForm" :rules="rules" label-width="120px" class="demo-ruleForm"
-                        :size="formSize" status-icon :disabled="isShowForm">
+                        :size="formSize" status-icon :disabled="isDisabledForm">
                         <el-row>
                             <el-col :span="12">
                                 <el-form-item label="报表名称" prop="reportName">
@@ -36,7 +36,7 @@
                                 <el-form-item label="报表类型" prop="reportType">
                                     <!-- <el-input v-model="reportForm.reportType" minlength="1" maxlength="12"
                                         show-word-limit /> -->
-                                    <el-select v-model="reportForm.reportType" placeholder="请选择报表类型" clearable>
+                                    <el-select v-model="reportForm.reportType" placeholder="请选择报表类型">
                                         <el-option v-for="item in reportTypeList" :key="item.reportType"
                                             :label="item.reportLabel" :value="item.reportType">
                                             <span style="float: left">{{ item.reportType }}</span>
@@ -73,12 +73,14 @@
                         <el-row>
                             <el-col :span="6">
                                 <el-form-item label="菜单id" prop="menuId">
-                                    <el-input v-model="reportForm.menuId" minlength="0" maxlength="12" show-word-limit />
+                                    <el-input v-model.number="reportForm.menuId" minlength="0" maxlength="12"
+                                        show-word-limit />
                                 </el-form-item>
                             </el-col>
                             <el-col :span="6">
                                 <el-form-item label="面板排序" prop="sort">
-                                    <el-input v-model="reportForm.sort" minlength="0" maxlength="12" show-word-limit />
+                                    <el-input v-model.number="reportForm.sort" minlength="0" maxlength="12"
+                                        show-word-limit />
                                 </el-form-item>
                             </el-col>
                             <el-col :span="12">
@@ -143,8 +145,8 @@
                         </el-row>
                     </el-form>
                     <el-dialog v-model="showReportLevel" :close-on-click-modal="false" :close-on-press-escape="false"
-                        :title="reportLevelTitle" width="80%" height="80%">
-                        <ReportLevel :setlinfo="reportLevelDetail" />
+                        :title="reportLevelTitle" width="80%" height="70%">
+                        <ReportLevel :reportLevelDetail="reportLevelDetail" />
                     </el-dialog>
                 </template>
             </PageLayer>
@@ -158,7 +160,7 @@ import PageLayer from '../../../layout/PageLayer.vue'
 import { ElMessage } from 'element-plus'
 import { formatDate } from '../../../utils/date'
 import type { FormInstance, FormRules } from 'element-plus'
-import { selectReportDictTree, selectReportDict, selectReportType, reportSqlExecute, selectReportLevel } from '../../../api/target-management/report-dict'
+import { selectReportDictTree, selectReportDict, selectReportType, reportSqlExecute, selectReportLevel, saveReportBaseInfo } from '../../../api/target-management/report-dict'
 import ReportLevel from '../target-comm/ReportLevel.vue'
 import { queryDept } from '../../../api/public-api'
 
@@ -168,7 +170,8 @@ const reportTreeData = ref({
 })
 
 const isShowTree = ref(false)
-const isShowForm = ref(false)
+// 是否开启Form表单编辑
+const isDisabledForm = ref(false)
 const deptWardList = ref([])
 const nowDay = new Date()
 const ds = formatDate(nowDay)
@@ -232,6 +235,26 @@ onMounted(() => {
     })
 })
 
+const rules = $ref<FormRules>({
+    reportId: [
+        { required: true, message: '请填写报表id', trigger: 'blur' },
+        { min: 1, max: 12, message: '报表id长度范围1-12个字符', trigger: 'blur' },
+    ],
+    reportName: [
+        { required: true, message: '请填写报表名称', trigger: 'blur' },
+        { min: 1, max: 256, message: '报表名称长度范围1-256个字符', trigger: 'blur' },
+    ],
+    reportType: [
+        { required: true, message: '请填写报表类型', trigger: 'blur' },
+    ],
+    gatherSql: [
+        { required: true, message: '请填写聚合函数sql', trigger: 'blur' },
+    ],
+    baseSql: [
+        { required: true, message: '请填写基础sql', trigger: 'blur' },
+    ],
+})
+
 // 查询指标字典树
 const queryReportDictTree = () => {
     isShowTree.value == true ? false : true
@@ -265,9 +288,12 @@ const treeNodeClick = async (data: any, node: any, obj: any) => {
             });
             return
         } else {
-            if (!isShowForm.value) {
-                isShowForm.value = true
+            if (!isDisabledForm.value) {
+                isDisabledForm.value = true
             }
+            ruleFormRef.value?.resetFields()
+            sqlForm.calcResult = ''
+
             // 查询指标字典
             let selectReportDictRes = await selectReportDict(queryParam)
             reportForm = selectReportDictRes[0]
@@ -279,11 +305,14 @@ const treeNodeClick = async (data: any, node: any, obj: any) => {
 const addForm = (formEl: FormInstance | undefined) => {
     if (!formEl) return
 
-    if (isShowForm.value) {
-        isShowForm.value = false
+    if (isDisabledForm.value) {
+        isDisabledForm.value = false
     }
 
     formEl.resetFields()
+    reportForm = {}
+    ruleFormRef.value?.resetFields()
+    sqlForm.calcResult = ''
 
 }
 
@@ -291,50 +320,75 @@ const addForm = (formEl: FormInstance | undefined) => {
 const editForm = (formEl: FormInstance | undefined) => {
     if (!formEl) return
 
+    if (isDisabledForm.value) {
+        isDisabledForm.value = false
+    }
+
 }
 
 // ---------- 保存报表 ------------
 const submitForm = async (formEl: FormInstance | undefined) => {
     if (!formEl) return
+
+    if (reportForm.reportId == '') {
+        ElMessage({
+            type: "info",
+            message: '指标报表信息不全,请确认!',
+            duration: 2500,
+            showClose: true,
+        });
+        return
+    }
+
+    await formEl.validate((valid, fields) => {
+        if (valid) {
+            if (reportForm.gatherSql == '' || reportForm.baseSql == '' || reportForm.reportName == '') {
+                ElMessage({
+                    type: "info",
+                    message: '指标报表信息不全,请确认!',
+                    duration: 2500,
+                    showClose: true,
+                });
+                return
+            }
+
+            saveReportBaseInfo(reportForm).then((res: any) => {
+                ElMessage({
+                    type: "success",
+                    message: res.cg,
+                    duration: 2500,
+                    showClose: true,
+                });
+
+                if (!isDisabledForm.value) {
+                    isDisabledForm.value = true
+                }
+
+                queryReportDictTree()
+            });
+        } else {
+
+            queryReportDictTree()
+            return
+        }
+    })
+
 }
 
 // ---------- 重置报表 ------------
 const resetForm = (formEl: FormInstance | undefined) => {
     if (!formEl) return
 
-    if (isShowForm.value) {
-        isShowForm.value = false
+    if (isDisabledForm.value) {
+        isDisabledForm.value = false
     }
 
     formEl.resetFields()
+    reportForm = {}
+    ruleFormRef.value?.resetFields()
+    sqlForm.calcResult = ''
 }
 
-const rules = ref<FormRules>({
-    reportId: [
-        { required: true, message: '请填写报表id', trigger: 'blur' },
-        { min: 1, max: 12, message: '报表id长度范围1-12个字符', trigger: 'blur' },
-    ],
-    reportName: [
-        { required: true, message: '请填写报表名称', trigger: 'blur' },
-        { min: 1, max: 256, message: '报表名称长度范围1-256个字符', trigger: 'blur' },
-    ],
-    reportType: [
-        { required: true, message: '请填写报表类型', trigger: 'blur' },
-    ],
-    gatherSql: [
-        { required: true, message: '请填写聚合函数sql', trigger: 'blur' },
-    ],
-    baseSql: [
-        { required: true, message: '请填写基础sql', trigger: 'blur' },
-    ],
-    menuId: [
-        { type: 'number', message: '菜单id请填写数字', trigger: 'blur' },
-    ],
-    sort: [
-        { type: 'number', message: '面板排序请填写数字', trigger: 'blur' },
-    ],
-})
-
 // --------------- sql运行 ----------------
 const sqlExecute = (formEl: FormInstance | undefined) => {
     if (!formEl) return
@@ -393,7 +447,6 @@ const reportLevel = () => {
     selectReportLevel(param).then((res: any) => {
         showReportLevel.value = true
         reportLevelDetail.value = res
-        console.log(res)
     })
 }