shang пре 5 месеци
родитељ
комит
7623dc2906

+ 4 - 2
config/api.js

@@ -12,7 +12,8 @@ let methodsToken = ['profile', 'refreshUser', 'wxLogin', 'changeMobile', 'addCar
 	'getPatrolTaskDetails', 'getContentDetail', 'examineVolunteer', 'userManageRegionCrAuth', 'applyVolunteer',
 	'getPhoneNumber', 'editApplyVolunteer', 'mobileBindVolunteer', 'getTeamDetails', 'examineTask', 'removeMemberm',
 	'getScoreLog', 'rankingList', 'getMainBodyColumnContentList', 'regionData', 'cityData', 'checkIn',
-	'getMainBodyUser', 'getUserContribute', 'getUserHonor', 'submitTask', 'exportPatrolRecord'
+	'getMainBodyUser', 'getUserContribute', 'getUserHonor', 'submitTask', 'exportPatrolRecord', 'userManageCrAuth',
+	'getDevices'
 ];
 const post = (method, data, callback, type, orgurl) => {
 	let userToken = '';
@@ -406,7 +407,8 @@ export const getChannel = async (params = {}) => await syncpost('get_channel', '
 export const myArchives = async (params = {}) => await syncpost('my', '/addons/cms/api.archives/my', params);
 // 文物管理相关
 //场馆详情页获取管理员权限
-export const adminCrAuth = (data, callback) => post('adminCrAuth', data, callback, 'wuyuan/admin');
+export const userManageCrAuth = (data, callback) => post('userManageCrAuth', data, callback, 'auth/user_manage_cr');
+export const getDevices = (data, callback) => post('getDevices', data, callback, 'zhoujie/device');
 //取文巡查记录
 export const getPatrolLog = (data, callback) => post('getPatrolLog', data, callback, 'wuyuan/volunteer');
 //取文物详情

+ 1 - 1
config/common.js

@@ -560,7 +560,7 @@ function checkMobile(mobile) {
  * 用户信息
  */
 function userInfo() {
-	let user = db.get('user')
+	let user = db.get('auth')
 	if (user) {
 		return user
 	} else {

+ 29 - 0
index_fenbao/GuanLi/XiangQing.vue

@@ -19,7 +19,18 @@
 		<view class="box">
 			<view class="" style="display: flex; align-items: center; margin-left: 28rpx; margin-top: 30rpx">
 				<view style="color: #640000; margin-right: 20rpx; font-weight: 700; font-size: 36rpx">{{ list.title }}</view>
+
+				<view v-if="showadmin" class="margin-right">
+					<u-button
+						type="error"
+						icon="setting"
+						text="文物管理"
+						size="small"
+						@click="$common.navigateTo('/index_fenbao/GuanLi/online-patrol?code=' + list.code + '&title=' + list.title)"
+					></u-button>
+				</view>
 			</view>
+
 			<view class="info">
 				<view style="width: 40%">始建年代: {{ list.age ? list.age : '暂无描述' }}</view>
 
@@ -142,6 +153,7 @@ export default {
 		return {
 			list: [],
 			association: [],
+			showadmin: false,
 			imageList: ['https://huli-app.wenlvti.net/app_static/WenWuGuanJia/image/sh_lb1.jpg']
 		};
 	},
@@ -184,6 +196,23 @@ export default {
 					if (res.data.images.length > 0) {
 						that.imageList = res.data.images;
 					}
+
+					let auth = that.$common.userInfo();
+					//获取用户权限
+					if (!(auth === 'undefined' || auth === '' || auth === [] || auth === null) && auth.token !== 'undefined') {
+						that.$api.userManageCrAuth(
+							{
+								main_body_id: 1,
+								cr_code: res.data.code
+							},
+							function (res) {
+								console.log(res);
+								if (res.data === true) {
+									that.showadmin = true;
+								}
+							}
+						);
+					}
 				}
 			);
 		},

+ 21 - 0
index_fenbao/GuanLi/cr-video.vue

@@ -0,0 +1,21 @@
+<template>
+	<view>
+		<web-view :fullscreen="false" :src="Url" :update-title="true"></web-view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			Url: ''
+		};
+	},
+	onLoad(option) {
+		this.Url = decodeURIComponent(option.url);
+	},
+	methods: {}
+};
+</script>
+
+<style></style>

+ 255 - 0
index_fenbao/GuanLi/online-patrol.vue

@@ -0,0 +1,255 @@
+<template>
+	<view class="body">
+		<u-navbar
+			:title="title + '文物管理'"
+			bgColor="rgba(255,255,255,0.3)"
+			:placeholder="true"
+			:autoBack="true"
+			leftText="返回"
+			titleStyle="font-weight:bold;color:#7a5831"
+		></u-navbar>
+		<view class="box">
+			<view>
+				<view class="justify-between" style="color: #940000; font-size: 36rpx; font-weight: bold; margin-left: 24rpx; margin-top: 40rpx">
+					<view>文物监控</view>
+					<view class="gui-margin">[点击预览]</view>
+				</view>
+				<view class="gui-card-list">
+					<view class="gui-card-item" v-for="(item, index) in device_list" :key="index">
+						<view class="gui-card-img" @click="openVideo(item.device_code)">
+							<image style="width: 340rpx; height: 240rpx" :src="item.image"></image>
+						</view>
+						<text class="gui-card-title gui-block-text gui-text gui-primary-color">{{ item.position }}</text>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+let that = this;
+var md5 = require('@/static/js/md5.js');
+export default {
+	data() {
+		return {
+			flag: false,
+			code: '350206-0091',
+			title: '',
+			device_list: {}
+		};
+	},
+	onLoad(e) {
+		that = this;
+
+		console.log('传递的参数:');
+		//当用户点击第一个的时候 跳转到详情页 通过id判断用户点击的是哪一个 根据用户点击的 id 去后端查询这个数据
+		console.log();
+		if (e.code) this.code = e.code;
+		if (e.title) this.title = e.title;
+
+		let auth = that.$common.userInfo();
+		//获取用户权限
+		if (!(auth === 'undefined' || auth === '' || auth === [] || auth === null) && auth.token !== 'undefined') {
+			this.$api.userManageCrAuth(
+				{
+					main_body_id: 1,
+					cr_code: this.code
+				},
+				function (res) {
+					console.log(res);
+					if (res.data !== true) {
+						that.$common.successToShow('暂无该权限');
+						return;
+					}
+				}
+			);
+		}
+
+		this.getDevices();
+	},
+	methods: {
+		opens() {
+			this.flag = !this.flag;
+		},
+		closes() {
+			this.flag = !this.flag;
+		},
+		getDevices() {
+			this.$api.getDevices(
+				{
+					code: this.code
+				},
+				function (res) {
+					console.log(res);
+					that.device_list = res.data;
+				}
+			);
+		},
+		openGuide(name, address, latitude, longitude) {
+			//  微信小程序
+			// #ifdef MP-WEIXIN
+			//console.log('走的这里', item);
+			wx.openLocation({
+				latitude: +latitude, // 纬度
+				longitude: +longitude, // 经度
+				name: name, // 地址名称
+				address: address, // 详细地址
+				success: function (r) {
+					console.log(r);
+				},
+				fail: function (res) {
+					console.log('拉起失败啦', res);
+				}
+			});
+			// #endif
+		},
+		openVideo(camera_index_code) {
+			console.log(camera_index_code);
+			var t = Date.parse(new Date()) / 1000;
+			//md5
+			var key = md5.md5(t + '@feichenghuli');
+
+			this.webViedoUrl = encodeURIComponent('https://wenwu.16fw.cn/hik_monitor/mobile_monitor.html?t=' + t.toString() + '&key=' + key + '&index_code=' + camera_index_code);
+			console.log(this.webViedoUrl);
+			this.$common.navigateTo('/index_fenbao/GuanLi/cr-video?url=' + this.webViedoUrl);
+			return;
+
+			uni.request({
+				url: 'https://huli-app.wenlvti.net/api/sports/admin/getPreviewUrl',
+				data: {
+					camera_index_code: camera_index_code
+				},
+				header: {
+					'content-type': 'application/x-www-form-urlencoded'
+				},
+				method: 'POST',
+				success: function (res) {
+					console.log(res);
+					that.videoUrl = res.data.data.url;
+					let url = that.videoUrl;
+					console.log(url);
+					url = url.replace('http://192.168.10.10:83', 'https://wenwu.16fw.cn/m3u8');
+					that.videoUrl = url;
+					console.log(that.videoUrl);
+					that.showVideo = true;
+				},
+				fail: function (err) {}
+			});
+		}
+	}
+};
+</script>
+
+<style>
+.box .info {
+	display: flex;
+	justify-content: space-between;
+	flex-wrap: wrap;
+	margin: 20rpx;
+	margin-top: 8px;
+}
+
+.box .info > view {
+	margin-top: 10px;
+	font-size: 14px;
+	margin-left: 4px;
+	color: #940000;
+}
+
+.box .u-info {
+	margin: 20rpx;
+}
+
+.box .text {
+	margin: 20rpx;
+}
+
+.box {
+	height: auto;
+	width: 100%;
+	background-image: url('https://huli-app.wenlvti.net/app_static/wuyuan/static/shouhu/wyj-feiyi3-001.png');
+	background-size: 100% 100%;
+	background-attachment: fixed;
+	border-radius: 16px 16px 0 0;
+	position: relative;
+	top: -20px;
+	padding-top: 10rpx;
+}
+
+.head {
+	height: 6px;
+	width: 60px;
+	background-color: darkgray;
+	text-align: center;
+	margin: 0 auto;
+	margin-top: 10px;
+	border-radius: 4px;
+}
+
+.body {
+	background-image: url('https://huli-app.wenlvti.net/app_static/wuyuan/static/wenwu/wyj-jiemian1-BJ.png');
+	background-size: 100% 100%;
+	background-attachment: fixed;
+	padding-bottom: 50rpx;
+	height: auto;
+}
+
+.boxs > view {
+	overflow: hidden;
+	width: 355px;
+	height: 160px;
+	border-radius: 5px;
+	margin-bottom: 30px;
+}
+
+.text-img-img {
+	display: flex;
+	overflow: none;
+	overflow-x: scroll;
+	margin-top: 5rpx;
+}
+
+.text-img-img > view {
+	color: #940000;
+	margin-right: 10px;
+}
+
+.text-img-info {
+	color: #940000;
+	display: flex;
+	justify-content: space-between;
+}
+
+.text-img {
+	margin: 14px 10px;
+}
+
+.guidance {
+	background-color: #f8f8f8;
+	width: 100%;
+	height: 100rpx;
+	line-height: 1.5;
+}
+
+.guidICON {
+	margin-top: 3rpx;
+}
+.gui-card-list {
+	width: 95%;
+	display: flex;
+	flex-wrap: wrap;
+	justify-content: space-between;
+	margin: auto;
+	margin-top: 20rpx;
+}
+.justify-between {
+	width: 95%;
+	display: flex;
+	flex-wrap: wrap;
+	justify-content: space-between;
+}
+.gui-card-item {
+	margin-bottom: 30rpx;
+}
+</style>

