| @@ -11,6 +11,20 @@ const router = new VueRouter({ | ||
| 11 | 11 | routes | 
| 12 | 12 | }) | 
| 13 | 13 |  | 
| 14 | +router.beforeEach((to, from, next) => { | |
| 15 | + // 导航钩子,全局钩子 | |
| 16 | + var isLogin = sessionStorage.isLogin | |
| 17 | +      if(!isLogin){ | |
| 18 | +              if(to.name != 'Login'){ | |
| 19 | +                    isLogin ? next() : next('/login'); | |
| 20 | +              }else{ | |
| 21 | + next(); | |
| 22 | + } | |
| 23 | +      }else{ | |
| 24 | + next(); | |
| 25 | + } | |
| 26 | +}) | |
| 27 | + | |
| 14 | 28 |  new Vue({ | 
| 15 | 29 | router | 
| 16 | 30 |  }).$mount('#app') | 
| @@ -29,6 +29,7 @@ export default [{ | ||
| 29 | 29 | children: [ | 
| 30 | 30 |      { | 
| 31 | 31 | path: 'login', | 
| 32 | + name: 'Login', | |
| 32 | 33 | component: Login | 
| 33 | 34 | }, | 
| 34 | 35 |      { | 
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | <template> | 
| 2 | 2 | <div id="login"> | 
| 3 | 3 | <div class="body"> | 
| 4 | - <p>腾龙后台管理系统</p> | |
| 4 | + <p>腾龙维修服务系统</p> | |
| 5 | 5 | <el-form ref="form" :model="form" :rules="rules"> | 
| 6 | 6 | <el-form-item label="" prop="account"> | 
| 7 | 7 | <el-input placeholder="账户名" v-model="form.account"></el-input> | 
| @@ -42,6 +42,7 @@ export default { | ||
| 42 | 42 |              if (response.data.status == 200) { | 
| 43 | 43 | sessionStorage.isLogin = true | 
| 44 | 44 | sessionStorage.admin_type = response.data.data.admin_type | 
| 45 | + sessionStorage.admin_id = response.data.data.admin_id | |
| 45 | 46 |                if (response.data.data.admin_type == 1) { | 
| 46 | 47 | sessionStorage.qrurl = response.data.data.qrurl | 
| 47 | 48 |                  self.$router.replace({path: "/"}) | 
| @@ -1,5 +1,6 @@ | ||
| 1 | 1 | <template lang="html"> | 
| 2 | 2 | <div id="maintain"> | 
| 3 | + <div class="maintain-content"> | |
| 3 | 4 | <div class="filter"> | 
| 4 | 5 | <el-autocomplete | 
| 5 | 6 | popper-class="my-autocomplete" | 
| @@ -19,41 +20,72 @@ | ||
| 19 | 20 | <el-button slot="append" icon="el-icon-search" @click="submit"></el-button> | 
| 20 | 21 | </el-input> | 
| 21 | 22 | </div> | 
| 22 | - <div class="table"> | |
| 23 | + <div class="table"> | |
| 24 | + <el-table | |
| 25 | + v-loading="loading" | |
| 26 | + :data="queryRes" | |
| 27 | + stripe | |
| 28 | + align="center" | |
| 29 | + header-align="center" | |
| 30 | + :empty-text="tableEmptyText"> | |
| 31 | + <el-table-column | |
| 32 | + prop="model_name" | |
| 33 | + label="型号" | |
| 34 | + width="80"> | |
| 35 | + </el-table-column> | |
| 36 | + <el-table-column | |
| 37 | + prop="serialNo" | |
| 38 | + label="序列号" | |
| 39 | + width="80"> | |
| 40 | + </el-table-column> | |
| 41 | + <el-table-column | |
| 42 | + prop="coupon_info[0].coupon_value" | |
| 43 | + label="维修券金额" | |
| 44 | + width="100"> | |
| 45 | + </el-table-column> | |
| 46 | + <el-table-column | |
| 47 | + prop="coupon_info[0].coupon_expire_at" | |
| 48 | + label="维修券到期日期" | |
| 49 | + width="200"> | |
| 50 | + </el-table-column> | |
| 51 | + <el-table-column | |
| 52 | + label="状态" | |
| 53 | + width="80"> | |
| 54 | + <template slot-scope="scope"> | |
| 55 | + <p v-if="!scope.row.submit_during_activity">无优惠券</p> | |
| 56 | + <p v-else-if="scope.row.has_used">已核销</p> | |
| 57 | + <p v-else-if="scope.row.coupon_info[0].coupon_has_expired">已过期</p> | |
| 58 | + <el-button | |
| 59 | + size="mini" | |
| 60 | + @click="handleClick(scope.$index, scope.row)" v-else>核销</el-button> | |
| 61 | + </template> | |
| 62 | + </el-table-column> | |
| 63 | + </el-table> | |
| 64 | + </div> | |
| 65 | + </div> | |
| 66 | + <div class="maintain-record"> | |
| 67 | + <h3>核销记录</h3> | |
| 68 | + <div class="line"></div> | |
| 23 | 69 | <el-table | 
| 24 | - v-loading="loading" | |
| 25 | - :data="queryRes" | |
| 26 | - stripe | |
| 27 | - style="width: 100%" | |
| 70 | + :data="maintainRecord" | |
| 71 | + :cell-style="maintainRecordCellStyle" | |
| 72 | + :header-cell-style="maintainRecordHeaderCellStyle" | |
| 73 | + header-align="center" | |
| 28 | 74 | :empty-text="tableEmptyText"> | 
| 29 | 75 | <el-table-column | 
| 30 | 76 | prop="model_name" | 
| 31 | 77 | label="型号" | 
| 32 | - width="200"> | |
| 78 | + width="80"> | |
| 33 | 79 | </el-table-column> | 
| 34 | 80 | <el-table-column | 
| 35 | 81 | prop="serialNo" | 
| 36 | 82 | label="序列号" | 
| 37 | - width="200"> | |
| 83 | + width="80"> | |
| 38 | 84 | </el-table-column> | 
| 39 | 85 | <el-table-column | 
| 40 | - prop="coupon_info[0].coupon_value" | |
| 41 | - label="优惠券金额" | |
| 42 | - width="200"> | |
| 43 | - </el-table-column> | |
| 44 | - <el-table-column | |
| 45 | - prop="coupon_info[0].coupon_expire_at" | |
| 46 | - label="优惠券到期日期" | |
| 47 | - width="200"> | |
| 48 | - </el-table-column> | |
| 49 | - <el-table-column | |
| 50 | - label="状态"> | |
| 51 | - <template slot-scope="scope"> | |
| 52 | - <p v-if="scope.row.has_used">已核销</p> | |
| 53 | - <el-button | |
| 54 | - size="mini" | |
| 55 | - @click="handleClick(scope.$index, scope.row)" v-else>核销</el-button> | |
| 56 | - </template> | |
| 86 | + prop="used_at" | |
| 87 | + label="核销日期" | |
| 88 | + width="100"> | |
| 57 | 89 | </el-table-column> | 
| 58 | 90 | </el-table> | 
| 59 | 91 | </div> | 
| @@ -70,7 +102,10 @@ export default { | ||
| 70 | 102 |        selectModel: {}, | 
| 71 | 103 | queryRes: [], | 
| 72 | 104 | loading: false, | 
| 73 | - tableEmptyText: "暂无数据" | |
| 105 | + tableEmptyText: "暂无数据", | |
| 106 | + maintainRecord: [], | |
| 107 | +      maintainRecordCellStyle: {"font-size":"11px"}, | |
| 108 | +      maintainRecordHeaderCellStyle: {"font-size": "14px"} | |
| 74 | 109 | } | 
| 75 | 110 | }, | 
| 76 | 111 |    created() { | 
| @@ -79,6 +114,7 @@ export default { | ||
| 79 | 114 |      .then(function (response) { | 
| 80 | 115 | self.models = response.data.data.models | 
| 81 | 116 | }) | 
| 117 | + this.getMaintainRecord() | |
| 82 | 118 | }, | 
| 83 | 119 |    methods: { | 
| 84 | 120 |      querySearch(queryString, cb) { | 
| @@ -102,7 +138,8 @@ export default { | ||
| 102 | 138 | this.loading = true | 
| 103 | 139 | var self = this | 
| 104 | 140 |        this.$axios.post('admin/querysn', {"model_id": this.selectModel.model_id, | 
| 105 | - "sn": this.selectSerialNo}) | |
| 141 | + "sn": this.selectSerialNo, | |
| 142 | + "admin_id": sessionStorage.admin_id}) | |
| 106 | 143 |        .then(function (response) { | 
| 107 | 144 |          self.$nextTick(function (){ | 
| 108 | 145 | self.loading = false | 
| @@ -111,31 +148,28 @@ export default { | ||
| 111 | 148 | self.clear() | 
| 112 | 149 | return | 
| 113 | 150 | } | 
| 114 | -          if (!data.submit_during_activity) { | |
| 115 | - self.clear() | |
| 116 | - self.tableEmptyText = "无优惠券" | |
| 117 | -          } else { | |
| 118 | -            if (data.has_used) { | |
| 119 | - self.clear() | |
| 120 | - self.tableEmptyText = "优惠券已使用" | |
| 121 | -            } else { | |
| 122 | - self.queryRes = [response.data.data] | |
| 123 | - } | |
| 151 | +          if (data.coupon_info[0].coupon_value == 0) { | |
| 152 | +            data.coupon_info = [{"coupon_expire_at": "-","coupon_value": "-"}] | |
| 124 | 153 | } | 
| 125 | - }) | |
| 154 | + self.queryRes = [response.data.data] | |
| 126 | 155 |  | 
| 156 | + }) | |
| 127 | 157 | }) | 
| 128 | 158 | }, | 
| 129 | 159 |  | 
| 130 | 160 |      handleClick(index, row) { | 
| 131 | 161 | var self = this | 
| 132 | 162 |        this.$axios.post('admin/usecoupon', {"model_id": this.selectModel.model_id, | 
| 133 | - "sn": this.selectSerialNo}) | |
| 163 | + "sn": this.selectSerialNo, | |
| 164 | + "admin_id": sessionStorage.admin_id}) | |
| 134 | 165 |        .then(function (response) { | 
| 135 | 166 |          self.$nextTick(function (){ | 
| 136 | 167 | self.clear() | 
| 137 | 168 | self.tableEmptyText = "暂无数据" | 
| 138 | -          alert("已核销") | |
| 169 | + self.getMaintainRecord() | |
| 170 | +          if (response.status == 200 && response.data.status == 200) { | |
| 171 | +            alert("已核销") | |
| 172 | + } | |
| 139 | 173 | }) | 
| 140 | 174 | }) | 
| 141 | 175 | }, | 
| @@ -145,6 +179,20 @@ export default { | ||
| 145 | 179 |        this.selectModel = {} | 
| 146 | 180 | this.selectSerialNo = "" | 
| 147 | 181 | this.selectModelName = "" | 
| 182 | + }, | |
| 183 | + | |
| 184 | +    getMaintainRecord() { | |
| 185 | + var self = this | |
| 186 | +      this.$axios.post('admin/queryusedsn', {"admin_id": sessionStorage.admin_id}) | |
| 187 | +      .then(function (response) { | |
| 188 | + let logs = response.data.data.logs | |
| 189 | +        for (var log of logs) { | |
| 190 | + let date = new Date(log.used_at) | |
| 191 | + console.log(date); | |
| 192 | + log.used_at = date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + date.getDate() + " " + date.getHours() + ":" + date.getMinutes() | |
| 193 | + } | |
| 194 | + self.maintainRecord = response.data.data.logs | |
| 195 | + }) | |
| 148 | 196 | } | 
| 149 | 197 | } | 
| 150 | 198 | } | 
| @@ -153,20 +201,43 @@ export default { | ||
| 153 | 201 | <style lang="scss"> | 
| 154 | 202 |  #maintain { | 
| 155 | 203 | display: flex; | 
| 156 | - flex-direction: column; | |
| 157 | 204 | justify-content: center; | 
| 158 | - align-items: center; | |
| 159 | - width: 100%; | |
| 160 | - height: 200px; | |
| 161 | -  .filter { | |
| 205 | +  .maintain-content { | |
| 162 | 206 | display: flex; | 
| 163 | - flex-direction: row; | |
| 207 | + flex-direction: column; | |
| 208 | + justify-content: center; | |
| 209 | + align-items: center; | |
| 210 | + width: 700px; | |
| 211 | + height: 200px; | |
| 212 | +    .filter { | |
| 213 | + display: flex; | |
| 214 | + flex-direction: row; | |
| 215 | + } | |
| 216 | +    .table { | |
| 217 | + margin-top: 50px; | |
| 218 | + width: 80%; | |
| 219 | + max-width: 900px; | |
| 220 | + height: 100px; | |
| 221 | + } | |
| 164 | 222 | } | 
| 165 | -  .table { | |
| 166 | - margin-top: 50px; | |
| 167 | - width: 80%; | |
| 168 | - max-width: 900px; | |
| 169 | - height: 100px; | |
| 223 | +  .maintain-record { | |
| 224 | + display: flex; | |
| 225 | + flex-direction: column; | |
| 226 | + justify-content: center; | |
| 227 | + width: 280px; | |
| 228 | + background: #fff; | |
| 229 | +    h3 { | |
| 230 | + margin-left: 5px; | |
| 231 | + } | |
| 232 | +    .line { | |
| 233 | + width: 100%; | |
| 234 | + height: 1px; | |
| 235 | + background: #E5EAF2; | |
| 236 | + } | |
| 237 | +    .el-table { | |
| 238 | + width: 260px; | |
| 239 | + margin-left: 10px; | |
| 240 | + } | |
| 170 | 241 | } | 
| 171 | 242 | } | 
| 172 | 243 | </style> |