From 9d6053d8c5f175a90ee569f1c8fdbd89be5729c3 Mon Sep 17 00:00:00 2001
From: Lou <luzhiping@qqyjz.com>
Date: Sun, 04 Feb 2024 13:22:35 +0800
Subject: [PATCH] 更新

---
 subPackage/label/formList.vue                    |   11 
 subPackage/label/index1.vue                      |   18 
 subPackage/label/checkList.vue                   |  101 ++++
 api/reporting/reporting.js                       |   20 
 subPackage/workbench/views/checkReform.vue       |   38 -
 pages.json                                       |   29 +
 subPackage/workbench/views/labelReportDetail.vue |   19 
 subPackage/workbench/views/cscj.vue              |   12 
 subPackage/label/index.vue                       |   20 
 subPackage/label/check.vue                       |  536 ++++++++++++++++++++++++
 subPackage/workbench/views/selfCheckDetail.vue   |  413 ++++++++++++++++++
 subPackage/label/form.vue                        |   52 ++
 12 files changed, 1,207 insertions(+), 62 deletions(-)

diff --git a/api/reporting/reporting.js b/api/reporting/reporting.js
index d23290c..d04f43d 100644
--- a/api/reporting/reporting.js
+++ b/api/reporting/reporting.js
@@ -187,4 +187,24 @@
 		method: 'POST',
 		data: data
 	})
+}
+
+//消防自查
+export const savePlaceCheck = (data) => {
+	return http.request({
+		url: '/blade-taskPlaceSelfCheck/taskPlaceSelfCheck/saveTwo',
+		method: 'POST',
+		data: data
+	})
+}
+
+//消防自查详情
+export const getPlaceCheckDetail = (params) => {
+	return http.request({
+		url: '/blade-taskPlaceSelfCheck/taskPlaceSelfCheck/getInfo',
+		method: 'get',
+		params: {
+			...params
+		}
+	})
 }
\ No newline at end of file
diff --git a/pages.json b/pages.json
index 42bb372..ef53090 100644
--- a/pages.json
+++ b/pages.json
@@ -293,7 +293,7 @@
 				{
 					"path": "form",
 					"style": {
-						"navigationBarTitleText": "打金店报事",
+						"navigationBarTitleText": "二手交易",
 						"enablePullDownRefresh": false,
 						"navigationBarBackgroundColor": "#fff",
 						"navigationBarTextStyle": "black"
@@ -339,6 +339,24 @@
 					"path": "schoolList",
 					"style": {
 						"navigationBarTitleText": "报事列表",
+						"enablePullDownRefresh": false,
+						"navigationBarBackgroundColor": "#fff",
+						"navigationBarTextStyle": "black"
+					}
+				},
+				{
+					"path": "check",
+					"style": {
+						"navigationBarTitleText": "消防自查",
+						"enablePullDownRefresh": false,
+						"navigationBarBackgroundColor": "#fff",
+						"navigationBarTextStyle": "black"
+					}
+				},
+				{
+					"path": "checkList",
+					"style": {
+						"navigationBarTitleText": "消防自查",
 						"enablePullDownRefresh": false,
 						"navigationBarBackgroundColor": "#fff",
 						"navigationBarTextStyle": "black"
@@ -599,6 +617,15 @@
 						"navigationBarBackgroundColor": "#fff",
 						"navigationBarTextStyle": "black"
 					}
+				},
+				{
+					"path": "views/selfCheckDetail",
+					"style": {
+						"navigationBarTitleText": "消防自查",
+						"enablePullDownRefresh": false,
+						"navigationBarBackgroundColor": "#fff",
+						"navigationBarTextStyle": "black"
+					}
 				}
 			]
 		},
