visitorDetails.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <template>
  2. <Page title="访客计划详情">
  3. <template v-slot:body>
  4. <!-- 头部 -->
  5. <div class="planDetailsHead">
  6. <div class="w-full flex items-center justify-between">
  7. <div class="text-size-in font-bold text-[#474A56]">{{ detailedData.planName }}</div>
  8. <div :class="`labelTag ${detailedData.finishState == 0 ? 'toBeCompleted' : 'completed'}`">{{ ['未完成', '已完成'][detailedData.finishState] }}</div>
  9. </div>
  10. <div class="w-full mt-4">拜访目的:{{ detailedData.visitGoalName }}</div>
  11. <div class="w-full mt-4">拜访时间: {{ detailedData.visitTime }}</div>
  12. <div class="line"></div>
  13. <div class="w-full flex items-center">
  14. <van-icon name="user-circle-o" class="text-size-in mr-2" />
  15. 客户:
  16. <div class="ml-2 themeTextColor decoration-auto underline">{{ detailedData.customName }}</div>
  17. </div>
  18. </div>
  19. <!-- 主体 -->
  20. <van-cell-group>
  21. <van-cell title="计划名称" :value="detailedData.planName" />
  22. <van-cell title="客户姓名" :value="detailedData.customName" />
  23. <van-cell title="负责人" :value="detailedData.inchargerName" />
  24. <van-cell title="拜访目的" :value="detailedData.visitGoalName" />
  25. <van-cell title="拜访时间" :value="detailedData.visitTime" />
  26. <van-cell title="提醒" :value="detailedData.remindTypeName" />
  27. <van-cell title="提醒时间" :value="detailedData.remindTime" v-if="detailedData.remindType == -1" />
  28. <van-cell title="备注" :value="detailedData.remark" />
  29. </van-cell-group>
  30. <div class="h-10"></div>
  31. </template>
  32. <template v-slot:footer>
  33. <div class="w-full flex justify-between layout">
  34. <div class="footerBtnLeft layouts">
  35. <div class="imgClss"></div>
  36. 联系人
  37. </div>
  38. <div class="footerBtnRight layouts">
  39. <div class="imgClss"></div>
  40. 延期
  41. </div>
  42. <div class="coverWithWhite"></div>
  43. <div class="bigCircle">
  44. <div class="imgClss"></div>
  45. 完成
  46. </div>
  47. </div>
  48. </template>
  49. </Page>
  50. </template>
  51. <script setup>
  52. import { ref } from "vue";
  53. import { useLifecycle } from "@hooks/useCommon.js";
  54. import useToast from "@hooks/useToast"
  55. import requests from "@common/requests";
  56. import useRouterStore from "@store/useRouterStore.js";
  57. import useFixedData from "@store/useFixedData.js";
  58. import PullDownSelector from "@components/common/pullDownSelector.vue";
  59. const router = useRouterStore();
  60. const detailedData = ref({});
  61. function processingDataSource(data) {
  62. const row = JSON.parse(data.row);
  63. detailedData.value = row || {}
  64. }
  65. useLifecycle({
  66. load: () => {
  67. router.on("visitorDetailsParameter", (data) => {
  68. processingDataSource(data);
  69. });
  70. },
  71. });
  72. </script>
  73. <style lang="scss" scoped>
  74. .planDetailsHead {
  75. background: #ffa35919;
  76. padding: 14px 18px;
  77. margin: 10px;
  78. .toBeCompleted {
  79. background: rgba($color: #f38b3c, $alpha: 0.1);
  80. border-color: #f38b3c;
  81. color: #f38b3c;
  82. }
  83. .completed {
  84. background: rgba($color: #07c160, $alpha: 0.1);
  85. border-color: #07c160;
  86. color: #07c160;
  87. }
  88. .labelTag {
  89. font-size: 10px;
  90. padding: 3px 8px;
  91. border-radius: 4px;
  92. border: 1px solid;
  93. }
  94. .line {
  95. width: 100%;
  96. height: 1px;
  97. background-color: #E6D3C7;
  98. margin: 14px 0;
  99. }
  100. }
  101. .layout {
  102. height: 90px;
  103. position: relative;
  104. .layouts {
  105. width: 40%;
  106. height: 100%;
  107. background: #fff;
  108. box-shadow: 0px -2px 30px 0px #00000014;
  109. display: flex;
  110. flex-direction: column;
  111. align-items: center;
  112. justify-content: center;
  113. }
  114. .footerBtnLeft {
  115. border-top-right-radius: 25px;
  116. .imgClss {
  117. width: 30px;
  118. height: 30px;
  119. background-color: #000;
  120. margin-bottom: 6px;
  121. }
  122. }
  123. .footerBtnRight {
  124. border-top-left-radius: 25px;
  125. .imgClss {
  126. width: 26px;
  127. height: 24px;
  128. background-color: #000;
  129. margin-bottom: 9px;
  130. }
  131. }
  132. .coverWithWhite {
  133. width: 20%;
  134. background: #fff;
  135. position: absolute;
  136. bottom: 0;
  137. left: 50%;
  138. transform: translateX(-50%);
  139. height: 70px;
  140. z-index: 1;
  141. }
  142. .bigCircle {
  143. width: 80px;
  144. height: 80px;
  145. ;
  146. border-radius: 50%;
  147. background: $themeColor;
  148. box-shadow: 0px -2px 30px 0px #00000014;
  149. position: absolute;
  150. bottom: 27px;
  151. left: 50%;
  152. transform: translateX(-50%);
  153. z-index: 2;
  154. color: #fff;
  155. display: flex;
  156. align-items: center;
  157. justify-content: center;
  158. flex-direction: column;
  159. .imgClss {
  160. width: 25.5px;
  161. height: 25.5px;
  162. margin-bottom: 4px;
  163. background: #000;
  164. }
  165. }
  166. }
  167. </style>