linweizeng 2 lat temu
rodzic
commit
afef811b42

+ 2 - 0
common/service/http.js

@@ -1,5 +1,7 @@
 let apiHosp = 'http://120.78.154.31/'
 
+// let apiHosp = 'http://192.168.2.247:5100/'
+
 // let apiHosp = 'http://192.168.2.247/'
 
 // let apiHosp = 'http://172.16.40.184/'

+ 6 - 1
common/service/service.js

@@ -118,6 +118,11 @@ http.interceptor.response(async (response) => {
 					window.location.reload()
 				})
 
+				break
+			case 404:
+				setTimeout(() => {
+					uni.hideLoading()
+				}, 5000)
 				break
 			case 404:
 				break
@@ -146,4 +151,4 @@ http.interceptor.response(async (response) => {
 
 export {
 	http
-}
+}

+ 2 - 3
components/lin-select/lin-select.vue

@@ -51,7 +51,7 @@
 					</radio-group>
 				</view>
 			</scroll-view>
-			<!-- <view class="item-close" @tap="isShow=false">收起</view> -->
+			<view class="item-close" @tap="isShow=false">收起</view>
 		</view>
 	</view>
 </template>
@@ -260,9 +260,8 @@
 	}
 
 	.item-close {
-		padding: 20upx;
 		text-align: center;
-		font-size: 32upx;
+		font-size: 32rpx;
 		border-top: 1px solid #f3f3f4;
 		color: #8F8F94;
 	}

BIN
components/lin-upload/image/DOC.png


BIN
components/lin-upload/image/PDF.png


BIN
components/lin-upload/image/del.png


BIN
components/lin-upload/image/docl.png


BIN
components/lin-upload/image/document.png


BIN
components/lin-upload/image/document_fill.png


BIN
components/lin-upload/image/dolc.png


BIN
components/lin-upload/image/png.png


BIN
components/lin-upload/image/text.png


+ 136 - 0
components/lin-upload/lin-upload.vue

