Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

evaluate-list.vue 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <!-- 评价列表 -->
  2. <template>
  3. <evaluate-tab-item :tabs="state.tabs" @tabClick="tabClick" />
  4. <view style="padding: 30rpx;margin-top: 90rpx;">
  5. <view class="list" :class="state.type === '2' ? 'btn-divider' : ''">
  6. <evaluate-issue-item :dataList="state.dataList" v-if="state.type === '1'" />
  7. <evaluate-business-item :dataList="state.dataList" v-if="state.type === '2'" />
  8. <evaluate-equity-item :dataList="state.dataList" v-if="state.type === '3'" />
  9. <evaluate-salesman-item :dataList="state.dataList" v-if="state.type === '4'" />
  10. </view>
  11. <view class="bottom-line" v-if="state.flags">我是有底线的~~~</view>
  12. </view>
  13. <view class="evaluate-btn" v-if="state.type === '2'">
  14. <submit-button title="去评价" @submit="goOrder()"></submit-button>
  15. </view>
  16. </template>
  17. <script setup lang="ts">
  18. import evaluateTabItem from "./components/evaluate-tab-item";
  19. import evaluateIssueItem from "./components/evaluate-issue-item";
  20. import evaluateEquityItem from "./components/evaluate-equity-item";
  21. import evaluateBusinessItem from "./components/evaluate-business-item";
  22. import evaluateSalesmanItem from "./components/evaluate-salesman-item";
  23. import { onLoad, onReachBottom } from "@dcloudio/uni-app";
  24. import { reactive } from "vue";
  25. import { request } from "@/utils/network/request";
  26. import { stringToJson } from "@/utils/network/encryption";
  27. import { satisfactionEvaluation } from "@/utils/network/api";
  28. import { getItem, StorageKeys } from "@/utils/storage";
  29. const state = reactive({
  30. type: "", //评价列表类型 1-发行产品评价 2-业务办理满意度评价 3-权益产品评价 4-业务员满意度评价(暂无UI)
  31. tabs: ["全部", "好评", "中评", "差评"],
  32. curCheckTab: "全部", //当前选择的tab
  33. dataList: [], //评价列表
  34. scoreLevel: 0, //0 全部 1 好评 2 中评 3 差评
  35. serviceType: '',
  36. pageNo: 1,
  37. pageSize: 10,
  38. flags: false,
  39. });
  40. onLoad((options) => {
  41. console.log("options", options)
  42. state.type = options.type;
  43. uni.setNavigationBarTitle({
  44. title: options.title,
  45. });
  46. // if (state.type === "2") {
  47. // state.tabs = [...state.tabs, "业务类型"];
  48. // }
  49. fetchList(1);
  50. });
  51. const goOrder = () => {
  52. uni.switchTab({
  53. url: "/pages/order/order"
  54. })
  55. }
  56. /* tab点击 */
  57. const tabClick = (tab) => {
  58. state.flags = false;
  59. console.log("tab", tab)
  60. state.curCheckTab = tab;
  61. if (tab == '全部') {
  62. state.scoreLevel = 0
  63. } else if (tab == '好评') {
  64. state.scoreLevel = 1
  65. } else if (tab == '中评') {
  66. state.scoreLevel = 2
  67. } else {
  68. state.scoreLevel = 3
  69. }
  70. requestData("11", { type: state.curCheckTab }, 1);
  71. };
  72. /* 根据不同条件获取数据 */
  73. const fetchList = (params) => {
  74. switch (state.type) {
  75. case "1": //发行产品评价
  76. state.serviceType = 'product';
  77. requestData("11", { type: state.curCheckTab }, params);
  78. break;
  79. case "2": //业务办理满意度评价
  80. state.serviceType = 'service';
  81. requestData("22", { type: state.curCheckTab }, params);
  82. break;
  83. case "3": //权益产品评价
  84. state.serviceType = 'equity';
  85. requestData("33", { type: state.curCheckTab }, params);
  86. break;
  87. case "4": //业务员满意度评价
  88. state.serviceType = 'staff';
  89. requestData("44", { type: state.curCheckTab }, params);
  90. break;
  91. default:
  92. break;
  93. }
  94. };
  95. /*请求评价列表*/
  96. const requestData = (code, data, params) => {
  97. if (params == 1) {
  98. state.pageNo = 1
  99. }
  100. if (state.pageNo == 1 && state.dataList.length > 0) {
  101. state.dataList = []
  102. }
  103. const options = {
  104. type: 2,
  105. data: {
  106. "serviceType": state.serviceType,
  107. "scoreLevel": state.scoreLevel,
  108. "opId": getItem(StorageKeys.OpenId),
  109. "pageNo": state.pageNo,
  110. "pageSize": state.pageSize,
  111. },
  112. method: "POST",
  113. showLoading: true,
  114. };
  115. request(satisfactionEvaluation, options).then((res) => {
  116. //若不填评价内容,根据打分规则自动填充评价内容
  117. //差评展示:默认差评 2.5分及以下
  118. //中评展示:默认中评 2.5以上4.0以下
  119. //好评展示:默认好评 4.0及4.0以上
  120. const data = stringToJson(res.bizContent).data;
  121. console.log("stringToJson(res.bizContent)1", data)
  122. if (data) {
  123. for (var i = 0; i < data.length; i++) {
  124. if (data[i].score <= 2.5) {
  125. data[i].evaluate = '差评';
  126. } else if (data[i].score > 2.5 && data[i].score < 4) {
  127. data[i].evaluate = '中评';
  128. } else {
  129. data[i].evaluate = '好评';
  130. }
  131. data[i].insertTime = data[i].insertTime.split('T').join(' ');
  132. if (data[i].pictureUrl) {
  133. data[i].pictureUrlArr = data[i].pictureUrl.split(',')
  134. }
  135. }
  136. // state.dataList = data;
  137. state.dataList = [...data, ...state.dataList]
  138. } else {
  139. state.dataList = []
  140. }
  141. console.log("stringToJson(res.bizContent)2", state.dataList)
  142. })
  143. };
  144. // 触底加载
  145. onReachBottom(() => {
  146. if (state.dataList.length < state.pageNo * 10) return state.flags = true
  147. console.log("触底了")
  148. state.pageNo++
  149. fetchList(2)
  150. })
  151. </script>
  152. <style>
  153. page {
  154. background-color: #eef7f7;
  155. box-sizing: border-box;
  156. }
  157. </style>
  158. <style lang="scss" scoped>
  159. .list {
  160. margin-top: 30rpx;
  161. }
  162. .btn-divider {
  163. margin-bottom: 180rpx;
  164. }
  165. .evaluate-btn {
  166. width: 100%;
  167. position: fixed;
  168. bottom: 0rpx;
  169. padding: 30rpx 40rpx;
  170. background-color: #eef7f7;
  171. text-align: center;
  172. box-sizing: border-box;
  173. }
  174. .bottom-line {
  175. text-align: center;
  176. margin: 30rpx 0;
  177. }
  178. </style>