+ 130 - 0
index_fenbao/XuanJiangYuan/XuanJiangYuan.vue

@@ -0,0 +1,130 @@
+<template>
+	<view class="box">
+		<u-navbar title="文物宣讲员列表" autoBack :placeholder="true" bgColor="#fee1b9"></u-navbar>
+		<view class="ban">
+			<view style="margin-top: 20rpx">
+				<u-search placeholder="搜索讲员" shape="square" :showAction="false" v-model="keyword"></u-search>
+			</view>
+			<!-- tab -->
+			<view class="tab_box">
+				<view @click="TabBtn(index)" class="tab_item" v-for="(item, index) in tabList" :key="index" :class="{ tab_item_active: index == tabIndex }">
+					{{ item.name }}
+				</view>
+			</view>
+			<!--  -->
+			<view class="xjy_box" @click="xqBtn">
+				<img src="https://img2.baidu.com/it/u=443975182,626431415&fm=253&fmt=auto&app=120&f=JPEG?w=627&h=418" class="img" />
+				<view style="margin-left: 60rpx">
+					<view class="xjy_name">徐有群</view>
+					<view class="xjy_addres">故宫博物院</view>
+					<view class="ckxq">查看详情</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			tabIndex: 0,
+			keyword: '',
+			tabList: [
+				{
+					name: '区域'
+				},
+				{
+					name: '等级'
+				},
+				{
+					name: '评分'
+				}
+			]
+		};
+	},
+	methods: {
+		TabBtn(i) {
+			this.tabIndex = i;
+		},
+		xqBtn() {
+			uni.navigateTo({
+				url: '/index_fenbao/XuanJiangYuan/xjy_XiangQing'
+			});
+		}
+	}
+};
+</script>
+
+<style>
+.box {
+	height: auto;
+	width: 100%;
+	padding-bottom: 50rpx;
+	background-image: url('https://huli-app.wenlvti.net/app_static/minnanhun/image/gj_bg.png');
+	background-repeat: repeat-y;
+	background-size: 100%;
+}
+.ban {
+	width: 92%;
+	margin: auto;
+}
+.tab_box {
+	display: flex;
+	align-items: center;
+	margin-top: 20rpx;
+}
+.tab_item {
+	width: 90rpx;
+	height: 60rpx;
+	line-height: 60rpx;
+	text-align: center;
+	color: black;
+	border-radius: 10rpx;
+	background-color: #ffffff;
+}
+.tab_item_active {
+	color: #794923 !important;
+	background-color: #faefe6 !important;
+}
+.tab_item:nth-child(2) {
+	margin-left: 10rpx;
+}
+.tab_item:nth-child(3) {
+	margin-left: 10rpx;
+}
+.xjy_box {
+	display: flex;
+	align-items: center;
+	width: 100%;
+	height: 220rpx;
+	border-radius: 10rpx;
+	padding: 20rpx 20rpx 20rpx 50rpx;
+	margin-top: 20rpx;
+	background-color: #fff0e3;
+}
+.img {
+	width: 100rpx;
+	height: 100rpx;
+	border-radius: 50%;
+}
+.xjy_name {
+	color: black;
+	font-size: 30rpx;
+}
+.xjy_addres {
+	font-size: 26rpx;
+	color: #6b5e49;
+	/* margin-top: 10rpx; */
+}
+.ckxq {
+	width: 140rpx;
+	height: 60rpx;
+	line-height: 60rpx;
+	text-align: center;
+	color: #ffffff;
+	margin-top: 20rpx;
+	border-radius: 10rpx;
+	background-color: #e55d45;
+}
+</style>

+ 153 - 0
index_fenbao/XuanJiangYuan/bm_page.vue

