Commit c21f7a41 by pangchong

feat: 技术分析收尾

parent 9619bcfa
...@@ -8,3 +8,11 @@ export const getTaDataList2Api = (data, config) => { ...@@ -8,3 +8,11 @@ export const getTaDataList2Api = (data, config) => {
config config
}) })
} }
export const getTaData2Api = (data, config) => {
return http({
method: 'POST',
url: '/repaircontrol/getTaData2',
data,
config
})
}
...@@ -28,6 +28,10 @@ ...@@ -28,6 +28,10 @@
<script setup> <script setup>
const ps = defineProps({ const ps = defineProps({
width: {
type: Number,
default: null
},
columns: { columns: {
type: Array, type: Array,
default: () => [] default: () => []
...@@ -44,7 +48,8 @@ const ps = defineProps({ ...@@ -44,7 +48,8 @@ const ps = defineProps({
const getCellStyle = (column) => { const getCellStyle = (column) => {
return { return {
width: column?.width ? `${column.width}rpx` : `${750 / ps.columns.length}rpx`, width: column?.width ? `${column.width}rpx` : `${750 / ps.columns.length}rpx`,
textAlign: column?.align || '' textAlign: column?.align || '',
minWidth: column?.minWidth ? `${column.minWidth}rpx` : `${ps.width}rpx`
} }
} }
</script> </script>
......
...@@ -12,3 +12,4 @@ export * from './abnormalEventManage' ...@@ -12,3 +12,4 @@ export * from './abnormalEventManage'
export * from './mechanicalAbnormalEvents' export * from './mechanicalAbnormalEvents'
export * from './operationalSurvey' export * from './operationalSurvey'
export * from './qualityAnalysis' export * from './qualityAnalysis'
export * from './technicalAnalysis'
...@@ -4,3 +4,11 @@ export const ta_isOpen = [ ...@@ -4,3 +4,11 @@ export const ta_isOpen = [
{ label: 'CLOSE', value: 0 }, { label: 'CLOSE', value: 0 },
{ label: '跟踪', value: 2 } { label: '跟踪', value: 2 }
] ]
export const ta_teamTop = [
{ label: '是', value: 1 },
{ label: '否', value: 0 }
]
export const ta_localMaterials = [
{label: '有',value: 1},
{label: '无',value: 0}
]
...@@ -10,6 +10,7 @@ import { ...@@ -10,6 +10,7 @@ import {
getRcOptionsApi, getRcOptionsApi,
getRepairUnitApi getRepairUnitApi
} from 'mocp/api/base' } from 'mocp/api/base'
import { getSysSeatListApi } from 'mocp/api/system'
import { uniqueArray } from 'mocp/utils/tool' import { uniqueArray } from 'mocp/utils/tool'
import { defineStore } from 'pinia' import { defineStore } from 'pinia'
...@@ -37,7 +38,8 @@ const useBaseStore = defineStore('base', { ...@@ -37,7 +38,8 @@ const useBaseStore = defineStore('base', {
typeList: [], //机型下拉数据 typeList: [], //机型下拉数据
ATAList: [], //章节下拉数据 ATAList: [], //章节下拉数据
engineList: [], //发动机型号列表 engineList: [], //发动机型号列表
repairUnitList: [] //责任单位列表 repairUnitList: [], //责任单位列表
allSeatSelect: [] //席位
}, },
allBasicParams: {} //系统基础参数 allBasicParams: {} //系统基础参数
} }
...@@ -92,11 +94,18 @@ const useBaseStore = defineStore('base', { ...@@ -92,11 +94,18 @@ const useBaseStore = defineStore('base', {
}, },
getATAChecked: (state) => { getATAChecked: (state) => {
return (model) => { return (model) => {
const selectATAList = state.selectList.ATAList.filter((item) => item.zstortGc == model) let selectATAList = []
return selectATAList.map((q) => ({ if (model) {
label: q.label, selectATAList = state.selectList.ATAList.filter((item) => item.zstortGc == model)
value: q.label } else {
})) selectATAList = state.selectList.ATAList
}
return uniqueArray(
selectATAList.map((q) => ({
label: q.label,
value: q.label
}))
)
} }
}, },
//格式化发动机型号数据 //格式化发动机型号数据
...@@ -107,6 +116,20 @@ const useBaseStore = defineStore('base', { ...@@ -107,6 +116,20 @@ const useBaseStore = defineStore('base', {
value: v.zMETYPE value: v.zMETYPE
} }
}) })
},
//获取席位
getSeat(state) {
return (seat) => {
return (
seat
?.split(',')
.map((item) => {
const seat = state.selectList.allSeatSelect.find((option) => item == option.id)
return seat?.seatName || ''
})
.join(',') || '-'
)
}
} }
}, },
actions: { actions: {
...@@ -126,6 +149,7 @@ const useBaseStore = defineStore('base', { ...@@ -126,6 +149,7 @@ const useBaseStore = defineStore('base', {
this.getATA(), this.getATA(),
this.getEngineList(), this.getEngineList(),
this.getRepairUnit(), this.getRepairUnit(),
this.getSysSeatList(),
this.getRcOptions() this.getRcOptions()
]) ])
} finally { } finally {
...@@ -202,6 +226,12 @@ const useBaseStore = defineStore('base', { ...@@ -202,6 +226,12 @@ const useBaseStore = defineStore('base', {
this.selectList.repairUnitList = res.data this.selectList.repairUnitList = res.data
} }
}, },
async getSysSeatList() {
const res = await getSysSeatListApi({ pid: 0, pageSize: 9999 })
if (res.code == 200) {
this.selectList.allSeatSelect = res.data.list || []
}
},
async getRcOptions() { async getRcOptions() {
const res = await getRcOptionsApi({}) const res = await getRcOptionsApi({})
if (res.code == 200) { if (res.code == 200) {
......
...@@ -6,5 +6,4 @@ const pinia = createPinia() ...@@ -6,5 +6,4 @@ const pinia = createPinia()
// 使用持久化存储插件 // 使用持久化存储插件
pinia.use(persist) pinia.use(persist)
// 默认导出,给 main.ts 使用 export default pinia
export default pinia
\ No newline at end of file
import { getRsData2Api } from 'mocp/api/operationalSurvey' import { getRsData2Api } from 'mocp/api/operationalSurvey'
import { getSysSeatListApi } from 'mocp/api/system'
import { defineStore } from 'pinia' import { defineStore } from 'pinia'
const useOperationalSurveyStore = defineStore('operationalSurvey', { const useOperationalSurveyStore = defineStore('operationalSurvey', {
...@@ -24,14 +23,6 @@ const useOperationalSurveyStore = defineStore('operationalSurvey', { ...@@ -24,14 +23,6 @@ const useOperationalSurveyStore = defineStore('operationalSurvey', {
}, },
getters: {}, getters: {},
actions: { actions: {
async getSysSeatList() {
const res = await getSysSeatListApi({ pid: 0, pageSize: 9999 })
if (res.code == 200) {
this.selectList.allSeatSelect = res.data.list || []
} else {
uni.$mocpMessage.error(res.message)
}
},
async getRsData2() { async getRsData2() {
const res = await getRsData2Api({ workbenchId: this.workbenchId }, { loading: true }) const res = await getRsData2Api({ workbenchId: this.workbenchId }, { loading: true })
if (res.code == 200) { if (res.code == 200) {
......
import { getEnetOrgTreeApi } from 'mocp/api/assign-work' import { getEnetOrgTreeApi } from 'mocp/api/assign-work'
import { getQaData2Api, getQaDimensionTree2Api } from 'mocp/api/qualityAnalysis' import { getQaData2Api, getQaDimensionTree2Api } from 'mocp/api/qualityAnalysis'
import { getSysSeatListApi } from 'mocp/api/system'
import { defineStore } from 'pinia' import { defineStore } from 'pinia'
function findRelatedLabelOfEnetOrg(items, id) { function findRelatedLabelOfEnetOrg(items, id) {
...@@ -30,7 +29,7 @@ const useQualityAnalysisStore = defineStore('qualityAnalysis', { ...@@ -30,7 +29,7 @@ const useQualityAnalysisStore = defineStore('qualityAnalysis', {
EnetOrgRepeatTreeZh: [] EnetOrgRepeatTreeZh: []
}, },
searchData: { searchData: {
isOpen: 0, isOpen: 1,
acTerminal: '', acTerminal: '',
acOwn: '', acOwn: '',
acType: '', acType: '',
...@@ -54,14 +53,6 @@ const useQualityAnalysisStore = defineStore('qualityAnalysis', { ...@@ -54,14 +53,6 @@ const useQualityAnalysisStore = defineStore('qualityAnalysis', {
} }
}, },
actions: { actions: {
async getSysSeatList() {
const res = await getSysSeatListApi({ pid: 0, pageSize: 9999 })
if (res.code == 200) {
this.selectList.allSeatSelect = res.data.list || []
} else {
uni.$mocpMessage.error(res.message)
}
},
async getQaDimensionTree2() { async getQaDimensionTree2() {
const res = await getQaDimensionTree2Api({}) const res = await getQaDimensionTree2Api({})
if (res.code == 200) { if (res.code == 200) {
...@@ -163,7 +154,7 @@ const useQualityAnalysisStore = defineStore('qualityAnalysis', { ...@@ -163,7 +154,7 @@ const useQualityAnalysisStore = defineStore('qualityAnalysis', {
}, },
resetForm() { resetForm() {
this.searchData = { this.searchData = {
isOpen: 0, isOpen: 1,
acTerminal: '', acTerminal: '',
acOwn: '', acOwn: '',
acType: '', acType: '',
...@@ -178,6 +169,6 @@ const useQualityAnalysisStore = defineStore('qualityAnalysis', { ...@@ -178,6 +169,6 @@ const useQualityAnalysisStore = defineStore('qualityAnalysis', {
} }
}, },
// 配置持久化 // 配置持久化
persist: true persist: false
}) })
export default useQualityAnalysisStore export default useQualityAnalysisStore
import { getRsData2Api } from 'mocp/api/operationalSurvey' import { getTaData2Api } from 'mocp/api/technicalAnalysis'
import { getSysSeatListApi } from 'mocp/api/system'
import { defineStore } from 'pinia' import { defineStore } from 'pinia'
const useTechnicalAnalysisStore = defineStore('technicalAnalysis', { const useTechnicalAnalysisStore = defineStore('technicalAnalysis', {
state: () => { state: () => {
return { return {
selectList: {
allSeatSelect: []
},
searchData: { searchData: {
isOpen: 1, isOpen: 1,
acTerminal: '', acTerminal: '',
acOwn: '', acOwn: '',
acType: '', acType: '',
ac: '', ac: '',
startTime: null, majorClass: null,
stopTime: null, ataChapter: ''
seat: ''
}, },
workbenchId: '', workbenchId: '',
details: undefined details: undefined
...@@ -24,16 +19,8 @@ const useTechnicalAnalysisStore = defineStore('technicalAnalysis', { ...@@ -24,16 +19,8 @@ const useTechnicalAnalysisStore = defineStore('technicalAnalysis', {
}, },
getters: {}, getters: {},
actions: { actions: {
async getSysSeatList() { async getTaData2() {
const res = await getSysSeatListApi({ pid: 0, pageSize: 9999 }) const res = await getTaData2Api({ workbenchId: this.workbenchId }, { loading: true })
if (res.code == 200) {
this.selectList.allSeatSelect = res.data.list || []
} else {
uni.$mocpMessage.error(res.message)
}
},
async getRsData2() {
const res = await getRsData2Api({ workbenchId: this.workbenchId }, { loading: true })
if (res.code == 200) { if (res.code == 200) {
this.details = res.data this.details = res.data
} else { } else {
...@@ -47,9 +34,8 @@ const useTechnicalAnalysisStore = defineStore('technicalAnalysis', { ...@@ -47,9 +34,8 @@ const useTechnicalAnalysisStore = defineStore('technicalAnalysis', {
acOwn: '', acOwn: '',
acType: '', acType: '',
ac: '', ac: '',
startTime: null, majorClass: null,
stopTime: null, ataChapter: ''
seat: ''
} }
}, },
setState(...args) { setState(...args) {
......
...@@ -668,6 +668,18 @@ ...@@ -668,6 +668,18 @@
"style": { "style": {
"navigationBarTitleText": "故障历史详情" "navigationBarTitleText": "故障历史详情"
} }
},
{
"path": "pages/modules/mocp/panel/technicalAnalysis/partList",
"style": {
"navigationBarTitleText": "部件信息详情"
}
},
{
"path": "pages/modules/mocp/panel/technicalAnalysis/similarEvents",
"style": {
"navigationBarTitleText": "同类事件详情"
}
} }
], ],
"globalStyle": { "globalStyle": {
......
<template> <template>
<global-page title="事件分析详情"> <global-page title="事件分析详情">
<global-table :columns="columns" :data="details?.analysisList"> <global-table :columns="columns" :data="details?.analysisList"></global-table>
<template #index="{ index }">
{{ index + 1 }}
</template>
</global-table>
</global-page> </global-page>
</template> </template>
...@@ -16,7 +12,7 @@ import useOperationalSurveyStore from 'mocp/store/operationalSurvey' ...@@ -16,7 +12,7 @@ import useOperationalSurveyStore from 'mocp/store/operationalSurvey'
const operationalSurveyStore = useOperationalSurveyStore() const operationalSurveyStore = useOperationalSurveyStore()
const { details } = storeToRefs(operationalSurveyStore) const { details } = storeToRefs(operationalSurveyStore)
const columns = ref([ const columns = ref([
{ title: '序号', dataIndex: 'index', width: 60 }, { title: '序号', dataIndex: 'ord' },
{ title: '分析一级维度', dataIndex: 'dimension1' }, { title: '分析一级维度', dataIndex: 'dimension1' },
{ title: '分析二级维度', dataIndex: 'dimension2' }, { title: '分析二级维度', dataIndex: 'dimension2' },
{ title: '分析三级维度', dataIndex: 'dimension3' }, { title: '分析三级维度', dataIndex: 'dimension3' },
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<up-cell title="航司" :value="details.acOwn || '-'" /> <up-cell title="航司" :value="details.acOwn || '-'" />
<up-cell title="航站" :value="baseStore.getTerminalObject[details.acTerminal] || '-'" /> <up-cell title="航站" :value="baseStore.getTerminalObject[details.acTerminal] || '-'" />
<up-cell title="提出人" :value="details.proposer || '-'" /> <up-cell title="提出人" :value="details.proposer || '-'" />
<up-cell title="发起席位" :value="getSeat" /> <up-cell title="发起席位" :value="baseStore.getSeat(details.seat)" />
<up-cell title="调查等级" :value="useGetDictByValue('os_surveyLevel', details.surveyLevel) || '-'" /> <up-cell title="调查等级" :value="useGetDictByValue('os_surveyLevel', details.surveyLevel) || '-'" />
<up-cell title="标题" :label="details.title || '无'" /> <up-cell title="标题" :label="details.title || '无'" />
</up-cell-group> </up-cell-group>
...@@ -218,18 +218,6 @@ onLoad(() => { ...@@ -218,18 +218,6 @@ onLoad(() => {
operationalSurveyStore.getRsData2() operationalSurveyStore.getRsData2()
}) })
const { details } = storeToRefs(operationalSurveyStore) const { details } = storeToRefs(operationalSurveyStore)
// 获取发起席位
const getSeat = computed(() => {
return (
details.value?.seat
.split(',')
.map((item) => {
const seat = operationalSurveyStore.selectList.allSeatSelect.find((option) => item == option.id)
return seat?.seatName || ''
})
.join(',') || '-'
)
})
//获取事件分类 //获取事件分类
const getEventclass = computed(() => { const getEventclass = computed(() => {
return ( return (
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
<script setup> <script setup>
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict' import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import { onLoad, onUnload } from '@dcloudio/uni-app' import { onUnload } from '@dcloudio/uni-app'
import { ref } from 'vue' import { ref } from 'vue'
import useOperationalSurveyStore from 'mocp/store/operationalSurvey' import useOperationalSurveyStore from 'mocp/store/operationalSurvey'
import { getRsDataList2Api } from 'mocp/api/operationalSurvey' import { getRsDataList2Api } from 'mocp/api/operationalSurvey'
...@@ -65,9 +65,6 @@ const goDetails = (data) => { ...@@ -65,9 +65,6 @@ const goDetails = (data) => {
//加载下拉框数据 //加载下拉框数据
const operationalSurveyStore = useOperationalSurveyStore() const operationalSurveyStore = useOperationalSurveyStore()
const { searchData } = storeToRefs(operationalSurveyStore) const { searchData } = storeToRefs(operationalSurveyStore)
onLoad(() => {
operationalSurveyStore.getSysSeatList()
})
//筛选 //筛选
const handleRightClick = () => { const handleRightClick = () => {
uni.$mocpJump.navigateTo('/panel/operationalSurvey/search') uni.$mocpJump.navigateTo('/panel/operationalSurvey/search')
......
<template> <template>
<global-page :padding="24" title="运行调查详情"> <global-page :padding="24" title="品质分析详情">
<template v-if="details"> <template v-if="details">
<view class="mocp-cell"> <view class="mocp-cell">
<up-cell-group> <up-cell-group>
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<up-cell title="航司" :value="details.acOwn || '-'" /> <up-cell title="航司" :value="details.acOwn || '-'" />
<up-cell title="航站" :value="baseStore.getTerminalObject[details.acTerminal] || '-'" /> <up-cell title="航站" :value="baseStore.getTerminalObject[details.acTerminal] || '-'" />
<up-cell title="提出人" :value="details.proposer || '-'" /> <up-cell title="提出人" :value="details.proposer || '-'" />
<up-cell title="发起席位" :value="getSeat" /> <up-cell title="发起席位" :value="baseStore.getSeat(details.seat)" />
<up-cell title="调查等级" :value="useGetDictByValue('qa_surveyLevel', details.surveyLevel) || '-'" /> <up-cell title="调查等级" :value="useGetDictByValue('qa_surveyLevel', details.surveyLevel) || '-'" />
<up-cell title="标题" :label="details.title || '无'" /> <up-cell title="标题" :label="details.title || '无'" />
</up-cell-group> </up-cell-group>
...@@ -157,18 +157,6 @@ onLoad(async () => { ...@@ -157,18 +157,6 @@ onLoad(async () => {
uni.hideLoading() uni.hideLoading()
}) })
const { details } = storeToRefs(qualityAnalysisStore) const { details } = storeToRefs(qualityAnalysisStore)
// 获取发起席位
const getSeat = computed(() => {
return (
details.value?.seat
.split(',')
.map((item) => {
const seat = qualityAnalysisStore.selectList.allSeatSelect.find((option) => item == option.id)
return seat?.seatName || ''
})
.join(',') || '-'
)
})
//获取事件分类 //获取事件分类
const getEventclass = computed(() => { const getEventclass = computed(() => {
return ( return (
......
...@@ -64,7 +64,6 @@ const qualityAnalysisStore = useQualityAnalysisStore() ...@@ -64,7 +64,6 @@ const qualityAnalysisStore = useQualityAnalysisStore()
const { searchData } = storeToRefs(qualityAnalysisStore) const { searchData } = storeToRefs(qualityAnalysisStore)
onLoad(() => { onLoad(() => {
qualityAnalysisStore.getQaDimensionTree2() qualityAnalysisStore.getQaDimensionTree2()
qualityAnalysisStore.getSysSeatList()
}) })
//筛选 //筛选
const handleRightClick = () => { const handleRightClick = () => {
......
...@@ -4,27 +4,36 @@ ...@@ -4,27 +4,36 @@
<view class="mocp-cell"> <view class="mocp-cell">
<up-cell-group> <up-cell-group>
<up-cell title="发起时间" :value="timeStampFormat(details.proposedTime, { format: 'YYYY/MM/DD HH:mm' }) || '-'" /> <up-cell title="发起时间" :value="timeStampFormat(details.proposedTime, { format: 'YYYY/MM/DD HH:mm' }) || '-'" />
<up-cell title="发起席位" :value="baseStore.getSeat(details.seat)" />
<up-cell title="机号" :value="details.ac || '-'" /> <up-cell title="机号" :value="details.ac || '-'" />
<up-cell title="机型" :value="details.acType || '-'" /> <up-cell title="机型" :value="details.acType || '-'" />
<up-cell title="航司" :value="details.acOwn || '-'" /> <up-cell title="航司" :value="details.acOwn || '-'" />
<up-cell title="航站" :value="baseStore.getTerminalObject[details.acTerminal] || '-'" /> <up-cell title="航站" :value="baseStore.getTerminalObject[details.acTerminal] || '-'" />
<up-cell title="提出人" :value="details.proposer || '-'" /> <up-cell title="专业" :value="getParamNameByValue('MajorCategory', details.majorClass)" />
<up-cell title="发起席位" :value="getSeat" /> <up-cell title="TA章节" :value="details.ataChapter || '-'" />
<up-cell title="调查等级" :value="useGetDictByValue('os_surveyLevel', details.surveyLevel) || '-'" /> <up-cell title="故障标签" :value="details.faultTag || '-'" />
<up-cell title="标题" :label="details.title || '无'" /> <up-cell title="故障代码" :value="details.faultCode || '-'" />
<up-cell title="是否机队TOP故障" :value="useGetDictByValue('ta_teamTop', details.teamTop) || '-'" />
<up-cell title="前两年同类延误次数" :value="details.delayB2 || '-'" />
<up-cell title="前一年同类延误次数" :value="details.delayB1 || '-'" />
</up-cell-group> </up-cell-group>
</view> </view>
<view class="mocp-cell"> <view class="mocp-cell">
<up-cell-group> <up-cell-group>
<up-cell title="客户延误定性" :value="delayNature[details.delayNature] || '-'" /> <up-cell title="左发件号" :value="details.leftEngPartNo || '-'" />
<up-cell title="是否争议" :value="useGetDictByValue('os_disputeMsg', details.disputeMsg) || '-'" /> <up-cell title="左发序号" :value="details.leftEngSerialNo || '-'" />
<up-cell title="申诉定性" :value="delayNature[details.qualitativeAppeal] || '-'" /> <up-cell title="左发装机时间" :value="timeStampFormat(details.leftEngInstallTime, { format: 'YYYY/MM/DD HH:mm' }) || '-'" />
<up-cell title="第一客观延误原因" :value="details.delayReason1 || '-'" /> <up-cell title="左发飞行小时" :value="details.leftEngFlyTime || '-'" />
<up-cell title="第二客观延误原因" :value="details.delayReason2 || '-'" /> <up-cell title="左发飞行循环" :value="details.leftEngFlyLoop || '-'" />
<up-cell title="右发件号" :value="details.rightEngPartNo || '-'" />
<up-cell title="右发序号" :value="details.rightEngSerialNo || '-'" />
<up-cell title="右发装机时间" :value="timeStampFormat(details.rightEngInstallTime, { format: 'YYYY/MM/DD HH:mm' }) || '-'" />
<up-cell title="右发飞行小时" :value="details.rightEngFlyTime || '-'" />
<up-cell title="右发飞行循环" :value="details.rightEngFlyLoop || '-'" />
</up-cell-group> </up-cell-group>
</view> </view>
<view class="mocp-cell"> <view class="mocp-cell">
<up-collapse :value="getCollapseValue"> <up-collapse :value="['1', '2', '3', '4', '5', '6']">
<up-collapse-item title="事件简述" name="1"> <up-collapse-item title="事件简述" name="1">
<view class="mocp-cell"> <view class="mocp-cell">
<up-cell-group> <up-cell-group>
...@@ -32,88 +41,43 @@ ...@@ -32,88 +41,43 @@
<up-cell title="相关附件"> <up-cell title="相关附件">
<template #label> <template #label>
<view style="margin-top: 16rpx"> <view style="margin-top: 16rpx">
<global-upload :fileList="details.files" :showUpload="false"></global-upload> <global-upload :fileList="details.eventFiles" :showUpload="false"></global-upload>
</view> </view>
</template> </template>
</up-cell> </up-cell>
<up-cell title="事件分类" :value="getEventclass" />
</up-cell-group> </up-cell-group>
</view> </view>
</up-collapse-item> </up-collapse-item>
<view class="mocp-title"> <view class="mocp-title">
故障历史 故障历史
<global-button type="text" @tap="navigateTo('/panel/operationalSurvey/historicalFault')">点击查看</global-button> <global-button type="text" @tap="navigateTo('/panel/technicalAnalysis/historicalFault')">点击查看</global-button>
</view> </view>
<up-collapse-item title="手册标准" name="2"> <up-collapse-item title="处置经过" name="2">
<view class="mocp-cell"> <view class="mocp-cell">
<up-cell-group> <up-cell-group>
<template v-for="item in details.manualList"> <up-cell title="内容" :label="details.dispose || '-'" />
<up-cell title="内容" :label="item.content || '-'" />
<up-cell title="相关附件">
<template #label>
<view style="margin-top: 16rpx">
<global-upload :fileList="item.files" :showUpload="false"></global-upload>
</view>
</template>
</up-cell>
</template>
</up-cell-group>
</view>
</up-collapse-item>
<up-collapse-item title="处置经过" name="3">
<view class="mocp-cell">
<up-cell-group>
<up-cell title="内容" :label="details.dispose?.content || '-'" />
<up-cell title="相关附件"> <up-cell title="相关附件">
<template #label> <template #label>
<view style="margin-top: 16rpx"> <view style="margin-top: 16rpx">
<global-upload :fileList="details.dispose?.files" :showUpload="false"></global-upload> <global-upload :fileList="details.disposeFiles" :showUpload="false"></global-upload>
</view> </view>
</template> </template>
</up-cell> </up-cell>
</up-cell-group> </up-cell-group>
</view> </view>
</up-collapse-item> </up-collapse-item>
<up-collapse-item title="经济损失分析" name="4"> <view class="mocp-title">
部件信息
<global-button type="text" @tap="navigateTo('/panel/technicalAnalysis/partList')">点击查看</global-button>
</view>
<view class="mocp-title">
同类事件
<global-button type="text" @tap="navigateTo('/panel/technicalAnalysis/similarEvents')">点击查看</global-button>
</view>
<up-collapse-item title="故障原因分析" name="3">
<view class="mocp-cell"> <view class="mocp-cell">
<up-cell-group> <up-cell-group>
<up-cell title="不正常航班费用"> <template v-for="(item, index) in details.failAnalysisList" :key="index">
<template #value>{{ details.economy?.abnormal || 0 }}</template>
</up-cell>
<up-cell title="人员AOG差旅费用">
<template #value>{{ details.economy?.travel || 0 }}</template>
</up-cell>
<up-cell title="外委费用">
<template #value>{{ details.economy?.outsourcing || 0 }}</template>
</up-cell>
<up-cell title="航材保障费用">
<template #value>{{ details.economy?.material || 0 }}</template>
</up-cell>
<up-cell title="工具设备借用费用">
<template #value>{{ details.economy?.equipment || 0 }}</template>
</up-cell>
<up-cell title="其他">
<template #value>{{ details.economy?.others || 0 }}</template>
</up-cell>
<up-cell title="合计">
<template #value>
{{
(details.economy?.abnormal || 0) * 1 +
(details.economy?.travel || 0) * 1 +
(details.economy?.outsourcing || 0) * 1 +
(details.economy?.material || 0) * 1 +
(details.economy?.equipment || 0) * 1 +
(details.economy?.others || 0) * 1
}}
</template>
</up-cell>
</up-cell-group>
</view>
</up-collapse-item>
<template v-for="item in details.elementList">
<up-collapse-item :title="item.title || '-'" :name="item.id">
<view class="mocp-cell">
<up-cell-group>
<up-cell title="内容" :label="item.content || '-'" /> <up-cell title="内容" :label="item.content || '-'" />
<up-cell title="相关附件"> <up-cell title="相关附件">
<template #label> <template #label>
...@@ -122,63 +86,59 @@ ...@@ -122,63 +86,59 @@
</view> </view>
</template> </template>
</up-cell> </up-cell>
<up-cell title="填报人" :value="item.uname || '-'" />
<up-cell title="填报时间" :value="timeStampFormat(item.time) || '-'" />
</up-cell-group>
</view>
</up-collapse-item>
</template>
<view class="mocp-title">
事件分析
<global-button type="text" @tap="navigateTo('/panel/operationalSurvey/analysisList')">点击查看</global-button>
</view>
<up-collapse-item title="事件结论" name="5">
<view class="mocp-cell">
<up-cell-group>
<up-cell title="内容" :label="details.conclusion?.eventConclusion || '-'" />
<up-cell title="相关附件">
<template #label>
<view style="margin-top: 16rpx">
<global-upload :fileList="details.conclusion?.files" :showUpload="false"></global-upload>
</view>
</template>
</up-cell>
<template v-for="item in details.conclusion?.liabilities">
<up-cell title="责任单位" :value="getParamNameByValue('RcQaLiabilityBelong', item.liabilityBelong)" />
<up-cell title="责任定性" :value="getParamNameByValue('RcQaNature', item.liabilityNature)" />
</template> </template>
<up-cell title="填报人" :value="details.conclusion?.uname || '-'" />
<up-cell title="填报时间" :value="timeStampFormat(details.conclusion?.time) || '-'" />
</up-cell-group> </up-cell-group>
</view> </view>
</up-collapse-item> </up-collapse-item>
<up-collapse-item title="改进措施" name="6"> <up-collapse-item title="厂家技术文件及改进措施" name="4">
<view class="mocp-cell"> <view class="mocp-cell">
<up-cell-group> <up-cell-group>
<up-cell title="内容" :label="details.improve?.content || '-'" /> <template v-for="(item, index) in details.factoryImproveList" :key="index">
<up-cell title="填报人" :value="details.improve?.uname || '-'" /> <up-cell title="标题" :value="item.title || '-'" />
<up-cell title="填报时间" :value="timeStampFormat(details.improve?.time) || '-'" /> <up-cell title="ATA章节" :value="item.ataChapter || '-'" />
<up-cell title="故障标签" :value="item.faultTag || '-'" />
<up-cell title="内容" :label="item.content || '-'" />
<up-cell title="相关附件">
<template #label>
<view style="margin-top: 16rpx">
<global-upload :fileList="item.files" :showUpload="false"></global-upload>
</view>
</template>
</up-cell>
</template>
</up-cell-group> </up-cell-group>
</view> </view>
</up-collapse-item> </up-collapse-item>
<up-collapse-item title="批准" name="7"> <up-collapse-item title="当前管控措施和进展" name="5">
<view class="mocp-cell"> <view class="mocp-cell">
<up-cell-group> <up-cell-group>
<up-cell title="批示意见" :value="getAuditContent" /> <template v-for="(item, index) in details.currentProgressList" :key="index">
<up-cell title="填报人" :value="details.audit?.auditName || '-'" /> <up-cell title="标题" :value="item.title || '-'" />
<up-cell title="填报时间" :value="timeStampFormat(details.audit?.auditTime) || '-'" /> <up-cell title="ATA章节" :value="item.ataChapter || '-'" />
<up-cell title="故障标签" :value="item.faultTag || '-'" />
<up-cell title="内容" :label="item.content || '-'" />
<up-cell title="相关附件">
<template #label>
<view style="margin-top: 16rpx">
<global-upload :fileList="item.files" :showUpload="false"></global-upload>
</view>
</template>
</up-cell>
</template>
</up-cell-group> </up-cell-group>
</view> </view>
<global-button type="primary" :radius="0" size="large" @tap="navigateTo('/panel/operationalSurvey/audit')">
批示
</global-button>
</up-collapse-item> </up-collapse-item>
<up-collapse-item title="MOC点评" name="8"> <up-collapse-item title="总结" name="6">
<view class="mocp-cell"> <view class="mocp-cell">
<up-cell-group> <up-cell-group>
<up-cell title="内容" :label="details.reviews?.evaluation || '-'" /> <up-cell title="内容" :label="details.summary || '-'" />
<up-cell title="填报人" :value="details.reviews?.uname || '-'" /> <up-cell title="相关附件">
<up-cell title="填报时间" :value="timeStampFormat(details.reviews?.time) || '-'" /> <template #label>
<view style="margin-top: 16rpx">
<global-upload :fileList="details.summaryFiles" :showUpload="false"></global-upload>
</view>
</template>
</up-cell>
</up-cell-group> </up-cell-group>
</view> </view>
</up-collapse-item> </up-collapse-item>
...@@ -202,63 +162,19 @@ import useBaseStore from 'mocp/store/base' ...@@ -202,63 +162,19 @@ import useBaseStore from 'mocp/store/base'
import { timeStampFormat } from 'mocp/utils/tool' import { timeStampFormat } from 'mocp/utils/tool'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict' import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import { onLoad } from '@dcloudio/uni-app' import { onLoad } from '@dcloudio/uni-app'
import useOperationalSurveyStore from 'mocp/store/operationalSurvey'
import { computed } from 'vue' import { computed } from 'vue'
import { getParamNameByValue } from 'mocp/hooks/use-params/useParams' import { getParamNameByValue } from 'mocp/hooks/use-params/useParams'
import { navigateTo } from 'mocp/utils/jump' import { navigateTo } from 'mocp/utils/jump'
import useTechnicalAnalysisStore from 'mocp/store/technicalAnalysis'
const query = defineProps(['workbenchId']) const query = defineProps(['workbenchId'])
const baseStore = useBaseStore() const baseStore = useBaseStore()
const { const technicalAnalysisStore = useTechnicalAnalysisStore()
rcOptions: { delayNature }
} = useBaseStore()
const operationalSurveyStore = useOperationalSurveyStore()
onLoad(() => { onLoad(() => {
operationalSurveyStore.setState('workbenchId', query.workbenchId) technicalAnalysisStore.setState('workbenchId', query.workbenchId)
operationalSurveyStore.getRsData2() technicalAnalysisStore.getTaData2()
})
const { details } = storeToRefs(operationalSurveyStore)
// 获取发起席位
const getSeat = computed(() => {
return (
details.value?.seat
.split(',')
.map((item) => {
const seat = operationalSurveyStore.selectList.allSeatSelect.find((option) => item == option.id)
return seat?.seatName || ''
})
.join(',') || '-'
)
})
//获取事件分类
const getEventclass = computed(() => {
return (
details.value?.eventclassList
.map((item) => {
return item.eventclass2 || item.eventclass1
})
.join(',') || '-'
)
})
//获取批准意见
const getAuditContent = computed(() => {
if (details.value?.audit) {
return (
useGetDictByValue('os_opinion', details.value.audit.opinion) +
(details.value.audit.content ? ',' + details.value.audit.content : details.value.audit.content)
)
} else {
return '-'
}
})
//获取默认展开项
const getCollapseValue = computed(() => {
const value = ['1', '2', '3', '4', '5', '6', '7', '8']
details.value?.elementList.forEach((element) => {
value.push(element.id)
})
return value
}) })
const { details } = storeToRefs(technicalAnalysisStore)
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.mocp-cell { .mocp-cell {
...@@ -274,7 +190,8 @@ const getCollapseValue = computed(() => { ...@@ -274,7 +190,8 @@ const getCollapseValue = computed(() => {
} }
.mocp-subTitle { .mocp-subTitle {
padding: 24rpx 32rpx 0 32rpx; padding: 24rpx 32rpx 0 32rpx;
font-weight: bold; color: $mocp-text-5;
font-size: 28rpx;
} }
:deep(.u-collapse-item) { :deep(.u-collapse-item) {
.u-cell { .u-cell {
......
...@@ -11,11 +11,11 @@ ...@@ -11,11 +11,11 @@
<script setup> <script setup>
import { ref } from 'vue' import { ref } from 'vue'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import useOperationalSurveyStore from 'mocp/store/operationalSurvey'
import { timeStampFormat } from 'mocp/utils/tool' import { timeStampFormat } from 'mocp/utils/tool'
import useTechnicalAnalysisStore from 'mocp/store/technicalAnalysis'
const operationalSurveyStore = useOperationalSurveyStore() const technicalAnalysisStore = useTechnicalAnalysisStore()
const { details } = storeToRefs(operationalSurveyStore) const { details } = storeToRefs(technicalAnalysisStore)
const columns = ref([ const columns = ref([
{ title: '机号', dataIndex: 'machineNumber' }, { title: '机号', dataIndex: 'machineNumber' },
{ title: '故障描述', dataIndex: 'faultDescribe' }, { title: '故障描述', dataIndex: 'faultDescribe' },
......
<template> <template>
<global-page <global-page
ref="paging" ref="paging"
:api="getRsDataList2Api" :api="getTaDataList2Api"
:padding="24" :padding="24"
:params="searchData" :params="searchData"
auto auto
...@@ -30,18 +30,6 @@ ...@@ -30,18 +30,6 @@
<view class="item-content u-line-3"> <view class="item-content u-line-3">
{{ item.eventMsg || '无' }} {{ item.eventMsg || '无' }}
</view> </view>
<view class="item-footer">
<view class="label">
<global-icon icon="calendar"></global-icon>
<text class="txt">
{{ timeStampFormat(item.proposedTime) }}
</text>
</view>
<view class="label u-line-1">
<global-icon icon="idcard"></global-icon>
<text class="txt">提出人:{{ item.proposer || '-' }}</text>
</view>
</view>
</view> </view>
</template> </template>
</global-page> </global-page>
...@@ -50,34 +38,30 @@ ...@@ -50,34 +38,30 @@
<script setup> <script setup>
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict' import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import { onLoad, onUnload } from '@dcloudio/uni-app' import { onUnload } from '@dcloudio/uni-app'
import { ref } from 'vue' import { ref } from 'vue'
import useOperationalSurveyStore from 'mocp/store/operationalSurvey' import { getTaDataList2Api } from 'mocp/api/technicalAnalysis'
import { getRsDataList2Api } from 'mocp/api/operationalSurvey' import useTechnicalAnalysisStore from 'mocp/store/technicalAnalysis'
import { timeStampFormat } from 'mocp/utils/tool'
//跳转 //跳转
const goDetails = (data) => { const goDetails = (data) => {
uni.$mocpJump.navigateTo('/panel/operationalSurvey/details', { uni.$mocpJump.navigateTo('/panel/technicalAnalysis/details', {
workbenchId: data.workbenchId workbenchId: data.workbenchId
}) })
} }
//加载下拉框数据 //加载下拉框数据
const operationalSurveyStore = useOperationalSurveyStore() const technicalAnalysisStore = useTechnicalAnalysisStore()
const { searchData } = storeToRefs(operationalSurveyStore) const { searchData } = storeToRefs(technicalAnalysisStore)
onLoad(() => {
operationalSurveyStore.getSysSeatList()
})
//筛选 //筛选
const handleRightClick = () => { const handleRightClick = () => {
uni.$mocpJump.navigateTo('/panel/operationalSurvey/search') uni.$mocpJump.navigateTo('/panel/technicalAnalysis/search')
} }
const paging = ref() const paging = ref()
uni.$on('operationalSurveyReload', () => { uni.$on('technicalAnalysisReload', () => {
paging.value?.reload() paging.value?.reload()
}) })
onUnload(() => { onUnload(() => {
uni.$off('operationalSurveyReload') uni.$off('technicalAnalysisReload')
}) })
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
<template>
<global-page title="部件信息详情">
<global-table :columns="columns" :data="details?.partList" :width="120">
<template #installTime="{ row }">
{{ timeStampFormat(row.installTime, { format: 'YYYY/MM/DD' }) }}
</template>
<template #localMaterials="{ row }">
{{ useGetDictByValue('ta_localMaterials', row.localMaterials) }}
</template>
</global-table>
</global-page>
</template>
<script setup>
import { ref } from 'vue'
import { storeToRefs } from 'pinia'
import { timeStampFormat } from 'mocp/utils/tool'
import useTechnicalAnalysisStore from 'mocp/store/technicalAnalysis'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
const technicalAnalysisStore = useTechnicalAnalysisStore()
const { details } = storeToRefs(technicalAnalysisStore)
const columns = ref([
{ title: '件号', dataIndex: 'partNo', minWidth: 100 },
{ title: '序号', dataIndex: 'serialNo' },
{ title: '部件名称', dataIndex: 'partName' },
{ title: '部件性质', dataIndex: 'partNature' },
{ title: '部件情况', dataIndex: 'partSituation' },
{ title: '装机时间', dataIndex: 'installTime' },
{ title: 'CSN', dataIndex: 'csn' },
{ title: 'TSN', dataIndex: 'tsn' },
{ title: 'CSR', dataIndex: 'csr' },
{ title: 'TSR', dataIndex: 'tsr' },
{ title: '当地航材', dataIndex: 'localMaterials' },
{ title: '当地配置标准', dataIndex: 'localConf' },
{ title: '软时限', dataIndex: 'companyReliability' },
{ title: '航空集团平均使用时间', dataIndex: 'useAverageTime' },
{ title: '世界机队平均使用时间', dataIndex: 'worldFleet' }
])
</script>
<style lang="scss" scoped></style>
...@@ -3,7 +3,16 @@ ...@@ -3,7 +3,16 @@
<view class="search-form"> <view class="search-form">
<up-form labelPosition="left" labelWidth="auto"> <up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="isOpen" :borderBottom="true"> <up-form-item label="状态" prop="isOpen" :borderBottom="true">
<global-picker v-model="formData.isOpen" pickAlign="right" clearable dictkey="mae_isOpen"></global-picker> <global-picker v-model="formData.isOpen" pickAlign="right" clearable dictkey="ta_isOpen"></global-picker>
</up-form-item>
<up-form-item label="机号" prop="ac" :borderBottom="true">
<global-picker pickAlign="right" v-model="formData.ac" :options="deviceNumList" clearable filter></global-picker>
</up-form-item>
<up-form-item label="机型" prop="acType" :borderBottom="true">
<global-picker v-model="formData.acType" pickAlign="right" :options="baseStore.getTypeSelect" clearable filter></global-picker>
</up-form-item>
<up-form-item label="航司" prop="acOwn" :borderBottom="true">
<global-picker v-model="formData.acOwn" pickAlign="right" :options="baseStore.getAirlineSelect" clearable filter></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="航站" prop="acTerminal" :borderBottom="true"> <up-form-item label="航站" prop="acTerminal" :borderBottom="true">
<global-picker <global-picker
...@@ -14,34 +23,17 @@ ...@@ -14,34 +23,17 @@
filter filter
></global-picker> ></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="航司" prop="acOwn" :borderBottom="true"> <up-form-item label="专业类别" prop="majorClass" :borderBottom="true">
<global-picker v-model="formData.acOwn" pickAlign="right" :options="baseStore.getAirlineSelect" clearable filter></global-picker>
</up-form-item>
<up-form-item label="机型" prop="acType" :borderBottom="true">
<global-picker v-model="formData.acType" pickAlign="right" :options="baseStore.getTypeSelect" clearable filter></global-picker>
</up-form-item>
<up-form-item label="机号" prop="ac" :borderBottom="true">
<global-picker pickAlign="right" v-model="formData.ac" :options="deviceNumList" clearable filter></global-picker>
</up-form-item>
<up-form-item label="发起日期" :borderBottom="true">
<global-calendar
pickAlign="right"
v-model:startTime="formData.startTime"
v-model:endTime="formData.stopTime"
clearable
></global-calendar>
</up-form-item>
<up-form-item label="发起席位" prop="seat" :borderBottom="true">
<global-picker <global-picker
v-model="formData.majorClass"
pickAlign="right" pickAlign="right"
v-model="formData.seat" :options="getParamsByType('MajorCategory')"
:options="operationalSurveyStore.selectList.allSeatSelect"
label-field="seatName"
value-field="id"
clearable clearable
filter
></global-picker> ></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="ATA章节" prop="ataChapter" :borderBottom="true">
<global-picker v-model="formData.ataChapter" pickAlign="right" :options="baseStore.getATAChecked()" clearable filter />
</up-form-item>
</up-form> </up-form>
</view> </view>
<template #bottom> <template #bottom>
...@@ -62,26 +54,27 @@ import useBaseStore from 'mocp/store/base' ...@@ -62,26 +54,27 @@ import useBaseStore from 'mocp/store/base'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { ref } from 'vue' import { ref } from 'vue'
import useOperationalSurveyStore from 'mocp/store/operationalSurvey' import useTechnicalAnalysisStore from 'mocp/store/technicalAnalysis'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
//获取下拉框选项 //获取下拉框选项
const baseStore = useBaseStore() const baseStore = useBaseStore()
const { const {
selectList: { deviceNumList } selectList: { deviceNumList }
} = useBaseStore() } = useBaseStore()
const operationalSurveyStore = useOperationalSurveyStore() const technicalAnalysisStore = useTechnicalAnalysisStore()
//获取查询表单数据 //获取查询表单数据
const { searchData } = storeToRefs(operationalSurveyStore) const { searchData } = storeToRefs(technicalAnalysisStore)
const formData = ref(cloneDeep(searchData.value)) const formData = ref(cloneDeep(searchData.value))
const handleReset = () => { const handleReset = () => {
operationalSurveyStore.resetForm() technicalAnalysisStore.resetForm()
uni.$mocpJump.navigateBack() uni.$mocpJump.navigateBack()
uni.$emit('operationalSurveyReload') uni.$emit('technicalAnalysisReload')
} }
const handleConfirm = () => { const handleConfirm = () => {
operationalSurveyStore.setState('searchData', formData.value) technicalAnalysisStore.setState('searchData', formData.value)
uni.$mocpJump.navigateBack() uni.$mocpJump.navigateBack()
uni.$emit('operationalSurveyReload') uni.$emit('technicalAnalysisReload')
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
<template>
<global-page title="同类事件详情">
<global-table :columns="columns" :data="details?.similarEvents">
<template #sendingTime="{ row }">
{{ timeStampFormat(row.sendingTime) }}
</template>
</global-table>
</global-page>
</template>
<script setup>
import { ref } from 'vue'
import { storeToRefs } from 'pinia'
import { timeStampFormat } from 'mocp/utils/tool'
import useTechnicalAnalysisStore from 'mocp/store/technicalAnalysis'
const technicalAnalysisStore = useTechnicalAnalysisStore()
const { details } = storeToRefs(technicalAnalysisStore)
const columns = ref([
{ title: '机号', dataIndex: 'machineNumber' },
{ title: '故障描述', dataIndex: 'faultDescribe' },
{ title: '处理措施', dataIndex: 'handle' },
{ title: 'ATA章节', dataIndex: 'ata' },
{ title: '发生时间', dataIndex: 'sendingTime' }
])
</script>
<style lang="scss" scoped></style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment