Initial commit: 小众厨房项目代码

Co-authored-by: Cursor <cursoragent@cursor.com>
这个提交包含在:
可乐加冰
2026-09-23 17:04:10 +08:00
当前提交 f7d3d7d1bd
共有 1761 个文件被更改,包括 453668 次插入 和 0 次删除

查看文件

@@ -0,0 +1,109 @@
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
<style>
#groupDetail {
background: #fff;
border-radius: 6px;
font-size: 14px;
padding: 0 20px 20px;
color: #444;
}
.del-image-btn {
position: absolute;
width: 14px;
height: 14px;
line-height: 14px;
text-align: center;
border-radius: 50%;
font-size: 12px;
font-weight: 600;
background: #7438D5;
color: #fff;
top: -7px;
right: -7px;
}
.goods-images {
width: 60px;
height: 60px;
border-radius: 4px;
position: relative;
border: 1px solid #7438D5;
margin-right: 10px;
margin-bottom: 10px;
}
.label-auto {
width: 100%;
height: 100%;
}
.add-img {
width: 60px;
height: 60px;
border: 1px dashed #E6E6E6;
border-radius: 4px;
justify-content: center;
}
.el-tree-node.is-expanded>.el-tree-node__children,.el-tree-node>.el-tree-node__children {
display: flex;
}
.el-checkbox__input.is-checked+.el-checkbox__label{
color: #7438D5;
}
[v-cloak] {
display: none
}
</style>
<script src="__CDN__/assets/addons/shopro/libs/vue.js"></script>
<script src="__CDN__/assets/addons/shopro/libs/element/element.js"></script>
<div id="groupDetail" v-cloak>
<el-form :model="detailForm" ref="detailForm" :rules="fromRules" label-width="100px" class="demo-detailForm">
<el-form-item label="组名:" prop="name">
<el-input v-model="detailForm.name" placeholder="请输入组名"></el-input>
</el-form-item>
<el-form-item label="等级图片:" prop="image">
<div class="display-flex">
<div class="goods-image-box display-flex" v-if="detailForm.image">
<div class="goods-images" style="margin-right: 0;">
<img class="label-auto" :src="Fast.api.cdnurl(detailForm.image)" style="border-radius: 4px;">
<div class="del-image-btn" @click="delImg('image',null)">
<img class="label-auto" src="/assets/addons/shopro/img/goods/close.png">
</div>
</div>
</div>
<div class="add-img display-flex" @click="addImg('image',null,false)" v-if="!detailForm.image">
<i class="el-icon-plus"></i>
</div>
</div>
</el-form-item>
<el-form-item label="权限:" prop="rules_arr">
<div><el-checkbox v-model="ischecked" @change="checkedAll">选择全部</el-checkbox><el-checkbox v-model="isexpand" @change="expandAll">展开全部</el-checkbox></div>
<el-tree
v-if="openOrNot" :data="nodeList" show-checkbox node-key="id" ref="tree" highlight-current :default-checked-keys="detailForm.rules_arr" :default-expanded-keys="expand_arr" @check="selcetedStatus"
:props="defaultProps">
</el-tree>
</el-form-item>
<el-form-item label="Vip分组:" prop="status">
<el-radio-group v-model="detailForm.is_vip">
<el-radio label="1">是</el-radio>
<el-radio label="2">否</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="状态:" prop="status">
<el-radio-group v-model="detailForm.status">
<el-radio label="normal">正常</el-radio>
<el-radio label="hidden">隐藏</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<div class="dialog-footer">
<div @click="submitFrom" class="dialog-cancel-btn display-flex-c cursor-pointer">取消</div>
<div @click="submitFrom('yes','detailForm')" class="dialog-define-btn display-flex-c cursor-pointer">确定
</div>
</div>
</div>

查看文件

@@ -0,0 +1,109 @@
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
<style>
#groupDetail {
background: #fff;
border-radius: 6px;
font-size: 14px;
padding: 0 20px 20px;
color: #444;
}
.del-image-btn {
position: absolute;
width: 14px;
height: 14px;
line-height: 14px;
text-align: center;
border-radius: 50%;
font-size: 12px;
font-weight: 600;
background: #7438D5;
color: #fff;
top: -7px;
right: -7px;
}
.goods-images {
width: 60px;
height: 60px;
border-radius: 4px;
position: relative;
border: 1px solid #7438D5;
margin-right: 10px;
margin-bottom: 10px;
}
.label-auto {
width: 100%;
height: 100%;
}
.add-img {
width: 60px;
height: 60px;
border: 1px dashed #E6E6E6;
border-radius: 4px;
justify-content: center;
}
.el-tree-node.is-expanded>.el-tree-node__children,.el-tree-node>.el-tree-node__children {
display: flex;
}
.el-checkbox__input.is-checked+.el-checkbox__label{
color: #7438D5;
}
[v-cloak] {
display: none
}
</style>
<script src="__CDN__/assets/addons/shopro/libs/vue.js"></script>
<script src="__CDN__/assets/addons/shopro/libs/element/element.js"></script>
<div id="groupDetail" v-cloak>
<el-form :model="detailForm" ref="detailForm" :rules="fromRules" label-width="100px" class="demo-detailForm">
<el-form-item label="组名:" prop="name">
<el-input v-model="detailForm.name" placeholder="请输入组名"></el-input>
</el-form-item>
<el-form-item label="等级图片:" prop="image">
<div class="display-flex">
<div class="goods-image-box display-flex" v-if="detailForm.image">
<div class="goods-images" style="margin-right: 0;">
<img class="label-auto" :src="Fast.api.cdnurl(detailForm.image)" style="border-radius: 4px;">
<div class="del-image-btn" @click="delImg('image',null)">
<img class="label-auto" src="/assets/addons/shopro/img/goods/close.png">
</div>
</div>
</div>
<div class="add-img display-flex" @click="addImg('image',null,false)" v-if="!detailForm.image">
<i class="el-icon-plus"></i>
</div>
</div>
</el-form-item>
<el-form-item label="权限:" prop="rules_arr">
<div><el-checkbox v-model="ischecked" @change="checkedAll">选择全部</el-checkbox><el-checkbox v-model="isexpand" @change="expandAll">展开全部</el-checkbox></div>
<el-tree
v-if="openOrNot" :data="nodeList" show-checkbox node-key="id" ref="tree" highlight-current :default-checked-keys="detailForm.rules_arr" :default-expanded-keys="expand_arr" @check="selcetedStatus"
:props="defaultProps">
</el-tree>
</el-form-item>
<el-form-item label="Vip分组:" prop="status">
<el-radio-group v-model="detailForm.is_vip">
<el-radio label="1">是</el-radio>
<el-radio label="2">否</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="状态:" prop="status">
<el-radio-group v-model="detailForm.status">
<el-radio label="normal">正常</el-radio>
<el-radio label="hidden">隐藏</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<div class="dialog-footer">
<div @click="submitFrom" class="dialog-cancel-btn display-flex-c cursor-pointer">取消</div>
<div @click="submitFrom('yes','detailForm')" class="dialog-define-btn display-flex-c cursor-pointer">确定
</div>
</div>
</div>