@@ -0,0 +1,153 @@
+<template>
+	<view class="box">
+		<u-navbar title="翔安澳洲线" autoBack :placeholder="true" bgColor="#fee1b9"></u-navbar>
+		<view class="ban">
+			<view class="" style="margin-bottom: 30rpx">
+				<u-swiper :list="bannerlist" imgMode="aspectFill" :height="180" :autoplay="true" :circular="true"></u-swiper>
+			</view>
+			<!--  -->
+			<view class="xq_tit">荻花洲起点 - 澳头终点 澳洲线介绍</view>
+			<view class="xq_js">落日余晖千百态,浏江古渡荻花洲。傍晚海风习习的海滩上,露营的家庭、玩沙的孩童、拍夕阳的情侣,都为惬意的海湾悠闲添上了几分松弛感。</view>
+			<!-- 报名 -->
+			<view @click="goRegister" class="bm_btn">立即报名</view>
+			<view class="ld">活动详情</view>
+			<view class="hd_xq">
+				<div>
+					<text>活动时间:</text>
+					<text>2024年12月18日</text>
+				</div>
+				<div>
+					<text>活动起点:</text>
+					<text>翔安区荻花洲</text>
+				</div>
+				<div>
+					<text>报名费用:</text>
+					<text>免费</text>
+				</div>
+				<div style="margin-bottom: 40rpx">
+					<text>活动流程:</text>
+					<text>...</text>
+				</div>
+			</view>
+			<view class="ld">活动日程</view>
+			<view class="rc_box">
+				<view style="margin-top: 8rpx">
+					<u-icon name="clock" color="#57bdc3" size="12"></u-icon>
+				</view>
+				<view style="margin-left: 30rpx; color: black">
+					<view class="">起跑时间</view>
+					<view class="star_time">8:00 AM</view>
+				</view>
+			</view>
+			<!--  -->
+			<view class="rc_box">
+				<view class="yuan"></view>
+				<view style="margin-left: 30rpx; color: black">
+					<view class="">路线站点</view>
+					<view class="star_time">沿途站点</view>
+				</view>
+			</view>
+			<!--  -->
+			<view class="rc_box">
+				<view class="yuan"></view>
+				<view style="margin-left: 30rpx; color: black">
+					<view class="">文物讲解</view>
+					<view class="star_time">每个站点的文物讲解</view>
+				</view>
+			</view>
+			<!--  -->
+			<view class="rc_box">
+				<view style="margin-top: 8rpx">
+					<u-icon name="clock" color="#57bdc3" size="12"></u-icon>
+				</view>
+				<view style="margin-left: 30rpx; color: black">
+					<view class="">终点庆祝</view>
+					<view class="star_time">8:00 AM</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			bannerlist: ['https://img2.baidu.com/it/u=443975182,626431415&fm=253&fmt=auto&app=120&f=JPEG?w=627&h=418']
+		};
+	},
+	methods: {
+		goRegister() {
+			uni.navigateTo({
+				url: '/index_fenbao/XuanJiangYuan/xq_page'
+			});
+		}
+	}
+};
+</script>
+
+<style>
+.box {
+	height: auto;
+	width: 100%;
+	padding-bottom: 50rpx;
+	background-image: url('https://huli-app.wenlvti.net/app_static/minnanhun/image/gj_bg.png');
+	background-repeat: repeat-y;
+	background-size: 100%;
+}
+.ban {
+	width: 92%;
+	margin: auto;
+}
+.xq_tit {
+	color: black;
+	font-size: 32rpx;
+	font-weight: 700;
+}
+.xq_js {
+	color: black;
+	font-size: 28rpx;
+	margin-top: 10rpx;
+	line-height: 40rpx;
+	height: 160rpx;
+	overflow: scroll;
+}
+.bm_btn {
+	width: 100%;
+	height: 80rpx;
+	font-size: 30rpx;
+	line-height: 80rpx;
+	text-align: center;
+	color: #ffffff;
+	border-radius: 10rpx;
+	background-color: #fb5a02;
+	margin-bottom: 60rpx;
+}
+.ld {
+	font-size: 30rpx;
+	font-weight: 700;
+	margin-bottom: 20rpx;
+}
+.hd_xq {
+	color: black;
+	line-height: 40rpx;
+	font-size: 26rpx;
+}
+.rc_box {
+	display: flex;
+	margin-left: 10rpx;
+	margin-top: 20rpx;
+}
+.star_time {
+	color: #928f8f;
+	font-size: 26rpx;
+	line-height: 45rpx;
+}
+.yuan {
+	width: 16rpx;
+	height: 16rpx;
+	border-radius: 50%;
+	margin-top: 10rpx;
+	border: 2rpx solid #57bdc3;
+}
+</style>

+ 103 - 0
index_fenbao/XuanJiangYuan/ck_page.vue

@@ -0,0 +1,103 @@
+<template>
+  <view class="box">
+    <u-navbar title="添加乘客" autoBack :placeholder="true" bgColor="#fee1b9"></u-navbar>
+    <view class="ban">
+      <view class="form-group" v-for="(item, index) in passengers" :key="index">
+        <text>成员 {{ index + 1 }}</text>
+        <u-input placeholder="请输入姓名" v-model="item.name" border="surround" />
+        <u-input placeholder="请输入手机号" v-model="item.mobile" border="surround" />
+        <u-input placeholder="请输入年龄" v-model="item.age" border="surround" />
+        <button type="default" @click="removePassenger(index)" v-if="passengers.length > 0">删除乘客</button>
+      </view>
+      <view @click="addPassenger" class="tjbm_btn">添加乘客</view>
+      <view @click="submit" class="tjbm_btn">提交</view>
+    </view>
+  </view>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      passengers: [
+        { name: '', mobile: '', age: '' }
+      ]
+    };
+  },
+  onLoad() {
+    // 从本地存储中获取乘客信息
+    const storedPassengers = uni.getStorageSync('passengers');
+    if (storedPassengers) {
+      this.passengers = storedPassengers;
+    } else {
+      // 如果没有存储的乘客信息,则初始化一个空的乘客对象
+      this.passengers = [{ name: '', mobile: '', age: '' }];
+    }
+  },
+  methods: {
+    addPassenger() {
+      this.passengers.push({ name: '', mobile: '', age: '' });
+    },
+    removePassenger(index) {
+      this.passengers.splice(index, 1);
+      // 更新本地存储
+      uni.setStorageSync('passengers', this.passengers);
+    },
+    submit() {
+      console.log('提交的乘客信息:', this.passengers);
+      // 将乘客信息保存到本地存储中
+      uni.setStorageSync('passengers', this.passengers);
+
+      // 返回上一个页面
+      uni.navigateBack({
+        delta: 1
+      });
+    }
+  }
+};
+</script>
+
+<style scoped>
+.box {
+  min-height: 100%;
+  height: auto;
+  width: 100%;
+  padding-bottom: 50rpx;
+  background-image: url('https://huli-app.wenlvti.net/app_static/minnanhun/image/gj_bg.png');
+  background-repeat: repeat-y;
+  background-size: 100%;
+}
+
+.ban {
+  width: 92%;
+  margin: auto;
+}
+
+.form-group {
+  margin-bottom: 20px;
+  border: 1px solid #ccc;
+  padding: 10px;
+  border-radius: 5px;
+}
+
+button {
+  margin-top: 10px;
+}
+
+.u-input.data-v-113bc24f {
+  background-color: #fee1b9 !important;
+  margin-top: 20rpx;
+}
+
+.tjbm_btn {
+  width: 100%;
+  height: 80rpx;
+  font-size: 30rpx;
+  line-height: 80rpx;
+  text-align: center;
+  color: #ffffff;
+  border-radius: 10rpx;
+  background-color: #fb5a02;
+  margin-top: 50rpx;
+}
+</style>

+ 253 - 0
index_fenbao/XuanJiangYuan/index.vue

