tremble 6 vuotta sitten
vanhempi
commit
a674b6f08c

+ 1 - 0
package.json

@@ -15,6 +15,7 @@
   },
   "dependencies": {
     "axios": "^0.19.0",
+    "echarts": "^4.2.1",
     "element-ui": "^2.10.1",
     "vue": "^2.5.2",
     "vue-router": "^3.0.1"

+ 395 - 0
src/page/device/index.vue

@@ -0,0 +1,395 @@
+<template>
+  <div id="device-management">
+    <div class="device-management-body" v-loading.fullscreen.lock="fullscreenLoading">
+      <div class="order-management-body">
+        <div class="order-management-inner">
+          <div class="base-info">
+            <span>关键词:</span>
+            <el-input style="width:220px;" @keyup.enter.native="currentPage=1&&_getCameraData()" v-model="searchKey" placeholder="关键词"></el-input>
+            <el-button type="primary" @click="currentPage=1&&_getCameraData()" color='red'>搜索</el-button>
+            <el-button icon="el-icon-plus" type="primary" style="float: right;" @click="showCameraDialog" color='red'>添加相机</el-button>
+          </div>
+        </div>
+        <!-- 全部 -->
+        <div class="device-management_bottom">
+          <div class="order-management-table">
+            <el-table ref="order_table" class='e-table' :data="cameras" style="width: 100%">
+              <el-table-column prop="childName" label="设备ID">
+              </el-table-column>
+              <el-table-column prop="userName" label="手机号(用户名)">
+              </el-table-column>
+              <el-table-column prop="goodsName" label="设备类型">
+              </el-table-column>
+              <el-table-column width="300" label="激活时间">
+                <template slot-scope="scope">
+                  <div>{{scope.row.activatedTime}}</div>
+                </template>
+              </el-table-column>
+              <el-table-column prop="own" label="出货类型">
+              </el-table-column>
+              <el-table-column prop="balance" label="当前余额(点)">
+              </el-table-column>
+              <el-table-column label="操作">
+                <template slot-scope="scope">
+                  <el-button type="text" @click="showDialog(scope.row)" class="edit_btn">点数</el-button>
+                  <el-button type="text" v-if="scope.row.userName!='未绑定'" @click="_unbindDevice(scope.row)" class="delete_btn">解绑</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+          <div class="order-management-pagination">
+            <el-pagination  @current-change="handleCurrentChange" :current-page.sync="currentPage" :page-size="pagesize" layout="total, prev, pager, next, jumper" :total="total">
+            </el-pagination>
+          </div>
+        </div>
+        <el-dialog width="450px" title="点数修改" :visible.sync="dialogFormVisible">
+          <el-form :model="form" >
+            <el-form-item >
+              <div style="display: flex;justify-content: space-between;font-size: 14px;">
+                <span>设备ID:
+              <span>{{currentChildName}}</span>
+                </span>
+                <span>当前余额:
+              <span>{{currentBalance}}</span>
+                </span>
+              </div>
+            </el-form-item>
+            <el-form-item label="充值类型">
+              <el-select v-model="form.region" placeholder="请选择点数修改类型">
+                <el-option label="系统赠送" value=0></el-option>
+                <el-option label="退充值款" value=-2></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="充值点数" width="100%">
+              <el-input @keyup.native="_checkInput" maxlength="5" :suffix-icon="form.region==-2?'el-icon-minus':'el-icon-plus'" v-model.number="form.point"></el-input>
+            </el-form-item>
+          </el-form>
+          <div slot="footer" class="dialog-footer">
+            <el-button @click="dialogFormVisible = false">取 消</el-button>
+            <el-button type="primary" @click="_modifyPoints">确 定</el-button>
+          </div>
+        </el-dialog>
+        <el-dialog width="470px" title="添加相机" :visible.sync="cameraVisible">
+          <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="80px">
+            <el-form-item label="出库类型" prop="own">
+              <el-select v-model="ruleForm.own" placeholder="请选择出库类型">
+                <el-option label="正常销售" value="0"></el-option>
+                <el-option label="礼品赠送" value="2"></el-option>
+                <el-option label="员工自用" value="1"></el-option>
+                <el-option label="其他" value="3"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="相机类型" prop="type">
+              <el-select v-model="ruleForm.type" placeholder="请选择相机类型">
+                <el-option label="四维看看Pro八目相机" value="1"></el-option>
+                <el-option label="四维看看Lite双目相机" value="0"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="wifi名称" prop="wifi">
+              <el-input v-model="ruleForm.wifi"></el-input>
+            </el-form-item>
+            <el-form-item label="物理地址" prop="address">
+              <el-input v-model="ruleForm.address"></el-input>
+            </el-form-item>
+            <el-form-item label="初始点数" @keyup.native="_checkPointInput" prop="initPoint">
+              <el-input v-model="ruleForm.initPoint"></el-input>
+            </el-form-item>
+            <el-form-item label="订单号" prop="orderNum">
+              <el-input v-model="ruleForm.orderNum"></el-input>
+            </el-form-item>
+          </el-form>
+          <div slot="footer" class="dialog-footer">
+            <el-button @click="cameraVisible = false">取 消</el-button>
+            <el-button type="primary" @click="_addCamera">确 定</el-button>
+          </div>
+        </el-dialog>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+
+export default {
+  data () {
+    return {
+      tabs: [{ name: '设备ID', idx: 0 }, { name: '手机号', idx: 1 }, { name: '当前余额', idx: 2 }, { name: '历史充值', idx: 3 }],
+      expands: [],
+      expandedArr: [],
+      cameras: [],
+      currentPage: 1,
+      key_input: '',
+      fullscreenLoading: false,
+      product: {
+        'name': '',
+        'packageName': '',
+        'count': '',
+        'amount': '',
+        'url': ''
+      },
+      // labelPosition: 'right',
+      receive: {
+        'name': '',
+        'phone': '',
+        'address': '',
+        'invoice': '',
+        'expressNum': ''
+      },
+      searchKey: '',
+      total: 0,
+      // expressNum_input: "",
+      searchDate: [],
+      searchOrderNumber: '',
+      searchPhone: '',
+      searchExpressNum: '',
+      hasClickSearch: false,
+      tabIndex: 0,
+      dialogFormVisible: false,
+      cameraVisible: false,
+      form: {
+        point: '',
+        region: '',
+        date1: '',
+        date2: '',
+        delivery: false,
+        type: [],
+        resource: '',
+        desc: ''
+      },
+      ruleForm: {
+        wifi: '',
+        address: '',
+        initPoint: '',
+        type: [],
+        own: [],
+        orderNum: ''
+      },
+      rules: {
+        wifi: [
+          { required: true, message: '请输入WiFi名称', trigger: 'blur' }
+          // { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
+        ],
+        address: [
+          { required: true, message: '请输入物理地址', trigger: 'blur' }
+          // { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
+        ],
+        initPoint: [
+          { required: true, message: '请输入初始点数', trigger: 'blur' }
+          // { type: "number", message: '必须为数字值', trigger: 'blur' }
+        ]
+
+      },
+      cameraInfo: {
+        wifi: '',
+        type: '',
+        address: '',
+        initPoint: '',
+        orderNum: ''
+      },
+
+      formLabelWidth: '30%',
+      value2: true,
+      currentChildName: '',
+      currentDeviceId: '',
+      currentBalance: '',
+      pagesize: 10
+    }
+  },
+  watch: {
+    currentPage () {
+      this._getCameraData()
+    }
+  },
+  methods: {
+    async _getCameraData () {
+      this.fullscreenLoading = true
+      let res = await this.$http.post('/manager/camera/list', {
+        pageNum: this.currentPage,
+        pageSize: this.pagesize,
+        searchKey: this.searchKey
+      })
+      this.fullscreenLoading = false
+      console.log(res)
+      if (res.code === 0) {
+        let temp = res.data.list
+        for (var i = 0; i < temp.length; i++) {
+          switch (temp[i]['own']) {
+            case 0:
+              temp[i]['own'] = '正常销售'
+              break
+            case 1:
+              temp[i]['own'] = '员工自用'
+              break
+            case 2:
+              temp[i]['own'] = '礼品赠送'
+              break
+            case 3:
+              temp[i]['own'] = '其他'
+              break
+          }
+          temp[i]['userName'] = temp[i]['userName'] ? temp[i]['userName'] : '未绑定'
+          temp[i]['activatedTime'] = temp[i]['activatedTime'] ? new Date(temp[i]['activatedTime']).format('yyyy-MM-dd hh:mm:ss') : '/'
+        }
+        this.cameras = temp
+        this.total = res.data.total ? res.data.total : this.total
+      }
+    },
+    handleCurrentChange (val) {
+      this.currentPage = val
+    },
+    showDialog (row) {
+      this.form.region = ''
+      this.form.point = ''
+      this.currentChildName = row.childName
+      this.currentDeviceId = row.id
+      this.currentBalance = row.balance
+      this.dialogFormVisible = true
+    },
+    async _unbindDevice (row) {
+      let cameraId = row.cameraId
+      this.$confirm('确定把该设备从账号中解除绑定', '解绑设备', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(async () => {
+        this.fullscreenLoading = true
+        let res = await this.$http.post('/manager/camera/unbind', {
+          cameraId
+        })
+        if (res.code === 0) {
+          this.$message({
+            type: 'success',
+            message: '解绑成功!'
+          })
+          this._getCameraData()
+        } else {
+          this.$alert('解绑失败', '提示', {
+            confirmButtonText: '确定'
+          })
+        }
+        this.fullscreenLoading = false
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消解绑'
+        })
+        this.fullscreenLoading = false
+      })
+    },
+    _checkInput: function (e) {
+      this.form.point += ''
+      this.form.point = this.form.point.replace(/[^\d]/g, '')
+      if (Number(this.form.point) && this.form.point > 10000) {
+        this.form.point = 10000
+      }
+    },
+    _checkPointInput: function (e) {
+      this.ruleForm.initPoint += ''
+      this.ruleForm.initPoint = this.ruleForm.initPoint.replace(/[^\d]/g, '')
+      if (Number(this.ruleForm.initPoint) && this.ruleForm.initPoint > 10000) {
+        this.ruleForm.initPoint = 10000
+      }
+    },
+    async _modifyPoints () {
+      let body = this.form.region
+      let points = this.form.point
+      let cameraId = this.currentDeviceId
+
+      if (!body) {
+        this.$alert('请选择充值类型', '提示', {
+          confirmButtonText: '确定',
+          callback: action => {
+
+          }
+        })
+      } else {
+        let res = await this.$http.post('/manager/camera/modifyPoints', {
+          body: Number(body),
+          cameraId,
+          points
+        })
+
+        if (res.code === 0) {
+          this.$message({
+            type: 'success',
+            message: '充值成功!'
+          })
+          this._getCameraData()
+          this.dialogFormVisible = false
+        } else {
+          this.$alert(res.msg, '提示', {
+            confirmButtonText: '确定'
+          })
+        }
+      }
+    },
+
+    async _addCamera () {
+      let {
+        wifi: wifiName,
+        address: childName,
+        initPoint: balance,
+        own,
+        type,
+        orderNum: orderSn
+      } = this.ruleForm
+      console.log(wifiName, childName, balance, own, orderSn)
+      if (wifiName === '' || childName === '' || balance === '' || own === '' || type === '') {
+        return
+      }
+
+      this.fullscreenLoading = true
+      let res = await this.$http.post('/manager/camera/add', {
+        childName,
+        wifiName,
+        orderSn,
+        balance: Number(balance),
+        type: Number(type),
+        own
+      })
+      this.fullscreenLoading = false
+      if (res.code === 0) {
+        this.$alert('该相机信息已成功添加入库', '添加成功', {
+          confirmButtonText: '确定'
+        })
+        this._getCameraData()
+        this.ruleForm.address = ''
+        this.ruleForm.wifi = ''
+        this.ruleForm.own = ''
+        this.ruleForm.orderNum = ''
+        this.ruleForm.type = ''
+        this.ruleForm.initPoint = ''
+
+        this.cameraVisible = false
+      } else {
+        this.$alert(res.msg, '添加失败', {
+          confirmButtonText: '确定'
+        })
+      }
+    },
+    showCameraDialog (row) {
+      this.cameraVisible = true
+    }
+  },
+  created () {
+    this._getCameraData()
+  }
+}
+
+</script>
+<style lang="css" scoped>
+@import './style.css';
+</style>
+<style type="text/css">
+.el-table__expand-icon>i {
+  display: none !important;
+}
+
+.edit_btn span {
+  color: #09e1c0
+}
+
+.delete_btn span {
+  color: #f56c6c
+}
+
+</style>

