123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372 |
- <template>
- <div class="card content-box-c">
- <div class="steps-c">
- <el-steps :active="active" align-center>
- <el-step title="数据选择" description="数据选择" />
- <el-step title="测试性模型选择" description="测试性模型选择" />
- <el-step title="增强诊断" description="增强诊断" />
- <el-step title="结果展示" description="结果展示" />
- </el-steps>
- </div>
- <div class="steps-box">
- <ProForm ref="formRef" :items-options="itemsOptions" :model="model" :form-options="_formOptions">
- <template #dataId>
- <ProTable
- ref="proTable"
- :columns="sortieColumns"
- :tool-button="false"
- :request-auto="false"
- row-key="id"
- :is-show-search="false"
- :init-param="initParam"
- :request-api="listSortieParameterAllApi"
- :pagination="false"
- height="300"
- @row-click="rowClick"
- >
- </ProTable>
- </template>
- <template #faultCode>
- <ProTable
- ref="proTable2"
- :columns="warningColumns"
- :tool-button="false"
- row-key="id"
- :is-show-search="false"
- :request-api="getWarningListApi"
- max-height="500"
- :init-param="initParam"
- :data-callback="dataCallback"
- @row-click="rowClickWarning"
- >
- </ProTable>
- </template>
- <template #dataParams="{ formModel }">
- <el-transfer
- v-model="formModel.dataParams"
- @change="change"
- :data="parameterList"
- filterable
- filter-placeholder="请输入参数名称"
- :titles="['所有参数', '选中参数']"
- >
- </el-transfer>
- </template>
- </ProForm>
- <div class="card content-box-c" v-if="active === 4">结果......</div>
- </div>
- <div class="step-footer">
- <el-button @click="pre" v-show="active > 1">上一步</el-button>
- <el-button type="primary" @click="next" v-show="active < 3">下一步</el-button>
- <el-button type="primary" v-show="[2, 3].includes(active)" @click="onSubmit()">提交</el-button>
- </div>
- </div>
- </template>
- <script setup lang="ts" name="reasoning">
- import { ref, reactive, onMounted } from 'vue'
- import ProForm from '@/components/ProForm/index.vue'
- import ProTable from '@/components/ProTable/index.vue'
- import { ProTableInstance, ColumnProps } from '@/components/ProTable/interface'
- import type { TableColumnCtx } from 'element-plus/es/components/table/src/table-column/defaults'
- import { updateModelInfoApi } from '@/api/modules/manage/modelInfo'
- import { listSortieParameterAllApi, getWarningListApi, modelListAllApi, getSortieParamsApi } from '@/api/modules/manage/sortieParameter'
- import { listSortieAllApi } from '@/api/modules/manage/sortie'
- import { getDictsApi } from '@/api/modules/system/dictData'
- // import { useRoute } from 'vue-router'
- import { nextTick } from 'vue'
- // const route = useRoute()
- onMounted(() => {
- exeTypeChange()
- })
- const optionsModel = ref<any[]>([])
- const formRef = ref<InstanceType<typeof ProForm> | null>(null)
- let active = ref(1)
- let model = ref({})
- let activeModel = reactive({})
- let parameterList = ref<any[]>([])
- const proTable2 = ref<ProTableInstance>()
- const proTable = ref<ProTableInstance>()
- const dataCallback = (data: any) => {
- const page = proTable2.value!.pageable
- return {
- list: data.data,
- total: data.total,
- pageNum: page.pageNum,
- pageSize: page.pageSize
- }
- }
- const getTableList = (sortieNo: string) => {
- initParam.sortieNo = sortieNo
- initParam.types = getTypes()
- }
- const getTypes = () => {
- return [0]
- }
- // 参数初始化
- const initParam = reactive({ sortieNo: formRef.value?.formModel.sortieNo || '=', types: [] as any })
- // 单击行
- const rowClick = async (row: any, column: TableColumnCtx<any>) => {
- if (column.property == 'radio') {
- formRef.value!.formModel.sortieNo = row.sortieNo
- formRef.value!.formModel.batchNo = row.batchNo
- formRef.value!.formModel.dataId = row.id
- const res = await getSortieParamsApi(row.id)
- parameterList.value = res.data.map(el => {
- return { key: el, label: el }
- })
- }
- }
- const rowClickWarning = async (row: any, column: TableColumnCtx<any>) => {
- if (column.property == 'radio') {
- formRef.value!.formModel.faultCode = row.faultCode
- }
- }
- const exeTypeEnum = [
- { value: '3', label: '虚警抑制' },
- { value: '4', label: '深度隔离' },
- { value: '5', label: '地面诊断' }
- ]
- // 选择诊断类型后触发
- const exeTypeChange = async (val?: any) => {
- const typeValue = getModelType(val)
- if (!typeValue) {
- optionsModel.value = []
- formRef.value!.proFormRef?.resetFields('modelObj')
- formRef.value!.formModel.modelObj = undefined
- formRef.value!.formModel.dataParams = []
- } else {
- const res = await modelListAllApi({ type: typeValue })
- optionsModel.value = res.data
- }
- setItemsOptions()
- }
- const getModelType = val => {
- if (active.value === 3) return val || formRef.value!.formModel.exeType
- else return 7
- }
- // 选择模型后触发
- const modelChange = async () => {
- const val = formRef.value!.formModel.modelObj || {}
- formRef.value!.formModel.dataParams = JSON.parse(val.dataParams || '[]')
- // 测试性模型
- if (active.value === 2) {
- formRef.value!.formModel.testModelId = val.id
- }
- // 增强诊断型模型
- if (active.value === 3) {
- formRef.value!.formModel.modelId = val.id
- }
- }
- // 下一步
- const next = () => {
- formRef.value!.proFormRef?.validate(valid => {
- if (valid) {
- formRef.value!.proFormRef?.clearValidate()
- activeModel[active.value] = Object.assign({}, formRef.value?.formModel)
- if (active.value++ > 4) return
- else {
- nextTick(() => {
- if (activeModel[active.value]) formRef.value!.formModel = Object.assign({}, activeModel[active.value])
- exeTypeChange()
- modelChange()
- })
- }
- }
- })
- }
- // 上一步
- const pre = () => {
- activeModel[active.value] = Object.assign({}, formRef.value?.formModel)
- if (active.value-- < 1) return
- nextTick(() => {
- exeTypeChange()
- modelChange()
- if (activeModel[active.value]) formRef.value!.formModel = Object.assign({}, activeModel[active.value])
- if (formRef.value?.formModel.sortieNo) {
- getTableList(formRef.value?.formModel.sortieNo)
- }
- })
- }
- const _formOptions = {
- hasFooter: false
- }
- // 步长选择
- const stepEnum = [
- { value: 1, label: '1帧/秒' },
- { value: 2, label: '2帧/秒' },
- { value: 5, label: '5帧/秒' },
- { value: 10, label: '10帧/秒' }
- ]
- const onSubmit = () => {
- active.value = 4
- console.log('formRef.value', formRef.value)
- }
- const change = (val: any) => {
- const data = {
- id: formRef.value?.formModel.value.modelId,
- dataParams: JSON.stringify(val)
- }
- updateModelInfoApi(data)
- }
- let itemsOptions = ref<ProForm.ItemsOptions[]>([])
- const setItemsOptions = () => {
- itemsOptions.value = [
- {
- label: '架次选择',
- prop: 'sortieNo',
- span: 12,
- rules: [{ required: true, message: '架次不能为空', trigger: 'blur' }],
- show: () => {
- return active.value === 1
- },
- compOptions: {
- elTagName: 'select',
- clearable: true,
- placeholder: '请架次选择',
- enum: listSortieAllApi,
- labelKey: 'sortieNumber',
- valueKey: 'sortieNumber',
- filterable: true,
- onChange: value => {
- if (value) getTableList(value)
- }
- }
- },
- {
- label: '步长',
- prop: 'step',
- span: 12,
- rules: [{ required: true, message: '步长不能为空', trigger: 'change' }],
- show: () => {
- return active.value === 1
- },
- compOptions: {
- elTagName: 'select',
- clearable: true,
- placeholder: '请选择步长',
- enum: stepEnum
- }
- },
- {
- label: '数据列表',
- prop: 'dataId',
- span: 24,
- rules: [{ required: true, message: '请选择数据', trigger: 'change' }],
- show: () => {
- return active.value === 1
- },
- compOptions: {
- elTagName: 'slot'
- }
- },
- {
- label: '诊断类型',
- prop: 'exeType',
- rules: [{ required: true, message: '诊断类型不能为空', trigger: 'blur' }],
- show: () => {
- return [3].includes(active.value)
- },
- compOptions: {
- elTagName: 'radio-group',
- placeholder: '请诊断类型',
- enum: exeTypeEnum,
- onChange: () => {
- exeTypeChange()
- }
- }
- },
- {
- label: '警告列表',
- prop: 'faultCode',
- span: 24,
- rules: [{ required: true, message: '请选择数据', trigger: 'change' }],
- show: () => {
- return formRef.value?.formModel.exeType === '3'
- },
- compOptions: {
- elTagName: 'slot'
- }
- },
- {
- label: '选择模型',
- prop: 'modelObj',
- rules: [{ required: true, message: '模型不能为空', trigger: 'change' }],
- show: () => {
- return [2, 3].includes(active.value)
- },
- compOptions: {
- style: {
- width: '50%'
- },
- elTagName: 'select',
- clearable: true,
- placeholder: '请选择模型',
- enum: optionsModel.value,
- labelKey: 'name',
- valueKey: 'col',
- onChange: () => {
- modelChange()
- }
- }
- },
- {
- label: '参数列表',
- prop: 'dataParams',
- span: 12,
- rules: [{ required: true, message: '参数不能为空', trigger: 'change' }],
- show: () => {
- return [2, 3].includes(active.value)
- },
- compOptions: {
- elTagName: 'slot'
- }
- }
- ]
- }
- // 架次数据
- const sortieColumns = reactive<ColumnProps<any>[]>([
- { type: 'radio', fixed: 'left', width: 70, prop: 'radio' },
- {
- prop: 'sortieNo',
- label: '架次号'
- },
- {
- prop: 'batchNo',
- label: '批次号'
- },
- {
- prop: 'type',
- label: '数据类型',
- tag: true,
- enum: () => getDictsApi('data_type'),
- search: {
- el: 'select'
- },
- fieldNames: { label: 'dictLabel', value: 'dictValue' }
- }
- ])
- // 虚警列表
- const warningColumns = reactive<ColumnProps<any>[]>([
- { type: 'radio', fixed: 'left', width: 70, prop: 'radio' },
- {
- prop: 'sortieNo',
- label: '架次号'
- },
- {
- prop: 'faultName',
- label: '故障名称'
- },
- {
- prop: 'faultCode',
- label: '警告代码'
- }
- ])
- </script>
- <style scoped lang="scss">
- @import './index.scss';
- </style>
|