harden CSV import reconciliation and preserve saved model selections
Default fuzzy reconcile threshold to 0 and refuse merges when digit runs differ so numbered labels like Bay 311 never bind to Bay 310. Keep edit forms from clearing saved model fields when category filtering hides untyped rows. Includes in-progress computers policy and endpoints command feature work.
This commit is contained in:
@@ -446,20 +446,44 @@ const existingRelationshipId = ref(null)
|
||||
const loadedControllingPcId = ref(null)
|
||||
const currentMachine = ref(null)
|
||||
|
||||
// Filter models by selected machine vendor. Controller-type models are offered
|
||||
// only in the controller dropdown, so keep them out of the machine list.
|
||||
// Ensure a saved model id is present in models.value even when the filtered
|
||||
// list (category Equipment) excluded it because it has no modeltype. Fetches
|
||||
// the single row by id and appends it; a no-op when already present or blank.
|
||||
async function ensureModelLoaded(modelId) {
|
||||
if (!modelId) return
|
||||
if (models.value.some(m => m.modelnumberid === modelId)) return
|
||||
try {
|
||||
const response = await modelsApi.get(modelId)
|
||||
const model = response.data.data
|
||||
if (model) models.value = [...models.value, model]
|
||||
} catch (e) {
|
||||
// Leave it absent; the select shows blank but we did not invent a value.
|
||||
}
|
||||
}
|
||||
|
||||
// Filter models by selected machine vendor.
|
||||
// only in the controller dropdown, so keep them out of the machine list. Keep
|
||||
// the record's own saved model even if it is untyped or a different vendor, so
|
||||
// editing a machine never renders a blank select that clears the field on save.
|
||||
const filteredModels = computed(() => {
|
||||
const machineModels = models.value.filter(m => m.modeltype !== 'Controller')
|
||||
const savedId = form.value.modelnumberid
|
||||
const machineModels = models.value.filter(
|
||||
m => m.modeltype !== 'Controller' || m.modelnumberid === savedId)
|
||||
if (!form.value.vendorid) return machineModels
|
||||
return machineModels.filter(m => m.vendorid === form.value.vendorid)
|
||||
return machineModels.filter(
|
||||
m => m.vendorid === form.value.vendorid || m.modelnumberid === savedId)
|
||||
})
|
||||
|
||||
// Filter models by selected controller vendor. Only Controller-type models are
|
||||
// valid here.
|
||||
// valid here. Keep the record's own saved controller model even if it is untyped
|
||||
// or a different vendor, for the same reason as filteredModels above.
|
||||
const filteredControllerModels = computed(() => {
|
||||
const controllerModels = models.value.filter(m => m.modeltype === 'Controller')
|
||||
const savedId = form.value.controllermodelid
|
||||
const controllerModels = models.value.filter(
|
||||
m => m.modeltype === 'Controller' || m.modelnumberid === savedId)
|
||||
if (!form.value.controllervendorid) return controllerModels
|
||||
return controllerModels.filter(m => m.vendorid === form.value.controllervendorid)
|
||||
return controllerModels.filter(
|
||||
m => m.vendorid === form.value.controllervendorid || m.modelnumberid === savedId)
|
||||
})
|
||||
|
||||
// Only offer vendors that have machine (non-controller Equipment) models. Keep
|
||||
@@ -595,6 +619,14 @@ onMounted(async () => {
|
||||
levelid: data.levelid ?? null,
|
||||
}
|
||||
|
||||
// The model list is loaded filtered to category Equipment, which the
|
||||
// backend inner-joins against ModelType - so a model with no modeltype is
|
||||
// absent from models.value. If this machine's saved model or controller
|
||||
// model is one of those untyped rows, fetch it by id and merge it in, or
|
||||
// its dropdown would render blank and saving would clear the field.
|
||||
await ensureModelLoaded(form.value.modelnumberid)
|
||||
await ensureModelLoaded(form.value.controllermodelid)
|
||||
|
||||
// Load existing relationships to find controlling PC
|
||||
if (data.assetid) {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user