laravel框架开发多级联动楼盘查询系统(含微信登录)
2019-10-15 admin laravel 1930
一、创建laravel5.8项目
先bt面板新建一个网站,php版本为7.3,mysql为5.7。ssh连接服务器后,进入该网站根目录,执行:
composer create-project laravel/laravel weibo --prefer-dist "5.8.*"
如果没有反映,需要安装composer,如果出现要登录,请更改镜像源为阿里云国内镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
安装完毕后,将weibo目录下的文件全部移动到网站根目录,并授权www:www以755权限,然后在BT面板设置网站运行目录为public,伪静态为laravel即可。
注:如果有多个PHP版本,默认的composer不是PHP7.3,则需要修改:
rm -f /usr/bin/php ln -sf /www/server/php/73/bin/php /usr/bin/php
二、修改配置
修改根目录下的.env文件里的数据库和网址。这时,访问网站应该能显示laravel默认画面页面了。
三、安装laravel-admin插件;要求PHP >= 7.0.0,Laravel >= 5.5.0,Fileinfo PHP Extension,进入网站根目录执行:
composer require encore/laravel-admin php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"
确认数据库账号密码在.env配置正确后,执行数据迁移:
php artisan admin:install
如果没有错误的话,访问http://域名/admin/应该能正常访问了。登录账号admin,密码admin。这时,如果修改管理员头像,发现上传出错
Disk [admin] not configured, please add a disk config in `config/filesystems.php`.
需要配置存储路径,在config/filesystems.php 添加一项disk:
'disks' => [ ... , 'admin' => [ 'driver' => 'local', 'root' => public_path('uploads'), 'visibility' => 'public', 'url' => env('APP_URL').'/uploads', ], ],
然后选择上传的disk,打开config/admin.php设置为:
'upload' => [ 'disk' => 'admin', 'directory' => [ 'image' => 'images', 'file' => 'files', ] ],
安装中文语言包:
composer require "overtrue/laravel-lang:~3.0"
安装成功后,在 config/app.php 文件中将以下这一行:
Illuminate\Translation\TranslationServiceProvider::class,
替换为:
Overtrue\LaravelLang\TranslationServiceProvider::class,
修改config/app.php为中文
locale' => 'zh-CN',
时区修改:
'timezone' => 'Asia/Shanghai',
四、安装excel3.1 ,用于导入导出excel文件
composer require maatwebsite/excel
编辑config/app.php文件,在providers里面添加一行:
'providers' => [ /* * Package Service Providers... */ Maatwebsite\Excel\ExcelServiceProvider::class, ]
在aliases里面添加一行:
'aliases' => [ ... 'Excel' => Maatwebsite\Excel\Facades\Excel::class, ]
生成配置文件(config/excel.php):
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
五、安装微信登录组件,后台添加用户管理功能
如果没有微信服务号,为了调试微信登录,可进入
https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
申请一个测试号。
1. 运行以下命令安装扩展包
composer require laravel/socialite
2.在你的 config/app.php 文件中添加以下配置信息
'providers' => [ Laravel\Socialite\SocialiteServiceProvider::class, ], 'aliases' => [ 'Socialite' => Laravel\Socialite\Facades\Socialite::class, ],
3.安装 socialiteProviders/weixin
composer require socialiteproviders/weixin
在你的 config/app.php 文件中添加以下配置信息
'providers' => [ \SocialiteProviders\Manager\ServiceProvider::class, ],
在你的 app/Providers/EventServiceProvider.php 文件中添加以下事件处理器
protected $listen = [ \SocialiteProviders\Manager\SocialiteWasCalled::class => [ 'SocialiteProviders\Weixin\WeixinExtendSocialite@handle', ], ];
4. 添加配置
在你的 .env 文件中添加以下配置
WEIXIN_KEY=你的AppID WEIXIN_SECRET=你的AppSecret WEIXIN_REDIRECT_URI=你的回调地址
例如,我的测试号为:
WEIXIN_KEY=wx9f2ec7cf6c533883 WEIXIN_SECRET=fa245965878ec24c34d6d6d9b2b35ee9 WEIXIN_REDIRECT_URI=http://lpcx.dzbfsj.com/weixin/callback
5. 在你的 config/services.php 文件中添加以下配置
'weixin' => [ 'client_id' => env('WEIXIN_KEY'), 'client_secret' => env('WEIXIN_SECRET'), 'redirect' => env('WEIXIN_REDIRECT_URI'), # 这一行配置非常重要,必须要写成这个地址。 'auth_base_uri' => 'https://open.weixin.qq.com/connect/qrconnect', ],
6.添加路由
//微信一键登录 Route::get('/weixin', 'WeixinController@weixin')->name('weixin'); Route::get('/weixin/callback', 'WeixinController@weixinlogin');
7.微信登录控制器
namespace App\Http\Controllers; use Illuminate\Http\Request; use Laravel\Socialite\Facades\Socialite; use App\User; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Str; class WeixinController extends Controller { public function weixin(){ return Socialite::with('weixin')->redirect(); } public function weixinlogin(){ $user = Socialite::driver('weixin')->user(); //dd($user); $check = User::where('openid', $user['openid'])->first(); if (!$check) {//如果第一次访问,则注册新号 $customer = User::create([ 'openid' => $user['openid'],//微信openid 'nickname' => $user['nickname'],//微信昵称 'city' => $user['city'],//注册地区 'sex' => $user['sex'],//性别 //'password' => bcrypt(Str::random(60)), 'avatar' => $user['headimgurl'],//头像xjjl 'xjjl' => '',//询价记录 'xjcs' => '0' ]); } else { $customer = $check; } //登录 Auth::login($customer); session()->flash('登录成功', '欢迎,您将在这里开启一段新的旅程~'); return redirect('/'); //return redirect()->route('users.show', [$user]); } }
7.进入laravel-admin后台,添加微信用户管理功能:
首先,使用下面的命令来创建一个对应App\User模型的路由器
php artisan admin:make UserController --model=App\\User
在laravel-admin的路由配置文件app/Admin/routes.php里添加一行:
$router->resource('users', UserController::class);
打开“你的网址/admin/auth/menu”,添加对应的菜单, 然后就能在后台管理页面的左侧边栏看到用户管理页面的链接入口了。
为了直接显示头像,对控制器进行了修改:
namespace App\Admin\Controllers; use App\User; use Encore\Admin\Controllers\AdminController; use Encore\Admin\Form; use Encore\Admin\Grid; use Encore\Admin\Show; class UserController extends AdminController { /** * Title for current resource. * * @var string */ protected $title = '前台用户'; /** * Make a grid builder. * * @return Grid */ protected function grid() { $grid = new Grid(new User); $grid->column('id', __('Id')); $grid->column('openid', __('Openid')); $grid->column('nickname', __('昵称')); $grid->column('city', __('城市')); $grid->column('sex', __('性别')); $grid->column('avatar', __('头像'))->image(50,50); $grid->column('xjjl', __('询价记录')); $grid->column('xjcs', __('询价次数')); $grid->column('created_at', __('注册时间')); $grid->column('updated_at', __('更新时间')); return $grid; } /** * Make a show builder. * * @param mixed $id * @return Show */ protected function detail($id) { $show = new Show(User::findOrFail($id)); $show->field('id', __('Id')); $show->field('openid', __('Openid')); $show->field('nickname', __('昵称')); $show->field('city', __('城市')); $show->field('sex', __('性别')); $show->field('avatar', __('头像'))->image(50,50); $show->field('xjjl', __('询价记录')); $show->field('xjcs', __('询价次数')); $show->field('created_at', __('注册时间')); $show->field('updated_at', __('更新时间')); return $show; } /** * Make a form builder. * * @return Form */ protected function form() { $form = new Form(new User); $form->text('openid', __('Openid')); $form->text('nickname', __('昵称')); $form->text('city', __('城市')); $form->text('sex', __('性别')); $form->image('avatar', __('头像')); $form->text('xjjl', __('询价记录')); $form->number('xjcs', __('询价次数')); return $form; } }
对app/User.php数据模型也进行修改:
namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use Notifiable; /** * The attributes that are mass assignable. * * @var array 用户模型中默认为我们添加了 fillable 在过滤用户提交的字段,只有包含在该属性中的字段才能够被正常更新 */ protected $fillable = [ 'openid', 'nickname', 'city','sex','avatar','xjjl','xjcs', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ //'avatar', ]; /** * The attributes that should be cast to native types. * * @var array */ protected $casts = [ 'email_verified_at' => 'datetime', ]; }
直接用表格右上的新增按钮,导入数据。注意先修改一下这个文件,不然提交的不是中文地区名,而是编码:
之后,修改控制器CkcssjController.php如下:
namespace App\Admin\Controllers; use App\Models\CslbModel; use App\Http\Controllers\Controller; use Encore\Admin\Controllers\HasResourceActions; use Encore\Admin\Form; use Encore\Admin\Grid; use Encore\Admin\Layout\Content; use Encore\Admin\Show; use App\Admin\Actions\Post\ImportPost; use App\Admin\Actions\Post\Comments; use Maatwebsite\Excel\Facades\Excel; use App\Models\TableImport; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; class CslbController extends Controller { use HasResourceActions; /** * Index interface. * * @param Content $content * @return Content */ public function index(Content $content) { return $content ->header('城市数据列表') ->description('如需添加城市数据请点【新增】') ->body($this->grid()); } /** * Show interface. * * @param mixed $id * @param Content $content * @return Content */ public function show($id, Content $content) { return $content ->header('Detail') ->description('description') ->body($this->detail($id)); } /** * Edit interface. * * @param mixed $id * @param Content $content * @return Content */ public function edit($id, Content $content) { return $content ->header('编辑城市名') ->description('description') ->body($this->form()->edit($id)); } /** * Create interface. * * @param Content $content * @return Content */ public function create(Content $content) { return $content ->header('导入城市数据') ->description('description') ->body($this->form()); } /** * Make a grid builder. * * @return Grid */ protected function grid() { $grid = new Grid(new CslbModel); //$grid->id('ID')->sortable(); $grid->biaoming('数据表')->sortable()->display(function($asset_note) {return str_limit($asset_note, 70, '...');}); $grid->province('省')->sortable()->display(function($asset_note) {return str_limit($asset_note, 70, '...');}); $grid->city('市')->sortable()->display(function($asset_note) {return str_limit($asset_note, 70, '...');}); $grid->district('县(区)')->sortable()->display(function($asset_note) {return str_limit($asset_note, 70, '...');}); $grid->sjhs('数据数量')->sortable()->display(function($asset_note) {return str_limit($asset_note, 70, '...');}); $grid->cjz('创建者')->sortable()->display(function($asset_note) {return str_limit($asset_note, 70, '...');}); $grid->created_at('创建时间')->sortable(); $grid->updated_at('更新时间')->sortable(); $grid->quickSearch('city');//快捷搜索 //$grid->disableCreation();//禁用新增按钮 //$grid->tools(function (Grid\Tools $tools) {$tools->append(new ImportPost());});//添加上传数据按钮 $grid->actions(function ($actions) {$actions->add(new Comments);});//添加查看城市数据按钮 //筛选功能 $grid->filter(function ($filter) { $filter->disableIdFilter(); // 去掉默认的id过滤器 $filter->like('biaoming','数据表'); // 按字段模糊筛选 $filter->like('province','省'); // 按字段模糊筛选 $filter->like('city','市'); // 按字段模糊筛选 $filter->like('district','县(区)'); // 按字段模糊筛选 $filter->like('sjhs','数据数量'); // 按字段模糊筛选 $filter->like('cjz','创建者'); // 按字段模糊筛选 $filter->between('created_at','创建时间')->datetime(); // 设置created_at字段的范围筛选 $filter->between('updated_at','更新时间')->datetime(); // 设置created_at字段的范围筛选 }); return $grid; } /** * Make a show builder. * * @param mixed $id * @return Show */ protected function detail($id) { $show = new Show(CslbModel::findOrFail($id)); //$show->id('ID'); $show->biaoming('数据表'); $show->province('省'); $show->city('市'); $show->district('县(区)'); $show->sjhs('数据数量'); $show->cjz('创建者'); $show->created_at('创建时间'); $show->updated_at('更新时间'); return $show; } /** * Make a form builder. * * @return Form */ protected function form() { $form = new Form(new CslbModel); //$form->display('ID'); //$form->text('province','省')->required(); //$form->text('city','市')->required(); //$form->text('district','县(区)')->required(); $form->text('biaoming', '数据表')->readonly()->required()->default('newcity'); $form->distpicker(['province', 'city', 'district'], '选择地区')->required(); $form->text('sjhs','数据数量')->required()->default('0'); $form->file('beizhu', '请选择EXCEL文件')->required()->rules('mimes:xls,xlsx'); $form->display('cjz','创建者'); $form->display('创建时间'); $form->display('更新时间'); $form->disableReset(); //关闭撤销键 $form->saving(function (Form $form) {//保存前获取excel文件,读取并写入数据库 header("Content-Type:text/html;charset=UTF-8"); $file = $form->beizhu;//上传的文件 $filename = $form->province.'-'.$form->city.'-'.$form->district;//地区完整名称 //dd($filename); $data = Excel::toArray(new TableImport, $form->beizhu); $data = $data[0]; $bghs = count($data);//表格行数 $bgls = count($data[0]);//表格列数 $ywbm = md5($filename); //echo '英文表名为:'.$ywbm.'中文表名为:'.$filename.'该表有'.$bghs.'行,'.$bgls.'列'; $result = $this->create_table($ywbm,$data);//写入数据库 if ($result == 1 ){ //导入成功 }else{ return response('数据导入失败,请检查Excel内容是否合规!'); } }); $form->saved(function (Form $form) {//保存后修改表名行数 $filename = $form->province.'-'.$form->city.'-'.$form->district;//地区完整名称 $ywbm = md5($filename);//表名 $sjhs = DB::table($ywbm)->count();//数据行数 //dd($sjhs); DB::table('cslb') ->where('biaoming', 'newcity') ->update(['biaoming' => $ywbm, 'sjhs' => $sjhs]); }); return $form; } public function create_table($ywbm,$data)//创建数据表并写入数据 { $tmp = $ywbm; $va = $data; Schema::dropIfExists($tmp);//测试环境,先删除同名数据表 if (Schema::hasTable($tmp)) { echo '数据表已存在,请先删除再上传!
'; }else{ //print_r($va); Schema::create($tmp, function(Blueprint $table) use ($tmp,$va) //create 方法会接收两个参数:一个是数据表的名称,另一个则是接收 $table(Blueprint 实例)的闭包。 { $fields = $va[0]; //列字段 $table->increments('id');//主键 foreach($fields as $key => $value){ if($key == 0){ $table->string($fields[$key])->nullable();//->unique(); 唯一,根据字段酌情使用 }else{ $table->string($fields[$key])->nullable(); } //$fileds_count = $fileds_count + 1; } }); $value_str= array(); $id = 1; foreach($va as $key => $value){ if($key != 0){ foreach($value as $zdnr){//批量替换里面的值 $zdnr = preg_replace('/\r|\n/', '', $zdnr);//去除换行 $zdnr = str_replace(" ",'',$zdnr);//去除空格 $zdnr = str_replace("'",'',$zdnr);//去除单引号 $zdnr = str_replace(",",'',$zdnr);//去除,号 $zdnr = str_replace(",",'',$zdnr);//去除,号 $value_str[] = "'$zdnr'"; } //dd($value_str); $news = implode(",",$value_str); $news = "$id,".$news; DB::insert("insert into $tmp values ($news)"); //$value_str = ''; $value_str= array(); $id = $id + 1; } } return 1; } } }
点击进入城市数据并编辑CkcssjController.php
namespace App\Admin\Controllers; use App\Models\CkcssjModel; use App\Models\TableEditModel; use App\Http\Controllers\Controller; use Encore\Admin\Controllers\HasResourceActions; use Encore\Admin\Form; use Encore\Admin\Grid; use Encore\Admin\Layout\Content; use Encore\Admin\Show; //use App\Admin\Extensions\PostsExporter; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schema; use Encore\Admin\Grid\Displayers\DropdownActions; class CkcssjController extends Controller { use HasResourceActions; /** * Index interface. * * @param Content $content * @return Content */ public function index(Content $content) { if(isset($_GET['bm'])){//初次进入,保存表名 $bm = $_GET['bm']; session(['bm' => $bm]);//存储bm到session $zwbm = DB::table('cslb')->where('biaoming', $bm)->value('city'); session(['zwbm' => $zwbm]);//存储zwbm到session return $content ->header($zwbm.'数据') ->description($bm) ->body($this->grid()); }else{ $bm = session('bm');//后面列表跳转等,读取bm $zwbm = session('zwbm');//后面列表跳转等,读取zwbm return $content ->header($zwbm.'数据:') ->description($bm) ->body($this->grid()); } } /** * Show interface. * * @param mixed $id * @param Content $content * @return Content */ public function show($id,Content $content) { $bm = session('bm');//从session中获取bm return $content ->header('详情') ->description('description') ->body($this->detail($id)); } /** * Edit interface. * * @param mixed $id * @param Content $content * @return Content */ public function edit($id, Content $content) { return $content ->header('修改') ->description('查询条件') ->body($this->form()->edit($id)); } /** * Create interface. * * @param Content $content * @return Content */ public function create(Content $content) { return $content ->header('设置') ->description('查询条件') ->body($this->form()); } protected function grid() { $bm = session('bm');//从session中获取bm $grid = new Grid(new CkcssjModel($bm)); $zdsz = Schema::getColumnListing($bm);//获取所有字段 unset ($zdsz['0']);//去除id foreach ($zdsz as $zdm){ $grid->$zdm($zdm)->sortable()->display(function($asset_note) {return str_limit($asset_note, 70, '...');})->editable(); } $grid->quickSearch($zdsz);//快捷搜索 /** $zwbm = DB::table('cslb')->where('bm', $bm)->value('city');//导出文件名为项目名 $grid->exporter(new PostsExporter($bm,$zwbm)); //导出为bgsx为excel $grid->header(function ($query) { //表格头部 return ''; }); /** $grid->actions(function ($actions) { //$actions->disableEdit(); // 去掉编辑 }); **/ //筛选功能 $grid->filter(function ($filter) use($zdsz) { //use($zdsz)闭包传送变量 $filter->disableIdFilter(); // 去掉默认的id过滤器 foreach ($zdsz as $zdm){ $filter->like($zdm,$zdm); // 按字段模糊筛选 } }); return $grid; } /** * Make a show builder. * * @param mixed $id * @return Show */ protected function detail($id) { $bm = session('bm');//从session中获取bm $show = new Show(TableEditModel::findOrFail($id)); //findOrFail($id)需要一个id并返回一个模型。如果不存在匹配的模型,则会引发错误, 它会抛出一个error //dd($show); $zdsz = Schema::getColumnListing($bm);//获取所有字段 foreach ($zdsz as $zdm){ $show->$zdm($zdm); } return $show; } /** * Make a form builder. * * @return Form */ protected function form() { $bm = session('bm');//从session中获取bm $form = new Form(new TableEditModel()); $zdsz = Schema::getColumnListing($bm);//获取所有字段 unset ($zdsz['0']);//去除id foreach ($zdsz as $zdm){ $form->text($zdm,$zdm); } $form->disableReset(); //关闭撤销键 return $form; } }操作说明:
点击每行右边的操作,可查看、修改及删除该行数据;点击右上角导出,可导出为EXCEL文件; 点击筛选可进行数据筛选,旁边的搜索框可对全表进行查找;选择多行,可批量删除;排序可点击表头相应字段,进行顺序或倒序排序。
前端使用ajax提交,采用了一个js文件distpicker.js来做省市县联动。只需要在放在/resources/js目录下,然后编辑app.js加载即可:require('./distpicker');
使用方法:https://github.com/fengyuanchen/distpicker
前端控制器
namespace App\Http\Controllers; use App\User; use Illuminate\Http\Request; use Laravel\Socialite\Facades\Socialite; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Str; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schema; class WeixinController extends Controller { public function weixin(){ //dd($rules); return view('lpcx');//首页 //return redirect('/'); //return redirect()->route('users.show', [$user]); } public function xq(Request $request)//根据省市县查询完整小区名并添加到下拉框供用户选择 { $sheng = $request->sheng; $shi = $request->shi; $xian = $request->xian; //获取该省市区的楼盘表名 $biaoming = DB::table('cslb')->where([ ['province', '=', $sheng], ['city', '=', $shi], ['district', '=', $xian], ])->value('biaoming'); //根据用户输入的小区名,获取该小区所有数据 $xiaoqu = DB::table($biaoming)->select('小区')->distinct()->get();//获取完整小区名列表并去重 foreach ($xiaoqu as $value){//二维转一维数组 foreach ($value as $val){ $xq[] = $val; } } sort($xq);//数组排序 $cxmz = array('status' => '200','biaoming' => $biaoming,'xiaoqu' => $xq); echo json_encode($cxmz,JSON_UNESCAPED_UNICODE); } public function zh(Request $request)//第一级选中幢号 { $sheng = $request->sheng; $shi = $request->shi; $xian = $request->xian; $xqmc = $request->xqmc; //获取该省市区的楼盘表名 $biaoming = DB::table('cslb')->where([ ['province', '=', $sheng], ['city', '=', $shi], ['district', '=', $xian], ])->value('biaoming'); //根据用户输入的小区名,获取该小区所有数据 $zhuang = DB::table($biaoming)->where('小区',$xqmc)->select('幢号')->distinct()->get();//查询幢号这一列并去重 foreach ($zhuang as $value){//二维转一维数组 foreach ($value as $val){ $zh[] = $val; } } sort($zh);//数组排序 $cxmz = array('status' => '200','biaoming' => $biaoming,'zhuang' => $zh); echo json_encode($cxmz,JSON_UNESCAPED_UNICODE); } public function szc(Request $request)//第二级根据幢号查找所在层 { $biaoming = $request->biaoming; $xqmc = $request->xqmc; $zh = $request->zh; //根据用户输入的小区名,获取该小区所有数据 $szc = DB::table($biaoming)->where([['小区','like', '%'.$xqmc.'%'],['幢号', '=', $zh]])->select('所在层')->distinct()->get();//模糊查询所在层这一列并去重 foreach ($szc as $value){//二维转一维数组 foreach ($value as $val){ $szcsz[] = $val; } } sort($szcsz);//数组排序 $cxmz = array('status' => '200','szc' => $szcsz); echo json_encode($cxmz,JSON_UNESCAPED_UNICODE); } public function fh(Request $request)//第三级根据所在层查找房号 { $biaoming = $request->biaoming; $xqmc = $request->xqmc; $zh = $request->zh; $szc = $request->szc; //根据用户输入的小区名,获取该小区所有数据 $fh = DB::table($biaoming)->where([['小区','like', '%'.$xqmc.'%'],['幢号', '=', $zh],['所在层', '=', $szc]])->select('房号')->distinct()->get();//模糊查询房号这一列并去重 foreach ($fh as $value){//二维转一维数组 foreach ($value as $val){ $fhsz[] = $val; } } sort($fhsz);//数组排序 $cxmz = array('status' => '200','fh' => $fhsz); echo json_encode($cxmz,JSON_UNESCAPED_UNICODE); } public function jzmj(Request $request)//第三级根据所在层查找房号 { $biaoming = $request->biaoming; $xqmc = $request->xqmc; $zh = $request->zh; $szc = $request->szc; $fh = $request->fh; //根据用户输入的小区名,获取该小区所有数据 $jzmj = DB::table($biaoming)->where([['小区','like', '%'.$xqmc.'%'],['幢号', '=', $zh],['所在层', '=', $szc],['房号', '=', $fh]])->select('建筑面积','房屋用途','结构')->first();//查询建筑面积 $cxmz = array('status' => '200','jzmj' => $jzmj); echo json_encode($cxmz,JSON_UNESCAPED_UNICODE); } public function jsjg(Request $request)//第四级根据{'sheng':sheng,'shi':shi,'xian':xian,'xqmc':xqmc,'zh':zh,'szc':szc,'fh':fh,'jzmj':jzm