feat(material): 新增/编辑表单按三块分区;供应商下拉显示全称

- MaterialForm edit 模式按 材料信息/品牌与供应商/案例信息 分段,字段顺序与列表/详情对齐
- 供应商下拉显示 factory_name(全称),fallback short_name;filterable 支持筛选
- 列表页高级筛选中的供应商下拉同步改用全称

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
caoqianming 2026-04-24 14:40:44 +08:00
parent 20268638f1
commit ddc26c414a
2 changed files with 66 additions and 47 deletions

View File

@ -100,7 +100,7 @@
style="width: 180px"
@change="triggerSearch"
>
<el-option v-for="item in factoryFilterOptions" :key="item.id" :label="item.short_name || item.factory_name" :value="item.id" />
<el-option v-for="item in factoryFilterOptions" :key="item.id" :label="item.factory_name || item.short_name" :value="item.id" />
</el-select>
<el-input v-model="filters.landing_project" placeholder="落地项目" clearable style="width: 160px" @keyup.enter="triggerSearch" />
<el-input v-model="filters.contact_person" placeholder="对接人" clearable style="width: 120px" @keyup.enter="triggerSearch" />

View File

@ -5,6 +5,7 @@
:model="modelValue"
label-width="120px"
>
<div class="form-section-title">材料信息</div>
<el-form-item label="材料名称" required>
<el-input :model-value="modelValue.name" @update:model-value="set('name', $event)" />
</el-form-item>
@ -13,7 +14,7 @@
<el-option v-for="item in majorOptions" :key="item[0]" :label="item[1]" :value="item[0]" />
</el-select>
</el-form-item>
<el-form-item label="细分种类" required>
<el-form-item label="材料种类" required>
<el-select
:model-value="modelValue.material_category"
filterable
@ -42,21 +43,6 @@
<el-option v-for="item in importanceLevelOptions" :key="item[0]" :label="item[1]" :value="item[0]" />
</el-select>
</el-form-item>
<el-form-item label="落地项目">
<el-input :model-value="modelValue.landing_project" @update:model-value="set('landing_project', $event)" />
</el-form-item>
<el-form-item label="对接人">
<el-input :model-value="modelValue.contact_person" @update:model-value="set('contact_person', $event)" />
</el-form-item>
<el-form-item label="对接人联系方式">
<el-input :model-value="modelValue.contact_phone" @update:model-value="set('contact_phone', $event)" />
</el-form-item>
<el-form-item label="经办人">
<el-input :model-value="modelValue.handler" @update:model-value="set('handler', $event)" />
</el-form-item>
<el-form-item label="备注">
<el-input :model-value="modelValue.remark" @update:model-value="set('remark', $event)" />
</el-form-item>
<el-form-item label="规格型号">
<el-input :model-value="modelValue.spec" @update:model-value="set('spec', $event)" />
</el-form-item>
@ -76,6 +62,15 @@
<el-option v-for="item in replaceOptions" :key="item[0]" :label="item[1]" :value="item[0]" />
</el-select>
</el-form-item>
<el-form-item label="连接方式">
<el-input :model-value="modelValue.connection_method" @update:model-value="set('connection_method', $event)" />
</el-form-item>
<el-form-item label="施工工艺">
<el-input :model-value="modelValue.construction_method" @update:model-value="set('construction_method', $event)" />
</el-form-item>
<el-form-item label="限制条件">
<el-input :model-value="modelValue.limit_condition" type="textarea" @update:model-value="set('limit_condition', $event)" />
</el-form-item>
<el-form-item label="竞争优势">
<el-select :model-value="modelValue.advantage" multiple @update:model-value="set('advantage', $event)">
<el-option v-for="item in advantageOptions" :key="item[0]" :label="item[1]" :value="item[0]" />
@ -95,23 +90,6 @@
<el-form-item label="成本说明">
<el-input :model-value="modelValue.cost_desc" type="textarea" @update:model-value="set('cost_desc', $event)" />
</el-form-item>
<el-form-item label="案例">
<el-input :model-value="modelValue.cases" type="textarea" @update:model-value="set('cases', $event)" />
</el-form-item>
<el-form-item label="宣传页">
<el-upload
class="upload"
:auto-upload="true"
:show-file-list="false"
:http-request="handleUpload"
accept="image/*"
>
<el-button :loading="uploading">{{ uploading ? '上传中...' : '选择图片' }}</el-button>
</el-upload>
<div v-if="modelValue.brochure_url" class="preview">
<img :src="modelValue.brochure_url" alt="预览" />
</div>
</el-form-item>
<el-form-item label="质量等级">
<el-select :model-value="modelValue.quality_level" clearable @update:model-value="set('quality_level', $event)">
<el-option v-for="item in starOptions" :key="item[0]" :label="item[1]" :value="item[0]" />
@ -137,20 +115,22 @@
<el-option v-for="item in starOptions" :key="item[0]" :label="item[1]" :value="item[0]" />
</el-select>
</el-form-item>
<el-form-item label="连接方式">
<el-input :model-value="modelValue.connection_method" @update:model-value="set('connection_method', $event)" />
</el-form-item>
<el-form-item label="施工工艺">
<el-input :model-value="modelValue.construction_method" @update:model-value="set('construction_method', $event)" />
</el-form-item>
<el-form-item label="限制条件">
<el-input :model-value="modelValue.limit_condition" type="textarea" @update:model-value="set('limit_condition', $event)" />
</el-form-item>
<el-form-item v-if="isAdmin" label="供应商">
<el-select :model-value="modelValue.factory" @update:model-value="set('factory', $event)">
<el-option v-for="item in factories" :key="item.id" :label="item.short_name" :value="item.id" />
</el-select>
<el-form-item label="宣传页">
<el-upload
class="upload"
:auto-upload="true"
:show-file-list="false"
:http-request="handleUpload"
accept="image/*"
>
<el-button :loading="uploading">{{ uploading ? '上传中...' : '选择图片' }}</el-button>
</el-upload>
<div v-if="modelValue.brochure_url" class="preview">
<img :src="modelValue.brochure_url" alt="预览" />
</div>
</el-form-item>
<div class="form-section-title">品牌与供应商</div>
<el-form-item label="品牌" required>
<el-select
:model-value="modelValue.brand"
@ -164,6 +144,31 @@
<el-option v-for="item in brandFormOptions" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item v-if="isAdmin" label="供应商">
<el-select :model-value="modelValue.factory" filterable @update:model-value="set('factory', $event)">
<el-option v-for="item in factories" :key="item.id" :label="item.factory_name || item.short_name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="对接人">
<el-input :model-value="modelValue.contact_person" @update:model-value="set('contact_person', $event)" />
</el-form-item>
<el-form-item label="对接人联系方式">
<el-input :model-value="modelValue.contact_phone" @update:model-value="set('contact_phone', $event)" />
</el-form-item>
<div class="form-section-title">案例信息</div>
<el-form-item label="落地项目">
<el-input :model-value="modelValue.landing_project" @update:model-value="set('landing_project', $event)" />
</el-form-item>
<el-form-item label="案例">
<el-input :model-value="modelValue.cases" type="textarea" @update:model-value="set('cases', $event)" />
</el-form-item>
<el-form-item label="经办人">
<el-input :model-value="modelValue.handler" @update:model-value="set('handler', $event)" />
</el-form-item>
<el-form-item label="备注">
<el-input :model-value="modelValue.remark" @update:model-value="set('remark', $event)" />
</el-form-item>
</el-form>
<template v-else>
@ -389,6 +394,20 @@ defineExpose({ validate, clearValidate })
margin-bottom: 16px;
}
.form-section-title {
font-size: 15px;
font-weight: 600;
color: #303133;
padding: 8px 0 12px;
margin-top: 12px;
border-bottom: 1px solid #ebeef5;
margin-bottom: 16px;
}
.form-section-title:first-child {
margin-top: 0;
}
.upload {
display: inline-block;
}