添加商品列表接口及优化多处细节

This commit is contained in:
钊钊 2024-12-24 16:06:56 +08:00
parent b0665d6d40
commit cae5ba5cd5
14 changed files with 193 additions and 106 deletions

View File

@ -61,3 +61,14 @@ export const delProduct = (id: string | number | Array<string | number>) => {
method: 'delete' method: 'delete'
}); });
}; };
/**
*
* @returns
*/
export const productAll = () => {
return request({
url: '/manage/product/all',
method: 'get'
});
};

View File

@ -4,6 +4,7 @@ export interface ArticleVO {
/** /**
* ID/ID/ID * ID/ID/ID
*/ */
name: string;
id: string | number; id: string | number;
tagId_copy: string[] | number[]; tagId_copy: string[] | number[];
region?: string; region?: string;

View File

@ -1,7 +1,7 @@
<!-- 笔记列表 --> <!-- 笔记列表 -->
<template> <template>
<div> <div>
<el-table :height="props.autoTableHeight" v-loading="loading" :data="tableList" <el-table :height="props.autoTableHeight" v-loading="loading" :data="props.articleList"
@selection-change="handleSelectionChange" border> @selection-change="handleSelectionChange" border>
<el-table-column type="selection" width="55" align="center" v-if="props.parentName != 'dyUser'" /> <el-table-column type="selection" width="55" align="center" v-if="props.parentName != 'dyUser'" />
<!-- <el-table-column label="ID" align="center" prop="id" v-if="props.parentName != 'dyUser'" /> --> <!-- <el-table-column label="ID" align="center" prop="id" v-if="props.parentName != 'dyUser'" /> -->
@ -91,6 +91,10 @@ import { listByTagIdNotebook } from '@/api/manage/scenic';
// //
const props = defineProps({ const props = defineProps({
articleList: {
type: Array,
default: () => []
},
noteBookTagIds: { noteBookTagIds: {
type: string, type: string,
default: () => '' default: () => ''
@ -130,12 +134,12 @@ const cancel = () => {
noteDetail.visible = false; noteDetail.visible = false;
} }
// //
const getTableList = async () => { // const getTableList = async () => {
loading.value = true; // loading.value = true;
let res = await listByTagIdNotebook(queryParams).finally(() => (loading.value = false)); // let res = await listByTagIdNotebook(queryParams).finally(() => (loading.value = false));
tableList.value = res.rows; // tableList.value = res.rows;
total.value = res.total; // total.value = res.total;
}; // };
// //
const handleDetail = (row: any) => { const handleDetail = (row: any) => {
noteDetail.visible = true; noteDetail.visible = true;

View File

@ -32,6 +32,7 @@ declare global {
* *
*/ */
rowData?: any; rowData?: any;
type: string;
} }
declare interface UploadOption { declare interface UploadOption {

View File

@ -27,10 +27,10 @@
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
<el-button type="primary" plain icon="Plus" @click="handleAdd" <el-button type="primary" plain icon="Plus" @click="handleAdd"
v-hasPermi="['manage:article:add']">新增</el-button> v-hasPermi="['manage:article:add']">新增</el-button>
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" <!-- <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()"
v-hasPermi="['manage:article:edit']">修改</el-button> v-hasPermi="['manage:article:edit']">修改</el-button>
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"
v-hasPermi="['manage:article:remove']">删除</el-button> v-hasPermi="['manage:article:remove']">删除</el-button> -->
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
@ -39,15 +39,15 @@
<el-table v-loading="loading" :height="autoTableHeight" border :data="articleList" <el-table v-loading="loading" :height="autoTableHeight" border :data="articleList"
@selection-change="handleSelectionChange"> @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <!-- <el-table-column type="selection" width="55" align="center" /> -->
<el-table-column label="ID" align="center" prop="id" v-if="true" width="180px" /> <el-table-column label="ID" align="center" prop="id" v-if="true" width="180px" />
<el-table-column label="标题" align="center" prop="title" width="300px" /> <el-table-column label="标题" align="center" prop="title" />
<el-table-column label="内容" align="center" prop="content" width="80px"> <el-table-column label="内容" align="center" prop="content" width="80px">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleDetail(scope.row)">查看</el-button> <el-button link type="primary" @click="handleDetail(scope.row)">查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="标签" align="center" prop="tagId" width="180px"> <el-table-column label="标签" align="center" prop="tagId">
<template #default="scope"> <template #default="scope">
<span>{{ formatTag(scope.row.tagId) }}</span> <span>{{ formatTag(scope.row.tagId) }}</span>
</template> </template>
@ -56,9 +56,9 @@
<el-table-column label="评论数" align="center" prop="commentCount" width="80px" /> <el-table-column label="评论数" align="center" prop="commentCount" width="80px" />
<el-table-column label="状态" align="center" prop="status" width="90px"> <el-table-column label="状态" align="center" prop="status" width="90px">
<template #default="scope"> <template #default="scope">
<el-tag v-if="scope.row.status === 0" type="info">未发布</el-tag> <el-tag v-if="scope.row.status == 0" type="info">未发布</el-tag>
<el-tag v-if="scope.row.status === 1" type="success">审核中</el-tag> <el-tag v-if="scope.row.status == 1" type="success">审核中</el-tag>
<el-tag v-if="scope.row.status === 2" type="success">已发布</el-tag> <el-tag v-if="scope.row.status == 2" type="success">已发布</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="更新时间" align="center" prop="updateTime" width="120"> <el-table-column label="更新时间" align="center" prop="updateTime" width="120">
@ -69,15 +69,15 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160px"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160px">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" v-if="scope.row.status === 0" @click="updateRow(scope.row,'2')" <el-button link type="primary" v-if="scope.row.status == 0" @click="updateRow(scope.row,'2')"
v-hasPermi="['manage:article:edit']">发布</el-button> v-hasPermi="['manage:article:edit']">发布</el-button>
<el-button link type="primary" v-if="scope.row.status === 2" @click="updateRow(scope.row,'0')" <el-button link type="primary" v-if="scope.row.status == 2" @click="updateRow(scope.row,'0')"
v-hasPermi="['manage:article:edit']">撤销发布</el-button> v-hasPermi="['manage:article:edit']">撤销发布</el-button>
<el-tooltip content="修改" placement="top" v-if="scope.row.status === 0"> <el-tooltip content="修改" placement="top" v-if="scope.row.status == 0">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
v-hasPermi="['manage:article:edit']"></el-button> v-hasPermi="['manage:article:edit']"></el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top" v-if="scope.row.status === 0"> <el-tooltip content="删除" placement="top" v-if="scope.row.status == 0">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
v-hasPermi="['manage:article:remove']"></el-button> v-hasPermi="['manage:article:remove']"></el-button>
</el-tooltip> </el-tooltip>
@ -151,7 +151,8 @@ const articleFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({ const dialog = reactive<DialogOption>({
visible: false, visible: false,
title: '' title: '',
type:''
}); });
const initFormData: ArticleForm = { const initFormData: ArticleForm = {
@ -213,7 +214,7 @@ const cancel = () => {
// //
const getTag = async () => { const getTag = async () => {
const res = await tagAll(); const res = await tagAll();
sys_user_tagOptions.value = res; // Object.assign(sys_user_tagOptions.value, res);
}; };
/** /**
* 标签格式化 * 标签格式化

View File

@ -14,7 +14,7 @@
<el-input class="inputWidth" v-model="queryParams.phone" placeholder="请输入手机号码" clearable <el-input class="inputWidth" v-model="queryParams.phone" placeholder="请输入手机号码" clearable
@keyup.enter="handleQuery" /> @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="用户性别" prop="sex"> <el-form-item label="性别" prop="sex">
<el-select class="inputWidth" v-model="queryParams.sex" placeholder="请选择用户性别" clearable> <el-select class="inputWidth" v-model="queryParams.sex" placeholder="请选择用户性别" clearable>
<el-option v-for="dict in sys_user_sex" :key="dict.value" :label="dict.label" :value="dict.value" /> <el-option v-for="dict in sys_user_sex" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select> </el-select>
@ -25,8 +25,11 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="会员等级" prop="leveId"> <el-form-item label="会员等级" prop="leveId">
<el-input class="inputWidth" v-model="queryParams.leveId" placeholder="请输入会员等级" clearable <!-- <el-input class="inputWidth" v-model="queryParams.leveId" placeholder="请输入会员等级" clearable
@keyup.enter="handleQuery" /> @keyup.enter="handleQuery" /> -->
<el-select class="inputWidth" v-model="queryParams.leveId" placeholder="请选择会员等级" clearable>
<el-option v-for="dict in levelList" :key="dict.id" :label="dict.levelName" :value="dict.id" />
</el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@ -44,14 +47,14 @@
<el-table :height="autoTableHeight" v-loading="loading" :data="dyUserList" @selection-change="handleSelectionChange" <el-table :height="autoTableHeight" v-loading="loading" :data="dyUserList" @selection-change="handleSelectionChange"
style="width: 100%" border> style="width: 100%" border>
<el-table-column fixed type="selection" width="55" align="center" /> <!-- <el-table-column fixed type="selection" width="55" align="center" /> -->
<el-table-column fixed label="用户ID" align="center" prop="id" /> <el-table-column fixed label="用户ID" align="center" prop="id" />
<el-table-column fixed label="帐号状态" align="center" prop="status"> <el-table-column fixed label="帐号状态" align="center" prop="status">
<template #default="scope"> <template #default="scope">
<dict-tag :options="dy_user_status" :value="scope.row.status" /> <dict-tag :options="dy_user_status" :value="scope.row.status" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed label="会员等级" align="center" prop="levelId" /> <el-table-column fixed label="会员等级" align="center" prop="levelName" />
<el-table-column fixed label="昵称" align="center" prop="nickName" /> <el-table-column fixed label="昵称" align="center" prop="nickName" />
<el-table-column label="用户性别" align="center" prop="sex"> <el-table-column label="用户性别" align="center" prop="sex">
<template #default="scope"> <template #default="scope">
@ -96,7 +99,7 @@
</el-table-column> </el-table-column>
<el-table-column width="80" label="关注的人" align="center" prop="" /> <el-table-column width="80" label="关注的人" align="center" prop="" />
<el-table-column width="80" label="粉丝数" align="center" prop="" /> <el-table-column width="80" label="粉丝数" align="center" prop="" />
<el-table-column width="90" label="点亮的景点" align="center" prop=""> <el-table-column width="90" label="到过的景点" align="center" prop="">
<template #default="scope"> <template #default="scope">
<span style="color: dodgerblue; cursor: pointer; text-decoration: underline" <span style="color: dodgerblue; cursor: pointer; text-decoration: underline"
@click="openScenicListDialog(scope.row)">20</span> @click="openScenicListDialog(scope.row)">20</span>
@ -178,8 +181,11 @@
</template> </template>
</el-dialog> </el-dialog>
<!-- 笔记列表 --> <!-- 笔记列表 -->
<el-dialog title="发布的笔记" v-model="noteListDialog" width="1200px" append-to-body> <el-dialog title="发布的笔记" v-model="noteListDialog.visible" width="1200px" append-to-body>
<noteList :articleList="articleList" :autoTableHeight="300" parentName="dyUser"></noteList> <noteList :articleList="noteListDialog.articleList" :autoTableHeight="300" parentName="dyUser"></noteList>
<pagination v-show="noteListDialog.total > 0" :total="noteListDialog.total"
v-model:page="noteListDialog.params.pageNum" v-model:limit="noteListDialog.params.pageSize"
@pagination="openNoteListDialog" />
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button @click="cancel"> </el-button> <el-button @click="cancel"> </el-button>
@ -195,7 +201,7 @@
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<!-- 点亮的景点 --> <!-- 到过的景点 -->
<el-dialog title="点亮的景点" v-model="scenicListDialog" width="500px" append-to-body> <el-dialog title="点亮的景点" v-model="scenicListDialog" width="500px" append-to-body>
<el-table :height="300" v-loading="loading" :data="scenicList" @selection-change="handleSelectionChange" border> <el-table :height="300" v-loading="loading" :data="scenicList" @selection-change="handleSelectionChange" border>
<el-table-column label="景点名称" align="center" fixed prop="" /> <el-table-column label="景点名称" align="center" fixed prop="" />
@ -259,6 +265,8 @@
</template> </template>
<script setup name="DyUser" lang="ts"> <script setup name="DyUser" lang="ts">
import { listUserLevel } from '@/api/manage/userLevel';
import { listNotebook} from '@/api/manage/notebook';
import { listDyUser, getDyUser, delDyUser, addDyUser, updateDyUser } from '@/api/manage/dyUser'; import { listDyUser, getDyUser, delDyUser, addDyUser, updateDyUser } from '@/api/manage/dyUser';
import { DyUserVO, DyUserQuery, DyUserForm } from '@/api/manage/dyUser/types'; import { DyUserVO, DyUserQuery, DyUserForm } from '@/api/manage/dyUser/types';
@ -268,7 +276,6 @@ const { dy_user_ban_days, dy_user_status, sys_user_sex, dy_user_ban_mode } = toR
); );
const orderLists = ref([]); // const orderLists = ref([]); //
const scenicList = ref([]); // const scenicList = ref([]); //
const articleList = ref([]); //
const partyLists = ref([]); // const partyLists = ref([]); //
const postcardList = ref([]); // const postcardList = ref([]); //
const dyUserList = ref<DyUserVO[]>([]); const dyUserList = ref<DyUserVO[]>([]);
@ -287,7 +294,8 @@ const dyUserFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({ const dialog = reactive<DialogOption>({
rowData: {} as DyUserVO, rowData: {} as DyUserVO,
visible: false, visible: false,
title: '' title: '',
type:'',
}); });
const initFormData: DyUserForm = { const initFormData: DyUserForm = {
id: undefined, id: undefined,
@ -348,6 +356,7 @@ const data = reactive<PageData<DyUserForm, DyUserQuery>>({
const { queryParams, form, rules } = toRefs(data); const { queryParams, form, rules } = toRefs(data);
onMounted(() => { onMounted(() => {
getList(); getList();
getListUserLevel();
nextTick(() => { nextTick(() => {
autoTableHeight.value = proxy?.autoTableHeight(); autoTableHeight.value = proxy?.autoTableHeight();
}); });
@ -364,11 +373,19 @@ const getList = async () => {
loading.value = false; loading.value = false;
}; };
/**
* 获取用户等级列表
*/
const levelList = ref([]);
const getListUserLevel = async () => {
const res = await listUserLevel({pageNum:1,pageSize:999});
levelList.value = res.rows;
}
/** 取消按钮 */ /** 取消按钮 */
const cancel = () => { const cancel = () => {
reset(); reset();
dialog.visible = false; dialog.visible = false;
noteListDialog.value = false; noteListDialog.visible = false;
partyListDialog.value = false; partyListDialog.value = false;
scenicListDialog.value = false; scenicListDialog.value = false;
cityListDialog.value = false; cityListDialog.value = false;
@ -449,9 +466,23 @@ const openbanned = async (row: DyUserVO) => {
* 打开笔记列表弹层 * 打开笔记列表弹层
* @param row * @param row
*/ */
const noteListDialog = ref(false); const noteListDialog = reactive({
const openNoteListDialog = async (row: DyUserVO) => { visible: false,
noteListDialog.value = true; total: 0,
articleList:[],
params:{
userId: null,
pageNum: 1,
pageSize: 10,
}
});
// ,
const openNoteListDialog = async (row?: DyUserVO) => {
noteListDialog.params.userId = row?.id;
let res=await listNotebook(noteListDialog.params);
noteListDialog.articleList=res.rows;
noteListDialog.total=res.total;
noteListDialog.visible = true;
}; };
/** /**
* 打开活动列表弹层 * 打开活动列表弹层

View File

@ -1,3 +1,4 @@
<!-- 每日任务 大转盘 -->
<template> <template>
<div class="p-2"> <div class="p-2">
<!-- <transition :enter-active-class="proxy?.animate.searchAnimate.enter" <!-- <transition :enter-active-class="proxy?.animate.searchAnimate.enter"
@ -31,7 +32,7 @@
</el-table-column> </el-table-column>
<el-table-column label="详情" align="center" prop=""> <el-table-column label="详情" align="center" prop="">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleAward(scope.row)">查看详情</el-button> <el-button link type="primary" @click="handleUpdate(scope.row,'preview')">查看详情</el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="状态" align="center" prop="status"> <el-table-column label="状态" align="center" prop="status">
@ -49,7 +50,7 @@
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-tooltip content="修改" placement="top"> <el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row,'edit')"
v-hasPermi="['manage:mkConfig:edit']"></el-button> v-hasPermi="['manage:mkConfig:edit']"></el-button>
</el-tooltip> </el-tooltip>
<el-button link type="primary" @click="handleStatus(scope.row,'1')" v-if="scope.row.status == 0" <el-button link type="primary" @click="handleStatus(scope.row,'1')" v-if="scope.row.status == 0"
@ -67,7 +68,8 @@
<div v-if="queryParams.type == '0'" style="height: 400px;overflow-y: auto;"> <div v-if="queryParams.type == '0'" style="height: 400px;overflow-y: auto;">
<el-form ref="mkConfigFormRef" :model="form" :rules="rules" label-width="110px"> <el-form ref="mkConfigFormRef" :model="form" :rules="rules" label-width="110px">
<el-form-item label="每日封顶积分:" prop="name"> <el-form-item label="每日封顶积分:" prop="name">
<el-input style="width: 150px;" type="number" v-model="form.dailyConfig.dailyLimit" placeholder="请输入积分"> <el-input style="width: 150px;" type="number" :disabled="dialog.type == 'preview'"
v-model="form.dailyConfig.dailyLimit" placeholder="请输入积分">
<template #append></template> <template #append></template>
</el-input> </el-input>
</el-form-item> </el-form-item>
@ -75,25 +77,26 @@
style="margin-bottom: 10px; margin-right: 5px !important"> style="margin-bottom: 10px; margin-right: 5px !important">
<el-col :span="11"> <el-col :span="11">
<el-form-item :label="`奖励${index + 1}`" prop=""> <el-form-item :label="`奖励${index + 1}`" prop="">
<el-select v-model="item.rewardType" placeholder="请选择" style="width: 150px"> <el-select v-model="item.rewardType" placeholder="请选择" style="width: 150px"
<el-option label="服务" :value="1"></el-option> :disabled="dialog.type == 'preview'">
<el-option label="商品" :value="2"></el-option> <!-- <el-option v-for="item in productAllList" :key="item.id" :label="item.productName" :value="item.id" /> -->
<el-option label="商品2" :value="3"></el-option> <el-option v-for="dict in dy_mk_config_reward" :key="dict.value" :label="dict.label"
:value="parseInt(dict.value)"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="11"> <el-col :span="11">
<el-form-item label="所需积分:"> <el-form-item label="所需积分:">
<el-input style="width: 100px;" v-model="item.rewardNum" type="number" placeholder="请输入积分" <el-input style="width: 100px;" v-model="item.rewardNum" type="number" placeholder="请输入积分"
class="no-arrows"> :disabled="dialog.type == 'preview'" class="no-arrows">
</el-input> </el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="2"> <el-col :span="2">
<vxe-button mode="text" v-if="index == 0" icon="vxe-icon-add" class="handle_btn add_btn" <vxe-button mode="text" v-if="index == 0&&dialog.type == 'edit'" icon="vxe-icon-add"
@click="amendDailyReward(index,'add')"></vxe-button> class="handle_btn add_btn" @click="amendDailyReward(index,'add')"></vxe-button>
<vxe-button mode="text" v-else icon="vxe-icon-minus" class="handle_btn rem_btn" <vxe-button mode="text" v-else-if="index!=0&&dialog.type == 'edit'" icon="vxe-icon-minus"
@click="amendDailyReward(index,'remove')"></vxe-button> class="handle_btn rem_btn" @click="amendDailyReward(index,'remove')"></vxe-button>
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
@ -105,40 +108,41 @@
style="margin-bottom: 10px; margin-right: 5px !important"> style="margin-bottom: 10px; margin-right: 5px !important">
<el-col :span="14"> <el-col :span="14">
<el-form-item :label="`奖品${index + 1}`" prop=""> <el-form-item :label="`奖品${index + 1}`" prop="">
<el-select v-model="item.rewardType" placeholder="请选择" style="width: 120px"> <el-select v-model="item.rewardType" placeholder="请选择" style="width: 120px"
<el-option label="服务" :value="1"></el-option> :disabled="dialog.type == 'preview'" clearable>
<el-option label="商品" :value="2"></el-option> <el-option v-for="dict in dy_mk_config_reward" :key="dict.value" :label="dict.label"
<el-option label="商品2" :value="3"></el-option> :value="parseInt(dict.value)" />
</el-select> </el-select>
<span style="margin: 0px 10px;"> + </span> <span style="margin: 0px 10px;"> + </span>
<el-select v-model="item.goodsId" placeholder="请选择" style="width: 120px"> <el-select v-model="item.goodsId" placeholder="请选择" style="width: 120px"
<el-option label="服务" :value="1"></el-option> :disabled="dialog.type == 'preview'" clearable>
<el-option label="商品" :value="2"></el-option> <el-option v-for="item in productAllList" :key="item.id" :label="item.productName" :value="item.id" />
<el-option label="商品2" :value="3"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="获奖概率:" label-width="95px"> <el-form-item label="获奖概率:" label-width="95px">
<el-input style="width: 100px;" v-model="item.rewardNum" type="number" placeholder="请输入概率" <el-input style="width: 100px;" v-model="item.rewardNum" type="number" placeholder="请输入概率"
class="no-arrows"> :disabled="dialog.type == 'preview'" class="no-arrows">
<template #append>%</template> <template #append>%</template>
</el-input> </el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="2"> <el-col :span="2">
<vxe-button mode="text" v-if="index == 0" icon="vxe-icon-add" class="handle_btn add_btn" <vxe-button mode="text" v-if="index == 0&&dialog.type == 'edit'" icon="vxe-icon-add"
@click="amendRoundConfig(index,'add')"></vxe-button> class="handle_btn add_btn" @click="amendRoundConfig(index,'add')"></vxe-button>
<vxe-button mode="text" v-else icon="vxe-icon-minus" class="handle_btn rem_btn" <vxe-button mode="text" v-else-if="index == 0&&dialog.type == 'edit'" icon="vxe-icon-minus"
@click="amendRoundConfig(index,'remove')"></vxe-button> class="handle_btn rem_btn" @click="amendRoundConfig(index,'remove')"></vxe-button>
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
</div> </div>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button> <el-button v-if="dialog.type == 'edit'" :loading="buttonLoading" type="primary" @click="submitForm">
<el-button @click="cancel"> </el-button> </el-button>
<el-button v-if="dialog.type == 'edit'" @click="cancel"> </el-button>
<el-button v-if="dialog.type == 'preview'" @click="cancel"> </el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
@ -209,6 +213,8 @@
</template> </template>
<script setup name="MkConfig" lang="ts"> <script setup name="MkConfig" lang="ts">
import { productAll } from '@/api/manage/product';
import { listMkConfig, getMkConfig, delMkConfig, addMkConfig, updateMkConfig,mkRewardUserList } from '@/api/manage/mkConfig'; import { listMkConfig, getMkConfig, delMkConfig, addMkConfig, updateMkConfig,mkRewardUserList } from '@/api/manage/mkConfig';
import { MkConfigVO, MkConfigQuery, MkConfigForm } from '@/api/manage/mkConfig/types'; import { MkConfigVO, MkConfigQuery, MkConfigForm } from '@/api/manage/mkConfig/types';
import { getProduct } from '@/api/manage/product'; import { getProduct } from '@/api/manage/product';
@ -218,9 +224,9 @@ onMounted(() => {
getList(); getList();
getlistVendor(); // getlistVendor(); //
getProductCategoryList(); // getProductCategoryList(); //
getProductAllList(); //
}); });
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const mkConfigList = ref<MkConfigVO[]>([]); const mkConfigList = ref<MkConfigVO[]>([]);
const buttonLoading = ref(false); const buttonLoading = ref(false);
const loading = ref(true); const loading = ref(true);
@ -238,7 +244,8 @@ const mkReward= reactive({
}) })
const dialog = reactive<DialogOption>({ const dialog = reactive<DialogOption>({
visible: false, visible: false,
title: '' title: '',
type:''
}); });
const mkRewardUserParams = reactive({ const mkRewardUserParams = reactive({
pageNum: 1, pageNum: 1,
@ -287,6 +294,9 @@ const data = reactive<PageData<MkConfigForm, MkConfigQuery>>({
} }
}); });
const { queryParams, form, rules } = toRefs(data); const { queryParams, form, rules } = toRefs(data);
const { dy_mk_config_reward } = toRefs<any>(
proxy?.useDict('dy_mk_config_reward')
);
// ================================================ // ================================================
let router = useRouter(); let router = useRouter();
watch( watch(
@ -352,14 +362,15 @@ const handleAdd = () => {
} }
/** 修改按钮操作 */ /** 修改按钮操作 */
const handleUpdate = async (row?: MkConfigVO) => { const handleUpdate = async (row?: MkConfigVO,type?:string) => {
reset(); reset();
const _id = row?.id const _id = row?.id
const res = await getMkConfig(_id); const res = await getMkConfig(_id);
Object.assign(form.value, res.data); Object.assign(form.value, res.data);
form.value.id=_id; form.value.id=_id;
dialog.title = `${queryParams.value.type == '1' ? '大转盘' : '每日任务'}`; dialog.title = `${queryParams.value.type == '1' ? '大转盘' : '每日积分奖励'}`;
dialog.visible = true; dialog.visible = true;
dialog.type = type;
} }
/** 提交按钮 */ /** 提交按钮 */
@ -489,6 +500,15 @@ const getlistVendor = async () => {
let res = await listVendor({ pageNum: 1, pageSize: 9999 }); let res = await listVendor({ pageNum: 1, pageSize: 9999 });
listVendorList.value = res.rows; listVendorList.value = res.rows;
} }
/**
* 商品列表 下拉选择
*/
const productAllList=ref([]);
const getProductAllList=()=>{
productAll().then(res=>{
Object.assign(productAllList.value,res.data)
})
}
/** /**
* 格式化商品类别名称 * 格式化商品类别名称
* @param row * @param row

View File

@ -1,3 +1,4 @@
<!-- 明信片 -->
<template> <template>
<div class="p-2"> <div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" <transition :enter-active-class="proxy?.animate.searchAnimate.enter"
@ -9,9 +10,13 @@
<el-input class="inputWidth" v-model="queryParams.name" placeholder="请输入明信片类别名称" clearable <el-input class="inputWidth" v-model="queryParams.name" placeholder="请输入明信片类别名称" clearable
@keyup.enter="handleQuery" /> @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="排序" prop="sortNum"> <el-form-item label="状态" prop="status">
<el-input class="inputWidth" v-model="queryParams.sortNum" placeholder="请输入排序" clearable <!-- <el-input class="inputWidth" v-model="queryParams.sortNum" placeholder="请输入排序" clearable
@keyup.enter="handleQuery" /> @keyup.enter="handleQuery" /> -->
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable class="inputWidth">
<el-option label="已上架" :value="1"></el-option>
<el-option label="未上架" :value="0"></el-option>
</el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@ -107,12 +112,14 @@
<el-table v-loading="loading" border :data="postcardInfo.dataList" :height="300"> <el-table v-loading="loading" border :data="postcardInfo.dataList" :height="300">
<el-table-column label="明信片" align="center" prop="name"> <el-table-column label="明信片" align="center" prop="name">
<template #default="scope"> <template #default="scope">
<el-image :src="scope.row.pic" style="width: 100px; height: 100px" fit="cover" /> <el-image :src="scope.row.pic" style="width: 50px; height: 50px" fit="cover" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="打卡人数" align="center" prop="clockInCount" /> <el-table-column label="打卡人数" align="center" prop="clockInCount" />
<el-table-column label="邮寄人数" align="center" prop="mailingCount" /> <el-table-column label="邮寄人数" align="center" prop="mailingCount" />
</el-table> </el-table>
<pagination v-show="postcardInfo.params.total > 0" :total="postcardInfo.params.total"
v-model:page="postcardInfo.params.pageNum" v-model:limit="postcardInfo.params.pageSize" @pagination="getList" />
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button @click="cancel"> </el-button> <el-button @click="cancel"> </el-button>
@ -145,7 +152,8 @@ const mkPostcardFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({ const dialog = reactive<DialogOption>({
visible: false, visible: false,
title: '' title: '',
type: '',
}); });
const initFormData: MkPostcardForm = { const initFormData: MkPostcardForm = {
@ -211,6 +219,7 @@ const cancel = () => {
reset(); reset();
dialog.visible = false; dialog.visible = false;
postcardInfo.visible=false; postcardInfo.visible=false;
postcardInfo.params.pageNum=1;
} }
/** 表单重置 */ /** 表单重置 */
@ -323,13 +332,21 @@ const formatterArticleId = (id: string) => {
const postcardInfo=reactive({ const postcardInfo=reactive({
visible:false, visible:false,
dataList:[], dataList:[],
title:'' title:'',
params:{
postcardId:null,
total:0,
pageNum:1,
pageSize:10,
}
}) })
const handlePostcard = async (row:MkPostcardVO)=>{ const handlePostcard = async (row:MkPostcardVO)=>{
postcardInfo.title=row.name+'明信片'; postcardInfo.title=row.name+'明信片';
postcardInfo.visible=true; postcardInfo.visible=true;
let res=await listMkPostcardDetail({pageNum:1,pageSize:1000}); postcardInfo.params.postcardId=row.id;
let res=await listMkPostcardDetail(postcardInfo.params);
postcardInfo.dataList=res.rows;
postcardInfo.params.total=res.total;
} }
onMounted(() => { onMounted(() => {
getList(); getList();

View File

@ -106,7 +106,6 @@
<script setup name="Orders" lang="ts"> <script setup name="Orders" lang="ts">
import { listOrders, getOrders, delOrders, addOrders, updateOrders } from '@/api/manage/orders'; import { listOrders, getOrders, delOrders, addOrders, updateOrders } from '@/api/manage/orders';
import { OrdersVO, OrdersQuery, OrdersForm } from '@/api/manage/orders/types'; import { OrdersVO, OrdersQuery, OrdersForm } from '@/api/manage/orders/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { dy_order_status } = toRefs<any>(proxy?.useDict('dy_order_status')); const { dy_order_status } = toRefs<any>(proxy?.useDict('dy_order_status'));
const autoTableHeight = ref(750); const autoTableHeight = ref(750);
@ -118,15 +117,13 @@ const ids = ref<Array<string | number>>([]);
const single = ref(true); const single = ref(true);
const multiple = ref(true); const multiple = ref(true);
const total = ref(0); const total = ref(0);
const queryFormRef = ref<ElFormInstance>(); const queryFormRef = ref<ElFormInstance>();
const ordersFormRef = ref<ElFormInstance>(); const ordersFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({ const dialog = reactive<DialogOption>({
visible: false, visible: false,
title: '' title: '',
type: ''
}); });
const initFormData: OrdersForm = { const initFormData: OrdersForm = {
id: undefined, id: undefined,
orderNumber: undefined, orderNumber: undefined,

View File

@ -1,3 +1,4 @@
<!-- 商品列表 -->
<template> <template>
<div class="p-2"> <div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" <transition :enter-active-class="proxy?.animate.searchAnimate.enter"
@ -105,7 +106,7 @@
</el-row> </el-row>
<el-form-item label="供应商" prop="vendorId"> <el-form-item label="供应商" prop="vendorId">
<el-select v-model="form.vendorId" placeholder="请选择供应商" clearable> <el-select v-model="form.vendorId" placeholder="请选择供应商" clearable>
<el-option v-for="dict in listVendorList" :key="dict.id" :label="dict.vendorName" :value="dict.id" /> <el-option v-for="item in listVendorList" :key="item.id" :label="item.vendorName" :value="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="商品图片" prop="productImage"> <el-form-item label="商品图片" prop="productImage">

View File

@ -253,7 +253,7 @@ const submitForm = () => {
/** 删除按钮操作 */ /** 删除按钮操作 */
const handleDelete = async (row?: ProductCategoryVO) => { const handleDelete = async (row?: ProductCategoryVO) => {
const _ids = row?.id || ids.value; const _ids = row?.id || ids.value;
await proxy?.$modal.confirm('是否确认删除商品类别编号为"' + row.category + '"的数据项?').finally(() => loading.value = false); await proxy?.$modal.confirm('是否确认删除商品类别为"' + row.category + '"的数据项?').finally(() => loading.value = false);
await delProductCategory(_ids); await delProductCategory(_ids);
proxy?.$modal.msgSuccess("删除成功"); proxy?.$modal.msgSuccess("删除成功");
await getList(); await getList();

View File

@ -299,52 +299,52 @@
</el-dialog> </el-dialog>
<!-- 预览弹层 --> <!-- 预览弹层 -->
<el-dialog title="预览" v-model="previewVisible" width="900px" append-to-body> <el-dialog title="预览" v-model="previewVisible" width="900px" append-to-body>
<el-form ref="previewRef" :model="form" label-width="80px"> <el-form ref="previewRef" :model="form" label-width="110px">
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="queryParams.type == '0' ? '景点名称' : '商家名称'" prop="name"> <el-form-item :label="queryParams.type == '0' ? '景点名称' : '商家名称'" prop="name">
<span>{{ form.name }}</span> <span>{{ form.name }}</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12" v-if="queryParams.type == '0'"> <el-col :span="12" v-if="queryParams.type == '0'">
<el-form-item label="景区等级" prop="level"> <el-form-item label="景区等级" prop="level">
<span>{{ form.level }}</span> <span>{{ form.level!=null?levelList[form.level-1].label:'暂无'}}</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="推荐语" prop="recommend"> <el-form-item label="推荐语" prop="recommend">
<span>{{ form.recommend }}</span> <span>{{ form.recommend?form.recommend:'暂无' }}</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="排序" prop="orderNum"> <el-form-item label="排序" prop="orderNum">
<span>{{ form.orderNum }}</span> <span>{{ form.orderNum }}</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="是否开放" prop="isOpen"> <el-form-item label="是否开放" prop="isOpen">
<span>{{ form.isOpen == 1 ? '开放中' : '未开放' }}</span> <span>{{ form.isOpen == 1 ? '开放中' : '未开放' }}</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="queryParams.type == '0' ? '景点icon' : '商家icon'" prop="icon"> <el-form-item :label="queryParams.type == '0' ? '景点icon' : '商家icon'" prop="icon">
<el-image :src="form.icon" class="avatar" /> <el-image :src="form.icon" class="avatar" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="queryParams.type == '0' ? '景点属性' : '商家属性'" prop="attribute"> <el-form-item :label="queryParams.type == '0' ? '景点属性' : '商家属性'" prop="attribute">
<span>{{ form.attribute == 1 ? '标志性' : '非标志性' }}</span> <span>{{ form.attribute == 1 ? '标志性' : '非标志性' }}</span>
<span>{{ queryParams.type == '0' ? '景点' : '商家' }}</span> <span>{{ queryParams.type == '0' ? '景点' : '商家' }}</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="标签" prop="tagId"> <el-form-item label="标签" prop="tagId">
<!-- <el-select class="inputWidth" v-model="form.tagId_copy" placeholder="请选择标签" clearable disabled> <!-- <el-select class="inputWidth" v-model="form.tagId_copy" placeholder="请选择标签" clearable disabled>
<el-option v-for="item in sys_user_tagOptions" :key="item.id" :label="item.title" :value="item.id" /> <el-option v-for="item in sys_user_tagOptions" :key="item.id" :label="item.title" :value="item.id" />
</el-select> --> </el-select> -->
@ -354,35 +354,36 @@
</el-row> </el-row>
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="联系电话" prop="number"> <el-form-item label="联系电话" prop="number">
<span>{{ form.number }}</span> <span>{{ form.number?form.number:'暂无' }}</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="详细地址" prop="address" style="margin-top: 15px"> <el-form-item label="详细地址" prop="address" style="margin-top: 15px">
<span>{{ form.address }}</span> <span>{{ form.address }}</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="经度" prop="longitude"> <el-form-item label="经度" prop="longitude">
<span>{{ form.longitude }}</span> <span>{{ form.longitude }}</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="纬度" prop="latitude"> <el-form-item label="纬度" prop="latitude">
<span>{{ form.latitude }}</span> <span>{{ form.latitude }}</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="24"> <el-col :span="24">
<el-form-item :label="`${queryParams.type == '0' ? '景点' : '商家'}照片/视频`" prop="" label-width="110px"> <el-form-item :label="`${queryParams.type == '0' ? '景点' : '商家'}照片/视频`" prop="" label-width="110px">
<!-- <el-image v-for="item in fileList_1" :key="item" :src="item" class="avatar" /> --> <!-- <el-image v-for="item in fileList_1" :key="item" :src="item" class="avatar" /> -->
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-form-item :label="`${queryParams.type == '0' ? '景点' : '商家'}简介`" prop="intro"> <el-form-item :label="`${queryParams.type == '0' ? '景点' : '商家'}简介:`" prop="intro">
<div v-html="form.intro"></div> <div v-if="form.intro" v-html="form.intro"></div>
<div v-else>暂无</div>
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
@ -433,7 +434,8 @@ const queryFormRef = ref<ElFormInstance>();
const articleFormRef = ref<ElFormInstance>(); const articleFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({ const dialog = reactive<DialogOption>({
visible: false, visible: false,
title: '' title: '',
type:''
}); });
const noteLists = ref([]); // const noteLists = ref([]); //
const previewRef = ref(null); const previewRef = ref(null);
@ -891,7 +893,7 @@ const updateRow = async (row: any, type: string) => {
/** 删除按钮操作 */ /** 删除按钮操作 */
const handleDelete = async (row?: ArticleVO) => { const handleDelete = async (row?: ArticleVO) => {
const _ids = row?.id || ids.value; const _ids = row?.id || ids.value;
await proxy?.$modal.confirm('是否确认删除编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false)); await proxy?.$modal.confirm('是否确认删除名称为"' + row.name + '"的数据项?').finally(() => (loading.value = false));
await delArticle(_ids); await delArticle(_ids);
proxy?.$modal.msgSuccess('删除成功'); proxy?.$modal.msgSuccess('删除成功');
await getList(); await getList();

View File

@ -42,7 +42,7 @@
<el-table-column label="用户等级" align="center" prop="levelName" /> <el-table-column label="用户等级" align="center" prop="levelName" />
<el-table-column label="等级所达积分" align="center" prop="score" /> <el-table-column label="等级所达积分" align="center" prop="score" />
<el-table-column label="排序" align="center" prop="orderNum" /> <el-table-column label="排序" align="center" prop="orderNum" />
<el-table-column label="创建者" align="center" prop="createBy" /> <el-table-column label="创建者" align="center" prop="createByName" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180"> <el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template #default="scope"> <template #default="scope">
<!-- <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span> --> <!-- <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span> -->
@ -122,7 +122,8 @@ const userLevelFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({ const dialog = reactive<DialogOption>({
visible: false, visible: false,
title: '' title: '',
type: ''
}); });
const initFormData: UserLevelForm = { const initFormData: UserLevelForm = {

View File

@ -208,7 +208,7 @@ const submitForm = () => {
/** 删除按钮操作 */ /** 删除按钮操作 */
const handleDelete = async (row?: VendorVO) => { const handleDelete = async (row?: VendorVO) => {
const _ids = row?.id || ids.value; const _ids = row?.id || ids.value;
await proxy?.$modal.confirm('是否确认删除供应商编号为"' + row.vendorName + '"的数据项?').finally(() => loading.value = false); await proxy?.$modal.confirm('是否确认删除供应商为"' + row.vendorName + '"的数据项?').finally(() => loading.value = false);
await delVendor(_ids); await delVendor(_ids);
proxy?.$modal.msgSuccess("删除成功"); proxy?.$modal.msgSuccess("删除成功");
await getList(); await getList();