From 0b1c5e6680c2986b54866b8dded31c4d9c497fdc Mon Sep 17 00:00:00 2001
From: licp <lichunping@guanfang.com.cn>
Date: 星期一, 22 四月 2024 17:26:47 +0800
Subject: [PATCH] 消息通知页面

---
 static/img/notice-3.svg                          |    1 
 static/img/notice-6.svg                          |    1 
 src/components/view/b4-sample-defects.vue        |  201 +++++++++++++++
 static/js/menu.js                                |   12 
 src/view/index.vue                               |   11 
 src/components/view/b2-standard.vue              |    2 
 src/view/notice.vue                              |  320 ++++++++++++++++++++++++
 static/img/notice-4.svg                          |    1 
 static/img/notice-2.svg                          |    1 
 static/img/notice-1.svg                          |    1 
 src/components/view/a5-laboratory-management.vue |  190 ++++++++++++++
 src/components/view/a6-device-management.vue     |    1 
 static/img/notice-5.svg                          |    1 
 src/components/view/index-index.vue              |    3 
 14 files changed, 735 insertions(+), 11 deletions(-)

diff --git a/src/components/view/a5-laboratory-management.vue b/src/components/view/a5-laboratory-management.vue
index b37f44b..87acad9 100644
--- a/src/components/view/a5-laboratory-management.vue
+++ b/src/components/view/a5-laboratory-management.vue
@@ -34,6 +34,35 @@
 		height: calc(100% - 60px - 80px - 10px - 40px);
 		padding: 20px;
 	}
+  .el-upload {
+    border: 1px dashed #d9d9d9;
+    border-radius: 6px;
+    cursor: pointer;
+    position: relative;
+    overflow: hidden;
+  }
+  .el-upload:hover {
+    border-color: #409EFF;
+  }
+  .avatar-uploader-icon {
+    border: 1px dashed #d9d9d9;
+    font-size: 28px;
+    color: #8c939d;
+    width: 120px;
+    height: 120px;
+    line-height: 120px;
+    text-align: center;
+  }
+  .avatar {
+    width: 120px;
+    height: 120px;
+    display: block;
+  }
+  .btns{
+    position: absolute;
+    right: 80px;
+    top: 13px;
+  }
 </style>
 
 <template>
@@ -67,6 +96,52 @@
 				:upUrl="$api.laboratoryScope.upParameter" :delUrl="$api.laboratoryScope.delParameter"
 				:componentData="componentData" :key="upIndex" />
 		</div>
+    <el-dialog title="鍗扮珷绠$悊" :visible.sync="fileVisible" width="60vw">
+      <div class="btns">
+        <el-button size="medium" type="primary" @click="openUpload">鏇存柊鍗扮珷</el-button>
+      </div>
+      <ValueTable ref="ValueTable0" :url="$api.laboratoryScope.selectItemParameter"
+				:componentData="fileComponentData" :key="upIndex" style="height: 400px;" />
+		</el-dialog>
+    <el-dialog title="鏇存柊鍗扮珷" :visible.sync="upFileVisible" width="400px">
+			<div class="search_thing" style="margin-bottom: 16px;">
+        <div class="search_label" style="width:90px">鍗扮珷绫诲瀷锛�</div>
+        <div class="search_input">
+          <el-cascader
+          v-model="dataForm.insProductIds"
+          :options="options"
+          :show-all-levels="false"
+          :props="props"
+          placeholder="璇烽�夋嫨" size="small"
+          style="width:100%"
+          collapse-tags
+          clearable></el-cascader>
+        </div>
+      </div>
+      <div class="search_thing">
+        <div class="search_label" style="width:90px">鍗扮珷鍥剧墖锛�</div>
+        <div class="search_input">
+          <el-upload
+            :action="action"
+            :headers="headers"
+            accept='image/jpg,image/jpeg,image/png'
+            :show-file-list="false"
+            :on-success="handleSuccess"
+            :on-change="beforeUpload"
+            ref="upload"
+            :on-error="onError"
+            :limit="1"
+            >
+            <img v-if="dataForm.pic1" :src="dataForm.pic1" >
+            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+          </el-upload>
+        </div>
+      </div>
+			<span slot="footer" class="dialog-footer">
+				<el-button @click="upFileVisible = false">鍙� 娑�</el-button>
+				<el-button type="primary" @click="confirmConnect" :loading="loading">纭� 瀹�</el-button>
+			</span>
+		</el-dialog>
 	</div>
 </template>
 
