Initial commit: 小众厨房项目代码

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

查看文件

@@ -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>