[fix]优化代码,增加素材中心栏目
This commit is contained in:
@ -7,9 +7,9 @@
|
||||
* */
|
||||
export interface RechargeQuery extends PageParam {
|
||||
status?:RechargeStatusEnum
|
||||
createTime?:any[],
|
||||
createTime?:any,
|
||||
id?:any,
|
||||
username?:string
|
||||
nickname?:string
|
||||
}
|
||||
|
||||
export interface RechargeVO {
|
||||
|
@ -9,7 +9,8 @@
|
||||
export interface WithdrawQuery extends PageParam{
|
||||
userName?:string
|
||||
type?:WidthType
|
||||
createTime?:any[]
|
||||
createTime?:any,
|
||||
distributorName?: string
|
||||
}
|
||||
|
||||
export interface WithdrawVO{
|
||||
@ -23,6 +24,8 @@ export interface WithdrawVO{
|
||||
methodType:MethodType
|
||||
id:number
|
||||
createTime:string
|
||||
accountNum: number
|
||||
content: string
|
||||
}
|
||||
|
||||
export enum MethodType{
|
||||
|
@ -15,7 +15,7 @@ export interface StoreCartVO {
|
||||
}
|
||||
|
||||
// 查询购物车列表
|
||||
export const getStoreCartPage = async (params: StoreCartPageReqVO) => {
|
||||
export const getStoreCartPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/cart/store-cart/page`, params })
|
||||
}
|
||||
|
||||
|
@ -6,7 +6,7 @@ export interface AdvertsVO {
|
||||
}
|
||||
|
||||
// 查询广告列表
|
||||
export const getAdvertsPage = async (params: AdvertsVO) => {
|
||||
export const getAdvertsPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/shop/popup/page`, params })
|
||||
}
|
||||
|
||||
|
@ -6,7 +6,7 @@ export interface CanvasVO {
|
||||
}
|
||||
|
||||
// 查询画布信息列表
|
||||
export const getCanvasPage = async (params: CanvasVO) => {
|
||||
export const getCanvasPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/shop/canvas/page`, params })
|
||||
}
|
||||
|
||||
|
@ -40,7 +40,7 @@ export const getElectronicsOrderList = async () => {
|
||||
|
||||
|
||||
// 查询电子面单列表
|
||||
export const getElectronicsOrderPage = async (params: ElectronicsOrderPageReqVO) => {
|
||||
export const getElectronicsOrderPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/express/electronics-order/page`, params })
|
||||
}
|
||||
|
||||
|
@ -12,7 +12,7 @@ export const getExpressList = async () => {
|
||||
}
|
||||
|
||||
// 查询快递公司列表
|
||||
export const getExpressPage = async (params: ExpressPageReqVO) => {
|
||||
export const getExpressPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/order/express/page`, params })
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@ export interface StoreAfterSalesVO {
|
||||
}
|
||||
|
||||
// 查询售后记录列表
|
||||
export const getStoreAfterSalesPage = async (params: StoreAfterSalesPageReqVO) => {
|
||||
export const getStoreAfterSalesPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/order/store-after-sales/page`, params })
|
||||
}
|
||||
|
||||
|
@ -18,11 +18,11 @@ export interface StoreOrderVO {
|
||||
deductionPrice: number
|
||||
couponId: number
|
||||
couponPrice: number
|
||||
paid: byte
|
||||
paid: number
|
||||
payTime: Date
|
||||
payType: string
|
||||
status: boolean
|
||||
refundStatus: byte
|
||||
refundStatus: number
|
||||
refundReasonWapImg: string
|
||||
refundReasonWapExplain: string
|
||||
refundReasonTime: Date
|
||||
@ -49,12 +49,12 @@ export interface StoreOrderVO {
|
||||
verifyCode: string
|
||||
storeId: number
|
||||
shippingType: boolean
|
||||
isChannel: byte
|
||||
isChannel: boolean
|
||||
isSystemDel: boolean
|
||||
}
|
||||
|
||||
// 查询订单列表
|
||||
export const getStoreOrderPage = async (params: StoreOrderPageReqVO) => {
|
||||
export const getStoreOrderPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/order/store-order/page`, params })
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,7 @@ export interface StoreOrderElectronicsVO {
|
||||
}
|
||||
|
||||
// 查询订单电子面单记录列表
|
||||
export const getStoreOrderElectronicsPage = async (params: StoreOrderElectronicsPageReqVO) => {
|
||||
export const getStoreOrderElectronicsPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/order/store-order-electronics/page`, params })
|
||||
}
|
||||
|
||||
|
@ -11,7 +11,7 @@ export interface DiscountCouponVO {
|
||||
}
|
||||
|
||||
// 查询优惠券列表
|
||||
export const getDiscountCouponPage = async (params: DiscountCouponPageReqVO) => {
|
||||
export const getDiscountCouponPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/product/coupon/page`, params })
|
||||
}
|
||||
|
||||
@ -36,6 +36,6 @@ export const deleteDiscountCoupon = async (id: number) => {
|
||||
}
|
||||
|
||||
// 查询可用画布优惠券列表
|
||||
export const getCanvasCouponPage = async (params: DiscountCouponPageReqVO) => {
|
||||
export const getCanvasCouponPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/product/coupon/canvas/page`, params })
|
||||
}
|
||||
|
@ -23,12 +23,12 @@ export interface StoreProductVO {
|
||||
isBest: boolean
|
||||
isNew: boolean
|
||||
description: string
|
||||
isPostage: byte
|
||||
merUse: byte
|
||||
isPostage: boolean
|
||||
merUse: string
|
||||
giveIntegral: number
|
||||
cost: number
|
||||
isSeckill: byte
|
||||
isBargain: byte
|
||||
isSeckill: boolean
|
||||
isBargain: boolean
|
||||
isGood: boolean
|
||||
ficti: number
|
||||
browse: number
|
||||
@ -36,12 +36,12 @@ export interface StoreProductVO {
|
||||
isSub: boolean
|
||||
tempId: number
|
||||
specType: boolean
|
||||
isIntegral: byte
|
||||
isIntegral: boolean
|
||||
integral: number
|
||||
}
|
||||
|
||||
// 查询商品列表
|
||||
export const getStoreProductPage = async (params: StoreProductPageReqVO) => {
|
||||
export const getStoreProductPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/product/store-product/page`, params })
|
||||
}
|
||||
|
||||
|
@ -11,7 +11,7 @@ export interface ShippingTemplatesVO {
|
||||
}
|
||||
|
||||
// 查询运费模板列表
|
||||
export const getShippingTemplatesPage = async (params: ShippingTemplatesPageReqVO) => {
|
||||
export const getShippingTemplatesPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/product/shipping-templates/page`, params })
|
||||
}
|
||||
|
||||
|
@ -9,7 +9,7 @@ export interface StoreProductRelationVO {
|
||||
}
|
||||
|
||||
// 查询商品点赞和收藏列表
|
||||
export const getStoreProductRelationPage = async (params: StoreProductRelationPageReqVO) => {
|
||||
export const getStoreProductRelationPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/product/store-product-relation/page`, params })
|
||||
}
|
||||
|
||||
|
@ -17,7 +17,7 @@ export interface StoreProductReplyVO {
|
||||
}
|
||||
|
||||
// 查询评论列表
|
||||
export const getStoreProductReplyPage = async (params: StoreProductReplyPageReqVO) => {
|
||||
export const getStoreProductReplyPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/product/store-product-reply/page`, params })
|
||||
}
|
||||
|
||||
|
@ -6,7 +6,7 @@ export interface MaterialGroupVO {
|
||||
}
|
||||
|
||||
// 查询素材分组列表
|
||||
export const getMaterialGroupPage = async (params: MaterialGroupPageReqVO) => {
|
||||
export const getMaterialGroupPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/shop/material-group/page`, params })
|
||||
}
|
||||
|
||||
|
@ -17,7 +17,7 @@ export interface ShopVO {
|
||||
}
|
||||
|
||||
// 查询门店列表
|
||||
export const getShopPage = async (params: ShopPageReqVO) => {
|
||||
export const getShopPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/mall/shop/page`, params })
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@ export interface StoreProductRuleVO {
|
||||
}
|
||||
|
||||
// 查询商品规则值(规格)列表
|
||||
export const getStoreProductRulePage = async (params: StoreProductRulePageReqVO) => {
|
||||
export const getStoreProductRulePage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/product/store-product-rule/page`, params })
|
||||
}
|
||||
|
||||
|
@ -10,7 +10,7 @@ export interface ShopAssistantVO {
|
||||
}
|
||||
|
||||
// 查询门店店员列表
|
||||
export const getShopAssistantPage = async (params: ShopAssistantPageReqVO) => {
|
||||
export const getShopAssistantPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/mall/shop-assistant/page`, params })
|
||||
}
|
||||
|
||||
|
@ -9,7 +9,7 @@ export interface IntegralRuleVO {
|
||||
}
|
||||
|
||||
// 查询会员积分规则列表
|
||||
export const getIntegralRulePage = async (params: IntegralRulePageReqVO) => {
|
||||
export const getIntegralRulePage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/member/integral-rule/page`, params })
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@ export interface SignInRecordVO {
|
||||
}
|
||||
|
||||
// 查询签到记录列表
|
||||
export const getSignInRecordPage = async (params: SignInRecordPageReqVO) => {
|
||||
export const getSignInRecordPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/member/sign-in-record/page`, params })
|
||||
}
|
||||
|
||||
|
@ -20,11 +20,11 @@ export interface UserVO {
|
||||
integral: number
|
||||
signNum: number
|
||||
status: boolean
|
||||
level: byte
|
||||
level: number
|
||||
spreadUid: number
|
||||
spreadTime: Date
|
||||
userType: string
|
||||
isPromoter: byte
|
||||
isPromoter: boolean
|
||||
payCount: number
|
||||
spreadCount: number
|
||||
addres: string
|
||||
@ -34,7 +34,7 @@ export interface UserVO {
|
||||
}
|
||||
|
||||
// 查询用户列表
|
||||
export const getUserPage = async (params: UserPageReqVO) => {
|
||||
export const getUserPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/member/user/page`, params })
|
||||
}
|
||||
|
||||
|
@ -13,11 +13,11 @@ export interface UserAddressVO {
|
||||
postCode: string
|
||||
longitude: string
|
||||
latitude: string
|
||||
isDefault: byte
|
||||
isDefault: boolean
|
||||
}
|
||||
|
||||
// 查询用户地址列表
|
||||
export const getUserAddressPage = async (params: UserAddressPageReqVO) => {
|
||||
export const getUserAddressPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/member/user-address/page`, params })
|
||||
}
|
||||
|
||||
|
@ -4,7 +4,7 @@ export interface UserBillVO {
|
||||
id: number
|
||||
uid: number
|
||||
linkId: string
|
||||
pm: byte
|
||||
pm: string
|
||||
title: string
|
||||
category: string
|
||||
type: string
|
||||
@ -15,7 +15,7 @@ export interface UserBillVO {
|
||||
}
|
||||
|
||||
// 查询用户账单列表
|
||||
export const getUserBillPage = async (params: UserBillPageReqVO) => {
|
||||
export const getUserBillPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/member/user-bill/page`, params })
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@ export interface UserInviteLogVO {
|
||||
}
|
||||
|
||||
// 查询邀请日志列表
|
||||
export const getUserInviteLogPage = async (params: UserInviteLogPageReqVO) => {
|
||||
export const getUserInviteLogPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/member/user-invite-log/page`, params })
|
||||
}
|
||||
|
||||
|
@ -12,7 +12,7 @@ export interface UserLevelConfigVO {
|
||||
}
|
||||
|
||||
// 查询会员等级配置列表
|
||||
export const getUserLevelConfigPage = async (params: UserLevelConfigPageReqVO) => {
|
||||
export const getUserLevelConfigPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/member/user-level-config/page`, params })
|
||||
}
|
||||
|
||||
|
@ -9,7 +9,7 @@ export interface UserLevelEquityVO {
|
||||
}
|
||||
|
||||
// 查询会员等级权益配置列表
|
||||
export const getUserLevelEquityPage = async (params: UserLevelEquityPageReqVO) => {
|
||||
export const getUserLevelEquityPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/member/user-level-equity/page`, params })
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@ export interface UserLevelEquityRefVO {
|
||||
}
|
||||
|
||||
// 查询会员等级权益中间列表
|
||||
export const getUserLevelEquityRefPage = async (params: UserLevelEquityRefPageReqVO) => {
|
||||
export const getUserLevelEquityRefPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/member/user-level-equity-ref/page`, params })
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,7 @@ export interface UserLevelGrowthValueConfigVO {
|
||||
}
|
||||
|
||||
// 查询会员成长任务配置列表
|
||||
export const getUserLevelGrowthValueConfigPage = async (params: UserLevelGrowthValueConfigPageReqVO) => {
|
||||
export const getUserLevelGrowthValueConfigPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/member/user-level-growth-value-config/page`, params })
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@ export interface UserTagVO {
|
||||
}
|
||||
|
||||
// 查询会员标签列表
|
||||
export const getUserTagPage = async (params: UserTagPageReqVO) => {
|
||||
export const getUserTagPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/member/user-tag/page`, params })
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@ export interface UserTagGroupVO {
|
||||
}
|
||||
|
||||
// 查询会员标签分组列表
|
||||
export const getUserTagGroupPage = async (params: UserTagGroupPageReqVO) => {
|
||||
export const getUserTagGroupPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/member/user-tag-group/page`, params })
|
||||
}
|
||||
|
||||
|
@ -6,12 +6,12 @@ export interface WechatTemplateVO {
|
||||
name: string
|
||||
content: string
|
||||
tempid: string
|
||||
status: byte
|
||||
status: number
|
||||
type: string
|
||||
}
|
||||
|
||||
// 查询微信模板列表
|
||||
export const getWechatTemplatePage = async (params: WechatTemplatePageReqVO) => {
|
||||
export const getWechatTemplatePage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/message/wechat-template/page`, params })
|
||||
}
|
||||
|
||||
|
@ -21,7 +21,7 @@ export interface MerchantDetailsVO {
|
||||
}
|
||||
|
||||
// 查询支付服务商配置列表
|
||||
export const getMerchantDetailsPage = async (params: MerchantDetailsPageReqVO) => {
|
||||
export const getMerchantDetailsPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/pay/merchant-details/page`, params })
|
||||
}
|
||||
|
||||
|
@ -48,121 +48,7 @@
|
||||
</div>
|
||||
<el-image-viewer v-if="imgViewerVisible" @close="closeImgViewer" :url-list="value" />
|
||||
<el-dialog title="图片素材库" append-to-body v-model="listDialogVisible" width="70%">
|
||||
<el-container>
|
||||
<el-aside width="100px">
|
||||
<div style="margin-bottom: 10px">
|
||||
<el-button class="el-icon-plus" size="small" @click="handleMaterialgroupAdd()">
|
||||
添加分组
|
||||
</el-button>
|
||||
</div>
|
||||
<el-tabs
|
||||
v-model="materialgroupObjId"
|
||||
v-loading="materialgroupLoading"
|
||||
tab-position="left"
|
||||
@tab-click="tabClick"
|
||||
>
|
||||
<el-tab-pane v-for="item in materialgroupList" :key="item.id" :name="item.id">
|
||||
<template #label>
|
||||
<span> {{ item.name }}</span>
|
||||
</template>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-aside>
|
||||
<el-main>
|
||||
<el-card>
|
||||
<template #header>
|
||||
<div>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<span>{{ materialgroupObj.name }}</span>
|
||||
<span v-if="materialgroupObj.id != '-1'">
|
||||
<el-button
|
||||
size="small"
|
||||
type="text"
|
||||
class="el-icon-edit"
|
||||
style="margin-left: 10px"
|
||||
@click="handleMaterialgroupEdit(materialgroupObj)"
|
||||
>重命名</el-button
|
||||
>
|
||||
<el-button
|
||||
size="small"
|
||||
type="text"
|
||||
class="el-icon-delete"
|
||||
style="margin-left: 10px; color: red"
|
||||
@click="materialgroupDelete(materialgroupObj)"
|
||||
>删除</el-button
|
||||
>
|
||||
</span>
|
||||
</el-col>
|
||||
<el-col :span="12" style="text-align: right">
|
||||
<div class="btn-group">
|
||||
<el-button size="small" type="primary" @click="openGroupDialog">批量修改分组</el-button>
|
||||
<el-upload
|
||||
:action="uploadApi"
|
||||
:headers="headers"
|
||||
:file-list="[]"
|
||||
:on-progress="handleProgress"
|
||||
:before-upload="beforeUpload"
|
||||
:on-success="handleSuccess"
|
||||
:data="{ type: 1 }"
|
||||
multiple
|
||||
>
|
||||
<el-button size="small" type="primary">批量上传</el-button>
|
||||
</el-upload>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
<div v-loading="tableLoading">
|
||||
<el-alert
|
||||
v-if="tableData.length <= 0"
|
||||
title="暂无数据"
|
||||
type="info"
|
||||
:closable="false"
|
||||
center
|
||||
show-icon
|
||||
/>
|
||||
<el-checkbox-group v-model="urls">
|
||||
<el-row :gutter="5">
|
||||
<el-col class="img-item" v-for="(item, index) in tableData" :key="index" :span="4">
|
||||
<el-card :body-style="{ padding: '5px' }">
|
||||
<el-image
|
||||
style="width: 100%; height: 100px"
|
||||
:src="item.url"
|
||||
fit="contain"
|
||||
:preview-src-list="[item.url]"
|
||||
:z-index="9999"
|
||||
/>
|
||||
<div>
|
||||
<el-checkbox class="material-name" :label="item"> 选择 </el-checkbox>
|
||||
<el-row>
|
||||
<el-col :span="24" class="col-do">
|
||||
<el-button type="text" size="medium" @click="materialDel(item)"
|
||||
>删除</el-button
|
||||
>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-checkbox-group>
|
||||
|
||||
<el-pagination
|
||||
v-model:current-page="page.currentPage"
|
||||
:page-sizes="[12, 24]"
|
||||
:page-size="page.pageSize"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="page.total"
|
||||
class="pagination"
|
||||
@size-change="sizeChange"
|
||||
@current-change="pageChange"
|
||||
/>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-main>
|
||||
</el-container>
|
||||
<MaterialsMain ref="materialsMainRef" />
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="listDialogVisible = false">取 消</el-button>
|
||||
@ -170,41 +56,13 @@
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
<el-dialog title="批量修改分组" append-to-body v-model="groupVisible" width="300">
|
||||
<el-select
|
||||
style="width: 100%"
|
||||
v-model="materialGroupValue"
|
||||
placeholder="请选择分组"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in materialGroupOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="groupVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="submitEditGroup">确 定</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="Materials">
|
||||
import { ElMessageBox, ElMessage } from 'element-plus'
|
||||
import { ref } from 'vue'
|
||||
import {
|
||||
getList as materialgroupPage,
|
||||
addObj as materialgroupAdd,
|
||||
delObj as materialgroupDel,
|
||||
putObj as materialgroupEdit,
|
||||
batchUpdateObj as materialgroupBatchUpdate
|
||||
} from '@/api/tools/materialgroup'
|
||||
import { getPage, addObj, delObj } from '@/api/tools/material'
|
||||
import { getAccessToken } from '@/utils/auth'
|
||||
import MaterialsMain from './MaterialsMain.vue'
|
||||
import { ref,nextTick } from 'vue'
|
||||
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
@ -240,34 +98,12 @@ const props = defineProps({
|
||||
}
|
||||
})
|
||||
|
||||
const headers = ref({
|
||||
// Authorization: getToken()
|
||||
Authorization: 'Bearer ' + getAccessToken(),
|
||||
})
|
||||
|
||||
//const value = ref(props.value)
|
||||
const imgViewerVisible = ref(false)
|
||||
const url = ref('')
|
||||
const listDialogVisible = ref(false)
|
||||
const listDialogVisible2 = ref(false)
|
||||
const groupVisible = ref(false)
|
||||
const materialgroupList = ref([])
|
||||
const materialGroupValue = ref(0)
|
||||
const materialGroupOptions = ref([])
|
||||
const materialgroupObjId = ref('')
|
||||
const materialgroupObj = ref({})
|
||||
const materialgroupLoading = ref(false)
|
||||
const tableData = ref([])
|
||||
const resultNumber = ref(0)
|
||||
const page = ref({
|
||||
total: 0, // 总页数
|
||||
currentPage: 1, // 当前页数
|
||||
pageSize: 12, // 每页显示多少条
|
||||
ascs: [], // 升序字段
|
||||
descs: 'create_time' // 降序字段
|
||||
})
|
||||
const tableLoading = ref(false)
|
||||
const groupId = ref(null)
|
||||
const urls = ref([])
|
||||
const materialsMainRef = ref()
|
||||
|
||||
const value = computed({
|
||||
get() {
|
||||
@ -284,8 +120,6 @@ const value = computed({
|
||||
|
||||
// const store = useStore()
|
||||
|
||||
const uploadApi = import.meta.env.VITE_UPLOAD_URL
|
||||
|
||||
function moveMaterial(index, type) {
|
||||
if (type == 'up') {
|
||||
const tempOption = value.value[index - 1]
|
||||
@ -316,266 +150,33 @@ function deleteMaterial(index) {
|
||||
type: 'warning'
|
||||
}).then(function () {
|
||||
value.value.splice(index, 1)
|
||||
urls.value = []
|
||||
emit('update:modelValue', value.value)
|
||||
})
|
||||
}
|
||||
function toSeleteMaterial() {
|
||||
listDialogVisible.value = true
|
||||
listDialogVisible2.value = true
|
||||
if (tableData.value.length <= 0) {
|
||||
getMaterialgroupPage()
|
||||
}
|
||||
}
|
||||
function getMaterialgroupPage() {
|
||||
materialgroupLoading.value = true
|
||||
materialgroupPage({
|
||||
total: 0, // 总页数
|
||||
page: 1, // 当前页数
|
||||
size: 100, // 每页显示多少条
|
||||
ascs: [], // 升序字段
|
||||
sort: 'create_time,desc' // 降序字段
|
||||
}).then((response) => {
|
||||
materialgroupLoading.value = false
|
||||
materialgroupList.value = response
|
||||
materialGroupOptions.value = JSON.parse(JSON.stringify(response))
|
||||
materialgroupList.value.unshift({
|
||||
id: '-1',
|
||||
name: '全部分组'
|
||||
})
|
||||
|
||||
tabClick({
|
||||
index: 0
|
||||
})
|
||||
nextTick(()=>{
|
||||
materialsMainRef.value.getMaterialgroupPage()
|
||||
})
|
||||
}
|
||||
function materialgroupDelete(materialgroupObj) {
|
||||
ElMessageBox.confirm('是否确认删除该分组?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(function () {
|
||||
materialgroupDel(materialgroupObj.id).then(function () {
|
||||
getMaterialgroupPage()
|
||||
})
|
||||
})
|
||||
}
|
||||
function handleMaterialgroupEdit(materialgroupObj) {
|
||||
ElMessageBox.prompt('请输入分组名', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
inputValue: materialgroupObj.name
|
||||
})
|
||||
.then(({ value }) => {
|
||||
materialgroupEdit({
|
||||
id: materialgroupObj.id,
|
||||
name: value
|
||||
}).then(function () {
|
||||
materialgroupObj.name = value
|
||||
materialgroupList.value[materialgroupObj.index] = materialgroupObj
|
||||
})
|
||||
})
|
||||
.catch(() => {})
|
||||
}
|
||||
function handleMaterialgroupAdd() {
|
||||
ElMessageBox.prompt('请输入分组名', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消'
|
||||
})
|
||||
.then(({ value }) => {
|
||||
materialgroupAdd({
|
||||
name: value
|
||||
}).then(function () {
|
||||
getMaterialgroupPage()
|
||||
})
|
||||
})
|
||||
.catch(() => {})
|
||||
}
|
||||
function tabClick(tab) {
|
||||
urls.value = []
|
||||
const index = Number(tab.index)
|
||||
materialgroupObj.value = materialgroupList.value[index]
|
||||
|
||||
console.log('🚀 ~ file: Materials.vue:351 ~ tabClick ~ materialgroupObj:', materialgroupObj)
|
||||
|
||||
materialgroupObj.value.index = index
|
||||
materialgroupObjId.value = materialgroupObj.value.id
|
||||
|
||||
page.value.currentPage = 1
|
||||
page.value.total = 0
|
||||
if (materialgroupObj.value.id != '-1') {
|
||||
groupId.value = materialgroupObj.value.id
|
||||
} else {
|
||||
groupId.value = null
|
||||
}
|
||||
getMaterialPage(page.value)
|
||||
}
|
||||
function getMaterialPage(initPage) {
|
||||
tableLoading.value = true
|
||||
getPage(
|
||||
Object.assign(
|
||||
{
|
||||
pageNo: initPage.currentPage,
|
||||
pageSize: initPage.pageSize,
|
||||
descs: initPage.descs,
|
||||
ascs: initPage.ascs,
|
||||
sort: 'create_time,desc'
|
||||
},
|
||||
{
|
||||
groupId: groupId.value
|
||||
}
|
||||
)
|
||||
)
|
||||
.then((response) => {
|
||||
console.log('🚀 ~ file: Materials.vue:382 ~ .then ~ response:', response.list)
|
||||
console.log('🚀 ~ file: Materials.vue:382 ~ .then ~ response:', response.total)
|
||||
page.value.total = response.total
|
||||
page.value.currentPage = initPage.currentPage
|
||||
page.value.pageSize = initPage.pageSize
|
||||
tableData.value = response.list
|
||||
console.log('🚀 ~ file: Materials.vue:387 ~ .then ~ tableData.value:', tableData.value)
|
||||
tableLoading.value = false
|
||||
})
|
||||
.catch((error) => {
|
||||
console.log('🚀 ~ file: Materials.vue:391 ~ getMaterialPage ~ error:', error)
|
||||
tableLoading.value = false
|
||||
})
|
||||
}
|
||||
function sizeChange(val) {
|
||||
console.log(val)
|
||||
page.value.currentPage = 1
|
||||
page.value.pageSize = val
|
||||
getMaterialPage(this.page)
|
||||
}
|
||||
function pageChange(val) {
|
||||
console.log(val)
|
||||
page.value.currentPage = val
|
||||
// this.page.pageSize = val
|
||||
getMaterialPage(page.value)
|
||||
}
|
||||
function materialDel(item) {
|
||||
ElMessageBox.confirm('是否确认删除该素材?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(function () {
|
||||
delObj(item.id).finally(function () {
|
||||
console.log('getMaterialPage')
|
||||
getMaterialPage(page.value)
|
||||
})
|
||||
})
|
||||
}
|
||||
function handleProgress(event) {
|
||||
console.log(event)
|
||||
}
|
||||
function handleSuccess(response, file, fileList) {
|
||||
addObj({
|
||||
type: '1',
|
||||
groupId: groupId.value !== '-1' ? groupId.value : null,
|
||||
name: file.name,
|
||||
url: response.data
|
||||
}).then(() => {
|
||||
resultNumber.value++
|
||||
//console.log('res:', resultNumber.value)
|
||||
//console.log('fileList:',fileList.length)
|
||||
if (fileList.length === resultNumber.value) {
|
||||
getMaterialPage(page.value)
|
||||
//resultNumber.value = 0
|
||||
}
|
||||
})
|
||||
}
|
||||
function beforeUpload(file) {
|
||||
const isPic =
|
||||
file.type === 'image/jpeg' ||
|
||||
file.type === 'image/png' ||
|
||||
file.type === 'image/gif' ||
|
||||
file.type === 'image/jpg'
|
||||
const isLt2M = file.size / 1024 / 1024 < 2
|
||||
if (!isPic) {
|
||||
ElMessage.error('上传图片只能是 JPG、JPEG、PNG、GIF 格式!')
|
||||
return false
|
||||
}
|
||||
if (!isLt2M) {
|
||||
ElMessage.error('上传头像图片大小不能超过 2MB!')
|
||||
}
|
||||
return isPic && isLt2M
|
||||
}
|
||||
|
||||
const emit = defineEmits(['update:modelValue'])
|
||||
function sureUrls() {
|
||||
if(urls.value.length > props.num){
|
||||
console.log(this)
|
||||
let urls = materialsMainRef.value.urls
|
||||
if(urls.length > props.num){
|
||||
ElMessage.error(`选择数量不能超过${props.num}张`)
|
||||
return false
|
||||
}
|
||||
urls.value.forEach((item) => {
|
||||
urls.forEach((item) => {
|
||||
value.value[value.value.length] = item.url
|
||||
})
|
||||
listDialogVisible.value = false
|
||||
if (urls.value.length > 1 || props.num > 1) {
|
||||
if (urls.length > 1 || props.num > 1) {
|
||||
emit('update:modelValue', value.value)
|
||||
} else {
|
||||
emit('update:modelValue', value.value[0])
|
||||
}
|
||||
}
|
||||
|
||||
function openGroupDialog(){
|
||||
if(urls.value.length === 0){
|
||||
ElMessage.error(`请先选择图片`)
|
||||
return false
|
||||
}
|
||||
materialGroupValue.value = ''
|
||||
groupVisible.value = true
|
||||
}
|
||||
|
||||
function submitEditGroup() {
|
||||
if(!materialGroupValue.value){
|
||||
ElMessage.error(`请选择分组`)
|
||||
return false
|
||||
}
|
||||
const ids = urls.value.map(item=>{
|
||||
return item.id
|
||||
})
|
||||
materialgroupBatchUpdate({
|
||||
ids: ids,
|
||||
grouupId: materialGroupValue.value
|
||||
}).then(()=>{
|
||||
ElMessage.success(`修改成功`)
|
||||
groupVisible.value = false
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-icon-circle-close {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.material-name {
|
||||
padding: 8px 0px;
|
||||
}
|
||||
|
||||
.col-do {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.button-do {
|
||||
padding: unset !important;
|
||||
font-size: 12px;
|
||||
}
|
||||
.btn-group{
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
.el-button{
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.img-item{
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.pagination{
|
||||
margin-top: 10px;
|
||||
}
|
||||
</style>
|
||||
|
421
src/components/Materials/src/MaterialsMain.vue
Normal file
421
src/components/Materials/src/MaterialsMain.vue
Normal file
@ -0,0 +1,421 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-container>
|
||||
<el-aside width="100px">
|
||||
<div style="margin-bottom: 10px">
|
||||
<el-button v-hasPermi="['product:materials:groupAdd']" class="el-icon-plus" @click="handleMaterialgroupAdd()">
|
||||
添加分组
|
||||
</el-button>
|
||||
</div>
|
||||
<el-tabs
|
||||
v-model="materialgroupObjId"
|
||||
v-loading="materialgroupLoading"
|
||||
tab-position="left"
|
||||
@tab-click="tabClick"
|
||||
>
|
||||
<el-tab-pane v-for="item in materialgroupList" :key="item.id" :name="item.id">
|
||||
<template #label>
|
||||
<span> {{ item.name }}</span>
|
||||
</template>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-aside>
|
||||
<el-main>
|
||||
<el-card>
|
||||
<template #header>
|
||||
<div>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<span>{{ materialgroupObj.name }}</span>
|
||||
<span v-if="materialgroupObj.id != '-1'">
|
||||
<el-button
|
||||
v-hasPermi="['product:materials:groupEdit']"
|
||||
size="small"
|
||||
type="text"
|
||||
class="el-icon-edit"
|
||||
style="margin-left: 10px"
|
||||
@click="handleMaterialgroupEdit(materialgroupObj)"
|
||||
>重命名</el-button
|
||||
>
|
||||
<el-button
|
||||
v-hasPermi="['product:materials:groupDelete']"
|
||||
size="small"
|
||||
type="text"
|
||||
class="el-icon-delete"
|
||||
style="margin-left: 10px; color: red"
|
||||
@click="materialgroupDelete(materialgroupObj)"
|
||||
>删除</el-button>
|
||||
</span>
|
||||
</el-col>
|
||||
<el-col :span="12" style="text-align: right">
|
||||
<div class="btn-group">
|
||||
<el-button type="primary" @click="openGroupDialog" v-hasPermi="['product:materials:groupEdit']">批量修改分组</el-button>
|
||||
<el-upload
|
||||
:action="uploadApi"
|
||||
:headers="headers"
|
||||
:file-list="[]"
|
||||
:on-progress="handleProgress"
|
||||
:before-upload="beforeUpload"
|
||||
:on-success="handleSuccess"
|
||||
:data="{ type: 1 }"
|
||||
multiple
|
||||
>
|
||||
<el-button type="primary" v-hasPermi="['product:materials:materialUpload']">批量上传</el-button>
|
||||
</el-upload>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
<div v-loading="tableLoading">
|
||||
<el-alert
|
||||
v-if="tableData.length <= 0"
|
||||
title="暂无数据"
|
||||
type="info"
|
||||
:closable="false"
|
||||
center
|
||||
show-icon
|
||||
/>
|
||||
<el-checkbox-group v-model="urls">
|
||||
<el-row :gutter="5">
|
||||
<el-col class="img-item" v-for="(item, index) in tableData" :key="index" :span="4">
|
||||
<el-card :body-style="{ padding: '5px' }">
|
||||
<el-image
|
||||
style="width: 100%; height: 100px"
|
||||
:src="item.url"
|
||||
fit="contain"
|
||||
:preview-src-list="[item.url]"
|
||||
:z-index="9999"
|
||||
/>
|
||||
<div>
|
||||
<el-checkbox class="material-name" :label="item"> 选择 </el-checkbox>
|
||||
<el-row>
|
||||
<el-col :span="24" class="col-do">
|
||||
<el-button type="text" size="medium" @click="materialDel(item)" v-hasPermi="['product:materials:materialDel']"
|
||||
>删除</el-button
|
||||
>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-checkbox-group>
|
||||
|
||||
<el-pagination
|
||||
v-model:current-page="page.currentPage"
|
||||
:page-sizes="[12, 18, 24]"
|
||||
:page-size="page.pageSize"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="page.total"
|
||||
class="pagination"
|
||||
@size-change="sizeChange"
|
||||
@current-change="pageChange"
|
||||
/>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-main>
|
||||
</el-container>
|
||||
|
||||
<el-dialog title="批量修改分组" append-to-body v-model="groupVisible" width="300">
|
||||
<el-select
|
||||
style="width: 100%"
|
||||
v-model="materialGroupValue"
|
||||
placeholder="请选择分组"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in materialGroupOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="groupVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="submitEditGroup">确 定</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="MaterialsMain">
|
||||
import {ElMessage, ElMessageBox} from "element-plus";
|
||||
import {
|
||||
getList as materialgroupPage,
|
||||
addObj as materialgroupAdd,
|
||||
delObj as materialgroupDel,
|
||||
putObj as materialgroupEdit,
|
||||
batchUpdateObj as materialgroupBatchUpdate
|
||||
} from '@/api/tools/materialgroup'
|
||||
import { getPage, addObj, delObj } from '@/api/tools/material'
|
||||
import { getAccessToken } from '@/utils/auth'
|
||||
import {ref} from "vue";
|
||||
const props = defineProps({
|
||||
pageSize: {
|
||||
type: Number,
|
||||
default() {
|
||||
return 12
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
const groupVisible = ref(false)
|
||||
const materialgroupList = ref([])
|
||||
const materialGroupValue = ref(0)
|
||||
const materialGroupOptions = ref([])
|
||||
const materialgroupObjId = ref('')
|
||||
const materialgroupObj = ref({})
|
||||
const materialgroupLoading = ref(false)
|
||||
const tableData = ref([])
|
||||
const resultNumber = ref(0)
|
||||
const page = ref({
|
||||
total: 0, // 总页数
|
||||
currentPage: 1, // 当前页数
|
||||
pageSize: props.pageSize, // 每页显示多少条
|
||||
ascs: [], // 升序字段
|
||||
descs: 'create_time' // 降序字段
|
||||
})
|
||||
const tableLoading = ref(false)
|
||||
const groupId = ref(null)
|
||||
const urls = ref([])
|
||||
const uploadApi = import.meta.env.VITE_UPLOAD_URL
|
||||
const headers = ref({
|
||||
// Authorization: getToken()
|
||||
Authorization: 'Bearer ' + getAccessToken(),
|
||||
})
|
||||
|
||||
function handleMaterialgroupAdd() {
|
||||
ElMessageBox.prompt('请输入分组名', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消'
|
||||
})
|
||||
.then(({ value }) => {
|
||||
materialgroupAdd({
|
||||
name: value
|
||||
}).then(function () {
|
||||
getMaterialgroupPage()
|
||||
})
|
||||
})
|
||||
.catch(() => {})
|
||||
}
|
||||
|
||||
function tabClick(tab) {
|
||||
urls.value = []
|
||||
const index = Number(tab.index)
|
||||
materialgroupObj.value = materialgroupList.value[index]
|
||||
|
||||
console.log('🚀 ~ file: Materials.vue:351 ~ tabClick ~ materialgroupObj:', materialgroupObj)
|
||||
|
||||
materialgroupObj.value.index = index
|
||||
materialgroupObjId.value = materialgroupObj.value.id
|
||||
|
||||
page.value.currentPage = 1
|
||||
page.value.total = 0
|
||||
if (materialgroupObj.value.id != '-1') {
|
||||
groupId.value = materialgroupObj.value.id
|
||||
} else {
|
||||
groupId.value = null
|
||||
}
|
||||
getMaterialPage(page.value)
|
||||
}
|
||||
|
||||
function handleMaterialgroupEdit(materialgroupObj) {
|
||||
ElMessageBox.prompt('请输入分组名', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
inputValue: materialgroupObj.name
|
||||
})
|
||||
.then(({ value }) => {
|
||||
materialgroupEdit({
|
||||
id: materialgroupObj.id,
|
||||
name: value
|
||||
}).then(function () {
|
||||
materialgroupObj.name = value
|
||||
materialgroupList.value[materialgroupObj.index] = materialgroupObj
|
||||
})
|
||||
})
|
||||
.catch(() => {})
|
||||
}
|
||||
|
||||
function getMaterialPage(initPage) {
|
||||
tableLoading.value = true
|
||||
getPage(
|
||||
Object.assign(
|
||||
{
|
||||
pageNo: initPage.currentPage,
|
||||
pageSize: initPage.pageSize,
|
||||
descs: initPage.descs,
|
||||
ascs: initPage.ascs,
|
||||
sort: 'create_time,desc'
|
||||
},
|
||||
{
|
||||
groupId: groupId.value
|
||||
}
|
||||
)
|
||||
)
|
||||
.then((response) => {
|
||||
console.log('🚀 ~ file: Materials.vue:382 ~ .then ~ response:', response.list)
|
||||
console.log('🚀 ~ file: Materials.vue:382 ~ .then ~ response:', response.total)
|
||||
page.value.total = response.total
|
||||
page.value.currentPage = initPage.currentPage
|
||||
page.value.pageSize = initPage.pageSize
|
||||
tableData.value = response.list
|
||||
console.log('🚀 ~ file: Materials.vue:387 ~ .then ~ tableData.value:', tableData.value)
|
||||
tableLoading.value = false
|
||||
})
|
||||
.catch((error) => {
|
||||
console.log('🚀 ~ file: Materials.vue:391 ~ getMaterialPage ~ error:', error)
|
||||
tableLoading.value = false
|
||||
})
|
||||
}
|
||||
function sizeChange(val) {
|
||||
console.log(val)
|
||||
page.value.currentPage = 1
|
||||
page.value.pageSize = val
|
||||
getMaterialPage(page.value)
|
||||
}
|
||||
function pageChange(val) {
|
||||
page.value.currentPage = val
|
||||
// this.page.pageSize = val
|
||||
getMaterialPage(page.value)
|
||||
}
|
||||
function materialDel(item) {
|
||||
ElMessageBox.confirm('是否确认删除该素材?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(function () {
|
||||
delObj(item.id).finally(function () {
|
||||
console.log('getMaterialPage')
|
||||
getMaterialPage(page.value)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function handleProgress(event) {
|
||||
console.log(event)
|
||||
}
|
||||
function handleSuccess(response, file, fileList) {
|
||||
addObj({
|
||||
type: '1',
|
||||
groupId: groupId.value !== '-1' ? groupId.value : null,
|
||||
name: file.name,
|
||||
url: response.data
|
||||
}).then(() => {
|
||||
resultNumber.value++
|
||||
//console.log('res:', resultNumber.value)
|
||||
//console.log('fileList:',fileList.length)
|
||||
if (fileList.length === resultNumber.value) {
|
||||
getMaterialPage(page.value)
|
||||
//resultNumber.value = 0
|
||||
}
|
||||
})
|
||||
}
|
||||
function beforeUpload(file) {
|
||||
const isPic =
|
||||
file.type === 'image/jpeg' ||
|
||||
file.type === 'image/png' ||
|
||||
file.type === 'image/gif' ||
|
||||
file.type === 'image/jpg'
|
||||
const isLt2M = file.size / 1024 / 1024 < 2
|
||||
if (!isPic) {
|
||||
ElMessage.error('上传图片只能是 JPG、JPEG、PNG、GIF 格式!')
|
||||
return false
|
||||
}
|
||||
if (!isLt2M) {
|
||||
ElMessage.error('上传头像图片大小不能超过 2MB!')
|
||||
}
|
||||
return isPic && isLt2M
|
||||
}
|
||||
|
||||
function getMaterialgroupPage() {
|
||||
materialgroupLoading.value = true
|
||||
materialgroupPage({
|
||||
total: 0, // 总页数
|
||||
page: 1, // 当前页数
|
||||
size: 100, // 每页显示多少条
|
||||
ascs: [], // 升序字段
|
||||
sort: 'create_time,desc' // 降序字段
|
||||
}).then((response) => {
|
||||
materialgroupLoading.value = false
|
||||
materialgroupList.value = response
|
||||
materialGroupOptions.value = JSON.parse(JSON.stringify(response))
|
||||
materialgroupList.value.unshift({
|
||||
id: '-1',
|
||||
name: '全部分组'
|
||||
})
|
||||
|
||||
tabClick({
|
||||
index: 0
|
||||
})
|
||||
})
|
||||
}
|
||||
function materialgroupDelete(materialgroupObj) {
|
||||
ElMessageBox.confirm('是否确认删除该分组?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(function () {
|
||||
materialgroupDel(materialgroupObj.id).then(function () {
|
||||
getMaterialgroupPage()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function openGroupDialog(){
|
||||
if(urls.value.length === 0){
|
||||
ElMessage.error(`请先选择图片`)
|
||||
return false
|
||||
}
|
||||
materialGroupValue.value = ''
|
||||
groupVisible.value = true
|
||||
}
|
||||
|
||||
function submitEditGroup() {
|
||||
if(!materialGroupValue.value){
|
||||
ElMessage.error(`请选择分组`)
|
||||
return false
|
||||
}
|
||||
const ids = urls.value.map(item=>{
|
||||
return item.id
|
||||
})
|
||||
materialgroupBatchUpdate({
|
||||
ids: ids,
|
||||
grouupId: materialGroupValue.value
|
||||
}).then(()=>{
|
||||
ElMessage.success(`修改成功`)
|
||||
groupVisible.value = false
|
||||
getMaterialgroupPage()
|
||||
})
|
||||
}
|
||||
|
||||
defineExpose({ getMaterialgroupPage, urls }) // 提供 open 方法,用于打开弹窗
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.material-name {
|
||||
padding: 8px 0px;
|
||||
}
|
||||
|
||||
.col-do {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.btn-group{
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
.el-button{
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.img-item{
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.pagination{
|
||||
margin-top: 10px;
|
||||
}
|
||||
</style>
|
@ -205,9 +205,7 @@ function checkIsNoData (dataList) {
|
||||
})
|
||||
break
|
||||
case 'groupList':
|
||||
if (newVal.id) {
|
||||
isEmpty = false
|
||||
}
|
||||
isEmpty = false
|
||||
break
|
||||
case 'spikeList':
|
||||
if (newVal.id) {
|
||||
|
@ -33,7 +33,6 @@ export default function (componentContent, typeId, shopId) {
|
||||
})
|
||||
|
||||
function getData () {
|
||||
if (componentContent.value.id) {
|
||||
beforeGetData()
|
||||
const params = {
|
||||
method: 'POST',
|
||||
@ -53,9 +52,6 @@ export default function (componentContent, typeId, shopId) {
|
||||
afterGetData()
|
||||
}
|
||||
)
|
||||
} else {
|
||||
productData.value = []
|
||||
}
|
||||
}
|
||||
|
||||
watch(() =>
|
||||
|
@ -72,7 +72,7 @@ watch(
|
||||
<div
|
||||
v-if="show"
|
||||
:class="[
|
||||
'ml-10px text-16px font-700',
|
||||
'ml-10px text-12px font-700 whitespace-nowrap',
|
||||
{
|
||||
'text-[var(--logo-title-text-color)]': layout === 'classic',
|
||||
'text-[var(--top-header-text-color)]':
|
||||
|
@ -28,12 +28,12 @@ export interface CreateActivity {
|
||||
startTime: number | null;
|
||||
endTime: number | null;
|
||||
ifLimit: number;
|
||||
limitNumber: number | null;
|
||||
limitNumber?: number;
|
||||
ifEnable: number;
|
||||
ifAdd?: number;
|
||||
person?: number | null;
|
||||
effectiveTime?: number | null;
|
||||
enableTime: number | null,
|
||||
person?: number
|
||||
effectiveTime?: number
|
||||
enableTime?: number,
|
||||
isVirtually?: number;
|
||||
details: SkuResp[];
|
||||
}
|
||||
@ -59,7 +59,7 @@ export interface QueryParams {
|
||||
name: string
|
||||
createTime: any
|
||||
type: number
|
||||
state?: number | null
|
||||
state?: number
|
||||
}
|
||||
// 活动商品
|
||||
export interface ActivityProduct {
|
||||
|
5
src/types/configGlobal.d.ts
vendored
5
src/types/configGlobal.d.ts
vendored
@ -2,3 +2,8 @@ import { ElementPlusSize } from './elementPlus'
|
||||
export interface ConfigGlobalTypes {
|
||||
size?: ElementPlusSize
|
||||
}
|
||||
declare global {
|
||||
interface Window {
|
||||
UE: any;
|
||||
}
|
||||
}
|
||||
|
@ -52,11 +52,12 @@ export interface LevelListItem {
|
||||
|
||||
// 创建分销商等级
|
||||
export interface CreateLevel {
|
||||
id?: number;
|
||||
level: number | null; // 等级,范围为 1-10
|
||||
name: string; // 等级名称
|
||||
firstWages: number; // 一级佣金比例
|
||||
secondWages: number; // 二级佣金比例
|
||||
thirdWages?: number; // 三级佣金比例
|
||||
thirdWages?: number | null; // 三级佣金比例
|
||||
upType: number; // 升级类型,0表示满足任意条件,1表示满足全部条件
|
||||
userCount: number; // 人数,-1表示未选中
|
||||
amount: number; // 金额,-1表示未选中
|
||||
@ -111,6 +112,7 @@ export interface DistributorDetail {
|
||||
firstOrderCount?: number; // 一级分销商订单数
|
||||
secondAmountCount?: number; // 二级分销商分销金额
|
||||
secondOrderCount?: number; // 二级分销商分销金额
|
||||
superiorNameP1? :string; // 上级分销商名称
|
||||
}
|
||||
|
||||
// 分销订单列表
|
||||
@ -125,3 +127,32 @@ export interface DistributorDetail {
|
||||
status: number; // 状态
|
||||
payTime: number | string; // 支付时间
|
||||
}
|
||||
|
||||
// 分销商订单详情
|
||||
export interface DistributorOrderDetail {
|
||||
settlementTime: string; // 结算时间
|
||||
oid: number; // 订单ID
|
||||
orderId: string; // 订单号
|
||||
status: number; // 佣金状态
|
||||
distributionRule: number; // 分销规则 0-默认 1-自定义
|
||||
distributionPurchase: number; // 分销自购 0-关闭 1-开启
|
||||
distributionProductSettlement: number; // 商品结算方式 0-实际支付价格 1-商品价格
|
||||
distributionWagesSettlement: number; // 佣金结算方式 0-支付后结算 1-确认收获后结算 2-订单完成结算
|
||||
userId: number; // 下单用户
|
||||
userName: string; // 用户昵称
|
||||
productId: number; // 商品ID
|
||||
productAttrValueId: number; // 商品规格ID
|
||||
productName: string; // 商品名称
|
||||
productPrice: number; // 商品金额
|
||||
detailId: number; // 订单详情id
|
||||
superiorIdP1: number; // 所属一级ID
|
||||
superiorNameP1: string; // 所属一级名称
|
||||
superiorIdP2: number; // 所属二级ID
|
||||
superiorNameP2: string; // 所属二级名称
|
||||
firstWages: number; // 一级佣金比例
|
||||
secondWages: number; // 二级佣金比例
|
||||
firstAmount: number; // 一级佣金
|
||||
secondAmount: number; // 二级佣金
|
||||
id: number; // 主键
|
||||
createTime: string; // 创建时间
|
||||
}
|
||||
|
@ -142,7 +142,7 @@ export function formatPast2(ms) {
|
||||
* @param cellValue 字段值
|
||||
*/
|
||||
// @ts-ignore
|
||||
export const dateFormatter = (row, column, cellValue) => {
|
||||
export const dateFormatter: any = (row, column, cellValue) => {
|
||||
if (!cellValue) {
|
||||
return
|
||||
}
|
||||
|
@ -122,8 +122,8 @@ const loginData = reactive({
|
||||
tenantEnable: import.meta.env.VITE_APP_TENANT_ENABLE,
|
||||
loginForm: {
|
||||
// tenantName: 'yshop',
|
||||
username: 'admin',
|
||||
password: 'admin123',
|
||||
username: '',
|
||||
password: '',
|
||||
captchaVerification: '',
|
||||
rememberMe: false
|
||||
}
|
||||
|
@ -31,7 +31,7 @@
|
||||
<el-select v-model="queryParams.type" placeholder="请选择状态" clearable class="!w-240px">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.ENTRYSTATUS)"
|
||||
:key="dict.value"
|
||||
:key="String(dict.value)"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
@ -106,9 +106,10 @@ import {DistributorData} from "@/types/distributor";
|
||||
interface QueryParams {
|
||||
pageNo: number
|
||||
pageSize: number
|
||||
type?: number | null;
|
||||
type?: number;
|
||||
userName?: string;
|
||||
orderId?: number
|
||||
orderId?: number | null
|
||||
createTime: any
|
||||
}
|
||||
|
||||
const loading = ref<boolean>(true);
|
||||
@ -117,9 +118,10 @@ const list = ref<DistributorData[]>([]);
|
||||
const queryParams: QueryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
type: null,
|
||||
type: undefined,
|
||||
userName: "",
|
||||
orderId: null
|
||||
orderId: null,
|
||||
createTime: []
|
||||
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
@ -144,7 +146,7 @@ const handleQuery: () => void = () => {
|
||||
const resetQuery: () => void = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
queryParams.orderId = null
|
||||
queryParams.type=null
|
||||
queryParams.type=undefined
|
||||
handleQuery()
|
||||
}
|
||||
/** 初始化 **/
|
||||
|
@ -87,7 +87,6 @@ const addCustomDialog = () => {
|
||||
title: '上传图片',
|
||||
cssRules: 'width:1200px;height:650px;padding:20px;'
|
||||
});
|
||||
this.dialog = dialog;
|
||||
|
||||
var btn = new window.UE.ui.Button({
|
||||
name: 'dialog-button',
|
||||
@ -192,7 +191,7 @@ getOptionConfig()
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="分销协议">
|
||||
<vue-ueditor-wrap v-model="findOptionConfig(DICT_TYPE.DISTRIBUTOR_AGREEMENT).value" :config="myConfig" @before-init="addCustomDialog" style="width: 90%;" />
|
||||
<vue-ueditor-wrap v-model="findOptionConfig(DICT_TYPE.DISTRIBUTOR_AGREEMENT).value" :config="myConfig" @before-init="addCustomDialog" style="width: 90%;" />
|
||||
</el-form-item>
|
||||
<el-form-item label="">
|
||||
<el-button type="primary" @click="save" :loading="loading"> 保存 </el-button>
|
||||
|
@ -4,8 +4,13 @@ import {ref, reactive} from "vue";
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref<boolean>(false)
|
||||
const formData = ref({
|
||||
id: null,
|
||||
|
||||
interface FormData {
|
||||
id?: number;
|
||||
refuse: string;
|
||||
status: number;
|
||||
}
|
||||
const formData = ref<FormData>({
|
||||
refuse: '',
|
||||
status: 1
|
||||
})
|
||||
|
@ -32,7 +32,7 @@
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable class="!w-240px">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.DISTRIBUTOR_STATUS)"
|
||||
:key="dict.value"
|
||||
:key="String(dict.value)"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
@ -209,10 +209,11 @@ const message = useMessage() // 消息弹窗
|
||||
interface QueryParams {
|
||||
pageNo: number
|
||||
pageSize: number
|
||||
levelId?: number | null;
|
||||
levelId?: number;
|
||||
superiorName?: string;
|
||||
createTime: Date[]
|
||||
status?: string
|
||||
status?: string,
|
||||
realName: string,
|
||||
createTime: any
|
||||
}
|
||||
|
||||
const loading = ref<boolean>(true);
|
||||
@ -221,17 +222,17 @@ const list = ref<DistributorData[]>([]);
|
||||
const queryParams: QueryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
levelId: null,
|
||||
levelId: undefined,
|
||||
superiorName: "",
|
||||
createTime: [],
|
||||
status: ""
|
||||
|
||||
status: "",
|
||||
realName: ''
|
||||
})
|
||||
const levelList = ref<LevelListItem[]>([]);
|
||||
const auditRef = ref()
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const groupVisible = ref(false) // 拼团信息显示
|
||||
const distributorDetail = ref<DistributorDetail>({})
|
||||
const distributorDetail = ref({} as DistributorDetail)
|
||||
/** 查询列表 */
|
||||
const getList: ()=> Promise<void> = async () => {
|
||||
loading.value = true
|
||||
|
@ -1,8 +1,9 @@
|
||||
<script setup lang="ts" name="OrderDetail">
|
||||
import { ref } from "vue";
|
||||
import * as DistributorOrderApi from "@/api/distributor/order";
|
||||
import { DistributorOrderDetail } from "@/types/distributor";
|
||||
const dialogVisible = ref<boolean>(false)
|
||||
const distributorDetail = ref({})
|
||||
const distributorDetail = ref({} as DistributorOrderDetail)
|
||||
|
||||
// 打开详情
|
||||
const open = async (id: number) => {
|
||||
|
@ -19,11 +19,11 @@ import { dateFormatter } from "@/utils/formatTime";
|
||||
const loading = ref(false)
|
||||
const searchForm: Ref<RechargeQuery> = ref({
|
||||
pageNo: 1, // 当前页数
|
||||
pageSize: 5, // 每页显示多少条
|
||||
pageSize: 10, // 每页显示多少条
|
||||
createTime: [],
|
||||
status: undefined,
|
||||
id: undefined,
|
||||
username: ""
|
||||
nickname: ""
|
||||
})
|
||||
const total = ref(0)
|
||||
const list: Ref<RechargeVO[]> = ref([])
|
||||
@ -38,8 +38,9 @@ async function doGetList() {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
const searchFormRef = ref() // 搜索的表单
|
||||
function reset() {
|
||||
searchFormRef.value.resetFields()
|
||||
searchForm.value.createTime = []
|
||||
searchForm.value.status = undefined
|
||||
doGetList()
|
||||
@ -59,13 +60,13 @@ doGetList()
|
||||
<el-form
|
||||
class="w-full flex flex-wrap gap-10"
|
||||
ref="searchFormRef"
|
||||
:mode="searchForm">
|
||||
<el-form-item label="用户名">
|
||||
:model="searchForm">
|
||||
<el-form-item label="用户名" prop="nickname">
|
||||
<el-input
|
||||
placeholder="请输入用户名"
|
||||
v-model="searchForm.username" />
|
||||
v-model="searchForm.nickname" />
|
||||
</el-form-item>
|
||||
<el-form-item label="订单号">
|
||||
<el-form-item label="订单号" prop="id">
|
||||
<el-input
|
||||
placeholder="请输入订单号"
|
||||
v-model="searchForm.id" />
|
||||
@ -94,12 +95,10 @@ doGetList()
|
||||
<!-- table -->
|
||||
<ContentWrap>
|
||||
<el-table :data="list">
|
||||
<el-table-column
|
||||
label="ID"
|
||||
prop="id" />
|
||||
<el-table-column label="序号" type="index" width="80" />
|
||||
<el-table-column
|
||||
label="昵称"
|
||||
prop="userName" />
|
||||
prop="nickname" />
|
||||
<el-table-column
|
||||
label="订单号"
|
||||
prop="id" />
|
||||
@ -126,17 +125,12 @@ doGetList()
|
||||
:formatter="dateFormatter" />
|
||||
</el-table>
|
||||
<div class="w-full flex justify-end mt-[10px]">
|
||||
<el-pagination
|
||||
v-model:current-page="searchForm.pageNo"
|
||||
v-model:page-size="searchForm.pageSize"
|
||||
:page-sizes="[5, 10, 20, 100,400]"
|
||||
background
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
:current-change="getList"
|
||||
:size-change="getList"
|
||||
@size-change="doGetList"
|
||||
@current-change="doGetList"
|
||||
v-model:page="searchForm.pageNo"
|
||||
v-model:limit="searchForm.pageSize"
|
||||
@pagination="doGetList"
|
||||
/>
|
||||
</div>
|
||||
</ContentWrap>
|
||||
|
@ -24,7 +24,7 @@ import download from "@/utils/download";
|
||||
const loading = ref(false)
|
||||
const searchForm:Ref<WithdrawQuery> = ref({
|
||||
pageNo: 1, // 当前页数
|
||||
pageSize: 5, // 每页显示多少条
|
||||
pageSize: 10, // 每页显示多少条
|
||||
createTime:[],
|
||||
type:undefined,
|
||||
distributorName:undefined
|
||||
@ -179,7 +179,7 @@ doGetList()
|
||||
v-model:page-size="searchForm.pageSize"
|
||||
@size-change="doGetList"
|
||||
@current-change="doGetList"
|
||||
:page-sizes="[5, 10, 20, 100,400]"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
background
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="total"
|
||||
@ -188,7 +188,7 @@ doGetList()
|
||||
</ContentWrap>
|
||||
|
||||
<Detail ref="detailRef" />
|
||||
<Audit ref="auditRef" @confirm="getList" />
|
||||
<Audit ref="auditRef" @confirm="doGetList" />
|
||||
</template>
|
||||
|
||||
<style
|
||||
|
@ -5,8 +5,8 @@
|
||||
<el-form-item label="生成模板" prop="templateType">
|
||||
<el-select v-model="formData.templateType" @change="tplSelectChange">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_TEMPLATE_TYPE)"
|
||||
:key="dict.value"
|
||||
v-for="(dict,index) in getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_TEMPLATE_TYPE)"
|
||||
:key="index"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
@ -17,8 +17,8 @@
|
||||
<el-form-item label="前端类型" prop="frontType">
|
||||
<el-select v-model="formData.frontType">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_FRONT_TYPE)"
|
||||
:key="dict.value"
|
||||
v-for="(dict,index) in getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_FRONT_TYPE)"
|
||||
:key="index"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
@ -30,8 +30,8 @@
|
||||
<el-form-item label="生成场景" prop="scene">
|
||||
<el-select v-model="formData.scene">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_SCENE)"
|
||||
:key="dict.value"
|
||||
v-for="(dict,index) in getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_SCENE)"
|
||||
:key="index"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
@ -308,9 +308,9 @@ const props = defineProps({
|
||||
|
||||
const formRef = ref()
|
||||
const formData = ref({
|
||||
templateType: null,
|
||||
frontType: null,
|
||||
scene: null,
|
||||
templateType: '',
|
||||
frontType: '',
|
||||
scene: '',
|
||||
moduleName: '',
|
||||
businessName: '',
|
||||
className: '',
|
||||
@ -387,3 +387,4 @@ defineExpose({
|
||||
validate: async () => unref(formRef)?.validate()
|
||||
})
|
||||
</script>
|
||||
|
||||
|
@ -112,9 +112,21 @@ const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
name: '',
|
||||
storage: '',
|
||||
storage: 0,
|
||||
remark: '',
|
||||
config: {}
|
||||
config: {
|
||||
basePath: '',
|
||||
host: '',
|
||||
port: 0,
|
||||
username: '',
|
||||
password: '',
|
||||
mode: '',
|
||||
endpoint: '',
|
||||
bucket: '',
|
||||
accessKey: '',
|
||||
accessSecret: '',
|
||||
domain: ''
|
||||
}
|
||||
})
|
||||
const formRules = reactive({
|
||||
name: [{ required: true, message: '配置名不能为空', trigger: 'blur' }],
|
||||
@ -184,9 +196,21 @@ const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
name: '',
|
||||
storage: '',
|
||||
storage: 0,
|
||||
remark: '',
|
||||
config: {}
|
||||
config: {
|
||||
basePath: '',
|
||||
host: '',
|
||||
port: 0,
|
||||
username: '',
|
||||
password: '',
|
||||
mode: '',
|
||||
endpoint: '',
|
||||
bucket: '',
|
||||
accessKey: '',
|
||||
accessSecret: '',
|
||||
domain: ''
|
||||
}
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
|
@ -182,7 +182,7 @@ const handleDelete = async (id: number) => {
|
||||
|
||||
/** 装修按钮操作 */
|
||||
const handleDecoration = (id) =>{
|
||||
push('/page/canvasPage?id=' + id)
|
||||
push('/decoration/canvasPage?id=' + id)
|
||||
}
|
||||
|
||||
/** 设为首页按钮操作 */
|
||||
|
18
src/views/mall/materials/index.vue
Normal file
18
src/views/mall/materials/index.vue
Normal file
@ -0,0 +1,18 @@
|
||||
<template>
|
||||
<MaterialsMain ref="materialsMainRef" :pageSize="18"/>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import MaterialsMain from '@/components/Materials/src/MaterialsMain.vue'
|
||||
import {ref, onMounted, nextTick} from "vue";
|
||||
const materialsMainRef = ref()
|
||||
onMounted(()=>{
|
||||
nextTick(()=>{
|
||||
materialsMainRef.value.getMaterialgroupPage()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
@ -15,11 +15,6 @@
|
||||
<span v-if="DetailData.state==4">用户取消</span>
|
||||
<span v-if="DetailData.state==5">商家拒绝</span>
|
||||
</el-descriptions-item>
|
||||
<!-- <el-descriptions-item label="售后状态">-->
|
||||
<!-- <span v-if="DetailData.salesState==0">正常</span>-->
|
||||
<!-- <span v-if="DetailData.salesState==1">用户取消 </span>-->
|
||||
<!-- <span v-if="DetailData.salesState==2">商家拒绝</span>-->
|
||||
<!-- </el-descriptions-item>-->
|
||||
<el-descriptions-item label="退款金额">{{ DetailData.refundAmount}}</el-descriptions-item>
|
||||
<el-descriptions-item label="申请原因">{{ DetailData.reasons }}</el-descriptions-item>
|
||||
<el-descriptions-item label="说明">{{ DetailData.explains }}</el-descriptions-item>
|
||||
@ -56,15 +51,6 @@
|
||||
{{ item.acceptStation }}
|
||||
</el-timeline-item>
|
||||
</el-timeline>
|
||||
<!-- <el-button @click="innerDrawer = true">Click me!</el-button>
|
||||
<el-drawer
|
||||
v-model="innerDrawer"
|
||||
title="I'm inner Drawer"
|
||||
:append-to-body="true"
|
||||
:before-close="handleClose"
|
||||
>
|
||||
<p>_(:зゝ∠)_</p>
|
||||
</el-drawer> -->
|
||||
</div>
|
||||
</el-drawer>
|
||||
</template>
|
||||
@ -74,16 +60,36 @@ import { formatDate } from '@/utils/formatTime'
|
||||
import * as StoreOrderApi from "@/api/mall/order/storeOrder";
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
// const message = useMessage() // 消息弹窗
|
||||
const message = useMessage() // 消息弹窗
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const drawer = ref(false)
|
||||
const DetailData = ref({
|
||||
explainImgList: [],
|
||||
returnVoucherList: []
|
||||
orderCode: 0,
|
||||
serviceType: 0,
|
||||
explainImg: '',
|
||||
explainImgList: [''],
|
||||
returnVoucher: '',
|
||||
returnVoucherList: [''],
|
||||
state: 0,
|
||||
refundAmount: 0,
|
||||
reasons: '',
|
||||
explains: '',
|
||||
createTime: new Date(),
|
||||
consignee: '',
|
||||
phoneNumber: '',
|
||||
address: '',
|
||||
shipperCode: '',
|
||||
deliveryName: '',
|
||||
deliverySn: '',
|
||||
returnPolicy: '',
|
||||
})
|
||||
const logisticResult = ref({})
|
||||
class LogisticResultVo {
|
||||
acceptTime = '';
|
||||
acceptStation = '';
|
||||
}
|
||||
const logisticResult = ref<LogisticResultVo[]>([])
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
const open = async (type: string, id: number) => {
|
||||
drawer.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
DetailData.value = await StoreAfterSalesApi.getStoreAfterSales(id)
|
||||
@ -103,9 +109,7 @@ const getLogistic = async(deliverySn,shipperCode) => {
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
</script>
|
||||
<style scoped>
|
||||
.logisticResult {
|
||||
p {
|
||||
font-size: 12px;
|
||||
}
|
||||
.logisticResult p {
|
||||
font-size: 12px;
|
||||
}
|
||||
</style>
|
||||
|
@ -22,7 +22,7 @@
|
||||
<el-select v-model="queryParams.state" placeholder="请选择状态" clearable class="!w-240px">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.ACTIVITY_STATUS)"
|
||||
:key="dict.value"
|
||||
:key="String(dict.value)"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
@ -161,7 +161,7 @@ const queryParams: QueryParams = reactive({
|
||||
name: "",
|
||||
type: 3,
|
||||
createTime: [],
|
||||
state: null
|
||||
state: undefined
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
|
||||
|
@ -167,7 +167,7 @@
|
||||
</el-table>
|
||||
</div>
|
||||
<template #reference>
|
||||
<el-form label-width="100px" size="mini" :model="formData">
|
||||
<el-form label-width="100px" :model="formData">
|
||||
<el-button class="m-2">查看价格与库存</el-button>
|
||||
</el-form>
|
||||
</template>
|
||||
@ -211,7 +211,7 @@ const dialogVisible = ref<boolean>(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref<string>('') // 弹窗的标题
|
||||
const formLoading = ref<boolean>(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref<string>('') // 表单的类型:create - 新增;update - 修改
|
||||
const timeData = ref<string[]>([])
|
||||
const timeData = ref<any>([])
|
||||
const multiple = ref()
|
||||
const selectProductRef = ref()
|
||||
const setProductRef = ref()
|
||||
@ -231,11 +231,11 @@ const initForm = (): CreateActivity => {
|
||||
startTime: null, // 活动开始时间
|
||||
endTime: null, // 活动结束时间
|
||||
ifLimit: 1, // 是否限购
|
||||
limitNumber: null, // 限购几件/人
|
||||
limitNumber: undefined, // 限购几件/人
|
||||
ifEnable: 1, // 活动预热 1-停用 2-启用
|
||||
enableTime: null, // 预热时间 (分钟)
|
||||
person: null, // 成团人数
|
||||
effectiveTime: null, // 成团有效时间几(分钟)
|
||||
enableTime: undefined, // 预热时间 (分钟)
|
||||
person: undefined, // 成团人数
|
||||
effectiveTime: undefined, // 成团有效时间几(分钟)
|
||||
remark: '', // 备注
|
||||
isVirtually: 0, // 是否虚拟成团:0-否,1-是
|
||||
id: null,
|
||||
@ -352,13 +352,13 @@ const validateForm = () => {
|
||||
}
|
||||
|
||||
// 判断限购数量
|
||||
if (ifLimit.value && formData.value.limitNumber !== null && formData.value.limitNumber <= 0) {
|
||||
if (ifLimit.value && formData.value.limitNumber && formData.value.limitNumber <= 0) {
|
||||
message.error('限购数量必须大于0件')
|
||||
return false;
|
||||
}
|
||||
|
||||
// 判断预热时间
|
||||
if (preheat.value && formData.value.enableTime !== null && formData.value.enableTime <= 0) {
|
||||
if (preheat.value && formData.value.enableTime && formData.value.enableTime <= 0) {
|
||||
message.error('预热时间必须大于0分钟')
|
||||
return false;
|
||||
}
|
||||
|
@ -144,7 +144,7 @@ onMounted(() => {
|
||||
:precision="0"
|
||||
:controls="false"
|
||||
/>
|
||||
<span>积分</span>
|
||||
<span>{{item.type === 'consume'?'元':'积分'}}</span>
|
||||
</div>
|
||||
<div class="checkbox-item" v-else-if="item.type === 'sign' && item.attribute1 === '1'">
|
||||
<el-checkbox v-model="item.enable" label="签到获得" size="large" style="margin-right: 10px" />
|
||||
|
@ -5,6 +5,18 @@ import * as DiscountCouponApi from '@/api/mall/product/discountCoupon'
|
||||
import {ref} from "vue";
|
||||
import {dateFormatter} from "@/utils/formatTime";
|
||||
|
||||
interface EquityItem {
|
||||
id: number;
|
||||
typeName: string;
|
||||
type: string;
|
||||
selected: boolean;
|
||||
equityValue: number;
|
||||
}
|
||||
|
||||
interface EquityArrayItem {
|
||||
equityId: number;
|
||||
equityValue: number;
|
||||
}
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
@ -76,36 +88,37 @@ const submitForm = async () => {
|
||||
if (!formRef.value) return
|
||||
const valid = await formRef.value.validate()
|
||||
if (!valid) return
|
||||
let equityArray = [];
|
||||
let equityArray = ref<EquityArrayItem[]>([]);
|
||||
let errorMessageMap = {
|
||||
'integral': '积分需大于0',
|
||||
'discount': '折扣需大于0',
|
||||
'coupon': '请选择权益优惠券'
|
||||
};
|
||||
|
||||
equityList.value.forEach((item) => {
|
||||
for (let i = 0; i < equityList.value.length; i++) {
|
||||
let item = equityList.value[i];
|
||||
if (item.selected) {
|
||||
if ((item.type === 'integral' || item.type === 'discount') && item.equityValue <= 0) {
|
||||
message.error(errorMessageMap[item.typeName]);
|
||||
} else if (item.type === 'coupon') {
|
||||
if(tableRadio.value?.id){
|
||||
if (tableRadio.value?.id) {
|
||||
item.equityValue = tableRadio.value.id
|
||||
equityArray.push({
|
||||
equityArray.value.push({
|
||||
equityId: item.id,
|
||||
equityValue: item.equityValue
|
||||
});
|
||||
} else {
|
||||
message.error(errorMessageMap[item.typeName]);
|
||||
message.error('请选择优惠券');
|
||||
return false
|
||||
}
|
||||
} else {
|
||||
equityArray.push({
|
||||
equityArray.value.push({
|
||||
equityId: item.id,
|
||||
equityValue: item.equityValue
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
formData.value.levelEquityList = equityArray
|
||||
}
|
||||
formData.value.levelEquityList = equityArray.value
|
||||
console.log(formData.value, 'formData')
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
@ -186,7 +199,7 @@ const saveIdList = () => {
|
||||
|
||||
|
||||
//获取所有权益列表
|
||||
const equityList = ref([])
|
||||
const equityList = ref<EquityItem[]>([])
|
||||
const getAllEquityList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
@ -425,3 +438,5 @@ const resetForm = () => {
|
||||
visibility: hidden;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user