| | |
| | | <template> |
| | | <div class="capacity-scope"> |
| | | <div style="display: flex;justify-content: space-between;align-items: flex-start"> |
| | | <el-form :model="queryParams0" ref="queryParams0" size="small" :inline="true"> |
| | | <el-form-item label="收样日期" prop="receiveDate"> |
| | | <el-date-picker v-model="queryParams0.receiveDate" type="date" placeholder="选择日期" format="yyyy-MM-dd" |
| | | value-format="yyyy-MM-dd" size="small" @change="refreshTable()"> |
| | | </el-date-picker> |
| | | <div class="app-container"> |
| | | <div class="search"> |
| | | <el-form :model="queryParams" ref="queryParams" size="small" :inline="true"> |
| | | <el-form-item label="委托编号" prop="entrustCode"> |
| | | <el-input v-model="queryParams.entrustCode" clearable placeholder="请输入" size="small" |
| | | @keyup.enter.native="refreshTable"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="样品编号" prop="sampleCode"> |
| | | <el-input v-model="queryParams.sampleCode" clearable placeholder="请输入" size="small" |
| | | @keyup.enter.native="refreshTable"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="样品名称" prop="sampleName"> |
| | | <el-input v-model="queryParams.sampleName" clearable placeholder="请输入" size="small" |
| | | @keyup.enter.native="refreshTable"></el-input> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" size="mini" @click="refreshTable">查询</el-button> |
| | | <el-button size="mini" type="primary" @click="refreshTable">查询</el-button> |
| | | <el-button size="mini" @click="refresh">重置</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | <el-button size="small" @click="handleDown0">导出</el-button> |
| | | </div> |
| | | |
| | | <div class="table"> |
| | | <lims-table :tableData="tableData0" :column="column0" :tableLoading="tableLoading0" |
| | | key="tableData0" |
| | | :height="'calc(100vh - 240px)'" :page="page0" @pagination="pagination0"> |
| | | <div slot="action" slot-scope="scope"> |
| | | <el-button type="text" @click="handleAdd(scope.row)">编辑</el-button> |
| | | <el-button type="text" @click="delRow(scope.row)"> |
| | | <span style="color: #F56C6C">删除</span> |
| | | </el-button> |
| | | <div class="container"> |
| | | <div class="table-tab"> |
| | | <div> |
| | | <ul class="tab"> |
| | | <li :class="{ active: tabIndex === 0 }" @click="handleTab(0)">待接收</li> |
| | | <li :class="{ active: tabIndex === 1 }" @click="handleTab(1)">已提交</li> |
| | | <li :class="{ active: tabIndex === 2 }" @click="handleTab(2)">已拒收</li> |
| | | <li :class="{ active: tabIndex === 3 }" @click="handleTab(3)">已取消</li> |
| | | <li :class="{ active: tabIndex === 4 }" @click="handleTab(4)">全部</li> |
| | | </ul> |
| | | </div> |
| | | </lims-table> |
| | | <div> |
| | | <el-button size="small" @click="handleExport">导出</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="table"> |
| | | <lims-table :tableData="tableData" :column="column" @pagination="pagination" |
| | | :height="'calc(100vh - 280px)'" :key="upIndex" :page="page" :tableLoading="tableLoading"> |
| | | <template slot="inspectionItem" slot-scope="scope"> |
| | | <div style="white-space: pre-line; text-align: left; padding: 4px 0;">{{ scope.row.inspectionItem }}</div> |
| | | </template> |
| | | <template slot="remark" slot-scope="scope"> |
| | | <span>{{ scope.row.status === 2 && scope.row.rejectRemark ? scope.row.rejectRemark : scope.row.remark }}</span> |
| | | </template> |
| | | <template slot="action" slot-scope="scope"> |
| | | <el-button v-if="scope.row.status === 0" type="text" @click="handleEdit(scope.row)">编辑</el-button> |
| | | <el-button v-else type="text" @click="handleView(scope.row)">查看</el-button> |
| | | </template> |
| | | </lims-table> |
| | | </div> |
| | | </div> |
| | | <!-- 新增样品 --> |
| | | <el-dialog :title="title" :visible.sync="addDialogVisible" width="400px"> |
| | | <el-row> |
| | | <el-col :span="24" style="margin-bottom: 16px;"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">收样日期:</div> |
| | | <div class="search_input"> |
| | | <el-date-picker v-model="addInfo.receiveDate" type="date" size="small" placeholder="选择日期" format="yyyy-MM-dd" |
| | | value-format="yyyy-MM-dd" style="width: 100%;"> |
| | | </el-date-picker> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="24" style="margin-bottom: 16px;"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">样品名称:</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请输入" clearable |
| | | v-model="addInfo.sampleName"></el-input></div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="24" style="margin-bottom: 16px;"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">样品编号:</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请输入" clearable |
| | | v-model="addInfo.sampleCode"></el-input></div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="24" style="margin-bottom: 16px;"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">数量:</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请输入" clearable |
| | | v-model="addInfo.num"></el-input> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="24" style="margin-bottom: 16px;"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">来样单位:</div> |
| | | <div class="search_input"> |
| | | <el-select v-model="addInfo.sampleSupplier" size="small"> |
| | | <el-option :label="item.company" :value="item.company" v-for="(item, index) in customPageList" |
| | | :key="item.id"></el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="24" style="margin-bottom: 16px;"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">留样日期:</div> |
| | | <div class="search_input"> |
| | | <el-date-picker v-model="addInfo.leaveDate" type="date" size="small" placeholder="选择日期" format="yyyy-MM-dd" |
| | | value-format="yyyy-MM-dd" style="width: 100%;"> |
| | | </el-date-picker> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="24" style="margin-bottom: 16px;"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">样品状态:</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请输入" clearable |
| | | v-model="addInfo.sampleState"></el-input></div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="24" style="margin-bottom: 16px;"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">处理日期:</div> |
| | | <div class="search_input"> |
| | | <el-date-picker v-model="addInfo.dealTime" type="date" size="small" placeholder="选择日期" format="yyyy-MM-dd" |
| | | value-format="yyyy-MM-dd" style="width: 100%;"> |
| | | </el-date-picker> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <!-- 编辑/查看弹窗 --> |
| | | <el-dialog :title="isEdit ? '编辑' : '查看'" :visible.sync="editDialogVisible" width="500px" |
| | | :close-on-click-modal="false"> |
| | | <el-form ref="editForm" :model="currentInfo" label-width="110px" size="small"> |
| | | <el-form-item label="样品名称"> |
| | | <el-input v-model="currentInfo.sampleName" disabled></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="样品编号"> |
| | | <el-input v-model="currentInfo.sampleCode" disabled></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="委托编号"> |
| | | <el-input v-model="currentInfo.entrustCode" disabled></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="方法标准"> |
| | | <el-input v-model="currentInfo.methodStandard" disabled></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="检测项目"> |
| | | <el-input v-model="currentInfo.inspectionItem" type="textarea" :rows="3" disabled></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="主检验人" required> |
| | | <el-select v-model="currentInfo.mainInspectorId" clearable filterable placeholder="请选择" size="small" |
| | | style="width: 100%;" :disabled="!isEdit"> |
| | | <el-option v-for="(item, i) in personList" :key="i" :label="item.label" :value="item.value"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="addDialogVisible = false">取 消</el-button> |
| | | <el-button type="primary" @click="submitAdd" :loading="addLoading">确 定</el-button> |
| | | <el-button @click="editDialogVisible = false">取 消</el-button> |
| | | <el-button v-if="isEdit" type="danger" :loading="rejectLoading" @click="openReject">拒收样品</el-button> |
| | | <el-button v-if="isEdit" type="primary" :loading="submitLoading" @click="handleSubmit">提交检验</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <!-- 详情/下载/审核/批准 --> |
| | | <el-dialog :title="title0" :visible.sync="lookDialogVisible" width="800px" :class="{ downPdf: title0 == '下载' }" |
| | | :modal="title0 != '下载'" top="5vh"> |
| | | <filePreview v-if="lookDialogVisible" :fileUrl="javaApi + '/word/' + currentInfo.url" :currentFile="{}" |
| | | style="max-height: 70vh;overflow-y: auto;" /> |
| | | <span slot="footer" class="dialog-footer" v-if="title0 == '审核' || title0 == '批准'"> |
| | | <el-button @click="submitCheck('不通过')" :loading="noCheckLoading">不通过</el-button> |
| | | <el-button type="primary" @click="submitCheck('通过')" :loading="checkLoading">通 过</el-button> |
| | | |
| | | <!-- 拒收备注弹窗 --> |
| | | <el-dialog title="拒收样品" :visible.sync="rejectDialogVisible" width="400px" :close-on-click-modal="false"> |
| | | <el-form ref="rejectForm" :model="rejectInfo" label-width="90px" size="small"> |
| | | <el-form-item label="拒收备注" prop="remark" required> |
| | | <el-input v-model="rejectInfo.remark" type="textarea" :rows="3" maxlength="500" show-word-limit |
| | | placeholder="请输入拒收备注"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="rejectDialogVisible = false">取 消</el-button> |
| | | <el-button type="danger" :loading="rejectLoading" @click="handleReject">确 定</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | |
| | | |
| | | <script> |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import filePreview from "@/components/Preview/filePreview.vue"; |
| | | import { selectCustomPageList } from "@/api/system/customer"; |
| | | import { selectUserCondition } from "@/api/performance/class"; |
| | | import { |
| | | pageProcessSample, |
| | | delProcessSample, |
| | | addProcessSample, |
| | | exportProcessSample |
| | | } from "@/api/cnas/process/sampleDisposal"; |
| | | pageSampleReceipt, |
| | | submitSampleReceipt, |
| | | rejectSampleReceipt, |
| | | exportSampleReceipt |
| | | } from "@/api/business/sampleReceipt"; |
| | | |
| | | export default { |
| | | name: 'SampleReceipt', |
| | | components: { |
| | | limsTable, |
| | | filePreview, |
| | | }, |
| | | data() { |
| | | return { |
| | | activeName: '填写', |
| | | title: '新增', |
| | | addDialogVisible: false, |
| | | addLoading: false, |
| | | outLoading: false, |
| | | editDialogVisible: false, |
| | | lookDialogVisible: false, |
| | | title0: '查看', |
| | | noCheckLoading: false, |
| | | checkLoading: false, |
| | | // 历史列表 |
| | | addInfo: {},//新增样品 |
| | | customPageList: [], |
| | | currentInfo: { |
| | | arr: [] |
| | | },//查看的详情 |
| | | queryParams0: { |
| | | receiveDate: '' |
| | | }, |
| | | tableLoading0: false, |
| | | tableData0: [], |
| | | column0: [ |
| | | { |
| | | label: "收样日期", |
| | | prop: "receiveDate", |
| | | }, |
| | | { |
| | | label: "样品编号", |
| | | prop: "sampleCode", |
| | | }, |
| | | { |
| | | label: "样品名称", |
| | | prop: "sampleName", |
| | | }, |
| | | { |
| | | label: "样品数量", |
| | | prop: "num", |
| | | }, |
| | | { |
| | | label: "来样单位", |
| | | prop: "sampleSupplier", |
| | | }, |
| | | { |
| | | label: "留样日期", |
| | | prop: "leaveDate", |
| | | }, |
| | | { |
| | | label: "样品状态", |
| | | prop: "sampleState", |
| | | }, |
| | | { |
| | | label: "退样签收/处理日期", |
| | | prop: "dealTime", |
| | | }, |
| | | { |
| | | dataType: "slot", |
| | | slot: "action", |
| | | label: "操作", |
| | | } |
| | | tabIndex: 0, |
| | | tabList: [ |
| | | { label: '待接收', value: 0 }, |
| | | { label: '已提交', value: 1 }, |
| | | { label: '已拒收', value: 2 }, |
| | | { label: '已取消', value: 3 }, |
| | | { label: '全部', value: null }, |
| | | ], |
| | | page0: { |
| | | queryParams: { |
| | | entrustCode: '', |
| | | sampleCode: '', |
| | | sampleName: '', |
| | | }, |
| | | tableLoading: false, |
| | | upIndex: 0, |
| | | tableData: [], |
| | | page: { |
| | | total: 0, |
| | | size: 10, |
| | | current: 0, |
| | | current: 1, |
| | | }, |
| | | column: [ |
| | | { label: '样品名称', prop: 'sampleName' }, |
| | | { label: '样品编号', prop: 'sampleCode' }, |
| | | { label: '检测项目', prop: 'inspectionItem', dataType: 'slot', slot: 'inspectionItem', width: '220px' }, |
| | | { label: '委托编号', prop: 'entrustCode' }, |
| | | { label: '方法标准', prop: 'methodStandard' }, |
| | | { label: '主检人签字', prop: 'mainInspectorName' }, |
| | | { label: '备注', prop: 'remark', dataType: 'slot', slot: 'remark', width: '180px' }, |
| | | { label: '操作', dataType: 'slot', slot: 'action', width: '120px' }, |
| | | ], |
| | | personList: [], |
| | | editDialogVisible: false, |
| | | rejectDialogVisible: false, |
| | | isEdit: true, |
| | | currentInfo: {}, |
| | | rejectInfo: {}, |
| | | submitLoading: false, |
| | | rejectLoading: false, |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.getList0() |
| | | this.getPersonList(); |
| | | this.getList(); |
| | | }, |
| | | methods: { |
| | | // 获取送样单位列表 |
| | | getCustomPageList() { |
| | | selectCustomPageList({ |
| | | current: -1, |
| | | size: -1 |
| | | }).then(res => { |
| | | this.customPageList = res.data.records |
| | | getPersonList() { |
| | | selectUserCondition({ type: 1 }).then(res => { |
| | | this.personList = (res.data || []).map(a => ({ label: a.name, value: a.id })); |
| | | }).catch(err => { }); |
| | | }, |
| | | handleTab(i) { |
| | | this.tabIndex = i; |
| | | this.refreshTable(); |
| | | }, |
| | | refresh() { |
| | | this.queryParams0 = {}; |
| | | this.page0.current = 1; |
| | | this.getList0(); |
| | | this.queryParams = { entrustCode: '', sampleCode: '', sampleName: '' }; |
| | | this.page.current = 1; |
| | | this.getList(); |
| | | }, |
| | | refreshTable() { |
| | | this.page0.current = 1; |
| | | this.getList0(); |
| | | this.page.current = 1; |
| | | this.getList(); |
| | | }, |
| | | // 查询表格数据 |
| | | getList0() { |
| | | this.tableLoading0 = true; |
| | | let param = { ...this.queryParams0, ...this.page0 }; |
| | | getList() { |
| | | this.tableLoading = true; |
| | | let param = { ...this.queryParams, ...this.page }; |
| | | let status = this.tabList[this.tabIndex].value; |
| | | if (status !== null && status !== undefined) { |
| | | param.status = status; |
| | | } |
| | | delete param.total; |
| | | pageProcessSample({ ...param }) |
| | | .then((res) => { |
| | | this.tableLoading0 = false; |
| | | if (res.code === 200) { |
| | | this.tableData0 = res.data.records; |
| | | this.page0.total = res.data.total; |
| | | } |
| | | }) |
| | | .catch((err) => { |
| | | this.tableLoading0 = false; |
| | | pageSampleReceipt(param).then(res => { |
| | | this.tableLoading = false; |
| | | if (res.code === 200) { |
| | | this.tableData = res.data.records; |
| | | this.page.total = res.data.total; |
| | | this.upIndex++; |
| | | } |
| | | }).catch(err => { |
| | | this.tableLoading = false; |
| | | }); |
| | | }, |
| | | pagination({ page, limit }) { |
| | | this.page.current = page; |
| | | this.page.size = limit; |
| | | this.getList(); |
| | | }, |
| | | handleEdit(row) { |
| | | this.isEdit = true; |
| | | this.currentInfo = { ...row, mainInspectorId: row.mainInspectorId || null }; |
| | | this.editDialogVisible = true; |
| | | }, |
| | | handleView(row) { |
| | | this.isEdit = false; |
| | | this.currentInfo = { ...row, mainInspectorId: row.mainInspectorId || null }; |
| | | this.editDialogVisible = true; |
| | | }, |
| | | handleSubmit() { |
| | | if (!this.currentInfo.mainInspectorId) { |
| | | this.$message.error('请选择主检验人'); |
| | | return; |
| | | } |
| | | this.$confirm('确认将该样品提交至检验任务?', '提示', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning', |
| | | }).then(() => { |
| | | this.submitLoading = true; |
| | | submitSampleReceipt({ |
| | | receiptId: this.currentInfo.receiptId, |
| | | mainInspectorId: this.currentInfo.mainInspectorId, |
| | | }).then(res => { |
| | | this.submitLoading = false; |
| | | this.editDialogVisible = false; |
| | | this.$message.success('提交成功'); |
| | | this.refreshTable(); |
| | | }).catch(err => { |
| | | this.submitLoading = false; |
| | | }); |
| | | }).catch(() => { }); |
| | | }, |
| | | pagination0({ page, limit }) { |
| | | this.page0.current = page; |
| | | this.page0.size = limit; |
| | | this.getList0(); |
| | | openReject() { |
| | | this.rejectInfo = { remark: '' }; |
| | | this.rejectDialogVisible = true; |
| | | }, |
| | | // 打开编辑弹框 |
| | | handleAdd(row) { |
| | | this.addInfo = this.HaveJson(row) |
| | | this.title = '编辑' |
| | | this.addDialogVisible = true |
| | | this.getCustomPageList() |
| | | }, |
| | | delRow(row) { |
| | | this.$confirm("是否删除该条数据?", "提示", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | delProcessSample({ id: row.id }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success("删除成功"); |
| | | this.refreshTable(); |
| | | } |
| | | }).catch(err => { }); |
| | | }) |
| | | .catch(() => { }); |
| | | }, |
| | | // 提交新增 |
| | | submitAdd() { |
| | | // 编辑 |
| | | this.addLoading = true |
| | | addProcessSample({ |
| | | ...this.addInfo |
| | | }).then(res => { |
| | | this.addLoading = false |
| | | this.addDialogVisible = false |
| | | this.$message({ |
| | | type: 'success', |
| | | message: '编辑成功!' |
| | | handleReject() { |
| | | if (!this.rejectInfo.remark || !this.rejectInfo.remark.trim()) { |
| | | this.$message.error('请填写拒收备注'); |
| | | return; |
| | | } |
| | | this.$confirm('拒收后委托将作废且不能进入检验任务,是否继续?', '警告', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning', |
| | | }).then(() => { |
| | | this.rejectLoading = true; |
| | | rejectSampleReceipt({ |
| | | receiptId: this.currentInfo.receiptId, |
| | | remark: this.rejectInfo.remark, |
| | | }).then(res => { |
| | | this.rejectLoading = false; |
| | | this.rejectDialogVisible = false; |
| | | this.editDialogVisible = false; |
| | | this.$message.success('拒收成功'); |
| | | this.refreshTable(); |
| | | }).catch(err => { |
| | | this.rejectLoading = false; |
| | | }); |
| | | this.page0.current = 1; |
| | | this.refreshTable(); |
| | | }).catch(err => { }); |
| | | }).catch(() => { }); |
| | | }, |
| | | // 导出详情 |
| | | handleDown0() { |
| | | exportProcessSample({ receiveDate: this.queryParams0.receiveDate }).then(res => { |
| | | this.outLoading = false |
| | | const blob = new Blob([res], { type: 'application/msword' }); |
| | | this.$download.saveAs(blob, '样品接收' + '.docx'); |
| | | }) |
| | | handleExport() { |
| | | let param = { ...this.queryParams }; |
| | | let status = this.tabList[this.tabIndex].value; |
| | | if (status !== null && status !== undefined) { |
| | | param.status = status; |
| | | } |
| | | exportSampleReceipt(param).then(res => { |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | this.$download.saveAs(blob, '样品接收导出.xlsx'); |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | }); |
| | | }, |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .search_thing { |
| | | width: 350px; |
| | | .table-tab { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | } |
| | | |
| | | .search_label { |
| | | width: 110px; |
| | | .tab { |
| | | list-style-type: none; |
| | | display: flex; |
| | | margin-bottom: 12px; |
| | | margin-top: 0; |
| | | padding-left: 0; |
| | | } |
| | | |
| | | .tab li { |
| | | line-height: 24px; |
| | | padding: 6px 14px; |
| | | font-size: 14px; |
| | | text-align: right; |
| | | color: #333333; |
| | | border: 1px solid #EEEEEE; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .search_input { |
| | | width: calc(100% - 110px); |
| | | .tab li:nth-child(1) { |
| | | border-radius: 8px 0 0 8px; |
| | | } |
| | | |
| | | .downPdf { |
| | | opacity: 0 !important; |
| | | .tab li:nth-child(5) { |
| | | border-radius: 0 8px 8px 0; |
| | | } |
| | | |
| | | .tables td { |
| | | height: 40px; |
| | | width: 100px; |
| | | text-align: center; |
| | | font-size: 14px; |
| | | word-wrap: break-word; |
| | | white-space: normal; |
| | | } |
| | | |
| | | .user-info .el-button { |
| | | margin: 0; |
| | | } |
| | | |
| | | >>>.el-tabs__content { |
| | | height: 100%; |
| | | .tab li.active { |
| | | border-color: #3A7BFA; |
| | | color: #3A7BFA; |
| | | } |
| | | </style> |