查看文件

@@ -0,0 +1,106 @@
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
<style>
#groupIndex {
background: #fff;
padding: 0 20px 30px;
}
.status-normal{
color: #6ACAA5;
}
.status-hidden{
color: #C4C4C4;
}
[v-cloak] {
display: none
}
</style>
<script src="__CDN__/assets/addons/shopro/libs/vue.js"></script>
<script src="__CDN__/assets/addons/shopro/libs/element/element.js"></script>
<script src="__CDN__/assets/addons/shopro/libs/moment.js"></script>
<div id="groupIndex" v-cloak>
<div class="custom-header display-flex">
<div class="custom-header-title">
用户分组
</div>
</div>
<div class="custom-button-container">
<div class="display-flex">
<div class="custom-refresh" @click="getData">
<i class="el-icon-refresh"></i>
</div>
<el-button type="primary" size="small" @click="operation('create',null)"><i class="el-icon-plus"></i> 新建分组</el-button>
</div>
</div>
<div class="custom-table">
<div class="custom-table-border">
<el-table ref="multipleTable" :data="data" tooltip-effect="dark" style="width: 100%" border
:row-class-name="tableRowClassName" :cell-class-name="tableCellClassName"
:header-cell-class-name="tableCellClassName" @row-dblclick="operation">
<el-table-column label="ID" prop="id" width="80">
</el-table-column>
<el-table-column label="组名" min-width="240">
<template slot-scope="scope">
<div class="ellipsis-item">
{{scope.row.name}}
</div>
</template>
</el-table-column>
<el-table-column label="vip分组" width="100">
<template slot-scope="scope">
<div class="display-flex">
<span v-if="scope.row.is_vip==1" class="display-flex">
<span class="shopro-status-dot shopro-status-normal-dot"></span>
<span class="shopro-status-normal">是</span>
</span>
<span v-else class="display-flex">
<span class="shopro-status-dot shopro-status-default-dot"></span>
<span class="shopro-status-default">否</span>
</span>
</div>
</template>
</el-table-column>
<el-table-column label="更新时间" width="180">
<template slot-scope="scope">
<div>
{{moment(scope.row.updatetime*1000).format("YYYY-MM-DD HH:mm:ss")}}
</div>
</template>
</el-table-column>
<el-table-column label="状态" width="80">
<template slot-scope="scope">
<div class="display-flex">
<span v-if="scope.row.status=='normal'" class="display-flex">
<span class="shopro-status-dot shopro-status-normal-dot"></span>
<span class="shopro-status-normal">{{scope.row.status_text}}</span>
</span>
<span v-else class="display-flex">
<span class="shopro-status-dot shopro-status-default-dot"></span>
<span class="shopro-status-default">{{scope.row.status_text}}</span>
</span>
</div>
</template>
</el-table-column>
<el-table-column label="操作" min-width="130">
<template slot-scope="scope">
<div>
{if condition = "$auth->check('shopro/user/group/edit')"}
<span class="table-edit-text" @click="operation('edit',scope.row.id)">编辑</span>
{/if}
{if condition = "$auth->check('shopro/user/group/del')"}
<span class="table-delete-text" @click="operation('del',scope.row.id)">删除</span>
{/if}
</div>
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination-container">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="limit"
layout="total, sizes, prev, pager, next, jumper" :total="totalPage">
</el-pagination>
</div>
</div>
</div>

查看文件

@@ -0,0 +1,52 @@
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Ismenu')}:</label>
<div class="col-xs-12 col-sm-8">
{:build_radios('row[ismenu]', ['1'=>__('Yes'), '0'=>__('No')])}
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Pid')}:</label>
<div class="col-xs-12 col-sm-8">
{:build_select('row[pid]', $ruledata, null, ['class'=>'form-control', 'required'=>''])}
</div>
</div>
<div class="form-group">
<label for="c-name" class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-name" class="form-control" name="row[name]" type="text" data-placeholder-node="{:__('Node tips')}" data-placeholder-menu="{:__('Menu tips')}">
</div>
</div>
<div class="form-group">
<label for="c-title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-title" class="form-control" name="row[title]" type="text" value="">
</div>
</div>
<div class="form-group">
<label for="remark" class="control-label col-xs-12 col-sm-2">{:__('Remark')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea class="form-control" id="remark" name="row[remark]"></textarea>
</div>
</div>
<div class="form-group">
<label for="c-weigh" class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-weigh" class="form-control" name="row[weigh]" type="number" value="0">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
{:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('Hidden')])}
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>

查看文件

@@ -0,0 +1,52 @@
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Ismenu')}:</label>
<div class="col-xs-12 col-sm-8">
{:build_radios('row[ismenu]', ['1'=>__('Yes'), '0'=>__('No')], $row['ismenu'])}
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Parent')}:</label>
<div class="col-xs-12 col-sm-8">
{:build_select('row[pid]', $ruledata, $row['pid'], ['class'=>'form-control', 'required'=>''])}
</div>
</div>
<div class="form-group">
<label for="c-name" class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-name" class="form-control" name="row[name]" type="text" placeholder="{:__('Controller/Action')}" value="{$row.name|htmlentities}">
</div>
</div>
<div class="form-group">
<label for="c-title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-title" class="form-control" name="row[title]" type="text" value="{$row.title|htmlentities}">
</div>
</div>
<div class="form-group">
<label for="remark" class="control-label col-xs-12 col-sm-2">{:__('Remark')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea class="form-control" id="remark" name="row[remark]">{$row.remark|htmlentities}</textarea>
</div>
</div>
<div class="form-group">
<label for="c-weigh" class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-weigh" class="form-control" name="row[weigh]" type="number" value="{$row.weigh}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
{:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('Hidden')], $row['status'])}
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>

