Przeglądaj źródła

Merge branch 'master' into 'master'

指标报表维护优化

See merge request lighter/vue-intergration-platform!53
huangshuhua 2 lat temu
rodzic
commit
506abd8660

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

@@ -27,4 +27,30 @@ export function selectReportDict(data) {
         method: 'post',
         data,
     })
+}
+
+// 查询指标报表类型字典数据
+export function selectReportType() {
+    return request({
+        url: '/targetManagement/selectReportType',
+        method: 'get',
+    })
+}
+
+// 查询指标报表计算结果
+export function reportSqlExecute(data) {
+    return request({
+        url: '/targetManagement/reportSqlExecute',
+        method: 'post',
+        data,
+    })
+}
+
+// 查询指标报表分组类型
+export function selectReportLevel(data) {
+    return request({
+        url: '/targetManagement/selectReportLevel',
+        method: 'post',
+        data,
+    })
 }

+ 164 - 0
src/views/target-management/target-comm/ReportLevel.vue

@@ -0,0 +1,164 @@
+<template>
+    <PageLayer>
+        <template #header class="hd-cl">
+            <el-button type="primary" icon="Edit" @click="editForm(ruleFormRef)" style="margin-left: 10px">编辑</el-button>
+            <el-button type="primary" icon="Check" @click="submitForm(ruleFormRef)" style="margin-left: 10px">保存</el-button>
+            <el-button type="primary" icon="Refresh" @click="resetForm(ruleFormRef)"
+                style="margin-left: 10px">重置</el-button>
+        </template>
+        <template #main>
+            <el-form ref="ruleFormRef" label-width="120px" :model="levelForm" class="demo-ruleForm" :size="formSize"
+                :disabled="isShowForm">
+                <el-row>
+                    <el-col :span="12">
+                        <el-form-item label="分组类型名称" prop="levelName">
+                            <el-input v-model="levelForm.levelName" minlength="0" maxlength="8" show-word-limit />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="分组类型id" prop="levelId">
+                            <el-input v-model="levelForm.levelId" minlength="1" maxlength="256" show-word-limit />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="报表id" prop="reportId">
+                            <el-input v-model="levelForm.reportId" minlength="1" maxlength="12" show-word-limit />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+            </el-form>
+            <el-form ref="ruleFormRef" label-width="120px" :model="levelForm" class="demo-ruleForm" :size="formSize">
+                <el-row>
+                    <el-col :span="6">
+                        <el-form-item label="第一分组id" prop="fstGroup">
+                            <el-input v-model="levelForm.fstGroup" minlength="0" maxlength="12" show-word-limit />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="第一分组名称" prop="fstName">
+                            <el-input v-model="levelForm.fstName" minlength="0" maxlength="24" show-word-limit />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="第二分组id" prop="sndGroup">
+                            <el-input v-model="levelForm.sndGroup" minlength="0" maxlength="12" show-word-limit />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="第二分组名称" prop="sndName">
+                            <el-input v-model="levelForm.sndName" minlength="0" maxlength="24" show-word-limit />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row>
+                    <el-col :span="6">
+                        <el-form-item label="第三分组id" prop="trdGroup">
+                            <el-input v-model="levelForm.trdGroup" minlength="0" maxlength="12" show-word-limit />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="第三分组名称" prop="trdName">
+                            <el-input v-model="levelForm.trdName" minlength="0" maxlength="24" show-word-limit />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="第四分组id" prop="fthGroup">
+                            <el-input v-model="levelForm.fthGroup" minlength="0" maxlength="12" show-word-limit />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="第四分组名称" prop="fthName">
+                            <el-input v-model="levelForm.fthName" minlength="0" maxlength="24" show-word-limit />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row>
+                    <el-col :span="6">
+                        <el-form-item label="报表类型" prop="levelType">
+                            <el-select v-model="levelForm.levelType" placeholder="请选择报表类型方式" clearable>
+                                <el-option v-for="item in levelTypeList" :key="item.code" :label="item.name"
+                                    :value="item.code">
+                                    <span style="float: left">{{ item.code }}</span>
+                                    <span style="float: right; color: var(--el-text-color-secondary); font-size: 13px; ">
+                                        {{ item.name }}
+                                    </span>
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="是否有效" prop="flag">
+                            <el-switch v-model="levelForm.flag" active-value="Y" inactive-value="N" active-color="#13ce66"
+                                inactive-color="#ff4949" />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+            </el-form>
+        </template>
+    </PageLayer>
+</template>
+<script setup name="ReportLevel" lang="ts">
+import { ref, onMounted, nextTick } from 'vue'
+import PageLayer from '../../../layout/PageLayer.vue'
+import type { FormInstance, FormRules } from 'element-plus'
+
+const props = defineProps({
+    reportLevelDetail: {
+        type: Object,
+        default: {}
+    }
+})
+
+const formSize = ref('default')
+const isShowForm = ref(false)
+const ruleFormRef = ref<FormInstance>()
+const levelTypeList = [
+    { 'code': '1', 'name': '表格类型' },
+    { 'code': '2', 'name': '图表类型' },
+]
+
+let levelForm = $ref({
+    levelId: '', // 报表分组类型id
+    levelName: '', // 报表分组类型名称
+    reportId: '', // 报表id
+    fstGroup: '', // 第一分组编码
+    fstName: '', // 第一分组名称
+    sndGroup: '', // 第二分组编码
+    sndName: '', // 第二分组名称
+    trdGroup: '', // 第三分组编码
+    trdName: '', // 第三分组名称
+    fthGroup: '', // 第四分组编码
+    fthName: '', // 第四分组名称
+    flag: 'Y', // 是否有效
+    levelType: '1', // 报表分组类型方式(1:表格展示形式, 2:图形钻取形式)
+})
+
+onMounted(() => {
+    nextTick(() => {
+        levelForm = props.reportLevelDetail
+        console.log(props.reportLevelDetail);
+    })
+})
+
+// ---------- 编辑报表 ------------
+const editForm = (formEl: FormInstance | undefined) => {
+    if (!formEl) return
+
+}
+
+// ---------- 保存报表 ------------
+const submitForm = async (formEl: FormInstance | undefined) => {
+    if (!formEl) return
+}
+
+// ---------- 重置报表 ------------
+const resetForm = (formEl: FormInstance | undefined) => {
+    if (!formEl) return
+
+    if (isShowForm.value) {
+        isShowForm.value = false
+    }
+
+    formEl.resetFields()
+}
+</script>