@@ -0,0 +1,136 @@
+<template>
+	<view>
+		<view>
+			<button type="primary" :size="size" @click="chooseClick">上传文档</button>
+		</view>
+		<view class="file">
+			<view class="fileSin" v-for="(item,index) in fileList" :key="index">
+				<view class="left centerBox">
+					<image src="./image/PDF.png" v-if="item.ext == 'pdf'"></image>
+					<image src="./image/text.png" v-else-if="item.ext == 'text'"></image>
+					<image src="./image/DOC.png" v-else-if="item.ext == 'doc' || item.ext == 'docx'"></image>
+					<image src="./image/PDF.png" v-else-if="item.ext == 'png'"></image>
+					<image src="./image/document_fill.png" v-else></image>
+				</view>
+				<view class="center">
+					<text>55555555555555555555555555555555555555555555555555555555555555</text>
+				</view>
+				<view class="right centerBox">
+					<image src="./image/dolc.png"></image>
+					<image src="./image/del.png"></image>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/common/service/http.js'
+	import {
+		ACCESS_TOKEN,
+		USER_NAME,
+		USER_INFO
+	} from "@/common/util/constants" // 拉取登录token,userName,userInfo
+	export default {
+		props: {
+			size: {
+				type: String,
+				default: "mini"
+			},
+			fileList: {
+				type: Array,
+				default: () => []
+			}
+		},
+		methods: {
+			chooseClick() {
+				let token = uni.getStorageSync(ACCESS_TOKEN)
+				uni.chooseImage({
+					success: (chooseImageRes) => {
+						const tempFilePaths = chooseImageRes.tempFilePaths[0]
+						// this.$emit('chooseClick')
+
+						uni.uploadFile({
+							// url: http.apiHosp + 'ibps/platform/v3/file/upload/mobile', //仅为示例,非真实的接口地址
+							url: http.apiHosp + '/ibps/platform/v3/file/upload', //仅为示例,非真实的接口地址
+							filePath: tempFilePaths,
+							name: 'file',
+							formData: {
+								'ext': '.jpg'
+							},
+							header: {
+								'X-Authorization-access_token': token,
+								'X-Authorization-systemid': ''
+							},
+							success: (uploadFileRes) => {
+
+							}
+						});
+					}
+				})
+
+			}
+		}
+
+	}
+</script>
+
+<style lang="scss" scoped>
+	.uploadBox {
+		margin: 10rpx;
+	}
+
+	.file {
+		.fileSin {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			border-bottom: 1rpx #e6e6e6 solid;
+			margin: 10rpx;
+
+			.left {
+				width: 60rpx;
+				height: 60rpx;
+				margin-right: 10rpx;
+
+				image {
+					width: 50rpx;
+					height: 50rpx;
+				}
+			}
+
+			.center {
+				width: calc(100% - 250);
+				line-height: 60rpx;
+
+				display: inline-block;
+				white-space: nowrap;
+				overflow: hidden;
+				text-overflow: ellipsis;
+
+				text {
+					font-size: 30rpx;
+					color: #666666;
+				}
+			}
+
+			.right {
+				width: 120rpx;
+				height: 60rpx;
+				margin-left: 10rpx;
+
+				image {
+					margin-right: 10rpx;
+					width: 30rpx;
+					height: 30rpx;
+				}
+			}
+		}
+	}
+
+	.centerBox {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+</style>

+ 214 - 67
pages/communication/communication.vue

@@ -3,6 +3,9 @@
 		<cu-custom bgColor="bg-luohu" :isBack="true">
 			<block slot="backText">返回</block>
 			<block slot="content">沟通记录</block>
+			<block slot="right" v-if="typeValue == '4'">
+				<text @click="getBack">退回原因</text>
+			</block>
 		</cu-custom>
 		<view>
 			<view class="cu-form-group">
@@ -16,64 +19,89 @@
 					v-if="form.keHuDanWeiMingChe != ''" @click="form.keHuDanWeiMingChe = ''"></u-icon> -->
 			</view>
 			<view class="cu-form-group">
-				<view class="title">客户联系人:</view>
-				<input placeholder="请输入客户联系人" v-model="form.keHuLianXiRen" name="input" :disabled="id && id != '' ? true: false"></input>
-				<u-icon class="uni-icon" name="close-circle-fill" color="rgb(192, 196, 204)" size="42" v-if="form.keHuLianXiRen != '' && id == ''" @click="form.keHuLianXiRen = ''"></u-icon>
+				<view class="title">
+					<text style="color: red;">*</text>
+					客户联系人:
+				</view>
+				<input placeholder="请输入客户联系人" v-model="form.keHuLianXiRen" name="input" :disabled="typeValue != 3 && typeValue != 4 ? true: false"></input>
+				<u-icon class="uni-icon" name="close-circle-fill" color="rgb(192, 196, 204)" size="42" v-if="form.keHuLianXiRen != '' && (typeValue == 3 || typeValue == 4)" @click="form.keHuLianXiRen = ''"></u-icon>
 			</view>
 			<view class="cu-form-group">
-				<view class="title">委托单号:</view>
-				<text style="width: 100%;" @click="getShow">{{getWeiTuo(form.weiTuoDanHao)}}</text>
-				<u-button type="success" size="mini" @click="getShow" v-if="form.weiTuoDanHao == '' && id == ''">选择
-				</u-button>
-				<u-icon class="uni-icon" name="close-circle-fill" color="rgb(192, 196, 204)" size="42" v-if="form.weiTuoDanHao != '' && id == ''" @click="form.weiTuoDanHao = ''"></u-icon>
+				<view class="title">
+					<text style="color: red;">*</text>
+					联系电话:
+				</view>
+				<input placeholder="请输入联系电话" v-model="form.lianXiDianHua" name="input" :disabled="typeValue != 3 && typeValue != 4 ? true: false"></input>
+				<u-icon class="uni-icon" name="close-circle-fill" color="rgb(192, 196, 204)" size="42" v-if="form.lianXiDianHua != '' && (typeValue == 3 || typeValue == 4)" @click="form.lianXiDianHua = ''"></u-icon>
 			</view>
 			<view class="cu-form-group">
-				<view class="title">联系电话:</view>
-				<input placeholder="请输入联系电话" v-model="form.lianXiDianHua" name="input" :disabled="id && id != '' ? true: false"></input>
-				<u-icon class="uni-icon" name="close-circle-fill" color="rgb(192, 196, 204)" size="42" v-if="form.lianXiDianHua != '' && id == ''" @click="form.lianXiDianHua = ''"></u-icon>
+				<view class="title">
+					<text style="color: red;">*</text>
+					委托单号:
+				</view>
+				<text style="width: 100%;" @click="getShow">{{getWeiTuo(form.weiTuoDanHao)}}</text>
+				<u-button type="success" size="mini" @click="getShow" v-if="form.weiTuoDanHao == '' && (typeValue == 3 || typeValue == 4)">选择
+				</u-button>
+				<u-icon class="uni-icon" name="close-circle-fill" color="rgb(192, 196, 204)" size="42" v-if="form.weiTuoDanHao != '' && (typeValue == 3 || typeValue == 4)" @click="form.weiTuoDanHao = ''"></u-icon>
 			</view>
 			<view class="cu-form-group">
 				<view class="title">样品名称:</view>
-				<textarea maxlength="-1" v-model="form.yangPinMingCheng" placeholder="请输入样品名称" auto-height="true" :disabled="id && id != '' ? true: false"></textarea>
-				<u-icon class="uni-icon" name="close-circle-fill" color="rgb(192, 196, 204)" size="42" v-if="form.yangPinMingCheng != '' && id == ''" @click="form.yangPinMingCheng = ''"></u-icon>
+				<textarea maxlength="-1" v-model="form.yangPinMingCheng" placeholder="请输入样品名称" auto-height="true" :disabled="typeValue != 3 && typeValue != 4 ? true: false"></textarea>
+				<u-icon class="uni-icon" name="close-circle-fill" color="rgb(192, 196, 204)" size="42" v-if="form.yangPinMingCheng != '' && (typeValue == 3 || typeValue == 4)" @click="form.yangPinMingCheng = ''"></u-icon>
 			</view>
 			<view class="cu-form-group">
 				<view class="title">样品编号:</view>
-				<textarea maxlength="-1" v-model="form.yangPinBianHao" placeholder="请输入样品编号" auto-height="true" :disabled="id && id != '' ? true: false"></textarea>
+				<textarea maxlength="-1" v-model="form.yangPinBianHao" placeholder="请输入样品编号" auto-height="true" :disabled="typeValue != 3 && typeValue != 4 ? true: false"></textarea>
 				<!-- <input placeholder="请输入样品编号" v-model="form.yangPinBianHao" name="input"
 					:disabled="id && id != '' ? true: false"></input> -->
-				<u-icon class="uni-icon" name="close-circle-fill" color="rgb(192, 196, 204)" size="42" v-if="form.yangPinBianHao != '' && id == ''" @click="form.yangPinBianHao = '' && id == ''"></u-icon>
+				<u-icon class="uni-icon" name="close-circle-fill" color="rgb(192, 196, 204)" size="42" v-if="form.yangPinBianHao != '' && (typeValue == 3 || typeValue == 4)" @click="form.yangPinBianHao = '' && id == ''"></u-icon>
 			</view>
 			<view class="cu-form-group">
 				<view class="title">样品类型:</view>
-				<textarea maxlength="-1" v-model="form.yangPinLeiXing" placeholder="请输入样品类型" auto-height="true" :disabled="id && id != '' ? true: false"></textarea>
-				<u-icon class="uni-icon" name="close-circle-fill" color="rgb(192, 196, 204)" size="42" v-if="form.yangPinLeiXing != '' && id == ''" @click="form.yangPinLeiXing = ''"></u-icon>
+				<textarea maxlength="-1" v-model="form.yangPinLeiXing" placeholder="请输入样品类型" auto-height="true" :disabled="typeValue != 3 && typeValue != 4 ? true: false"></textarea>
+				<u-icon class="uni-icon" name="close-circle-fill" color="rgb(192, 196, 204)" size="42" v-if="form.yangPinLeiXing != '' && (typeValue == 3 || typeValue == 4)" @click="form.yangPinLeiXing = ''"></u-icon>
 			</view>
 			<view class="cu-form-group">
 				<view class="title">报告编号:</view>
-				<textarea maxlength="-1" v-model="form.baoGaoBianHao" placeholder="请输入报告编号" auto-height="true" :disabled="id && id != '' ? true: false"></textarea>
-				<u-icon class="uni-icon" name="close-circle-fill" color="rgb(192, 196, 204)" size="42" v-if="form.baoGaoBianHao != '' && id == ''" @click="form.baoGaoBianHao = ''"></u-icon>
+				<textarea maxlength="-1" v-model="form.baoGaoBianHao" placeholder="请输入报告编号" auto-height="true" :disabled="typeValue != 3 && typeValue != 4 ? true: false"></textarea>
+				<u-icon class="uni-icon" name="close-circle-fill" color="rgb(192, 196, 204)" size="42" v-if="form.baoGaoBianHao != '' && (typeValue == 3 || typeValue == 4)" @click="form.baoGaoBianHao = ''"></u-icon>
 			</view>
 			<view class="cu-form-group">
-				<view class="title">沟通类型:</view>
+				<view class="title">
+					<text style="color: red;">*</text>
+					沟通类型:
+				</view>
 				<input placeholder="请选择沟通类型" v-model="form.gouTongLeiXing" name="input" disabled></input>
-				<u-button type="success" size="mini" @click="sheetShow = true" v-if="id == ''">选择</u-button>
+				<u-button type="success" size="mini" @click="sheetShow = true" v-if="(typeValue == 3 || typeValue == 4)">选择</u-button>
 			</view>
 			<uni-section title="沟通内容" type="line" padding>
-				<textarea maxlength="-1" v-model="form.gouTongNeiRong" placeholder="意见和建议" :disabled="id && id != '' ? true: false"></textarea>
+				<textarea maxlength="-1" auto-height v-model="form.gouTongNeiRong" placeholder="意见和建议" :disabled="typeValue != 3 && typeValue != 4 ? true: false"></textarea>
 			</uni-section>
+			<!-- <uni-section title="上传附件" type="line">
+				<lin-upload :fileList="fuJianShangChuanArray" @chooseClick="select"></lin-upload>
+			</uni-section> -->
 			<uni-section title="上传附件" type="line">
-				<view class="example-body" v-if="id == ''">
-					<uni-file-picker limit="5" file-mediatype="all" @select="select" @progress="progress" @success="success" @fail="fail" @delete="deleteMe" :auto-upload="false" ref="uploadMe">
-					</uni-file-picker>
-				</view>
-				<view v-else>
-					<view v-for="(item,index) in fuJianShangChuanArray" :key="index" style="margin: 0 10rpx;">
-						<view style="line-height: 50rpx;" @click="uploadClick(item.id,item.fileName,item.ext)">{{item.fileName + '.' + item.ext}}</view>
+				<view style="padding: 10rpx;">
+					<view class="example-body" v-if="(typeValue == 3 || typeValue == 4)">
+						<uni-file-picker res="files" :listShow="false" limit="5" file-mediatype="all" @select="select" @progress="progress" @success="success" @fail="fail" @delete="deleteMe" :auto-upload="false" ref="uploadMe">
+						</uni-file-picker>
+					</view>
+					<view>
+						<view v-for="(item,index) in fuJianShangChuanArray" :key="index" style="margin: 0 10rpx;">
+							<view class="fileBox">
+								<view @click="uploadClick(item.id,item.name)">
+									<u-icon size="30" name="file-text-fill"></u-icon>
+									{{item.name}}
+								</view>
+								<view style="width: 50rpx;" @click="deleteMe(item.id)" v-if="(typeValue == 3 || typeValue == 4)">
+									<u-icon size="26" name="close"></u-icon>
+								</view>
+							</view>
+						</view>
 					</view>
 				</view>
 			</uni-section>
-			<uni-section title="签名" type="line" padding>
+			<uni-section title="沟通签名" type="line" padding v-if="form.leiXing == '1'">
 				<view style="width: 100%;">
 					<view style="text-align: right;width: 100%;" v-if="typeValue != '1'">
 						<view>
@@ -84,24 +112,53 @@
 						</view>
 					</view>
 					<view style="width: 100%;margin-top: 10rpx;" v-if="form.keHu != ''">
-						<image :src="form.keHu" style="width: 100%;height: 500rpx;border: 1px #eee solid;">
+						<image :src="form.keHu" style="width: 100%;height: 300rpx;border: 1px #eee solid;">
 						</image>
 					</view>
 				</view>
 			</uni-section>
-
-			<uni-section title="沟通内容确定" type="line" padding v-if="id != '' && form.leiXing != '2'">
-				<textarea maxlength="-1" v-model="form.gouTongQueDingNei" placeholder="意见和建议" :disabled="true"></textarea>
-			</uni-section>
 			<u-row v-if="typeValue == 1">
 				<u-col span="6">
 					<uni-section title="沟通人" type="line" padding>
 						<view style="height: 40rpx">{{bianZhiRenName}}</view>
 					</uni-section>
 				</u-col>
+				<u-col span="6">
+					<uni-section title="沟通时间" type="line" padding>
+						<view style="height: 40rpx;">{{form.bianZhiShiJian}}</view>
+					</uni-section>
+				</u-col>
+			</u-row>
+
+			<uni-section title="沟通内容确定" type="line" padding v-if="typeValue != 3 && typeValue != 4 && form.leiXing != '2'">
+				<textarea maxlength="-1" auto-height v-model="form.gouTongQueDingNei" placeholder="意见和建议" :disabled="true"></textarea>
+			</uni-section>
+
+			<uni-section title="确定签名" type="line" padding v-if="form.leiXing == '2'">
+				<view style="width: 100%;">
+					<view style="text-align: right;width: 100%;" v-if="typeValue != '1'">
+						<view>
+							<u-button type="primary" size="mini" @click="qianming()" class="btn-back-color">
+								签名</u-button>
+							<u-button type="error" size="mini" @click="deqianming()" style="margin-left: 15rpx;" v-if="form.keHu != ''">
+								取消</u-button>
+						</view>
+					</view>
+					<view style="width: 100%;margin-top: 10rpx;" v-if="form.keHu != ''">
+						<image :src="form.keHu" style="width: 100%;height: 300rpx;border: 1px #eee solid;">
+						</image>
+					</view>
+				</view>
+			</uni-section>
+			<u-row v-if="typeValue == 1">
 				<u-col span="6">
 					<uni-section title="确定人" type="line" padding>
-						<view style="height: 40rpx;">{{queDingRenName}}</view>
+						<view style="height: 40rpx">{{queDingRenName}}</view>
+					</uni-section>
+				</u-col>
+				<u-col span="6">
+					<uni-section title="确定时间" type="line" padding>
+						<view style="height: 40rpx;">{{form.gouTongRiQi}}</view>
 					</uni-section>
 				</u-col>
 			</u-row>
@@ -112,7 +169,11 @@
 				</u-button>
 			</view>
 			<view class="padding flex flex-direction" v-if="typeValue == '2'">
-				<u-button type="success" class="btn btn-back-color" @click="onAgree">同意
+				<u-button type="success" class="btn btn-back-color" @click="onAgree('1','同意','确定')">同意
+				</u-button>
+			</view>
+			<view class="padding flex flex-direction" v-if="typeValue == '4'">
+				<u-button type="success" class="btn btn-back-color" @click="onAgree('已编制','重新提交','提交')">修改
 				</u-button>
 			</view>
 		</view>
@@ -128,6 +189,11 @@
 		</u-popup>
 
 		<lin-popup ref="picker" :title="'委托单选择'" :list="weiTuoList" @onConfirm="onConfirm"></lin-popup>
+		<u-modal v-model="backShow" :show-cancel-button="true" :show-confirm-button="false" title="退回提示" @cancel="cancel">
+			<view class="u-update-content">
+				<rich-text :nodes="content"></rich-text>
+			</view>
+		</u-modal>
 	</view>
 </template>
 
@@ -139,9 +205,11 @@
 	} from "@/common/util/constants" // 拉取登录token,userName,userInfo
 	import http from '@/common/service/http.js'
 	import autograph from '@/components/autograph/autograph'
