createUse.vue 9.3 KB

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