tp6 where whereOR关联使用

Db::name($this->table)->alias($alias)
->where($condition)
->where(function ($query) use ($condition_or) {
    $query->whereOr($condition_or);
})
->order($order);

遇到whereOr和where组合链式操作会把or条件和and条件并列处理

使用闭包放在where里就可以加上类似 and ( xxx or xxx)的条件了

layui input带单位

<span class="form-control-unit">万元</span>

.form-control-unit {
    position: absolute;
    top: 0;
    right: 0;
    z-index: 2;
    display: block;
    width: 34px;
    height: 34px;
    line-height: 34px;
    text-align: center;
    pointer-events: none;
}

layui 操作兄弟ifram

首先 在父页面创建一个div id = detail_page_data, 在ifram1 调用parent.layer_open的时候保存 ifram1的index

然后在ifram2里可以获取ifram1的index从而通过parent 拿到ifram1的contentWindow.document

然后就可以操作ifram1里的信息了

var relation_layer_index = parent.$('#detail_page_data').data('relation_layer_index');
var relation_ifram = parent.$('#layui-layer-iframe'+relation_layer_index);
$doc = relation_ifram[0].contentWindow.document;
$($doc).find("#bargain_uid").val()

TP后端基础框架搭建(二)

该篇主要描写权限部分的配置
1.对用权限相关表创建model:admin/model 

->Group

->AuthRule

2.为多站点做准备 创建site表

创建model: app/common/model/

->Site.php

3.将之前创建的app/model.php 移到app/common/model/下

修改common.php model方法使用的路径

function model($table = '')
{
    return new \app\common\model\Model($table);
}

4.将之前创建的app/admin/model/BaseModel 移到app/common/model/下

修改之前extend baseModel的model里引用路径

5.baseController添加

protected function assign($name, $value = '')
    {
        View::assign($name, $value);

        return $this;
    }

一番设置 后台首页就展示出来了

6.app\request下添加function

/**
     * 当前访问模块
     * @param string $module
     */
    public function module($module = '')
    {
        return App('http')->getName();
    }

    /**
     * 解析url
     */
    public function parseUrl()
    {
//        $addon = $this->addon() ? $this->addon() . '://' : '';
        $addon = '';
        $result =  $addon.$this->module().'/'.$this->controller().'/'.$this->action();
        return strtolower($result);
    }

7.系统基础设置页面

8.权限管理页面

TP后端基础框架搭建(一)

//切换composer 为国内 阿里源
composer config -g repo.packagist composer 

//创建项目tp_base
composer create-project topthink/think tp_base

解析测试域名到项目

image.png

//tp多应用安装
composer require topthink/think-multi-app

//tp模板引擎
composer require topthink/think-template
composer require topthink/think-view

//tp验证码
composer require topthink/think-captcha

//tp翻页
composer require big-dream/think-paginator-driver

//tp whoops
composer require xiaodi/think-whoops

//tp log
composer require topthink/think-log

//tp 权限
composer require liliuwei/thinkphp-auth=2.0.*

//图片管理
composer require  intervention/image

1.使用多应用模式

//创建多应用
php think build index
php think build admin
php think build common

image.png

2.配置权限管理

配置权限管理前需要先把mysql的连接参数配置好

copy .example.env  到 .env 然后配置mysql连接参数

image.png

修改config下auth.php

return[
    // 权限设置
    'auth_config'            => [
        'auth_on'            => true,                      // 认证开关
        'auth_type'          => 1,                         // 认证方式,1为实时认证;2为登录认证。
        'auth_group'         => 'auth_group',        // 用户组数据表名
        'auth_group_access'  => 'auth_group_access', // 用户-用户组关系表
        'auth_rule'          => 'auth_rule',         // 权限规则表
        'auth_user'          => 'admin'             // 用户信息表
    ],
];

运行数据库导入文件吗,导入权限相关表

在admin应用下创建lang 多语言目录

admin应用下创建event目录->initConfig.php 初始化常量以及基础配置

注册到event文件里

image.png

创建admin下BaseModel以及Admin model

BaseModel 定义getLang方法,获取语言包,  success,err通用方法

model/Admin 创建admin表的模型 ,以及获取admin的方法

创建login的controller,view

copy 各种css,js



static 创建  app/admin目录 用来存放admin专用的一些css js文件


