新增库存生成功能,支持明细模式和批次模式两种存储模式,在SKU管理中实现动态表单字段的库存操作,同时在资产编辑中为租户ID为1的用户新增存储模式选择功能

This commit is contained in:
WUSIJIAN
2026-01-14 16:53:02 +08:00
parent 70a956febe
commit 31faa5d08b
3 changed files with 192 additions and 5 deletions

View File

@@ -70,6 +70,14 @@
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8" v-if="tenantId === '1'">
<el-form-item label="存储模式">
<el-radio-group v-model="ruleForm.stockMode" :disabled="isEdit">
<el-radio :value="1">明细模式</el-radio>
<el-radio :value="2">批次模式</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<!-- 分类属性值选择 -->
@@ -454,6 +462,7 @@ import { Plus, Delete } from '@element-plus/icons-vue';
import { getAsset, createAsset, updateAsset, uploadAssetImage } from '/@/api/assets/asset';
import { getCategoryTree, getCategory } from '/@/api/assets/category';
import { createFormDiff } from '/@/utils/diffUtils';
import { Session } from '/@/utils/storage';
import Editor from '/@/components/editor/index.vue';
import type { UploadFile, UploadUserFile, UploadRequestOptions } from 'element-plus';
@@ -495,6 +504,7 @@ interface RuleForm {
onlineTime: string;
offlineTime: string;
unlimitedStock: boolean;
stockMode: number;
physicalAssetConfig: {
shipping: {
deliveryMethod: string;
@@ -568,6 +578,9 @@ const fileAddressPrefix = ref('');
// 使用通用工具函数保存原始数据,用于最小化传参
const assetFormDiff = createFormDiff<Record<string, any>>();
// 获取租户ID
const tenantId = ref(Session.get('userInfo')?.tenantId || '');
const formatImageUrl = (url?: string) => {
if (!url) return '';
if (/^https?:\/\//i.test(url)) return url;
@@ -598,6 +611,7 @@ const getInitialForm = (): RuleForm => ({
onlineTime: '',
offlineTime: '',
unlimitedStock: false,
stockMode: 1,
physicalAssetConfig: {
shipping: {
deliveryMethod: 'express',
@@ -903,6 +917,7 @@ const openDialog = (row?: any, edit?: boolean) => {
ruleForm.onlineTime = data.onlineTime || '';
ruleForm.offlineTime = data.offlineTime || '';
ruleForm.unlimitedStock = data.unlimitedStock || false;
ruleForm.stockMode = data.stockMode || 1;
// 主图预览 (支持 imageUrl 和 fileURL)
const mainImg = data.imageUrl || data.fileURL;
@@ -1110,6 +1125,11 @@ const buildRequestBody = async (): Promise<any> => {
// 库存类型
body.unlimitedStock = ruleForm.unlimitedStock;
// 库存存储模式仅租户ID为1时提交
if (tenantId.value === '1') {
body.stockMode = ruleForm.stockMode;
}
// 主图 (已在上传时直接赋值给 ruleForm.mainImage)
if (ruleForm.mainImage) {
body.imageURL = ruleForm.mainImage;