From f55848a34750d26419d6a712b9c181ce4e34985a Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期四, 14 三月 2024 16:10:10 +0800
Subject: [PATCH] 业务管理:检验任务

---
 src/components/view/enums.vue                 |    2 
 src/components/tool/value-table.vue           |   29 ++++
 src/components/view/b1-inspect-order-plan.vue |  273 +++++++++++++++++++++++++++++++++++++++++++++
 static/js/menu.js                             |    4 
 src/util/date.js                              |   16 ++
 src/assets/api/controller.js                  |    9 +
 6 files changed, 326 insertions(+), 7 deletions(-)

diff --git a/src/assets/api/controller.js b/src/assets/api/controller.js
index 63d4c3d..d281f3f 100644
--- a/src/assets/api/controller.js
+++ b/src/assets/api/controller.js
@@ -12,7 +12,8 @@
 		standardTree,
 		standardMethod,
 		StandardTemplate,
-		insOrder
+		insOrder,
+    insOrderPlan
 	}
 }
 
@@ -114,6 +115,12 @@
 	selectInsOrderParameter: "/insOrder/selectInsOrderParameter", //鏌ヨ妫�楠屼笅鍗�
 }
 
+const insOrderPlan = {
+	selectInsOrderPlanList: "/insOrderPlan/selectInsOrderPlanList", //鏌ヨ妫�楠屼换鍔�
+}
+
+
+
 const systemLog = {
 	selectSystemLogList: "/systemLog/selectSystemLogList", //鑾峰彇鏃ュ織
 }
diff --git a/src/components/tool/value-table.vue b/src/components/tool/value-table.vue
index 829f513..5407b08 100644
--- a/src/components/tool/value-table.vue
+++ b/src/components/tool/value-table.vue
@@ -36,6 +36,26 @@
 	}
 </style>
 <style>
+  .value-table .highlight-warning-row-border td{
+    border-top: 2px solid #ffcd29;
+    border-bottom: 2px solid #ffcd29;
+  }
+  .value-table .highlight-warning-row-border td:first-child{
+    border-left: 2px solid #ffcd29;
+  }
+  .value-table .highlight-warning-row-border td:last-child{
+    border-right: 2px solid #ffcd29;
+  }
+  .value-table .highlight-danger-row-border td{
+    border-top: 2px solid red;
+    border-bottom: 2px solid red;
+  }
+  .value-table .highlight-danger-row-border td:first-child{
+    border-left: 2px solid red;
+  }
+  .value-table .highlight-danger-row-border td:last-child{
+    border-right: 2px solid red;
+  }
 	.value-table .el-upload {
 		width: 100%;
 	}
@@ -51,13 +71,13 @@
 			<el-table ref="eltable" :data="tableData" style="width: 100%;" height="100%" tooltip-effect="dark" border
 				@selection-change="selectChange" @select="select" v-loading="loading" @sort-change="sortChange"
 				@row-click="rowClick" :show-summary="data.countFleid!=undefined && data.countFleid.length > 0"
-				:summary-method="getSummaries" :key="Math.random()">
+				:summary-method="getSummaries" :key="Math.random()" :row-class-name="tableRowClassName">
 				<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()">
 				</el-table-column>
 				<el-table-column :prop="a.label" :label="a.value" sortable="custom" v-for="(a, ai) in tableHead" :key="ai"
-					show-overflow-tooltip min-width="160">
+         show-overflow-tooltip min-width="160">
 					<template slot-scope="scope">
 						<div v-if="showType(a.label, data.tagField) != null">
 							<el-tag v-for="(b, bi) in data.tagField[a.label].select" :key="bi" v-if="b.value == scope.row[a.label]"