@@ -75,6 +150,16 @@
 	export default {
 		components: {
 			ValueTable
+		},
+    computed: {
+			headers() {
+				return {
+					'token': sessionStorage.getItem('token')
+				}
+			},
+			action() {
+				return this.javaApi + this.$api.deviceScope.uploadFile
+			}
 		},
 		data() {
 			return {
@@ -102,26 +187,92 @@
 						font: '鍒犻櫎',
 						type: 'text',
 						method: 'doDiy'
+					}, {
+						id: '',
+						font: '鍗扮珷绠$悊',
+						type: 'text',
+						method: 'fileManagement'
 					}],
 					tagField: {},
 					selectField: {},
 					requiredAdd: ['laboratoryName', 'laboratoryNumber', 'head', 'phoneNumber'],
 					requiredUp: ['laboratoryName', 'laboratoryNumber', 'head', 'phoneNumber']
 				},
+        fileComponentData: {
+					entity: {
+						orderBy: {
+							field: 'id',
+							order: 'asc'
+						}
+					},
+          isPage:false,
+          init:false,
+					isIndex: true,
+					showSelect: false,
+					select: false,
+					do: [],
+					tagField: {},
+					selectField: {},
+					requiredAdd: [],
+					requiredUp: []
+				},
 				entityCopy: {},
 				upIndex: 0,
 				addDia: true,
