Initial commit: 小众厨房项目代码

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

查看文件

@@ -0,0 +1,94 @@
<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" data-rule="required" class="form-control" name="row[name]" type="text">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Room_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-room_id" data-rule="required" data-source="room/index" class="form-control selectpage" name="row[room_id]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Cover_img')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-cover_img" class="form-control" size="50" name="row[cover_img]" type="text">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-cover_img" class="btn btn-danger plupload" data-input-id="c-cover_img" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-cover_img"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-cover_img" class="btn btn-primary fachoose" data-input-id="c-cover_img" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-cover_img"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-cover_img"></ul>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Live_status')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="liveStatusList" item="vo"}
<label for="row[live_status]-{$key}"><input id="row[live_status]-{$key}" name="row[live_status]" type="radio" value="{$key}" {in name="key" value="101"}checked{/in} /> {$vo}</label>
{/foreach}
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Starttime')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-starttime" data-rule="required" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[starttime]" type="text" value="{:date('Y-m-d H:i:s')}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Endtime')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-endtime" data-rule="required" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[endtime]" type="text" value="{:date('Y-m-d H:i:s')}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Anchor_name')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-anchor_name" data-rule="required" class="form-control" name="row[anchor_name]" type="text">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Anchor_img')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-anchor_img" class="form-control" size="50" name="row[anchor_img]" type="text">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-anchor_img" class="btn btn-danger plupload" data-input-id="c-anchor_img" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-anchor_img"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-anchor_img" class="btn btn-primary fachoose" data-input-id="c-anchor_img" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-anchor_img"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-anchor_img"></ul>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Share_img')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-share_img" class="form-control" size="50" name="row[share_img]" type="text">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-share_img" class="btn btn-danger plupload" data-input-id="c-share_img" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-share_img"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-share_img" class="btn btn-primary fachoose" data-input-id="c-share_img" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-share_img"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-share_img"></ul>
</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,113 @@
<meta name="referrer" content="never">
<style>
.display-none{
display: none;
}
.plupload-preview .btn-trash{
display: none !important;
}
.form-span{
height: 31px;
line-height: 31px;
}
</style>
<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">
<span class="form-span">{$row.name|htmlentities}</span>
<!-- <input id="c-name" data-rule="required" 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">{:__('Room_id')}:</label>
<div class="col-xs-12 col-sm-8">
<span class="form-span">{$row.room_id|htmlentities}</span>
<!-- <input id="c-room_id" data-rule="required" data-source="room/index" class="form-control selectpage" name="row[room_id]" type="text" value="{$row.room_id|htmlentities}"> -->
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Cover_img')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group display-none">
<input id="c-cover_img" class="form-control" size="50" name="row[cover_img]" type="text" value="{$row.cover_img|htmlentities}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-cover_img" class="btn btn-danger plupload" data-input-id="c-cover_img" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-cover_img"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-cover_img" class="btn btn-primary fachoose" data-input-id="c-cover_img" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-cover_img"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-cover_img"></ul>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Live_status')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="liveStatusList" item="vo"}
<label for="row[live_status]-{$key}"><input id="row[live_status]-{$key}" name="row[live_status]" type="radio" value="{$key}" {in name="key" value="$row.live_status"}checked{/in} /> {$vo}</label>
{/foreach}
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Starttime')}:</label>
<div class="col-xs-12 col-sm-8">
<span class="form-span">{:$row.starttime?datetime($row.starttime):''}</span>
<!-- <input id="c-starttime" data-rule="required" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[starttime]" type="text" value="{:$row.starttime?datetime($row.starttime):''}"> -->
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Endtime')}:</label>
<div class="col-xs-12 col-sm-8">
<span class="form-span">{:$row.endtime?datetime($row.endtime):''}</span>
<!-- <input id="c-endtime" data-rule="required" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[endtime]" type="text" value="{:$row.endtime?datetime($row.endtime):''}"> -->
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Anchor_name')}:</label>
<div class="col-xs-12 col-sm-8">
<span class="form-span">{$row.anchor_name|htmlentities}</span>
<!-- <input id="c-anchor_name" data-rule="required" class="form-control" name="row[anchor_name]" type="text" value="{$row.anchor_name|htmlentities}"> -->
</div>
</div>
<!-- <div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Anchor_img')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group display-none">
<input id="c-anchor_img" class="form-control" size="50" name="row[anchor_img]" type="text" value="{$row.anchor_img|htmlentities}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-anchor_img" class="btn btn-danger plupload" data-input-id="c-anchor_img" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-anchor_img"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-anchor_img" class="btn btn-primary fachoose" data-input-id="c-anchor_img" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-anchor_img"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-anchor_img"></ul>
</div>
</div> -->
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Share_img')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group display-none">
<input id="c-share_img" class="form-control" size="50" name="row[share_img]" type="text" value="{$row.share_img|htmlentities}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-share_img" class="btn btn-danger plupload" data-input-id="c-share_img" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-share_img"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-share_img" class="btn btn-primary fachoose" data-input-id="c-share_img" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-share_img"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-share_img"></ul>
</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,94 @@
<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" data-rule="required" 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">{:__('Room_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-room_id" data-rule="required" data-source="room/index" class="form-control selectpage" name="row[room_id]" type="text" value="{$row.room_id|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Cover_img')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-cover_img" class="form-control" size="50" name="row[cover_img]" type="text" value="{$row.cover_img|htmlentities}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-cover_img" class="btn btn-danger plupload" data-input-id="c-cover_img" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-cover_img"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-cover_img" class="btn btn-primary fachoose" data-input-id="c-cover_img" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-cover_img"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-cover_img"></ul>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Live_status')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="liveStatusList" item="vo"}
<label for="row[live_status]-{$key}"><input id="row[live_status]-{$key}" name="row[live_status]" type="radio" value="{$key}" {in name="key" value="$row.live_status"}checked{/in} /> {$vo}</label>
{/foreach}
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Starttime')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-starttime" data-rule="required" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[starttime]" type="text" value="{:$row.starttime?datetime($row.starttime):''}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Endtime')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-endtime" data-rule="required" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[endtime]" type="text" value="{:$row.endtime?datetime($row.endtime):''}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Anchor_name')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-anchor_name" data-rule="required" class="form-control" name="row[anchor_name]" type="text" value="{$row.anchor_name|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Anchor_img')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-anchor_img" class="form-control" size="50" name="row[anchor_img]" type="text" value="{$row.anchor_img|htmlentities}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-anchor_img" class="btn btn-danger plupload" data-input-id="c-anchor_img" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-anchor_img"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-anchor_img" class="btn btn-primary fachoose" data-input-id="c-anchor_img" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-anchor_img"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-anchor_img"></ul>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Share_img')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-share_img" class="form-control" size="50" name="row[share_img]" type="text" value="{$row.share_img|htmlentities}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-share_img" class="btn btn-danger plupload" data-input-id="c-share_img" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-share_img"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-share_img" class="btn btn-primary fachoose" data-input-id="c-share_img" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-share_img"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-share_img"></ul>
</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,37 @@
<meta name="referrer" content="never">
<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" id="refreshStatus" title="{:__('Refresh')}" ><i class="fa fa-refresh" style="margin-right: 8px;"></i>同步直播间</a>
<a href="javascript:;" class="btn btn-primary btn-refresh" style="display: none;" id="refreshStatusg" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i></a>
<!-- <a href="javascript:;" class="btn btn-success btn-add {:$auth->check('shopro/app/live/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/app/live/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/app/live/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
<a href="javascript:;" class="btn btn-danger btn-import {:$auth->check('shopro/app/live/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/app/live/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/app/live/recyclebin')?'':'hide'}" href="shopro/app/live/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-detail="{:$auth->check('shopro/app/live/detail')}"
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/app/live/restore')?'':'hide'}" href="javascript:;" data-url="shopro/app/live/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/app/live/destroy')?'':'hide'}" href="javascript:;" data-url="shopro/app/live/destroy" data-action="destroy"><i class="fa fa-times"></i> {:__('Destroy')}</a>
<a class="btn btn-success btn-restoreall {:$auth->check('shopro/app/live/restore')?'':'hide'}" href="javascript:;" data-url="shopro/app/live/restore" title="{:__('Restore all')}"><i class="fa fa-rotate-left"></i> {:__('Restore all')}</a>
<a class="btn btn-danger btn-destroyall {:$auth->check('shopro/app/live/destroy')?'':'hide'}" href="javascript:;" data-url="shopro/app/live/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/app/live/restore')}"
data-operate-destroy="{:$auth->check('shopro/app/live/destroy')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>

