修改弹出框组件及模具弹出框

pull/3/head
liutao 2 weeks ago
parent 4121523db9
commit 15e7b7bcef

@ -64,13 +64,16 @@ const props = withDefaults(
pageSize?: number pageSize?: number
initialRows?: any[] initialRows?: any[]
queryParams?: Record<string, any> // queryParams?: Record<string, any> //
/** ✅ 新增 */
defaultSelectedKeys?: (string | number)[]
}>(), }>(),
{ {
selectionType: 'multiple', selectionType: 'multiple',
rowKey: 'id', rowKey: 'id',
pageSize: 10, pageSize: 10,
initialRows: () => [], initialRows: () => [],
queryParams: () => ({}) // queryParams: () => ({}), //
defaultSelectedKeys: () => []
} }
) )
@ -111,6 +114,16 @@ const refreshSelectionOnTable = async () => {
syncingSelection.value = false syncingSelection.value = false
} }
} }
/**
* 新增根据 defaultSelectedKeys 初始化选中状态
*/
const initDefaultSelection = () => {
if (!props.defaultSelectedKeys.length) return
props.defaultSelectedKeys.forEach((key) => {
selectedMap.value.set(key, { [props.rowKey]: key })
})
}
const getList = async () => { const getList = async () => {
loading.value = true loading.value = true
@ -161,12 +174,30 @@ const handleRowClick = (row: any) => {
} }
const open = async (rows?: any[]) => { const open = async (rows?: any[]) => {
/* selectedMap.value.clear()
const initialRows = rows || props.initialRows
const nextRows = isSingleSelect.value ? initialRows.slice(0, 1) : initialRows
nextRows.forEach((row) => {
selectedMap.value.set(resolveRowKey(row), row)
})
queryParams.pageNo = 1
queryParams.pageSize = props.pageSize
dialogVisible.value = true
await getList()*/
selectedMap.value.clear() selectedMap.value.clear()
// 使 defaultSelectedKeys
if (props.defaultSelectedKeys.length) {
initDefaultSelection()
}
// initialRows / rows
const initialRows = rows || props.initialRows const initialRows = rows || props.initialRows
const nextRows = isSingleSelect.value ? initialRows.slice(0, 1) : initialRows const nextRows = isSingleSelect.value ? initialRows.slice(0, 1) : initialRows
nextRows.forEach((row) => { nextRows.forEach((row) => {
selectedMap.value.set(resolveRowKey(row), row) selectedMap.value.set(resolveRowKey(row), row)
}) })
queryParams.pageNo = 1 queryParams.pageNo = 1
queryParams.pageSize = props.pageSize queryParams.pageSize = props.pageSize
dialogVisible.value = true dialogVisible.value = true

@ -141,6 +141,7 @@
@confirm="handleDeviceSelectConfirm" @confirm="handleDeviceSelectConfirm"
:query-params="mergedQueryParams" :query-params="mergedQueryParams"
:selection-type="'single'" :selection-type="'single'"
:default-selected-keys="ids"
> >
<!-- 使用 header 插槽插入查询表单 --> <!-- 使用 header 插槽插入查询表单 -->
<template #header> <template #header>
@ -168,6 +169,7 @@
@confirm="handleCaiJISelectConfirm" @confirm="handleCaiJISelectConfirm"
:query-params="mergedQueryParams" :query-params="mergedQueryParams"
:selection-type="'single'" :selection-type="'single'"
:default-selected-keys="CJIds"
> >
<!-- 使用 header 插槽插入查询表单 --> <!-- 使用 header 插槽插入查询表单 -->
<template #header> <template #header>
@ -272,6 +274,7 @@ const resetCJSearch = () => {
searchFormRef.value?.resetFields() searchFormRef.value?.resetFields()
handleCJSearch() handleCJSearch()
} }
/** 打开弹窗 */ /** 打开弹窗 */
const open = async (type: string, id?: number) => { const open = async (type: string, id?: number) => {
dialogVisible.value = true dialogVisible.value = true
@ -284,6 +287,10 @@ const open = async (type: string, id?: number) => {
formLoading.value = true formLoading.value = true
try { try {
formData.value = await OrganizationApi.getOrganization(id) formData.value = await OrganizationApi.getOrganization(id)
ids.value=formData.value.machineId != undefined
? formData.value.machineId.toString().split(",").map(Number)
: []
CJIds.value=formData.value.dvId!=undefined?formData.value.dvId.toString().split(",").map(Number):[]
} finally { } finally {
formLoading.value = false formLoading.value = false
} }
@ -417,6 +424,7 @@ const fetchCaiJILedgerPage = (params: Record<string, any>) => {
} }
const selectedDeviceRows = ref<any[]>([]) const selectedDeviceRows = ref<any[]>([])
const selectedCaiJiRows = ref<any[]>([]) const selectedCaiJiRows = ref<any[]>([])
/*打开关联设备确认*/
const handleDeviceSelectConfirm = (payload: { ids: (number | string)[]; rows: any[] }) => { const handleDeviceSelectConfirm = (payload: { ids: (number | string)[]; rows: any[] }) => {
formData.value.devices = payload.rows formData.value.devices = payload.rows
.map((item) => { .map((item) => {
@ -429,9 +437,10 @@ const handleDeviceSelectConfirm = (payload: { ids: (number | string)[]; rows: an
}) })
.filter((item): item is { id: number; name: string } => Boolean(item)) .filter((item): item is { id: number; name: string } => Boolean(item))
selectedDeviceRows.value = payload.rows selectedDeviceRows.value = payload.rows
formData.value.dvId = payload.ids.join(',') formData.value.machineId = payload.ids.join(',')
ids.value = payload.ids.map((id) => Number(id)) ids.value = payload.ids.map((id) => Number(id))
} }
/*打开关联设备*/
const openCriticalComponentDialog = async () => { const openCriticalComponentDialog = async () => {
searchParams.deviceCode='' searchParams.deviceCode=''
searchParams.deviceName='' searchParams.deviceName=''
@ -440,6 +449,7 @@ const openCriticalComponentDialog = async () => {
let initIds= formData.value.machineId!=undefined?formData.value.machineId.toString().split(","):[] let initIds= formData.value.machineId!=undefined?formData.value.machineId.toString().split(","):[]
ids.value=initIds.map((id) => Number(id)) ids.value=initIds.map((id) => Number(id))
} }
/*打开采集设备确认*/
const handleCaiJISelectConfirm = (payload: { ids: (number | string)[]; rows: any[] }) => { const handleCaiJISelectConfirm = (payload: { ids: (number | string)[]; rows: any[] }) => {
formData.value.devices = payload.rows formData.value.devices = payload.rows
.map((item) => { .map((item) => {
@ -455,6 +465,7 @@ const handleCaiJISelectConfirm = (payload: { ids: (number | string)[]; rows: any
formData.value.dvId = payload.ids.join(',') formData.value.dvId = payload.ids.join(',')
CJIds.value = payload.ids.map((id) => Number(id)) CJIds.value = payload.ids.map((id) => Number(id))
} }
/*打开采集设备*/
const openCaijiComponentDialog = async () => { const openCaijiComponentDialog = async () => {
searchParams.deviceCode='' searchParams.deviceCode=''
searchParams.deviceName='' searchParams.deviceName=''

@ -34,7 +34,7 @@
</el-form-item> </el-form-item>
<el-form-item :label="t('MoldManagement.MoldInspectionPlan.subjectName')" prop="subjectIds"> <el-form-item :label="t('MoldManagement.MoldInspectionPlan.subjectName')" prop="subjectIds">
<el-select <!-- <el-select
v-model="formData.subjectIds" v-model="formData.subjectIds"
multiple multiple
filterable filterable
@ -43,7 +43,10 @@
class="!w-full" class="!w-full"
> >
<el-option v-for="item in subjectOptions" :key="item.id" :label="item.subjectName" :value="item.id" /> <el-option v-for="item in subjectOptions" :key="item.id" :label="item.subjectName" :value="item.id" />
</el-select> </el-select>-->
<el-input :model-value="displayItemDevice" readonly clearable class="device-ledger-selection-input"
:placeholder="t('MoldManagement.MoldInspectionPlan.placeholderSubjectSelect')"
@click="openCriticalComponentDialog" />
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -52,13 +55,40 @@
<el-button @click="dialogVisible = false">{{ t('common.cancel') }}</el-button> <el-button @click="dialogVisible = false">{{ t('common.cancel') }}</el-button>
</template> </template>
</Dialog> </Dialog>
<TableSelectDialog
ref="deviceSelectDialogRef"
title="选择设备"
:columns="deviceColumns"
:fetch-api="fetchDeviceLedgerPage"
row-key="id"
@confirm="handleDeviceSelectConfirm"
:query-params="mergedQueryParams"
:default-selected-keys="ids"
>
<!-- 使用 header 插槽插入查询表单 -->
<template #header>
<el-form ref="searchFormRef" :model="searchParams" :inline="true" >
<el-form-item label="设备编号" prop="deviceCode">
<el-input v-model="searchParams.deviceCode" placeholder="请输入编号" clearable />
</el-form-item>
<el-form-item label="设备名称" prop="deviceName">
<el-input v-model="searchParams.deviceName" placeholder="请输入名称" clearable />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSearch">{{ t('FactoryModeling.ProductInformation.searchButtonText') }}</el-button>
<el-button @click="resetSearch">{{ t('FactoryModeling.ProductInformation.resetButtonText') }}</el-button>
</el-form-item>
</el-form>
</template>
</TableSelectDialog>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import type { FormRules } from 'element-plus' import type { FormRules } from 'element-plus'
import { DvSubjectApi, DvSubjectVO } from '@/api/mold/inspectionItems' import { DvSubjectApi, DvSubjectVO } from '@/api/mold/inspectionItems'
import { PlanMaintenanceApi, PlanMaintenanceVO } from '@/api/mold/planmaintenance' import { PlanMaintenanceApi, PlanMaintenanceVO } from '@/api/mold/planmaintenance'
import {DeviceLedgerApi, DeviceLedgerVO} from "@/api/mes/deviceledger";
import TableSelectDialog from '@/components/TableSelectDialog/TableSelectDialog.vue'
defineOptions({ name: 'MoldInspectionPlanForm' }) defineOptions({ name: 'MoldInspectionPlanForm' })
const { t } = useI18n() const { t } = useI18n()
@ -74,6 +104,7 @@ const ensureSubjectOptionsLoaded = async () => {
if (subjectOptions.value.length) return if (subjectOptions.value.length) return
const res = await DvSubjectApi.getMoldSubjectAllList() const res = await DvSubjectApi.getMoldSubjectAllList()
const list = Array.isArray(res) ? res : res?.list const list = Array.isArray(res) ? res : res?.list
itemList.value = (list ?? []) as DvSubjectVO[]
subjectOptions.value = (list ?? []) as DvSubjectVO[] subjectOptions.value = (list ?? []) as DvSubjectVO[]
} }
@ -97,7 +128,94 @@ const parseIds = (value: any): Array<number | string> => {
}) })
.filter((v): v is number | string => v !== undefined) .filter((v): v is number | string => v !== undefined)
} }
const ids = ref([])
const itemList = ref<DvSubjectVO[]>([])
const selectedDeviceRows = ref<any[]>([])
const deviceSelectDialogRef = ref(false)
const mergedQueryParams = computed(() => ({ ...searchParams }))
const deviceColumns = [
{ label: '项目编码', prop: 'subjectCode', minWidth: 140 },
{ label: '项目名称', prop: 'subjectName', minWidth: 160 },
{ label: '项目类型', prop: 'subjectType', minWidth: 140 },
{ label: '项目内容', prop: 'subjectContent', minWidth: 140 }
]
const fetchDeviceLedgerPage = async (params: Record<string, any>) => {
const res = await DvSubjectApi.getDvSubjectPage({
...params,
})
const list = res.list || []
//
const selectedMap = new Map(
selectedDeviceRows.value.map((item) => [item.id, item])
)
return {
...res,
list: list.map((item) => ({
...item,
...selectedMap.get(item.id)
}))
}
}
// 1.
const searchParams = reactive({
subjectCode: undefined,
subjectName: undefined,
})
const displayItemDevice = computed( () => {
if (!ids.value.length)return ''
if (!itemList.value.length) {
return formData.value.subjectIds ? String(formData.value.subjectIds) : ''
}
const map = new Map(itemList.value.map((item) => [item.id, item.subjectName]))
const names = ids.value
.map((id) => map.get(id))
.filter((name) => name)
return names.join(',')
})
const openCriticalComponentDialog = async () => {
searchParams.subjectCode=''
searchParams.subjectName=''
const rows = selectedDeviceRows.value.length
//deviceSelectDialogRef.value?.open(rows)
let initIds= formData.value.subjectIds!=undefined?formData.value.subjectIds.toString().split(","):[]
deviceSelectDialogRef.value?.open([], {
defaultSelectedKeys: initIds
})
ids.value=initIds.map((id) => Number(id))
}
const handleDeviceSelectConfirm = (payload: { ids: (number | string)[]; rows: any[] }) => {
formData.value.subjectIds = payload.rows
.map((item) => {
const id = Number(item.id)
if (!Number.isFinite(id)) return undefined
return {
id,
name: item.subjectName || item.name || item.code || `设备ID:${id}`
}
})
.filter((item): item is { id: number; name: string } => Boolean(item))
selectedDeviceRows.value = payload.rows
formData.value.subjectIds = payload.ids.join(',')
ids.value = payload.ids.map((id) => Number(id))
}
const handleSearch = () => {
//
deviceSelectDialogRef.value?.reload?.()
}
const searchFormRef = ref()
const resetSearch = () => {
searchFormRef.value?.resetFields()
handleSearch()
}
const initFormData = () => ({ const initFormData = () => ({
id: undefined as PlanMaintenanceVO['id'], id: undefined as PlanMaintenanceVO['id'],
planName: '' as string, planName: '' as string,
@ -141,6 +259,9 @@ const open = async (type: 'create' | 'update', row?: Partial<PlanMaintenanceVO>)
description: (row.description as any) ?? '', description: (row.description as any) ?? '',
subjectIds: parseIds((row as any).subjectIds ?? (row as any).subjectIdS) subjectIds: parseIds((row as any).subjectIds ?? (row as any).subjectIdS)
} }
ids.value=parseIds((row as any).subjectIds ?? (row as any).subjectIdS)
}else{
ids.value=[]
} }
} }

Loading…
Cancel
Save