fix:添加表格中新增的字段
This commit is contained in:
parent
a6456966b6
commit
eb85d3a78a
|
|
@ -245,8 +245,6 @@ class Command(BaseCommand):
|
||||||
material_subcategory = _single_line(get(row, "材料子类"))
|
material_subcategory = _single_line(get(row, "材料子类"))
|
||||||
if not material_category:
|
if not material_category:
|
||||||
material_category = "-"
|
material_category = "-"
|
||||||
if not material_subcategory:
|
|
||||||
material_subcategory = "-"
|
|
||||||
|
|
||||||
application_scene = _parse_application_scene(get(row, "应用场景"))
|
application_scene = _parse_application_scene(get(row, "应用场景"))
|
||||||
replace_type = REPLACE_TYPE_MAP.get(_cell(get(row, "替代材料")))
|
replace_type = REPLACE_TYPE_MAP.get(_cell(get(row, "替代材料")))
|
||||||
|
|
@ -256,9 +254,14 @@ class Command(BaseCommand):
|
||||||
"name": name[:255],
|
"name": name[:255],
|
||||||
"major_category": major_category,
|
"major_category": major_category,
|
||||||
"material_category": material_category,
|
"material_category": material_category,
|
||||||
"material_subcategory": material_subcategory,
|
"material_subcategory": material_subcategory or None,
|
||||||
"stage": _parse_choice(get(row, "阶段"), STAGE_VALUES),
|
"stage": _parse_choice(get(row, "阶段"), STAGE_VALUES),
|
||||||
"importance_level": _parse_choice(get(row, "重要等级"), IMPORTANCE_LEVEL_VALUES),
|
"importance_level": _parse_choice(get(row, "重要等级"), IMPORTANCE_LEVEL_VALUES),
|
||||||
|
"landing_project": _single_line(get(row, "落地项目")) or None,
|
||||||
|
"contact_person": _single_line(get(row, "对接人")) or None,
|
||||||
|
"contact_phone": _single_line(get(row, "对接人联系方式")) or None,
|
||||||
|
"handler": _single_line(get(row, "经办人")) or None,
|
||||||
|
"remark": _single_line(get(row, "备注")) or None,
|
||||||
"spec": _single_line(get(row, "规格型号")) or None,
|
"spec": _single_line(get(row, "规格型号")) or None,
|
||||||
"standard": _single_line(get(row, "符合标准")) or None,
|
"standard": _single_line(get(row, "符合标准")) or None,
|
||||||
"application_scene": application_scene or None,
|
"application_scene": application_scene or None,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
# Generated by Django 4.2.7 on 2026-03-19 01:19
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('material', '0004_alter_material_options_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='material',
|
||||||
|
name='contact_person',
|
||||||
|
field=models.CharField(blank=True, max_length=255, null=True, verbose_name='对接人'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='material',
|
||||||
|
name='contact_phone',
|
||||||
|
field=models.CharField(blank=True, max_length=255, null=True, verbose_name='对接人联系方式'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='material',
|
||||||
|
name='handler',
|
||||||
|
field=models.CharField(blank=True, max_length=255, null=True, verbose_name='经办人'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='material',
|
||||||
|
name='landing_project',
|
||||||
|
field=models.CharField(blank=True, max_length=255, null=True, verbose_name='落地项目'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='material',
|
||||||
|
name='remark',
|
||||||
|
field=models.CharField(blank=True, max_length=255, null=True, verbose_name='备注'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 4.2.7 on 2026-03-19 01:37
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('material', '0005_alter_material_options_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='material',
|
||||||
|
name='material_subcategory',
|
||||||
|
field=models.CharField(blank=True, max_length=255, null=True, verbose_name='材料子分类'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -59,9 +59,14 @@ class Material(models.Model):
|
||||||
name = models.CharField(max_length=255, verbose_name='材料名称')
|
name = models.CharField(max_length=255, verbose_name='材料名称')
|
||||||
major_category = models.CharField(max_length=20, choices=MAJOR_CATEGORY_CHOICES, verbose_name='专业类别')
|
major_category = models.CharField(max_length=20, choices=MAJOR_CATEGORY_CHOICES, verbose_name='专业类别')
|
||||||
material_category = models.CharField(max_length=255, verbose_name='材料分类')
|
material_category = models.CharField(max_length=255, verbose_name='材料分类')
|
||||||
material_subcategory = models.CharField(max_length=255, verbose_name='材料子分类')
|
material_subcategory = models.CharField(max_length=255, blank=True, null=True, verbose_name='材料子分类')
|
||||||
stage = models.CharField(max_length=20, choices=STAGE_CHOICES, blank=True, null=True, verbose_name='阶段')
|
stage = models.CharField(max_length=20, choices=STAGE_CHOICES, blank=True, null=True, verbose_name='阶段')
|
||||||
importance_level = models.CharField(max_length=20, choices=IMPORTANCE_LEVEL_CHOICES, blank=True, null=True, verbose_name='重要等级')
|
importance_level = models.CharField(max_length=20, choices=IMPORTANCE_LEVEL_CHOICES, blank=True, null=True, verbose_name='重要等级')
|
||||||
|
landing_project = models.CharField(max_length=255, blank=True, null=True, verbose_name='落地项目')
|
||||||
|
contact_person = models.CharField(max_length=255, blank=True, null=True, verbose_name='对接人')
|
||||||
|
contact_phone = models.CharField(max_length=255, blank=True, null=True, verbose_name='对接人联系方式')
|
||||||
|
handler = models.CharField(max_length=255, blank=True, null=True, verbose_name='经办人')
|
||||||
|
remark = models.CharField(max_length=255, blank=True, null=True, verbose_name='备注')
|
||||||
spec = models.CharField(max_length=255, blank=True, null=True, verbose_name='规格型号')
|
spec = models.CharField(max_length=255, blank=True, null=True, verbose_name='规格型号')
|
||||||
standard = models.CharField(max_length=255, blank=True, null=True, verbose_name='符合标准')
|
standard = models.CharField(max_length=255, blank=True, null=True, verbose_name='符合标准')
|
||||||
application_scene = models.JSONField(default=list, blank=True, null=True, verbose_name='应用场景')
|
application_scene = models.JSONField(default=list, blank=True, null=True, verbose_name='应用场景')
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,8 @@ class MaterialSerializer(serializers.ModelSerializer):
|
||||||
model = Material
|
model = Material
|
||||||
fields = ['id', 'name', 'major_category', 'major_category_display',
|
fields = ['id', 'name', 'major_category', 'major_category_display',
|
||||||
'material_category', 'material_subcategory', 'stage', 'stage_display',
|
'material_category', 'material_subcategory', 'stage', 'stage_display',
|
||||||
'importance_level', 'importance_level_display', 'spec', 'standard',
|
'importance_level', 'importance_level_display', 'landing_project',
|
||||||
|
'contact_person', 'contact_phone', 'handler', 'remark', 'spec', 'standard',
|
||||||
'application_scene', 'application_scene_display', 'application_desc',
|
'application_scene', 'application_scene_display', 'application_desc',
|
||||||
'replace_type', 'replace_type_display', 'advantage', 'advantage_display',
|
'replace_type', 'replace_type_display', 'advantage', 'advantage_display',
|
||||||
'advantage_desc', 'cost_compare', 'cost_desc', 'cases', 'brochure',
|
'advantage_desc', 'cost_compare', 'cost_desc', 'cases', 'brochure',
|
||||||
|
|
@ -91,7 +92,8 @@ class MaterialListSerializer(serializers.ModelSerializer):
|
||||||
model = Material
|
model = Material
|
||||||
fields = ['id', 'name', 'major_category', 'major_category_display',
|
fields = ['id', 'name', 'major_category', 'major_category_display',
|
||||||
'material_category', 'material_subcategory', 'stage', 'stage_display',
|
'material_category', 'material_subcategory', 'stage', 'stage_display',
|
||||||
'importance_level', 'importance_level_display', 'factory',
|
'importance_level', 'importance_level_display', 'landing_project',
|
||||||
|
'contact_person', 'contact_phone', 'handler', 'remark', 'factory',
|
||||||
'factory_name', 'brand', 'status', 'status_display']
|
'factory_name', 'brand', 'status', 'status_display']
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,11 @@
|
||||||
<el-descriptions-item label="材料子类">{{ displayText(material.material_subcategory) }}</el-descriptions-item>
|
<el-descriptions-item label="材料子类">{{ displayText(material.material_subcategory) }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="阶段">{{ displayText(material.stage_display) }}</el-descriptions-item>
|
<el-descriptions-item label="阶段">{{ displayText(material.stage_display) }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="重要等级">{{ displayText(material.importance_level_display) }}</el-descriptions-item>
|
<el-descriptions-item label="重要等级">{{ displayText(material.importance_level_display) }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="落地项目">{{ displayText(material.landing_project) }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="对接人">{{ displayText(material.contact_person) }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="对接人联系方式">{{ displayText(material.contact_phone) }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="经办人">{{ displayText(material.handler) }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="备注">{{ displayText(material.remark) }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="规格型号">{{ displayText(material.spec) }}</el-descriptions-item>
|
<el-descriptions-item label="规格型号">{{ displayText(material.spec) }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="符合标准">{{ displayText(material.standard) }}</el-descriptions-item>
|
<el-descriptions-item label="符合标准">{{ displayText(material.standard) }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="应用场景">{{ displayList(material.application_scene_display) }}</el-descriptions-item>
|
<el-descriptions-item label="应用场景">{{ displayList(material.application_scene_display) }}</el-descriptions-item>
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,11 @@
|
||||||
<el-table-column prop="material_subcategory" label="材料子类" />
|
<el-table-column prop="material_subcategory" label="材料子类" />
|
||||||
<el-table-column prop="stage_display" label="阶段" />
|
<el-table-column prop="stage_display" label="阶段" />
|
||||||
<el-table-column prop="importance_level_display" label="重要等级" />
|
<el-table-column prop="importance_level_display" label="重要等级" />
|
||||||
|
<el-table-column prop="landing_project" label="落地项目" />
|
||||||
|
<el-table-column prop="contact_person" label="对接人" />
|
||||||
|
<el-table-column prop="contact_phone" label="对接人联系方式" />
|
||||||
|
<el-table-column prop="handler" label="经办人" />
|
||||||
|
<el-table-column prop="remark" label="备注" />
|
||||||
<el-table-column prop="brand" label="所属工厂" />
|
<el-table-column prop="brand" label="所属工厂" />
|
||||||
<el-table-column prop="status_display" label="状态" width="120" />
|
<el-table-column prop="status_display" label="状态" width="120" />
|
||||||
<el-table-column label="操作" width="320">
|
<el-table-column label="操作" width="320">
|
||||||
|
|
@ -63,8 +68,8 @@
|
||||||
<el-option v-for="item in categoryOptions" :key="item.value" :label="item.name" :value="item.value" />
|
<el-option v-for="item in categoryOptions" :key="item.value" :label="item.name" :value="item.value" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="材料子类" required>
|
<el-form-item label="材料子类">
|
||||||
<el-select v-model="form.material_subcategory" filterable>
|
<el-select v-model="form.material_subcategory" filterable clearable>
|
||||||
<el-option v-for="item in subcategoryOptions" :key="item.value" :label="item.name" :value="item.value" />
|
<el-option v-for="item in subcategoryOptions" :key="item.value" :label="item.name" :value="item.value" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
@ -78,6 +83,21 @@
|
||||||
<el-option v-for="item in importanceLevelOptions" :key="item[0]" :label="item[1]" :value="item[0]" />
|
<el-option v-for="item in importanceLevelOptions" :key="item[0]" :label="item[1]" :value="item[0]" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="落地项目">
|
||||||
|
<el-input v-model="form.landing_project" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="对接人">
|
||||||
|
<el-input v-model="form.contact_person" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="对接人联系方式">
|
||||||
|
<el-input v-model="form.contact_phone" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="经办人">
|
||||||
|
<el-input v-model="form.handler" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="备注">
|
||||||
|
<el-input v-model="form.remark" />
|
||||||
|
</el-form-item>
|
||||||
<el-form-item label="规格型号">
|
<el-form-item label="规格型号">
|
||||||
<el-input v-model="form.spec" />
|
<el-input v-model="form.spec" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
@ -214,6 +234,11 @@ const form = reactive({
|
||||||
material_subcategory: '',
|
material_subcategory: '',
|
||||||
stage: '',
|
stage: '',
|
||||||
importance_level: '',
|
importance_level: '',
|
||||||
|
landing_project: '',
|
||||||
|
contact_person: '',
|
||||||
|
contact_phone: '',
|
||||||
|
handler: '',
|
||||||
|
remark: '',
|
||||||
spec: '',
|
spec: '',
|
||||||
standard: '',
|
standard: '',
|
||||||
application_scene: [],
|
application_scene: [],
|
||||||
|
|
@ -311,6 +336,11 @@ const resetForm = () => {
|
||||||
material_subcategory: '',
|
material_subcategory: '',
|
||||||
stage: '',
|
stage: '',
|
||||||
importance_level: '',
|
importance_level: '',
|
||||||
|
landing_project: '',
|
||||||
|
contact_person: '',
|
||||||
|
contact_phone: '',
|
||||||
|
handler: '',
|
||||||
|
remark: '',
|
||||||
spec: '',
|
spec: '',
|
||||||
standard: '',
|
standard: '',
|
||||||
application_scene: [],
|
application_scene: [],
|
||||||
|
|
@ -397,10 +427,11 @@ const onSave = async () => {
|
||||||
await updateMaterial(currentId.value, payload)
|
await updateMaterial(currentId.value, payload)
|
||||||
} else {
|
} else {
|
||||||
await createMaterial(payload)
|
await createMaterial(payload)
|
||||||
|
pagination.page = 1
|
||||||
}
|
}
|
||||||
ElMessage.success('保存成功')
|
ElMessage.success('保存成功')
|
||||||
dialogVisible.value = false
|
dialogVisible.value = false
|
||||||
loadMaterials()
|
await loadMaterials()
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
ElMessage.error(error.response?.data?.detail || '保存失败')
|
ElMessage.error(error.response?.data?.detail || '保存失败')
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue