lhl %!s(int64=4) %!d(string=hai) anos
pai
achega
e034bc7b8c
Modificáronse 47 ficheiros con 6394 adicións e 165 borrados
  1. 88 0
      api/applyHelp.js
  2. 8 0
      api/index.js
  3. 407 0
      components/DateTimePicker/DateTimePicker.vue
  4. 40 0
      components/DateTimePicker/uitls/util.js
  5. 395 0
      components/lb-picker/README.md
  6. 256 0
      components/lb-picker/index.vue
  7. 131 0
      components/lb-picker/pickers/multi-selector-picker.vue
  8. 100 0
      components/lb-picker/pickers/selector-picker.vue
  9. 120 0
      components/lb-picker/pickers/unlinked-selector-picker.vue
  10. 27 0
      components/lb-picker/style/picker-item.scss
  11. 94 0
      components/lb-picker/style/picker.scss
  12. 7 0
      components/lb-picker/utils.js
  13. 104 104
      manifest.json
  14. 93 5
      pages.json
  15. 2 2
      pages/applic/donaSuccess.vue
  16. 7 7
      pages/applic/other.vue
  17. 2 2
      pages/applic/toknowledge.vue
  18. 288 0
      pages/applyHelp/cation.vue
  19. 493 0
      pages/applyHelp/fourth.vue
  20. 557 0
      pages/applyHelp/index.vue
  21. 551 0
      pages/applyHelp/second.vue
  22. 355 0
      pages/applyHelp/third.vue
  23. 2 2
      pages/donate/donateDetail.vue
  24. 2 2
      pages/form/certificates copy.vue
  25. 4 4
      pages/form/certificates.vue
  26. 3 3
      pages/form/donaSuccess.vue
  27. 392 0
      pages/fu/axjz.vue
  28. 452 0
      pages/fu/fuInfo.vue
  29. 308 0
      pages/fu/getPoints.vue
  30. 359 0
      pages/fu/helpDetail.vue
  31. 186 0
      pages/fu/helpInfo.vue
  32. 195 0
      pages/fu/upLoadInfo.vue
  33. 2 2
      pages/index/biaoge.vue
  34. 3 3
      pages/share/card.vue
  35. 3 3
      pages/train/sign.vue
  36. 2 2
      pages/user/intent.vue
  37. 311 0
      pages/user/myFu.vue
  38. 2 2
      pages/user/thank.vue
  39. 16 3
      pages/user/user.vue
  40. BIN=BIN
      static/icon/i10.png
  41. BIN=BIN
      static/images/icon_pick.png
  42. BIN=BIN
      static/images/sctp.png
  43. BIN=BIN
      static/images/sqyz.png
  44. BIN=BIN
      static/tabBar/tab-fu-current.png
  45. BIN=BIN
      static/tabBar/tab-fu.png
  46. 1 0
      uni.scss
  47. 26 19
      utils/loginUtils.js

+ 88 - 0
api/applyHelp.js

@@ -0,0 +1,88 @@
+import request from '@/utils/request'
+
+// 获取商品一级分类
+export function getList(data) {
+	return request({
+		url: '/api/category',
+		method: 'get',
+		data
+	});
+}
+
+export function gethelp(data) {
+	return request({
+		url: '/api/get_help',
+		method: 'get',
+		data
+	});
+}
+export function helpdetail(data) {
+	return request({
+		url: '/api/help_detail',
+		method: 'get',
+		data
+	});
+}
+
+// 获取详情
+export function one_detail(data) {
+	return request({
+		url: '/api/one_detail',
+		method: 'get',
+		data
+	});
+}
+
+// 申请援助
+export function enroll(data) {
+	return request({
+		url: '/api/enroll',
+		method: 'get',
+		data
+	});
+}
+
+// 我的申请
+export function my_enroll(data) {
+	return request({
+		url: '/api/my_enroll',
+		method: 'get',
+		data
+	});
+}
+
+// 上传
+export function means(data) {
+	return request({
+		url: '/api/means',
+		method: 'post',
+		data
+	});
+}
+
+// 帮扶公示
+export function bangfu(data) {
+	return request({
+		url: '/api/means',
+		method: 'post',
+		data
+	});
+}
+
+// 帮扶详情-公示
+export function gonghsi(data) {
+	return request({
+		url: '/api/means',
+		method: 'post',
+		data
+	});
+}
+
+// 获取上传资料
+export function get_means(data) {
+	return request({
+		url: '/api/get_means',
+		method: 'get',
+		data
+	});
+}

+ 8 - 0
api/index.js

@@ -216,3 +216,11 @@ export function add_company(data) {
 	});
 	});
 }
 }
 
 
+// 爱心帮扶
+export function one_help(data) {
+	return request({
+		url: '/api/one_help',
+		method: 'get',
+		data
+	});
+}

+ 407 - 0
components/DateTimePicker/DateTimePicker.vue

@@ -0,0 +1,407 @@
+<template>
+	<view class="date-time-picker" v-if="visible">
+		<view class="date-time-mask" @click.stop="hide"></view>
+		<view class="date-time-container" @click.stop="handleEvent">
+			<view class="time-picker-tool" v-if='isShowToolBar'>
+				<view :class="[cancelButtonClass]" @click.stop="cancel">
+					<text>{{cancelButtonText}}</text>
+				</view>
+				<view :class="[toolBarTitleClass]">
+					<text>{{toolBarTitle}}</text>
+				</view>
+				<view :class="[confirmButtonClass]" @click.stop="confirm">
+					<text>{{confirmButtonText}}</text>
+				</view>
+			</view>
+			<picker-view class="picker-view" :indicator-style="indicatorStyleString" :value="dateTime" @change="dateTimePickerChange">
+				<picker-view-column data-id='year' v-if='isShowYear'>
+					<view class="item" v-for="(item,index) in years" :key="index">{{item}}年</view>
+				</picker-view-column>
+				<picker-view-column data-id='month' v-if='isShowMonth'>
+					<view class="item" v-for="(item,index) in months" :key="index">{{item}}月</view>
+				</picker-view-column>
+				<picker-view-column data-id='day' v-if='isShowDay'>
+					<view class="item" v-for="(item,index) in days" :key="index">{{item}}日</view>
+				</picker-view-column>
+				<picker-view-column data-id='hour' v-if='isShowHour'>
+					<view class="item" v-for="(item,index) in hours" :key="index">{{item}}时</view>
+				</picker-view-column>
+				<picker-view-column data-id='minute' v-if='isShowMinute'>
+					<view class="item" v-for="(item,index) in minutes" :key="index">{{item}}分</view>
+				</picker-view-column>
+				<picker-view-column data-id='second' v-if='isShowSecond'>
+					<view class="item" v-for="(item,index) in seconds" :key="index">{{item}}秒</view>
+				</picker-view-column>
+			</picker-view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getOneMonthDays,
+		getTimeArray,
+		addZero,
+		getIndexOfArray
+	} from './uitls/util.js'
+	export default {
+		name: 'DateTimePicker',
+		props: {
+			startYear: {
+				type: Number,
+				default: 1900
+			},
+			endYear: {
+				type: Number,
+				default: new Date().getFullYear()
+			},
+			isShowToolBar: {
+				type: Boolean,
+				default: true
+			},
+			cancelButtonText: {
+				type: String,
+				default: '取消'
+			},
+			cancelButtonClass: {
+				type: String,
+				default: 'cancel-btn'
+			},
+			toolBarTitle: {
+				type: String,
+				default: '请选择'
+			},
+			toolBarTitleClass: {
+				type: String,
+				default: 'tool-title'
+			},
+			confirmButtonText: {
+				type: String,
+				default: '确定'
+			},
+			confirmButtonClass: {
+				type: String,
+				default: 'confirm-btn'
+			},
+			datestring: {
+				type: String,
+				default: ''
+			},
+			type: {
+				/**
+				 * date 年月日
+				 * year-month 年月
+				 * year 年
+				 * datetime 年月日 时分
+				 * datetime-all 年月日 时分秒
+				 * time 时分秒
+				 * hour-minute 时分
+				 */
+				type: String,
+				default: 'date'
+			},
+			indicatorStyle: {
+				type: Object,
+				default: null
+			}
+		},
+		data() {
+			return {
+				visible: false,
+				dateTime: [],
+				days: [],
+				indicatorStyleString: ''
+			}
+		},
+		watch: {
+			indicatorStyle(val){
+				this.getIndicatorStyle();
+			},
+			type() {
+				this.initDateTime()
+			},
+			datestring(){
+				this.initDateTime()
+			}
+		},
+		computed: {
+			years() {
+				return this.initTimeData(this.endYear, this.startYear);
+			},
+			isShowYear() {
+				return this.type !== 'time' && this.type !== 'hour-minute';
+			},
+			months() {
+				return this.initTimeData(12, 1);
+			},
+			isShowMonth() {
+				return this.type !== 'year' && this.type !== 'time' && this.type !== 'hour-minute';
+			},
+			isShowDay() {
+				return this.type === 'date' || this.type === 'datetime' || this.type === 'datetime-all';
+			},
+			hours() {
+				return this.initTimeData(23, 0);
+			},
+			isShowHour() {
+				return this.type !== 'date' && this.type !== 'year-month' && this.type !== 'year';
+			},
+			minutes() {
+				return this.initTimeData(59, 0);
+			},
+			isShowMinute() {
+				return this.type !== 'date' && this.type !== 'year-month' && this.type !== 'year';
+			},
+			seconds() {
+				return this.initTimeData(59, 0);
+			},
+			isShowSecond() {
+				return this.type === 'datetime-all' || this.type === 'time';
+			}
+		},
+		methods: {
+			getIndicatorStyle(){
+				if(this.indicatorStyle){
+					for(let key in this.indicatorStyle){
+						this.indicatorStyleString += `${key}:${this.indicatorStyle[key]};`
+					}
+				}
+			},
+			handleEvent() {
+				return;
+			},
+			cancel() {
+				this.hide();
+			},
+			confirm() {
+				this.formatDate();
+				this.hide();
+			},
+			show() {
+				this.visible = true;
+			},
+			hide() {
+				this.visible = false;
+			},
+			initDateTime() {
+				let value;
+				if (this.datestring.length > 0) {
+					if (this.type === 'year') {
+						value = new Date(this.datestring, 0);
+					} else if (this.type === 'time' || this.type === 'hour-minute') {
+						let date = new Date();
+						let ary = this.datestring.split(':');
+						ary.forEach((item, index) => {
+							if (index == 0) {
+								date.setHours(item)
+							} else if (index == 1) {
+								date.setMinutes(item)
+							} else if (index == 2) {
+								date.setSeconds(item)
+							}
+						})
+						value = date;
+					} else {
+						value = new Date(this.datestring.replace(/-/g, '/'));
+					}
+
+				} else {
+					value = new Date();
+				}
+				let len, timeArray, index;
+				let array = getTimeArray(value);
+				let [year, month, day, hour, minute, second] = array;
+				this.days = this.initTimeData(getOneMonthDays(year, month), 1);
+				let names = ['year', 'month', 'day', 'hour', 'minute', 'second'];
+				switch (this.type) {
+					case "date":
+						len = 3;
+						break;
+					case "year-month":
+						len = 2;
+						break;
+					case "year":
+						len = 1;
+						break;
+					case "datetime":
+						len = 5;
+						break;
+					case "datetime-all":
+						len = 6;
+						break;
+					case "time":
+						len = 3;
+						break;
+					case "hour-minute":
+						len = 2;
+						break;
+				}
+				timeArray = new Array(len).fill(0);
+				if (this.type === 'time' || this.type === 'hour-minute') {
+					names = names.slice(3);
+					array = array.slice(3);
+				}
+				timeArray = timeArray.map((item, index) => {
+					const name = names[index];
+					return getIndexOfArray(array[index], this[name + 's'])
+				})
+				this.dateTime = timeArray;
+			},
+			initTimeData(end, start) {
+				let timeArray = [];
+				while (start <= end) {
+					timeArray.push(start);
+					start++;
+				}
+				return timeArray;
+			},
+			formatDate() {
+				let names = ['year', 'month', 'day', 'hour', 'minute', 'second'];
+				let dateString, formatDateArray = [];
+				if (this.type === 'date' || this.type === 'year-month' || this.type === 'year') {
+					formatDateArray = this.dateTime.map((item, index) => {
+						return this[names[index] + 's'][item] < 10 ? addZero(this[names[index] + 's'][item]) : this[names[index] + 's'][item];
+					})
+					dateString = formatDateArray.join('-');
+				} else if (this.type === 'time' || this.type === 'hour-minute') {
+					names = names.splice(3);
+					formatDateArray = this.dateTime.map((item, index) => {
+						return this[names[index] + 's'][item] < 10 ? addZero(this[names[index] + 's'][item]) : this[names[index] + 's'][item];
+					})
+					dateString = formatDateArray.join(':');
+				} else {
+					let name1 = names.splice(0, 3);
+					formatDateArray = this.dateTime.map((item, index) => {
+						if (index > 2) {
+							return this[names[index - 3] + 's'][item] < 10 ? addZero(this[names[index - 3] + 's'][item]) : this[names[index - 3] + 's'][item];
+						} else {
+							return this[name1[index] + 's'][item] < 10 ? addZero(this[name1[index] + 's'][item]) : this[name1[index] + 's'][item];
+						}
+					})
+					dateString = formatDateArray.splice(0, 3).join('-') + ' ' + formatDateArray.join(':');
+				}
+				this.$emit('change', dateString)
+			},
+			dateTimePickerChange(e) {
+				let columns = e.target.value;
+				if (this.type === 'date' || this.type === 'datetime' || this.type === 'datetime-all') {
+					this.dateTime.splice(0, 1, columns[0]);
+					if (columns[0] != this.dateTime[0]) {
+						this.days = this.initTimeData(getOneMonthDays(this.years[this.dateTime[0]], this.months[this.dateTime[1]]), 1);
+						if (this.dateTime[1] == 1) {
+							if (this.dateTime[2] === this.days.length - 1) {
+								if (getOneMonthDays(this.years[columns[0]], this.dateTime[1]) < getOneMonthDays(this.years[this.dateTime[0]],this.dateTime[1])) {
+									this.dateTime.splice(2, 1, this.days.length - 1)
+								}
+							}
+						}
+					} else {
+						this.dateTime.splice(1, 1, columns[1]);
+						this.days = this.initTimeData(getOneMonthDays(this.years[this.dateTime[0]], this.dateTime[1]), 1);
+						if (columns[1] != this.dateTime[1]) {
+							if (this.dateTime[1] == 1) {
+								if (this.dateTime[2] === this.days.length - 1) {
+									if (getOneMonthDays(this.years[columns[0]], this.dateTime[1]) < getOneMonthDays(this.years[this.dateTime[0]],
+											this.dateTime[1])) {
+										this.dateTime.splice(2, 1, this.days.length - 1)
+									}
+								}
+							} else {
+								if (this.dateTime[2] > this.days.length - 1) {
+									this.dateTime.splice(2, 1, this.days.length - 1)
+								} else {
+									this.dateTime.splice(2, 1, columns[2])
+								}
+							}
+						} else {
+							this.dateTime.splice(2, 1, columns[2])
+						}
+					}
+					if (columns.length > 2) {
+						columns.splice(3).forEach((column, index) => {
+							this.dateTime.splice(index + 3, 1, column);
+						})
+					}
+				} else {
+					columns.forEach((column, index) => {
+						this.dateTime.splice(index, 1, column);
+					})
+				}
+				if (!this.isShowToolBar) {
+					this.formatDate();
+				}
+			},
+		},
+		mounted() {
+			this.getIndicatorStyle();
+			this.initDateTime();
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+	.date-time-picker {
+		.date-time-mask {
+			position: fixed;
+			top: 0;
+			bottom: 0;
+			left: 0;
+			right: 0;
+			background-color: rgba($color: #000000, $alpha: .5);
+			z-index: 998;
+		}
+
+		.date-time-container {
+			position: fixed;
+			height: 50%;
+			bottom: 0;
+			right: 0;
+			left: 0;
+			background-color: #f6f6f6;
+			z-index: 1000;
+			display: flex;
+			flex-direction: column;
+
+			.time-picker-tool {
+				height: 100rpx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				font-size: 28rpx;
+
+				.cancel-btn {
+					padding: 0 28rpx;
+					box-sizing: border-box;
+					color: #969799;
+				}
+
+				.tool-title {
+					font-weight: 500;
+					font-size: 16px;
+					max-width: 50%;
+					overflow: hidden;
+					white-space: nowrap;
+					text-overflow: ellipsis;
+				}
+
+				.confirm-btn {
+					padding: 0 28rpx;
+					box-sizing: border-box;
+					color: #E62129;
+				}
+			}
+
+			.picker-view {
+				width: 100%;
+				flex: 1;
+
+				.item {
+					font-size: 34rpx;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+				}
+			}
+		}
+	}
+</style>

+ 40 - 0
components/DateTimePicker/uitls/util.js

@@ -0,0 +1,40 @@
+/**
+ * 获取某年某月有多少天
+ */
+export const getOneMonthDays = (year,month)=>{
+	month = Number(month);
+	const baseMonthsDays = [31,28,31,30,31,30,31,31,30,31,30,31];
+	if(year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)){
+		if(month === 1){
+			baseMonthsDays[month] = 29;
+		}
+	}
+	return baseMonthsDays[month];
+}
+
+/**
+ * 获取日期的年月日时分秒
+ */
+export const getTimeArray = (date)=>{
+	const year = date.getFullYear();
+	const month = date.getMonth()+1;
+	const day = date.getDate();
+	const hour = date.getHours();
+	const minute = date.getMinutes();
+	const second = date.getSeconds();
+	return [year,month,day,hour,minute,second];
+}
+/**
+ * 小于10的数字前面补0
+ */
+export const addZero = (num)=>{
+	return num < 10 ? '0' + num : num;
+}
+
+/**
+ * 获取当前值在数组中的索引
+ */
+export const getIndexOfArray = (value,array)=>{
+	let index = array.findIndex(item => item == value);
+	return index > -1 ? index : 0;
+}

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

@@ -0,0 +1,395 @@
+# uni-app picker 选择器
+
+插件市场里面的 picker 选择器不满足自己的需求,所以自己写了一个简单的 picker 选择器,可扩展、可自定义,一般满足日常需要。  
+Github:[https://github.com/liub1934/uni-lb-picker](https://github.com/liub1934/uni-lb-picker)  
+插件市场:[https://ext.dcloud.net.cn/plugin?id=1111](https://ext.dcloud.net.cn/plugin?id=1111)
+
+## 兼容性
+
+H5 + 各平台小程序(百度除外)  
+安卓及 IOS 未测试(应该也能运行)
+已知问题:支付宝小程序单选可能会出现不对齐的现象
+
+## 功能
+
+1、单选  
+2、多级联动,非多级联动,理论支持任意级数  
+3、省市区选择,基于多级联动  
+4、自定义选择器头部确定取消按钮颜色及插槽支持  
+5、选择器可视区自定义滚动个数  
+6、自定义数据字段,满足不同人的需求  
+7、自定义选择器样式  
+8、单选及非联动选择支持扁平化的简单数据,如下形式:
+
+```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)
+```
+
+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`
+
+```text
+<lb-picker ref="picker"></lb-picker>
+
+this.$refs.picker.show() // 显示
+this.$refs.picker.hide() // 隐藏
+```
+
+## 绑定值及设置默认值
+
+支持 vue 中`v-model`写法绑定值,无需自己维护选中值的索引。
+
+```javascript
+<lb-picker v-model="value1"></lb-picker>
+<lb-picker v-model="value2"></lb-picker>
+
+data () {
+  return {
+    value1: '' // 单选
+    value2: [] // 多列联动选择
+  }
+}
+```
+
+## 多个选择器
+
+通过设置不同的`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>
+```
+
+其他插槽见下。
+
+## 参数及事件
+
+### Props
+
+| 参数                    | 说明                                                                                        | 类型                | 可选值                                                           | 默认值                                            |
+| :---------------------- | :------------------------------------------------------------------------------------------ | :------------------ | :--------------------------------------------------------------- | :------------------------------------------------ |
+| value/v-model           | 绑定值,联动选择为 Array 类型                                                               | String/Number/Array | -                                                                | -                                                 |
+| mode                    | 选择器类型,支持单列,多列联动                                                              | String              | selector 单选/multiSelector 多级联动/unlinkedSelector 多级非联动 | selector                                          |
+| list                    | 选择器数据(v1.0.7 单选及非联动多选支持扁平数据:['选项 1', '选项 2'])                       | Array               | -                                                                | -                                                 |
+| level                   | 多列联动层级,仅 mode 为 multiSelector 有效                                                 | Number              | -                                                                | 2                                                 |
+| props                   | 自定义数据字段                                                                              | Object              | -                                                                | {label:'label',value:'value',children:'children'} |
+| 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~~        | ~~选择器默认样式(已弃用,见下方自定义样式说明)~~                                            | Object              | -                                                                | -                                                 |
+| ~~active-column-style~~ | ~~选择器选中样式(已弃用,见下方自定义样式说明)~~                                            | Object              | -                                                                | -                                                 |
+| loading                 | 选择器是否显示加载中,可使用 loading 插槽自定义加载效果                                     | Boolean             | -                                                                | -                                                 |
+| mask-color              | 遮罩层颜色                                                                                  | String              | -                                                                | rgba(0, 0, 0, 0.4)                                |
+| close-on-click-mask     | 点击遮罩层是否关闭选择器                                                                    | Boolean             | true/false                                                       | true                                              |
+| ~~change-on-init~~      | ~~(v1.0.7 已弃用)初始化时是否触发 change 事件~~                                             | Boolean             | true/false                                                       | -                                                 |
+| dataset                 | (v1.0.7 新增)可以向组件中传递任意的自定义的数据,在`confirm`或`change`事件中可以取到        | Object              | -                                                                | -                                                 |
+| show-header             | (v1.0.8 新增)是否显示选择器头部                                                             | Boolean             | -                                                                | - true                                            |
+| inline                  | (v1.0.8 新增)inline 模式,开启后默认显示选择器,无需点击弹出,可以配合`show-header`一起使用 | Boolean             | -                                                                | -                                                 |
+
+### 方法
+
+| 方法名 | 说明       | 参数 |
+| :----- | :--------- | :--- |
+| show   | 打开选择器 | -    |
+| hide   | 关闭选择器 | -    |
+
+### 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`的时候按需处理自己的业务逻辑,比如一种常见的情况,有默认值的时候需要显示默认值的文字,此时可以`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         | 选择器 空数据 插槽  |
+
+### 选择器自定义样式
+
+原先的`column-style`和`active-column-style`已弃用,如需修改默认样式及选中样式参考`demo9`
+
+```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>
+```
+
+### 获取选中值的文字
+
+`@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 代码。

+ 256 - 0
components/lb-picker/index.vue

@@ -0,0 +1,256 @@
+<template>
+  <view :class="['lb-picker', inline ? 'lb-picker-inline' : '']">
+    <view class="lb-picker-mask"
+      v-show="visible && !inline"
+      :style="{ 'background-color': maskColor }"
+      @tap.stop="handleMaskTap"
+      @touchmove.stop.prevent="moveHandle">
+    </view>
+    <view :class="['lb-picker-container', visible ? 'lb-picker-toggle' : '']"
+      :style="{ borderRadius: `${radius} ${radius} 0 0` }">
+      <view v-if="showHeader"
+        class="lb-picker-header"
+        :style="{
+          height: pickerHeaderHeight,
+          'line-height': pickerHeaderHeight
+        }">
+        <view class="lb-picker-action lb-picker-left">
+          <view class="lb-picker-action-cancel"
+            @tap.stop="handleCancel">
+            <slot v-if="$slots['cancel-text']"
+              name="cancel-text"> </slot>
+            <view v-else
+              class="action-cancel-text"
+              :style="{ color: cancelColor }">
+              {{ cancelText }}
+            </view>
+          </view>
+        </view>
+
+        <view class="lb-picker-action lb-picker-center"
+          v-if="$slots['action-center']">
+          <slot name="action-center"></slot>
+        </view>
+
+        <view class="lb-picker-action lb-picker-right">
+          <view class="lb-picker-action-confirm"
+            @tap.stop="handleConfirm">
+            <slot v-if="$slots['confirm-text']"
+              name="confirm-text"> </slot>
+            <view v-else
+              class="action-confirm-text"
+              :style="{ color: confirmColor }">
+              {{ confirmText }}
+            </view>
+          </view>
+        </view>
+      </view>
+      <view class="lb-picker-content"
+        :style="{ height: pickerContentHeight }">
+        <!-- loading -->
+        <view v-if="loading"
+          class="lb-picker-loading">
+          <slot name="loading">
+            <view class="lb-picker-loading-img"></view>
+          </slot>
+        </view>
+
+        <!-- 暂无数据 -->
+        <view v-if="isEmpty && !loading"
+          class="lb-picker-empty">
+          <slot name="empty">
+            <text class="lb-picker-empty-text"
+              :style="{ color: emptyColor }">
+              {{ emptyText }}
+            </text>
+          </slot>
+        </view>
+
+        <!-- 单选 -->
+        <selector-picker v-if="mode === 'selector' && !loading && !isEmpty"
+          :value="22"
+          :list="list"
+          :props="pickerProps"
+          :height="pickerContentHeight"
+          :inline="inline"
+          @change="handleChange">
+        </selector-picker>
+
+        <!-- 多列联动 -->
+        <multi-selector-picker v-if="mode === 'multiSelector' && !loading && !isEmpty"
+          :value="value"
+          :list="list"
+          :level="level"
+          :visible="visible"
+          :props="pickerProps"
+          :height="pickerContentHeight"
+          :inline="inline"
+          @change="handleChange">
+        </multi-selector-picker>
+
+        <!-- 非联动选择 -->
+        <unlinked-selector-picker v-if="mode === 'unlinkedSelector' && !loading && !isEmpty"
+          :value="value"
+          :list="list"
+          :visible="visible"
+          :props="pickerProps"
+          :height="pickerContentHeight"
+          :inline="inline"
+          @change="handleChange">
+        </unlinked-selector-picker>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+const defaultProps = {
+  label: 'name',
+  value: 'id',
+  children: 'children'
+}
+import { getIndicatorHeight } from './utils'
+import SelectorPicker from './pickers/selector-picker'
+import MultiSelectorPicker from './pickers/multi-selector-picker'
+import UnlinkedSelectorPicker from './pickers/unlinked-selector-picker'
+const indicatorHeight = getIndicatorHeight()
+export default {
+  components: {
+    SelectorPicker,
+    MultiSelectorPicker,
+    UnlinkedSelectorPicker
+  },
+  props: {
+    value: [String, Number, Array],
+    list: Array,
+    mode: {
+      type: String,
+      default: 'selector'
+    },
+    level: {
+      type: Number,
+      default: 1
+    },
+    props: {
+      type: Object
+    },
+    cancelText: {
+      type: String,
+      default: '取消'
+    },
+    cancelColor: String,
+    confirmText: {
+      type: String,
+      default: '确定'
+    },
+    confirmColor: String,
+    canHide: {
+      type: Boolean,
+      default: true
+    },
+    emptyColor: String,
+    emptyText: {
+      type: String,
+      default: '暂无数据'
+    },
+    radius: String,
+    columnNum: {
+      type: Number,
+      default: 5
+    },
+    loading: Boolean,
+    closeOnClickMask: {
+      type: Boolean,
+      default: true
+    },
+    maskColor: {
+      type: String,
+      default: 'rgba(0, 0, 0, 0.4)'
+    },
+    dataset: Object,
+    inline: Boolean,
+    showHeader: {
+      type: Boolean,
+      default: true
+    }
+  },
+  data () {
+    return {
+      visible: false,
+      myValue: this.value,
+      picker: {},
+      pickerProps: Object.assign({}, defaultProps, this.props),
+      pickerHeaderHeight: indicatorHeight + 'px',
+      pickerContentHeight: indicatorHeight * this.columnNum + 'px'
+    }
+  },
+  computed: {
+    isEmpty () {
+      if (!this.list) return true
+      if (this.list && !this.list.length) return true
+      return false
+    }
+  },
+  methods: {
+    show () {
+      if (this.inline) return
+      this.visible = true
+    },
+    hide () {
+      if (this.inline) return
+      this.visible = false
+    },
+    handleCancel () {
+      this.$emit('cancel', this.picker)
+      if (this.canHide && !this.inline) {
+        this.hide()
+      }
+    },
+    handleConfirm () {
+      if (this.isEmpty) {
+        this.$emit('confirm', null)
+        this.hide()
+      } else {
+        const picker = JSON.parse(JSON.stringify(this.picker))
+        this.myValue = picker.value
+        this.$emit('confirm', this.picker)
+        if (this.canHide) this.hide()
+      }
+    },
+    handleChange ({ value, item, index, change }) {
+      this.picker.value = value
+      this.picker.item = item
+      this.picker.index = index
+      this.picker.change = change
+      this.picker.dataset = this.dataset || {}
+      this.$emit('change', this.picker)
+	  
+    },
+    handleMaskTap () {
+      if (this.closeOnClickMask) {
+        this.visible = false
+      }
+    },
+    moveHandle () {}
+  },
+  watch: {
+    value (newVal) {
+      this.myValue = newVal
+    },
+    myValue (newVal) {
+      this.$emit('input', newVal)
+    },
+    visible (newVisible) {
+      if (newVisible) {
+        this.$emit('show')
+      } else {
+        this.$emit('hide')
+      }
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "./style/picker.scss";
+</style>

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

@@ -0,0 +1,131 @@
+<template>
+  <view class="multi-selector 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">
+        <view v-for="(item, i) in column || []"
+          :class="[
+            'lb-picker-column',
+            item[props.value] === selectValue[index]
+              ? 'lb-picker-column-active'
+              : ''
+          ]"
+          :key="i"
+          :style="{ height: columnHeight, 'line-height': columnHeight }">
+          <view class="lb-picker-column-label">
+            {{ item[props.label] }}
+          </view>
+        </view>
+      </picker-view-column>
+    </picker-view>
+  </view>
+</template>
+
+<script>
+import { getIndicatorHeight } from '../utils.js'
+const indicatorHeight = getIndicatorHeight()
+export default {
+  props: {
+    value: Array,
+    list: Array,
+    props: Object,
+    level: Number,
+    visible: Boolean,
+    height: String
+  },
+  data () {
+    return {
+      pickerValue: [],
+      pickerColumns: [],
+      selectValue: [],
+      selectItem: [],
+      columnHeight: indicatorHeight + 'px',
+      indicatorStyle: `height: ${indicatorHeight}px`
+    }
+  },
+  created () {
+    this.init('init')
+  },
+  methods: {
+    init (changeType) {
+      this.setPickerItems(this.list)
+      this.$emit('change', {
+        value: 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]
+      )
+      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.pickerValue = pickerValue
+        this.selectItem[i] = this.pickerColumns[i][pickerValue[i]]
+        if (this.selectItem[i]) {
+          this.selectValue[i] = this.selectItem[i][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'
+      })
+    },
+    setPickerItems (list = [], index = 0) {
+      if (!list.length) return
+      const defaultValue = this.value || []
+      if (index < this.level) {
+        const value = defaultValue[index] || ''
+        let i = list.findIndex(item => item[this.props.value] === value)
+        i = i > -1 ? i : 0
+        this.$set(this.pickerValue, index, i)
+        this.$set(this.pickerColumns, index, list)
+        if (list[i]) {
+          this.$set(this.selectValue, index, list[i][this.props.value])
+          this.$set(this.selectItem, index, list[i])
+          this.setPickerItems(list[i][this.props.children] || [], index + 1)
+        }
+      }
+    }
+  },
+  watch: {
+    value (newVal) {
+      this.init('value')
+    },
+    list () {
+      this.init('list')
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "../style/picker-item.scss";
+</style>

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

@@ -0,0 +1,100 @@
+<template>
+  <view class="selector-picker picker-item"
+    :style="{ height: height }">
+    <picker-view :value="pickerValue"
+      :indicator-style="indicatorStyle"
+      :style="{ height: height }"
+      @change="handleChange">
+      <picker-view-column>
+        <view v-for="(item, i) in list"
+          :class="[
+            'lb-picker-column',
+            item[props.value] || item === selectValue
+              ? 'lb-picker-column-active'
+              : ''
+          ]"
+          :key="i"
+          :style="{ height: columnHeight, lineHeight: columnHeight }">
+          <view class="lb-picker-column-label">
+            {{ item[props.label] || item.cate_name }}
+          </view>
+        </view>
+      </picker-view-column>
+    </picker-view>
+  </view>
+</template>
+
+<script>
+import { getIndicatorHeight, isObject } from '../utils.js'
+const indicatorHeight = getIndicatorHeight()
+export default {
+  props: {
+    value: [String, Number],
+    list: Array,
+    props: Object,
+    visible: Boolean,
+    height: String
+  },
+  data () {
+    return {
+      pickerValue: [],
+      selectValue: '',
+      columnHeight: indicatorHeight + 'px',
+      indicatorStyle: `height: ${indicatorHeight}px`
+    }
+  },
+  created () {
+    this.init('init')
+  },
+  methods: {
+    init (changeType) {
+		console.log(this.list,"list")
+      if (this.list && this.list.length) {
+       let index = this.list.findIndex(item => {
+         return isObject(item)
+           ? item[this.props.value] === this.value
+           : item === this.value
+       })
+        index = index > -1 ? index : 0
+        const listItem = this.list[index]
+        this.pickerValue = [index]
+        this.selectValue = isObject(listItem)
+          ? listItem[this.props.value]
+          : listItem
+        this.$emit('change', {
+          value: this.selectValue,
+          item: listItem,
+          index: index,
+          change: changeType
+        })
+      }
+    },
+    handleChange (item) {
+      const index = item.detail.value[0] || 0
+      const listItem = this.list[index]
+      this.selectValue = isObject(listItem)
+        ? listItem[this.props.value]
+        : listItem
+      this.pickerValue = item.detail.value
+      this.$emit('change', {
+        value: this.selectValue,
+        item: listItem,
+        index: index,
+        change: 'scroll'
+      })
+    }
+  },
+  watch: {
+    list () {
+      this.init('list')
+    },
+    value (newVal) {
+      this.init('value')
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "../style/picker-item.scss";
+</style>

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

@@ -0,0 +1,120 @@
+<template>
+  <view class="selector-picker 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">
+        <view v-for="(item, i) in column"
+          :class="[
+            'lb-picker-column',
+            item[props.value] || item === selectValue[index]
+              ? 'lb-picker-column-active'
+              : ''
+          ]"
+          :key="i"
+          :style="{ height: columnHeight, 'line-height': columnHeight }">
+          <view class="lb-picker-column-label">
+            {{ item[props.label] || item }}
+          </view>
+        </view>
+      </picker-view-column>
+    </picker-view>
+  </view>
+</template>
+
+<script>
+import { getIndicatorHeight, isObject } from '../utils.js'
+const indicatorHeight = getIndicatorHeight()
+export default {
+  props: {
+    value: Array,
+    list: Array,
+    props: Object,
+    visible: Boolean,
+    height: String,
+    indicatorHeight: Number
+  },
+  data () {
+    return {
+      pickerValue: [],
+      pickerColumns: [],
+      selectValue: [],
+      selectItem: [],
+      columnHeight: indicatorHeight + 'px',
+      indicatorStyle: `height: ${indicatorHeight}px`
+    }
+  },
+  created () {
+    this.init('init')
+  },
+  methods: {
+    init (changeType) {
+      if (this.list && this.list.length) {
+        this.pickerColumns = this.list
+        this.setPickerValue()
+        this.$emit('change', {
+          value: this.selectValue,
+          item: this.selectItem,
+          index: this.pickerValue,
+          change: changeType
+        })
+      }
+    },
+    setPickerValue (value) {
+      this.list.forEach((item, i) => {
+        let index = item.findIndex(item => {
+          return isObject(item)
+            ? item[this.props.value] === this.value[i]
+            : item === this.value[i]
+        })
+        index = index > -1 ? index : 0
+        const columnItem = this.list[i][index]
+        const valueItem = isObject(columnItem)
+          ? columnItem[this.props.value]
+          : columnItem
+        this.$set(this.pickerValue, i, index)
+        this.$set(this.selectValue, i, valueItem)
+        this.$set(this.selectItem, i, columnItem)
+      })
+    },
+
+    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'
+        })
+      }
+    }
+  },
+  watch: {
+    list () {
+      this.init('list')
+    },
+    value (newVal) {
+      this.init('value')
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "../style/picker-item.scss";
+</style>

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

@@ -0,0 +1,27 @@
+.picker-item {
+	picker-view-column {
+		transition: all 0.3s;
+	}
+
+	.lb-picker-column-flex0 {
+		flex: 0;
+	}
+
+	.lb-picker-column-flex1 {
+		flex: 1;
+	}
+
+	.lb-picker-column {
+		padding: 0;
+		font-size: 36rpx;
+		text-align: center;
+		box-sizing: border-box;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+		overflow: hidden;
+
+		.lb-picker-column-label {
+			transition: all 0.3s;
+		}
+	}
+}

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 94 - 0
components/lb-picker/style/picker.scss


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

@@ -0,0 +1,7 @@
+export function isObject (val) {
+  return Object.prototype.toString.call(val) === '[object Object]'
+}
+
+export function getIndicatorHeight () {
+  return Math.round(uni.getSystemInfoSync().screenWidth / (750 / 100))
+}

+ 104 - 104
manifest.json

@@ -1,104 +1,104 @@
-{
-    "name" : "荆州市红十字会",
-    "appid" : "__UNI__C8A3AAB",
-    "description" : "",
-    "versionName" : "1.0.0",
-    "versionCode" : "100",
-    "transformPx" : false,
-    /* 5+App特有相关 */
-    "app-plus" : {
-        "usingComponents" : true,
-        "nvueCompiler" : "uni-app",
-        "compilerVersion" : 3,
-        "splashscreen" : {
-            "alwaysShowBeforeRender" : true,
-            "waiting" : true,
-            "autoclose" : true,
-            "delay" : 0
-        },
-        /* 模块配置 */
-        "modules" : {},
-        /* 应用发布信息 */
-        "distribute" : {
-            /* android打包配置 */
-            "android" : {
-                "permissions" : [
-                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
-                    "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
-                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
-                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
-                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
-                    "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
-                    "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
-                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
-                    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
-                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
-                    "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
-                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
-                    "<uses-feature android:name=\"android.hardware.camera\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
-                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
-                ]
-            },
-            /* ios打包配置 */
-            "ios" : {},
-            /* SDK配置 */
-            "sdkConfigs" : {
-                "maps" : {}
-            }
-        }
-    },
-    /* 快应用特有相关 */
-    "quickapp" : {},
-    /* 小程序特有相关 */
-    "mp-weixin" : {
-        "appid" : "",
-        "setting" : {
-            "urlCheck" : false
-        },
-        "usingComponents" : true,
-        "permission" : {}
-    },
-    "mp-alipay" : {
-        "usingComponents" : true
-    },
-    "mp-baidu" : {
-        "usingComponents" : true
-    },
-    "mp-toutiao" : {
-        "usingComponents" : true
-    },
-    "uniStatistics" : {
-        "enable" : false
-    },
-    "h5" : {
-        "title" : "荆州市红十字会",
-        "domain" : "jz.red.igxys.com",
-        "router" : {
-            "mode" : "hash",
-            "base" : "/index/"
-        },
-        "devServer" : {
-            "proxy" : {
-                "/api" : {
-                    "target" : "http://jz.red.igxys.com", //请求的目标域名
-                    "changeOrigin" : true,
-                    // "secure": false,
-                    "pathRewrite" : {}
-                }
-            }
-        },
-        // "^/api" : ""
-        "template" : "",
-        "sdkConfigs" : {
-            "maps" : {}
-        }
-    }
-}
+{
+    "name" : "洪湖市红十字会",
+    "appid" : "__UNI__2617F00",
+    "description" : "",
+    "versionName" : "1.0.0",
+    "versionCode" : "100",
+    "transformPx" : false,
+    /* 5+App特有相关 */
+    "app-plus" : {
+        "usingComponents" : true,
+        "nvueCompiler" : "uni-app",
+        "compilerVersion" : 3,
+        "splashscreen" : {
+            "alwaysShowBeforeRender" : true,
+            "waiting" : true,
+            "autoclose" : true,
+            "delay" : 0
+        },
+        /* 模块配置 */
+        "modules" : {},
+        /* 应用发布信息 */
+        "distribute" : {
+            /* android打包配置 */
+            "android" : {
+                "permissions" : [
+                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
+                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+                    "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
+                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+                    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+                    "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
+                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+                ]
+            },
+            /* ios打包配置 */
+            "ios" : {},
+            /* SDK配置 */
+            "sdkConfigs" : {
+                "maps" : {}
+            }
+        }
+    },
+    /* 快应用特有相关 */
+    "quickapp" : {},
+    /* 小程序特有相关 */
+    "mp-weixin" : {
+        "appid" : "",
+        "setting" : {
+            "urlCheck" : false
+        },
+        "usingComponents" : true,
+        "permission" : {}
+    },
+    "mp-alipay" : {
+        "usingComponents" : true
+    },
+    "mp-baidu" : {
+        "usingComponents" : true
+    },
+    "mp-toutiao" : {
+        "usingComponents" : true
+    },
+    "uniStatistics" : {
+        "enable" : false
+    },
+    "h5" : {
+        "title" : "洪湖市红十字会",
+        "domain" : "jz.red.igxys.com",
+        "router" : {
+            "mode" : "hash",
+            "base" : "/index/"
+        },
+        "devServer" : {
+            "proxy" : {
+                "/api" : {
+                    "target" : "http://jz.red.igxys.com", //请求的目标域名
+                    "changeOrigin" : true,
+                    // "secure": false,
+                    "pathRewrite" : {}
+                }
+            }
+        },
+        // "^/api" : ""
+        "template" : "",
+        "sdkConfigs" : {
+            "maps" : {}
+        }
+    }
+}

+ 93 - 5
pages.json

@@ -17,7 +17,7 @@
 					"titleNView": false
 					"titleNView": false
 				},
 				},
 				// #endif
 				// #endif
-				"navigationBarTitleText": "荆州市红十字会"
+				"navigationBarTitleText": "洪湖市红十字会"
 
 
 			}
 			}
 		},
 		},
@@ -44,7 +44,7 @@
 				// #endif
 				// #endif
 				"navigationBarBackgroundColor": "#457DBF",
 				"navigationBarBackgroundColor": "#457DBF",
 				"navigationBarTextStyle": "white",
 				"navigationBarTextStyle": "white",
-				"navigationBarTitleText": "荆州市红十字会安心捐赠"
+				"navigationBarTitleText": "洪湖市红十字会安心捐赠"
 			}
 			}
 		},
 		},
 		{
 		{
@@ -57,7 +57,7 @@
 				// #endif
 				// #endif
 				"navigationBarBackgroundColor": "#457DBF",
 				"navigationBarBackgroundColor": "#457DBF",
 				"navigationBarTextStyle": "white",
 				"navigationBarTextStyle": "white",
-				"navigationBarTitleText": "荆州市红十字会安心捐赠"
+				"navigationBarTitleText": "洪湖市红十字会安心捐赠"
 			}
 			}
 		},
 		},
 		// donaSuccess
 		// donaSuccess
