hwq 3 år sedan
förälder
incheckning
b22f4c9e06
47 ändrade filer med 4611 tillägg och 2031 borttagningar
  1. 8 1
      api/set.js
  2. 53 1
      api/user.js
  3. 16 1
      api/wallet.js
  4. 545 0
      components/lb-picker/README.md
  5. 87 0
      components/lb-picker/index.vue
  6. 0 0
      components/lb-picker/lib/custom-parse-format.min.js
  7. 0 0
      components/lb-picker/lib/dayjs.min.js
  8. 1 0
      components/lb-picker/lib/object-support.min.js
  9. 93 0
      components/lb-picker/mixins/index.js
  10. 378 0
      components/lb-picker/pickers/date-selector-picker.vue
  11. 135 0
      components/lb-picker/pickers/multi-selector-picker.vue
  12. 108 0
      components/lb-picker/pickers/selector-picker.vue
  13. 116 0
      components/lb-picker/pickers/unlinked-selector-picker.vue
  14. 40 0
      components/lb-picker/style/picker-item.scss
  15. 166 0
      components/lb-picker/style/picker.scss
  16. 121 0
      components/lb-picker/utils.js
  17. 11 5
      components/seckill/seckill.vue
  18. 45 62
      pages.json
  19. 48 11
      pages/hall/halllist.vue
  20. 32 108
      pages/index/index.vue
  21. 9 5
      pages/index/message.vue
  22. 59 6
      pages/index/messageInfo.vue
  23. 0 236
      pages/money/account.vue
  24. 88 41
      pages/money/money.vue
  25. 23 61
      pages/money/qudou.vue
  26. 201 253
      pages/money/wallet.vue
  27. 19 28
      pages/money/withdrawal.vue
  28. 101 0
      pages/order/index.vue
  29. 647 77
      pages/order/order1.vue
  30. 2 2
      pages/product/seckill.vue
  31. 10 23
      pages/user/approve.vue
  32. 226 110
      pages/user/award.vue
  33. 0 310
      pages/user/coupon.vue
  34. 0 156
      pages/user/favorites.vue
  35. 90 20
      pages/user/gzsq.vue
  36. 421 0
      pages/user/myAppointment.vue
  37. 16 5
      pages/user/myfans.vue
  38. 541 0
      pages/user/mygs.vue
  39. 0 249
      pages/user/myjj.vue
  40. 0 200
      pages/user/scoreAccumulate.vue
  41. 154 55
      pages/user/user.vue
  42. BIN
      static/icon/gou.png
  43. BIN
      static/img/gssy.png
  44. BIN
      static/img/order1.png
  45. BIN
      static/img/order2.png
  46. 0 4
      utils/rocessor.js
  47. 1 1
      utils/tabbar.js

+ 8 - 1
api/set.js

@@ -43,4 +43,11 @@ export function applelogin(data) {
 		data
 		data
 	});
 	});
 }
 }
-// #endif
+// #endif
+export function realName(data) {
+	return request({
+		url: '/api/rname',
+		method: 'post',
+		data
+	});
+}

+ 53 - 1
api/user.js

@@ -110,4 +110,56 @@ export function getMyfans(data) {
 	});
 	});
 }
 }
 
 
-
+// 转账预约券
+export function transfer_accounts(data) {
+	return request({
+		url: '/api/auction/transfer_accounts',
+		method: 'post',
+		data
+	});
+}
+
+// 申请馆长
+export function apply(data) {
+	return request({
+		url: '/api/auction/apply',
+		method: 'post',
+		data
+	});
+}
+
+// 实名认证查询
+export function rate(data) {
+	return request({
+		url: '/api/rate',
+		method: 'get',
+		data
+	});
+}
+
+// 馆长申请查询
+export function apply_status(data) {
+	return request({
+		url: '/api/auction/apply_status',
+		method: 'get',
+		data
+	});
+}
+
+//文章列表
+export function article(data,id) {
+	return request({
+		url: '/api/article/list/'+id,
+		method: 'GET',
+		data
+	});
+}
+
+//文章详情
+export function details(data,id) {
+	return request({
+		url: '/api/article/details/'+id,
+		method: 'GET',
+		data
+	});
+}

+ 16 - 1
api/wallet.js

@@ -115,5 +115,20 @@ export function balance(data) {
 	});
 	});
 }
 }
 
 
+//	积分列表
+export function integrallist(data) {
+	return request({
+		url: '/api/integral/list',
+		method: 'get',
+		data
+	});
+}
 
 
-
+//	预约券列表
+export function anticipatelist(data) {
+	return request({
+		url: '/api/anticipate/list',
+		method: 'get',
+		data
+	});
+}

+ 545 - 0
components/lb-picker/README.md

