Quellcode durchsuchen

贞达市政小程序代码上传

wang_xy vor 2 Jahren
Ursprung
Commit
235fdd361d

+ 44 - 0
pages/aboutme/aboutme.vue

@@ -0,0 +1,44 @@
+<template>
+	<view>
+		<view class="align-items" style="margin-top: 80rpx;">
+			<back></back>
+			<view class="title-text" style="margin-left: 20rpx;">
+				{{title}}
+			</view>
+		</view>
+		<rich-text :nodes="string"></rich-text>
+	</view>
+</template>
+
+<script>
+	import service from '@/api/index.js'
+	export default {
+		data() {
+			return {
+				title:'',
+				string:''
+			}
+		},
+		onLoad() {
+			this.about()
+		},
+		methods: {
+			back() {
+				uni.navigateBack()
+			},
+			about() {
+				service.getAboutUs().then(res => {
+					this.string = res.text;
+					this.title = res.title;
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.back {
+		width: 50rpx;
+		height: 50rpx;
+	}
+</style>

+ 106 - 0
pages/chart/chart.vue

@@ -0,0 +1,106 @@
+<template>
+	<view style="margin-top: 80rpx;">
+		<view class="font-senventy-two">
+			基础信息
+		</view>
+		<view class="square" @click="gotochart('/pages/chart/chartList')">
+			<image src="/static/icon/project.png" mode="" class="icon"></image>
+			<view class="font-thirty-six">
+				工程管理
+			</view>
+		</view>
+		<view class="font-senventy-two">
+			统计信息
+		</view>
+		<view class="font-fifty-six SourceHanSansCN choose" @click="gotochart('/pages/chart/chartDetail?type=examineArea')">
+			小区合格率
+		</view>
+		<view class="font-fifty-six SourceHanSansCN choose" @click="gotochart('/pages/chart/chartDetail?type=ExamineWorker')">
+			职工合格率
+		</view>
+		<view class="font-fifty-six SourceHanSansCN choose" @click="gotochart('/pages/chart/chartDetail?type=getExamineServe')">
+			小区服务
+		</view>
+		<view class="font-fifty-six SourceHanSansCN choose" @click="gotochart('/pages/chart/chartDetail?type=getExaminePipeType')">
+			管材类别设计
+		</view>
+		<view class="font-fifty-six SourceHanSansCN choose" @click="gotochart('/pages/chart/chartDetail?type=getExaminePipeLength')">
+			管材长度
+		</view>
+		<view class="font-fifty-six SourceHanSansCN choose" @click="gotochart('/pages/chart/chartDetail?type=getExamineValveType')">
+			自闭阀类别
+		</view>
+		<view class="font-fifty-six SourceHanSansCN choose" @click="gotochart('/pages/chart/chartDetail?type=getAreaSum')">
+			小区汇总
+		</view>
+	</view>
+</template>
+
+<script>
+	import service from '@/api/index.js'
+	export default {
+		data() {
+			return {
+				// chartData: {
+				// 	series: [{
+				// 		data: []
+				// 	}]
+				// },
+			}
+		},
+		onLoad() {
+			// this.getList()
+			// this.getExamineValveType()
+			// this.getwork();
+		},
+		methods: {
+			getList() {
+				service.getList().then(res => {
+					console.log('getList', res)
+				})
+			},
+			gotochart(url) {
+				uni.navigateTo({
+					url,
+				})
+
+			},
+			getExamineValveType() {
+				service.getExamineValveType().then(res => {
+					this.chartData.series[0].data = res
+					console.log('getExamineValveType', res)
+				})
+			},
+			// getOrderListFn() {
+			// 	if (this.itemList.length < this.total) {
+			// 		server.getOrderList(this.orderParams).then(response => {
+			// 			this.orderParams.pageNum = response.current + 1
+			// 			for (var i = 0; i < response.records.length; i++) {
+			// 				this.itemList.push(response.records[i])
+			// 			}
+			// 		})
+			// 	}
+			// },
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.choose {
+		text-align: center;
+		padding: 20rpx;
+		margin: 30rpx;
+		color: #FFFFFF;
+		background: #43CEB1;
+		border-radius: 64rpx;
+	}
+	.square{
+		margin: 25rpx;
+		.icon{
+			margin-left: 22rpx;
+			width: 100rpx;
+			height: 100rpx;
+		}
+	}
+	
+</style>

+ 84 - 0
pages/chart/chartAll.vue

@@ -0,0 +1,84 @@
+<template>
+	<view style="margin-top: 80rpx;">
+		<view class="font-senventy-two">
+			基础信息
+		</view>
+		<view class="square" @click="gotochart('/pages/chart/chartList')">
+			<image src="/static/icon/project.png" mode="" class="icon"></image>
+			<view class="font-thirty-six">
+				工程管理
+			</view>
+		</view>
+		<view class="font-senventy-two">
+			统计信息
+		</view>
+		<view style="background: #fcfcfe; margin-bottom: 15rpx;margin-top: 40rpx;">
+			<view style="padding-top:20rpx;text-align: center;font-size: 50rpx;font-weight: 900;">小区合格率</view><newchartDetail ref='tj1' :allType='examineArea' ></newchartDetail>
+		</view>
+		<view style="background: #fcfcfe; margin-bottom: 15rpx;">
+			<view style="padding-top:20rpx;text-align: center;font-size: 50rpx;font-weight: 900;">职工合格率</view><newchartDetail ref='tj2' :allType='ExamineWorker' ></newchartDetail>
+		</view>
+		<view style="background: #fcfcfe; margin-bottom: 15rpx;">
+			<view style="padding-top:20rpx;text-align: center;font-size: 50rpx;font-weight: 900;">小区服务</view><newchartDetail ref='tj3' :allType='getExamineServe' ></newchartDetail>
+		</view>
+		<view style="background: #fcfcfe; margin-bottom: 15rpx;">
+			<view style="padding-top:20rpx;text-align: center;font-size: 50rpx;font-weight: 900;">管材类别设计</view><newchartDetail ref='tj4' :allType='getExaminePipeType' ></newchartDetail>
+		</view>
+		<view style="background: #fcfcfe; margin-bottom: 15rpx;">
+			<view style="padding-top:20rpx;text-align: center;font-size: 50rpx;font-weight: 900;">管材长度</view><newchartDetail ref='tj5' :allType='getExaminePipeLength' ></newchartDetail>
+		</view>
+		<view style="background: #fcfcfe; margin-bottom: 15rpx;">
+			<view style="padding-top:20rpx;text-align: center;font-size: 50rpx;font-weight: 900;">自闭阀类别</view><newchartDetail ref='tj6' :allType='getExamineValveType' ></newchartDetail>
+		</view>
+		<view style="background: #fcfcfe; margin-bottom: 15rpx;">
+			<view style="padding-top:20rpx;text-align: center;font-size: 50rpx;font-weight: 900;">小区汇总</view><newchartDetail ref='tj7' :allType='getAreaSum' ></newchartDetail>
+		</view>
+	</view>
+</template>
+
+<script>
+	import service from '@/api/index.js';
+	import newchartDetail from './newchartDetail.vue';
+	export default {
+		components: {
+			newchartDetail,
+		},
+		data() {
+			return {
+				examineArea:'examineArea',
+				ExamineWorker:'ExamineWorker',
+				getExamineServe:'getExamineServe',
+				getExaminePipeType:'getExaminePipeType',
+				getExaminePipeLength:'getExaminePipeLength',
+				getExamineValveType:'getExamineValveType',
+				getAreaSum:'getAreaSum',
+			}
+		},
+		methods: {
+			gotochart(url) {
+				uni.navigateTo({
+					url,
+				})
+			},
+		}
+	}
+</script>
+<style lang="scss" scoped>
+	.choose {
+		text-align: center;
+		padding: 20rpx;
+		margin: 30rpx;
+		color: #FFFFFF;
+		background: #43CEB1;
+		border-radius: 64rpx;
+	}
+	.square{
+		margin: 25rpx;
+		.icon{
+			margin-left: 22rpx;
+			width: 100rpx;
+			height: 100rpx;
+		}
+	}
+	
+</style>

+ 245 - 0
pages/chart/chartDetail.vue

@@ -0,0 +1,245 @@
+<template>
+	<view>
+		<view class="" style="height: 500rpx; margin-top: 200rpx;">
+			<view class="align-items" style="position: absolute; top: 90rpx; left: 0;" >
+				<back></back>
+			</view>
+			<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse()" v-if="type != 'ExamineWorker'">
+				{{house ? house :'全部小区'}}
+				<u-popup v-model="pop" mode="bottom" height="1000rpx">
+					<view style="margin: 20rpx;">
+						<u-search placeholder="请输入搜索内容" v-model="keyword" :action-style="{'font-size':'40rpx'}" @custom="searchinfo()"></u-search>
+					</view>
+					<view>
+						<scroll-view scroll-y="true" style="height: 600rpx; text-align: center;">
+							<view v-for="(item,index) in chooseHouseList" :key="item.value" >
+								<view :class="current === index ? 'active' : '' " style="color: #000000;" @click="active(item,index)">
+									{{item.label}}
+								</view>
+							</view>
+						</scroll-view>
+						<view class="">
+							<button type="default" class="font-fifty-six" @click="search()">确定</button>
+						</view>
+						<view class="">
+							<button type="default" @click="pop = false;"  class="font-fifty-six">取消</button>
+						</view>
+					</view>
+				</u-popup>
+			</view>
+			<view class="font-fifty-six SourceHanSansCN choose" v-if="type != 'ExamineWorker'" @click="reset()">
+				重置
+			</view>
+			<view class="font-fifty-six SourceHanSansCN choose" @click="openWorker()" v-if="type == 'ExamineWorker'">
+				{{worker ? worker : '全部工人'}}
+				<u-select v-model="workShow" :list="workList" @confirm="workConfirm()"></u-select>
+			</view>
+			<view>
+				<qiun-data-charts type="pie" :chartData="chartData" background="none" canvas2d="true" canvasId="ssssss"/>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import service from '@/api/index.js'
+	export default {
+		data(){
+			return {
+				chartData: {
+					series: [{
+						data: []
+					}]
+				},
+				type:'',
+				house:'',
+				houseId:'',
+				worker:'',
+				workerId:'',
+
+				chooseHouseList:[],
+				workList:[],
+				houseShow:false,
+				workShow:false,
+				keyword:'',
+				pop:false,
+				current:-1
+			}
+		},
+		onLoad(e) {
+			this.type = e.type;
+			if(this.type == 'examineArea'){
+				this.getExamineArea();
+			}else if(this.type == 'ExamineWorker'){
+				this.getwork();
+				this.getExamineWorker()
+			}else if(this.type == 'getExamineServe'){
+				this.getExamineServe()
+			}else if(this.type == 'getExaminePipeType'){
+				this.getExaminePipeType()
+			}else if(this.type == 'getExaminePipeLength'){
+				this.getExaminePipeLength()
+			}else if(this.type == 'getExamineValveType'){
+				this.getExamineValveType()
+			}else if(this.type =='getAreaSum'){
+				this.getAreaSum()
+			}
+		   this.getArea();
+		},
+		methods:{
+			openHouse(){
+				this.pop = !this.pop;
+			},
+			openWorker(){
+				this.workShow = !this.workShow;
+			},
+			workConfirm(e){
+				this.worker = e[0].label;
+				this.workerId = e[0].value;
+				this.getExamineWorker(this.workerId)
+			},
+			reset(){
+				this.houseId = '';
+				this.getArea();
+				if(this.type == 'examineArea'){
+					this.getExamineArea(this.houseId)
+				}else if(this.type == 'getExamineServe'){
+					this.getExamineServe(this.houseId)
+				}else if(this.type == 'getExaminePipeType'){
+					this.getExaminePipeType(this.houseId)
+				}else if(this.type == 'getExaminePipeLength'){
+					this.getExaminePipeLength(this.houseId)
+				}else if(this.type == 'getExamineValveType'){
+					this.getExamineValveType(this.houseId)
+				}else if(this.type =='getAreaSum'){
+					this.getAreaSum(this.houseId)
+				}
+				this.house = null;
+				this.current = -1;
+				this.$UTILS.showPrompt('重置成功!')
+			},
+			search(){
+				this.house = this.housename
+				if(this.type == 'examineArea'){
+				  this.getExamineArea(this.houseId)
+				}else if(this.type == 'getExamineServe'){
+					this.getExamineServe(this.houseId)
+				}else if(this.type == 'getExaminePipeType'){
+					this.getExaminePipeType(this.houseId)
+				}else if(this.type == 'getExaminePipeLength'){
+					this.getExaminePipeLength(this.houseId)
+				}else if(this.type == 'getExamineValveType'){
+					this.getExamineValveType(this.houseId)
+				}else if(this.type =='getAreaSum'){
+					this.getAreaSum(this.houseId)
+				}
+				this.pop = false;
+			},
+			searchinfo(){
+				service.getArea({name:this.keyword}).then(res => {
+					this.chooseHouseList = [];
+					res.forEach((item, index) => {
+						this.chooseHouseList.push({
+							value: item.id,
+							label: item.name,
+							selectType:'xiaoqu'
+						})
+					})
+				})	
+				this.keyword = null;
+			},
+			active(item,index){
+				this.current = index;
+				this.housename = item.label;
+				this.houseId = item.value;
+				this.selectType = item.selectType;
+			},
+			getArea(){
+				service.getArea().then(res => {
+					this.chooseHouseList = [];
+					res.forEach((item, index) => {
+						this.chooseHouseList.push({
+							value: item.id,
+							label: item.name,
+						})
+					})
+				})
+			},
+			//获取工人列表
+			getwork(){
+				service.getWorker().then(res => {
+					this.workList = [];
+					res.forEach((item, index) => {
+						this.workList.push({
+							value: item.id,
+							label: item.name,
+						})
+					})
+				})
+			},
+			//小区合格率
+			getExamineArea(houseId) {
+				service.getExamineArea({areaId:this.houseId}).then(res => {
+					this.chartData.series[0].data = res
+					console.log('this.chartData', this.chartData)
+				})
+			},
+			//工人合格率
+			getExamineWorker(workerId) {
+				service.getExamineWorker({workerId:this.workerId}).then(res => {
+					this.chartData.series[0].data = res
+					console.log('getExamineWorker', res)
+				})
+			},
+			//小区服务统计
+			getExamineServe(serveId) {
+				service.getExamineServe({id:this.houseId}).then(res => {
+					this.chartData.series[0].data = res
+					console.log('getExamineServe', res)
+				})
+			},
+			//管材类别统计
+			getExaminePipeType(pipeTypeId) {
+				service.getExaminePipeType({id:this.houseId}).then(res => {
+					this.chartData.series[0].data = res
+					console.log('getExaminePipeType', res)
+				})
+			},
+			//管材长度统计
+			getExaminePipeLength(pipeLengthId) {
+				service.getExaminePipeLength({id:this.houseId}).then(res => {
+					this.chartData.series[0].data = res
+					console.log('getExaminePipeLength', res)
+				})
+			},
+			//自闭阀类别统计
+			getExamineValveType(valveTypeId) {
+				service.getExamineValveType({id:this.houseId}).then(res => {
+					this.chartData.series[0].data = res
+					console.log('getExamineValveType', res)
+				})
+			},
+			//小区汇总统计
+			getAreaSum(areaSumId) {
+				service.getAreaSum({areaId:this.houseId}).then(res => {
+					this.chartData.series[0].data = res
+					console.log('getAreaSum', res)
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.choose {
+		text-align: center;
+		padding: 20rpx;
+		margin: 30rpx;
+		color: #FFFFFF;
+		background: #43CEB1;
+		border-radius: 64rpx;
+	}
+	.active{
+	   background-color: #1890FF;
+	}
+</style>

+ 639 - 0
pages/chart/chartList.vue

@@ -0,0 +1,639 @@
+<template>
+	<view class="list_s">
+		<view class="header_s">
+			<u-popup v-model="show" mode="top">
+				<view class="popup">
+					<view style="margin-top: 120rpx;">
+						<view>
+							<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('xiaoqu')">
+								{{house ? house :'选择小区'}}
+								<u-popup v-model="pop" mode="bottom" height="1000rpx">
+									<view style="margin: 20rpx;">
+										<u-search placeholder="请输入搜索内容" v-model="keyword" :action-style="{'font-size':'40rpx'}" @custom="searchinfo(selectType)"></u-search>
+									</view>
+									<view>
+										<scroll-view scroll-y="true" style="height: 600rpx; text-align: center;">
+											<view v-for="(item,index) in chooseHouseList" :key="item.value" >
+												<view :class="current === index ? 'active' : '' " style="color: #000000;" @click="active(item,index)">
+													{{item.label}}
+												</view>
+											</view>
+										</scroll-view>
+										<view class="">
+											<button type="default" class="font-fifty-six" @click="search(selectType)">确定</button>
+										</view>
+										<view class="">
+											<button type="default" @click="pop = false;"  class="font-fifty-six">取消</button>
+										</view>
+									</view>
+								</u-popup>
+							</view>
+						</view>
+						
+						<view>
+							<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('louyu')">
+								{{bulid ? bulid : '选择楼宇'}}
+							</view>
+					
+						</view>
+						<view>
+							<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('danyuan')">
+								{{unit ? unit : '选择单元'}}
+							</view>
+					
+						</view>
+						<view>
+							<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('menpai')">
+								{{houseNumber ? houseNumber  : '选择门牌'}}
+							</view>
+						</view>
+						<view>
+						<view class="font-fifty-six SourceHanSansCN choose" @click="openType('shows')">
+							服务类型 <text class="font-fifty-six SourceHanSansCN" style="color: #232146;">
+								{{type ? '----' +  type : ''}}</text>
+							<u-select v-model="shows" :list="mounicipalList" @confirm="confirm"></u-select>
+						</view>
+						<view>
+							<view class="font-fifty-six SourceHanSansCN choose" @click="showStart = true">
+								{{form.starTime ? form.starTime  : '开始时间'}}
+								<u-picker v-model="showStart" mode="time" @confirm="confirmStart"></u-picker>
+							</view>
+						</view>
+						<view>
+							<view class="font-fifty-six SourceHanSansCN choose" @click="showEnd = true">
+								{{form.endTime ? form.endTime  : '结束时间'}}
+								<u-picker v-model="showEnd" mode="time" @confirm="confirmEnd"></u-picker>
+							</view>
+						</view>
+						<view style="display: flex;">
+							<view style="height: 100rpx; font-size: 64rpx; width: 180rpx; font-weight: 600;">工号</view>
+							<u-input
+								style="font-size: 64rpx!important; font-weight: 600; width: 400rpx!important;"
+								placeholder="请输入工号"
+								placeholder-style="font-size: 64rpx;"
+								v-model="form.jobNum"
+								maxlength = '4'
+								:type='numberType'
+								:border="border" />
+						</view>
+						<view class="font-fifty-six SourceHanSansCN total background-color1" @click="submit()">
+							提交数据
+						</view>
+					</view>
+					</view>
+				</view>
+			</u-popup>
+			<view style="display: flex;">
+				<view class="btn_s" @click="show = true">查询</view>
+				<view class="btn_s" @click="kong">重置</view>
+			</view>
+		</view>
+		<view class="footer_s" v-if="list.length > 0">
+			<view class="footer-item" v-for="(item, index) in list" @click="goto(item.id)">
+				<view class="item-title">服务类型: {{item.serviceType}}</view>
+				<view class="item-title">地址: {{item.house}}</view>
+				<view class="item-title">职工: {{item.userName}}</view>
+				<view class="item-title">时间: {{item.time}}</view>
+				<view class="main-list-icon"></view>
+			</view>
+		</view>
+		<view class="footer_s" style="padding-top: 100rpx;" v-else>
+			<u-empty text="暂无数据" mode="list"></u-empty>
+		</view>
+	</view>
+</template>
+
+<script>
+	import service from '@/api/index.js'
+	export default {
+		data() {
+			return {
+				numberType: 'number',
+				show: false,
+				list: [],
+				params: {
+					pageNum: 1,
+					pageSize: 10,
+				},
+				keyword:'',
+				selectType:'',
+				pop: false,
+				show: false,
+				border: false,
+				typeValue: '',
+				current:-1,
+				labelPosition: 'left',
+				errorType: ['message'],
+				list: [],
+				chooseHouseList: [],
+				typeList: [],
+				showStart: false,
+				showEnd: false,
+				form: {
+					starTime: '',
+					endTime: '',
+					jobNum: '',
+				},
+				listTypeShow: false,
+				tubeTypeShow: false,
+				tubeLongShow: false,
+				house: '选择小区',
+				bulid: '选择楼宇',
+				unit: '选择单元',
+				houseNumber: '选择门牌',
+				shows: false,
+				mounicipalList: [],
+				tubeTypeLongList: [],
+				tubeTypeList: [],
+				houseid:'',
+				type: '',
+				buildid:'',
+				unitid:'',
+				numberid:'',
+			}
+		},
+		onLoad() {
+			this.getListFn();
+			this.getArea();
+			this.getProjectType();
+			this.getTubeType();
+			this.getTubeLong();
+			this.select();
+		},
+		onReachBottom() {
+			this.getNextListFn()
+		},
+		onPullDownRefresh() {
+			this.getListFn();
+			setTimeout(function () {
+				uni.stopPullDownRefresh();
+			}, 1000);
+		},
+		methods:{
+			kong(){
+				this.houseid = '';
+				this.buildid = '';
+				this.unitid = '';
+				this.numberid = '';
+				this.form.starTime = '';
+				this.form.endTime = '';
+				this.form.jobNum = '';
+				this.getListFn();
+			},
+			goto(id){
+				uni.navigateTo({
+					url: './details?id=' + id
+				})
+			},
+			getListFn(){
+				let that = this;
+				let params ={
+					areaId: this.houseid,
+					buildingId: this.buildid,
+					unitId: this.unitid,
+					houseId: this.numberid,
+					starTime: this.form.starTime,
+					endTime: this.form.endTime,
+					jobNum: this.form.jobNum,
+					serviceType: this.typeValue,
+					pageSize: 10,
+					pageNum: 1,
+				}
+				console.log("888", params)
+				service.getOrderList(params).then(res =>{
+					console.log("999", res)
+					that.list = res.records;
+					that.total = res.total || 0;
+					that.params.pageNum = res.current + 1;
+				})
+			},
+			getNextListFn(){
+				let that = this;
+				let params ={
+					areaId: this.houseid,
+					buildingId: this.buildid,
+					unitId: this.unitid,
+					houseId: this.numberid,
+					starTime: this.form.starTime,
+					endTime: this.form.endTime,
+					jobNum: this.form.jobNum,
+					serviceType: this.typeValue,
+					pageSize: this.params.pageSize,
+					pageNum: this.params.pageNum,
+				}
+				console.log("7777", params)
+				if (this.list.length < this.total) {
+					service.getOrderList(params).then(response => {
+						that.params.pageNum = response.current + 1
+						response.records.forEach(item =>{
+							that.list.push(item)
+						})
+					})
+				}
+			},
+			confirmStart(e){
+				console.log(e)
+				this.form.starTime = `${e.year}-${e.month}-${e.day}`
+			},
+			confirmEnd(e){
+				console.log(e)
+				this.form.endTime = `${e.year}-${e.month}-${e.day}`
+			},
+			openUnit() {
+				this.unitShow = !this.unitShow
+			},
+			//选择门牌
+			open() {
+				this.houseNumberShow = !this.houseNumberShow
+			},
+			//选择上门类型
+			confirm(e) {
+				this.type = e[0].label
+				this.typeValue = e[0].value
+			
+				this.imgArr = [];
+				this.tubeType = null;
+				this.tubeLong = null;
+				this.valueType = null;
+			},
+			openType(type) {
+				if (type === 'shows') {
+					this.shows = !this.shows
+				} else if (type === 'tubeType') {
+					this.tubeTypeShow = !this.tubeTypeShow
+				} else {
+					this.tubeLongShow = !this.tubeLongShow
+				}
+			
+			},
+			//选择类型
+			select() {
+				service.getDic({
+					dicType: 'service_type'
+				}).then(res => {
+					res.forEach(item => {
+						this.mounicipalList.push({
+							value: item.value,
+							label: item.name
+						})
+					})
+				})
+			},
+			tubeTypeConfirm(e) {
+				this.tubeType = e[0].label
+			},
+			listType(e) {
+				this.valueType = e[0].label
+			},
+			tubeLongConfirm(e) {
+				this.tubeLong = e[0].label
+			},
+			getTubeType() {
+				service.getPipeType().then(res => {
+					res.forEach(item => {
+						this.tubeTypeList.push({
+							value: item.id,
+							label: item.pipeType
+						})
+					})
+				})
+			},
+			getTubeLong() {
+				service.getPipeLength().then(res => {
+					res.forEach(item => {
+						this.tubeTypeLongList.push({
+							value: item.id,
+							label: item.pipeLength
+						})
+					})
+				})
+			},
+			getProjectType() {
+				service.getProject().then(res => {
+					console.log('getProjectType', res)
+					this.typeList = [];
+					res.forEach(item => {
+						this.typeList.push({
+							value: item.id,
+							label: item.valveType
+						})
+					})
+			
+				})
+			},
+			projectType() {
+				this.listTypeShow = !this.listTypeShow
+			},
+			search(selectType){
+				console.log('this.housename', this.housename)
+				console.log('this.selectType', this.selectType)
+				if(selectType == 'xiaoqu'){
+					this.house = this.housename;	
+					service.getBuilding({areaId: this.houseid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'louyu'
+							})
+						})
+					})
+					this.current = -1;
+					this.bulid = null;
+					this.unit = null;
+					this.houseNumber = null;
+				}else if(selectType == 'louyu'){
+					this.bulid = this.housename;
+					service.getUnit({buildingId: this.buildid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'danyuan'
+							})
+						})
+					})
+					this.unit = null;
+					this.houseNumber = null;
+					this.current = -1;
+				}else if(selectType == 'danyuan'){
+					this.unit = this.housename;
+					service.getAllHouse({unitId: this.unitid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'menpai'
+							})
+						})
+					})
+					this.houseNumber = null;
+					this.current = -1;
+					
+				}else if(selectType == 'menpai'){
+					this.houseNumber = this.housename;
+					this.housedata = this.numberid;
+					this.current = -1;
+				}
+				this.pop = false;
+			},
+			openHouse(selectType) {
+				if(selectType === 'xiaoqu'){
+					//选择小区
+					this.selectType = 'xiaoqu'
+					this.getArea();
+				}else if(selectType === 'louyu'){
+					//选择楼宇
+					this.selectType = 'louyu'
+					this.housename = null;
+					this.buildid = 0;
+					service.getBuilding({areaId: this.houseid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'louyu'
+							})
+						})
+					})
+				}else if(selectType === 'danyuan'){
+					//选择单元
+					this.selectType = 'danyuan'
+					this.housename = null;
+					this.unitid = 0;
+					service.getUnit({buildingId: this.buildid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'danyuan'
+							})
+						})
+					})
+				}else if(selectType === 'menpai'){
+					//选择门牌
+					this.selectType = 'menpai'
+					this.housename = null;
+					this.numberid = null;
+					service.getAllHouse({unitId: this.unitid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'menpai'
+							})
+						})
+					})
+				}
+				this.pop = !this.pop;
+			},
+			searchinfo(selectType){
+				if(selectType == 'xiaoqu'){
+					console.log('ssss',this.selectType)
+					service.getArea({name:this.keyword}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach((item, index) => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'xiaoqu'
+							})
+						})
+					})	
+					this.keyword = '';
+				}else if(selectType == 'louyu'){
+					console.log('ssss',this.selectType)
+					service.getBuilding({areaId: this.houseid,name:this.keyword}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach((item, index) => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'louyu'
+							})
+						})
+					})
+					this.keyword = '';
+				}else if(selectType == 'danyuan'){
+					console.log('ssss',this.selectType)
+					service.getUnit({buildingId: this.buildid,name:this.keyword}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach((item, index) => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'danyuan'
+							})
+						})
+					})
+					this.keyword = '';
+				}else if(selectType == 'menpai'){
+					console.log('ssss',this.selectType)
+					service.getAllHouse({unitId: this.unitid,name:this.keyword}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach((item, index) => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'menpai'
+							})
+						})
+					})
+					this.keyword = '';
+				}
+				
+			},
+			active(item,index){
+				this.current = index;
+				this.housename = item.label;
+				if(item.selectType == 'xiaoqu'){
+					this.houseid = item.value;
+				}else if(item.selectType == 'louyu'){
+					this.buildid = item.value;
+				}else if(item.selectType == 'danyuan'){
+					this.unitid = item.value;
+				}else if(item.selectType == 'menpai'){
+					this.numberid = item.value
+				}
+				this.selectType = item.selectType;
+			},
+			//获取小区
+			getArea() {
+				service.getArea().then(res => {
+					this.chooseHouseList = [];
+					res.forEach((item, index) => {
+						this.chooseHouseList.push({
+							value: item.id,
+							label: item.name,
+							selectType:'xiaoqu'
+						})
+					})
+				})
+			},
+			submit() {
+				console.log('submit',this.houseid,this.buildid,this.unitid,this.numberid);
+				this.getListFn();
+				this.show = false;
+			},
+			// 预览图片
+			preAvatar(url) {
+				console.log('url', url)
+				wx.previewImage({
+					current: url, // 当前显示图片的 http 链接
+					urls: [url] ,// 需要预览的图片 http 链接列表
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	/deep/ .u-input__input{
+		font-size: 64rpx!important;
+		color: #303133;
+		width: calc(100% - 200rpx)!important;
+	}
+	/deep/ .u-column-item{
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+		justify-content: center;
+		font-size: 64rpx!important;
+		color: #303133;
+		padding: 8rpx;
+	}
+	/deep/ .u-btn-picker.data-v-70102400 {
+	    padding: 16rpx;
+	    box-sizing: border-box;
+	    text-align: center;
+	    text-decoration: none;
+	    font-size: 64rpx!important;
+	}
+	.choose {
+		text-align: center;
+		padding: 20rpx;
+		margin: 30rpx;
+		color: #FFFFFF;
+		background: #43CEB1;
+		border-radius: 64rpx;
+	}
+	.active{
+	   background-color: #1890FF;
+	}
+	.select-type {
+		border: 2rpx solid #3857F3;
+		text-align: center;
+		padding: 20rpx;
+		margin: 30rpx;
+		color: #3857F3;
+		border-radius: 64rpx;
+	}
+	.total {
+		width: 100%;
+		padding: 40rpx 30rpx;
+		text-align: center;
+		color: #FFFFFF;
+	}
+	.list_s{
+		min-height: 100vh;
+		background-color: #F9F9F9;
+	}
+	.header_s{
+		padding: 30rpx 30rpx 0rpx 30rpx;
+		.btn_s{
+			margin: 0 15rpx;
+			width: calc(50% - 15px);
+			height: 100rpx;
+			line-height: 100rpx;
+			text-align: center;
+			background-color: #3857F3;
+			color: #fff;
+			font-size: 64rpx;
+			border-radius: 16rpx;
+		}
+	}
+	.footer_s{
+		padding: 30rpx;
+		.footer-item{
+			background: #FFFFFF;
+			height: auto;
+			border-radius: 8rpx;
+			margin-bottom: 30rpx;
+			padding: 20rpx 0rpx 20rpx 66rpx;
+			position: relative;
+			.item-title{
+				font-size: 48rpx;
+				font-family: PingFangSC-Medium, PingFang SC;
+				font-weight: 500;
+				color: #333333;
+				padding-bottom: 20rpx;
+			}
+			.main-list-icon{
+				position: absolute;
+				top: 43rpx;
+				left: 30rpx;
+				width: 16rpx;
+				height: 16rpx;
+				background: #3857F3;
+				border-radius: 2rpx;
+			}
+			.item-img{
+				display: flex;
+				justify-content: flex-start;
+				flex-wrap: wrap;
+				image{
+					width: calc(50% - 20rpx);
+					height: 200rpx;
+					padding-bottom: 20rpx;
+					padding-right: 20rpx;
+				}
+			}
+		}
+	}
+</style>

+ 135 - 0
pages/chart/details.vue

@@ -0,0 +1,135 @@
+<template>
+	<view class="main_s">
+		<view class="title_s">
+			<view class="main-list-icon"></view>
+			<view>服务类型</view>
+			<view>{{list.serviceTypeName ? list.serviceTypeName : ''}}</view>
+		</view>
+		<view class="title_s">
+			<view class="main-list-icon"></view>
+			<view>职工</view>
+			<view>{{list.userName ? list.userName : ''}}</view>
+		</view>
+		<view class="title_s">
+			<view class="main-list-icon"></view>
+			<view>房屋</view>
+			<view>{{list.house ? list.house : ''}}</view>
+		</view>
+		<view class="title_s">
+			<view class="main-list-icon"></view>
+			<view>管子类型</view>
+			<view>{{list.pipeType ? list.pipeType : ''}}</view>
+		</view>
+		<view class="title_s">
+			<view class="main-list-icon"></view>
+			<view>管子长度</view>
+			<view>{{list.pipeLength ? list.pipeLength : ''}}</view>
+		</view>
+		<view class="title_s">
+			<view class="main-list-icon"></view>
+			<view>自闭阀类型</view>
+			<view>{{list.valveType ? list.valveType : ''}}</view>
+		</view>
+		<view class="title_s">
+			<view class="main-list-icon"></view>
+			<view>订单时间</view>
+			<view>{{list.time ? list.time : ''}}</view>
+		</view>
+		<view class="title_s">
+			<view class="main-list-icon"></view>
+			<view>订单状态</view>
+			<view>{{list.orderStatus ? list.orderStatus : ''}}</view>
+		</view>
+		<view class="title_s">
+			<view class="main-list-icon"></view>
+			<view>审核状态</view>
+			<view>{{list.examineStatus ? list.examineStatus : ''}}</view>
+		</view>
+		<view class="title_img">
+			<view>上传</view>
+			<view class="item-img">
+				<!-- <image v-for="img in list.picUrl" :src="img" @tap="preAvatar(img)"></image> -->
+				<view v-for="(item,index) in list.picUrl" :key="index">
+					<view v-if="item.substring(item.length - 3) == 'png' || item.substring(item.length - 3) == 'jpg' ">
+						<image :src="item" mode=""
+							style="margin: 0 12rpx;" @tap="preAvatar(item)">
+						</image>
+					</view>
+					<view v-else>
+						<video :src="item"
+							style="margin: 0 12rpx;"
+							></video>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import service from '@/api/index.js'
+	export default {
+		data() {
+			return {
+				id: undefined,
+				list:{}
+			}
+		},
+		onLoad(e) {
+			this.id = e.id;
+			console.log(e.id)
+			this.getFn();
+		},
+		methods:{
+			getFn(){
+				service.getById({id:this.id}).then(res =>{
+					console.log("eee", res)
+					this.list = res;
+				})
+			},
+			// 预览图片
+			preAvatar(url) {
+				console.log('url', url)
+				wx.previewImage({
+					current: url, // 当前显示图片的 http 链接
+					urls: [url] ,// 需要预览的图片 http 链接列表
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.main_s{
+		background: #F9F9F9;
+		min-height: 100vh;
+		padding: 30rpx 30rpx 0rpx 30rpx;
+	}
+	.title_s{
+		display: flex;
+		justify-content: space-between;
+		width: 100%;
+		height: 102rpx;
+		line-height: 102rpx;
+		padding: 0rpx 20rpx 0rpx 66rpx;
+		background: #FFFFFF;
+		border-radius: 8px;
+		position: relative;
+		margin-bottom: 30rpx;
+		font-size: 40rpx;
+		font-weight: 600;
+	}
+	.title_img{
+		font-size: 40rpx;
+		font-weight: 600;
+	}
+	.main-list-icon{
+		position: absolute;
+		top: 43rpx;
+		left: 30rpx;
+		width: 16rpx;
+		height: 16rpx;
+		background: #3857F3;
+		border-radius: 2rpx;
+	}
+</style>

+ 276 - 0
pages/chart/newchartDetail.vue

@@ -0,0 +1,276 @@
+<template>
+	<view>
+		<view class="" style="margin-top: 0rpx;padding: 0rpx 0rpx 0rpx 20rpx;">
+			<view class="align-items" style="position: absolute; top: 90rpx; left: 0;" v-if="allType == null">
+				<back></back>
+			</view>
+			<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse()" v-if="type != 'ExamineWorker'">
+				{{house ? house :'全部小区'}}
+				<u-popup v-model="pop" mode="bottom" height="1000rpx">
+					<view style="margin: 20rpx;">
+						<u-search placeholder="请输入搜索内容" v-model="keyword" :action-style="{'font-size':'40rpx'}" @custom="searchinfo()"></u-search>
+					</view>
+					<view>
+						<scroll-view scroll-y="true" style="height: 600rpx; text-align: center;">
+							<view v-for="(item,index) in chooseHouseList" :key="item.value" >
+								<view :class="current === index ? 'active' : '' " style="color: #000000;" @click="active(item,index)">
+									{{item.label}}
+								</view>
+							</view>
+						</scroll-view>
+						<view class="">
+							<button type="default" class="font-fifty-six" @click="search()">确定</button>
+						</view>
+						<view class="">
+							<button type="default" @click="pop = false;"  class="font-fifty-six">取消</button>
+						</view>
+					</view>
+				</u-popup>
+			</view>
+			<view class="font-fifty-six SourceHanSansCN choose" @click="openWorker()" v-if="type == 'ExamineWorker'">
+				{{worker ? worker : '全部职工'}}
+				<u-select v-model="workShow" :list="workList" @confirm="workConfirm()"></u-select>
+			</view>
+			<view class="font-fifty-six SourceHanSansCN choose" @click="reset()">
+				重置
+			</view>
+			<view>
+				<qiun-data-charts type="pie" :chartData="chartData" background="none" canvas2d="false" />
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import service from '@/api/index.js'
+	export default {
+		name:'chartDetail',
+		props:{
+			allType:null
+		},
+		data(){
+			return {
+				chartData: {
+					series: [{
+						data: []
+					}]
+				},
+				type:'',
+				house:'',
+				houseId:'',
+				worker:'',
+				workerId:'',
+
+				chooseHouseList:[],
+				workList:[],
+				houseShow:false,
+				workShow:false,
+				keyword:'',
+				pop:false,
+				current:-1
+			}
+		},
+		created(){
+			let thet = this;
+			if(this.allType!=null){
+				this.type=this.allType;
+				if(this.type == 'examineArea'){
+					this.getExamineArea();
+				}else if(this.type == 'ExamineWorker'){
+					this.getwork();
+					this.getExamineWorker()
+				}else if(this.type == 'getExamineServe'){
+					this.getExamineServe()
+				}else if(this.type == 'getExaminePipeType'){
+					this.getExaminePipeType()
+				}else if(this.type == 'getExaminePipeLength'){
+					this.getExaminePipeLength()
+				}else if(this.type == 'getExamineValveType'){
+					this.getExamineValveType()
+				}else if(this.type =='getAreaSum'){
+					this.getAreaSum()
+				}
+				this.getArea();
+			}
+		},
+		onLoad(e) {
+			this.type = e.type;
+			if(this.type == 'examineArea'){
+				this.getExamineArea();
+			}else if(this.type == 'ExamineWorker'){
+				this.getwork();
+				this.getExamineWorker()
+			}else if(this.type == 'getExamineServe'){
+				this.getExamineServe()
+			}else if(this.type == 'getExaminePipeType'){
+				this.getExaminePipeType()
+			}else if(this.type == 'getExaminePipeLength'){
+				this.getExaminePipeLength()
+			}else if(this.type == 'getExamineValveType'){
+				this.getExamineValveType()
+			}else if(this.type =='getAreaSum'){
+				this.getAreaSum()
+			}
+		   this.getArea();
+		},
+		methods:{
+			openHouse(){
+				this.pop = !this.pop;
+			},
+			openWorker(){
+				this.workShow = !this.workShow;
+			},
+			workConfirm(e){
+				this.worker = e[0].label;
+				this.workerId = e[0].value;
+				this.getExamineWorker(this.workerId)
+			},
+			reset(){
+				this.houseId = '';
+				this.worker='',
+				this.workerId='',
+				this.getArea();
+				if(this.type == 'examineArea'){
+					this.getExamineArea(this.houseId)
+				}else if(this.type == 'ExamineWorker'){
+					this.getExamineWorker();
+				}else if(this.type == 'getExamineServe'){
+					this.getExamineServe(this.houseId)
+				}else if(this.type == 'getExaminePipeType'){
+					this.getExaminePipeType(this.houseId)
+				}else if(this.type == 'getExaminePipeLength'){
+					this.getExaminePipeLength(this.houseId)
+				}else if(this.type == 'getExamineValveType'){
+					this.getExamineValveType(this.houseId)
+				}else if(this.type =='getAreaSum'){
+					this.getAreaSum(this.houseId)
+				}
+				this.house = null;
+				this.current = -1;
+				this.$UTILS.showPrompt('重置成功!')
+			},
+			search(){
+				this.house = this.housename
+				if(this.type == 'examineArea'){
+				  this.getExamineArea(this.houseId)
+				}else if(this.type == 'getExamineServe'){
+					this.getExamineServe(this.houseId)
+				}else if(this.type == 'getExaminePipeType'){
+					this.getExaminePipeType(this.houseId)
+				}else if(this.type == 'getExaminePipeLength'){
+					this.getExaminePipeLength(this.houseId)
+				}else if(this.type == 'getExamineValveType'){
+					this.getExamineValveType(this.houseId)
+				}else if(this.type =='getAreaSum'){
+					this.getAreaSum(this.houseId)
+				}
+				this.pop = false;
+			},
+			searchinfo(){
+				service.getArea({name:this.keyword}).then(res => {
+					this.chooseHouseList = [];
+					res.forEach((item, index) => {
+						this.chooseHouseList.push({
+							value: item.id,
+							label: item.name,
+							selectType:'xiaoqu'
+						})
+					})
+				})	
+				this.keyword = null;
+			},
+			active(item,index){
+				this.current = index;
+				this.housename = item.label;
+				this.houseId = item.value;
+				this.selectType = item.selectType;
+			},
+			getArea(){
+				service.getArea().then(res => {
+					this.chooseHouseList = [];
+					res.forEach((item, index) => {
+						this.chooseHouseList.push({
+							value: item.id,
+							label: item.name,
+						})
+					})
+				})
+			},
+			//获取职工列表
+			getwork(){
+				service.getWorker().then(res => {
+					this.workList = [];
+					res.forEach((item, index) => {
+						this.workList.push({
+							value: item.id,
+							label: item.name,
+						})
+					})
+				})
+			},
+			//小区合格率
+			getExamineArea(houseId) {
+				service.getExamineArea({areaId:this.houseId}).then(res => {
+					this.chartData.series[0].data = res
+					console.log('this.chartData', this.chartData)
+				})
+			},
+			//职工合格率
+			getExamineWorker(workerId) {
+				service.getExamineWorker({workerId:this.workerId}).then(res => {
+					this.chartData.series[0].data = res
+					console.log('getExamineWorker', res)
+				})
+			},
+			//小区服务统计
+			getExamineServe(serveId) {
+				service.getExamineServe({id:this.houseId}).then(res => {
+					this.chartData.series[0].data = res
+					console.log('getExamineServe', res)
+				})
+			},
+			//管材类别统计
+			getExaminePipeType(pipeTypeId) {
+				service.getExaminePipeType({id:this.houseId}).then(res => {
+					this.chartData.series[0].data = res
+					console.log('getExaminePipeType', res)
+				})
+			},
+			//管材长度统计
+			getExaminePipeLength(pipeLengthId) {
+				service.getExaminePipeLength({id:this.houseId}).then(res => {
+					this.chartData.series[0].data = res
+					console.log('getExaminePipeLength', res)
+				})
+			},
+			//自闭阀类别统计
+			getExamineValveType(valveTypeId) {
+				service.getExamineValveType({id:this.houseId}).then(res => {
+					this.chartData.series[0].data = res
+					console.log('getExamineValveType', res)
+				})
+			},
+			//小区汇总统计
+			getAreaSum(areaSumId) {
+				service.getAreaSum({areaId:this.houseId}).then(res => {
+					this.chartData.series[0].data = res
+					console.log('getAreaSum', res)
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.choose {
+		text-align: center;
+		padding: 20rpx;
+		margin: 30rpx;
+		color: #FFFFFF;
+		background: #43CEB1;
+		border-radius: 64rpx;
+	}
+	.active{
+	   background-color: #1890FF;
+	}
+</style>

+ 734 - 0
pages/cityConstrution/cityConstrution.vue

@@ -0,0 +1,734 @@
+<template>
+	<view>
+		<view class="align-items" style="margin-top: 80rpx;">
+			<back></back>
+			<view class="title-text" style="margin-left: 20rpx;">
+				阀管施工
+			</view>
+		</view>
+		<view style="margin-top: 60rpx;">	
+			<view>
+				<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('xiaoqu')">
+					{{house ? house :'选择小区'}}
+					<u-popup v-model="pop" mode="bottom" height="1000rpx">
+						<view style="margin: 20rpx;">
+							<u-search placeholder="请输入搜索内容" v-model="keyword" :action-style="{'font-size':'40rpx'}" @custom="searchinfo(selectType)"></u-search>
+						</view>
+						<view>
+							<scroll-view scroll-y="true" style="height: 600rpx; text-align: center;">
+								<view v-for="(item,index) in chooseHouseList" :key="item.value" >
+									<view :class="current === index ? 'active' : '' " style="color: #000000;" @click="active(item,index)">
+										{{item.label}}
+									</view>
+								</view>
+							</scroll-view>
+							<view class="">
+								<button type="default" class="font-fifty-six" @click="search(selectType)">确定</button>
+							</view>
+							<view class="">
+								<button type="default" @click="pop = false;"  class="font-fifty-six">取消</button>
+							</view>
+						</view>
+					</u-popup>
+				<!-- <u-select v-model="houseShow" :list="chooseHouseList" @confirm="chooseHouse"></u-select> -->
+				</view>
+			</view>
+			
+			<view>
+				<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('louyu')">
+					{{bulid ? bulid : '选择楼宇'}}
+					<!-- <u-select v-model="bulidShow" :list="chooseBuildList" @confirm="chooseBuild"></u-select> -->
+				</view>
+
+			</view>
+			<view>
+				<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('danyuan')">
+					{{unit ? unit : '选择单元'}}
+					<!-- openUnit(), <u-select v-model="unitShow" :list="chooseUnitList" @confirm="chooseUnit"></u-select> -->
+				</view>
+
+			</view>
+			<view>
+				<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('menpai')">
+					{{houseNumber ? houseNumber  : '选择门牌'}}
+					<!-- open(), <u-select v-model="houseNumberShow" :list="chooseNumberList" @confirm="chooseNumber"></u-select> -->
+				</view>
+			</view>
+
+			<view>
+				<view class="font-fifty-six SourceHanSansCN select-type" @click="openType('shows')">
+					上门类型 <text class="font-fifty-six SourceHanSansCN" style="color: #232146;">
+						{{type ? '----' +  type : ''}}</text>
+					<u-select v-model="shows" :list="mounicipalList" @confirm="confirm"></u-select>
+				</view>
+				<view v-if="typeValue">
+					<view v-if=" typeValue === '002' ">
+						<view class="font-fifty-six SourceHanSansCN select-type" @click="projectType()">
+							自闭阀类型 <text class="font-fifty-six SourceHanSansCN" style="color: #232146;">
+								{{valueType ? '----' +  valueType : ''}}</text>
+							<u-select v-model="listTypeShow" :list="typeList" @confirm="listType"></u-select>
+						</view>
+						<view class="font-fifty-six SourceHanSansCN tube" @click="openType('tubeType')">
+							管子类别
+							<text class="font-fifty-six SourceHanSansCN" style="color: #232146;">
+								{{tubeType ?'----' + tubeType:''}}</text>
+							<u-select v-model="tubeTypeShow" :list="tubeTypeList" @confirm="tubeTypeConfirm"></u-select>
+						</view>
+						<view class="font-fifty-six SourceHanSansCN tube" @click="openType('tubeLong')">
+							管子长度
+							<text class="font-fifty-six SourceHanSansCN" style="color: #232146;">
+								{{tubeLong ?'----' + tubeLong  :''}}</text>
+							<u-select v-model="tubeLongShow" :list="tubeTypeLongList" @confirm="tubeLongConfirm">
+							</u-select>
+						</view>
+					</view>
+					<view class="upload align-items">
+						<view class="" style="display: flex; flex-wrap: wrap;">
+							<image src="/static/icon/chooseimg.png" mode=""
+								style="width: 190rpx; height: 190rpx; margin: 0 12rpx;; " @click="choose()"></image>
+							<view v-for="(item,index) in imgArr" :key="index" style="position: relative;">
+								<view v-if="item.substring(item.length - 3) == 'png' || item.substring(item.length - 3) == 'jpg' ">
+									<image :src="item" mode=""
+										style="width: 190rpx; height: 190rpx; margin: 0 12rpx;" @click="showPhoto(index)">
+									</image>
+								</view>
+								<view v-else>
+									<video :src="item"
+										style="width: 190rpx; height: 190rpx; margin: 0 12rpx;"></video>
+								</view>
+								<view @click="remove(index)" style="position: absolute; top: 0; right: 14rpx; border-radius: 50%; background-color: #FF0000;">
+									<u-icon name="close" color="#FFFFFF" size="35" ></u-icon> 
+								</view>
+							</view>
+						</view>
+						<view class="gray font-forty-eight SourceHanSansCN" v-if="photo">
+							此处添加照片或视频
+						</view>
+					</view>
+					<view class="upload">
+						<text class="font-forty SourceHanSansCN">备注:</text>
+						<textarea value="" placeholder="请输入备注" v-model="remark"/>
+					</view>
+				</view>
+				
+				<view class="font-fifty-six SourceHanSansCN total background-color1" @click="submit()">
+					提交数据
+				</view>
+				<!-- <u-select v-model="shows" :list="mounicipalList" @confirm="confirm"></u-select> -->
+				<!-- <u-select v-model="tubeTypeShow" :list="tubeTypeList" @confirm="tubeTypeConfirm"></u-select> -->
+				<!-- <u-select v-model="tubeLongShow" :list="tubeTypeLongList" @confirm="tubeLongConfirm"></u-select> -->
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import service from '@/api/index.js'
+	export default {
+		components: {
+
+		},
+		data() {
+			return {
+				keyword:'',
+				selectType:'',
+				pop:false,
+				housename:'',
+				houseid:0,
+				buildid:0,
+				unitid:0,
+				numberid:0,
+				houseShow: false,
+				current:-1,
+				chooseHouseList: [],
+				house: '选择小区',
+				bulid: '选择楼宇',
+				unit: '选择单元',
+				houseNumber: '选择门牌',
+				action: this.$HTTP.webUrl + `/obs`,
+				shows: false,
+				tubeTypeShow: false,
+				tubeLongShow: false,
+				mounicipalList: [],
+				tubeTypeList: [],
+				tubeTypeLongList: [],
+				type: '',
+				tubeType: '',
+				tubeLong: '',
+				// url: [],
+				photo: true,
+				typeValue: '',
+				headers: {
+					MAuthorization: "wxBearer " + uni.getStorageSync('token')
+				},
+				housedata: '',
+				typeList: [],
+				listTypeShow: false,
+				valueType: '',
+				uploading: false,
+				imgArr:[],
+				remark:'',
+				show:false,
+				progress:0 ,//上传图片进度百分比
+				loading:false
+			}
+		},
+		onLoad() {
+			this.getArea();
+			this.select();
+			this.getTubeType();
+			this.getTubeLong();
+			this.getProjectType();
+		},
+		methods: {
+			openHouse(selectType) {
+				if(selectType === 'xiaoqu'){
+					//选择小区
+					this.selectType = 'xiaoqu'
+					this.getArea();
+				}else if(selectType === 'louyu'){
+					//选择楼宇
+					this.selectType = 'louyu'
+					this.housename = null;
+					this.buildid = 0;
+					service.getBuilding({areaId: this.houseid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'louyu'
+							})
+						})
+					})
+					
+				}else if(selectType === 'danyuan'){
+					//选择单元
+					this.selectType = 'danyuan';
+					this.housename = null;
+					this.unitid = 0;
+					service.getUnit({buildingId: this.buildid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'danyuan'
+							})
+						})
+					})
+					
+				}else if(selectType === 'menpai'){
+					//选择门牌
+					this.selectType = 'menpai';
+					this.housename = null;
+					this.numberid = null;
+					service.getHouse({unitId: this.unitid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'menpai'
+							})
+						})
+					})
+				}
+				this.pop = !this.pop;
+			},
+			searchinfo(selectType){
+				if(selectType == 'xiaoqu'){
+					console.log('ssss',this.selectType)
+					service.getArea({name:this.keyword}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach((item, index) => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'xiaoqu'
+							})
+						})
+					})	
+					this.keyword = '';
+				}else if(selectType == 'louyu'){
+					console.log('ssss',this.selectType)
+					service.getBuilding({areaId: this.houseid,name:this.keyword}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach((item, index) => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'louyu'
+							})
+						})
+					})
+					this.keyword = '';
+				}else if(selectType == 'danyuan'){
+					console.log('ssss',this.selectType)
+					service.getUnit({buildingId: this.buildid,name:this.keyword}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach((item, index) => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'danyuan'
+							})
+						})
+					})
+					this.keyword = '';
+				}else if(selectType == 'menpai'){
+					console.log('ssss',this.selectType)
+					service.getHouse({unitId: this.unitid,name:this.keyword}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach((item, index) => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'menpai'
+							})
+						})
+					})
+					this.keyword = '';
+				}
+				
+			},
+			showPhoto(index){
+				uni.previewImage({
+					current:index,
+					urls:this.imgArr,
+				})
+				console.log('sss')
+			},
+			openBuild() {
+				this.bulidShow = !this.bulidShow
+			},
+			projectType() {
+				this.listTypeShow = !this.listTypeShow
+			},
+			//获取小区
+			getArea() {
+				service.getArea().then(res => {
+					this.chooseHouseList = [];
+					res.forEach((item, index) => {
+						this.chooseHouseList.push({
+							value: item.id,
+							label: item.name,
+							selectType:'xiaoqu'
+						})
+					})
+				})
+			},
+			getProjectType() {
+				service.getProject().then(res => {
+					console.log('getProjectType', res)
+					this.typeList = [];
+					res.forEach(item => {
+						this.typeList.push({
+							value: item.id,
+							label: item.valveType
+						})
+					})
+
+				})
+			},
+			search(selectType){
+				if(selectType == 'xiaoqu'){
+					this.house = this.housename;	
+					service.getBuilding({areaId: this.houseid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'louyu'
+							})
+						})
+					})
+					this.current = -1;
+					this.bulid = null;
+					this.unit = null;
+					this.houseNumber = null;
+				}else if(selectType == 'louyu'){
+					this.bulid = this.housename;
+					service.getUnit({buildingId: this.buildid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'danyuan'
+							})
+						})
+					})
+					
+					this.unit = null;
+					this.houseNumber = null;
+					this.current = -1;
+				}else if(selectType == 'danyuan'){
+					this.unit = this.housename;
+					service.getHouse({unitId: this.unitid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'menpai'
+							})
+						})
+					})
+					this.houseNumber = null;
+					this.current = -1;
+					
+				}else if(selectType == 'menpai'){
+					this.houseNumber = this.housename;
+					this.housedata = this.numberid;
+					this.current = -1;
+				}
+				this.pop = false;
+			},
+			active(item,index){
+				this.current = index;
+				this.housename = item.label;
+				if(item.selectType == 'xiaoqu'){
+					this.houseid = item.value;
+				}else if(item.selectType == 'louyu'){
+					this.buildid = item.value;
+				}else if(item.selectType == 'danyuan'){
+					this.unitid = item.value;
+				}else if(item.selectType == 'menpai'){
+					this.numberid = item.value
+				}
+				this.selectType = item.selectType;
+			},
+			
+			openUnit() {
+				this.unitShow = !this.unitShow
+			},
+			//选择门牌
+			
+			open() {
+				this.houseNumberShow = !this.houseNumberShow
+			},
+			//选择上门类型
+			confirm(e) {
+				this.type = e[0].label
+				this.typeValue = e[0].value
+
+				this.imgArr = [];
+				this.tubeType = null;
+				this.tubeLong = null;
+				this.valueType = null;
+				this.photo = true;
+			},
+			//选择类型
+			select() {
+				service.getDic({
+					dicType: 'service_type'
+				}).then(res => {
+					res.forEach(item => {
+						this.mounicipalList.push({
+							value: item.value,
+							label: item.name
+						})
+					})
+				})
+			},
+			openType(type) {
+				if (type === 'shows') {
+					this.shows = !this.shows
+				} else if (type === 'tubeType') {
+					this.tubeTypeShow = !this.tubeTypeShow
+				} else {
+					this.tubeLongShow = !this.tubeLongShow
+				}
+
+			},
+			tubeTypeConfirm(e) {
+				this.tubeType = e[0].label
+			},
+			listType(e) {
+				this.valueType = e[0].label
+			},
+			tubeLongConfirm(e) {
+				this.tubeLong = e[0].label
+			},
+			getTubeType() {
+				service.getPipeType().then(res => {
+					res.forEach(item => {
+						this.tubeTypeList.push({
+							value: item.id,
+							label: item.pipeType
+						})
+					})
+				})
+			},
+			getTubeLong() {
+				service.getPipeLength().then(res => {
+					res.forEach(item => {
+						this.tubeTypeLongList.push({
+							value: item.id,
+							label: item.pipeLength
+						})
+					})
+				})
+			},
+			remove(index) {
+				uni.showModal({
+					title: '提示',
+					content: '是否删除该图片或视频?',
+					success: (res) => {
+						if (res.confirm) {
+							this.imgArr.splice(index, 1)
+							console.log('this.imgarr',this.imgArr)
+							if (this.imgArr.length <= 0) {
+								this.photo = true;
+							}
+						}
+					}
+				})
+			},
+			choose() {
+				let _this = this;
+				uni.showActionSheet({
+					title:'上传',
+					itemList:['图片','视频'],
+					success: (res) => {
+						console.log(res)
+						if(res.tapIndex == 0){
+							this.chooseimage()
+						}else{
+							this.choosevideo()
+						}
+					}
+				})
+			},
+			chooseimage() {
+				console.log('图片')
+				let _this = this;
+				uni.chooseImage({
+					sizeType: ['album', 'camera'],
+					success(resp) {
+						console.log('res--uni.chooseMedia', resp);
+						resp.tempFiles.forEach((item, index) => {
+							const task = uni.uploadFile({
+								url: _this.$HTTP.webUrl + `/obs`,
+								filePath: item.path,
+								name: 'file',
+								formData: {},
+								header: _this.headers,
+								success: res => {
+									// 判断是否json字符串,将其转为json格式
+									let data = _this.$u.test.jsonString(res
+										.data) ? JSON.parse(res.data) : res.data;
+									if (![200, 201, 204].includes(res.statusCode)) {
+										// this.uploadError(index, data);
+										_this.$UTILS.showPrompt('上传失败!')
+									} else {
+										if (_this.progress === 100) {
+											console.log('_this.progress', _this.progress)
+											console.log('data----', data)
+											console.log('res--', res)
+											_this.imgArr.push(data.data.url)
+											console.log('imgArr', _this.imgArr)
+											_this.$UTILS.showPrompt('上传成功!')
+											_this.photo = false;
+										} 
+									}
+								},
+								fail: e => {
+									_this.$UTILS.showPrompt('上传失败!')
+									this.uploadError(index, e);
+								},
+								complete: res => {
+									uni.hideLoading();
+									_this.uploading = false;
+								
+								}
+							});
+							task.onProgressUpdate(res => {
+								_this.progress = res.progress;
+								console.log('onProgressUpdate', res)
+								console.log('task.onProgressUpdate', _this.progress)
+								uni.showLoading({
+									title: '上传中'
+								})
+								if(_this.progress != 100){
+									_this.loading = false
+									console.log('_this.loading false', _this.loading)
+								}else {
+									_this.loading = true
+									console.log('_this.loading true', _this.loading)
+								}
+							});
+			
+						})
+						
+					},
+				})
+			},
+			choosevideo() {
+				let _this = this;
+				console.log('视频')
+				uni.chooseVideo({
+					sourceType: ['album','camera'],
+					maxDuration: 30,
+					success(resp) {
+						const task = uni.uploadFile({
+							url: _this.$HTTP.webUrl + `/obs`,
+							filePath: resp.tempFilePath,
+							name: 'file',
+							formData: {},
+							header: _this.headers,
+							success: res => {
+								// 判断是否json字符串,将其转为json格式
+								let data = _this.$u.test.jsonString(res
+									.data) ? JSON.parse(res.data) : res.data;
+								if (![200, 201, 204].includes(res.statusCode)) {
+									this.uploadError(index, data);
+								} else {	
+									//上传成功
+									if (_this.progress === 100) {
+										console.log('_this.progress', _this.progress)
+										_this.imgArr.push(data.data.url)
+										console.log('imgArr', _this.imgArr)
+										_this.$UTILS.showPrompt('上传成功!')
+										_this.photo = false;
+									} 
+								}
+							},
+							fail: e => {
+								_this.$UTILS.showPrompt('上传失败!')
+								this.uploadError(index, e);
+							},
+							complete: res => {
+								uni.hideLoading();
+								_this.uploading = false;
+							}
+						});
+						task.onProgressUpdate(res => {
+							_this.progress = res.progress;
+							console.log('onProgressUpdate', res)
+							uni.showLoading({
+								title: '上传中'
+							})
+							if(_this.progress != 100){
+								_this.loading = false
+								console.log('_this.loading false', _this.loading)
+							}else {
+								_this.loading = true
+								console.log('_this.loading true', _this.loading)
+							}
+						});
+			
+					},
+				})
+			},
+			submit() {
+				if (!this.housedata) {
+					this.$UTILS.showPrompt('请选择门牌号!')
+					return
+				}
+				if (!this.type) {
+					this.$UTILS.showPrompt('请选择上门类型!')
+					return
+				}
+				if (this.typeValue == '002') {
+					if (!this.valueType) {
+						this.$UTILS.showPrompt('请选择自闭阀类别!')
+						return
+					}
+					if (!this.tubeType) {
+						this.$UTILS.showPrompt('请选择管子类型!')
+						return
+					}
+					if (!this.tubeLong) {
+						this.$UTILS.showPrompt('请选择管子长度!')
+						return
+					}
+				}
+
+				if (this.imgArr.length <= 0) {
+					this.$UTILS.showPrompt('请上传照片或视频!')
+					return
+				}
+				if(this.loading == false) {
+					this.$UTILS.showPrompt('照片或视频未上传完毕,无法提交!')
+					return
+				}
+				let param = {
+					serviceType: this.typeValue,
+					pipeType: this.tubeType,
+					pipeLength: this.tubeLong,
+					houseId: this.housedata,
+					valveType: this.valueType,
+					picUrl: this.imgArr,
+					remark: this.remark,
+				}
+				console.log('param-----', param)
+				service.submitOrder(param).then(res => {
+					this.$UTILS.showPrompt('提交成功!')
+					this.houseNumber = null;
+					this.type = null;
+					this.typeValue = null;
+					this.valueType = null;
+					this.tubeType = null;
+					this.tubeLong = null;
+					this.housedata = null;
+					this.typeValue = null;
+					this.remark = null;
+					this.imgArr = [];
+				}).catch(e => {
+					this.$UTILS.showPrompt('提交失败!')
+					console.error(e)
+				})
+
+
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.choose {
+		text-align: center;
+		padding: 20rpx;
+		margin: 30rpx;
+		color: #FFFFFF;
+		background: #43CEB1;
+		border-radius: 64rpx;
+	}
+	.active{
+	   background-color: #1890FF;
+	}
+	.select-type {
+		border: 2rpx solid #3857F3;
+		text-align: center;
+		padding: 20rpx;
+		margin: 30rpx;
+		color: #3857F3;
+		border-radius: 64rpx;
+	}
+
+	.upload {
+		margin: 30rpx;
+		padding: 30rpx 20rpx;
+		border: 2rpx solid #3857F3;
+		border-radius: 48rpx;
+	}
+
+	.tube {
+		text-align: center;
+		padding: 20rpx;
+		margin: 30rpx;
+		color: #43CEB1;
+		border: 2rpx solid #43CEB1;
+		border-radius: 64rpx;
+	}
+
+	.total {
+		width: 100%;
+		padding: 40rpx 30rpx;
+		text-align: center;
+		color: #FFFFFF;
+	}
+</style>

+ 236 - 0
pages/historyConstruction/historyConstruction.vue

@@ -0,0 +1,236 @@
+<template>
+	<view>
+		<view class="title-text" style="margin-top: 80rpx;">
+			历史施工
+		</view>
+		
+		<view :class="(kgName == '展开搜索') ? 'hei_vie2':'hei_vie'">
+			<view class="justify-content select">
+				<view class="thirsty gray border" v-for="item in type" :key="item.value"
+					:class="{active: show === item.value}" @click="active(item),getListAll()">
+					{{item.name}}
+				</view>
+			</view>
+			<!-- <u-search placeholder="请输入搜索内容" v-model="nameValue" :action-style="{'font-size':'40rpx'}" @custom="getListAll()"></u-search> -->
+			<view class="inp_vie">
+				<input type="text" value="" placeholder="小区名称搜索" class="search-text" v-model="areaName"/>
+				<input type="text" value="" placeholder="楼栋名称搜索" class="search-text" v-model="buildingName"/>
+				<input type="text" value="" placeholder="单元名称搜索" class="search-text" v-model="unitName"/>
+				<input type="text" value="" placeholder="房间名称搜索" class="search-text" v-model="houseName"/>
+				<button @click="getListAll()" class="btn_vie">搜索</button>
+			</view>
+		</view>
+		<view>
+			<button class="p_zk" @click="p_zk()">{{kgName}}</button>
+		</view>
+				
+		<view v-for="(item,index) in list" :key="index">
+			<view @click="gotopage(`/pages/historyConstruction/historyDetail?id=${item.id}`)">
+				<view class="type">
+					<view class="justify-content">
+						<view class="font-forty blue" v-if="item.serviceType != '004'">
+							类别:{{item.serviceType}}
+						</view>
+						<view class="font-forty blue" v-else>
+							类别:安检
+						</view>
+						<view class="font-twenty-eight gray">
+							{{item.time}}
+						</view>
+					</view>
+					<view class="font-thirty-six black" style="margin: 30rpx 0;" v-if="show === '002' || item.serviceType=='正常施工'">
+						状态:{{item.status}}
+					</view>
+					<view class="font-thirty-six black" style="margin: 30rpx 0;" v-if="show === '002' || item.serviceType=='正常施工'">
+						审核意见:
+						<text class="" v-if="item.reason != null || item.reason != undefined">
+							{{item.reason}}
+						</text>
+						<text class="" v-else>
+							无
+						</text>
+					</view>
+					<view class="font-thirty-six black" style="margin: 30rpx 0;">
+						{{item.house}}
+					</view>
+					<button v-if="show === '002' && item.status == '待审核'" style="background-color: #007AFF; color: #FFFFFF;" @click.stop="gotoUpdate(item)">修改</button>
+				</view>
+			</view>
+		</view>
+		<view class="font-forty total">
+			合计: <text class="font-fifty-six SourceHanSansCN red">{{list.length}}</text>
+		</view>
+	</view>
+</template>
+
+<script>
+	import service from '@/api/index.js'
+	export default {
+		data() {
+			return {
+				show: '001',
+				index: 0,
+				list: [],
+				type: [],
+				
+				areaName: '',
+				buildingName: '',
+				unitName: '',
+				houseName: '',
+				pop: false,
+				kgName: '展开搜索',
+			}
+		},
+		onShow() {
+			// this.show = '001';
+			this.getListAll();
+			this.select();
+		},
+		methods: {
+			getListAll() {
+				service.getListAll({serviceType: this.show,
+				areaName:this.areaName,
+				buildingName:this.buildingName,
+				unitName:this.unitName,
+				houseName:this.houseName}).then(res => {
+					this.list = res
+				})
+			},
+			gotopage(url) {
+				uni.navigateTo({
+					url
+				})
+			},
+			select() {
+				service.getDic({dicType: 'service_type'}).then(res => {
+					// console.log('service_type', res)
+					const shenhe = {};
+					shenhe.value='es002';
+					shenhe.name='不合格';
+					res.push(shenhe);
+					this.type = res;
+				})
+			},
+			active(item) {
+				this.show = item.value;
+			},
+			gotoUpdate(item){
+				uni.navigateTo({
+					url:`/pages/historyConstruction/updateInfo?id=${item.id}&&house=${item.house}`,
+				})				
+			},
+			p_zk(){
+				if(this.kgName == '收起搜索'){
+					this.kgName = '展开搜索';
+				}else{
+					this.kgName = '收起搜索';
+				}
+			}
+		}
+	}
+	
+	
+	
+	
+</script>
+
+<style lang="scss" scoped>
+	.select {
+		margin: 50rpx 20rpx 0;
+		height: 105px;
+		display: block;
+		.border {
+				width: 48%;
+			    text-align: center;
+			    padding: 20rpx 10rpx;
+			    border-radius: 48rpx;
+			    display: block;
+			    float: left;
+			    border: 2rpx solid #9dc9ff;
+			    margin: 1%;
+				background: #f5f7ff;
+		}
+	}
+	.active {
+	    background: #3857F3!important;
+	    color: #FFFFFF;
+	}
+
+	.type {
+		margin: 20rpx;
+		padding: 20rpx;
+		background: #FFFFFF;
+		box-shadow: 0rpx 8rpx 17rpx 0rpx rgba(0, 0, 0, 0.04);
+		border-radius: 10rpx;
+	}
+
+	.text {
+		border-left: 15rpx solid #3857F3;
+		padding-left: 20rpx;
+	}
+
+	.total {
+		width: 100%;
+		padding: 40rpx 30rpx;
+		border: 1rpx solid #727272;
+		background: #FFFFFF;
+	}
+
+	.active {
+		background: #3857F3;
+		color: #FFFFFF;
+	}
+	.choose {
+		text-align: center;
+		padding: 20rpx;
+		margin: 30rpx;
+		color: #FFFFFF;
+		background: #43CEB1;
+		border-radius: 64rpx;
+	}
+	.search-text{
+		float: left;
+	    border-style:solid;
+		border-width: 1rpx;
+		height: 50rpx;
+		width: 90%;
+		border-radius: 24rpx;
+	}
+	.inp_vie{
+		padding: 1% 3.5%;
+	}
+	.inp_vie input{
+		float: none;
+		    width: 98%;
+		    padding-left: 1.5%;
+		    height: 40px;
+		    margin-bottom: 1.5%;
+		    /* border-bottom: 1px solid #ccc!important; */
+		    border: 1px solid #c7c7c7;
+		    border-radius: 5px;
+			
+	}
+	.btn_vie{
+		background: #3857F3;
+		color: #fff;
+	}
+	.btn_vie:active{
+		background: #0925b3;
+	}
+	.p_zk{
+		height: 40px;
+		line-height: 40px;
+		text-align: center;
+		// background: #eee;
+		margin: 1% auto;
+		width: 93%;
+		font-size: 15px;
+	}
+	.hei_vie{
+		height: 350px;
+	}
+	.hei_vie2{
+		height: 130px!important;
+		overflow: hidden;
+	}
+</style>

+ 53 - 0
pages/historyConstruction/historyDetail.vue

@@ -0,0 +1,53 @@
+<template>
+	<view>
+		<view class="" style="margin-top: 100rpx;">
+			<back></back>
+		</view>
+		<view v-for="(item,index) in image" :key="index" class="flex" >
+			<!-- <image :src="item" mode="" class="image" @click="showPhoto(index)"></image> -->
+			<image :src="item" mode="" class="image" @click="showPhoto(index)" v-if="item.substring(item.length - 3) == 'png' || item.substring(item.length - 3) == 'jpg' "></image>
+			<video :src="item" controls v-else class="image"></video>
+		</view>
+		
+	</view>
+</template>
+
+<script>
+	import service from '@/api/index.js'
+	export default{
+		data(){
+			return{
+				id:0,
+				image:[],
+				index:0,
+			}
+		},
+		onLoad(e) {
+		   this.id = e.id;
+		   this.photo()
+		},
+		methods:{
+			photo(){
+				service.getOrderPhoto({orderId:this.id}).then(res=>{
+					this.image = res;
+				})
+			},
+			showPhoto(index){
+				uni.previewImage({
+					current:index,
+					urls:this.image,
+				})
+				
+			}
+		}
+	}
+
+</script>
+
+<style lang="scss" scoped>
+	.image{
+		margin: 50rpx auto;
+		width: 330rpx;
+		height: 230rpx;
+	}
+</style>

+ 599 - 0
pages/historyConstruction/updateInfo.vue

@@ -0,0 +1,599 @@
+<template>
+	<view>
+		<view style="margin: 30rpx;">
+			<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('xiaoqu')">
+				{{house ? house :'选择小区'}}
+			<u-popup v-model="pop" mode="bottom" height="1000rpx">
+				<view style="margin: 20rpx;">
+					<u-search placeholder="请输入搜索内容" v-model="keyword" :action-style="{'font-size':'40rpx'}" @custom="searchinfo(selectType)"></u-search>
+				</view>
+				<view>
+					<scroll-view scroll-y="true" style="height: 600rpx; text-align: center;">
+						<view v-for="(item,index) in chooseHouseList" :key="item.value" >
+							<view :class="current === index ? 'active' : '' " style="color: #000000;" @click="active(item,index)">
+								{{item.label}}
+							</view>
+						</view>
+					</scroll-view>
+					<view class="">
+						<button type="default" class="font-fifty-six" @click="search(selectType)">确定</button>
+					</view>
+					<view class="">
+						<button type="default" @click="pop = false;"  class="font-fifty-six">取消</button>
+					</view>
+				</view>
+			</u-popup>
+			</view>
+			<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('louyu')">
+				{{bulid ? bulid : '选择楼宇'}}
+			</view>
+			<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('danyuan')">
+				{{unit ? unit : '选择单元'}}
+			</view>
+			<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('menpai')">
+				{{houseNumber ? houseNumber  : '选择门牌'}}
+			</view>
+			<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('fuwu')">
+				{{serviceType ? serviceType  : '服务类别'}} 
+			</view>
+			<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('leibie')">
+				{{tubeType ? tubeType  : '管子类别'}}
+			</view>
+			<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('changdu')">
+				{{tubeLong ? tubeLong  : '管子长度'}}
+			</view>
+			<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('zibifa')">
+				{{valueType ? valueType  : '自闭阀类型'}}
+			</view>
+			<view class="upload">
+				<text class="font-forty SourceHanSansCN">备注:</text>
+				<textarea value="" placeholder="请输入备注" v-model="remark"/>
+			</view>
+			<view class="font-forty-eight align-items" style="margin: 30rpx 0;">
+				图片与视频:
+			</view>
+			<view class="" style="display: flex; flex-wrap: wrap;">
+				<image src="/static/icon/chooseimg.png" mode="" style="width: 190rpx; height: 190rpx; margin: 0 12rpx; "
+					@click="choose()"></image>
+				<view v-for="(item,index) in imgArr" :key="index" style="position: relative;">
+					<view v-if="item.substring(item.length - 3) == 'png' || item.substring(item.length - 3) == 'jpg' ">
+						<image :src="item" mode=""
+							style="width: 190rpx; height: 190rpx; margin: 0 20rpx;" @click="showPhoto(index)">
+						</image>
+					</view>
+					<view v-else>
+						<video :src="item"
+							style="width: 190rpx; height: 190rpx; margin: 0 20rpx;"></video>
+					</view>
+					<view @click="remove(index)" style="position: absolute; top: 0; right: 14rpx; border-radius: 50%; background-color: #FF0000;">
+						<u-icon name="close" color="#FFFFFF" size="35" ></u-icon> 
+					</view>
+				</view>
+			</view>
+		</view>
+		<button type="default" class="btn" @click="updata()">确认更改</button>
+	</view>
+</template>
+
+<script>
+	import service from '@/api/index.js'
+	export default {
+		data() {
+			return {
+				id:0,
+				imgArr:[],
+				progress:0 ,//上传图片进度百分比
+				headers: {
+					MAuthorization: "wxBearer " + uni.getStorageSync('token')
+				},
+				house:'',
+				bulid:'',
+				unit:'',
+				houseNumber:'',
+				tubeType: '',
+				tubeLong: '',
+				typeValue: '',
+				valueType:'',
+				selectType:'',
+				pop:false,
+				housename:'',
+				houseid:0,
+				buildid:0,
+				unitid:0,
+				numberid:0,
+				houseShow: false,
+				current:-1,
+				chooseHouseList: [],
+				serviceType:'',
+				serviceTypeId:'',
+				tubetypeid:'',
+				tubelength:'',
+				valuetypeid:'',
+				shows:false,
+				remark:'',
+				index:0,
+				keyword:'',
+			}
+		},
+		onLoad(e) {
+			this.id = parseInt(e.id);
+			this.photo();
+			this.getById();
+		},
+		methods:{
+			photo(){
+				service.getOrderPhoto({orderId:this.id}).then(res=>{
+					this.imgArr = res;
+				})
+			},
+			showPhoto(index){
+				uni.previewImage({
+					current:index,
+					urls:this.imgArr,
+				})
+				console.log('sss')
+			},
+			getById(){ 
+				service.getById({id:this.id}).then(res=>{
+					this.house = res.areaName;
+					this.bulid = res.buildingName;
+					this.unit = res.unitName; 
+					this.houseNumber = res.houseName;
+					this.serviceType = res.serviceTypeName;
+					this.houseid = res.areaId;
+					this.buildid = res.buildingId;
+					this.unitid = res.unitId;
+					this.numberid = res.houseId;
+					this.remark = res.remark;
+					this.tubeType = res.pipeType;
+					this.tubeLong = res.pipeLength;
+					this.valueType = res.valveType;
+					this.serviceTypeId = res.serviceType;
+				})
+			},
+			//获取小区
+			getArea() {
+				service.getArea().then(res => {
+					this.chooseHouseList = [];
+					res.forEach((item, index) => {
+						this.chooseHouseList.push({
+							value: item.id,
+							label: item.name,
+							selectType:'xiaoqu'
+						})
+					})
+				})
+			},
+			searchinfo(selectType){
+				if(selectType == 'xiaoqu'){
+					console.log('ssss',this.selectType)
+					service.getArea({name:this.keyword}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach((item, index) => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'xiaoqu'
+							})
+						})
+					})	
+					this.keyword = '';
+				}else if(selectType == 'louyu'){
+					console.log('ssss',this.selectType)
+					service.getBuilding({areaId: this.houseid,name:this.keyword}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach((item, index) => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'louyu'
+							})
+						})
+					})
+					this.keyword = '';
+				}else if(selectType == 'danyuan'){
+					console.log('ssss',this.selectType)
+					service.getUnit({buildingId: this.buildid,name:this.keyword}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach((item, index) => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'danyuan'
+							})
+						})
+					})
+					this.keyword = '';
+				}else if(selectType == 'menpai'){
+					console.log('ssss',this.selectType)
+					service.getHouse({unitId: this.unitid,name:this.keyword}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach((item, index) => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'menpai'
+							})
+						})
+					})
+					this.keyword = '';
+				}
+				
+			},
+			//选择服务类型
+			openHouse(selectType) {
+				if(selectType === 'xiaoqu'){
+					//选择小区
+					this.selectType = 'xiaoqu'
+					this.getArea();
+				}else if(selectType === 'louyu'){
+					//选择楼宇
+					service.getBuilding({areaId: this.houseid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'louyu'
+							})
+						})
+					})
+				}else if(selectType === 'danyuan'){
+					//选择单元
+					service.getUnit({buildingId: this.buildid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'danyuan'
+							})
+						})
+					})
+				}else if(selectType === 'menpai'){
+					//选择门牌
+					service.getHouse({unitId: this.unitid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'menpai'
+							})
+						})
+					})
+				}
+				else if(selectType === 'fuwu'){
+					//选择服务类别
+					// console.log('fuwu',this.selectType)
+					this.chooseHouseList = [];
+					service.getDic({dicType: 'service_type'}).then(res => {
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.value,
+								label: item.name,
+								selectType:'fuwu'
+							})
+						})
+					})
+				}else if(selectType === 'leibie'){
+					//选择管子类别
+					this.chooseHouseList = [];
+					service.getPipeType().then(res => {
+						res.forEach(item => {
+							// this.chooseHouseList = [];
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.pipeType,
+								selectType:'leibie'
+							})
+						})
+					})
+				}else if(selectType === 'changdu'){
+					//选择管子长度
+					this.chooseHouseList = [];
+					service.getPipeLength().then(res => {
+						res.forEach(item => {
+							// this.chooseHouseList = [];
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.pipeLength,
+								selectType:'changdu'
+							})
+						})
+					})
+				}else if(selectType === 'zibifa'){
+					//选择自闭阀类别
+					this.chooseHouseList = [];
+					service.getProject().then(res => {
+						// this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.valveType,
+								selectType:'zibifa'
+							})
+						})
+					
+					})
+				}
+				this.pop = !this.pop;
+			},
+			search(selectType){
+				if(selectType == 'xiaoqu'){
+					this.house = this.housename;	
+					service.getBuilding({areaId: this.houseid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'louyu'
+							})
+						})
+					})
+					this.current = -1;
+
+				}else if(selectType == 'louyu'){
+					this.bulid = this.housename;
+					service.getUnit({buildingId: this.buildid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'danyuan'
+							})
+						})
+					})
+					this.current = -1;
+				}else if(selectType == 'danyuan'){
+					this.unit = this.housename;
+					service.getHouse({unitId: this.unitid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'menpai'
+							})
+						})
+					})
+
+					this.current = -1;
+					
+				}else if(selectType == 'menpai'){
+					this.houseNumber = this.housename;
+					this.numberid = this.numberid;
+					this.current = -1;
+				}else if(selectType == 'fuwu'){
+					this.serviceType = this.housename;
+					this.current = -1;
+				}else if(selectType == 'leibie'){
+					this.tubeType = this.housename;
+					this.current = -1;
+				}else if(selectType == 'changdu'){
+					this.tubeLong = this.housename;
+					this.current = -1;
+				}else if(selectType == 'zibifa'){
+					this.valueType = this.housename;
+					this.current = -1;
+				}
+				this.pop = false;
+			},
+			active(item,index){
+				console.log('active')
+				this.current = index;
+				this.housename = item.label;
+				if(item.selectType == 'xiaoqu'){
+					this.houseid = item.value;
+				}else if(item.selectType == 'louyu'){
+					this.buildid = item.value;
+				}else if(item.selectType == 'danyuan'){
+					this.unitid = item.value;
+				}else if(item.selectType == 'menpai'){
+					this.numberid = item.value
+				}else if(item.selectType == 'fuwu'){
+					this.serviceTypeId = item.value
+				}else if(item.selectType == 'leibie'){
+					this.tubetypeid = item.value
+				}else if(item.selectType == 'changdu'){
+					this.tubelength = item.value
+				}else if(item.selectType == 'zibifa'){
+					this.valuetypeid = item.value
+				}
+				this.selectType = item.selectType;
+			},
+			choose() {
+				let _this = this;
+				uni.showActionSheet({
+					title: '上传',
+					itemList: ['图片', '视频'],
+					success: (res) => {
+						if (res.tapIndex == 0) {
+							this.chooseimage()
+						} else {
+							this.choosevideo()
+						}
+					}
+				})
+			},
+			chooseimage() {
+				console.log('图片')
+				let _this = this;
+				uni.chooseImage({
+					sizeType: ['album', 'camera'],
+					success(resp) {
+						console.log('res--uni.chooseMedia', resp);
+						resp.tempFiles.forEach((item, index) => {
+							const task = uni.uploadFile({
+								url: _this.$HTTP.webUrl + `/obs`,
+								filePath: item.path,
+								name: 'file',
+								formData: {},
+								header: _this.headers,
+								success: res => {
+									// 判断是否json字符串,将其转为json格式
+									let data = _this.$u.test.jsonString(res
+										.data) ? JSON.parse(res.data) : res.data;
+									if (![200, 201, 204].includes(res.statusCode)) {
+										// this.uploadError(index, data);
+										_this.$UTILS.showPrompt('上传失败!')
+									} else {
+										if (_this.progress === 100) {
+											console.log('_this.progress', _this.progress)
+											console.log('data----', data)
+											console.log('res--', res)
+											_this.imgArr.push(data.data.url)
+											console.log('imgArr', _this.imgArr)
+											_this.$UTILS.showPrompt('上传成功!')
+											_this.photo = false;
+										} 
+									}
+								},
+								fail: e => {
+									_this.$UTILS.showPrompt('上传失败!')
+									this.uploadError(index, e);
+								},
+								complete: res => {
+									uni.hideLoading();
+									_this.uploading = false;
+								
+								}
+							});
+							task.onProgressUpdate(res => {
+								_this.progress = res.progress;
+								console.log('onProgressUpdate', res)
+								console.log('task.onProgressUpdate', _this.progress)
+								uni.showLoading({
+									title: '上传中'
+								})
+							});
+						})
+					},
+				})
+			},
+			choosevideo() {
+				let _this = this;
+				console.log('视频')
+				uni.chooseVideo({
+					sourceType: ['album','camera'],
+					maxDuration: 30,
+					success(resp) {
+						const task = uni.uploadFile({
+							url: _this.$HTTP.webUrl + `/obs`,
+							filePath: resp.tempFilePath,
+							name: 'file',
+							formData: {},
+							header: _this.headers,
+							success: res => {
+								// 判断是否json字符串,将其转为json格式
+								let data = _this.$u.test.jsonString(res
+									.data) ? JSON.parse(res.data) : res.data;
+								if (![200, 201, 204].includes(res.statusCode)) {
+									this.uploadError(index, data);
+								} else {	
+									//上传成功
+									if (_this.progress === 100) {
+										console.log('_this.progress', _this.progress)
+										_this.imgArr.push(data.data.url)
+										console.log('imgArr', _this.imgArr)
+										_this.$UTILS.showPrompt('上传成功!')
+										_this.photo = false;
+									} 
+								}
+							},
+							fail: e => {
+								_this.$UTILS.showPrompt('上传失败!')
+								this.uploadError(index, e);
+							},
+							complete: res => {
+								uni.hideLoading();
+								_this.uploading = false;
+							}
+						});
+						task.onProgressUpdate(res => {
+							_this.progress = res.progress;
+							console.log('onProgressUpdate', res)
+							uni.showLoading({
+								title: '上传中'
+							})
+						});
+			
+					},
+				})
+			},
+			remove(index) {
+				uni.showModal({
+					title: '提示',
+					content: '是否删除该图片或视频?',
+					success: (res) => {
+						if (res.confirm) {
+							this.imgArr.splice(index, 1)
+							console.log('this.imgarr',this.imgArr)
+						}
+					}
+				})
+			},
+			updata(){
+				let param = {
+					id:this.id,
+					serviceType: this.serviceTypeId,
+					pipeType: this.tubeType,
+					pipeLength: this.tubeLong,
+					houseId: this.numberid,
+					valveType: this.valueType,
+					picUrl: this.imgArr,
+					remark: this.remark,
+				};
+				console.log('param', param)
+				service.getUpdateOrder(param).then(res=>{
+					this.$UTILS.showPrompt('提交成功!')
+					// setTimeout(()=>{
+					// 	uni.switchTab({
+					// 		url:'/pages/historyConstruction/historyConstruction'
+					// 	})
+					// },1000)
+				}).catch(e => {
+					this.$UTILS.showPrompt('提交失败!')
+					console.error(e)
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.input {
+		// width: 300rpx;
+		height: 20%;
+		border: 2rpx solid #000000;
+	}
+	.choose {
+		text-align: center;
+		padding: 20rpx;
+		margin: 30rpx;
+		color: #FFFFFF;
+		background: #43CEB1;
+		border-radius: 64rpx;
+	}
+	.upload {
+		margin: 30rpx;
+		padding: 30rpx 20rpx;
+		border: 2rpx solid #3857F3;
+		border-radius: 48rpx;
+	}
+	.active{
+	   background-color: #1890FF;
+	}
+	.btn {
+		background-color: #007AFF;
+		color: #FFFFFF;
+		margin: 30rpx;
+	}
+	.image{
+		margin: 50rpx auto;
+		width: 330rpx;
+		height: 230rpx;
+	}
+</style>

+ 153 - 0
pages/index/index.vue

@@ -0,0 +1,153 @@
+<template>
+	<view class="content" style="position: relative;">
+		<view>	
+			<image src="/static/icon/backgroundimg.png" mode="" class="header"></image>
+		</view>
+		<view class="align-items" style="position: absolute; top: 90rpx; left: 0;" @click="gotopage('/pages/noLogin/typeList')">
+			<back></back>
+		</view>
+		<view style="margin: 0 30rpx;">
+			<swiper class="swiper" @change="change" autoplay="true" interval="3000">
+				<swiper-item v-for="(item,index) in lunbo" :key="index">
+					<view>
+						<image :src="item.picUrl" mode=""></image>
+					</view>
+				</swiper-item>
+			</swiper>
+		</view>
+		<view class="distance justify-content">
+			<view class="square" @click="gotopage('/pages/cityConstrution/cityConstrution')">
+				<image src="/static/icon/city.png" mode="" class="icon"></image>
+				<view class="font-thirty-six">
+					阀管施工
+				</view>
+			</view>
+			<view class="square" @click="history()">
+				<image src="/static/icon/construction.png" mode="" class="icon"></image>
+				<view class="font-thirty-six">
+					历史施工
+				</view>
+			</view>
+			<view class="square" @click="gotopage('/pages/service/service')">
+				<image src="/static/icon/service.png" mode="" class="icon"></image>
+				<view class="font-thirty-six">
+					服务说明
+				</view>
+			</view>
+			<view class="square" @click="gotopage('/pages/aboutme/aboutme')">
+				<image src="/static/icon/construction.png" mode="" class="icon"></image>
+				<view class="font-thirty-six">
+					关于我们
+				</view>
+			</view>
+		</view>
+		<view class="justify-content" style="margin: 50rpx 30rpx 0;">
+			<view class="font-forty-eight text">
+				公告内容
+			</view>
+			<view class="font-thirty-six darkgray" @click="more()">
+				查看更多
+				<u-icon name="arrow-right"></u-icon>
+			</view>
+		</view>
+		<view class="notice" v-for="(item,index) in list" :key="index">
+			<view class="justify-content">
+				<view class="font-forty">
+					{{item.title}}
+				</view>
+				<view class="font-twenty-eight gray">
+					{{item.time}}
+				</view>
+			</view>
+			<view class="font-thirty-two black" style="margin: 30rpx 0;">
+				<rich-text :nodes="item.text"></rich-text>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import service from '@/api/index.js'
+	export default {
+		data() {
+			return {
+				list:[],
+				lunbo:[]
+			}
+		},
+		onLoad() {
+			this.getLunBo();  
+			
+		},
+		onShow() {
+			this.getnotice();
+		},
+		methods: {
+			change(e) {
+				this.current = e.detail.current;
+			},
+			gotopage(url){
+				uni.navigateTo({
+					url
+				})
+			},
+			getLunBo(){
+				service.getLunBo().then(res=>{
+					this.lunbo = res;
+				})
+			},
+			getnotice(){
+				service.getNoticeList().then(res=>{
+					this.list = res
+				})
+			},
+			more(){
+				uni.navigateTo({
+					url:'/pages/notice/noticeList'
+				})
+			},
+			history(){
+				uni.switchTab({
+					url:'/pages/historyConstruction/historyConstruction'
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.header {
+		width: 100%;
+		height: 300rpx;
+	}
+
+	.swiper {
+		position: absolute;
+		top: 200rpx;
+		width: 690rpx;
+		height: 280rpx;
+		margin: 0 30rpx;
+	}
+	.distance{
+		margin: 250rpx 30rpx 0;
+		.square{
+			margin: 15rpx;
+			text-align: center;
+			.icon{
+				width: 100rpx;
+				height: 100rpx;
+			}
+		}
+	}
+	.notice{
+		margin: 20rpx;
+		padding: 20rpx;
+		background: #FFFFFF;
+		box-shadow: 0rpx 8rpx 17rpx 0rpx rgba(0, 0, 0, 0.04);
+		border-radius: 10rpx;
+	}
+	.text{
+		border-left: 15rpx solid #3857F3;
+		padding-left: 20rpx;
+	}
+</style>

+ 176 - 0
pages/login/login.vue

@@ -0,0 +1,176 @@
+<template>
+	<view>
+		<image src="/static/icon/background.png" mode="" class="background"></image>
+		<view class="title">
+			<image src="/static/icon/logo.png" mode="" class="logo"></image>
+			<view class="font-sixty-four">
+				贞达市政工程
+			</view>
+		</view>
+		<view>
+			<view class="align-items margin" style="border-bottom: 2rpx solid #000000;">
+				<image src="/static/icon/number.png" mode="" class="img"></image>
+				<input type="text" placeholder="请输入工号" placeholder-class="font-forty-eight"
+					class="input font-forty-eight" v-model="form.number" />
+			</view>
+			<view class="align-items margin" style="border-bottom: 2rpx solid #000000;">
+				<image src="/static/icon/password.png" mode="" class="img"></image>
+				<input type="password" placeholder="请输入密码" placeholder-class="font-forty-eight"
+					class="input font-forty-eight" v-model="form.password" />
+			</view>
+		</view>
+		<view class="remember">
+			<u-checkbox-group @change="checkboxGroupChange">
+				<u-checkbox
+					@change="checkboxChange"
+					v-model="item.checked" 
+					v-for="(item, index) in list" :key="index" 
+					:name="item.name"
+				>{{item.name}}</u-checkbox>
+			</u-checkbox-group>
+		</view>
+		<view @click="login()">
+			<button class="background-color1 white font-forty-eight btn">登录</button>
+		</view>
+	</view>
+</template>
+
+<script>
+	import service from '@/api/index.js'
+	export default {
+		data() {
+			return {
+				form: {
+					number: '',
+					password: ''
+				},
+				list:[
+					{
+						name: '记住密码',
+						checked: true,
+						disabled: false
+					}
+				],
+				flag: true,
+			}
+		},
+		onLoad() {
+			const HCnumber = uni.getStorageSync('HCnumber');
+			const HCpassword = uni.getStorageSync('HCpassword');//缓存的密码
+			if(HCnumber && HCpassword){
+				this.form.number = HCnumber;
+				this.form.password = HCpassword;
+			}
+		},
+		methods: {
+			login() {
+				if (this.form.number === '') {
+					this.$UTILS.showPrompt('请输入工号!')
+				} else if (this.form.password === '') {
+					this.$UTILS.showPrompt('请输入密码!')
+				} else {
+					let _this = this;
+					let param = {
+						jobNum: _this.form.number,
+						password: _this.form.password
+					}
+					if(_this.flag){
+						uni.setStorageSync('HCnumber', _this.form.number);
+						uni.setStorageSync('HCpassword', _this.form.password);
+					}else{
+						uni.removeStorageSync('HCnumber');
+						uni.removeStorageSync('HCpassword');
+					}
+					service.login(param).then(res => {
+						console.log('res', res.token)
+						uni.setStorage({
+							key: 'token',
+							data: res.token,
+							success: (res) => {
+								console.log('登陆成功res',res)
+								console.log('登陆成功')
+								this.$UTILS.showPrompt('登录成功!')
+								setTimeout(()=>{
+									uni.navigateTo({
+										url:'/pages/noLogin/typeList'
+									})
+								},2000)
+							
+							},
+							fail: (e) => {
+								console.log(e)
+							}
+						})
+					})
+				}
+			},
+			checkboxChange(e) {
+				this.flag = e.value;
+			},
+			// 选中任一checkbox时,由checkbox-group触发
+			checkboxGroupChange(e) {
+				if(e.length > 0){
+					uni.setStorageSync('HCnumber', this.form.number);
+					uni.setStorageSync('HCpassword', this.form.password);
+				}else{
+					uni.removeStorageSync('HCnumber');
+					uni.removeStorageSync('HCpassword');
+				}
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	.background {
+		z-index: -1;
+		position: fixed;
+		width: 100%;
+		height: 100%;
+		background-size: 100% 100%;
+	}
+
+	.title {
+		display: flex;
+		align-items: center;
+		margin: 20rpx 0;
+		padding: 200rpx 0 0;
+
+		.logo {
+			width: 150rpx;
+			height: 150rpx;
+			margin: 0 25rpx;
+		}
+	}
+
+	.margin {
+		margin: 80rpx;
+
+		.img {
+			width: 80rpx;
+			height: 80rpx;
+
+		}
+
+		.input {
+			width: 70%;
+			height: 90rpx;
+			padding: 30rpx;
+		}
+	}
+	
+	.remember{
+		width: 100%;
+		height: 80rpx;
+		line-height: 80rpx;
+		padding-left: 80rpx;
+		letter-spacing: 2rpx;
+	}
+	
+	.btn {
+		width: 590rpx;
+		margin: 0rpx auto 0;
+		background: #3857F3;
+		border-radius: 72rpx;
+	}
+</style>

+ 75 - 0
pages/noLogin/My.vue

@@ -0,0 +1,75 @@
+<template>
+	<view>
+		<view class="align-items" style="margin-top: 80rpx;">
+			<back></back>
+		</view>
+		<view v-for="(item,index) in list" :key="index">
+			<view  @click="gotopage(item)">
+				<view class="type">
+					<view class="justify-content">
+						<view class="font-forty blue" >
+							类别:{{name}}
+						</view>
+						<view class="font-twenty-eight gray">
+							{{item.time}} 
+						</view>
+					</view>
+					<view class="font-thirty-six black" style="margin: 30rpx 0;">
+						{{item.house}}
+					</view>
+					<view class="font-thirty-six black" style="margin: 30rpx 0;">
+						备注:
+						<text v-if="item.remark != null">
+							{{item.remark}}
+						</text>
+						<text v-else>
+							无
+						</text>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+
+</template>
+
+<script>
+	import service from '@/api/index.js'
+	export default { 
+		data(){
+			return {
+				list:[],
+				name:'',
+			}
+		},
+		onLoad(e) {
+			console.log('e',e)
+			this.id = e.id;
+			this.name = e.name;
+			this.address = e.address;
+			this.getListAll();
+		},
+		methods:{
+			getListAll() {
+				service.getListAll({serviceType: this.id}).then(res => {
+					this.list = res
+				})
+			},
+			gotopage(item){
+				uni.navigateTo({
+					url:`/pages/noLogin/Myphoto?id=${item.id}`,
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.type {
+		margin: 20rpx;
+		padding: 20rpx;
+		background: #FFFFFF;
+		box-shadow: 0rpx 8rpx 17rpx 0rpx rgba(0, 0, 0, 0.04);
+		border-radius: 10rpx;
+	}
+</style>

+ 51 - 0
pages/noLogin/Myphoto.vue

@@ -0,0 +1,51 @@
+<template>
+	<view class="">
+		<view class="" style="margin-top: 100rpx;">
+			<back></back>
+		</view>
+		<view v-for="(item,index) in image" :key="index" class="flex" >
+			<image :src="item" mode="" class="image" @click="showPhoto(index)" v-if="item.substring(item.length - 3) == 'png' || item.substring(item.length - 3) == 'jpg' "></image>
+			<video :src="item" controls v-else class="image"></video>
+		</view>
+	</view>
+	
+</template>
+
+<script>
+	import service from '@/api/index.js'
+	export default{
+		data(){
+			return{
+				id:0,
+				image:[],
+				index:0,
+			}
+		},
+		onLoad(e) {
+		   this.id = e.id;
+		   this.photo()
+		},
+		methods:{
+			photo(){
+				service.getOrderPhoto({orderId:this.id}).then(res=>{
+					this.image = res;
+				})
+			},
+			showPhoto(index){
+				uni.previewImage({
+					current:index,
+					urls:this.image,
+				})
+				
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.image{
+		margin: 50rpx auto;
+		width: 330rpx;
+		height: 230rpx;
+	}
+</style>

+ 121 - 0
pages/noLogin/cityProject.vue

@@ -0,0 +1,121 @@
+<template>
+	<view>
+		<image src="/static/icon/background.png" mode="" class="background"></image>
+		<view class="" style="padding-top: 90rpx;">
+			<back></back>
+		</view>
+		<view style="padding-top: 60rpx;">
+			<view style="margin: 20rpx;">
+				<u-search placeholder="请输入搜索内容" v-model="nameValue" :action-style="{'font-size':'40rpx'}" @custom="getProjectList()"></u-search>
+			</view>
+			<view class="project-content" v-for="(item,index) in list" :key="index" >
+				<view v-if="item.name == '灶管阀改造'" @click="gotoindex()">
+					<view >
+						<view class="font-forty-eight blue">
+							项目名称:{{item.name}}
+						</view>
+						<view class="font-forty-eight blue">
+							项目地址:{{item.address}}
+						</view>
+					</view>
+				</view>
+				<view v-else-if="item.name == '安检' || item.name == '维修' || item.name == '开栓'" @click="topage(`/pages/noLogin/data?id=${item.id}&name=${item.name}&address=${item.address}`)">
+					<view >
+						<view class="font-forty-eight blue">
+							项目名称:{{item.name}}
+						</view>
+						<view class="font-forty-eight blue">
+							项目地址:{{item.address}}
+						</view>
+					</view>
+				</view>
+				<view v-else @click="topage(`/pages/noLogin/uploadProject?id=${item.id}&name=${item.name}&address=${item.address}`)">
+					<view >
+						<view class="font-forty-eight blue">
+							项目名称:{{item.name}}
+						</view>
+						<view class="font-forty-eight blue">
+							项目地址:{{item.address}}
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import service from '@/api/index.js'
+	export default {
+		data() {
+			return {
+				list:[],
+				value:'',
+				nameValue:''
+			}
+		},
+		onLoad(e) {
+			console.log(e)
+			this.value = e.value
+			this.getProjectList();
+		},
+		methods: {
+			gotoindex(){
+				uni.switchTab({
+					url:'/pages/index/index'
+				})
+			},
+			topage(url){
+				uni.navigateTo({
+					url
+				})
+			},
+			getProjectList() {
+				service.getProjectList({engineType:this.value,name:this.nameValue}).then(res=>{
+					console.log('getProjectType', res)
+					if(res.length == 0){
+						this.$UTILS.showPrompt('暂无项目!')
+					}
+					this.list = res;
+				})
+			}
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	.background {
+		z-index: -1;
+		position: fixed;
+		width: 100%;
+		height: 100%;
+		background-size: 100% 100%;
+	}
+
+	.project {
+		border-radius: 72rpx;
+		padding: 25rpx 0;
+		text-align: center;
+		margin: 170rpx 55rpx 0;
+	}
+
+	.project-content {
+		border: 4rpx solid #3857F3;
+		margin: 40rpx 55rpx 0;
+		padding: 30rpx 20rpx;
+		border-radius: 48rpx;
+	}
+	.position{
+		position: absolute;
+		bottom: 100rpx;
+		right: 50rpx;
+		.arrow{
+			width: 152rpx;
+			height: 152rpx;
+			border-radius: 50%;
+			padding: 25rpx;
+			margin-left: 20rpx;
+		}
+	}
+	
+</style>

+ 89 - 0
pages/noLogin/data.vue

@@ -0,0 +1,89 @@
+<template>
+	<view>
+		<image src="/static/icon/background.png" mode="" class="background"></image>
+		<view style="padding-top: 100rpx;">
+			<view class="align-items">
+				<back></back>
+			</view>
+			<view class="project-content">
+				<view class="font-forty-eight blue">
+					项目名称:{{name}}
+				</view>
+				<view class="font-forty-eight blue">
+					项目地址:{{address}}
+				</view>
+			</view>
+		</view>
+		<view class="">
+			<view class="project background-color1 font-sixty-four white" @click="add('repair')">添加</view>
+			<view class="project background-color1 font-sixty-four white" @click="add('list')">查看</view>
+			<view class="project background-color1 font-sixty-four white" @click="add('My')">我的</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				id: 0,
+				name: '',
+				address: '',
+			}
+		},
+		onLoad(e) {
+			console.log(e)
+			this.id = e.id;
+			this.name = e.name;
+			this.address = e.address
+		},
+		methods:{
+			add(type){
+				let that = this;
+				if(this.name === '安检'){
+					uni.navigateTo({
+						url: `/pages/noLogin/${type}?id=004&name=${that.name}&address=${that.address}`
+					})
+				}else if(this.name === '维修'){
+					uni.navigateTo({
+						url: `/pages/noLogin/${type}?id=005&name=${that.name}&address=${that.address}`
+					})
+				}else if(this.name === '开栓'){
+					uni.navigateTo({
+						url: `/pages/noLogin/${type}?id=006&name=${that.name}&address=${that.address}`
+					})
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.background {
+		z-index: -1;
+		position: fixed;
+		width: 100%;
+		height: 100%;
+		background-size: 100% 100%;
+	}
+
+	.project-content {
+		border: 4rpx solid #3857F3;
+		margin: 80rpx 55rpx 0;
+		padding: 30rpx 20rpx;
+		border-radius: 48rpx;
+	}
+
+	.project {
+		border-radius: 72rpx;
+		padding: 25rpx 0;
+		text-align: center;
+		margin: 60rpx 55rpx 0;
+	}
+
+	.project-img {
+		width: 300rpx;
+		height: 168rpx;
+		margin: 20rpx auto;
+	}
+</style>

+ 657 - 0
pages/noLogin/list.vue

@@ -0,0 +1,657 @@
+<template>
+	<view class="list_s">
+		<view class="header_s">
+			<u-popup v-model="show" mode="top">
+				<view class="popup">
+					<view style="margin-top: 120rpx;">
+						<view>
+							<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('xiaoqu')">
+								{{house ? house :'选择小区'}}
+								<u-popup v-model="pop" mode="top" height="1000rpx">
+									<view style="margin: 20rpx;">
+										<u-search placeholder="请输入搜索内容" v-model="keyword" :action-style="{'font-size':'40rpx'}" @custom="searchinfo(selectType)"></u-search>
+									</view>
+									<view>
+										<scroll-view scroll-y="true" style="height: 600rpx; text-align: center;">
+											<view v-for="(item,index) in chooseHouseList" :key="item.value" >
+												<view :class="current === index ? 'active' : '' " style="color: #000000;" @click="active(item,index)">
+													{{item.label}}
+												</view>
+											</view>
+										</scroll-view>
+										<view class="">
+											<button type="default" class="font-fifty-six" @click="search(selectType)">确定</button>
+										</view>
+										<view class="">
+											<button type="default" @click="pop = false;"  class="font-fifty-six">取消</button>
+										</view>
+									</view>
+								</u-popup>
+							</view>
+						</view>
+						
+						<view>
+							<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('louyu')">
+								{{bulid ? bulid : '选择楼宇'}}
+							</view>
+					
+						</view>
+						<view>
+							<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('danyuan')">
+								{{unit ? unit : '选择单元'}}
+							</view>
+					
+						</view>
+						<view>
+							<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('menpai')">
+								{{houseNumber ? houseNumber  : '选择门牌'}}
+							</view>
+						</view>
+						<view>
+						<!-- <view class="font-fifty-six SourceHanSansCN choose" @click="openType('shows')">
+							上门类型 <text class="font-fifty-six SourceHanSansCN" style="color: #232146;">
+								{{type ? '----' +  type : ''}}</text>
+							<u-select v-model="shows" :list="mounicipalList" @confirm="confirm"></u-select>
+						</view> -->
+						<view>
+							<view class="font-fifty-six SourceHanSansCN choose" @click="showStart = true">
+								{{form.starTime ? form.starTime  : '开始时间'}}
+								<u-picker v-model="showStart" mode="time" @confirm="confirmStart"></u-picker>
+							</view>
+						</view>
+						<view>
+							<view class="font-fifty-six SourceHanSansCN choose" @click="showEnd = true">
+								{{form.endTime ? form.endTime  : '结束时间'}}
+								<u-picker v-model="showEnd" mode="time" @confirm="confirmEnd"></u-picker>
+							</view>
+						</view>
+						<view style="display: flex;">
+							<view style="height: 100rpx; font-size: 64rpx; width: 180rpx; font-weight: 600;">工号</view>
+							<u-input
+								style="font-size: 64rpx!important; font-weight: 600; width: 400rpx!important;"
+								placeholder="请输入工号"
+								placeholder-style="font-size: 64rpx;"
+								v-model="form.jobNum"
+								maxlength = '4'
+								:type='numberType'
+								:border="border" />
+						</view>
+						<view class="font-fifty-six SourceHanSansCN total background-color1" @click="submit()">
+							提交数据
+						</view>
+					</view>
+					</view>
+				</view>
+			</u-popup>
+			<view style="display: flex;">
+				<view class="btn_s" @click="show = true">查询</view>
+				<view class="btn_s" @click="kong">重置</view>
+			</view>
+		</view>
+		<view class="footer_s" v-if="list.length > 0">
+			<view class="footer-item" v-for="(item, index) in list">
+				<view class="item-title">地址: {{item.house}}</view>
+				<view class="item-title">职工: {{item.userName}}</view>
+				<view class="item-title">时间: {{item.time}}</view>
+				<view class="item-title">备注: 
+					<text class="" v-if="item.remark != null">
+						{{item.remark}}
+					</text>
+					<text class="" v-else>
+						无
+					</text>
+				</view>
+				<view class="item-img">
+					<view class="img-view"  v-for="img in item.picUrl">
+						<image :src="img" mode="" @tap="preAvatar(img)" v-if="img.substring(img.length - 3) == 'png' || img.substring(img.length - 3) == 'jpg' "></image>
+						<video :src="img" controls v-else ></video>
+					</view>
+					<!-- <image v-for="img in item.picUrl" :src="img" @tap="preAvatar(img)"></image> -->
+					
+				</view>
+				<view class="main-list-icon"></view>
+			</view>
+		</view>
+		<view class="footer_s" style="padding-top: 100rpx;" v-else>
+			<u-empty text="暂无数据" mode="list"></u-empty>
+		</view>
+	</view>
+</template>
+
+<script>
+	import service from '@/api/index.js'
+	export default {
+		data() {
+			return {
+				id: 0,
+				numberType: 'number',
+				name: '',
+				address: '',
+				keyword:'',
+				selectType:'',
+				pop: false,
+				show: false,
+				border: false,
+				typeValue: '',
+				current:-1,
+				labelPosition: 'left',
+				errorType: ['message'],
+				list: [],
+				chooseHouseList: [],
+				typeList: [],
+				showStart: false,
+				showEnd: false,
+				form: {
+					starTime: '',
+					endTime: '',
+					jobNum: '',
+				},
+				params: {
+					pageNum: 1,
+					pageSize: 10,
+				},
+				listTypeShow: false,
+				tubeTypeShow: false,
+				tubeLongShow: false,
+				house: '选择小区',
+				bulid: '选择楼宇',
+				unit: '选择单元',
+				houseNumber: '选择门牌',
+				shows: false,
+				// mounicipalList: [],
+				tubeTypeLongList: [],
+				tubeTypeList: [],
+				houseid:'',
+				type: '',
+				buildid:'',
+				unitid:'',
+				numberid:'',
+			}
+		},
+		onLoad(e) {
+			this.id = e.id;
+			this.name = e.name;
+			this.address = e.address
+			this.getListFn();
+			this.getArea();
+			// this.select();
+			this.getProjectType();
+			this.getTubeType();
+			this.getTubeLong();
+		},
+		onReachBottom() {
+			this.getNextListFn()
+		},
+		onPullDownRefresh() {
+			this.getListFn();
+			setTimeout(function () {
+				uni.stopPullDownRefresh();
+			}, 1000);
+		},
+		methods:{
+			kong(){
+				this.houseid = '';
+				this.buildid = '';
+				this.unitid = '';
+				this.numberid = '';
+				this.form.starTime = '';
+				this.form.endTime = '';
+				this.form.jobNum = '';
+				this.getListFn();
+			},
+			confirmStart(e){
+				console.log(e)
+				this.form.starTime = `${e.year}-${e.month}-${e.day}`
+			},
+			confirmEnd(e){
+				console.log(e)
+				this.form.endTime = `${e.year}-${e.month}-${e.day}`
+			},
+			openUnit() {
+				this.unitShow = !this.unitShow
+			},
+			//选择门牌
+			open() {
+				this.houseNumberShow = !this.houseNumberShow
+			},
+			//选择上门类型
+			confirm(e) {
+				this.type = e[0].label
+				this.typeValue = e[0].value
+			
+				this.imgArr = [];
+				this.tubeType = null;
+				this.tubeLong = null;
+				this.valueType = null;
+			},
+			//选择类型
+			// select() {
+			// 	service.getDic({
+			// 		dicType: 'service_type'
+			// 	}).then(res => {
+			// 		res.forEach(item => {
+			// 			this.mounicipalList.push({
+			// 				value: item.value,
+			// 				label: item.name
+			// 			})
+			// 		})
+			// 	})
+			// },
+			openType(type) {
+				if (type === 'shows') {
+					this.shows = !this.shows
+				} else if (type === 'tubeType') {
+					this.tubeTypeShow = !this.tubeTypeShow
+				} else {
+					this.tubeLongShow = !this.tubeLongShow
+				}
+			
+			},
+			tubeTypeConfirm(e) {
+				this.tubeType = e[0].label
+			},
+			listType(e) {
+				this.valueType = e[0].label
+			},
+			tubeLongConfirm(e) {
+				this.tubeLong = e[0].label
+			},
+			getTubeType() {
+				service.getPipeType().then(res => {
+					res.forEach(item => {
+						this.tubeTypeList.push({
+							value: item.id,
+							label: item.pipeType
+						})
+					})
+				})
+			},
+			getTubeLong() {
+				service.getPipeLength().then(res => {
+					res.forEach(item => {
+						this.tubeTypeLongList.push({
+							value: item.id,
+							label: item.pipeLength
+						})
+					})
+				})
+			},
+			getProjectType() {
+				service.getProject().then(res => {
+					console.log('getProjectType', res)
+					this.typeList = [];
+					res.forEach(item => {
+						this.typeList.push({
+							value: item.id,
+							label: item.valveType
+						})
+					})
+			
+				})
+			},
+			projectType() {
+				this.listTypeShow = !this.listTypeShow
+			},
+			search(selectType){
+				console.log('this.housename', this.housename)
+				console.log('this.selectType', this.selectType)
+				if(selectType == 'xiaoqu'){
+					this.house = this.housename;	
+					service.getBuilding({areaId: this.houseid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'louyu'
+							})
+						})
+					})
+					this.current = -1;
+					this.bulid = null;
+					this.unit = null;
+					this.houseNumber = null;
+				}else if(selectType == 'louyu'){
+					this.bulid = this.housename;
+					service.getUnit({buildingId: this.buildid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'danyuan'
+							})
+						})
+					})
+					this.unit = null;
+					this.houseNumber = null;
+					this.current = -1;
+				}else if(selectType == 'danyuan'){
+					this.unit = this.housename;
+					service.getAllHouse({unitId: this.unitid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'menpai'
+							})
+						})
+					})
+					this.houseNumber = null;
+					this.current = -1;
+					
+				}else if(selectType == 'menpai'){
+					this.houseNumber = this.housename;
+					this.housedata = this.numberid;
+					this.current = -1;
+				}
+				this.pop = false;
+			},
+			openHouse(selectType) {
+				if(selectType === 'xiaoqu'){
+					//选择小区
+					this.selectType = 'xiaoqu';
+					this.getArea();
+				}else if(selectType === 'louyu'){
+					//选择楼宇
+					this.selectType = 'louyu'
+					service.getBuilding({areaId: this.houseid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'louyu'
+							})
+						})
+					})
+				}else if(selectType === 'danyuan'){
+					//选择单元
+					this.selectType = 'danyuan'
+					service.getUnit({buildingId: this.buildid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'danyuan'
+							})
+						})
+					})
+				}else if(selectType === 'menpai'){
+					//选择门牌
+					this.selectType = 'menpai'
+					service.getAllHouse({unitId: this.unitid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'menpai'
+							})
+						})
+					})
+				}
+				this.pop = !this.pop;
+			},
+			searchinfo(selectType){
+				if(selectType == 'xiaoqu'){
+					console.log('ssss',this.selectType)
+					service.getArea({name:this.keyword}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach((item, index) => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'xiaoqu'
+							})
+						})
+					})	
+					this.keyword = '';
+				}else if(selectType == 'louyu'){
+					console.log('ssss',this.selectType)
+					service.getBuilding({areaId: this.houseid,name:this.keyword}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach((item, index) => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'louyu'
+							})
+						})
+					})
+					this.keyword = '';
+				}else if(selectType == 'danyuan'){
+					console.log('ssss',this.selectType)
+					service.getUnit({buildingId: this.buildid,name:this.keyword}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach((item, index) => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'danyuan'
+							})
+						})
+					})
+					this.keyword = '';
+				}else if(selectType == 'menpai'){
+					console.log('ssss',this.selectType)
+					service.getAllHouse({unitId: this.unitid,name:this.keyword}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach((item, index) => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'menpai'
+							})
+						})
+					})
+					this.keyword = '';
+				}
+				
+			},
+			active(item,index){
+				this.current = index;
+				this.housename = item.label;
+				if(item.selectType == 'xiaoqu'){
+					this.houseid = item.value;
+				}else if(item.selectType == 'louyu'){
+					this.buildid = item.value;
+				}else if(item.selectType == 'danyuan'){
+					this.unitid = item.value;
+				}else if(item.selectType == 'menpai'){
+					this.numberid = item.value
+				}
+				this.selectType = item.selectType;
+			},
+			//获取小区
+			getArea() {
+				service.getArea().then(res => {
+					this.chooseHouseList = [];
+					res.forEach((item, index) => {
+						this.chooseHouseList.push({
+							value: item.id,
+							label: item.name,
+							selectType:'xiaoqu'
+						})
+					})
+				})
+			},
+			getListFn(){
+				let that = this;
+				let params ={
+					areaId: this.houseid,
+					buildingId: this.buildid,
+					unitId: this.unitid,
+					houseId: this.numberid,
+					starTime: this.form.starTime,
+					endTime: this.form.endTime,
+					jobNum: this.form.jobNum,
+					pageSize: 10,
+					pageNum: 1,
+					serviceType: this.id
+				}
+				console.log('params', params)
+				service.getOtherList(params).then(res =>{
+					console.log("999", res)
+					that.list = res.records;
+					that.total = res.total || 0;
+					that.params.pageNum = res.current + 1;
+				})
+			},
+			getNextListFn(){
+				let that = this;
+				let params={
+					areaId: this.houseid,
+					buildingId: this.buildid,
+					unitId: this.unitid,
+					houseId: this.numberid,
+					starTime: this.form.starTime,
+					endTime: this.form.endTime,
+					jobNum: this.form.jobNum,
+					pageSize: this.params.pageSize,
+					pageNum: this.params.pageNum,
+					serviceType: this.id
+				}
+				if (this.list.length < this.total) {
+					service.getOtherList(params).then(response => {
+						that.params.pageNum = response.current + 1
+						response.records.forEach(item =>{
+							that.list.push(item)
+						})
+					})
+				}
+			},
+			// 预览图片
+			preAvatar(url) {
+				console.log('url', url)
+				wx.previewImage({
+					current: url, // 当前显示图片的 http 链接
+					urls: [url] ,// 需要预览的图片 http 链接列表
+				})
+			},
+			submit() {
+				console.log('submit',this.houseid,this.buildid,this.unitid,this.numberid);
+				this.show = false;
+				this.getListFn()
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	/deep/ .u-input__input{
+		font-size: 64rpx!important;
+		color: #303133;
+		width: calc(100% - 200rpx)!important;
+	}
+	/deep/ .u-column-item{
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+		justify-content: center;
+		font-size: 64rpx!important;
+		color: #303133;
+		padding: 8rpx;
+	}
+	/deep/ .u-btn-picker.data-v-70102400 {
+	    padding: 16rpx;
+	    box-sizing: border-box;
+	    text-align: center;
+	    text-decoration: none;
+	    font-size: 64rpx!important;
+	}
+	.list_s{
+		min-height: 100vh;
+		background-color: #F9F9F9;
+	}
+	.header_s{
+		padding: 30rpx 30rpx 0rpx 30rpx;
+		.popup{
+			padding: 0rpx 30rpx;
+		}
+		.btn_s{
+			margin: 0 15rpx;
+			width: calc(50% - 15px);
+			height: 100rpx;
+			line-height: 100rpx;
+			text-align: center;
+			background-color: #3857F3;
+			color: #fff;
+			font-size: 64rpx;
+			border-radius: 16rpx;
+		}
+	}
+	.footer_s{
+		padding: 30rpx;
+		.footer-item{
+			background: #FFFFFF;
+			height: auto;
+			border-radius: 8rpx;
+			margin-bottom: 30rpx;
+			padding: 20rpx 0rpx 20rpx 66rpx;
+			position: relative;
+			.item-title{
+				font-size: 48rpx;
+				font-family: PingFangSC-Medium, PingFang SC;
+				font-weight: 500;
+				color: #333333;
+				padding-bottom: 20rpx;
+			}
+			.main-list-icon{
+				position: absolute;
+				top: 43rpx;
+				left: 30rpx;
+				width: 16rpx;
+				height: 16rpx;
+				background: #3857F3;
+				border-radius: 2rpx;
+			}
+			.item-img{
+				display: flex;
+				justify-content: flex-start;
+				flex-wrap: wrap;
+				.img-view{
+					width: calc(50% - 20rpx);
+					height: 200rpx;
+					padding-bottom: 20rpx;
+					padding-right: 20rpx;
+					image{
+						width: 100%;
+						height: 100%;
+					}
+					video{
+						width: 100%;
+						height: 100%;
+					}
+				}
+			}
+		}
+	}
+	.choose {
+		text-align: center;
+		padding: 20rpx;
+		margin: 30rpx;
+		color: #FFFFFF;
+		background: #43CEB1;
+		border-radius: 64rpx;
+	}
+	.active{
+	   background-color: #1890FF;
+	}
+	.select-type {
+		border: 2rpx solid #3857F3;
+		text-align: center;
+		padding: 20rpx;
+		margin: 30rpx;
+		color: #3857F3;
+		border-radius: 64rpx;
+	}
+	.total {
+		width: 100%;
+		padding: 40rpx 30rpx;
+		text-align: center;
+		color: #FFFFFF;
+	}
+</style>

+ 593 - 0
pages/noLogin/repair.vue

@@ -0,0 +1,593 @@
+<template>
+	<view>
+		<image src="/static/icon/background.png" mode="" class="background"></image>
+		<view style="padding-top: 100rpx;">
+			<view class="align-items">
+				<back></back>
+			</view>
+			<view class="project-content">
+				<view class="font-forty-eight blue">
+					项目名称:{{name}}
+				</view>
+				<view class="font-forty-eight blue">
+					项目地址:{{address}}
+				</view>
+			</view>
+			<view>
+				<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('xiaoqu')">
+					{{house ? house :'选择小区'}}
+					<u-popup v-model="pop" mode="bottom" height="1000rpx">
+						<view style="margin: 20rpx;">
+							<u-search placeholder="请输入搜索内容" v-model="keyword" :action-style="{'font-size':'40rpx'}" @custom="searchinfo(selectType)"></u-search>
+						</view>
+						<view>
+							<scroll-view scroll-y="true" style="height: 600rpx; text-align: center;">
+								<view v-for="(item,index) in chooseHouseList" :key="item.value" >
+									<view :class="current === index ? 'active' : '' " style="color: #000000;" @click="active(item,index)">
+										{{item.label}}
+									</view>
+								</view>
+							</scroll-view>
+							<view class="">
+								<button type="default" class="font-fifty-six" @click="search(selectType)">确定</button>
+							</view>
+							<view class="">
+								<button type="default" @click="pop = false;"  class="font-fifty-six">取消</button>
+							</view>
+						</view>
+					</u-popup>
+				</view>
+			</view>
+			<view>
+				<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('louyu')">
+					{{bulid ? bulid : '选择楼宇'}}
+				</view>
+			
+			</view>
+			<view>
+				<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('danyuan')">
+					{{unit ? unit : '选择单元'}}
+				</view>
+			
+			</view>
+			<view>
+				<view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('menpai')">
+					{{houseNumber ? houseNumber  : '选择门牌'}}
+				</view>
+			</view>
+		<!-- 	<view v-if="photo.length >= 1">
+				<view class="flex" v-for="(item,index) in photo" :key="index">
+					<image :src="item" mode="" class="project-img"></image>
+				</view>
+			</view> -->
+			<view class="upload">
+				<text class="font-forty SourceHanSansCN">备注:</text>
+				<textarea value="" placeholder="请输入备注" v-model="remark"/>
+			</view>
+			<view class="" style="display: flex; flex-wrap: wrap; margin: 0 55rpx;">
+				<image src="/static/icon/chooseimg.png" mode="" style="width: 190rpx; height: 190rpx; margin: 0 12rpx; "
+					@click="choose()"></image>
+				<view v-for="(item,index) in imgArr" :key="index" style="position: relative;">
+					<view v-if="item.substring(item.length - 3) == 'png' || item.substring(item.length - 3) == 'jpg' ">
+						<image :src="item" mode=""
+							style="width: 190rpx; height: 190rpx; margin: 0 20rpx;" @click="showPhoto(index)">
+						</image>
+					</view>
+					<view v-else>
+						<video :src="item"
+							style="width: 190rpx; height: 190rpx; margin: 0 20rpx;"></video>
+					</view>
+					<view @click="remove(index)" style="position: absolute; top: 0; right: 14rpx; border-radius: 50%; background-color: #FF0000;">
+						<u-icon name="close" color="#FFFFFF" size="35" ></u-icon> 
+					</view>
+				</view>
+			</view>
+			<view class="project background-color1 font-sixty-four white" @click="updatePhoto()">
+				确定上传
+			</view>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	import service from '@/api/index.js'
+	export default {
+		data() {
+			return {
+				action: this.$HTTP.webUrl + `/obs`,
+				headers: {
+					MAuthorization: "wxBearer " + uni.getStorageSync('token')
+				},
+				url: [],
+				id: 0,
+				name: '',
+				address: '',
+				photo: [],
+
+				uploading: false,
+				imgArr: [],
+				progress: 0 ,//图片或视频上传百分比
+				
+				pop:false,
+				housename:'',
+				houseid:0,
+				buildid:0,
+				unitid:0,
+				numberid:0,
+				houseShow: false,
+				current:-1,
+				chooseHouseList: [],
+				house: '选择小区',
+				bulid: '选择楼宇',
+				unit: '选择单元',
+				houseNumber: '选择门牌',
+				serviceType:'',
+				housedata:0,
+				remark:'',
+				keyword:'',
+				loading:false
+			}
+		},
+		onLoad(e) {
+			console.log(e)
+			this.id = e.id;
+			this.name = e.name;
+			this.address = e.address
+			// this.getEngineDetail();
+		},
+		methods: {
+			showPhoto(index){
+				uni.previewImage({
+					current:index,
+					urls:this.imgArr,
+				})
+			},
+			updatePhoto() {
+				if (this.housedata == 0 || this.housedata == null) {
+					this.$UTILS.showPrompt('请选择门牌号!')
+					return
+				}
+				if(this.imgArr.length <= 0) {
+					this.$UTILS.showPrompt('请上传照片!')
+					return
+				}
+				if(this.loading == false) {
+					this.$UTILS.showPrompt('照片或视频未上传完毕,无法提交!')
+					return
+				}
+				let param = {
+					// photo: this.imgArr,
+					picUrl: this.imgArr,
+					serviceType: this.id,
+					houseId: this.housedata,
+					remark:this.remark
+				}
+				console.log('param', param)
+				// this.$UTILS.showPrompt('提交成功!')
+				service.submitOrder(param).then(res => {
+					this.$UTILS.showPrompt('提交成功!')
+					this.houseNumber = null;
+					this.imgArr = null;
+				}).catch(e => {
+					this.$UTILS.showPrompt('提交失败!')
+					console.error(e)
+				})
+				
+			},
+			//获取小区
+			getArea() {
+				service.getArea().then(res => {
+					this.chooseHouseList = [];
+					res.forEach((item, index) => {
+						this.chooseHouseList.push({
+							value: item.id,
+							label: item.name,
+							selectType:'xiaoqu'
+						})
+					})
+				})
+			},
+			searchinfo(selectType){
+				if(selectType == 'xiaoqu'){
+					console.log('ssss',this.selectType)
+					service.getArea({name:this.keyword}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach((item, index) => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'xiaoqu'
+							})
+						})
+					})	
+					this.keyword = '';
+				}else if(selectType == 'louyu'){
+					console.log('ssss',this.selectType)
+					service.getBuilding({areaId: this.houseid,name:this.keyword}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach((item, index) => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'louyu'
+							})
+						})
+					})
+					this.keyword = '';
+				}else if(selectType == 'danyuan'){
+					console.log('ssss',this.selectType)
+					service.getUnit({buildingId: this.buildid,name:this.keyword}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach((item, index) => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'danyuan'
+							})
+						})
+					})
+					this.keyword = '';
+				}else if(selectType == 'menpai'){
+					console.log('ssss',this.selectType)
+					service.getAllHouse({unitId: this.unitid,name:this.keyword}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach((item, index) => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'menpai'
+							})
+						})
+					})
+					this.keyword = '';
+				}
+				
+			},
+			openHouse(selectType) {
+				if(selectType === 'xiaoqu'){
+					//选择小区
+					this.selectType = 'xiaoqu'
+					this.getArea();
+				}else if(selectType === 'louyu'){
+					//选择楼宇
+					this.selectType = 'louyu'
+					this.housename = null;
+					this.buildid = 0;
+					service.getBuilding({areaId: this.houseid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'louyu'
+							})
+						})
+					})
+				}else if(selectType === 'danyuan'){
+					//选择单元
+					this.selectType = 'danyuan'
+					this.housename = null;
+					this.unitid = 0;
+					service.getUnit({buildingId: this.buildid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'danyuan'
+							})
+						})
+					})
+				}else if(selectType === 'menpai'){
+					//选择门牌
+					console.log('menpai',this.numberid)
+					this.selectType = 'menpai'
+					this.housename = null;
+					this.numberid = null;
+					service.getAllHouse({unitId: this.unitid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'menpai'
+							})
+						})
+					})
+				}
+				this.pop = !this.pop;
+			},
+			active(item,index){
+				this.current = index;
+				this.housename = item.label;
+				if(item.selectType == 'xiaoqu'){
+					this.houseid = item.value;
+				}else if(item.selectType == 'louyu'){
+					this.buildid = item.value;
+				}else if(item.selectType == 'danyuan'){
+					this.unitid = item.value;
+				}else if(item.selectType == 'menpai'){
+					this.numberid = item.value
+				}
+				this.selectType = item.selectType;
+			},
+			search(selectType){
+				if(selectType == 'xiaoqu'){
+					this.house = this.housename;	
+					service.getBuilding({areaId: this.houseid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'louyu'
+							})
+						})
+					})
+					this.current = -1;
+					this.bulid = null;
+					this.unit = null;
+					this.houseNumber = null;
+				}else if(selectType == 'louyu'){
+					this.bulid = this.housename;
+					service.getUnit({buildingId: this.buildid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'danyuan'
+							})
+						})
+					})
+					this.unit = null;
+					this.houseNumber = null;
+					this.current = -1;
+				}else if(selectType == 'danyuan'){
+					this.unit = this.housename;
+					service.getAllHouse({unitId: this.unitid}).then(res => {
+						this.chooseHouseList = [];
+						res.forEach(item => {
+							this.chooseHouseList.push({
+								value: item.id,
+								label: item.name,
+								selectType:'menpai'
+							})
+						})
+					})
+					this.houseNumber = null;
+					this.current = -1;
+					
+				}else if(selectType == 'menpai'){
+					this.houseNumber = this.housename;
+					this.housedata = this.numberid;
+					console.log('this.housedata',this.housedata)
+					this.current = -1;
+				}
+				this.pop = false;
+			},
+			// getEngineDetail() {
+			// 	service.getEngineDetail({
+			// 		id: this.id
+			// 	}).then(res => {
+			// 		this.photo = res.photo
+			// 	})
+			// },
+			choose() {
+				let _this = this;
+				uni.showActionSheet({
+					title: '上传',
+					itemList: ['图片', '视频'],
+					success: (res) => {
+						// console.log(res)
+						if (res.tapIndex == 0) {
+							this.chooseimage()
+						} else {
+							this.choosevideo()
+						}
+					}
+				})
+			},
+			chooseimage() {
+				console.log('图片')
+				let _this = this;
+				uni.chooseImage({
+					sizeType: ['album', 'camera'],
+					success(resp) {
+						console.log('res--uni.chooseMedia', resp);
+						resp.tempFiles.forEach((item, index) => {
+							const task = uni.uploadFile({
+								url: _this.$HTTP.webUrl + `/obs`,
+								filePath: item.path,
+								name: 'file',
+								formData: {},
+								header: _this.headers,
+								success: res => {
+									// 判断是否json字符串,将其转为json格式
+									let data = _this.$u.test.jsonString(res
+										.data) ? JSON.parse(res.data) : res.data;
+									if (![200, 201, 204].includes(res.statusCode)) {
+										// this.uploadError(index, data);
+										_this.$UTILS.showPrompt('上传失败!')
+									} else {
+										// 上传成功
+										// this.lists[index].response = data;
+										// this.lists[index].progress = 100;
+										// this.lists[index].error = false;
+										// this.$emit('on-success', data, index, this.lists, this
+										// 	.index);
+										if (_this.progress === 100) {
+											// console.log('_this.progress', _this.progress)
+											// console.log('data----', data)
+											// console.log('res--', res)
+											_this.imgArr.push(data.data.url)
+											// console.log('imgArr', _this.imgArr)
+											_this.$UTILS.showPrompt('上传成功!')
+										}
+									}
+								},
+								fail: e => {
+									_this.$UTILS.showPrompt('上传失败!')
+									this.uploadError(index, e);
+								},
+								complete: res => {
+									_this.uploading = false;
+									// _this.uploadFile(index + 1);
+									// this.$emit('on-change', res, index, this.lists, this
+									// .index);
+								}
+							});
+							task.onProgressUpdate(res => {
+								// if (res.progress > 0) {
+								// 	this.lists[index].progress = res.progress;
+								// 	this.$emit('on-progress', res, index, this.lists, this.index);
+								// }
+								_this.progress = res.progress;
+								console.log('onProgressUpdate', res)
+								uni.showLoading({
+									title: '上传中'
+								})
+								if(_this.progress != 100){
+									_this.loading = false
+									console.log('_this.loading false', _this.loading)
+								}else {
+									_this.loading = true
+									console.log('_this.loading true', _this.loading)
+								}
+							});
+						})
+					},
+				})
+			},
+			choosevideo() {
+				let _this = this;
+				console.log('视频')
+				uni.chooseVideo({
+					sourceType: ['album','camera'],
+					maxDuration: 30,
+					success(resp) {
+						const task = uni.uploadFile({
+							url: _this.$HTTP.webUrl + `/obs`,
+							filePath: resp.tempFilePath,
+							name: 'file',
+							formData: {},
+							header: _this.headers,
+							success: res => {
+								// 判断是否json字符串,将其转为json格式
+								let data = _this.$u.test.jsonString(res
+									.data) ? JSON.parse(res.data) : res.data;
+								if (![200, 201, 204].includes(res.statusCode)) {
+									this.uploadError(index, data);
+								} else {
+									// 上传成功
+									// this.lists[index].response = data;
+									// this.lists[index].progress = 100;
+									// this.lists[index].error = false;
+									// this.$emit('on-success', data, index, this.lists, this
+									// 	.index);	
+									if (_this.progress === 100) {
+										console.log('_this.progress', _this.progress)
+										console.log('data----', data)
+										console.log('res--', res)
+										_this.imgArr.push(data.data.url)
+										console.log('imgArr', _this.imgArr)
+										_this.$UTILS.showPrompt('上传成功!')
+									} 
+								}
+							},
+							fail: e => {
+								_this.$UTILS.showPrompt('上传失败!')
+								this.uploadError(index, e);
+							},
+							complete: res => {
+								uni.hideLoading();
+								_this.uploading = false;
+								// _this.uploadFile(index + 1);
+								// this.$emit('on-change', res, index, this.lists, this
+								// .index);
+							}
+						});
+						task.onProgressUpdate(res => {
+							// if (res.progress > 0) {
+							// 	this.lists[index].progress = res.progress;
+							// 	this.$emit('on-progress', res, index, this.lists, this.index);
+							// }
+							_this.progress = res.progress;
+							console.log('onProgressUpdate', res)
+							uni.showLoading({
+								title: '上传中'
+							})
+							if(_this.progress != 100){
+								_this.loading = false
+								console.log('_this.loading false', _this.loading)
+							}else {
+								_this.loading = true
+								console.log('_this.loading true', _this.loading)
+							}
+						});
+
+					},
+				})
+			},
+			remove(index) {
+				uni.showModal({
+					title: '提示',
+					content: '是否删除该图片或视频?',
+					success: (res) => {
+						if (res.confirm) {
+							this.imgArr.splice(index, 1)
+							console.log('this.imgarr',this.imgArr)
+						}
+					}
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.background {
+		z-index: -1;
+		position: fixed;
+		width: 100%;
+		height: 100%;
+		background-size: 100% 100%;
+	}
+	.choose {
+		text-align: center;
+		padding: 20rpx;
+		margin: 30rpx;
+		color: #FFFFFF;
+		background: #43CEB1;
+		border-radius: 64rpx;
+	}
+	.upload {
+		margin: 30rpx;
+		padding: 30rpx 20rpx;
+		border: 2rpx solid #3857F3;
+		border-radius: 48rpx;
+	}
+	.active{
+	   background-color: #1890FF;
+	}
+	.project-content {
+		border: 4rpx solid #3857F3;
+		margin: 80rpx 55rpx 30rpx;
+		padding: 30rpx 20rpx;
+		border-radius: 48rpx;
+	}
+
+	.project {
+		border-radius: 72rpx;
+		padding: 25rpx 0;
+		text-align: center;
+		margin: 60rpx 55rpx 0;
+	}
+
+	.project-img {
+		width: 300rpx;
+		height: 168rpx;
+		margin: 20rpx auto;
+	}
+</style>

+ 89 - 0
pages/noLogin/typeList.vue

@@ -0,0 +1,89 @@
+<template>
+	<view>
+		<image src="/static/icon/background.png" mode="" class="background"></image>
+		<view style="padding-top: 300rpx;" >
+			<view v-for="(item,index) in list" :key="index">
+				<button class="background-color1 white font-forty-eight btn"
+					@click="topage(`/pages/noLogin/cityProject?value=${item.value}`)">{{item.name}}</button>
+			</view>
+		</view>
+		
+		<view class="name">
+			姓名:{{name}}
+		</view>
+		<view class="align-items position" @click="topage('/pages/login/login')">
+			<view class="font-forty-eight black">
+				跳转登录页
+			</view>
+			<view class="background-color1 arrow">
+				<u-icon name="arrow-rightward" size="100rpx" color="#ffffff"></u-icon>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import service from '@/api/index.js'
+	export default {
+		data() {
+			return {
+				list:[],
+				name:'',
+			}
+		},
+		onLoad() {
+			this.getProjectType();
+			this.getUserName();
+		},
+		methods: {
+			topage(url) {
+				uni.navigateTo({
+					url
+				})
+			},
+			getProjectType() {
+				service.getProjectType({dicType: 'engine_type'}).then(res => {
+					this.list = res;
+				})
+			},
+			getUserName(){
+				service.getUserName().then(res=>{
+					this.name = res.name
+				})
+			},
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	.background {
+		z-index: -1;
+		position: fixed;
+		width: 100%;
+		height: 100%;
+		background-size: 100% 100%;
+	}
+	.name{
+		font-size: 40rpx;
+		margin-left: 36rpx;
+	}
+	.position {
+		position: absolute;
+		bottom: 100rpx;
+		right: 50rpx;
+
+		.arrow {
+			width: 152rpx;
+			height: 152rpx;
+			border-radius: 50%;
+			padding: 25rpx;
+			margin-left: 20rpx;
+		}
+	}
+
+	.btn {
+		margin: 90rpx 30rpx;
+		background: #3857F3;
+		border-radius: 72rpx;
+	}
+</style>

+ 311 - 0
pages/noLogin/uploadProject.vue

@@ -0,0 +1,311 @@
+<template>
+	<view>
+		<image src="/static/icon/background.png" mode="" class="background"></image>
+		<view style="padding-top: 100rpx;">
+			<view class="align-items">
+				<back></back>
+			</view>
+			<view class="project-content">
+				<view class="font-forty-eight blue">
+					项目名称:{{name}}
+				</view>
+				<view class="font-forty-eight blue">
+					项目地址:{{address}}
+				</view>
+			</view>
+			<view v-if="photo != null && photo.length >= 1">
+				<view class="flex" v-for="(item,index) in photo" :key="index">
+					<image :src="item" mode="" class="project-img" @click="showPhotos(index)" v-if="item.substring(item.length - 3) == 'jpg'"></image>
+					<image :src="item" mode="" class="project-img" @click="showPhotos(index)" v-else-if="item.substring(item.length - 3) == 'JPG'"></image>
+					<image :src="item" mode="" class="project-img" @click="showPhotos(index)" v-else-if="item.substring(item.length - 3) == 'png'"></image>
+					<image :src="item" mode="" class="project-img" @click="showPhotos(index)" v-else-if="item.substring(item.length - 3) == 'PNG'"></image>
+					<image :src="item" mode="" class="project-img" @click="showPhotos(index)" v-else-if="item.substring(item.length - 4) == 'jpeg'"></image>
+					<image :src="item" mode="" class="project-img" @click="showPhotos(index)" v-else-if="item.substring(item.length - 4) == 'JPEG'"></image>
+					<video :src="item" controls v-else class="project-img"></video>
+				</view>
+			</view>
+			<view class="" style="display: flex; flex-wrap: wrap; margin: 0 55rpx;">
+				<image src="/static/icon/chooseimg.png" mode="" style="width: 190rpx; height: 190rpx; margin: 0 12rpx; "
+					@click="choose()"></image>
+				<view v-for="(item,index) in imgymxs" :key="index" style="position: relative;">
+					<view v-if="item.type == 'image'">
+						<image :src="item.url" mode=""
+							style="width: 190rpx; height: 190rpx; margin: 0 20rpx;" @click="showPhoto(index)">
+						</image>
+					</view>
+					<view v-else>
+						<video :src="item"
+							style="width: 190rpx; height: 190rpx; margin: 0 20rpx;"></video>
+					</view>
+					<view @click="remove(index)" style="position: absolute; top: 0; right: 14rpx; border-radius: 50%; background-color: #FF0000;">
+						<u-icon name="close" color="#FFFFFF" size="35" ></u-icon> 
+					</view>
+				</view>
+			</view>
+			<view class="project background-color1 font-sixty-four white" @click="updatePhoto()">
+				保存数据
+			</view>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	import service from '@/api/index.js'
+	export default {
+		data() {
+			return {
+				action: this.$HTTP.webUrl + `/obs`,
+				headers: {
+					MAuthorization: "wxBearer " + uni.getStorageSync('token')
+				},
+				url: [],
+				id: 0,
+				name: '',
+				address: '',
+				photo: [],
+
+				uploading: false,
+				imgArr: [],
+				imgymxs: [],
+				progress: 0 ,//图片或视频上传百分比
+			}
+		},
+		onLoad(e) {
+			console.log(e)
+			this.id = e.id;
+			this.name = e.name;
+			this.address = e.address
+			this.getEngineDetail();
+		},
+		methods: {
+			updatePhoto() {
+				if (this.imgArr.length > 0) {
+					
+					service.updateEnginePhoto({
+						photo: this.imgArr,
+						id: this.id
+					}).then(res => {
+						this.$UTILS.showPrompt('提交成功!')
+						setTimeout(function() {
+							uni.navigateTo({
+								url: '/pages/noLogin/typeList'
+							})
+						}, 1000)
+					}).catch(e => {
+						this.$UTILS.showPrompt('提交失败!')
+					})
+				} else {
+					this.$UTILS.showPrompt('请先选择照片!')
+				}
+			},
+			showPhoto(index){
+				uni.previewImage({
+					current:index,
+					urls:this.imgArr,
+				})
+			},
+			showPhotos(index){
+				uni.previewImage({
+					current:index,
+					urls:this.photo,
+				})
+			},
+			getEngineDetail() {
+				service.getEngineDetail({
+					id: this.id
+				}).then(res => {
+					this.photo = res.photo
+				})
+			},
+			choose() {
+				let _this = this;
+				uni.showActionSheet({
+					title: '上传',
+					itemList: ['图片', '视频'],
+					success: (res) => {
+						// console.log(res)
+						if (res.tapIndex == 0) {
+							this.chooseimage()
+						} else {
+							this.choosevideo()
+						}
+					}
+				})
+			},
+			chooseimage() {
+				console.log('图片')
+				let _this = this;
+				uni.chooseImage({
+					sizeType: ['album', 'camera'],
+					success(resp) {
+						console.log('res--uni.chooseMedia', resp);
+						resp.tempFiles.forEach((item, index) => {
+							const task = uni.uploadFile({
+								url: _this.$HTTP.webUrl + `/obs`,
+								filePath: item.path,
+								name: 'file',
+								formData: {},
+								header: _this.headers,
+								success: res => {
+									// 判断是否json字符串,将其转为json格式
+									let data = _this.$u.test.jsonString(res
+										.data) ? JSON.parse(res.data) : res.data;
+									if (![200, 201, 204].includes(res.statusCode)) {
+										// this.uploadError(index, data);
+										_this.$UTILS.showPrompt('选取失败!')
+									} else {
+										// 上传成功
+										// this.lists[index].response = data;
+										// this.lists[index].progress = 100;
+										// this.lists[index].error = false;
+										// this.$emit('on-success', data, index, this.lists, this
+										// 	.index);
+										if (_this.progress === 100) {
+											// console.log('_this.progress', _this.progress)
+											// console.log('data----', data)
+											// console.log('res--', res)
+											_this.imgymxs.push({url:data.data.url,type:'image'})
+											_this.imgArr.push(data.data.url)
+											// console.log('imgArr', _this.imgArr)
+											_this.$UTILS.showPrompt('选取成功!')
+										}
+									}
+								},
+								fail: e => {
+									_this.$UTILS.showPrompt('选取失败!')
+									this.uploadError(index, e);
+								},
+								complete: res => {
+									_this.uploading = false;
+									// _this.uploadFile(index + 1);
+									// this.$emit('on-change', res, index, this.lists, this
+									// .index);
+								}
+							});
+							task.onProgressUpdate(res => {
+								// if (res.progress > 0) {
+								// 	this.lists[index].progress = res.progress;
+								// 	this.$emit('on-progress', res, index, this.lists, this.index);
+								// }
+								_this.progress = res.progress;
+								console.log('onProgressUpdate', res)
+								uni.showLoading({
+									title: '选取中'
+								})
+							});
+						})
+					},
+				})
+			},
+			choosevideo() {
+				let _this = this;
+				console.log('视频')
+				uni.chooseVideo({
+					sourceType: ['album','camera'],
+					maxDuration: 30,
+					success(resp) {
+						const task = uni.uploadFile({
+							url: _this.$HTTP.webUrl + `/obs`,
+							filePath: resp.tempFilePath,
+							name: 'file',
+							formData: {},
+							header: _this.headers,
+							success: res => {
+								// 判断是否json字符串,将其转为json格式
+								let data = _this.$u.test.jsonString(res
+									.data) ? JSON.parse(res.data) : res.data;
+								if (![200, 201, 204].includes(res.statusCode)) {
+									this.uploadError(index, data);
+								} else {
+									// 上传成功
+									// this.lists[index].response = data;
+									// this.lists[index].progress = 100;
+									// this.lists[index].error = false;
+									// this.$emit('on-success', data, index, this.lists, this
+									// 	.index);	
+									if (_this.progress === 100) {
+										console.log('_this.progress', _this.progress)
+										console.log('data----', data)
+										console.log('res--', res)
+										// _this.imgArr.push(data.data.url)
+										_this.imgymxs.push({url:data.data.url,type:'video'})
+										_this.imgArr.push(data.data.url)
+										console.log('imgArr', _this.imgArr)
+										_this.$UTILS.showPrompt('选取成功!')
+									} 
+								}
+							},
+							fail: e => {
+								_this.$UTILS.showPrompt('选取失败!')
+								this.uploadError(index, e);
+							},
+							complete: res => {
+								uni.hideLoading();
+								_this.uploading = false;
+								// _this.uploadFile(index + 1);
+								// this.$emit('on-change', res, index, this.lists, this
+								// .index);
+							}
+						});
+						task.onProgressUpdate(res => {
+							// if (res.progress > 0) {
+							// 	this.lists[index].progress = res.progress;
+							// 	this.$emit('on-progress', res, index, this.lists, this.index);
+							// }
+							_this.progress = res.progress;
+							console.log('onProgressUpdate', res)
+							uni.showLoading({
+								title: '选取中'
+							})
+						});
+
+					},
+				})
+			},
+			remove(index) {
+				uni.showModal({
+					title: '提示',
+					content: '是否删除该图片或视频?',
+					success: (res) => {
+						if (res.confirm) {
+							this.imgArr.splice(index, 1);
+							this.imgymxs.splice(index, 1);
+							console.log('this.imgarr',this.imgArr)
+						}
+					}
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.background {
+		z-index: -1;
+		position: fixed;
+		width: 100%;
+		height: 100%;
+		background-size: 100% 100%;
+	}
+
+	.project-content {
+		border: 4rpx solid #3857F3;
+		margin: 80rpx 55rpx 30rpx;
+		padding: 30rpx 20rpx;
+		border-radius: 48rpx;
+	}
+
+	.project {
+		border-radius: 72rpx;
+		padding: 25rpx 0;
+		text-align: center;
+		margin: 60rpx 55rpx 0;
+	}
+
+	.project-img {
+		width: 300rpx;
+		height: 168rpx;
+		margin: 20rpx auto;
+	}
+</style>

+ 50 - 0
pages/notice/noticeDetail.vue

@@ -0,0 +1,50 @@
+<template>
+	<view>
+		<view class="align-items" style="margin-top: 80rpx;">
+			<back></back>
+			<view class="title-text" style="margin-left: 20rpx;">
+				公告详情
+			</view>
+		</view>
+		<view class="notice">
+			<view class="justify-content">
+				<view class="font-forty">
+					{{title}}
+				</view>
+				<view class="font-twenty-eight gray">
+					{{time}}
+				</view>
+			</view>
+			<view class="font-thirty-two black" style="margin: 30rpx 0;">
+				<rich-text :nodes="text"></rich-text>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				text:'',
+				title:'',
+				time:''
+			}
+		},
+		onLoad(e) {
+			this.text = e.text;
+			this.title = e.title;
+			this.time = e.time;
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+.notice {
+		margin: 20rpx;
+		padding: 20rpx;
+	}
+</style>

+ 68 - 0
pages/notice/noticeList.vue

@@ -0,0 +1,68 @@
+<template>
+	<view>
+		<view class="align-items" style="margin-top: 80rpx;">
+			<back></back>
+			<view class="title-text" style="margin-left: 20rpx;">
+				公告列表
+			</view>
+		</view>
+		<view class="notice" v-for="(item,index) in list" :key="index" >
+			<view @click="toDetail(`/pages/notice/noticeDetail?title=${item.title}&time=${item.time}&text=${item.text}`)">
+				<view class="justify-content">
+					<view class="font-forty">
+						{{item.title}}
+					</view>
+					<view class="font-twenty-eight gray">
+						{{item.time}}
+					</view>
+				</view>
+				<view class="font-thirty-two black" style="margin: 30rpx 0;">
+					 <rich-text :nodes="item.text"></rich-text> 
+				</view>
+			</view>
+			
+		</view>
+	</view>
+</template>
+
+<script>
+	import service from '@/api/index.js'
+	export default {
+		data() {
+			return {
+				list: []
+			}
+		},
+		onLoad() {
+			this.lists()
+		},
+		methods: {
+			toDetail(url){
+				uni.navigateTo({
+					url 
+				})
+			},
+			lists(){
+				service.getNoticeList().then(res=>{
+					// console.log('getNoticeList',res)
+					this.list = res
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.notice {
+		margin: 20rpx;
+		padding: 20rpx;
+		background: #FFFFFF;
+		box-shadow: 0rpx 8rpx 17rpx 0rpx rgba(0, 0, 0, 0.04);
+		border-radius: 10rpx;
+	}
+
+	.text {
+		border-left: 15rpx solid #3857F3;
+		padding-left: 20rpx;
+	}
+</style>

+ 38 - 0
pages/service/service.vue

@@ -0,0 +1,38 @@
+<template>
+	<view>
+		<view class="align-items" style="margin-top: 80rpx;">
+			<back></back>
+			<view class="title-text" style="margin-left: 20rpx;">
+				{{title}}
+			</view>
+		</view>
+		<rich-text :nodes="string"></rich-text>
+	</view>
+</template>
+
+<script>
+	import service from '@/api/index.js'
+	export default {
+		data() {
+			return {
+				title:'',
+				string: ``,
+			}
+		},
+		onLoad() {
+		  this.serve()
+		},
+		methods: {
+			serve(){
+				service.getExplain().then(res=>{
+					this.string = res.text;
+					this.title = res.title;
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

BIN
static/icon/aboutme.png


BIN
static/icon/background.png


BIN
static/icon/backgroundimg.png


BIN
static/icon/chart.png


BIN
static/icon/chooseimg.png


BIN
static/icon/city.png


BIN
static/icon/construction.png


BIN
static/icon/constructions.png


BIN
static/icon/logo.png


BIN
static/icon/number.png


BIN
static/icon/password.png


BIN
static/icon/project.png


BIN
static/icon/service.png


BIN
static/logo.png