-				addPower: true
+				addPower: true,
+        fileVisible:true,
+        upFileVisible:false,
+        loading:false,
+        dataForm:{},
+        props: { multiple: false,emitPath:false,},
+        options:[
+          {
+            value:0,
+            label:'瀹為獙瀹よ祫璐�',
+            children:[]
+          },
+          {
+            value:1,
+            label:'棰濆绫诲瀷',
+            children:null
+          },
+        ]
 			}
 		},
 		mounted() {
 			this.entityCopy = this.HaveJson(this.componentData.entity)
 			this.getPower()
+      this.getCertificationDetail()
 		},
 		methods: {
 			refreshTable() {
 				this.$refs['ValueTable'].selectList()
 			},
+      getCertificationDetail(){
+        this.$axios.post(this.$api.certification.getCertificationDetail, {
+					page: {
+            current: -1,
+            size: -1,
+          },
+					entity: {
+            name: null,
+          }
+				}, {
+					headers: {
+						'Content-Type': 'application/json'
+					}
+				}).then(res => {
+					if (res.code === 201) {
+						return
+					}
+          let arr = res.data.body.records.map(m=>{
+            m.value = m.id;
+            m.label = m.name;
+            return m
+          })
+          this.options[0].children = arr;
+        })
+      },
 			refresh() {
 				this.componentData.entity = this.HaveJson(this.entityCopy)
 				this.upIndex++
@@ -129,6 +280,43 @@
 			openAdd() {
 				this.$refs.ValueTable.openAddDia(this.$api.laboratoryScope.addParameter);
 			},
+      openUpload(){
+        this.dataForm = {};
+        this.upFileVisible = true;
+      },
+      fileManagement(row){
+        this.$refs['ValueTable0'].selectList()
+        this.fileVisible = true;
+      },
+      confirmConnect(){
+        if(!this.dataForm.pic1){
+          this.$message.error('鏈笂浼犱紒涓氬嵃绔�');
+          return
+        }
+        if(!this.dataForm.pic2){
+          this.$message.error('鏈笂浼燙NAS鍗扮珷');
+          return
+        }
+        this.loading = true;
+      },
+      handleSuccess(response,){
+        if (response.code == 200) {
+          this.dataForm.pic1 = response.data
+				}
+      },
+      beforeUpload(file,type) {
+				if (file.size > 1024 * 1024 * 10) {
+					this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+          this.$refs.upload.clearFiles()
+					return false;
+				} else {
+					return true;
+				}
+			},
+			onError(err, file, fileList,type) {
+				this.$message.error('涓婁紶澶辫触')
+				this.$refs.upload.clearFiles()
+			},
 			// 鏉冮檺鍒嗛厤
 			getPower(radio) {
 				let power = JSON.parse(sessionStorage.getItem('power'))
diff --git a/src/components/view/a6-device-management.vue b/src/components/view/a6-device-management.vue
index 718be7c..a491558 100644
--- a/src/components/view/a6-device-management.vue
+++ b/src/components/view/a6-device-management.vue
@@ -615,7 +615,6 @@
               n.value = n.id;
               return n
             })
-            console.log(123,children)
             this.componentData.tagField.insProductIds.select = [...this.componentData.tagField.insProductIds.select,...children]
             this.componentData.selectField.insProductIds.select = [...this.componentData.selectField.insProductIds.select,...children]
             return m
diff --git a/src/components/view/b2-standard.vue b/src/components/view/b2-standard.vue
index ce94306..080f0f7 100644
--- a/src/components/view/b2-standard.vue
+++ b/src/components/view/b2-standard.vue
@@ -110,7 +110,7 @@
 				:filter-node-method="filterNode" @node-click="handleNodeClick" highlight-current @node-expand="nodeOpen"
 				@node-collapse="nodeClose" v-loading="treeLoad" :expand-on-click-node="false"
 				:default-expanded-keys="expandedKeys"
-        style="max-height: 500px;overflow-y: scroll;scrollbar-width: none;">
+        style="height:calc(100% - 30px);overflow-y: scroll;scrollbar-width: none;">
 				<div class="custom-tree-node" slot-scope="{ node, data }">
 					<el-row style="width: 100%;">
 						<el-col :span="21" :class="{sort:node.level>3}">
diff --git a/src/components/view/b4-sample-defects.vue b/src/components/view/b4-sample-defects.vue
new file mode 100644
index 0000000..da232f8
--- /dev/null
+++ b/src/components/view/b4-sample-defects.vue
@@ -0,0 +1,201 @@
+<style scoped>
+	.title {
+		height: 60px;
+		line-height: 60px;
+	}
+
+	.search {
+		background-color: #fff;
+		height: 80px;
+		display: flex;
+		align-items: center;
+	}
+
+	.search_thing {
+		width: 350px;
+		display: flex;
+		align-items: center;
+	}
+
+	.search_label {
+		width: 110px;
+		font-size: 14px;
+		text-align: right;
+	}
+
+	.search_input {
+		width: calc(100% - 110px);
+	}
+
+	.table {
+		margin-top: 10px;
+		background-color: #fff;
+		width: calc(100% - 40px);
+		height: calc(100% - 60px - 80px - 10px - 40px);
+		padding: 20px;
+	}
+  >>>.cell{
+    display: flex;
+    align-items: center;
+  }
+  .page {
+		width: 100%;
+		height: 30px;
+		text-align: right;
+		margin-bottom: 10px;
+	}
+</style>
+
+<template>
+	<div class="role_manage">
+    <div>
+			<el-row class="title">
+				<el-col :span="12" style="padding-left: 20px;">鏍峰搧缂洪櫡鎸囨暟</el-col>
+			</el-row>
+		</div>
+		<div class="search">
+			<div class="search_thing">
+				<div class="search_label">妫�楠岄」鐩細</div>
+				<div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
+						v-model="entity.laboratoryName" @keyup.enter.native="refreshTable()"></el-input></div>
+			</div>
+			<div class="search_thing">
+				<div class="search_label">濮旀墭缂栧彿锛�</div>
+				<div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
+						v-model="entity.laboratoryNumber" @keyup.enter.native="refreshTable()"></el-input></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>
+		<div class="table">
+      <el-table
+        :data="tableData"
+        style="width: 100%;margin-bottom: 10px;height: calc(100% - 40px);"
+        row-key="id"
+        v-loading="loading"
+        border
+        default-expand-all
+        :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
+        <el-table-column
+          prop="date"
+          label="妫�楠岄」鐩�"
+          sortable
+          min-width="180">
+          <template slot-scope="scope">
+            <p>
+              <el-tag style="margin-right: 10px;height: 24px;border-radius: 10px;line-height: 24px;border: 0;" :type="scope.row.level==2?'success':''">{{ '0' + scope.row.level }}</el-tag>
+              <span>{{ scope.row.date }}</span>
+            </p>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="name"
+          label="濮旀墭缂栧彿"
+          sortable
+          min-width="180">
+        </el-table-column>
+        <el-table-column
+          prop="address"
+          label="妫�楠屼汉"
+          min-width="180">
+        </el-table-column>
+        <el-table-column
+          prop="address"
+          label="妫�楠屾椂闂�"
+          min-width="180">
+        </el-table-column>
+      </el-table>
+      <div class="page">
+        <el-pagination @size-change="sizeChange" @current-change="currentChange" :current-page="page.current"
+          :page-sizes="[10, 20, 30, 50, 100]" :page-size="page.size" layout="total, sizes, prev, pager, next, jumper"
+          :total="total" >
+        </el-pagination>
+      </div>
+		</div>
+	</div>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				entity: {},
+        tableData: [{
+          id: 3,
+          date: '2016-05-01',
+          name: '鐜嬪皬铏�',
+          address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1519 寮�',
+          level:1,
+          children: [{
+              id: 31,
+              date: '2016-05-01',
+              name: '鐜嬪皬铏�',
+              address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1519 寮�',
+              level:2,
+            }, {
+              id: 32,
+              date: '2016-05-01',
+              name: '鐜嬪皬铏�',
+              address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1519 寮�',
+              level:2,
+          }]
+        }],
+        page:{
+          current:1,
+          size:20,
+        },
+        total:0,
+        loading:false,
+			}
+		},
+		mounted() {
+
+			this.getPower()
+		},
+		methods: {
+      refreshTable(){
+        this.loading = true
+      },
+      refresh(){
+        this.page.size = 20;
+        this.page.current = 1;
+        this.refreshTable();
+      },
+      sizeChange(val){
+        this.page.size = val
+        this.refreshTable()
+      },
+      currentChange(val){
+        this.page.current = val
+        this.refreshTable()
+      },
+			// 鏉冮檺鍒嗛厤
+			getPower(radio) {
+				let power = JSON.parse(sessionStorage.getItem('power'));
+				let up = false
+				let del = false
+				let add = false
+				for (var i = 0; i < power.length; i++) {
+					if (power[i].menuMethod == 'upParameter') {
+						up = true
+					}
+					if (power[i].menuMethod == 'delParameter') {
+						del = true
+					}
+					if (power[i].menuMethod == 'addParameter') {
+						add = true
+					}
+				}
+				if (!del) {
+					this.componentData.do.splice(1, 1)
+				}
+				if (!up) {
+					this.componentData.do.splice(0, 1)
+				}
+				this.addPower = add
+			}
+		}
+	}
+</script>
diff --git a/src/components/view/index-index.vue b/src/components/view/index-index.vue
index 63d5312..c222aeb 100644
--- a/src/components/view/index-index.vue
+++ b/src/components/view/index-index.vue
@@ -182,6 +182,7 @@
   }
   .left-2-item{
     border-right: 1px solid #F1F1F1;
+    overflow: hidden !important;
   }
   .left-2-item:nth-last-child(1){
     border-right: 0;
@@ -255,7 +256,7 @@
 						</div>
 					</div>
 				</div>
-        <div class="left-2 card" v-loading="workLoading">
+        <div class="left-2 card" v-loading="workLoading" style="overflow: hidden;">
           <div class="left-2-item" v-for="(item,index) in workDay" :key="index">
             <div class="left-item-title">
               <span style="font-size: 18px;">{{ item }}</span>
diff --git a/src/view/index.vue b/src/view/index.vue
index 5bf3b0c..77afae7 100644
--- a/src/view/index.vue
+++ b/src/view/index.vue
@@ -295,6 +295,9 @@
 			</div>
 			<div class="label">LIMS瀹為獙瀹ょ鐞嗙郴缁�</div>
 			<div class="user">
+        <el-badge is-dot style="cursor: pointer;margin-right: 10px;">
+          <i class="el-icon-bell" style="font-size: 20px;" @click="openNotice"></i>
+        </el-badge>
         <el-dropdown trigger="click" @command="handleCommand">
           <el-avatar :size="26">{{ userName.substring(0, 1) }}</el-avatar>
 				  <span>{{ userName }}</span>
@@ -363,6 +366,7 @@
 				</el-card>
 			</el-col>
 		</div>
+    <!-- 淇敼瀵嗙爜 -->
     <el-dialog
       title="淇敼瀵嗙爜"
       :visible.sync="editVisible"
@@ -389,6 +393,7 @@
         <el-button type="primary" @click="handleEdit">纭� 瀹�</el-button>
       </span>
     </el-dialog>
+    <notice ref="notice" />
 	</div>
 </template>
 
@@ -405,9 +410,10 @@
 	});
 	import menus from '../../static/js/menu.js'
 	import nullFace from '../view/404.vue'
