修改商品分类价格配置

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

@ -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>