This commit is contained in:
2026-03-01 21:05:19 +08:00
parent 0a45a8fbb9
commit 92948fa856
39 changed files with 594 additions and 269 deletions
@@ -66,7 +66,6 @@ class FilesController extends Crud
$data = $this->base($request, $savePath);
}catch(\Exception $e){
return $this->fail( $e->getMessage());
log_alert($e->getMessage());
}
return $this->success( '上传成功', $data);
}
@@ -12,27 +12,48 @@ use Throwable;
/**
* 用户宣传
*/
class FriendController extends Crud
class FriendController extends OpenimBase
{
/**
* @var \app\model\UserXuanchuan
*/
protected $model = null;
protected $relationSearch = ['user'];
protected $relationSearch = [];
/**
* 构造函数
* @return void
*/
function __construct()
{
$this->model = new \app\model\UserXuanchuan();
$this->model = new User();
$statusList = $this->model->getStatusList();
$this->assign("statusList", $statusList);
$this->assignconfig("statusList", $statusList);
$typeList = $this->model->getTypeList();
$this->assign("typeList", $typeList);
$this->assignconfig("typeList", $typeList);
}
function select(Request $request): Response
{
$res = $this->getSdk()->friend->getFriendList(Input('userID'), 1, 5000);
$userIDs = [];
foreach ($res['friendsInfo'] as $key => $value) {
$userIDs[] = $value['friendUser']['userID'];
}
//$_users = \app\model\User::whereIn('userID', $userIDs)->column('*','userID');
[$where, $format, $limit, $field, $order] = $this->selectInput($request);
$where['userId'] = ['symbol'=>'in', 'value1'=>$userIDs];
$query = $this->doSelect($where, $field, $order);
return $this->doFormat($query, $format, $limit);
$list = [];
foreach ($res['friendsInfo'] as $key => $value) {
$item = array_merge($value['friendUser'], $_users[$value['friendUser']['userID']] ?? [],$value['friendUser']);
unset($item['friendUser']);
$list[] =$item;
}
return json([
"code" => 0,
"count" => $res['total'],
"data" => $list,
"msg" => "ok"
]);
}
}
@@ -0,0 +1,33 @@
<?php
namespace plugin\admin\app\controller;
use app\model\User;
use plugin\admin\app\controller\Crud;
use support\exception\BusinessException;
use support\Request;
use support\Response;
use Throwable;
/**
* OpenimBase
*/
class OpenimBase extends Crud
{
/**
* @var \support\OpenImSdk\Client
*/
protected $sdk = null;
protected function getSdk(){
if($this->sdk){
return $this->sdk;
}
$this->sdk = new \support\OpenImSdk\Client([
'host' => 'http://127.0.0.1:10002', // OpenIM API地址
'secret' => 'n1e5a6s6m7', // OpenIM密钥
]);
return $this->sdk;
}
}
@@ -58,10 +58,8 @@ class QuestionnaireController extends Crud
if($showField && input($showField)){
$query = $query->whereLike($showField,'%'.input($showField).'%');
}
//log_alert($ids,'cansnow');
$query = $query->whereNotIn('id',$ids);
$list = $query->field([$showField,$keyField])->paginate($limit);
//log_alert($query->getLastSql(),'cansnow');
return $this->success('ok',$list);
}
@@ -31,7 +31,6 @@ class TeamController extends Crud
public function select(Request $request): Response
{
[$where, $format, $limit, $field, $order] = $this->selectInput($request);
//log_alert($where);
$user_id = 0;
if($where['user_id']['value1']){
$user_id = $where['user_id']['value1'];
-1
View File
@@ -11,7 +11,6 @@ use app\model\Base;
class Config extends Base
{
public function setValueAttr($v,$row){
log_alert($row);
if(is_array($v)){
return json_encode($v,JSON_UNESCAPED_UNICODE);
}
+1 -1
View File
@@ -37,7 +37,7 @@ class User extends \app\model\User
if(isset($changeData[$currency])){
$cha = $changeData[$currency] - $orgData[$currency];
if($cha!=0){
\support\Log::channel('cansnow')->alert('管理员手动修改用户余额:'.$row->id.',货币:'.$currency.',修改金额:'.$cha.',原始数据:'.$orgData[$currency].',修改后的数据:'.$changeData[$currency]);
log_alert('管理员手动修改用户余额:'.$row->id.',货币:'.$currency.',修改金额:'.$cha.',原始数据:'.$orgData[$currency].',修改后的数据:'.$changeData[$currency],'cansnow');
}
}
}
+21
View File
@@ -0,0 +1,21 @@
{layout name="layout"}
<div class="toolbar" class="toolbar-btn-action">
<a id="btn_add" class="btn btn-primary m-r-5 btn-add" data-url="{:url('insert')}" data-title="新增" data-offset="r" data-area="80%,100%" data-anim="5" data-shade="0.3" data-move="false">
<span class="mdi mdi-plus" aria-hidden="true"></span>新增
</a>
<a id="btn_edit" class="btn btn-success m-r-5 btn-disabled disabled btn-multi" data-params="status=1">
<span class="mdi mdi-check" aria-hidden="true"></span>启用
</a>
<a id="btn_edit" class="btn btn-warning m-r-5 btn-disabled disabled btn-multi" data-params="status=0">
<span class="mdi mdi-block-helper" aria-hidden="true"></span>禁用
</a>
<a id="btn_delete" class="btn btn-danger btn-del btn-disabled disabled">
<span class="mdi mdi-window-close" aria-hidden="true"></span>删除
</a>
</div>
<!-- 数据表格 -->
<div class="card">
<div class="card-body">
<table id="table"></table>
</div>
</div>
+88
View File
@@ -0,0 +1,88 @@
{layout name="layout"}
<div class="card">
<div class="card-body">
<form class="form-horizontal" action="__SELF__" method="post">
<input type="hidden" name="id" value="{$row.id|null}" />
<div class="form-group">
<label for="type" class="control-label col-xs-12 col-sm-3">名称</label>
<div class="col-xs-12 col-sm-6 col-md-6">
<input type="text" name="title" value="{$row.title|null}" class="form-control" data-rule="required;length(2~100)" />
</div>
</div>
<div class="form-group">
<label for="type" class="control-label col-xs-12 col-sm-3">封面:</label>
<div class="col-xs-12 col-sm-8 col-md-6">
<input id="c-image" class="form-control" size="50" name="image" type="hidden" value="{$row.image|default=''}" data-tip="image">
<ul class="list-inline clearfix lyear-uploads-pic" data-template="preview" id="p-image">
<li nodelete class="col-xs-4 col-sm-3 col-md-2">
<a class="pic-add faupload" style="height: auto;border: 0;" permission="app.admin.upload.image" id="add-pic-btn" href="javascript:;" title="点击上传" data-input-id="c-image" data-mimetype="image/*" data-multiple="false" data-preview-id="p-image"></a>
<a class="pic-add fachoose" style="height: auto;border: 0;display: none;" permission="app.admin.files.list" id="choose-pic-btn" href="javascript:;" title="选择文件" data-input-id="c-image" data-mimetype="image/*" data-multiple="false" data-preview-id="p-image"></a>
</li>
</ul>
</div>
</div>
<div class="form-group">
<label for="type" class="control-label col-xs-12 col-sm-3">单价</label>
<div class="col-xs-12 col-sm-6 col-md-6">
<div class="input-group">
<input type="text" name="price" value="{$row.price|null=3.5}" class="form-control" data-rule="required;range(0.5~)" />
<div class="input-group-addon"></div>
</div>
</div>
</div>
<div class="form-group">
<label for="type" class="control-label col-xs-12 col-sm-3">库存</label>
<div class="col-xs-12 col-sm-6 col-md-6">
<div class="input-group">
<input type="number" name="stock" value="{$row.stock|default=0}" class="form-control" min="0" data-rule="required;range(0~99)" />
<div class="input-group-addon"></div>
</div>
</div>
</div>
<div class="form-group">
<label for="type" class="control-label col-xs-12 col-sm-3">用户累计限购</label>
<div class="col-xs-12 col-sm-6 col-md-6">
<div class="input-group">
<input type="number" name="user_quantity" value="{$row.user_quantity|default=0}" class="form-control" min="0" data-rule="required;range(0~99)" />
<div class="input-group-addon"></div>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-3">备注</label>
<div class="col-xs-12 col-sm-6 col-md-6">
<textarea type="text" name="memo" class="form-control" >{$row.memo|null}</textarea>
</div>
</div>
<div class="form-group">
<label for="type" class="control-label col-xs-12 col-sm-3">销量</label>
<div class="col-xs-12 col-sm-6 col-md-6">
<div class="input-group">
<input type="number" name="sales" value="{$row.sales|default=0}" disabled class="form-control" min="0" data-rule="required;range(0~99)" />
<div class="input-group-addon"></div>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-3">状态</label>
<div class="col-xs-12 col-sm-6 col-md-6">
{volist name="statusList" id="rvo"}
<label class="lyear-radio radio-primary radio-inline">
<input type="radio" name="status" {if $row.status == $key} checked{/if} value="{$key}">
<span>{$rvo}</span>
</label>
{/volist}
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-3"></label>
<div class="col-xs-12 col-sm-6 col-md-6 layer-footer">
<button type="submit" class="btn btn-primary m-r-5">提交</button>
<button type="reset" class="btn btn-warning m-r-5">重置</button>
</div>
</div>
</form>
</div>
</div>
{include file="common/file_preview" id="preview"/}
+146
View File
@@ -0,0 +1,146 @@
define(['table', 'upload','form'], function (Table,Upload,Form) {
var friend = {
//Do setup work hereAction
index: function () {
window.statuskOption= Config.statusList;
window.filterData = {
};
Table.api.init({
extend: {
index_url: 'friend/select?userID='+Fast.api.query('userID'),
add_url: 'friend/insert',
edit_url: 'friend/update',
del_url: 'friend/delete',
multi_url: 'friend/multi',
dragsort_url: null,
table: 'user',
}
});
var table = $("#table");
var columns = [
{checkbox: true},
{
field: 'id',
title: 'ID',
filter: "number",
sortable: true,
visible:false // 是否排序
},
{
field: 'userID',
title: 'userID',
filter: "string"
},
// {
// title: "上级",
// field: "referrer.username"
// },
{
title: "角色",
field: "role_id",
formatter:function(v,row){
return row.role ? row.role.name : '用户';
},
filter: "select",
filterOption:"roleOption"
},
{
title: "用户名",
field: "username"
},
{
title: "昵称",
field: "nickname"
},
{
title: "头像",
field: "avatar",
formatter: function (v,d) {
return '<img src="'+encodeURI(d['avatar'])+'" style="max-width:32px;max-height:32px;" alt="" />'
},
visible: false
},
// {
// title: "等级",
// field: "level",
// visible: false,
// },
// {
// title: "生日",
// field: "birthday",
// visible: false,
// },
// {
// title: "后缀",
// field: "decimal_part",
// //visible: false,
// },
];
var currencys = ['money','score','currency1','currency2','currency3','currency4','currency5','currency6','currency7','currency8','currency9'];
for (let i = 0; i < currencys.length; i++) {
if(Config.allow_currencys.indexOf(currencys[i])!==-1){
columns.push({
title: __(currencys[i]),
field: currencys[i],
formatter:Table.api.formatter.number,
//sortable: true,
//visible: false,
});
}
};
columns.push({
title: "注册时间",
field: "created_at",
filter:'datetime'
});
columns.push({
title: "状态",
field: "status",
formatter: Table.api.formatter.switch
});
columns.push({
field: 'operate', title: '操作',
table: table,
events: Table.api.events.operate,
formatter: Table.api.formatter.operate,
buttons:[
// {
// text:"团队",
// name:"team",
// icon:"mdi mdi-account-group-outline",
// classname:"btn btn-xs btn-info btn-dialog",
// extend:' data-offset="r" data-area="80%,100%" data-anim="5" data-shade="0.3" data-move="false"',
// url:'user/team'
// }
]
});
var tableOptions = {
url: $.fn.bootstrapTable.defaults.extend.index_url,
pk: 'id',
sortName: 'id',
commonSearch: false,
search: false,
columns: [columns]
};
// 初始化表格
table.bootstrapTable(tableOptions);
// 为表格绑定事件
Table.api.bindevent(table);
},
update:function(){
this.bindevent();
},
insert:function(){
this.bindevent();
},
bindevent:function(){
Config['upload_url'] = 'files/upload';
var form = $('form');
var that = this;
Form.api.bindevent(form)
}
};
return friend
});