@@ -0,0 +1,253 @@
+<template>
+	<view class="box">
+		<u-navbar title="厦门文物跑" :placeholder="true" bgColor="#ffe1b8" autoBack></u-navbar>
+		<view class="ban">
+			<view @click="goSignup" class="" style="margin-bottom: 30rpx">
+				<u-swiper :list="bannerlist" imgMode="aspectFill" :height="150" :autoplay="true" :circular="true"></u-swiper>
+			</view>
+			<!-- 报名按钮 -->
+			<view class="bm_box" @click="goSignup">
+				<view class="">
+					<view class="bm_js">文物跑,聆听历史的声音</view>
+					<view class="bm_js2">跑出文化 跑出健康、跑出生态、跑出...</view>
+				</view>
+				<view class="goto">立即报名</view>
+			</view>
+			<!-- 简介 -->
+			<view class="ld">活动简介</view>
+			<view class="jj_box">
+				厦门文物跑活动旨在打造一场具有文化认同感的跑步之旅,号召公众关注及保护珍贵文物古迹,用脚步丈量城市历史,打造全民守护历史记忆的社会正能量。迎着第一缕曙光,从各自文物游线路起点出发,按照规划路线,跑..
+			</view>
+			<!-- 亮点 -->
+			<view class="ld">活动亮点</view>
+			<view class="list_box">
+				<view class="list_item" v-for="item in 4" :key="item">
+					<img
+						style="width: 100%; height: 200rpx; border-radius: 10rpx"
+						src="https://img2.baidu.com/it/u=443975182,626431415&fm=253&fmt=auto&app=120&f=JPEG?w=627&h=418"
+					/>
+					<view class="item_tit">专属路线</view>
+				</view>
+			</view>
+			<!-- 优秀讲员 -->
+			<view class="xjy" @click="gdxjyBtn">
+				<view class="ld">优秀宣讲员</view>
+				<view class="gd">更多</view>
+			</view>
+			<view class="list_box">
+				<view @click="xqBtn" class="list_item" v-for="item in 4" :key="item">
+					<img
+						style="width: 100%; height: 200rpx; border-radius: 10rpx"
+						src="https://img2.baidu.com/it/u=443975182,626431415&fm=253&fmt=auto&app=120&f=JPEG?w=627&h=418"
+					/>
+					<view class="item_name">徐有群</view>
+				</view>
+			</view>
+			<!-- 优秀讲员 -->
+			<view class="xjy">
+				<view class="ld">精彩回顾</view>
+				<view class="gd">更多</view>
+			</view>
+			<scroll-view scroll-x enable-flex class="scroll-view_H" type="list">
+				<view class="goods-item" v-for="item in 6" :key="item">
+					<image class="img" style="" src="http://t13.baidu.com/it/u=2921758692,2069247658&fm=224&app=112&f=JPEG?w=500&h=500" />
+					<view style="margin-left: 20rpx">
+						<view>故事</view>
+						<view class="gs_js">精彩瞬间</view>
+					</view>
+				</view>
+			</scroll-view> 
+			<!-- 底部logo -->
+			<view class="btm_box"> 
+				<view class="">
+					<image src="/static/img/wx.png" class="btn_img" />
+					<image src="/static/img/wx1.png" class="btn_img" />
+					<image src="/static/img/wx2.png" class="btn_img" />
+					
+					
+				</view>
+				<view class="">
+					@ 2025 厦门文物管家 保留所有权利
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+let that;
+export default {
+	onLoad(option) {
+		that = this;
+	},
+	data() {
+		return {
+			bannerlist: ['https://img2.baidu.com/it/u=443975182,626431415&fm=253&fmt=auto&app=120&f=JPEG?w=627&h=418']
+		};
+	},
+	/* 页面触底 */
+	onReachBottom() {
+		console.log('触底了');
+	},
+	methods: {
+		// 报名
+		goSignup() {
+			uni.navigateTo({
+				url: '/index_fenbao/XuanJiangYuan/bm_page'
+			});
+		},
+		// 更多讲员
+		gdxjyBtn() {
+			uni.navigateTo({
+				url: '/index_fenbao/XuanJiangYuan/XuanJiangYuan'
+			});
+		},
+
+		xqBtn() {
+			uni.navigateTo({
+				url: '/index_fenbao/XuanJiangYuan/xjy_XiangQing'
+			});
+		}
+	}
+};
+</script>
+
+<style>
+/deep/.u-swiper-indicator__wrapper__dot--active {
+	width: 5px !important;
+}
+.box {
+	height: auto;
+	width: 100%;
+	padding-bottom: 50rpx;
+	background-image: url('https://huli-app.wenlvti.net/app_static/minnanhun/image/gj_bg.png');
+	background-repeat: repeat-y;
+	background-size: 100%;
+}
+
+.ban {
+	position: relative;
+	width: 92%;
+	margin: auto;
+}
+.bm_box {
+	position: absolute;
+	display: flex;
+	width: 100%;
+	top: 200rpx;
+	justify-content: space-around;
+}
+.bm_js {
+	font-size: 30rpx;
+	color: #ffe1b8;
+}
+.bm_js2 {
+	font-size: 26rpx;
+	color: #ffe1b8;
+}
+.goto {
+	width: 150rpx;
+	height: 70rpx;
+	line-height: 70rpx;
+	color: #ffffff;
+	text-align: center;
+	border-radius: 10rpx;
+	background-color: #fb5903;
+}
+.ld {
+	font-size: 30rpx;
+	font-weight: 700;
+	margin-bottom: 20rpx;
+}
+.list_box {
+	display: flex;
+	flex-wrap: wrap;
+	justify-content: space-between;
+	margin-bottom: 30rpx;
+}
+.list_item {
+	width: 330rpx;
+	height: 270rpx;
+	margin-bottom: 30rpx;
+	border-radius: 10rpx;
+	background-color: #ffe1b8;
+}
+.item_tit {
+	margin-top: 8rpx;
+	margin-left: 20rpx;
+}
+.jj_box {
+	margin-top: 20rpx;
+	font-size: 28rpx;
+	height: 230rpx;
+	overflow: scroll;
+}
+.item_name {
+	text-align: center;
+	margin-top: 8rpx;
+}
+.xjy {
+	display: flex;
+	margin-bottom: 20rpx;
+	justify-content: space-between;
+}
+.xjy .gd {
+	width: 110rpx;
+	height: 60rpx;
+	line-height: 60rpx;
+	margin-top: -2rpx;
+	text-align: center;
+	border-radius: 30rpx;
+	color: #ffffff;
+	background-color: #f47a1a;
+}
+.good-hot {
+	padding: 16rpx;
+}
+
+.scroll-view_H {
+	width: 100%;
+	white-space: nowrap;
+	height: 480rpx;
+	flex-direction: row;
+}
+..scroll-view_H {
+	white-space: nowrap; /* 确保子元素在同一行显示 */
+	width: 100%; /* 设置 scroll-view 的宽度 */
+}
+
+.scroll-view_H .goods-item {
+	display: inline-block; /* 使用 inline-block 确保子元素在同一行显示 */
+	width: 450rpx;
+	height: 400rpx;
+	border-radius: 10rpx;
+	flex-direction: column;
+	background-color: #ffe1b8;
+	margin-right: 20rpx; /* 添加右边距,最后一个子元素的右边距为 0 */
+}
+
+.scroll-view_H .goods-item:last-child {
+	margin-right: 0;
+}
+
+.goods-item .img {
+	width: 100%;
+	height: 300rpx;
+	border-radius: 10rpx;
+}
+
+.gs_js {
+	font-size: 28rpx;
+	color: #aba89a;
+	margin-top: 10rpx;
+}
+.btm_box{
+	text-align: center;
+	font-size: 26rpx;
+}
+.btn_img{
+	
+	width: 40rpx;
+	height: 40rpx;
+}
+</style>

+ 169 - 0
index_fenbao/XuanJiangYuan/xjy_XiangQing.vue

