Commit 9619bcfa by pangchong

feat: 品质分析责任单位

parent 83f97dad
import { http } from 'mocp/utils/http'
export const getTaDataList2Api = (data, config) => {
return http({
method: 'POST',
url: '/repaircontrol/getTaDataList2',
data,
config
})
}
// 建议以文件名首字母作为前缀ta_
export const ta_isOpen = [
{ label: 'OPEN', value: 1 },
{ label: 'CLOSE', value: 0 },
{ label: '跟踪', value: 2 }
]
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 { getSysSeatListApi } from 'mocp/api/system'
import { defineStore } from 'pinia' import { defineStore } from 'pinia'
function findRelatedLabelOfEnetOrg(items, id) {
let res = ''
for (const item of items) {
if (item.key == id) {
res = item.label
break
}
if (Array.isArray(item.children)) {
res = findRelatedLabelOfEnetOrg(item.children, id)
if (res) {
break
}
}
}
return res
}
const useQualityAnalysisStore = defineStore('qualityAnalysis', { const useQualityAnalysisStore = defineStore('qualityAnalysis', {
state: () => { state: () => {
return { return {
selectList: { selectList: {
allSeatSelect: [], allSeatSelect: [],
dimensionTree: [] dimensionTree: [],
EnetOrgTree: [],
EnetOrgRepeatTree: [],
EnetOrgRepeatTreeZh: []
}, },
searchData: { searchData: {
isOpen: 0, isOpen: 0,
...@@ -78,13 +98,69 @@ const useQualityAnalysisStore = defineStore('qualityAnalysis', { ...@@ -78,13 +98,69 @@ const useQualityAnalysisStore = defineStore('qualityAnalysis', {
} }
}, },
async getQaData2() { async getQaData2() {
const res = await getQaData2Api({ workbenchId: this.workbenchId }, { loading: true }) const res = await getQaData2Api({ workbenchId: this.workbenchId })
if (res.code == 200) { if (res.code == 200) {
this.details = res.data this.details = res.data
} else { } else {
uni.$mocpMessage.error(res.message) uni.$mocpMessage.error(res.message)
} }
}, },
async getEnetOrgTree() {
const res = await getEnetOrgTreeApi({})
if (res.code == 200) {
function transformData(data) {
return data.map((v) => {
let arr = []
if (v.nodeList.length) {
arr = transformData(v.nodeList)
}
return {
label: v.fullName,
key: v.nodeId + v.level,
id: v.nodeId,
children: arr
}
})
}
this.selectList.EnetOrgTree = transformData(res.data)
function transformRepeatData(data) {
return data.map((v) => {
let arr = []
if (v.nodeList.length) {
arr = transformRepeatData(v.nodeList)
}
return {
label: v.fullName,
key: v.nodeId,
id: v.nodeId,
children: arr
}
})
}
this.selectList.EnetOrgRepeatTree = transformRepeatData(res.data)
function transformRepeatDataZh(data) {
return data.map((v) => {
let arr = []
if (v.nodeList.length) {
arr = transformRepeatDataZh(v.nodeList)
}
return {
label: v.fullName,
key: v.fullName,
id: v.fullName,
children: arr
}
})
}
this.selectList.EnetOrgRepeatTreeZh = transformRepeatDataZh(res.data)
}
},
getEnetRepeatOrg(id) {
return findRelatedLabelOfEnetOrg(this.selectList.EnetOrgRepeatTree, id)
},
getEnetOrg(id) {
return findRelatedLabelOfEnetOrg(this.selectList.EnetOrgTree, id)
},
resetForm() { resetForm() {
this.searchData = { this.searchData = {
isOpen: 0, isOpen: 0,
......
import { getRsData2Api } from 'mocp/api/operationalSurvey'
import { getSysSeatListApi } from 'mocp/api/system'
import { defineStore } from 'pinia'
const useTechnicalAnalysisStore = defineStore('technicalAnalysis', {
state: () => {
return {
selectList: {
allSeatSelect: []
},
searchData: {
isOpen: 1,
acTerminal: '',
acOwn: '',
acType: '',
ac: '',
startTime: null,
stopTime: null,
seat: ''
},
workbenchId: '',
details: undefined
}
},
getters: {},
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() {
const res = await getRsData2Api({ workbenchId: this.workbenchId }, { loading: true })
if (res.code == 200) {
this.details = res.data
} else {
uni.$mocpMessage.error(res.message)
}
},
resetForm() {
this.searchData = {
isOpen: 1,
acTerminal: '',
acOwn: '',
acType: '',
ac: '',
startTime: null,
stopTime: null,
seat: ''
}
},
setState(...args) {
this.$patch({ [args[0]]: args[1] })
}
},
// 配置持久化
persist: false
})
export default useTechnicalAnalysisStore
...@@ -21,7 +21,7 @@ const menuList = ref([ ...@@ -21,7 +21,7 @@ const menuList = ref([
{ id: 'zysq', name: '支援申请', icon: 'zysq', group: '技术支援', default: false, count: 0, url: '/panel/support-application/search' }, { id: 'zysq', name: '支援申请', icon: 'zysq', group: '技术支援', default: false, count: 0, url: '/panel/support-application/search' },
{ id: 'gzzl', name: '工作指令', icon: 'gzzl', group: '技术支援', default: false, count: 0, url: '/panel/work-assignment/search' }, { id: 'gzzl', name: '工作指令', icon: 'gzzl', group: '技术支援', default: false, count: 0, url: '/panel/work-assignment/search' },
{ id: 'jspg', name: '技术评估', icon: 'jspg', group: '技术支援', default: false, count: 0, url: '/panel/technology-evaluation/list' }, { id: 'jspg', name: '技术评估', icon: 'jspg', group: '技术支援', default: false, count: 0, url: '/panel/technology-evaluation/list' },
{ id: 'jsfx', name: '技术分析', icon: 'jsfx', group: '技术支援', default: false, count: 0 }, { id: 'jsfx', name: '技术分析', icon: 'jsfx', group: '技术支援', default: false, count: 0, url: '/panel/technicalAnalysis/list' },
{ id: 'MCO', name: 'MCO', icon: 'MCO', group: '技术支援', default: true, count: 0, url: '/panel/mco/search' }, { id: 'MCO', name: 'MCO', icon: 'MCO', group: '技术支援', default: true, count: 0, url: '/panel/mco/search' },
{ id: 'wjll', name: '文件浏览', icon: 'wjll', group: '技术支援', default: false, count: 0, url: '/panel/fileList/index' }, { id: 'wjll', name: '文件浏览', icon: 'wjll', group: '技术支援', default: false, count: 0, url: '/panel/fileList/index' },
// 运行品质 // 运行品质
......
...@@ -644,6 +644,30 @@ ...@@ -644,6 +644,30 @@
"style": { "style": {
"navigationBarTitleText": "品质跟踪闭环要求详情" "navigationBarTitleText": "品质跟踪闭环要求详情"
} }
},
{
"path": "pages/modules/mocp/panel/technicalAnalysis/list",
"style": {
"navigationBarTitleText": "技术分析"
}
},
{
"path": "pages/modules/mocp/panel/technicalAnalysis/search",
"style": {
"navigationBarTitleText": "筛选"
}
},
{
"path": "pages/modules/mocp/panel/technicalAnalysis/details",
"style": {
"navigationBarTitleText": "技术分析详情"
}
},
{
"path": "pages/modules/mocp/panel/technicalAnalysis/historicalFault",
"style": {
"navigationBarTitleText": "故障历史详情"
}
} }
], ],
"globalStyle": { "globalStyle": {
......
...@@ -191,7 +191,7 @@ import CardDetailsFooter from './components/card-details-footer.vue' ...@@ -191,7 +191,7 @@ import CardDetailsFooter from './components/card-details-footer.vue'
import CompanyPopup from './components/company-popup.vue' import CompanyPopup from './components/company-popup.vue'
import useAssignWorkStore from 'mocp/store/assign-work' import useAssignWorkStore from 'mocp/store/assign-work'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { onLoad, onUnload } from '@dcloudio/uni-app' import { onLoad } from '@dcloudio/uni-app'
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 { getParamNameByValue } from 'mocp/hooks/use-params/useParams' import { getParamNameByValue } from 'mocp/hooks/use-params/useParams'
......
...@@ -4,6 +4,9 @@ ...@@ -4,6 +4,9 @@
<template #index="{ index }"> <template #index="{ index }">
{{ index + 1 }} {{ index + 1 }}
</template> </template>
<template #company="{ row }">
{{ getCompany(row.company) }}
</template>
<template #endTime="{ row }"> <template #endTime="{ row }">
{{ timeStampFormat(row.endTime) }} {{ timeStampFormat(row.endTime) }}
</template> </template>
...@@ -25,5 +28,13 @@ const columns = ref([ ...@@ -25,5 +28,13 @@ const columns = ref([
{ title: '任务描述', dataIndex: 'taskDescribe' }, { title: '任务描述', dataIndex: 'taskDescribe' },
{ title: '完成日期', dataIndex: 'endTime' } { title: '完成日期', dataIndex: 'endTime' }
]) ])
const getCompany = (company) => {
return company
.split(',')
.map((v) => {
return qualityAnalysisStore.getEnetRepeatOrg(v) || qualityAnalysisStore.getEnetOrg(v)
})
.join(',')
}
</script> </script>
<style lang="scss" scoped></style> <style lang="scss" scoped></style>
...@@ -146,9 +146,15 @@ import useQualityAnalysisStore from 'mocp/store/qualityAnalysis' ...@@ -146,9 +146,15 @@ import useQualityAnalysisStore from 'mocp/store/qualityAnalysis'
const query = defineProps(['workbenchId']) const query = defineProps(['workbenchId'])
const baseStore = useBaseStore() const baseStore = useBaseStore()
const qualityAnalysisStore = useQualityAnalysisStore() const qualityAnalysisStore = useQualityAnalysisStore()
onLoad(() => { onLoad(async () => {
qualityAnalysisStore.setState('workbenchId', query.workbenchId) qualityAnalysisStore.setState('workbenchId', query.workbenchId)
qualityAnalysisStore.getQaData2() uni.showLoading({
title: '加载中...',
mask: true
})
await qualityAnalysisStore.getQaData2()
await qualityAnalysisStore.getEnetOrgTree()
uni.hideLoading()
}) })
const { details } = storeToRefs(qualityAnalysisStore) const { details } = storeToRefs(qualityAnalysisStore)
// 获取发起席位 // 获取发起席位
......
...@@ -4,6 +4,9 @@ ...@@ -4,6 +4,9 @@
<template #index="{ index }"> <template #index="{ index }">
{{ index + 1 }} {{ index + 1 }}
</template> </template>
<template #unit="{ row }">
{{ getCompany(row.unit) }}
</template>
<template #endTime="{ row }"> <template #endTime="{ row }">
{{ timeStampFormat(row.endTime) }} {{ timeStampFormat(row.endTime) }}
</template> </template>
...@@ -25,5 +28,13 @@ const columns = ref([ ...@@ -25,5 +28,13 @@ const columns = ref([
{ title: '事件类型', dataIndex: 'eventType' }, { title: '事件类型', dataIndex: 'eventType' },
{ title: '反馈期限', dataIndex: 'callbackLimit' } { title: '反馈期限', dataIndex: 'callbackLimit' }
]) ])
const getCompany = (company) => {
return company
.split(',')
.map((v) => {
return qualityAnalysisStore.getEnetRepeatOrg(v) || qualityAnalysisStore.getEnetOrg(v)
})
.join(',')
}
</script> </script>
<style lang="scss" scoped></style> <style lang="scss" scoped></style>
<template>
<global-page title="故障历史详情">
<global-table :columns="columns" :data="details?.historicalFault">
<template #sendingTime="{ row }">
{{ timeStampFormat(row.sendingTime) }}
</template>
</global-table>
</global-page>
</template>
<script setup>
import { ref } from 'vue'
import { storeToRefs } from 'pinia'
import useOperationalSurveyStore from 'mocp/store/operationalSurvey'
import { timeStampFormat } from 'mocp/utils/tool'
const operationalSurveyStore = useOperationalSurveyStore()
const { details } = storeToRefs(operationalSurveyStore)
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>
<template>
<global-page
ref="paging"
:api="getRsDataList2Api"
:padding="24"
:params="searchData"
auto
isDataList
loadingMoreEnabled
navRightIcon="saixuan-01"
navRightType="icon"
refresherEnabled
showNavRight
title="技术分析"
@handleRightClick="handleRightClick"
>
<template #default="{ item }">
<view class="item" @tap="goDetails(item)">
<view class="item-title">
<view class="left">
<custom-state :value="useGetDictByValue('os_isOpen', item.isOpen)"></custom-state>
</view>
<view class="right">
<text class="txt u-line-1" v-if="item.ac">{{ item.ac }}</text>
<text class="txt u-line-1" v-if="item.acType">{{ item.acType }}</text>
<text class="txt u-line-1" v-if="item.acOwn">{{ item.acOwn }}</text>
<text class="txt u-line-1" v-if="item.acTerminal">{{ item.acTerminal }}</text>
</view>
</view>
<view class="item-content u-line-3">
{{ item.eventMsg || '无' }}
</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>
</template>
</global-page>
</template>
<script setup>
import { storeToRefs } from 'pinia'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import { onLoad, onUnload } from '@dcloudio/uni-app'
import { ref } from 'vue'
import useOperationalSurveyStore from 'mocp/store/operationalSurvey'
import { getRsDataList2Api } from 'mocp/api/operationalSurvey'
import { timeStampFormat } from 'mocp/utils/tool'
//跳转
const goDetails = (data) => {
uni.$mocpJump.navigateTo('/panel/operationalSurvey/details', {
workbenchId: data.workbenchId
})
}
//加载下拉框数据
const operationalSurveyStore = useOperationalSurveyStore()
const { searchData } = storeToRefs(operationalSurveyStore)
onLoad(() => {
operationalSurveyStore.getSysSeatList()
})
//筛选
const handleRightClick = () => {
uni.$mocpJump.navigateTo('/panel/operationalSurvey/search')
}
const paging = ref()
uni.$on('operationalSurveyReload', () => {
paging.value?.reload()
})
onUnload(() => {
uni.$off('operationalSurveyReload')
})
</script>
<style lang="scss" scoped>
@import 'mocpStatic/css/list.scss';
</style>
<template>
<global-page title="筛选">
<view class="search-form">
<up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="isOpen" :borderBottom="true">
<global-picker v-model="formData.isOpen" pickAlign="right" clearable dictkey="mae_isOpen"></global-picker>
</up-form-item>
<up-form-item label="航站" prop="acTerminal" :borderBottom="true">
<global-picker
pickAlign="right"
v-model="formData.acTerminal"
clearable
:options="baseStore.getTerminalSelect"
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 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
pickAlign="right"
v-model="formData.seat"
:options="operationalSurveyStore.selectList.allSeatSelect"
label-field="seatName"
value-field="id"
clearable
filter
></global-picker>
</up-form-item>
</up-form>
</view>
<template #bottom>
<view class="footer-btn">
<up-row gutter="10">
<up-col span="6">
<global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col>
<up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col>
</up-row>
</view>
</template>
</global-page>
</template>
<script setup>
import useBaseStore from 'mocp/store/base'
import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash'
import { ref } from 'vue'
import useOperationalSurveyStore from 'mocp/store/operationalSurvey'
//获取下拉框选项
const baseStore = useBaseStore()
const {
selectList: { deviceNumList }
} = useBaseStore()
const operationalSurveyStore = useOperationalSurveyStore()
//获取查询表单数据
const { searchData } = storeToRefs(operationalSurveyStore)
const formData = ref(cloneDeep(searchData.value))
const handleReset = () => {
operationalSurveyStore.resetForm()
uni.$mocpJump.navigateBack()
uni.$emit('operationalSurveyReload')
}
const handleConfirm = () => {
operationalSurveyStore.setState('searchData', formData.value)
uni.$mocpJump.navigateBack()
uni.$emit('operationalSurveyReload')
}
</script>
<style lang="scss" scoped>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</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