+	import linUpload from '@/components/lin-upload/lin-upload.vue'
 	export default {
 		components: {
-			autograph
+			autograph,
+			linUpload
 		},
 		data() {
 			return {
@@ -186,7 +254,10 @@
 
 				weiTuoList: [],
 				bianZhiRenName: '',
-				queDingRenName: ''
+				queDingRenName: '',
+				backShow: false,
+				option: '',
+				content: ''
 			}
 		},
 		onLoad(options) {
@@ -197,7 +268,7 @@
 			} else {
 				this.getGtbh()
 			}
-			if (options.id) {
+			if (options.typeValue) {
 				this.typeValue = options.typeValue
 			}
 		},
@@ -242,22 +313,21 @@
 						},
 						success: (uploadFileRes) => {
 							let data = JSON.parse(uploadFileRes.data)
-							that.fuJianShangChuanArray.push({
-								fileid: file.tempFiles[e].file.uuid,
-								uploadid: data.data.id
-							})
+							let obj = {
+								id: data.data.id,
+								name: data.data.fileName + '.' + data.data.ext,
+								ext: data.data.ext,
+								uuid: file.tempFiles[e].file.uuid
+							}
+							this.fuJianShangChuanArray.push(obj)
 							uni.hideLoading()
 						}
 					});
 				}
 			},
 			// 删除
-			deleteMe(file) {
-				for (let e in this.fuJianShangChuanArray) {
-					if (this.fuJianShangChuanArray[e].fileid == file.tempFile.uuid) {
-						this.fuJianShangChuanArray.splice(e, 1)
-					}
-				}
+			deleteMe(id) {
+				this.fuJianShangChuanArray = this.fuJianShangChuanArray.filter(item => item.id !== id)
 			},
 			// 获取上传进度
 			progress(e) {},
@@ -316,7 +386,7 @@
 			getDe(id) {
 				uni.showLoading({
 					mask: true,
-					title: 'loading'
+					title: '加载中'
 				});
 				let sql =
 					`select * from t_khgtjlb where id_ = ${id}`
@@ -342,12 +412,15 @@
 							gouTongNeiRong: data.gou_tong_nei_rong,
 							keHu: data.ke_hu_,
 							gouTongQueDingNei: data.gou_tong_que_ding,
-							leiXing: data.lei_xing_
+							leiXing: data.lei_xing_,
+							bianZhiShiJian: data.bian_zhi_shi_jian,
+							gouTongRiQi: data.gou_tong_ri_qi_
 						}
 						if (data.fu_jian_ && data.fu_jian_ != '') {
 							this.getFileList(data.fu_jian_)
 						}
-						if (data.lei_xing_ == '2' && data.shi_fou_guo_shen_ == '已编制') {
+						//data.lei_xing_ == '2' && data.shi_fou_guo_shen_ == '已编制'
+						if (this.typeValue == '2' || this.typeValue == '4') {
 							this.getTaskId(data.id_)
 						}
 
@@ -373,15 +446,17 @@
 				this.$http.post("/ibps/platform/v3/file/attachment/transfer", params).then(res => {
 					if (res.data.state == 200) {
 						const data = res.data.data
+						let list = []
 						lists.forEach(item => {
 							let obj = {
 								id: item,
-								fileName: data[item].fileName,
-								ext: data[item].ext
+								name: data[item].fileName + '.' + data[item].ext,
+								ext: data[item].ext,
+								uuid: item
 							}
-							this.fuJianShangChuanArray.push(obj)
+							list.push(obj)
 						})
-
+						this.fuJianShangChuanArray = JSON.parse(JSON.stringify(list))
 					}
 				})
 			},
@@ -390,6 +465,31 @@
 					title: '加载中',
 					mask: true
 				})
+				let suList = ['keHuLianXiRen', 'lianXiDianHua']
+				let suListName = ['客户联系人', '联系电话']
+				for (let item in suList) {
+					if (!this.form[suList[item]]) {
+						uni.showToast({
+							title: '请输入' + suListName[item],
+							icon: 'none',
+							duration: 2000
+						})
+						return
+					}
+				}
+
+				let selList = ['weiTuoDanHao', 'gouTongLeiXing']
+				let selListName = ['委托单号', '沟通类型']
+				for (let item in suList) {
+					if (!this.form[selList[item]]) {
+						uni.showToast({
+							title: '请选择' + selListName[item],
+							icon: 'none',
+							duration: 2000
+						})
+						return
+					}
+				}
 				let tmpArray = []
 				for (let e in this.fuJianShangChuanArray) {
 					tmpArray.push(this.fuJianShangChuanArray[e].uploadid)
@@ -432,7 +532,7 @@
 
 				});
 			},