@@ -0,0 +1,169 @@
+<template>
+	<view class="box">
+		<u-navbar title="宣讲员介绍" autoBack :placeholder="true" bgColor="#fee1b9"></u-navbar>
+		<view class="ban">
+			<view class="top_box">
+				<img src="https://img2.baidu.com/it/u=443975182,626431415&fm=253&fmt=auto&app=120&f=JPEG?w=627&h=418" class="img" />
+				<view class="name_box">
+					<view class="">徐有群</view>
+					<view class="name_js">男,来自福建厦门,擅长中国历史文物讲解</view>
+				</view>
+			</view>
+			<view class="xxjs">
+				徐有群,男,来自福建厦门,擅长中国古代历史文物的讲解。他在多次大型展览中担任讲解员,深受观众喜爱。李明不仅对文物有深入的研究,还能生动地讲述文物背后的故事使观众在轻松愉快的氛围中了解历史。
+			</view>
+			<view class="" style="display: flex">
+				<img class="left_img" src="https://img2.baidu.com/it/u=443975182,626431415&fm=253&fmt=auto&app=120&f=JPEG?w=627&h=418" style="" />
+
+				<view class="">
+					<view class="">
+						<img src="https://img2.baidu.com/it/u=443975182,626431415&fm=253&fmt=auto&app=120&f=JPEG?w=627&h=418" class="img_js" />
+					</view>
+
+					<view class="">
+						<img src="https://img2.baidu.com/it/u=443975182,626431415&fm=253&fmt=auto&app=120&f=JPEG?w=627&h=418" class="img_js" />
+					</view>
+				</view>
+			</view>
+			<!--  -->
+			<view class="ld">历史讲解</view>
+			<scroll-view scroll-x enable-flex class="scroll-view_H" type="list">
+				<view class="goods-item" v-for="item in 6" :key="item">
+					<image class="img" style="" src="http://t13.baidu.com/it/u=2921758692,2069247658&fm=224&app=112&f=JPEG?w=500&h=500" />
+					<view style="margin-left: 20rpx">
+						<view>故事</view>
+						<view class="gs_js">精彩瞬间</view>
+					</view>
+				</view>
+			</scroll-view>
+			<view class="ld">用户评价</view>
+			<view class="">
+				<view class="top_box">
+					<img src="https://img2.baidu.com/it/u=443975182,626431415&fm=253&fmt=auto&app=120&f=JPEG?w=627&h=418" class="img" />
+					<view class="name_box">
+						<view class="">
+							赵丽
+							<view class="" style="margin-top: 6rpx; display: flex; align-items: center">
+								<u-icon v-for="item in 5" :key="item" name="star-fill" color="#86827c" size="12"></u-icon>
+								<view class="name_js" style="margin-left: 6rpx; font-size: 22rpx">2023-5-13</view>
+							</view>
+						</view>
+					</view>
+				</view>
+				<view class="" style="margin-top: 10rpx; font-size: 26rpx">讲解生动形象非常生动有趣,内容丰富,值得推荐!</view>
+				<view class="icon_box" style="">
+					<u-icon name="thumb-up" color="#86827c" size="20"></u-icon>
+					<u-icon name="thumb-down" color="#86827c" size="20"></u-icon>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {};
+	},
+	methods: {}
+};
+</script>
+
+<style>
+.box {
+	height: auto;
+	width: 100%;
+	padding-bottom: 50rpx;
+	background-image: url('https://huli-app.wenlvti.net/app_static/minnanhun/image/gj_bg.png');
+	background-repeat: repeat-y;
+	background-size: 100%;
+}
+.ban {
+	width: 92%;
+	margin: auto;
+}
+.img {
+	width: 80rpx;
+	height: 80rpx;
+	border-radius: 50%;
+}
+.top_box {
+	display: flex;
+	margin-top: 10rpx;
+}
+.name_box {
+	margin-left: 30rpx;
+}
+.name_js {
+	color: #8a8787;
+	font-size: 24rpx;
+	margin-top: 10rpx;
+}
+.xxjs {
+	margin-top: 20rpx;
+	text-indent: 2em;
+	color: black;
+	font-size: 28rpx;
+	line-height: 40rpx;
+	margin-bottom: 26rpx;
+}
+.img_js {
+	width: 330rpx;
+	height: 200rpx;
+	border-radius: 4rpx 10rpx 4rpx 10rpx;
+}
+.left_img {
+	width: 330rpx;
+	height: 400rpx;
+	margin-right: 20rpx;
+	border-radius: 10rpx 4rpx 4rpx 10rpx;
+}
+.scroll-view_H {
+	width: 100%;
+	white-space: nowrap;
+	/* height: 480rpx; */
+	flex-direction: row;
+}
+.scroll-view_H {
+	white-space: nowrap; /* 确保子元素在同一行显示 */
+	width: 100%; /* 设置 scroll-view 的宽度 */
+}
+
+.scroll-view_H .goods-item {
+	display: inline-block; /* 使用 inline-block 确保子元素在同一行显示 */
+	width: 320rpx;
+	height: 400rpx;
+	border-radius: 10rpx;
+	flex-direction: column;
+	background-color: #fcedd6;
+	margin-right: 20rpx; /* 添加右边距,最后一个子元素的右边距为 0 */
+}
+
+.scroll-view_H .goods-item:last-child {
+	margin-right: 0;
+}
+.goods-item .img {
+	width: 100%;
+	height: 300rpx;
+	border-radius: 10rpx;
+}
+
+.gs_js {
+	font-size: 28rpx;
+	color: #aba89a;
+	margin-top: 10rpx;
+}
+.ld {
+	font-size: 30rpx;
+	font-weight: 700;
+	margin-top: 20rpx;
+	margin-bottom: 20rpx;
+}
+.icon_box {
+	width: 100rpx;
+	margin-top: 10rpx;
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+}
+</style>

+ 299 - 0
index_fenbao/XuanJiangYuan/xq_page.vue

