model = new Contract(); $this->uid = get_login_admin("id"); $this->unit_name = Db::name('department')->where("id", get_login_admin("unit_name"))->value("title"); } const ZERO = 0; const ONE = 1; const TWO = 2; const THREE = 3; const FORE = 4; const FIVE = 5; const SIX = 6; const SEVEN = 7; public static $Type = [ self::ZERO => '未设置', self::ONE => '普通合同', self::TWO => '框架合同', self::THREE => '补充协议', self::FORE => '其他合同', ]; public static $Status = [ self::ZERO => '待审核', self::ONE => '审核中', self::TWO => '审核通过', self::THREE => '审核拒绝', self::FORE => '已撤销', self::FIVE => '已中止', self::SIX => '已作废', self::SEVEN => '修改中', ]; public static $ArchiveStatus = [ self::ZERO => '未归档', self::ONE => '已归档', ]; public function index() { if (request()->isAjax()) { $param = get_params(); $rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit']; $where = [ ["subject_id", "=", get_login_admin("unit_name")], ["delete_time", "=", 0], ["archive_status", "=", 0] ]; if (!empty($param['keywords'])) { $where[] = ['a.id|a.name|c.title', 'like', '%' . $param['keywords'] . '%']; } if (!empty($param['cate_id'])) { $where[] = ['a.cate_id', '=', $param['cate_id']]; } if (!empty($param['type'])) { $where[] = ['a.type', '=', $param['type']]; } if (isset($param['check_status']) && $param['check_status'] != '') { $where[] = ['a.check_status', '=', $param['check_status']]; } $list = $this->model ->alias('a') ->field('a.*,a.type as type_a, c.title as cate_title') ->where($where) ->join('contract_cate c', 'a.cate_id = c.id') ->order('a.create_time desc') ->paginate($rows, false, ['query' => $param]) ->each(function ($item) { $item->keeper_name = Db::name('Admin')->where(['id' => $item->keeper_uid])->value('nickname'); $item->sign_name = Db::name('Admin')->where(['id' => $item->sign_uid])->value('nickname'); $item->cate_title = Db::name('ContractCate')->where("id", $item->cate_id)->value("title"); $item->sign_time = date('Y-m-d', $item->sign_time); $item->interval_time = date('Y-m-d', $item->start_time) . ' 至 ' . date('Y-m-d', $item->end_time); $item->type_name = self::$Type[(int)$item->type]; $item->status_name = self::$Status[(int)$item->check_status]; $item->delay = countDays(date("Y-m-d"), date('Y-m-d', $item->end_time)); if ($item->cost == 0) { $item->cost = '-'; } }); return table_assign(0, '', $list); } else { $cate = Db::name('ContractCate')->where("unit_id", get_login_admin("unit_name"))->order('create_time asc')->select(); View::assign('cate', $cate); return view(); } } public function add() { $param = get_params(); if (request()->isAjax()) { if (isset($param['sign_time'])) { $param['sign_time'] = strtotime($param['sign_time']); } if (isset($param['start_time'])) { $param['start_time'] = strtotime($param['start_time']); } if (isset($param['end_time'])) { $param['end_time'] = strtotime($param['end_time']); if ($param['end_time'] <= $param['start_time']) { return to_assign(1, "结束时间需要大于开始时间"); } } try { validate(ContractCheck::class)->scene('add')->check($param); } catch (ValidateException $e) { // 验证失败 输出错误信息 return to_assign(1, $e->getError()); } $param['create_time'] = time(); $param['admin_id'] = $this->uid; $param['subject_id'] = get_login_admin("unit_name"); // halt($param); $aid = $this->model->strict(false)->field(true)->insertGetId($param); if ($aid) { $log_data = array( 'field' => 'new', 'action' => 'add', 'contract_id' => $aid, 'admin_id' => $param['admin_id'], 'create_time' => time(), ); Db::name('ContractLog')->strict(false)->field(true)->insert($log_data); return to_assign(); } else { return to_assign(1, '操作失败'); } } else { $type = isset($param['type']) ? $param['type'] : 0; $pid = isset($param['pid']) ? $param['pid'] : 0; $cate = Db::name('ContractCate')->where("unit_id", get_login_admin("unit_name"))->order('create_time asc')->select(); View::assign('type', $type); View::assign('pid', $pid); View::assign('cate', $cate); if ($pid > 0) { $p_contract = Db::name('Contract')->where(['id' => $pid])->find(); View::assign('p_contract', $p_contract); } return view(); } } public function edit() { $param = get_params(); if (request()->isAjax()) { if (isset($param['sign_time'])) { $param['sign_time'] = strtotime($param['sign_time']); } if (isset($param['start_time'])) { $param['start_time'] = strtotime($param['start_time']); } if (isset($param['end_time'])) { $param['end_time'] = strtotime($param['end_time']); if ($param['end_time'] <= $param['start_time']) { return to_assign(1, "结束时间需要大于开始时间"); } } try { validate(ContractCheck::class)->scene($param['scene'])->check($param); } catch (ValidateException $e) { // 验证失败 输出错误信息 return to_assign(1, $e->getError()); } $param['update_time'] = time(); $old = Db::name('Contract')->where(['id' => $param['id']])->find(); $res = $this->model->strict(false)->field(true)->update($param); if (!$res) { return to_assign(1, '操作失败'); } return to_assign(0, '操作成功'); } else { $id = isset($param['id']) ? $param['id'] : 0; $type = isset($param['type']) ? $param['type'] : 0; $pid = isset($param['pid']) ? $param['pid'] : 0; $cate = Db::name('ContractCate')->where("unit_id", get_login_admin("unit_name"))->order('create_time asc')->select(); View::assign('cate', $cate); if ($id > 0) { $detail = $this->model->detail($id); $file_array_other = Db::name('ContractFile') ->field('cf.id,f.filepath,f.name,f.filesize,f.fileext,f.create_time,f.admin_id') ->alias('cf') ->join('File f', 'f.id = cf.file_id', 'LEFT') ->order('cf.create_time asc') ->where(array('cf.contract_id' => $id, 'cf.delete_time' => 0)) ->select()->toArray(); $detail['file_array_other'] = $file_array_other; if ($detail['check_status'] == 0 || $detail['check_status'] == 4 || $detail['check_status'] == 7) { View::assign('detail', $detail); return view('edit'); } else { echo '
当前状态不开放编辑,请联系合同管理员
'; exit; } } return view(); } } public function view() { $param = get_params(); $id = get_params("id"); $detail = (new Contract())->detail($id); //从项目页面进来的不给按钮 $view_auth = isset($param['type']) ? $param['type'] : 0; $auth = 0; $is_check_admin = 0; $is_create_admin = 0; $check_record = []; $detail['create_user'] = Db::name('Admin')->where(['id' => $detail['admin_id']])->value('nickname'); $detail['copy_user'] = '-'; if ($detail['copy_uids'] != '') { $copy_user = Db::name('Admin')->where('id', 'in', $detail['copy_uids'])->column('nickname'); $detail['copy_user'] = implode(',', $copy_user); } $check_id = Db::name("check_step")->where("id", $detail["check_step_sort"])->value("check_id"); if ($check_id == $this->uid) { $is_check_admin = 1; } if ($detail['admin_id'] == $this->uid) { $is_create_admin = 1; $auth = 1; } $file_array_other = Db::name('ContractFile') ->field('cf.id,f.filepath,f.name,f.filesize,f.fileext,f.create_time,f.admin_id') ->alias('cf') ->join('File f', 'f.id = cf.file_id', 'LEFT') ->order('cf.create_time asc') ->where(array('cf.contract_id' => $id, 'cf.delete_time' => 0)) ->select()->toArray(); $detail['file_array_other'] = $file_array_other; foreach ($check_record as $kk => &$vv) { $vv['check_time_str'] = date('Y-m-d H:i', $vv['check_time']); $vv['status_str'] = '提交'; if ($vv['status'] == 1) { $vv['status_str'] = '审核通过'; } else if ($vv['status'] == 2) { $vv['status_str'] = '审核拒绝'; } if ($vv['status'] == 3) { $vv['status_str'] = '撤销'; } } View::assign('is_check_admin', $is_check_admin); View::assign('auth', $auth); View::assign('view_auth', $view_auth); View::assign('is_create_admin', $is_create_admin); View::assign('check_record', $check_record); // View::assign('flows', $flows); View::assign('detail', $detail); return view(); } public function delete() { if (request()->isDelete()) { $id = get_params("id"); $data['id'] = $id; $data['delete_time'] = time(); if (Db::name('Contract')->update($data) !== false) { add_log('delete', $id); $log_data = array( 'field' => 'del', 'action' => 'delete', 'contract_id' => $id, 'admin_id' => $this->uid, 'create_time' => time(), ); Db::name('ContractLog')->strict(false)->field(true)->insert($log_data); return to_assign(0, "删除成功"); } else { return to_assign(1, "删除失败"); } } else { return to_assign(1, "错误的请求"); } } public function archive() { if (request()->isAjax()) { $param = get_params(); $where = [ ["subject_id", "=", get_login_admin("unit_name")], ["delete_time", "=", 0], ["archive_status", "=", 1] ]; if (!empty($param['keywords'])) { $where[] = ['a.id|a.name|c.title', 'like', '%' . $param['keywords'] . '%']; } if (!empty($param['cate_id'])) { $where[] = ['a.cate_id', '=', $param['cate_id']]; } if (!empty($param['cate_id'])) { $where[] = ['a.cate_id', '=', $param['cate_id']]; } if (!empty($param['type'])) { $where[] = ['a.type', '=', $param['type']]; } $list = $this->model ->alias('a') ->field('a.*,a.type as type_a, c.title as cate_title') ->join('contract_cate c', 'a.cate_id = c.id') ->where($where)->order('create_time desc')->paginate()->each(function ($item) { $item->keeper_name = Db::name('Admin')->where(['id' => $item->keeper_uid])->value('nickname'); $item->sign_name = Db::name('Admin')->where(['id' => $item->sign_uid])->value('nickname'); $item->cate_title = Db::name('ContractCate')->where("id", $item->cate_id)->value("title"); $item->sign_time = date('Y-m-d', $item->sign_time); $item->interval_time = date('Y-m-d', $item->start_time) . ' 至 ' . date('Y-m-d', $item->end_time); $item->type_name = self::$Type[(int)$item->type]; $item->status_name = self::$Status[(int)$item->check_status]; $item->delay = countDays(date("Y-m-d"), date('Y-m-d', $item->end_time)); if ($item->cost == 0) { $item->cost = '-'; } }); return table_assign(0, '', $list); } else { $cate = Db::name('ContractCate')->where("unit_id", get_login_admin("unit_name"))->order('create_time asc')->select(); View::assign('cate', $cate); return view(); } } }