query.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551
  1. <template>
  2. <div>
  3. <!-- <TitleBar propTitle="经营数据查询" /> -->
  4. <el-form :model="form" ref="form" class="marginTop">
  5. <el-form-item label="查询类别" :label-width="formLabelWidth">
  6. <el-radio-group
  7. v-model="form.type"
  8. placeholder="请选择类别"
  9. size="medium"
  10. :rules="[{ required: true, message: '必选'}]"
  11. style="width:100%"
  12. >
  13. <el-row :gutter="10">
  14. <el-col :span="4">
  15. <el-radio border style="width:100%;" label="INCOME">收入</el-radio>
  16. </el-col>
  17. <el-col :span="4">
  18. <el-radio border style="width:100%;" label="COST">成本</el-radio>
  19. </el-col>
  20. </el-row>
  21. </el-radio-group>
  22. </el-form-item>
  23. <el-form-item label="时间范围" v-if="form.type!==''" :label-width="formLabelWidth">
  24. <el-row :gutter="10">
  25. <el-col :span="4">
  26. <el-date-picker placeholder="起始时间" style="width:100%" v-model="form.startTime"></el-date-picker>
  27. </el-col>
  28. <el-col :span="4">
  29. <el-date-picker placeholder="结束时间" style="width:100%" v-model="form.endTime"></el-date-picker>
  30. </el-col>
  31. </el-row>
  32. </el-form-item>
  33. <!-- <el-form-item label="金额范围" v-if="form.type!==''" :label-width="formLabelWidth">
  34. <el-row :gutter="10">
  35. <el-col :span="4">
  36. <el-input placeholder="起始金额" style="width:100%" v-model="form.minAmount" clearable></el-input>
  37. </el-col>
  38. <el-col :span="4">
  39. <el-input placeholder="结束金额" style="width:100%" v-model="form.maxAmount" clearable></el-input>
  40. </el-col>
  41. </el-row>
  42. </el-form-item>-->
  43. <el-form-item
  44. label="成本类型"
  45. v-if="form.type==='COST'"
  46. prop="costTypeId"
  47. :label-width="formLabelWidth"
  48. >
  49. <el-select v-model="form.costTypeId" multiple placeholder="全选" ref="select">
  50. <el-option
  51. v-for="item in costTypeSelectData"
  52. :key="item.id"
  53. :label="item.name"
  54. :value="item.id"
  55. ></el-option>
  56. </el-select>
  57. </el-form-item>
  58. <el-form-item label="收入状态" v-if="form.type==='INCOME'" :label-width="formLabelWidth">
  59. <el-select v-model="form.incomeStatus" multiple placeholder="全选">
  60. <el-option
  61. v-for="item in incomeStatus"
  62. :key="item.id"
  63. :label="item.name"
  64. :value="item.id"
  65. ></el-option>
  66. </el-select>
  67. <!-- <el-row :gutter="10">
  68. <el-col :span="1">
  69. <el-checkbox
  70. :indeterminate="isIndeterminate"
  71. v-model="checkAll"
  72. @change="handleCheckAllChange"
  73. size="medium"
  74. >全选</el-checkbox>
  75. </el-col>
  76. <el-checkbox-group
  77. style="width:100%"
  78. v-model="form.incomeStatus"
  79. placeholder="请选择状态值"
  80. size="medium"
  81. :indeterminate="isIndeterminate"
  82. >
  83. <el-col :span="4">
  84. <el-checkbox style="width:100%;" border label="INVOICE">开票/应收</el-checkbox>
  85. </el-col>
  86. <el-col :span="4">
  87. <el-checkbox style="width:100%;" border label="ARRIVAL">到账</el-checkbox>
  88. </el-col>
  89. <el-col :span="4">
  90. <el-checkbox style="width:100%;" border label="INTERNAL">内部核算</el-checkbox>
  91. </el-col>
  92. </el-checkbox-group>
  93. </el-row>-->
  94. </el-form-item>
  95. <el-form-item
  96. label="归属产品"
  97. v-if="form.type==='INCOME'"
  98. prop="productId"
  99. :label-width="formLabelWidth"
  100. >
  101. <el-select v-model="form.productId" multiple placeholder="全选">
  102. <el-option
  103. v-for="item in productSelectData"
  104. :key="item.id"
  105. :label="item.code +'--'+ item.name"
  106. :value="item.id"
  107. ></el-option>
  108. </el-select>
  109. </el-form-item>
  110. <el-form-item
  111. label="归属项目"
  112. v-if="form.type!==''"
  113. prop="projectId"
  114. :label-width="formLabelWidth"
  115. >
  116. <el-select v-model="form.projectId" multiple placeholder="全选">
  117. <el-option
  118. v-for="item in projectSelectData"
  119. :key="item.id"
  120. :label="item.code +'--'+ item.name"
  121. :value="item.id"
  122. ></el-option>
  123. </el-select>
  124. </el-form-item>
  125. <el-form-item
  126. label="归属部门"
  127. prop="deptId"
  128. multiple
  129. v-if="form.type!==''"
  130. :label-width="formLabelWidth"
  131. >
  132. <el-select v-model="form.deptId" multiple placeholder="全选" ref="select">
  133. <el-option
  134. v-for="item in teamSelectData"
  135. :key="item.id"
  136. :label="item.code +'--'+ item.name"
  137. :value="item.id"
  138. ></el-option>
  139. </el-select>
  140. </el-form-item>
  141. <el-form-item
  142. label="来源项目"
  143. prop="toProjectId"
  144. v-if="form.type==='INCOME'"
  145. :label-width="formLabelWidth"
  146. >
  147. <el-select v-model="form.toProjectId" multiple placeholder="全选">
  148. <el-option
  149. v-for="item in projectSelectData"
  150. :key="item.id"
  151. :label="item.code +'--'+ item.name"
  152. :value="item.id"
  153. ></el-option>
  154. </el-select>
  155. </el-form-item>
  156. <el-form-item
  157. label="来源部门"
  158. prop="toDeptId"
  159. v-if="form.type==='INCOME'"
  160. :label-width="formLabelWidth"
  161. >
  162. <el-select v-model="form.toDeptId" multiple placeholder="全选" ref="select">
  163. <el-option
  164. v-for="item in teamSelectData"
  165. :key="item.id"
  166. :label="item.code +'--'+ item.name"
  167. :value="item.id"
  168. ></el-option>
  169. </el-select>
  170. </el-form-item>
  171. <el-form-item
  172. label="接收项目"
  173. prop="toProjectId"
  174. v-if="form.type==='COST'"
  175. :label-width="formLabelWidth"
  176. >
  177. <el-select v-model="form.toProjectId" multiple placeholder="全选">
  178. <el-option
  179. v-for="item in projectSelectData"
  180. :key="item.id"
  181. :label="item.code +'--'+ item.name"
  182. :value="item.id"
  183. ></el-option>
  184. </el-select>
  185. </el-form-item>
  186. <el-form-item
  187. label="接收部门"
  188. prop="toDeptId"
  189. v-if="form.type==='COST'"
  190. :label-width="formLabelWidth"
  191. >
  192. <el-select v-model="form.toDeptId" multiple placeholder="全选" ref="select">
  193. <el-option
  194. v-for="item in teamSelectData"
  195. :key="item.id"
  196. :label="item.code +'--'+ item.name"
  197. :value="item.id"
  198. ></el-option>
  199. </el-select>
  200. </el-form-item>
  201. <el-form-item style="position: absolute; width:23%; left:300px;">
  202. <el-button type="primary" @click="onSubmit">查询</el-button>
  203. <!-- <el-button type="info" @click="onReset">重置</el-button> -->
  204. </el-form-item>
  205. <!-- <el-form-item>
  206. <el-button type="info" @click="reset">重置</el-button>
  207. </el-form-item>-->
  208. </el-form>
  209. <!-- 查询结果收入表 -->
  210. <div class="totalSumDiv" >全部金额合计:{{totalSum}}</div>
  211. <el-table
  212. :data="searchResult"
  213. style="margin-top:30px; margin-left:20px;"
  214. :summary-method="tableSummary"
  215. show-summary
  216. v-if="tableType === 'INCOME'"
  217. border
  218. >
  219. <el-table-column
  220. prop="happenTime"
  221. width="120px"
  222. align="right"
  223. :formatter="dateFormat"
  224. label="发生日期"
  225. ></el-table-column>
  226. <el-table-column
  227. :formatter="moneyFormat"
  228. prop="amount"
  229. width="110px"
  230. align="right"
  231. label="金额"
  232. ></el-table-column>
  233. <el-table-column
  234. label="收入状态"
  235. width="130px"
  236. align="right"
  237. prop="incomeStatus"
  238. :formatter="incomeTypeFormat"
  239. ></el-table-column>
  240. <el-table-column label="产品" width="200px" align="right" prop="product.name"></el-table-column>
  241. <el-table-column label="归属项目" width="290px" align="right" prop="project.name"></el-table-column>
  242. <el-table-column label="归属部门" width="250px" align="right" prop="department.name"></el-table-column>
  243. <el-table-column label="来源项目" width="290px" align="right" prop="toProject.name"></el-table-column>
  244. <el-table-column label="来源部门" width="220px" align="right" prop="toDepartment.name"></el-table-column>
  245. <el-table-column prop="remark" align="right" width="330px" label="备注"></el-table-column>
  246. <el-table-column
  247. width="120px"
  248. align="right"
  249. label="录入日期"
  250. :formatter="recordTimeFormat"
  251. prop="gmtModife"
  252. ></el-table-column>
  253. </el-table>
  254. <!-- 查询结果成本表 -->
  255. <el-table
  256. :data="searchResult"
  257. style=";margin-top:30px; margin-left:20px;"
  258. show-summary
  259. :summary-method="tableSummary"
  260. v-if="tableType === 'COST'"
  261. border
  262. >
  263. <el-table-column
  264. prop="happenTime"
  265. width="120px"
  266. align="right"
  267. :formatter="dateFormat"
  268. label="发生日期"
  269. ></el-table-column>
  270. <el-table-column
  271. :formatter="moneyFormat"
  272. prop="amount"
  273. width="110px"
  274. align="right"
  275. label="金额"
  276. ></el-table-column>
  277. <el-table-column label="成本类别" width="130px" align="right" prop="costType.name"></el-table-column>
  278. <el-table-column label="发生部门" width="220px" align="right" prop="department.name"></el-table-column>
  279. <el-table-column label="发生项目/人" width="300px" align="right" prop="project.name"></el-table-column>
  280. <el-table-column label="接收项目" width="300px" align="right" prop="toProject.name"></el-table-column>
  281. <el-table-column label="接收部门" width="220px" align="right" prop="toDepartment.name"></el-table-column>
  282. <el-table-column label="备注" width="320px" align="right" prop="remark"></el-table-column>
  283. <el-table-column
  284. width="120px"
  285. align="right"
  286. label="录入日期"
  287. :formatter="recordTimeFormat"
  288. prop="gmtModife"
  289. ></el-table-column>
  290. </el-table>
  291. <!-- 分页 -->
  292. <el-pagination
  293. background
  294. @current-change="handlePageChange"
  295. :page-size="50"
  296. :current-page.sync="pageNo"
  297. layout="prev, pager, next"
  298. v-if="searchResult && searchResult.length!==0"
  299. :total="totalNumber"
  300. ></el-pagination>
  301. </div>
  302. </template>
  303. <script>
  304. import {
  305. getTeamSelect,
  306. getProjectSelect,
  307. getProductSelect,
  308. getCostTeamSelect,
  309. getCostTypeSelect,
  310. addManage,
  311. getManageList,
  312. setManage
  313. } from "@/api/manageApi";
  314. import TitleBar from "../layout/titleBar/TitleBar.vue";
  315. import { formatTime } from "../../utils/common";
  316. const statusOptions = ["INVOICE", "ARRIVAL", "INTERNAL"];
  317. export default {
  318. components: {
  319. TitleBar
  320. },
  321. data() {
  322. return {
  323. type: "",
  324. dialogFormVisible: false,
  325. addFlag: false,
  326. id: "",
  327. searchResult: [],
  328. form: {
  329. type: "INCOME",
  330. productId: [],
  331. projectId: [],
  332. toDeptId: "",
  333. toProjectId: "",
  334. deptId: [],
  335. incomeStatus: [],
  336. status: "NORMAL",
  337. costTypeId: [],
  338. startTime: null,
  339. endTime: null,
  340. minAmount: "",
  341. maxAmount: "",
  342. isEntry: false,
  343. pageNo: 1,
  344. pageSize: 50
  345. },
  346. pageNo: 1,
  347. pageSize: 50,
  348. totalNumber: 0,
  349. formLabelWidth: "120px",
  350. teamSelectData: [],
  351. projectSelectData: [],
  352. productSelectData: [],
  353. costTeamSelectData: [],
  354. costTypeSelectData: [],
  355. manageData: [],
  356. companyData: [],
  357. tableType: "",
  358. isIndeterminate: true,
  359. checkAll: false,
  360. totalSum: 0, // 后台返回的合计
  361. incomeStatus: [
  362. { name: "开票/应收", id: "INVOICE" },
  363. { name: "到账", id: "ARRIVAL" },
  364. { name: "内部核算", id: "INTERNAL" }
  365. ]
  366. };
  367. },
  368. created() {
  369. // 获取部门下拉框
  370. getTeamSelect().then(res => {
  371. this.teamSelectData = res.data;
  372. });
  373. // 获取项目下拉框
  374. getProjectSelect().then(res => {
  375. this.projectSelectData = res.data;
  376. });
  377. //获取产品下拉框
  378. getProductSelect().then(res => {
  379. this.productSelectData = res.data;
  380. });
  381. //获取经营列表
  382. // getManageList({
  383. // type: "INCOME"
  384. // }).then(res => {
  385. // this.manageData = res.data;
  386. // console.log(res.data);
  387. // });
  388. //获取单位下拉
  389. getCostTeamSelect().then(res => {
  390. this.costTeamSelectData = res.data;
  391. });
  392. //获取成本类型下拉
  393. getCostTypeSelect().then(res => {
  394. this.costTypeSelectData = res.data;
  395. });
  396. },
  397. methods: {
  398. // 自定义合计
  399. tableSummary(param) {
  400. const { columns, data } = param;
  401. const sums = [];
  402. columns.forEach((column, index) => {
  403. switch (column.property) {
  404. case "happenTime":
  405. sums[index] = "本页合计";
  406. break;
  407. // case "happenTime":
  408. // sums[index] = "";
  409. // break;
  410. case "amount":
  411. const amountNum = data.map(item => Number(item["amount"]));
  412. console.log(amountNum);
  413. sums[index] = amountNum.reduce((prev, cur) => {
  414. // const sum = prev.toFixed(2) + cur.toFixed(2);
  415. return (parseFloat(prev) + parseFloat(cur)).toFixed(2);
  416. }, 0);
  417. break;
  418. case "remark":
  419. sums[index] = "全部合计:";
  420. break;
  421. case "gmtModife":
  422. sums[index] = this.totalSum;
  423. break;
  424. default:
  425. break;
  426. }
  427. });
  428. return sums;
  429. },
  430. // 金额格式化
  431. moneyFormat(row) {
  432. return row.amount.toFixed(2);
  433. },
  434. // 全选
  435. handleCheckAllChange(val) {
  436. this.form.incomeStatus = val ? statusOptions : [];
  437. this.isIndeterminate = false;
  438. this.checkAll = val;
  439. },
  440. handlePageChange(val) {
  441. this.form.pageNo = val;
  442. this.$post("manageBase/manage/search", this.form).then(response => {
  443. this.searchResult = response.data.content;
  444. this.totalNumber = parseInt(response.data.totalElements);
  445. this.pageNo = parseInt(response.data.number) + 1;
  446. if (response.data && response.data.length == 0) {
  447. this.$message("未找到相应数据");
  448. }
  449. });
  450. },
  451. onSubmit() {
  452. // this.totalNumber = 0;
  453. this.searchResult = [];
  454. if (this.form.type === "INCOME") {
  455. this.form.costTypeId = "";
  456. this.tableType = "INCOME";
  457. }
  458. if (this.form.type === "COST") {
  459. this.form.incomeStatus = "";
  460. this.form.productId = "";
  461. this.tableType = "COST";
  462. }
  463. this.form.pageNo = 1;
  464. this.$post("manageBase/manage/search", this.form).then(response => {
  465. this.searchResult = response.data.content;
  466. this.totalNumber = parseInt(response.data.totalElements);
  467. this.pageNo = parseInt(response.data.number) + 1;
  468. this.totalSum = response.data.content[0].totalAmount.toFixed(2);
  469. console.log("全部合计", response.data.content[0].totalAmount);
  470. if (response.data && response.data.length == 0) {
  471. this.$message("未找到相应数据");
  472. }
  473. });
  474. },
  475. onReset() {
  476. this.form.type = "";
  477. this.form.costTypeId = "";
  478. this.tableType = "";
  479. this.searchResult = "";
  480. this.$refs.form.resetFields();
  481. },
  482. tableRowClassName({ row, rowIndex }) {
  483. if (row.type === "COST") {
  484. return "cost-row-search";
  485. } else {
  486. return "income-row-search";
  487. }
  488. // return "";
  489. },
  490. //获取部门名称
  491. getName(val) {
  492. let obj = {};
  493. obj = this.teamSelectData.find(item => {
  494. return item.id === val;
  495. });
  496. let getName = "";
  497. this.form.deptName = obj.name;
  498. },
  499. // 添加
  500. append(type) {
  501. this.type = type;
  502. this.dialogFormVisible = true;
  503. this.addFlag = true;
  504. },
  505. // 格式化时间
  506. dateFormat(row, column) {
  507. return formatTime(row.happenTime);
  508. },
  509. recordTimeFormat(row) {
  510. return formatTime(row.gmtModified);
  511. },
  512. incomeTypeFormat(row) {
  513. return row.incomeStatus == "INVOICE"
  514. ? "开票/应收"
  515. : row.incomeStatus == "ARRIVAL"
  516. ? "到账"
  517. : "内部核算";
  518. }
  519. }
  520. };
  521. </script>
  522. <style scope>
  523. .marginTop {
  524. margin-top: 20px;
  525. }
  526. .el-table .cost-row-search {
  527. /* color: green; */
  528. /* background: #f0f9eb; */
  529. color: green;
  530. }
  531. .el-table .income-row-search {
  532. /* color: red; */
  533. /* background: rgba(248, 181, 172, 0.267); */
  534. color: red;
  535. /* color: #f0f9eb; */
  536. }
  537. .totalSumDiv{
  538. width: 100%;
  539. /* text-align: right; */
  540. padding-left: 120px;
  541. display: block;
  542. margin-top: 80px;
  543. }
  544. </style>