查看文件

@@ -0,0 +1,28 @@
<div class="panel panel-default panel-intro">
{:build_heading()}
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
{:build_toolbar('refresh,add,edit,del')}
<div class="dropdown btn-group {:$auth->check('user/rule/multi')?'':'hide'}">
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
<ul class="dropdown-menu text-left" role="menu">
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
</ul>
</div>
</div>
<table id="table" class="table table-striped table-bordered table-hover"
data-operate-edit="{:$auth->check('user/rule/edit')}"
data-operate-del="{:$auth->check('user/rule/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>

查看文件

@@ -0,0 +1,529 @@
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
<style>
#userIndex {
color: #444;
background: #fff;
}
.custom-header {
padding: 0 20px;
margin-bottom: 10px;
}
.color-7536D0 {
color: #7536D0;
cursor: pointer;
}
.common-btn {
height: 32px;
cursor: pointer;
border-radius: 4px;
display: flex;
align-items: center;
justify-content: center;
font-size: 12px;
}
.el-input__inner,
.el-input__icon {
line-height: 32px;
height: 32px;
}
.btn-box {
display: flex;
align-items: center;
margin-bottom: 20px;
justify-content: space-between;
}
.refresh-btn {
width: 32px;
border: 1px solid #E6E6E6;
font-size: 14px;
margin-right: 20px;
}
.create-goods,
.add-params,
.add-level1-sku {
width: 98px;
background: #7536D0;
color: #fff;
}
.create-goods {
margin-right: 40px;
}
.create-goods span,
.add-params span,
.add-level1-sku span {
margin-left: 8px;
}
.platform-name span {
display: flex;
}
.goods-img {
width: 34px;
height: 34px;
margin-right: 10px;
border: 1px solid #e6e6e6;
}
.display-flex {
display: flex;
align-items: center;
}
.label-auto {
width: 100%;
height: 100%;
}
.one-ellipsis {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.sort-order {
margin-left: 6px;
color: #C0C4CC;
flex-direction: row-reverse;
}
.recycle-btn {
width: 88px;
color: #444;
border: #444 1px solid;
}
.recycle-btn i {
margin-right: 6px;
font-size: 14px;
}
.status-box {
width: 100%;
justify-content: space-between;
}
.status-btn {
width: 56px;
height: 26px;
border: 1px solid #7438D5;
color: #7438D5;
font-size: 12px;
}
.status-btn-2 {
color: #FF5959;
border-color: #FF5959;
}
.status-btn-3 {
color: #999;
border-color: #999;
}
.icon-top {
margin-left: -5px;
}
.edit-text,
.del-text,
.enable-text,
.disable-text {
cursor: pointer;
color: #444;
margin-right: 14px;
}
.edit-text {
color: #7438D5;
}
.enable-text {
color: #01CFA1;
}
.del-text {
color: #FF5959;
}
.el-popover {
left: 46px;
top: 10px;
padding: 16px;
}
.choose-container {
margin-bottom: 10px;
color: #666;
}
.custom-choose,
.custom-choose-type,
.custom-choose-sub {
height: 50px;
border-radius: 4px;
justify-content: space-between;
padding: 0 20px;
background: #fff;
}
.custom-choose-type,
.custom-choose-sub {
justify-content: flex-start;
}
.custom-choose-sub {
height: 70px;
padding: 0 10px 20px 20px;
}
.choose-status-tip {
margin-right: 12px;
}
.custom-choose-type-tip {
margin-right: 16px;
}
.choose-btn {
width: 80px;
border: 1px solid #E6E6E6;
margin-right: 10px;
height: 30px;
}
.choose-btn-active {
background-color: #7536D0;
border: none;
color: #fff;
}
.custom-table {
/* padding: 20px 20px 30px; */
padding: 0px 20px 30px;
background: #fff;
}
label {
margin-bottom: 0;
}
.page-container {
justify-content: flex-end;
margin-top: 30px;
}
.goods-title {
margin-bottom: 4px;
width: 154px;
line-height: 14px;
}
.activity-type {
justify-content: space-around;
}
.activity-type-btn {
width: 40px;
height: 20px;
padding-top: 2px;
border-radius: 4px;
color: #fff;
justify-content: center;
}
.groupon-btn {
background: #A17BDF;
}
.seckill-btn {
background: #FE9387;
}
.score-btn {
background: #FBB74A;
}
.el-table .bg-color {
background: #f9f9f9;
}
.cell-left .cell {
justify-content: flex-start !important;
}
.el-table_1_column_11.is-leaf,
.el-table_1_column_11 {
border-color: #EBEEF5 !important;
}
.avatar-img {
width: 26px;
height: 26px;
border: 1px solid #E5E5E5;
}
.el-popover {
padding-bottom: 6px;
color: #444;
}
.popover-container>div {
margin-bottom: 10px;
}
.popover-tip {
width: 56px;
color: #666;
text-align: justify;
text-align-last: justify;
}
.custom-table {
padding-top: 14px;
}
[v-cloak] {
display: none
}
</style>
<script src="__CDN__/assets/addons/shopro/libs/vue.js"></script>
<script src="__CDN__/assets/addons/shopro/libs/element/element.js"></script>
<script src="__CDN__/assets/addons/shopro/libs/Sortable.min.js"></script>
<script src="__CDN__/assets/addons/shopro/libs/vuedraggable.js"></script>
<script src="__CDN__/assets/addons/shopro/libs/moment.js"></script>
<div id="userIndex" v-cloak>
<div class="custom-header display-flex">
<div class="choose-status" style="font-size: 14px;">
用户列表
</div>
<div class="custom-search">
<el-input placeholder="请输入搜索内容" suffix-icon="el-icon-search" v-model="searchKey">
</el-input>
</div>
</div>
<div class="display-flex-b" style="padding: 0 20px;">
<div class="custom-refresh display-flex-c" @click="getData">
<i class="el-icon-refresh"></i>
</div>
</div>
<!-- <div class="choose-container">
<div class="custom-choose display-flex">
<div class="choose-status">
<span class="choose-status-tip">筛选条件</span>
<el-switch @change="isShoose" active-value="1" inactive-value="0" v-model="chooseType"
active-color="#7536D0" inactive-color="#E9EBEF">
</el-switch>
</div>
<div class="custom-search">
<el-input placeholder="请输入搜索关键词" suffix-icon="el-icon-search" v-model="searchKey">
</el-input>
</div>
</div>
<div v-if="chooseType==1">
<div class="custom-choose-type display-flex">
<div class="custom-choose-type-tip">
渠道来源
</div>
<div class="common-btn choose-btn" :class="platformType=='all'?'choose-btn-active':''"
@click="operation('platform','all')">
全部
</div>
<div class="common-btn choose-btn" :class="platformType=='wxMiniProgram'?'choose-btn-active':''"
@click="operation('platform','wxMiniProgram')">
小程序
</div>
<div class="common-btn choose-btn" :class="platformType=='wxOfficialAccount'?'choose-btn-active':''"
@click="operation('platform','wxOfficialAccount')">
公众号
</div>
<div class="common-btn choose-btn" :class="platformType=='H5'?'choose-btn-active':''"
@click="operation('platform','H5')">
H5
</div>
<div class="common-btn choose-btn" :class="platformType=='App'?'choose-btn-active':''"
@click="operation('platform','App')">
App
</div>
</div>
<div class="custom-choose-type display-flex">
<div class="custom-choose-type-tip">
角色分组
</div>
<div class="common-btn choose-btn" :class="roleType=='all'?'choose-btn-active':''"
@click="operation('role','all')">
全部
</div>
<div class="common-btn choose-btn" :class="roleType=='default'?'choose-btn-active':''"
@click="operation('role','default')">
默认分组
</div>
<div class="common-btn choose-btn" :class="roleType=='test'?'choose-btn-active':''"
@click="operation('role','test')">
测试会员
</div>
</div>
<div class="custom-choose-type display-flex">
<div class="custom-choose-type-tip">
加入时间
</div>
<div>
<el-date-picker value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss" v-model="joinTime"
type="datetime" placeholder="选择日期时间">
</el-date-picker>
</div>
</div>
<div class="custom-choose-sub display-flex">
<div class="common-btn choose-btn choose-btn-active" style="margin-right: 20px;"
@click="operation('filter')">
筛选
</div>
<div class="common-btn choose-btn" @click="operation('clear')">
清空
</div>
</div>
</div>
</div> -->
<div class="custom-table">
<div class="custom-table-border">
<el-table ref="multipleTable" :data="data" tooltip-effect="dark" style="width: 100%" border
:row-class-name="tableRowClassName" :cell-class-name="tableCellClassName"
:header-cell-class-name="tableCellClassName" @row-dblclick="operation">
<el-table-column label="ID" prop="id" min-width="60">
</el-table-column>
<el-table-column label="头像" min-width="60">
<template slot-scope="scope">
<div>
<img class="avatar-img" v-if="scope.row.avatar"
:src="Fast.api.cdnurl(scope.row.avatar)">
<span v-if="!scope.row.avatar">-</span>
</div>
</template>
</el-table-column>
<el-table-column label="昵称" min-width="120">
<template slot-scope="scope">
<div class="ellipsis-item">{{scope.row.nickname}}</div>
</template>
</el-table-column>
<el-table-column label="手机号" min-width="110">
<template slot-scope="scope">
<div><span v-if="scope.row.mobile">{{scope.row.mobile}}</span><span v-else>-</span></div>
</template>
</el-table-column>
<el-table-column label="用户角色" min-width="100">
<template slot-scope="scope">
<div class="display-flex-c">
<span v-if="scope.row.group.name">{{scope.row.group.name}}</span>
<span v-else>-</span>
</div>
</template>
</el-table-column>
<!-- <el-table-column label="邀请人" min-width="120">
<template slot-scope="scope">
<div class="ellipsis-item" slot="reference">{{scope.row.nickname}}
</template>
</el-table-column> -->
<el-table-column label="第三方账号" prop="id" min-width="140">
<template slot-scope="scope">
<div class="platform-name display-flex-c">
<template v-if="scope.row.third_platform.length>0">
<el-popover placement="bottom" trigger="hover"
:title="operation('platformname',i.platform)" width="360"
v-for="(i,index) in scope.row.third_platform">
<div class="popover-container">
<div class="display-flex">
<div class="display-flex"><div class="popover-tip">头像</div>:</div>
<img class="avatar-img"
:src="Fast.api.cdnurl(i.headimgurl)">
</div>
<div class="display-flex">
<div class="display-flex"><div class="popover-tip">性别</div>:</div>
<div class="color-7536D0">{{i.sex==2?'女':'男'}}</div>
</div>
<div class="display-flex">
<div class="display-flex"><div class="popover-tip">国家</div>:</div>
<div class="color-7536D0">{{i.country}}</div>
</div>
<div class="display-flex">
<div class="display-flex"><div class="popover-tip">省市</div>:</div>
<div class="color-7536D0">{{i.province}}-{{i.city}}</div>
</div>
<div class="display-flex">
<div class="display-flex"><div class="popover-tip">OpenId</div>:</div>
<div class="color-7536D0">{{i.openid}}</div>
</div>
<div class="display-flex">
<div class="display-flex"><div class="popover-tip">UnionId</div>:</div>
<div class="color-7536D0">{{i.unionid}}</div>
</div>
<div class="display-flex">
<div class="display-flex"><div class="popover-tip">创建时间</div>:</div>
<div class="color-7536D0">
{{moment(i.createtime*1000).format("YYYY-MM-DD HH:mm:ss")}}
</div>
</div>
</div>
<div class="ellipsis-item cursor-pointer" slot="reference">
<img style="width: 30px;height: 30px;" :style="{'margin-right':index!=scope.row.third_platform.length-1?'5px':''}"
:src="'/assets/addons/shopro/img/user/'+i.provider+'-'+i.platform+'.png'">
</div>
</el-popover>
</template>
<span v-else>-</span>
</div>
</template>
</el-table-column>
<el-table-column label="余额" prop="money" min-width="120">
</el-table-column>
<el-table-column label="积分" prop="score" min-width="120">
</el-table-column>
<el-table-column label="直播权限" prop="is_live" min-width="120">
<template slot-scope="scope">
<el-button v-if="scope.row.is_live == 1" type="primary" plain size="small" icon="el-icon-check">开启</el-button>
<el-button v-if="scope.row.is_live == 2" type="warning" plain size="small" icon="el-icon-close">关闭</el-button>
</template>
</el-table-column>
<el-table-column label="加入时间" min-width="160">
<template slot-scope="scope">
<div>
{{moment(scope.row.logintime*1000).format("YYYY-MM-DD HH:mm:ss")}}
</div>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" min-width="180">
<template slot-scope="scope">
<div>
{if condition = "$auth->check('shopro/user/user/profile')"}
<span class="edit-text" @click="operation('edit',scope.row.id)">查看详情</span>
{/if}
{if condition = "$auth->check('shopro/user/user/del')"}
<span class="del-text" @click="operation('del',scope.row.id)">删除</span>
{/if}
<!-- <span v-if="scope.row.status!='normal'" class="enable-text"
@click="operation('enable',scope.row.id)">启用</span>
<span v-if="scope.row.status!='hidden'" class="disable-text"
@click="operation('disable',scope.row.id)">禁用</span> -->
</div>
</template>
</el-table-column>
</el-table>
</div>
<div class="page-container display-flex">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="limit"
layout="total, sizes, prev, pager, next, jumper" :total="totalPage">
</el-pagination>
</div>
</div>
</div>

查看文件

@@ -0,0 +1,34 @@
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
<style>
#recharge {
color: #444;
padding: 0 20px 30px;
background-color: #fff;
}
[v-cloak] {
display: none
}
</style>
<script src="__CDN__/assets/addons/shopro/libs/vue.js"></script>
<script src="__CDN__/assets/addons/shopro/libs/element/element.js"></script>
<script src="__CDN__/assets/addons/shopro/libs/moment.js"></script>
<div id="recharge" v-cloak>
<el-form :model="rechargeForm" :rules="rules" ref="rechargeForm" label-width="100px" class="demo-rechargeForm">
<el-form-item v-if="rechargeType=='money'" label="充值金额:" prop="money">
<el-input type="number" v-model="rechargeForm.money" placeholder="负数则为扣除"></el-input>
</el-form-item>
<el-form-item v-if="rechargeType=='score'" label="充值积分:" prop="score">
<el-input type="number" v-model="rechargeForm.score" placeholder="负数则为扣除"></el-input>
</el-form-item>
<el-form-item label="备注:">
<el-input v-model="rechargeForm.remarks"></el-input>
</el-form-item>
</el-form>
<div class="dialog-footer display-flex">
<div @click="submitForm" class="dialog-cancel-btn display-flex-c cursor-pointer">取消</div>
<div @click="submitForm('yes','rechargeForm')" class="dialog-define-btn display-flex-c cursor-pointer">确定
</div>
</div>
</div>

