作者 何书鹏

经销商管理

正在显示 26 个修改的文件 包含 1699 行增加196 行删除
<?php
namespace app\admin\controller;
namespace app\admin\controller\dealer;
use app\common\controller\Backend;
use Exception;
use fast\Random;
use think\Db;
use think\Exception;
use think\exception\PDOException;
use think\exception\ValidateException;
use think\Validate;
... ... @@ -22,14 +22,15 @@ class Dealer extends Backend
/**
* Dealer模型对象
* @var \app\admin\model\Dealer
* @var \app\admin\model\dealer\Dealer
*/
protected $model = null;
protected $noNeedRight = ['selectpage'];
public function _initialize()
{
parent::_initialize();
$this->model = new \app\admin\model\Dealer;
$this->model = new \app\admin\model\dealer\Dealer;
}
... ... @@ -225,4 +226,72 @@ class Dealer extends Backend
return $this->view->fetch();
}
/**
* 删除
*/
public function del($ids = "")
{
if (!$this->request->isPost()) {
$this->error(__("Invalid parameters"));
}
$ids = $ids ? $ids : $this->request->post("ids");
if ($ids) {
$pk = $this->model->getPk();
$adminIds = $this->getDataLimitAdminIds();
if (is_array($adminIds)) {
$this->model->where($this->dataLimitField, 'in', $adminIds);
}
$list = $this->model->where($pk, 'in', $ids)->select();
$count = 0;
Db::startTrans();
try {
foreach ($list as $k => $v) {
// 删除管理员账号
Admin::where('id',$v['admin_id'])->delete();
// 删除权限分组
AuthGroupAccess::where('uid',$v['admin_id'])->delete();
$count += $v->delete();
}
Db::commit();
} catch (PDOException $e) {
Db::rollback();
$this->error($e->getMessage());
} catch (Exception $e) {
Db::rollback();
$this->error($e->getMessage());
}
if ($count) {
$this->success();
} else {
$this->error(__('No rows were deleted'));
}
}
$this->error(__('Parameter %s can not be empty', 'ids'));
}
public function sku($id)
{
$skuList = \app\admin\model\shopro\goods\Sku::all(['pid' => 0, 'goods_id' => $id]);
if ($skuList) {
foreach ($skuList as &$s) {
$s->children = \app\admin\model\shopro\goods\Sku::all(['pid' => $s->id, 'goods_id' => $id]);
}
}
$skuPrice = \app\admin\model\shopro\goods\SkuPrice::all(['goods_id' => $id]);
$this->assignconfig('skuList', $skuList);
$this->assignconfig('skuPrice', $skuPrice);
return $this->view->fetch();
}
public function selectpage()
{
return parent::selectpage(); // TODO: Change the autogenerated stub
}
}
... ...
<?php
namespace app\admin\controller\dealer;
use app\common\controller\Backend;
use Exception;
use think\Db;
use think\exception\PDOException;
use think\exception\ValidateException;
/**
* 经销商库存
*
* @icon fa fa-circle-o
*/
class DealerStock extends Backend
{
/**
* DealerStock模型对象
* @var \app\admin\model\dealer\DealerStock
*/
protected $model = null;
public function _initialize()
{
parent::_initialize();
$this->model = new \app\admin\model\dealer\DealerStock;
}
public function import()
{
parent::import();
}
/**
* 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
* 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
* 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
*/
/**
* 查看
*/
public function index()
{
//当前是否为关联查询
$this->relationSearch = true;
//设置过滤方法
$this->request->filter(['strip_tags', 'trim']);
if ($this->request->isAjax()) {
//如果发送的来源是Selectpage,则转发到Selectpage
if ($this->request->request('keyField')) {
return $this->selectpage();
}
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
$list = $this->model
->with(['dealer'])
->where($where)
->where('sku_price_id',$this->request->param('sku_price_id'))
->order($sort, $order)
->paginate($limit);
foreach ($list as $row) {
$row->visible(['id','stock','sales']);
$row->visible(['dealer']);
$row->getRelation('dealer')->visible(['dealer_name']);
}
$result = array("total" => $list->total(), "rows" => $list->items());
return json($result);
}
return $this->view->fetch();
}
/**
* 添加
*/
public function add()
{
$sku_price_id = $this->request->request('sku_price_id');
if ($this->request->isPost()) {
$params = $this->request->post("row/a");
if ($params) {
$params = $this->preExcludeFields($params);
if ($this->dataLimit && $this->dataLimitFieldAutoFill) {
$params[$this->dataLimitField] = $this->auth->id;
}
$skuPrice = \app\admin\model\shopro\goods\SkuPrice::get($sku_price_id);
empty($skuPrice) && $this->error('商品规格不存在');
$dealer = $this->model
->where('dealer_id',$params['dealer_id'])
->field('id')
->find();
!empty($dealer) && $this->error('该经销商已分配库存');
$params['goods_id'] = $skuPrice['goods_id'];
$params['sku_price_id'] = $sku_price_id;
$result = false;
Db::startTrans();
try {
//是否采用模型验证
if ($this->modelValidate) {
$name = str_replace("\\model\\", "\\validate\\", get_class($this->model));
$validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.add' : $name) : $this->modelValidate;
$this->model->validateFailException(true)->validate($validate);
}
$result = $this->model->allowField(true)->save($params);
// 更新规格库存
$skuPrice->stock = $this->model->where('sku_price_id',$skuPrice['id'])->sum('stock');
$skuPrice->save();
Db::commit();
} catch (ValidateException $e) {
Db::rollback();
$this->error($e->getMessage());
} catch (PDOException $e) {
Db::rollback();
$this->error($e->getMessage());
} catch (Exception $e) {
Db::rollback();
$this->error($e->getMessage());
}
if ($result !== false) {
$this->success();
} else {
$this->error(__('No rows were inserted'));
}
}
$this->error(__('Parameter %s can not be empty', ''));
}
return $this->view->fetch();
}
/**
* 编辑
*/
public function edit($ids = null)
{
$row = $this->model->get($ids);
if (!$row) {
$this->error(__('No Results were found'));
}
$adminIds = $this->getDataLimitAdminIds();
if (is_array($adminIds)) {
if (!in_array($row[$this->dataLimitField], $adminIds)) {
$this->error(__('You have no permission'));
}
}
if ($this->request->isPost()) {
$params = $this->request->post("row/a");
if ($params) {
$params = $this->preExcludeFields($params);
$skuPrice = \app\admin\model\shopro\goods\SkuPrice::get($row['sku_price_id']);
empty($skuPrice) && $this->error('商品规格不存在');
$dealer = $this->model
->where('dealer_id',$params['dealer_id'])
->where('id','neq',$params['dealer_id'])
->field('id')
->find();
!empty($dealer) && $this->error('该经销商已分配库存');
$result = false;
Db::startTrans();
try {
//是否采用模型验证
if ($this->modelValidate) {
$name = str_replace("\\model\\", "\\validate\\", get_class($this->model));
$validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.edit' : $name) : $this->modelValidate;
$row->validateFailException(true)->validate($validate);
}
$result = $row->allowField(true)->save($params);
// 更新规格库存
$skuPrice->stock = $this->model->where('sku_price_id',$skuPrice['id'])->sum('stock');
$skuPrice->save();
Db::commit();
} catch (ValidateException $e) {
Db::rollback();
$this->error($e->getMessage());
} catch (PDOException $e) {
Db::rollback();
$this->error($e->getMessage());
} catch (Exception $e) {
Db::rollback();
$this->error($e->getMessage());
}
if ($result !== false) {
$this->success();
} else {
$this->error(__('No rows were updated'));
}
}
$this->error(__('Parameter %s can not be empty', ''));
}
$this->view->assign("row", $row);
return $this->view->fetch();
}
/**
* 删除
*/
public function del($ids = "")
{
if (!$this->request->isPost()) {
$this->error(__("Invalid parameters"));
}
$ids = $ids ? $ids : $this->request->post("ids");
if ($ids) {
$pk = $this->model->getPk();
$adminIds = $this->getDataLimitAdminIds();
if (is_array($adminIds)) {
$this->model->where($this->dataLimitField, 'in', $adminIds);
}
$list = $this->model->where($pk, 'in', $ids)->select();
$count = 0;
Db::startTrans();
try {
foreach ($list as $k => $v) {
$skuPrice = \app\admin\model\shopro\goods\SkuPrice::get($v['sku_price_id']);
// 更新规格库存
if($skuPrice){
$skuPrice->stock = $this->model->where('sku_price_id',$v['sku_price_id'])->sum('stock');
$skuPrice->save();
}
$count += $v->delete();
}
Db::commit();
} catch (PDOException $e) {
Db::rollback();
$this->error($e->getMessage());
} catch (Exception $e) {
Db::rollback();
$this->error($e->getMessage());
}
if ($count) {
$this->success();
} else {
$this->error(__('No rows were deleted'));
}
}
$this->error(__('Parameter %s can not be empty', 'ids'));
}
}
... ...
<?php
return [
'Dealer_id' => '经销商',
'Sku_price_id' => '规格 id',
'Goods_id' => '所属产品',
'Stock' => '库存',
'Sales' => '已售',
'Dealer.dealer_name' => '经销商名称'
];
... ...
<?php
namespace app\admin\model;
namespace app\admin\model\dealer;
use think\Model;
use traits\model\SoftDelete;
class Dealer extends Model
{
use SoftDelete;
// 表名
protected $name = 'dealer';
// 自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
protected $deleteTime = 'deletetime';
// 追加属性
protected $append = [
];
public function admin()
{
return $this->belongsTo('Admin', 'admin_id', 'id', [], 'LEFT')->setEagerlyType(0);
}
}
... ...
<?php
namespace app\admin\model\dealer;
use think\Model;
use traits\model\SoftDelete;
class Dealer extends Model
{
use SoftDelete;
// 表名
protected $name = 'dealer';
// 自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
protected $deleteTime = 'deletetime';
// 追加属性
protected $append = [
];
public function admin()
{
return $this->belongsTo('app\admin\model\Admin', 'admin_id', 'id', [], 'LEFT')->setEagerlyType(0);
}
}
... ...
<?php
namespace app\admin\model\dealer;
use think\Model;
use traits\model\SoftDelete;
class DealerStock extends Model
{
use SoftDelete;
// 表名
protected $name = 'dealer_stock';
// 自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
protected $deleteTime = 'deletetime';
// 追加属性
protected $append = [
];
public function dealer()
{
return $this->belongsTo('app\admin\model\dealer\Dealer', 'dealer_id', 'id', [], 'LEFT')->setEagerlyType(0);
}
}
... ...
<?php
namespace app\admin\validate;
namespace app\admin\validate\dealer;
use think\Validate;
... ...
<?php
namespace app\admin\validate\dealer;
use think\Validate;
class DealerStock extends Validate
{
/**
* 验证规则
*/
protected $rule = [
];
/**
* 提示消息
*/
protected $message = [
];
/**
* 验证场景
*/
protected $scene = [
'add' => [],
'edit' => [],
];
}
... ...
... ... @@ -7,12 +7,12 @@
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
<a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a>
<a href="javascript:;" class="btn btn-success btn-add {:$auth->check('dealer/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
<a href="javascript:;" class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('dealer/edit')?'':'hide'}" title="{:__('Edit')}" ><i class="fa fa-pencil"></i> {:__('Edit')}</a>
<a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('dealer/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
<!--<a href="javascript:;" class="btn btn-danger btn-import {:$auth->check('dealer/import')?'':'hide'}" title="{:__('Import')}" id="btn-import-file" data-url="ajax/upload" data-mimetype="csv,xls,xlsx" data-multiple="false"><i class="fa fa-upload"></i> {:__('Import')}</a>
<a href="javascript:;" class="btn btn-success btn-add {:$auth->check('dealer/dealer/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
<a href="javascript:;" class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('dealer/dealer/edit')?'':'hide'}" title="{:__('Edit')}" ><i class="fa fa-pencil"></i> {:__('Edit')}</a>
<a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('dealer/dealer/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
<!--<a href="javascript:;" class="btn btn-danger btn-import {:$auth->check('dealer/dealer/import')?'':'hide'}" title="{:__('Import')}" id="btn-import-file" data-url="ajax/upload" data-mimetype="csv,xls,xlsx" data-multiple="false"><i class="fa fa-upload"></i> {:__('Import')}</a>
<div class="dropdown btn-group {:$auth->check('dealer/multi')?'':'hide'}">
<div class="dropdown btn-group {:$auth->check('dealer/dealer/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>
... ... @@ -20,11 +20,11 @@
</ul>
</div>
<a class="btn btn-success btn-recyclebin btn-dialog {:$auth->check('dealer/recyclebin')?'':'hide'}" href="dealer/recyclebin" title="{:__('Recycle bin')}"><i class="fa fa-recycle"></i> {:__('Recycle bin')}</a>-->
<a class="btn btn-success btn-recyclebin btn-dialog {:$auth->check('dealer/dealer/recyclebin')?'':'hide'}" href="dealer/dealer/recyclebin" title="{:__('Recycle bin')}"><i class="fa fa-recycle"></i> {:__('Recycle bin')}</a>-->
</div>
<table id="table" class="table table-striped table-bordered table-hover table-nowrap"
data-operate-edit="{:$auth->check('dealer/edit')}"
data-operate-del="{:$auth->check('dealer/del')}"
data-operate-edit="{:$auth->check('dealer/dealer/edit')}"
data-operate-del="{:$auth->check('dealer/dealer/del')}"
width="100%">
</table>
</div>
... ...
... ... @@ -7,14 +7,14 @@
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
{:build_toolbar('refresh')}
<a class="btn btn-info btn-multi btn-disabled disabled {:$auth->check('dealer/restore')?'':'hide'}" href="javascript:;" data-url="dealer/restore" data-action="restore"><i class="fa fa-rotate-left"></i> {:__('Restore')}</a>
<a class="btn btn-danger btn-multi btn-disabled disabled {:$auth->check('dealer/destroy')?'':'hide'}" href="javascript:;" data-url="dealer/destroy" data-action="destroy"><i class="fa fa-times"></i> {:__('Destroy')}</a>
<a class="btn btn-success btn-restoreall {:$auth->check('dealer/restore')?'':'hide'}" href="javascript:;" data-url="dealer/restore" title="{:__('Restore all')}"><i class="fa fa-rotate-left"></i> {:__('Restore all')}</a>
<a class="btn btn-danger btn-destroyall {:$auth->check('dealer/destroy')?'':'hide'}" href="javascript:;" data-url="dealer/destroy" title="{:__('Destroy all')}"><i class="fa fa-times"></i> {:__('Destroy all')}</a>
<a class="btn btn-info btn-multi btn-disabled disabled {:$auth->check('dealer/dealer/restore')?'':'hide'}" href="javascript:;" data-url="dealer/dealer/restore" data-action="restore"><i class="fa fa-rotate-left"></i> {:__('Restore')}</a>
<a class="btn btn-danger btn-multi btn-disabled disabled {:$auth->check('dealer/dealer/destroy')?'':'hide'}" href="javascript:;" data-url="dealer/dealer/destroy" data-action="destroy"><i class="fa fa-times"></i> {:__('Destroy')}</a>
<a class="btn btn-success btn-restoreall {:$auth->check('dealer/dealer/restore')?'':'hide'}" href="javascript:;" data-url="dealer/dealer/restore" title="{:__('Restore all')}"><i class="fa fa-rotate-left"></i> {:__('Restore all')}</a>
<a class="btn btn-danger btn-destroyall {:$auth->check('dealer/dealer/destroy')?'':'hide'}" href="javascript:;" data-url="dealer/dealer/destroy" title="{:__('Destroy all')}"><i class="fa fa-times"></i> {:__('Destroy all')}</a>
</div>
<table id="table" class="table table-striped table-bordered table-hover"
data-operate-restore="{:$auth->check('dealer/restore')}"
data-operate-destroy="{:$auth->check('dealer/destroy')}"
data-operate-restore="{:$auth->check('dealer/dealer/restore')}"
data-operate-destroy="{:$auth->check('dealer/dealer/destroy')}"
width="100%">
</table>
</div>
... ...
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
<style>
#goodsSelect {
background: #fff;
overflow: auto;
color: #444;
margin: -15px;
}
.dialog-left {
width: 220px;
border-right: 1px solid #e6e6e6;
height: 100vh;
padding: 9px 20px;
overflow: auto;
}
.dialog-left::-webkit-scrollbar {
width: 6px;
}
.dialog-left::-webkit-scrollbar-thumb {
width: 6px;
background: #e6e6e6;
height: 20px;
border-radius: 3px;
}
.dialog-right {
height: 100vh;
flex: 1;
}
.dialog-search {
/* height: 50px;
border-bottom: 1px solid #e6e6e6;
padding-left: 20px; */
padding: 9px 0;
justify-content: space-between;
}
.dialog-search .el-input {
width: 240px;
}
.dialog-search .el-input__inner {
background: #F9F9F9;
border: none;
}
.dialog-right-body {
padding: 0 20px;
height: calc(100vh - 62px);
overflow: auto;
}
.dialog-footer {
padding: 15px 20px;
justify-content: space-between;
}
.operation-button {
width: 60px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 4px;
font-size: 12px;
margin-left: 10px;
cursor: pointer;
}
.cancel-button {
border: 1px solid #E6E6E6;
color: #C4C4C4;
}
.define-button {
background: #6E3DC8;
color: #fff;
}
.dialog-right-body-title {
height: 50px;
justify-content: space-between;
font-size: 12px;
margin-bottom: 10px;
}
.dialog-right-body-title .el-icon-tickets {
font-size: 13px;
color: #7438D5;
margin-right: 10px;
}
.select-container {
flex-wrap: wrap;
}
.goods-item {
width: 240px;
height: 60px;
background: #FFFFFF;
border: 1px solid #E6E6E6;
box-sizing: border-box;
border-radius: 4px;
padding: 8px;
margin-right: 14px;
margin-bottom: 14px;
position: relative;
}
.goods-item-active {
border-color: #7438D5;
}
.active-icon {
width: 22px;
height: 22px;
position: absolute;
right: -1px;
top: -1px;
display: none;
}
.goods-image {
width: 44px;
height: 44px;
border: 1px solid #E6E6E6;
border-radius: 3px;
margin-right: 10px;
}
.goods-message {
display: flex;
flex-direction: column;
justify-content: space-between;
flex: 1;
height: 100%;
}
.goods-bodys {
justify-content: space-between;
height: 20px;
}
.goods-price {
color: #ED655F;
}
.goods-stock {
color: #999;
}
.goods-container {
flex-wrap: wrap;
/* padding-top: 20px; */
}
.el-pagination.is-background .el-pager li:not(.disabled).active {
background: #7438D5;
}
.el-image {
height: 100%;
width: 100%;
}
.image-slot {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.level-item-1,
.level-item-2,
.level-item-3,
.level-item-4 {
height: 26px;
line-height: 26px;
display: flex;
align-items: center;
}
.level-item-2 {
padding-left: 20px;
}
.level-item-3 {
padding-left: 40px;
}
.level-item-4 {
padding-left: 73px;
}
.el-icon-arrow-down {
color: #666;
}
.arrow-open {
transform: rotateZ(90deg);
transition: transform .25s linear;
}
.arrow-selected {
color: #7438D5;
background: rgba(116, 56, 213, 0.14);
border-radius: 4px;
}
.item-name {
cursor: pointer;
flex: 1;
}
.el-icon-caret-right {
color: #666;
}
.i-container {
/* width: 13px;
height: 13px; */
margin-right: 6px;
}
[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="goodsSelect" v-cloak>
<div class="dialog-body display-flex">
<div class="dialog-left">
<div v-for="(level1,p) in goodsData" :key="p">
<div class="level-item-1" :class="level1.selected?'arrow-selected':''">
<div class="i-container">
<i v-if="level1.children && level1.children.length>0" class="el-icon-caret-right"
:class="level1.show?'arrow-open':''" @click="showLeft(p, null, null,null)"></i>
</div>
<span class="item-name" @click="selectCategoryLeft(p, null, null,null)">{{level1.name}}</span>
</div>
<el-collapse-transition v-for="(level2,c) in level1.children">
<div :key="c" v-show="level1.show">
<div class="level-item-2" :class="level2.selected?'arrow-selected':''">
<div class="i-container">
<i v-if="level2.children && level2.children.length>0" class="el-icon-caret-right"
:class="level2.show?'arrow-open':''" @click="showLeft(p, c, null,null)"></i></div>
<span class="item-name" @click="selectCategoryLeft(p, c, null,null)">{{level2.name}}</span>
</div>
<el-collapse-transition v-for="(level3,a) in level2.children">
<div :key="a" v-show="level2.show">
<div class="level-item-3" :class="level3.selected?'arrow-selected':''">
<div class="i-container">
<i v-if="level3.children && level3.children.length>0"
class="el-icon-caret-right" :class="level3.show?'arrow-open':''"
@click="showLeft(p, c, a,null)"></i></div>
<span class="item-name"
@click="selectCategoryLeft(p, c, a,null)">{{level3.name}}</span>
</div>
<el-collapse-transition v-for="(level4,s) in level3.children">
<div :key="s" v-show="level3.show">
<div class="level-item-4" :class="level4.selected?'arrow-selected':''">
<!-- <i class="el-icon-caret-right" @click="showLeft(p, c, a,s)"></i> -->
<span class="item-name"
@click="selectCategoryLeft(p, c, a,s)">{{level4.name}}</span>
</div>
</div>
</el-collapse-transition>
</div>
</el-collapse-transition>
</div>
</el-collapse-transition>
</div>
</div>
<div class="dialog-right">
<div class="dialog-right-body">
<div class="dialog-search display-flex">
<div>
<span v-if="!isAll && multiple=='true'" class="theme-color cursor-pointer"
@click="checkedAll(true)">全选</span>
<span v-if="isAll && multiple=='true'" class="cursor-pointer"
@click="checkedAll(false)">全不选</span>
</div>
<el-input size="small" placeholder="请输入搜索内容" v-model="searchWhere">
<i slot="prefix" class="el-input__icon el-icon-search"></i>
</el-input>
</div>
<!-- -->
<div class="goods-container display-flex">
<div class="goods-item display-flex" :class="(selectedIdsArr.includes(item.id) || item.id==selectedItem.id)?'goods-item-active':''"
v-for="(item,index) in goodsList" @click="selectGoods(item,index)">
<div class="goods-image">
<el-image :src="Fast.api.cdnurl(item.image)" fit="contain">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline"></i>
</div>
</el-image>
</div>
<div class="goods-message">
<div class="display-flex">
<div style="margin-right:10px">{{item.id}}</div>
<div class="goods-title ellipsis-item">{{item.title}}</div>
</div>
<div class="goods-bodys display-flex">
<div v-if="item.activity_type">
<div class="goods-price" v-if="item.activity_type=='seckill'" style="width: 36px;
height: 20px;text-align: center;
background: rgba(255, 132, 118, 0.1);
border: 1px solid rgba(255, 132, 118, 0.5);font-size: 12px;
line-height: 20px;color: #FF8476;border-radius: 4px;">{{item.activity_type_text}}</div>
<div class="goods-price" v-if="item.activity_type=='groupon'" style="width: 36px;
height: 20px;text-align: center;
background: rgba(162, 104, 255, 0.1);
border: 1px solid rgba(162, 104, 255, 0.5);font-size: 12px;
line-height: 20px;color: #A268FF;border-radius: 4px;">{{item.activity_type_text}}</div>
</div>
<div v-if="!item.activity_type && item.app_type=='score'" style="width: 36px;
height: 20px;text-align: center;
background: rgba(251, 175, 61, 0.1);
border: 1px solid rgba(251, 175, 61, 0.5);font-size: 12px;
line-height: 20px;color: #FBAF3D;border-radius: 4px;">{{item.app_type_text}}</div>
<div></div>
<div class="goods-stock">库存:{{item.stock}}</div>
</div>
</div>
<img :style="{display:(selectedIdsArr.includes(item.id) || item.id==selectedItem.id)?'block':'none'}" class="active-icon"
src="/assets/addons/shopro/img/goods/active.png">
</div>
</div>
</div>
<div class="dialog-footer display-flex">
<div>
<el-pagination background layout="prev, pager, next" :total="totalPage" pager-count="12"
@prev-click="changeClick" @next-click="changeClick" @current-change="changeClick"
:current-page="currentPage" page-size="12">
</el-pagination>
</div>
<div class="display-flex">
<div @click="operation('define')" class="operation-button define-button">确定</div>
</div>
</div>
</div>
</div>
</div>
\ No newline at end of file
... ...
<style>
.skuChildrenBox {
display: flex;
padding: 0 15px;
flex-wrap: wrap;
}
.skuChildren {
margin-right: 10px;
margin-top: 10px;
width: 50px;
height: 24px;
line-height: 24px;
color: rgba(80, 80, 80, 1);
border-radius: 2px;
font-size: 12px;
text-align: center;
border: 1px solid rgba(231, 231, 231, 1);
position: relative;
}
.skuChildrenSelect {
border: 1px solid rgba(212, 48, 48, 1)
}
.skuChildren-close {
position: absolute;
background: rgba(212, 48, 48, 1);
color: #fff;
border-radius: 50%;
width: 12px;
height: 12px;
top: -6px;
right: -6px;
font-style: 12px;
-webkit-transform: scale(0.8);
}
.status {
border: none;
cursor: pointer;
color: #3498db;
font-size: 14px;
}
.status-s {
color: #ED3C30;
}
[v-cloak] {
display: none
}
</style>
<script src="__CDN__/assets/addons/shopro/libs/vue.js"></script>
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="panel panel-default panel-intro">
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="basic">
<div class="widget-body no-padding">
<table class="table" id="skuPrce" v-cloak>
<thead>
<tr>
<th v-for="(item, i) in skuList" :key="i">
{{item.name}}
</th>
<th width="80">库存</th>
<th width="80">价格</th>
<!--<th width="80">活动销量</th>
<th width="80">活动库存</th>
<th width="80">活动价格</th>
<th width="80">操作</th>-->
</tr>
</thead>
<tbody>
<tr v-for="(item, i) in skuPrice" :key="i" >
<td width="80" v-for="(v, j) in item.goods_sku_text" :key="j">
{{v}}
</td>
<td width="80"><input type="text" v-model="item.stock" class="input-sm form-control"
disabled>
</td>
<td width="80">
<input type="text" v-model="item.price" class="input-sm form-control" disabled>
</td>
<td width="80">
<span class="input-sm form-control status"
:class="item.opt?'status-s':''"
@click="goDealer(i)">经销商列表</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</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="button" class="btn btn-success btn-embossed" id="activitySub">{:__('OK')}</button>
</div>
</div>
</form>
\ No newline at end of file
... ...
<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">{:__('Dealer_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-dealer_id" data-rule="required" data-source="dealer/dealer/selectpage" data-field="dealer_name" class="form-control selectpage" name="row[dealer_id]" type="text" value="">
</div>
</div>
<!--<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Sku_price_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-sku_price_id" data-rule="required" data-source="sku/price/index" class="form-control selectpage" name="row[sku_price_id]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Goods_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-goods_id" data-rule="required" data-source="goods/index" class="form-control selectpage" name="row[goods_id]" type="text" value="">
</div>
</div>-->
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Stock')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-stock" data-rule="required" class="form-control" name="row[stock]" type="number" value="0">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Sales')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-sales" data-rule="required" class="form-control" name="row[sales]" type="number" value="0" readonly>
</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>
... ...
<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">{:__('Dealer_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-dealer_id" data-rule="required" data-source="dealer/dealer/selectpage" data-field="dealer_name" class="form-control selectpage" name="row[dealer_id]" type="text" value="{$row.dealer_id|htmlentities}">
</div>
</div>
<!--<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Sku_price_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-sku_price_id" data-rule="required" data-source="sku/price/index" class="form-control selectpage" name="row[sku_price_id]" type="text" value="{$row.sku_price_id|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Goods_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-goods_id" data-rule="required" data-source="goods/index" class="form-control selectpage" name="row[goods_id]" type="text" value="{$row.goods_id|htmlentities}">
</div>
</div>-->
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Stock')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-stock" data-rule="required" class="form-control" name="row[stock]" type="number" value="{$row.stock|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Sales')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-sales" data-rule="required" class="form-control" name="row[sales]" type="number" value="{$row.sales|htmlentities}" readonly>
</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>
... ...
<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">
<a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a>
<a href="javascript:;" class="btn btn-success btn-add {:$auth->check('dealer/dealer_stock/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
<a href="javascript:;" class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('dealer/dealer_stock/edit')?'':'hide'}" title="{:__('Edit')}" ><i class="fa fa-pencil"></i> {:__('Edit')}</a>
<a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('dealer/dealer_stock/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
<!--<a href="javascript:;" class="btn btn-danger btn-import {:$auth->check('dealer/dealer_stock/import')?'':'hide'}" title="{:__('Import')}" id="btn-import-file" data-url="ajax/upload" data-mimetype="csv,xls,xlsx" data-multiple="false"><i class="fa fa-upload"></i> {:__('Import')}</a>
<div class="dropdown btn-group {:$auth->check('dealer/dealer_stock/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>
<a class="btn btn-success btn-recyclebin btn-dialog {:$auth->check('dealer/dealer_stock/recyclebin')?'':'hide'}" href="dealer/dealer_stock/recyclebin" title="{:__('Recycle bin')}"><i class="fa fa-recycle"></i> {:__('Recycle bin')}</a>-->
</div>
<table id="table" class="table table-striped table-bordered table-hover table-nowrap"
data-operate-edit="{:$auth->check('dealer/dealer_stock/edit')}"
data-operate-del="{:$auth->check('dealer/dealer_stock/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>
... ...
<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')}
<a class="btn btn-info btn-multi btn-disabled disabled {:$auth->check('dealer/dealer_stock/restore')?'':'hide'}" href="javascript:;" data-url="dealer/dealer_stock/restore" data-action="restore"><i class="fa fa-rotate-left"></i> {:__('Restore')}</a>
<a class="btn btn-danger btn-multi btn-disabled disabled {:$auth->check('dealer/dealer_stock/destroy')?'':'hide'}" href="javascript:;" data-url="dealer/dealer_stock/destroy" data-action="destroy"><i class="fa fa-times"></i> {:__('Destroy')}</a>
<a class="btn btn-success btn-restoreall {:$auth->check('dealer/dealer_stock/restore')?'':'hide'}" href="javascript:;" data-url="dealer/dealer_stock/restore" title="{:__('Restore all')}"><i class="fa fa-rotate-left"></i> {:__('Restore all')}</a>
<a class="btn btn-danger btn-destroyall {:$auth->check('dealer/dealer_stock/destroy')?'':'hide'}" href="javascript:;" data-url="dealer/dealer_stock/destroy" title="{:__('Destroy all')}"><i class="fa fa-times"></i> {:__('Destroy all')}</a>
</div>
<table id="table" class="table table-striped table-bordered table-hover"
data-operate-restore="{:$auth->check('dealer/dealer_stock/restore')}"
data-operate-destroy="{:$auth->check('dealer/dealer_stock/destroy')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>
... ...
... ... @@ -116,7 +116,7 @@
</el-form-item>
</div>
<div v-if="type=='user'">
<el-form-item label="默认昵称:">
<!--<el-form-item label="默认昵称:">
<el-input v-model="detailForm.nickname" placeholder="请输入默认昵称"></el-input>
</el-form-item>
<el-form-item label="默认头像:">
... ... @@ -151,10 +151,13 @@
</el-form-item>
<el-form-item label="默认积分:">
<el-input v-model="detailForm.score" placeholder="请输入默认积分"></el-input>
</el-form-item>-->
<el-form-item label="商品折扣:">
<el-input v-model="detailForm.discount" placeholder="请输入商品折扣"></el-input>
</el-form-item>
</div>
<div v-if="type=='share'">
<el-form-item label="分享标题:">
<!--<el-form-item label="分享标题:">
<el-input v-model="detailForm.title" placeholder="请输入分享标题"></el-input>
</el-form-item>
<el-form-item label="默认分享图片:">
... ... @@ -190,7 +193,7 @@
<i class="el-icon-plus"></i>
</div>
</div>
</el-form-item>
</el-form-item>-->
<el-form-item label="用户分享背景:">
<div class="display-flex">
<div class="platform-images" v-if="detailForm.user_poster_bg">
... ... @@ -208,7 +211,7 @@
</div>
</div>
</el-form-item>
<el-form-item label="拼团分享背景:">
<!--<el-form-item label="拼团分享背景:">
<div class="display-flex">
<div class="platform-images" v-if="detailForm.groupon_poster_bg">
<el-image
... ... @@ -224,7 +227,7 @@
<i class="el-icon-plus"></i>
</div>
</div>
</el-form-item>
</el-form-item>-->
</div>
<div v-if="type=='score'">
<el-form-item label="每日签到积分:">
... ... @@ -276,13 +279,13 @@
</el-form-item>
</div>
<div v-if="type=='services'">
<div style="margin-bottom: 40px;" v-if="detailForm.amap">
<!--<div style="margin-bottom: 40px;" v-if="detailForm.amap">
<div class="divider-title">高德地图配置</div>
<el-form-item label="申请的key值:">
<el-input v-model="detailForm.amap.appkey" placeholder="请输入申请的key值">
</el-input>
</el-form-item>
</div>
</div>-->
<div class="divider-title">快递鸟配置</div>
<div v-if="detailForm.express">
<el-form-item label="用户ID:">
... ...
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
<style>
#goodsSelect {
background: #fff;
overflow: auto;
color: #444;
margin: -15px;
}
.dialog-left {
width: 220px;
border-right: 1px solid #e6e6e6;
height: 100vh;
padding: 9px 20px;
overflow: auto;
}
.dialog-left::-webkit-scrollbar {
width: 6px;
}
.dialog-left::-webkit-scrollbar-thumb {
width: 6px;
background: #e6e6e6;
height: 20px;
border-radius: 3px;
}
.dialog-right {
height: 100vh;
flex: 1;
}
.dialog-search {
/* height: 50px;
border-bottom: 1px solid #e6e6e6;
padding-left: 20px; */
padding: 9px 0;
justify-content: space-between;
}
.dialog-search .el-input {
width: 240px;
}
.dialog-search .el-input__inner {
background: #F9F9F9;
border: none;
}
.dialog-right-body {
padding: 0 20px;
height: calc(100vh - 62px);
overflow: auto;
}
.dialog-footer {
padding: 15px 20px;
justify-content: space-between;
}
.operation-button {
width: 60px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 4px;
font-size: 12px;
margin-left: 10px;
cursor: pointer;
}
.cancel-button {
border: 1px solid #E6E6E6;
color: #C4C4C4;
}
.define-button {
background: #6E3DC8;
color: #fff;
}
.dialog-right-body-title {
height: 50px;
justify-content: space-between;
font-size: 12px;
margin-bottom: 10px;
}
.dialog-right-body-title .el-icon-tickets {
font-size: 13px;
color: #7438D5;
margin-right: 10px;
}
.select-container {
flex-wrap: wrap;
}
.goods-item {
width: 240px;
height: 60px;
background: #FFFFFF;
border: 1px solid #E6E6E6;
box-sizing: border-box;
border-radius: 4px;
padding: 8px;
margin-right: 14px;
margin-bottom: 14px;
position: relative;
}
.goods-item-active {
border-color: #7438D5;
}
.active-icon {
width: 22px;
height: 22px;
position: absolute;
right: -1px;
top: -1px;
display: none;
}
.goods-image {
width: 44px;
height: 44px;
border: 1px solid #E6E6E6;
border-radius: 3px;
margin-right: 10px;
}
.goods-message {
display: flex;
flex-direction: column;
justify-content: space-between;
flex: 1;
height: 100%;
}
.goods-bodys {
justify-content: space-between;
height: 20px;
}
.goods-price {
color: #ED655F;
}
.goods-stock {
color: #999;
}
.goods-container {
flex-wrap: wrap;
/* padding-top: 20px; */
}
.el-pagination.is-background .el-pager li:not(.disabled).active {
background: #7438D5;
}
.el-image {
height: 100%;
width: 100%;
}
.image-slot {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.level-item-1,
.level-item-2,
.level-item-3,
.level-item-4 {
height: 26px;
line-height: 26px;
display: flex;
align-items: center;
}
.level-item-2 {
padding-left: 20px;
}
.level-item-3 {
padding-left: 40px;
}
.level-item-4 {
padding-left: 73px;
}
.el-icon-arrow-down {
color: #666;
}
.arrow-open {
transform: rotateZ(90deg);
transition: transform .25s linear;
}
.arrow-selected {
color: #7438D5;
background: rgba(116, 56, 213, 0.14);
border-radius: 4px;
}
.item-name {
cursor: pointer;
flex: 1;
}
.el-icon-caret-right {
color: #666;
}
.i-container {
/* width: 13px;
height: 13px; */
margin-right: 6px;
}
[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="goodsSelect" v-cloak>
<div class="dialog-body display-flex">
<div class="dialog-right">
<div class="dialog-right-body">
<div class="dialog-search display-flex">
<div>
<span v-if="!isAll && multiple=='true'" class="theme-color cursor-pointer"
@click="checkedAll(true)">全选</span>
<span v-if="isAll && multiple=='true'" class="cursor-pointer"
@click="checkedAll(false)">全不选</span>
</div>
<el-input size="small" placeholder="请输入搜索内容" v-model="searchWhere">
<i slot="prefix" class="el-input__icon el-icon-search"></i>
</el-input>
</div>
<!-- -->
<div class="goods-container display-flex">
<div class="goods-item display-flex" :class="(selectedIdsArr.includes(item.id) || item.id==selectedItem.id)?'goods-item-active':''"
v-for="(item,index) in goodsList" @click="selectGoods(item,index)">
<div class="goods-image">
<el-image :src="Fast.api.cdnurl(item.image)" fit="contain">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline"></i>
</div>
</el-image>
</div>
<div class="goods-message">
<div class="display-flex">
<div style="margin-right:10px">{{item.id}}</div>
<div class="goods-title ellipsis-item">{{item.title}}</div>
</div>
<div class="goods-bodys display-flex">
<div v-if="item.activity_type">
<div class="goods-price" v-if="item.activity_type=='seckill'" style="width: 36px;
height: 20px;text-align: center;
background: rgba(255, 132, 118, 0.1);
border: 1px solid rgba(255, 132, 118, 0.5);font-size: 12px;
line-height: 20px;color: #FF8476;border-radius: 4px;">{{item.activity_type_text}}</div>
<div class="goods-price" v-if="item.activity_type=='groupon'" style="width: 36px;
height: 20px;text-align: center;
background: rgba(162, 104, 255, 0.1);
border: 1px solid rgba(162, 104, 255, 0.5);font-size: 12px;
line-height: 20px;color: #A268FF;border-radius: 4px;">{{item.activity_type_text}}</div>
</div>
<div v-if="!item.activity_type && item.app_type=='score'" style="width: 36px;
height: 20px;text-align: center;
background: rgba(251, 175, 61, 0.1);
border: 1px solid rgba(251, 175, 61, 0.5);font-size: 12px;
line-height: 20px;color: #FBAF3D;border-radius: 4px;">{{item.app_type_text}}</div>
<div></div>
<div class="goods-stock">库存:{{item.stock}}</div>
</div>
</div>
<img :style="{display:(selectedIdsArr.includes(item.id) || item.id==selectedItem.id)?'block':'none'}" class="active-icon"
src="/assets/addons/shopro/img/goods/active.png">
</div>
</div>
</div>
<div class="dialog-footer display-flex">
<div>
<el-pagination background layout="prev, pager, next" :total="totalPage" pager-count="12"
@prev-click="changeClick" @next-click="changeClick" @current-change="changeClick"
:current-page="currentPage" page-size="12">
</el-pagination>
</div>
<div class="display-flex">
<div @click="operation('define')" class="operation-button define-button">确定</div>
</div>
</div>
</div>
</div>
</div>
\ No newline at end of file
... ...
... ... @@ -195,12 +195,14 @@
.edit-text,
.copy-text,
.del-text {
.del-text,
.dealer-text {
cursor: pointer;
color: #444;
}
.copy-text {
.copy-text,
.dealer-text {
margin: 0 14px;
}
... ... @@ -216,6 +218,10 @@
color: #FF5959;
}
.dealer-text:hover {
color: orangered;
}
.el-button--primary,
.el-button--primary:hover{
background: #7438D5 !important;
... ... @@ -398,9 +404,9 @@
<div class="common-btn choose-btn" :class="activityType=='seckill'?'choose-btn-active':''" @click="chooseOpt('seckill')">
秒杀
</div>
<div class="common-btn choose-btn" :class="activityType=='score'?'choose-btn-active':''" @click="chooseOpt('score')">
<!--<div class="common-btn choose-btn" :class="activityType=='score'?'choose-btn-active':''" @click="chooseOpt('score')">
积分
</div>
</div>-->
</div>
<div class="custom-choose-type display-flex">
<div class="custom-choose-type-tip">
... ... @@ -609,6 +615,7 @@
<span class="copy-text" @click="goodsOpt('copy',scope.row.id)">复制
</span>
<span class="del-text" @click="goodsOpt('del',scope.row.id)">删除</span>
<span class="dealer-text" @click="goodsOpt('dealer',scope.row.id)">经销商</span>
</template>
</el-table-column>
</el-table>
... ...
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
var Controller = {
index: function () {
// 初始化表格参数配置
Table.api.init({
extend: {
index_url: 'dealer/dealer/index' + location.search,
add_url: 'dealer/dealer/add',
edit_url: 'dealer/dealer/edit',
del_url: 'dealer/dealer/del',
multi_url: 'dealer/dealer/multi',
import_url: 'dealer/dealer/import',
table: 'dealer',
}
});
var table = $("#table");
// 初始化表格
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
pk: 'id',
sortName: 'id',
columns: [
[
{checkbox: true},
{field: 'id', title: __('Id')},
{field: 'admin.username', title: __('Admin.username'), operate: 'LIKE'},
{field: 'dealer_name', title: __('Dealer_name'), operate: 'LIKE'},
{field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
]
]
});
// 为表格绑定事件
Table.api.bindevent(table);
},
recyclebin: function () {
// 初始化表格参数配置
Table.api.init({
extend: {
'dragsort_url': ''
}
});
var table = $("#table");
// 初始化表格
table.bootstrapTable({
url: 'dealer/dealer/recyclebin' + location.search,
pk: 'id',
sortName: 'id',
columns: [
[
{checkbox: true},
{field: 'id', title: __('Id')},
{
field: 'deletetime',
title: __('Deletetime'),
operate: 'RANGE',
addclass: 'datetimerange',
formatter: Table.api.formatter.datetime
},
{
field: 'operate',
width: '130px',
title: __('Operate'),
table: table,
events: Table.api.events.operate,
buttons: [
{
name: 'Restore',
text: __('Restore'),
classname: 'btn btn-xs btn-info btn-ajax btn-restoreit',
icon: 'fa fa-rotate-left',
url: 'dealer/dealer/restore',
refresh: true
},
{
name: 'Destroy',
text: __('Destroy'),
classname: 'btn btn-xs btn-danger btn-ajax btn-destroyit',
icon: 'fa fa-times',
url: 'dealer/dealer/destroy',
refresh: true
}
],
formatter: Table.api.formatter.operate
}
]
]
});
// 为表格绑定事件
Table.api.bindevent(table);
},
add: function () {
Controller.api.bindevent();
},
edit: function () {
Controller.api.bindevent();
},
sku: function () {
var vueSku = new Vue({
el: "#skuPrce",
data() {
return {
skuList: Config.skuList,
skuPrice: Config.skuPrice,
is_edit: false
}
},
mounted() {
},
methods: {
goDealer(i) {
let sku_price_id = this.skuPrice[i].id;
Fast.api.open('dealer/dealer_stock?sku_price_id=' + sku_price_id, '设置经销商')
},
},
})
$(document).on("click", "#activitySub", function () {
Layer.confirm('确认提交吗', {
btn: ['确认', '取消']
}, function () {
if (isSubmit) {
return true;
} else {
layer.msg('请把信息填写完整');
}
return true;
}, function () {
Layer.closeAll();
return false;
});
})
Controller.api.bindevent();
},
api: {
bindevent: function () {
Form.api.bindevent($("form[role=form]"));
}
}
};
return Controller;
});
\ No newline at end of file
... ...
... ... @@ -5,13 +5,13 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
// 初始化表格参数配置
Table.api.init({
extend: {
index_url: 'dealer/index' + location.search,
add_url: 'dealer/add',
edit_url: 'dealer/edit',
del_url: 'dealer/del',
multi_url: 'dealer/multi',
import_url: 'dealer/import',
table: 'dealer',
index_url: 'dealer/dealer_stock/index' + location.search,
add_url: 'dealer/dealer_stock/add' + location.search,
edit_url: 'dealer/dealer_stock/edit',
del_url: 'dealer/dealer_stock/del',
multi_url: 'dealer/dealer_stock/multi',
import_url: 'dealer/dealer_stock/import',
table: 'dealer_stock',
}
});
... ... @@ -26,9 +26,9 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
[
{checkbox: true},
{field: 'id', title: __('Id')},
{field: 'admin.username', title: __('Admin.username'), operate: 'LIKE'},
{field: 'dealer_name', title: __('Dealer_name'), operate: 'LIKE'},
{field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
{field: 'dealer.dealer_name', title: __('Dealer.dealer_name'), operate: 'LIKE'},
{field: 'stock', title: __('Stock')},
{field: 'sales', title: __('Sales')},
{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
]
]
... ... @@ -49,7 +49,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
// 初始化表格
table.bootstrapTable({
url: 'dealer/recyclebin' + location.search,
url: 'dealer/dealer_stock/recyclebin' + location.search,
pk: 'id',
sortName: 'id',
columns: [
... ... @@ -75,7 +75,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
text: __('Restore'),
classname: 'btn btn-xs btn-info btn-ajax btn-restoreit',
icon: 'fa fa-rotate-left',
url: 'dealer/restore',
url: 'dealer/dealer_stock/restore',
refresh: true
},
{
... ... @@ -83,7 +83,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
text: __('Destroy'),
classname: 'btn btn-xs btn-danger btn-ajax btn-destroyit',
icon: 'fa fa-times',
url: 'dealer/destroy',
url: 'dealer/dealer_stock/destroy',
refresh: true
}
],
... ...
... ... @@ -8,20 +8,22 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
return {
activeName: "basic",
configData: {
basic: [{
id: 'shopro',
title: '商城信息',
tip: '配置商城基本信息',
message: '商城名称、H5域名、Logo',
icon: 'shopro-icon',
leaf: '#6ACAA5',
background: 'linear-gradient(180deg, #BAF0DD 0%, #51BC99 100%)',
url: "{:url(shopro.config/platform?type=shopro')}",
button: {
background: '#E0F1EB',
color: '#13986C'
},
}, {
basic: [
// {
// id: 'shopro',
// title: '商城信息',
// tip: '配置商城基本信息',
// message: '商城名称、H5域名、Logo',
// icon: 'shopro-icon',
// leaf: '#6ACAA5',
// background: 'linear-gradient(180deg, #BAF0DD 0%, #51BC99 100%)',
// url: "{:url(shopro.config/platform?type=shopro')}",
// button: {
// background: '#E0F1EB',
// color: '#13986C'
// },
// },
{
id: 'user',
title: '会员配置',
tip: '配置默认会员信息',
... ... @@ -45,31 +47,34 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
background: '#E7DEF6',
color: '#6625CF'
},
}, {
id: 'score',
title: '积分配置',
tip: '配置默认积分规则',
message: '签到积分、连续签到规则',
icon: 'score-icon',
leaf: '#EC9371',
background: 'linear-gradient(180deg, #FADDC0 0%, #E47F6D 100%)',
button: {
background: '#F6E5E1',
color: '#D75125'
},
}, {
id: 'withdraw',
title: '提现配置',
tip: '配置默认提现规则',
message: '手续费、最小最大金额',
icon: 'withdraw-icon',
leaf: '#EA6670',
background: 'linear-gradient(180deg, #FCB7BE 0%, #D36068 100%)',
button: {
background: '#F3DCDE',
color: '#D61226'
},
}, {
},
// {
// id: 'score',
// title: '积分配置',
// tip: '配置默认积分规则',
// message: '签到积分、连续签到规则',
// icon: 'score-icon',
// leaf: '#EC9371',
// background: 'linear-gradient(180deg, #FADDC0 0%, #E47F6D 100%)',
// button: {
// background: '#F6E5E1',
// color: '#D75125'
// },
// },
// {
// id: 'withdraw',
// title: '提现配置',
// tip: '配置默认提现规则',
// message: '手续费、最小最大金额',
// icon: 'withdraw-icon',
// leaf: '#EA6670',
// background: 'linear-gradient(180deg, #FCB7BE 0%, #D36068 100%)',
// button: {
// background: '#F3DCDE',
// color: '#D61226'
// },
// },
{
id: 'order',
title: '订单配置',
tip: '配置默认订单规则',
... ... @@ -84,8 +89,10 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
}, {
id: 'services',
title: '第三方服务',
tip: '配置物流及位置信息',
message: '快递鸟物流、高德地图',
// tip: '配置物流及位置信息',
// message: '快递鸟物流、高德地图',
tip: '配置物流',
message: '快递鸟物流',
icon: 'services-icon',
leaf: '#14B0F3',
background: 'linear-gradient(180deg, #A5E2FC 0%, #158CBF 100%)',
... ... @@ -94,20 +101,22 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
color: '#00A3D7'
},
}],
platform: [{
id: 'wxOfficialAccount',
title: '微信公众号',
tip: '配置微信公众号',
message: 'AppId、AppSecret、自动登录',
icon: 'wxOfficialAccount-icon',
leaf: '#6ACAA4',
background: 'linear-gradient(180deg, #AAF0D7 0%, #5CC09F 100%)',
buttonMessage: '公众号设置',
button: {
background: '#DEF0EA',
color: '#0EA753'
},
}, {
platform: [
// {
// id: 'wxOfficialAccount',
// title: '微信公众号',
// tip: '配置微信公众号',
// message: 'AppId、AppSecret、自动登录',
// icon: 'wxOfficialAccount-icon',
// leaf: '#6ACAA4',
// background: 'linear-gradient(180deg, #AAF0D7 0%, #5CC09F 100%)',
// buttonMessage: '公众号设置',
// button: {
// background: '#DEF0EA',
// color: '#0EA753'
// },
// },
{
id: 'wxMiniProgram',
title: '小程序',
tip: '配置小程序',
... ... @@ -120,33 +129,36 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
background: '#D8D8F1',
color: '#3932BF'
},
}, {
id: 'H5',
title: 'H5',
tip: '配置H5平台',
message: '微信H5支付信息',
icon: 'h5-icon',
leaf: '#EC9371',
background: 'linear-gradient(180deg, #FADDC0 0%, #E5806D 100%)',
buttonMessage: 'H5设置',
button: {
background: '#F7E6E1',
color: '#D75E37'
},
}, {
id: 'App',
title: 'App',
tip: '配置App平台',
message: '生成App实现多端同步使用',
icon: 'App-icon',
leaf: '#6990E6',
background: 'linear-gradient(180deg, #BED6FF 0%, #6785CD 100%)',
buttonMessage: 'App设置',
button: {
background: '#DAE1F6',
color: '#1666D3'
},
}],
},
// {
// id: 'H5',
// title: 'H5',
// tip: '配置H5平台',
// message: '微信H5支付信息',
// icon: 'h5-icon',
// leaf: '#EC9371',
// background: 'linear-gradient(180deg, #FADDC0 0%, #E5806D 100%)',
// buttonMessage: 'H5设置',
// button: {
// background: '#F7E6E1',
// color: '#D75E37'
// },
// },
// {
// id: 'App',
// title: 'App',
// tip: '配置App平台',
// message: '生成App实现多端同步使用',
// icon: 'App-icon',
// leaf: '#6990E6',
// background: 'linear-gradient(180deg, #BED6FF 0%, #6785CD 100%)',
// buttonMessage: 'App设置',
// button: {
// background: '#DAE1F6',
// color: '#1666D3'
// },
// }
],
payment: [{
id: 'wechat',
title: '微信支付',
... ... @@ -159,44 +171,48 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
background: '#DEF0EA',
color: '#0EA753'
},
}, {
id: 'alipay',
title: '支付宝支付',
tip: '',
message: '',
icon: 'alipay-icon',
leaf: '#6990E6',
background: 'linear-gradient(180deg, #BFD6FF 0%, #6786CE 100%)',
button: {
background: '#DAE1F6',
color: '#005AD7',
},
}, {
id: 'wallet',
title: '余额支付',
tip: '',
message: '',
icon: 'wallet-icon',
leaf: '#EC9371',
background: 'linear-gradient(180deg, #FADDC0 0%, #E6816E 100%)',
button: {
background: '#F7E6E1',
color: '#D75E37'
},
}, {
id: 'apple',
title: 'Apple Pay',
tip: '',
message: '',
icon: 'apple-icon',
leaf: '#6962F7',
background: 'linear-gradient(180deg, #C2C0FF 0%, #6563C9 100%) ',
button: {
background: '#D8D8F1',
color: '#1E14E0',
cursor: 'auto'
},
}]
},
// {
// id: 'alipay',
// title: '支付宝支付',
// tip: '',
// message: '',
// icon: 'alipay-icon',
// leaf: '#6990E6',
// background: 'linear-gradient(180deg, #BFD6FF 0%, #6786CE 100%)',
// button: {
// background: '#DAE1F6',
// color: '#005AD7',
// },
// },
// {
// id: 'wallet',
// title: '余额支付',
// tip: '',
// message: '',
// icon: 'wallet-icon',
// leaf: '#EC9371',
// background: 'linear-gradient(180deg, #FADDC0 0%, #E6816E 100%)',
// button: {
// background: '#F7E6E1',
// color: '#D75E37'
// },
// },
// {
// id: 'apple',
// title: 'Apple Pay',
// tip: '',
// message: '',
// icon: 'apple-icon',
// leaf: '#6962F7',
// background: 'linear-gradient(180deg, #C2C0FF 0%, #6563C9 100%) ',
// button: {
// background: '#D8D8F1',
// color: '#1E14E0',
// cursor: 'auto'
// },
// }
]
}
}
},
... ...
... ... @@ -179,6 +179,9 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'toastr'], function (
case 'recycle':
Fast.api.open('shopro/goods/goods/recyclebin', '查看回收站')
break;
case 'dealer':
Fast.api.open('dealer/dealer/sku/ids/' + id + "?id=" + id, '设置经销商')
break;
default:
Fast.api.open('shopro/goods/goods/edit/ids/' + type.id + "?id=" + type.id + "&type=edit", '编辑商品', {
callback() {
... ...