Forráskód Böngészése

缺陷详情页100%

reedliuqing_i 5 éve
szülő
commit
98101800e1

+ 7 - 0
src/api/defectManage.js

@@ -17,6 +17,13 @@ export function bugGet(id) {
     method: 'get'
   })
 }
+export function bugDetails(data) {
+  return request({
+    url: TeamManagement + '/bug/getBugDetailById',
+    method: 'get',
+    params: data
+  })
+}
 // 删除
 export function bugDelete(data, id) {
   return request({

+ 1 - 1
src/apiConfig/requestIP.js

@@ -1,5 +1,5 @@
 export let host = 'http://zhihui-test.intra.xiaojukeji.com'
-export let requestIp = host + '/localzuul'
+export let requestIp = host + '/zuul'
 export let loginUrl = host + '/sso/login?jumpto=' + 'http://zhihui-test.intra.xiaojukeji.com' + location.pathname
 export let logoutUrl = host + '/sso/logout?jumpto=' + 'http://zhihui-test.intra.xiaojukeji.com' + location.pathname
 

+ 9 - 0
src/router/index.js

@@ -165,6 +165,15 @@ export const constantRoutes = [{
           import('@/views/projectManage/bugList/bugindex'),
     meta: { title: '缺陷' }
   },
+  {
+    path: 'bugDetails/:id',
+    name: '缺陷详情',
+    hidden: true,
+    props: true,
+    component: () =>
+              import('@/views/projectManage/bugList/details/index.vue'),
+    meta: { title: '缺陷详情' }
+  },
   {
     path: '/Platform/useCasePage',
     name: '测试',

+ 1 - 0
src/views/projectManage/bugList/bugindex.vue

@@ -302,6 +302,7 @@ export default {
       this.drawer = true
       this.bugQuery = this.tableData.filter(value => value.id === e)[0]
       console.log(this.bugQuery, 'ddd')
+      this.$router.push({ name: '缺陷详情', params: { id: e + '' }})
     },
     handleClose(done) {
       this.drawer = false

+ 54 - 0
src/views/projectManage/bugList/details/dropdown.vue

@@ -0,0 +1,54 @@
+<template>
+  <el-dropdown
+    placement="bottom"
+    @command="clickCommand"
+  >
+    <el-button
+      size="mini"
+      type="info"
+      plain
+      class="el-dropdown-link drop_down"
+      style="cursor: pointer;"
+    >
+      <span class="el-dropdown-link">{{ value }}</span>
+      <i class="el-icon-arrow-down el-icon--right" />
+    </el-button>
+    <el-dropdown-menu slot="dropdown">
+      <el-dropdown-item
+        v-for="(item,index) in options"
+        :key="index"
+        :command="item.name"
+      >{{ item.name }}</el-dropdown-item>
+    </el-dropdown-menu>
+  </el-dropdown>
+</template>
+
+<script>
+export default {
+  name: 'BugDropDown',
+  props: {
+    value: {
+      type: String,
+      default: null
+    },
+    options: {
+      type: Array,
+      default() {
+        return []
+      }
+    }
+  },
+  methods: {
+    getName() {
+
+    },
+    clickCommand(item) {
+      this.$emit('command', item)
+    }
+  }
+}
+</script>
+
+<style>
+
+</style>

+ 611 - 0
src/views/projectManage/bugList/details/index.vue

@@ -0,0 +1,611 @@
+<template>
+  <el-container style="background-color: #F2F3F6;padding: 20px 35px" direction="vertical" class="bug_manage_container">
+    <el-header class="layout_header bug_manage" style="padding: 0">
+      <el-row style="margin: 10px 0">
+        <el-col :span="22">
+          <el-form label-width="10%" label-position="rifht">
+            <el-form-item :label="'BUG-' + bug.id" width="95%">
+              <el-input
+                v-model="bug.bugName"
+                type="textarea"
+                autosize
+                maxlength="150"
+                :show-word-limit="showWordLimit"
+                :style="bugNameTextareaStyle"
+                @click.native="bugNameChangeWith('90%')"
+                @blur="bugNameChangeWith(bug.bugName.length*10 + 'px')"
+              />
+              <zh-dropdown v-model="enums.bugEnumList[bug.status].name" :options="enums.bugEnumList" @command="openStatsDialog" />
+            </el-form-item>
+          </el-form>
+        </el-col>
+        <el-col :span="2">
+          <el-form label-width="10%" label-position="rifht">
+            <el-form-item style="text-align: right">
+              <el-button size="mini" type="info" plain style="margin-right: 20px" @click="deleteBug()">删除</el-button>
+            </el-form-item>
+          </el-form>
+        </el-col>
+      </el-row>
+    </el-header>
+    <el-container style="margin-top: 20px" class="bug_manage">
+      <el-aside width="70%" style="margin-right:1.5%;padding: 20px 30px" class="layout_aside">
+        <div style="display:flex;align-items: center;margin-bottom: 20px">
+          <div style="width:4px;height:17px;background:#409EFF;border-radius:1px;" />
+          <div style="width:83px;height:20px;font-size:18px;font-family:MicrosoftYaHei;color:rgba(51,59,74,1);margin-left:6px">缺陷详情</div>
+        </div>
+        <el-container width="100%">
+          <el-aside width="49%" style="margin-right: 2%">
+            <el-form label-width="30%" label-position="left" label-suffix=":">
+              <el-form-item label="所属的任务">
+                <el-select v-model="bug.taskId" filterable clearable>
+                  <el-option
+                    v-for="item in options"
+                    :key="item.code"
+                    :label="item.name"
+                    :value="item.code"
+                  />
+                </el-select>
+              </el-form-item>
+              <el-form-item label="优先级">
+                <el-select v-model="bug.priorityLevel">
+                  <el-option
+                    v-for="item in enums.priorityEnumList"
+                    :key="item.code"
+                    :label="item.name"
+                    :value="item.code"
+                  />
+                </el-select>
+              </el-form-item>
+              <el-form-item label="所属模块">
+                <!-- bizId,platformType,clientType  所属模块, 三级菜单(业务线-平台类型-模块) -->
+                <el-cascader
+                  v-model="belongModule"
+                  :options="enums.options"
+                  @change="belongModuleHandleChange"
+                />
+              </el-form-item>
+              <el-form-item label="发现方式">
+                <el-select v-model="bug.discoveryMeth">
+                  <el-option
+                    v-for="item in enums.discoveryMethodEnumList"
+                    :key="item.code"
+                    :label="item.name"
+                    :value="item.code"
+                  />
+                </el-select>
+              </el-form-item>
+              <el-form-item label="缺陷原因">
+                <div style="padding-left: 15px">
+                  {{ bug.bugReason }}
+                </div>
+              </el-form-item>
+              <el-form-item label="Reopen次数">
+                <div style="padding-left: 15px">
+                  {{ bug.reopenTimes }}
+                </div>
+              </el-form-item>
+            </el-form>
+          </el-aside>
+          <el-aside width="49%">
+            <el-form label-width="30%" label-position="left" label-suffix=":">
+              <el-form-item label="端类型">
+                <el-select v-model="bug.sysType">
+                  <el-option
+                    v-for="item in enums.osTypeEnum"
+                    :key="item.code"
+                    :label="item.name"
+                    :value="item.code"
+                  />
+                </el-select>
+              </el-form-item>
+              <el-form-item label="缺陷等级">
+                <el-select v-model="bug.priority">
+                  <el-option
+                    v-for="item in enums.priorityEnumList"
+                    :key="item.code"
+                    :label="item.name"
+                    :value="item.code"
+                  />
+                </el-select>
+              </el-form-item>
+              <el-form-item label="发现阶段">
+                <el-select v-model="bug.discoveryStage">
+                  <el-option
+                    v-for="item in enums.stageEnumList"
+                    :key="item.code"
+                    :label="item.name"
+                    :value="item.code"
+                  />
+                </el-select>
+              </el-form-item>
+              <el-form-item label="修复结果">
+                <el-select v-model="bug.repairResult">
+                  <el-option
+                    v-for="item in enums.repairResultEnumList"
+                    :key="item.code"
+                    :label="item.name"
+                    :value="item.code"
+                  />
+                </el-select>
+              </el-form-item>
+              <el-form-item label="缺陷类型">
+                <div style="padding-left: 15px">
+                  {{ bug.theBugType }}
+                </div>
+              </el-form-item>
+            </el-form>
+          </el-aside>
+        </el-container>
+      </el-aside>
+      <el-aside width="28.5%">
+        <el-main style="padding: 20px 30px" class="layout_main">
+          <div style="display:flex;align-items: center;margin-bottom: 20px;">
+            <div style="width:4px;height:17px;background:#409EFF;border-radius:1px;" />
+            <div style="width:83px;height:20px;font-size:18px;font-family:MicrosoftYaHei;color:rgba(51,59,74,1);margin-left:6px">用户信息</div>
+          </div>
+          <el-form label-width="30%" label-position="left" label-suffix=":">
+            <el-form-item label="提报人">
+              <div style="padding-left: 15px">{{ bug.creatorList }}</div>
+            </el-form-item>
+            <el-form-item label="责任人">
+              <!-- <el-select v-model="bug.assigner" filterable clearable>
+                <el-option
+                  v-for="item in options"
+                  :key="item.code"
+                  :label="item.name"
+                  :value="item.code"
+                />
+              </el-select> -->
+              <el-select
+                v-model="bug.assigner"
+                filterable
+                remote
+                placeholder="请输入姓名或邮箱前缀"
+                :remote-method="searchAssigner"
+                :loading="userLoading"
+              >
+                <el-option
+                  v-for="(item,index) in assignerOptions"
+                  :key="index"
+                  :label="item.name"
+                  :value="item.idap"
+                >
+                  <div style="display: flex;justify-content: start;">
+                    <div style="min-width:100px;color: #8492a6; font-size: 13px; overflow:hidden">{{ item.deptName }}</div>
+                    <div style="min-width:80px">{{ item.name }}</div>
+                    <div style="min-width:100px;color: #8492a6; font-size: 13px; overflow:hidden">{{ item.idap }}</div>
+                  </div>
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="修复人">
+              <!-- <el-select v-model="bug.currentHandler" filterable clearable>
+                <el-option
+                  v-for="item in currentHandlerOptions"
+                  :key="item.code"
+                  :label="item.name"
+                  :value="item.code"
+                />
+              </el-select> -->
+              <el-select
+                v-model="bug.currentHandler"
+                filterable
+                remote
+                placeholder="请输入姓名或邮箱前缀"
+                :remote-method="searchCurrentHandler"
+                :loading="userLoading"
+              >
+                <el-option
+                  v-for="(item,index) in currentHandlerOptions"
+                  :key="index"
+                  :label="item.name"
+                  :value="item.idap"
+                >
+                  <div style="display: flex;justify-content: start;">
+                    <div style="min-width:100px;color: #8492a6; font-size: 13px; overflow:hidden">{{ item.deptName }}</div>
+                    <div style="min-width:80px">{{ item.name }}</div>
+                    <div style="min-width:100px;color: #8492a6; font-size: 13px; overflow:hidden">{{ item.idap }}</div>
+                  </div>
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-form>
+        </el-main>
+        <el-main class="layout_main" style="padding: 20px 30px;margin-top: 20px">
+          <div style="display:flex;align-items: center;margin-bottom: 20px">
+            <div style="width:4px;height:17px;background:#409EFF;border-radius:1px;" />
+            <div style="width:83px;height:20px;font-size:18px;font-family:MicrosoftYaHei;color:rgba(51,59,74,1);margin-left:6px">时长</div>
+          </div>
+          <el-form label-width="30%" label-position="left" label-suffix=":">
+            <el-form-item label="提报时间">
+              <div style="padding-left: 15px">{{ bug.gmtCreate }}</div>
+            </el-form-item>
+            <el-form-item label="修复时间">
+              <div style="padding-left: 15px">{{ bug.finishTime }}</div>
+            </el-form-item>
+            <el-form-item label="修复时长">
+              <div style="padding-left: 15px">{{ bug.fixTime }}</div>
+            </el-form-item>
+          </el-form>
+        </el-main>
+      </el-aside>
+    </el-container>
+    <el-container style="width: 70%" direction="vertical">
+      <el-main style="padding: 20px 30px;margin-top: 20px;" class="layout_main bug_manage">
+        <div style="display:flex;align-items: center;margin-bottom: 20px">
+          <div style="width:4px;height:17px;background:#409EFF;border-radius:1px;" />
+          <div style="width:100px;height:20px;font-size:18px;font-family:MicrosoftYaHei;color:rgba(51,59,74,1);margin-left:6px">客户端信息</div>
+        </div>
+        <el-container width="100%">
+          <el-aside width="49%" style="margin-right: 2%">
+            <el-form label-width="30%" label-position="left" label-suffix=":">
+              <el-form-item label="客户端">
+                <el-input v-model="test" />
+              </el-form-item>
+              <el-form-item label="机型">
+                <el-input v-model="test" />
+              </el-form-item>
+              <el-form-item label="网络">
+                <el-select v-model="test">
+                  <el-option
+                    v-for="item in options"
+                    :key="item.code"
+                    :label="item.name"
+                    :value="item.code"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-form>
+          </el-aside>
+          <el-aside width="49%">
+            <el-form label-width="30%" label-position="left" label-suffix=":">
+              <el-form-item label="客户端">
+                <el-input v-model="test" />
+              </el-form-item>
+              <el-form-item label="系统版本">
+                <el-input v-model="test" />
+              </el-form-item>
+            </el-form>
+          </el-aside>
+        </el-container>
+      </el-main>
+      <el-main style="padding: 20px 30px;margin-top: 20px;" class="layout_main">
+        <div style="display:flex;align-items: center;margin-bottom: 20px">
+          <div style="width:4px;height:17px;background:#409EFF;border-radius:1px;" />
+          <div style="width:100px;height:20px;font-size:18px;font-family:MicrosoftYaHei;color:rgba(51,59,74,1);margin-left:6px">描述</div>
+        </div>
+        <div v-if="!bug.remark && remarkEditorVisible == false" style="width: 100%;height: 300px;text-align: center;line-height: 300px">
+          <span class="bug_describe" @click="remarkEditorVisible = true">点击添加描述</span>
+        </div>
+        <el-tooltip v-if="bug.remark && remarkEditorVisible == false" effect="dark" content="点击编辑" placement="top">
+          <div style="width:100%;padding: 0 10px" class="bug_remark_content" @click="remarkEditorVisible = true">
+            <div v-html="bug.remark" />
+          </div>
+        </el-tooltip>
+        <div v-show="remarkEditorVisible">
+          <div id="wange" class="toolbar" />
+          <div id="wange1" class="text" />
+          <div style="margin-top:40px;float: right">
+            <el-button @click="remarkCancel()">取 消</el-button>
+            <el-button type="primary" @click="remarkConfirm()">确 认</el-button>
+          </div>
+        </div>
+      </el-main>
+      <el-main style="padding: 20px 30px;margin-top: 20px;" class="layout_main">
+        <div style="display:flex;align-items: center;margin-bottom: 20px">
+          <div style="width:4px;height:17px;background:#409EFF;border-radius:1px;" />
+          <div style="width:100px;height:20px;font-size:18px;font-family:MicrosoftYaHei;color:rgba(51,59,74,1);margin-left:6px">附件</div>
+        </div>
+        <el-upload
+          class="upload-demo"
+          action="http://star.xiaojukeji.com/upload/img.node"
+          :on-preview="handlePictureCardPreview"
+          :on-progress="progress"
+          :on-success="handleChange"
+          :file-list="fileList"
+          list-type="picture-card"
+        >
+          <el-button size="small" type="primary">上传附件</el-button>
+        </el-upload>
+        <el-dialog :visible.sync="uploadDialogVisible">
+          <img width="100%" :src="uploadDialogImageUrl" alt="">
+        </el-dialog>
+      </el-main>
+      <el-main style="padding: 20px 30px;margin-top: 20px;" class="layout_main">
+        <div style="display:flex;align-items: center;margin-bottom: 20px">
+          <div style="width:4px;height:17px;background:#409EFF;border-radius:1px;" />
+          <div style="width:100px;height:20px;font-size:18px;font-family:MicrosoftYaHei;color:rgba(51,59,74,1);margin-left:6px">评论</div>
+        </div>
+        <div>
+          <div v-for="(item,index) in comments" :key="index" class="animated bounceInRight">
+            <div
+              style="font-size:14px;color:#333B4A;display: inline-block;"
+            >{{ item.commentInfo.name }}</div>
+            <div
+              style="margin-left:20px;display: inline-block;color: #9B9B9B;font-size:12px"
+            >{{ item.commentInfo.gmtCreater }}</div>
+            <p
+              style="font-size:14px;color:#333B4A;margin-top: 10px;white-space: pre-line;"
+            >{{ item.commentInfo.content }}</p>
+            <br>
+          </div>
+          <el-input
+            v-model="commentContent"
+            type="textarea"
+            placeholder="请输入评论内容"
+            maxlength="300"
+            show-word-limit
+            :autosize="{ minRows: 3, maxRows: 5}"
+            style="margin-bottom: 2%"
+          />
+          <el-button type="primary" size="small" style="float: right" @click="addComment">发表评论</el-button>
+        </div>
+      </el-main>
+    </el-container>
+    <!-- 弹窗 -->
+    <el-dialog :visible.sync="statusDialogVisible" width="30%">
+      <template v-slot:title>
+        <div style="display:flex;align-items: center;">
+          <div style="width:4px;height:17px;background:#409EFF;border-radius:1px;" />
+          <div style="width:83px;height:20px;font-size:18px;font-family:MicrosoftYaHei;color:rgba(51,59,74,1);margin-left:6px">{{ statusDialogTitle }}</div>
+        </div>
+      </template>
+      <el-form v-if="statusDialogTitle !== '删除确认'" label-width="20%" label-position="left">
+        <el-form-item v-if="statusDialogTitle === '待测试' || statusDialogTitle === '已完成'" label="缺陷原因">
+          <el-select v-model="statusDialogForm.bugReason" style="width: 100%">
+            <el-option
+              v-for="item in enums.bugReason"
+              :key="item"
+              :label="item"
+              :value="item"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item v-if="statusDialogTitle === '待测试'" label="修复方式">
+          <el-input v-model="statusDialogForm.fixMethod" type="textarea" placeholder="请输入修复方式" maxlength="300" show-word-limit rows="4" />
+        </el-form-item>
+        <el-form-item v-if="statusDialogTitle === '已完成'" label="修复结果">
+          <el-select v-model="statusDialogForm.fixResult" style="width: 100%">
+            <el-option
+              v-for="item in enums.bugReason"
+              :key="item"
+              :label="item"
+              :value="item"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item v-if="statusDialogTitle === 'Reopen'" label="修复方式">
+          <el-input v-model="statusDialogForm.ReopenReason" type="textarea" placeholder="请输入Reopen" maxlength="300" show-word-limit rows="4" />
+        </el-form-item>
+      </el-form>
+      <div v-else style="text-align:center">是否要删除当前缺陷</div>
+      <template v-slot:footer>
+        <el-button @click="statusDialogCancel">取 消</el-button>
+        <el-button type="primary" @click="statusDialogConfirm">确 认</el-button>
+      </template>
+    </el-dialog>
+  </el-container>
+</template>
+
+<script>
+import E from 'wangeditor'
+import { bugDetails, bugGetEnum } from '@/api/defectManage.js'
+import { getMemberInfo } from '@/api/requirement.js'
+import ZhDropdown from './dropdown.vue'
+
+export default {
+  components: {
+    ZhDropdown
+  },
+  props: {
+    id: {
+      type: String,
+      default: '0'
+    }
+  },
+  data() {
+    return {
+      comments: [],
+      commentContent: '',
+      uploadDialogVisible: false,
+      uploadDialogImageUrl: '',
+      fileList: [],
+      test: '测试',
+      userLoading: false,
+      statusDialogVisible: false,
+      statusDialogTitle: '',
+      statusDialogForm: {},
+      options: [{ name: '测试', code: 1 }, { name: '测试2', code: 2 }],
+      assignerOptions: [],
+      currentHandlerOptions: [],
+      bug: { status: 0 },
+      bugRemark: '',
+      remarkEditorVisible: false,
+      belongModule: null,
+      enums: {
+        bugEnumList: [
+          {
+            code: 0,
+            name: '待开发'
+          },
+          {
+            code: 1,
+            name: '开发中'
+          },
+          {
+            code: 2,
+            name: '待测试'
+          },
+          {
+            code: 3,
+            name: '已完成'
+          },
+          {
+            code: 4,
+            name: 'reopen'
+          }
+        ]
+      },
+      bugNameTextareaStyle: {
+        'width': 'auto',
+        'position': 'relative',
+        'top': '-4px'
+      },
+      showWordLimit: false,
+      rules: {
+
+      }
+    }
+  },
+  mounted() {
+    setTimeout(() => {
+      this.RichText()
+    }, 100)
+    this.getBugEnums()
+    this.getBug(this.id)
+      .then(res => {
+        this.searchAssigner(this.bug.assigner)
+        this.searchCurrentHandler(this.bug.currentHandler)
+      })
+  },
+  methods: {
+    addComment() {
+
+    },
+    handlePictureCardPreview(file) {
+      this.uploadDialogImageUrl = file.url
+      this.uploadDialogVisible = true
+    },
+    // 上传成功回调
+    handleChange(response, file, fileList) {
+      this.fileDbList.push({ 'name': file.name, 'url': 'http:' + file.response.url })
+      this.accessory = JSON.stringify(this.fileDbList)
+      this.dis = false
+      this.$message({ showClose: true, message: '文件上传成功', type: 'success' })
+    },
+    // 文件上传时的钩子
+    progress(event, file, fileList) {
+
+    },
+    RichText() {
+      this.form = {}
+      this.editorRemark = new E('#wange', '#wange1')
+      this.editorRemark.customConfig.menus = ['bold', 'italic', 'underline', 'link', 'list', 'justify', 'table', 'foreColor']
+      this.editorRemark.customConfig.onchange = (html) => {
+        this.bug.remark = html
+        console.log(this.bug.remark)
+      }
+      this.editorRemark.create()
+    },
+    remarkCancel() {
+      this.remarkEditorVisible = false
+    },
+    remarkConfirm() {
+      this.remarkEditorVisible = false
+    },
+    getBug(id) {
+      return bugDetails({ id: this.id })
+        .then(res => {
+          this.bug = res.data
+          return res
+        })
+    },
+    getBugEnums() {
+      bugGetEnum()
+        .then(res => {
+          this.enums = res.data
+        })
+    },
+    deleteBug() {
+      this.openStatsDialog('删除确认')
+    },
+    searchUser(query) {
+      this.userLoading = true
+      return getMemberInfo({ memberIDAP: query }).then(res => {
+        this.userLoading = false
+        return res
+      })
+    },
+    searchAssigner(val) {
+      this.searchUser(val)
+        .then(res => {
+          this.assignerOptions = res.data
+        })
+    },
+    searchCurrentHandler(val) {
+      this.searchUser(val)
+        .then(res => {
+          this.currentHandlerOptions = res.data
+        })
+    },
+    bugNameChangeWith(val) {
+      if (this.showWordLimit) {
+        this.showWordLimit = false
+      } else {
+        this.showWordLimit = true
+      }
+      this.bugNameTextareaStyle.width = val
+    },
+    openStatsDialog(item) {
+      this.statusDialogTitle = item
+      this.statusDialogVisible = true
+    },
+    statusDialogCancel() {
+      this.statusDialogVisible = false
+    },
+    statusDialogConfirm() {
+      this.statusDialogVisible = false
+    },
+    belongModuleHandleChange() {
+
+    }
+  }
+}
+</script>
+
+<style>
+.layout_header,
+.layout_aside,
+.layout_main {
+  border-radius: 8px;
+  background-color: #ffffff;
+}
+.bug_manage .el-input__inner {
+  border: transparent;
+}
+.bug_manage .el-input__inner:hover {
+  border: 1px solid #409EFF;
+}
+.bug_manage .el-textarea__inner {
+  border: transparent;
+  resize:none;
+}
+.bug_manage .el-textarea__inner:hover {
+  border: 1px solid #409EFF;
+}
+.bug_manage .el-select .el-input__suffix-inner {
+  visibility: hidden ;
+}
+.bug_manage .el-select:hover .el-input__suffix-inner {
+  visibility: visible ;
+}
+.bug_manage .el-cascader .el-input__suffix-inner {
+  visibility: hidden ;
+}
+.bug_manage .el-cascader:hover .el-input__suffix-inner {
+  visibility: visible ;
+}
+
+</style>
+
+<style scoped>
+.bug_describe:hover {
+  color: #409EFF;
+  cursor: pointer;
+}
+.bug_remark_content:hover {
+  border-radius:4px;
+  border:1px solid rgba(191,198,220);
+}
+</style>