您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

evaluate-list.vue 5.2KB

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