From 6cd44812a96026d6c6d0fff397eb2662c75fedd3 Mon Sep 17 00:00:00 2001 From: Goldennfish <1981343953@qq.com> Date: 星期五, 28 七月 2023 17:00:04 +0800 Subject: [PATCH] 实验室管理设备台账完善 --- src/views/laboratory/ledger/index.vue | 1225 +++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 1,124 insertions(+), 101 deletions(-) diff --git a/src/views/laboratory/ledger/index.vue b/src/views/laboratory/ledger/index.vue index 619ac3b..f092459 100644 --- a/src/views/laboratory/ledger/index.vue +++ b/src/views/laboratory/ledger/index.vue @@ -2,7 +2,7 @@ <div class="ledger-main"> <div class="page-header-search"> <div class="search-bar"> - <el-form ref="form" inline="true" :model="searchData"> + <el-form ref="form" :inline="true" :model="searchData"> <el-form-item> <el-input v-model="searchData.keyword" @@ -12,43 +12,50 @@ </el-input> </el-form-item> <el-form-item> - <el-button type="primary">鏌ヨ</el-button> - <el-button type="primary" plain>閲嶇疆</el-button> + <el-button type="primary" @click="filterTableData">鏌ヨ</el-button> + <el-button type="primary" plain @click="resetBtn">閲嶇疆</el-button> <!-- <el-button type="text">楂樼骇鎼滅储<i class="el-icon-arrow-down el-icon--right" /></el-button> --> </el-form-item> </el-form> </div> <div class="serve-btn"> - <el-button type="primary" icon="el-icon-plus">鏂板浜哄憳</el-button> + <el-button type="primary" icon="el-icon-plus" @click="addDrawerVisible = true">鏂板浠櫒</el-button> </div> </div> <div class="content-main"> <div class="library-bom"> - <el-input - v-model="filterText" - placeholder="杈撳叆鍏抽敭瀛楄繘琛岃繃婊�" - /> + <div class="bom-item-search"> + <el-row> + <el-col :span="19"> + <el-input + v-model="filterText" + placeholder="杈撳叆鍏抽敭瀛楄繘琛岃繃婊�" + /> + </el-col> + <el-col :span="5"> + <el-button type="primary" size="small" @click="addClassVisible = true"><i class="el-icon-plus" /></el-button> + </el-col> + </el-row> + </div> <el-tree - ref="tree" - class="filter-tree" - :data="data" + ref="classTree" + :data="classTree" :props="defaultProps" - default-expand-all + :default-expand-all="true" :filter-node-method="filterNode" + @node-click="nodeClickHandler" /> </div> <div class="library-table"> <div class="table-header"> <div class="search-bar"> - <el-radio-group v-model="radioValue"> - <el-radio-button label="鍏ㄩ儴" /> - <el-radio-button label="杩愯" /> - <el-radio-button label="寰呮満" /> - <el-radio-button label="妫�淇�" /> - <el-radio-button label="鏁呴殰" /> - <el-radio-button label="鎶ュ簾" /> + <el-radio-group v-model="radioValue" @change="getConditionTable"> + <!-- <el-radio-button label="0">鍏ㄩ儴</el-radio-button> --> + <el-radio-button v-for="item in conditionsOptions" :key="item.value" :label="item.value"> + {{ item.label }} + </el-radio-button> </el-radio-group> - <el-checkbox v-model="isOut" :style="{'marginLeft':'12px'}">宸茶繃鏈�</el-checkbox> + <el-checkbox v-model="isOut" @change="getExpireTable" :style="{'marginLeft':'12px'}">宸茶繃鏈�</el-checkbox> </div> <div class="serve-btn"> <!-- <el-button type="primary" icon="el-icon-plus">鏂板浜哄憳</el-button> --> @@ -56,86 +63,100 @@ </div> <div class="table-box"> <el-table - ref="personnerlTable" - + ref="equipmentTable" + node-key="father_name" :cell-style="{textAlign: 'center'}" :header-cell-style="{border:'0px',background:'#f5f7fa',color:'#606266',boxShadow: 'inset 0 1px 0 #ebeef5',textAlign: 'center'}" - :data="personnerlTable" + :data="equipmentTable" style="width: 100%" > <el-table-column - prop="roleName" + type="index" label="搴忓彿" min-width="90" /> <el-table-column - prop="rolePermissions" + prop="equipment_code" label="浠櫒璁惧缂栧彿" - min-width="150" + min-width="200" /> <el-table-column - prop="age" + prop="equipment_name" label="浠櫒璁惧鍚嶇О" min-width="150" /> <el-table-column - prop="creatTime" + prop="specifications_models" label="瑙勬牸鍨嬪彿" min-width="150" /> <el-table-column - prop="phone" - label="涓婃璁¢噺鏃堕棿" + prop="name" + label="淇濈浜�" min-width="200" /> <el-table-column - prop="mailbox" - label="涓婃璁¢噺鍗曚綅" + prop="termValidity" + label="璁¢噺鎴鏈夋晥鏈�" min-width="200" /> <el-table-column - prop="mailbox" - label="鎴鏈夋晥鏈�" - min-width="200" - /> - <el-table-column - prop="mailbox" - label="璁¢噺鍛ㄦ湡" - min-width="200" - /> - <el-table-column - prop="incumbentStatus" + prop="conditions" label="璁惧鐘舵��" min-width="120" - :filters="[{ text: 0, value: 0 }, { text: 1, value: 1 }]" - :filter-method="filterTag" - filter-placement="bottom-end" > <template slot-scope="scope"> <el-tag - :type="scope.row.businessStatus === 0 ? 'primary' : 'success'" + :type="scope.row.conditions === 0 ? 'primary' : 'success'" disable-transitions - >{{ scope.row.businessStatus === 0 ? '鏈悓鎰�' : '宸插悓鎰�' }}</el-tag> + >{{ scope.row.conditions | conditionsFilter }}</el-tag> </template> </el-table-column> <el-table-column + prop="storage_place" + label="瀛樻斁鍦�" + min-width="200" + /> + + <el-table-column label="鎿嶄綔" min-width="120" - :fixed="true" + fixed="right" > <template slot-scope="scope"> - <el-button type="text" size="small" @click="handleClick(scope.row)">缂栬緫</el-button> - <!-- <el-button type="text" size="small">缂栬緫</el-button> --> + <el-button type="text" size="small" @click="openDetail(scope.row)">缂栬緫</el-button> + <el-button type="text" size="small" @click="clickDelete(scope.row)">鍒犻櫎</el-button> </template> </el-table-column> </el-table> + <!-- 寮瑰嚭琛ㄥ崟椤� --> + <div> + <!-- 娣诲姞鍒嗙被 --> + <el-dialog title="娣诲姞鍒嗙被" :visible.sync="addClassVisible" width="33%"> + <el-form :model="addTreeForm"> + <el-form-item label="鍒嗙被鍚嶇О" label-width="100px"> + <el-input v-model="addTreeForm.name" autocomplete="off" /> + </el-form-item> + <el-form-item label="鐖剁骇鍒嗙被" label-width="100px"> + <el-select v-model="addTreeForm.type" placeholder="璇烽�夋嫨"> + <el-option label="鍘熸潗鏂�" value="0" /> + <el-option label="鐢电嚎鐢电紗" value="1" /> + </el-select> + </el-form-item> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button @click="addClassVisible = false">鍙� 娑�</el-button> + <el-button type="primary">纭� 瀹�</el-button> + </div> + </el-dialog> + </div> <div> <el-pagination :current-page="currentPage" - :page-sizes="[100, 200, 300, 400]" - :page-size="100" + :page-sizes="[10, 15, 20, 25]" + :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" - :total="400" + :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" /> @@ -143,29 +164,589 @@ </div> </div> </div> + <!-- 浠櫒璇︽儏--> + <el-drawer + title="浠櫒璁惧璇︽儏" + :visible.sync="detailDrawer" + size="80%" + class="detailDrawer" + @close="closeDetailDrawer" + > + <div> + <div class="detail-info"> + <div class="tips-main"> + <div class="tips"> + <span /> + <div>鍩烘湰淇℃伅</div> + </div> + <div class="tips-btn"> + <el-button type="primary" @click="addDrawerVisible = true">缂栬緫</el-button> + </div> + </div> + <div class="message"> + <div class="message-item"><span><i class="el-icon-edit" />鎵�灞炲垎绫伙細{{ equipmentDetail.classifyId }}</span></div> + <div class="message-item"> + <span><i class="el-icon-edit" />鍒涘缓浜猴細{{ equipmentDetail.createUserId }}</span> + <el-tag type="primary"><i class="el-icon-info" :style="{marginRight:'4px', color:'#409EFF'}" /></el-tag> + </div> + <div class="message-item"> + <span><i class="el-icon-edit" />寤烘。鏃ユ湡锛歿{ equipmentDetail.acceptanceDate }}</span> + </div> + <div class="message-item"> + <span><i class="el-icon-edit" />璁惧缂栧彿锛歿{ equipmentDetail.equipmentCode }}</span> + </div> + <div class="message-item"> + <span><i class="el-icon-edit" />鍨嬪彿瑙勬牸锛歿{ equipmentDetail.specificationsModels }}</span> + </div> + <div class="message-item"> + <span><i class="el-icon-edit" />娴嬮噺鑼冨洿锛歿{ equipmentDetail.measuringRange }}</span> + </div> + <div class="message-item"> + <span><i class="el-icon-edit" />涓嶇‘瀹氬害/璇樊锛歿{ equipmentDetail.errorRate }}</span> + </div> + <div class="message-item"> + <span><i class="el-icon-edit" />鐢熶骇鍘傚锛歿{ equipmentDetail.manufacturer }}</span> + </div> + <div class="message-item"> + <span><i class="el-icon-edit" />瀛樻斁鍦扮偣锛歿{ equipmentDetail.storagePlace }}</span> + </div> + <div class="message-item"> + <span><i class="el-icon-edit" />鍒拌揣鏃ユ湡锛歿{ equipmentDetail.arrivalDate }}</span> + </div> + <div class="message-item"> + <span><i class="el-icon-edit" />楠屾敹鏃ユ湡锛歿{ equipmentDetail.acceptanceDate }}</span> + </div> + <div class="message-item"> + <span><i class="el-icon-edit" />淇濈浜猴細{{ equipmentDetail.userId }}</span> + </div> + <div class="message-item"> + <span><i class="el-icon-edit" />鏄惁鏀寔鏁伴噰锛歿{ equipmentDetail.whetherDataAcquisition==1 ? '鏀寔': '涓嶆敮鎸�' }}</span> + </div> + <div class="message-item"> + <span><i class="el-icon-edit" />浠櫒璁惧璁¢噺锛歿{ equipmentDetail.equipmentMeasurement==1 ? '闇�瑕�': '涓嶉渶瑕�' }}</span> + </div> + <div class="message-item"> + <span><i class="el-icon-edit" />璁¢噺鍛ㄦ湡锛歿{ equipmentDetail.termValidity }}</span> + </div> + <div class="message-item"> + <span><i class="el-icon-edit" />鎻忚堪锛歿{ equipmentDetail.descriptiveness }}</span> + </div> + </div> + </div> + <el-tabs v-model="activeTabsName"> + <el-tab-pane label="璁惧鐮佺偣" name="codePoints"> + <el-button v-show="!codePointesTableStatus" :style="{marginBottom: '18px'}" @click="addCodePoints">鏂板璁惧鐮佺偣</el-button> + <div v-show="codePointesTableStatus" :style="{marginBottom: '18px'}" class="btns"> + <el-button @click="addNewCodePoints">娣诲姞</el-button> + <el-button @click="saveCodePoins">淇濆瓨</el-button> + <el-button @click="closeCodePoins">鍙栨秷</el-button> + </div> + + <el-table + ref="codePointsTable" + :cell-style="{textAlign: 'center'}" + :header-cell-style="{border:'0px',background:'#f5f7fa',color:'#606266',boxShadow: 'inset 0 1px 0 #ebeef5',textAlign: 'center'}" + :data="codePointsTable" + style="width: 100%" + > + <el-table-column + type="index" + label="搴忓彿" + min-width="90" + /> + <el-table-column + prop="equipmentPoint" + label="鐮佺偣缂栫爜" + min-width="150" + > + <template slot-scope="scope"> + <span v-show="!codePointesTableStatus">{{ scope.row.equipmentPoint }}</span> + <el-input v-show="codePointesTableStatus" v-model="scope.row.equipmentPoint" /> + </template> + </el-table-column> + + <el-table-column + prop="equipmentPointName" + label="鐮佺偣鍚嶇О" + min-width="150" + > + <template slot-scope="scope"> + <span v-show="!codePointesTableStatus">{{ scope.row.equipmentPointName }}</span> + <el-input v-show="codePointesTableStatus" v-model="scope.row.equipmentPointName" /> + </template> + </el-table-column> + <el-table-column + prop="unit" + label="鍗曚綅" + min-width="150" + > + <template slot-scope="scope"> + <span v-show="!codePointesTableStatus">{{ scope.row.unit }}</span> + <el-input v-show="codePointesTableStatus" v-model="scope.row.unit" /> + </template> + </el-table-column> + <el-table-column + prop="name" + label="鏇存柊浜�" + min-width="100" + /> + <el-table-column + prop="updateTime" + label="鏇存柊鏃ユ湡" + min-width="120" + /> + <el-table-column + prop="descriptiveness" + label="鎻忚堪" + min-width="200" + > + <template slot-scope="scope"> + <span v-show="!codePointesTableStatus">{{ scope.row.descriptiveness }}</span> + <el-input v-show="codePointesTableStatus" v-model="scope.row.descriptiveness" /> + </template> + </el-table-column> + + </el-table> + </el-tab-pane> + <el-tab-pane label="璁¢噺淇℃伅" name="measure"> + <el-button :style="{marginBottom: '18px'}" @click="measureFormVisible = true">鏂板璁¢噺淇℃伅</el-button> + <el-table + ref="measureTable" + :cell-style="{textAlign: 'center'}" + :header-cell-style="{border:'0px',background:'#f5f7fa',color:'#606266',boxShadow: 'inset 0 1px 0 #ebeef5',textAlign: 'center'}" + :data="measureTable" + style="width: 100%" + > + <el-table-column + type="index" + label="搴忓彿" + min-width="90" + /> + <el-table-column + prop="name" + label="璐熻矗浜�" + min-width="200" + /> + <el-table-column + prop="measurement_unit" + label="璁¢噺鍗曚綅" + min-width="150" + /> + <el-table-column + prop="beginDate" + label="寮�濮嬫棩鏈�" + min-width="150" + /> + <el-table-column + prop="endDate" + label="缁撴潫鏃ユ湡" + min-width="150" + /> + <el-table-column + prop="performance_index" + label="鎬ц兘鎸囨爣" + min-width="200" + /> + <el-table-column + prop="uncertainty" + label="涓嶇‘瀹氬害" + min-width="200" + /> + <el-table-column + prop="conditions" + label="缁撴灉" + min-width="120" + > + <template slot-scope="scope"> + {{ scope.row.result }} + <!-- <el-tag + :type="scope.row.result === 0 ? 'primary' : 'success'" + disable-transitions + >{{ scope.row.result === 0 ? '鏈悓鎰�' : '宸插悓鎰�' }}</el-tag> --> + </template> + </el-table-column> + <el-table-column + prop="remarks" + label="澶囨敞" + min-width="200" + /> + </el-table> + </el-tab-pane> + </el-tabs> + </div> + </el-drawer> + <!-- 娣诲姞浠櫒/淇敼浠櫒淇℃伅 --> + <el-drawer + ref="addDrawer" + :title="equipmentDetail.id?'淇敼浠櫒璁惧淇℃伅':'鏂板浠櫒璁惧'" + :append-to-body="true" + :visible.sync="addDrawerVisible" + class="addDrawer" + size="40%" + @close="closeAddOrChangeDrawer" + > + <div class="demo-drawer__content"> + <el-form label-position="top" :model="equipmentform"> + <el-row :gutter="50"> + <el-col :span="11"> + <el-form-item label="鎵�灞炲垎绫伙細" label-width="80"> + <el-cascader v-model="equipmentform.classifyId" :options="classTree" :show-all-levels="false" /> + </el-form-item> + </el-col> + <el-col :span="11"> + <el-form-item label="璁惧缂栧彿锛�" label-width="80"> + <el-input v-model="equipmentform.equipmentCode" autocomplete="off" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="50"> + <el-col :span="11"> + <el-form-item label="浠櫒璁惧鍚嶇О锛�" label-width="80"> + <el-input v-model="equipmentform.equipmentName" autocomplete="off" /> + </el-form-item> + </el-col> + <el-col :span="11"> + <el-form-item label="鐘舵�侊細" label-width="80"> + <el-select + v-model="equipmentform.conditions" + clearable + filterable + :allow-create="true" + placeholder="璇烽�夋嫨浠櫒璁惧鐘舵��" + style="width:100%" + > + <el-option + v-for="item in conditionsOptions" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="50"> + <el-col :span="11"> + <el-form-item label="鍨嬪彿瑙勬牸锛�" label-width="80"> + <el-input v-model="equipmentform.specificationsModels" autocomplete="off" /> + </el-form-item> + </el-col> + <el-col :span="11"> + <el-form-item label="娴嬮噺鑼冨洿锛�" label-width="80"> + <el-input v-model="equipmentform.measuringRange" autocomplete="off" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="50"> + <el-col :span="11"> + <el-form-item label="涓嶇‘瀹氬害/鍑嗙‘搴�/鏈�澶у厑璁歌宸細" label-width="80"> + <el-input v-model="equipmentform.errorRate" autocomplete="off" /> + </el-form-item> + </el-col> + <el-col :span="11"> + <el-form-item label="鐢熶骇鍘傚锛�" label-width="80"> + <el-input v-model="equipmentform.manufacturer" autocomplete="off" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="50"> + <el-col :span="11"> + <el-form-item label="瀛樻斁鍦扮偣锛�" label-width="80"> + <el-input v-model="equipmentform.storagePlace" autocomplete="off" /> + </el-form-item> + </el-col> + <el-col :span="11"> + <el-form-item label="鍒拌揣鏃ユ湡锛�" label-width="80"> + <el-date-picker + v-model="equipmentform.arrivalDate" + type="date" + placeholder="璇烽�夋嫨鍒拌揣鏃ユ湡" + style="width:100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="50"> + <el-col :span="11"> + <el-form-item label="楠屾敹鏃ユ湡锛�" label-width="80"> + <el-date-picker + v-model="equipmentform.acceptanceDate" + type="date" + placeholder="璇烽�夋嫨楠屾敹鏃ユ湡" + style="width:100%" + /> + </el-form-item> + </el-col> + <el-col :span="11"> + <el-form-item label="淇濈浜猴細" label-width="80"> + <el-select + v-model="equipmentform.userId" + clearable + filterable + :allow-create="true" + placeholder="璇烽�夋嫨淇濈浜�" + style="width:100%" + > + <el-option + v-for="item in userOpetions" + :key="item.id" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="50"> + <el-col :span="11"> + <el-form-item label="鏄惁鏀寔鏁伴噰锛�" label-width="80"> + <el-radio v-model="equipmentform.whetherDataAcquisition" :label="1">鏀寔</el-radio> + <el-radio v-model="equipmentform.whetherDataAcquisition" :label="0">涓嶆敮鎸�</el-radio> + </el-form-item> + </el-col> + <el-col :span="11"> + <el-form-item label="浠櫒璁惧璁¢噺锛�" label-width="80"> + <el-radio v-model="equipmentform.equipmentMeasurement" :label="1">闇�瑕�</el-radio> + <el-radio v-model="equipmentform.equipmentMeasurement" :label="0">涓嶉渶瑕�</el-radio> + </el-form-item> + </el-col> + </el-row> + <el-row v-show="equipmentform.equipmentMeasurement===1" :gutter="50"> + <el-col :span="12"> + <el-form-item label="璁¢噺鎴鏈夋晥鏈燂細" label-width="80"> + <el-input v-model="equipmentform.termValidity" type="number" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="50"> + <el-col :span="11"> + <el-form-item label="鎻忚堪锛�" label-width="80"> + <el-input + v-model="equipmentform.descriptiveness" + type="textarea" + :rows="2" + placeholder="璇疯緭鍏ュ唴瀹�" + style="width:217%" + /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div class="demo-drawer__footer"> + <el-button class="el-button--default" @click="addDrawerVisible = false">鍙� 娑�</el-button> + <el-button type="primary" class="el-button--primary el-button--medium" @click="addNewEquipment">纭� 瀹�</el-button> + </div> + </div> + </el-drawer> + <!-- 鏂板璁¢噺淇℃伅寮圭獥 --> + <el-dialog class="measureForm" title="鏂板璁¢噺" :visible.sync="measureFormVisible"> + <el-form label-position="top" :model="measureForm"> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="璐熻矗浜�"> + <el-select + v-model="measureForm.userId" + clearable + filterable + :allow-create="true" + placeholder="璐熻矗浜�" + style="width:100%" + > + <el-option + v-for="item in userOpetions" + :key="item.id" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="璁¢噺鍗曚綅"> + <el-input v-model="measureForm.measurementUnit" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="24"> + <el-form-item label="妫�瀹氭湁鏁堟湡"> + <el-date-picker + v-model="measureForm.date" + type="daterange" + range-separator="鑷�" + start-placeholder="寮�濮嬫棩鏈�" + end-placeholder="缁撴潫鏃ユ湡" + /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="涓嶇‘瀹氬害"> + <el-input v-model="measureForm.uncertainty" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="缁撴灉"> + <el-select + v-model="measureForm.result" + clearable + filterable + :allow-create="true" + placeholder="璐熻矗浜�" + style="width:100%" + > + <el-option + v-for="item in resultOptions" + :key="item.id" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="24"> + <el-form-item label="鎬ц兘鎸囨爣"> + <el-input + v-model="measureForm.performanceIndex" + type="textarea" + :rows="2" + placeholder="璇疯緭鍏ュ唴瀹�" + /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="24"> + <el-form-item label="澶囨敞"> + <el-input + v-model="measureForm.remarks" + type="textarea" + :rows="2" + placeholder="璇疯緭鍏ュ唴瀹�" + /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="24"> + <el-form-item label=""> + <el-upload + class="upload-demo" + action="#" + :on-change="handleUpload" + :auto-upload="false" + > + <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button> + </el-upload> + </el-form-item> + </el-col> + </el-row> + </el-form> + <span slot="footer" class="dialog-footer"> + <el-button type="primary" @click="addMeasure">纭� 瀹�</el-button> + + <el-button @click="measureFormVisible = false">鍙� 娑�</el-button> + </span> + </el-dialog> + <!-- 鍒犻櫎浠櫒寮瑰嚭妗� --> + <el-dialog + title="鎻愮ず" + :visible.sync="deletedialogVisible" + width="30%" + :before-close="handleClose"> + <span>纭畾鍒犻櫎璇ヤ华鍣ㄥ悧锛�</span> + <span slot="footer" class="dialog-footer"> + <el-button @click="deletedialogVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="deleteInstrument">纭� 瀹�</el-button> + </span> + </el-dialog> </div> </template> <script> +import { getClassifyList, getInstrumentList, + addInstrumentUser, addInstrument, getInstrumentDetail, + getEquipmentPointList, addEquipmentPoint, + getMetricalInformationList, changeInstrument, addMetricalInformation, deleteInstrument } from '@/api/laboratory/ledger' +import { parseTime } from '@/utils/index' export default { + filters: { + conditionsFilter(value) { + let returnValue = null + switch (+value) { + case 1: + returnValue = '杩愯' + break + case 2: + returnValue = '鏁呴殰' + break + case 3: + returnValue = '鎶ヤ慨' + break + case 4: + returnValue = '妫�淇�' + break + case 5: + returnValue = '寰呮満' + break + } + return returnValue + } + }, data() { return { - // 琛ㄦ牸鏁版嵁 - data: [{ - id: 1, - label: '涓�绾� 1', - children: [{ - id: 4, - label: '浜岀骇 1-1', - children: [{ - id: 9, - label: '涓夌骇 1-1-1' - }, { - id: 10, - label: '涓夌骇 1-1-2' - }] - }] - }], + // 鐢ㄦ埛涓嬫媺妗嗛厤缃」 + userOpetions: [], + // 浠櫒鐘舵�侀厤缃」 + conditionsOptions: [ + { + label: '鍏ㄩ儴', + value: 0 + }, + { + label: '杩愯', + value: 1 + }, + { + label: '鏁呴殰', + value: 2 + }, + { + label: '鎶ヤ慨', + value: 3 + }, + { + label: '妫�淇�', + value: 4 + }, + { + label: '寰呮満', + value: 5 + } + ], + // 璁¢噺鐘舵�侀厤缃」 + resultOptions: [ + { + label: '鍚堟牸', + value: 1 + }, + { + label: '鏍℃鍚庡彲鐢�', + value: 2 + }, + { + label: '涓嶅悎鏍�', + value: 3 + } + + ], + // 鍒嗙被tree鏁版嵁锛屽垎绫婚厤缃」 + classTree: [], + // 娣诲姞鍒嗙被鍙傛暟 + addTreeForm: {}, // tree榛樿鍊� defaultProps: { children: 'children', @@ -176,26 +757,392 @@ keyword: '' }, // 琛ㄦ牸鎼滅储鍗曢�夊�� - radioValue: '鍏ㄩ儴', + radioValue: '0', // 琛ㄦ牸鎼滅储宸茶繃鏈� - isOut: false + // 鏄惁杩囨湡 + isOut: false, + // 鎺у埗娣诲姞鍒嗙被妯℃�佹鏄剧ず + addClassVisible: false, + // 鎺у埗鏂板璁¢噺妯℃�佹鏄剧ず + measureFormVisible: false, + // 鎺у埗鍒犻櫎浠櫒妯℃�佹鏄剧ず + deletedialogVisible: false, + // 鎺у埗娣诲姞淇敼浠櫒鎶藉眽鐨勬樉绀� + addDrawerVisible: false, + // 娣诲姞淇敼浠櫒鍙傛暟瀵硅薄 + equipmentform: { + acceptanceDate: '', // 楠屾敹鏃ユ湡 + arrivalDate: '', // 鍒拌揣鏃ユ湡 + classifyId: '', // 鎵�灞炲垎绫� + conditions: '', // 鐘舵�� + descriptiveness: '', // 鎻忚堪 + equipmentCode: '', // 璁惧缂栧彿 + equipmentMeasurement: 1, // 浠櫒璁惧璁¢噺 + equipmentName: '', // 浠櫒璁惧鍚嶇О + errorRate: '', // 涓嶇‘瀹氬害/鍑嗙‘搴�/鏈�澶у厑璁歌宸� + userId: '', // 淇濈浜� + manufacturer: '', // 鐢熶骇鍘傚 + measuringRange: '', // 娴嬮噺鑼冨洿 + specificationsModels: '', // 鍨嬪彿瑙勬牸 + storagePlace: '', // 瀛樻斁鍦扮偣 + whetherDataAcquisition: 1 // 鏄惁鏀寔鏁伴噰 + }, + // 鎺у埗璁惧浠櫒璇︽儏鎶藉眽鏄剧ず + detailDrawer: false, + // 璁惧鏁版嵁鍒楄〃 + equipmentTable: [], + // 鍒嗛〉鍙傛暟 + currentPage: 1, + pageSize: 10, + total: 0, + // 鐮佺偣琛ㄦ牸 + codePointsTable: [ + { + 'unit': 'mm', + 'descriptiveness': '鐤簡锛屽仛涓嶄簡', + 'equipmentPoint': 'Area-1', + 'name': '灏忓皬', + 'updateTime': '2023-07-24', + 'id': 1, + 'equipmentPointName': '瀵间綋灞忚斀锛堝鍘氶潰绉級' + } + ], + // 璁¢噺淇℃伅琛� + measureTable: [], + // 娣诲姞璁¢噺淇℃伅鍙傛暟瀵硅薄 + measureForm: {}, + activeTabsName: 'codePoints', + // 鐮佺偣琛ㄦ牸鐨勭姸鎬侊細鏁版嵁灞曠ずfalse/鏂板杈撳叆true + codePointesTableStatus: false, + // 璁惧璇︽儏瀵硅薄 + equipmentDetail: {}, + // 杩囨护鍏抽敭瀛� + filterText: '', + // 杩囨护鍚庣殑浠櫒璁惧琛� + filterdequipmentTable: '', + oldtableData: '', + // 杩囨护涓嶅悓鐘舵�佽澶� + conditionTable: '', + nodeclicked: '', + expireData: '', + instrumentId: '' } }, watch: { filterText(val) { - this.$refs.tree.filter(val) + this.$refs.classTree.filter(val) } }, + created() { + this.getThreeData() + this.getUserOptions() + }, methods: { + // 鑾峰彇鍒嗙被鏁版嵁 + async getThreeData() { + const { data } = await getClassifyList() + // console.log(data) + this.classTree = data.map(item => { + if (item.children) { + item.children = item.children.map(childrenItem => { + return { ...childrenItem, label: childrenItem.son_name, value: childrenItem.id } + }) + } + return { ...item, label: item.father_name, value: item.id ? item.id : item.father_name } + }) + // console.log(this.classTree) + }, + // 鑾峰彇鐢ㄦ埛淇℃伅閰嶇疆椤� + async getUserOptions() { + const { data } = await addInstrumentUser() + this.userOpetions = data.map(item => ({ ...item, label: item.name, value: item.id })) + }, + // 鏄剧ず浠櫒璇︽儏 + async openDetail(row) { + // console.log(row) + this.detailDrawer = true + const { data } = await getInstrumentDetail({ InstrumentId: row.id }) + this.equipmentDetail = data + this.equipmentform = data + console.log(this.equipmentform) + const { data: pointList } = await getEquipmentPointList({ InstrumentId: this.equipmentDetail.id }) + this.codePointsTable = pointList + const { data: informationList } = await getMetricalInformationList({ InstrumentId: this.equipmentDetail.id }) + this.measureTable = informationList + console.log(informationList) + }, + // 鑺傜偣鐐瑰嚮澶勭悊 + nodeClickHandler(data, node, element) { + this.nodeclicked = data + // console.log(data) + // 鍙湁鏁版嵁涓惡甯d鎵嶈兘鍙戦�佹煡璇㈣姹� + if (data.id) { + this.getEquipmentTable({ classifyId: data.id, pageSize: this.pageSize, pageNo: this.currentPage, whetherWhether: this.isOut }) + } + }, + // 鑾峰彇浠櫒鍒楄〃鏁版嵁 + async getEquipmentTable(ages) { + // console.log('鏉′欢瀵硅薄', ages) + const { data } = await getInstrumentList(ages) + console.log(data) + this.equipmentTable = data.row + this.total = data.total + this.oldtableData = this.equipmentTable + }, + // 杩囨护鑺傜偣 filterNode(value, data) { if (!value) return true return data.label.indexOf(value) !== -1 + }, + // 鏀瑰彉椤甸潰鏁版嵁澶у皬 + handleSizeChange() { + // 褰撳墠椤靛ぇ灏� + }, + // 鏀瑰彉褰撳墠椤� + handleCurrentChange() { + // 褰撳墠椤垫洿鏀� + }, + // 鏄剧ず璁惧鐮佺偣 + addCodePoints() { + // 娣诲姞鏂扮爜鐐癸紝娓呯┖鍘熸暟缁� + this.codePointesTableStatus = true + this.codePointsTable = undefined + }, + // 鏂板璁惧鐮佺偣 + addNewCodePoints() { + // + if (!this.codePointsTable) { + this.codePointsTable = [] + } + const newObj = {} + newObj.name = '灏忓皬' // 褰撳墠鐢ㄦ埛鐨勫悕绉� + newObj.updateTime = '2023-07-24' // 鑾峰彇褰撳墠鏃堕棿 + newObj.equipmentPoint = 'Area-1' + newObj.equipmentPointName = '瀵间綋灞忚斀锛堝鍘氶潰绉級' + newObj.descriptiveness = '' + newObj.unit = 'mm' + newObj.instrumentId = this.equipmentDetail.id + this.codePointsTable.push(newObj) + }, + // 淇濆瓨鎻愪氦鏂板璁惧鐮佺偣 + async saveCodePoins() { + console.log(this.codePointsTable) + if (!this.codePointsTable) { + this.codePointsTable = [] + } + if (this.codePointsTable.length === 0) return this.$message.error('璇风偣鍑绘坊鍔犳寜閽坊鍔犳暟鎹�') + try { + for (const item of this.codePointsTable) { + const { code, data, message } = await addEquipmentPoint(item) + console.log(data) + if (code !== 200) throw new Error(message) + this.$message.success('娣诲姞鎴愬姛') + } + } catch (error) { + this.$message.error(error) + } + await this.closeCodePoins() + }, + // 鍙栨秷鏂板璁惧鐮佺偣 + async closeCodePoins() { + this.codePointesTableStatus = false + this.codePointsTable = undefined + const { data: pointList } = await getEquipmentPointList({ InstrumentId: this.equipmentDetail.id }) + this.codePointsTable = pointList + }, + // 鐐瑰嚮鏂板浠櫒璁惧鎴栧綋瀛樺湪浠櫒璇︽儏鏃舵槸淇敼浠櫒璁惧淇℃伅 + async addNewEquipment() { + if (Array.isArray(this.equipmentform.classifyId)) { + this.equipmentform.classifyId = this.equipmentform.classifyId.pop() + } + if (!this.equipmentDetail.id) { + // 鏍煎紡鍖栨棩鏈� + console.log('鏂板浠櫒') + this.equipmentform.arrivalDate = parseTime(this.equipmentform.arrivalDate, '{y}-{m}-{d}') + this.equipmentform.acceptanceDate = parseTime(this.equipmentform.acceptanceDate, '{y}-{m}-{d}') + // this.equipmentform.termValidity = parseTime(this.equipmentform?.termValidity, '{y}-{m}-{d}') + console.log('鏂板浠櫒璁惧鍙傛暟', this.equipmentform) + try { + const res = await addInstrument(this.equipmentform) + console.log(res) + } catch (error) { + this.$message.error('娣诲姞澶辫触') + } + this.$message.success('娣诲姞鎴愬姛') + this.addDrawerVisible = false + this.equipmentform = {} + return + } + console.log('淇敼浠櫒鍙傛暟', this.equipmentform) + try { + const res = await changeInstrument(this.equipmentform) + console.log(res) + this.$message.success('淇敼鎴愬姛') + this.addDrawerVisible = false + this.detailDrawer = false + } catch (error) { + this.$message.error('娣诲姞澶辫触') + } + }, + // 娣诲姞璁¢噺淇℃伅 + async addMeasure() { + // 鏍煎紡鍖栨椂闂� + this.measureForm.instrumentId = this.equipmentDetail.id + if (Array.isArray(this.measureForm.date)) { + this.measureForm.beginDate = parseTime(this.measureForm.date[0], '{y}-{m}-{d}') + this.measureForm.endDate = parseTime(this.measureForm.date[1], '{y}-{m}-{d}') + } + console.log(this.measureForm) + const formData = new FormData() + formData.append('file', this.measureForm.file?.raw, this.measureForm.file?.name) + console.log(this.measureForm) + for (const key in this.measureForm) { + console.log(key) + // if (key === 'file') return + formData.append(key, this.measureForm[key]) + } + console.log(formData) + try { + const { data } = await addMetricalInformation(formData) + console.log(data) + this.$message.success('娣诲姞鎴愬姛') + this.measureForm = {} + this.measureFormVisible = false + } catch (error) { + this.$message.error('娣诲姞澶辫触') + } + }, + // 鍏抽棴璁惧璇︽儏鎶藉眽 + closeDetailDrawer() { + this.equipmentDetail = {} + this.codePointsTable = [] + this.measureTable = [] + }, + // 鍏抽棴娣诲姞淇敼璁惧鎶藉眽 + closeAddOrChangeDrawer() { + if (!this.equipmentDetail.id) { + this.equipmentform = {} + } + }, + // 鏂囦欢涓婁紶 + handleUpload(file, fileList) { + // console.log(file, fileList) + this.measureForm.file = file + }, + // 鏍规嵁杈撳叆鐨勮澶囩紪鍙凤紝璁惧鍚嶇О鎴栬�呭瀷鍙疯鏍煎叧閿瓧杩涜杩囨护鍒楄〃 + filterTableData() { + this.oldtableData = this.equipmentTable + const filterdequipmentTable = this.equipmentTable.filter(item => { + return item.equipment_code.includes(this.searchData.keyword) || item.equipment_name.includes(this.searchData.keyword) || item.specifications_models.includes(this.searchData.keyword) + }) + this.equipmentTable = filterdequipmentTable + }, + resetBtn() { + this.searchData.keyword = '' + this.equipmentTable = this.oldtableData + }, + getConditionTable() { + // console.log(this.radioValue) + let filteredTable = this.oldtableData.filter(item => { + return item.conditions === this.radioValue + }) + // 鍏堝垽鏂璱sOut + if (this.isOut) { + // 濡傛灉鐜板湪鍕鹃�変簡宸茶繃鏈熸寜閽紝閭e氨浠庡綋鍓嶈繃婊ゅソ鐨勫垪琛ㄤ腑绛涢�夊嚭杩囨湡鍒楄〃 + if (this.expireData.length === 0) { + this.equipmentTable = null + } else { + let expireItem + for (expireItem of this.expireData) { + filteredTable = filteredTable.filter(item => { + return item.equipment_code === expireItem.equipment_code + }) + } + this.equipmentTable = filteredTable + } + if (!this.radioValue) { + this.equipmentTable = this.expireData + } + } else { + this.equipmentTable = filteredTable + if (!this.radioValue) { + this.equipmentTable = this.oldtableData + } + } + }, + async getExpireTable() { + // const filteredTable = this.oldtableData.filter(item => { + // return item.conditions === this.radioValue + // }) + if (this.isOut) { + // 鎹曡幏鐐瑰嚮浜嗗凡杩囨湡锛岃姹傝繃鏈熸暟鎹苟淇濆瓨 + const { data } = await getInstrumentList({ classifyId: this.nodeclicked.id, pageSize: this.pageSize, pageNo: this.currentPage, whetherWhether: this.isOut }) + this.expireData = data.row + if (this.expireData.length === 0) { + this.equipmentTable = null + } else { + if (this.radioValue !== 0) { + let expireItem + for (expireItem of this.expireData) { + this.equipmentTable = this.oldtableData.filter(item => { + console.log(this.radioValue) + console.log('item', item) + console.log('expireItem', expireItem) + return item.conditions === this.radioValue && item.equipment_code === expireItem.equipment_code + }) + console.log(this.equipmentTable) + } + } else { + this.equipmentTable = this.expireData + } + } + } else { + // 鎹曡幏鍙栨秷浜嗗凡杩囨湡锛屽皢杩囨湡鏁版嵁娓呯┖锛岄噸鏂版洿鏂癳quipmentTable + this.expireData = '' + this.equipmentTable = this.oldtableData.filter(item => { + return item.conditions === this.radioValue + }) + if (this.radioValue === 0) { + this.equipmentTable = this.oldtableData + } + } + }, + clickDelete(row) { + this.instrumentId = row.id + this.deletedialogVisible = true + }, + async deleteInstrument() { + // console.log(row.id) + await deleteInstrument({ instrumentId: this.instrumentId }) + this.deletedialogVisible = false } } } </script> <style lang="scss" scoped> +.demo-drawer__content{ + margin-left: 50px; +} +.demo-drawer__footer { + display: flex; + justify-content: space-between; +} + +.demo-drawer__footer .el-button--default { + background-color: #fff; + color: #333; + width: 45%; + margin-bottom: 24px; +} + +.demo-drawer__footer .el-button--primary { + background-color: #409EFF; + color: #fff; + width: 45%; + margin-right: 60px; + margin-bottom: 24px; +} .ledger-main{ width: 100%; height: 100%; @@ -235,27 +1182,23 @@ .library-bom{ flex: 2; margin-right: 12px; + .bom-item-search{ + margin-bottom: 12px; + ::v-deep .el-input{ + input{ + height: 33px; + line-height: 33px; + } + } + } + .bom-item-search .el-row{ + // display: flex; + .el-col{ + text-align: right; + } + } .el-tree { margin-top: 12px; - ::v-deep .el-tree-node__content{ - height: 24px !important; - font-size: 14px; - display: inline-block !important; - padding: 2px; - color: #333; - } - ::v-deep .el-tree-node__content:hover{ - background: rgba(58,124,253,0.1) !important; - // opacity: 0.31; - border-radius: 3px; - color: #333 !important; - } - ::v-deep .el-tree-node:focus>.el-tree-node__content{ - background: rgba(58,124,253,0.1) !important; - // opacity: 0.31; - border-radius: 3px; - color: #333 !important; - } } } .library-table{ @@ -264,19 +1207,10 @@ margin-left: 12px; display: flex; flex-direction: column; - - /* .table-header{ - display: flex; - justify-content: space-between; - .el-form-item{ - margin-bottom: 30px !important; - } - } */ .table-box{ margin-top: 30px; flex: 1; background: #fff; - // padding: 20px 20px 10px 20px; display: flex; flex-direction: column; .el-table { @@ -290,5 +1224,94 @@ } } } + +} +.addDrawer{ + ::v-deep .el-drawer__body{ + // padding: 24px !important; + overflow-y: scroll; + overflow-x: hidden; + } +} +.detailDrawer{ + ::v-deep .el-drawer__body{ + padding: 24px !important; + overflow-y: scroll; + } + .detail-info{ + background: #fff; + box-shadow: rgba(100, 100, 111, 0.2) 0px 5px 15px; + margin: 0; + margin-bottom: 12px; + border-radius: 6px; + overflow: hidden; + .tips-main{ + padding: 10px 20px 0 20px; + display: flex; + justify-content: space-between; + align-items: center; + height: 50px; + .tips-btn{ + margin-bottom: 10px; + } + .tips{ + height: 100%; + display: flex; + height: 24px; + align-items: center; + font-size: 16px; + >span{ + display: inline-block; + margin-right: 10px; + width: 4px; + height: 16px; + background: #0077DB; + } + >div{ + height: 100%; + line-height: 26px; + } + .el-button{ + padding: 0; + } + } + } + + // 鍩烘湰淇℃伅鍜屼紒涓氫俊鎭殑姣忎竴涓俊鎭」鏍峰紡 + .message{ + padding: 0px 20px 8px 20px; + + display: flex; + flex-wrap: wrap; + border-top: 1px solid #F2F6FC; + >div{ + flex: 30%; + max-width: 30%; + padding: 8px; + color: #606266; + align-items: center; + font-size: 12px; + height: 40px; + display: flex; + align-items: center; + >span{ + color: #303133; + font-size: 14px; + >i{ + margin-right: 8px; + } + } + } + } + } + } +.measureForm{ + // + .el-form-item{ + // + .el-date-editor{ + width: 100%; + } + } } </style> -- Gitblit v1.9.3