feat:bug修改
This commit is contained in:
1 parent
b984cfed05
commit
feec151583
53 files changed
+594
-341
No files matched your search
@@ -52,6 +52,7 @@
|
||||
"fast-xml-parser": "^4.3.2",
|
||||
"highlight.js": "^11.9.0",
|
||||
"jsencrypt": "^3.3.2",
|
||||
"localforage": "^1.10.0",
|
||||
"lodash-es": "^4.17.21",
|
||||
"markdown-it": "^14.1.0",
|
||||
"markmap-common": "^0.16.0",
|
||||
|
||||
Generated
+22
@@ -89,6 +89,9 @@ importers:
|
||||
jsencrypt:
|
||||
specifier: ^3.3.2
|
||||
version: 3.3.2
|
||||
localforage:
|
||||
specifier: ^1.10.0
|
||||
version: 1.10.0
|
||||
lodash-es:
|
||||
specifier: ^4.17.21
|
||||
version: 4.17.21
|
||||
@@ -3748,6 +3751,9 @@ packages:
|
||||
engines: {node: '>=0.10.0'}
|
||||
hasBin: true
|
||||
|
||||
immediate@3.0.6:
|
||||
resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
|
||||
|
||||
immer@9.0.21:
|
||||
resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==}
|
||||
|
||||
@@ -4138,6 +4144,9 @@ packages:
|
||||
lezer-feel@1.4.0:
|
||||
resolution: {integrity: sha512-kNxG7O38gwpuYy+C3JCRxQNTCE2qu9uTuH5dE3EGVnRhIQMe6rPDz0S8t3urLEOsMud6HI795m6zX2ujfUaqTw==}
|
||||
|
||||
lie@3.1.1:
|
||||
resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==}
|
||||
|
||||
lilconfig@3.1.2:
|
||||
resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==}
|
||||
engines: {node: '>=14'}
|
||||
@@ -4169,6 +4178,9 @@ packages:
|
||||
resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==}
|
||||
engines: {node: '>=14'}
|
||||
|
||||
localforage@1.10.0:
|
||||
resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==}
|
||||
|
||||
locate-path@5.0.0:
|
||||
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
|
||||
engines: {node: '>=8'}
|
||||
@@ -9929,6 +9941,8 @@ snapshots:
|
||||
|
||||
image-size@0.5.5: {}
|
||||
|
||||
immediate@3.0.6: {}
|
||||
|
||||
immer@9.0.21: {}
|
||||
|
||||
immutable@5.0.3: {}
|
||||
@@ -10269,6 +10283,10 @@ snapshots:
|
||||
'@lezer/lr': 1.4.2
|
||||
min-dash: 4.2.2
|
||||
|
||||
lie@3.1.1:
|
||||
dependencies:
|
||||
immediate: 3.0.6
|
||||
|
||||
lilconfig@3.1.2: {}
|
||||
|
||||
lines-and-columns@1.2.4: {}
|
||||
@@ -10314,6 +10332,10 @@ snapshots:
|
||||
mlly: 1.7.3
|
||||
pkg-types: 1.2.1
|
||||
|
||||
localforage@1.10.0:
|
||||
dependencies:
|
||||
lie: 3.1.1
|
||||
|
||||
locate-path@5.0.0:
|
||||
dependencies:
|
||||
p-locate: 4.1.0
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 查询用户详情
|
||||
export const self = async (params: any) => {
|
||||
return await request.get({
|
||||
url: '/user/self',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 判断用户哪个终端在线
|
||||
export const terminalOnline = async (params: any) => {
|
||||
return await request.get({
|
||||
url: '/user/terminal/online',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 朋友列表
|
||||
export const friendList = async (params: any) => {
|
||||
return await request.get({
|
||||
url: '/friend/list',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 群列表
|
||||
export const groupList = async (params: any) => {
|
||||
return await request.get({
|
||||
url: '/group/list',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 开启/关闭免打扰状态
|
||||
export const friendDnd = async (data: any) => {
|
||||
return await request.put({
|
||||
url: '/friend/dnd',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
// 开启/关闭群免打扰状态
|
||||
export const groupDnd = async (data: any) => {
|
||||
return await request.put({
|
||||
url: '/group/dnd',
|
||||
data
|
||||
})
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
<!-- 基于 ruoyi-vue3 的 Pagination 重构,核心是简化无用的属性,并使用 ts 重写 -->
|
||||
<template>
|
||||
<el-pagination v-show="total > 0" v-model:current-page="currentPage" v-model:page-size="pageSize" :background="true"
|
||||
<el-pagination
|
||||
v-show="total > 0" v-model:current-page="currentPage" v-model:page-size="pageSize" :background="true"
|
||||
:page-sizes="[10, 20, 30, 50, 100]" :pager-count="pagerCount" :total="total" :small="isSmall"
|
||||
class="float-right mb-15px mt-15px" layout="total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange"
|
||||
@current-change="handleCurrentChange" />
|
||||
|
||||
@@ -60,7 +60,8 @@ function dispatchUrl(url?: string) {
|
||||
|
||||
<template>
|
||||
<div v-if="props.src" class="flex flex-col items-center">
|
||||
<el-image hide-on-click-modal preview-teleported :src="`${realSrc}`" fit="cover"
|
||||
<el-image
|
||||
hide-on-click-modal preview-teleported :src="`${realSrc}`" fit="cover"
|
||||
:style="`width:${realWidth};height:${realHeight};`" :preview-src-list="realSrcList" loading="lazy">
|
||||
<template #error>
|
||||
<div class="image-slot">
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
<template>
|
||||
<div class="node-wrapper">
|
||||
<div class="node-container">
|
||||
<div class="node-box" :class="[
|
||||
<div
|
||||
class="node-box" :class="[
|
||||
{ 'node-config-error': !currentNode.showText },
|
||||
`${useTaskStatusClass(currentNode?.activityStatus)}`
|
||||
]">
|
||||
<div class="node-title-container">
|
||||
<div class="node-title-icon start-user"><span class="iconfont icon-start-user"></span></div>
|
||||
<input v-if="!readonly && showInput" type="text" class="editable-title-input" @blur="blurEvent()"
|
||||
<input
|
||||
v-if="!readonly && showInput" type="text" class="editable-title-input" @blur="blurEvent()"
|
||||
v-mountedFocus v-model="currentNode.name" :placeholder="currentNode.name" />
|
||||
<div v-else class="node-title" @click="clickTitle">
|
||||
{{ currentNode.name }}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<template>
|
||||
<div class="upload-box">
|
||||
<el-upload :id="uuid" :accept="fileType.join(',')" :action="uploadUrl" :before-upload="beforeUpload"
|
||||
<el-upload
|
||||
:id="uuid" :accept="fileType.join(',')" :action="uploadUrl" :before-upload="beforeUpload"
|
||||
:class="['upload', drag ? 'no-border' : '']" :disabled="disabled" :drag="drag" :http-request="httpRequest"
|
||||
:multiple="false" :on-error="uploadError" :on-success="uploadSuccess" :show-file-list="false">
|
||||
<template v-if="modelValue">
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<template>
|
||||
<div class="upload-box">
|
||||
<el-upload v-model:file-list="fileList" :accept="fileType.join(',')" :action="uploadUrl"
|
||||
<el-upload
|
||||
v-model:file-list="fileList" :accept="fileType.join(',')" :action="uploadUrl"
|
||||
:before-upload="beforeUpload" :class="['upload', drag ? 'no-border' : '']" :disabled="disabled" :drag="drag"
|
||||
:http-request="httpRequest" :limit="limit" :multiple="true" :on-error="uploadError" :on-exceed="handleExceed"
|
||||
:on-success="uploadSuccess" list-type="picture-card">
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
import ServiceDialog from './src/ServiceDialog.vue'
|
||||
|
||||
export {
|
||||
ServiceDialog
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
<template>
|
||||
<div class="size-full flex justify-center items-center p-x-10px cursor-pointer" @click="dialogVisible = true">
|
||||
<el-icon>
|
||||
<BellFilled />
|
||||
</el-icon>
|
||||
</div>
|
||||
<el-dialog v-model="dialogVisible" width="70%" :before-close="dialogClose">
|
||||
<template #header>
|
||||
<div class="flex justify-between items-center">
|
||||
<div>客服</div>
|
||||
<el-icon class="cursor-pointer" @click="dialogVisible = false">
|
||||
<Close />
|
||||
</el-icon>
|
||||
</div>
|
||||
</template>
|
||||
<iframe id="chat-iframe" src="http://localhost:8080/#/home/chat" class="min-h-70vh" height="100%" width="100%"
|
||||
frameborder="0">
|
||||
您当前的浏览器不支持页面上的功能,请升级您当前的浏览器版本或使用谷歌浏览器访问当前页面
|
||||
</iframe>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup lang="tsx">
|
||||
import { BellFilled } from '@element-plus/icons-vue'
|
||||
|
||||
const dialogVisible = ref(false)
|
||||
|
||||
const dialogClose = () => {
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
#chat-iframe {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.el-dialog {
|
||||
padding: 0 !important;
|
||||
}
|
||||
</style>
|
||||
@@ -201,10 +201,9 @@ const clear = () => {
|
||||
|
||||
<template>
|
||||
<div
|
||||
:class="prefixCls"
|
||||
:class="prefixCls"
|
||||
class="fixed right-0 top-[45%] h-40px w-40px cursor-pointer bg-[var(--el-color-primary)] text-center leading-40px"
|
||||
@click="drawer = true"
|
||||
>
|
||||
@click="drawer = true">
|
||||
<Icon color="#fff" icon="ep:setting" />
|
||||
</div>
|
||||
|
||||
@@ -225,54 +224,45 @@ const clear = () => {
|
||||
<!-- 系统主题 -->
|
||||
<ElDivider>{{ t('setting.systemTheme') }}</ElDivider>
|
||||
<ColorRadioPicker
|
||||
v-model="systemTheme"
|
||||
:schema="[
|
||||
'#409eff',
|
||||
'#009688',
|
||||
'#536dfe',
|
||||
'#ff5c93',
|
||||
'#ee4f12',
|
||||
'#0096c7',
|
||||
'#9c27b0',
|
||||
'#ff9800'
|
||||
]"
|
||||
@change="setSystemTheme"
|
||||
/>
|
||||
v-model="systemTheme" :schema="[
|
||||
'#409eff',
|
||||
'#009688',
|
||||
'#536dfe',
|
||||
'#ff5c93',
|
||||
'#ee4f12',
|
||||
'#0096c7',
|
||||
'#9c27b0',
|
||||
'#ff9800'
|
||||
]" @change="setSystemTheme" />
|
||||
|
||||
<!-- 头部主题 -->
|
||||
<ElDivider>{{ t('setting.headerTheme') }}</ElDivider>
|
||||
<ColorRadioPicker
|
||||
v-model="headerTheme"
|
||||
:schema="[
|
||||
'#fff',
|
||||
'#151515',
|
||||
'#5172dc',
|
||||
'#e74c3c',
|
||||
'#24292e',
|
||||
'#394664',
|
||||
'#009688',
|
||||
'#383f45'
|
||||
]"
|
||||
@change="setHeaderTheme"
|
||||
/>
|
||||
v-model="headerTheme" :schema="[
|
||||
'#fff',
|
||||
'#151515',
|
||||
'#5172dc',
|
||||
'#e74c3c',
|
||||
'#24292e',
|
||||
'#394664',
|
||||
'#009688',
|
||||
'#383f45'
|
||||
]" @change="setHeaderTheme" />
|
||||
|
||||
<!-- 菜单主题 -->
|
||||
<template v-if="layout !== 'top'">
|
||||
<ElDivider>{{ t('setting.menuTheme') }}</ElDivider>
|
||||
<ColorRadioPicker
|
||||
v-model="menuTheme"
|
||||
:schema="[
|
||||
'#fff',
|
||||
'#001529',
|
||||
'#212121',
|
||||
'#273352',
|
||||
'#191b24',
|
||||
'#383f45',
|
||||
'#001628',
|
||||
'#344058'
|
||||
]"
|
||||
@change="setMenuTheme"
|
||||
/>
|
||||
v-model="menuTheme" :schema="[
|
||||
'#fff',
|
||||
'#001529',
|
||||
'#212121',
|
||||
'#273352',
|
||||
'#191b24',
|
||||
'#383f45',
|
||||
'#001628',
|
||||
'#344058'
|
||||
]" @change="setMenuTheme" />
|
||||
</template>
|
||||
</div>
|
||||
|
||||
@@ -297,6 +287,7 @@ $prefix-cls: #{$namespace}-setting;
|
||||
|
||||
.#{$prefix-cls} {
|
||||
border-radius: 6px 0 0 6px;
|
||||
z-index: 1200;/*修正没有z-index会被表格层覆盖,值不要超过4000*/
|
||||
z-index: 1200;
|
||||
/*修正没有z-index会被表格层覆盖,值不要超过4000*/
|
||||
}
|
||||
</style>
|
||||
@@ -270,40 +270,29 @@ watch(
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div
|
||||
:id="prefixCls"
|
||||
:class="prefixCls"
|
||||
class="relative w-full flex bg-[#fff] dark:bg-[var(--el-bg-color)]"
|
||||
>
|
||||
<div :id="prefixCls" :class="prefixCls" class="relative w-full flex bg-[#fff] dark:bg-[var(--el-bg-color)]">
|
||||
<span
|
||||
:class="tagsViewImmerse ? '' : `${prefixCls}__tool ${prefixCls}__tool--first`"
|
||||
:class="tagsViewImmerse ? '' : `${prefixCls}__tool ${prefixCls}__tool--first`"
|
||||
class="h-[var(--tags-view-height)] w-[var(--tags-view-height)] flex cursor-pointer items-center justify-center"
|
||||
@click="move(-200)"
|
||||
>
|
||||
@click="move(-200)">
|
||||
<Icon
|
||||
:hover-color="isDark ? '#fff' : 'var(--el-color-black)'"
|
||||
color="var(--el-text-color-placeholder)"
|
||||
icon="ep:d-arrow-left"
|
||||
/>
|
||||
:hover-color="isDark ? '#fff' : 'var(--el-color-black)'" color="var(--el-text-color-placeholder)"
|
||||
icon="ep:d-arrow-left" />
|
||||
</span>
|
||||
<div class="flex-1 overflow-hidden">
|
||||
<ElScrollbar ref="scrollbarRef" class="h-full" @scroll="scroll">
|
||||
<div class="h-[var(--tags-view-height)] flex">
|
||||
<ContextMenu
|
||||
v-for="item in visitedViews"
|
||||
:key="item.fullPath"
|
||||
:ref="itemRefs.set"
|
||||
:class="[
|
||||
`${prefixCls}__item`,
|
||||
tagsViewImmerse ? `${prefixCls}__item--immerse` : '',
|
||||
tagsViewIcon ? `${prefixCls}__item--icon` : '',
|
||||
tagsViewImmerse && tagsViewIcon ? `${prefixCls}__item--immerse--icon` : '',
|
||||
item?.meta?.affix ? `${prefixCls}__item--affix` : '',
|
||||
{
|
||||
'is-active': isActive(item)
|
||||
}
|
||||
]"
|
||||
:schema="[
|
||||
v-for="item in visitedViews" :key="item.fullPath" :ref="itemRefs.set" :class="[
|
||||
`${prefixCls}__item`,
|
||||
tagsViewImmerse ? `${prefixCls}__item--immerse` : '',
|
||||
tagsViewIcon ? `${prefixCls}__item--icon` : '',
|
||||
tagsViewImmerse && tagsViewIcon ? `${prefixCls}__item--immerse--icon` : '',
|
||||
item?.meta?.affix ? `${prefixCls}__item--affix` : '',
|
||||
{
|
||||
'is-active': isActive(item)
|
||||
}
|
||||
]" :schema="[
|
||||
{
|
||||
icon: 'ep:refresh',
|
||||
label: t('common.reload'),
|
||||
@@ -359,39 +348,28 @@ watch(
|
||||
closeAllTags()
|
||||
}
|
||||
}
|
||||
]"
|
||||
:tag-item="item"
|
||||
@visible-change="visibleChange"
|
||||
>
|
||||
]" :tag-item="item" @visible-change="visibleChange">
|
||||
<div>
|
||||
<router-link :ref="tagLinksRefs.set" v-slot="{ navigate }" :to="{ ...item }" custom>
|
||||
<div
|
||||
:class="`h-full flex items-center justify-center whitespace-nowrap pl-15px ${prefixCls}__item--label`"
|
||||
@click="navigate"
|
||||
>
|
||||
@click="navigate">
|
||||
<Icon
|
||||
v-if="
|
||||
tagsViewIcon &&
|
||||
(item?.meta?.icon ||
|
||||
(item?.matched &&
|
||||
item.matched[0] &&
|
||||
item.matched[item.matched.length - 1].meta?.icon))
|
||||
"
|
||||
:icon="item?.meta?.icon || item.matched[item.matched.length - 1].meta.icon"
|
||||
:size="12"
|
||||
class="mr-5px"
|
||||
/>
|
||||
v-if="
|
||||
tagsViewIcon &&
|
||||
(item?.meta?.icon ||
|
||||
(item?.matched &&
|
||||
item.matched[0] &&
|
||||
item.matched[item.matched.length - 1].meta?.icon))
|
||||
" :icon="item?.meta?.icon || item.matched[item.matched.length - 1].meta.icon" :size="12"
|
||||
class="mr-5px" />
|
||||
{{
|
||||
t(item?.meta?.title as string) +
|
||||
(item?.meta?.titleSuffix ? ` (${item?.meta?.titleSuffix})` : '')
|
||||
}}
|
||||
<Icon
|
||||
:class="`${prefixCls}__item--close`"
|
||||
:size="12"
|
||||
color="#333"
|
||||
icon="ep:close"
|
||||
@click.prevent.stop="closeSelectedTag(item)"
|
||||
/>
|
||||
:class="`${prefixCls}__item--close`" :size="12" color="#333" icon="ep:close"
|
||||
@click.prevent.stop="closeSelectedTag(item)" />
|
||||
</div>
|
||||
</router-link>
|
||||
</div>
|
||||
@@ -400,90 +378,79 @@ watch(
|
||||
</ElScrollbar>
|
||||
</div>
|
||||
<span
|
||||
:class="tagsViewImmerse ? '' : `${prefixCls}__tool`"
|
||||
:class="tagsViewImmerse ? '' : `${prefixCls}__tool`"
|
||||
class="h-[var(--tags-view-height)] w-[var(--tags-view-height)] flex cursor-pointer items-center justify-center"
|
||||
@click="move(200)"
|
||||
>
|
||||
@click="move(200)">
|
||||
<Icon
|
||||
:hover-color="isDark ? '#fff' : 'var(--el-color-black)'"
|
||||
color="var(--el-text-color-placeholder)"
|
||||
icon="ep:d-arrow-right"
|
||||
/>
|
||||
:hover-color="isDark ? '#fff' : 'var(--el-color-black)'" color="var(--el-text-color-placeholder)"
|
||||
icon="ep:d-arrow-right" />
|
||||
</span>
|
||||
<span
|
||||
:class="tagsViewImmerse ? '' : `${prefixCls}__tool`"
|
||||
:class="tagsViewImmerse ? '' : `${prefixCls}__tool`"
|
||||
class="h-[var(--tags-view-height)] w-[var(--tags-view-height)] flex cursor-pointer items-center justify-center"
|
||||
@click="refreshSelectedTag(selectedTag)"
|
||||
>
|
||||
@click="refreshSelectedTag(selectedTag)">
|
||||
<Icon
|
||||
:hover-color="isDark ? '#fff' : 'var(--el-color-black)'"
|
||||
color="var(--el-text-color-placeholder)"
|
||||
icon="ep:refresh-right"
|
||||
/>
|
||||
:hover-color="isDark ? '#fff' : 'var(--el-color-black)'" color="var(--el-text-color-placeholder)"
|
||||
icon="ep:refresh-right" />
|
||||
</span>
|
||||
<ContextMenu
|
||||
:schema="[
|
||||
{
|
||||
icon: 'ep:refresh',
|
||||
label: t('common.reload'),
|
||||
command: () => {
|
||||
refreshSelectedTag(selectedTag)
|
||||
}
|
||||
},
|
||||
{
|
||||
icon: 'ep:close',
|
||||
label: t('common.closeTab'),
|
||||
disabled: !!visitedViews?.length && selectedTag?.meta.affix,
|
||||
command: () => {
|
||||
closeSelectedTag(selectedTag!)
|
||||
}
|
||||
},
|
||||
{
|
||||
divided: true,
|
||||
icon: 'ep:d-arrow-left',
|
||||
label: t('common.closeTheLeftTab'),
|
||||
disabled: !!visitedViews?.length && selectedTag?.fullPath === visitedViews[0].fullPath,
|
||||
command: () => {
|
||||
closeLeftTags()
|
||||
}
|
||||
},
|
||||
{
|
||||
icon: 'ep:d-arrow-right',
|
||||
label: t('common.closeTheRightTab'),
|
||||
disabled:
|
||||
!!visitedViews?.length &&
|
||||
selectedTag?.fullPath === visitedViews[visitedViews.length - 1].fullPath,
|
||||
command: () => {
|
||||
closeRightTags()
|
||||
}
|
||||
},
|
||||
{
|
||||
divided: true,
|
||||
icon: 'ep:discount',
|
||||
label: t('common.closeOther'),
|
||||
command: () => {
|
||||
closeOthersTags()
|
||||
}
|
||||
},
|
||||
{
|
||||
icon: 'ep:minus',
|
||||
label: t('common.closeAll'),
|
||||
command: () => {
|
||||
closeAllTags()
|
||||
}
|
||||
:schema="[
|
||||
{
|
||||
icon: 'ep:refresh',
|
||||
label: t('common.reload'),
|
||||
command: () => {
|
||||
refreshSelectedTag(selectedTag)
|
||||
}
|
||||
]"
|
||||
trigger="click"
|
||||
>
|
||||
},
|
||||
{
|
||||
icon: 'ep:close',
|
||||
label: t('common.closeTab'),
|
||||
disabled: !!visitedViews?.length && selectedTag?.meta.affix,
|
||||
command: () => {
|
||||
closeSelectedTag(selectedTag!)
|
||||
}
|
||||
},
|
||||
{
|
||||
divided: true,
|
||||
icon: 'ep:d-arrow-left',
|
||||
label: t('common.closeTheLeftTab'),
|
||||
disabled: !!visitedViews?.length && selectedTag?.fullPath === visitedViews[0].fullPath,
|
||||
command: () => {
|
||||
closeLeftTags()
|
||||
}
|
||||
},
|
||||
{
|
||||
icon: 'ep:d-arrow-right',
|
||||
label: t('common.closeTheRightTab'),
|
||||
disabled:
|
||||
!!visitedViews?.length &&
|
||||
selectedTag?.fullPath === visitedViews[visitedViews.length - 1].fullPath,
|
||||
command: () => {
|
||||
closeRightTags()
|
||||
}
|
||||
},
|
||||
{
|
||||
divided: true,
|
||||
icon: 'ep:discount',
|
||||
label: t('common.closeOther'),
|
||||
command: () => {
|
||||
closeOthersTags()
|
||||
}
|
||||
},
|
||||
{
|
||||
icon: 'ep:minus',
|
||||
label: t('common.closeAll'),
|
||||
command: () => {
|
||||
closeAllTags()
|
||||
}
|
||||
}
|
||||
]" trigger="click">
|
||||
<span
|
||||
:class="tagsViewImmerse ? '' : `${prefixCls}__tool`"
|
||||
class="block h-[var(--tags-view-height)] w-[var(--tags-view-height)] flex cursor-pointer items-center justify-center"
|
||||
>
|
||||
:class="tagsViewImmerse ? '' : `${prefixCls}__tool`"
|
||||
class="block h-[var(--tags-view-height)] w-[var(--tags-view-height)] flex cursor-pointer items-center justify-center">
|
||||
<Icon
|
||||
:hover-color="isDark ? '#fff' : 'var(--el-color-black)'"
|
||||
color="var(--el-text-color-placeholder)"
|
||||
icon="ep:menu"
|
||||
/>
|
||||
:hover-color="isDark ? '#fff' : 'var(--el-color-black)'" color="var(--el-text-color-placeholder)"
|
||||
icon="ep:menu" />
|
||||
</span>
|
||||
</ContextMenu>
|
||||
</div>
|
||||
@@ -579,8 +546,7 @@ $prefix-cls: #{$namespace}-tags-view;
|
||||
padding-right: 35px;
|
||||
margin: 0 -10px;
|
||||
border: none !important;
|
||||
-webkit-mask-box-image: url("data:image/svg+xml,%3Csvg width='68' height='34' viewBox='0 0 68 34' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='m27,0c-7.99582,0 -11.95105,0.00205 -12,12l0,6c0,8.284 -0.48549,16.49691 -8.76949,16.49691l54.37857,-0.11145c-8.284,0 -8.60908,-8.10146 -8.60908,-16.38546l0,-6c0.11145,-12.08445 -4.38441,-12 -12,-12l-13,0z' fill='%23409eff'/%3E%3C/svg%3E")
|
||||
12 27 15;
|
||||
-webkit-mask-box-image: url("data:image/svg+xml,%3Csvg width='68' height='34' viewBox='0 0 68 34' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='m27,0c-7.99582,0 -11.95105,0.00205 -12,12l0,6c0,8.284 -0.48549,16.49691 -8.76949,16.49691l54.37857,-0.11145c-8.284,0 -8.60908,-8.10146 -8.60908,-16.38546l0,-6c0.11145,-12.08445 -4.38441,-12 -12,-12l-13,0z' fill='%23409eff'/%3E%3C/svg%3E") 12 27 15;
|
||||
|
||||
.#{$prefix-cls}__item--label {
|
||||
padding-left: 35px;
|
||||
|
||||
@@ -7,6 +7,7 @@ import { Screenfull } from '@/layout/components/Screenfull'
|
||||
import { Breadcrumb } from '@/layout/components/Breadcrumb'
|
||||
import { SizeDropdown } from '@/layout/components/SizeDropdown'
|
||||
import { LocaleDropdown } from '@/layout/components/LocaleDropdown'
|
||||
import { ServiceDialog } from "@/layout/components/ServiceDialog"
|
||||
import RouterSearch from '@/components/RouterSearch/index.vue'
|
||||
import { useAppStore } from '@/store/modules/app'
|
||||
import { useDesign } from '@/hooks/web/useDesign'
|
||||
@@ -62,6 +63,7 @@ export default defineComponent({
|
||||
</div>
|
||||
) : undefined}
|
||||
<div class="h-full flex items-center">
|
||||
<ServiceDialog />
|
||||
{screenfull.value ? (
|
||||
<Screenfull class="custom-hover" color="var(--top-header-text-color)"></Screenfull>
|
||||
) : undefined}
|
||||
|
||||
@@ -37,7 +37,8 @@
|
||||
<div
|
||||
class="m-auto h-[calc(100%-60px)] w-[100%] flex items-center at-2xl:max-w-500px at-lg:max-w-500px at-md:max-w-500px at-xl:max-w-500px">
|
||||
<!-- 账号登录 -->
|
||||
<el-form v-show="getShow" ref="formLogin" :model="loginData.loginForm" :rules="LoginRules"
|
||||
<el-form
|
||||
v-show="getShow" ref="formLogin" :model="loginData.loginForm" :rules="LoginRules"
|
||||
class="login-form" label-position="top" label-width="120px" size="large">
|
||||
<el-row style="margin-right: -10px; margin-left: -10px">
|
||||
<el-col :span="24" style="padding-right: 10px; padding-left: 10px">
|
||||
@@ -47,23 +48,27 @@
|
||||
</el-col>
|
||||
<el-col :span="24" style="padding-right: 10px; padding-left: 10px">
|
||||
<el-form-item v-if="loginData.tenantEnable" prop="tenantName">
|
||||
<el-input v-model="loginData.loginForm.tenantName" :placeholder="t('login.tenantNamePlaceholder')"
|
||||
<el-input
|
||||
v-model="loginData.loginForm.tenantName" :placeholder="t('login.tenantNamePlaceholder')"
|
||||
:prefix-icon="iconHouse" link type="primary" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24" style="padding-right: 10px; padding-left: 10px">
|
||||
<el-form-item prop="username">
|
||||
<el-input v-model="loginData.loginForm.username" :placeholder="t('login.usernamePlaceholder')"
|
||||
<el-input
|
||||
v-model="loginData.loginForm.username" :placeholder="t('login.usernamePlaceholder')"
|
||||
:prefix-icon="iconAvatar" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24" style="padding-right: 10px; padding-left: 10px">
|
||||
<el-form-item prop="password">
|
||||
<el-input v-model="loginData.loginForm.password" :placeholder="t('login.passwordPlaceholder')"
|
||||
<el-input
|
||||
v-model="loginData.loginForm.password" :placeholder="t('login.passwordPlaceholder')"
|
||||
:prefix-icon="iconLock" show-password type="password" @keyup.enter="getCode()" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24" style="
|
||||
<el-col
|
||||
:span="24" style="
|
||||
padding-right: 10px;
|
||||
padding-left: 10px;
|
||||
margin-top: -20px;
|
||||
@@ -85,11 +90,13 @@
|
||||
</el-col>
|
||||
<el-col :span="24" style="padding-right: 10px; padding-left: 10px">
|
||||
<el-form-item>
|
||||
<XButton :loading="loginLoading" :title="t('login.login')" class="w-[100%]" type="primary"
|
||||
<XButton
|
||||
:loading="loginLoading" :title="t('login.login')" class="w-[100%]" type="primary"
|
||||
@click="getCode()" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<Verify v-if="loginData.captchaEnable === 'true'" ref="verify" :captchaType="captchaType"
|
||||
<Verify
|
||||
v-if="loginData.captchaEnable === 'true'" ref="verify" :captchaType="captchaType"
|
||||
:imgSize="{ width: '400px', height: '200px' }" mode="pop" @success="handleLogin" />
|
||||
</el-row>
|
||||
</el-form>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<template>
|
||||
<el-form v-show="getShow" ref="formLogin" :model="loginData.loginForm" :rules="LoginRules" class="login-form"
|
||||
<el-form
|
||||
v-show="getShow" ref="formLogin" :model="loginData.loginForm" :rules="LoginRules" class="login-form"
|
||||
label-position="top" label-width="120px" size="large">
|
||||
<el-row style="margin-right: -10px; margin-left: -10px">
|
||||
<el-col :span="24" style="padding-right: 10px; padding-left: 10px">
|
||||
@@ -9,19 +10,22 @@
|
||||
</el-col>
|
||||
<el-col :span="24" style="padding-right: 10px; padding-left: 10px;display: none;">
|
||||
<el-form-item v-if="loginData.tenantEnable === 'true'" prop="tenantName">
|
||||
<el-input v-model="loginData.loginForm.tenantName" :placeholder="t('login.tenantNamePlaceholder')"
|
||||
<el-input
|
||||
v-model="loginData.loginForm.tenantName" :placeholder="t('login.tenantNamePlaceholder')"
|
||||
:prefix-icon="iconHouse" link type="primary" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24" style="padding-right: 10px; padding-left: 10px">
|
||||
<el-form-item prop="username">
|
||||
<el-input v-model="loginData.loginForm.username" :placeholder="t('login.usernamePlaceholder')"
|
||||
<el-input
|
||||
v-model="loginData.loginForm.username" :placeholder="t('login.usernamePlaceholder')"
|
||||
:prefix-icon="iconAvatar" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24" style="padding-right: 10px; padding-left: 10px">
|
||||
<el-form-item prop="password">
|
||||
<el-input v-model="loginData.loginForm.password" :placeholder="t('login.passwordPlaceholder')"
|
||||
<el-input
|
||||
v-model="loginData.loginForm.password" :placeholder="t('login.passwordPlaceholder')"
|
||||
:prefix-icon="iconLock" show-password type="password" @keyup.enter="getCode()" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -43,11 +47,13 @@
|
||||
</el-col>
|
||||
<el-col :span="24" style="padding-right: 10px; padding-left: 10px">
|
||||
<el-form-item>
|
||||
<XButton :loading="loginLoading" :title="t('login.login')" class="w-[100%]" type="primary"
|
||||
<XButton
|
||||
:loading="loginLoading" :title="t('login.login')" class="w-[100%]" type="primary"
|
||||
@click="getCode()" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<Verify v-if="loginData.captchaEnable === 'true'" ref="verify" :captchaType="captchaType"
|
||||
<Verify
|
||||
v-if="loginData.captchaEnable === 'true'" ref="verify" :captchaType="captchaType"
|
||||
:imgSize="{ width: '400px', height: '200px' }" mode="pop" @success="handleLogin" />
|
||||
<!-- <el-col :span="24" style="padding-right: 10px; padding-left: 10px">
|
||||
<el-form-item>
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
<template>
|
||||
<div class="h-[50px] flex justify-center items-center">
|
||||
<div v-if="props.message.type == 1">
|
||||
<preview-image :src="JSON.parse(props.message.content).thumbUrl"
|
||||
<preview-image
|
||||
:src="JSON.parse(props.message.content).thumbUrl"
|
||||
:full-src="JSON.parse(props.message.content).originUrl" :width="80" :height="80" />
|
||||
</div>
|
||||
<div v-else-if="props.message.type == 2">
|
||||
<el-link type="primary" :href="JSON.parse(props.message.content).url"
|
||||
<el-link
|
||||
type="primary" :href="JSON.parse(props.message.content).url"
|
||||
:download="JSON.parse(props.message.content).name" target="_blank">
|
||||
{{ JSON.parse(props.message.content).name }}
|
||||
</el-link>
|
||||
@@ -14,7 +16,8 @@
|
||||
<audio style="height: 30px;" controls :src="JSON.parse(props.message.content).url"></audio>
|
||||
</div>
|
||||
<div v-else-if="props.message.type == 4">
|
||||
<video style="height: 50px;" controls :poster="JSON.parse(props.message.content).coverUrl"
|
||||
<video
|
||||
style="height: 50px;" controls :poster="JSON.parse(props.message.content).coverUrl"
|
||||
:src="JSON.parse(props.message.content).videoUrl"></video>
|
||||
</div>
|
||||
<div v-else class="message-text" v-html="transform(replaceURLWithHTMLLinks(html2Escape(props.message.content)))">
|
||||
|
||||
@@ -3,15 +3,18 @@
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="70px">
|
||||
<el-form-item label="发送用户" prop="sendUserName">
|
||||
<el-input class="!w-160px" v-model="queryParams.sendUserName" placeholder="请输入发送用户" clearable
|
||||
<el-input
|
||||
class="!w-160px" v-model="queryParams.sendUserName" placeholder="请输入发送用户" clearable
|
||||
@keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="接收用户" prop="recvUserName">
|
||||
<el-input class="!w-160px" v-model="queryParams.recvUserName" placeholder="请输入接收用户" clearable
|
||||
<el-input
|
||||
class="!w-160px" v-model="queryParams.recvUserName" placeholder="请输入接收用户" clearable
|
||||
@keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发送内容" prop="center">
|
||||
<el-input class="!w-160px" v-model="queryParams.center" placeholder="请输入发送内容" clearable
|
||||
<el-input
|
||||
class="!w-160px" v-model="queryParams.center" placeholder="请输入发送内容" clearable
|
||||
@keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发送时间" prop="sendTimeList">
|
||||
@@ -44,7 +47,8 @@
|
||||
<el-table-column label="发送时间" align="center" prop="sendTime" :formatter="dateFormatter" width="180px" />
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
|
||||
<Pagination
|
||||
:total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList" />
|
||||
</ContentWrap>
|
||||
</template>
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
|
||||
<el-form-item label="敏感词" prop="content">
|
||||
<el-input class="!w-240px" v-model="queryParams.content" placeholder="请输入敏感词" clearable
|
||||
<el-input
|
||||
class="!w-240px" v-model="queryParams.content" placeholder="请输入敏感词" clearable
|
||||
@keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="enabled">
|
||||
@@ -46,7 +47,8 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
|
||||
<Pagination
|
||||
:total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList" />
|
||||
</ContentWrap>
|
||||
<sensitive-form ref="formRef" @success="getList" />
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<template>
|
||||
<Dialog v-model="dialogVisible" title="上传文件">
|
||||
<el-upload ref="uploadRef" v-model:file-list="fileList" :action="uploadUrl" :auto-upload="false"
|
||||
<el-upload
|
||||
ref="uploadRef" v-model:file-list="fileList" :action="uploadUrl" :auto-upload="false"
|
||||
:before-upload="beforeUpload" :data="data" :disabled="formLoading" :limit="1" :on-change="handleFileChange"
|
||||
:on-error="submitFormError" :on-exceed="handleExceed" :on-success="submitFormSuccess" :http-request="httpRequest"
|
||||
accept=".jpg, .png, .gif, .apk" drag>
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
<el-col :span="12">
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="formData.status" placeholder="请选择状态" clearable class="!w-240px">
|
||||
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.PRODUCT_GIFT_STATUS)" :key="dict.value"
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.PRODUCT_GIFT_STATUS)" :key="dict.value"
|
||||
:label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
@@ -3,12 +3,14 @@
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
|
||||
<el-form-item label="礼物标题" prop="title">
|
||||
<el-input v-model="queryParams.title" placeholder="请输入礼物标题" clearable @keyup.enter="handleQuery"
|
||||
<el-input
|
||||
v-model="queryParams.title" placeholder="请输入礼物标题" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="礼物状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable class="!w-240px">
|
||||
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.PRODUCT_GIFT_STATUS)" :key="dict.value"
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.PRODUCT_GIFT_STATUS)" :key="dict.value"
|
||||
:label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@@ -22,7 +24,8 @@
|
||||
<el-button type="primary" plain @click="openForm('create')" v-hasPermi="['trade:gift:create']">
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button type="success" plain @click="handleExport" :loading="exportLoading"
|
||||
<el-button
|
||||
type="success" plain @click="handleExport" :loading="exportLoading"
|
||||
v-hasPermi="['trade:gift:export']">
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
@@ -63,7 +66,8 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||
<Pagination
|
||||
:total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList" />
|
||||
</ContentWrap>
|
||||
|
||||
|
||||
@@ -3,13 +3,15 @@
|
||||
<el-form ref="formRef" :model="formData" :rules="rules" label-width="120px" :disabled="isDetail">
|
||||
<el-form-item label="配送方式" prop="deliveryTypes">
|
||||
<el-checkbox-group v-model="formData.deliveryTypes" class="w-80">
|
||||
<el-checkbox v-for="dict in getIntDictOptions(DICT_TYPE.TRADE_DELIVERY_TYPE)" :key="dict.value"
|
||||
<el-checkbox
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.TRADE_DELIVERY_TYPE)" :key="dict.value"
|
||||
:value="dict.value">
|
||||
{{ dict.label }}
|
||||
</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="运费模板" prop="deliveryTemplateId"
|
||||
<el-form-item
|
||||
label="运费模板" prop="deliveryTemplateId"
|
||||
v-if="formData.deliveryTypes?.includes(DeliveryTypeEnum.EXPRESS.type)">
|
||||
<el-select placeholder="请选择运费模板" v-model="formData.deliveryTemplateId" class="w-80">
|
||||
<el-option v-for="item in deliveryTemplateList" :key="item.id" :label="item.name" :value="item.id" />
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
<el-col :span="24">
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="formData.status">
|
||||
<el-radio v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)" :key="dict.value"
|
||||
<el-radio
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)" :key="dict.value"
|
||||
:value="dict.value">
|
||||
{{ dict.label }}
|
||||
</el-radio>
|
||||
@@ -35,7 +36,8 @@
|
||||
<el-col :span="24">
|
||||
<el-form-item v-if="false" label="位置" prop="position">
|
||||
<el-radio-group v-model="formData.position">
|
||||
<el-radio v-for="dict in getIntDictOptions(DICT_TYPE.PROMOTION_BANNER_POSITION)" :key="dict.value"
|
||||
<el-radio
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.PROMOTION_BANNER_POSITION)" :key="dict.value"
|
||||
:value="dict.value">
|
||||
{{ dict.label }}
|
||||
</el-radio>
|
||||
|
||||
@@ -11,16 +11,20 @@
|
||||
<!-- 售后 -->
|
||||
<el-tab-pane label="售后">
|
||||
<el-form-item label="退款理由" prop="afterSaleRefundReasons">
|
||||
<el-select v-model="formData.afterSaleRefundReasons" allow-create filterable multiple
|
||||
<el-select
|
||||
v-model="formData.afterSaleRefundReasons" allow-create filterable multiple
|
||||
placeholder="请直接输入退款理由">
|
||||
<el-option v-for="reason in formData.afterSaleRefundReasons" :key="reason" :label="reason"
|
||||
<el-option
|
||||
v-for="reason in formData.afterSaleRefundReasons" :key="reason" :label="reason"
|
||||
:value="reason" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="退货理由" prop="afterSaleReturnReasons">
|
||||
<el-select v-model="formData.afterSaleReturnReasons" allow-create filterable multiple
|
||||
<el-select
|
||||
v-model="formData.afterSaleReturnReasons" allow-create filterable multiple
|
||||
placeholder="请直接输入退货理由">
|
||||
<el-option v-for="reason in formData.afterSaleReturnReasons" :key="reason" :label="reason"
|
||||
<el-option
|
||||
v-for="reason in formData.afterSaleReturnReasons" :key="reason" :label="reason"
|
||||
:value="reason" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@@ -32,7 +36,8 @@
|
||||
<el-text class="w-full" size="small" type="info"> 商城是否启用全场包邮</el-text>
|
||||
</el-form-item>
|
||||
<el-form-item label="满额包邮" prop="deliveryExpressFreePrice">
|
||||
<el-input-number v-model="formData.deliveryExpressFreePrice" :min="0" :precision="2" class="!w-xs"
|
||||
<el-input-number
|
||||
v-model="formData.deliveryExpressFreePrice" :min="0" :precision="2" class="!w-xs"
|
||||
placeholder="请输入满额包邮" />
|
||||
<el-text class="w-full" size="small" type="info">
|
||||
商城商品满多少金额即可包邮,单位:元
|
||||
@@ -43,7 +48,8 @@
|
||||
</el-form-item>
|
||||
<!-- 暂时不用 -->
|
||||
<el-form-item v-if="false" label="自动收货" prop="deliveryAutoReceiveDay">
|
||||
<el-input v-model="formData.deliveryAutoReceiveDay" type="number" style="max-width: 350px"
|
||||
<el-input
|
||||
v-model="formData.deliveryAutoReceiveDay" type="number" style="max-width: 350px"
|
||||
placeholder="请输入自动收货时间">
|
||||
<template #append>天</template>
|
||||
</el-input>
|
||||
@@ -57,7 +63,8 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="分佣模式" prop="brokerageEnabledCondition">
|
||||
<el-radio-group v-model="formData.brokerageEnabledCondition">
|
||||
<el-radio v-for="dict in getIntDictOptions(DICT_TYPE.BROKERAGE_ENABLED_CONDITION)" :key="dict.value"
|
||||
<el-radio
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.BROKERAGE_ENABLED_CONDITION)" :key="dict.value"
|
||||
:value="dict.value">
|
||||
{{ dict.label }}
|
||||
</el-radio>
|
||||
@@ -71,7 +78,8 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="分销关系绑定" prop="brokerageBindMode">
|
||||
<el-radio-group v-model="formData.brokerageBindMode">
|
||||
<el-radio v-for="dict in getIntDictOptions(DICT_TYPE.BROKERAGE_BIND_MODE)" :key="dict.value"
|
||||
<el-radio
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.BROKERAGE_BIND_MODE)" :key="dict.value"
|
||||
:value="dict.value">
|
||||
{{ dict.label }}
|
||||
</el-radio>
|
||||
@@ -90,14 +98,16 @@
|
||||
</el-text>
|
||||
</el-form-item>
|
||||
<el-form-item label="一级返佣比例" prop="brokerageFirstPercent">
|
||||
<el-input-number v-model="formData.brokerageFirstPercent" :max="100" :min="0" class="!w-xs"
|
||||
<el-input-number
|
||||
v-model="formData.brokerageFirstPercent" :max="100" :min="0" class="!w-xs"
|
||||
placeholder="请输入一级返佣比例" />
|
||||
<el-text class="w-full" size="small" type="info">
|
||||
订单交易成功后给推广人返佣的百分比
|
||||
</el-text>
|
||||
</el-form-item>
|
||||
<el-form-item label="二级返佣比例" prop="brokerageSecondPercent">
|
||||
<el-input-number v-model="formData.brokerageSecondPercent" :max="100" :min="0" class="!w-xs"
|
||||
<el-input-number
|
||||
v-model="formData.brokerageSecondPercent" :max="100" :min="0" class="!w-xs"
|
||||
placeholder="请输入二级返佣比例" />
|
||||
<el-text class="w-full" size="small" type="info">
|
||||
订单交易成功后给推广人的推荐人返佣的百分比
|
||||
@@ -110,14 +120,16 @@
|
||||
</el-text>
|
||||
</el-form-item>
|
||||
<el-form-item label="提现最低金额" prop="brokerageWithdrawMinPrice">
|
||||
<el-input-number v-model="formData.brokerageWithdrawMinPrice" :min="0" :precision="2" class="!w-xs"
|
||||
<el-input-number
|
||||
v-model="formData.brokerageWithdrawMinPrice" :min="0" :precision="2" class="!w-xs"
|
||||
placeholder="请输入提现最低金额" />
|
||||
<el-text class="w-full" size="small" type="info">
|
||||
用户提现最低金额限制,单位:元
|
||||
</el-text>
|
||||
</el-form-item>
|
||||
<el-form-item label="提现手续费" prop="brokerageWithdrawFeePercent">
|
||||
<el-input-number v-model="formData.brokerageWithdrawFeePercent" :max="100" :min="0" class="!w-xs"
|
||||
<el-input-number
|
||||
v-model="formData.brokerageWithdrawFeePercent" :max="100" :min="0" class="!w-xs"
|
||||
placeholder="请输入提现手续费" />
|
||||
<el-text class="w-full" size="small" type="info">
|
||||
提现手续费百分比,范围 0-100,0 为无提现手续费。例:设置 10,即收取 10% 手续费,提现
|
||||
@@ -126,7 +138,8 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="提现方式" prop="brokerageWithdrawTypes">
|
||||
<el-checkbox-group v-model="formData.brokerageWithdrawTypes">
|
||||
<el-checkbox v-for="dict in getIntDictOptions(DICT_TYPE.BROKERAGE_WITHDRAW_TYPE)" :key="dict.value"
|
||||
<el-checkbox
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.BROKERAGE_WITHDRAW_TYPE)" :key="dict.value"
|
||||
:value="dict.value">
|
||||
{{ dict.label }}
|
||||
</el-checkbox>
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="计费方式" prop="chargeMode">
|
||||
<el-radio-group v-model="formData.chargeMode" @change="changeChargeMode">
|
||||
<el-radio v-for="dict in getIntDictOptions(DICT_TYPE.EXPRESS_CHARGE_MODE)" :key="dict.value"
|
||||
<el-radio
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.EXPRESS_CHARGE_MODE)" :key="dict.value"
|
||||
:value="dict.value">
|
||||
{{ dict.label }}
|
||||
</el-radio>
|
||||
@@ -16,7 +17,8 @@
|
||||
<el-table border style="width: 100%" :data="formData.charges">
|
||||
<el-table-column align="center" label="区域" width="360">
|
||||
<template #default="{ row }">
|
||||
<el-cascader v-model="row.areaIds" :options="areaTree" :props="defaultProps2" class="w-1/1" clearable
|
||||
<el-cascader
|
||||
v-model="row.areaIds" :options="areaTree" :props="defaultProps2" class="w-1/1" clearable
|
||||
placeholder="请选择地区" filterable collapse-tags />
|
||||
</template>
|
||||
</el-table-column>
|
||||
@@ -58,7 +60,8 @@
|
||||
<el-table border style="width: 100%" :data="formData.frees">
|
||||
<el-table-column align="center" label="区域" width="360">
|
||||
<template #default="{ row }">
|
||||
<el-cascader v-model="row.areaIds" :options="areaTree" :props="defaultProps2" class="w-1/1" clearable
|
||||
<el-cascader
|
||||
v-model="row.areaIds" :options="areaTree" :props="defaultProps2" class="w-1/1" clearable
|
||||
placeholder="请选择商品分类" filterable collapse-tags />
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<template>
|
||||
<Dialog v-model="dialogVisible" title="用户导入" width="500">
|
||||
<el-upload ref="uploadRef" v-model:file-list="fileList" :action="importUrl" :auto-upload="false"
|
||||
<el-upload
|
||||
ref="uploadRef" v-model:file-list="fileList" :action="importUrl" :auto-upload="false"
|
||||
:disabled="formLoading" :headers="uploadHeaders" :limit="1" :on-error="submitFormError" :on-exceed="handleExceed"
|
||||
:on-success="submitFormSuccess" accept=".xlsx, .xls" drag>
|
||||
<Icon icon="ep:upload" />
|
||||
@@ -11,7 +12,8 @@
|
||||
可先点击"导出"按钮,下载模板,按照模板填写商户发货信息后,再导入。
|
||||
</div>
|
||||
<span>仅允许导入 xls、xlsx 格式文件。</span>
|
||||
<el-link :underline="false" style="font-size: 12px; vertical-align: baseline" type="primary"
|
||||
<el-link
|
||||
:underline="false" style="font-size: 12px; vertical-align: baseline" type="primary"
|
||||
@click="importTemplate">
|
||||
下载模板
|
||||
</el-link>
|
||||
|
||||
@@ -37,12 +37,14 @@
|
||||
<el-button v-if="formData.deliveryType === DeliveryTypeEnum.EXPRESS.type" type="primary" @click="delivery">
|
||||
发货
|
||||
</el-button>
|
||||
<el-button v-if="formData.deliveryType === DeliveryTypeEnum.EXPRESS.type" type="primary"
|
||||
<el-button
|
||||
v-if="formData.deliveryType === DeliveryTypeEnum.EXPRESS.type" type="primary"
|
||||
@click="updateAddress">
|
||||
修改地址
|
||||
</el-button>
|
||||
<!-- 到店自提 -->
|
||||
<el-button v-if="formData.deliveryType === DeliveryTypeEnum.PICK_UP.type && showPickUp" type="primary"
|
||||
<el-button
|
||||
v-if="formData.deliveryType === DeliveryTypeEnum.PICK_UP.type && showPickUp" type="primary"
|
||||
@click="handlePickUp">
|
||||
核销
|
||||
</el-button>
|
||||
@@ -135,7 +137,8 @@
|
||||
<div v-if="formData.deliveryType === DeliveryTypeEnum.EXPRESS.type">
|
||||
<el-descriptions-item v-if="formData.receiverDetailAddress" label="收货地址: ">
|
||||
{{ formData.receiverAreaName }} {{ formData.receiverDetailAddress }}
|
||||
<el-link v-clipboard:copy="formData.receiverAreaName + ' ' + formData.receiverDetailAddress"
|
||||
<el-link
|
||||
v-clipboard:copy="formData.receiverAreaName + ' ' + formData.receiverDetailAddress"
|
||||
v-clipboard:success="clipboardSuccess" icon="ep:document-copy" type="primary" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item v-if="formData.logisticsId" label="物流公司: ">
|
||||
@@ -150,7 +153,8 @@
|
||||
<el-descriptions-item v-for="item in 2" :key="item" label-class-name="no-colon" />
|
||||
<el-descriptions-item v-if="expressTrackList.length > 0" label="物流详情: ">
|
||||
<el-timeline>
|
||||
<el-timeline-item v-for="(express, index) in expressTrackList" :key="index"
|
||||
<el-timeline-item
|
||||
v-for="(express, index) in expressTrackList" :key="index"
|
||||
:timestamp="formatDate(express.time)">
|
||||
{{ express.content }}
|
||||
</el-timeline-item>
|
||||
@@ -169,7 +173,8 @@
|
||||
<el-descriptions title="订单操作日志">
|
||||
<el-descriptions-item labelClassName="no-colon">
|
||||
<el-timeline>
|
||||
<el-timeline-item v-for="(log, index) in formData.logs" :key="index" :timestamp="formatDate(log.createTime!)"
|
||||
<el-timeline-item
|
||||
v-for="(log, index) in formData.logs" :key="index" :timestamp="formatDate(log.createTime!)"
|
||||
placement="top">
|
||||
<div class="el-timeline-right-content">
|
||||
{{ log.content }}
|
||||
|
||||
@@ -7,36 +7,42 @@
|
||||
<el-form ref="queryFormRef" :inline="true" :model="queryParams" class="-mb-15px" label-width="68px">
|
||||
<el-form-item label="订单状态" prop="status">
|
||||
<el-select v-model="queryParams.status" class="!w-280px" clearable placeholder="全部">
|
||||
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.TRADE_ORDER_STATUS)" :key="dict.value"
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.TRADE_ORDER_STATUS)" :key="dict.value"
|
||||
:label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="支付方式" prop="payChannelCode">
|
||||
<el-select v-model="queryParams.payChannelCode" class="!w-280px" clearable placeholder="全部">
|
||||
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.PAY_CHANNEL_CODE)" :key="dict.value" :label="dict.label"
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.PAY_CHANNEL_CODE)" :key="dict.value" :label="dict.label"
|
||||
:value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker v-model="queryParams.createTime"
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-280px" end-placeholder="自定义时间"
|
||||
start-placeholder="自定义时间" type="daterange" value-format="YYYY-MM-DD HH:mm:ss" />
|
||||
</el-form-item>
|
||||
<el-form-item label="订单来源" prop="terminal">
|
||||
<el-select v-model="queryParams.terminal" class="!w-280px" clearable placeholder="全部">
|
||||
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.TERMINAL)" :key="dict.value" :label="dict.label"
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.TERMINAL)" :key="dict.value" :label="dict.label"
|
||||
:value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="订单类型" prop="type">
|
||||
<el-select v-model="queryParams.type" class="!w-280px" clearable placeholder="全部">
|
||||
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.TRADE_ORDER_TYPE)" :key="dict.value" :label="dict.label"
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.TRADE_ORDER_TYPE)" :key="dict.value" :label="dict.label"
|
||||
:value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="配送方式" prop="deliveryType">
|
||||
<el-select v-model="queryParams.deliveryType" class="!w-280px" clearable placeholder="全部">
|
||||
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.TRADE_DELIVERY_TYPE)" :key="dict.value"
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.TRADE_DELIVERY_TYPE)" :key="dict.value"
|
||||
:label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@@ -50,16 +56,20 @@
|
||||
<el-option v-for="item in pickUpStoreList" :key="item.id" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="queryParams.deliveryType === DeliveryTypeEnum.PICK_UP.type" label="核销码"
|
||||
<el-form-item
|
||||
v-if="queryParams.deliveryType === DeliveryTypeEnum.PICK_UP.type" label="核销码"
|
||||
prop="pickUpVerifyCode">
|
||||
<el-input v-model="queryParams.pickUpVerifyCode" class="!w-280px" clearable placeholder="请输入自提核销码"
|
||||
<el-input
|
||||
v-model="queryParams.pickUpVerifyCode" class="!w-280px" clearable placeholder="请输入自提核销码"
|
||||
@keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="聚合搜索">
|
||||
<el-input v-show="true" v-model="queryParams[queryType.queryParam]"
|
||||
<el-input
|
||||
v-show="true" v-model="queryParams[queryType.queryParam]"
|
||||
:type="queryType.queryParam === 'userId' ? 'number' : 'text'" class="!w-280px" clearable placeholder="请输入">
|
||||
<template #prepend>
|
||||
<el-select v-model="queryType.queryParam" class="!w-110px" clearable placeholder="全部"
|
||||
<el-select
|
||||
v-model="queryType.queryParam" class="!w-110px" clearable placeholder="全部"
|
||||
@change="inputChangeSelect">
|
||||
<el-option v-for="dict in dynamicSearchList" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
@@ -111,7 +121,8 @@
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<!-- 如果是【快递】,并且【未发货】,则展示【发货】按钮 -->
|
||||
<el-dropdown-item v-if="
|
||||
<el-dropdown-item
|
||||
v-if="
|
||||
row.deliveryType === DeliveryTypeEnum.EXPRESS.type &&
|
||||
row.status === TradeOrderStatusEnum.UNDELIVERED.status
|
||||
" command="delivery">
|
||||
@@ -125,7 +136,8 @@
|
||||
<Icon icon="ep:printer" />
|
||||
打印
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item v-if="row.deliveryType === DeliveryTypeEnum.EXPRESS.type &&
|
||||
<el-dropdown-item
|
||||
v-if="row.deliveryType === DeliveryTypeEnum.EXPRESS.type &&
|
||||
(row.status === TradeOrderStatusEnum.DELIVERED.status ||
|
||||
row.status === TradeOrderStatusEnum.UNDELIVERED.status)" command="cancel">
|
||||
<Icon icon="mingcute:delete-2-line" />
|
||||
@@ -144,7 +156,8 @@
|
||||
</OrderTableColumn>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNo" :total="total"
|
||||
<Pagination
|
||||
v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNo" :total="total"
|
||||
@pagination="getList" />
|
||||
</ContentWrap>
|
||||
|
||||
|
||||
@@ -33,7 +33,8 @@
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="formData.authStatus == 4" label="拒绝原因" prop="changeBalance">
|
||||
<el-input v-model="formData.failReason" style="width: 240px" :autosize="{ minRows: 2, maxRows: 4 }"
|
||||
<el-input
|
||||
v-model="formData.failReason" style="width: 240px" :autosize="{ minRows: 2, maxRows: 4 }"
|
||||
type="textarea" placeholder="请输入拒绝原因" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
@@ -3,13 +3,15 @@
|
||||
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
|
||||
<el-form-item label="审核类型" prop="bizType">
|
||||
<el-select v-model="queryParams.bizType" placeholder="请选择审核类型" clearable class="!w-240px">
|
||||
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.MEMBER_COM_AUTH_TYPE)" :key="dict.value"
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.MEMBER_COM_AUTH_TYPE)" :key="dict.value"
|
||||
:label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="审核状态" prop="authStatus">
|
||||
<el-select v-model="queryParams.authStatus" placeholder="请选择审核状态" clearable class="!w-240px">
|
||||
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.MEMBER_COM_AUTH_STATUS)" :key="dict.value"
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.MEMBER_COM_AUTH_STATUS)" :key="dict.value"
|
||||
:label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@@ -64,14 +66,16 @@
|
||||
<el-button v-if="[3, 4].includes(row.bizType)" link type="primary" @click="openForm('view', row)">
|
||||
查看
|
||||
</el-button>
|
||||
<el-button v-if="![3, 4].includes(row.bizType) && !['3', '4'].includes(row.authStatus)" link type="primary"
|
||||
<el-button
|
||||
v-if="![3, 4].includes(row.bizType) && !['3', '4'].includes(row.authStatus)" link type="primary"
|
||||
@click="openForm('check', row)">
|
||||
审核
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<Pagination v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNo" :total="total"
|
||||
<Pagination
|
||||
v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNo" :total="total"
|
||||
@pagination="getList" />
|
||||
<ComAuthForm ref="formRef" @success="getList" />
|
||||
</ContentWrap>
|
||||
|
||||
@@ -110,7 +110,8 @@
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="举报">
|
||||
<el-form-item label-width="200px" label="举报类型" prop="reportTypeList">
|
||||
<el-select style="width: 80%" v-model="formData.reportTypeList" allow-create filterable multiple
|
||||
<el-select
|
||||
style="width: 80%" v-model="formData.reportTypeList" allow-create filterable multiple
|
||||
placeholder="请直接输入举报类型">
|
||||
<el-option v-for="reason in formData.reportTypeList" :key="reason" :label="reason" :value="reason" />
|
||||
</el-select>
|
||||
|
||||
@@ -3,15 +3,18 @@
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
|
||||
<el-form-item label="用户名" prop="memberName">
|
||||
<el-input v-model="queryParams.memberName" placeholder="请输入用户编号" clearable @keyup.enter="handleQuery"
|
||||
<el-input
|
||||
v-model="queryParams.memberName" placeholder="请输入用户编号" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="反馈内容" prop="content">
|
||||
<el-input v-model="queryParams.content" placeholder="请输入反馈内容" clearable @keyup.enter="handleQuery"
|
||||
<el-input
|
||||
v-model="queryParams.content" placeholder="请输入反馈内容" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
|
||||
start-placeholder="开始日期" end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-220px" />
|
||||
</el-form-item>
|
||||
@@ -22,11 +25,13 @@
|
||||
<el-button @click="resetQuery">
|
||||
<Icon icon="ep:refresh" class="mr-5px" /> 重置
|
||||
</el-button>
|
||||
<el-button type="primary" v-if="false" plain @click="openForm('create')"
|
||||
<el-button
|
||||
type="primary" v-if="false" plain @click="openForm('create')"
|
||||
v-hasPermi="['member:feedback:create']">
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button type="success" v-if="false" plain @click="handleExport" :loading="exportLoading"
|
||||
<el-button
|
||||
type="success" v-if="false" plain @click="handleExport" :loading="exportLoading"
|
||||
v-hasPermi="['member:feedback:export']">
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
@@ -47,7 +52,8 @@
|
||||
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="{ row }">
|
||||
<el-button v-if="false" link type="primary" @click="openForm('update', row.id)"
|
||||
<el-button
|
||||
v-if="false" link type="primary" @click="openForm('update', row.id)"
|
||||
v-hasPermi="['member:feedback:update']">
|
||||
编辑
|
||||
</el-button>
|
||||
@@ -58,7 +64,8 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||
<Pagination
|
||||
:total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList" />
|
||||
</ContentWrap>
|
||||
|
||||
|
||||
@@ -16,13 +16,15 @@
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="升级经验" prop="experience">
|
||||
<el-input-number v-model="formData.experience" :min="0" :precision="0" placeholder="请输入升级经验"
|
||||
<el-input-number
|
||||
v-model="formData.experience" :min="0" :precision="0" placeholder="请输入升级经验"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="享受折扣(%)" prop="discountPercent">
|
||||
<el-input-number v-model="formData.discountPercent" :min="0" :max="100" :precision="0" placeholder="请输入享受折扣"
|
||||
<el-input-number
|
||||
v-model="formData.discountPercent" :min="0" :max="100" :precision="0" placeholder="请输入享受折扣"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
@@ -5,12 +5,14 @@
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
|
||||
<el-form-item label="等级名称" prop="name">
|
||||
<el-input v-model="queryParams.name" placeholder="请输入等级名称" clearable @keyup.enter="handleQuery"
|
||||
<el-input
|
||||
v-model="queryParams.name" placeholder="请输入等级名称" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable class="!w-240px">
|
||||
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)" :key="dict.value" :label="dict.label"
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)" :key="dict.value" :label="dict.label"
|
||||
:value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@@ -39,7 +41,8 @@
|
||||
</el-table-column>
|
||||
<el-table-column label="等级背景图" align="center" prop="backgroundUrl" min-width="100">
|
||||
<template #default="scope">
|
||||
<el-image :src="scope.row.backgroundUrl" class="h-30px w-30px"
|
||||
<el-image
|
||||
:src="scope.row.backgroundUrl" class="h-30px w-30px"
|
||||
:preview-src-list="[scope.row.backgroundUrl]" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
|
||||
<el-form-item label="会员标题" prop="title">
|
||||
<el-input v-model="queryParams.title" placeholder="请输入会员标题" clearable @keyup.enter="handleQuery"
|
||||
<el-input
|
||||
v-model="queryParams.title" placeholder="请输入会员标题" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
@@ -100,7 +101,8 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||
<Pagination
|
||||
:total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList" />
|
||||
</ContentWrap>
|
||||
</template>
|
||||
|
||||
@@ -37,7 +37,8 @@
|
||||
<el-col :span="12">
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="formData.status" placeholder="请选择状态" clearable class="!w-240px">
|
||||
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.MEMBER_OPEN_TYPE_STATUS)" :key="dict.value"
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.MEMBER_OPEN_TYPE_STATUS)" :key="dict.value"
|
||||
:label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@@ -45,7 +46,8 @@
|
||||
<el-col :span="12">
|
||||
<el-form-item label="是否热门" prop="isHot">
|
||||
<el-select v-model="formData.isHot" placeholder="请选择是否热门" clearable class="!w-240px">
|
||||
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)" :key="dict.value"
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)" :key="dict.value"
|
||||
:label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
|
||||
<el-form-item label="会员标题" prop="title">
|
||||
<el-input v-model="queryParams.title" placeholder="请输入会员标题" clearable @keyup.enter="handleQuery"
|
||||
<el-input
|
||||
v-model="queryParams.title" placeholder="请输入会员标题" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
@@ -16,7 +17,8 @@
|
||||
<el-button type="primary" plain @click="openForm('create')" v-hasPermi="['member:open-type:create']">
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button type="success" plain @click="handleExport" :loading="exportLoading"
|
||||
<el-button
|
||||
type="success" plain @click="handleExport" :loading="exportLoading"
|
||||
v-hasPermi="['member:open-type:export']">
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
@@ -63,7 +65,8 @@
|
||||
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" @click="openForm('update', scope.row.id)"
|
||||
<el-button
|
||||
link type="primary" @click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['member:open-type:update']">
|
||||
编辑
|
||||
</el-button>
|
||||
@@ -74,7 +77,8 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||
<Pagination
|
||||
:total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList" />
|
||||
</ContentWrap>
|
||||
|
||||
|
||||
@@ -4,11 +4,13 @@
|
||||
<el-form ref="queryFormRef" :inline="true" :model="queryParams" class="-mb-15px" label-width="68px">
|
||||
<el-form-item>
|
||||
<el-form-item label="操作人" prop="operatorMemberNickname">
|
||||
<el-input v-model="queryParams.operatorMemberNickname" placeholder="请输入操作人" clearable
|
||||
<el-input
|
||||
v-model="queryParams.operatorMemberNickname" placeholder="请输入操作人" clearable
|
||||
@keyup.enter="handleQuery" class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="操作时间" prop="createTime">
|
||||
<el-date-picker v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
|
||||
start-placeholder="开始日期" end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-440px" />
|
||||
</el-form-item>
|
||||
@@ -64,7 +66,8 @@
|
||||
<el-table-column label="操作时间" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
|
||||
</el-table>
|
||||
</ContentWrap>
|
||||
<Pagination v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNo" :total="total"
|
||||
<Pagination
|
||||
v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNo" :total="total"
|
||||
@pagination="getList" />
|
||||
|
||||
</template>
|
||||
|
||||
@@ -4,11 +4,13 @@
|
||||
<el-form ref="queryFormRef" :inline="true" :model="queryParams" class="-mb-15px" label-width="68px">
|
||||
<el-form-item>
|
||||
<el-form-item label="操作人" prop="operatorMemberNickname">
|
||||
<el-input v-model="queryParams.operatorMemberNickname" placeholder="请输入操作人" clearable
|
||||
<el-input
|
||||
v-model="queryParams.operatorMemberNickname" placeholder="请输入操作人" clearable
|
||||
@keyup.enter="handleQuery" class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="操作时间" prop="createTime">
|
||||
<el-date-picker v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
|
||||
start-placeholder="开始日期" end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-440px" />
|
||||
</el-form-item>
|
||||
@@ -72,7 +74,8 @@
|
||||
<el-table-column label="操作时间" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
|
||||
</el-table>
|
||||
</ContentWrap>
|
||||
<Pagination v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNo" :total="total"
|
||||
<Pagination
|
||||
v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNo" :total="total"
|
||||
@pagination="getList" />
|
||||
|
||||
</template>
|
||||
|
||||
@@ -3,11 +3,13 @@
|
||||
<ContentWrap>
|
||||
<el-form ref="queryFormRef" :inline="true" :model="queryParams" class="-mb-15px" label-width="68px">
|
||||
<el-form-item label="操作人" prop="operatorMemberNickname">
|
||||
<el-input v-model="queryParams.operatorMemberNickname" placeholder="请输入操作人" clearable @keyup.enter="handleQuery"
|
||||
<el-input
|
||||
v-model="queryParams.operatorMemberNickname" placeholder="请输入操作人" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="操作时间" prop="createTime">
|
||||
<el-date-picker v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
|
||||
start-placeholder="开始日期" end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-440px" />
|
||||
</el-form-item>
|
||||
@@ -70,7 +72,8 @@
|
||||
<el-table-column label="操作时间" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
|
||||
</el-table>
|
||||
</ContentWrap>
|
||||
<Pagination v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNo" :total="total"
|
||||
<Pagination
|
||||
v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNo" :total="total"
|
||||
@pagination="getList" />
|
||||
|
||||
</template>
|
||||
|
||||
@@ -3,11 +3,13 @@
|
||||
<ContentWrap>
|
||||
<el-form ref="queryFormRef" :inline="true" :model="queryParams" class="-mb-15px" label-width="68px">
|
||||
<el-form-item label="操作人" prop="operatorMemberNickname">
|
||||
<el-input v-model="queryParams.operatorMemberNickname" placeholder="请输入操作人" clearable @keyup.enter="handleQuery"
|
||||
<el-input
|
||||
v-model="queryParams.operatorMemberNickname" placeholder="请输入操作人" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="操作时间" prop="createTime">
|
||||
<el-date-picker v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
|
||||
start-placeholder="开始日期" end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-440px" />
|
||||
</el-form-item>
|
||||
@@ -77,7 +79,8 @@
|
||||
<el-table-column label="操作时间" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
|
||||
</el-table>
|
||||
</ContentWrap>
|
||||
<Pagination v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNo" :total="total"
|
||||
<Pagination
|
||||
v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNo" :total="total"
|
||||
@pagination="getList" />
|
||||
|
||||
</template>
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
<el-form ref="queryFormRef" :inline="true" :model="queryParams" class="-mb-15px" label-width="68px">
|
||||
<el-form-item>
|
||||
<el-form-item label="操作时间" prop="createTime">
|
||||
<el-date-picker v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
|
||||
start-placeholder="开始日期" end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-440px" />
|
||||
</el-form-item>
|
||||
@@ -42,7 +43,8 @@
|
||||
<el-table-column label="操作时间" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
|
||||
</el-table>
|
||||
</ContentWrap>
|
||||
<Pagination v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNo" :total="total"
|
||||
<Pagination
|
||||
v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNo" :total="total"
|
||||
@pagination="getList" />
|
||||
|
||||
</template>
|
||||
|
||||
@@ -3,11 +3,13 @@
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
|
||||
<el-form-item label="用户" prop="memberNickname">
|
||||
<el-input v-model="queryParams.memberNickname" placeholder="请输入用户" clearable @keyup.enter="handleQuery"
|
||||
<el-input
|
||||
v-model="queryParams.memberNickname" placeholder="请输入用户" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
|
||||
start-placeholder="开始日期" end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-440px" />
|
||||
</el-form-item>
|
||||
@@ -21,7 +23,8 @@
|
||||
<el-button v-if="false" type="primary" plain @click="openForm('create')" v-hasPermi="['member:recent:create']">
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button v-if="false" type="success" plain @click="handleExport" :loading="exportLoading"
|
||||
<el-button
|
||||
v-if="false" type="success" plain @click="handleExport" :loading="exportLoading"
|
||||
v-hasPermi="['member:recent:export']">
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
@@ -74,7 +77,8 @@
|
||||
<el-table-column label="用户标签" align="center" width="200">
|
||||
<template #default="{ row }">
|
||||
<div class="flex gap-2">
|
||||
<dict-tag v-for="v in row.memberTagList" :key="v.tagBizType" :type="DICT_TYPE.MEMBER_RECENT_TAG"
|
||||
<dict-tag
|
||||
v-for="v in row.memberTagList" :key="v.tagBizType" :type="DICT_TYPE.MEMBER_RECENT_TAG"
|
||||
:value="v.tagBizType" />
|
||||
</div>
|
||||
</template>
|
||||
@@ -128,7 +132,8 @@
|
||||
<el-button link type="primary" @click="openDetail(row.id)">
|
||||
详情
|
||||
</el-button>
|
||||
<el-button v-if="false" link type="primary" @click="openForm('update', row.id)"
|
||||
<el-button
|
||||
v-if="false" link type="primary" @click="openForm('update', row.id)"
|
||||
v-hasPermi="['member:recent:update']">
|
||||
编辑
|
||||
</el-button>
|
||||
@@ -139,7 +144,8 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||
<Pagination
|
||||
:total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList" />
|
||||
</ContentWrap>
|
||||
|
||||
|
||||
@@ -2,11 +2,13 @@
|
||||
<ContentWrap>
|
||||
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="100px">
|
||||
<el-form-item label="举报用户" prop="operatorMemberNickname">
|
||||
<el-input v-model="queryParams.operatorMemberNickname" placeholder="请输入举报用户" clearable
|
||||
<el-input
|
||||
v-model="queryParams.operatorMemberNickname" placeholder="请输入举报用户" clearable
|
||||
@keyup.enter="handleQuery" class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="被举报用户" prop="memberNickname">
|
||||
<el-input v-model="queryParams.memberNickname" placeholder="请输入被举报用户" clearable @keyup.enter="handleQuery"
|
||||
<el-input
|
||||
v-model="queryParams.memberNickname" placeholder="请输入被举报用户" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
@@ -69,7 +71,8 @@
|
||||
<el-table-column label="举报内容" align="center" prop="reportDescription" min-width="150" />
|
||||
<el-table-column label="举报时间" align="center" prop="createTime" :formatter="dateFormatter" width="180" />
|
||||
</el-table>
|
||||
<Pagination v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNo" :total="total"
|
||||
<Pagination
|
||||
v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNo" :total="total"
|
||||
@pagination="getList" />
|
||||
</ContentWrap>
|
||||
</template>
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px" v-loading="formLoading">
|
||||
<el-form-item label="用户标签" prop="memberRecentTagList">
|
||||
<el-select v-model="formData.memberRecentTagList" multiple placeholder="请选择用户标签" clearable class="!w-240px">
|
||||
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.MEMBER_RECENT_TAG, ['2', '4'])" :key="dict.value"
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.MEMBER_RECENT_TAG, ['2', '4'])" :key="dict.value"
|
||||
:label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
@@ -4,36 +4,42 @@
|
||||
<el-form ref="queryFormRef" :inline="true" :model="queryParams" class="-mb-15px" label-width="68px">
|
||||
<el-form-item label="订单状态" prop="status">
|
||||
<el-select v-model="queryParams.status" class="!w-280px" clearable placeholder="全部">
|
||||
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.TRADE_ORDER_STATUS)" :key="dict.value"
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.TRADE_ORDER_STATUS)" :key="dict.value"
|
||||
:label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="支付方式" prop="payChannelCode">
|
||||
<el-select v-model="queryParams.payChannelCode" class="!w-280px" clearable placeholder="全部">
|
||||
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.PAY_CHANNEL_CODE)" :key="dict.value" :label="dict.label"
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.PAY_CHANNEL_CODE)" :key="dict.value" :label="dict.label"
|
||||
:value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker v-model="queryParams.createTime"
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-280px" end-placeholder="自定义时间"
|
||||
start-placeholder="自定义时间" type="daterange" value-format="YYYY-MM-DD HH:mm:ss" />
|
||||
</el-form-item>
|
||||
<el-form-item label="订单来源" prop="terminal">
|
||||
<el-select v-model="queryParams.terminal" class="!w-280px" clearable placeholder="全部">
|
||||
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.TERMINAL)" :key="dict.value" :label="dict.label"
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.TERMINAL)" :key="dict.value" :label="dict.label"
|
||||
:value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="订单类型" prop="type">
|
||||
<el-select v-model="queryParams.type" class="!w-280px" clearable placeholder="全部">
|
||||
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.TRADE_ORDER_TYPE)" :key="dict.value" :label="dict.label"
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.TRADE_ORDER_TYPE)" :key="dict.value" :label="dict.label"
|
||||
:value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="配送方式" prop="deliveryType">
|
||||
<el-select v-model="queryParams.deliveryType" class="!w-280px" clearable placeholder="全部">
|
||||
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.TRADE_DELIVERY_TYPE)" :key="dict.value"
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.TRADE_DELIVERY_TYPE)" :key="dict.value"
|
||||
:label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@@ -47,16 +53,20 @@
|
||||
<el-option v-for="item in pickUpStoreList" :key="item.id" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="queryParams.deliveryType === DeliveryTypeEnum.PICK_UP.type" label="核销码"
|
||||
<el-form-item
|
||||
v-if="queryParams.deliveryType === DeliveryTypeEnum.PICK_UP.type" label="核销码"
|
||||
prop="pickUpVerifyCode">
|
||||
<el-input v-model="queryParams.pickUpVerifyCode" class="!w-280px" clearable placeholder="请输入自提核销码"
|
||||
<el-input
|
||||
v-model="queryParams.pickUpVerifyCode" class="!w-280px" clearable placeholder="请输入自提核销码"
|
||||
@keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="聚合搜索">
|
||||
<el-input v-show="true" v-model="queryParams[queryType.queryParam]" class="!w-280px" clearable
|
||||
<el-input
|
||||
v-show="true" v-model="queryParams[queryType.queryParam]" class="!w-280px" clearable
|
||||
placeholder="请输入">
|
||||
<template #prepend>
|
||||
<el-select v-model="queryType.queryParam" class="!w-110px" clearable placeholder="全部"
|
||||
<el-select
|
||||
v-model="queryType.queryParam" class="!w-110px" clearable placeholder="全部"
|
||||
@change="inputChangeSelect">
|
||||
<el-option v-for="dict in dynamicSearchList" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
@@ -90,7 +100,8 @@
|
||||
</OrderTableColumn>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNo" :total="total"
|
||||
<Pagination
|
||||
v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNo" :total="total"
|
||||
@pagination="getList" />
|
||||
</ContentWrap>
|
||||
</template>
|
||||
|
||||
@@ -5,20 +5,24 @@
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form ref="queryFormRef" :inline="true" :model="queryParams" class="-mb-15px" label-width="68px">
|
||||
<el-form-item label="用户昵称" prop="nickname">
|
||||
<el-input v-model="queryParams.nickname" class="!w-240px" clearable placeholder="请输入用户昵称"
|
||||
<el-input
|
||||
v-model="queryParams.nickname" class="!w-240px" clearable placeholder="请输入用户昵称"
|
||||
@keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="手机号" prop="mobile">
|
||||
<el-input v-model="queryParams.mobile" class="!w-240px" clearable placeholder="请输入手机号"
|
||||
<el-input
|
||||
v-model="queryParams.mobile" class="!w-240px" clearable placeholder="请输入手机号"
|
||||
@keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="注册时间" prop="createTime">
|
||||
<el-date-picker v-model="queryParams.createTime"
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-240px" end-placeholder="结束日期"
|
||||
start-placeholder="开始日期" type="daterange" value-format="YYYY-MM-DD HH:mm:ss" />
|
||||
</el-form-item>
|
||||
<el-form-item label="登录时间" prop="loginDate">
|
||||
<el-date-picker v-model="queryParams.loginDate" :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
<el-date-picker
|
||||
v-model="queryParams.loginDate" :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-240px" end-placeholder="结束日期" start-placeholder="开始日期" type="daterange"
|
||||
value-format="YYYY-MM-DD HH:mm:ss" />
|
||||
</el-form-item>
|
||||
@@ -47,7 +51,8 @@
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" :stripe="true"
|
||||
<el-table
|
||||
v-loading="loading" :data="list" :show-overflow-tooltip="true" :stripe="true"
|
||||
@selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column align="center" label="用户编号" prop="id" width="120px" />
|
||||
@@ -64,7 +69,8 @@
|
||||
<el-table-column align="center" width="160px" label="用户标签">
|
||||
<template #default="{ row }">
|
||||
<div class="grid grid-cols-2 gap-1">
|
||||
<dict-tag v-for="v in row.memberTagList" :key="v.tagBizType" :type="DICT_TYPE.MEMBER_RECENT_TAG"
|
||||
<dict-tag
|
||||
v-for="v in row.memberTagList" :key="v.tagBizType" :type="DICT_TYPE.MEMBER_RECENT_TAG"
|
||||
:value="v.tagBizType" />
|
||||
</div>
|
||||
</template>
|
||||
@@ -75,28 +81,32 @@
|
||||
<div class="switch-cell">
|
||||
<span>是否推送:</span>
|
||||
<span>
|
||||
<el-switch v-model="row.recentCfg.isPush" size="small" :active-value="true" :inactive-value="false"
|
||||
<el-switch
|
||||
v-model="row.recentCfg.isPush" size="small" :active-value="true" :inactive-value="false"
|
||||
@change="memberCfgChange(row)" />
|
||||
</span>
|
||||
</div>
|
||||
<div class="switch-cell">
|
||||
<span>首页隐身:</span>
|
||||
<span>
|
||||
<el-switch v-model="row.recentCfg.homeHide" size="small" :active-value="true" :inactive-value="false"
|
||||
<el-switch
|
||||
v-model="row.recentCfg.homeHide" size="small" :active-value="true" :inactive-value="false"
|
||||
@change="memberCfgChange(row)" />
|
||||
</span>
|
||||
</div>
|
||||
<div class="switch-cell">
|
||||
<span>隐私保护</span>
|
||||
<span>
|
||||
<el-switch v-model="row.recentCfg.privacySecure" size="small" :active-value="true"
|
||||
<el-switch
|
||||
v-model="row.recentCfg.privacySecure" size="small" :active-value="true"
|
||||
:inactive-value="false" @change="memberCfgChange(row)" />
|
||||
</span>
|
||||
</div>
|
||||
<div class="switch-cell">
|
||||
<span>短信通知</span>
|
||||
<span>
|
||||
<el-switch v-model="row.recentCfg.shortNote" size="small" :active-value="true" :inactive-value="false"
|
||||
<el-switch
|
||||
v-model="row.recentCfg.shortNote" size="small" :active-value="true" :inactive-value="false"
|
||||
@change="memberCfgChange(row)" />
|
||||
</span>
|
||||
</div>
|
||||
@@ -126,7 +136,8 @@
|
||||
<template #default="{ row }">
|
||||
<div class="flex items-center justify-center">
|
||||
<el-button link type="primary" @click="openDetail(row.id)">详情</el-button>
|
||||
<el-dropdown v-hasPermi="[
|
||||
<el-dropdown
|
||||
v-hasPermi="[
|
||||
'member:user:update',
|
||||
'member:user:update-level',
|
||||
'member:user:update-point',
|
||||
@@ -164,7 +175,8 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNo" :total="total"
|
||||
<Pagination
|
||||
v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNo" :total="total"
|
||||
@pagination="getList" />
|
||||
</ContentWrap>
|
||||
|
||||
|
||||
@@ -19,7 +19,8 @@
|
||||
<el-input v-model="formData.config.appId" :style="{ width: '100%' }" clearable placeholder="请输入微信 APPID" />
|
||||
</el-form-item>
|
||||
<el-form-item label-width="180px">
|
||||
<a href="https://pay.weixin.qq.com/index.php/extend/merchant_appid/mapay_platform/account_manage"
|
||||
<a
|
||||
href="https://pay.weixin.qq.com/index.php/extend/merchant_appid/mapay_platform/account_manage"
|
||||
target="_blank">
|
||||
前往微信商户平台查看 APPID
|
||||
</a>
|
||||
@@ -38,7 +39,8 @@
|
||||
<!-- start 合作商户 start -->
|
||||
<div v-if="state.currentTab === 'Cooperate'">
|
||||
<el-form-item label="微信平台 APPID" label-width="180px" prop="config.appId">
|
||||
<el-input v-model="formData.config.appId" :style="{ width: '100%' }" clearable
|
||||
<el-input
|
||||
v-model="formData.config.appId" :style="{ width: '100%' }" clearable
|
||||
placeholder="请输入微信平台 APPID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="微信平台商户号" label-width="180px" prop="config.mchId">
|
||||
@@ -46,11 +48,13 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="微信合作伙伴 APPID" label-width="180px" prop="config.subAppId">
|
||||
<el-input v-model="formData.config.subAppId" :style="{ width: '100%' }" clearable
|
||||
<el-input
|
||||
v-model="formData.config.subAppId" :style="{ width: '100%' }" clearable
|
||||
placeholder="请输入微信平台 APPID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="微信合作伙伴商户号" label-width="180px" prop="config.subMchId">
|
||||
<el-input v-model="formData.config.subMchId" :style="{ width: '100%' }" clearable
|
||||
<el-input
|
||||
v-model="formData.config.subMchId" :style="{ width: '100%' }" clearable
|
||||
placeholder="请输入微信平台商户号" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
@@ -58,7 +62,8 @@
|
||||
|
||||
<el-form-item label="渠道状态" label-width="180px" prop="status">
|
||||
<el-radio-group v-model="formData.status">
|
||||
<el-radio v-for="dict in getDictOptions(DICT_TYPE.COMMON_STATUS)" :key="parseInt(dict.value)"
|
||||
<el-radio
|
||||
v-for="dict in getDictOptions(DICT_TYPE.COMMON_STATUS)" :key="parseInt(dict.value)"
|
||||
:value="parseInt(dict.value)">
|
||||
{{ dict.label }}
|
||||
</el-radio>
|
||||
@@ -76,11 +81,13 @@
|
||||
<el-input v-model="formData.config.mchKey" clearable placeholder="请输入商户密钥" />
|
||||
</el-form-item>
|
||||
<el-form-item label="apiclient_cert.p12 证书" label-width="180px" prop="config.keyContent">
|
||||
<el-input v-model="formData.config.keyContent" :autosize="{ minRows: 8, maxRows: 8 }"
|
||||
<el-input
|
||||
v-model="formData.config.keyContent" :autosize="{ minRows: 8, maxRows: 8 }"
|
||||
:style="{ width: '100%' }" placeholder="请上传 apiclient_cert.p12 证书" readonly type="textarea" />
|
||||
</el-form-item>
|
||||
<el-form-item label="" label-width="180px">
|
||||
<el-upload :before-upload="p12FileBeforeUpload" :http-request="keyContentUpload" :limit="1" accept=".p12"
|
||||
<el-upload
|
||||
:before-upload="p12FileBeforeUpload" :http-request="keyContentUpload" :limit="1" accept=".p12"
|
||||
action="">
|
||||
<el-button type="primary">
|
||||
<Icon class="mr-5px" icon="ep:upload" />
|
||||
@@ -94,11 +101,13 @@
|
||||
<el-input v-model="formData.config.apiV3Key" clearable placeholder="请输入 API V3 密钥" />
|
||||
</el-form-item>
|
||||
<el-form-item label="apiclient_key.pem 证书" label-width="180px" prop="config.privateKeyContent">
|
||||
<el-input v-model="formData.config.privateKeyContent" :autosize="{ minRows: 8, maxRows: 8 }"
|
||||
<el-input
|
||||
v-model="formData.config.privateKeyContent" :autosize="{ minRows: 8, maxRows: 8 }"
|
||||
:style="{ width: '100%' }" placeholder="请上传 apiclient_key.pem 证书" readonly type="textarea" />
|
||||
</el-form-item>
|
||||
<el-form-item label="" label-width="180px" prop="privateKeyContentFile">
|
||||
<el-upload ref="privateKeyContentFile" :before-upload="pemFileBeforeUpload"
|
||||
<el-upload
|
||||
ref="privateKeyContentFile" :before-upload="pemFileBeforeUpload"
|
||||
:http-request="privateKeyContentUpload" :limit="1" accept=".pem" action="">
|
||||
<el-button type="primary">
|
||||
<Icon class="mr-5px" icon="ep:upload" />
|
||||
|
||||
@@ -3,17 +3,20 @@
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
|
||||
<el-form-item label="套餐名" prop="name">
|
||||
<el-input v-model="queryParams.name" placeholder="请输入套餐名" clearable @keyup.enter="handleQuery"
|
||||
<el-input
|
||||
v-model="queryParams.name" placeholder="请输入套餐名" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable class="!w-240px">
|
||||
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)" :key="dict.value" :label="dict.label"
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)" :key="dict.value" :label="dict.label"
|
||||
:value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
|
||||
start-placeholder="开始日期" end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-240px" />
|
||||
</el-form-item>
|
||||
@@ -54,11 +57,13 @@
|
||||
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" @click="openForm('update', scope.row.id)"
|
||||
<el-button
|
||||
link type="primary" @click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['pay:wallet-recharge-package:update']">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button link type="danger" @click="handleDelete(scope.row.id)"
|
||||
<el-button
|
||||
link type="danger" @click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['pay:wallet-recharge-package:delete']">
|
||||
删除
|
||||
</el-button>
|
||||
@@ -66,7 +71,8 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||
<Pagination
|
||||
:total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList" />
|
||||
</ContentWrap>
|
||||
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item style="width: 100%;" v-if="formData.checkStatus == '3'" label="拒绝原因" prop="txRefuse">
|
||||
<el-input style="width: 100%;" v-model="formData.txRefuse" :autosize="{ minRows: 3, maxRows: 4 }"
|
||||
<el-input
|
||||
style="width: 100%;" v-model="formData.txRefuse" :autosize="{ minRows: 3, maxRows: 4 }"
|
||||
type="textarea" placeholder="请输入拒绝原因" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
|
||||
<el-form-item label="用户id" prop="userId">
|
||||
<el-input v-model="queryParams.userId" placeholder="请输入用户id" clearable @keyup.enter="handleQuery"
|
||||
<el-input
|
||||
v-model="queryParams.userId" placeholder="请输入用户id" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="提现状态" prop="checkStatus">
|
||||
@@ -83,7 +84,8 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||
<Pagination
|
||||
:total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList" />
|
||||
</ContentWrap>
|
||||
|
||||
|
||||
@@ -6,12 +6,14 @@
|
||||
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
|
||||
<el-form-item label="是否已读" prop="readStatus">
|
||||
<el-select v-model="queryParams.readStatus" placeholder="请选择状态" clearable class="!w-240px">
|
||||
<el-option v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)" :key="dict.value"
|
||||
<el-option
|
||||
v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)" :key="dict.value"
|
||||
:label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="发送时间" prop="createTime">
|
||||
<el-date-picker v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
|
||||
start-placeholder="开始日期" end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-240px" />
|
||||
</el-form-item>
|
||||
@@ -59,7 +61,8 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||
<Pagination
|
||||
:total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList" />
|
||||
</ContentWrap>
|
||||
|
||||
|
||||
@@ -5,17 +5,20 @@
|
||||
<ContentWrap>
|
||||
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
|
||||
<el-form-item label="套餐名" prop="name">
|
||||
<el-input v-model="queryParams.name" placeholder="请输入套餐名" clearable @keyup.enter="handleQuery"
|
||||
<el-input
|
||||
v-model="queryParams.name" placeholder="请输入套餐名" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable class="!w-240px">
|
||||
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)" :key="dict.value" :label="dict.label"
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)" :key="dict.value" :label="dict.label"
|
||||
:value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker v-model="queryParams.createTime" type="daterange" value-format="YYYY-MM-DD HH:mm:ss"
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime" type="daterange" value-format="YYYY-MM-DD HH:mm:ss"
|
||||
start-placeholder="开始日期" end-placeholder="结束日期" class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
@@ -47,11 +50,13 @@
|
||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180" :formatter="dateFormatter" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" @click="openForm('update', scope.row.id)"
|
||||
<el-button
|
||||
link type="primary" @click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['system:tenant-package:update']">
|
||||
修改
|
||||
</el-button>
|
||||
<el-button link type="danger" @click="handleDelete(scope.row.id)"
|
||||
<el-button
|
||||
link type="danger" @click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['system:tenant-package:delete']">
|
||||
删除
|
||||
</el-button>
|
||||
@@ -59,7 +64,8 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||
<Pagination
|
||||
:total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList" />
|
||||
</ContentWrap>
|
||||
|
||||
|
||||
Reference in new issue
Block a user