【功能优化】添加商品属性时允许选择已有的属性值,点击「选择」后,获取 value 列表

pull/495/head
YunaiV 2024-08-14 13:06:23 +08:00
parent 879870ee26
commit 521ae46cba
5 changed files with 16 additions and 38 deletions

View File

@ -24,20 +24,6 @@ export interface PropertyValueVO {
remark?: string remark?: string
} }
/**
*
*/
export interface PropertyValueDetailVO {
/** 属性项的编号 */
propertyId: number // 属性的编号
/** 属性的名称 */
propertyName: string
/** 属性值的编号 */
valueId: number
/** 属性值的名称 */
valueName: string
}
// ------------------------ 属性项 ------------------- // ------------------------ 属性项 -------------------
// 创建属性项 // 创建属性项
@ -96,3 +82,8 @@ export const updatePropertyValue = (data: PropertyValueVO) => {
export const deletePropertyValue = (id: number) => { export const deletePropertyValue = (id: number) => {
return request.delete({ url: `/product/property/value/delete?id=${id}` }) return request.delete({ url: `/product/property/value/delete?id=${id}` })
} }
// 获得属性值精简列表
export const getPropertyValueSimpleList = (propertyId: number): Promise<PropertyValueVO[]> => {
return request.get({ url: '/product/property/value/simple-list', params: { propertyId } })
}

View File

@ -5,7 +5,6 @@ interface PropertyAndValues {
id: number id: number
name: string name: string
values?: PropertyAndValues[] values?: PropertyAndValues[]
propertyOpts?: PropertyAndValues[] // TODO @GoldenZqqq建议直接复用 values
} }
interface RuleConfig { interface RuleConfig {

View File

@ -34,7 +34,7 @@
@change="handleInputConfirm(index, item.id)" @change="handleInputConfirm(index, item.id)"
> >
<el-option <el-option
v-for="item2 in item.propertyOpts" v-for="item2 in attributeOptions"
:key="item2.id" :key="item2.id"
:label="item2.name" :label="item2.name"
:value="item2.name" :value="item2.name"
@ -79,6 +79,7 @@ const setInputRef = (el: any) => {
} }
} }
const attributeList = ref<PropertyAndValues[]>([]) // const attributeList = ref<PropertyAndValues[]>([]) //
const attributeOptions = ref([] as PropertyApi.PropertyValueVO[]) //
const props = defineProps({ const props = defineProps({
propertyList: { propertyList: {
type: Array, type: Array,
@ -111,9 +112,11 @@ const handleCloseProperty = (index: number) => {
} }
/** 显示输入框并获取焦点 */ /** 显示输入框并获取焦点 */
const showInput = async (index) => { const showInput = async (index: number) => {
attributeIndex.value = index attributeIndex.value = index
inputRef.value[index].focus() inputRef.value[index].focus()
//
await getAttributeOptions(attributeList.value[index].id)
} }
/** 输入框失去焦点或点击回车时触发 */ /** 输入框失去焦点或点击回车时触发 */
@ -141,4 +144,9 @@ const handleInputConfirm = async (index: number, propertyId: number) => {
attributeIndex.value = null attributeIndex.value = null
inputValue.value = '' inputValue.value = ''
} }
/** 获取商品属性下拉选项 */
const getAttributeOptions = async (propertyId: number) => {
attributeOptions.value = await PropertyApi.getPropertyValueSimpleList(propertyId)
}
</script> </script>

View File

@ -39,7 +39,6 @@ import * as PropertyApi from '@/api/mall/product/property'
defineOptions({ name: 'ProductPropertyForm' }) defineOptions({ name: 'ProductPropertyForm' })
const emit = defineEmits(['success']) // success
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
@ -110,7 +109,6 @@ const submitForm = async () => {
// emit // emit
for (const element of attributeOptions.value) { for (const element of attributeOptions.value) {
if (element.name === formData.value.name) { if (element.name === formData.value.name) {
emit('success', propertyId, element.id)
message.success(t('common.createSuccess')) message.success(t('common.createSuccess'))
dialogVisible.value = false dialogVisible.value = false
return return

View File

@ -58,14 +58,9 @@
</el-form> </el-form>
<!-- 商品属性添加 Form 表单 --> <!-- 商品属性添加 Form 表单 -->
<ProductPropertyAddForm <ProductPropertyAddForm ref="attributesAddFormRef" :propertyList="propertyList" />
ref="attributesAddFormRef"
:propertyList="propertyList"
@success="getPropertyValueList"
/>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import * as PropertyApi from '@/api/mall/product/property'
import { PropType } from 'vue' import { PropType } from 'vue'
import { copyValueToTarget } from '@/utils' import { copyValueToTarget } from '@/utils'
import { propTypes } from '@/utils/propTypes' import { propTypes } from '@/utils/propTypes'
@ -196,17 +191,4 @@ const onChangeSpec = () => {
const generateSkus = (propertyList: any[]) => { const generateSkus = (propertyList: any[]) => {
skuListRef.value.generateTableData(propertyList) skuListRef.value.generateTableData(propertyList)
} }
// TODO @GoldenZqqq使 success getPropertyValueSimpleList
/* 获取属性值列表 */
const getPropertyValueList = async (id, propertyId) => {
formLoading.value = true
try {
// TODO @
const data = await PropertyApi.getPropertyValuePage({ pageNo: 1, pageSize: 100, propertyId })
propertyList.value.find((item) => item.id === id).propertyOpts = data.list
} finally {
formLoading.value = false
}
}
</script> </script>