📖 File Reader
<?php
namespace app\admin\controller;
use adminCreate\form\Form;
use app\admin\common\Common_config;
use app\admin\model\ModGoodsAct;
use app\common\Common_excel;
use think\facade\Db;
use think\facade\View;
use app\admin\common\Common_goods;
class Goods extends Base
{
/*商品分类*/
public function act_list()
{
return View::fetch();
}
/*商品分类数据*/
public function act_list_ajax()
{
$type_yibu = input("param.type_yibu");
$id = input("param.id");
$keyword = input("param.keyword");
$where = 1;
if (!empty($keyword)){
$where .= " and name like '%".$keyword."%'";
}else{
if (!empty($id)){
$where .= " and parent_id = $id";
}else{
/*筛序出所有顶级账号*/
$list = db::name("goods_act")->order("id asc")->field("id as value,parent_id as pid,name")->select()->toArray();
$array_reinstallation = Common_config::array_reinstallation($list);
$id_top = [];//所有顶级会员id
foreach ($array_reinstallation as $v){
$id_top[] = $v["value"];
}
if (!empty($id_top)) {
$id_top_str = implode(",", $id_top);
$where .= " and id in ($id_top_str)";
}else{
$where .= " and id in (0)";
}
}
}
if ($type_yibu == 1) {
$list = db::name("goods_act")->where($where)->order("sort desc,id desc")->select()->toArray();
}else{
$list = db::name("goods_act")->where($where)->order("sort desc,id desc")->page($this->page,$this->limit)->select()->toArray();
}
foreach ($list as $k => $v){
$list[$k]["add_time"] = date("Y-m-d H:i",$v["add_time"]);
//二级分类
$list2 = db::name("goods_act")->where("parent_id = $v[id]")->order("sort desc,id desc")->select()->toArray();
foreach ($list2 as $k2 => $v2){
$list2[$k2]["add_time"] = date("Y-m-d H:i",$v2["add_time"]);
}
$list[$k]["children"] = $list2;
}
$count = db::name("goods_act")->where($where)->count();
return $this->layui_json($count,$list);
}
/*分类数据获取(用于多选查询)*/
public function act_checked_data()
{
$list = db::name("goods_act")->field("id,id as value,parent_id as pid,name as label,name")->order("sort desc")->select()->toArray();
foreach ($list as $k => $v){
$list[$k]["spread"] = true;//默认展开
$list[$k]["disabled"] = false;
foreach ($list as $v2){
if ($v["value"] == $v2["pid"]){//存在下级禁用勾选
$list[$k]["disabled"] = true;
}
}
}
$list_data = Common_config::array_reinstallation($list);
$data = [
'checked_data'=>$list_data,
];
return $this->succeed_json("ok",$data);
}
/*分类列表字段修改*/
public function act_field_update()
{
$id = input("param.id");
$field_name = input("param.field_name");
$info[$field_name] = input("param.value");
db::name("goods_act")->where("id = $id")->data($info)->update();
return $this->succeed_json("操作成功");
}
/*创建分类提交*/
public function goods_act_upload()
{
$id = input("param.id");
if (input("post.")){
$info = [
'parent_id'=>0,
'parent_id_str'=>input("param.parent_id_str") != ''?implode(",",input("param.parent_id_str")):'',
'name'=>input("param.name"),
'icon'=>input("param.icon") != ''?implode(",",input("param.icon")):'',
'sort'=>input("param.sort"),
'is_show'=>input("param.is_show"),
'is_show_home'=>input("param.is_show_home"),
'add_time'=>strtotime(input("param.add_time")),
];
if (!empty(input("param.parent_id_str"))){
$arr_k = count(input("param.parent_id_str"))-1;//最后一位k值
$parent_id = input("param.parent_id_str")[$arr_k];
$info["parent_id"] = $parent_id;
}
if ($id == $info["parent_id"] && $id != 0){
return $this->error_json("所属上级不可绑定本身");
}
if (empty($id)){
db::name("goods_act")->insertGetId($info);
}else{
db::name("goods_act")->where("id = $id")->data($info)->update();
}
return $this->succeed_json("操作成功");
}else {
$time = date("Y-m-d H:i",time());
$info = ['name'=>'','parent_id_str'=>[],'parent_id'=>'','icon'=>[],'sort'=>0,'add_time'=>$time,'is_show'=>1,'is_show_home'=>0];
if (!empty($id)){
$info = db::name("goods_act")->where("id = $id")->find();
$info["parent_id_str"] = $info["parent_id_str"] != ''?explode(',',$info['parent_id_str']):[];
$info["add_time"] = date("Y-m-d H:i",$info["add_time"]);
}
$form = new Form();
$form->tabs('tabs1', '基本信息');
$form->cascader('parent_id_str', '所属上级',$info["parent_id_str"])->setOptions(function(){
$list = db::name("goods_act")->field("id,id as value,parent_id as pid,name as label,name")->order("sort desc")->select()->toArray();
$menus = Common_config::array_reinstallation($list);
return $menus;
})->tabs('tabs1');
$form->input('name', '名称',$info["name"])->required()->tabs('tabs1');
$form->upload('icon', '图标', '/admin/ad/uploads', [$info['icon']])->nultiple(false)->tabs('tabs1');
$form->number('sort', '排序', $info["sort"])->tabs('tabs1');
$form->radio('is_show', '显示「分类导航」', $info["is_show"])->setOptions(function () {
$menus[] = ['label' => '是', 'value' => '1'];
$menus[] = ['label' => '否', 'value' => '0'];
return $menus;
})->tabs('tabs1')->required();
$form->radio('is_show_home', '显示「首页推荐」', $info["is_show_home"])->setOptions(function () {
$menus[] = ['label' => '是', 'value' => '1'];
$menus[] = ['label' => '否', 'value' => '0'];
return $menus;
})->tabs('tabs1')->required();
$form->datetime('add_time', '时间',$info["add_time"])->tabs('tabs1')->type('datetime')->required();
$form->hidden('id',$id);
$form->button('/admin/Goods/goods_act_upload');
return $form;
}
}
/*分类删除*/
public function goods_act_del()
{
$id = input("param.id");
$act_info = db::name("goods_act")->where("parent_id = $id")->count();
$goods_count = db::name("goods")->where("act_id = $id and is_delete = 0")->count();
if (!empty($act_info)){
return $this->error_json("已存在下级,不可删除!");
}else if(!empty($goods_count)){
return $this->error_json("已存在商品,不可删除!");
} else{
db::name("goods_act")->where("id = $id")->delete();
return $this->succeed_json("删除成功!");
}
}
/*商品列表*/
public function goods_list()
{
$goods_act = db::name("goods_act")->order("sort desc")->select();
View::assign([
'goods_act'=>$goods_act,
]);
return View::fetch();
}
/*商品列表数据*/
public function goods_list_ajax()
{
$name = input("param.name");
$act_id = input("param.act_id");
$checked_act_id = input("param.checked_act_id");
$where = 1;
/*角色权限*/
$admin_role_type = $this->admin_info["role_type"];
$admin_shop_id = $this->admin_info["shop_id"];
if ($admin_role_type == 1) { //平台管理员
$where .= " and a.state = 1";
if (!empty($name)){
$where .= " and (a.name like '%".$name."%' or c.name like '%".$name."%')";
}
}else if($admin_role_type == 2){ //店铺管理员
$where .= " and a.shop_id = $admin_shop_id";
if (!empty($name)){
$where .= " and a.name like '%".$name."%'";
}
}
if (!empty($act_id)){
$sublevel_act_id = ModGoodsAct::sublevel_act_id($act_id,1);
$where .= " and a.act_id in ($sublevel_act_id)";
}
if (!empty($checked_act_id)){
$checked_act_id = implode(",", $checked_act_id);
$sublevel_act_id = ModGoodsAct::sublevel_act_id($checked_act_id,1);
$where .= " and a.act_id in ($sublevel_act_id)";
}
$list = db::name("goods")->alias("a")
->join("goods_act b","a.act_id = b.id","LEFT")
->join("shop c","a.shop_id = c.id","LEFT")
->field("a.*, b.name as name_act,c.name as shop_name")
->where("a.is_delete = 0 and ".$where)
->order("a.sort desc,a.add_time desc")
->page($this->page,$this->limit)
->select()
->toArray();
foreach ($list as $k => $v){
$guige_count = db::name("goods_guige_value")->where("goods_id = $v[goods_id]")->count();
$is_guige = $guige_count > 0?1:0;
if ($is_guige == 1){
$stocks = db::name("goods_guige_value")->where("goods_id = $v[goods_id]")->sum("stocks");
}else{
$stocks = $v["stocks"];
}
$list[$k]["stocks"] = $stocks;
$list[$k]["shop_name"] = $v["shop_name"] != ''?$v["shop_name"]:'';
$list[$k]["add_time"] = date("Y-m-d H:i",$v["add_time"]);
}
$count = db::name("goods")->alias("a")
->join("goods_act b","a.act_id = b.id","LEFT")
->join("shop c","a.shop_id = c.id","LEFT")
->where("a.is_delete = 0 and ".$where)
->count();
return $this->layui_json($count,$list);
}
/**
* 更改库存
*/
public function is_stock_ajax()
{
$goods_id = input("param.goods_id");
$info["stocks"] = input("param.stocks");
db::name("goods")->where("goods_id = $goods_id")->data($info)->update();
return $this->succeed_json("修改成功");
}
/*列表字段修改*/
public function goods_field_update()
{
$id = input("param.id");
$goods_info = db::name("goods")->alias("a")
->join("shop b","a.shop_id = b.id","left")
->field("a.goods_id,a.shop_id,b.is_seal")
->where("a.goods_id = $id")
->find();
if ($goods_info["is_seal"] == 1 && input("param.field_name") == 'is_sold'){
return $this->error_json("该店铺已被封闭,不可操作!",405);
}
$field_name = input("param.field_name");
$info[$field_name] = input("param.value");
db::name("goods")->where("goods_id = $id")->data($info)->update();
return $this->succeed_json("操作成功");
}
/*获取子级商品分类*/
public function goods_act_ajax()
{
$parent_id = input("param.parent_id");
$list = ModGoodsAct::goods_act_list($parent_id);
$str = '<option value="0">请选择</option>';
foreach ($list as $k => $v){
$str .= '<option value="'.$v["id"].'">'.$v["name"].'</option>';
}
$data = [
'list_count'=>count($list),
'str'=>$str,
];
return $this->succeed_json("ok",$data);
}
/*商品导入*/
public function goods_import()
{
if ($_POST){
$file = input("param.file")!=''?implode(",",input("param.file")):'';
$file_path = $_SERVER['DOCUMENT_ROOT'].$file;
$enter_data = Common_excel::enter($file_path);
if ($enter_data["code"] == 200){
$data_list = $enter_data["data_list"];
/*重装数组并检测数据*/
$subject_data = [];//题目数据
foreach ($data_list as $k => $v){
if ($k > 2 && ($v["A"] != '' || $v["B"] != '' || $v["C"] != '' || $v["D"] != '')){
}
}
if (empty($subject_data)){
return $this->error_json("暂无导入数据");
}
// 写导入表逻辑
// ....
if (file_exists($file_path)) { //导入成功删除原文件
unlink($file_path);//删除文件
}
return $this->succeed_json("导入成功");
}else{
return $this->error_json($enter_data["msg"]);
}
}else{
$info = ['file'=>[]];
$form = new Form();
$form->tabs('tabs1', '基本信息');
$form->upload('file', '文件上传', '/admin/ad/uploads', $info["file"],'file')->nultiple(false)->tabs('tabs1')->required()->tips("导入模版下载地址:http://www.baidu.com/");
$form->button('/admin/Goods/goods_import');
return $form;
}
}
/*商品创建*/
public function goods_update()
{
$goods_id = input("param.goods_id");
if (input("post.")){
/*检测处理*/
if (!empty($goods_id)){
$goods_info = db::name("goods")->alias("a")
->join("shop b","a.shop_id = b.id","left")
->field("a.goods_id,a.shop_id,b.is_seal")
->where("a.goods_id = $goods_id")
->find();
if ($goods_info["is_seal"] == 1){
return $this->error_json("店铺已被封闭,不可操作!");
}
}else{
if ($this->admin_info["role_type"] == 2){ //店铺管理员
$shop_id = $this->admin_info["shop_id"];
$shop_info = db::name("shop")->where("id = $shop_id")->find();
if ($shop_info["is_seal"] == 1){
return $this->error_json("店铺已被封闭,不可操作!");
}
}
}
$info = [
'sn'=>'',
'name'=>input("param.name"),
'describe'=>input("param.describe"),
'img'=>input("param.img") != ''?implode(",",input("param.img")):'',
'video_url'=>'',
'price'=>input("param.price"),
'price_market'=>input("param.price_market"),
'stocks'=>input("param.stocks"),
'content'=>input("param.content"),
'is_sold'=>input("param.is_sold"),
'add_time'=>strtotime(input("param.add_time")),
];
if ($this->admin_info["role_type"] == 1){
$info["act_id"] = 0;
$info["act_id_str"] = input("param.act_id_str") != ''?implode(",",input("param.act_id_str")):'';
}
if (!empty(input("param.act_id_str"))){
$arr_k = count(input("param.act_id_str"))-1;//最后一位k值
$act_id = input("param.act_id_str")[$arr_k];
$info["act_id"] = $act_id;
/*分类检测*/
$act_count = db::name("goods_act")->where("parent_id = $act_id")->count();
if (!empty($act_count)){
return $this->error_json("所属分类请填写完全");
}
}
/*把富文本里的图片bese64格式转换为路径*/
if (!empty($info["content"])){
$config = Common_config::config("'url'");
$http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';
$url = $config["url"] != ''?$config["url"]:$http_type . $_SERVER['HTTP_HOST'];
$content_img_data = Common_config::getPatternMatchImages($info["content"]);
foreach ($content_img_data as $v){
$content_arr = explode(',',$v);
if($content_arr[0] == 'data:image/png;base64'){
$transition_img = Common_config::bese64_transition($v);
if ($transition_img["code"] == 200){
$img_link = $url.$transition_img["file_link"];
$info["content"] = str_replace($v, $img_link, $info["content"]);
}
}
}
}
if (empty($goods_id)){
/*权限管理*/
if ($this->admin_info["role_type"] == 1){ //平台管理员
$info["state"] = 1;
$info["describe_reject"] = '';
$info["admin_id_check"] = $this->admin_id;
$info["time_check"] = time();
}else{
$info["state"] = 0;
$info["describe_reject"] = '';
}
$info["shop_id"] = $this->admin_info["shop_id"];
db::name("Goods")->insertGetId($info);
}else{
db::name("Goods")->where("goods_id = $goods_id")->data($info)->update();
}
return $this->succeed_json("操作成功");
}else{
$time = date("Y-m-d H:i",time());
$info = ['name'=>'','describe'=>'','act_id'=>'','act_id_str'=>[],'img'=>[],'price'=>'','price_market'=>'','stocks'=>'','state'=>'','content'=>'','is_sold'=>1,'add_time'=>$time,'describe_reject'=>''];
if (!empty($goods_id)){
$info = db::name("goods")->where("goods_id = $goods_id")->find();
$info["act_id_str"] = $info["act_id_str"] != ''?explode(',',$info['act_id_str']):[];
$info["add_time"] = date("Y-m-d H:i",$info["add_time"]);
}
$form = new Form();
$form->tabs('tabs1', '基本信息');
$form->tabs('tabs2', '详细描述');
if ($info["state"] == 2){
$form->tips_warning('驳回描述:',$info["describe_reject"])->tabs("tabs1");
$form->hr()->tabs('tabs1');
}
$form->input('name', '商品名称',$info["name"])->required()->tabs('tabs1');
$form->input('describe', '简单描述',$info["describe"])->type('textarea')->tabs('tabs1');
if ($this->admin_info["role_type"] == 1){ //平台管理员
$form->cascader('act_id_str', '所属分类',$info["act_id_str"])->setOptions(function(){
$list = db::name("goods_act")->field("id,id as value,parent_id as pid,name as label,name")->order("sort desc")->select()->toArray();
$menus = Common_config::array_reinstallation($list);
return $menus;
})->required()->tabs('tabs1');
}
$form->upload('img', '缩略图', '/admin/ad/uploads', [$info['img']])->nultiple(false)->required('',"array")->tabs('tabs1');
$form->number('price', '售价', $info["price"])->required()->tabs('tabs1')->col(6);
$form->number('price_market', '市场价', $info["price_market"])->tabs('tabs1')->col(6);
$form->number('stocks', '库存', $info["stocks"])->tabs('tabs1');
$form->radio('is_sold', '上架', $info["is_sold"])->setOptions(function () {
$menus[] = ['label' => '是', 'value' => '1'];
$menus[] = ['label' => '否', 'value' => '0'];
return $menus;
})->tabs('tabs1')->required();
$form->datetime('add_time', '时间',$info["add_time"])->tabs('tabs1')->type('datetime')->required();
$form->editor('content', '详细信息',$info["content"])->action('/admin/ad/uploads')->tabs('tabs2');
$form->hidden('goods_id',$goods_id);
$form->button("/admin/Goods/goods_update");
return $form;
}
}
/**
* 商品删除
*/
public function goods_del()
{
$goods_id = input("param.goods_id");
$info["is_delete"] = 1;
db::name("goods")->where("goods_id = $goods_id")->data($info)->update();
return $this->succeed_json("操作成功");
}
/**
* 规格查看
*/
public function guige_info()
{
$goods_id = input("param.goods_id");
$list = Common_goods::guige_info($goods_id);
return $this->succeed_json("ok",$list);
}
/**
* 规格名称创建
*/
public function guige_name_add()
{
$goods_id = input("param.goods_id");
$info = [
'goods_id'=>$goods_id,
'add_time'=>time(),
];
db::name("goods_guige_attr")->insertGetId($info);
return $this->succeed_json("ok");
}
/**
* 规格名称修改
*/
public function guige_name_upload()
{
$guige_id = input("param.guige_id");
$info = [
'name'=>input("param.guige_name"),
];
db::name("goods_guige_attr")->where("id = $guige_id")->data($info)->update();
return $this->succeed_json("ok");
}
/**
* 规格名称删除
*/
public function guige_name_del()
{
$guige_id = input("param.guige_id");
$goods_id = input("param.goods_id");
db::name("goods_guige_attr")->where("id = $guige_id")->delete();
return $this->succeed_json("ok");
}
/**
* 规格属性创建
*/
public function guige_shuxing_add()
{
$guige_id = input("param.guige_id");
$goods_id = input("param.goods_id");
$goods_guige_value = db::name("goods_guige_attr")->where("id = $guige_id")->value("value");
if (empty($goods_guige_value)){
$info["value"] = input("param.name");
}else{
$info["value"] = $goods_guige_value.','.input("param.name");
}
db::name("goods_guige_attr")->where("id = $guige_id")->data($info)->update();
return $this->succeed_json("ok");
}
/**
* 规格属性删除
*/
public function guige_shuxing_del()
{
$guige_id = input("param.guige_id");
$goods_id = input("param.goods_id");
$guige_value_k = input("param.guige_value_k");
$goods_guige_value = db::name("goods_guige_attr")->where("id = $guige_id")->value("value");
$goods_guige_value = explode(',',$goods_guige_value);
$guige_data = array();
foreach ($goods_guige_value as $k => $v){
if ($guige_value_k != $k){
$guige_data[] = $v;
}
}
//数组转字符串
$info["value"] = implode(",", $guige_data);
db::name("goods_guige_attr")->where("id = $guige_id")->data($info)->update();
return $this->succeed_json("ok");
}
/**
* 规格生成
*/
public function guige_add()
{
$goods_id = input("param.goods_id");
//属性信息
$goods_guige_attr = db::name("goods_guige_attr")->where("goods_id = $goods_id")->order("id asc")->select();
$list = array();
foreach ($goods_guige_attr as $k => $v){
$array = explode(',',$v['value']);
$list[$k] = $array;
}
$res = array();
foreach ($list as $k => $v) {
$res = Common_goods::getCombinationToString($v);
}
/*数据存储*/
db::name("goods_guige_value")->where("goods_id = $goods_id")->delete();//删除之前录
$goods_info = db::name("goods")->where("goods_id = $goods_id")->find();
$res_count = count($res);
$kucun = $goods_info["stocks"] / $res_count;
$kuucn_info = intval($kucun);
foreach ($res as $k2 => $v2){
$info["goods_id"] = $goods_id;
$info["guige_name"] = $v2;
$info["price"] = $goods_info["price"];
$info["stocks"] = $kuucn_info;
$info["img"] = $goods_info["img"];
$info["add_time"] =time();
db::name("goods_guige_value")->insertGetId($info);
}
$goods_stocks = db::name("goods_guige_value")->where("goods_id = $goods_id")->sum("stocks");
$info2["stocks"] = $goods_stocks;
db::name("goods")->where("goods_id = $goods_id")->data($info2)->update();
return $this->succeed_json("生成成功");
}
/**
* 规格金额修改
*/
public function guige_pric_amend()
{
$guige_id = input("param.guige_id");
$info["price"] = input("param.price");
db::name("goods_guige_value")->where("id = $guige_id")->data($info)->update();
return $this->succeed_json("ok");
}
/**
* 规格库存修改
*/
public function guige_stocks_amend()
{
$guige_id = input("param.guige_id");
$goods_id = db::name("goods_guige_value")->where("id = $guige_id")->value("goods_id");
$info["stocks"] = input("param.stocks");
db::name("goods_guige_value")->where("id = $guige_id")->data($info)->update();
$goods_stocks = db::name("goods_guige_value")->where("goods_id = $goods_id")->sum("stocks");
$info2["stocks"] = $goods_stocks;
db::name("goods")->where("goods_id = $goods_id")->data($info2)->update();
return $this->succeed_json("ok");
}
/**
* 规格缩略图修改
*/
public function guige_img_amend()
{
$guige_id = input("param.guige_id");
if (!empty($_FILES["img"]['name'])) {
$info["img"]= '/public/uploads/'.$this->upload("img");//广告缩略图
}
db::name("goods_guige_value")->where("id = $guige_id")->data($info)->update();
return $this->succeed_json("ok");
}
/**
* 规格信息删除
*/
public function guige_list_del(){
$guige_id = input("param.guige_id");
$goods_id = input("param.goods_id");
db::name("goods_guige_value")->where("id = $guige_id")->delete();
return $this->succeed_json("删除成功");
}
/*图册上传*/
public function goods_photo_upload()
{
$photo_img = '';
if (!empty($_FILES["photo_img"]['name'])) {
$photo_img= '/public/uploads/'.$this->upload("photo_img");//缩略图
}
$info = [
'goods_id'=>input("param.goods_id"),
'photo_img'=>$photo_img,
'sort'=>0,
'add_time'=>time(),
];
db::name("goods_photo")->insertGetId($info);
return $this->succeed_json("上传成功");
}
/*图册查询*/
public function goods_photo()
{
$goods_id = input("param.goods_id");
$list = db::name("goods_photo")->where("goods_id = $goods_id")->order("sort desc")->select();
$str = '';
foreach ($list as $k => $v){
$str .= ' <div class="listItem box">
<div class="x" onclick="photo_del('.$v["id"].')">x</div>
<img src="'.$v['photo_img'].'" alt="">
<div class="text">
<input type="text" value="'.$v["sort"].'" id="photo_sort'.$v["id"].'">
</div>
</div>
<script>
$("#photo_sort"+'.$v["id"].').blur(function(){
var id = "'.$v["id"].'";
var goods_id = "'.$v["goods_id"].'";
var sort = $("#photo_sort"+'.$v["id"].').val();
$.ajax({
type:"post",
url:"/admin/Goods/goods_photo_sort",
data:{"id":id,"sort":sort},
dataType: "json",
success: function(res) {
photo(goods_id);
}
});
})
</script>';
}
$data = [
'str'=>$str,
];
return $this->succeed_json("ok",$data);
}
/*图册删除*/
public function goods_photo_del()
{
$id = input("param.id");
$info = db::name("goods_photo")->where("id = $id")->find();
if(file_exists($_SERVER["DOCUMENT_ROOT"].$info["photo_img"])){
unlink($_SERVER["DOCUMENT_ROOT"].$info["photo_img"]);
}
db::name("goods_photo")->where("id = $id")->delete();
$data = [
'goods_id'=>$info["goods_id"],
];
return $this->succeed_json("删除成功",$data);
}
/*图库排序修改*/
public function goods_photo_sort()
{
$id = input("param.id");
$info = [
'sort'=>input("param.sort"),
];
db::name("goods_photo")->where("id = $id")->data($info)->update();
return $this->succeed_json("ok");
}
}