createUse.vue 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  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:4px;">
  5. <el-form ref="caseData" label-position="left" :model="caseData" label-width="80pt" style="margin:1%;" :rules="createFormData">
  6. <el-row>
  7. <el-col :span="21">
  8. <el-form-item label="用例名称" prop="title"><el-input v-model="caseData.title" placeholder="请填写【此处可能20字以上】…" /></el-form-item>
  9. </el-col>
  10. </el-row>
  11. <el-row>
  12. <el-col :span="21">
  13. <el-form-item label="前置条件"><el-input v-model="caseData.caseCondition" placeholder="请输入" /></el-form-item>
  14. </el-col>
  15. </el-row>
  16. <el-row>
  17. <el-col :span="21" style="white-space:nowrap; display:flex;">
  18. <el-form-item label="所属项目" style="flex:1"><el-input v-model="caseData.projectName" clearable placeholder="请输入" /></el-form-item>
  19. <el-form-item label="所属需求" style="flex:1; margin-left: 2%;"><el-input v-model="caseData.taskName" clearable placeholder="请输入" /></el-form-item>
  20. </el-col>
  21. </el-row>
  22. <el-row>
  23. <el-col :span="21" style="white-space:nowrap; display:flex;">
  24. <el-form-item label="用例优先级" style="flex:1">
  25. <el-select v-model="caseData.casePriority" clearable placeholder="请选择" style="width: 100%">
  26. <el-option v-for="item in priorityStrings" :key="item.value" :label="item.name" :value="item.value" />
  27. </el-select>
  28. </el-form-item>
  29. <el-form-item label="API" style="flex:1; margin-left: 2%;"><el-input v-model="caseData.api" clearable placeholder="请输入" /></el-form-item>
  30. </el-col>
  31. </el-row>
  32. <el-row>
  33. <el-col :span="21" style="display:flex;" class="upload">
  34. <el-form-item label="附件" style="flex:1">
  35. <el-upload v-model="caseData.accessory" class="upload-demo" drag action="https://star.xiaojukeji.com/upload/img.node" multiple :on-success="handleAvatarSuccess" :on-progress="DisableButton">
  36. <i class="el-icon-plus avatar-uploader-icon"> 添加图片 </i>
  37. </el-upload>
  38. </el-form-item>
  39. <el-form-item label="备注" style="flex:1; margin-left: 2%;">
  40. <el-input v-model="caseData.remark" type="textarea" :rows="8" placeholder="请填写..." />
  41. </el-form-item>
  42. </el-col>
  43. </el-row>
  44. </el-form>
  45. <div v-show="btn_show" align="center" class="cla">
  46. <el-table v-show="btn_show" :data="uptataKey" fit style="width: 90%;">
  47. <el-table-column label="" min-width="150">
  48. <template slot-scope="scope">{{ scope.row.name }}</template>
  49. </el-table-column>
  50. <el-table-column label="" min-width="300">
  51. <template slot-scope="scope"><a :href="scope.row.url" style="color:blue;">{{ scope.row.url }}</a></template>
  52. </el-table-column>
  53. <el-table-column fixed="right" label="" width="50" align="center">
  54. <template slot-scope="scope">
  55. <el-button class="deleteSty" @click="deleteURL(scope.row)"> x </el-button>
  56. </template>
  57. </el-table-column>
  58. </el-table>
  59. </div>
  60. </el-header>
  61. <el-main style="background:#ffffff;height:auto; width:94%;margin: 0 3% 3% 3%; font-size:14px;border-radius:4px;">
  62. <!-- 新增 -->
  63. <el-form v-for="(item, index) in data" :key="index" label-width="100px" :model="item">
  64. <div style="display:flex; white-space:nowrap;">
  65. <el-form-item label="执行步骤" style="flex:1"><el-input v-model="item.description" placeholder="请填写【此处可能20字以上】…" /></el-form-item>
  66. <el-form-item label="预期结果" style="flex:1"><el-input v-model="item.expectedResult" placeholder="请填写" /></el-form-item>
  67. <div style="flex:0.1; margin:0.26% 3%;">
  68. <el-button size="mini" type="primary" icon="el-icon-plus" @click="add(index)" />
  69. <el-button size="mini" icon="el-icon-minus" @click="deleteData(index)" />
  70. </div>
  71. </div>
  72. </el-form>
  73. <el-row>
  74. <el-col :span="22" style="text-align:right; ">
  75. <el-button :disabled="dis" type="primary" @click=" title_Name === '新增' ? caseCreateCase(caseData) : caseQueryCase(caseData)">保 存</el-button>
  76. <el-button style="margin:9% 0 0 4%;" @click="$router.go(-1)">取 消</el-button>
  77. </el-col>
  78. </el-row>
  79. </el-main>
  80. </el-container>
  81. </div>
  82. </template>
  83. <script>
  84. import { createCaseData, queryCasesData, updateCaseData } from '@/api/caseProject.js'
  85. export default {
  86. name: 'CreatedUse',
  87. data() {
  88. return {
  89. data: [{ description: '', expectedResult: '' }],
  90. userNames: localStorage.getItem('username'),
  91. bizJson: localStorage.getItem('bizId'),
  92. startId: '',
  93. caseData: {},
  94. dis: false,
  95. btn_show: false,
  96. arr: [],
  97. uptataKey: [],
  98. title_Name: '',
  99. createFormData: { title: [{ required: true, message: '用例名称不能为空', trigger: 'change' }] },
  100. priorityStrings: [{ name: 'p0', value: 0 }, { name: 'p1', value: 1 }, { name: 'p2', value: 2 }, { name: 'p3', value: 3 }]
  101. }
  102. },
  103. created() {
  104. this.initCode()
  105. },
  106. methods: {
  107. // 初始化
  108. initCode() {
  109. if (this.$route.query.data) {
  110. this.title_Name = '新增'
  111. this.$set(this.caseData, 'casePriority', 3)
  112. this.startId = this.$route.query.data
  113. if (this.$refs['caseData'] !== undefined) {
  114. this.$refs['caseData'].resetFields()
  115. }
  116. }
  117. if (this.$route.query.id) {
  118. this.title_Name = '编辑'
  119. queryCasesData({ caseFolderId: this.$route.query.caseFolderId }).then(res => {
  120. for (var el of res.data.list) {
  121. if (el.id === Number(this.$route.query.id)) {
  122. this.caseData = el
  123. if (this.caseData.description !== '') {
  124. var obj_description = JSON.parse(this.caseData.description.split('{}'))
  125. this.data = obj_description
  126. }
  127. if (this.caseData.accessory !== '') {
  128. this.btn_show = true
  129. var obj = JSON.parse(this.caseData.accessory.split('{}'))
  130. for (var a of obj) {
  131. this.uptataKey.push(a)
  132. }
  133. break
  134. }
  135. }
  136. }
  137. })
  138. }
  139. },
  140. // 图片上传成功的回调
  141. handleAvatarSuccess(response, file, fileList) {
  142. this.arr.push({ name: file.name, url: 'http:' + file.response.url })
  143. this.uptataKey.push({ name: file.name, url: 'http:' + file.response.url })
  144. this.dis = false
  145. },
  146. // 上传成功可以提交
  147. DisableButton() {
  148. this.dis = true
  149. },
  150. // 添加事件
  151. add(e) {
  152. this.data.splice(e + 1, 0, { description: '', expectedResult: '' })
  153. },
  154. // 删除事件
  155. deleteData(e) {
  156. this.data.splice(e, 1)
  157. },
  158. // 删除附件(编辑)
  159. deleteURL(vel) {
  160. var arr = this.uptataKey.filter(item => {
  161. return vel.url !== item.url
  162. })
  163. this.uptataKey = arr
  164. },
  165. // 编辑_数据
  166. caseQueryCase(vel) {
  167. this.caseData = vel
  168. this.caseData.description = JSON.stringify(this.data)
  169. this.caseData.accessory = JSON.stringify(this.uptataKey)
  170. updateCaseData(this.caseData).then(res => {
  171. this.$message({ type: 'success', message: res.msg, duration: 1000 })
  172. this.$router.go('-1')
  173. })
  174. },
  175. // 新建Data
  176. caseCreateCase(vel) {
  177. this.$refs['caseData'].validate((valid) => {
  178. if (valid) {
  179. this.caseData = vel
  180. this.caseData.accessory = JSON.stringify(this.arr)
  181. this.caseData.description = JSON.stringify(this.data)
  182. this.caseData.creator = this.userNames
  183. this.caseData.modifier = this.userNames
  184. this.caseData.caseFolderId = this.startId
  185. this.caseData.bizId = this.bizJson
  186. createCaseData(this.caseData).then(res => {
  187. if (res.code === 200) {
  188. this.$message({ type: 'success', message: res.msg, duration: 1000 })
  189. this.$router.go('-1')
  190. } else {
  191. this.$message({ type: 'error', message: res.msg, duration: 1000 })
  192. }
  193. })
  194. }
  195. })
  196. }
  197. }
  198. }
  199. </script>
  200. <style>
  201. .bgColorSz {
  202. width: 100%;
  203. height: 96vh;
  204. background: #F2F3F6;
  205. font-size: 0.9rem;
  206. display: flex;
  207. justify-content: center;
  208. align-items: center;
  209. }
  210. .cla .el-table td {
  211. padding:0px;
  212. }
  213. .deleteSty {
  214. cursor: pointer;
  215. border: none;
  216. }
  217. .upload .avatar-uploader-icon {
  218. font-size: 14px;
  219. color: #8c939d;
  220. line-height: 178px;
  221. text-align: center;
  222. }
  223. </style>