+ 170 - 0
src/page/device/style.css

@@ -0,0 +1,170 @@
+.device-management-body {
+  width: 100%;
+  float: left;
+  /*  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  -moz-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);*/
+  /*border: 1px solid #ebeef5;*/
+}
+
+.order_check_row {
+  display: flex;
+  width: 100%;
+}
+
+.product_info {
+  width: 50%;
+  flex-direction: column;
+  display: flex;
+  padding: 20px;
+  background: #fff;
+}
+
+.order_info {
+  width: 50%;
+  padding: 20px;
+  margin-left: 20px;
+  background: #fff;
+}
+
+.product_info_title {
+  text-align: left;
+  font-weight: 700;
+  margin-bottom: 20px;
+}
+
+.product_info_body {
+  margin-left: 30px;
+  display: flex;
+}
+
+.product_info_body_img {
+  width: 110px;
+  height: 110px;
+  border: 1px solid #ddd;
+}
+
+.product_img {
+  margin: 5px auto;
+  width: 100px;
+  height: 100px;
+}
+
+.product_info_body_info {
+  margin-left: 50px;
+}
+
+.product_info_body_info_item {
+  line-height: 27px;
+  text-align: left;
+}
+
+.product_info_body_info_item_title {
+  width: 100px;
+  display: inline-block;
+  margin-right: 20px;
+  font-weight: 700;
+}
+
+.order_info_title {
+  text-align: left;
+  font-weight: 700;
+  margin-bottom: 20px;
+}
+
+.order_info_body {
+  margin-left: 30px;
+  text-align: left;
+}
+
+/* .order_info_body_info {} */
+
+.order_info_body_info_item {
+  line-height: 23px;
+  padding: 10px 0;
+  border-bottom: 1px solid #f5f5f5;
+  text-align: left;
+}
+
+.order_info_body_info_item_title {
+  width: 100px;
+  display: inline-block;
+  margin-right: 20px;
+  font-weight: 700;
+}
+
+.order-management-body {
+  width: 100%;
+  margin: 30px 0 20px 0;
+  float: left;
+}
+
+.order-management-inner {
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  -moz-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  /*border: 1px solid #ebeef5;*/
+  padding: 20px;
+  background: #fff;
+  border-radius: 5px;
+}
+
+.base-info {
+  margin: 20px 0;
+}
+
+.device-management_bottom {
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  -moz-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  /*border: 1px solid #ebeef5;*/
+  margin-top: 30px;
+  background: #fff;
+  border-radius: 5px;
+  padding: 20px 0;
+}
+
+.device-management_tab {
+  margin: 0 0 20px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.device-management_tab ul {
+  display: inline-block;
+}
+
+.device-management_tab li {
+  display: inline-block;
+  cursor: pointer;
+  color: #999;
+  line-height: 1;
+}
+
+.device-management_tab_li_active {
+  color: #000!important;
+  font-weight: bold;
+}
+
+.order-management-table {
+  margin: 0 20px;
+}
+
+.order-management-pagination {
+  padding: 20px 20px 0;
+  position: relative;
+  text-align: right;
+}
+
+.el-select {
+  width: 340px!important;
+}
+
+.el-input {
+  width: 340px;
+}
+
+.el-icon-plus:before {
+  color: #09e1c0;
+}

+ 235 - 0
src/page/feedback/index.vue

@@ -0,0 +1,235 @@
+<template>
+  <div class="feedback-message-body" v-loading.fullscreen.lock="fullscreenLoading">
+    <div class="order-management-body">
+      <div class="feedback-message_bottom">
+        <div class="order-management-table">
+          <div class="feedback-message_tab">
+            <el-select @change="selectChange" v-model="search_value" placeholder="请选择">
+              <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
+              </el-option>
+            </el-select>
+          </div>
+          <el-table ref="order_table" class='e-table' :data="feedBack" style="width: 100%">
+            <el-table-column width="130" prop="idx" label="序号">
+            </el-table-column>
+            <el-table-column width="400" label="场景链接">
+              <template slot-scope="scope">
+                <a :href="scope.row.url" target="_blank">{{scope.row.url}}</a>
+              </template>
+            </el-table-column>
+            <el-table-column prop="phone" label="联系电话">
+            </el-table-column>
+            <el-table-column  label="留言内容">
+              <template slot-scope="scope">
+                <div class="feed_message">{{scope.row.message}}</div>
+              </template>
+            </el-table-column>
+            <el-table-column label="反馈时间">
+              <template slot-scope="scope">
+                <div>{{new Date(scope.row.submitTime).format('yyyy-MM-dd hh:mm:ss')}}</div>
+              </template>
+            </el-table-column>
+            <el-table-column prop="solve" label="状态">
+              <template slot-scope="scope">
+                <span class="edit_btn" v-show="scope.row.solve">已解决</span>
+                <span class=" error_btn" v-show="!scope.row.solve">待解决</span>
+              </template>
+            </el-table-column>
+            <el-table-column type="expand" prop="operation" label="操作" width="150">
+              <template slot-scope="scope">
+                <div class="order_check_row">
+                  <div class="product_info">
+                    <div class="product_info_title">
+                      留言内容
+                    </div>
+                    <div class="product_info_body">
+                      {{scope.row.message}}
+                    </div>
+                  </div>
+                  <div class="order_info">
+                    <div class="order_info_title">
+                      详细信息
+                    </div>
+                    <div class="order_info_body">
+                      <div class="order_info_body_info">
+                        <div class="order_info_body_info_item">
+                          <span class="order_info_body_info_item_title">场景链接</span>
+                          <a :href="scope.row.url" target="_blank">{{scope.row.url}}</a>
+                          <span class="order_info_body_info_item_content"></span>
+                        </div>
+                        <div class="order_info_body_info_item">
+                          <span class="order_info_body_info_item_title">联系电话</span>
+                          <span class="order_info_body_info_item_content">{{scope.row.phone}}</span>
+                        </div>
+                        <div class="order_info_body_info_item">
+                          <span class="order_info_body_info_item_title">反馈时间</span>
+                          <span class="order_info_body_info_item_content">{{new Date(scope.row.submitTime).format('yyyy-MM-dd hh:mm:ss')}}</span>
+                        </div>
+                        <div class="order_info_body_info_item">
+                          <span class="order_info_body_info_item_title">反馈状态</span>
+                          <span class="order_info_body_info_item_content">
+                            <el-checkbox v-model="scope.row.hasSolve"  v-if="!scope.row.solve">已解决</el-checkbox>
+                            <span v-if="scope.row.solve">已解决</span>
+                          </span>
+                        </div>
+                        <div class="order_info_body_info_item" v-if="!scope.row.solve">
+                          <span class="order_info_body_info_item_title"></span>
+                          <span class="order_info_body_info_item_content"><el-button @click="saveRow(scope.row)" type="primary">保存</el-button><el-button @click="hideRow(scope.row)">取消</el-button></span>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                </div>
+                <!-- <div v-if="">暂无数据</div> -->
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+        <div class="order-management-pagination">
+          <el-pagination @current-change="handleCurrentChange" :current-page.sync="currentPage" :page-size="pageSize" layout="total, prev, pager, next, jumper" :total="total">
+          </el-pagination>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+
+export default {
+  data () {
+    return {
+      getRowKeys (row) {
+        return row.number
+      },
+      hasSolve: false,
+      options: [{
+        value: -1,
+        label: '全部消息'
+      }, {
+        value: 0,
+        label: '待解决'
+      }, {
+        value: 1,
+        label: '已解决'
+      }],
+
+      expands: [],
+      expandedArr: [],
+      feedBack: [],
+      currentPage: 1,
+      key_input: '',
+      fullscreenLoading: false,
+      product: {
+        'name': '',
+        'packageName': '',
+        'count': '',
+        'amount': '',
+        'url': ''
+      },
+      receive: {
+        'name': '',
+        'phone': '',
+        'address': '',
+        'invoice': '',
+        'expressNum': ''
+      },
+      total: 0,
+      searchDate: [],
+      searchOrderNumber: '',
+      searchPhone: '',
+      searchExpressNum: '',
+      hasClickSearch: false,
+      tabIndex: 0,
+      pageSize: 10,
+      search_value: -1
+    }
+  },
+  methods: {
+    async saveRow (row) {
+      let isSelect = row.hasSolve
+      let feedBackId = row.id
+      console.log(isSelect)
+      if (isSelect) {
+        let res = await this.$http.post('/manager/scene/updateFeedBackStatus', {
+          feedBackId,
+          solveType: 1
+        })
+
+        if (res.data.code === 0) {
+          this.$notify({
+            title: '成功',
+            message: '保存成功!',
+            type: 'success'
+          })
+          row.solve = 1
+        } else {
+          this.$alert('保存失败', '提示', {
+            confirmButtonText: '确定',
+            callback: action => {
+            }
+          })
+        }
+      }
+    },
+    hideRow (row) {
+      this.$refs.order_table.toggleRowExpansion(row, false)
+    },
+    handleCurrentChange (val) {
+      let page = val
+      this._getFeedBackData(page)
+    },
+    selectChange () {
+      this.currentPage = 1
+      this.total = 0
+      this._getFeedBackData(1)
+    },
+
+    async _getFeedBackData (page) {
+      let solveType = this.search_value === -1 ? null : this.search_value
+
+      this.fullscreenLoading = true
+
+      let res = await this.$http.post('/manager/scene/feedBackList', {
+        pageNum: page,
+        solveType,
+        pageSize: this.pageSize
+      })
+      this.fullscreenLoading = false
+      if (res.code === 0) {
+        let temp = res.data.list
+        for (var i = 0; i < temp.length; i++) {
+          let tempUrl = 'http://www.4dkankan.com/show.html?m=' + temp[i].sceneCode
+          let solveStatus = temp[i].solve === 1
+
+          temp[i].idx = i + 1
+          temp[i].url = tempUrl
+          temp[i].hasSolve = false
+
+          temp[i].solve = solveStatus
+        }
+
+        this.feedBack = temp
+        this.total = res.data.total ? res.data.total : this.total
+      }
+    }
+
+  },
+  mounted () {
+    this._getFeedBackData(1)
+  }
+}
+
+</script>
+<style lang="css" scoped>
+@import './style.css';
+</style>
+<style type="text/css">
+.el-table__expand-icon>i {
+  display: none !important;
+}
+
+.error_btn {
+  color: #999
+}
+
+</style>

+ 164 - 0
src/page/feedback/style.css

@@ -0,0 +1,164 @@
+.feedback-message-body {
+  width: 100%;
+  float: left;
+}
+
+.order_check_row {
+  display: flex;
+  width: 100%;
+}
+
+.product_info {
+  width: 50%;
+  flex-direction: column;
+  display: flex;
+  padding: 20px;
+  background: #fff;
+}
+
+.order_info {
+  width: 50%;
+  padding: 20px;
+  margin-left: 20px;
+  background: #fff;
+}
+.feed_message{
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  display: inline-block;
+  width:100%;
+}
+
+.product_info_title {
+  text-align: left;
+  font-weight: 700;
+  margin-bottom: 20px;
+}
+
+.product_info_body {
+  padding-left: 30px;
+  display: block;
+  text-align:left;
+  width:100%;
+  word-break:break-word;
+  line-height: 2;
+}
+
+.product_info_body_img {
+  width: 110px;
+  height: 110px;
+  border: 1px solid #ddd;
+}
+
+.product_img {
+  margin: 5px auto;
+  width: 100px;
+  height: 100px;
+}
+
+.product_info_body_info {
+  margin-left: 50px;
+}
+
+.product_info_body_info_item {
+  line-height: 27px;
+  text-align: left;
+}
+
+.product_info_body_info_item_title {
+  width: 100px;
+  display: inline-block;
+  margin-right: 20px;
+  font-weight: 700;
+}
+
+.order_info_title {
+  text-align: left;
+  font-weight: 700;
+  margin-bottom: 20px;
+}
+
+.order_info_body {
+  margin-left: 30px;
+  text-align: left;
+}
+
+.order_info_body_info_item {
+  line-height: 23px;
+  padding: 10px 0;
+  border-bottom: 1px solid #f5f5f5;
+  text-align: left;
+}
+
+.order_info_body_info_item_title {
+  width: 100px;
+  display: inline-block;
+  margin-right: 20px;
+  font-weight: 700;
+}
+
+.order-management-body {
+  width: 100%;
+  margin: 0 0 20px 0;
+  float: left;
+}
+
+.order-management-inner {
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  -moz-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  /*border: 1px solid #ebeef5;*/
+  padding: 30px 20px;
+  background: #fff;
+  border-radius: 5px;
+}
+
+.base-info {
+  margin: 20px 0;
+}
+
+.feedback-message_bottom {
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  -moz-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  /*border: 1px solid #ebeef5;*/
+  margin-top: 30px;
+  background: #fff;
+  border-radius: 5px;
+  padding: 20px 0;
+}
+
+.feedback-message_tab {
+  margin: 20px 0;
+}
+
+.feedback-message_tab ul {
+  display: inline-block;
+}
+
+.feedback-message_tab li {
+  display: inline-block;
+  cursor: pointer;
+  color: #999;
+  line-height: 1;
+}
+
+.feedback-message_tab_li_active {
+  color: #000!important;
+  font-weight: bold;
+}
+
+.order-management-table {
+  margin: 20px 20px 0;
+}
+
+.order-management-pagination {
+  padding: 20px 20px 0;
+  position: relative;
+  text-align: right;
+}
+
+.el-input {
+  width: 220px;
+}

+ 2 - 2
src/page/layout/slide.vue

@@ -55,8 +55,8 @@ export default {
         link: {name: 'home'},
         children: [
           { text: '场景管理', link: {name: 'home'} },
-          { text: '反馈消息', link: {name: 'home'} },
-          { text: '设备管理', link: {name: 'home'} }
+          { text: '反馈消息', link: {name: 'feedback'} },
+          { text: '设备管理', link: {name: 'device'} }
         ],
         top: 154
       }

+ 4 - 7
src/page/user/query-list/index.vue

@@ -136,10 +136,9 @@ export default {
       })
     },
     goToDetail (name) {
-      return;
+      return
       request['showCameraSurplus']({ cameraId: name }, 'post').then(res => {
         // result = res;
-
         console.log('result', res)
         this.$router.push({ name: '用户明细', params: { id: name, points: res.result } })
       })
@@ -157,7 +156,7 @@ export default {
       ]
     },
     async getData () {
-      let params = Object.assign(this.screen || {}, { page: this.pag.current - 1 });
+      let params = Object.assign(this.screen || {}, { page: this.pag.current - 1 })
       this.fullscreenLoading = true
       let data = (await this.$http.post('/manager/camera/search', {
         pageNum: params.page,
@@ -169,21 +168,19 @@ export default {
 
       this.isChild = false
       this.total = data.total
-      
+
       this.users = data.list
       this.pag.current = params.page + 1
       this.pag.total = data.total
     },
     async getStatistics () {
-      return;
+      return
       let params = Object.assign(
         this.screen, {}
       )
       await request['showCameraStatistics'](params, 'post').then(res => {
         // result = res;
         this.statistics = res
-
-        console.log('result', this.statistics)
       })
     },
     async refresh () {

+ 12 - 0
src/router/index.js

@@ -28,6 +28,18 @@ export default new Router({
           meta: {text: '订单管理'}
         },
         {
+          path: '/feedback',
+          name: 'feedback',
+          component: require('@/page/feedback').default,
+          meta: {text: '反馈消息'}
+        },
+        {
+          path: '/device',
+          name: 'device',
+          component: require('@/page/device').default,
+          meta: {text: '反馈消息'}
+        },
+        {
           path: '/user',
           name: 'User',
           component: require('@/page/user').default,