소스 검색

直播间商品

Panda 2 달 전
부모
커밋
51a0be71b0

+ 54 - 0
application/admin/controller/LiveRoomGoods.php

@@ -0,0 +1,54 @@
+<?php
+
+namespace app\admin\controller;
+
+use app\admin\model\LiveRoomGoodsModel;
+use app\common\model\UserModel;
+use App\Utils\AppResult;
+use think\Request;
+
+/**
+ * Admin 模块父级
+ * Module 接管 CURD 公共操作
+ * Class ModuleController
+ * @package App\Http\Controllers\Framework
+ */
+class LiveRoomGoods extends VueModule
+{
+    public function callAction($method, $parameters = [])
+    {
+        // 获取请求参数 用于二次处理
+        $params      = $this->params;
+        $this->model = new LiveRoomGoodsModel();
+        // 根据不同方法处理一些业务
+        switch ($method) {
+            case 'index':
+                // 请求类型是否为POST
+                if ($this->isPost) {
+                    // 条件语句
+                    if (!empty($params['keyword'])) {
+                        $this->model->where('nickname|mobile', 'like', "%{$params['keyword']}%");
+                    }
+                    if (!empty($params['gender'])) $this->model->where('gender', $params['gender']);
+
+                    $this->model->with(['room','goods']);
+                    $this->model->order('is_top','desc');
+                    $this->model->order('goods_no','asc');
+                }
+                break;
+//            case 'insert':
+//                break;
+//            case 'update':
+//                break;
+            default:
+                break;
+        }
+
+        return parent::callAction($method, $parameters); // TODO: Change the autogenerated stub
+    }
+
+    public function __construct(Request $request = null)
+    {
+        parent::__construct($request);
+    }
+}

+ 1 - 1
application/admin/model/LiveRoom.php

@@ -100,6 +100,6 @@ class LiveRoom extends Model
 
     public function log()
     {
-        return $this->belongsTo('app\admin\model\live\room\Log', 'session', 'session', [], 'LEFT')->setEagerlyType(0);
+        return $this->belongsTo(LiveRoomLog::class, 'session', 'session', [], 'LEFT')->setEagerlyType(0);
     }
 }

+ 50 - 0
application/admin/model/LiveRoomGoodsModel.php

@@ -0,0 +1,50 @@
+<?php
+
+namespace app\admin\model;
+
+use app\admin\model\shopro\goods\Goods;
+use app\utils\CurlUtil;
+use think\Model;
+
+/**
+ * 动态评论
+ */
+class LiveRoomGoodsModel extends Model
+{
+    // 表名
+    protected $name = 'live_room_goods';
+    // 开启自动写入时间戳字段
+    protected $autoWriteTimestamp = false;
+    // 定义时间戳字段名
+    protected $createTime = false;
+    protected $updateTime = false;
+    protected $deleteTime = false;
+
+    /**
+     * 获取头像
+     * @param string $value
+     * @param array  $data
+     * @return string
+     */
+    public function getAvatarAttr($value, $data)
+    {
+        if (!$value) {
+            //如果不需要启用首字母头像,请使用
+            $value = CurlUtil::getHttp('/assets/img/avatar.png');
+//            $value = letter_avatar($data['nickname']);
+        }else{
+            $value = cdnurl($value);
+        }
+        return $value;
+    }
+
+    public function room()
+    {
+        return $this->belongsTo(LiveRoom::class, 'room_id', 'id', [], 'LEFT')->setEagerlyType(0);
+    }
+
+    public function goods()
+    {
+        return $this->belongsTo(Goods::class, 'room_id', 'id', [], 'LEFT')->setEagerlyType(0);
+    }
+}

+ 40 - 0
application/admin/view/live_room_goods/forms.html

@@ -0,0 +1,40 @@
+<el-dialog
+        title="编辑"
+        :visible.sync="create.dialog"
+        width="600px"
+        top="14vh"
+        custom-class="Va-dialog auto"
+        :lock-scroll="false"
+        append-to-body
+        :close-on-click-modal="mousedownClassBol"
+        @mousedown.native="handleWrapperMousedown($event)"
+        @mouseup.native="handleWrapperMouseup($event)"
+        v-cloak data-7512a93d
+>
+    <div>
+        <el-row :gutter="24" type="flex" class="Va-dialog-main" :style="layouts.dialogFormsHeight" data-7512a93d>
+            <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+                <el-form ref="create.model" :model="create.model" :rules="create.rules" label-position="top" size="medium" class="Va-forms" data-7512a93d>
+
+                    <el-form-item label="标题" required prop="name">
+                        <el-input v-model="create.model.name" placeholder="请填写标题" maxlength="20" show-word-limit></el-input>
+                    </el-form-item>
+
+                    <el-form-item label="排序" prop="sort">
+                        <el-input-number v-model="create.model.sort" :min="0" :max="999" label="排序"></el-input-number>
+                        <va-forms-tips>数字越大越靠前</va-forms-tips>
+                    </el-form-item>
+
+                </el-form>
+            </el-col>
+        </el-row>
+        <div slot="footer" class="Va-dialog-footer" data-7512a93d>
+            <div class="Va-text-right" data-7512a93d>
+                <el-button @click="dialogFormsSubmits('create')" type="primary" size="medium" :loading="create.loading">
+                    @{{create.loading ? '提交中...' : '提 交'}}
+                </el-button>
+                <el-button @click="dialogFormsCloses('create')" size="medium">取 消</el-button>
+            </div>
+        </div>
+    </div>
+</el-dialog>

