Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  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. fetchList(1);
  47. });
  48. const goOrder = () => {
  49. uni.switchTab({
  50. url: "/pages/order/order"
  51. })
  52. }
  53. /* tab点击 */
  54. const tabClick = (tab) => {
  55. state.flags = false;
  56. console.log("tab", tab)
  57. state.curCheckTab = tab;
  58. if (tab == '全部') {
  59. state.scoreLevel = 0
  60. } else if (tab == '好评') {
  61. state.scoreLevel = 1
  62. } else if (tab == '中评') {
  63. state.scoreLevel = 2
  64. } else {
  65. state.scoreLevel = 3
  66. }
  67. requestData("11", { type: state.curCheckTab }, 1);
  68. };
  69. /* 根据不同条件获取数据 */
  70. const fetchList = (params) => {
  71. switch (state.type) {
  72. case "1": //发行产品评价
  73. state.serviceType = 'product';
  74. requestData("11", { type: state.curCheckTab }, params);
  75. break;
  76. case "2": //业务办理满意度评价
  77. state.serviceType = 'service';
  78. requestData("22", { type: state.curCheckTab }, params);
  79. break;
  80. case "3": //权益产品评价
  81. state.serviceType = 'equity';
  82. requestData("33", { type: state.curCheckTab }, params);
  83. break;
  84. case "4": //业务员满意度评价
  85. state.serviceType = 'staff';
  86. requestData("44", { type: state.curCheckTab }, params);
  87. break;
  88. default:
  89. break;
  90. }
  91. };
  92. /*请求评价列表*/
  93. const requestData = (code, data, params) => {
  94. if (params == 1) {
  95. state.pageNo = 1
  96. }
  97. if (state.pageNo == 1 && state.dataList.length > 0) {
  98. state.dataList = []
  99. }
  100. const options = {
  101. type: 2,
  102. data: {
  103. "serviceType": state.serviceType,
  104. "scoreLevel": state.scoreLevel,
  105. "opId": getItem(StorageKeys.OpenId),
  106. "pageNo": state.pageNo,
  107. "pageSize": state.pageSize,
  108. },
  109. method: "POST",
  110. showLoading: true,
  111. };
  112. request(satisfactionEvaluation, options).then((res) => {
  113. //若不填评价内容,根据打分规则自动填充评价内容
  114. //差评展示:默认差评 2.5分及以下
  115. //中评展示:默认中评 2.5以上4.0以下
  116. //好评展示:默认好评 4.0及4.0以上
  117. const data = stringToJson(res.bizContent).data;
  118. console.log("stringToJson(res.bizContent)1", data)
  119. if (data) {
  120. for (var i = 0; i < data.length; i++) {
  121. if (data[i].score <= 2.5) {
  122. data[i].evaluate = '差评';
  123. } else if (data[i].score > 2.5 && data[i].score < 4) {
  124. data[i].evaluate = '中评';
  125. } else {
  126. data[i].evaluate = '好评';
  127. }
  128. data[i].insertTime = data[i].insertTime.split('T').join(' ');
  129. if (data[i].pictureUrl) {
  130. data[i].pictureUrlArr = data[i].pictureUrl.split(',')
  131. }
  132. }
  133. // state.dataList = data;
  134. state.dataList = [...data, ...state.dataList]
  135. } else {
  136. state.dataList = []
  137. }
  138. console.log("stringToJson(res.bizContent)2", state.dataList)
  139. })
  140. };
  141. // 触底加载
  142. onReachBottom(() => {
  143. if (state.dataList.length < state.pageNo * 10) return state.flags = true
  144. console.log("触底了")
  145. state.pageNo++
  146. fetchList(2)
  147. })
  148. </script>
  149. <style>
  150. page {
  151. background-color: #eef7f7;
  152. box-sizing: border-box;
  153. }
  154. </style>
  155. <style lang="scss" scoped>
  156. .list {
  157. margin-top: 30rpx;
  158. }
  159. .btn-divider {
  160. margin-bottom: 180rpx;
  161. }
  162. .evaluate-btn {
  163. width: 100%;
  164. position: fixed;
  165. bottom: 0rpx;
  166. padding: 30rpx 40rpx;
  167. background-color: #eef7f7;
  168. text-align: center;
  169. box-sizing: border-box;
  170. }
  171. .bottom-line {
  172. text-align: center;
  173. margin: 30rpx 0;
  174. }
  175. </style>