bonus-ui/src/views/canteen/dish/material/components/MaterialDialog.vue

601 lines
25 KiB
Vue
Raw Normal View History

2025-03-06 13:08:28 +08:00
<template>
<el-dialog
:title="title + ' - 原料'"
:visible.sync="visible"
2025-05-15 15:00:09 +08:00
width="1330px"
2025-03-06 13:08:28 +08:00
append-to-body
:close-on-click-modal="false"
:destroy-on-close="true"
@close="handleClose"
2025-08-06 18:18:17 +08:00
>
2025-03-07 17:24:51 +08:00
<div style="width: 100%;height: 600px;overflow-y: auto;">
<el-tabs v-model="activeTab">
<el-tab-pane label="基础信息" name="basic">
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row>
2025-05-28 10:28:52 +08:00
<el-col :span="12">
<el-form-item label="原料编号" prop="materialCode">
<el-input
v-model="form.materialCode"
placeholder="请输入原料编号"
maxlength="40"
show-word-limit
/>
</el-form-item>
</el-col>
2025-03-07 17:24:51 +08:00
<el-col :span="12">
<el-form-item label="原料名称" prop="materialName">
<el-input
v-model="form.materialName"
placeholder="请输入原料名称"
maxlength="40"
show-word-limit
/>
</el-form-item>
</el-col>
<el-col :span="12">
2025-05-28 10:28:52 +08:00
<el-form-item label="原料类别" prop="materialTypeId">
<el-cascader v-model="form.materialTypeId"
2025-03-12 15:28:36 +08:00
:options="treeTypeOptions" :filterable="true" style="width: 100%;" :show-all-levels="false"
2025-08-06 18:18:17 +08:00
:props="{
2025-03-12 15:28:36 +08:00
emitPath: false,// 若设置 false则只返回该节点的值只返回最后选择的id
checkStrictly: true,//来设置父子节点取消选中关联,从而达到选择任意一级选项的目的
value:'id',label:'categoryName'
}" clearable >
</el-cascader>
2025-03-07 17:24:51 +08:00
</el-form-item>
</el-col>
<el-col :span="12">
2025-05-15 15:00:09 +08:00
<el-form-item label="所属区域" prop="areaId">
<el-cascader v-model="form.areaId"
:options="treeAreaOptions" :filterable="true" style="width: 100%;" :show-all-levels="false"
2025-08-06 18:18:17 +08:00
:props="{
2025-05-15 15:00:09 +08:00
emitPath: false,// 若设置 false则只返回该节点的值只返回最后选择的id
checkStrictly: false,//来设置父子节点取消选中关联,从而达到选择任意一级选项的目的
value:'id',label:'label'
}" clearable @change="handleAreaChange">
</el-cascader>
</el-form-item>
</el-col>
2025-05-28 10:28:52 +08:00
<el-col :span="12">
2025-03-12 15:28:36 +08:00
<el-form-item label="计量类型" prop="salesMode" >
<el-select v-model="form.salesMode" placeholder="请选择计量类型" style="width: 100%" @change="getDrpUnitList">
<el-option label="按份" value="1" />
<el-option label="称重" value="2" />
2025-03-07 17:24:51 +08:00
</el-select>
</el-form-item>
2025-08-06 18:18:17 +08:00
</el-col>
2025-03-07 17:24:51 +08:00
<el-col :span="12">
2025-03-12 15:28:36 +08:00
<el-form-item label="原料单位" prop="unitId">
2025-08-06 18:18:17 +08:00
<el-select v-model="form.unitId" placeholder="请选择原料单位" style="width: 100%">
2025-03-12 15:28:36 +08:00
<el-option v-for="item in this.unitOptions"
:key="item.unitId"
:label="item.unitName"
2025-08-06 18:18:17 +08:00
:value="item.unitId"
2025-03-12 15:28:36 +08:00
></el-option>
2025-03-07 17:24:51 +08:00
</el-select>
</el-form-item>
2025-08-06 18:18:17 +08:00
</el-col>
2025-08-13 14:12:24 +08:00
<el-col :span="12">
2025-03-12 15:28:36 +08:00
<el-form-item label="原料进价" prop="unitPrice">
2025-03-07 17:24:51 +08:00
<el-input
2025-03-12 15:28:36 +08:00
v-model="form.unitPrice"
2025-03-07 17:24:51 +08:00
placeholder="请输入原料进价"
2025-03-12 15:28:36 +08:00
@input="handleNumericInput('unitPrice', $event)"
@blur="formatNumericValue('unitPrice')"
2025-03-07 17:24:51 +08:00
>
<template slot="append"></template>
</el-input>
</el-form-item>
2025-08-06 18:18:17 +08:00
</el-col>
2025-08-13 14:12:24 +08:00
<!--
2025-03-07 17:24:51 +08:00
<el-col :span="12">
2025-03-12 15:28:36 +08:00
<el-form-item label="条码" prop="barCode">
2025-03-07 17:24:51 +08:00
<el-input
2025-03-12 15:28:36 +08:00
v-model="form.barCode"
2025-03-07 17:24:51 +08:00
placeholder="请输入条码"
maxlength="20"
show-word-limit
/>
</el-form-item>
2025-05-15 15:00:09 +08:00
</el-col> -->
2025-08-22 14:10:58 +08:00
<el-col :span="12">
<el-form-item label="临期天数" prop="shelfLifeDays">
<el-input v-model="form.shelfLifeDays"
placeholder="请输入临期天数"
maxlength="6" @input="(v)=>(form.shelfLifeDays=v.replace(/[^\d]/g,''))"
><template slot="append"></template>
</el-input>
</el-form-item>
</el-col>
2025-03-07 17:24:51 +08:00
<el-col :span="12">
2025-08-06 18:18:17 +08:00
<el-form-item label="营养信息类别" prop="nutritionTypeId">
2025-03-12 15:28:36 +08:00
<el-cascader
2025-05-28 10:28:52 +08:00
v-model="form.nutritionTypeId"
2025-03-12 15:28:36 +08:00
:options="cascaderOptions"
2025-08-06 18:18:17 +08:00
:props="{
2025-04-16 18:29:28 +08:00
emitPath: false,// 若设置 false则只返回该节点的值只返回最后选择的id
2025-04-14 19:01:51 +08:00
checkStrictly: false,//来设置父子节点取消选中关联,从而达到选择任意一级选项的目的
2025-05-28 10:28:52 +08:00
value:'id',label:'label'
2025-04-14 19:01:51 +08:00
}"
2025-03-12 15:28:36 +08:00
placeholder="请选择营养信息类别"
clearable style="width: 100%;"
@change="handleNutritionChange"
/>
2025-03-07 17:24:51 +08:00
</el-form-item>
2025-08-06 18:18:17 +08:00
</el-col>
2025-03-07 17:24:51 +08:00
<el-col :span="12">
2025-05-28 10:28:52 +08:00
<el-form-item label="营养信息" prop="nutritionId">
<el-select v-model="form.nutritionId" placeholder="请选择营养信息" style="width: 100%" clearable @change="chosenNutrition">
2025-03-12 15:28:36 +08:00
<el-option v-for="item in this.nutritionOptions"
2025-05-28 10:28:52 +08:00
:key="item.nutritionId"
:label="item.nutritionName"
2025-08-06 18:18:17 +08:00
:value="item.nutritionId"
2025-03-12 15:28:36 +08:00
></el-option>
2025-03-07 17:24:51 +08:00
</el-select>
</el-form-item>
2025-08-06 18:18:17 +08:00
</el-col>
2025-03-07 17:24:51 +08:00
<el-col :span="24">
<h3>营养信息</h3>
2025-08-06 18:18:17 +08:00
<el-row class="nutrition-info">
2025-05-15 15:00:09 +08:00
<el-col :span="24">
<el-table :data="formTable" size="mini" >
<el-table-column label="加工时间min" prop="processingTime" align="center" width="140"></el-table-column>
<el-table-column label="可食部分(g/100g)" prop="edible" align="center" width="140"></el-table-column>
<el-table-column label="水分(g/100g)" prop="water" align="center" width="140"></el-table-column>
<el-table-column label="热量(千卡/100g" prop="calories" align="center" width="140"></el-table-column>
<el-table-column label="蛋白质(g/100g)" prop="protein" align="center" width="140"></el-table-column>
2025-08-06 18:18:17 +08:00
<el-table-column label="脂肪(g/100g)" prop="fat" align="center" width="140"></el-table-column>
2025-05-15 15:00:09 +08:00
<el-table-column label="碳水化合物(g/100g)" prop="carbohydrate" align="center" width="150"></el-table-column>
2025-08-06 18:18:17 +08:00
<el-table-column label="膳食纤维(g/100g)" prop="dietaryFiber" align="center" width="140"></el-table-column>
<el-table-column label="胆固醇(mg/100g)" prop="cholesterol" align="center" width="140"></el-table-column>
2025-05-15 15:00:09 +08:00
</el-table>
</el-col>
<el-col :span="24">
2025-08-06 18:18:17 +08:00
<el-table :data="formTable" size="mini" >
2025-05-15 15:00:09 +08:00
<el-table-column label="灰分(g/100g)" prop="ash" align="center" width="140"></el-table-column>
<el-table-column label="维生素A(μg/100g)" prop="vitaminA" align="center" width="140"></el-table-column>
<el-table-column label="胡萝卜素(μg/100g)" prop="carotene" align="center" width="140"></el-table-column>
<el-table-column label="视黄醇(μg/100g)" prop="retinol" align="center" width="140"></el-table-column>
<el-table-column label="硫胺素(mg/100g)" prop="thiamine" align="center" width="140"></el-table-column>
<el-table-column label="核黄素(mg/100g)" prop="riboflavin" align="center" width="140"></el-table-column>
<el-table-column label="烟酸/尼克酸(mg/100g)" prop="niacin" align="center" width="150"></el-table-column>
<el-table-column label="维生素C(mg/100g)" prop="vitaminC" align="center" width="140"></el-table-column>
<el-table-column label="维生素D(μg/100g)" prop="vitaminD" align="center" width="140"></el-table-column>
</el-table>
</el-col>
<el-col :span="24">
2025-08-06 18:18:17 +08:00
<el-table :data="formTable" size="mini" >
2025-05-15 15:00:09 +08:00
<el-table-column label="维生素E(mg/100g)" prop="vitaminE" align="center" width="140"></el-table-column>
<el-table-column label="钙(mg/100g)" prop="calcium" align="center" width="140"></el-table-column>
<el-table-column label="磷(mg/100g)" prop="phosphorus" align="center" width="140"></el-table-column>
<el-table-column label="钾(mg/100g)" prop="kalium" align="center" width="140"></el-table-column>
<el-table-column label="钠 (mg/100g)" prop="sodium" align="center" width="140"></el-table-column>
<el-table-column label="镁(mg/100g)" prop="magnesium" align="center" width="140"></el-table-column>
<el-table-column label="铁 (mg/100g)" prop="iron" align="center" width="150"></el-table-column>
<el-table-column label="锌(mg/100g)" prop="zinc" align="center" width="140"></el-table-column>
2025-08-06 18:18:17 +08:00
<el-table-column label="硒(μg/100g)" prop="selenium" align="center" width="140"></el-table-column>
2025-05-15 15:00:09 +08:00
</el-table>
2025-08-06 18:18:17 +08:00
</el-col>
2025-03-07 17:24:51 +08:00
</el-row>
</el-col>
</el-row>
</el-form>
2025-08-06 18:18:17 +08:00
</el-tab-pane>
2025-03-07 17:24:51 +08:00
</el-tabs>
2025-08-06 18:18:17 +08:00
</div>
2025-03-06 13:08:28 +08:00
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</template>
<script>
2025-04-09 09:07:42 +08:00
import { systemAreaTreeApi } from "@/api/base/area";
import { systemMaterialTreeApi,getDrpUnitListApi } from "@/api/dish/material";
2025-05-27 17:53:00 +08:00
import { nutritionTypeListApi,nutritionAllListApi,getNutritionInfo } from "@/api/dish/nutritionInfo";
2025-03-06 13:08:28 +08:00
export default {
name: "MaterialDialog",
props: {
title: {
type: String,
default: '新增'
},
visible: {
type: Boolean,
default: false
}
},
data() {
return {
activeTab: 'basic',
2025-03-12 15:28:36 +08:00
treeAreaOptions:[],//区域树
treeTypeOptions:[],//类型树
2025-08-06 18:18:17 +08:00
unitOptions:[],//单位下拉
2025-03-12 15:28:36 +08:00
nutritionTypeTreeData:[],//类别接口返回数据(未处理)
cascaderOptions: [], // 级联选择器的选项(已处理)
2025-08-06 18:18:17 +08:00
nutritionOptions:[],
2025-05-15 15:00:09 +08:00
menuMaterialNutritionDTO:{
processingTime: '0',//加工时间min
edible: '0',//可食部分(g/100g)
water: '0',//水分(g/100g)
calories: '0',//热量(千卡/100g)
2025-08-06 18:18:17 +08:00
protein: '0',//蛋白质(g/100g)
2025-05-15 15:00:09 +08:00
fat: '0',//脂肪(g/100g)
carbohydrate: '0',//碳水化合物(g/100g)
dietaryFiber: '0',//膳食纤维(g/100g)
cholesterol: '0',//胆固醇(mg/100g)
ash: '0',//灰分(g/100g)
2025-08-06 18:18:17 +08:00
vitaminA: '0',//维生素a(μg/100g)
2025-05-15 15:00:09 +08:00
carotene: '0',//胡萝卜素(μg/100g)
retinol: '0',//视黄醇(μg/100g)
thiamine: '0',//硫胺素(mg/100g)
riboflavin: '0',//核黄素(mg/100g)
niacin: '0',//烟酸/尼克酸(mg/100g)
vitaminC: '0',//维生素c(mg/100g)
vitaminE: '0',//维生素e(g/100g)
calcium: '0',//钙(mg/100g)
phosphorus: '0',//磷(mg/100g)
2025-08-06 18:18:17 +08:00
kalium: '0',//钾(mg/100g)
2025-05-15 15:00:09 +08:00
sodium: '0',//钠(mg/100g)
magnesium: '0',//镁(mg/100g)
iron: '0',//铁(mg/100g)
zinc: '0',//锌(mg/100g)
selenium: '0',//硒(μg/100g)
2025-08-06 18:18:17 +08:00
cuprum: '0',//铜(mg/100g)
2025-05-15 15:00:09 +08:00
manganese: '0',//锰(mg/100g)
iodine: '0'
},
2025-03-06 13:08:28 +08:00
form: {
2025-05-28 10:28:52 +08:00
materialCode: '',//原料名称
2025-03-12 15:28:36 +08:00
materialName: '',//原料名称
areaId: null,//所属区域
2025-08-06 18:18:17 +08:00
materialTypeId: null,//原料类别
2025-08-22 14:10:58 +08:00
salesMode: '2',//计量类型
2025-03-12 15:28:36 +08:00
unitId: '',//原料单位
2025-08-22 14:10:58 +08:00
unitPrice: '0',//原料进价(元)
2025-03-12 15:28:36 +08:00
barCode: '',//条码
2025-08-22 14:10:58 +08:00
shelfLifeDays:0,//临期天数
2025-05-28 10:28:52 +08:00
nutritionTypeId:null,//营养信息类型
2025-08-06 18:18:17 +08:00
nutritionId:null,//营养信息
2025-03-12 15:28:36 +08:00
//营养信息
2025-05-15 15:00:09 +08:00
menuMaterialNutritionDTO: {}
2025-03-06 13:08:28 +08:00
},
2025-05-15 15:00:09 +08:00
formTable:[
2025-08-06 18:18:17 +08:00
{
2025-05-15 15:00:09 +08:00
processingTime: '0',//加工时间min
edible: '0',//可食部分(g/100g)
water: '0',//水分(g/100g)
calories: '0',//热量(千卡/100g)
2025-08-06 18:18:17 +08:00
protein: '0',//蛋白质(g/100g)
2025-05-15 15:00:09 +08:00
fat: '0',//脂肪(g/100g)
carbohydrate: '0',//碳水化合物(g/100g)
dietaryFiber: '0',//膳食纤维(g/100g)
cholesterol: '0',//胆固醇(mg/100g)
ash: '0',//灰分(g/100g)
2025-08-06 18:18:17 +08:00
vitaminA: '0',//维生素a(μg/100g)
2025-05-15 15:00:09 +08:00
carotene: '0',//胡萝卜素(μg/100g)
retinol: '0',//视黄醇(μg/100g)
thiamine: '0',//硫胺素(mg/100g)
riboflavin: '0',//核黄素(mg/100g)
niacin: '0',//烟酸/尼克酸(mg/100g)
vitaminC: '0',//维生素c(mg/100g)
vitaminE: '0',//维生素e(g/100g)
calcium: '0',//钙(mg/100g)
phosphorus: '0',//磷(mg/100g)
2025-08-06 18:18:17 +08:00
kalium: '0',//钾(mg/100g)
2025-05-15 15:00:09 +08:00
sodium: '0',//钠(mg/100g)
magnesium: '0',//镁(mg/100g)
iron: '0',//铁(mg/100g)
zinc: '0',//锌(mg/100g)
selenium: '0',//硒(μg/100g)
2025-08-06 18:18:17 +08:00
cuprum: '0',//铜(mg/100g)
2025-05-15 15:00:09 +08:00
manganese: '0',//锰(mg/100g)
iodine: '0'
}
],
2025-03-06 13:08:28 +08:00
rules: {
2025-06-24 13:14:28 +08:00
materialCode: [{ required: true, message: '请输入原料编码', trigger: 'blur' }],
2025-03-06 13:08:28 +08:00
materialName: [{ required: true, message: '请输入原料名称', trigger: 'blur' }],
2025-03-12 15:28:36 +08:00
areaId: [{ required: true, message: '请选择所属区域', trigger: 'change' }],
2025-05-28 10:28:52 +08:00
materialTypeId: [{ required: true, message: '请选择原料类别', trigger: 'change' }],
2025-08-06 18:18:17 +08:00
salesMode: [{ required: true, message: '请选择计量类型', trigger: 'change' }],
2025-08-22 14:10:58 +08:00
shelfLifeDays: [{ required: true, message: '请输入临期天数', trigger: 'change' }],
2025-06-11 09:58:37 +08:00
nutritionTypeId: [{ required: true, message: '请选择营养信息类别', trigger: 'change' }],
nutritionId: [{ required: true, message: '请选择营养信息', trigger: 'change' }],
2025-03-06 13:08:28 +08:00
},
nutritionFields: [
2025-04-29 13:58:42 +08:00
{ label: '可食部分', prop: 'edible', unit: 'g/100g' },
2025-03-06 13:08:28 +08:00
{ label: '水分', prop: 'water', unit: 'g/100g' },
2025-04-29 13:58:42 +08:00
{ label: '热量', prop: 'calories', unit: '千卡/100g' },
2025-03-06 13:08:28 +08:00
{ label: '蛋白质', prop: 'protein', unit: 'g/100g' },
{ label: '脂肪', prop: 'fat', unit: 'g/100g' },
{ label: '碳水化合物', prop: 'carbohydrate', unit: 'g/100g' },
{ label: '膳食纤维', prop: 'dietaryFiber', unit: 'g/100g' },
{ label: '胆固醇', prop: 'cholesterol', unit: 'mg/100g' },
{ label: '灰分', prop: 'ash', unit: 'g/100g' },
{ label: '维生素A', prop: 'vitaminA', unit: 'μg/100g' },
2025-03-12 15:28:36 +08:00
2025-03-06 13:08:28 +08:00
{ label: '胡萝卜素', prop: 'carotene', unit: 'μg/100g' },
{ label: '视黄醇', prop: 'retinol', unit: 'μg/100g' },
{ label: '硫胺素', prop: 'thiamine', unit: 'mg/100g' },
{ label: '核黄素', prop: 'riboflavin', unit: 'mg/100g' },
{ label: '烟酸/尼克酸', prop: 'niacin', unit: 'mg/100g' },
{ label: '维生素C', prop: 'vitaminC', unit: 'mg/100g' },
{ label: '维生素E', prop: 'vitaminE', unit: 'mg/100g' },
{ label: '钙', prop: 'calcium', unit: 'mg/100g' },
{ label: '磷', prop: 'phosphorus', unit: 'mg/100g' },
2025-03-12 15:28:36 +08:00
{ label: '钾', prop: 'kalium', unit: 'mg/100g' },
2025-03-06 13:08:28 +08:00
{ label: '钠', prop: 'sodium', unit: 'mg/100g' },
{ label: '镁', prop: 'magnesium', unit: 'mg/100g' },
{ label: '铁', prop: 'iron', unit: 'mg/100g' },
{ label: '锌', prop: 'zinc', unit: 'mg/100g' },
{ label: '硒', prop: 'selenium', unit: 'μg/100g' },
2025-03-12 15:28:36 +08:00
{ label: '铜', prop: 'cuprum', unit: 'mg/100g' },
2025-03-06 13:08:28 +08:00
{ label: '锰', prop: 'manganese', unit: 'mg/100g' },
{ label: '碘', prop: 'iodine', unit: 'μg/100g' }
]
};
},
computed: {
// Remove dialogVisible computed property
},
2025-03-12 15:28:36 +08:00
created() {
this.getAreaTreeData();//获取区域树
this.getTypeTreeData();//获取原料类别树
2025-08-06 18:18:17 +08:00
this.getDrpUnitList();//获取单位类型下拉
2025-05-28 10:28:52 +08:00
this.getNutritionTypeList()//获取营养信息类别树
2025-03-12 15:28:36 +08:00
},
2025-03-06 13:08:28 +08:00
methods: {
2025-03-12 15:28:36 +08:00
//区域树
getAreaTreeData() {
systemAreaTreeApi({}).then((response) => {
2025-08-06 18:18:17 +08:00
this.treeAreaOptions = response.data;
2025-03-12 15:28:36 +08:00
});
},
//基础设置-选择区域
2025-08-06 18:18:17 +08:00
handleAreaChange(val){
2025-05-28 10:28:52 +08:00
// this.form.categoryId=null
// this.getTypeTreeData()
// this.getDrpUnitList()
2025-03-12 15:28:36 +08:00
},
//类型树
getTypeTreeData() {
let param = {
2025-06-30 18:16:08 +08:00
areaId:this.form.areaId,
goodsType:1
2025-03-12 15:28:36 +08:00
}
systemMaterialTreeApi(param).then((response) => {
this.treeTypeOptions = response.data;
});
},
//单位类型拉下选
getDrpUnitList() {
2025-08-06 18:18:17 +08:00
let param = {
2025-05-28 10:28:52 +08:00
"weighType":this.form.salesMode,
2025-08-06 18:18:17 +08:00
"pageNum": 1,
2025-05-28 10:28:52 +08:00
"pageSize": 100
2025-03-12 15:28:36 +08:00
}
this.form.unitId=null
getDrpUnitListApi(param).then((response) => {
2025-08-06 18:18:17 +08:00
this.unitOptions = response.rows;
2025-03-12 15:28:36 +08:00
});
2025-08-06 18:18:17 +08:00
},
//获取营养信息类别
2025-05-28 10:28:52 +08:00
getNutritionTypeList() {
2025-04-14 19:01:51 +08:00
nutritionTypeListApi().then(response => {
2025-05-28 10:28:52 +08:00
this.typeTreeData = response.data;
2025-08-06 18:18:17 +08:00
this.cascaderOptions = this.cascaderOptionsMethod();
2025-03-12 15:28:36 +08:00
}).catch(error => {
console.error("Failed to fetch food types:", error);
});
2025-08-06 18:18:17 +08:00
},
2025-03-12 15:28:36 +08:00
//生成级联选择器的选项数据
cascaderOptionsMethod() {
2025-05-28 10:28:52 +08:00
if (this.typeTreeData.length==0) {
2025-03-12 15:28:36 +08:00
return [];
}
2025-05-28 10:28:52 +08:00
return this.typeTreeData.map(item => ({
id: item.id,
label: item.name,
2025-04-14 19:01:51 +08:00
parentId:0,
2025-05-28 10:28:52 +08:00
level:0,
2025-03-12 15:28:36 +08:00
children: item.littleTypeList.map(subItem => ({
2025-05-28 10:28:52 +08:00
id: subItem.id,//父子类别value一致时选中识别不出来加个#号区分
label: subItem.name,
bigType: item.name,
2025-04-14 19:01:51 +08:00
parentId:item.id,
2025-05-28 10:28:52 +08:00
level:1
2025-03-12 15:28:36 +08:00
}))
}));
},
//选中营养信息类别
handleNutritionChange(value) {
2025-08-06 18:18:17 +08:00
console.log("选中营养信息类别",value)
this.nutritionAllList(value)
},
2025-03-12 15:28:36 +08:00
//获取营养信息下拉
2025-05-28 10:28:52 +08:00
nutritionAllList(value){
2025-03-12 15:28:36 +08:00
let param = {
2025-05-28 10:28:52 +08:00
categoryId:value
2025-03-12 15:28:36 +08:00
}
2025-08-06 18:18:17 +08:00
nutritionAllListApi(param).then((response) => {
2025-05-28 10:28:52 +08:00
this.$set(this.form,"nutritionId",null)
2025-03-12 15:28:36 +08:00
this.nutritionOptions = response.data;
});
},
//选中营养信息
chosenNutrition(){
2025-08-06 18:18:17 +08:00
console.log("选中营养信息",this.form.nutritionId)
if (!this.form.nutritionId) {
// 清空选择时重置为默认值
this.resetNutritionTable();
return;
}
2025-05-28 10:28:52 +08:00
getNutritionInfo({nutritionId: this.form.nutritionId}).then((response) => {
2025-05-09 15:53:57 +08:00
if(response.data){
this.form.menuMaterialNutritionDTO = response.data
2025-05-15 15:00:09 +08:00
this.formTable = [this.form.menuMaterialNutritionDTO]
2025-05-09 15:53:57 +08:00
}else{
2025-05-15 15:00:09 +08:00
this.form.menuMaterialNutritionDTO = this.menuMaterialNutritionDTO
this.formTable = [this.menuMaterialNutritionDTO]
2025-08-06 18:18:17 +08:00
}
2025-03-12 15:28:36 +08:00
});
2025-08-06 18:18:17 +08:00
},
2025-03-06 13:08:28 +08:00
handleNumericInput(field, event) {
2025-08-06 18:18:17 +08:00
// const value = event.target.value;
const value = event;
2025-03-06 13:08:28 +08:00
// 只允许输入数字和小数点
let newValue = value.replace(/[^\d.]/g, '');
// 确保只有一个小数点
const parts = newValue.split('.');
if (parts.length > 2) {
newValue = parts[0] + '.' + parts.slice(1).join('');
}
// 限制小数点后最多两位
if (parts.length === 2 && parts[1].length > 2) {
newValue = parts[0] + '.' + parts[1].substring(0, 2);
}
// 设置字段值
if (field.includes('.')) {
const [obj, prop] = field.split('.');
2025-03-25 15:48:23 +08:00
this.form[obj][prop] = newValue;
2025-08-06 18:18:17 +08:00
} else {
2025-03-25 15:48:23 +08:00
this.form[field] = newValue;
2025-03-06 13:08:28 +08:00
}
2025-08-06 18:18:17 +08:00
},
2025-03-06 13:08:28 +08:00
formatNumericValue(field) {
let value;
if (field.includes('.')) {
2025-08-06 18:18:17 +08:00
const [obj, prop] = field.split('.');
2025-03-06 13:08:28 +08:00
value = this.form[obj][prop];
} else {
value = this.form[field];
}
if (!value || value === '' || value === '.') {
value = '0.00';
} else {
value = parseFloat(value).toFixed(2);
}
2025-03-25 15:48:23 +08:00
console.log(value)
2025-03-06 13:08:28 +08:00
if (field.includes('.')) {
const [obj, prop] = field.split('.');
2025-03-25 15:48:23 +08:00
this.form[obj][prop] = value;
2025-03-06 13:08:28 +08:00
} else {
2025-03-25 15:48:23 +08:00
this.form[field] = value;
2025-03-06 13:08:28 +08:00
}
},
addProcessingMethod() {
2025-03-12 15:28:36 +08:00
this.form.firstProcessList.push('');
2025-03-06 13:08:28 +08:00
},
removeProcessingMethod(index) {
2025-03-12 15:28:36 +08:00
this.form.firstProcessList.splice(index, 1);
2025-03-06 13:08:28 +08:00
},
addCuttingMethod() {
2025-03-12 15:28:36 +08:00
this.form.cutProcessList.push('');
2025-03-06 13:08:28 +08:00
},
removeCuttingMethod(index) {
2025-03-12 15:28:36 +08:00
this.form.cutProcessList.splice(index, 1);
},
setFormData(row){
console.log(row)
2025-05-28 10:28:52 +08:00
// this.getTypeTreeData()
2025-08-06 18:18:17 +08:00
// this.getDrpUnitList()
2025-03-12 15:28:36 +08:00
this.$set(this.form,"areaId",row.areaId)
this.$set(this.form,"areaName",row.areaName)
2025-05-28 10:28:52 +08:00
this.$set(this.form,"materialTypeId",row.materialTypeId)
this.$set(this.form,"materialTypeName",row.materialTypeName)
2025-03-12 15:28:36 +08:00
this.$set(this.form,"materialCode",row.materialCode)
this.$set(this.form,"materialId",row.materialId)
2025-08-06 18:18:17 +08:00
this.$set(this.form,"materialName",row.materialName)
2025-03-12 15:28:36 +08:00
this.$set(this.form,"salesMode",row.salesMode+'')
2025-05-28 10:28:52 +08:00
this.getDrpUnitList()
2025-03-12 15:28:36 +08:00
this.$set(this.form,"unitId",row.unitId)
2025-08-06 18:18:17 +08:00
this.$set(this.form,"salePrice",Number((row.salePrice/100).toFixed(2)))
this.$set(this.form,"unitPrice",Number((row.unitPrice/100).toFixed(2)))
this.$set(this.form,"barCode",row.barCode)
2025-08-22 14:10:58 +08:00
this.$set(this.form,"shelfLifeDays",row.shelfLifeDays)
2025-05-28 10:28:52 +08:00
if(row.nutritionTypeId){
2025-08-06 18:18:17 +08:00
this.$set(this.form,"nutritionTypeId",Number(row.nutritionTypeId))
2025-05-28 10:28:52 +08:00
this.nutritionAllList(this.form.nutritionTypeId)
2025-03-12 15:28:36 +08:00
setTimeout(()=>{
2025-05-28 10:28:52 +08:00
this.$set(this.form,"nutritionId",row.nutritionId)
if(this.form.nutritionId){
getNutritionInfo({nutritionId: this.form.nutritionId}).then((response) => {
2025-05-14 17:42:57 +08:00
if(response.data){
this.form.menuMaterialNutritionDTO = response.data
2025-05-15 15:00:09 +08:00
this.formTable = [this.form.menuMaterialNutritionDTO]
2025-05-14 17:42:57 +08:00
}else{
2025-05-15 15:00:09 +08:00
this.form.menuMaterialNutritionDTO = this.menuMaterialNutritionDTO
this.formTable = [this.menuMaterialNutritionDTO]
2025-08-06 18:18:17 +08:00
}
2025-03-12 15:28:36 +08:00
});
}else{
2025-05-15 15:00:09 +08:00
this.form.menuMaterialNutritionDTO = this.menuMaterialNutritionDTO
this.formTable = [this.menuMaterialNutritionDTO]
2025-03-12 15:28:36 +08:00
}
2025-05-28 10:28:52 +08:00
},600)
2025-03-12 15:28:36 +08:00
}else{
2025-04-16 18:29:28 +08:00
this.$set(this.form,"nutritionType",null)
2025-05-15 15:00:09 +08:00
this.form.menuMaterialNutritionDTO = this.menuMaterialNutritionDTO
this.formTable = [this.menuMaterialNutritionDTO]
2025-08-06 18:18:17 +08:00
}
},
2025-03-06 13:08:28 +08:00
submitForm() {
this.$refs.form.validate(valid => {
if (valid) {
2025-07-04 14:02:57 +08:00
this.form.salePrice = Number(this.form.salePrice);
2025-08-06 18:18:17 +08:00
this.form.unitPrice = Number(this.form.unitPrice);
2025-03-06 13:08:28 +08:00
this.$emit('submit', this.form);
}
});
2025-08-06 18:18:17 +08:00
},
2025-03-06 13:08:28 +08:00
handleClose() {
this.$emit('update:visible', false);
this.$nextTick(() => {
this.reset();
});
2025-08-06 18:18:17 +08:00
},
2025-03-06 13:08:28 +08:00
cancel() {
this.$emit('update:visible', false);
this.$nextTick(() => {
this.reset();
});
2025-08-06 18:18:17 +08:00
},
2025-03-06 13:08:28 +08:00
reset() {
this.form = {
2025-03-12 15:28:36 +08:00
materialName: '',//原料名称
areaId: null,//所属区域
2025-08-06 18:18:17 +08:00
materialTypeId: null,//原料类别
2025-08-22 14:10:58 +08:00
salesMode: '2',//计量类型
2025-03-12 15:28:36 +08:00
unitId: '',//原料单位
2025-08-22 14:10:58 +08:00
unitPrice: '0',//原料进价(元)
2025-03-12 15:28:36 +08:00
barCode: '',//条码
2025-08-22 14:10:58 +08:00
shelfLifeDays:0,
2025-04-16 18:29:28 +08:00
nutritionType:null,//营养信息类型
2025-05-28 10:28:52 +08:00
nutritionId:null,//营养信息
2025-03-12 15:28:36 +08:00
//营养信息
2025-05-15 15:00:09 +08:00
menuMaterialNutritionDTO: this.menuMaterialNutritionDTO
2025-03-06 13:08:28 +08:00
};
2025-05-15 15:00:09 +08:00
this.formTable = [this.menuMaterialNutritionDTO]
2025-03-06 13:08:28 +08:00
}
}
};
</script>
<style lang="scss" scoped>
</style>