@@ -0,0 +1,545 @@
+<p align="center">
+  <a href="https://github.com/liub1934/uni-lb-picker">
+    <img src="https://img.shields.io/github/stars/liub1934/uni-lb-picker">
+  </a>
+  <a href="https://github.com/liub1934/uni-lb-picker/fork">
+    <img src="https://img.shields.io/github/forks/liub1934/uni-lb-picker">
+  </a>
+  <a href="https://github.com/liub1934/uni-lb-picker/issues">
+    <img src="https://img.shields.io/github/issues/liub1934/uni-lb-picker">
+  </a>
+  <a href="https://www.npmjs.com/package/uni-lb-picker">
+    <img src="https://img.shields.io/npm/v/uni-lb-picker">
+  </a>
+  <a href="https://npmcharts.com/compare/uni-lb-picker?minimal=true">
+    <img src="https://img.shields.io/npm/dm/uni-lb-picker">
+  </a>
+  <a href="https://standardjs.com">
+    <img src="https://img.shields.io/badge/code%20style-standard-brightgreen">
+  </a>
+  <a href="https://github.com/liub1934/uni-lb-picker/blob/master/LICENSE">
+    <img src="https://img.shields.io/github/license/liub1934/uni-lb-picker">
+  </a>
+</p>
+
+插件市场里面的 picker 选择器不满足自己的需求,所以自己写了一个简单的 picker 选择器,可扩展、可自定义,一般满足日常需要。  
+Github:[点击前往](https://github.com/liub1934/uni-lb-picker)  
+插件市场:[点击前往](https://ext.dcloud.net.cn/plugin?id=1111)  
+H5 Demo:[点击预览](https://github.liubing.me/uni-lb-picker)
+
+> 如果问题最好去 github 反馈,插件市场评论区留下五星好评即可, [点我去反馈](https://github.com/liub1934/uni-lb-picker/issues/new)  
+> 最好提供一下使用的什么端,数据结构及大概的代码,我好复现找问题,不要直接提`怎么xxx报错了`等没意义的问题,神仙也不知道你为啥报错了。
+
+> **由于之前`cancel`拼写失误,写成了`cancle`,`v1.08`现已修正,如果之前版本有使用`cancel`事件的,更新后请及时修正。**
+
+## 兼容性
+
+App + Nvue + H5 + 各平台小程序(快应用及 360 未测试)
+
+## 功能
+
+- 单选
+- 多级联动,非多级联动,理论支持任意级数
+- 省市区选择,基于多级联动
+- 日期选择器,年月日时分秒可自由组合选择(引入了`dayjs`方便处理日期)
+- 自定义选择器头部确定取消按钮颜色及插槽支持
+- 选择器可视区自定义滚动个数
+- 自定义数据字段,满足不同人的需求
+- 自定义选择器样式
+- formatter 格式化自定义显示
+- 单选及非联动选择支持扁平化的简单数据,如下形式:
+
+```javascript
+// 单选列表
+list1: ['选项1', '选项2', '选项2'],
+// 非联动选择列表
+list2: [
+  ['选项1', '选项2', '选项3'],
+  ['选项11', '选项22', '选项33'],
+  ['选项111', '选项222', '选项333']
+]
+```
+
+## 引入插件
+
+单独引入,在需要使用的页面上 import 引入即可
+
+```html
+<template>
+  <view>
+    <lb-picker></lb-picker>
+  </view>
+</template>
+
+<script>
+  import LbPicker from '@/components/lb-picker'
+  export default {
+    components: {
+      LbPicker
+    }
+  }
+</script>
+```
+
+全局引入,`main.js`中 import 引入并注册即可全局使用
+
+```jsvascript
+import LbPicker from '@/components/lb-picker'
+Vue.component("lb-picker", LbPicker)
+```
+
+easycom 引入(推荐使用此方式)
+
+`pages.json`加上如下配置:
+
+```json
+"easycom": {
+  "autoscan": true,
+  "custom": {
+    "lb-picker": "@/components/lb-picker/index.vue"
+  }
+}
+```
+
+npm 安装引入:
+
+```shell
+npm install uni-lb-picker
+```
+
+```jsvascript
+import LbPicker from 'uni-lb-picker'
+```
+
+## 选择器数据格式
+
+### 单选
+
+常规数据
+
+```javascript
+list: [
+  {
+    label: '选项1',
+    value: '1'
+  },
+  {
+    label: '选项2',
+    value: '2'
+  }
+]
+```
+
+扁平化简单数据
+
+```javascript
+list: ['选项1', '选项2']
+```
+
+### 多级联动
+
+```javascript
+list: [
+  {
+    label: '选项1',
+    value: '1',
+    children: [
+      {
+        label: '选项1-1',
+        value: '1-1',
+        children: [
+          {
+            label: '选项1-1-1',
+            value: '1-1-1'
+          }
+        ]
+      }
+    ]
+  }
+]
+```
+
+### 非联动选择
+
+常规数据
+
+```javascript
+list: [
+  [
+    { label: '选项1', value: '1' },
+    { label: '选项2', value: '2' },
+    { label: '选项3', value: '3' }
+  ],
+  [
+    { label: '选项11', value: '11' },
+    { label: '选项22', value: '22' },
+    { label: '选项33', value: '33' }
+  ],
+  [
+    { label: '选项111', value: '111' },
+    { label: '选项222', value: '222' },
+    { label: '选项333', value: '333' }
+  ]
+]
+```
+
+扁平化简单数据
+
+```javascript
+list: [
+  ['选项1', '选项2', '选项3'],
+  ['选项11', '选项22', '选项33'],
+  ['选项111', '选项222', '选项333']
+]
+```
+
+## 调用显示选择器
+
+通过`ref`形式手动调用`show`方法显示,隐藏同理调用`hide`
+
+```html
+<lb-picker ref="picker"></lb-picker>
+```
+
+```javascript
+this.$refs.picker.show() // 显示
+this.$refs.picker.hide() // 隐藏
+```
+
+`v1.1.3`新增,将需要点击的元素包裹在`lb-picker`中即可。
+
+```html
+<lb-picker>
+  <button>点我直接打开选择器</button>
+</lb-picker>
+```
+
+## 绑定值及设置默认值
+
+支持 vue 中`v-model`写法绑定值,无需自己维护选中值的索引。
+
+```javascript
+<lb-picker v-model="value1"></lb-picker>
+<lb-picker v-model="value2"></lb-picker>
+<lb-picker v-model="value3"></lb-picker>
+
+data () {
+  return {
+    value1: '', // 单选
+    value2: [], // 多列联动选择
+    value2: '2021-01-05', // 日期,设置一个具体的日期,留空则默认选中当前日期
+  }
+}
+```
+
+## 多个选择器
+
+通过设置不同的`ref`,然后调用即可
+
+```javascript
+<lb-picker ref="picker1"></lb-picker>
+<lb-picker ref="picker2"></lb-picker>
+
+this.$refs.picker1.show() // picker1显示
+this.$refs.picker2.show() // picker2显示
+```
+
+## 省市区选择
+
+省市区选择是基于多列联动选择,数据来源:[https://github.com/modood/Administrative-divisions-of-China](https://github.com/modood/Administrative-divisions-of-China),  
+省市区文件位于`/pages/demos/area-data-min.js`,自行引入即可,可参考`demo3省市区选择`,  
+也可使用自己已有的省市区数据,如果数据字段不一样,也可以自定义,参考下方自定义数据字段。
+
+## 自定义数据字段
+
+为了满足不同人的需求,插件支持自定义数据字段名称, 插件默认的数据字段如下形式:
+
+```javascript
+list: [
+  {
+    label: '选择1',
+    value: 1,
+    children: []
+  },
+  {
+    label: '选择1',
+    value: 1,
+    children: []
+  }
+]
+```
+
+如果你的数据字段和上面不一样,如下形式:
+
+```javascript
+list: [
+  {
+    text: '选择1',
+    id: 1,
+    child: []
+  },
+  {
+    text: '选择1',
+    id: 1,
+    child: []
+  }
+]
+```
+
+通过设置参数中的`props`即可,如下所示:
+
+```javascript
+<lb-picker :props="myProps"></lb-picker>
+
+data () {
+  return {
+    myProps: {
+      label: 'text',
+      value: 'id',
+      children: 'child'
+    }
+  }
+}
+```
+
+## 插槽使用
+
+选择器支持一些可自定义化的插槽,如选择器的取消和确定文字按钮,如果需要对其自定义处理的话,比如加个 icon 图标之类的,可使用插槽,使用方法如下:
+
+```html
+<lb-picker>
+  <view slot="cancel-text">我是自定义取消</view>
+  <view slot="confirm-text">我是自定义确定</view>
+</lb-picker>
+```
+
+也可参考示例中的`demo5`,自定义插槽元素样式交给开发者自由调整,插槽仅提供预留位置。
+
+其他插槽见下。
+
+## 参数及事件
+
+### Props
+
+#### 通用 Props
+
+| 参数                   | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | 类型                                      | 可选值                                                                                                | 默认值             |
+| :--------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :---------------------------------------- | :---------------------------------------------------------------------------------------------------- | :----------------- |
+| value/v-model          | 绑定值,联动选择为 Array 类型                                                                                                                                                                                                                                                                                                                                                                                                                                             | String/Number/Array                       | -                                                                                                     | 日期类型为当前日期 |
+| mode                   | 选择器类型                                                                                                                                                                                                                                                                                                                                                                                                                                                                | String                                    | selector 单选/multiSelector 多级联动/unlinkedSelector 多级非联动/dateSelector 日期选择`(v1.1.9 新增)` | selector           |
+| cancel-text            | 取消文字                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | String                                    | -                                                                                                     | 取消               |
+| cancel-color           | 取消文字颜色                                                                                                                                                                                                                                                                                                                                                                                                                                                              | String                                    | -                                                                                                     | #999               |
+| confirm-text           | 确定文字                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | String                                    | -                                                                                                     | 确定               |
+| confirm-color          | 确定文字颜色                                                                                                                                                                                                                                                                                                                                                                                                                                                              | String                                    | -                                                                                                     | #007aff            |
+| empty-text             | `(v1.0.7 新增)`选择器列表为空的时候显示的文字                                                                                                                                                                                                                                                                                                                                                                                                                             | String                                    | -                                                                                                     | 暂无数据           |
+| empty-color            | `(v1.0.7 新增)`暂无数据文字颜色                                                                                                                                                                                                                                                                                                                                                                                                                                           | String                                    | -                                                                                                     | #999               |
+| column-num             | 可视滚动区域内滚动个数,最好设置奇数值                                                                                                                                                                                                                                                                                                                                                                                                                                    | Number                                    | -                                                                                                     | 5                  |
+| radius                 | 选择器顶部圆角,支持 rpx,如 radius="10rpx"                                                                                                                                                                                                                                                                                                                                                                                                                               | String                                    | -                                                                                                     | -                  |
+| column-style           | `(v1.1.6 重新新增)`选择器默认样式,仅`nvue`支持,其他端见下`选择器自定义样式`说明                                                                                                                                                                                                                                                                                                                                                                                         | Object                                    | -                                                                                                     | -                  |
+| active-column-style    | `(v1.1.6 重新新增)`选择器选中样式,仅`nvue`支持,其他端见下`选择器自定义样式`说明                                                                                                                                                                                                                                                                                                                                                                                         | Object                                    | -                                                                                                     | -                  |
+| loading                | 选择器是否显示加载中,可使用 loading 插槽自定义加载效果                                                                                                                                                                                                                                                                                                                                                                                                                   | Boolean                                   | -                                                                                                     | -                  |
+| mask-color             | 遮罩层颜色                                                                                                                                                                                                                                                                                                                                                                                                                                                                | String                                    | -                                                                                                     | rgba(0, 0, 0, 0.4) |
+| show-mask              | `(v1.1.0 新增)`是否显示遮罩层                                                                                                                                                                                                                                                                                                                                                                                                                                             | Boolean                                   | true/false                                                                                            | true               |
+| close-on-click-mask    | 点击遮罩层是否关闭选择器                                                                                                                                                                                                                                                                                                                                                                                                                                                  | Boolean                                   | true/false                                                                                            | true               |
+| ~~change-on-init~~     | ~~(v1.0.7 已弃用)初始化时是否触发 change 事件~~                                                                                                                                                                                                                                                                                                                                                                                                                           | Boolean                                   | true/false                                                                                            | -                  |
+| dataset                | `(v1.0.7 新增)`可以向组件中传递任意的自定义的数据(对象形式数据),如`:dataset="{name:'test'}"`,在`confirm`或`change`事件中可以取到                                                                                                                                                                                                                                                                                                                                      | Object                                    | -                                                                                                     | -                  |
+| show-header            | `(v1.0.8 新增)`是否显示选择器头部                                                                                                                                                                                                                                                                                                                                                                                                                                         | Boolean                                   | -                                                                                                     | true               |
+| inline                 | `(v1.0.8 新增)`inline 模式,开启后默认显示选择器,无需点击弹出,可以配合`show-header`一起使用                                                                                                                                                                                                                                                                                                                                                                             | Boolean                                   | -                                                                                                     | -                  |
+| z-index                | `(v1.0.9 新增)`选择器层级,遮罩层默认-1                                                                                                                                                                                                                                                                                                                                                                                                                                   | Number                                    | -                                                                                                     | 999                |
+| safe-area-inset-bottom | `(v1.1.4 新增)`是否留出底部安全距离(nvue 无效)                                                                                                                                                                                                                                                                                                                                                                                                                          | Boolean                                   | true/false                                                                                            | true               |
+| disabled               | `(v1.1.4 新增)`是否禁用选择器,禁用后无法弹出选择器                                                                                                                                                                                                                                                                                                                                                                                                                       | Boolean                                   | -                                                                                                     | -                  |
+| align                  | `(v1.1.6 新增)`选择器中文字对齐方式,默认居中                                                                                                                                                                                                                                                                                                                                                                                                                             | String                                    | left/center/right                                                                                     | center             |
+| press-enable           | `(v1.1.6 新增)`是否开启长按选择器数据`showtoast`弹出`label`提示,部分情况下选择器数据文字过长会显示省略号,如需查看完整的文字内容,可开启此选项,长按后会`showtoast`弹出完整的文字内容,默认不开启(支付宝小程序暂不支持[详情](https://ask.dcloud.net.cn/question/106237))                                                                                                                                                                                               | Boolean                                   | -                                                                                                     | -                  |
+| press-time             | `(v1.1.6 新增)`长按触发时间,单位毫秒 ms                                                                                                                                                                                                                                                                                                                                                                                                                                  | Number                                    | -                                                                                                     | 500                |
+| formatter              | `(v1.1.7 新增)`格式化自定义选择器文字内容,`Function`类型,`return`一个字符串(日期选择器`百度、支付宝、头条小程序`不支持,其他选择器仅`app` `nvue` `h5`支持),`item`当前项信息,`rowIndex`当前数据所在行数,`columnIndex`当前数据所在列数,写法参考[demo14](https://github.com/liub1934/uni-lb-picker/blob/master/pages/demos/demo14/demo14.vue#L206),日期选择器可参考[demo16](https://github.com/liub1934/uni-lb-picker/blob/master/pages/demos/demo16/demo16.vue#L245) | Function({ item, rowIndex, columnIndex }) | -                                                                                                     |
+
+#### 单选、多级联动、非联动选择 Props
+
+| 参数  | 说明                                                                  | 类型   | 可选值 | 默认值                                            |
+| :---- | :-------------------------------------------------------------------- | :----- | :----- | :------------------------------------------------ |
+| list  | 选择器数据(v1.0.7 单选及非联动多选支持扁平数据:['选项 1', '选项 2']) | Array  | -      | -                                                 |
+| level | 多列联动层级,仅 mode 为 multiSelector 有效                           | Number | -      | 1                                                 |
+| props | 自定义数据字段                                                        | Object | -      | {label:'label',value:'value',children:'children'} |
+
+#### 日期选择 Props
+
+| 参数               | 说明                                                                                                                                                                                                                | 类型    | 可选值     | 默认值                                                                       |
+| :----------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :------ | :--------- | :--------------------------------------------------------------------------- |
+| display-format     | 日期选择显示的颗粒格式,见下方`displayFormat、format说明`,可自由组合,如`YYYY-MM-DD`,显示的就是选择`年月日`。`重要说明:始终是以-为分隔符,始终是以-为分隔符, 始终是以-为分隔符`                                 | String  | -          | YYYY-MM-DD                                                                   |
+| format             | 选择器返回的日期格式,见下方`displayFormat、format说明`,如配置`YYYY年MM月DD日`选择器确定后返回显示的值为`2021年01月05号`或者`YYYY-MM-DD`返回的就是`2021-01-05`,可以自由组合,需要和`display-format`参数配合使用。 | String  | -          | YYYY-MM-DD                                                                   |
+| start-date         | 开始日期,可精确到秒,如`2018-08-08 08:08:08`                                                                                                                                                                       | String  | -          | -                                                                            |
+| end-date           | 结束日期,可精确到秒,如`2021-08-08 08:08:08`                                                                                                                                                                       | String  | -          | -                                                                            |
+| default-time-limit | 默认显示的日期选择范围,默认当前日期前 20 年和后 20 年,配置`start-date`或`end-date`后失效                                                                                                                          | Number  | -          | 20                                                                           |
+| is-show-chinese    | 是否显示日期选择器年月日时分秒中文文字,默认显示                                                                                                                                                                    | Boolean | true/false | true                                                                         |
+| ch-config          | 显示的日期选择器年月日时分秒文字配置                                                                                                                                                                                | Object  | -          | {year: '年', month: '月', day: '日', hour: '时', minute: '分', second: '秒'} |
+
+### displayFormat、format 说明
+
+| 标识 | 示例  | 描述            |
+| :--- | :---- | :-------------- |
+| YY   | 18    | 年,两位数      |
+| YYYY | 2018  | 年,四位数      |
+| M    | 1-12  | 月,从 1 开始   |
+| MM   | 01-12 | 月,两位数字    |
+| D    | 1-31  | 日              |
+| DD   | 01-31 | 日,两位数      |
+| H    | 0-23  | 24 小时         |
+| HH   | 00-23 | 24 小时,两位数 |
+| h    | 1-12  | 12 小时         |
+| hh   | 01-12 | 12 小时,两位数 |
+| m    | 0-59  | 分钟            |
+| mm   | 00-59 | 分钟,两位数    |
+| s    | 0-59  | 秒              |
+| ss   | 00-59 | 秒,两位数      |
+
+### 方法
+
+| 方法名         | 说明                                   | 参数            | 返回值                                                                                                       |
+| :------------- | :------------------------------------- | :-------------- | :----------------------------------------------------------------------------------------------------------- |
+| show           | 打开选择器                             | -               |                                                                                                              |
+| hide           | 关闭选择器                             | -               |                                                                                                              |
+| getColumnsInfo | (v1.1.0 新增)根据 value 获取选择器信息 | 绑定值的`value` | 同`change` `confirm`回调参数,如果传入的`value`获取不到信息则只返回一个含有`dataset`的对象,具体自行打印查看 |
+
+`getColumnsInfo`注意事项:
+
+- 需要组件加载完成后调用才有效,即`console.log(this.$refs.picker)`打印有内容,否则会报错,可在`onReady`中进行调用。
+- 如果动态设置`list`后马上调用`getColumnsInfo`会无法取到相关信息,可以加个`setTimeout`解决,如下形式:
+
+```javascript
+onReady () {
+  this.list = [{ label: '测试', value: 1 }] // 动态设置一个list
+  setTimeout(() => {
+    const info = that.$refs.picker.getColumnsInfo(xx)
+    console.log(info)
+  }, 0)
+}
+```
+
+### Events
+
+| 事件名称 | 说明                                     | 回调参数                                                                                                                                                                                                                                                                                                                                                         |
+| :------- | :--------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| show     | 选择器打开时触发                         | -                                                                                                                                                                                                                                                                                                                                                                |
+| hide     | 选择器隐藏时触发                         | -                                                                                                                                                                                                                                                                                                                                                                |
+| change   | 选择器滚动时触发,此时不会改变绑定的值   | `{ index, item, value, change }` `index`触发滚动后新的索引,单选时是具体的索引值,多列联动选择时为数组。`item`触发滚动后新的的完整内容,包括`label`、`value`等,日期选择器则为日期相关内容,单选时为对象,多列选择时为数组对象。`value`触发滚动后新的 value 值,单列选择时为具体值,多列联动选择时为数组。`change`触发事件的类型,详情参考下面的 change 事件备注 |
+| confirm  | 点击选择器确定时触发,此时会改变绑定的值 | 同上`change`事件说明                                                                                                                                                                                                                                                                                                                                             |
+| cancel   | 点击选择器取消时触发                     | 同上`change`事件说明                                                                                                                                                                                                                                                                                                                                             |
+
+### `change` 事件备注
+
+如果绑定的值是空的,`change`触发后里面的内容都是列表的第一项。  
+`change`事件会在以下情况触发:
+
+- 初始化
+- 绑定值 value 变化
+- 选择器 list 列表变化
+- 滚动选择器
+
+以上情况会在回调函数中都可以取到`change`变化的类型,对应上面的情况包括以下:
+
+- `init`
+- `value`
+- `list`
+- `scroll`
+
+根据这些类型大家可以在`change`的时候按需处理自己的业务逻辑,`init`现在指挥在调用选择器弹出的时候触发。  
+下面的说明情况已失效,如需要在页面显示的时候根据`value`的值显示相应的中文,调用`v1.10`新增的方法`getColumnsInfo`,传入绑定的值即可获取到你想要的所有信息。  
+~~比如一种常见的情况,有默认值的时候需要显示默认值的文字,此时可以`change`事件中判断`change`的类型是否是`init`,如果是的话可以取事件回调中的`item`进行显示绑定值对应的文字信息。~~
+
+```javascript
+handleChange (e) {
+  if (e.change === 'init') {
+    console.log(e.item.label) // 单选 选项1
+    console.log(e.item.map(item => item.label).join('-')) // 多选 选项1-选项11
+  }
+}
+```
+
+### 插槽
+
+| 插槽名        | 说明                   |
+| :------------ | :--------------------- |
+| cancel-text   | 选择器取消文字插槽     |
+| action-center | 选择器顶部中间插槽     |
+| confirm-text  | 选择器确定文字插槽     |
+| loading       | 选择器 loading 插槽    |
+| empty         | 选择器 空数据 插槽     |
+| header-top    | 选择器头部顶部插槽     |
+| header-bottom | 选择器头部底部插槽     |
+| picker-top    | 选择器滚动部分顶部插槽 |
+| picker-bottom | 选择器滚动部分底部插槽 |
+
+### 选择器自定义样式
+
+> nvue 专属写法,需要定义`column-style`和`active-column-style`,写法如下:
+
+```html
+<lb-picker
+  :column-style="columnStyle"
+  :active-column-style="activeColumnStyle"
+></lb-picker>
+```
+
+```javascript
+data () {
+  return {
+    // 默认样式
+    columnStyle: {
+      color: '#f0ad4e'
+    },
+    // 选择样式
+    activeColumnStyle: {
+      color: '#007aff',
+      fontWeight: 700
+    }
+  }
+}
+```
+
+> 其他端写法,覆盖默认样式即可。
+
+```css
+<style lang="scss" scoped>
+/deep/ .lb-picker {
+  .lb-picker-column-label {
+    color: #f0ad4e;
+  }
+  .lb-picker-column-active {
+    .lb-picker-column-label {
+      color: #007aff;
+      font-weight: 700;
+    }
+  }
+}
+</style>
+```
+
+完整代码可以参考`demo9`。
+
+### 获取选中值的文字
+
+`@confirm`事件中可以拿到:
+
+单选:
+
+```javascript
+handleConfirm (e) {
+  console.log(e.item.label) // 选项1
+}
+```
+
+联动选择:
+
+```javascript
+handleConfirm (e) {
+  console.log(e.item.map(item => item.label).join('-')) // 选项1-选项11
+}
+```
+
+## Tips
+
+微信小程序端,滚动时在 iOS 自带振动反馈,可在系统设置 -> 声音与触感 -> 系统触感反馈中关闭
+
+## 其他
+
+其他功能参考示例 Demo 代码。

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 87 - 0
components/lb-picker/index.vue


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
components/lb-picker/lib/custom-parse-format.min.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
components/lb-picker/lib/dayjs.min.js


+ 1 - 0
components/lb-picker/lib/object-support.min.js

@@ -0,0 +1 @@
+!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):t.dayjs_plugin_objectSupport=n()}(this,function(){"use strict";return function(t,n,e){var i=n.prototype,r=function(t){var n,r=t.date,o=t.utc,a={};if(!((n=r)instanceof Date)&&!(n instanceof Array)&&n instanceof Object){if(!Object.keys(r).length)return new Date;var u=o?e.utc():e();Object.keys(r).forEach(function(t){var n,e;a[(n=t,e=i.$utils().p(n),"date"===e?"day":e)]=r[t]});var c=a.day||(a.year||a.month>=0?1:u.date()),d=a.year||u.year(),f=a.month>=0?a.month:a.year||a.day?0:u.month(),s=a.hour||0,h=a.minute||0,b=a.second||0,y=a.millisecond||0;return o?new Date(Date.UTC(d,f,c,s,h,b,y)):new Date(d,f,c,s,h,b,y)}return r},o=i.parse;i.parse=function(t){t.date=r.bind(this)(t),o.bind(this)(t)};var a=i.set,u=i.add,c=function(t,n,e,i){if(void 0===i&&(i=1),n instanceof Object){var r=this;return Object.keys(n).forEach(function(e){r=t.bind(r)(n[e]*i,e)}),r}return t.bind(this)(n*i,e)};i.set=function(t,n){return n=void 0===n?t:n,c.bind(this)(function(t,n){return a.bind(this)(n,t)},n,t)},i.add=function(t,n){return c.bind(this)(u,t,n)},i.subtract=function(t,n){return c.bind(this)(u,t,n,-1)}}});

+ 93 - 0
components/lb-picker/mixins/index.js

@@ -0,0 +1,93 @@
+import { getColumns, isObject, isFunction } from '../utils'
+export const commonMixin = {
+  data () {
+    return {
+      isConfirmChange: false,
+      indicatorStyle: `height: 34px`,
+      pressTimeout: null
+    }
+  },
+  created () {
+    this.init('init')
+  },
+  methods: {
+    init (changeType) {
+      if (this.list && this.list.length) {
+        const column = getColumns({
+          value: this.value,
+          list: this.list,
+          mode: this.mode,
+          props: this.props,
+          level: this.level
+        })
+        const { columns, value, item, index } = column
+        this.selectValue = value
+        this.selectItem = item
+        this.pickerColumns = columns
+        this.pickerValue = index
+        this.$emit('change', {
+          value: this.selectValue,
+          item: this.selectItem,
+          index: this.pickerValue,
+          change: changeType
+        })
+      }
+    },
+    touchstart (e) {
+      if (!this.pressEnable) return
+      clearTimeout(this.pressTimeout)
+      this.pressTimeout = setTimeout(() => {
+        let item = {}
+        let toastTitle = ''
+        // #ifdef APP-NVUE
+        item = e.target.dataset.item
+        // #endif
+
+        // #ifdef H5
+        item = JSON.parse(e.currentTarget.dataset.item)
+        // #endif
+
+        // #ifndef APP-NVUE || H5
+        item = e.currentTarget.dataset.item
+        // #endif
+
+        // #ifdef APP-PLUS || H5
+        toastTitle = this.getLabel(item)
+        // #endif
+
+        // #ifndef APP-PLUS || H5
+        toastTitle = item[this.props.label] || item
+        // #endif
+        uni.showToast({
+          title: toastTitle,
+          icon: 'none'
+        })
+      }, this.pressTime)
+    },
+    touchmove () {
+      if (!this.pressEnable) return
+      clearTimeout(this.pressTimeout)
+    },
+    touchend () {
+      if (!this.pressEnable) return
+      clearTimeout(this.pressTimeout)
+    },
+    getLabel (item, rowIndex, columnIndex) {
+      if (this.formatter && isFunction(this.formatter)) {
+        return this.formatter({ item, rowIndex, columnIndex })
+      } else {
+        return item[this.props.label] || item
+      }
+    }
+  },
+  watch: {
+    value () {
+      if (!this.isConfirmChange) {
+        this.init('value')
+      }
+    },
+    list () {
+      this.init('list')
+    }
+  }
+}

+ 378 - 0
components/lb-picker/pickers/date-selector-picker.vue

@@ -0,0 +1,378 @@
+<template>
+  <view class="lb-selector-picker lb-picker-item"
+    :style="{ height: height }">
+    <picker-view :value="pickerValue"
+      :style="{ height: height }"
+      :indicator-style="indicatorStyle"
+      @change="handleChange">
+      <picker-view-column v-for="(column, index) in pickerColumns"
+        :key="column.name">
+        <view v-for="item in column.list || []"
+          :class="[
+            'lb-picker-column',
+            item.value === selectValue[index]
+              ? 'lb-picker-column-active'
+              : ''
+          ]"
+          :key="item.value">
+          <!-- #ifdef APP-PLUS || H5 -->
+          <text :class="[
+              'lb-picker-column-label',
+              `lb-picker-column-label-${align}`
+            ]"
+            :style="[
+              item.value === selectValue[index]
+                ? activeColumnStyle
+                : columnStyle
+            ]">{{ item.label }}</text>
+          <!-- #endif -->
+
+          <!-- #ifndef APP-PLUS || H5 -->
+          <text :class="[
+              'lb-picker-column-label',
+              `lb-picker-column-label-${align}`
+            ]">{{ item.label }}</text>
+          <!-- #endif -->
+        </view>
+      </picker-view-column>
+    </picker-view>
+  </view>
+</template>
+
+<script>
+import { isFunction } from '../utils'
+const INVALID_DATE = 'Invalid Date'
+const dayjs = require('../lib/dayjs.min.js')
+const objectSupport = require('../lib/object-support.min.js')
+const customParseFormat = require('../lib/custom-parse-format.min.js')
+dayjs.extend(objectSupport)
+dayjs.extend(customParseFormat)
+export default {
+  props: {
+    value: String,
+    mode: String,
+    visible: Boolean,
+    height: String,
+    columnStyle: Object,
+    activeColumnStyle: Object,
+    align: String,
+    formatter: Function,
+    format: String,
+    displayFormat: String,
+    startDate: String,
+    endDate: String,
+    defaultTimeLimit: Number,
+    isShowChinese: Boolean,
+    chConfig: Object,
+    filter: Function
+  },
+  data () {
+    return {
+      pickerValue: [],
+      pickerColumns: [],
+      selectValue: [],
+      selectItem: null,
+      isConfirmChange: false,
+      indicatorStyle: `height: 34px`,
+      dayjs: dayjs,
+      startInfo: {},
+      endInfo: {}
+    }
+  },
+  created () {
+    this.init('init')
+  },
+  methods: {
+    init (changeType) {
+      this.startInfo = this.toObject(
+        this.startDate
+          ? this.startDate
+          : this.dayjs().subtract(this.defaultTimeLimit, 'year').$d
+      )
+      this.endInfo = this.toObject(
+        this.endDate
+          ? this.endDate
+          : this.dayjs().add(this.defaultTimeLimit, 'year').$d
+      )
+      this.selectDate = this.value
+        ? this.dayjs(this.value, this.format)
+        : new Date()
+      if (!this.validate('date')) {
+        throw new Error('日期格式不合法')
+      }
+      if (!this.validate('displayFormat')) {
+        throw new Error('display-format参数异常')
+      }
+      if (this.startInfo.timestamp > this.endInfo.timestamp) {
+        throw new Error('开始结束日期异常,startDate不得大于endDate')
+      }
+      this.selectItem = this.toObject(this.selectDate)
+      this.setColumnData()
+      const value = this.getValueDate()
+      this.$emit('change', {
+        value: value.format(this.format),
+        valueArr: this.selectValue,
+        item: this.selectItem,
+        index: this.pickerValue,
+        change: changeType
+      })
+    },
+    handleChange (item) {
+      const pickerValue = item.detail.value
+      const columnIndex = pickerValue.findIndex(
+        (item, i) => item !== this.pickerValue[i]
+      )
+      if (columnIndex > -1) {
+        const valueIndex = pickerValue[columnIndex]
+        const columnItem = this.pickerColumns[columnIndex]
+        const columnName = columnItem.name
+        const valueItem = columnItem.list[valueIndex]
+        this.pickerValue = pickerValue
+        this.$set(this.selectValue, columnIndex, valueItem.value)
+        this.$set(this.selectItem, columnName, valueItem.value)
+        this.setColumnData(columnIndex)
+        const value = this.getValueDate()
+        this.$emit('change', {
+          value: value.format(this.format),
+          valueArr: this.selectValue,
+          item: this.selectItem,
+          index: this.pickerValue,
+          change: 'scroll'
+        })
+      }
+    },
+    getLabel (value, name, format, $d, rowIndex, columnIndex) {
+      const ch = this.isShowChinese ? this.chConfig[name] || '' : ''
+      let label =
+        value < 10 && format.length > 1 ? `0${value}${ch}` : value + ch
+      if (this.formatter && isFunction(this.formatter)) {
+        const item = { name, format, value, $d }
+        label = this.formatter({ item, rowIndex, columnIndex }) || label
+      }
+      return label
+    },
+    getValueDate (dateObj = {}) {
+      let selectItem = {
+        ...this.selectItem,
+        ...dateObj
+      }
+      selectItem.month = selectItem.month - 1
+      return this.dayjs(selectItem)
+    },
+    setColumnData (n = 0) {
+      const formatArr = this.displayFormat.split('-')
+      const formatObj = {
+        YY: 'year',
+        YYYY: 'year',
+        M: 'month',
+        MM: 'month',
+        D: 'day',
+        DD: 'day',
+        h: 'hour',
+        HH: 'hour',
+        h: 'hour',
+        hh: 'hour',
+        m: 'minute',
+        mm: 'minute',
+        s: 'second',
+        ss: 'second'
+      }
+      formatArr.forEach((item, index) => {
+        if (index >= n) {
+          const name = formatObj[item]
+          const obj = {
+            name: name,
+            list: this.getColumnData(name, item, index)
+          }
+          let value = this.selectItem[name]
+          if (index !== n) {
+            this.$set(this.pickerColumns, index, obj)
+          }
+          let n = obj.list.findIndex(l => l.value === value)
+          if (n < 0) {
+            const l = obj.list.length - 1
+            const firstValue = obj.list[0].value
+            const lastValue = obj.list[l].value
+            if (value < firstValue) {
+              n = 0
+              value = firstValue
+            }
+            if (value > lastValue) {
+              n = l
+              value = lastValue
+            }
+            if (n < 0) {
+              n = 0
+              value = firstValue
+            }
+          }
+          this.$set(this.pickerValue, index, n)
+          this.$set(this.selectValue, index, value)
+          this.$set(this.selectItem, name, value)
+        }
+      })
+    },
+    isSame (name, type = 'startInfo') {
+      let same = true
+      const arr = ['year', 'month', 'day', 'hour', 'minute', 'second']
+      const index = arr.findIndex(item => item === name)
+      if (index > -1) {
+        const slice = arr.slice(0, index + 1)
+        for (let i = 0; i < slice.length; i++) {
+          same = same && this.selectItem[slice[i]] === this[type][slice[i]]
+        }
+      }
+      return same
+    },
+    getColumnData (name, format, index) {
+      let list = []
+      let start = 0
+      let end = 0
+      let n = 0
+      const obj = {
+        month: 'year',
+        day: 'month',
+        hour: 'day',
+        minute: 'hour',
+        second: 'minute'
+      }
+      switch (name) {
+        case 'year':
+          start = this.startInfo[name]
+          end = this.endInfo[name]
+          break
+        case 'month':
+          start = 1
+          end = 12
+          break
+        case 'day':
+          start = 1
+          end = new Date(
+            this.selectItem.year,
+            this.selectItem.month,
+            0
+          ).getDate()
+          break
+        case 'hour':
+          start = 0
+          end = 23
+          break
+        case 'minute':
+          start = 0
+          end = 59
+          break
+        case 'second':
+          start = 0
+          end = 59
+          break
+      }
+      if (this.isSame(obj[name], 'startInfo')) {
+        start = this.startInfo[name]
+      }
+      if (this.isSame(obj[name], 'endInfo')) {
+        end = this.endInfo[name]
+      }
+      for (let i = start; i <= end; i++) {
+        n++
+        list.push({
+          label: this.getLabel(
+            i,
+            name,
+            format,
+            this.getValueDate({ [name]: i }),
+            n,
+            index
+          ),
+          value: i
+        })
+      }
+      if (this.filter && isFunction(this.filter)) {
+        list = this.filter(name, list) || list
+      }
+      return list
+    },
+    validate (type) {
+      let valid = true
+      switch (type) {
+        case 'date':
+          valid = this.dayjs(this.selectDate).isValid()
+          break
+        case 'displayFormat':
+          if (this[type]) {
+            const arr = [
+              'YY',
+              'YYYY',
+              'M',
+              'MM',
+              'D',
+              'DD',
+              'H',
+              'HH',
+              'h',
+              'hh',
+              'm',
+              'mm',
+              's',
+              'ss'
+            ]
+            const formatArr = this.displayFormat.split('-')
+            for (let i = 0; i < formatArr.length; i++) {
+              const val = formatArr[i]
+              const isIn = arr.includes(val)
+              if (!isIn) {
+                valid = false
+                break
+              }
+            }
+          } else {
+            valid = false
+          }
+          break
+      }
+      return valid
+    },
+    toObject (val) {
+      const d = this.dayjs(val)
+      return {
+        year: d.$y,
+        month: d.$M + 1,
+        day: d.$D,
+        hour: d.$H,
+        minute: d.$m,
+        second: d.$s,
+        timestamp: d.valueOf(),
+        $d: d
+      }
+    }
+  },
+  watch: {
+    value () {
+      if (!this.isConfirmChange) {
+        this.init('value')
+      }
+    },
+    displayFormat () {
+      this.init('displayFormat')
+    },
+    startDate () {
+      this.init('startDate')
+    },
+    endDate () {
+      this.init('endDate')
+    },
+    defaultTimeLimit () {
+      this.init('defaultTimeLimit')
+    },
+    isShowChinese () {
+      this.init('isShowChinese')
+    },
+    chConfig () {
+      this.init('chConfig')
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "../style/picker-item.scss";
+</style>

+ 135 - 0
components/lb-picker/pickers/multi-selector-picker.vue

@@ -0,0 +1,135 @@
+<template>
+  <view class="lb-multi-selector lb-picker-item"
+    :style="{ height: height }">
+    <picker-view :value="pickerValue"
+      :indicator-style="indicatorStyle"
+      :style="{ height: height }"
+      @change="handleChange">
+      <picker-view-column v-for="(column, index) in pickerColumns"
+        :key="index">
+        <!-- #ifdef H5 -->
+        <view v-for="(item, i) in column || []"
+          :class="[
+            'lb-picker-column',
+            item[props.value] === selectValue[index]
+              ? 'lb-picker-column-active'
+              : ''
+          ]"
+          :key="i"
+          :data-item="pressEnable ? JSON.stringify(item) : ''"
+          @touchstart="touchstart"
+          @touchmove="touchmove"
+          @touchend="touchend">
+          <!-- #endif -->
+          <!-- #ifndef H5 -->
+          <view v-for="(item, i) in column || []"
+            :class="[
+            'lb-picker-column',
+            item[props.value] === selectValue[index]
+              ? 'lb-picker-column-active'
+              : ''
+          ]"
+            :key="i"
+            :data-item="item"
+            @touchstart="touchstart"
+            @touchmove="touchmove"
+            @touchend="touchend">
+            <!-- #endif -->
+            <!-- #ifdef APP-PLUS || H5 -->
+            <text :class="[
+              'lb-picker-column-label',
+              `lb-picker-column-label-${align}`
+            ]"
+              :style="[
+              item[props.value] === selectValue[index]
+              ? activeColumnStyle
+              : columnStyle
+            ]">{{ getLabel(item, i, index) }}</text>
+            <!-- #endif -->
+
+            <!-- #ifndef APP-PLUS || H5 -->
+            <text :class="[
+              'lb-picker-column-label',
+              `lb-picker-column-label-${align}`
+            ]">{{ item[props.label] || item }}</text>
+            <!-- #endif -->
+          </view>
+      </picker-view-column>
+    </picker-view>
+  </view>
+</template>
+
+<script>
+import { commonMixin } from '../mixins'
+export default {
+  props: {
+    value: Array,
+    list: Array,
+    mode: String,
+    props: Object,
+    level: Number,
+    visible: Boolean,
+    height: String,
+    columnStyle: Object,
+    activeColumnStyle: Object,
+    align: String,
+    pressEnable: Boolean,
+    pressTime: Number,
+    formatter: Function
+  },
+  mixins: [commonMixin],
+  data () {
+    return {
+      pickerValue: [],
+      pickerColumns: [],
+      selectValue: [],
+      selectItem: []
+    }
+  },
+  methods: {
+    handleChange (item) {
+      const pickerValue = item.detail.value
+      const columnIndex = pickerValue.findIndex(
+        (item, i) => item !== this.pickerValue[i]
+      )
+      const valueIndex = pickerValue[columnIndex]
+      this.setPickerChange(pickerValue, valueIndex, columnIndex)
+    },
+    setPickerChange (pickerValue, valueIndex, columnIndex) {
+      for (let i = 0; i < this.level; i++) {
+        if (i > columnIndex) {
+          pickerValue[i] = 0
+          const column =
+            this.pickerColumns[i - 1][valueIndex] ||
+            this.pickerColumns[i - 1][0]
+          this.$set(this.pickerColumns, i, column[this.props.children] || [])
+          valueIndex = 0
+        }
+        this.$set(this.pickerValue, i, pickerValue[i])
+        const selectItem = this.pickerColumns[i][pickerValue[i]]
+        if (selectItem) {
+          this.selectItem[i] = selectItem
+          this.selectValue[i] = selectItem[this.props.value]
+        } else {
+          const spliceNum = this.level - i
+          this.pickerValue.splice(i, spliceNum)
+          this.selectValue.splice(i, spliceNum)
+          this.selectItem.splice(i, spliceNum)
+          this.pickerColumns.splice(i, spliceNum)
+          break
+        }
+      }
+      this.$emit('change', {
+        value: this.selectValue,
+        item: this.selectItem,
+        index: this.pickerValue,
+        change: 'scroll'
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "../style/picker-item.scss";
+</style>

+ 108 - 0
components/lb-picker/pickers/selector-picker.vue

@@ -0,0 +1,108 @@
+<template>
+  <view class="lb-selector-picker lb-picker-item"
+    :style="{ height: height }">
+    <picker-view :value="pickerValue"
+      :style="{ height: height }"
+      :indicator-style="indicatorStyle"
+      @change="handleChange">
+      <picker-view-column>
+        <!-- #ifdef H5 -->
+        <view v-for="(item, i) in list"
+          :class="[
+            'lb-picker-column',
+            (item[props.value] || item) === selectValue
+              ? 'lb-picker-column-active'
+              : ''
+          ]"
+          :key="i"
+          :data-item="pressEnable ? JSON.stringify(item) : ''"
+          @touchstart="touchstart"
+          @touchmove="touchmove"
+          @touchend="touchend">
+          <!-- #endif -->
+          <!-- #ifndef H5 -->
+          <view v-for="(item, i) in list"
+            :class="[
+            'lb-picker-column',
+            (item[props.value] || item) === selectValue
+              ? 'lb-picker-column-active'
+              : ''
+          ]"
+            :key="i"
+            :data-item="item"
+            @touchstart="touchstart"
+            @touchmove="touchmove"
+            @touchend="touchend">
+            <!-- #endif -->
+            <!-- #ifdef APP-PLUS || H5 -->
+            <text :class="[
+              'lb-picker-column-label',
+              `lb-picker-column-label-${align}`
+            ]"
+              :style="[
+              (item[props.value] || item) === selectValue
+                ? activeColumnStyle
+                : columnStyle
+            ]">{{ getLabel(item.title, i, 0) }}</text>
+            <!-- #endif -->
+
+            <!-- #ifndef APP-PLUS || H5 -->
+            <text :class="[
+              'lb-picker-column-label',
+              `lb-picker-column-label-${align}`
+            ]">{{ item[props.label] || item }}</text>
+            <!-- #endif -->
+          </view>
+      </picker-view-column>
+    </picker-view>
+  </view>
+</template>
+
+<script>
+import { isObject } from '../utils'
+import { commonMixin } from '../mixins'
+export default {
+  props: {
+    value: [String, Number],
+    list: Array,
+    mode: String,
+    props: Object,
+    visible: Boolean,
+    height: String,
+    columnStyle: Object,
+    activeColumnStyle: Object,
+    align: String,
+    pressEnable: Boolean,
+    pressTime: Number,
+    formatter: Function
+  },
+  mixins: [commonMixin],
+  data () {
+    return {
+      pickerValue: [],
+      selectValue: '',
+      selectItem: null
+    }
+  },
+  methods: {
+    handleChange (item) {
+      const index = item.detail.value[0] || 0
+      this.selectItem = this.list[index]
+      this.selectValue = isObject(this.selectItem)
+        ? this.selectItem[this.props.value]
+        : this.selectItem
+      this.pickerValue = item.detail.value
+      this.$emit('change', {
+        value: this.selectValue,
+        item: this.selectItem,
+        index: index,
+        change: 'scroll'
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "../style/picker-item.scss";
+</style>

+ 116 - 0
components/lb-picker/pickers/unlinked-selector-picker.vue

@@ -0,0 +1,116 @@
+<template>
+  <view class="lb-selector-picker lb-picker-item"
+    :style="{ height: height }">
+    <picker-view :value="pickerValue"
+      :indicator-style="indicatorStyle"
+      :style="{ height: height }"
+      @change="handleChange">
+      <picker-view-column v-for="(column, index) in pickerColumns"
+        :key="index">
+        <!-- #ifdef H5 -->
+        <view v-for="(item, i) in column || []"
+          :class="[
+            'lb-picker-column',
+            (item[props.value] || item) === selectValue[index]
+              ? 'lb-picker-column-active'
+              : ''
+          ]"
+          :key="i"
+          :data-item="pressEnable ? JSON.stringify(item) : ''"
+          @touchstart="touchstart"
+          @touchmove="touchmove"
+          @touchend="touchend">
+          <!-- #endif -->
+          <!-- #ifndef H5 -->
+          <view v-for="(item, i) in column || []"
+            :class="[
+            'lb-picker-column',
+            (item[props.value] || item) === selectValue[index]
+              ? 'lb-picker-column-active'
+              : ''
+          ]"
+            :key="i"
+            :data-item="item"
+            @touchstart="touchstart"
+            @touchmove="touchmove"
+            @touchend="touchend">
+            <!-- #endif -->
+            <!-- #ifdef APP-PLUS || H5 -->
+            <text :class="[
+              'lb-picker-column-label',
+              `lb-picker-column-label-${align}`
+            ]"
+              :style="[
+              (item[props.value] || item) === selectValue[index]
+              ? activeColumnStyle
+              : columnStyle
+            ]">{{ getLabel(item, i, index) }}</text>
+            <!-- #endif -->
+
+            <!-- #ifndef APP-PLUS || H5 -->
+            <text :class="[
+              'lb-picker-column-label',
+              `lb-picker-column-label-${align}`
+            ]">{{ item[props.label] || item }}</text>
+            <!-- #endif -->
+          </view>
+      </picker-view-column>
+    </picker-view>
+  </view>
+</template>
+
+<script>
+import { isObject } from '../utils'
+import { commonMixin } from '../mixins'
+export default {
+  props: {
+    value: Array,
+    list: Array,
+    mode: String,
+    props: Object,
+    visible: Boolean,
+    height: String,
+    columnStyle: Object,
+    activeColumnStyle: Object,
+    align: String,
+    pressEnable: Boolean,
+    pressTime: Number,
+    formatter: Function
+  },
+  mixins: [commonMixin],
+  data () {
+    return {
+      pickerValue: [],
+      pickerColumns: [],
+      selectValue: [],
+      selectItem: []
+    }
+  },
+  methods: {
+    handleChange (item) {
+      const pickerValue = item.detail.value
+      const columnIndex = pickerValue.findIndex((item, i) => item !== this.pickerValue[i])
+      if (columnIndex > -1) {
+        const valueIndex = pickerValue[columnIndex]
+        const columnItem = this.list[columnIndex][valueIndex]
+        const valueItem = isObject(columnItem)
+          ? columnItem[this.props.value]
+          : columnItem
+        this.pickerValue = pickerValue
+        this.$set(this.selectValue, columnIndex, valueItem)
+        this.$set(this.selectItem, columnIndex, columnItem)
+        this.$emit('change', {
+          value: this.selectValue,
+          item: this.selectItem,
+          index: this.pickerValue,
+          change: 'scroll'
+        })
+      }
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "../style/picker-item.scss";
+</style>

+ 40 - 0
components/lb-picker/style/picker-item.scss

@@ -0,0 +1,40 @@
+.lb-picker-column {
+  height: 34px;
+  padding: 0 10px;
+  /* #ifndef APP-NVUE */
+  display: flex;
+  box-sizing: border-box;
+  white-space: nowrap;
+  overflow: hidden;
+  /* #endif */
+  flex-direction: row;
+  align-items: center;
+}
+
+.lb-picker-column-label {
+  font-size: 16px;
+  text-align: center;
+  flex: 1;
+  /* #ifdef APP-NVUE */
+  lines: 1;
+  /* #endif */
+  text-overflow: ellipsis;
+  transition-property: color;
+  transition-duration: 0.3s;
+  /* #ifndef APP-NVUE */
+  overflow: hidden;
+  white-space: nowrap;
+  /* #endif */
+}
+
+.lb-picker-column-label-left {
+  text-align: left;
+}
+
+.lb-picker-column-label-center {
+  text-align: center;
+}
+
+.lb-picker-column-label-right {
+  text-align: right;
+}

+ 166 - 0
components/lb-picker/style/picker.scss

@@ -0,0 +1,166 @@
+.lb-picker {
+	position: relative;
+}
+
+.lb-picker-mask {
+	background-color: rgba(0, 0, 0, 0.0);
+	position: fixed;
+	top: 0;
+	right: 0;
+	left: 0;
+	bottom: 0;
+}
+
+.lb-picker-mask-animation {
+	transition-property: background-color;
+	transition-duration: 0.3s;
+}
+
+.lb-picker-container {
+	position: relative;
+}
+
+.lb-picker-container-fixed {
+	position: fixed;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	transform: translateY(100%);
+	/* #ifndef APP-NVUE */
+	overflow: hidden;
+	/* #endif */
+}
+
+/* #ifndef APP-NVUE */
+.lb-picker-container-animation {
+	transition-property: transform;
+	transition-duration: 0.3s;
+}
+
+.lb-picker-container-show {
+	transform: translateY(0);
+}
+
+/* #endif */
+
+.lb-picker-header {
+	position: relative;
+	background-color: #fff;
+	/* #ifdef APP-NVUE */
+	border-bottom-width: 1px;
+	border-bottom-style: solid;
+	border-bottom-color: #e5e5e5;
+	border-top-width: 1px;
+	border-top-style: solid;
+	border-top-color: #e5e5e5;
+	/* #endif */
+	/* #ifndef APP-NVUE */
+	box-sizing: border-box;
+	/* #endif */
+
+}
+
+/* #ifndef APP-NVUE */
+
+.lb-picker-header::after {
+	content: "";
+	position: absolute;
+	left: 0;
+	bottom: 0;
+	right: 0;
+	height: 1px;
+	clear: both;
+	border-bottom: 1px solid #e5e5e5;
+	color: #e5e5e5;
+	transform-origin: 0 100%;
+	transform: scaleY(0.5);
+}
+
+/* #endif */
+
+.lb-picker-header-actions {
+	height: 45px;
+	/* #ifndef APP-NVUE */
+	box-sizing: border-box;
+	display: flex;
+	/* #endif */
+	flex-direction: row;
+	justify-content: space-between;
+	flex-wrap: nowrap;
+}
+
+.lb-picker-action {
+	padding-left: 10px;
+	padding-right: 10px;
+	/* #ifndef APP-NVUE */
+	display: flex;
+	/* #endif */
+	flex-direction: row;
+	align-items: center;
+	justify-content: center;
+}
+
+.lb-picker-action-cancel-text {
+	font-size: 16px;
+}
+
+.lb-picker-action-confirm-text {
+	font-size: 16px;
+}
+
+.lb-picker-content {
+	position: relative;
+	background-color: #fff;
+}
+
+/* #ifndef APP-NVUE */
+.lb-picker-content-safe-buttom {
+	padding-bottom: 0;
+	padding-bottom: constant(safe-area-inset-bottom);
+	padding-bottom: env(safe-area-inset-bottom);
+}
+
+/* #endif */
+
+.lb-picker-content-main {
+	position: relative;
+	/* #ifndef APP-NVUE */
+	display: flex;
+	/* #endif */
+	justify-content: center;
+	flex-direction: column;
+}
+
+.lb-picker-loading,
+.lb-picker-empty {
+	/* #ifndef APP-NVUE */
+	display: flex;
+	/* #endif */
+	justify-content: center;
+	align-items: center;
+}
+
+.lb-picker-empty-text {
+	font-size: 16px;
+}
+
+.lb-picker-loading-img {
+	width: 25px;
+	height: 25px;
+	/* #ifndef APP-NVUE */
+	animation: rotating 2s linear infinite;
+	/* #endif */
+}
+
+/* #ifndef APP-NVUE */
+@keyframes rotating {
+	0% {
+		transform: rotate(0deg)
+	}
+
+	100% {
+		transform: rotate(1turn)
+	}
+}
+
+/* #endif */

+ 121 - 0
components/lb-picker/utils.js

@@ -0,0 +1,121 @@
+/**
+ * 判断是否是对象
+ *
+ * @export
+ * @param {*} val
+ * @returns true/false
+ */
+export function isObject (val) {
+  return Object.prototype.toString.call(val) === '[object Object]'
+}
+
+/**
+ * 判断是否是Function
+ *
+ * @export
+ * @param {*} val
+ * @returns true/false
+ */
+export function isFunction (val) {
+  return Object.prototype.toString.call(val) === '[object Function]'
+}
+
+/**
+ * 根据value获取columns信息
+ *
+ * @export
+ * @param {*} { value, list, mode, props, level }
+ * @param {number} [type=2] 查询不到value数据返回数据类型 1空值null 2默认第一个选项
+ * @returns
+ */
+export function getColumns ({ value, list, mode, props, level }, type = 2) {
+  let pickerValue = []
+  let pickerColumns = []
+  let selectValue = []
+  let selectItem = []
+  let columnsInfo = null
+  switch (mode) {
+    case 'selector':
+      let index = list.findIndex(item => {
+        return isObject(item) ? item[props.value] === value : item === value
+      })
+      if (index === -1 && type === 1) {
+        columnsInfo = null
+      } else {
+        index = index > -1 ? index : 0
+        selectItem = list[index]
+        selectValue = isObject(selectItem)
+          ? selectItem[props.value]
+          : selectItem
+        pickerColumns = list
+        pickerValue = [index]
+        columnsInfo = {
+          index: pickerValue,
+          value: selectValue,
+          item: selectItem,
+          columns: pickerColumns
+        }
+      }
+      break
+    case 'multiSelector':
+      const setPickerItems = (data = [], index = 0) => {
+        if (!data.length) return
+        const defaultValue = value || []
+        if (index < level) {
+          const value = defaultValue[index] || ''
+          let i = data.findIndex(item => item[props.value] === value)
+          if (i === -1 && type === 1) return
+          i = i > -1 ? i : 0
+          pickerValue[index] = i
+          pickerColumns[index] = data
+          if (data[i]) {
+            selectValue[index] = data[i][props.value]
+            selectItem[index] = data[i]
+            setPickerItems(data[i][props.children] || [], index + 1)
+          }
+        }
+      }
+      setPickerItems(list)
+      if (!selectValue.length && type === 1) {
+        columnsInfo = null
+      } else {
+        columnsInfo = {
+          index: pickerValue,
+          value: selectValue,
+          item: selectItem,
+          columns: pickerColumns
+        }
+      }
+      break
+    case 'unlinkedSelector':
+      list.forEach((item, i) => {
+        let index = item.findIndex(item => {
+          return isObject(item)
+            ? item[props.value] === value[i]
+            : item === value[i]
+        })
+        if (index === -1 && type === 1) return
+        index = index > -1 ? index : 0
+        const columnItem = list[i][index]
+        const valueItem = isObject(columnItem)
+          ? columnItem[props.value]
+          : columnItem
+        pickerValue[i] = index
+        selectValue[i] = valueItem
+        selectItem[i] = columnItem
+      })
+      pickerColumns = list
+      if (!selectValue.length && type === 1) {
+        columnsInfo = null
+      } else {
+        columnsInfo = {
+          index: pickerValue,
+          value: selectValue,
+          item: selectItem,
+          columns: pickerColumns
+        }
+      }
+      break
+  }
+  return columnsInfo
+}

+ 11 - 5
components/seckill/seckill.vue

@@ -1,7 +1,7 @@
 <template>
 <template>
 	<view class="seckill-section m-t" v-if="show">
 	<view class="seckill-section m-t" v-if="show">
 		<view class="s-header">
 		<view class="s-header">
-			<view class="f-left-icon"></view>
+			<view class="f-left-icon"><image src="../../static/img/seckill-inco.png" mode=""></image></view>
 			<view class="tit-box"><text class="tit">限时秒杀</text></view>
 			<view class="tit-box"><text class="tit">限时秒杀</text></view>
 			<view class="tip-box">
 			<view class="tip-box">
 				<text class="tip" v-if="status == 1">{{ showTime }}点场结束</text>
 				<text class="tip" v-if="status == 1">{{ showTime }}点场结束</text>
@@ -140,10 +140,10 @@ export default {
 		// 计算倒计时时间
 		// 计算倒计时时间
 		timeComputed(da) {
 		timeComputed(da) {
 			let obj = this;
 			let obj = this;
-			let stopTime = timeComputed(da)
-			obj.stopTimeH =stopTime.hours;
+			let stopTime = timeComputed(da);
+			obj.stopTimeH = stopTime.hours;
 			obj.stopTimeM = stopTime.minutes;
 			obj.stopTimeM = stopTime.minutes;
-			obj.stopTimeS =stopTime.seconds;
+			obj.stopTimeS = stopTime.seconds;
 		}
 		}
 	}
 	}
 };
 };
@@ -159,13 +159,19 @@ export default {
 		height: 92rpx;
 		height: 92rpx;
 		line-height: 1;
 		line-height: 1;
 		.tit-box {
 		.tit-box {
+			margin-left: 6rpx;
 			flex-shrink: 0;
 			flex-shrink: 0;
 		}
 		}
 		.tit {
 		.tit {
 			@extend %font-title;
 			@extend %font-title;
 		}
 		}
 		.f-left-icon {
 		.f-left-icon {
-			@extend %f-left-icon;
+			width: 36rpx;
+			height: 36rpx;
+			image{
+				width: 100%;
+				height: 100%;
+			}
 		}
 		}
 		.textNav {
 		.textNav {
 			line-height: 1;
 			line-height: 1;

+ 45 - 62
pages.json

@@ -107,6 +107,17 @@
 					}
 					}
 				}
 				}
 			}
 			}
+		},
+		{
+			"path": "pages/user/mygs",
+			"style": {
+				"navigationBarTitleText": "挂售收益",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
 		},
 		},
 		{
 		{
 			"path": "pages/public/forget",
 			"path": "pages/public/forget",
@@ -330,29 +341,7 @@
 				"navigationBarTitleText": "通知"
 				"navigationBarTitleText": "通知"
 			}
 			}
 		},
 		},
-		{
-			"path": "pages/user/favorites",
-			"style": {
-				"navigationBarTitleText": "收藏夹"
-			}
-		}, {
-			"path": "pages/user/coupon",
-			"style": {
-				"navigationBarTitleText": "我的卡卷"
-			}
-		},
-		{
-			"path": "pages/user/scoreAccumulate",
-			"style": {
-				"navigationBarTitleText": "积分明细"
-			}
-		},
-		{
-			"path": "pages/user/scoreAccumulate",
-			"style": {
-				"navigationBarTitleText": "积分明细"
-			}
-		},
+		
 		
 		
 		{
 		{
 			"path": "pages/user/xrtd",
 			"path": "pages/user/xrtd",
@@ -375,9 +364,13 @@
 			}
 			}
 		},
 		},
 		{
 		{
-			"path": "pages/user/myjj",
+			"path": "pages/order/index",
 			"style": {
 			"style": {
-				"navigationBarTitleText": "我的奖金"
+			"navigationStyle":"custom",
+				"navigationBarTitleText": "",
+				"app-plus": {
+					"bounce": "none"
+				}
 			}
 			}
 		},
 		},
 		{
 		{
@@ -389,6 +382,16 @@
 					"bounce": "none"
 					"bounce": "none"
 				}
 				}
 			}
 			}
+		},
+		{
+			"path": "pages/order/order1",
+			"style": {
+			"navigationStyle":"custom",
+				"navigationBarTitleText": "",
+				"app-plus": {
+					"bounce": "none"
+				}
+			}
 		},
 		},
 		{
 		{
 			"path": "pages/order/order1",
 			"path": "pages/order/order1",
@@ -452,18 +455,7 @@
 		{
 		{
 			"path": "pages/money/wallet",
 			"path": "pages/money/wallet",
 			"style": {
 			"style": {
-				"navigationBarTitleText": "我的钱包",
-				"app-plus": {
-					"titleNView": {
-						"type": "transparent"
-					}
-				}
-			}
-		},
-		{
-			"path": "pages/money/account",
-			"style": {
-				"navigationBarTitleText": "提现账号"
+				"navigationBarTitleText": "预约券转账"
 			}
 			}
 		},
 		},
 		{
 		{
@@ -552,6 +544,15 @@
 					"titleNView": false
 					"titleNView": false
 				}
 				}
 			}
 			}
+		},
+		{
+			"path": "pages/user/myAppointment",
+			"style": {
+				"navigationBarTitleText": "我的预约券",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
 		},
 		},
 		{
 		{
 			"path": "pages/user/shareQrCode",
 			"path": "pages/user/shareQrCode",
@@ -561,7 +562,7 @@
 		}
 		}
 	    ,{
 	    ,{
             "path" : "pages/money/qudou",
             "path" : "pages/money/qudou",
-            "style" :                                                                                    
+            "style" :
             {
             {
                 "navigationBarTitleText": "我的趣豆",
                 "navigationBarTitleText": "我的趣豆",
                 "enablePullDownRefresh": false,
                 "enablePullDownRefresh": false,
@@ -571,24 +572,6 @@
             }
             }
             
             
         }
         }
-        ,{
-            "path" : "pages/money/jifen",
-            "style" :                                                                                    
-            {
-                "navigationBarTitleText": "",
-                "enablePullDownRefresh": false
-            }
-            
-        }
-        ,{
-            "path" : "pages/money/zhihuanquan",
-            "style" :                                                                                    
-            {
-                "navigationBarTitleText": "",
-                "enablePullDownRefresh": false
-            }
-            
-        }
     ],
     ],
 	
 	
 	"globalStyle": {
 	"globalStyle": {
@@ -632,12 +615,12 @@
 				// "selectedIconPath": "static/tabBar/tab-cart-current.png",
 				// "selectedIconPath": "static/tabBar/tab-cart-current.png",
 				"text": "趣豆会馆"
 				"text": "趣豆会馆"
 			},
 			},
-			// {
-			// 	"pagePath": "pages/order/order",
-			// 	// "iconPath": "static/tabBar/tab-cart.png",
-			// 	// "selectedIconPath": "static/tabBar/tab-cart-current.png",
-			// 	"text": "订单"
-			// },
+			{
+				"pagePath": "pages/order/index",
+				// "iconPath": "static/tabBar/tab-cart.png",
+				// "selectedIconPath": "static/tabBar/tab-cart-current.png",
+				"text": "订单"
+			},
 			{
 			{
 				"pagePath": "pages/money/money",
 				"pagePath": "pages/money/money",
 				// "iconPath": "static/tabBar/tab-cart.png",
 				// "iconPath": "static/tabBar/tab-cart.png",

+ 48 - 11
pages/hall/halllist.vue

@@ -11,10 +11,18 @@
 		<view class="hallist-bg">
 		<view class="hallist-bg">
 			<image src="" mode=""></image>
 			<image src="" mode=""></image>
 		</view>
 		</view>
-		<view class="message flex" @click="nav('/pages/index/message')">
+		<view class="message flex" >
 			<image class="message-left" src="../../static/img/hinco.png" mode=""></image>
 			<image class="message-left" src="../../static/img/hinco.png" mode=""></image>
-			<view class="message-font clamp">全民动员,公告内容信息公告消息显123456789</view>
-			<image class="message-right" src="../../static/img/backb.png" mode=""></image>
+			<u-notice-bar
+				style="width: 100%;"
+				mode="vertical"
+				type="none"
+				:volume-icon="false"
+				:more-icon="true"
+				:list="text"
+				@click="goDetails"
+				@getMore="navTo('/pages/index/message')"
+			></u-notice-bar>
 		</view>
 		</view>
 		<view class="navbar">
 		<view class="navbar">
 			<view class="navbar-item" @click="navTo('/pages/money/qudou')">
 			<view class="navbar-item" @click="navTo('/pages/money/qudou')">
@@ -22,23 +30,23 @@
 					<image class="navbar-image" src="../../static/img/been.png" mode=""></image>
 					<image class="navbar-image" src="../../static/img/been.png" mode=""></image>
 					<view class="font">趣豆</view>
 					<view class="font">趣豆</view>
 				</view>
 				</view>
-				<view class="navbar-num">200</view>
+				<view class="navbar-num">{{ userInfo.integral || '0.00' }}</view>
 			</view>
 			</view>
 			<view class="vvv"></view>
 			<view class="vvv"></view>
 			<view class="navbar-item">
 			<view class="navbar-item">
-				<view class="navbar-font" @click="navTo('/pages/user/scoreAccumulate')">
+				<view class="navbar-font" @click="navTo('/pages/user/award')">
 					<image class="navbar-image" src="../../static/money/m03.png" mode=""></image>
 					<image class="navbar-image" src="../../static/money/m03.png" mode=""></image>
-					<view class="font">积分</view>
+					<view class="font">佣金</view>
 				</view>
 				</view>
-				<view class="navbar-num">200</view>
+				<view class="navbar-num">{{ userInfo.brokerage_price }}</view>
 			</view>
 			</view>
 			<view class="vvv"></view>
 			<view class="vvv"></view>
 			<view class="navbar-item">
 			<view class="navbar-item">
-				<view class="navbar-font">
+				<view class="navbar-font" @click="navTo('/pages/user/myAppointment')">
 					<image class="navbar-image" src="../../static/money/m04.png" mode=""></image>
 					<image class="navbar-image" src="../../static/money/m04.png" mode=""></image>
-					<view class="font">置换券</view>
+					<view class="font">预约券</view>
 				</view>
 				</view>
-				<view class="navbar-num">200</view>
+				<view class="navbar-num">{{ userInfo.anticipate }}</view>
 			</view>
 			</view>
 		</view>
 		</view>
 		<view class="main" v-for="(item, index) in list" :key="index">
 		<view class="main" v-for="(item, index) in list" :key="index">
@@ -54,7 +62,11 @@
 					<view class="mmain-time">入场时间:{{ item.radd_time }}-{{ item.rend_time }}</view>
 					<view class="mmain-time">入场时间:{{ item.radd_time }}-{{ item.rend_time }}</view>
 					<view class="mmain-time flex">
 					<view class="mmain-time flex">
 						<view class="mmain-font">距预约结束:</view>
 						<view class="mmain-font">距预约结束:</view>
-						<view class="lyy-b-jz flex">
+						
+						<view class="lyy-b-jz flex" v-if="item.hours < 0 || item.minutes < 0 || item.minutes < 0" style="font-size: 30rpx; color: #d13737;">
+							已结束
+						</view>
+						<view class="lyy-b-jz flex" v-else>
 							<uni-countdowns
 							<uni-countdowns
 								color="#FFFFFF"
 								color="#FFFFFF"
 								splitor-color="#FECD57"
 								splitor-color="#FECD57"
@@ -89,6 +101,8 @@
 
 
 <script>
 <script>
 import uniCountdowns from '@/components/uni-countdown/uni-countdowns.vue';
 import uniCountdowns from '@/components/uni-countdown/uni-countdowns.vue';
+import { article } from '@/api/user.js'
+import { mapState, mapMutations } from 'vuex';
 import { auction_list,subscribe,advance } from '@/api/hall.js';
 import { auction_list,subscribe,advance } from '@/api/hall.js';
 import { timeComputed } from '@/utils/rocessor.js';
 import { timeComputed } from '@/utils/rocessor.js';
 export default {
 export default {
@@ -104,6 +118,8 @@ export default {
 			page: 1,
 			page: 1,
 			limit: 10,
 			limit: 10,
 			loadingType: 'more',
 			loadingType: 'more',
+			text: [],
+			article:[],
 			list: []
 			list: []
 		};
 		};
 	},
 	},
@@ -112,6 +128,15 @@ export default {
 		this.name = option.name;
 		this.name = option.name;
 		this.peoplename = option.peoplename
 		this.peoplename = option.peoplename
 		this.loadData();
 		this.loadData();
+		article({},1).then(({data}) =>{
+			data.forEach(e =>{
+				this.text.push(e.synopsis)
+			})
+			this.article = data
+		})
+	},
+	computed: {
+		...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
 	},
 	},
 	methods: {
 	methods: {
 		loadData() {
 		loadData() {
@@ -168,6 +193,12 @@ export default {
 				this.$refs.popup.open();
 				this.$refs.popup.open();
 			}
 			}
 		},
 		},
+		goDetails(e) {
+			console.log(e, '123456');
+			uni.navigateTo({
+				url: '/pages/index/messageInfo?id=' + this.article[e].id
+			});
+		},
 		close() {
 		close() {
 			this.price = ''
 			this.price = ''
 			this.id = ''
 			this.id = ''
@@ -178,6 +209,11 @@ export default {
 				url:'/pages/hall/hallinfo?id=' + this.id + '&name=' + this.name + '&peoplename=' + this.peoplename
 				url:'/pages/hall/hallinfo?id=' + this.id + '&name=' + this.name + '&peoplename=' + this.peoplename
 			});
 			});
 		},
 		},
+		navTo(url){
+			uni.navigateTo({
+				url
+			})
+		},
 		toBack() {
 		toBack() {
 			uni.navigateBack({});
 			uni.navigateBack({});
 		},
 		},
