dct 10 месяцев назад
Родитель
Сommit
1f94d15ad2

+ 3 - 3
src/App.vue

@@ -3,7 +3,7 @@
     <router-view></router-view>
 
     <div class="hide">
-      <webview
+      <!-- <webview
         id="printWebview"
         :src="publicPath"
         nodeintegration
@@ -13,7 +13,7 @@
         id="printSmallTicketWebview"
         :src="publicSmallTicketPath"
         nodeintegration
-      ></webview>
+      ></webview> -->
 
       <!-- 打印模板 -->
       <PrintTemplate :current-ticket="currentTicket"></PrintTemplate>
@@ -391,7 +391,7 @@ text-overflow: ellipsis; white-space: nowrap;
     font-size: 14px; line-height: 20px;
 }
   .el-radio.is-bordered.is-checked {
-    background: #304d79;
+    background: #0075ff;
   }
   .el-radio__input.is-checked + .el-radio__label {
     color: #fff;

Разница между файлами не показана из-за своего большого размера
+ 1 - 1
src/assets/css/index.css


+ 4 - 4
src/assets/scss/variables.scss

@@ -1,8 +1,8 @@
-$blue: #304d79;
+$blue: #0075ff;
 $darkblue: #294468;
-$lightblue: #5f7da3;
-$lighterblue: #6c86ad;
-$activeblue: #516c90;
+$lightblue: #1179f0;
+$lighterblue: #67a7f0;
+$activeblue: #1270db;
 
 $gray: #ebe9e9;
 $darkgray: #c2c2c2;

+ 3 - 3
src/components/GetFace/FaceDetector.vue

@@ -7,7 +7,7 @@
           <el-checkbox
             v-if="!defaultImage"
             v-model="reverse">
-            <span style="color:#304d79">视频翻转</span>
+            <span style="color:#0075ff">视频翻转</span>
           </el-checkbox>
         </div>
         <div class=" con">
@@ -556,11 +556,11 @@ export default {
 .wrap {
   display: flex;  justify-content: space-between; flex: 1;
   h3{
-    color: #304d79; font-size: 16px; text-align: center; font-weight: bold;
+    color: #0075ff; font-size: 16px; text-align: center; font-weight: bold;
   }
 
   .title {
-    height: 40px;  padding: 0 20px; font-size: 18px; line-height: 40px; color: #304d79; text-align: center; background: rgba(48, 77, 121, .1);
+    height: 40px;  padding: 0 20px; font-size: 18px; line-height: 40px; color: #0075ff; text-align: center; background: rgba(48, 77, 121, .1);
   }
   .box {
     display: flex;  width: 49%; flex-direction: column; background: #fff; border: 1px solid #ddd;

+ 3 - 3
src/components/GetFace/PictureDetector.vue

@@ -7,7 +7,7 @@
           <el-checkbox
             v-if="!defaultImage"
             v-model="reverse">
-            <span style="color:#304d79">视频翻转</span>
+            <span style="color:#0075ff">视频翻转</span>
           </el-checkbox>
         </div>
         <div class=" con">
@@ -354,11 +354,11 @@ export default {
 .wrap {
   display: flex;  justify-content: space-between; flex: 1;
   h3{
-    color: #304d79; font-size: 16px; text-align: center; font-weight: bold;
+    color: #0075ff; font-size: 16px; text-align: center; font-weight: bold;
   }
 
   .title {
-    height: 40px;  padding: 0 20px; font-size: 18px; line-height: 40px; color: #304d79; text-align: center; background: rgba(48, 77, 121, .1);
+    height: 40px;  padding: 0 20px; font-size: 18px; line-height: 40px; color: #0075ff; text-align: center; background: rgba(48, 77, 121, .1);
   }
   .box {
     display: flex;  width: 49%; flex-direction: column; background: #fff; border: 1px solid #ddd;

+ 1 - 1
src/components/Layout/components/Sidebar/index.vue

@@ -7,7 +7,7 @@
         :show-timeout="200"
         :default-active="$route.path"
         :collapse="isCollapse"
-        background-color="#304d79"
+        background-color="#0075ff"
         text-color="#fff"
         active-text-color="#fff"
       >

+ 1 - 1
src/pages/config/index.vue

@@ -673,7 +673,7 @@ export default {
 
 <style lang="scss" scoped>
 .configPage {
-  position: absolute; top: 0; left: 0;width: 100%;height: 100%; overflow: hidden;background: #304d79;
+  position: absolute; top: 0; left: 0;width: 100%;height: 100%; overflow: hidden;background: #0075ff;
   h1 {
     font-size: 24px; font-weight: normal; line-height: 100px; color: #fff; text-align: center;
   }

+ 2 - 2
src/pages/dashboard/index.vue

@@ -318,7 +318,7 @@ export default {
 }
 .table_title{
   background: #f4f4f4;
-  color: #304d79;
+  color: #0075ff;
   font-size: 14px;
   padding: 10px;
   font-weight: normal;
@@ -329,7 +329,7 @@ export default {
       font-size: 14px;
     }
     a {
-      color: #304d79;
+      color: #0075ff;
     }
   }
   .dashboard-head {

+ 8 - 84
src/pages/login/index.vue

@@ -120,37 +120,6 @@
         </span>
       </div>
     </div>
-
-    <!-- <div class="related-blocks">
-      <h3><span>相关平台登录</span></h3>
-      <ul class="block-list">
-        <li
-          class="block-item"
-          v-for="(item,index) in blocks"
-          :key="index"
-          :style="{backgroundImage:`url(${item.cover})`}"
-        >
-          <a
-            class="text"
-            @click="openLink(item.url)"
-          >
-            {{ item.name }}
-            <div class="des">
-              {{ item.des }}
-            </div>
-          </a>
-          <span
-            class="tag"
-            v-show="item.tag">
-            {{ item.tag }}
-          </span>
-        </li>
-        <li
-          v-for="i in 3"
-          :key="'a'+i"
-        ></li>
-      </ul>
-    </div> -->
   </div>
 </template>
 
@@ -164,18 +133,6 @@ import { encrypt } from '@/utils'
 // const localStore = new Store()
 
 const { app } = require('electron').remote
-const blocks = [
-  {
-    name: '票务自营渠道销售系统',
-    url: 'https://pqncdn.cleartv.cn/mgt/',
-    cover: require('imgs/bg.jpg')
-  },
-  {
-    name: '票务OTA分销系统',
-    url: 'https://pqncdn.cleartv.cn/ota/',
-    cover: require('imgs/bg1.jpg')
-  }
-]
 
 export default {
   name: 'Login',
@@ -189,7 +146,6 @@ export default {
   },
   data () {
     return {
-      blocks,
       projectName: process.env.VUE_APP_PROJECT,
       version: app.getVersion(),
       appName: this.$localStore.get('appName') || process.env.VUE_APP_PROJECT_NAME,
@@ -354,11 +310,12 @@ $light_gray: #eee;
 
 <style lang="scss" scoped>
 $mainColor: $blue;
-$bg: rgb(0,145,229);
+$bg: rgb(0, 117, 255);
 $dark_gray: #889aa4;
 $light_gray: #eee;
 
 .login-container {
+  background-color: $bg;
   .header {
     position: relative;min-width: 1280px;height: 600px; overflow: hidden;
     h1,h2 {
@@ -373,9 +330,9 @@ $light_gray: #eee;
         height: 70px;
       }
     }
-    &:before {
-      position: absolute; top: 0;left: 0;width: 100%;height: 100%;content: ''; background: url('~imgs/bg1.jpg') no-repeat center center/cover; filter: blur(3px); transform: scale(1.1); transition:all 10s;
-    }
+    // &:before {
+    //   position: absolute; top: 0;left: 0;width: 100%;height: 100%;content: ''; background: url('~imgs/bg1.jpg') no-repeat center center/cover; filter: blur(3px); transform: scale(1.1); transition:all 10s;
+    // }
     // &:after {
     //   position: absolute; top: 0;left: 0;width: 100%;height: 100%;content: ''; background: rgba(0,0,0,.4);
     // }
@@ -400,9 +357,9 @@ $light_gray: #eee;
     }
   }
 
-  &:before {
-    position: absolute;top: 50%; right: 10%;  width: 790px; height: 412px;margin-top: -200px;content: ''; background: inherit;filter: blur(10px);
-  }
+  // &:before {
+  //   position: absolute;top: 50%; right: 10%;  width: 790px; height: 412px;margin-top: -200px;content: ''; background: inherit;filter: blur(10px);
+  // }
 
   .login-box {
     position: absolute; top: 50%; right: 280px; z-index: 20; width: 320px; height: 360px; margin-top: -200px;
@@ -558,39 +515,6 @@ $light_gray: #eee;
     position: absolute;right: 20px; bottom: 20px; color: #fff; font-size: 12px;
   }
 }
-
-.related-blocks {
-  padding: 20px 0;  margin: 0 10%; color: #4a4a4a;
-  h3 {
-    font-size: 18px; font-weight: normal; line-height: 1.5; padding: 0;margin: 0 0 20px;
-    span {
-      display: inline-block;  border-bottom: 2px solid #4a4a4a;
-    }
-  }
-
-  .block-list {
-    display: flex; justify-content: space-between; flex-wrap: wrap;
-    li {
-      width: 30%;
-    }
-    .block-item {
-      position: relative;  padding-bottom: 15%; cursor: pointer; background: center center no-repeat/100% 100%; transition: all 2s; overflow: hidden;
-      // &:hover {
-      //   background-size: 120% 120%;
-      // }
-      .tag{
-        position: absolute; background: #f00; color: #fff; text-align: center; padding: 10px 20px 2px; transform:rotate(45deg); right: -18px; top: 0px; font-size: 12px;
-      }
-    }
-    .text {
-      position: absolute;top: 0; left: 0; display: flex; width: 100%; height: 100%;font-size: 18px; color: #fff;flex-direction: column; justify-content: center; align-items: center; text-shadow: 0 0 10px #000; line-height: 1.5;
-    }
-    .des {
-      font-size: 14px ;
-    }
-  }
-}
-
 </style>
 
 <style lang="scss">

+ 0 - 36
src/pages/queryReport/OrderScenicSaleStatistics.vue

@@ -371,9 +371,7 @@
 <script>
 import { getScenic, getTicketTypeList } from '@/api/ticketType'
 import { getOrderScenicSaleStatistics, exportOrderScenicSaleStatistics } from '@/api/order.js'
-import { getTicketTypeTagList } from '@/api/ticketTypeTag'
 import { ticketStatusDic } from '@/assets/staticData'
-import { getTicketSpotList } from '@/api/ticketSpot'
 import draggable from 'vuedraggable'
 import moment from 'moment'
 
@@ -418,24 +416,6 @@ export default {
       form: {
         startDate: new Date(moment().startOf('day').format('YYYY-MM-DD HH:mm:ss')),
         endDate: new Date(moment().endOf('day').format('YYYY-MM-DD HH:mm:ss')),
-        keyWords2: '', // 票种id
-        keyWords4: '', // 景点
-        keyWords5: '',
-        keyWords6: '',
-        keyWords7: '',
-        keyWords8: '',
-        keyWords9: '',
-        keyWords11: '',
-        keyWords13: 0,
-        keyList1: [],
-        keyList2: [],
-        keyList3: [],
-        keyList4: [],
-        keyList5: [], // 渠道id
-        keyList6: [],
-        keyList7: [], // 售票员id
-        keyList8: [],
-        keyList12: [], // 景点
         keyGroupBy: ['ticketTypeName']
       },
       tableData: [],
@@ -450,8 +430,6 @@ export default {
     this.getTicketTypeList()
     this.getScenicList()
     this.getSaleStatistic()
-    this.getTicketTagList()
-    this.getTicketSpotList()
     this.form.keyList12 = this.userScenic.map(v => v.id)
   },
   mounted () { // 解决刷新不能赋值的情况
@@ -480,20 +458,6 @@ export default {
         return 'boldBorder'
       }
     },
-    getTicketTagList () {
-      getTicketTypeTagList({}).then(res => {
-        this.ticketTagList = res.children
-      })
-    },
-    getTicketSpotList () {
-      return getTicketSpotList({
-        pageNum: 1,
-        pageSize: 10000
-      }).then(res => {
-        let list = res.list
-        this.ticketSpotList = list
-      })
-    },
     selectAll (val) {
       let allValues = this.ticketTypeList.map(i => i.id)
 

+ 1 - 37
src/pages/queryReport/salesStatistic/OrderStatistics.vue

@@ -448,11 +448,9 @@
 <script>
 import { getScenic, getTicketTypeList } from '@/api/ticketType'
 import { apiOrder, getOrderStatisticsBySaleChannel, getOrderStatisticsByManager } from '@/api/order.js'
-import { getTicketTypeTagList } from '@/api/ticketTypeTag'
 import { exportOrderStatistics } from '@/api/queryReport'
 import { ticketStatusDic } from '@/assets/staticData'
 import { totalRowClassName, getLabelName } from '@/utils'
-import { getTicketSpotList } from '@/api/ticketSpot'
 
 import Tip from '@/components/Tip'
 import moment from 'moment'
@@ -488,25 +486,7 @@ export default {
       ticketSpotList: [],
       form: {
         startDate: new Date(moment().startOf('day').format('YYYY-MM-DD HH:mm:ss')),
-        endDate: new Date(moment().endOf('day').format('YYYY-MM-DD HH:mm:ss')),
-        keyList5: [], // 渠道id
-        keyWords2: '', // 票种id
-        keyList7: [], // 售票员id
-        keyWords4: '', // 景点
-        keywords5: '',
-        keywords6: '',
-        keywords7: '',
-        keywords8: '',
-        keywords9: '',
-        keyWords11: '',
-        keyWords14: '',
-        keyList6: [],
-        keyList1: [],
-        keyList2: [],
-        keyList3: [],
-        keyList4: [],
-        keyList8: []
-
+        endDate: new Date(moment().endOf('day').format('YYYY-MM-DD HH:mm:ss'))
       },
       tableData1: [],
       tableData2: [],
@@ -519,26 +499,10 @@ export default {
     this.getTicketTypeList()
     this.getScenicList()
     this.getSaleStatistic()
-    this.getTicketTagList()
-    this.getTicketSpotList()
   },
   methods: {
     totalRowClassName,
     getLabelName,
-    getTicketTagList () {
-      getTicketTypeTagList({}).then(res => {
-        this.ticketTagList = res.children
-      })
-    },
-    getTicketSpotList () {
-      return getTicketSpotList({
-        pageNum: 1,
-        pageSize: 10000
-      }).then(res => {
-        let list = res.list
-        this.ticketSpotList = list
-      })
-    },
     selectAll (val) {
       let allValues = this.ticketTypeList.map(i => i.id)
 

+ 1 - 1
src/pages/sellManage/common/TagSelector.vue

@@ -96,7 +96,7 @@ export default {
     margin-left: 0;
   }
   ::v-deep .el-radio.is-bordered.is-checked {
-    background: #304d79;
+    background: #0075ff;
   }
   ::v-deep .el-radio__input.is-checked + .el-radio__label {
     color: #fff;

+ 20 - 41
src/pages/sellManage/common/TicketList.vue

@@ -37,12 +37,6 @@
       </el-input>
 
       <!-- <TagSelector v-model="selectedTag"></TagSelector> -->
-
-      <ScenicCheckTag
-        v-if="showScenicTag"
-        style="margin:10px 0"
-        v-model="selectedScenic"
-        :list="scenicList"></ScenicCheckTag>
     </div>
     <div
       :class="['list-wrap custom-scroll', category === 'batch' && 'list-wrap-batch']"
@@ -55,20 +49,18 @@
       <ul class="list-content">
         <li
           class="list-item"
-          :style="showScenicTag?{padding:'25px 10px 8px 5px'}:{padding:'15px 10px 15px 5px'}"
+          :style="{padding:'15px 10px 15px 5px'}"
           :class="{
             active:currentTicket&&currentTicket.id===item.id,
-            active2:item.isTop && currentTicket &&currentTicket.id!==item.id
+            active2:item.isTop && currentTicket &&currentTicket.id!==item.id,
+            disabled: item && item.isSale === 0
           }"
-          v-for="(item,index) in filterTableData"
+          v-for="(item, index) in filterTableData"
           :key="index"
           @click="changeTicket(item)"
           @contextmenu.prevent="showTopBtn(item)">
-          <div class="scenicTag">
-            <ColorTag
-              :value="getScenicTag(item)"
-              v-if="showScenicTag">
-            </ColorTag>
+          <div class="badge" v-if="item && item.isSale === 0">
+            停售
           </div>
           <h5 class="title">
             <el-tooltip
@@ -91,9 +83,6 @@
           <i
             class="top-sign"
             v-if="item.isTop"></i>
-          <!-- <span
-            class="mutipleTag"
-            v-if="item.ticketTypeScenic.length>1 && showScenicTag"><i>多</i></span> -->
           <span
             class="price"
             v-if="item.price">
@@ -163,7 +152,6 @@ import moment from 'moment'
 import ElDialog from '@/components/Dialog'
 import TicketInfo from './TicketInfo'
 // import TagSelector from './TagSelector.vue'
-import { getTicketTypeTagList } from '@/api/ticketTypeTag'
 
 export default {
   props: {
@@ -214,9 +202,6 @@ export default {
     userScenic () {
       return this.$store.state.app.account.manager_scenic_matrix ? this.$store.state.app.account.manager_scenic_matrix.map(i => i.id) : []
     },
-    showScenicTag () {
-      return this.$localStore.get('showScenicTag') && this.$store.state.app.scenicList.length > 1
-    },
     scenicList () {
       return this.$store.state.app.scenicList
     },
@@ -308,23 +293,6 @@ export default {
     //   keyBind.currentIndex++
     //   keyBind.setFocus()
     // },
-    getTicketTagList () {
-      getTicketTypeTagList({}).then(res => {
-        res.children.forEach(item => {
-          this.ticketTagList = this.ticketTagList.concat(item.children)
-        })
-      })
-    },
-    getScenicTag (item) {
-      let tags = item.ticketTypeScenic.map(i => {
-        return i.scenic
-      })
-
-      // if (item.ticketTypeScenic.length === this.scenicList.length) {
-      //   return ['全景点']
-      // }
-      return tags
-    },
     getTicketTypeList () {
       this.loading = true
       getTicketTypeList({
@@ -361,6 +329,13 @@ export default {
         this.currentTicket.playDate = playDate
         this.$emit('update', this.currentTicket)
         this.$emit('input', this.currentTicket)
+
+        this.tableData.forEach(item => {
+          if (item.id === this.currentTicket.id) {
+            item.price = this.currentTicket.price
+            item.isSale = this.currentTicket.isSale
+          }
+        })
       }
     },
     async changeTicket (ticket) {
@@ -393,6 +368,13 @@ export default {
 
       this.$emit('update', this.currentTicket)
       this.$emit('input', this.currentTicket)
+
+      this.tableData.forEach(item => {
+        if (item.id === this.currentTicket.id) {
+          item.price = this.currentTicket.price
+          item.isSale = this.currentTicket.isSale
+        }
+      })
     },
     handleBatchChange (row) {
       if (!row) {
@@ -494,9 +476,6 @@ border: 14px solid rgb(255, 94, 0); border-right-color: transparent; border-bott
     position: absolute;  font-size: 12px; transform: translate(-12px,-12px);
   }
 }
-.scenicTag {
-  position: absolute; top: 0;left: 0;
-}
 
 .list-wrap-batch {
   max-height: calc(100vh - 400px);

+ 5 - 1
src/pages/sellManage/retail/FormInfo.vue

@@ -8,6 +8,7 @@
           v-if="currentTicket">
           <div style="display:flex;">
             <div>当前票种:<b>{{ currentTicket.name || '无' }}</b></div>
+            <span v-if="currentTicket.isSale === 0" style="color: red">(停售)</span>
             <div v-if="category === 'batch'" style="margin-left: 20px;">当前场次:<b>{{ currentBatchName || '无' }}</b></div>
           </div>
           <div>{{ form.playDateBegin | formatDate }} 票价:<span class="price"><b>{{ currentPrice }}</b> 元</span></div>
@@ -374,8 +375,11 @@ export default {
       return !(isBefore || isAfter)
     },
     addToOrder (callback) {
+      if (this.currentTicket && this.currentTicket.isSale === 0) {
+        return this.$message.error('当前票种已停售')
+      }
       if (!this.isPlayToday()) {
-      // 客户端下单的时候游玩日期不是当天,提示一下
+        // 客户端下单的时候游玩日期不是当天,提示一下
         this.$message.warning('友情提示:您下单的游玩日期不是今天!')
       }
 

+ 1 - 1
src/pages/systemSetting/commonSetting.vue

@@ -177,7 +177,7 @@ export default {
 
   .el-tag.ghost {
     color: #fff;
-    background: #304D79;
+    background: #0075ff;
   }
 
   .el-tag+.el-tag {

+ 1 - 1
src/pages/ticketSetting/ticket/Dialog.vue

@@ -254,7 +254,7 @@
             <el-input v-model="form.buyProtocol"></el-input>
             <el-checkbox
               v-model="form.isAgreeProtocol">
-              <span style="color:#304d79">是否必须同意预定协议才可以购买</span>
+              <span style="color:#0075ff">是否必须同意预定协议才可以购买</span>
             </el-checkbox>
           </el-form-item> -->
 

+ 1 - 1
src/pages/ticketSetting/ticket/PriceCalendar.vue

@@ -240,7 +240,7 @@ export default {
       const planList = []
       const weekPriceList = []
       let priority = 0
-      const wpList = this.weekDayPriceList.filter(wp => wp.value !== null || wp.value !== undefined)
+      const wpList = this.weekDayPriceList.filter(wp => wp.value !== null && wp.value !== undefined)
       wpList.forEach(wp => {
         const hasPrice = weekPriceList.find(item => wp.value === item.price && wp.isSale === item.isSale)
 

+ 1 - 1
src/router/index.js

@@ -674,7 +674,7 @@ let routerMap = [
         path: 'orderStatistic',
         name: 'orderStatistic',
         component: require('@/pages/queryReport/OrderStatistics').default,
-        meta: { title: '自定义售票统计', permissionName: 'querystats:sale_stats' }
+        meta: { title: '售票统计', permissionName: 'querystats:sale_stats' }
       },
       // {
       //   path: 'batchorderStatistic',

+ 40 - 11
src/styles/index.scss

@@ -246,7 +246,7 @@ h1,h2,h3,h4,h5,h6 {
 }
 
 .block-title {box-sizing: border-box;
-  padding: 0 24px;  overflow: hidden;  clear: both;  font-size: 16px; font-weight: bold; line-height: 2;  color: $lightblue;  border-bottom: 1px solid lighten($lightblue,30%); 
+  padding: 0 24px;  overflow: hidden;  clear: both;  font-size: 16px; font-weight: bold; line-height: 2;  color: $lightblue;  border-bottom: 1px solid lighten($lightblue,30%);
   .el-button,.el-tag {
     float: right;  margin-bottom: 5px;
   }
@@ -270,13 +270,13 @@ h1,h2,h3,h4,h5,h6 {
     position: absolute; top: 10px;right: 10px;bottom: 10px; left: 10px; display: flex; flex-direction: column;justify-content: space-between;
   }
   .top-block {
-    display: flex; overflow: hidden; flex: 1; 
+    display: flex; overflow: hidden; flex: 1;
   }
   .main-content {
-    display: flex; overflow: hidden; flex-direction: column;  flex: 1; 
+    display: flex; overflow: hidden; flex-direction: column;  flex: 1;
 
     .block-title {padding: 0 10px;
-      margin-bottom: 20px; 
+      margin-bottom: 20px;
     }
     .content-inner {
       overflow: auto;  flex: 1;
@@ -324,7 +324,7 @@ h1,h2,h3,h4,h5,h6 {
 .search-list-wrap {
   display: flex; height: 100%; box-sizing: border-box;flex-direction: column;background: #fff; border: 1px solid #ddd;
   .search-wrap {
-    width: 340px; box-sizing: border-box; padding: 20px 10px 0; 
+    width: 340px; box-sizing: border-box; padding: 20px 10px 0;
     .search-input {
       width: 320px;
     }
@@ -338,8 +338,8 @@ h1,h2,h3,h4,h5,h6 {
     padding: 0 10px 20px; margin-top: 10px;
     .list-item {
       position: relative;      position: relative; z-index: 0; display: flex;  padding: 25px 10px 8px 5px; margin-top: -2px;  color: $lightblue; cursor: pointer;background: #fff;border: 2px solid #f0f0f0; transition: all .3s; justify-content: space-between; align-items: center;
-      .goTop {display: inline-block; 
-        width: 14px; height: 14px; margin-right: 3px; overflow: hidden; 
+      .goTop {display: inline-block;
+        width: 14px; height: 14px; margin-right: 3px; overflow: hidden;
         i {
           display: none;
         }
@@ -355,17 +355,46 @@ h1,h2,h3,h4,h5,h6 {
       &.active {
         z-index: 2;  background: $yellow; border: 2px solid darken($darkYellow,8%);
       }
+
+      &.disabled {
+        cursor: not-allowed;
+        // background: $darkgray !important;
+        border: 2px solid darken($darkgray, 8%);
+        overflow: hidden;
+        .badge {
+          position: absolute;
+          background: $darkgray;
+          z-index: 1;
+          width: 55px;
+          text-align: center;
+          height: 40px;
+          line-height: 50px;
+          border-radius: 3px;
+          color: #fff;
+          font-size: 12px !important;
+          padding: 2px 4px 0;
+          top: -14px;
+          right: -23px;
+          -ms-transform: rotate(45deg);
+          -webkit-transform: rotate(45deg);
+          transform: rotate(45deg);
+          -webkit-transition: 0 0.1s ease-in;
+          -moz-transition: 0 0.1s ease-in;
+          -o-transition: 0 0.1s ease-in;
+          transition: transform 0.1s ease-in;
+        }
+      }
       // &.active2 {
       //   border-color: rgb(67, 125, 233);
       // }
       .top-sign {
         position: absolute; top: 0; right: 0;width: 0; height: 0; border: 5px solid red; border-bottom-color: transparent;
-border-left-color: transparent; 
+border-left-color: transparent;
       }
     }
     h5 {
       max-width: 220px ;overflow: hidden; font-size: 16px; font-weight: bold;
-text-overflow: ellipsis; white-space: nowrap; 
+text-overflow: ellipsis; white-space: nowrap;
       span {
         display: inline-block;
         max-width:200px;overflow: hidden; white-space: nowrap; text-overflow: ellipsis;
@@ -394,7 +423,7 @@ text-overflow: ellipsis; white-space: nowrap;
   display: flex;  flex-wrap: wrap;
   label {font-weight: bold;
     // color: $lightblue;
-    color: #4d4d4d; 
+    color: #4d4d4d;
   }
   .el-form-item {
     width: 50%; margin-right: 0;
@@ -403,7 +432,7 @@ text-overflow: ellipsis; white-space: nowrap;
     width: 200px;
   }
   .block-wrap {margin: 20px 0;
-    border-style: dashed; 
+    border-style: dashed;
     .block-title {
       margin-bottom: 20px;
     }