master
xy 1 year ago
parent 54cf970de9
commit 7788f5be06

@ -0,0 +1,46 @@
import request from '@/utils/request'
export function index (params,noloading=true) {
return request({
method: "get",
url: "/api/admin/temporary-plan/index",
params,
noloading
})
}
export function show (params,noloading=true) {
return request({
method: "get",
url: "/api/admin/temporary-plan/show",
params,
noloading
})
}
export function save (data,noloading=true) {
return request({
method: "post",
url: "/api/admin/temporary-plan/save",
data,
noloading
})
}
export function destroy(params,noloading=true) {
return request({
method: "get",
url: "/api/admin/temporary-plan/destroy",
params,
noloading
})
}
export function statistic(params,noloading=false) {
return request({
method: "get",
url: "/api/admin/temporary-plan/statistic",
params,
noloading
})
}

@ -312,8 +312,9 @@ import Pagination from "@/components/Pagination";
import PieChart from "./components/PieChart.vue";
import { adminDepartmentList } from '@/api/system/department';
import { adminUserList, getInfo } from '@/api/user';
import { getNotice, readNotice, statistic, carry } from "@/api/dashboard/notice";
import { parseTime, moneyFormatter } from '@/utils';
import { getNotice, readNotice, carry } from "@/api/dashboard/notice";
import { statistic } from '@/api/system/temporaryPlan'
import { parseTime, moneyFormatter, deepCopy } from '@/utils';
import { Message } from "element-ui";
import budgetStatic from '@/views/dashboard/components/budgetStatic.vue'
import lineChart from '@/views/dashboard/components/LineChart.vue'
@ -368,7 +369,7 @@ export default {
{
label: "科室",
minWidth: 180,
prop: "plan_department.name",
prop: "department.name",
sortable: false,
align: "left",
fixed: "left",
@ -380,9 +381,9 @@ export default {
align: "left",
fixed: "right",
customFn: (row) => {
let m2 = row?.money_total_2;
let m1 = row?.money_total_1;
let m3 = row?.use_money_total;
let m2 = row?.money_total_2 ? Number(row?.money_total_2) : 0;
let m1 = row?.money_total_1 ? Number(row?.money_total_1) : 0;
let m3 = row?.use_money_total ? Number(row?.use_money_total) : 0;
let per = 0;
if (m2 != 0) {
@ -404,7 +405,7 @@ export default {
sortable: false,
prop: "money_total_1",
formatter: (cell, data, value) => {
return moneyFormatter(value);
return moneyFormatter(value ? Number(value) : 0);
},
},
{
@ -414,7 +415,7 @@ export default {
sortable: false,
prop: "money_total_2",
formatter: (cell, data, value) => {
return moneyFormatter(value);
return moneyFormatter(value ? Number(value) : 0);
},
},
{
@ -424,7 +425,7 @@ export default {
sortable: false,
prop: "use_money_total",
formatter: (cell, data, value) => {
return moneyFormatter(value);
return moneyFormatter(value ? Number(value) : 0);
},
},
],
@ -432,7 +433,7 @@ export default {
{
label: "预算类别",
width: 100,
prop: "type_text",
prop: "type_detail.value",
sortable: false,
fixed: "left",
},
@ -443,9 +444,9 @@ export default {
align: "left",
fixed: "right",
customFn: (row) => {
let m2 = row.money_total_2;
let m1 = row.money_total_1;
let m3 = row.use_money_total;
let m2 = row.money_total_2 ? Number(row.money_total_2) : 0;
let m1 = row.money_total_1 ? Number(row.money_total_1) : 0;
let m3 = row.use_money_total ? Number(row.use_money_total) : 0;
let per = 0;
if (m2 != 0) {
@ -467,7 +468,7 @@ export default {
sortable: false,
prop: "money_total_1",
formatter: (cell, data, value) => {
return moneyFormatter(value);
return moneyFormatter(value ? Number(value) : 0);
},
},
{
@ -477,7 +478,7 @@ export default {
sortable: false,
prop: "money_total_2",
formatter: (cell, data, value) => {
return moneyFormatter(value);
return moneyFormatter(value ? Number(value) : 0);
},
},
{
@ -487,7 +488,7 @@ export default {
sortable: false,
prop: "use_money_total",
formatter: (cell, data, value) => {
return moneyFormatter(value);
return moneyFormatter(value ? Number(value) : 0);
},
},
],
@ -783,18 +784,38 @@ export default {
this.getStatistic();
},
async getStatistic() {
const res = await statistic(this.select);
console.log(res);
this.statistic = res;
let m2 = res.progress.money_total_2;
let m1 = res.progress.money_total_1;
var user_m = res.progress.use_money_total;
var m3=m1-user_m
if (m2 != 0) {
m3=m2-user_m;
} else if (m1 != 0) {
m3=m1-user_m;
}
const res = await statistic(this.select);
console.log(res);
function handleDataStructure(data) {
let cData = deepCopy(data)
cData.progress.money_total_1 = isNaN(Number(cData.progress.plan_money)) ? 0 : Number(cData.progress.plan_money)
cData.progress.money_total_2 = isNaN(Number(cData.progress.plan_money)) ? 0 : Number(cData.progress.plan_money)
cData.progress.use_money_total = isNaN(Number(cData.progress.use_money)) ? 0 : Number(cData.progress.use_money)
cData.departmentList = cData.departmentList.map(i => ({
...i,
money_total_1: isNaN(Number(i.plan_money)) ? 0 : Number(i.plan_money),
money_total_2: isNaN(Number(i.plan_money)) ? 0 : Number(i.plan_money),
use_money_total: isNaN(Number(i.use_money)) ? 0 : Number(i.use_money)
}))
cData.typeList = cData.typeList.map(i => ({
...i,
money_total_1: isNaN(Number(i.plan_money)) ? 0 : Number(i.plan_money),
money_total_2: isNaN(Number(i.plan_money)) ? 0 : Number(i.plan_money),
use_money_total: isNaN(Number(i.use_money)) ? 0 : Number(i.use_money)
}))
return cData
}
this.statistic = handleDataStructure(res);
let m2 = this.statistic.progress.money_total_2;
let m1 = this.statistic.progress.money_total_1;
var user_m = this.statistic.progress.use_money_total;
var m3 = m1-user_m
if (m2 != 0) {
m3=m2-user_m;
} else if (m1 != 0) {
m3=m1-user_m;
}
this.rptChartData = {
xArr: ["预算未执行金额", "预算已执行金额"],
radiusArr: "50%",

@ -0,0 +1,229 @@
<template>
<div class="container">
<!-- 查询配置 -->
<div style="padding: 0 20px">
<div ref="lxHeader">
<LxHeader icon="md-apps" text="统计管理" style="margin-bottom: 10px; border: 0px; margin-top: 15px">
<div slot="content"></div>
<slot>
<div>
<Button type="primary" @click="select.page = 1,getList()" style="margin-left: 10px">查询</Button>
<Button type="primary" @click="dialogFormVisible = true" style="margin-left: 10px">新增</Button>
</div>
</slot>
</LxHeader>
</div>
<div class="table-tree">
<el-table stripe :data="tableData" class="v-table" :height="tableHeight" border style="width: 100%">
<el-table-column type="index" align="center">
</el-table-column>
<el-table-column header-align="center" prop="name" label="名称" width="180" />
<el-table-column align="center" prop="year" label="年份" width="120" />
<el-table-column align="center" prop="type_detail.value" label="资金类型" width="140" />
<el-table-column align="center" prop="department.name" label="部门" width="200" />
<el-table-column header-align="center" align="right" prop="plan_money" label="计划额度" width="200" />
<el-table-column header-align="center" align="right" prop="use_money" label="已使用额度" width="200" />
<el-table-column fixed="right" label="操作" width="300">
<template slot-scope="{ row }">
<Button ghost size="small" @click="edit(row)" type="primary" style="margin-left: 10px;">编辑</Button>
<Button ghost size="small" @click="destroy(row)" type="error" style="margin-left: 10px;">删除</Button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination @current-change="e => {
select.page = e;
getList()
}"
:current-page="select.page"
:page-size="select.page_size"
background
layout="prev, pager, next" :total="total">
</el-pagination>
</div>
</div>
<el-dialog title="编辑" :visible.sync="dialogFormVisible" width="60%">
<el-form :model="form" :rules="rules" ref="form" label-position="right" label-width="120px">
<el-form-item label="名称" prop="name">
<el-input v-model="form.name" autocomplete="off" style="width: 300px"></el-input>
</el-form-item>
<el-form-item label="年份" prop="year">
<el-date-picker :value="form.year.toString()" style="width: 300px;" type="year" value-format="yyyy" @input="e => form.year = e"></el-date-picker>
</el-form-item>
<el-form-item label="部门" prop="department_id">
<el-select v-model="form.department_id" style="width: 300px">
<el-option v-for="item in departments" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="资金类型" prop="type">
<el-cascader
:options="types"
:props="{
checkStrictly: false,
label: 'name',
value: 'id',
}"
:value="form.type ? Number(form.type) : ''"
clearable
size="small"
style="width: 300px"
@change="(e) => (form.type = e[e.length - 1] || '')"
/>
</el-form-item>
<el-form-item label="计划额度" prop="plan_money">
<el-input-number style="width: 300px" :precision="2" controls-position="right" v-model="form.plan_money" autocomplete="off"></el-input-number>
</el-form-item>
<el-form-item label="已使用额度" prop="use_money">
<el-input-number style="width: 300px" :precision="2" controls-position="right" v-model="form.use_money" autocomplete="off"></el-input-number>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="cancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</div>
</template>
<script>
import { index, save, show, destroy } from "@/api/system/temporaryPlan"
import LxHeader from "@/components/LxHeader/index.vue";
import {getparameterTree} from "@/api/system/dictionary";
import {listCommondepartment} from "@/api/common";
import {deepCopy} from "@/utils";
export default {
components: {
LxHeader
},
created() {
this.initLoad();
},
mounted() {},
data() {
return {
departments: [],
types: [],
dialogFormVisible: false,
select: {
page: 1,
page_size: 20
},
form: {
year: '',
department_id: '',
type: '',
name: '',
plan_money: 0,
use_money: 0
},
copyForm: {
year: '',
department_id: '',
type: '',
name: '',
plan_money: 0,
use_money: 0
},
rules: {
},
total: 0,
tableHeight: 0,
tableData: []
}
},
methods: {
initLoad() {
var that = this;
var clientHeight = document.documentElement.clientHeight
var lxHeader_height = 96.5; //
var paginationHeight = 37; //
var topHeight = 50; //
let tableHeight = clientHeight - lxHeader_height - topHeight - paginationHeight - 20;
that.tableHeight = tableHeight;
this.getList()
this.getTypes()
this.getDepartment()
},
edit(row) {
for(let key in this.form) {
this.form[key] = row[key]
}
this.form['id'] = row.id
this.dialogFormVisible = true
},
async getList() {
try {
const res = await index(this.select)
console.log(res)
this.total = res.total;
this.tableData = res.data;
} catch (err) {
console.eror(err)
}
},
//
getDepartment() {
listCommondepartment({show_tree:1}).then((res) => {
this.departments = res;
});
},
async getTypes() {
const res = await getparameterTree({
id: 3
});
const dataHandler = (data) => {
data.forEach(i => {
if (i.hasOwnProperty('detail')) {
i.children = i.detail.map(j => {
j.name = j.value
return j;
})
} else {
dataHandler(i['children'])
}
})
return data;
}
this.types = dataHandler(res?.children) || []
},
cancel() {
this.form = deepCopy(this.copyForm)
this.dialogFormVisible = false
},
async submit() {
try {
await save(this.form)
this.form = deepCopy(this.copyForm)
this.dialogFormVisible = false
this.$message.success('操作成功')
await this.getList()
} catch (err) {
}
},
async destroy(row) {
try {
await this.$confirm('确认删除?','提示')
await destroy({
id: row.id
})
await this.getList()
} catch (err) {
}
}
}
};
</script>
<style>
</style>

@ -86,9 +86,9 @@ export default {
minWidth: 160,
fixed: "right",
render: (h, { row }) => {
let m2 = row?.money_total_2 || 0;
let m1 = row?.money_total_1 || 0;
let m3 = row?.use_money_total || 0;
let m2 = row?.money_total_2 ? Number(row?.money_total_2) : 0;
let m1 = row?.money_total_1 ? Number(row?.money_total_1) : 0;
let m3 = row?.use_money_total ? Number(row?.use_money_total) : 0;
let per = 0;
if (m2 != 0) {
@ -146,7 +146,7 @@ export default {
show: true
},
xAxis: {
data: this.departmentList.map((item) => item.plan_department.name),
data: this.departmentList.map((item) => item.department.name),
},
yAxis: {
axisLabel: {
@ -188,9 +188,9 @@ export default {
position: "top",
formatter: (params) => {
console.log(params)
let m2 = this.departmentList[params.dataIndex]?.money_total_2 || 0;
let m1 = this.departmentList[params.dataIndex]?.money_total_1 || 0;
let m3 = this.departmentList[params.dataIndex]?.use_money_total || 0;
let m2 = this.departmentList[params.dataIndex]?.money_total_2 ? Number(this.departmentList[params.dataIndex]?.money_total_2) : 0;
let m1 = this.departmentList[params.dataIndex]?.money_total_1 ? Number(this.departmentList[params.dataIndex]?.money_total_1) : 0;
let m3 = this.departmentList[params.dataIndex]?.use_money_total ? Number(this.departmentList[params.dataIndex]?.use_money_total) : 0;
let per = 0;
if (m2 != 0) {

@ -41,11 +41,11 @@
<script>
import ElementResize from "element-resize-detector";
import { moneyFormatter } from "@/utils";
import {deepCopy, moneyFormatter} from "@/utils";
import echarts from 'echarts'
import SvgIcon from "@/components/SvgIcon/index.vue";
import MyProgress from "@/components/Progress/index.vue";
import {statistic} from "@/api/dashboard/notice";
import {statistic} from "@/api/system/temporaryPlan";
export default {
components: {
@ -206,7 +206,27 @@ export default {
if(/^\/system/.test(this.$route.path)) return
const res = await statistic(this.select,true)
this.statistic = res
function handleDataStructure(data) {
let cData = deepCopy(data)
cData.progress.money_total_1 = isNaN(Number(cData.progress.plan_money)) ? 0 : Number(cData.progress.plan_money)
cData.progress.money_total_2 = isNaN(Number(cData.progress.plan_money)) ? 0 : Number(cData.progress.plan_money)
cData.progress.use_money_total = isNaN(Number(cData.progress.use_money)) ? 0 : Number(cData.progress.use_money)
cData.departmentList = cData.statistic.departmentList.map(i => ({
...i,
money_total_1: isNaN(Number(i.plan_money)) ? 0 : Number(i.plan_money),
money_total_2: isNaN(Number(i.plan_money)) ? 0 : Number(i.plan_money),
use_money_total: isNaN(Number(i.use_money)) ? 0 : Number(i.use_money)
}))
cData.typeList = cData.statistic.typeList.map(i => ({
...i,
money_total_1: isNaN(Number(i.plan_money)) ? 0 : Number(i.plan_money),
money_total_2: isNaN(Number(i.plan_money)) ? 0 : Number(i.plan_money),
use_money_total: isNaN(Number(i.use_money)) ? 0 : Number(i.use_money)
}))
return cData
}
this.statistic = handleDataStructure(res)
this.$emit('send-data',res)
},
},

@ -43,8 +43,8 @@
<script>
import MyProgress from "@/components/Progress";
import SvgIcon from "@/components/SvgIcon";
import { moneyFormatter } from "@/utils"
import { statistic } from '@/api/dashboard/notice'
import {deepCopy, moneyFormatter} from "@/utils"
import { statistic } from '@/api/system/temporaryPlan'
export default {
components: {
SvgIcon,
@ -91,8 +91,28 @@ export default {
if(/^\/system/.test(this.$route.path)) return
const res = await statistic(this.select,true)
this.statistic = res
this.$emit('send-data',res)
function handleDataStructure(data) {
let cData = deepCopy(data)
cData.progress.money_total_1 = isNaN(Number(cData.progress.plan_money)) ? 0 : Number(cData.progress.plan_money)
cData.progress.money_total_2 = isNaN(Number(cData.progress.plan_money)) ? 0 : Number(cData.progress.plan_money)
cData.progress.use_money_total = isNaN(Number(cData.progress.use_money)) ? 0 : Number(cData.progress.use_money)
cData.departmentList = cData.departmentList.map(i => ({
...i,
money_total_1: isNaN(Number(i.plan_money)) ? 0 : Number(i.plan_money),
money_total_2: isNaN(Number(i.plan_money)) ? 0 : Number(i.plan_money),
use_money_total: isNaN(Number(i.use_money)) ? 0 : Number(i.use_money)
}))
cData.typeList = cData.typeList.map(i => ({
...i,
money_total_1: isNaN(Number(i.plan_money)) ? 0 : Number(i.plan_money),
money_total_2: isNaN(Number(i.plan_money)) ? 0 : Number(i.plan_money),
use_money_total: isNaN(Number(i.use_money)) ? 0 : Number(i.use_money)
}))
return cData
}
this.statistic = handleDataStructure(res)
this.$emit('send-data', this.statistic)
},
},
computed: {},

@ -201,7 +201,8 @@ export default {
{
title: "预算类别",
width: 100,
key: "type_text",
key: "type_detail.value",
render: (h, { row }) => h('span', row.type_detail?.value),
ellipsis: true,
tooltip: true,
fixed: "left",
@ -211,9 +212,9 @@ export default {
minWidth: 120,
fixed: "right",
render: (h, { row }) => {
let m2 = row?.money_total_2 || 0;
let m1 = row?.money_total_1 || 0;
let m3 = row?.use_money_total || 0;
let m2 = row?.money_total_2 ? Number(row?.money_total_2) : 0;
let m1 = row?.money_total_1 ? Number(row?.money_total_1) : 0;
let m3 = row?.use_money_total ? Number(row?.use_money_total) : 0;
let per = 0;
if (m2 != 0) {

Loading…
Cancel
Save