diff --git a/subPackage/label/check.vue b/subPackage/label/check.vue
new file mode 100644
index 0000000..28090ef
--- /dev/null
+++ b/subPackage/label/check.vue
@@ -0,0 +1,536 @@
+<template>
+	<view class="wrap">
+		<view class="section mb-20">
+			<u-collapse :value="itemIndex" ref="collapse">
+				<u-collapse-item :title="item.title" :name="index" v-for="(item,index)  in questionList">
+					<u-form :model="info" ref="form">
+						<block v-for="(i,k) in item.children">
+							<view class="f-30 c-33">
+								{{i.title}}
+							</view>
+							<u-form-item labelWidth="90" label="隐患" prop="gateStatus">
+								<view class="btn-group flex">
+									<view class="value-item" :class="i.state == 0?'active bgc-main c-ff':''"
+										@click="changeStatus(0,i,index,k)">
+										存在
+									</view>
+									<view class="value-item" :class="i.state == 1?'active bgc-main c-ff':''"
+										@click="changeStatus(1,i,index,k)">
+										不存在
+									</view>
+								</view>
+							</u-form-item>
+							<view class="" v-if="i.state == 0">
+								<u-form-item labelWidth="100" label="隐患照片" prop="gateStatus">
+									<u-upload :fileList="i.urls" :previewFullImage="uploadConfig.previewFullImage"
+										:accept="uploadConfig.acceptImg" :multiple="uploadConfig.multiple"
+										:maxCount="uploadConfig.maxCount" :capture="uploadConfig.capture"
+										@afterRead="afterReadImgs($event,i,index,k)"
+										@delete="deleteImages($event,index,k)">
+										<view class="upload-item upload-icon flex_base">
+											<u-icon name="/static/icon/upload.png" width="60rpx"
+												height="60rpx"></u-icon>
+										</view>
+									</u-upload>
+								</u-form-item>
+								<u-form-item labelWidth="100" label="隐患描述" prop="gateStatus">
+									<u-textarea v-model="i.remark" placeholder="请输入隐患描述"
+										placeholderClass="c-99 f-26"></u-textarea>
+								</u-form-item>
+							</view>
+						</block>
+					</u-form>
+				</u-collapse-item>
+			</u-collapse>
+		</view>
+
+		<view class="content bgc-ff">
+			<view class="upload ">
+				<view class="f-28 mb-20">其它隐患问题</view>
+				<u-textarea v-model="info.remark" placeholder="请输入内容" placeholderClass="c-99 f-26"></u-textarea>
+				<view class="mt-20">
+					<view class="f-28 mb-20">图片</view>
+					<u-upload :fileList="form.images" :previewFullImage="uploadConfig.previewFullImage"
+						:accept="uploadConfig.acceptImg" :multiple="uploadConfig.multiple"
+						:maxCount="uploadConfig.maxCount" :capture="uploadConfig.capture" @afterRead="afterReadImg"
+						@delete="deletePic">
+						<view class="upload-item upload-icon flex_base">
+							<u-icon name="/static/icon/upload.png" width="60rpx" height="60rpx"></u-icon>
+						</view>
+					</u-upload>
+				</view>
+			</view>
+
+			<view>
+				<view class="f-28 mb-20">签名</view>
+				<!-- <u-icon name="arrow-right"></u-icon> -->
+				<view class="upload-item upload-icon flex_base" @click="showSignature = true" v-if="!signatureUrl">
+					<u-icon name="/static/icon/upload.png" width="60rpx" height="60rpx"></u-icon>
+				</view>
+				<view v-if="signatureUrl">
+					<u-image :src="signatureUrl" width="100" height="100" @click="previewImg()"></u-image>
+				</view>
+			</view>
+		</view>
+
+		<!-- <footer-btn @click="sumitInfo"></footer-btn> -->
+
+
+		<button class="submit-btn" @click="sumitInfo">提交</button>
+		<button class="list-btn mb-20" @click="navTo">我上报的事件</button>
+
+
+		<u-popup mode="bottom" :show="showSignature" round="10" :closeable="true" @close="showSignature=false">
+			<view class="signture-popup">
+				<jushi-signature :settings="signatureSettings" @change="signatureChange"></jushi-signature>
+			</view>
+		</u-popup>
+
+		<view class="blank"></view>
+	</view>
+</template>
+
+<script>
+	import uploadMixin from "@/mixin/uploadMixin";
+	import {
+		getPlaceCheckItem
+	} from "@/api/place/place.js"
+
+	import {
+		savePlaceCheck
+	} from "@/api/reporting/reporting.js"
+
+	export default {
+		mixins: [uploadMixin],
+		data() {
+			return {
+				form: {
+					images: []
+				},
+				info: {
+					remark: "",
+					imageUrls: "",
+					signaturePath: ""
+				},
+
+				desc: "",
+				title: "",
+				curSelectSite: {},
+				showSignature: false,
+				signatureUrl: "",
+				signatureSettings: { //签名设置
+					width: '700', //签名区域的宽
+					height: '800', //签名区域的高
+					lineWidth: 3, //签名时线宽
+					textColor: '#007AFF' //签名文字颜色
+				},
+				statusOption: [{
+						text: "存在",
+						value: 0
+					},
+					{
+						text: "不存在",
+						value: 1
+					},
+				],
+				questionList: [],
+				itemIndex: [],
+				patrolRecordVOList: [],
+				count: 0,
+				statusList: [{
+						name: "是",
+						id: 2
+					},
+					{
+						name: "否",
+						id: 1
+					}
+				],
+				time: Number(new Date()),
+				showSelectDate: false,
+				dangerCount: 0 //隐患项数量
+
+			}
+		},
+		onLoad(option) {
+			this.info.houseCode = uni.getStorageSync("siteInfo").houseCode;
+			this.info.placeName = uni.getStorageSync("siteInfo").name;
+			this.getItem();
+		},
+
+		methods: {
+			getItem() {
+				getPlaceCheckItem().then(res => {
+					let data = res.data;
+					this.questionList = res.data;
+					let arr = []
+					let obj = {
+						itemId: "",
+						state: "",
+						imagesUrl: "",
+						remark: ""
+					}
+					let count = 0;
+					for (let i = 0, ii = data.length; i < ii; i++) {
+						arr.push(i);
+						for (let k = 0, kk = data[i].children.length; k < kk; k++) {
+							// this.info.patrolRecordVOList.push(obj);
+							count += 1;
+						}
+					}
+					this.count = count;
+					this.itemIndex = arr;
+				})
+			},
+
+			changeStatus(value, item, fIndex, cIndex) {
+				let children = this.questionList[fIndex];
+				children.children[cIndex].state = value;
+				this.$set(this.questionList, fIndex, children)
+				if (value == 0 && !item.urls) {
+					children.children[cIndex].urls = [];
+					this.$set(this.questionList, fIndex, children)
+				}
+				this.$nextTick(() => {
+					this.$refs.collapse.init();
+				})
+				this.getSelected()
+			},
+
+			getSelected() {
+				let arr = [];
+				let count = 0;
+				for (let i = 0, ii = this.questionList.length; i < ii; i++) {
+					for (let k = 0, kk = this.questionList[i].children.length; k < kk; k++) {
+						if (this.questionList[i].children[k].state != null) {
+							arr.push({
+								itemId: this.questionList[i].children[k].id,
+								state: this.questionList[i].children[k].state,
+								imageUrls: this.setImages(this.questionList[i].children[k].urls),
+								remark: this.questionList[i].children[k].remark || ""
+							})
+							if (this.questionList[i].children[k].state == 0) {
+								count += 1;
+							}
+						}
+					}
+				}
+				this.dangerCount = count;
+				return arr;
+			},
+
+			setImages(key) {
+				if (!key) {
+					return ""
+				} else {
+					let urls = [];
+					for (let i of key) {
+						urls.push(i.name);
+					}
+					return urls.join(",")
+				}
+			},
+
+			async afterReadImgs(event, item, fIndex, cIndex) {
+				uni.showLoading({
+					title: "上传中..."
+				})
+				let children = this.questionList[fIndex];
+				let lists = [].concat(event.file)
+				let fileListLen = item.urls.length;
+				lists.map((item) => {
+					children.children[cIndex].urls.push({
+						...item,
+						status: 'uploading',
+						message: '上传中'
+					})
+					this.$set(this.questionList, fIndex, children)
+				})
+				for (let i = 0; i < lists.length; i++) {
+					const result = await this.uploadFilePromise(lists[i].url)
+					children.children[cIndex].urls.splice(fileListLen, 1, Object.assign({}, {
+						url: result.data.link,
+						name: result.data.name
+					}))
+					this.$set(this.questionList, fIndex, children)
+					fileListLen++
+				}
+				this.loadingClose()
+				this.getSelected()
+			},
+
+			deleteImages(event, fIndex, cIndex) {
+				let children = this.questionList[fIndex];
+				children.children[cIndex].urls.splice(event.index, 1);
+				this.$set(this.questionList, fIndex, children);
+				this.getSelected()
+			},
+
+			signatureChange(e) {
+				// this.signatureUrl = e;
+				this.uploadSignImg(e)
+			},
+
+			showSignPopup() {
+				// if (this.getSelected().length < this.count) {
+				// 	this.$showTips("还有内容还未完善");
+				// 	return;
+				// }
+
+				let data = this.getSelected();
+				for (let i of data) {
+					if (i.state == 1) {
+						if (i.imageUrls || i.remark) {
+							i.imageUrls = "";
+							i.remark = "";
+						}
+					} else {
+						if (!i.imageUrls && !i.remark) {
+							this.$showTips("请上传隐患照片或填写隐患描述");
+							return;
+						}
+					}
+				}
+				this.showSignature = true;
+			},
+
+			uploadSignImg(url) {
+				uni.uploadFile({
+					url: this.uploadConfig.url,
+					filePath: url,
+					name: 'file',
+					header: this.uploadConfig.header,
+					success: (res) => {
+						console.log(res);
+						let data = JSON.parse(res.data);
+						if (res.statusCode == 200 && data.code == 200) {
+							// this.handleSubmit(data.data.name);
+							this.showSignature = false;
+							this.signatureUrl = data.data.link;
+							this.info.signaturePath = data.data.name;
+							// this.sumitInfo()
+						}
+					}
+				})
+			},
+
+			sumitInfo() {
+				uni.showLoading({
+					title: "加载中..."
+				})
+				if (this.form.images.length > 0) {
+					let urls = []
+					this.form.images.forEach(e => {
+						urls.push(e.name)
+					})
+					this.info.imageUrls = urls.join(",")
+				}
+
+				this.info.taskPlaceRecordVOList = this.getSelected()
+
+				savePlaceCheck(this.info).then(res => {
+					uni.hideLoading();
+					uni.showToast({
+						icon: 'success',
+						title: '提交成功',
+						success() {
+							setTimeout(() => {
+								uni.navigateBack();
+							}, 300)
+						}
+					})
+				})
+			},
+
+			previewImg() {
+				uni.previewImage({
+					urls: [this.signatureUrl],
+					current: this.signatureUrl
+				})
+			},
+
+			navTo() {
+				uni.navigateTo({
+					url: 'checkList'
+				})
+			},
+
+
+
+
+		}
+	}
+</script>
+
+<style lang="less">
+	page {
+		background-color: #f5f5f5;
+	}
+
+	.wrap {
+		.section {
+			padding: 0 20rpx;
+			margin: 20rpx 20rpx 0;
+			background-color: #fff;
+		}
+	}
+
+	.top {
+		display: flex;
+		justify-content: flex-end;
+		padding: 20rpx;
+	}
+
+	.top-btn {
+		padding: 16rpx 22rpx;
+		border-radius: 6rpx;
+		text-align: center;
+	}
+
+	.content {
+		margin: 20rpx;
+		padding: 20rpx 30rpx;
+	}
+
+	.cell {
+		margin: 0 20rpx;
+		padding: 20rpx 30rpx;
+	}
+
+	.site-box {
+		padding: 30rpx;
+		margin: 20rpx 30rpx;
+		border-radius: 4rpx;
+
+		.c-aa {
+			color: #aaa;
+		}
+
+		.address {
+			width: 60%;
+			margin-left: 25rpx;
+		}
+	}
+
+	.upload-item {
+		width: 140rpx;
+		height: 140rpx;
+		border: 1px solid #EEEEEE;
+	}
+
+	.upload {
+		// margin: 0 30rpx;
+		padding: 30rpx 0;
+	}
+
+	.submit-btn {
+		width: 690rpx;
+		height: 78rpx;
+		line-height: 78rpx;
+		background: linear-gradient(163deg, #01BDFC 0%, #017BFC 100%);
+		border-radius: 8rpx 8rpx 8rpx 8rpx;
+		font-size: 32rpx;
+		color: #fff;
+		margin-top: 50rpx;
+	}
+
+	.list-btn {
+		width: 690rpx;
+		height: 78rpx;
+		line-height: 78rpx;
+		background: linear-gradient(163deg, #c7d7dc 0%, #c3cdd8 100%);
+		border-radius: 8rpx 8rpx 8rpx 8rpx;
+		font-size: 32rpx;
+		color: #fff;
+		margin-top: 50rpx;
+	}
+
+	.address-row {
+		flex: 1;
+		justify-content: flex-end;
+		align-items: center;
+	}
+
+	.address-content {
+		width: calc(100% - 116rpx - 20rpx);
+		margin-right: 20rpx;
+		text-align: right;
+	}
+
+	.location-btn {
+		width: 116rpx;
+		height: 46rpx;
+		line-height: 46rpx;
+		border-radius: 4rpx;
+		border: 1px solid currentColor;
+		padding: 0;
+		background-color: #fff;
+		text-align: center;
+	}
+
+
+	.signture-popup {
+		padding-bottom: 20rpx;
+	}
+
+	.sign {
+		padding: 30rpx;
+		// margin: 0 30rpx;
+	}
+
+	.value-item {
+		flex: 1;
+		// background-color: #ffffff;
+		// width: 120rpx;
+		border: 2rpx solid #f5f5f5;
+		height: 70rpx;
+		line-height: 70rpx;
+		box-sizing: border-box;
+		text-align: center;
+	}
+
+	.active {
+		border: 2rpx solid currentColor;
+	}
+
+	.btn-group {
+		flex: 1;
+	}
+
+	/deep/ .u-cell__title-text {
+		font-weight: bold;
+		font-size: 30rpx;
+	}
+
+	/deep/ .u-form-item__body__left__content {
+		font-size: 26rpx;
+	}
+
+	.blank {
+		width: 100%;
+		height: 140rpx;
+	}
+
+
+	.submit-btn {
+		width: 690rpx;
+		height: 78rpx;
+		line-height: 78rpx;
+		background: linear-gradient(163deg, #01BDFC 0%, #017BFC 100%);
+		border-radius: 8rpx 8rpx 8rpx 8rpx;
+		font-size: 32rpx;
+		color: #fff;
+		margin-top: 50rpx;
+	}
+
+	.list-btn {
+		width: 690rpx;
+		height: 78rpx;
+		line-height: 78rpx;
+		background: linear-gradient(163deg, #c7d7dc 0%, #c3cdd8 100%);
+		border-radius: 8rpx 8rpx 8rpx 8rpx;
+		font-size: 32rpx;
+		color: #fff;
+		margin-top: 50rpx;
+	}
+</style>
\ No newline at end of file
diff --git a/subPackage/label/checkList.vue b/subPackage/label/checkList.vue
new file mode 100644
index 0000000..c808060
--- /dev/null
+++ b/subPackage/label/checkList.vue
@@ -0,0 +1,101 @@
+<template>
+	<view class="">
+		<view class="list">
+			<view class="list-item bgc-ff mb-20" v-for="(i,k) in list" :key="k" @click="navTo(i.taskId)">
+				<view class="item-title flex a-i-c j-c-s-b mb-20">
+					<text class="f-32 fw">消防自查</text>
+					<!-- 	<text class="f-32 fw" v-if="i.eventType == 3">二手车交易</text>
+					<text class="f-32 fw" v-if="i.eventType == 2">二手手机维修</text> -->
+					<u-tag v-if="i.confirmFlag == 4" text="待接收" type="warning" plain plainFill></u-tag>
+					<u-tag v-if="i.confirmFlag == 1" text="待审批" type="warning" plain plainFill></u-tag>
+					<u-tag v-if="i.confirmFlag == 2" text="审核通过" type="success" plain plainFill></u-tag>
+					<u-tag v-if="i.confirmFlag == 3" text="审核拒绝" type="error" plain plainFill></u-tag>
+				</view>
+				<view class="item-row flex a-i-c j-c-s-b">
+					<text class="f-28">时间</text>
+					<text class="f-28 c-66">{{i.createTime}}</text>
+				</view>
+			</view>
+		</view>
+		<u-loadmore :status="loadingStatus" loadmoreText="开始加载" loadingText="数据加载中" nomoreText="没有更多了" line />
+	</view>
+</template>
+
+<script>
+	import {
+		getLabelReportingList
+	} from "@/api/reporting/reporting.js"
+	export default {
+		data() {
+			return {
+				list: [],
+				currentPage: 1,
+				loadingStatus: 'nomore',
+			}
+		},
+
+		onLoad(option) {
+			this.getList(option.type)
+		},
+		onReachBottom() {
+			this.currentPage++
+			this.getList()
+		},
+
+		methods: {
+			getList() {
+				getLabelReportingList({
+					userId: uni.getStorageSync("userInfo").user_id,
+					page: this.currentPage,
+					size: 10,
+					reportType: 2
+					// eventType: type
+				}).then(res => {
+					if (res.code != 200) {
+						uni.showToast({
+							title: '数据请求失败',
+							icon: 'error'
+						})
+						return
+					}
+					let records = res.data.records;
+					this.list = [...this.list, ...records]
+					this.loadingStatus = 'nomore'
+				})
+			},
+			navTo(id) {
+				uni.navigateTo({
+					url: `/subPackage/workbench/views/selfCheckDetail?id=${id}`
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page {
+		background-color: #F5F5F5;
+	}
+
+	.list {
+		margin: 20rpx 30rpx 0;
+	}
+
+	.list-item {
+		padding: 0 30rpx 20rpx;
+		border-radius: 8rpx;
+
+		.item-title {
+			padding: 30rpx 0;
+			border-bottom: 1px solid #F5F5F5;
+		}
+
+		.item-row {
+			padding: 10rpx 0;
+
+			.address {
+				width: 65%;
+			}
+		}
+	}
+</style>
\ No newline at end of file
diff --git a/subPackage/label/form.vue b/subPackage/label/form.vue
index 5ba6313..dd9a29e 100644
--- a/subPackage/label/form.vue
+++ b/subPackage/label/form.vue
@@ -8,8 +8,20 @@
 					<u-input v-model="info.districtName" border="none" placeholder="请输入" placeholderClass="f-28 c-99"
 						inputAlign="right"></u-input>
 				</u-form-item>
-				<u-form-item label="对象电话" prop="transactionObjectTel" borderBottom required>
-					<u-input v-model="info.transactionObjectTel" type="number" border="none" placeholder="请输入"
+				<u-form-item label="物品名称" prop="transactionObject" borderBottom required>
+					<u-input v-model="info.transactionObject" border="none" placeholder="请输入"
+						placeholderClass="f-28 c-99" inputAlign="right"></u-input>
+				</u-form-item>
+				<u-form-item label="请输入交易人姓名" prop="owner" borderBottom required>
+					<u-input v-model="info.owner" border="none" placeholder="请输入" placeholderClass="f-28 c-99"
+						inputAlign="right"></u-input>
+				</u-form-item>
+				<u-form-item label="请输入交易人电话" prop="phoneNumber" borderBottom required>
+					<u-input v-model="info.phoneNumber" type="number" border="none" placeholder="请输入"
+						placeholderClass="f-28 c-99" inputAlign="right"></u-input>
+				</u-form-item>
+				<u-form-item label="身份证号" prop="idCard" borderBottom required>
+					<u-input v-model="info.idCard" type="idcard" border="none" placeholder="请输入"
 						placeholderClass="f-28 c-99" inputAlign="right"></u-input>
 				</u-form-item>
 				<u-form-item label="交易金额" prop="transactionMoney" borderBottom required>
@@ -89,6 +101,10 @@
 		data() {
 			return {
 				info: {
+					transactionObject: "",
+					owner: "",
+					phoneNumber: "",
+					idCard: "",
 					transactionObjectTel: "",
 					transactionMoney: "",
 					goodsNums: "",
@@ -105,10 +121,20 @@
 						message: '请输入场所名称',
 						trigger: ['blur', 'change']
 					},
-					'info.transactionObjectTel': [{
+					'info.transactionObject': {
+						required: true,
+						message: '请输入物品名称',
+						trigger: ['blur', 'change']
+					},
+					'info.owner': {
+						required: true,
+						message: '请输入交易人姓名',
+						trigger: ['blur', 'change']
+					},
+					'info.phoneNumber': [{
 							type: 'number',
 							required: true,
-							message: '请输入对象电话',
+							message: '请输入交易人手机号',
 							trigger: ['blur', 'change']
 						},
 						{
@@ -119,6 +145,24 @@
 							trigger: ['change', 'blur']
 						}
 					],
+					'info.idCard': [{
+							type: 'string',
+							required: false,
+							message: '请输入身份证号码',
+							trigger: ['change', 'blur']
+						},
+						{
+							validator: (rule, value, callback) => {
+								const idCardRegex =
+									/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
+								return idCardRegex.test(value)
+							},
+
+							message: '身份证号码有误',
+							trigger: ['change', 'blur']
+						}
+					],
+
 					'info.transactionMoney': {
 						required: true,
 						message: '请输入交易金额',
diff --git a/subPackage/label/formList.vue b/subPackage/label/formList.vue
index b7ab2d1..3bbe0be 100644
--- a/subPackage/label/formList.vue
+++ b/subPackage/label/formList.vue
@@ -3,9 +3,9 @@
 		<view class="list">
 			<view class="list-item bgc-ff mb-20" v-for="(i,k) in list" :key="k" @click="navTo(i.taskId)">
 				<view class="item-title flex a-i-c j-c-s-b mb-20">
-					<text class="f-32 fw" v-if="i.eventType == 1">打金店</text>
-					<text class="f-32 fw" v-if="i.eventType == 3">二手车交易</text>
-					<text class="f-32 fw" v-if="i.eventType == 2">二手手机维修</text>
+					<text class="f-32 fw">{{i.transactionObject}}</text>
+					<!-- 	<text class="f-32 fw" v-if="i.eventType == 3">二手车交易</text>
+					<text class="f-32 fw" v-if="i.eventType == 2">二手手机维修</text> -->
 					<u-tag v-if="i.confirmFlag == 4" text="待接收" type="warning" plain plainFill></u-tag>
 					<u-tag v-if="i.confirmFlag == 1" text="待审批" type="warning" plain plainFill></u-tag>
 					<u-tag v-if="i.confirmFlag == 2" text="审核通过" type="success" plain plainFill></u-tag>
@@ -43,12 +43,13 @@
 		},
 
 		methods: {
-			getList(type) {
+			getList() {
 				getLabelReportingList({
 					userId: uni.getStorageSync("userInfo").user_id,
 					page: this.currentPage,
 					size: 10,
-					eventType: type
+					reportType: 3
+					// eventType: type
 				}).then(res => {
 					if (res.code != 200) {
 						uni.showToast({
diff --git a/subPackage/label/index.vue b/subPackage/label/index.vue
index 7622a04..bddce49 100644
--- a/subPackage/label/index.vue
+++ b/subPackage/label/index.vue
@@ -39,7 +39,7 @@
 				<text class="address f-28">{{curSiteInfo.name}}</text>
 			</view>
 
-			<view class="nav flex flex-wrap j-c-s-b" v-if="isNine == 2">
+			<!-- <view class="nav flex flex-wrap j-c-s-b" v-if="isNine == 2">
 				<view class="nav-item" v-for="(i,k) in labelList" :key="k" @click="navTo(i.path,k)">
 					<image class="nav-item-bg" :src="i.bgImg" mode="aspectFill"></image>
 					<view class="nav-item-inner flex f-d-c">
@@ -47,17 +47,27 @@
 						<button class="item-btn" :style="{backgroundColor:i.background}">立即上报</button>
 					</view>
 				</view>
-			</view>
+			</view> -->
 
-			<view class="nav flex flex-wrap j-c-s-b" v-if="isNine == 1">
-				<view class="nav-item" :key="k" @click="navTo('hotel')">
+			<view class="nav flex flex-wrap j-c-s-b">
+				<view class="nav-item" :key="k" @click="navTo('check')">
 					<image class="nav-item-bg" src="/static/icon/nav-bg-12.png" mode="aspectFill"></image>
 					<view class="nav-item-inner flex f-d-c">
-						<text class="f-32 mb-30">{{isNineHotel?"旅馆安全":"消防检查"}}</text>
+						<text class="f-32 mb-30">消防检查</text>
 						<button class="item-btn" :style="{backgroundColor:'#EC7E51'}">立即上报</button>
 					</view>
 				</view>
+
+				<view class="nav-item" :key="k" @click="navTo('form')">
+					<image class="nav-item-bg" src="/static/icon/nav-bg-11.png" mode="aspectFill"></image>
+					<view class="nav-item-inner flex f-d-c">
+						<text class="f-32 mb-30">二手交易</text>
+						<button class="item-btn" :style="{backgroundColor:'#4D98E2'}">立即上报</button>
+					</view>
+				</view>
+
 			</view>
+
 		</view>
 	</view>
 
diff --git a/subPackage/label/index2.vue b/subPackage/label/index1.vue
similarity index 91%
rename from subPackage/label/index2.vue
rename to subPackage/label/index1.vue
index 3c96d06..7622a04 100644
--- a/subPackage/label/index2.vue
+++ b/subPackage/label/index1.vue
@@ -39,7 +39,7 @@
 				<text class="address f-28">{{curSiteInfo.name}}</text>
 			</view>
 
-			<!-- <view class="nav flex flex-wrap j-c-s-b" v-if="isNine == 2">
+			<view class="nav flex flex-wrap j-c-s-b" v-if="isNine == 2">
 				<view class="nav-item" v-for="(i,k) in labelList" :key="k" @click="navTo(i.path,k)">
 					<image class="nav-item-bg" :src="i.bgImg" mode="aspectFill"></image>
 					<view class="nav-item-inner flex f-d-c">
@@ -47,27 +47,17 @@
 						<button class="item-btn" :style="{backgroundColor:i.background}">立即上报</button>
 					</view>
 				</view>
-			</view> -->
+			</view>
 
-			<view class="nav flex flex-wrap j-c-s-b">
+			<view class="nav flex flex-wrap j-c-s-b" v-if="isNine == 1">
 				<view class="nav-item" :key="k" @click="navTo('hotel')">
 					<image class="nav-item-bg" src="/static/icon/nav-bg-12.png" mode="aspectFill"></image>
 					<view class="nav-item-inner flex f-d-c">
-						<text class="f-32 mb-30">消防检查</text>
+						<text class="f-32 mb-30">{{isNineHotel?"旅馆安全":"消防检查"}}</text>
 						<button class="item-btn" :style="{backgroundColor:'#EC7E51'}">立即上报</button>
 					</view>
 				</view>
-
-				<view class="nav-item" :key="k" @click="navTo('form')">
-					<image class="nav-item-bg" src="/static/icon/nav-bg-11.png" mode="aspectFill"></image>
-					<view class="nav-item-inner flex f-d-c">
-						<text class="f-32 mb-30">二手交易</text>
-						<button class="item-btn" :style="{backgroundColor:'#4D98E2'}">立即上报</button>
-					</view>
-				</view>
-
 			</view>
-
 		</view>
 	</view>
 
diff --git a/subPackage/workbench/views/checkReform.vue b/subPackage/workbench/views/checkReform.vue
index 69a85a6..177cfd6 100644
--- a/subPackage/workbench/views/checkReform.vue
+++ b/subPackage/workbench/views/checkReform.vue
@@ -90,8 +90,9 @@
 							<text class="item-left">{{i.title}}</text>
 							<text>不存在</text>
 						</view> -->
-						<u-collapse v-if="i.id == n.itemId && n.state == 0" ref="collapse">
-							<u-collapse-item :name="n.itemId" :title="i.title" value="存在">
+						<u-collapse :value="ids" v-if="i.id == n.itemId && n.state == 0" ref="collapse">
+							<u-collapse-item :name="n.itemId" :title="i.title" value="存在" :disabled="true"
+								:clickable="false" :isLink="false">
 								<view class="mb-20" v-if="n.imageUrls">
 									<view class="f-26 mb-10 c-00">隐患照片</view>
 									<view class="flex flex-wrap">
@@ -137,7 +138,6 @@
 										placeholderClass="c-99 f-26"
 										:disabled="roleType == 2 && (info.status == 4 || info.status == 3)?false:true"></u-textarea>
 								</view>
-								<!-- <view class="" style="height:140rpx;"></view> -->
 							</u-collapse-item>
 						</u-collapse>
 					</block>
@@ -190,28 +190,8 @@
 			await this.getItem();
 			this.getDetail(option.id);
 		},
-		// onReady() {
-		// 	setTimou(() => {
-		// 		if (this.$refs.collapse) {
-		// 			this.$nextTick(() => {
-		// 				this.$refs.collapse.init();
-		// 			})
-		// 		}
-		// 	}, 300)
-
-		// },
 
 		methods: {
-
-
-			handleOpenChange(item, index) {
-				//根据文档使用$nextTick,获取高度无效,试用setTimeout
-				setTimeout(() => {
-					this.$refs.collapse[index].queryRect();
-				}, 100);
-			},
-
-
 
 
 			getDetail(id) {
@@ -241,14 +221,6 @@
 					}
 					this.ids = ids;
 					this.info = data;
-					// if (this.$refs.collapse) {
-					// 	this.$nextTick(() => {
-					// 		this.$refs.collapse.init()
-					// 	})
-					// }
-
-
-
 				})
 			},
 
@@ -427,4 +399,8 @@
 	.c-00 {
 		color: #000;
 	}
+
+	/deep/ .u-collapse-item .u-collapse-item__content {
+		height: auto !important;
+	}
 </style>
\ No newline at end of file
diff --git a/subPackage/workbench/views/cscj.vue b/subPackage/workbench/views/cscj.vue
index c17f9f3..871df8a 100644
--- a/subPackage/workbench/views/cscj.vue
+++ b/subPackage/workbench/views/cscj.vue
@@ -886,6 +886,18 @@
 							this.form.frontType = "";
 						}
 
+						if (this.form.isNine == 1 && !this.form.nineType) {
+							this.$showTips("请选择九小场所类型")
+							return
+						}
+
+						if (this.form.isFront == 1 && !this.form.frontType) {
+							this.$showTips("请选择阵地类型")
+							return
+						}
+
+
+
 						delete this.form.images;
 
 						add(this.form).then(res => {
diff --git a/subPackage/workbench/views/labelReportDetail.vue b/subPackage/workbench/views/labelReportDetail.vue
index 1e7681c..7a9ede3 100644
--- a/subPackage/workbench/views/labelReportDetail.vue
+++ b/subPackage/workbench/views/labelReportDetail.vue
@@ -78,8 +78,23 @@
 		data() {
 			return {
 				basicData: [{
-						label: '对象电话',
-						name: "transactionObjectTel",
+						label: '物品名称',
+						name: "transactionObject",
+						value: '未完善'
+					},
+					{
+						label: '交易人姓名',
+						name: "owner",
+						value: '未完善'
+					},
+					{
+						label: '交易人电话',
+						name: "phoneNumber",
+						value: '未完善'
+					},
+					{
+						label: '交易人电话',
+						name: "idCard",
 						value: '未完善'
 					},
 					{
diff --git a/subPackage/workbench/views/selfCheckDetail.vue b/subPackage/workbench/views/selfCheckDetail.vue
new file mode 100644
index 0000000..7cc0b7f
--- /dev/null
+++ b/subPackage/workbench/views/selfCheckDetail.vue
@@ -0,0 +1,413 @@
+<template>
+	<view class="">
+		<view class="item-row flex j-c-s-b a-i-c">
+			<text>场所名称</text>
+			<text class="item-content">{{info.placeName}}</text>
+		</view>
+		<view class="item-row flex j-c-s-b a-i-c">
+			<text>标签</text>
+			<text>{{label || "未完善"}}</text>
+		</view>
+		<view class="item-row flex j-c-s-b a-i-c">
+			<text>场所负责人</text>
+			<text>{{info.principal || "未完善"}}</text>
+		</view>
+		<view class="item-row flex j-c-s-b a-i-c">
+			<text>场所负责人电话</text>
+			<text>{{info.principalPhone || "未完善"}}</text>
+		</view>
+		<view class="item-row flex j-c-s-b a-i-c">
+			<text>检查人</text>
+			<text>{{info.name}}</text>
+		</view>
+		<view class="item-row flex j-c-s-b a-i-c">
+			<text>检查时间</text>
+			<text>{{info.createTime}}</text>
+		</view>
+		<view class="item-row flex j-c-s-b a-i-c">
+			<text>地址</text>
+			<text class="item-content">{{info.location}}</text>
+		</view>
+		<view class="item-row flex j-c-s-b a-i-c" v-if="info.rectificationNoticeFlag == 2">
+			<text>下发整改通知</text>
+			<text class="item-content">是</text>
+		</view>
+		<view class="item-row flex j-c-s-b a-i-c" v-if="info.punishFlag == 2">
+			<text>是否处罚</text>
+			<text class="item-content">是</text>
+		</view>
+		<view class="item-row flex j-c-s-b a-i-c" v-if="info.punishRemark">
+			<text>处罚说明</text>
+			<text class="item-content">{{info.punishRemark}}</text>
+		</view>
+		<view class="item-row flex j-c-s-b a-i-c" v-if="info.rectificationEndTime">
+			<text>整改截至时间</text>
+			<text class="item-content">{{info.rectificationEndTime}}</text>
+		</view>
+		<view class="item-row flex j-c-s-b a-i-c" v-if="info.remark">
+			<text>其它隐患问题</text>
+			<text class="item-content">{{info.remark}}</text>
+		</view>
+		<view class="item-row flex j-c-s-b a-i-c">
+			<text>状态</text>
+			<text v-if="info.status == 1">待审核</text>
+			<text v-if="info.status == 2">审核成功</text>
+			<text v-if="info.status == 3">审核驳回</text>
+			<text v-if="info.status == 4">待完成</text>
+		</view>
+		<view class="item-row flex j-c-s-b a-i-c" v-if="info.status == 3 && info.reasonFailure">
+			<text>驳回原因</text>
+			<text class="item-content">{{info.reasonFailure}}</text>
+		</view>
+
+		<view class="image-wrap bgc-ff" v-if="images.length">
+			<view class="mb-20">
+				图片
+			</view>
+			<view class="flex flex-wrap">
+				<view class="image-item" v-for="(i,k) in images" @click="previewImage(images,i)">
+					<u-image :src="i" width="100rpx" height="100rpx"></u-image>
+				</view>
+			</view>
+		</view>
+
+		<view class="image-wrap bgc-ff" v-if="signatureUrl.length">
+			<view class="mb-20">
+				签名
+			</view>
+			<view class="image-item" v-for="(i,k) in signatureUrl" @click="previewImage(signatureUrl,i)">
+				<u-image :src="i" width="100rpx" height="100rpx"></u-image>
+			</view>
+		</view>
+
+
+
+		<view class="mt-20 bgc-ff">
+			<block v-for="(item,index) in itemList">
+				<block v-for="(i,k) in item.children">
+					<block v-for="(n,m) in info.patrolRecordVOList">
+						<!-- <view class="item-row flex j-c-s-b a-i-c" v-if="i.id == n.itemId && n.state == 1">
+							<text class="item-left">{{i.title}}</text>
+							<text>不存在</text>
+						</view> -->
+						<u-collapse :value="ids" v-if="i.id == n.itemId && n.state == 0" ref="collapse">
+							<u-collapse-item :name="n.itemId" :title="i.title" value="存在" :disabled="true"
+								:clickable="false" :isLink="false">
+								<view class="mb-20" v-if="n.imageUrls">
+									<view class="f-26 mb-10 c-00">隐患照片</view>
+									<view class="flex flex-wrap">
+										<view class="mr-20" v-for="r in ($setImageUrl(n.imageUrls))">
+											<u-image :src="r" width="140rpx" height="140rpx"
+												@click="previewImage($setImageUrl(n.imageUrls),i)"></u-image>
+										</view>
+									</view>
+								</view>
+
+								<view class="mb-20" v-if="n.remark">
+									<view class="f-26 mb-10 c-00">隐患描述</view>
+									<view class="f-28 c-00">
+										{{n.remark}}
+									</view>
+								</view>
+
+								<!-- <view class="mb-20" v-if="roleType == 2 || (roleType == 1 && n.rectificationImageUrls)">
+									<view class="f-26 mb-10 c-00">整改后照片</view>
+									<u-upload v-if="roleType == 2 && (info.status == 4 || info.status == 3)"
+										:fileList="n.urls" :previewFullImage="uploadConfig.previewFullImage"
+										:accept="uploadConfig.acceptImg" :multiple="uploadConfig.multiple"
+										:maxCount="uploadConfig.maxCount" :capture="uploadConfig.capture"
+										@afterRead="afterReadImgs($event,n,m)" @delete="deleteImages($event,m)">
+										<view class="upload-item upload-icon flex_base">
+											<u-icon name="/static/icon/upload.png" width="60rpx"
+												height="60rpx"></u-icon>
+										</view>
+									</u-upload>
+
+
+									<view class="flex flex-wrap" v-if="info.status != 4 &&  n.rectificationImageUrls ">
+										<view class="mr-20" v-for="r in ($setImageUrl(n.rectificationImageUrls))">
+											<u-image :src="r" width="140rpx" height="140rpx"
+												@click="previewImage($setImageUrl(n.rectificationImageUrls),i)"></u-image>
+										</view>
+									</view>
+								</view> -->
+
+								<!-- 	<view class="" v-if="roleType == 2 || (roleType == 1 && n.rectificationRemark)">
+									<view class="f-26 mb-10 c-00">整改后描述</view>
+									<u-textarea v-model="n.rectificationRemark" placeholder="请输入整改后描述"
+										placeholderClass="c-99 f-26"
+										:disabled="roleType == 2 && (info.status == 4 || info.status == 3)?false:true"></u-textarea>
+								</view> -->
+
+
+
+							</u-collapse-item>
+						</u-collapse>
+					</block>
+				</block>
+			</block>
+		</view>
+
+		<view class="blank"></view>
+		<!-- <footer-btn @click="submitInfo" v-if="roleType == 2 && (info.status == 4 || info.status == 3)"     /> -->
+		<audit-action v-if="roleType == 1 && info.status == 1" @handle="submitAudit" />
+	</view>
+</template>
+
+<script>
+	import uploadMixin from "@/mixin/uploadMixin";
+	import {
+		getPlaceCheckItem,
+		getPlaceCheckReformDetail,
+		addPlaceCheckReform,
+		auditPlaceCheckReform
+	} from '@/api/place/place.js'
+
+	import {
+		getPlaceCheckDetail
+	} from '@/api/reporting/reporting.js'
+
+	import auditAction from '../components/actionBtn.vue'
+	export default {
+		mixins: [uploadMixin],
+		components: {
+			auditAction
+		},
+		data() {
+			return {
+				info: {},
+				images: [],
+				signatureUrl: [],
+				label: "",
+				itemList: [],
+				roleType: '', //1.民警/系统管理员   2.场所负责人
+				ids: []
+			}
+		},
+		async onLoad(option) {
+			let {
+				roleName
+			} = uni.getStorageSync("activeRole")
+			if (roleName == "居民") {
+				this.roleType = 2;
+			}
+			if (roleName == "民警" || roleName == "系统管理员") {
+				this.roleType = 1;
+			}
+
+			await this.getItem();
+			this.getDetail(option.id);
+		},
+
+		methods: {
+
+			getDetail(id) {
+				getPlaceCheckDetail({
+					task: id
+				}).then(res => {
+					let data = res.data;
+					// this.info = res.data;
+					this.images = this.$setImageUrl(res.data.imageUrls);
+					this.signatureUrl = this.$setImageUrl(res.data.signaturePath);
+					if (res.data.placePoiLabelVOList.length) {
+						this.label = res.data.placePoiLabelVOList[res.data.placePoiLabelVOList.length - 1]
+							.labelName;
+					}
+					let ids = [];
+					for (let i of data.patrolRecordVOList) {
+						if ((data.status == 4 || data.status == 3) && this.roleType == 2) {
+							if (i.rectificationImageUrls) {
+								i.urls = this.$setImageUrl(i.rectificationImageUrls, 2);
+							} else {
+								i.urls = [];
+							}
+						}
+						if (i.state == 0) {
+							ids.push(i.itemId)
+						}
+					}
+					this.ids = ids;
+					this.info = data;
+				})
+			},
+
+			getItem() {
+				getPlaceCheckItem().then(res => {
+					if (res.code == 200) {
+						this.itemList = res.data;
+					}
+				})
+			},
+
+			async afterReadImgs(event, item, fIndex) {
+				uni.showLoading({
+					title: "上传中..."
+				})
+				let children = this.info.patrolRecordVOList;
+				let lists = [].concat(event.file)
+				let fileListLen = item.urls.length;
+				lists.map((item) => {
+					children[fIndex].urls.push({
+						...item,
+						status: 'uploading',
+						message: '上传中'
+					})
+					this.$set(this.info, "patrolRecordVOList", children)
+				})
+				for (let i = 0; i < lists.length; i++) {
+					const result = await this.uploadFilePromise(lists[i].url)
+					children[fIndex].urls.splice(fileListLen, 1, Object.assign({}, {
+						url: result.data.link,
+						name: result.data.name
+					}))
+					this.$set(this.info, "patrolRecordVOList", children)
+					fileListLen++
+				}
+				this.loadingClose()
+			},
+
+			deleteImages(event, index) {
+				let children = this.info.patrolRecordVOList;
+				children[index].urls.splice(event.index, 1);
+				this.$set(this.info, "patrolRecordVOList", children)
+			},
+
+			setImages(key) {
+				if (!key) {
+					return ""
+				} else {
+					let urls = [];
+					for (let i of key) {
+						urls.push(i.name);
+					}
+					return urls.join(",")
+				}
+			},
+
+			previewImage(urls, current) {
+				uni.previewImage({
+					urls,
+					current
+				})
+			},
+
+			//整改提交
+			submitInfo() {
+				uni.showLoading({
+					title: "加载中..."
+				})
+				let data = this.info;
+				for (let i of data.patrolRecordVOList) {
+					if (i.urls) {
+						i.rectificationImageUrls = this.setImages(i.urls)
+					}
+					delete i.urls;
+				}
+				if (data.status == 3) {
+					data.status = 1;
+				}
+				if (data.status == 4) {
+					data.status = 1;
+				}
+				addPlaceCheckReform(data).then(res => {
+					uni.hideLoading()
+					if (res.code == 200) {
+						this.$showTips("操作成功", "success");
+						setTimeout(() => {
+							uni.navigateBack()
+						}, 300)
+					}
+				})
+			},
+
+			//审核
+			submitAudit(val) {
+				uni.showLoading({
+					title: "加载中..."
+				})
+				auditPlaceCheckReform({
+					id: this.info.id,
+					taskId: this.info.taskId,
+					status: val.type,
+					rectificationFlag: val.type == 3 ? 1 : 2,
+					reasonFailure: val.remark
+				}).then(res => {
+					uni.hideLoading()
+					if (res.code == 200) {
+						this.$showTips("操作成功", "success");
+						setTimeout(() => {
+							uni.navigateBack()
+						}, 300)
+					}
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page {
+		background-color: #f5f5f5;
+	}
+
+	.item-row {
+		width: 100%;
+		padding: 30rpx;
+		box-sizing: border-box;
+		border-bottom: 1px solid #f5f5f5;
+		font-size: 28rpx;
+		background-color: #fff;
+
+		.item-content {
+			width: 70%;
+			text-align: right;
+		}
+
+		.item-left {
+			width: 70%;
+		}
+	}
+
+	.image-wrap {
+		margin-top: 20rpx;
+		padding: 20rpx;
+
+		.image-item {
+			margin-right: 20rpx;
+		}
+	}
+
+	/deep/.u-cell__title-text {
+		color: #000 !important;
+		width: 70%;
+		font-size: 28rpx !important;
+	}
+
+	/deep/ .u-cell__value {
+		color: #000 !important;
+		font-size: 28rpx !important;
+	}
+
+	.mr-20 {
+		margin-right: 20rpx;
+	}
+
+	.upload-item {
+		width: 140rpx;
+		height: 140rpx;
+		border: 1px solid #EEEEEE;
+	}
+
+	.blank {
+		width: 100%;
+		height: 140rpx;
+	}
+
+	.c-00 {
+		color: #000;
+	}
+
+	/deep/ .u-collapse-item .u-collapse-item__content {
+		height: auto !important;
+	}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3