【前端】智能库房综合管理系统前端项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

390 lines
11 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. <template>
  2. <div class="dashboard-container">
  3. <div class="dashboard-editor-container">
  4. <!-- <github-corner class="github-corner" /> -->
  5. <panel-group />
  6. <!-- <el-row style="background:#fff;padding:16px 16px 0;margin-bottom:32px;">
  7. <line-chart :chart-data="lineChartData" />
  8. </el-row> -->
  9. <el-row :gutter="20" style="margin-bottom:20px;height: 152px;">
  10. <el-col :xs="24" :sm="24" :lg="16">
  11. <div class="container-left search-area">
  12. <span class="right-top-line" />
  13. <span class="left-bottom-line" />
  14. <SearchAcrives />
  15. </div>
  16. </el-col>
  17. <el-col :xs="24" :sm="24" :lg="8">
  18. <!-- <div class="chart-wrapper">
  19. <pie-chart />
  20. </div> -->
  21. <div class="container-left" style="height: 100%;margin: 0; position: relative;">
  22. <span class="right-top-line" />
  23. <span class="left-bottom-line" />
  24. <h3 class=" table-title">
  25. <p class="title-arrow">
  26. <svg-icon icon-class="a-3Dkufang" class-name="warehouse-svg" />3D库房
  27. </p>
  28. </h3>
  29. <div class="home-floor-tab">
  30. <p :class="{ 'active-floor': floorIndex == 0 }" @click="changeFloorTab(0)">5楼</p>
  31. <p :class="{ 'active-floor': floorIndex == 1 }" @click="changeFloorTab(1)">7楼</p>
  32. </div>
  33. <el-carousel ref="carouselRef" trigger="click" :interval="4000" indicator-position="none" height="110px" arrow="never" @change="handleChange">
  34. <el-carousel-item>
  35. <div class="warehouse-tab">
  36. <ul class="warehouse-nav">
  37. <li @click="changeActiveTab(1,0)">
  38. <span />
  39. <p>全景图</p>
  40. </li>
  41. <li @click="changeActiveTab(1,1)">
  42. <span />
  43. <p>档案库</p>
  44. </li>
  45. <li @click="changeActiveTab(1,2)">
  46. <span />
  47. <p>整理室</p>
  48. </li>
  49. <li @click="changeActiveTab(1,3)">
  50. <span />
  51. <p>阅览室</p>
  52. </li>
  53. </ul>
  54. </div>
  55. </el-carousel-item>
  56. <el-carousel-item>
  57. <div class="warehouse-tab">
  58. <ul class="warehouse-nav">
  59. <li @click="changeActiveTab(0,4)">
  60. <span />
  61. <p>全景图</p>
  62. </li>
  63. <li @click="changeActiveTab(0,5)">
  64. <span />
  65. <p>现行文件室</p>
  66. </li>
  67. <li @click="changeActiveTab(0,6)">
  68. <span />
  69. <p>待销文件室</p>
  70. </li>
  71. </ul>
  72. </div>
  73. </el-carousel-item>
  74. </el-carousel>
  75. </div>
  76. </el-col>
  77. </el-row>
  78. <el-row :gutter="20" style="margin-bottom:20px;height: calc(50vh - 251px);">
  79. <el-col :xs="24" :sm="24" :lg="8">
  80. <!-- 待办事项 -->
  81. <div class="container-wrap">
  82. <span class="right-top-line" />
  83. <span class="left-bottom-line" />
  84. <h3 class="table-title">
  85. <p class="title-arrow">
  86. <svg-icon icon-class="tongzhigonggao" class-name="warehouse-svg" />待办事项
  87. </p>
  88. </h3>
  89. <div style="height: calc(100% - 40px);overflow-y: auto;overflow-x: hidden;">
  90. <ul v-if="waitBorrowerData.length !== 0" class="todo-list">
  91. <li v-for="(item,index) in waitBorrowerData" :key="index">
  92. <el-tooltip class="item" effect="dark" :content="item.title" :enterable="false" placement="top">
  93. <p>{{ item.title }}</p>
  94. </el-tooltip>
  95. <span>{{ item.update_time | parseTime }}</span>
  96. </li>
  97. </ul>
  98. <div v-else class="empty-main" style="height: 100%;">
  99. <svg-icon icon-class="empty" class-name="empty-img" />
  100. <p>暂无数据</p>
  101. </div>
  102. </div>
  103. </div>
  104. </el-col>
  105. <el-col :xs="24" :sm="24" :lg="8">
  106. <!-- 门禁记录 -->
  107. <security-door :height="'calc(100% - 40px)'" />
  108. </el-col>
  109. <el-col :xs="24" :sm="24" :lg="8">
  110. <!-- 报警记录 -->
  111. <warehouse-warning :height="'calc(100% - 40px)'" />
  112. </el-col>
  113. </el-row>
  114. <el-row :gutter="20" style="height: calc(50vh - 251px);">
  115. <el-col :xs="24" :sm="24" :lg="8">
  116. <!-- 档案借阅 -->
  117. <div class="container-wrap">
  118. <span class="right-top-line" />
  119. <span class="left-bottom-line" />
  120. <h3 class="table-title">
  121. <p class="title-arrow">档案借阅</p>
  122. </h3>
  123. <div class="chart-wrapper">
  124. <lend-across :lend-data="lendData" />
  125. </div>
  126. </div>
  127. </el-col>
  128. <el-col :xs="24" :sm="24" :lg="8">
  129. <!-- 档案类别 -->
  130. <div class="container-wrap">
  131. <span class="right-top-line" />
  132. <span class="left-bottom-line" />
  133. <h3 class="table-title">
  134. <p class="title-arrow">档案类别</p>
  135. </h3>
  136. <div class="chart-wrapper">
  137. <cate-pie :cate-data="cateData" />
  138. </div>
  139. </div>
  140. </el-col>
  141. <el-col :xs="24" :sm="24" :lg="8">
  142. <!-- 档案类型 -->
  143. <div class="container-wrap">
  144. <span class="right-top-line" />
  145. <span class="left-bottom-line" />
  146. <h3 class="table-title">
  147. <p class="title-arrow">档案类型</p>
  148. </h3>
  149. <div v-if="typeData.length !== 0" class="chart-wrapper">
  150. <type-pie :type-data="typeData" />
  151. </div>
  152. <div v-else class="empty-main">
  153. <svg-icon icon-class="empty" class-name="empty-img" />
  154. <p>暂无数据</p>
  155. </div>
  156. </div>
  157. </el-col>
  158. </el-row>
  159. </div>
  160. </div>
  161. </template>
  162. <script>
  163. import PanelGroup from './dashboard/PanelGroup'
  164. import lendAcross from '@/views/components/echarts/lendAcross.vue'
  165. import catePie from '@/views/components/echarts/catePie.vue'
  166. import typePie from '@/views/components/echarts/typePie.vue'
  167. import WarehouseWarning from '@/views/components/WarehouseWarning'
  168. import SecurityDoor from '@/views/components/SecurityDoor'
  169. import SearchAcrives from '@/views/archivesManage/archivesSearch/index'
  170. import { statisticsCrud } from '@/views/system/archiveStatistics/mixins/statistics'
  171. import { FetchWaitBorrower } from '@/api/archivesManage/lendManage'
  172. export default {
  173. name: 'Dashboard',
  174. components: {
  175. WarehouseWarning,
  176. SecurityDoor,
  177. PanelGroup,
  178. lendAcross,
  179. catePie,
  180. typePie,
  181. SearchAcrives
  182. },
  183. mixins: [statisticsCrud],
  184. data() {
  185. return {
  186. waitBorrowerData: [],
  187. floorIndex: 0
  188. }
  189. },
  190. created() {
  191. this.getWaitBorrower()
  192. },
  193. mounted() {
  194. },
  195. methods: {
  196. handleChange(index) {
  197. this.floorIndex = index
  198. },
  199. changeFloorTab(index) {
  200. this.floorIndex = index
  201. const carousel = this.$refs.carouselRef
  202. carousel.setActiveItem(index)
  203. },
  204. // handleSetLineChartData(type) {
  205. // this.lineChartData = lineChartData[type]
  206. // },
  207. getWaitBorrower() {
  208. FetchWaitBorrower().then(data => {
  209. if (data) {
  210. this.waitBorrowerData = data
  211. }
  212. })
  213. },
  214. changeActiveTab(floorId, roomId) {
  215. this.$router.push({
  216. name: 'warehouse3D',
  217. params: {
  218. floorId: floorId,
  219. roomId: roomId
  220. }
  221. })
  222. }
  223. }
  224. }
  225. </script>
  226. <style rel="stylesheet/scss" lang="scss" scoped>
  227. @import "~@/assets/styles/lend-manage.scss";
  228. .dashboard-editor-container {
  229. padding: 20px;
  230. background-color: #031435;
  231. position: relative;
  232. .chart-wrapper {
  233. height: calc(100% - 40px);
  234. }
  235. }
  236. @media (max-width: 1024px) {
  237. .chart-wrapper {
  238. padding: 8px;
  239. }
  240. }
  241. .warehouse-tab {
  242. color: #fff;
  243. .warehouse-nav {
  244. display: flex;
  245. justify-content: space-around;
  246. position: absolute;
  247. bottom: 15px;
  248. z-index: 11;
  249. width: 100%;
  250. padding: 0;
  251. li {
  252. display: flex;
  253. flex-direction: column;
  254. align-items: center;
  255. flex-wrap: nowrap;
  256. align-content: center;
  257. justify-content: center;
  258. height: 90px;
  259. text-align: right;
  260. font-size: 14px;
  261. position: relative;
  262. &:hover {
  263. cursor: pointer;
  264. }
  265. span {
  266. width: 72px;
  267. height: 52px;
  268. margin-bottom: 7px;
  269. }
  270. p {
  271. text-align: left;
  272. }
  273. &:first-child span {
  274. background: url("~@/assets/images/tab_fullview_logo.png") no-repeat;
  275. }
  276. &:nth-child(2) span {
  277. background: url("~@/assets/images/tab_archives_logo.png") no-repeat;
  278. }
  279. &:nth-child(3) span {
  280. background: url("~@/assets/images/tab_collate_logo.png") no-repeat;
  281. }
  282. &:nth-child(4) span {
  283. background: url("~@/assets/images/tab_read_logo.png") no-repeat;
  284. }
  285. }
  286. }
  287. }
  288. .el-col {
  289. height: 100%;
  290. }
  291. .container-left,
  292. .container-right,
  293. .container-wrap,
  294. .el-card,
  295. .header-container-wrap {
  296. min-height: 100%;
  297. }
  298. .warehose-el-table ::v-deep .el-table__header-wrapper {
  299. box-shadow: inset 0px 0px 6px 1px #339cff;
  300. background: none !important;
  301. }
  302. .container-wrap {
  303. min-height: auto;
  304. height: 100%;
  305. // overflow: hidden;
  306. }
  307. .todo-list {
  308. padding: 0 20px;
  309. & li {
  310. height: 42px;
  311. line-height: 42px;
  312. margin-bottom: 10px;
  313. font-size: 13px;
  314. color: #ffffff;
  315. background: #02255f;
  316. box-shadow: inset 0px 0px 6px 1px #339cff;
  317. border-radius: 26px;
  318. opacity: 1;
  319. cursor: pointer;
  320. & p {
  321. display: inline-block;
  322. width: calc(100% - 140px);
  323. padding-left: 10px;
  324. text-overflow: ellipsis;
  325. overflow: hidden;
  326. white-space: nowrap;
  327. word-break: break-all;
  328. }
  329. & span {
  330. float: right;
  331. padding-right: 10px;
  332. }
  333. }
  334. }
  335. ::v-deep
  336. .el-table--striped
  337. .el-table__body
  338. tr.el-table__row--striped
  339. td.el-table__cell {
  340. background: #02255f;
  341. }
  342. .search-area {
  343. width: 100%;
  344. height: 100%;
  345. margin: 0;
  346. display: flex;
  347. align-items: center;
  348. justify-content: center;
  349. }
  350. ::v-deep .search-main{
  351. padding: 0 62px;
  352. .head-container{
  353. padding: 0;
  354. width: 100% !important;
  355. .search-input {
  356. width: 100% !important;
  357. }
  358. .input-with-select{
  359. width: 100% !important;
  360. }
  361. }
  362. }
  363. .home-floor-tab{
  364. position: absolute;
  365. right: 14px;
  366. top: 10px;
  367. color: #fff;
  368. display: flex;
  369. justify-self: flex-start;
  370. p{
  371. font-size: 14px;
  372. padding:2px 6px;
  373. margin-right: 6px;
  374. color: #339cff;
  375. border: 1px solid #339cff;
  376. border-radius: 4px;
  377. cursor: pointer;
  378. &.active-floor,
  379. &:hover{
  380. color: #fff;
  381. background-color: #113d72;
  382. }
  383. }
  384. }
  385. </style>