list.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <template>
  2. <ion-page class="list-page">
  3. <ion-header class="header-theme2">
  4. <ion-toolbar>
  5. <ion-buttons slot="start">
  6. <ion-icon :icon="arrowBackOutline" @click="()=>router.push('../')"></ion-icon>
  7. </ion-buttons>
  8. <ion-title>工作日志</ion-title>
  9. <ion-buttons slot="end">
  10. <ion-icon :icon="addCircleOutline" @click="onAdd()"></ion-icon>
  11. </ion-buttons>
  12. </ion-toolbar>
  13. </ion-header>
  14. <ion-content>
  15. <ion-item class="search-item">
  16. <ion-input type="date"
  17. placeholder="开始时间" mode="md"></ion-input>
  18. <ion-input type="date"
  19. placeholder="结束时间" mode="md"></ion-input>
  20. <ion-button slot="end" style="height: 30px;width: 60px;margin-left: 10px;--box-shadow: none;--border-radius: 12px;">搜索</ion-button>
  21. </ion-item>
  22. <ion-list class="list-content">
  23. <ion-item v-for="(record,key) in dataList" :key="key" detail>
  24. <ion-grid>
  25. <ion-row>
  26. <ion-col>
  27. <ion-label style="display: flex;justify-content: space-between;">
  28. <ion-text>
  29. {{ record.name }}
  30. </ion-text>
  31. </ion-label>
  32. </ion-col>
  33. </ion-row>
  34. <ion-row>
  35. <ion-col>
  36. <ion-label>
  37. <p>
  38. 日志类型:{{ record.logTypeName }}
  39. </p>
  40. </ion-label>
  41. </ion-col>
  42. </ion-row>
  43. </ion-grid>
  44. </ion-item>
  45. </ion-list>
  46. <b-empty v-if="dataList.length<=0" :loading="loading"/>
  47. <ion-infinite-scroll threshold="100px" @ionInfinite="onScroll($event)">
  48. <ion-infinite-scroll-content
  49. :loadingText="pagination.total>pagination.current*pagination.pageSize?'正在加载...':'暂无更多'"
  50. loadingSpinner="bubbles">
  51. </ion-infinite-scroll-content>
  52. </ion-infinite-scroll>
  53. </ion-content>
  54. </ion-page>
  55. </template>
  56. <script lang="ts">
  57. import {computed, defineComponent, reactive, ref} from 'vue';
  58. import dayjs from "dayjs";
  59. import {useRoute, useRouter} from "vue-router";
  60. import {arrowBackOutline, ellipse, addCircleOutline} from 'ionicons/icons';
  61. import {IonIcon, onIonViewDidEnter} from '@ionic/vue';
  62. import BEmpty from "@/components/empty.vue";
  63. export default defineComponent({
  64. name: 'WorkLogList',
  65. components: {IonIcon, BEmpty},
  66. setup() {
  67. const loading = ref(true);
  68. const pagination = computed(() => ({
  69. total: total,
  70. current: searchParamsState.page,
  71. pageSize: searchParamsState.rows
  72. }));
  73. const dataList = ref<any>([]);
  74. const router = useRouter();
  75. const route = useRoute();
  76. const total = ref(15);
  77. const colors = ref(["secondary", "tertiary", "success", "warning"]);
  78. const searchParamsState = reactive({page: 1, rows: 10, writeStatus: null})
  79. const loadData = async function () {
  80. loading.value = true;
  81. /*const result: any = await getMyIntentionList(searchParamsState);
  82. dataList.value = dataList.value.concat(result.list);
  83. total.value = result.total;*/
  84. dataList.value = [{name: '2023年11月23日工作日志', logTypeName: "上门服务", updateTime: '2023-12-11'},
  85. {
  86. name: '2023年11月22日工作日志',
  87. logTypeName: "客户服务",
  88. updateTime: '2023-12-12'
  89. }, {name: '2023年11月21日工作日志', logTypeName: "客户服务", updateTime: '2023-12-13'}];
  90. loading.value = false;
  91. }
  92. const reload = () => {
  93. dataList.value = [];
  94. searchParamsState.page = 1;
  95. loadData();
  96. }
  97. const onScroll = (e: any) => {
  98. setTimeout(() => {
  99. e.target.complete();
  100. if (pagination.value.total.value > pagination.value.current * pagination.value.pageSize) {
  101. pagination.value.current += 1;
  102. loadData();
  103. }
  104. }, 500);
  105. }
  106. const onAdd = (item: any) => {
  107. router.push({path: './edit', query: {reload: 1, id: ""}});
  108. }
  109. onIonViewDidEnter(() => {
  110. reload();
  111. });
  112. return {
  113. router,
  114. pagination,
  115. colors,
  116. reload,
  117. loading,
  118. searchParamsState,
  119. dataList,
  120. total,
  121. dayjs,
  122. onScroll,
  123. onAdd,
  124. loadData,
  125. ellipse,
  126. arrowBackOutline,
  127. addCircleOutline,
  128. }
  129. }
  130. });
  131. </script>
  132. <style lang="less">
  133. .search-item{
  134. margin: 10px 0;
  135. font-size: 14px;
  136. ion-input{
  137. border: 1px solid #f2f2f5;border-radius: 4px;--padding-start: 10px;
  138. width: 100px;
  139. }
  140. input{
  141. padding: 6px !important;
  142. }
  143. }
  144. .list-content {
  145. margin: 0px 15px !important;
  146. background-color: white !important;
  147. border-radius: 0 !important;
  148. ion-item {
  149. margin-top: 10px;
  150. font-size: 14px;
  151. border: 1px solid rgb(242, 242, 245);
  152. p {
  153. font-size: 12px;
  154. }
  155. }
  156. }
  157. </style>