@@ -0,0 +1,299 @@
+<template>
+	<view class="box">
+		<u-navbar title="厦门文物跑活动报名" autoBack :placeholder="true" bgColor="#fee1b9"></u-navbar>
+		
+		<view class="ban">
+			<view class="hdjs_box">
+				<view class="hdjs_tit">活动介绍</view>
+				<view class="hdjs_xq" style="overflow: scroll">厦门文物跑活动旨在打造一场具有文化认同感的跑步之旅,号召公众关注及保护珍贵文物古迹,用脚步.</view>
+			</view>
+			
+			<!--  -->
+			<view class="ld">报名资料填写</view>
+			<!-- 动态表单 -->
+			<block v-for="(item,index) in configItems" :key="item.id">
+			     <view class="" style="margin-top: 30rpx;">
+			       <text >{{ item.title }}</text>
+			       <!-- <text v-if="item.tip" class="tip">{{ item.tip }}</text> -->
+			       <!-- 根据 type 属性决定渲染哪种类型的输入 -->
+			       <u--input v-if="item.type === 'string'"
+			               v-model="item.value"
+								 border="surround"
+			                @change="onInput"
+			                :placeholder="item.tip" />
+				
+			       <u-radio-group   v-if="item.type === 'radio'" placement>
+			         <u-radio v-for="(fruitName, fruitId) in item.content" :key="fruitId"
+			                  :label="item.content[fruitId]"
+			                :name="fruitId"
+							  @change="radioChange"
+							  :customStyle="{ marginBottom: '8px', height: '30px' }"
+							  >
+			           {{ fruitName }}
+			         </u-radio>
+			       </u-radio-group>
+				
+			       <!-- 其他类型可以根据需要添加 -->
+			     </view>
+			   </block>
+
+			<view class="bm_btn" @click="tjcyBtn">添加家庭成员</view>
+			<view class="cy_box" v-for="item in cyList" :key="index">
+				<view class="icon_box">
+					<u-icon name="account" color="#000000" size="20"></u-icon>
+				</view>
+				<view style="margin-left: 20rpx">
+					<view class="cy_name">{{item.name}}</view>
+					<view class="cy_age">年龄:{{item.age}}</view>
+				</view>
+			</view>
+			<!--  -->
+	
+			<view class="tjbm_btn">提交报名</view>
+			<!-- 阅读协议 -->
+			<view class="ydxy">
+			 <u-checkbox-group @change="xyShow=!xyShow" >
+			 	<u-checkbox v-model="xyShow" shape="circle" ></u-checkbox>
+			 </u-checkbox-group>
+				<view class="" @click="volhow=true">
+					阅读并同意《隐私政策》和《用户协议》
+				</view>
+			</view>
+
+		</view>
+	
+		<!-- 协议弹层 -->
+		<u-popup bgColor="#f2c8a2" :show="volhow"  mode="center" customStyle="width:600rpx;padding: 30rpx;" round="20rpx">
+			<view style="text-align: center; font-size: 30rpx">请阅读以下协议</view>
+			<view style="margin-top: 20rpx"></view>
+			<view class="bt_box">
+				
+				<view @click="volhow=false" class="bt2">我已知悉</view>
+			</view>
+		</u-popup>
+
+		  </view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			 configItems : [
+				 {
+				     id: 1,
+				     name: "fruit",
+				     group: "basic",
+				     title: "请选择参赛类型",
+				     tip: "请选择一款水果",
+				     type: "radio",
+				     value: "",
+				     content: { 1: "1.5公里线路(适合家庭及儿童)", 2: "3公里线路(适合初学者)", 3: "5公里线路(适合跑步爱好者)" },
+				     rule: "required"
+				 },
+			    {
+			        id: 2,
+			        name: "name",
+			        group: "basic",
+			        title: "姓名",
+			        tip: "请填写姓名",
+			        type: "string",
+			        value: "张宁",
+			        rule: "required"
+			    },
+				{
+				    id: 3,
+				    name: "name",
+				    group: "basic",
+				    title: "年龄",
+				    tip: "请填写年龄",
+				    type: "string",
+				    value: "18",
+				    rule: "required"
+				},
+			 {
+			     id: 4,
+			     name: "name",
+			     group: "basic",
+			     title: "手机",
+			     tip: "请填写手机号",
+			     type: "string",
+			     value: "1866166265",
+			     rule: "required"
+			 },
+		 
+			],
+			volhow:false,
+			xyShow:false,
+			mobile: '',
+			mailbox: '',
+			// 家庭成员
+			cyList:[],
+			ydxyShow:false,
+			// 默认选中第一个
+			radiovalue: 1,
+			radioList: [
+				{
+					name: '1.5公里线路(适合家庭及儿童)',
+					id: 1
+				},
+				{
+					name: '3公里线路(适合初学者)',
+					id: 2
+				},
+				{
+					name: '5公里线路(适合跑步爱好者)',
+					id: 3
+				}
+			]
+		};
+	},
+	onShow() {
+	    // 从本地存储中获取乘客信息
+	    const storedPassengers = uni.getStorageSync('passengers');
+	    if (storedPassengers) {
+			console.log(storedPassengers,'storedPassengers')
+	      this.cyList = storedPassengers;
+	    }
+	  },
+	methods: {
+		radioChange(n) {
+			// 拿到的content对应的key
+			console.log('radioChange', n,);
+		
+		},
+  onInput(e) {
+      // 更新字符串值
+    console.log(e)
+    },
+  tjcyBtn(){
+	uni.navigateTo({
+		url: '/index_fenbao/XuanJiangYuan/ck_page'
+	});
+}
+	}
+};
+</script>
+
+<style>
+.box {
+	min-height: 100%;
+height: auto;
+	width: 100%;
+	padding-bottom: 50rpx;
+	background-image: url('https://huli-app.wenlvti.net/app_static/minnanhun/image/gj_bg.png');
+	background-repeat: repeat-y;
+	background-size: 100%;
+}
+.ban {
+	width: 92%;
+	margin: auto;
+}
+.top_tit {
+	width: 100%;
+	height: 60rpx;
+	color: black;
+	line-height: 60rpx;
+	text-align: center;
+	font-size: 30rpx;
+	background-color: #fee1b9;
+}
+.hdjs_box {
+	height: 200rpx;
+	color: black;
+	margin-top: 10rpx;
+	border-radius: 10rpx;
+	padding: 20rpx;
+	background-color: #fff0e3;
+}
+.hdjs_box2 {
+	color: black;
+	margin-top: 10rpx;
+	border-radius: 10rpx;
+	margin-bottom: 30rpx;
+	padding: 20rpx;
+	background-color: #fff0e3;
+}
+.hdjs_tit {
+	font-size: 30rpx;
+}
+.hdjs_xq {
+	margin-top: 10rpx;
+	font-size: 26rpx;
+}
+.ld {
+	font-size: 30rpx;
+	font-weight: 700;
+	margin-bottom: 20rpx;
+}
+.u-input.data-v-113bc24f {
+	background-color: #fee1b9 !important ;
+	margin-top: 20rpx;
+}
+.bm_btn {
+	width: 100%;
+	height: 80rpx;
+	font-size: 30rpx;
+	line-height: 80rpx;
+	text-align: center;
+	color: black;
+	border-radius: 10rpx;
+	background-color: #fee1b9;
+	margin-top: 20rpx;
+}.bt2 {
+	width: 244rpx;
+	height: 78rpx;
+	background: #ca5642;
+	border-radius: 39rpx;
+	text-align: center;
+	line-height: 78rpx;
+	color: #ffffff;
+}
+.cy_box {
+	display: flex;
+	margin-top: 20rpx;
+}
+.icon_box {
+	width: 90rpx;
+	height: 90rpx;
+	display: flex;
+	justify-content: center;
+	background-color: #fee1b9;
+	border-radius: 10rpx;
+}
+.cy_name {
+	color: black;
+	font-size: 28rpx;
+	line-height: 50rpx;
+}
+.cy_age {
+	font-size: 24rpx;
+	color: #858789;
+}
+.bt_box {
+	display: flex;
+	margin-top: 50rpx;
+	justify-content: space-around;
+}
+.tjbm_btn {
+	width: 100%;
+	height: 80rpx;
+	font-size: 30rpx;
+	line-height: 80rpx;
+	text-align: center;
+	color: #ffffff;
+	border-radius: 10rpx;
+	background-color: #fb5a02;
+	margin-top: 50rpx;
+}
+.ydxy{
+	display: flex;
+align-items: center;
+	margin-top: 20rpx;
+	height: 50rpx;
+
+	font-size: 24rpx;
+	color:#03A9F4;
+}
+</style>

+ 7 - 7
index_fenbao/fuWu/baoMing/baoMing.vue

@@ -126,13 +126,13 @@ export default {
 						{
 							required: true,
 							errorMessage: '请输入身份证号'
-						},
-						// 对idCard字段进行长度验证
-						{
-							minLength: 18,
-							maxLength: 18,
-							errorMessage: '{label}长度为 {minLength}  个字符'
 						}
+						// 对idCard字段进行长度验证
+						// {
+						// 	minLength: 18,
+						// 	maxLength: 18,
+						// 	errorMessage: '{label}长度为 {minLength}  个字符'
+						// }
 					],
 					// 当前表单域的字段中文名,可不输入
 					label: '身份证号',
@@ -506,4 +506,4 @@ export default {
 	background-color: #f3e3d3;
 	overflow: scroll;
 }
-</style>
+</style>

+ 3 - 3
index_fenbao/fuWu/baoMing/renLing.vue

@@ -5,12 +5,12 @@
 			<view class="" style="display: flex; justify-content: space-between; margin-left: -25rpx">
 				<button open-type="getPhoneNumber" @getphonenumber="decryptPhoneNumber">
 					<view class="fj_item">
-						<view class="tit2">旧版本账号迁移</view>
+						<view class="tit2">通过手机号找回</view>
 					</view>
 				</button>
 
 				<view class="fj_item" @click="vicinityBtn">
-					<view class="tit2">附近被认领文物</view>
+					<view class="tit2">附近被认领文物</view>
 				</view>
 			</view>
 