+  import notice from './notice.vue'
 	comObj['nullFace'] = nullFace
 	export default {
-		components: comObj,
+		components: {...comObj,notice},
 		data() {
 			return {
 				userName: "value",
@@ -607,6 +613,9 @@
       handleClose(){
         this.editVisible = false
         this.query = {}
+      },
+      openNotice(){
+        this.$refs.notice.open()
       }
 		}
 	};
diff --git a/src/view/notice.vue b/src/view/notice.vue
new file mode 100644
index 0000000..b8657b1
--- /dev/null
+++ b/src/view/notice.vue
@@ -0,0 +1,320 @@
+<template>
+<div class="notice-page">
+  <el-drawer
+  title="娑堟伅閫氱煡"
+  :visible.sync="drawer"
+  :direction="direction"
+  :before-close="handleClose" style="height: 100vh;">
+    <div class="head">
+      <div class="head-search">
+        <label>娑堟伅绫诲瀷锛�</label>
+        <el-select v-model="type" placeholder="璇烽�夋嫨" style="width: 150px;" size="small">
+        <el-option
+          v-for="item in options"
+          :key="item.value"
+          :label="item.label"
+          :value="item.value">
+        </el-option>
+      </el-select>
+      </div>
+      <el-dropdown style="margin-right: 20px;">
+        <span class="el-dropdown-link">
+          <span class="more">&middot;&middot;&middot;</span>
+        </span>
+        <el-dropdown-menu slot="dropdown">
+          <el-dropdown-item>
+            <i class="el-icon-check"></i>
+            <span>鏍囪鎵�鏈夋秷鎭负宸茶</span>
+          </el-dropdown-item>
+          <el-dropdown-item>
+            <i class="el-icon-delete"></i>
+            <span>鍒犻櫎鎵�鏈夊凡璇绘秷鎭�</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="notice-content">
+      <div class="notice-content-item" v-for="(m,i) in list" :key="i">
+        <div class="btns">
+          <el-dropdown style="margin-right: 20px;" trigger="click">
+            <span class="el-dropdown-link">
+              <span class="more" style="line-height: 26px;display: inline-block;">&middot;&middot;&middot;</span>
+            </span>
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item>
+                鎷掔粷
+              </el-dropdown-item>
+              <el-dropdown-item>
+                鎺ユ敹
+              </el-dropdown-item>
+              <el-dropdown-item>
+                閫氳繃
+              </el-dropdown-item>
+              <el-dropdown-item>
+                涓嶉�氳繃
+              </el-dropdown-item>
+              <el-dropdown-item>
+                鎵瑰噯
+              </el-dropdown-item>
+              <el-dropdown-item>
+                涓嶆壒鍑�
+              </el-dropdown-item>
+              <el-dropdown-item>
+                鏇村
+              </el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+          <i class="el-icon-close" style="cursor: pointer;"></i>
+        </div>
+        <div class="content">
+          <img :src="`../../static/img/notice-${m.type}.svg`" alt="" style="width: 50px;margin-right: 18px;">
+          <div class="content-info">
+            <h4 style="font-weight: normal;margin-bottom: 6px;display: flex;align-items: center;justify-content: space-between;">
+              <span>{{ m.title }}</span>
+              <span class="time" style="color: #999999;font-size: 14px;">{{ m.time }}</span>
+            </h4>
+            <p style="color: #999999;font-size: 14px;margin-bottom: 8px;" class="ellipsis-multiline">{{ m.content }}</p>
+            <el-tag type="danger" v-if="m.status==0">宸叉嫆缁�</el-tag>
+            <el-tag type="success" v-if="m.status==1">宸叉帴鏀�</el-tag>
+            <p style="font-size: 14px;color: #999999;display: flex;align-items: center;justify-content: space-between;">
+              <span>鍙戦�佷汉锛歿{m.sendUser}}</span>
+              <span>鏀朵欢浜猴細{{ m.getUser }}</span>
+            </p>
+          </div>
+        </div>
+        <div class="new-notice" v-if="m.isRead==0">
+          <span>new</span>
+        </div>
+      </div>
+    </div>
+  </el-drawer>
+</div>
+</template>
+
+<script>
+export default {
+  data(){
+    return{
+      drawer:true,
+      direction:'rtl',
+      options:[],
+      type:'0',
+      list:[
+        {
+          type:1,
+          title:'鏍囬',
+          content:'鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭鍐呭',
+          time:'2019-08-07 15:34:26',
+          status:1,//娑堟伅鐘舵�侊細鎷掔粷銆佹帴鏀�
+          isRead:0,//鏄惁宸茶
+          sendUser:'灏忔槑',
+          getUser:'鏉庡崕',
+        },
+        {
+          type:2,
+          title:'鏍囬',
+          content:'鍐呭',
+          time:'2019-08-07 15:34:26',
+          status:1,//娑堟伅鐘舵�侊細鎷掔粷銆佹帴鏀�
+          isRead:1,//鏄惁宸茶
+          sendUser:'灏忔槑',
+          getUser:'鏉庡崕',
+        },
+        {
+          type:3,
+          title:'鏍囬',
+          content:'鍐呭',
+          time:'2019-08-07 15:34:26',
+          status:1,//娑堟伅鐘舵�侊細鎷掔粷銆佹帴鏀�
+          isRead:0,//鏄惁宸茶
+          sendUser:'灏忔槑',
+          getUser:'鏉庡崕',
+        },
+        {
+          type:4,
+          title:'鏍囬',
+          content:'鍐呭',
+          time:'2019-08-07 15:34:26',
+          status:1,//娑堟伅鐘舵�侊細鎷掔粷銆佹帴鏀�
+          isRead:0,//鏄惁宸茶
+          sendUser:'灏忔槑',
+          getUser:'鏉庡崕',
+        },
+        {
+          type:5,
+          title:'鏍囬',
+          content:'鍐呭',
+          time:'2019-08-07 15:34:26',
+          status:1,//娑堟伅鐘舵�侊細鎷掔粷銆佹帴鏀�
+          isRead:0,//鏄惁宸茶
+          sendUser:'灏忔槑',
+          getUser:'鏉庡崕',
+        },
+        {
+          type:6,
+          title:'鏍囬',
+          content:'鍐呭',
+          time:'2019-08-07 15:34:26',
+          status:1,//娑堟伅鐘舵�侊細鎷掔粷銆佹帴鏀�
+          isRead:1,//鏄惁宸茶
+          sendUser:'灏忔槑',
+          getUser:'鏉庡崕',
+        },
+        {
+          type:6,
+          title:'鏍囬',
+          content:'鍐呭',
+          time:'2019-08-07 15:34:26',
+          status:1,//娑堟伅鐘舵�侊細鎷掔粷銆佹帴鏀�
+          isRead:1,//鏄惁宸茶
+          sendUser:'灏忔槑',
+          getUser:'鏉庡崕',
+        },
+        {
+          type:6,
+          title:'鏍囬',
+          content:'鍐呭',
+          time:'2019-08-07 15:34:26',
+          status:1,//娑堟伅鐘舵�侊細鎷掔粷銆佹帴鏀�
+          isRead:1,//鏄惁宸茶
+          sendUser:'灏忔槑',
+          getUser:'鏉庡崕',
+        },
+        {
+          type:6,
+          title:'鏍囬',
+          content:'鍐呭',
+          time:'2019-08-07 15:34:26',
+          status:1,//娑堟伅鐘舵�侊細鎷掔粷銆佹帴鏀�
+          isRead:1,//鏄惁宸茶
+          sendUser:'灏忔槑',
+          getUser:'鏉庡崕',
+        },
+        {
+          type:6,
+          title:'鏍囬',
+          content:'鍐呭',
+          time:'2019-08-07 15:34:26',
+          status:1,//娑堟伅鐘舵�侊細鎷掔粷銆佹帴鏀�
+          isRead:1,//鏄惁宸茶
+          sendUser:'灏忔槑',
+          getUser:'鏉庡崕',
+        },
+      ]
+    }
+  },
+  mounted(){
+    this.getTypeDicts();
+  },
+  methods:{
+    open(){
+      this.drawer = true;
+    },
+    handleClose(){
+      this.drawer = false;
+    },
+    getTypeDicts() {
+      this.$axios.post(this.$api.enums.selectEnumByCategory, {
+        category: "娑堟伅绫诲瀷"
+      }).then(res => {
+        let data = res.data
+        this.options = data;
+      })
+    },
+  }
+}
+</script>
+
+<style scoped>
+>>>.el-drawer__header::before {
+  content: "";
+  display: inline-block;
+  width: 4px;
+  height: 30.24px;
+  background: #3A7BFA;
+  border-radius: 10px;
+  margin-left: 32px;
+  margin-right: 8.5px;
+}
+
+>>>.el-drawer__header {
+  color: #303133;
+}
+>>>.el-drawer__body{
+  box-sizing: border-box;
+  padding: 0 16px;
+  height: calc(100vh - 82px);
+  overflow: hidden;
+}
+.head{
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  margin-bottom: 16px;
+}
+.more{
+  font-size: 20px;
+  color: grey !important;
+  cursor: pointer;
+}
+.notice-content{
+  height: calc(100% - 60px);
+  overflow-y: auto;
+}
+.notice-content-item{
+  position: relative;
+  width: 100%;
+  padding: 16px;
+  border-radius: 8px;
+  box-sizing: border-box;
+  border: 1px solid #EEEEEE;
+  margin-bottom: 10px;
+  overflow: hidden;
+}
+.btns{
+  position: absolute;
+  right: 20px;
+  top: 4px;
+}
+.notice-content-item .btns{
+  opacity: 0;
+}
+.time{
+  opacity: 1;
+}
+.notice-content-item:hover{
+  box-shadow: 4px 4px 8px 0px rgba(51,51,51,0.04);
+}
+.notice-content-item:hover .btns{
+  opacity: 1;
+}
+.notice-content-item:hover .time{
+  opacity: 0;
+}
+.content{
+  display: flex;
+  align-items: center;
+}
+.content-info{
+  flex: 1;
+}
+.new-notice{
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 0;
+  height: 0;
+  border-top: 14px solid red;
+  border-right: 14px solid transparent;
+  border-bottom: 14px solid transparent;
+  border-left: 14px solid red;
+}
+.new-notice span{
+  position: absolute;
+  font-size: 12px;
+  top: -13px;
+  left: -17px;
+  color: #fff;
+  transform: rotate(-45deg) scale(0.8);
+}
+</style>
diff --git a/static/img/notice-1.svg b/static/img/notice-1.svg
new file mode 100644
index 0000000..2998671
--- /dev/null
+++ b/static/img/notice-1.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1713774541141" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2168" width="24" height="24" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M533.333333 533.333333h117.333334a32 32 0 1 1 0 64h-149.333334a31.914667 31.914667 0 0 1-32-32v-192a32 32 0 1 1 64 0v160zM85.333333 0h853.333334a85.333333 85.333333 0 0 1 85.333333 85.333333v853.333334a85.333333 85.333333 0 0 1-85.333333 85.333333H85.333333a85.333333 85.333333 0 0 1-85.333333-85.333333V85.333333a85.333333 85.333333 0 0 1 85.333333-85.333333z m426.666667 810.666667a298.666667 298.666667 0 1 0 0-597.333334 298.666667 298.666667 0 0 0 0 597.333334z" fill="#F57818" p-id="2169"></path></svg>
\ No newline at end of file
diff --git a/static/img/notice-2.svg b/static/img/notice-2.svg
new file mode 100644
index 0000000..ac86ffb
--- /dev/null
+++ b/static/img/notice-2.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1713774580175" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2343" width="24" height="24" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M85.333333 0h853.333334a85.333333 85.333333 0 0 1 85.333333 85.333333v853.333334a85.333333 85.333333 0 0 1-85.333333 85.333333H85.333333a85.333333 85.333333 0 0 1-85.333333-85.333333V85.333333a85.333333 85.333333 0 0 1 85.333333-85.333333z m426.666667 213.333333c-68.778667-0.682667-278.144 112.426667-277.333333 149.248 3.242667 296.96 225.322667 447.744 277.333333 448.085334 52.010667 0.341333 278.613333-148.565333 277.333333-448-0.256-37.418667-208.554667-148.650667-277.333333-149.333334z m164.394667 196.010667c12.032 12.458667 12.032 32.981333-0.725334 44.672l-155.264 160.426667a30.506667 30.506667 0 0 1-22.656 9.557333 32.085333 32.085333 0 0 1-23.381333-9.514667l-91.477333-93.781333c-12.757333-13.226667-12.757333-33.706667 0-46.890667 12.8-13.226667 33.322667-13.226667 46.08 0l70.186666 72.533334 132.565334-137.002667a31.36 31.36 0 0 1 44.672 0z" fill="#15B4D4" p-id="2344"></path></svg>
\ No newline at end of file
diff --git a/static/img/notice-3.svg b/static/img/notice-3.svg
new file mode 100644
index 0000000..415db6a
--- /dev/null
+++ b/static/img/notice-3.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1713774491978" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1483" width="24" height="24" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M554.666667 554.666667v-92.586667a128.042667 128.042667 0 1 0-85.333334 0V554.666667H267.946667a42.666667 42.666667 0 0 0-41.386667 53.034666l21.333333 85.333334a42.666667 42.666667 0 0 0 41.386667 32.298666h445.44a42.666667 42.666667 0 0 0 41.386667-32.298666l21.333333-85.333334A42.666667 42.666667 0 0 0 756.053333 554.666667H554.666667zM85.333333 0h853.333334a85.333333 85.333333 0 0 1 85.333333 85.333333v853.333334a85.333333 85.333333 0 0 1-85.333333 85.333333H85.333333a85.333333 85.333333 0 0 1-85.333333-85.333333V85.333333a85.333333 85.333333 0 0 1 85.333333-85.333333z m234.666667 768a21.333333 21.333333 0 1 0 0 42.666667h384a21.333333 21.333333 0 1 0 0-42.666667h-384z" fill="#FAAB0C" p-id="1484"></path></svg>
\ No newline at end of file
diff --git a/static/img/notice-4.svg b/static/img/notice-4.svg
new file mode 100644
index 0000000..dcfcf93
--- /dev/null
+++ b/static/img/notice-4.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1713774535390" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1993" width="24" height="24" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M85.333333 0h853.333334a85.333333 85.333333 0 0 1 85.333333 85.333333v853.333334a85.333333 85.333333 0 0 1-85.333333 85.333333H85.333333a85.333333 85.333333 0 0 1-85.333333-85.333333V85.333333a85.333333 85.333333 0 0 1 85.333333-85.333333z m426.666667 810.666667a298.666667 298.666667 0 1 0 0-597.333334 298.666667 298.666667 0 0 0 0 597.333334z m-170.666667-256a42.666667 42.666667 0 1 1 0-85.333334 42.666667 42.666667 0 0 1 0 85.333334z m170.666667 0a42.666667 42.666667 0 1 1 0-85.333334 42.666667 42.666667 0 0 1 0 85.333334z m170.666667 0a42.666667 42.666667 0 1 1 0-85.333334 42.666667 42.666667 0 0 1 0 85.333334z" fill="#B162D9" p-id="1994"></path></svg>
\ No newline at end of file
diff --git a/static/img/notice-5.svg b/static/img/notice-5.svg
new file mode 100644
index 0000000..39c8f84
--- /dev/null
+++ b/static/img/notice-5.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1713774524927" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1786" width="24" height="24" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M85.333333 0h853.333334a85.333333 85.333333 0 0 1 85.333333 85.333333v853.333334a85.333333 85.333333 0 0 1-85.333333 85.333333H85.333333a85.333333 85.333333 0 0 1-85.333333-85.333333V85.333333a85.333333 85.333333 0 0 1 85.333333-85.333333z m496.426667 257.792c-31.317333-59.306667-108.202667-59.306667-139.52 0L224.469333 672.853333C193.152 733.738667 231.594667 810.666667 294.229333 810.666667h435.541334c62.634667 0 101.12-76.928 69.76-137.813334l-217.770667-415.061333zM512 725.333333a42.666667 42.666667 0 1 1 0-85.333333 42.666667 42.666667 0 0 1 0 85.333333z m-0.938667-341.333333a40.874667 40.874667 0 0 1 40.746667 44.16l-11.562667 143.530667c-1.194667 14.506667-13.269333 25.642667-27.818666 25.642666a28.245333 28.245333 0 0 1-28.074667-25.6l-13.44-143.616A40.362667 40.362667 0 0 1 511.061333 384z" fill="#EA493D" p-id="1787"></path></svg>
\ No newline at end of file
diff --git a/static/img/notice-6.svg b/static/img/notice-6.svg
new file mode 100644
index 0000000..cb6d3b9
--- /dev/null
+++ b/static/img/notice-6.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1713774611710" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3358" width="24" height="24" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M85.333333 0h853.333334a85.333333 85.333333 0 0 1 85.333333 85.333333v853.333334a85.333333 85.333333 0 0 1-85.333333 85.333333H85.333333a85.333333 85.333333 0 0 1-85.333333-85.333333V85.333333a85.333333 85.333333 0 0 1 85.333333-85.333333z m227.541334 213.333333C257.92 213.333333 213.333333 249.002667 213.333333 292.992v438.016C213.333333 774.997333 257.92 810.666667 312.874667 810.666667h398.250666C766.08 810.666667 810.666667 774.997333 810.666667 731.008V292.992C810.666667 249.002667 766.08 213.333333 711.125333 213.333333H312.874667z m149.333333 85.333334a64 64 0 1 1 0 128 64 64 0 0 1 0-128z m-128 220.842666h355.584c19.626667 0 35.541333 14.336 35.541333 32 0 17.706667-15.914667 32-35.541333 32H334.208c-19.626667 0-35.541333-14.293333-35.541333-32 0-17.664 15.914667-32 35.541333-32z m0 130.56H512c19.626667 0 35.541333 14.293333 35.541333 32 0 17.664-15.914667 32-35.541333 32H334.208c-19.626667 0-35.541333-14.336-35.541333-32 0-17.706667 15.914667-32 35.541333-32z" fill="#F57818" p-id="3359"></path></svg>
\ No newline at end of file
diff --git a/static/js/menu.js b/static/js/menu.js
index 4f17007..afe46e8 100644
--- a/static/js/menu.js
+++ b/static/js/menu.js
@@ -111,16 +111,16 @@
 			v: "姣忔棩涓氬姟缁熻",
 			i: "font icon-erjidaohang",
 			u: "b4-daily-business-statistics",
