|
@@ -0,0 +1,507 @@
|
|
|
+<template>
|
|
|
+ <div>
|
|
|
+ <!-- <TitleBar propTitle="经营数据查询" /> -->
|
|
|
+ <el-form :model="form" ref="form" class="marginTop">
|
|
|
+ <el-form-item label="查询类别" :label-width="formLabelWidth">
|
|
|
+ <el-radio-group
|
|
|
+ v-model="form.type"
|
|
|
+ placeholder="请选择类别"
|
|
|
+ size="medium"
|
|
|
+ :rules="[{ required: true, message: '必选'}]"
|
|
|
+ style="width:100%"
|
|
|
+ >
|
|
|
+ <el-row :gutter="10">
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-radio border style="width:100%;" label="INCOME">收入</el-radio>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-radio border style="width:100%;" label="COST">成本</el-radio>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="时间范围" v-if="form.type!==''" :label-width="formLabelWidth">
|
|
|
+ <el-row :gutter="10">
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-date-picker placeholder="起始时间" style="width:100%" v-model="form.startTime"></el-date-picker>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-date-picker placeholder="结束时间" style="width:100%" v-model="form.endTime"></el-date-picker>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form-item>
|
|
|
+ <!-- <el-form-item label="金额范围" v-if="form.type!==''" :label-width="formLabelWidth">
|
|
|
+ <el-row :gutter="10">
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-input placeholder="起始金额" style="width:100%" v-model="form.minAmount" clearable></el-input>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-input placeholder="结束金额" style="width:100%" v-model="form.maxAmount" clearable></el-input>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form-item>-->
|
|
|
+ <el-form-item
|
|
|
+ label="成本类型"
|
|
|
+ v-if="form.type==='COST'"
|
|
|
+ prop="costTypeId"
|
|
|
+ :label-width="formLabelWidth"
|
|
|
+ >
|
|
|
+ <el-select v-model="form.costTypeId" placeholder="请选择支出类型" ref="select">
|
|
|
+ <el-option key label="全选" value></el-option>
|
|
|
+ <el-option
|
|
|
+ v-for="item in costTypeSelectData"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.id"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="收入状态" v-if="form.type==='INCOME'" :label-width="formLabelWidth">
|
|
|
+ <el-row :gutter="10">
|
|
|
+ <el-col :span="1">
|
|
|
+ <el-checkbox
|
|
|
+ :indeterminate="isIndeterminate"
|
|
|
+ v-model="checkAll"
|
|
|
+ @change="handleCheckAllChange"
|
|
|
+ size="medium"
|
|
|
+ >全选</el-checkbox>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <el-checkbox-group
|
|
|
+ style="width:100%"
|
|
|
+ v-model="form.incomeStatus"
|
|
|
+ placeholder="请选择状态值"
|
|
|
+ size="medium"
|
|
|
+ :indeterminate="isIndeterminate"
|
|
|
+ >
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-checkbox style="width:100%;" border label="INVOICE">开票/应收</el-checkbox>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-checkbox style="width:100%;" border label="ARRIVAL">到账</el-checkbox>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-checkbox style="width:100%;" border label="INTERNAL">内部核算</el-checkbox>
|
|
|
+ </el-col>
|
|
|
+ </el-checkbox-group>
|
|
|
+ </el-row>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item
|
|
|
+ label="归属产品"
|
|
|
+ v-if="form.type==='INCOME'"
|
|
|
+ prop="productId"
|
|
|
+ :label-width="formLabelWidth"
|
|
|
+ >
|
|
|
+ <el-select v-model="form.productId" placeholder="请选择产品">
|
|
|
+ <el-option key label="全选" value></el-option>
|
|
|
+ <el-option
|
|
|
+ v-for="item in productSelectData"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.code +'--'+ item.name"
|
|
|
+ :value="item.id"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item
|
|
|
+ label="归属项目"
|
|
|
+ v-if="form.type!==''"
|
|
|
+ prop="projectId"
|
|
|
+ :label-width="formLabelWidth"
|
|
|
+ >
|
|
|
+ <el-select v-model="form.projectId" placeholder="请选择项目">
|
|
|
+ <el-option key label="全选" value></el-option>
|
|
|
+ <el-option
|
|
|
+ v-for="item in projectSelectData"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.code +'--'+ item.name"
|
|
|
+ :value="item.id"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <!-- <el-form-item
|
|
|
+ label="来源项目"
|
|
|
+ style="display:inline-block;"
|
|
|
+ prop="toProjectId"
|
|
|
+ v-if="form.type!==''"
|
|
|
+ :label-width="formLabelWidth"
|
|
|
+ >
|
|
|
+ <el-select v-model="form.toProjectId" placeholder="请选择项目">
|
|
|
+ <el-option key label="不选" value></el-option>
|
|
|
+ <el-option
|
|
|
+ v-for="item in projectSelectData"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.id"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item
|
|
|
+ label="来源部门"
|
|
|
+ prop="toDeptId"
|
|
|
+ style="display:inline-block;"
|
|
|
+ v-if="form.type!==''"
|
|
|
+ :label-width="formLabelWidth"
|
|
|
+ >
|
|
|
+ <el-select v-model="form.toDeptId" placeholder="请选择部门">
|
|
|
+ <el-option key label="不选" value></el-option>
|
|
|
+ <el-option
|
|
|
+ v-for="item in teamSelectData"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.id"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>-->
|
|
|
+ <el-form-item label="归属部门" prop="deptId" v-if="form.type!==''" :label-width="formLabelWidth">
|
|
|
+ <el-select v-model="form.deptId" placeholder="请选择部门" ref="select">
|
|
|
+ <el-option key label="全选" value></el-option>
|
|
|
+ <el-option
|
|
|
+ v-for="item in teamSelectData"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.code +'--'+ item.name"
|
|
|
+ :value="item.id"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item
|
|
|
+ style="position: absolute; width:23%; display:block; margin:0 auto; left: 0; right: 0;"
|
|
|
+ >
|
|
|
+ <el-button type="primary" @click="onSubmit">查询</el-button>
|
|
|
+ <!-- <el-button type="info" @click="onReset">重置</el-button> -->
|
|
|
+ </el-form-item>
|
|
|
+ <!-- <el-form-item>
|
|
|
+ <el-button type="info" @click="reset">重置</el-button>
|
|
|
+ </el-form-item>-->
|
|
|
+ </el-form>
|
|
|
+ <!-- 查询结果收入表 -->
|
|
|
+ <el-table
|
|
|
+ :data="searchResult"
|
|
|
+ style="width: 100%;margin-top:80px;"
|
|
|
+ :summary-method="tableSummary"
|
|
|
+ show-summary
|
|
|
+ v-if="tableType === 'INCOME'"
|
|
|
+ border
|
|
|
+ >
|
|
|
+ <el-table-column
|
|
|
+ width="120px"
|
|
|
+ align="right"
|
|
|
+ label="录入日期"
|
|
|
+ :formatter="recordTimeFormat"
|
|
|
+ prop="gmtModife"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="happenTime"
|
|
|
+ width="120px"
|
|
|
+ align="right"
|
|
|
+ :formatter="dateFormat"
|
|
|
+ label="发生日期"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ :formatter="moneyFormat"
|
|
|
+ prop="amount"
|
|
|
+ width="110px"
|
|
|
+ align="right"
|
|
|
+ label="金额"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="收入状态"
|
|
|
+ width="130px"
|
|
|
+ align="right"
|
|
|
+ prop="incomeStatus"
|
|
|
+ :formatter="incomeTypeFormat"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column label="产品" width="200px" align="right" prop="product.name"></el-table-column>
|
|
|
+ <el-table-column label="归属项目" width="290px" align="right" prop="project.name"></el-table-column>
|
|
|
+ <el-table-column label="归属部门" width="250px" align="right" prop="department.name"></el-table-column>
|
|
|
+ <!-- <el-table-column label="接收项目" prop="toProject.name"></el-table-column> -->
|
|
|
+ <el-table-column prop="remark" align="right" label="备注"></el-table-column>
|
|
|
+ </el-table>
|
|
|
+
|
|
|
+ <!-- 查询结果成本表 -->
|
|
|
+ <el-table
|
|
|
+ :data="searchResult"
|
|
|
+ style="width: 100%;margin-top:80px;"
|
|
|
+ show-summary
|
|
|
+ :summary-method="tableSummary"
|
|
|
+ v-if="tableType === 'COST'"
|
|
|
+ border
|
|
|
+ >
|
|
|
+ <el-table-column
|
|
|
+ width="120px"
|
|
|
+ align="right"
|
|
|
+ label="录入日期"
|
|
|
+ :formatter="recordTimeFormat"
|
|
|
+ prop="gmtModife"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="happenTime"
|
|
|
+ width="120px"
|
|
|
+ align="right"
|
|
|
+ :formatter="dateFormat"
|
|
|
+ label="发生日期"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ :formatter="moneyFormat"
|
|
|
+ prop="amount"
|
|
|
+ width="110px"
|
|
|
+ align="right"
|
|
|
+ label="金额"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column label="成本类别" width="130px" align="right" prop="costType.name"></el-table-column>
|
|
|
+ <el-table-column label="发生部门" width="220px" align="right" prop="department.name"></el-table-column>
|
|
|
+ <el-table-column label="发生项目/人" width="300px" align="right" prop="project.name"></el-table-column>
|
|
|
+ <!-- <el-table-column label="接收项目" prop="toProject.name"></el-table-column> -->
|
|
|
+ <!-- <el-table-column label="接收部门" prop="toDepartment.name"></el-table-column> -->
|
|
|
+ <el-table-column label="备注" align="right" prop="remark"></el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <!-- 分页 -->
|
|
|
+ <el-pagination
|
|
|
+ background
|
|
|
+ @current-change="handlePageChange"
|
|
|
+ :page-size="50"
|
|
|
+ :current-page.sync="pageNo"
|
|
|
+ layout="prev, pager, next"
|
|
|
+ v-if="searchResult.length!==0"
|
|
|
+ :total="totalNumber"
|
|
|
+ ></el-pagination>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+<script>
|
|
|
+import {
|
|
|
+ getTeamSelect,
|
|
|
+ getProjectSelect,
|
|
|
+ getProductSelect,
|
|
|
+ getCostTeamSelect,
|
|
|
+ getCostTypeSelect,
|
|
|
+ addManage,
|
|
|
+ getManageList,
|
|
|
+ setManage
|
|
|
+} from "@/api/manageApi";
|
|
|
+import TitleBar from "../layout/titleBar/TitleBar.vue";
|
|
|
+import { formatTime } from "../../utils/common";
|
|
|
+const statusOptions = ["INVOICE", "ARRIVAL", "INTERNAL"];
|
|
|
+export default {
|
|
|
+ components: {
|
|
|
+ TitleBar
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ type: "",
|
|
|
+ dialogFormVisible: false,
|
|
|
+ addFlag: false,
|
|
|
+ id: "",
|
|
|
+ searchResult: [],
|
|
|
+ form: {
|
|
|
+ type: "",
|
|
|
+ productId: "",
|
|
|
+ projectId: "",
|
|
|
+ toDeptId: "",
|
|
|
+ toProjectId: "",
|
|
|
+ deptId: "",
|
|
|
+ incomeStatus: [],
|
|
|
+ status: "NORMAL",
|
|
|
+ costTypeId: "",
|
|
|
+ startTime: null,
|
|
|
+ endTime: null,
|
|
|
+ minAmount: "",
|
|
|
+ maxAmount: "",
|
|
|
+ isEntry: false,
|
|
|
+ pageNo: 1,
|
|
|
+ pageSize: 50
|
|
|
+ },
|
|
|
+ pageNo: 1,
|
|
|
+ pageSize: 50,
|
|
|
+ totalNumber: 0,
|
|
|
+ formLabelWidth: "120px",
|
|
|
+ teamSelectData: [],
|
|
|
+ projectSelectData: [],
|
|
|
+ productSelectData: [],
|
|
|
+ costTeamSelectData: [],
|
|
|
+ costTypeSelectData: [],
|
|
|
+ manageData: [],
|
|
|
+ companyData: [],
|
|
|
+ tableType: "",
|
|
|
+ isIndeterminate: true,
|
|
|
+ checkAll: false
|
|
|
+ };
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ // 获取部门下拉框
|
|
|
+ getTeamSelect().then(res => {
|
|
|
+ this.teamSelectData = res.data;
|
|
|
+ });
|
|
|
+ // 获取项目下拉框
|
|
|
+ getProjectSelect().then(res => {
|
|
|
+ this.projectSelectData = res.data;
|
|
|
+ });
|
|
|
+ //获取产品下拉框
|
|
|
+ getProductSelect().then(res => {
|
|
|
+ this.productSelectData = res.data;
|
|
|
+ });
|
|
|
+ //获取经营列表
|
|
|
+ // getManageList({
|
|
|
+ // type: "INCOME"
|
|
|
+ // }).then(res => {
|
|
|
+ // this.manageData = res.data;
|
|
|
+ // console.log(res.data);
|
|
|
+ // });
|
|
|
+ //获取单位下拉
|
|
|
+ getCostTeamSelect().then(res => {
|
|
|
+ this.costTeamSelectData = res.data;
|
|
|
+ });
|
|
|
+ //获取成本类型下拉
|
|
|
+ getCostTypeSelect().then(res => {
|
|
|
+ this.costTypeSelectData = res.data;
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ methods: {
|
|
|
+ // 自定义合计
|
|
|
+ tableSummary(param) {
|
|
|
+ const { columns, data } = param;
|
|
|
+ const sums = [];
|
|
|
+ // columns.forEach((column, index) => {
|
|
|
+ // if (index === 0) {
|
|
|
+ // sums[index] = '总价';
|
|
|
+ // return;
|
|
|
+ // }
|
|
|
+ // const values = data.map(item => Number(item[column.property]));
|
|
|
+ // if (!values.every(value => isNaN(value))) {
|
|
|
+ // sums[index] = values.reduce((prev, curr) => {
|
|
|
+ // const value = Number(curr);
|
|
|
+ // if (!isNaN(value)) {
|
|
|
+ // return prev + curr;
|
|
|
+ // } else {
|
|
|
+ // return prev;
|
|
|
+ // }
|
|
|
+ // }, 0);
|
|
|
+ // sums[index] += ' 元';
|
|
|
+ // } else {
|
|
|
+ // sums[index] = 'N/A';
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ return sums;
|
|
|
+ },
|
|
|
+ ttt(param) {
|
|
|
+ // const { columns } = param;
|
|
|
+ // const sums = [];
|
|
|
+ // console.log(data);
|
|
|
+ // columns.forEach((column, index) => {
|
|
|
+ // console.log(column.property);
|
|
|
+ // switch (column.property) {
|
|
|
+ // case "happenTime":
|
|
|
+ // sums[index] = "";
|
|
|
+ // break;
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ },
|
|
|
+ // 金额格式化
|
|
|
+ moneyFormat(row) {
|
|
|
+ return row.amount.toFixed(2);
|
|
|
+ },
|
|
|
+ // 全选
|
|
|
+ handleCheckAllChange(val) {
|
|
|
+ this.form.incomeStatus = val ? statusOptions : [];
|
|
|
+ this.isIndeterminate = false;
|
|
|
+ this.checkAll = val;
|
|
|
+ },
|
|
|
+ handlePageChange(val) {
|
|
|
+ this.form.pageNo = val;
|
|
|
+ this.$post("manageBase/manage/search", this.form).then(response => {
|
|
|
+ this.searchResult = response.data.content;
|
|
|
+ this.totalNumber = parseInt(response.data.totalElements);
|
|
|
+ this.pageNo = parseInt(response.data.number) + 1;
|
|
|
+ if (response.data && response.data.content.length == 0) {
|
|
|
+ this.$message("未找到相应数据");
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ onSubmit() {
|
|
|
+ // this.totalNumber = 0;
|
|
|
+ this.searchResult = [];
|
|
|
+ if (this.form.type === "INCOME") {
|
|
|
+ this.form.costTypeId = "";
|
|
|
+ this.tableType = "INCOME";
|
|
|
+ }
|
|
|
+ if (this.form.type === "COST") {
|
|
|
+ this.form.incomeStatus = "";
|
|
|
+ this.form.productId = "";
|
|
|
+ this.tableType = "COST";
|
|
|
+ }
|
|
|
+ this.form.pageNo = 1;
|
|
|
+ this.$post("manageBase/manage/search", this.form).then(response => {
|
|
|
+ this.searchResult = response.data.content;
|
|
|
+ this.totalNumber = parseInt(response.data.totalElements);
|
|
|
+ this.pageNo = parseInt(response.data.number) + 1;
|
|
|
+ if (response.data && response.data.content.length == 0) {
|
|
|
+ this.$message("未找到相应数据");
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ onReset() {
|
|
|
+ this.form.type = "";
|
|
|
+ this.form.costTypeId = "";
|
|
|
+ this.tableType = "";
|
|
|
+ this.searchResult = "";
|
|
|
+ this.$refs.form.resetFields();
|
|
|
+ },
|
|
|
+ tableRowClassName({ row, rowIndex }) {
|
|
|
+ if (row.type === "COST") {
|
|
|
+ return "cost-row-search";
|
|
|
+ } else {
|
|
|
+ return "income-row-search";
|
|
|
+ }
|
|
|
+ // return "";
|
|
|
+ },
|
|
|
+ //获取部门名称
|
|
|
+ getName(val) {
|
|
|
+ let obj = {};
|
|
|
+ obj = this.teamSelectData.find(item => {
|
|
|
+ return item.id === val;
|
|
|
+ });
|
|
|
+ let getName = "";
|
|
|
+ this.form.deptName = obj.name;
|
|
|
+ },
|
|
|
+ // 添加
|
|
|
+ append(type) {
|
|
|
+ this.type = type;
|
|
|
+ this.dialogFormVisible = true;
|
|
|
+ this.addFlag = true;
|
|
|
+ },
|
|
|
+ // 格式化时间
|
|
|
+ dateFormat(row, column) {
|
|
|
+ return formatTime(row.happenTime);
|
|
|
+ },
|
|
|
+ recordTimeFormat(row) {
|
|
|
+ return formatTime(row.gmtModified);
|
|
|
+ },
|
|
|
+ incomeTypeFormat(row) {
|
|
|
+ return row.incomeStatus == "INVOICE"
|
|
|
+ ? "开票/应收"
|
|
|
+ : row.incomeStatus == "ARRIVAL"
|
|
|
+ ? "到账"
|
|
|
+ : "内部核算";
|
|
|
+ }
|
|
|
+ }
|
|
|
+};
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scope>
|
|
|
+.marginTop {
|
|
|
+ margin-top: 20px;
|
|
|
+}
|
|
|
+.el-table .cost-row-search {
|
|
|
+ /* color: green; */
|
|
|
+ /* background: #f0f9eb; */
|
|
|
+ color: green;
|
|
|
+}
|
|
|
+
|
|
|
+.el-table .income-row-search {
|
|
|
+ /* color: red; */
|
|
|
+ /* background: rgba(248, 181, 172, 0.267); */
|
|
|
+ color: red;
|
|
|
+ /* color: #f0f9eb; */
|
|
|
+}
|
|
|
+</style>
|