updateUse.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. <template>
  2. <div id="window-judge" style="background:#F2F3F6;min-height:95vh;">
  3. <el-container>
  4. <el-header style="background:#ffffff;height:auto; width:94%;margin:3%; font-size:14px;border-radius:8px;">
  5. <el-form ref="caseData" :model="caseData" label-width="90pt" style="margin:1%;" :rules="createFormData">
  6. <el-row>
  7. <el-col :span="20">
  8. <el-form-item label="前置条件" label-width="80pt" prop="caseCondition">
  9. <el-input v-model="caseData.caseCondition" placeholder="请输入内容" style="margin-left:1.3%;" />
  10. </el-form-item>
  11. </el-col>
  12. </el-row>
  13. <el-row>
  14. <el-col :span="20">
  15. <div style="white-space:nowrap; display:flex;">
  16. <el-form-item label="用例优先级" prop="casePriority" style="flex:1">
  17. <el-select v-model="caseData.casePriority" clearable placeholder="用例优先级" style="width: 100%">
  18. <el-option v-for="item in priorityStrings" :key="item.value" :label="item.name" :value="item.value" />
  19. </el-select>
  20. </el-form-item>
  21. <el-form-item label="API" prop="api" style="flex:1"><el-input v-model="caseData.api" clearable autocomplete="off" style="width: 100%; margin-left:3%;" /></el-form-item>
  22. </div>
  23. </el-col>
  24. </el-row>
  25. </el-form>
  26. </el-header>
  27. <el-main style="background:#ffffff;height:auto; width:94%;margin: 0 3% 3% 3%; font-size:14px;border-radius:8px;">
  28. <!-- 编辑 -->
  29. <el-form label-width="80px" :model="caseData" style="box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04); margin-bottom:2%;">
  30. <el-row>
  31. <el-col :span="20" style="margin:2% 0 0 0; white-space:nowrap;">
  32. <el-form-item label="执行步骤">
  33. <el-input v-model="caseData.description" type="textarea" :rows="4" placeholder="请输入内容" />
  34. </el-form-item>
  35. </el-col>
  36. </el-row>
  37. <el-row>
  38. <el-col :span="22">
  39. <el-form-item label="预期结果">
  40. <el-input v-model="caseData.expectedResult" placeholder="请输入内容" />
  41. </el-form-item>
  42. </el-col>
  43. </el-row>
  44. <div style="display:flex;">
  45. <el-row style="flex:1;">
  46. <el-col :span="22">
  47. <el-form-item label="附件">
  48. <el-upload class="upload-demo" drag action="http://star.xiaojukeji.com/upload/img.node" multiple :on-success="(response, file, fileList)=>{return constractSuccUpload(response, file, fileList )}" :on-progress="DisableButton">
  49. <i class="el-icon-plus avatar-uploader-icon"> 添加图片 </i>
  50. </el-upload>
  51. </el-form-item>
  52. </el-col>
  53. </el-row>
  54. <el-row style="flex:1;">
  55. <el-col :span="20">
  56. <el-form-item label="备注">
  57. <el-input v-model="caseData.remark" type="textarea" :rows="8" placeholder="请输入内容" />
  58. </el-form-item>
  59. </el-col>
  60. </el-row>
  61. </div>
  62. <div v-show="btn_show" align="center" class="cla">
  63. <el-table v-show="btn_show" :data="uptataKey" fit style="width: 90%;">
  64. <el-table-column label="" min-width="150">
  65. <template slot-scope="scope">{{ scope.row.name }}</template>
  66. </el-table-column>
  67. <el-table-column label="" min-width="300">
  68. <template slot-scope="scope"><a :href="scope.row.url" style="color:blue;">{{ scope.row.url }}</a></template>
  69. </el-table-column>
  70. <el-table-column fixed="right" label="" width="50" align="center">
  71. <template slot-scope="scope">
  72. <el-button class="deleteSty" @click="deleteURL(scope.row)"> x </el-button>
  73. </template>
  74. </el-table-column>
  75. </el-table>
  76. </div>
  77. </el-form>
  78. <el-row>
  79. <el-col :span="22" style="text-align:right; ">
  80. <el-button :disabled="dis" type="primary" @click="caseCreateCase(caseData)">保 存</el-button>
  81. <el-button style="margin:9% 0 0 4%;" @click="$router.go(-1)">取 消</el-button>
  82. </el-col>
  83. </el-row>
  84. </el-main>
  85. </el-container>
  86. </div>
  87. </template>
  88. <script>
  89. import { updateCaseData, queryCasesData } from '@/api/caseProject.js'
  90. export default {
  91. data() {
  92. return {
  93. userNames: localStorage.getItem('username'),
  94. bizJson: localStorage.getItem('key'),
  95. startId: '',
  96. caseData: {},
  97. btn_show: false,
  98. dis: false,
  99. id: '',
  100. arry: [],
  101. arr: [],
  102. uptataKey: [],
  103. createFormData: {
  104. caseCondition: [{ required: true, message: '前置条件不能为空', trigger: 'change' }],
  105. api: [{ required: true, message: '对应接口不能为空', trigger: 'change' }],
  106. casePriority: [{ required: true, message: '用例优先级不能为空', trigger: 'change' }]
  107. },
  108. priorityStrings: [{ name: 'p0', value: 0 }, { name: 'p1', value: 1 }, { name: 'p2', value: 2 }, { name: 'p3', value: 3 }]
  109. }
  110. },
  111. created() {
  112. this.initCode()
  113. },
  114. methods: {
  115. // 初始化
  116. initCode() {
  117. if (this.$route.query.id) {
  118. this.url = window.location.href // 获取url中"?"符后的字串
  119. this.id = this.url.split('?id=')
  120. this.startId = this.id[1]
  121. queryCasesData({ caseFolderId: this.id[1] }).then(res => {
  122. for (var el of res.data.list) {
  123. el.caseFolderId === Number(this.id[1]) ? this.caseData = el : ''
  124. if (this.caseData.accessory !== '') {
  125. this.btn_show = true
  126. var obj = JSON.parse(this.caseData.accessory.split('{}')[0])
  127. for (var a of obj) {
  128. this.uptataKey.push(a)
  129. }
  130. break
  131. }
  132. }
  133. })
  134. }
  135. },
  136. DisableButton() {
  137. this.dis = true
  138. },
  139. // 图片上传成功的回调(编辑)
  140. constractSuccUpload(response, file, fileList) {
  141. this.dis = false
  142. const fileUrl = { name: file.name, url: 'http:' + file.response.url }
  143. this.uptataKey.push(fileUrl)
  144. },
  145. deleteURL(vel) {
  146. for (var i = 0; i < this.uptataKey.length; i++) {
  147. if (this.uptataKey[i].name === vel.name) {
  148. this.uptataKey.splice(i, 1)
  149. }
  150. }
  151. },
  152. // 新建Data
  153. caseCreateCase(vel) {
  154. this.caseData = vel
  155. this.caseData.accessory = JSON.stringify(this.uptataKey)
  156. updateCaseData(this.caseData).then(res => {
  157. this.$message({ type: 'success', message: res.msg })
  158. this.$router.go(-1)
  159. })
  160. }
  161. }
  162. }
  163. </script>
  164. <style>
  165. .cla .el-table td {
  166. padding:0px;
  167. }
  168. .deleteSty {
  169. cursor: pointer;
  170. border: none;
  171. }
  172. .bgColorSz {
  173. width: 100%;
  174. height: 96vh;
  175. background: #F2F3F6;
  176. font-size: 0.9rem;
  177. display: flex;
  178. justify-content: center;
  179. align-items: center;
  180. }
  181. .avatar-uploader-icon {
  182. font-size: 20px;
  183. color: #8c939d;
  184. width: 178px;
  185. height: 178px;
  186. line-height: 178px;
  187. text-align: center;
  188. }
  189. </style>