查看文件

@@ -0,0 +1,20 @@
<div class="panel panel-default panel-intro">
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
{:build_toolbar('refresh')}
{if request()->get('multiple') == 'true'}
<a class="btn btn-danger btn-choose-multi"><i class="fa fa-check"></i> {:__('Choose')}</a>
{/if}
</div>
<table id="table" class="table table-bordered table-hover" width="100%">
</table>
</div>
</div>
</div>
</div>
</div>

查看文件

@@ -0,0 +1,240 @@
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
<style>
.skuChildrenBox {
display: flex;
padding: 0 15px;
flex-wrap: wrap;
}
.skuChildren {
margin-right: 10px;
margin-top: 10px;
width: 50px;
height: 24px;
line-height: 24px;
color: rgba(80, 80, 80, 1);
border-radius: 2px;
font-size: 12px;
text-align: center;
border: 1px solid rgba(231, 231, 231, 1);
position: relative;
}
.skuChildrenSelect {
border: 1px solid rgba(212, 48, 48, 1)
}
.skuChildren-close {
position: absolute;
background: rgba(212, 48, 48, 1);
color: #fff;
border-radius: 50%;
width: 12px;
height: 12px;
top: -6px;
right: -6px;
font-style: 12px;
-webkit-transform: scale(0.8);
}
.status {
border: none;
cursor: pointer;
color: #7438D5;
font-size: 14px;
}
.status-s {
color: #FF5959;
}
#skuPrice {
background: #fff;
padding: 10px;
color: #444;
}
.display-flex {
display: flex;
align-items: center;
}
.goods-message {
height: 70px;
border: 1px solid #E6E6E6;
padding: 10px;
margin-bottom: 20px;
}
.goods-container {
height: 100%;
width: 100%;
background: #F9F9F9;
padding: 0 10px;
}
.goods_img {
width: 34px;
height: 34px;
margin-right: 14px;
}
.table {
border: 1px solid #E6E6E6;
border-bottom: none;
}
.table>thead {
background: #F9F9F9
}
.table>thead>tr>th {
padding: 9px;
border-bottom: 1px solid #E6E6E6;
text-align: center;
vertical-align: middle;
}
.table>tbody>tr>td {
padding: 9px;
border-bottom: 1px solid #E6E6E6;
text-align: center;
vertical-align: middle;
}
.page-footer {
justify-content: flex-end;
}
.sub-btn {
width: 88px;
height: 36px;
background: #7438D5;
border-radius: 4px;
font-size: 14px;
color: #fff;
justify-content: center;
cursor: pointer;
}
.el-input__inner {
height: 32px;
line-height: 32px;
padding: 0 4px;
}
.all-edit {
margin-left: 6px;
color: #7438D5;
font-size: 14px;
}
.popover-btn-container{
text-align: right; margin-top: 10px
}
[v-cloak] {
display: none
}
</style>
<script src="__CDN__/assets/addons/shopro/libs/vue.js"></script>
<script src="__CDN__/assets/addons/shopro/libs/element/element.js"></script>
<div id="deatailPage" v-cloak>
<div class="goods-message display-flex">
<div class="goods-container display-flex">
<img class="goods_img" :src="Fast.api.cdnurl(goodsDetail.image)">
<div>{{goodsDetail.title}}</div>
</div>
</div>
<div class="widget-body no-padding">
<table class="table" id="skuPrce" v-cloak>
<thead>
<tr>
<th v-for="(item, i) in skuList" :key="i">
{{item.name}}
</th>
<th width="80">库存</th>
<th width="80">价格</th>
<th width="80">活动销量</th>
<th width="100">
<div>活动库存
<el-popover placement="top" width="160" v-model="allEditPopover.stock">
<el-input type="number" v-model="allEditDatas" placeholder="请输入内容"></el-input>
<div class="popover-btn-container">
<el-button size="mini" type="text" @click="allEditData('stock','cancel')">取消
</el-button>
<el-button type="primary" size="mini" @click="allEditData('stock','define')">确定
</el-button>
</div>
<i slot="reference" class="el-icon-edit-outline all-edit"></i>
</el-popover>
</div>
</th>
<th width="120">
<div class="display: flex;align-items: center;">
兑换积分
<el-popover
placement="top"
width="240"
trigger="hover"
content="积分产品退款后积分不予退还">
<i class="el-icon-question" style="font-size:16px;color: #999;" slot="reference"></i>
</el-popover>
<el-popover placement="top" width="160" v-model="allEditPopover.score">
<el-input type="number" v-model="allEditDatas" placeholder="请输入内容"></el-input>
<div class="popover-btn-container">
<el-button size="mini" type="text" @click="allEditData('score','cancel')">取消</el-button>
<el-button type="primary" size="mini" @click="allEditData('score','define')">确定
</el-button>
</div>
<i slot="reference" class="el-icon-edit-outline all-edit"></i>
</el-popover>
</div>
</th>
<th width="100">兑换价格<el-popover placement="top" width="160" v-model="allEditPopover.price">
<el-input type="number" v-model="allEditDatas" placeholder="请输入内容"></el-input>
<div class="popover-btn-container">
<el-button size="mini" type="text" @click="allEditData('price','cancel')">取消</el-button>
<el-button type="primary" size="mini" @click="allEditData('price','define')">确定
</el-button>
</div>
<i slot="reference" class="el-icon-edit-outline all-edit"></i>
</el-popover>
</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">{{item.stock}}</td>
<td width="80">{{item.price}}</td>
<td width="80">{{activitySkuPrice[i].sales}}</td>
<td width="100">
<el-input v-show="activitySkuPrice[i].status=='up'" type="number" v-model="activitySkuPrice[i].stock">
</el-input>
</td>
<td width="120">
<el-input v-show="activitySkuPrice[i].status=='up'" type="number" v-model="activitySkuPrice[i].score">
</el-input>
</td>
<td width="100">
<el-input v-show="activitySkuPrice[i].status=='up'" type="number" v-model="activitySkuPrice[i].price">
</el-input>
</td>
<td width="80"><span class="input-sm form-control status"
:class="activitySkuPrice[i].status=='up'?'status-s':''"
@click="goJoin(i)">{{activitySkuPrice[i].status=='up'?'取消':'参与'}}</span></td>
</tr>
</tbody>
</table>
</div>
<div class="page-footer display-flex">
<div class="sub-btn display-flex" @click="submitForm">
确定
</div>
</div>
</div>