-			onAgree() {
+			onAgree(shiFouGuoShen, opinion, type) {
 				uni.showLoading({
 					title: '加载中',
 					mask: true
@@ -443,19 +543,19 @@
 				this.form.gouTongRenYuan = useId
 				this.form.gouTongRiQi = this.$methCommon.time(10)
 				this.form.gouTongBuMen = detpId
-				this.form.shiFouGuoShen = "1"
+				this.form.shiFouGuoShen = shiFouGuoShen
 				let editData = {
 					data: JSON.stringify(this.form),
-					opinion: '同意',
+					opinion: opinion,
 					taskId: this.taskId
 				}
 				this.$http.post("/ibps/business/v3/bpm/task/agree", editData).then(res => {
 					if (res.data.state == 200) {
-						this.$methCommon.getPrompt('同意成功!')
+						this.$methCommon.getPrompt(type + '成功!')
 						uni.hideLoading();
 						this.getPageA()
 					} else {
-						this.$methCommon.getPrompt('同意异常!', 'fail')
+						this.$methCommon.getPrompt(type + '异常!', 'fail')
 						uni.hideLoading()
 					}
 				});
@@ -463,8 +563,14 @@
 			},
 			//根据委托单id查询 taskId
 			getTaskId(id) {
-				let sql =
-					`select TASK_ID_ from ibps_bpm_tasks where NAME_ = '确认' and NODE_ID_ = 'Activity_1vrp3i4' and PROC_DEF_KEY_ = 'Process_183pepd' and EXEC_ID_ = (select PROC_INST_ID_ from act_ru_execution where ACT_ID_ = 'Activity_1vrp3i4' and BUSINESS_KEY_ = '${id}') ORDER BY CREATE_TIME_ desc`
+				let sql = ``
+				if (this.typeValue == '2') {
+					sql =
+						`select TASK_ID_,PROC_INST_ID_ from ibps_bpm_tasks where NAME_ = '确认' and NODE_ID_ = 'Activity_1vrp3i4' and PROC_DEF_KEY_ = 'Process_183pepd' and EXEC_ID_ = (select PROC_INST_ID_ from act_ru_execution where ACT_ID_ = 'Activity_1vrp3i4' and BUSINESS_KEY_ = '${id}') ORDER BY CREATE_TIME_ desc`
+				} else if (this.typeValue == '4') {
+					sql =
+						`select TASK_ID_,PROC_INST_ID_ from ibps_bpm_tasks where NAME_ = '沟通' and NODE_ID_ = 'Activity_0qy1dd7' and PROC_DEF_KEY_ = 'Process_0pjp1fy' and EXEC_ID_ = (select PROC_INST_ID_ from act_ru_execution where ACT_ID_ = 'Activity_0qy1dd7' and BUSINESS_KEY_ = '${id}') ORDER BY CREATE_TIME_ desc`
+				}
 
 				let requestData = this.$sig(sql)
 
@@ -472,6 +578,20 @@
 					if (res.data.state == 200) {
 						let result = res.data.variables.data[0]
 						this.taskId = result.TASK_ID_
+
+						this.getProcInstId(result.PROC_INST_ID_)
+					}
+				})
+			},
+			//根据委托单id查询 taskId
+			getProcInstId(id) {
+				let sql =
+					`select OPTION_ from ibps_bpm_oper_log where PROC_INST_ID_ = '${id}'   order by create_time_ desc  limit 1`
+				let requestData = this.$sig(sql)
+				this.$http.post("/ibps/business/v3/sys/universal/inputSqlSelectData", requestData).then(res => {
+					if (res.data.state == 200) {
+						let result = res.data.variables.data[0]
+						this.option = result.OPTION_
 					}
 				})
 			},
@@ -593,7 +713,7 @@
 					dalta: 1
 				})
 			},
-			uploadClick(id, item, type) {
+			uploadClick(id, item) {
 				uni.showLoading({
 					title: '下载中',
 					mask: true
@@ -613,7 +733,7 @@
 					const link = document.createElement('a')
 					link.style.display = 'none'
 					link.href = url
-					link.setAttribute('download', item + '.' + type)
+					link.setAttribute('download', item)
 					document.body.appendChild(link)
 					link.click()
 					window.URL.revokeObjectURL(link.href)
@@ -630,7 +750,15 @@
 						callback(datas[0])
 					}
 				})
-			}
+			},
+			//退回原因
+			getBack() {
+				this.content = this.option
+				this.backShow = true
+			},
+			cancel() {
+				this.backShow = false
+			},
 		}
 	}
 </script>
@@ -643,4 +771,23 @@
 	.btn {
 		margin: 15rpx;
 	}
+
+	.fileBox {
+		line-height: 50rpx;
+		color: #888888;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		border: 1rpx solid #DDDDDD;
+		border-radius: 8rpx;
+		padding: 5rpx;
+		margin-top: 10rpx;
+	}
+
+	.u-update-content {
+		font-size: 26rpx;
+		color: $u-content-color;
+		line-height: 1.7;
+		padding: 30rpx;
+	}
 </style>

+ 8 - 2
pages/communication/communicationList.vue

@@ -38,10 +38,16 @@
 					</view>
 					<view class="sectionBox">
 						<view class="left">状态:</view>
-						<view style="color: #7349ff;">{{item.shi_fou_guo_shen_ == '1' ? '已完成' : item.shi_fou_guo_shen_}} </view>
+						<view style="color: #7349ff;" v-if="item.shi_fou_guo_shen_ == '1'">已完成</view>
+						<view style="color: red;" v-else-if="item.shi_fou_guo_shen_ == '已退回'">已退回</view>
+						<view v-else>
+							{{item.shi_fou_guo_shen_}}
+						</view>
 					</view>
 					<view style=" width: 100%; text-align: right; padding-top: 5rpx;padding-bottom: 0rpx;">
 						<u-button type="warning" size="mini" @click="getGo(item.id_,'2')" class="u-m-r-15" v-if="item.lei_xing_ == '2' && item.shi_fou_guo_shen_ == '已编制'">签名</u-button>
+						<u-button type="success" size="mini" class="u-m-r-15" @click="getGo(item.id_,'4')" v-if="item.shi_fou_guo_shen_ == '已退回'">修改
+						</u-button>
 						<u-button type="warning" size="mini" class="btn-back-color" @click="getGo(item.id_,'1')">查阅
 						</u-button>
 					</view>
@@ -107,7 +113,7 @@
 			getData(keyword) {
 				uni.showLoading({
 					mask: true,
-					title: 'loading'
+					title: '加载中'
 				});
 
 				let info = uni.getStorageSync(USER_INFO);

+ 6 - 0
pages/jiance/jindu.vue

@@ -174,7 +174,13 @@
 							this.current++
 						}
 						uni.hideLoading()
+					} else {
+						this.$methCommon.getPrompt('服务器异常', 'error')
+						uni.hideLoading()
 					}
