You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

evaluate-list.vue 5.3KB

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