Index.vue 20 KB

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