-			p: ""
+			p: "businessStatisticsByDay"
 		}, {
 			v: "妫�娴嬮」鐩粺璁�",
 			i: "font icon-erjidaohang",
 			u: "b4-inspection-item-statistics",
-			p: ""
+			p: "testProductByDay"
 		}, {
 			v: "鏍峰搧缂洪櫡鎸囨暟",
 			i: "font icon-erjidaohang",
-			u: "",
+			u: "b4-sample-defects",
 			p: ""
 		}, {
 			v: "鑰楁潗缁熻",
@@ -234,7 +234,7 @@
 			i: "font icon-erjidaohang",
 			u: "a5-laboratory-qualifications",
 			g: "C鑳藉姏鑼冨洿鍜岃祫璐�",
-			p: ""
+			p: "getCertificationDetail"
 		}, {
 			v: "鑳藉姏鑼冨洿",
 			i: "font icon-erjidaohang",
@@ -281,13 +281,13 @@
 			i: "font icon-erjidaohang",
 			u: "a6-personnel-overview",
 			g: "6.2 浜哄憳",
-			p: ""
+			p: "selectUserList"
 		}, {
 			v: "浜哄憳鏄庣粏",
 			i: "font icon-erjidaohang",
 			u: "a6-personnel-detail",
 			g: "6.2 浜哄憳",
-			p: ""
+			p: "selectUserList"
 		}, {
 			v: "浜哄憳鍩硅",
 			i: "font icon-erjidaohang",

--
Gitblit v1.9.3