src/views/qualityManagement/metricBinding/index.vue
@@ -1,7 +1,9 @@
<template>
  <div class="app-container metric-binding">
    <!-- 左侧:检测标准列表(只读) -->
    <div class="left-panel">
    <el-row :gutter="16" class="metric-binding-row">
      <!-- 左侧:检测标准列表 -->
      <el-col :xs="24" :sm="24" :md="12" :lg="14" :xl="14" class="left-col">
        <div class="panel left-panel">
      <PIMTable
        rowKey="id"
        :column="standardColumns"
@@ -72,10 +74,12 @@
          </el-select>
        </template>
      </PIMTable>
    </div>
        </div>
      </el-col>
    <!-- 右侧:绑定列表 -->
    <div class="right-panel">
      <!-- 右侧:绑定列表 -->
      <el-col :xs="24" :sm="24" :md="12" :lg="10" :xl="10" class="right-col">
        <div class="panel right-panel">
      <div class="right-header">
        <div class="title">绑定关系</div>
        <div class="desc" v-if="currentStandard">
@@ -108,7 +112,9 @@
          </template>
        </el-table-column>
      </el-table>
    </div>
        </div>
      </el-col>
    </el-row>
    <!-- 添加绑定弹框 -->
    <el-dialog
@@ -152,7 +158,6 @@
import {
  qualityTestStandardListPage
} from '@/api/qualityManagement/metricMaintenance.js'
import { productProcessListPage } from '@/api/basicData/productProcess.js'
import {
  qualityTestStandardBindingList,
  qualityTestStandardBindingAdd,
@@ -160,6 +165,9 @@
} from '@/api/qualityManagement/qualityTestStandardBinding.js'
const { proxy } = getCurrentInstance()
// 部件类型字典:用于列表回显
const { product_process_type } = proxy.useDict('product_process_type')
// 左侧标准列表:整行内容居中(配合样式)
const rowClassNameCenter = () => 'row-center'
@@ -179,24 +187,6 @@
const tableLoading = ref(false)
const page = reactive({ current: 1, size: 10, total: 0 })
// 工序下拉(用于列表回显)
const processOptions = ref([])
const getProcessList = async () => {
  try {
    const res = await productProcessListPage({ current: 1, size: 1000 })
    if (res?.code === 200) {
      const records = res?.data?.records || []
      processOptions.value = records.map((item) => ({
        label: item.processName || item.name || item.label,
        value: item.id || item.processId || item.value
      }))
    }
  } catch (error) {
    console.error('获取工序列表失败:', error)
  }
}
const standardColumns = ref([
  { label: '标准编号', prop: 'standardNo', dataType: 'slot', slot: 'standardNoCell', minWidth: 160, align: 'center', headerSlot: 'standardNoHeader' },
  { label: '标准名称', prop: 'standardName', minWidth: 180, align: 'center', headerSlot: 'standardNameHeader' },
@@ -212,15 +202,14 @@
    }
  },
  {
    label: '工序',
    label: '部件类型',
    prop: 'processId',
    align: 'center',
    dataType: 'tag',
    formatData: (val) => {
      const target = processOptions.value.find(
        (item) => String(item.value) === String(val)
      )
      return target?.label || val
      const dictItems = product_process_type?.value || []
      const hit = dictItems.find(i => String(i.value) === String(val))
      return hit?.label || val
    }
  },
  {
@@ -375,15 +364,21 @@
}
const handleUnbind = async (row) => {
  if (!row?.id) return
  const id = row?.id ?? row?.qualityTestStandardBindingId
  if (id == null || id === '') return
  try {
    await ElMessageBox.confirm('确认删除该绑定?', '提示', { type: 'warning' })
  } catch {
    return
  }
  await qualityTestStandardBindingDel([row.qualityTestStandardBindingId])
  proxy.$message.success('删除成功')
  loadBindingList()
  try {
    await qualityTestStandardBindingDel([id])
    proxy.$message.success('删除成功')
    loadBindingList()
  } catch (err) {
    console.error('删除绑定失败:', err)
    proxy.$message?.error(err?.message || '删除失败')
  }
}
const handleBatchUnbind = async () => {
@@ -391,35 +386,54 @@
    proxy.$message.warning('请选择数据')
    return
  }
  const ids = bindingSelectedRows.value.map((i) => i.qualityTestStandardBindingId)
  const ids = bindingSelectedRows.value
    .map((i) => i?.id ?? i?.qualityTestStandardBindingId)
    .filter((id) => id != null && id !== '')
  if (!ids.length) {
    proxy.$message.warning('选中数据缺少有效 id')
    return
  }
  try {
    await ElMessageBox.confirm('选中的内容将被删除,是否确认删除?', '删除提示', { type: 'warning' })
  } catch {
    return
  }
  await qualityTestStandardBindingDel(ids)
  proxy.$message.success('删除成功')
  loadBindingList()
  try {
    await qualityTestStandardBindingDel(ids)
    proxy.$message.success('删除成功')
    loadBindingList()
  } catch (err) {
    console.error('批量删除绑定失败:', err)
    proxy.$message?.error(err?.message || '删除失败')
  }
}
onMounted(() => {
  getStandardList()
  getProcessList()
})
</script>
<style scoped>
.metric-binding {
  display: flex;
  gap: 16px;
.metric-binding-row {
  width: 100%;
}
.metric-binding-row .left-col,
.metric-binding-row .right-col {
  margin-bottom: 16px;
}
.metric-binding-row .panel {
  background: #ffffff;
  padding: 16px;
  box-sizing: border-box;
  height: 100%;
  min-height: 400px;
}
.left-panel,
.right-panel {
  flex: 1;
  background: #ffffff;
  padding: 16px;
  box-sizing: border-box;
  height: 100%;
}
.toolbar {