@@ -324,7 +324,7 @@ export default {
 		},
 		// 认领文物
 		claimBtn() {
-			if (that.claimDetails.claim_status === 1) {
+			if (that.claimDetails.claim_status === 1 && that.claimDetails.is_multiple_claims === 0) {
 				that.$common.errorToShow('该文物已被认领');
 			} else if (this.volunteer_id != undefined && this.volunteer_id != '') {
 				this.$api.claimCr(

+ 74 - 1
pages.json

@@ -119,7 +119,64 @@
 	],
 
 	//分包
-	"subPackages": [{
+	"subPackages": [
+		{
+			"root": "index_fenbao/XuanJiangYuan",
+			"pages": [{
+				"path" : "index",
+				"style" : 
+				{
+					"navigationBarTitleText" : "",
+					"enablePullDownRefresh" : false
+				}
+			},
+			{
+				"path" : "bm_page",
+				"style" : 
+				{
+					"navigationBarTitleText" : "",
+					"enablePullDownRefresh" : false,
+					"navigationStyle": "custom"
+				}
+			},
+			{
+				"path" : "xq_page",
+				"style" : 
+				{
+					"navigationBarTitleText" : "",
+					"enablePullDownRefresh" : false,
+					"navigationStyle": "custom"
+				}
+			},
+			{
+				"path" : "XuanJiangYuan",
+				"style" : 
+				{
+					"navigationBarTitleText" : "",
+					"enablePullDownRefresh" : false,
+						"navigationStyle": "custom"
+				}
+			},
+			{
+				"path" : "xjy_XiangQing",
+				"style" : 
+				{
+					"navigationBarTitleText" : "",
+					"enablePullDownRefresh" : false,
+						"navigationStyle": "custom"
+				}
+			},
+			{
+				"path" : "ck_page",
+				"style" : 
+				{
+					"navigationBarTitleText" : ""
+				}
+			}
+				
+			]
+		},
+		{
 			"root": "index_fenbao/fuWu/FaLv",
 			"pages": [{
 					"path": "FaLv",
@@ -291,6 +348,22 @@
 						"navigationBarTitleText": "",
 						"enablePullDownRefresh": false
 					}
+				},
+				{
+					"path" : "online-patrol",
+					"style" : 
+					{
+						"navigationBarTitleText" : "",
+						"enablePullDownRefresh" : false
+					}
+				},
+				{
+					"path" : "cr-video",
+					"style" : 
+					{
+						"navigationBarTitleText" : "",
+						"enablePullDownRefresh" : false
+					}
 				}
 
 			]

+ 6 - 1
pages/index/index.vue

@@ -2,7 +2,7 @@
 	<view class="box">
 		<u-navbar title="厦门文物管家" :placeholder="true" bgColor="rgba(255,255,255,0)" :leftIconSize="0" titleStyle="font-weight:bold;color:#000000"></u-navbar>
 
-		<view style="width: 90%; margin: auto">
+		<view style="width: 90%; margin: auto" @click="goXjy">
 			<u-swiper
 				:list="swiperList"
 				imgMode="aspectFill"
@@ -213,6 +213,11 @@ export default {
 		this.loadGlobalFont();
 	},
 	methods: {
+		goXjy() {
+			uni.navigateTo({
+				url: '/index_fenbao/XuanJiangYuan/index'
+			});
+		},
 		// 轮播
 		getIndexBanner() {
 			this.$api.getIndexBanner({ main_body_id: 1 }, function (res) {

+ 1 - 1
pages/shouhu/shouhu.vue

@@ -133,7 +133,7 @@
 
 						<view @click="patrolBtn(index + 1)" v-if="index == 1">
 							<view class="rwbg">下半月</view>
-							<view class="rwbg">每月15号至31号</view>
+							<view class="rwbg">每月16号至31号</view>
 							<button class="rwbg2" style="padding: 0" :style="{ color: getTextColor(index + 1) }">{{ (index + 1) | completedBtn }}</button>
 						</view>
 

+ 2 - 2
pages/user/index.vue

@@ -49,7 +49,7 @@
 				</view>
 			</button>
 			<view style="width: 90%; margin: auto; margin-top: 240rpx; text-align: center; font-size: 26rpx; color: #abaab2">
-				<view class="">客服电话:18649931391</view>
+				<view class="">客服电话:18133054315</view>
 			</view>
 		</view>
 
@@ -378,4 +378,4 @@ button {
 	-webkit-background-clip: text;
 	-webkit-text-fill-color: transparent;
 }
-</style>
+</style>

+ 8 - 2
shouhu_fenbao/shouHu/touGao.vue

@@ -348,6 +348,12 @@ export default {
 				that.$common.errorToShow('请选择投稿类型');
 				return false;
 			}
+			let image = '';
+			let images = '';
+			if (this.fileList1.length !== 0) {
+				image = this.fileList1[0].url;
+				images = this.fileList1.map((itme) => itme.url).join(',');
+			}
 
 			// 如果typeId是必须选择的,这里也要进行验证
 			if (this.typeId === '') {
@@ -363,8 +369,8 @@ export default {
 						type: this.typeId,
 						content: this.textVal,
 						cr_id: this.cr_id,
-						image: (this.fileList1[0] && this.fileList1[0].url) || '',
-						images: this.fileList1
+						image: image,
+						images: images
 					},
 					function (res) {
 						if (res.code == 1) {

BIN
static/img/wx.png


BIN
static/img/wx1.jpg


BIN
static/img/wx2.jpg


+ 385 - 0
static/js/md5.js

@@ -0,0 +1,385 @@
+/*
+ * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
+ * Digest Algorithm, as defined in RFC 1321.
+ * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for more info.
+ */
+
+/*
+ * Configurable variables. You may need to tweak these to be compatible with
+ * the server-side, but the defaults work in most cases.
+ */
+var hexcase = 0;   /* hex output format. 0 - lowercase; 1 - uppercase        */
+var b64pad  = "";  /* base-64 pad character. "=" for strict RFC compliance   */
+
+/*
+ * These are the functions you'll usually want to call
+ * They take string arguments and return either hex or base-64 encoded strings
+ */
+function hex_md5(s)    { return rstr2hex(rstr_md5(str2rstr_utf8(s))); }
+function b64_md5(s)    { return rstr2b64(rstr_md5(str2rstr_utf8(s))); }
+function any_md5(s, e) { return rstr2any(rstr_md5(str2rstr_utf8(s)), e); }
+function hex_hmac_md5(k, d)
+  { return rstr2hex(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); }
+function b64_hmac_md5(k, d)
+  { return rstr2b64(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); }
+function any_hmac_md5(k, d, e)
+  { return rstr2any(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d)), e); }
+
+/*
+ * Perform a simple self-test to see if the VM is working
+ */
+function md5_vm_test()
+{
+  return hex_md5("abc").toLowerCase() == "900150983cd24fb0d6963f7d28e17f72";
+}
+
+/*
+ * Calculate the MD5 of a raw string
+ */
+function rstr_md5(s)
+{
+  return binl2rstr(binl_md5(rstr2binl(s), s.length * 8));
+}
+
+/*
+ * Calculate the HMAC-MD5, of a key and some data (raw strings)
+ */
+function rstr_hmac_md5(key, data)
+{
+  var bkey = rstr2binl(key);
+  if(bkey.length > 16) bkey = binl_md5(bkey, key.length * 8);
+
+  var ipad = Array(16), opad = Array(16);
+  for(var i = 0; i < 16; i++)
+  {
+    ipad[i] = bkey[i] ^ 0x36363636;
+    opad[i] = bkey[i] ^ 0x5C5C5C5C;
+  }
+
+  var hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
+  return binl2rstr(binl_md5(opad.concat(hash), 512 + 128));
+}
+
+/*
+ * Convert a raw string to a hex string
+ */
+function rstr2hex(input)
+{
+  try { hexcase } catch(e) { hexcase=0; }
+  var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
+  var output = "";
+  var x;
+  for(var i = 0; i < input.length; i++)
+  {
+    x = input.charCodeAt(i);
+    output += hex_tab.charAt((x >>> 4) & 0x0F)
+           +  hex_tab.charAt( x        & 0x0F);
+  }
+  return output;
+}
+
+/*
+ * Convert a raw string to a base-64 string
+ */
+function rstr2b64(input)
+{
+  try { b64pad } catch(e) { b64pad=''; }
+  var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+  var rcode = 'NUMOOEXAXNLVGN';
+  var output = "";
+  var len = input.length;
+  for(var i = 0; i < len; i += 3)
+  {
+    var triplet = (input.charCodeAt(i) << 16)
+                | (i + 1 < len ? input.charCodeAt(i+1) << 8 : 0)
+                | (i + 2 < len ? input.charCodeAt(i+2)      : 0);
+    for(var j = 0; j < 4; j++)
+    {
+      if(i * 8 + j * 6 > input.length * 8) output += b64pad;
+      else output += tab.charAt((triplet >>> 6*(3-j)) & 0x3F);
+    }
+  }
+  return output;
+}
+
+/*
+ * Convert a raw string to an arbitrary string encoding
+ */
+function rstr2any(input, encoding)
+{
+  var divisor = encoding.length;
+  var i, j, q, x, quotient;
+
+  /* Convert to an array of 16-bit big-endian values, forming the dividend */
+  var dividend = Array(Math.ceil(input.length / 2));
+  for(i = 0; i < dividend.length; i++)
+  {
+    dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1);
+  }
+
+  /*
+   * Repeatedly perform a long division. The binary array forms the dividend,
+   * the length of the encoding is the divisor. Once computed, the quotient
+   * forms the dividend for the next step. All remainders are stored for later
+   * use.
+   */
+  var full_length = Math.ceil(input.length * 8 / (Math.log(encoding.length) / Math.log(2)));
+  var remainders = Array(full_length);
+  for(j = 0; j < full_length; j++)
+  {
+    quotient = Array();
+    x = 0;
+    for(i = 0; i < dividend.length; i++)
+    {
+      x = (x << 16) + dividend[i];
+      q = Math.floor(x / divisor);
+      x -= q * divisor;
+      if(quotient.length > 0 || q > 0)
+        quotient[quotient.length] = q;
+    }
+    remainders[j] = x;
+    dividend = quotient;
+  }
+
+  /* Convert the remainders to the output string */
+  var output = "";
+  for(i = remainders.length - 1; i >= 0; i--)
+    output += encoding.charAt(remainders[i]);
+
+  return output;
+}
+
+/*
+ * Encode a string as utf-8.
+ * For efficiency, this assumes the input is valid utf-16.
+ */
+function str2rstr_utf8(input)
+{
+  var output = "";
+  var i = -1;
+  var x, y;
+
+  while(++i < input.length)
+  {
+    /* Decode utf-16 surrogate pairs */
+    x = input.charCodeAt(i);
+    y = i + 1 < input.length ? input.charCodeAt(i + 1) : 0;
+    if(0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF)
+    {
+      x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);
+      i++;
+    }
+
+    /* Encode output as utf-8 */
+    if(x <= 0x7F)
+      output += String.fromCharCode(x);
+    else if(x <= 0x7FF)
+      output += String.fromCharCode(0xC0 | ((x >>> 6 ) & 0x1F),
+                                    0x80 | ( x         & 0x3F));
+    else if(x <= 0xFFFF)
+      output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F),
+                                    0x80 | ((x >>> 6 ) & 0x3F),
+                                    0x80 | ( x         & 0x3F));
+    else if(x <= 0x1FFFFF)
+      output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07),
+                                    0x80 | ((x >>> 12) & 0x3F),
+                                    0x80 | ((x >>> 6 ) & 0x3F),
+                                    0x80 | ( x         & 0x3F));
+  }
+  return output;
+}
+
+/*
+ * Encode a string as utf-16
+ */
+function str2rstr_utf16le(input)
+{
+  var output = "";
+  for(var i = 0; i < input.length; i++)
+    output += String.fromCharCode( input.charCodeAt(i)        & 0xFF,
+                                  (input.charCodeAt(i) >>> 8) & 0xFF);
+  return output;
+}
+
+function str2rstr_utf16be(input)
+{
+  var output = "";
+  for(var i = 0; i < input.length; i++)
+    output += String.fromCharCode((input.charCodeAt(i) >>> 8) & 0xFF,
+                                   input.charCodeAt(i)        & 0xFF);
+  return output;
+}
+
+/*
+ * Convert a raw string to an array of little-endian words
+ * Characters >255 have their high-byte silently ignored.
+ */
+function rstr2binl(input)
+{
+  var output = Array(input.length >> 2);
+  for(var i = 0; i < output.length; i++)
+    output[i] = 0;
+  for(var i = 0; i < input.length * 8; i += 8)
+    output[i>>5] |= (input.charCodeAt(i / 8) & 0xFF) << (i%32);
+  return output;
+}
+
+/*
+ * Convert an array of little-endian words to a string
+ */
+function binl2rstr(input)
+{
+  var output = "";
+  for(var i = 0; i < input.length * 32; i += 8)
+    output += String.fromCharCode((input[i>>5] >>> (i % 32)) & 0xFF);
+  return output;
+}
+
+/*
+ * Calculate the MD5 of an array of little-endian words, and a bit length.
+ */
+function binl_md5(x, len)
+{
+  /* append padding */
+  x[len >> 5] |= 0x80 << ((len) % 32);
+  x[(((len + 64) >>> 9) << 4) + 14] = len;
+
+  var a =  1732584193;
+  var b = -271733879;
+  var c = -1732584194;
+  var d =  271733878;
+
+  for(var i = 0; i < x.length; i += 16)
+  {
+    var olda = a;
+    var oldb = b;
+    var oldc = c;
+    var oldd = d;
+
+    a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
+    d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
+    c = md5_ff(c, d, a, b, x[i+ 2], 17,  606105819);
+    b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
+    a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
+    d = md5_ff(d, a, b, c, x[i+ 5], 12,  1200080426);
+    c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
+    b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
+    a = md5_ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);
+    d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
+    c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
+    b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
+    a = md5_ff(a, b, c, d, x[i+12], 7 ,  1804603682);
+    d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
+    c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
+    b = md5_ff(b, c, d, a, x[i+15], 22,  1236535329);
+
+    a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
+    d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
+    c = md5_gg(c, d, a, b, x[i+11], 14,  643717713);
+    b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
+    a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
+    d = md5_gg(d, a, b, c, x[i+10], 9 ,  38016083);
+    c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
+    b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
+    a = md5_gg(a, b, c, d, x[i+ 9], 5 ,  568446438);
+    d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
+    c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
+    b = md5_gg(b, c, d, a, x[i+ 8], 20,  1163531501);
+    a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
+    d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
+    c = md5_gg(c, d, a, b, x[i+ 7], 14,  1735328473);
+    b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
+
+    a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
+    d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
+    c = md5_hh(c, d, a, b, x[i+11], 16,  1839030562);
+    b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
+    a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
+    d = md5_hh(d, a, b, c, x[i+ 4], 11,  1272893353);
+    c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
+    b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
+    a = md5_hh(a, b, c, d, x[i+13], 4 ,  681279174);
+    d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
+    c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
+    b = md5_hh(b, c, d, a, x[i+ 6], 23,  76029189);
+    a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
+    d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
+    c = md5_hh(c, d, a, b, x[i+15], 16,  530742520);
+    b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
+
+    a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
+    d = md5_ii(d, a, b, c, x[i+ 7], 10,  1126891415);
+    c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
+    b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
+    a = md5_ii(a, b, c, d, x[i+12], 6 ,  1700485571);
+    d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
+    c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
+    b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
+    a = md5_ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);
+    d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
+    c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
+    b = md5_ii(b, c, d, a, x[i+13], 21,  1309151649);
+    a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
+    d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
+    c = md5_ii(c, d, a, b, x[i+ 2], 15,  718787259);
+    b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
+
+    a = safe_add(a, olda);
+    b = safe_add(b, oldb);
+    c = safe_add(c, oldc);
+    d = safe_add(d, oldd);
+  }
+  return Array(a, b, c, d);
+}
+
+/*
+ * These functions implement the four basic operations the algorithm uses.
+ */
+function md5_cmn(q, a, b, x, s, t)
+{
+  return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
+}
+function md5_ff(a, b, c, d, x, s, t)
+{
+  return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
+}
+function md5_gg(a, b, c, d, x, s, t)
+{
+  return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
+}
+function md5_hh(a, b, c, d, x, s, t)
+{
+  return md5_cmn(b ^ c ^ d, a, b, x, s, t);
+}
+function md5_ii(a, b, c, d, x, s, t)
+{
+  return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
+}
+
+/*
+ * Add integers, wrapping at 2^32. This uses 16-bit operations internally
+ * to work around bugs in some JS interpreters.
+ */
+function safe_add(x, y)
+{
+  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
+  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+  return (msw << 16) | (lsw & 0xFFFF);
+}
+
+/*
+ * Bitwise rotate a 32-bit number to the left.
+ */
+function bit_rol(num, cnt)
+{
+  return (num << cnt) | (num >>> (32 - cnt));
+}
+
+module.exports = {
+	md5 : function(str){
+		return hex_md5(str);
+	}
+}

+ 1 - 0
user_fenbao/houTai/taskDEetailsPage.vue

@@ -25,6 +25,7 @@
 			<image style="width: 186rpx; height: 40rpx" src="/static/img/left_img.png"></image>
 		</view>
 
+		<view v-if="taskDetails.progress == '-1'" style="margin-left: 10%; font-size: 36rpx; color: red">驳回原因:{{ taskDetails.feedback }}</view>
 		<view class="zk_box">
 			<view @click="AssetBtn(item)" class="zk_item" v-for="(item, index) in assetList" :key="item.id">
 				<!-- 调整 -->