Compare commits
8 Commits
88bcf054fa
...
d3e589017f
Author | SHA1 | Date | |
---|---|---|---|
d3e589017f | |||
dc3c0c4a29 | |||
319c2a09ca | |||
1bba180bbc | |||
490d0a9f4e | |||
9c4b3b0311 | |||
bb97bfc337 | |||
216ad338ed |
@ -2,7 +2,7 @@
|
||||
VITE_APP_TITLE=众悦e家管理系统
|
||||
|
||||
# 项目本地运行端口号
|
||||
VITE_PORT=80
|
||||
VITE_PORT=81
|
||||
|
||||
# open 运行 npm run dev 时自动打开浏览器
|
||||
VITE_OPEN=true
|
||||
|
@ -5,7 +5,8 @@ VITE_DEV=true
|
||||
|
||||
# 请求路径
|
||||
#VITE_BASE_URL='https://zysc.fjptzykj.com'
|
||||
VITE_BASE_URL='http://192.168.1.12:6127'
|
||||
#VITE_BASE_URL='http://192.168.1.12:6127'
|
||||
VITE_BASE_URL='http://127.0.0.1:6127'
|
||||
|
||||
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
|
||||
VITE_UPLOAD_TYPE=server
|
||||
|
@ -0,0 +1,51 @@
|
||||
import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
|
||||
|
||||
/** 轮播图属性 */
|
||||
export interface CarouselProperty {
|
||||
// 类型:默认 | 卡片
|
||||
type: 'default' | 'card'
|
||||
// 指示器样式:点 | 数字
|
||||
indicator: 'dot' | 'number'
|
||||
// 是否自动播放
|
||||
autoplay: boolean
|
||||
// 播放间隔
|
||||
interval: number
|
||||
// 轮播内容
|
||||
items: CarouselItemProperty[]
|
||||
// 组件样式
|
||||
style: ComponentStyle
|
||||
}
|
||||
// 轮播内容属性
|
||||
export interface CarouselItemProperty {
|
||||
// 类型:图片 | 视频
|
||||
type: 'img' | 'video'
|
||||
// 图片链接
|
||||
imgUrl: string
|
||||
// 视频链接
|
||||
videoUrl: string
|
||||
// 跳转链接
|
||||
url: string
|
||||
}
|
||||
import logo from '@/assets/imgs/DiyEditorImges/组件图标-09.png'
|
||||
// 定义组件
|
||||
export const component = {
|
||||
id: 'CarouselLong',
|
||||
name: '长轮播图',
|
||||
// icon: 'system-uicons:carousel',
|
||||
icon: logo,
|
||||
property: {
|
||||
type: 'default',
|
||||
indicator: 'dot',
|
||||
autoplay: false,
|
||||
interval: 3,
|
||||
items: [
|
||||
{ type: 'img', imgUrl: 'https://static.iocoder.cn/mall/banner-01.jpg', videoUrl: '' },
|
||||
{ type: 'img', imgUrl: 'https://static.iocoder.cn/mall/banner-02.jpg', videoUrl: '' }
|
||||
] as CarouselItemProperty[],
|
||||
style: {
|
||||
bgType: 'color',
|
||||
bgColor: '#fff',
|
||||
marginBottom: 8
|
||||
} as ComponentStyle
|
||||
}
|
||||
} as DiyComponent<CarouselProperty>
|
@ -0,0 +1,33 @@
|
||||
<template>
|
||||
<!-- 无图片 -->
|
||||
<div class="h-250px flex items-center justify-center bg-gray-3" v-if="property.items.length === 0">
|
||||
<Icon icon="tdesign:image" class="text-gray-8 text-120px!" />
|
||||
</div>
|
||||
<div v-else class="relative">
|
||||
<el-carousel height="calc(100vh - 50px)" :type="property.type === 'card' ? 'card' : ''"
|
||||
:autoplay="property.autoplay" :interval="property.interval * 1000"
|
||||
:indicator-position="property.indicator === 'number' ? 'none' : undefined" @change="handleIndexChange">
|
||||
<el-carousel-item v-for="(item, index) in property.items" :key="index">
|
||||
<el-image class="h-full w-full" :src="item.imgUrl" />
|
||||
</el-carousel-item>
|
||||
</el-carousel>
|
||||
<div v-if="property.indicator === 'number'"
|
||||
class="absolute bottom-10px right-10px rounded-xl bg-black p-x-8px p-y-2px text-10px text-white opacity-40">{{
|
||||
currentIndex }} / {{ property.items.length }}</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { CarouselProperty } from './config'
|
||||
|
||||
/** 轮播图 */
|
||||
defineOptions({ name: 'Carousel' })
|
||||
|
||||
defineProps<{ property: CarouselProperty }>()
|
||||
|
||||
const currentIndex = ref(0)
|
||||
const handleIndexChange = (index: number) => {
|
||||
currentIndex.value = index + 1
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
@ -0,0 +1,106 @@
|
||||
<template>
|
||||
<ComponentContainerProperty v-model="formData.style">
|
||||
<el-form label-width="80px" :model="formData">
|
||||
<el-card header="样式设置" class="property-group" shadow="never">
|
||||
<el-form-item label="样式" prop="type">
|
||||
<el-radio-group v-model="formData.type">
|
||||
<el-tooltip class="item" content="默认" placement="bottom">
|
||||
<el-radio-button label="default">
|
||||
<Icon icon="system-uicons:carousel" />
|
||||
</el-radio-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip class="item" content="卡片" placement="bottom">
|
||||
<el-radio-button label="card">
|
||||
<Icon icon="ic:round-view-carousel" />
|
||||
</el-radio-button>
|
||||
</el-tooltip>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="指示器" prop="indicator">
|
||||
<el-radio-group v-model="formData.indicator">
|
||||
<el-radio label="dot">小圆点</el-radio>
|
||||
<el-radio label="number">数字</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否轮播" prop="autoplay">
|
||||
<el-switch v-model="formData.autoplay" />
|
||||
</el-form-item>
|
||||
<el-form-item label="播放间隔" prop="interval" v-if="formData.autoplay">
|
||||
<el-slider
|
||||
v-model="formData.interval"
|
||||
:max="10"
|
||||
:min="0.5"
|
||||
:step="0.5"
|
||||
show-input
|
||||
input-size="small"
|
||||
:show-input-controls="false"
|
||||
/>
|
||||
<el-text type="info">单位:秒</el-text>
|
||||
</el-form-item>
|
||||
</el-card>
|
||||
<el-card header="内容设置" class="property-group" shadow="never">
|
||||
<Draggable v-model="formData.items" :empty-item="{ type: 'img' }">
|
||||
<template #default="{ element }">
|
||||
<el-form-item label="类型" prop="type" class="m-b-8px!" label-width="40px">
|
||||
<el-radio-group v-model="element.type">
|
||||
<el-radio label="img">图片</el-radio>
|
||||
<el-radio label="video">视频</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="图片"
|
||||
class="m-b-8px!"
|
||||
label-width="40px"
|
||||
v-if="element.type === 'img'"
|
||||
>
|
||||
<UploadImg
|
||||
v-model="element.imgUrl"
|
||||
draggable="false"
|
||||
height="80px"
|
||||
width="100%"
|
||||
class="min-w-80px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<template v-else>
|
||||
<el-form-item label="封面" class="m-b-8px!" label-width="40px">
|
||||
<UploadImg
|
||||
v-model="element.imgUrl"
|
||||
draggable="false"
|
||||
height="80px"
|
||||
width="100%"
|
||||
class="min-w-80px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="视频" class="m-b-8px!" label-width="40px">
|
||||
<UploadFile
|
||||
v-model="element.videoUrl"
|
||||
:file-type="['mp4']"
|
||||
:limit="1"
|
||||
:file-size="100"
|
||||
class="min-w-80px"
|
||||
/>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<el-form-item label="链接" class="m-b-8px!" label-width="40px">
|
||||
<AppLinkInput v-model="element.url" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</Draggable>
|
||||
</el-card>
|
||||
</el-form>
|
||||
</ComponentContainerProperty>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { CarouselProperty } from './config'
|
||||
import { usePropertyForm } from '@/components/DiyEditor/util'
|
||||
|
||||
// 轮播图属性面板
|
||||
defineOptions({ name: 'CarouselProperty' })
|
||||
|
||||
const props = defineProps<{ modelValue: CarouselProperty }>()
|
||||
const emit = defineEmits(['update:modelValue'])
|
||||
const { formData } = usePropertyForm(props.modelValue, emit)
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
@ -3,7 +3,7 @@ import {ComponentStyle, DiyComponent} from '@/components/DiyEditor/util'
|
||||
/** 积分商城属性 */
|
||||
export interface PromotionPointProperty {
|
||||
// 布局类型:单列 | 三列
|
||||
layoutType: 'oneColBigImg' | 'oneColSmallImg' | 'twoCol'
|
||||
layoutType: 'oneColBigImg' | 'oneColSmallImg' | 'twoCol' | 'oneColSwiper'
|
||||
// 商品字段
|
||||
fields: {
|
||||
// 商品名称
|
||||
|
@ -1,90 +1,66 @@
|
||||
<template>
|
||||
<div ref="containerRef" :class="`box-content min-h-30px w-full flex flex-row flex-wrap`">
|
||||
<div
|
||||
v-for="(spu, index) in spuList"
|
||||
:key="index"
|
||||
:style="{
|
||||
...calculateSpace(index),
|
||||
...calculateWidth(),
|
||||
borderTopLeftRadius: `${property.borderRadiusTop}px`,
|
||||
borderTopRightRadius: `${property.borderRadiusTop}px`,
|
||||
borderBottomLeftRadius: `${property.borderRadiusBottom}px`,
|
||||
borderBottomRightRadius: `${property.borderRadiusBottom}px`
|
||||
}"
|
||||
class="relative box-content flex flex-row flex-wrap overflow-hidden bg-white"
|
||||
>
|
||||
<div ref="containerRef" class="box-content min-h-30px w-full flex flex-row flex-wrap"
|
||||
:class="{ 'one-Col-swiper': property.layoutType === 'oneColSwiper' }">
|
||||
<div v-for="(spu, index) in spuList" :key="index" :style="{
|
||||
...calculateSpace(index),
|
||||
...calculateWidth(),
|
||||
borderTopLeftRadius: `${property.borderRadiusTop}px`,
|
||||
borderTopRightRadius: `${property.borderRadiusTop}px`,
|
||||
borderBottomLeftRadius: `${property.borderRadiusBottom}px`,
|
||||
borderBottomRightRadius: `${property.borderRadiusBottom}px`
|
||||
}" class="relative box-content flex flex-row flex-wrap overflow-hidden bg-white"
|
||||
:class="{ 'one-Col-swiper-item': property.layoutType === 'oneColSwiper' }">
|
||||
<!-- 角标 -->
|
||||
<div v-if="property.badge.show" class="absolute left-0 top-0 z-1 items-center justify-center">
|
||||
<el-image :src="property.badge.imgUrl" class="h-26px w-38px" fit="cover" />
|
||||
</div>
|
||||
<!-- 商品封面图 -->
|
||||
<div
|
||||
:class="[
|
||||
'h-140px',
|
||||
{
|
||||
'w-full': property.layoutType !== 'oneColSmallImg',
|
||||
'w-140px': property.layoutType === 'oneColSmallImg'
|
||||
}
|
||||
]"
|
||||
>
|
||||
<div :class="[
|
||||
'h-140px',
|
||||
{
|
||||
'w-full': property.layoutType !== 'oneColSmallImg',
|
||||
'w-140px': property.layoutType === 'oneColSmallImg'
|
||||
}
|
||||
]">
|
||||
<el-image :src="spu.picUrl" class="h-full w-full" fit="cover" />
|
||||
</div>
|
||||
<div
|
||||
:class="[
|
||||
' flex flex-col gap-8px p-8px box-border',
|
||||
{
|
||||
'w-full': property.layoutType !== 'oneColSmallImg',
|
||||
'w-[calc(100%-140px-16px)]': property.layoutType === 'oneColSmallImg'
|
||||
}
|
||||
]"
|
||||
>
|
||||
<div v-if="property.layoutType !== 'oneColSwiper'" :class="[
|
||||
' flex flex-col gap-8px p-8px box-border',
|
||||
{
|
||||
'w-full': property.layoutType !== 'oneColSmallImg',
|
||||
'w-[calc(100%-140px-16px)]': property.layoutType === 'oneColSmallImg'
|
||||
}
|
||||
]">
|
||||
<!-- 商品名称 -->
|
||||
<div
|
||||
v-if="property.fields.name.show"
|
||||
:class="[
|
||||
'text-14px ',
|
||||
{
|
||||
truncate: property.layoutType !== 'oneColSmallImg',
|
||||
'overflow-ellipsis line-clamp-2': property.layoutType === 'oneColSmallImg'
|
||||
}
|
||||
]"
|
||||
:style="{ color: property.fields.name.color }"
|
||||
>
|
||||
<div v-if="property.fields.name.show" :class="[
|
||||
'text-14px ',
|
||||
{
|
||||
truncate: property.layoutType !== 'oneColSmallImg',
|
||||
'overflow-ellipsis line-clamp-2': property.layoutType === 'oneColSmallImg'
|
||||
}
|
||||
]" :style="{ color: property.fields.name.color }">
|
||||
{{ spu.name }}
|
||||
</div>
|
||||
<!-- 商品简介 -->
|
||||
<div
|
||||
v-if="property.fields.introduction.show"
|
||||
:style="{ color: property.fields.introduction.color }"
|
||||
class="truncate text-12px"
|
||||
>
|
||||
<div v-if="property.fields.introduction.show" :style="{ color: property.fields.introduction.color }"
|
||||
class="truncate text-12px">
|
||||
{{ spu.introduction }}
|
||||
</div>
|
||||
<div>
|
||||
<!-- 积分 -->
|
||||
<span
|
||||
v-if="property.fields.price.show"
|
||||
:style="{ color: property.fields.price.color }"
|
||||
class="text-16px"
|
||||
>
|
||||
<span v-if="property.fields.price.show" :style="{ color: property.fields.price.color }" class="text-16px">
|
||||
{{ spu.point }}积分
|
||||
{{ !spu.pointPrice || spu.pointPrice === 0 ? '' : `+${fenToYuan(spu.pointPrice)}元` }}
|
||||
</span>
|
||||
<!-- 市场价 -->
|
||||
<span
|
||||
v-if="property.fields.marketPrice.show && spu.marketPrice"
|
||||
:style="{ color: property.fields.marketPrice.color }"
|
||||
class="ml-4px text-10px line-through"
|
||||
>
|
||||
<span v-if="property.fields.marketPrice.show && spu.marketPrice"
|
||||
:style="{ color: property.fields.marketPrice.color }" class="ml-4px text-10px line-through">
|
||||
¥{{ fenToYuan(spu.marketPrice) }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="text-12px">
|
||||
<!-- 销量 -->
|
||||
<span
|
||||
v-if="property.fields.salesCount.show"
|
||||
:style="{ color: property.fields.salesCount.color }"
|
||||
>
|
||||
<span v-if="property.fields.salesCount.show" :style="{ color: property.fields.salesCount.color }">
|
||||
已兑{{ (spu.pointTotalStock || 0) - (spu.pointStock || 0) }}件
|
||||
</span>
|
||||
<!-- 库存 -->
|
||||
@ -94,24 +70,15 @@
|
||||
</div>
|
||||
</div>
|
||||
<!-- 购买按钮 -->
|
||||
<div class="absolute bottom-8px right-8px">
|
||||
<div class="absolute bottom-8px right-8px" v-if="property.layoutType !== 'oneColSwiper'">
|
||||
<!-- 文字按钮 -->
|
||||
<span
|
||||
v-if="property.btnBuy.type === 'text'"
|
||||
:style="{
|
||||
background: `linear-gradient(to right, ${property.btnBuy.bgBeginColor}, ${property.btnBuy.bgEndColor}`
|
||||
}"
|
||||
class="rounded-full p-x-12px p-y-4px text-12px text-white"
|
||||
>
|
||||
<span v-if="property.btnBuy.type === 'text'" :style="{
|
||||
background: `linear-gradient(to right, ${property.btnBuy.bgBeginColor}, ${property.btnBuy.bgEndColor}`
|
||||
}" class="rounded-full p-x-12px p-y-4px text-12px text-white">
|
||||
{{ property.btnBuy.text }}
|
||||
</span>
|
||||
<!-- 图片按钮 -->
|
||||
<el-image
|
||||
v-else
|
||||
:src="property.btnBuy.imgUrl"
|
||||
class="h-28px w-28px rounded-full"
|
||||
fit="cover"
|
||||
/>
|
||||
<el-image v-else :src="property.btnBuy.imgUrl" class="h-28px w-28px rounded-full" fit="cover" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -199,4 +166,17 @@ const calculateWidth = () => {
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
<style lang="scss" scoped>
|
||||
.one-Col-swiper {
|
||||
flex-wrap: nowrap;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.one-Col-swiper-item {
|
||||
width: 130px !important;
|
||||
min-width: 130px;
|
||||
height: 130px;
|
||||
margin-left: 8px !important;
|
||||
margin-top: 0 !important;
|
||||
}
|
||||
</style>
|
||||
|
@ -22,6 +22,11 @@
|
||||
<Icon icon="fluent:text-column-two-24-filled" />
|
||||
</el-radio-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip class="item" content="单行滑动" placement="bottom">
|
||||
<el-radio-button value="oneColSwiper">
|
||||
<Icon icon="system-uicons:carousel" />
|
||||
</el-radio-button>
|
||||
</el-tooltip>
|
||||
<!--<el-tooltip class="item" content="三列" placement="bottom">
|
||||
<el-radio-button value="threeCol">
|
||||
<Icon icon="fluent:text-column-three-24-filled" />
|
||||
@ -104,34 +109,16 @@
|
||||
</el-card>
|
||||
<el-card class="property-group" header="商品样式" shadow="never">
|
||||
<el-form-item label="上圆角" prop="borderRadiusTop">
|
||||
<el-slider
|
||||
v-model="formData.borderRadiusTop"
|
||||
:max="100"
|
||||
:min="0"
|
||||
:show-input-controls="false"
|
||||
input-size="small"
|
||||
show-input
|
||||
/>
|
||||
<el-slider v-model="formData.borderRadiusTop" :max="100" :min="0" :show-input-controls="false"
|
||||
input-size="small" show-input />
|
||||
</el-form-item>
|
||||
<el-form-item label="下圆角" prop="borderRadiusBottom">
|
||||
<el-slider
|
||||
v-model="formData.borderRadiusBottom"
|
||||
:max="100"
|
||||
:min="0"
|
||||
:show-input-controls="false"
|
||||
input-size="small"
|
||||
show-input
|
||||
/>
|
||||
<el-slider v-model="formData.borderRadiusBottom" :max="100" :min="0" :show-input-controls="false"
|
||||
input-size="small" show-input />
|
||||
</el-form-item>
|
||||
<el-form-item label="间隔" prop="space">
|
||||
<el-slider
|
||||
v-model="formData.space"
|
||||
:max="100"
|
||||
:min="0"
|
||||
:show-input-controls="false"
|
||||
input-size="small"
|
||||
show-input
|
||||
/>
|
||||
<el-slider v-model="formData.space" :max="100" :min="0" :show-input-controls="false" input-size="small"
|
||||
show-input />
|
||||
</el-form-item>
|
||||
</el-card>
|
||||
</el-form>
|
||||
|
@ -0,0 +1,57 @@
|
||||
import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
|
||||
|
||||
/** 富文本属性 */
|
||||
export interface RichtextProperty {
|
||||
richText: string
|
||||
borderRadius: number
|
||||
// 上圆角
|
||||
borderRadiusTop: number
|
||||
// 下圆角
|
||||
borderRadiusBottom: number
|
||||
// 间隔
|
||||
space: number
|
||||
// 组件样式
|
||||
style: ComponentStyle
|
||||
// 宽
|
||||
width: number
|
||||
// 高
|
||||
height: number
|
||||
// 上
|
||||
top: number
|
||||
// 左
|
||||
left: number
|
||||
|
||||
|
||||
}
|
||||
|
||||
import logo from '@/assets/imgs/DiyEditorImges/组件图标-20.png'
|
||||
|
||||
export const plugins = [
|
||||
'advlist anchor autolink autosave code codesample directionality emoticons fullscreen hr image imagetools insertdatetime link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace spellchecker tabfocus table template textpattern visualblocks visualchars wordcount',
|
||||
];
|
||||
export const toolbar = [
|
||||
'code searchreplace bold italic underline strikethrough alignleft aligncenter alignright outdent indent blockquote removeformat subscript superscript codesample hr bullist numlist link image charmap preview anchor pagebreak insertdatetime media table emoticons forecolor backcolor fullscreen',
|
||||
];
|
||||
|
||||
// 定义组件
|
||||
export const component = {
|
||||
id: 'Richtext',
|
||||
name: '富文本',
|
||||
icon: logo,
|
||||
property: {
|
||||
borderRadius: 0,
|
||||
borderRadiusTop: 0,
|
||||
borderRadiusBottom: 0,
|
||||
space: 0,
|
||||
richText: '哈哈',
|
||||
width: 100,
|
||||
height: 100,
|
||||
top: 0,
|
||||
left: 0,
|
||||
style: {
|
||||
bgType: 'color',
|
||||
bgColor: '#fff',
|
||||
marginBottom: 8
|
||||
} as ComponentStyle
|
||||
}
|
||||
} as DiyComponent<RichtextProperty>
|
@ -0,0 +1,202 @@
|
||||
<template>
|
||||
<div class="mobile-page">
|
||||
<div class="box" :style="boxStyle" v-html="props.property.richText"></div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { RichtextProperty } from './config'
|
||||
|
||||
defineOptions({ name: 'Richtext' })
|
||||
const props = defineProps<{ property: RichtextProperty }>()
|
||||
const boxStyle = computed(() => {
|
||||
return [
|
||||
{ 'border-radius': props.property.borderRadius ? props.property.borderRadius + 'px' : '0' },
|
||||
{
|
||||
background: `linear-gradient(${props.property.style.bgColor}, ${props.property.style.bgColor})`,
|
||||
},
|
||||
{ margin: props.property.style.marginTop + 'px' + ' ' + props.property.style.marginRight + 'px' + ' ' + props.property.style.marginBottom + 'px' + ' ' + props.property.style.marginLeft + 'px' + ' ' },
|
||||
];
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.mobile-page {
|
||||
width: 100% !important;
|
||||
min-height: 100px;
|
||||
}
|
||||
|
||||
.box {
|
||||
width: 100%;
|
||||
min-height: 100px;
|
||||
padding: 10px;
|
||||
background: #f5f5f5;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
|
||||
<!-- <template>
|
||||
<div class="mobile-page" v-if="configObj">
|
||||
<div class="box" :style="boxStyle" v-html="richText"></div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// +----------------------------------------------------------------------
|
||||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: CRMEB Team <admin@crmeb.com>
|
||||
// +----------------------------------------------------------------------
|
||||
import { mapState, mapMutations } from 'vuex';
|
||||
export default {
|
||||
name: 'z_ueditor',
|
||||
cname: '富文本',
|
||||
configName: 'c_ueditor_box',
|
||||
icon: 't-icon-zujian-fuwenben',
|
||||
type: 2, // 0 基础组件 1 营销组件 2工具组件
|
||||
defaultName: 'richTextEditor', // 外面匹配名称
|
||||
props: {
|
||||
index: {
|
||||
type: null,
|
||||
default: -1,
|
||||
},
|
||||
num: {
|
||||
type: null,
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
...mapState('mobildConfig', ['defaultArray']),
|
||||
//外部盒子
|
||||
boxStyle() {
|
||||
return [
|
||||
{ 'border-radius': this.configObj.bgStyle.val ? this.configObj.bgStyle.val + 'px' : '0' },
|
||||
{
|
||||
background: `linear-gradient(${this.configObj.bgColor.color[0].item}, ${this.configObj.bgColor.color[1].item})`,
|
||||
},
|
||||
{ margin: this.configObj.mbConfig.val + 'px' + ' ' + this.configObj.lrConfig.val + 'px' + ' ' + 0 },
|
||||
];
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
pageData: {
|
||||
handler(nVal, oVal) {
|
||||
this.setConfig(nVal);
|
||||
},
|
||||
deep: true,
|
||||
},
|
||||
num: {
|
||||
handler(nVal, oVal) {
|
||||
let data = this.$store.state.mobildConfig.defaultArray[nVal];
|
||||
this.setConfig(data);
|
||||
},
|
||||
deep: true,
|
||||
},
|
||||
defaultArray: {
|
||||
handler(nVal, oVal) {
|
||||
let data = this.$store.state.mobildConfig.defaultArray[this.num];
|
||||
this.setConfig(data);
|
||||
},
|
||||
deep: true,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
// 默认初始化数据禁止修改
|
||||
defaultConfig: {
|
||||
name: 'richTextEditor',
|
||||
timestamp: this.num,
|
||||
setUp: {
|
||||
tabVal: 0,
|
||||
cname: '富文本',
|
||||
},
|
||||
// 背景颜色
|
||||
bgColor: {
|
||||
title: '背景颜色',
|
||||
tabTitle: '颜色设置',
|
||||
color: [
|
||||
{
|
||||
item: '#FFFFFF',
|
||||
},
|
||||
{
|
||||
item: '#FFFFFF',
|
||||
},
|
||||
],
|
||||
default: [
|
||||
{
|
||||
item: '#FFFFFF',
|
||||
},
|
||||
{
|
||||
item: '#FFFFFF',
|
||||
},
|
||||
],
|
||||
},
|
||||
lrConfig: {
|
||||
title: '左右边距',
|
||||
tabTitle: '边距设置',
|
||||
val: 12,
|
||||
min: 0,
|
||||
},
|
||||
mbConfig: {
|
||||
title: '页面间距',
|
||||
val: 10,
|
||||
min: 0,
|
||||
},
|
||||
bgStyle: {
|
||||
tabTitle: '圆角设置',
|
||||
title: '背景圆角',
|
||||
name: 'bgStyle',
|
||||
val: 0,
|
||||
min: 0,
|
||||
max: 30,
|
||||
},
|
||||
richText: {
|
||||
tabTitle: '富文本内容',
|
||||
val: '',
|
||||
},
|
||||
},
|
||||
pageData: {},
|
||||
richText: '',
|
||||
configObj: null,
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
if (this.num) {
|
||||
this.pageData = this.$store.state.mobildConfig.defaultArray[this.num];
|
||||
this.setConfig(this.pageData);
|
||||
}
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
setConfig(data) {
|
||||
if (!data) return;
|
||||
if (data) {
|
||||
this.configObj = data;
|
||||
this.richText = data.richText.val;
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.mobile-page ::v-deep video {
|
||||
width: 100% !important;
|
||||
}
|
||||
.box {
|
||||
min-height: 100px;
|
||||
padding: 10px;
|
||||
background: #f5f5f5;
|
||||
::v-deep img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
-->
|
@ -0,0 +1,55 @@
|
||||
<template>
|
||||
<ComponentContainerProperty v-model="formData.style">
|
||||
<!-- 表单 -->
|
||||
<el-form label-width="80px" :model="formData" class="m-t-8px">
|
||||
<!-- <el-text tag="p"> 富文本设置 </el-text> -->
|
||||
<el-form-item label-width="0" prop="richText">
|
||||
<Editor api-key="ooit62s6gekozi4cmblbsvdwhl34mxcgrkzu4wr8yqmsqxmw" v-model="formData.richText"
|
||||
:init="tinymceConfig" initial-value="Welcome to TinyMCE!" />
|
||||
</el-form-item>
|
||||
<!-- <el-text type="info" size="small"> 每格尺寸187 * 187 </el-text> -->
|
||||
<!-- <textarea :id="tinymceId" class="textarea" /> -->
|
||||
</el-form>
|
||||
</ComponentContainerProperty>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { useVModel } from '@vueuse/core'
|
||||
import { RichtextProperty } from './config';
|
||||
// import { MagicCubeProperty } from '@/components/DiyEditor/components/mobile/MagicCube/config'
|
||||
// import { plugins, toolbar } from './config';
|
||||
// import loadTinymce from '@/utils/loadTinymce';
|
||||
// import { debounceNew } from '@/utils';
|
||||
|
||||
/** 富文本属性面板 */
|
||||
defineOptions({ name: 'RichtextProperty' });
|
||||
|
||||
const props = defineProps<{ modelValue: RichtextProperty }>();
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
const formData = useVModel(props, 'modelValue', emit);
|
||||
|
||||
|
||||
|
||||
const tinymceConfig = {
|
||||
toolbar_mode: 'sliding',
|
||||
plugins: [
|
||||
// Core editing features
|
||||
'anchor', 'autolink', 'charmap', 'codesample', 'emoticons', 'image', 'link', 'lists', 'media', 'searchreplace', 'table', 'visualblocks', 'wordcount',
|
||||
// Your account includes a free trial of TinyMCE premium features
|
||||
// Try the most popular premium features until Apr 24, 2025:
|
||||
'checklist', 'mediaembed', 'casechange', 'formatpainter', 'pageembed', 'a11ychecker', 'tinymcespellchecker', 'permanentpen', 'powerpaste', 'advtable', 'advcode', 'editimage', 'advtemplate', 'ai', 'mentions', 'tinycomments', 'tableofcontents', 'footnotes', 'mergetags', 'autocorrect', 'typography', 'inlinecss', 'markdown', 'importword', 'exportword', 'exportpdf'
|
||||
],
|
||||
toolbar: 'undo redo | blocks fontfamily fontsize | bold italic underline strikethrough | link image media table mergetags | addcomment showcomments | spellcheckdialog a11ycheck typography | align lineheight | checklist numlist bullist indent outdent | emoticons charmap | removeformat',
|
||||
tinycomments_mode: 'embedded',
|
||||
tinycomments_author: 'Author name',
|
||||
mergetags_list: [
|
||||
{ value: 'First.Name', title: 'First Name' },
|
||||
{ value: 'Email', title: 'Email' },
|
||||
],
|
||||
ai_request: (request, respondWith) => respondWith.string(() => Promise.reject('See docs to implement AI Assistant')),
|
||||
};
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
@ -76,7 +76,7 @@ export interface PageConfig {
|
||||
components: PageComponent[]
|
||||
}
|
||||
// 页面组件,只保留组件ID,组件属性
|
||||
export interface PageComponent extends Pick<DiyComponent<any>, 'id' | 'property'> {}
|
||||
export interface PageComponent extends Pick<DiyComponent<any>, 'id' | 'property'> { }
|
||||
|
||||
// 属性表单监听
|
||||
export function usePropertyForm<T>(modelValue: T, emit: Function): { formData: Ref<T> } {
|
||||
@ -119,7 +119,7 @@ export const PAGE_LIBS = [
|
||||
'MenuList',
|
||||
'Popover',
|
||||
'FloatingActionButton',
|
||||
"MenuGridTow"
|
||||
"MenuGridTow"
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -128,11 +128,13 @@ export const PAGE_LIBS = [
|
||||
components: [
|
||||
'ImageBar',
|
||||
'Carousel',
|
||||
'CarouselLong',
|
||||
'TitleBar',
|
||||
'VideoPlayer',
|
||||
'Divider',
|
||||
'MagicCube',
|
||||
'HotZone'
|
||||
'HotZone',
|
||||
'Richtext'
|
||||
]
|
||||
},
|
||||
{ name: '商品组件', extended: true, components: ['ProductCard', 'ProductList'] },
|
||||
|
@ -1,76 +0,0 @@
|
||||
<template>
|
||||
<Dialog title="审核" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="通过凭证" prop="voucher">
|
||||
<!-- <el-input v-model="formData.auditReason" type="textarea" placeholder="请输入驳回原因" />-->
|
||||
<UploadImg v-model="formData.voucher" :max-count="1" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import * as BrokerageWithdrawApi from '@/api/mall/trade/brokerage/withdraw'
|
||||
import {Upload} from "@element-plus/icons-vue";
|
||||
import {approveBrokerageWithdrawClosing} from "@/api/mall/trade/brokerage/withdraw";
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
voucher: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
voucher: [{ required: true, message: '凭证不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (id: number) => {
|
||||
dialogVisible.value = true
|
||||
resetForm()
|
||||
formData.value.id = id
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
if (!formRef) return
|
||||
const valid = await formRef.value.validate()
|
||||
if (!valid) return
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as BrokerageWithdrawApi.BrokerageWithdrawVO
|
||||
await BrokerageWithdrawApi.approveBrokerageWithdrawClosing(data)
|
||||
message.success('通过成功')
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
voucher: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
@ -1,180 +0,0 @@
|
||||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="代理商余额:" prop="agentPrice">
|
||||
<span>¥ {{fenToYuan(formData.agentPrice) || '-'}} </span>
|
||||
<!-- <el-input v-model="formData.agentPrice" placeholder="请输入代理商id" :disabled="true"/>-->
|
||||
</el-form-item>
|
||||
<el-form-item label="可提现金额:" prop="brokeragePrice">
|
||||
<span>¥ {{fenToYuan(formData.brokeragePrice) || '-'}} </span>
|
||||
<!-- <el-input v-model="formData.brokeragePrice" placeholder="请输入可提现金额" :disabled= "true"/>-->
|
||||
</el-form-item>
|
||||
<el-form-item label="冻结金额:" prop="frozenPrice">
|
||||
<span>¥ {{fenToYuan(formData.frozenPrice) || '-'}} </span>
|
||||
<!-- <el-input v-model="formData.frozenPrice" placeholder="请输入冻结金额" :disabled= "true"/>-->
|
||||
</el-form-item>
|
||||
<el-form-item label="结算类型:" prop="closingType">
|
||||
<el-radio-group v-model="formData.closingType">
|
||||
<el-radio :value="1">钱包</el-radio>
|
||||
<el-radio :value="2">银行</el-radio>
|
||||
<el-radio :value="3">微信</el-radio>
|
||||
<el-radio :value="4">支付宝</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="真实姓名:" prop="realName">
|
||||
<span>{{(formData.realName) || '-'}} </span>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="formData.closingType === 3" label="微信账号:" prop="wechatAccount">
|
||||
<span>{{(formData.wechatAccount) || '-'}} </span>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="formData.closingType === 3" label="微信收款码:" prop="wechatAccountQrCodeUrl">
|
||||
<UploadImg v-model="formData.wechatAccountQrCodeUrl" :disabled="true"/>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="formData.closingType === 4" label="支付宝账号:" prop="alipayAccount">
|
||||
<span>{{(formData.alipayAccount || '-')}} </span>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="formData.closingType === 4" label="支付宝收款码:" prop="alipayAccountQrCodeUrl">
|
||||
<UploadImg v-model="formData.alipayAccountQrCodeUrl" :disabled="true"/>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="formData.closingType === 2" label="开户银行:" prop="bankName">
|
||||
<span>{{(formData.bankName) || '-'}} </span>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="formData.closingType === 2" label="银行账号:" prop="bankCardNo">
|
||||
<span>{{(formData.bankCardNo) || '-'}} </span>
|
||||
</el-form-item>
|
||||
<el-form-item label="申请金额:" prop="supplyPrice">
|
||||
<el-input-number v-model="formData.supplyPrice" :min="1" :precision="2" :step="0.01"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注:" prop="remark">
|
||||
<el-input type="textarea" v-model="formData.remark" placeholder="请输入平台备注" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import * as BrokerageWithdrawApi from '@/api/mall/trade/brokerage/withdraw'
|
||||
import { fenToYuan, jsonParse } from '@/utils'
|
||||
|
||||
/** 结算记录 表单 */
|
||||
defineOptions({ name: 'ClosingRecordForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
agentPrice: undefined,
|
||||
brokeragePrice: undefined,
|
||||
frozenPrice: undefined,
|
||||
closingType: undefined,
|
||||
wechatAccountQrCodeUrl: undefined,
|
||||
aliyAccountQrCodeUrl: undefined,
|
||||
realName: undefined,
|
||||
accountNo: undefined,
|
||||
bankName: undefined,
|
||||
bankCardNo: undefined,
|
||||
supplyPrice: undefined,
|
||||
remark: undefined,
|
||||
wechatAccount: undefined,
|
||||
aliyAccount: undefined,
|
||||
agentId: undefined,
|
||||
agentName: undefined,
|
||||
})
|
||||
const formRules = reactive({
|
||||
closingType: [{ required: true, message: '结算类型不能为空', trigger: 'change' }],
|
||||
supplyPrice: [{ required: true, message: '申请金额不能为空', trigger: 'change' }],
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
formData.value = await BrokerageWithdrawApi.getBrokerageSupplyInfo()
|
||||
formData.value.closingType = 1
|
||||
formData.value.supplyPrice = 1
|
||||
console.log("form:",formData.value)
|
||||
/*// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
|
||||
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}*/
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as BrokerageWithdrawApi.withDrawSupplyVO
|
||||
if (formType.value === 'create') {
|
||||
const submitData = JSON.parse(JSON.stringify(data))
|
||||
submitData.supplyPrice = submitData.supplyPrice * 100
|
||||
console.log("formData:",data)
|
||||
|
||||
await BrokerageWithdrawApi.createWithDraw(submitData)
|
||||
message.success(t('common.createSuccess'))
|
||||
}
|
||||
/* else {
|
||||
await ClosingRecordApi.updateClosingRecord(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}*/
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
agentPrice: undefined,
|
||||
brokeragePrice: undefined,
|
||||
frozenPrice: undefined,
|
||||
closingType: undefined,
|
||||
wechatAccountQrCodeUrl: undefined,
|
||||
aliyAccountQrCodeUrl: undefined,
|
||||
realName: undefined,
|
||||
accountNo: undefined,
|
||||
bankName: undefined,
|
||||
bankCardNo: undefined,
|
||||
supplyPrice: undefined,
|
||||
remark: undefined,
|
||||
wechatAccount: undefined,
|
||||
aliyAccount: undefined,
|
||||
agentId: undefined,
|
||||
agentName: undefined,
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
@ -1,318 +0,0 @@
|
||||
<template>
|
||||
<doc-alert title="【交易】分销返佣" url="https://doc.iocoder.cn/mall/trade-brokerage/" />
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="用户编号" prop="userId">
|
||||
<el-input
|
||||
v-model="queryParams.userId"
|
||||
placeholder="请输入用户编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="提现类型" prop="type">
|
||||
<el-select
|
||||
v-model="queryParams.type"
|
||||
placeholder="请选择提现类型"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.BROKERAGE_WITHDRAW_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="账号" prop="accountNo">
|
||||
<el-input
|
||||
v-model="queryParams.accountNo"
|
||||
placeholder="请输入账号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="提现银行" prop="bankName">
|
||||
<el-select
|
||||
v-model="queryParams.bankName"
|
||||
placeholder="请选择提现银行"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.BROKERAGE_BANK_NAME)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</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.BROKERAGE_WITHDRAW_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"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
@click="openClosingForm('create')"
|
||||
v-hasPermi="['trade:brokerage-withdraw:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 申请结算
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['trade:brokerage-withdraw:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="编号" align="left" prop="id" min-width="60px" />
|
||||
<el-table-column label="用户信息" align="left" min-width="120px">
|
||||
<template #default="scope">
|
||||
<div>编号:{{ scope.row.userId }}</div>
|
||||
<div>昵称:{{ scope.row.userNickname }}</div>
|
||||
<div>代理商名称:{{ scope.row.agentName }}</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="提现金额" align="left" prop="price" min-width="80px">
|
||||
<template #default="scope">
|
||||
<div>金 额:¥{{ fenToYuan(scope.row.price) }}</div>
|
||||
<div>手续费:¥{{ fenToYuan(scope.row.feePrice) }}</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="提现方式" align="left" prop="type" min-width="120px">
|
||||
<template #default="scope">
|
||||
<div v-if="scope.row.type === BrokerageWithdrawTypeEnum.WALLET.type"> 余额 </div>
|
||||
<div v-else>
|
||||
{{ getDictLabel(DICT_TYPE.BROKERAGE_WITHDRAW_TYPE, scope.row.type) }}
|
||||
<span v-if="scope.row.accountNo">账号:{{ scope.row.accountNo }}</span>
|
||||
</div>
|
||||
<template v-if="scope.row.type === BrokerageWithdrawTypeEnum.BANK.type">
|
||||
<div>真实姓名:{{ scope.row.name }}</div>
|
||||
<div>
|
||||
银行名称:
|
||||
<dict-tag :type="DICT_TYPE.BROKERAGE_BANK_NAME" :value="scope.row.bankName" />
|
||||
</div>
|
||||
<div>开户地址:{{ scope.row.bankAddress }}</div>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="收款码" align="left" prop="accountQrCodeUrl" min-width="70px">
|
||||
<template #default="scope">
|
||||
<el-image
|
||||
v-if="scope.row.accountQrCodeUrl"
|
||||
:src="scope.row.accountQrCodeUrl"
|
||||
class="h-40px w-40px"
|
||||
:preview-src-list="[scope.row.accountQrCodeUrl]"
|
||||
preview-teleported
|
||||
/>
|
||||
<span v-else>无</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="申请时间"
|
||||
align="left"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="备注" align="left" prop="remark" />
|
||||
<el-table-column label="状态" align="left" prop="status" min-width="120px">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.BROKERAGE_WITHDRAW_STATUS" :value="scope.row.status" />
|
||||
<div v-if="scope.row.auditTime" class="text-xs">
|
||||
时间:{{ formatDate(scope.row.auditTime) }}
|
||||
</div>
|
||||
<div v-if="scope.row.auditReason" class="text-xs">
|
||||
原因:{{ scope.row.auditReason }}
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="left" width="110px" fixed="right">
|
||||
<template #default="scope">
|
||||
<template v-if="scope.row.status === BrokerageWithdrawStatusEnum.AUDITING.status">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openApproveForm(scope.row.id)"
|
||||
v-hasPermi="['trade:brokerage-withdraw:audit']"
|
||||
>
|
||||
通过
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="openForm(scope.row.id)"
|
||||
v-hasPermi="['trade:brokerage-withdraw:audit']"
|
||||
>
|
||||
驳回
|
||||
</el-button>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<BrokerageWithdrawRejectForm ref="formRef" @success="getList" />
|
||||
<ClosingRecordForm ref="closingFormRef" @success="getList" />
|
||||
<ClosingRecordAgreeForm ref="approveFormRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { DICT_TYPE, getDictLabel, getIntDictOptions, getStrDictOptions } from '@/utils/dict'
|
||||
import { dateFormatter, formatDate } from '@/utils/formatTime'
|
||||
import * as BrokerageWithdrawApi from '@/api/mall/trade/brokerage/withdraw'
|
||||
import BrokerageWithdrawRejectForm from '@/views/mall/trade/brokerage/withdraw/BrokerageWithdrawRejectForm.vue'
|
||||
import { BrokerageWithdrawStatusEnum, BrokerageWithdrawTypeEnum } from '@/utils/constants'
|
||||
import ClosingRecordForm from "@/views/agent/closingrecord/ClosingRecordForm.vue";
|
||||
import ClosingRecordAgreeForm from "@/views/agent/closingrecord/ClosingRecordAgreeForm.vue";
|
||||
import { fenToYuanFormat } from '@/utils/formatter'
|
||||
import { fenToYuan } from '@/utils'
|
||||
import download from "@/utils/download";
|
||||
|
||||
defineOptions({ name: 'BrokerageWithdraw' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
const message = useMessage() // 消息弹窗
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const total = ref(0) // 列表的总页数
|
||||
const list = ref([]) // 列表的数据
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
userId: null,
|
||||
type: null,
|
||||
name: null,
|
||||
accountNo: null,
|
||||
bankName: null,
|
||||
status: null,
|
||||
auditReason: null,
|
||||
auditTime: [],
|
||||
remark: null,
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await BrokerageWithdrawApi.getBrokerageWithdrawPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
console.log("list:",list)
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (id: number) => {
|
||||
formRef.value.open(id)
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const closingFormRef = ref()
|
||||
const openClosingForm = (type: string,id?: number) => {
|
||||
closingFormRef.value.open(type,id)
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const approveFormRef = ref()
|
||||
const openApproveForm = (id: number) => {
|
||||
approveFormRef.value.open(id)
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await BrokerageWithdrawApi.exportBrokerageWithDraw(queryParams)
|
||||
download.excel(data, '结算管理.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 审核通过 */
|
||||
const handleApprove = async (id: number) => {
|
||||
try {
|
||||
loading.value = true
|
||||
await message.confirm('确定要审核通过吗?')
|
||||
await BrokerageWithdrawApi.approveBrokerageWithdraw(id)
|
||||
await message.success(t('common.success'))
|
||||
await getList()
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
@ -1,118 +0,0 @@
|
||||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="订单id" prop="orderId">
|
||||
<el-input v-model="formData.orderId" placeholder="请输入订单id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="订单支付金额,单位:分" prop="price">
|
||||
<el-input v-model="formData.price" placeholder="请输入订单支付金额,单位:分" />
|
||||
</el-form-item>
|
||||
<el-form-item label="分红金额,单位: 分" prop="bonus">
|
||||
<el-input v-model="formData.bonus" placeholder="请输入分红金额,单位: 分" />
|
||||
</el-form-item>
|
||||
<el-form-item label="代理商id" prop="agentId">
|
||||
<el-input v-model="formData.agentId" placeholder="请输入代理商id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="支付状态" prop="status">
|
||||
<el-radio-group v-model="formData.status">
|
||||
<el-radio value="1">请选择字典生成</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { BonusApi, BonusVO } from '@/api/agent/bonus'
|
||||
|
||||
/** 代理商分红明细 表单 */
|
||||
defineOptions({ name: 'BonusForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
orderId: undefined,
|
||||
price: undefined,
|
||||
bonus: undefined,
|
||||
agentId: undefined,
|
||||
status: undefined,
|
||||
})
|
||||
const formRules = reactive({
|
||||
orderId: [{ required: true, message: '订单id不能为空', trigger: 'blur' }],
|
||||
price: [{ required: true, message: '订单支付金额,单位:分不能为空', trigger: 'blur' }],
|
||||
bonus: [{ required: true, message: '分红金额,单位: 分不能为空', trigger: 'blur' }],
|
||||
agentId: [{ required: true, message: '代理商id不能为空', trigger: 'blur' }],
|
||||
status: [{ required: true, message: '支付状态不能为空', trigger: 'blur' }],
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await BonusApi.getBonus(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as BonusVO
|
||||
if (formType.value === 'create') {
|
||||
await BonusApi.createBonus(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await BonusApi.updateBonus(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
orderId: undefined,
|
||||
price: undefined,
|
||||
bonus: undefined,
|
||||
agentId: undefined,
|
||||
status: undefined,
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
@ -206,8 +206,7 @@
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<BonusForm ref="formRef" @success="getList" />
|
||||
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
@ -215,7 +214,6 @@ import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { AgentOrderApi, AgentOrderVO } from '@/api/agent/order'
|
||||
import BonusForm from './BonusForm.vue'
|
||||
import {InfoApi} from "@/api/agent/info";
|
||||
import { fenToYuanFormat } from '@/utils/formatter'
|
||||
import {useRouter,useRoute} from "vue-router";
|
||||
|
@ -87,7 +87,7 @@
|
||||
// (page: DiyPageApi.DiyPageVO) => page.name === templateItems[1].name
|
||||
// )
|
||||
currentFormData.value = formData.value!.pages[selectedTemplateItem.value]
|
||||
console.log(selectedTemplateItem.value, 'selectedTemplateItem.value11111111111111')
|
||||
// console.log(selectedTemplateItem.value, 'selectedTemplateItem.value11111111111111')
|
||||
}
|
||||
|
||||
// 提交表单
|
||||
|
@ -0,0 +1,137 @@
|
||||
<template>
|
||||
<div class="main">
|
||||
<div class="mainTop">
|
||||
<div>商品分类</div>
|
||||
<div class="right">
|
||||
<div class="save" @click="save">保存</div>
|
||||
<div class="cz" @click="cz">重置</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mainBottom">
|
||||
<div class='item' :class="currItem == 1 ? 'on' : ''" @click="clickItem(1)">
|
||||
<img class="img"
|
||||
src="https://zysc.fjptzykj.com/admin-api/infra/file/25/get/9349d776503051646314323aced460314415a04c943dc220e9e5b86362f864dd.png" />
|
||||
<div class="text">样式1</div>
|
||||
</div>
|
||||
<!-- <div class='item' :class="currItem == 2 ? 'on' : ''" @click="clickItem(2)">
|
||||
<img class="img"
|
||||
src="https://zysc.fjptzykj.com/admin-api/infra/file/25/get/909ef630cff7cdc957962ae782ee9a882c86c35732140b1c9e013341fa559126.jpg" />
|
||||
<div class="text">样式2</div>
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
// TODO @疯狂:要不要建个 decorate 目录,然后挪进去,改成 index.vue,这样可以更明确看到是个独立界面哈,更好找
|
||||
import * as DiyTemplateApi from '@/api/mall/promotion/diy/template'
|
||||
import { useTagsdivStore } from '@/store/modules/tagsdiv'
|
||||
import { DiyComponentLibrary, PAGE_LIBS } from '@/components/DiyEditor/util' // 商城的 DIY 组件,在 DiyEditor 目录下
|
||||
import { toNumber } from 'lodash-es'
|
||||
const message = useMessage() // 消息弹窗
|
||||
const currItem = ref();
|
||||
|
||||
function clickItem(val) {
|
||||
currItem.value = val;
|
||||
}
|
||||
|
||||
function cz(val) {
|
||||
currItem.value = 1;
|
||||
}
|
||||
|
||||
function save() {
|
||||
setProjuctClass(currItem.value);
|
||||
// console.log("请求接口还没有写啊!!!!快让后端提供啊")
|
||||
}
|
||||
|
||||
// 设置商品分类
|
||||
const setProjuctClass = async (id) => {
|
||||
// const res = await DiyTemplateApi.setDiyProjuctClass(id);
|
||||
// console.log(res, "sssss");
|
||||
// if (res) {
|
||||
message.success('保存成功')
|
||||
// }
|
||||
}
|
||||
|
||||
// 获取商品分类
|
||||
const getProjuctClass = async () => {
|
||||
const res = await DiyTemplateApi.getDiyProjuctClass();
|
||||
currItem.value = res
|
||||
}
|
||||
getProjuctClass()
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.main {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
|
||||
.mainTop {
|
||||
width: 100%;
|
||||
margin: 10px 10px;
|
||||
background: white;
|
||||
padding: 10px 20px;
|
||||
font-weight: 700;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
|
||||
.right {
|
||||
display: flex;
|
||||
|
||||
div {
|
||||
padding: 5px 15px;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.save {
|
||||
background: #0256FF;
|
||||
margin-right: 10px;
|
||||
color: white;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.cz {
|
||||
border: 1px solid #cccccc;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mainBottom {
|
||||
width: 100%;
|
||||
margin: 10px 10px;
|
||||
background: white;
|
||||
padding: 30px 30px;
|
||||
display: flex;
|
||||
|
||||
.item {
|
||||
margin-right: 20px;
|
||||
text-align: center;
|
||||
border-radius: 12px;
|
||||
cursor: pointer;
|
||||
|
||||
&.on {
|
||||
.text {
|
||||
color: #0256ff;
|
||||
}
|
||||
|
||||
.img {
|
||||
border: 2px solid #0256ff;
|
||||
}
|
||||
}
|
||||
|
||||
.img {
|
||||
width: 260px;
|
||||
border-radius: 12px;
|
||||
border: 2px solid white;
|
||||
}
|
||||
|
||||
.text {
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
@ -61,7 +61,7 @@ public class agentOrderController {
|
||||
@Operation(summary = "获得代理商交易订单分页")
|
||||
@PreAuthorize("@ss.hasPermission('agent:order:query')")
|
||||
public CommonResult<PageResult<BrokerageRecordRespDTO>> getOrderPage(BrokerageRecordPageReqDTO reqVO) {
|
||||
List<AdminUserRespDTO> userList = adminUserApi.getAdminUserByCode("super_admin");
|
||||
/* List<AdminUserRespDTO> userList = adminUserApi.getAdminUserByCode("super_admin");
|
||||
List<AdminUserRespDTO> users = adminUserApi.getAdminUserByCode("dfhg");
|
||||
Long userId = getLoginUserId();
|
||||
if(!userList.get(0).getId().equals(userId) && !users.get(0).getId().equals(userId)){
|
||||
@ -72,7 +72,7 @@ public class agentOrderController {
|
||||
else{
|
||||
return success(PageResult.empty());
|
||||
}
|
||||
}
|
||||
}*/
|
||||
// 查询订单
|
||||
List<BrokerageRecordRespDTO> list = brokerageRecordApi.getBrokerageRecordPage(reqVO);
|
||||
PageResult<BrokerageRecordRespDTO> pageResult = new PageResult<BrokerageRecordRespDTO>(list, Long.valueOf(list.size()));
|
||||
@ -101,7 +101,7 @@ public class agentOrderController {
|
||||
public void exportInfoExcel(@Valid BrokerageRecordPageReqDTO reqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
reqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<AdminUserRespDTO> userList = adminUserApi.getAdminUserByCode("super_admin");
|
||||
/*List<AdminUserRespDTO> userList = adminUserApi.getAdminUserByCode("super_admin");
|
||||
List<AdminUserRespDTO> users = adminUserApi.getAdminUserByCode("dfhg");
|
||||
Long userId = getLoginUserId();
|
||||
AgentInfoDO agentInfoDO = new AgentInfoDO();
|
||||
@ -110,7 +110,7 @@ public class agentOrderController {
|
||||
if(agentInfoDO != null){
|
||||
reqVO.setAgentId(agentInfoDO.getId());
|
||||
}
|
||||
}
|
||||
}*/
|
||||
// 查询订单
|
||||
List<BrokerageRecordRespDTO> list = brokerageRecordApi.getBrokerageRecordPage(reqVO);
|
||||
String productInfo = "";
|
||||
@ -126,9 +126,6 @@ public class agentOrderController {
|
||||
brokerageRecordRespDTO.setProductInfo(productInfo);
|
||||
brokerageRecordRespDTO.setBelong(belong);
|
||||
}
|
||||
if(!userList.get(0).getId().equals(userId) && !users.get(0).getId().equals(userId) && agentInfoDO == null){
|
||||
list = new ArrayList<>();
|
||||
}
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "分销订单.xls", "数据", BrokerageRecordRespDTO.class
|
||||
,list);
|
||||
|
Loading…
x
Reference in New Issue
Block a user