+				}).catch(error => {
+					this.$methCommon.getPrompt('服务器异常', 'error')
+					uni.hideLoading()
 				})
 			},
 			/**

+ 6 - 0
pages/jiance/list.vue

@@ -166,7 +166,13 @@
 							this.current++
 						}
 						uni.hideLoading()
+					} else {
+						this.$methCommon.getPrompt('服务器异常', 'error')
+						uni.hideLoading()
 					}
+				}).catch(error => {
+					this.$methCommon.getPrompt('服务器异常', 'error')
+					uni.hideLoading()
 				})
 			},
 			/**

+ 131 - 55
pages/jiance/order.vue

@@ -24,9 +24,9 @@
 						<text v-else>{{getButtChange(form.baoGaoBianZhiYuan,userList)}}</text>
 					</u-form-item>
 					<u-form-item label="合同选择" prop="heTongId" required>
-						<uni-data-select placeholder="请选择合同选择" v-model="form.heTongId" :localdata="hetong" @change="hetongChange" v-if="type != 'detail'">
+						<uni-data-select placeholder="请选择合同选择" v-model="form.heTongId" :localdata="hetongList" @change="hetongChange" v-if="type != 'detail'">
 						</uni-data-select>
-						<text v-else>{{getButtChange(form.heTongId,hetong)}}</text>
+						<text v-else>{{getButtChange(form.heTongId,hetongList)}}</text>
 					</u-form-item>
 					<u-form-item label="委托来源">
 						<u-input placeholder="请输入委托来源" v-model="form.weiTuoDanLaiYuan" disabled />
@@ -38,7 +38,7 @@
 						<u-input placeholder="请输入委托单位" v-model="form.weiTuoDanWei" disabled />
 					</u-form-item>
 					<u-form-item label="送检单位" prop="songJianDanWei" required>
-						<u-input placeholder="请输入送检单位" v-model="form.songJianDanWei" />
+						<u-input placeholder="请输入送检单位" v-model="form.songJianDanWei" :disabled="type == 'detail' ? true : false" />
 					</u-form-item>
 				</uni-group>
 
@@ -63,6 +63,14 @@
 						</u-radio-group>
 						<text v-else>{{getButtChange(form.chuJuBaoGaoYaoQiu,reportRequireList)}}</text>
 					</u-form-item>
+					<u-form-item label="报告发放方式" prop="chuBaoGaoShiJian">
+						<u-radio-group v-model="form.chuBaoGaoShiJian" v-if="type != 'detail'" @change="getMultiple()">
+							<u-radio v-for="(item, index) in chuBaoGaoShiJianList" :key="index" :name="item.name">
+								{{item.name}}
+							</u-radio>
+						</u-radio-group>
+						<text v-else>{{form.chuBaoGaoShiJian}}</text>
+					</u-form-item>
 					<u-form-item label="样品是否带有传染性疾病" prop="name">
 						<u-radio-group v-model="form.biaoQianTuPianJudge" v-if="type != 'detail'" @change="getMultiple()">
 							<u-radio v-for="(item, index) in judgeList" :key="index" :name="item.name">
@@ -142,28 +150,66 @@
 				</uni-group>
 			</view>
 
-			<view style="height: 100rpx;" v-if="buttonFlagNum !== '0'"></view>
+			<view style="height: 100rpx;"></view>
 		</u-form>
-		<view class="bottomBtn" v-if="buttonFlagNum !== '0'">
-			<u-row v-if="buttonFlagNum === '1'">
-				<u-button type="error" @click="onSubmit(3)" style="width: 100%;margin: 20rpx;">提交
-				</u-button>
-			</u-row>
 
-			<u-row v-else>
-				<u-col span="6">
+		<view class="bottomBtn" v-if="buttonFlagNum == '3' || buttonFlagNum == ''">
+			<u-row>
+				<u-col :span="activeNum != 1 ? 4 : 6" v-if="activeNum != 1">
+					<u-button type="warning" class="btn" @click="lastStep">
+						上一步
+					</u-button>
+				</u-col>
+				<u-col :span="activeNum == 1  ? 6 : 4">
 					<u-button type="success" @click="onSubmit(1)" class="btn green-back-color" style="margin-bottom: 15rpx;" v-if="type != 'detail'">
 						暂存
 					</u-button>
 				</u-col>
-				<u-col span="6">
+				<u-col :span="4" v-if="activeNum == 3">
 					<u-button type="success" class="btn btn-back-color" @click="onSubmit(2)" v-if="type != 'detail'">提交
 					</u-button>
 				</u-col>
+				<u-col :span="activeNum == 1 ? 6 : 4" v-if="activeNum != 3">
+					<u-button type="warning" @click="nextStep" class="btn btn-green-color"> 下一步 </u-button>
+				</u-col>
+			</u-row>
+		</view>
+
+		<view class="bottomBtn" v-else-if="buttonFlagNum == '1'">
+			<u-row>
+				<u-col :span="activeNum == 1 ? 12 : 6" v-if="activeNum != 1">
+					<u-button type="warning" @click="lastStep" class="btn">
+						上一步
+					</u-button>
+				</u-col>
+				<u-col :span="activeNum == 3 ? 6 :12" v-if="activeNum == 3">
+					<u-button type="error" @click="onSubmit(3)">提交
+					</u-button>
+				</u-col>
+				<u-col :span="activeNum == 1 ?12 : 6" v-if="activeNum != 3">
+					<u-button type="warning" @click="nextStep" class="btn btn-green-color">下一步
+					</u-button>
+				</u-col>
+			</u-row>
+		</view>
+
+		<view class="bottomBtn" v-else-if="buttonFlagNum == '0'">
+			<u-row>
+				<u-col :span="activeNum == 2 ? 6 : 12" v-if="activeNum != 1">
+					<u-button type="warning" @click="lastStep" class="btn">
+						上一步
+					</u-button>
+				</u-col>
+				<u-col :span="activeNum == 2 ? 6 : 12" v-if="activeNum != 3">
+					<u-button type="warning" @click="nextStep" class="btn btn-green-color">下一步
+					</u-button>
+				</u-col>
 			</u-row>
 		</view>
 
-		<u-back-top :scroll-top="scrollTop" :icon-style="iconStyle" bottom="400"></u-back-top>
+
+
+		<u-back-top :scroll-top="scrollTop" :icon-style="iconStyle" bottom="400" top="100"></u-back-top>
 
 		<u-calendar v-model="dateShow" :mode="mode" max-date="2050-01-01" @change="dateChange"></u-calendar>
 		<u-action-sheet :list="list" v-model="sheetShow" @click="actionSheetCallback"></u-action-sheet>
@@ -244,8 +290,8 @@
 					fuKuanFangShi: '',
 					baoGaoLeiXing: '简易',
 					chuJuBaoGaoYaoQiu: '常规',
-					chuBaoGaoShiJian: '',
-					yangBenChuLi: '',
+					chuBaoGaoShiJian: "电子报告",
+					yangBenChuLi: '按照检测方样本管理规程处理',
 					weiTuoFangMingChe: '',
 					weiTuoFangLianXiR: '',
 					weiTuoFangLianXiD: '',
@@ -255,7 +301,7 @@
 					zhanShiBiaoId: this.generateUUID(),
 					biaoQianTuPianJudge: '否',
 					biaoQianTuPian: '',
-					kaiPiaoZhuangTai: '未开票'
+					kaiPiaoZhuangTai: '未开票',
 				},
 				rules: {
 					heTongId: [{
@@ -320,6 +366,7 @@
 				specificationList: order.specification,
 				//样品处理
 				dispositionList: order.disposition,
+				chuBaoGaoShiJianList: order.chuBaoGaoShiJianList,
 				//性别
 				sexList: order.sex,
 				//是否判断
@@ -373,14 +420,17 @@
 				option: '',
 
 				userList: [],
-				administrator: false
+				administrator: false,
+				orgid: '',
+
+				temporaryForm: null
 			}
 		},
 		onLoad(options) {
 			//获取账号id
 			let info = uni.getStorageSync(USER_INFO)
-			if (info.employee.id) {
-				this.userid = info.employee.id || ''
+			if (info.user.id) {
+				this.userid = info.user.id || ''
 			}
 
 			if (options.baoGaoBianZhi) {
@@ -437,6 +487,23 @@
 			this.scrollTop = e.scrollTop;
 		},
 		methods: {
+			//上一步
+			lastStep() {
+				let index = JSON.parse(JSON.stringify(this.activeNum))
+				this.$refs.top.activeNum = index - 1
+				this.activeNum = index - 1
+			},
+			//下一步
+			nextStep() {
+				let index = JSON.parse(JSON.stringify(this.activeNum))
+				if (index == '1') {
+					if (!service.getActiveNum1(this.form)) {
+						return
+					}
+				}
+				this.$refs.top.activeNum = index + 1
+				this.activeNum = index + 1
+			},
 			//超级用户 获取全部客户信息
 			getAdministrator() {
 				let sql =
@@ -509,10 +576,13 @@
 					if (res.data.state == 200) {
 						const data = res.data.variables.data[0]
 						const result = JSON.parse(data.bao_cun_nei_rong_)
-
 						this.form = result
 						this.jianCeTypeList = result.jianCeTypeList
 						this.total = result.originalTotal
+						this.hetongList = result.hetongList
+						this.taoCanShow = result.taoCanShow
+						this.taoCanList = result.taoCanList
+						this.jianCeList = result.jianCeList
 						this.getBeingTimeCount(result.weiTuoBianHao)
 						this.getJiance(result.heTongId, '')
 						uni.hideLoading()
@@ -687,16 +757,11 @@
 						let result = res.data.variables.data
 						if (result.length > 0) {
 							this.heTongShow = false
-							this.hetongList = result
-							let list = []
 							result.forEach((item, index) => {
-								let obj = {
-									text: item.he_tong_bian_hao_,
-									value: item.id_
-								}
-								list.push(obj);
+								this.$set(item, 'text', item.he_tong_bian_hao_)
+								this.$set(item, 'value', item.id_)
 							})
-							this.hetong = list
+							this.hetongList = result
 						} else {
 							this.heTongShow = true
 							uni.showToast({
@@ -956,6 +1021,7 @@
 						return
 					}
 					if (this.form.weiTuoFangQueRen == '') {
+						this.qianming(0)
 						meth.getPrompt("请委托人签名")
 						return
 					}
@@ -1002,6 +1068,20 @@
 				}
 
 				this.form.lhypb.forEach((item, index) => {
+					item.weiTuoDanHao = this.form.weiTuoBianHao
+					item.weiTuoDanWei = this.form.weiTuoDanWei
+					item.lianXiRen = this.form.weiTuoFangLianXiR
+					item.lianXiDianHua = this.form.weiTuoFangLianXiD
+					item.heTongBianHao = this.form.heTongId
+					item.jiaoFeiFangShi = this.form.fuKuanFangShi
+					item.fuKuanZhuangTai = '未结清'
+					item.heTongLeiXing = this.form.weiTuoHeTong
+					item.weiTuoRiQi = this.form.weiTuoRiQi
+					item.songJianDanWei = this.form.songJianDanWei
+					item.bianZhiRen = this.userid
+					item.bianZhiShiJian = meth.time(10)
+					item.bianZhiBuMen = this.orgId
+					item.chuBaoGaoYaoQiu = this.form.chuJuBaoGaoYaoQiu
 					if (this.buttonFlagNum === '3') {
 						item.id = ''
 						item.parentId = ''
@@ -1016,21 +1096,6 @@
 					let list8 = []
 					let list9 = []
 					item.jianCeXiangMu2 = []
-					item.weiTuoDanHao = this.form.weiTuoBianHao
-					item.weiTuoDanWei = this.form.weiTuoDanWei
-					item.lianXiRen = this.form.weiTuoFangLianXiR
-					item.lianXiDianHua = this.form.weiTuoFangLianXiD
-
-					item.heTongBianHao = this.form.heTongId
-					item.jiaoFeiFangShi = this.form.fuKuanFangShi
-					item.fuKuanZhuangTai = '未结清'
-					item.heTongLeiXing = this.form.weiTuoHeTong
-					item.weiTuoRiQi = this.form.weiTuoRiQi
-					item.songJianDanWei = this.form.songJianDanWei
-					item.bianZhiRen = this.userid
-
-					item.chuBaoGaoYaoQiu = this.form.chuJuBaoGaoYaoQiu
-
 					item.jianCeList.forEach((it, x) => {
 						if (it.checked) {
 							item.jianCeXiangMu2.push(it.id_)
@@ -1053,12 +1118,7 @@
 					item.changGuiXiangMuMi = list7.join(",")
 					item.changGuiZheHouJia = list9.join(",")
 
-					item.yangPinZongShu = parseFloat(item.shuLiangSi || 0) + parseFloat(item.shuLiangSan || 0) +
-						parseFloat(
-							item.shuLiangEr || 0) + parseFloat(item.shuLiang || 0)
-
-
-
+					item.yangPinZongShu = parseFloat(item.shuLiangSi || 0) + parseFloat(item.shuLiangSan || 0) + parseFloat(item.shuLiangEr || 0) + parseFloat(item.shuLiang || 0)
 					item.taoCanList.forEach(it => {
 						if (it.checked) {
 							list1.push(it.id_)
@@ -1129,8 +1189,12 @@
 
 				//委托暂存判断
 				if (valueType == 1) {
+					this.form.taoCanShow = this.taoCanShow
 					this.form.jianCeTypeList = this.jianCeTypeList
 					this.form.originalTotal = this.total
+					this.form.hetongList = this.hetongList
+					this.form.taoCanList = this.taoCanList
+					this.form.jianCeList = this.jianCeList
 					this.getBeingSave(this.form)
 					return
 				}
@@ -1145,10 +1209,19 @@
 						taskId: this.taskId
 					}
 				}
-				//end
 
+				this.temporaryForm = JSON.parse(JSON.stringify(this.form))
+				// if (valueType != 1) {
+				// 	this.form.lhypb.forEach(item => {
+				// 		delete item.jianCeList
+				// 		delete item.taoCanXiangMuList
+				// 	})
+				// }
+				//end
 				para.parameters[2].value = JSON.stringify(this.form)
 
+
+
 				//数据添加到展示表上
 				var lhwt = []
 				if (valueType == 2 || valueType == 3) {
@@ -1207,12 +1280,13 @@
 				this.$http.post("ibps/business/v3/bpm/instance/start", data).then(res => {
 					if (res.data.state == 200) {
 						this.$tip.success('提交成功!')
-						// this.getLiuHen()
+						this.getLiuHen()
 						uni.hideLoading();
 						this.$Router.replaceAll({
 							name: 'index'
 						})
 					} else {
+						this.form = JSON.parse(JSON.stringify(this.temporaryForm))
 						meth.getPrompt('提交异常!', 'error')
 						uni.hideLoading()
 					}
@@ -1237,12 +1311,13 @@
 				this.$http.post("/ibps/business/v3/bpm/task/agree", data).then(res => {
 					if (res.data.state == 200) {
 						this.$tip.success('提交成功!')
-						// this.getLiuHen()
+						this.getLiuHen()
 						uni.hideLoading();
 						this.$Router.replaceAll({
 							name: 'index'
 						})
 					} else {
+						this.form = JSON.parse(JSON.stringify(this.temporaryForm))
 						meth.getPrompt('提交异常!', 'fail')
 						uni.hideLoading()
 					}
@@ -1252,7 +1327,6 @@
 			getLiuHen() {
 				this.form.taoCanShow = this.taoCanShow
 				this.form.hetongList = this.hetongList
-				this.form.hetong = this.hetong
 				this.form.taoCanList = this.taoCanList
 				this.form.jianCeTypeList = this.jianCeTypeList
 				this.form.jianCeList = this.jianCeList
@@ -1356,8 +1430,10 @@
 				this.getTotal()
 			},
 			deletSing(index) {
-				if (this.form.lhypb.length == index) {
-					this.lhypbIndex = this.form.lhypb.length - 1
+				if (index != 0) {
+					this.lhypbIndex = index - 1
+				} else {
+					this.lhypbIndex = 0
 				}
 				this.form.lhypb.splice(index, 1)
 				this.getTotal()

+ 4 - 4
pages/jiance/order/lhypbMessage.vue

@@ -196,7 +196,7 @@
 						<text v-else>{{form.shuLiang}}</text>
 					</u-form-item>
 					<u-form-item label="样品规格①" required>
-						<u-input placeholder="请输入样品规格①" v-model="form.yangPinGuiGe" :disabled="type == 'detail'?true :false" />
+						<u-input placeholder="请输入样品规格①(例:1ml/支*10ml离心管 请按照此格式进行填写)" v-model="form.yangPinGuiGe" :disabled="type == 'detail'?true :false" />
 						<u-button slot="right" type="success" class="btn-back-color" size="mini" @click="sheetClick('specification1','样品规格')" v-if="type != 'detail'">规格
 						</u-button>
 					</u-form-item>
@@ -228,7 +228,7 @@
 							<text v-else>{{form.shuLiangEr}}</text>
 						</u-form-item>
 						<u-form-item label="样品规格②" required>
-							<u-input placeholder="请输入样品规格②" v-model="form.yangPinGuiGeEr" :disabled="type == 'detail'?true :false" />
+							<u-input placeholder="请输入样品规格②(例:1ml/支*10ml离心管 请按照此格式进行填写)" v-model="form.yangPinGuiGeEr" :disabled="type == 'detail'?true :false" />
 							<u-button slot="right" type="success" class="btn-back-color" size="mini" @click="sheetClick('specification2','样品规格')" v-if="type != 'detail'">规格
 							</u-button>
 						</u-form-item>
@@ -261,7 +261,7 @@
 							<text v-else>{{form.shuLiangSan}}</text>
 						</u-form-item>
 						<u-form-item label="样品规格③" required>
-							<u-input placeholder="请输入样品规格③" v-model="form.yangPinGuiGeSan" :disabled="type == 'detail'?true :false" />
+							<u-input placeholder="请输入样品规格③(例:1ml/支*10ml离心管 请按照此格式进行填写)" v-model="form.yangPinGuiGeSan" :disabled="type == 'detail'?true :false" />
 							<u-button slot="right" type="success" class="btn-back-color" size="mini" @click="sheetClick('specification3','样品规格')" v-if="type != 'detail'">规格
 							</u-button>
 						</u-form-item>
@@ -285,7 +285,7 @@
 							</u-button>
 						</u-form-item>
 						<u-form-item label="样品运输条件④" required>
-							<u-input placeholder="请选择样品运输条件④" v-model="form.yangPinYunShuSi" :disabled="type == 'detail'?true :false" />
+							<u-input placeholder="请选择样品运输条件④(例:1ml/支*10ml离心管 请按照此格式进行填写)" v-model="form.yangPinYunShuSi" :disabled="type == 'detail'?true :false" />
 							<u-button type="success" slot="right" class="btn-back-color" size="mini" @click="sheetClick('transportType4')" v-if="type != 'detail'">选择
 							</u-button>
 						</u-form-item>

+ 5 - 1
pages/jiance/order/meth.js

@@ -190,6 +190,10 @@ export default {
 				taoCanZheHouJiaGe: item.tao_can_zhe_hou_j || '',
 				chuBaoGaoYaoQiu: item.chu_bao_gao_yao_q || '',
 				changGuiZheHouJia: item.chang_gui_zhe_hou || '',
+				bianZhiRen: item.bian_zhi_ren_,
+				bianZhiBuMen: item.bian_zhi_bu_men_,
+				bianZhiShiJian: item.bian_zhi_shi_jian,
+
 
 				jianCeTypeString: ''
 			}
@@ -234,7 +238,7 @@ export default {
 			xingBie: '',
 			nianLing: '',
 			songJianPiHao: '',
-			yangPinZhuangTai: '',
+			yangPinZhuangTai: '原液或半成品',
 			songJianShiJian: this.time(10),
 			beiZhu1: '',
 

+ 7 - 0
pages/jiance/order/test.json

@@ -4,6 +4,13 @@
 	}, {
 		"name": "常规"
 	}],
+	"chuBaoGaoShiJianList": [{
+		"name": "自取"
+	}, {
+		"name": "邮寄"
+	}, {
+		"name": "电子报告"
+	}],
 	"reportSource": [{
 		"name": "客户"
 	}, {

+ 35 - 8
pages/jiance/tousu.vue

@@ -10,24 +10,39 @@
 			<input v-model="form.guanLianKeHu" name="input" placeholder="请输入投诉单位" disabled>
 		</view>
 		<view class="cu-form-group" style="z-index: 999;">
-			<view class="title">投诉人</view>
+			<view class="title">
+				<span style="color: red;">*</span>
+				投诉人
+			</view>
 			<input v-model="form.Complainants" name="input" placeholder="请输入投诉人" :disabled="id != '' ? true : false">
 		</view>
 		<view class="cu-form-group" style="z-index: 999;">
-			<view class="title">电话</view>
+			<view class="title">
+				<span style="color: red;">*</span>
+				电话
+			</view>
 			<input v-model="form.telephone" name="input" placeholder="请输入电话" :disabled="id != '' ? true : false">
 		</view>
 
 		<view class="cu-form-group" style="z-index: 999;">
-			<view class="title">投诉日期</view>
+			<view class="title">
+				<span style="color: red;">*</span>
+				投诉日期
+			</view>
 			<input v-model="form.touSuRiQi" name="input" placeholder="请输入投诉日期" disabled @click="showClick">
 		</view>
 		<view class="cu-form-group" style="z-index: 999;">
-			<view class="title">邮箱</view>
+			<view class="title">
+				<span style="color: red;">*</span>
+				邮箱
+			</view>
 			<input v-model="form.postcode" name="input" placeholder="请输入邮箱" :disabled="id != '' ? true : false">
 		</view>
 		<view class="cu-form-group" style="z-index: 999;">
-			<view class="title">关联样品</view>
+			<view class="title">
+				<span style="color: red;">*</span>
+				关联样品
+			</view>
 			<input v-model="form.guanLianYangPin" name="input" placeholder="请选择关联样品" disabled v-if="form.guanLianYangPin == '' && id == ''">
 			<text style="width: 100%;" @click="getShow" v-else>{{getYangPin(form.guanLianYangPin)}}</text>
 			<u-button type="success" size="mini" @click="getShow" v-if="form.guanLianYangPin == '' && id == ''">选择
@@ -35,7 +50,10 @@
 			<u-icon class="uni-icon" name="close-circle-fill" color="rgb(192, 196, 204)" size="42" v-if="form.guanLianYangPin != '' && id == ''" @click="form.guanLianYangPin = ''"></u-icon>
 		</view>
 		<view class="cu-form-group" style="z-index: 999;">
-			<view class="title">投诉方式</view>
+			<view class="title">
+				<span style="color: red;">*</span>
+				投诉方式
+			</view>
 			<input v-model="form.complaintsWay" name="input" placeholder="请选择投诉方式">
 			<u-button type="success" size="mini" @click="selectShowClick" v-if="form.complaintsWay == '' && id == ''">选择
 			</u-button>
@@ -225,7 +243,8 @@
 					shouLiBuMen2: "",
 					qianMingRiQi: "",
 					shiFouGuoShen: '',
-					shouLiRiQi3: ''
+					shouLiRiQi3: '',
+					qiMingRen: ''
 				},
 				sexList: [{
 					text: "同意",
@@ -236,7 +255,8 @@
 				}],
 
 				yangPinList: [],
-				option: ''
+				option: '',
+				orgId: ''
 			}
 		},
 		filters: {
@@ -261,6 +281,7 @@
 			this.form.company = useId
 			this.form.postcode = info.user.email
 			this.form.touSuRiQi = time
+			this.orgId = info.org.id
 			this.getData()
 		},
 		methods: {
@@ -353,6 +374,7 @@
 						this.form.qianMingRiQi = data.qian_ming_ri_qi_
 						this.form.shouLiRiQi3 = data.shou_li_ri_qi_3_
 						this.form.guanLianYangPin = data.guan_lian_yang_pi
+						this.form.qiMingRen = data.qi_ming_ren_
 						if (data.fu_jian_shang_chu && data.fu_jian_shang_chu != '') {
 							this.getFileList(data.fu_jian_shang_chu)
 						}
@@ -454,6 +476,9 @@
 			// 上传失败
 			fail(e) {},
 			onSubmit() {
+				if (this.form.guanLianYangPin) {
+					return this.$methCommon.getPrompt('请选择样品')
+				}
 				let tmpArray = []
 				for (let e in this.fuJianShangChuanArray) {
 					tmpArray.push(this.fuJianShangChuanArray[e].uploadid)
@@ -513,6 +538,8 @@
 
 				this.form.qianMingRiQi = time
 				this.form.shiFouGuoShen = '1'
+				this.form.qianMingRen = useId
+				this.form.zhuangTai = "已完成"
 				let editData = {
 					data: JSON.stringify(this.form),
 					opinion: '',

+ 56 - 52
pages/tag/sampleTag.vue

@@ -5,50 +5,50 @@
 			<block slot="content">样品标签</block>
 		</cu-custom>
 
-		<view ref="qrcode" id="box">
+		<view ref="qrcode" id="box" class="tagBoss">
 			<view v-for="(item1,index1) in list" :key="index1">
 				<view v-for="(item2,index2) in parseInt(item1.num)" :key="index2">
-					<view class="tagBox">
-						<view class="lh">
-							<view>样品名称:</view>
-							<view>{{item1.name}}</view>
-						</view>
-						<view class="la">
+					<view class="All" style="font-family:sans-serif">
+						<view class="tagBox">
+							<view class="lh">
+								<view class="lhLeft">样品名称:</view>
+								<view>{{item1.name}}</view>
+							</view>
 							<view class="lh">
-								<view>样品编号:</view>
+								<view class="lhLeft">样品编号:</view>
 								<view>{{item1.serial}}</view>
 							</view>
-							<view class="lh" style="margin-left: 15rpx">
-								<view>收样时间:</view>
-								<view></view>
+							<view class="lh">
+								<view class="lhLeft">样品类型:</view>
+								<view>{{item1.type}}</view>
+							</view>
+							<view class="lh">
+								<view class="lhLeft">存储条件:</view>
+								<view>{{item1.condition}}</view>
+							</view>
+							<view class="lh">
+								<view class="lhLeft">样品数量:</view>
+								<view>{{index2+1}}/{{item1.num}}支</view>
+							</view>
+							<view class="lh">
+								<view class="lhLeft">收样时间:</view>
+								<view>{{item1.shou_yang_ri_qi_}}</view>
+							</view>
+							<view class="lh">
+								<view class="lhLeft">流转状态:</view>
+								<view>▢待检,▢已检,▢留样</view>
 							</view>
-						</view>
-						<view class="lh">
-							<view>样品类型:</view>
-							<view>{{item1.type}}</view>
-						</view>
-						<view class="lh">
-							<view>存储条件:</view>
-							<view>{{item1.condition}}</view>
-						</view>
 
-						<view class="lh">
-							<view>流转状态:</view>
-							<view>▢待检,▢已检,▢留样</view>
-						</view>
-						<view class="lh">
-							<view>样品数量:</view>
-							<view>{{index2+1}}/{{item1.num}}支</view>
-						</view>
-						<view>
-							<vue-barcode :value="item1.serial" :width="2" :height="40"></vue-barcode>
+							<view>
+								<vue-barcode :value="item1.serial" :width="1.5" :height="15" :margin="0" :displayValue="false"></vue-barcode>
+							</view>
 						</view>
 					</view>
 				</view>
 			</view>
 		</view>
 
-		<u-button type="primary" class="btn" @click="getAction()" style="margin: 20rpx;" v-if="imgSrc != ''">操作
+		<u-button type="primary" class="btn" @click="downloadImage()" style="margin: 20rpx;" v-if="imgSrc != ''">下载
 		</u-button>
 
 	</view>
@@ -97,7 +97,7 @@
 			},
 			getLook(id) {
 				let sql =
-					`select * from t_lhypb where id_ = '${id}' order by yang_pin_bian_hao asc`
+					`select a.*,b.shou_yang_ri_qi_ from t_lhypb a left join t_lhypdjb b on b.yang_ben_bian_hao = a.yang_pin_bian_hao where a.id_ = '${id}' order by a.yang_pin_bian_hao asc`
 				let requestData = this.$sig(sql)
 
 
@@ -112,7 +112,8 @@
 									serial: item.yang_pin_bian_hao,
 									type: item.yang_pin_lei_xing,
 									num: item.shu_liang_,
-									condition: item.yang_ben_yun_shu_
+									condition: item.yang_ben_yun_shu_,
+									shou_yang_ri_qi_: item.shou_yang_ri_qi_
 								}
 								list.push(obj)
 							}
@@ -122,7 +123,8 @@
 									serial: item.yang_pin_bian_hao,
 									type: item.yang_pin_lei_er_,
 									num: item.shu_liang_er_,
-									condition: item.yang_pin_yun_shu_
+									condition: item.yang_pin_yun_shu_,
+									shou_yang_ri_qi_: item.shou_yang_ri_qi_
 								}
 								list.push(obj)
 							}
@@ -132,7 +134,8 @@
 									serial: item.yang_pin_bian_hao,
 									type: item.yang_pin_lei_san_,
 									num: item.shu_liang_san_,
-									condition: item.yang_pin_yun_san
+									condition: item.yang_pin_yun_san,
+									shou_yang_ri_qi_: item.shou_yang_ri_qi_
 								}
 								list.push(obj)
 							}
@@ -142,7 +145,8 @@
 									serial: item.yang_pin_bian_hao,
 									type: item.yang_pin_lei_si_,
 									num: item.shu_liang_si_,
-									condition: item.yang_pin_yun_si_
+									condition: item.yang_pin_yun_si_,
+									shou_yang_ri_qi_: item.shou_yang_ri_qi_
 								}
 								list.push(obj)
 							}
@@ -169,7 +173,7 @@
 					const dataURL = canvas.toDataURL()
 					this.imgSrc = dataURL
 					uni.showToast({
-						title: '标签图片已生成,可以保存或者下载',
+						title: '标签图片已生成,可以下载',
 						icon: 'none',
 						duration: 2000
 					})
@@ -239,38 +243,38 @@
 </script>
 
 <style lang="scss" scoped>
-	.bg {
+	.bg {}
 
-		// height: auto;
+	.tagBoss {
+		width: 1920rpx;
+		padding: 10rpx;
 	}
 
 	.tagBox {
-		width: 700rpx;
-		height: 420rpx;
+		width: 237px;
+		// height: 136px;
 		border: 1rpx solid #000000;
-		padding: 20rpx;
-		display: flex;
-		justify-content: space-around;
-		flex-direction: column;
-		margin: 20rpx auto;
-		border-radius: 15rpx;
+		padding: 8rpx;
+		margin: 30rpx 20rpx;
+		border-radius: 8rpx;
 		background-color: #fff;
 	}
 
 	.la {
 		display: flex;
-		align-items: center;
 	}
 
 	.lh {
-		// line-height: auto;
-		font-size: 28rpx;
+		font-size: 24rpx;
 		display: flex;
-		align-items: center;
+
+		.lhLeft {
+			min-width: 60px;
+		}
 
 	}
 
 	/deep/ uni-mask .uni-actionsheet__mask {
 		z-index: 900
 	}
-</style>
+</style>

+ 15 - 0
pages/user/people.vue

@@ -31,6 +31,12 @@
 						<text class="text-grey">个人信息</text>
 					</view>
 				</navigator>
+				<!-- <view class="cu-item arrow animation-slide-bottom" :style="[{animationDelay: '0.7s'}]" @click="saoma">
+					<view class="content">
+						<text class="cuIcon-exit text-cyan"></text>
+						<text class="text-grey">扫码</text>
+					</view>
+				</view> -->
 				<view class="cu-item arrow animation-slide-bottom" :style="[{animationDelay: '0.7s'}]" @click="getQuit">
 					<view class="content">
 						<text class="cuIcon-exit text-cyan"></text>
@@ -89,6 +95,15 @@
 					}
 				}).catch(e => {})
 			},
+			saoma() {
+				uni.scanCode({
+					success: function(res) {
+						uni.showToast({
+							title: res.result
+						})
+					}
+				})
+			},
 			//退出逻辑
 			getQuit() {
 				uni.showModal({

+ 17 - 16
uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue

@@ -4,9 +4,7 @@
 			<text class="file-title">{{ title }}</text>
 			<text class="file-count">{{ filesList.length }}/{{ limitLength }}</text>
 		</view>
-		<upload-image v-if="fileMediatype === 'image' && showType === 'grid'" :readonly="readonly"
-			:image-styles="imageStyles" :files-list="filesList" :limit="limitLength" :disablePreview="disablePreview"
-			:delIcon="delIcon" @uploadFiles="uploadFiles" @choose="choose" @delFile="delFile">
+		<upload-image v-if="fileMediatype === 'image' && showType === 'grid'" :readonly="readonly" :image-styles="imageStyles" :files-list="filesList" :limit="limitLength" :disablePreview="disablePreview" :delIcon="delIcon" @uploadFiles="uploadFiles" @choose="choose" @delFile="delFile">
 			<slot>
 				<view class="is-add">
 					<view class="icon-add"></view>
@@ -14,9 +12,7 @@
 				</view>
 			</slot>
 		</upload-image>
-		<upload-file v-if="fileMediatype !== 'image' || showType !== 'grid'" :readonly="readonly"
-			:list-styles="listStyles" :files-list="filesList" :showType="showType" :delIcon="delIcon"
-			@uploadFiles="uploadFiles" @choose="choose" @delFile="delFile">
+		<upload-file v-if="fileMediatype !== 'image' || showType !== 'grid'" :readonly="readonly" :listShow="false" :list-styles="listStyles" :files-list="filesList" :showType="showType" :delIcon="delIcon" @uploadFiles="uploadFiles" @choose="choose" @delFile="delFile">
 			<slot><button type="primary" size="mini">选择文件</button></slot>
 		</upload-file>
 	</view>
@@ -182,6 +178,10 @@
 				default () {
 					return ['original', 'compressed']
 				}
+			},
+			listShow: {
+				type: Boolean,
+				default: true
 			}
 		},
 		data() {
@@ -249,6 +249,7 @@
 					this.form.inputChildrens.push(this)
 				}
 			}
+
 		},
 		methods: {
 			/**
@@ -281,19 +282,19 @@
 				this.uploadFiles(files)
 			},
 			async setValue(newVal, oldVal) {
-				const newData =  async (v) => {
+				const newData = async (v) => {
 					const reg = /cloud:\/\/([\w.]+\/?)\S*/
 					let url = ''
