Commit 612ad67d by liujinbo

Merge branch 'refs/heads/master' into master_ljb

parents f8ef0f04 542358e1
import { http } from 'mocp/utils/http'
export const getWorkTaskListApi = (data, config) => {
return http({
method: 'POST',
url: '/workbench/getWorkTaskList',
data,
config
})
}
export const WorkTaskIsSuccessApi = (data, config) => {
return http({
method: 'POST',
url: '/workbench/WorkTaskIsSuccess',
data,
config
})
}
......@@ -56,10 +56,16 @@ import { cloneDeep } from 'lodash'
const es = defineEmits(['update:modelValue', 'change', 'getScrollTop'])
const ps = defineProps({
//是否筛选
filter: {
type: Boolean,
default: false
},
//是否多选(只对filter有效)---待优化
// multiple: {
// type: Boolean,
// default: false
// },
style: {
type: Object,
default: () => {
......
// 建议以文件名首字母作为前缀aog_
export const aog_state = [
{ label: 'OPEN', value: '1' },
{ label: 'CLOSE', value: '2' }
]
import useBaseStore from 'mocp/store/base'
export const getParamsByType = (paramType) => {
const baseStore = useBaseStore()
return baseStore.allBasicParams[paramType]
?.filter((item) => item.isDel == 0)
?.map((item) => {
return { label: item.paramName, value: item.paramCode }
})
}
export const getParamNameByValue = (paramType, paramName, extend = {}) => {
if (extend && extend.isArray) {
const paramNameArray = paramName.split(',')
return paramNameArray
.reduce((q, w) => {
if (getParamNameByValue(paramType, w)) {
q.push(getParamNameByValue(paramType, w))
}
return q
}, [])
.join(',')
}
return getParamsByType(paramType).find((item) => item.value == paramName)?.label || ''
}
import { defineStore } from 'pinia'
const useAogStore = defineStore('aog', {
state: () => {
return {
searchData: {
state: '1',
machineNumber: '',
model: '',
aviation: '',
terminal: '',
major: null,
aogLevel: null,
happenDateStart: null,
happenDateEnd: null,
aogStartTimeStart: null,
aogStartTimeEnd: null,
happenAddr: '',
faultDesc: ''
},
details: undefined
}
},
getters: {},
actions: {
resetForm() {
this.searchData = {
state: '1',
machineNumber: '',
model: '',
aviation: '',
terminal: '',
major: null,
aogLevel: null,
happenDateStart: null,
happenDateEnd: null,
aogStartTimeStart: null,
aogStartTimeEnd: null,
happenAddr: '',
faultDesc: ''
}
},
setState(...args) {
this.$patch({ [args[0]]: args[1] })
}
},
// 配置持久化
persist: {
// 调整为兼容多端的API
storage: {
setItem(key, value) {
uni.setStorageSync(key, value)
},
getItem(key) {
return uni.getStorageSync(key)
}
}
}
})
export default useAogStore
......@@ -174,27 +174,6 @@ const useBaseStore = defineStore('base', {
}
})
})
},
getParamsByType(paramType) {
return this.allBasicParams[paramType]
?.filter((item) => item.isDel == 0)
?.map((item) => {
return { label: item.paramName, value: item.paramCode }
})
},
getParamNameByValue(paramType, paramName, extend = {}) {
if (extend && extend.isArray) {
const paramNameArray = paramName.split(',')
return paramNameArray
.reduce((q, w) => {
if (this.getParamNameByValue(paramType, w)) {
q.push(this.getParamNameByValue(paramType, w))
}
return q
}, [])
.join(',')
}
return this.getParamsByType(paramType).find((item) => item.value == paramName)?.label || ''
}
},
// 配置持久化
......
......@@ -14,7 +14,7 @@ const menuList = ref([
{ id: 10, name: '协议单位', icon: 'xydw', group: '航站管理', count: 0 },
{ id: 11, name: '不正常事件', icon: 'bzcsj', group: '运行品质', count: 0 },
{ id: 12, name: '考核记录', icon: 'khjl', group: '运行品质', count: 0, url: '/panel/appraisal-record/list' },
{ id: 13, name: 'AOG任务', icon: 'AOG', group: '运行品质', count: 0 },
{ id: 13, name: 'AOG任务', icon: 'AOG', group: '运行品质', count: 0, url: '/panel/aog/search' },
{ id: 14, name: 'MCO', icon: 'MCO', group: '运行品质', count: 0 },
{ id: 15, name: '航班保障', icon: 'hbbz', group: '运行品质', count: 0, url: '/panel/flight-support/list' }
])
......
......@@ -33,16 +33,6 @@ const useWorkAssignmentStore = defineStore('workAssignment', {
}
},
// 配置持久化
persist: {
// 调整为兼容多端的API
storage: {
setItem(key, value) {
uni.setStorageSync(key, value)
},
getItem(key) {
return uni.getStorageSync(key)
}
}
}
persist: false
})
export default useWorkAssignmentStore
......@@ -260,6 +260,24 @@
"style": {
"navigationBarTitleText": "工作任务指令详情"
}
},
{
"path": "pages/modules/mocp/panel/aog/search",
"style": {
"navigationBarTitleText": "筛选"
}
},
{
"path": "pages/modules/mocp/panel/aog/list",
"style": {
"navigationBarTitleText": "AOG列表"
}
},
{
"path": "pages/modules/mocp/panel/aog/details",
"style": {
"navigationBarTitleText": "AOG详情"
}
}
],
"globalStyle": {
......
.details {
padding: 16rpx 24rpx;
border-radius: 12rpx;
background: #ffffff;
color: $mocp-text-4;
}
<template>
<global-page :padding="24" title="AOG详情"></global-page>
</template>
<script setup>
import { storeToRefs } from 'pinia'
import { timeStampFormat } from 'mocp/utils/tool'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import { ref } from 'vue'
import useAogStore from 'mocp/store/aog'
const aogStore = useAogStore()
const { details } = storeToRefs(aogStore)
</script>
<style lang="scss" scoped>
@import './constants/details.scss';
</style>
<template>
<global-page
title="AOG列表"
isDataList
refresherEnabled
loadingMoreEnabled
auto
ref="paging"
:params="searchData"
showNavRight
navRightType="icon"
navRightIcon="saixuan-01"
@handleRightClick="handleRightClick"
:api="getWorkTaskListApi"
:padding="24"
>
<template #="{ dataList }">
<view class="item" v-for="item in dataList" :key="item.id" @tap="goDetails(item)">
<view class="item-title">
<view class="left">
<custom-state :value="useGetDictByValue('wa_state', item.state)"></custom-state>
<text class="txt u-line-1" v-if="item.machineNumber">{{ item.machineNumber }}</text>
</view>
<view class="right">
<global-tag :type="useGetDictByValue('wa_isSuccessType', item.isSuccess)">
{{ useGetDictByValue('wa_isSuccess', item.isSuccess) }}
</global-tag>
</view>
</view>
<view class="item-content u-line-3">
{{ item.taskDescription || '无' }}
</view>
<view class="item-footer">
<view class="label">
<global-icon icon="calendar"></global-icon>
<text class="txt">
{{ timeStampFormat(item.feedbackTime, { format: 'YYYY/MM/DD' }) }}
</text>
</view>
</view>
</view>
</template>
</global-page>
</template>
<script setup>
import { ref } from 'vue'
import { timeStampFormat } from 'mocp/utils/tool'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import { storeToRefs } from 'pinia'
import { onUnload } from '@dcloudio/uni-app'
import { getWorkTaskListApi } from 'mocp/api/work-assignment'
import useAogStore from 'mocp/store/aog'
//跳转
const aogStore = useAogStore()
const { searchData } = storeToRefs(aogStore)
const goDetails = (data) => {
uni.$mocpJump.navigateTo('/panel/aog/details', { id: data.id }).then(() => {
aogStore.setState('details', data)
})
}
//筛选
const handleRightClick = () => {
uni.$mocpJump.redirectTo('/panel/aog/search')
}
//刷新
const paging = ref()
uni.$on('aogReload', () => {
paging.value?.reload()
})
onUnload(() => {
uni.$off('aogReload')
})
</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="state" :borderBottom="true">
<global-picker v-model="formData.state" pickAlign="right" clearable dictkey="wa_state"></global-picker>
</up-form-item>
<up-form-item label="机号" prop="machineNumber" :borderBottom="true">
<global-picker pickAlign="right" v-model="formData.machineNumber" :options="deviceNumList" clearable filter></global-picker>
</up-form-item>
<up-form-item label="机型" prop="model" :borderBottom="true">
<global-picker v-model="formData.model" pickAlign="right" :options="baseStore.getTypeSelect" clearable filter></global-picker>
</up-form-item>
<up-form-item label="航司" prop="aviation" :borderBottom="true">
<global-picker
v-model="formData.aviation"
pickAlign="right"
:options="baseStore.getAirlineSelect"
clearable
filter
></global-picker>
</up-form-item>
<up-form-item label="航站" prop="terminal" :borderBottom="true">
<global-picker
pickAlign="right"
v-model="formData.terminal"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
</up-form-item>
<up-form-item label="专业类别" prop="major" :borderBottom="true">
<global-picker pickAlign="right" v-model="formData.major" clearable :options="baseStore.getTerminalSelect" filter></global-picker>
</up-form-item>
<up-form-item label="AOG级别" prop="aogLevel" :borderBottom="true">
<global-picker
pickAlign="right"
v-model="formData.aogLevel"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
</up-form-item>
<up-form-item label="发生日期" :borderBottom="true">
<global-calendar
pickAlign="right"
v-model:startTime="formData.happenDateStart"
v-model:endTime="formData.happenDateEnd"
clearable
></global-calendar>
</up-form-item>
<up-form-item label="AOG启动日期" :borderBottom="true">
<global-calendar
pickAlign="right"
v-model:startTime="formData.aogStartTimeStart"
v-model:endTime="formData.aogStartTimeEnd"
clearable
></global-calendar>
</up-form-item>
<up-form-item label="发生地点" prop="happenAddr" :borderBottom="true">
<global-picker
pickAlign="right"
v-model="formData.happenAddr"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
</up-form-item>
<up-form-item label="故障描述" prop="faultDesc" :borderBottom="true">
<up-input v-model="formData.faultDesc" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
</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 useAogStore from 'mocp/store/aog'
//获取下拉框选项
const baseStore = useBaseStore()
const {
selectList: { deviceNumList }
} = useBaseStore()
const aogStore = useAogStore()
//获取查询表单数据
const { searchData } = storeToRefs(aogStore)
const formData = ref(cloneDeep(searchData.value))
const handleReset = () => {
aogStore.resetForm()
uni.$mocpJump.redirectTo('/panel/aog/list')
uni.$emit('aogReload')
}
const handleConfirm = () => {
aogStore.setState('searchData', formData.value)
uni.$mocpJump.redirectTo('/panel/aog/list')
uni.$emit('aogReload')
}
</script>
<style lang="scss" scoped>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
......@@ -11,7 +11,7 @@
>
<view class="details" v-if="details">
<view class="details-header">
<view class="details-header-title">{{ baseStore.getParamNameByValue('LayoutWorkType', details.workType) }}详情</view>
<view class="details-header-title">{{ getParamNameByValue('LayoutWorkType', details.workType) }}详情</view>
<view class="details-header-top">
<custom-state :value="details.state == 1 ? 'OPEN' : 'CLOSE'" :size="48"></custom-state>
<view class="right">
......@@ -21,7 +21,7 @@
<view class="details-header-center">
<view class="right">
<text>{{ details.seat }}</text>
<text class="txt">{{ baseStore.getParamNameByValue('LayoutWorkType', details.workType) }}</text>
<text class="txt">{{ getParamNameByValue('LayoutWorkType', details.workType) }}</text>
</view>
</view>
<view class="details-header-footer">
......@@ -141,7 +141,7 @@
<card-details-item
:borderBottom="false"
title="应用分类"
:content="baseStore.getParamNameByValue('ApplicationType', arrangeWorkExtend.appType)"
:content="getParamNameByValue('ApplicationType', arrangeWorkExtend.appType)"
></card-details-item>
<card-details-item label="验证材料">
<global-upload :fileList="arrangeWorkExtend.followUpFeedbackFileVoList" :showUpload="false"></global-upload>
......@@ -159,7 +159,7 @@
<global-upload :fileList="arrangeWorkExtend.validateFileVoList" :showUpload="false"></global-upload>
<card-details-footer
leftLabel="事件类型:"
:leftValue="baseStore.getParamNameByValue('LayoutEventType', arrangeWorkExtend.eventType)"
:leftValue="getParamNameByValue('LayoutEventType', arrangeWorkExtend.eventType)"
rightLabel="重复/同类事件:"
:rightValue="useGetDictByValue('aw_validateType', arrangeWorkExtend.validateType)"
></card-details-footer>
......@@ -192,11 +192,10 @@ import CompanyPopup from './components/company-popup.vue'
import useAssignWorkStore from 'mocp/store/assign-work'
import { storeToRefs } from 'pinia'
import { onLoad, onUnload } from '@dcloudio/uni-app'
import useBaseStore from 'mocp/store/base'
import { timeStampFormat } from 'mocp/utils/tool'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import { getParamNameByValue } from 'mocp/hooks/use-params/useParams'
const baseStore = useBaseStore()
const query = defineProps(['id'])
const assignWorkStore = useAssignWorkStore()
const { details, arrangeWorkExtendList, arrangeWorkExtend } = storeToRefs(assignWorkStore)
......
......@@ -31,7 +31,7 @@
pickAlign="right"
v-model="formData.appType"
clearable
:options="baseStore.getParamsByType('ApplicationType')"
:options="getParamsByType('ApplicationType')"
></global-picker>
</up-form-item>
</up-form>
......@@ -44,10 +44,9 @@ import { reactive, ref } from 'vue'
import useAssignWorkStore from 'mocp/store/assign-work'
import { storeToRefs } from 'pinia'
import { onLoad } from '@dcloudio/uni-app'
import useBaseStore from 'mocp/store/base'
import { savaFollowUpFeedbackApi } from 'mocp/api/assign-work'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
const baseStore = useBaseStore()
const assignWorkStore = useAssignWorkStore()
const { arrangeWorkExtend } = storeToRefs(assignWorkStore)
const formData = reactive({
......
......@@ -15,7 +15,7 @@
pickAlign="right"
v-model="formData.eventType"
clearable
:options="baseStore.getParamsByType('LayoutEventType')"
:options="getParamsByType('LayoutEventType')"
></global-picker>
</up-form-item>
<up-form-item label="重复/同类事件" :borderBottom="true" prop="validateType" required>
......@@ -43,10 +43,9 @@ import { reactive, ref } from 'vue'
import useAssignWorkStore from 'mocp/store/assign-work'
import { storeToRefs } from 'pinia'
import { onLoad } from '@dcloudio/uni-app'
import useBaseStore from 'mocp/store/base'
import { savaWorkValidateApi } from 'mocp/api/assign-work'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
const baseStore = useBaseStore()
const assignWorkStore = useAssignWorkStore()
const { arrangeWorkExtend } = storeToRefs(assignWorkStore)
const formData = reactive({
......
......@@ -21,7 +21,7 @@
<custom-state :value="item.state == 1 ? 'OPEN' : 'CLOSE'"></custom-state>
<view class="txt u-line-1">{{ item.seat }}</view>
</view>
<view class="right u-line-1">{{ baseStore.getParamNameByValue('LayoutWorkType', item.workType) }}</view>
<view class="right u-line-1">{{ getParamNameByValue('LayoutWorkType', item.workType) }}</view>
</view>
<view class="item-content u-line-3">
{{ item.taskDescribe }}
......@@ -53,6 +53,7 @@ import useAssignWorkStore from 'mocp/store/assign-work'
import { onShow, onUnload } from '@dcloudio/uni-app'
import { ref } from 'vue'
import { storeToRefs } from 'pinia'
import { getParamNameByValue } from 'mocp/hooks/use-params/useParams'
const baseStore = useBaseStore()
//加载下拉框数据
......
......@@ -29,7 +29,7 @@
<global-picker
v-model="formData.workType"
pickAlign="right"
:options="baseStore.getParamsByType('LayoutWorkType')"
:options="getParamsByType('LayoutWorkType')"
clearable
></global-picker>
</up-form-item>
......@@ -57,15 +57,14 @@
</template>
<script setup>
import useBaseStore from 'mocp/store/base'
import useAssignWorkStore from 'mocp/store/assign-work'
import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash'
import { ref } from 'vue'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
//获取下拉框选项
const assignWorkStore = useAssignWorkStore()
const baseStore = useBaseStore()
//获取查询表单数据
const { searchData } = storeToRefs(assignWorkStore)
const formData = ref(cloneDeep(searchData.value))
......
......@@ -38,7 +38,7 @@
></global-field>
<global-field
label="运行决策类型:"
:value="baseStore.getParamNameByValue('OperationalDecisionType', details.technicalType) || '-'"
:value="getParamNameByValue('OperationalDecisionType', details.technicalType) || '-'"
></global-field>
</view>
</view>
......@@ -112,6 +112,7 @@ import useMoveDecisionStore from 'mocp/store/move-decision'
import useBaseStore from 'mocp/store/base'
import { storeToRefs } from 'pinia'
import { timeStampFormat } from 'mocp/utils/tool'
import { getParamNameByValue } from 'mocp/hooks/use-params/useParams'
const baseStore = useBaseStore()
const moveDecisionStore = useMoveDecisionStore()
......
......@@ -69,7 +69,7 @@
pickAlign="right"
v-model="formData.technicalType"
clearable
:options="baseStore.getParamsByType('OperationalDecisionType')"
:options="getParamsByType('OperationalDecisionType')"
></global-picker>
</up-form-item>
<up-form-item label="故障描述" :borderBottom="true" labelPosition="top">
......@@ -137,6 +137,7 @@ import useBaseStore from 'mocp/store/base'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import { getAcReduceListApi } from 'mocp/api/base'
import { updateDecisionApi } from 'mocp/api/move-decision'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
const baseStore = useBaseStore()
//获取下拉框选项
......
......@@ -18,7 +18,7 @@
<custom-state :value="item.state == 1 ? 'OPEN' : 'CLOSE'"></custom-state>
<view class="txt u-line-1">{{ item.seat }}</view>
</view>
<view class="right u-line-1">{{ baseStore.getParamNameByValue('LayoutWorkType', item.workType) }}</view>
<view class="right u-line-1">{{ getParamNameByValue('LayoutWorkType', item.workType) }}</view>
</view>
<view class="item-content u-line-3">
{{ item.taskDescribe }}
......@@ -44,11 +44,10 @@
</template>
<script setup>
import useBaseStore from 'mocp/store/base'
import { timeStampFormat } from 'mocp/utils/tool'
import { getArrangeWorkListApi } from 'mocp/api/assign-work'
import { getParamNameByValue } from 'mocp/hooks/use-params/useParams'
const baseStore = useBaseStore()
const ps = defineProps({
height: {
type: String,
......
......@@ -48,7 +48,7 @@
pickAlign="right"
v-model="formData.estimateType"
clearable
:options="baseStore.getParamsByType('EvaluateEstimateType')"
:options="getParamsByType('EvaluateEstimateType')"
emptyValue="0"
></global-picker>
</up-form-item>
......@@ -64,6 +64,7 @@ import { storeToRefs } from 'pinia'
import { reactive, ref } from 'vue'
import useBaseStore from 'mocp/store/base'
import { addEngineeringApi } from 'mocp/api/technology-evaluation'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
const baseStore = useBaseStore()
const technologyEvaluationStore = useTechnologyEvaluationStore()
......
......@@ -16,7 +16,7 @@
<global-checkbox
v-model="formData.nonFileType"
placement="column"
:options="baseStore.getParamsByType('EvaluateNonFileType')"
:options="getParamsByType('EvaluateNonFileType')"
></global-checkbox>
</up-form-item>
<up-form-item label="非持续适航文件描述" :borderBottom="true" labelPosition="top">
......@@ -36,7 +36,7 @@
<global-checkbox
v-model="formData.fileType"
placement="column"
:options="baseStore.getParamsByType('EvaluateFileType')"
:options="getParamsByType('EvaluateFileType')"
></global-checkbox>
</up-form-item>
<up-form-item label="持续适航文件描述" :borderBottom="true" labelPosition="top">
......@@ -56,7 +56,7 @@
<global-checkbox
v-model="formData.ratifyType"
placement="column"
:options="baseStore.getParamsByType('EvaluateRatifyType')"
:options="getParamsByType('EvaluateRatifyType')"
></global-checkbox>
</up-form-item>
</view>
......@@ -71,10 +71,9 @@ import { onLoad } from '@dcloudio/uni-app'
import useTechnologyEvaluationStore from 'mocp/store/technology-evaluation'
import { storeToRefs } from 'pinia'
import { reactive } from 'vue'
import useBaseStore from 'mocp/store/base'
import { addSupportFileApi } from 'mocp/api/technology-evaluation'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
const baseStore = useBaseStore()
const technologyEvaluationStore = useTechnologyEvaluationStore()
const { details } = storeToRefs(technologyEvaluationStore)
const formData = reactive({
......
......@@ -105,7 +105,7 @@
</view>
<view class="details-body-cell">
<view class="title">评估结论</view>
<view class="label">{{ baseStore.getParamNameByValue('EvaluateEstimateType', details.estimateType) || '无' }}</view>
<view class="label">{{ getParamNameByValue('EvaluateEstimateType', details.estimateType) || '无' }}</view>
</view>
</view>
<view class="details-body-footer" style="margin-top: 16rpx">
......@@ -142,7 +142,7 @@
<view class="details-body-cell">
<view class="title">非持续适航文件</view>
<view class="label">
{{ baseStore.getParamNameByValue('EvaluateNonFileType', details.nonFileType, { isArray: true }) || '无' }}
{{ getParamNameByValue('EvaluateNonFileType', details.nonFileType, { isArray: true }) || '无' }}
</view>
</view>
<view class="details-body-cell">
......@@ -154,7 +154,7 @@
<view class="details-body-cell">
<view class="title">持续适航文件</view>
<view class="label">
{{ baseStore.getParamNameByValue('EvaluateFileType', details.fileType, { isArray: true }) || '无' }}
{{ getParamNameByValue('EvaluateFileType', details.fileType, { isArray: true }) || '无' }}
</view>
</view>
<view class="details-body-cell">
......@@ -166,7 +166,7 @@
<view class="details-body-item">
<global-field
label="批准类别:"
:value="baseStore.getParamNameByValue('EvaluateRatifyType', details.ratifyType, { isArray: true }) || '无'"
:value="getParamNameByValue('EvaluateRatifyType', details.ratifyType, { isArray: true }) || '无'"
></global-field>
</view>
</view>
......@@ -207,6 +207,7 @@ import useBaseStore from 'mocp/store/base'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import { timeStampFormat } from 'mocp/utils/tool'
import { computed } from 'vue'
import { getParamNameByValue } from 'mocp/hooks/use-params/useParams'
const technologyEvaluationStore = useTechnologyEvaluationStore()
const { details } = storeToRefs(technologyEvaluationStore)
......
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