index.vue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <template>
  2. <view class="HTodo-v" :key="key">
  3. <view class="HTodo-box">
  4. <view class="HTodo-list u-flex" :style="{'flex-wrap':option.styleType==1?'nowrap':'wrap'}">
  5. <view class="u-flex-col HTodo-list-item" v-for="(item,index) in option.defaultValue" :key="index"
  6. @click="jump(item)" :style="option.style">
  7. <view class="u-m-b-8" style="position: relative">
  8. <view :class="item.icon" class="icon"
  9. :style="{'background-color':item.iconColor||item.iconBgColor || '#008cff'}"></view>
  10. <u-badge type="error" :offset="offset" :count="item.num" show-zero
  11. :bgColor="option.valueFontBgColor"
  12. :style="{'color':option.valueFontColor,'font-weight':option.valueFontWeight?700:400}">
  13. </u-badge>
  14. </view>
  15. <view class="u-line-1 title"
  16. :style="{'font-size':option.labelFontSize,'color':option.labelFontColor,'font-weight':option.labelFontWeight?700:400}">
  17. {{item.fullName}}
  18. </view>
  19. </view>
  20. </view>
  21. </view>
  22. </view>
  23. </template>
  24. <script>
  25. import {
  26. getFlowTodoCount
  27. } from "@/api/workFlow/flowEngine";
  28. export default {
  29. props: {
  30. config: {
  31. type: Object,
  32. default: () => {}
  33. }
  34. },
  35. data() {
  36. return {
  37. offset: ['-8', '-14'],
  38. option: {},
  39. propsApi: '',
  40. key: +new Date(),
  41. flowDone: [],
  42. toBeReviewed: [],
  43. flowCirculateType: []
  44. }
  45. },
  46. created() {
  47. this.init()
  48. uni.$off('proRefresh')
  49. uni.$on('proRefresh', () => {
  50. this.initData()
  51. })
  52. },
  53. methods: {
  54. getFlowTodoCount() {
  55. for (let i = 0; i < this.option.defaultValue.length; i++) {
  56. let defaultValue = this.option.defaultValue[i]
  57. if (defaultValue.category && defaultValue.category.length) this[defaultValue.id] = defaultValue
  58. .category
  59. }
  60. const query = {
  61. flowCirculateType: this.flowCirculateType,
  62. flowDoneType: this.flowDone,
  63. toBeReviewedType: this.toBeReviewed,
  64. }
  65. getFlowTodoCount(query).then(res => {
  66. let data = res.data
  67. this.option.defaultValue.forEach(o => {
  68. o.num = data[o.id] || 0
  69. })
  70. this.key = +new Date()
  71. })
  72. },
  73. init() {
  74. this.initData()
  75. if (!this.config.allRefresh.autoRefresh && this.config.refresh.autoRefresh) {
  76. setInterval(this.initData, this.config.refresh.autoRefreshTime * 60000)
  77. }
  78. },
  79. initData() {
  80. this.option = JSON.parse(JSON.stringify(this.config.option))
  81. let style;
  82. style = {
  83. 'width': '240rpx'
  84. }
  85. if (this.option.styleType == 2) {
  86. style = {
  87. 'width': 100 / this.option.appRowNumber + '%'
  88. }
  89. if (this.option.appShowBorder) {
  90. style['border-right'] = '2rpx solid #f0f2f6'
  91. style['border-bottom'] = '2rpx solid #f0f2f6'
  92. }
  93. }
  94. this.option.style = style
  95. this.option.defaultValue = this.option.defaultValue.filter((o) => !o.noShow)
  96. this.getFlowTodoCount()
  97. this.option.labelFontSize = this.option.labelFontSize * 2 + 'rpx'
  98. this.key = +new Date()
  99. },
  100. jump(item) {
  101. if (this.config.platform === 'mp') return
  102. const sysConfigInfo = uni.getStorageSync('sysConfigInfo')
  103. if (['flowToSign'].includes(item.id) && sysConfigInfo.flowSign == 0) return this.$u.toast(
  104. "系统未开启流程待签,无法跳转")
  105. if (['flowTodo'].includes(item.id) && sysConfigInfo.flowTodo == 0) return this.$u.toast(
  106. "系统未开启流程待办,无法跳转")
  107. let url = '/my/entrustAgent'
  108. let tabIndex = {
  109. 'flowToSign': 0,
  110. 'flowTodo': 1,
  111. 'flowDoing': 2,
  112. 'flowDone': 4,
  113. 'flowCirculate': 5,
  114. }
  115. let data = {
  116. tabIndex: tabIndex[item.id],
  117. portal: true
  118. }
  119. if (['flowToSign', 'flowDoing', 'flowDone', 'flowCirculate', 'flowTodo'].includes(item.id)) url =
  120. '/workFlow/flowTodo'
  121. uni.navigateTo({
  122. url: `/pages${url}/index?data=${encodeURIComponent(JSON.stringify(data))}`
  123. })
  124. uni.navigateTo({
  125. url: url,
  126. fail: (err) => {
  127. // this.$u.toast("暂无此页面")
  128. }
  129. })
  130. }
  131. }
  132. }
  133. </script>
  134. <style lang="scss">
  135. .HTodo-v {
  136. width: 100%;
  137. height: 100%;
  138. .HTodo-box {
  139. width: 100%;
  140. overflow-x: scroll;
  141. .HTodo-list {
  142. .HTodo-list-item {
  143. align-items: center;
  144. padding: 16rpx 20rpx;
  145. .title {
  146. width: 100%;
  147. text-align: center;
  148. }
  149. .icon {
  150. width: 90rpx;
  151. height: 90rpx;
  152. font-size: 60rpx;
  153. color: #fff;
  154. text-align: center;
  155. line-height: 90rpx;
  156. border-radius: 50%;
  157. }
  158. }
  159. }
  160. }
  161. }
  162. </style>