@@ -0,0 +1,84 @@
|
||||
<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">{:__('Goods_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-goods_id" data-rule="required" data-source="goods/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">{:__('Order_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-order_id" data-rule="required" data-source="order/index" class="form-control selectpage" name="row[order_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Order_item_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-order_item_id" data-rule="required" data-source="order/item/index" class="form-control selectpage" name="row[order_item_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-user_id" data-rule="required" data-source="user/user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Level')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-level" data-rule="required" class="form-control" name="row[level]" type="number" value="0">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-content" class="form-control" name="row[content]" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Images')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="input-group">
|
||||
<input id="c-images" class="form-control" size="50" name="row[images]" type="text">
|
||||
<div class="input-group-addon no-border no-padding">
|
||||
<span><button type="button" id="plupload-images" class="btn btn-danger plupload" data-input-id="c-images" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="true" data-preview-id="p-images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-images" class="btn btn-primary fachoose" data-input-id="c-images" data-mimetype="image/*" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
</div>
|
||||
<span class="msg-box n-right" for="c-images"></span>
|
||||
</div>
|
||||
<ul class="row list-inline plupload-preview" id="p-images"></ul>
|
||||
</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">
|
||||
|
||||
<div class="radio">
|
||||
{foreach name="statusList" item="vo"}
|
||||
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="show"}checked{/in} /> {$vo}</label>
|
||||
{/foreach}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Reply_content')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-reply_content" class="form-control" name="row[reply_content]" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Replytime')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-replytime" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[replytime]" type="text" value="{:date('Y-m-d H:i:s')}">
|
||||
</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,73 @@
|
||||
<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">{:__('Goods_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-goods_id" data-rule="required" data-source="shopro/goods/goods/index" data-field="title" 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">{:__('Order_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-order_id" data-rule="required" data-source="shopro/order/order/index" data-field="order_sn" class="form-control selectpage" name="row[order_id]" type="text" value="{$row.order_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Order_item_id')}ID:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-order_item_id" data-rule="required" class="form-control" name="row[order_item_id]" type="text" value="{$row.order_item_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-user_id" data-rule="required" data-source="user/user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value="{$row.user_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Level')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-level" data-rule="required" class="form-control" name="row[level]" type="number" value="{$row.level|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-content" class="form-control" name="row[content]" type="text" value="{$row.content|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Images')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="input-group">
|
||||
<input id="c-images" class="form-control" size="50" name="row[images]" type="text" value="{$row.images|htmlentities}">
|
||||
<div class="input-group-addon no-border no-padding">
|
||||
<span><button type="button" id="plupload-images" class="btn btn-danger plupload" data-input-id="c-images" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="true" data-preview-id="p-images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-images" class="btn btn-primary fachoose" data-input-id="c-images" data-mimetype="image/*" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
</div>
|
||||
<span class="msg-box n-right" for="c-images"></span>
|
||||
</div>
|
||||
<ul class="row list-inline plupload-preview" id="p-images"></ul>
|
||||
</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">
|
||||
|
||||
<div class="radio">
|
||||
{foreach name="statusList" item="vo"}
|
||||
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="$row.status"}checked{/in} /> {$vo}</label>
|
||||
{/foreach}
|
||||
</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="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,209 @@
|
||||
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
|
||||
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
|
||||
<style>
|
||||
#commentView>div {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.custom-table {
|
||||
padding: 20px 20px 30px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.page-container {
|
||||
margin-top: 30px;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.create-btn {
|
||||
width: fit-content;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.shopro-screen-container {
|
||||
background: #fff;
|
||||
padding-top: 20px;
|
||||
margin-bottom: 10px;
|
||||
border-radius: 4px;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.shopro-screen-container-left {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.shopro-screen-tip {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.recycle-btn {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.shopro-reset-button {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.table-image {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
border-radius: 50%;
|
||||
margin-right: 8px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.goods {
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.images {
|
||||
margin: 0 8px 8px 0;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.ellipsis-item {
|
||||
line-height: 32px;
|
||||
}
|
||||
|
||||
[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="commentView" v-cloak v-loading="allAjax">
|
||||
<div class="shopro-screen-container">
|
||||
<div class="shopro-screen-container-left">
|
||||
<div class="shopro-button shopro-refresh-button" @click="getData">
|
||||
<i class="el-icon-refresh"></i>
|
||||
</div>
|
||||
<div class="display-flex shopro-screen-item">
|
||||
<div class="shopro-screen-tip">商品名称</div>
|
||||
<div class="shopro-screen-condition">
|
||||
<el-input placeholder="请输入商品名称" v-model="searchForm.goods_title" class="screen-item-input"
|
||||
size="small">
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="display-flex shopro-screen-item">
|
||||
<div class="shopro-screen-tip">评价状态</div>
|
||||
<div class="shopro-screen-condition">
|
||||
<el-select v-model="searchForm.comment_status" placeholder="请选择" size="small">
|
||||
<el-option label="全部" value="all"></el-option>
|
||||
<el-option label="显示" value="show"></el-option>
|
||||
<el-option label="隐藏" value="hidden"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="display-flex shopro-screen-item-button">
|
||||
<div class="shopro-button shopro-reset-button" @click="screenEmpty">重置</div>
|
||||
<div class="shopro-button shopro-screen-button" @click="screenFilter">筛选</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="shopro-screen-container-right">
|
||||
<div class="recycle-btn" @click="recyclebin">
|
||||
<i class="fa fa-recycle"></i> 回收站
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="custom-table" v-loading="tableAjax">
|
||||
<el-table ref="multipleTable" :data="data" tooltip-effect="dark" style="width: 100%" border
|
||||
@selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" min-width="36">
|
||||
</el-table-column>
|
||||
<el-table-column label="ID" prop="id" min-width="148">
|
||||
</el-table-column>
|
||||
<el-table-column label="商品" min-width="148" align="left">
|
||||
<template slot-scope="scope">
|
||||
<div class="display-flex">
|
||||
<div class="ellipsis-item-wrap" v-if="scope.row.goods">
|
||||
<el-image class="table-image goods" :src="scope.row.goods.image"></el-image>
|
||||
<span class="ellipsis-item">{{scope.row.goods.title}}</span>
|
||||
</div>
|
||||
<div v-else>{{scope.row.goods_id}}</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="评论用户" min-width="148" align="left">
|
||||
<template slot-scope="scope">
|
||||
<div class="display-flex">
|
||||
<div class="ellipsis-item-wrap" v-if="scope.row.user">
|
||||
<el-image class="table-image" :src="scope.row.user.avatar"></el-image>
|
||||
<span class="ellipsis-item">{{scope.row.user.nickname}}</span>
|
||||
</div>
|
||||
<div v-else>{{scope.row.user_id}}</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="评价星级" min-width="148">
|
||||
<template slot-scope="scope">
|
||||
<div>
|
||||
<el-rate v-model="scope.row.level" disabled> </el-rate>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="评价内容" min-width="148" align="left">
|
||||
<template slot-scope="scope">
|
||||
<div>
|
||||
<span class="ellipsis-item">{{scope.row.content}}</span>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="评价图片" min-width="148">
|
||||
<template slot-scope="scope">
|
||||
<div class="ellipsis-item" v-if="scope.row.images">
|
||||
<el-image class="table-image images" v-for="image in scope.row.images.split(',')" :src="image">
|
||||
</el-image>
|
||||
</div>
|
||||
<span v-if="!scope.row.images">-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="显示状态" min-width="100">
|
||||
<template slot-scope="scope">
|
||||
<div>
|
||||
<span class="shopro-status-dot"
|
||||
:class="scope.row.status=='show'?'shopro-status-normal-dot':'shopro-status-default-dot'"></span>
|
||||
<span :class="scope.row.status=='show'?'shopro-status-normal':'shopro-status-default'">
|
||||
{{scope.row.status_text}}
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="评论时间" min-width="148">
|
||||
<template slot-scope="scope">
|
||||
<div>
|
||||
{{scope.row.replytime_text || "-"}}
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="操作" min-width="120">
|
||||
<template slot-scope="scope">
|
||||
<span class="shopro-edit-text" @click="editRow(scope.row)">编辑
|
||||
</span>
|
||||
<span class="shopro-delete-text" @click="deleteRow(scope.row.id)">删除</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div class="page-container display-flex">
|
||||
<div class="display-flex">
|
||||
<el-button :disabled="selectedData.length==0" @click="setStatus('show')" type="primary" size="small"
|
||||
plain>显示
|
||||
</el-button>
|
||||
<el-button :disabled="selectedData.length==0" @click="setStatus('hidden')" size="small" plain>
|
||||
隐藏
|
||||
</el-button>
|
||||
<el-button :disabled="selectedData.length==0" @click="batchDelete" type="danger" size="small">删除
|
||||
</el-button>
|
||||
</div>
|
||||
<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,25 @@
|
||||
<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('shopro/goods/comment/restore')?'':'hide'}" href="javascript:;" data-url="shopro/goods/comment/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('shopro/goods/comment/destroy')?'':'hide'}" href="javascript:;" data-url="shopro/goods/comment/destroy" data-action="destroy"><i class="fa fa-times"></i> {:__('Destroy')}</a>
|
||||
<a class="btn btn-success btn-restoreall {:$auth->check('shopro/goods/comment/restore')?'':'hide'}" href="javascript:;" data-url="shopro/goods/comment/restore" title="{:__('Restore all')}"><i class="fa fa-rotate-left"></i> {:__('Restore all')}</a>
|
||||
<a class="btn btn-danger btn-destroyall {:$auth->check('shopro/goods/comment/destroy')?'':'hide'}" href="javascript:;" data-url="shopro/goods/comment/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('shopro/goods/comment/restore')}"
|
||||
data-operate-destroy="{:$auth->check('shopro/goods/comment/destroy')}"
|
||||
width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
文件差异内容过多而无法显示
加载差异
文件差异内容过多而无法显示
加载差异
@@ -0,0 +1,725 @@
|
||||
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
|
||||
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
|
||||
<style>
|
||||
#goodsIndex {
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.el-pagination,
|
||||
.el-pagination__total,
|
||||
.el-input__inner,
|
||||
.el-pagination__jump {
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
|
||||
.goods-name {
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
.goods-img {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
margin-right: 10px;
|
||||
border: 1px solid #e6e6e6;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.el-table,
|
||||
.el-table thead,
|
||||
.el-table th {
|
||||
color: #444;
|
||||
font-weight: 500 !important;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.display-flex {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
|
||||
.label-auto {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.el-radio-button__inner,
|
||||
.el-radio-button__inner:hover {
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
width: 80px;
|
||||
text-align: center;
|
||||
padding: 0;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.el-radio__input.is-checked+.el-radio__label,
|
||||
.el-tabs__item.is-active,
|
||||
.el-tabs__item:hover,
|
||||
.el-pager li.active,
|
||||
.el-select-dropdown__item.selected {
|
||||
color: #7438D5;
|
||||
}
|
||||
|
||||
.el-radio__input.is-checked .el-radio__inner,
|
||||
.el-tabs__active-bar,
|
||||
.el-checkbox__input.is-checked .el-checkbox__inner,
|
||||
.el-checkbox__input.is-indeterminate .el-checkbox__inner {
|
||||
background: #7438D5;
|
||||
border-color: #7438D5;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
|
||||
.all-btn-up,
|
||||
.all-btn-del,
|
||||
.all-btn-up1 {
|
||||
width: 60px;
|
||||
border: 1px solid #E5E5E5;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.all-btn-up1:hover {
|
||||
color: #7438D5;
|
||||
border-color: #7438D5;
|
||||
}
|
||||
|
||||
.all-btn-up:hover {
|
||||
color: #50E3C2;
|
||||
border-color: #50E3C2;
|
||||
}
|
||||
|
||||
.all-btn-del:hover {
|
||||
color: #FF5959;
|
||||
border-color: #FF5959;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
|
||||
.el-table th {
|
||||
background: #F9F9F9;
|
||||
padding: 7px 0;
|
||||
}
|
||||
|
||||
.el-tabs__item {
|
||||
width: 80px;
|
||||
padding: 0;
|
||||
padding-right: 20px;
|
||||
text-align: center;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.el-tabs__nav-wrap::after {
|
||||
height: 1px;
|
||||
}
|
||||
|
||||
.icon-top {
|
||||
margin-left: -5px;
|
||||
}
|
||||
|
||||
.edit-text,
|
||||
.copy-text,
|
||||
.del-text {
|
||||
cursor: pointer;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.copy-text {
|
||||
margin: 0 14px;
|
||||
}
|
||||
|
||||
.edit-text:hover {
|
||||
color: #7438D5;
|
||||
}
|
||||
|
||||
.copy-text:hover {
|
||||
color: #01CFA1;
|
||||
}
|
||||
|
||||
.del-text:hover {
|
||||
color: #FF5959;
|
||||
}
|
||||
|
||||
.el-button--primary,
|
||||
.el-button--primary:hover {
|
||||
background: #7438D5 !important;
|
||||
border-color: #7438D5 !important;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.el-popover {
|
||||
left: 46px;
|
||||
top: 10px;
|
||||
}
|
||||
|
||||
.choose-container {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
|
||||
.choose-price {
|
||||
width: 140px;
|
||||
}
|
||||
|
||||
.choose-price-line {
|
||||
margin: 0 14px;
|
||||
}
|
||||
|
||||
.el-input-group__append,
|
||||
.el-input-group__prepend {
|
||||
width: 30px;
|
||||
text-align: center;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.custom-table {
|
||||
padding: 20px 20px 30px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.custom-header {
|
||||
justify-content: space-between;
|
||||
margin-bottom: 14px;
|
||||
}
|
||||
|
||||
label {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.custom-refresh {
|
||||
width: 34px;
|
||||
height: 32px;
|
||||
border: 1px solid #E6E6E6;
|
||||
font-size: 16px;
|
||||
justify-content: center;
|
||||
margin-right: 20px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.page-container {
|
||||
justify-content: space-between;
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
/* .el-table td,
|
||||
.el-table th,
|
||||
.el-table th.is-leaf {
|
||||
border-color: #f7f7f7;
|
||||
padding: 0;
|
||||
} */
|
||||
|
||||
/* .el-table th .cell,
|
||||
.el-table td .cell {
|
||||
height: 44px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
line-height: 20px;
|
||||
justify-content: center;
|
||||
} */
|
||||
|
||||
/* .el-table th .cell {
|
||||
height: 40px;
|
||||
} */
|
||||
|
||||
.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;
|
||||
}
|
||||
|
||||
.seckill-btn {
|
||||
background: #FFF4F3;
|
||||
border: 1px solid #FECAC4;
|
||||
color: #FE9488;
|
||||
}
|
||||
|
||||
.groupon-btn {
|
||||
background: #F1EDFA;
|
||||
border: 1px solid #CEBEEC;
|
||||
color: #9C7EDA;
|
||||
}
|
||||
|
||||
.score-btn {
|
||||
background: #FDF5E8;
|
||||
border: 1px solid #F8DCAE;
|
||||
color: #F2BA5E;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
|
||||
.el-radio-button__inner {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.el-table__fixed-right::before,
|
||||
.el-table__fixed::before {
|
||||
height: 0 !important;
|
||||
}
|
||||
|
||||
.ellipsis-item {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 1;
|
||||
-webkit-box-orient: vertical;
|
||||
}
|
||||
|
||||
.el-table td,
|
||||
.el-table th {
|
||||
padding: 10px 0 9px;
|
||||
}
|
||||
|
||||
[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="goodsIndex" v-cloak v-loading="allAjax" @click.stop="hideup()">
|
||||
<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>
|
||||
<el-collapse-transition>
|
||||
<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="activityType=='all'?'choose-btn-active':''"
|
||||
@click="chooseOpt('all')">
|
||||
全部
|
||||
</div>
|
||||
<div class="common-btn choose-btn" :class="activityType=='groupon'?'choose-btn-active':''"
|
||||
@click="chooseOpt('groupon')">
|
||||
拼团
|
||||
</div>
|
||||
<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>
|
||||
</div>
|
||||
<div class="custom-choose-type display-flex">
|
||||
<div class="custom-choose-type-tip">
|
||||
价格区间
|
||||
</div>
|
||||
<div class="choose-price">
|
||||
<el-input v-model="priceFrist">
|
||||
<template slot="append">元</template>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="choose-price-line">
|
||||
-
|
||||
</div>
|
||||
<div class="choose-price">
|
||||
<el-input v-model="priceLast">
|
||||
<template slot="append">元</template>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="custom-choose-sub display-flex">
|
||||
<div class="common-btn choose-btn choose-btn-active" style="margin-right: 20px;"
|
||||
@click="goodsOpt('filter')">
|
||||
筛选
|
||||
</div>
|
||||
<div class="common-btn choose-btn" @click="goodsOpt('clear')">
|
||||
清空
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-collapse-transition>
|
||||
</div>
|
||||
<div class="custom-table">
|
||||
<div class="custom-header display-flex">
|
||||
<div class="display-flex">
|
||||
<div class="custom-refresh display-flex" @click="getData">
|
||||
<i class="el-icon-refresh"></i>
|
||||
</div>
|
||||
<div class="common-btn create-goods" @click="goodsOpt('create')">
|
||||
<i class="el-icon-plus"></i>
|
||||
<span>新增商品</span>
|
||||
</div>
|
||||
<div>
|
||||
<el-radio-group v-model="activeStatus" fill="#7536D0">
|
||||
<el-radio-button label="all">全部</el-radio-button>
|
||||
<el-radio-button label="up">已上架</el-radio-button>
|
||||
<el-radio-button label="down">已下架</el-radio-button>
|
||||
<el-radio-button label="hidden">已隐藏</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</div>
|
||||
<div class="common-btn recycle-btn" @click="goodsOpt('recycle')">
|
||||
<i class="fa fa-recycle"></i>
|
||||
回收站
|
||||
</div>
|
||||
</div>
|
||||
<div v-loading="tableAjax">
|
||||
<el-table ref="multipleTable" :data="goodsData" tooltip-effect="dark" style="width: 100%" border
|
||||
@selection-change="handleSelectionChange" :row-class-name="tableRowClassName"
|
||||
:cell-class-name="tableCellClassName" :header-cell-class-name="tableCellClassName"
|
||||
@row-dblclick="goodsOpt">
|
||||
<el-table-column type="selection" min-width="36">
|
||||
</el-table-column>
|
||||
<el-table-column label="ID" prop="id" min-width="70">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<div class="display-flex">
|
||||
<div>ID</div>
|
||||
<div class="display-flex sort-order">
|
||||
<i class="el-icon-sort-up icon-top"
|
||||
:style="{color:(sort=='id' && order=='asc')?'#7438d5':''}"
|
||||
@click="sortOrder('id','asc')"></i>
|
||||
<i class="el-icon-sort-down icon-bottom"
|
||||
:style="{color:(sort=='id' && order=='desc')?'#7438d5':''}"
|
||||
@click="sortOrder('id','desc')"></i>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="商品" min-width="330">
|
||||
<template slot-scope="scope">
|
||||
<div class="goods-name">
|
||||
<div class="goods-img">
|
||||
<el-image :src="Fast.api.cdnurl(scope.row.image)" fit="contain">
|
||||
<div slot="error" class="image-slot">
|
||||
<i class="el-icon-picture-outline"></i>
|
||||
</div>
|
||||
</el-image>
|
||||
</div>
|
||||
<div>
|
||||
<div class="ellipsis-item" style="margin-top: 8px;line-height: 1;">
|
||||
{{scope.row.title}}
|
||||
</div>
|
||||
<div class="display-flex" style="margin-top: 13px;">
|
||||
<span v-if="scope.row.is_sku==1"
|
||||
style="color: #444;margin-right: 12px;line-height: 20px;">
|
||||
{{scope.row.is_sku==1?'多规格':''}}
|
||||
</span>
|
||||
<div v-if="scope.row.activity_type || scope.row.app_type"
|
||||
class="activity-type display-flex">
|
||||
<div v-if="scope.row.app_type" class="activity-tags full-activity-tag">
|
||||
{{scope.row.app_type_text}}
|
||||
</div>
|
||||
<template v-for="(b,a) in scope.row.activity_type_text_arr">
|
||||
<template v-if="a=='groupon'">
|
||||
<div class="activity-tags groupon-activity-tag">
|
||||
拼团
|
||||
</div>
|
||||
</template>
|
||||
<div v-if="a=='seckill'" class="activity-tags seckill-activity-tag">{{b}}
|
||||
</div>
|
||||
<div v-if="a=='full_reduce' || a=='full_discount' || a=='free_shipping'"
|
||||
class="activity-tags full-activity-tag">{{b}}</div>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="price" label="价格" min-width="90">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<div class="display-flex">
|
||||
<div>价格</div>
|
||||
<div class="display-flex sort-order">
|
||||
<i class="el-icon-sort-up icon-top"
|
||||
:style="{color:(sort=='price' && order=='asc')?'#7438d5':''}"
|
||||
@click="sortOrder('price','asc')"></i>
|
||||
<i class="el-icon-sort-down icon-bottom"
|
||||
:style="{color:(sort=='price' && order=='desc')?'#7438d5':''}"
|
||||
@click="sortOrder('price','desc')"></i>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="sales" label="销量" min-width="100">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<div class="display-flex">
|
||||
<div>销量</div>
|
||||
<div class="display-flex sort-order">
|
||||
<i class="el-icon-sort-up icon-top"
|
||||
:style="{color:(sort=='sales' && order=='asc')?'#7438d5':''}"
|
||||
@click="sortOrder('sales','asc')"></i>
|
||||
<i class="el-icon-sort-down icon-bottom"
|
||||
:style="{color:(sort=='sales' && order=='desc')?'#7438d5':''}"
|
||||
@click="sortOrder('sales','desc')"></i>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="views" label="浏览量" min-width="90">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<div class="display-flex">
|
||||
<div>浏览量</div>
|
||||
<div class="display-flex sort-order">
|
||||
<i class="el-icon-sort-up icon-top"
|
||||
:style="{color:(sort=='views' && order=='asc')?'#7438d5':''}"
|
||||
@click="sortOrder('views','asc')"></i>
|
||||
<i class="el-icon-sort-down icon-bottom"
|
||||
:style="{color:(sort=='views' && order=='desc')?'#7438d5':''}"
|
||||
@click="sortOrder('views','desc')"></i>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="stock" label="库存" min-width="100">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<div class="display-flex">
|
||||
<div>库存</div>
|
||||
<div class="display-flex sort-order">
|
||||
<i class="el-icon-sort-up icon-top"
|
||||
:style="{color:(sort=='stock' && order=='asc')?'#7438d5':''}"
|
||||
@click="sortOrder('stock','asc')"></i>
|
||||
<i class="el-icon-sort-down icon-bottom"
|
||||
:style="{color:(sort=='stock' && order=='desc')?'#7438d5':''}"
|
||||
@click="sortOrder('stock','desc')"></i>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" min-width="148">
|
||||
<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 prop="weigh" label="排序" min-width="80">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<div class="display-flex">
|
||||
<div>排序</div>
|
||||
<div class="display-flex sort-order">
|
||||
<i class="el-icon-sort-up icon-top"
|
||||
:style="{color:(sort=='weigh' && order=='asc')?'#7438d5':''}"
|
||||
@click="sortOrder('weigh','asc')"></i>
|
||||
<i class="el-icon-sort-down icon-bottom"
|
||||
:style="{color:(sort=='weigh' && order=='desc')?'#7438d5':''}"
|
||||
@click="sortOrder('weigh','desc')"></i>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="操作" min-width="170">
|
||||
<template slot-scope="scope">
|
||||
<el-popover placement="bottom" width="120" trigger="hover">
|
||||
<div class="display-flex status-box">
|
||||
<div class="common-btn status-btn status-btn-1" v-if="scope.row.status!='up'"
|
||||
@click="editStatus(scope.row.id,'up')">
|
||||
上架
|
||||
</div>
|
||||
<div class="common-btn status-btn status-btn-2" v-if="scope.row.status!='down'"
|
||||
@click="editStatus(scope.row.id,'down')">
|
||||
下架
|
||||
</div>
|
||||
<div class="common-btn status-btn status-btn-3" v-if="scope.row.status!='hidden'"
|
||||
@click="editStatus(scope.row.id,'hidden')">
|
||||
隐藏
|
||||
</div>
|
||||
</div>
|
||||
<span slot="reference" style="cursor: pointer;margin-right: 12px;">
|
||||
<span style="color:#7438D5"
|
||||
v-if="scope.row.status=='up'">{{scope.row.status_text}}</span>
|
||||
<span style="color:#FF5959"
|
||||
v-if="scope.row.status=='down'">{{scope.row.status_text}}</span>
|
||||
<span style="color:#999"
|
||||
v-if="scope.row.status=='hidden'">{{scope.row.status_text}}</span>
|
||||
</span>
|
||||
</el-popover>
|
||||
<span class="edit-text" @click="goodsOpt('edit',scope.row.id)">编辑
|
||||
</span>
|
||||
<span class="copy-text" @click="goodsOpt('copy',scope.row.id)">复制
|
||||
</span>
|
||||
<span class="del-text" @click="goodsOpt('del',scope.row.id)">删除</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="page-container display-flex">
|
||||
<div class="display-flex">
|
||||
<div class="common-btn all-btn-up1" @click="goodsOpt('up',null)" v-if="activeStatus!='up'">
|
||||
上架
|
||||
</div>
|
||||
<div class="common-btn all-btn-up" @click="goodsOpt('down',null)" v-if="activeStatus!='down'">
|
||||
下架
|
||||
</div>
|
||||
<div class="common-btn all-btn-del" @click="goodsOpt('del',null)">
|
||||
删除
|
||||
</div>
|
||||
</div>
|
||||
<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,25 @@
|
||||
<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('shopro/goods/goods/restore')?'':'hide'}" href="javascript:;" data-url="shopro/goods/goods/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('shopro/goods/goods/destroy')?'':'hide'}" href="javascript:;" data-url="shopro/goods/goods/destroy" data-action="destroy"><i class="fa fa-times"></i> {:__('Destroy')}</a>
|
||||
<a class="btn btn-success btn-restoreall {:$auth->check('shopro/goods/goods/restore')?'':'hide'}" href="javascript:;" data-url="shopro/goods/goods/restore" title="{:__('Restore all')}"><i class="fa fa-rotate-left"></i> {:__('Restore all')}</a>
|
||||
<a class="btn btn-danger btn-destroyall {:$auth->check('shopro/goods/goods/destroy')?'':'hide'}" href="javascript:;" data-url="shopro/goods/goods/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('shopro/goods/goods/restore')}"
|
||||
data-operate-destroy="{:$auth->check('shopro/goods/goods/destroy')}"
|
||||
width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,308 @@
|
||||
<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: 200px;
|
||||
border-right: 1px solid #e6e6e6;
|
||||
height: 100vh;
|
||||
padding: 9px 20px 0;
|
||||
overflow: auto;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.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 {
|
||||
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 14px;
|
||||
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;
|
||||
}
|
||||
|
||||
.define-button {
|
||||
background: #6E3DC8;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.goods-image {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
border: 1px solid #E6E6E6;
|
||||
border-radius: 2px;
|
||||
margin-right: 8px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.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 {
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
.el-table td,
|
||||
.el-table th {
|
||||
padding: 5px 0 6px;
|
||||
}
|
||||
|
||||
.activity-text {
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
.activity-text:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.score-activity {
|
||||
color: #FF760D;
|
||||
}
|
||||
|
||||
.groupon-activity {
|
||||
color: #7438D5;
|
||||
}
|
||||
|
||||
.seckill-activity {
|
||||
color: #FF4F39;
|
||||
}
|
||||
|
||||
.full-activity {
|
||||
color: #F5AE6B;
|
||||
}
|
||||
|
||||
.single-select-table thead .el-table-column--selection .cell {
|
||||
display: none;
|
||||
}
|
||||
|
||||
[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 categoryData" :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':''">
|
||||
<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">
|
||||
<el-input size="small" placeholder="请输入搜索内容" v-model="searchWhere">
|
||||
<i slot="prefix" class="el-input__icon el-icon-search"></i>
|
||||
</el-input>
|
||||
</div>
|
||||
<div :class="multiple=='false'?'single-select-table':''">
|
||||
<el-table :data="goodsList" border @selection-change="multipleSelectionChange"
|
||||
ref="multipleTable" @select="SelectionChange">
|
||||
<el-table-column type="selection" width="40" v-if="multiple=='true'">
|
||||
</el-table-column>
|
||||
<el-table-column type="selection" width="40" v-if="multiple=='false'">
|
||||
<template slot-scope="scope">
|
||||
<el-checkbox v-model="scope.row.checked" @change="singleSelectionChange(scope.row)">
|
||||
</el-checkbox>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="id" label="ID" min-width="70">
|
||||
</el-table-column>
|
||||
<el-table-column label="商品名称" min-width="100" align="left">
|
||||
<template slot-scope="scope">
|
||||
<div class="goods-image">
|
||||
<el-image :src="Fast.api.cdnurl(scope.row.image)" fit="contain">
|
||||
<div slot="error" class="image-slot">
|
||||
<i class="el-icon-picture-outline"></i>
|
||||
</div>
|
||||
</el-image>
|
||||
</div>
|
||||
<div class="goods-title ellipsis-item">{{scope.row.title}}</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="参与活动" width="210">
|
||||
<template slot-scope="scope">
|
||||
<div v-if="scope.row.activity_type || scope.row.app_type" class="display-flex">
|
||||
<div class="activity-text score-activity" v-if="scope.row.app_type">
|
||||
{{scope.row.app_type_text}}
|
||||
</div>
|
||||
<template v-for="(b,a) in scope.row.activity_type_text_arr">
|
||||
<template v-if="a=='groupon'">
|
||||
<div class="activity-text groupon-activity">
|
||||
拼团
|
||||
</div>
|
||||
</template>
|
||||
<div v-if="a=='seckill' || a == 'robbuy'" class="activity-text seckill-activity">{{b}}</div>
|
||||
<div v-if="a=='full_reduce' || a=='full_discount' || a=='free_shipping'"
|
||||
class="activity-text full-activity">{{b}}</div>
|
||||
</template>
|
||||
</div>
|
||||
<div class="display-flex" v-else>-</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="stock" label="库存" width="80">
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dialog-footer display-flex">
|
||||
<div>
|
||||
<el-pagination background layout="prev, pager, next" :total="totalPage" @prev-click="changeClick"
|
||||
@next-click="changeClick" @current-change="changeClick" :current-page="currentPage">
|
||||
</el-pagination>
|
||||
</div>
|
||||
<div class="display-flex">
|
||||
<div @click="operation()" class="operation-button define-button">确定</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,194 @@
|
||||
<style>
|
||||
.skuChildrenBox {
|
||||
display: flex;
|
||||
padding: 0 15px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.skuChildren {
|
||||
margin-right: 10px;
|
||||
margin-top: 10px;
|
||||
line-height: 24px;
|
||||
color: rgba(80, 80, 80, 1);
|
||||
border-radius: 2px;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
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;
|
||||
}
|
||||
|
||||
.sku-img {
|
||||
cursor: pointer;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
|
||||
}
|
||||
|
||||
.legend-tip {
|
||||
color: #f00;
|
||||
font-size: 14px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
.all-edit-btn{
|
||||
width: 120px;
|
||||
margin: 20px auto;
|
||||
}
|
||||
.i-color{
|
||||
color: #f00;
|
||||
}
|
||||
.tooltip-inner{
|
||||
background: #fff;
|
||||
color: #999;
|
||||
border: 1px solid #999;
|
||||
box-shadow: 2px 2px 2px 2px #eee;
|
||||
}
|
||||
.tooltip.bottom .tooltip-arrow{
|
||||
border-bottom-color: #fff;
|
||||
}
|
||||
.tooltip-toggle{
|
||||
color: #000;
|
||||
}
|
||||
.tooltip-toggle:hover{
|
||||
color: #000;
|
||||
}
|
||||
.form-group.skuMain {
|
||||
background-color: #f5f5f5;
|
||||
padding: 10px 0;
|
||||
border: 1px solid #e5e5e5;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.sku-tips {
|
||||
padding: 16px;
|
||||
border: 1px solid #7536D0;
|
||||
border-radius: 5px;
|
||||
background-color: #F1EBFA;
|
||||
position: relative;
|
||||
margin-bottom: 26px;
|
||||
}
|
||||
|
||||
</style>
|
||||
<div class="tab-pane fade" id="skuPrce">
|
||||
<div class="widget-body no-padding">
|
||||
<div class="form-group">
|
||||
<legend>规格价格</legend>
|
||||
<div class="sku-tips">
|
||||
<p><strong>注意</strong></p>
|
||||
<p>1、请完善主规格子规格</p>
|
||||
<p>2、注意如果商品参与了拼团,秒杀,积分商城等活动,编辑规格可能会导致活动规格不可用,请谨慎编辑</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input type="hidden" name="is_reset_sku" v-model="isResetSku">
|
||||
<input type="hidden" name="sku[listData]" v-model="skuListData">
|
||||
<input type="hidden" name="sku[priceData]" v-model="skuPriceData">
|
||||
<label class="control-label col-xs-12 col-sm-2">添加主规格:</label>
|
||||
<div class="col-xs-4 col-sm-4">
|
||||
<input class="form-control" type="text" v-model="skuModal" placeholder="请输入主规格名称" maxlength="5">
|
||||
</div>
|
||||
<div class="col-xs-4 col-sm-4">
|
||||
<span class="btn btn-primary" @click="addMainSku">确认</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group skuMain" v-for="(s, k) in skuList">
|
||||
<label class="control-label col-xs-12 col-sm-2" style="padding-top: 0px;"><input class="form-control" style="width: 90%;" type="text" v-model="skuList[k]['name']" maxlength="5">:</label>
|
||||
<div class="col-xs-4 col-sm-4">
|
||||
<input class="form-control" type="text" v-model="childrenModal[k]" maxlength="22" placeholder="请输入子规格名称">
|
||||
</div>
|
||||
<div class="col-xs-4 col-sm-4">
|
||||
<span class="btn btn-primary" @click="addChildrenSku(k)">添加</span>
|
||||
<span class="btn btn-danger" @click="deleteMainSku(k)">移除</span>
|
||||
</div>
|
||||
<div class="col-xs-8 col-sm-8 col-xs-offset-2 col-sm-offset-2 skuChildrenBox">
|
||||
<div class="skuChildren" v-for="(sc, c) in s.children">
|
||||
<input class="form-control" style="width: 100px;" type="text" v-model="skuList[k]['children'][c]['name']" maxlength="22" placeholder="请输入子规格名称">
|
||||
<i class="fa fa-close skuChildren-close" @click="deleteChildrenSku(k,c)"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <span class="btn btn-primary" @click="buildSkuPriceTable">刷新规格表单</span> -->
|
||||
|
||||
<div>
|
||||
<div class="row" v-show="skuPrice.length && skuList.length">
|
||||
<div class="col-md-12">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<template v-for="(item, i) in skuList" :key="i">
|
||||
<th v-if="item.children.length" >
|
||||
{{item.name}}
|
||||
</th>
|
||||
</template>
|
||||
<th width="80">
|
||||
<span class="tooltip-toggle" data-toggle="tooltip" data-placement="bottom" title="批量设置">现价<i class="fa fa-indent i-color" @click="allEdit('price')"></i></span>
|
||||
</th>
|
||||
<th width="80">
|
||||
<span class="tooltip-toggle" data-toggle="tooltip" data-placement="bottom" title="批量设置">库存<i class="fa fa-indent i-color" @click="allEdit('stock')"></i></span>
|
||||
|
||||
</th>
|
||||
<th width="80">
|
||||
<span class="tooltip-toggle" data-toggle="tooltip" data-placement="bottom" title="批量设置">重量<i class="fa fa-indent i-color" @click="allEdit('weight')"></i></span>
|
||||
|
||||
</th>
|
||||
<th width="80">
|
||||
<span class="tooltip-toggle" data-toggle="tooltip" data-placement="bottom" title="批量设置">编码<i class="fa fa-indent i-color" @click="allEdit('sn')"></i></span>
|
||||
|
||||
</th>
|
||||
<th width="80">图片</th>
|
||||
<th width="80">当前状态</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="(item, i) in skuPrice" :key="i">
|
||||
<td v-for="(v, j) in item.goods_sku_text" :key="j">
|
||||
{{v}}
|
||||
</td>
|
||||
<td width="80">
|
||||
<input type="number" class="input-sm form-control" v-model="item.price">
|
||||
</td>
|
||||
<td width="80"><input type="number" v-model="item.stock" class="input-sm form-control">
|
||||
</td>
|
||||
<td width="80"><input type="number" v-model="item.weight" class="input-sm form-control">
|
||||
</td>
|
||||
<td width="80"><input type="text" v-model="item.sn" class="input-sm form-control"></td>
|
||||
<td width="80">
|
||||
<div style="width: 10px">
|
||||
<img v-if="item.image" :src="Fast.api.cdnurl(item.image)" class="choosePicture sku-img"
|
||||
:data-index="i">
|
||||
<button v-else type="button" class="btn-primary btn choosePicture"
|
||||
:data-index="i">
|
||||
上传图片
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
<td width="80"><span class="input-sm form-control status"
|
||||
@click="editStatus(i)">{{item.status=='up'?'上架':'下架'}}</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,144 @@
|
||||
<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;
|
||||
}
|
||||
|
||||
.sku-img {
|
||||
cursor: pointer;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
|
||||
}
|
||||
|
||||
.legend-tip {
|
||||
color: #f00;
|
||||
font-size: 14px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
.all-edit-btn{
|
||||
width: 120px;
|
||||
margin: 20px auto;
|
||||
}
|
||||
.i-color{
|
||||
color: #f00;
|
||||
}
|
||||
.tooltip-inner{
|
||||
background: #fff;
|
||||
color: #999;
|
||||
border: 1px solid #999;
|
||||
box-shadow: 2px 2px 2px 2px #eee;
|
||||
}
|
||||
.tooltip.bottom .tooltip-arrow{
|
||||
border-bottom-color: #fff;
|
||||
}
|
||||
.tooltip-show{
|
||||
color: #000;
|
||||
}
|
||||
.tooltip-show:hover{
|
||||
color: #000;
|
||||
}
|
||||
</style>
|
||||
<div class="tab-pane fade" id="skuPrce">
|
||||
<div class="widget-body no-padding">
|
||||
<input type="hidden" name="sku[listData]" v-model="skuListData">
|
||||
<input type="hidden" name="sku[priceData]" v-model="skuPriceData">
|
||||
|
||||
<div>
|
||||
<div class="row" v-show="skuPrice.length && skuList.length">
|
||||
<div class="col-md-12">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th v-for="(item, i) in skuList" :key="i">
|
||||
{{item.name}}
|
||||
</th>
|
||||
<th width="80">
|
||||
<span class="tooltip-show" data-toggle="tooltip" data-placement="bottom" title="批量设置">现价<i class="fa fa-indent i-color" @click="allEdit('price')"></i></span>
|
||||
</th>
|
||||
<th width="80">
|
||||
<span class="tooltip-show" data-toggle="tooltip" data-placement="bottom" title="批量设置">库存<i class="fa fa-indent i-color" @click="allEdit('stock')"></i></span>
|
||||
|
||||
</th>
|
||||
<th width="80">
|
||||
<span class="tooltip-show" data-toggle="tooltip" data-placement="bottom" title="批量设置">重量<i class="fa fa-indent i-color" @click="allEdit('weight')"></i></span>
|
||||
|
||||
</th>
|
||||
<th width="80">
|
||||
<span class="tooltip-show" data-toggle="tooltip" data-placement="bottom" title="批量设置">编码<i class="fa fa-indent i-color" @click="allEdit('sn')"></i></span>
|
||||
|
||||
</th>
|
||||
<th width="80">图片</th>
|
||||
<th width="80">当前状态</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="(item, i) in skuPrice" :key="i">
|
||||
<td v-for="(v, j) in item.goods_sku_text" :key="j">
|
||||
{{v}}
|
||||
</td>
|
||||
<td width="80">
|
||||
<input type="text" class="input-sm form-control" v-model="item.price">
|
||||
</td>
|
||||
<td width="80"><input type="text" v-model="item.stock" class="input-sm form-control">
|
||||
</td>
|
||||
<td width="80"><input type="text" v-model="item.weight" class="input-sm form-control">
|
||||
</td>
|
||||
<td width="80"><input type="text" v-model="item.sn" class="input-sm form-control"></td>
|
||||
<td width="80">
|
||||
<div style="width: 10px">
|
||||
<img v-if="item.image" :src="Fast.api.cdnurl(item.image)" class="choosePicture sku-img"
|
||||
:data-index="i">
|
||||
<button v-else type="button" class="btn-primary btn choosePicture"
|
||||
:data-index="i">
|
||||
上传图片
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
<td width="80"><span class="input-sm form-control status"
|
||||
@click="editStatus(i)">{{item.status=='up'?'上架':'下架'}}</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
文件差异内容过多而无法显示
加载差异
文件差异内容过多而无法显示
加载差异
@@ -0,0 +1,733 @@
|
||||
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
|
||||
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
|
||||
<style>
|
||||
#goodsIndex {
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.el-pagination,
|
||||
.el-pagination__total,
|
||||
.el-input__inner,
|
||||
.el-pagination__jump {
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
|
||||
.goods-name {
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
.goods-img {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
margin-right: 10px;
|
||||
border: 1px solid #e6e6e6;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.el-table,
|
||||
.el-table thead,
|
||||
.el-table th {
|
||||
color: #444;
|
||||
font-weight: 500 !important;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.display-flex {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
|
||||
.label-auto {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.el-radio-button__inner,
|
||||
.el-radio-button__inner:hover {
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
width: 80px;
|
||||
text-align: center;
|
||||
padding: 0;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.el-radio__input.is-checked+.el-radio__label,
|
||||
.el-tabs__item.is-active,
|
||||
.el-tabs__item:hover,
|
||||
.el-pager li.active,
|
||||
.el-select-dropdown__item.selected {
|
||||
color: #7438D5;
|
||||
}
|
||||
|
||||
.el-radio__input.is-checked .el-radio__inner,
|
||||
.el-tabs__active-bar,
|
||||
.el-checkbox__input.is-checked .el-checkbox__inner,
|
||||
.el-checkbox__input.is-indeterminate .el-checkbox__inner {
|
||||
background: #7438D5;
|
||||
border-color: #7438D5;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
|
||||
.all-btn-up,
|
||||
.all-btn-del,
|
||||
.all-btn-up1 {
|
||||
width: 60px;
|
||||
border: 1px solid #E5E5E5;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.all-btn-up1:hover {
|
||||
color: #7438D5;
|
||||
border-color: #7438D5;
|
||||
}
|
||||
|
||||
.all-btn-up:hover {
|
||||
color: #50E3C2;
|
||||
border-color: #50E3C2;
|
||||
}
|
||||
|
||||
.all-btn-del:hover {
|
||||
color: #FF5959;
|
||||
border-color: #FF5959;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
|
||||
.el-table th {
|
||||
background: #F9F9F9;
|
||||
padding: 7px 0;
|
||||
}
|
||||
|
||||
.el-tabs__item {
|
||||
width: 80px;
|
||||
padding: 0;
|
||||
padding-right: 20px;
|
||||
text-align: center;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.el-tabs__nav-wrap::after {
|
||||
height: 1px;
|
||||
}
|
||||
|
||||
.icon-top {
|
||||
margin-left: -5px;
|
||||
}
|
||||
|
||||
.edit-text,
|
||||
.copy-text,
|
||||
.del-text {
|
||||
cursor: pointer;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.copy-text {
|
||||
margin: 0 14px;
|
||||
}
|
||||
|
||||
.edit-text:hover {
|
||||
color: #7438D5;
|
||||
}
|
||||
|
||||
.copy-text:hover {
|
||||
color: #01CFA1;
|
||||
}
|
||||
|
||||
.del-text:hover {
|
||||
color: #FF5959;
|
||||
}
|
||||
|
||||
.el-button--primary,
|
||||
.el-button--primary:hover {
|
||||
background: #7438D5 !important;
|
||||
border-color: #7438D5 !important;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.el-popover {
|
||||
left: 46px;
|
||||
top: 10px;
|
||||
}
|
||||
|
||||
.choose-container {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
|
||||
.choose-price {
|
||||
width: 140px;
|
||||
}
|
||||
|
||||
.choose-price-line {
|
||||
margin: 0 14px;
|
||||
}
|
||||
|
||||
.el-input-group__append,
|
||||
.el-input-group__prepend {
|
||||
width: 30px;
|
||||
text-align: center;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.custom-table {
|
||||
padding: 20px 20px 30px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.custom-header {
|
||||
justify-content: space-between;
|
||||
margin-bottom: 14px;
|
||||
}
|
||||
|
||||
label {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.custom-refresh {
|
||||
width: 34px;
|
||||
height: 32px;
|
||||
border: 1px solid #E6E6E6;
|
||||
font-size: 16px;
|
||||
justify-content: center;
|
||||
margin-right: 20px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.page-container {
|
||||
justify-content: space-between;
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
/* .el-table td,
|
||||
.el-table th,
|
||||
.el-table th.is-leaf {
|
||||
border-color: #f7f7f7;
|
||||
padding: 0;
|
||||
} */
|
||||
|
||||
/* .el-table th .cell,
|
||||
.el-table td .cell {
|
||||
height: 44px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
line-height: 20px;
|
||||
justify-content: center;
|
||||
} */
|
||||
|
||||
/* .el-table th .cell {
|
||||
height: 40px;
|
||||
} */
|
||||
|
||||
.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;
|
||||
}
|
||||
|
||||
.seckill-btn {
|
||||
background: #FFF4F3;
|
||||
border: 1px solid #FECAC4;
|
||||
color: #FE9488;
|
||||
}
|
||||
|
||||
.groupon-btn {
|
||||
background: #F1EDFA;
|
||||
border: 1px solid #CEBEEC;
|
||||
color: #9C7EDA;
|
||||
}
|
||||
|
||||
.score-btn {
|
||||
background: #FDF5E8;
|
||||
border: 1px solid #F8DCAE;
|
||||
color: #F2BA5E;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
|
||||
.el-radio-button__inner {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.el-table__fixed-right::before,
|
||||
.el-table__fixed::before {
|
||||
height: 0 !important;
|
||||
}
|
||||
|
||||
.ellipsis-item {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 1;
|
||||
-webkit-box-orient: vertical;
|
||||
}
|
||||
|
||||
.el-table td,
|
||||
.el-table th {
|
||||
padding: 10px 0 9px;
|
||||
}
|
||||
|
||||
[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="goodsIndex" v-cloak v-loading="allAjax" @click.stop="hideup()">
|
||||
<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>
|
||||
<el-collapse-transition>
|
||||
<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="activityType=='all'?'choose-btn-active':''"
|
||||
@click="chooseOpt('all')">
|
||||
全部
|
||||
</div>
|
||||
<div class="common-btn choose-btn" :class="activityType=='groupon'?'choose-btn-active':''"
|
||||
@click="chooseOpt('groupon')">
|
||||
拼团
|
||||
</div>
|
||||
<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>
|
||||
</div>
|
||||
<div class="custom-choose-type display-flex">
|
||||
<div class="custom-choose-type-tip">
|
||||
价格区间
|
||||
</div>
|
||||
<div class="choose-price">
|
||||
<el-input v-model="priceFrist">
|
||||
<template slot="append">元</template>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="choose-price-line">
|
||||
-
|
||||
</div>
|
||||
<div class="choose-price">
|
||||
<el-input v-model="priceLast">
|
||||
<template slot="append">元</template>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="custom-choose-sub display-flex">
|
||||
<div class="common-btn choose-btn choose-btn-active" style="margin-right: 20px;"
|
||||
@click="goodsOpt('filter')">
|
||||
筛选
|
||||
</div>
|
||||
<div class="common-btn choose-btn" @click="goodsOpt('clear')">
|
||||
清空
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-collapse-transition>
|
||||
</div>
|
||||
<div class="custom-table">
|
||||
<div class="custom-header display-flex">
|
||||
<div class="display-flex">
|
||||
<div class="custom-refresh display-flex" @click="getData">
|
||||
<i class="el-icon-refresh"></i>
|
||||
</div>
|
||||
<div class="common-btn create-goods" @click="goodsOpt('create')">
|
||||
<i class="el-icon-plus"></i>
|
||||
<span>新增商品</span>
|
||||
</div>
|
||||
<div>
|
||||
<el-radio-group v-model="activeStatus" fill="#7536D0">
|
||||
<el-radio-button label="all">全部</el-radio-button>
|
||||
<el-radio-button label="up">已上架</el-radio-button>
|
||||
<el-radio-button label="down">已下架</el-radio-button>
|
||||
<el-radio-button label="hidden">已隐藏</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
<div class="custom-search" style="margin-left: 10px;">
|
||||
<el-input placeholder="请输入标题" suffix-icon="el-icon-search" v-model="searchKey">
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="common-btn choose-btn choose-btn-active" style="margin-left: 10px; margin-right: 20px;"
|
||||
@click="goodsOpt('filter')">
|
||||
筛选
|
||||
</div>
|
||||
</div>
|
||||
<div class="common-btn recycle-btn" @click="goodsOpt('recycle')">
|
||||
<i class="fa fa-recycle"></i>
|
||||
回收站
|
||||
</div>
|
||||
</div>
|
||||
<div v-loading="tableAjax">
|
||||
<el-table ref="multipleTable" :data="goodsData" tooltip-effect="dark" style="width: 100%" border
|
||||
@selection-change="handleSelectionChange" :row-class-name="tableRowClassName"
|
||||
:cell-class-name="tableCellClassName" :header-cell-class-name="tableCellClassName"
|
||||
@row-dblclick="goodsOpt">
|
||||
<el-table-column type="selection" min-width="36">
|
||||
</el-table-column>
|
||||
<el-table-column label="ID" prop="id" min-width="70">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<div class="display-flex">
|
||||
<div>ID</div>
|
||||
<div class="display-flex sort-order">
|
||||
<i class="el-icon-sort-up icon-top"
|
||||
:style="{color:(sort=='id' && order=='asc')?'#7438d5':''}"
|
||||
@click="sortOrder('id','asc')"></i>
|
||||
<i class="el-icon-sort-down icon-bottom"
|
||||
:style="{color:(sort=='id' && order=='desc')?'#7438d5':''}"
|
||||
@click="sortOrder('id','desc')"></i>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="商品" min-width="330">
|
||||
<template slot-scope="scope">
|
||||
<div class="goods-name">
|
||||
<div class="goods-img">
|
||||
<el-image :src="Fast.api.cdnurl(scope.row.image)" fit="contain">
|
||||
<div slot="error" class="image-slot">
|
||||
<i class="el-icon-picture-outline"></i>
|
||||
</div>
|
||||
</el-image>
|
||||
</div>
|
||||
<div>
|
||||
<div class="ellipsis-item" style="margin-top: 8px;line-height: 1;">
|
||||
{{scope.row.title}}
|
||||
</div>
|
||||
<div class="display-flex" style="margin-top: 13px;">
|
||||
<span v-if="scope.row.is_sku==1"
|
||||
style="color: #444;margin-right: 12px;line-height: 20px;">
|
||||
{{scope.row.is_sku==1?'多规格':''}}
|
||||
</span>
|
||||
<div v-if="scope.row.activity_type || scope.row.app_type"
|
||||
class="activity-type display-flex">
|
||||
<div v-if="scope.row.app_type" class="activity-tags full-activity-tag">
|
||||
{{scope.row.app_type_text}}
|
||||
</div>
|
||||
<template v-for="(b,a) in scope.row.activity_type_text_arr">
|
||||
<template v-if="a=='groupon'">
|
||||
<div class="activity-tags groupon-activity-tag">
|
||||
拼团
|
||||
</div>
|
||||
</template>
|
||||
<div v-if="a=='seckill'" class="activity-tags seckill-activity-tag">{{b}}
|
||||
</div>
|
||||
<div v-if="a=='full_reduce' || a=='full_discount' || a=='free_shipping'"
|
||||
class="activity-tags full-activity-tag">{{b}}</div>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="price" label="价格" min-width="90">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<div class="display-flex">
|
||||
<div>价格</div>
|
||||
<div class="display-flex sort-order">
|
||||
<i class="el-icon-sort-up icon-top"
|
||||
:style="{color:(sort=='price' && order=='asc')?'#7438d5':''}"
|
||||
@click="sortOrder('price','asc')"></i>
|
||||
<i class="el-icon-sort-down icon-bottom"
|
||||
:style="{color:(sort=='price' && order=='desc')?'#7438d5':''}"
|
||||
@click="sortOrder('price','desc')"></i>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="sales" label="销量" min-width="100">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<div class="display-flex">
|
||||
<div>销量</div>
|
||||
<div class="display-flex sort-order">
|
||||
<i class="el-icon-sort-up icon-top"
|
||||
:style="{color:(sort=='sales' && order=='asc')?'#7438d5':''}"
|
||||
@click="sortOrder('sales','asc')"></i>
|
||||
<i class="el-icon-sort-down icon-bottom"
|
||||
:style="{color:(sort=='sales' && order=='desc')?'#7438d5':''}"
|
||||
@click="sortOrder('sales','desc')"></i>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="views" label="浏览量" min-width="90">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<div class="display-flex">
|
||||
<div>浏览量</div>
|
||||
<div class="display-flex sort-order">
|
||||
<i class="el-icon-sort-up icon-top"
|
||||
:style="{color:(sort=='views' && order=='asc')?'#7438d5':''}"
|
||||
@click="sortOrder('views','asc')"></i>
|
||||
<i class="el-icon-sort-down icon-bottom"
|
||||
:style="{color:(sort=='views' && order=='desc')?'#7438d5':''}"
|
||||
@click="sortOrder('views','desc')"></i>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="stock" label="库存" min-width="100">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<div class="display-flex">
|
||||
<div>库存</div>
|
||||
<div class="display-flex sort-order">
|
||||
<i class="el-icon-sort-up icon-top"
|
||||
:style="{color:(sort=='stock' && order=='asc')?'#7438d5':''}"
|
||||
@click="sortOrder('stock','asc')"></i>
|
||||
<i class="el-icon-sort-down icon-bottom"
|
||||
:style="{color:(sort=='stock' && order=='desc')?'#7438d5':''}"
|
||||
@click="sortOrder('stock','desc')"></i>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" min-width="148">
|
||||
<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 prop="weigh" label="排序" min-width="80">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<div class="display-flex">
|
||||
<div>排序</div>
|
||||
<div class="display-flex sort-order">
|
||||
<i class="el-icon-sort-up icon-top"
|
||||
:style="{color:(sort=='weigh' && order=='asc')?'#7438d5':''}"
|
||||
@click="sortOrder('weigh','asc')"></i>
|
||||
<i class="el-icon-sort-down icon-bottom"
|
||||
:style="{color:(sort=='weigh' && order=='desc')?'#7438d5':''}"
|
||||
@click="sortOrder('weigh','desc')"></i>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="操作" min-width="170">
|
||||
<template slot-scope="scope">
|
||||
<el-popover placement="bottom" width="120" trigger="hover">
|
||||
<div class="display-flex status-box">
|
||||
<div class="common-btn status-btn status-btn-1" v-if="scope.row.status!='up'"
|
||||
@click="editStatus(scope.row.id,'up')">
|
||||
上架
|
||||
</div>
|
||||
<div class="common-btn status-btn status-btn-2" v-if="scope.row.status!='down'"
|
||||
@click="editStatus(scope.row.id,'down')">
|
||||
下架
|
||||
</div>
|
||||
<div class="common-btn status-btn status-btn-3" v-if="scope.row.status!='hidden'"
|
||||
@click="editStatus(scope.row.id,'hidden')">
|
||||
隐藏
|
||||
</div>
|
||||
</div>
|
||||
<span slot="reference" style="cursor: pointer;margin-right: 12px;">
|
||||
<span style="color:#7438D5"
|
||||
v-if="scope.row.status=='up'">{{scope.row.status_text}}</span>
|
||||
<span style="color:#FF5959"
|
||||
v-if="scope.row.status=='down'">{{scope.row.status_text}}</span>
|
||||
<span style="color:#999"
|
||||
v-if="scope.row.status=='hidden'">{{scope.row.status_text}}</span>
|
||||
</span>
|
||||
</el-popover>
|
||||
<span class="edit-text" @click="goodsOpt('edit',scope.row.id)">编辑
|
||||
</span>
|
||||
<span class="copy-text" @click="goodsOpt('copy',scope.row.id)">复制
|
||||
</span>
|
||||
<span class="del-text" @click="goodsOpt('del',scope.row.id)">删除</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="page-container display-flex">
|
||||
<div class="display-flex">
|
||||
<div class="common-btn all-btn-up1" @click="goodsOpt('up',null)" v-if="activeStatus!='up'">
|
||||
上架
|
||||
</div>
|
||||
<div class="common-btn all-btn-up" @click="goodsOpt('down',null)" v-if="activeStatus!='down'">
|
||||
下架
|
||||
</div>
|
||||
<div class="common-btn all-btn-del" @click="goodsOpt('del',null)">
|
||||
删除
|
||||
</div>
|
||||
</div>
|
||||
<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,25 @@
|
||||
<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('shopro/goods/goods/restore')?'':'hide'}" href="javascript:;" data-url="shopro/goods/goods/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('shopro/goods/goods/destroy')?'':'hide'}" href="javascript:;" data-url="shopro/goods/goods/destroy" data-action="destroy"><i class="fa fa-times"></i> {:__('Destroy')}</a>
|
||||
<a class="btn btn-success btn-restoreall {:$auth->check('shopro/goods/goods/restore')?'':'hide'}" href="javascript:;" data-url="shopro/goods/goods/restore" title="{:__('Restore all')}"><i class="fa fa-rotate-left"></i> {:__('Restore all')}</a>
|
||||
<a class="btn btn-danger btn-destroyall {:$auth->check('shopro/goods/goods/destroy')?'':'hide'}" href="javascript:;" data-url="shopro/goods/goods/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('shopro/goods/goods/restore')}"
|
||||
data-operate-destroy="{:$auth->check('shopro/goods/goods/destroy')}"
|
||||
width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,308 @@
|
||||
<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: 200px;
|
||||
border-right: 1px solid #e6e6e6;
|
||||
height: 100vh;
|
||||
padding: 9px 20px 0;
|
||||
overflow: auto;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.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 {
|
||||
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 14px;
|
||||
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;
|
||||
}
|
||||
|
||||
.define-button {
|
||||
background: #6E3DC8;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.goods-image {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
border: 1px solid #E6E6E6;
|
||||
border-radius: 2px;
|
||||
margin-right: 8px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.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 {
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
.el-table td,
|
||||
.el-table th {
|
||||
padding: 5px 0 6px;
|
||||
}
|
||||
|
||||
.activity-text {
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
.activity-text:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.score-activity {
|
||||
color: #FF760D;
|
||||
}
|
||||
|
||||
.groupon-activity {
|
||||
color: #7438D5;
|
||||
}
|
||||
|
||||
.seckill-activity {
|
||||
color: #FF4F39;
|
||||
}
|
||||
|
||||
.full-activity {
|
||||
color: #F5AE6B;
|
||||
}
|
||||
|
||||
.single-select-table thead .el-table-column--selection .cell {
|
||||
display: none;
|
||||
}
|
||||
|
||||
[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 categoryData" :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':''">
|
||||
<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">
|
||||
<el-input size="small" placeholder="请输入搜索内容" v-model="searchWhere">
|
||||
<i slot="prefix" class="el-input__icon el-icon-search"></i>
|
||||
</el-input>
|
||||
</div>
|
||||
<div :class="multiple=='false'?'single-select-table':''">
|
||||
<el-table :data="goodsList" border @selection-change="multipleSelectionChange"
|
||||
ref="multipleTable" @select="SelectionChange">
|
||||
<el-table-column type="selection" width="40" v-if="multiple=='true'">
|
||||
</el-table-column>
|
||||
<el-table-column type="selection" width="40" v-if="multiple=='false'">
|
||||
<template slot-scope="scope">
|
||||
<el-checkbox v-model="scope.row.checked" @change="singleSelectionChange(scope.row)">
|
||||
</el-checkbox>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="id" label="ID" min-width="70">
|
||||
</el-table-column>
|
||||
<el-table-column label="商品名称" min-width="100" align="left">
|
||||
<template slot-scope="scope">
|
||||
<div class="goods-image">
|
||||
<el-image :src="Fast.api.cdnurl(scope.row.image)" fit="contain">
|
||||
<div slot="error" class="image-slot">
|
||||
<i class="el-icon-picture-outline"></i>
|
||||
</div>
|
||||
</el-image>
|
||||
</div>
|
||||
<div class="goods-title ellipsis-item">{{scope.row.title}}</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="参与活动" width="210">
|
||||
<template slot-scope="scope">
|
||||
<div v-if="scope.row.activity_type || scope.row.app_type" class="display-flex">
|
||||
<div class="activity-text score-activity" v-if="scope.row.app_type">
|
||||
{{scope.row.app_type_text}}
|
||||
</div>
|
||||
<template v-for="(b,a) in scope.row.activity_type_text_arr">
|
||||
<template v-if="a=='groupon'">
|
||||
<div class="activity-text groupon-activity">
|
||||
拼团
|
||||
</div>
|
||||
</template>
|
||||
<div v-if="a=='seckill' || a=='timer' || a == 'robbuy' || a == 'promote'" class="activity-text seckill-activity">{{b}}</div>
|
||||
<div v-if="a=='full_reduce' || a=='full_discount' || a=='free_shipping'"
|
||||
class="activity-text full-activity">{{b}}</div>
|
||||
</template>
|
||||
</div>
|
||||
<div class="display-flex" v-else>-</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="stock" label="库存" width="80">
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dialog-footer display-flex">
|
||||
<div>
|
||||
<el-pagination background layout="prev, pager, next" :total="totalPage" @prev-click="changeClick"
|
||||
@next-click="changeClick" @current-change="changeClick" :current-page="currentPage">
|
||||
</el-pagination>
|
||||
</div>
|
||||
<div class="display-flex">
|
||||
<div @click="operation()" class="operation-button define-button">确定</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,194 @@
|
||||
<style>
|
||||
.skuChildrenBox {
|
||||
display: flex;
|
||||
padding: 0 15px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.skuChildren {
|
||||
margin-right: 10px;
|
||||
margin-top: 10px;
|
||||
line-height: 24px;
|
||||
color: rgba(80, 80, 80, 1);
|
||||
border-radius: 2px;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
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;
|
||||
}
|
||||
|
||||
.sku-img {
|
||||
cursor: pointer;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
|
||||
}
|
||||
|
||||
.legend-tip {
|
||||
color: #f00;
|
||||
font-size: 14px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
.all-edit-btn{
|
||||
width: 120px;
|
||||
margin: 20px auto;
|
||||
}
|
||||
.i-color{
|
||||
color: #f00;
|
||||
}
|
||||
.tooltip-inner{
|
||||
background: #fff;
|
||||
color: #999;
|
||||
border: 1px solid #999;
|
||||
box-shadow: 2px 2px 2px 2px #eee;
|
||||
}
|
||||
.tooltip.bottom .tooltip-arrow{
|
||||
border-bottom-color: #fff;
|
||||
}
|
||||
.tooltip-toggle{
|
||||
color: #000;
|
||||
}
|
||||
.tooltip-toggle:hover{
|
||||
color: #000;
|
||||
}
|
||||
.form-group.skuMain {
|
||||
background-color: #f5f5f5;
|
||||
padding: 10px 0;
|
||||
border: 1px solid #e5e5e5;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.sku-tips {
|
||||
padding: 16px;
|
||||
border: 1px solid #7536D0;
|
||||
border-radius: 5px;
|
||||
background-color: #F1EBFA;
|
||||
position: relative;
|
||||
margin-bottom: 26px;
|
||||
}
|
||||
|
||||
</style>
|
||||
<div class="tab-pane fade" id="skuPrce">
|
||||
<div class="widget-body no-padding">
|
||||
<div class="form-group">
|
||||
<legend>规格价格</legend>
|
||||
<div class="sku-tips">
|
||||
<p><strong>注意</strong></p>
|
||||
<p>1、请完善主规格子规格</p>
|
||||
<p>2、注意如果商品参与了拼团,秒杀,积分商城等活动,编辑规格可能会导致活动规格不可用,请谨慎编辑</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input type="hidden" name="is_reset_sku" v-model="isResetSku">
|
||||
<input type="hidden" name="sku[listData]" v-model="skuListData">
|
||||
<input type="hidden" name="sku[priceData]" v-model="skuPriceData">
|
||||
<label class="control-label col-xs-12 col-sm-2">添加主规格:</label>
|
||||
<div class="col-xs-4 col-sm-4">
|
||||
<input class="form-control" type="text" v-model="skuModal" placeholder="请输入主规格名称" maxlength="5">
|
||||
</div>
|
||||
<div class="col-xs-4 col-sm-4">
|
||||
<span class="btn btn-primary" @click="addMainSku">确认</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group skuMain" v-for="(s, k) in skuList">
|
||||
<label class="control-label col-xs-12 col-sm-2" style="padding-top: 0px;"><input class="form-control" style="width: 90%;" type="text" v-model="skuList[k]['name']" maxlength="5">:</label>
|
||||
<div class="col-xs-4 col-sm-4">
|
||||
<input class="form-control" type="text" v-model="childrenModal[k]" maxlength="22" placeholder="请输入子规格名称">
|
||||
</div>
|
||||
<div class="col-xs-4 col-sm-4">
|
||||
<span class="btn btn-primary" @click="addChildrenSku(k)">添加</span>
|
||||
<span class="btn btn-danger" @click="deleteMainSku(k)">移除</span>
|
||||
</div>
|
||||
<div class="col-xs-8 col-sm-8 col-xs-offset-2 col-sm-offset-2 skuChildrenBox">
|
||||
<div class="skuChildren" v-for="(sc, c) in s.children">
|
||||
<input class="form-control" style="width: 100px;" type="text" v-model="skuList[k]['children'][c]['name']" maxlength="22" placeholder="请输入子规格名称">
|
||||
<i class="fa fa-close skuChildren-close" @click="deleteChildrenSku(k,c)"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <span class="btn btn-primary" @click="buildSkuPriceTable">刷新规格表单</span> -->
|
||||
|
||||
<div>
|
||||
<div class="row" v-show="skuPrice.length && skuList.length">
|
||||
<div class="col-md-12">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<template v-for="(item, i) in skuList" :key="i">
|
||||
<th v-if="item.children.length" >
|
||||
{{item.name}}
|
||||
</th>
|
||||
</template>
|
||||
<th width="80">
|
||||
<span class="tooltip-toggle" data-toggle="tooltip" data-placement="bottom" title="批量设置">现价<i class="fa fa-indent i-color" @click="allEdit('price')"></i></span>
|
||||
</th>
|
||||
<th width="80">
|
||||
<span class="tooltip-toggle" data-toggle="tooltip" data-placement="bottom" title="批量设置">库存<i class="fa fa-indent i-color" @click="allEdit('stock')"></i></span>
|
||||
|
||||
</th>
|
||||
<th width="80">
|
||||
<span class="tooltip-toggle" data-toggle="tooltip" data-placement="bottom" title="批量设置">重量<i class="fa fa-indent i-color" @click="allEdit('weight')"></i></span>
|
||||
|
||||
</th>
|
||||
<th width="80">
|
||||
<span class="tooltip-toggle" data-toggle="tooltip" data-placement="bottom" title="批量设置">编码<i class="fa fa-indent i-color" @click="allEdit('sn')"></i></span>
|
||||
|
||||
</th>
|
||||
<th width="80">图片</th>
|
||||
<th width="80">当前状态</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="(item, i) in skuPrice" :key="i">
|
||||
<td v-for="(v, j) in item.goods_sku_text" :key="j">
|
||||
{{v}}
|
||||
</td>
|
||||
<td width="80">
|
||||
<input type="number" class="input-sm form-control" v-model="item.price">
|
||||
</td>
|
||||
<td width="80"><input type="number" v-model="item.stock" class="input-sm form-control">
|
||||
</td>
|
||||
<td width="80"><input type="number" v-model="item.weight" class="input-sm form-control">
|
||||
</td>
|
||||
<td width="80"><input type="text" v-model="item.sn" class="input-sm form-control"></td>
|
||||
<td width="80">
|
||||
<div style="width: 10px">
|
||||
<img v-if="item.image" :src="Fast.api.cdnurl(item.image)" class="choosePicture sku-img"
|
||||
:data-index="i">
|
||||
<button v-else type="button" class="btn-primary btn choosePicture"
|
||||
:data-index="i">
|
||||
上传图片
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
<td width="80"><span class="input-sm form-control status"
|
||||
@click="editStatus(i)">{{item.status=='up'?'上架':'下架'}}</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,144 @@
|
||||
<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;
|
||||
}
|
||||
|
||||
.sku-img {
|
||||
cursor: pointer;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
|
||||
}
|
||||
|
||||
.legend-tip {
|
||||
color: #f00;
|
||||
font-size: 14px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
.all-edit-btn{
|
||||
width: 120px;
|
||||
margin: 20px auto;
|
||||
}
|
||||
.i-color{
|
||||
color: #f00;
|
||||
}
|
||||
.tooltip-inner{
|
||||
background: #fff;
|
||||
color: #999;
|
||||
border: 1px solid #999;
|
||||
box-shadow: 2px 2px 2px 2px #eee;
|
||||
}
|
||||
.tooltip.bottom .tooltip-arrow{
|
||||
border-bottom-color: #fff;
|
||||
}
|
||||
.tooltip-show{
|
||||
color: #000;
|
||||
}
|
||||
.tooltip-show:hover{
|
||||
color: #000;
|
||||
}
|
||||
</style>
|
||||
<div class="tab-pane fade" id="skuPrce">
|
||||
<div class="widget-body no-padding">
|
||||
<input type="hidden" name="sku[listData]" v-model="skuListData">
|
||||
<input type="hidden" name="sku[priceData]" v-model="skuPriceData">
|
||||
|
||||
<div>
|
||||
<div class="row" v-show="skuPrice.length && skuList.length">
|
||||
<div class="col-md-12">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th v-for="(item, i) in skuList" :key="i">
|
||||
{{item.name}}
|
||||
</th>
|
||||
<th width="80">
|
||||
<span class="tooltip-show" data-toggle="tooltip" data-placement="bottom" title="批量设置">现价<i class="fa fa-indent i-color" @click="allEdit('price')"></i></span>
|
||||
</th>
|
||||
<th width="80">
|
||||
<span class="tooltip-show" data-toggle="tooltip" data-placement="bottom" title="批量设置">库存<i class="fa fa-indent i-color" @click="allEdit('stock')"></i></span>
|
||||
|
||||
</th>
|
||||
<th width="80">
|
||||
<span class="tooltip-show" data-toggle="tooltip" data-placement="bottom" title="批量设置">重量<i class="fa fa-indent i-color" @click="allEdit('weight')"></i></span>
|
||||
|
||||
</th>
|
||||
<th width="80">
|
||||
<span class="tooltip-show" data-toggle="tooltip" data-placement="bottom" title="批量设置">编码<i class="fa fa-indent i-color" @click="allEdit('sn')"></i></span>
|
||||
|
||||
</th>
|
||||
<th width="80">图片</th>
|
||||
<th width="80">当前状态</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="(item, i) in skuPrice" :key="i">
|
||||
<td v-for="(v, j) in item.goods_sku_text" :key="j">
|
||||
{{v}}
|
||||
</td>
|
||||
<td width="80">
|
||||
<input type="text" class="input-sm form-control" v-model="item.price">
|
||||
</td>
|
||||
<td width="80"><input type="text" v-model="item.stock" class="input-sm form-control">
|
||||
</td>
|
||||
<td width="80"><input type="text" v-model="item.weight" class="input-sm form-control">
|
||||
</td>
|
||||
<td width="80"><input type="text" v-model="item.sn" class="input-sm form-control"></td>
|
||||
<td width="80">
|
||||
<div style="width: 10px">
|
||||
<img v-if="item.image" :src="Fast.api.cdnurl(item.image)" class="choosePicture sku-img"
|
||||
:data-index="i">
|
||||
<button v-else type="button" class="btn-primary btn choosePicture"
|
||||
:data-index="i">
|
||||
上传图片
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
<td width="80"><span class="input-sm form-control status"
|
||||
@click="editStatus(i)">{{item.status=='up'?'上架':'下架'}}</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,263 @@
|
||||
<link rel="stylesheet" href="__CDN__/assets/element-ui-2.15.14/css/index.css">
|
||||
<link rel="stylesheet" href="__CDN__/assets/css/vvv.css">
|
||||
<style>
|
||||
.el-form-item__label {
|
||||
width: 120px !important;
|
||||
}
|
||||
|
||||
.el-tag + .el-tag {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.button-new-tag {
|
||||
margin-left: 10px;
|
||||
height: 32px;
|
||||
line-height: 30px;
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.input-new-tag {
|
||||
width: 90px;
|
||||
margin-left: 10px;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
input[type="file"] {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.el-form-item__error {
|
||||
/*margin-left: 30px;*/
|
||||
}
|
||||
|
||||
.search-select .el-input--suffix .el-input__inner {
|
||||
width: 130px;
|
||||
}
|
||||
|
||||
.goods-detail-table {
|
||||
border: 1px solid #E6E6E6;
|
||||
border-bottom: none;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.goods-detail-item {
|
||||
border-bottom: 1px solid #E6E6E6;
|
||||
}
|
||||
|
||||
.goods-detail-item>div {
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
.goods-detail-name {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.goods-detail-msg {
|
||||
width: 378px;
|
||||
}
|
||||
|
||||
.goods-detail-del,
|
||||
.goods-detail-move {
|
||||
width: 50px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.goods-detail-del-icon {
|
||||
color: #ff5959;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
</style>
|
||||
<div id="vue" v-cloak>
|
||||
<div class="screen-container">
|
||||
<div class="screen-container-show">
|
||||
<el-button style="margin-top: 14px;" size="small" @click="refreshPage" icon="el-icon-refresh" circle
|
||||
type="primary"></el-button>
|
||||
<div class="screen-container-left display-flex">
|
||||
<div class="datetime">
|
||||
<el-date-picker
|
||||
v-model="search.startTime"
|
||||
type="datetime"
|
||||
placeholder="选择起始时间">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
<div class="datetime">
|
||||
<el-date-picker
|
||||
v-model="search.endTime"
|
||||
type="datetime"
|
||||
placeholder="选择结束时间">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-select screen-container-right display-flex keyword">
|
||||
<el-select v-model="search.status" @clear="handleClearSelect('status')" clearable placeholder="启用状态">
|
||||
<el-option
|
||||
v-for="item in statusOpt"
|
||||
:key="item.id"
|
||||
:label="item.value"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="search-select screen-container-right display-flex keyword v-key">
|
||||
<el-input @clear="handleClearSearchInp" clearable v-model="search.keyword" placeholder="请输入您要搜索的内容">
|
||||
<el-select v-model="search.type" slot="prepend" placeholder="请选择">
|
||||
<el-option v-for="(item, index) in searchOpt" :label="item.value"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
<el-button slot="append" @click="searchData" icon="el-icon-search"></el-button>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="search-select screen-container-right display-flex keyword">
|
||||
<el-button @click="openAddDialog('add', '')" size="small" type="primary" plain icon="el-icon-plus">添加
|
||||
</el-button>
|
||||
<el-button @click="del" size="small" type="danger" plain icon="el-icon-delete">删除
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="vue-table background-white color-666">
|
||||
<el-table :data="tableData" border highlight-current-row v-loading="listLoading"
|
||||
@sort-change="sortChange" :element-loading-text="loadingText"
|
||||
@selection-change="handleSelectionChange" style="width: 100%">
|
||||
<el-table-column type="selection" width="60" align="center"></el-table-column>
|
||||
<el-table-column prop="title" label="标题" show-overflow-tooltip
|
||||
align="center"></el-table-column>
|
||||
<el-table-column prop="status" width="150" label="状态" show-overflow-tooltip
|
||||
align="center">
|
||||
<template scope="scope">
|
||||
<el-switch
|
||||
:active-value="1"
|
||||
:inactive-value="2"
|
||||
v-model="scope.row.status"
|
||||
@change="statusChange(scope.row)"
|
||||
>
|
||||
</el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="create_time" width="160" :formatter="dateFormat" label="创建时间" show-overflow-tooltip
|
||||
align="center"></el-table-column>
|
||||
<el-table-column align="center" width="320" fixed="right" label="操作">
|
||||
<template scope="scope">
|
||||
<button @click="openAddDialog('edit', scope.row)" type="button"
|
||||
class="el-button el-button--primary el-button--small"><i
|
||||
class="el-icon-edit"></i><span>编辑</span></button>
|
||||
<button @click="handleCopy(scope.row.id)" type="button"
|
||||
class="el-button el-button--success el-button--small"><i
|
||||
class="el-icon-document-copy"></i><span>复制</span></button>
|
||||
<button @click="dell(scope.row.id)" type="button"
|
||||
class="el-button el-button--danger el-button--small"><i
|
||||
class="el-icon-delete"></i><span>删除</span></button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div class="layout-pagination">
|
||||
<el-pagination
|
||||
background
|
||||
@size-change="handleSizeChange"
|
||||
@current-change="handleCurrentChange"
|
||||
:current-page="currentPage"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
:page-size="pageSize"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="totalCount">
|
||||
</el-pagination>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 添加编辑 -->
|
||||
<div class="users-dialog">
|
||||
<el-dialog
|
||||
:close-on-click-modal="false"
|
||||
:title="title"
|
||||
:visible.sync="addDialog"
|
||||
width="75%"
|
||||
>
|
||||
<div class="form">
|
||||
<el-form ref="form" :rules="rules" :model="formData" label-width="120px">
|
||||
<el-form-item label="标题:" prop="title">
|
||||
<el-input placeholder="请您输入标题" style="width: 330px;" maxlength="50" show-word-limit
|
||||
v-model="formData.title"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="参数详情:">
|
||||
<div>
|
||||
<div class="goods-detail-table">
|
||||
<div class="display-flex goods-detail-item">
|
||||
<div class="goods-detail-name">
|
||||
参数名称
|
||||
</div>
|
||||
<div class="goods-detail-msg">
|
||||
内容
|
||||
</div>
|
||||
<div class="goods-detail-del">
|
||||
删除
|
||||
</div>
|
||||
<div class="goods-detail-move">
|
||||
移动
|
||||
</div>
|
||||
</div>
|
||||
<draggable :list="formData.params" v-bind="$attrs" :options="{animation: 500}">
|
||||
<div class="display-flex goods-detail-item"
|
||||
v-for="(it, index) in formData.params">
|
||||
<div class="goods-detail-name">
|
||||
<el-input type="input" v-model="it.title" style="width:90px" size="small">
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="goods-detail-msg">
|
||||
<el-input type="input" v-model="it.content" style="width:348px"
|
||||
size="small">
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="goods-detail-del">
|
||||
<div style="cursor: pointer;" class="goods-detail-del-icon" @click="delParams(index)">
|
||||
删除
|
||||
</div>
|
||||
</div>
|
||||
<div style="cursor: move;" class="goods-detail-move">
|
||||
<img src="/assets/addons/shopro/img/goods/move.png">
|
||||
</div>
|
||||
</div>
|
||||
</draggable>
|
||||
</div>
|
||||
<div class="btn-common add-params">
|
||||
<el-button type="primary" size="small" @click="addParams" icon="el-icon-plus">添加参数</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态:" prop="status">
|
||||
<el-radio style="margin-right: 0;" v-model="formData.status" label="1" border size="small">显示
|
||||
</el-radio>
|
||||
<el-radio v-model="formData.status" label="2" border size="small">隐藏</el-radio>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="addDialog = false" size="small" icon="el-icon-switch-button">取 消</el-button>
|
||||
<el-button type="primary" size="small" @click="submit" icon="el-icon-position">提 交</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="__CDN__/assets/element-ui-2.15.14/js/vue.js"></script>
|
||||
<script src="__CDN__/assets/element-ui-2.15.14/js/index.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/tool/libs/moment.js"></script>
|
||||
<script src="__CDN__/assets/js/jquery-2.1.1.min.js"></script>
|
||||
@@ -0,0 +1,36 @@
|
||||
<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">{:__('Name')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-name" class="form-control" name="row[name]" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="input-group">
|
||||
<input id="c-image" class="form-control" size="50" name="row[image]" type="text">
|
||||
<div class="input-group-addon no-border no-padding">
|
||||
<span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
</div>
|
||||
<span class="msg-box n-right" for="c-image"></span>
|
||||
</div>
|
||||
<ul class="row list-inline plupload-preview" id="p-image"></ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Description')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-description" class="form-control" name="row[description]" type="text">
|
||||
</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,36 @@
|
||||
<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">{:__('Name')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-name" class="form-control" name="row[name]" type="text" value="{$row.name|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="input-group">
|
||||
<input id="c-image" class="form-control" size="50" name="row[image]" type="text" value="{$row.image|htmlentities}">
|
||||
<div class="input-group-addon no-border no-padding">
|
||||
<span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
</div>
|
||||
<span class="msg-box n-right" for="c-image"></span>
|
||||
</div>
|
||||
<ul class="row list-inline plupload-preview" id="p-image"></ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Description')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-description" class="form-control" name="row[description]" type="text" value="{$row.description|htmlentities}">
|
||||
</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,35 @@
|
||||
<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('shopro/goods/service/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('shopro/goods/service/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('shopro/goods/service/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
|
||||
<!-- <a href="javascript:;" class="btn btn-danger btn-import {:$auth->check('shopro/goods/service/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('shopro/goods/service/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('shopro/goods/service/recyclebin')?'':'hide'}" href="shopro/goods/service/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('shopro/goods/service/edit')}"
|
||||
data-operate-del="{:$auth->check('shopro/goods/service/del')}"
|
||||
width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,25 @@
|
||||
<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('shopro/goods/service/restore')?'':'hide'}" href="javascript:;" data-url="shopro/goods/service/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('shopro/goods/service/destroy')?'':'hide'}" href="javascript:;" data-url="shopro/goods/service/destroy" data-action="destroy"><i class="fa fa-times"></i> {:__('Destroy')}</a>
|
||||
<a class="btn btn-success btn-restoreall {:$auth->check('shopro/goods/service/restore')?'':'hide'}" href="javascript:;" data-url="shopro/goods/service/restore" title="{:__('Restore all')}"><i class="fa fa-rotate-left"></i> {:__('Restore all')}</a>
|
||||
<a class="btn btn-danger btn-destroyall {:$auth->check('shopro/goods/service/destroy')?'':'hide'}" href="javascript:;" data-url="shopro/goods/service/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('shopro/goods/service/restore')}"
|
||||
data-operate-destroy="{:$auth->check('shopro/goods/service/destroy')}"
|
||||
width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,34 @@
|
||||
<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">{:__('Name')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-name" class="form-control" name="row[name]" type="text">
|
||||
</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">
|
||||
<input id="c-pid" data-rule="required" class="form-control" name="row[pid]" type="number" value="0">
|
||||
</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/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">{:__('Weigh')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-weigh" data-rule="required" class="form-control" name="row[weigh]" type="number" value="0">
|
||||
</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,34 @@
|
||||
<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">{:__('Name')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-name" class="form-control" name="row[name]" type="text" value="{$row.name|htmlentities}">
|
||||
</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">
|
||||
<input id="c-pid" data-rule="required" class="form-control" name="row[pid]" type="number" value="{$row.pid|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/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">{:__('Weigh')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-weigh" data-rule="required" class="form-control" name="row[weigh]" type="number" value="{$row.weigh|htmlentities}">
|
||||
</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,35 @@
|
||||
<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('shopro/goods/sku/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('shopro/goods/sku/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('shopro/goods/sku/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
|
||||
<!-- <a href="javascript:;" class="btn btn-danger btn-import {:$auth->check('shopro/goods/sku/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('shopro/goods/sku/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 table-nowrap"
|
||||
data-operate-edit="{:$auth->check('shopro/goods/sku/edit')}"
|
||||
data-operate-del="{:$auth->check('shopro/goods/sku/del')}"
|
||||
width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,78 @@
|
||||
<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">{:__('Goods_sku_ids')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-goods_sku_ids" data-rule="required" data-source="goods/sku/index" data-multiple="true" class="form-control selectpage" name="row[goods_sku_ids]" 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/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">{:__('Weigh')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-weigh" data-rule="required" 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">{:__('Image')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="input-group">
|
||||
<input id="c-image" class="form-control" size="50" name="row[image]" type="text">
|
||||
<div class="input-group-addon no-border no-padding">
|
||||
<span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
</div>
|
||||
<span class="msg-box n-right" for="c-image"></span>
|
||||
</div>
|
||||
<ul class="row list-inline plupload-preview" id="p-image"></ul>
|
||||
</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">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Sn')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-sn" class="form-control" name="row[sn]" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Weight')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-weight" class="form-control" name="row[weight]" type="number">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Price')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-price" class="form-control" step="0.01" name="row[price]" type="number">
|
||||
</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">
|
||||
<input id="c-status" class="form-control" name="row[status]" type="text" value="up">
|
||||
</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,78 @@
|
||||
<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">{:__('Goods_sku_ids')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-goods_sku_ids" data-rule="required" data-source="goods/sku/index" data-multiple="true" class="form-control selectpage" name="row[goods_sku_ids]" type="text" value="{$row.goods_sku_ids|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/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">{:__('Weigh')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-weigh" data-rule="required" class="form-control" name="row[weigh]" type="number" value="{$row.weigh|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="input-group">
|
||||
<input id="c-image" class="form-control" size="50" name="row[image]" type="text" value="{$row.image|htmlentities}">
|
||||
<div class="input-group-addon no-border no-padding">
|
||||
<span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
</div>
|
||||
<span class="msg-box n-right" for="c-image"></span>
|
||||
</div>
|
||||
<ul class="row list-inline plupload-preview" id="p-image"></ul>
|
||||
</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}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Sn')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-sn" class="form-control" name="row[sn]" type="text" value="{$row.sn|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Weight')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-weight" class="form-control" name="row[weight]" type="number" value="{$row.weight|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Price')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-price" class="form-control" step="0.01" name="row[price]" type="number" value="{$row.price|htmlentities}">
|
||||
</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">
|
||||
<input id="c-status" class="form-control" name="row[status]" type="text" value="{$row.status|htmlentities}">
|
||||
</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,35 @@
|
||||
<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('shopro/goods/sku_price/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('shopro/goods/sku_price/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('shopro/goods/sku_price/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
|
||||
<!-- <a href="javascript:;" class="btn btn-danger btn-import {:$auth->check('shopro/goods/sku_price/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('shopro/goods/sku_price/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('shopro/goods/sku_price/recyclebin')?'':'hide'}" href="shopro/goods/sku_price/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('shopro/goods/sku_price/edit')}"
|
||||
data-operate-del="{:$auth->check('shopro/goods/sku_price/del')}"
|
||||
width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,25 @@
|
||||
<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('shopro/goods/sku_price/restore')?'':'hide'}" href="javascript:;" data-url="shopro/goods/sku_price/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('shopro/goods/sku_price/destroy')?'':'hide'}" href="javascript:;" data-url="shopro/goods/sku_price/destroy" data-action="destroy"><i class="fa fa-times"></i> {:__('Destroy')}</a>
|
||||
<a class="btn btn-success btn-restoreall {:$auth->check('shopro/goods/sku_price/restore')?'':'hide'}" href="javascript:;" data-url="shopro/goods/sku_price/restore" title="{:__('Restore all')}"><i class="fa fa-rotate-left"></i> {:__('Restore all')}</a>
|
||||
<a class="btn btn-danger btn-destroyall {:$auth->check('shopro/goods/sku_price/destroy')?'':'hide'}" href="javascript:;" data-url="shopro/goods/sku_price/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('shopro/goods/sku_price/restore')}"
|
||||
data-operate-destroy="{:$auth->check('shopro/goods/sku_price/destroy')}"
|
||||
width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,274 @@
|
||||
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
|
||||
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
|
||||
<style>
|
||||
.shopro-screen-container {
|
||||
background: #fff;
|
||||
padding-top: 20px;
|
||||
margin-bottom: 10px;
|
||||
border-radius: 4px;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.shopro-screen-container-left {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.shopro-screen-container-right {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.shopro-refresh-button {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.shopro-reset-button {
|
||||
margin-right: 14px;
|
||||
}
|
||||
|
||||
.shopro-table-container {
|
||||
background: #fff;
|
||||
padding: 20px 20px 30px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.el-table .is-left .cell,
|
||||
.el-table .is-left .cell>div {
|
||||
justify-content: left;
|
||||
}
|
||||
|
||||
.goods-image {
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
margin-right: 10px;
|
||||
border: 1px solid #e6e6e6;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.goods-title {
|
||||
cursor: pointer;
|
||||
color: #8644F2;
|
||||
}
|
||||
|
||||
.add-stock {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.el-dialog {
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
.el-dialog__body {
|
||||
padding: 10px 20px;
|
||||
}
|
||||
|
||||
.el-dialog__footer {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.table-dashboard-item {
|
||||
min-height: 46px;
|
||||
box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.1);
|
||||
border-radius: 2px;
|
||||
margin: 0 5px 14px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 12px;
|
||||
color: #58575A;
|
||||
line-height: 16px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.table-dashboard-item-tip {
|
||||
padding-left: 20px;
|
||||
height: 46px;
|
||||
line-height: 46px;
|
||||
flex-shrink: 0;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.table-dashboard-item-form {
|
||||
display: flex;
|
||||
justify-content: left;
|
||||
align-items: flex-end;
|
||||
flex: 1;
|
||||
height: 46px;
|
||||
line-height: 46px;
|
||||
}
|
||||
|
||||
.table-dashboard-item-unit {
|
||||
margin-left: 4px;
|
||||
line-height: 40px;
|
||||
}
|
||||
|
||||
.table-dashboard-item-num {
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.table-dashboard-item-dot {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
background: #8644F2;
|
||||
border-radius: 50%;
|
||||
margin-right: 10px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.dot-2 {
|
||||
background: #E6A93C;
|
||||
}
|
||||
|
||||
.recycle-btn-container {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.el-row--flex {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.add-stock-tip {
|
||||
margin-bottom: 8px;
|
||||
color: #E6A93C;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
[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="stockIndex" v-cloak v-loading="allAjax">
|
||||
<div class="shopro-screen-container">
|
||||
<div class="shopro-screen-container-left">
|
||||
<div class="shopro-button shopro-refresh-button" @click="getListData">
|
||||
<i class="el-icon-refresh"></i>
|
||||
</div>
|
||||
<div class="display-flex shopro-screen-item">
|
||||
<div class="shopro-screen-tip">商品名称</div>
|
||||
<div class="shopro-screen-condition">
|
||||
<el-input placeholder="请输入商品名称" v-model="searchForm.goods_title" class="screen-item-input"
|
||||
size="small">
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="display-flex shopro-screen-item">
|
||||
<div class="shopro-screen-tip">预警类型</div>
|
||||
<div class="shopro-screen-condition">
|
||||
<el-select v-model="searchForm.stock_type" placeholder="请选择" size="small">
|
||||
<el-option v-for="sitem in stock_warning_list" :label="sitem.label" :value="sitem.value">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="display-flex shopro-screen-item-button">
|
||||
<div class="shopro-button shopro-reset-button" @click="screenEmpty">重置</div>
|
||||
<div class="shopro-button shopro-screen-button" @click="handleCurrentChange(1)">筛选</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="shopro-screen-container-right">
|
||||
<div class="recycle-btn" @click="operation('recycle')">
|
||||
<i class="fa fa-recycle"></i>
|
||||
回收站
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="shopro-table-container" v-loading="tableAjax">
|
||||
<el-row :gutter="10" type="flex">
|
||||
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
|
||||
<div class="table-dashboard-item">
|
||||
<div class="table-dashboard-item-tip">
|
||||
<span class="table-dashboard-item-dot"></span>
|
||||
预警数量:
|
||||
</div>
|
||||
<div class="table-dashboard-item-form">
|
||||
<div class="table-dashboard-item-num">{{warning_total}}</div>
|
||||
<div class="table-dashboard-item-unit">个</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
|
||||
<div class="table-dashboard-item">
|
||||
<div class="table-dashboard-item-tip">
|
||||
<span class="table-dashboard-item-dot dot-2"></span>
|
||||
售罄数量:
|
||||
</div>
|
||||
<div class="table-dashboard-item-form">
|
||||
<div class="table-dashboard-item-num">{{over_total}}</div>
|
||||
<div class="table-dashboard-item-unit">个</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-table :data="stockList" border>
|
||||
<el-table-column label="ID" prop="id" min-width="70">
|
||||
</el-table-column>
|
||||
<el-table-column label="商品" min-width="220" align="left">
|
||||
<template slot-scope="scope">
|
||||
<div v-if="scope.row.goods" class="displsy-flex">
|
||||
<img class="goods-image" :src="Fast.api.cdnurl(scope.row.goods.image)">
|
||||
<div class="ellipsis-item goods-title" @click="operation('openGoods',scope.row.goods_id)">
|
||||
{{scope.row.goods.title}}
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
{{scope.row.goods_id}}
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="goods_sku_text" label="商品规格" min-width="200">
|
||||
<template slot-scope="scope">
|
||||
<div v-if="scope.row.goods_sku_text" class="displsy-flex ellipsis-item">
|
||||
{{scope.row.goods_sku_text}}
|
||||
</div>
|
||||
<div v-else>-</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="stock" label="库存" min-width="100">
|
||||
</el-table-column>
|
||||
<el-table-column prop="stock_warning" label="预警库存" min-width="100">
|
||||
</el-table-column>
|
||||
<el-table-column prop="stock" label="更新时间" min-width="148">
|
||||
<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 fixed="right" label="操作" min-width="170">
|
||||
<template slot-scope="scope">
|
||||
<span class="theme-color add-stock" @click="operation('addStock',scope.row.id)">补货</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div class="shopro-pagination-container">
|
||||
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
|
||||
:current-page="currentPage" :page-size="limit" :page-sizes="[10, 20, 30, 40]"
|
||||
layout="total, sizes, prev, pager, next, jumper" :total="totalPage">
|
||||
</el-pagination>
|
||||
</div>
|
||||
</div>
|
||||
<el-dialog title="补货" :visible.sync="stockDialogVisible" :before-close="closeStock">
|
||||
<div>
|
||||
<div class="add-stock-tip">在当前库存基础上增加库存</div>
|
||||
<el-form :model="stockForm" ref="stock" :rules="stockRules" label-width="0px">
|
||||
<el-form-item prop="stockNum">
|
||||
<el-input v-model="stockForm.stockNum" type="number" placeholder="请输入补货数量">
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-input>
|
||||
</div>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="closeStock" size="small">取 消</el-button>
|
||||
<el-button type="primary" size="small" @click="closeStock(1)">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
@@ -0,0 +1,46 @@
|
||||
<style>
|
||||
.displsy-flex{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.goods-image {
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
margin-right: 10px;
|
||||
border: 1px solid #e6e6e6;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.ellipsis-item {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 1;
|
||||
-webkit-box-orient: vertical;
|
||||
}
|
||||
</style>
|
||||
|
||||
<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('shopro/goods/stock_warning/restore')?'':'hide'}" href="javascript:;" data-url="shopro/goods/stock_warning/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('shopro/goods/stock_warning/destroy')?'':'hide'}" href="javascript:;" data-url="shopro/goods/stock_warning/destroy" data-action="destroy"><i class="fa fa-times"></i> {:__('Destroy')}</a>
|
||||
<!-- <a class="btn btn-success btn-restoreall {:$auth->check('shopro/goods/stock_warning/restore')?'':'hide'}" href="javascript:;" data-url="shopro/goods/stock_warning/restore" title="{:__('Restore all')}"><i class="fa fa-rotate-left"></i> {:__('Restore all')}</a> -->
|
||||
<a class="btn btn-danger btn-destroyall {:$auth->check('shopro/goods/stock_warning/destroy')?'':'hide'}" href="javascript:;" data-url="shopro/goods/stock_warning/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('shopro/goods/stock_warning/restore')}"
|
||||
data-operate-destroy="{:$auth->check('shopro/goods/stock_warning/destroy')}"
|
||||
width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
在新工单中引用
屏蔽一个用户