From f712cae55d8274c93aa0e89a2f8ac32d53608bb5 Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Tue, 19 Mar 2024 21:30:59 +0800
Subject: [PATCH] 警情处置列表查询完善,警情处置完成

---
 subPackage/police/policeSituationDetail.vue |  381 +++++++++++++++++++++++++++++++++++++++++++++++
 subPackage/police/policeSituation.vue       |   39 +---
 api/police/police.js                        |   18 ++
 3 files changed, 411 insertions(+), 27 deletions(-)

diff --git a/api/police/police.js b/api/police/police.js
index 20b94f0..73e0f96 100644
--- a/api/police/police.js
+++ b/api/police/police.js
@@ -7,4 +7,22 @@
 		method: 'get',
 		params: params
 	})
+}
+
+// 查询警情处理记录
+export const getPoliceDetail = (params) => {
+	return http.request({
+		url: '/blade-policeAlarmRecords/policeAlarmRecords/detail',
+		method: 'get',
+		params: params
+	})
+}
+
+// 查询警情处理记录
+export const updateInfo = (data) => {
+	return http.request({
+		url: '/blade-policeAlarmRecords/policeAlarmRecords/update',
+		method: 'post',
+		data: data
+	})
 }
\ No newline at end of file
diff --git a/subPackage/police/policeSituation.vue b/subPackage/police/policeSituation.vue
index 89ed774..488d9ad 100644
--- a/subPackage/police/policeSituation.vue
+++ b/subPackage/police/policeSituation.vue
@@ -6,14 +6,14 @@
 					<u-tabs :list="tabList" :current="tabIndex" @click="changeTab" :inactiveStyle="{color:'#999999'}"
 						:activeStyle="{color:'#017BFC'}">
 					</u-tabs>
-					<!-- <view class="search flex j-c-s-b a-i-c">
+					<view class="search flex j-c-s-b a-i-c">
 						<view class="tab-filter flex j-c-c a-i-c" @click="showDateModal">
 							<text class="f-28">时间筛选</text>
 							<u-icon name="arrow-down"></u-icon>
 						</view>
 						<u-search placeholder="请输入需要查询信息的名称" v-model="keyword" :clearabled="true" :showAction="true"
 							:animation="true" @search="searchConfirm" @clear="clearConfirm"></u-search>
-					</view> -->
+					</view>
 				</view>
 			</view>
 		</u-sticky>
@@ -21,23 +21,22 @@
 		<view class="list">
 			<view class="list-item bgc-ff mb-20" v-for="(i,k) in list" :key="k" @click="navTo(i.id,i.status)">
 				<view class="item-title flex a-i-c j-c-s-b mb-20">
-					<text class="f-32 fw">{{i.alarmType}}</text>
+					<text class="f-32 fw">{{i.alarmTypeName==null?'':i.alarmTypeName}}</text>
 					<u-tag v-if="i.status == 1" text="待处置" type="warning" plain plainFill></u-tag>
 					<u-tag v-if="i.status == 2" text="已处置" type="success" 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">报警时间</text>
 					<text class="f-28 c-66">{{i.createTime}}</text>
 				</view>
 				<view class="item-row flex a-i-c j-c-s-b">
-					<text class="f-28">地址</text>
+					<text class="f-28">报警地址</text>
 					<text class="address f-28 c-66">{{i.address || ""}}</text>
 				</view>
 			</view>
 		</view>
 		<u-toast ref="uToast"></u-toast>
 		<u-loadmore :status="loadingStatus" loadmoreText="开始加载" loadingText="数据加载中" nomoreText="没有更多了" line />
-
 		<date-range-modal ref="dateRane" @comfirm="handleComfirmDate" @rest="handleRestDate" />
 	</view>
 </template>