@@ -137,7 +137,7 @@
 				// #endif
 				// #endif
 				"navigationBarBackgroundColor": "#457DBF",
 				"navigationBarBackgroundColor": "#457DBF",
 				"navigationBarTextStyle": "white",
 				"navigationBarTextStyle": "white",
-				"navigationBarTitleText": "荆州市红十字会安心捐赠"
+				"navigationBarTitleText": "洪湖市红十字会安心捐赠"
 			}
 			}
 		},
 		},
 		// teamSign  perSign  donateLove  donateList myDonate
 		// teamSign  perSign  donateLove  donateList myDonate
@@ -188,7 +188,7 @@
 					"titleNView": false
 					"titleNView": false
 				},
 				},
 				// #endif
 				// #endif
-				"navigationBarTitleText": "荆州市红十字会"
+				"navigationBarTitleText": "洪湖市红十字会"
 			}
 			}
 		},
 		},
 		{
 		{
@@ -844,6 +844,88 @@
 				"navigationBarTitleText": "详情进展"
 				"navigationBarTitleText": "详情进展"
 			
 			
 			}
 			}
+		},
+		{
+			"path": "pages/fu/fuInfo",
+			"style": {
+				"navigationBarTitleText": "帮扶详情",
+				"navigationBarBackgroundColor": "#FF727E",
+				"navigationBarTextStyle":"white"
+			}
+		},
+		{
+			"path": "pages/fu/axjz",
+			"style": {
+				"navigationBarTitleText": "爱心帮扶",
+				"navigationBarBackgroundColor": "#FF727E",
+				"navigationBarTextStyle":"white",
+				"app-plus": {
+					"titleNView": {
+						"buttons": [ {
+							"color": "#FFFFFF",
+							"fontSize": "16px",
+							"colorPressed": "#fc5c82",
+							"float": "right",
+							"text": "筛选 "
+						}]
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/fu/upLoadInfo",
+			"style": {
+				"navigationBarTitleText": "上传资料"
+			}
+		},
+		{
+			"path": "pages/applyHelp/index",	// 基本信息
+			"style": {
+				"navigationBarTitleText": "申请帮扶",
+				"navigationBarBackgroundColor": "#FF727E",
+				"navigationBarTextStyle":"white"
+			}
+		},
+		{
+			"path": "pages/applyHelp/second",	// 信息选择
+			"style": {
+				"navigationBarTitleText": "申请帮扶",
+				"navigationBarBackgroundColor": "#FF727E",
+				"navigationBarTextStyle":"white"
+			}
+		},
+		{
+			"path": "pages/applyHelp/third",	// 家庭成员情况
+			"style": {
+				"navigationBarTitleText": "申请帮扶",
+				"navigationBarBackgroundColor": "#FF727E",
+				"navigationBarTextStyle":"white"
+			}
+		},
+		
+		{
+			"path": "pages/applyHelp/fourth",	// 详细情况
+			"style": {
+				"navigationBarTitleText": "申请帮扶",
+				"navigationBarBackgroundColor": "#FF727E",
+				"navigationBarTextStyle":"white"
+			}
+		},
+		{
+			"path": "pages/applyHelp/cation",	// 帮扶入口
+			"style": {
+				"navigationBarTitleText": "申请帮扶",
+				"navigationBarBackgroundColor": "#FF727E",
+				"navigationBarTextStyle":"white"
+			}
+		},
+		{
+			"path": "pages/user/myFu",
+			"style": {
+				"navigationBarTitleText": "我的帮扶",
+				"navigationBarBackgroundColor": "#FF727E",
+				"navigationBarTextStyle":"white"
+			}
 		}
 		}
 	],
 	],
 	"globalStyle": {
 	"globalStyle": {
@@ -870,6 +952,12 @@
 				"selectedIconPath": "static/tabBar/dengji-action.png",
 				"selectedIconPath": "static/tabBar/dengji-action.png",
 				"text": "救护员登记"
 				"text": "救护员登记"
 			},
 			},
+			{
+				"pagePath": "pages/fu/axjz",
+				"iconPath": "static/tabBar/tab-fu.png",
+				"selectedIconPath": "static/tabBar/tab-fu-current.png",
+				"text": "爱心帮扶"
+			},
 			{
 			{
 				"pagePath": "pages/cart/cart",
 				"pagePath": "pages/cart/cart",
 				"iconPath": "static/tabBar/zuce.png",
 				"iconPath": "static/tabBar/zuce.png",

+ 2 - 2
pages/applic/donaSuccess.vue

@@ -22,7 +22,7 @@
 			</view>
 			</view>
 			<view class="main">
 			<view class="main">
 				<view class="box-2">
 				<view class="box-2">
-					感谢您积极参与井荆州市红十字会志愿服务各项活动,关爱他人、无私付出,为有需要的人送去温暖,用实际行动诠释了“人道、博爱、奉献”的红十字精神。
+					感谢您积极参与洪湖市红十字会志愿服务各项活动,关爱他人、无私付出,为有需要的人送去温暖,用实际行动诠释了“人道、博爱、奉献”的红十字精神。
 				</view>
 				</view>
 				<view class="box-2">
 				<view class="box-2">
 					祝您及您的家人新年吉祥!身体健康!万事顺意!
 					祝您及您的家人新年吉祥!身体健康!万事顺意!
@@ -36,7 +36,7 @@
 					谨表谢意
 					谨表谢意
 				</view>
 				</view>
 				<view class="box-1">
 				<view class="box-1">
-					荆州市红十字会
+					洪湖市红十字会
 				</view>
 				</view>
 			</view>
 			</view>
 		</view>
 		</view>

+ 7 - 7
pages/applic/other.vue

@@ -3,7 +3,7 @@
 		<view class="top flex">
 		<view class="top flex">
 			<image src="../../static/img/002.png" mode="aspectFill"></image>
 			<image src="../../static/img/002.png" mode="aspectFill"></image>
 			<view class="font">
 			<view class="font">
-				<view class="china-font">荆州市红十字会</view>
+				<view class="china-font">洪湖市红十字会</view>
 				<view class="english-font">Red Cross Society of China Ying Shan Branch</view>
 				<view class="english-font">Red Cross Society of China Ying Shan Branch</view>
 			</view>
 			</view>
 		</view>
 		</view>
@@ -40,9 +40,9 @@
 
 
 			<view class="title">3.现场捐款/捐物</view>
 			<view class="title">3.现场捐款/捐物</view>
 			<view class="detail">
 			<view class="detail">
-				<view class="detail-item">负责人:高楠清</view>
-				<view class="detail-item">咨询电话:0716-4163849</view>
-				<view class="detail-item">地址:荆州市荆州区荆东路18号</view>
+				<view class="detail-item">负责人:**********</view>
+				<view class="detail-item">咨询电话:***********</view>
+				<view class="detail-item">地址:**************</view>
 			</view>
 			</view>
 		</view>
 		</view>
 	</view>
 	</view>
@@ -57,9 +57,9 @@ export default {
 				{
 				{
 					id: 0,
 					id: 0,
 					spread_url: 11,
 					spread_url: 11,
-					name: '荆州市红十字会',
-					count: '中国银行荆州分行营业部',
-					number: '566457531072'
+					name: '洪湖市红十字会',
+					count: '**********',
+					number: '************'
 				}
 				}
 			]
 			]
 		};
 		};