查看文件

@@ -0,0 +1,240 @@
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
<style>
.skuChildrenBox {
display: flex;
padding: 0 15px;
flex-wrap: wrap;
}
.skuChildren {
margin-right: 10px;
margin-top: 10px;
width: 50px;
height: 24px;
line-height: 24px;
color: rgba(80, 80, 80, 1);
border-radius: 2px;
font-size: 12px;
text-align: center;
border: 1px solid rgba(231, 231, 231, 1);
position: relative;
}
.skuChildrenSelect {
border: 1px solid rgba(212, 48, 48, 1)
}
.skuChildren-close {
position: absolute;
background: rgba(212, 48, 48, 1);
color: #fff;
border-radius: 50%;
width: 12px;
height: 12px;
top: -6px;
right: -6px;
font-style: 12px;
-webkit-transform: scale(0.8);
}
.status {
border: none;
cursor: pointer;
color: #7438D5;
font-size: 14px;
}
.status-s {
color: #FF5959;
}
#skuPrice {
background: #fff;
padding: 10px;
color: #444;
}
.display-flex {
display: flex;
align-items: center;
}
.goods-message {
height: 70px;
border: 1px solid #E6E6E6;
padding: 10px;
margin-bottom: 20px;
}
.goods-container {
height: 100%;
width: 100%;
background: #F9F9F9;
padding: 0 10px;
}
.goods_img {
width: 34px;
height: 34px;
margin-right: 14px;
}
.table {
border: 1px solid #E6E6E6;
border-bottom: none;
}
.table>thead {
background: #F9F9F9
}
.table>thead>tr>th {
padding: 9px;
border-bottom: 1px solid #E6E6E6;
text-align: center;
vertical-align: middle;
}
.table>tbody>tr>td {
padding: 9px;
border-bottom: 1px solid #E6E6E6;
text-align: center;
vertical-align: middle;
}
.page-footer {
justify-content: flex-end;
}
.sub-btn {
width: 88px;
height: 36px;
background: #7438D5;
border-radius: 4px;
font-size: 14px;
color: #fff;
justify-content: center;
cursor: pointer;
}
.el-input__inner {
height: 32px;
line-height: 32px;
padding: 0 4px;
}
.all-edit {
margin-left: 6px;
color: #7438D5;
font-size: 14px;
}
.popover-btn-container{
text-align: right; margin-top: 10px
}
[v-cloak] {
display: none
}
</style>
<script src="__CDN__/assets/addons/shopro/libs/vue.js"></script>
<script src="__CDN__/assets/addons/shopro/libs/element/element.js"></script>
<div id="deatailPage" v-cloak>
<div class="goods-message display-flex">
<div class="goods-container display-flex">
<img class="goods_img" :src="Fast.api.cdnurl(goodsDetail.image)">
<div>{{goodsDetail.title}}</div>
</div>
</div>
<div class="widget-body no-padding">
<table class="table" id="skuPrce" v-cloak>
<thead>
<tr>
<th v-for="(item, i) in skuList" :key="i">
{{item.name}}
</th>
<th width="80">库存</th>
<th width="80">价格</th>
<th width="80">活动销量</th>
<th width="100">
<div>活动库存
<el-popover placement="top" width="160" v-model="allEditPopover.stock">
<el-input type="number" v-model="allEditDatas" placeholder="请输入内容"></el-input>
<div class="popover-btn-container">
<el-button size="mini" type="text" @click="allEditData('stock','cancel')">取消
</el-button>
<el-button type="primary" size="mini" @click="allEditData('stock','define')">确定
</el-button>
</div>
<i slot="reference" class="el-icon-edit-outline all-edit"></i>
</el-popover>
</div>
</th>
<th width="120">
<div class="display: flex;align-items: center;">
兑换积分
<el-popover
placement="top"
width="240"
trigger="hover"
content="积分产品退款后积分不予退还">
<i class="el-icon-question" style="font-size:16px;color: #999;" slot="reference"></i>
</el-popover>
<el-popover placement="top" width="160" v-model="allEditPopover.score">
<el-input type="number" v-model="allEditDatas" placeholder="请输入内容"></el-input>
<div class="popover-btn-container">
<el-button size="mini" type="text" @click="allEditData('score','cancel')">取消</el-button>
<el-button type="primary" size="mini" @click="allEditData('score','define')">确定
</el-button>
</div>
<i slot="reference" class="el-icon-edit-outline all-edit"></i>
</el-popover>
</div>
</th>
<th width="100">兑换价格<el-popover placement="top" width="160" v-model="allEditPopover.price">
<el-input type="number" v-model="allEditDatas" placeholder="请输入内容"></el-input>
<div class="popover-btn-container">
<el-button size="mini" type="text" @click="allEditData('price','cancel')">取消</el-button>
<el-button type="primary" size="mini" @click="allEditData('price','define')">确定
</el-button>
</div>
<i slot="reference" class="el-icon-edit-outline all-edit"></i>
</el-popover>
</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">{{item.stock}}</td>
<td width="80">{{item.price}}</td>
<td width="80">{{activitySkuPrice[i].sales}}</td>
<td width="100">
<el-input v-show="activitySkuPrice[i].status=='up'" type="number" v-model="activitySkuPrice[i].stock">
</el-input>
</td>
<td width="120">
<el-input v-show="activitySkuPrice[i].status=='up'" type="number" v-model="activitySkuPrice[i].score">
</el-input>
</td>
<td width="100">
<el-input v-show="activitySkuPrice[i].status=='up'" type="number" v-model="activitySkuPrice[i].price">
</el-input>
</td>
<td width="80"><span class="input-sm form-control status"
:class="activitySkuPrice[i].status=='up'?'status-s':''"
@click="goJoin(i)">{{activitySkuPrice[i].status=='up'?'取消':'参与'}}</span></td>
</tr>
</tbody>
</table>
</div>
<div class="page-footer display-flex">
<div class="sub-btn display-flex" @click="submitForm">
确定
</div>
</div>
</div>