@@ -332,6 +368,7 @@ page,
 				}
 				}
 			}
 			}
 			.mmain-time {
 			.mmain-time {
+				justify-content: flex-start;
 				margin-top: 10rpx;
 				margin-top: 10rpx;
 				font-size: 26rpx;
 				font-size: 26rpx;
 				font-family: PingFang SC;
 				font-family: PingFang SC;

+ 32 - 108
pages/index/index.vue

@@ -73,13 +73,13 @@
 					<text>></text>
 					<text>></text>
 				</view>
 				</view>
 			</view>
 			</view>
-			<view class="shingle-main" @click="nav('/pages/hall/halllist')">
-				<view class="shingle-bg"><image src="../../static/img/sim-bg.png" mode=""></image></view>
+			<view class="shingle-main" @click="navTo(list)">
+				<view class="shingle-bg"><image :src="list.image" mode=""></image></view>
 				<view class="shinglem-title flex">
 				<view class="shinglem-title flex">
 					<image class="tbg" src="../../static/img/tbg-left.png" mode=""></image>
 					<image class="tbg" src="../../static/img/tbg-left.png" mode=""></image>
 					<view class="shinglemt-center">
 					<view class="shinglemt-center">
 						<image class="address" src="../../static/img/address.png" mode=""></image>
 						<image class="address" src="../../static/img/address.png" mode=""></image>
-						<view class="shingle-font">浙江馆</view>
+						<view class="shingle-font">{{list.name}}</view>
 					</view>
 					</view>
 					<image class="tbg" src="../../static/img/tbg-right.png" mode=""></image>
 					<image class="tbg" src="../../static/img/tbg-right.png" mode=""></image>
 				</view>
 				</view>
@@ -90,7 +90,7 @@
 					</view>
 					</view>
 					<view class="shu"></view>
 					<view class="shu"></view>
 					<view class="smmain-item">
 					<view class="smmain-item">
-						<view class="smitem-top">纯平</view>
+						<view class="smitem-top">{{list.nickname}}</view>
 						<view class="smitem-bottom">馆长</view>
 						<view class="smitem-bottom">馆长</view>
 					</view>
 					</view>
 					<view class="shu"></view>
 					<view class="shu"></view>
@@ -105,42 +105,8 @@
 				<image class="right-bottom" src="../../static/img/right-bottom.png" mode=""></image>
 				<image class="right-bottom" src="../../static/img/right-bottom.png" mode=""></image>
 			</view>
 			</view>
 		</view>
 		</view>
-		<view class="seckill-box">
-			<view class="seckill-title flex">
-				<view class="seckill-left flex">
-					<image class="seckill-inco" src="../../static/img/seckill-inco.png" mode=""></image>
-					<view class="seckill-font">限时秒杀</view>
-					<view class="djs flex">
-						<view>距结束:</view>
-						<uni-countdowns
-							color="#FFFFFF"
-							splitor-color="#000000"
-							background-color="#000000"
-							border-color="#000000"
-							:show-day="false"
-							:hour="stopTime.stopTimeH"
-							:minute="stopTime.stopTimeM"
-							:second="stopTime.stopTimeS"
-						></uni-countdowns>
-					</view>
-				</view>
-				<view class="seckill-right" @click="nav('/pages/product/seckill')">
-					<view class="seckill-rfont">更多</view>
-					<image class="seckill-back" src="../../static/img/back.png" mode=""></image>
-				</view>
-			</view>
-			<view class="seckill-main-box flex">
-				<view class="seckill-item" v-for="(item, index) in 3" :key="index">
-					<image class="item-price" src="" mode=""></image>
-					<view class="clamp item-title">护肤品套装</view>
-					<view class="jdt"><u-line-progress :percent="bzb" activeColor="#F13A88"></u-line-progress></view>
-					<view class="price-box flex">
-						<view class="new-price">¥69.9</view>
-						<view class="ot-price">¥89.9</view>
-					</view>
-				</view>
-			</view>
-		</view>
+		<!-- 秒杀楼层 -->
+		<seckill></seckill>
 		<view class="ge"></view>
 		<view class="ge"></view>
 		<view class="serve">
 		<view class="serve">
 			<view class="seckill-title flex">
 			<view class="seckill-title flex">
@@ -170,10 +136,14 @@
 
 
 <script>
 <script>
 import { tabbar1 } from '@/utils/tabbar.js';
 import { tabbar1 } from '@/utils/tabbar.js';
+import seckill from '../../components/seckill/seckill.vue';
+import { article } from '@/api/user.js'
 import { loadIndexs } from '@/api/index.js';
 import { loadIndexs } from '@/api/index.js';
 import uniCountdowns from '@/components/uni-countdown/uni-countdowns.vue';
 import uniCountdowns from '@/components/uni-countdown/uni-countdowns.vue';
+import { auction_gu } from '@/api/hall.js';
 export default {
 export default {
 	components: {
 	components: {
+		seckill,
 		uniCountdowns
 		uniCountdowns
 	},
 	},
 	data() {
 	data() {
@@ -185,13 +155,9 @@ export default {
 			swiperLength: 0,
 			swiperLength: 0,
 			dataList: '',
 			dataList: '',
 			carouselList: [], //轮播图列表
 			carouselList: [], //轮播图列表
-			text: ['恭喜黑白灰用户拼团成功¥353元!', '恭喜黑白灰用户拼团成功¥353元!'],
-			stopTime: {
-				stopTimeH: 0,
-				stopTimeM: 24,
-				stopTimeS: 59
-			},
-			bzb: 30
+			text: [],
+			article:[],
+			list:{},
 		};
 		};
 	},
 	},
 	onLoad() {
 	onLoad() {
@@ -199,6 +165,17 @@ export default {
 	},
 	},
 	methods: {
 	methods: {
 		loadData() {
 		loadData() {
+			article({},1).then(({data}) =>{
+				data.forEach(e =>{
+					this.text.push(e.synopsis)
+				})
+				this.article = data
+			})
+			auction_gu({pages:1,limit:1}).then(({data}) =>{
+				this.list = data[0]
+			}).catch(e =>{
+				console.log(e);
+			})
 			loadIndexs({})
 			loadIndexs({})
 				.then(({ data }) => {
 				.then(({ data }) => {
 					let goods = data.info;
 					let goods = data.info;
@@ -208,9 +185,8 @@ export default {
 				.catch(e => {});
 				.catch(e => {});
 		},
 		},
 		goDetails(e) {
 		goDetails(e) {
-			console.log(e, '123456');
 			uni.navigateTo({
 			uni.navigateTo({
-				url: '/pages/index/messageInfo'
+				url: '/pages/index/messageInfo?id=' + this.article[e].id
 			});
 			});
 		},
 		},
 		nav(url) {
 		nav(url) {
@@ -235,7 +211,11 @@ export default {
 				url: '/pages/product/search'
 				url: '/pages/product/search'
 			});
 			});
 		},
 		},
-
+		navTo(item){
+			uni.navigateTo({
+				url: "/pages/hall/halllist?id=" + item.id + '&name=' + item.name + '&peoplename=' + item.nickname
+			})
+		},
 		//详情页
 		//详情页
 		navToDetailPage(item) {
 		navToDetailPage(item) {
 			let id = item.id;
 			let id = item.id;
@@ -389,7 +369,7 @@ page,
 			color: #dc262b;
 			color: #dc262b;
 		}
 		}
 		.shingle-btn {
 		.shingle-btn {
-			width: 248rpx;
+			width: 250rpx;
 			height: 50rpx;
 			height: 50rpx;
 			border: 2rpx solid #dc262b;
 			border: 2rpx solid #dc262b;
 			border-radius: 10rpx;
 			border-radius: 10rpx;
@@ -402,7 +382,7 @@ page,
 			line-height: 50rpx;
 			line-height: 50rpx;
 			text {
 			text {
 				display: inline-block;
 				display: inline-block;
-				padding-left: 10rpx;
+				padding-left: 6rpx;
 			}
 			}
 		}
 		}
 	}
 	}
@@ -538,62 +518,6 @@ page,
 		height: 20rpx;
 		height: 20rpx;
 	}
 	}
 }
 }
-.seckill-box {
-	padding: 40rpx 30rpx;
-	background: #ffffff;
-
-	.seckill-main-box {
-		margin-top: 24rpx;
-		flex-wrap: wrap;
-		justify-content: flex-start;
-		.seckill-item:first-child {
-			margin-left: 0rpx;
-		}
-		.seckill-item {
-			margin-left: 14rpx;
-			width: 220rpx;
-			background: #ffffff;
-			border: 4rpx solid #f2e6a5;
-			border-radius: 10rpx;
-			padding: 40rpx 14rpx 34rpx;
-			display: flex;
-			justify-content: center;
-			flex-direction: column;
-			align-items: center;
-			.item-price {
-				width: 126rpx;
-				height: 108rpx;
-				background: #2979ff;
-			}
-			.item-title {
-				margin-top: 20rpx;
-				text-align: left;
-				width: 100%;
-			}
-			.jdt {
-				margin-top: 14rpx;
-				width: 100%;
-			}
-			.price-box {
-				margin-top: 20rpx;
-				.new-price {
-					font-size: 32rpx;
-					font-family: PingFang SC;
-					font-weight: 800;
-					color: #dc262b;
-				}
-				.ot-price {
-					margin-left: 8rpx;
-					font-size: 24rpx;
-					font-family: PingFang SC;
-					font-weight: 500;
-					text-decoration: line-through;
-					color: #969696;
-				}
-			}
-		}
-	}
-}
 .ge {
 .ge {
 	height: 20rpx;
 	height: 20rpx;
 	width: 750rpx;
 	width: 750rpx;

+ 9 - 5
pages/index/message.vue

@@ -1,21 +1,25 @@
 <template>
 <template>
 	<view class="center">
 	<view class="center">
-		<view class="massage" v-for="(item, index) in 20" :key="index" @click="nav('/pages/index/messageInfo')">
-			<view class="title">携百大社群引爆启动的趣豆,究竟是个什么样的项目?</view>
-			<view class="time">2019-08-31 12:10:00</view>
+		<view class="massage" v-for="(item, index) in list" :key="index" @click="nav('/pages/index/messageInfo?id='+item.id)">
+			<view class="title">{{item.title}}</view>
+			<view class="time">{{item.add_time}}</view>
 		</view>
 		</view>
 	</view>
 	</view>
 </template>
 </template>
 
 
 <script>
 <script>
+import { article } from '@/api/user.js';
 export default {
 export default {
 	data() {
 	data() {
 		return {
 		return {
-			
+			list:[]
 		}
 		}
 	},
 	},
 	onLoad() {
 	onLoad() {
-		
+		let obj = this;
+		article({page:1,limit:1000},1).then(({data}) =>{
+			this.list = data
+		})
 	},
 	},
 	methods:{
 	methods:{
 		nav(url){
 		nav(url){

+ 59 - 6
pages/index/messageInfo.vue

@@ -1,21 +1,68 @@
 <template>
 <template>
 	<view class="center">
 	<view class="center">
-		<view class="title clamp">趣豆最牛内容推广服务平台</view>
+		<view class="title clamp">{{ item.title }}</view>
 		<view class="tip flex">
 		<view class="tip flex">
-			<view class="tip-left">作者:趣豆小编</view>
-			<view class="tip-right">2019-08-20 12:00</view>
+			<view class="tip-left">作者:{{item.author}}</view>
+			<view class="tip-right">{{item.add_time}}</view>
 		</view>
 		</view>
-		<view v-html="content" class="content">
-			{{ content }}
+		<view class="main" v-for="(ls, index) in item.content" :key="index">
+			<view v-if="ls.type == 'rich-text'" v-html="ls.value" class="main"></view>
+			<video v-if="ls.type == 'video' && ls.value" :src="ls.value" style="width:100%;height: 300px" frameborder="0"></video>
 		</view>
 		</view>
 	</view>
 	</view>
 </template>
 </template>
 
 
 <script>
 <script>
+import { details } from '@/api/user.js';
 export default {
 export default {
 	data() {
 	data() {
 		return{
 		return{
-			content:'',
+			id: '',
+			item: ''
+		}
+	},
+	onLoad(option) {
+		this.id = option.id;
+		this.loadData();
+	},
+	methods: {
+		loadData() {
+			details({}, this.id).then(({ data }) => {
+				console.log(data);
+				data.content = data.content.replace(/<img/g, '<img class="rich-img"').replace(/<p>\s*<img/g, '<p class="pHeight"><img');
+				data.content = this.getVideo(data.content);
+				this.item = data;
+			});
+		},
+		// 富文本视频解析
+		getVideo(data) {
+			let videoList = [];
+			let videoReg = /<video.*?(?:>|\/>)/gi; //匹配到字符串中的 video 标签
+			let srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i; //匹配到字符串中的 video 标签 的路径
+			let arr = data.match(videoReg) || []; // arr 为包含所有video标签的数组
+			let articleList = data.split('</video>'); // 把字符串  从视频标签分成数组
+			arr.forEach((item, index) => {
+				var src = item.match(srcReg);
+				videoList.push(src[1]); //所要显示的字符串中 所有的video 标签 的路径
+			});
+			let needArticleList = [];
+			articleList.forEach((item, index) => {
+				if (item != '' && item != undefined) {
+					//  常见的标签渲染
+					needArticleList.push({
+						type: 'rich-text',
+						value: item + '</video>'
+					});
+				}
+				let articleListLength = articleList.length; // 插入到原有video 标签位置
+				if (index < articleListLength && videoList[index] != undefined) {
+					needArticleList.push({
+						type: 'video',
+						value: videoList[index]
+					});
+				}
+			});
+			return needArticleList;
 		}
 		}
 	}
 	}
 }
 }
@@ -42,4 +89,10 @@ export default {
 	color: #666666;
 	color: #666666;
 	border-bottom: 1px solid #E9E9E9;
 	border-bottom: 1px solid #E9E9E9;
 }
 }
+/deep/ .main {
+	.rich-img {
+		width: 100% !important;
+		height: auto;
+	}
+}
 </style>
 </style>

+ 0 - 236
pages/money/account.vue

@@ -1,236 +0,0 @@
-<template>
-	<view class="content">
-		<view class="navbar">
-			<view v-for="(item, index) in navList" :key="index" class="nav-item" :class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">{{ item.text }}</view>
-		</view>
-
-		<swiper :current="tabCurrentIndex" class="swiper-box" duration="300" @change="changeTab">
-			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
-				<view class="row b-b">
-					<text class="tit">姓名</text>
-					<input class="input" v-model="tabItem.orderList.name" type="text" placeholder="提款人姓名" placeholder-class="placeholder" />
-				</view>
-				<view class="row b-b">
-					<text class="tit">{{ tabIndex == 0 ? '账号' : '银行卡号' }}</text>
-					<input class="input" v-model="tabItem.orderList.code" type="text" placeholder="请输入账号" placeholder-class="placeholder" />
-				</view>
-				<view class="row b-b" v-if="tabIndex == 1">
-					<text class="tit">所属银行</text>
-					<input class="input" v-model="tabItem.orderList.bankName" type="text" placeholder="请输入账号" placeholder-class="placeholder" />
-				</view>
-			</swiper-item>
-		</swiper>
-
-		<button class="add-btn up" @click="confirm">提交申请</button>
-	</view>
-</template>
-
-<script>
-import { aliInfo, bankInfo, setAliInfo, setBankInfo } from '@/api/wallet.js';
-export default {
-	data() {
-		return {
-			tabCurrentIndex: 0,
-			navList: [
-				{
-					state: 0,
-					text: '支付宝',
-					loadingType: 'more',
-					orderList: {
-						name: '',
-						code: '',
-						id:''
-					}
-				},
-				{
-					state: 1,
-					text: '银行卡',
-					loadingType: 'more',
-					orderList: {
-						name: '',
-						code: '',
-						bankName: '',
-						id:''
-					}
-				}
-			]
-		};
-	},
-
-	onLoad(options) {
-		this.tabCurrentIndex = +options.state || 0;
-		this.loadAli();
-		this.loadBank();
-	},
-
-	methods: {
-		//加载数据
-		loadAli(source) {
-			aliInfo({}).then(({data}) => {
-				let order = this.navList[0].orderList;
-				this.$set(order,'name',data.fullname)
-				this.$set(order,'code',data.alino)
-				this.$set(order,'id',data.id)
-			});
-		},
-		loadBank() {
-			bankInfo({}).then(({data}) => {
-				let order = this.navList[1].orderList;
-				this.$set(order,'name',data.fullname);
-				this.$set(order,'code',data.bankno);
-				this.$set(order,'bankName',data.bank);
-				this.$set(order,'id',data.id)
-			});
-		},
-		//swiper 切换
-		changeTab(e) {
-			this.tabCurrentIndex = e.target.current;
-		},
-		//顶部tab点击
-		tabClick(index) {
-			this.tabCurrentIndex = index;
-		},
-		// 提交保存
-		confirm() {
-			let obj = this;
-			let arr = obj.navList[obj.tabCurrentIndex].orderList;
-			if (obj.tabCurrentIndex == 1) {
-				obj.setBankInfo({
-					fullname: arr.name,
-					bank: arr.bankName,
-					bankno: arr.code,
-					id:arr.id
-				});
-			}
-			if (obj.tabCurrentIndex == 0) {
-				obj.setAliInfo({
-					fullname: arr.name,
-					alino: arr.code,
-					id:arr.id
-				});
-			}
-		},
-		/* 保存银行卡详细 */
-		setBankInfo(obj) {
-			setBankInfo(obj)
-				.then(e => {
-					uni.showToast({
-						title: '修改成功',
-						duration: 2000,
-						position: 'top'
-					});
-					this.$api.prePage().dataUp()
-					setTimeout(() => {
-						uni.navigateBack()
-					},1500)
-				})
-				.catch(e => {
-					console.log(e);
-				});
-		},
-		// 修改支付宝信息
-		setAliInfo(obj) {
-			setAliInfo(obj)
-				.then(e => {
-					uni.showToast({
-						title: '修改成功',
-						duration: 2000,
-						position: 'top'
-					});
-					this.$api.prePage().dataUp()
-					setTimeout(() => {
-						uni.navigateBack()
-					},1500)
-				})
-				.catch(e => {
-					console.log(e);
-				});
-		},
-	}
-};
-</script>
-
-<style lang="scss">
-.row {
-	display: flex;
-	align-items: center;
-	position: relative;
-	padding: 0 30rpx;
-	height: 110rpx;
-	background: #fff;
-	.tit {
-		flex-shrink: 0;
-		width: 120rpx;
-		font-size: 30rpx;
-		color: $font-color-dark;
-	}
-	.input {
-		flex: 1;
-		font-size: 30rpx;
-		color: $font-color-dark;
-	}
-	.iconlocation {
-		font-size: 36rpx;
-		color: $font-color-light;
-	}
-}
-page,
-.content {
-	background: $page-color-base;
-	height: 100%;
-}
-
-.swiper-box {
-	height: 750rpx;
-}
-
-.navbar {
-	display: flex;
-	height: 40px;
-	padding: 0 5px;
-	background: #fff;
-	box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
-	position: relative;
-	z-index: 10;
-	.nav-item {
-		flex: 1;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		height: 100%;
-		font-size: 15px;
-		color: $font-color-dark;
-		position: relative;
-		&.current {
-			color: $base-color;
-			&:after {
-				content: '';
-				position: absolute;
-				left: 50%;
-				bottom: 0;
-				transform: translateX(-50%);
-				width: 44px;
-				height: 0;
-				border-bottom: 2px solid $base-color;
-			}
-		}
-	}
-}
-
-.add-btn {
-	&.up {
-		background-color: $base-color;
-		color: #fff;
-	}
-	display: flex;
-	align-items: center;
-	justify-content: center;
-	width: 690rpx;
-	height: 80rpx;
-	margin: 0 auto;
-	margin-top: 30rpx;
-	font-size: $font-lg;
-	border-radius: 10rpx;
-	// box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4);
-}
-</style>

+ 88 - 41
pages/money/money.vue

@@ -3,7 +3,7 @@
 		<view class="top">
 		<view class="top">
 			<image class="top-bg" src="../../static/img/order99.png" mode=""></image>
 			<image class="top-bg" src="../../static/img/order99.png" mode=""></image>
 			<view class="top-font">现金余额(元)</view>
 			<view class="top-font">现金余额(元)</view>
-			<view class="num">0.00</view>
+			<view class="num">{{ userInfo.now_money || '0.00' }}</view>
 		</view>
 		</view>
 		<view class="navbar">
 		<view class="navbar">
 			<view class="navbar-item" @click="navTo('/pages/money/qudou')">
 			<view class="navbar-item" @click="navTo('/pages/money/qudou')">
@@ -11,23 +11,23 @@
 					<image class="navbar-image" src="../../static/img/been.png" mode=""></image>
 					<image class="navbar-image" src="../../static/img/been.png" mode=""></image>
 					<view class="font">趣豆</view>
 					<view class="font">趣豆</view>
 				</view>
 				</view>
-				<view class="navbar-num">200</view>
+				<view class="navbar-num">{{ userInfo.integral || '0.00' }}</view>
 			</view>
 			</view>
 			<view class="vvv"></view>
 			<view class="vvv"></view>
 			<view class="navbar-item">
 			<view class="navbar-item">
-				<view class="navbar-font" @click="navTo('/pages/user/scoreAccumulate')">
+				<view class="navbar-font" @click="navTo('/pages/user/award')">
 					<image class="navbar-image" src="../../static/money/m03.png" mode=""></image>
 					<image class="navbar-image" src="../../static/money/m03.png" mode=""></image>
-					<view class="font">积分</view>
+					<view class="font">佣金</view>
 				</view>
 				</view>
-				<view class="navbar-num">200</view>
+				<view class="navbar-num">{{ userInfo.brokerage_price }}</view>
 			</view>
 			</view>
 			<view class="vvv"></view>
 			<view class="vvv"></view>
 			<view class="navbar-item">
 			<view class="navbar-item">
-				<view class="navbar-font">
+				<view class="navbar-font" @click="navTo('/pages/user/myAppointment')">
 					<image class="navbar-image" src="../../static/money/m04.png" mode=""></image>
 					<image class="navbar-image" src="../../static/money/m04.png" mode=""></image>
-					<view class="font">置换券</view>
+					<view class="font">预约券</view>
 				</view>
 				</view>
-				<view class="navbar-num">200</view>
+				<view class="navbar-num">{{ userInfo.anticipate }}</view>
 			</view>
 			</view>
 		</view>
 		</view>
 		<view class="content-box">
 		<view class="content-box">
@@ -37,19 +37,22 @@
 					<text>现金余额明细</text>
 					<text>现金余额明细</text>
 				</view>
 				</view>
 				<view class="title-right">
 				<view class="title-right">
-					全部
+					<view @tap="handleTap('picker')">{{ title }}</view>
+					<lb-picker ref="picker" v-model="value" mode="selector" :list="typeList" :dataset="{ name: 'type' }" @confirm="handleConfirm"></lb-picker>
 					<image src="../../static/money/m01.png" mode=""></image>
 					<image src="../../static/money/m01.png" mode=""></image>
 				</view>
 				</view>
 			</view>
 			</view>
-			<view class="list" v-for="(item, index) in list" :style="{ background: index % 2 == 0 ? '#fff' : '#F9F9F9' }">
-				<view class="list-box">
-					<view class="list-left">
-						<view class="top1">{{ item.title }}</view>
-						<view class="bottom">{{ item.time }}</view>
+			<scroll-view scroll-y="true" class="scroll-list" :style="{'height' : height}" @scrolltolower="loadData()">
+				<view class="list" v-for="(item, index) in list" :style="{ background: index % 2 == 0 ? '#F9F9F9' : '#fff' }">
+					<view class="list-box">
+						<view class="list-left">
+							<view class="top1">{{ item.title }}</view>
+							<view class="bottom">{{ item.add_time }}</view>
+						</view>
+						<view class="list-right" :style="{ color: index % 2 == 0 ? '#ff0000' : '#000000' }">{{ item.pm == 1 ? '+' : '-' }}{{ item.number }}</view>
 					</view>
 					</view>
-					<view class="list-right" :style="{ color: index % 2 == 0 ? '#ff0000' : '#000000' }">{{ item.money }}</view>
 				</view>
 				</view>
-			</view>
+			</scroll-view>
 		</view>
 		</view>
 		<u-tabbar activeColor="#f42b4e" v-model="current" :list="tabbar" :mid-button="true"></u-tabbar>
 		<u-tabbar activeColor="#f42b4e" v-model="current" :list="tabbar" :mid-button="true"></u-tabbar>
 	</view>
 	</view>
@@ -57,41 +60,84 @@
 
 
 <script>
 <script>
 import { tabbar } from '@/utils/tabbar.js';
 import { tabbar } from '@/utils/tabbar.js';
+import { mapState, mapMutations } from 'vuex';
+import LbPicker from '@/components/lb-picker';
+import { spreadCommission, userBalance } from '@/api/wallet.js';
 export default {
 export default {
+	components: {
+		LbPicker
+	},
+	onReady(res) {
+		var _this = this;
+		uni.getSystemInfo({
+			success: resu => {
+				const query = uni.createSelectorQuery();
+				query.select('.scroll-list').boundingClientRect();
+				query.exec(function(res) {
+					console.log(res, 'ddddddddddddd');
+					_this.height = resu.windowHeight - res[0].top + 'px';
+					console.log('打印页面的剩余高度', _this.height);
+				});
+			},
+			fail: res => {}
+		});
+	},
 	data() {
 	data() {
 		return {
 		return {
-			currentIndex: 0,
-			tabbar: tabbar,
+			height:'',
 			current: 3,
 			current: 3,
-			list: [
-				{
-					title: '释放保证金',
-					time: '2022-01-21 14:12',
-					money: '200'
-				},
-				{
-					title: '预约入场',
-					time: '2220-01-21 14:12',
-					money: '-200'
-				},
-				{
-					title: '释放保证金',
-					time: '2022-01-21 14:12',
-					money: '200'
-				},
-				{
-					title: '预约入场',
-					time: '2220-01-21 14:12',
-					money: '-200'
-				}
-			]
+			tabbar: tabbar,
+			list: [],
+			typeList: [{ title: '收入', type: 2 }, { title: '支出', type: 1 }],
+			type: 2,
+			title: '收入',
+			value: '',
+			page: 1,
+			limit: 10,
+			loadingType: 'more'
 		};
 		};
 	},
 	},
+	computed: {
+		...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
+	},
+	onLoad() {
+		this.loadData();
+	},
 	methods: {
 	methods: {
+		loadData() {
+			const obj = this;
+			if (obj.loadingType == 'nomore' || obj.loadingType == 'loading') {
+				return;
+			}
+			obj.loadingType = 'loading';
+			spreadCommission({ page: obj.page, limit: obj.limit }, obj.type).then(({ data }) => {
+				if (data == '') {
+					return;
+				} else {
+					obj.list = obj.list.concat(data[0].list);
+					if (data[0].list.length == obj.limit) {
+						obj.page++;
+					} else {
+						obj.loadingType == 'nomore';
+					}
+				}
+			});
+		},
 		navTo(url) {
 		navTo(url) {
 			uni.navigateTo({
 			uni.navigateTo({
 				url
 				url
 			});
 			});
+		},
+		handleConfirm(e) {
+			console.log(e);
+			this.title = e.item.title;
+			this.type = e.item.type;
+			this.page = 1;
+			(this.limit = 10), (this.loadingType = 'more'), (this.list = []);
+			this.loadData();
+		},
+		handleTap(name) {
+			this.$refs[name].show();
 		}
 		}
 	}
 	}
 };
 };
@@ -220,7 +266,8 @@ export default {
 			font-size: 30rpx;
 			font-size: 30rpx;
 			font-weight: 500;
 			font-weight: 500;
 			color: #0c1732;
 			color: #0c1732;
-
+			display: flex;
+			align-items: center;
 			image {
 			image {
 				margin-left: 10rpx;
 				margin-left: 10rpx;
 				width: 17rpx;
 				width: 17rpx;

+ 23 - 61
pages/money/qudou.vue

@@ -11,20 +11,19 @@
 				<view class="money">{{ userInfo.brokerage_price }}</view>
 				<view class="money">{{ userInfo.brokerage_price }}</view>
 				<view>余额</view>
 				<view>余额</view>
 			</view>
 			</view>
-			<view class="money-btn" @click="navto('/pages/money/withdrawal')">
+			<!-- <view class="money-btn" @click="navto('/pages/money/withdrawal')">
 				转账
 				转账
-				<!-- <text>></text> -->
-			</view>
+			</view> -->
 		</view>
 		</view>
 		<view class="info-box flex">
 		<view class="info-box flex">
 			<view class="info-item">
 			<view class="info-item">
 				<view class="info-font">累计收入</view>
 				<view class="info-font">累计收入</view>
-				<view class="info-num">{{recharge}}</view>
+				<view class="info-num">{{ recharge }}</view>
 			</view>
 			</view>
 			<view class="shu"></view>
 			<view class="shu"></view>
 			<view class="info-item">
 			<view class="info-item">
 				<view class="info-font">累计支出</view>
 				<view class="info-font">累计支出</view>
-				<view class="info-num">{{orderStatusSum}}</view>
+				<view class="info-num">{{ orderStatusSum }}</view>
 			</view>
 			</view>
 		</view>
 		</view>
 		<view class="navbar">
 		<view class="navbar">
@@ -41,7 +40,7 @@
 						<view class="order-item flex" v-for="(item, index) in tabItem.orderList" :key="index">
 						<view class="order-item flex" v-for="(item, index) in tabItem.orderList" :key="index">
 							<view class="title-box">
 							<view class="title-box">
 								<view class="title">
 								<view class="title">
-									<text>{{ item.title }}</text>
+									<text>{{ item.mark }}</text>
 								</view>
 								</view>
 								<view class="time">
 								<view class="time">
 									<text>{{ item.add_time }}</text>
 									<text>{{ item.add_time }}</text>
@@ -53,7 +52,7 @@
 							</view>
 							</view>
 						</view>
 						</view>
 					</view>
 					</view>
-					<uni-load-more :status="tabItem.loadingType" v-if="!(tabItem.orderList.length == 0 && tabItem.loaded)"></uni-load-more>
+					<!-- <uni-load-more :status="tabItem.loadingType" v-if="!(tabItem.orderList.length == 0 && tabItem.loaded)"></uni-load-more> -->
 				</scroll-view>
 				</scroll-view>
 			</swiper-item>
 			</swiper-item>
 		</swiper>
 		</swiper>
@@ -61,7 +60,7 @@
 </template>
 </template>
 
 
 <script>
 <script>
-import { spreadCommission, userBalance } from '@/api/wallet.js';
+import { integrallist } from '@/api/wallet.js';
 import { getMoneyStyle } from '@/utils/rocessor.js';
 import { getMoneyStyle } from '@/utils/rocessor.js';
 import { mapState, mapMutations } from 'vuex';
 import { mapState, mapMutations } from 'vuex';
 import uniLoadMore from '@/uview-ui/components/u-loadmore/u-loadmore.vue';
 import uniLoadMore from '@/uview-ui/components/u-loadmore/u-loadmore.vue';
@@ -98,36 +97,14 @@ export default {
 			tabCurrentIndex: 0,
 			tabCurrentIndex: 0,
 			orderStatusSum: 0,
 			orderStatusSum: 0,
 			recharge: 0,
 			recharge: 0,
-			
 			navList: [
 			navList: [
 				{
 				{
 					state: 0,
 					state: 0,
 					text: '收入',
 					text: '收入',
 					loadingType: 'more',
 					loadingType: 'more',
-					orderList: [
-						{
-							title:'2233',
-							add_time:'2021-5-4',
-							number:22222
-						},
-						{
-							title:'2233',
-							add_time:'2021-5-4',
-							number:22222
-						},
-						{
-							title:'2233',
-							add_time:'2021-5-4',
-							number:22222
-						},
-						{
-							title:'2233',
-							add_time:'2021-5-4',
-							number:22222
-						}
-					],
+					orderList: [],
 					page: 1, //当前页数
 					page: 1, //当前页数
-					limit: 10 ,//每次信息条数
+					limit: 10, //每次信息条数
 					loaded: false
 					loaded: false
 				},
 				},
 				{
 				{
@@ -136,7 +113,7 @@ export default {
 					loadingType: 'more',
 					loadingType: 'more',
 					orderList: [],
 					orderList: [],
 					page: 1, //当前页数
 					page: 1, //当前页数
-					limit: 10 ,//每次信息条数
+					limit: 10, //每次信息条数
 					loaded: false
 					loaded: false
 				}
 				}
 			],
 			],
@@ -164,8 +141,8 @@ export default {
 			//这里是将订单挂载到tab列表下
 			//这里是将订单挂载到tab列表下
 			let index = this.tabCurrentIndex;
 			let index = this.tabCurrentIndex;
 			let navItem = this.navList[index];
 			let navItem = this.navList[index];
-			let state = navItem.state + 3;
-			console.log(source,"iwiwiwiwi");
+			let state = navItem.state;
+			console.log(source, 'iwiwiwiwi');
 			if (source === 'tabChange' && navItem.loaded === true) {
 			if (source === 'tabChange' && navItem.loaded === true) {
 				//tab切换只有第一次需要加载数据
 				//tab切换只有第一次需要加载数据
 				return;
 				return;
@@ -177,34 +154,19 @@ export default {
 			// 修改当前对象状态为加载中
 			// 修改当前对象状态为加载中
 			navItem.loadingType = 'loading';
 			navItem.loadingType = 'loading';
 
 
-			spreadCommission(
-				{
-					page: navItem.page,
-					limit: navItem.limit
-				},
-				state
-			)
+			integrallist({
+				page: navItem.page,
+				limit: navItem.limit
+			})
 				.then(({ data }) => {
 				.then(({ data }) => {
-					obj.recharge = data.income;
-					obj.orderStatusSum = data.expend;
-						console.log(data);
-					if (data.list.length > 0) {
-						navItem.orderList = navItem.orderList.concat(data.list[0].list);
-						console.log(navItem.orderList);
-						navItem.page++;
-					}else {
-						navItem.loadingType = 'noMore';
+					// obj.recharge = data.income;
+					// obj.orderStatusSum = data.expend;
+					if(state == 0 ){
+						navItem.orderList = data.zj
 					}
 					}
-					if (navItem.limit == data.length) {
-						//判断是否还有数据, 有改为 more, 没有改为noMore
-						navItem.loadingType = 'more';
-						return;
-					} else {
-						//判断是否还有数据, 有改为 more, 没有改为noMore
-						navItem.loadingType = 'noMore';
+					if(state == 1 ){
+						navItem.orderList = data.kc
 					}
 					}
-					uni.hideLoading();
-					this.$set(navItem, 'loaded', true);
 				})
 				})
 				.catch(e => {
 				.catch(e => {
 					console.log(e);
 					console.log(e);
@@ -345,7 +307,7 @@ page {
 	font-size: 30rpx;
 	font-size: 30rpx;
 	font-family: PingFang SC;
 	font-family: PingFang SC;
 	font-weight: bold;
 	font-weight: bold;
-	color: #FFFFFF;
+	color: #ffffff;
 	text {
 	text {
 		display: inline-block;
 		display: inline-block;
 		padding-left: 10rpx;
 		padding-left: 10rpx;

+ 201 - 253
pages/money/wallet.vue

@@ -1,187 +1,126 @@
 <template>
 <template>
 	<view class="content">
 	<view class="content">
 		<view class="content-money">
 		<view class="content-money">
-			<view class="money-box">
-				<view class="text">可提现金额(元)</view>
-				<view class="money">{{ money | getMoneyStyle }}</view>
-			</view>
-			<view class="moneyTx" @click="navto('/pages/money/recharge')">充值</view>
-			<view class="flex buttom-box">
-				<view class="buttom" @click="navto('/pages/money/recharge')">
-					<view class="icon"><image class="icon-img" src="/static/icon/i5.png" mode="aspectFit"></image></view>
-					<text>充值</text>
-				</view>
-				<view class="interval"></view>
-				<view class="buttom" @click="navto('/pages/money/withdrawal')">
-					<view class="icon"><image class="icon-img" src="/static/icon/i1.png" mode="aspectFit"></image></view>
-					<text>提现</text>
+			<view class="flex">
+				<view class="buttom">
+					<view class="icon">{{ userInfo.anticipate | getMoneyStyle }}</view>
+					<text class="text">可用预约券</text>
 				</view>
 				</view>
 			</view>
 			</view>
 		</view>
 		</view>
-		<view class="navbar">
-			<view v-for="(item, index) in navList" :key="index" class="nav-item" :class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">{{ item.text }}</view>
+		<view class="row-box">
+			<view class="title">收款人id</view>
+			<view class="row"><input class="input" type="number" v-model="card" placeholder="请输入收款人id" placeholder-class="placeholder" /></view>
+		</view>
+		<view class="row-box">
+			<view class="title">转账金额</view>
+			<view class="row">
+				<!-- <text class="tit">¥</text> -->
+				<input class="input" type="number" v-model="withdrawal" placeholder="转入金额" placeholder-class="placeholder" />
+				<view class="buttom" @click="withdrawal = userInfo.anticipate">全部转账</view>
+			</view>
 		</view>
 		</view>
-		<swiper :current="tabCurrentIndex" :style="{'height':maxheight+'px'}" class="swiper-box" duration="300" @change="changeTab">
-			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
-				<scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData">
-					<!-- 空白页 -->
-					<empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
 
 
-					<!-- 订单列表 -->
-					<view v-for="(item, index) in tabItem.orderList" :key="index" class="order-item flex">
-						<view class="title-box">
-							<view class="title">
-								<text>{{ item.title }}</text>
-							</view>
-							<view class="time">
-								<text>{{ item.add_time }}</text>
-							</view>
-						</view>
-						<view class="money">
-							<text>{{ (item.pm == 0 ? '-' : '+') + item.number }}</text>
-						</view>
-					</view>
-					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
-				</scroll-view>
-			</swiper-item>
-		</swiper>
+		<button class="add-btn up" :class="{ action: loding }" @click="!loding ? confirm() : ''">提交申请</button>
 	</view>
 	</view>
 </template>
 </template>
 
 
 <script>
 <script>
-import { spreadCommission, userBalance } from '@/api/wallet.js';
 import { getMoneyStyle } from '@/utils/rocessor.js';
 import { getMoneyStyle } from '@/utils/rocessor.js';
-import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
-import empty from '@/components/empty';
+import { getUserInfo,transfer_accounts  } from '@/api/user.js';
+import { mapMutations, mapState } from 'vuex';
 export default {
 export default {
 	filters: {
 	filters: {
 		getMoneyStyle
 		getMoneyStyle
 	},
 	},
-	components: {
-		empty,
-		uniLoadMore
-	},
-	onReady() {
-		// 初始化获取页面宽度
-		uni.createSelectorQuery()
-			.select('.content')
-			.fields(
-				{
-					size: true
-				},
-				data => {
-					console.log(data);
-					console.log(Math.floor((data.width / 750) * 300));
-					// 保存头部高度
-					this.maxheight =data.height - Math.floor((data.width / 750) * 570);
-					console.log(this.maxheight);
-				}
-			)
-			.exec();
-	},
 	data() {
 	data() {
 		return {
 		return {
-			// 头部图高度
-			maxheight:'',
-			tabCurrentIndex: 0,
-			navList: [
-				{
-					state: 0,
-					text: '全部',
-					loadingType: 'more',
-					orderList: [],
-					page: 1, //当前页数
-					limit: 10 //每次信息条数
-				},
-				{
-					state: 1,
-					text: '支出',
-					loadingType: 'more',
-					orderList: [],
-					page: 1, //当前页数
-					limit: 10 //每次信息条数
-				},
-				{
-					state: 2,
-					text: '收入',
-					loadingType: 'more',
-					orderList: [],
-					page: 1, //当前页数
-					limit: 10 //每次信息条数
-				}
-			],
-			money: ''
+			money: '0.00', //可提现金额
+			withdrawal: '', //提现金额
+			password: '', //支付密码
+			card: '', //转账卡号
+			name: '',
+			// #ifdef H5
+			weichatBsrowser: false,
+			// #endif
+			loding: false,
+			type: 'xl'
 		};
 		};
 	},
 	},
-	onLoad(options) {},
-	onShow() {
-		this.loadData();
-		// 获取用户余额
-		userBalance({}).then(({ data }) => {
-			this.money = data.now_money;
-		});
+	onLoad(options) {
+		// #ifdef H5
+		this.weichatBsrowser = uni.getStorageSync('weichatBrowser');
+		// #endif
+		this.dataUp();
+		if (options.type) {
+			this.type = options.type;
+			console.log(this.type);
+		}
+	},
+	computed: {
+		...mapState('user', ['userInfo'])
 	},
 	},
 	methods: {
 	methods: {
-		// 页面跳转
-		navto(e) {
-			uni.navigateTo({
-				url: e
-			});
-		},
-		//获取收入支出信息
-		async loadData(source) {
-			//这里是将订单挂载到tab列表下
-			let index = this.tabCurrentIndex;
-			let navItem = this.navList[index];
-			let state = navItem.state;
-			if (source === 'tabChange' && navItem.loaded === true) {
-				//tab切换只有第一次需要加载数据
-				return;
-			}
-			if (navItem.loadingType === 'loading') {
-				//防止重复加载
-				return;
-			}
-			// 修改当前对象状态为加载中
-			navItem.loadingType = 'loading';
-
-			spreadCommission(
-				{
-					page: navItem.page,
-					limit: navItem.limit
-				},
-				state
-			)
-				.then(({ data }) => {
-					if (data.length > 0) {
-						navItem.orderList = navItem.orderList.concat(data[0].list);
-						console.log(navItem.orderList);
-						navItem.page++;
-					}
-					if (navItem.limit == data.length) {
-						//判断是否还有数据, 有改为 more, 没有改为noMore
-						navItem.loadingType = 'more';
-						return;
-					} else {
-						//判断是否还有数据, 有改为 more, 没有改为noMore
-						navItem.loadingType = 'noMore';
-					}
-					uni.hideLoading();
-					this.$set(navItem, 'loaded', true);
+		...mapMutations('user', ['setUserInfo', 'login']),
+		// 更新数据
+		dataUp() {
+			let obj = this;
+			getUserInfo({})
+				.then(e => {
+					obj.login();
+					// 保存返回用户数据
+					obj.setUserInfo(e.data);
 				})
 				})
 				.catch(e => {
 				.catch(e => {
 					console.log(e);
 					console.log(e);
 				});
 				});
 		},
 		},
-
-		//swiper 切换
-		changeTab(e) {
-			this.tabCurrentIndex = e.target.current;
-			this.loadData('tabChange');
+		// 切换选中对象
+		tabRadio(e) {
+			this.type = e.detail.value;
 		},
 		},
-		//顶部tab点击
-		tabClick(index) {
-			this.tabCurrentIndex = index;
+		// 提交
+		confirm() {
+			let obj = this;
+			obj.loding = true;
+			if (obj.withdrawal == 0) {
+				obj.loding = false;
+				uni.showModal({
+					title: '提示',
+					content: '转账金额不要为0'
+				});
+				return;
+			}
+			if (obj.card == obj.userInfo.phone) {
+				obj.loding = false;
+				uni.showModal({
+					title: '提示',
+					content: '不要输入自己的用户账号'
+				});
+			} else {
+				let data = {
+					uid: obj.card, //编号
+					anticipate: obj.withdrawal //金额
+				};
+				transfer_accounts(data)
+					.then(e => {
+						// 允许按钮点击
+						obj.loding = false;
+						// 初始化提现金额
+						obj.withdrawal = '';
+						uni.showToast({
+							title: '提交成功',
+							duration: 2000,
+							position: 'top'
+						});
+						obj.dataUp();
+					})
+					.catch(e => {
+						obj.$api.msg(e.msg);
+						obj.loding = false;
+						console.log();
+					});
+			}
 		}
 		}
 	}
 	}
 };
 };
@@ -189,129 +128,138 @@ export default {
 
 
 <style lang="scss">
 <style lang="scss">
 page {
 page {
-	background: #ffffff;
 	height: 100%;
 	height: 100%;
 }
 }
 .content-money {
 .content-money {
-	padding-bottom: 30rpx;
-	background: $page-color-base;
-	.moneyTx {
-		position: absolute;
-		top: 150rpx;
-		right: 0rpx;
-		width: 150rpx;
-		padding: 10rpx 30rpx;
-		border: 2px solid #ffffff;
-		border-top-left-radius: 99rpx;
-		border-bottom-left-radius: 99rpx;
-		color: #ffffff;
-		line-height: 1;
-		font-size: $font-base;
-	}
-	.buttom-box {
-		background-color: #ffffff;
-		text-align: center;
-		margin: 0 30rpx;
-		padding: 20rpx 0;
-		border-radius: $border-radius-sm;
-		margin-top: -60rpx;
-		.buttom {
-			font-size: $font-lg;
-			flex-grow: 1;
-		}
-		.interval {
-			width: 2px;
-			height: 60rpx;
-			background-color: #eeeeee;
-		}
-		.icon {
-			height: 50rpx;
-			width: 48rpx;
-			margin: 0 auto;
-			.icon-img {
-				width: 100%;
-				height: 100%;
-			}
-		}
-	}
+	padding: 30rpx 0;
+	background: #ffffff;
 }
 }
-.money-box {
-	background-color: $base-color;
-	padding-top: var(--status-bar-height);
-	height: 368rpx;
-	color: #ffffff;
+
+.item {
+	padding: 0 $page-row-spacing;
+	background-color: #ffffff;
+}
+.flex {
+	background-color: #ffffff;
 	text-align: center;
 	text-align: center;
-	.text {
-		padding-top: 147rpx;
-		font-size: $font-sm;
+	margin: 0 30rpx;
+	border-radius: $border-radius-sm;
+	justify-content: center;
+	.buttom {
+		font-size: $font-lg;
+		width: 50%;
+	}
+	.interval {
+		width: 2px;
+		height: 60rpx;
+		background-color: #eeeeee;
+	}
+	.icon {
+		background-size: 100%;
+		font-size: 42rpx;
+		color: $font-color-dark;
+		font-weight: bold;
+		background-repeat: no-repeat;
+		background-position: center;
 	}
 	}
-	.money {
-		font-size: 56rpx;
+	.text {
+		color: $font-color-light;
 	}
 	}
 }
 }
 
 
-.navbar {
-	display: flex;
-	height: 40px;
-	padding: 0 5px;
+.row-box {
+	margin-top: 30rpx;
+	padding: 20rpx 30rpx;
 	background: #fff;
 	background: #fff;
-	box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
-	position: relative;
-	z-index: 10;
-	.nav-item {
-		flex: 1;
+	.title {
+		font-size: $font-base + 2rpx;
+		color: $font-color-dark;
+	}
+	.row {
 		display: flex;
 		display: flex;
-		justify-content: center;
 		align-items: center;
 		align-items: center;
-		height: 100%;
-		font-size: 15px;
-		color: $font-color-dark;
 		position: relative;
 		position: relative;
-		&.current {
-			color: $base-color;
-			&:after {
-				content: '';
-				position: absolute;
-				left: 50%;
-				bottom: 0;
-				transform: translateX(-50%);
-				width: 44px;
-				height: 0;
-				border-bottom: 2px solid $base-color;
-			}
+		height: 80rpx;
+		.tit {
+			flex-shrink: 0;
+			width: 40rpx;
+			font-size: 30rpx;
+			color: $font-color-dark;
+		}
+		.input {
+			flex: 1;
+			font-size: 30rpx;
+			color: $font-color-dark;
+		}
+		.iconlocation {
+			font-size: 36rpx;
+			color: $font-color-light;
+		}
+
+		.buttom {
+			color: #f21f5d;
+			font-size: $font-base;
 		}
 		}
 	}
 	}
 }
 }
-// 列表
-
-.swiper-box {
-	padding-top: 10rpx;
-	.order-item {
-		padding: 20rpx 30rpx;
-		line-height: 1.5;
+.add-btn {
+	width: 520rpx;
+	height: 80rpx;
+	border: 2rpx solid #f21f5d;
+	border-radius: 40rpx;
+	margin: 140rpx auto;
+	font-family: PingFang SC;
+	font-weight: bold;
+	color: #f21f5d;
+}
+.name {
+	background: #fff;
+	padding: 30rpx;
+}
+.list {
+	padding-left: 30rpx;
+	margin-top: 30rpx;
+	background-color: #ffffff;
+	.box {
+		display: flex;
+		align-items: center;
+		width: 100%;
+		height: 120rpx;
+		border-bottom: 1px solid $border-color-light;
+		.icon {
+			font-size: 48rpx;
+			padding-right: 20rpx;
+			.icon-img {
+				height: 50rpx;
+				width: 50rpx;
+			}
+		}
+		.iconweixin1 {
+			color: #18bf16;
+		}
+		.iconzhifubao {
+			color: #08aaec;
+		}
 		.title-box {
 		.title-box {
+			flex-grow: 1;
+			text-align: left;
 			.title {
 			.title {
-				font-size: $font-lg;
+				font-size: $font-base + 2rpx;
 				color: $font-color-base;
 				color: $font-color-base;
 			}
 			}
-			.time {
-				font-size: $font-base;
+			.node {
+				font-size: $font-sm;
 				color: $font-color-light;
 				color: $font-color-light;
 			}
 			}
 		}
 		}
-		.money {
-			color: #fd5b23;
-			font-size: $font-lg;
-		}
 	}
 	}
 }
 }
-.list-scroll-content {
-	height: 100%;
+.tip {
+	padding: 20rpx;
+	color: #ff0000;
 }
 }
-.content {
-	height: 100%;
-	.empty-content {
-		background-color: #ffffff;
-	}
+/deep/ .uni-radio-input {
+	width: 45rpx;
+	height: 45rpx;
 }
 }
 </style>
 </style>

+ 19 - 28
pages/money/withdrawal.vue

@@ -1,6 +1,6 @@
 <template>
 <template>
 	<view class="content">
 	<view class="content">
-		<uni-notice-bar single="true" text="每月25号到月底可提现上月结算余额"></uni-notice-bar>
+		<!-- <uni-notice-bar single="true" text="每月25号到月底可提现上月结算余额"></uni-notice-bar> -->
 		<view class="content-money">
 		<view class="content-money">
 			<view class="flex ">
 			<view class="flex ">
 				<view class="buttom">
 				<view class="buttom">
@@ -25,7 +25,7 @@
 		<!-- #ifndef MP-WEIXIN -->
 		<!-- #ifndef MP-WEIXIN -->
 		<view class="list" v-if="!weichatBsrowser">
 		<view class="list" v-if="!weichatBsrowser">
 			<radio-group @change="tabRadio">
 			<radio-group @change="tabRadio">
-				<label>
+				<!-- <label>
 					<view class="box">
 					<view class="box">
 						<view class="icon iconfont iconweixin1"></view>
 						<view class="icon iconfont iconweixin1"></view>
 						<view class="title-box">
 						<view class="title-box">
@@ -33,17 +33,17 @@
 						</view>
 						</view>
 						<view class="right"><radio value="weixin" color="#5dbc7c" :checked="type == 'weixin'" /></view>
 						<view class="right"><radio value="weixin" color="#5dbc7c" :checked="type == 'weixin'" /></view>
 					</view>
 					</view>
-				</label>
+				</label> -->
 				<label>
 				<label>
 					<view class="box">
 					<view class="box">
 						<view class="icon iconfont iconzhifubao"></view>
 						<view class="icon iconfont iconzhifubao"></view>
 						<view class="title-box">
 						<view class="title-box">
 							<view class="title">
 							<view class="title">
-								<text v-if="aliData.fullname">提现至支付宝</text>
+								<text v-if="aliData.name">提现至支付宝</text>
 								<text v-else>请创建支付宝账号</text>
 								<text v-else>请创建支付宝账号</text>
 							</view>
 							</view>
 							<view class="node">
 							<view class="node">
-								<text v-if="aliData.fullname">真实姓名({{ aliData.fullname }})</text>
+								<text v-if="aliData.name">真实姓名({{ aliData.name }})</text>
 							</view>
 							</view>
 						</view>
 						</view>
 						<view class="right"><radio value="alipay" color="#5dbc7c" :checked="type == 'alipay'" /></view>
 						<view class="right"><radio value="alipay" color="#5dbc7c" :checked="type == 'alipay'" /></view>
@@ -54,11 +54,11 @@
 						<view class="icon iconfont"><image class="icon-img" src="/static/icon/i8.png" mode="aspectFit"></image></view>
 						<view class="icon iconfont"><image class="icon-img" src="/static/icon/i8.png" mode="aspectFit"></image></view>
 						<view class="title-box">
 						<view class="title-box">
 							<view class="title">
 							<view class="title">
-								<text v-if="bankData.bankno">{{ bankData.bank + ' ' + bankData.bankno }}</text>
+								<text v-if="bankData.payment">{{ bankData.bank + ' ' + bankData.payment }}</text>
 								<text v-else>请创建银行账号</text>
 								<text v-else>请创建银行账号</text>
 							</view>
 							</view>
 							<view class="node">
 							<view class="node">
-								<text v-if="bankData.fullname">真实姓名({{ bankData.fullname }})</text>
+								<text v-if="bankData.name">真实姓名({{ bankData.name }})</text>
 							</view>
 							</view>
 						</view>
 						</view>
 						<view class="right"><radio value="bank" color="#5dbc7c" :checked="type == 'bank'" /></view>
 						<view class="right"><radio value="bank" color="#5dbc7c" :checked="type == 'bank'" /></view>
@@ -68,13 +68,13 @@
 		</view>
 		</view>
 		<!-- #endif -->
 		<!-- #endif -->
 		<button class="add-btn up" @click="confirm">提交申请</button>
 		<button class="add-btn up" @click="confirm">提交申请</button>
-		<button class="add-btn modified" v-if="!weichatBsrowser" @click="navTo('/pages/money/account')">账号管理</button>
+		<button class="add-btn modified" @click="navTo('/pages/collection/collection')">账号管理</button>
 	</view>
 	</view>
 </template>
 </template>
 
 
 <script>
 <script>
 import { getMoneyStyle } from '@/utils/rocessor.js';
 import { getMoneyStyle } from '@/utils/rocessor.js';
-import { extractCash, extractBank, aliInfo, bankInfo } from '@/api/wallet.js';
+import { extractCash, extractBank, pay_list } from '@/api/wallet.js';
 import uniNoticeBar from '@/components/uni-notice-bar/uni-notice-bar.vue';
 import uniNoticeBar from '@/components/uni-notice-bar/uni-notice-bar.vue';
 export default {
 export default {
 	filters: {
 	filters: {
@@ -85,7 +85,7 @@ export default {
 	},
 	},
 	data() {
 	data() {
 		return {
 		return {
-			type: 'weixin', //提现方式
+			type: 'ali', //提现方式
 			money: '0.00', //可提现金额
 			money: '0.00', //可提现金额
 			freeze: '0.0', //冻结金额
 			freeze: '0.0', //冻结金额
 			withdrawal: '', //提现金额
 			withdrawal: '', //提现金额
@@ -104,26 +104,16 @@ export default {
 		//加载提现信息
 		//加载提现信息
 		this.loadData();
 		this.loadData();
 		// 加载提款账号信息
 		// 加载提款账号信息
-		this.loadAli();
-		this.loadBank();
+		this.loadinfo();
 	},
 	},
 	methods: {
 	methods: {
-		// 更新数据
-		dataUp(){
-			this.loadAli();
-			this.loadBank();
-		},
 		//加载数据
 		//加载数据
-		async loadAli(source) {
-			aliInfo({}).then(e => {
-				this.aliData = e.data;
-			});
-		},
-		// 加载银行卡信息
-		async loadBank() {
-			bankInfo({}).then(e => {
-				this.bankData = e.data;
-			});
+		async loadinfo(source) {
+			pay_list().then(({data}) =>{
+				this.aliData = data.zfb
+				this.bankData = data.bank
+				console.log(data);
+			})
 		},
 		},
 		// 加载余额信息
 		// 加载余额信息
 		async loadData() {
 		async loadData() {
@@ -192,6 +182,7 @@ page {
 	border-radius: $border-radius-sm;
 	border-radius: $border-radius-sm;
 	.buttom {
 	.buttom {
 		font-size: $font-lg;
 		font-size: $font-lg;
+		color: $font-color-dark;
 		width: 50%;
 		width: 50%;
 	}
 	}
 	.interval {
 	.interval {
@@ -242,7 +233,7 @@ page {
 		}
 		}
 
 
 		.buttom {
 		.buttom {
-			color: $font-color-spec;
+			color: #dc262b;
 			font-size: $font-base;
 			font-size: $font-base;
 		}
 		}
 	}
 	}

+ 101 - 0
pages/order/index.vue

@@ -0,0 +1,101 @@
+<template>
+	<view class="content">
+		<view class="order-title"><text>订单选择</text></view>
+		<view class="title">请选择订单类型</view>
+		<view class="tip">请您选择您需要查看的订单类型</view>
+		<view class="order" @click="nav('/pages/order/order1?state=0')">
+			<image src="../../static/img/order1.png" mode=""></image>
+		</view>
+		<view class="order" @click="nav('/pages/order/order')">
+			<image src="../../static/img/order2.png" mode=""></image>
+		</view>
+		<u-tabbar activeColor="#f42b4e" v-model="current" :list="tabbar" :mid-button="true"></u-tabbar>
+	</view>
+</template>
+
+<script>
+import { tabbar } from '@/utils/tabbar.js';
+export default {
+	data() {
+		return {
+			tabbar: tabbar,
+			current: 1 //底部tabar选中的icon对象
+		};
+	},
+	methods: {
+		nav(url) {
+			uni.navigateTo({
+				url
+			})
+		}
+	}
+};
+</script>
+
+<style lang="less">
+.order-title {
+	width: 750rpx;
+	height: 200rpx;
+	background: url(../../static/img/order99.png) repeat-x 0;
+	display: flex;
+	flex-direction: column;
+	text-align: center;
+
+	text {
+		margin: 30px 0;
+		font-size: 17px;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: #ffffff;
+	}
+
+	.roder-content {
+		display: flex;
+		justify-content: space-around;
+
+		.left {
+			width: 168px;
+			height: 40px;
+			line-height: 40px;
+			border: 1px solid #ffffff;
+			border-radius: 5px;
+			text-align: center;
+			font-size: 15px;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #ffffff;
+			background: #dc262b;
+		}
+
+		.current {
+			color: #dc262b;
+			background: #ffffff;
+		}
+	}
+}
+.title {
+	margin: 80rpx 34rpx 0;
+	font-size: 42rpx;
+	font-family: PingFang SC;
+	font-weight: bold;
+	color: #000000;
+}
+.tip {
+	margin: 26rpx 34rpx 50rpx;
+	font-size: 28rpx;
+	font-family: PingFang SC;
+	font-weight: bold;
+	color: #9F9F9F;
+}
+.order {
+	margin: 30rpx auto 0;
+	width: 700rpx;
+	height: 184rpx;
+	box-shadow: 0px 6rpx 30rpx 0px rgba(166, 166, 166, 0.16);
+	border-radius: 20rpx;
+	image {
+		width: 100%;
+		height: 100%;
+	}
+}
+</style>

+ 647 - 77
pages/order/order1.vue

@@ -1,105 +1,675 @@
 <template>
 <template>
 	<view class="content">
 	<view class="content">
 		<view class="navbar">
 		<view class="navbar">
-			<view v-for="(item, index) in navList" :key="index" class="nav-item"
-				:class="{ current: tabCurrentIndex === index }" @click="navTo(index)">{{ item.text }}</view>
+			<view v-for="(item, index) in navList" :key="index" class="nav-item" :class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">{{ item.text }}</view>
 		</view>
 		</view>
-		<swiper :indicator-dots="true" :autoplay="true" :interval="3000" :duration="1000"  :class="{current:tabCurrentIndex===0}">
-			<swiper-item v-for="(item,index) in navList">
-				<view class="swiper-item">1111</view>
+
+		<swiper :current="tabCurrentIndex" class="swiper-box" duration="300" @change="changeTab">
+			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
+				<scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData">
+					<!-- 空白页 -->
+					<empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
+
+					<!-- 订单列表 -->
+					<view @click="goToOrderDetail(item)" v-for="(item, index) in tabItem.orderList" :key="index" class="order-item">
+						<view class="i-top b-b">
+							<text class="time">{{ item._add_time }}</text>
+							<text class="state" :style="{ color: item.stateTipColor }">{{ item._status._title }}</text>
+							<text v-if="item.status === 4" class="del-btn iconfont icondelete" @click="deleteOrder(index)"></text>
+						</view>
+
+						<scroll-view v-if="item.cartInfo.length > 1" class="goods-box" scroll-x>
+							<view v-for="(goodsItem, goodsIndex) in item.cartInfo" :key="goodsIndex" class="goods-item">
+								<image class="goods-img" :src="goodsItem.productInfo.image" mode="aspectFill"></image>
+							</view>
+						</scroll-view>
+						<!-- <view v-if="item.cartInfo.length === 1" class="goods-box-single" v-for="(goodsItem, goodsIndex) in item.cartInfo" :key="goodsIndex">
+							<image class="goods-img" :src="goodsItem.productInfo.image" mode="aspectFill"></image>
+							<view class="right">
+								<text class="title clamp">{{ goodsItem.productInfo.store_name }}</text>
+								<text class="attr-box">{{ goodsItem.attrInfo ? goodsItem.attrInfo.suk : '' }} x {{ goodsItem.cart_num }}</text>
+								<text class="price">{{ moneyNum(goodsItem.productInfo.price)}}</text>
+							</view>
+						</view> -->
+						<view class="goods-box-single" v-for="(goodsItem, goodsIndex) in item.cartInfo" :key="goodsIndex">
+							<image class="goods-img" :src="goodsItem.productInfo.image" mode="scaleToFill"></image>
+							<view class="right">
+								<view class="flex-start">
+									<text class="title clamp">{{ goodsItem.productInfo.store_name }}</text>
+									<text class="price">{{ goodsItem.productInfo.price|moneyNum }}</text>
+								</view>
+								<view class="row flex">
+									<text class="row_title">{{ goodsItem.productInfo.attrInfo ? goodsItem.productInfo.attrInfo.suk : '' }}</text>
+									<text class="attr-box"> x {{ goodsItem.cart_num }}</text>
+								</view>
+							</view>
+						</view>
+
+						<view class="price-box">
+							共
+							<text class="num">{{ item.cartInfo.length }}</text>
+							件商品 邮费
+							<text class="price">{{ moneyNum(item.pay_postage)}}</text>
+							实付款
+							<text class="price">{{ moneyNum(item.pay_price)}}</text>
+						</view>
+						<view class="action-box b-t" v-if="item.status != 5">
+							<button v-if="item._status._title == '未支付'" class="action-btn" @click.stop="cancelOrder(item)">取消订单</button>
+							<button v-if="item._status._title == '未支付'" @click.stop="orderPay(item)" class="action-btn recom">立即支付</button>
+							<button v-if="item._status._title == '待评价'" class="action-btn">评价</button>
+							<button v-if="item._status._title == '待收货'" @click.stop="orderTake(item, index)" class="action-btn">确认收货</button>
+							<button v-if="item._status._title == '未发货'" class="action-btn" @click.stop="orderRefund(item)">申请退款</button>
+						</view>
+					</view>
+
+					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
+				</scroll-view>
 			</swiper-item>
 			</swiper-item>
 		</swiper>
 		</swiper>
-
 	</view>
 	</view>
 </template>
 </template>
 
 
 <script>
 <script>
-	export default {
-		data() {
-			return {
-				tabCurrentIndex: 0, //当前选择
-				navList: [{
-						state: 0,
-						text: '待付款',
-						loadingType: 'more',
-						orderList: [],
-						page: 1, //当前页数
-						limit: 10 //每次信息条数
-					},
-					{
-						state: 1,
-						text: '待发货',
-						loadingType: 'more',
-						orderList: [],
-						page: 1, //当前页数
-						limit: 10 //每次信息条数
-					},
-					{
-						state: 2,
-						text: '待收货',
-						loadingType: 'more',
-						orderList: [],
-						page: 1, //当前页数
-						limit: 10 //每次信息条数
-					},
-					{
-						state: 3,
-						text: '待评价',
-						loadingType: 'more',
-						orderList: [],
-						page: 1, //当前页数
-						limit: 10 //每次信息条数
-					},
-					{
-						state: 4,
-						text: '已完成',
-						loadingType: 'more',
-						orderList: [],
-						page: 1, //当前页数
-						limit: 10 //每次信息条数
-					}
-				]
+import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+import empty from '@/components/empty';
+import { orderList, orderCancel, orderDel, orderTake } from '@/api/order.js';
+export default {
+	components: {
+		uniLoadMore,
+		empty
+	},
+	data() {
+		return {
+			tabCurrentIndex: 0,
+			navList: [
+				{
+					state: 0,
+					text: '待付款',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 1,
+					text: '待发货',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 2,
+					text: '待收货',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 3,
+					text: '待评价',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 4,
+					text: '已完成',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				}
+			]
+		};
+	},
+
+	onLoad(options) {
+		/**
+		 * 修复app端点击除全部订单外的按钮进入时不加载数据的问题
+		 * 替换onLoad下代码即可
+		 */
+		this.tabCurrentIndex = +options.state;
+		// #ifndef MP
+		this.loadData();
+		// #endif
+		// #ifdef MP
+		if (options.state == 0) {
+			this.loadData();
+		}
+		// #endif
+	},
+	// #ifdef APP-PLUS || H5
+	onBackPress(e){
+		uni.switchTab({
+			url: '/pages/user/user',
+		});
+		return true;
+	},
+	// #endif
+	methods: {
+		// 转换金额为数字
+		moneyNum(value){
+				return +value;
+		},
+		// 确认收货
+		orderTake(item, index) {
+			let obj = this;
+			uni.showModal({
+				title: '是否确认收货?',
+				success: () => {
+					orderTake({
+						uni: item.order_id
+					})
+						.then(e => {
+							obj.navList[obj.tabCurrentIndex].orderList.splice(index, 1);
+							uni.showToast({
+								title: '收货成功'
+							});
+						})
+						.catch(e => {
+							console.log(e);
+						});
+				}
+			});
+		},
+		//跳转到订单详情
+		goToOrderDetail(e) {
+			uni.navigateTo({
+				url: '/pages/order/orderDetail?id=' + e.order_id
+			});
+		},
+		// 申请退款
+		orderRefund(e) {
+			uni.navigateTo({
+				url: '/pages/order/orderRefund?id=' + e.order_id
+			});
+		},
+		// 订单支付
+		orderPay(e) {
+			uni.navigateTo({
+				url: '/pages/money/pay?type=1&ordid=' + e.order_id + '&money=' + e.pay_price
+			});
+		},
+		//获取订单列表
+		loadData(source) {
+			//这里是将订单挂载到tab列表下
+			let index = this.tabCurrentIndex;
+			let navItem = this.navList[index];
+			let state = navItem.state;
+			if (source === 'tabChange' && navItem.loaded === true) {
+				//tab切换只有第一次需要加载数据
+				return;
+			}
+			if (navItem.loadingType === 'loading') {
+				//防止重复加载
+				return;
 			}
 			}
+			if (navItem.loadingType === 'noMore') {
+				//防止重复加载
+				return;
+			}
+			// 修改当前对象状态为加载中
+			navItem.loadingType = 'loading';
+
+			orderList({
+				type: state,
+				page: navItem.page,
+				limit: navItem.limit
+			})
+				.then(({ data }) => {
+					let arr = data.map(e => {
+						let b = this.orderStateExp(e.status);
+						e.stateTip = b.stateTip;
+						e.stateTipColor = b.stateTipColor;
+						return e;
+					});
+					navItem.orderList = navItem.orderList.concat(arr);
+					// console.log(navItem.orderList);
+					navItem.page++;
+					if (navItem.limit == data.length) {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						navItem.loadingType = 'more';
+						return;
+					} else {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						navItem.loadingType = 'noMore';
+					}
+					uni.hideLoading();
+					this.$set(navItem, 'loaded', true);
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+
+		//swiper 切换
+		changeTab(e) {
+			this.tabCurrentIndex = e.target.current;
+			this.loadData('tabChange');
+		},
+		//顶部tab点击
+		tabClick(index) {
+			this.tabCurrentIndex = index;
+		},
+		//删除订单
+		deleteOrder(index) {
+			uni.showLoading({
+				title: '请稍后'
+			});
+			setTimeout(() => {
+				this.navList[this.tabCurrentIndex].orderList.splice(index, 1);
+				uni.hideLoading();
+			}, 600);
+		},
+		//取消订单
+		cancelOrder(item) {
+			uni.showModal({
+				title: '订单取消',
+				content: '是否取消订单?',
+				success: e => {
+					if (e.confirm) {
+						uni.showLoading({
+							title: '请稍后'
+						});
+						orderCancel({ id: item.order_id })
+							.then(e => {
+								uni.showToast({
+									title: '取消成功',
+									duration: 2000,
+									position: 'top'
+								});
+							})
+							.catch(e => {
+								console.log(e);
+							});
+						//取消订单后删除待付款中该项
+						let list = this.navList[this.tabCurrentIndex].orderList;
+						let index = list.findIndex(val => val.id === item.id);
+						index !== -1 && list.splice(index, 1);
+						uni.hideLoading();
+					}
+				}
+			});
 		},
 		},
-		methods: {
-			navTo(index){
-				this.tabCurrentIndex = index
+
+		//订单状态文字和颜色
+		orderStateExp(state) {
+			let stateTip = '',
+				stateTipColor = '#fa436a';
+			switch (+state) {
+				case 0:
+					stateTip = '待付款';
+					break;
+				case 1:
+					stateTip = '待发货';
+					break;
+				case 2:
+					stateTip = '待收货';
+					break;
+				case 3:
+					stateTip = '待评价';
+					break;
+				case 4:
+					stateTip = '已完成';
+					stateTipColor = '#5dbc7c';
+					break;
+				case 9:
+					stateTip = '订单已关闭';
+					stateTipColor = '#909399';
+					break;
+
+				//更多自定义
 			}
 			}
+			return { stateTip, stateTipColor };
 		}
 		}
 	}
 	}
+};
 </script>
 </script>
 
 
 <style lang="scss">
 <style lang="scss">
-	.content {
-		background: $page-color-base;
+page,
+.content {
+	background: $page-color-base;
+	height: 100%;
+}
+
+.swiper-box {
+	height: calc(100% - 40px);
+}
+.list-scroll-content {
+	height: 100%;
+}
+
+.navbar {
+	display: flex;
+	height: 40px;
+	padding: 0 5px;
+	background: #fff;
+	box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
+	position: relative;
+	z-index: 10;
+	.nav-item {
+		flex: 1;
+		display: flex;
+		justify-content: center;
+		align-items: center;
 		height: 100%;
 		height: 100%;
+		font-size: 15px;
+		color: $font-color-dark;
+		position: relative;
+		&.current {
+			color: $base-color;
+			&:after {
+				content: '';
+				position: absolute;
+				left: 50%;
+				bottom: 0;
+				transform: translateX(-50%);
+				width: 44px;
+				height: 0;
+				border-bottom: 2px solid $base-color;
+			}
+		}
 	}
 	}
-	.navbar{
+}
+
+.uni-swiper-item {
+	height: auto;
+}
+.order-item {
+	display: flex;
+	flex-direction: column;
+	padding-left: 30rpx;
+	background: #fff;
+	margin-top: 16rpx;
+	.i-top {
 		display: flex;
 		display: flex;
-		padding: 0 5px;
-		height: 40px;
-		background-color: #FFFFFF;
-		box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
+		align-items: center;
+		height: 80rpx;
+		padding-right: 30rpx;
+		font-size: $font-base;
+		color: $font-color-dark;
 		position: relative;
 		position: relative;
-		z-index: 100;
-		
-		.nav-item{
+		.time {
 			flex: 1;
 			flex: 1;
-			display: flex;
-			text-align: center;
-			justify-content: center;
-			font-size: 15px;
-			height: 100%;
+		}
+		.state {
+			color: $base-color;
+		}
+		.del-btn {
+			padding: 10rpx 0 10rpx 36rpx;
+			font-size: $font-lg;
+			color: $font-color-light;
 			position: relative;
 			position: relative;
-			&.current{
-				border-bottom: 2rpx solid #F0AD4E;
-				color:#F0AD4E ;
-				
+			&:after {
+				content: '';
+				width: 0;
+				height: 30rpx;
+				border-left: 1px solid $border-color-dark;
+				position: absolute;
+				left: 20rpx;
+				top: 50%;
+				transform: translateY(-50%);
+			}
+		}
+	}
+	/* 多条商品 */
+	.goods-box {
+		height: 160rpx;
+		padding: 20rpx 0;
+		white-space: nowrap;
+		.goods-item {
+			width: 120rpx;
+			height: 120rpx;
+			display: inline-block;
+			margin-right: 24rpx;
+		}
+		.goods-img {
+			display: block;
+			width: 100%;
+			height: 100%;
+		}
+	}
+	/* 单条商品 */
+	.goods-box-single {
+		display: flex;
+		padding: 20rpx 0;
+		.goods-img {
+			display: block;
+			width: 120rpx;
+			height: 120rpx;
+		}
+		.right {
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			padding: 0 30rpx 0 24rpx;
+			overflow: hidden;
+			.row{
+				margin-top: 10rpx;
+			}
+			.row_title{
+				padding:5rpx 10rpx;
+				background-color: #dddddd;
+				border-radius: 10rpx;
+				font-size: 22rpx;
+				color: #ffffff;
+			}
+			.title {
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+				line-height: 1;
+				width: 80%;
+			}
+			.attr-box {
+				display: flex;
+				justify-content: flex-end;
+				font-size: $font-sm + 2rpx;
+				color: $font-color-light;
+			}
+			.price {
+				display: inline;
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+				&:before {
+					content: '¥';
+					font-size: $font-sm;
+					
+				}
+			}
+		}
+	}
+	.price-box {
+		display: flex;
+		justify-content: flex-end;
+		align-items: baseline;
+		padding: 20rpx 30rpx;
+		font-size: $font-sm + 2rpx;
+		color: $font-color-light;
+		.num {
+			margin: 0 8rpx;
+			color: $font-color-dark;
+		}
+		.price {
+			font-size: $font-lg;
+			color: $font-color-dark;
+			&:before {
+				content: '¥';
+				font-size: $font-sm;
+				margin: 0 2rpx 0 8rpx;
+			}
+		}
+	}
+	.action-box {
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		height: 100rpx;
+		position: relative;
+		padding-right: 30rpx;
+	}
+	.action-btn {
+		width: 160rpx;
+		height: 60rpx;
+		margin: 0;
+		margin-left: 24rpx;
+		padding: 0;
+		text-align: center;
+		line-height: 60rpx;
+		font-size: $font-sm + 2rpx;
+		color: $font-color-dark;
+		background: #fff;
+		border-radius: 100px;
+		&:after {
+			border-radius: 100px;
+		}
+		&.recom {
+			color: $base-color;
+			&:after {
+				border-color: $base-color;
+			}
+		}
+		&.evaluate {
+			color: $color-yellow;
+			&:after {
+				border-color: $color-yellow;
 			}
 			}
-			
-			
-			
 		}
 		}
 	}
 	}
-	
+}
+
+/* load-more */
+.uni-load-more {
+	display: flex;
+	flex-direction: row;
+	height: 80rpx;
+	align-items: center;
+	justify-content: center;
+}
+
+.uni-load-more__text {
+	font-size: 28rpx;
+	color: #999;
+}
+
+.uni-load-more__img {
+	height: 24px;
+	width: 24px;
+	margin-right: 10px;
+}
+
+.uni-load-more__img > view {
+	position: absolute;
+}
+
+.uni-load-more__img > view view {
+	width: 6px;
+	height: 2px;
+	border-top-left-radius: 1px;
+	border-bottom-left-radius: 1px;
+	background: #999;
+	position: absolute;
+	opacity: 0.2;
+	transform-origin: 50%;
+	animation: load 1.56s ease infinite;
+}
+
+.uni-load-more__img > view view:nth-child(1) {
+	transform: rotate(90deg);
+	top: 2px;
+	left: 9px;
+}
+
+.uni-load-more__img > view view:nth-child(2) {
+	transform: rotate(180deg);
+	top: 11px;
+	right: 0;
+}
+
+.uni-load-more__img > view view:nth-child(3) {
+	transform: rotate(270deg);
+	bottom: 2px;
+	left: 9px;
+}
+
+.uni-load-more__img > view view:nth-child(4) {
+	top: 11px;
+	left: 0;
+}
+
+.load1,
+.load2,
+.load3 {
+	height: 24px;
+	width: 24px;
+}
+
+.load2 {
+	transform: rotate(30deg);
+}
+
+.load3 {
+	transform: rotate(60deg);
+}
+
+.load1 view:nth-child(1) {
+	animation-delay: 0s;
+}
+
+.load2 view:nth-child(1) {
+	animation-delay: 0.13s;
+}
+
+.load3 view:nth-child(1) {
+	animation-delay: 0.26s;
+}
+
+.load1 view:nth-child(2) {
+	animation-delay: 0.39s;
+}
+
+.load2 view:nth-child(2) {
+	animation-delay: 0.52s;
+}
+
+.load3 view:nth-child(2) {
+	animation-delay: 0.65s;
+}
+
+.load1 view:nth-child(3) {
+	animation-delay: 0.78s;
+}
+
+.load2 view:nth-child(3) {
+	animation-delay: 0.91s;
+}
+
+.load3 view:nth-child(3) {
+	animation-delay: 1.04s;
+}
+
+.load1 view:nth-child(4) {
+	animation-delay: 1.17s;
+}
+
+.load2 view:nth-child(4) {
+	animation-delay: 1.3s;
+}
+
+.load3 view:nth-child(4) {
+	animation-delay: 1.43s;
+}
+
+@-webkit-keyframes load {
+	0% {
+		opacity: 1;
+	}
+
+	100% {
+		opacity: 0.2;
+	}
+}
 </style>
 </style>

+ 2 - 2
pages/product/seckill.vue

@@ -41,10 +41,10 @@
 							<view class="title clamp">
 							<view class="title clamp">
 								<text>{{ lss.title }}</text>
 								<text>{{ lss.title }}</text>
 							</view>
 							</view>
-							<view class="slider flex">
+							<!-- <view class="slider flex">
 								<view class="slider-box"><view class="slider-action" :style="{ width: lss.percent + '%' }"></view></view>
 								<view class="slider-box"><view class="slider-action" :style="{ width: lss.percent + '%' }"></view></view>
 								<view class="sales-nub">已抢{{ lss.percent + '%' }}</view>
 								<view class="sales-nub">已抢{{ lss.percent + '%' }}</view>
-							</view>
+							</view> -->
 							<view class="goods-money flex">
 							<view class="goods-money flex">
 								<view class="money-box">
 								<view class="money-box">
 									<view class="money">
 									<view class="money">

+ 10 - 23
pages/user/approve.vue

@@ -15,6 +15,7 @@
 
 
 <script>
 <script>
 import { realName } from '@/api/set.js';
 import { realName } from '@/api/set.js';
+import { upload } from '@/api/order.js';
 export default {
 export default {
 	data() {
 	data() {
 		return {
 		return {
@@ -31,25 +32,11 @@ export default {
 		upImg(e) {
 		upImg(e) {
 			console.log('上传图片');
 			console.log('上传图片');
 			const that = this;
 			const that = this;
-			uni.navigateTo({
-				url: '/pages/set/cropper',
-				events: {
-					imgCropped(event) {
-						console.log(event,"123456")
-						// 监听裁剪完成
-						// 返回的 event 中包含了已经裁剪好图片的base64编码字符串
-						// 你可以使用 <image :src="imgDataUrl" mode="aspectFit"></image> 组件来展示裁剪后的图片
-						// 或者你可以将该字符串通过接口上传给服务器用来保存
-						that.$nextTick(function() {
-							that.form.img = event.data;
-							console.log(that.form.img, '图片');
-						});
-					}
-				},
-				fail(e) {
-					console.log(e, '错误');
-				}
-			});
+			upload({
+				filename: ''
+			}).then(data => {
+				this.form.img = data[0].url;
+			})
 		},
 		},
 		ToIndex() {
 		ToIndex() {
 			let obj = this;
 			let obj = this;
@@ -102,9 +89,9 @@ export default {
 				return;
 				return;
 			}
 			}
 			const data = {
 			const data = {
-				face_image: da.img.replace(/^data:image\/[a-z,A-Z]*;base64,/, ''),
-				real_name: da.name,
-				id_card: da.card
+				cidimg: da.img,
+				rname: da.name,
+				cid: da.card
 			};
 			};
 			uni.showLoading({
 			uni.showLoading({
 				title: '审核中',
 				title: '审核中',
@@ -116,7 +103,7 @@ export default {
 				.then(e => {
 				.then(e => {
 					uni.showModal({
 					uni.showModal({
 						title: '提示',
 						title: '提示',
-						content: '实名成功',
+						content: '实名提交成功',
 						showCancel: false,
 						showCancel: false,
 						success: res => {
 						success: res => {
 							uni.switchTab({
 							uni.switchTab({

+ 226 - 110
pages/user/award.vue

@@ -1,47 +1,59 @@
 <template>
 <template>
 	<view class="content">
 	<view class="content">
 		<view class="content-money">
 		<view class="content-money">
+			<view class="status_bar"><!-- 这里是状态栏 --></view>
+			<view class="body-title">
+				<view class="goback-box" @click="toBack"><image class="goback" src="../../static/icon/fanhui.png" mode=""></image></view>
+				<view class="header">我的佣金</view>
+			</view>
+			<view class="content-bg"><image src="../../static/img/jifen.png" mode=""></image></view>
 			<view class="money-box">
 			<view class="money-box">
-				<view class="text">可提现佣金(元)</view>
-				<view class="money">{{ money | getMoneyStyle }}</view>		
+				<view class="money">{{ userInfo.brokerage_price }}</view>
+				<view>我的佣金</view>
+			</view>
+			<view class="money-btn" @click="navto('/pages/money/withdrawal')">
+				提现
+				<text>></text>
+			</view>
+		</view>
+		<view class="info-box flex">
+			<view class="info-item">
+				<view class="info-font">累计收入</view>
+				<view class="info-num">{{recharge}}</view>
 			</view>
 			</view>
-			<view class="moneyTx" @click="navto('./withdrawal')">提现</view>
-			<view class="flex buttom-box">
-				<view class="buttom" @click="navto('/pages/money/recharge')">
-					<view class="icon"><image src="/static/icon/i6.png" mode="aspectFill" class="icon-img"></image></view>
-					<text>统计</text>
-				</view>
-				<view class="interval"></view>
-				<view class="buttom" @click="navto('./withdrawal')">
-					<view class="icon"><image src="/static/icon/i7.png" mode="aspectFill" class="icon-img"></image></view>
-					<text>提现</text>
-				</view>
+			<view class="shu"></view>
+			<view class="info-item">
+				<view class="info-font">累计支出</view>
+				<view class="info-num">{{orderStatusSum}}</view>
 			</view>
 			</view>
 		</view>
 		</view>
 		<view class="navbar">
 		<view class="navbar">
-			<view v-for="(item,index) in navList" :key="index" class="nav-item" :class="{ current: tabCurrentIndex === index}" @click="tabClick(index)">{{ item.text }}</view>
+			<view v-for="(item, index) in navList" :key="index" class="nav-item" :class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">{{ item.text }}</view>
 		</view>
 		</view>
-		<swiper :current="tabCurrentIndex" :style="{'height':maxheight+'px'}" class="swiper-box" duration="300" @change="changeTab">
+		<swiper :current="tabCurrentIndex" :style="{ height: maxheight }" class="swiper-box" duration="300" @change="changeTab">
 			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
 			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
 				<scroll-view scroll-y="true" class="list-scroll-content" @scrolltolower="loadData">
 				<scroll-view scroll-y="true" class="list-scroll-content" @scrolltolower="loadData">
 					<!-- 空白页 -->
 					<!-- 空白页 -->
 					<empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
 					<empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
-					
+
 					<!-- 订单列表 -->
 					<!-- 订单列表 -->
-					<view class="order-item flex" v-for="(item, index) in tabItem.orderList" :key="index">
-						<view class="title-box">
-							<view class="title">
-								<text>{{ item.title }}</text>
+					<view>
+						<view class="order-item flex" v-for="(item, index) in tabItem.orderList" :key="index">
+							<view class="title-box">
+								<view class="title">
+									<text>{{ item.title }}</text>
+								</view>
+								<view class="time">
+									<text>{{ item.add_time }}</text>
+								</view>
 							</view>
 							</view>
-							<view class="time">
-								<text>{{ item.add_time }}</text>
+							<view class="money">
+								<view>{{ (item.pm == 0 ? '-' : '+') + item.number }}</view>
+								<view v-if="item.status == 0" class="status">待发放</view>
 							</view>
 							</view>
 						</view>
 						</view>
-						<view class="money">
-							<text>{{ (item.pm == 0 ? '-' : '+') + item.number }}</text>
-						</view>
 					</view>
 					</view>
-					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
+					<uni-load-more :status="tabItem.loadingType" v-if="!(tabItem.orderList.length == 0 && tabItem.loaded)"></uni-load-more>
 				</scroll-view>
 				</scroll-view>
 			</swiper-item>
 			</swiper-item>
 		</swiper>
 		</swiper>
@@ -50,57 +62,61 @@
 
 
 <script>
 <script>
 import { spreadCommission, userBalance } from '@/api/wallet.js';
 import { spreadCommission, userBalance } from '@/api/wallet.js';
-import { mapState, mapMutations } from 'vuex';
 import { getMoneyStyle } from '@/utils/rocessor.js';
 import { getMoneyStyle } from '@/utils/rocessor.js';
-import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
-import empty from '@/components/empty';
+import { mapState, mapMutations } from 'vuex';
+import uniLoadMore from '@/uview-ui/components/u-loadmore/u-loadmore.vue';
+import empty from '@/uview-ui/components/u-empty/u-empty.vue';
 export default {
 export default {
 	filters: {
 	filters: {
 		getMoneyStyle
 		getMoneyStyle
 	},
 	},
+	computed: {
+		...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
+	},
 	components: {
 	components: {
 		empty,
 		empty,
 		uniLoadMore
 		uniLoadMore
 	},
 	},
-	onReady() {
-		//初始化获取页面宽度
-		uni.createSelectorQuery().select('.content')
-			.fields(
-			{
-				size:true
+	onReady(res) {
+		var _this = this;
+		uni.getSystemInfo({
+			success: resu => {
+				const query = uni.createSelectorQuery();
+				query.select('.swiper-box').boundingClientRect();
+				query.exec(function(res) {
+					_this.maxheight = resu.windowHeight - res[0].top + 'px';
+					console.log('打印页面的剩余高度', _this.height);
+				});
 			},
 			},
-			data => {
-				console.log(data);
-				console.log(Math.floor((data.width /750) * 300));
-				//保存头部高度
-				this.maxheight =data.height - Math.floor((data.width / 750) * 570);
-				console.log(this.maxheight);
-				}
-			)
-			.exec();
+			fail: res => {}
+		});
 	},
 	},
 	data() {
 	data() {
 		return {
 		return {
 			// 头部图高度
 			// 头部图高度
-			maxheight:'',
+			maxheight: '',
 			tabCurrentIndex: 0,
 			tabCurrentIndex: 0,
+			orderStatusSum: 0,
+			recharge: 0,
 			navList: [
 			navList: [
 				{
 				{
 					state: 0,
 					state: 0,
 					text: '收入',
 					text: '收入',
 					loadingType: 'more',
 					loadingType: 'more',
 					orderList: [],
 					orderList: [],
-					page: 1, //当前页面
-					limit: 10 //每次信息条数
+					page: 1, //当前页数
+					limit: 10 ,//每次信息条数
+					loaded: false
 				},
 				},
 				{
 				{
 					state: 1,
 					state: 1,
 					text: '支出',
 					text: '支出',
 					loadingType: 'more',
 					loadingType: 'more',
 					orderList: [],
 					orderList: [],
-					page: 1, //当前页面
-					limit: 10 //每次信息条数
-				},
+					page: 1, //当前页数
+					limit: 10 ,//每次信息条数
+					loaded: false
+				}
 			],
 			],
 			money: ''
 			money: ''
 		};
 		};
@@ -108,22 +124,25 @@ export default {
 	onLoad(options) {},
 	onLoad(options) {},
 	onShow() {
 	onShow() {
 		this.loadData();
 		this.loadData();
-		//获取用户余额
-		userBalance({}).then(({ data }) => {
-			this.money = data.commissionCount;
-		});
 	},
 	},
 	methods: {
 	methods: {
+		// 页面跳转
 		navto(e) {
 		navto(e) {
 			uni.navigateTo({
 			uni.navigateTo({
 				url: e
 				url: e
 			});
 			});
 		},
 		},
+		// 点击返回 我的页面
+		toBack() {
+			uni.navigateBack({});
+		},
+		//获取收入支出信息
 		async loadData(source) {
 		async loadData(source) {
-			//这里时将订单挂载到tab列表下
+			let obj = this;
+			//这里是将订单挂载到tab列表下
 			let index = this.tabCurrentIndex;
 			let index = this.tabCurrentIndex;
 			let navItem = this.navList[index];
 			let navItem = this.navList[index];
-			let state = navItem.state+3;
+			let state = navItem.state + 3;
 			if (source === 'tabChange' && navItem.loaded === true) {
 			if (source === 'tabChange' && navItem.loaded === true) {
 				//tab切换只有第一次需要加载数据
 				//tab切换只有第一次需要加载数据
 				return;
 				return;
@@ -132,9 +151,9 @@ export default {
 				//防止重复加载
 				//防止重复加载
 				return;
 				return;
 			}
 			}
-			//修改当前对象状态为加载中
+			// 修改当前对象状态为加载中
 			navItem.loadingType = 'loading';
 			navItem.loadingType = 'loading';
-			
+
 			spreadCommission(
 			spreadCommission(
 				{
 				{
 					page: navItem.page,
 					page: navItem.page,
@@ -143,16 +162,22 @@ export default {
 				state
 				state
 			)
 			)
 				.then(({ data }) => {
 				.then(({ data }) => {
-					if(data.length > 0) {
+					console.log(data);
+					// obj.recharge = data.income;
+					// obj.orderStatusSum = data.expend;
+					if (data.length > 0) {
 						navItem.orderList = navItem.orderList.concat(data[0].list);
 						navItem.orderList = navItem.orderList.concat(data[0].list);
 						console.log(navItem.orderList);
 						console.log(navItem.orderList);
 						navItem.page++;
 						navItem.page++;
+					}else {
+						navItem.loadingType = 'noMore';
 					}
 					}
-					//判断是否还有数据, 有改为more, 没有改为noMore
-					if (navItem.limit == data.length) {
+					if (navItem.limit == data[0].list.length) {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
 						navItem.loadingType = 'more';
 						navItem.loadingType = 'more';
 						return;
 						return;
 					} else {
 					} else {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
 						navItem.loadingType = 'noMore';
 						navItem.loadingType = 'noMore';
 					}
 					}
 					uni.hideLoading();
 					uni.hideLoading();
@@ -162,6 +187,7 @@ export default {
 					console.log(e);
 					console.log(e);
 				});
 				});
 		},
 		},
+
 		//swiper 切换
 		//swiper 切换
 		changeTab(e) {
 		changeTab(e) {
 			this.tabCurrentIndex = e.target.current;
 			this.tabCurrentIndex = e.target.current;
@@ -172,75 +198,142 @@ export default {
 			this.tabCurrentIndex = index;
 			this.tabCurrentIndex = index;
 		}
 		}
 	}
 	}
-}
+};
 </script>
 </script>
 
 
 <style lang="scss">
 <style lang="scss">
 page {
 page {
-	background: #ffffff;
+	background: #f1f1f1;
 	height: 100%;
 	height: 100%;
 }
 }
+.status_bar {
+	height: var(--status-bar-height);
+	width: 100%;
+}
 .content-money {
 .content-money {
-	padding-bottom: 30rpx;
-	background: $page-color-base;
-	.moneyTx{
+	position: relative;
+	height: 480rpx;
+	.content-bg {
 		position: absolute;
 		position: absolute;
-		top: 150rpx;
-		right: 0rpx;
-		width: 150rpx;
-		padding: 10rpx 30rpx;
-		border: 2px solid #FFFFFF;
-		border-top-left-radius: 99rpx;
-		border-bottom-left-radius: 99rpx;
-		color: #FFFFFF;
-		line-height: 1;
-		font-size: $font-base;
+		top: 0;
+		left: 0;
+		right: 0;
+		width: 750rpx;
+		height: 480rpx;
+		image {
+			width: 100%;
+			height: 100%;
+		}
 	}
 	}
-	.buttom-box {
-		background-color: #ffffff;
+	.body-title {
+		height: 80rpx;
 		text-align: center;
 		text-align: center;
-		margin: 0 30rpx;
-		padding: 20rpx 0;
-		border-radius: $border-radius-sm;
-		margin-top: -60rpx;
-		.buttom {
-			font-size: $font-lg;
-			flex-grow: 1;
+		font-size: 35rpx;
+		position: relative;
+		.header {
+			position: absolute;
+			left: 0;
+			top: 0;
+			width: 100%;
+			font-size: 36rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #fffeff;
+			height: 80rpx;
+			font-size: 36rpx;
+			font-weight: 700;
+			z-index: 9;
+			display: flex;
+			justify-content: center;
+			align-items: center;
 		}
 		}
-		.interval {
-			width: 2px;
-			height: 60rpx;
-			background-color: #eeeeee;
+		.goback-box {
+			position: absolute;
+			left: 18rpx;
+			top: 0;
+			height: 80rpx;
+			display: flex;
+			align-items: center;
 		}
 		}
-		.icon {
-			height: 50rpx;
-			width: 48rpx;
-			margin: 0 auto;
-			.icon-img {
-				width: 100%;
-				height: 100%;
-			}
+
+		.goback {
+			z-index: 100;
+			width: 34rpx;
+			height: 34rpx;
+		}
+	}
+}
+.info-box {
+	width: 670rpx;
+	height: 186rpx;
+	background: #ffffff;
+	box-shadow: 0px 0px 20rpx 0px rgba(50, 50, 52, 0.06);
+	border-radius: 20rpx;
+	margin: -100rpx auto 0;
+	position: relative;
+	z-index: 2;
+	.info-item {
+		width: 50%;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		line-height: 1;
+		.info-font {
+			font-size: 30rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #999999;
 		}
 		}
+		.info-num {
+			margin-top: 30rpx;
+			font-size: 30rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #181818;
+		}
+	}
+	.shu {
+		width: 2rpx;
+		height: 74rpx;
+		background: #dcdfe6;
 	}
 	}
 }
 }
 .money-box {
 .money-box {
-	background-color: $base-color;
-	padding-top: var(--status-bar-height);
-	height: 368rpx;
+	position: relative;
+	z-index: 2;
+	padding-top: 90rpx;
 	color: #ffffff;
 	color: #ffffff;
 	text-align: center;
 	text-align: center;
+	.money {
+		font-size: 72rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: #ffffff;
+	}
 	.text {
 	.text {
-		padding-top: 147rpx;
-		font-size: $font-sm;
+		font-size: 30rpx;
 	}
 	}
-	.money {
-		font-size: 56rpx;
+}
+.money-btn {
+	position: relative;
+	z-index: 2;
+	color: #ffffff;
+	padding-right: 50rpx;
+	text-align: right;
+	font-size: 30rpx;
+	font-family: PingFang SC;
+	font-weight: bold;
+	color: #FFFFFF;
+	text {
+		display: inline-block;
+		padding-left: 10rpx;
 	}
 	}
 }
 }
 
 
 .navbar {
 .navbar {
+	margin-top: 20rpx;
 	display: flex;
 	display: flex;
-	height: 40px;
+	height: 88rpx;
 	padding: 0 5px;
 	padding: 0 5px;
 	background: #fff;
 	background: #fff;
 	box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
 	box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
@@ -253,10 +346,10 @@ page {
 		align-items: center;
 		align-items: center;
 		height: 100%;
 		height: 100%;
 		font-size: 15px;
 		font-size: 15px;
-		color: $font-color-dark;
+		color: #999999;
 		position: relative;
 		position: relative;
 		&.current {
 		&.current {
-			color: $base-color;
+			color: #000;
 			&:after {
 			&:after {
 				content: '';
 				content: '';
 				position: absolute;
 				position: absolute;
@@ -265,15 +358,16 @@ page {
 				transform: translateX(-50%);
 				transform: translateX(-50%);
 				width: 44px;
 				width: 44px;
 				height: 0;
 				height: 0;
-				border-bottom: 2px solid $base-color;
+				border-bottom: 2px solid #fe5b38;
 			}
 			}
 		}
 		}
 	}
 	}
 }
 }
 //列表
 //列表
-
 .swiper-box {
 .swiper-box {
-	padding-top: 10rpx;
+	.order-item:last-child {
+		margin-bottom: 60rpx;
+	}
 	.order-item {
 	.order-item {
 		padding: 20rpx 30rpx;
 		padding: 20rpx 30rpx;
 		line-height: 1.5;
 		line-height: 1.5;
@@ -290,10 +384,15 @@ page {
 		.money {
 		.money {
 			color: #fd5b23;
 			color: #fd5b23;
 			font-size: $font-lg;
 			font-size: $font-lg;
+			text-align: right;
+			.status {
+				color: $font-color-light;
+			}
 		}
 		}
 	}
 	}
 }
 }
 .list-scroll-content {
 .list-scroll-content {
+	background: #ffffff;
 	height: 100%;
 	height: 100%;
 }
 }
 .content {
 .content {
@@ -302,4 +401,21 @@ page {
 		background-color: #ffffff;
 		background-color: #ffffff;
 	}
 	}
 }
 }
+.btn-box {
+	width: 674rpx;
+	height: 88rpx;
+	background: linear-gradient(0deg, #2e58ff, #32c6ff);
+	border-radius: 44rpx;
+	font-size: 36rpx;
+	font-family: PingFang SC;
+	font-weight: 500;
+	color: #ffffff;
+	text-align: center;
+	line-height: 88rpx;
+	position: fixed;
+	bottom: 48rpx;
+	left: 0;
+	right: 0;
+	margin: 0 auto;
+}
 </style>
 </style>

+ 0 - 310
pages/user/coupon.vue

@@ -1,310 +0,0 @@
-<template>
-	<view class="content">
-		<view class="navbar">
-			<view v-for="(item,index) in navList" :key="index" class="nav-item" :class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">{{ item.text }}</view>
-		</view>
-		<swiper :current="tabCurrentIndex" class="swiper-box" duration="300" @change="changeTab">
-			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
-				<!-- 空白页 -->
-				<empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
-				<view v-for="(item, index) in tabItem.orderList" :key="index" class="row flex">
-					<view class="list-money flex">
-						<image :src="item._type == 2 ? '/static/img/img03.png' : '/static/img/img02.png'" mode="scaleToFill"></image>
-						<view class="list-money-text">
-							<view class="tit" :class="{ action: item._type} == 2">
-								<text>{{ item.coupon_price }}</text>
-							</view>
-							<view class="price">
-								<text>满{{ item.use_min_price }}元</text>
-							</view>
-						</view>
-					</view>
-					<view class="list-interval position-relative">
-						<view class="bottom"></view>
-						<view class="top"></view>
-					</view>
-					<view class="row_list_right">
-						<view class="right_top">
-							<text class="right_title" :class="{ action: item._type == 2}">{{ item.coupon_title }}</text>
-						</view>
-						<view class="right_time">
-							<text>{{ item._add_time }}-{{ item.end_time }}</text>
-						</view>
-						<view class="right_use action" v-if="item._type == 2">
-							<text>{{ item._msg }}</text>
-						</view>
-						<view class="right_use noAction" v-if="item._type == 0">
-							<text>{{ item._msg }}</text>
-						</view>
-					</view>
-				</view>
-				<uni-load-more :status="tabItem.loadingType"></uni-load-more>
-			</swiper-item>
-		</swiper>
-	</view>
-</template>
-
-<script>
-import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
-import empty from '@/components/empty';
-import { getCouponsList } from '@/api/order.js';
-export default{
-	components: {
-		uniLoadMore,
-		empty
-	},
-	data() {
-		return {
-			tabCurrentIndex: 0,
-			navList:[
-				{
-					state: 0,
-					text: '全部',
-					loadingType: 'more',
-					orderList: [],
-					page: 1,//当前页数
-					limit: 10 //每次信息条数
-				},
-				{
-					state: 1,
-					text: '未使用',
-					loadingType: 'more',
-					orderList: [],
-					page: 1, //当前页数
-					limit: 10 //每次信息条数
-				},
-				{
-					state: 2,
-					text: '已使用',
-					loadingType: 'more',
-					orderList: [],
-					page: 1,//当前页数
-					limit: 10 //每次信息条数
-				}
-			]
-		};
-	},
-	onLoad(options) {
-		this.loadData();
-	},
-	methods: {
-		//返回首页
-		navTo(){
-			uni.switchTab({
-				url: '/pages/index/index'
-			});
-		},
-		//获取订单列表
-		loadData(source) {
-			//将订单挂载到tab列表下
-			let index = this.tabCurrentIndex;
-			let navItem = this.navList[index];
-			let state = navItem.state;
-			if (source === 'tabChange' && navItem.loaded === true) {
-				//tab切换只有第一次需要加载数据
-				return;
-			}
-			if (navItem.loadingType === 'loading'){
-				//防止重复加载
-				return;
-			}
-			//修改当前对象状态为加载中
-			navItem.loadingType = 'loading';
-			getCouponsList(
-				{
-					page: navItem.page,
-					limit: navItem.limit
-				},
-				index
-			)
-				.then(({ data }) => {
-					let da = data.map(e => {
-						e.coupon_price = +e.coupon_price.replace(',', '');
-						e.use_min_price = +e.use_min_price.replace(',', '');
-						return e
-					});
-					navItem.orderList = navItem.orderList.concat(da);
-					console.log(navItem.orderList);
-					navItem.page++;
-					if (navItem.limit == data.length) {
-						// 判断是否还有数据,有改为more,没有改为noMore
-						navItem.loadingType = 'more';
-						return;
-					}else {
-						navItem.loadingType = 'noMore';
-					}
-					uni.hideLoading();
-					this.$set(navItem, 'loaded', true);
-				})
-				.catch(e => {
-					console.log(e);
-				})
-		},
-		//swiper 切换
-		changeTab(e) {
-			this.tabCurrentIndex = e.target.current;
-			this.loadData('tabChange');
-		},
-		//顶部tab点击
-		tabClick(index) {
-			this.tabCurrentIndex = index;
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-// 卡卷可用时颜色
-$card-color-action: #fc4141;
-page,
-.content {
-	background: $page-color-base;
-	height: 100%;
-}
-
-.navbar {
-	display: flex;
-	height: 40px;
-	padding: 0 5px;
-	background: #fff;
-	box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
-	position: relative;
-	z-index: 10;
-	.nav-item {
-		flex: 1;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		height: 100%;
-		font-size: 15px;
-		color: $font-color-dark;
-		position: relative;
-		&.current {
-			color: #bc253a;
-			&:after {
-				content: '';
-				position: absolute;
-				left: 50%;
-				bottom: 0;
-				transform: translateX(-50%);
-				width: 44px;
-				height: 0;
-				border-bottom: 2px solid #bc253a;
-			}
-		}
-	}
-}
-
-.swiper-box {
-	height: calc(100% - 40px);
-	.tab-content {
-		padding: 25rpx 0px;
-		font-size: 28rpx;
-		color: #1b1b1b;
-	}
-}
-
-.row {
-	border-radius: 15rpx;
-	margin: 0 25rpx;
-	margin-bottom: 25rpx;
-	height: 200rpx;
-	overflow: hidden;
-	background-color: #ffffff;
-	.list-interval {
-		border: 1px dashed $border-color-light;
-		height: 100%;
-		.top,
-		.bottom {
-			border-radius: 100rpx;
-			width: 30rpx;
-			height: 30rpx;
-			position: absolute;
-			background-color: $page-color-base;
-			right: -15rpx;
-		}
-		.top {
-			top: -18rpx;
-		}
-		.bottom {
-			bottom: -18rpx;
-		}
-	}
-	.list-money {
-		height: 100%;
-		image {
-			height: 100%;
-			width: 20rpx;
-		}
-		.list-money-text {
-			width: 220rpx;
-			padding: 0 25rpx;
-			text-align: center;
-			color: $font-color-light;
-			.tit {
-				padding: 15rpx 0rpx;
-				font-size: 55rpx;
-				font-weight: bold;
-				&.action {
-					color: $card-color-action;
-				}
-			}
-			.price {
-				padding-bottom: 25rpx;
-			}
-		}
-	}
-	.row_list_right {
-		flex-grow: 1;
-		padding-left: 25rpx;
-		line-height: 1;
-		.right_time {
-			color: $font-color-light;
-			font-size: $font-sm;
-		}
-		.right_use {
-			margin: 15rpx 0;
-			padding: 10rpx;
-			width: 140rpx;
-			text_align: center;
-			border-radius: 50rpx;
-			color: #fff;
-			font-size: $font-sm - 4rpx;
-			&.action {
-				background-color: $card-color-action;
-			}
-			&.noAction {
-				background-color: $color-gray;
-			}
-		}
-		.right_top {
-			margin: 15rpx 0;
-			font-size: $font-lg;
-			height: 50rpx;
-			color: $font-color-light;
-			.right_name {
-				font-weight: bold;
-			}
-			.right_title {
-				font-weight: bold;
-				&.action {
-					color: $font-color-base;
-				}
-			}
-		}
-	}
-	
-	.iconlocation {
-		font-size: 36rpx;
-		color: $font-color-light;
-	}
-}
-// uni-load-more
-.uni-load-more {
-	display: flex;
-	flex-direction: row;
-	height: 80rpx;
-	align-items: center;
-	justify-content: center;
-}
-</style>

+ 0 - 156
pages/user/favorites.vue

@@ -1,156 +0,0 @@
-<template>
-	<view class="container">
-		<!-- 空白页 -->
-		<empty v-if="favoriteList.length < 1"></empty>
-		<view class="favorites flex" v-for="ls in favoriteList" @click="toproduct(ls.pid)">
-			<view class="favorites_img"><image :src="ls.image"></image></view>
-			<view class="favorites_list">
-				<view class="favorites_name">{{ ls.store_name }}</view>
-				<view class="favorites_peice flex">
-					<view>
-						<text>¥{{ ls.price }}</text>
-					</view>
-					<view class="icon_del" @click.prevent.stop="del(ls.pid)" v-show="delshow">
-						<text class="iconfont icondelete"></text>
-						<text>取消</text>
-					</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-import { getcollectList, delcollect } from '@/api/user.js';
-import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
-import empty from '@/components/empty';
-export default {
-	components: {
-		uniLoadMore,
-		empty
-	},
-	data() {
-		return {
-			tabCurrentIndex: 0,
-			favoriteList: '',
-			delshow: true
-		};
-	},
-	onLoad() {
-		this.loadData();
-	},
-	methods: {
-		//获取收藏夹列表
-		loadData() {
-			let obj = this;
-			getcollectList({
-				page: '1',
-				limit: '10'
-			})
-				.then(function(e) {
-					obj.favoriteList = e.data;
-					console.log(obj.favoriteList);
-				})
-				.catch(function(e) {
-					console.log(e);
-				});
-		},
-		//跳转商品详情页
-		toproduct(item) {
-			let id = item;
-			uni.navigateTo({
-				url: `/pages/product/product?id=${id}`
-			})
-		},
-		//删除收藏夹商品
-		del(item) {
-			let obj = this;
-			uni.showModal({
-				title: '提示',
-				content: '是否取消收藏该商品',
-				success: e => {
-					if (e.confirm) {
-						delcollect({
-							id: item,
-							category: 'product'
-						})
-							.then(function(e) {
-								uni.showToast({
-									title: '已取消收藏',
-									duration: 1500,
-								});
-								obj.loadData();
-							})
-							.catch(function(e) {
-								console.log(e);
-							});
-					}
-				}
-			});
-		},
-	}
-}
-</script>
-
-<style lang="scss">
-page {
-	height: 100%;
-}
-%flex-center {
-	display: flex;
-	flex-direction: column;
-	justify-content: center;
-	align-items: center;
-}
-%section {
-	display: flex;
-	justify-content: space-around;
-	align-content: center;
-	background: #fff;
-	border-radius: 10rpx;
-}
-.container {
-	height: 100%;
-	background-color: $page-color-base;
-	padding: 15rpx 0rpx;
-	font-size: 28rpx;
-}
-.favorites {
-	width: 90%;
-	background-color: #ffffff;
-	border-radius: 15rpx;
-	margin: 15rpx auto;
-	padding: 25rpx 25rpx;
-	margin-bottom: 25rpx;
-}
-.favorites_img {
-	width: 80px !important;
-	height: 80px;
-}
-.favorites_img image {
-	width: 100%;
-	height: 100%;
-}
-.favorites_list {
-	width: 70%;
-	padding-left: 20rpx;
-}
-.icon_del {
-	color: $font-color-base;
-	z-index: 9999;
-	font-weight: bold;
-}
-.favorites_name {
-	height: 80rpx;
-	overflow: hidden;
-	text-overflow: ellipsis;
-	display: -webkit-box;
-	-webkit-box-orient: vertial;
-	-webkit-line-clamp: 2;
-}
-.favorites_peice {
-	margin-top: 25rpx;
-	color: #db1935;
-	font-weight: bold;
-}
-</style>

+ 90 - 20
pages/user/gzsq.vue

@@ -3,27 +3,29 @@
 		<view class="tab-wrapper">
 		<view class="tab-wrapper">
 			<view class="itemx">
 			<view class="itemx">
 				<view class="item-tit">公司名称:</view>
 				<view class="item-tit">公司名称:</view>
-				<input type="text" v-model="name" placeholder="请输入您的姓名" />
+				<input type="text" v-model="companyname" placeholder="请输入公司名称" />
 			</view>
 			</view>
 			<view class="itemx">
 			<view class="itemx">
 				<view class="item-tit">负责人姓名:</view>
 				<view class="item-tit">负责人姓名:</view>
-				<input type="text" v-model="phone" placeholder="请输入您的手机号" />
+				<input type="text" v-model="name" placeholder="请输入负责人姓名" />
 			</view>
 			</view>
 			<view class="itemx">
 			<view class="itemx">
 				<view class="item-tit">联系方式:</view>
 				<view class="item-tit">联系方式:</view>
-				<input type="text" v-model="phone" placeholder="请输入您的手机号" />
+				<input type="text" v-model="phone" placeholder="请输入联系方式" />
 			</view>
 			</view>
 			<view class="itemx">
 			<view class="itemx">
 				<view class="item-tit">身份证号:</view>
 				<view class="item-tit">身份证号:</view>
-				<input type="text" v-model="area" placeholder="请输入店长区域" />
+				<input type="text" v-model="cardid" placeholder="请输入身份证号" />
 			</view>
 			</view>
 		</view>
 		</view>
 		<view class="scsfz-wrap">
 		<view class="scsfz-wrap">
-			<image src="../../static/img/sfzzm.png" mode=""></image>
+			<image v-if="imagezm == ''" src="../../static/img/sfzzm.png" mode="" @click="uploads('imagezm')"></image>
+			<image v-if="imagezm != ''" :src="imagezm" mode="" @click="uploads('imagezm')"></image>
 			<view class="" style="padding-bottom: 33rpx;">
 			<view class="" style="padding-bottom: 33rpx;">
 				添加身份证正面
 				添加身份证正面
 			</view>
 			</view>
-			<image src="../../static/img/sfzzm.png" mode=""></image>
+			<image v-if="imagefm == ''" src="../../static/img/sfzzm.png" mode="" @click="uploads('imagefm')"></image>
+			<image v-if="imagefm != ''" :src="imagefm" mode="" @click="uploads('imagefm')"></image>
 			<view class="">
 			<view class="">
 				添加身份证反面
 				添加身份证反面
 			</view>
 			</view>
@@ -31,25 +33,25 @@
 		<view class="tab-wrapper" style="padding-top: 0;">
 		<view class="tab-wrapper" style="padding-top: 0;">
 			<view class="itemx">
 			<view class="itemx">
 				<view class="item-tit">店铺地址:</view>
 				<view class="item-tit">店铺地址:</view>
-				<input type="text" v-model="name" placeholder="请输入您的姓名" />
+				<input type="text" v-model="address" placeholder="请输入店铺地址" />
 			</view>
 			</view>
 			<view class="itemx"  style="height: 250rpx;">
 			<view class="itemx"  style="height: 250rpx;">
 				<view class="item-tit">营业执照:</view>
 				<view class="item-tit">营业执照:</view>
-				<!-- <input type="text" v-model="name" placeholder="请输入您的姓名" /> -->
-				<image src="../../static/img/add.png" mode=""></image>
+				<image v-if="yyzz == ''" src="../../static/img/add.png" mode="" @click="uploads('yyzz')"></image>
+				<image v-if="yyzz != ''" :src="yyzz" mode="" @click="uploads('yyzz')"></image>
 			</view>
 			</view>
 		</view>
 		</view>
 		<view class="tab-wrapper" style="padding-top: 0;">
 		<view class="tab-wrapper" style="padding-top: 0;">
 			<view class="itemx"  style="height: 250rpx;">
 			<view class="itemx"  style="height: 250rpx;">
 				<view class="item-tit">门店照片:</view>
 				<view class="item-tit">门店照片:</view>
-				<!-- <input type="text" v-model="name" placeholder="请输入您的姓名" /> -->
-				<image src="../../static/img/add.png" mode=""></image>
+				<image v-if="imageshop == ''" src="../../static/img/add.png" mode=""  @click="uploads('imageshop')"></image>
+				<image v-if="imageshop != ''" :src="imageshop" mode=""  @click="uploads('imageshop')"></image>
 			</view>
 			</view>
 		</view>
 		</view>
 		<view class="sq-xz" @click="dagou = !dagou">
 		<view class="sq-xz" @click="dagou = !dagou">
 			<text class="sq-gou"  v-if="!dagou"></text>
 			<text class="sq-gou"  v-if="!dagou"></text>
 			<image src="../../static/icon/gou.png" mode="" class="sq-gou-g" v-else></image>
 			<image src="../../static/icon/gou.png" mode="" class="sq-gou-g" v-else></image>
-			<text>我已阅读并同意</text><text @click.stop="lookXz" style="color: #375AFE;">《馆长申请须知》</text>
+			<text>我已阅读并同意</text><text style="color: #DC262B;">《馆长申请须知》</text>
 		</view>
 		</view>
 		<view class="sq-btn" @click="subSq()">
 		<view class="sq-btn" @click="subSq()">
 			提交申请
 			提交申请
@@ -58,22 +60,90 @@
 </template>
 </template>
 
 
 <script>
 <script>
+	import { upload } from '@/api/order.js';
+	import { apply } from '@/api/user.js'
 	export default {
 	export default {
 		data() {
 		data() {
 			return {
 			return {
-				dagou: false,
+				dagou: true,
+				companyname:'',//公司名称
+				name:'',//负责人姓名
+				phone:'',//联系方式
+				cardid:'',//身份证号码
+				imagezm:'',//身份证正面
+				imagefm:'',//身份证反面
+				address:'',//店铺地址
+				yyzz:'',//营业执照
+				imageshop:'',//门店照片
 			}
 			}
 		},
 		},
 		methods: {
 		methods: {
-			lookXz() {
-				this.$api.msg('瞅啥瞅!')
-			},
 			subSq() {
 			subSq() {
 				let obj = this
 				let obj = this
-				if(!obj.dagou) {
-					return this.$api.msg('打勾去啊,愣着干啥')
+				if(obj.companyname == ''){
+					return this.$api.msg("请填写公司名称")
+				}
+				if(obj.name == ''){
+					return this.$api.msg("请填写负责人姓名")
+				}
+				if(obj.phone == ''){
+					return this.$api.msg("请填写联系方式")
+				}
+				if(obj.cardid == ''){
+					return this.$api.msg("请填写身份证号码")
+				}
+				if(obj.imagezm == ''){
+					return this.$api.msg("请填写身份证正面")
+				}
+				if(obj.imagefm == ''){
+					return this.$api.msg("请填写身份证反面")
+				}
+				if(obj.address == ''){
+					return this.$api.msg("请填写店铺地址")
+				}
+				if(obj.yyzz == ''){
+					return this.$api.msg("请填写营业执照")
+				}
+				if(obj.imageshop == ''){
+					return this.$api.msg("请填写门店照片")
+				}
+				// if(!obj.dagou) {
+				// 	return this.$api.msg('')
+				// }
+				apply().then(({data}) =>{
+					this.$api.msg('申请成功')
+				})
+			},
+			uploads(type) {
+				console.log(type);
+				if(type == 'imagezm'){
+					upload({
+						filename: ''
+					}).then(data => {
+						this.imagezm = data[0].url;
+					})
+				}
+				if(type == 'imagefm'){
+					upload({
+						filename: ''
+					}).then(data => {
+						this.imagefm = data[0].url;
+					})
+				}
+				if(type == 'yyzz'){
+					upload({
+						filename: ''
+					}).then(data => {
+						this.yyzz = data[0].url;
+					})
+				}
+				if(type == 'imageshop'){
+					upload({
+						filename: ''
+					}).then(data => {
+						this.imageshop = data[0].url;
+					})
 				}
 				}
-				
 			}
 			}
 		}
 		}
 	}
 	}
@@ -159,7 +229,7 @@
 		width: 750rpx;
 		width: 750rpx;
 		height: 98rpx;
 		height: 98rpx;
 		line-height: 98rpx;
 		line-height: 98rpx;
-		background: linear-gradient(0deg, rgba(60, 237, 237, 0.99), #04B8FF, #375AFE);
+		background: #DC262B;
 		text-align: center;
 		text-align: center;
 		font-size: 36rpx;
 		font-size: 36rpx;
 		font-family: PingFang SC;
 		font-family: PingFang SC;

+ 421 - 0
pages/user/myAppointment.vue

@@ -0,0 +1,421 @@
+<template>
+	<view class="content">
+		<view class="content-money">
+			<view class="status_bar"><!-- 这里是状态栏 --></view>
+			<view class="body-title">
+				<view class="goback-box" @click="toBack"><image class="goback" src="../../static/icon/fanhui.png" mode=""></image></view>
+				<view class="header">我的预约券</view>
+			</view>
+			<view class="content-bg"><image src="../../static/img/zhihuanjuan.png" mode=""></image></view>
+			<view class="money-box">
+				<view class="money">{{ userInfo.anticipate }}</view>
+				<view>余额</view>
+			</view>
+			<view class="money-btn" @click="navto('/pages/money/wallet')">
+				转账
+				<text>></text>
+			</view>
+		</view>
+		<view class="info-box flex">
+			<view class="info-item">
+				<view class="info-font">累计收入</view>
+				<view class="info-num">{{ recharge }}</view>
+			</view>
+			<view class="shu"></view>
+			<view class="info-item">
+				<view class="info-font">累计支出</view>
+				<view class="info-num">{{ orderStatusSum }}</view>
+			</view>
+		</view>
+		<view class="navbar">
+			<view v-for="(item, index) in navList" :key="index" class="nav-item" :class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">{{ item.text }}</view>
+		</view>
+		<swiper :current="tabCurrentIndex" :style="{ height: maxheight }" class="swiper-box" duration="300" @change="changeTab">
+			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
+				<scroll-view scroll-y="true" class="list-scroll-content" @scrolltolower="loadData">
+					<!-- 空白页 -->
+					<empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
+
+					<!-- 订单列表 -->
+					<view>
+						<view class="order-item flex" v-for="(item, index) in tabItem.orderList" :key="index">
+							<view class="title-box">
+								<view class="title">
+									<text>{{ item.mark }}</text>
+								</view>
+								<view class="time">
+									<text>{{ item.add_time }}</text>
+								</view>
+							</view>
+							<view class="money">
+								<view>{{ (item.pm == 0 ? '-' : '+') + item.number }}</view>
+								<view v-if="item.status == 0" class="status">待发放</view>
+							</view>
+						</view>
+					</view>
+					<!-- <uni-load-more :status="tabItem.loadingType" v-if="!(tabItem.orderList.length == 0 && tabItem.loaded)"></uni-load-more> -->
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+	</view>
+</template>
+
+<script>
+import { anticipatelist } from '@/api/wallet.js';
+import { getMoneyStyle } from '@/utils/rocessor.js';
+import { mapState, mapMutations } from 'vuex';
+import uniLoadMore from '@/uview-ui/components/u-loadmore/u-loadmore.vue';
+import empty from '@/uview-ui/components/u-empty/u-empty.vue';
+export default {
+	filters: {
+		getMoneyStyle
+	},
+	computed: {
+		...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
+	},
+	components: {
+		empty,
+		uniLoadMore
+	},
+	onReady(res) {
+		var _this = this;
+		uni.getSystemInfo({
+			success: resu => {
+				const query = uni.createSelectorQuery();
+				query.select('.swiper-box').boundingClientRect();
+				query.exec(function(res) {
+					_this.maxheight = resu.windowHeight - res[0].top + 'px';
+					console.log('打印页面的剩余高度', _this.height);
+				});
+			},
+			fail: res => {}
+		});
+	},
+	data() {
+		return {
+			// 头部图高度
+			maxheight: '',
+			tabCurrentIndex: 0,
+			orderStatusSum: 0,
+			recharge: 0,
+			navList: [
+				{
+					state: 0,
+					text: '收入',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10, //每次信息条数
+					loaded: false
+				},
+				{
+					state: 1,
+					text: '支出',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10, //每次信息条数
+					loaded: false
+				}
+			],
+			money: ''
+		};
+	},
+	onLoad(options) {},
+	onShow() {
+		this.loadData();
+	},
+	methods: {
+		// 页面跳转
+		navto(e) {
+			uni.navigateTo({
+				url: e
+			});
+		},
+		// 点击返回 我的页面
+		toBack() {
+			uni.navigateBack({});
+		},
+		//获取收入支出信息
+		async loadData(source) {
+			let obj = this;
+			//这里是将订单挂载到tab列表下
+			let index = this.tabCurrentIndex;
+			let navItem = this.navList[index];
+			let state = navItem.state;
+			console.log(source, 'iwiwiwiwi');
+			if (source === 'tabChange' && navItem.loaded === true) {
+				//tab切换只有第一次需要加载数据
+				return;
+			}
+			if (navItem.loadingType === 'loading') {
+				//防止重复加载
+				return;
+			}
+			// 修改当前对象状态为加载中
+			navItem.loadingType = 'loading';
+
+			anticipatelist({
+				page: navItem.page,
+				limit: navItem.limit
+			})
+				.then(({ data }) => {
+					// obj.recharge = data.income;
+					// obj.orderStatusSum = data.expend;
+					if(state == 0 ){
+						navItem.orderList = data.zj
+					}
+					if(state == 1 ){
+						navItem.orderList = data.kc
+					}
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+
+		//swiper 切换
+		changeTab(e) {
+			this.tabCurrentIndex = e.target.current;
+			this.loadData('tabChange');
+		},
+		//顶部tab点击
+		tabClick(index) {
+			this.tabCurrentIndex = index;
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: #f1f1f1;
+	height: 100%;
+}
+.status_bar {
+	height: var(--status-bar-height);
+	width: 100%;
+}
+.content-money {
+	position: relative;
+	height: 480rpx;
+	.content-bg {
+		position: absolute;
+		top: 0;
+		left: 0;
+		right: 0;
+		width: 750rpx;
+		height: 480rpx;
+		image {
+			width: 100%;
+			height: 100%;
+		}
+	}
+	.body-title {
+		height: 80rpx;
+		text-align: center;
+		font-size: 35rpx;
+		position: relative;
+		.header {
+			position: absolute;
+			left: 0;
+			top: 0;
+			width: 100%;
+			font-size: 36rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #fffeff;
+			height: 80rpx;
+			font-size: 36rpx;
+			font-weight: 700;
+			z-index: 9;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+		}
+		.goback-box {
+			position: absolute;
+			left: 18rpx;
+			top: 0;
+			height: 80rpx;
+			display: flex;
+			align-items: center;
+		}
+
+		.goback {
+			z-index: 100;
+			width: 34rpx;
+			height: 34rpx;
+		}
+	}
+}
+.info-box {
+	width: 670rpx;
+	height: 186rpx;
+	background: #ffffff;
+	box-shadow: 0px 0px 20rpx 0px rgba(50, 50, 52, 0.06);
+	border-radius: 20rpx;
+	margin: -100rpx auto 0;
+	position: relative;
+	z-index: 2;
+	.info-item {
+		width: 50%;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		line-height: 1;
+		.info-font {
+			font-size: 30rpx;
+			font-weight: bold;
+			color: #999999;
+		}
+		.info-num {
+			margin-top: 30rpx;
+			font-size: 30rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #181818;
+		}
+	}
+	.shu {
+		width: 2rpx;
+		height: 74rpx;
+		background: #dcdfe6;
+	}
+}
+.money-box {
+	position: relative;
+	z-index: 2;
+	padding-top: 90rpx;
+	color: #ffffff;
+	text-align: center;
+	.money {
+		font-size: 72rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: #ffffff;
+	}
+	.text {
+		font-size: 30rpx;
+	}
+}
+.money-btn {
+	position: relative;
+	z-index: 2;
+	color: #ffffff;
+	padding-right: 50rpx;
+	text-align: right;
+	font-size: 30rpx;
+	font-family: PingFang SC;
+	font-weight: bold;
+	color: #ffffff;
+	text {
+		display: inline-block;
+		padding-left: 10rpx;
+	}
+}
+
+.navbar {
+	margin-top: 20rpx;
+	display: flex;
+	height: 88rpx;
+	padding: 0 5px;
+	background: #fff;
+	box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
+	position: relative;
+	z-index: 10;
+	.nav-item {
+		flex: 1;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		height: 100%;
+		font-size: 15px;
+		color: #999999;
+		position: relative;
+		&.current {
+			color: #000;
+			&:after {
+				content: '';
+				position: absolute;
+				left: 50%;
+				bottom: 0;
+				transform: translateX(-50%);
+				width: 44px;
+				height: 0;
+				border-bottom: 2px solid #fe5b38;
+			}
+		}
+	}
+}
+//列表
+.swiper-box {
+	.order-item:last-child {
+		margin-bottom: 60rpx;
+	}
+	.order-item {
+		padding: 20rpx 30rpx;
+		line-height: 1.5;
+		.title-box {
+			.title {
+				font-size: $font-lg;
+				color: $font-color-base;
+			}
+			.time {
+				font-size: $font-base;
+				color: $font-color-light;
+			}
+		}
+		.money {
+			color: #fd5b23;
+			font-size: $font-lg;
+			text-align: right;
+			.status {
+				color: $font-color-light;
+			}
+		}
+	}
+}
+.list-scroll-content {
+	background: #ffffff;
+	height: 100%;
+}
+.content {
+	height: 100%;
+	.empty-content {
+		background-color: #ffffff;
+	}
+}
+.btn-box {
+	width: 674rpx;
+	height: 88rpx;
+	background: linear-gradient(0deg, #2e58ff, #32c6ff);
+	border-radius: 44rpx;
+	font-size: 36rpx;
+	font-family: PingFang SC;
+	font-weight: 500;
+	color: #ffffff;
+	text-align: center;
+	line-height: 88rpx;
+	position: fixed;
+	bottom: 48rpx;
+	left: 0;
+	right: 0;
+	margin: 0 auto;
+}
+.money-btn {
+	position: relative;
+	z-index: 2;
+	color: #ffffff;
+	padding-right: 50rpx;
+	text-align: right;
+	font-size: 30rpx;
+	font-family: PingFang SC;
+	font-weight: bold;
+	color: #FFFFFF;
+	text {
+		display: inline-block;
+		padding-left: 10rpx;
+	}
+}
+</style>

+ 16 - 5
pages/user/myfans.vue

@@ -1,6 +1,8 @@
 <template>
 <template>
 	<view class="content">
 	<view class="content">
-		<view class="top-fan"></view>
+		<view class="top-fan">
+			<image src="../../static/img/top-bg.png" mode=""></image>
+		</view>
 		<view class="fans-base flex">
 		<view class="fans-base flex">
 			<view class="base-item">
 			<view class="base-item">
 				<view class="base-item-val">
 				<view class="base-item-val">
@@ -133,12 +135,21 @@
 		background-color: #f3f5f4;
 		background-color: #f3f5f4;
 	}
 	}
 	.top-fan {
 	.top-fan {
+		position: relative;
 		width: 750rpx;
 		width: 750rpx;
 		height: 336rpx;
 		height: 336rpx;
-		background: linear-gradient(-41deg, rgba(60, 237, 237, 0.99), #04B8FF, #375AFE);
-		border-radius: 0 0 40rpx 40rpx;
+		image {
+			position: absolute;
+			top: 0;
+			left: 0;
+			right: 0;
+			width: 100%;
+			height: 100%;
+		}
 	}
 	}
 	.fans-base {
 	.fans-base {
+		position: relative;
+		z-index: 2;
 		width: 702rpx;
 		width: 702rpx;
 		height: 210rpx;
 		height: 210rpx;
 		background: #FFFFFF;
 		background: #FFFFFF;
@@ -175,14 +186,14 @@
 	.fans-list-tit {
 	.fans-list-tit {
 		width: 710rpx;
 		width: 710rpx;
 		height: 100rpx;
 		height: 100rpx;
-		background: #E2EEFF;
+		background: #FFE1E2;
 		border-radius: 20rpx 20rpx 0px 0px;
 		border-radius: 20rpx 20rpx 0px 0px;
 		margin: auto;
 		margin: auto;
 		text-align: center;;
 		text-align: center;;
 		font-size: 30rpx;
 		font-size: 30rpx;
 		font-family: PingFang SC;
 		font-family: PingFang SC;
 		font-weight: bold;
 		font-weight: bold;
-		color: #375AFE;
+		color: #DC262B;
 		.list-item {
 		.list-item {
 			width: 33%;
 			width: 33%;
 			flex-shrink: 0;
 			flex-shrink: 0;

+ 541 - 0
pages/user/mygs.vue

@@ -0,0 +1,541 @@
+<template>
+	<view class="content">
+		<view class="content-money">
+			<view class="status_bar"><!-- 这里是状态栏 --></view>
+			<view class="body-title">
+				<view class="goback-box" @click="toBack"><image class="goback" src="../../static/icon/fanhui.png" mode=""></image></view>
+				<view class="header">挂售收益</view>
+			</view>
+			<view class="content-bg"><image src="../../static/img/gssy.png" mode=""></image></view>
+			<view class="money-box">
+				<view class="money">{{ userInfo.profit }}</view>
+				<view>总收益</view>
+			</view>
+		</view>
+		<scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData">
+			<!-- 空白页 -->
+			<empty v-if="orderList.length === 0"></empty>
+
+			<!-- 订单列表 -->
+			<view v-else>
+				<view v-for="(item, index) in orderList" :key="index" class="order-item">
+					<view class="i-top b-b">
+						<text class="time">{{ item.order_id }}</text>
+						<text class="state" :style="{ color: item.stateTipColor }">{{ item.stateTip }}</text>
+					</view>
+				
+					<view class="goods-box-single">
+						<image class="goods-img" :src="item.image" mode="aspectFill"></image>
+						<view class="right">
+							<text class="title clamp">{{ item.name }}</text>
+							<text class="attr-box">x1</text>
+							<text class="price">{{ moneyNum(item.price) }}</text>
+						</view>
+					</view>
+				
+					<view class="price-box">
+						共
+						<text class="num">1</text>
+						件商品 邮费
+						<text class="price">0</text>
+						实付款
+						<text class="price">{{ moneyNum(item.price) }}</text>
+					</view>
+				</view>
+				<uni-load-more :status="loadingType"></uni-load-more>
+			</view>
+			
+
+		</scroll-view>
+	</view>
+</template>
+
+<script>
+import { seller } from '@/api/order.js';
+import { getMoneyStyle } from '@/utils/rocessor.js';
+import { mapState, mapMutations } from 'vuex';
+import uniLoadMore from '@/uview-ui/components/u-loadmore/u-loadmore.vue';
+import empty from '@/uview-ui/components/u-empty/u-empty.vue';
+export default {
+	filters: {
+		getMoneyStyle
+	},
+	computed: {
+		...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
+	},
+	components: {
+		empty,
+		uniLoadMore
+	},
+	data() {
+		return {
+			loadingType: 'more',
+			orderList: [],
+			page: 1, //当前页数
+			limit: 10 //每次信息条数
+		};
+	},
+	filters: {
+		moneyNum(value) {
+			return +value;
+		}
+	},
+	onShow() {
+		this.loadData();
+	},
+	methods: {
+		// 转换金额为数字
+		moneyNum(value) {
+			return +value;
+		},
+		// 页面跳转
+		navto(e) {
+			uni.navigateTo({
+				url: e
+			});
+		},
+		// 点击返回 我的页面
+		toBack() {
+			uni.navigateBack({});
+		},
+		//获取收入支出信息
+		async loadData(source) {
+			let obj = this;
+			seller({
+				type: 3,
+				page: obj.page,
+				limit: obj.limit
+			})
+				.then(({ data }) => {
+					let arr = data.map(e => {
+						e.stateTip = '已完成';
+						e.stateTipColor = '#909399';
+						return e;
+					});
+					obj.orderList = obj.orderList.concat(arr);
+
+					// console.log(navItem.orderList);
+					obj.page++;
+					if (obj.limit == data.length) {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						obj.loadingType = 'more';
+						return;
+					} else {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						obj.loadingType = 'noMore';
+					}
+					uni.hideLoading();
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+
+		//swiper 切换
+		changeTab(e) {
+			this.tabCurrentIndex = e.target.current;
+			this.loadData('tabChange');
+		},
+		//顶部tab点击
+		tabClick(index) {
+			this.tabCurrentIndex = index;
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: #f1f1f1;
+	height: 100%;
+}
+.status_bar {
+	height: var(--status-bar-height);
+	width: 100%;
+}
+.content-money {
+	position: relative;
+	height: 400rpx;
+	.content-bg {
+		position: absolute;
+		top: 0;
+		left: 0;
+		right: 0;
+		width: 750rpx;
+		height: 400rpx;
+		image {
+			width: 100%;
+			height: 100%;
+		}
+	}
+	.body-title {
+		height: 80rpx;
+		text-align: center;
+		font-size: 35rpx;
+		position: relative;
+		.header {
+			position: absolute;
+			left: 0;
+			top: 0;
+			width: 100%;
+			font-size: 36rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #fffeff;
+			height: 80rpx;
+			font-size: 36rpx;
+			font-weight: 700;
+			z-index: 9;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+		}
+		.goback-box {
+			position: absolute;
+			left: 18rpx;
+			top: 0;
+			height: 80rpx;
+			display: flex;
+			align-items: center;
+		}
+
+		.goback {
+			z-index: 100;
+			width: 34rpx;
+			height: 34rpx;
+		}
+	}
+}
+.info-box {
+	width: 670rpx;
+	height: 186rpx;
+	background: #ffffff;
+	box-shadow: 0px 0px 20rpx 0px rgba(50, 50, 52, 0.06);
+	border-radius: 20rpx;
+	margin: -100rpx auto 0;
+	position: relative;
+	z-index: 2;
+	.info-item {
+		width: 50%;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		line-height: 1;
+		.info-font {
+			font-size: 30rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #999999;
+		}
+		.info-num {
+			margin-top: 30rpx;
+			font-size: 30rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #181818;
+		}
+	}
+	.shu {
+		width: 2rpx;
+		height: 74rpx;
+		background: #dcdfe6;
+	}
+}
+.money-box {
+	position: relative;
+	z-index: 2;
+	padding-top: 90rpx;
+	color: #ffffff;
+	text-align: center;
+	.money {
+		font-size: 72rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: #ffffff;
+	}
+	.text {
+		font-size: 30rpx;
+	}
+}
+.list-scroll-content {
+	height: calc(100% - 175px);
+}
+.order-item {
+	display: flex;
+	flex-direction: column;
+	background: #fff;
+	margin-top: 16rpx;
+
+	.i-top {
+		display: flex;
+		align-items: center;
+		height: 80rpx;
+		font-size: $font-base;
+		color: $font-color-dark;
+		position: relative;
+		padding: 0 30rpx;
+
+		.time {
+			flex: 1;
+		}
+
+		.state {
+			color: $base-color;
+		}
+
+		.del-btn {
+			padding: 10rpx 0 10rpx 36rpx;
+			font-size: $font-lg;
+			color: $font-color-light;
+			position: relative;
+
+			&:after {
+				content: '';
+				width: 0;
+				height: 30rpx;
+				border-left: 1px solid $border-color-dark;
+				position: absolute;
+				left: 20rpx;
+				top: 50%;
+				transform: translateY(-50%);
+			}
+		}
+	}
+
+	/* 多条商品 */
+	.goods-box {
+		height: 160rpx;
+		padding: 20rpx 0;
+		white-space: nowrap;
+
+		.goods-item {
+			width: 120rpx;
+			height: 120rpx;
+			display: inline-block;
+			margin-right: 24rpx;
+		}
+
+		.goods-img {
+			display: block;
+			width: 100%;
+			height: 100%;
+		}
+	}
+
+	/* 单条商品 */
+	.goods-box-single {
+		display: flex;
+		padding: 20rpx 30rpx;
+		background: #f7f7f7;
+		.goods-img {
+			display: block;
+			width: 120rpx;
+			height: 120rpx;
+		}
+
+		.right {
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			padding: 0 0 0 24rpx;
+			overflow: hidden;
+
+			.row {
+				margin-top: 10rpx;
+			}
+
+			.row_title {
+				padding: 5rpx 10rpx;
+				background-color: #dddddd;
+				border-radius: 10rpx;
+				font-size: 22rpx;
+				color: #ffffff;
+			}
+
+			.title {
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+				line-height: 1;
+				width: 80%;
+			}
+
+			.attr-box {
+				display: flex;
+				justify-content: flex-end;
+				font-size: $font-sm + 2rpx;
+				color: $font-color-light;
+			}
+
+			.price {
+				display: inline;
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+
+				&:before {
+					content: '¥';
+					font-size: $font-sm;
+				}
+			}
+		}
+	}
+	.buy-box {
+		height: 84rpx;
+		padding: 0 22rpx;
+		background-color: #ffffff;
+		.buy-info {
+			height: 100%;
+			display: flex;
+			align-items: center;
+			.font {
+				font-size: 32rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #333333;
+			}
+			.avter {
+				margin-left: 10rpx;
+				width: 46rpx;
+				height: 46rpx;
+				border-radius: 50%;
+			}
+			.buy-name {
+				margin-left: 10rpx;
+				font-size: 32rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #333333;
+			}
+			.phone {
+				margin-left: 12rpx;
+				font-size: 24rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #999999;
+			}
+		}
+	}
+	.upimg {
+		padding-left: 20rpx;
+		padding-top: 10rpx;
+		padding-bottom: 10rpx;
+		display: flex;
+
+		.up-tit {
+			display: inline-block;
+			font-size: 26rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #6d7c88;
+		}
+
+		.img-wrap {
+			width: 153rpx;
+			height: 152rpx;
+
+			border-radius: 20rpx;
+
+			image {
+				border-radius: 20rpx;
+				width: 153rpx;
+				height: 152rpx;
+				background-color: #ccc;
+			}
+		}
+	}
+	.price-box {
+		display: flex;
+		justify-content: flex-end;
+		align-items: baseline;
+		padding: 20rpx 30rpx;
+		font-size: $font-sm + 2rpx;
+		color: $font-color-light;
+
+		.num {
+			margin: 0 8rpx;
+			color: $font-color-dark;
+		}
+
+		.price {
+			font-size: $font-lg;
+			color: $font-color-dark;
+
+			&:before {
+				content: '¥';
+				font-size: $font-sm;
+				margin: 0 2rpx 0 8rpx;
+			}
+		}
+	}
+
+	.action-box {
+		padding: 0 30rpx;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		height: 100rpx;
+		position: relative;
+	}
+
+	.refuse {
+		margin: 0;
+		padding: 0;
+		width: 160rpx;
+		height: 60rpx;
+		border: 2rpx solid #ebebeb;
+		border-radius: 28rpx;
+		text-align: center;
+		line-height: 60rpx;
+		font-size: 26rpx;
+		font-family: PingFang SC;
+		font-weight: 500;
+		color: #999999;
+		&:after {
+			border-radius: 100px;
+		}
+
+		&.recom {
+			color: #999999;
+
+			&:after {
+				border-color: #999999;
+			}
+		}
+	}
+
+	.action-btn {
+		width: 160rpx;
+		height: 60rpx;
+		margin: 0;
+		margin-left: 24rpx;
+		padding: 0;
+		text-align: center;
+		line-height: 60rpx;
+		font-size: $font-sm + 2rpx;
+		color: $font-color-dark;
+		background: #fff;
+		border-radius: 100px;
+		border: 2rpx solid #fd3b39;
+		border-radius: 28px;
+		&:after {
+			border-radius: 100px;
+		}
+
+		&.recom {
+			color: $base-color;
+
+			&:after {
+				border-color: $base-color;
+			}
+		}
+
+		&.evaluate {
+			color: $color-yellow;
+
+			&:after {
+				border-color: $color-yellow;
+			}
+		}
+	}
+}
+
+</style>

+ 0 - 249
pages/user/myjj.vue

@@ -1,249 +0,0 @@
-<template>
-	<view class="content">
-		<view class="top-bg">
-		</view>
-		<view class="myjj-wrap">
-			<view class="jj-tit">
-				我的奖金(积分)
-			</view>
-			<view class="jj-val">
-				0
-			</view>
-			<view class="jj-detail flex">
-				<view class="jj-item">
-					<view class="jj-detail-tit">
-						冻结中
-					</view>
-					<view class="jj-detail-val">
-						0
-					</view>
-				</view>
-				<view class="jj-jg"></view>
-				<view class="jj-item">
-					<view class="jj-detail-tit">
-						已释放
-					</view>
-					<view class="jj-detail-val">
-						0
-					</view>
-				</view>
-			</view>
-		</view>
-		<view class="jj-jl">
-			<view class="jj-nav flex">
-				<view class="jj-nav-item" v-for="(navItem,navIndex) in jjnav" :key="navItem.status"
-					:class="{'action': navIndex == jjIndex}" @click="navClick(navIndex)">
-					{{navItem.type}}
-				</view>
-			</view>
-			<swiper :current="jjIndex" @change="swiperChange" class="jj-swiper" :style="{'height':height}">
-				<swiper-item v-for="(sItem,sIndex) in jjnav" :key="sIndex">
-					<scroll-view scroll-y="true" :style="{'height':height}" @scrolltolower="loadData()">
-						<view v-for="(cItem,cIndex) in sItem.list" class="jj-jl-detail flex">
-							<view class="jj-jl-detail-left">
-								<view class="left-mask">
-									推广奖励到账推广
-								</view>
-								<view class="left-time">
-									2018-12-1  09:30
-								</view>
-							</view>
-							<view class="jj-jl-detail-right">
-								ddd
-							</view>
-						</view>
-						<uni-load-more :status="sItem.loadingType"></uni-load-more>
-					</scroll-view>
-				</swiper-item>
-			</swiper>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				height: '', //页面剩余高度
-				jjIndex: 0, //当前选择nav
-				jjnav: [{
-						status: 0,
-						type: '收入',
-						list: 10,
-						loaded: false,
-						loadingType: 'more',
-						page: 1,
-						limit: 10,
-					},
-					{
-						status: 1,
-						type: '支出',
-						list: 5,
-						loaded: false,
-						loadingType: 'more',
-						page: 1,
-						limit: 10,
-					}
-				]
-			}
-		},
-		onReady(res) {
-			var obj = this;
-			uni.getSystemInfo({
-				success: resu => {
-					const query = uni.createSelectorQuery();
-					query.select('.jj-swiper').boundingClientRect();
-					query.exec(function(res) {
-						obj.height = resu.windowHeight - res[0].top + 'px';
-					});
-				},
-				fail: res => {}
-			});
-		},
-		methods: {
-			// 导航栏点击
-			navClick(index) {
-				this.jjIndex = index
-				this.loadData('nav')
-			},
-			// swiper 切换
-			swiperChange(e) {
-				this.jjIndex = e.detail.current
-			},
-			loadData(type) {
-				let obj = this
-				let index = obj.jjIndex
-				let navItem = obj.jjnav[index]
-				// 判断是否是nav点击触发
-				if (type == 'nav' && navItem.loaded) {
-					return
-				}
-				// 判断是否加载中 或 无更多数据
-				if (navItem.loadingType == 'loading' || navItem.loadingType == 'noMore') {
-					return
-				}
-				navItem.loadingType = 'loading'
-				// 获取数据
-
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.top-bg {
-		width: 750rpx;
-		height: 480rpx;
-		background: linear-gradient(-41deg, #FF6F30, #FFBE4C);
-	}
-
-	.myjj-wrap {
-		text-align: center;
-		width: 670rpx;
-		height: 386rpx;
-		background: #FFFFFF;
-		box-shadow: 0px 0px 20rpx 0px rgba(50, 50, 52, 0.06);
-		border-radius: 20rpx;
-		margin: -324rpx auto 26rpx;
-		padding: 60rpx 0 0;
-
-		.jj-tit {
-
-			font-size: 30rpx;
-			font-weight: bold;
-			color: #181818;
-		}
-
-		.jj-val {
-			padding: 30rpx 0 60rpx;
-			font-size: 48rpx;
-			font-weight: bold;
-			color: #181818;
-		}
-
-		.jj-detail {
-			.jj-jg {
-				width: 2rpx;
-				height: 74rpx;
-				background: #DCDFE6;
-			}
-
-			.jj-item {
-				flex-grow: 1;
-
-				.jj-detail-tit {
-					font-size: 30rpx;
-					font-weight: bold;
-					color: #999999;
-					padding-bottom: 33rpx;
-				}
-
-				.jj-detail-val {
-					font-size: 30rpx;
-					font-weight: bold;
-					color: #181818;
-				}
-			}
-
-		}
-	}
-
-	.jj-jl {
-		background-color: #fff;
-
-		.jj-nav {
-			height: 85rpx;
-			line-height: 85rpx;
-
-			.jj-nav-item {
-				text-align: center;
-				flex-grow: 1;
-			}
-
-			.action {
-				position: relative;
-
-				&::after {
-					content: '';
-					width: 50rpx;
-					height: 6rpx;
-					background: #FE5B38;
-					border-radius: 3rpx;
-					position: absolute;
-					bottom: 0;
-					left: 0;
-					right: 0;
-					margin: auto;
-				}
-			}
-		}
-	}
-
-	.jj-jl-detail {
-		width: 700rpx;
-		padding: 30rpx 0 24rpx;
-		border-bottom: 1px solid #F0F4F8;
-		margin: auto;
-		.jj-jl-detail-left {
-			flex-grow: 1;
-			.left-mask {
-				font-size: 30rpx;
-				font-weight: bold;
-				color: #666666;
-				padding-bottom: 10rpx;
-			}
-			.left-time {
-				font-size: 26rpx;
-				font-weight: 500;
-				color: #AEAEAE;
-			}
-		}
-		.jj-jl-detail-right {
-			flex-shrink: 0;
-			font-size: 36rpx;
-			font-family: PingFang SC;
-			font-weight: bold;
-			color: #FD3B39;
-		}
-	}
-</style>

+ 0 - 200
pages/user/scoreAccumulate.vue

@@ -1,200 +0,0 @@
-<template>
-	<view class="content">
-		<!-- <view class="navbar">
-			<view v-for="(item, index) in navList" :key="index" class="nav-item" :class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">{{ item.text }}</view>
-		</view> -->
-		<swiper :current="tabCurrentIndex" class="swiper-box" duration="300" @change="changeTab">
-			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
-				<scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData">
-					<!-- 空白页 -->
-					<empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
-
-					<!-- 订单列表 -->
-					<view v-for="(item, index) in tabItem.orderList" :key="index" class="order-item flex">
-						<view class="title-box">
-							<view class="title">
-								<text>{{ item.mark }}</text>
-							</view>
-							<view class="time">
-								<text>{{ item.add_time }}</text>
-							</view>
-						</view>
-						<view class="money">
-							<text>{{ (item.pm == 0 ? '-' : '+') + item.number }}</text>
-						</view>
-					</view>
-					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
-				</scroll-view>
-			</swiper-item>
-		</swiper>
-	</view>
-</template>
-
-<script>
-	
-import { integrallist } from '@/api/functionalUnit.js';
-import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
-import empty from '@/components/empty';
-export default {
-	components: {
-		empty,
-		uniLoadMore
-	},
-	onReady() {
-		
-	},
-	data() {
-		return {
-			tabCurrentIndex: 0,
-			navList: [
-				{
-					state: 0,
-					text: '全部',
-					loadingType: 'more',
-					orderList: [],
-					page: 1, //当前页数
-					limit: 10 //每次信息条数
-				},
-			],
-		};
-	},
-	onShow() {
-		// 载入积分数据
-		this.loadData();
-	},
-	methods: {
-		// 页面跳转
-		navto(e) {
-			uni.navigateTo({
-				url: e
-			});
-		},
-		//获取收入支出信息
-		async loadData(source) {
-			//这里是将订单挂载到tab列表下
-			let index = this.tabCurrentIndex;
-			let navItem = this.navList[index];
-			let state = navItem.state;
-			if (source === 'tabChange' && navItem.loaded === true) {
-				//tab切换只有第一次需要加载数据
-				return;
-			}
-			if (navItem.loadingType === 'loading') {
-				//防止重复加载
-				return;
-			}
-			// 修改当前对象状态为加载中
-			navItem.loadingType = 'loading';
-
-			integrallist(
-				{
-					page: navItem.page,
-					limit: navItem.limit
-				},
-				state
-			)
-				.then(({ data }) => {
-					if (data.length > 0) {
-						navItem.orderList = navItem.orderList.concat(data);
-						navItem.page++;
-					}
-					if (navItem.limit == data.length) {
-						//判断是否还有数据, 有改为 more, 没有改为noMore
-						navItem.loadingType = 'more';
-						return;
-					} else {
-						//判断是否还有数据, 有改为 more, 没有改为noMore
-						navItem.loadingType = 'noMore';
-					}
-					uni.hideLoading();
-					this.$set(navItem, 'loaded', true);
-				})
-				.catch(e => {
-					console.log(e);
-				});
-		},
-
-		//swiper 切换
-		changeTab(e) {
-			this.tabCurrentIndex = e.target.current;
-			this.loadData('tabChange');
-		},
-		//顶部tab点击
-		tabClick(index) {
-			this.tabCurrentIndex = index;
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-page {
-	background: #ffffff;
-	height: 100%;
-}
-.navbar {
-	display: flex;
-	height: 40px;
-	padding: 0 5px;
-	background: #fff;
-	box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
-	position: relative;
-	z-index: 10;
-	.nav-item {
-		flex: 1;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		height: 100%;
-		font-size: 15px;
-		color: $font-color-dark;
-		position: relative;
-		&.current {
-			color: $base-color;
-			&:after {
-				content: '';
-				position: absolute;
-				left: 50%;
-				bottom: 0;
-				transform: translateX(-50%);
-				width: 44px;
-				height: 0;
-				border-bottom: 2px solid $base-color;
-			}
-		}
-	}
-}
-// 列表
-
-.swiper-box {
-	height: calc(100% - 44px);
-	padding-top: 10rpx;
-	.order-item {
-		padding: 20rpx 30rpx;
-		line-height: 1.5;
-		.title-box {
-			.title {
-				font-size: $font-lg;
-				color: $font-color-base;
-			}
-			.time {
-				font-size: $font-base;
-				color: $font-color-light;
-			}
-		}
-		.money {
-			color: #fd5b23;
-			font-size: $font-lg;
-		}
-	}
-}
-.list-scroll-content {
-	height: 100%;
-}
-.content {
-	height: 100%;
-	.empty-content {
-		background-color: #ffffff;
-	}
-}
-</style>

+ 154 - 55
pages/user/user.vue

@@ -13,21 +13,21 @@
 				</view>
 				</view>
 			</view>
 			</view>
 			<view class="sy-box flex">
 			<view class="sy-box flex">
-				<view class="sy-item">
+				<view class="sy-item" @click="navTo('/pages/user/mygs')">
 					<view class="sy-item-val">
 					<view class="sy-item-val">
-						0
+						{{ userInfo.profit }}
 					</view>
 					</view>
 					<view class="sy-item-name">
 					<view class="sy-item-name">
 						挂售收益
 						挂售收益
 					</view>
 					</view>
 				</view>
 				</view>
 				<view class="jg"></view>
 				<view class="jg"></view>
-				<view class="sy-item" @click="navTo('/pages/user/myjj')">
+				<view class="sy-item" @click="navTo('/pages/user/award')">
 					<view class="sy-item-val">
 					<view class="sy-item-val">
-						0
+						{{ userInfo.brokerage_price }}
 					</view>
 					</view>
 					<view class="sy-item-name">
 					<view class="sy-item-name">
-						我的
+						我的
 					</view>
 					</view>
 				</view>
 				</view>
 			</view>
 			</view>
@@ -36,8 +36,8 @@
 			<image src="../../static/icon/uqd.png" mode=""></image>
 			<image src="../../static/icon/uqd.png" mode=""></image>
 			<view class="qd-info">
 			<view class="qd-info">
 				<view class="" style="font-weight: bold;color: #0C1732;">签到领取积分</view>
 				<view class="" style="font-weight: bold;color: #0C1732;">签到领取积分</view>
-				<view class="">已连续签到0天</view>
-				<view class="">今日签到奖励0积分</view>
+				<view class="">已连续签到{{actionDay}}天</view>
+				<view class="">累计签到奖励{{sum_integral}}积分</view>
 			</view>
 			</view>
 			<view class="qd-btn" :class="{'qded': qded}" @click="qded?'':goQd()">
 			<view class="qd-btn" :class="{'qded': qded}" @click="qded?'':goQd()">
 				{{qded?'已签到': '立即签到'}}
 				{{qded?'已签到': '立即签到'}}
@@ -94,12 +94,7 @@
 				<view class="popup-title">
 				<view class="popup-title">
 					获得
 					获得
 					<text>{{ today_integral }}</text>
 					<text>{{ today_integral }}</text>
-					{{today_type}}
-				</view>
-				<view class="popup-tip">
-					明天签到可得
-					<text>{{ tom_integral }}</text>
-					{{tom_type}}
+					趣豆
 				</view>
 				</view>
 				<view class="popup-btn" @click="closeQd">知道了</view>
 				<view class="popup-btn" @click="closeQd">知道了</view>
 			</view>
 			</view>
@@ -120,8 +115,11 @@
 	import uniListItem from '@/components/uni-list-item/uni-list-item.vue';
 	import uniListItem from '@/components/uni-list-item/uni-list-item.vue';
 	import {
 	import {
 		orderData,
 		orderData,
-		getUserInfo
+		getUserInfo,
+		rate,
+		apply_status
 	} from '@/api/user.js';
 	} from '@/api/user.js';
+	import { signList, integral,signUser } from '@/api/functionalUnit.js';
 	import {
 	import {
 		saveUrl,
 		saveUrl,
 		interceptor
 		interceptor
@@ -136,24 +134,29 @@
 		},
 		},
 		data() {
 		data() {
 			return {
 			return {
+				money: '', //保存当前月份
+				year: '', //保存当前年份
+				day: '', //保存当前日期
 				current: 4,
 				current: 4,
 				tabbar: tabbar1,
 				tabbar: tabbar1,
 				qded: false, //是否已签到
 				qded: false, //是否已签到
 				text:'',//客服微信
 				text:'',//客服微信
+				actionDay:0,//连续签到天数
+				sum_integral:0,//累计获得积分
 				today_integral:'',//签到获得的数值
 				today_integral:'',//签到获得的数值
-				today_type:'',//签到获得的数值单位
 				tom_integral: '',//明天签到获得的数值
 				tom_integral: '',//明天签到获得的数值
 				tom_type: '',//签到获得的数值单位
 				tom_type: '',//签到获得的数值单位
 				userDowm: 0, //卡片升级专属高度
 				userDowm: 0, //卡片升级专属高度
 				userMaxDowm: 0, //卡片最高高度
 				userMaxDowm: 0, //卡片最高高度
-				toolList: [{
-						id: 't1',
-						name: '新人通道',
-						width: '56rpx',
-						heigt: '54rpx',
-						img: '../../static/icon/tool-1.png',
-						path: '/pages/user/xrtd'
-					},
+				toolList: [
+					// {
+					// 	id: 't1',
+					// 	name: '新人通道',
+					// 	width: '56rpx',
+					// 	heigt: '54rpx',
+					// 	img: '../../static/icon/tool-1.png',
+					// 	path: '/pages/user/xrtd'
+					// },
 					{
 					{
 						id: 't2',
 						id: 't2',
 						name: '邀请好友',
 						name: '邀请好友',
@@ -201,6 +204,9 @@
 			// 判断是否已经登录
 			// 判断是否已经登录
 			if (this.hasLogin) {
 			if (this.hasLogin) {
 				this.loadBaseData();
 				this.loadBaseData();
+				this.signUser();
+				this.loadList();
+				this.getData();
 			}
 			}
 		},
 		},
 		onReady() {
 		onReady() {
@@ -219,31 +225,49 @@
 				)
 				)
 				.exec();
 				.exec();
 		},
 		},
-		// #ifndef MP
-		// onNavigationBarButtonTap(e) {
-		// 	const index = e.index;
-		// 	if (index === 0) {
-		// 		this.navTo('/pages/set/set');
-		// 	} else if (index === 1) {
-		// 		// #ifdef APP-PLUS
-		// 		const pages = getCurrentPages();
-		// 		const page = pages[pages.length - 1];
-		// 		const currentWebview = page.$getAppWebview();
-		// 		currentWebview.hideTitleNViewButtonRedDot({
-		// 			index
-		// 		});
-		// 		// #endif
-		// 		uni.navigateTo({
-		// 			url: '/pages/user/notice'
-		// 		});
-		// 	}
-		// },
-		// #endif
 		computed: {
 		computed: {
 			...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
 			...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
 		},
 		},
 		methods: {
 		methods: {
 			...mapMutations('user', ['setUserInfo', 'setOrderInfo']),
 			...mapMutations('user', ['setUserInfo', 'setOrderInfo']),
+			getData(current) {
+				const date = current ? new Date(current) : new Date();
+				this.year = date.getFullYear();//保存当前年份
+				this.month = date.getMonth() + 1;//保存当前月份
+				this.day = date.getDate();//保存当前日期
+			},
+			// 获取签到列表
+			loadList() {
+				let obj = this;
+				let present = this.day; //保存当前天数用于后续计算
+				let actionDay = 0; //用于计算活跃天数
+				let arr = []; //保存返回数组;
+				signList({
+					page: 1,
+					limit: 31
+				}).then(e => {
+					arr = e.data.map((e, ind) => {
+						let time = e.add_time.split('-');
+						let day = parseInt(time[2].replace(/^0/i, ''));
+						let year = time[0];
+						let month = +time[1];
+						if (obj.year == year && obj.month == month) {
+							return day;
+						}
+					});
+					// 判断今天是否已经签到
+					if(arr[0]==this.day){
+						this.qded = true;
+					}
+				});
+			},
+			//获取签到用户信息
+			signUser(){
+				signUser({all:1}).then(({data}) => {
+					this.actionDay = data.sign_num;//连续签到天数
+					this.sum_integral = data.sum_integral;//累计总积分
+				})
+			},
 			// 加载初始数据
 			// 加载初始数据
 			loadBaseData() {
 			loadBaseData() {
 				getUserInfo({})
 				getUserInfo({})
@@ -277,24 +301,99 @@
 			 * navigator标签现在默认没有转场动画,所以用view
 			 * navigator标签现在默认没有转场动画,所以用view
 			 */
 			 */
 			navTo(url) {
 			navTo(url) {
-				// if (!this.hasLogin) {
-				// 	// 保存地址
-				// 	saveUrl();
-				// 	// 登录拦截
-				// 	interceptor();
-				// } else {
-					uni.navigateTo({
-						url
-					});
-				// }
+				const obj = this
+				if (!this.hasLogin) {
+					// 保存地址
+					saveUrl();
+					// 登录拦截
+					interceptor();
+				} else {
+					if(url == '/pages/user/approve'){
+						rate({}).then(e =>{
+							console.log(e);
+							if(e.data.is_auth == 0){
+								uni.navigateTo({
+									url
+								});
+							}
+							if(e.data.is_auth == 1){
+								this.$api.msg('正在审核中请耐心等待')
+							}
+							if(e.data.is_auth == 2){
+								this.$api.msg('已通过实名认证,无需再实名认证')
+							}
+							if(e.data.is_auth == 3) {
+								uni.showModal({
+									title: '提示',
+									content:'申请失败,原因'+ e.data.off +'是否重新申请',
+									success: function (res) {
+											if (res.confirm) {
+												uni.navigateTo({
+													url
+												});
+											} else if (res.cancel) {
+												console.log('用户点击取消');
+											}
+										}
+								})
+							}
+						}).catch(e =>{
+							return
+						})
+					} else if (url == '/pages/user/gzsq'){
+						apply_status({}).then(e =>{
+							if(e.data.status != 0){
+								if(e.data.status == 3){
+									uni.showModal({
+										title: '提示',
+										content:'申请失败是否重新申请',
+										success: function (res) {
+												if (res.confirm) {
+													uni.navigateTo({
+														url
+													});
+												} else if (res.cancel) {
+													console.log('用户点击取消');
+												}
+											}
+									})
+								}else{
+									obj.$api.msg(e.data.str)
+								}
+							} else {
+								uni.navigateTo({
+									url
+								});
+							}
+						}).catch(e =>{
+						})
+					}else {
+						uni.navigateTo({
+							url
+						});
+					}
+				}
 			},
 			},
 			useTool(e) {
 			useTool(e) {
 				this.navTo(e.path)
 				this.navTo(e.path)
 			},
 			},
 			// 签到弹窗
 			// 签到弹窗
 			goQd() {
 			goQd() {
-				this.$refs.popupqd.open()
-				this.qded = true
+				integral({})
+					.then(e => {
+						this.integral = 
+						console.log(e);
+						// 改为已签到
+						this.qded = true
+						this.today_integral = e.data.integral
+						this.actionDay++;
+						this.sum_integral += e.data.integral 
+						this.$refs.popupqd.open()
+					})
+					.catch(e => {
+						console.log(e);
+					});
+				
 			},
 			},
 			// 关闭签到弹窗
 			// 关闭签到弹窗
 			closeQd() {
 			closeQd() {

BIN
static/icon/gou.png


BIN
static/img/gssy.png


BIN
static/img/order1.png


BIN
static/img/order2.png


+ 0 - 4
utils/rocessor.js

@@ -43,10 +43,6 @@ export function timeComputed(time) {
 	console.log(actTime);
 	console.log(actTime);
 	// 获取到期时间
 	// 获取到期时间
 	let stopTime = time*1000 - actTime;
 	let stopTime = time*1000 - actTime;
-	// 判断是否小于0
-	if (stopTime < 0) {
-		stopTime = stopTime * -1
-	}
 	let day = Math.floor(stopTime / 1000 / 60 / 60 / 24) //获取剩余天数
 	let day = Math.floor(stopTime / 1000 / 60 / 60 / 24) //获取剩余天数
 	let hours = Math.floor((stopTime / 1000 / 60 / 60) % 24); //获取剩余小时数
 	let hours = Math.floor((stopTime / 1000 / 60 / 60) % 24); //获取剩余小时数
 	let minutes = Math.floor((stopTime / 1000 / 60) % 60); //获取分钟
 	let minutes = Math.floor((stopTime / 1000 / 60) % 60); //获取分钟

+ 1 - 1
utils/tabbar.js

@@ -5,7 +5,7 @@ export const tabbar = [{
 		text: "首页"
 		text: "首页"
 	},
 	},
 	{
 	{
-		pagePath: "/pages/order/order",
+		pagePath: "/pages/order/index",
 		iconPath: require("@/static/tabBar/tab-order.png"),
 		iconPath: require("@/static/tabBar/tab-order.png"),
 		selectedIconPath: require("@/static/tabBar/tab-order-current.png"),
 		selectedIconPath: require("@/static/tabBar/tab-order-current.png"),
 		text: "订单"
 		text: "订单"

Vissa filer visades inte eftersom för många filer har ändrats