修改商品分类价格配置

This commit is contained in:
lewis 2024-12-27 16:47:30 +08:00
parent c0ad55c89a
commit 47a95bd338
1 changed files with 176 additions and 145 deletions

View File

@ -18,14 +18,29 @@
<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">
<el-select v-model="scope.row.id" placeholder="请选择用户角色">
<el-option v-for="item in userShipList" :key="item.id" :label="item.title"
:value="item.id" />
</el-select>
</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> <template #suffix>%</template>
</el-input> </el-input>
</div> </template>
</div> </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>
<el-form-item label="排序" prop="sort"> <el-form-item label="排序" prop="sort">
@ -37,28 +52,31 @@
</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";
defineProps({
dictData: { dictData: {
type: Object as PropType<Record<string, any[]>>, type: Object as PropType<Record<string, any[]>>,
default: () => ({}), default: () => ({}),
}, },
}); });
const emit = defineEmits(["success", "close"]); const emit = defineEmits(["success", "close"]);
const formRef = shallowRef<FormInstance>(); const formRef = shallowRef<FormInstance>();
const popupRef = shallowRef<InstanceType<typeof Popup>>(); const popupRef = shallowRef<InstanceType<typeof Popup>>();
const mode = ref("add"); 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,
@ -71,22 +89,22 @@ const props = {
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: "",
@ -94,17 +112,10 @@ const formData = reactive({
pic: "", pic: "",
sort: "", sort: "",
price_rate: [] price_rate: []
}); });
// //
const formRules = reactive<any>({ const formRules = reactive<any>({
// pid: [
// {
// required: true,
// message: "ID",
// trigger: ["blur"],
// },
// ],
name: [ name: [
{ {
required: true, required: true,
@ -112,28 +123,28 @@ const formRules = reactive<any>({
trigger: ["blur"], 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 };
@ -142,22 +153,42 @@ const handleSubmit = async () => {
: 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 = () => {
apiUserShipLists({page_size: 999}).then(res => {
userShipList.value = res.lists
})
}
const addRow = () => {
formData.price_rate.push({
id: '',
title: '',
rate: ''
})
}
const deleteRow = (index) => {
formData.price_rate.splice(index, 1)
}
getUserShip()
defineExpose({
open, open,
setFormData, setFormData,
getDetail, getDetail,
}); });
</script> </script>