1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- <?php
- declare(strict_types=1);
- namespace app\model;
- use think\facade\Db;
- use think\Model;
- /**
- * @mixin \think\Model
- *
- */
- class VrFloder extends Model
- {
- /**
- * 数据添加前置操作
- */
- public static function onBeforeWrite($floder)
- {
- // 1 如果是修改,且没有根, 则只是修改信息,并未修改结构位置
- if (!empty($floder->id) && empty($floder->pid)) return true;
- // 2 如果是修改,且文件夹位置变更, 则将后续位置信息减2
- if (!empty($floder->id) && !empty($floder->pid)) {
- if ($floder->fld_type == 1) {
- $conditionLeft = [['lft', '>', $floder->rgt], ['fld_type', '=', 1], ['create_user', '=', $floder->create_user]];
- $conditionRight = [['rgt', '>', $floder->rgt], ['fld_type', '=', 1], ['create_user', '=', $floder->create_user]];
- } else {
- $conditionLeft = [['lft', '>', $floder->rgt], ['fld_type', '=', 2], ['root_id', '=', $floder->root_id]];
- $conditionRight = [['rgt', '>', $floder->rgt], ['fld_type', '=', 2], ['root_id', '=', $floder->root_id]];
- }
- VrFloder::where($conditionLeft)->update(['lft' => Db::raw('lft-2')]);
- VrFloder::where($conditionRight)->update(['rgt' => Db::raw('rgt-2')]);
- }
- // 3 如果是在根下添加文件夹
- if (empty($floder->id) && empty($floder->pid)) {
- if ($floder->fld_type == 1) { // 个人
- $parent = VrFloder::where(['fld_type' => 1, 'create_user' => $floder->create_user, 'lft' => 1, 'depth' => 0])->find();
- } else { // 团队根
- $parent = VrFloder::where(['fld_type' => 2, 'root_id' => $floder->root_id, 'lft' => 1, 'depth' => 0])->find();
- }
- if (empty($parent)) {
- $parentId = VrFloder::insertGetId([
- 'fld_name' => '全部',
- 'createtime' => time(),
- 'vr_num' => 0,
- 'fld_type' => $floder->fld_type,
- 'create_user' => $floder->create_user,
- 'lft' => 1,
- 'rgt' => 2,
- 'depth' => 0,
- 'root_id' => $floder->root_id ?? null
- ]);
- $parent = VrFloder::find($parentId);
- }
- }
- // 4 添加子文件夹
- if (empty($floder->id) && !empty($floder->pid)) $parent = VrFloder::find($floder->pid);
- $conditionLeft = [['lft', '>', $parent->rgt], ['fld_type', '=', $parent->fld_type], ['create_user', '=', $floder->create_user]];
- $conditionRight = [['rgt', '>=', $parent->rgt], ['fld_type', '=', $parent->fld_type], ['create_user', '=', $floder->create_user]];
- VrFloder::where($conditionLeft)->update(['lft' => Db::raw('lft+2')]);
- VrFloder::where($conditionRight)->update(['rgt' => Db::raw('rgt+2')]);
- $floder->lft = $parent->rgt;
- $floder->rgt = $parent->rgt + 1;
- $floder->depth = $parent->depth + 1;
- return true;
- }
- public function group()
- {
- return $this->hasmany(VrGroup::class, 'floder_id', 'id');
- }
- /**
- * 处理
- */
- public function getCreatetimeAttr($value){
- if (empty($value)) return $value;
- return date('Y-m-d H:i:s',(int)$value);
- }
- }
|