查看文件

@@ -0,0 +1,736 @@
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
<style>
#userDetail {
color: #444;
padding: 0 20px 30px;
background-color: #fff;
}
.header-tip {
height: 50px;
line-height: 50px;
font-size: 14px;
}
.message-container {
border: 1px solid #E6E6E6;
padding: 20px 26px 0;
margin-bottom: 30px;
}
.message-title {
height: 62px;
line-height: 62px;
font-size: 16px;
}
.message-item {
margin-bottom: 14px;
}
.message-tip {
width: 56px;
/* margin-right: 20px; */
height: 34px;
line-height: 34px;
/* text-align: right; */
text-align: justify;
text-align-last: justify;
}
.message-tip-right {
width: 70px;
/* margin-right: 20px; */
text-align: justify;
text-align-last: justify;
}
.message-con {
flex: 1;
justify-content: space-between;
}
.avatar-img {
width: 50px;
height: 50px;
border-radius: 6px;
margin-right: 20px;
border: 1px solid #E5E5E5;
}
.change-avatar {
width: 88px;
height: 32px;
border: 1px solid #7438D5;
border-radius: 4px;
justify-content: center;
cursor: pointer;
color: #7438D5;
}
.message-money,
.message-score {
margin-right: 30px;
}
.page-container {
justify-content: flex-end;
}
.table-img {
width: 16px;
height: 16px;
}
.date-tip {
margin-left: 20px;
color: #999;
}
.margin-right-20 {
margin-right: 20px;
}
.el-popover {
left: 46px;
top: 10px;
padding: 16px;
}
.popover-container>div {
margin-bottom: 10px;
}
.popover-tip {
width: 56px;
color: #666;
text-align: justify;
text-align-last: justify;
}
.el-table th .cell,
.el-table td .cell {
display: block;
line-height: 44px;
}
.agent-dialog.el-dialog {
width: fit-content !important;
}
.agent-dialog.el-dialog .el-dialog__body {
padding: 10px 20px;
}
.el-dialog-tip {
color: #F8A92B;
font-size: 12px;
line-height: 20px;
margin-bottom: 14px;
}
.el-dialog-search {
margin-bottom: 14px;
}
.parent-agent-header {
height: 40px;
background: #F9F9F9;
border: 1px solid #E6E6E6;
}
.parent-agent-header>div {
text-align: center;
line-height: 40px;
}
.parent-agent-id {
width: 70px;
text-align: center;
}
.parent-agent-message {
width: 170px;
text-align: center;
padding: 0 10px;
}
.parent-agent-message .table-image {
margin: 0 10px 0 0;
}
.parent-agent-body .parent-agent-id,
.parent-agent-body .parent-agent-message {
border-right: 1px solid #F7F7F7;
}
.parent-agent-phone {
width: 110px;
text-align: center;
position: relative;
}
.parent-agent-item {
height: 44px;
border-bottom: 1px solid #E6E6E6;
cursor: pointer;
}
.parent-agent-item:last-of-type {
border: none;
}
.parent-agent-body {
border: 1px solid #E6E6E6;
border-top: none;
}
.parent-agent-search {
margin-bottom: 14px;
}
.agent-refresh {
position: absolute;
top: -164px;
color: #86848B;
font-weight: 500;
cursor: pointer;
}
.agent-refresh span {
margin-left: 8px;
}
.parent-agent-item-active {
background: rgba(116, 56, 213, 0.1);
}
.table-image {
width: 30px;
height: 30px;
border-radius: 50%;
margin: 0 10px;
}
.parent-user-avatar {
width: 32px;
height: 32px;
margin-right: 10px;
}
[v-cloak] {
display: none
}
</style>
<script src="__CDN__/assets/addons/shopro/libs/vue.js"></script>
<script src="__CDN__/assets/addons/shopro/libs/element/element.js"></script>
<script src="__CDN__/assets/addons/shopro/libs/moment.js"></script>
<div id="userDetail" v-cloak>
<div class="header-tip">
基本信息
</div>
<div class="message-container">
<el-row :gutter="60" type="flex" align="stretch">
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
<div class="">
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip">用户头像</div>:
</div>
<div class="message-date display-flex">
<img v-if="data.avatar" class="avatar-img" :src="Fast.api.cdnurl(data.avatar)">
<div class="display-flex change-avatar" @click="operation('avatar')">更换头像</div>
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip">角色分组</div>:
</div>
<div class="message-con display-flex">
<el-select v-model="data.group_id" placeholder="" size="medium">
<el-option v-for="group in groupList" :key="group" :label="group.name"
:value="group.id">
</el-option>
</el-select>
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip">用户名</div>:
</div>
<div class="message-con display-flex">
<el-input v-model="data.username" placeholder="请输入用户名" size="medium"></el-input>
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip">用户昵称</div>:
</div>
<div class="message-con display-flex">
<el-input v-model="data.nickname" placeholder="请输入用户昵称" size="medium"></el-input>
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip">用户等级</div>:
</div>
<div class="message-con display-flex">
<el-input type="number" v-model="data.level" size="medium"></el-input>
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip">生日</div>:
</div>
<div class="message-con display-flex">
<el-date-picker v-model="data.birthday" type="date" placeholder="选择日期"
value-format="yyyy-MM-dd" format="yyyy-MM-dd">
</el-date-picker>
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip">格言</div>:
</div>
<div class="message-con display-flex">
<el-input v-model="data.bio" size="medium"></el-input>
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip">手机号</div>:
</div>
<div class="message-con display-flex">
<el-input v-model="data.mobile" placeholder="未绑定手机号" size="medium"></el-input>
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip">邮箱</div>:
</div>
<div class="message-con display-flex">
<el-input v-model="data.email" placeholder="请输入邮箱" size="medium"></el-input>
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip">密码</div>:
</div>
<div class="message-con display-flex">
<el-input v-model="upPassword" placeholder="不修改密码请留空" size="medium"></el-input>
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip">直播权限</div>:
</div>
<div class="message-con display-flex">
<el-radio-group v-model="data.is_live">
<el-radio label="1">开启</el-radio>
<el-radio label="2">关闭</el-radio>
</el-radio-group>
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip">状态</div>:
</div>
<div class="message-con display-flex">
<el-radio-group v-model="data.status">
<el-radio label="normal">正常</el-radio>
<el-radio label="hidden">禁用</el-radio>
</el-radio-group>
</div>
</div>
<!-- <div class="message-item display-flex">
<div class="message-tip">邀请人:</div>
<div class="message-con display-flex">
{{data.password}}
</div>
</div> -->
</div>
</el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
<div style="display: flex;flex-direction: column;justify-content: space-between;height: 100%;">
<div>
<div class="message-item display-flex" v-if="data.hasOwnProperty('parent_user')">
<div class="display-flex margin-right-20">
<div class="message-tip-right">推荐人</div>:
</div>
<div class="message-con display-flex">
<div v-if="data.parent_user_id"
class="message-money theme-color cursor-pointer display-flex"
@click="openAgentProfile(data.parent_user.id)">
<img class="avatar-img parent-user-avatar" v-if="data.parent_user.avatar"
:src="Fast.api.cdnurl(data.parent_user.avatar)">
<span class="ellipsis-item">{{data.parent_user.nickname}}</span>
</div>
<template v-if="data.parent_user_id==null">
暂无推荐人
</template>
<template v-if="data.parent_user_id==0">
平台直推
</template>
<!-- <div v-if="!data.parent_user">暂无推荐人</div> -->
<div class="theme-color cursor-pointer" style="flex-shrink: 0;" @click="openDialog">
更换
</div>
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip-right">用户ID</div>:
</div>
<div class="message-con display-flex">
<div class="message-money">
{{data.id}}
</div>
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip-right">第三方账号</div>:
</div>
<div class="message-date display-flex">
<el-popover placement="bottom" trigger="hover"
:title="operation('platformname',i.platform)" width="360"
v-for="(i,index) in data.third_platform">
<div class="popover-container">
<div v-if="i.headimgurl" class="display-flex">
<div class="display-flex">
<div class="popover-tip">头像</div>:
</div>
<img class="avatar-img" :src="Fast.api.cdnurl(i.headimgurl)">
</div>
<div class="display-flex">
<div class="display-flex">
<div class="popover-tip">性别</div>:
</div>
<div class="color-7536D0">{{i.sex==2?'女':'男'}}</div>
</div>
<div class="display-flex">
<div class="display-flex">
<div class="popover-tip">国家</div>:
</div>
<div class="color-7536D0">{{i.country}}</div>
</div>
<div class="display-flex">
<div class="display-flex">
<div class="popover-tip">省市</div>:
</div>
<div class="color-7536D0">{{i.province}}-{{i.city}}</div>
</div>
<div class="display-flex">
<div class="display-flex">
<div class="popover-tip">OpenId</div>:
</div>
<div class="color-7536D0">{{i.openid}}</div>
</div>
<div class="display-flex">
<div class="display-flex">
<div class="popover-tip">UnionId</div>:
</div>
<div class="color-7536D0">{{i.unionid}}</div>
</div>
<div class="display-flex">
<div class="display-flex">
<div class="popover-tip">创建时间</div>:
</div>
<div class="color-7536D0">
{{moment(i.createtime*1000).format("YYYY-MM-DD HH:mm:ss")}}
</div>
</div>
</div>
<div class="ellipsis-item cursor-pointer" slot="reference">
<img style="width: 30px;height: 30px;"
:style="{'margin-right':index!=data.third_platform.length-1?'5px':''}"
:src="'/assets/addons/shopro/img/user/'+i.provider+'-'+i.platform+'.png'">
</div>
</el-popover>
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip-right">用户性别</div>:
</div>
<div class="message-con display-flex">
<el-radio-group v-model="data.gender">
<el-radio :label="0">未知</el-radio>
<el-radio :label="1">男</el-radio>
<el-radio :label="2">女</el-radio>
</el-radio-group>
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip-right">账户余额</div>:
</div>
<div class="message-con display-flex">
<div class="message-money">
{{data.money}}
</div>
<div class="theme-color cursor-pointer" @click="operation('money')">
充值
</div>
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip-right">账户积分</div>:
</div>
<div class="message-con display-flex">
<div class="message-score">
{{data.score}}
</div>
<div class="theme-color cursor-pointer" @click="operation('score')">
充值
</div>
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip-right">加入IP</div>:
</div>
<div class="message-con display-flex">
{{data.joinip}}
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip-right">登录时间</div>:
</div>
<div class="display-flex">
{{moment(data.logintime*1000).format("YYYY-MM-DD HH:mm:ss")}}
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip-right">连续登录</div>:
</div>
<div class="display-flex">
{{data.successions}}
<span class="date-tip">天</span>
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip-right">连续登录</div>:
</div>
<div class="display-flex">
{{data.maxsuccessions}}
<span class="date-tip">最多天数</span>
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip-right">登录失败</div>:
</div>
<div class="display-flex">
{{data.loginfailure}}
<span class="date-tip">次</span>
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip-right">更新时间</div>:
</div>
<div class="display-flex">
{{moment(data.updatetime*1000).format("YYYY-MM-DD HH:mm:ss")}}
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip-right">上次登录</div>:
</div>
<div class="display-flex">
{{moment(data.prevtime*1000).format("YYYY-MM-DD HH:mm:ss")}}
</div>
</div>
<div class="message-item display-flex">
<div class="display-flex margin-right-20">
<div class="message-tip-right">加入时间</div>:
</div>
<div class="display-flex">
{{moment(data.jointime*1000).format("YYYY-MM-DD HH:mm:ss")}}
</div>
</div>
</div>
<div class="message-item display-flex">
<div class="message-con display-flex" style="justify-content: flex-end;">
<div class="dialog-cancel-btn" style="color: #999;" @click="operation('reset')">重置
</div>
<div class="dialog-define-btn" @click="operation('save')">保存</div>
</div>
</div>
</div>
</el-col>
</el-row>
</div>
<div v-if="logList && activeStatus">
<div class="display-flex">
<div class="custom-refresh display-flex-c" @click="getListData(activeStatus)">
<i class="el-icon-refresh"></i>
</div>
<div class="flex-1">
<el-radio-group v-model="activeStatus" fill="#7536D0" @change="radioChange">
{if condition = "$auth->check('shopro/user/user/money_log')"}
<el-radio-button label="money_log">余额明细</el-radio-button>
{/if}
{if condition = "$auth->check('shopro/user/user/score_log')"}
<el-radio-button label="score_log">积分明细</el-radio-button>
{/if}
{if condition = "$auth->check('shopro/user/user/order_log')"}
<el-radio-button label="order_log">订单记录</el-radio-button>
{/if}
<!-- {if condition = "$auth->check('shopro/user/user/login_log')"}
<el-radio-button label="login_log">登录记录</el-radio-button>
{/if} -->
{if condition = "$auth->check('shopro/user/user/share_log')"}
<el-radio-button label="share_log">分享记录</el-radio-button>
{/if}
{if condition = "$auth->check('shopro/user/user/goods_favorite')"}
<el-radio-button label="goods_favorite">收藏商品</el-radio-button>
{/if}
{if condition = "$auth->check('shopro/user/user/goods_view')"}
<el-radio-button label="goods_view">浏览足迹</el-radio-button>
{/if}
{if condition = "$auth->check('shopro/user/user/coupon_log')"}
<el-radio-button label="coupon_log">优惠券</el-radio-button>
{/if}
</el-radio-group>
</div>
</div>
<div class="custom-table-body">
<el-table ref="multipleTable" :data="logList" tooltip-effect="dark" style="width: 100%" border
:row-class-name="tableRowClassName">
<template v-for="(item, index) in columns[activeStatus]">
<el-table-column :key="index" :fixed="item.fixed" :prop="item.field" :label="item.title"
:align="item.align ? item.align : 'center'" :min-width="item.width">
<template slot-scope="scope">
<div v-if="item.type=='order'" @click="operation('order',scope.row.id)"
class="theme-color cursor-pointer">{{scope.row[item.field]}}</div>
<div v-if="item.type=='text'">
<span v-if="scope.row[item.field] || scope.row[item.field]==0">
{{scope.row[item.field]}}
</span>
</div>
<div class="display-flex-c" style="width: 100%;" v-if="item.type=='htmls'"
v-html="item.formatter(scope.row, item)"></div>
<div class="display-flex-c" style="width: 100%;height: 44px;"
v-if="item.type=='time' || item.type=='image'" v-html="item.formatter(scope.row, item)">
</div>
<!-- 分享用户 -->
<div class="display-flex-c theme-color cursor-pointer" style="width: 100%;"
v-if="item.type=='shareUser'" v-html="item.formatter(scope.row, item)"
@click="operation('shareUser',scope.row.user.id)"></div>
<!-- 商品信息 -->
<div class="display-flex-c theme-color cursor-pointer" style="width: 100%;"
v-if="item.type=='shareMessage' && scope.row.type=='goods'"
v-html="item.formatter(scope.row, item)"
@click="operation(scope.row.type,scope.row[scope.row.type].id)"></div>
<!-- 收藏商品,浏览商品 -->
<div class="display-flex-c theme-color cursor-pointer" style="width: 100%;"
v-if="item.type=='goods'" v-html="item.formatter(scope.row, item)"
@click="operation('goods',scope.row.goods.id)"></div>
<!-- 拼团 -->
<div class="display-flex-c theme-color cursor-pointer" style="width: 100%;"
v-if="item.type=='shareMessage' && scope.row.type=='groupon'"
v-html="item.formatter(scope.row, item)"
@click="operation(scope.row.type,scope.row.id)"></div>
<!-- 优惠券 -->
<div class="display-flex-c" style="width: 100%;"
v-if="item.type=='couponStatus'&& item.formatter(scope.row, item)==0">未使用</div>
<div class="display-flex-c theme-color cursor-pointer" style="width: 100%;"
v-if="item.type=='couponStatus'&& item.formatter(scope.row, item)==1"
@click="operation('order',scope.row.use_order_id)">已使用{{scope.row.user_order_id}}</div>
<div v-if="item.type=='price'">{{scope.row[item.field]}}元</div>
</template>
</el-table-column>
</template>
</el-table>
</div>
<div class="page-container display-flex">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="limit"
layout="total, sizes, prev, pager, next, jumper" :total="totalPage">
</el-pagination>
</div>
</div>
<el-dialog title="修改推荐人" :visible.sync="agentDialogVisible" :before-close="closeDialog" custom-class="agent-dialog">
<div>
<div class="el-dialog-tip">
注意:更换上级分销商之后,该用户之后的所有团队和业绩将移至新的分销商名下。
</div>
<div class="el-dialog-search">
<el-input placeholder="请输入内容" v-model="parentFilterForm.form_1_value" class="input-with-select"
size="medium" @input="parentDebounceFilter">
<el-select v-model="parentFilterForm.form_1_key" slot="prepend" placeholder="请选择">
<el-option label="会员ID" value="user_id"></el-option>
<el-option label="会员昵称" value="nickname"></el-option>
<el-option label="手机号" value="mobile"></el-option>
</el-select>
<i slot="suffix" class="el-input__icon el-icon-search"></i>
</el-input>
</div>
<div>
<div class="parent-agent-header display-flex">
<div class="parent-agent-id">ID</div>
<div class="parent-agent-message">分销信息</div>
<div class="parent-agent-message">分销等级</div>
<div class="parent-agent-phone">手机号</div>
</div>
<div class="parent-agent-body">
<div class="parent-agent-item display-flex"
:class="parent.user_id==selectParentAgentId?'parent-agent-item-active':''"
v-for="parent in dialogList" v-if="dialogList.length>0" @click="initAgentData(parent.user_id)">
<div class="parent-agent-id">{{parent.user_id}}</div>
<div class="parent-agent-message">
<div v-if="parent.user" class="display-flex">
<div class="table-image" v-if="parent.user.avatar">
<el-image :src="Fast.api.cdnurl(parent.user.avatar)" fit="contain">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline"></i>
</div>
</el-image>
</div>
<div class="ellipsis-item">{{parent.user.nickname?parent.user.nickname:'-'}}</div>
</div>
<div v-else style="text-align: left;">-</div>
</div>
<div class="parent-agent-message">
<span v-if="parent.agent_level && parent.agent_level.name">
{{parent.agent_level.name}}
</span>
(等级{{parent.level}})
</div>
<div class="parent-agent-phone">
<span v-if="parent.user">{{parent.user.mobile?parent.user.mobile:'-'}}</span>
<span v-else>-</span>
</div>
</div>
<div class="parent-agent-item display-flex" style="justify-content: center;"
v-if="dialogList.length==0">无数据</div>
</div>
</div>
<div class="shopro-pagination-container">
<el-pagination pager-count="5" @current-change="phandleCurrentChange" :current-page="pcurrentPage"
:page-size="plimit" layout="total, prev, pager, next, jumper" :total="ptotalPage">
</el-pagination>
</div>
</div>
<span slot="footer" style="display: flex;align-items: center;justify-content: space-between;">
<el-checkbox v-model="noRecommendationChecked" @change="initAgentData(noRecommendationChecked)">设为无推荐人
</el-checkbox>
<div>
<el-button style="margin-right: 10px;" @click="closeDialog" size="mini" type="text">取 消</el-button>
<el-button type="primary" size="small" @click="closeDialog(true)">确 定</el-button>
</div>
</span>
</el-dialog>
</div>

