pk_log.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <template>
  2. <div style="height: 100%">
  3. <div class="pk_log_scroller">
  4. <scroller ref="scroller" :on-refresh="refresh" :on-infinite="infinite">
  5. <div style="padding: 0 0.32rem">
  6. <van-panel v-for="(item,index) in list " :key="index" :title="item.target_name" :desc="item.remark" :status="item.point.toString()">
  7. <template slot="header">
  8. <div class="panelHead">
  9. <div style="-webkit-box-flex: 1;flex: 1;">
  10. <span style="font-size: .32rem;"><Wxopendata type="userName" :openid="item.target_name"></Wxopendata></span>
  11. <div style="margin-top: .06rem;color: #969799;font-size: .24rem;line-height: .36rem;">
  12. {{item.remark}}
  13. </div>
  14. </div>
  15. <div style="overflow: visible;color: #ee0a24;position: relative;text-align: right;vertical-align: middle;word-wrap: break-word;">
  16. <span style="">{{item.point.toString()}}</span>
  17. </div>
  18. </div>
  19. </template>
  20. <div class="list_detail">
  21. <span>时间:{{item.event_time}}</span>
  22. <span v-if="item.team_name">团队名称:{{item.team_name}}</span>
  23. <span class="flex-box">
  24. <span class="flex-1"> 操作人:<Wxopendata type="userName" :openid="item.recorder_name"></Wxopendata></span>
  25. <span v-if="item.target_id>0" class="color-blue">个</span>
  26. <span v-else class="color-blue">团</span>
  27. </span>
  28. </div>
  29. </van-panel>
  30. </div>
  31. <noData :list="list" />
  32. </scroller>
  33. </div>
  34. <div class="record_list" v-if="(hasPermission || enbaleLeaderRecord) && filter.pk_status === 'running'">
  35. <van-row gutter="8" type="flex" justify="center">
  36. <van-col :span="12">
  37. <van-button type="info" block @click="add_log_employee">录入个人积分</van-button>
  38. </van-col>
  39. <van-col :span="12">
  40. <van-button type="info" block @click="add_log_teams">录入团队积分</van-button>
  41. </van-col>
  42. </van-row>
  43. </div>
  44. </div>
  45. </template>
  46. <script>
  47. import request from '@/utils/request'
  48. import Vue from 'vue'
  49. import { panel } from 'vant'
  50. Vue.use(panel)
  51. export default {
  52. props: {
  53. createInfo: {
  54. type: Object,
  55. default: {}
  56. }
  57. },
  58. comments: {},
  59. // 数据
  60. data () {
  61. return {
  62. get_id: this.$route.query.id,
  63. list: null,
  64. filter: {
  65. pk_id: this.$route.query.id,
  66. pk_status: this.$route.query.pk_status,
  67. page: 1
  68. },
  69. pk_info: {}
  70. }
  71. },
  72. computed: {
  73. hasPermission () {
  74. const { createInfo } = this
  75. const { is_creator, id } = this.$store.getters.user_info
  76. let is=is_creator == 1 || id == createInfo.creatorId || createInfo.manages.has(id.toString())
  77. console.log('hasPermission',is_creator, id,JSON.stringify(this.createInfo),is)
  78. return is
  79. },
  80. enbaleLeaderRecord () {
  81. const { id } = this.$store.getters.user_info
  82. const { leader_can_record, leader_ids } = this.pk_info
  83. let is=leader_can_record == 1 && leader_ids.findIndex(o => o === id) > -1
  84. console.log('enbaleLeaderRecord',id,leader_can_record, leader_ids,is)
  85. return is
  86. }
  87. },
  88. // 方法
  89. methods: {
  90. convertToString (value) {
  91. if (typeof value === 'string' || !value) {
  92. return value
  93. }
  94. return value.toString()
  95. },
  96. // 获取列表
  97. get_list (done) {
  98. let self = this
  99. request('get', '/api/integral/pk/log', self.filter).then((res) => {
  100. done()
  101. const { scroller } = this.$refs
  102. if (res.data.code == 1) {
  103. scroller && scroller.finishInfinite(!res.data.data.list.length != '10') // 停止上滚加载下一页,由于服务器端没有统一空数据和正常数据的格式,所以通过total字段来判定数据是否存在下一页
  104. if (res.data.data.total) {
  105. for (let i in res.data.data.list) {
  106. self.list.push(res.data.data.list[i])
  107. }
  108. }
  109. self.filter.page++
  110. } else {
  111. scroller && scroller.finishInfinite(true)
  112. }
  113. })
  114. },
  115. get_pk_info () {
  116. let self = this
  117. let data = {
  118. pk_id: self.$route.query.id
  119. }
  120. request('get', '/api/integral/pk/info', data).then((res) => {
  121. if (res.data.code == 1) {
  122. self.pk_info = res.data.data
  123. } else {
  124. self.$toast(res.data.msg)
  125. }
  126. })
  127. },
  128. refresh (done) {
  129. let self = this
  130. setTimeout(() => {
  131. this.filter.page = 1
  132. this.get_list(function () {
  133. self.list = []
  134. done()
  135. })
  136. }, 100)
  137. },
  138. infinite (done) {
  139. this.get_list(done)
  140. },
  141. // 个人积分添加
  142. add_log_employee () {
  143. this.$router.push({ name: 'add_log', query: { log_type: 'employee', pk_id: this.get_id } })
  144. },
  145. // 团队积分添加
  146. add_log_teams () {
  147. this.$router.push({ name: 'add_log', query: { log_type: 'team', pk_id: this.get_id } })
  148. },
  149. // 加载
  150. showLoading () {
  151. this.$toast.loading({
  152. loadingType: 'spinner',
  153. message: '正在处理'
  154. })
  155. }
  156. },
  157. // 生命周期 --- 创建完成
  158. created () {
  159. // created 创建完毕状态
  160. this.$nextTick(() => {
  161. this.$refs.scroller.finishInfinite(false)
  162. })
  163. console.log('filter',JSON.stringify(this.filter))
  164. this.get_pk_info()
  165. }
  166. }
  167. </script>
  168. <style scoped>
  169. .body_com {
  170. height: calc(100% - 1rem);
  171. position: relative;
  172. }
  173. .pk_log_scroller {
  174. height: calc(100% - 1rem);
  175. }
  176. .record_list {
  177. padding: 0 0.32rem;
  178. }
  179. .panelHead{
  180. border-bottom:.02rem solid #edebf0;
  181. padding: .24rem .32rem;
  182. position: relative;
  183. display: flex;
  184. box-sizing: border-box;
  185. width: 100%;
  186. overflow: hidden;
  187. color: #323233;
  188. line-height: .48rem;
  189. background-color: #fff;
  190. }
  191. </style>