@@ -195,6 +215,9 @@
 	} from 'iview';
 	export default {
 		props: {
+      tableRowClassName:{
+        type: Function
+      },
 			url: {
 				type: String,
 				default: () => null
@@ -552,7 +575,7 @@
 					return
 				}
 				for (var i = 0; i < this.data.requiredAdd.length; i++) {
-					if (this.upData[this.data.requiredAdd[i]] == null || this.upData[this.data.requiredAdd[i]] == '') {
+					if (this.upData[this.data.requiredAdd[i]] === null || this.upData[this.data.requiredAdd[i]] === '') {
 						var list = this.upHead.filter(a => {
 							if (a.label == this.data.requiredAdd[i]) return a
 						})
diff --git a/src/components/view/b1-inspect-order-plan.vue b/src/components/view/b1-inspect-order-plan.vue
new file mode 100644
index 0000000..d3faffd
--- /dev/null
+++ b/src/components/view/b1-inspect-order-plan.vue
@@ -0,0 +1,273 @@
+<style scoped>
+.ins-order-plan-main{
+  padding-top: 60px;
+}
+.ins-order-plan-main .search{
+  width: 100%;
+  margin-bottom: 10px;
+  height: 10vh;
+  background-color: #fff;
+  border-radius: 3px;
+}
+.search .form-inline{
+  height: 5vh;
+  padding-top:2.5vh;
+  padding-left: 1%;
+}
+.ins-order-plan-main .center{
+  width: 100%;
+  height: 70vh;
+  background-color: #fff;
+  border-radius: 3px;
+}
+.ins-order-plan-main .center .value-table{
+  width:98%;
+  height: 80%;
+  margin-left:1%;
+}
+.tab {
+  list-style-type: none;
+  display: flex;
+  padding: 10px 0px;
+}
+.tab li {
+  line-height: 24px;
+  padding: 6px 14px;
+  font-size: 14px;
+  color: #333333;
+  border: 1px solid #EEEEEE;
+  cursor: pointer;
+}
+
+.tab li:nth-child(1) {
+  border-radius: 8px 0 0 8px;
+}
+
+.tab li:nth-child(3) {
+  border-radius: 0 8px 8px 0;
+}
+
+.tab li.active {
+  border-color: #3A7BFA;
+  color: #3A7BFA;
+}
+.center .center-options:nth-child(1){
+  padding-left: 1%;
+}
+.center .center-options .center-title {
+  width:85%;
+  padding-top: 20px;
+  text-align: right;
+}
+.center .center-options .center-title span:last-child{
+  color: #3A7BFA;
+  font-size: 23px;
+  font-weight: 400;
+}
+
+</style>
+<template>
+  <div class="ins-order-plan-main">
+    <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="20">
+            <ul class="tab">
+              <li v-for="(m,i) in tabList" :key="i" :class="{active:i==tabIndex}" @click="handleTab(m,i)">{{m.label}}</li>
+            </ul>
+          </el-col>
+          <el-col :span="4">
+            <div class="center-title">
+              <span>鎬昏浠诲姟鏁伴噺:</span>
+              <span v-text="planTotal"></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" :key="upIndex" @upUser="upUser"/>
+    </div>
+  </div>
+</template>
+
+<script>
+import ValueTable from '../tool/value-table.vue'
+import { getYearAndMonthAndDays } from '../../util/date'
+export default {
+  components:{
+    ValueTable
+  },
+  data(){
+    return {
+      searchForm:{
+        sampleName: null,
+        state: null
+      },
+      tabList: [
+        {
+          label: '瀹為獙瀹�1',
+          value: 1
+        },
+        {
+          label: '瀹為獙瀹�2',
+          value: 2
+        },
+        {
+          label: '瀹為獙瀹�3',
+          value: 3
+        }
+      ],
+      active: 1,
+      tabIndex: 0,
+      componentData: {
+					entity: {
+            state: 1,
+            insState: null,
+            sample: null,
+						orderBy: {
+							field: 'type',
+							order: 'desc'
+						}
+					},
+					isIndex: true,
+					showSelect: false,
+					select: false,
+					do: [{
+						id: '',
+						font: '妫�楠�',
+						type: 'text',
+						method: '',
+						field:[]
+					},{
+						id: '',
+						font: '浜ゆ帴',
+						type: 'text',
+						method: ''
+					},
+          {
+						id: '',
+						font: '澶嶆牳',
+						type: 'text',
+						method: ''
+					},{
+						id: '',
+						font: '璁ら',
+						type: 'text',
+						method: ''
+					}],
+					tagField: {
+            type:{
+              select:[]
+            },
+            insState:{
+              select:[]
+            }
+          },
+					selectField: {},
+					requiredAdd:[],
+					requiredUp:[]
+				},
+      upIndex: 0,
+      planTotal: 0,
+      insStateList: []
+    }
+  },
+  created(){
+    this.getTypeDicts()
+    this.getInsStateDicts()
+  },
+  methods:{
+    upUser(){
+
+    },
+    refreshTable() {
+      this.$refs.insOrderPlan.selectList()
+      this.$nextTick(()=>{
+        this.planTotal = this.$refs.insOrderPlan.total
+      })
+    },
+    changeRowClass(obj,rowIndex){
+      let currentTime = getYearAndMonthAndDays()
+      if(obj.row.sendTime && currentTime===obj.row.sendTime){
+        return 'highlight-warning-row-border'
+      }else if(obj.row.sendTime && currentTime>obj.row.sendTime){
+        return 'highlight-danger-row-border'
+      }
+      return ''
+    },
+    onReset(){
+      this.searchForm = {
+        sampleName: null,
+        state: null,
+      }
+      this.componentData.entity.insState = null
+      this.componentData.entity.sample = null
+      this.refreshTable()
+    },
+    onSubmit(){
+      this.componentData.entity.insState = this.searchForm.state
+      this.componentData.entity.sample = this.searchForm.sampleName
+      this.$nextTick(()=>{
+        this.refreshTable()
+      })
+    },
+    handleTab(m, i) {
+      this.tabIndex = i;
+      //this.componentData.entity.state = m.value
+      //this.refreshTable()
+    },
+    getTypeDicts() {
+      this.$axios.post(this.$api.enums.selectEnumByCategory, {
+        category: "绱ф�ョ▼搴�"
+      }).then(res => {
+        let data = res.data
+        data.forEach(ele=>{
+          if(ele.value==='0'){
+            ele.type='success'
+          }else if(ele.value==='1'){
+            ele.type='warning'
+          }else if(ele.value==='2'){
+            ele.type='danger'
+          }
+        })
+        this.componentData.tagField.type.select = data
+      })
+    },
+    getInsStateDicts() {
+      this.$axios.post(this.$api.enums.selectEnumByCategory, {
+        category: "妫�楠屼换鍔$姸鎬�"
+      }).then(res => {
+        let data = res.data
+        this.insStateList = data
+        data.forEach(ele=>{
+          //0:寰呮楠� 1:妫�楠屼腑 2:宸叉楠� 3:寰呭鏍� 4:澶嶆牳鏈�氳繃 5:澶嶆牳閫氳繃
+          if(['2','5'].includes(ele.value)){
+            ele.type='success'
+          }else if(['1','3'].includes(ele.value)){
+            ele.type='warning'
+          }else if(['0','4'].includes(ele.value)){
+            ele.type='danger'
+          }
+        })
+        this.componentData.tagField.insState.select = data
+      })
+    },
+  }
+}
+</script>
diff --git a/src/components/view/enums.vue b/src/components/view/enums.vue
index 82eddd5..b00c5a2 100644
--- a/src/components/view/enums.vue
+++ b/src/components/view/enums.vue
@@ -153,4 +153,4 @@
 			}
 		}
 	}
-</script>
\ No newline at end of file
+</script>
diff --git a/src/util/date.js b/src/util/date.js
new file mode 100644
index 0000000..867a406
--- /dev/null
+++ b/src/util/date.js
@@ -0,0 +1,16 @@
+/**
+ * 鑾峰彇骞存湀鏃�
+ */
+export function getYearAndMonthAndDays() {
+  const date = new Date()
+  let year = date.getFullYear()
+  let month = date.getMonth() + 1
+  if (month < 10) {
+    month = '0' + month + '-'
+  } else {
+    month = month + '-'
+  }
+  year = year + '-'
+  let days = date.getDate()
+  return year + month + days
+}
diff --git a/static/js/menu.js b/static/js/menu.js
index d077177..d24b3a4 100644
--- a/static/js/menu.js
+++ b/static/js/menu.js
@@ -22,8 +22,8 @@
 		}, {
 			v: "妫�楠屼换鍔�",
 			i: "font icon-erjidaohang",
-			u: "",
-			p: ""
+			u: "b1-inspect-order-plan",
+			p: "selectInsOrderPlanList"
 		}, {
 			v: "鎶ュ憡缂栧埗",
 			i: "font icon-erjidaohang",

--
Gitblit v1.9.3