查看文件

@@ -0,0 +1,113 @@
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
<style>
#scoreShopIndex {
color: #444;
background: #fff;
border-radius: 4px;
padding: 0px 20px 30px;
}
.table-img {
width: 30px;
height: 30px;
margin-right: 16px;
}
[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="scoreShopIndex" v-cloak>
<div class="custom-index">
<div class="custom-header display-flex">
<div class="custom-header-title">
积分商城
</div>
<div class="custom-search">
<el-input placeholder="请输入标题" suffix-icon="el-icon-search" v-model="searchKey" size="small">
</el-input>
</div>
</div>
<div class="custom-button-container">
<div class="display-flex">
<div class="custom-refresh display-flex-c" @click="getData">
<i class="el-icon-refresh"></i>
</div>
{if condition = "$auth->check('shopro/app/score_shop/add')"}
<div class="create-btn" @click="operation('create')">
<i class="el-icon-plus"></i>
<span>添加</span>
</div>
{/if}
</div>
{if condition = "$auth->check('shopro/app/score_shop/recyclebin')"}
<div class="recycle-btn" @click="operation('recycle')">
<i class="fa fa-recycle"></i>
回收站
</div>
{/if}
</div>
<div>
<el-table ref="multipleTable" :data="scoreShopData" tooltip-effect="dark" style="width: 100%" border
:row-class-name="tableRowClassName" :cell-class-name="tableCellClassName"
:header-cell-class-name="tableCellClassName" @row-dblclick="operation">
<el-table-column label="ID" prop="id" width="60">
</el-table-column>
<el-table-column label="商品信息" min-width="520">
<template slot-scope="scope">
<div class="display-flex">
<img class="table-img" :src="Fast.api.cdnurl(scope.row.image)">
<div class="ellipsis-item flex-1">{{scope.row.title}}</div>
</div>
</template>
</el-table-column>
<el-table-column label="积分现金" min-width="140">
<template slot-scope="scope">
<div class="display-flex">
<span>{{scope.row.score}}积分</span><span v-if="scope.row.price>0">+{{scope.row.price}}元</span>
</div>
</template>
</el-table-column>
<el-table-column prop="status_text" label="上架状态" min-width="80">
<template slot-scope="scope">
<div class="display-flex">
<span v-if="scope.row.status=='up'" class="display-flex">
<span class="shopro-status-dot shopro-status-normal-dot"></span>
<span class="shopro-status-normal">{{scope.row.status_text}}</span>
</span>
<span v-else-if="scope.row.status=='down'" class="display-flex">
<span class="shopro-status-dot shopro-status-nonormal-dot"></span>
<span class="shopro-status-nonormal">{{scope.row.status_text}}</span>
</span>
<span v-else-if="scope.row.status=='hidden'" class="display-flex">
<span class="shopro-status-dot shopro-status-default-dot"></span>
<span class="shopro-status-default">{{scope.row.status_text}}</span>
</span>
</div>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="120">
<template slot-scope="scope">
{if condition = "$auth->check('shopro/app/score_shop/edit')"}
<span class="table-edit-text" @click="operation('edit',scope.row.id)">编辑
</span>
{/if}
{if condition = "$auth->check('shopro/app/score_shop/del')"}
<span class="table-delete-text" @click.stop="operation('del',scope.row.id)">删除</span>
{/if}
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination-container">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="limit"
layout="total, sizes, prev, pager, next, jumper" :total="totalPage">
</el-pagination>
</div>
</div>
</div>

查看文件

@@ -0,0 +1,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/app/score_shop/restore')?'':'hide'}" href="javascript:;" data-url="shopro/app/score_shop/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/app/score_shop/destroy')?'':'hide'}" href="javascript:;" data-url="shopro/app/score_shop/destroy" data-action="destroy"><i class="fa fa-times"></i> {:__('Destroy')}</a>
<a class="btn btn-success btn-restoreall {:$auth->check('shopro/app/score_shop/restore')?'':'hide'}" href="javascript:;" data-url="shopro/app/score_shop/restore" title="{:__('Restore all')}"><i class="fa fa-rotate-left"></i> {:__('Restore all')}</a>
<a class="btn btn-danger btn-destroyall {:$auth->check('shopro/app/score_shop/destroy')?'':'hide'}" href="javascript:;" data-url="shopro/app/score_shop/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/app/score_shop/restore')}"
data-operate-destroy="{:$auth->check('shopro/app/score_shop/destroy')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>

