[self::SCENE_DELETE,self::SCENE_STATUS]], [['sort','status','store_id','id'],'integer', 'on' => [self::SCENE_LIST,self::SCENE_EDIT,self::SCENE_DELETE]], [['name','sort','status'],'required','on' => self::SCENE_EDIT], [['ids'],'required','on' => [self::SCENE_DELETE,self::SCENE_STATUS]], ['status','required','on' => self::SCENE_STATUS] ]; } /** * 自定义验证规则:确保 ids 是数组且长度大于 0 */ public function validateIds($attribute, $params) { if (!is_array($this->$attribute)) { $this->addError($attribute, 'ids 必须是一个数组。'); return; } if (count($this->$attribute) === 0) { $this->addError($attribute, 'ids 数组的长度必须大于 0。'); } } public function getList():array{ $query = MaterialCategory::find()->where(['store_id'=>$this->store_id]) ->andWhere(['OR', ['delete_time' => 0], ['IS', 'delete_time', NULL]])->orderBy('sort ASC'); if($this->status != -1){ $query->andWhere(['status'=>$this->status]); } if(!empty($this->name)){ $query->andWhere(['like','name',$this->name]); } return [ 'code' => 0, 'data' => pagination_make($query), 'msg' => '数据获取成功' ]; } public function getListNoPage():array{ $query = MaterialCategory::find()->where(['store_id'=>$this->store_id]) ->andWhere(['OR', ['delete_time' => 0], ['IS', 'delete_time', NULL]])->orderBy('sort ASC'); return [ 'code' => 0, 'data' => $query->select('id,name,sort,status')->asArray()->all(), 'msg' => '数据获取成功' ]; } public function postEdit():array { try { $model = MaterialCategory::findOne($this->id); if(empty($model)){ $model = new MaterialCategory(); } $model->store_id = $this->store_id; $model->name = $this->name; $model->sort = $this->sort; $model->status = $this->status; if($model->save()){ return ['code' => 0,'msg' => '保存成功']; }else{ return ['code' => 1,'msg' => '保存失败','data' => $model->getErrors()]; } }catch (\Exception $e){ return ['code' => 1, 'msg' => $e->getMessage()]; } } public function postDelete():array { try { $model = MaterialCategory::find()->where(['id' => $this->ids])->all(); if(empty($model)){ return ['code' => 1,'msg' => '数据不存在']; } // 验证分类下是否存在对应的素材 $materialCount = Material::find()->where(['store_id' => $this->store_id, 'material_category_id' => $this->ids])->andWhere(['OR', ['delete_time' => 0], ['IS', 'delete_time', NULL]])->count(); if($materialCount > 0){ return ['code' => 1,'msg' => '分类下存在'.$materialCount.'条素材,请先删除素材']; } $result = MaterialCategory::updateAll(['delete_time' => date('Y-m-n H:i:s')],['id' => $this->ids]); if($result > 0){ return ['code' => 0,'msg' => '成功删除'.$result.'条数据']; }else{ return ['code' => 1,'msg' => '删除失败']; } }catch (\Exception $e){ return ['code' => 1, 'msg' => $e->getMessage()]; } } public function postStatus():array { try { $model = MaterialCategory::find()->where(['id' => $this->ids])->all(); if(empty($model)){ return ['code' => 1,'msg' => '数据不存在']; } MaterialCategory::updateAll(['status' => $this->status],['id' => $this->ids]); return ['code' => 0,'msg' => '保存成功']; }catch (\Exception $e){ return ['code' => 1, 'msg' => $e->getMessage()]; } } }