captcha需要打开gd2拓展

不输出验证码的话可以自己写一个验证码的function

//Captcha
public function captcha()
{
    ob_end_clean();
    return Captcha::create();
}

app/common.php 配置公共function

app/model.php 配置通用model类
登录成功

创建admin/index 首页controller和view

这个时候就要开始权限管理的配置了

因为在admin/index就会有menu展示,需要涉及到权限的东西

百度地图和腾讯地图互转

const bMapTransQQMap = function(lng,lat){
	let x_pi = 3.14159265358979324 * 3000.0 / 180.0;
	let x = lng - 0.0065;
	let y = lat - 0.006;
	let z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
	let theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
	let lngs = z * Math.cos(theta);
	let lats = z * Math.sin(theta);
	return {
		lng: lngs+0.0005,
		lat: lats
	}
}

const qqMapTransBMap = function(lng,lat){
	let x_pi = 3.14159265358979324 * 3000.0 / 180.0;
	let x = lng;
	let y = lat;
	let z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
	let theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
	let lngs = z * Math.cos(theta) + 0.0065;
	let lats = z * Math.sin(theta) + 0.006;
	return {
		//经度
		lng: lngs-0.0005,
		//纬度
		lat: lats
	}
}

export default {
    bMapTransQQMap,
	qqMapTransBMap,
}

uniapp h5 & 小程序使用腾讯地图组件

项目需求使用uniapp 在小程序和h5端使用地图并支持选点

遇到以下问题:

小程序内运行<iframe>会是空的

使用web-view 组件传入腾讯地图的src后也不行

没有办法只能去做适配 零散代码如下:

manifest.json

/* 小程序特有相关 */
"mp-weixin": {
	"appid": "U appid xxxxxxxxx",
	"setting": {
		"urlCheck": false,
		"es6": true
	},
	"usingComponents": true,
	"permission": {
		"scope.userLocation": {
			"desc": "你的位置信息将用于小程序定位"
		}
	},
	"plugins": {
		"chooseLocation": {
			"version": "1.0.5",
			"provider": "wx76a9a06e5b4e693e"
		}
	}
},

H5端选点后,获取到选点坐标内容 做相关处理

//url https://apis.map.qq.com/tools/locpicker?search=1&type=1&key=U3MBZ-VGILU-WIPVM-2UEDJ-HOZT6-XAF6G&referer=myapp

<uni-popup ref="popup" type="bottom" class="buttom_popup">
    <iframe :src=this.url id="mapPage" width="100%" height="500rpx" frameborder=0></iframe>	
</uni-popup>

onLoad: function(e) {
	  //#ifdef H5
	  window.addEventListener('message', function(event) {
		var loc = event.data;
		if (loc && loc.module == 'locationPicker') {
			that.changeLoc(loc);
		}
	  }, false);
	  //#endif
},

小程序端引入组件,初始化

onShow: function(){
	//#ifdef MP-WEIXIN
	const chooseLocation = requirePlugin('chooseLocation')
	const location = chooseLocation.getLocation() // 如果点击确认选点按钮,则返回选点结果对象,否则返回null
	console.log("您所选择的位置:", location)
	if(location){
		//拿到选点后做相关逻辑处理
	}	
	//#endif
},
//part view 
<input @click="open" disabled="true" name="coordinates" class="uni-input" placeholder="地图坐标" v-model="formData.coordinates"/>

//part function
open(){
	//#ifdef H5
	//如果是h5 通过popup层打开iframe窗口调用地图组件
	this.$refs.popup.open()
	//#endif
	
	//#ifdef MP-WEIXIN
	//如果是小程序 调用function 跳转地图页面选点 选点后会回到本,在onShow里接收选点信息,再做相关逻辑处理
	this.getAddress();
	//#endif
	
},
getAddress() {
	const key = 'U3MBZ-VGILU-WIPVM-2UEDJ-HOZT6-XAF6G' //使用在腾讯位置服务申请的key
	const referer = 'Leo' //调用插件的app的名称
	
	//初始化选点坐标 
	const location = JSON.stringify({
		latitude: xxxxxx,
		longitude: xxxxxxx
	})

	wx.navigateTo({
		url: 'plugin://chooseLocation/index?key=' + key + '&referer=' + referer + '&location=' + location
	});
},