255], ['is_delete', 'default', 'value'=> District::IS_DELETE_NO], [['name'],'required', 'on'=> [self::SCENARIO_ADD, self::SCENARIO_EDIT]], [['id'],'required', 'on'=> [self::SCENARIO_DEL, self::SCENARIO_EDIT]], ['id', 'string', 'on' => self::SCENARIO_DEL], ['search_key', 'string', 'on' => self::SCENARIO_LIST], [['id', 'lng','lat','level','adcode','citycode'], 'safe'], ]; } /** * {@inheritdoc} */ public function attributeLabels() { return [ 'id' => 'ID', 'parent_id' => 'Parent ID', 'citycode' => 'Citycode', 'adcode' => 'Adcode', 'name' => 'Name', 'lng' => '经度', 'lat' => '纬度', 'level' => 'Level', 'is_delete' => 'IS DELETE' ]; } public function scenarios() { $scenarios = parent::scenarios(); return $scenarios; } /* ************************************************* */ public function saveCountryside() { if (!$this->validate()) { return [ 'code' => 1, 'msg' => array_shift($this->getFirstErrors()), ]; } if ($this->id) { $model = District::findOne($this->id); } else { $model = new District(); } $parent = District::findOne($this->parent_id); if(!$parent){ return [ 'code' => 1, 'msg' => '参数错误' ]; } if($parent->level == 'province'){ $model->level = 'city'; } if($parent->level == 'city'){ $model->level = 'district'; } if($parent->level == 'district'){ $model->level = 'town'; } if($parent->level == 'town'){ $model->level = 'village'; } $model->parent_id = $this->parent_id; $model->citycode = $parent->citycode; $model->adcode = $parent->adcode; $model->name = $this->name; $model->lng = $this->lng ?? ''; $model->lat = $this->lat ?? ''; if (!$model->save()) { return [ 'code' => 1, 'msg' => array_shift($model->getFirstErrors()), ]; } return [ 'code' => 0, 'msg' => '保存成功', 'data' => $model, ]; } /* ************************************************* */ public function searchDistrict() { $data = District::getAll2(1); return [ 'code' => 0, 'msg' => 'success', 'data' => $data ]; $query = District::find(); if ($this->is_have_page) { $query->where(['is_delete' => District::IS_DELETE_NO])->andWhere(['or',['level' => 'village'],['level' => 'town']])->orderBy("id desc"); // 搜索 if ($this->search_key) { $query->andWhere(['like', 'name', $this->search_key]); } $list = pagination_make($query); foreach ($list['list'] as &$val) { $val['created_at'] = date('Y-m-d H:i:s', $val['created_at']); $val['updated_at'] = date('Y-m-d H:i:s', $val['updated_at']); if($val['level'] == 'town') { $town_id = $val['id']; $val['level_name'] = '乡镇'; } elseif($val['level'] == 'village') { $town_id = $val['parent_id']; $val['level_name'] = '村庄'; } $town = District::findOne($town_id); $district = District::findOne($town->parent_id); $city = District::findOne($district->parent_id); $province = District::findOne($city->parent_id); $val['area'] = [ 'province_id' => $province->id, 'city_id' => $city->id, 'district_id'=> $district->id, 'town_id'=> $town_id, ]; $val['parent_name'] = $province->name.'/'.$city->name.'/'.$district->name.'/'.$town->name; } $data = [ 'data' => $list['list'], 'pageNo' => $list['pageNo'], 'totalCount' => $list['totalCount'] ]; } else { $data = $query->where(['is_delete' => District::IS_DELETE_NO])->andWhere(['or',['level' => 'village'],['level' => 'town']])->orderBy("id desc")->asArray()->all(); foreach ($data as &$val) { $val['created_at'] = date('Y-m-d H:i:s', $val['created_at']); $val['updated_at'] = date('Y-m-d H:i:s', $val['updated_at']); if($val['level'] == 'town') { $town_id = $val['id']; $val['level_name'] = '乡镇'; } elseif($val['level'] == 'village') { $town_id = $val['parent_id']; $val['level_name'] = '村庄'; } $town = District::findOne($town_id); $district = District::findOne($town->parent_id); $city = District::findOne($district->parent_id); $province = District::findOne($city->parent_id); $val['area'] = [ 'province_id' => $province->id, 'city_id' => $city->id, 'district_id'=> $district->id, 'town_id'=> $town_id, ]; $val['parent_name'] = $province->name.'/'.$city->name.'/'.$district->name.'/'.$town->name; } } return [ 'code' => 0, 'msg' => 'success', 'data' => $data ]; } public function delCountryside() { if ($this->validate()) { $t = \Yii::$app->db->beginTransaction(); if ($this->scenario !== self::SCENARIO_DEL) { return [ 'code' => 1, 'msg' => '删除失败' ]; } $model = District::findOne(['id' => $this->id]); $son = District::findOne(['parent_id' => $this->id, 'is_delete' => 0]); if($son){ return [ 'code' => 1, 'msg' => "乡镇有下级村庄未删除,请先删除村庄后再删除乡镇" ]; } $model->is_delete = District::IS_DELETE_YES; if (!$model || !$model->save()) { $t->rollBack(); return [ 'code' => 1, 'msg' => $model->getErrorSummary(false)[0] ]; } $t->commit(); return [ 'code' => 0, 'msg' => '删除成功' ]; // 所有输入数据都有效 all inputs are valid } else { // 验证失败:$errors 是一个包含错误信息的数组 return [ 'code' => 1, "msg" => $this->getErrorSummary(false)[0] ]; } } public static function getDistrictList(){ return District::find()->where(['is_delete' => District::IS_DELETE_NO])->orderBy(['sort desc, id desc'])->select('*')->asArray()->all(); } }