problemList.vue 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701
  1. <template>
  2. <div style="width: 100%;">
  3. <div class="set-background">
  4. <div class="block">
  5. <el-form :model="queryCode">
  6. <div class="set-between">
  7. <!-- <el-form-item label="创建时间" label-width="70px"><el-date-picker v-model="queryCode.dateQuery" align="left" size="medium" type="datetime" style="width:76%;" placeholder="选择日期" /></el-form-item> -->
  8. <el-input v-model="queryCode.currentHandler" placeholder="处理人" autocomplete="off" clearable size="medium" style="width:13%;margin-right: 15px;" />
  9. <el-input v-model="queryCode.creator" placeholder="提交人" autocomplete="off" clearable size="medium" style="width:13%;margin-right: 15px;" />
  10. <el-input v-model="queryCode.bugName" placeholder="主题" autocomplete="off" clearable size="medium" style="width:13%;margin-right: 15px;" />
  11. <el-select v-model="queryCode.taskId" size="medium" style="width:15%;margin-right: 15px;" clearable placeholder="任务">
  12. <el-option v-for="item in taskIdStr" :key="item.id" :label="item.name" :value="item.id" />
  13. </el-select>
  14. <el-select v-model="queryCode.status" size="medium" style="width:15%;margin-right: 15px;" clearable placeholder="bug状态">
  15. <el-option v-for="item in bugStatusStr" :key="item.code" :label="item.name" :value="item.code" />
  16. </el-select>
  17. <el-select v-model="queryCode.priority" size="medium" style="width:15%;margin-right: 15px;" clearable placeholder="级别">
  18. <el-option v-for="item in bugStatusPriority" :key="item.code" :label="item.name" :value="item.code" />
  19. </el-select>
  20. <el-select v-model="queryCode.repairResult" size="medium" style="width:15%;margin-right: 10px;" clearable placeholder="修复状态">
  21. <el-option v-for="item in repairResultStr" :key="item.code" :label="item.name" :value="item.code" />
  22. </el-select>
  23. <el-button type="primary" size="medium" style="margin-right:10px;" icon="el-icon-plus" circle @click="timeShow=! timeShow" />
  24. </div>
  25. <div class="set-between">
  26. <el-button type="primary" plain size="medium" @click="dataQuery(queryCode)">查询</el-button>
  27. <el-button type="primary" plain size="medium" @click="createdCode()">新增</el-button>
  28. </div>
  29. </el-form>
  30. <el-date-picker
  31. v-show="timeShow"
  32. v-model="timeInterval"
  33. size="medium"
  34. type="datetimerange"
  35. range-separator="至"
  36. start-placeholder="创建开始时间"
  37. end-placeholder="创建结束时间"
  38. clearable
  39. />
  40. <div class="set-locate">
  41. <el-table
  42. :data="tableData"
  43. border
  44. style="width: 100%"
  45. size="mini"
  46. >
  47. <el-table-column
  48. prop="id"
  49. label="ID"
  50. align="center"
  51. width="60"
  52. />
  53. <el-table-column
  54. label="主题"
  55. align="center"
  56. width="180"
  57. show-overflow-tooltip
  58. >
  59. <template slot-scope="scope">
  60. <a href="javascript:void(0)" style="color:#20a0ff" @click="toReportView(scope.row.id)">{{ scope.row.bugName }}</a>
  61. </template>
  62. </el-table-column>
  63. <el-table-column
  64. prop="priorityName"
  65. label="级别"
  66. align="center"
  67. width="60"
  68. />
  69. <el-table-column
  70. label="状态"
  71. align="center"
  72. >
  73. <template slot-scope="scope">
  74. <el-tag type="success" size="medium"><span>{{ scope.row.bugStatusName }}</span></el-tag>
  75. </template>
  76. </el-table-column>
  77. <el-table-column
  78. prop="currentHandlerList"
  79. label="处理人"
  80. align="center"
  81. show-overflow-tooltip
  82. />
  83. <el-table-column
  84. prop="creatorList"
  85. label="提交人"
  86. align="center"
  87. show-overflow-tooltip
  88. />
  89. <el-table-column
  90. prop="assignerList"
  91. label="责任人"
  92. align="center"
  93. show-overflow-tooltip
  94. />
  95. <el-table-column
  96. prop="repairResultName"
  97. label="修复结果"
  98. align="center"
  99. width="70"
  100. show-overflow-tooltip
  101. />
  102. <el-table-column
  103. prop="gmtCreate"
  104. label="创建日期"
  105. align="center"
  106. show-overflow-tooltip
  107. />
  108. <el-table-column
  109. label="操作"
  110. align="center"
  111. width="220"
  112. >
  113. <template v-slot="scope">
  114. <div>
  115. <el-button size="mini" type="primary" plain @click="queryPresentation(scope.row)">更新</el-button>
  116. <el-button size="mini" type="danger" plain @click="delePresentation(scope.row.id)">删除</el-button>
  117. <el-button size="mini" type="info" plain @click="copyArrange(scope.row.id)">复制</el-button>
  118. </div>
  119. </template>
  120. </el-table-column>
  121. </el-table>
  122. <div class="set-locate">
  123. <h4>缺陷分析数据</h4>
  124. <el-table
  125. :data="[statistics]"
  126. border
  127. style="width: 100%"
  128. size="mini"
  129. >
  130. <el-table-column
  131. prop="totalBug"
  132. label="有效Bug总数"
  133. align="center"
  134. />
  135. <el-table-column
  136. prop="invalidBug"
  137. label="无效Bug"
  138. align="center"
  139. />
  140. <el-table-column
  141. prop="fixBug"
  142. label="已解决"
  143. align="center"
  144. />
  145. <el-table-column
  146. prop="rateOfFix"
  147. label="修复率"
  148. align="center"
  149. />
  150. <el-table-column
  151. prop="remainBug"
  152. label="遗留"
  153. align="center"
  154. />
  155. <el-table-column
  156. prop="rateOfReopen"
  157. label="Reopen率"
  158. align="center"
  159. />
  160. <el-table-column
  161. prop="overnightRate"
  162. label="过夜率"
  163. align="center"
  164. />
  165. <el-table-column
  166. prop="fixTime"
  167. label="修复时长"
  168. align="center"
  169. />
  170. <el-table-column
  171. prop="p0"
  172. label="P0"
  173. align="center"
  174. />
  175. <el-table-column
  176. prop="p1"
  177. label="P1"
  178. align="center"
  179. />
  180. <el-table-column
  181. prop="other"
  182. label="其他"
  183. align="center"
  184. />
  185. </el-table>
  186. <el-tooltip effect="dark" placement="bottom">
  187. <div slot="content"><div>总数: 搜索结果下的所有有效缺陷不包含无效bug和重复bug</div> <div style="margin:5px 0">已解决: 状态为已完成并且修复结果为已修复或不修复的bug</div><div style="margin:5px 0">遗留bug: 状态不是已完成状态的bug</div><div style="margin:5px 0">reopen率: reopen次数/bug总数</div><div style="margin:5px 0">过夜: 创建时间-修复时间 >24h/bug总数</div><div style="margin:5px 0">修复时长: 创建时间-修复时间,不包含节假日</div><div style="margin:5px 0">其他: 除p0,p1级之外的bug</div><div>无效bug: 修复结果为无效 或者重复的bug</div></div>
  188. <span class="titleDescription">统计规则说明<i class="el-icon-question" /> </span>
  189. </el-tooltip>
  190. </div>
  191. <el-pagination style="margin-top:30px;" align="center" :current-page="curIndex" :page-sizes="[5, 10, 20]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
  192. </div>
  193. </div>
  194. <el-dialog class="adjustHeight" :title="titName" :visible.sync="dialogFormVisible" width="70%">
  195. <el-form ref="form" :model="form" :rules="serviceDataRules">
  196. <div class="set-background">
  197. <el-form-item label="标题" :label-width="formLabelWidth"><el-input v-model="form.bugName" autocomplete="off" placeholder="普惠质量产品工具平台..." style="width:77.2%;" /></el-form-item>
  198. <div style="display:flex;">
  199. <el-form-item style="flex-grow:1" prop="bizId" label="业务线" :label-width="formLabelWidth1">
  200. <el-select v-model="form.bizId" placeholder="业务线" style="width:54.5%;">
  201. <el-option v-for="item in bizOptions" :key="item.value" :label="item.name" :value="item.value" />
  202. </el-select>
  203. </el-form-item>
  204. <el-form-item style="flex-grow:1" label="业务模块" prop="businessType" :label-width="formLabelWidth1">
  205. <el-select v-model="form.businessType" placeholder="业务模块" style="width:54.5%;">
  206. <el-option v-for="item in businessTypeStr" :key="item.name" :label="item.name" :value="item.name" />
  207. </el-select>
  208. </el-form-item>
  209. </div>
  210. <div style="display:flex;">
  211. <el-form-item style="flex-grow:1" prop="taskId" label="任务" :label-width="formLabelWidth1">
  212. <el-select v-model="form.taskId" placeholder="任务" style="width:54.5%;">
  213. <el-option v-for="item in taskIdStr" :key="item.id" :label="item.name" :value="item.id" />
  214. </el-select>
  215. </el-form-item>
  216. <el-form-item style="flex-grow:1" label="平台类型" prop="platformType" :label-width="formLabelWidth1">
  217. <el-select v-model="form.platformType" placeholder="平台类型" style="width:54.5%;" @change="clickChangeType(form.platformType)">
  218. <el-option v-for="item in platformTypeStr" :key="item.name" :label="item.name" :value="item.name" />
  219. </el-select>
  220. </el-form-item>
  221. </div>
  222. <div style="display:flex;">
  223. <el-form-item style="flex-grow:1" label="类型" prop="bugType" :label-width="formLabelWidth1">
  224. <el-select v-model="form.bugType" style="width:54.5%;" placeholder="类型">
  225. <el-option v-for="item in bugTypeStr" :key="item.name" :label="item.name" :value="item.name" />
  226. </el-select>
  227. </el-form-item>
  228. <el-form-item style="flex-grow:1" label="发现方式" prop="discoveryMethod" :label-width="formLabelWidth1">
  229. <el-select v-model="form.discoveryMethod" style="width:54.5%;" placeholder="发现方式">
  230. <el-option v-for="item in discoveryMethodStr" :key="item.name" :label="item.name" :value="item.name" />
  231. </el-select>
  232. </el-form-item>
  233. </div>
  234. <div style="display:flex;">
  235. <el-form-item style="flex-grow:1" label="级别" prop="priority" :label-width="formLabelWidth1">
  236. <el-select v-model="form.priority" style="width:54.5%;" placeholder="级别">
  237. <el-option v-for="item in bugLevelStr" :key="item.name" :label="item.name" :value="item.name" />
  238. </el-select>
  239. </el-form-item>
  240. <el-form-item style="flex-grow:1" label="问题原因" prop="reason" :label-width="formLabelWidth1">
  241. <el-select v-model="form.reason" style="width:54.5%;" placeholder="问题原因">
  242. <el-option v-for="item in reasonStr" :key="item.name" :label="item.name" :value="item.name" />
  243. </el-select>
  244. </el-form-item>
  245. </div>
  246. <div style="display:flex;">
  247. <el-form-item style="flex-grow:1" label="状态" prop="status" :label-width="formLabelWidth1">
  248. <el-select v-model="form.status" placeholder="状态" style="width:54.5%;" @change="buildShow(form.status)">
  249. <el-option v-for="item in bugStatusStr" :key="item.name" :label="item.name" :value="item.name" />
  250. </el-select>
  251. </el-form-item>
  252. <el-form-item style="flex-grow:1" label="所处阶段" prop="stage" :label-width="formLabelWidth1">
  253. <el-select v-model="form.stage" placeholder="所处阶段" style="width:54.5%;">
  254. <el-option v-for="item in stageStr" :key="item.name" :label="item.name" :value="item.name" />
  255. </el-select>
  256. </el-form-item>
  257. </div>
  258. <el-form-item label="bug描述" prop="bugDescribe" :label-width="formLabelWidth"><el-input v-model="form.bugDescribe" type="textarea" placeholder="bug描述" rows="2" style="width:77.2%;" /></el-form-item>
  259. </div>
  260. <div style="display:flex;">
  261. <el-form-item label="创建人" :label-width="formLabelWidth"><el-input v-model="form.creator" autocomplete="off" style="width:67%;" /></el-form-item>
  262. <el-form-item label="bug责任人" prop="assigner" :label-width="formLabelWidth"><el-input v-model="form.assigner" autocomplete="off" style="width:67%;" /></el-form-item>
  263. </div>
  264. <div style="flex:1">
  265. <el-form-item v-show="statusShow" label="问题原因和修复方法" :label-width="formLabelWidth"><el-input v-model="form.reasonsAndSolutionForTheProblem" type="textarea" placeholder="问题原因和修复方法" rows="4" style="width:77.2%;" /></el-form-item>
  266. </div>
  267. <div style="flex:1">
  268. <el-form-item label="bug处理人" prop="currentHandler" :label-width="formLabelWidth"><el-input v-model="form.currentHandler" autocomplete="off" style="width:67%;" /></el-form-item>
  269. <el-form-item label="app版本号" :label-width="formLabelWidth"><el-input v-model="form.appVersion" autocomplete="off" style="width:67%;" /></el-form-item>
  270. <el-form-item label="地图类型" :label-width="formLabelWidth"><el-input v-model="form.mapType" autocomplete="off" style="width:67%;" /></el-form-item>
  271. <el-form-item label="地图版本号" :label-width="formLabelWidth"><el-input v-model="form.mapVersion" autocomplete="off" style="width:67%;" /></el-form-item>
  272. <el-form-item label="SDK版本" :label-width="formLabelWidth"><el-input v-model="form.sdkVersion" autocomplete="off" style="width:67%;" /></el-form-item>
  273. <el-form-item v-show="repairShow" label="修复结果" :label-width="formLabelWidth">
  274. <el-select v-model="form.repairResult" placeholder="发现方法">
  275. <el-option v-for="item in repairResultStr" :key="item.name" :label="item.name" :value="item.name" />
  276. </el-select>
  277. </el-form-item>
  278. </div>
  279. <el-form-item label="附件" :label-width="formLabelWidth">
  280. <el-upload
  281. class="upload-demo"
  282. multiple
  283. capture
  284. accept="image/jpeg, image/png, image/gif, audio/mp4, video/mp4, audio/mpeg, application/vnd.ms-excel"
  285. :on-change="handleChange"
  286. :file-list="fileList"
  287. action="http://page-daily.kuaidadi.com/upload/img.node"
  288. >
  289. <!-- action="http://page-daily.kuaidadi.com/upload/img.node" 线下 -->
  290. <!-- action="http://star.xiaojukeji.com/upload/img.node" 线上 -->
  291. <!-- action="https://jsonplaceholder.typicode.com/posts/" 原始地址-->
  292. <el-button size="small" type="primary">点击上传</el-button>
  293. </el-upload>
  294. </el-form-item>
  295. {{ form.accessory }}
  296. <!-- <el-form-item label="逻辑删" :label-width="formLabelWidth">
  297. <el-select v-model="form.isDelete" placeholder="发现方法">
  298. <el-option v-for="item in isDeleteStr" :key="item.value" :label="item.name" :value="item.value" />
  299. </el-select>
  300. </el-form-item> -->
  301. <!-- <el-form-item label="reopen的次数" :label-width="formLabelWidth"> <el-input v-model="form.reopenTimes" autocomplete="off" /></el-form-item> -->
  302. <!-- <el-form-item label="业务线" prop="bizId" :label-width="formLabelWidth"><el-input v-model="form.bizId" autocomplete="off" /></el-form-item> -->
  303. <!-- <el-form-item label="模块" :label-width="formLabelWidth"><el-input v-model="form.moduleId" autocomplete="off" /></el-form-item> -->
  304. <!-- <el-form-item label="项目名" :label-width="formLabelWidth"><el-input v-model="form.projectName" autocomplete="off" /></el-form-item> -->
  305. <!-- <el-form-item label="项目ID" :label-width="formLabelWidth"><el-input v-model="form.projectId" autocomplete="off" /></el-form-item> -->
  306. <!-- <el-form-item label="测试计划ID" prop="planId" :label-width="formLabelWidth"><el-input v-model="form.planId" autocomplete="off" /></el-form-item> -->
  307. <!-- <el-form-item label="caseID" :label-width="formLabelWidth"><el-input v-model="form.caseId" autocomplete="off" /></el-form-item> -->
  308. <!-- <el-form-item label="bug创建人" :label-width="formLabelWidth"> <el-input v-model="form.creator" autocomplete="off" /></el-form-item> -->
  309. <!-- <el-form-item label="开始开发时间" :label-width="formLabelWidth"><el-input v-model="form.startDevTime" autocomplete="off" /></el-form-item> -->
  310. <!-- <el-form-item label="开始等待测试时间" :label-width="formLabelWidth"><el-input v-model="form.waitTestTime" autocomplete="off" /></el-form-item> -->
  311. <!-- <el-form-item label="创建时间" :label-width="formLabelWidth"><el-input v-model="form.gmtCreate" autocomplete="off" /></el-form-item> -->
  312. <!-- <el-form-item label="修改时间" :label-width="formLabelWidth"><el-input v-model="form.gmtModify" autocomplete="off" /></el-form-item> -->
  313. </el-form>
  314. <div slot="footer" class="dialog-footer">
  315. <el-button @click="dialogFormVisible = false">取 消</el-button>
  316. <el-button type="primary" @click="titName === '新建' ? createFormData(form) : queryFormData(form)">确 定</el-button>
  317. </div>
  318. </el-dialog>
  319. <el-dialog :visible.sync="dialogFormQuery" width="70%">
  320. <el-form :model="form" size="mini">
  321. <el-form-item :label-width="formLabelWidth" style="margin-bottom:-10px;"><span style="font-weight:bold;font-size:20px;margin-left:-60px;">主题 : </span>{{ form.bugName }}</el-form-item><hr>
  322. <div style="display:flex;">
  323. <div style="flex:1">
  324. <el-form-item label="任务 : " class="styline" :label-width="formLabelWidth1">{{ form.projectName }}</el-form-item>
  325. <el-form-item label="级别 : " :label-width="formLabelWidth1">{{ form.priority }}</el-form-item>
  326. <el-form-item label="reopen的次数 : " :label-width="formLabelWidth1">{{ form.reopenTimes }}</el-form-item>
  327. <el-form-item label="bug状态 : " :label-width="formLabelWidth1">{{ form.status }}</el-form-item>
  328. <el-form-item label="bug类型 : " :label-width="formLabelWidth1">{{ form.bugType }}</el-form-item>
  329. <el-form-item label="bug描述 : " :label-width="formLabelWidth1">{{ form.bugDescribe }}</el-form-item>
  330. <el-form-item v-show="statusShow" label="问题原因和修复方法" :label-width="formLabelWidth">{{ form.reasonsAndSolutionForTheProblem }}</el-form-item>
  331. <el-form-item label="问题原因 : " :label-width="formLabelWidth1">{{ form.reason }}</el-form-item>
  332. <el-form-item label="平台类型 : " :label-width="formLabelWidth1">{{ form.platformType }}</el-form-item>
  333. <el-form-item label="业务模块 : " :label-width="formLabelWidth1">{{ form.businessType }}</el-form-item>
  334. <el-form-item label="所处阶段 : " :label-width="formLabelWidth1">{{ form.stage }}</el-form-item>
  335. <el-form-item label="发现方法 : " :label-width="formLabelWidth1">{{ form.discoveryMethod }}</el-form-item>
  336. <el-form-item v-show="repairShow" label="修复结果 : " :label-width="formLabelWidth1">{{ form.repairResult }}</el-form-item>
  337. <el-form-item label="os类型 : " :label-width="formLabelWidth1">{{ form.osType }}</el-form-item>
  338. <el-form-item label="机型 : " :label-width="formLabelWidth1">{{ form.model }}</el-form-item>
  339. <el-form-item label="网络类型 : " :label-width="formLabelWidth1">{{ form.networkType }}</el-form-item>
  340. <el-form-item label="SDK版本 : " :label-width="formLabelWidth1">{{ form.sdkVersion }}</el-form-item>
  341. <el-form-item label="app版本号 : " :label-width="formLabelWidth1">{{ form.appVersion }}</el-form-item>
  342. <el-form-item label="地图类型 : " :label-width="formLabelWidth1">{{ form.mapType }}</el-form-item>
  343. <el-form-item label="地图版本号 : " :label-width="formLabelWidth1">{{ form.mapVersion }}</el-form-item>
  344. <el-form-item label="附件 : " :label-width="formLabelWidth1">{{ form.accessory }}</el-form-item>
  345. </div>
  346. <div style="flex:1; margin-left:30px;">
  347. <el-form-item label="业务线 : " :label-width="formLabelWidth1">{{ form.bizId }}</el-form-item>
  348. <el-form-item label="bug责任人 : " :label-width="formLabelWidth1">{{ form.assigner }}</el-form-item>
  349. <el-form-item label="bug创建人 : " :label-width="formLabelWidth1">{{ form.creator }}</el-form-item>
  350. <el-form-item label="bug处理人 : " :label-width="formLabelWidth1">{{ form.currentHandler }}</el-form-item>
  351. <el-form-item label="开始开发时间 : " :label-width="formLabelWidth1">{{ form.startDevTime }}</el-form-item>
  352. <el-form-item label="开始等待测试时间 : " :label-width="formLabelWidth1">{{ form.waitTestTime }}</el-form-item>
  353. <el-form-item label="创建时间 : " :label-width="formLabelWidth1">{{ form.gmtCreate }}</el-form-item>
  354. </div>
  355. </div>
  356. <!-- <el-form-item label="caseID" :label-width="formLabelWidth">{{ form.caseId }}</el-form-item> -->
  357. <!-- <el-form-item label="项目名" :label-width="formLabelWidth">{{ form.projectName }}</el-form-item> -->
  358. <!-- <el-form-item label="项目ID" :label-width="formLabelWidth">{{ form.projectId }}</el-form-item> -->
  359. <!-- <el-form-item label="测试计划ID" :label-width="formLabelWidth">{{ form.planId }}</el-form-item> -->
  360. <!-- <el-form-item label="逻辑删" :label-width="formLabelWidth">{{ form.isDelete }}</el-form-item> -->
  361. <!-- <el-form-item label="业务线" :label-width="formLabelWidth">{{ form.bizId }}</el-form-item> -->
  362. <!-- <el-form-item label="模块ID" :label-width="formLabelWidth">{{ form.moduleId }}</el-form-item> -->
  363. <!-- <el-form-item label="修改时间" :label-width="formLabelWidth">{{ form.gmtModify }}</el-form-item> -->
  364. </el-form>
  365. <div slot="footer" class="dialog-footer">
  366. <el-button type="primary" @click="dialogFormQuery = false">关 闭</el-button>
  367. </div>
  368. </el-dialog>
  369. </div>
  370. </div></template>
  371. <script>
  372. import { bugList, bugGet, bugDelete, bugUpdate, bugCreate, bugCopy, taskListCreate, bugGetEnum } from '@/api/defectManage'
  373. export default {
  374. name: 'DefectManage',
  375. data() {
  376. return {
  377. bugTypeStr: [],
  378. bugStatusStr: [],
  379. bizOptions: [{ name: '万象', value: 101 }, { name: '企业级', value: 100 }, { name: '滴滴代驾', value: 261 }, { name: 'prado', value: 330 }, { name: 'carbo', value: 331 }, { name: '海马', value: 309 }],
  380. bugLevelStr: [{ name: 'p0', value: 0 }, { name: 'p1', value: 1 }, { name: 'p2', value: 2 }, { name: 'p3', value: 3 }],
  381. reasonStr: [],
  382. platformTypeStr: [],
  383. stageStr: [],
  384. discoveryMethodStr: [],
  385. businessTypeStr: [],
  386. bugStatusPriority: [],
  387. repairResultStr: [],
  388. statistics: [],
  389. isDeleteStr: [{ name: '保留', value: 0 }, { name: '删除', value: 1 }],
  390. serviceDataRules: {
  391. bizId: [{ required: true, message: '业务线不能为空', trigger: 'change' }],
  392. // bugName: [{ required: true, message: '主题不能为空', trigger: 'change' }],
  393. taskId: [{ required: true, message: '任务不能为空', trigger: 'change' }],
  394. // projectId: [{ required: true, message: '项目ID不能为空', trigger: 'change' }],
  395. bugType: [{ required: true, message: 'bug类型不能为空', trigger: 'change' }],
  396. discoveryMethod: [{ required: true, message: '发现方式不能为空', trigger: 'change' }],
  397. reason: [{ required: true, message: '问题原因不能为空', trigger: 'change' }],
  398. priority: [{ required: true, message: '级别不能为空', trigger: 'change' }],
  399. status: [{ required: true, message: '状态不能为空', trigger: 'change' }],
  400. platformType: [{ required: true, message: '平台类型不能为空', trigger: 'change' }],
  401. stage: [{ required: true, message: '所处阶段不能为空', trigger: 'change' }],
  402. assigner: [{ required: true, message: 'bug责任人不能为空', trigger: 'change' }],
  403. currentHandler: [{ required: true, message: 'bug处理人不能为空', trigger: 'change' }],
  404. bugDescribe: [{ required: true, message: 'bug描述不能为空', trigger: 'change' }],
  405. businessType: [{ required: true, message: '业务模块不能为空', trigger: 'change' }]
  406. },
  407. userInformation: localStorage.getItem('username'),
  408. userNames: localStorage.getItem('realname'),
  409. bizJson: localStorage.getItem('key'),
  410. pageSize: 20,
  411. curIndex: 1,
  412. total: 0,
  413. show2: '',
  414. form: {
  415. id: ''
  416. },
  417. tableData: [],
  418. queryCode: {
  419. stage: 6,
  420. online: true
  421. },
  422. statusShow: false,
  423. repairShow: false,
  424. timeShow: false,
  425. dialogFormVisible: false,
  426. dialogFormQuery: false,
  427. formLabelWidth: '11%',
  428. formLabelWidth1: '22%',
  429. serviceTypeEnumList: [],
  430. clientTypeEnumList: [],
  431. bizIdEnumList: [],
  432. objData: '',
  433. userData: '',
  434. titName: '',
  435. taskIdStr: '',
  436. timeInterval: [],
  437. fileList: [],
  438. fileDbList: []
  439. }
  440. },
  441. created() {
  442. this.getList()
  443. this.bugListSelect()
  444. },
  445. mounted() {
  446. document.getElementsByClassName('app-main')[0].style.cssText = 'overflow:auto'
  447. this.getQueryData()
  448. },
  449. methods: {
  450. getList() {
  451. this.bizJson = localStorage.getItem('key')
  452. this.indexPage = {
  453. online: true,
  454. stage: 6,
  455. bizId: this.bizJson,
  456. pageSize: this.pageSize,
  457. curIndex: this.curIndex
  458. }
  459. bugList(this.indexPage).then(res => {
  460. this.statistics = res.query
  461. this.tableData = res.data
  462. this.total = res.total
  463. })
  464. },
  465. bugListSelect() {
  466. bugGetEnum().then(res => {
  467. this.bugStatusStr = res.data.bugEnumList
  468. this.bugStatusPriority = res.data.priorityEnumList
  469. this.stageStr = res.data.bugStageEnumList
  470. this.reasonStr = res.data.reasonEnumList
  471. this.platformTypeStr = res.data.platformTypeEnumList
  472. this.bugTypeStr = res.data.bugTypeEnumList
  473. this.bugLevelStr = res.data.priorityEnumList
  474. this.discoveryMethodStr = res.data.discoveryMethodEnumList
  475. this.repairResultStr = res.data.repairResultEnumList
  476. this.clientTypeEnumList = res.data.clientTypeEnumList
  477. this.serviceTypeEnumList = res.data.serviceTypeEnumList
  478. this.bizIdEnumList = res.data.bizIdEnumList
  479. })
  480. },
  481. clickChangeType(e) {
  482. // console.log(this.form.businessType)
  483. // this.form.businessType = ''
  484. if (e === '服务端') {
  485. this.businessTypeStr = this.serviceTypeEnumList
  486. } else {
  487. this.businessTypeStr = this.clientTypeEnumList
  488. }
  489. },
  490. dataQuery(e) {
  491. this.bizJson = localStorage.getItem('key')
  492. this.indexPage = e
  493. this.curIndex = 1
  494. this.indexPage.bizId = this.bizJson
  495. this.indexPage.pageSize = this.pageSize
  496. this.indexPage.curIndex = this.curIndex
  497. if (this.timeShow) {
  498. this.indexPage.gmtCreateBegin = this.timeInterval[0]
  499. this.indexPage.gmtCreateEnd = this.timeInterval[1]
  500. } else {
  501. this.indexPage.gmtCreateBegin = ''
  502. this.indexPage.gmtCreateEnd = ''
  503. }
  504. bugList(this.indexPage).then(res => {
  505. this.tableData = res.data
  506. this.total = res.total
  507. this.statistics = res.query
  508. })
  509. },
  510. dataQueryInSearch(e) {
  511. this.bizJson = localStorage.getItem('key')
  512. this.indexPage = e
  513. this.indexPage.bizId = this.bizJson
  514. this.indexPage.pageSize = this.pageSize
  515. this.indexPage.curIndex = this.curIndex
  516. if (this.timeShow) {
  517. this.indexPage.gmtCreateBegin = this.timeInterval[0]
  518. this.indexPage.gmtCreateEnd = this.timeInterval[1]
  519. } else {
  520. this.indexPage.gmtCreateBegin = ''
  521. this.indexPage.gmtCreateEnd = ''
  522. }
  523. bugList(this.indexPage).then(res => {
  524. this.tableData = res.data
  525. this.total = res.total
  526. })
  527. },
  528. // // 删除报告
  529. delePresentation(e) {
  530. this.$confirm('是否确认删除', '确认信息', {
  531. distinguishCancelAndClose: true,
  532. confirmButtonText: '确定',
  533. cancelButtonText: '取消'
  534. })
  535. .then(() => {
  536. this.userData = { id: '', ename: this.userInformation, name: this.userNames }
  537. bugDelete(this.userData, e).then(res => {
  538. this.getList()
  539. })
  540. this.$message({ type: 'success', message: '已删除' })
  541. })
  542. .catch(action => {
  543. this.$message({ type: 'success', message: '已取消' })
  544. })
  545. },
  546. copyArrange(e) {
  547. this.userData = { id: e, ename: this.userInformation, name: this.userNames }
  548. bugCopy(this.userData, e).then(res => {
  549. this.getList()
  550. this.successFun()
  551. })
  552. },
  553. queryPresentation(ele) {
  554. this.titName = '编辑'
  555. this.form = ele
  556. for (var a of this.bizOptions) {
  557. if (ele.bizId === a.value) {
  558. this.bizId = a.name
  559. }
  560. }
  561. // this.bizId = ele.bizId
  562. this.form.taskId = ele.taskId
  563. this.buildShow(ele)
  564. this.$router.push({ name: '更新线上问题', params: { formData: this.form }, query: { id: this.form.id }})
  565. // this.dialogFormVisible = true
  566. },
  567. buildShow(ele) {
  568. if (ele.status === '待回归' || ele === 2) {
  569. this.statusShow = true
  570. }
  571. if (ele.repairResult === '已修复' || ele === 3) {
  572. this.repairShow = true
  573. }
  574. },
  575. queryFormData(form) {
  576. this.userData = { id: '', ename: this.userInformation, name: this.userNames }
  577. this.objData = { bugBaseInfo: this.form, user: this.userData }
  578. bugUpdate(this.objData).then(res => {
  579. res.code === 200 ? this.successFun() : this.errorFun()
  580. this.dialogFormVisible = false
  581. this.getList()
  582. })
  583. },
  584. getQueryData() {
  585. this.$route.query.code === 4 ? this.queryCode.taskId = this.$route.query.id : ''
  586. this.bizJson = localStorage.getItem('key')
  587. taskListCreate({ bizId: this.bizJson }).then(res => {
  588. this.taskIdStr = res.data
  589. })
  590. },
  591. handleSizeChange(size) {
  592. this.curIndex = 1
  593. this.pageSize = size
  594. this.dataQueryInSearch(this.queryCode)
  595. },
  596. handleCurrentChange(curIndex) {
  597. this.curIndex = curIndex
  598. this.dataQueryInSearch(this.queryCode)
  599. },
  600. createdCode() {
  601. // this.titName = '新建'
  602. // this.dialogFormVisible = true
  603. this.form = {}
  604. // this.$route.query.code === 4 ? this.form.taskId = this.$route.query.id : ''
  605. // if (this.$refs['form'] !== undefined) {
  606. // this.$refs['form'].resetFields()
  607. // }
  608. this.$router.push({ name: '新建线上问题' })
  609. },
  610. createFormData(form) {
  611. this.$refs['form'].validate((valid) => {
  612. if (valid) {
  613. // form.bizId = this.bizJson
  614. this.userData = { id: '', ename: this.userInformation, name: this.userNames }
  615. this.objData = { bugBaseInfo: form, user: this.userData }
  616. bugCreate(this.objData).then(res => {
  617. this.dialogFormVisible = false
  618. this.getList()
  619. res.code === 200 ? this.successFun() : this.errorFun()
  620. })
  621. }
  622. })
  623. },
  624. toReportView(e) {
  625. // this.dialogFormQuery = true
  626. // this.buildShow(e)
  627. bugGet(e).then(res => {
  628. this.form = res.data
  629. for (var a of this.bizIdEnumList) {
  630. res.data.bizId === a.code ? this.form.bizId = a.name : ''
  631. }
  632. this.$router.push({ name: '查看线上问题', query: { id: this.form.id }})
  633. })
  634. },
  635. handleChange(file, fileList) {
  636. this.fileDbList = []
  637. this.fileList = fileList.slice(-3)
  638. for (var a of this.fileList) {
  639. this.fileDbList.push({ name: a.name, url: 'http' + a.response.url })
  640. }
  641. var arr = []
  642. for (var el of this.fileDbList) {
  643. arr.push({ 'name': el.name, 'url': el.response.url })
  644. }
  645. },
  646. successFun() {
  647. this.$notify({ title: 'Success', message: 'Created Successfully', type: 'success', duration: 2000 })
  648. },
  649. errorFun() {
  650. this.$notify({ title: 'Failed', message: 'Created Failed', type: 'error', duration: 2000 })
  651. }
  652. }
  653. }
  654. </script>
  655. <style lang="stylus" scoped>
  656. .set-background
  657. background-color #F2F3F6
  658. display flex
  659. justify-content center
  660. min-width 900px
  661. .block
  662. background-color rgba(255,255,255,1)
  663. box-shadow 0px 0px 11px 0px rgba(238,240,245,1)
  664. border-radius 7px
  665. width 96%
  666. margin 20px 0
  667. padding 20px
  668. min-height calc(100vh - 100px)
  669. .block >>> .el-form
  670. display flex
  671. justify-content space-between
  672. margin 10px 0px 15px 0px
  673. .block >>> .el-form-item__content
  674. margin-left 0 !important
  675. .block >>> th
  676. background-color #F0F2F4 !important
  677. .block >>> .el-range-separator
  678. padding 0
  679. .set-between
  680. display flex
  681. .set-between >>> .el-button
  682. height 36px
  683. .set-between >>> .el-form-item
  684. display flex
  685. margin-right -35px
  686. .set-locate
  687. margin-top 25px
  688. .titleDescription
  689. font-size 12px
  690. color rgba(244,121,121,1)
  691. margin 30px 0px
  692. display inline-block
  693. </style>