Compare commits

..

No commits in common. "4d0e340fee5493c5eae1657aba1eb2a80100e977" and "0a81cadeb2f1c19a6bc15b39ecde3992a6072145" have entirely different histories.

39 changed files with 494 additions and 897 deletions
src
api/manage
banned
dyUser
notebook
route
scenic
assets/images
components
Editor
Map
activitylink
commentRows
note
noteList
partyList
views
index.vue
manage
activity
articleManage
bannerManage
dyUser
hotel
ipImage
mkConfig
mkJigsaw
mkPostcard
noteManage
orders
product
productCategory
report
route
scenic
tag
userLevel
userScore
system/user

View File

@ -48,7 +48,6 @@ export interface BannedVO {
* (0=,1=) * (0=,1=)
*/ */
handlingStatus: number; handlingStatus: number;
nickName?: string | number;
/** /**
* 1=,2=,3=,4= * 1=,2=,3=,4=
@ -107,7 +106,6 @@ export interface BannedForm extends BaseEntity {
* (0=,1=) * (0=,1=)
*/ */
handlingStatus?: number; handlingStatus?: number;
nickName?: string | number;
/** /**
* 1=,2=,3=,4= * 1=,2=,3=,4=
@ -122,7 +120,6 @@ export interface BannedQuery extends PageQuery {
* id * id
*/ */
contentId?: string | number; contentId?: string | number;
nickName?: string | number;
/** /**
* ID * ID

View File

@ -199,7 +199,7 @@ export interface DyUserForm extends BaseEntity {
/** /**
* *
*/ */
banDays?: number | string; banDays?: number;
/** /**
* *

View File

@ -65,7 +65,7 @@ export const delNotebook = (id: string | number | Array<string | number>) => {
* *
* @param id * @param id
*/ */
export const tagall = () => { export const tagall = (): AxiosPromise<NotebookVO> => {
return request({ return request({
url: '/manage/tag/all', url: '/manage/tag/all',
method: 'get' method: 'get'
@ -75,7 +75,7 @@ export const tagall = () => {
* *
* @param query * @param query
*/ */
export const contentall = (query?: any) => { export const contentall = (query?: NotebookQuery): AxiosPromise<NotebookVO> => {
return request({ return request({
url: '/manage/content/all', url: '/manage/content/all',
method: 'get', method: 'get',

View File

@ -77,7 +77,7 @@ export const getRegionTree = (query?: RouteForm) => {
* 宿 * 宿
* @param query * @param query
*/ */
export const hotelall = (query?: any) => { export const hotelall = (query?: RouteForm) => {
return request({ return request({
url: '/manage/hotel/all', url: '/manage/hotel/all',
method: 'get', method: 'get',

View File

@ -105,15 +105,3 @@ export const commentList = (query: any): AxiosPromise<ArticleVO[]> => {
params: query params: query
}); });
}; };
/**
*
* @param query
* @returns
*/
export const recommend = (query: any) => {
return request({
url: '/manage/notebook/recommend-list',
method: 'get',
params: query
});
};

Binary file not shown.

Before

(image error) Size: 9.2 KiB

Binary file not shown.

Before

(image error) Size: 13 KiB

Binary file not shown.

Before

(image error) Size: 6.1 KiB

Binary file not shown.

Before

(image error) Size: 4.5 KiB

Binary file not shown.

Before

(image error) Size: 8.7 KiB

Binary file not shown.

Before

(image error) Size: 7.4 KiB

View File

@ -1,14 +1,28 @@
<template> <template>
<div> <div>
<el-upload v-if="type === 'url'" :action="upload.url" :before-upload="handleBeforeUpload" <el-upload
:on-success="handleUploadSuccess" :on-error="handleUploadError" class="editor-img-uploader" name="file" v-if="type === 'url'"
:show-file-list="false" :headers="upload.headers"> :action="upload.url"
:before-upload="handleBeforeUpload"
:on-success="handleUploadSuccess"
:on-error="handleUploadError"
class="editor-img-uploader"
name="file"
:show-file-list="false"
:headers="upload.headers"
>
<i ref="uploadRef"></i> <i ref="uploadRef"></i>
</el-upload> </el-upload>
</div> </div>
<div class="editor"> <div class="editor">
<quill-editor ref="quillEditorRef" v-model:content="content" content-type="html" :options="options" :style="styles" <quill-editor
@text-change="(e: any) => $emit('update:modelValue', content)" /> ref="quillEditorRef"
v-model:content="content"
content-type="html"
:options="options"
:style="styles"
@text-change="(e: any) => $emit('update:modelValue', content)"
/>
</div> </div>
</template> </template>
@ -88,7 +102,6 @@ const styles = computed(() => {
if (props.height) { if (props.height) {
style.height = `${props.height}px`; style.height = `${props.height}px`;
} }
style.width = '1000px';
return style; return style;
}); });
@ -153,96 +166,77 @@ const handleUploadError = (err: any) => {
.editor-img-uploader { .editor-img-uploader {
display: none; display: none;
} }
.editor, .editor,
.ql-toolbar { .ql-toolbar {
white-space: pre-wrap !important; white-space: pre-wrap !important;
line-height: normal !important; line-height: normal !important;
} }
.quill-img { .quill-img {
display: none; display: none;
} }
.ql-snow .ql-tooltip[data-mode='link']::before { .ql-snow .ql-tooltip[data-mode='link']::before {
content: '请输入链接地址:'; content: '请输入链接地址:';
} }
.ql-snow .ql-tooltip.ql-editing a.ql-action::after { .ql-snow .ql-tooltip.ql-editing a.ql-action::after {
border-right: 0; border-right: 0;
content: '保存'; content: '保存';
padding-right: 0; padding-right: 0;
} }
.ql-snow .ql-tooltip[data-mode='video']::before { .ql-snow .ql-tooltip[data-mode='video']::before {
content: '请输入视频地址:'; content: '请输入视频地址:';
} }
.ql-snow .ql-picker.ql-size .ql-picker-label::before, .ql-snow .ql-picker.ql-size .ql-picker-label::before,
.ql-snow .ql-picker.ql-size .ql-picker-item::before { .ql-snow .ql-picker.ql-size .ql-picker-item::before {
content: '14px'; content: '14px';
} }
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='small']::before, .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='small']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='small']::before { .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='small']::before {
content: '10px'; content: '10px';
} }
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='large']::before, .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='large']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='large']::before { .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='large']::before {
content: '18px'; content: '18px';
} }
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='huge']::before, .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='huge']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='huge']::before { .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='huge']::before {
content: '32px'; content: '32px';
} }
.ql-snow .ql-picker.ql-header .ql-picker-label::before, .ql-snow .ql-picker.ql-header .ql-picker-label::before,
.ql-snow .ql-picker.ql-header .ql-picker-item::before { .ql-snow .ql-picker.ql-header .ql-picker-item::before {
content: '文本'; content: '文本';
} }
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='1']::before, .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='1']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='1']::before { .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='1']::before {
content: '标题1'; content: '标题1';
} }
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='2']::before, .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='2']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='2']::before { .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='2']::before {
content: '标题2'; content: '标题2';
} }
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='3']::before, .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='3']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='3']::before { .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='3']::before {
content: '标题3'; content: '标题3';
} }
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='4']::before, .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='4']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='4']::before { .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='4']::before {
content: '标题4'; content: '标题4';
} }
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='5']::before, .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='5']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='5']::before { .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='5']::before {
content: '标题5'; content: '标题5';
} }
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='6']::before, .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='6']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='6']::before { .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='6']::before {
content: '标题6'; content: '标题6';
} }
.ql-snow .ql-picker.ql-font .ql-picker-label::before, .ql-snow .ql-picker.ql-font .ql-picker-label::before,
.ql-snow .ql-picker.ql-font .ql-picker-item::before { .ql-snow .ql-picker.ql-font .ql-picker-item::before {
content: '标准字体'; content: '标准字体';
} }
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value='serif']::before, .ql-snow .ql-picker.ql-font .ql-picker-label[data-value='serif']::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value='serif']::before { .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='serif']::before {
content: '衬线字体'; content: '衬线字体';
} }
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value='monospace']::before, .ql-snow .ql-picker.ql-font .ql-picker-label[data-value='monospace']::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value='monospace']::before { .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='monospace']::before {
content: '等宽字体'; content: '等宽字体';

View File

@ -33,7 +33,6 @@
import { Search } from '@element-plus/icons-vue'; import { Search } from '@element-plus/icons-vue';
import { propTypes } from '@/utils/propTypes'; import { propTypes } from '@/utils/propTypes';
import { jsonp } from 'vue-jsonp'; import { jsonp } from 'vue-jsonp';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
import { debounce } from '@/utils/debounce.js'; import { debounce } from '@/utils/debounce.js';
import { OssVO } from '@/api/system/oss/types'; import { OssVO } from '@/api/system/oss/types';
import { listByIds } from '@/api/system/oss'; import { listByIds } from '@/api/system/oss';
@ -94,7 +93,8 @@ const onClick = (e: any) => {
// form.value.city = data.result.address_component.city; // form.value.city = data.result.address_component.city;
// form.value.region = data.result.ad_info.adcode; // // form.value.region = data.result.ad_info.adcode; //
form.value.regionCode = data.result.ad_info.adcode; // form.value.regionCode = data.result.ad_info.adcode; //
center.value = { lat: data.result.location.lat, lng: data.result.location.lng }; center.value.lat = data.result.location.lat;
center.value.lng = data.result.location.lng;
searchLocation.value = data.result.formatted_addresses.recommend; searchLocation.value = data.result.formatted_addresses.recommend;
geometries.value = [{ styleId: 'marker', position: { lat: data.result.location.lat, lng: data.result.location.lng } }]; geometries.value = [{ styleId: 'marker', position: { lat: data.result.location.lat, lng: data.result.location.lng } }];
console.log(form.value); console.log(form.value);
@ -119,6 +119,8 @@ const performSearch = async (text) => {
jsonp(`https://apis.map.qq.com/ws/geocoder/v1/?address=${text}&key=${'6XFBZ-SAVLT-JGIX2-VOLMK-6S2H3-XUBGO'}&output=jsonp`, {}).then((data) => { jsonp(`https://apis.map.qq.com/ws/geocoder/v1/?address=${text}&key=${'6XFBZ-SAVLT-JGIX2-VOLMK-6S2H3-XUBGO'}&output=jsonp`, {}).then((data) => {
console.log(data); console.log(data);
if (data.status == 0) { if (data.status == 0) {
center.value.lat = data.result.location.lat;
center.value.lng = data.result.location.lng;
// form.value.address = // form.value.address =
// data.result.address_components.province + // data.result.address_components.province +
// data.result.address_components.city + // data.result.address_components.city +
@ -130,9 +132,8 @@ const performSearch = async (text) => {
// form.value.region = data.result.ad_info.adcode; // // form.value.region = data.result.ad_info.adcode; //
// form.value.regionCode = data.result.ad_info.adcode; // // form.value.regionCode = data.result.ad_info.adcode; //
form.value.address = text; form.value.address = data.result.formatted_addresses.recommend;
// form.value.city = data.result.address_components.city; // form.value.city = data.result.address_components.city;
center.value = { lat: data.result.location.lat, lng: data.result.location.lng };
geometries.value = [{ styleId: 'marker', position: { lat: data.result.location.lat, lng: data.result.location.lng } }]; geometries.value = [{ styleId: 'marker', position: { lat: data.result.location.lat, lng: data.result.location.lng } }];
console.log(form.value); console.log(form.value);
emit('modelValue', form.value); emit('modelValue', form.value);

View File

@ -1,142 +0,0 @@
<template>
<div class="note">
<div class="content">
<img src="" />
<div class="title">{{ form.activityName }}</div>
<div class="description">
<div><img src="../../assets/images/num.png" />活动人数{{ form.activityUserCount }}</div>
<div><img src="../../assets/images/time.png" />活动时间{{ form.activityTime }}</div>
<div><img src="../../assets/images/laba.png" />报名截至{{ form.registrationDeadline }}</div>
<div><img src="../../assets/images/moeny.png" />活动费用{{ form.paymentMethod == 1 ? '发起人收款' : '免费' }}</div>
<div><img src="../../assets/images/address.png" />活动地址{{ form.activityLocation }}</div>
</div>
<div>
<div style="font-size: 14px;font-weight: 600;line-height:30px">活动介绍</div>
<div>{{ form.activityDescription }}</div>
</div>
<div>
<div style="font-size: 14px;font-weight: 600;line-height:30px">活动流程</div>
<div v-for="(item, index) in listdatatime">
<div style="display: flex; align-items: center">
<div style="width: 10px; height: 10px; background-color: #000; border-radius: 50%"></div>
<div>{{ item.activityTime }}&nbsp;</div>
<div>{{ item.planContent }}</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { string } from 'vue-types';
import { contentall, tagall } from '@/api/manage/notebook';
import { hotelall } from '@/api/manage/route';
const sys_user_tagOptions = ref([]); //
const sys_user_contentOptions = ref([]); //
const props = defineProps({
form: {
type: [String, Object, Array],
default: () => {}
},
listdatatime: {
type: [String, Object, Array],
default: () => {}
}
});
const form = ref(props.form);
const listdatatime = ref(props.listdatatime);
const getContent = async () => {
const res = await contentall({ status: 2 });
const arr = await hotelall({ status: 1 });
sys_user_contentOptions.value = res.concat(arr); //
};
const getTag = async () => {
const res = await tagall();
sys_user_tagOptions.value = res; //
};
/**
* 标签格式化
*/
const formatTag = (tagId: string | null) => {
let tagString = '';
// for (let i = 0; i < sys_user_tagOptions.value.length; i++) {
// const element = sys_user_tagOptions.value[i];
// if (tagId?.includes(element.id)) {
// tagString += ',' + element.title;
// }
// }
for (let i = 0; i < sys_user_tagOptions.value.length; i++) {
const element = sys_user_tagOptions.value[i];
if (tagId != null) {
let filteredArray = tagId.split(',').filter((item) => item == element.id);
if (filteredArray.length > 0) {
tagString += '#' + element.title;
}
}
}
return tagString;
};
/**
* 标记地点格式化
*/
const formatlocation = (tagId: string | null) => {
let tagString = '';
let arrlist = tagId?.split(',').map(Number);
for (let i = 0; i < sys_user_contentOptions.value.length; i++) {
const element = sys_user_contentOptions.value[i];
for (let j = 0; j < arrlist.length; j++) {
const conten = arrlist[j];
if (conten == element.id) {
tagString += ',' + element.name;
}
}
}
return tagString.substring(1);
};
onMounted(() => {
getTag(); //
getContent();
});
</script>
<style scoped lang="scss">
.note {
margin: 0 auto;
width: 350px;
height: 700px;
background: url('../../assets/images/bgm.png') no-repeat;
background-size: 100% 100%;
padding-top: 70px;
.content {
width: 88%;
height: 580px;
overflow-y: auto;
margin: 0 auto;
.title {
width: 95%;
font-weight: 600;
padding-top: 300px;
margin: 0 auto;
font-size: 16px;
}
.description {
margin-top: 15px;
border-radius: 20px;
padding: 10px;
line-height: 30px;
background-color: #f3efe8;
img {
width: 15px;
height: 15px;
margin-right: 5px;
}
}
}
}
.content::-webkit-scrollbar {
display: none;
}
.content::-webkit-scrollbar {
width: 0px;
}
</style>

View File

@ -10,8 +10,8 @@
<div style="margin-right: 5px;"> <div style="margin-right: 5px;">
{{ comment.nickName }} {{ comment.nickName }}
</div> </div>
<!-- <div v-if="comment.parentId" class="reply-to"></div> <div v-if="comment.parentId" class="reply-to"></div>
<div v-if="comment.parentId" class="reply-to-username">{{ comment.replyNickName }}</div> --> <div v-if="comment.parentId" class="reply-to-username">{{ comment.replyNickName }}</div>
</div> </div>
</div> </div>
<div class="user-details"> <div class="user-details">
@ -21,26 +21,21 @@
<span class="ip-address">IP: {{ comment.address?comment.address:'未知' }}</span> <span class="ip-address">IP: {{ comment.address?comment.address:'未知' }}</span>
</div> </div>
</div> </div>
<div v-if="comment.daList && comment.daList.length" class="replies"> <!-- <div v-if="comment.replies && comment.replies.length" class="replies">
<div v-for="reply in comment.daList" :key="reply.id" class="reply-item"> <div v-for="reply in comment.replies" :key="reply.id" class="reply-item">
<div class="user-info"> <div class="user-info">
<!-- <img :src="reply.avatar" alt="" class="avatar"> --> <img :src="reply.avatar" alt="回复用户昵称" class="avatar">
<image-preview :src="reply.avatar" :width="25" :height="25" /> <div class="user-details">
<div class=""> <div class="username">回复 {{ reply.username }}</div>
<div class="username"> <div class="comment-content">{{ reply.content }}</div>
<span>{{ reply.nickName }}</span> <div class="comment-info">
<div class="reply-to"></div> <span class="comment-time">{{ reply.time }}</span>
<span>{{ reply.replyNickName }}</span> <span class="ip-address">IP: {{ reply.ipAddress }}</span>
</div>
<div class="comment-content" style="margin-left: 10px;">{{ reply.content }}</div>
<div class="comment-info" style="margin-left: 10px;">
<span class="comment-time">{{ reply.createTime }}</span>
<span class="ip-address">IP: {{ reply.address?reply.address:'未知' }}</span>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> -->
</div> </div>
</div> </div>
<pagination v-show="total > 0" id="table_page" :total="total" v-model:page="queryParams.pageNum" <pagination v-show="total > 0" id="table_page" :total="total" v-model:page="queryParams.pageNum"
@ -118,15 +113,13 @@ const getCommentList = async () => {
.reply-to { .reply-to {
width: 0; width: 0;
height: 0; height: 0;
margin-top: 5px;
border-top: 6px solid transparent; border-top: 6px solid transparent;
/* 上边框透明 */ /* 上边框透明 */
border-bottom: 6px solid transparent; border-bottom: 6px solid transparent;
/* 下边框透明 */ /* 下边框透明 */
border-left: 6px solid #999; border-left: 6px solid #999;
/* 左边框为箭头颜色,这里设为黑色,可按需更改 */ /* 左边框为箭头颜色,这里设为黑色,可按需更改 */
margin: 0px 8px;
margin-top: 5px;
} }
.reply-to-username { .reply-to-username {
@ -137,7 +130,6 @@ const getCommentList = async () => {
.user-details { .user-details {
margin-left: 35px; margin-left: 35px;
}
.comment-content { .comment-content {
color: #000; color: #000;
@ -145,6 +137,7 @@ const getCommentList = async () => {
padding: 3px 0px; padding: 3px 0px;
} }
} }
}
} }
@ -152,15 +145,6 @@ const getCommentList = async () => {
margin-left: 15px; margin-left: 15px;
} }
.replies {
margin-left: 35px;
.reply-item {
margin-top: 5px;
padding: 5px 0px;
}
}
#table_page { #table_page {
height: 50px !important; height: 50px !important;
margin-top: 10px !important; margin-top: 10px !important;

View File

@ -1,119 +0,0 @@
<template>
<div class="note">
<div class="content">
<img src="" />
<div class="title">{{ form.title }}</div>
<div v-html="form.content"></div>
<div class="tagid">{{ formatTag(form.tagId) }}</div>
<div class="address" v-if="form.location">
<img src="../../assets/images/address.png" />
{{ formatlocation(form.location) }}
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { string } from 'vue-types';
import { contentall, tagall } from '@/api/manage/notebook';
import { hotelall } from '@/api/manage/route';
const sys_user_tagOptions = ref([]); //
const sys_user_contentOptions = ref([]); //
const props = defineProps({
form: {
type: [String, Object, Array],
default: () => {}
}
});
const form = ref(props.form);
const getContent = async () => {
const res = await contentall({ status: 2 });
const arr = await hotelall({ status: 1 });
sys_user_contentOptions.value = res.concat(arr); //
};
const getTag = async () => {
const res = await tagall();
sys_user_tagOptions.value = res; //
};
/**
* 标签格式化
*/
const formatTag = (tagId: string | null) => {
let tagString = '';
// for (let i = 0; i < sys_user_tagOptions.value.length; i++) {
// const element = sys_user_tagOptions.value[i];
// if (tagId?.includes(element.id)) {
// tagString += ',' + element.title;
// }
// }
for (let i = 0; i < sys_user_tagOptions.value.length; i++) {
const element = sys_user_tagOptions.value[i];
if (tagId != null) {
let filteredArray = tagId.split(',').filter((item) => item == element.id);
if (filteredArray.length > 0) {
tagString += '#' + element.title;
}
}
}
return tagString;
};
/**
* 标记地点格式化
*/
const formatlocation = (tagId: string | null) => {
let tagString = '';
let arrlist = tagId?.split(',').map(Number);
for (let i = 0; i < sys_user_contentOptions.value.length; i++) {
const element = sys_user_contentOptions.value[i];
for (let j = 0; j < arrlist.length; j++) {
const conten = arrlist[j];
if (conten == element.id) {
tagString += ',' + element.name;
}
}
}
return tagString.substring(1);
};
onMounted(() => {
getTag(); //
getContent();
});
</script>
<style scoped lang="scss">
.note {
margin: 0 auto;
width: 350px;
height: 700px;
background: url('../../assets/images/bgm.png') no-repeat;
background-size: 100% 100%;
padding-top: 70px;
.content {
width: 88%;
height: 580px;
overflow-y: auto;
margin: 0 auto;
.title {
font-weight: 600;
padding-top: 300px;
margin: 0 auto;
}
.tagid {
color: #1c84c6;
}
.address {
line-height: 40px;
color: #2b2f3a;
img {
width: 15px;
height: 15px;
}
}
}
}
.content::-webkit-scrollbar {
display: none;
}
.content::-webkit-scrollbar {
width: 0px;
}
</style>

View File

@ -3,15 +3,12 @@
<div> <div>
<el-table :height="props.autoTableHeight" v-loading="loading" :data="props.articleList" <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'" /> -->
<el-table-column label="笔记标题" align="center" prop="title" width="180px" /> <el-table-column label="笔记标题" align="center" prop="title" width="180px" />
<el-table-column label="笔记封面" align="center" prop="" width="80px" /> <el-table-column label="笔记封面" align="center" prop="" width="80px" />
<el-table-column label="标记地点" align="center" prop="location"> <el-table-column label="笔记类别" align="center" prop="" width="80px" />
<template #default="scope"> <el-table-column label="标记地点" align="center" prop="location" width="180px" />
<span>{{ formatlocation(scope.row.location) }}</span>
</template>
</el-table-column>
<el-table-column label="标签" align="center" prop=""> <el-table-column label="标签" align="center" prop="">
<template #default="scope"> <template #default="scope">
<span>{{ formatTag(scope.row.tagId.toString()) }}</span> <span>{{ formatTag(scope.row.tagId.toString()) }}</span>
@ -28,16 +25,16 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="点赞数" align="center" prop="agreeCount" width="80px"> <el-table-column label="点赞数" align="center" prop="agreeCount" width="80px">
<!-- <template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleComment(scope.row)">12</el-button> <el-button link type="primary" @click="handleComment(scope.row)">12</el-button>
</template> --> </template>
</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">
<span>{{ scope.row.status == 0 ? '未发布' : scope.row.status == 1 ? '审核中' : scope.row.status == 2 ? '已发布' : '草稿' }}</span> <span>{{ scope.row.status == 0 ? '未发布' : scope.row.status == 1 ? '审核中' : scope.row.status == 2 ? '已发布' : '草稿' }}</span>
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column label="操作人" align="center" prop="updateByName" /> --> <el-table-column label="操作人" align="center" prop="updateByName" />
<el-table-column label="操作时间" align="center" prop="updateTime" width="180px" /> <el-table-column label="操作时间" align="center" prop="updateTime" width="180px" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" <el-table-column label="操作" align="center" class-name="small-padding fixed-width"
v-if="props.parentName != 'dyUser' && props.parentName != 'scenic'"> v-if="props.parentName != 'dyUser' && props.parentName != 'scenic'">
@ -57,6 +54,8 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination v-show="total > 0" id="table_page" :total="total" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" @pagination="getTableList" />
<!-- 笔记详情弹层 --> <!-- 笔记详情弹层 -->
<el-dialog title="笔记详情" v-model="noteDetail.visible" width="500px" append-to-body> <el-dialog title="笔记详情" v-model="noteDetail.visible" width="500px" append-to-body>
<div> <div>
@ -89,9 +88,6 @@
import { ref, reactive, onMounted, nextTick } from 'vue'; import { ref, reactive, onMounted, nextTick } from 'vue';
import { string } from 'vue-types'; import { string } from 'vue-types';
import { listByTagIdNotebook } from '@/api/manage/scenic'; import { listByTagIdNotebook } from '@/api/manage/scenic';
import { tagall,contentall } from '@/api/manage/notebook';
import { hotelall } from '@/api/manage/route';
// //
const props = defineProps({ const props = defineProps({
@ -111,10 +107,10 @@ const props = defineProps({
type: String, type: String,
default: () => '' default: () => ''
}, },
// sys_user_tagOptions: { sys_user_tagOptions: {
// type: Array, type: Array,
// default: () => [] default: () => []
// } }
}); });
const total = ref(0); const total = ref(0);
const loading = ref(false); const loading = ref(false);
@ -157,16 +153,14 @@ const handleComment = async (row: any) => {
} }
// tagIds,tagIds // tagIds,tagIds
watch( watch(
() => props.articleList, () => props.noteBookTagIds,
(newVal, oldVal) => { (newVal, oldVal) => {
console.log(newVal); console.log(newVal);
queryParams.tagIds = newVal; queryParams.tagIds = newVal;
if (newVal) { if (newVal) {
// //
nextTick(() => { nextTick(() => {
// getTableList(); getTableList();
getTag();
getContent();
}); });
} }
}, },
@ -192,8 +186,14 @@ const handleDelete = (row: any) => {
*/ */
const formatTag = (tagId: string | null) => { const formatTag = (tagId: string | null) => {
let tagString = ''; let tagString = '';
for (let i = 0; i < sys_user_tagOptions.value.length; i++) { // for (let i = 0; i < props.sys_user_tagOptions.length; i++) {
const element:any = sys_user_tagOptions.value[i]; // const element:any = props.sys_user_tagOptions[i];
// if (tagId?.includes(element.id)) {
// tagString += ',' + element.title;
// }
// }
for (let i = 0; i < props.sys_user_tagOptions.length; i++) {
const element:any = props.sys_user_tagOptions[i];
if (tagId!=null) { if (tagId!=null) {
let filteredArray = tagId.split(',').filter((item) => item==element.id); let filteredArray = tagId.split(',').filter((item) => item==element.id);
if (filteredArray.length>0) { if (filteredArray.length>0) {
@ -203,36 +203,6 @@ const formatTag = (tagId: string | null) => {
} }
return tagString.substring(1); return tagString.substring(1);
}; };
const sys_user_contentOptions = ref([]); //
//
const getContent = async () => {
const res = await contentall({ status: 2 });
const arr = await hotelall({ status: 1 });
sys_user_contentOptions.value = res.concat(arr); //
};
//
const sys_user_tagOptions=ref([]);//
const getTag = async () => {
const res = await tagall();
Object.assign(sys_user_tagOptions.value,res);
};
/**
* 标记地点格式化
*/
const formatlocation = (tagId: string | null) => {
let tagString = '';
let arrlist = tagId?.split(',').map(Number);
for (let i = 0; i < sys_user_contentOptions.value.length; i++) {
const element = sys_user_contentOptions.value[i];
for (let j = 0; j < arrlist.length; j++) {
const conten = arrlist[j];
if (conten == element.id) {
tagString += ',' + element.name;
}
}
}
return tagString.substring(1);
};
// //
const emit = defineEmits(['hideDialog', 'handleUpdate', 'handleDelete']); const emit = defineEmits(['hideDialog', 'handleUpdate', 'handleDelete']);
</script> </script>

View File

@ -14,11 +14,7 @@
</el-table-column> </el-table-column>
<!-- <el-table-column label="排序" align="center" prop="" /> --> <!-- <el-table-column label="排序" align="center" prop="" /> -->
<el-table-column label="活动人数" align="center" prop="activityUserCount" /> <el-table-column label="活动人数" align="center" prop="activityUserCount" />
<el-table-column label="报名人数" align="center" prop="registrationCount"> <el-table-column label="报名人数" align="center" prop="registrationCount" />
<template #default="scope">
<el-button link type="primary" @click="baominglist(scope.row)">{{ scope.row.registrationCount }}</el-button>
</template>
</el-table-column>
<el-table-column label="活动流程" align="center" prop="" width="100px"> <el-table-column label="活动流程" align="center" prop="" width="100px">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="chakanhandle(scope.row)">查看详情</el-button> <el-button link type="primary" @click="chakanhandle(scope.row)">查看详情</el-button>
@ -55,44 +51,12 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 报名人数弹窗-->
<el-dialog v-model="numdialog.visible" title="报名人数" width="60%" append-to-body>
<el-table v-loading="loading" :height="500" border :data="numdialog.activityUsersList">
<el-table-column v-if="true" label="序号" align="center" prop="id" fixed width="80px" />
<el-table-column label="昵称" align="center" fixed prop="nickname" width="180px" />
<el-table-column label="头像" align="center" fixed prop="avatar" width="80px" />
<el-table-column label="性别" align="center" prop="sex">
<template #default="scope">
<dict-tag :options="sys_user_sex" :value="scope.row.sex" />
</template>
</el-table-column>
<el-table-column label="报名宣言" align="center" prop="declaration" show-overflow-tooltip />
<el-table-column label="介绍照片" align="center" prop="introducePhoto" />
<el-table-column label="微信号" align="center" prop="wechat" />
<el-table-column label="报名时间" align="center" prop="createTime" width="180px" />
<el-table-column label="报名结果" align="center" prop="status" width="180px">
<template #default="scope">
<el-tag v-if="scope.row.status == 1" type="info">通过</el-tag>
<el-tag v-if="scope.row.status == 0" type="primary">待挑选</el-tag>
<!-- <el-tag v-if="scope.row.status == 3" type="primary">拒绝</el-tag>-->
</template>
</el-table-column>
</el-table>
<pagination v-show="numdialog.total > 0" id="table_page" v-model:page="numdialog.params.pageNum"
v-model:limit="numdialog.params.pageSize" :total="numdialog.total" @pagination="baominglist" />
<template #footer>
<div class="dialog-footer">
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div> </div>
</template> </template>
<script setup lang="ts" name="partyList"> <script setup lang="ts" name="partyList">
import { ref, reactive, onMounted, nextTick } from 'vue'; import { ref, reactive, onMounted, nextTick } from 'vue';
import {activityUsersList} from '@/api/manage/activity';
// //
const props = defineProps({ const props = defineProps({
partyList: { partyList: {
@ -125,34 +89,6 @@ const handleUpdate = async (row?: any) => {
const handleDelete = (row: any) => { const handleDelete = (row: any) => {
emit('handleDelete', row); emit('handleDelete', row);
}; };
const cancel = () => {
numdialog.visible = false;
numdialog.params.pageNum = 1;
numdialog.params.activityId = undefined;
}
//
const numdialog = reactive({
visible: false,
type:'',
title:'',
total:0,
activityUsersList:[],
params:{
pageNum: 1,
pageSize: 10,
activityId: undefined
}
});
//
const baominglist = async (row:any) => {
if (row.id) {
numdialog.params.activityId = row.id;
}
const res = await activityUsersList(numdialog.params);
numdialog.activityUsersList = res.rows;
numdialog.total = res.total;
numdialog.visible = true;
};
// //
const emit = defineEmits(['hideDialog', 'handleUpdate', 'handleDelete']); const emit = defineEmits(['hideDialog', 'handleUpdate', 'handleDelete']);
</script> </script>

View File

@ -1,6 +1,82 @@
<template> <template>
<div class="app-container home"> <div class="app-container home">
<el-row :gutter="20">
<el-col :sm="24" :lg="12" style="padding-left: 20px">
<h2>岛游后台管理系统</h2>
<p>
岛游后台管理系统 是基于 RuoYi-Vue 针对 分布式集群 场景升级(不兼容原框架)
<br />
* 前端开发框架 Vue3TSElement Plus<br />
* 后端开发框架 Spring Boot<br />
* 容器框架 Undertow 基于 Netty 的高性能容器<br />
* 权限认证框架 Sa-Token 支持多终端认证系统<br />
* 关系数据库 MySQL 适配 8.X 最低 5.7<br />
* 缓存数据库 Redis 适配 6.X 最低 4.X<br />
* 数据库框架 Mybatis-Plus 快速 CRUD 增加开发效率<br />
* 数据库框架 p6spy 更强劲的 SQL 分析<br />
* 多数据源框架 dynamic-datasource 支持主从与多种类数据库异构<br />
* 序列化框架 Jackson 统一使用 jackson 高效可靠<br />
* Redis客户端 Redisson 性能强劲API丰富<br />
* 分布式限流 Redisson 全局请求IP集群ID 多种限流<br />
* 分布式锁 Lock4j 注解锁工具锁 多种多样<br />
* 分布式幂等 Lock4j 基于分布式锁实现<br />
* 分布式链路追踪 SkyWalking 支持链路追踪网格分析度量聚合可视化<br />
* 分布式任务调度 SnailJob 高性能 高可靠 易扩展<br />
* 文件存储 Minio 本地存储<br />
* 文件存储 七牛阿里腾讯 云存储<br />
* 监控框架 SpringBoot-Admin 全方位服务监控<br />
* 校验框架 Validation 增强接口安全性 严谨性<br />
* Excel框架 Alibaba EasyExcel 性能优异 扩展性强<br />
* 文档框架 SpringDocjavadoc 无注解零入侵基于java注释<br />
* 工具类框架 HutoolLombok 减少代码冗余 增加安全性<br />
* 代码生成器 适配MPSpringDoc规范化代码 一键生成前后端代码<br />
* 部署方式 Docker 容器编排 一键部署业务集群<br />
* 国际化 SpringMessage Spring标准国际化方案<br />
</p>
<p><b>当前版本:</b> <span>v5.2.3</span></p>
<p>
<el-tag type="danger">&yen;免费开源</el-tag>
</p>
</el-col>
<el-col :sm="24" :lg="12" style="padding-left: 20px">
<h2>RuoYi-Cloud-Plus多租户微服务管理系统</h2>
<p>
RuoYi-Cloud-Plus 微服务通用权限管理系统 重写 RuoYi-Cloud 全方位升级(不兼容原框架)
<br />
* 前端开发框架 Vue3TSElement UI<br />
* 后端开发框架 Spring Boot<br />
* 微服务开发框架 Spring CloudSpring Cloud Alibaba<br />
* 容器框架 Undertow 基于 XNIO 的高性能容器<br />
* 权限认证框架 Sa-TokenJwt 支持多终端认证系统<br />
* 关系数据库 MySQL 适配 8.X 最低 5.7<br />
* 关系数据库 Oracle 适配 11g 12c<br />
* 关系数据库 PostgreSQL 适配 13 14<br />
* 关系数据库 SQLServer 适配 2017 2019<br />
* 缓存数据库 Redis 适配 6.X 最低 5.X<br />
* 分布式注册中心 Alibaba Nacos 采用2.X 基于GRPC通信高性能<br />
* 分布式配置中心 Alibaba Nacos 采用2.X 基于GRPC通信高性能<br />
* 服务网关 Spring Cloud Gateway 响应式高性能网关<br />
* 负载均衡 Spring Cloud Loadbalancer 负载均衡处理<br />
* RPC远程调用 Apache Dubbo 原生态使用体验高性能<br />
* 分布式限流熔断 Alibaba Sentinel 无侵入高扩展<br />
* 分布式事务 Alibaba Seata 无侵入高扩展 支持 四种模式<br />
* 分布式消息队列 Apache Kafka 高性能高速度<br />
* 分布式消息队列 Apache RocketMQ 高可用功能多样<br />
* 分布式消息队列 RabbitMQ 支持各种扩展插件功能多样性<br />
* 分布式搜索引擎 ElasticSearch 业界知名<br />
* 分布式链路追踪 Apache SkyWalking 链路追踪网格分析度量聚合可视化<br />
* 分布式日志中心 ELK 业界成熟解决方案<br />
* 分布式监控 PrometheusGrafana 全方位性能监控<br />
* 其余与 Vue 版本一致<br />
</p>
<p><b>当前版本:</b> <span>v2.2.2</span></p>
<p>
<el-tag type="danger">&yen;免费开源</el-tag>
</p>
</el-col>
</el-row>
<el-divider />
</div> </div>
</template> </template>

View File

@ -36,13 +36,9 @@
<el-table v-loading="loading" :height="autoTableHeight" :data="activityList" border @selection-change="handleSelectionChange"> <el-table v-loading="loading" :height="autoTableHeight" :data="activityList" border @selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" width="55" align="center" />--> <!-- <el-table-column type="selection" width="55" align="center" />-->
<el-table-column fixed label="序号" align="center" width="80"> <el-table-column v-if="true" label="ID" align="center" prop="id" fixed width="180px" />
<template #default="scope">
<span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column label="活动名称" align="center" fixed prop="activityName" width="180px" /> <el-table-column label="活动名称" align="center" fixed prop="activityName" width="180px" />
<el-table-column label="活动描述" align="center" prop="activityDescription" width="180px" show-overflow-tooltip /> <el-table-column label="活动描述" align="center" fixed prop="activityDescription" width="180px" show-overflow-tooltip />
<el-table-column label="活动图片" align="center" prop="" /> <el-table-column label="活动图片" align="center" prop="" />
<el-table-column label="活动人数" align="center" prop="activityUserCount" /> <el-table-column label="活动人数" align="center" prop="activityUserCount" />
<el-table-column label="报名人数" align="center" prop="registrationCount"> <el-table-column label="报名人数" align="center" prop="registrationCount">
@ -82,7 +78,9 @@
<el-tag v-if="scope.row.status == 3" type="primary">已发布</el-tag> <el-tag v-if="scope.row.status == 3" type="primary">已发布</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="发布时间" align="center" prop="publishTime" />
<el-table-column label="发布人员" align="center" prop="publishName" /> <el-table-column label="发布人员" align="center" prop="publishName" />
<el-table-column label="操作人员" align="center" prop="updateName" />
<el-table-column label="操作时间" align="center" prop="updateTime" width="180px" /> <el-table-column label="操作时间" align="center" prop="updateTime" width="180px" />
<el-table-column label="操作" align="center" width="150px" fixed="right" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" width="150px" fixed="right" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
@ -206,8 +204,57 @@
</el-dialog> </el-dialog>
<!-- 查看活动流程 --> <!-- 查看活动流程 -->
<el-dialog v-model="seedialog.visible" :title="seedialog.title" width="60%" append-to-body> <el-dialog v-model="seedialog.visible" :title="seedialog.title" width="60%" append-to-body>
<activitylink :form="form" :listdatatime="listdatatime"></activitylink> <el-form ref="activityFormRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="活动名称">
<div>{{ form.activityName }}</div>
</el-form-item>
<el-form-item label="活动描述">
<div>{{ form.activityDescription }}</div>
</el-form-item>
<el-form-item label="活动人数">
<div>{{ form.activityUserCount }}</div>
</el-form-item>
<div style="display: flex">
<el-form-item label="活动时间">
<div>{{ form.activityTime }}</div>
</el-form-item>
<el-form-item label="报名截至时间">
<div>{{ form.registrationDeadline }}</div>
</el-form-item>
</div>
<div style="display: flex">
<el-form-item label="发布者地址">
<div>{{ form.publisherAddress }}</div>
</el-form-item>
<el-form-item label="活动地点">
<div>{{ form.activityLocation }}</div>
</el-form-item>
</div>
<el-form-item label="收费方式">
<el-radio-group v-model="form.paymentMethod" disabled>
<el-radio :value="1">发起人收款</el-radio>
<el-radio :value="0">免费</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="挑选玩友">
<el-radio-group v-model="form.isSelected" disabled>
<el-radio :value="1">挑选</el-radio>
<el-radio :value="0">不挑选</el-radio>
</el-radio-group>
<span style="margin-left: 30px; font-size: 12px; color: #707070">勾选后发起人需要逐个审核报名者确认是否通过报名</span>
</el-form-item>
<el-form-item label="活动流程"> </el-form-item>
<div v-for="(item, index) in listdatatime">
<div style="display: flex; align-items: center">
<el-form-item label="时间">
<div>{{ item.activityTime }}</div>
</el-form-item>
<el-form-item label="计划的活动内容">
<div>{{ item.planContent }}</div>
</el-form-item>
</div>
</div>
</el-form>
</el-dialog> </el-dialog>
<!-- 问答弹窗--> <!-- 问答弹窗-->
<el-dialog v-model="wendadialog.visible" title="问答" width="40%" append-to-body> <el-dialog v-model="wendadialog.visible" title="问答" width="40%" append-to-body>
@ -469,7 +516,7 @@ const saveupdate = async (row?: ActivityVO, type) => {
form.value.status = type == 1 ? 2 : 0; form.value.status = type == 1 ? 2 : 0;
const test = type == 1 ? '发布' : '撤销发布'; const test = type == 1 ? '发布' : '撤销发布';
const _ids = row?.activityName || ids.value; const _ids = row?.activityName || ids.value;
await proxy?.$modal.confirm('是否确认' + test + '活动名称 为' + _ids + '的数据项?').finally(() => (loading.value = false)); await proxy?.$modal.confirm('是否确认' + test + '活动信息编号为' + _ids + '的数据项?').finally(() => (loading.value = false));
await updateActivity(form.value).finally(() => (buttonLoading.value = false)); await updateActivity(form.value).finally(() => (buttonLoading.value = false));
proxy?.$modal.msgSuccess(test + '成功'); proxy?.$modal.msgSuccess(test + '成功');
await getList(); await getList();
@ -528,9 +575,8 @@ const submitForm = () => {
/** 删除按钮操作 */ /** 删除按钮操作 */
const handleDelete = async (row?: ActivityVO) => { const handleDelete = async (row?: ActivityVO) => {
const _ids = row?.id || ids.value; const _ids = row?.activityName || ids.value;
const _idsname = row?.activityName || ids.value; await proxy?.$modal.confirm('是否确认删除活动信息编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
await proxy?.$modal.confirm('是否确认删除活动名称为"' + _idsname + '"的数据项?').finally(() => (loading.value = false));
await delActivity(_ids); await delActivity(_ids);
proxy?.$modal.msgSuccess('删除成功'); proxy?.$modal.msgSuccess('删除成功');
await getList(); await getList();

View File

@ -40,12 +40,7 @@
<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 fixed label="序号" align="center" width="80">
<template #default="scope">
<span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column label="标题" align="center" prop="title" /> <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">
@ -63,7 +58,7 @@
<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="primary">已发布</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">
@ -74,9 +69,9 @@
</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,1)" <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" @click="handleUpdate(scope.row)" <el-button link type="primary" @click="handleUpdate(scope.row)"
@ -93,7 +88,7 @@
<pagination id="table_page" v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" <pagination id="table_page" v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" @pagination="getList" /> v-model:limit="queryParams.pageSize" @pagination="getList" />
<!-- 添加或修改文章对话框 --> <!-- 添加或修改文章对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" :width="dialogWidth" append-to-body> <el-dialog :title="dialog.title" v-model="dialog.visible" width="700px" append-to-body>
<el-form ref="articleFormRef" :model="form" :rules="rules" label-width="80px"> <el-form ref="articleFormRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="文章标题" prop="title"> <el-form-item label="文章标题" prop="title">
<el-input v-model="form.title" placeholder="请输入文章标题" /> <el-input v-model="form.title" placeholder="请输入文章标题" />
@ -136,7 +131,7 @@
import { listTag,tagAll } from '@/api/manage/tag'; import { listTag,tagAll } from '@/api/manage/tag';
import { listArticle, getArticle, delArticle, addArticle, updateArticle } from '@/api/manage/article'; import { listArticle, getArticle, delArticle, addArticle, updateArticle } from '@/api/manage/article';
import { ArticleVO, ArticleQuery, ArticleForm } from '@/api/manage/article/types'; import { ArticleVO, ArticleQuery, ArticleForm } from '@/api/manage/article/types';
const dialogWidth=ref(window.innerWidth*0.6+'px');
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const sys_user_tagOptions = ref([]); // const sys_user_tagOptions = ref([]); //
const autoTableHeight = ref<number>(750); const autoTableHeight = ref<number>(750);
@ -291,12 +286,11 @@ const handleUpdate = async (row?:any) => {
* @param row 发布撤销发布 * @param row 发布撤销发布
* @param type * @param type
*/ */
const updateRow = async (row: any, type: number) => { const updateRow = async (row: any, type: string) => {
await proxy?.$modal.confirm('是否确认' + (type == 0 ? '撤销发布' : '发布') + '名称为"' + row.title + '"的数据项?'); await proxy?.$modal.confirm('是否确认' + (type == '0' ? '撤销发布' : '发布') + '名称为"' + row.title + '"的数据项?');
Object.assign(form.value, row); row.status = type;
form.value.status = type;
buttonLoading.value = true; buttonLoading.value = true;
await updateArticle(form.value).finally(() => (buttonLoading.value = false)); await updateArticle(row).finally(() => (buttonLoading.value = false));
proxy?.$modal.msgSuccess('操作成功'); proxy?.$modal.msgSuccess('操作成功');
getList(); getList();
}; };

View File

@ -44,7 +44,7 @@
<el-table-column label="状态" align="center" prop="" width="90px"> <el-table-column label="状态" align="center" prop="" 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="primary">已上架</el-tag> <el-tag v-if="scope.row.status == 1" type="success">已上架</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180px"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180px">

View File

@ -32,9 +32,8 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery" <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
v-hasPermi="['manage:dyUser:query']">搜索</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
<el-button icon="Refresh" @click="resetQuery" v-hasPermi="['manage:dyUser:query']">重置</el-button>
<!-- <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['manage:dyUser:edit']" <!-- <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['manage:dyUser:edit']"
>封禁</el-button >封禁</el-button
> --> > -->
@ -49,22 +48,13 @@
<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="序号" align="center" width="80"> <el-table-column fixed label="用户ID" align="center" prop="id" />
<template #default="scope">
<span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span>
</template>
</el-table-column>
<!-- <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" />
<template #default="scope">
<span>{{ levelList.find(item => item.id === scope.row.levelId)?.levelName }}</span>
</template>
</el-table-column>
<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">
@ -91,50 +81,46 @@
</el-table-column> </el-table-column>
<el-table-column width="55" label="年龄" align="center" prop="age" /> <el-table-column width="55" label="年龄" align="center" prop="age" />
<el-table-column width="150" label="常住地" align="center" prop="address" /> <el-table-column width="150" label="常住地" align="center" prop="address" />
<el-table-column width="80" label="星座" align="center" prop="constellation"> <el-table-column width="70" label="星座" align="center" prop="constellation" />
<template #default="scope">
<dict-tag :options="dy_user_sign" :value="scope.row.constellation" />
</template>
</el-table-column>
<el-table-column width="100" label="职业" align="center" prop="occupation" /> <el-table-column width="100" label="职业" align="center" prop="occupation" />
<el-table-column width="120" label="简介" align="center" prop="remark" /> <el-table-column width="120" label="简介" align="center" prop="remark" />
<el-table-column width="80" label="IP形象" align="center" prop="" /> <el-table-column width="80" label="IP形象" align="center" prop="" />
<el-table-column width="80" label="发布笔记" align="center" prop=""> <el-table-column width="80" 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="openNoteListDialog(scope.row)">{{ scope.row.notebookCount }}</span> @click="openNoteListDialog(scope.row)">12</span>
</template> </template>
</el-table-column> </el-table-column>
<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="openPartyListDialog(scope.row)">{{ scope.row.pubMateCount }}</span> @click="openPartyListDialog(scope.row)">15</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="80" label="关注的人" align="center" prop="focusCount" /> <el-table-column width="80" label="关注的人" align="center" prop="" />
<el-table-column width="80" label="粉丝数" align="center" prop="fanCount" /> <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)">{{ scope.row.scenicSpotCount }}</span> @click="openScenicListDialog(scope.row)">20</span>
</template> </template>
</el-table-column> </el-table-column>
<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="openCityListDialog(scope.row)">{{ scope.row.cityCount }}</span> @click="openCityListDialog(scope.row)">25</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="110" label="获得的明信片" align="center" prop=""> <el-table-column width="110" 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="openPostcardListDialog(scope.row)">{{ scope.row.postcardCount }}</span> @click="openPostcardListDialog(scope.row)">12</span>
</template> </template>
</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="obtainedItemsCount" /> <el-table-column width="90" label="获得的物品" align="center" prop="" />
<el-table-column width="70" label="积分" align="center" prop="userScore" /> <el-table-column width="70" label="积分" align="center" prop="score" />
<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" @click="openOrderListDialog(scope.row)">查看详情</span> <span style="color: dodgerblue; cursor: pointer" @click="openOrderListDialog(scope.row)">查看详情</span>
@ -148,7 +134,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="">
<template #default="scope"> <template #default="scope">
<dict-tag v-if="scope.row.status!=0" :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 width="150" label="封禁理由" align="center" prop="reason" show-overflow-tooltip> <el-table-column width="150" label="封禁理由" align="center" prop="reason" show-overflow-tooltip>
@ -156,14 +142,14 @@
<dict-tag :options="dy_user_ban_mode" :value="scope.row.reason" /> <dict-tag :options="dy_user_ban_mode" :value="scope.row.reason" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="80" label="封禁天数" align="center" prop=""> <el-table-column width="80" label="封禁天数" align="center" prop="banDays">
<template #default="scope"> <template #default="scope">
<dict-tag v-if="scope.row.banDays!='0'" :options="dy_user_ban_days" :value="scope.row.banDays" /> <dict-tag :options="dy_user_ban_days" :value="scope.row.banDays" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="90" label="操作人" align="center" prop="" /> <el-table-column width="90" label="操作人" align="center" prop="" />
<el-table-column width="120" label="操作时间" align="center" prop="" /> <el-table-column width="120" label="操作时间" align="center" prop="" />
<el-table-column fixed="right" label="操作" min-width="120" align="center"> <el-table-column fixed="right" label="操作" min-width="120">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" size="small" v-hasPermi="['manage:dyUser:edit']" v-if="scope.row.status == 0" <el-button link type="primary" size="small" v-hasPermi="['manage:dyUser:edit']" v-if="scope.row.status == 0"
@click="openbanned(scope.row)">封禁</el-button> @click="openbanned(scope.row)">封禁</el-button>
@ -187,8 +173,8 @@
</el-form-item> </el-form-item>
<el-form-item label="处理方式" prop="status"> <el-form-item label="处理方式" prop="status">
<el-radio-group v-model="form.status"> <el-radio-group v-model="form.status">
<el-radio v-for="dict in dy_user_status" :key="dict.value" :label="dict.label" :value="parseInt(dict.value)" <el-radio v-for="dict in dy_user_status" :key="dict.value" :label="dict.label"
v-show="dict.value != '0'">{{ dict.label }}</el-radio> :value="parseInt(dict.value)">{{ dict.label }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="处理天数" prop="banDays"> <el-form-item label="处理天数" prop="banDays">
@ -284,7 +270,7 @@
</template> </template>
</el-dialog> </el-dialog>
<!-- 用户邀请人数 --> <!-- 用户邀请人数 -->
<el-dialog title="邀请人数(大转盘)" v-model="inviteListDialog.visible" width="500px" append-to-body> <el-dialog title="邀请人数" v-model="inviteListDialog.visible" width="500px" append-to-body>
<el-table :height="300" v-loading="loading" :data="inviteListDialog.inviteList" border> <el-table :height="300" v-loading="loading" :data="inviteListDialog.inviteList" border>
<el-table-column label="用户名称" align="center" fixed prop="nickName" /> <el-table-column label="用户名称" align="center" fixed prop="nickName" />
<el-table-column label="用户头像" align="center" fixed prop="" /> <el-table-column label="用户头像" align="center" fixed prop="" />
@ -322,8 +308,8 @@ import { listDyUser, getDyUser, delDyUser, addDyUser, updateDyUser,userSights,us
import { DyUserVO, DyUserQuery, DyUserForm } from '@/api/manage/dyUser/types'; import { DyUserVO, DyUserQuery, DyUserForm } from '@/api/manage/dyUser/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { dy_user_ban_days, dy_user_status, sys_user_sex, dy_user_ban_mode,dy_user_sign } = toRefs<any>( const { dy_user_ban_days, dy_user_status, sys_user_sex, dy_user_ban_mode } = toRefs<any>(
proxy?.useDict('dy_user_ban_days', 'dy_user_status', 'sys_user_sex', 'dy_user_ban_mode','dy_user_sign') proxy?.useDict('dy_user_ban_days', 'dy_user_status', 'sys_user_sex', 'dy_user_ban_mode')
); );
const orderLists = ref([]); // const orderLists = ref([]); //
const scenicList = ref([]); // const scenicList = ref([]); //
@ -528,8 +514,8 @@ const handleStatus = async (row: DyUserVO) => {
await proxy?.$modal.confirm('是否确认解封用户昵称为"' + row.nickName + '"的数据项?') await proxy?.$modal.confirm('是否确认解封用户昵称为"' + row.nickName + '"的数据项?')
Object.assign(form.value, row); Object.assign(form.value, row);
form.value.status = 0; form.value.status = 0;
form.value.reason = ''; form.value.reason = null;
form.value.banDays='0'; form.value.banDays=null
loading.value = true; loading.value = true;
await updateDyUser(form.value).finally(() => (loading.value = false)); await updateDyUser(form.value).finally(() => (loading.value = false));
proxy?.$modal.msgSuccess('操作成功'); proxy?.$modal.msgSuccess('操作成功');

View File

@ -16,7 +16,6 @@
<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>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
<el-button v-hasPermi="['manage:hotel:add']" type="primary" plain icon="Plus" @click="handleAdd">新增</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
@ -24,12 +23,23 @@
</transition> </transition>
<el-card shadow="never"> <el-card shadow="never">
<el-table v-loading="loading" :data="hotelList"> <template #header>
<el-table-column fixed label="序号" align="center" width="80"> <el-row :gutter="10" class="mb8">
<template #default="scope"> <el-col :span="1.5">
<span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span> <el-button v-hasPermi="['manage:hotel:add']" type="primary" plain icon="Plus" @click="handleAdd">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button v-hasPermi="['manage:hotel:remove']" type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"
>删除</el-button
>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @query-table="getList"></right-toolbar>
</el-row>
</template> </template>
</el-table-column>
<el-table v-loading="loading" :data="hotelList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column v-if="true" label="ID" align="center" prop="id" />
<el-table-column label="住宿商家名称" align="center" prop="name" /> <el-table-column label="住宿商家名称" align="center" prop="name" />
<el-table-column label="商家图片" align="center" prop="imageUrl" /> <el-table-column label="商家图片" align="center" prop="imageUrl" />
<el-table-column label="商家地理位置" align="center" prop="address" /> <el-table-column label="商家地理位置" align="center" prop="address" />
@ -303,7 +313,7 @@ const handleEdit = async (row?: HotelVO) => {
const res = await getHotel(_id); const res = await getHotel(_id);
Object.assign(form.value, res.data); Object.assign(form.value, res.data);
const _idname = row?.name; const _idname = row?.name;
const text = row?.status != 1 ? '是否确认发布商家名称为"' : '是否撤销发布商家名称为"'; const text = row?.status != 1 ? '是否确认发布商家名称为' : '是否撤销发布商家名称为';
const messages = row?.status != 1 ? '发布成功' : '撤销成功'; const messages = row?.status != 1 ? '发布成功' : '撤销成功';
await proxy?.$modal.confirm(text + _idname + '"的数据项?').finally(() => (loading.value = false)); await proxy?.$modal.confirm(text + _idname + '"的数据项?').finally(() => (loading.value = false));
const template = { const template = {
@ -333,6 +343,8 @@ const performSearch = async (text) => {
jsonp(`https://apis.map.qq.com/ws/geocoder/v1/?address=${text}&key=${'6XFBZ-SAVLT-JGIX2-VOLMK-6S2H3-XUBGO'}&output=jsonp`, {}).then((data) => { jsonp(`https://apis.map.qq.com/ws/geocoder/v1/?address=${text}&key=${'6XFBZ-SAVLT-JGIX2-VOLMK-6S2H3-XUBGO'}&output=jsonp`, {}).then((data) => {
console.log(data); console.log(data);
if (data.status == 0) { if (data.status == 0) {
center.value.lat = data.result.location.lat;
center.value.lng = data.result.location.lng;
form.value.address = form.value.address =
data.result.address_components.province + data.result.address_components.province +
data.result.address_components.city + data.result.address_components.city +
@ -345,7 +357,6 @@ const performSearch = async (text) => {
form.value.regionCode = data.result.ad_info.adcode; // form.value.regionCode = data.result.ad_info.adcode; //
// form.value.province = data.result.address_components.province; // form.value.province = data.result.address_components.province;
// form.value.city = data.result.address_components.city; // form.value.city = data.result.address_components.city;
center.value = { lat: data.result.location.lat, lng: data.result.location.lng };
geometries.value = [{ styleId: 'marker', position: { lat: data.result.location.lat, lng: data.result.location.lng } }]; geometries.value = [{ styleId: 'marker', position: { lat: data.result.location.lat, lng: data.result.location.lng } }];
} else if (data.status == 348) { } else if (data.status == 348) {
// //
@ -375,7 +386,8 @@ const onClick = (e: any) => {
// form.value.city = data.result.address_component.city; // form.value.city = data.result.address_component.city;
// form.value.region = data.result.ad_info.adcode; // // form.value.region = data.result.ad_info.adcode; //
form.value.regionCode = data.result.ad_info.adcode; // form.value.regionCode = data.result.ad_info.adcode; //
center.value = { lat: data.result.location.lat, lng: data.result.location.lng }; center.value.lat = data.result.location.lat;
center.value.lng = data.result.location.lng;
searchLocation.value = data.result.formatted_addresses.recommend; searchLocation.value = data.result.formatted_addresses.recommend;
geometries.value = [{ styleId: 'marker', position: { lat: data.result.location.lat, lng: data.result.location.lng } }]; geometries.value = [{ styleId: 'marker', position: { lat: data.result.location.lat, lng: data.result.location.lng } }];
} }

View File

@ -12,9 +12,8 @@
<el-form-item label="发布状态" prop="status"> <el-form-item label="发布状态" prop="status">
<el-select v-model="queryParams.status" class="inputWidth" placeholder="请选择发布状态" clearable <el-select v-model="queryParams.status" class="inputWidth" placeholder="请选择发布状态" clearable
@keyup.enter="handleQuery"> @keyup.enter="handleQuery">
<el-option label="已发布" :value="1" />
<el-option label="未发布" :value="0" /> <el-option label="未发布" :value="0" />
<el-option label="审核中" :value="1" />
<el-option label="已发布" :value="2" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@ -42,9 +41,8 @@
<el-table-column label="排序" align="center" prop="shor" /> <el-table-column label="排序" align="center" prop="shor" />
<el-table-column label="发布状态" align="center" prop="status"> <el-table-column label="发布状态" align="center" prop="status">
<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 == 1" type="success">已发布</el-tag>
<el-tag v-else-if="scope.row.status == 1" type="success">审核中</el-tag> <el-tag v-else type="info">未发布</el-tag>
<el-tag v-else-if="scope.row.status == 1" type="primary">已发布</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="创建者" align="center" prop="createName" /> <el-table-column label="创建者" align="center" prop="createName" />
@ -58,7 +56,7 @@
<template #default="scope"> <template #default="scope">
<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"
v-hasPermi="['manage:ipImage:edit']">发布</el-button> v-hasPermi="['manage:ipImage:edit']">发布</el-button>
<el-button link type="primary" @click="handleStatus(scope.row,0)" v-if="scope.row.status==2" <el-button link type="primary" @click="handleStatus(scope.row,0)" v-if="scope.row.status==1"
v-hasPermi="['manage:ipImage:edit']">撤销发布</el-button> v-hasPermi="['manage:ipImage:edit']">撤销发布</el-button>
<el-tooltip content="编辑" placement="top"> <el-tooltip content="编辑" placement="top">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-if="scope.row.status == 0" <el-button link type="primary" @click="handleUpdate(scope.row)" v-if="scope.row.status == 0"
@ -246,7 +244,7 @@ const submitForm = () => {
/** 删除按钮操作 */ /** 删除按钮操作 */
const handleDelete = async (row?: IpImageVO) => { const handleDelete = async (row?: IpImageVO) => {
const _ids = row?.id || ids.value; const _ids = row?.id || ids.value;
await proxy?.$modal.confirm('是否确认删除IP形象为"' + row.ipName + '"的数据项?').finally(() => loading.value = false); await proxy?.$modal.confirm('是否确认删除IP形象编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
await delIpImage(_ids); await delIpImage(_ids);
proxy?.$modal.msgSuccess("删除成功"); proxy?.$modal.msgSuccess("删除成功");
await getList(); await getList();

View File

@ -37,8 +37,7 @@
</el-table-column> </el-table-column>
<el-table-column label="状态" align="center" prop="status"> <el-table-column label="状态" align="center" prop="status">
<template #default="scope"> <template #default="scope">
<el-tag v-if="scope.row.status == 0" type="info">未发布</el-tag> <span>{{ scope.row.status == 0 ? '未发布' : '已发布' }}</span>
<el-tag v-if="scope.row.status == 1" type="primary">已发布</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="创建者" align="center" prop="createName" /> <el-table-column label="创建者" align="center" prop="createName" />

View File

@ -15,7 +15,6 @@
<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>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
<el-button v-hasPermi="['manage:mkJigsaw:add']" type="primary" plain icon="Plus" @click="handleAdd">新增</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
@ -23,14 +22,23 @@
</transition> </transition>
<el-card shadow="never"> <el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button v-hasPermi="['manage:mkJigsaw:add']" type="primary" plain icon="Plus" @click="handleAdd">新增</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @query-table="getList"></right-toolbar>
</el-row>
</template>
<el-table v-loading="loading" :data="mkJigsawList"> <el-table v-loading="loading" :data="mkJigsawList">
<el-table-column label="任务名称" align="center" prop="name" show-overflow-tooltip /> <el-table-column label="任务名称" align="center" prop="name" />
<el-table-column label="任务类别" align="center" prop="category"> <el-table-column label="任务类别" align="center" prop="category">
<template #default="scope"> <template #default="scope">
<dict-tag :options="mk_jigsaw_task_catagory" :value="scope.row.category" /> <dict-tag :options="mk_jigsaw_task_catagory" :value="scope.row.category" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="商品ID" align="center" prop="productId" show-overflow-tooltip /> <el-table-column label="商品ID" align="center" prop="productId" />
<el-table-column label="商品名称" align="center" prop="productName" /> <el-table-column label="商品名称" align="center" prop="productName" />
<el-table-column label="商品类别" align="center" prop="productCategory"> <el-table-column label="商品类别" align="center" prop="productCategory">
<template #default="scope"> <template #default="scope">
@ -45,16 +53,8 @@
</el-table-column> </el-table-column>
<el-table-column label="拼图数量" align="center" prop="jigsawConfigCount" /> <el-table-column label="拼图数量" align="center" prop="jigsawConfigCount" />
<el-table-column label="设置得奖人数" align="center" prop="awardConfigCount" /> <el-table-column label="设置得奖人数" align="center" prop="awardConfigCount" />
<el-table-column label="参与人数" align="center" prop="joinCount"> <el-table-column label="参与人数" align="center" prop="joinCount" />
<template #default="scope"> <el-table-column label="实际得奖人数" align="center" prop="awardCount" />
<el-button type="primary" link>{{ scope.row.joinCount }}</el-button>
</template>
</el-table-column>
<el-table-column label="实际得奖人数" align="center" prop="awardCount">
<template #default="scope">
<el-button type="primary" link>{{ scope.row.awardCount }}</el-button>
</template>
</el-table-column>
<el-table-column label="拼图碎片获得人数" align="center" prop="awardCount"> <el-table-column label="拼图碎片获得人数" align="center" prop="awardCount">
<template #default="scope"> <template #default="scope">
<el-button type="primary" link @click="imagesui(scope.row)">查看详情</el-button> <el-button type="primary" link @click="imagesui(scope.row)">查看详情</el-button>
@ -73,9 +73,9 @@
<el-tag v-if="scope.row.status == 2" type="primary">已发布</el-tag> <el-tag v-if="scope.row.status == 2" type="primary">已发布</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="创建人" align="center" prop="createName" show-overflow-tooltip /> <el-table-column label="创建人" align="center" prop="createName" />
<el-table-column label="创建时间" align="center" prop="createTime" show-overflow-tooltip /> <el-table-column label="创建时间" align="center" prop="createTime" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="150px"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="120px">
<template #default="scope"> <template #default="scope">
<el-button v-if="scope.row.status == 0" v-hasPermi="['manage:mkJigsaw:edit']" link type="primary" @click="handleUpdate(scope.row, 2)" <el-button v-if="scope.row.status == 0" v-hasPermi="['manage:mkJigsaw:edit']" link type="primary" @click="handleUpdate(scope.row, 2)"
>编辑</el-button >编辑</el-button
@ -130,8 +130,8 @@
start-placeholder="选择开始时间" start-placeholder="选择开始时间"
end-placeholder="选择结束时间" end-placeholder="选择结束时间"
format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"
date-format="YYYY/MM/DD" date-format="YYYY/MM/DD ddd"
time-format="HH:mm:ss" time-format="A hh:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"
:picker-options="{ disabledDate: dateOptions }" :picker-options="{ disabledDate: dateOptions }"
@change="mkdatetime" @change="mkdatetime"
@ -195,20 +195,20 @@
<div>{{ form.startDate }}~{{ form.endDate }}</div> <div>{{ form.startDate }}~{{ form.endDate }}</div>
</el-form-item> </el-form-item>
<el-form-item label="设置拼图数量"> <el-form-item label="设置拼图数量">
<div>{{ form.jigsawConfigCount }}</div> <div>{{form.jigsawConfigCount}}</div>
</el-form-item> </el-form-item>
<el-form-item label="得奖人数"> <el-form-item label="得奖人数">
<div>{{ form.awardConfigCount }}</div> <div>{{form.awardConfigCount}}</div>
</el-form-item> </el-form-item>
<el-form-item label="控制得奖拼图"> <el-form-item label="控制得奖拼图">
<el-select v-model="form.controlJigsawIndex" placeholder="请选择控制得奖拼图" style="width: 300px" disabled @change="selectnumlist"> <el-select v-model="form.controlJigsawIndex" placeholder="请选择控制得奖拼图" style="width: 300px" @change="selectnumlist" disabled>
<el-option v-for="dict in numlist" :key="dict.label" :label="dict.label" :value="dict.label"></el-option> <el-option v-for="dict in numlist" :key="dict.label" :label="dict.label" :value="dict.label"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<div class="numlistclasss"> <div class="numlistclasss">
<div v-for="item in numlistdata" :key="item.name"> <div v-for="item in numlistdata" :key="item.name">
<el-form-item :label="`${item.name}:可获得概率`"> <el-form-item :label="`${item.name}:可获得概率`">
<div>{{ item.probability }}%</div> <div>{{item.probability}}%</div>
</el-form-item> </el-form-item>
</div> </div>
</div> </div>

View File

@ -31,11 +31,7 @@
<el-table v-loading="loading" border :data="mkPostcardList" :height="autoTableHeight" <el-table v-loading="loading" border :data="mkPostcardList" :height="autoTableHeight"
@selection-change="handleSelectionChange"> @selection-change="handleSelectionChange">
<el-table-column label="序号" align="center" width="80"> <el-table-column label="ID" align="center" prop="id" v-if="true" width="150" />
<template #default="scope">
<span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column label="明信片名称" align="center" prop="name" /> <el-table-column label="明信片名称" align="center" prop="name" />
<el-table-column label="关联景点" align="center" prop="articleId"> <el-table-column label="关联景点" align="center" prop="articleId">
<template #default="scope"> <template #default="scope">
@ -57,8 +53,7 @@
<!-- 0-未上架 1-已上架 --> <!-- 0-未上架 1-已上架 -->
<el-table-column label="状态" align="center" prop="status"> <el-table-column label="状态" align="center" prop="status">
<template #default="scope"> <template #default="scope">
<el-tag v-if="scope.row.status == 0" type="info">未上架</el-tag> <span>{{ scope.row.status == 1 ? '已上架' : '未上架'}}</span>
<el-tag v-if="scope.row.status == 1" type="primary">已上架</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="创建者" align="center" prop="updateByName" /> <el-table-column label="创建者" align="center" prop="updateByName" />

View File

@ -1,32 +1,33 @@
<!-- 笔记管理 --> <!-- 笔记管理 -->
<template> <template>
<div class="p-2"> <div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter"
:leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="笔记标题" prop="id"> <el-form-item label="笔记标题" prop="id">
<el-input v-model="queryParams.title" placeholder="请输入笔记标题" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.title" placeholder="请输入笔记标题" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="发布人" prop="updateByName"> <el-form-item label="发布人" prop="title">
<el-input v-model="queryParams.updateByName" placeholder="请输入发布人" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.title" placeholder="请输入发布人" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="标记地点" prop="cover"> <el-form-item label="标记地点" prop="cover">
<!-- <el-input v-model="queryParams.cover" placeholder="请输入标记地点" clearable @keyup.enter="handleQuery" />--> <!-- <el-input v-model="queryParams.cover" placeholder="请输入标记地点" clearable @keyup.enter="handleQuery" />-->
<el-select v-model="queryParams.location" placeholder="请选择标记地点" style="width: 240px"> <el-select v-model="queryParams.cover" placeholder="请选择标记地点" style="width: 240px">
<el-option v-for="item in sys_user_contentOptions" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in sys_user_contentOptions" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="发布状态" prop="tagId"> <el-form-item label="发布状态" prop="tagId">
<!-- <el-input v-model="queryParams.tagId" placeholder="请输入标签" clearable @keyup.enter="handleQuery" /> --> <!-- <el-input v-model="queryParams.tagId" placeholder="请输入标签" clearable @keyup.enter="handleQuery" /> -->
<el-select v-model="queryParams.status" placeholder="请选择发布状态" style="width: 240px" @keyup.enter="handleQuery"> <el-select v-model="queryParams.tagId" placeholder="请选择发布状态" style="width: 240px"
@keyup.enter="handleQuery">
<el-option v-for="item in statusoptions" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in statusoptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </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>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
<el-button v-hasPermi="['manage:notebook:add']" type="primary" plain icon="Plus" @click="handleAdd">新增 </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
@ -34,26 +35,41 @@
</transition> </transition>
<el-card shadow="never"> <el-card shadow="never">
<el-table v-loading="loading" :data="notebookList" border @selection-change="handleSelectionChange"> <template #header>
<!-- <el-table-column type="selection" width="55" align="center" />--> <el-row :gutter="10" class="mb8">
<el-table-column label="序号" align="center" width="80"> <el-col :span="1.5">
<template #default="scope"> <el-button v-hasPermi="['manage:notebook:add']" type="primary" plain icon="Plus" @click="handleAdd">新增
<span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span> </el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button v-hasPermi="['manage:notebook:remove']" type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"-->
<!-- >删除-->
<!-- </el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">
<el-button v-hasPermi="['manage:notebook:export']" type="warning" plain icon="Download"
@click="handleExport">导出 </el-button>
</el-col> -->
<right-toolbar v-model:showSearch="showSearch" @query-table="getList"></right-toolbar>
</el-row>
</template> </template>
</el-table-column>
<el-table-column label="笔记标题" align="center" prop="title" show-overflow-tooltip /> <el-table v-loading="loading" :data="notebookList" @selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" width="55" align="center" />-->
<el-table-column v-if="true" label="ID" align="center" prop="id" />
<el-table-column label="笔记标题" align="center" prop="title" />
<el-table-column label="笔记封面" align="center" prop="cover"> <el-table-column label="笔记封面" align="center" prop="cover">
<template #default="scope"> <template #default="scope">
<image-preview :src="scope.row.cover" :width="40" :height="40" /> <image-preview :src="scope.row.cover" :width="50" :height="50" />
<!-- <image-preview :src="scope.row.productImageUrl" /> --> <!-- <image-preview :src="scope.row.productImageUrl" /> -->
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="标记地点" align="center" prop="location" show-overflow-tooltip> <el-table-column label="标记地点" align="center" prop="location">
<template #default="scope"> <template #default="scope">
<span>{{ formatlocation(scope.row.location) }}</span> <span>{{ formatlocation(scope.row.location) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="标签" align="center" prop="tagId" show-overflow-tooltip> <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>
@ -85,36 +101,23 @@
<el-table-column label="操作时间" align="center" prop="updateTime" width="200px" /> <el-table-column label="操作时间" align="center" prop="updateTime" width="200px" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="150px"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="150px">
<template #default="scope"> <template #default="scope">
<el-button <el-button v-if="scope.row.status == 0||scope.row.status == 1" v-hasPermi="['manage:notebook:edit']" link
v-if="scope.row.status == 0 || scope.row.status == 1" type="primary" @click="handleUpdate(scope.row)">编辑</el-button>
v-hasPermi="['manage:notebook:edit']" <el-button v-if="scope.row.status == 0" v-hasPermi="['manage:notebook:edit']" link type="primary"
link @click="fabudata(scope.row)">发布</el-button>
type="primary" <el-button v-if="scope.row.status == 3" v-hasPermi="['manage:notebook:edit']" link type="primary"
@click="handleUpdate(scope.row)" @click="fabudata(scope.row)">撤销发布</el-button>
>编辑</el-button
>
<el-button v-if="scope.row.status == 0" v-hasPermi="['manage:notebook:edit']" link type="primary" @click="fabudata(scope.row)"
>发布</el-button
>
<el-button v-if="scope.row.status == 3" v-hasPermi="['manage:notebook:edit']" link type="primary" @click="fabudata(scope.row)"
>撤销发布</el-button
>
<!-- <el-tooltip content="发布" placement="top">--> <!-- <el-tooltip content="发布" placement="top">-->
<!-- <el-button v-hasPermi="['manage:notebook:edit']" link type="primary" icon="Edit" @click="handleUpdate(scope.row)"></el-button>--> <!-- <el-button v-hasPermi="['manage:notebook:edit']" link type="primary" icon="Edit" @click="handleUpdate(scope.row)"></el-button>-->
<!-- </el-tooltip>--> <!-- </el-tooltip>-->
<el-button <el-button v-if="scope.row.status == 0||scope.row.status == 1" v-hasPermi="['manage:notebook:remove']" link
v-if="scope.row.status == 0 || scope.row.status == 1" type="primary" @click="handleDelete(scope.row)">删除</el-button>
v-hasPermi="['manage:notebook:remove']"
link
type="primary"
@click="handleDelete(scope.row)"
>删除</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination v-show="total > 0" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" :total="total" @pagination="getList" /> <pagination v-show="total > 0" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
:total="total" @pagination="getList" />
</el-card> </el-card>
<!-- 添加或修改笔记对话框 --> <!-- 添加或修改笔记对话框 -->
<el-dialog v-model="dialog.visible" :title="dialog.title" width="60%" append-to-body> <el-dialog v-model="dialog.visible" :title="dialog.title" width="60%" append-to-body>
@ -153,8 +156,11 @@
</template> </template>
</el-dialog> </el-dialog>
<!-- 笔记详情--> <!-- 笔记详情-->
<el-dialog v-model="concentdialog.visible" title="笔记详情" width="500px" append-to-body> <el-dialog v-model="concentdialog.visible" title="笔记详情" width="50%" append-to-body>
<note :form="form"></note> <div>{{ form.title }}</div>
<div>{{ formatTag(form.tagId) }}</div>
<div>{{ formatlocation(form.location) }}</div>
<div v-html="form.content"></div>
</el-dialog> </el-dialog>
<!-- 评论详情 --> <!-- 评论详情 -->
<el-dialog v-model="comment.visible" title="评论详情" width="600px" append-to-body> <el-dialog v-model="comment.visible" title="评论详情" width="600px" append-to-body>
@ -299,9 +305,9 @@ const formatTag = (tagId: string | null) => {
// } // }
for (let i = 0; i < sys_user_tagOptions.value.length; i++) { for (let i = 0; i < sys_user_tagOptions.value.length; i++) {
const element = sys_user_tagOptions.value[i]; const element = sys_user_tagOptions.value[i];
if (tagId != null) { if (tagId!=null) {
let filteredArray = tagId.split(',').filter((item) => item == element.id); let filteredArray = tagId.split(',').filter((item) => item==element.id);
if (filteredArray.length > 0) { if (filteredArray.length>0) {
tagString += '' + element.title; tagString += '' + element.title;
} }
} }
@ -380,8 +386,6 @@ const handleSelectionChange = (selection: NotebookVO[]) => {
const handleAdd = () => { const handleAdd = () => {
reset(); reset();
dialog.visible = true; dialog.visible = true;
tagvalue.value = '';
addressvalue.value = '';
dialog.title = '添加笔记'; dialog.title = '添加笔记';
}; };
@ -391,8 +395,8 @@ const handleUpdate = async (row?: NotebookVO) => {
const _id = row?.id || ids.value[0]; const _id = row?.id || ids.value[0];
const res = await getNotebook(_id); const res = await getNotebook(_id);
Object.assign(form.value, res.data); Object.assign(form.value, res.data);
tagvalue.value = form.value.tagId && form.value.tagId.split(','); tagvalue.value = form.value.tagId.split(',');
addressvalue.value = form.value.tagId && form.value.location.split(','); addressvalue.value = form.value.location.split(',');
dialog.visible = true; dialog.visible = true;
dialog.title = '修改笔记'; dialog.title = '修改笔记';
}; };

View File

@ -71,11 +71,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="订单号" align="center" prop="orderNumber" /> <el-table-column label="订单号" align="center" prop="orderNumber" />
<el-table-column label="来源" align="center" prop="source" width="80px"> <el-table-column label="来源" align="center" prop="source" width="80px" />
<template #default="scope">
<dict-tag :options="dy_order_source" :value="scope.row.source" />
</template>
</el-table-column>
<el-table-column label="商品名称" align="center" prop="productName" /> <el-table-column label="商品名称" align="center" prop="productName" />
<el-table-column label="商品图片" align="center" prop="productImageUrl" width="100"> <el-table-column label="商品图片" align="center" prop="productImageUrl" width="100">
<template #default="scope"> <template #default="scope">
@ -90,9 +86,7 @@
<el-table-column label="供应商" align="center" prop="vendorId" /> <el-table-column label="供应商" align="center" prop="vendorId" />
<el-table-column label="订单状态" align="center" prop="orderStatus"> <el-table-column label="订单状态" align="center" prop="orderStatus">
<template #default="scope"> <template #default="scope">
<!-- <dict-tag :options="dy_order_status" :value="scope.row.orderStatus" /> --> <dict-tag :options="dy_order_status" :value="scope.row.orderStatus" />
<el-tag v-if="scope.row.orderStatus == 0" type="info">未发货</el-tag>
<el-tag v-if="scope.row.orderStatus == 1" type="primary">已发货</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="物流名称" align="center" prop="logisticsName" /> <el-table-column label="物流名称" align="center" prop="logisticsName" />
@ -100,8 +94,8 @@
<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-button link type="primary" v-if="scope.row.orderStatus == 0" v-hasPermi="['manage:orders:edit']" <el-button link type="primary" v-if="scope.row.orderStatus == 0" v-hasPermi="['manage:orders:edit']"
@click="handleOrderStatus(scope.row,1)">发货</el-button> @click="handleOrderStatus(scope.row,'1')">发货</el-button>
<el-button link type="primary" @click="handleOrderStatus(scope.row,0)" v-if="scope.row.orderStatus == 1" <el-button link type="primary" @click="handleOrderStatus(scope.row,'0')" v-if="scope.row.orderStatus == 1"
v-hasPermi="['manage:orders:edit']">撤销发货</el-button> v-hasPermi="['manage:orders:edit']">撤销发货</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -273,10 +267,9 @@ const handleAdd = () => {
*/ */
const handleOrderStatus = async (row: OrdersVO,type:string|number) => { const handleOrderStatus = async (row: OrdersVO,type:string|number) => {
await proxy?.$modal.confirm('是否确认' + (type == '0' ? '撤销发货' : '发货') + '商品名称为"' + row.productName + '"的数据项?'); await proxy?.$modal.confirm('是否确认' + (type == '0' ? '撤销发货' : '发货') + '商品名称为"' + row.productName + '"的数据项?');
Object.assign(form.value, row); row.orderStatus = type;
form.value.orderStatus = type;
buttonLoading.value = true; buttonLoading.value = true;
await updateOrders(form.value).finally(() => (buttonLoading.value = false)); await updateOrders(row).finally(() => (buttonLoading.value = false));
proxy?.$modal.msgSuccess('操作成功'); proxy?.$modal.msgSuccess('操作成功');
getList(); getList();
} }

View File

@ -32,12 +32,7 @@
<el-table v-loading="loading" border :height="autoTableHeight" :data="productList" <el-table v-loading="loading" border :height="autoTableHeight" :data="productList"
@selection-change="handleSelectionChange"> @selection-change="handleSelectionChange">
<!-- <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 fixed label="序号" align="center" width="80">
<template #default="scope">
<span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column label="商品名称" align="center" prop="productName" /> <el-table-column label="商品名称" align="center" prop="productName" />
<el-table-column label="商品类别" align="center" prop="categoryId"> <el-table-column label="商品类别" align="center" prop="categoryId">
<template #default="scope"> <template #default="scope">
@ -53,9 +48,7 @@
<el-table-column label="排序" align="center" prop="sortNum" /> <el-table-column label="排序" align="center" prop="sortNum" />
<el-table-column label="商品状态" align="center" prop="status"> <el-table-column label="商品状态" align="center" prop="status">
<template #default="scope"> <template #default="scope">
<!-- <dict-tag :options="sys_shelf_status" :value="scope.row.status" /> --> <dict-tag :options="sys_shelf_status" :value="scope.row.status" />
<el-tag v-if="scope.row.status == 0" type="info">未上架</el-tag>
<el-tag v-if="scope.row.status == 1" type="primary">已上架</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="供应商" align="center" prop="vendorId"> <el-table-column label="供应商" align="center" prop="vendorId">

View File

@ -133,7 +133,7 @@ const productCategoryFormRef = ref<ElFormInstance>();
const wishParams = reactive({ const wishParams = reactive({
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
productCategoryId: undefined, id: undefined,
}) })
const dialog = reactive<DialogOption>({ const dialog = reactive<DialogOption>({
visible: false, visible: false,
@ -274,7 +274,7 @@ const handleMakeWish = async (row: ProductCategoryVO) => {
return return
} }
loading.value = true; loading.value = true;
wishParams.productCategoryId= row.id; wishParams.id= row.id;
getWishUserList(); getWishUserList();
makeWish.visible = true; makeWish.visible = true;
} }

View File

@ -5,21 +5,20 @@
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="用户昵称" prop="contentId"> <el-form-item label="用户昵称" prop="contentId">
<el-input v-model="queryParams.nickName" placeholder="请输入用户昵称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.contentId" placeholder="请输入用户昵称" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label=" 状态"> <el-form-item label="账号状态" prop="handlingStatus">
<el-select v-model="queryParams.handlingStatus" placeholder="请选择状态" clearable> <el-select v-model="queryParams.handlingStatus" placeholder="请选择状态" clearable>
<el-option label="未处理" value="0" /> <!-- <el-option v-for="dict in dy_banned_handling_status" :key="dict.value" :label="dict.label" :value="dict.value" />-->
<el-option label="已处理" value="1" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="性别"> <el-form-item label="性别" prop="handlingStatus">
<el-select v-model="queryParams.sex" placeholder="请选择用户性别" clearable> <el-select 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>
</el-form-item> </el-form-item>
<el-form-item label="会员等级"> <el-form-item label="会员等级" prop="handlingStatus">
<el-select v-model="queryParams.levelId" placeholder="请选择状态" clearable> <el-select v-model="queryParams.handlingStatus" placeholder="请选择状态" clearable>
<el-option v-for="dict in dy_banned_handling_status" :key="dict.id" :label="dict.levelName" :value="dict.id" /> <el-option v-for="dict in dy_banned_handling_status" :key="dict.id" :label="dict.levelName" :value="dict.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -43,25 +42,25 @@
</template> </template>
<el-table v-loading="loading" :data="bannedList"> <el-table v-loading="loading" :data="bannedList">
<el-table-column v-if="queryParams.type == 1" label="笔记名称" align="center" prop="contentId"> <el-table-column v-if="queryParams.type == 1" label="笔记名称" align="center" prop="contentId" >
<template #default="scope"> <template #default="scope">
<el-button type="primary" link>{{ scope.row.contentName }}</el-button> <el-button type="primary" link>查看笔记</el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column v-if="queryParams.type == 2" label="活动名称" align="center" prop="contentId"> <el-table-column v-if="queryParams.type == 2" label="活动名称" align="center" prop="contentId" >
<template #default="scope"> <template #default="scope">
<el-button type="primary" link>{{ scope.row.contentName }}</el-button> <el-button type="primary" link>查看活动</el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column v-if="queryParams.type == 3" label="评论内容" align="center" prop="contentId"> <el-table-column v-if="queryParams.type == 3" label="评论内容" align="center" prop="contentId" >
<template #default="scope"> <template #default="scope">
<el-button type="primary" link>{{ scope.row.contentName }}</el-button> <el-button type="primary" link>查看笔记</el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="用户ID" align="center" prop="reportUserId" /> <el-table-column label="用户ID" align="center" prop="reportUserId" />
<el-table-column label="会员等级" align="center" prop="userLevel"> <el-table-column label="会员等级" align="center" prop="userLevel">
<template #default="scope"> <template #default="scope">
<div>{{ formatlevel(scope.row.levelId) }}</div> <div>{{formatlevel(scope.row.levelId)}}</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="昵称" align="center" prop="nickName" /> <el-table-column label="昵称" align="center" prop="nickName" />
@ -76,7 +75,7 @@
<el-table-column label="举报时间" align="center" prop="createTime" width="200px" /> <el-table-column label="举报时间" align="center" prop="createTime" width="200px" />
<el-table-column label="操作时间" align="center" prop="updateTime" width="200px" /> <el-table-column label="操作时间" align="center" prop="updateTime" width="200px" />
<el-table-column label="操作人" align="center" prop="updateName" width="150px" /> <el-table-column label="操作人" align="center" prop="updateName" width="150px" />
<el-table-column label="状态" align="center" prop="handlingStatus"> <el-table-column label="状态" align="center" prop="handlingStatus" >
<template #default="scope"> <template #default="scope">
<el-tag v-if="scope.row.handlingStatus == 0" type="info">未处理</el-tag> <el-tag v-if="scope.row.handlingStatus == 0" type="info">未处理</el-tag>
<el-tag v-if="scope.row.handlingStatus == 1" type="warning">已处理</el-tag> <el-tag v-if="scope.row.handlingStatus == 1" type="warning">已处理</el-tag>
@ -85,15 +84,7 @@
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="150px"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="150px">
<template #default="scope"> <template #default="scope">
<el-button v-hasPermi="['manage:report:edit']" link type="primary" @click="handleUpdate(scope.row)">封禁</el-button> <el-button v-hasPermi="['manage:report:edit']" link type="primary" @click="handleUpdate(scope.row)">封禁</el-button>
<el-button v-if="queryParams.type == 1" v-hasPermi="['manage:report:remove']" link type="primary" @click="handleDelete(scope.row)" <el-button v-hasPermi="['manage:report:remove']" link type="primary" @click="handleDelete(scope.row)">删除{{ radio1 }}</el-button>
>删除笔记</el-button
>
<el-button v-if="queryParams.type == 2" v-hasPermi="['manage:report:remove']" link type="primary" @click="handleDelete(scope.row)"
>删除活动</el-button
>
<el-button v-if="queryParams.type == 3" v-hasPermi="['manage:report:remove']" link type="primary" @click="handleDelete(scope.row)"
>删除评论</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -133,7 +124,6 @@
<script setup name="Banned" lang="ts"> <script setup name="Banned" lang="ts">
import { listBanned, getBanned, delBanned, addBanned, updateBanned, userLevelall } from '@/api/manage/banned'; import { listBanned, getBanned, delBanned, addBanned, updateBanned, userLevelall } from '@/api/manage/banned';
import { BannedVO, BannedQuery, BannedForm } from '@/api/manage/banned/types'; import { BannedVO, BannedQuery, BannedForm } from '@/api/manage/banned/types';
import { delNotebook } from '@/api/manage/notebook';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { dy_banned_handling_method, sys_user_sex, dy_banned_ban_reason, dy_user_ban_days } = toRefs<any>( const { dy_banned_handling_method, sys_user_sex, dy_banned_ban_reason, dy_user_ban_days } = toRefs<any>(
@ -181,7 +171,6 @@ const data = reactive<PageData<BannedForm, BannedQuery>>({
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
nickName: undefined,
contentId: undefined, contentId: undefined,
reportUserId: undefined, reportUserId: undefined,
reportReason: undefined, reportReason: undefined,
@ -240,10 +229,6 @@ const handleQuery = () => {
/** 重置按钮操作 */ /** 重置按钮操作 */
const resetQuery = () => { const resetQuery = () => {
queryFormRef.value?.resetFields(); queryFormRef.value?.resetFields();
queryParams.value.nickName = '';
queryParams.value.sex = '';
queryParams.value.handlingStatus = '';
queryParams.value.levelId = '';
handleQuery(); handleQuery();
}; };
@ -290,11 +275,9 @@ const submitForm = () => {
/** 删除按钮操作 */ /** 删除按钮操作 */
const handleDelete = async (row?: BannedVO) => { const handleDelete = async (row?: BannedVO) => {
const _ids = row?.contentId; const _ids = row?.id || ids.value;
const _idsname = row?.contentName; await proxy?.$modal.confirm('是否确认删除举报编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
const text = queryParams.value.type == 1 ? '笔记名称为“' : queryParams.value.type == 2 ? '活动名称为“' : '评论内容为“'; await delBanned(_ids);
await proxy?.$modal.confirm('是否确认删除' + text + _idsname + '"的数据项?').finally(() => (loading.value = false));
await delNotebook(_ids);
proxy?.$modal.msgSuccess('删除成功'); proxy?.$modal.msgSuccess('删除成功');
await getList(); await getList();
}; };

View File

@ -1,34 +1,35 @@
<!-- 路线导航管理列表 --> <!-- 路线导航管理列表 -->
<template> <template>
<div class="p-2"> <div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter"
:leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" id="search_div" class="mb-[10px]"> <div v-show="showSearch" id="search_div" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="70px"> <el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="70px">
<el-form-item label="线路标题" prop=""> <el-form-item label="线路标题" prop="">
<el-input v-model="queryParams.title" class="inputWidth" placeholder="请输入线路标题" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.title" class="inputWidth" placeholder="请输入线路标题" clearable
@keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="发布状态" prop=""> <el-form-item label="发布状态" prop="">
<el-select v-model="queryParams.status" class="inputWidth" placeholder="请选择发布状态" clearable> <el-select v-model="queryParams.status" class="inputWidth" placeholder="请选择发布状态" clearable>
<el-option v-for="dict in note_publish_list" :key="dict.value" :label="dict.label" :value="dict.value" /> <el-option v-for="dict in note_publish_list" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select> </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>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
<el-button v-hasPermi="['system:Route:add']" type="primary" plain icon="Plus" @click="handleAdd">新增</el-button> <el-button v-hasPermi="['system:Route:add']" type="primary" plain icon="Plus"
@click="handleAdd">新增</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
</div> </div>
</transition> </transition>
<el-table v-loading="loading" :height="autoTableHeight" :data="RouteList" border @selection-change="handleSelectionChange"> <el-table v-loading="loading" :height="autoTableHeight" :data="RouteList" border
<el-table-column fixed label="序号" align="center" width="80"> @selection-change="handleSelectionChange">
<template #default="scope"> <el-table-column label="ID" align="center" prop="id" width="180px" fixed />
<span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column label="线路标题" align="center" prop="title" width="150px" show-overflow-tooltip fixed /> <el-table-column label="线路标题" align="center" prop="title" width="150px" show-overflow-tooltip fixed />
<el-table-column label="线路封面" align="center" prop="" /> <el-table-column label="线路封面" align="center" prop="" />
<el-table-column label="线路标签" align="center" prop="tagId" width="150px" show-overflow-tooltip> <el-table-column label="线路标签" align="center" prop="tagId" width="150px" show-overflow-tooltip>
@ -79,40 +80,20 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160px" fixed="right"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160px" fixed="right">
<template #default="scope"> <template #default="scope">
<el-button <el-button v-if="scope.row.status == 0 || scope.row.status == 1" v-hasPermi="['system:Route:edit']" link
v-if="scope.row.status == 0 || scope.row.status == 1" type="primary" @click="handleUpdate(scope.row)">编辑</el-button>
v-hasPermi="['system:Route:edit']" <el-button v-if="scope.row.status == 0 || scope.row.status == 1" v-hasPermi="['system:Route:remove']" link
link type="primary" @click="handleDelete(scope.row)">删除</el-button>
type="primary" <el-button v-if="scope.row.status == 0" v-hasPermi="['system:Route:remove']" link type="primary"
@click="handleUpdate(scope.row)" @click="savelistrow(scope.row)">发布</el-button>
>编辑</el-button <el-button v-if="scope.row.status == 3" v-hasPermi="['system:Route:remove']" link type="primary"
> @click="savelistrow(scope.row)">撤销发布</el-button>
<el-button
v-if="scope.row.status == 0 || scope.row.status == 1"
v-hasPermi="['system:Route:remove']"
link
type="primary"
@click="handleDelete(scope.row)"
>删除</el-button
>
<el-button v-if="scope.row.status == 0" v-hasPermi="['system:Route:remove']" link type="primary" @click="savelistrow(scope.row)"
>发布</el-button
>
<el-button v-if="scope.row.status == 3" v-hasPermi="['system:Route:remove']" link type="primary" @click="savelistrow(scope.row)"
>撤销发布</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination v-show="total > 0" id="table_page" v-model:page="queryParams.pageNum"
v-show="total > 0" v-model:limit="queryParams.pageSize" :total="total" @pagination="getList" />
id="table_page"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
:total="total"
@pagination="getList"
/>
<!-- 添加或修改景点租赁管理对话框 --> <!-- 添加或修改景点租赁管理对话框 -->
<el-dialog v-model="dialog.visible" :title="dialog.title" width="60%" append-to-body> <el-dialog v-model="dialog.visible" :title="dialog.title" width="60%" append-to-body>
<el-form ref="RouteFormRef" :model="form" :rules="rules" label-width="120px"> <el-form ref="RouteFormRef" :model="form" :rules="rules" label-width="120px">
@ -129,8 +110,9 @@
<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>
</el-form-item> </el-form-item>
<el-form-item label="涉及的行政区域" prop="region"> <el-form-item label="涉及的行政区域" prop="treevalue">
<el-cascader v-model="treevalue" :options="regiontree" :props="props" clearable placeholder="请选择涉及的行政区域" style="width: 400px" /> <el-cascader v-model="treevalue" :options="regiontree" :props="props" clearable placeholder="请选择涉及的行政区域"
style="width: 400px" />
</el-form-item> </el-form-item>
<div style="display: flex"> <div style="display: flex">
<el-form-item label="行程天数" prop="routeDays"> <el-form-item label="行程天数" prop="routeDays">
@ -194,13 +176,15 @@
<el-input v-model="routeDetailsList.title" placeholder="请输入标题" style="width: 500px" /> <el-input v-model="routeDetailsList.title" placeholder="请输入标题" style="width: 500px" />
</el-form-item> </el-form-item>
<el-form-item label="描述"> <el-form-item label="描述">
<el-input v-model="routeDetailsList.description" placeholder="请输入描述" style="width: 500px" autosize type="textarea" /> <el-input v-model="routeDetailsList.description" placeholder="请输入描述" style="width: 500px" autosize
type="textarea" />
</el-form-item> </el-form-item>
<el-form-item label="添加地点"> <el-form-item label="添加地点">
<el-button type="primary" @click="addjingdain">添加景点</el-button> <el-button type="primary" @click="addjingdain">添加景点</el-button>
</el-form-item> </el-form-item>
<div v-for="(item, index) in routeDetailsList.lowerList" class="articlelist"> <div v-for="(item, index) in routeDetailsList.lowerList" class="articlelist">
<CircleClose v-if="index != 0" style="width: 2em; height: 2em; position: relative; left: 98%" @click="delLowerList(index)" /> <CircleClose v-if="index != 0" style="width: 2em; height: 2em; position: relative; left: 98%"
@click="delLowerList(index)" />
<el-form-item label="添加地点"> <el-form-item label="添加地点">
<el-select v-model="item.articleId" placeholder="请选择标记地点" size="large" style="width: 500px"> <el-select v-model="item.articleId" placeholder="请选择标记地点" size="large" style="width: 500px">
<el-option v-for="item in sys_user_contentOptions" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in sys_user_contentOptions" :key="item.id" :label="item.name" :value="item.id" />
@ -399,7 +383,7 @@ const data = reactive<PageData<RouteForm, RouteQuery>>({
routeDriveHour: [{ required: true, message: '行驶时长', trigger: 'blur' }], routeDriveHour: [{ required: true, message: '行驶时长', trigger: 'blur' }],
routeMileage: [{ required: true, message: '行程里数', trigger: 'blur' }], routeMileage: [{ required: true, message: '行程里数', trigger: 'blur' }],
routeDays: [{ required: true, message: '行程天数', trigger: 'blur' }], routeDays: [{ required: true, message: '行程天数', trigger: 'blur' }],
region: [{ required: true, message: '涉及的行政区不能为空', trigger: 'blur' }], region: [{ required: true, message: '涉及的行政区', trigger: 'blur' }],
tagId: [{ required: true, message: '标签不能为空', trigger: 'blur' }], tagId: [{ required: true, message: '标签不能为空', trigger: 'blur' }],
title: [{ required: true, message: '线路标题', trigger: 'blur' }] title: [{ required: true, message: '线路标题', trigger: 'blur' }]
} }
@ -526,9 +510,9 @@ const formatTag = (tagId: string | null) => {
// } // }
for (let i = 0; i < sys_user_tagOptions.value.length; i++) { for (let i = 0; i < sys_user_tagOptions.value.length; i++) {
const element = sys_user_tagOptions.value[i]; const element = sys_user_tagOptions.value[i];
if (tagId != null) { if (tagId!=null) {
let filteredArray = tagId.split(',').filter((item) => item == element.id); let filteredArray = tagId.split(',').filter((item) => item==element.id);
if (filteredArray.length > 0) { if (filteredArray.length>0) {
tagString += '' + element.title; tagString += '' + element.title;
} }
} }
@ -552,7 +536,7 @@ const handleUpdate = async (row?: RouteVO) => {
/** 提交按钮 */ /** 提交按钮 */
const submitForm = async (type) => { const submitForm = async (type) => {
form.value.tagId = tagvalue?.value.length != 0 ? tagvalue?.value.join(',') : ''; form.value.tagId = tagvalue?.value.length != 0 ? tagvalue?.value.join(',') : '';
form.value.region = treevalue?.value.length ==0?'': JSON.stringify(treevalue?.value); form.value.region = treevalue?.value ? JSON.stringify(treevalue?.value) : '';
form.value.status = Number(type); form.value.status = Number(type);
form.value.routeDetailsList = bookrouteDetailsList.value; form.value.routeDetailsList = bookrouteDetailsList.value;
if (type == 1) { if (type == 1) {

View File

@ -63,11 +63,6 @@
<el-table :height="autoTableHeight" v-loading="loading" :data="articleList" <el-table :height="autoTableHeight" v-loading="loading" :data="articleList"
@selection-change="handleSelectionChange" border> @selection-change="handleSelectionChange" border>
<el-table-column fixed label="序号" align="center" width="80">
<template #default="scope">
<span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column label="ID" align="center" prop="id" fixed v-if="false" width="50px" /> <el-table-column label="ID" align="center" prop="id" fixed v-if="false" width="50px" />
<el-table-column label="景点名称" align="center" prop="name" fixed v-if="queryParams.type == '0'" width="180px" /> <el-table-column label="景点名称" align="center" prop="name" fixed v-if="queryParams.type == '0'" width="180px" />
<el-table-column label="商家名称" align="center" prop="name" fixed v-if="queryParams.type != '0'" width="180px" /> <el-table-column label="商家名称" align="center" prop="name" fixed v-if="queryParams.type != '0'" width="180px" />
@ -110,37 +105,34 @@
<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="recommendNotebookCount"> <el-table-column label="喜欢数量" align="center" prop="likeCount" />
<el-table-column label="收藏数量" align="center" prop="collectionCount" />
<el-table-column label="相关笔记" align="center" prop="pubNotebookCount">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" v-if="scope.row.status!==3" @click="handleNote(scope.row)">1{{ <el-button link type="primary" v-if="scope.row.status!==3" @click="handleNote(scope.row)">11{{
scope.row.pubNotebookCount }}</el-button> scope.row.noteNumber }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="queryParams.type == '0' ?'景点评论数':queryParams.type == '1' ?'租车评论数':'游艇评论数'" align="center" <el-table-column label="笔记评论数" align="center" prop="notebookCommentCount" width="90px">
prop="commentCount" width="90px">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" v-if="scope.row.status!==3" @click="handleNote(scope.row)">1{{ <el-button link type="primary" v-if="scope.row.status!==3" @click="handleNote(scope.row)">11{{
scope.row.notebookCommentCount }}</el-button> scope.row.noteNumber }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="queryParams.type == '0' ?'景点喜欢数':queryParams.type == '1' ?'租车喜欢数':'游艇喜欢数'" align="center" <el-table-column label="笔记点赞数" align="center" prop="notebookAgreeCount" width="90px">
prop="agreeCount" width="90" />
<el-table-column :label="queryParams.type == '0' ?'景点收藏数':queryParams.type == '1' ?'租车收藏数':'游艇收藏数'" align="center"
prop="collectionCount" width="90" />
<!-- <el-table-column label="点赞数" align="center" prop="notebookAgreeCount" width="90px">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" v-if="scope.row.status!==3" @click="handleNote(scope.row)">1{{ <el-button link type="primary" v-if="scope.row.status!==3" @click="handleNote(scope.row)">11{{
scope.row.notebookAgreeCount }}</el-button> scope.row.noteNumber }}</el-button>
</template> </template>
</el-table-column> --> </el-table-column>
<!-- 0-未发布 1-审核中 2-发布 --> <!-- 0-未发布 1-审核中 2-发布 -->
<el-table-column label="发布状态" align="center" prop="status" width="100"> <el-table-column label="发布状态" align="center" prop="status" width="100">
<template #default="scope"> <template #default="scope">
<!-- <span>{{ scope.row.status == 0 ? '未发布' : scope.row.status == 1 ? '审核中' : scope.row.status == 2 ? '已发布' : '草稿' }}</span> --> <!-- <span>{{ scope.row.status == 0 ? '未发布' : scope.row.status == 1 ? '审核中' : scope.row.status == 2 ? '已发布' : '草稿' }}</span> -->
<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="warning">审核中</el-tag>
<el-tag v-if="scope.row.status == 2" type="primary">已发布</el-tag> <el-tag v-if="scope.row.status == 2" type="success">已发布</el-tag>
<el-tag v-if="scope.row.status == 3" type="warning">草稿</el-tag> <el-tag v-if="scope.row.status == 3" type="danger">草稿</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作人" align="center" prop="updateByName" width="120px" /> <el-table-column label="操作人" align="center" prop="updateByName" width="120px" />
@ -234,8 +226,7 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="标签" prop="tagId_copy"> <el-form-item label="标签" prop="tagId_copy">
<el-select class="inputWidth" v-model="form.tagId_copy" multiple filterable placeholder="请选择标签" clearable <el-select class="inputWidth" v-model="form.tagId_copy" multiple filterable placeholder="请选择标签" clearable>
@visible-change="getTagList">
<el-option v-for="dict in sys_user_tagOptions" :key="dict.id" :label="dict.title" <el-option v-for="dict in sys_user_tagOptions" :key="dict.id" :label="dict.title"
:value="String(dict.id)" /> :value="String(dict.id)" />
</el-select> </el-select>
@ -253,19 +244,12 @@
<el-col :span="24"> <el-col :span="24">
<el-form-item label="地理位置" prop="introduce"> <el-form-item label="地理位置" prop="introduce">
<!-- <el-input v-model="searchLocation" type="text" placeholder="请输入地址信息" clearable /> --> <!-- <el-input v-model="searchLocation" type="text" placeholder="请输入地址信息" clearable /> -->
<!-- <el-input v-model="searchLocation" placeholder="请输入地址信息" class="input-with-select" <el-input v-model="searchLocation" placeholder="请输入地址信息" class="input-with-select"
@keyup.enter="debouncedSearch(searchLocation)"> @keyup.enter="debouncedSearch(searchLocation)">
<template #append> <template #append>
<el-button @click="debouncedSearch(searchLocation)" :icon="Search" /> <el-button @click="debouncedSearch(searchLocation)" :icon="Search" />
</template> </template>
</el-input> --> </el-input>
<el-select v-model="searchLocation" filterable remote reserve-keyword clearable placeholder="请输入地址信息"
@change="selectChnange" :remote-method="remoteMethod">
<el-option v-for="item in locationOptions" :key="item.id"
:label="item.title + '&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp' + item.province+' - '+item.city"
:value="item.province+item.city+item.title" />
<!-- :value="item.ad_info.province+item.ad_info.city+item.title" /> -->
</el-select>
</el-form-item> </el-form-item>
<tlbs-map style="margin-left: 80px" ref="map" api-key=" <tlbs-map style="margin-left: 80px" ref="map" api-key="
6XFBZ-SAVLT-JGIX2-VOLMK-6S2H3-XUBGO" :center="center" :zoom="zoom" :control="control" @click="onClick"> 6XFBZ-SAVLT-JGIX2-VOLMK-6S2H3-XUBGO" :center="center" :zoom="zoom" :control="control" @click="onClick">
@ -414,12 +398,9 @@
</template> </template>
</el-dialog> </el-dialog>
<!-- 相关笔记 --> <!-- 相关笔记 -->
<el-dialog title="相关笔记" v-model="noteListDialog.visible" width="1200px" append-to-body> <el-dialog title="相关笔记" v-model="noteBookVisible" width="1200px" append-to-body>
<noteList :autoTableHeight="300" :sys_user_tagOptions="sys_user_tagOptions" parentName="scenic" <noteList :autoTableHeight="300" :sys_user_tagOptions="sys_user_tagOptions" :noteBookTagIds="noteBookTagIds"
:articleList="noteListDialog.articleList" :type="queryParams.type" :id="form.id"></noteList> parentName="scenic" :type="queryParams.type" :id="form.id"></noteList>
<pagination v-show="noteListDialog.total > 0" :total="noteListDialog.total"
v-model:page="noteListDialog.params.pageNum" v-model:limit="noteListDialog.params.pageSize"
@pagination="handleNote" />
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button @click="cancel('noteBookVisible')"> </el-button> <el-button @click="cancel('noteBookVisible')"> </el-button>
@ -431,7 +412,7 @@
<script setup name="Article" lang="ts"> <script setup name="Article" lang="ts">
import { listTag,tagAll } from '@/api/manage/tag'; import { listTag,tagAll } from '@/api/manage/tag';
import { listArticle, getArticle, delArticle, addArticle, updateArticle, listByTagIdNotebook,recommend } from '@/api/manage/scenic'; import { listArticle, getArticle, delArticle, addArticle, updateArticle, listByTagIdNotebook } from '@/api/manage/scenic';
import { ArticleVO, ArticleQuery, ArticleForm } from '@/api/manage/scenic/types'; import { ArticleVO, ArticleQuery, ArticleForm } from '@/api/manage/scenic/types';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { getToken } from '@/utils/auth'; import { getToken } from '@/utils/auth';
@ -461,7 +442,6 @@ const dialog = reactive<DialogOption>({
title: '', title: '',
type:'' type:''
}); });
const locationOptions = ref([]); //
const noteLists = ref([]); // const noteLists = ref([]); //
const previewRef = ref(null); const previewRef = ref(null);
const previewVisible = ref(false); // const previewVisible = ref(false); //
@ -622,37 +602,6 @@ const getTag = async () => {
const res = await tagAll(); const res = await tagAll();
sys_user_tagOptions.value = res; // sys_user_tagOptions.value = res; //
}; };
const getTagList = async (visible: boolean) => {
if (visible) {
getTag(); //
}
}
//
const remoteMethod = (query: string) => {
if (query !== '') {
// API
// geocoder(query).then((result) => {
// console.log(result);
// });
console.log(query);
// jsonp(`https://apis.map.qq.com/ws/place/v1/search?key=${'6XFBZ-SAVLT-JGIX2-VOLMK-6S2H3-XUBGO'}&keyword=${encodeURI(query)}&boundary=nearby(20.018883,110.348801,1000)&output=jsonp`, {}).then((res) => {
jsonp(`https://apis.map.qq.com/ws/place/v1/suggestion?key=${'6XFBZ-SAVLT-JGIX2-VOLMK-6S2H3-XUBGO'}&keyword=${encodeURI(query)}&region=三亚市&region_fix=0&output=jsonp`, {}).then((res) => {
// if (res.region.title!=='') {
// proxy?.$modal.msgError('');
// return
// }
if (res.status == 0) {
locationOptions.value = res.data;
}
});
}
}
//
const selectChnange = (val:string) => {
if (val) {
debouncedSearch(searchLocation.value)
}
}
// //
const performSearch = async (text) => { const performSearch = async (text) => {
// //
@ -661,14 +610,16 @@ const performSearch = async (text) => {
if (text === '') { if (text === '') {
console.log('搜索内容为空'); console.log('搜索内容为空');
} else { } else {
// console.log('', text); console.log('搜索内容为:', text);
// API // API
// geocoder(text).then((result) => { // geocoder(text).then((result) => {
// console.log(result); // console.log(result);
// }); // });
jsonp(`https://apis.map.qq.com/ws/geocoder/v1/?address=${text}&key=${'6XFBZ-SAVLT-JGIX2-VOLMK-6S2H3-XUBGO'}&output=jsonp`, {}).then((data) => { jsonp(`https://apis.map.qq.com/ws/geocoder/v1/?address=${text}&key=${'6XFBZ-SAVLT-JGIX2-VOLMK-6S2H3-XUBGO'}&output=jsonp`, {}).then((data) => {
// console.log(data); console.log(data);
if (data.status == 0) { if (data.status == 0) {
center.value.lat = data.result.location.lat;
center.value.lng = data.result.location.lng;
form.value.address = form.value.address =
data.result.address_components.province + data.result.address_components.province +
data.result.address_components.city + data.result.address_components.city +
@ -682,7 +633,6 @@ const performSearch = async (text) => {
// form.value.province = data.result.address_components.province; // form.value.province = data.result.address_components.province;
// form.value.city = data.result.address_components.city; // form.value.city = data.result.address_components.city;
center.value = { lat: data.result.location.lat, lng: data.result.location.lng };
geometries.value = [{ styleId: 'marker', position: { lat: data.result.location.lat, lng: data.result.location.lng } }]; geometries.value = [{ styleId: 'marker', position: { lat: data.result.location.lat, lng: data.result.location.lng } }];
} else if (data.status == 348) { } else if (data.status == 348) {
// //
@ -712,8 +662,9 @@ const onClick = (e: any) => {
// form.value.city = data.result.address_component.city; // form.value.city = data.result.address_component.city;
form.value.region = data.result.ad_info.adcode; // form.value.region = data.result.ad_info.adcode; //
form.value.regionCode = data.result.ad_info.adcode; // form.value.regionCode = data.result.ad_info.adcode; //
center.value = { lat: data.result.location.lat, lng: data.result.location.lng }; center.value.lat = data.result.location.lat;
searchLocation.value = data.result.formatted_addresses?.recommend; center.value.lng = data.result.location.lng;
searchLocation.value = data.result.formatted_addresses.recommend;
geometries.value = [{ styleId: 'marker', position: { lat: data.result.location.lat, lng: data.result.location.lng } }]; geometries.value = [{ styleId: 'marker', position: { lat: data.result.location.lat, lng: data.result.location.lng } }];
} }
} }
@ -728,7 +679,6 @@ const getList = async () => {
queryParams.value.tagId = queryParams.value.tagId.toString(); queryParams.value.tagId = queryParams.value.tagId.toString();
} }
const res = await listArticle(queryParams.value).finally(() => (loading.value = false)); const res = await listArticle(queryParams.value).finally(() => (loading.value = false));
articleList.value=[];
res.rows.forEach((element: any) => { res.rows.forEach((element: any) => {
if (element.region == null) { if (element.region == null) {
element.region = element.city; element.region = element.city;
@ -752,8 +702,6 @@ const cancel = (type: string) => {
dialog.visible = false; dialog.visible = false;
noteBookVisible.value = false; noteBookVisible.value = false;
noteBookTagIds.value = ''; // noteBookTagIds.value = ''; //
noteListDialog.visible = false;
noteListDialog.params.pageNum=1;
}; };
/** 表单重置 */ /** 表单重置 */
@ -884,26 +832,11 @@ const handleDetail = async (row?: ArticleVO) => {
*/ */
const noteBookVisible = ref(false); const noteBookVisible = ref(false);
const noteBookTagIds = ref(''); //id const noteBookTagIds = ref(''); //id
const noteListDialog = reactive({
visible: false,
total: 0,
articleList:[],
params:{
articleId: null,
pageNum: 1,
pageSize: 10,
}
});
//
const handleNote = async (row?: ArticleVO) => { const handleNote = async (row?: ArticleVO) => {
// noteBookTagIds.value = ''; noteBookTagIds.value = '';
// noteBookTagIds.value = row?.tagId as string; noteBookTagIds.value = row?.tagId as string;
if (row.id) { noteBookVisible.value = true;
noteListDialog.params.articleId = row?.id; console.log(row.tagId);
}
let res = await recommend(noteListDialog.params);
noteListDialog.articleList=res.rows;
noteListDialog.visible = true;
}; };
/** 新增景点,商家提交按钮 */ /** 新增景点,商家提交按钮 */
const submitForm = async (type: string) => { const submitForm = async (type: string) => {
@ -920,8 +853,7 @@ const submitForm = async (type: string) => {
if (form.value.id) { if (form.value.id) {
await updateArticle(form.value).finally(() => (buttonLoading.value = false)); await updateArticle(form.value).finally(() => (buttonLoading.value = false));
} else { } else {
let res = await addArticle(form.value).finally(() => (buttonLoading.value = false)); await addArticle(form.value).finally(() => (buttonLoading.value = false));
form.value.id = res.msg;
} }
proxy?.$modal.msgSuccess('操作成功'); proxy?.$modal.msgSuccess('操作成功');
// dialog.visible = false; // dialog.visible = false;

View File

@ -29,11 +29,6 @@
<el-table v-loading="loading" :height="autoTableHeight" :data="tagList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :height="autoTableHeight" :data="tagList" @selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" width="55" align="center" /> --> <!-- <el-table-column type="selection" width="55" align="center" /> -->
<el-table-column fixed label="序号" align="center" width="80">
<template #default="scope">
<span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column label="标签ID" align="center" prop="id" v-if="false" width="70px" /> <el-table-column label="标签ID" align="center" prop="id" v-if="false" width="70px" />
<el-table-column label="标签名称" align="center" prop="title" /> <el-table-column label="标签名称" align="center" prop="title" />
<el-table-column label="排序" align="center" prop="sort" /> <el-table-column label="排序" align="center" prop="sort" />
@ -101,8 +96,7 @@ const tagFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({ const dialog = reactive<DialogOption>({
visible: false, visible: false,
title: '', title: ''
type:''
}); });
const initFormData: TagForm = { const initFormData: TagForm = {
@ -114,7 +108,7 @@ const data = reactive<PageData<TagForm, TagQuery>>({
form: { ...initFormData }, form: { ...initFormData },
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 20, pageSize: 10,
title: undefined, title: undefined,
sort: undefined, sort: undefined,
params: {} params: {}

View File

@ -52,9 +52,7 @@
</el-table-column> </el-table-column>
<el-table-column label="状态" align="center" prop="status"> <el-table-column label="状态" align="center" prop="status">
<template #default="scope"> <template #default="scope">
<!-- <dict-tag :options="dy_user_level_status" :value="scope.row.status" /> --> <dict-tag :options="dy_user_level_status" :value="scope.row.status" />
<el-tag v-if="scope.row.status == 0" type="info">未发布</el-tag>
<el-tag v-if="scope.row.status == 1" type="primary">已发布</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column label="等级名称" align="center" prop="levelName" /> <!-- <el-table-column label="等级名称" align="center" prop="levelName" />
@ -144,7 +142,7 @@ const data = reactive<PageData<UserLevelForm, UserLevelQuery>>({
form: { ...initFormData }, form: { ...initFormData },
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 20, pageSize: 10,
levelName: undefined, levelName: undefined,
status: undefined, status: undefined,
score: undefined, score: undefined,

View File

@ -1,4 +1,3 @@
<!-- 积分记录 -->
<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"
@ -38,6 +37,7 @@
</div> </div>
</transition> </transition>
<el-card shadow="never">
<el-table v-loading="loading" :height="autoTableHeight" :data="userScoreList" <el-table v-loading="loading" :height="autoTableHeight" :data="userScoreList"
@selection-change="handleSelectionChange"> @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
@ -60,6 +60,7 @@
<pagination v-show="total > 0" id="table_page" :total="total" v-model:page="queryParams.pageNum" <pagination v-show="total > 0" id="table_page" :total="total" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" @pagination="getList" /> v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
</div> </div>
</template> </template>

View File

@ -72,21 +72,21 @@
删除 删除
</el-button> </el-button>
</el-col> </el-col>
<!-- <el-col :span="1.5">--> <el-col :span="1.5">
<!-- <el-dropdown class="mt-[1px]">--> <el-dropdown class="mt-[1px]">
<!-- <el-button plain type="info">--> <el-button plain type="info">
<!-- 更多--> 更多
<!-- <el-icon class="el-icon&#45;&#45;right"><arrow-down /></el-icon--> <el-icon class="el-icon--right"><arrow-down /></el-icon
<!-- ></el-button>--> ></el-button>
<!-- <template #dropdown>--> <template #dropdown>
<!-- <el-dropdown-menu>--> <el-dropdown-menu>
<!-- <el-dropdown-item icon="Download" @click="importTemplate">下载模板</el-dropdown-item>--> <el-dropdown-item icon="Download" @click="importTemplate">下载模板</el-dropdown-item>
<!-- <el-dropdown-item icon="Top" @click="handleImport"> 导入数据</el-dropdown-item>--> <el-dropdown-item icon="Top" @click="handleImport"> 导入数据</el-dropdown-item>
<!-- <el-dropdown-item icon="Download" @click="handleExport"> 导出数据</el-dropdown-item>--> <el-dropdown-item icon="Download" @click="handleExport"> 导出数据</el-dropdown-item>
<!-- </el-dropdown-menu>--> </el-dropdown-menu>
<!-- </template>--> </template>
<!-- </el-dropdown>--> </el-dropdown>
<!-- </el-col>--> </el-col>
<right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @query-table="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @query-table="getList"></right-toolbar>
</el-row> </el-row>
</template> </template>