deal.vue 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403
  1. <template>
  2. <div class="deal-x">
  3. <van-nav-bar
  4. :title="title"
  5. left-text="返回"
  6. left-arrow
  7. @click-left="onClickLeft"
  8. ></van-nav-bar>
  9. <div class="userInfo">
  10. <van-row
  11. type="flex"
  12. class="imageName"
  13. justify="space-between"
  14. align="center"
  15. >
  16. <div class="userImage">
  17. <userImage
  18. class="about-me__avatar"
  19. :img_url="user_info.imgUrl"
  20. :user_name="user_info.name"
  21. width="1.12rem"
  22. height="1.12rem"
  23. v-if="user_info.imgUrl"
  24. ></userImage>
  25. <div style="width: 1.12rem;height: 1.12rem;background: #26A2FF;border-radius: 50%;overflow: hidden;display: flex;justify-content: center;align-items: center;" v-else>
  26. <img :src="defaultImgUrl" style="width: 80%;height: 80%;">
  27. <!-- <userImage
  28. class="about-me__avatar"
  29. :img_url="defaultImgUrl"
  30. user_name="用户"
  31. width="1.12rem"
  32. height="1.12rem"
  33. ></userImage> -->
  34. </div>
  35. <div class="info">
  36. <span
  37. >{{ user_info.name
  38. }}<van-icon
  39. name="notes-o"
  40. color="#E1B98B"
  41. style="margin-left: .1rem;"
  42. /></span>
  43. <p v-if="user_info.mobile != ''">手机:{{ user_info.mobile }}</p>
  44. </div>
  45. </div>
  46. <div class="user_leave" @click="dealCourseNum">
  47. <span>交易课程名额</span>
  48. </div>
  49. </van-row>
  50. </div>
  51. <div class="user_tabs">
  52. <van-tabs
  53. v-model="active"
  54. @click="activeChange"
  55. animated
  56. title-active-color="#26A2FF"
  57. >
  58. <van-tab
  59. v-for="(item, index) in activeList"
  60. :key="index"
  61. :title="item"
  62. ></van-tab>
  63. </van-tabs>
  64. </div>
  65. <div class="dealScroll">
  66. <scroller
  67. ref="courseScroller"
  68. :on-infinite="getMoreList"
  69. :list="courseList"
  70. noDataText="没有更多..."
  71. v-show="active == 0"
  72. >
  73. <div class="dealList">
  74. <courseList :dataList="courseList" :listType="2"></courseList>
  75. </div>
  76. </scroller>
  77. <scroller
  78. ref="recordScroller"
  79. :on-infinite="getMoreList"
  80. noDataText="没有更多..."
  81. :list="recordList"
  82. v-show="active == 1"
  83. >
  84. <div class="dealRecordList" v-show="active == 1">
  85. <div
  86. class="recordLi"
  87. v-for="(item, index) in recordList"
  88. :key="index"
  89. >
  90. <div class="flex-name-num">
  91. <p>{{ item.subjectName }}</p>
  92. <span :style="{color:item.toUserId == target_user_info.id ?'#26A2FF':'#eb6f6f'}"
  93. >{{ item.toUserId == target_user_info.id ? "收到" : "转出"
  94. }}{{ item.amount }}套</span
  95. >
  96. </div>
  97. <p>{{ item.content }}</p>
  98. <span>{{ item.createTime }}</span>
  99. </div>
  100. </div>
  101. <van-divider
  102. v-if="recordList.length != 0 && recordList.length == page1.total"
  103. style="line-height: .6rem;"
  104. >没有更多了...</van-divider
  105. >
  106. <noData :list="recordList" />
  107. </scroller>
  108. </div>
  109. </div>
  110. </template>
  111. <script>
  112. import Vue from "vue";
  113. import { Tab, Tabs } from "vant";
  114. import courseList from "../components/courseList";
  115. import { getDealerRecord } from "../api";
  116. import {setWxConfig} from '../utils'
  117. Vue.use(Tab);
  118. Vue.use(Tabs);
  119. export default {
  120. name: "deal",
  121. components: { courseList },
  122. data() {
  123. return {
  124. defaultImgUrl:require('../../../assets/images/courseUser.png'),
  125. title: "交易",
  126. activeList: ["待确认接收的名额", "已确认接收的名额"],
  127. active: 0,
  128. noDate: false,
  129. noDate1: false,
  130. page: {
  131. cur: 1,
  132. size: 10,
  133. total: 0
  134. },
  135. page1: {
  136. cur: 1,
  137. size: 15,
  138. total: 0
  139. },
  140. user_info: {
  141. imgUrl: "",
  142. id: "",
  143. name: "",
  144. mobile: ""
  145. },
  146. target_user_info: JSON.parse(localStorage.getItem("wx_user_info")),
  147. courseList: [],
  148. recordList: []
  149. };
  150. },
  151. activated(){
  152. this.init();
  153. },
  154. deactivated(){
  155. this.resetList();
  156. },
  157. created() {
  158. // this.init();
  159. if(this.$isWx){
  160. setWxConfig();
  161. }
  162. },
  163. methods: {
  164. // 初始化
  165. init() {
  166. this.user_info = this.$route.query;
  167. this.getList();
  168. this.getRecordList();
  169. },
  170. // 初始化数据
  171. resetList() {
  172. this.active = 0;
  173. this.page.cur = 1;
  174. this.page.total = 0;
  175. this.page1.cur = 1;
  176. this.page1.total = 0;
  177. this.noDate = false;
  178. this.noDate1 = false;
  179. this.courseList = [];
  180. this.recordList = [];
  181. },
  182. // 触底加载
  183. getMoreList(done) {
  184. if (this.active == 0) {
  185. if (!this.noDate) {
  186. setTimeout(() => {
  187. this.getList(done);
  188. }, 300);
  189. } else {
  190. this.$refs.courseScroller.finishInfinite(true);
  191. }
  192. } else {
  193. if (!this.noDate1) {
  194. setTimeout(() => {
  195. this.getRecordList(done);
  196. }, 300);
  197. } else {
  198. this.$refs.recordScroller.finishInfinite(true);
  199. }
  200. }
  201. },
  202. // 获取待确认的交易列表
  203. getList(done) {
  204. let data = {
  205. page: this.page.cur,
  206. pageSize: this.page.size,
  207. status: 1
  208. };
  209. getDealerRecord(this.$route.params.id, data).then(res => {
  210. res.list.forEach(item => {
  211. item.dealAmount = item.amount;
  212. item.subjectThumb = item.thumb;
  213. item.subjectPrice = item.price;
  214. delete item.amount;
  215. delete item.thumb;
  216. delete item.price;
  217. });
  218. this.courseList = this.courseList.concat(res.list);
  219. this.page.cur = res.current;
  220. this.page.total = res.total;
  221. if (res.pages == this.page.cur || res.pages == 0) {
  222. if (done) done(true);
  223. this.noDate = true;
  224. } else {
  225. if (done) done();
  226. this.page.cur++; //下拉一次页数+1
  227. this.noDate = false;
  228. }
  229. });
  230. },
  231. // 获取已交易的列表
  232. getRecordList(done) {
  233. let data = {
  234. page: this.page1.cur,
  235. pageSize: this.page1.size,
  236. status: 2
  237. };
  238. getDealerRecord(this.$route.params.id, data).then(res => {
  239. this.page1.cur = res.current;
  240. this.page1.total = res.total;
  241. this.recordList = this.recordList.concat(res.list);
  242. if (res.pages == this.page1.cur || res.pages == 0) {
  243. console.log("没有更多");
  244. if (done) done(true);
  245. this.noDate1 = true;
  246. } else {
  247. if (done) done();
  248. this.page1.cur++; //下拉一次页数+1
  249. this.noDate1 = false;
  250. }
  251. });
  252. },
  253. // 确认交易
  254. dealCourseNum() {
  255. this.$router.push(`/course/dealOrder/${this.$route.params.id}`);
  256. },
  257. // 标签切换
  258. activeChange(e) {
  259. this.active = e;
  260. },
  261. //导航左侧返回
  262. onClickLeft() {
  263. if(window.history.length>1){
  264. this.$router.go(-1);
  265. }else{
  266. this.$router.replace('/courseHome')
  267. }
  268. }
  269. }
  270. };
  271. </script>
  272. <style scoped lang="scss">
  273. @import url('../utils/navBar.scss');
  274. * {
  275. margin: 0;
  276. padding: 0;
  277. }
  278. .deal-x {
  279. background-color: #efefef;
  280. .userInfo {
  281. padding: 0.24rem 0.32rem;
  282. .userImage {
  283. display: flex;
  284. align-items: center;
  285. flex: 1;
  286. .info {
  287. display: flex;
  288. flex-direction: column;
  289. justify-content: center;
  290. margin-left: 0.2rem;
  291. span {
  292. font-size: 0.32rem;
  293. font-weight: 600;
  294. color: #000;
  295. line-height: 2;
  296. display: block;
  297. }
  298. p {
  299. font-size: 0.22rem;
  300. color: #222;
  301. line-height: 1;
  302. display: block;
  303. }
  304. }
  305. }
  306. .user_leave {
  307. padding: 0.15rem 0.3rem;
  308. font-size: 0.26rem;
  309. font-weight: 550;
  310. color: #26A2FF;
  311. border: 1px solid #26A2FF;
  312. border-radius: 0.1rem;
  313. line-height: 1.5;
  314. margin-left: .2rem;
  315. }
  316. }
  317. .user_tabs {
  318. margin: 0 0.2rem;
  319. border-radius: 0.1rem;
  320. position: relative;
  321. overflow: hidden;
  322. &::after {
  323. content: "";
  324. width: 1px;
  325. height: 60%;
  326. position: absolute;
  327. left: 50%;
  328. top: 20%;
  329. background-color: #898989;
  330. }
  331. }
  332. .dealScroll {
  333. height: calc(100vh - 3.5rem) !important;
  334. padding: 0 0.2rem;
  335. position: relative;
  336. &::after {
  337. content: "";
  338. width: calc(100% - 0.2rem);
  339. height: 1px;
  340. position: absolute;
  341. top: 0;
  342. left: 0.1rem;
  343. background-color: #efefef;
  344. }
  345. .dealList {
  346. padding: 0.15rem 0.2rem 0;
  347. border-radius: 0.1rem;
  348. }
  349. .dealRecordList {
  350. padding: 0 0.2rem;
  351. border-radius: 0.1rem;
  352. margin-top: 0.1rem;
  353. .recordLi {
  354. background: #fff;
  355. padding: 0 0.2rem;
  356. overflow: hidden;
  357. &:not(:nth-last-child(1)) {
  358. border-bottom: 1px solid #efefef;
  359. }
  360. &:first-child {
  361. border-radius: 0.1rem 0.1rem 0 0;
  362. }
  363. &:last-child {
  364. border-radius: 0 0 0.1rem 0.1rem;
  365. }
  366. .flex-name-num {
  367. display: flex;
  368. justify-content: space-between;
  369. align-items: center;
  370. padding-top: 0.1rem;
  371. & > p {
  372. font-size: 0.32rem;
  373. color: #000;
  374. line-height: 1.5;
  375. flex: 1;
  376. }
  377. & > span {
  378. font-size: 0.28rem;
  379. color: #000;
  380. line-height: 2;
  381. margin-left: 0.1rem;
  382. }
  383. }
  384. & > p {
  385. font-size: 0.28rem;
  386. color: #666;
  387. line-height: 1.3;
  388. }
  389. & > span {
  390. font-size: 0.28rem;
  391. color: #666;
  392. line-height: 1;
  393. display: block;
  394. margin-top: 0.2rem;
  395. margin-bottom: 0.1rem;
  396. }
  397. }
  398. }
  399. }
  400. }
  401. </style>