|
@@ -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>
|