You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
186 lines
5.1 KiB
186 lines
5.1 KiB
<template>
|
|
<div class="productionQualityLogPage" v-loading="state.loading">
|
|
<!-- 主表 -->
|
|
<tablePage
|
|
:apiName="state.apiName"
|
|
:searchOptions="state.searchOptions"
|
|
:searchFilter="state.searchFilter"
|
|
@leftOperationHadel="leftOperationHadel"
|
|
:leftOperation="state.leftOperation"
|
|
:leftOperationColumnWidth="180"
|
|
:authName="'productionQualityLog'"
|
|
:searchFilterOptions="state.searchFilterOptions"
|
|
:tableCellClassName="tableCellClassName"
|
|
></tablePage>
|
|
|
|
<!-- 明细抽屉 -->
|
|
<el-drawer
|
|
class="productionQualityLog_infoDrawerPop"
|
|
v-if="state.drawerShow"
|
|
v-model="state.drawerShow"
|
|
:title="`详情 (${state.infoCurrentRow.taskName} - uId:${state.infoCurrentRow.uId})`"
|
|
direction="rtl"
|
|
destroy-on-close
|
|
:size="'80%'"
|
|
@close="resetInfo"
|
|
>
|
|
<div style="height: 100%;display: flex">
|
|
<tablePage
|
|
v-if="state.drawerShow"
|
|
:specialPageApi='`/api/customlog/getlogreponselist`'
|
|
:tableColumns="state.infoTableColumns"
|
|
:specialColumnName="state.infoTableColumnsName"
|
|
:specialLocalColumnName="state.infoTableColumnsName+'_PQLogDetail'"
|
|
:searchFilter="state.infoSearchFilter"
|
|
:hideSearch="true"
|
|
></tablePage>
|
|
</div>
|
|
</el-drawer>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup>
|
|
defineOptions({ name: 'productionQualityLog' })
|
|
import { ElMessageBox, ElMessage,ElTable, ElTableColumn } from 'element-plus'
|
|
import { reactive, ref, onMounted,nextTick } from 'vue'
|
|
import tablePage from '@/components/tablePage/index.vue'
|
|
import elTable from '@/components/elTable/index.vue'
|
|
import elPager from '@/components/elPager/index.vue'
|
|
import { getLogJsonList } from '@/api/system/customlog'
|
|
import { downLoadJSONByString,getColoumsByServeName,getApiByServeName } from '@/utils/common/index'
|
|
import EnumList from '@/utils/common/enumList'
|
|
|
|
import { useRoute } from 'vue-router'
|
|
const route = useRoute()
|
|
|
|
const state = reactive({
|
|
apiName:'customlog',
|
|
loading:false,
|
|
searchFilter: {
|
|
taskName: null,
|
|
creationTime:null,
|
|
module:'生产质量'
|
|
},
|
|
searchOptions:[
|
|
{type:'input',prop:'taskName',label:'任务名称'},
|
|
{type:'datetimerange',prop:'creationTime',label:'创建时间'},
|
|
],
|
|
searchFilterOptions:{ module:{action:'=='} },
|
|
leftOperation:[
|
|
{label:'查看详情',name:'showInfo',link:true,type:'primary'},
|
|
{label:'下载JSON',name:'downloadJSON',link:true,type:'warning'},
|
|
],
|
|
// 查看详情相关数据
|
|
drawerShow:false,
|
|
infoTableData:null,
|
|
infoTableColumns:[],
|
|
// 查看详情内部colums的名称
|
|
infoTableColumnsName:null,
|
|
infoSearchFilter: {},
|
|
columnWidth:null,
|
|
infoType:null,
|
|
infoAllData:null,
|
|
infoCurrentRow:null,
|
|
infoPager:{
|
|
page: 1,
|
|
pageSize: 20,
|
|
total: null,
|
|
},
|
|
})
|
|
|
|
function leftOperationHadel(btn,scope) {
|
|
// 查看详情
|
|
if(btn.name == 'showInfo'){
|
|
state.infoCurrentRow = scope.row
|
|
state.infoTableColumns = getColoumsByServeName(scope.row.taskName,'taskName',true)
|
|
state.infoTableColumnsName = getApiByServeName(scope.row.taskName,'taskName')
|
|
if(!state.infoTableColumnsName){
|
|
ElMessage.error(`不支持的任务名: ${scope.row.taskName}`)
|
|
return
|
|
}
|
|
state.infoSearchFilter = [
|
|
{
|
|
logic: "And",
|
|
column: 'Uid',
|
|
action: '==',
|
|
value: scope.row.uId
|
|
},
|
|
]
|
|
nextTick(() => {
|
|
state.drawerShow = true
|
|
})
|
|
}
|
|
// 下载json
|
|
if(btn.name == 'downloadJSON'){
|
|
state.loading = true
|
|
getLogJsonList(scope.row.uId)
|
|
.then(res=>{
|
|
downLoadJSONByString(res.message,`${route.meta.title}_uid=${scope.row.uId}.json`)
|
|
})
|
|
.finally(() => (state.loading = false))
|
|
}
|
|
}
|
|
|
|
// InfoType=2的前端分页
|
|
function initInfoType2Pagedata() {
|
|
state.infoTableData = state.infoAllData.slice((state.infoPager.page-1) * state.infoPager.pageSize,state.infoPager.page * state.infoPager.pageSize)
|
|
}
|
|
|
|
function pageSizeChange(data) {
|
|
state.infoPager.pageSize = data
|
|
state.infoPager.page = 1
|
|
nextTick(() => {
|
|
initInfoType2Pagedata()
|
|
})
|
|
}
|
|
|
|
function pageCurrentChange(data) {
|
|
state.infoPager.page = data
|
|
nextTick(() => {
|
|
initInfoType2Pagedata()
|
|
})
|
|
}
|
|
|
|
function resetInfo(){
|
|
state.drawerShow=false
|
|
state.infoTableData=null
|
|
state.infoTableColumns=[]
|
|
state.columnWidth=null
|
|
state.infoType=null
|
|
state.infoAllData=null
|
|
state.infoPager={
|
|
page: 1,
|
|
pageSize: 20,
|
|
total: null,
|
|
}
|
|
}
|
|
|
|
// 单元格变色
|
|
function tableCellClassName(data){
|
|
if(data.row.type == '错误' && data.column.property == 'type'){return 'table-danger-row'}
|
|
else{return 'normal-tableRow'}
|
|
}
|
|
|
|
</script>
|
|
<style scope lang="scss">
|
|
.productionQualityLogPage{
|
|
height: 100%;
|
|
display: flex;
|
|
width:100%;
|
|
|
|
.el-drawer__header {
|
|
margin-bottom:0 !important
|
|
}
|
|
}
|
|
|
|
.productionQualityLog_infoDrawerPop {
|
|
.search-container{
|
|
position: fixed;
|
|
right: 71px;
|
|
top: 0px;
|
|
box-shadow: none;
|
|
border: none;
|
|
height: 60px;
|
|
}
|
|
}
|
|
</style>
|