From e02fa5bedb087519dabee9690c13f1b7f8be0787 Mon Sep 17 00:00:00 2001
From: licp <lichunping@guanfang.com.cn>
Date: 星期一, 01 四月 2024 15:31:44 +0800
Subject: [PATCH] 完成交接复核功能
---
src/components/view/enums.vue | 6 +
src/components/do/b1-ins-order/add.vue | 4
src/components/tool/value-table.vue | 43 ++++++++
src/main.js | 2
src/components/do/b1-inspect-order-plan/Inspection.vue | 95 ++++++++++++++++--
src/components/view/b1-inspect-order-plan.vue | 128 +++++++++++++++++++++++-
src/assets/api/controller.js | 2
7 files changed, 255 insertions(+), 25 deletions(-)
diff --git a/src/assets/api/controller.js b/src/assets/api/controller.js
index f97a408..e605ddb 100644
--- a/src/assets/api/controller.js
+++ b/src/assets/api/controller.js
@@ -137,6 +137,8 @@
claimInsOrderPlan: "/insOrderPlan/claimInsOrderPlan",//璁ら妫�楠屼换鍔�
doInsOrder: "/insOrderPlan/doInsOrder",//鎵ц妫�楠屾搷浣�
saveInsContext: "/insOrderPlan/saveInsContext",//淇濆瓨妫�楠屽唴瀹�
+ upPlanUser: "/insOrderPlan/upPlanUser",//浠诲姟浜ゆ帴
+ verifyPlan: "/insOrderPlan/verifyPlan",//澶嶆牳妫�楠屼换鍔�
}
const systemLog = {
diff --git a/src/components/do/b1-ins-order/add.vue b/src/components/do/b1-ins-order/add.vue
index 201c3e4..3b58669 100644
--- a/src/components/do/b1-ins-order/add.vue
+++ b/src/components/do/b1-ins-order/add.vue
@@ -107,6 +107,7 @@
<span style="color: #3A7BFA;">淇濆瓨妯℃澘</span>
</el-button>
<el-button size="medium" type="primary" @click="save" :loading="saveLoad" v-show="active==1">鎻愪氦</el-button>
+ <!-- 瀹℃牳 -->
<el-button size="medium" @click="upInsOrderOfState(2)" :loading="saveLoad" v-show="active==3">涓嶉�氳繃</el-button>
<el-button size="medium" type="primary" @click="upInsOrderOfState(1)" :loading="saveLoad"
v-show="active==3">閫氳繃</el-button>
@@ -458,6 +459,7 @@
</el-row>
</span>
</el-dialog>
+
</div>
</template>
@@ -1123,7 +1125,7 @@
this.$nextTick(()=>{
this.$refs.productTable.doLayout()
})
- }
+ },
}
}
</script>
diff --git a/src/components/do/b1-inspect-order-plan/Inspection.vue b/src/components/do/b1-inspect-order-plan/Inspection.vue
index 87ce163..7b70bdc 100644
--- a/src/components/do/b1-inspect-order-plan/Inspection.vue
+++ b/src/components/do/b1-inspect-order-plan/Inspection.vue
@@ -18,24 +18,21 @@
.center {
width: calc(100% - 40px);
- height: calc(100% - 60px - 80px - 40px);
+ max-height: 580px;
background-color: #fff;
border-radius: 3px;
padding: 20px;
- position: relative;
+ overflow-y: auto;
}
.center-box {
- height: 100%;
display: flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
- overflow-y: auto;
}
.tables {
- /* width: 800px; */
margin-bottom: 16px;
}
@@ -127,6 +124,10 @@
<el-col :span="12" style="text-align: right;">
<el-button size="small" type="primary" @click="sampleVisible=true">鏍峰搧鍒囨崲</el-button>
<el-button size="small" type="primary" @click="taskVisible=true">浠诲姟鍒囨崲</el-button>
+ <!-- 澶嶆牳 -->
+ <el-button size="medium" type="primary" @click="upInsReview(1)" :loading="reviewLoading"
+ v-show="state>1">閫氳繃</el-button>
+ <el-button size="medium" @click="upInsReview(0)" v-show="state>1">涓嶉�氳繃</el-button>
<el-button size="small" @click="$emit('goback')">杩斿洖</el-button>
</el-col>
</el-row>
@@ -169,11 +170,11 @@
<div class="content" :class="`content-h-${n.v.ht} content-v-${n.v.vt}`">
<template v-if="n.v.ps!=undefined && n.v.ps.value==='妫�楠屽��'">
<el-input v-if="getInspectionValueType(n.i) == 1" class="table_input" v-model="n.v.v"
- :disabled="getInspectionItemType(n.i) == 1 || (n.u != userId && n.u != undefined && n.u != '')"
+ :disabled="getInspectionItemType(n.i) == 1 || (n.u != userId && n.u != undefined && n.u != '')||state>1"
@change="m=>changeInput(m,`${item.templateId}-${n.r}-${n.c}-${n.i}`)" />
<el-input v-else-if="getInspectionValueType(n.i) == 2" class="table_input" type="textarea"
- :autosize="{ minRows: 1}" v-model="n.v.v" />
- <el-select v-else-if="getInspectionValueType(n.i) == 5" class="table_input" v-model="n.v.v">
+ :autosize="{ minRows: 1}" v-model="n.v.v" :disabled="state>1" />
+ <el-select v-else-if="getInspectionValueType(n.i) == 5" class="table_input" v-model="n.v.v" :disabled="state>1">
<el-option label="鏄�" value="鏄�"></el-option>
<el-option label="鍚�" value="鍚�"></el-option>
</el-select>
@@ -181,7 +182,7 @@
v-else-if="getInspectionValueType(n.i) == 4">/</span>
<el-button type="primary" icon="el-icon-edit" size="mini" circle
v-if="getInspectionItemType(n.i) == 1" style="border: 0;margin-left: 2px;"
- @click="getSystemValue(n)" :disabled="n.u != userId && n.u != undefined && n.u != ''">
+ @click="getSystemValue(n)" :disabled="(n.u != userId && n.u != undefined && n.u != '')||state>1">
</el-button>
</template>
<template v-else-if="n.v.ps!=undefined && n.v.ps.value==='缁撹'">
@@ -190,7 +191,7 @@
<span v-else :style="`font-family:${n.v.ff} !important;`">寰呭畾</span>
</template>
<template v-else-if="n.v.ps!=undefined && n.v.ps.value==='璁惧'">
- <el-select v-model="n.v.v" placeholder="璇烽�夋嫨" @visible-change="e=>getEquipOptions(e,n.i)">
+ <el-select v-model="n.v.v" placeholder="璇烽�夋嫨" @visible-change="e=>getEquipOptions(e,n.i)" :disabled="state>1">
<el-option
v-for="item in equipOptions"
:key="item.value"
@@ -239,13 +240,25 @@
<ValueTable class="value-table" ref="insOrderPlan" :url="$api.insOrderPlan.selectInsOrderPlanList"
:componentData="componentData" :key="upIndex" />
</el-drawer>
+ <el-dialog title="妫�楠屽鏍�" :visible.sync="reviewDia" width="400px">
+ <div class="body" style="display: flex;align-items: center;" v-if="reviewDia">
+ <div class="search_label" style="width: 120px;"><span class="required-span">* </span>涓嶉�氳繃鍘熷洜锛�</div>
+ <div class="search_input">
+ <el-input size="small" clearable v-model="noReason" type="textarea" :autosize="{ minRows: 3, maxRows: 5}"></el-input>
+ </div>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="reviewDia = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="handleReviewDia" :loading="reviewLoading">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
</div>
</template>
<script>
import ValueTable from '../../tool/value-table.vue'
export default {
- props: ['sonLaboratory', 'orderId'],
+ props: ['sonLaboratory', 'orderId','state'],
components: {
ValueTable,
},
@@ -298,7 +311,10 @@
comparisonList: [],
excelMethodList: [],
equipOptions:[],
- userId: 0
+ userId: 0,
+ reviewLoading:false,
+ reviewDia:false,
+ noReason:''
}
},
created() {
@@ -794,6 +810,61 @@
this.userId = res.data.id
})
},
+ // 澶嶆牳
+ upInsReview(e){
+ if(e==1){
+ // 閫氳繃
+ this.reviewLoading = true;
+ this.$axios.post(this.$api.insOrderPlan.verifyPlan, {
+ orderId:this.orderId,
+ type:1,
+ laboratory:this.sonLaboratory,
+ tell:null
+ }, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }).then(res => {
+ if (res.code === 200 && res.data) {
+ this.reviewLoading = false;
+ this.$message.success("澶嶆牳閫氳繃")
+ this.$emit('goback')
+ }
+ }).catch(error => {
+ console.error(error)
+ this.reviewLoading = false;
+ })
+ }else{
+ // 涓嶉�氳繃
+ this.reviewDia = true;
+ }
+ },
+ handleReviewDia(){
+ if(this.noReason){
+ this.reviewLoading = true;
+ this.$axios.post(this.$api.insOrderPlan.verifyPlan, {
+ orderId:this.orderId,
+ type:0,
+ laboratory:this.sonLaboratory,
+ tell:this.noReason
+ }, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }).then(res => {
+ if (res.code === 200 && res.data) {
+ this.reviewLoading = false;
+ this.$message.success("澶嶆牳涓嶉�氳繃")
+ this.$emit('goback')
+ }
+ }).catch(error => {
+ console.error(error)
+ this.reviewLoading = false;
+ })
+ }else{
+ this.$message.error('鏈緭鍏ヤ笉閫氳繃鍘熷洜')
+ }
+ },
}
}
</script>
diff --git a/src/components/tool/value-table.vue b/src/components/tool/value-table.vue
index fbd1c28..9efd2dd 100644
--- a/src/components/tool/value-table.vue
+++ b/src/components/tool/value-table.vue
@@ -80,7 +80,8 @@
@row-click="rowClick" :show-summary="data.countFleid!=undefined && data.countFleid.length > 0"
:summary-method="getSummaries" :row-class-name="tableRowClassName"
:row-key="record=>record.id" :current-row-key="data.currentId"
- highlight-current-row>
+ highlight-current-row
+ :span-method="spanMethod">
<el-table-column type="selection" width="65" v-if="data.showSelect" :key="Math.random()">
</el-table-column>
<el-table-column type="index" align="center" label="搴忓彿" width="70" v-if="data.isIndex" :key="Math.random()">
@@ -346,7 +347,9 @@
uploadDia: false,
token: null,
fileList: [],
- init: true
+ init: true,
+ testArr: [],
+ testPosition: 0,
}
},
watch: {
@@ -370,6 +373,37 @@
}
},
methods: {
+ rowspan(spanArr, position, spanName) {
+ this.tableData.forEach((item, index) => {
+ if (index === 0) {
+ spanArr.push(1);
+ position = 0;
+ } else {
+ if (
+ this.tableData[index][spanName] ===
+ this.tableData[index - 1][spanName]
+ ) {
+ spanArr[position] += 1;
+ spanArr.push(0);
+ } else {
+ spanArr.push(1);
+ position = index;
+ }
+ }
+ });
+ },
+ spanMethod({ row, column, rowIndex, columnIndex }){
+ if(this.data.spanConfig!=undefined&&this.data.spanConfig.rows){
+ if (columnIndex === this.data.spanConfig.rows.index) {
+ const _row = this.testArr[rowIndex];
+ const _col = _row > 0 ? 1 : 0;
+ return {
+ rowspan: _row,
+ colspan: _col,
+ };
+ }
+ }
+ },
selectChange(val) {
if (this.data.select) {
this.multipleSelection = val;
@@ -438,6 +472,11 @@
})
}
}
+ if(this.data.spanConfig!=undefined&&this.data.spanConfig.rows){
+ this.testArr = []
+ this.testPosition = 0
+ this.rowspan(this.testArr, this.testPosition, this.data.spanConfig.rows.name);
+ }
this.loading = false
}).catch(e => {
this.loading = false
diff --git a/src/components/view/b1-inspect-order-plan.vue b/src/components/view/b1-inspect-order-plan.vue
index 2b397b2..f344c46 100644
--- a/src/components/view/b1-inspect-order-plan.vue
+++ b/src/components/view/b1-inspect-order-plan.vue
@@ -72,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;
}
@@ -158,13 +158,32 @@
鏄惁璁ら濮旀墭缂栧彿<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%;">
+ <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==1" @goback="goback" :orderId="orderId" :sonLaboratory="componentData.entity.sonLaboratory"/>
+ <Inspection v-if="state>0" @goback="goback" :orderId="orderId" :sonLaboratory="componentData.entity.sonLaboratory" :state="state"/>
</div>
</template>
@@ -175,7 +194,6 @@
getYearAndMonthAndDays
} from '../../util/date'
import Add from '../do/b1-ins-order/add.vue'
-import { number } from 'echarts'
export default {
components: {
ValueTable,
@@ -217,13 +235,13 @@
id: '',
font: '浜ゆ帴',
type: 'text',
- method: ''
+ method: 'handleConnect'
},
{
id: '',
font: '澶嶆牳',
type: 'text',
- method: ''
+ method: 'handleReview',
}, {
id: '',
font: '璁ら',
@@ -262,6 +280,10 @@
}]
}
},
+ spanConfig:{
+ rows:'entrustCode',//鍚堝苟琛�,閫氬父娑夊強涓�涓瓧娈�
+ cols:[],//鍚堝苟鍒�,閫氬父娑夊強鍑犱釜瀛楁
+ },
selectField: {},
requiredAdd: [],
requiredUp: []
@@ -269,22 +291,62 @@
upIndex: 0,
planTotal: 0,
insStateList: [],
- state:0,//0:鍙拌处椤碉紝1锛氭楠岄〉闈紝榛樿涓�0
- activeFace: 0, //1锛氫笅鍗曪紝2锛氭煡鐪嬶紝3锛氬鏍�
+ state:0,//0:鍙拌处椤碉紝1锛氭楠岄〉闈�,2妫�楠岄〉闈�(澶嶆牳)锛岄粯璁や负0
+ activeFace: 0, //1锛氫笅鍗曪紝2锛氭煡鐪嬶紝3锛氬鏍革紝榛樿涓�0
currentId: null,
entityCopy: {},
orderId: 0,
+ personList:[],
+ connectVisible:false,
+ connectPerson:'',
+ loading:false,
}
},
created() {
this.getLaboratoryDicts()
this.getTypeDicts()
this.getInsStateDicts()
+ this.getAuthorizedPerson()
},
mounted() {
this.entityCopy = this.HaveJson(this.componentData.entity)
+ this.getPower()
},
methods: {
+ // 鏉冮檺鍒嗛厤
+ 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.userId = val?0:null
this.refreshTable()
@@ -307,18 +369,21 @@
}
},
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() {
@@ -423,7 +488,52 @@
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
+ }, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }).then(res => {
+ if (res.code === 200 && res.data) {
+ this.loading = false;
+ this.$message.success("浜ゆ帴鎴愬姛")
+ this.connectVisible = false
+ this.refreshTable()
+ }
+ }).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>
diff --git a/src/components/view/enums.vue b/src/components/view/enums.vue
index b00c5a2..2084cb7 100644
--- a/src/components/view/enums.vue
+++ b/src/components/view/enums.vue
@@ -102,6 +102,12 @@
}],
tagField: {},
selectField: {},
+ spanConfig:{
+ rows:{
+ name:'category',
+ index:1
+ },//鍚堝苟琛�,閫氬父娑夊強涓�涓瓧娈�
+ },
requiredAdd:['category','label','value'],
requiredUp:['category','label','value']
},
diff --git a/src/main.js b/src/main.js
index 018e938..def9d78 100644
--- a/src/main.js
+++ b/src/main.js
@@ -13,7 +13,7 @@
//鏈湴
Vue.prototype.LOCATIONVUE = "http://127.0.0.1:80";
-const javaApi = 'http://192.168.0.24:8001';//鏉�
+const javaApi = 'http://192.168.0.10:8001';//鏉�
// const javaApi = 'http://114.132.189.42:9006';//娴嬭瘯鏈�
//鑳滀簯鏈嶅姟鍣�
// Vue.prototype.LOCATIONVUE = "http://syxt.shxiao2.cn";
--
Gitblit v1.9.3