+ 185 - 32
src/views/target-management/target-dict/TargetReportConfig.vue

@@ -14,6 +14,8 @@
                         style="margin-left: 10px">保存</el-button>
                     <el-button type="primary" icon="Refresh" @click="resetForm(ruleFormRef)"
                         style="margin-left: 10px">重置</el-button>
+                    <el-button type="primary" style="margin-left: 10px" @click="reportLevel()"> 报表分组类型配置 </el-button>
+                    <el-button type="primary" style="margin-left: 10px" @click="reportDetails()"> 报表页面详情配置 </el-button>
                 </template>
                 <template #main>
                     <el-form ref="ruleFormRef" :model="reportForm" :rules="rules" label-width="120px" class="demo-ruleForm"
@@ -32,8 +34,18 @@
                             </el-col>
                             <el-col :span="6">
                                 <el-form-item label="报表类型" prop="reportType">
-                                    <el-input v-model="reportForm.reportType" minlength="1" maxlength="12"
-                                        show-word-limit />
+                                    <!-- <el-input v-model="reportForm.reportType" minlength="1" maxlength="12"
+                                        show-word-limit /> -->
+                                    <el-select v-model="reportForm.reportType" placeholder="请选择报表类型" clearable>
+                                        <el-option v-for="item in reportTypeList" :key="item.reportType"
+                                            :label="item.reportLabel" :value="item.reportType">
+                                            <span style="float: left">{{ item.reportType }}</span>
+                                            <span
+                                                style="float: right; color: var(--el-text-color-secondary); font-size: 13px; ">
+                                                {{ item.reportLabel }}
+                                            </span>
+                                        </el-option>
+                                    </el-select>
                                 </el-form-item>
                             </el-col>
                         </el-row>
@@ -51,7 +63,7 @@
                             </el-col>
                             <el-col :span="6">
                                 <el-form-item label="报表分组类型" prop="level">
-                                    <el-input v-model="reportForm.reportId" minlength="1" maxlength="12" show-word-limit />
+                                    <el-input v-model="reportForm.level" minlength="1" maxlength="12" show-word-limit />
                                 </el-form-item>
                             </el-col>
                         </el-row>
@@ -59,7 +71,7 @@
                             <el-input v-model="reportForm.baseSql" type="textarea" :rows="8" />
                         </el-form-item>
                         <el-row>
-                            <el-col :span="12">
+                            <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-form-item>
@@ -69,7 +81,7 @@
                                     <el-input v-model="reportForm.sort" minlength="0" maxlength="12" show-word-limit />
                                 </el-form-item>
                             </el-col>
