修改商品分类价格配置
This commit is contained in:
parent
c0ad55c89a
commit
47a95bd338
|
@ -1,163 +1,194 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="edit-popup">
|
<div class="edit-popup">
|
||||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="800px" @confirm="handleSubmit"
|
<popup ref="popupRef" :title="popupTitle" :async="true" width="800px" @confirm="handleSubmit"
|
||||||
@close="handleClose">
|
@close="handleClose">
|
||||||
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
|
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
|
||||||
<el-form-item label="所属ID" prop="pid">
|
<el-form-item label="所属ID" prop="pid">
|
||||||
<!-- <el-input v-model="formData.pid" clearable placeholder="请输入所属ID" /> -->
|
<!-- <el-input v-model="formData.pid" clearable placeholder="请输入所属ID" /> -->
|
||||||
<el-cascader v-model="formData.pid" :props="props" :show-all-levels="false" style="width: 100%" />
|
<el-cascader v-model="formData.pid" :props="props" :show-all-levels="false" style="width: 100%" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="分类名称" prop="name">
|
<el-form-item label="分类名称" prop="name">
|
||||||
<el-input v-model="formData.name" clearable placeholder="请输入分类名称" />
|
<el-input v-model="formData.name" clearable placeholder="请输入分类名称" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="备注信息" prop="data">
|
<el-form-item label="备注信息" prop="data">
|
||||||
<el-input v-model="formData.data" clearable placeholder="请输入备注信息" />
|
<el-input v-model="formData.data" clearable placeholder="请输入备注信息" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="图片" prop="pic">
|
<el-form-item label="图片" prop="pic">
|
||||||
<material-picker v-model="formData.pic" />
|
<material-picker v-model="formData.pic" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="加价比例" prop="price_rate">
|
<el-form-item label="加价比例" prop="price_rate">
|
||||||
<div class="m-1 flex" v-for="item in formData.price_rate" :key="item.id">
|
<el-button @click="addRow" class="mb-2">添加选项</el-button>
|
||||||
<div style="display: inline-block; margin-right: 6px">{{ item.title }}:</div>
|
<el-table :data="formData.price_rate" style="width: 100%">
|
||||||
<div style="display: inline-block;">
|
<el-table-column label="用户角色" width="180">
|
||||||
<el-input v-model="item.rate" style="width: 80px">
|
<template v-slot="scope">
|
||||||
<template #suffix>%</template>
|
<el-select v-model="scope.row.id" placeholder="请选择用户角色">
|
||||||
</el-input>
|
<el-option v-for="item in userShipList" :key="item.id" :label="item.title"
|
||||||
</div>
|
:value="item.id" />
|
||||||
</div>
|
</el-select>
|
||||||
</el-form-item>
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="比例" width="180">
|
||||||
|
<template v-slot="scope">
|
||||||
|
<el-input v-model="scope.row.rate" style="width: 80px">
|
||||||
|
<template #suffix>%</template>
|
||||||
|
</el-input>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" width="100">
|
||||||
|
<template v-slot="scope">
|
||||||
|
<el-button type="text" @click="deleteRow(scope.$index)">删除</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="排序" prop="sort">
|
<el-form-item label="排序" prop="sort">
|
||||||
<el-input v-model="formData.sort" clearable placeholder="请输入排序" />
|
<el-input v-model="formData.sort" clearable placeholder="请输入排序" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</popup>
|
</popup>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup name="storeCategoryEdit">
|
<script lang="ts" setup name="storeCategoryEdit">
|
||||||
import type { FormInstance } from "element-plus";
|
import type { FormInstance } from "element-plus";
|
||||||
import Popup from "@/components/popup/index.vue";
|
import Popup from "@/components/popup/index.vue";
|
||||||
import {
|
import {
|
||||||
apiStoreCategoryAdd,
|
apiStoreCategoryAdd,
|
||||||
apiStoreCategoryEdit,
|
apiStoreCategoryEdit,
|
||||||
apiStoreCategoryDetail, apiStoreCategoryLists,
|
apiStoreCategoryDetail, apiStoreCategoryLists,
|
||||||
} from "@/api/store_category";
|
} from "@/api/store_category";
|
||||||
import { timeFormat } from "@/utils/util";
|
import { apiUserShipLists } from "@/api/user_ship"
|
||||||
import type { PropType } from "vue";
|
import { timeFormat } from "@/utils/util";
|
||||||
defineProps({
|
import type { PropType } from "vue";
|
||||||
dictData: {
|
defineProps({
|
||||||
type: Object as PropType<Record<string, any[]>>,
|
dictData: {
|
||||||
default: () => ({}),
|
type: Object as PropType<Record<string, any[]>>,
|
||||||
},
|
default: () => ({}),
|
||||||
});
|
},
|
||||||
const emit = defineEmits(["success", "close"]);
|
});
|
||||||
const formRef = shallowRef<FormInstance>();
|
const emit = defineEmits(["success", "close"]);
|
||||||
const popupRef = shallowRef<InstanceType<typeof Popup>>();
|
const formRef = shallowRef<FormInstance>();
|
||||||
const mode = ref("add");
|
const popupRef = shallowRef<InstanceType<typeof Popup>>();
|
||||||
|
const mode = ref("add");
|
||||||
|
const tableData = ref([])
|
||||||
|
const userShipList = ref([])
|
||||||
|
|
||||||
|
|
||||||
const props = {
|
const props = {
|
||||||
value: "id",
|
value: "id",
|
||||||
label: "name",
|
label: "name",
|
||||||
checkStrictly: true,
|
checkStrictly: true,
|
||||||
emitPath: false,
|
emitPath: false,
|
||||||
lazy: true,
|
lazy: true,
|
||||||
lazyLoad(node, resolve) {
|
lazyLoad(node, resolve) {
|
||||||
let pid = node.value || 0;
|
let pid = node.value || 0;
|
||||||
apiStoreCategoryLists({
|
apiStoreCategoryLists({
|
||||||
pid: pid,
|
pid: pid,
|
||||||
page_size: 10000,
|
page_size: 10000,
|
||||||
}).then((res) => {
|
}).then((res) => {
|
||||||
resolve(
|
resolve(
|
||||||
res.lists.map((item: any) => {
|
res.lists.map((item : any) => {
|
||||||
item.leaf = item.pid > 0;
|
item.leaf = item.pid > 0;
|
||||||
return item;
|
return item;
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
// 弹窗标题
|
// 弹窗标题
|
||||||
const popupTitle = computed(() => {
|
const popupTitle = computed(() => {
|
||||||
return mode.value == "edit" ? "编辑商品分类表" : "新增商品分类表";
|
return mode.value == "edit" ? "编辑商品分类表" : "新增商品分类表";
|
||||||
});
|
});
|
||||||
|
|
||||||
// 表单数据
|
// 表单数据
|
||||||
const formData = reactive({
|
const formData = reactive({
|
||||||
id: "",
|
id: "",
|
||||||
pid: 0,
|
pid: 0,
|
||||||
name: "",
|
name: "",
|
||||||
data: "",
|
data: "",
|
||||||
pic: "",
|
pic: "",
|
||||||
sort: "",
|
sort: "",
|
||||||
price_rate: []
|
price_rate: []
|
||||||
});
|
});
|
||||||
|
|
||||||
// 表单验证
|
// 表单验证
|
||||||
const formRules = reactive<any>({
|
const formRules = reactive<any>({
|
||||||
// pid: [
|
name: [
|
||||||
// {
|
{
|
||||||
// required: true,
|
required: true,
|
||||||
// message: "请输入所属ID",
|
message: "请输入分类名称",
|
||||||
// trigger: ["blur"],
|
trigger: ["blur"],
|
||||||
// },
|
},
|
||||||
// ],
|
],
|
||||||
name: [
|
});
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: "请输入分类名称",
|
|
||||||
trigger: ["blur"],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
// 获取详情
|
// 获取详情
|
||||||
const setFormData = async (data: Record<any, any>) => {
|
const setFormData = async (data : Record<any, any>) => {
|
||||||
for (const key in formData) {
|
for (const key in formData) {
|
||||||
if (data[key] != null && data[key] != undefined) {
|
if (data[key] != null && data[key] != undefined) {
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
formData[key] = data[key];
|
formData[key] = data[key];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const getDetail = async (row: Record<string, any>) => {
|
const getDetail = async (row : Record<string, any>) => {
|
||||||
const data = await apiStoreCategoryDetail({
|
const data = await apiStoreCategoryDetail({
|
||||||
id: row.id,
|
id: row.id,
|
||||||
});
|
});
|
||||||
setFormData(data);
|
setFormData(data);
|
||||||
};
|
};
|
||||||
|
|
||||||
// 提交按钮
|
// 提交按钮
|
||||||
const handleSubmit = async () => {
|
const handleSubmit = async () => {
|
||||||
await formRef.value?.validate();
|
await formRef.value?.validate();
|
||||||
let data = { ...formData };
|
let data = { ...formData };
|
||||||
|
|
||||||
mode.value == "edit"
|
mode.value == "edit"
|
||||||
? await apiStoreCategoryEdit(data)
|
? await apiStoreCategoryEdit(data)
|
||||||
: await apiStoreCategoryAdd(data);
|
: await apiStoreCategoryAdd(data);
|
||||||
popupRef.value?.close();
|
popupRef.value?.close();
|
||||||
emit("success");
|
emit("success");
|
||||||
};
|
};
|
||||||
|
|
||||||
//打开弹窗
|
//打开弹窗
|
||||||
const open = (type = "add") => {
|
const open = (type = "add") => {
|
||||||
mode.value = type;
|
mode.value = type;
|
||||||
popupRef.value?.open();
|
popupRef.value?.open();
|
||||||
};
|
};
|
||||||
|
|
||||||
// 关闭回调
|
// 关闭回调
|
||||||
const handleClose = () => {
|
const handleClose = () => {
|
||||||
emit("close");
|
emit("close");
|
||||||
};
|
};
|
||||||
|
|
||||||
defineExpose({
|
const getUserShip = () => {
|
||||||
open,
|
apiUserShipLists({page_size: 999}).then(res => {
|
||||||
setFormData,
|
userShipList.value = res.lists
|
||||||
getDetail,
|
})
|
||||||
});
|
}
|
||||||
|
|
||||||
|
const addRow = () => {
|
||||||
|
formData.price_rate.push({
|
||||||
|
id: '',
|
||||||
|
title: '',
|
||||||
|
rate: ''
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const deleteRow = (index) => {
|
||||||
|
formData.price_rate.splice(index, 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
getUserShip()
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
open,
|
||||||
|
setFormData,
|
||||||
|
getDetail,
|
||||||
|
});
|
||||||
</script>
|
</script>
|
Loading…
Reference in New Issue