AssetInventoryOverallSearch.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667
  1. <template>
  2. <div>
  3. <div class="grid-container">
  4. <div class="grid-item-row1-column1">
  5. <div class="btn-group m-panel" role="group">
  6. <button
  7. type="button"
  8. class="btn btn-success"
  9. @click="getAssetInstance"
  10. >
  11. {{ $t("lang.AssetInventorySearch.query") }}
  12. </button>
  13. <button
  14. type="button"
  15. class="btn btn-info"
  16. @click="generateAssetInventoryLine"
  17. >
  18. {{ $t("lang.AssetInventorySearch.generateAssetCountDetails") }}
  19. </button>
  20. <button type="button" class="btn btn-danger" @click="clearFilter">
  21. {{ $t("lang.AssetInventorySearch.empty") }}
  22. </button>
  23. </div>
  24. </div>
  25. <div class="grid-item-row2-column1">
  26. <div>
  27. <div class="panel panel-default m-panel">
  28. <div
  29. class="panel-heading"
  30. @click="type == 1 ? (type = 0) : (type = 1)"
  31. >
  32. {{ $t("lang.AssetInventorySearch.ownerDepartment") }}
  33. </div>
  34. <div v-show="type == 1" class="panel-body">
  35. <ClientOrganizationTree
  36. ref="organization"
  37. :ids="assetInventoryOrganizationIds"
  38. @select-changed="selectChanged"
  39. />
  40. </div>
  41. </div>
  42. <div class="panel panel-default m-panel">
  43. <div
  44. class="panel-heading"
  45. @click="type == 3 ? (type = 0) : (type = 3)"
  46. >
  47. {{ $t("lang.AssetInventorySearch.useDepartment") }}
  48. </div>
  49. <div v-show="type == 3" class="panel-body">
  50. <ClientOrganizationTree
  51. ref="responseOrganization"
  52. :ids="assetInventoryResponseOrganizationIds"
  53. @select-changed="selectChanged"
  54. />
  55. </div>
  56. </div>
  57. <div class="panel panel-default m-panel">
  58. <div
  59. class="panel-heading"
  60. @click="type == 2 ? (type = 0) : (type = 2)"
  61. >
  62. {{ $t("lang.AssetInventorySearch.category") }}
  63. </div>
  64. <div v-show="type == 2" class="panel-body">
  65. <div>
  66. <AssetCategoryTree
  67. ref="assetCategory"
  68. :ids="assetInventoryCategoryIds"
  69. @select-changed="selectChanged"
  70. />
  71. </div>
  72. </div>
  73. </div>
  74. <div class="panel panel-default m-panel">
  75. <div
  76. class="panel-heading"
  77. @click="type == 4 ? (type = 0) : (type = 4)"
  78. >
  79. {{ $t("lang.AssetInventorySearch.project") }}
  80. </div>
  81. <div v-show="type == 4" class="panel-body">
  82. <div>
  83. <ProjectItemTree
  84. ref="projectItem"
  85. :ids="assetInventoryProjectItemIds"
  86. @select-changed="selectChanged"
  87. />
  88. </div>
  89. </div>
  90. </div>
  91. </div>
  92. </div>
  93. <div class="grid-item-row2-column2">
  94. <table class="fixed-table table-striped table-bordered">
  95. <thead>
  96. <tr>
  97. <th style="width: 130px">
  98. {{ $t("lang.AssetInventorySearch.ownerClient") }}
  99. </th>
  100. <th style="width: 130px">
  101. {{ $t("lang.AssetInventorySearch.ownerDepartment") }}
  102. </th>
  103. <th style="width: 130px">
  104. {{ $t("lang.AssetInventorySearch.useClient") }}
  105. </th>
  106. <th style="width: 130px">
  107. {{ $t("lang.AssetInventorySearch.useDepartment") }}
  108. </th>
  109. <th style="width: 130px">
  110. {{ $t("lang.AssetInventorySearch.assetName") }}
  111. </th>
  112. <th style="width: 130px">
  113. {{ $t("lang.AssetInventorySearch.assetNumber") }}
  114. </th>
  115. <th style="width: 130px">
  116. {{ $t("lang.AssetInventorySearch.cardNumber") }}
  117. </th>
  118. <th style="width: 130px">
  119. {{ $t("lang.AssetInventorySearch.type") }}
  120. </th>
  121. <th style="width: 130px">
  122. {{ $t("lang.AssetInventorySearch.assetClassification") }}
  123. </th>
  124. <th style="width: 130px">
  125. {{ $t("lang.AssetInventorySearch.subordinateToTheProject") }}
  126. </th>
  127. <th style="width: 90px">
  128. {{ $t("lang.AssetInventorySearch.originalValue") }}
  129. </th>
  130. <th style="width: 100px">
  131. {{ $t("lang.AssetInventorySearch.placeOfPlacement") }}
  132. </th>
  133. <th style="width: 100px">
  134. {{ $t("lang.AssetInventorySearch.placementLocation") }}
  135. </th>
  136. <th style="width: 100px">
  137. {{ $t("lang.AssetInventorySearch.unitOfMeasurement") }}
  138. </th>
  139. <th style="width: 100px">
  140. {{ $t("lang.AssetInventorySearch.user") }}
  141. </th>
  142. <th style="width: 100px">
  143. {{ $t("lang.AssetInventorySearch.usageStatus") }}
  144. </th>
  145. <th style="width: 100px">
  146. {{ $t("lang.AssetInventorySearch.userInput") }}
  147. </th>
  148. <th style="width: 130px">
  149. {{ $t("lang.AssetInventorySearch.licensePlate") }}
  150. </th>
  151. <th style="width: 130px">
  152. {{ $t("lang.AssetInventorySearch.selfNumbering") }}
  153. </th>
  154. <th style="width: 130px">
  155. {{ $t("lang.AssetInventorySearch.startUseDate") }}
  156. </th>
  157. <th style="width: 130px">
  158. {{ $t("lang.AssetInventorySearch.remarks") }}
  159. </th>
  160. </tr>
  161. </thead>
  162. <tbody>
  163. <tr
  164. v-for="assetInstance in assetInstances"
  165. :key="assetInstance.id"
  166. @dblclick="openCurdWindow(assetInstance)"
  167. >
  168. <td>{{ assetInstance.clientName }}</td>
  169. <td>{{ assetInstance.organizationName }}</td>
  170. <td>{{ assetInstance.responseClientName }}</td>
  171. <td>{{ assetInstance.responseOrganizationName }}</td>
  172. <td>{{ assetInstance.name }}</td>
  173. <td>{{ assetInstance.assetNo }}</td>
  174. <td>{{ assetInstance.no }}</td>
  175. <td>{{ assetInstance.type }}</td>
  176. <td>{{ assetInstance.categoryName }}</td>
  177. <td>{{ assetInstance.projectItemName }}</td>
  178. <td>{{ assetInstance.orginalValue }}</td>
  179. <td>{{ assetInstance.savePosition }}</td>
  180. <td>{{ assetInstance.locationName }}</td>
  181. <td>{{ assetInstance.computationUnitName }}</td>
  182. <td>{{ assetInstance.useUserName }}</td>
  183. <td>{{ assetInstance.useStatusName }}</td>
  184. <td>{{ assetInstance.useUserNameInput }}</td>
  185. <td>{{ assetInstance.vehicleNo }}</td>
  186. <td>{{ assetInstance.selfNo }}</td>
  187. <td>{{ assetInstance.depreciationStartDate }}</td>
  188. <td>{{ assetInstance.description }}</td>
  189. </tr>
  190. </tbody>
  191. </table>
  192. </div>
  193. <div class="grid-item-row3-column2">
  194. <div>
  195. <p class="bg-success m-grid-footer">
  196. {{ $t("lang.AssetInventorySearch.totalOfOriginalValue") }}:{{
  197. orginalValueTotal
  198. }}
  199. </p>
  200. </div>
  201. </div>
  202. <div class="grid-item-row4-column2">
  203. <div>
  204. <div class="pull-left">
  205. <span>{{ $t("lang.AssetInventorySearch.the")
  206. }}{{ (pagination.current_page - 1) * pagination.per_page + 1 }}-{{
  207. pagination.current_page * pagination.per_page
  208. }}{{ $t("lang.AssetInventorySearch.strip") }},{{
  209. $t("lang.AssetInventorySearch.inTotal")
  210. }}{{ pagination.total
  211. }}{{ $t("lang.AssetInventorySearch.strip") }},{{
  212. $t("lang.AssetInventorySearch.eachPage")
  213. }}</span>
  214. <PageSizeSelect @page-size-changed="pageSizeChanged" />
  215. <span>{{ $t("lang.AssetInventorySearch.strip") }}</span>
  216. </div>
  217. <div class="pull-right">
  218. <VueBootstrapPagination :pagination="pagination" :callback="pageStartChanged" />
  219. </div>
  220. </div>
  221. </div>
  222. </div>
  223. <div class="flex-container-1">
  224. <div class="flex-content-1">
  225. <div class="flex-main-1">
  226. <div>
  227. <div class="flex-container-2">
  228. <div class="flex-header-2">
  229. <div class="m-row" />
  230. </div>
  231. <div class="flex-content-2">
  232. <div class="flex-main-2" />
  233. </div>
  234. </div>
  235. </div>
  236. </div>
  237. </div>
  238. </div>
  239. <Loading v-if="loading" />
  240. </div>
  241. </template>
  242. <script>
  243. import Common from '../../common/Common.js';
  244. import AssetInstanceResource from '../../api/asset/AssetInstanceResource.js';
  245. import AssetInventoryResource from '../../api/asset/AssetInventoryResource.js';
  246. import ClientOrganizationTree from '../../widget/ClientOrganizationTree.vue';
  247. import ProjectItemTree from '../../widget/ProjectItemTree.vue';
  248. import AssetCategoryTree from '../../widget/AssetCategoryTree.vue';
  249. import { Notify, Uuid } from 'pc-component-v3';
  250. export default {
  251. components: {
  252. ProjectItemTree,
  253. AssetCategoryTree,
  254. ClientOrganizationTree,
  255. },
  256. props: {
  257. assetInventoryId: {
  258. type: Number,
  259. default: null,
  260. },
  261. },
  262. data: function () {
  263. return {
  264. assetInventory: {}, // 资产盘点
  265. clientOrganizations: [], // 所属部门
  266. responseClientOrganizations: [], // 使用部门
  267. categories: [], // 资产类别
  268. projectItems: [], // 项目类别
  269. useStatus: [], //使用状态
  270. type: null, //全盘搜索条件
  271. assetInstances: [],
  272. additionalHql: '',
  273. pagination: {
  274. total: 0,
  275. per_page: Common.pageSize, // required
  276. current_page: 1, // required
  277. last_page: 1, // required
  278. },
  279. filter: {},
  280. totalCount: 0,
  281. orginalValueTotal: 0,
  282. totalAmountOfImpairmentTotal: 0,
  283. netSalvageTotal: 0,
  284. uuid: Uuid.createUUID(),
  285. assetInventoryOrganizationIds: [], // 盘点单中已经选中的使用部门
  286. assetInventoryResponseOrganizationIds: [], // 盘点单中已经选中的所属部门
  287. assetInventoryCategoryIds: [], // 盘点单中已经选中的资产类别
  288. assetInventoryProjectItemIds: [], // 盘点单中已经选择的项目
  289. loading: false,
  290. };
  291. },
  292. mounted: function () {
  293. var _self = this;
  294. _self.$nextTick(function () {
  295. _self.getAssetInventory();
  296. // 固定行
  297. _self.fixedTableHeader();
  298. });
  299. // 可调整表格列宽
  300. _self.$nextTick(function () {
  301. $('.fixed-table').resizableColumns();
  302. });
  303. },
  304. methods: {
  305. selectChanged: function () {
  306. var _self = this;
  307. _self.getAssetInstance();
  308. },
  309. /**
  310. * 查询盘点单DTO,
  311. * 主要是获取资产盘点中的所属部门集合、使用部门集合、资产类别结合。
  312. * @author yangzhijie 20200806
  313. */
  314. getAssetInventory: function () {
  315. var _self = this;
  316. AssetInventoryResource.getResponseOrganizationsAndOrganizationsAndCategory(
  317. _self.assetInventoryId,
  318. ).then(
  319. baseObjectResponse => {
  320. if(baseObjectResponse.errorCode == 0){
  321. _self.assetInventoryOrganizationIds = baseObjectResponse.data.organizationIds;
  322. _self.assetInventoryResponseOrganizationIds =
  323. baseObjectResponse.data.responseOrganizationIds;
  324. _self.assetInventoryCategoryIds = baseObjectResponse.data.categoryIds;
  325. _self.assetInventoryProjectItemIds = baseObjectResponse.data.projectIds;
  326. _self.assetInventory = baseObjectResponse.data;
  327. _self.$nextTick(function () {
  328. _self.$refs.organization.setSelectedIds(
  329. _self.assetInventoryOrganizationIds,
  330. );
  331. _self.$refs.responseOrganization.setSelectedIds(
  332. _self.assetInventoryResponseOrganizationIds,
  333. );
  334. _self.$refs.assetCategory.setSelectedIds(
  335. _self.assetInventoryCategoryIds,
  336. );
  337. _self.$refs.projectItem.setSelectedIds(
  338. _self.assetInventoryProjectItemIds,
  339. );
  340. });
  341. // 查询资产卡片的数据
  342. _self.getAssetInstance();
  343. }else{
  344. Notify.error('提示', baseObjectResponse.errorMessage, false);
  345. }
  346. },
  347. xmlHttpRequest => {
  348. Common.processException(xmlHttpRequest);
  349. },
  350. );
  351. },
  352. /**
  353. * 根据界面选中的所属部门、使用部门、资产类别、项目查询资产清单
  354. * @author yangzhijie 20200806
  355. */
  356. getAssetInstance: function (isPageChange) {
  357. var _self = this;
  358. if (!isPageChange) {
  359. _self.pagination.current_page = 1;
  360. }
  361. var projectItemIds = _self.$refs.projectItem.getSelectedIds();
  362. var organizationIds = _self.$refs.organization.getSelectedIds();
  363. var responseOrganizationIds =
  364. _self.$refs.responseOrganization.getSelectedIds();
  365. var categoryIds = _self.$refs.assetCategory.getSelectedIds();
  366. _self.clearPageData();
  367. _self.loading=true;
  368. _self.filter.assetDecrease = 0;
  369. // 账套时间
  370. _self.filter.depreciationStartDate2 = `${_self.assetInventory.accountDate} 00:00:00`;
  371. var obj = {
  372. organizationIds: organizationIds,
  373. assetCategoryIds: categoryIds,
  374. responseOrganizationIds: responseOrganizationIds,
  375. projectItemIds: projectItemIds,
  376. filter: _self.filter,
  377. range: {
  378. start:
  379. (_self.pagination.current_page - 1) * _self.pagination.per_page,
  380. length: _self.pagination.per_page,
  381. },
  382. inventoryStatus: 'OVERALL',
  383. };
  384. AssetInstanceResource.getByOrganizationAndCategory(obj).then(
  385. baseObjectResponse => {
  386. _self.loading=false;
  387. if(baseObjectResponse.errorCode != 0) {
  388. Notify.error('提示', baseObjectResponse.errorMessage, false);
  389. return;
  390. }
  391. _self.redrawAssetInstance(baseObjectResponse.data);
  392. },
  393. xmlHttpRequest => {
  394. Common.processException(xmlHttpRequest);
  395. },
  396. );
  397. },
  398. /**
  399. * 生成资产盘点明细
  400. * @author YangZhiJie 20200806
  401. */
  402. generateAssetInventoryLine: function () {
  403. var _self = this;
  404. var organizationIds = _self.$refs.organization.getSelectedIds();
  405. var responseOrganizationIds =
  406. _self.$refs.responseOrganization.getSelectedIds();
  407. var categoryIds = _self.$refs.assetCategory.getSelectedIds();
  408. var projectItemIds = _self.$refs.projectItem.getSelectedIds();
  409. _self.loading=true;
  410. var obj = {
  411. assetInventoryId: _self.assetInventoryId,
  412. organizationIds: organizationIds,
  413. responseOrganizationIds: responseOrganizationIds,
  414. assetCategoryIds: categoryIds,
  415. projectItemIds: projectItemIds,
  416. };
  417. AssetInventoryResource.generateAssetInventoryLineByOrganizationAndCategory(
  418. obj,
  419. ).then(
  420. baseObjectResponse => {
  421. if(baseObjectResponse.errorCode == 0){
  422. Common.showDialog('提示', baseObjectResponse.errorMessage, 'success');
  423. }
  424. _self.loading=false;
  425. },
  426. xmlHttpRequest => {
  427. _self.loading=false;
  428. Common.processException(xmlHttpRequest);
  429. },
  430. );
  431. },
  432. /**
  433. * 重新绘制资产卡片
  434. * @author YangZhiJie 20200806
  435. */
  436. redrawAssetInstance: function (data) {
  437. var _self = this;
  438. console.log(data);
  439. _self.assetInstances = data.dataList;
  440. _self.pagination.total = data.totalSize;
  441. _self.pagination.last_page = Math.ceil(
  442. data.totalSize / data.range.length,
  443. );
  444. _self.totalCount = data.totalSize;
  445. _self.orginalValueTotal = data.totalOrginalValue;
  446. _self.totalAmountOfImpairmentTotal = data.totalAmountOfImpairment;
  447. _self.netSalvageTotal = data.totalNetSalvage;
  448. _self.fixedTableHeader();
  449. },
  450. /**
  451. * 清空分页数据
  452. * @author YangZhiJie 20200806
  453. */
  454. clearPageData: function () {
  455. var data = {
  456. dataList: [],
  457. totalSize: 0,
  458. range: {
  459. start: 0,
  460. length: this.pagination.per_page,
  461. },
  462. totalOrginalValue: 0,
  463. totalAmountOfImpairment: 0,
  464. totalNetSalvage: 0,
  465. };
  466. this.redrawAssetInstance(data);
  467. },
  468. /**
  469. * 清空界面的搜索条件
  470. * @author YangZhiJie 20200806
  471. * @author XiongLiuJie 20211119
  472. */
  473. clearFilter: function () {
  474. this.filter.assetDecrease = 0;
  475. // 账套时间
  476. this.filter.depreciationStartDate2 = `${this.assetInventory.accountDate} 00:00:00`;
  477. this.initTreeData();
  478. this.getAssetInstance();
  479. },
  480. /**
  481. * 初始化数据
  482. * @author LeiGuoXian
  483. * @date 2020-09-15
  484. */
  485. initTreeData: function () {
  486. var _self = this;
  487. _self.$refs.projectItem.initProjectItem1();
  488. _self.$refs.organization.initClientOrganization1();
  489. _self.$refs.responseOrganization.initClientOrganization1();
  490. _self.$refs.assetCategory.initAssetCategory1();
  491. },
  492. /**
  493. * 表格显示行数发生改变
  494. * @author YangZhiJie 20200806
  495. */
  496. pageSizeChanged: function (newPageSize) {
  497. this.pagination.per_page = newPageSize;
  498. this.pagination.current_page = 1;
  499. this.getAssetInstance();
  500. },
  501. /**
  502. * 页数发生变化
  503. * @author YangZhiJie 20200806
  504. */
  505. pageStartChanged: function () {
  506. this.getAssetInstance(true);
  507. },
  508. /**
  509. * 冻结表头
  510. */
  511. fixedTableHeader: function () {
  512. var _self = this;
  513. _self.$nextTick(function () {
  514. $('.fixed-table').tableFixer({
  515. head: true,
  516. });
  517. });
  518. // 给table的外面的div设置固定的高度,如果不设置固定高度,无法固定表格的表头
  519. // let height = $(".flex-content").outerHeight(true) - 20;
  520. // $(".table-fixed-out").css("height", height);
  521. },
  522. /**
  523. * 打开资产卡片的CURD窗口
  524. */
  525. openCurdWindow: function (assetInstance) {
  526. let url = Common.getRedirectUrl(
  527. '#/desktop/window/window-read/view/040701/0/' +
  528. assetInstance.id +
  529. '?currPage=1&currIndex=1&totalCount=1&uuid=' +
  530. Uuid.createUUID(),
  531. );
  532. window.open(url, '资产卡片');
  533. },
  534. },
  535. };
  536. </script>
  537. <style scoped>
  538. .grid-container {
  539. margin-top: 10px;
  540. display: grid;
  541. grid-template-columns: 300px auto;
  542. grid-template-rows: 35px 1fr 40px 40px;
  543. gap: 10px;
  544. justify-items: stretch;
  545. align-items: stretch;
  546. height: calc(100vh - 170px);
  547. overflow: auto;
  548. }
  549. .grid-item-row1-column1 {
  550. grid-row-start: 1;
  551. grid-row-end: 2;
  552. grid-column-start: 1;
  553. grid-column-end: 3;
  554. }
  555. .grid-item-row2-column1 {
  556. grid-row-start: 2;
  557. grid-row-end: 5;
  558. grid-column-start: 1;
  559. grid-column-end: 2;
  560. overflow: auto;
  561. }
  562. .grid-item-row2-column2 {
  563. grid-row-start: 2;
  564. grid-row-end: 3;
  565. grid-column-start: 2;
  566. grid-column-end: 3;
  567. overflow: auto;
  568. }
  569. .grid-item-row3-column2 {
  570. grid-row-start: 3;
  571. grid-row-end: 4;
  572. grid-column-start: 2;
  573. grid-column-end: 3;
  574. }
  575. .grid-item-row4-column2 {
  576. grid-row-start: 4;
  577. grid-row-end: 5;
  578. grid-column-start: 2;
  579. grid-column-end: 3;
  580. }
  581. </style>
  582. <style scoped>
  583. .m-grid-footer {
  584. padding: 10px;
  585. }
  586. .m-panel {
  587. margin-bottom: 0px;
  588. }
  589. .fixed-table {
  590. table-layout: fixed;
  591. width: 800px !important;
  592. min-width: 800px !important;
  593. }
  594. table.fixed-table tr {
  595. height: 40px;
  596. }
  597. table.fixed-table th,
  598. table.fixed-table td {
  599. overflow: hidden;
  600. white-space: nowrap;
  601. text-overflow: ellipsis;
  602. }
  603. </style>