-                            <el-col :span="6">
+                            <el-col :span="12">
                                 <el-form-item label="指标排序" prop="reportSort">
                                     <el-input v-model="reportForm.reportSort" minlength="0" maxlength="256"
                                         show-word-limit />
@@ -77,7 +89,7 @@
                             </el-col>
                         </el-row>
                         <el-row>
-                            <el-col :span="12">
+                            <el-col :span="6">
                                 <el-form-item label="是否财务报表" prop="isCw">
                                     <el-switch v-model="reportForm.isCw" active-value="Y" inactive-value="N"
                                         active-color="#13ce66" inactive-color="#ff4949" />
@@ -97,6 +109,43 @@
                             </el-col>
                         </el-row>
                     </el-form>
+                    <el-divider />
+                    <el-form ref="ruleFormRef" label-width="120px" :model="sqlForm" class="demo-ruleForm" :size="formSize">
+                        <el-row>
+                            <el-col :span="12">
+                                <el-form-item label="开始时间">
+                                    <el-form-item prop="startTime">
+                                        <el-date-picker v-model="sqlForm.startTime" type="date" label="选择时间"
+                                            placeholder="选择时间" format="YYYY-MM-DD" value-format="YYYY-MM-DD" />
+                                    </el-form-item>
+                                </el-form-item>
+                            </el-col>
+                            <el-col :span="12">
+                                <el-form-item label="结束时间">
+                                    <el-form-item prop="endTime">
+                                        <el-date-picker v-model="sqlForm.endTime" type="date" label="选择时间"
+                                            placeholder="选择时间" format="YYYY-MM-DD" value-format="YYYY-MM-DD" />
+                                    </el-form-item>
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                        <el-row>
+                            <el-col :span="12">
+                                <el-form-item label="计算结果测试" prop="childResult">
+                                    <el-input v-model="sqlForm.calcResult" type="textarea" />
+                                </el-form-item>
+                            </el-col>
+                            <el-col :span="12">
+                                <el-form-item>
+                                    <el-button type="primary" @click="sqlExecute(ruleFormRef)"> 指标运行结果 </el-button>
+                                </el-form-item>
+                            </el-col>
+                        </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" />
+                    </el-dialog>
                 </template>
             </PageLayer>
         </el-col>
@@ -108,9 +157,9 @@ import ReportTree from '../target-comm/ReportTree.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, FormRules } from 'element-plus'
-import { selectReportDictTree, selectReportDict } from '../../../api/target-management/report-dict'
+import { selectReportDictTree, selectReportDict, selectReportType, reportSqlExecute, selectReportLevel } from '../../../api/target-management/report-dict'
+import ReportLevel from '../target-comm/ReportLevel.vue'
 import { queryDept } from '../../../api/public-api'
 
 const reportTreeData = ref({
@@ -119,12 +168,18 @@ const reportTreeData = ref({
 })
 
 const isShowTree = ref(false)
-const isShowForm = ref(true)
-const start = formatDate(seltYearAndNowLast[0].value[0])
-const end = formatDate(seltYearAndNowLast[1].value[1])
+const isShowForm = ref(false)
 const deptWardList = ref([])
+const nowDay = new Date()
+const ds = formatDate(nowDay)
 const formSize = ref('default')
 const ruleFormRef = ref<FormInstance>()
+const reportTypeList = ref([
+    {
+        reportType: '',
+        reportLabel: ''
+    }
+])
 
 const deptMethod = (val: string) => {
     queryDept(val).then((res: any) => {
@@ -140,7 +195,15 @@ const queryParam = reactive({
     endTime: '', // 结束时间
 })
 
-const reportForm = ref({
+const sqlForm = $ref({
+    gatherSql: '', // 聚合sql
+    baseSql: '', // 基础sql
+    startTime: ds, // 开始时间
+    endTime: ds, // 结束时间
+    calcResult: '', // 计算结果
+})
+
+let reportForm = $ref({
     reportId: '', // 报表id
     reportName: '', // 报表名称
     reportType: '', // 报表类型
@@ -159,10 +222,13 @@ const reportForm = ref({
 
 onMounted(() => {
     nextTick(() => {
-        queryParam.startTime = start + ' 00:00:00'
-        queryParam.endTime = end + ' 23:59:59'
+        queryParam.startTime = ds + ' 00:00:00'
+        queryParam.endTime = ds + ' 23:59:59'
+        sqlForm.startTime = ds + ' 00:00:00'
+        sqlForm.endTime = ds + ' 23:59:59'
         queryReportDictTree()
         deptMethod('')
+        reportTypeQt()
     })
 })
 
@@ -177,13 +243,35 @@ const queryReportDictTree = () => {
         });
 }
 
+// 查询报表类型字典
+const reportTypeQt = () => {
+    selectReportType()
+        .then((res: any) => {
+            reportTypeList.value = res
+        });
+}
+
 // ------  接收树页面传来的数据 -------
 const treeNodeClick = async (data: any, node: any, obj: any) => {
     if (node.data) {
-        // 查询指标字典
         queryParam.reportId = node.data.id
-        let selectReportDictRes = await selectReportDict(queryParam)
-        reportForm.value = selectReportDictRes[0]
+        let pid = data.pid
+        if (pid === 'zbJc' || queryParam.reportId === 'zbJc') {
+            ElMessage({
+                type: "info",
+                message: "请选择一个正确的指标报表!",
+                duration: 2500,
+                showClose: true,
+            });
+            return
+        } else {
+            if (!isShowForm.value) {
+                isShowForm.value = true
+            }
+            // 查询指标字典
+            let selectReportDictRes = await selectReportDict(queryParam)
+            reportForm = selectReportDictRes[0]
+        }
     }
 }
 
@@ -191,16 +279,12 @@ const treeNodeClick = async (data: any, node: any, obj: any) => {
 const addForm = (formEl: FormInstance | undefined) => {
     if (!formEl) return
 
-    if (queryParam.reportId === '') {
-        ElMessage({
-            type: "info",
-            message: "请选择一个指标报表!",
-            duration: 2500,
-            showClose: true,
-        });
-        return
+    if (isShowForm.value) {
+        isShowForm.value = false
     }
 
+    formEl.resetFields()
+
 }
 
 // ---------- 编辑报表 ------------
@@ -225,18 +309,23 @@ const resetForm = (formEl: FormInstance | undefined) => {
     formEl.resetFields()
 }
 
-const rules = $ref<FormRules>({
+const rules = ref<FormRules>({
     reportId: [
-        { required: true, message: '请填写指标id', trigger: 'blur' },
-        { min: 1, max: 12, message: '指标id长度范围1-12个字符', trigger: 'blur' },
+        { 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' },
+        { required: true, message: '请填写报表名称', trigger: 'blur' },
+        { min: 1, max: 256, message: '报表名称长度范围1-256个字符', trigger: 'blur' },
     ],
     reportType: [
-        { required: true, message: '请填写指标类型', trigger: 'blur' },
-        { min: 1, max: 12, message: '指标类型长度范围1-12个字符', trigger: 'blur' },
+        { 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' },
@@ -246,6 +335,70 @@ const rules = $ref<FormRules>({
     ],
 })
 
+// --------------- sql运行 ----------------
+const sqlExecute = (formEl: FormInstance | undefined) => {
+    if (!formEl) return
+    // 验证是否填写完整
+    if (reportForm.reportId === '') {
+        ElMessage({
+            type: "info",
+            message: "报表信息不全,请确认!",
+            duration: 2500,
+            showClose: true,
+        });
+        return
+    }
+
+    if (reportForm.baseSql === '') {
+        ElMessage({
+            type: "info",
+            message: "未编写基础sql,请检查!",
+            duration: 2500,
+            showClose: true,
+        });
+        return
+    }
+
+    if (sqlForm.startTime === '' || sqlForm.endTime === '') {
+        ElMessage({
+            type: "info",
+            message: "时间条件未选择,请确认!",
+            duration: 2500,
+            showClose: true,
+        });
+        return
+    }
+
+    // sql测试
+    sqlForm.gatherSql = reportForm.gatherSql
+    sqlForm.baseSql = reportForm.baseSql
+    reportSqlExecute(sqlForm)
+        .then((res: any) => {
+            let r = JSON.parse(JSON.stringify(res))
+            sqlForm.calcResult = r.r1
+
+        });
+
+}
+
+// --------------- 报表分组类型配置 -------------------
+const showReportLevel = ref(false)
+const reportLevelTitle = ref('报表分组类型配置')
+const reportLevelDetail = ref({})
+const reportLevel = () => {
+    const param = {
+        reportId: reportForm.reportId,
+        level: reportForm.level,
+    }
+    selectReportLevel(param).then((res: any) => {
+        showReportLevel.value = true
+        reportLevelDetail.value = res
+        console.log(res)
+    })
+}
+
+const reportDetails = () => {
+}
 </script>
 <style lang="scss" scoped deep>
 .hd-cl {