auditResult.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <template>
  2. <view class="page_body">
  3. <!-- 头部 -->
  4. <nav-bar height="216" :title="state.pageTitle" :onlyTitle="false" :showHeadSearchInput="false" :showFilterPicker="false" :showTabs="false" :showTabBtns="true" :tabBtns="state.tabBtns" rightWidth="0rpx" @GoBack="GoBack"></nav-bar>
  5. <view class="page_content">
  6. </view>
  7. <view class="page_foot">
  8. <button :class="['btn','btn_reject',{'disabled':state.taskStatus==2 || (state.taskStatus==1 && state.reviewStatus == 2)}]" type="primary" plain="true" :loading="state.loading" @click="HandleRejectHonor">驳回</button>
  9. <button :class="['btn','btn_pass',{'disabled':state.taskStatus==2 || (state.taskStatus==1 && state.reviewStatus == 1)}]" type="primary" :loading="state.loading" @click="HandlePassHonor">通过</button>
  10. </view>
  11. <customPopupDialog ref="popupDelDialogRef" title="驳回" dialogWidth="702" :isMaskClick="false" :showDialogClose="false" @DialogConfirm="DialogConfirm">
  12. <view class="dialog_content_input">
  13. <view class="dialog_desc">请填写驳回原因方便教师修改</view>
  14. <uni-easyinput type="textarea" v-model="state.rejectReason" :maxlength="200" :style="state.easyinputStyle" placeholderStyle="font-weight: 400;font-size: 28rpx;color: #999999;" placeholder="请输入驳回原因…"></uni-easyinput>
  15. </view>
  16. </customPopupDialog>
  17. </view>
  18. </template>
  19. <script setup>
  20. import navBar from '@/components/navBar.vue';
  21. import uvUpload from '@/uni_modules/uv-upload/components/uv-upload/uv-upload.vue';
  22. import customPopupDialog from '@/components/customPopupDialog.vue';
  23. import uniEasyinput from '@/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue';
  24. import {updateReviewStatus,ChangeReviewStatus} from '@/reqApi/notification.js';
  25. import {
  26. reactive,
  27. ref,
  28. nextTick,
  29. onUnmounted
  30. } from 'vue';
  31. import { onLoad } from '@dcloudio/uni-app';
  32. const state = reactive({
  33. taskStatus:'',
  34. reviewStatus:'',
  35. taskTargetId:'',
  36. loading:false,
  37. pageTitle:'',
  38. tabBtns:[],
  39. rejectReason:'',//驳回原因
  40. easyinputStyle:{
  41. color: '#303133',
  42. borderColor: '#E9E9E9'
  43. }
  44. })
  45. const popupDelDialogRef = ref(null);
  46. onLoad((option) => {
  47. state.taskStatus = Number(option.taskStatus);//任务状态
  48. uni.removeStorageSync('isLoadReviewMaterialDetailList');//是否更新列表
  49. const detailData = uni.getStorageSync('reviewMaterialDetailData');//数据
  50. state.pageTitle = detailData?.targetName || '';
  51. state.reviewStatus = detailData?.reviewStatus || '';//审核状态
  52. state.taskTargetId = detailData?.taskTargetId || '';
  53. const fileList = detailData?.taskTargetFileVos || [];
  54. state.tabBtns = fileList.map(item=>({
  55. ...item,
  56. label:item.fileName,
  57. value:item.id,
  58. }))
  59. console.log(detailData,32323)
  60. })
  61. onUnmounted(()=>{
  62. uni.removeStorageSync('reviewMaterialDetailData');//删除缓存数据
  63. })
  64. //通过
  65. const HandlePassHonor = () => {
  66. if(state.taskStatus==2 || (state.taskStatus==1 && state.reviewStatus == 1)){
  67. return false
  68. }
  69. HandleRejectOrPass(1)
  70. }
  71. //驳回
  72. const HandleRejectHonor = () => {
  73. if(state.taskStatus==2 || (state.taskStatus==1 && state.reviewStatus == 2)){
  74. return false
  75. }
  76. popupDelDialogRef.value.OpenDialog();
  77. }
  78. //驳回 确定按钮
  79. const DialogConfirm = () => {
  80. if(state.rejectReason == '' || state.rejectReason == null){
  81. uni.showToast({
  82. title: '请填写驳回原因!',
  83. icon: 'none'
  84. })
  85. return false
  86. }
  87. HandleRejectOrPass(2)
  88. }
  89. const HandleRejectOrPass = (status) => {
  90. const params = {
  91. taskTargetId: state.taskTargetId,
  92. reviewStatus: status
  93. }
  94. if(status == 2){
  95. params.reviewContent = state.rejectReason;
  96. }
  97. const apiFn = state.reviewStatus === 0 ? updateReviewStatus : ChangeReviewStatus;
  98. apiFn(params).then(res=>{
  99. if(res.code == 200){
  100. uni.showToast({
  101. title: status == 2?'驳回成功!':'审核通过!',
  102. icon: 'none'
  103. })
  104. uni.setStorageSync('isLoadReviewMaterialDetailList', true);//刷新荣誉审核列表
  105. GoBack();
  106. }
  107. })
  108. }
  109. const GoBack = () => {
  110. uni.navigateBack({
  111. delta: 1
  112. });
  113. }
  114. </script>
  115. <style lang="scss" scoped>
  116. .page_body{
  117. height: 100%;
  118. min-height: auto;
  119. }
  120. .page_content{
  121. height: calc(100% - 390rpx);
  122. overflow: auto;
  123. }
  124. .page_foot{
  125. position: fixed;
  126. left:0;
  127. right: 0;
  128. bottom: 0;
  129. padding: 40rpx 24rpx 38rpx 24rpx;
  130. box-shadow: inset 0px 2rpx 0px 0px #F3F3F3;
  131. background-color:#FFFFFF;
  132. gap: 30rpx;
  133. display: flex;
  134. .btn{
  135. height: 90rpx;
  136. display: flex;
  137. justify-content: center;
  138. align-items: center;
  139. border-radius: 8rpx;
  140. font-weight: 500;
  141. font-size: 28rpx;
  142. flex: 1;
  143. box-sizing: border-box;
  144. }
  145. .btn_reject{
  146. border: 2rpx solid #F56C6C;
  147. color: #F56C6C;
  148. &.disabled{
  149. border: 2rpx solid #C0C4CC;
  150. color: #C0C4CC;
  151. }
  152. }
  153. .btn_pass{
  154. background-color: #2E64FA !important;
  155. color: #FFFFFF;
  156. &.disabled{
  157. background-color: #F3F3F3 !important;
  158. color: #C0C4CC;
  159. }
  160. }
  161. }
  162. .dialog_content_input{
  163. width: 100%;
  164. display: flex;
  165. flex-direction: column;
  166. box-sizing: border-box;
  167. .dialog_desc{
  168. font-weight: 400;
  169. font-size: 32rpx;
  170. color: #303133;
  171. }
  172. :deep(.uni-easyinput){
  173. margin-top: 20rpx;
  174. font-size: 28rpx;
  175. .is-input-border{
  176. border-radius: 8rpx;
  177. border-color: #E9E9E9 !important;
  178. }
  179. .uni-easyinput__content-textarea{
  180. height: 400rpx;
  181. min-height: 400rpx;
  182. font-size: 28rpx;
  183. margin:20rpx 24rpx 20rpx 14rpx;
  184. }
  185. .input-padding{
  186. padding-left: 10rpx;
  187. }
  188. }
  189. }
  190. </style>