Compare commits

...

12 Commits

Author SHA1 Message Date
zcc b42e546ad5 license: 更新许可证信息
6 months ago
zccbbg 20e3fff80d refactor: 优化项目展示
1 year ago
DataCall 9ee4f01157 替换小程序二维码
1 year ago
zccbbg f6b65aff41 docs: 公众号名称更改
1 year ago
wqy 9bdadd152e 广告接入
1 year ago
wqy 01f7e5c587 小程序码修改
1 year ago
zccbbg e19d2dbab1 订单页样式优化
1 year ago
zccbbg 0d68eb7a33 修复富文本编辑器文字重叠问题
2 years ago
zccbbg c92c94abb1 关闭tagsview
2 years ago
wqy 8093859c33 Merge remote-tracking branch 'origin/master'
2 years ago
zccbbg 451f857fac Merge remote-tracking branch 'origin/master'
2 years ago
zccbbg 003464aca3 更新readme
2 years ago

@ -5,8 +5,8 @@ VUE_APP_TITLE = 若依商城管理系统,开源免费,软件开发,微信小程
ENV = 'development'
# 若依管理系统/开发环境
#VUE_APP_BASE_API = 'https://mall.ichengle.top/api'
VUE_APP_BASE_API = '/dev-api'
VUE_APP_BASE_API = 'https://mall.ichengle.top/api'
#VUE_APP_BASE_API = '/dev-api'
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true

@ -1,21 +1,19 @@
MIT License
Copyright (c) 2022 Zhaochencheng
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
# Open Source License
ruoyi-mall is licensed under a modified version of the Apache License 2.0, with the following additional conditions:
1. ruoyi-mall may be utilized commercially, including as a backend service for other applications or as an application development platform for enterprises. Should the conditions below be met, a commercial license must be obtained from the producer:
a. Multi-tenant service: Unless explicitly authorized by ruoyi-mall in writing, you may not use the ruoyi-mall source code to operate a multi-tenant environment.
b. LOGO and copyright information: In the process of using ruoyi-mall's frontend, you may not remove or moruoyi-mall the LOGO or copyright information in the ruoyi-mall console or applications. This restriction is inapplicable to uses of ruoyi-mall that do not involve its frontend.
- Frontend Definition: For the purposes of this license, the "frontend" of ruoyi-mall includes all components located in the web/ directory when running ruoyi-mall from the raw source code, or the "web" image when running ruoyi-mall with Docker.
2. As a contributor, you should agree that:
a. The producer can adjust the open-source agreement to be more strict or relaxed as deemed necessary.
b. Your contributed code may be used for commercial purposes, including but not limited to its cloud business operations.
Apart from the specific conditions mentioned above, all other rights and restrictions follow the Apache License 2.0. Detailed information about the Apache License 2.0 can be found at http://www.apache.org/licenses/LICENSE-2.0.
The interactive design of this product is protected by appearance patent.

@ -37,7 +37,6 @@ npm run build:prod
http://mall.ichengle.top
### 小程序和h5
<img src="doc/小程序演示.jpg" width="200px">
<img src="doc/快递小程序.jpg" width="200px">
<img src="doc/h5演示.png" width="200px">
## CSDN若依技术专栏

@ -85,4 +85,20 @@ export function viewStatistics(memberId){
})
}
export function getMiniWechatImg(params){
return request({
url: `/ums/member/wechat/code`,
method: 'get',
params
})
}
export function judgeQrCode(params){
return request({
url: `/no-auth/verified/code`,
method: 'get',
params
})
}

