fix: 提交修改
This commit is contained in:
@@ -52,9 +52,22 @@
|
||||
</el-radio-group>
|
||||
</template>
|
||||
<template v-else-if="spec.type === 'number'">
|
||||
<div style="display:flex;align-items:center;gap:10px">
|
||||
<el-input-number v-model="createSpecValues[spec.id]" :min="spec.min || 0" :max="spec.max || 9999" :step="spec.step || 1" :step-strictly="true" size="small" @change="buildCreateArgsJson" style="width:180px" />
|
||||
<span style="font-size:12px;color:#909399">范围: {{ spec.min || 0 }} ~ {{ spec.max || 9999 }},步长: {{ spec.step || 1 }}</span>
|
||||
<div style="display:flex;align-items:center;gap:10px;flex-wrap:wrap">
|
||||
<el-input-number
|
||||
v-model="createDisplayValues[spec.id]"
|
||||
:min="hasUnit(spec) ? fromBaseUnit(spec.min ?? 0, createDisplayUnits[spec.id], getArgKey(spec)) : (spec.min ?? 0)"
|
||||
:max="hasUnit(spec) ? fromBaseUnit(spec.max ?? 0, createDisplayUnits[spec.id], getArgKey(spec)) : (spec.max ?? 0)"
|
||||
:step="hasUnit(spec) ? (fromBaseUnit(spec.step ?? 1, createDisplayUnits[spec.id], getArgKey(spec)) || 1) : (spec.step ?? 1)"
|
||||
:step-strictly="true"
|
||||
size="small"
|
||||
@change="onCreateNumberChange(spec)"
|
||||
style="width:180px"
|
||||
/>
|
||||
<el-select v-if="hasUnit(spec)" :model-value="createDisplayUnits[spec.id]" size="small" style="width:90px" @change="(newUnit) => onCreateUnitChange(spec, newUnit)">
|
||||
<el-option v-for="u in getParamUnits(spec)" :key="u" :label="u" :value="u" />
|
||||
</el-select>
|
||||
<span style="font-size:12px;color:#909399">范围: {{ spec.min ?? 0 }} ~ {{ spec.max ?? 0 }}
|
||||
<template v-if="hasUnit(spec)"> {{ getBaseUnit(getArgKey(spec)) }}</template>,步长: {{ spec.step ?? 1 }}</span>
|
||||
</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
@@ -82,6 +95,7 @@ import { ref, reactive, watch } from 'vue'
|
||||
import { Refresh, Plus } from '@element-plus/icons-vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { getProductPlanList, createProductPlan, getProductParameterList } from '@/api/admin/product'
|
||||
import { hasUnit, getArgKey, getBaseUnit, getParamUnits, getParamDefaultUnit, toBaseUnit, fromBaseUnit } from '@/utils/dynamicUnit'
|
||||
|
||||
const props = defineProps({
|
||||
modelValue: { type: Boolean, default: false },
|
||||
@@ -102,6 +116,8 @@ const createForm = reactive({ name: '', note: '', index: 0, args: '' })
|
||||
const createSpecList = ref([])
|
||||
const createSpecLoading = ref(false)
|
||||
const createSpecValues = reactive({})
|
||||
const createDisplayValues = reactive({})
|
||||
const createDisplayUnits = reactive({})
|
||||
|
||||
watch(showCreate, (v) => {
|
||||
if (v && props.goodId) loadCreateSpec()
|
||||
@@ -114,12 +130,42 @@ const loadCreateSpec = async () => {
|
||||
if (res?.data?.code === 200) {
|
||||
createSpecList.value = res.data.data || []
|
||||
for (const spec of createSpecList.value) {
|
||||
if (spec.type === 'number' && createSpecValues[spec.id] === undefined) createSpecValues[spec.id] = spec.min || 0
|
||||
if (spec.type === 'number') {
|
||||
if (createSpecValues[spec.id] === undefined) createSpecValues[spec.id] = spec.min ?? 0
|
||||
if (hasUnit(spec)) {
|
||||
createDisplayUnits[spec.id] = getParamDefaultUnit(spec)
|
||||
createDisplayValues[spec.id] = fromBaseUnit(spec.min ?? 0, createDisplayUnits[spec.id], getArgKey(spec))
|
||||
} else {
|
||||
createDisplayValues[spec.id] = spec.min ?? 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch { createSpecList.value = [] } finally { createSpecLoading.value = false }
|
||||
}
|
||||
|
||||
const onCreateNumberChange = (spec) => {
|
||||
if (hasUnit(spec)) {
|
||||
const argKey = getArgKey(spec)
|
||||
const unit = createDisplayUnits[spec.id]
|
||||
createSpecValues[spec.id] = Math.round(toBaseUnit(createDisplayValues[spec.id] || 0, unit, argKey))
|
||||
} else {
|
||||
createSpecValues[spec.id] = createDisplayValues[spec.id]
|
||||
}
|
||||
buildCreateArgsJson()
|
||||
}
|
||||
|
||||
const onCreateUnitChange = (spec, newUnit) => {
|
||||
const argKey = getArgKey(spec)
|
||||
const oldUnit = createDisplayUnits[spec.id]
|
||||
const oldDisplay = createDisplayValues[spec.id] || 0
|
||||
const baseValue = oldUnit ? toBaseUnit(oldDisplay, oldUnit, argKey) : oldDisplay
|
||||
createDisplayUnits[spec.id] = newUnit
|
||||
createDisplayValues[spec.id] = fromBaseUnit(baseValue, newUnit, argKey)
|
||||
createSpecValues[spec.id] = Math.round(baseValue)
|
||||
buildCreateArgsJson()
|
||||
}
|
||||
|
||||
const buildCreateArgsJson = () => {
|
||||
const result = []
|
||||
for (const spec of createSpecList.value) {
|
||||
@@ -127,11 +173,11 @@ const buildCreateArgsJson = () => {
|
||||
if (val === undefined || val === null || val === '') continue
|
||||
if (spec.type === 'select') {
|
||||
const attr = spec.attrs?.find(a => a.id === val)
|
||||
if (attr) result.push({ arg_id: spec.id, name: spec.name, attr_id: attr.id, value: attr.value, number: 0 })
|
||||
if (attr) result.push({ arg_id: spec.id, name: spec.name, attr_id: attr.id, value: attr.value, number: 0, key: getArgKey(spec) || undefined })
|
||||
} else if (spec.type === 'number') {
|
||||
result.push({ arg_id: spec.id, name: spec.name, attr_id: 0, value: '', number: val })
|
||||
result.push({ arg_id: spec.id, name: spec.name, attr_id: 0, value: '', number: val, key: getArgKey(spec) || undefined })
|
||||
} else {
|
||||
result.push({ arg_id: spec.id, name: spec.name, attr_id: 0, value: String(val), number: 0 })
|
||||
result.push({ arg_id: spec.id, name: spec.name, attr_id: 0, value: String(val), number: 0, key: getArgKey(spec) || undefined })
|
||||
}
|
||||
}
|
||||
createForm.args = result.length > 0 ? JSON.stringify(result) : ''
|
||||
@@ -171,6 +217,8 @@ const submitCreate = async () => {
|
||||
showCreate.value = false
|
||||
Object.assign(createForm, { name: '', note: '', index: 0, args: '' })
|
||||
for (const k in createSpecValues) delete createSpecValues[k]
|
||||
for (const k in createDisplayValues) delete createDisplayValues[k]
|
||||
for (const k in createDisplayUnits) delete createDisplayUnits[k]
|
||||
loadList()
|
||||
} else ElMessage.error(res?.data?.message || '创建失败')
|
||||
} catch { ElMessage.error('创建失败') } finally { createLoading.value = false }
|
||||
|
||||
Reference in New Issue
Block a user