查看文件

@@ -0,0 +1,34 @@
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
<style>
#recharge {
color: #444;
padding: 0 20px 30px;
background-color: #fff;
}
[v-cloak] {
display: none
}
</style>
<script src="__CDN__/assets/addons/shopro/libs/vue.js"></script>
<script src="__CDN__/assets/addons/shopro/libs/element/element.js"></script>
<script src="__CDN__/assets/addons/shopro/libs/moment.js"></script>
<div id="recharge" v-cloak>
<el-form :model="rechargeForm" :rules="rules" ref="rechargeForm" label-width="100px" class="demo-rechargeForm">
<el-form-item v-if="rechargeType=='money'" label="充值金额:" prop="money">
<el-input type="number" v-model="rechargeForm.money" placeholder="负数则为扣除"></el-input>
</el-form-item>
<el-form-item v-if="rechargeType=='score'" label="充值积分:" prop="score">
<el-input type="number" v-model="rechargeForm.score" placeholder="负数则为扣除"></el-input>
</el-form-item>
<el-form-item label="备注:">
<el-input v-model="rechargeForm.remarks"></el-input>
</el-form-item>
</el-form>
<div class="dialog-footer display-flex">
<div @click="submitForm" class="dialog-cancel-btn display-flex-c cursor-pointer">取消</div>
<div @click="submitForm('yes','rechargeForm')" class="dialog-define-btn display-flex-c cursor-pointer">确定
</div>
</div>
</div>