查看文件

@@ -0,0 +1,228 @@
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
<link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
<style>
.skuChildrenBox {
display: flex;
padding: 0 15px;
flex-wrap: wrap;
}
.skuChildren {
margin-right: 10px;
margin-top: 10px;
width: 50px;
height: 24px;
line-height: 24px;
color: rgba(80, 80, 80, 1);
border-radius: 2px;
font-size: 12px;
text-align: center;
border: 1px solid rgba(231, 231, 231, 1);
position: relative;
}
.skuChildrenSelect {
border: 1px solid rgba(212, 48, 48, 1)
}
.skuChildren-close {
position: absolute;
background: rgba(212, 48, 48, 1);
color: #fff;
border-radius: 50%;
width: 12px;
height: 12px;
top: -6px;
right: -6px;
font-style: 12px;
-webkit-transform: scale(0.8);
}
.status {
border: none;
cursor: pointer;
color: #7438D5;
font-size: 14px;
}
.status-s {
color: #FF5959;
}
#skuPrice {
background: #fff;
padding: 10px;
color: #444;
}
.display-flex {
display: flex;
align-items: center;
}
.goods-message {
height: 70px;
border: 1px solid #E6E6E6;
padding: 10px;
margin-bottom: 20px;
}
.goods-container {
height: 100%;
width: 100%;
background: #F9F9F9;
padding: 0 10px;
}
.goods_img {
width: 34px;
height: 34px;
margin-right: 14px;
}
.table {
border: 1px solid #E6E6E6;
border-bottom: none;
}
.table>thead {
background: #F9F9F9
}
.table>thead>tr>th {
padding: 9px;
border-bottom: 1px solid #E6E6E6;
text-align: center;
vertical-align: middle;
}
.table>tbody>tr>td {
padding: 9px;
border-bottom: 1px solid #E6E6E6;
text-align: center;
vertical-align: middle;
}
.page-footer {
justify-content: flex-end;
}
.sub-btn {
width: 88px;
height: 36px;
background: #7438D5;
border-radius: 4px;
font-size: 14px;
color: #fff;
justify-content: center;
cursor: pointer;
}
.el-input__inner {
height: 32px;
line-height: 32px;
padding: 0 4px;
}
.all-edit {
margin-left: 6px;
color: #7438D5;
font-size: 14px;
}
.popover-btn-container{
text-align: right; margin-top: 10px
}
[v-cloak] {
display: none
}
</style>
<script src="__CDN__/assets/addons/shopro/libs/vue.js"></script>
<script src="__CDN__/assets/addons/shopro/libs/element/element.js"></script>
<div id="skuPrice" v-cloak>
<div class="goods-message display-flex">
<div class="goods-container display-flex">
<img class="goods_img" :src="Fast.api.cdnurl(goodsDetail.image)">
<div>{{goodsDetail.title}}</div>
</div>
</div>
<div class="widget-body no-padding">
<table class="table" id="skuPrce" v-cloak>
<thead>
<tr>
<th v-for="(item, i) in skuList" :key="i">
{{item.name}}
</th>
<th width="80">库存</th>
<th width="80">价格</th>
<th width="80">活动销量</th>
<th width="100">
<div>活动库存
<el-popover placement="top" width="160" v-model="allEditPopover.stock">
<el-input type="number" v-model="allEditDatas" placeholder="请输入内容"></el-input>
<div class="popover-btn-container">
<el-button size="mini" type="text" @click="allEditData('stock','cancel')">取消
</el-button>
<el-button type="primary" size="mini" @click="allEditData('stock','define')">确定
</el-button>
</div>
<i slot="reference" class="el-icon-edit-outline all-edit"></i>
</el-popover>
</div>
</th>
<th width="120">兑换积分<el-popover placement="top" width="160" v-model="allEditPopover.score">
<el-input type="number" v-model="allEditDatas" placeholder="请输入内容"></el-input>
<div class="popover-btn-container">
<el-button size="mini" type="text" @click="allEditData('score','cancel')">取消</el-button>
<el-button type="primary" size="mini" @click="allEditData('score','define')">确定
</el-button>
</div>
<i slot="reference" class="el-icon-edit-outline all-edit"></i>
</el-popover>
</th>
<th width="100">兑换价格<el-popover placement="top" width="160" v-model="allEditPopover.price">
<el-input type="number" v-model="allEditDatas" placeholder="请输入内容"></el-input>
<div class="popover-btn-container">
<el-button size="mini" type="text" @click="allEditData('price','cancel')">取消</el-button>
<el-button type="primary" size="mini" @click="allEditData('price','define')">确定
</el-button>
</div>
<i slot="reference" class="el-icon-edit-outline all-edit"></i>
</el-popover>
</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">{{item.stock}}</td>
<td width="80">{{item.price}}</td>
<td width="80">{{item.sales}}</td>
<td width="100">
<el-input v-show="activitySkuPrice[i].status=='up'" type="number" v-model="activitySkuPrice[i].stock">
</el-input>
</td>
<td width="120">
<el-input v-show="activitySkuPrice[i].status=='up'" type="number" v-model="activitySkuPrice[i].score">
</el-input>
</td>
<td width="100">
<el-input v-show="activitySkuPrice[i].status=='up'" type="number" v-model="activitySkuPrice[i].price">
</el-input>
</td>
<td width="80"><span class="input-sm form-control status"
:class="activitySkuPrice[i].status=='up'?'status-s':''"
@click="goJoin(i)">{{activitySkuPrice[i].status=='up'?'取消':'参与'}}</span></td>
</tr>
</tbody>
</table>
</div>
<div class="page-footer display-flex">
<div class="sub-btn display-flex" @click="submitForm">
确定
</div>
</div>
</div>