list.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. <template>
  2. <view>
  3. <z-paging ref="paging" v-model="dataList" @query="queryList" empty-view-text="~ 暂无数据 ~">
  4. <template #top>
  5. <u-navbar class="u-navbar-box" :title="handleTitle" placeholder bgColor="transparent" autoBack />
  6. <view class="bg-white">
  7. <u-tabs :list="tabList" :current="tabIndex" lineWidth="80rpx" :itemStyle="itemStyle"
  8. :activeStyle="activeStyle" :inactiveStyle="inactiveStyle" @click="handleTabs" />
  9. </view>
  10. </template>
  11. <template #default>
  12. <view class="apply-list">
  13. <applyItem v-for="(item, index) in dataList" :item="item" :key="index" @tapItem="tapItemHandle" />
  14. </view>
  15. </template>
  16. </z-paging>
  17. </view>
  18. </template>
  19. <script setup>
  20. import {
  21. ref,
  22. reactive,
  23. computed,
  24. getCurrentInstance,
  25. onMounted
  26. } from 'vue';
  27. //import { onLoad } from '@dcloudio/uni-app'
  28. import applyItem from '../../components/apply/apply-item.vue';
  29. import {
  30. useStore
  31. } from 'vuex';
  32. import {
  33. getCareList,
  34. getAppClockList,
  35. getAssignList
  36. } from '@/common/config/application-api.js'
  37. import {
  38. onLoad,
  39. onUnload
  40. } from '@dcloudio/uni-app'
  41. const store = useStore();
  42. const user = store.state.vuex_user;
  43. const {
  44. proxy
  45. } = getCurrentInstance();
  46. //当前是tabs样式
  47. const itemStyle = reactive({
  48. width: '187.5rpx',
  49. padding: '20rpx 0'
  50. })
  51. const activeStyle = reactive({
  52. color: '#39A1FF',
  53. fontSize: '32rpx',
  54. fontWeight: 'bold'
  55. })
  56. const inactiveStyle = reactive({
  57. color: '#888888',
  58. fontSize: '32rpx',
  59. fontWeight: 'bold'
  60. })
  61. const props = defineProps({
  62. // 是否是工作 - 判断当前tab是否显示
  63. isWork: {
  64. type: Boolean,
  65. default: false
  66. }
  67. })
  68. const tabData = {
  69. common: [{
  70. name: '进行中',
  71. query: {
  72. dealStatus: 'in_progress',
  73. }
  74. }, {
  75. name: '已完成',
  76. query: {
  77. dealStatus: 'complete'
  78. }
  79. }],
  80. admin: [{
  81. name: '进行中',
  82. query: {
  83. dealStatus: 'in_progress',
  84. }
  85. }, {
  86. name: '已完成',
  87. query: {
  88. dealStatus: 'complete'
  89. }
  90. }],
  91. village: [{
  92. name: '未送审',
  93. query: {
  94. status: 'no_check,disagree'
  95. }
  96. }, {
  97. name: '进行中',
  98. query: {
  99. status: 'wait_assign_nurse,wait_check,agree,wait_assign_company,assigned',
  100. dealStatus: 'in_progress',
  101. }
  102. }, {
  103. name: '已完成',
  104. query: {
  105. dealStatus: 'complete'
  106. }
  107. }],
  108. area: [{
  109. name: '待处理',
  110. query: {
  111. status: 'wait_check,wait_assign_company'
  112. }
  113. }, {
  114. name: '进行中',
  115. query: {
  116. status: 'wait_assign_nurse,agree,wait_assign_company,assigned',
  117. dealStatus: 'in_progress',
  118. }
  119. }, {
  120. name: '已完成',
  121. query: {
  122. dealStatus: 'complete'
  123. }
  124. }, {
  125. name: '已拒绝',
  126. query: {
  127. status: 'disagree'
  128. }
  129. }],
  130. company: [{
  131. name: '待分配',
  132. query: {
  133. status: 'wait_assign_nurse'
  134. }
  135. }, {
  136. name: '进行中',
  137. query: {
  138. status: 'care_apply_status',
  139. dealStatus: 'in_progress',
  140. }
  141. }, {
  142. name: '已完成',
  143. query: {
  144. dealStatus: 'complete'
  145. }
  146. }],
  147. nurse: [{
  148. name: '护理任务',
  149. query: {
  150. status: 'assigned',
  151. dealStatus: 'in_progress',
  152. }
  153. }, {
  154. name: '已完成',
  155. query: {
  156. status: 'assigned',
  157. dealStatus: 'complete'
  158. }
  159. }],
  160. }
  161. const tabList = ref([])
  162. let roles = user.roles ?? [];
  163. roles.map(r => {
  164. if (tabData.hasOwnProperty(r) && tabList.value.length === 0) tabList.value = tabData[r];
  165. })
  166. if (tabList.value.length === 0) tabList.value = tabData.common;
  167. //根据tab计算有多少宽度
  168. itemStyle.width = 750 / tabList.value.length < 150 ? '150rpx' : `${750 / tabList.value.length}rpx`;
  169. const tabIndex = ref(0)
  170. function handleTabs({
  171. index,
  172. name
  173. }) {
  174. if (index === tabIndex.value) return;
  175. tabIndex.value = index;
  176. proxy.$refs.paging.reload();
  177. }
  178. const handleTitle = computed(() => {
  179. if(roles.includes('area')) return '护理审核';
  180. if(roles.includes('village')) return '护理申请';
  181. if(roles.includes('company')) return '护理指派';
  182. else return '护理打卡';
  183. })
  184. const dataList = ref([])
  185. const paging = ref(null)
  186. function queryList(pageNo, pageSize) {
  187. let params = {
  188. pageNum: pageNo,
  189. pageSize
  190. }
  191. if (tabList.value.length > tabIndex.value) {
  192. let query = tabList.value[tabIndex.value].query;
  193. params = {
  194. ...params,
  195. ...query
  196. }
  197. }
  198. if(roles.includes('company')){
  199. getListIsCompany(params);
  200. }else if(roles.includes('nurse')) {
  201. getListIsNurse(params);
  202. }else {
  203. getList(params);
  204. }
  205. }
  206. function getList(params) {
  207. getCareList({
  208. params
  209. }).then(data => {
  210. paging.value.complete(data);
  211. })
  212. }
  213. // -护理公司护理列表查询
  214. function getListIsCompany(query) {
  215. let params = {
  216. ...query,
  217. pageNumAssign: query.pageNum??1,
  218. pageSizeAssign: query.pageSize??10
  219. }
  220. getAssignList({
  221. params
  222. }).then(data=>{
  223. paging.value.complete(data);
  224. })
  225. }
  226. // -护理人员护理列表查询
  227. function getListIsNurse(query) {
  228. let params = {
  229. ...query
  230. }
  231. getAppClockList({
  232. params
  233. }).then(data=>{
  234. paging.value.complete(data);
  235. })
  236. }
  237. function tapItemHandle(item) {
  238. // console.log('tapItemHandle=>', item);
  239. if (!item.applyId) return false;
  240. uni.$u.route('/pages/subpack/pages/application/info', {
  241. id: item.applyId
  242. })
  243. }
  244. onLoad(() => {
  245. uni.$on('renderApplyList', () => {
  246. proxy.$refs.paging.reload();
  247. })
  248. })
  249. onUnload(() => {
  250. uni.$off('renderApplyList')
  251. })
  252. </script>
  253. <style>
  254. page {
  255. background-color: #F6F8FD;
  256. }
  257. </style>
  258. <style lang="scss" scoped>
  259. :deep(.u-navbar__content__title) {
  260. font-weight: bold;
  261. font-size: 36rpx;
  262. color: #222222;
  263. }
  264. .u-navbar-box {
  265. background: radial-gradient(circle at left, #FFE5E4 0%, #EEF2F5 40%, #DBEEFB 100%);
  266. }
  267. </style>