From 86a84c327007a1fb398fa2aefff1bffc03a83cfb Mon Sep 17 00:00:00 2001
From: Crunchy <3114200645@qq.com>
Date: 星期二, 06 八月 2024 22:36:02 +0800
Subject: [PATCH] 委托下单,禁止下拉框输入
---
src/components/view/b1-inspect-order-plan.vue | 494 +++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 393 insertions(+), 101 deletions(-)
diff --git a/src/components/view/b1-inspect-order-plan.vue b/src/components/view/b1-inspect-order-plan.vue
index bb8dcaf..ea64308 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,279 @@
.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"
+ :isColumnWidth="true"
+ :url="$api.insOrderPlan.selectInsOrderPlanList" :upUrl="$api.user.updateUser" :componentData="componentData" @handleInspection="handleInspection"
+ :key="upIndex"/>
+ </div>
</div>
<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>
- </div>
+ <el-dialog title="妫�楠屼氦鎺�" :visible.sync="connectVisible" width="400px">
+ <div class="search_thing">
+ <div class="search_label" style="width:90px"><span class="required-span">* </span>浜ゆ帴浜哄憳锛�</div>
+ <div class="search_input">
+ <el-select v-model="connect.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>
+ <div class="search_thing">
+ <div class="search_label" style="width:90px"><span class="required-span">* </span>璇曢獙瀹わ細</div>
+ <div class="search_input">
+ <el-select v-model="connect.sonLaboratory" placeholder="璇烽�夋嫨" style="width: 100%;" filterable>
+ <el-option
+ v-for="item in sonLaboratoryList"
+ :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"/>
+ <el-dialog title="鏁版嵁鏌ョ湅" :visible.sync="dataDialogVisible" width="80%">
+ <div style="height: 70vh;overflow-y: auto;" v-if="dataDialogVisible">
+ <ValueTable ref="ValueTableDataLook" :url="$api.insOrder.selectSampleAndProductByOrderId"
+ :componentData="componentDataDataLook"/>
+ </div>
+ </el-dialog>
+ </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'
+import { CellGroup } from 'iview'
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,
+ componentDataDataLook: {
+ entity: {
+ id: 0,
+ orderBy: {
+ field: 'sampleCode',
+ order: 'asc'
+ }
+ },
+ isIndex: false,
+ showSelect: false,
+ select: false,
+ do: [],
+ tagField: {
+ insState: {
+ select: []
+ },
+ insResult: {
+ select: [{
+ value: 1,
+ label: '鍚堟牸',
+ type: 'success'
+ },{
+ value: 0,
+ label: '涓嶅悎鏍�',
+ type: 'danger'
+ }]
+ }
+ },
+ selectField: {},
+ spanConfig:{
+ rows:[
+ {
+ name:'sampleCode',
+ index:0
+ },
+ {
+ name:'sample',
+ index:1
+ },
+ {
+ name:'model',
+ index:5
+ }
+ ]
+ },
+ requiredAdd: [],
+ requiredUp: []
+ },
+ dataDialogVisible: false,
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,
+ init: false,
+ needSort: ['createTime', 'sendTime', 'type', 'appointed', 'insState'],
do: [{
+ id: '',
+ font: '鏁版嵁鏌ョ湅',
+ type: 'text',
+ method: 'handleDataLook',
+ disabFun: (row, index) => {
+ const user = JSON.parse(localStorage.getItem('user'))
+ let currentUserName = ''
+ if(user){
+ currentUserName = user.name
+ }
+ return row.userName!=currentUserName || row.checkName!=currentUserName
+ }
+ },{
id: '',
font: '妫�楠�',
type: 'text',
- method: '',
- field: []
+ method: 'handleInspection',
+ disabFun: (row, index) => {
+ return row.userName == null || row.insState == 3 || row.insState == 5||(row.userName&&!row.userName.includes(JSON.parse(localStorage.getItem("user")).name))
+ }
+ // 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.userName == null || row.insState == 5 || row.insState == 3||(row.userName&&!row.userName.includes(JSON.parse(localStorage.getItem("user")).name))
+ }
},
{
id: '',
font: '澶嶆牳',
type: 'text',
- method: ''
+ method: 'handleReview',
+ disabFun: (row, userName) => {
+ return row.userName == null || row.insState != 3 ||(row.checkName&&!row.checkName.includes(JSON.parse(localStorage.getItem("user")).name))
+ }
}, {
id: '',
font: '璁ら',
type: 'text',
method: 'claimFun',
disabFun: (row, index) => {
- return row.sampleUserId != null
+ return row.userName != null||(row.userName&&!row.userName.includes(JSON.parse(localStorage.getItem("user")).name))
}
}
],
+ 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,74 +383,124 @@
},
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,
+ connect:{
+ connectPerson:'',
+ sonLaboratory:''
+ },
+ loading:false,
+ currentTime: null,
+ sonLaboratoryList:[]
}
},
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() {
-
+ // 鏁版嵁鏌ョ湅
+ handleDataLook(row) {
+ this.componentDataDataLook.entity.id = row.id
+ this.dataDialogVisible = true;
+ },
+ // 鏉冮檺鍒嗛厤
+ 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,
- insSampleId: row.id
+ insSampleId: row.id,
+ sonLaboratory: row.sonLaboratory,
}
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()
+ this.refreshTable('page')
}
}).catch(error => {
console.error(error)
+ this.loading = false;
})
},
- refreshTable() {
- this.$refs.insOrderPlan.selectList()
+ refreshTable(e) {
+ this.$refs.insOrderPlan.selectList(e)
},
changeRowClass({
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 +523,7 @@
},
handleTab(m, i) {
this.tabIndex = i;
- this.componentData.entity.childrenLaboratory = m.value
+ this.componentData.entity.sonLaboratory = m.value
this.refreshTable()
},
getTypeDicts() {
@@ -357,11 +572,88 @@
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('page')
+ },
+ handleInspection(row){
+ this.state = 1;
+ this.orderId = row.id
+ },
+ handleConnect(row){
+ this.orderId = row.id
+ this.connect = {}
+ this.connectVisible=true;
+ this.$axios.post(this.$api.insOrderPlan.upPlanUser2, {
+ orderId:this.orderId,
+ }).then(res => {
+ if (res.code === 200&&res.data.length>0) {
+ this.sonLaboratoryList = [];
+ res.data.forEach(m=>{
+ this.sonLaboratoryList.push({
+ value:m,
+ label:m
+ })
+ })
+ this.connect.sonLaboratory = this.sonLaboratoryList[0].value
+ }
+ })
+ },
+ confirmConnect(){
+ if(this.connect.connectPerson==null||this.connect.connectPerson==''||this.connect.connectPerson==undefined){
+ this.$message.error('鏈�夋嫨浜ゆ帴浜哄憳')
+ return
+ }
+ if(this.connect.sonLaboratory==null||this.connect.sonLaboratory==''||this.connect.sonLaboratory==undefined){
+ this.$message.error('鏈�夋嫨璇曢獙瀹�')
+ return
+ }
+ this.loading = true;
+ this.$axios.post(this.$api.insOrderPlan.upPlanUser, {
+ orderId:this.orderId,
+ userId:this.connect.connectPerson,
+ sonLaboratory:this.connect.sonLaboratory,
+ }).then(res => {
+ if (res.code === 200) {
+ this.loading = false;
+ this.$message.success("鎿嶄綔鎴愬姛")
+ this.refreshTable('page')
+ }
+ this.connectVisible = false
+ }).catch(error => {
+ console.error(error)
+ this.loading = false;
+ })
+ },
+ 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>
--
Gitblit v1.9.3