first commit
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
use think\facade\Db;
|
||||
|
||||
//是否是报销打款管理员,count>1即有权限
|
||||
function isAuthExpense($uid)
|
||||
{
|
||||
if($uid == 1){
|
||||
return 1;
|
||||
}
|
||||
$map = [];
|
||||
$map[] = ['name', '=', 'finance_admin'];
|
||||
$map[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',conf_1)")];
|
||||
$count = Db::name('DataAuth')->where($map)->count();
|
||||
return $count;
|
||||
}
|
||||
|
||||
//是否是发票管理员,count>1即有权限
|
||||
function isAuthInvoice($uid)
|
||||
{
|
||||
if($uid == 1){
|
||||
return 1;
|
||||
}
|
||||
$map = [];
|
||||
$map[] = ['name', '=', 'finance_admin'];
|
||||
$map[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',conf_2)")];
|
||||
$count = Db::name('DataAuth')->where($map)->count();
|
||||
return $count;
|
||||
}
|
||||
|
||||
//是否是到账管理员,count>1即有权限
|
||||
function isAuthIncome($uid)
|
||||
{
|
||||
if($uid == 1){
|
||||
return 1;
|
||||
}
|
||||
$map = [];
|
||||
$map[] = ['name', '=', 'finance_admin'];
|
||||
$map[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',conf_3)")];
|
||||
$count = Db::name('DataAuth')->where($map)->count();
|
||||
return $count;
|
||||
}
|
||||
|
||||
//是否是付款管理员,count>1即有权限
|
||||
function isAuthPayment($uid)
|
||||
{
|
||||
if($uid == 1){
|
||||
return 1;
|
||||
}
|
||||
$map = [];
|
||||
$map[] = ['name', '=', 'finance_admin'];
|
||||
$map[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',conf_4)")];
|
||||
$count = Db::name('DataAuth')->where($map)->count();
|
||||
return $count;
|
||||
}
|
||||
|
||||
//是否是借支打款管理员,count>1即有权限
|
||||
function isAuthLoan($uid)
|
||||
{
|
||||
if($uid == 1){
|
||||
return 1;
|
||||
}
|
||||
$map = [];
|
||||
$map[] = ['name', '=', 'finance_admin'];
|
||||
$map[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',conf_5)")];
|
||||
$count = Db::name('DataAuth')->where($map)->count();
|
||||
return $count;
|
||||
}
|
||||
@@ -0,0 +1,350 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
declare (strict_types = 1);
|
||||
namespace app\finance\controller;
|
||||
|
||||
use app\api\BaseController;
|
||||
use app\finance\model\Loan;
|
||||
use app\finance\model\Expense;
|
||||
use app\finance\model\Invoice;
|
||||
use app\finance\model\InvoiceIncome;
|
||||
use app\finance\model\Ticket;
|
||||
use app\finance\model\TicketPayment;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Api extends BaseController
|
||||
{
|
||||
//获取获取借支
|
||||
public function get_loan()
|
||||
{
|
||||
$param = get_params();
|
||||
$where = array();
|
||||
$where[] = ['delete_time', '=', 0];
|
||||
$where[] = ['admin_id', '=', $this->uid];
|
||||
$where[] = ['balance_status', '<', 2];
|
||||
$where[] = ['pay_status', '=', 1];
|
||||
$where[] = ['check_status', '=', 2];
|
||||
$where[] = ['back_status', '=', 0];
|
||||
/*
|
||||
if(!empty($param['project_id'])){
|
||||
$where[] = ['project_id', '=', $param['project_id']];
|
||||
}
|
||||
else{
|
||||
$where[] = ['project_id', '=', 0];
|
||||
}
|
||||
*/
|
||||
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
|
||||
$list = Db::name('Loan')->where($where)
|
||||
->paginate(['list_rows'=> $rows])
|
||||
->each(function ($item, $key) {
|
||||
$item['create_time'] = to_date($item['create_time'],'Y-m-d');
|
||||
$item['pay_time'] = to_date($item['pay_time'],'Y-m-d');
|
||||
$item['un_balance_cost'] = ($item['cost']*100 - $item['balance_cost']*100)/100;
|
||||
if($item['balance_status']==0){
|
||||
$item['balance_name']='待冲抵';
|
||||
}
|
||||
if($item['balance_status']==1){
|
||||
$item['balance_name']='部分冲抵';
|
||||
}
|
||||
return $item;
|
||||
});
|
||||
return table_assign(0, '', $list);
|
||||
}
|
||||
//删除报销项
|
||||
public function del_expense_interfix()
|
||||
{
|
||||
$id = get_params("id");
|
||||
$admin_id = Db::name('ExpenseInterfix')->where('id', $id)->value('admin_id');
|
||||
if ($admin_id == $this->uid) {
|
||||
if (Db::name('ExpenseInterfix')->where('id', $id)->delete() !== false) {
|
||||
return to_assign(0, "删除成功");
|
||||
} else {
|
||||
return to_assign(1, "删除失败");
|
||||
}
|
||||
} else {
|
||||
return to_assign(1, "您不是申请人,没权限删除该报销数据");
|
||||
}
|
||||
}
|
||||
|
||||
//报销设置为已打款
|
||||
public function topay()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$auth = isAuthExpense($this->uid);
|
||||
if($auth == 0){
|
||||
return to_assign(1, "你没有打款权限,请联系管理员或者HR");
|
||||
}
|
||||
//打款,数据操作
|
||||
$param['pay_status'] = 1;
|
||||
$param['pay_admin_id'] = $this->uid;
|
||||
$param['pay_time'] = time();
|
||||
$res = Expense::where('id', $param['id'])->strict(false)->field(true)->update($param);
|
||||
if ($res !== false) {
|
||||
add_log('topay', $param['id'],$param,'报销');
|
||||
//发送消息通知
|
||||
$detail = Expense::where(['id' => $param['id']])->find();
|
||||
$msg=[
|
||||
'from_uid'=>$this->uid,//发送人
|
||||
'to_uids'=>$detail['admin_id'],//接收人
|
||||
'template_id'=>'expense_pay',//消息模板标识
|
||||
'content'=>[ //消息内容
|
||||
'create_time'=>date('Y-m-d H:i:s'),
|
||||
'action_id'=>$detail['id'],
|
||||
'title' => '报销'
|
||||
]
|
||||
];
|
||||
event('SendMessage',$msg);
|
||||
return to_assign();
|
||||
} else {
|
||||
return to_assign(1, "操作失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//借支设置为已打款
|
||||
public function topay2()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$auth = isAuthExpense($this->uid);
|
||||
if($auth == 0){
|
||||
return to_assign(1, "你没有打款权限,请联系管理员或者HR");
|
||||
}
|
||||
//打款,数据操作
|
||||
$param['pay_status'] = 1;
|
||||
$param['pay_admin_id'] = $this->uid;
|
||||
$param['pay_time'] = time();
|
||||
$res = Loan::where('id', $param['id'])->strict(false)->field(true)->update($param);
|
||||
if ($res !== false) {
|
||||
add_log('topay', $param['id'],$param,'借支');
|
||||
//发送消息通知
|
||||
$detail = Loan::where(['id' => $param['id']])->find();
|
||||
$msg=[
|
||||
'from_uid'=>$this->uid,//发送人
|
||||
'to_uids'=>$detail['admin_id'],//接收人
|
||||
'template_id'=>'loan_pay',//消息模板标识
|
||||
'content'=>[ //消息内容
|
||||
'create_time'=>date('Y-m-d H:i:s'),
|
||||
'action_id'=>$detail['id'],
|
||||
'title' => '借支'
|
||||
]
|
||||
];
|
||||
event('SendMessage',$msg);
|
||||
return to_assign();
|
||||
} else {
|
||||
return to_assign(1, "操作失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//借支设置为已归还
|
||||
public function topay3()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$auth = isAuthExpense($this->uid);
|
||||
if($auth == 0){
|
||||
return to_assign(1, "你没有操作权限,请联系管理员或者HR");
|
||||
}
|
||||
//打款,数据操作
|
||||
$param['back_status'] = 1;
|
||||
$param['back_admin_id'] = $this->uid;
|
||||
$param['back_time'] = time();
|
||||
$res = Loan::where('id', $param['id'])->strict(false)->field(true)->update($param);
|
||||
if ($res !== false) {
|
||||
add_log('toback', $param['id'],$param,'借支');
|
||||
//发送消息通知
|
||||
$detail = Loan::where(['id' => $param['id']])->find();
|
||||
$msg=[
|
||||
'from_uid'=>$this->uid,//发送人
|
||||
'to_uids'=>$detail['admin_id'],//接收人
|
||||
'template_id'=>'loan_back',//消息模板标识
|
||||
'content'=>[ //消息内容
|
||||
'create_time'=>date('Y-m-d H:i:s'),
|
||||
'action_id'=>$detail['id'],
|
||||
'title' => '借支'
|
||||
]
|
||||
];
|
||||
event('SendMessage',$msg);
|
||||
return to_assign();
|
||||
} else {
|
||||
return to_assign(1, "操作失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//开具发票
|
||||
public function open()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$auth = isAuthInvoice($this->uid);
|
||||
if($auth == 0){
|
||||
return to_assign(1, "你没有开票权限,请联系管理员或者HR");
|
||||
}
|
||||
$status = Invoice::where(['id' => $param['id']])->value('check_status');
|
||||
if ($status == 2) {
|
||||
$param['open_status'] = 1;
|
||||
$param['open_admin_id'] = $this->uid;
|
||||
}
|
||||
if(isset($param['open_time'])){
|
||||
$param['open_time'] = strtotime(urldecode($param['open_time']));
|
||||
}
|
||||
$res = Invoice::where('id', $param['id'])->strict(false)->field('code,open_status,open_time,open_admin_id,delivery')->update($param);
|
||||
if ($res !== false) {
|
||||
add_log('open', $param['id'],$param,'发票');
|
||||
return to_assign();
|
||||
} else {
|
||||
return to_assign(1, "操作失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//作废发票
|
||||
public function tovoid()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$auth = isAuthInvoice($this->uid);
|
||||
if($auth == 0){
|
||||
return to_assign(1, "你没有作废发票权限,请联系管理员或者HR");
|
||||
}
|
||||
$count = InvoiceIncome::where(['invoice_id'=>$param['id'],'status'=>1])->count();
|
||||
if($count>0){
|
||||
return to_assign(1, "发票已经新增有回款记录,请先反回款后再作废发票");
|
||||
}
|
||||
else{
|
||||
$param['update_time'] = time();
|
||||
$param['open_status'] = 2;
|
||||
}
|
||||
$res = Invoice::where('id', $param['id'])->strict(false)->field('update_time,open_status')->update($param);
|
||||
if ($res !== false) {
|
||||
return to_assign();
|
||||
add_log('tovoid', $param['id'],$param,'发票');
|
||||
} else {
|
||||
return to_assign(1, "操作失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//反作废发票
|
||||
public function novoid()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$auth = isAuthInvoice($this->uid);
|
||||
if($auth == 0){
|
||||
return to_assign(1, "你没有反作废发票权限,请联系管理员或者HR");
|
||||
}
|
||||
$param['open_status'] = 1;
|
||||
$param['update_time'] = time();
|
||||
$res = Invoice::where('id', $param['id'])->strict(false)->field('update_time,open_status')->update($param);
|
||||
if ($res !== false) {
|
||||
return to_assign();
|
||||
add_log('novoid', $param['id'],$param,'发票');
|
||||
} else {
|
||||
return to_assign(1, "操作失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//上传电子发票
|
||||
public function upload_invoice()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$auth = isAuthInvoice($this->uid);
|
||||
if($auth == 0){
|
||||
return to_assign(1, "你没有开票权限,请联系管理员或者HR");
|
||||
}
|
||||
$param['update_time'] = time();
|
||||
$res = Invoice::where('id', $param['id'])->strict(false)->field('update_time,other_file_ids')->update($param);
|
||||
if ($res !== false) {
|
||||
return to_assign();
|
||||
} else {
|
||||
return to_assign(1, "操作失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//作废收票
|
||||
public function tovoid_ticket()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$auth = isAuthInvoice($this->uid);
|
||||
if($auth == 0){
|
||||
return to_assign(1, "你没有作废发票权限,请联系管理员或者HR");
|
||||
}
|
||||
$count = TicketPayment::where(['ticket_id'=>$param['id'],'status'=>1])->count();
|
||||
if($count>0){
|
||||
return to_assign(1, "发票已经新增有付款记录,请先反付款后再作废发票");
|
||||
}
|
||||
else{
|
||||
$param['update_time'] = time();
|
||||
$param['open_status'] = 2;
|
||||
}
|
||||
$res = Ticket::where('id', $param['id'])->strict(false)->field('update_time,open_status')->update($param);
|
||||
if ($res !== false) {
|
||||
return to_assign();
|
||||
add_log('tovoid', $param['id'],$param,'发票');
|
||||
} else {
|
||||
return to_assign(1, "操作失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//反作废收票
|
||||
public function novoid_ticket()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$auth = isAuthInvoice($this->uid);
|
||||
if($auth == 0){
|
||||
return to_assign(1, "你没有反作废发票权限,请联系管理员或者HR");
|
||||
}
|
||||
$param['open_status'] = 1;
|
||||
$param['update_time'] = time();
|
||||
$res = Ticket::where('id', $param['id'])->strict(false)->field('update_time,open_status')->update($param);
|
||||
if ($res !== false) {
|
||||
return to_assign();
|
||||
add_log('novoid', $param['id'],$param,'发票');
|
||||
} else {
|
||||
return to_assign(1, "操作失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//上传
|
||||
public function upload_ticket()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$auth = isAuthInvoice($this->uid);
|
||||
if($auth == 0){
|
||||
return to_assign(1, "你没有发票权限,请联系管理员或者HR");
|
||||
}
|
||||
$param['update_time'] = time();
|
||||
$res = Ticket::where('id', $param['id'])->strict(false)->field('update_time,other_file_ids')->update($param);
|
||||
if ($res !== false) {
|
||||
return to_assign();
|
||||
} else {
|
||||
return to_assign(1, "操作失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\finance\controller;
|
||||
|
||||
use app\base\BaseController;
|
||||
use app\finance\model\CostCate as CostCateModel;
|
||||
use app\finance\validate\CostcateValidate;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Costcate extends BaseController
|
||||
{
|
||||
/**
|
||||
* 构造函数
|
||||
*/
|
||||
protected $model;
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(); // 调用父类构造函数
|
||||
$this->model = new CostCateModel();
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据列表
|
||||
*/
|
||||
public function datalist()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$list = $this->model->where('delete_time',0)->select();
|
||||
return to_assign(0, '', $list);
|
||||
}
|
||||
else{
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加/编辑
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
try {
|
||||
validate(CostcateValidate::class)->scene('edit')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$this->model->edit($param);
|
||||
} else {
|
||||
try {
|
||||
validate(CostcateValidate::class)->scene('add')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$this->model->add($param);
|
||||
}
|
||||
}else{
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
if ($id>0) {
|
||||
$detail = $this->model->getCateById($id);
|
||||
View::assign('detail', $detail);
|
||||
}
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
public function view($id)
|
||||
{
|
||||
$detail = $this->model->getById($id);
|
||||
if (!empty($detail)) {
|
||||
View::assign('detail', $detail);
|
||||
return view();
|
||||
}
|
||||
else{
|
||||
return view(EEEOR_REPORTING,['code'=>404,'warning'=>'找不到页面']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
public function del()
|
||||
{
|
||||
if (request()->isDelete()) {
|
||||
$param = get_params();
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
$type = isset($param['type']) ? $param['type'] : 0;
|
||||
$this->model->delById($id,$type);
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置
|
||||
*/
|
||||
public function set()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$res = $this->model->strict(false)->field('id,status')->update($param);
|
||||
if ($res) {
|
||||
if($param['status'] == 0){
|
||||
add_log('disable', $param['id'], $param);
|
||||
}
|
||||
else if($param['status'] == 1){
|
||||
add_log('recovery', $param['id'], $param);
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
else{
|
||||
return to_assign(0, '操作失败');
|
||||
}
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,284 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\finance\controller;
|
||||
|
||||
use app\base\BaseController;
|
||||
use app\finance\model\Expense as ExpenseModel;
|
||||
use app\finance\validate\ExpenseValidate;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Expense extends BaseController
|
||||
{
|
||||
/**
|
||||
* 构造函数
|
||||
*/
|
||||
protected $model;
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(); // 调用父类构造函数
|
||||
$this->model = new ExpenseModel();
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据列表
|
||||
*/
|
||||
public function datalist()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$tab = isset($param['tab']) ? $param['tab'] : 0;
|
||||
$uid = $this->uid;
|
||||
$where = array();
|
||||
$whereOr = array();
|
||||
$where[]=['delete_time','=',0];
|
||||
if($tab == 0){
|
||||
//全部
|
||||
$auth = isAuthExpense($uid);
|
||||
if($auth == 0){
|
||||
$whereOr[] = ['admin_id', '=', $this->uid];
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_uids)")];
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_history_uids)")];
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_copy_uids)")];
|
||||
$dids_a = get_leader_departments($uid);
|
||||
$dids_b = get_role_departments($uid);
|
||||
$dids = array_merge($dids_a, $dids_b);
|
||||
if(!empty($dids)){
|
||||
$whereOr[] = ['did','in',$dids];
|
||||
}
|
||||
}
|
||||
}
|
||||
if($tab == 1){
|
||||
//我创建的
|
||||
$where[] = ['admin_id', '=', $this->uid];
|
||||
}
|
||||
if($tab == 2){
|
||||
//待我审核的
|
||||
$where[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_uids)")];
|
||||
}
|
||||
if($tab == 3){
|
||||
//我已审核的
|
||||
$where[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_history_uids)")];
|
||||
}
|
||||
if($tab == 4){
|
||||
//抄送给我的
|
||||
$where[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_copy_uids)")];
|
||||
}
|
||||
if($tab == 5){
|
||||
//已打款的
|
||||
$where[] = ['pay_status', '=', 1];
|
||||
$auth = isAuthExpense($uid);
|
||||
if($auth == 0){
|
||||
$dids_a = get_leader_departments($uid);
|
||||
$dids_b = get_role_departments($uid);
|
||||
$dids = array_merge($dids_a, $dids_b);
|
||||
if(!empty($dids)){
|
||||
$whereOr[] = ['did','in',$dids];
|
||||
}
|
||||
$whereOr[] = ['admin_id', '=', $this->uid];
|
||||
}
|
||||
}
|
||||
//按时间检索
|
||||
if (!empty($param['diff_time'])) {
|
||||
$diff_time =explode('~', $param['diff_time']);
|
||||
$where[] = ['income_month', 'between', [strtotime(urldecode($diff_time[0])),strtotime(urldecode($diff_time[1].' 23:59:59'))]];
|
||||
}
|
||||
if (isset($param['pay_status']) && $param['pay_status'] != "") {
|
||||
$where[] = ['pay_status', '=', $param['pay_status']];
|
||||
}
|
||||
if (isset($param['check_status']) && $param['check_status'] != "") {
|
||||
$where[] = ['check_status', '=', $param['check_status']];
|
||||
}
|
||||
$list = $this->model->datalist($param,$where,$whereOr);
|
||||
return table_assign(0, '', $list);
|
||||
}
|
||||
else{
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加/编辑
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$param['income_month'] = isset($param['income_month']) ? strtotime(urldecode($param['income_month'])) : 0;
|
||||
$param['expense_time'] = isset($param['expense_time']) ? strtotime(urldecode($param['expense_time'])) : 0;
|
||||
$amountData = isset($param['amount']) ? $param['amount'] : '0';
|
||||
$cost = 0;
|
||||
if ($amountData == 0) {
|
||||
return to_assign(1,'报销金额不完善');
|
||||
}
|
||||
else{
|
||||
foreach ($amountData as $key => $value) {
|
||||
if ($value == 0) {
|
||||
return to_assign(1,'第' . ($key + 1) . '条报销选项的金额不能为零');
|
||||
}
|
||||
else{
|
||||
$cost+=$value;
|
||||
}
|
||||
}
|
||||
}
|
||||
if($cost==0){
|
||||
return to_assign(1,'报销金额不能为零');
|
||||
}
|
||||
$param['admin_id'] = $this->uid;
|
||||
$param['did'] = $this->did;
|
||||
$param['cost'] = $cost;
|
||||
$param['pay_amount'] = $cost;
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
try {
|
||||
validate(ExpenseValidate::class)->scene('edit')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
if(!empty($param['loan_id'])){
|
||||
$loan = Db::name('Loan')->where('id',$param['loan_id'])->find();
|
||||
$balance_cost = Db::name('Expense')->where([['delete_time','=',0],['loan_id','=',$param['loan_id']],['id','<>',$param['id']]])->sum('balance_cost');
|
||||
$un_balance_cost = ($loan['cost']*100 - $balance_cost*100)/100;
|
||||
if($un_balance_cost<0){
|
||||
return to_assign(1,'所选借支已经冲抵完毕,不支持冲抵');
|
||||
}
|
||||
$balance_cost = $un_balance_cost*100 - $cost*100;
|
||||
if($balance_cost>=0){
|
||||
$param['balance_cost'] = $cost;
|
||||
$param['pay_amount'] = 0;
|
||||
}
|
||||
else{
|
||||
$param['balance_cost'] = $un_balance_cost;
|
||||
$param['pay_amount'] = ($cost *100 - $un_balance_cost*100)/100;
|
||||
}
|
||||
}
|
||||
$this->model->edit($param);
|
||||
} else {
|
||||
try {
|
||||
validate(ExpenseValidate::class)->scene('add')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
if(!empty($param['loan_id'])){
|
||||
$loan = Db::name('Loan')->where('id',$param['loan_id'])->find();
|
||||
$un_balance_cost = ($loan['cost']*100 - $loan['balance_cost']*100)/100;
|
||||
if($un_balance_cost<0){
|
||||
return to_assign(1,'所选借支已经冲抵完毕,不支持冲抵');
|
||||
}
|
||||
$balance_cost = $un_balance_cost*100 - $cost*100;
|
||||
if($balance_cost>=0){
|
||||
$param['balance_cost'] = $cost;
|
||||
$param['pay_amount'] = 0;
|
||||
}
|
||||
else{
|
||||
$param['balance_cost'] = $un_balance_cost;
|
||||
$param['pay_amount'] = ($cost *100 - $un_balance_cost*100)/100;
|
||||
}
|
||||
}
|
||||
$this->model->add($param);
|
||||
}
|
||||
}else{
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
$is_codeno = Db::name('DataAuth')->where('name','finance_admin')->value('conf_10');
|
||||
View::assign('is_codeno', $is_codeno);
|
||||
View::assign('expense_cate', Db::name('ExpenseCate')->where(['status' => 1])->select()->toArray());
|
||||
View::assign('user', get_admin($this->uid));
|
||||
if ($id>0) {
|
||||
$detail = $this->model->getById($id);
|
||||
View::assign('detail', $detail);
|
||||
if(is_mobile()){
|
||||
return view('qiye@/finance/add_expense');
|
||||
}
|
||||
return view('edit');
|
||||
}
|
||||
$codeno='';
|
||||
if($is_codeno==1){
|
||||
$codeno = get_codeno(3);
|
||||
}
|
||||
View::assign('codeno', $codeno);
|
||||
if(is_mobile()){
|
||||
return view('qiye@/finance/add_expense');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
public function view($id)
|
||||
{
|
||||
$detail = $this->model->getById($id);
|
||||
if (!empty($detail)) {
|
||||
View::assign('detail', $detail);
|
||||
View::assign('create_user', get_admin($detail['admin_id']));
|
||||
if(is_mobile()){
|
||||
return view('qiye@/finance/view_expense');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
else{
|
||||
return view(EEEOR_REPORTING,['code'=>404,'warning'=>'找不到页面']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
public function del()
|
||||
{
|
||||
$param = get_params();
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
if (request()->isDelete()) {
|
||||
$this->model->delById($id);
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
//报销记录
|
||||
public function record()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$where = [];
|
||||
$where[]=['delete_time','=',0];
|
||||
$where[]=['check_status','=',2];
|
||||
if(isAuthExpense($this->uid)==0){
|
||||
$where[] = ['admin_id', '=', $this->uid];
|
||||
}
|
||||
//按时间检索
|
||||
if (!empty($param['diff_time'])) {
|
||||
$diff_time =explode('~', $param['diff_time']);
|
||||
$where[] = ['expense_time', 'between', [strtotime(urldecode($diff_time[0])),strtotime(urldecode($diff_time[1].' 23:59:59'))]];
|
||||
}
|
||||
if (isset($param['pay_status']) && $param['pay_status'] != "") {
|
||||
$where[] = ['pay_status', '=', $param['pay_status']];
|
||||
}
|
||||
$list = $this->model->datalist($param,$where);
|
||||
|
||||
$cost = $this->model::where($where)->sum('cost');
|
||||
$totalRow['cost'] = sprintf("%.2f",$cost);
|
||||
return table_assign(0, '', $list);
|
||||
} else {
|
||||
View::assign('authExpense',isAuthExpense($this->uid));
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\finance\controller;
|
||||
|
||||
use app\base\BaseController;
|
||||
use app\finance\model\ExpenseCate as ExpenseCateModel;
|
||||
use app\finance\validate\ExpensecateValidate;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Expensecate extends BaseController
|
||||
{
|
||||
/**
|
||||
* 构造函数
|
||||
*/
|
||||
protected $model;
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(); // 调用父类构造函数
|
||||
$this->model = new ExpenseCateModel();
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据列表
|
||||
*/
|
||||
public function datalist()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$list = $this->model->where('delete_time',0)->select();
|
||||
return to_assign(0, '', $list);
|
||||
}
|
||||
else{
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加/编辑
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
try {
|
||||
validate(ExpensecateValidate::class)->scene('edit')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$this->model->edit($param);
|
||||
} else {
|
||||
try {
|
||||
validate(ExpensecateValidate::class)->scene('add')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$this->model->add($param);
|
||||
}
|
||||
}else{
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
if ($id>0) {
|
||||
$detail = $this->model->getCateById($id);
|
||||
View::assign('detail', $detail);
|
||||
}
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
public function view($id)
|
||||
{
|
||||
$detail = $this->model->getById($id);
|
||||
if (!empty($detail)) {
|
||||
View::assign('detail', $detail);
|
||||
return view();
|
||||
}
|
||||
else{
|
||||
return view(EEEOR_REPORTING,['code'=>404,'warning'=>'找不到页面']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
public function del()
|
||||
{
|
||||
if (request()->isDelete()) {
|
||||
$param = get_params();
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
$type = isset($param['type']) ? $param['type'] : 0;
|
||||
$this->model->delById($id,$type);
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置
|
||||
*/
|
||||
public function set()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$res = $this->model->strict(false)->field('id,status')->update($param);
|
||||
if ($res) {
|
||||
if($param['status'] == 0){
|
||||
add_log('disable', $param['id'], $param);
|
||||
}
|
||||
else if($param['status'] == 1){
|
||||
add_log('recovery', $param['id'], $param);
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
else{
|
||||
return to_assign(0, '操作失败');
|
||||
}
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,288 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\finance\controller;
|
||||
|
||||
use app\base\BaseController;
|
||||
use app\finance\model\Invoice as InvoiceModel;
|
||||
use app\finance\model\InvoiceIncome;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Income extends BaseController
|
||||
{
|
||||
/**
|
||||
* 构造函数
|
||||
*/
|
||||
protected $model;
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(); // 调用父类构造函数
|
||||
$this->model = new InvoiceModel();
|
||||
}
|
||||
|
||||
public function datalist()
|
||||
{
|
||||
$uid = $this->uid;
|
||||
$auth = isAuthIncome($uid);
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$where = array();
|
||||
$whereOr = array();
|
||||
$where[] = ['delete_time', '=', 0];
|
||||
$where[] = ['check_status', '=', 2];
|
||||
$where[] = ['open_status', '=', 1];
|
||||
$where[] = ['invoice_type','>',0];
|
||||
if($auth == 0){
|
||||
$whereOr[] = ['admin_id','=',$this->uid];
|
||||
$dids_a = get_leader_departments($uid);
|
||||
$dids_b = get_role_departments($uid);
|
||||
$dids = array_merge($dids_a, $dids_b);
|
||||
if(!empty($dids)){
|
||||
$whereOr[] = ['did','in',$dids];
|
||||
}
|
||||
}
|
||||
//按时间检索
|
||||
if (!empty($param['diff_time'])) {
|
||||
$diff_time =explode('~', $param['diff_time']);
|
||||
$where[] = ['enter_time', 'between', [strtotime(urldecode($diff_time[0])),strtotime(urldecode($diff_time[1].' 23:59:59'))]];
|
||||
}
|
||||
if (isset($param['enter_status']) && $param['enter_status']!='') {
|
||||
$where[] = ['enter_status', '=', $param['enter_status']];
|
||||
}
|
||||
$list = $this->model->datalist($param,$where,$whereOr);
|
||||
return table_assign(0, '', $list);
|
||||
} else {
|
||||
View::assign('auth', $auth);
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
//查看
|
||||
public function add()
|
||||
{
|
||||
$param = get_params();
|
||||
$auth = isAuthIncome($this->uid);
|
||||
if (request()->isAjax()) {
|
||||
if($auth == 0){
|
||||
return to_assign(1, "你没有到账管理权限,请联系管理员或者HR");
|
||||
}
|
||||
$invoice_id = $param['invoice_id'];
|
||||
$admin_id = $this->uid;
|
||||
//计算已到账的金额
|
||||
$hasIncome = InvoiceIncome::where(['invoice_id'=>$invoice_id,'status'=>1])->sum('amount');
|
||||
//查询发票金额
|
||||
$invoiceAmount = $this->model->where(['id'=>$invoice_id])->value('amount');
|
||||
if($param['enter_type']==1){ //单个到账记录
|
||||
//相关内容多个数组
|
||||
$enterPriceData=isset($param['amount'])? $param['amount'] : '';
|
||||
$enterTimeData=isset($param['enter_time'])? $param['enter_time'] : '';
|
||||
$remarksData=isset($param['remarks'])? $param['remarks'] : '';
|
||||
|
||||
//把合同协议关联的单个内容的发票入账明细重新添加
|
||||
if($enterPriceData){
|
||||
$enter_price = 0;
|
||||
$insert = [];
|
||||
$time = time();
|
||||
foreach ($enterPriceData as $key => $value) {
|
||||
if (!$value ) continue;
|
||||
$insert[] = [
|
||||
'invoice_id' => $invoice_id,
|
||||
'amount' => $value,
|
||||
'enter_time' => $enterTimeData[$key]? strtotime($enterTimeData[$key]) : 0,
|
||||
'remarks' => $remarksData[$key],
|
||||
'admin_id' => $admin_id,
|
||||
'create_time' => $time
|
||||
];
|
||||
$enter_price += $value*100;
|
||||
}
|
||||
if(($enter_price + $hasIncome*100)> $invoiceAmount*100){
|
||||
return to_assign(1,'到账金额大于发票金额,不允许保存');
|
||||
}
|
||||
else{
|
||||
$res = InvoiceIncome::strict(false)->field(true)->insertAll($insert);
|
||||
if($res!==false){
|
||||
if(($enter_price + $hasIncome*100) == $invoiceAmount*100){
|
||||
//发票全部到账
|
||||
$this->model->where(['id'=>$invoice_id])->update(['enter_status'=>2,'enter_amount'=>$invoiceAmount,'enter_time'=>time()]);
|
||||
}
|
||||
else if(($enter_price + $hasIncome*100) < $invoiceAmount*100){
|
||||
$incomeTotal=($enter_price + $hasIncome*100)/100;
|
||||
//发票部分到账
|
||||
$this->model->where(['id'=>$invoice_id])->update(['enter_status'=>1,'enter_amount'=>$incomeTotal,'enter_time'=>time()]);
|
||||
}
|
||||
add_log('add',$invoice_id,$param);
|
||||
return to_assign();
|
||||
}
|
||||
else{
|
||||
return to_assign(1,'保存失败');
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
return to_assign(1,'提交的到账数据异常,请核对再提交');
|
||||
}
|
||||
}
|
||||
else if($param['enter_type']==2){ //全部到账记录
|
||||
$enter_price = ($invoiceAmount*100-$hasIncome*100)/100;
|
||||
$data = [
|
||||
'invoice_id' => $invoice_id,
|
||||
'amount' => $enter_price,
|
||||
'enter_time' => isset($param['enter_time'])? strtotime($param['enter_time']) : 0,
|
||||
'remarks' => '一次性全部到账',
|
||||
'admin_id' => $admin_id,
|
||||
'create_time' => time()
|
||||
];
|
||||
$res = InvoiceIncome::strict(false)->field(true)->insertGetId($data);
|
||||
if($res!==false){
|
||||
//设置发票全部到账
|
||||
$this->model->where(['id'=>$invoice_id])->update(['enter_status'=>2,'enter_amount'=>$invoiceAmount,'enter_time'=>time()]);
|
||||
add_log('add',$invoice_id,$param);
|
||||
return to_assign();
|
||||
}
|
||||
}
|
||||
else if ($param['enter_type']==3) {//全部反账记录
|
||||
//作废初始化发票到账数据
|
||||
$res = InvoiceIncome::where(['invoice_id'=>$invoice_id])->update(['status'=>'6','update_time'=>time()]);
|
||||
if($res!==false){
|
||||
//设置发票全部没到账
|
||||
$this->model->where(['id'=>$invoice_id])->update(['enter_status'=>0,'enter_amount'=>0,'enter_time'=>0]);
|
||||
add_log('tovoid',$invoice_id,$param);
|
||||
return to_assign();
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
if($auth == 0){
|
||||
return view(EEEOR_REPORTING,['code'=>405,'warning'=>'无权限访问']);
|
||||
}
|
||||
$id = isset($param['id']) ? $param['id']: 0 ;
|
||||
$detail = $this->model->getById($id);
|
||||
if(empty($detail)){
|
||||
return view(EEEOR_REPORTING,['code'=>404,'warning'=>'找不到记录']);
|
||||
}
|
||||
$detail['subject'] = Db::name('Enterprise')->where(['id' =>$detail['invoice_subject']])->value('title');
|
||||
$file_array = Db::name('File')->where('id','in',$detail['file_ids'])->select();
|
||||
$detail['file_array'] = $file_array;
|
||||
$other_file_array = Db::name('File')->where('id','in',$detail['other_file_ids'])->select();
|
||||
$detail['other_file_array'] = $other_file_array;
|
||||
if($detail['open_status']>0){
|
||||
$detail['open_admin_name'] = Db::name('Admin')->where('id','=',$detail['open_admin_id'])->value('name');
|
||||
}
|
||||
$not_income = ($detail['amount']*100 - $detail['enter_amount']*100)/100;
|
||||
$detail['not_income'] = sprintf("%.2f",$not_income);
|
||||
//已到账的记录
|
||||
$detail['income'] = InvoiceIncome::field('i.*,a.name as admin')
|
||||
->alias('i')
|
||||
->join('Admin a', 'a.id = i.admin_id', 'LEFT')
|
||||
->where(['i.invoice_id'=>$id,'i.status'=>1])
|
||||
->order('i.enter_time desc')
|
||||
->select();
|
||||
View::assign('uid', $this->uid);
|
||||
View::assign('id', $id);
|
||||
View::assign('detail', $detail);
|
||||
if($detail['invoice_type'] == 0){
|
||||
return view('add_a');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
}
|
||||
//查看
|
||||
public function view()
|
||||
{
|
||||
$id = empty(get_params('id')) ? 0 : get_params('id');
|
||||
$detail = $this->model->getById($id);
|
||||
if(empty($detail)){
|
||||
throw new \think\exception\HttpException(406, '找不到记录');
|
||||
}
|
||||
$detail['not_income'] = ($detail['amount']*100 - $detail['enter_amount']*100)/100;
|
||||
//已到账的记录
|
||||
$detail['income'] = InvoiceIncome::field('i.*,a.name as admin')
|
||||
->alias('i')
|
||||
->join('Admin a', 'a.id = i.admin_id', 'LEFT')
|
||||
->where(['i.invoice_id'=>$id,'i.status'=>1])
|
||||
->order('i.enter_time desc')
|
||||
->select();
|
||||
|
||||
$detail['subject'] = Db::name('Enterprise')->where(['id' =>$detail['invoice_subject']])->value('title');
|
||||
$file_array = Db::name('File')->where('id','in',$detail['file_ids'])->select();
|
||||
$detail['file_array'] = $file_array;
|
||||
$other_file_array = Db::name('File')->where('id','in',$detail['other_file_ids'])->select();
|
||||
$detail['other_file_array'] = $other_file_array;
|
||||
if($detail['open_status']>0){
|
||||
$detail['open_admin_name'] = Db::name('Admin')->where('id','=',$detail['open_admin_id'])->value('name');
|
||||
}
|
||||
View::assign('uid', $this->uid);
|
||||
View::assign('detail', $detail);
|
||||
if(is_mobile()){
|
||||
return view('qiye@/finance/view_income');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
|
||||
//删除到账记录
|
||||
public function del()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$income =InvoiceIncome::where(['id'=>$param['id']])->find();
|
||||
$invoice = $this->model->where(['id'=>$income['invoice_id']])->find();
|
||||
if($income){
|
||||
$res = InvoiceIncome::where(['id'=>$param['id']])->update(['status'=>'6','update_time'=>time()]);
|
||||
if($res!==false){
|
||||
if($income['amount']*100 == $invoice['amount']*100){
|
||||
//发票全部反到账
|
||||
$this->model->where(['id'=>$income['invoice_id']])->update(['enter_status'=>0,'enter_amount'=>0,'enter_time'=>0]);
|
||||
}
|
||||
else if($income['amount']*100 < $invoice['amount']*100){
|
||||
$incomeTotal=InvoiceIncome::where(['invoice_id'=>$income['invoice_id'],'status'=>1])->sum('amount');
|
||||
//发票部分到账
|
||||
$this->model->where(['id'=>$income['invoice_id']])->update(['enter_status'=>1,'enter_amount'=>$incomeTotal,'enter_time'=>time()]);
|
||||
}
|
||||
add_log('enter',$income['invoice_id'],$invoice);
|
||||
return to_assign();
|
||||
}
|
||||
else{
|
||||
return to_assign(1,'操作失败');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//回款记录
|
||||
public function record()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$where = [];
|
||||
$where[]=['status','=',1];
|
||||
//按时间检索
|
||||
if (!empty($param['diff_time'])) {
|
||||
$diff_time =explode('~', $param['diff_time']);
|
||||
$where[] = ['enter_time', 'between', [strtotime(urldecode($diff_time[0])),strtotime(urldecode($diff_time[1].' 23:59:59'))]];
|
||||
}
|
||||
$model = new InvoiceIncome();
|
||||
$list = $model->datalist($param,$where);
|
||||
|
||||
$amount = $model::where($where)->sum('amount');
|
||||
$totalRow['amount'] = sprintf("%.2f",$amount);
|
||||
return table_assign(0, '', $list);
|
||||
} else {
|
||||
return view();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,380 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\finance\controller;
|
||||
|
||||
use app\base\BaseController;
|
||||
use app\finance\model\Invoice as InvoiceModel;
|
||||
use app\finance\validate\InvoiceValidate;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Invoice extends BaseController
|
||||
{
|
||||
/**
|
||||
* 构造函数
|
||||
*/
|
||||
protected $model;
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(); // 调用父类构造函数
|
||||
$this->model = new InvoiceModel();
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据列表
|
||||
*/
|
||||
public function datalist()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$tab = isset($param['tab']) ? $param['tab'] : 0;
|
||||
$uid=$this->uid;
|
||||
$where = array();
|
||||
$whereOr = array();
|
||||
$where[]=['delete_time','=',0];
|
||||
$where[]=['invoice_type','>',0];
|
||||
if($tab == 0){
|
||||
$auth = isAuthInvoice($uid);
|
||||
if($auth == 0){
|
||||
$whereOr[] = ['admin_id', '=', $this->uid];
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_uids)")];
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_history_uids)")];
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_copy_uids)")];
|
||||
$dids_a = get_leader_departments($uid);
|
||||
$dids_b = get_role_departments($uid);
|
||||
$dids = array_merge($dids_a, $dids_b);
|
||||
if(!empty($dids)){
|
||||
$whereOr[] = ['did','in',$dids];
|
||||
}
|
||||
}
|
||||
}
|
||||
if($tab == 1){
|
||||
//我创建的
|
||||
$where[] = ['admin_id', '=', $this->uid];
|
||||
}
|
||||
if($tab == 2){
|
||||
//待我审核的
|
||||
$where[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_uids)")];
|
||||
}
|
||||
if($tab == 3){
|
||||
//我已审核的
|
||||
$where[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_history_uids)")];
|
||||
}
|
||||
if($tab == 4){
|
||||
//抄送给我的
|
||||
$where[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_copy_uids)")];
|
||||
}
|
||||
if($tab == 5){
|
||||
//已开具的
|
||||
$where[] = ['open_status', '=', 1];
|
||||
}
|
||||
if($tab == 6){
|
||||
//已作废的
|
||||
$where[] = ['open_status', '=', 2];
|
||||
}
|
||||
//按时间检索
|
||||
if (!empty($param['diff_time'])) {
|
||||
$diff_time =explode('~', $param['diff_time']);
|
||||
$where[] = ['open_time', 'between', [strtotime(urldecode($diff_time[0])),strtotime(urldecode($diff_time[1].' 23:59:59'))]];
|
||||
}
|
||||
if (isset($param['open_status']) && $param['open_status'] != "") {
|
||||
$where[] = ['open_status', '=', $param['open_status']];
|
||||
}
|
||||
if (isset($param['enter_status']) && $param['enter_status'] != "") {
|
||||
$where[] = ['enter_status', '=', $param['enter_status']];
|
||||
}
|
||||
if (isset($param['check_status']) && $param['check_status'] != "") {
|
||||
$where[] = ['check_status', '=', $param['check_status']];
|
||||
}
|
||||
$list = $this->model->datalist($param,$where,$whereOr);
|
||||
return table_assign(0, '', $list);
|
||||
}
|
||||
else{
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加/编辑
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
if ($param['types'] == 1) {
|
||||
if (!$param['invoice_bank']) {
|
||||
return to_assign(1, '开户银行不能为空');
|
||||
}
|
||||
if (!$param['invoice_account']) {
|
||||
return to_assign(1, '银行账号不能为空');
|
||||
}
|
||||
}
|
||||
$param['admin_id'] = $this->uid;
|
||||
$param['did'] = $this->did;
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
try {
|
||||
validate(InvoiceValidate::class)->scene('edit')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$this->model->edit($param);
|
||||
} else {
|
||||
try {
|
||||
validate(InvoiceValidate::class)->scene('add')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$this->model->add($param);
|
||||
}
|
||||
}else{
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
if ($id>0) {
|
||||
$detail = $this->model->getById($id);
|
||||
View::assign('detail', $detail);
|
||||
if(is_mobile()){
|
||||
return view('qiye@/finance/add_invoice');
|
||||
}
|
||||
return view('edit');
|
||||
}
|
||||
if(is_mobile()){
|
||||
return view('qiye@/finance/add_invoice');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
public function view($id)
|
||||
{
|
||||
$detail = $this->model->getById($id);
|
||||
if (!empty($detail)) {
|
||||
$other_file_array = Db::name('File')->where('id','in',$detail['other_file_ids'])->select();
|
||||
$detail['other_file_array'] = $other_file_array;
|
||||
if($detail['open_status']>0){
|
||||
$detail['open_admin_name'] = Db::name('Admin')->where('id','=',$detail['open_admin_id'])->value('name');
|
||||
}
|
||||
View::assign('detail', $detail);
|
||||
View::assign('create_user', get_admin($detail['admin_id']));
|
||||
if(is_mobile()){
|
||||
return view('qiye@/finance/view_invoice');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
else{
|
||||
return view(EEEOR_REPORTING,['code'=>404,'warning'=>'找不到页面']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
public function del()
|
||||
{
|
||||
$param = get_params();
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
if (request()->isDelete()) {
|
||||
$this->model->delById($id);
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
//开票记录
|
||||
public function record()
|
||||
{
|
||||
$uid = $this->uid;
|
||||
$auth = isAuthInvoice($uid);
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$tab = isset($param['tab']) ? $param['tab'] : 0;
|
||||
$where = [];
|
||||
$whereOr = [];
|
||||
$where[]=['delete_time','=',0];
|
||||
$where[]=['check_status','=',2];
|
||||
$where[]=['invoice_type','>',0];
|
||||
if($auth == 0){
|
||||
$dids_a = get_leader_departments($uid);
|
||||
$dids_b = get_role_departments($uid);
|
||||
$dids = array_merge($dids_a, $dids_b);
|
||||
if(!empty($dids)){
|
||||
$whereOr[] = ['did','in',$dids];
|
||||
}
|
||||
}
|
||||
if($tab == 0){
|
||||
//正常的
|
||||
$where[] = ['open_status', '<', 2];
|
||||
}
|
||||
if($tab == 1){
|
||||
//已作废的
|
||||
$where[] = ['open_status', '=', 2];
|
||||
}
|
||||
//按时间检索
|
||||
if (!empty($param['diff_time'])) {
|
||||
$diff_time =explode('~', $param['diff_time']);
|
||||
$where[] = ['open_time', 'between', [strtotime(urldecode($diff_time[0])),strtotime(urldecode($diff_time[1].' 23:59:59'))]];
|
||||
}
|
||||
if (isset($param['open_status']) && $param['open_status'] != "") {
|
||||
$where[] = ['open_status', '=', $param['open_status']];
|
||||
}
|
||||
$list = $this->model->datalist($param,$where,$whereOr);
|
||||
|
||||
$amount = $this->model::where($where)->where(function ($query) use($whereOr) {
|
||||
if (!empty($whereOr)){
|
||||
$query->whereOr($whereOr);
|
||||
}
|
||||
})->sum('amount');
|
||||
$totalRow['amount'] = sprintf("%.2f",$amount);
|
||||
return table_assign(0, '', $list);
|
||||
} else {
|
||||
|
||||
View::assign('authInvoice', $auth);
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 无发票回款列表
|
||||
*/
|
||||
public function datalist_a()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$uid=$this->uid;
|
||||
$where = array();
|
||||
$whereOr = array();
|
||||
$where[]=['delete_time','=',0];
|
||||
$where[]=['invoice_type','=',0];
|
||||
|
||||
$whereOr[] = ['admin_id', '=', $this->uid];
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_uids)")];
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_history_uids)")];
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_copy_uids)")];
|
||||
$auth = isAuthInvoice($uid);
|
||||
if($auth == 0){
|
||||
$dids_a = get_leader_departments($uid);
|
||||
$dids_b = get_role_departments($uid);
|
||||
$dids = array_merge($dids_a, $dids_b);
|
||||
if(!empty($dids)){
|
||||
$whereOr[] = ['did','in',$dids];
|
||||
}
|
||||
}
|
||||
//按时间检索
|
||||
if (!empty($param['diff_time'])) {
|
||||
$diff_time =explode('~', $param['diff_time']);
|
||||
$where[] = ['enter_time', 'between', [strtotime(urldecode($diff_time[0])),strtotime(urldecode($diff_time[1].' 23:59:59'))]];
|
||||
}
|
||||
if (isset($param['enter_status']) && $param['enter_status'] != "") {
|
||||
$where[] = ['enter_status', '=', $param['enter_status']];
|
||||
}
|
||||
if (isset($param['check_status']) && $param['check_status'] != "") {
|
||||
$where[] = ['check_status', '=', $param['check_status']];
|
||||
}
|
||||
$list = $this->model->datalist($param,$where,$whereOr);
|
||||
return table_assign(0, '', $list);
|
||||
}
|
||||
else{
|
||||
View::assign('auth', isAuthIncome($this->uid));
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 无发票添加/编辑
|
||||
*/
|
||||
public function add_a()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$param['admin_id'] = $this->uid;
|
||||
$param['did'] = $this->did;
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
try {
|
||||
validate(InvoiceValidate::class)->scene('edit')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$this->model->edit($param);
|
||||
} else {
|
||||
try {
|
||||
validate(InvoiceValidate::class)->scene('add')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$this->model->add($param);
|
||||
}
|
||||
}else{
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
if ($id>0) {
|
||||
$detail = $this->model->getById($id);
|
||||
View::assign('detail', $detail);
|
||||
if(is_mobile()){
|
||||
return view('qiye@/finance/add_invoice_a');
|
||||
}
|
||||
return view('edit_a');
|
||||
}
|
||||
if(is_mobile()){
|
||||
return view('qiye@/finance/add_invoice_a');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 无发票查看
|
||||
*/
|
||||
public function view_a($id)
|
||||
{
|
||||
$detail = $this->model->getById($id);
|
||||
if (!empty($detail)) {
|
||||
$detail['subject'] = Db::name('Enterprise')->where(['id' =>$detail['invoice_subject']])->value('title');
|
||||
$other_file_array = Db::name('File')->where('id','in',$detail['other_file_ids'])->select();
|
||||
$detail['other_file_array'] = $other_file_array;
|
||||
if($detail['open_status']>0){
|
||||
$detail['open_admin_name'] = Db::name('Admin')->where('id','=',$detail['open_admin_id'])->value('name');
|
||||
}
|
||||
View::assign('detail', $detail);
|
||||
View::assign('create_user', get_admin($detail['admin_id']));
|
||||
if(is_mobile()){
|
||||
return view('qiye@/finance/view_invoice_a');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
else{
|
||||
return view(EEEOR_REPORTING,['code'=>404,'warning'=>'找不到页面']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
public function del_a($id)
|
||||
{
|
||||
if (request()->isDelete()) {
|
||||
$this->model->delById($id);
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,231 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\finance\controller;
|
||||
|
||||
use app\base\BaseController;
|
||||
use app\finance\model\Loan as LoanModel;
|
||||
use app\finance\validate\LoanValidate;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Loan extends BaseController
|
||||
{
|
||||
/**
|
||||
* 构造函数
|
||||
*/
|
||||
protected $model;
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(); // 调用父类构造函数
|
||||
$this->model = new LoanModel();
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据列表
|
||||
*/
|
||||
public function datalist()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$tab = isset($param['tab']) ? $param['tab'] : 0;
|
||||
$uid = $this->uid;
|
||||
$where = array();
|
||||
$whereOr = array();
|
||||
$where[]=['delete_time','=',0];
|
||||
if($tab == 0){
|
||||
//全部
|
||||
$auth = isAuthLoan($uid);
|
||||
if($auth == 0){
|
||||
$whereOr[] = ['admin_id', '=', $this->uid];
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_uids)")];
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_history_uids)")];
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_copy_uids)")];
|
||||
$dids_a = get_leader_departments($uid);
|
||||
$dids_b = get_role_departments($uid);
|
||||
$dids = array_merge($dids_a, $dids_b);
|
||||
if(!empty($dids)){
|
||||
$whereOr[] = ['did','in',$dids];
|
||||
}
|
||||
}
|
||||
}
|
||||
if($tab == 1){
|
||||
//我创建的
|
||||
$where[] = ['admin_id', '=', $this->uid];
|
||||
}
|
||||
if($tab == 2){
|
||||
//待我审核的
|
||||
$where[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_uids)")];
|
||||
}
|
||||
if($tab == 3){
|
||||
//我已审核的
|
||||
$where[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_history_uids)")];
|
||||
}
|
||||
if($tab == 4){
|
||||
//抄送给我的
|
||||
$where[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_copy_uids)")];
|
||||
}
|
||||
if($tab == 5){
|
||||
//已打款的
|
||||
$where[] = ['pay_status', '=', 1];
|
||||
$auth = isAuthLoan($uid);
|
||||
if($auth == 0){
|
||||
$dids_a = get_leader_departments($uid);
|
||||
$dids_b = get_role_departments($uid);
|
||||
$dids = array_merge($dids_a, $dids_b);
|
||||
if(!empty($dids)){
|
||||
$whereOr[] = ['did','in',$dids];
|
||||
}
|
||||
$whereOr[] = ['admin_id', '=', $this->uid];
|
||||
}
|
||||
}
|
||||
//按时间检索
|
||||
if (!empty($param['diff_time'])) {
|
||||
$diff_time =explode('~', $param['diff_time']);
|
||||
$where[] = ['create_time', 'between', [strtotime(urldecode($diff_time[0])),strtotime(urldecode($diff_time[1].' 23:59:59'))]];
|
||||
}
|
||||
if (isset($param['pay_status']) && $param['pay_status'] != "") {
|
||||
$where[] = ['pay_status', '=', $param['pay_status']];
|
||||
}
|
||||
if (isset($param['check_status']) && $param['check_status'] != "") {
|
||||
$where[] = ['check_status', '=', $param['check_status']];
|
||||
}
|
||||
$list = $this->model->datalist($param,$where,$whereOr);
|
||||
return table_assign(0, '', $list);
|
||||
}
|
||||
else{
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加/编辑
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$param['loan_time'] = isset($param['loan_time']) ? strtotime(urldecode($param['loan_time'])) : 0;
|
||||
$param['plan_time'] = isset($param['plan_time']) ? strtotime(urldecode($param['plan_time'])) : 0;
|
||||
$param['admin_id'] = $this->uid;
|
||||
$param['did'] = $this->did;
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
try {
|
||||
validate(LoanValidate::class)->scene('edit')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$this->model->edit($param);
|
||||
} else {
|
||||
try {
|
||||
validate(LoanValidate::class)->scene('add')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$this->model->add($param);
|
||||
}
|
||||
}else{
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
$is_codeno = Db::name('DataAuth')->where('name','finance_admin')->value('conf_9');
|
||||
View::assign('is_codeno', $is_codeno);
|
||||
View::assign('user', get_admin($this->uid));
|
||||
if ($id>0) {
|
||||
$detail = $this->model->getById($id);
|
||||
View::assign('detail', $detail);
|
||||
if(is_mobile()){
|
||||
return view('qiye@/finance/add_loan');
|
||||
}
|
||||
return view('edit');
|
||||
}
|
||||
$codeno='';
|
||||
if($is_codeno==1){
|
||||
$codeno = get_codeno(4);
|
||||
}
|
||||
View::assign('codeno', $codeno);
|
||||
if(is_mobile()){
|
||||
return view('qiye@/finance/add_loan');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
public function view($id)
|
||||
{
|
||||
$detail = $this->model->getById($id);
|
||||
if (!empty($detail)) {
|
||||
$detail['expense'] = Db::name('Expense')->where(['delete_time'=>0,'loan_id'=>$id])->select()->toArray();
|
||||
View::assign('detail', $detail);
|
||||
View::assign('create_user', get_admin($detail['admin_id']));
|
||||
if(is_mobile()){
|
||||
return view('qiye@/finance/view_loan');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
else{
|
||||
return view(EEEOR_REPORTING,['code'=>404,'warning'=>'找不到页面']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
public function del()
|
||||
{
|
||||
$param = get_params();
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
if (request()->isDelete()) {
|
||||
$this->model->delById($id);
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
//借支记录
|
||||
public function record()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$where = [];
|
||||
$where[]=['delete_time','=',0];
|
||||
$where[]=['check_status','=',2];
|
||||
if(isAuthLoan($this->uid)==0){
|
||||
$where[] = ['admin_id', '=', $this->uid];
|
||||
}
|
||||
//按时间检索
|
||||
if (!empty($param['diff_time'])) {
|
||||
$diff_time =explode('~', $param['diff_time']);
|
||||
$where[] = ['loan_time', 'between', [strtotime(urldecode($diff_time[0])),strtotime(urldecode($diff_time[1].' 23:59:59'))]];
|
||||
}
|
||||
if (isset($param['pay_status']) && $param['pay_status'] != "") {
|
||||
$where[] = ['pay_status', '=', $param['pay_status']];
|
||||
}
|
||||
$list = $this->model->datalist($param,$where);
|
||||
|
||||
$cost = $this->model::where($where)->sum('cost');
|
||||
$totalRow['cost'] = sprintf("%.2f",$cost);
|
||||
return table_assign(0, '', $list);
|
||||
} else {
|
||||
View::assign('isAuthLoan',isAuthLoan($this->uid));
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,281 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\finance\controller;
|
||||
|
||||
use app\base\BaseController;
|
||||
use app\finance\model\Ticket as TicketModel;
|
||||
use app\finance\model\TicketPayment;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Payment extends BaseController
|
||||
{
|
||||
/**
|
||||
* 构造函数
|
||||
*/
|
||||
protected $model;
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(); // 调用父类构造函数
|
||||
$this->model = new TicketModel();
|
||||
}
|
||||
|
||||
public function datalist()
|
||||
{
|
||||
$auth = isAuthPayment($this->uid);
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$where = array();
|
||||
$whereOr = array();
|
||||
$where[] = ['delete_time', '=', 0];
|
||||
$where[] = ['check_status', '=', 2];
|
||||
$where[] = ['open_status', '=', 1];
|
||||
$where[] = ['invoice_type','>',0];
|
||||
//按时间检索
|
||||
if (!empty($param['diff_time'])) {
|
||||
$diff_time =explode('~', $param['diff_time']);
|
||||
$where[] = ['pay_time', 'between', [strtotime(urldecode($diff_time[0])),strtotime(urldecode($diff_time[1].' 23:59:59'))]];
|
||||
}
|
||||
if (isset($param['pay_status']) && $param['pay_status']!='') {
|
||||
$where[] = ['pay_status', '=', $param['pay_status']];
|
||||
}
|
||||
if($auth == 0){
|
||||
$where[] = ['admin_id','=',$this->uid];
|
||||
}
|
||||
$list = $this->model->datalist($param,$where,$whereOr);
|
||||
return table_assign(0, '', $list);
|
||||
} else {
|
||||
View::assign('auth', $auth);
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
//查看
|
||||
public function add()
|
||||
{
|
||||
$param = get_params();
|
||||
$auth = isAuthPayment($this->uid);
|
||||
if (request()->isAjax()) {
|
||||
if($auth == 0){
|
||||
return to_assign(1, "你没有付款管理权限,请联系管理员或者HR");
|
||||
}
|
||||
$ticket_id = $param['ticket_id'];
|
||||
$admin_id = $this->uid;
|
||||
//计算已付款的金额
|
||||
$hasPay = TicketPayment::where(['ticket_id'=>$ticket_id,'status'=>1])->sum('amount');
|
||||
//查询发票金额
|
||||
$ticketAmount = $this->model->where(['id'=>$ticket_id])->value('amount');
|
||||
if($param['pay_type']==1){ //单个付款记录
|
||||
//相关内容多个数组
|
||||
$payPriceData=isset($param['amount'])? $param['amount'] : '';
|
||||
$payTimeData=isset($param['pay_time'])? $param['pay_time'] : '';
|
||||
$remarksData=isset($param['remarks'])? $param['remarks'] : '';
|
||||
|
||||
//把合同协议关联的单个内容的发票入账明细重新添加
|
||||
if($payPriceData){
|
||||
$pay_price = 0;
|
||||
$insert = [];
|
||||
$time = time();
|
||||
foreach ($payPriceData as $key => $value) {
|
||||
if (!$value ) continue;
|
||||
$insert[] = [
|
||||
'ticket_id' => $ticket_id,
|
||||
'amount' => $value,
|
||||
'pay_time' => $payTimeData[$key]? strtotime($payTimeData[$key]) : 0,
|
||||
'remarks' => $remarksData[$key],
|
||||
'admin_id' => $admin_id,
|
||||
'create_time' => $time
|
||||
];
|
||||
$pay_price += $value*100;
|
||||
}
|
||||
if(($pay_price + $hasPay*100)> $ticketAmount*100){
|
||||
return to_assign(1,'付款金额大于发票金额,不允许保存');
|
||||
}
|
||||
else{
|
||||
$res = TicketPayment::strict(false)->field(true)->insertAll($insert);
|
||||
if($res!==false){
|
||||
if(($pay_price + $hasPay*100) == $ticketAmount*100){
|
||||
//发票全部付款
|
||||
$this->model->where(['id'=>$ticket_id])->update(['pay_status'=>2,'pay_amount'=>$ticketAmount,'pay_time'=>time()]);
|
||||
}
|
||||
else if(($pay_price + $hasPay*100) < $ticketAmount*100){
|
||||
$payTotal=($pay_price + $hasPay*100)/100;
|
||||
//发票部分付款
|
||||
$this->model->where(['id'=>$ticket_id])->update(['pay_status'=>1,'pay_amount'=>$payTotal,'pay_time'=>time()]);
|
||||
}
|
||||
add_log('add',$ticket_id,$param);
|
||||
return to_assign();
|
||||
}
|
||||
else{
|
||||
return to_assign(1,'保存失败');
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
return to_assign(1,'提交的付款数据异常,请核对再提交');
|
||||
}
|
||||
}
|
||||
else if($param['pay_type']==2){ //全部付款记录
|
||||
$pay_price = ($ticketAmount*100-$hasPay*100)/100;
|
||||
$data = [
|
||||
'ticket_id' => $ticket_id,
|
||||
'amount' => $pay_price,
|
||||
'pay_time' => isset($param['pay_time'])? strtotime($param['pay_time']) : 0,
|
||||
'remarks' => '一次性全部付款',
|
||||
'admin_id' => $admin_id,
|
||||
'create_time' => time()
|
||||
];
|
||||
$res = TicketPayment::strict(false)->field(true)->insertGetId($data);
|
||||
if($res!==false){
|
||||
//设置发票全部付款
|
||||
$this->model->where(['id'=>$ticket_id])->update(['pay_status'=>2,'pay_amount'=>$ticketAmount,'pay_time'=>time()]);
|
||||
add_log('add',$ticket_id,$param);
|
||||
return to_assign();
|
||||
}
|
||||
}
|
||||
else if ($param['pay_type']==3) {//全部反账记录
|
||||
//作废初始化发票付款数据
|
||||
$res = TicketPayment::where(['ticket_id'=>$ticket_id])->update(['status'=>'6','update_time'=>time()]);
|
||||
if($res!==false){
|
||||
//设置发票全部没付款
|
||||
$this->model->where(['id'=>$ticket_id])->update(['pay_status'=>0,'pay_amount'=>0,'pay_time'=>0]);
|
||||
add_log('tovoid',$ticket_id,$param);
|
||||
return to_assign();
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
if($auth == 0){
|
||||
return view(EEEOR_REPORTING,['code'=>405,'warning'=>'无权限访问']);
|
||||
}
|
||||
$id = isset($param['id']) ? $param['id']: 0 ;
|
||||
$detail = $this->model->getById($id);
|
||||
if(empty($detail)){
|
||||
return view(EEEOR_REPORTING,['code'=>404,'warning'=>'找不到记录']);
|
||||
}
|
||||
$detail['subject'] = Db::name('Enterprise')->where(['id' =>$detail['invoice_subject']])->value('title');
|
||||
$file_array = Db::name('File')->where('id','in',$detail['file_ids'])->select();
|
||||
$detail['file_array'] = $file_array;
|
||||
$other_file_array = Db::name('File')->where('id','in',$detail['other_file_ids'])->select();
|
||||
$detail['other_file_array'] = $other_file_array;
|
||||
if($detail['open_status']>0){
|
||||
$detail['open_admin_name'] = Db::name('Admin')->where('id','=',$detail['open_admin_id'])->value('name');
|
||||
}
|
||||
$not_pay = ($detail['amount']*100 - $detail['pay_amount']*100)/100;
|
||||
$detail['not_pay'] = sprintf("%.2f",$not_pay);
|
||||
//已付款的记录
|
||||
$detail['payment'] = TicketPayment::field('i.*,a.name as admin')
|
||||
->alias('i')
|
||||
->join('Admin a', 'a.id = i.admin_id', 'LEFT')
|
||||
->where(['i.ticket_id'=>$id,'i.status'=>1])
|
||||
->order('i.pay_time desc')
|
||||
->select();
|
||||
View::assign('uid', $this->uid);
|
||||
View::assign('id', $id);
|
||||
View::assign('detail', $detail);
|
||||
if($detail['invoice_type'] == 0){
|
||||
return view('add_a');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
}
|
||||
//查看
|
||||
public function view()
|
||||
{
|
||||
$id = empty(get_params('id')) ? 0 : get_params('id');
|
||||
$detail = $this->model->getById($id);
|
||||
if(empty($detail)){
|
||||
throw new \think\exception\HttpException(406, '找不到记录');
|
||||
}
|
||||
$detail['not_pay'] = ($detail['amount']*100 - $detail['pay_amount']*100)/100;
|
||||
//已付款的记录
|
||||
$detail['payment'] = TicketPayment::field('i.*,a.name as admin')
|
||||
->alias('i')
|
||||
->join('Admin a', 'a.id = i.admin_id', 'LEFT')
|
||||
->where(['i.ticket_id'=>$id,'i.status'=>1])
|
||||
->order('i.pay_time desc')
|
||||
->select();
|
||||
|
||||
$detail['subject'] = Db::name('Enterprise')->where(['id' =>$detail['invoice_subject']])->value('title');
|
||||
$file_array = Db::name('File')->where('id','in',$detail['file_ids'])->select();
|
||||
$detail['file_array'] = $file_array;
|
||||
$other_file_array = Db::name('File')->where('id','in',$detail['other_file_ids'])->select();
|
||||
$detail['other_file_array'] = $other_file_array;
|
||||
if($detail['open_status']>0){
|
||||
$detail['open_admin_name'] = Db::name('Admin')->where('id','=',$detail['open_admin_id'])->value('name');
|
||||
}
|
||||
View::assign('uid', $this->uid);
|
||||
View::assign('detail', $detail);
|
||||
if(is_mobile()){
|
||||
return view('qiye@/finance/view_payment');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
|
||||
//删除付款记录
|
||||
public function del()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$payment =TicketPayment::where(['id'=>$param['id']])->find();
|
||||
$ticket = $this->model->where(['id'=>$payment['ticket_id']])->find();
|
||||
if($payment){
|
||||
$res = TicketPayment::where(['id'=>$param['id']])->update(['status'=>'6','update_time'=>time()]);
|
||||
if($res!==false){
|
||||
if($payment['amount']*100 == $ticket['amount']*100){
|
||||
//发票全部反付款
|
||||
$this->model->where(['id'=>$payment['ticket_id']])->update(['pay_status'=>0,'pay_amount'=>0,'pay_time'=>0]);
|
||||
}
|
||||
else if($payment['amount']*100 < $ticket['amount']*100){
|
||||
$payTotal=TicketPayment::where(['ticket_id'=>$payment['ticket_id'],'status'=>1])->sum('amount');
|
||||
//发票部分付款
|
||||
$this->model->where(['id'=>$payment['ticket_id']])->update(['pay_status'=>1,'pay_amount'=>$payTotal,'pay_time'=>time()]);
|
||||
}
|
||||
add_log('pay',$payment['ticket_id'],$ticket);
|
||||
return to_assign();
|
||||
}
|
||||
else{
|
||||
return to_assign(1,'操作失败');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//回款记录
|
||||
public function record()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$where = [];
|
||||
$where[]=['status','=',1];
|
||||
//按时间检索
|
||||
if (!empty($param['diff_time'])) {
|
||||
$diff_time =explode('~', $param['diff_time']);
|
||||
$where[] = ['pay_time', 'between', [strtotime(urldecode($diff_time[0])),strtotime(urldecode($diff_time[1].' 23:59:59'))]];
|
||||
}
|
||||
$model = new TicketPayment();
|
||||
$list = $model->datalist($param,$where);
|
||||
|
||||
$amount = $model::where($where)->sum('amount');
|
||||
$totalRow['amount'] = sprintf("%.2f",$amount);
|
||||
return table_assign(0, '', $list);
|
||||
} else {
|
||||
return view();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,346 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\finance\controller;
|
||||
|
||||
use app\base\BaseController;
|
||||
use app\finance\model\Ticket as TicketModel;
|
||||
use app\finance\validate\TicketValidate;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Ticket extends BaseController
|
||||
{
|
||||
/**
|
||||
* 构造函数
|
||||
*/
|
||||
protected $model;
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(); // 调用父类构造函数
|
||||
$this->model = new TicketModel();
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据列表
|
||||
*/
|
||||
public function datalist()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$tab = isset($param['tab']) ? $param['tab'] : 0;
|
||||
$uid=$this->uid;
|
||||
$where = array();
|
||||
$whereOr = array();
|
||||
$where[]=['delete_time','=',0];
|
||||
$where[]=['invoice_type','>',0];
|
||||
if($tab == 0){
|
||||
$auth = isAuthInvoice($uid);
|
||||
if($auth == 0){
|
||||
$whereOr[] = ['admin_id', '=', $this->uid];
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_uids)")];
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_history_uids)")];
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_copy_uids)")];
|
||||
$dids_a = get_leader_departments($uid);
|
||||
$dids_b = get_role_departments($uid);
|
||||
$dids = array_merge($dids_a, $dids_b);
|
||||
if(!empty($dids)){
|
||||
$whereOr[] = ['did','in',$dids];
|
||||
}
|
||||
}
|
||||
}
|
||||
if($tab == 1){
|
||||
//我创建的
|
||||
$where[] = ['admin_id', '=', $this->uid];
|
||||
}
|
||||
if($tab == 2){
|
||||
//待我审核的
|
||||
$where[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_uids)")];
|
||||
}
|
||||
if($tab == 3){
|
||||
//我已审核的
|
||||
$where[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_history_uids)")];
|
||||
}
|
||||
if($tab == 4){
|
||||
//抄送给我的
|
||||
$where[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_copy_uids)")];
|
||||
}
|
||||
//按时间检索
|
||||
if (!empty($param['diff_time'])) {
|
||||
$diff_time =explode('~', $param['diff_time']);
|
||||
$where[] = ['open_time', 'between', [strtotime(urldecode($diff_time[0])),strtotime(urldecode($diff_time[1].' 23:59:59'))]];
|
||||
}
|
||||
if (isset($param['open_status']) && $param['open_status'] != "") {
|
||||
$where[] = ['open_status', '=', $param['open_status']];
|
||||
}
|
||||
if (isset($param['pay_status']) && $param['pay_status'] != "") {
|
||||
$where[] = ['pay_status', '=', $param['pay_status']];
|
||||
}
|
||||
if (isset($param['check_status']) && $param['check_status'] != "") {
|
||||
$where[] = ['check_status', '=', $param['check_status']];
|
||||
}
|
||||
$list = $this->model->datalist($param,$where,$whereOr);
|
||||
return table_assign(0, '', $list);
|
||||
}
|
||||
else{
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加/编辑
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$param['admin_id'] = $this->uid;
|
||||
$param['did'] = $this->did;
|
||||
if (!empty($param['open_time'])) {
|
||||
$param['open_time'] = strtotime(urldecode($param['open_time']));
|
||||
}
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
try {
|
||||
validate(TicketValidate::class)->scene('edit')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$this->model->edit($param);
|
||||
} else {
|
||||
try {
|
||||
validate(TicketValidate::class)->scene('add')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$this->model->add($param);
|
||||
}
|
||||
}else{
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
if ($id>0) {
|
||||
$detail = $this->model->getById($id);
|
||||
View::assign('detail', $detail);
|
||||
if(is_mobile()){
|
||||
return view('qiye@/finance/add_ticket');
|
||||
}
|
||||
return view('edit');
|
||||
}
|
||||
if(is_mobile()){
|
||||
return view('qiye@/finance/add_ticket');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
public function view($id)
|
||||
{
|
||||
$detail = $this->model->getById($id);
|
||||
if (!empty($detail)) {
|
||||
View::assign('detail', $detail);
|
||||
View::assign('create_user', get_admin($detail['admin_id']));
|
||||
if(is_mobile()){
|
||||
return view('qiye@/finance/view_ticket');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
else{
|
||||
return view(EEEOR_REPORTING,['code'=>404,'warning'=>'找不到页面']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
public function del()
|
||||
{
|
||||
$param = get_params();
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
if (request()->isDelete()) {
|
||||
$this->model->delById($id);
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
//收票记录
|
||||
public function record()
|
||||
{
|
||||
$uid = $this->uid;
|
||||
$auth = isAuthInvoice($uid);
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$tab = isset($param['tab']) ? $param['tab'] : 0;
|
||||
$where = [];
|
||||
$where[]=['delete_time','=',0];
|
||||
$where[]=['check_status','=',2];
|
||||
$where[]=['invoice_type','>',0];
|
||||
if($auth == 0){
|
||||
$dids_a = get_leader_departments($uid);
|
||||
$dids_b = get_role_departments($uid);
|
||||
$dids = array_merge($dids_a, $dids_b);
|
||||
if(!empty($dids)){
|
||||
$whereOr[] = ['did','in',$dids];
|
||||
}
|
||||
}
|
||||
if($tab == 0){
|
||||
//正常的
|
||||
$where[] = ['open_status', '<', 2];
|
||||
}
|
||||
if($tab == 1){
|
||||
//已作废的
|
||||
$where[] = ['open_status', '=', 2];
|
||||
}
|
||||
//按时间检索
|
||||
if (!empty($param['diff_time'])) {
|
||||
$diff_time =explode('~', $param['diff_time']);
|
||||
$where[] = ['open_time', 'between', [strtotime(urldecode($diff_time[0])),strtotime(urldecode($diff_time[1].' 23:59:59'))]];
|
||||
}
|
||||
if (isset($param['open_status']) && $param['open_status'] != "") {
|
||||
$where[] = ['open_status', '=', $param['open_status']];
|
||||
}
|
||||
$list = $this->model->datalist($param,$where);
|
||||
|
||||
$amount = $this->model::where($where)->sum('amount');
|
||||
$totalRow['amount'] = sprintf("%.2f",$amount);
|
||||
return table_assign(0, '', $list);
|
||||
} else {
|
||||
View::assign('authInvoice',$auth);
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 无发票付款列表
|
||||
*/
|
||||
public function datalist_a()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$uid=$this->uid;
|
||||
$where = array();
|
||||
$whereOr = array();
|
||||
$where[]=['delete_time','=',0];
|
||||
$where[]=['invoice_type','=',0];
|
||||
$whereOr[] = ['admin_id', '=', $this->uid];
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_uids)")];
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_history_uids)")];
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_copy_uids)")];
|
||||
//按时间检索
|
||||
if (!empty($param['diff_time'])) {
|
||||
$diff_time =explode('~', $param['diff_time']);
|
||||
$where[] = ['pay_time', 'between', [strtotime(urldecode($diff_time[0])),strtotime(urldecode($diff_time[1].' 23:59:59'))]];
|
||||
}
|
||||
if (isset($param['pay_status']) && $param['pay_status'] != "") {
|
||||
$where[] = ['pay_status', '=', $param['pay_status']];
|
||||
}
|
||||
if (isset($param['check_status']) && $param['check_status'] != "") {
|
||||
$where[] = ['check_status', '=', $param['check_status']];
|
||||
}
|
||||
$list = $this->model->datalist($param,$where,$whereOr);
|
||||
return table_assign(0, '', $list);
|
||||
}
|
||||
else{
|
||||
View::assign('auth', isAuthPayment($this->uid));
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 无发票付款添加/编辑
|
||||
*/
|
||||
public function add_a()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$param['admin_id'] = $this->uid;
|
||||
$param['did'] = $this->did;
|
||||
if (!empty($param['open_time'])) {
|
||||
$param['open_time'] = strtotime(urldecode($param['open_time']));
|
||||
}
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
try {
|
||||
validate(TicketValidate::class)->scene('edit')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$this->model->edit($param);
|
||||
} else {
|
||||
try {
|
||||
validate(TicketValidate::class)->scene('add')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$this->model->add($param);
|
||||
}
|
||||
}else{
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
if ($id>0) {
|
||||
$detail = $this->model->getById($id);
|
||||
View::assign('detail', $detail);
|
||||
if(is_mobile()){
|
||||
return view('qiye@/finance/add_ticket_a');
|
||||
}
|
||||
return view('edit_a');
|
||||
}
|
||||
if(is_mobile()){
|
||||
return view('qiye@/finance/add_ticket_a');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 无发票付款查看
|
||||
*/
|
||||
public function view_a($id)
|
||||
{
|
||||
$detail = $this->model->getById($id);
|
||||
if (!empty($detail)) {
|
||||
$detail['subject'] = Db::name('Enterprise')->where(['id' =>$detail['invoice_subject']])->value('title');
|
||||
$other_file_array = Db::name('File')->where('id','in',$detail['other_file_ids'])->select();
|
||||
$detail['other_file_array'] = $other_file_array;
|
||||
View::assign('detail', $detail);
|
||||
View::assign('create_user', get_admin($detail['admin_id']));
|
||||
if(is_mobile()){
|
||||
return view('qiye@/finance/view_ticket_a');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
else{
|
||||
return view(EEEOR_REPORTING,['code'=>404,'warning'=>'找不到页面']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 无发票付款删除
|
||||
*/
|
||||
public function del_a()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isDelete()) {
|
||||
$this->model->delById($param['id']);
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
return [
|
||||
'listen' => [
|
||||
//注册监听类
|
||||
'SendMessage' => ['app\listener\SendMessage'],
|
||||
],
|
||||
//'subscribe' => ['app\subscribe\Message'],
|
||||
];
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
// 这是系统自动生成的middleware定义文件
|
||||
return [
|
||||
//开启session中间件
|
||||
//'think\middleware\SessionInit',
|
||||
//验证勾股OA是否完成安装
|
||||
\app\home\middleware\Install::class,
|
||||
];
|
||||
@@ -0,0 +1,108 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
namespace app\finance\model;
|
||||
use think\model;
|
||||
use think\facade\Db;
|
||||
class CostCate extends Model
|
||||
{
|
||||
/**
|
||||
* 获取分页列表
|
||||
* @param $where
|
||||
* @param $param
|
||||
*/
|
||||
public function datalist($where, $param)
|
||||
{
|
||||
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
|
||||
$order = empty($param['order']) ? 'id desc' : $param['order'];
|
||||
try {
|
||||
$list = self::where($where)->order($order)->paginate(['list_rows'=> $rows]);
|
||||
return $list;
|
||||
} catch(\Exception $e) {
|
||||
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加数据
|
||||
* @param $param
|
||||
*/
|
||||
public function add($param)
|
||||
{
|
||||
$insertId = 0;
|
||||
try {
|
||||
$param['create_time'] = time();
|
||||
$insertId = self::strict(false)->field(true)->insertGetId($param);
|
||||
add_log('add', $insertId, $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$insertId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑信息
|
||||
* @param $param
|
||||
*/
|
||||
public function edit($param)
|
||||
{
|
||||
try {
|
||||
$param['update_time'] = time();
|
||||
self::where('id', $param['id'])->strict(false)->field(true)->update($param);
|
||||
add_log('edit', $param['id'], $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$param['id']]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据id获取信息
|
||||
* @param $id
|
||||
*/
|
||||
public function getById($id)
|
||||
{
|
||||
$info = self::find($id);
|
||||
return $info;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除信息
|
||||
* @param $id
|
||||
* @param $type
|
||||
* @return array
|
||||
*/
|
||||
public function delById($id,$type=0)
|
||||
{
|
||||
if($type==0){
|
||||
//逻辑删除
|
||||
try {
|
||||
$param['delete_time'] = time();
|
||||
self::where('id', $id)->update(['delete_time'=>time()]);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
else{
|
||||
//物理删除
|
||||
try {
|
||||
self::destroy($id);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,249 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
namespace app\finance\model;
|
||||
use think\model;
|
||||
use think\facade\Db;
|
||||
class Expense extends Model
|
||||
{
|
||||
/**
|
||||
* 获取分页列表
|
||||
* @param $where
|
||||
* @param $param
|
||||
*/
|
||||
public function datalist($param=[],$where=[],$whereOr=[])
|
||||
{
|
||||
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
|
||||
$order = empty($param['order']) ? 'id desc' : $param['order'];
|
||||
try {
|
||||
$list = self::where($where)
|
||||
->where(function ($query) use($whereOr) {
|
||||
if (!empty($whereOr)){
|
||||
$query->whereOr($whereOr);
|
||||
}
|
||||
})
|
||||
->order($order)
|
||||
->paginate(['list_rows'=> $rows])
|
||||
->each(function ($item, $key){
|
||||
$item->check_status_str = check_status_name($item->check_status);
|
||||
$item->income_month_str = empty($item->income_month) ? '-' : date('Y-m', $item->income_month);
|
||||
$item->expense_time = empty($item->expense_time) ? '-' : date('Y-m-d', $item->expense_time);
|
||||
$item->admin_name = Db::name('Admin')->where(['id' => $item->admin_id])->value('name');
|
||||
$item->department = Db::name('Department')->where(['id' => $item->did])->value('title');
|
||||
$item->create_time = to_date($item->create_time);
|
||||
$item['check_user'] = '-';
|
||||
if($item['check_status']==1 && !empty($item['check_uids'])){
|
||||
$check_user = Db::name('Admin')->where('id','in',$item['check_uids'])->column('name');
|
||||
$item['check_user'] = implode(',',$check_user);
|
||||
}
|
||||
if($item->pay_admin_id>0){
|
||||
$item->pay_name = Db::name('Admin')->where(['id' => $item->pay_admin_id])->value('name');
|
||||
$item->pay_time = date('Y-m-d H:i', $item->pay_time);
|
||||
}
|
||||
else{
|
||||
$item->pay_name='-';
|
||||
$item->pay_time='-';
|
||||
}
|
||||
});
|
||||
return $list;
|
||||
} catch(\Exception $e) {
|
||||
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
|
||||
}
|
||||
}
|
||||
|
||||
//更新冲帐
|
||||
public function update_loan($id)
|
||||
{
|
||||
$balance_cost = Db::name('Expense')->where(['delete_time'=>0,'loan_id'=>$id])->sum('balance_cost');
|
||||
$loan = Db::name('Loan')->where('id',$id)->find();
|
||||
if($balance_cost*100 == $loan['cost']*100){
|
||||
Db::name('Loan')->where('id',$id)->update(['balance_cost'=>$balance_cost,'balance_status'=>2,'back_status'=>2]);
|
||||
}
|
||||
if($balance_cost*100 < $loan['cost']*100 && $balance_cost*100>0){
|
||||
Db::name('Loan')->where('id',$id)->update(['balance_cost'=>$balance_cost,'balance_status'=>1,'back_status'=>0]);
|
||||
}
|
||||
if($balance_cost == 0){
|
||||
Db::name('Loan')->where('id',$id)->update(['balance_cost'=>$balance_cost,'balance_status'=>0,'back_status'=>0]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加数据
|
||||
* @param $param
|
||||
*/
|
||||
public function add($param)
|
||||
{
|
||||
$insertId = 0;
|
||||
try {
|
||||
$param['create_time'] = time();
|
||||
$insertId = self::strict(false)->field(true)->insertGetId($param);
|
||||
//相报销选项多个数组;
|
||||
$amountData = isset($param['amount']) ? $param['amount'] : '';
|
||||
$remarksData = isset($param['remarks']) ? $param['remarks'] : '';
|
||||
$cateData = isset($param['cate_id']) ? $param['cate_id'] : '';
|
||||
$idData = isset($param['expense_id']) ? $param['expense_id'] : 0;
|
||||
if ($amountData) {
|
||||
foreach ($amountData as $key => $value) {
|
||||
if (!$value) {
|
||||
continue;
|
||||
}
|
||||
$data = [];
|
||||
$data['id'] = $idData[$key];
|
||||
$data['exid'] = $insertId;
|
||||
$data['admin_id'] = $param['admin_id'];
|
||||
$data['amount'] = $amountData[$key];
|
||||
$data['cate_id'] = $cateData[$key];
|
||||
$data['remarks'] = $remarksData[$key];
|
||||
if ($data['id'] > 0) {
|
||||
$data['update_time'] = time();
|
||||
$resa = Db::name('ExpenseInterfix')->strict(false)->field(true)->update($data);
|
||||
} else {
|
||||
$data['create_time'] = time();
|
||||
$eid = Db::name('ExpenseInterfix')->strict(false)->field(true)->insertGetId($data);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!empty($param['loan_id'])){
|
||||
$this->update_loan($param['loan_id']);
|
||||
}
|
||||
add_log('add', $insertId, $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$insertId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑信息
|
||||
* @param $param
|
||||
*/
|
||||
public function edit($param)
|
||||
{
|
||||
try {
|
||||
$param['update_time'] = time();
|
||||
$old_loan_id = self::where('id', $param['id'])->value('loan_id');
|
||||
self::where('id', $param['id'])->strict(false)->field(true)->update($param);
|
||||
//相报销选项多个数组;
|
||||
$amountData = isset($param['amount']) ? $param['amount'] : '';
|
||||
$remarksData = isset($param['remarks']) ? $param['remarks'] : '';
|
||||
$cateData = isset($param['cate_id']) ? $param['cate_id'] : '';
|
||||
$idData = isset($param['expense_id']) ? $param['expense_id'] : 0;
|
||||
if ($amountData) {
|
||||
foreach ($amountData as $key => $value) {
|
||||
if (!$value) {
|
||||
continue;
|
||||
}
|
||||
$data = [];
|
||||
$data['id'] = $idData[$key];
|
||||
$data['exid'] = $param['id'];
|
||||
$data['admin_id'] = $param['admin_id'];
|
||||
$data['amount'] = $amountData[$key];
|
||||
$data['cate_id'] = $cateData[$key];
|
||||
$data['remarks'] = $remarksData[$key];
|
||||
if ($data['id'] > 0) {
|
||||
$data['update_time'] = time();
|
||||
$resa = Db::name('ExpenseInterfix')->strict(false)->field(true)->update($data);
|
||||
} else {
|
||||
$data['create_time'] = time();
|
||||
$eid = Db::name('ExpenseInterfix')->strict(false)->field(true)->insertGetId($data);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!empty($param['loan_id'])){
|
||||
$this->update_loan($param['loan_id']);
|
||||
}
|
||||
if(!empty($old_loan_id)){
|
||||
$this->update_loan($old_loan_id);
|
||||
}
|
||||
add_log('edit', $param['id'], $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$param['id']]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据id获取信息
|
||||
* @param $id
|
||||
*/
|
||||
public function getById($id)
|
||||
{
|
||||
$info = self::find($id);
|
||||
$info['income_month_str'] = to_date($info['income_month'],'Y-m');
|
||||
$info['expense_time'] = empty($info['expense_time']) ? '-' : date('Y-m-d', $info['expense_time']);
|
||||
$info['admin_name'] = Db::name('Admin')->where(['id' => $info['admin_id']])->value('name');
|
||||
$info['department'] = Db::name('Department')->where(['id' => $info['did']])->value('title');
|
||||
if ($info['pay_time'] > 0) {
|
||||
$info['pay_time'] = date('Y-m-d H:i:s', $info['pay_time']);
|
||||
$info['pay_admin'] = Db::name('Admin')->where(['id' => $info['pay_admin_id']])->value('name');
|
||||
}
|
||||
else{
|
||||
$info['pay_time'] = '-';
|
||||
}
|
||||
if ($info['project_id'] > 0) {
|
||||
$info['ptname'] = Db::name('Project')->where(['id' => $info['project_id']])->value('name');
|
||||
}
|
||||
else{
|
||||
$info['ptname'] = '';
|
||||
}
|
||||
if ($info['subject_id'] > 0) {
|
||||
$info['subject_name'] = Db::name('Enterprise')->where(['id' => $info['subject_id']])->value('title');
|
||||
}
|
||||
$info['list'] = Db::name('ExpenseInterfix')
|
||||
->field('a.*,c.title as cate_title')
|
||||
->alias('a')
|
||||
->join('ExpenseCate c', 'a.cate_id = c.id','LEFT')
|
||||
->where(['a.exid' => $info['id']])
|
||||
->select();
|
||||
if(!empty($info['file_ids'])){
|
||||
$file_array = Db::name('File')->where('id','in',$info['file_ids'])->select();
|
||||
$info['file_array'] = $file_array;
|
||||
}
|
||||
return $info;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除信息
|
||||
* @param $id
|
||||
* @param $type
|
||||
|
||||
* @return array
|
||||
*/
|
||||
public function delById($id,$type=0)
|
||||
{
|
||||
if($type==0){
|
||||
//逻辑删除
|
||||
try {
|
||||
$param['delete_time'] = time();
|
||||
self::where('id', $id)->update(['delete_time'=>time()]);
|
||||
$loan_id = self::where('id', $id)->value('loan_id');
|
||||
if($loan_id>0){
|
||||
update_loan($loan_id);
|
||||
}
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
else{
|
||||
//物理删除
|
||||
try {
|
||||
self::destroy($id);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
namespace app\finance\model;
|
||||
use think\model;
|
||||
use think\facade\Db;
|
||||
class ExpenseCate extends Model
|
||||
{
|
||||
/**
|
||||
* 获取分页列表
|
||||
* @param $where
|
||||
* @param $param
|
||||
*/
|
||||
public function datalist($where, $param)
|
||||
{
|
||||
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
|
||||
$order = empty($param['order']) ? 'id desc' : $param['order'];
|
||||
try {
|
||||
$list = self::where($where)->order($order)->paginate(['list_rows'=> $rows]);
|
||||
return $list;
|
||||
} catch(\Exception $e) {
|
||||
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加数据
|
||||
* @param $param
|
||||
*/
|
||||
public function add($param)
|
||||
{
|
||||
$insertId = 0;
|
||||
try {
|
||||
$param['create_time'] = time();
|
||||
$insertId = self::strict(false)->field(true)->insertGetId($param);
|
||||
add_log('add', $insertId, $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$insertId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑信息
|
||||
* @param $param
|
||||
*/
|
||||
public function edit($param)
|
||||
{
|
||||
try {
|
||||
$param['update_time'] = time();
|
||||
self::where('id', $param['id'])->strict(false)->field(true)->update($param);
|
||||
add_log('edit', $param['id'], $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$param['id']]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据id获取信息
|
||||
* @param $id
|
||||
*/
|
||||
public function getById($id)
|
||||
{
|
||||
$info = self::find($id);
|
||||
return $info;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除信息
|
||||
* @param $id
|
||||
* @param $type
|
||||
* @return array
|
||||
*/
|
||||
public function delById($id,$type=0)
|
||||
{
|
||||
if($type==0){
|
||||
//逻辑删除
|
||||
try {
|
||||
$param['delete_time'] = time();
|
||||
self::where('id', $id)->update(['delete_time'=>time()]);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
else{
|
||||
//物理删除
|
||||
try {
|
||||
self::destroy($id);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,154 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
namespace app\finance\model;
|
||||
use think\model;
|
||||
use think\facade\Db;
|
||||
class Invoice extends Model
|
||||
{
|
||||
/**
|
||||
* 获取分页列表
|
||||
* @param $where
|
||||
* @param $param
|
||||
*/
|
||||
public function datalist($param=[],$where=[],$whereOr=[])
|
||||
{
|
||||
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
|
||||
$order = empty($param['order']) ? 'id desc' : $param['order'];
|
||||
try {
|
||||
$list = self::where($where)
|
||||
->where(function ($query) use($whereOr) {
|
||||
if (!empty($whereOr)){
|
||||
$query->whereOr($whereOr);
|
||||
}
|
||||
})
|
||||
->order($order)
|
||||
->paginate(['list_rows'=> $rows])
|
||||
->each(function ($item, $key){
|
||||
$item->check_status_str = check_status_name($item->check_status);
|
||||
$item->admin_name = Db::name('Admin')->where('id',$item->admin_id)->value('name');
|
||||
$item->department = Db::name('Department')->where(['id' => $item->did])->value('title');
|
||||
$item->create_time = to_date($item->create_time);
|
||||
$item['check_user'] = '-';
|
||||
if($item['check_status']==1 && !empty($item['check_uids'])){
|
||||
$check_user = Db::name('Admin')->where('id','in',$item['check_uids'])->column('name');
|
||||
$item['check_user'] = implode(',',$check_user);
|
||||
}
|
||||
if($item->open_admin_id>0){
|
||||
$item->open_name = Db::name('Admin')->where(['id' => $item->open_admin_id])->value('name');
|
||||
$item->open_time = date('Y-m-d', $item->open_time);
|
||||
}
|
||||
else{
|
||||
$item->open_name='-';
|
||||
$item->open_time='';
|
||||
$item->code='';
|
||||
}
|
||||
if($item->enter_time>0){
|
||||
$item->enter_time = date('Y-m-d', $item->enter_time);
|
||||
}
|
||||
else{
|
||||
$item->enter_time='-';
|
||||
}
|
||||
});
|
||||
return $list;
|
||||
} catch(\Exception $e) {
|
||||
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加数据
|
||||
* @param $param
|
||||
*/
|
||||
public function add($param)
|
||||
{
|
||||
$insertId = 0;
|
||||
try {
|
||||
$param['create_time'] = time();
|
||||
$insertId = self::strict(false)->field(true)->insertGetId($param);
|
||||
add_log('add', $insertId, $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$insertId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑信息
|
||||
* @param $param
|
||||
*/
|
||||
public function edit($param)
|
||||
{
|
||||
try {
|
||||
$param['update_time'] = time();
|
||||
self::where('id', $param['id'])->strict(false)->field(true)->update($param);
|
||||
add_log('edit', $param['id'], $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$param['id']]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据id获取信息
|
||||
* @param $id
|
||||
*/
|
||||
public function getById($id)
|
||||
{
|
||||
$info = self::find($id);
|
||||
$info['admin_name'] = Db::name('Admin')->where(['id' => $info['admin_id']])->value('name');
|
||||
$info['department'] = Db::name('Department')->where(['id' => $info['did']])->value('title');
|
||||
$info['subject'] = Db::name('Enterprise')->where(['id' =>$info['invoice_subject']])->value('title');
|
||||
if($info['contract_id']>0){
|
||||
$info['contract_name'] = Db::name('Contract')->where('id',$info['contract_id'])->value('name');
|
||||
}
|
||||
if($info['project_id']>0){
|
||||
$info['project_name'] = Db::name('Project')->where('id',$info['project_id'])->value('name');
|
||||
}
|
||||
if(!empty($info['file_ids'])){
|
||||
$file_array = Db::name('File')->where('id','in',$info['file_ids'])->select();
|
||||
$info['file_array'] = $file_array;
|
||||
}
|
||||
return $info;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除信息
|
||||
* @param $id
|
||||
* @param $type
|
||||
* @return array
|
||||
*/
|
||||
public function delById($id,$type=0)
|
||||
{
|
||||
if($type==0){
|
||||
//逻辑删除
|
||||
try {
|
||||
$param['delete_time'] = time();
|
||||
self::where('id', $id)->update(['delete_time'=>time()]);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
else{
|
||||
//物理删除
|
||||
try {
|
||||
self::destroy($id);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
namespace app\finance\model;
|
||||
use think\Model;
|
||||
use think\facade\Db;
|
||||
class InvoiceIncome extends Model
|
||||
{
|
||||
public function datalist($param,$where)
|
||||
{
|
||||
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
|
||||
$order = empty($param['order']) ? 'id desc' : $param['order'];
|
||||
try {
|
||||
$list = self::where($where)
|
||||
->order($order)
|
||||
->paginate(['list_rows'=> $rows])
|
||||
->each(function ($item, $key){
|
||||
$item['admin_name'] = Db::name('Admin')->where('id',$item['admin_id'])->value('name');
|
||||
$item['enter_time'] = date('Y-m-d',$item['enter_time']);
|
||||
$item['code'] = Db::name('Invoice')->where('id',$item['invoice_id'])->value('code');
|
||||
$item['create_time'] = to_date($item['create_time']);
|
||||
});
|
||||
return $list;
|
||||
} catch(\Exception $e) {
|
||||
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,168 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
namespace app\finance\model;
|
||||
use think\model;
|
||||
use think\facade\Db;
|
||||
class Loan extends Model
|
||||
{
|
||||
/**
|
||||
* 获取分页列表
|
||||
* @param $where
|
||||
* @param $param
|
||||
*/
|
||||
public function datalist($param=[],$where=[],$whereOr=[])
|
||||
{
|
||||
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
|
||||
$order = empty($param['order']) ? 'id desc' : $param['order'];
|
||||
try {
|
||||
$list = self::where($where)
|
||||
->where(function ($query) use($whereOr) {
|
||||
if (!empty($whereOr)){
|
||||
$query->whereOr($whereOr);
|
||||
}
|
||||
})
|
||||
->order($order)
|
||||
->paginate(['list_rows'=> $rows])
|
||||
->each(function ($item, $key){
|
||||
$item->check_status_str = check_status_name($item->check_status);
|
||||
$item->loan_time = to_date($item->loan_time,'Y-m-d');
|
||||
$item->admin_name = Db::name('Admin')->where(['id' => $item->admin_id])->value('name');
|
||||
$item->department = Db::name('Department')->where(['id' => $item->did])->value('title');
|
||||
$item->create_time = to_date($item->create_time);
|
||||
$item->plan_time = to_date($item->plan_time,'Y-m-d');
|
||||
$item->delay = count_days(date("Y-m-d"),$item->plan_time);
|
||||
$item['check_user'] = '-';
|
||||
if($item['check_status']==1 && !empty($item['check_uids'])){
|
||||
$check_user = Db::name('Admin')->where('id','in',$item['check_uids'])->column('name');
|
||||
$item['check_user'] = implode(',',$check_user);
|
||||
}
|
||||
if($item->pay_admin_id>0){
|
||||
$item->pay_name = Db::name('Admin')->where(['id' => $item->pay_admin_id])->value('name');
|
||||
$item->pay_time = date('Y-m-d H:i', $item->pay_time);
|
||||
}
|
||||
else{
|
||||
$item->pay_name='-';
|
||||
$item->pay_time='-';
|
||||
}
|
||||
});
|
||||
return $list;
|
||||
} catch(\Exception $e) {
|
||||
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加数据
|
||||
* @param $param
|
||||
*/
|
||||
public function add($param)
|
||||
{
|
||||
$insertId = 0;
|
||||
try {
|
||||
$param['create_time'] = time();
|
||||
$insertId = self::strict(false)->field(true)->insertGetId($param);
|
||||
add_log('add', $insertId, $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$insertId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑信息
|
||||
* @param $param
|
||||
*/
|
||||
public function edit($param)
|
||||
{
|
||||
try {
|
||||
$param['update_time'] = time();
|
||||
self::where('id', $param['id'])->strict(false)->field(true)->update($param);
|
||||
add_log('edit', $param['id'], $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$param['id']]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据id获取信息
|
||||
* @param $id
|
||||
*/
|
||||
public function getById($id)
|
||||
{
|
||||
$info = self::find($id);
|
||||
$info['loan_time'] = empty($info['loan_time']) ? '-' : date('Y-m-d', $info['loan_time']);
|
||||
$info['admin_name'] = Db::name('Admin')->where(['id' => $info['admin_id']])->value('name');
|
||||
$info['department'] = Db::name('Department')->where(['id' => $info['did']])->value('title');
|
||||
if ($info['pay_time'] > 0) {
|
||||
$info['pay_time'] = date('Y-m-d H:i:s', $info['pay_time']);
|
||||
$info['pay_admin'] = Db::name('Admin')->where(['id' => $info['pay_admin_id']])->value('name');
|
||||
}
|
||||
else{
|
||||
$info['pay_time'] = '-';
|
||||
$info['pay_admin'] = '-';
|
||||
}
|
||||
if ($info['back_time'] > 0) {
|
||||
$info['back_time'] = date('Y-m-d H:i:s', $info['back_time']);
|
||||
$info['back_admin'] = Db::name('Admin')->where(['id' => $info['back_admin_id']])->value('name');
|
||||
}
|
||||
else{
|
||||
$info['back_time'] = '-';
|
||||
$info['back_admin'] = '-';
|
||||
}
|
||||
if ($info['project_id'] > 0) {
|
||||
$info['ptname'] = Db::name('Project')->where(['id' => $info['project_id']])->value('name');
|
||||
}
|
||||
else{
|
||||
$info['ptname'] = '';
|
||||
}
|
||||
if ($info['subject_id'] > 0) {
|
||||
$info['subject_name'] = Db::name('Enterprise')->where(['id' => $info['subject_id']])->value('title');
|
||||
}
|
||||
$file_array = Db::name('File')->where('id','in',$info['file_ids'])->select();
|
||||
$info['file_array'] = $file_array;
|
||||
return $info;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除信息
|
||||
* @param $id
|
||||
* @param $type
|
||||
|
||||
* @return array
|
||||
*/
|
||||
public function delById($id,$type=0)
|
||||
{
|
||||
if($type==0){
|
||||
//逻辑删除
|
||||
try {
|
||||
$param['delete_time'] = time();
|
||||
self::where('id', $id)->update(['delete_time'=>time()]);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
else{
|
||||
//物理删除
|
||||
try {
|
||||
self::destroy($id);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,154 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
namespace app\finance\model;
|
||||
use think\model;
|
||||
use think\facade\Db;
|
||||
class Ticket extends Model
|
||||
{
|
||||
/**
|
||||
* 获取分页列表
|
||||
* @param $where
|
||||
* @param $param
|
||||
*/
|
||||
public function datalist($param=[],$where=[],$whereOr=[])
|
||||
{
|
||||
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
|
||||
$order = empty($param['order']) ? 'id desc' : $param['order'];
|
||||
try {
|
||||
$list = self::where($where)
|
||||
->where(function ($query) use($whereOr) {
|
||||
if (!empty($whereOr)){
|
||||
$query->whereOr($whereOr);
|
||||
}
|
||||
})
|
||||
->order($order)
|
||||
->paginate(['list_rows'=> $rows])
|
||||
->each(function ($item, $key){
|
||||
$item->check_status_str = check_status_name($item->check_status);
|
||||
$item->admin_name = Db::name('Admin')->where('id',$item->admin_id)->value('name');
|
||||
$item->department = Db::name('Department')->where(['id' => $item->did])->value('title');
|
||||
$item->supplier_name = Db::name('Supplier')->where(['id' => $item->supplier_id])->value('title');
|
||||
$item->create_time = to_date($item->create_time);
|
||||
$item['check_user'] = '-';
|
||||
if($item['check_status']==1 && !empty($item['check_uids'])){
|
||||
$check_user = Db::name('Admin')->where('id','in',$item['check_uids'])->column('name');
|
||||
$item['check_user'] = implode(',',$check_user);
|
||||
}
|
||||
$item->open_time = date('Y-m-d', $item->open_time);
|
||||
if($item->pay_time>0){
|
||||
$item->pay_time = date('Y-m-d', $item->pay_time);
|
||||
}
|
||||
else{
|
||||
$item->pay_time='-';
|
||||
}
|
||||
});
|
||||
return $list;
|
||||
} catch(\Exception $e) {
|
||||
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加数据
|
||||
* @param $param
|
||||
*/
|
||||
public function add($param)
|
||||
{
|
||||
$insertId = 0;
|
||||
try {
|
||||
$param['create_time'] = time();
|
||||
$insertId = self::strict(false)->field(true)->insertGetId($param);
|
||||
add_log('add', $insertId, $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$insertId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑信息
|
||||
* @param $param
|
||||
*/
|
||||
public function edit($param)
|
||||
{
|
||||
try {
|
||||
$param['update_time'] = time();
|
||||
self::where('id', $param['id'])->strict(false)->field(true)->update($param);
|
||||
add_log('edit', $param['id'], $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$param['id']]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据id获取信息
|
||||
* @param $id
|
||||
*/
|
||||
public function getById($id)
|
||||
{
|
||||
$info = self::find($id);
|
||||
$info['admin_name'] = Db::name('Admin')->where(['id' => $info['admin_id']])->value('name');
|
||||
$info['department'] = Db::name('Department')->where(['id' => $info['did']])->value('title');
|
||||
$info['subject'] = Db::name('Enterprise')->where(['id' =>$info['invoice_subject']])->value('title');
|
||||
$info['supplier_name'] = Db::name('Supplier')->where(['id' => $info['supplier_id']])->value('title');
|
||||
if($info['purchase_id']>0){
|
||||
$info['purchase_name'] = Db::name('Purchase')->where('id',$info['purchase_id'])->value('name');
|
||||
}
|
||||
if($info['project_id']>0){
|
||||
$info['project_name'] = Db::name('Project')->where('id',$info['project_id'])->value('name');
|
||||
}
|
||||
if($info['open_time']>0){
|
||||
$info['open_time'] = date('Y-m-d',$info['open_time']);
|
||||
}
|
||||
else{
|
||||
$info['open_time']='';
|
||||
}
|
||||
if(!empty($info['file_ids'])){
|
||||
$file_array = Db::name('File')->where('id','in',$info['file_ids'])->select();
|
||||
$info['file_array'] = $file_array;
|
||||
}
|
||||
return $info;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除信息
|
||||
* @param $id
|
||||
* @param $type
|
||||
* @return array
|
||||
*/
|
||||
public function delById($id,$type=0)
|
||||
{
|
||||
if($type==0){
|
||||
//逻辑删除
|
||||
try {
|
||||
$param['delete_time'] = time();
|
||||
self::where('id', $id)->update(['delete_time'=>time()]);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
else{
|
||||
//物理删除
|
||||
try {
|
||||
self::destroy($id);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
namespace app\finance\model;
|
||||
use think\Model;
|
||||
use think\facade\Db;
|
||||
class TicketPayment extends Model
|
||||
{
|
||||
public function datalist($param,$where)
|
||||
{
|
||||
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
|
||||
$order = empty($param['order']) ? 'id desc' : $param['order'];
|
||||
try {
|
||||
$list = self::where($where)
|
||||
->order($order)
|
||||
->paginate(['list_rows'=> $rows])
|
||||
->each(function ($item, $key){
|
||||
$item['admin_name'] = Db::name('Admin')->where('id',$item['admin_id'])->value('name');
|
||||
$item['pay_time'] = date('Y-m-d',$item['pay_time']);
|
||||
$item['code'] = Db::name('Ticket')->where('id',$item['ticket_id'])->value('code');
|
||||
$item['create_time'] = to_date($item['create_time']);
|
||||
});
|
||||
return $list;
|
||||
} catch(\Exception $e) {
|
||||
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
namespace app\finance\validate;
|
||||
use think\Validate;
|
||||
use think\facade\Db;
|
||||
|
||||
class CostcateValidate extends Validate
|
||||
{
|
||||
// 自定义验证规则
|
||||
protected function checkOne($value,$rule,$data=[])
|
||||
{
|
||||
$id = isset($data['id'])?$data['id']:0;
|
||||
$count = Db::name('CostCate')->where([['title','=',$data['title']],['id','<>',$id],['delete_time','=',0]])->count();
|
||||
return $count == 0 ? true : false;
|
||||
}
|
||||
|
||||
protected $rule = [
|
||||
'title' => 'require|checkOne',
|
||||
'id' => 'require',
|
||||
];
|
||||
|
||||
protected $message = [
|
||||
'title.require' => '名称不能为空',
|
||||
'title.checkOne' => '同样的名称已经存在',
|
||||
'id.require' => '缺少更新条件',
|
||||
];
|
||||
|
||||
protected $scene = [
|
||||
'add' => ['title'],
|
||||
'edit' => ['title', 'id'],
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
namespace app\finance\validate;
|
||||
use think\Validate;
|
||||
use think\facade\Db;
|
||||
|
||||
class ExpenseValidate extends Validate
|
||||
{
|
||||
// 自定义验证规则
|
||||
protected function checkOne($value,$rule,$data=[])
|
||||
{
|
||||
$id = isset($data['id'])?$data['id']:0;
|
||||
$count = Db::name('Expense')->where([['code','=',$data['code']],['id','<>',$id],['delete_time','=',0]])->count();
|
||||
return $count == 0 ? true : false;
|
||||
}
|
||||
|
||||
protected $rule = [
|
||||
'code' => 'require|checkOne',
|
||||
'id' => 'require',
|
||||
];
|
||||
|
||||
protected $message = [
|
||||
'code.require' => '报销凭证编号不能为空',
|
||||
'code.checkOne' => '同样的报销凭证编号已经存在',
|
||||
'id.require' => '缺少更新条件',
|
||||
];
|
||||
|
||||
protected $scene = [
|
||||
'add' => ['code'],
|
||||
'edit' => ['code', 'id'],
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
namespace app\finance\validate;
|
||||
use think\Validate;
|
||||
use think\facade\Db;
|
||||
|
||||
class ExpensecateValidate extends Validate
|
||||
{
|
||||
// 自定义验证规则
|
||||
protected function checkOne($value,$rule,$data=[])
|
||||
{
|
||||
$id = isset($data['id'])?$data['id']:0;
|
||||
$count = Db::name('ExpenseCate')->where([['title','=',$data['title']],['id','<>',$id],['delete_time','=',0]])->count();
|
||||
return $count == 0 ? true : false;
|
||||
}
|
||||
|
||||
protected $rule = [
|
||||
'title' => 'require|checkOne',
|
||||
'id' => 'require',
|
||||
];
|
||||
|
||||
protected $message = [
|
||||
'title.require' => '名称不能为空',
|
||||
'title.checkOne' => '同样的名称已经存在',
|
||||
'id.require' => '缺少更新条件',
|
||||
];
|
||||
|
||||
protected $scene = [
|
||||
'add' => ['title'],
|
||||
'edit' => ['title', 'id'],
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
namespace app\finance\validate;
|
||||
use think\Validate;
|
||||
use think\facade\Db;
|
||||
|
||||
class InvoiceValidate extends Validate
|
||||
{
|
||||
protected $rule = [
|
||||
'amount' => 'require|float',
|
||||
'invoice_type' => 'require',
|
||||
'invoice_subject' => 'require',
|
||||
'id' => 'require'
|
||||
];
|
||||
|
||||
protected $message = [
|
||||
'amount.require' => '开票金额不能为空',
|
||||
'amount.number' => '开票金额只能为数字',
|
||||
'id.require' => '缺少更新条件',
|
||||
'invoice_type.require' => '请选择开票类型',
|
||||
'invoice_subject.require' => '请选择开票主体',
|
||||
];
|
||||
|
||||
protected $scene = [
|
||||
'add' => ['amount','invoice_subject'],
|
||||
'edit' => ['id', 'amount','invoice_subject']
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
namespace app\finance\validate;
|
||||
use think\Validate;
|
||||
use think\facade\Db;
|
||||
|
||||
class LoanValidate extends Validate
|
||||
{
|
||||
// 自定义验证规则
|
||||
protected function checkOne($value,$rule,$data=[])
|
||||
{
|
||||
$id = isset($data['id'])?$data['id']:0;
|
||||
$count = Db::name('Loan')->where([['title','=',$data['title']],['id','<>',$id],['delete_time','=',0]])->count();
|
||||
return $count == 0 ? true : false;
|
||||
}
|
||||
|
||||
protected $rule = [
|
||||
'title' => 'require|checkOne',
|
||||
'id' => 'require',
|
||||
];
|
||||
|
||||
protected $message = [
|
||||
'title.require' => '名称不能为空',
|
||||
'title.checkOne' => '同样的名称已经存在',
|
||||
'id.require' => '缺少更新条件',
|
||||
];
|
||||
|
||||
protected $scene = [
|
||||
'add' => ['title'],
|
||||
'edit' => ['title', 'id'],
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
namespace app\finance\validate;
|
||||
use think\Validate;
|
||||
use think\facade\Db;
|
||||
|
||||
class TicketValidate extends Validate
|
||||
{
|
||||
protected $rule = [
|
||||
'amount' => 'require',
|
||||
'invoice_subject' => 'require',
|
||||
'id' => 'require'
|
||||
];
|
||||
|
||||
protected $message = [
|
||||
'amount.require' => '发票金额不能为空',
|
||||
'id.require' => '缺少更新条件',
|
||||
'invoice_subject.require' => '请选择发票主体',
|
||||
];
|
||||
|
||||
protected $scene = [
|
||||
'add' => ['amount','invoice_subject'],
|
||||
'edit' => ['id', 'amount','invoice_subject']
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-3">费用类型</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">费用类型名称<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入费用类型名称" lay-reqText="请输入费用类型名称"class="layui-input" value="{$detail.title|default=''}">
|
||||
</td>
|
||||
<td class="layui-td-gray">排序</td>
|
||||
<td>
|
||||
<input type="text" name="sort" placeholder="请输入排序,数字" autocomplete="off" class="layui-input" value="{$detail.sort|default=''}">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-4">
|
||||
<input type="hidden" name="id" value="{$detail.id|default=0}"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
var moduleInit = ['tool'];
|
||||
|
||||
function gouguInit() {
|
||||
var form = layui.form, tool = layui.tool;
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/finance/costcate/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,124 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
|
||||
<div class="p-page">
|
||||
<table class="layui-hide" id="table_cost_cate" lay-filter="table_cost_cate"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm add-new" type="button">+ 添加费用类型</button>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var table = layui.table, tool = layui.tool;
|
||||
|
||||
layui.pageTable = table.render({
|
||||
elem: "#table_cost_cate"
|
||||
,toolbar: '#toolbarDemo'
|
||||
,url: "/finance/costcate/datalist"
|
||||
,page: false
|
||||
,limit: 999
|
||||
,cellMinWidth: 80
|
||||
,cols: [[
|
||||
{field:'id',width:80, title: 'ID号', align:'center'}
|
||||
,{field:'title',title: '类型名称'}
|
||||
,{field:'status', title: '状态',width:80,align:'center',templet: function(d){
|
||||
var html1='<span class="green">正常</span>';
|
||||
var html2='<span class="yellow">禁用</span>';
|
||||
if(d.status==1){
|
||||
return html1;
|
||||
}
|
||||
else{
|
||||
return html2;
|
||||
}
|
||||
}}
|
||||
,{width:100,title: '操作', align:'center',ignoreExport:true,templet: function(d){
|
||||
var html='';
|
||||
var btn='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">编辑</a>';
|
||||
var btn1='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="disable">禁用</a>';
|
||||
var btn2='<a class="layui-btn layui-btn-xs" lay-event="open">启用</a>';
|
||||
if(d.status==1){
|
||||
html = '<div class="layui-btn-group">'+btn+btn1+'</div>';
|
||||
}
|
||||
else{
|
||||
html = '<div class="layui-btn-group">'+btn+btn2+'</div>';
|
||||
}
|
||||
return html;
|
||||
}}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(table_cost_cate)',function (obj) {
|
||||
if(obj.event === 'edit'){
|
||||
add_cate(obj.data.id,obj.data.title);
|
||||
}
|
||||
if(obj.event === 'disable'){
|
||||
layer.confirm('确定要禁用该记录吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/finance/costcate/set", {id:obj.data.id,status: 0}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if(obj.event === 'open'){
|
||||
layer.confirm('确定要启用该记录吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/finance/costcate/set", {id:obj.data.id,status:1}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('body').on('click','.add-new',function(){
|
||||
add_cate(0,'');
|
||||
});
|
||||
|
||||
function add_cate(id,val){
|
||||
var title = '新增类型';
|
||||
if(id>0){
|
||||
title = '编辑类型';
|
||||
}
|
||||
layer.prompt({
|
||||
title: title,
|
||||
value: val,
|
||||
yes: function(index, layero) {
|
||||
// 获取文本框输入的值
|
||||
var value = layero.find(".layui-layer-input").val();
|
||||
if (value) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/finance/costcate/add", {id: id,title: value}, callback);
|
||||
layer.close(index);
|
||||
} else {
|
||||
layer.msg('请填写类型名称');
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,16 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<h3 class="pb-3">费用类型详情</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">费用类型名称</td>
|
||||
<td>{$detail.title|default=''}"></td>
|
||||
<td class="layui-td-gray">排序</td>
|
||||
<td>{$detail.sort|default=0}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
@@ -0,0 +1,168 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-4">
|
||||
<h3 class="pb-3">添加报销申请</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">报销员工</td>
|
||||
<td>{$user.name}</td>
|
||||
<td class="layui-td-gray">报销部门</td>
|
||||
<td>{$user.department}</td>
|
||||
<td class="layui-td-gray">报销主体</td>
|
||||
<td>
|
||||
<select name="subject_id" lay-verify="required" lay-reqText="请选择报销主体">
|
||||
<option value="">请选择报销主体</option>
|
||||
{volist name=":get_base_data('enterprise')" id="vo"}
|
||||
<option value="{$vo.id}">{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">凭证编号<font>*</font></td>
|
||||
<td><input type="text" name="code" value="{$codeno}" {eq name="$is_codeno" value="1"}readonly{/eq} lay-verify="required" placeholder="请输入报销凭证编号" lay-reqText="请填写报销凭证编号" class="layui-input" value=""></td>
|
||||
<td class="layui-td-gray">单据日期<font>*</font></td>
|
||||
<td><input type="text" class="layui-input tool-time" name="expense_time" lay-verify="required" placeholder="请选择原始单据日期" lay-reqText="请选择原始单据日期" readonly value="">
|
||||
</td>
|
||||
<td class="layui-td-gray">入账月份<font>*</font></td>
|
||||
<td><input type="text" class="layui-input tool-time" data-type="month" name="income_month" lay-verify="required" placeholder="请选择入账月份" lay-reqText="请选择入账月份" readonly value=""></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联项目</td>
|
||||
<td colspan="5">
|
||||
<input type="text" class="layui-input picker-oa" data-types="project" name="ptname" placeholder="请选择需要关联的项目" readonly value="">
|
||||
<input type="hidden" class="layui-input" name="project_id" value="0">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">冲抵借支</td>
|
||||
<td colspan="5">
|
||||
<input type="text" class="layui-input picker-oa" data-types="loan" name="loan" placeholder="请选择需要冲抵借支记录" readonly value="">
|
||||
<input type="hidden" class="layui-input" name="loan_id" value="0">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">报销选项<font>*</font></td>
|
||||
<td colspan="5">
|
||||
<table id="interfix" class="layui-table layui-table-min" style="margin:0;">
|
||||
<tr>
|
||||
<th width="100">报销金额</th>
|
||||
<th width="120">报销项目</th>
|
||||
<th>备注信息</th>
|
||||
<th width="60">操作</th>
|
||||
</tr>
|
||||
<tr class="more_interfix">
|
||||
<td><input type="text" name="amount[]" value="" class="layui-input" lay-verify="required|number" lay-reqText="请完善报销金额"></td>
|
||||
<td style="text-align:left">
|
||||
<select name="cate_id[]" lay-verify="required" lay-reqText="请选择报销项目">
|
||||
<option value="">请选择</option>
|
||||
{volist name="$expense_cate" id="vo"}
|
||||
<option value="{$vo.id}">{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td><input type="text" name="remarks[]" class="layui-input" value=""><input type="hidden" name="expense_id[]" class="layui-input" value="0"></td>
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" data-id="0" lay-event="del">删除</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-2">
|
||||
<button class="layui-btn layui-btn-sm" type="button" id="addInterfix">+ 报销选项</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<div class="layui-input-inline">附件</div>
|
||||
<div class="layui-input-inline"><button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button></div>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="file_ids" value="">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="checkBox" data-status="0" data-id="0" data-checkflowid="0" class="pt-3"></div>
|
||||
<div class="pt-4">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">保存并提交审核</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
<div id="selectTem" style="display:none;">
|
||||
<select name="cate_id[]" lay-verify="required" lay-reqText="请选择报销项目">
|
||||
<option value="">请选择</option>
|
||||
{volist name="$expense_cate" id="vo"}
|
||||
<option value="{$vo.id}">{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','oaPicker','uploadPlus','oaCheck'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,table=layui.table,uploadPlus = layui.uploadPlus,oaCheck = layui.oaCheck;
|
||||
//相关附件上传
|
||||
var attachment = new uploadPlus();
|
||||
//审批相关
|
||||
oaCheck.init({
|
||||
check_name:'expense',
|
||||
check_btn:0
|
||||
});
|
||||
//添加报销信息表格
|
||||
$('#addInterfix').on('click',function(){
|
||||
var html = '';
|
||||
var selectTem=$('#selectTem').html();
|
||||
html += '<tr class="more_interfix">\
|
||||
<td><input type="text" name="amount[]" class="layui-input" lay-verify="required|number" lay-reqText="请完善报销金额"></td>\
|
||||
<td style="text-align:left">'+selectTem+'</td>\
|
||||
<td><input type="text" name="remarks[]" class="layui-input"><input type="hidden" name="expense_id[]" class="layui-input" value="0"></td>\
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" data-id="0" lay-event="del">删除</a></td>\
|
||||
</tr>';
|
||||
$("#interfix").append(html).find('.tr-none').remove();
|
||||
form.render();
|
||||
});
|
||||
|
||||
$('#interfix').on('click', '[lay-event="del"]', function() {
|
||||
if($('.more_interfix').length<2){
|
||||
layer.msg('至少保留一个报销选项');
|
||||
return false;
|
||||
}
|
||||
$(this).parents(".more_interfix").remove();
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function(data){
|
||||
var interfix = $('.more_interfix');
|
||||
if(interfix.length <1 ){
|
||||
layer.msg('至少要保留一个报销选项');
|
||||
return false;
|
||||
}
|
||||
tool.ask('审核期间不能编辑修改,确定报销数据无误?', function(index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
let checkCallback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
data.field.check_name = 'expense';
|
||||
data.field.action_id = e.data.return_id;
|
||||
oaCheck.submit(data.field,checkCallback);
|
||||
}
|
||||
}
|
||||
tool.post("/finance/expense/add", data.field, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,214 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
{block name="style"}
|
||||
<style>
|
||||
.tab-5 .search-item{display:none;}
|
||||
</style>
|
||||
{/block}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
|
||||
<div class="p-page">
|
||||
<div class="layui-card border-x border-t" style="margin-bottom:0; box-shadow:0 0 0 0 rgb(5 32 96 / 0%)">
|
||||
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this">全部</li>
|
||||
<li>我申请的</li>
|
||||
<li>待我审批</li>
|
||||
<li>我已审批</li>
|
||||
<li>抄送我的</li>
|
||||
<li>已打款</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<form class="layui-form gg-form-bar border-x tab-0" id="barsearchform">
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="diff_time" placeholder="选择时间区间" readonly name="diff_time">
|
||||
</div>
|
||||
<div class="layui-input-inline search-item" style="width:120px;">
|
||||
<select name="check_status">
|
||||
<option value="">选择审批状态</option>
|
||||
{volist name=":get_check_status()" id="vo"}
|
||||
<option value="{$key}">{$vo}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline search-item" style="width:120px;">
|
||||
<select name="pay_status">
|
||||
<option value="">打款状态</option>
|
||||
<option value="0">未打款</option>
|
||||
<option value="1">已打款</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<input type="hidden" name="tab" value="0"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="table_expense" lay-filter="table_expense"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm tool-add" type="button" data-href="/finance/expense/add">+ 添加报销申请</button>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tablePlus','laydatePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus, tool = layui.tool, laydatePlus = layui.laydatePlus, element = layui.element;
|
||||
//tab切换
|
||||
element.on('tab(tab)', function(data){
|
||||
$('[name="tab"]').val(data.index);
|
||||
$("#barsearchform")[0].reset();
|
||||
$("#barsearchform").attr('class','layui-form gg-form-bar border-x tab-'+data.index);
|
||||
layui.pageTable.reload({where:{tab:data.index},page:{curr:1}});
|
||||
return false;
|
||||
});
|
||||
|
||||
//日期范围
|
||||
var diff_time = new laydatePlus({'target':'diff_time'});
|
||||
layui.pageTable = table.render({
|
||||
elem: "#table_expense"
|
||||
,toolbar: "#toolbarDemo"
|
||||
,title: '报销列表'
|
||||
,url: "/finance/expense/datalist"
|
||||
,page: true
|
||||
,limit: 20
|
||||
,cellMinWidth: 80
|
||||
,height: 'full-154'
|
||||
,cols: [[
|
||||
{
|
||||
field: 'id',
|
||||
title: 'ID号',
|
||||
align: 'center',
|
||||
width: 80
|
||||
}, {
|
||||
field: 'cost',
|
||||
title: '报销总金额(元)',
|
||||
align: 'right',
|
||||
width: 110,
|
||||
},{
|
||||
field:'check_status',title: '审批状态',width:110, align:'center',templet: function(d){
|
||||
var html = '<span class="check-status-color-'+d.check_status+'">『'+d.check_status_str+'』</span>';
|
||||
return html;
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'admin_name',
|
||||
title: '报销员工',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'department',
|
||||
title: '报销部门',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},{
|
||||
field: 'code',
|
||||
title: '报销凭证编号',
|
||||
width: 150,
|
||||
},{
|
||||
field: 'expense_time',
|
||||
title: '原始单据日期',
|
||||
align: 'center',
|
||||
width: 110
|
||||
},{
|
||||
field: 'income_month_str',
|
||||
title: '入账月份',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'create_time',
|
||||
title: '录入时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'check_user',
|
||||
title: '当前审核人'
|
||||
},{
|
||||
field: 'pay_status',
|
||||
title: '打款状态',
|
||||
align: 'center',
|
||||
width: 90,
|
||||
templet:function(d){
|
||||
var html='';
|
||||
if(d.check_status==2){
|
||||
html = '<span class="red">『未打款』</span>';
|
||||
if(d.pay_status==1){
|
||||
html = '<span class="green">『已打款』</span>';
|
||||
}
|
||||
}
|
||||
else{
|
||||
html='-';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'pay_name',
|
||||
title: '打款人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'pay_time',
|
||||
title: '打款时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
}, {
|
||||
field: 'right',
|
||||
fixed: 'right',
|
||||
title: '操作',
|
||||
width: 130,
|
||||
align: 'center',
|
||||
templet:function(d){
|
||||
var html='<div class="layui-btn-group">';
|
||||
var btn1='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</span>';
|
||||
var btn2='<span class="layui-btn layui-btn-xs" lay-event="edit">编辑</span>';
|
||||
var btn3='<span class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</span>';
|
||||
html+=btn1;
|
||||
if((d.check_status==0 || d.check_status==4) && d.admin_id==login_admin){
|
||||
html+=btn2+btn3;
|
||||
}
|
||||
html+='</div>';
|
||||
return html;
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
table.on('tool(table_expense)',function (obj) {
|
||||
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
|
||||
var data = obj.data;
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/finance/expense/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'edit') {
|
||||
tool.side("/finance/expense/add?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'del') {
|
||||
layer.confirm('确定要删除该内容吗?', { icon: 3, title: '提示' }, function (index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
obj.del();
|
||||
}
|
||||
}
|
||||
tool.delete("/finance/expense/del", { id: data.id }, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,198 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-3">编辑报销申请</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">报销员工</td>
|
||||
<td>{$detail.admin_name}</td>
|
||||
<td class="layui-td-gray">报销部门</td>
|
||||
<td>{$detail.department|default=''}</td>
|
||||
<td class="layui-td-gray">报销主体</td>
|
||||
<td>
|
||||
<select name="subject_id" lay-verify="required" lay-reqText="请选择报销主体">
|
||||
<option value="">请选择报销主体</option>
|
||||
{volist name=":get_base_data('enterprise')" id="vo"}
|
||||
<option value="{$vo.id}" {eq name="$detail.subject_id" value="$vo.id"} selected{/eq}>{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">凭证编号<font>*</font></td>
|
||||
<td><input type="text" name="code" autocomplete="off" {eq name="$is_codeno" value="1"}readonly{/eq} lay-verify="required" placeholder="报销凭证编号" lay-reqText="请填写报销凭证编号" class="layui-input" value="{$detail.code}"></td>
|
||||
<td class="layui-td-gray-2">原始单据日期<font>*</font></td>
|
||||
<td><input type="text" class="layui-input tool-time" id="expense_time" name="expense_time" lay-verify="required" placeholder="请选择原始单据日期" lay-reqText="请选择原始单据日期" readonly value="{$detail.expense_time}"></td>
|
||||
<td class="layui-td-gray">入账月份<font>*</font></td>
|
||||
<td><input type="text" class="layui-input tool-time" data-type="month" name="income_month" lay-verify="required" placeholder="请选择入账月份" lay-reqText="请选择入账月份" readonly value="{$detail.income_month_str}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联项目</td>
|
||||
<td colspan="5">
|
||||
<input type="text" class="layui-input picker-oa" name="ptname" data-types="project" placeholder="请选择需要关联的项目" readonly value="{$detail.ptname|default=""}">
|
||||
<input type="hidden" class="layui-input" name="project_id" value="{$detail.project_id}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">冲抵借支</td>
|
||||
<td colspan="5">
|
||||
<input type="text" class="layui-input picker-oa" data-types="loan" name="loan" placeholder="请选择需要冲抵借支记录" readonly value="{$detail.loan}">
|
||||
<input type="hidden" class="layui-input" name="loan_id" value="{$detail.loan_id}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">报销选项<font>*</font></td>
|
||||
<td colspan="5">
|
||||
<table id="interfix" class="layui-table layui-table-min" style="margin:0;">
|
||||
<tr>
|
||||
<th width="100">报销金额</th>
|
||||
<th width="120">报销类别</th>
|
||||
<th>备注信息</th>
|
||||
<th width="60">操作</th>
|
||||
</tr>
|
||||
{volist name="$detail.list" id="val"}
|
||||
<tr class="more_interfix">
|
||||
<td><input type="text" name="amount[]" value="{$val.amount}" class="layui-input" lay-verify="required|number" lay-reqText="请完善报销金额"></td>
|
||||
<td style="text-align:left">
|
||||
<select name="cate_id[]" lay-verify="required" lay-reqText="请选择报销项目">
|
||||
<option value="">请选择</option>
|
||||
{volist name="$expense_cate" id="vo"}
|
||||
<option value="{$vo.id}" {eq name="$vo.id" value="$val.cate_id"} selected{/eq}>{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td><input type="text" name="remarks[]" class="layui-input" value="{$val.remarks}"><input type="hidden" name="expense_id[]" class="layui-input" value="{$val.id}"></td>
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" data-id="{$val.id}" lay-event="del">删除</a></td>
|
||||
</tr>
|
||||
{/volist}
|
||||
</table>
|
||||
<div class="pt-2">
|
||||
<button class="layui-btn layui-btn-sm" type="button" id="addInterfix">+ 报销选项</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<div class="layui-input-inline">附件</div>
|
||||
<div class="layui-input-inline"><button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button></div>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" name="file_ids" data-type="file" value="{$detail.file_ids}">
|
||||
{notempty name="$detail.file_ids"}
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo)}</div>
|
||||
{/volist}
|
||||
{/notempty}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="checkBox" data-status="{$detail.check_status}" data-id="{$detail.id}" data-checkflowid="{$detail.check_flow_id}"></div>
|
||||
<div class="pt-4">
|
||||
<input name="id" id="id" type="hidden" value="{$detail.id}">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">保存并提交审核</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
<div id="selectTem" style="display:none;">
|
||||
<select name="cate_id[]" lay-verify="required" lay-reqText="请选择报销项目">
|
||||
<option value="">请选择</option>
|
||||
{volist name="$expense_cate" id="vo"}
|
||||
<option value="{$vo.id}">{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','oaPicker','uploadPlus','oaCheck'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,table=layui.table,uploadPlus = layui.uploadPlus,oaCheck = layui.oaCheck;
|
||||
//相关附件上传
|
||||
var attachment = new uploadPlus();
|
||||
//审批相关
|
||||
oaCheck.init({
|
||||
check_name:'expense',
|
||||
check_btn:0
|
||||
});
|
||||
//添加报销信息表格
|
||||
$('#addInterfix').on('click',function(){
|
||||
var html = '';
|
||||
var selectTem=$('#selectTem').html();
|
||||
html += '<tr class="more_interfix">\
|
||||
<td><input type="text" name="amount[]" class="layui-input" lay-verify="required|number" lay-reqText="请完善报销金额"></td>\
|
||||
<td style="text-align:left">'+selectTem+'</td>\
|
||||
<td><input type="text" name="remarks[]" class="layui-input"><input type="hidden" name="expense_id[]" class="layui-input" value="0"></td>\
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" data-id="0" lay-event="del">删除</a></td>\
|
||||
</tr>';
|
||||
$("#interfix").append(html).find('.tr-none').remove();
|
||||
form.render();
|
||||
});
|
||||
|
||||
$('#interfix').on('click', '[lay-event="del"]', function() {
|
||||
if($('.more_interfix').length<2){
|
||||
layer.msg('至少保留一个报销选项');
|
||||
return false;
|
||||
}
|
||||
var that=$(this);
|
||||
var _id = that.data('id');
|
||||
if(_id>0){
|
||||
layer.confirm('确定删除该报销数据项?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
$.ajax({
|
||||
url: "/finance/api/del_expense_interfix",
|
||||
type:'post',
|
||||
data: {id: _id},
|
||||
success: function(res) {
|
||||
layer.msg(res.msg);
|
||||
if (res.code == 0) {
|
||||
that.parents(".more_interfix").remove();
|
||||
}
|
||||
}
|
||||
})
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
else{
|
||||
that.parents(".more_interfix").remove();
|
||||
}
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function(data){
|
||||
var interfix = $('.more_interfix');
|
||||
if(interfix.length <1 ){
|
||||
layer.msg('至少要保留一个报销选项');
|
||||
return false;
|
||||
}
|
||||
tool.ask('审核期间不能编辑修改,确定报销数据无误?', function(index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
let checkCallback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
data.field.check_name = 'expense';
|
||||
data.field.action_id = e.data.return_id;
|
||||
oaCheck.submit(data.field,checkCallback);
|
||||
}
|
||||
}
|
||||
tool.post("/finance/expense/add", data.field, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,186 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<form class="layui-form gg-form-bar border-t border-x" id="barsearchform">
|
||||
<div class="layui-input-inline" style="width:100px;">
|
||||
<input type="text" class="layui-input picker-admin" placeholder="选择报销人员" readonly name="uname" value="">
|
||||
<input type="hidden" name="uid" value="0">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="diff_time" placeholder="选择入账月份区间" readonly name="diff_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:120px;">
|
||||
<select name="pay_status">
|
||||
<option value="">打款状态</option>
|
||||
<option value="0">未打款</option>
|
||||
<option value="1">已打款</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<h3 class="h3-title" style="height:32px;">报销记录</h3>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const auth = {$authExpense};
|
||||
const moduleInit = ['tool','tablePlus','laydatePlus','oaPicker'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,table = layui.tablePlus,tool=layui.tool, laydatePlus = layui.laydatePlus;
|
||||
//日期范围
|
||||
var diff_time = new laydatePlus({'target':'diff_time'});
|
||||
|
||||
layui.pageTable = table.render({
|
||||
elem: '#test',
|
||||
title: '报销记录列表',
|
||||
toolbar: '#toolbarDemo',
|
||||
url: "/finance/expense/record", //数据接口
|
||||
cellMinWidth: 80,
|
||||
page: true, //开启分页
|
||||
limit: 20,
|
||||
height: 'full-114',
|
||||
totalRow: true,
|
||||
cols: [
|
||||
[
|
||||
{
|
||||
field: 'id',
|
||||
title: 'ID号',
|
||||
align: 'center',
|
||||
width: 80,
|
||||
totalRowText: '<div style="text-align:right">合计</div>'
|
||||
},{
|
||||
field: 'cost',
|
||||
title: '报销总金额(元)',
|
||||
align: 'right',
|
||||
width: 110,
|
||||
totalRow: function (d) {return d.TOTAL_ROW.cost}
|
||||
},{
|
||||
field: 'pay_amount',
|
||||
title: '需打款金额(元)',
|
||||
align: 'right',
|
||||
width: 110,
|
||||
totalRow: function (d) {return d.TOTAL_ROW.cost}
|
||||
},{
|
||||
field: 'pay_status',
|
||||
title: '打款/确认状态',
|
||||
align: 'center',
|
||||
width: 110,
|
||||
templet:function(d){
|
||||
var status = '打款';
|
||||
if(d.pay_amount==0){
|
||||
status = '确认';
|
||||
}
|
||||
var html='<span class="red">『未'+status+'』</span>';
|
||||
if(d.pay_status==1){
|
||||
html='<span class="yellow">『已'+status+'』</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'admin_name',
|
||||
title: '报销人员',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'department',
|
||||
title: '报销部门',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},{
|
||||
field: 'code',
|
||||
title: '报销凭证编号',
|
||||
minWidth: 130,
|
||||
},{
|
||||
field: 'expense_time',
|
||||
title: '原始单据日期',
|
||||
align: 'center',
|
||||
width: 110
|
||||
},{
|
||||
field: 'income_month_str',
|
||||
title: '入账月份',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'create_time',
|
||||
title: '录入时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'pay_name',
|
||||
title: '打款/确认人',
|
||||
align: 'center',
|
||||
width: 110
|
||||
},{
|
||||
field: 'pay_time',
|
||||
title: '打款/确认时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
}, {
|
||||
field: 'right',
|
||||
fixed: 'right',
|
||||
title: '操作',
|
||||
width: 136,
|
||||
align: 'center',
|
||||
templet:function(d){
|
||||
var status = '打款';
|
||||
if(d.pay_amount==0){
|
||||
status = '确认';
|
||||
}
|
||||
var html='<div class="layui-btn-group">';
|
||||
var btn1='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</span>';
|
||||
var btn2='<span class="layui-btn layui-btn-warm layui-btn-xs" lay-event="open">标记为已'+status+'</span>';
|
||||
html+=btn1;
|
||||
if(d.pay_status==0 && auth==1){
|
||||
html+=btn2;
|
||||
}
|
||||
html+='</div>';
|
||||
return html;
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
//监听行工具事件
|
||||
table.on('tool(test)', function(obj) {
|
||||
var data = obj.data;
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/finance/expense/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if(obj.event === 'open'){
|
||||
let tips = '确定标记为已打款?';
|
||||
if(data.pay_amount==0){
|
||||
tips = '确定标记为已确认?';
|
||||
}
|
||||
layer.confirm(tips, {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/finance/api/topay", {id: data.id}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,115 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="layui-form p-page">
|
||||
<h3 class="pb-3">报销详情</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">凭证编号</td>
|
||||
<td>{$detail.code}</td>
|
||||
<td class="layui-td-gray">入账月份</td>
|
||||
<td>{$detail.income_month_str}</td>
|
||||
<td class="layui-td-gray-2">原始单据日期</td>
|
||||
<td>{$detail.expense_time}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">报销主体</td>
|
||||
<td colspan="5">{$detail.subject_name|default='-'}</td>
|
||||
</tr>
|
||||
{if condition="$detail.project_id > 0"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联项目</td>
|
||||
<td colspan="5">{$detail.ptname}</td>
|
||||
</tr>
|
||||
{/if}
|
||||
<tr>
|
||||
<td class="layui-td-gray">报销员工</td>
|
||||
<td>{$detail.admin_name}</td>
|
||||
<td class="layui-td-gray">报销部门</td>
|
||||
<td>{$detail.department}</td>
|
||||
<td class="layui-td-gray">报销总费用(元)</td>
|
||||
<td><span style="color:#1E9FFF">{$detail.cost}</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">冲抵借支</td>
|
||||
<td colspan="3">
|
||||
<span style="color:#16b777">{$detail.balance_cost}</span>
|
||||
{if condition="$detail.loan_id > 0"}
|
||||
[<a data-href="/finance/loan/view?id={$detail.loan_id}" class="side-a">冲抵借支详情</a>]
|
||||
{/if}
|
||||
</td>
|
||||
<td class="layui-td-gray">需打款费用(元)</td>
|
||||
<td><span style="color:#ff5722">{$detail.pay_amount}</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">报销选项</td>
|
||||
<td colspan="5">
|
||||
<table class="layui-table layui-table-min" style="margin:0">
|
||||
<tr>
|
||||
<th width="100">报销金额(元)</th>
|
||||
<th width="150">报销类别</th>
|
||||
<th>备注信息</th>
|
||||
</tr>
|
||||
{volist name="$detail.list" id="vo"}
|
||||
<tr>
|
||||
<td>{$vo.amount}</td>
|
||||
<td>{$vo.cate_title}</td>
|
||||
<td style="text-align:left">{$vo.remarks}</td>
|
||||
</tr>
|
||||
{/volist}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
{notempty name="$detail.file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">相关附件</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{if ( $detail.check_status eq 2)}
|
||||
{if ( $detail.pay_status eq 1)}
|
||||
<tr>
|
||||
<td class="layui-td-gray">打款状态</td>
|
||||
<td><span class="yellow">已打款</span></td>
|
||||
<td class="layui-td-gray">打款人</td>
|
||||
<td>{$detail.pay_admin}</td>
|
||||
<td class="layui-td-gray">打款时间</td>
|
||||
<td>{$detail.pay_time}</td>
|
||||
</tr>
|
||||
{else/}
|
||||
<tr>
|
||||
<td class="layui-td-gray">打款状态</td>
|
||||
<td><span class="red">未打款</span></td>
|
||||
<td class="layui-td-gray">打款人</td>
|
||||
<td>-</td>
|
||||
<td class="layui-td-gray">打款时间</td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
{/if}
|
||||
{/if}
|
||||
</table>
|
||||
|
||||
<div id="checkBox" class="pt-3" data-status="{$detail.check_status}" data-id="{$detail.id}" data-checkflowid="{$detail.check_flow_id}"></div>
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','oaCheck'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool, oaCheck=layui.oaCheck;
|
||||
oaCheck.init({
|
||||
check_name:'expense'
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,49 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-3">报销类型</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">报销类型名称<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入报销类型名称" lay-reqText="请输入报销类型名称"class="layui-input" value="{$detail.title|default=''}">
|
||||
</td>
|
||||
<td class="layui-td-gray">排序</td>
|
||||
<td>
|
||||
<input type="text" name="sort" placeholder="请输入排序,数字" autocomplete="off" class="layui-input" value="{$detail.sort|default=''}">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-4">
|
||||
<input type="hidden" name="id" value="{$detail.id|default=0}"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
var moduleInit = ['tool'];
|
||||
|
||||
function gouguInit() {
|
||||
var form = layui.form, tool = layui.tool;
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/finance/expensecate/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,124 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
|
||||
<div class="p-page">
|
||||
<table class="layui-hide" id="table_expense_cate" lay-filter="table_expense_cate"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm add-new" type="button">+ 添加报销类型</button>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var table = layui.table, tool = layui.tool;
|
||||
|
||||
layui.pageTable = table.render({
|
||||
elem: "#table_expense_cate"
|
||||
,toolbar: '#toolbarDemo'
|
||||
,url: "/finance/expensecate/datalist"
|
||||
,page: false
|
||||
,limit: 999
|
||||
,cellMinWidth: 80
|
||||
,cols: [[
|
||||
{field:'id',width:80, title: 'ID号', align:'center'}
|
||||
,{field:'title',title: '类型名称'}
|
||||
,{field:'status', title: '状态',width:80,align:'center',templet: function(d){
|
||||
var html1='<span class="green">正常</span>';
|
||||
var html2='<span class="yellow">禁用</span>';
|
||||
if(d.status==1){
|
||||
return html1;
|
||||
}
|
||||
else{
|
||||
return html2;
|
||||
}
|
||||
}}
|
||||
,{width:100,title: '操作', align:'center',ignoreExport:true,templet: function(d){
|
||||
var html='';
|
||||
var btn='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">编辑</a>';
|
||||
var btn1='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="disable">禁用</a>';
|
||||
var btn2='<a class="layui-btn layui-btn-xs" lay-event="open">启用</a>';
|
||||
if(d.status==1){
|
||||
html = '<div class="layui-btn-group">'+btn+btn1+'</div>';
|
||||
}
|
||||
else{
|
||||
html = '<div class="layui-btn-group">'+btn+btn2+'</div>';
|
||||
}
|
||||
return html;
|
||||
}}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(table_expense_cate)',function (obj) {
|
||||
if(obj.event === 'edit'){
|
||||
add_cate(obj.data.id,obj.data.title);
|
||||
}
|
||||
if(obj.event === 'disable'){
|
||||
layer.confirm('确定要禁用该记录吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/finance/expensecate/set", {id:obj.data.id,status: 0}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if(obj.event === 'open'){
|
||||
layer.confirm('确定要启用该记录吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/finance/expensecate/set", {id:obj.data.id,status:1}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('body').on('click','.add-new',function(){
|
||||
add_cate(0,'');
|
||||
});
|
||||
|
||||
function add_cate(id,val){
|
||||
var title = '新增类型';
|
||||
if(id>0){
|
||||
title = '编辑类型';
|
||||
}
|
||||
layer.prompt({
|
||||
title: title,
|
||||
value: val,
|
||||
yes: function(index, layero) {
|
||||
// 获取文本框输入的值
|
||||
var value = layero.find(".layui-layer-input").val();
|
||||
if (value) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/finance/expensecate/add", {id: id,title: value}, callback);
|
||||
layer.close(index);
|
||||
} else {
|
||||
layer.msg('请填写类型名称');
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,16 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<h3 class="pb-3">报销类型详情</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">报销类型名称</td>
|
||||
<td>{$detail.title|default=''}"></td>
|
||||
<td class="layui-td-gray">排序</td>
|
||||
<td>{$detail.sort|default=0}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
@@ -0,0 +1,299 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
{block name="style"}
|
||||
<style>
|
||||
.layui-table-min th{font-size:13px; text-align:center; background-color:#f8f8f8;}
|
||||
.layui-table-min td{font-size:13px; padding:6px;text-align:center;}
|
||||
</style>
|
||||
{/block}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="layui-form p-page">
|
||||
<h3 class="pb-3">发票信息</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">发票金额(元)</td>
|
||||
<td class="blue">{$detail.amount}</td>
|
||||
<td class="layui-td-gray">发票类型</td>
|
||||
<td>
|
||||
{eq name="$detail.invoice_type" value="1"}增值税专用发票{/eq}
|
||||
{eq name="$detail.invoice_type" value="2"}普通发票{/eq}
|
||||
{eq name="$detail.invoice_type" value="3"}专业发票{/eq}
|
||||
</td>
|
||||
<td class="layui-td-gray">发票主体</td>
|
||||
<td>{$detail.subject}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">抬头类型</td>
|
||||
<td>
|
||||
{eq name="$detail.types" value="1"}企业{/eq}
|
||||
{eq name="$detail.types" value="2"}个人{/eq}
|
||||
</td>
|
||||
<td class="layui-td-gray">发票抬头</td>
|
||||
<td>{$detail.invoice_title}</td>
|
||||
<td class="layui-td-gray">电话号码</td>
|
||||
<td>{$detail.invoice_phone}</td>
|
||||
</tr>
|
||||
<tr class="invoice-type" {eq name="$detail.type" value="2"}style="display:none"{/eq}>
|
||||
<td class="layui-td-gray-2">纳税人识别号</td>
|
||||
<td>{$detail.invoice_tax}</td>
|
||||
<td class="layui-td-gray">开户行</td>
|
||||
<td>{$detail.invoice_bank}</td>
|
||||
<td class="layui-td-gray">银行账号</td>
|
||||
<td>{$detail.invoice_account}</td>
|
||||
</tr>
|
||||
<tr class="invoice-type" {eq name="$detail.type" value="2"}style="display:none"{/eq}>
|
||||
<td class="layui-td-gray-2">银行营业网点</td>
|
||||
<td>{$detail.invoice_banking}</td>
|
||||
<td class="layui-td-gray">地址</td>
|
||||
<td colspan="3">{$detail.invoice_address}</td>
|
||||
</tr>
|
||||
{notempty name="$detail.remark"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">备注信息</td>
|
||||
<td colspan="5">{$detail.remark}</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{notempty name="$detail.file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联附件</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{if condition="$detail.open_admin_id > 0"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">发票号码</td>
|
||||
<td>{$detail.code}</td>
|
||||
<td class="layui-td-gray">开票人</td>
|
||||
<td>{$detail.open_admin_name}</td>
|
||||
<td class="layui-td-gray">开票时间</td>
|
||||
<td>{$detail.open_time}</td>
|
||||
</tr>
|
||||
{/if}
|
||||
{notempty name="$detail.other_file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">发票附件</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.other_file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
</table>
|
||||
|
||||
<h3 class="py-3">回款信息</h3>
|
||||
<form class="layui-form">
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">回款状态</td>
|
||||
<td>
|
||||
{if condition="($detail.enter_status == 0)"}
|
||||
<span class="red">未回款</span>
|
||||
{elseif condition="($detail.enter_status == 1)"}
|
||||
<span class="blue">部分回款</span>
|
||||
{elseif condition="($detail.enter_status == 2)"}
|
||||
<span class="green">全部回款</span>
|
||||
{/if}
|
||||
</td>
|
||||
<td class="layui-td-gray-2">未回款金额(元)</td>
|
||||
<td style="color:#FF5722">{$detail.not_income}</td>
|
||||
<td class="layui-td-gray-2">已回款金额(元)</td>
|
||||
<td style="color:#1E9FFF">{$detail.enter_amount}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">回款记录</td>
|
||||
<td colspan="5">
|
||||
<table id="interfix" class="layui-table layui-table-min" style="margin:0">
|
||||
<tr>
|
||||
<th style="width:200px;">回款日期</th>
|
||||
<th style="width:200px;">到帐金额(元)</th>
|
||||
<th>备注</th>
|
||||
<th style="width:100px;">操作</th>
|
||||
</tr>
|
||||
{empty name="$detail.income"}
|
||||
<tr class="none_interfix">
|
||||
<td colspan="4" style="text-align: center;">暂无回款记录</td>
|
||||
</tr>
|
||||
{else/}
|
||||
{volist name="$detail.income" id="vo"}
|
||||
<tr class="more_interfix">
|
||||
<td>{$vo.enter_time | date='Y-m-d'}</td>
|
||||
<td>{$vo.amount}</td>
|
||||
<td style="text-align:left;">{$vo.remarks}</td>
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="remove" data-id="{$vo.id}" data-inid="{$id}">删除</a></td>
|
||||
</tr>
|
||||
{/volist}
|
||||
{/empty}
|
||||
</table>
|
||||
{if condition="($detail.enter_status lt 2)"}
|
||||
<div class="pt-3"><button class="layui-btn layui-btn-sm" type="button" id="addInterfix">+ 添加回款记录</button></div>
|
||||
{/if}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-3">
|
||||
<input name="invoice_id" id="invoice_id" type="hidden" value="{$id}">
|
||||
<input name="enter_type" id="enter_type" type="hidden" value="1">
|
||||
{if condition="($detail.enter_status lt 2)"}
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">保存回款记录</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
{/if}
|
||||
{if condition="($detail.enter_status eq 0)"}
|
||||
<span class="layui-btn layui-btn-danger" lay-event="all">全部回款</span>
|
||||
{/if}
|
||||
{if condition="($detail.enter_status eq 1)"}
|
||||
<span class="layui-btn layui-btn-danger" lay-event="all">剩余部分全部回款</span>
|
||||
{/if}
|
||||
{if condition="($detail.enter_status gt 0)"}
|
||||
<span class="layui-btn layui-btn-warm" lay-event="refue">全部反回款</span>
|
||||
{/if}
|
||||
</div>
|
||||
</form>
|
||||
<input type="hidden" name="id" value="{$detail.id}">
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,laydate = layui.laydate;
|
||||
//添加表格行
|
||||
$('#addInterfix').on('click',function(){
|
||||
var html = '';
|
||||
html += '<tr class="more_interfix">';
|
||||
html += '<td><input type="text" class="layui-input tool-time" name="enter_time[]" readonly lay-verify="required" lay-reqText="请选择回款日期">';
|
||||
html += '<td><input type="text" class="layui-input" name="amount[]" lay-verify="required|number" lay-reqText="请输入回款金额,数字"></td>';
|
||||
html += '<td><input type="text" class="layui-input" name="remarks[]"></td>';
|
||||
html += '<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>';
|
||||
html += '</tr>';
|
||||
$("#interfix").find('.none_interfix').remove();
|
||||
$("#interfix").append(html);
|
||||
form.render();
|
||||
});
|
||||
//删除表格
|
||||
$('#interfix').on('click', '[lay-event="del"]', function() {
|
||||
$(this).parents(".more_interfix").remove();
|
||||
if($("#interfix").find('.more_interfix').length<1){
|
||||
$("#interfix").append('<tr class="none_interfix"><td colspan="4" style="text-align: center;">暂无回款记录</td></tr>');
|
||||
}
|
||||
});
|
||||
|
||||
//删除回款记录
|
||||
$('#interfix').on('click', '[lay-event="remove"]', function() {
|
||||
var that=$(this);
|
||||
var id=that.data('id');
|
||||
var invoice_id=that.data('inid');
|
||||
layer.confirm('确定要删除该回款记录?', {icon: 3, title:'提示'}, function(index){
|
||||
$.ajax({
|
||||
url: "/finance/income/del",
|
||||
type:'post',
|
||||
data:{id:id,invoice_id:invoice_id},
|
||||
success:function(res){
|
||||
layer.msg(res.msg);
|
||||
if(res.code==0){
|
||||
parent.layui.pageTable.reload();
|
||||
window.setTimeout(function(){
|
||||
location.reload();
|
||||
},1200)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function(data){
|
||||
console.log(data.field);
|
||||
if($("#interfix").find('.tool-time').length<1){
|
||||
layer.msg('请添加回款记录');
|
||||
return false;
|
||||
}
|
||||
$.ajax({
|
||||
url: "/finance/income/add",
|
||||
type:'post',
|
||||
data:data.field,
|
||||
success:function(res){
|
||||
layer.msg(res.msg);
|
||||
if(res.code==0){
|
||||
parent.layui.pageTable.reload();
|
||||
window.setTimeout(function(){
|
||||
location.reload();
|
||||
},1200)
|
||||
}
|
||||
}
|
||||
})
|
||||
return false;
|
||||
});
|
||||
|
||||
$('.layui-form').on('click', '[lay-event="refue"]', function () {
|
||||
var invoice_id=$('#invoice_id').val();
|
||||
layer.confirm('确定要全部反回款?', {icon: 3, title:'提示'}, function(index){
|
||||
$.ajax({
|
||||
url: "/finance/income/add",
|
||||
type:'post',
|
||||
data:{invoice_id:invoice_id,enter_type:3},
|
||||
success:function(res){
|
||||
layer.msg(res.msg);
|
||||
if(res.code==0){
|
||||
parent.layui.pageTable.reload();
|
||||
window.setTimeout(function(){
|
||||
location.reload();
|
||||
},1200)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
return false;
|
||||
})
|
||||
$('.layui-form').on('click', '[lay-event="all"]', function () {
|
||||
var invoice_id=$('#invoice_id').val();
|
||||
layer.confirm('确定已经全部回款?', {icon: 3, title:'提示'}, function(idx){
|
||||
layer.prompt({title: '选择回款日期', formType: 3,value :'',success: function(layero, index){
|
||||
$('.layui-layer-input').attr('readonly',true);
|
||||
lay('.layui-layer-input').each(function () {
|
||||
laydate.render({
|
||||
elem: this,
|
||||
trigger: 'click',
|
||||
showBottom:false
|
||||
});
|
||||
});
|
||||
layer.close(idx);
|
||||
}
|
||||
}, function(enter_time, index){
|
||||
if(enter_time ==''){
|
||||
layer.msg('选择回款日期');
|
||||
return false;
|
||||
}
|
||||
$.ajax({
|
||||
url: "/finance/income/add",
|
||||
type:'post',
|
||||
data:{invoice_id:invoice_id,enter_type:2,enter_time:enter_time},
|
||||
success:function(res){
|
||||
layer.msg(res.msg);
|
||||
if(res.code==0){
|
||||
parent.layui.pageTable.reload();
|
||||
window.setTimeout(function(){
|
||||
location.reload();
|
||||
},1200)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
return false;
|
||||
})
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,271 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
{block name="style"}
|
||||
<style>
|
||||
.layui-table-min th{font-size:13px; text-align:center; background-color:#f8f8f8;}
|
||||
.layui-table-min td{font-size:13px; padding:6px;text-align:center;}
|
||||
</style>
|
||||
{/block}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="layui-form p-page">
|
||||
<h3 class="pb-3">无发票回款信息</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">预回款金额(元)</td>
|
||||
<td class="blue">{$detail.amount}</td>
|
||||
<td class="layui-td-gray">收款主体</td>
|
||||
<td colspan="3">{$detail.subject}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">付款主体</td>
|
||||
<td>
|
||||
{eq name="$detail.types" value="1"}企业{/eq}
|
||||
{eq name="$detail.types" value="2"}个人{/eq}
|
||||
</td>
|
||||
<td class="layui-td-gray-2">付款方名称</td>
|
||||
<td>{$detail.invoice_title}</td>
|
||||
<td class="layui-td-gray">电话号码</td>
|
||||
<td>{$detail.invoice_phone}</td>
|
||||
</tr>
|
||||
<tr class="invoice-type" {eq name="$detail.type" value="2"}style="display:none"{/eq}>
|
||||
<td class="layui-td-gray-2">纳税人识别号</td>
|
||||
<td>{$detail.invoice_tax}</td>
|
||||
<td class="layui-td-gray">开户行</td>
|
||||
<td>{$detail.invoice_bank}</td>
|
||||
<td class="layui-td-gray">银行账号</td>
|
||||
<td>{$detail.invoice_account}</td>
|
||||
</tr>
|
||||
<tr class="invoice-type" {eq name="$detail.type" value="2"}style="display:none"{/eq}>
|
||||
<td class="layui-td-gray-2">银行营业网点</td>
|
||||
<td>{$detail.invoice_banking}</td>
|
||||
<td class="layui-td-gray">地址</td>
|
||||
<td colspan="3">{$detail.invoice_address}</td>
|
||||
</tr>
|
||||
{notempty name="$detail.remark"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">备注信息</td>
|
||||
<td colspan="5">{$detail.remark}</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{notempty name="$detail.file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联附件</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
</table>
|
||||
|
||||
<h3 class="py-3">回款信息</h3>
|
||||
<form class="layui-form">
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">回款状态</td>
|
||||
<td>
|
||||
{if condition="($detail.enter_status == 0)"}
|
||||
<span class="red">未回款</span>
|
||||
{elseif condition="($detail.enter_status == 1)"}
|
||||
<span class="blue">部分回款</span>
|
||||
{elseif condition="($detail.enter_status == 2)"}
|
||||
<span class="green">全部回款</span>
|
||||
{/if}
|
||||
</td>
|
||||
<td class="layui-td-gray-2">未回款金额(元)</td>
|
||||
<td style="color:#FF5722">{$detail.not_income}</td>
|
||||
<td class="layui-td-gray-2">已回款金额(元)</td>
|
||||
<td style="color:#1E9FFF">{$detail.enter_amount}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">回款记录</td>
|
||||
<td colspan="5">
|
||||
<table id="interfix" class="layui-table layui-table-min" style="margin:0">
|
||||
<tr>
|
||||
<th style="width:200px;">回款日期</th>
|
||||
<th style="width:200px;">到帐金额(元)</th>
|
||||
<th>备注</th>
|
||||
<th style="width:100px;">操作</th>
|
||||
</tr>
|
||||
{empty name="$detail.income"}
|
||||
<tr class="none_interfix">
|
||||
<td colspan="4" style="text-align: center;">暂无回款记录</td>
|
||||
</tr>
|
||||
{else/}
|
||||
{volist name="$detail.income" id="vo"}
|
||||
<tr class="more_interfix">
|
||||
<td>{$vo.enter_time | date='Y-m-d'}</td>
|
||||
<td>{$vo.amount}</td>
|
||||
<td style="text-align:left;">{$vo.remarks}</td>
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="remove" data-id="{$vo.id}" data-inid="{$id}">删除</a></td>
|
||||
</tr>
|
||||
{/volist}
|
||||
{/empty}
|
||||
</table>
|
||||
{if condition="($detail.enter_status lt 2)"}
|
||||
<div class="pt-3"><button class="layui-btn layui-btn-sm" type="button" id="addInterfix">+ 添加回款记录</button></div>
|
||||
{/if}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-3">
|
||||
<input name="invoice_id" id="invoice_id" type="hidden" value="{$id}">
|
||||
<input name="enter_type" id="enter_type" type="hidden" value="1">
|
||||
{if condition="($detail.enter_status lt 2)"}
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">保存回款记录</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
{/if}
|
||||
{if condition="($detail.enter_status eq 0)"}
|
||||
<span class="layui-btn layui-btn-danger" lay-event="all">全部回款</span>
|
||||
{/if}
|
||||
{if condition="($detail.enter_status eq 1)"}
|
||||
<span class="layui-btn layui-btn-danger" lay-event="all">剩余部分全部回款</span>
|
||||
{/if}
|
||||
{if condition="($detail.enter_status gt 0)"}
|
||||
<span class="layui-btn layui-btn-warm" lay-event="refue">全部反回款</span>
|
||||
{/if}
|
||||
</div>
|
||||
</form>
|
||||
<input type="hidden" name="id" value="{$detail.id}">
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,laydate = layui.laydate;
|
||||
//添加表格行
|
||||
$('#addInterfix').on('click',function(){
|
||||
var html = '';
|
||||
html += '<tr class="more_interfix">';
|
||||
html += '<td><input type="text" class="layui-input tool-time" name="enter_time[]" readonly lay-verify="required" lay-reqText="请选择回款日期">';
|
||||
html += '<td><input type="text" class="layui-input" name="amount[]" lay-verify="required|number" lay-reqText="请输入回款金额,数字"></td>';
|
||||
html += '<td><input type="text" class="layui-input" name="remarks[]"></td>';
|
||||
html += '<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>';
|
||||
html += '</tr>';
|
||||
$("#interfix").find('.none_interfix').remove();
|
||||
$("#interfix").append(html);
|
||||
form.render();
|
||||
});
|
||||
//删除表格
|
||||
$('#interfix').on('click', '[lay-event="del"]', function() {
|
||||
$(this).parents(".more_interfix").remove();
|
||||
if($("#interfix").find('.more_interfix').length<1){
|
||||
$("#interfix").append('<tr class="none_interfix"><td colspan="4" style="text-align: center;">暂无回款记录</td></tr>');
|
||||
}
|
||||
});
|
||||
|
||||
//删除回款记录
|
||||
$('#interfix').on('click', '[lay-event="remove"]', function() {
|
||||
var that=$(this);
|
||||
var id=that.data('id');
|
||||
var invoice_id=that.data('inid');
|
||||
layer.confirm('确定要删除该回款记录?', {icon: 3, title:'提示'}, function(index){
|
||||
$.ajax({
|
||||
url: "/finance/income/del",
|
||||
type:'post',
|
||||
data:{id:id,invoice_id:invoice_id},
|
||||
success:function(res){
|
||||
layer.msg(res.msg);
|
||||
if(res.code==0){
|
||||
parent.layui.pageTable.reload();
|
||||
window.setTimeout(function(){
|
||||
location.reload();
|
||||
},1200)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function(data){
|
||||
console.log(data.field);
|
||||
if($("#interfix").find('.tool-time').length<1){
|
||||
layer.msg('请添加回款记录');
|
||||
return false;
|
||||
}
|
||||
$.ajax({
|
||||
url: "/finance/income/add",
|
||||
type:'post',
|
||||
data:data.field,
|
||||
success:function(res){
|
||||
layer.msg(res.msg);
|
||||
if(res.code==0){
|
||||
parent.layui.pageTable.reload();
|
||||
window.setTimeout(function(){
|
||||
location.reload();
|
||||
},1200)
|
||||
}
|
||||
}
|
||||
})
|
||||
return false;
|
||||
});
|
||||
|
||||
$('.layui-form').on('click', '[lay-event="refue"]', function () {
|
||||
var invoice_id=$('#invoice_id').val();
|
||||
layer.confirm('确定要全部反回款?', {icon: 3, title:'提示'}, function(index){
|
||||
$.ajax({
|
||||
url: "/finance/income/add",
|
||||
type:'post',
|
||||
data:{invoice_id:invoice_id,enter_type:3},
|
||||
success:function(res){
|
||||
layer.msg(res.msg);
|
||||
if(res.code==0){
|
||||
parent.layui.pageTable.reload();
|
||||
window.setTimeout(function(){
|
||||
location.reload();
|
||||
},1200)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
return false;
|
||||
})
|
||||
$('.layui-form').on('click', '[lay-event="all"]', function () {
|
||||
var invoice_id=$('#invoice_id').val();
|
||||
layer.confirm('确定已经全部回款?', {icon: 3, title:'提示'}, function(idx){
|
||||
layer.prompt({title: '选择回款日期', formType: 3,value :'',success: function(layero, index){
|
||||
$('.layui-layer-input').attr('readonly',true);
|
||||
lay('.layui-layer-input').each(function () {
|
||||
laydate.render({
|
||||
elem: this,
|
||||
trigger: 'click',
|
||||
showBottom:false
|
||||
});
|
||||
});
|
||||
layer.close(idx);
|
||||
}
|
||||
}, function(enter_time, index){
|
||||
if(enter_time ==''){
|
||||
layer.msg('选择回款日期');
|
||||
return false;
|
||||
}
|
||||
$.ajax({
|
||||
url: "/finance/income/add",
|
||||
type:'post',
|
||||
data:{invoice_id:invoice_id,enter_type:2,enter_time:enter_time},
|
||||
success:function(res){
|
||||
layer.msg(res.msg);
|
||||
if(res.code==0){
|
||||
parent.layui.pageTable.reload();
|
||||
window.setTimeout(function(){
|
||||
location.reload();
|
||||
},1200)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
return false;
|
||||
})
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,199 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<div class="layui-card border-x border-t" style="margin-bottom:0; box-shadow:0 0 0 0 rgb(5 32 96 / 0%)">
|
||||
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this"><a href="/finance/income/datalist">有发票回款</a></li>
|
||||
<li><a href="/finance/invoice/datalist_a">无发票回款</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<form class="layui-form gg-form-bar border-x" id="barsearchform">
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="diff_time" placeholder="选择回款时间区间" readonly name="diff_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:120px;">
|
||||
<select name="enter_status">
|
||||
<option value="">请选择状态</option>
|
||||
<option value="0">未回款</option>
|
||||
<option value="1">部分回款</option>
|
||||
<option value="2">全部回款</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<input type="hidden" name="tab" value="0"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<h3 class="h3-title" style="height:32px;">回款列表</h3>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const auth = "{$auth}";
|
||||
const moduleInit = ['tool','tablePlus','laydatePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus, tool = layui.tool, laydatePlus = layui.laydatePlus, element = layui.element;
|
||||
//tab切换
|
||||
element.on('tab(tab)', function(data){
|
||||
$('[name="tab"]').val(data.index);
|
||||
$("#barsearchform")[0].reset();
|
||||
layui.pageTable.reload({where:{tab:data.index},page:{curr:1}});
|
||||
return false;
|
||||
});
|
||||
|
||||
//日期范围
|
||||
var diff_time = new laydatePlus({'target':'diff_time'});
|
||||
layui.pageTable = table.render({
|
||||
elem: "#test"
|
||||
,toolbar: "#toolbarDemo"
|
||||
,url: "/finance/income/datalist"
|
||||
,page: true
|
||||
,limit: 20
|
||||
,cellMinWidth: 80
|
||||
,height: 'full-154'
|
||||
,cellMinWidth: 80
|
||||
,page: true //开启分页
|
||||
,limit: 20
|
||||
,cols: [
|
||||
[
|
||||
{
|
||||
field: 'id',
|
||||
title: 'ID号',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'enter_status',
|
||||
title: '回款状态',
|
||||
align: 'center',
|
||||
width: 100,
|
||||
templet:function(d){
|
||||
var html='<span class="red">『未回款』</span>';
|
||||
if(d.enter_status==1){
|
||||
html='<span class="blue">『部分回款』</span>';
|
||||
}
|
||||
else if(d.enter_status==2){
|
||||
html='<span class="green">『全部回款』</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'enter_amount',
|
||||
title: '回款金额(元)',
|
||||
align: 'right',
|
||||
width: 100,
|
||||
},{
|
||||
field: 'enter_time',
|
||||
title: '最新回款时间',
|
||||
align: 'center',
|
||||
width: 136
|
||||
}, {
|
||||
field: 'invoice_title',
|
||||
minWidth: 240,
|
||||
title: '发票抬头',
|
||||
templet:function(d){
|
||||
var html='<span class="layui-badge layui-bg-blue">企业</span> '+d.invoice_title;
|
||||
if(d.types==2){
|
||||
html='<span class="layui-badge layui-bg-green">个人</span> '+d.invoice_title;
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'amount',
|
||||
title: '发票金额(元)',
|
||||
align: 'right',
|
||||
width: 100,
|
||||
},{
|
||||
field: 'invoice_type',
|
||||
title: '开票类型',
|
||||
align: 'center',
|
||||
width: 120,
|
||||
templet:function(d){
|
||||
var html='-';
|
||||
if(d.invoice_type==1){
|
||||
html='<span style="color:#1E9FFF">增值税专用发票</span>';
|
||||
}
|
||||
else if(d.invoice_type==2){
|
||||
html='<span style="color:#5FB878">普通发票</span>';
|
||||
}
|
||||
else if(d.invoice_type==3){
|
||||
html='<span style="color:#FFB800">专用发票</span>';
|
||||
}
|
||||
else{
|
||||
html='<span style="color:#666666">无需开票</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'admin_name',
|
||||
title: '申请开票人',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'department',
|
||||
title: '所属部门',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},{
|
||||
field: 'create_time',
|
||||
title: '申请时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'code',
|
||||
title: '发票号码',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'open_time',
|
||||
title: '开票日期',
|
||||
align: 'center',
|
||||
width: 90
|
||||
}, {
|
||||
field: 'right',
|
||||
fixed: 'right',
|
||||
title: '操作',
|
||||
width: 136,
|
||||
align: 'center',
|
||||
templet:function(d){
|
||||
var html='<div class="layui-btn-group">';
|
||||
var btn1='<span class="layui-btn layui-btn-xs" lay-event="add">回款管理</span>';
|
||||
var btn2='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">回款详情</span>';
|
||||
if(auth == 1){
|
||||
return html+btn1+btn2+'</div>';
|
||||
}
|
||||
else{
|
||||
return html+btn2+'</div>';
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
//监听行工具事件
|
||||
table.on('tool(test)', function(obj) {
|
||||
var data = obj.data;
|
||||
if (obj.event === 'add') {
|
||||
tool.side("/finance/income/add?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/finance/income/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,117 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<form class="layui-form gg-form-bar border-x border-t" id="barsearchform">
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="diff_time" placeholder="选择回款时间区间" readonly name="diff_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<input type="hidden" name="tab" value="0"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<h3 class="h3-title" style="height:32px;">回款列表</h3>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tablePlus','laydatePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus, tool = layui.tool, laydatePlus = layui.laydatePlus, element = layui.element;
|
||||
//tab切换
|
||||
element.on('tab(tab)', function(data){
|
||||
$('[name="tab"]').val(data.index);
|
||||
$("#barsearchform")[0].reset();
|
||||
layui.pageTable.reload({where:{tab:data.index},page:{curr:1}});
|
||||
return false;
|
||||
});
|
||||
|
||||
//日期范围
|
||||
var diff_time = new laydatePlus({'target':'diff_time'});
|
||||
layui.pageTable = table.render({
|
||||
elem: "#test"
|
||||
,toolbar: "#toolbarDemo"
|
||||
,url: "/finance/income/record"
|
||||
,page: true
|
||||
,limit: 20
|
||||
,cellMinWidth: 80
|
||||
,height: 'full-114'
|
||||
,cellMinWidth: 80
|
||||
,page: true //开启分页
|
||||
,limit: 20
|
||||
,totalRow: true
|
||||
,cols: [
|
||||
[
|
||||
{
|
||||
field: 'id',
|
||||
title: 'ID号',
|
||||
align: 'center',
|
||||
width: 80,
|
||||
totalRowText: '<div style="text-align:right">合计</div>'
|
||||
},{
|
||||
field: 'amount',
|
||||
title: '回款金额(元)',
|
||||
style: 'color:#16b777',
|
||||
align: 'right',
|
||||
width: 120,
|
||||
totalRow: function (d) {return d.TOTAL_ROW.amount}
|
||||
},{
|
||||
field: 'enter_time',
|
||||
title: '回款时间',
|
||||
align: 'center',
|
||||
width: 110
|
||||
},{
|
||||
field: 'remarks',
|
||||
title: '回款备注'
|
||||
},{
|
||||
field: 'admin_name',
|
||||
title: '登记人',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'create_time',
|
||||
title: '登记时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'code',
|
||||
title: '关联发票号',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'right',
|
||||
fixed: 'right',
|
||||
title: '操作',
|
||||
width: 90,
|
||||
align: 'center',
|
||||
templet:function(d){
|
||||
var html='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">回款详情</span>';
|
||||
return html;
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
//监听行工具事件
|
||||
table.on('tool(test)', function(obj) {
|
||||
var data = obj.data;
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/finance/income/view?id="+data.invoice_id);
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,216 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="layui-form p-page">
|
||||
{eq name="$detail.invoice_type" value="0"}
|
||||
<h3 class="pb-3">无发票回款信息</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">预回款金额(元)</td>
|
||||
<td class="blue">{$detail.amount}</td>
|
||||
<td class="layui-td-gray">收款主体</td>
|
||||
<td colspan="3">{$detail.subject}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">付款主体</td>
|
||||
<td>
|
||||
{eq name="$detail.types" value="1"}企业{/eq}
|
||||
{eq name="$detail.types" value="2"}个人{/eq}
|
||||
</td>
|
||||
<td class="layui-td-gray-2">付款方名称</td>
|
||||
<td>{$detail.invoice_title}</td>
|
||||
<td class="layui-td-gray">电话号码</td>
|
||||
<td>{$detail.invoice_phone}</td>
|
||||
</tr>
|
||||
<tr class="invoice-type" {eq name="$detail.type" value="2"}style="display:none"{/eq}>
|
||||
<td class="layui-td-gray-2">纳税人识别号</td>
|
||||
<td>{$detail.invoice_tax}</td>
|
||||
<td class="layui-td-gray">开户行</td>
|
||||
<td>{$detail.invoice_bank}</td>
|
||||
<td class="layui-td-gray">银行账号</td>
|
||||
<td>{$detail.invoice_account}</td>
|
||||
</tr>
|
||||
<tr class="invoice-type" {eq name="$detail.type" value="2"}style="display:none"{/eq}>
|
||||
<td class="layui-td-gray-2">银行营业网点</td>
|
||||
<td>{$detail.invoice_banking}</td>
|
||||
<td class="layui-td-gray">地址</td>
|
||||
<td colspan="3">{$detail.invoice_address}</td>
|
||||
</tr>
|
||||
{notempty name="$detail.remark"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">备注信息</td>
|
||||
<td colspan="5">{$detail.remark}</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{notempty name="$detail.file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联附件</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{notempty name="$detail.other_file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">发票附件</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.other_file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
</table>
|
||||
{else/}
|
||||
<h3 class="pb-3">发票信息</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">发票金额(元)</td>
|
||||
<td class="blue">{$detail.amount}</td>
|
||||
<td class="layui-td-gray">发票类型</td>
|
||||
<td>
|
||||
{eq name="$detail.invoice_type" value="1"}增值税专用发票{/eq}
|
||||
{eq name="$detail.invoice_type" value="2"}普通发票{/eq}
|
||||
{eq name="$detail.invoice_type" value="3"}专业发票{/eq}
|
||||
</td>
|
||||
<td class="layui-td-gray">发票主体</td>
|
||||
<td>{$detail.subject}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">抬头类型</td>
|
||||
<td>
|
||||
{eq name="$detail.types" value="1"}企业{/eq}
|
||||
{eq name="$detail.types" value="2"}个人{/eq}
|
||||
</td>
|
||||
<td class="layui-td-gray">发票抬头</td>
|
||||
<td>{$detail.invoice_title}</td>
|
||||
<td class="layui-td-gray">电话号码</td>
|
||||
<td>{$detail.invoice_phone}</td>
|
||||
</tr>
|
||||
<tr class="invoice-type" {eq name="$detail.type" value="2"}style="display:none"{/eq}>
|
||||
<td class="layui-td-gray-2">纳税人识别号</td>
|
||||
<td>{$detail.invoice_tax}</td>
|
||||
<td class="layui-td-gray">开户行</td>
|
||||
<td>{$detail.invoice_bank}</td>
|
||||
<td class="layui-td-gray">银行账号</td>
|
||||
<td>{$detail.invoice_account}</td>
|
||||
</tr>
|
||||
<tr class="invoice-type" {eq name="$detail.type" value="2"}style="display:none"{/eq}>
|
||||
<td class="layui-td-gray-2">银行营业网点</td>
|
||||
<td>{$detail.invoice_banking}</td>
|
||||
<td class="layui-td-gray">地址</td>
|
||||
<td colspan="3">{$detail.invoice_address}</td>
|
||||
</tr>
|
||||
{notempty name="$detail.remark"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">备注信息</td>
|
||||
<td colspan="5">{$detail.remark}</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{notempty name="$detail.file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联附件</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{if condition="$detail.open_admin_id > 0"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">发票号码</td>
|
||||
<td>{$detail.code}</td>
|
||||
<td class="layui-td-gray">开票人</td>
|
||||
<td>{$detail.open_admin_name}</td>
|
||||
<td class="layui-td-gray">开票时间</td>
|
||||
<td>{$detail.open_time|date='Y-m-d'}</td>
|
||||
</tr>
|
||||
{/if}
|
||||
{notempty name="$detail.other_file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">发票附件</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.other_file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
</table>
|
||||
{/eq}
|
||||
<h3 class="py-3">回款信息</h3>
|
||||
<form class="layui-form">
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">回款状态</td>
|
||||
<td>
|
||||
{if condition="($detail.enter_status == 0)"}
|
||||
<span class="red">未回款</span>
|
||||
{elseif condition="($detail.enter_status == 1)"}
|
||||
<span class="blue">部分回款</span>
|
||||
{elseif condition="($detail.enter_status == 2)"}
|
||||
<span class="green">全部回款</span>
|
||||
{/if}
|
||||
</td>
|
||||
<td class="layui-td-gray-2">未回款金额(元)</td>
|
||||
<td class="red">{$detail.not_income}</td>
|
||||
<td class="layui-td-gray-2">已回款金额(元)</td>
|
||||
<td class="green">{$detail.enter_amount}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">回款记录</td>
|
||||
<td colspan="5">
|
||||
<table class="layui-table layui-table-min" style="margin:0">
|
||||
<tr>
|
||||
<th style="width:150px;">回款日期</th>
|
||||
<th style="width:150px;">回款金额(元)</th>
|
||||
<th>备注</th>
|
||||
<th style="width:100px;">登记人</th>
|
||||
<th style="width:150px;">登记时间</th>
|
||||
</tr>
|
||||
{empty name="$detail.income"}
|
||||
<tr class="none_interfix">
|
||||
<td colspan="5" style="text-align: center;">暂无回款记录</td>
|
||||
</tr>
|
||||
{else/}
|
||||
{volist name="$detail.income" id="vo"}
|
||||
<tr class="more_interfix">
|
||||
<td>{$vo.enter_time | date='Y-m-d'}</td>
|
||||
<td>{$vo.amount}</td>
|
||||
<td style="text-align:left;">{$vo.remarks}</td>
|
||||
<td>{$vo.admin}</td>
|
||||
<td>{$vo.create_time | date='Y-m-d H:i:s'}</td>
|
||||
</tr>
|
||||
{/volist}
|
||||
{/empty}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<input type="hidden" name="id" value="{$detail.id}">
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool;
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,166 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-2">新增开票申请</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">开票金额<font>*</font></td>
|
||||
<td><input type="text" class="layui-input" name="amount" lay-verify="required|number" placeholder="请输入开票金额" lay-reqText="请输入开票金额" value=""></td>
|
||||
<td class="layui-td-gray">开票类型<font>*</font></td>
|
||||
<td>
|
||||
<select name="invoice_type" lay-verify="required" lay-reqText="请选择开票类型">
|
||||
<option value="">请选择开票类型</option>
|
||||
<option value="1">增值税专用发票</option>
|
||||
<option value="2">普通发票</option>
|
||||
<option value="3">专业发票</option>
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">开票主体<font>*</font></td>
|
||||
<td>
|
||||
<select name="invoice_subject" lay-verify="required" lay-reqText="请选择开票主体">
|
||||
<option value="">请选择开票主体</option>
|
||||
{volist name=":get_base_data('enterprise')" id="vo"}
|
||||
<option value="{$vo.id}">{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">抬头类型<font>*</font></td>
|
||||
<td>
|
||||
<input type="radio" name="types" lay-filter="type" value="1" title="企业" checked>
|
||||
<input type="radio" name="types" lay-filter="type" value="2" title="个人">
|
||||
</td>
|
||||
<td class="layui-td-gray-2">开票抬头<span class="layui-btn layui-btn-xs invoice-qiye customer-picker">选择</span></td>
|
||||
<td><input type="text" name="invoice_title" class="layui-input" value="" placeholder="请输入开票抬头" lay-verify="required" lay-reqText="请输入开票抬头"></td>
|
||||
<td class="layui-td-gray-2">纳税人识别号<font>*</font></td>
|
||||
<td><input type="text" name="invoice_tax" class="layui-input" value="" placeholder="请输入纳税人识别号,个人输入身份证号码"lay-verify="required" lay-reqText="请输入纳税人识别号,个人输入身份证号码"></td>
|
||||
</tr>
|
||||
<tr class="invoice-qiye">
|
||||
<td class="layui-td-gray">开户行<font>*</font></td>
|
||||
<td><input type="text" name="invoice_bank" class="layui-input" value=""></td>
|
||||
<td class="layui-td-gray">银行账号<font>*</font></td>
|
||||
<td><input type="text" name="invoice_account" class="layui-input" value=""></td>
|
||||
<td class="layui-td-gray-2">银行营业网点</td>
|
||||
<td><input type="text" name="invoice_banking" class="layui-input" value=""></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">电话号码</td>
|
||||
<td><input type="text" name="invoice_phone" class="layui-input" value=""></td>
|
||||
<td class="layui-td-gray">地址</td>
|
||||
<td colspan="3"><input type="text" name="invoice_address" class="layui-input" value=""></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联合同</td>
|
||||
<td colspan="5">
|
||||
<input type="text" class="layui-input picker-oa" data-types="contract" name="contract_name" placeholder="请选择需要关联的合同" readonly value="">
|
||||
<input type="hidden" class="layui-input" name="contract_id" value="0">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联项目</td>
|
||||
<td colspan="5">
|
||||
<input type="text" class="layui-input picker-oa" data-types="project" name="project_name" placeholder="请选择需要关联的项目" readonly value="">
|
||||
<input type="hidden" class="layui-input" name="project_id" value="0">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<div class="layui-input-inline">附件</div>
|
||||
<div class="layui-input-inline">
|
||||
<button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button>
|
||||
</div>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="file_ids" value="">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">备注信息</td>
|
||||
<td colspan="5"><textarea name="remark" placeholder="请输入备注信息" class="layui-textarea"></textarea></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="checkBox" data-status="0" data-id="0" data-checkflowid="0" class="pt-3"></div>
|
||||
<div class="pt-4">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
var moduleInit = ['tool','oaPicker','oaCheck','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form, tool = layui.tool, oaPicker = layui.oaPicker,oaCheck = layui.oaCheck,uploadPlus = layui.uploadPlus;
|
||||
//选择抬头类型
|
||||
form.on('radio(type)', function (data) {
|
||||
if(data.value==2){
|
||||
$('.invoice-qiye').hide();
|
||||
}
|
||||
else{
|
||||
$('.invoice-qiye').show();
|
||||
}
|
||||
});
|
||||
|
||||
//相关附件上传
|
||||
var attachment = new uploadPlus();
|
||||
|
||||
//审批相关
|
||||
oaCheck.init({
|
||||
check_name:'invoice',
|
||||
check_btn:0
|
||||
});
|
||||
|
||||
$('.customer-picker').on('click',function(){
|
||||
let that = $(this),ids = [],titles=[],tax_num=[],tax_bank=[],tax_banksn=[],tax_mobile=[],tax_address=[];
|
||||
let callback = function(data){
|
||||
for ( var i = 0; i <data.length; i++){
|
||||
ids.push(data[i].id);
|
||||
titles.push(data[i].name);
|
||||
tax_num.push(data[i].tax_num);
|
||||
tax_bank.push(data[i].tax_bank);
|
||||
tax_banksn.push(data[i].tax_banksn);
|
||||
tax_mobile.push(data[i].tax_mobile);
|
||||
tax_address.push(data[i].tax_address);
|
||||
}
|
||||
//that.val(titles.join(','));
|
||||
//that.next().val(ids.join(','));
|
||||
$('[name="invoice_title"]').val(titles.join(','));
|
||||
$('[name="invoice_tax"]').val(tax_num.join(','));
|
||||
$('[name="invoice_bank"]').val(tax_bank.join(','));
|
||||
$('[name="invoice_account"]').val(tax_banksn.join(','));
|
||||
$('[name="invoice_phone"]').val(tax_mobile.join(','));
|
||||
$('[name="invoice_address"]').val(tax_address.join(','));
|
||||
}
|
||||
oaPicker.picker('customer',1,callback,{});
|
||||
});
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
let checkCallback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
data.field.check_name = 'invoice';
|
||||
data.field.action_id = e.data.return_id;
|
||||
oaCheck.submit(data.field,checkCallback);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/finance/invoice/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,143 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-2">新增无发票回款申请</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">预回款金额<font>*</font></td>
|
||||
<td><input type="text" class="layui-input" name="amount" lay-verify="required|number" placeholder="请输入预回款金额" lay-reqText="请输入预回款金额" value=""></td>
|
||||
<td class="layui-td-gray">收款主体<font>*</font></td>
|
||||
<td colspan="3">
|
||||
<select name="invoice_subject" lay-verify="required" lay-reqText="请选择收款主体">
|
||||
<option value="">请选择收款主体</option>
|
||||
{volist name=":get_base_data('enterprise')" id="vo"}
|
||||
<option value="{$vo.id}">{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">付款主体<font>*</font></td>
|
||||
<td>
|
||||
<input type="radio" name="types" lay-filter="type" value="1" title="企业" checked>
|
||||
<input type="radio" name="types" lay-filter="type" value="2" title="个人">
|
||||
</td>
|
||||
<td class="layui-td-gray-2">付款方名称<span class="layui-btn layui-btn-xs invoice-qiye customer-picker">选择</span></td>
|
||||
<td><input type="text" name="invoice_title" class="layui-input" value="" placeholder="请输入付款方名称" lay-verify="required" lay-reqText="请输入付款方名称"></td>
|
||||
<td class="layui-td-gray-2">纳税人识别号<font>*</font></td>
|
||||
<td><input type="text" name="invoice_tax" class="layui-input" value="" placeholder="请输入纳税人识别号,个人输入身份证号码"lay-verify="required" lay-reqText="请输入纳税人识别号,个人输入身份证号码"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联合同</td>
|
||||
<td colspan="5">
|
||||
<input type="text" class="layui-input picker-oa" data-types="contract" name="contract_name" placeholder="请选择需要关联的合同" readonly value="">
|
||||
<input type="hidden" class="layui-input" name="contract_id" value="0">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联项目</td>
|
||||
<td colspan="5">
|
||||
<input type="text" class="layui-input picker-oa" data-types="project" name="project_name" placeholder="请选择需要关联的项目" readonly value="">
|
||||
<input type="hidden" class="layui-input" name="project_id" value="0">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<div class="layui-input-inline">附件</div>
|
||||
<div class="layui-input-inline">
|
||||
<button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button>
|
||||
</div>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="file_ids" value="">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">备注信息</td>
|
||||
<td colspan="5"><textarea name="remark" placeholder="请输入备注信息" class="layui-textarea"></textarea></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="checkBox" data-status="0" data-id="0" data-checkflowid="0" class="pt-3"></div>
|
||||
<div class="pt-4">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
var moduleInit = ['tool','oaPicker','oaCheck','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form, tool = layui.tool, oaPicker = layui.oaPicker,oaCheck = layui.oaCheck,uploadPlus = layui.uploadPlus;
|
||||
//选择抬头类型
|
||||
form.on('radio(type)', function (data) {
|
||||
if(data.value==2){
|
||||
$('.invoice-qiye').hide();
|
||||
}
|
||||
else{
|
||||
$('.invoice-qiye').show();
|
||||
}
|
||||
});
|
||||
|
||||
//相关附件上传
|
||||
var attachment = new uploadPlus();
|
||||
|
||||
//审批相关
|
||||
oaCheck.init({
|
||||
check_name:'invoicea',
|
||||
check_btn:0
|
||||
});
|
||||
|
||||
$('.customer-picker').on('click',function(){
|
||||
let that = $(this),ids = [],titles=[],tax_num=[],tax_bank=[],tax_banksn=[],tax_mobile=[],tax_address=[];
|
||||
let callback = function(data){
|
||||
for ( var i = 0; i <data.length; i++){
|
||||
ids.push(data[i].id);
|
||||
titles.push(data[i].name);
|
||||
tax_num.push(data[i].tax_num);
|
||||
tax_bank.push(data[i].tax_bank);
|
||||
tax_banksn.push(data[i].tax_banksn);
|
||||
tax_mobile.push(data[i].tax_mobile);
|
||||
tax_address.push(data[i].tax_address);
|
||||
}
|
||||
//that.val(titles.join(','));
|
||||
//that.next().val(ids.join(','));
|
||||
$('[name="invoice_title"]').val(titles.join(','));
|
||||
$('[name="invoice_tax"]').val(tax_num.join(','));
|
||||
$('[name="invoice_bank"]').val(tax_bank.join(','));
|
||||
$('[name="invoice_account"]').val(tax_banksn.join(','));
|
||||
$('[name="invoice_phone"]').val(tax_mobile.join(','));
|
||||
$('[name="invoice_address"]').val(tax_address.join(','));
|
||||
}
|
||||
oaPicker.picker('customer',1,callback,{});
|
||||
});
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
let checkCallback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
data.field.check_name = 'invoicea';
|
||||
data.field.action_id = e.data.return_id;
|
||||
oaCheck.submit(data.field,checkCallback);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/finance/invoice/add_a", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,237 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
{block name="style"}
|
||||
<style>
|
||||
.tab-5 .search-item,.tab-6 .search-item{display:none;}
|
||||
</style>
|
||||
{/block}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
|
||||
<div class="p-page">
|
||||
<div class="layui-card border-x border-t" style="margin-bottom:0; box-shadow:0 0 0 0 rgb(5 32 96 / 0%)">
|
||||
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this">全部</li>
|
||||
<li>我申请的</li>
|
||||
<li>待我审批</li>
|
||||
<li>我已审批</li>
|
||||
<li>抄送我的</li>
|
||||
<li>已开具</li>
|
||||
<li>已作废</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<form class="layui-form gg-form-bar border-x tab-0" id="barsearchform">
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="diff_time" placeholder="选择开票时间区间" readonly name="diff_time">
|
||||
</div>
|
||||
<div class="layui-input-inline search-item" style="width:120px;">
|
||||
<select name="check_status">
|
||||
<option value="">选择审批状态</option>
|
||||
{volist name=":get_check_status()" id="vo"}
|
||||
<option value="{$key}">{$vo}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline search-item" style="width:120px;">
|
||||
<select name="open_status">
|
||||
<option value="">开票状态</option>
|
||||
<option value="0">未开票</option>
|
||||
<option value="1">已开票</option>
|
||||
<option value="2">已作废</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<input type="hidden" name="tab" value="0"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="table_invoice" lay-filter="table_invoice"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm tool-add" type="button" data-href="/finance/invoice/add">+ 添加开票申请</button>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tablePlus','laydatePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus, tool = layui.tool, laydatePlus = layui.laydatePlus, element = layui.element;
|
||||
//tab切换
|
||||
element.on('tab(tab)', function(data){
|
||||
$('[name="tab"]').val(data.index);
|
||||
$("#barsearchform")[0].reset();
|
||||
$("#barsearchform").attr('class','layui-form gg-form-bar border-x tab-'+data.index);
|
||||
layui.pageTable.reload({where:{tab:data.index},page:{curr:1}});
|
||||
return false;
|
||||
});
|
||||
|
||||
//日期范围
|
||||
var diff_time = new laydatePlus({'target':'diff_time'});
|
||||
|
||||
layui.pageTable = table.render({
|
||||
elem: "#table_invoice"
|
||||
,toolbar: "#toolbarDemo"
|
||||
,title: '发票列表'
|
||||
,url: "/finance/invoice/datalist"
|
||||
,page: true
|
||||
,limit: 20
|
||||
,cellMinWidth: 80
|
||||
,height: 'full-154'
|
||||
,cols: [[
|
||||
{
|
||||
field: 'id',
|
||||
title: 'ID号',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'invoice_title',
|
||||
title: '开票抬头',
|
||||
minWidth: 240,
|
||||
templet:function(d){
|
||||
var html='<span class="layui-badge layui-bg-blue">企业</span> '+d.invoice_title;
|
||||
if(d.types==2){
|
||||
html='<span class="layui-badge layui-bg-green">个人</span> '+d.invoice_title;
|
||||
}
|
||||
return html;
|
||||
}
|
||||
}, {
|
||||
field: 'amount',
|
||||
title: '发票金额(元)',
|
||||
align: 'right',
|
||||
width: 100,
|
||||
},{
|
||||
field: 'invoice_type',
|
||||
title: '开票类型',
|
||||
align: 'center',
|
||||
width: 120,
|
||||
templet:function(d){
|
||||
var html='-';
|
||||
if(d.invoice_type==1){
|
||||
html='<span class="green">增值税专用发票</span>';
|
||||
}
|
||||
else if(d.invoice_type==2){
|
||||
html='<span class="blue">普通发票</span>';
|
||||
}
|
||||
else if(d.invoice_type==3){
|
||||
html='<span class="red">专业发票</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field:'check_status',title: '审批状态',width:100, align:'center',templet: function(d){
|
||||
var html = '<span class="check-status-color-'+d.check_status+'">『'+d.check_status_str+'』</span>';
|
||||
return html;
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'admin_name',
|
||||
title: '发票申请员工',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'department',
|
||||
title: '发票申请部门',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},{
|
||||
field: 'create_time',
|
||||
title: '申请时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'check_user',
|
||||
title: '当前审核人'
|
||||
},{
|
||||
field: 'open_status',
|
||||
title: '开票状态',
|
||||
align: 'center',
|
||||
width: 90,
|
||||
templet:function(d){
|
||||
var html='';
|
||||
if(d.check_status==2){
|
||||
html = '<span class="red">『未开票』</span>';
|
||||
if(d.open_status==1){
|
||||
html = '<span class="green">『已开票』</span>';
|
||||
}
|
||||
}
|
||||
else{
|
||||
html='-';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'open_name',
|
||||
title: '开票人',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'open_time',
|
||||
title: '开票日期',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'code',
|
||||
title: '发票号码',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},{
|
||||
field: 'right',
|
||||
fixed: 'right',
|
||||
title: '操作',
|
||||
width: 130,
|
||||
align: 'center',
|
||||
templet:function(d){
|
||||
var html='<div class="layui-btn-group">';
|
||||
var btn1='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</span>';
|
||||
var btn2='<span class="layui-btn layui-btn-xs" lay-event="edit">编辑</span>';
|
||||
var btn3='<span class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</span>';
|
||||
html+=btn1;
|
||||
if((d.check_status==0 ||d.check_status==4) && d.admin_id==login_admin){
|
||||
html+=btn2+btn3;
|
||||
}
|
||||
html+='</div>';
|
||||
return html;
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
table.on('tool(table_invoice)',function (obj) {
|
||||
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
|
||||
var data = obj.data;
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/finance/invoice/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'edit') {
|
||||
tool.side("/finance/invoice/add?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'del') {
|
||||
layer.confirm('确定要删除该内容吗?', { icon: 3, title: '提示' }, function (index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
obj.del();
|
||||
}
|
||||
}
|
||||
tool.delete("/finance/invoice/del", { id: data.id }, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,270 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<div class="layui-card border-x border-t" style="margin-bottom:0; box-shadow:0 0 0 0 rgb(5 32 96 / 0%)">
|
||||
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li><a href="/finance/income/datalist">有发票回款</a></li>
|
||||
<li class="layui-this"><a href="/finance/invoice/datalist_a">无发票回款</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<form class="layui-form gg-form-bar border-x" id="barsearchform">
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="diff_time" placeholder="选择回款时间区间" readonly name="diff_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:120px;">
|
||||
<select name="enter_status">
|
||||
<option value="">请选择状态</option>
|
||||
<option value="0">未回款</option>
|
||||
<option value="1">部分回款</option>
|
||||
<option value="2">全部回款</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline search-item" style="width:120px;">
|
||||
<select name="check_status">
|
||||
<option value="">选择审批状态</option>
|
||||
{volist name=":get_check_status()" id="vo"}
|
||||
<option value="{$key}">{$vo}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm tool-add" type="button" data-href="/finance/invoice/add_a">+ 添加无发票回款申请</button>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const auth = "{$auth}";
|
||||
const moduleInit = ['tool','tablePlus','laydatePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus, tool = layui.tool, laydatePlus = layui.laydatePlus, element = layui.element;
|
||||
|
||||
//日期范围
|
||||
var diff_time = new laydatePlus({'target':'diff_time'});
|
||||
layui.pageTable = table.render({
|
||||
elem: "#test"
|
||||
,toolbar: "#toolbarDemo"
|
||||
,url: "/finance/invoice/datalist_a"
|
||||
,page: true
|
||||
,limit: 20
|
||||
,cellMinWidth: 80
|
||||
,height: 'full-154'
|
||||
,cellMinWidth: 80
|
||||
,page: true //开启分页
|
||||
,limit: 20
|
||||
,cols: [
|
||||
[
|
||||
{
|
||||
field: 'id',
|
||||
title: 'ID号',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'enter_status',
|
||||
title: '回款状态',
|
||||
align: 'center',
|
||||
width: 100,
|
||||
templet:function(d){
|
||||
var html='<span class="red">『未回款』</span>';
|
||||
if(d.enter_status==1){
|
||||
html='<span class="blue">『部分回款』</span>';
|
||||
}
|
||||
else if(d.enter_status==2){
|
||||
html='<span class="green">『全部回款』</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'enter_amount',
|
||||
title: '回款金额(元)',
|
||||
align: 'right',
|
||||
width: 100,
|
||||
},{
|
||||
field: 'enter_time',
|
||||
title: '最新回款时间',
|
||||
align: 'center',
|
||||
width: 136
|
||||
},{
|
||||
field: 'invoice_title',
|
||||
minWidth: 240,
|
||||
title: '回款方名称',
|
||||
templet:function(d){
|
||||
var html='<span class="layui-badge layui-bg-blue">企业</span> '+d.invoice_title;
|
||||
if(d.types==2){
|
||||
html='<span class="layui-badge layui-bg-green">个人</span> '+d.invoice_title;
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{field:'check_status',title: '审批状态',width:110, align:'center',templet: function(d){
|
||||
let html='';
|
||||
if(d.open_status==2){
|
||||
html = '<span class="check-status-color-3">『已作废』</span>';
|
||||
}
|
||||
else{
|
||||
html = '<span class="check-status-color-'+d.check_status+'">『'+d.check_status_str+'』</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'amount',
|
||||
title: '申请回款金额(元)',
|
||||
align: 'right',
|
||||
width: 120,
|
||||
},{
|
||||
field: 'admin_name',
|
||||
title: '申请回款人',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'department',
|
||||
title: '所属部门',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},{
|
||||
field: 'create_time',
|
||||
title: '申请时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'check_user',
|
||||
title: '当前审核人'
|
||||
},{
|
||||
field: 'right',
|
||||
fixed: 'right',
|
||||
title: '操作',
|
||||
width: 180,
|
||||
align: 'center',
|
||||
templet:function(d){
|
||||
var html='<div class="layui-btn-group">';
|
||||
var btn1='<span class="layui-btn layui-btn-xs" lay-event="add">回款管理</span>';
|
||||
var btn2='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">回款详情</span>';
|
||||
var btn3='<span class="layui-btn layui-btn-danger layui-btn-xs" lay-event="tovoid">作废</span>';
|
||||
var btn4='<span class="layui-btn layui-btn-danger layui-btn-xs" lay-event="novoid">反作废</span>';
|
||||
|
||||
var btna1='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view_a">详情</span>';
|
||||
var btna2='<span class="layui-btn layui-btn-xs" lay-event="edit_a">编辑</span>';
|
||||
var btna3='<span class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del_a">删除</span>';
|
||||
if(d.check_status==2){
|
||||
if(auth == 1){
|
||||
if(d.enter_status==0){
|
||||
if(d.open_status==2){
|
||||
html+=btn4+'</div>';
|
||||
}
|
||||
else{
|
||||
html+=btn1+btn2+btn3+'</div>';
|
||||
}
|
||||
}
|
||||
else{
|
||||
html+=btn1+btn2+'</div>';
|
||||
}
|
||||
}
|
||||
else{
|
||||
html+=btn2+'</div>';
|
||||
}
|
||||
}
|
||||
else{
|
||||
html+=btna1;
|
||||
if((d.check_status==0 ||d.check_status==4) && d.admin_id==login_admin){
|
||||
html+=btna2+btna3;
|
||||
}
|
||||
html+='</div>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
//监听行工具事件
|
||||
table.on('tool(test)', function(obj) {
|
||||
var data = obj.data;
|
||||
if (obj.event === 'add') {
|
||||
tool.side("/finance/income/add?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/finance/income/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'tovoid') {
|
||||
layer.confirm('确定作废该无发票回款吗?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
$.ajax({
|
||||
url: "/finance/api/tovoid",
|
||||
type:'post',
|
||||
data: {
|
||||
id: data.id
|
||||
},
|
||||
success: function(res) {
|
||||
layer.msg(res.msg);
|
||||
if (res.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
})
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if (obj.event === 'novoid') {
|
||||
layer.confirm('确定反作废该无发票回款吗?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
$.ajax({
|
||||
url: "/finance/api/novoid",
|
||||
type:'post',
|
||||
data: {
|
||||
id: data.id
|
||||
},
|
||||
success: function(res) {
|
||||
layer.msg(res.msg);
|
||||
if (res.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
})
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if (obj.event === 'view_a') {
|
||||
tool.side("/finance/invoice/view_a?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'edit_a') {
|
||||
tool.side("/finance/invoice/add_a?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'del_a') {
|
||||
layer.confirm('确定要删除该内容吗?', { icon: 3, title: '提示' }, function (index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
obj.del();
|
||||
}
|
||||
}
|
||||
tool.delete("/finance/invoice/del_a", { id: data.id }, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,174 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-2">编辑开票申请</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">开票金额<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" class="layui-input" name="amount" lay-verify="required|number" placeholder="请输入开票金额" lay-reqText="请输入开票金额" value="{$detail.amount}">
|
||||
</td>
|
||||
<td class="layui-td-gray">开票类型<font>*</font></td>
|
||||
<td>
|
||||
<select name="invoice_type" lay-verify="required" lay-reqText="请选择开票类型">
|
||||
<option value="">请选择开票类型</option>
|
||||
<option value="1" {eq name="$detail.invoice_type" value="1"}selected{/eq}>增值税专用发票</option>
|
||||
<option value="2" {eq name="$detail.invoice_type" value="2"}selected{/eq}>普通发票</option>
|
||||
<option value="3" {eq name="$detail.invoice_type" value="3"}selected{/eq}>专业发票</option>
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">开票主体<font>*</font></td>
|
||||
<td>
|
||||
<select name="invoice_subject" lay-verify="required" lay-reqText="请选择开票主体">
|
||||
<option value="">请选择开票主体</option>
|
||||
{volist name=":get_base_data('enterprise')" id="vo"}
|
||||
<option value="{$vo.id}" {eq name="$vo.id" value="$detail.invoice_subject"}selected{/eq}>{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">抬头类型<font>*</font></td>
|
||||
<td>
|
||||
<input type="radio" name="types" lay-filter="type" value="1" title="企业" {eq name="$detail.types" value="1"}checked{/eq}>
|
||||
<input type="radio" name="types" lay-filter="type" value="2" title="个人" {eq name="$detail.types" value="2"}checked{/eq}>
|
||||
</td>
|
||||
<td class="layui-td-gray-2">开票抬头<span class="layui-btn layui-btn-xs invoice-qiye customer-picker">选择</span></td>
|
||||
<td><input type="text" name="invoice_title" class="layui-input" placeholder="请输入开票抬头" lay-verify="required" lay-reqText="请输入开票抬头" value="{$detail.invoice_title}"></td>
|
||||
<td class="layui-td-gray-2">纳税人识别号<font>*</font></td>
|
||||
<td><input type="text" name="invoice_tax" class="layui-input" placeholder="请输入纳税人识别号,个人输入身份证号码"lay-verify="required" lay-reqText="请输入纳税人识别号,个人输入身份证号码" value="{$detail.invoice_tax}"></td>
|
||||
</tr>
|
||||
<tr class="invoice-qiye">
|
||||
<td class="layui-td-gray">开户行<font>*</font></td>
|
||||
<td><input type="text" name="invoice_bank" class="layui-input" value="{$detail.invoice_bank}"></td>
|
||||
<td class="layui-td-gray">银行账号<font>*</font></td>
|
||||
<td><input type="text" name="invoice_account" class="layui-input" value="{$detail.invoice_account}"></td>
|
||||
<td class="layui-td-gray-2">银行营业网点</td>
|
||||
<td><input type="text" name="invoice_banking" class="layui-input" value="{$detail.invoice_banking}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">电话号码</td>
|
||||
<td><input type="text" name="invoice_phone" class="layui-input" value="{$detail.invoice_phone}"></td>
|
||||
<td class="layui-td-gray">地址</td>
|
||||
<td colspan="3"><input type="text" name="invoice_address" class="layui-input" value="{$detail.invoice_address}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联合同</td>
|
||||
<td colspan="5">
|
||||
<input type="text" class="layui-input picker-oa" data-types="contract" name="contract_name" placeholder="请选择需要关联的合同" readonly value="{$detail.contract_name|default=''}">
|
||||
<input type="hidden" class="layui-input" name="contract_id" value="{$detail.contract_id}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联项目</td>
|
||||
<td colspan="5">
|
||||
<input type="text" class="layui-input picker-oa" data-types="project" name="project_name" placeholder="请选择需要关联的项目" readonly value="{$detail.project_name|default=''}">
|
||||
<input type="hidden" class="layui-input" name="project_id" value="{$detail.project_id}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<div class="layui-input-inline">附件</div>
|
||||
<div class="layui-input-inline">
|
||||
<button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button>
|
||||
</div>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="file_ids" value="{$detail.file_ids}">
|
||||
{notempty name="$detail.file_ids"}
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo)}</div>
|
||||
{/volist}
|
||||
{/notempty}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">备注信息</td>
|
||||
<td colspan="5"><textarea name="remark" placeholder="请输入备注信息" class="layui-textarea">{$detail.remark|default=''}</textarea></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="checkBox" class="pt-3" data-status="{$detail.check_status}" data-id="{$detail.id}" data-checkflowid="{$detail.check_flow_id}"></div>
|
||||
<div class="pt-4">
|
||||
<input type="hidden" name="id" value="{$detail.id}"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
var moduleInit = ['tool','oaPicker','oaCheck','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form, tool = layui.tool, oaPicker = layui.oaPicker,oaCheck = layui.oaCheck,uploadPlus = layui.uploadPlus;
|
||||
//选择抬头类型
|
||||
form.on('radio(type)', function (data) {
|
||||
if(data.value==2){
|
||||
$('.invoice-qiye').hide();
|
||||
}
|
||||
else{
|
||||
$('.invoice-qiye').show();
|
||||
}
|
||||
});
|
||||
|
||||
//相关附件上传
|
||||
var attachment = new uploadPlus();
|
||||
|
||||
//审批相关
|
||||
oaCheck.init({
|
||||
check_name:'invoice',
|
||||
check_btn:0
|
||||
});
|
||||
|
||||
$('.customer-picker').on('click',function(){
|
||||
let that = $(this),ids = [],titles=[];
|
||||
let callback = function(data){
|
||||
for ( var i = 0; i <data.length; i++){
|
||||
ids.push(data[i].id);
|
||||
titles.push(data[i].name);
|
||||
tax_num.push(data[i].tax_num);
|
||||
tax_bank.push(data[i].tax_bank);
|
||||
tax_banksn.push(data[i].tax_banksn);
|
||||
tax_mobile.push(data[i].tax_mobile);
|
||||
tax_address.push(data[i].tax_address);
|
||||
}
|
||||
//that.val(titles.join(','));
|
||||
//that.next().val(ids.join(','));
|
||||
$('[name="invoice_title"]').val(titles.join(','));
|
||||
$('[name="invoice_tax"]').val(tax_num.join(','));
|
||||
$('[name="invoice_bank"]').val(tax_bank.join(','));
|
||||
$('[name="invoice_account"]').val(tax_banksn.join(','));
|
||||
$('[name="invoice_phone"]').val(tax_mobile.join(','));
|
||||
$('[name="invoice_address"]').val(tax_address.join(','));
|
||||
}
|
||||
oaPicker.picker('customer',1,callback,{});
|
||||
});
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
let checkCallback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
data.field.check_name = 'invoice';
|
||||
data.field.action_id = e.data.return_id;
|
||||
oaCheck.submit(data.field,checkCallback);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/finance/invoice/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,151 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-2">编辑无发票回款申请</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">预回款金额<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" class="layui-input" name="amount" lay-verify="required|number" placeholder="请输入预回款金额" lay-reqText="请输入预回款金额" value="{$detail.amount}">
|
||||
</td>
|
||||
<td class="layui-td-gray">收款主体<font>*</font></td>
|
||||
<td colspan="3">
|
||||
<select name="invoice_subject" lay-verify="required" lay-reqText="请选择收款主体">
|
||||
<option value="">请选择收款主体</option>
|
||||
{volist name=":get_base_data('enterprise')" id="vo"}
|
||||
<option value="{$vo.id}" {eq name="$vo.id" value="$detail.invoice_subject"}selected{/eq}>{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">付款主体<font>*</font></td>
|
||||
<td>
|
||||
<input type="radio" name="types" lay-filter="type" value="1" title="企业" {eq name="$detail.types" value="1"}checked{/eq}>
|
||||
<input type="radio" name="types" lay-filter="type" value="2" title="个人" {eq name="$detail.types" value="2"}checked{/eq}>
|
||||
</td>
|
||||
<td class="layui-td-gray-2">付款方名称<span class="layui-btn layui-btn-xs invoice-qiye customer-picker">选择</span></td>
|
||||
<td><input type="text" name="invoice_title" class="layui-input" placeholder="请输入付款方名称" lay-verify="required" lay-reqText="请输入付款方名称" value="{$detail.invoice_title}"></td>
|
||||
<td class="layui-td-gray-2">纳税人识别号<font>*</font></td>
|
||||
<td><input type="text" name="invoice_tax" class="layui-input" placeholder="请输入纳税人识别号,个人输入身份证号码"lay-verify="required" lay-reqText="请输入纳税人识别号,个人输入身份证号码" value="{$detail.invoice_tax}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联合同</td>
|
||||
<td colspan="5">
|
||||
<input type="text" class="layui-input picker-oa" data-types="contract" name="contract_name" placeholder="请选择需要关联的合同" readonly value="{$detail.contract_name|default=''}">
|
||||
<input type="hidden" class="layui-input" name="contract_id" value="{$detail.contract_id}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联项目</td>
|
||||
<td colspan="5">
|
||||
<input type="text" class="layui-input picker-oa" data-types="project" name="project_name" placeholder="请选择需要关联的项目" readonly value="{$detail.project_name|default=''}">
|
||||
<input type="hidden" class="layui-input" name="project_id" value="{$detail.project_id}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<div class="layui-input-inline">附件</div>
|
||||
<div class="layui-input-inline">
|
||||
<button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button>
|
||||
</div>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="file_ids" value="{$detail.file_ids}">
|
||||
{notempty name="$detail.file_ids"}
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo)}</div>
|
||||
{/volist}
|
||||
{/notempty}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">备注信息</td>
|
||||
<td colspan="5"><textarea name="remark" placeholder="请输入备注信息" class="layui-textarea">{$detail.remark|default=''}</textarea></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="checkBox" class="pt-3" data-status="{$detail.check_status}" data-id="{$detail.id}" data-checkflowid="{$detail.check_flow_id}"></div>
|
||||
<div class="pt-4">
|
||||
<input type="hidden" name="id" value="{$detail.id}"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
var moduleInit = ['tool','oaPicker','oaCheck','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form, tool = layui.tool, oaPicker = layui.oaPicker,oaCheck = layui.oaCheck,uploadPlus = layui.uploadPlus;
|
||||
//选择抬头类型
|
||||
form.on('radio(type)', function (data) {
|
||||
if(data.value==2){
|
||||
$('.invoice-qiye').hide();
|
||||
}
|
||||
else{
|
||||
$('.invoice-qiye').show();
|
||||
}
|
||||
});
|
||||
|
||||
//相关附件上传
|
||||
var attachment = new uploadPlus();
|
||||
|
||||
//审批相关
|
||||
oaCheck.init({
|
||||
check_name:'invoice',
|
||||
check_btn:0
|
||||
});
|
||||
|
||||
$('.customer-picker').on('click',function(){
|
||||
let that = $(this),ids = [],titles=[];
|
||||
let callback = function(data){
|
||||
for ( var i = 0; i <data.length; i++){
|
||||
ids.push(data[i].id);
|
||||
titles.push(data[i].name);
|
||||
tax_num.push(data[i].tax_num);
|
||||
tax_bank.push(data[i].tax_bank);
|
||||
tax_banksn.push(data[i].tax_banksn);
|
||||
tax_mobile.push(data[i].tax_mobile);
|
||||
tax_address.push(data[i].tax_address);
|
||||
}
|
||||
//that.val(titles.join(','));
|
||||
//that.next().val(ids.join(','));
|
||||
$('[name="invoice_title"]').val(titles.join(','));
|
||||
$('[name="invoice_tax"]').val(tax_num.join(','));
|
||||
$('[name="invoice_bank"]').val(tax_bank.join(','));
|
||||
$('[name="invoice_account"]').val(tax_banksn.join(','));
|
||||
$('[name="invoice_phone"]').val(tax_mobile.join(','));
|
||||
$('[name="invoice_address"]').val(tax_address.join(','));
|
||||
}
|
||||
oaPicker.picker('customer',1,callback,{});
|
||||
});
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
let checkCallback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
data.field.check_name = 'invoice';
|
||||
data.field.action_id = e.data.return_id;
|
||||
oaCheck.submit(data.field,checkCallback);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/finance/invoice/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,319 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
{block name="style"}
|
||||
<style>
|
||||
.tab-1 .search-item{display:none;}
|
||||
</style>
|
||||
{/block}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<div class="layui-card border-x border-t" style="margin-bottom:0; box-shadow:0 0 0 0 rgb(5 32 96 / 0%)">
|
||||
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this">正常</li>
|
||||
<li>已作废</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<form class="layui-form gg-form-bar border-x tab-0" id="barsearchform">
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="diff_time" placeholder="选择时间区间" readonly name="diff_time">
|
||||
</div>
|
||||
<div class="layui-input-inline search-item">
|
||||
<select name="open_status">
|
||||
<option value="">请选择状态</option>
|
||||
<option value="0">待开具</option>
|
||||
<option value="1">已开具</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<input type="hidden" name="tab" value="0"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<h3 class="h3-title" style="height:32px;">发票列表</h3>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const auth = {$authInvoice};
|
||||
const moduleInit = ['tool','tablePlus','laydatePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus, tool = layui.tool, laydatePlus = layui.laydatePlus, element = layui.element;
|
||||
//tab切换
|
||||
element.on('tab(tab)', function(data){
|
||||
$('[name="tab"]').val(data.index);
|
||||
$("#barsearchform")[0].reset();
|
||||
$("#barsearchform").attr('class','layui-form gg-form-bar border-x tab-'+data.index);
|
||||
layui.pageTable.reload({where:{tab:data.index},page:{curr:1}});
|
||||
return false;
|
||||
});
|
||||
|
||||
//日期范围
|
||||
var diff_time = new laydatePlus({'target':'diff_time'});
|
||||
|
||||
layui.pageTable = table.render({
|
||||
elem: '#test',
|
||||
title: '开票记录列表',
|
||||
toolbar: '#toolbarDemo',
|
||||
url: "/finance/invoice/record", //数据接口
|
||||
cellMinWidth: 80,
|
||||
page: true, //开启分页
|
||||
limit: 20,
|
||||
height: 'full-154',
|
||||
totalRow: true,
|
||||
cols: [[
|
||||
{
|
||||
field: 'id',
|
||||
title: 'ID号',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'invoice_title',
|
||||
title: '开票抬头',
|
||||
minWidth: 240,
|
||||
templet:function(d){
|
||||
var html='<span class="layui-badge layui-bg-blue">企业</span> '+d.invoice_title;
|
||||
if(d.types==2){
|
||||
html='<span class="layui-badge layui-bg-green">个人</span> '+d.invoice_title;
|
||||
}
|
||||
return html;
|
||||
},
|
||||
totalRowText: '<div style="text-align:right">合计</div>'
|
||||
}, {
|
||||
field: 'amount',
|
||||
title: '发票金额(元)',
|
||||
align: 'right',
|
||||
width: 120,
|
||||
totalRow: function (d) {return d.TOTAL_ROW.amount}
|
||||
},{
|
||||
field: 'invoice_type',
|
||||
title: '开票类型',
|
||||
align: 'center',
|
||||
width: 120,
|
||||
templet:function(d){
|
||||
var html='-';
|
||||
if(d.invoice_type==1){
|
||||
html='<span class="green">增值税专用发票</span>';
|
||||
}
|
||||
else if(d.invoice_type==2){
|
||||
html='<span class="blue">普通发票</span>';
|
||||
}
|
||||
else if(d.invoice_type==3){
|
||||
html='<span class="red">专业发票</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'open_status',
|
||||
title: '开票状态',
|
||||
align: 'center',
|
||||
width: 90,
|
||||
templet:function(d){
|
||||
var html='<span class="red">『未开具』</span>';
|
||||
if(d.open_status==1){
|
||||
html='<span class="green">『已开具』</span>';
|
||||
}
|
||||
else if(d.open_status==2){
|
||||
html='<span class="yellow">『已作废』</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'admin_name',
|
||||
title: '发票申请员工',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'department',
|
||||
title: '发票申请部门',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},{
|
||||
field: 'create_time',
|
||||
title: '申请时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'check_user',
|
||||
title: '当前审核人'
|
||||
},{
|
||||
field: 'open_name',
|
||||
title: '开票人',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'open_time',
|
||||
title: '开票日期',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'code',
|
||||
title: '发票号码',
|
||||
align: 'center',
|
||||
width: 120
|
||||
}, {
|
||||
field: 'right',
|
||||
fixed: 'right',
|
||||
title: '操作',
|
||||
width: 170,
|
||||
align: 'center',
|
||||
templet:function(d){
|
||||
var html='<div class="layui-btn-group">';
|
||||
var btn1='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</span>';
|
||||
var btn2='<span class="layui-btn layui-btn-warm layui-btn-xs" lay-event="open">标记为开票</span>';
|
||||
var btn3='<span class="layui-btn layui-btn-xs" lay-event="open">修改开票信息</span>';
|
||||
var btn4='<span class="layui-btn layui-btn-danger layui-btn-xs" lay-event="tovoid">作废</span>';
|
||||
var btn5='<span class="layui-btn layui-btn-danger layui-btn-xs" lay-event="novoid">反作废</span>';
|
||||
html+=btn1;
|
||||
if(auth==1){
|
||||
if(d.open_status==0){
|
||||
html+=btn2;
|
||||
}
|
||||
if(d.open_status==1){
|
||||
html+=btn3+btn4;
|
||||
}
|
||||
if(d.open_status==2){
|
||||
html+=btn5;
|
||||
}
|
||||
}
|
||||
html+='</div>';
|
||||
return html;
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
//监听行工具事件
|
||||
table.on('tool(test)', function(obj) {
|
||||
var data = obj.data;
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/finance/invoice/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if(obj.event === 'open'){
|
||||
layer.open({
|
||||
type: 1
|
||||
,title: '标记为已开票'
|
||||
,area: '368px;'
|
||||
,id: 'LAY_module' //设定一个id,防止重复弹出
|
||||
,btn: ['确定', '取消']
|
||||
,btnAlign: 'c'
|
||||
,content: '<div style="padding-top:15px;">\
|
||||
<div class="layui-form-item">\
|
||||
<label class="layui-form-label">发票号码</label>\
|
||||
<div class="layui-input-inline">\
|
||||
<input type="text" name="code" autocomplete="off" value="'+data.code+'" placeholder="请输入发票号码" class="layui-input">\
|
||||
</div>\
|
||||
</div>\
|
||||
<div class="layui-form-item">\
|
||||
<label class="layui-form-label">开票日期</label>\
|
||||
<div class="layui-input-inline">\
|
||||
<input type="text" id="open_time" name="open_time" autocomplete="off" value="'+data.open_time+'" placeholder="请选择实际开票日期" class="layui-input">\
|
||||
</div>\
|
||||
</div>\
|
||||
<div class="layui-form-item">\
|
||||
<label class="layui-form-label">物流单号</label>\
|
||||
<div class="layui-input-inline">\
|
||||
<input type="text" name="delivery" autocomplete="off" value="'+data.delivery+'" placeholder="请输入物流快递单号" class="layui-input">\
|
||||
</div>\
|
||||
</div>\
|
||||
</div>'
|
||||
,success:function(){
|
||||
layui.laydate.render({
|
||||
elem: '#open_time',
|
||||
showBottom:false
|
||||
});
|
||||
}
|
||||
,yes: function(index){
|
||||
let code = $('#LAY_module').find('[name="code"]').val();
|
||||
let open_time = $('#LAY_module').find('[name="open_time"]').val();
|
||||
let delivery = $('#LAY_module').find('[name="delivery"]').val();
|
||||
if(code == ''){
|
||||
layer.msg('请输入发票号码');
|
||||
return false;
|
||||
}
|
||||
if(open_time == ''){
|
||||
layer.msg('请选择开票时间');
|
||||
return false;
|
||||
}
|
||||
$.ajax({
|
||||
url: "/finance/api/open",
|
||||
type: 'post',
|
||||
data: {
|
||||
id: data.id,
|
||||
code: code,
|
||||
open_time: open_time,
|
||||
delivery: delivery
|
||||
},
|
||||
success: function(e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layer.close(index);
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
,btn2: function(){
|
||||
layer.closeAll();
|
||||
}
|
||||
});
|
||||
}
|
||||
if (obj.event === 'tovoid') {
|
||||
layer.confirm('确定作废该发票吗?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
$.ajax({
|
||||
url: "/finance/api/tovoid",
|
||||
type:'post',
|
||||
data: {
|
||||
id: data.id
|
||||
},
|
||||
success: function(res) {
|
||||
layer.msg(res.msg);
|
||||
if (res.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
})
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if (obj.event === 'novoid') {
|
||||
layer.confirm('确定反作废该发票吗?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
$.ajax({
|
||||
url: "/finance/api/novoid",
|
||||
type:'post',
|
||||
data: {
|
||||
id: data.id
|
||||
},
|
||||
success: function(res) {
|
||||
layer.msg(res.msg);
|
||||
if (res.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
})
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,157 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="layui-form p-page">
|
||||
<h3 class="pb-2">发票详情</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">开票金额</td>
|
||||
<td class="blue">{$detail.amount} 元</td>
|
||||
<td class="layui-td-gray">开票类型</td>
|
||||
<td>
|
||||
{eq name="$detail.invoice_type" value="1"}增值税专用发票{/eq}
|
||||
{eq name="$detail.invoice_type" value="2"}普通发票{/eq}
|
||||
{eq name="$detail.invoice_type" value="3"}专业发票{/eq}
|
||||
</td>
|
||||
<td class="layui-td-gray">开票主体</td>
|
||||
<td>{$detail.subject}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">抬头类型</td>
|
||||
<td>
|
||||
{eq name="$detail.types" value="1"}企业{/eq}
|
||||
{eq name="$detail.types" value="2"}个人{/eq}
|
||||
</td>
|
||||
<td class="layui-td-gray">开票抬头</td>
|
||||
<td>{$detail.invoice_title}</td>
|
||||
<td class="layui-td-gray">电话号码</td>
|
||||
<td>{$detail.invoice_phone}</td>
|
||||
</tr>
|
||||
<tr class="invoice-type" {eq name="$detail.types" value="2"}style="display:none"{/eq}>
|
||||
<td class="layui-td-gray-2">纳税人识别号</td>
|
||||
<td>{$detail.invoice_tax}</td>
|
||||
<td class="layui-td-gray">开户行</td>
|
||||
<td>{$detail.invoice_bank}</td>
|
||||
<td class="layui-td-gray">银行账号</td>
|
||||
<td>{$detail.invoice_account}</td>
|
||||
</tr>
|
||||
<tr class="invoice-type" {eq name="$detail.types" value="2"}style="display:none"{/eq}>
|
||||
<td class="layui-td-gray-2">银行营业网点</td>
|
||||
<td>{$detail.invoice_banking}</td>
|
||||
<td class="layui-td-gray">地址</td>
|
||||
<td colspan="3">{$detail.invoice_address}</td>
|
||||
</tr>
|
||||
{if condition="$detail.contract_id > 0"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联的合同</td>
|
||||
<td colspan="5">{$detail.contract_name|default=''}</td>
|
||||
</tr>
|
||||
{/if}
|
||||
{if condition="$detail.project_id > 0"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联的项目</td>
|
||||
<td colspan="5">{$detail.project_name|default=''}</td>
|
||||
</tr>
|
||||
{/if}
|
||||
{notempty name="$detail.remark"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">备注信息</td>
|
||||
<td colspan="5">{$detail.remark}</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{notempty name="$detail.file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联附件</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{if ( $detail.open_status gt 0)}
|
||||
<tr>
|
||||
<td class="layui-td-gray">发票号码</td>
|
||||
<td>{$detail.code}{eq name="$detail.open_status" value="2"}<span class="yellow">『已作废』</span>{/eq}</td>
|
||||
<td class="layui-td-gray">开票人</td>
|
||||
<td>{$detail.open_admin_name}</td>
|
||||
<td class="layui-td-gray">开票日期</td>
|
||||
<td colspan="3">{$detail.open_time|date='Y-m-d'}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">物流单号</td>
|
||||
<td colspan="5">{$detail.delivery}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<div class="layui-input-inline">发票附件</div>
|
||||
<div class="layui-input-inline">
|
||||
<button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button>
|
||||
</div>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="other_file_ids" value="{$detail.other_file_ids}">
|
||||
{notempty name="$detail.other_file_ids"}
|
||||
{volist name="$detail.other_file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo)}</div>
|
||||
{/volist}
|
||||
{/notempty}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/if}
|
||||
</table>
|
||||
<div id="checkBox" class="pt-3" data-status="{$detail.check_status}" data-id="{$detail.id}" data-checkflowid="{$detail.check_flow_id}"></div>
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const invoice_id = {$detail.id};
|
||||
const moduleInit = ['tool','oaCheck','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool, oaCheck=layui.oaCheck,uploadPlus = layui.uploadPlus;
|
||||
oaCheck.init({
|
||||
check_name:'invoice'
|
||||
});
|
||||
//相关附件上传
|
||||
var attachment = new uploadPlus({
|
||||
"attachment":{
|
||||
uidDelete:true,
|
||||
ajaxSave:function(val){
|
||||
$.ajax({
|
||||
url: "/finance/api/upload_invoice",
|
||||
type:'post',
|
||||
data:{
|
||||
id:invoice_id,
|
||||
other_file_ids:val
|
||||
},
|
||||
success: function (e) {
|
||||
location.reload();
|
||||
}
|
||||
})
|
||||
},
|
||||
ajaxDelete:function(val){
|
||||
$.ajax({
|
||||
url: "/finance/api/upload_invoice",
|
||||
type:'post',
|
||||
data:{
|
||||
id:invoice_id,
|
||||
other_file_ids:val
|
||||
},
|
||||
success: function (e) {
|
||||
location.reload();
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,137 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="layui-form p-page">
|
||||
<h3 class="pb-3">无发票回款详情</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">预回款金额</td>
|
||||
<td class="blue">{$detail.amount} 元</td>
|
||||
<td class="layui-td-gray">收款主体</td>
|
||||
<td colspan="3">{$detail.subject}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">付款主体</td>
|
||||
<td>
|
||||
{eq name="$detail.types" value="1"}企业{/eq}
|
||||
{eq name="$detail.types" value="2"}个人{/eq}
|
||||
</td>
|
||||
<td class="layui-td-gray-2">付款方名称</td>
|
||||
<td>{$detail.invoice_title}</td>
|
||||
<td class="layui-td-gray">纳税人识别号</td>
|
||||
<td>{$detail.invoice_tax}</td>
|
||||
</tr>
|
||||
{if condition="$detail.contract_id > 0"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联的合同</td>
|
||||
<td colspan="5">{$detail.contract_name|default=''}</td>
|
||||
</tr>
|
||||
{/if}
|
||||
{if condition="$detail.project_id > 0"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联的项目</td>
|
||||
<td colspan="5">{$detail.project_name|default=''}</td>
|
||||
</tr>
|
||||
{/if}
|
||||
{notempty name="$detail.remark"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">备注信息</td>
|
||||
<td colspan="5">{$detail.remark}</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{notempty name="$detail.file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联附件</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{if ( $detail.open_status gt 0)}
|
||||
<tr>
|
||||
<td class="layui-td-gray">发票号码</td>
|
||||
<td>{$detail.code}{eq name="$detail.open_status" value="2"}<span class="yellow">『已作废』</span>{/eq}</td>
|
||||
<td class="layui-td-gray">开票人</td>
|
||||
<td>{$detail.open_admin_name}</td>
|
||||
<td class="layui-td-gray">开票日期</td>
|
||||
<td colspan="3">{$detail.open_time|date='Y-m-d'}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">物流单号</td>
|
||||
<td colspan="5">{$detail.delivery}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<div class="layui-input-inline">发票附件</div>
|
||||
<div class="layui-input-inline">
|
||||
<button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button>
|
||||
</div>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="other_file_ids" value="{$detail.other_file_ids}">
|
||||
{notempty name="$detail.other_file_ids"}
|
||||
{volist name="$detail.other_file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo)}</div>
|
||||
{/volist}
|
||||
{/notempty}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/if}
|
||||
</table>
|
||||
<div id="checkBox" class="pt-3" data-status="{$detail.check_status}" data-id="{$detail.id}" data-checkflowid="{$detail.check_flow_id}"></div>
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const invoice_id = {$detail.id};
|
||||
const moduleInit = ['tool','oaCheck','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool, oaCheck=layui.oaCheck,uploadPlus = layui.uploadPlus;
|
||||
oaCheck.init({
|
||||
check_name:'invoicea'
|
||||
});
|
||||
//相关附件上传
|
||||
var attachment = new uploadPlus({
|
||||
"attachment":{
|
||||
uidDelete:true,
|
||||
ajaxSave:function(val){
|
||||
$.ajax({
|
||||
url: "/finance/api/upload_invoice",
|
||||
type:'post',
|
||||
data:{
|
||||
id:invoice_id,
|
||||
other_file_ids:val
|
||||
},
|
||||
success: function (e) {
|
||||
location.reload();
|
||||
}
|
||||
})
|
||||
},
|
||||
ajaxDelete:function(val){
|
||||
$.ajax({
|
||||
url: "/finance/api/upload_invoice",
|
||||
type:'post',
|
||||
data:{
|
||||
id:invoice_id,
|
||||
other_file_ids:val
|
||||
},
|
||||
success: function (e) {
|
||||
location.reload();
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,123 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-4">
|
||||
<h3 class="pb-2">添加借支申请</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">借支主题<font>*</font></td>
|
||||
<td colspan="3"><input type="text" name="title" value="" lay-verify="required" placeholder="请输入借支主题" lay-reqText="请填写借支主题" class="layui-input"></td>
|
||||
<td class="layui-td-gray">借支企业主体</td>
|
||||
<td>
|
||||
<select name="subject_id" lay-verify="required" lay-reqText="请选择借支企业主体">
|
||||
<option value="">请选择借支企业主体</option>
|
||||
{volist name=":get_base_data('enterprise')" id="vo"}
|
||||
<option value="{$vo.id}">{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">借支金额<font>*</font></td>
|
||||
<td><input type="text" name="cost" value="" lay-verify="required|number" placeholder="请输入借支金额" lay-reqText="请填写借支金额" class="layui-input"></td>
|
||||
<td class="layui-td-gray">借支员工</td>
|
||||
<td>{$user.name} ({$user.department})</td>
|
||||
<td class="layui-td-gray">借支编号<font>*</font></td>
|
||||
<td><input type="text" name="code" value="{$codeno}" lay-verify="required" {eq name="$is_codeno" value="1"}readonly{/eq} placeholder="请输入借支编号" lay-reqText="请填写借支编号" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">借支类型<font>*</font></td>
|
||||
<td colspan="3">
|
||||
<input type="radio" name="types" value="1" title="日常备用金" lay-filter="types" checked>
|
||||
<input type="radio" name="types" value="2" title="项目预支款" lay-filter="types">
|
||||
</td>
|
||||
<td class="layui-td-gray-2">预计归还日期<font>*</font></td>
|
||||
<td><input type="text" name="plan_time" value="" lay-verify="required" readonly placeholder="请完善预计归还日期" lay-reqText="请完善预计归还日期" class="layui-input tool-time"></td>
|
||||
</tr>
|
||||
<tr id="project" style="display:none;">
|
||||
<td class="layui-td-gray">关联项目<font>*</font></td>
|
||||
<td colspan="5">
|
||||
<input type="text" class="layui-input picker-oa" data-types="project" name="ptname" data-where="{apply:'1'}" placeholder="请选择需要关联的项目" readonly value="">
|
||||
<input type="hidden" class="layui-input" name="project_id" value="0">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">借支理由<font>*</font></td>
|
||||
<td colspan="5"><textarea name="content" placeholder="请输入借支理由" class="layui-textarea" lay-verify="required" lay-reqText="请输入借支理由"></textarea></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<div class="layui-input-inline">附件</div>
|
||||
<div class="layui-input-inline"><button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button></div>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="file_ids" value="">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="checkBox" data-status="0" data-id="0" data-checkflowid="0" class="pt-3"></div>
|
||||
<div class="pt-4">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">保存并提交审核</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','oaPicker','uploadPlus','oaCheck'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,uploadPlus = layui.uploadPlus,oaCheck = layui.oaCheck;
|
||||
form.on('radio(types)', function (data) {
|
||||
if(data.value==1){
|
||||
$('#project').hide();
|
||||
}
|
||||
else if(data.value==2){
|
||||
$('#project').show();
|
||||
}
|
||||
});
|
||||
//相关附件上传
|
||||
var attachment = new uploadPlus();
|
||||
//审批相关
|
||||
oaCheck.init({
|
||||
check_name:'loan',
|
||||
check_btn:0
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function(data){
|
||||
if(data.field.types==2 && data.field.ptname==''){
|
||||
layer.msg('请完善关联的项目');
|
||||
return false;
|
||||
}
|
||||
if(data.field.types==1){
|
||||
data.field.project_id=0;
|
||||
}
|
||||
tool.ask('审核期间不能编辑修改,确定借支数据无误?', function(index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
let checkCallback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
data.field.check_name = 'loan';
|
||||
data.field.action_id = e.data.return_id;
|
||||
oaCheck.submit(data.field,checkCallback);
|
||||
}
|
||||
}
|
||||
tool.post("/finance/loan/add", data.field, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,255 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
{block name="style"}
|
||||
<style>
|
||||
.tab-5 .search-item{display:none;}
|
||||
</style>
|
||||
{/block}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
|
||||
<div class="p-page">
|
||||
<div class="layui-card border-x border-t" style="margin-bottom:0; box-shadow:0 0 0 0 rgb(5 32 96 / 0%)">
|
||||
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this">全部</li>
|
||||
<li>我申请的</li>
|
||||
<li>待我审批</li>
|
||||
<li>我已审批</li>
|
||||
<li>抄送我的</li>
|
||||
<li>已打款</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<form class="layui-form gg-form-bar border-x tab-0" id="barsearchform">
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="diff_time" placeholder="选择申请时间区间" readonly name="diff_time">
|
||||
</div>
|
||||
<div class="layui-input-inline search-item" style="width:132px;">
|
||||
<select name="check_status">
|
||||
<option value="">选择审批状态</option>
|
||||
{volist name=":get_check_status()" id="vo"}
|
||||
<option value="{$key}">{$vo}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline search-item" style="width:120px;">
|
||||
<select name="pay_status">
|
||||
<option value="">打款状态</option>
|
||||
<option value="0">未打款</option>
|
||||
<option value="1">已打款</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<input type="hidden" name="tab" value="0"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="table_loan" lay-filter="table_loan"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm tool-add" type="button" data-href="/finance/loan/add">+ 添加借支申请</button>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tablePlus','laydatePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus, tool = layui.tool, laydatePlus = layui.laydatePlus, element = layui.element;
|
||||
//tab切换
|
||||
element.on('tab(tab)', function(data){
|
||||
$('[name="tab"]').val(data.index);
|
||||
$("#barsearchform")[0].reset();
|
||||
$("#barsearchform").attr('class','layui-form gg-form-bar border-x tab-'+data.index);
|
||||
layui.pageTable.reload({where:{tab:data.index},page:{curr:1}});
|
||||
return false;
|
||||
});
|
||||
|
||||
//日期范围
|
||||
var diff_time = new laydatePlus({'target':'diff_time'});
|
||||
layui.pageTable = table.render({
|
||||
elem: "#table_loan"
|
||||
,toolbar: "#toolbarDemo"
|
||||
,title: '借支列表'
|
||||
,url: "/finance/loan/datalist"
|
||||
,page: true
|
||||
,limit: 20
|
||||
,cellMinWidth: 80
|
||||
,height: 'full-154'
|
||||
,cols: [[
|
||||
{
|
||||
field: 'id',
|
||||
title: 'ID号',
|
||||
align: 'center',
|
||||
width: 80
|
||||
}, {
|
||||
field: 'cost',
|
||||
title: '借支金额(元)',
|
||||
align: 'right',
|
||||
width: 110,
|
||||
},{
|
||||
field:'check_status',title: '审批状态',width:110, align:'center',templet: function(d){
|
||||
var html = '<span class="check-status-color-'+d.check_status+'">『'+d.check_status_str+'』</span>';
|
||||
return html;
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'balance_cost',
|
||||
title: '已冲抵金额(元)',
|
||||
align: 'right',
|
||||
width: 110,
|
||||
style:'color:#ff5722',
|
||||
templet: function(d){
|
||||
if(d.pay_status==1){
|
||||
return d.balance_cost;
|
||||
}
|
||||
return '-';
|
||||
}
|
||||
},{
|
||||
field:'balance_status',title: '冲抵状态',width:110, align:'center',templet: function(d){
|
||||
var html = '-';
|
||||
if(d.pay_status==1){
|
||||
html = '<span class="green">未冲抵</span>';
|
||||
if(d.balance_status == 1){
|
||||
html = '<span class="blue">部分冲抵</span>';
|
||||
}
|
||||
if(d.balance_status == 2){
|
||||
html = '<span class="red">已冲抵</span>';
|
||||
}
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'plan_time',
|
||||
title: '计划归还日期',
|
||||
align: 'center',
|
||||
width: 180,
|
||||
templet: function(d){
|
||||
var html = d.plan_time;
|
||||
if(d.delay<1 && d.loan_time<2 && d.back_status==0){
|
||||
html+= '<span class="red" style="font-size:12px;"> (到期,待归还)</span>';
|
||||
}
|
||||
if(d.back_status==1){
|
||||
html+= '<span class="green" style="font-size:12px;"> (已归还)</span>';
|
||||
}
|
||||
if(d.back_status==2){
|
||||
html+= '<span class="green" style="font-size:12px;"> (无需归还)</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'admin_name',
|
||||
title: '借支员工',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'department',
|
||||
title: '借支部门',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},{
|
||||
field: 'title',
|
||||
title: '借支主题',
|
||||
minWidth: 200
|
||||
},{
|
||||
field: 'content',
|
||||
title: '借支理由',
|
||||
minWidth: 200
|
||||
},{
|
||||
field: 'create_time',
|
||||
title: '申请时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'check_user',
|
||||
title: '当前审核人',
|
||||
minWidth: 120
|
||||
},{
|
||||
field: 'pay_status',
|
||||
title: '打款状态',
|
||||
align: 'center',
|
||||
width: 90,
|
||||
templet:function(d){
|
||||
var html='';
|
||||
if(d.check_status==2){
|
||||
html = '<span class="red">『未打款』</span>';
|
||||
if(d.pay_status==1){
|
||||
html = '<span class="green">『已打款』</span>';
|
||||
}
|
||||
}
|
||||
else{
|
||||
html='-';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'pay_name',
|
||||
title: '打款人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'pay_time',
|
||||
title: '打款时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
}, {
|
||||
field: 'right',
|
||||
fixed: 'right',
|
||||
title: '操作',
|
||||
width: 130,
|
||||
align: 'center',
|
||||
templet:function(d){
|
||||
var html='<div class="layui-btn-group">';
|
||||
var btn1='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</span>';
|
||||
var btn2='<span class="layui-btn layui-btn-xs" lay-event="edit">编辑</span>';
|
||||
var btn3='<span class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</span>';
|
||||
html+=btn1;
|
||||
if((d.check_status==0 || d.check_status==4) && d.admin_id==login_admin){
|
||||
html+=btn2+btn3;
|
||||
}
|
||||
html+='</div>';
|
||||
return html;
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
table.on('tool(table_loan)',function (obj) {
|
||||
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
|
||||
var data = obj.data;
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/finance/loan/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'edit') {
|
||||
tool.side("/finance/loan/add?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'del') {
|
||||
layer.confirm('确定要删除该内容吗?', { icon: 3, title: '提示' }, function (index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
obj.del();
|
||||
}
|
||||
}
|
||||
tool.delete("/finance/loan/del", { id: data.id }, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,121 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-2">编辑借支申请</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">借支主题<font>*</font></td>
|
||||
<td colspan="3"><input type="text" name="title" value="{$detail.title|default=''}" lay-verify="required" placeholder="请输入借支主题" lay-reqText="请填写借支主题" class="layui-input"></td>
|
||||
<td class="layui-td-gray">借支企业主体</td>
|
||||
<td>
|
||||
<select name="subject_id" lay-verify="required" lay-reqText="请选择借支企业主体">
|
||||
<option value="">请选择借支企业主体</option>
|
||||
{volist name=":get_base_data('enterprise')" id="vo"}
|
||||
<option value="{$vo.id}" {eq name="$detail.subject_id" value="$vo.id"} selected{/eq}>{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">借支金额<font>*</font></td>
|
||||
<td><input type="text" name="cost" value="{$detail.cost|default=''}" lay-verify="required|number" placeholder="请输入借支金额" lay-reqText="请填写借支金额" class="layui-input"></td>
|
||||
<td class="layui-td-gray">借支员工</td>
|
||||
<td>{$detail.admin_name} ({$detail.department|default=''})</td>
|
||||
<td class="layui-td-gray">借支编号<font>*</font></td>
|
||||
<td><input type="text" name="code" value="{$detail.code|default=''}" {eq name="$is_codeno" value="1"}readonly{/eq} lay-verify="required" readonly placeholder="请输入借支编号" lay-reqText="请填写借支编号" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">借支类型<font>*</font></td>
|
||||
<td colspan="3">
|
||||
<input type="radio" name="types" value="1" title="日常备用金" lay-filter="types" lay-filter="types" {eq name="$detail.types" value="1"} checked{/eq}>
|
||||
<input type="radio" name="types" value="2" title="项目预支款" lay-filter="types" lay-filter="types" {eq name="$detail.types" value="2"} checked{/eq}>
|
||||
</td>
|
||||
<td class="layui-td-gray-2">预计归还日期<font>*</font></td>
|
||||
<td><input type="text" name="plan_time" value="{$detail.plan_time|date='Y-m-d'}" readonly lay-verify="required" placeholder="请完善预计归还日期" lay-reqText="请完善预计归还日期" class="layui-input tool-time"></td>
|
||||
</tr>
|
||||
<tr id="project" style="{$detail.types==1?'display:none;':''}">
|
||||
<td class="layui-td-gray">关联项目<font>*</font></td>
|
||||
<td colspan="5">
|
||||
<input type="text" class="layui-input picker-oa" data-types="project" name="ptname" data-where="{apply:'1'}" placeholder="请选择需要关联的项目" readonly value="{$detail.ptname|default=''}">
|
||||
<input type="hidden" class="layui-input" name="project_id" value="{$detail.project_id|default=0}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">借支理由<font>*</font></td>
|
||||
<td colspan="5"><textarea name="content" placeholder="请输入借支理由" class="layui-textarea" lay-verify="required" lay-reqText="请输入借支理由">{$detail.content|default=''}</textarea></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<div class="layui-input-inline">附件</div>
|
||||
<div class="layui-input-inline"><button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button></div>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" name="file_ids" data-type="file" value="{$detail.file_ids}">
|
||||
{notempty name="$detail.file_ids"}
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadImg{$vo.id}">{:file_card($vo)}</div>
|
||||
{/volist}
|
||||
{/notempty}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="checkBox" data-status="{$detail.check_status}" data-id="{$detail.id}" data-checkflowid="{$detail.check_flow_id}"></div>
|
||||
<div class="pt-4">
|
||||
<input name="id" id="id" type="hidden" value="{$detail.id}">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">保存并提交审核</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','oaPicker','uploadPlus','oaCheck'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,uploadPlus = layui.uploadPlus,oaCheck = layui.oaCheck;
|
||||
//相关附件上传
|
||||
var attachment = new uploadPlus();
|
||||
//审批相关
|
||||
oaCheck.init({
|
||||
check_name:'loan',
|
||||
check_btn:0
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function(data){
|
||||
if(data.field.types==2 && data.field.ptname==''){
|
||||
layer.msg('请完善关联的项目');
|
||||
return false;
|
||||
}
|
||||
if(data.field.types==1){
|
||||
data.field.project_id=0;
|
||||
}
|
||||
tool.ask('审核期间不能编辑修改,确定借支数据无误?', function(index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
let checkCallback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
data.field.check_name = 'loan';
|
||||
data.field.action_id = e.data.return_id;
|
||||
oaCheck.submit(data.field,checkCallback);
|
||||
}
|
||||
}
|
||||
tool.post("/finance/loan/add", data.field, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,221 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<form class="layui-form gg-form-bar border-t border-x" id="barsearchform">
|
||||
<div class="layui-input-inline" style="width:100px;">
|
||||
<input type="text" class="layui-input picker-admin" placeholder="选择借支人员" readonly name="uname" value="">
|
||||
<input type="hidden" name="uid" value="0">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="diff_time" placeholder="选择入账月份区间" readonly name="diff_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:120px;">
|
||||
<select name="pay_status">
|
||||
<option value="">打款状态</option>
|
||||
<option value="0">未打款</option>
|
||||
<option value="1">已打款</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<h3 class="h3-title" style="height:32px;">借支记录</h3>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const auth = {$isAuthLoan};
|
||||
const moduleInit = ['tool','tablePlus','laydatePlus','oaPicker'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,table = layui.tablePlus,tool=layui.tool, laydatePlus = layui.laydatePlus;
|
||||
//日期范围
|
||||
var diff_time = new laydatePlus({'target':'diff_time'});
|
||||
|
||||
layui.pageTable = table.render({
|
||||
elem: '#test',
|
||||
title: '借支记录列表',
|
||||
toolbar: '#toolbarDemo',
|
||||
url: "/finance/loan/record", //数据接口
|
||||
cellMinWidth: 80,
|
||||
page: true, //开启分页
|
||||
limit: 20,
|
||||
height: 'full-114',
|
||||
cols: [
|
||||
[
|
||||
{
|
||||
field: 'id',
|
||||
title: 'ID号',
|
||||
align: 'center',
|
||||
width: 80,
|
||||
totalRowText: '<div style="text-align:right">合计</div>'
|
||||
}, {
|
||||
field: 'cost',
|
||||
title: '借支金额(元)',
|
||||
align: 'right',
|
||||
width: 120,
|
||||
totalRow: function (d) {return d.TOTAL_ROW.cost}
|
||||
},{
|
||||
field: 'pay_status',
|
||||
title: '打款状态',
|
||||
align: 'center',
|
||||
width: 90,
|
||||
templet:function(d){
|
||||
var html='<span class="red">『未打款』</span>';
|
||||
if(d.pay_status==1){
|
||||
html='<span class="yellow">『已打款』</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'balance_cost',
|
||||
title: '已冲抵金额(元)',
|
||||
align: 'right',
|
||||
width: 110,
|
||||
style:'color:#ff5722',
|
||||
templet: function(d){
|
||||
if(d.pay_status==1){
|
||||
return d.balance_cost;
|
||||
}
|
||||
return '-';
|
||||
}
|
||||
},{
|
||||
field:'balance_status',title: '冲抵状态',width:110, align:'center',templet: function(d){
|
||||
var html = '-';
|
||||
if(d.pay_status==1){
|
||||
html = '<span class="green">未冲抵</span>';
|
||||
if(d.balance_status == 1){
|
||||
html = '<span class="blue">部分冲抵</span>';
|
||||
}
|
||||
if(d.balance_status == 2){
|
||||
html = '<span class="red">已冲抵</span>';
|
||||
}
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'plan_time',
|
||||
title: '计划归还日期',
|
||||
align: 'center',
|
||||
width: 180,
|
||||
templet: function(d){
|
||||
var html = d.plan_time;
|
||||
if(d.delay<1 && d.loan_time<2 && d.back_status==0){
|
||||
html+= '<span class="red" style="font-size:12px;"> (到期,待归还)</span>';
|
||||
}
|
||||
if(d.back_status==1){
|
||||
html+= '<span class="green" style="font-size:12px;"> (已归还)</span>';
|
||||
}
|
||||
if(d.back_status==2){
|
||||
html+= '<span class="green" style="font-size:12px;"> (无需归还)</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'admin_name',
|
||||
title: '借支人员',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'department',
|
||||
title: '借支部门',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},{
|
||||
field: 'content',
|
||||
title: '借支理由'
|
||||
},{
|
||||
field: 'create_time',
|
||||
title: '申请时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'pay_name',
|
||||
title: '打款人',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'pay_time',
|
||||
title: '打款确认时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
}, {
|
||||
field: 'right',
|
||||
fixed: 'right',
|
||||
title: '操作',
|
||||
width: 136,
|
||||
align: 'center',
|
||||
templet:function(d){
|
||||
var html='<div class="layui-btn-group">';
|
||||
var btn1='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</span>';
|
||||
var btn2='<span class="layui-btn layui-btn-warm layui-btn-xs" lay-event="open">标记为已打款</span>';
|
||||
var btn3='<span class="layui-btn layui-bg-red layui-btn-xs" lay-event="back">标记为已归还</span>';
|
||||
html+=btn1;
|
||||
if(d.pay_status==0 && auth==1){
|
||||
html+=btn2;
|
||||
}
|
||||
if(d.pay_status == 1 && d.balance_status<2 && d.back_status==0 && auth==1){
|
||||
html+=btn3;
|
||||
}
|
||||
html+='</div>';
|
||||
return html;
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
//监听行工具事件
|
||||
table.on('tool(test)', function(obj) {
|
||||
var data = obj.data;
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/finance/loan/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if(obj.event === 'open'){
|
||||
layer.confirm('确定标记为已打款?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/finance/api/topay2", {id: data.id}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if(obj.event === 'back'){
|
||||
layer.confirm('确定标记为已归还?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/finance/api/topay3", {id: data.id}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,146 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="layui-form p-page">
|
||||
<h3 class="pb-2">借支详情</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">借支主题</td>
|
||||
<td colspan="3">{$detail.title}</td>
|
||||
<td class="layui-td-gray-2">借支企业主体</td>
|
||||
<td>{$detail.subject_name|default='-'}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">借支金额</td>
|
||||
<td><span style="color:#1E9FFF">{$detail.cost} 元</span></td>
|
||||
<td class="layui-td-gray">借支员工</td>
|
||||
<td>{$detail.admin_name} ({$detail.department})</td>
|
||||
<td class="layui-td-gray">借支编号</td>
|
||||
<td>{$detail.code|default='-'}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">借支类型</td>
|
||||
<td colspan="3">
|
||||
{eq name="$detail.types" value="1"}日常备用金{/eq}
|
||||
{eq name="$detail.types" value="2"}项目预支款{/eq}
|
||||
</td>
|
||||
<td class="layui-td-gray-2">预计归还日期</td>
|
||||
<td>{$detail.plan_time|date='Y-m-d'}</td>
|
||||
</tr>
|
||||
{notempty name="$detail.project_id"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联项目</td>
|
||||
<td colspan="5">{$detail.ptname|default=''}</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
<tr>
|
||||
<td class="layui-td-gray">借支理由</td>
|
||||
<td colspan="5">{$detail.content}</td>
|
||||
</tr>
|
||||
{if ( $detail.check_status eq 2)}
|
||||
{if ( $detail.pay_status eq 1)}
|
||||
<tr>
|
||||
<td class="layui-td-gray">打款状态</td>
|
||||
<td><span class="yellow">已打款</span></td>
|
||||
<td class="layui-td-gray">打款人</td>
|
||||
<td>{$detail.pay_admin}</td>
|
||||
<td class="layui-td-gray">打款时间</td>
|
||||
<td>{$detail.pay_time}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">冲抵状态</td>
|
||||
<td>
|
||||
{eq name="$detail.balance_status" value="0"}<span class="green">未冲抵</span>{/eq}
|
||||
{eq name="$detail.balance_status" value="1"}<span class="blue">部分冲抵</span>{/eq}
|
||||
{eq name="$detail.balance_status" value="2"}<span class="red">已冲抵</span>{/eq}
|
||||
</td>
|
||||
<td class="layui-td-gray-2">已冲抵金额</td>
|
||||
<td colspan="3">{$detail.balance_cost}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">归还状态</td>
|
||||
<td>
|
||||
{eq name="$detail.back_status" value="0"}<span class="red">未还款</span>{/eq}
|
||||
{eq name="$detail.back_status" value="1"}<span class="green">已还款</span>{/eq}
|
||||
{eq name="$detail.back_status" value="2"}<span class="blue">无需还款</span>{/eq}
|
||||
</td>
|
||||
{eq name="$detail.back_status" value="1"}
|
||||
<td class="layui-td-gray">归还经手人</td>
|
||||
<td>{$detail.back_admin}</td>
|
||||
<td class="layui-td-gray">归还时间</td>
|
||||
<td>{$detail.back_time}</td>
|
||||
{/eq}
|
||||
</tr>
|
||||
{else/}
|
||||
<tr>
|
||||
<td class="layui-td-gray">打款状态</td>
|
||||
<td><span class="red">未打款</span></td>
|
||||
<td class="layui-td-gray">打款人</td>
|
||||
<td>-</td>
|
||||
<td class="layui-td-gray">打款时间</td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
{/if}
|
||||
{/if}
|
||||
{notempty name="$detail.expense"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">冲抵记录</td>
|
||||
<td colspan="5">
|
||||
<table class="layui-table layui-table-min" style="margin:0">
|
||||
<tr>
|
||||
<th>报销总金额(元)</th>
|
||||
<th>冲抵金额(元)</th>
|
||||
<th>需打款金额(元)</th>
|
||||
<th>报销凭证编号</th>
|
||||
<th>原始单据日期</th>
|
||||
<th>入账月份</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
{volist name="$detail.expense" id="vo"}
|
||||
<tr>
|
||||
<td class="blue">{$vo.cost}</td>
|
||||
<td class="green">{$vo.balance_cost}</td>
|
||||
<td class="red">{$vo.pay_amount}</td>
|
||||
<td>{$vo.code}</td>
|
||||
<td>{$vo.expense_time|date='Y-m-d'}</td>
|
||||
<td>{$vo.income_month|date='Y-m'}</td>
|
||||
<td><a data-href="/finance/expense/view?id={$vo.id}" class="side-a">详情</a></td>
|
||||
</tr>
|
||||
{/volist}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{notempty name="$detail.file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">相关附件</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadImg{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
</table>
|
||||
|
||||
<div id="checkBox" class="pt-3" data-status="{$detail.check_status}" data-id="{$detail.id}" data-checkflowid="{$detail.check_flow_id}"></div>
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','oaCheck'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool, oaCheck=layui.oaCheck;
|
||||
oaCheck.init({
|
||||
check_name:'loan',
|
||||
check_reversed:null
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,276 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
{block name="style"}
|
||||
<style>
|
||||
.layui-table-min th{font-size:13px; text-align:center; background-color:#f8f8f8;}
|
||||
.layui-table-min td{font-size:13px; padding:6px;text-align:center;}
|
||||
</style>
|
||||
{/block}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="layui-form p-page">
|
||||
<h3 class="pb-3">发票信息</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">发票金额(元)</td>
|
||||
<td class="blue">{$detail.amount}</td>
|
||||
<td class="layui-td-gray">发票类型</td>
|
||||
<td>
|
||||
{eq name="$detail.invoice_type" value="1"}增值税专用发票{/eq}
|
||||
{eq name="$detail.invoice_type" value="2"}普通发票{/eq}
|
||||
{eq name="$detail.invoice_type" value="3"}专业发票{/eq}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">发票抬头</td>
|
||||
<td>{$detail.subject}</td>
|
||||
<td class="layui-td-gray-3">开票主体(供应商)</td>
|
||||
<td>{$detail.supplier_name}</td>
|
||||
</tr>
|
||||
{notempty name="$detail.remark"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">备注信息</td>
|
||||
<td colspan="5">{$detail.remark}</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{notempty name="$detail.file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联附件</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{if condition="$detail.open_admin_id > 0"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">发票号码</td>
|
||||
<td>{$detail.code}</td>
|
||||
<td class="layui-td-gray">开票时间</td>
|
||||
<td>{$detail.open_time}</td>
|
||||
</tr>
|
||||
{/if}
|
||||
{notempty name="$detail.other_file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">发票附件</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.other_file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
</table>
|
||||
|
||||
<h3 class="py-3">付款信息</h3>
|
||||
<form class="layui-form">
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">付款状态</td>
|
||||
<td>
|
||||
{if condition="($detail.pay_status == 0)"}
|
||||
<span class="red">未付款</span>
|
||||
{elseif condition="($detail.pay_status == 1)"}
|
||||
<span class="blue">部分付款</span>
|
||||
{elseif condition="($detail.pay_status == 2)"}
|
||||
<span class="green">全部付款</span>
|
||||
{/if}
|
||||
</td>
|
||||
<td class="layui-td-gray-2">未付款金额(元)</td>
|
||||
<td style="color:#FF5722">{$detail.not_pay}</td>
|
||||
<td class="layui-td-gray-2">已付款金额(元)</td>
|
||||
<td style="color:#1E9FFF">{$detail.pay_amount}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">付款记录</td>
|
||||
<td colspan="5">
|
||||
<table id="interfix" class="layui-table layui-table-min" style="margin:0">
|
||||
<tr>
|
||||
<th style="width:200px;">付款日期</th>
|
||||
<th style="width:200px;">付款金额(元)</th>
|
||||
<th>备注</th>
|
||||
<th style="width:100px;">操作</th>
|
||||
</tr>
|
||||
{empty name="$detail.payment"}
|
||||
<tr class="none_interfix">
|
||||
<td colspan="4" style="text-align: center;">暂无付款记录</td>
|
||||
</tr>
|
||||
{else/}
|
||||
{volist name="$detail.payment" id="vo"}
|
||||
<tr class="more_interfix">
|
||||
<td>{$vo.pay_time | date='Y-m-d'}</td>
|
||||
<td>{$vo.amount}</td>
|
||||
<td style="text-align:left;">{$vo.remarks}</td>
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="remove" data-id="{$vo.id}" data-tiid="{$id}">删除</a></td>
|
||||
</tr>
|
||||
{/volist}
|
||||
{/empty}
|
||||
</table>
|
||||
{if condition="($detail.pay_status lt 2)"}
|
||||
<div class="pt-3"><button class="layui-btn layui-btn-sm" type="button" id="addInterfix">+ 添加付款记录</button></div>
|
||||
{/if}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-3">
|
||||
<input name="ticket_id" id="ticket_id" type="hidden" value="{$id}">
|
||||
<input name="pay_type" id="pay_type" type="hidden" value="1">
|
||||
{if condition="($detail.pay_status lt 2)"}
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">保存付款记录</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
{/if}
|
||||
{if condition="($detail.pay_status eq 0)"}
|
||||
<span class="layui-btn layui-btn-danger" lay-event="all">全部付款</span>
|
||||
{/if}
|
||||
{if condition="($detail.pay_status eq 1)"}
|
||||
<span class="layui-btn layui-btn-danger" lay-event="all">剩余部分全部付款</span>
|
||||
{/if}
|
||||
{if condition="($detail.pay_status gt 0)"}
|
||||
<span class="layui-btn layui-btn-warm" lay-event="refue">全部反付款</span>
|
||||
{/if}
|
||||
</div>
|
||||
</form>
|
||||
<input type="hidden" name="id" value="{$detail.id}">
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,laydate = layui.laydate;
|
||||
//添加表格行
|
||||
$('#addInterfix').on('click',function(){
|
||||
var html = '';
|
||||
html += '<tr class="more_interfix">';
|
||||
html += '<td><input type="text" class="layui-input tool-time" name="pay_time[]" readonly lay-verify="required" lay-reqText="请选择付款日期">';
|
||||
html += '<td><input type="text" class="layui-input" name="amount[]" lay-verify="required|number" lay-reqText="请输入付款金额,数字"></td>';
|
||||
html += '<td><input type="text" class="layui-input" name="remarks[]"></td>';
|
||||
html += '<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>';
|
||||
html += '</tr>';
|
||||
$("#interfix").find('.none_interfix').remove();
|
||||
$("#interfix").append(html);
|
||||
form.render();
|
||||
});
|
||||
//删除表格
|
||||
$('#interfix').on('click', '[lay-event="del"]', function() {
|
||||
$(this).parents(".more_interfix").remove();
|
||||
if($("#interfix").find('.more_interfix').length<1){
|
||||
$("#interfix").append('<tr class="none_interfix"><td colspan="4" style="text-align: center;">暂无付款记录</td></tr>');
|
||||
}
|
||||
});
|
||||
|
||||
//删除付款记录
|
||||
$('#interfix').on('click', '[lay-event="remove"]', function() {
|
||||
var that=$(this);
|
||||
var id=that.data('id');
|
||||
var ticket_id=that.data('tiid');
|
||||
layer.confirm('确定要删除该付款记录?', {icon: 3, title:'提示'}, function(index){
|
||||
$.ajax({
|
||||
url: "/finance/payment/del",
|
||||
type:'post',
|
||||
data:{id:id,ticket_id:ticket_id},
|
||||
success:function(res){
|
||||
layer.msg(res.msg);
|
||||
if(res.code==0){
|
||||
parent.layui.pageTable.reload();
|
||||
window.setTimeout(function(){
|
||||
location.reload();
|
||||
},1200)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function(data){
|
||||
console.log(data.field);
|
||||
if($("#interfix").find('.tool-time').length<1){
|
||||
layer.msg('请添加付款记录');
|
||||
return false;
|
||||
}
|
||||
$.ajax({
|
||||
url: "/finance/payment/add",
|
||||
type:'post',
|
||||
data:data.field,
|
||||
success:function(res){
|
||||
layer.msg(res.msg);
|
||||
if(res.code==0){
|
||||
parent.layui.pageTable.reload();
|
||||
window.setTimeout(function(){
|
||||
location.reload();
|
||||
},1200)
|
||||
}
|
||||
}
|
||||
})
|
||||
return false;
|
||||
});
|
||||
|
||||
$('.layui-form').on('click', '[lay-event="refue"]', function () {
|
||||
var ticket_id=$('#ticket_id').val();
|
||||
layer.confirm('确定要全部反付款?', {icon: 3, title:'提示'}, function(index){
|
||||
$.ajax({
|
||||
url: "/finance/payment/add",
|
||||
type:'post',
|
||||
data:{ticket_id:ticket_id,pay_type:3},
|
||||
success:function(res){
|
||||
layer.msg(res.msg);
|
||||
if(res.code==0){
|
||||
parent.layui.pageTable.reload();
|
||||
window.setTimeout(function(){
|
||||
location.reload();
|
||||
},1200)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
return false;
|
||||
})
|
||||
$('.layui-form').on('click', '[lay-event="all"]', function () {
|
||||
var ticket_id=$('#ticket_id').val();
|
||||
layer.confirm('确定已经全部付款?', {icon: 3, title:'提示'}, function(idx){
|
||||
layer.prompt({title: '选择付款日期', formType: 3,value :'',success: function(layero, index){
|
||||
$('.layui-layer-input').attr('readonly',true);
|
||||
lay('.layui-layer-input').each(function () {
|
||||
laydate.render({
|
||||
elem: this,
|
||||
trigger: 'click',
|
||||
showBottom:false
|
||||
});
|
||||
});
|
||||
layer.close(idx);
|
||||
}
|
||||
}, function(pay_time, index){
|
||||
if(pay_time ==''){
|
||||
layer.msg('选择付款日期');
|
||||
return false;
|
||||
}
|
||||
$.ajax({
|
||||
url: "/finance/payment/add",
|
||||
type:'post',
|
||||
data:{ticket_id:ticket_id,pay_type:2,pay_time:pay_time},
|
||||
success:function(res){
|
||||
layer.msg(res.msg);
|
||||
if(res.code==0){
|
||||
parent.layui.pageTable.reload();
|
||||
window.setTimeout(function(){
|
||||
location.reload();
|
||||
},1200)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
return false;
|
||||
})
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,250 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
{block name="style"}
|
||||
<style>
|
||||
.layui-table-min th{font-size:13px; text-align:center; background-color:#f8f8f8;}
|
||||
.layui-table-min td{font-size:13px; padding:6px;text-align:center;}
|
||||
</style>
|
||||
{/block}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="layui-form p-page">
|
||||
<h3 class="pb-3">无发票付款详情</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">预付款金额(元)</td>
|
||||
<td class="blue">{$detail.amount}</td>
|
||||
<td class="layui-td-gray">付款方</td>
|
||||
<td>{$detail.subject}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-3">收款方(供应商)</td>
|
||||
<td colspan="3">{$detail.supplier_name}</td>
|
||||
</tr>
|
||||
{notempty name="$detail.remark"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">备注信息</td>
|
||||
<td colspan="5">{$detail.remark}</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{notempty name="$detail.file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联附件</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
</table>
|
||||
|
||||
<h3 class="py-3">付款信息</h3>
|
||||
<form class="layui-form">
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">付款状态</td>
|
||||
<td>
|
||||
{if condition="($detail.pay_status == 0)"}
|
||||
<span class="red">未付款</span>
|
||||
{elseif condition="($detail.pay_status == 1)"}
|
||||
<span class="blue">部分付款</span>
|
||||
{elseif condition="($detail.pay_status == 2)"}
|
||||
<span class="green">全部付款</span>
|
||||
{/if}
|
||||
</td>
|
||||
<td class="layui-td-gray-2">未付款金额(元)</td>
|
||||
<td style="color:#FF5722">{$detail.not_pay}</td>
|
||||
<td class="layui-td-gray-2">已付款金额(元)</td>
|
||||
<td style="color:#1E9FFF">{$detail.pay_amount}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">付款记录</td>
|
||||
<td colspan="5">
|
||||
<table id="interfix" class="layui-table layui-table-min" style="margin:0">
|
||||
<tr>
|
||||
<th style="width:200px;">付款日期</th>
|
||||
<th style="width:200px;">付款金额(元)</th>
|
||||
<th>备注</th>
|
||||
<th style="width:100px;">操作</th>
|
||||
</tr>
|
||||
{empty name="$detail.payment"}
|
||||
<tr class="none_interfix">
|
||||
<td colspan="4" style="text-align: center;">暂无付款记录</td>
|
||||
</tr>
|
||||
{else/}
|
||||
{volist name="$detail.payment" id="vo"}
|
||||
<tr class="more_interfix">
|
||||
<td>{$vo.pay_time | date='Y-m-d'}</td>
|
||||
<td>{$vo.amount}</td>
|
||||
<td style="text-align:left;">{$vo.remarks}</td>
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="remove" data-id="{$vo.id}" data-tiid="{$id}">删除</a></td>
|
||||
</tr>
|
||||
{/volist}
|
||||
{/empty}
|
||||
</table>
|
||||
{if condition="($detail.pay_status lt 2)"}
|
||||
<div class="pt-3"><button class="layui-btn layui-btn-sm" type="button" id="addInterfix">+ 添加付款记录</button></div>
|
||||
{/if}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-3">
|
||||
<input name="ticket_id" id="ticket_id" type="hidden" value="{$id}">
|
||||
<input name="pay_type" id="pay_type" type="hidden" value="1">
|
||||
{if condition="($detail.pay_status lt 2)"}
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">保存付款记录</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
{/if}
|
||||
{if condition="($detail.pay_status eq 0)"}
|
||||
<span class="layui-btn layui-btn-danger" lay-event="all">全部付款</span>
|
||||
{/if}
|
||||
{if condition="($detail.pay_status eq 1)"}
|
||||
<span class="layui-btn layui-btn-danger" lay-event="all">剩余部分全部付款</span>
|
||||
{/if}
|
||||
{if condition="($detail.pay_status gt 0)"}
|
||||
<span class="layui-btn layui-btn-warm" lay-event="refue">全部反付款</span>
|
||||
{/if}
|
||||
</div>
|
||||
</form>
|
||||
<input type="hidden" name="id" value="{$detail.id}">
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,laydate = layui.laydate;
|
||||
//添加表格行
|
||||
$('#addInterfix').on('click',function(){
|
||||
var html = '';
|
||||
html += '<tr class="more_interfix">';
|
||||
html += '<td><input type="text" class="layui-input tool-time" name="pay_time[]" readonly lay-verify="required" lay-reqText="请选择付款日期">';
|
||||
html += '<td><input type="text" class="layui-input" name="amount[]" lay-verify="required|number" lay-reqText="请输入付款金额,数字"></td>';
|
||||
html += '<td><input type="text" class="layui-input" name="remarks[]"></td>';
|
||||
html += '<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>';
|
||||
html += '</tr>';
|
||||
$("#interfix").find('.none_interfix').remove();
|
||||
$("#interfix").append(html);
|
||||
form.render();
|
||||
});
|
||||
//删除表格
|
||||
$('#interfix').on('click', '[lay-event="del"]', function() {
|
||||
$(this).parents(".more_interfix").remove();
|
||||
if($("#interfix").find('.more_interfix').length<1){
|
||||
$("#interfix").append('<tr class="none_interfix"><td colspan="4" style="text-align: center;">暂无付款记录</td></tr>');
|
||||
}
|
||||
});
|
||||
|
||||
//删除付款记录
|
||||
$('#interfix').on('click', '[lay-event="remove"]', function() {
|
||||
var that=$(this);
|
||||
var id=that.data('id');
|
||||
var ticket_id=that.data('tiid');
|
||||
layer.confirm('确定要删除该付款记录?', {icon: 3, title:'提示'}, function(index){
|
||||
$.ajax({
|
||||
url: "/finance/payment/del",
|
||||
type:'post',
|
||||
data:{id:id,ticket_id:ticket_id},
|
||||
success:function(res){
|
||||
layer.msg(res.msg);
|
||||
if(res.code==0){
|
||||
parent.layui.pageTable.reload();
|
||||
window.setTimeout(function(){
|
||||
location.reload();
|
||||
},1200)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function(data){
|
||||
console.log(data.field);
|
||||
if($("#interfix").find('.tool-time').length<1){
|
||||
layer.msg('请添加付款记录');
|
||||
return false;
|
||||
}
|
||||
$.ajax({
|
||||
url: "/finance/payment/add",
|
||||
type:'post',
|
||||
data:data.field,
|
||||
success:function(res){
|
||||
layer.msg(res.msg);
|
||||
if(res.code==0){
|
||||
parent.layui.pageTable.reload();
|
||||
window.setTimeout(function(){
|
||||
location.reload();
|
||||
},1200)
|
||||
}
|
||||
}
|
||||
})
|
||||
return false;
|
||||
});
|
||||
|
||||
$('.layui-form').on('click', '[lay-event="refue"]', function () {
|
||||
var ticket_id=$('#ticket_id').val();
|
||||
layer.confirm('确定要全部反付款?', {icon: 3, title:'提示'}, function(index){
|
||||
$.ajax({
|
||||
url: "/finance/payment/add",
|
||||
type:'post',
|
||||
data:{ticket_id:ticket_id,pay_type:3},
|
||||
success:function(res){
|
||||
layer.msg(res.msg);
|
||||
if(res.code==0){
|
||||
parent.layui.pageTable.reload();
|
||||
window.setTimeout(function(){
|
||||
location.reload();
|
||||
},1200)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
return false;
|
||||
})
|
||||
$('.layui-form').on('click', '[lay-event="all"]', function () {
|
||||
var ticket_id=$('#ticket_id').val();
|
||||
layer.confirm('确定已经全部付款?', {icon: 3, title:'提示'}, function(idx){
|
||||
layer.prompt({title: '选择付款日期', formType: 3,value :'',success: function(layero, index){
|
||||
$('.layui-layer-input').attr('readonly',true);
|
||||
lay('.layui-layer-input').each(function () {
|
||||
laydate.render({
|
||||
elem: this,
|
||||
trigger: 'click',
|
||||
showBottom:false
|
||||
});
|
||||
});
|
||||
layer.close(idx);
|
||||
}
|
||||
}, function(pay_time, index){
|
||||
if(pay_time ==''){
|
||||
layer.msg('选择付款日期');
|
||||
return false;
|
||||
}
|
||||
$.ajax({
|
||||
url: "/finance/payment/add",
|
||||
type:'post',
|
||||
data:{ticket_id:ticket_id,pay_type:2,pay_time:pay_time},
|
||||
success:function(res){
|
||||
layer.msg(res.msg);
|
||||
if(res.code==0){
|
||||
parent.layui.pageTable.reload();
|
||||
window.setTimeout(function(){
|
||||
location.reload();
|
||||
},1200)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
return false;
|
||||
})
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,192 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<div class="layui-card border-x border-t" style="margin-bottom:0; box-shadow:0 0 0 0 rgb(5 32 96 / 0%)">
|
||||
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this"><a href="/finance/payment/datalist">有发票付款</a></li>
|
||||
<li><a href="/finance/ticket/datalist_a">无发票付款</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<form class="layui-form gg-form-bar border-x" id="barsearchform">
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="diff_time" placeholder="选择付款时间区间" readonly name="diff_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:120px;">
|
||||
<select name="pay_status">
|
||||
<option value="">请选择状态</option>
|
||||
<option value="0">未付款</option>
|
||||
<option value="1">部分付款</option>
|
||||
<option value="2">全部付款</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<input type="hidden" name="tab" value="0"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<h3 class="h3-title" style="height:32px;">有发票付款</h3>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const auth = "{$auth}";
|
||||
const moduleInit = ['tool','tablePlus','laydatePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus, tool = layui.tool, laydatePlus = layui.laydatePlus, element = layui.element;
|
||||
//tab切换
|
||||
element.on('tab(tab)', function(data){
|
||||
$('[name="tab"]').val(data.index);
|
||||
$("#barsearchform")[0].reset();
|
||||
layui.pageTable.reload({where:{tab:data.index},page:{curr:1}});
|
||||
return false;
|
||||
});
|
||||
|
||||
//日期范围
|
||||
var diff_time = new laydatePlus({'target':'diff_time'});
|
||||
layui.pageTable = table.render({
|
||||
elem: "#test"
|
||||
,toolbar: "#toolbarDemo"
|
||||
,url: "/finance/payment/datalist"
|
||||
,page: true
|
||||
,limit: 20
|
||||
,cellMinWidth: 80
|
||||
,height: 'full-154'
|
||||
,cellMinWidth: 80
|
||||
,page: true //开启分页
|
||||
,limit: 20
|
||||
,cols: [
|
||||
[
|
||||
{
|
||||
field: 'id',
|
||||
title: 'ID号',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'pay_status',
|
||||
title: '付款状态',
|
||||
align: 'center',
|
||||
width: 100,
|
||||
templet:function(d){
|
||||
var html='<span class="red">『未付款』</span>';
|
||||
if(d.pay_status==1){
|
||||
html='<span class="blue">『部分付款』</span>';
|
||||
}
|
||||
else if(d.pay_status==2){
|
||||
html='<span class="green">『全部付款』</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'pay_amount',
|
||||
title: '付款金额(元)',
|
||||
align: 'right',
|
||||
width: 100,
|
||||
},{
|
||||
field: 'pay_time',
|
||||
title: '最新付款时间',
|
||||
align: 'center',
|
||||
width: 136
|
||||
},{
|
||||
field: 'supplier_name',
|
||||
title: '供应商[发票主体]',
|
||||
minWidth: 240
|
||||
},{
|
||||
field: 'amount',
|
||||
title: '发票金额(元)',
|
||||
align: 'right',
|
||||
width: 100,
|
||||
},{
|
||||
field: 'invoice_type',
|
||||
title: '开票类型',
|
||||
align: 'center',
|
||||
width: 120,
|
||||
templet:function(d){
|
||||
var html='-';
|
||||
if(d.invoice_type==1){
|
||||
html='<span style="color:#1E9FFF">增值税专用发票</span>';
|
||||
}
|
||||
else if(d.invoice_type==2){
|
||||
html='<span style="color:#5FB878">普通发票</span>';
|
||||
}
|
||||
else if(d.invoice_type==3){
|
||||
html='<span style="color:#FFB800">专用发票</span>';
|
||||
}
|
||||
else{
|
||||
html='<span style="color:#666666">无需开票</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'admin_name',
|
||||
title: '收票人',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'department',
|
||||
title: '所属部门',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},{
|
||||
field: 'create_time',
|
||||
title: '创建时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'code',
|
||||
title: '发票号码',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'open_time',
|
||||
title: '发票日期',
|
||||
align: 'center',
|
||||
width: 90
|
||||
}, {
|
||||
field: 'right',
|
||||
fixed: 'right',
|
||||
title: '操作',
|
||||
width: 136,
|
||||
align: 'center',
|
||||
templet:function(d){
|
||||
var html='<div class="layui-btn-group">';
|
||||
var btn1='<span class="layui-btn layui-btn-xs" lay-event="add">付款管理</span>';
|
||||
var btn2='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">付款详情</span>';
|
||||
if(auth == 1){
|
||||
return html+btn1+btn2+'</div>';
|
||||
}
|
||||
else{
|
||||
return html+btn2+'</div>';
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
//监听行工具事件
|
||||
table.on('tool(test)', function(obj) {
|
||||
var data = obj.data;
|
||||
if (obj.event === 'add') {
|
||||
tool.side("/finance/payment/add?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/finance/payment/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,117 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<form class="layui-form gg-form-bar border-x border-t" id="barsearchform">
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="diff_time" placeholder="选择付款时间区间" readonly name="diff_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<input type="hidden" name="tab" value="0"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<h3 class="h3-title" style="height:32px;">付款列表</h3>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tablePlus','laydatePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus, tool = layui.tool, laydatePlus = layui.laydatePlus, element = layui.element;
|
||||
//tab切换
|
||||
element.on('tab(tab)', function(data){
|
||||
$('[name="tab"]').val(data.index);
|
||||
$("#barsearchform")[0].reset();
|
||||
layui.pageTable.reload({where:{tab:data.index},page:{curr:1}});
|
||||
return false;
|
||||
});
|
||||
|
||||
//日期范围
|
||||
var diff_time = new laydatePlus({'target':'diff_time'});
|
||||
layui.pageTable = table.render({
|
||||
elem: "#test"
|
||||
,toolbar: "#toolbarDemo"
|
||||
,url: "/finance/payment/record"
|
||||
,page: true
|
||||
,limit: 20
|
||||
,cellMinWidth: 80
|
||||
,height: 'full-114'
|
||||
,cellMinWidth: 80
|
||||
,page: true //开启分页
|
||||
,limit: 20
|
||||
,totalRow: true
|
||||
,cols: [
|
||||
[
|
||||
{
|
||||
field: 'id',
|
||||
title: 'ID号',
|
||||
align: 'center',
|
||||
width: 80,
|
||||
totalRowText: '<div style="text-align:right">合计</div>'
|
||||
},{
|
||||
field: 'amount',
|
||||
title: '付款金额(元)',
|
||||
style: 'color:#16b777',
|
||||
align: 'right',
|
||||
width: 120,
|
||||
totalRow: function (d) {return d.TOTAL_ROW.amount}
|
||||
},{
|
||||
field: 'pay_time',
|
||||
title: '付款时间',
|
||||
align: 'center',
|
||||
width: 110
|
||||
},{
|
||||
field: 'remarks',
|
||||
title: '付款备注'
|
||||
},{
|
||||
field: 'admin_name',
|
||||
title: '登记人',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'create_time',
|
||||
title: '登记时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'code',
|
||||
title: '关联发票号',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'right',
|
||||
fixed: 'right',
|
||||
title: '操作',
|
||||
width: 90,
|
||||
align: 'center',
|
||||
templet:function(d){
|
||||
var html='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">付款详情</span>';
|
||||
return html;
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
//监听行工具事件
|
||||
table.on('tool(test)', function(obj) {
|
||||
var data = obj.data;
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/finance/payment/view?id="+data.ticket_id);
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,159 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="layui-form p-page">
|
||||
{eq name="$detail.invoice_type" value="0"}
|
||||
<h3 class="pb-3">无发票付款详情</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">预付款金额(元)</td>
|
||||
<td class="blue">{$detail.amount}</td>
|
||||
<td class="layui-td-gray">付款方</td>
|
||||
<td>{$detail.subject}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-3">收款方(供应商)</td>
|
||||
<td colspan="3">{$detail.supplier_name}</td>
|
||||
</tr>
|
||||
{notempty name="$detail.remark"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">备注信息</td>
|
||||
<td colspan="3">{$detail.remark}</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{notempty name="$detail.file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联附件</td>
|
||||
<td colspan="3">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
</table>
|
||||
{else/}
|
||||
<h3 class="pb-3">发票信息</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">发票金额(元)</td>
|
||||
<td class="blue">{$detail.amount}</td>
|
||||
<td class="layui-td-gray">发票类型</td>
|
||||
<td>
|
||||
{eq name="$detail.invoice_type" value="1"}增值税专用发票{/eq}
|
||||
{eq name="$detail.invoice_type" value="2"}普通发票{/eq}
|
||||
{eq name="$detail.invoice_type" value="3"}专业发票{/eq}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">发票抬头</td>
|
||||
<td>{$detail.subject}</td>
|
||||
<td class="layui-td-gray-3">开票主体(供应商)</td>
|
||||
<td>{$detail.supplier_name}</td>
|
||||
</tr>
|
||||
{notempty name="$detail.remark"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">备注信息</td>
|
||||
<td colspan="3">{$detail.remark}</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{notempty name="$detail.file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联附件</td>
|
||||
<td colspan="3">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
<tr>
|
||||
<td class="layui-td-gray">发票号码</td>
|
||||
<td>{$detail.code}</td>
|
||||
<td class="layui-td-gray">开票时间</td>
|
||||
<td>{$detail.open_time|date='Y-m-d'}</td>
|
||||
</tr>
|
||||
{notempty name="$detail.other_file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">发票附件</td>
|
||||
<td colspan="3">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.other_file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
</table>
|
||||
{/eq}
|
||||
|
||||
<h3 class="py-3">付款信息</h3>
|
||||
<form class="layui-form">
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">付款状态</td>
|
||||
<td>
|
||||
{if condition="($detail.pay_status == 0)"}
|
||||
<span class="red">未付款</span>
|
||||
{elseif condition="($detail.pay_status == 1)"}
|
||||
<span class="blue">部分付款</span>
|
||||
{elseif condition="($detail.pay_status == 2)"}
|
||||
<span class="green">全部付款</span>
|
||||
{/if}
|
||||
</td>
|
||||
<td class="layui-td-gray-2">未付款金额(元)</td>
|
||||
<td class="red">{$detail.not_pay}</td>
|
||||
<td class="layui-td-gray-2">已付款金额(元)</td>
|
||||
<td class="green">{$detail.pay_amount}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">付款记录</td>
|
||||
<td colspan="5">
|
||||
<table class="layui-table layui-table-min" style="margin:0">
|
||||
<tr>
|
||||
<th style="width:150px;">付款日期</th>
|
||||
<th style="width:150px;">付款金额(元)</th>
|
||||
<th>备注</th>
|
||||
<th style="width:100px;">登记人</th>
|
||||
<th style="width:150px;">登记时间</th>
|
||||
</tr>
|
||||
{empty name="$detail.payment"}
|
||||
<tr class="none_interfix">
|
||||
<td colspan="5" style="text-align: center;">暂无付款记录</td>
|
||||
</tr>
|
||||
{else/}
|
||||
{volist name="$detail.payment" id="vo"}
|
||||
<tr class="more_interfix">
|
||||
<td>{$vo.pay_time | date='Y-m-d'}</td>
|
||||
<td>{$vo.amount}</td>
|
||||
<td style="text-align:left;">{$vo.remarks}</td>
|
||||
<td>{$vo.admin}</td>
|
||||
<td>{$vo.create_time | date='Y-m-d H:i:s'}</td>
|
||||
</tr>
|
||||
{/volist}
|
||||
{/empty}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<input type="hidden" name="id" value="{$detail.id}">
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool;
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,121 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-2">新增收票信息</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">发票金额<font>*</font></td>
|
||||
<td><input type="text" class="layui-input" name="amount" lay-verify="required|number" placeholder="请输入发票金额" lay-reqText="请输入发票金额" value=""></td>
|
||||
<td class="layui-td-gray">发票号码<font>*</font></td>
|
||||
<td><input type="text" class="layui-input" name="code" lay-verify="required" placeholder="请输入发票号码" lay-reqText="请输入发票号码" value=""></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">发票类型<font>*</font></td>
|
||||
<td>
|
||||
<select name="invoice_type" lay-verify="required" lay-reqText="请选择发票类型">
|
||||
<option value="">请选择发票类型</option>
|
||||
<option value="1">增值税专用发票</option>
|
||||
<option value="2">普通发票</option>
|
||||
<option value="3">专业发票</option>
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">发票日期<font>*</font></td>
|
||||
<td><input type="text" class="layui-input tool-time" name="open_time" lay-verify="required" readonly placeholder="请选择" lay-reqText="请完善发票日期" value=""></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">发票抬头<font>*</font></td>
|
||||
<td>
|
||||
<select name="invoice_subject" lay-verify="required" lay-reqText="请选择发票抬头">
|
||||
<option value="">请选择发票抬头</option>
|
||||
{volist name=":get_base_data('enterprise')" id="vo"}
|
||||
<option value="{$vo.id}">{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray-3">开票主体(供应商)<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="supplier_name" class="layui-input picker-oa" data-types="supplier" value="" placeholder="请选择" readonly lay-verify="required" lay-reqText="开票主体(供应商)">
|
||||
<input type="hidden" name="supplier_id" value=0>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联采购合同</td>
|
||||
<td colspan="3">
|
||||
<input type="text" class="layui-input picker-oa" data-types="purchase" name="purchase_name" placeholder="请选择" readonly value="">
|
||||
<input type="hidden" class="layui-input" name="purchase_id" value="0">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联项目</td>
|
||||
<td colspan="3">
|
||||
<input type="text" class="layui-input picker-oa" data-types="project" name="project_name" placeholder="请选择" readonly value="">
|
||||
<input type="hidden" class="layui-input" name="project_id" value="0">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<div class="layui-input-inline">附件</div>
|
||||
<div class="layui-input-inline">
|
||||
<button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button>
|
||||
</div>
|
||||
</td>
|
||||
<td colspan="3">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="file_ids" value="">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">备注信息</td>
|
||||
<td colspan="3"><textarea name="remark" placeholder="请输入备注信息" class="layui-textarea"></textarea></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="checkBox" data-status="0" data-id="0" data-checkflowid="0" class="pt-3"></div>
|
||||
<div class="pt-4">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
var moduleInit = ['tool','oaPicker','oaCheck','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form, tool = layui.tool, oaPicker = layui.oaPicker,oaCheck = layui.oaCheck,uploadPlus = layui.uploadPlus;
|
||||
//相关附件上传
|
||||
var attachment = new uploadPlus();
|
||||
|
||||
//审批相关
|
||||
oaCheck.init({
|
||||
check_name:'ticket',
|
||||
check_btn:0
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
let checkCallback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
data.field.check_name = 'ticket';
|
||||
data.field.action_id = e.data.return_id;
|
||||
oaCheck.submit(data.field,checkCallback);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/finance/ticket/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,106 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-2">新增无发票付款申请</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">预付款金额<font>*</font></td>
|
||||
<td><input type="text" class="layui-input" name="amount" lay-verify="required|number" placeholder="请输入预付款金额" lay-reqText="请输入预付款金额" value=""></td>
|
||||
<td class="layui-td-gray">付款方<font>*</font></td>
|
||||
<td>
|
||||
<select name="invoice_subject" lay-verify="required" lay-reqText="请选择付款方">
|
||||
<option value="">请选择付款方</option>
|
||||
{volist name=":get_base_data('enterprise')" id="vo"}
|
||||
<option value="{$vo.id}">{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-3">收款方(供应商)<font>*</font></td>
|
||||
<td colspan="3">
|
||||
<input type="text" name="supplier_name" class="layui-input picker-oa" data-types="supplier" value="" placeholder="请选择" readonly lay-verify="required" lay-reqText="请完善收款方(供应商)">
|
||||
<input type="hidden" name="supplier_id" value="0">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联采购合同</td>
|
||||
<td colspan="3">
|
||||
<input type="text" class="layui-input picker-oa" data-types="purchase" name="purchase_name" placeholder="请选择" readonly value="">
|
||||
<input type="hidden" class="layui-input" name="purchase_id" value="0">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联项目</td>
|
||||
<td colspan="3">
|
||||
<input type="text" class="layui-input picker-oa" data-types="project" name="project_name" placeholder="请选择" readonly value="">
|
||||
<input type="hidden" class="layui-input" name="project_id" value="0">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<div class="layui-input-inline">附件</div>
|
||||
<div class="layui-input-inline">
|
||||
<button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button>
|
||||
</div>
|
||||
</td>
|
||||
<td colspan="3">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="file_ids" value="">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">备注信息</td>
|
||||
<td colspan="3"><textarea name="remark" placeholder="请输入备注信息" class="layui-textarea"></textarea></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="checkBox" data-status="0" data-id="0" data-checkflowid="0" class="pt-3"></div>
|
||||
<div class="pt-4">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
var moduleInit = ['tool','oaPicker','oaCheck','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form, tool = layui.tool, oaPicker = layui.oaPicker,oaCheck = layui.oaCheck,uploadPlus = layui.uploadPlus;
|
||||
//相关附件上传
|
||||
var attachment = new uploadPlus();
|
||||
|
||||
//审批相关
|
||||
oaCheck.init({
|
||||
check_name:'ticketa',
|
||||
check_btn:0
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
let checkCallback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
data.field.check_name = 'ticketa';
|
||||
data.field.action_id = e.data.return_id;
|
||||
oaCheck.submit(data.field,checkCallback);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/finance/ticket/add_a", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,210 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
|
||||
<div class="p-page">
|
||||
<div class="layui-card border-x border-t" style="margin-bottom:0; box-shadow:0 0 0 0 rgb(5 32 96 / 0%)">
|
||||
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this">全部</li>
|
||||
<li>我申请的</li>
|
||||
<li>待我审批</li>
|
||||
<li>我已审批</li>
|
||||
<li>抄送我的</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<form class="layui-form gg-form-bar border-x tab-0" id="barsearchform">
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="diff_time" placeholder="选择发票时间区间" readonly name="diff_time">
|
||||
</div>
|
||||
<div class="layui-input-inline search-item" style="width:120px;">
|
||||
<select name="check_status">
|
||||
<option value="">选择审批状态</option>
|
||||
{volist name=":get_check_status()" id="vo"}
|
||||
<option value="{$key}">{$vo}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline search-item" style="width:120px;">
|
||||
<select name="open_status">
|
||||
<option value="">发票状态</option>
|
||||
<option value="1">正常</option>
|
||||
<option value="2">作废</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<input type="hidden" name="tab" value="0"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="table_ticket" lay-filter="table_ticket"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm tool-add" type="button" data-href="/finance/ticket/add">+ 添加收票信息</button>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tablePlus','laydatePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus, tool = layui.tool, laydatePlus = layui.laydatePlus, element = layui.element;
|
||||
//tab切换
|
||||
element.on('tab(tab)', function(data){
|
||||
$('[name="tab"]').val(data.index);
|
||||
$("#barsearchform")[0].reset();
|
||||
layui.pageTable.reload({where:{tab:data.index},page:{curr:1}});
|
||||
return false;
|
||||
});
|
||||
|
||||
//日期范围
|
||||
var diff_time = new laydatePlus({'target':'diff_time'});
|
||||
layui.pageTable = table.render({
|
||||
elem: "#table_ticket"
|
||||
,toolbar: "#toolbarDemo"
|
||||
,title: '发票列表'
|
||||
,url: "/finance/ticket/datalist"
|
||||
,page: true
|
||||
,limit: 20
|
||||
,cellMinWidth: 80
|
||||
,height: 'full-154'
|
||||
,cols: [[
|
||||
{
|
||||
field: 'id',
|
||||
title: 'ID号',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'supplier_name',
|
||||
title: '供应商[发票主体]',
|
||||
minWidth: 240
|
||||
},{
|
||||
field: 'amount',
|
||||
title: '发票金额(元)',
|
||||
align: 'right',
|
||||
width: 100,
|
||||
},{
|
||||
field: 'code',
|
||||
title: '发票号码',
|
||||
align: 'center',
|
||||
width: 160
|
||||
},{
|
||||
field: 'invoice_type',
|
||||
title: '开票类型',
|
||||
align: 'center',
|
||||
width: 120,
|
||||
templet:function(d){
|
||||
var html='-';
|
||||
if(d.invoice_type==1){
|
||||
html='<span class="green">增值税专用发票</span>';
|
||||
}
|
||||
else if(d.invoice_type==2){
|
||||
html='<span class="blue">普通发票</span>';
|
||||
}
|
||||
else if(d.invoice_type==3){
|
||||
html='<span class="red">专业发票</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field:'check_status',title: '审批状态',width:110, align:'center',templet: function(d){
|
||||
var html = '<span class="check-status-color-'+d.check_status+'">『'+d.check_status_str+'』</span>';
|
||||
return html;
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'admin_name',
|
||||
title: '收票员工',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'department',
|
||||
title: '收票部门',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},{
|
||||
field: 'create_time',
|
||||
title: '收取时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'check_user',
|
||||
title: '当前审核人'
|
||||
},{
|
||||
field: 'open_status',
|
||||
title: '发票状态',
|
||||
align: 'center',
|
||||
width: 90,
|
||||
templet:function(d){
|
||||
var html='';
|
||||
if(d.check_status==2){
|
||||
html = '<span class="green">『正常』</span>';
|
||||
if(d.open_status==2){
|
||||
html = '<span class="red">『已作废』</span>';
|
||||
}
|
||||
}
|
||||
else{
|
||||
html='-';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'right',
|
||||
fixed: 'right',
|
||||
title: '操作',
|
||||
width: 130,
|
||||
align: 'center',
|
||||
templet:function(d){
|
||||
var html='<div class="layui-btn-group">';
|
||||
var btn1='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</span>';
|
||||
var btn2='<span class="layui-btn layui-btn-xs" lay-event="edit">编辑</span>';
|
||||
var btn3='<span class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</span>';
|
||||
html+=btn1;
|
||||
if((d.check_status==0 ||d.check_status==4) && d.admin_id==login_admin){
|
||||
html+=btn2+btn3;
|
||||
}
|
||||
html+='</div>';
|
||||
return html;
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
table.on('tool(table_ticket)',function (obj) {
|
||||
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
|
||||
var data = obj.data;
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/finance/ticket/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'edit') {
|
||||
tool.side("/finance/ticket/add?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'del') {
|
||||
layer.confirm('确定要删除该记录吗?', { icon: 3, title: '提示' }, function (index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
obj.del();
|
||||
}
|
||||
}
|
||||
tool.delete("/finance/ticket/del", { id: data.id }, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,264 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<div class="layui-card border-x border-t" style="margin-bottom:0; box-shadow:0 0 0 0 rgb(5 32 96 / 0%)">
|
||||
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li><a href="/finance/payment/datalist">有发票付款</a></li>
|
||||
<li class="layui-this"><a href="/finance/ticket/datalist_a">无发票付款</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<form class="layui-form gg-form-bar border-x" id="barsearchform">
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="diff_time" placeholder="选择付款时间区间" readonly name="diff_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:120px;">
|
||||
<select name="pay_status">
|
||||
<option value="">请选择状态</option>
|
||||
<option value="0">未付款</option>
|
||||
<option value="1">部分付款</option>
|
||||
<option value="2">全部付款</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline search-item" style="width:120px;">
|
||||
<select name="check_status">
|
||||
<option value="">选择审批状态</option>
|
||||
{volist name=":get_check_status()" id="vo"}
|
||||
<option value="{$key}">{$vo}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm tool-add" type="button" data-href="/finance/ticket/add_a">+ 添加无发票付款申请</button>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const auth = "{$auth}";
|
||||
const moduleInit = ['tool','tablePlus','laydatePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus, tool = layui.tool, laydatePlus = layui.laydatePlus, element = layui.element;
|
||||
|
||||
//日期范围
|
||||
var diff_time = new laydatePlus({'target':'diff_time'});
|
||||
layui.pageTable = table.render({
|
||||
elem: "#test"
|
||||
,toolbar: "#toolbarDemo"
|
||||
,url: "/finance/ticket/datalist_a"
|
||||
,page: true
|
||||
,limit: 20
|
||||
,cellMinWidth: 80
|
||||
,height: 'full-154'
|
||||
,cellMinWidth: 80
|
||||
,page: true //开启分页
|
||||
,limit: 20
|
||||
,cols: [
|
||||
[
|
||||
{
|
||||
field: 'id',
|
||||
title: 'ID号',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'pay_status',
|
||||
title: '付款状态',
|
||||
align: 'center',
|
||||
width: 100,
|
||||
templet:function(d){
|
||||
var html='<span class="red">『未付款』</span>';
|
||||
if(d.pay_status==1){
|
||||
html='<span class="blue">『部分付款』</span>';
|
||||
}
|
||||
else if(d.pay_status==2){
|
||||
html='<span class="green">『全部付款』</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'pay_amount',
|
||||
title: '付款金额(元)',
|
||||
align: 'right',
|
||||
width: 100,
|
||||
},{
|
||||
field: 'pay_time',
|
||||
title: '最新付款时间',
|
||||
align: 'center',
|
||||
width: 136
|
||||
},{
|
||||
field: 'supplier_name',
|
||||
title: '供应商[发票主体]',
|
||||
minWidth: 240
|
||||
},{field:'check_status',title: '审批状态',width:110, align:'center',templet: function(d){
|
||||
let html='';
|
||||
if(d.open_status==2){
|
||||
html = '<span class="check-status-color-3">『已作废』</span>';
|
||||
}
|
||||
else{
|
||||
html = '<span class="check-status-color-'+d.check_status+'">『'+d.check_status_str+'』</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'amount',
|
||||
title: '预付款金额(元)',
|
||||
align: 'right',
|
||||
width: 120,
|
||||
},{
|
||||
field: 'admin_name',
|
||||
title: '申请人',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'department',
|
||||
title: '所属部门',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},{
|
||||
field: 'create_time',
|
||||
title: '申请时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'check_user',
|
||||
title: '当前审核人'
|
||||
},{
|
||||
field: 'right',
|
||||
fixed: 'right',
|
||||
title: '操作',
|
||||
width: 180,
|
||||
align: 'center',
|
||||
templet:function(d){
|
||||
var html='<div class="layui-btn-group">';
|
||||
var btn1='<span class="layui-btn layui-btn-xs" lay-event="add">付款管理</span>';
|
||||
var btn2='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">付款详情</span>';
|
||||
var btn3='<span class="layui-btn layui-btn-danger layui-btn-xs" lay-event="tovoid">作废</span>';
|
||||
var btn4='<span class="layui-btn layui-btn-danger layui-btn-xs" lay-event="novoid">反作废</span>';
|
||||
|
||||
var btna1='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view_a">详情</span>';
|
||||
var btna2='<span class="layui-btn layui-btn-xs" lay-event="edit_a">编辑</span>';
|
||||
var btna3='<span class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del_a">删除</span>';
|
||||
if(d.check_status==2){
|
||||
if(auth == 1){
|
||||
if(d.pay_status==0){
|
||||
if(d.open_status==2){
|
||||
html+=btn4+'</div>';
|
||||
}
|
||||
else{
|
||||
html+=btn1+btn2+btn3+'</div>';
|
||||
}
|
||||
}
|
||||
else{
|
||||
html+=btn1+btn2+'</div>';
|
||||
}
|
||||
}
|
||||
else{
|
||||
html+=btn2+'</div>';
|
||||
}
|
||||
}
|
||||
else{
|
||||
html+=btna1;
|
||||
if((d.check_status==0 ||d.check_status==4) && d.admin_id==login_admin){
|
||||
html+=btna2+btna3;
|
||||
}
|
||||
html+='</div>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
//监听行工具事件
|
||||
table.on('tool(test)', function(obj) {
|
||||
var data = obj.data;
|
||||
if (obj.event === 'add') {
|
||||
tool.side("/finance/payment/add?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/finance/payment/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'tovoid') {
|
||||
layer.confirm('确定作废该无发票付款申请吗?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
$.ajax({
|
||||
url: "/finance/api/tovoid_ticket",
|
||||
type:'post',
|
||||
data: {
|
||||
id: data.id
|
||||
},
|
||||
success: function(res) {
|
||||
layer.msg(res.msg);
|
||||
if (res.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
})
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if (obj.event === 'novoid') {
|
||||
layer.confirm('确定反作废该无发票付款申请吗?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
$.ajax({
|
||||
url: "/finance/api/novoid_ticket",
|
||||
type:'post',
|
||||
data: {
|
||||
id: data.id
|
||||
},
|
||||
success: function(res) {
|
||||
layer.msg(res.msg);
|
||||
if (res.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
})
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if (obj.event === 'view_a') {
|
||||
tool.side("/finance/ticket/view_a?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'edit_a') {
|
||||
tool.side("/finance/ticket/add_a?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'del_a') {
|
||||
layer.confirm('确定要删除该内容吗?', { icon: 3, title: '提示' }, function (index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
obj.del();
|
||||
}
|
||||
}
|
||||
tool.delete("/finance/ticket/del_a", { id: data.id }, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,154 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-2">编辑开票申请</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">发票金额<font>*</font></td>
|
||||
<td><input type="text" class="layui-input" name="amount" lay-verify="required|number" placeholder="请输入发票金额" lay-reqText="请输入发票金额" value="{$detail.amount}"></td>
|
||||
<td class="layui-td-gray">发票号码<font>*</font></td>
|
||||
<td><input type="text" class="layui-input" name="code" lay-verify="required" placeholder="请输入发票号码" lay-reqText="请输入发票号码" value="{$detail.code}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">发票类型<font>*</font></td>
|
||||
<td>
|
||||
<select name="invoice_type" lay-verify="required" lay-reqText="请选择发票类型">
|
||||
<option value="">请选择发票类型</option>
|
||||
<option value="1" {eq name="$detail.invoice_type" value="1"}selected{/eq}>增值税专用发票</option>
|
||||
<option value="2" {eq name="$detail.invoice_type" value="2"}selected{/eq}>普通发票</option>
|
||||
<option value="3" {eq name="$detail.invoice_type" value="3"}selected{/eq}>专业发票</option>
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">发票日期<font>*</font></td>
|
||||
<td><input type="text" class="layui-input tool-time" name="open_time" lay-verify="required" readonly placeholder="请选择" lay-reqText="请完善发票日期" value="{$detail.open_time|date='Y-m-d'}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">发票抬头<font>*</font></td>
|
||||
<td>
|
||||
<select name="invoice_subject" lay-verify="required" lay-reqText="请选择发票抬头">
|
||||
<option value="">请选择发票抬头</option>
|
||||
{volist name=":get_base_data('enterprise')" id="vo"}
|
||||
<option value="{$vo.id}" {eq name="$vo.id" value="$detail.invoice_subject"}selected{/eq}>{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray-3">开票主体(供应商)<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="supplier_name" class="layui-input picker-oa" data-types="supplier" value="{$detail.supplier_name}" placeholder="请选择" readonly lay-verify="required" lay-reqText="开票主体(供应商)">
|
||||
<input type="hidden" name="supplier_id" value="{$detail.supplier_id}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联采购合同</td>
|
||||
<td colspan="3">
|
||||
<input type="text" class="layui-input picker-oa" data-types="purchase" name="purchase_name" placeholder="请选择" readonly value="{$detail.purchase_name|default=''}">
|
||||
<input type="hidden" class="layui-input" name="purchase_id" value="{$detail.purchase_id}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联项目</td>
|
||||
<td colspan="5">
|
||||
<input type="text" class="layui-input picker-oa" data-types="project" name="project_name" placeholder="请选择需要关联的项目" readonly value="{$detail.project_name|default=''}">
|
||||
<input type="hidden" class="layui-input" name="project_id" value="{$detail.project_id}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<div class="layui-input-inline">附件</div>
|
||||
<div class="layui-input-inline">
|
||||
<button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button>
|
||||
</div>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="file_ids" value="{$detail.file_ids}">
|
||||
{notempty name="$detail.file_ids"}
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo)}</div>
|
||||
{/volist}
|
||||
{/notempty}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">备注信息</td>
|
||||
<td colspan="5"><textarea name="remark" placeholder="请输入备注信息" class="layui-textarea">{$detail.remark|default=''}</textarea></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="checkBox" class="pt-3" data-status="{$detail.check_status}" data-id="{$detail.id}" data-checkflowid="{$detail.check_flow_id}"></div>
|
||||
<div class="pt-4">
|
||||
<input type="hidden" name="id" value="{$detail.id}"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
var moduleInit = ['tool','oaPicker','oaCheck','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form, tool = layui.tool, oaPicker = layui.oaPicker,oaCheck = layui.oaCheck,uploadPlus = layui.uploadPlus;
|
||||
//选择抬头类型
|
||||
form.on('radio(type)', function (data) {
|
||||
if(data.value==2){
|
||||
$('.invoice-qiye').hide();
|
||||
}
|
||||
else{
|
||||
$('.invoice-qiye').show();
|
||||
}
|
||||
});
|
||||
|
||||
//相关附件上传
|
||||
var attachment = new uploadPlus();
|
||||
|
||||
//审批相关
|
||||
oaCheck.init({
|
||||
check_name:'ticket',
|
||||
check_btn:0
|
||||
});
|
||||
|
||||
$('.customer-picker').on('click',function(){
|
||||
let that = $(this),ids = [],titles=[];
|
||||
let callback = function(data){
|
||||
for ( var i = 0; i <data.length; i++){
|
||||
ids.push(data[i].id);
|
||||
titles.push(data[i].title);
|
||||
}
|
||||
that.val(titles.join(','));
|
||||
that.next().val(ids.join(','));
|
||||
$('[name="invoice_tax"]').val(tax_num.join(','));
|
||||
$('[name="invoice_bank"]').val(bank.join(','));
|
||||
$('[name="invoice_account"]').val(bank_sn.join(','));
|
||||
$('[name="invoice_phone"]').val(cperson_mobile.join(','));
|
||||
$('[name="invoice_address"]').val(cperson_address.join(','));
|
||||
}
|
||||
oaPicker.picker('customer',1,callback,{});
|
||||
});
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
let checkCallback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
data.field.check_name = 'ticket';
|
||||
data.field.action_id = e.data.return_id;
|
||||
oaCheck.submit(data.field,checkCallback);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/finance/ticket/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,111 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-2">编辑无发票付款申请</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">预付款金额<font>*</font></td>
|
||||
<td><input type="text" class="layui-input" name="amount" lay-verify="required|number" placeholder="请输入预付款金额" lay-reqText="请输入预付款金额" value="{$detail.amount}"></td>
|
||||
<td class="layui-td-gray">付款方<font>*</font></td>
|
||||
<td>
|
||||
<select name="invoice_subject" lay-verify="required" lay-reqText="请选择付款方">
|
||||
<option value="">请选择付款方</option>
|
||||
{volist name=":get_base_data('enterprise')" id="vo"}
|
||||
<option value="{$vo.id}" {eq name="$vo.id" value="$detail.invoice_subject"}selected{/eq}>{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-3">收款方(供应商)<font>*</font></td>
|
||||
<td colspan="3">
|
||||
<input type="text" name="supplier_name" class="layui-input picker-oa" data-types="supplier" value="{$detail.supplier_name|default=''}" placeholder="请选择" readonly lay-verify="required" lay-reqText="请完善收款方(供应商)">
|
||||
<input type="hidden" name="supplier_id" value="{$detail.supplier_id}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联采购合同</td>
|
||||
<td colspan="3">
|
||||
<input type="text" class="layui-input picker-oa" data-types="purchase" name="purchase_name" placeholder="请选择需要关联的合同" readonly value="{$detail.purchase_name|default=''}">
|
||||
<input type="hidden" class="layui-input" name="purchase_id" value="{$detail.purchase_id}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联项目</td>
|
||||
<td colspan="3">
|
||||
<input type="text" class="layui-input picker-oa" data-types="project" name="project_name" placeholder="请选择需要关联的项目" readonly value="{$detail.project_name|default=''}">
|
||||
<input type="hidden" class="layui-input" name="project_id" value="{$detail.project_id}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<div class="layui-input-inline">附件</div>
|
||||
<div class="layui-input-inline">
|
||||
<button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button>
|
||||
</div>
|
||||
</td>
|
||||
<td colspan="3">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="file_ids" value="{$detail.file_ids}">
|
||||
{notempty name="$detail.file_ids"}
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo)}</div>
|
||||
{/volist}
|
||||
{/notempty}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">备注信息</td>
|
||||
<td colspan="3"><textarea name="remark" placeholder="请输入备注信息" class="layui-textarea">{$detail.remark|default=''}</textarea></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="checkBox" class="pt-3" data-status="{$detail.check_status}" data-id="{$detail.id}" data-checkflowid="{$detail.check_flow_id}"></div>
|
||||
<div class="pt-4">
|
||||
<input type="hidden" name="id" value="{$detail.id}"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
var moduleInit = ['tool','oaPicker','oaCheck','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form, tool = layui.tool, oaPicker = layui.oaPicker,oaCheck = layui.oaCheck,uploadPlus = layui.uploadPlus;
|
||||
//相关附件上传
|
||||
var attachment = new uploadPlus();
|
||||
|
||||
//审批相关
|
||||
oaCheck.init({
|
||||
check_name:'ticketa',
|
||||
check_btn:0
|
||||
});
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
let checkCallback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
data.field.check_name = 'ticketa';
|
||||
data.field.action_id = e.data.return_id;
|
||||
oaCheck.submit(data.field,checkCallback);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/finance/ticket/add_a", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,220 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<div class="layui-card border-x border-t" style="margin-bottom:0; box-shadow:0 0 0 0 rgb(5 32 96 / 0%)">
|
||||
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this">正常</li>
|
||||
<li>已作废</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<form class="layui-form gg-form-bar border-x" id="barsearchform">
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="diff_time" placeholder="选择时间区间" readonly name="diff_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<input type="hidden" name="tab" value="0"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<h3 class="h3-title" style="height:32px;">收票列表</h3>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const auth = {$authInvoice};
|
||||
const moduleInit = ['tool','tablePlus','laydatePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus, tool = layui.tool, laydatePlus = layui.laydatePlus, element = layui.element;
|
||||
//tab切换
|
||||
element.on('tab(tab)', function(data){
|
||||
$('[name="tab"]').val(data.index);
|
||||
$("#barsearchform")[0].reset();
|
||||
layui.pageTable.reload({where:{tab:data.index},page:{curr:1}});
|
||||
return false;
|
||||
});
|
||||
|
||||
//日期范围
|
||||
var diff_time = new laydatePlus({'target':'diff_time'});
|
||||
|
||||
layui.pageTable = table.render({
|
||||
elem: '#test',
|
||||
title: '收票列表',
|
||||
toolbar: '#toolbarDemo',
|
||||
url: "/finance/ticket/record", //数据接口
|
||||
cellMinWidth: 80,
|
||||
page: true, //开启分页
|
||||
limit: 20,
|
||||
height: 'full-154',
|
||||
totalRow: true,
|
||||
cols: [[
|
||||
{
|
||||
field: 'id',
|
||||
title: 'ID号',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'open_status',
|
||||
title: '发票状态',
|
||||
align: 'center',
|
||||
width: 90,
|
||||
templet:function(d){
|
||||
var html='';
|
||||
if(d.check_status==2){
|
||||
html = '<span class="green">『正常』</span>';
|
||||
if(d.open_status==2){
|
||||
html = '<span class="red">『已作废』</span>';
|
||||
}
|
||||
}
|
||||
else{
|
||||
html='-';
|
||||
}
|
||||
return html;
|
||||
},
|
||||
totalRowText: '<div style="text-align:right">合计</div>'
|
||||
},{
|
||||
field: 'amount',
|
||||
title: '发票金额(元)',
|
||||
align: 'right',
|
||||
width: 120,
|
||||
totalRow: function (d) {return d.TOTAL_ROW.amount}
|
||||
},{
|
||||
field: 'supplier_name',
|
||||
title: '供应商[发票主体]',
|
||||
minWidth: 240
|
||||
},{
|
||||
field: 'open_time',
|
||||
title: '发票日期',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'code',
|
||||
title: '发票号码',
|
||||
align: 'center',
|
||||
width: 160
|
||||
},{
|
||||
field: 'invoice_type',
|
||||
title: '开票类型',
|
||||
align: 'center',
|
||||
width: 120,
|
||||
templet:function(d){
|
||||
var html='-';
|
||||
if(d.invoice_type==1){
|
||||
html='<span class="green">增值税专用发票</span>';
|
||||
}
|
||||
else if(d.invoice_type==2){
|
||||
html='<span class="blue">普通发票</span>';
|
||||
}
|
||||
else if(d.invoice_type==3){
|
||||
html='<span class="red">专业发票</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'admin_name',
|
||||
title: '收票员工',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'department',
|
||||
title: '收票部门',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},{
|
||||
field: 'create_time',
|
||||
title: '创建时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'right',
|
||||
fixed: 'right',
|
||||
title: '操作',
|
||||
width: 100,
|
||||
align: 'center',
|
||||
templet:function(d){
|
||||
var html='<div class="layui-btn-group">';
|
||||
var btn1='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</span>';
|
||||
var btn2='<span class="layui-btn layui-btn-warm layui-btn-xs" lay-event="tovoid">作废</span>';
|
||||
var btn3='<span class="layui-btn layui-btn-danger layui-btn-xs" lay-event="novoid">反作废</span>';
|
||||
html+=btn1;
|
||||
if(auth==1){
|
||||
if(d.open_status==1){
|
||||
html+=btn2;
|
||||
}
|
||||
if(d.open_status==2){
|
||||
html+=btn3;
|
||||
}
|
||||
}
|
||||
html+='</div>';
|
||||
return html;
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
//监听行工具事件
|
||||
table.on('tool(test)', function(obj) {
|
||||
var data = obj.data;
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/finance/ticket/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'tovoid') {
|
||||
layer.confirm('确定作废该发票吗?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
$.ajax({
|
||||
url: "/finance/api/tovoid_ticket",
|
||||
type:'post',
|
||||
data: {
|
||||
id: data.id
|
||||
},
|
||||
success: function(res) {
|
||||
layer.msg(res.msg);
|
||||
if (res.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
})
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if (obj.event === 'novoid') {
|
||||
layer.confirm('确定反作废该发票吗?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
$.ajax({
|
||||
url: "/finance/api/novoid_ticket",
|
||||
type:'post',
|
||||
data: {
|
||||
id: data.id
|
||||
},
|
||||
success: function(res) {
|
||||
layer.msg(res.msg);
|
||||
if (res.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
})
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,80 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="layui-form p-page">
|
||||
<h3 class="pb-2">收票详情</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">发票金额</td>
|
||||
<td class="blue">{$detail.amount} 元</td>
|
||||
<td class="layui-td-gray">发票类型</td>
|
||||
<td>
|
||||
{eq name="$detail.invoice_type" value="1"}增值税专用发票{/eq}
|
||||
{eq name="$detail.invoice_type" value="2"}普通发票{/eq}
|
||||
{eq name="$detail.invoice_type" value="3"}专业发票{/eq}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">发票抬头</td>
|
||||
<td>{$detail.subject}</td>
|
||||
<td class="layui-td-gray-3">开票主体(供应商)</td>
|
||||
<td>{$detail.supplier_name}</td>
|
||||
</tr>
|
||||
{if ( $detail.open_status gt 0)}
|
||||
<tr>
|
||||
<td class="layui-td-gray">发票号码</td>
|
||||
<td>{$detail.code}{eq name="$detail.open_status" value="2"}<span class="yellow">『已作废』</span>{/eq}</td>
|
||||
<td class="layui-td-gray">发票日期</td>
|
||||
<td>{$detail.open_time}</td>
|
||||
</tr>
|
||||
{/if}
|
||||
{if condition="$detail.purchase_id > 0"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联采购合同</td>
|
||||
<td colspan="3">{$detail.purchase_name|default=''}</td>
|
||||
</tr>
|
||||
{/if}
|
||||
{if condition="$detail.project_id > 0"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联的项目</td>
|
||||
<td colspan="3">{$detail.project_name|default=''}</td>
|
||||
</tr>
|
||||
{/if}
|
||||
{notempty name="$detail.remark"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">备注信息</td>
|
||||
<td colspan="3">{$detail.remark}</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{notempty name="$detail.file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联附件</td>
|
||||
<td colspan="3">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
</table>
|
||||
<div id="checkBox" class="pt-3" data-status="{$detail.check_status}" data-id="{$detail.id}" data-checkflowid="{$detail.check_flow_id}"></div>
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const ticket_id = {$detail.id};
|
||||
const moduleInit = ['tool','oaCheck','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool, oaCheck=layui.oaCheck,uploadPlus = layui.uploadPlus;
|
||||
oaCheck.init({
|
||||
check_name:'ticket'
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,98 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="layui-form p-page">
|
||||
<h3 class="pb-2">无发票付款详情</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">预付款金额</td>
|
||||
<td class="blue">{$detail.amount} 元</td>
|
||||
<td class="layui-td-gray">付款方</td>
|
||||
<td>{$detail.subject}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-3">收款方(供应商)</td>
|
||||
<td colspan="3">{$detail.supplier_name}</td>
|
||||
</tr>
|
||||
{if condition="$detail.purchase_id > 0"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联采购合同</td>
|
||||
<td colspan="3">{$detail.purchase_name|default=''}</td>
|
||||
</tr>
|
||||
{/if}
|
||||
{if condition="$detail.project_id > 0"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联的项目</td>
|
||||
<td colspan="3">{$detail.project_name|default=''}</td>
|
||||
</tr>
|
||||
{/if}
|
||||
{notempty name="$detail.remark"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">备注信息</td>
|
||||
<td colspan="3">{$detail.remark}</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{notempty name="$detail.file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联附件</td>
|
||||
<td colspan="3">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
</table>
|
||||
<div id="checkBox" class="pt-3" data-status="{$detail.check_status}" data-id="{$detail.id}" data-checkflowid="{$detail.check_flow_id}"></div>
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const ticket_id = {$detail.id};
|
||||
const moduleInit = ['tool','oaCheck','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool, oaCheck=layui.oaCheck,uploadPlus = layui.uploadPlus;
|
||||
oaCheck.init({
|
||||
check_name:'ticketa'
|
||||
});
|
||||
//相关附件上传
|
||||
var attachment = new uploadPlus({
|
||||
"attachment":{
|
||||
uidDelete:true,
|
||||
ajaxSave:function(val){
|
||||
$.ajax({
|
||||
url: "/finance/api/upload_ticket",
|
||||
type:'post',
|
||||
data:{
|
||||
id:ticket_id,
|
||||
other_file_ids:val
|
||||
},
|
||||
success: function (e) {
|
||||
location.reload();
|
||||
}
|
||||
})
|
||||
},
|
||||
ajaxDelete:function(val){
|
||||
$.ajax({
|
||||
url: "/finance/api/upload_ticket",
|
||||
type:'post',
|
||||
data:{
|
||||
id:ticket_id,
|
||||
other_file_ids:val
|
||||
},
|
||||
success: function (e) {
|
||||
location.reload();
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
Reference in New Issue
Block a user