From 57e76b55709e8ea88a83ab6c3f665fd9ee7fd64c Mon Sep 17 00:00:00 2001
From: licp <lichunping@guanfang.com.cn>
Date: 星期三, 03 七月 2024 14:23:48 +0800
Subject: [PATCH] Merge branch 'master' of http://114.132.189.42:9002/r/center-lims-before into master

---
 src/components/view/b1-inspect-order-plan.vue |  372 +++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 274 insertions(+), 98 deletions(-)

diff --git a/src/components/view/b1-inspect-order-plan.vue b/src/components/view/b1-inspect-order-plan.vue
index 2c3f8b1..ed93408 100644
--- a/src/components/view/b1-inspect-order-plan.vue
+++ b/src/components/view/b1-inspect-order-plan.vue
@@ -1,7 +1,30 @@
 <style scoped>
-	ins-order-plan-main .title {
+	.ins-order-plan-main .title {
 		font-size: 20px;
 		color: #3A7BFA
+	}
+
+	.search {
+		background-color: #fff;
+		height: 80px;
+		display: flex;
+		align-items: center;
+	}
+
+	.search_thing {
+		display: flex;
+		align-items: center;
+		height: 50px;
+	}
+
+	.search_label {
+		width: 120px;
+		font-size: 14px;
+		text-align: right;
+	}
+
+	.search_input {
+		width: calc(100% - 120px);
 	}
 
 	.ins-order-plan-main .search {
@@ -49,7 +72,7 @@
 		border-radius: 8px 0 0 8px;
 	}
 
-	.tab li:nth-child(3) {
+	.tab li:nth-last-child(1) {
 		border-radius: 0 8px 8px 0;
 	}
 
@@ -60,9 +83,9 @@
 
 	.center .center-options .center-title {
 		width: 100%;
-		text-align: right;
 		display: flex;
 		align-items: center;
+		justify-content: right;
 	}
 
 	.center .center-options .center-title span:last-child {
@@ -79,137 +102,193 @@
 	.ins-order-plan-main .el-form-item__label{
 		color: #000;
 	}
+
+  .ins-order-plan-main .el-table th.el-table__cell>.cell{
+    height: 46px;
+    line-height: 30px;
+  }
 </style>
 <template>
 	<div class="ins-order-plan-main">
-		<p style="font-size: 16px;padding:19.5px 0px">妫�楠屼换鍔�</p>
-		<div class="search">
-			<el-form :inline="true" :model="searchForm" class="form-inline">
-				<el-form-item label="鏍峰搧鍚嶇О:">
-					<el-input clearable v-model="searchForm.sampleName" size="small" placeholder="璇疯緭鍏�"></el-input>
-				</el-form-item>
-				<el-form-item label="鐘舵��:">
-					<el-select clearable size="small" v-model="searchForm.state" placeholder="璇烽�夋嫨">
-						<el-option v-for="(item,index) in insStateList" :key="index" :label="item.label"
-							:value="item.value"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item>
-					<el-button size="small" @click="onReset">閲嶇疆</el-button>
-					<el-button size="small" type="primary" @click="onSubmit">鏌ヨ</el-button>
-				</el-form-item>
-			</el-form>
-		</div>
-		<div class="center">
-			<div class="center-options">
-				<el-row>
-					<el-col :span="21">
-						<div style="display: flex;align-items: center;margin-bottom: 10px;">
-							<ul class="tab">
-								<li v-for="(m,i) in tabList" :key="i" :class="{active:i==tabIndex}" @click="handleTab(m,i)">{{m.label}}
-								</li>
-							</ul>
-							<div>
-								<el-checkbox @change="changeCheckBox" class="view-self-checkbox"
-									v-model="viewSelf"><span>鎴戠殑浠诲姟</span></el-checkbox>
-							</div>
-						</div>
-					</el-col>
-					<el-col :span="3">
-						<div class="center-title">
-							<span>鎬昏浠诲姟鏁伴噺:</span>
-							<span v-if="$refs.insOrderPlan != undefined">{{$refs.insOrderPlan.total}}</span>
-						</div>
-					</el-col>
-				</el-row>
+		<div v-show="activeFace == 0&&state==0" style="height: 100%;">
+			<p style="font-size: 16px;padding-left: 20px;text-align: left;height: 60px;line-height: 60px;">妫�楠屼换鍔�</p>
+			<div class="search">
+				<div class="search_thing">
+					<div class="search_label">濮旀墭缂栧彿锛�</div>
+					<div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
+							v-model="componentData.entity.entrustCode" @keyup.enter.native="refreshTable()"></el-input></div>
+				</div>
+				<div class="search_thing">
+					<div class="search_label">妫�楠岀姸鎬侊細</div>
+					<div class="search_input">
+						<el-select size="small" v-model="componentData.entity.insState" style="width: 100%;" @change="refreshTable()">
+							<el-option v-for="(a, i) in insStateList" :key="i" :label="a.label" :value="a.value"></el-option>
+						</el-select>
+					</div>
+				</div>
+				<div class="search_thing" style="padding-left: 30px;">
+					<el-button size="small" @click="refresh()">閲� 缃�</el-button>
+					<el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
+				</div>
 			</div>
-			<ValueTable :tableRowClassName="changeRowClass" class="value-table" ref="insOrderPlan"
-				:url="$api.insOrderPlan.selectInsOrderPlanList" :upUrl="$api.user.updateUser" :componentData="componentData"
-				:key="upIndex" @upUser="upUser" />
+			<div class="center">
+				<div class="center-options">
+					<el-row>
+						<el-col :span="21">
+							<div style="display: flex;align-items: center;margin-bottom: 10px;">
+								<ul class="tab">
+									<li v-for="(m,i) in tabList" :key="i" :class="{active:i==tabIndex}" @click="handleTab(m,i)">{{m.label.replace('璇曢獙瀹�','')}}
+									</li>
+								</ul>
+								<div>
+									<el-checkbox @change="changeCheckBox" class="view-self-checkbox"
+										v-model="alone"><span>鎴戠殑浠诲姟</span></el-checkbox>
+								</div>
+							</div>
+						</el-col>
+						<el-col :span="3">
+							<div class="center-title">
+								<span>鎬昏浠诲姟鏁伴噺:</span>
+								<span v-if="$refs.insOrderPlan != undefined">{{$refs.insOrderPlan.total}}</span>
+							</div>
+						</el-col>
+					</el-row>
+				</div>
+				<ValueTable :tableRowClassName="changeRowClass" class="value-table" ref="insOrderPlan"
+					:url="$api.insOrderPlan.selectInsOrderPlanList" :upUrl="$api.user.updateUser" :componentData="componentData" @handleInspection="handleInspection"
+					:key="upIndex"/>
+			</div>
 		</div>
-		<el-dialog title="鎻愮ず" :visible.sync="claimVisible" width="40%">
+		<el-dialog title="鎻愮ず" :visible.sync="claimVisible" width="400px">
 			鏄惁璁ら濮旀墭缂栧彿<span style="color:#33C130">{{sampleUserForm.entrustCode}}</span>鐨勪换鍔�
 			<span slot="footer" class="dialog-footer">
 				<el-button @click="claimVisible = false">鍙� 娑�</el-button>
-				<el-button type="primary" @click="confirmClaim">纭� 瀹�</el-button>
+				<el-button type="primary" @click="confirmClaim" :loading="loading">纭� 瀹�</el-button>
 			</span>
 		</el-dialog>
+    <el-dialog title="妫�楠屼氦鎺�" :visible.sync="connectVisible" width="400px">
+			<div class="search_thing">
+        <div class="search_label" style="width:90px">浜ゆ帴浜哄憳锛�</div>
+        <div class="search_input">
+          <el-select v-model="connectPerson" placeholder="璇烽�夋嫨" style="width: 100%;" filterable>
+            <el-option
+              v-for="item in personList"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value">
+            </el-option>
+          </el-select>
+        </div>
+      </div>
+			<span slot="footer" class="dialog-footer">
+				<el-button @click="connectVisible = false">鍙� 娑�</el-button>
+				<el-button type="primary" @click="confirmConnect" :loading="loading">纭� 瀹�</el-button>
+			</span>
+		</el-dialog>
+		<div style="width: 100%;height: 100%;" v-if="activeFace >0">
+			<Add :active="activeFace" :currentId="currentId"/>
+		</div>
+    <Inspection v-if="state>0" @goback="goback" :orderId="orderId" :sonLaboratory="componentData.entity.sonLaboratory" :state="state"/>
 	</div>
 </template>
 
 <script>
 	import ValueTable from '../tool/value-table.vue'
+  	import Inspection from '../do/b1-inspect-order-plan/Inspection.vue'
 	import {
 		getYearAndMonthAndDays
 	} from '../../util/date'
+	import Add from '../do/b1-ins-order/add.vue'
 	export default {
 		components: {
-			ValueTable
+			ValueTable,
+      Inspection,
+			Add
 		},
 		data() {
 			return {
-				viewSelf: false,
+				alone: false,
 				sampleUserForm: {
 					entrustCode: null,
 					insSampleId: null,
 					userId: null
 				},
 				claimVisible: false,
-				searchForm: {
-					sampleName: null,
-					state: null
-				},
 				tabList: [],
 				active: 1,
 				tabIndex: 0,
 				componentData: {
 					entity: {
-						viewSelf: false,
-						state: 1,
-						childrenLaboratory: null,
+						sonLaboratory: null,
 						insState: null,
-						sampleName: null,
-						orderBy: {
-							field: 'type',
-							order: 'desc'
-						}
+						userId: null
 					},
 					isIndex: true,
 					showSelect: false,
 					select: false,
+					sort: false,
+					init: false,
 					do: [{
 							id: '',
 							font: '妫�楠�',
 							type: 'text',
-							method: '',
-							field: []
+							method: 'handleInspection',
+							disabFun: (row, index) => {
+								return row.userId == null || row.insState == 3 || row.insState == 5
+							}
 						}, {
 							id: '',
 							font: '浜ゆ帴',
 							type: 'text',
-							method: ''
+							method: 'handleConnect',
+							disabFun: (row, index) => {
+								return row.userId == null || row.orderUserId == null || row.insState == 5  || row.insState == 3
+							}
 						},
 						{
 							id: '',
 							font: '澶嶆牳',
 							type: 'text',
-							method: ''
+							method: 'handleReview',
+							disabFun: (row, index) => {
+								return row.userId == null || row.insState != 3 || row.verifyUser != 1
+							}
 						}, {
 							id: '',
 							font: '璁ら',
 							type: 'text',
 							method: 'claimFun',
 							disabFun: (row, index) => {
-								return row.sampleUserId != null
+								return row.userId != null
 							}
 						}
 					],
+					linkEvent: {
+						entrustCode: {
+							method: 'selectAllByOne'
+						}
+					},
 					tagField: {
 						type: {
 							select: []
 						},
 						insState: {
 							select: []
+						},
+						insResult: {
+							select: [{
+								value: 0,
+								label: '涓嶅悎鏍�',
+								type: 'danger'
+							},{
+								value: 1,
+								label: '鍚堟牸',
+								type: 'success'
+							},{
+								value: '',
+								label: '鏈嚭缁撴灉',
+								type: 'info'
+							}]
 						}
 					},
 					selectField: {},
@@ -218,39 +297,78 @@
 				},
 				upIndex: 0,
 				planTotal: 0,
-				insStateList: []
+				insStateList: [],
+        state:0,//0:鍙拌处椤碉紝1锛氭楠岄〉闈�,2妫�楠岄〉闈�(澶嶆牳)锛岄粯璁や负0
+				activeFace: 0, //1锛氫笅鍗曪紝2锛氭煡鐪嬶紝3锛氬鏍革紝榛樿涓�0
+				currentId: null,
+				entityCopy: {},
+				orderId: 0,
+        personList:[],
+        connectVisible:false,
+        connectPerson:'',
+        loading:false,
+        currentTime: null
 			}
 		},
 		created() {
+			this.getLaboratoryDicts()
 			this.getTypeDicts()
 			this.getInsStateDicts()
-			this.getLaboratoryDicts()
-			this.$nextTick(() => {
-				this.refreshTable()
-			})
+      this.getAuthorizedPerson()
+      this.currentTime = getYearAndMonthAndDays()
 		},
-		watch: {
-			tabList(newVal) {
-				if (newVal && newVal.length > 0) {
-					this.componentData.entity.childrenLaboratory = newVal[0].value
-					this.$nextTick(() => {
-						this.refreshTable()
-					})
-				}
-			}
+		mounted() {
+			this.entityCopy = this.HaveJson(this.componentData.entity)
+      this.getPower()
 		},
 		methods: {
-			upUser() {
-
+      // 鏉冮檺鍒嗛厤
+			getPower(radio) {
+				let power = JSON.parse(sessionStorage.getItem('power'))
+				let inspection = false
+				let connect = false
+				let review = false
+        let claim = false
+				for (var i = 0; i < power.length; i++) {
+					if (power[i].menuMethod == 'doInsOrder') {
+						inspection = true
+					}
+					if (power[i].menuMethod == 'upPlanUser') {
+						connect = true
+					}
+					if (power[i].menuMethod == 'verifyPlan') {
+						review = true
+					}
+          if (power[i].menuMethod == 'claimInsOrderPlan') {
+						claim = true
+					}
+				}
+				if (!claim) {
+					this.componentData.do.splice(3, 1)
+				}
+				if (!review) {
+					this.componentData.do.splice(2, 1)
+				}
+        if (!connect) {
+					this.componentData.do.splice(1, 1)
+				}
+				if (!inspection) {
+					this.componentData.do.splice(0, 1)
+				}
 			},
 			changeCheckBox(val) {
-				this.componentData.entity.viewSelf = val
-				this.$nextTick(() => {
-					this.refreshTable()
-				})
+				this.componentData.entity.userId = val?0:null
+				this.refreshTable()
+			},
+			refresh() {
+				this.componentData.entity = this.HaveJson(this.entityCopy)
+				if(this.tabList.length>0){
+					this.tabIndex = 0
+					this.componentData.entity.sonLaboratory = this.tabList[0].value
+				}
+				this.refreshTable()
 			},
 			claimFun(row) {
-				console.log(row)
 				if (row) {
 					this.sampleUserForm = {
 						entrustCode: row.entrustCode,
@@ -258,21 +376,23 @@
 					}
 					this.claimVisible = true
 				}
-
 			},
 			confirmClaim() {
+        this.loading = true;
 				this.$axios.post(this.$api.insOrderPlan.claimInsOrderPlan, this.sampleUserForm, {
 					headers: {
 						'Content-Type': 'application/json'
 					}
 				}).then(res => {
 					if (res.code === 200 && res.data) {
+            this.loading = false;
 						this.$message.success("璁ら鎴愬姛")
 						this.claimVisible = false
 						this.refreshTable()
 					}
 				}).catch(error => {
 					console.error(error)
+          this.loading = false;
 				})
 			},
 			refreshTable() {
@@ -282,10 +402,9 @@
 				row,
 				rowIndex
 			}) {
-				let currentTime = getYearAndMonthAndDays()
-				if (row.sendTime && currentTime === row.sendTime) {
+				if (this.currentTime == row.appointed) {
 					return 'highlight-warning-row-border'
-				} else if (row.sendTime && currentTime > row.sendTime) {
+				} else if (this.currentTime > row.appointed) {
 					return 'highlight-danger-row-border'
 				}
 				return ''
@@ -308,7 +427,7 @@
 			},
 			handleTab(m, i) {
 				this.tabIndex = i;
-				this.componentData.entity.childrenLaboratory = m.value
+				this.componentData.entity.sonLaboratory = m.value
 				this.refreshTable()
 			},
 			getTypeDicts() {
@@ -357,11 +476,68 @@
 							value: ele.value
 						}
 					})
-					this.$nextTick(() => {
-						this.componentData.entity.childrenLaboratory = this.tabList[0].value
-					})
+					if(this.tabList.length>0){
+						this.componentData.entity.sonLaboratory = this.tabList[0].value
+					}
+					this.refreshTable()
 				})
-			}
+			},
+			selectAllByOne(row) {
+				this.activeFace = 2;
+				this.currentId = parseInt(row.id)
+			},
+			playOrder(num) {
+				this.activeFace = num
+			},
+			goback() {
+				this.state = 0
+				this.refreshTable()
+			},
+      handleInspection(row){
+        this.state = 1;
+				this.orderId = row.id
+      },
+      handleConnect(row){
+        this.orderId = row.id
+        this.connectVisible=true;
+      },
+      confirmConnect(){
+        if(this.connectPerson){
+          this.loading = true;
+          this.$axios.post(this.$api.insOrderPlan.upPlanUser, {
+            orderId:this.orderId,
+            userId:this.connectPerson
+          }).then(res => {
+					if (res.code === 200) {
+            this.loading = false;
+						this.$message.success("鎿嶄綔鎴愬姛")
+						this.refreshTable()
+					}
+          this.connectVisible = false
+				}).catch(error => {
+					console.error(error)
+          this.loading = false;
+				})
+        }else{
+          this.$message.error('鏈�夋嫨浜ゆ帴浜哄憳')
+        }
+      },
+      handleReview(row){
+        this.state = 2;
+				this.orderId = row.id
+      },
+      getAuthorizedPerson() {
+				this.$axios.get(this.$api.user.getUserMenu).then(res => {
+					let data = []
+					res.data.forEach(a => {
+						data.push({
+							label: a.name,
+							value: a.id
+						})
+					})
+					this.personList = data
+				})
+			},
 		}
 	}
-</script>
\ No newline at end of file
+</script>

--
Gitblit v1.9.3