model.js 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. import {
  2. fakeSubmitForm,
  3. updateReportInfo,
  4. getExamInfo,
  5. createReportCommon,
  6. createTestCase,
  7. getTestCaseList,
  8. getCaseBugList,
  9. getBugInfo,
  10. updateTestCaseList,
  11. getReportInfo,
  12. createCaseBug,
  13. getRecommendList,
  14. getPathInfo,
  15. getRecommendPath,
  16. goodReport,
  17. badReport,
  18. cancelGoodReport,
  19. cancelBadReport,
  20. recordAction,
  21. uploadImage,
  22. getIdByToken,
  23. forkReport
  24. } from './service';
  25. const Model = {
  26. namespace: 'editReport',
  27. state: {
  28. current: 'info',
  29. osType: [],
  30. step: {
  31. payAccount: 'ant-design@alipay.com',
  32. receiverAccount: 'test@example.com',
  33. receiverName: 'Alex',
  34. amount: '500',
  35. },
  36. taskName: '',
  37. collaborative_type:'0',
  38. reportCommonInfo: {},
  39. testCaseList: [],
  40. caseBugList: [],
  41. categories: [],
  42. pathInfo: [],
  43. recommendPath: [],
  44. bugRecommendList: [],
  45. commonId:{
  46. // result:"success",
  47. // roleId:1,
  48. // caseId:"1718",
  49. // examId:"1718",
  50. // beginTime:"1621945823000",
  51. // endTime:"1624291200000",
  52. // userId:"99222",
  53. // case_take_id:"1718_1718",
  54. },
  55. },
  56. effects: {
  57. * submitStepForm({ payload }, { call, put }) {
  58. yield call(fakeSubmitForm, payload);
  59. yield put({
  60. type: 'saveStepFormData',
  61. payload,
  62. });
  63. yield put({
  64. type: 'saveCurrentStep',
  65. payload: 'detail',
  66. });
  67. },
  68. * getOsType({ payload }, { call, put }) {
  69. const { examId } = payload;
  70. const res = yield call(getExamInfo, examId);
  71. let osType = res?.result?.paper_type;
  72. osType = JSON.parse(osType)['subTitles'][2]?.value;
  73. yield put({
  74. type: 'saveOsType',
  75. payload: osType,
  76. });
  77. },
  78. //todo:根据id获取token
  79. * getIdByToken({ payload }, { call, put }) {
  80. const { token } = payload;
  81. let res = yield call(getIdByToken, token)
  82. res['case_take_id'] = res['caseId'] + '_' + res['examId'];
  83. yield put({
  84. type: 'saveCommonId',
  85. payload: res,
  86. });
  87. return res;
  88. },
  89. //todo:更新报告基础信息
  90. * updateReportCommonDetail({ payload }, { call, put }) {
  91. let { formData } = payload;
  92. yield call(updateReportInfo, formData);
  93. let res = yield call(getReportInfo,
  94. formData.get('case_take_id'), formData.get('worker_id'));
  95. yield put({
  96. type: 'saveReportCommonInfo',
  97. payload: res.result,
  98. });
  99. },
  100. //todo:获取三级菜单信息
  101. * getCategories({ payload }, { call, put }) {
  102. const { examId } = payload;
  103. let res = yield call(getExamInfo, examId);
  104. let categories = res?.result?.json;
  105. categories = JSON.parse(categories);
  106. yield put({
  107. type: 'saveCategories',
  108. payload: categories,
  109. });
  110. },
  111. //todo:获取报告用例列表
  112. * getTestCaseList({ payload }, { call, put }) {
  113. const { report_id } = payload;
  114. let res = yield call(getTestCaseList, report_id);
  115. yield put({
  116. type: 'saveTestCaseList',
  117. payload: res.result,
  118. });
  119. return res.result;
  120. },
  121. //todo:获取报告基础信息
  122. * getReportInfo({ payload }, { call, put }) {
  123. const { case_take_id, worker_id } = payload;
  124. let res = yield call(getReportInfo, case_take_id, worker_id);
  125. if (res.status === 200) {
  126. yield put({
  127. type: 'saveReportCommonInfo',
  128. payload: res.result,
  129. });
  130. }
  131. return res;
  132. },
  133. //todo:保存报告基础信息
  134. * saveReportCommonDetail({ payload }, { call, put }) {
  135. let res = yield call(createReportCommon, payload);
  136. //res拿到报告id,组装生成report对象
  137. let report = { id: res.id };
  138. for (let key of payload.keys()) {
  139. report[key] = payload.get(key);
  140. }
  141. yield put({
  142. type: 'saveReportCommonInfo',
  143. payload: report,
  144. });
  145. yield put({
  146. type: 'saveCurrentStep',
  147. payload: 'detail',
  148. });
  149. },
  150. //todo:创建新用例
  151. * createTestCase({ payload }, { call, put,select }) {
  152. let { formData, report_id } = payload;
  153. let res = yield call(createTestCase, formData);
  154. yield put.resolve({
  155. type: 'getTestCaseList',
  156. payload: { report_id },
  157. });
  158. const testCaseList = yield select(state => {
  159. return state.editReport.testCaseList;
  160. })
  161. return {res,testCaseList};
  162. },
  163. //todo:更新用例
  164. * updateTestCase({ payload }, { call, put }) {
  165. let { formData, report_id } = payload;
  166. let res = yield call(updateTestCaseList, formData);
  167. yield put({
  168. type: 'getTestCaseList',
  169. payload: { report_id },
  170. });
  171. return res;
  172. },
  173. //todo:获取bug列表
  174. * getCaseBugList({ payload }, { call, put }) {
  175. let bugIdList = yield call(getCaseBugList, payload);//bug id list
  176. yield put({ type: 'getBugInfo', payload: { bugIdList } });
  177. },
  178. //todo:根据bug id获取bug detail
  179. * getBugDetail({ payload }, { call, put }) {
  180. const { id } = payload;
  181. let bugInfo = yield call(getBugInfo, id);//bug id list
  182. return bugInfo;
  183. },
  184. //todo:根据bugIdList获取bug详情
  185. * getBugInfo({ payload }, { call, put }) {
  186. const { bugIdList } = payload;
  187. let newBugList = [];
  188. for (const item of bugIdList) {
  189. let newBugInfo = yield call(getBugInfo, item);
  190. newBugList = [...newBugList, newBugInfo];
  191. }
  192. yield put({
  193. type: 'saveCaseBugList',
  194. payload: newBugList,
  195. });
  196. return newBugList;
  197. },
  198. //todo:保存bug
  199. * createCaseBug({ payload }, { call, put }) {
  200. const { useCase, formData } = payload;
  201. let res = yield call(createCaseBug, formData);
  202. yield put({
  203. type: 'getCaseBugList',
  204. payload: useCase,
  205. });
  206. return res;
  207. },
  208. //todo:获取bug 路径
  209. * getPathInfo({ payload }, { call, put }) {
  210. const { case_take_id, report_id } = payload;
  211. let res = yield call(getPathInfo, case_take_id, report_id);
  212. yield put({
  213. type: 'savePathInfo',
  214. payload: res,
  215. });
  216. },
  217. //todo:获取bug 推荐路径
  218. * getBugRecommendPath({ payload }, { call, put }) {
  219. const { case_take_id, report_id } = payload;
  220. let res = yield call(getRecommendPath, case_take_id, report_id);
  221. yield put({
  222. type: 'saveRecommendPath',
  223. payload: res,
  224. });
  225. return res;
  226. },
  227. //todo:获取bug推荐列表
  228. * getBugRecommendList({ payload }, { call, put }) {
  229. const { case_take_id, report_id } = payload;
  230. let res = yield call(getRecommendList, case_take_id, report_id);
  231. yield put({
  232. type: 'saveBugRecommendList',
  233. payload: res,
  234. });
  235. return res;
  236. },
  237. //todo:点赞bug报告
  238. * goodForReport({ payload }, { call, put }) {
  239. const { id, report_id, user_id, action } = payload;
  240. let res = yield call(goodReport, id, report_id);
  241. if (res.status === 200) {
  242. yield call(recordAction, user_id, id, action);
  243. }
  244. },
  245. //todo:取消点赞bug报告
  246. * cancelGoodForReport({ payload }, { call, put }) {
  247. const { id, report_id } = payload;
  248. yield call(cancelGoodReport, id, report_id);
  249. },
  250. //todo:点踩bug报告
  251. * badForReport({ payload }, { call, put }) {
  252. const { id, report_id, user_id, action } = payload;
  253. let res = yield call(badReport, id, report_id);
  254. if(res.status === 200){
  255. yield call(recordAction, user_id, id, action);
  256. }
  257. },
  258. //todo:取消点踩bug报告
  259. * cancelBadForReport({ payload }, { call, put }) {
  260. const { id, report_id } = payload;
  261. yield call(cancelBadReport, id, report_id);
  262. },
  263. //todo:存储用户行为
  264. * recordAction({ payload }, { call, put }) {
  265. const { user_id, target_id, action } = payload;
  266. yield call(recordAction, user_id, target_id, action);
  267. },
  268. //todo:上传照片
  269. * uploadImg({ payload }, { call, put }) {
  270. const { formData } = payload;
  271. let res = yield call(uploadImage, formData);
  272. return res;
  273. },
  274. //todo:fork report
  275. * forkReport({ payload }, { call, put }) {
  276. const { page1, page2, page3, bug_category, severity, recurrent } = payload;
  277. yield call(forkReport, page1, page2, page3, bug_category, severity, recurrent);
  278. },
  279. },
  280. reducers: {
  281. saveCurrentStep(state, { payload }) {
  282. return { ...state, current: payload };
  283. },
  284. saveStepFormData(state, { payload }) {
  285. return { ...state, step: { ...state.step, ...payload } };
  286. },
  287. saveOsType(state, { payload }) {
  288. return { ...state, osType: payload };
  289. },
  290. saveReportCommonInfo(state, { payload }) {
  291. return { ...state, reportCommonInfo: payload };
  292. },
  293. saveTestCaseList(state, { payload }) {
  294. return { ...state, testCaseList: payload };
  295. },
  296. saveCaseBugList(state, { payload }) {
  297. return { ...state, caseBugList: payload };
  298. },
  299. saveCategories(state, { payload }) {
  300. return { ...state, categories: payload };
  301. },
  302. saveBugRecommendList(state, { payload }) {
  303. return { ...state, bugRecommendList: payload };
  304. },
  305. savePathInfo(state, { payload }) {
  306. return { ...state, pathInfo: payload };
  307. },
  308. saveRecommendPath(state, { payload }) {
  309. return { ...state, recommendPath: payload };
  310. },
  311. saveCommonId(state, { payload }){
  312. return { ...state, commonId: payload };
  313. }
  314. },
  315. };
  316. export default Model;