+ 2 - 2
pages/applic/toknowledge.vue

@@ -44,7 +44,7 @@
 					<view class="name">怎样成为造血干细胞志愿捐献者??</view>
 					<view class="name">怎样成为造血干细胞志愿捐献者??</view>
 				</view>
 				</view>
 				<view class="list-tpl">
 				<view class="list-tpl">
-					您可与荆州市红十字会联系,或在余姚市爱心献血屋(阳明西路桐江桥街心公园内)报名。到指定地点抽取6-8毫升血液,经HLA分型检验,把相关资料录入到中华骨髓库的数据库中,这样您就成为造血干细胞志愿捐献者了。
+					您可与洪湖市红十字会联系,或在余姚市爱心献血屋(阳明西路桐江桥街心公园内)报名。到指定地点抽取6-8毫升血液,经HLA分型检验,把相关资料录入到中华骨髓库的数据库中,这样您就成为造血干细胞志愿捐献者了。
 				</view>
 				</view>
 			</view>
 			</view>
 			<view class="list-item">
 			<view class="list-item">
@@ -99,7 +99,7 @@
 				<text style="color: #C53335; text-align: center;" >江夏区造血干细胞捐献咨询电话:</text>
 				<text style="color: #C53335; text-align: center;" >江夏区造血干细胞捐献咨询电话:</text>
 			</view> -->
 			</view> -->
 			<view class="list-tips" style="color: #C53335;text-align: center;">
 			<view class="list-tips" style="color: #C53335;text-align: center;">
-				荆州市造血干细胞捐献咨询电话:
+				洪湖市造血干细胞捐献咨询电话:
 			</view>
 			</view>
 			<view class="list-tips" style="text-align: center;">
 			<view class="list-tips" style="text-align: center;">
 				0716-4163849
 				0716-4163849

+ 288 - 0
pages/applyHelp/cation.vue

@@ -0,0 +1,288 @@
+<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>
+		<!-- <scroll-view class="scroll-list" scroll-x>
+			<view class="scoll-box" v-for="ls in cationList" :class="{ active: ls.id === currentId }" @click="tabtap(ls.id)">
+				<view class="scoll-name">{{ ls.cate_name }}</view>
+			</view>
+		</scroll-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 class="list">
+						<view class="list-item" v-for="ls in tabItem.orderList"> <!-- @click="ToIndex(ls)" -->
+							<view class="item-top">
+								<view class="tip-info flex-shrink-false" v-if="ls.cname">{{ls.cname}}</view>
+								<view class="name clamp flex-grow-true">{{ls.explain}}</view>
+							</view>
+							<view class="title">申请人:{{ls.name}}</view>
+							<view class="title">状态:{{ls.status == 0 ? '正在审核' : ls.status == 1 ? '审核通过' :'审核驳回' }} {{ ls.status == 2 ? ls.fail_msg : ''}}</view>
+						</view>
+					</view>
+					
+					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+		
+		<view class="tip" @click="ToHelp"><text>申请帮扶</text></view>
+	</view>
+</template>
+<script>
+import { getList,gethelp } from '@/api/applyHelp.js';
+import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+import empty from '@/components/empty';
+export default {
+	components: {
+		empty
+	},
+	data() {
+		return {
+			tabCurrentIndex: 0,
+			navList: [
+				{
+					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 //每次信息条数
+				},
+			],
+			cationList:[],
+			currentId:0,
+			hpleList:''
+		};
+	},
+	onLoad() {
+		this.loadData()
+	},
+	methods: {
+		//swiper 切换
+		changeTab(e) {
+			this.tabCurrentIndex = e.target.current;
+			this.loadData('tabChange');
+		},
+		//顶部tab点击
+		tabClick(index) {
+			this.tabCurrentIndex = index;
+		},
+		// 载入数据
+		loadData(source){
+			let obj = this;
+			let index = this.tabCurrentIndex;
+			let navItem = this.navList[index];
+			let state = navItem.state;
+			if (source === 'tabChange' && navItem.loaded === true) {
+				//tab切换只有第一次需要加载数据
+				return;
+			}
+			if (navItem.loadingType === 'noMore') {
+				//防止重复加载
+				return;
+			}
+			// 修改当前对象状态为加载中
+			navItem.loadingType = 'loading';
+			gethelp({
+				page: navItem.page,
+				limit:navItem.limit,
+				type: state,
+			})
+				.then(({ data }) => {
+					navItem.orderList = navItem.orderList.concat(data);
+					console.log(navItem.orderList);
+					navItem.page++;
+					if (navItem.limit == data.length) {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						navItem.loadingType = 'more';
+						return;
+					} else {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						navItem.loadingType = 'noMore';
+					}
+					this.$set(navItem, 'loaded', true);
+				})
+				.catch(err => {
+					console.log(err);
+				});
+		},
+		ToIndex(ls){
+			let id = ls.id;
+			if(ls.status == 0 || ls.status == 2){
+				uni.navigateTo({
+					url:'/pages/applyHelp/index?id='+id
+				})
+			}
+			if(ls.status == 1){
+				uni.navigateTo({
+					url:'/pages/applyHelp/index?id='+id+'&status=2'
+				})
+			}
+		},
+		ToHelp(){
+			uni.navigateTo({
+				url:'/pages/applyHelp/index'
+			})
+		},
+		//一级分类点击
+		tabtap(item) {
+			let obj = this;
+			obj.currentId = item;
+			this.GetHple()
+		},
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: $page-color-base;
+	height: 100%;
+	padding-bottom: 200rpx;
+	.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%;
+		font-size: 15px;
+		color: $font-color-dark;
+		position: relative;
+		&.current {
+			color: $motif-color;
+			&:after {
+				content: '';
+				position: absolute;
+				left: 50%;
+				bottom: 0;
+				transform: translateX(-50%);
+				width: 44px;
+				height: 0;
+				border-bottom: 2px solid $motif-color;
+			}
+		}
+	}
+}
+.swiper-box {
+	height: calc(100% - 40px);
+	padding: 0 20rpx;
+}
+.list-scroll-content {
+	height: 100%;
+}
+
+.tip{
+	width: 100%;
+	color: #FFFFFF;
+	padding: 30rpx 25rpx;
+	position: fixed;
+	background-color: #FF727E;
+	bottom: 5%;
+	width: 80%;
+	left: 10%;
+	text-align: center;
+	border-radius:100rpx;
+	box-shadow:0px 5px 16px 0px rgba(230,33,41,0.22);
+}
+.scroll-list {
+		width: 100%;
+		overflow: hidden;
+		white-space: nowrap;
+		background-color: #FFFFFF;
+		font-size: 32rpx;
+		.scoll-box {
+			text-align: center;
+			display: inline-block;
+			margin: 0rpx 38rpx;
+			padding: 15rpx 0rpx;
+			.scoll-img {
+				width: 130rpx;
+				height: 85rpx;
+				border-radius: 100%;
+				image {
+					width: 85rpx;
+					height: 100%;
+					border-radius: 100%;
+				}
+			}
+			.scoll-name {
+				padding-top: 15rpx;
+			}
+			&.active {
+				color: #FF727E;
+				border-bottom:6rpx solid #FF727E;
+			}
+		}
+	}
+	.list{
+		width: 100%;
+		padding: 25rpx 25rpx;
+		.list-item{
+			width: 100%;
+			padding: 30rpx 28rpx;
+			background-color: #FFFFFF;
+			border-radius: 25rpx;
+			margin-bottom: 25rpx;
+			.item-top{
+				display: flex;
+				align-items: center;
+				.tip-info{
+					background-color: #FF727E;
+					color: #FFFFFF;
+					border-radius: 10rpx;
+					font-size: 28rpx;
+					padding: 8rpx 15rpx;
+					margin-right: 15rpx;
+				}
+				.name{
+					font-size:36rpx;
+					font-weight:500;
+					color:rgba(34,34,34,1);
+					overflow: hidden;
+					text-overflow: ellipsis;
+					white-space: nowrap;
+				}
+			}
+			.title{
+				font-weight:400;
+				padding-top: 25rpx;
+				font-size:28rpx;
+				color:rgba(34,34,34,1);
+			}
+		}
+	}
+</style>

+ 493 - 0
pages/applyHelp/fourth.vue

