完善产品属性绑定

pull/744/head
没钱 2025-03-13 12:23:36 +08:00
parent 96e09786f1
commit 1984f0faa6
4 changed files with 79 additions and 82 deletions

View File

@ -223,6 +223,7 @@ export enum DICT_TYPE {
ERP_PRODUCT_PROPERTIES = 'erp_product_properties', // 产品配件属性
ERP_PRODUCT_COMMON_PROPERTIES = 'erp_product_common_properties', // 产品普通属性
ERP_PRODUCT_INPUT_PROPERTIES = 'erp_product_input_properties', // 产品输入属性
ERP_PRODUCT_BRAND = 'erp_product_brand', // 产品品牌

View File

@ -1,17 +1,11 @@
<!-- ERP 产品的新增/修改 -->
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px" v-loading="formLoading">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入名称" />
<el-input v-model="formData.name" disabled placeholder="请输入名称" />
</el-form-item>
</el-col>
<el-col :span="12">
@ -21,37 +15,36 @@
</el-col>
<el-col :span="12">
<el-form-item label="分类" prop="categoryId">
<el-tree-select
v-model="formData.categoryId"
:data="categoryList"
:props="defaultProps"
check-strictly
default-expand-all
placeholder="请选择分类"
class="w-1/1"
/>
<el-tree-select filterable v-model="formData.categoryId" :data="categoryList" :props="defaultProps" check-strictly
default-expand-all placeholder="请选择分类" class="w-1/1" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="产品品牌" prop="brandId">
<el-select v-model="formData.brandId" placeholder="请输入产品品牌" filterable clearable class="!w-240px">
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.ERP_PRODUCT_BRAND)" :key="dict.value"
:label="dict.label" :value="dict.value" @click="handleBrandModelClick(dict.label)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="产品型号" prop="model">
<el-input v-model="formData.model" @blur="handleModelBlur" placeholder="请输入产品型号" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="单位" prop="unitId">
<el-select v-model="formData.unitId" clearable placeholder="请选择单位" class="w-1/1">
<el-option
v-for="unit in unitList"
:key="unit.id"
:label="unit.name"
:value="unit.id"
/>
<el-option v-for="unit in unitList" :key="unit.id" :label="unit.name" :value="unit.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="状态" prop="status">
<el-radio-group v-model="formData.status">
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="dict.value"
:value="dict.value"
>
<el-radio v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)" :key="dict.value"
:value="dict.value">
{{ dict.label }}
</el-radio>
</el-radio-group>
@ -60,11 +53,8 @@
<el-col :span="12">
<el-form-item label="一物一码" prop="ifQr">
<el-radio-group v-model="formData.ifQr">
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="dict.value"
:value="dict.value"
>
<el-radio v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)" :key="dict.value"
:value="dict.value">
{{ dict.label }}
</el-radio>
</el-radio-group>
@ -77,56 +67,31 @@
</el-col>
<el-col :span="12">
<el-form-item label="保质期天数" prop="expiryDay">
<el-input-number
v-model="formData.expiryDay"
placeholder="请输入保质期天数"
:min="0"
:precision="0"
class="!w-1/1"
/>
<el-input-number v-model="formData.expiryDay" placeholder="请输入保质期天数" :min="0" :precision="0"
class="!w-1/1" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="重量kg" prop="weight">
<el-input-number
v-model="formData.weight"
placeholder="请输入重量kg"
:min="0"
class="!w-1/1"
/>
<el-input-number v-model="formData.weight" placeholder="请输入重量kg" :min="0" class="!w-1/1" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="采购价格" prop="purchasePrice">
<el-input-number
v-model="formData.purchasePrice"
placeholder="请输入采购价格,单位:元"
:min="0"
:precision="2"
class="!w-1/1"
/>
<el-input-number v-model="formData.purchasePrice" placeholder="请输入采购价格,单位:元" :min="0" :precision="2"
class="!w-1/1" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="销售价格" prop="salePrice">
<el-input-number
v-model="formData.salePrice"
placeholder="请输入销售价格,单位:元"
:min="0"
:precision="2"
class="!w-1/1"
/>
<el-input-number v-model="formData.salePrice" placeholder="请输入销售价格,单位:元" :min="0" :precision="2"
class="!w-1/1" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="最低价格" prop="minPrice">
<el-input-number
v-model="formData.minPrice"
placeholder="请输入最低价格,单位:元"
:min="0"
:precision="2"
class="!w-1/1"
/>
<el-input-number v-model="formData.minPrice" placeholder="请输入最低价格,单位:元" :min="0" :precision="2"
class="!w-1/1" />
</el-form-item>
</el-col>
<el-col :span="24">
@ -162,9 +127,11 @@ const formLoading = ref(false) // 表单的加载中1修改时的数据加
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
name: undefined,
name: '',
barCode: undefined,
categoryId: undefined,
brandId: undefined,
model: undefined,
unitId: undefined,
status: 0,
standard: undefined,
@ -174,12 +141,14 @@ const formData = ref({
purchasePrice: undefined,
salePrice: undefined,
minPrice: undefined,
ifQr:undefined
ifQr: undefined
})
const formRules = reactive({
name: [{ required: true, message: '产品名称不能为空', trigger: 'blur' }],
barCode: [{ required: true, message: '产品条码不能为空', trigger: 'blur' }],
categoryId: [{ required: true, message: '产品分类编号不能为空', trigger: 'blur' }],
brandId: [{ required: true, message: '产品品牌不能为空', trigger: 'blur' }],
model: [{ required: true, message: '产品型号不能为空', trigger: 'blur' }],
unitId: [{ required: true, message: '单位编号不能为空', trigger: 'blur' }],
status: [{ required: true, message: '产品状态不能为空', trigger: 'blur' }],
ifQr: [{ required: true, message: '一物一码不能为空', trigger: 'blur' }]
@ -235,14 +204,32 @@ const submitForm = async () => {
formLoading.value = false
}
}
let brand = ''
/** 品牌选择后 */
const handleBrandModelClick = (label?:string) => {
if (label) {
brand = label
if (formData.value.model) {
formData.value.name = brand + ' ' + formData.value.model
}
}
}
/** 型号失去焦点后 */
const handleModelBlur = () => {
if (formData.value.model && brand!=='') {
formData.value.name = brand +' ' + formData.value.model
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
name: undefined,
name: '',
barCode: undefined,
categoryId: undefined,
brandId: undefined,
model: undefined,
unitId: undefined,
status: CommonStatusEnum.ENABLE,
standard: undefined,
@ -252,7 +239,7 @@ const resetForm = () => {
purchasePrice: undefined,
salePrice: undefined,
minPrice: undefined,
ifQr:undefined
ifQr: undefined
}
formRef.value?.resetFields()
}

View File

@ -20,6 +20,7 @@
class="!w-240px"
/>
</el-form-item>
<el-form-item label="分类" prop="categoryId">
<el-tree-select
v-model="queryParams.categoryId"
@ -31,6 +32,7 @@
class="!w-240px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
@ -58,10 +60,15 @@
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="条码" align="center" prop="barCode" />
<el-table-column label="名称" align="center" prop="name" />
<el-table-column label="规格" align="center" prop="standard" />
<el-table-column label="分类" align="center" prop="categoryName" />
<el-table-column label="条码" width="150" align="center" prop="barCode" />
<el-table-column label="名称" width="300" align="center" prop="name" />
<el-table-column label="分类" width="150" align="center" prop="categoryName" />
<el-table-column label="品牌" width="150" align="center" prop="brandId">
<template #default="scope">
<dict-tag :type="DICT_TYPE.ERP_PRODUCT_BRAND" :value="scope.row.brandId" />
</template>
</el-table-column>
<el-table-column label="型号" width="150" align="center" prop="model" />
<el-table-column label="单位" align="center" prop="unitName" />
<el-table-column
label="采购价格"
@ -98,7 +105,7 @@
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center" width="160">
<el-table-column label="操作" align="center" fixed="right" width="160">
<template #default="scope">
<el-button
link
@ -150,7 +157,7 @@ import download from '@/utils/download'
import { ProductApi, ProductVO } from '@/api/erp/product/product'
import { ProductCategoryApi, ProductCategoryVO } from '@/api/erp/product/category'
import ProductForm from './ProductForm.vue'
import { DICT_TYPE } from '@/utils/dict'
import { getIntDictOptions,DICT_TYPE } from '@/utils/dict'
import { defaultProps, handleTree } from '@/utils/tree'
import { erpPriceTableColumnFormatter } from '@/utils'
import ProductPropertiesForm from './ProductPropertiesForm.vue'
@ -168,7 +175,9 @@ const queryParams = reactive({
pageNo: 1,
pageSize: 10,
name: undefined,
categoryId: undefined
categoryId: undefined,
brandId: undefined,
model: undefined,
})
const queryFormRef = ref() //
const exportLoading = ref(false) //

View File

@ -67,10 +67,9 @@
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="编号" align="center" prop="id" />
<el-table-column label="产品id" align="center" prop="productId" />
<el-table-column label="分类属性" align="center" prop="productCategoryPropertiesId" />
<el-table-column label="属性id" align="center" prop="productPropertiesProductId" />
<el-table-column label="分类属性值" align="center" prop="productCategoryPropertiesValue" />
<el-table-column label="产品名称" align="center" prop="productName" />
<el-table-column label="分类属性" align="center" prop="productCategoryPropertiesValue" />
<el-table-column label="属性名称" align="center" prop="productPropertiesName" />
<el-table-column
label="创建时间"
align="center"
@ -142,6 +141,7 @@ const queryParams = reactive({
const queryFormRef = ref() //
const exportLoading = ref(false) //
const productPropertiesCategory = ref()
/** 通过路由获取次产品属性关联的所有的值 */
const getProductPropertiesProductList = async () => {
if(route.query.productCategoryPropertiesId){