|
@@ -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 {
|