-					if(v.fileID){
+					if (v.fileID) {
 						url = v.fileID
-					}else{
+					} else {
 						url = v.url
 					}
 					if (reg.test(url)) {
 						v.fileID = url
 						v.url = await this.getTempFileURL(url)
 					}
-					if(v.url) v.path = v.url
+					if (v.url) v.path = v.url
 					return v
 				}
 				if (this.returnType === 'object') {
@@ -304,13 +305,13 @@
 					}
 				} else {
 					if (!newVal) newVal = []
-					for(let i =0 ;i < newVal.length ;i++){
+					for (let i = 0; i < newVal.length; i++) {
 						let v = newVal[i]
 						await newData(v)
 					}
 				}
 				this.localValue = newVal
-				if (this.form && this.formItem &&!this.is_reset) {
+				if (this.form && this.formItem && !this.is_reset) {
 					this.is_reset = false
 					this.formItem.setValue(this.localValue)
 				}
@@ -453,7 +454,7 @@
 						const reg = /cloud:\/\/([\w.]+\/?)\S*/
 						if (reg.test(item.url)) {
 							this.files[index].url = await this.getTempFileURL(item.url)
-						}else{
+						} else {
 							this.files[index].url = item.url
 						}
 
@@ -541,7 +542,7 @@
 				let data = []
 				if (this.returnType === 'object') {
 					data = this.backObject(this.files)[0]
-					this.localValue = data?data:null
+					this.localValue = data ? data : null
 				} else {
 					data = this.backObject(this.files)
 					if (!this.localValue) {
@@ -571,7 +572,7 @@
 						name: v.name,
 						path: v.path,
 						size: v.size,
-						fileID:v.fileID,
+						fileID: v.fileID,
 						url: v.url
 					})
 				})
