完善产品属性绑定
parent
96e09786f1
commit
1984f0faa6
|
|
@ -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', // 产品品牌
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) // 导出的加载中
|
||||
|
|
|
|||
|
|
@ -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){
|
||||
|
|
|
|||
Loading…
Reference in New Issue