@ -195,9 +195,6 @@ export default {
</script>
<style>
.ql-editor{
line-height: 0;
}
.editor, .ql-toolbar {
white-space: pre-wrap !important;
line-height: normal !important;

@ -0,0 +1,70 @@
<template>
<el-dialog title="扫描解锁" :visible.sync="open" width="500px" append-to-body :close-on-click-modal="false">
<p>使用微信扫描下方二维码观看完广告获取验证码</p>
<p class="red f13">如果第一次扫码未弹出广告请重新扫码进入</p>
<div class="flex-center">
<el-image class="qr-code"
:src="'data:image/png;base64,'+ miniImg"
fit="fill"
></el-image>
<el-input v-model="qrCode" class="left-input"/>
<el-button @click="asyncOk" class="right-btn" type="primary" :disabled="!qrCode">提交</el-button>
</div>
</el-dialog>
</template>
<script>
import {getMiniWechatImg, judgeQrCode} from "@/api/ums/member";
import {mapGetters} from "vuex";
export default {
computed: {
...mapGetters(['roles'])
},
data() {
return {
open: false,
miniImg: null,
qrCode: null
}
},
methods: {
initMiniWechatImg() {
getMiniWechatImg({scene: 2}).then(res => {
this.miniImg = res.data
})
},
show() {
//
if (this.roles.includes("admin")) {
this.$emit("confirmOk", true)
return
}
this.initMiniWechatImg()
this.open = true
},
async asyncOk(){
const res = await judgeQrCode({code: this.qrCode}).then(res=>{
return res.data
})
if (res) {
this.open = false
} else {
this.$message.error('验证码错误')
}
this.$emit("confirmOk", res)
}
}
}
</script>
<style lang="stylus">
.qr-code
min-width 150px
height 150px
margin 20px 20px 20px 0
.left-input
.el-input__inner
border-radius 4px 0 0 4px !important
.right-btn
border-radius 0 4px 4px 0 !important
</style>

@ -5,14 +5,14 @@
<div :class="{hasTagsView:needTagsView,sidebarHide:sidebar.hide}" class="main-container">
<div :class="{'fixed-header':fixedHeader}">
<navbar />
<tags-view v-if="needTagsView" />
<!-- <tags-view v-if="needTagsView" />-->
</div>
<app-main />
<right-panel>
<settings />
</right-panel>
<div id="footer-global" :style="{left: !sidebar.opened ? '54px' : '200px'}">
<p class="bolder-font large-tip">技术支持关注编写美好前微信公众号回复支持</p>
<p class="bolder-font large-tip">技术支持关注序员诚哥微信公众号回复支持</p>
</div>
</div>
</div>

@ -174,7 +174,8 @@ body
width 100%
.bolder-font
font-weight bolder
.f13
font-size 13px
.large-tip
font-size 16px
.dialog-form-two

@ -148,7 +148,7 @@
<script>
import {str2Date} from '@/utils/date';
import PanelGroup from '@/views/components/PanelGroup'
import { mapGetters } from 'vuex'
import {mapGetters} from 'vuex'
import OrderLineChart from "@/views/dashboard/OrderLineChart.vue";
import TopProduct from "@/views/components/IndexOrderPanelGroup/TopProduct.vue";
import {memberAndCartStatistics, orderAndAftersaleStatistics} from "@/api/statistics";
@ -247,16 +247,16 @@ export default {
this.getData()
},
methods: {
handleDateChange(){
this.getData();
},
initOrderCountDate(){
let start = new Date();
start.setFullYear(2018, 10, 1);
const end = new Date();
end.setTime(start.getTime() + 1000 * 60 * 60 * 24 * 7);
this.orderCountDate=[start,end];
},
handleDateChange() {
this.getData();
},
initOrderCountDate() {
let start = new Date();
start.setFullYear(2018, 10, 1);
const end = new Date();
end.setTime(start.getTime() + 1000 * 60 * 60 * 24 * 7);
this.orderCountDate = [start, end];
},
getData(){
setTimeout(() => {
this.chartData = {

@ -80,7 +80,7 @@
</el-dialog>
<!-- 底部 -->
<div class="el-login-footer">
<span>Copyright © 2017-2023 ichengle.top 技术支持关注编写美好前微信公众号回复支持</span>
<span>Copyright © 2017-2023 ichengle.top 技术支持关注序员诚哥微信公众号回复支持</span>
</div>
</div>
</template>

@ -1,114 +1,115 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<el-form-item label="申请状态" prop="status">
<DictRadio v-model="queryParams.status" :radioData="dict.type.oms_aftersale_status" size="small" :show-all="'all'" @change="handleQuery"></DictRadio>
</el-form-item>
<el-form-item label="售后类型" prop="type">
<DictRadio v-model="queryParams.type" :radioData="dict.type.oms_aftersale_type" size="small" :show-all="'all'" @change="handleQuery"></DictRadio>
</el-form-item>
<el-form-item label="订单号" prop="orderSn">
<el-input v-model.trim="queryParams.orderSn" placeholder="请输入订单号" clearable size="small"
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="售后单号" prop="id">
<el-input v-model.trim="queryParams.id" placeholder="请输入售后单号" clearable size="small"
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="会员手机号" prop="userPhone">
<el-input v-model.trim="queryParams.userPhone" placeholder="请输入会员手机号" clearable size="small"
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="创建时间" prop="Time">
<el-date-picker v-model="queryParams.Time" type="datetimerange" :picker-options="pickerOptions"
range-separator="至" size="small" format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']"
align="right"
@change="handleChange">
</el-date-picker>
</el-form-item>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="omsAftersaleList" @selection-change="handleSelectionChange" border>
<!-- <el-table-column type="selection" width="55" align="center" />-->
<el-table-column label="售后单号" prop="id" width="160"/>
<el-table-column label="申请状态" prop="aftersaleStatus" width="80">
<template v-slot="scope">
<el-tag effect="plain" size="medium" :type="getAftersaleStatusTag(scope.row)">{{
getAftersaleStatusText(scope.row)
}}
</el-tag>
</template>
</el-table-column>
<el-table-column label="用户信息" prop="nickName" width="120">
<template v-slot="scope">
<div>{{ scope.row.nickName }}</div>
<div>{{ scope.row.phone }}</div>
<div>{{ scope.row.mark }}</div>
</template>
</el-table-column>
<el-table-column label="退款金额" prop="applyReturnAmount" width="120"/>
<el-table-column label="售后类型" prop="applyRefundType" width="80">
<template v-slot="scope">
<el-tag effect="plain" size="medium" :type="getAftersaleTypeTag(scope.row)">{{
getAftersaleTypeText(scope.row)
}}
</el-tag>
</template>
</el-table-column>
<el-table-column label="申请时间" prop="applyRefundTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.applyRefundTime, '') }}</span>
</template>
</el-table-column>
<el-table-column label="处理时间" prop="handleTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.handleTime, '') }}</span>
</template>
</el-table-column>
<el-table-column label="原因" prop="reason" width="220"/>
<el-table-column label="处理备注" prop="note" width="150"/>
<el-table-column label="处理人员" prop="handleMan" width="100"/>
<el-table-column label="订单编号/操作" class-name="small-padding fixed-width" width="220" fixed="right">
<template slot-scope="scope">
<div>
{{ scope.row.orderSn }}
<el-link @click="copy(scope.row.orderSn)" :underline="false"><i
class="el-icon-document-copy el-icon--right"></i></el-link>
</div>
<el-button size="mini" type="text" @click="handleDetail(scope.row.orderId)"
v-hasPermi="['oms:aftersale:query']">详情
</el-button>
<el-button size="mini" type="text" @click="showLog(scope.row.orderId)"
v-hasPermi="['oms:aftersale:log']">日志
</el-button>
<el-button size="mini" type="text" @click="approve(scope.row, 1)"
v-if="scope.row.aftersaleStatus == 0" v-hasPermi="['manager:oms:aftersale:update']">同意
</el-button>
<el-button size="mini" type="text" @click="handleOpen(scope.row, 2)" class="red"
v-if="scope.row.aftersaleStatus == 0" v-hasPermi="['manager:oms:aftersale:update']">拒绝
</el-button>
<el-button size="mini" type="text" @click="confirmReceive(scope.row, 3)"
v-if="scope.row.aftersaleStatus == 1 && scope.row.applyRefundType == 2"
v-hasPermi="['manager:oms:aftersale:update']">确认收货
</el-button>
</template>
</el-table-column>
</el-table>
<InBody v-show="total>0">
<pagination
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</InBody>
<div v-show="show">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<el-form-item label="申请状态" prop="status">
<DictRadio v-model="queryParams.status" :radioData="dict.type.oms_aftersale_status" size="small" :show-all="'all'" @change="handleQuery"></DictRadio>
</el-form-item>
<el-form-item label="售后类型" prop="type">
<DictRadio v-model="queryParams.type" :radioData="dict.type.oms_aftersale_type" size="small" :show-all="'all'" @change="handleQuery"></DictRadio>
</el-form-item>
<el-form-item label="订单号" prop="orderSn">
<el-input v-model.trim="queryParams.orderSn" placeholder="请输入订单号" clearable size="small"
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="售后单号" prop="id">
<el-input v-model.trim="queryParams.id" placeholder="请输入售后单号" clearable size="small"
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="会员手机号" prop="userPhone">
<el-input v-model.trim="queryParams.userPhone" placeholder="请输入会员手机号" clearable size="small"
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="创建时间" prop="Time">
<el-date-picker v-model="queryParams.Time" type="datetimerange" :picker-options="pickerOptions"
range-separator="至" size="small" format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']"
align="right"
@change="handleChange">
</el-date-picker>
</el-form-item>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="omsAftersaleList" @selection-change="handleSelectionChange" border>
<!-- <el-table-column type="selection" width="55" align="center" />-->
<el-table-column label="售后单号" prop="id" width="160"/>
<el-table-column label="申请状态" prop="aftersaleStatus" width="80">
<template v-slot="scope">
<el-tag effect="plain" size="medium" :type="getAftersaleStatusTag(scope.row)">{{
getAftersaleStatusText(scope.row)
}}
</el-tag>
</template>
</el-table-column>
<el-table-column label="用户信息" prop="nickName" width="120">
<template v-slot="scope">
<div>{{ scope.row.nickName }}</div>
<div>{{ scope.row.phone }}</div>
<div>{{ scope.row.mark }}</div>
</template>
</el-table-column>
<el-table-column label="退款金额" prop="applyReturnAmount" width="120"/>
<el-table-column label="售后类型" prop="applyRefundType" width="80">
<template v-slot="scope">
<el-tag effect="plain" size="medium" :type="getAftersaleTypeTag(scope.row)">{{
getAftersaleTypeText(scope.row)
}}
</el-tag>
</template>
</el-table-column>
<el-table-column label="申请时间" prop="applyRefundTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.applyRefundTime, '') }}</span>
</template>
</el-table-column>
<el-table-column label="处理时间" prop="handleTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.handleTime, '') }}</span>
</template>
</el-table-column>
<el-table-column label="原因" prop="reason" width="220"/>
<el-table-column label="处理备注" prop="note" width="150"/>
<el-table-column label="处理人员" prop="handleMan" width="100"/>
<el-table-column label="订单编号/操作" class-name="small-padding fixed-width" width="220" fixed="right">
<template slot-scope="scope">
<div>
{{ scope.row.orderSn }}
<el-link @click="copy(scope.row.orderSn)" :underline="false"><i
class="el-icon-document-copy el-icon--right"></i></el-link>
</div>
<el-button size="mini" type="text" @click="handleDetail(scope.row.orderId)"
v-hasPermi="['oms:aftersale:query']">详情
</el-button>
<el-button size="mini" type="text" @click="showLog(scope.row.orderId)"
v-hasPermi="['oms:aftersale:log']">日志
</el-button>
<el-button size="mini" type="text" @click="approve(scope.row, 1)"
v-if="scope.row.aftersaleStatus == 0" v-hasPermi="['manager:oms:aftersale:update']">同意
</el-button>
<el-button size="mini" type="text" @click="handleOpen(scope.row, 2)" class="red"
v-if="scope.row.aftersaleStatus == 0" v-hasPermi="['manager:oms:aftersale:update']">拒绝
</el-button>
<el-button size="mini" type="text" @click="confirmReceive(scope.row, 3)"
v-if="scope.row.aftersaleStatus == 1 && scope.row.applyRefundType == 2"
v-hasPermi="['manager:oms:aftersale:update']">确认收货
</el-button>
</template>
</el-table-column>
</el-table>
<InBody v-show="total>0">
<pagination
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</InBody>
</div>
<!-- <SeeAdsComponent ref="seeAdsComponentRef" v-if="!show" @confirmOk="confirmOk"/>-->
<!-- 拒绝对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
@ -151,12 +152,15 @@ import {
viewLog
} from "@/api/oms/aftersale";
import dateUtil from '@/utils/DateUtil';
import SeeAdsComponent from "@/components/SeeAdsComponent.vue";
export default {
name: "OmsAftersale",
components: {SeeAdsComponent},
dicts: ["oms_aftersale_type", "oms_aftersale_status"],
data() {
return {
show: true,
pickerOptions: {
shortcuts: dateUtil.getTimeShort2()
},
@ -222,6 +226,12 @@ export default {
this.getList();
},
methods: {
confirmOk(success) {
if (success) {
this.show = true
this.getList();
}
},
copy(data) {
let url = data;
let oInput = document.createElement('input');

@ -130,13 +130,6 @@
<el-tag :type="getOrderStatusTag(scope.row.status)" style="margin-right: 10px">
{{ getOrderStatusText(scope.row.status) }}
</el-tag>
<el-button
size="mini"
type="text"
@click="handleDelivery(scope.row)"
:disabled="scope.row.status !== 1 && scope.row.status !== 2 && scope.row.status !== 3"
>编辑
</el-button>
</div>
<div v-if="scope.row.deliverySn">{{ scope.row.deliverySn }}
<el-link @click="copy(scope.row.deliverySn)" :underline="false"><i
@ -145,9 +138,9 @@
<div v-if="scope.row.deliveryTime">{{ parseTime(scope.row.deliveryTime, '') }}</div>
</template>
</el-table-column>
<el-table-column label="订单编号/操作" class-name="small-padding fixed-width" width="220" fixed="right">
<template slot-scope="scope">
<div>
<el-table-column label="订单编号/操作" class-name="small-padding fixed-width" width="220" fixed="right" >
<template slot-scope="scope" >
<div style="float: right">
{{ scope.row.orderSn }}
<!-- <el-link-->
<!-- size="mini"-->
@ -157,27 +150,30 @@
<el-link @click="copy(scope.row.orderSn)" :underline="false"><i
class="el-icon-document-copy el-icon--right"></i></el-link>
</div>
<el-button
size="mini"
type="text"
@click="goDetail(scope.row)"
v-hasPermi="['oms:order:query']"
>详情
</el-button>
<el-button
size="mini"
type="text"
@click="showLog(scope.row.id)"
v-hasPermi="['oms:order:log']"
>日志
</el-button>
<el-button
size="mini"
type="text"
@click="handleDelivery(scope.row)"
:disabled="scope.row.status !== 1 && scope.row.status !== 2 && scope.row.status !== 3"
>发货
</el-button>
<div style="float: right">
<el-button
size="mini"
type="text"
@click="goDetail(scope.row)"
v-hasPermi="['oms:order:query']"
>详情
</el-button>
<el-button
size="mini"
type="text"
@click="showLog(scope.row.id)"
v-hasPermi="['oms:order:log']"
>日志
</el-button>
<el-button
size="mini"
type="text"
@click="handleDelivery(scope.row)"
:disabled="scope.row.status !== 1 && scope.row.status !== 2 && scope.row.status !== 3"
>发货
</el-button>
</div>
</template>
</el-table-column>
</el-table>

@ -1,122 +1,126 @@
<template>
<div class="app-container" v-if="show">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<el-form-item label="上架状态" prop="publishStatus">
<DictRadio v-model="queryParams.publishStatus" @change="handleQuery" size="small"
:radioData="dict.type.pms_publish_status" :showAll="'all'"/>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input
v-model="queryParams.nameLike"
placeholder="请输入商品名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="品牌" prop="brandName">
<el-input
v-model="queryParams.brandNameLike"
placeholder="请输入品牌名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="分类" prop="productCategoryName">
<el-input
v-model="queryParams.productCategoryNameLike"
placeholder="请输入分类名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="编码" prop="outProductId">
<el-input
v-model="queryParams.outProductId"
placeholder="请输入商品编码"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<div class="app-container">
<div v-show="show">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<el-form-item label="上架状态" prop="publishStatus">
<DictRadio v-model="queryParams.publishStatus" @change="handleQuery" size="small"
:radioData="dict.type.pms_publish_status" :showAll="'all'"/>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input
v-model="queryParams.nameLike"
placeholder="请输入商品名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="品牌" prop="brandName">
<el-input
v-model="queryParams.brandNameLike"
placeholder="请输入品牌名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="分类" prop="productCategoryName">
<el-input
v-model="queryParams.productCategoryNameLike"
placeholder="请输入分类名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="编码" prop="outProductId">
<el-input
v-model="queryParams.outProductId"
placeholder="请输入商品编码"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="pmsProductList" @selection-change="handleSelectionChange" border>
<el-table-column type="selection" width="55" align="center"/>
<el-table-column label="主图" prop="pic">
<template slot-scope="{ row }">
<el-image v-if="row.pic" :src="row.pic" :preview-src-list="[row.pic]" class="small-img"/>
</template>
</el-table-column>
<el-table-column label="名称/编码" min-width="200" prop="outProductId">
<template slot-scope="{ row }">
<div>名称{{ row.name }}</div>
<div v-if="row.outProductId">{{ row.outProductId }}</div>
</template>
</el-table-column>
<el-table-column label="品牌/分类" prop="brandName">
<template slot-scope="{ row }">
<div v-if="row.brandName">{{ row.brandName }}</div>
<div v-if="row.productCategoryName">{{ row.productCategoryName }}</div>
</template>
</el-table-column>
<el-table-column label="价格/排序" prop="price">
<template slot-scope="{ row }">
<div v-if="row.price">{{ row.price }}</div>
<div v-if="row.sort">{{ row.sort }}</div>
</template>
</el-table-column>
<el-table-column label="上架状态" prop="publishStatus">
<template slot-scope="{ row }">
<dict-tag :value="row.publishStatus" prop-name="pms_publish_status"/>
</template>
</el-table-column>
<el-table-column label="操作" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
>修改
</el-button>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
@click="handleAdd"
>新增</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="pmsProductList" @selection-change="handleSelectionChange" border>
<el-table-column type="selection" width="55" align="center"/>
<el-table-column label="主图" prop="pic">
<template slot-scope="{ row }">
<el-image v-if="row.pic" :src="row.pic" :preview-src-list="[row.pic]" class="small-img"/>
</template>
</el-table-column>
<el-table-column label="名称/编码" min-width="200" prop="outProductId">
<template slot-scope="{ row }">
<div>名称{{ row.name }}</div>
<div v-if="row.outProductId">{{ row.outProductId }}</div>
</template>
</el-table-column>
<el-table-column label="品牌/分类" prop="brandName">
<template slot-scope="{ row }">
<div v-if="row.brandName">{{ row.brandName }}</div>
<div v-if="row.productCategoryName">{{ row.productCategoryName }}</div>
</template>
</el-table-column>
<el-table-column label="价格/排序" prop="price">
<template slot-scope="{ row }">
<div v-if="row.price">{{ row.price }}</div>
<div v-if="row.sort">{{ row.sort }}</div>
</template>
</el-table-column>
<el-table-column label="上架状态" prop="publishStatus">
<template slot-scope="{ row }">
<dict-tag :value="row.publishStatus" prop-name="pms_publish_status"/>
</template>
</el-table-column>
<el-table-column label="操作" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
>修改
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<InBody v-show="total>0">
<pagination
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</InBody>
</div>
<!-- <SeeAdsComponent ref="seeAdsComponentRef" v-if="!show" @confirmOk="confirmOk"/>-->
<InBody v-show="total>0">
<pagination
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</InBody>
</div>
</template>
@ -124,13 +128,15 @@
import {delPmsProduct, listPmsProduct} from "@/api/pms/product";
import {isStarRepo} from "@/utils/is-star-plugin";
import {mapGetters} from "vuex";
import SeeAdsComponent from "@/components/SeeAdsComponent.vue";
export default {
name: "PmsProduct",
components: {SeeAdsComponent},
dicts: ['pms_publish_status'],
data() {
return {
show: false,
show: true,
//
loading: true,
//
@ -169,17 +175,22 @@ export default {
},
};
},
async created() {
const res = await isStarRepo('zccbbg', 'RuoYi-Mall', this.userId, 'https://mall.ichengle.top/pms/product', 'ruoyi-mall-商城', 'https://gitee.com/zccbbg/RuoYi-Mall')
this.show = res;
if (res) {
this.getList();
}
created() {
this.getList();
},
computed:{
...mapGetters(['userId']),
},
methods: {
async confirmOk(success) {
if (success) {
const res = await isStarRepo('zccbbg', 'RuoYi-Mall', this.userId, 'https://mall.ichengle.top/pms/product', 'ruoyi-mall-商城', 'https://gitee.com/zccbbg/RuoYi-Mall')
this.show = res;
if (res) {
this.getList();
}
}
},
/** 查询商品信息列表 */
getList() {
this.loading = true;

@ -61,7 +61,7 @@
</el-form>
<!-- 底部 -->
<div class="el-register-footer">
<span>Copyright © 2017-2023 ichengle.top 技术支持关注编写美好前微信公众号回复支持</span>
<span>Copyright © 2017-2023 ichengle.top 技术支持关注序员诚哥微信公众号回复支持</span>
</div>
</div>
</template>

@ -1,114 +1,115 @@
<template>
<div class="app-container" v-if="show">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<el-form-item label="创建时间">
<el-date-picker
size="small"
v-model="dateRange"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
:clearable="true"
:picker-options='pickerOptions'
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<!-- <el-form-item label="账号启用状态">-->
<!-- <el-select v-model="queryParams.status" placeholder="请选择" :clearable="true" size="small">-->
<!-- <el-option label="禁用" value="0">-->
<!-- </el-option>-->
<!-- <el-option label="启用" value="1">-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="昵称" prop="nickname">
<el-input
v-model.trim="queryParams.nickname"
placeholder="请输入昵称"
clearable
size="small"
/>
</el-form-item>
<el-form-item label="手机号码" prop="phone">
<el-input
v-model.trim="queryParams.phone"
placeholder="请输入手机号码"
clearable
size="small"
/>
</el-form-item>
<el-form-item label="备注" prop="mark">
<el-select v-model="queryParams.hasMark" clearable size="small">
<el-option value="1" label="有备注" />
<el-option value="0" label="无备注"/>
</el-select>
</el-form-item>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
<!-- <el-button :icon="showMoreCondition ? 'el-icon-arrow-up' : 'el-icon-arrow-down'" size="mini" @click="showMoreCondition = !showMoreCondition">{{showMoreCondition ? '收起条件' : '展开条件'}}</el-button>-->
</el-form-item>
</el-form>
<div class="app-container">
<div v-show="show">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<el-form-item label="创建时间">
<el-date-picker
size="small"
v-model="dateRange"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
:clearable="true"
:picker-options='pickerOptions'
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<!-- <el-form-item label="账号启用状态">-->
<!-- <el-select v-model="queryParams.status" placeholder="请选择" :clearable="true" size="small">-->
<!-- <el-option label="禁用" value="0">-->
<!-- </el-option>-->
<!-- <el-option label="启用" value="1">-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="昵称" prop="nickname">
<el-input
v-model.trim="queryParams.nickname"
placeholder="请输入昵称"
clearable
size="small"
/>
</el-form-item>
<el-form-item label="手机号码" prop="phone">
<el-input
v-model.trim="queryParams.phone"
placeholder="请输入手机号码"
clearable
size="small"
/>
</el-form-item>
<el-form-item label="备注" prop="mark">
<el-select v-model="queryParams.hasMark" clearable size="small">
<el-option value="1" label="有备注" />
<el-option value="0" label="无备注"/>
</el-select>
</el-form-item>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
<!-- <el-button :icon="showMoreCondition ? 'el-icon-arrow-up' : 'el-icon-arrow-down'" size="mini" @click="showMoreCondition = !showMoreCondition">{{showMoreCondition ? '收起条件' : '展开条件'}}</el-button>-->
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="umsMemberList" border>
<el-table-column label="昵称" prop="nickname" width="150"/>
<el-table-column label="手机号码" prop="phoneHidden" width="150"/>
<el-table-column label="佣金" width="120">
<template v-slot="scope">
<div>0.00</div>
</template>
</el-table-column>
<el-table-column label="积分" width="120">
<template v-slot="scope">
<div>0.00</div>
</template>
</el-table-column>
<el-table-column label="余额" width="120">
<template v-slot="scope">
<div>0.00</div>
</template>
</el-table-column>
<el-table-column label="注册时间" prop="createTime" width="180">
<template v-slot="scope">
<div>{{ parseTime(scope.row.createTime) }}</div>
</template>
</el-table-column>
<el-table-column label="上次登录" prop="createTime">
<template v-slot="scope">
<div>{{ parseTime(scope.row.createTime) }}</div>
</template>
</el-table-column>
<el-table-column label="备注">
<template v-slot="scope">
<span class="mr10">{{scope.row.mark}}</span>
<i class="el-icon-edit pointer" @click="showUpdateMark(scope.row)"></i>
</template>
</el-table-column>
<el-table-column label="操作" class-name="small-padding fixed-width" fix="right" width="200">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
@click="showStatistics(scope.row.id)"
v-hasPermi="['ums:member:statistics']"
>查看数据
</el-button>
<el-button
size="mini"
type="text"
@click="goOrder(scope.row.phoneEncrypted)"
>查看下单</el-button>
<el-button
size="mini"
type="text"
@click="goCart(scope.row.phoneEncrypted)"
>查看购物车</el-button>
</template>
</el-table-column>
</el-table>
<InBody v-show="total>0">
<el-table v-loading="loading" :data="umsMemberList" border>
<el-table-column label="昵称" prop="nickname" width="150"/>
<el-table-column label="手机号码" prop="phoneHidden" width="150"/>
<el-table-column label="佣金" width="120">
<template v-slot="scope">
<div>0.00</div>
</template>
</el-table-column>
<el-table-column label="积分" width="120">
<template v-slot="scope">
<div>0.00</div>
</template>
</el-table-column>
<el-table-column label="余额" width="120">
<template v-slot="scope">
<div>0.00</div>
</template>
</el-table-column>
<el-table-column label="注册时间" prop="createTime" width="180">
<template v-slot="scope">
<div>{{ parseTime(scope.row.createTime) }}</div>
</template>
</el-table-column>
<el-table-column label="上次登录" prop="createTime">
<template v-slot="scope">
<div>{{ parseTime(scope.row.createTime) }}</div>
</template>
</el-table-column>
<el-table-column label="备注">
<template v-slot="scope">
<span class="mr10">{{scope.row.mark}}</span>
<i class="el-icon-edit pointer" @click="showUpdateMark(scope.row)"></i>
</template>
</el-table-column>
<el-table-column label="操作" class-name="small-padding fixed-width" fix="right" width="200">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
@click="showStatistics(scope.row.id)"
v-hasPermi="['ums:member:statistics']"
>查看数据
</el-button>
<el-button
size="mini"
type="text"
@click="goOrder(scope.row.phoneEncrypted)"
>查看下单</el-button>
<el-button
size="mini"
type="text"
@click="goCart(scope.row.phoneEncrypted)"
>查看购物车</el-button>
</template>
</el-table-column>
</el-table>
<InBody v-show="total>0">
<pagination
:total="total"
:page.sync="queryParams.pageNum"
@ -116,6 +117,8 @@
@pagination="getList"
/>
</InBody>
</div>
<SeeAdsComponent ref="seeAdsComponentRef" v-if="!show" @confirmOk="confirmOk"/>
<!-- 统计 -->
<el-dialog :title="statisticsObj.title" :visible.sync="statisticsObj.open" width="500px" append-to-body>
<el-descriptions direction="vertical" :column="2" border>
@ -151,9 +154,11 @@ import {
import dateUtil from '@/utils/DateUtil';
import {isStarRepo} from "@/utils/is-star-plugin";
import {mapGetters} from "vuex";
import SeeAdsComponent from "@/components/SeeAdsComponent.vue";
export default {
name: "UmsMember",
components: {SeeAdsComponent},
data() {
return {
show: false,
@ -220,16 +225,23 @@ export default {
};
},
async created() {
const res = await isStarRepo('zccbbg', 'RuoYi-Mall', this.userId, 'https://mall.ichengle.top/member/member', 'ruoyi-mall-商城', 'https://gitee.com/zccbbg/RuoYi-Mall')
this.show = res;
if (res) {
this.getList();
}
this.$nextTick(()=>{
this.$refs.seeAdsComponentRef.show()
})
},
computed:{
...mapGetters(['userId']),
},
methods: {
async confirmOk(success) {
if (success) {
const res = await isStarRepo('zccbbg', 'RuoYi-Mall', this.userId, 'https://mall.ichengle.top/member/member', 'ruoyi-mall-商城', 'https://gitee.com/zccbbg/RuoYi-Mall')
this.show = res;
if (res) {
this.getList();
}
}
},
showUpdateMark(record){
this.remarkModal = {
visible: true,

Loading…
Cancel
Save