@@ -647,4 +648,4 @@
 		position: absolute;
 		transform: rotate(90deg);
 	}
-</style>
+</style>

+ 12 - 10
uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue

@@ -4,12 +4,11 @@
 			<slot></slot>
 		</view>
 		<!-- :class="{'is-text-box':showType === 'list'}" -->
-		<view v-if="list.length > 0" class="uni-file-picker__lists is-text-box" :style="borderStyle">
+		<view v-if="list.length > 0 && listShow" class="uni-file-picker__lists is-text-box" :style="borderStyle">
 			<!-- ,'is-list-card':showType === 'list-card' -->
 
 			<view class="uni-file-picker__lists-box" v-for="(item ,index) in list" :key="index" :class="{
-				'files-border':index !== 0 && styles.dividline}"
-			 :style="index !== 0 && styles.dividline &&borderLineStyle">
+				'files-border':index !== 0 && styles.dividline}" :style="index !== 0 && styles.dividline &&borderLineStyle">
 				<view class="uni-file-picker__item">
 					<!-- :class="{'is-text-image':showType === 'list'}" -->
 					<!-- 	<view class="files__image is-text-image">
@@ -22,8 +21,7 @@
 					</view>
 				</view>
 				<view v-if="(item.progress && item.progress !== 100) ||item.progress===0 " class="file-picker__progress">
-					<progress class="file-picker__progress-item" :percent="item.progress === -1?0:item.progress" stroke-width="4"
-					 :backgroundColor="item.errMsg?'#ff5a5f':'#EBEBEB'" />
+					<progress class="file-picker__progress-item" :percent="item.progress === -1?0:item.progress" stroke-width="4" :backgroundColor="item.errMsg?'#ff5a5f':'#EBEBEB'" />
 				</view>
 				<view v-if="item.status === 'error'" class="file-picker__mask" @click.stop="uploadFiles(item,index)">
 					点击重试
@@ -37,7 +35,7 @@
 <script>
 	export default {
 		name: "uploadFile",
-		emits:['uploadFiles','choose','delFile'],
+		emits: ['uploadFiles', 'choose', 'delFile'],
 		props: {
 			filesList: {
 				type: Array,
@@ -70,9 +68,13 @@
 					}
 				}
 			},
-			readonly:{
-				type:Boolean,
-				default:false
+			readonly: {
+				type: Boolean,
+				default: false
+			},
+			listShow: {
+				type: Boolean,
+				default: true
 			}
 		},
 		computed: {
@@ -322,4 +324,4 @@
 	}
 
 	/* #endif */
-</style>
+</style>