@@ -0,0 +1,493 @@
+     <template>
+	<view class="content">
+		<!-- <view class="tip">孝心缝帮扶:仅限服装行业从业者申请哦~</view> -->
+		<view class="flex til-list"  v-if="status == ''">
+			<view class="" @click="navTo('/pages/applyHelp/index?id='+id)">基本信息</view>
+			<view class="" @click="navTo('/pages/applyHelp/second?id='+id)">信息选择</view>
+			<view class="" @click="navTo('/pages/applyHelp/third?id='+id)">家庭成员情况</view>
+			<view class="red">详细情况</view>
+		</view>
+		<view class="flex til-list"  v-if="status == 2">
+			<view class="" @click="navTo('/pages/applyHelp/index?id='+id+'&status=2')">基本信息</view>
+			<view class="" @click="navTo('/pages/applyHelp/second?id='+id+'&status=2')">信息选择</view>
+			<view class="" @click="navTo('/pages/applyHelp/third?id='+id+'&status=2')">家庭成员情况</view>
+			<view class="red">详细情况</view>
+		</view>
+		<view class="item-list">
+			<view class="list-name">经济状况</view>
+		</view>
+		<view class="content_box">
+			<view class="row b-b">
+				<text class="tit">本人月收入(元)</text>
+				<input class="input" type="number" v-model="yue" :disabled="disabled"  placeholder="请填写本人月收入(元)" placeholder-class="placeholder" />
+			</view>
+			<view class="row b-b">
+				<text class="tit">家庭年度总收入(元)</text>
+				<input class="input" type="number" v-model="nian" :disabled="disabled"  placeholder="请填写家庭年度总收入(元)" placeholder-class="placeholder" />
+			</view>
+			<view class="row b-b">
+				<text class="tit">家庭年人均收入(元)</text>
+				<input class="input" type="number" v-model="all" :disabled="disabled" placeholder="请填写家庭年人均收入(元)" placeholder-class="placeholder" />
+			</view>
+		</view>
+		<view class="content_box">
+			<view class="examine_list"> 
+				<view class="examine_name">申请帮扶类型</view>
+				<view class="textarea-box"  @tap="handleTap('picker')" v-if="status == ''">
+					<input class="input" @focus='outFocus'  v-model="hpleType" type="text"  placeholder="请选择您的申请帮扶类型" placeholder-class="placeholder" />
+				</view>
+				<view class="textarea-box" v-if="status == 2">
+					<input class="input" @focus='outFocus'  v-model="hpleType" type="text"  placeholder="请选择您的申请帮扶类型" placeholder-class="placeholder" />
+				</view>
+			</view>
+		</view>
+		<lb-picker ref="picker"
+		  mode="selector"
+		  :list="list"
+		  @change="handleChange"
+		  @touchmove.prevent 
+		  @confirm="handleConfirm"
+		  @cancel="handleCancel">
+		</lb-picker>
+		<view class="content_box">
+			<view class="examine_list"> 
+				<view class="examine_name">帮扶说明</view>
+				<view class="textarea-box">
+					<textarea  class="textarea" :disabled="disabled" v-model="explain" maxlength="-1"  placeholder-style="color:#999999" placeholder="如:关爱父母敬老爱幼等" 
+					@blur="bindTextAreaBlur" auto-height />
+				</view>
+			</view>
+		</view>
+		<view class="content_box">
+			<view class="examine_list"> 
+				<view class="examine_name">帮扶情况描述</view>
+				<view class="textarea-box">
+					<textarea  class="textarea" :disabled="disabled" v-model="content" maxlength="-1"  placeholder-style="color:#999999" placeholder="注:1.为了更加详细了解您的困难情况,请您陈述材料完整详细不少于500字。2.请您附上相关证明材料,如医疗材料:入院病案首页、出入院记录、检查报告、医疗票据选取三种以
+上,其他证明材料。" 
+					@blur="bindTextAreaBlur1" auto-height />
+				</view>
+			</view>
+		</view>
+		<view class="content_box mar-b">
+			<view class="examine_list">
+				<view class="examine_name">上传凭证<text>(请您上传相关证明材料)</text></view>
+				<view class="examine_img">
+					<!-- <img-upload :imgArr="imgList" imgCount="6" ref="imgUpload"></img-upload> -->
+					<view class="add-img-box flex_item" v-if="status == ''">
+						<view class="add-img-item"  v-for="(item, index) in imgList" :key="index">
+							<image class="add-img" @click.stop="imgInfo(index)" :src="item.url" mode="aspectFill"></image>
+							<image class="add-img-del" @click.stop="delImg(index)" src="/static/img/delete.png"></image>
+						</view>
+						<view v-if='imgCount > 0' class="add-img-item" @click.stop="scImg()">
+							<image class="add-img" src="/static/img/add.png"></image>
+						</view>
+					</view>
+					<view class="add-img-box flex_item" v-if="status == 2">
+						<view class="add-img-item"  v-for="(item, index) in imgList" :key="index">
+							<image class="add-img" @click.stop="imgInfo(index)" :src="item.url" mode="aspectFill"></image>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="add-btn" v-if="status == ''" @click="confirm">提交</view>
+		<view class="add-btn"  v-if="status == 2" @click="Tosecond">下一步</view>
+	</view>
+</template>
+<script>
+import uniList from '@/components/uni-list/uni-list.vue';
+import uniListItem from '@/components/uni-list-item/uni-list-item.vue';
+import LbPicker from '@/components/lb-picker/index.vue';
+import { upload,add_four_help } from '@/api/index.js';
+import { getList,helpdetail } from '@/api/applyHelp.js';
+export default {
+	components: {
+		uniList,
+		uniListItem,
+		LbPicker,
+	},
+	data() {
+		return {
+			yue:'',
+			nian:'',
+			all:'',
+			cid:'',
+			hpleType:'',
+			explain:'',
+			content:'',//孝善情况
+			imgList: [],
+			cloudimgList: [],
+			imgCount:9,//最多支持6张上传,可以修改
+			id:'',
+			list:[],//筹款类型
+			
+			status:'',//审核通过
+			disabled:false,
+			
+		};
+	},
+	onUnload() {
+		uni.navigateTo({
+			url: '/pages/applyHelp/cation'
+		});
+	},
+	onLoad(option) {
+		if(option.id){
+			this.id = option.id;
+			this.helpDetail();
+		}
+		if(option.status){
+			this.status = option.status;
+			this.disabled = true;
+		}
+		this.loadData();//筹款类型
+	},
+	methods: {
+		outFocus(e){
+			console.log(event.target)
+			event.target.blur()
+		},
+		//筹款类型
+		async loadData() {
+			let obj = this;
+			getList({})
+				.then(({ data }) => {
+					obj.list =  data;
+				})
+			.catch(err => {
+				console.log(err);
+			});
+		},
+		//申请详情
+		helpDetail(){
+			let obj = this;
+			helpdetail({
+				id:obj.id
+			}).then(({ data }) => {
+				let imgArr = data.img_list;
+				obj.imgList = imgArr.map(item => ({
+				        url:item
+				}));
+				console.log(obj.imgList,'imgList')
+				obj.yue = data.mincome;
+				obj.nian = data.yincome;
+				obj.all = data.jincome;
+				obj.cid = data.cid;
+				obj.explain = data.explain;
+				obj.content = data.content;
+				obj.hpleType = data.cname;
+			})
+				.catch(err => {
+				console.log(err);
+			});
+		},
+		Tosecond(){
+			uni.navigateTo({
+				url:'/pages/applyHelp/cation'
+			})
+		},
+		//提交
+		confirm() {
+			let obj = this;
+			if(obj.yue == '' && obj.yue < 0){
+				this.$api.msg('请填写本人月收入(元)!');
+				return;
+			}
+			if(obj.nian == '' && obj.nian < 0){
+				this.$api.msg('请填写家庭年度总收入(元)!');
+				return;
+			}
+			if(obj.all == '' && obj.all < 0){
+				this.$api.msg('请填写家庭年人均收入(元)!');
+				return;
+			}
+			if(obj.cid == ''){
+				this.$api.msg('请选择筹款类型!');
+				return;
+			}
+			if(obj.explain == ''){
+				this.$api.msg('请填写求助说明!');
+				return;
+			}
+			if(obj.content == ''){
+				this.$api.msg('请填写孝善情况!');
+				return;
+			}
+			if (obj.imgList.length < 1) {
+				uni.showToast({
+					title: '上传凭证',
+					icon: 'none'
+				});
+				return;
+			}
+			for (let i = 0; i < obj.imgList.length; i++) {
+				obj.cloudimgList.push(obj.imgList[i].url);
+			}
+			let arr = obj.cloudimgList.join(';');
+			console.log(arr,'arr')
+			add_four_help({
+				id:obj.id,
+				mincome:obj.yue,
+				yincome:obj.nian,
+				jincome:obj.all,
+				cid:obj.cid,
+				explain:obj.explain,
+				content:obj.content,
+				img_list:arr,
+			}).then(function(e) {
+				obj.$api.msg(e.msg);
+				setTimeout(function(){
+					uni.navigateTo({
+						url:'/pages/applyHelp/cation'
+					})
+				}, 2000);
+			})
+			.catch(e => {
+				obj.$api.msg(e.message);
+			});
+		},
+		handleTap(name) {
+			this.$refs[name].show()
+		},
+		handleCancel(item) {
+		},
+		handleChange(item) {
+		},
+		handleConfirm(item) {
+			let obj = this;
+			obj.hpleType = item.item.cate_name;
+			obj.cid = item.item.id;
+		},
+		//多张上传图片
+		scImg() {
+			let obj = this;
+			upload({
+				file: ''
+			})
+				.then(e => {
+					obj.imgList = [...obj.imgList, ...e];
+					console.log(obj.imgList,'imgList')
+					obj.imgCount = 6 - obj.imgList.length;
+				})
+				.catch(e => {});
+		},
+		//点击图片显示大图
+		imgInfo(i) {
+			let tempList = [];
+			this.imgList.forEach(e => {
+				tempList.push(e.url);
+			});
+			//显示图片
+			uni.previewImage({
+				current: i,
+				loop: false,
+				urls: tempList,
+				indicator: 'default'
+			});
+		},
+		//删除图片
+		delImg(i) {
+			uni.showModal({
+				content: '确定删除这张吗',
+				success: res => {
+					if (res.confirm) {
+						this.imgList.splice(i, 1);
+						this.imgCount++;
+					} else if (res.cancel) {
+					}
+				}
+			});
+		},
+		//文本输入框
+		 bindTextAreaBlur: function (e) {
+			 this.explain = e.detail.value
+		},
+		bindTextAreaBlur1: function (e) {
+			 this.content = e.detail.value
+		},
+		navTo(url) {
+			uni.navigateTo({
+				url
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: $page-color-base;
+	min-height: 100%;
+}
+.content{
+	padding-bottom: 100rpx;
+}
+.tip{
+	color: #DE2412;
+	background-color: #FEE2E3;
+	font-size: 24rpx;
+	padding: 25rpx 35rpx;
+}
+.til-list{
+	padding: 35rpx 50rpx;
+	font-size: 28rpx;
+	color: #666666;
+	.red{
+		color: #E62129 !important;
+	}
+}
+.item-list{
+	padding: 25rpx 45rpx;
+	color:rgba(34,34,34,1);
+	font-weight:400;
+	font-size: 35rpx;
+	.list-name{
+		}
+	
+}
+.name{
+	padding: 0rpx 35rpx;
+	padding-bottom: 15rpx !important;
+	font-size: 36rpx;
+	font-weight:500;
+}
+.content_box {
+	background-color: #ffffff;
+	padding: 0rpx 25rpx;
+	margin: 25rpx auto;
+	.examine_list{
+		width: 100%;
+		.textarea-box{
+			width: 100%;
+			padding-bottom: 35rpx;
+			padding-left: 25rpx;
+			.textarea{
+				width: 100%;
+				font-size: 28rpx;
+				min-height: 150rpx;
+			}
+			input{
+				font-size: 28rpx;
+			}
+		}
+	}
+}
+.mar-b{
+	margin-bottom: 120rpx;
+}
+.row {
+	display: flex;
+	align-items: center;
+	// position: relative;
+	padding: 0 30rpx;
+	height: 110rpx;
+	background: #fff;
+	border-bottom: 1rpx solid #f8f6f6;
+
+	.tit {
+		flex-shrink: 0;
+		width: 300rpx;
+		font-size: 30rpx;
+		color: $font-color-dark;
+	}
+	.input {
+		flex: 1;
+		font-size: 30rpx;
+		color: $font-color-dark;
+		text-align: right;
+	}
+	.iconlocation {
+		font-size: 36rpx;
+		color: $font-color-light;
+	}
+}
+.examine_name {
+	color: #171717;
+	font-size: 28rpx;
+	padding: 25rpx 25rpx;
+}
+.examine_img {
+	width: 100%;
+	text-align: center;
+	.image{
+		width: 150rpx;
+		height: 150rpx;
+	}
+	.image1{
+		min-width: 150rpx;
+		max-width: 100%;
+		min-height: 150rpx;
+	}
+}
+.add-img-box {
+	width: 100%;
+	// flex-direction: row;
+	flex-wrap: wrap;
+	margin-top: 50rpx;
+}
+.add-img-item {
+	margin-bottom: 25rpx;
+	width: 33.33%;
+	position: relative;
+	.add-img {
+		padding: 0rpx 10rpx;
+		width: 100%;
+		height: 214rpx;
+	}
+}
+.add-img-del {
+	position: absolute;
+	width: 40rpx;
+	height: 40rpx;
+	right: 10rpx;
+	top: 0;
+	// bottom: 155rpx;
+	//background-color: rgba(238, 0, 0, 1);
+	border-radius: 20rpx;
+}
+.default-row {
+	margin-top: 16rpx;
+	.tit {
+		flex: 1;
+	}
+	switch {
+		transform: translateX(16rpx) scale(0.9);
+	}
+}
+.add-btn{
+	position: fixed;
+	bottom: 0rpx;
+	left: 0rpx;
+	width: 100%;
+	height: 100rpx;
+	font-size: 28rpx;
+	color: #FFFFFF;
+	background-color: #FF727E;
+	line-height: 100rpx;
+	text-align: center;
+}
+.img_box {
+	padding: 35rpx 35rpx;
+	width: 250rpx;
+	height: 250rpx;
+}
+.img_box image {
+	width: 100%;
+	height: 100%;
+}
+.alert-box {
+	background-color: #ffffff;
+}
+.b-b:after {
+	position: relative !important;
+}
+.check_box {
+	padding: 25rpx 25rpx;
+	font-size: 20rpx;
+	padding-bottom: 150rpx;
+	text{
+		color: #6786FB;
+	}
+}
+
+</style>

+ 557 - 0
pages/applyHelp/index.vue

@@ -0,0 +1,557 @@
+     <template>
+	<view class="cantent">
+		<!-- <view class="tip">孝心缝帮扶:仅限服装行业从业者申请哦~</view> -->
+		<view class="flex til-list" v-if="!id">
+			<view class="red">基本信息</view>
+			<view class="">信息选择</view>
+			<view class="">家庭成员情况</view>
+			<view class="">详细情况</view>
+		</view>
+		<view class="flex til-list" v-if="id && status == ''">
+			<view class="red">基本信息</view>
+			<view class="" @click="navTo('/pages/applyHelp/second?id='+id)">信息选择</view>
+			<view class="" @click="navTo('/pages/applyHelp/third?id='+id)">家庭成员情况</view>
+			<view class="" @click="navTo('/pages/applyHelp/fourth?id='+id)">详细情况</view>
+		</view>
+		<view class="flex til-list" v-if="id && status == 2">
+			<view class="red">基本信息</view>
+			<view class="" @click="navTo('/pages/applyHelp/second?id='+id +'&status=2')">信息选择</view>
+			<view class="" @click="navTo('/pages/applyHelp/third?id='+id+'&status=2')">家庭成员情况</view>
+			<view class="" @click="navTo('/pages/applyHelp/fourth?id='+id+'&status=2')">详细情况</view>
+		</view>
+		<view class="content_box">
+			<view class="row b-b">
+				<text class="tit">姓名</text>
+				<input class="input" type="text" :disabled="disabled" v-model="name" placeholder="请填写您的姓名" placeholder-class="placeholder" />
+			</view>
+			<view class="row b-b">
+				<text class="tit">年龄</text>
+				<input class="input" type="text" :disabled="disabled" v-model="age"  placeholder="请填写您的年龄" placeholder-class="placeholder" />
+			</view>
+			<view class="row b-b">
+				<text class="tit">性别</text>
+				<input class="input" type="text" :disabled="disabled" v-model="sex"  placeholder="请填写您的性别" placeholder-class="placeholder" />
+			</view>
+		</view>
+		<view class="content_box">
+			<view class="list-name">政治面貌</view>
+			<view class="uni-list">
+				<radio-group @change="radioChange">
+					<view class="radio-list flex_item">
+						<label class="uni-list-cell uni-list-cell-pd flex_item" v-for="(item, index) in outlook" :key="item.name">
+							<view><radio :disabled="disabled" style="transform:scale(0.7)" color='#FF727E' :value="item.name" :checked="index === current" /></view>
+							<view>{{item.name}}</view>
+						</label>
+					</view>
+				</radio-group>
+			</view>
+		</view>
+		<view class="content_box">
+			<view class="row" v-if="status == ''" @click="selectDatePicker(type)">
+				<text class="tit">出生日期:</text>
+				<input class="input" type="text"  v-model="birthday" disabled="true"  placeholder-class="placeholder" />
+				 <datetime ref='date-time' :type='type' :datestring='dateString' @change='dateTimeChange'></datetime>
+			</view>
+			<view class="row" v-if="status == 2">
+				<text class="tit">出生日期:</text>
+				<input class="input" type="text"  v-model="birthday" disabled="true"  placeholder-class="placeholder" />
+				 <datetime ref='date-time' :type='type' :datestring='dateString' @change='dateTimeChange'></datetime>
+			</view>
+			<view class="row b-b">
+				<text class="tit">身份证号</text>
+				<input class="input" type="number" :disabled="disabled"  v-model="card" placeholder="请填写身份证号" placeholder-class="placeholder" />
+			</view>
+			<view class="row b-b" v-if="status =='' ">
+				<text class="tit">省市区</text>
+				<pickerAddress class="input"  @change="onCityClick">{{address||'请选择省市区'}}</pickerAddress>
+			</view>
+			<view class="row b-b" v-if="status ==2 ">
+				<text class="tit">省市区</text>
+				<input class="input"  :disabled="disabled" v-model="address" placeholder="省市区" placeholder-class="placeholder" />
+			</view>
+			<view class="row b-b">
+				<text class="tit">详细地址</text>
+				<input class="input" v-model="addr" :disabled="disabled" placeholder="请填写详细地址" placeholder-class="placeholder" />
+			</view>
+			<view class="row b-b">
+				<text class="tit">联系电话</text>
+				<input class="input" type="text" :disabled="disabled" v-model="phone"  placeholder="请填写联系电话" placeholder-class="placeholder" />
+			</view>
+			<view class="row b-b">
+				<text class="tit">工作单位</text>
+				<input class="input" type="text"  :disabled="disabled" v-model="work"  placeholder="请填写工作单位" placeholder-class="placeholder" />
+			</view>
+		</view>
+		<view class="content_box" v-if="status == ''">
+			<view class="list-name">单位性质</view>
+			<view class="uni-list">
+				<radio-group @change="radioChange1">
+					<view class="radio-list flex_item">
+						<label class="uni-list-cell uni-list-cell-pd flex_item" v-for="(item, index) in nature" :key="item.name">
+							<view><radio :disabled="disabled" style="transform:scale(0.7)" color='#FF727E' :value="item.name" :checked="index === current1" /></view>
+							<view>{{item.name}}</view>
+						</label>
+					</view>
+				</radio-group>
+			</view>
+		</view>
+		<view class="add-btn" v-if="status == ''" @click="confirm">下一步</view>
+		<view class="add-btn"  v-if="status == 2" @click="Tosecond">下一步</view>
+	</view>
+</template>
+<script>
+import uniList from '@/components/uni-list/uni-list.vue';
+import uniListItem from '@/components/uni-list-item/uni-list-item.vue';
+import { upload,add_help } from '@/api/index.js';
+import { getList,helpdetail } from '@/api/applyHelp.js';
+import datetime from '@/components/DateTimePicker/DateTimePicker.vue'
+import  pickerAddress from '@/components/wangding-pickerAddress/wangding-pickerAddress.vue';
+export default {
+	components: {
+		uniList,
+		uniListItem,
+		pickerAddress,
+		datetime
+	},
+	data() {
+		return {
+			id:'',
+			name:'',//姓名
+			age:'',//年龄
+			sex:'',//性别
+			card:'',//身份证号
+			phone:'',//电话
+			address:'',//
+			addr:'',
+			work:'',//工作单位
+			outlook:[{
+				id:1,
+				name:'团员'
+			},{
+				id:2,
+				name:'预备党员'
+			},{
+				id:3,
+				name:'党员'
+			},{
+				id:4,
+				name:'群众'
+			}],//政治面貌
+			current:'',
+			checked:'',
+			
+			nature:[{
+				id:1,
+				name:'国有企业'
+			},{
+				id:2,
+				name:'私营企业'
+			},{
+				id:3,
+				name:'外资企业'
+			},{
+				id:4,
+				name:'事业单位'
+			},{
+				id:5,
+				name:'个位经营'
+			},{
+				id:6,
+				name:'无'
+			}],//单位性质
+			current1:'',
+			checked1:'',
+			
+			dateString: '',
+			birthday:'请选择出生日期',//出生日期
+			type: 'date',
+			
+			status:'',//审核通过
+			disabled:false,
+		};
+	},
+	onLoad(option) {
+		if(option.id){
+			this.id = option.id;
+			this.helpDetail();
+		}
+		if(option.status){
+			this.status = option.status;
+			this.disabled = true;
+		}
+	},
+	onUnload() {
+		uni.navigateTo({
+			url: '/pages/applyHelp/cation'
+		});
+	},
+	methods: {
+		radioChange(evt){
+			this.checked = evt.detail.value;
+		},
+		radioChange1(evt){
+			this.checked1 = evt.detail.value;
+		},
+		// 显示日期选择器
+		selectDatePicker(type, index) {
+			this.type = type;
+			this.index = index;
+			this.$refs['date-time'].show();
+		},
+		dateTimeChange(value) {
+			this.birthday = value;
+			console.log(value)
+		},
+		// 选中城市切换
+		onCityClick(res) {
+			let obj = this;
+			let province = res.data[0];
+			let city = res.data[1];
+			let district = res.data[2];
+			obj.address = province + city+ district;
+			console.log(obj.address, '城市');
+		},
+		//申请详情
+		helpDetail(){
+			let obj = this;
+			helpdetail({
+				id:obj.id
+			}).then(({ data }) => {
+				obj.name = data.name;
+				obj.sex = data.sex;
+				obj.card = data.card;
+				obj.phone = data.phone;
+				obj.work = data.work;
+				obj.birthday = data.birthday;
+				obj.age =  data.age;
+				console.log(data.address)
+				let addressDateil = data.address.split(',');
+				console.log(addressDateil)
+				obj.address = addressDateil[0];
+				obj.addr = addressDateil[1];
+				obj.checked = data.politic;
+				if(obj.checked == '团员'){
+					obj.current = 0;
+				}
+				if(obj.checked == '预备党员'){
+					obj.current = 1;
+				}
+				if(obj.checked == '党员'){
+					obj.current = 2;
+				}
+				if(obj.checked == '群众'){
+					obj.current = 3;
+				}
+				obj.checked1 = data.properties;
+				if(obj.checked1 == '国有企业'){
+					obj.current1 = 0;
+				}
+				if(obj.checked1 == '私营企业'){
+					obj.current1 = 1;
+				}
+				if(obj.checked1 == '外资企业'){
+					obj.current1 = 2;
+				}
+				if(obj.checked1 == '事业单位'){
+					obj.current1 = 3;
+				}
+				if(obj.checked1 == '个位经营'){
+					obj.current1 = 4;
+				}
+				if(obj.checked1 == '无'){
+					obj.current1 = 5;
+				}
+			})
+				.catch(err => {
+				console.log(err);
+			});
+		},
+		Tosecond(){
+			uni.navigateTo({
+				url:'/pages/applyHelp/second?id='+this.id+'&status=2'
+			})
+		},
+		//提交
+		confirm() {
+			let obj = this;
+			if(obj.name == ''){
+				this.$api.msg('请填写您的姓名!');
+				return;
+			}
+			if(obj.age == ''){
+				this.$api.msg('请填写您的年龄!');
+				return;
+			}
+			if(obj.sex == ''){
+				this.$api.msg('请填写您的性别!');
+				return;
+			}
+			if(obj.checked == ''){
+				this.$api.msg('请填写您的政治面貌!');
+				return;
+			}
+			if(obj.birthday == '' || obj.birthday == '请选择出生日期'){
+				this.$api.msg('请选择出生日期!');
+				return;
+			}
+			if(obj.card == ''){
+				this.$api.msg('请填写您的身份证号!');
+				return;
+			}
+			if(obj.address == ''){
+				this.$api.msg('请选择省市区!');
+				return;
+			}
+			if(obj.addr == ''){
+				this.$api.msg('请填写您的详细地址!');
+				return;
+			}
+			if(obj.phone == ''){
+				this.$api.msg('请填写您的联系电话!');
+				return;
+			}
+			if(obj.work == ''){
+				this.$api.msg('请填写您的工作单位!');
+				return;
+			}
+			if(obj.checked1 == ''){
+				this.$api.msg('请填写您的单位性质!');
+				return;
+			}
+			let data = {};
+			if(obj.id){
+				data = {
+					id:obj.id,
+					name:obj.name,
+					age:obj.age,
+					sex:obj.sex,
+					card:obj.card,
+					phone:obj.phone,
+					address:obj.address +','+ obj.addr,
+					work:obj.work,
+					politic:obj.checked,//政治面貌
+					birthday:obj.birthday,
+					properties:obj.checked1//单位性质
+				}
+			}else{
+				data = {
+					name:obj.name,
+					age:obj.age,
+					sex:obj.sex,
+					card:obj.card,
+					phone:obj.phone,
+					address:obj.address +','+ obj.addr,
+					work:obj.work,
+					politic:obj.checked,//政治面貌
+					birthday:obj.birthday,
+					properties:obj.checked1//单位性质
+				}
+			}
+			add_help(data).then(function(e) {
+				obj.$api.msg(e.msg);
+				let id = e.data.id;
+				console.log(id)
+				setTimeout(function(){
+					uni.navigateTo({
+						url:'/pages/applyHelp/second?id='+id
+					})
+				}, 1000);
+			})
+			.catch(e => {
+				obj.$api.msg(e.message);
+			});
+		},
+		navTo(url) {
+			uni.navigateTo({
+				url
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: $page-color-base;
+	min-height: 100%;
+}
+.cantent{
+	padding-bottom: 110rpx;
+}
+.tip{
+	color: #DE2412;
+	background-color: #FEE2E3;
+	font-size: 24rpx;
+	padding: 25rpx 35rpx;
+}
+.til-list{
+	padding: 35rpx 50rpx;
+	font-size: 28rpx;
+	color: #666666;
+	.red{
+		color: #E62129 !important;
+	}
+}
+.name{
+	padding: 0rpx 35rpx;
+	padding-bottom: 15rpx !important;
+	font-size: 36rpx;
+	font-weight:500;
+}
+.content_box {
+	background-color: #ffffff;
+	padding: 0rpx 25rpx;
+	.list-name{
+		padding-top: 25rpx;
+		font-size: 35rpx;
+		padding-left: 15rpx;
+		padding-bottom: 10rpx;
+	}
+	.examine_list{
+		width: 100%;
+		.textarea-box{
+			width: 100%;
+			padding-bottom: 25rpx;
+			padding-left: 25rpx;
+			.textarea{
+				width: 100%;
+				font-size: 28rpx;
+				min-height: 150rpx;
+			}
+			input{
+				font-size: 28rpx;
+			}
+		}
+	}
+}
+.radio-list{
+	display: flex;
+	flex-wrap: wrap;
+	font-size: 28rpx;
+	padding-top: 30rpx;
+	.uni-label-pointer{
+		padding-right: 25rpx;
+		padding-bottom: 30rpx;
+	}
+}
+.mar-b{
+	margin-bottom: 120rpx;
+}
+.row {
+	display: flex;
+	align-items: center;
+	// position: relative;
+	padding: 0 30rpx;
+	height: 110rpx;
+	background: #fff;
+	border-bottom: 1rpx solid #f8f6f6;
+
+	.tit {
+		flex-shrink: 0;
+		width: 180rpx;
+		font-size: 30rpx;
+		color: $font-color-dark;
+	}
+	.value{
+		width: 100%;
+		text-align: right;
+	}
+	.input {
+		flex: 1;
+		font-size: 30rpx;
+		color: $font-color-dark;
+		text-align: right;
+	}
+	.iconlocation {
+		font-size: 36rpx;
+		color: $font-color-light;
+	}
+}
+.examine_name {
+	color: #171717;
+	font-size: 28rpx;
+	padding: 25rpx 25rpx;
+}
+.examine_img {
+	width: 100%;
+	text-align: center;
+	.image{
+		width: 150rpx;
+		height: 150rpx;
+	}
+	.image1{
+		min-width: 150rpx;
+		max-width: 100%;
+		min-height: 150rpx;
+	}
+}
+.add-img-box {
+	width: 100%;
+	flex-direction: row;
+	flex-wrap: wrap;
+	margin-top: 50rpx;
+}
+.add-img-item {
+	margin-bottom: 25rpx;
+	width: 100%;
+	.add-img {
+		min-width: 150rpx;
+		max-width: 100%;
+		height: 400rpx;
+	}
+}
+.add-img-del {
+	position: absolute;
+	width: 40rpx;
+	height: 40rpx;
+	right: 60rpx;
+	// bottom: 155rpx;
+	//background-color: rgba(238, 0, 0, 1);
+	border-radius: 20rpx;
+}
+.default-row {
+	margin-top: 16rpx;
+	.tit {
+		flex: 1;
+	}
+	switch {
+		transform: translateX(16rpx) scale(0.9);
+	}
+}
+.add-btn{
+	position: fixed;
+	bottom: 0rpx;
+	left: 0rpx;
+	width: 100%;
+	height: 100rpx;
+	font-size: 28rpx;
+	color: #FFFFFF;
+	background-color: #FF727E;
+	line-height: 100rpx;
+	text-align: center;
+}
+.img_box {
+	padding: 35rpx 35rpx;
+	width: 250rpx;
+	height: 250rpx;
+}
+.img_box image {
+	width: 100%;
+	height: 100%;
+}
+.alert-box {
+	background-color: #ffffff;
+}
+.b-b:after {
+	position: relative !important;
+}
+.check_box {
+	padding: 25rpx 25rpx;
+	font-size: 20rpx;
+	padding-bottom: 150rpx;
+	text{
+		color: #6786FB;
+	}
+}
+
+</style>

+ 551 - 0
pages/applyHelp/second.vue

@@ -0,0 +1,551 @@
+     <template>
+	<view class="content">
+		<!-- <view class="tip">孝心缝帮扶:仅限服装行业从业者申请哦~</view> -->
+		<view class="flex til-list" v-if="status == ''">
+			<view class="" @click="navTo('/pages/applyHelp/index?id='+id)">基本信息</view>
+			<view class="red">信息选择</view>
+			<view class="" @click="navTo('/pages/applyHelp/third?id='+id)">家庭成员情况</view>
+			<view class="" @click="navTo('/pages/applyHelp/fourth?id='+id)">详细情况</view>
+		</view>
+		<view class="flex til-list" v-if="status == 2">
+			<view class="" @click="navTo('/pages/applyHelp/index?id='+id+'&status=2')">基本信息</view>
+			<view class="red">信息选择</view>
+			<view class="" @click="navTo('/pages/applyHelp/third?id='+id+'&status=2')">家庭成员情况</view>
+			<view class="" @click="navTo('/pages/applyHelp/fourth?id='+id+'&status=2')">详细情况</view>
+		</view>
+		<view class="content_box">
+			<view class="list-name">身份</view>
+			<view class="uni-list">
+				<radio-group @change="radioChange1">
+					<view class="radio-list flex_item">
+						<label class="uni-list-cell uni-list-cell-pd flex_item" v-for="(item, index) in identity" :key="item.name">
+							<view><radio  :disabled="disabled" style="transform:scale(0.7)" color='#FF727E' :value="item.name" :checked="index === current1" /></view>
+							<view>{{item.name}}</view>
+						</label>
+					</view>
+				</radio-group>
+			</view>
+		</view>
+		<view class="content_box">
+			<view class="list-name">婚姻状况</view>
+			<view class="uni-list">
+				<radio-group @change="radioChange2">
+					<view class="radio-list flex_item">
+						<label class="uni-list-cell uni-list-cell-pd flex_item" v-for="(item, index) in marital" :key="item.name">
+							<view><radio :disabled="disabled" style="transform:scale(0.7)" color='#FF727E' :value="item.name" :checked="index === current2" /></view>
+							<view>{{item.name}}</view>
+						</label>
+					</view>
+				</radio-group>
+			</view>
+		</view>
+		<view class="content_box">
+			<view class="list-name">是否医保</view>
+			<view class="uni-list">
+				<radio-group @change="radioChange3">
+					<view class="radio-list flex_item">
+						<label class="uni-list-cell uni-list-cell-pd flex_item" v-for="(item, index) in insurance" :key="item.name">
+							<view><radio  :disabled="disabled" style="transform:scale(0.7)" color='#FF727E' :value="item.name" :checked="index === current3" /></view>
+							<view>{{item.name}}</view>
+						</label>
+					</view>
+				</radio-group>
+			</view>
+		</view>
+		<view class="content_box">
+			<view class="list-name">对象特征</view>
+			<view class="uni-list">
+				<radio-group @change="radioChange4">
+					<view class="radio-list flex_item">
+						<label class="uni-list-cell uni-list-cell-pd flex_item" v-for="(item, index) in characteristics" :key="item.name">
+							<view><radio :disabled="disabled" style="transform:scale(0.7)" color='#FF727E' :value="item.name" :checked="index === current4" /></view>
+							<view>{{item.name}}</view>
+						</label>
+					</view>
+				</radio-group>
+			</view>
+		</view>
+		<view class="content_box">
+			<view class="list-name">致困原因(最多选三项)</view>
+			<view class="uni-list">
+				<checkbox-group @change="checkboxChange">
+					<view class="radio-list flex_item">
+						<label class="uni-list-cell uni-list-cell-pd flex_item" v-for="item in maleLike" :key="item.name">
+							<view>
+								<checkbox :disabled="disabled" :value="item.name" style="transform:scale(0.7)" color='#FF727E' :checked="item.checked" />
+							</view>
+							<view>{{item.name}}</view>
+						</label>
+					</view>
+				</checkbox-group>
+			</view>
+		</view>
+		<view class="add-btn" v-if="status == ''" @click="confirm">下一步</view>
+		<view class="add-btn"  v-if="status == 2" @click="Tosecond">下一步</view>
+	</view>
+</template>
+<script>
+import uniList from '@/components/uni-list/uni-list.vue';
+import uniListItem from '@/components/uni-list-item/uni-list-item.vue';
+import LbPicker from '@/components/lb-picker/index.vue'
+import { upload,add_two_help } from '@/api/index.js';
+import { getList,helpdetail } from '@/api/applyHelp.js';
+export default {
+	components: {
+		uniList,
+		uniListItem,
+		LbPicker
+	},
+	data() {
+		return {
+			identity:[{//身份
+				value: '1',
+				name: '居民'
+			},{
+				value: '2',
+				name: '村民'
+			},{
+				value: '3',
+				name: '农民工'
+			},{
+				value: '4',
+				name: '在岗'
+			},{
+				value: '5',
+				name: '下岗'
+			},{
+				value: '6',
+				name: '离退休'
+			},{
+				value: '7',
+				name: '病退病休'
+			}],
+			current1: '',
+			checked:'',
+			
+			marital:[{//婚姻状况
+				value: '1',
+				name: '已婚'
+			},{
+				value: '2',
+				name: '未婚'
+			},{
+				value: '3',
+				name: '离异'
+			},{
+				value: '4',
+				name: '丧偶'
+			}],
+			current2: '',
+			checked2:'',
+			
+			insurance:[{//医保
+				value: '1',
+				name: '是'
+			},{
+				value: '2',
+				name: '否'
+			}],
+			current3: '',
+			checked3:'',
+			
+			characteristics:[{//对象特征
+				value: '1',
+				name: '低保对象'
+			},{
+				value: '2',
+				name: '重度残疾'
+			},{
+				value: '3',
+				name: '低保边缘对象'
+			},{
+				value: '4',
+				name: '孤儿、孤寡老人'
+			},{
+				value: '5',
+				name: '因灾、因病致穷家庭'
+			},{
+				value: '6',
+				name: '其它'
+			}],
+			current4:'',
+			checked4:'',
+			
+			maleLike:[{//致困原因(最多选三项)
+				value: '1',
+				name: '意外灾害'
+			},{
+				value: '2',
+				name: '本人大病'
+			},{
+				value: '3',
+				name: '子女上学'
+			},{
+				value: '4',
+				name: '收入低无法维持基本生活'
+			},{
+				value: '5',
+				name: '残疾'
+			},{
+				value: '6',
+				name: '供养直系亲属大病'
+			},{
+				value: '7',
+				name: '下岗失业',
+			},{
+				value: '8',
+				name: '其它'
+			}],
+			currentArr: [], // 当前用户想要的选项,最大为5
+			hasPass: false, // 用户之前是否选择过,是为true
+			oldArr: [], // 上一次的返回值
+			
+			status:'',//审核通过
+			disabled:false,
+		};
+	},
+	onLoad(option) {
+		if(option.id){
+			this.id = option.id;
+			this.helpDetail();
+		}
+		if(option.status){
+			this.status = option.status;
+			this.disabled = true;
+		}
+	},
+	onUnload() {
+		uni.navigateTo({
+			url: '/pages/applyHelp/cation'
+		});
+	},
+	methods: {
+		//申请详情
+		helpDetail(){
+			let obj = this;
+			helpdetail({
+				id:obj.id
+			}).then(({ data }) => {
+				obj.id = data.id;
+				console.log(data)
+				if(data.capacity){
+					obj.checked = data.capacity;
+					obj.type = 2;
+					if(obj.checked == '居民'){
+						obj.current1 = 0;
+					}
+					if(obj.checked == '村民'){
+						obj.current1 = 1;
+					}
+					if(obj.checked == '农民工'){
+						obj.current1 = 2;
+					}
+					if(obj.checked == '在岗'){
+						obj.current1 = 3;
+					}
+					if(obj.checked == '下岗'){
+						obj.current1 = 4;
+					}
+					if(obj.checked == '离退休'){
+						obj.current1 = 5;
+					}
+					if(obj.checked == '病退病休'){
+						obj.current1 = 6;
+					}
+				}
+				if(data.matrimonial){
+					obj.checked2 = data.matrimonial;
+					if(obj.checked2 == '已婚'){
+						obj.current2 = 0;
+					}
+					if(obj.checked2 == '未婚'){
+						obj.current2 = 1;
+					}
+					if(obj.checked2 == '离异'){
+						obj.current2 = 2;
+					}
+					if(obj.checked2 == '丧偶'){
+						obj.current2 = 3;
+					}
+				}
+				if(data.medical){
+					obj.checked3 = data.medical;
+					if(obj.checked3 == '是'){
+						obj.current3 = 0;
+					}
+					if(obj.checked3 == '否'){
+						obj.current3 = 1;
+					}
+				}
+				if(data.aspect){
+					obj.checked4 = data.aspect;
+					if(obj.checked4 == '低保对象'){
+						obj.current4 = 0;
+					}
+					if(obj.checked4 == '重度残疾'){
+						obj.current4 = 1;
+					}
+					if(obj.checked4 == '低保边缘对象'){
+						obj.current4 = 2;
+					}
+					if(obj.checked4 == '孤儿、孤寡老人'){
+						obj.current4 = 3;
+					}
+					if(obj.checked4 == '因灾、因病致穷家庭'){
+						obj.current4 = 4;
+					}
+					if(obj.checked4 == '其它'){
+						obj.current4 = 5;
+					}
+					if(obj.checked4 == '病退病休'){
+						obj.current4 = 6;
+					}
+				}
+				if(data.poverty){
+					let poverty = data.poverty.split(",");
+					let values = poverty;
+					let items = obj.maleLike;
+					for (let i = 0, lenI = items.length; i < lenI; ++i) {
+						let item = items[i]
+						if(values.includes(item.name)){
+							obj.$set(item,'checked',true)
+						}else{
+							obj.$set(item,'checked',false)
+						}
+					}
+					obj.oldArr = values;
+				}
+			}).catch(err => {
+				console.log(err);
+			});
+		},
+		//提交
+		confirm() {
+			let obj = this;
+			if(obj.oldArr == ''){
+				this.$api.msg('请选择致困原因!');
+				return;
+			}
+			if(obj.oldArr.length > 3){
+				this.$api.msg('致困原因最多选三项!');
+				return;
+			}
+			add_two_help({
+				id:obj.id,
+				capacity:obj.checked,
+				matrimonial:obj.checked2,
+				medical:obj.checked3,
+				aspect:obj.checked4,
+				poverty:obj.oldArr.toString(),
+			}).then(function(e) {
+				obj.$api.msg(e.msg);
+				setTimeout(function(){
+					uni.navigateTo({
+						url:'/pages/applyHelp/third?id='+obj.id
+					})
+				}, 2000);
+			})
+			.catch(e => {
+				obj.$api.msg(e.message);
+			});
+		},
+		Tosecond(){
+			uni.navigateTo({
+				url:'/pages/applyHelp/third?id='+this.id+'&status=2'
+			})
+		},
+		radioChange1(evt){
+			this.checked = evt.detail.value;
+			console.log(this.checked)
+		},
+		radioChange2(evt){
+			this.checked2 = evt.detail.value;
+			console.log(this.checked2)
+		},
+		radioChange3(evt){
+			this.checked3 = evt.detail.value;
+			console.log(this.checked3)
+		},
+		radioChange4(evt){
+			this.checked4 = evt.detail.value;
+			console.log(this.checked4)
+		},
+		 checkboxChange: function (e) { 
+			if (e.detail.value.length > 3) { // 如果选择的个数超过3个
+			  if (!this.hasPass) { // 当用户选择数量是第一次超过3
+				this.hasPass = true
+				if (e.detail.value.length > this.oldArr.length) { // 如果当前选择总数大于上一次选择总数(用户没有取消过选择)
+				  this.currentArr = e.detail.value.slice(0, 3)
+				  uni.showToast({
+					title: '最多3个',
+					icon: 'none'
+				  })
+				} else { // 如果当前选择总数小于上一次选择总数(用户取消部分选择)
+				  let arr = []
+				  for (var i = 0; i < this.currentArr.length; i++) {
+					for (var j = 0; j < 3; j++) {
+					  if (this.currentArr[i] === e.detail.value[j]) {
+						arr.push(this.currentArr[i])
+					  } else {
+						continue
+					  }
+					}
+				  }
+				  this.currentArr = arr
+				}
+			  } else { // 当用户选择数量不是第一次超过3(这时候change事件的返回值里有不一定是用户想要的值,所以需要做判断)
+				if (e.detail.value.length > this.oldArr.length) { // 用户又增加了选项
+				  let n = e.detail.value.length
+				  if (this.currentArr.length < 3) {
+					this.currentArr.push(e.detail.value[n - 1])
+				  } else {
+					uni.showToast({
+					  title: '最多3个',
+					  icon: 'none'
+					})
+				  }
+				} else { // 用户取消了部分选项
+				  let arr = []
+				  for (var i = 0; i < this.currentArr.length; i++) {
+					let n = e.detail.value.indexOf(this.currentArr[i])
+					if (n !== -1) {
+					  arr.push(this.currentArr[i])
+					} else {
+					  continue
+					}
+				  }
+				  this.currentArr = arr
+				}
+			  }
+			} else { // 如果选择的个数小于等于3
+			  if (this.hasPass) { // 不是第一次小于3,即之前多选过,后来又取消选择
+				if (e.detail.value.length < this.oldArr.length) { // 用户取消了部分选择
+				  let arr = []
+				  for (var i = 0; i < this.currentArr.length; i++) {
+					let n = e.detail.value.indexOf(this.currentArr[i])
+					if (n !== -1) {
+					  arr.push(this.currentArr[i])
+					} else {
+					  continue
+					}
+				  }
+				  this.currentArr = arr
+				} else { // 用户增加选择,增加的新选项在数组最后
+				  let n = e.detail.value.length
+				  this.currentArr.push(e.detail.value[n - 1])
+				}
+			  } else { // 是第一次小于3,这个最简单了,直接选了什么就给什么
+				this.currentArr = e.detail.value
+			  }
+			  
+			  if (e.detail.value.length === 0) { // 如果用户取消了全部选择,让hasPass为false,即下一次再选时就会判断为第一次选择
+				this.hasPass = false
+			  }
+			}
+			for (var i = 0, lenI = this.maleLike.length; i < lenI; ++i) { // 给用户的选项添加样式
+			  this.maleLike[i].isChecked = false;
+			  for (var j = 0, lenJ = this.currentArr.length; j < lenJ; ++j) {
+				if (String(this.maleLike[i].value) === String(this.currentArr[j])) {
+				  this.maleLike[i].isChecked = true
+				  break
+				}
+			  }
+			}
+			this.oldArr = e.detail.value // 把当前返回值赋值给上一次的返回值
+			console.log(this.oldArr,88)
+		},
+		navTo(url) {
+			uni.navigateTo({
+				url
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: $page-color-base;
+	min-height: 100%;
+}
+.content{
+	padding-bottom: 100rpx;
+}
+.tip{
+	color: #DE2412;
+	background-color: #FEE2E3;
+	font-size: 24rpx;
+	padding: 25rpx 35rpx;
+}
+.til-list{
+	padding: 35rpx 50rpx;
+	font-size: 28rpx;
+	color: #666666;
+	.red{
+		color: #E62129 !important;
+	}
+}
+.content_box {
+	background-color: #ffffff;
+	padding: 0rpx 25rpx;
+	margin: 25rpx auto;
+	.list-name{
+		padding-top: 25rpx;
+		font-size: 35rpx;
+		padding-left: 15rpx;
+		padding-bottom: 10rpx;
+	}
+}
+.row {
+	display: flex;
+	align-items: center;
+	// position: relative;
+	padding: 0 30rpx;
+	height: 110rpx;
+	background: #fff;
+	border-bottom: 1rpx solid #f8f6f6;
+
+	.tit {
+		flex-shrink: 0;
+		width: 180rpx;
+		font-size: 30rpx;
+		color: $font-color-dark;
+	}
+	.value{
+		width: 100%;
+		text-align: right;
+	}
+	.input {
+		flex: 1;
+		font-size: 30rpx;
+		color: $font-color-dark;
+		text-align: right;
+	}
+	.iconlocation {
+		font-size: 36rpx;
+		color: $font-color-light;
+	}
+}
+.radio-list{
+	display: flex;
+	flex-wrap: wrap;
+	font-size: 28rpx;
+	padding-top: 30rpx;
+	.uni-label-pointer{
+		padding-right: 25rpx;
+		padding-bottom: 30rpx;
+	}
+}
+.add-btn{
+	position: fixed;
+	bottom: 0rpx;
+	left: 0rpx;
+	width: 100%;
+	height: 100rpx;
+	font-size: 28rpx;
+	color: #FFFFFF;
+	background-color: #FF727E;
+	line-height: 100rpx;
+	text-align: center;
+}		
+</style>

+ 355 - 0
pages/applyHelp/third.vue

@@ -0,0 +1,355 @@
+     <template>
+	<view class="content">
+		<!-- <view class="tip">孝心缝帮扶:仅限服装行业从业者申请哦~</view> -->
+		<view class="flex til-list" v-if="status == ''">
+			<view class="" @click="navTo('/pages/applyHelp/index?id='+id)">基本信息</view>
+			<view class="" @click="navTo('/pages/applyHelp/second?id='+id)">信息选择</view>
+			<view class="red">家庭成员情况</view>
+			<view class="" @click="navTo('/pages/applyHelp/fourth?id='+id)">详细情况</view>
+		</view>
+		<view class="flex til-list" v-if="status == 2">
+			<view class="" @click="navTo('/pages/applyHelp/index?id='+id+'&status=2')">基本信息</view>
+			<view class="" @click="navTo('/pages/applyHelp/second?id='+id+'&status=2')">信息选择</view>
+			<view class="red">家庭成员情况</view>
+			<view class="" @click="navTo('/pages/applyHelp/fourth?id='+id+'&status=2')">详细情况</view>
+		</view>
+		<view v-for="(ls,index) in datalist" :key="">
+			<view class="flex item-list">
+				<view class="list-name">家庭成员({{index+1}})</view>
+				<view class="add-tip" @click="addlist(index)" v-if="ls.id == current && status == ''">新增</view>
+			</view>
+			<view class="content_box">
+				<view class="row b-b">
+					<text class="tit">姓名</text>
+					<input class="input" type="text" v-model="ls.name" :disabled="disabled" placeholder="请填写您的姓名" placeholder-class="placeholder" />
+				</view>
+				<view class="row b-b">
+					<text class="tit">与本人关系</text>
+					<input class="input" type="text" v-model="ls.relationship" :disabled="disabled"  placeholder="请填写与本人关系" placeholder-class="placeholder" />
+				</view>
+				<view class="row b-b">
+					<text class="tit">身份证号</text>
+					<input class="input" type="text" v-model="ls.card" :disabled="disabled"  placeholder="请填写身份证号" placeholder-class="placeholder" />
+				</view>
+				<view class="row b-b">
+					<text class="tit">工作单位或就读学校</text>
+					<input class="input" type="text" v-model="ls.school" :disabled="disabled"  placeholder="请填写工作单位或就读学校" placeholder-class="placeholder" />
+				</view>
+				<view class="row b-b">
+					<text class="tit">健康状况</text>
+					<input class="input" type="text" v-model="ls.health" :disabled="disabled"  placeholder="请填写健康状况" placeholder-class="placeholder" />
+				</view>
+				<view class="row b-b">
+					<text class="tit">月收入(元)</text>
+					<input class="input" type="number"  v-model="ls.money" :disabled="disabled" placeholder="请填写月收入(元)" placeholder-class="placeholder" />
+				</view>
+			</view>
+		</view>
+		<view class="add-btn" v-if="status == ''" @click="confirm">下一步</view>
+		<view class="add-btn"  v-if="status == 2" @click="Tosecond">下一步</view>
+	</view>
+</template>
+<script>
+import uniList from '@/components/uni-list/uni-list.vue';
+import uniListItem from '@/components/uni-list-item/uni-list-item.vue';
+import LbPicker from '@/components/lb-picker/index.vue'
+import { upload,add_three_help } from '@/api/index.js';
+import { getList,helpdetail } from '@/api/applyHelp.js';
+export default {
+	components: {
+		uniList,
+		uniListItem,
+		LbPicker
+	},
+	data() {
+		return {
+			datalist:[{
+				id:1,
+				name:"",
+				relationship:'',
+				card:'',
+				school:'',
+				health:'',
+				money:"",
+				}],
+			current:1,
+			submit:0,
+			type:1,//1代表申请表,2代表申请详情
+			
+			status:'',//审核通过
+			disabled:false,
+		};
+	},
+	onLoad(option) {
+		if(option.id){
+			this.id = option.id;
+			this.helpDetail();
+		}
+		if(option.status){
+			this.status = option.status;
+			this.disabled = true;
+		}
+	},
+	onUnload() {
+		uni.navigateTo({
+			url: '/pages/applyHelp/cation'
+		});
+	},
+	methods: {
+		addlist(){
+			if(this.current > 6){
+				this.$api.msg('家庭只能添加7位!');
+				return;
+			}
+			let v = Object();
+			this.current++;
+			v['id'] = this.current;
+			v['name'] = '';
+			v['relationship'] = '';
+			v['card'] = '';
+			v['school'] = '';
+			v['health'] = '';
+			v['money'] = '';
+			this.datalist.push(v);
+			console.log(this.current)
+			console.log(this.datalist)
+		},
+		// outFocus(e){
+		// 	console.log(event.target)
+		// 	event.target.blur()
+		// },
+		// //筹款类型
+		// async loadData() {
+		// 	let obj = this;
+		// 	getList({})
+		// 		.then(({ data }) => {
+		// 			obj.list =  data;
+		// 		})
+		// 	.catch(err => {
+		// 		console.log(err);
+		// 	});
+		// },
+		Tosecond(){
+			uni.navigateTo({
+				url:'/pages/applyHelp/fourth?id='+this.id+'&status=2'
+			})
+		},
+		//申请详情
+		helpDetail(){
+			let obj = this;
+			helpdetail({
+				id:obj.id
+			}).then(({ data }) => {
+				console.log(data.member_list)
+				if(data.member_list == null){
+					obj.type =1;
+				}else{
+					obj.type =2;
+					obj.datalist = data.member_list
+				}
+				console.log(obj.type )
+				})
+				.catch(err => {
+				console.log(err);
+			});
+		},
+		//提交
+		confirm() {
+			let obj = this; 
+			let data = [];
+			for(let i in obj.datalist ){
+			   if(obj.datalist[i].name !='' && obj.datalist[i].relationship !='' && obj.datalist[i].card !='' && obj.datalist[i].school!='' && obj.datalist[i].health !='' && obj.datalist[i].money!=''){
+			   	obj.submit =1;
+				console.log(obj.datalist[i])
+				data.push(obj.datalist[i]);
+			   }
+			}
+			if(obj.submit==0)
+			{
+				obj.$api.msg('请填写至少一位完整的家庭成员信息!');
+				return;
+			}
+			
+			add_three_help({
+				id:obj.id,
+				data:data
+			}).then(function(e) {
+				obj.$api.msg(e.msg);
+				setTimeout(function(){
+					uni.navigateTo({
+						url:'/pages/applyHelp/fourth?id='+obj.id
+					})
+				}, 2000);
+			})
+			.catch(e => {
+				obj.$api.msg(e.message);
+			});
+		},
+		navTo(url) {
+			uni.navigateTo({
+				url
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: $page-color-base;
+	min-height: 100%;
+}
+.content{
+	padding-bottom: 100rpx;
+}
+.tip{
+	color: #DE2412;
+	background-color: #FEE2E3;
+	font-size: 24rpx;
+	padding: 25rpx 35rpx;
+}
+.til-list{
+	padding: 35rpx 50rpx;
+	font-size: 28rpx;
+	color: #666666;
+	.red{
+		color: #E62129 !important;
+	}
+}
+.name{
+	padding: 0rpx 35rpx;
+	padding-bottom: 15rpx !important;
+	font-size: 36rpx;
+	font-weight:500;
+}
+.content_box {
+	background-color: #ffffff;
+	padding: 0rpx 25rpx;
+	margin: 25rpx auto;
+}
+.item-list{
+	padding: 25rpx 45rpx;
+	color:rgba(34,34,34,1);
+	font-weight:400;
+	font-size: 35rpx;
+	.list-name{
+			
+		}
+	.add-tip{
+		color: #E62129 !important;
+	}
+}
+.row {
+	display: flex;
+	align-items: center;
+	// position: relative;
+	padding: 0 30rpx;
+	height: 110rpx;
+	background: #fff;
+	border-bottom: 1rpx solid #f8f6f6;
+
+	.tit {
+		flex-shrink: 0;
+		width: 280rpx;
+		font-size: 30rpx;
+		color: $font-color-dark;
+	}
+	.input {
+		flex: 1;
+		font-size: 30rpx;
+		color: $font-color-dark;
+		text-align: right;
+	}
+	.iconlocation {
+		font-size: 36rpx;
+		color: $font-color-light;
+	}
+}
+.examine_name {
+	color: #171717;
+	font-size: 28rpx;
+	padding: 25rpx 25rpx;
+}
+.examine_img {
+	width: 100%;
+	text-align: center;
+	.image{
+		width: 150rpx;
+		height: 150rpx;
+	}
+	.image1{
+		min-width: 150rpx;
+		max-width: 100%;
+		min-height: 150rpx;
+	}
+}
+.add-img-box {
+	width: 100%;
+	flex-direction: row;
+	flex-wrap: wrap;
+	margin-top: 50rpx;
+}
+.add-img-item {
+	margin-bottom: 25rpx;
+	width: 100%;
+	.add-img {
+		min-width: 150rpx;
+		max-width: 100%;
+		height: 400rpx;
+	}
+}
+.add-img-del {
+	position: absolute;
+	width: 40rpx;
+	height: 40rpx;
+	right: 60rpx;
+	// bottom: 155rpx;
+	//background-color: rgba(238, 0, 0, 1);
+	border-radius: 20rpx;
+}
+.default-row {
+	margin-top: 16rpx;
+	.tit {
+		flex: 1;
+	}
+	switch {
+		transform: translateX(16rpx) scale(0.9);
+	}
+}
+.add-btn{
+	position: fixed;
+	bottom: 0rpx;
+	left: 0rpx;
+	width: 100%;
+	height: 100rpx;
+	font-size: 28rpx;
+	color: #FFFFFF;
+	background-color: #FF727E;
+	line-height: 100rpx;
+	text-align: center;
+}
+.img_box {
+	padding: 35rpx 35rpx;
+	width: 250rpx;
+	height: 250rpx;
+}
+.img_box image {
+	width: 100%;
+	height: 100%;
+}
+.alert-box {
+	background-color: #ffffff;
+}
+.b-b:after {
+	position: relative !important;
+}
+.check_box {
+	padding: 25rpx 25rpx;
+	font-size: 20rpx;
+	padding-bottom: 150rpx;
+	text{
+		color: #6786FB;
+	}
+}
+
+</style>

+ 2 - 2
pages/donate/donateDetail.vue

@@ -109,7 +109,7 @@
 						<view class="item-top">
 						<view class="item-top">
 							<image src="../../static/img/002.png" mode=""></image>
 							<image src="../../static/img/002.png" mode=""></image>
 							<view class="item-name-time">
 							<view class="item-name-time">
-								<view class="item-name">荆州捐赠</view>
+								<view class="item-name">洪湖市捐赠</view>
 								<view class="item-time">{{ item.time | time }}</view>
 								<view class="item-time">{{ item.time | time }}</view>
 							</view>
 							</view>
 						</view>
 						</view>
@@ -124,7 +124,7 @@
 						<view class="item-top">
 						<view class="item-top">
 							<image src="../../static/img/002.png" mode=""></image>
 							<image src="../../static/img/002.png" mode=""></image>
 							<view class="item-name-time">
 							<view class="item-name-time">
-								<view class="item-name">荆州捐赠</view>
+								<view class="item-name">洪湖市捐赠</view>
 								<view class="item-time">{{ item.time | time }}</view>
 								<view class="item-time">{{ item.time | time }}</view>
 							</view>
 							</view>
 						</view>
 						</view>

+ 2 - 2
pages/form/certificates copy.vue

@@ -6,7 +6,7 @@
 				<view class="name-left"><input type="text" v-model="name" /></view>
 				<view class="name-left"><input type="text" v-model="name" /></view>
 				<view class="name-right">先生/女士</view>
 				<view class="name-right">先生/女士</view>
 			</view>
 			</view>
-			<view class="info">您已完成荆州市红十字会普及培训,特发此证,以资鼓励。</view>
+			<view class="info">您已完成洪湖市红十字会普及培训,特发此证,以资鼓励。</view>
 			<view class="signName">
 			<view class="signName">
 				<view class="signName-left">
 				<view class="signName-left">
 					<view class="signName-1">签发人</view>
 					<view class="signName-1">签发人</view>
@@ -34,7 +34,7 @@ export default {
 	data() {
 	data() {
 		return {
 		return {
 			name: '',
 			name: '',
-			people: '荆州市红十字会',
+			people: '洪湖市红十字会',
 			signDate: ''
 			signDate: ''
 		};
 		};
 	},
 	},

+ 4 - 4
pages/form/certificates.vue

@@ -49,7 +49,7 @@ export default {
 			companyName:'',
 			companyName:'',
 			companyphone:'',
 			companyphone:'',
 			num:'',
 			num:'',
-			people:'荆州市红十字会',
+			people:'洪湖市红十字会',
 			signDate:'',
 			signDate:'',
 			loading: true, //是否载入图片中
 			loading: true, //是否载入图片中
 			size: 180,
 			size: 180,
@@ -170,7 +170,7 @@ export default {
 		
 		
 		context.setFontSize(31 * obj.ratio)
 		context.setFontSize(31 * obj.ratio)
 		
 		
-		context.fillText('您已完成荆州市红十字会普及培训', 105 * obj.ratio, 670 * obj.ratio)
+		context.fillText('您已完成洪湖市红十字会普及培训', 105 * obj.ratio, 670 * obj.ratio)
 		context.fillText('的全部课程,特发此证。', 105 * obj.ratio, 720 * obj.ratio)
 		context.fillText('的全部课程,特发此证。', 105 * obj.ratio, 720 * obj.ratio)
 		context.setFontSize(22 * obj.ratio)
 		context.setFontSize(22 * obj.ratio)
 		context.fillText('签发人:', 300 * obj.ratio, 800 * obj.ratio)
 		context.fillText('签发人:', 300 * obj.ratio, 800 * obj.ratio)
@@ -183,7 +183,7 @@ export default {
 		context.fillText('Issuer Date:', 300 * obj.ratio, 910 * obj.ratio)
 		context.fillText('Issuer Date:', 300 * obj.ratio, 910 * obj.ratio)
 		context.setFontSize(26 * obj.ratio)
 		context.setFontSize(26 * obj.ratio)
 		context.fillText(m, 475 * obj.ratio, 908 * obj.ratio)
 		context.fillText(m, 475 * obj.ratio, 908 * obj.ratio)
-		context.fillText('荆州市红十字会', 440 * obj.ratio, 820 * obj.ratio)
+		context.fillText('洪湖市红十字会', 440 * obj.ratio, 820 * obj.ratio)
 		// 画横线
 		// 画横线
 		context.moveTo(430 * obj.ratio, 915 * obj.ratio)
 		context.moveTo(430 * obj.ratio, 915 * obj.ratio)
 		context.lineTo(660 * obj.ratio, 915 * obj.ratio)
 		context.lineTo(660 * obj.ratio, 915 * obj.ratio)
@@ -241,7 +241,7 @@ export default {
 				link:  'http://jz.red.igxys.com/index/#/pages/train/sign?type=' + obj.type + '&id=' + obj.id + '&uid=' + obj.userInfo.uid,// 分享链接
 				link:  'http://jz.red.igxys.com/index/#/pages/train/sign?type=' + obj.type + '&id=' + obj.id + '&uid=' + obj.userInfo.uid,// 分享链接
 				imgUrl: '/index/static/img/002.png',
 				imgUrl: '/index/static/img/002.png',
 				desc: '结业证书',
 				desc: '结业证书',
-				title: '荆州市红十字会',
+				title: '洪湖市红十字会',
 			};
 			};
 			console.log('分享加',item)
 			console.log('分享加',item)
 			weixindata(item);
 			weixindata(item);

+ 3 - 3
pages/form/donaSuccess.vue

@@ -103,7 +103,7 @@ export default {
 		// context.fillText('感谢信', ((750 - obj.size) * obj.ratio) / 2, 260 * obj.ratio)
 		// context.fillText('感谢信', ((750 - obj.size) * obj.ratio) / 2, 260 * obj.ratio)
 		context.setFontSize(30 * obj.ratio);
 		context.setFontSize(30 * obj.ratio);
 		context.fillText('尊敬的捐赠人:', 40 * obj.ratio, 400 * obj.ratio);
 		context.fillText('尊敬的捐赠人:', 40 * obj.ratio, 400 * obj.ratio);
-		context.fillText('衷心感谢您对荆州市红十字事业的信任与支持', 100 * obj.ratio, 460 * obj.ratio);
+		context.fillText('衷心感谢您对洪湖市红十字事业的信任与支持', 100 * obj.ratio, 460 * obj.ratio);
 		context.fillText('!我们已收到您的捐款', 40 * obj.ratio, 515 * obj.ratio);
 		context.fillText('!我们已收到您的捐款', 40 * obj.ratio, 515 * obj.ratio);
 		// 画横线
 		// 画横线
 		context.moveTo(340 * obj.ratio, 520 * obj.ratio);
 		context.moveTo(340 * obj.ratio, 520 * obj.ratio);
@@ -118,7 +118,7 @@ export default {
 
 
 		context.fillText('们因您更有力量,因您倍感温暖!', 40 * obj.ratio, 785 * obj.ratio);
 		context.fillText('们因您更有力量,因您倍感温暖!', 40 * obj.ratio, 785 * obj.ratio);
 		// context.fillText('谨表谢意', (580 * obj.ratio), 680 * obj.ratio)
 		// context.fillText('谨表谢意', (580 * obj.ratio), 680 * obj.ratio)
-		context.fillText('荆州市红十字会', 450 * obj.ratio, 900 * obj.ratio);
+		context.fillText('洪湖市红十字会', 450 * obj.ratio, 900 * obj.ratio);
 
 
 		// 插入二维码
 		// 插入二维码
 		// console.log(codeX, codeY, codeSize, 999)
 		// console.log(codeX, codeY, codeSize, 999)
@@ -187,7 +187,7 @@ export default {
 				link: 'http://http://jz.red.igxys.com/index/#/pages/form/donaSuccess?money=' + obj.money, // 分享链接
 				link: 'http://http://jz.red.igxys.com/index/#/pages/form/donaSuccess?money=' + obj.money, // 分享链接
 				imgUrl: 'http://http://jz.red.igxys.com/index/#/static/img/thinks.png',
 				imgUrl: 'http://http://jz.red.igxys.com/index/#/static/img/thinks.png',
 				desc: '感谢信',
 				desc: '感谢信',
-				title: '荆州市红十字会',
+				title: '洪湖市红十字会',
 				success: console.log('分享加载成功')
 				success: console.log('分享加载成功')
 			};
 			};
 			console.log('分享加', item);
 			console.log('分享加', item);

+ 392 - 0
pages/fu/axjz.vue

@@ -0,0 +1,392 @@
+<template>
+	<view class="container">
+		<scroll-view class="scroll-list" scroll-x>
+			<view class="scoll-box" v-for="(ls,index) in cationList" :key="index" :class="{ active: ls.id === currentId }" @click="tabtap(ls.id)">
+				<view class="scoll-name">{{ ls.cate_name }}</view>
+			</view>
+		</scroll-view>
+		<swiper v-if="tabCurrentIndex == 0" class="swiper-box" duration="300" @change="changeTab">
+			<swiper-item class="tab-content">
+				<scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData">
+					<!-- 空白页 -->
+					<empty v-if="list.length === 0"></empty>
+					<!-- 订单列表 -->
+					<view >
+						<view class="fu-box" v-for='(item, index) in list' :key="index" @click="toDetail(item)">
+							<view class="img-box">
+								<image class="fu-img" :src="item.image" mode="aspectFill"></image>
+								<text class="fu-cname">{{ item.cname }}</text>
+							</view>
+							<view class="fu-right">
+								<view>
+									<view class="fu-tit">{{ item.title }}</view>
+									<view class="fu-text">{{ item.info }}</view>
+								</view>
+								<view class="fu-bottom" v-if="item.is_show == 1">
+									<view class="fu-shenqing">已有{{ item.sales }}人申请</view>
+									<!-- <text class="fu-jifen">+{{ item.integral }}积分</text> -->
+								</view>
+								<view class="fu-bottom" v-if="item.is_show == 0">
+									<text class="fu-shenqing">资金:{{ item.money }}</text>
+									<view class="fu-shenqing">帮扶人:{{ item.name }}</view>
+								</view>
+							</view>
+						</view>
+					</view>
+					<uni-load-more :status="loadingType"></uni-load-more>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+		
+		<u-popup v-model="show" mode="right" zIndex="99">
+			<view class="popup-box">
+				<view class="pop-bfu">
+					<view class="bfu-btn" :class="{'checkBtn': type == 2 }" @click="shaixuan(2)">
+						未帮扶
+						<image class="btn-img" v-if="type == 2" src="../../static/images/icon_pick.png"></image>
+					</view>
+					<view class="bfu-btn" :class="{'checkBtn': type == 1 }" @click="shaixuan(1)">
+						帮扶中
+						<image class="btn-img" v-if="type == 1" src="../../static/images/icon_pick.png"></image>
+					</view>
+					<view class="bfu-btn" :class="{'checkBtn': type == 3 }" @click="shaixuan(3)">
+						公示中
+						<image class="btn-img" v-if="type == 3" src="../../static/images/icon_pick.png"></image>
+					</view>
+				</view>
+				<view class="pop-bfu">
+					
+					<view class="bfu-btn" :class="{'checkBtn': type == 4 }" @click="shaixuan(4)">
+						已完结
+						<image class="btn-img" v-if="type == 4" src="../../static/images/icon_pick.png"></image>
+					</view>
+				</view>
+				<view class="qr-btn">
+					<text class="btn-qr" @click="comfim">确认</text>
+				</view>
+			</view>
+		</u-popup>
+		
+	</view>
+</template>
+
+<script>
+	import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+	import empty from '@/components/empty';
+	import { one_help } from '@/api/index.js';
+	import { getUserInfo } from '@/api/login.js';
+	import { getList } from '@/api/applyHelp.js';
+	export default {
+		components: {
+			uniLoadMore,
+			empty,
+		},
+		data() {
+			return {
+				tabCurrentIndex:0,
+				page: 1, //当前页数
+				limit: 10,//每次信息条数
+				loadingType: 'more',
+				list: [],
+				userInfo:'',
+				keyword:'',
+				money:'',//捐款金额
+				integral:'',//捐款积分
+				cationList: [],	// 分类列表
+				currentId:0,
+				show: false,	// 弹窗开关
+				type: 2,	// 筛选条件 1-帮扶中  2-未帮扶  3-公示中  4-已完成
+			};
+		},
+		onLoad() {
+			this.GetCation();
+		},
+		onShow() {
+			this.page = 1;
+			this.loadingType = 'more';
+			this.list = [];
+			this.loadData();
+		},
+		// 搜索按钮点击
+		onNavigationBarButtonTap() {
+			console.log('dddddddddddddddddd')
+			this.show = true;
+		},
+		watch:{
+			// keyword(n, o){
+			// 	this.keyword = n;
+			// 	this.loadData();
+			// },
+		},
+		methods: {
+			GetCation(){
+				let obj = this;
+				getList({})
+					.then(({ data }) => {
+						let res =[{
+							cate_name:'全部',
+							id:0
+						}]
+						res.unshift(0,0); 
+						Array.prototype.splice.apply(data,res); 
+						obj.cationList =  data;
+					})
+					.catch(err => {
+						console.log(err);
+					});
+			},
+			//获取订单列表
+			loadData() {
+				let obj = this;
+				if (obj.loadingType === 'noMore') {
+					//防止重复加载
+					return;
+				}
+				// 修改当前对象状态为加载中
+				obj.loadingType = 'loading';
+				one_help({
+					page:obj.page,
+					limit:obj.limit,
+					cid:obj.currentId,
+					type: obj.type
+				})
+					.then(data => {
+						obj.list = obj.list.concat(data.data);
+						obj.page++;
+						if (obj.limit == data.data.length) {
+							//判断是否还有数据, 有改为 more, 没有改为noMore
+							obj.loadingType = 'more';
+							return;
+						} else {
+							//判断是否还有数据, 有改为 more, 没有改为noMore
+							obj.loadingType = 'noMore';
+						}
+					})
+			},
+			//一级分类点击
+			tabtap(item) {
+				let obj = this;
+				obj.currentId = item;
+				obj.page = 1;
+				obj.loadingType = 'more';
+				obj.list = [];
+				obj.loadData()
+			},
+			toDetail(item) {
+				if ( item.is_show == 1 ) {
+					uni.navigateTo({
+						url: '/pages/fu/fuInfo?id=' + item.id
+					})
+				} else {
+					uni.navigateTo({
+						url: '/pages/fu/helpDetail?id=' + item.id
+					})
+				}
+				
+			},
+			// 筛选 1-帮扶中   2-未帮扶
+			shaixuan(i) {
+					this.type = i;
+			},
+			comfim() {
+				this.show = false;
+				this.page = 1;
+				this.loadingType = 'more';
+				this.list = [];
+				this.loadData()
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page {
+		height: 100%;
+		.container{
+			height: 100%;
+		}
+	}
+	.swiper-box {
+		height: calc(100% - 40px);
+		padding: 20rpx 30rpx 0 30rpx;
+		.list-scroll-content {
+			height: 100%;
+		   // padding-bottom: 25rpx;
+		}
+	}
+	.scroll-list {
+		width: 100%;
+		overflow: hidden;
+		white-space: nowrap;
+		background-color: #FFFFFF;
+		font-size: 32rpx;
+		height: 40px;
+		.scoll-box {
+			text-align: center;
+			display: inline-block;
+			margin: 0rpx 38rpx;
+			// padding: 15rpx 0rpx;
+			.scoll-img {
+				width: 130rpx;
+				height: 85rpx;
+				border-radius: 100%;
+				image {
+					width: 85rpx;
+					height: 100%;
+					border-radius: 100%;
+				}
+			}
+			.scoll-name {
+				padding-top: 15rpx;
+			}
+			&.active {
+				color: $motif-color;
+				border-bottom:6rpx solid $motif-color;
+			}
+		}
+	}
+	.fu-box {
+		padding: 14rpx 20rpx 28rpx 20rpx;
+		background: #FFFFFF;
+		box-shadow: 0px 0px 40rpx 0px rgba(0, 0, 0, 0.06);
+		border-radius: 12rpx;
+		display: flex;
+		align-items: center;
+		margin-bottom: 20rpx;
+		&:last-of-type {
+			margin-bottom: 0;
+		}
+		.img-box {
+			position: relative;
+		}
+		.fu-img {
+			width: 220rpx;
+			height: 182rpx;
+			border-radius: 8rpx;
+		}
+		.fu-cname {
+			position: absolute;
+			top: 0;
+			left: 0;
+			background: #FF727E;
+			color: #FFFFFF;
+			padding: 0 10rpx;
+			border-radius: 8rpx 0 8rpx 0;
+			font-size: 24rpx;
+		}
+		.fu-right {
+			margin-left: 20rpx;
+			width: 62%;
+			.fu-tit {
+				overflow: hidden;
+				text-overflow: ellipsis;
+				white-space: nowrap;
+				font-size: 36rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #222222;
+			}
+			.fu-text {
+				margin-top: 17rpx;
+				overflow : hidden;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				-webkit-line-clamp: 2;
+				-webkit-box-orient: vertical;
+				font-size: $font-sm;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #666666;
+			}
+			.fu-bottom {
+				margin-top: 20rpx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				.fu-shenqing {
+					font-size: 21rpx;
+					font-family: PingFang;
+					font-weight: 500;
+					color: #FF727E;
+				}
+				.fu-jifen {
+					padding: 0 5rpx;
+					border: 1px solid #FF0000;
+					border-radius: 5rpx;
+					font-size: 21rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #FF0000;
+				}
+				.fu-yjs {
+					font-size: 21rpx;
+					font-family: PingFang;
+					font-weight: 500;
+					color: #999999;
+				}
+				.fu-sczl {
+					padding: 5rpx 17rpx;
+					font-size: 21rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #FFFFFF;
+					background: #FF727E;
+					border-radius: 23rpx;
+				}
+			}
+		}
+	}
+	.popup-box {
+		padding: 100rpx 0 100rpx 20rpx ;
+		
+		.pop-bfu {
+			display: flex;
+			margin-bottom: 30rpx;
+			.bfu-btn {
+				width: 140rpx;
+				height: 66rpx;
+				background: #EDEDED;
+				border: 1px solid #EDEDED;
+				font-size: $font-base;
+				// padding: 10rpx 30rpx;
+				margin-right: 20rpx;
+				color: #FF727E;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				position: relative;
+				.btn-img {
+					position: absolute;
+					bottom: 0;
+					right: 0;
+					width: 24rpx;
+					height: 24rpx;
+				}
+			}
+			.checkBtn {
+				border: 1px solid #FF727E;
+				background: #FF727E;
+				color: #FFFFFF;
+			}
+		}
+		.qr-btn {
+			margin-right: 20rpx;
+			margin-top: 100rpx;
+			display: flex;
+			align-items: center;
+			justify-content: flex-end;
+			.btn-qr {
+				color: #FFFFFF;
+				background: $motif-color;
+				font-size: $font-lg;
+				font-weight: 500;
+				width: 200rpx;
+				height: 66rpx;
+				border-radius: 33rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+			}
+		}
+	}
+</style>

+ 452 - 0
pages/fu/fuInfo.vue

@@ -0,0 +1,452 @@
+<template>
+	<view class="container">
+		<view class="swiper">
+			<view class="swiper-box">
+				<swiper circular="true" autoplay="true" @change="swiperChange">
+					<swiper-item v-for="swiper in banner" :key="swiper.id"><image :src="swiper"></image></swiper-item>
+				</swiper>
+				<view class="indicator"><view class="dots" v-for="(swiper, index) in banner" :class="[swiperCurrent >= index ? 'on' : '']" :key="index"></view></view>
+			</view>
+		</view>
+		
+		<view class="info-item">
+			<view class="flex_item">
+				<view class="list-tip">{{list.cname}}</view>
+				<view class="info-title clamp">{{list.title}}</view>
+			</view>
+			<view class="info-tip">{{list.info}}</view>
+			<view class="info-number">
+				<!-- <view v-if="starting == true">
+					<view class="flex_item">
+						<view class="name-text">还剩</view>
+						<uni-countdown
+							color="#E62129"
+							background-color="#ffffff"
+							:show-day="true"
+							:day='startday'
+							:hour="starthour"
+							:minute="startminute"
+							:second="startsecond"
+						></uni-countdown>
+					</view>
+				</view>
+				<view class="starting" v-if="starting == false">活动已结束</view> -->
+				<view>资金:{{list.money }}</view>
+				<view v-if="starting == true">已有{{list.sales}}人申请</view>
+				<view v-if="starting == false">已结束</view>
+			</view>
+		</view>
+		<view class="introduce-item">
+			<view class="introduce-title ellipsis">项目介绍</view>
+			<view class="introduce-info">
+				<rich-text :nodes="list.description"></rich-text>
+			</view>
+		</view>
+		<!-- <view class="introduce-item">
+			<view class="introduce-title ellipsis">捐款通道</view>
+			<view class="introduce-info">银行账户:{{list.bank_account}}</view>
+		</view> -->
+		<view class="btn-bottom">
+			<view class="btn-left">
+				<view class="submit" v-if="starting == true && list.is == 0" @click="shenqing"><text class="">申请援助</text></view>
+				<view class="submit yijieshu"  v-if="starting == true && list.is == 1"><text class="">已申请援助</text></view>
+				<view class="submit yijieshu"  v-if="starting == false" ><text class="">已结束</text></view>
+			</view>
+			<view class="btn-right">
+				<view class="" @click="loveDona">
+					爱心捐款
+				</view>
+			</view>
+		</view>
+	
+		
+		<uni-popup ref="popup" type="center">
+			<view class="pop-box">
+				<image class="pop-img" src="../../static/images/sqyz.png"></image>
+				<view class="pop-frame">
+					<view class="pop-text">是否确认申请援助</view>
+					<view class="pop-btnBox">
+						<view class="pop-btn" @click="close">取消</view>
+						<view class="pop-btn queren" @click="corfim()">确认</view>
+					</view>
+				</view>
+			</view>
+		</uni-popup>
+	</view>
+</template>
+
+<script>
+	import uniPopup from '@/components/uni-popup/uni-popup.vue';
+	import { one_detail, enroll } from '@/api/applyHelp.js';
+	import { timeComputed } from '@/utils/rocessor.js';
+	import uniCountdown from '@/components/uni-countdown/uni-countdown.vue';
+	import {
+			weixindata
+		} from '@/utils/wxAuthorized.js';
+	export default {
+		components: {
+			uniPopup,
+			uniCountdown
+		},
+		data() {
+			return {
+				id:'',
+				money:99,
+				list: '',
+				description:'',
+				swiperCurrent: 0, //轮播图
+				swiperHeight: 300,
+				banner:[],//轮播图
+				img:'',
+				startday:0,
+				starthour:0,//距离今天开始时间
+				startminute:0,
+				startsecond:0,
+				title:'',
+				endTime:'',//结束时间
+				starting: false, //判断活动是否结束
+			};
+		},
+		onLoad(option) {
+			console.log(333,option)
+			this.id = option.id;
+			this.loadData();
+			this.IndexShare();
+		},
+		methods: {
+			loadData(){
+				let obj = this;
+				let id = obj.id;
+				console.log(9090,id)
+				one_detail({
+					id: obj.id
+				}).then(data => {
+					console.log(9785,data.data)
+						obj.list = data.data;
+						obj.banner =  data.data.slider_image;
+						console.log('轮播图', obj.banner)
+						if (obj.list.description) {
+							obj.description = obj.list.description.replace(/\<img/gi, '<img class="rich-img"');
+						} //小程序商品详情图超出屏幕问题
+						let time = data.data.endActivityTime;
+						this.endTime = time*1000;
+						obj.StartDate();
+					})
+			},
+			IndexShare() {
+				let obj = this;
+				let id = obj.id
+				one_detail({
+					id: obj.id
+				}).then(data => {
+					console.log(9785,data.data)
+						let img = data.data.slider_image[0]
+						let title = data.data.title
+						let info = data.data.info
+						let item = {
+							link:  'http://dxhred.igxys.com/index/#/pages/fu/fuInfo?id=' +id,// 分享链接
+							imgUrl: img,
+							desc: info,
+							title: title,
+							success: console.log('分享加载成功')
+						};
+						console.log('分享',item)
+						weixindata(item);
+					})
+				
+			},
+			StartDate() {
+				let obj = this;
+				// 获取当前时间
+				let now = new Date();
+				let year = now.getFullYear(); //得到年份
+				let month = now.getMonth(); //得到月份
+				let date = now.getDate(); //得到日期
+				let hour = now.getHours(); //得到小时
+				let minu = now.getMinutes(); //得到分钟
+				let sec = now.getSeconds(); //得到秒
+				//获取现在时间的时间戳
+				let time = new Date(year, month, date, hour, minu, sec);
+				let nowTime = time.getTime();
+				if (nowTime < obj.endTime) {
+					console.log(nowTime,obj.endTime)
+					console.log('现在时间小于活动时间,活动进行中');
+					obj.starting = true;
+					console.log(obj.starting, '显示');
+					let starTime = obj.endTime - nowTime;
+					console.log(starTime,'starTime')
+					let day =  Math.floor(starTime / 1000 / 60 / 60 / 24); //获取剩余天数
+					let hours = Math.floor((starTime / 1000 / 60 / 60) % 24); //获取剩余小时数
+					let minutes = Math.floor((starTime / 1000 / 60) % 60); //获取分钟
+					let seconds = Math.floor((starTime / 1000) % 60); //获取秒数
+					obj.startday = day;
+					obj.starthour = hours;
+					obj.startminute = minutes;
+					obj.startsecond = seconds;
+					console.log('时间差是: '+ obj.startday + '天, ' + obj.starthour + '小时, ' + obj.startminute + '分钟, ' + obj.startsecond + '秒', '距离活动结束还剩多少时间');
+				}else{
+					obj.starting = false;
+				}
+			},
+			//轮播图
+			swiperChange(e) {
+				const index = e.detail.current;
+				this.swiperCurrent = index;
+			},
+			// 申请援助
+			shenqing() {
+				this.$refs.popup.open()
+			},
+			// 爱心捐款
+			loveDona(){
+				console.log('爱心捐款',this.id)
+				uni.navigateTo({
+					url: '/pages/applic/loveDonate?id=' + this.id
+				});
+				// pages/applic/loveDonate
+			},
+			// 关闭弹窗
+			close() {
+				this.$refs.popup.close()
+			},
+			// 确认
+			corfim() {
+				enroll({
+					hid: this.id,
+				}).then(res => {
+					this.close();
+					this.$api.msg('申请成功');
+					this.loadData();
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page {
+		background: #F5F5F5;
+		.container{
+			height: 100%;
+			padding-bottom: 180rpx;
+		}
+	}
+	.rich-img {
+		width: 100% !important;
+		height: auto;
+	}
+	//轮播图
+	.swiper {
+		width: 100%;
+		display: flex;
+		justify-content: center;
+		.swiper-box {
+			width: 100%;
+			height:650rpx;
+			overflow: hidden;
+			// box-shadow: 0upx 8upx 25upx rgba(0, 0, 0, 0.2);
+			//兼容ios,微信小程序
+			position: relative;
+			z-index: 1;
+			swiper {
+				width: 100%;
+				height: 100%;
+				swiper-item {
+					image {
+						width: 100%;
+						height: 100%;
+					}
+				}
+			}
+			.indicator {
+				position: absolute;
+				bottom: 20upx;
+				left: 20upx;
+				background-color: rgba(255, 255, 255, 0.4);
+				width: 150upx;
+				height: 5upx;
+				border-radius: 3upx;
+				overflow: hidden;
+				display: flex;
+				.dots {
+					width: 0upx;
+					background-color: rgba(255, 255, 255, 1);
+					transition: all 0.3s ease-out;
+					&.on {
+						width: (100%/3);
+					}
+				}
+			}
+		}
+	}
+	.info-item{
+		background-color: #FFFFFF;
+		padding: 45rpx 25rpx;
+		.list-tip{
+			background-color: $motif-color;
+			color: #FFFFFF;
+			border-radius:8rpx;
+			padding: 5rpx 12rpx;
+			padding-bottom: 8rpx !important;
+			margin-right: 15rpx;
+			text-align: center;
+			font-size: 24rpx;
+		}
+		.info-title{
+			max-width: 75%;
+			font-size:36rpx;
+			font-weight:500;
+			color:rgba(34,34,34,1);
+		}
+		.info-tip{
+			font-weight:400;
+			color:rgba(102,102,102,1);
+			font-size: 28rpx;
+			padding: 15rpx 0rpx;
+		}
+		.info-number{
+			padding-top: 25rpx;
+			color: #EF3D28;
+			font-size: 24rpx;
+			// text-align: right;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			.name-text{
+				color: #666666;
+			}
+			.starting{
+				font-size: 32rpx;
+				font-weight: bold;
+			}
+		}
+	}
+	.introduce-item{
+		background-color: #FFFFFF;
+		padding: 45rpx 25rpx;
+		margin-top: 25rpx;
+		.introduce-title{
+			padding-bottom: 40rpx;
+			font-size: 36rpx;
+			font-family: PingFang;
+			font-weight: 500;
+			color: #222222;
+		}
+		.introduce-info{
+			font-size: 28rpx;
+			font-weight: 500;
+			color: #222222;
+		}
+	}
+	.static{
+		padding: 0rpx !important;
+		width: 70%;
+		padding-left:25rpx !important;
+	}
+	.btn-bottom{
+		position:fixed;
+		bottom: 0rpx;
+		padding: 24rpx 32rpx;
+		// height: 88rpx;
+		width: 100%;
+		color: #FFFFFF;
+		background-color: #FFFFFF;
+		display: flex;
+		justify-content: space-between;
+	}
+	.btn-left{
+		padding: 12rpx 0;
+		width: 45%;
+		// padding: 25rpx 180rpx;
+		// background:rgba(223,312,18,1);
+		background: $motif-color;
+		border-radius:50rpx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+	.btn-right{
+		padding: 6rpx 0;
+		width: 45%;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		// padding: 25rpx 180rpx;
+		// background:rgba(223,36,18,1);
+		background: $motif-color;
+		border-radius:50rpx;
+	}
+	// .submit{
+		// width: 45%;
+		// text-align: center;
+		// padding: 50rpx 0rpx;
+		// font-size: $font-lg;
+		// text{
+		// 	padding: 25rpx 180rpx;
+		// 	// background:rgba(223,36,18,1);
+		// 	background: $motif-color;
+		// 	border-radius:50rpx;
+		// }
+	// }
+	.yijieshu {
+		// padding: 12rpx 0;
+		// width: 45%;
+		// background-color: #999999;
+		text{
+			color: #C3C3C3;
+		}
+	}
+	.red{
+		text{
+			padding: 25rpx 180rpx;
+			background:rgba(223,36,18,0.6);
+			border-radius:50rpx;
+		}
+	}
+	.pop-box {
+		.pop-img {
+			width: 542rpx;
+			height: 280rpx;
+			display: block;
+		}
+		.pop-frame {
+			margin: 0 16rpx;
+			padding: 35rpx 40rpx;
+			background: #FFFFFF;
+			box-shadow: 0px 5rpx 20rpx 0px rgba(0, 0, 0, 0.1);
+			border-radius: 0 0 10rpx 10rpx;
+			.pop-text {
+				margin-top: 30rpx;
+				font-size: 36rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #333C4C;
+				line-height: 40rpx;
+				text-align: center;
+			}
+			.pop-btnBox {
+				margin-top: 78rpx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				.pop-btn {
+					width: 199rpx;
+					height: 78rpx;
+					border: 1px solid #FF727E;
+					border-radius: 10rpx;
+					font-size: 32rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #FF727E;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+				}
+				.queren {
+					background: #FF727E;
+					color: #FFFFFF;
+				}
+			}
+		}
+	}
+</style>

+ 308 - 0
pages/fu/getPoints.vue

@@ -0,0 +1,308 @@
+<template>
+	<view class="content">
+		<view class="now-vip">
+			<view class="top-vip">
+				<view>当前等级</view>
+				<view>爱心积分</view>
+			</view>
+			<view class="top-num">
+				<view :class="{'num-dj': userInfo.level == 0}">
+					<image class="icon-vip" v-for="i in userInfo.level" src="../../static/images/vip.png"></image>
+				</view>
+				<view v-if="userInfo.level !== 4 ">{{ userInfo.all_integral }}/{{ userInfo.next_integral }}</view>
+				<view v-if="userInfo.level == 4">{{ userInfo.all_integral }}/{{ userInfo.all_integral }}</view>
+			</view>
+			<view class="line-progress">
+				<u-line-progress active-color="#E62129" :percent="percent" :show-percent="false" :height="14"></u-line-progress>
+			</view>
+			<view class="vip-icon">
+				<view>
+					<image v-for="i in userInfo.level" class="icon-vip" src="../../static/images/vip.png"></image>
+				</view>
+				<view v-if="userInfo.level !== 4">
+					<image v-for="i in userInfo.level + 1" class="icon-vip" src="../../static/images/vip.png"></image>
+				</view>
+				<view v-if="userInfo.level == 4">
+					<image v-for="i in userInfo.level" class="icon-vip" src="../../static/images/vip.png"></image>
+				</view>
+			</view>
+		</view>
+		<!-- 成长体系 -->
+		<view class="cztx-box">
+			<view class="cztx-tit">成长体系</view>
+			<view class="cztx-vip-box">
+				<view class="experience-box">
+					<view class="exper1">
+						<view class="line-exper1" :class="{'line-sel': userInfo.level > 0 }"></view>
+						<image class="exper1-img" src="../../static/images/v1.png"></image>
+					</view>
+					<view class="exper2">
+						<view class="exper-text">孝心新贵</view>
+						<view class="line-exper2" :class="{'line-sel': userInfo.level > 1 }"></view>
+						<image class="exper2-img" src="../../static/images/v2.png"></image>
+					</view>
+					<view class="exper3">
+						<view class="exper-text">乐善好施</view>
+						<view class="line-exper3" :class="{'line-sel': userInfo.level > 2 }"></view>
+						<image class="exper3-img" src="../../static/images/v3.png"></image>
+					</view>
+					<view class="exper4">
+						<view class="exper-text">爱心巨匠</view>
+						<view class="line-exper4" :class="{'line-sel': userInfo.level > 3 }"></view>
+						<image class="exper4-img" src="../../static/images/v4.png"></image>
+					</view>
+				</view>
+				<view class="cztx-experience">您可以通过更多公益行为来获得经验值</view>
+			</view>
+		</view>
+		<!-- 如何获得爱心积分 -->
+		<!-- <view class="love-box">
+			<view class="love-tit">如何获得爱心积分?</view>
+			<view class="love-text">下列操作可以帮助你获得爱心积分:</view>
+			<view class="love-frame">
+				<u-table>
+						<u-tr class="frame-tit">
+							<u-th class="frame-tit">操作</u-th>
+							<u-th class="frame-tit">获得积分</u-th>
+						</u-tr>
+						<u-tr class='frame-tr'>
+							<u-td class='frame-td'>首次登录</u-td>
+							<u-td class='frame-td'>100</u-td>
+						</u-tr>
+						<u-tr class='frame-tr'>
+							<u-td class='frame-td'>帮扶1次</u-td>
+							<u-td class='frame-td'>10</u-td>
+						</u-tr>
+						<u-tr class='frame-tr'>
+							<u-td class='frame-td'>分享1次</u-td>
+							<u-td class='frame-td'>5(每日上限15)</u-td>
+						</u-tr>
+						<u-tr class='frame-tr'>
+							<u-td class='frame-td'>在线满5分钟</u-td>
+							<u-td class='frame-td'>5(每日上限20)</u-td>
+						</u-tr>
+						<u-tr class='frame-tr'>
+							<u-td class='frame-td'>连续签到满1次</u-td>
+							<u-td class='frame-td'>1(每日递增,最高7)</u-td>
+						</u-tr>
+					</u-table>
+			</view>
+		</view> -->
+	</view>
+</template>
+
+<script>
+import { mapState } from 'vuex';
+export default {
+	data() {
+		return {
+			percent:'',
+		}
+	},
+	onLoad() {
+		this.loadData();
+	},
+	computed: {
+		...mapState('user', ['userInfo']),
+	},
+	methods: {
+		loadData() {
+			let obj = this;
+			if (obj.userInfo.level == 4) {
+				obj.percent = 100;
+			} else {
+				obj.percent = (obj.userInfo.all_integral / obj.userInfo.next_integral) * 100;
+			}
+			obj.percent = parseInt(obj.percent);
+			console.log(obj.percent,obj.userInfo);
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+page {
+	height: 100%;
+	background: #FFFFFF;
+}
+.content {
+	padding: 80rpx 60rpx 80rpx;
+	.now-vip {
+		.top-vip {
+			display: flex;
+			align-items: center;
+			justify-content: space-around;
+			font-size: $font-base;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #666666;
+			line-height: 1;
+		}
+		.top-num {
+			display: flex;
+			align-items: center;
+			justify-content: space-around;
+			font-size: 36rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #222222;
+			line-height: 1;
+			margin-top: 22rpx;
+			.num-dj {
+				visibility: hidden;
+			}
+			.icon-vip {
+				width: 37rpx;
+				height: 32rpx;
+				margin-left: 5rpx;
+			}
+		}
+		.line-progress {
+			padding: 30rpx 54rpx 24rpx;
+		}
+		.vip-icon {
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			.icon-vip {
+				width: 37rpx;
+				height: 32rpx;
+				margin-left: 5rpx;
+			}
+		}
+	}
+	.cztx-box {
+		margin-top: 90rpx;
+		.cztx-tit {
+			font-size: 36rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #222222;
+		}
+		.cztx-vip-box {
+			.experience-box {
+				display: flex;
+				align-items: flex-end;
+				justify-content: space-around;
+				padding: 14rpx 40rpx 0 60rpx;
+				.exper-text {
+					font-size: $font-sm;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #222222;
+					margin-bottom: 30rpx;
+				}
+				.exper1 {
+					display: flex;
+					flex-direction: column;
+					align-items: center;
+					.line-exper1 {
+						width: 14rpx;
+						height: 26rpx;
+						background: #EDEDED;
+						border-radius: 7rpx 7rpx 0px 0px;
+						margin-bottom: 24rpx;
+					}
+					.exper1-img {
+						width: 30rpx;
+						height: 26rpx;
+					}
+				}
+				.exper2 {
+					display: flex;
+					flex-direction: column;
+					align-items: center;
+					.line-exper2 {
+						width: 14rpx;
+						height: 104rpx;
+						background: #EDEDED;
+						border-radius: 7rpx 7rpx 0px 0px;
+						margin-bottom: 24rpx;
+					}
+					.exper2-img {
+						width: 50rpx;
+						height: 32rpx;
+					}
+				}
+				.exper3 {
+					display: flex;
+					flex-direction: column;
+					align-items: center;
+					.line-exper3 {
+						width: 14rpx;
+						height: 182rpx;
+						background: #EDEDED;
+						border-radius: 7rpx 7rpx 0px 0px;
+						margin-bottom: 24rpx;
+					}
+					.exper3-img {
+						width: 68rpx;
+						height: 32rpx;
+					}
+				}
+				.exper4 {
+					display: flex;
+					flex-direction: column;
+					align-items: center;
+					.line-exper4 {
+						width: 14rpx;
+						height: 260rpx;
+						background: #EDEDED;
+						border-radius: 7rpx 7rpx 0px 0px;
+						margin-bottom: 24rpx;
+					}
+					.exper4-img {
+						width: 87rpx;
+						height: 32rpx;
+					}
+				}
+				.line-sel {
+					background: #E62129 !important;
+				}
+			}
+			.cztx-experience {
+				margin-top: 50rpx;
+				text-align: center;
+				font-size: $font-sm;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #222222;
+			}
+		}
+	}
+	.love-box {
+		margin-top: 96rpx;
+		line-height: 1;
+		.love-tit {
+			font-size: 36rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #222222;
+		}
+		.love-text {
+			font-size: $font-base;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #222222;
+			margin: 21rpx 0 35rpx;
+		}
+		.love-frame {
+			width: 100%;
+			border-radius: 12rpx;
+			// border: 1px solid rgba(155,155,155,.3);
+			.frame-tit {
+				border-radius: 12rpx 12rpx 0 0;
+				height: 84rpx;
+			}
+			.frame-tr{
+				height: 84rpx;
+				.frame-td{
+					font-size: 28rpx;
+					font-weight: 500;
+					color: #222222;
+				}
+			}
+		}
+	}
+}
+</style>

+ 359 - 0
pages/fu/helpDetail.vue

@@ -0,0 +1,359 @@
+<template>
+	<view class="container">
+		<view class="swiper">
+			<view class="swiper-box">
+				<swiper circular="true" autoplay="true" @change="swiperChange">
+					<swiper-item v-for="swiper in banner" :key="swiper.id"><image :src="swiper"></image></swiper-item>
+				</swiper>
+				<view class="indicator"><view class="dots" v-for="(swiper, index) in banner" :class="[swiperCurrent >= index ? 'on' : '']" :key="index"></view></view>
+			</view>
+		</view>
+		
+		<view class="info-item">
+			<view class="flex_item">
+				<view class="list-tip">{{list.cname}}</view>
+				<view class="info-title clamp">{{list.title}}</view>
+			</view>
+			<view class="info-tip">{{list.info}}</view>
+			<view class="info-number">
+				<view>资金:{{ list.money }}</view>
+				<view>帮扶人:{{ list.arr.name }}</view>
+			</view>
+		</view>
+		<view class="introduce-item">
+			<view class="introduce-title ellipsis">项目介绍</view>
+			<view class="introduce-info">
+				<rich-text :nodes="list.description"></rich-text>
+			</view>
+		</view>
+		
+		<view class="introduce-item" v-if="list.arr.info1.remark">
+			<view class="introduce-title ellipsis">帮扶详情</view>
+			<view class="introduce-info">
+				<view>{{ list.arr.info1.remark }}</view>
+				<view class="img-box">
+					<image class="img-info" v-for="item in imgList" :src="item" mode="widthFix"></image>
+				</view>
+			</view>
+		</view>
+		
+		
+	</view>
+</template>
+
+<script>
+	import uniPopup from '@/components/uni-popup/uni-popup.vue';
+	import { one_detail, enroll } from '@/api/applyHelp.js';
+	import { timeComputed } from '@/utils/rocessor.js';
+	import uniCountdown from '@/components/uni-countdown/uni-countdown.vue';
+	export default {
+		components: {
+			uniPopup,
+			uniCountdown
+		},
+		data() {
+			return {
+				id:'',
+				list: '',
+				description:'',
+				swiperCurrent: 0, //轮播图
+				swiperHeight: 300,
+				banner:[],//轮播图
+				
+				startday:0,
+				starthour:0,//距离今天开始时间
+				startminute:0,
+				startsecond:0,
+				
+				endTime:'',//结束时间
+				starting: false, //判断活动是否结束
+				imgList: [],	// 图片
+			};
+		},
+		onLoad(option) {
+			this.id = option.id;
+			this.loadData();
+		},
+		methods: {
+			loadData(){
+				let obj = this;
+				one_detail({
+					id: obj.id
+				}).then(data => {
+						obj.list = data.data;
+						if (data.data.arr.info1.img) {
+							obj.imgList = data.data.arr.info1.img.split(';');	// 上传资料图片
+						}
+							
+						obj.banner =  data.data.slider_image;
+						if (obj.list.description) {
+							obj.description = obj.list.description.replace(/\<img/gi, '<img class="rich-img"');
+						} //小程序商品详情图超出屏幕问题
+						let time = data.data.endActivityTime;
+						this.endTime = time*1000;
+						obj.StartDate();
+					})
+			},
+			StartDate() {
+				let obj = this;
+				// 获取当前时间
+				let now = new Date();
+				let year = now.getFullYear(); //得到年份
+				let month = now.getMonth(); //得到月份
+				let date = now.getDate(); //得到日期
+				let hour = now.getHours(); //得到小时
+				let minu = now.getMinutes(); //得到分钟
+				let sec = now.getSeconds(); //得到秒
+				//获取现在时间的时间戳
+				let time = new Date(year, month, date, hour, minu, sec);
+				let nowTime = time.getTime();
+				if (nowTime < obj.endTime) {
+					console.log(nowTime,obj.endTime)
+					console.log('现在时间小于活动时间,活动进行中');
+					obj.starting = true;
+					let starTime = obj.endTime - nowTime;
+					console.log(starTime,'starTime')
+					let day =  Math.floor(starTime / 1000 / 60 / 60 / 24); //获取剩余天数
+					let hours = Math.floor((starTime / 1000 / 60 / 60) % 24); //获取剩余小时数
+					let minutes = Math.floor((starTime / 1000 / 60) % 60); //获取分钟
+					let seconds = Math.floor((starTime / 1000) % 60); //获取秒数
+					obj.startday = day;
+					obj.starthour = hours;
+					obj.startminute = minutes;
+					obj.startsecond = seconds;
+					console.log('时间差是: '+ obj.startday + '天, ' + obj.starthour + '小时, ' + obj.startminute + '分钟, ' + obj.startsecond + '秒', '距离活动结束还剩多少时间');
+				}else{
+					obj.starting = false;
+				}
+			},
+			//轮播图
+			swiperChange(e) {
+				const index = e.detail.current;
+				this.swiperCurrent = index;
+			},
+			// 申请援助
+			shenqing() {
+				this.$refs.popup.open()
+			},
+			// 关闭弹窗
+			close() {
+				this.$refs.popup.close()
+			},
+			// 确认
+			corfim() {
+				enroll({
+					hid: this.id,
+				}).then(res => {
+					this.close();
+					this.$api.msg('申请成功');
+					this.loadData();
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page {
+		background: #F5F5F5;
+		.container{
+			height: 100%;
+			padding-bottom: 180rpx;
+		}
+	}
+	.rich-img {
+		width: 100% !important;
+		height: auto;
+	}
+	//轮播图
+	.swiper {
+		width: 100%;
+		display: flex;
+		justify-content: center;
+		.swiper-box {
+			width: 100%;
+			height:650rpx;
+			overflow: hidden;
+			// box-shadow: 0upx 8upx 25upx rgba(0, 0, 0, 0.2);
+			//兼容ios,微信小程序
+			position: relative;
+			z-index: 1;
+			swiper {
+				width: 100%;
+				height: 100%;
+				swiper-item {
+					image {
+						width: 100%;
+						height: 100%;
+					}
+				}
+			}
+			.indicator {
+				position: absolute;
+				bottom: 20upx;
+				left: 20upx;
+				background-color: rgba(255, 255, 255, 0.4);
+				width: 150upx;
+				height: 5upx;
+				border-radius: 3upx;
+				overflow: hidden;
+				display: flex;
+				.dots {
+					width: 0upx;
+					background-color: rgba(255, 255, 255, 1);
+					transition: all 0.3s ease-out;
+					&.on {
+						width: (100%/3);
+					}
+				}
+			}
+		}
+	}
+	.info-item{
+		background-color: #FFFFFF;
+		padding: 45rpx 25rpx;
+		.list-tip{
+			background-color: $motif-color;
+			color: #FFFFFF;
+			border-radius:8rpx;
+			padding: 5rpx 12rpx;
+			padding-bottom: 8rpx !important;
+			margin-right: 15rpx;
+			text-align: center;
+			font-size: 24rpx;
+		}
+		.info-title{
+			max-width: 75%;
+			font-size:36rpx;
+			font-weight:500;
+			color:rgba(34,34,34,1);
+		}
+		.info-tip{
+			font-weight:400;
+			color:rgba(102,102,102,1);
+			font-size: 28rpx;
+			padding: 15rpx 0rpx;
+		}
+		.info-number{
+			padding-top: 25rpx;
+			color: #EF3D28;
+			font-size: 24rpx;
+			font-weight: normal;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			.name-text{
+				color: #666666;
+			}
+			.starting{
+				font-size: 32rpx;
+				font-weight: bold;
+			}
+		}
+	}
+	.introduce-item{
+		background-color: #FFFFFF;
+		padding: 45rpx 25rpx;
+		margin-top: 25rpx;
+		.introduce-title{
+			padding-bottom: 40rpx;
+			font-size: 36rpx;
+			font-family: PingFang;
+			font-weight: 500;
+			color: #222222;
+
+		}
+		.introduce-info{
+			font-size: 28rpx;
+			font-weight: 500;
+			color: #222222;
+		}
+		.img-box {
+			width: 100%;
+		}
+		.img-info {
+			width: 100%;
+			display: block;
+			margin-top: 30rpx;
+		}
+	}
+	.static{
+		padding: 0rpx !important;
+		width: 70%;
+		padding-left:25rpx !important;
+	}
+	.submit{
+		position:fixed;
+		bottom: 0rpx;
+		width: 100%;
+		color: #FFFFFF;
+		text-align: center;
+		background-color: #FFFFFF;
+		padding: 50rpx 0rpx;
+		font-size: $font-lg;
+		text{
+			padding: 25rpx 180rpx;
+			// background:rgba(223,36,18,1);
+			background: $motif-color;
+			border-radius:50rpx;
+		}
+	}
+	.yijieshu {
+		text{
+			background: #999999;
+		}
+	}
+	.red{
+		text{
+			padding: 25rpx 180rpx;
+			background:rgba(223,36,18,0.6);
+			border-radius:50rpx;
+		}
+	}
+	.pop-box {
+		.pop-img {
+			width: 542rpx;
+			height: 280rpx;
+			display: block;
+		}
+		.pop-frame {
+			margin: 0 16rpx;
+			padding: 35rpx 40rpx;
+			background: #FFFFFF;
+			box-shadow: 0px 5rpx 20rpx 0px rgba(0, 0, 0, 0.1);
+			border-radius: 0 0 10rpx 10rpx;
+			.pop-text {
+				margin-top: 30rpx;
+				font-size: 36rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #333C4C;
+				line-height: 40rpx;
+				text-align: center;
+			}
+			.pop-btnBox {
+				margin-top: 78rpx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				.pop-btn {
+					width: 199rpx;
+					height: 78rpx;
+					border: 1px solid #FF727E;
+					border-radius: 10rpx;
+					font-size: 32rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #FF727E;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+				}
+				.queren {
+					background: #FF727E;
+					color: #FFFFFF;
+				}
+			}
+		}
+	}
+</style>

+ 186 - 0
pages/fu/helpInfo.vue

@@ -0,0 +1,186 @@
+<template>
+	<view class="container">
+		<!-- <view class="top">
+			普及培训
+		</view> -->
+		<swiper class="swiper-box" duration="300" @change="changeTab">
+			<swiper-item class="tab-content">
+				<scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData">
+					<!-- 空白页 -->
+					<empty v-if="loadingType === true && list.length === 0"></empty>
+					<!-- 订单列表 -->
+					<view class="order-item" @click="ToDetail(item)" v-for="(item, index) in list" :key="index">
+						<view class="list-cell">
+							<image class="image" :src="item.img"></image>
+							<view class="list-tpl">{{ item.title }}</view>
+						</view>
+					</view>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+	</view>
+</template>
+<script>
+import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+import empty from '@/components/empty';
+import uniPopup from '@/components/uni-popup/uni-popup.vue';
+import { training } from '@/api/index.js';
+export default {
+	components: {
+		uniLoadMore,
+		empty,
+		uniPopup
+	},
+	data() {
+		return {
+			page: 1, //当前页数
+			limit: 6, //每次信息条数
+			list: [],
+			loadingType: 'more', //加载更多状态
+		};
+	},
+	onLoad() {
+		console.log(22)
+		this.loadData();
+	},
+	methods: {
+		//获取订单列表
+		loadData(type) {
+			//这里是将订单挂载到tab列表下
+			let obj = this;
+			if (type != 'refresh') {
+				console.log(obj.loadingType, '456');
+				//没有更多数据直接跳出方法
+				if (obj.loadingType === 'nomore') {
+					return;
+				} else {
+					// 设置当前为数据载入中
+					obj.loadingType = 'loading';
+				}
+			} else {
+				//当重新加载数据时更新状态为可继续添加数据
+				obj.loadingType = 'more';
+			}
+			training({})
+				.then(data => {
+					if (type === 'refresh') {
+						obj.list = [];
+					}
+					let arr = data.data
+					obj.list = obj.list.concat(arr);
+					//判断是否还有下一页,有是more  没有是nomore
+					if (obj.limit == arr.length) {
+						obj.page++;
+						obj.loadingType = 'more';
+					} else {
+						obj.loadingType = 'nomore';
+					}
+					// 判断是否为刷新数据
+					if (type === 'refresh') {
+						console.log('refresh');
+						// 判断是否为点击搜索按钮跳转加载
+						if (obj.loading == 1) {
+							uni.hideLoading();
+						} else {
+							uni.stopPullDownRefresh();
+						}
+					}
+				})
+				.catch(e => {
+					obj.loadingType = 'nomore';
+					uni.hideLoading();
+				});
+		},
+		//跳转到详情
+		ToDetail(e) {
+			let type = e.type;
+			let id = e.id;
+			uni.navigateTo({
+				url: '/pages/train/sign?type=' + type+'&id='+id
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: #F2F2F2;
+	height: 100%;
+	padding-bottom: 25rpx;
+}
+.container {
+	height: 100%;
+	.top{
+		background-color: #FFFFFF;
+		height: 88rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		font-size: 36rpx;
+		font-weight: 500;
+		color: #333333;
+	}
+	.swiper-box {
+		height:100%;
+		.list-scroll-content {
+			height:100%;
+		}
+	}
+}
+.scroll-list {
+	width: 100%;
+	overflow: hidden;
+	white-space: nowrap;
+	background-color: #ffffff;
+	font-size: 32rpx;
+	.scoll-box {
+		text-align: center;
+		display: inline-block;
+		margin: 0rpx 38rpx;
+		padding: 15rpx 0rpx;
+		.scoll-img {
+			width: 130rpx;
+			height: 85rpx;
+			border-radius: 100%;
+			image {
+				width: 85rpx;
+				height: 100%;
+				border-radius: 100%;
+			}
+		}
+		.scoll-name {
+			padding-top: 15rpx;
+		}
+		&.active {
+			color: #ef3d28;
+			border-bottom: 6rpx solid #ef3d28;
+		}
+	}
+}
+
+.order-item {
+	width: 100%;
+	padding: 0rpx 25rpx;
+	padding-top: 25rpx !important;
+	.list-cell {
+		background-color: #ffffff;
+		border-radius: 20rpx;
+		width: 100%;
+		box-shadow: 0px 0px 40px 0px rgba(0, 0, 0, 0.06);
+		.image {
+			width: 100%;
+			height: 300rpx;
+			border-top-left-radius: 25rpx;
+			border-top-right-radius: 25rpx;
+		}
+		.list-tpl {
+			padding: 25rpx 25rpx;
+			padding-bottom: 35rpx !important;
+			font-size: 34rpx;
+			color: #222222;
+			font-weight:500;
+		}
+	}
+}
+</style>

+ 195 - 0
pages/fu/upLoadInfo.vue

@@ -0,0 +1,195 @@
+<template>
+	<view class="container">
+		<view class="up-tit">请退供相关图片描述 以便我们后续跟进</view>
+		<view class="add-img-box flex_item">
+			<view class="add-img-item"  v-for="(item, index) in imgList" :key="index">
+				<image class="add-img" @click.stop="imgInfo(index)" :src="item" mode="aspectFill"></image>
+				<image class="add-img-del" @click.stop="delImg(index)" src="/static/img/delete.png"></image>
+			</view>
+			<view v-if='imgCount > 0' class="add-img-item" @click.stop="scImg()">
+				<image class="add-img" src="../../static/images/sctp.png"></image>
+			</view>
+		</view>
+		<view class="mark-box">
+			<view class="mark-tit">补充描述</view>
+			<textarea class="mark-text" v-model="mark" placeholder="填写描述"></textarea>
+		</view>
+		<view class="up-btn" v-if="type == 0" @click="submit">提交</view>
+		<view class="up-btn" v-if="type == 1" @click="submit">修改</view>
+	</view>
+</template>
+
+<script>
+import { upload,add_four_help } from '@/api/index.js';
+import { means, get_means } from '@/api/applyHelp.js';
+export default {
+	data() {
+		return {
+			imgList: [],	// 图片
+			cloudimgList: [],
+			mark: '',	// 描述
+			imgCount: 6,	// 最多传6张
+			id: '',
+			type: 0,
+		}
+	},
+	onLoad(option) {
+		this.id = option.id;
+		if ( option.type ) {
+			this.type = 1;
+			get_means({
+				id: this.id
+			}).then(({data}) => {
+				this.imgList = data.img;
+				this.mark = data.remark; 
+			})
+		}
+	},
+	methods: {
+		//多张上传图片
+		scImg() {
+			let obj = this;
+			upload({
+				file: ''
+			})
+				.then(e => {
+					let list = []
+					obj.imgList = [...obj.imgList, e[0].url];
+					console.log(obj.imgList);
+					obj.imgCount = 6 - obj.imgList.length;
+				})
+				.catch(e => {});
+		},
+		//点击图片显示大图
+		imgInfo(i) {
+			let tempList = [];
+			this.imgList.forEach(e => {
+				tempList.push(e);
+			});
+			//显示图片
+			uni.previewImage({
+				current: i,
+				loop: false,
+				urls: this.imgList,
+				indicator: 'default'
+			});
+		},
+		//删除图片
+		delImg(i) {
+			uni.showModal({
+				content: '确定删除这张吗',
+				success: res => {
+					if (res.confirm) {
+						this.imgList.splice(i, 1);
+						this.imgCount++;
+					} else if (res.cancel) {
+					}
+				}
+			});
+		},
+		// 提交
+		submit() {
+			let obj = this;
+			
+			let arr = obj.imgList.join(';');
+			console.log(arr,'arr')
+			
+			console.log(this.mark);
+			if (!obj.imgList) {
+				obj.$api.msg('请上传图片');
+				return;
+			}
+			if (!obj.mark) {
+				obj.$api.msg('请填写描述');
+				return;
+			}
+			means({
+				id: obj.id,
+				img: arr,
+				remark: obj.mark,
+			}).then(({data}) => {
+				obj.$api.msg('上传成功');
+				uni.navigateBack();
+			}).catch(e => {
+				console.log(e);
+			})
+		},
+	}
+}
+</script>
+
+<style lang="scss">
+.container {
+	.up-tit {
+		padding: 24rpx 30rpx;
+		font-size: $font-base;
+		font-family: PingFang SC;
+		font-weight: 500;
+		color: #333333;
+	}
+	.add-img-box {
+		width: 100%;
+		flex-wrap: wrap;
+		// justify-content: center;
+		padding: 30rpx 30rpx 0 30rpx;
+		background: #FFFFFF;
+		border-bottom: 1px solid #F0F0F0;
+	}
+	.add-img-item {
+		margin-bottom: 25rpx;
+		width: 33.33%;
+		position: relative;
+		.add-img {
+			padding: 0rpx 10rpx;
+			width: 100%;
+			height: 214rpx;
+			display: block;
+		}
+	}
+	.add-img-del {
+		position: absolute;
+		width: 40rpx;
+		height: 40rpx;
+		right: 10rpx;
+		top: 0;
+		// bottom: 155rpx;
+		//background-color: rgba(238, 0, 0, 1);
+		border-radius: 20rpx;
+	}
+	.mark-box {
+		display: flex;
+		align-items: flex-start;
+		background: #FFFFFF;
+		padding: 40rpx 30rpx 0 30rpx;
+		.mark-tit {
+			margin-right: 40rpx;
+			font-size: $font-base;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #333333;
+			flex-shrink: 0;
+		}
+		.mark-text {
+			font-size: $font-base - 2rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #999999;
+		}
+	}
+	.up-btn {
+		margin: auto;
+		margin-top: 120rpx;
+		width: 560rpx;
+		height: 80rpx;
+		background: #FF727E;
+		border-radius: 40rpx;
+		font-size: 30rpx;
+		font-family: PingFang SC;
+		font-weight: 500;
+		color: #FFFFFF;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+}
+</style>

+ 2 - 2
pages/index/biaoge.vue

@@ -15,7 +15,7 @@
           <img style="height: 3cm; width: 3cm;" src="{__FRAME_PATH}img/22.png" />
           <img style="height: 3cm; width: 3cm;" src="{__FRAME_PATH}img/22.png" />
         </div>
         </div>
         <div class="left">
         <div class="left">
-          <div style="font-size: 31px;letter-spacing:4px">荆州市遗体捐献志愿者</div>
+          <div style="font-size: 31px;letter-spacing:4px">洪湖市遗体捐献志愿者</div>
           <!-- <div style="margin-top: 5px;text-align: center;font-size: 30px;">入会申请登记表</div> -->
           <!-- <div style="margin-top: 5px;text-align: center;font-size: 30px;">入会申请登记表</div> -->
         </div>
         </div>
         <div class="img1">
         <div class="img1">
@@ -26,7 +26,7 @@
       <!-- <div class="img"></div> -->
       <!-- <div class="img"></div> -->
       <div class="header1" style="width: 21cm;">
       <div class="header1" style="width: 21cm;">
         <div class="box-1">
         <div class="box-1">
-          制表单位:荆州市红十字会
+          制表单位:洪湖市红十字会
         </div>
         </div>
         <div class="box-2">
         <div class="box-2">
           填表日期:
           填表日期:

+ 3 - 3
pages/share/card.vue

@@ -64,7 +64,7 @@ export default {
 			latitude: '30.353495', //荆州市纬度
 			latitude: '30.353495', //荆州市纬度
 			longitudeNew: '', //当前经度
 			longitudeNew: '', //当前经度
 			latitudeNew: '', //当前纬度
 			latitudeNew: '', //当前纬度
-			addr: '江夏区红十字会'
+			addr: '洪湖市红十字会'
 		};
 		};
 	},
 	},
 	onLoad() {
 	onLoad() {
@@ -112,7 +112,7 @@ export default {
 		toBaiduMap() {
 		toBaiduMap() {
 			
 			
 			window.location.href=
 			window.location.href=
-			`http://api.map.baidu.com/marker?location=30.357764,112.218665&title=荆州市红十字会&content=荆州市红十字会&output=html&src=webapp.baidu.openAPIdemo `
+			`http://api.map.baidu.com/marker?location=30.357764,112.218665&title=洪湖市红十字会&content=荆州市红十字会&output=html&src=webapp.baidu.openAPIdemo `
 		},
 		},
 		//分享
 		//分享
 		IndexShare() {
 		IndexShare() {
@@ -121,7 +121,7 @@ export default {
 				link:  'http://jz.red.igxys.com/index/#/pages/share/card',// 分享链接
 				link:  'http://jz.red.igxys.com/index/#/pages/share/card',// 分享链接
 				imgUrl: '/index/static/img/002.png',
 				imgUrl: '/index/static/img/002.png',
 				desc: '电子名片分享',
 				desc: '电子名片分享',
-				title: '荆州市红十字会',
+				title: '洪湖市红十字会',
 			};
 			};
 			console.log('分享加',item)
 			console.log('分享加',item)
 			weixindata(item);
 			weixindata(item);

+ 3 - 3
pages/train/sign.vue

@@ -79,7 +79,7 @@ export default {
 			companyName:'',
 			companyName:'',
 			companyphone:'',
 			companyphone:'',
 			num:'',
 			num:'',
-			people:'荆州市区红十字会',
+			people:'洪湖市区红十字会',
 			signDate:'',
 			signDate:'',
 			loading: true, //是否载入图片中
 			loading: true, //是否载入图片中
 			size: 180,
 			size: 180,
@@ -200,7 +200,7 @@ export default {
 		
 		
 		context.setFontSize(31 * obj.ratio)
 		context.setFontSize(31 * obj.ratio)
 		
 		
-		context.fillText('您已完成荆州市红十字会普及培训', 105 * obj.ratio, 670 * obj.ratio)
+		context.fillText('您已完成洪湖市红十字会普及培训', 105 * obj.ratio, 670 * obj.ratio)
 		context.fillText('的全部课程,特发此证。', 105 * obj.ratio, 720 * obj.ratio)
 		context.fillText('的全部课程,特发此证。', 105 * obj.ratio, 720 * obj.ratio)
 		context.setFontSize(22 * obj.ratio)
 		context.setFontSize(22 * obj.ratio)
 		context.fillText('签发人:', 300 * obj.ratio, 800 * obj.ratio)
 		context.fillText('签发人:', 300 * obj.ratio, 800 * obj.ratio)
@@ -213,7 +213,7 @@ export default {
 		context.fillText('Issuer Date:', 300 * obj.ratio, 910 * obj.ratio)
 		context.fillText('Issuer Date:', 300 * obj.ratio, 910 * obj.ratio)
 		context.setFontSize(26 * obj.ratio)
 		context.setFontSize(26 * obj.ratio)
 		context.fillText(m, 475 * obj.ratio, 908 * obj.ratio)
 		context.fillText(m, 475 * obj.ratio, 908 * obj.ratio)
-		context.fillText('荆州市红十字会', 440 * obj.ratio, 820 * obj.ratio)
+		context.fillText('洪湖市红十字会', 440 * obj.ratio, 820 * obj.ratio)
 		// 画横线
 		// 画横线
 		context.moveTo(430 * obj.ratio, 915 * obj.ratio)
 		context.moveTo(430 * obj.ratio, 915 * obj.ratio)
 		context.lineTo(660 * obj.ratio, 915 * obj.ratio)
 		context.lineTo(660 * obj.ratio, 915 * obj.ratio)

+ 2 - 2
pages/user/intent.vue

@@ -116,7 +116,7 @@ export default {
 		// // context.fillText('谨表谢意', (580 * obj.ratio), 680 * obj.ratio)
 		// // context.fillText('谨表谢意', (580 * obj.ratio), 680 * obj.ratio)
 		// context.fillText('荆州市红十字会', 450 * obj.ratio, 900 * obj.ratio);
 		// context.fillText('荆州市红十字会', 450 * obj.ratio, 900 * obj.ratio);
 		context.fillText('识别右边二维码', 108 * obj.ratio, 1090 * obj.ratio);
 		context.fillText('识别右边二维码', 108 * obj.ratio, 1090 * obj.ratio);
-		context.fillText('关注荆州市红十字会', 108 * obj.ratio, 1150 * obj.ratio);
+		context.fillText('关注洪湖市红十字会', 108 * obj.ratio, 1150 * obj.ratio);
 
 
 		// 插入二维码
 		// 插入二维码
 		// console.log(codeX, codeY, codeSize, 999)
 		// console.log(codeX, codeY, codeSize, 999)
@@ -185,7 +185,7 @@ export default {
 				link: 'http://http://jz.red.igxys.com/index/#/pages/form/donaSuccess?money=' + obj.money, // 分享链接
 				link: 'http://http://jz.red.igxys.com/index/#/pages/form/donaSuccess?money=' + obj.money, // 分享链接
 				imgUrl: 'http://http://jz.red.igxys.com/index/#/static/img/thinks.png',
 				imgUrl: 'http://http://jz.red.igxys.com/index/#/static/img/thinks.png',
 				desc: '感谢信',
 				desc: '感谢信',
-				title: '荆州市红十字会',
+				title: '洪湖市红十字会',
 				success: console.log('分享加载成功')
 				success: console.log('分享加载成功')
 			};
 			};
 			console.log('分享加', item);
 			console.log('分享加', item);

+ 311 - 0
pages/user/myFu.vue

@@ -0,0 +1,311 @@
+<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 class="fu-box" v-for="(item, index) in tabItem.orderList" :key='index' @click="toDetail(item)" v-if="item.info.title">
+						<image class="fu-img" :src="item.info.image" mode="aspectFill"></image>
+						<view class="fu-right">
+							<view>
+								<view class="fu-tit">{{ item.info.title }}</view>
+								<view class="fu-text">{{ item.info.info }}</view>
+							</view>
+							<view class="fu-bottom" v-if="tabCurrentIndex == 2 && item.info && item.info.title">
+								<!-- <text class="fu-jifen">+{{ item.info.integral }}积分</text> -->
+								<view class="fu-sczl" v-if="!item.remark" @click.stop="upInfo(item.hid)">上传资料</view>
+								<view class="fu-shenqing" v-if="item.status == 3">公示中</view>
+							</view>
+							<view class="fu-bottom" v-if="tabCurrentIndex == 3 && item.info && item.info.title">
+								<!-- <text class="fu-jifen">+{{ item.info.integral }}积分</text> -->
+								<view class="fu-sczl" @click.stop="upInfo(item.hid, 1)">修改资料</view>
+							</view>
+							<view class="fu-bottom" v-if="tabCurrentIndex !== 2 && tabCurrentIndex !== 3 && tabCurrentIndex !== 4 && item.info && item.info.title ">
+								<view class="fu-shenqing">已有{{ item.info.sales }}人申请</view>
+								<!-- <text class="fu-jifen">+{{ item.info.integral }}积分</text> -->
+							</view>
+							<view class="fu-bottom" v-if="tabCurrentIndex == 4 && item.info && item.info.title ">
+								<view class="fu-shenqing"></view>
+								<text class="fu-yjs">已结束</text>
+							</view>
+							<view class="fu-bottom" v-if="item.info && !item.info.title ">
+								<view class="fu-shenqing"></view>
+								<text class="fu-yjs">该项目已删除</text>
+							</view>
+						</view>
+					</view>
+					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+		
+	</view>
+</template>
+
+<script>
+import { my_enroll } from '@/api/applyHelp.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,
+			navList: [
+				{
+					state: 2,
+					text: '审核中',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 3,
+					text: '已拒绝',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 1,
+					text: '已通过',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 5,
+					text: '公示中',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 4,
+					text: '已结束',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+			],
+		}
+	},
+	onLoad() {
+	},
+	onShow() {
+		if (this.tabCurrentIndex == 0) {
+			let index = this.tabCurrentIndex;
+			this.navList[index].page = 1;
+			this.navList[index].orderList = [];
+			this.navList[index].loadingType = 'more';
+			this.loadData();
+		}
+	},
+	methods: {
+		//swiper 切换
+		changeTab(e) {
+			this.tabCurrentIndex = e.target.current;
+			this.loadData('tabChange');
+		},
+		//顶部tab点击
+		tabClick(index) {
+			this.tabCurrentIndex = index;
+		},
+		loadData(source) {
+			let index = this.tabCurrentIndex;
+			let navItem = this.navList[index];
+			let state = navItem.state;
+			if (source === 'tabChange' && navItem.loaded === true) {
+				//tab切换只有第一次需要加载数据
+				return;
+			}
+			if (navItem.loadingType === 'noMore') {
+				//防止重复加载
+				return;
+			}
+			// 修改当前对象状态为加载中
+			navItem.loadingType = 'loading';
+			my_enroll({
+				page: navItem.page,
+				limit:navItem.limit,
+				type: state,
+			}).then(res => {
+				navItem.orderList = navItem.orderList.concat(res.data.filter(word => !!word.info.title));
+				navItem.page++;
+				if (navItem.limit == res.data.length) {
+					//判断是否还有数据, 有改为 more, 没有改为noMore
+					navItem.loadingType = 'more';
+					return;
+				} else {
+					//判断是否还有数据, 有改为 more, 没有改为noMore
+					navItem.loadingType = 'noMore';
+				}
+				this.$set(navItem, 'loaded', true);
+			}).catch(err => {
+				console.log(err);
+			});
+		},
+		// 上传资料
+		upInfo(id, type) {
+			let url = '/pages/fu/upLoadInfo?id=' + id;
+			if (type) {
+				url += '&type=' + type
+			}
+			uni.navigateTo({
+				url: url
+			})
+		},
+		// 跳转详情
+		toDetail(item) {
+			if (item.remark) {
+				uni.navigateTo({
+					url: '/pages/fu/helpDetail?id=' + item.hid
+				})
+			} else {
+				uni.navigateTo({
+					url: '/pages/fu/fuInfo?id=' + item.hid
+				})
+			}
+				
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+page {
+	height: 100%;
+	background: #F4F5F4;
+}
+.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%;
+			font-size: 15px;
+			color: $font-color-dark;
+			position: relative;
+			&.current {
+				color: $motif-color;
+				&:after {
+					content: '';
+					position: absolute;
+					left: 50%;
+					bottom: 0;
+					transform: translateX(-50%);
+					width: 44px;
+					height: 0;
+					border-bottom: 2px solid $motif-color;
+				}
+			}
+		}
+	}
+	.swiper-box {
+		height: calc(100% - 40px);
+		padding: 20rpx 30rpx;
+	}
+	.list-scroll-content {
+		height: 100%;
+	}
+	.fu-box {
+		padding: 14rpx 20rpx 28rpx 20rpx;
+		background: #FFFFFF;
+		box-shadow: 0px 0px 40rpx 0px rgba(0, 0, 0, 0.06);
+		border-radius: 12rpx;
+		display: flex;
+		align-items: center;
+		margin-bottom: 20rpx;
+		.fu-img {
+			width: 220rpx;
+			height: 182rpx;
+			border-radius: 8rpx;
+		}
+		.fu-right {
+			margin-left: 20rpx;
+			width: 62%;
+			.fu-tit {
+				overflow: hidden;
+				text-overflow: ellipsis;
+				white-space: nowrap;
+				font-size: 36rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #222222;
+			}
+			.fu-text {
+				margin-top: 17rpx;
+				overflow : hidden;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				-webkit-line-clamp: 2;
+				-webkit-box-orient: vertical;
+				font-size: $font-sm;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #666666;
+			}
+			.fu-bottom {
+				margin-top: 20rpx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				.fu-shenqing {
+					font-size: 21rpx;
+					font-family: PingFang;
+					font-weight: 500;
+					color: #FF727E;
+				}
+				.fu-jifen {
+					padding: 0 5rpx;
+					border: 1px solid #FF0000;
+					border-radius: 5rpx;
+					font-size: 21rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #FF0000;
+				}
+				.fu-yjs {
+					font-size: 21rpx;
+					font-family: PingFang;
+					font-weight: 500;
+					color: #999999;
+				}
+				.fu-sczl {
+					padding: 5rpx 17rpx;
+					font-size: 21rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #FFFFFF;
+					background: #FF727E;
+					border-radius: 23rpx;
+				}
+			}
+		}
+	}
+}
+</style>

+ 2 - 2
pages/user/thank.vue

@@ -35,7 +35,7 @@ export default {
 			ran: -1,
 			ran: -1,
 			isStop: true,
 			isStop: true,
 			demo: 0,
 			demo: 0,
-			userName: '荆州XXX公司',
+			userName: '洪湖XXX公司',
 			time: 0,
 			time: 0,
 			itemName: '',
 			itemName: '',
 			pid: 0
 			pid: 0
@@ -388,7 +388,7 @@ export default {
 				link: 'http://http://jz.red.igxys.com/index/#/pages/form/donaSuccess?money=' + obj.money, // 分享链接
 				link: 'http://http://jz.red.igxys.com/index/#/pages/form/donaSuccess?money=' + obj.money, // 分享链接
 				imgUrl: 'http://http://jz.red.igxys.com/index/#/static/img/thinks.png',
 				imgUrl: 'http://http://jz.red.igxys.com/index/#/static/img/thinks.png',
 				desc: '感谢信',
 				desc: '感谢信',
-				title: '荆州市红十字会',
+				title: '洪湖市红十字会',
 				success: console.log('分享加载成功')
 				success: console.log('分享加载成功')
 			};
 			};
 			console.log('分享加', item);
 			console.log('分享加', item);

+ 16 - 3
pages/user/user.vue

@@ -3,7 +3,7 @@
 		<view class="top">
 		<view class="top">
 			<view class="avater">
 			<view class="avater">
 				<image :src="userInfo.avatar" class="avater-img" mode="" v-if="userInfo.avatar"></image>
 				<image :src="userInfo.avatar" class="avater-img" mode="" v-if="userInfo.avatar"></image>
-				<image src="../../static/img/002.png" mode="" v-else></image>
+				<image src="../../static/img/002.png" mode="" v-else class="avater-img"></image>
 			</view>
 			</view>
 			<view class="name-box">
 			<view class="name-box">
 				<view class="name-top">
 				<view class="name-top">
@@ -44,6 +44,15 @@
 					>
 					>
 				</view>
 				</view>
 			</view>
 			</view>
+			<view class="nav-item flex" @click="toMyfu">
+				<view class="item-left flex">
+					<image src="../../static/icon/i10.png" mode="" class="img2"></image>
+					<view class="title">我的帮扶</view>
+				</view>
+				<view class="item-right">
+					>
+				</view>
+			</view>
 			<view class="nav-item flex" @click="commonaddress">
 			<view class="nav-item flex" @click="commonaddress">
 				<view class="item-left flex">
 				<view class="item-left flex">
 					<image src="../../static/icon/i8.png" mode="" class="img3"></image>
 					<image src="../../static/icon/i8.png" mode="" class="img3"></image>
@@ -180,7 +189,11 @@
 					this.is_over = data.is_over
 					this.is_over = data.is_over
 				})
 				})
 			},
 			},
-		
+			toMyfu() {
+				uni.navigateTo({
+					url: '/pages/user/myFu'
+				})
+			},
 			torreco() {
 			torreco() {
 				uni.navigateTo({
 				uni.navigateTo({
 					url: '/pages/applic/rescuerecords'
 					url: '/pages/applic/rescuerecords'
@@ -379,7 +392,7 @@
 	}
 	}
 	.nav-wrapper {
 	.nav-wrapper {
 		width: 678rpx;
 		width: 678rpx;
-		height: 560rpx;
+		// height: 560rpx;
 		background: #FFFFFF;
 		background: #FFFFFF;
 		box-shadow: 0px 2rpx 24rpx 0rpx rgba(0, 0, 0, 0.06);
 		box-shadow: 0px 2rpx 24rpx 0rpx rgba(0, 0, 0, 0.06);
 		border-radius: 20rpx;
 		border-radius: 20rpx;

BIN=BIN
static/icon/i10.png


BIN=BIN
static/images/icon_pick.png


BIN=BIN
static/images/sctp.png


BIN=BIN
static/images/sqyz.png


BIN=BIN
static/tabBar/tab-fu-current.png


BIN=BIN
static/tabBar/tab-fu.png


+ 1 - 0
uni.scss

@@ -10,6 +10,7 @@ $box-shadow-color:#457DBF;//阴影颜色
 $font-color:#457DBF;//字体颜色
 $font-color:#457DBF;//字体颜色
 $font-color-spec: #457DBF;//可操作文字颜色
 $font-color-spec: #457DBF;//可操作文字颜色
 $background-color:#457DBF;//按钮背景颜色
 $background-color:#457DBF;//按钮背景颜色
+$motif-color: #FF727E;
 // 小图标大小
 // 小图标大小
 $uni-img-size-base:36rpx;
 $uni-img-size-base:36rpx;
 /* 文字尺寸 */
 /* 文字尺寸 */

+ 26 - 19
utils/loginUtils.js

@@ -34,28 +34,31 @@ export function interceptor() {
 	let pageUrl = '/' + pages.route;
 	let pageUrl = '/' + pages.route;
 	let url = '/pages/login/login'
 	let url = '/pages/login/login'
 	// #ifdef H5
 	// #ifdef H5
-	// 判断是否为公众号调用微信授权登录
-	// let ua = 
 
 
-	if (navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger') {
-		let weichatBrowser = uni.getStorageSync('weichatBrowser');
-		if (weichatBrowser) {
-			url = '/pages/public/wxLogin';
-		}
-		if (pageUrl != url) {
-			uni.navigateTo({
-				url
-			})
-		}
+	// if (navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger') {
+	// 	let weichatBrowser = uni.getStorageSync('weichatBrowser');
+	// 	if (weichatBrowser) {
+	// 		url = '/pages/public/wxLogin';
+	// 	}
+	// 	if (pageUrl != url) {
+	// 		uni.navigateTo({
+	// 			url
+	// 		})
+	// 	}
 
 
-	} else {
-		uni.showModal({
-			title: '提示',
-			content: '请使用微信扫码!',
-		})
+	// } else {
+	// 	uni.showModal({
+	// 		title: '提示',
+	// 		content: '请使用微信扫码!',
+	// 	})
+	// }
+	
+	// 判断是否为公众号调用微信授权登录
+	let weichatBrowser = uni.getStorageSync('weichatBrowser');
+	if (weichatBrowser) {
+		url = '/pages/public/wxLogin';
 	}
 	}
 
 
-
 	// #endif
 	// #endif
 	// #ifdef MP-WEIXIN
 	// #ifdef MP-WEIXIN
 	url = '/pages/public/wxLogin';
 	url = '/pages/public/wxLogin';
@@ -65,7 +68,11 @@ export function interceptor() {
 		})
 		})
 	}
 	}
 	// #endif
 	// #endif
-	
+	if (pageUrl != url) {
+		uni.navigateTo({
+			url
+		})
+	}
 }
 }
 
 
 // 保存页面
 // 保存页面

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio