|
|
@@ -3,7 +3,7 @@
|
|
|
<el-dialog
|
|
|
v-model="dialogVisible"
|
|
|
:title="title"
|
|
|
- width="30%"
|
|
|
+ width="65%"
|
|
|
:before-close="handleClose"
|
|
|
>
|
|
|
<div class="manage-dialog">
|
|
|
@@ -11,32 +11,154 @@
|
|
|
ref="ruleFormRef"
|
|
|
:model="ruleForm"
|
|
|
:rules="rules"
|
|
|
- label-width="100px"
|
|
|
+ label-width="120px"
|
|
|
>
|
|
|
<el-row :gutter="20">
|
|
|
- <el-col :span="20">
|
|
|
- <el-form-item label="人数限制1:" prop="goods_kind">
|
|
|
- <el-input-number
|
|
|
- v-model="ruleForm.goods_kind1"
|
|
|
- placeholder="请输入人数限制"
|
|
|
- :min="0"
|
|
|
- :max="100"
|
|
|
+ <el-col :span="10">
|
|
|
+ <el-form-item label="活动名:" prop="name">
|
|
|
+ <el-input
|
|
|
+ v-model="ruleForm.name"
|
|
|
+ placeholder="请输入活动名"
|
|
|
+
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
+ <el-col :span="10">
|
|
|
+ <el-form-item label="活动类型:" prop="type">
|
|
|
+ <el-input
|
|
|
+ v-model="ruleForm.type"
|
|
|
+ placeholder="请输入活动类型"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
</el-row>
|
|
|
+
|
|
|
<el-row :gutter="20">
|
|
|
- <el-col :span="20">
|
|
|
- <el-form-item label="人数限制2:" prop="goods_kind">
|
|
|
- <el-input-number
|
|
|
- v-model="ruleForm.goods_kind1"
|
|
|
- placeholder="请输入人数限制"
|
|
|
- :min="0"
|
|
|
- :max="100"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
+ <el-col :span="10">
|
|
|
+ <el-form-item label="费用(元):" prop="fee">
|
|
|
+ <el-input-number
|
|
|
+ v-model="ruleForm.fee"
|
|
|
+ placeholder="请输入费用(元)"
|
|
|
+ :min="0"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="10">
|
|
|
+ <el-form-item label="人数限制:" prop="entry_max">
|
|
|
+ <el-input-number
|
|
|
+ v-model="ruleForm.entry_max"
|
|
|
+ placeholder="请输入人数限制"
|
|
|
+ :min="0"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="10">
|
|
|
+ <el-form-item
|
|
|
+ label="缩略图"
|
|
|
+ style="width: 100%"
|
|
|
+ v-loading="coverLoading" prop="cover"
|
|
|
+ >
|
|
|
+ <div class="img-box" v-for="(item, i) in coverImgList" :key="i">
|
|
|
+ <img :src="item.url" alt="" />
|
|
|
+ <div class="occlusion">
|
|
|
+ <el-icon class="del" @click="coverRemove(i)">
|
|
|
+ <IEpDelete />
|
|
|
+ </el-icon>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <el-upload
|
|
|
+ action="#"
|
|
|
+ list-type="picture-card"
|
|
|
+ :auto-upload="false"
|
|
|
+ :show-file-list="false"
|
|
|
+ :file-list="coverImgList"
|
|
|
+ :on-change="coverOnChange"
|
|
|
+ >
|
|
|
+ <el-icon>
|
|
|
+ <IEpPlus />
|
|
|
+ </el-icon>
|
|
|
+ </el-upload>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="10">
|
|
|
+ <el-form-item
|
|
|
+ label="大图"
|
|
|
+ style="width: 100%"
|
|
|
+ v-loading="picLoading" prop="pic"
|
|
|
+ >
|
|
|
+ <div class="img-box" v-for="(item, i) in picImgList" :key="i">
|
|
|
+ <img :src="item.url" alt="" />
|
|
|
+ <div class="occlusion">
|
|
|
+ <el-icon class="del" @click="picRemove(i)">
|
|
|
+ <IEpDelete />
|
|
|
+ </el-icon>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <el-upload
|
|
|
+ action="#"
|
|
|
+ list-type="picture-card"
|
|
|
+ :auto-upload="false"
|
|
|
+ :show-file-list="false"
|
|
|
+ :file-list="picImgList"
|
|
|
+ :on-change="picOnChange"
|
|
|
+ >
|
|
|
+ <el-icon>
|
|
|
+ <IEpPlus />
|
|
|
+ </el-icon>
|
|
|
+ </el-upload>
|
|
|
+ </el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="10">
|
|
|
+ <el-form-item label="地点:" prop="address">
|
|
|
+ <el-input
|
|
|
+ v-model="ruleForm.address"
|
|
|
+ placeholder="请输入地点"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="10">
|
|
|
+ <el-form-item label="报名截止时间:" prop="entry_end">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="ruleForm.entry_end"
|
|
|
+ type="datetime"
|
|
|
+ format="YYYY-MM-DD HH:mm:ss"
|
|
|
+ value-format="YYYY-MM-DD HH:mm:ss"
|
|
|
+ placeholder="选择日期时间">
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="10">
|
|
|
+ <el-form-item label="活动开始时间:" prop="start_time">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="ruleForm.start_time"
|
|
|
+ type="datetime"
|
|
|
+ format="YYYY-MM-DD HH:mm:ss"
|
|
|
+ value-format="YYYY-MM-DD HH:mm:ss"
|
|
|
+ placeholder="选择日期时间">
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="10">
|
|
|
+ <el-form-item label="活动结束时间:" prop="end_time">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="ruleForm.end_time"
|
|
|
+ type="datetime"
|
|
|
+ format="YYYY-MM-DD HH:mm:ss"
|
|
|
+ value-format="YYYY-MM-DD HH:mm:ss"
|
|
|
+ placeholder="选择日期时间">
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-form-item label="活动详情" style="width: 83%" prop="end_time" >
|
|
|
+ <richPage ref="richPageRef" />
|
|
|
+ </el-form-item>
|
|
|
</el-form>
|
|
|
</div>
|
|
|
<template #footer>
|
|
|
@@ -48,20 +170,87 @@
|
|
|
</el-dialog>
|
|
|
</template>
|
|
|
<script setup>
|
|
|
-import {addApi, saveApi} from "@/plugins/api/shopping/manage";
|
|
|
+import {addApi, saveApi} from "@/plugins/api/activity/activity";
|
|
|
+import {uploadImgApi} from "@/plugins/api/upload";
|
|
|
|
|
|
let ruleForm = ref({});
|
|
|
let rules = {
|
|
|
- goods_name: [{required: true, message: "请输入商品名称", trigger: "blur"}],
|
|
|
- status: [{required: true, message: "选择状态", trigger: "blur"}],
|
|
|
- cateid: [{required: true, message: "选择商品分类", trigger: "blur"}],
|
|
|
- truck_type: [
|
|
|
- {required: true, message: "选择物流配送方式", trigger: "change"},
|
|
|
- ],
|
|
|
- truck_code: [{required: true, message: "选择运费模板", trigger: "change"}],
|
|
|
+ name: [{required: true, message: "请输入活动名称", trigger: "blur"}],
|
|
|
+ type: [{required: true, message: "请输入活动类型", trigger: "blur"}],
|
|
|
+ fee: [{required: true, message: "请输入报名费用", trigger: "blur"}],
|
|
|
+ entry_max: [{required: true, message: "请输入人数限制", trigger: "blur"}],
|
|
|
+ cover: [{required: true, message: "请选择缩略图", trigger: "blur"}],
|
|
|
+ pic: [{required: true, message: "请选择活动大图", trigger: "blur"}],
|
|
|
+ address: [{required: true, message: "请输入活动地点", trigger: "blur"}],
|
|
|
+
|
|
|
+ entry_end: [{required: true, message: "请输入截止时间", trigger: "blur"}],
|
|
|
+ start_time: [{required: true, message: "请输入开始时间", trigger: "blur"}],
|
|
|
+ end_time: [{required: true, message: "请输入结束时间", trigger: "blur"}],
|
|
|
+ content: [{required: true, message: "请输入活动描述", trigger: "blur"}],
|
|
|
+
|
|
|
};
|
|
|
let dialogVisible = ref(false);
|
|
|
|
|
|
+
|
|
|
+// 缩略图
|
|
|
+let coverLoading = ref(false);
|
|
|
+let coverImgList = ref([]);
|
|
|
+function coverOnChange(file) {
|
|
|
+ let formData = new FormData();
|
|
|
+ formData.append("file", file.raw);
|
|
|
+ coverLoading.value = true;
|
|
|
+ uploadImgApi(formData)
|
|
|
+ .then((data) => {
|
|
|
+ let obj = {
|
|
|
+ url: import.meta.env.VITE_APP_BASE_API + data.file_url,
|
|
|
+ };
|
|
|
+ if (coverImgList.value.length > 0) {
|
|
|
+ coverImgList.value = [];
|
|
|
+ coverImgList.value.push(obj);
|
|
|
+ } else {
|
|
|
+ coverImgList.value.push(obj);
|
|
|
+ }
|
|
|
+ ruleForm.value.cover = data.file_url;
|
|
|
+ coverLoading.value = false;
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ coverLoading.value = false;
|
|
|
+ });
|
|
|
+}
|
|
|
+function coverRemove(index) {
|
|
|
+ coverImgList.value.splice(index, 1);
|
|
|
+ ruleForm.value.cover = "";
|
|
|
+}
|
|
|
+// 大图
|
|
|
+let picLoading = ref(false);
|
|
|
+let picImgList = ref([]);
|
|
|
+function picOnChange(file) {
|
|
|
+ let formData = new FormData();
|
|
|
+ formData.append("file", file.raw);
|
|
|
+ picLoading.value = true;
|
|
|
+ uploadImgApi(formData)
|
|
|
+ .then((data) => {
|
|
|
+ let obj = {
|
|
|
+ url: import.meta.env.VITE_APP_BASE_API + data.file_url,
|
|
|
+ };
|
|
|
+ if (picImgList.value.length > 0) {
|
|
|
+ picImgList.value = [];
|
|
|
+ picImgList.value.push(obj);
|
|
|
+ } else {
|
|
|
+ picImgList.value.push(obj);
|
|
|
+ }
|
|
|
+ ruleForm.value.pic = data.file_url;
|
|
|
+ picLoading.value = false;
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ picLoading.value = false;
|
|
|
+ });
|
|
|
+}
|
|
|
+function picRemove(index) {
|
|
|
+ picImgList.value.splice(index, 1);
|
|
|
+ ruleForm.value.pic = "";
|
|
|
+}
|
|
|
+
|
|
|
function handleClose(done) {
|
|
|
// dialogVisible.value = false;
|
|
|
ElMessageBox.confirm("是否确定关闭此对话框?")
|
|
|
@@ -72,7 +261,8 @@ function handleClose(done) {
|
|
|
// catch error
|
|
|
});
|
|
|
}
|
|
|
-
|
|
|
+// 富文本
|
|
|
+let richPageRef = ref(null);
|
|
|
let title = ref("");
|
|
|
let ruleFormRef = ref(null);
|
|
|
function initFun(type, row) {
|
|
|
@@ -82,33 +272,62 @@ function initFun(type, row) {
|
|
|
if (type == "add") {
|
|
|
title.value = "新增";
|
|
|
ruleForm.value = {};
|
|
|
+ nextTick(() => {
|
|
|
+ richPageRef.value.valueHtml = "";
|
|
|
+ });
|
|
|
} else {
|
|
|
title.value = "编辑";
|
|
|
ruleForm.value = Object.assign({}, row);
|
|
|
+
|
|
|
+ // 商品封面
|
|
|
+ coverImgList.value = [];
|
|
|
+ if (row.cover) {
|
|
|
+ coverImgList.value.push({
|
|
|
+ url: imgSrc(row.cover),
|
|
|
+ });
|
|
|
+ }
|
|
|
+ // 商品封面
|
|
|
+ picImgList.value = [];
|
|
|
+ if (row.cover) {
|
|
|
+ picImgList.value.push({
|
|
|
+ url: imgSrc(row.pic),
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (row.content) {
|
|
|
+ nextTick(() => {
|
|
|
+ richPageRef.value.valueHtml = row.content;
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ nextTick(() => {
|
|
|
+ richPageRef.value.valueHtml = "";
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
dialogVisible.value = true;
|
|
|
}
|
|
|
+function imgSrc(path) {
|
|
|
+ return import.meta.env.VITE_APP_BASE_API + path;
|
|
|
+}
|
|
|
|
|
|
-const emit = defineEmits(["refreshList"]);
|
|
|
+const emit = defineEmits(["refreshTable"]);
|
|
|
|
|
|
function submit() {
|
|
|
+ ruleForm.value.content =richPageRef.value.valueHtml;
|
|
|
if (!ruleFormRef.value) return;
|
|
|
ruleFormRef.value.validate((valid, fields) => {
|
|
|
if (valid) {
|
|
|
let obj = Object.assign({}, ruleForm.value);
|
|
|
if (!ruleForm.value.id) {
|
|
|
-
|
|
|
addApi(obj).then((data) => {
|
|
|
ElMessage.success("新增成功!");
|
|
|
dialogVisible.value = false;
|
|
|
- emit("refreshList");
|
|
|
+ emit("refreshTable");
|
|
|
});
|
|
|
} else {
|
|
|
- obj.data_specs = JSON.parse(obj.data_specs);
|
|
|
saveApi(obj).then((data) => {
|
|
|
ElMessage.success("修改成功!");
|
|
|
dialogVisible.value = false;
|
|
|
- emit("refreshList");
|
|
|
+ emit("refreshTable");
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
@@ -116,8 +335,6 @@ function submit() {
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
-
|
|
|
//
|
|
|
defineExpose({
|
|
|
initFun,
|