Index.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712
  1. <template>
  2. <div class="app-container">
  3. <!-- 统计数据区域 -->
  4. <el-row :gutter="20" class="rowCls">
  5. <el-col :xs="12" :sm="8" :lg="5">
  6. <div class="blockDiv blockBg1">
  7. <h1><countTo :duration="3000" :end-val="topTongjiData.shelvesCount" :start-val="0"/><span class="danweiSpan">{{$t("lineSide.common.lit")}}</span></h1>
  8. <p>{{$t("lineSide.common.shelvesCount")}}</p>
  9. </div>
  10. </el-col>
  11. <el-col :xs="12" :sm="8" :lg="5">
  12. <div class="blockDiv blockBg2">
  13. <h1><countTo :duration="3000" :end-val="topTongjiData.storgeCount" :start-val="0"/><span class="danweiSpan">{{$t("lineSide.common.lit")}}</span></h1>
  14. <p>{{$t("lineSide.common.storgeCount")}}</p>
  15. </div>
  16. </el-col>
  17. <el-col :xs="12" :sm="8" :lg="5">
  18. <div class="blockDiv blockBg3">
  19. <h1><countTo :duration="3000" :end-val="topTongjiData.instockCount" :start-val="0"/><span class="danweiSpan">{{$t("lineSide.common.lit")}}</span></h1>
  20. <p>{{$t("lineSide.common.instockCount")}}</p>
  21. </div>
  22. </el-col>
  23. <el-col :xs="12" :sm="8" :lg="5">
  24. <div class="blockDiv blockBg4">
  25. <h1><countTo :duration="3000" :end-val="topTongjiData.freestockCount" :start-val="0"/><span class="danweiSpan">{{$t("lineSide.common.lit")}}</span></h1>
  26. <p>{{$t("lineSide.common.freestockCount")}}</p>
  27. </div>
  28. </el-col>
  29. <el-col :xs="12" :sm="8" :lg="4">
  30. <div class="blockDiv blockBg5">
  31. <h1><countTo :duration="3000" :end-val="topTongjiData.lockstockCount" :start-val="0"/><span class="danweiSpan">{{$t("lineSide.common.lit")}}</span></h1>
  32. <p>{{$t("lineSide.common.lockstockCount")}}</p>
  33. </div>
  34. </el-col>
  35. </el-row>
  36. <!-- 货架区域 -->
  37. <div class="areaDiv">
  38. <!-- 货架(单个) -->
  39. <template v-for="item in shelvesTreeList">
  40. <div class="tableBlock">
  41. <!-- 上部分-是个统计数据 -->
  42. <div class="topDiv">
  43. <span class="topSpan allTongji">
  44. <span>{{$t("lineSide.common.allCount")}}:</span>
  45. <countTo :duration="3000" :end-val="parseInt(item.allCount)" :start-val="0"/>
  46. </span>
  47. <span class="topSpan cunTongji">
  48. <span>{{$t("lineSide.common.stockCount")}}:</span>
  49. <countTo :duration="3000" :end-val="parseInt(item.stockCount)" :start-val="0"/>
  50. </span>
  51. <span class="topSpan lockTongji">
  52. <span>{{$t("lineSide.common.lockCount")}}:</span>
  53. <countTo :duration="3000" :end-val="parseInt(item.lockCount)" :start-val="0"/>
  54. </span>
  55. <span class="topSpan emptyTongji">
  56. <span>{{$t("lineSide.common.freeCount")}}:</span>
  57. <countTo :duration="3000" :end-val="parseInt(item.freeCount)" :start-val="0"/>
  58. </span>
  59. </div>
  60. <!-- 中部-货架小格子 -->
  61. <table class="contentDiv" border="0" cellspacing="0" cellpadding="6">
  62. <tr v-for="objTr in item.layList">
  63. <td v-for="objTd in objTr.stockList" :class="objTd.storgeStockCount>0 ? 'blueBg' : ''" @click="editOne(objTd.id)">
  64. {{objTd.no}}
  65. <el-image v-if="objTd.lockStatus == '0'" class="locked" :src="resolveLogo(lockImg)" fit="contain"></el-image>
  66. </td>
  67. <!--<td class="blueBg" @click="editOne()">5-2</td>
  68. <td class="blueBg" @click="editOne()">5-3</td>
  69. <td class="blueBg" @click="editOne()">5-4</td>
  70. <td class="blueBg" @click="editOne()">5-5</td>-->
  71. </tr>
  72. <!--
  73. <tr>
  74. <td @click="editOne()">
  75. 4-1
  76. <el-image class="locked" :src="resolveLogo(lockImg)" fit="contain"></el-image>
  77. </td>
  78. <td class="blueBg" @click="editOne()">4-2</td>
  79. <td class="blueBg" @click="editOne()">4-3</td>
  80. <td class="blueBg" @click="editOne()">4-4</td>
  81. <td @click="editOne()">4-5</td>
  82. </tr>
  83. <tr>
  84. <td class="blueBg" @click="editOne()">
  85. 3-1
  86. <td class="blueBg" @click="editOne()">
  87. 3-2
  88. </td>
  89. <td @click="editOne()">3-3</td>
  90. <td class="blueBg" @click="editOne()">3-4</td>
  91. <td class="blueBg" @click="editOne()">3-5</td>
  92. </tr>
  93. <tr>
  94. <td @click="editOne()">2-1</td>
  95. <td @click="editOne()">2-2</td>
  96. <td @click="editOne()">
  97. 2-3
  98. <el-image class="locked" :src="resolveLogo(lockImg)" fit="contain"></el-image>
  99. </td>
  100. <td class="blueBg" @click="editOne()">2-4</td>
  101. <td class="blueBg" @click="editOne()">2-5</td>
  102. </tr>
  103. <tr>
  104. <td @click="editOne()">1-1</td>
  105. <td @click="editOne()">
  106. 1-2
  107. <el-image class="locked" :src="resolveLogo(lockImg)" fit="contain"></el-image>
  108. </td>
  109. <td class="blueBg" @click="editOne()">1-3</td>
  110. <td>
  111. 1-4
  112. <el-image class="locked" :src="resolveLogo(lockImg)" fit="contain"></el-image></td>
  113. </td>
  114. <td @click="editOne()">1-5</td>
  115. </tr>
  116. -->
  117. </table>
  118. <!-- 下部-货架名称编号 -->
  119. <div class="footerDiv">{{item.name}}({{item.no}})</div>
  120. </div>
  121. </template>
  122. <!--<div class="tableBlock">
  123. <div class="topDiv">
  124. <span class="topSpan allTongji">
  125. <span>总:</span>
  126. <countTo :duration="3000" :end-val="25" :start-val="0"/>
  127. </span>
  128. <span class="topSpan cunTongji">
  129. <span>存:</span>
  130. <countTo :duration="3000" :end-val="20" :start-val="0"/>
  131. </span>
  132. <span class="topSpan lockTongji">
  133. <span>锁定:</span>
  134. <countTo :duration="3000" :end-val="5" :start-val="0"/>
  135. </span>
  136. <span class="topSpan emptyTongji">
  137. <span>空:</span>
  138. <countTo :duration="3000" :end-val="0" :start-val="0"/>
  139. </span>
  140. </div>
  141. <table class="contentDiv" border="0" cellspacing="0" cellpadding="6">
  142. <tr>
  143. <td class="blueBg" @click="editOne()">5-1</td>
  144. <td class="blueBg" @click="editOne()">5-2</td>
  145. <td class="blueBg" @click="editOne()">5-3</td>
  146. <td class="blueBg" @click="editOne()">5-4</td>
  147. <td class="blueBg" @click="editOne()">5-5</td>
  148. </tr>
  149. <tr>
  150. <td @click="editOne()">
  151. 4-1
  152. <el-image class="locked" :src="resolveLogo(lockImg)" fit="contain"></el-image>
  153. </td>
  154. <td class="blueBg" @click="editOne()">4-2</td>
  155. <td class="blueBg" @click="editOne()">4-3</td>
  156. <td class="blueBg" @click="editOne()">4-4</td>
  157. <td @click="editOne()">4-5</td>
  158. </tr>
  159. <tr>
  160. <td class="blueBg" @click="editOne()">
  161. 3-1
  162. <td class="blueBg" @click="editOne()">
  163. 3-2
  164. </td>
  165. <td @click="editOne()">3-3</td>
  166. <td class="blueBg" @click="editOne()">3-4</td>
  167. <td class="blueBg" @click="editOne()">3-5</td>
  168. </tr>
  169. <tr>
  170. <td @click="editOne()">2-1</td>
  171. <td @click="editOne()">2-2</td>
  172. <td @click="editOne()">
  173. 2-3
  174. <el-image class="locked" :src="resolveLogo(lockImg)" fit="contain"></el-image>
  175. </td>
  176. <td class="blueBg" @click="editOne()">2-4</td>
  177. <td class="blueBg" @click="editOne()">2-5</td>
  178. </tr>
  179. <tr>
  180. <td @click="editOne()">1-1</td>
  181. <td @click="editOne()">
  182. 1-2
  183. <el-image class="locked" :src="resolveLogo(lockImg)" fit="contain"></el-image>
  184. </td>
  185. <td class="blueBg" @click="editOne()">1-3</td>
  186. <td>
  187. 1-4
  188. <el-image class="locked" :src="resolveLogo(lockImg)" fit="contain"></el-image></td>
  189. </td>
  190. <td @click="editOne()">1-5</td>
  191. </tr>
  192. </table>
  193. <div class="footerDiv">货架A(hj34233)</div>
  194. </div>-->
  195. </div>
  196. <tenant-edit
  197. ref="edit"
  198. :dialog-visible="dialog.isVisible"
  199. :title="dialog.title"
  200. @close="editClose"
  201. @success="editSuccess"
  202. />
  203. <tenant-view
  204. ref="view"
  205. :dialog-visible="tenantViewVisible"
  206. @close="viewClose"
  207. />
  208. <el-dialog
  209. v-el-drag-dialog
  210. :close-on-click-modal="false"
  211. :close-on-press-escape="true"
  212. title="预览"
  213. width="80%"
  214. top="50px"
  215. :visible.sync="preview.isVisible"
  216. >
  217. <el-scrollbar>
  218. <div v-html="preview.context" />
  219. </el-scrollbar>
  220. </el-dialog>
  221. </div>
  222. </template>
  223. <script>
  224. import TenantEdit from "./components/Edit"
  225. import TenantView from "./components/View"
  226. // 【区域管理】-API
  227. import areaMgrAPI from "@/api/resourceProductMgr/areaMgr"
  228. // 【边线库管理】-API
  229. import lineSideMgrApi from "@/api/lineSideLibrary/lineSideMgr"
  230. import elDragDialog from '@/directive/el-drag-dialog'
  231. import { downloadFile, initEnums, initDicts, initQueryParams } from '@/utils/commons'
  232. import axios from 'axios'
  233. // 加载动态数字组件
  234. import countTo from 'vue-count-to'
  235. export default {
  236. name: "LineSideEmulate",
  237. directives: { elDragDialog },
  238. components: { TenantEdit, TenantView, countTo },
  239. props: {
  240. },
  241. data () {
  242. return {
  243. url: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
  244. toolsImg: 'tools.png',
  245. programImg: 'program.png',
  246. lockImg: 'locked.png',
  247. srcList: [
  248. 'https://fuss10.elemecdn.com/8/27/f01c15bb73e1ef3793e64e6b7bbccjpeg.jpeg',
  249. 'https://fuss10.elemecdn.com/1/8e/aeffeb4de74e2fde4bd74fc7b4486jpeg.jpeg'
  250. ],
  251. topTongjiData: {"shelvesCount": 0, "storgeCount": 0,"instockCount": 0,"freestockCount": 0,"lockstockCount": 0},
  252. shelvesTreeList: [], // 货架数据
  253. audioStatus: [],
  254. dialog: {
  255. isVisible: false,
  256. title: ""
  257. },
  258. preview: {
  259. isVisible: false,
  260. context: ''
  261. },
  262. tenantViewVisible: false,
  263. tableKey: 0,
  264. queryParams: initQueryParams({}),
  265. selection: [],
  266. loading: false,
  267. tableData: {
  268. total: 0
  269. },
  270. dicts: {
  271. NATION: {}
  272. },
  273. enums: {
  274. TenantTypeEnum: {},
  275. TenantStatusEnum: {}
  276. }
  277. }
  278. },
  279. // 实例已经在内存中创建好,此时data和methods已将ok,如果要操作data中的数据或是调用methods中的方法,最早只能在created中操作
  280. created() {
  281. // 加载列表数据-按区域
  282. this.getTabList()
  283. },
  284. computed: {
  285. currentUser () {
  286. return this.$store.state.account.user
  287. },
  288. nationList() {
  289. return convertEnum(this.dicts.NATION)
  290. }
  291. },
  292. mounted () {
  293. },
  294. methods: {
  295. // 加载背景颜色
  296. setBackground(color){
  297. return "background: "+ color +";"
  298. },
  299. // 加载【本地图片】
  300. resolveLogo(logo) {
  301. return require(`@/assets/icon/${logo}`);
  302. },
  303. viewClose () {
  304. this.tenantViewVisible = false
  305. },
  306. editClose () {
  307. this.dialog.isVisible = false
  308. },
  309. editSuccess () {
  310. this.search()
  311. },
  312. onSelectChange (selection) {
  313. this.selection = selection
  314. },
  315. search () {
  316. this.fetch({
  317. ...this.queryParams
  318. })
  319. },
  320. reset () {
  321. this.queryParams = initQueryParams({})
  322. this.$refs.table.clearSort()
  323. this.$refs.table.clearFilter()
  324. this.search()
  325. },
  326. add () {
  327. this.$refs.edit.type = "add"
  328. this.$refs.edit.setTenant(false, this.dicts)
  329. this.dialog.title = this.$t("common.add")
  330. this.dialog.isVisible = true
  331. },
  332. singleDelete (row) {
  333. this.$refs.table.clearSelection()
  334. this.$refs.table.toggleRowSelection(row, true)
  335. this.batchDelete()
  336. },
  337. batchDelete () {
  338. if (!this.selection.length) {
  339. this.$message({
  340. message: this.$t("tips.noDataSelected"),
  341. type: "warning"
  342. })
  343. return
  344. }
  345. this.$confirm(this.$t("lineSide.tips.wareTips"), this.$t("common.tips"), {
  346. distinguishCancelAndClose: true,
  347. confirmButtonText: this.$t("common.confirm"),
  348. cancelButtonText: this.$t("common.cancel"),
  349. type: "warning"
  350. }).then(() => {
  351. const ids = []
  352. this.selection.forEach(item => {
  353. ids.push(item.id)
  354. })
  355. this.delete(ids)
  356. }).catch(() => {})
  357. },
  358. clearSelections () {
  359. this.$refs.table.clearSelection()
  360. },
  361. delete (ids) {
  362. areaMgrAPI.remove({ ids: ids }).then(response => {
  363. const res = response.data
  364. if (res.isSuccess) {
  365. this.$message({
  366. message: this.$t("tips.deleteSuccess"),
  367. type: "success"
  368. })
  369. this.search()
  370. // 清理已经删除的数据
  371. this.$refs.table.clearSelection()
  372. }
  373. })
  374. },
  375. view (row) {
  376. this.$refs.view.setTenant(row)
  377. this.tenantViewVisible = true
  378. },
  379. // 【修改】表头上Btn-事件
  380. editOne() {
  381. this.edit(this.selection[0]);
  382. },
  383. edit (row) {
  384. this.$refs.edit.setTenant(true, this.dicts)
  385. this.$refs.edit.type = "edit"
  386. this.dialog.title = this.$t("lineSide.common.libProd")
  387. this.dialog.isVisible = true
  388. },
  389. fetch (params = {}) {
  390. this.loading = true
  391. if (this.queryParams.timeRange) {
  392. this.queryParams.map.createTime_st = this.queryParams.timeRange[0]
  393. this.queryParams.map.createTime_ed = this.queryParams.timeRange[1]
  394. }
  395. this.queryParams.current = params.current ? params.current : this.queryParams.current
  396. this.queryParams.size = params.size ? params.size : this.queryParams.size
  397. areaMgrAPI.page(this.queryParams).then(response => {
  398. const res = response.data
  399. if (res.isSuccess) {
  400. this.tableData = res.data
  401. }
  402. // eslint-disable-next-line no-return-assign
  403. }).finally(() => this.loading = false)
  404. },
  405. cellClick (row, column) {
  406. if (column['columnKey'] === "operation") {
  407. return
  408. }
  409. let flag = false
  410. this.selection.forEach((item) => {
  411. if (item.id === row.id) {
  412. flag = true
  413. this.$refs.table.toggleRowSelection(row)
  414. }
  415. })
  416. if (!flag) {
  417. this.$refs.table.toggleRowSelection(row, true)
  418. }
  419. },
  420. // 获取列表数据
  421. getTabList(group){
  422. lineSideMgrApi.iconList({}).then(res => {
  423. res = res.data
  424. console.log("方块列表:", res)
  425. if(res.isSuccess){
  426. // 设备的货架数据
  427. this.shelvesTreeList = res.data.shelvesTreeList
  428. // 统计数据
  429. this.topTongjiData = {
  430. "freestockCount": res.data.freestockCount,
  431. "instockCount": res.data.instockCount,
  432. "lockstockCount": res.data.lockstockCount,
  433. "shelvesCount": res.data.shelvesCount,
  434. "storgeCount": res.data.storgeCount
  435. }
  436. }
  437. })
  438. }
  439. }
  440. }
  441. </script>
  442. <!-- 全局样式-通过定义父DOM的calss,来只影响本组件 -->
  443. <style type="text/css">
  444. .areaDiv .el-progress-bar__innerText{
  445. position: relative;
  446. top: -2px;
  447. }
  448. .areaDiv .el-card__body{
  449. display: flex;
  450. justify-content: center;
  451. align-items: center;
  452. flex-direction: column;
  453. padding: 10px;
  454. min-height: 190px;
  455. }
  456. </style>
  457. <!-- 本组件样式 -->
  458. <style lang="scss" scoped>
  459. .blockDiv{
  460. position: relative;
  461. border: 1px solid #EEEEEE;
  462. padding-left: 15px;
  463. -moz-border-radius: 5px;
  464. -webkit-border-radius: 5px;
  465. border-radius: 5px;
  466. text-align: center;
  467. color: white;
  468. -moz-box-shadow: 1px 5px 5px #c0b7b7;
  469. webkit-box-shadow: 1px 5px 5px #c0b7b7;
  470. box-shadow: 1px 5px 5px #c0b7b7;
  471. h1{
  472. margin: 20px;
  473. font-size: 45px;
  474. }
  475. p{
  476. text-align: left;
  477. color: #FFFFFF;
  478. }
  479. }
  480. .danweiSpan{
  481. display: inline-block;
  482. font-size: 16px;
  483. color: black;
  484. }
  485. .blockBg1{
  486. background: #0F79DC;
  487. border: 1px solid #0F79DC;
  488. }
  489. .blockBg2{
  490. background: #8E66E4;
  491. border: 1px solid #8E66E4;
  492. }
  493. .blockBg3{
  494. background: #3EB64B;
  495. border: 1px solid #3EB64B;
  496. }
  497. .blockBg4{
  498. background: #0BA6D5;
  499. border: 1px solid #0BA6D5;
  500. }
  501. .blockBg5{
  502. background: #E57878;
  503. border: 1px solid #E57878;
  504. }
  505. .blockBg6{
  506. background: #E37B3D;
  507. border: 1px solid #E37B3D;
  508. }
  509. .rowCls{
  510. background: white;
  511. box-sizing: border-box;
  512. border-bottom: 2px dotted #AAAAAA;
  513. margin-bottom: 15px;
  514. }
  515. .rowCls .el-col{
  516. margin-bottom: 20px;
  517. }
  518. .doubleTable{
  519. width: 100%;
  520. }
  521. .doubleTable h1{
  522. margin: 17px 0;
  523. }
  524. .el-card{
  525. display: inline-block;
  526. min-width: 290px;
  527. margin: 0 5px 5px 0;
  528. }
  529. .areaTitle{
  530. margin-bottom: 15px;
  531. }
  532. .areaTitle span{
  533. position: relative;
  534. display: inline-block;
  535. padding-right: 20px;
  536. font-weight: bold;
  537. }
  538. .areaTitle span:before{
  539. position: absolute;
  540. content: '';
  541. background: #42d885;
  542. top: 0px;
  543. right: 0px;
  544. width: 10px;
  545. height: 100%;
  546. }
  547. .contentView{
  548. background: #CCCCCC;
  549. text-align: center;
  550. padding: 3px 5px;
  551. margin-bottom: 5px;
  552. border-bottom: 4px solid red;
  553. }
  554. .hebingDiv{
  555. display: flex;
  556. justify-content: center;
  557. align-items: center;
  558. flex-wrap: wrap;
  559. max-width: 140px;
  560. min-height: 60px;
  561. border-bottom: 8px solid red;
  562. word-break: break-all;
  563. }
  564. .lineBianku{
  565. display: flex;
  566. justify-content: center;
  567. align-items: center;
  568. background: #CCCCCC;
  569. text-align: center;
  570. padding: 3px 5px;
  571. min-height: 60px;
  572. max-width: 190px;
  573. word-break: break-all;
  574. }
  575. .eqTitle{
  576. width: 100%;
  577. max-width: 70px;
  578. overflow: hidden;
  579. text-overflow: ellipsis;
  580. white-space: nowrap;
  581. font-size: 12px;
  582. margin-bottom: 15px;
  583. }
  584. .eqTitle2{
  585. width: 100%;
  586. max-width: 70px;
  587. overflow: hidden;
  588. text-overflow: ellipsis;
  589. white-space: nowrap;
  590. font-size: 12px;
  591. }
  592. .recordSpan{
  593. display: inline-block;
  594. background: #0F79DC;
  595. font-size: 12px;
  596. padding: 2px 10px;
  597. color: white;
  598. -moz-border-radius: 3px;
  599. -webkit-border-radius: 3px;
  600. border-radius: 3px;
  601. }
  602. .jinduTiao{
  603. margin: 5px 0;
  604. }
  605. .statusDiv{
  606. text-align: right;
  607. }
  608. .statusDiv span{
  609. display: inline-block;
  610. font-size: 12px;
  611. padding: 2px 10px;
  612. color: white;
  613. -moz-border-radius: 2px;
  614. -webkit-border-radius: 2px;
  615. border-radius: 2px;
  616. }
  617. .linkLine{
  618. /*background: #13CE66;*/
  619. }
  620. .jianguan{
  621. /*background: #0A76A4;*/
  622. }
  623. .producting{
  624. /*background: #3888FA;*/
  625. }
  626. .footerDiv{
  627. text-align: center;
  628. width: 100%;
  629. padding: 7px 0;
  630. border: 1px solid #AAAAAA;
  631. }
  632. .footerDiv a{
  633. display: inline-block;
  634. background: #0F79DC;
  635. font-size: 12px;
  636. padding: 5px 15px;
  637. color: white;
  638. -moz-border-radius: 3px;
  639. -webkit-border-radius: 3px;
  640. border-radius: 3px;
  641. }
  642. .footerDiv a:hover{
  643. opacity: 0.7;
  644. }
  645. .tableBlock{
  646. margin: 15px 30px 15px 0;
  647. display: inline-block;
  648. }
  649. .topDiv{
  650. text-align: center;
  651. }
  652. .topSpan{
  653. display: inline-block;
  654. padding: 10px;
  655. color: white;
  656. border: 1px solid #FFFFFF;
  657. border-radius: 5px;
  658. margin-right: 5px;
  659. }
  660. .allTongji{
  661. background: #0BA6D5;
  662. border: 1px solid #0BA6D5;
  663. }
  664. .cunTongji{
  665. background: #0F79DC;
  666. border: 1px solid #0F79DC;
  667. }
  668. .lockTongji{
  669. background: #E57878;
  670. border: 1px solid #E57878;
  671. }
  672. .emptyTongji{
  673. border: 1px solid #AAAAAA;
  674. color: #333333;
  675. }
  676. .contentDiv{
  677. margin: 10px 0;
  678. border-left: 1px solid #AAAAAA;
  679. border-top: 1px solid #AAAAAA;
  680. }
  681. .contentDiv tr td{
  682. position: relative;
  683. cursor: pointer;
  684. padding: 10px 25px;
  685. border-right: 1px solid #AAAAAA;
  686. border-bottom: 1px solid #AAAAAA;
  687. }
  688. .blueBg{
  689. background: #548EC5;
  690. color: white;
  691. }
  692. .locked{
  693. position: absolute;
  694. right: 2px;
  695. top: 0;
  696. width: 20px;
  697. height: 25px;
  698. }
  699. </style>