AppealRewrite.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. <template>
  2. <van-popup
  3. v-model="showAppealRewrite"
  4. position="bottom"
  5. duration="0.2"
  6. :style="{height: '100%', width:'100%','background-colorr': 'rgb(245, 245, 245)'}"
  7. @open="onOpen"
  8. @closed="onClosed"
  9. >
  10. <van-nav-bar
  11. title="申述重写"
  12. :left-arrow="true"
  13. @click-left="showAppealRewrite = false"
  14. @click-right="showActions = true"
  15. fixed
  16. >
  17. <template slot="right" v-if="canActions">
  18. <van-icon name="bars"/>
  19. </template>
  20. </van-nav-bar>
  21. <div :style="{marginTop:'1rem',height:'90%'}">
  22. <van-notice-bar
  23. left-icon="volume-o"
  24. text="手机端暂不支持添加积分事件,请在电脑端操作"
  25. />
  26. <van-form>
  27. <van-cell-group>
  28. <EmployeeSelectorCell
  29. title="递交审批"
  30. v-model="rewriteData.reviewer"
  31. :multi="false"
  32. icon-type="records"
  33. :employee_list="userInfo.employee_detail.superior_list"
  34. :is_employee_list="true"
  35. />
  36. </van-cell-group>
  37. <van-cell-group>
  38. <van-cell>
  39. <Mtextarea v-model="rewriteData.globalRemark" :text_max="100" placeholder="申诉原因"/>
  40. </van-cell>
  41. </van-cell-group>
  42. <div class="card-box">
  43. <div class="box-header">
  44. <span v-if="rewriteData.events.length > 0">共{{rewriteData.events.length}}条积分事件</span>
  45. <span v-else>暂无积分事件</span>
  46. </div>
  47. <van-divider/>
  48. <div class="box-content">
  49. <div v-for="(item,index) in rewriteData.events" :key="index" class="box-content-item">
  50. <div class="box-content-item-title">
  51. <van-tag type="primary" size="medium" closeable @close="deleteEvent(item)" >{{item.remark}}</van-tag>
  52. </div>
  53. <div class="box-content-item-content">
  54. <Mtextarea :text_max="100" placeholder="申诉原因" v-model="item.appeal_remark"/>
  55. </div>
  56. </div>
  57. </div>
  58. </div>
  59. </van-form>
  60. </div>
  61. <van-action-sheet
  62. v-model="showActions"
  63. :actions="[actionRewrite]"
  64. @select="actionSelect"
  65. close-on-click-action
  66. />
  67. </van-popup>
  68. </template>
  69. <script>
  70. import EmployeeSelectorCell from "./EmployeeSelectorCell.vue";
  71. import Mtextarea from "./Mtextarea2.vue";
  72. export default {
  73. name: "AppealRewrite",
  74. components:{Mtextarea,EmployeeSelectorCell},
  75. props:{
  76. visible:{
  77. type: Boolean,
  78. default : false
  79. },
  80. id:{
  81. type: Number,
  82. default: 0
  83. },
  84. },
  85. data(){
  86. return {
  87. userInfo:this.$userInfo(),
  88. hasOpen:false,
  89. showAppealRewrite:false,
  90. showActions:false,
  91. hasSubmit: false,
  92. pts:this.$getTypes,
  93. appealInfo:null,
  94. rewriteData:{
  95. events:[],
  96. globalRemark:'',
  97. reviewer:[]
  98. },
  99. loading:false,
  100. actionRewrite:{name:'提交',action:'rewrite',loading:false,disabled:false},
  101. submitting:false,
  102. }
  103. },
  104. watch:{
  105. showAppealRewrite(v){
  106. this.$emit('update:visible',v)
  107. },
  108. visible(v){
  109. this.showAppealRewrite = v
  110. }
  111. },
  112. computed:{
  113. canActions(){
  114. return this.appealInfo && this.appealInfo.can_rewrite && this.rewriteData.reviewer.length === 1 && this.rewriteData.events.length >= 1 && !this.submitting
  115. }
  116. },
  117. methods:{
  118. onOpen(){
  119. this.hasOpen = true
  120. this.getAppealInfo()
  121. },
  122. onClosed(){
  123. this.hasOpen = false
  124. if (this.hasSubmit) this.$emit('hasSubmit')
  125. },
  126. initRewriteData(){
  127. if (!this.appealInfo) return
  128. this.rewriteData.events = this.appealInfo.events.map(event => {
  129. let pt = this.pts.find(item => item.id === event.pt_id)
  130. pt = pt ? pt.name : ''
  131. return {
  132. id:event.id,
  133. remark:`${event.point} ${pt} ${event.event_time} ${event.event_remark}`,
  134. appeal_remark:event.appeal_remark
  135. }
  136. })
  137. this.rewriteData.globalRemark = this.appealInfo.global_remark
  138. let node = this.appealInfo.process.find(item => item.step === 1)
  139. if (node){
  140. this.rewriteData.reviewer = []
  141. this.rewriteData.reviewer.push({id: node.reviewer_id,name: node.reviewer_name,img_url:node.reviewer_img_url})
  142. }
  143. },
  144. getAppealInfo(){
  145. if (!this.id) return
  146. let self = this
  147. self.loading = true
  148. self.$axiosUser('get','api/pro/integral/appeal/info',{appeal_id:this.id})
  149. .then((res) => {
  150. if (res.data.code === 1){
  151. self.appealInfo = res.data.data
  152. self.initRewriteData()
  153. }
  154. })
  155. .finally(() => {
  156. self.loading = false
  157. })
  158. },
  159. deleteEvent(event){
  160. let index = this.rewriteData.events.indexOf(event)
  161. if (index >= 0) this.rewriteData.events.splice(index,1)
  162. },
  163. actionSelect(action){
  164. if (action.action === 'rewrite') this.rewriteAppeal()
  165. },
  166. rewriteAppeal(){
  167. let self = this
  168. if (!self.canActions) return
  169. let params = {
  170. appeal_id:self.appealInfo.id,
  171. reviewer_id:self.rewriteData.reviewer[0].id,
  172. remark:self.rewriteData.globalRemark,
  173. events:self.rewriteData.events.map(item => {
  174. return {id:item.id,remark:item.appeal_remark}
  175. })
  176. }
  177. self.submitting = true
  178. self.$toast.loading({ message: '正在处理',overlay:true,duration:0})
  179. self.$axiosUser('post','api/pro/integral/appeal/rewrite',params)
  180. .then(res => {
  181. if (res.data.code === 1){
  182. self.hasSubmit = true
  183. self.submitting = false
  184. self.showAppealRewrite = false
  185. }
  186. self.$toast(res.data.msg)
  187. self.$toast.clear()
  188. })
  189. .finally(() => {})
  190. }
  191. }
  192. }
  193. </script>
  194. <style scoped lang="less">
  195. .card-box{
  196. margin: 0.2rem auto;
  197. border-radius: 0.3rem;
  198. border: 1px solid #ebeef5;
  199. background-color: #ffffff;
  200. overflow: hidden;
  201. color: #303133;
  202. text-align: center;
  203. min-height: 70%;
  204. width: 95%;
  205. box-shadow: 0 2px 12px 0 rgba(0,0,0,0.1);
  206. & .box-header{
  207. height: 0.5rem;
  208. line-height: 0.5rem;
  209. }
  210. & .box-content{
  211. margin-bottom: 1rem;
  212. & .box-content-item{
  213. width: 95%;
  214. margin: 0.3rem auto 0;
  215. & .box-content-item-title{
  216. padding: 0 0.3rem;
  217. }
  218. & .box-content-item-content{
  219. padding: 0 0.3rem;
  220. margin-top: 0.2rem;
  221. border: 0.02rem solid #ebeef5;
  222. }
  223. }
  224. }
  225. }
  226. </style>