+ 223 - 0
application/admin/view/live_room_goods/index.html

@@ -0,0 +1,223 @@
+{extend name="vue_layout/main" /}
+{block name="styles"}
+<style>
+    .Va-container-content {
+        height: 72vw;
+    }
+
+    .icons-type-list {
+        width: 350px;
+        overflow: hidden;
+        padding: 0;
+    }
+
+    .icons-type-one {
+        border-radius: unset !important;
+        border: 1px solid #ccc;
+        padding: 10px 10px;
+        margin: 2px;
+    }
+
+    .icons-type-list .icons-type-one.is-checked {
+        border: 1px solid var(--buttonHoverColors);
+    }
+</style>
+{/block}
+
+<!-- 主体 -->
+{block name="content"}
+<div class="form-container" style="overflow: hidden">
+    <div class="form-container-header">
+        <el-form :inline="true" :model="tables.search" size="small">
+            <el-form-item>
+                <el-input v-model="tables.search.keyword" placeholder="按昵称|手机号关键词搜索" clearable></el-input>
+            </el-form-item>
+            <el-form-item>
+                <el-select v-model="tables.search.gender" placeholder="-- 按性别搜索 --" clearable>
+                    <el-option label="状态(全部)" value=""></el-option>
+                    <el-option key="0" label="女" value="0"></el-option>
+                    <el-option key="1" label="男" value="1"></el-option>
+                </el-select>
+            </el-form-item>
+
+            <el-form-item>
+                <el-button type="primary" size="small" @click="tablesSearchEvent"><i class="fa fa-search"></i> 搜 索
+                </el-button>
+                <el-button size="small" @click="tablesResetsEvent"><i class="fa fa-refresh"></i> 重 置</el-button>
+            </el-form-item>
+
+        </el-form>
+    </div>
+    <div class="form-container-main inline-tables no-pic" v-loading="tables.options.loading">
+        <el-table
+                :data="tables.data"
+                border
+                :stripe="true"
+                @selection-change="tablesSelectChange"
+                @sort-change="tablesPaginationSortChange"
+                @cell-click="tablesCellMoveEvent"
+                tooltip-effect="dark"
+                ref="formContainerTables"
+                row-key="id">
+
+            <el-table-column prop="id" label="#ID" align="center" min-width="50"></el-table-column>
+
+            <el-table-column prop="room" label="直播间logo" align="center" min-width="70">
+                <template slot-scope="scope">
+                    <va-image :src="scope.row.room.logo" :key="scope.row.room.logo" class="tables-image"></va-image>
+                </template>
+            </el-table-column>
+
+            <el-table-column prop="room" label="直播间名称" align="center" min-width="100">
+                <template slot-scope="scope">
+                    <span>{{scope.row.room.name}}</span>
+                </template>
+            </el-table-column>
+
+            <el-table-column prop="goods_no" label="商品序号" align="center"></el-table-column>
+
+            <el-table-column prop="goods" label="商品名称" align="center" min-width="100">
+                <template slot-scope="scope">
+                    <span>{{scope.row.goods.title}}</span>
+                </template>
+            </el-table-column>
+
+            <el-table-column prop="goods" label="商品单价" align="center" min-width="100">
+                <template slot-scope="scope">
+                    <el-tag size="mini" effect="plain">¥{{scope.row.goods.price[0]}}</el-tag>
+                </template>
+            </el-table-column>
+
+            <el-table-column prop="status" label="状态" align="center">
+                <template slot-scope="scope">
+                    <el-tag v-if="scope.row.status == 'down'" size="mini" type="danger" effect="plain">已下架</el-tag>
+                    <el-tag v-else size="mini" type="success" effect="plain">已上架</el-tag>
+                </template>
+            </el-table-column>
+
+            <el-table-column prop="is_top" label="讲解" align="center">
+                <template slot-scope="scope">
+                    <el-tag v-if="scope.row.is_top == 1" size="mini" type="success" effect="plain">讲解中</el-tag>
+                    <el-tag v-else size="mini" type="info" effect="plain">默认</el-tag>
+                </template>
+            </el-table-column>
+            <el-table-column prop="create_time" label="创建时间" align="center" :formatter="formatTableDate" min-width="160" sortable></el-table-column>
+            <el-table-column prop="options" label="操作" align="left" fixed="right" width="160">
+                <template slot-scope="scope">
+                    <el-button size="mini" warning type="text" @click="tablesRowsUpdate(scope.row)" v-if="permissions.edit">
+                        <i :class="permissions.edit.icon"></i> {{permissions.edit.name}}
+                    </el-button>
+                    <!-- 更多操作 -->
+<!--                    <el-dropdown size="small" style="margin-left: 10px">-->
+<!--                        <el-button size="mini" primary type="text"><i class="fa fa-reorder "></i> 更多操作<i-->
+<!--                                class="el-icon-arrow-down el-icon&#45;&#45;right"></i></el-button>-->
+<!--                        <el-dropdown-menu slot="dropdown">-->
+<!--                            <el-dropdown-item v-if="permissions.status">-->
+<!--                                <el-button size="mini" warning type="text"-->
+<!--                                           @click="tablesRowsStatus(scope.row,{id:scope.row.id})"-->
+<!--                                           v-if="permissions.status" :disabled="scope.row.is_system==1">-->
+<!--                                    <i :class="permissions.status.icon"></i>-->
+<!--                                    {{tables.status.maps[scope.row.status]}}-->
+<!--                                </el-button>-->
+<!--                            </el-dropdown-item>-->
+
+<!--                            <el-dropdown-item v-if="permissions.remove">-->
+<!--                                <el-button size="mini" danger type="text" @click="tablesRowsRemove(scope.row)"-->
+<!--                                           v-if="permissions.remove" :disabled="scope.row.is_system==1">-->
+<!--                                    <i :class="permissions.remove.icon"></i> {{permissions.remove.name}}-->
+<!--                                </el-button>-->
+<!--                            </el-dropdown-item>-->
+<!--                        </el-dropdown-menu>-->
+<!--                    </el-dropdown>-->
+                    <!-- 更多操作 End. -->
+                </template>
+            </el-table-column>
+        </el-table>
+        <div class="Va-container-tables-pagination-box">
+            <el-pagination
+                    class="Va-container-tables-pagination"
+                    @size-change="tablesPaginationSizeChange"
+                    @current-change="tablesPaginationCurrentChange"
+                    :current-page.sync="tables.pagination.page"
+                    :page-sizes="tables.pagination.sizes"
+                    :page-size="tables.pagination.size"
+                    :layout="tables.pagination.layouts"
+                    :total="tables.pagination.total"
+                    data-7512a93d>
+            </el-pagination>
+        </div>
+    </div>
+</div>
+{include file="live_room_goods/forms" /}
+{/block}
+
+<!-- vue -->
+{block name="scripts"}
+<script>
+    var $App = new Vue({
+        el: '#app',
+        mixins: [$Config, $Layouts, $Tables, $DialogForms],
+        data: {
+            menuRule:'live_room_goods',
+            component: {status: false},
+            config: {permissions: true},
+            tables: {
+                remove: {
+                    url: 'remove', msg: '确认删除当前数据吗?', field: 'id'
+                },
+                status: {
+                    url: 'status', field: 'status'
+                },
+                sort: {
+                    url: 'rank', item: 'sort', field: 'id'
+                },
+                url: 'live_room_goods',
+                search: {},
+                pagination: {
+                    layout: ''
+                },
+                prop: 'id', orderBy: 'desc'
+            },
+            create: {
+                dialog: false, loading: false, action: '#',
+                model: {name: '', sort: 255},
+                rules: {
+                    title: [
+                        {required: true, message: '请填写标题', trigger: 'blur'}
+                    ]
+                }
+            },
+
+        },
+        methods: {
+            tablesRowsInsert() {
+                var that = this;
+                that.create.action = 'insert';
+                that.create.model = {name: '', sort: 255};
+                that.dialogFormsOpens('create');
+            },
+
+            tablesRowsUpdate(rows) {
+                var that = this;
+                that.create.action = 'update';
+                that.create.model = {
+                    id: rows.id,
+                    name: rows.name,
+                    sort: rows.sort,
+                };
+                that.dialogFormsOpens('create');
+            },
+
+            tablesResetsEvent() {
+                var that = this;
+                that.tables.search = {};
+                that.tablesGetTableList();
+            },
+        },
+        created() {
+        },
+        mounted() {
+        }
+    })
+</script>
+{/block}