@@ -54,7 +53,6 @@
 		data() {
 			return {
 				tabList: [
-
 					{
 						name: "全部",
 						status: "",
@@ -66,8 +64,7 @@
 					{
 						name: "已处置",
 						status: 2
-					},
-
+					}
 				],
 				tabIndex: 0,
 				currentStatus: "",
@@ -117,6 +114,7 @@
 				this.currentPage = 1;
 			},
 			getList() {
+				
 				this.$nextTick(() => {
 					this.loadingStatus = 'loadingmore'
 					this.$refs.uToast.show({
@@ -129,22 +127,13 @@
 					current: this.currentPage,
 					size: 20,
 					status: this.currentStatus,
-					frequency: this.frequency
+					searchKey: this.keyword
 				}
-				// if (this.selectDate.length) {
-				// 	params.startTime = this.selectDate[0]
-				// 	params.endTime = this.selectDate[1]
-				// }
-				// if (this.houseCode) {
-				// 	params.houseCode = this.houseCode;
-				// }
-
-				// if (this.reportType) {
-				// 	params.reportType = this.reportType
-				// }
-				// if (this.keyword) {
-				// 	params.name = this.keyword;
-				// }
+				
+				if (this.selectDate.length) {
+					params.startTime = this.selectDate[0],
+					params.endTime = this.selectDate[1]
+				}
 
 				getPoliceAlarmRecords(params).then(res => {
 					if (res.code != 200) {
@@ -164,7 +153,7 @@
 			},
 			navTo(id, status) {
 				uni.navigateTo({
-					url: './policeSituationDetail',
+					url: `./policeSituationDetail?id=${id}`,
 					complete: (res) => {
 						console.log(res)
 					}
diff --git a/subPackage/police/policeSituationDetail.vue b/subPackage/police/policeSituationDetail.vue
index 17480d0..3dec0f7 100644
--- a/subPackage/police/policeSituationDetail.vue
+++ b/subPackage/police/policeSituationDetail.vue
@@ -1,22 +1,399 @@
 <template>
 	<view>
+		<view class="content bgc-ff">
+			<u-form labelPosition="left" :model="info" :rules="rules" ref="form" labelWidth="90"
+				:labelStyle="{fontSize:'28rpx'}">
+				<u-form-item label="报警人时间" prop="createTime" :borderBottom="false" required>
+					<u-input v-model="info.createTime" disabled disabledColor="#ffffff" border="none" placeholder="请选择"
+						placeholderClass="f-28 c-99" inputAlign="right"></u-input>
+				</u-form-item>
+				<u-form-item label="报警地址" borderBottom required prop="address" :borderBottom="false">
+					<u-input type="textarea" v-model="info.address" border="none" placeholderClass="f-28 c-99"
+						inputAlign="right" placeholder="请输入报警地址">
+					</u-input>
+				</u-form-item>
+				<u-form-item @click="showSelectBus('报警类型','alarmType')" label="报警类型" prop="alarmType" :borderBottom="false" required >
+					<u-input v-model="selectDefaultName.alarmType" disabled disabledColor="#fff" border="none" placeholder="请选择"
+						placeholderClass="f-28 c-99" inputAlign="right"></u-input>
+					<u-icon slot="right" name="arrow-right"></u-icon>
+				</u-form-item>
+				<u-form-item label="报警人姓名" prop="name" :borderBottom="false" required>
+					<u--input border="none" v-model="info.name"
+							placeholder="请输入报警人姓名" inputAlign="right" placeholderClass="f-28 c-99"></u--input>
+				</u-form-item>
+				<u-form-item @click="showSelectBus('性别','gender')" class="form-item" labelWidth="110" label="报警人性别"
+					prop="gender">
+					<u--input border="none" v-model="selectDefaultName.gender" disabled disabledColor="#ffffff"
+						placeholder="请选择报警人性别" inputAlign="right">
+					</u--input>
+					<u-icon slot="right" name="arrow-right"></u-icon>
+				</u-form-item>
+				<u-form-item label="报警人电话" prop="phone" :borderBottom="false" required>
+					<u--input border="none" type="number" v-model="info.phone"
+							placeholder="请输入报警人电话" inputAlign="right" placeholderClass="f-28 c-99"></u--input>
+				</u-form-item>
+				<u-form-item label="报警内容" borderBottom required prop="alarmDescribe" :borderBottom="false">
+					<u-input type="textarea" v-model="info.alarmDescribe" border="none" placeholderClass="f-28 c-99"
+						inputAlign="right" placeholder="请输入报警内容">
+					</u-input>
+				</u-form-item>
+				<u-form-item label="接警人姓名" prop="policeName" :borderBottom="false" required>
+					<u-input v-model="info.policeName" disabled disabledColor="#fff" border="none"
+						placeholder="请输入接警人姓名" placeholderClass="f-28 c-99" inputAlign="right"></u-input>
+				</u-form-item>
+				<u-form-item label="接警人电话" prop="policePhone" :borderBottom="false" required>
+					<u--input border="none" type="number" v-model="info.policePhone"
+							placeholder="请输入接警人电话" inputAlign="right"></u--input>
+				</u-form-item>
+				<u-form-item label="接警时间" prop="alarmResponseTime" :borderBottom="false" required @click="showSelectDate = true">
+					<u-input v-model="info.alarmResponseTime" disabled disabledColor="#ffffff" border="none" placeholder="请选择"
+						placeholderClass="f-28 c-99" inputAlign="right"></u-input>
+					<u-icon slot="right" name="arrow-right"></u-icon>
+				</u-form-item>
+				<u-form-item @click="showSelectBus('是否有人受伤','injuryFlag')" label="是否有人受伤" prop="injuryFlag" :borderBottom="false" required>
+					<u--input border="none" v-model="selectDefaultName.injuryFlag" disabled
+						disabledColor="#ffffff" placeholder="请选择是否有人受伤" inputAlign="right">
+					</u--input>
+					<u-icon slot="right" name="arrow-right"></u-icon>
+				</u-form-item>
+				<u-form-item @click="showSelectBus('公安事件','publicIncidents')" label="公安事件" prop="publicIncidents" :borderBottom="false" required>
+					<u--input border="none" v-model="selectDefaultName.publicIncidents" disabled
+						disabledColor="#ffffff" placeholder="请选择公安事件" inputAlign="right">
+					</u--input>
+					<u-icon slot="right" name="arrow-right"></u-icon>
+				</u-form-item>
+			</u-form>
+		</view>
+		
+		<u-picker :defaultIndex="[selectDefaultIndex[selectBusKey]]" :closeOnClickOverlay="true" v-if="typeShow"
+			:show="typeShow" :columns="[selectBusList]" @close="typeShow = false" @cancel="typeShow = false"
+			keyName="name" @confirm="typeSelect"></u-picker>
+		<u-datetime-picker ref="datetimePicker" :show="showSelectDate" v-model="workTime" mode="datetime"
+			:formatter="formatter" @confirm="confirmDate" @cancel="showSelectDate = false"></u-datetime-picker>
+		<footer-btn @click="submitInfo" text="保存" />
 
 	</view>
+
 </template>
 
 <script>
+	import {
+		getPoliceDetail,updateInfo
+	} from "@/api/police/police"
+	import uploadMixin from "@/mixin/uploadMixin";
+	import {
+		bizDictionary,
+		update
+	} from '@/api/system/dict.js'
+
 	export default {
+		mixins: [uploadMixin],
 		data() {
 			return {
-
+				typeShow:false,
+				form: {},
+				// formatter:"",
+				info: {
+					name: "",
+					phone: "",
+					alarmType: "",
+					gender: "",
+					policeName: "",
+					policePhone: "",
+					createTime: "",
+					injuryFlag:"",
+					publicIncidents:""
+				},
+				rules: {
+					type: [{
+						type: 'number',
+						required: true,
+						message: '请选择走访类型',
+						trigger: ['blur', 'change']
+					}],
+					householdId: [{
+						type: 'string',
+						required: true,
+						message: '请选择被访问人',
+						trigger: ['blur', 'change']
+					}],
+					context: [{
+						type: 'string',
+						required: true,
+						message: '请输入工作内容',
+						trigger: ['blur', 'change']
+					}],
+				},
+				dataList: {
+					alarmType:[],
+					gender: [{
+							value: 1,
+							name: '男',
+						},
+						{
+							value: 2,
+							name: '女',
+						}
+					],
+					publicIncidents: [
+						{
+							value: 2,
+							name: '是',
+						},{
+							value: 1,
+							name: '否',
+						}
+					],
+					injuryFlag: [{
+							value: 1,
+							name: '是',
+						},
+						{
+							value: 0,
+							name: '否',
+						}
+					],
+				},
+				// 下拉变量
+				selectBusList: [],
+				selectBusVal: '',
+				selectBusTitle: '',
+				selectBusModel: '',
+				selectBusKey: "",
+				selectDefaultIndex: {
+					gender: 0,
+					injuryFlag: 0,
+					publicIncidents: 0,
+					alarmType:0
+				},
+				selectDefaultName: {
+					alermType:"",
+					gender: "",
+					injuryFlag: "",
+					publicIncidents: "",
+				},
+				showSelectDate: false,
+				workTime: Number(new Date()),
+				isShowPicker: false,
+				houseIndex: [0],
+				isShowTypePicker: false,
+				isShowLabelPicker: false,
+				keyword: "",
+				isShowPopup: false,
+				isEdit: false,
+				id: ""
 			}
 		},
+		async onLoad(option) {
+			if (option.id) {
+				this.isEdit = true;
+				this.id = option.id;
+				setTimeout(() => {
+					this.getDetail(option.id)
+				}, 200)
+			}
+		},
+
+		onReady() {
+			//onReady 为uni-app支持的生命周期之一
+			this.$refs.form.setRules(this.rules)
+		},
+
 		methods: {
+			async getAllBizDict() {
+				//报警类型字典
+				await this.getBizDict('applyAlarmType', this.dataList.alarmType)
+			},
+			// 获取业务字典
+			async getBizDict(code, list) {
+				const param = {
+					code: code
+				}
+				const res = await bizDictionary(param)
+				res.data.forEach(e => {
+					list.push({
+						name: e.dictValue,
+						value: Number(e.dictKey)
+					})
+				})
+			},
+			//类型选择确认
+			typeSelect(item) {
+				const [result] = item.value
+				// this[this.selectBusModel] = result.name
+				this.info[this.selectBusKey] = result.value
+				this.selectDefaultName[this.selectBusKey] = result.name;
+				this.selectDefaultIndex[this.selectBusKey] = item.indexs[0];
+				this.typeShow = !this.typeShow
+			},
+			// 显示选择弹框
+			showSelectBus(title, key) {
+				this.selectBusList = this.dataList[key]
+				this.selectBusTitle = title
+				// this.selectBusModel = model
+				this.selectBusKey = key
+				this.typeShow = true
+			},
+			// 字典值匹配
+			findObjValue(value, obj, key = "value") {
+				let data = {
+					index: "",
+					name: ""
+				}
+				for (let i = 0, ii = obj.length; i < ii; i++) {
+					if (value == obj[i][key]) {
+						data.index = i;
+						data.name = obj[i].name;
+					}
+				}
+				return data;
+			},
+			async getDetail(id) {
+				// 获取所有字典
+				await this.getAllBizDict();
+				getPoliceDetail({
+					id
+				}).then(res => {
+					console.log(res);
+					if (res.code == 200) {
+						this.info = res.data;
+						if(this.info.alarmResponseTime){
+							this.info.alarmResponseTime = this.info.alarmResponseTime.substring(0,16)
+						}
+						let data = res.data;
+						for (let i in this.selectDefaultIndex) {
+							let {
+								index,
+								name
+							} = this.findObjValue(data[i], this.dataList[i])
+							this.selectDefaultIndex[i] = index || 0;
+							this.selectDefaultName[i] = name;
+						}
+					}
+				})
+			},
+			confirmDate(e) {
+				this.showSelectDate = false;
+				this.info.alarmResponseTime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM')
+			},
+			submitInfo() {
+				this.$refs.form.validate().then(valid => {
+					this.info.status = 2;
+					if(this.info.alarmResponseTime){
+						this.info.alarmResponseTime = this.info.alarmResponseTime + ":00"
+					}
+					updateInfo(this.info).then(res => {
+						uni.showToast({
+							icon: 'success',
+							title: '保存成功',
+						})
+						setTimeout(() => {
+							this.reLoadPrePage()
+						}, 300)
+					})
+				})
+			},
+			//刷新上一页数据后返回
+			reLoadPrePage() {
+				let pages = getCurrentPages();
+				let prePage = pages[pages.length - 2];
+				prePage.$vm.resetParams();
+				prePage.$vm.list= [];
+				uni.navigateBack();
+			},
 
 		}
 	}
 </script>
 
-<style>
+<style lang="less">
+	page {
+		background-color: #F5F5F5;
+	}
 
+	.content {
+		margin: 20rpx 30rpx;
+		padding: 0 30rpx;
+	}
+
+	.row {
+		padding: 20rpx 0;
+		border-bottom: 1px solid
+	}
+
+	.location-btn {
+		width: 116rpx;
+		height: 46rpx;
+		line-height: 46rpx;
+		border-radius: 4rpx;
+		border: 1px solid currentColor;
+		padding: 0;
+		background-color: #fff;
+	}
+
+	.upload {
+		margin: 0 30rpx;
+		padding: 30rpx;
+
+		.upload-item {
+			width: 140rpx;
+			height: 140rpx;
+			border: 1px solid #EEEEEE;
+		}
+	}
+
+	.footer {
+		width: 100%;
+		padding: 30rpx;
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		z-index: 10;
+		box-sizing: border-box;
+
+		.footer-btn {
+			width: 100%;
+			height: 78rpx;
+			line-height: 78rpx;
+			background: linear-gradient(163deg, #01BDFC 0%, #017BFC 100%);
+			border-radius: 8rpx;
+			color: #fff;
+			font-size: 32rpx;
+		}
+	}
+
+	.popup-content {
+		width: 100%;
+		padding: 0 30rpx 30rpx;
+		box-sizing: border-box;
+
+		.popup-title {
+			padding: 30rpx 0;
+			text-align: center;
+			font-weight: bold;
+		}
+
+		.popup-list {
+			height: 650rpx;
+		}
+
+		.popup-list-item {
+			padding: 20rpx 0;
+			border-bottom: 1px solid #f1f1f1;
+			position: relative;
+		}
+
+		.check-icon {
+			position: absolute;
+			right: 20rpx;
+			top: 20rpx;
+		}
+	}
+
+	.address-content {
+		flex: 1;
+		background-color: #F5F5F5;
+		font-size: 28rpx;
+		padding: 2rpx 10rpx;
+	}
 </style>
\ No newline at end of file

--
Gitblit v1.9.3