This commit is contained in:
mkm 2023-09-26 11:10:00 +08:00
commit 4bd43d4a08
1182 changed files with 4041 additions and 240 deletions

View File

@ -1 +1,34 @@
APP_DEBUG = true [APP] DEFAULT_TIMEZONE = Asia/Shanghai [DATABASE] TYPE = mysql HOSTNAME = 127.0.0.1 DATABASE = test USERNAME = username PASSWORD = password HOSTPORT = 3306 CHARSET = utf8 DEBUG = true PREFIX = la_ [LANG] default_lang = zh-cn [PROJECT] UNIQUE_IDENTIFICATION = likeadmin # 演示环境 DEMO_ENV = false
APP_DEBUG = true
[APP]
DEFAULT_TIMEZONE = Asia/Shanghai
[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = test
USERNAME = username
PASSWORD = password
HOSTPORT = 3306
CHARSET = utf8
DEBUG = true
PREFIX = la_
[LANG]
default_lang = zh-cn
[PROJECT]
UNIQUE_IDENTIFICATION = likeadmin
# 演示环境
DEMO_ENV = false
[DATABASE]
TYPE = "mysql"
HOSTNAME = "47.109.36.146"
DATABASE = "worker_task"
USERNAME = "worker_task"
PASSWORD = "p4WGD67TezzzX3Mc"
HOSTPORT = "3306"
CHARSET = "utf8mb4"
DEBUG = "0"
PREFIX = "la_"

View File

@ -0,0 +1,108 @@
<?php
// +----------------------------------------------------------------------
// | likeadmin快速开发前后端分离管理后台PHP版
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
// | 开源版本可自由商用可去除界面版权logo
// | gitee下载https://gitee.com/likeshop_gitee/likeadmin
// | github下载https://github.com/likeshop-github/likeadmin
// | 访问官网https://www.likeadmin.cn
// | likeadmin团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeadminTeam
// +----------------------------------------------------------------------
namespace app\adminapi\controller;
use app\adminapi\controller\BaseAdminController;
use app\adminapi\lists\CompanyComplaintFeedbackLists;
use app\adminapi\logic\CompanyComplaintFeedbackLogic;
use app\adminapi\validate\CompanyComplaintFeedbackValidate;
/**
* CompanyComplaintFeedback控制器
* Class CompanyComplaintFeedbackController
* @package app\adminapi\controller
*/
class CompanyComplaintFeedbackController extends BaseAdminController
{
/**
* @notes 获取列表
* @return \think\response\Json
* @author likeadmin
* @date 2023/09/23 15:14
*/
public function lists()
{
return $this->dataLists(new CompanyComplaintFeedbackLists());
}
/**
* @notes 添加
* @return \think\response\Json
* @author likeadmin
* @date 2023/09/23 15:14
*/
public function add()
{
$params = (new CompanyComplaintFeedbackValidate())->post()->goCheck('add');
$result = CompanyComplaintFeedbackLogic::add($params);
if (true === $result) {
return $this->success('添加成功', [], 1, 1);
}
return $this->fail(CompanyComplaintFeedbackLogic::getError());
}
/**
* @notes 编辑
* @return \think\response\Json
* @author likeadmin
* @date 2023/09/23 15:14
*/
public function edit()
{
$params = (new CompanyComplaintFeedbackValidate())->post()->goCheck('edit');
$result = CompanyComplaintFeedbackLogic::edit($params);
if (true === $result) {
return $this->success('编辑成功', [], 1, 1);
}
return $this->fail(CompanyComplaintFeedbackLogic::getError());
}
/**
* @notes 删除
* @return \think\response\Json
* @author likeadmin
* @date 2023/09/23 15:14
*/
public function delete()
{
$params = (new CompanyComplaintFeedbackValidate())->post()->goCheck('delete');
CompanyComplaintFeedbackLogic::delete($params);
return $this->success('删除成功', [], 1, 1);
}
/**
* @notes 获取详情
* @return \think\response\Json
* @author likeadmin
* @date 2023/09/23 15:14
*/
public function detail()
{
$params = (new CompanyComplaintFeedbackValidate())->goCheck('detail');
$result = CompanyComplaintFeedbackLogic::detail($params);
return $this->data($result);
}
}

View File

@ -22,10 +22,9 @@ use app\common\logic\CompanyLogic;
use app\adminapi\validate\CompanyValidate;
use app\api\controller\JunziqianController;
use app\common\logic\RedisLogic;
use app\common\model\Approve;
use app\common\model\auth\Admin;
use app\common\model\Company;
use app\common\model\ShopMerchant;
use think\cache\driver\Redis;
use think\Exception;
use think\facade\Db;
use app\common\logic\contract\ContractLogic;
@ -362,51 +361,112 @@ class CompanyController extends BaseAdminController
{
try {
$params = $this->request->param();
Log::info(['商户入驻请求', $params]);
if (empty($params['company_name'])) {
throw new Exception('商户名称不能为空');
}
if (empty($params['organization_code'])) {
throw new Exception('社会统一信用代码不能为空');
}
if (empty($params['master_name'])) {
throw new Exception('商户法人名称不能为空');
Log::info(['商户入驻申请-请求参数', $params]);
// if (empty($params['company_name'])) {
// throw new Exception('商户名称不能为空');
// }
// if (empty($params['organization_code'])) {
// throw new Exception('社会统一信用代码不能为空');
// }
// if (empty($params['master_name'])) {
// throw new Exception('商户法人名称不能为空');
// }
// $master_email=Db::name('company_form')->where('organization_code',$params['organization_code'])->value('master_email');
//
// $isQueryStatus = false; // 需要进一步查询是否已做过企业认证
// // $master_email为空表示没有做过认证
// if($master_email){
// $isQueryStatus = true;
// }else{
// $master_email=substr(md5(uniqid()),rand(0, 22),10)."@lihai.com";
// }
// 根据street码查询所属镇农科公司
$company = Company::where(['street' => $params['street'], 'company_type' => 41])->find();
if(empty($company)) {
throw new Exception('当前区域无镇农科公司');
}
$data = [
'mer_intention_id' => $params['mer_intention_id'], // 商城商户入驻申请id签约完成后回调使用
'company_name' => $params['company_name'],
'organization_code' => $params['organization_code'],
'city' => $params['city'],
'area' => $params['area'],
'street' => $params['street'],
'address' => isset($params['address']) && !empty($params['address'])? $params['address']: '',
'master_name' => $params['master_name'],
'master_phone' => $params['master_phone'],
'master_email' => substr(md5(uniqid()),rand(0, 22),10)."@lihai.com",
'face_create_status' => 1,
'qualification' => !isset($params['images']) && !empty($params['images'])?$params['images']:json_encode([])
'mer_intention_id' => $params['mer_intention_id']??'', // 商城商户入驻申请id签约完成后回调使用
'company_name' => $params['company_name']??'',
'mer_name' => $params['mer_name']??'', // 店铺名称
'organization_code' => $params['organization_code']??'',
'city' => $params['city']??'',
'area' => $params['area']??'',
'street' => $params['street']??'',
'address' => $params['address']??'',
'master_name' => $params['master_name']??'',
'master_phone' => $params['master_phone']??'',
'master_email' => $master_email??'',
'type_name' => $params['type_name'] ?? '', //店铺类型
'category_name' => $params['category_name'] ?? '', //商户分类
'qualification' => !empty($params['images'])?$params['images']:json_encode([])
];
$approveModel = new Approve();
$shopApproveType = $params['type']; // 商户申请类型 1入驻 2开通交易
// 插入审批流
$approveModel->type = $shopApproveType == 1? 2: 3; // 审批类型,后台配置 1 其他任务 2商户入驻 3开通交易
$approveModel->flow_id = 2;
$approveModel->name = $shopApproveType == 1? '商户入驻审批': '开通交易审批';
$approveModel->admin_id = 0; // 后台发起人id 暂时为0
$approveModel->department_id = '0';
$approveModel->check_admin_ids = $company['admin_id']; // 当前审批人ID 镇农科公司负责人
$approveModel->check_status = 1; // 状态 0待审核,1审核中,2审核通过,3审核不通过,4撤销审核
$approveModel->other_type = 6;
$approveModel->extend = json_encode(array_merge($params, $data));
$approveModel->create_time = time();
$approveModel->update_time = time();
$approveModel->save();
$shopMerchantModel = ShopMerchant::create($data);
// $shopMerchantModel = ShopMerchant::create($data);
if (!$shopMerchantModel->isEmpty()) {
// 自动发起企业认证
$shopMerchantCertificationData = [
'name' => $shopMerchantModel->company_name,
'organization_code' => $shopMerchantModel->organization_code,
'business_license' => 'https://lihai001.oss-cn-chengdu.aliyuncs.com/def/561f8202305171526091317.png',
'master_name' => $shopMerchantModel->master_name,
'master_email' => $shopMerchantModel->master_email,
'master_phone' => $shopMerchantModel->master_phone,
'id' => $shopMerchantModel->id,
];
app(JunziqianController::class)->ShopMerchantCertification($shopMerchantCertificationData);
} else {
throw new Exception('商户创建失败');
}
return $this->success('成功', [], 1, 1);
// 如果是通滩镇的商户,查询一下企业认证状态,通过的情况,则直接发起生成合同
// if ($params['street'] == '510502106' && $isQueryStatus) {
// $statusRe = app(JunziqianController::class)->shopMerchantStatusQuery($master_email);
// Log::info(['商户入驻请求-通滩镇商户-认证状态查询结果', $statusRe]);
// if($statusRe->success == true) {
// $statusData = json_decode($statusRe->data, true);
// if ($statusData['status'] == 1) {
// // 生成合同
// $createContractData = [
// 'id' => $shopMerchantModel->id,
// 'party_a' => 1,
// 'party_a_name' => '泸州市海之农科技有限公司',
// 'party_b' => $shopMerchantModel->id,
// 'party_b_name' => $params['company_name'],
// 'contract_type' => 22,
// ];
// $shopContractModel = new ShopContract();
// $shopContractModel->contract_no = time();
// $shopContractModel->create_time = time();
// $shopContractModel->check_status = 1;
// $shopContractModel->update_time = time();
// $shopContractModel->setAttrs($createContractData);
// $shopContractModel->save($createContractData);
// return $this->success('已做过企业认证,直接生成合同成功', [], 1, 1);
// }
// }
//
// }
// if (!$shopMerchantModel->isEmpty()) {
// // 自动发起企业认证
// $shopMerchantCertificationData = [
// 'name' => $shopMerchantModel->company_name,
// 'organization_code' => $shopMerchantModel->organization_code,
// 'business_license' => 'https://lihai001.oss-cn-chengdu.aliyuncs.com/def/561f8202305171526091317.png',
// 'master_name' => $shopMerchantModel->master_name,
// 'master_email' => $shopMerchantModel->master_email,
// 'master_phone' => $shopMerchantModel->master_phone,
// 'id' => $shopMerchantModel->id,
// ];
// app(JunziqianController::class)->ShopMerchantCertification($shopMerchantCertificationData);
// } else {
// throw new Exception('商户创建失败');
// }
return $this->success('审批创建成功', [], 1, 1);
} catch (Exception $exception) {
Log::error(['商户入驻请求失败', $exception->getMessage()]);
Log::error(['商户入驻审批失败', $exception->getMessage()]);
return $this->fail($exception->getMessage());
}

View File

@ -0,0 +1,77 @@
<?php
namespace app\adminapi\controller\approve;
use app\adminapi\controller\BaseAdminController;
use app\adminapi\lists\approve\ApproveLists;
use app\common\model\Approve;
use app\common\model\task\Task;
use app\common\model\task_scheduling_plan\TaskSchedulingPlan;
use think\facade\Db;
class ApproveController extends BaseAdminController
{
public function lists()
{
return $this->dataLists(new ApproveLists());
}
public function audit()
{
try {
$params = $this->request->param(); // id check_status remark
$approve = Approve::find($params['id']);
if (!$approve) {
$this->fail('数据不存在');
}
Db::startTrans();
// 拒绝通过 要让用户今天可以继续做任务
if ($params['check_status'] == 3) {
$this->refuse($params, $approve);
}
// 修改任务完成状态
if ($params['check_status'] == 2) {
$this->pass($approve);
}
Db::commit();
return $this->success('审核成功');
} catch (\Exception $e) {
Db::rollback();
return $this->fail($e->getMessage());
}
}
// 通过
private function pass($approve)
{
$task = Task::find($approve['task_id']);
if ($task['status'] == 2) {
$task->status = 3;
$task->save();
}
}
// 拒绝
private function refuse($params, $approve)
{
$approve->check_status = $params['check_status'];
$approve->remark = $params['remark'];
$approve->update_time = time();
$approve->save();
// 更新schedule_plan时间和task的时间为今天依旧可提交
$schedulePlan = TaskSchedulingPlan::find(['tast_id' => $approve['task_id']]);
if (empty($schedule_plan)) {
return $this->fail('数据异常,任务计划不存在');
}
$time = strtotime(date('Y-m-d'));
TaskSchedulingPlan::where(['id' => $schedulePlan['id']])->update([
'start_time'=>$time,
'end_time'=>$time + 86399
]);
Task::where('id', $approve['task_id'])->update([
'start_time'=>$time,
'end_time'=>$time + 86399
]);
}
}

View File

@ -17,6 +17,7 @@ namespace app\adminapi\controller\finance;
use app\adminapi\controller\BaseAdminController;
use app\adminapi\lists\finance\AccountLogLists;
use app\common\enum\user\AccountLogEnum;
use app\common\model\user\User;
/***
* 账户流水控制器
@ -50,5 +51,12 @@ class AccountLogController extends BaseAdminController
return $this->data(AccountLogEnum::getUserMoneyChangeTypeDesc());
}
public function getCompanyUserList()
{
$param = $this->request->param();
$companyId = $param['company_id'];
$userList = User::where(['company_id' => $companyId])->field('id,nickname,avatar,sn,mobile,group_id,deposit,income')->select()->toArray();
return $this->success('成功', $userList);
}
}

View File

@ -20,6 +20,7 @@ use app\adminapi\controller\BaseAdminController;
use app\adminapi\lists\task_template\TaskTemplateLists;
use app\common\logic\task_template\TaskTemplateLogic;
use app\adminapi\validate\task_template\TaskTemplateValidate;
use app\common\model\Company;
/**
@ -53,8 +54,19 @@ class TaskTemplateController extends BaseAdminController
{
$params = (new TaskTemplateValidate())->post()->goCheck('add');
$params['admin_id'] = $this->adminId;
$result = TaskTemplateLogic::add($params);
$company = Company::find($params['company_id']);
if ($company->company_type == 41) {
// 创建 镇农科公司 任务模板
$result = TaskTemplateLogic::addTownTaskTemplate($params);
} else {
$result = TaskTemplateLogic::add($params);
}
if (true === $result) {
/**
* 如果是公司第一次创建安排任务,则初始化公司的提现周期截止时间
*/
TaskTemplateLogic::initCompanyWithdrawDeadline($params['company_id']);
return $this->success('添加成功', [], 1, 1);
}
return $this->fail(TaskTemplateLogic::getError());

View File

@ -0,0 +1,84 @@
<?php
// +----------------------------------------------------------------------
// | likeadmin快速开发前后端分离管理后台PHP版
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
// | 开源版本可自由商用可去除界面版权logo
// | gitee下载https://gitee.com/likeshop_gitee/likeadmin
// | github下载https://github.com/likeshop-github/likeadmin
// | 访问官网https://www.likeadmin.cn
// | likeadmin团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeadminTeam
// +----------------------------------------------------------------------
namespace app\adminapi\lists;
use app\adminapi\lists\BaseAdminDataLists;
use app\common\model\Company;
use app\common\model\CompanyComplaintFeedback;
use app\common\lists\ListsSearchInterface;
/**
* CompanyComplaintFeedback列表
* Class CompanyComplaintFeedbackLists
* @package app\adminapi\lists
*/
class CompanyComplaintFeedbackLists extends BaseAdminDataLists implements ListsSearchInterface
{
/**
* @notes 设置搜索条件
* @return \string[][]
* @author likeadmin
* @date 2023/09/23 15:14
*/
public function setSearch(): array
{
return [
'=' => ['company_id', 'content'],
];
}
/**
* @notes 获取列表
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @author likeadmin
* @date 2023/09/23 15:14
*/
public function lists(): array
{
return CompanyComplaintFeedback::where($this->searchWhere)
->field(['id', 'company_id', 'content'])
->append(['company_name'], true)
->limit($this->limitOffset, $this->limitLength)
->order(['id' => 'desc'])
->withAttr('company_name', function ($value, $data) {
$company = Company::where('id', $data['company_id'])->find();
return $company['company_name'];
})
->select()
->toArray();
}
/**
* @notes 获取数量
* @return int
* @author likeadmin
* @date 2023/09/23 15:14
*/
public function count(): int
{
return CompanyComplaintFeedback::where($this->searchWhere)->count();
}
}

View File

@ -59,6 +59,7 @@ class ShopContractLists extends BaseAdminDataLists implements ListsSearchInterfa
->field(['id', 'contract_no', 'party_a', 'party_b', 'area_manager', 'type', 'evidence_url', 'check_status', 'status', 'notes'])
->limit($this->limitOffset, $this->limitLength)
->order(['id' => 'desc'])
->with(['partyA', 'partyB'])
->select()
->toArray();
}

View File

@ -0,0 +1,59 @@
<?php
namespace app\adminapi\lists\approve;
use app\adminapi\lists\BaseAdminDataLists;
use app\common\lists\ListsSearchInterface;
use app\common\model\Approve;
use app\common\model\auth\Admin;
use app\common\model\Company;
use think\facade\Db;
class ApproveLists extends BaseAdminDataLists implements ListsSearchInterface
{
/**
* @notes 设置搜索条件
* @return \string[][]
* @author likeadmin
* @date 2023/08/31 11:08
*/
public function setSearch(): array
{
return [
'=' => ['type']
];
}
public function queryWhere()
{
$where = [];
// $where[] = ['check_admin_ids', '=', $this->adminId]; // todo 放开过滤条件,只有片区经理才能查看
return $where;
}
public function lists(): array
{
return Approve::where($this->searchWhere)
->where($this->queryWhere())
->with('task')
->field('*')
->append(['area_manager', 'company_name'], true)
->limit($this->limitOffset, $this->limitLength)
->order(['id' => 'desc'])
->select()
->withAttr('area_manager',function($value,$data){
return Admin::where(['id' => $data['check_admin_ids']])->value('name');
})
->withAttr('company_name',function($value,$data){
return Company::where(['admin_id' => $data['check_admin_ids']])->value('company_name');
})
->toArray();
}
public function count(): int
{
return Approve::where($this->searchWhere)->count();
}
}

View File

@ -47,30 +47,34 @@ class WithdrawLists extends BaseAdminDataLists implements ListsSearchInterface
public function lists(): array
{
$lists = Withdraw::where($this->searchWhere)
->append(['s_date', 'e_date', 'company_name'], true)
->with('user')
->where($this->queryWhere())
->withAttr('company_name', function ($value, $data) {
$company = Company::where(['admin_id'=>$data['admin_id']])->find();
return $company['company_name']??'';
})
->withAttr('s_date', function ($value, $data) {
$withdrawedCount = Withdraw::where(['user_id'=>$data['user_id'], 'status'=>3])->count();
$company = Company::where(['admin_id'=>$data['admin_id']])->find();
// 开始时间 如果用户第一次提现申请,则以该公司内用户 周期内第一条数据的生成时间为开始时间
if ($withdrawedCount == 0) {
$firstUserLog = UserAccountLog::where(['company_id'=>$company['id']])->order('id', 'asc')->find();
return $firstUserLog['create_time'];
} else {
// 如果用户已成功申请过提现,则以上次提现的截止日期为开始时间
$withdrawedCount = Withdraw::where(['user_id'=>$data['user_id'], 'status'=>3])->order('id', 'desc')->find();
return $withdrawedCount['transfer_end_cycel'];
}
})
->withAttr('e_date', function ($value, $data) {
// 结束时间
return date('Y-m-d H:i:s', $data['transfer_end_cycel']);
})
->order('id', 'desc')
->limit($this->limitOffset, $this->limitLength)
->select()
->toArray();
// 组装审核时直接跳转到余额明细列表的 开始和结束时间
foreach ($lists as &$item) {
$withdrawedCount = Withdraw::where(['user_id'=>$item['user_id'], 'status'=>3])->count();
$company = Company::where(['admin_id'=>$item['admin_id']])->find();
$item['company_name'] = $company['company_name'];
// 开始时间 如果用户第一次提现申请,则以该公司内用户 周期内第一条数据的生成时间为开始时间
if ($withdrawedCount == 0) {
$firstUserLog = UserAccountLog::where(['company_id'=>$company['id']])->order('id', 'asc')->find();
$item['s_date'] = $firstUserLog['create_time'];
} else {
// 如果用户已成功申请过提现,则以上次提现的截止日期为开始时间
$withdrawedCount = Withdraw::where(['user_id'=>$item['user_id'], 'status'=>3])->order('id', 'desc')->find();
$item['s_date'] = $withdrawedCount['transfer_end_cycel'];
}
// 结束时间
$item['e_date'] = date('Y-m-d H:i:s', $item['transfer_end_cycel']);
}
unset($item);
return $lists;
}

View File

@ -36,8 +36,8 @@ class DictDataLists extends BaseAdminDataLists implements ListsSearchInterface
public function setSearch(): array
{
return [
'%like%' => ['name', 'type_value'],
'=' => ['status', 'type_id']
'%like%' => ['name'],
'=' => ['status', 'type_id', 'type_value']
];
}

View File

@ -62,8 +62,8 @@ class TaskSchedulingPlanLists extends BaseAdminDataLists implements ListsSearchI
}
return TaskSchedulingPlan::where($this->searchWhere)
->where($where)
->with(['template'])
->field(['id', 'create_user_id', 'template_id', 'scheduling_id', 'start_time', 'end_time', 'status'])
->with(['template','templateInfo'])
// ->field(['id', 'create_user_id', 'template_id', 'scheduling_id', 'start_time', 'end_time', 'status'])
->limit($this->limitOffset, $this->limitLength)
->order(['id' => 'desc'])
->select()

View File

@ -0,0 +1,106 @@
<?php
// +----------------------------------------------------------------------
// | likeadmin快速开发前后端分离管理后台PHP版
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
// | 开源版本可自由商用可去除界面版权logo
// | gitee下载https://gitee.com/likeshop_gitee/likeadmin
// | github下载https://github.com/likeshop-github/likeadmin
// | 访问官网https://www.likeadmin.cn
// | likeadmin团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeadminTeam
// +----------------------------------------------------------------------
namespace app\adminapi\logic;
use app\common\model\CompanyComplaintFeedback;
use app\common\logic\BaseLogic;
use think\facade\Db;
/**
* CompanyComplaintFeedback逻辑
* Class CompanyComplaintFeedbackLogic
* @package app\adminapi\logic
*/
class CompanyComplaintFeedbackLogic extends BaseLogic
{
/**
* @notes 添加
* @param array $params
* @return bool
* @author likeadmin
* @date 2023/09/23 15:08
*/
public static function add(array $params): bool
{
Db::startTrans();
try {
CompanyComplaintFeedback::create([
'content' => $params['content'],
]);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
self::setError($e->getMessage());
return false;
}
}
/**
* @notes 编辑
* @param array $params
* @return bool
* @author likeadmin
* @date 2023/09/23 15:08
*/
public static function edit(array $params): bool
{
Db::startTrans();
try {
CompanyComplaintFeedback::where('id', $params['id'])->update([
'content' => $params['content'],
]);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
self::setError($e->getMessage());
return false;
}
}
/**
* @notes 删除
* @param array $params
* @return bool
* @author likeadmin
* @date 2023/09/23 15:08
*/
public static function delete(array $params): bool
{
return CompanyComplaintFeedback::destroy($params['id']);
}
/**
* @notes 获取详情
* @param $params
* @return array
* @author likeadmin
* @date 2023/09/23 15:08
*/
public static function detail($params): array
{
return CompanyComplaintFeedback::findOrEmpty($params['id'])->toArray();
}
}

View File

@ -99,6 +99,36 @@ class ConfigLogic
return $result;
}
/**
* @notes 根据类型获取字典类型
* @param $type
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @author 段誉
* @date 2022/9/27 19:09
*/
public static function getDictTypeValueByType($type)
{
if (!is_string($type)) {
return [];
}
$type = explode(',', $type);
$lists = DictData::whereIn('type_value', $type)->select()->toArray();
if (empty($lists)) {
return [];
}
$result = [];
foreach ($lists as $dict) {
$result[$dict['name']] = $dict;
}
return $result;
}
}

View File

@ -119,6 +119,10 @@ class ShopContractLogic extends BaseLogic
province,city,area,street,village,brigade,address,province province_name,city city_name,area area_name,street street_name,village village_name,brigade brigade_name,master_phone,master_name,
qualification'];
$shopMerchant = ShopMerchant::where(['id' => $data['party_b']])->field($field)->find()->toArray();
$shopMerchant['qualification'] = json_decode($shopMerchant['qualification'], true);
if($shopMerchant['qualification'] && isset($shopMerchant['qualification']['other_qualifications'])){
$shopMerchant['qualification']['other_qualifications']=json_decode($shopMerchant['qualification']['other_qualifications'],true);
}
return $shopMerchant;
})
->withAttr('party_a_info', function ($value, $data) {
@ -126,7 +130,9 @@ class ShopContractLogic extends BaseLogic
province,city,area,street,village,brigade,address,province province_name,city city_name,area area_name,street street_name,village village_name,brigade brigade_name,master_phone,master_name,
qualification'];
$shopMerchant = ShopMerchant::where(['id' => $data['party_a']])->field($field)->find()->toArray();
if($shopMerchant['qualification'] && isset($shopMerchant['qualification']['other_qualifications'])){
$shopMerchant['qualification']['other_qualifications']=json_decode($shopMerchant['qualification']['other_qualifications'],true);
}
return $shopMerchant;
})
->withAttr('status_name', function ($value, $data) {

View File

@ -0,0 +1,96 @@
<?php
// +----------------------------------------------------------------------
// | likeadmin快速开发前后端分离管理后台PHP版
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
// | 开源版本可自由商用可去除界面版权logo
// | gitee下载https://gitee.com/likeshop_gitee/likeadmin
// | github下载https://github.com/likeshop-github/likeadmin
// | 访问官网https://www.likeadmin.cn
// | likeadmin团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeadminTeam
// +----------------------------------------------------------------------
namespace app\adminapi\validate;
use app\common\validate\BaseValidate;
/**
* CompanyComplaintFeedback验证器
* Class CompanyComplaintFeedbackValidate
* @package app\adminapi\validate
*/
class CompanyComplaintFeedbackValidate extends BaseValidate
{
/**
* 设置校验规则
* @var string[]
*/
protected $rule = [
'id' => 'require',
'content' => 'require',
];
/**
* 参数描述
* @var string[]
*/
protected $field = [
'id' => 'id',
'content' => '内容',
];
/**
* @notes 添加场景
* @return CompanyComplaintFeedbackValidate
* @author likeadmin
* @date 2023/09/23 15:08
*/
public function sceneAdd()
{
return $this->only(['content']);
}
/**
* @notes 编辑场景
* @return CompanyComplaintFeedbackValidate
* @author likeadmin
* @date 2023/09/23 15:08
*/
public function sceneEdit()
{
return $this->only(['id','content']);
}
/**
* @notes 删除场景
* @return CompanyComplaintFeedbackValidate
* @author likeadmin
* @date 2023/09/23 15:08
*/
public function sceneDelete()
{
return $this->only(['id']);
}
/**
* @notes 详情场景
* @return CompanyComplaintFeedbackValidate
* @author likeadmin
* @date 2023/09/23 15:08
*/
public function sceneDetail()
{
return $this->only(['id']);
}
}

View File

@ -0,0 +1,51 @@
<?php
namespace app\api\controller;
use app\api\lists\approve\ApproveLists;
use app\common\logic\approve\ApproveLogic;
use app\common\model\Approve;
use Symfony\Component\HttpClient\HttpClient;
use think\Exception;
use think\facade\Db;
class ApproveController extends BaseApiController
{
public function lists()
{
return $this->dataLists(new ApproveLists());
}
public function approveType()
{
$list = Db::name('flow_type')->where(['status' => 1])->field(['id, title'])->select()->toArray();
return $this->success('成功', $list);
}
/**
* 前台通用审批接口 审批后的业务逻辑,需要具体拆解
*/
public function audit()
{
try {
$params = $this->request->param(); // id check_status remark
$approve = Approve::find($params['id']);
if (!$approve) {
throw new Exception('数据不存在');
}
ApproveLogic::audit($approve, $params);
return $this->success('操作成功');
} catch (Exception $exception) {
return $this->fail(ApproveLogic::getError() ?? $exception->getMessage());
}
}
public function detail()
{
$param = $this->request->param();
$detail = ApproveLogic::detail($param['id']);
if (!$detail) {
$this->fail('数据不存在');
}
return $this->success('成功', $detail->toArray());
}
}

View File

@ -1,4 +1,5 @@
<?php
namespace app\api\controller;
use app\common\logic\CompanyLogic;
@ -14,70 +15,122 @@ use app\common\model\user\UserAccountLog;
use think\facade\Log;
use app\job\TaskAdd;
use app\job\TaskInformationJob;
use app\job\TaskTenZehn;
use app\api\controller\JunziqianController;
use think\facade\Db;
use app\common\model\ShopMerchant;
use app\common\model\contract\ShopContract;
class CeshiController extends BaseApiController
{
public array $notNeedLogin = ['index','ceshi','ceshi1','ceshi2'];
public array $notNeedLogin = ['index', 'ceshi', 'ceshi1', 'ceshi2', 'task_ceshi'];
/**
* 任务结算
*/
public function index()
{
{ //1201
// $transaction_pool=780;
// $shang_date_total_price=[
// 'arr'=>['total_price'=>305,'day_money'=>580]
// ];
// if(bcadd($shang_date_total_price['arr']['total_price'],$transaction_pool,2)>$shang_date_total_price['arr']['day_money']){
// if($shang_date_total_price['arr']['total_price']<$shang_date_total_price['arr']['day_money']){
// $shang_date_total_price['arr']['supplement']=bcsub($shang_date_total_price['arr']['day_money'],$shang_date_total_price['arr']['total_price'],2);
// }else{
// $shang_date_total_price['arr']['supplement']=0;
// $shang_date_total_price['arr']['after_transaction_pool']=0;
$id = 9;
$shopMerchant = ShopMerchant::find(['id', $id]);
// $data=json_decode($parmas['data'],true);
// if($data['status']==1){
// if($data['organizationRegNo']!=$shopMerchant->organization_code){
// Log::error(['认证回调错误:',$parmas]);
// return json(['success' => false, 'msg' => '认证回调错误']);
// }
// $shang_date_total_price['arr']['before_transaction_pool']=$transaction_pool;
// Task::where('id', 839)->update(['status' => 3,'extend'=>json_encode($shang_date_total_price)]);
// $day_money=bcsub($shang_date_total_price['arr']['total_price'],$shang_date_total_price['arr']['day_money'],2);//当天还剩多少
// TaskTemplate::where('id',109)->update(['transaction_pool'=>bcadd($transaction_pool,$day_money,2)]);
$shopMerchant->save(['is_authentication' => 1]);
// 生成合同
$createContractData = [
'id' => $id,
'party_a' => 1,
'party_a_name' => '泸州市海之农科技有限公司',
'party_b' => $id,
'party_b_name' => $shopMerchant->company_name,
'contract_type' => 22,
];
$model = new ShopContract();
$model->contract_no = time();
$model->create_time = time();
$model->check_status = 1;
$model->update_time = time();
$model->setAttrs($createContractData);
$res = $model->save($createContractData);
// }
$all=TaskSchedulingPlan::where('id',943)->with(['template_info','scheduling'])->select()->toArray();
foreach($all as $k=>$v){
queue(TaskInformationJob::class,$v);
}
return true;
$plan_all = TaskScheduling::where('id',119)->with('company_info')->select()->toArray();
$plan_ids = [];
foreach ($plan_all as $k => $v) {
$all = TaskTemplate::where('id', 116)->where('task_scheduling', $v['id'])->limit(30)->select()->toArray();
$plan_ids[] = $v['id'];
if ($all) {
$plan_all[$k]['template'] = $all;
} else {
unset($plan_all[$k]);
}
}
$company_id = [];
foreach ($plan_all as $k => $v) {
foreach ($v['template'] as $kk => $vv) {
halt($res);
queue(TaskAdd::class,['data'=>$vv,'data_two'=>$v]);
$select = Db::name('company_form')->where('type', 0)
->select();
$id = 0;
foreach ($select as $key => $value) {
$id = $value['id'];
if ($value['organization_code'] != '' || $value['organization_code'] != null) {
// $pattern = "/\*/";
$name = $value['master_name'];
// if(preg_match($pattern, $name)){
// $name=$value['master_name'];
// }
// if ($value['master_email']) {
$email = $value['master_email'];
// } else {
// $email = substr(md5(uniqid()), rand(0, 22), 10) . "@lihai.com";
// }
$shopMerchantCertificationData = [
'name' => $name,
'organization_code' => $value['organization_code'],
'business_license' => 'https://lihai001.oss-cn-chengdu.aliyuncs.com/def/561f8202305171526091317.png',
'master_name' => $value['master_name'],
'master_email' => $email,
'id' => $value['id'],
];
// Db::name('company_form')->where('id', $value['id'])->update(['master_email' => $email]);
queue(TaskTenZehn::class,$shopMerchantCertificationData);
} else {
Db::name('company_form')->where('id', $value['id'])->update(['type' => -1]);
continue;
}
$company_id[] = $v['company_id'];
// $a=app(JunziqianController::class)->ShopMerchantCertification($shopMerchantCertificationData);
}
halt($id);
}
public function ceshi1()
{
//认证一条龙
$shopMerchantCertificationData = [
'name' => 1212,
'organization_code' => 2323,
'business_license' => 'https://lihai001.oss-cn-chengdu.aliyuncs.com/def/561f8202305171526091317.png',
'master_name' => 3423,
'master_email' => 343,
'id' => 123,
];
app(JunziqianController::class)->ShopMerchantCertification($shopMerchantCertificationData);
halt(111);
}
public function ceshi2()
{
//重新认证
$shopMerchantCertificationData = [
'name' => 1212,
'organization_code' => 2323,
'business_license' => 'https://lihai001.oss-cn-chengdu.aliyuncs.com/def/561f8202305171526091317.png',
'master_name' => 3423,
'master_email' => 343,
'id' => 123,
];
app(JunziqianController::class)->organizationReapply($shopMerchantCertificationData);
halt(111);
}
/**
* 任务刷新
*/
public function ceshi(){
return false;
$time=strtotime(date('Y-m-d'));
// $time=strtotime(date('Y-m-d'));
// $tiem_end=$time+86399;where('cron_time','<',$time)->
$plan_all=TaskScheduling::where('id',99)->with('company_info')->select()->toArray();
$plan_all=TaskScheduling::where('id',8)->with('company_info')->select()->toArray();
foreach($plan_all as $k=>$v){
$all=TaskTemplate::where('status',1)->where('task_scheduling',$v['id'])->limit(30)->select()->toArray();
if($all){
@ -96,44 +149,31 @@ return false;
Company::where('id','in',$company_id)->inc('day_count')->update();
}
public function stage_inspection($v,$moeny_type='moeny',$title='一'){
$count_moeny=0;
foreach($v['template'] as $kkkk=>$vvvv){
$count_moeny+=$vvvv[$moeny_type];
}
if($count_moeny>200){
Log::info($title.'阶段金额大于200无法下达'.json_encode($v['company_info']));
return false;
}
return true;
}
//三轮车判断
public function ceshi1(){
$params=[
'car_id'=>3,
'start_time'=>'2023-08-18',
'end_time'=>'2023-08-18 23:59:59'
];
$task=Task::where('id',487)->select()->toArray();
foreach($task as $k=>$v){
if(isset($v['extend']['terminus']['lnglat'])&& isset($v['extend']['transfer']['lnglat'])){
$arr=$v['extend']['terminus']['lnglat'];
$a=app(RemoteController::class)->coordinate($params,$arr[0],$arr[1]);
$arr_two=$v['extend']['transfer']['lnglat'];
$b=app(RemoteController::class)->coordinate($params,$arr_two[0],$arr_two[1]);
if($a<500 && $b<500){
Task::where('id',$v['id'])->update(['status'=>3]);
}
public function task_ceshi()
{
$time = strtotime(date('Y-m-d'));
// $tiem_end=$time+86399;
$plan_all = TaskScheduling::where('cron_time', '<', $time)->where('status', 1)->where('company_type', 18)->with('company_info')->select()->toArray();
$plan_ids = [];
foreach ($plan_all as $k => $v) {
$all = TaskTemplate::where('status', 1)->where('task_scheduling', $v['id'])->limit(30)->select()->toArray();
$plan_ids[] = $v['id'];
if ($all) {
$plan_all[$k]['template'] = $all;
} else {
unset($plan_all[$k]);
}
}
$company_id = [];
foreach ($plan_all as $k => $v) {
foreach ($v['template'] as $kk => $vv) {
queue(TaskAdd::class,['data'=>$vv,'data_two'=>$v]);
}
$company_id[] = $v['company_id'];
}
Company::where('id', 'in', $company_id)->inc('day_count')->update();
TaskScheduling::where('id', 'in', $plan_ids)->update(['cron_time' => time()]);
Log::info('定时任务下发执行成功' . date('Y-m-d H:i:s'));
}
public function ceshi2(){
$company = Company::where(['id'=>238])->find();
$re = CompanyLogic::originationFaceCreate($company);
halt($re);
}
}
}

View File

@ -58,4 +58,16 @@ class CommonController extends BaseApiController
return $this->data($data->toArray());
}
public function dict_data_lists_by_type_value($type_value)
{
$data= DictData::where(['type_value' => $type_value])
->append(['status_desc'])
->limit(100)
->order(['sort' => 'desc', 'id' => 'desc'])
->select();
return $this->data($data->toArray());
}
}

View File

@ -11,7 +11,7 @@ class CompanyAccountLogController extends BaseApiController{
$where=[];
$where['company_id']=$this->userInfo['company_id'];
$where['change_object']=CompanyAccountLog::SHAREHOLDER;
$where['change_type']=CompanyAccountLog::TASK_INC_SHAREHOLDER_MONEY;
// $where['change_type']=CompanyAccountLog::TASK_INC_SHAREHOLDER_MONEY;
$count=CompanyAccountLog::where($where)->count();
$lists=CompanyAccountLog::where($where)->page($page,$limit)->order('id','desc')->select();
return $this->success('ok',['count'=>$count,'list'=>$lists]);

View File

@ -5,9 +5,12 @@ namespace app\api\controller;
use app\common\logic\contract\ContractLogic;
use app\common\model\auth\Admin;
use app\common\model\Company;
use app\common\model\company\CompanyAccountLog;
use app\common\model\contract\Contract;
use app\common\model\task\Task;
use app\common\model\user\User;
use app\common\model\user\UserAccountLog;
use think\Exception;
use think\facade\Db;
use app\common\model\informationg\UserInformationg;
use app\common\model\informationg\UserInformationgDemand;
@ -18,6 +21,8 @@ use app\common\model\informationg\UserInformationgDemand;
*/
class CompanyController extends BaseApiController
{
public array $notNeedLogin = ['street_company'];
//**签约公司*/
public function index()
@ -139,7 +144,14 @@ class CompanyController extends BaseApiController
$query = User::where('id', $id);
$user = $query->with(['company' => function ($query) {
$query->field('id,company_name');
}])->field('id,sex,avatar,nickname name,account,mobile phone,id_card,qualification,province,province province_name,city,city city_name,area,area area_name,street,street street_name,village,village village_name,brigade,brigade brigade_name, is_contract,company_id,is_captain')->find()->toArray();
}])
->field('id,sex,avatar,nickname name,account,mobile phone,id_card,qualification,province,province province_name,city,city city_name,area,area area_name,street,street street_name,village,village village_name,brigade,brigade brigade_name, is_contract,company_id,is_captain, group_id')
->append(['is_service_manager'], true)
->withAttr('is_service_manager', function ($value, $data) {
return $data['group_id'] == 14 ?1 :0;
})
->find()
->toArray();
$contract = Contract::where("type", 2)->where('party_b', $id)->append(['contract_type_name'])->find();
$user['contract'] = $contract;
@ -194,7 +206,7 @@ class CompanyController extends BaseApiController
public function shareholder_info()
{
// $params = $this->request->param();
$find = Company::where('id', $this->userInfo['company_id'])->field('shareholder_money,village')->find()->toArray();
$find = Company::where('id', $this->userInfo['company_id'])->field('id,shareholder_money,village')->find()->toArray();
$find['is_contract'] = 0;
$find['check_status'] = 0;
if ($find) {
@ -220,10 +232,17 @@ class CompanyController extends BaseApiController
} else {
$find['is_village'] = 0;
}
// 股金任务是否完成
$task = Task::where(['company_id' => $find['id'], 'type' => 35, 'status' => 3])->find();
$find['is_done_task'] = 0;
if (!empty($task)) {
$find['is_done_task'] = 1;
}
} else {
$find['contract_url'] = '';
$find['contract_time'] = '';
$find['is_village'] = 0;
$find['is_done_task'] = 0;
}
return $this->success('ok', $find);
}
@ -255,8 +274,90 @@ class CompanyController extends BaseApiController
}
return $this->fail(ContractLogic::getError());
}
/**
* 小组服务公司股金上交
*/
public function pay_share_capital()
{
// return
try {
// 小组服务公司
$serviceGroupCompany = Company::where('id', $this->userInfo['company_id'])->find()->toArray();
// 村管理公司
$villageCompany = Company::where(['village'=>$serviceGroupCompany['village'], 'company_type' => 17])->find()->toArray();
Db::startTrans();
// 上交股金金额
$amount = $serviceGroupCompany['shareholder_money'];
$sharecapitalChangeLogData = [
'subordinate_company_id' => $serviceGroupCompany['id'],
'parent_company_id' => $villageCompany['id'],
'amount' => $amount,
'create_time' => time(),
'update_time' => time(),
];
$sharecapitalChangeLogInsertId = Db::name('company_sharecapital_change_log')->insertGetId($sharecapitalChangeLogData);
// 小组服务公司股金变动 + 公司股金减少记录
$leftAmount = bcsub($serviceGroupCompany['shareholder_money'], $amount, 2);
Company::where('id', $this->userInfo['company_id'])->save(['shareholder_money'=> $leftAmount]);
$company_log1 = [
'sn' => generate_sn(UserAccountLog::class, 'sn', 20),
'company_id' => $serviceGroupCompany['id'],
'change_object' => 2, // 变动对象 1余额 2股金
'change_type' => CompanyAccountLog::SHAREHOLDER_DEC_DEPOSIT, //变动类型
'action' => 2, //1-增加 2-减少
'left_amount' => $leftAmount, //变动后数量
'change_amount' => $amount, //变动数量
'extend' => json_encode(['company_sharecapital_change_log_id' => $sharecapitalChangeLogInsertId]),
'status' => 1,
];
CompanyAccountLog::create($company_log1);
// 村管理公司股金变动 + 公司股金增加记录
$addAmount = bcadd($villageCompany['shareholder_money'], $amount, 2);
Company::where('id', $villageCompany['id'])->save(['shareholder_money'=>$addAmount]);
// 公司账户变动记录
$company_log2 = [
'sn' => generate_sn(UserAccountLog::class, 'sn', 20),
'company_id' => $villageCompany['id'],
'change_object' => 2, // 变动对象 1余额 2股金
'change_type' => CompanyAccountLog::TASK_INC_SHAREHOLDER_MONEY, //变动类型
'action' => 1, //1-增加 2-减少
'left_amount' => $addAmount, //变动后数量
'change_amount' => $amount, //变动数量
'extend' => json_encode(['company_sharecapital_change_log_id' => $sharecapitalChangeLogInsertId]),
'status' => 1,
];
CompanyAccountLog::create($company_log2);
Db::commit();
return $this->success('上交成功');
} catch (Exception $e) {
Db::rollback();
return $this->fail($e->getMessage());
}
}
public function complaint_feedback()
{
$params = $this->request->param();
$company = Company::where('id', $this->userInfo['company_id'])->find()->toArray();
Db::name('company_complaint_feedback')->insertGetId(['company_id'=>$company['id'], 'content'=>$params['content'],'create_time'=>time(), 'update_time'=>time()]);
return $this->success('成功');
}
/**
* 查询镇农科公司
*/
public function street_company(){
$street=$this->request->param('street_code');
$company=Db::query("select * from la_company where company_type=:company_type and FIND_IN_SET(:street,responsible_area)", ['company_type' => 41,'street'=>$street], true);
if($company){
return $this->success('ok',['title'=>$company[0]['company_name'],'organization_code'=>$company[0]['organization_code']]);
}else{
return $this->fail('当前区域无镇农科公司');
}
}
}

View File

@ -3,6 +3,8 @@
namespace app\api\controller;
use app\common\model\task_scheduling_plan\TaskSchedulingPlan;
use app\job\TaskInformationJob;
use app\job\TownTaskAdd;
use app\job\TownTaskSettlementJob;
use think\facade\Log;
use app\common\model\Company;
use app\common\model\task_template\TaskTemplate;
@ -20,24 +22,36 @@ class CronController extends BaseApiController
public array $notNeedLogin = ['settlement','task_add'];
/**
* 结算
* 小组服务公司任务结算
*/
public function settlement(){
$all=TaskSchedulingPlan::where('is_pay',0)->with(['template_info','scheduling'])->select()->toArray();
// $all=TaskSchedulingPlan::where('is_pay',0)->with(['template_info','scheduling'])->select()->toArray();
$all = TaskSchedulingPlan::whereDay('end_time','yesterday')
->withJoin(['scheduling'], 'left')
->where('scheduling.company_type', 18)
->where('is_pay',0)
->with(['template_info'])
->select()
->toArray();
foreach($all as $k=>$v){
queue(TaskInformationJob::class,$v);
}
Log::info('定时任务结算执行成功'.date('Y-m-d H:i:s'));
return $this->success('定时任务结算执行成功');
Log::info('小组服务公司定时任务结算执行成功'.date('Y-m-d H:i:s'));
return $this->success('小组服务公司定时任务结算执行成功');
}
/**
* 小组服务公司任务下发
*/
public function task_add(){
//任务下发
// $time=strtotime(date('Y-m-d',strtotime('-1 day')));
$time = strtotime(date('Y-m-d'));
// $tiem_end=$time+86399;
$plan_all = TaskScheduling::where('cron_time', '<', $time)->where('status', 1)->with('company_info')->select()->toArray();
// $plan_all = TaskScheduling::where('cron_time', '<', $time)->where('status', 1)->with('company_info')->select()->toArray();
$plan_all = TaskScheduling::where('cron_time', '<', $time)->where('status', 1)->where('company_type', 18)->with('company_info')->select()->toArray();
$plan_ids = [];
foreach ($plan_all as $k => $v) {
$all = TaskTemplate::where('status', 1)->where('task_scheduling', $v['id'])->limit(30)->select()->toArray();
@ -57,7 +71,59 @@ class CronController extends BaseApiController
}
Company::where('id', 'in', $company_id)->inc('day_count')->update();
TaskScheduling::where('id', 'in', $plan_ids)->update(['cron_time' => time()]);
Log::info('定时任务下发执行成功' . date('Y-m-d H:i:s'));
Log::info('小组服务公司定时任务下发执行成功' . date('Y-m-d H:i:s'));
return $this->success('定时任务下发执行成功');
}
/**
* 镇农科公司任务结算
*/
public function town_task_settlement()
{
Log::info('镇农科公司定时任务结算执行-开始'.date('Y-m-d H:i:s'));
//yesterday 昨日未结算的任务计划
$taskSchedulingPlanList = TaskSchedulingPlan::whereDay('end_time','yesterday')
->withJoin(['scheduling'], 'left')
->where('scheduling.company_type', 41)
->where('is_pay',0)
->with(['template_info'])
->select()
->toArray();
foreach($taskSchedulingPlanList as $taskSchedulingPlan){
queue(TownTaskSettlementJob::class, $taskSchedulingPlan);
}
Log::info('镇农科公司定时任务结算执行-结束'.date('Y-m-d H:i:s'));
return $this->success('镇农科公司定时任务结算执行成功');
}
/**
* 镇农科公司任务下发
*/
public function town_task_add()
{
//任务下发
$time = strtotime(date('Y-m-d'));
// 查询系统 所有镇农科公司 未下发 的 任务安排
$taskSchedulingList = TaskScheduling::where('cron_time', '<', $time)->where('status', 1)->where('company_type', 41)->with('company_info')->select()->toArray();
$taskSchedulingIds = [];
$companyIds = [];
foreach ($taskSchedulingList as $k => $taskScheduling) {
$templateList = TaskTemplate::where('status', 1)->where('task_scheduling', $taskScheduling['id'])->limit(30)->select()->toArray();
$taskSchedulingIds[] = $taskScheduling['id'];
$companyIds[] = $taskScheduling['company_id'];
foreach ($templateList as $template) {
queue(TownTaskAdd::class, $template);
// TaskLogic::TownCronAdd($template); // 手动下发用
}
if (empty($templateList)) {
unset($taskSchedulingList[$k]);
}
}
Company::where('id', 'in', $companyIds)->inc('day_count')->update();
TaskScheduling::where('id', 'in', $taskSchedulingIds)->update(['cron_time' => time()]);
Log::info('镇农科公司定时任务下发执行成功' . date('Y-m-d H:i:s'));
return $this->success('镇农科公司定时任务下发执行成功');
}
}

View File

@ -108,7 +108,7 @@ class IndexController extends BaseApiController
if ($find) {
if ($find['signing_timer'] == 0) {
Db::name('contract')->where('id', $a['id'])->update(['signing_timer' => 1]);
return true;
return json(['success' => true, 'msg' => '成功']);
} else if ($find['signing_timer'] == 1) {
Db::name('contract')->where('id', $a['id'])->update(['status' => 1, 'signing_timer' => 2]);
if ($find['type'] == 1) {
@ -126,7 +126,7 @@ class IndexController extends BaseApiController
/**商户合同签约回调 */
public function shopContractNotifyUrl()
{
$a = Request()->get();
$a = Request()->param();
Log::info(['商户合同签约回调', $a]);
// 获取合同详情
if ($a) {
@ -136,7 +136,7 @@ class IndexController extends BaseApiController
// 合同一方已签约
if ($find['signing_timer'] == 0) {
Db::name('shop_contract')->where('id', $a['id'])->update(['signing_timer' => 1]);
return true;
return json(['success' => true, 'msg' => '成功']);
} else if ($find['signing_timer'] == 1) {
// 合同另一方已签约,修改合同状态,修改公司状态
Db::name('shop_contract')->where('id', $a['id'])->update(['status' => 1, 'signing_timer' => 2]);
@ -531,10 +531,17 @@ class IndexController extends BaseApiController
{
$parmas = Request()->param();
Log::info(['认证回调:',$parmas]);
try {
$data=json_decode($parmas['data'],true);
if($data['status']==2){
return json(['success' => false, 'msg' => '失败']);
}
if ($parmas) {
// 商城系统商户入驻
if (isset($parmas['type']) && $parmas['type'] == 'shop_merchant') {
Db::name('company_form')->where('master_email',$data['emailOrMobile'])->update(['type' => 1]);
$this->shopMerchantCall($parmas);
return json(['success' => true, 'msg' => '成功']);
} else {
@ -560,7 +567,7 @@ class IndexController extends BaseApiController
}
} catch (\Exception $e) {
Log::error('认证回调错误:'.$e->getMessage());
Log::error('认证回调错误569:'.$e->getMessage());
}
return json(['success' => false, 'msg' => '失败,没有参数']);
@ -569,8 +576,18 @@ class IndexController extends BaseApiController
private function shopMerchantCall($parmas)
{
$shopMerchant = ShopMerchant::find(['id', $parmas['id']]);
Log::error($shopMerchant);
if($shopMerchant==null){
// Log::error(['没有商户580:',$parmas]);
return json(['success' => false, 'msg' => '认证回调错误']);
}
$data=json_decode($parmas['data'],true);
if($data['status']==1){
if($data['organizationRegNo']!=$shopMerchant['organization_code']){
Log::error(['认证回调错误586:',$parmas]);
return json(['success' => false, 'msg' => '认证回调错误']);
}
$shopMerchant->save(['is_authentication' => 1]);
// 生成合同
$createContractData = [

View File

@ -26,7 +26,7 @@ class JunziqianController extends BaseApiController
public function initialize()
{
$this->serviceUrl=env('junzi.url');
$this->serviceUrl=env('junzi.url_prefix');
$this->appkey=env('junzi.app_key');
$this->appSecret=env('junzi.app_secret');
@ -160,6 +160,19 @@ class JunziqianController extends BaseApiController
return $response;
}
public function shopMerchantStatusQuery($email)
{
$param = Request()->param();
$requestUtils = new RequestUtils($this->serviceUrl, $this->appkey, $this->appSecret);
//初始化合同参数
$request = array(
"emailOrMobile" => $email, //TODO *
);
//发起请求
$response = $requestUtils->doPost("/v2/user/organizationAuditStatus", $request);
return $response;
}
//企业自定义公章
public function Custom_seal()
{

View File

@ -16,7 +16,7 @@ namespace app\api\controller;
use app\api\lists\recharge\RechargeLists;
use app\api\logic\RechargeLogic;
use app\api\validate\RechargeValidate;
use app\common\model\company\CompanyAccountLog;
/**
* 充值控制器
@ -36,6 +36,18 @@ class RechargeController extends BaseApiController
{
return $this->dataLists(new RechargeLists());
}
public function deposit_lists()
{
$params=$this->request->param();
$list=CompanyAccountLog::where('company_id',$this->userId)->page($params['page_no'],15)->select();
$datas=[];
foreach($list as $k=>$v){
$datas[$k]['create_time']=$v['create_time'];
$datas[$k]['order_amount']=$v['change_amount'];
$datas[$k]['tips']='充值保证金'.$v['change_amount'];
}
return $this->success('ok',['count'=>0,'extend'=>[],'lists'=>$datas,'page_no'=>$params['page_no'],'page_size'=>$params['page_size']]);
}
/**

View File

@ -208,6 +208,7 @@ class RemoteController extends BaseApiController
/**
*
* 计算两点之间的距离
* 返回米
*/
function calculateDistance($longitude1, $latitude1, $longitude2, $latitude2)
{
@ -220,7 +221,6 @@ class RemoteController extends BaseApiController
cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) *
sin($dLon / 2) * sin($dLon / 2);
$c = 2 * asin(sqrt($a));
return $earthRadius * $c * 100;
return round($earthRadius * $c*1000) ;
}
}

View File

@ -3,13 +3,19 @@
namespace app\api\controller;
use app\common\logic\task\TaskLogic;
use app\common\model\Approve;
use app\common\model\Company;
use app\common\model\company\CompanyProperty;
use app\common\model\contract\Contract;
use app\common\model\dict\DictData;
use app\common\model\flow\Flow;
use app\common\model\informationg\UserInformationg;
use app\common\model\task\Task;
use app\common\model\task_template\TaskTemplate;
use app\common\model\user\User;
use think\facade\Log;
use think\Exception;
use think\facade\Db;
class TaskController extends BaseApiController
{
@ -50,11 +56,13 @@ class TaskController extends BaseApiController
if (isset($param['status']) && $param['status'] > 0) {
$where[] = ['status', '=', $param['status']];
}
$townTaskTypeList = DictData::where(['type_value' => 'town_task_type', 'status' => 1])->column('value', 'id');
$res = Task::where($where)
->field(['id', 'title', 'money', 'template_id', 'director_uid', 'company_id', 'start_time', 'end_time', 'director_uid', 'type', 'status', 'content', 'extend'])
->page($page, 25)
->order(['id' => 'desc', 'status' => 'asc'])
->select()->toArray();
foreach ($res as $k => $item) {
if ($item['type'] == 33) {
$company = Company::where('id', $item['company_id'])->field('id,deposit,company_money,user_id,day_count,company_type,province,city,area,street,village,brigade,responsible_area')->find(); // 可能要判断预存金是否满足
@ -74,7 +82,68 @@ class TaskController extends BaseApiController
$res[$k]['extend']['transaction'] = '';
}
}
if (isset($townTaskTypeList[$item['type']])) {
if ($townTaskTypeList[$item['type']] == 'town_task_type_1') {
// 协助总负责人开展工作任务
$groupServiceCompanyCount = 0; // 已安排任务的小组服务公司总数
$notDoneTaskGroupServiceCompanyCount = 0; // 未完成每日任务的小组服务公司总数
$townCompany = Company::where(['id' => $item['company_id']])->find();
$groupServiceCompanyList = Company::where(['street' => $townCompany['street'], 'company_type' => 18])->select()->toArray();
foreach ($groupServiceCompanyList as $groupServiceCompany) {
// 小组服务公司是否有对应的每日任务安排
$templateList = TaskTemplate::where(['company_id' => $groupServiceCompany['id']])->whereIn('type', [31, 32, 33])->select()->toArray();
if(count($templateList) === 3) {
$groupServiceCompanyCount += 1;
foreach ($templateList as $template) {
$task = Task::where(['template_id' => $template['id'], 'status' => 3])->find();
if (empty($task)) {
$notDoneTaskGroupServiceCompanyCount += 1;
break;
}
}
}
}
$res[$k]['extend'] = ['total' => $groupServiceCompanyCount, 'not_done_count' => $notDoneTaskGroupServiceCompanyCount];
}
if ($townTaskTypeList[$item['type']] == 'town_task_type_2') {
// 拓展小组服务团队工作任务
$contractCount = 15; // 小组服务合同总数
$doneContractCount = 0; // 已完成小组服务合同数
$townCompany = Company::where(['id' => $item['company_id']])->find();
$doneContractCount = Contract::where(['party_a' => $townCompany['id'], 'status' => 1, 'contract_type' => 25])->count();
$res[$k]['extend'] = ['total' => $contractCount, 'done_count' => $doneContractCount];
}
}
// break;
// case 'town_task_type_2':
// // 拓展小组服务团队工作任务
//
// break;
// case 'town_task_type_3':
// // 督促小组服务团队完成任务,协助开展工作,解决问题任务
//
// break;
// case 'town_task_type_4':
// // 督促小组服务团队学习任务
//
// break;
// case 'town_task_type_5':
// // 督促小组服务团队完成需求手机和交易任务
//
// break;
// case 'town_task_type_6':
// // 督促小组服务团队入股村联络员所成立的公司任务
//
// break;
// case 'town_task_type_7':
// // 安全工作任务
//
// break;
}
return $this->success('ok', $res);
}
@ -155,9 +224,13 @@ class TaskController extends BaseApiController
if( $parmas['terminus']['lnglat'][0]==null || $parmas['terminus']['lnglat'][0]<=0){
return $this->fail('定位不存在');
}
$res = App(RemoteController::class)->coordinate($datas, $parmas['terminus']['lnglat'][0], $parmas['terminus']['lnglat'][1]);
$res = App(RemoteController::class)->calculateDistance($task['extend']['terminus']['lnglat'][0],$task['extend']['terminus']['lnglat'][1], $parmas['terminus']['lnglat'][0], $parmas['terminus']['lnglat'][1]);
if($res>200){
return $this->fail('定位坐标大于200米请重新打卡。'.$res.'米');
}
$res_two = App(RemoteController::class)->coordinate($datas, $parmas['terminus']['lnglat'][0], $parmas['terminus']['lnglat'][1]);
if($res===false){
return $this->fail('定位不存在|或GPS无轨迹');
return $this->fail('GPS无轨迹');
}
$task['extend']['update']['terminus'] = $parmas['terminus'];
}
@ -165,21 +238,25 @@ class TaskController extends BaseApiController
if( $parmas['transfer']['lnglat'][0]==null || $parmas['transfer']['lnglat'][0]<=0){
return $this->fail('定位不存在');
}
$res = App(RemoteController::class)->coordinate($datas, $parmas['transfer']['lnglat'][0], $parmas['transfer']['lnglat'][1]);
$res = App(RemoteController::class)->calculateDistance($task['extend']['transfer']['lnglat'][0],$task['extend']['transfer']['lnglat'][1], $parmas['transfer']['lnglat'][0], $parmas['transfer']['lnglat'][1]);
if($res>200){
return $this->fail('定位坐标大于200米请重新打卡。'.$res.'米');
}
$res_two = App(RemoteController::class)->coordinate($datas, $parmas['transfer']['lnglat'][0], $parmas['transfer']['lnglat'][1]);
if($res===false){
return $this->fail('定位不存在|或GPS无轨迹');
return $this->fail('GPS无轨迹');
}
$task['extend']['update']['transfer'] = $parmas['transfer'];
}
if (isset($task['extend']['update']['terminus']) && isset($task['extend']['update']['transfer'])) {
$data['status'] = 3;
}
if($res<100){
if($res_two<1000){
$data['extend'] = json_encode($task['extend']);
Task::where('id', $parmas['id'])->update($data);
return $this->success('更新成功');
}
return $this->fail('定位坐标大于100米请重新打卡');
return $this->fail('定位坐标大于200米请重新打卡。'.$res.'米');
}
public function informationg_list()
@ -202,4 +279,99 @@ class TaskController extends BaseApiController
}
return $this->success('ok', $list);
}
/**
* 其他任务详情
*/
public function other_task_detail(){
$parmas = $this->request->param();
$task = TaskLogic::detail($parmas);
$extend = $task['extend'];
if ($extend['other']['is_commit'] == 1) {
$approve = Approve::where(['task_id' =>$task['id']])->find();
$task['approve_status'] = $approve['check_status']; //审核状态
$task['deny_notes'] = $approve['remark']; // 拒绝原因
}
return $this->success('ok', $task);
}
/**
* 其他任务 -提交
*/
public function commit_other_task()
{
try {
$parmas = $this->request->param(); //id note annex vedio_annex
$task = TaskLogic::detail($parmas);
if (empty($task)) {
$this->fail('任务不存在');
}
$extend = ['other' => ['is_commit' => 1, 'note' => $parmas['note'], 'annex'=>$parmas['annex'], 'video_annex' => $parmas['video_annex']]];
Db::startTrans();
Task::where(['id' => $parmas['id']])->update(['extend' => json_encode($extend), 'update_time'=>time(), 'director_uid'=>$this->userId]); // director_uid 指派人
// 片区经理
$areaManagerId = User::where(['id' => $this->userId])->with('company')->value('area_manager');
// 没有则创建审批任务
$approveModel = Approve::where(['task_id' => $task['id']])->find();
if ($approveModel->isEmpty()) {
$approveModel->type = 1;
$approveModel->flow_id = 1;
$approveModel->name = $task['title'];
$approveModel->type = 1;
$approveModel->admin_id = 0; // 后台发起人id 暂时为0
$approveModel->user_id = $this->userId; // 前台发起人用户id
$approveModel->task_id = $task['id']; // 前台发起人用户id
$approveModel->department_id = '0';
$approveModel->check_admin_ids = $areaManagerId; // 当前审批人ID 片区经理的admin_id
$approveModel->check_status = 1; // 状态 0待审核,1审核中,2审核通过,3审核不通过,4撤销审核
$approveModel->other_type = 6;
$approveModel->create_time = time();
$approveModel->update_time = time();
$approveModel->save();
} else {
// 有则更新状态
$approveModel->check_status = 1; // 状态 0待审核,1审核中,2审核通过,3审核不通过,4撤销审核
$approveModel->save();
}
Db::commit();
return $this->success('ok', []);
} catch (Exception $e) {
Db::rollback();
return $this->fail($e->getMessage());
}
}
/**
* 镇农科公司任务详情
*/
public function service_task_detail()
{
$param = $this->request->param();
$task = TaskLogic::detail($param);
return $this->success('成功', $task);
}
/**
* 镇农科公司任务-督促小组服务团队学习任务 -提交
*/
public function commit_town_task_type4()
{
try {
$parmas = $this->request->param(); //id study_photo sign_in_table study_content
$extend = ['town_task_type_4' => ['study_photo'=>$parmas['study_photo'], 'sign_in_table'=>$parmas['sign_in_table'], 'study_content'=> $parmas['study_content']]];
if (count($parmas['study_photo']) >= 5 && !empty($parmas['sign_in_table']) && strlen($parmas['study_content'])>=50) {
Task::where('id', $parmas['id'])->save(['extend' => json_encode($extend), 'status' => 3]);
} else {
Task::where('id', $parmas['id'])->save(['extend' => json_encode($extend)]);
}
return $this->success('成功', []);
} catch (Exception $e) {
return $this->fail($e->getMessage());
}
}
}

View File

@ -44,6 +44,40 @@ class UploadController extends BaseApiController
}
}
/**
* @notes 上传视频
* @return Json
* @author 段誉
* @date 2021/12/29 16:27
*/
public function video()
{
try {
$cid = $this->request->post('cid', 0);
$result = UploadService::video($cid);
return $this->success('上传成功', $result);
} catch (Exception $e) {
return $this->fail($e->getMessage());
}
}
/**
* @notes 上传文件
* @return Json
* @author 段誉
* @date 2021/12/29 16:27
*/
public function file()
{
try {
$cid = $this->request->post('cid', 0);
$result = UploadService::file($cid);
return $this->success('上传成功', $result);
} catch (Exception $e) {
return $this->fail($e->getMessage());
}
}
}

View File

@ -21,10 +21,12 @@ use app\api\validate\PasswordValidate;
use app\api\validate\SetUserInfoValidate;
use app\api\validate\UserValidate;
use app\common\logic\contract\ContractLogic;
use app\common\model\Company;
use app\common\model\contract\Contract;
use app\common\model\dict\DictData;
use app\common\model\user\User;
use app\common\model\user\UserAccountLog;
use app\common\model\user\Withdraw;
use Common;
use think\facade\Db;
@ -160,17 +162,18 @@ class UserController extends BaseApiController
}
/**
* 获取用户当前可提现的周期以及可提现的金额
* 获取用户当前可提现的截止时间以及可提现的金额
*/
public function getCurrCycleWithdraw()
{
$userInfo = User::find(['id' => $this->userId]);
// 数据字典 提现周期 单位:天数
$dictData = ConfigLogic::getDictByType('withdraw_cycle');
$endCycle = strtotime(date('Y-m-d', strtotime("-{$dictData['withdraw_cycle'][0]['value']} day")));
$company = Company::find(['id' => $userInfo['company_id']]);
// 用户提现周期截止日期
$endCycle = $company['withdraw_deadline'];
$isDraw = time() >= $endCycle? 1: 0; // 当前时间大于截止时间,可提现
// 计算公司周期内所有用户已完成的 变动类型为任务收益金额增加 动作为增加的 未提现状态 的变动金额之和
$currTotalWithdrawMoney = UserAccountLog::where(['company_id'=>$userInfo['company_id'], 'action'=>1, 'status'=>1, 'is_withdraw'=>0, 'change_type'=>202])->where('create_time','<', $endCycle)->sum('change_amount');
return $this->success('成功', ['end_cycle'=>$endCycle, 'user_currrent_total_withdraw_money'=>$currTotalWithdrawMoney], 1, 1);
$currTotalWithdrawMoney = UserAccountLog::where(['company_id'=>$userInfo['company_id'], 'action'=>1, 'status'=>1, 'is_withdraw'=>0, 'change_type'=>202])->where('create_time', '<', $endCycle)->sum('change_amount');
return $this->success('成功', ['is_draw' => $isDraw,'end_cycle'=>$endCycle, 'user_currrent_total_withdraw_money'=>$currTotalWithdrawMoney], 1, 1);
}
public function withdraw()
{

View File

@ -576,7 +576,7 @@ class VehicleController extends BaseApiController
if($company['company_type'] != 16){
return $this->fail('非镇街公司不能访问');
}
$data = VehicleContract::field('id,contract_no,contract_url,status,create_time,update_time')->where('contract_logistic_id','<>',0)->where('company_b_id',$company['id'])->select();
$data = VehicleContract::field('id,contract_no,contract_url,status,create_time,update_time')->where('contract_logistic_id',0)->where('company_b_id',$company['id'])->select();
return $this->success('请求成功',$data->toArray());
}

View File

@ -0,0 +1,62 @@
<?php
namespace app\api\lists\approve;
use app\api\lists\BaseApiDataLists;
use app\common\lists\ListsSearchInterface;
use app\common\model\Approve;
use app\common\model\user\User;
class ApproveLists extends BaseApiDataLists implements ListsSearchInterface
{
/**
* @notes 设置搜索条件
* @return \string[][]
* @author likeadmin
* @date 2023/08/31 11:08
*/
public function setSearch(): array
{
$param = $this->request->param();
if (isset($param['check_status']) && $param['check_status'] == 0) {
return [
'=' =>['type']
];
} else {
return [
'=' =>['type', 'check_status']
];
}
}
public function queryWhere()
{
$where = [];
// if (isset($param['type']) && $param['type'] == 2) {
$adminId = User::where(['id' => $this->userId])->with('company')->value('admin_id');
$where[] = ['check_admin_ids', '=', $adminId]; // 只有片区经理才能查看
// }
return $where;
}
public function lists(): array
{
return Approve::where($this->searchWhere)
->where($this->queryWhere())
->limit($this->limitOffset, $this->limitLength)
->order(['id' => 'desc'])
->withAttr('extend',function ($value, $data) {
return json_decode($data['extend'], true);
})
->select()
->toArray();
}
public function count(): int
{
return Approve::where($this->searchWhere)->count();
}
}

View File

@ -70,6 +70,15 @@ class LoginLogic extends BaseLogic
if ($params['is_captain']) {
$group_id=2;
}
// 镇农科公司服务部长
if ($params['is_service_manager'] == 1) {
$user = User::where(['company_id' => $params['company_id'], 'group_id' => 14])->find();
if (!empty($user)) {
self::setError('公司已创建服务部长账号');
return false;
}
$group_id=14;
}
User::create([
'sn' => $userSn,
'avatar' => $avatar,

View File

@ -49,6 +49,9 @@ class RechargeLogic extends BaseLogic
if(isset($params['task_id']) &&$params['task_id']>0){
$data['extend']=json_encode(['task_id'=>$params['task_id'],'type'=>1]);
}
if(isset($params['type']) &&$params['type']==300){
$data['change_type']=300;
}
$order = RechargeOrder::create($data);
return [

View File

@ -328,6 +328,11 @@ class UserLogic extends BaseLogic
throw new ValidateException('余额不足');
}
// 发票校验
if (empty($params['invoice'])) {
throw new ValidateException('没有上传电子发票');
}
// 保存提现记录
$withdraw = new Withdraw();
$withdraw->user_id = $user['id'];
@ -335,6 +340,7 @@ class UserLogic extends BaseLogic
$withdraw->order_sn = $withdraw->buildOrderSn();
$withdraw->amount = $params['amount'];
$withdraw->transfer_end_cycel = $params['transfer_end_cycel'];
$withdraw->invoice = $params['invoice'];
$withdraw->create_time = time();
$withdraw->update_time = time();
$withdraw->save();

View File

@ -115,6 +115,10 @@ class CompanyLogic extends BaseLogic
//小组服务公司
AdminLogic::insertRole($admin_id, [6]);
$admin['group_id']=5;
} elseif ($params['company_type']==41) {
//镇农科公司 总负责人
AdminLogic::insertRole($admin_id, [7]); //后台角色
$admin['group_id']=15; // 前台角色
}
$userSn = User::createUserSn();
$admin['admin_id']=$admin_id;

View File

@ -16,6 +16,7 @@ namespace app\common\logic;
use app\common\enum\PayEnum;
use app\common\enum\user\AccountLogEnum;
use app\common\model\Company;
use app\common\model\company\CompanyAccountLog;
use app\common\model\recharge\RechargeOrder;
use app\common\model\task\Task;
@ -72,6 +73,24 @@ class PayNotifyLogic extends BaseLogic
Task::where('id', $order['extend']['task_id'])->update(['status' => 3,'extend'=>json_encode($extend)]);
TaskTemplate::where('id', $find['template_id'])->update(['over_decimal' => $order->order_amount]);
} else {
if($order['change_type']==300){
$company=Company::where('user_id',$order['user_id'])->find();
$left_amount= $company['deposit']+$order->order_amount;
$datas = [
'order_sn' => $order->sn,
'user_id' => $order->user_id,
'company_id' => $company['id']??0,
'change_type' => 300,
'change_object' => 2,
'action' => 1,
'change_amount' => $order->order_amount,
'left_amount' =>$left_amount,
'remark' => '保证金充值',
];
CompanyAccountLog::create($datas);
Company::where('id',$company['id'])->update(['deposit'=>$left_amount]);
}else{
// 增加用户累计充值金额及用户余额
$user = User::findOrEmpty($order->user_id);
$user->total_recharge_amount += $order->order_amount;
@ -87,6 +106,8 @@ class PayNotifyLogic extends BaseLogic
$order->sn,
'用户充值'
);
}
}
// 更新充值订单状态

View File

@ -8,7 +8,9 @@ class RedisLogic extends BaseLogic
{
$redisInstance = new \Redis();
$redisInstance->connect(env('redis.host'));
$redisInstance->auth(env('redis.auth'));
if (env('redis.auth', '') != '') {
$redisInstance->auth(env('redis.auth'));
}
return $redisInstance;
}
}

View File

@ -0,0 +1,65 @@
<?php
namespace app\common\logic\approve;
use app\common\logic\BaseLogic;
use app\common\model\Approve;
use Symfony\Component\HttpClient\HttpClient;
use think\facade\Db;
use think\facade\Log;
class ApproveLogic extends BaseLogic
{
public static function audit($approve, $params)
{
// 拒绝通过
if ($params['check_status'] == 3) {
if (empty($params['remark'])) {
self::setError('请输入拒绝理由');
}
self::refuse($approve, $params);
}
// 修改任务完成状态
if ($params['check_status'] == 2) {
self::pass($approve);
}
// 回调商城,通知审核状态
if (in_array($approve['type'], [2, 3])) {
$shopMerchantInfo = json_decode($approve['extend'], true);
self::shopCallBack($approve, $shopMerchantInfo, $params);
}
}
private static function pass(Approve $approve)
{
$approve->check_status = 2;
$approve->save();
}
private static function refuse(Approve $approve, $params)
{
$approve->check_status = 3;
$approve->remark = $params['remark'];
$approve->save();
}
private static function shopCallBack(Approve $approve, $shopMerchantInfo, $params)
{
$status = $params['check_status'] == 2? 1: 2;
// 通知商城审批状态
$requestResponse = HttpClient::create()->request('POST', env('url.shop_prefix') . '/api/merchant/syncStatus/'.$shopMerchantInfo['mer_intention_id'], [
'body' => ['status' => $status, 'type' => $approve['type'] ==2 ? 1: 2, 'remark'=> $params['remark']??'']
]);
Log::info('通知商城审批状态-参数', ['status' => $status, 'type' => $approve['type']]);
Log::info('通知商城审批状态-响应', [$requestResponse->getContent()]);
}
public static function detail($id)
{
return Approve::where('id', $id)->withAttr('extend', function ($value, $data) {
return json_decode($data['extend'], true);
})->find();
}
}

View File

@ -23,6 +23,7 @@ use think\facade\Db;
use app\api\logic\SmsLogic;
use app\common\logic\CompanyLogic;
use app\common\logic\UserLogic;
use think\facade\Log;
/**
* Contract逻辑
@ -244,7 +245,9 @@ class ContractLogic extends BaseLogic
}
// /**发送合同 */
/**发送合同
* @type 1公司 2个人
*/
public static function Draftingcontracts($params,$type=1)
{
if($type==1){
@ -252,6 +255,7 @@ class ContractLogic extends BaseLogic
}else{
$result = UserLogic::detail($params['id']);
}
$result['contract']= Contract::where('id',$params['contract_id'])->with(['party_a_info', 'contractType'])->find();
if ($result && isset($result['contract']) && isset($result['contract']['file']) && $result['contract']['file'] != '') {
if ($result['contract']['check_status'] == 3) {
return self::setError('你已经生成过合同,请勿重复生成');
@ -294,6 +298,7 @@ class ContractLogic extends BaseLogic
public static function postsms($params)
{
$result = self::detail($params);
Log::info(['发送合同短信', $result]);
if ($result && $result['file'] != '') {
//发送短信
$data = [
@ -349,6 +354,7 @@ class ContractLogic extends BaseLogic
'code' => 'api/Hetong/url?id=' . $find['id'].'&type='.$v['type'],
'scene' => 'WQ'
];
Log::info(['发送合同短信-消息体', $sms]);
$result = SmsLogic::contractUrl($sms);
if ($result != true) {
return self::setError(SmsLogic::getError());

View File

@ -0,0 +1,216 @@
<?php
namespace app\common\logic\finance;
use app\common\enum\user\AccountLogEnum;
use app\common\logic\AccountLogLogic;
use app\common\model\Company;
use app\common\model\company\CompanyAccountLog;
use app\common\model\task\Task;
use app\common\model\task_scheduling_plan\TaskSchedulingPlan;
use app\common\model\task_template\TaskTemplate;
use app\common\model\user\UserAccountLog;
use app\common\model\user\User;
use think\facade\Db;
use think\facade\Log;
class TownShareProfit
{
public function townTaskType1($taskInfo, $townCompany, $taskSchedulePlan)
{
try {
Db::startTrans();
$this->shareProfit($taskInfo, $townCompany, $taskSchedulePlan);
// 更改结算状态
(new TaskSchedulingPlan())->settlement($taskSchedulePlan['id']);
// 更改任务状态
Task::where(['id' => $taskSchedulePlan['task_id']])->update(['status' => 3]);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
Log::error($taskSchedulePlan['template_info']['title'].'-任务结算失败:' . $e->getMessage());
return false;
}
}
public function townTaskType2($taskInfo, $townCompany, $taskSchedulePlan, $step, $contractCount)
{
try {
Db::startTrans();
$this->shareProfit($taskInfo, $townCompany, $taskSchedulePlan);
if ($step == 2 && $contractCount >= 15) {
// 更改结算状态
(new TaskSchedulingPlan())->settlement($taskSchedulePlan['id']);
// 更改任务状态
Task::where(['id' => $taskSchedulePlan['task_id']])->update(['status' => 3]);
}
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
Log::error($taskSchedulePlan['template_info']['title'].'-任务结算失败:' . $e->getMessage());
return false;
}
}
public function townTaskType3($taskInfo, $townCompany, $taskSchedulePlan)
{
try {
Db::startTrans();
$this->shareProfit($taskInfo, $townCompany, $taskSchedulePlan);
// 更改结算状态
(new TaskSchedulingPlan())->settlement($taskSchedulePlan['id']);
// 更改任务状态
Task::where(['id' => $taskSchedulePlan['task_id']])->update(['status' => 3]);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
Log::error($taskSchedulePlan['template_info']['title'].'-任务结算失败:' . $e->getMessage());
return false;
}
}
public function townTaskType4($taskInfo, $townCompany, $taskSchedulePlan)
{
try {
Db::startTrans();
$this->shareProfit($taskInfo, $townCompany, $taskSchedulePlan);
// 更改结算状态
(new TaskSchedulingPlan())->settlement($taskSchedulePlan['id']);
// 更改任务状态
Task::where(['id' => $taskSchedulePlan['task_id']])->update(['status' => 3]);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
Log::error($taskSchedulePlan['template_info']['title'].'-任务结算失败:' . $e->getMessage());
return false;
}
}
public function townTaskType5($taskInfo, $townCompany, $taskSchedulePlan, $leftTransactionPool)
{
try {
Db::startTrans();
$this->shareProfit($taskInfo, $townCompany, $taskSchedulePlan);
// 更改结算状态
(new TaskSchedulingPlan())->settlement($taskSchedulePlan['id']);
// 更改任务状态
Task::where(['id' => $taskSchedulePlan['task_id']])->update(['status' => 3]);
// 更新镇交易池
(new TaskTemplate())->updateTransactionPool($taskSchedulePlan['template_info']['id'], $leftTransactionPool);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
Log::error($taskSchedulePlan['template_info']['title'].'-任务结算失败:' . $e->getMessage());
return false;
}
}
public function townTaskType6($taskInfo, $townCompany, $taskSchedulePlan)
{
try {
Db::startTrans();
$this->shareProfit($taskInfo, $townCompany, $taskSchedulePlan);
// 更改结算状态
(new TaskSchedulingPlan())->settlement($taskSchedulePlan['id']);
// 更改任务状态
Task::where(['id' => $taskSchedulePlan['task_id']])->update(['status' => 3]);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
Log::error($taskSchedulePlan['template_info']['title'].'-任务结算失败:' . $e->getMessage());
return false;
}
}
public function townTaskType7($taskInfo, $townCompany, $taskSchedulePlan)
{
try {
Db::startTrans();
$this->shareProfit($taskInfo, $townCompany, $taskSchedulePlan);
// 更改结算状态
(new TaskSchedulingPlan())->settlement($taskSchedulePlan['id']);
// 更改任务状态
Task::where(['id' => $taskSchedulePlan['task_id']])->update(['status' => 3]);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
Log::error($taskSchedulePlan['template_info']['title'].'-任务结算失败:' . $e->getMessage());
return false;
}
}
/**
* 分润
*/
public function shareProfit($taskInfo, $company, $taskSchedulePlan)
{
$proportion = 0;
//总金额除以2等于不可提现账号金额和收益
$masterMoney = bcdiv($taskInfo['money'], 2, 2);
$remark = '来自任务【' . $taskSchedulePlan['template_info']['title'] . '】,';
//服务部长收益 任务金额的50%为服务部长的收益
$serviceManagerUser = User::where(['company_id' => $company['id'], 'group_id' => 14])->find();
Log::info([$taskSchedulePlan['template_info']['title'].'结算-服务部长用户信息', $serviceManagerUser]);
// 用户收益变动
$arr = [$serviceManagerUser['id'], AccountLogEnum::UM_INC_TASK, AccountLogEnum::INC, $masterMoney, $taskSchedulePlan['sn'], $remark.'任务结算获得收益' . $masterMoney . '元', ['company_id' => $company['id'], 'proportion' => $proportion], 1];
$this->master($arr);
// 用户余额变动
$arr_two = [$serviceManagerUser['id'], AccountLogEnum::UM_INC_TASKUSER, AccountLogEnum::INC, $masterMoney, $taskSchedulePlan['sn'], $remark . '获得账户余额' . $masterMoney . '元', ['company_id' => $company['id'], 'proportion' => $proportion], 1];
$this->Account($arr_two);
// 公司收益
$deposit_count = bcadd($company['deposit'], $masterMoney, 2);
// 公司收益变动记录
$this->AccountLog($company['id'], $deposit_count, $masterMoney, 1, CompanyAccountLog::TASK_INC_DEPOSIT);
$company_money_count = bcadd($company['company_money'], $masterMoney, 2);
//公司余额变动记录
$this->AccountLog($company['id'], $company_money_count, $masterMoney, 1, CompanyAccountLog::TASK_INC_COMPANY_MONEY);
// 变更公司收益和余额
Company::where('id', $company['id'])->update(['deposit' => Db::raw('deposit+' . $masterMoney), 'company_money' => Db::raw('company_money+' . $masterMoney)]);
}
public function AccountLog($companyId, $left_amount, $changeAmount, $change_object = 1, $change_type = 1, $action = 1)
{
$company_log = [
'sn' => generate_sn(UserAccountLog::class, 'sn', 20),
'company_id' => $companyId,
'change_object' => $change_object, //变动对象
'change_type' => $change_type, //变动类型
'action' => $action, //1-增加 2-减少
'left_amount' => $left_amount, //变动后数量
'change_amount' => $changeAmount, //变动数量
'status' => 1,
];
CompanyAccountLog::create($company_log);
}
/**负责人的分润
* @param $data
*/
private function master($data)
{
User::where('id', $data[0])->update(['deposit'=>Db::raw('deposit+' . $data[3]),'user_money'=>Db::raw('user_money+' . $data[3])]);
return AccountLogLogic::add($data[0], $data[1], $data[2], $data[3], $data[4], $data[5], $data[6], $data[7]);
}
/**成员分润
* @param $data
*/
private function member($data)
{
User::where('id', $data[0])->update(['deposit'=>Db::raw('deposit+' . $data[3]),'user_money'=>Db::raw('user_money+' . $data[3])]);
return AccountLogLogic::add($data[0], $data[1], $data[2], $data[3], $data[4], $data[5], $data[6], $data[7]);
}
private function Account($data)
{
return AccountLogLogic::add($data[0], $data[1], $data[2], $data[3], $data[4], $data[5], $data[6], $data[7]);
}
}

View File

@ -2,6 +2,7 @@
namespace app\common\logic\finance;
use app\adminapi\logic\ConfigLogic;
use app\common\enum\user\AccountLogEnum;
use app\common\logic\BaseLogic;
use app\common\model\Company;
@ -115,8 +116,17 @@ class WithdrawLogic extends BaseLogic
// 将用户周期内的账户变动记录变更为已提现状态
UserAccountLog::where(['user_id'=>$user->id, 'status'=>1, 'action'=>1, 'change_type'=>202, 'is_withdraw'=>0])->where('create_time','<', $endCycle)->update(['is_withdraw'=>1]);
}
// 重置公司可提现截止日期 上一次截止日期 + 长期周期天数
$dictData = ConfigLogic::getDictTypeValueByType('withdraw_cycle');
$cycle = $dictData['withdraw_cycle_long']['value']; // 数据字典-提现周期 单位:天数
$withdrawDeadline = $endCycle + $cycle * 24 * 60 * 60;
$companyInfo->save(['withdraw_deadline' => $withdrawDeadline]);
// 更新状态,保存转账凭证
Withdraw::where(['id'=>$withDrawInfo['id']])->update(['status'=>3, 'transfer_voucher'=>$params['transfer_voucher']]);
Db::commit();
return true;
} catch (Exception $exception) {

View File

@ -15,6 +15,10 @@
namespace app\common\logic\task;
use app\common\logic\finance\TownShareProfit;
use app\common\model\CompanyComplaintFeedback;
use app\common\model\contract\Contract;
use app\common\model\dict\DictData;
use app\common\model\task\Task;
use app\common\logic\BaseLogic;
use app\common\model\Company;
@ -22,6 +26,7 @@ use app\common\model\informationg\UserInformationg;
use app\common\model\task_scheduling_plan\TaskSchedulingPlan;
use app\common\model\task_template\TaskTemplate;
use app\common\model\user\User;
use think\Exception;
use think\facade\Db;
use think\facade\Log;
@ -77,6 +82,8 @@ class TaskLogic extends BaseLogic
if ($v['types'] == 3) {
$task = Task::where('template_id', $v['id'])->find();
if ($task) {
// 累计任务进行天数,单次任务结算时,用于判断任务是否超时
TaskTemplate::where('id', $v['id'])->inc('day_count')->update();
// Task::where('template_id', $v['id'])->update(['start_time' => strtotime($task['start_time']) + 86400, 'end_time' => strtotime($task['end_time']) + 86400]);
// TaskTemplate::where('id', $v['id'])->inc('day_count')->update();
return true;
@ -85,6 +92,7 @@ class TaskLogic extends BaseLogic
$v_day_count=$v['day_count'];
$v_day_count=$v_day_count+1;
$time = strtotime(date('Y-m-d'));
Db::startTrans();
$TaskSchedulingPlan_data = [
'create_user_id' => 0,
'company_id' => $v['company_id'],
@ -174,11 +182,26 @@ class TaskLogic extends BaseLogic
];
$data['extend'] = json_encode($extend);
}
// 其他任务
if ($v['type'] == 34) {
// is_commit 是否提交 note 详情描述 annex 附件
$extend = [
'other'=> [
'is_commit' => 0,
'note' => '',
'annex' => [],
'video_annex' => [],
]
];
$data['extend'] = json_encode($extend);
}
$task_id = (new Task())->insertGetId($data);
TaskSchedulingPlan::where('id', $TaskSchedulingPlan['id'])->update(['task_id' => $task_id, 'is_execute' => 1]);
TaskTemplate::where('id', $v['id'])->inc('day_count')->update();
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
Log::error('定时任务添加失败'.$e->getMessage().'。line'.$e->getLine());
return false;
}
@ -188,16 +211,18 @@ class TaskLogic extends BaseLogic
{
$v_day_count=$v['day_count'];
$v_day_count=$v_day_count+1;
$stageDayOneAccumulative = $v['stage_day_one']; // 第一阶段天数
$stageDayTwoAccumulative = bcadd($v['stage_day_one'], $v['stage_day_two']); // 第二阶段天数 第一+第二
if ($v['types'] == 1 || $v['types'] == 3) {
if ($v_day_count <= $v['stage_day_one']) {
if ($v_day_count <= $stageDayOneAccumulative) {
return $v['money'];
} else {
return $v['money_two'];
}
} elseif ($v['types'] == 2) {
if ($v_day_count<= $v['stage_day_one']) {
if ($v_day_count<= $stageDayOneAccumulative) {
return $v['money'];
} elseif ($v_day_count <= $v['stage_day_two']) {
} elseif ($stageDayOneAccumulative < $v_day_count && $v_day_count <= $stageDayTwoAccumulative) {
return $v['money_two'];
} else {
return $v['money_three'];
@ -268,4 +293,587 @@ class TaskLogic extends BaseLogic
}
return $task;
}
/**
* 定时添加任务
*/
public static function TownCronAdd(array $taskTemplate)
{
try {
Log::info(['镇农科公司定时任务下发-任务模板', $taskTemplate]);
// 单次任务不重复下发,在结算时刷新任务时间
if ($taskTemplate['types'] == 3) {
$task = Task::where('template_id', $taskTemplate['id'])->find();
if ($task) {
// 累计任务进行天数,单次任务结算时,用于判断任务是否超时
TaskTemplate::where('id', $taskTemplate['id'])->inc('day_count')->update();
return true;
}
}
$time = strtotime(date('Y-m-d'));
// 任务类型code
$taskType = (new DictData())->getTownTaskType($taskTemplate['type']);
Db::startTrans();
$TaskSchedulingPlan_data = [
'create_user_id' => 0,
'company_id' => $taskTemplate['company_id'],
'template_id' => $taskTemplate['id'],
'scheduling_id' => $taskTemplate['task_scheduling'],
'start_time' => $time,
'end_time' => $time + 86399,
'sn' => User::createUserSn(),
'status' => 1
];
$TaskSchedulingPlan = TaskSchedulingPlan::create($TaskSchedulingPlan_data);
Log::info(['镇农科公司定时任务下发-添加plan结果', $TaskSchedulingPlan]);
$serviceManagerUser = User::where(['company_id'=>$taskTemplate['company_id'], 'group_id'=> 14])->find();
Log::info(['镇农科公司定时任务下发-服务部长user信息', $serviceManagerUser]);
$arr = [
'template_id' => $taskTemplate['id'],
'scheduling_plan_id' => $TaskSchedulingPlan['id'],
'company_id' => $taskTemplate['company_id'],
'title' => $taskTemplate['title'],
'money' => $taskTemplate['money'],
'type' => $taskTemplate['type'],
'content' => $taskTemplate['content'],
'start_time' => $time,
'end_time' => $time + 86399,
'director_uid' => $serviceManagerUser['id'], // 默认都指派给服务部长
'create_time' => time(),
'update_time' => time(),
];
$data = $arr;
$data['money'] = self::countTownTaskMoney($taskTemplate);
$extend = [];
// 督促小组服务团队学习任务 扩展信息
if ($taskType == 'town_task_type_4') {
$extend = ['town_task_type_4' => ['study_photo'=>[], 'sign_in_table'=>'', 'study_content'=> '']];
}
$data['extend'] = json_encode($extend);
$task_id = (new Task())->insertGetId($data);
Log::info(['镇农科公司定时任务下发-添加task结果', $task_id]);
TaskSchedulingPlan::where('id', $TaskSchedulingPlan['id'])->update(['task_id' => $task_id, 'is_execute' => 1]);
// 任务累计进行天数 +1
TaskTemplate::where('id', $taskTemplate['id'])->inc('day_count')->update();
Db::commit();
} catch (\Exception $e) {
Db::rollback();
Log::error('定时任务添加失败'.$e->getMessage().'。line'.$e->getLine());
}
}
private static function countTownTaskMoney($tempalte)
{
$v_day_count = $tempalte['day_count'];
$v_day_count = $v_day_count + 1;
$stageDayOneAccumulative = $tempalte['stage_day_one']; // 第一阶段天数
$stageDayTwoAccumulative = bcadd($tempalte['stage_day_one'], $tempalte['stage_day_two']); // 第二阶段天数 第一+第二
$stageDayThreeAccumulative = bcadd($stageDayTwoAccumulative, $tempalte['stage_day_three']); // 第二阶段天数 第二阶段累计值+第三
// 单次和循环任务
if ($tempalte['types'] == 1 || $tempalte['types'] == 3) {
if ($v_day_count <= $stageDayOneAccumulative) {
// 第一阶段金额
return $tempalte['money'];
} else if ($stageDayOneAccumulative < $v_day_count && $v_day_count<= $stageDayTwoAccumulative) {
// 第二阶段金额
return $tempalte['money_two'];
} else if ( $stageDayTwoAccumulative < $v_day_count && $v_day_count <= $stageDayThreeAccumulative) {
// 第三阶段金额
return $tempalte['new_money_three'];
}
} elseif ($tempalte['types'] == 2) { // 长期任务
if ($v_day_count<= $stageDayOneAccumulative) {
// 第一阶段金额
return $tempalte['money'];
} elseif ( $stageDayOneAccumulative < $v_day_count && $v_day_count <= $stageDayTwoAccumulative) {
// 第二阶段金额
return $tempalte['money_two'];
} else if ( $stageDayTwoAccumulative < $v_day_count && $v_day_count <=$stageDayThreeAccumulative) {
// 第三阶段金额
return $tempalte['new_money_three'];
} else {
// 长期金额
return $tempalte['money_three'];
}
}
}
/**
* 先判定任务是否已完成 再按每个任务对应的结算方式结算
* $taskSchedulePlan 包含 task_tempalte、task_schedule、task_schedule_plan 三张表的信息
*/
public static function townTaskSettlement($taskSchedulePlan)
{
try {
Log::info(['镇农科公司定时任务结算执行-任务计划', $taskSchedulePlan]);
$taskTemplateInfo = $taskSchedulePlan['template_info'];
// 任务类型用的数据字典主键id将id和value作映射避免测试和正式环境数据字典数据不一致时出问题
$townTaskTypeList = DictData::where(['type_value' => 'town_task_type', 'status' => 1])->column('value', 'id');
switch ($townTaskTypeList[$taskTemplateInfo['type']]){
case 'town_task_type_1':
// 协助总负责人开展工作任务
self::dealTownTask1($taskSchedulePlan);
break;
case 'town_task_type_2':
// 拓展小组服务团队工作任务
self::dealTownTask2($taskSchedulePlan);
break;
case 'town_task_type_3':
// 督促小组服务团队完成任务,协助开展工作,解决问题任务
self::dealTownTask3($taskSchedulePlan);
break;
case 'town_task_type_4':
// 督促小组服务团队学习任务
self::dealTownTask4($taskSchedulePlan);
break;
case 'town_task_type_5':
// 督促小组服务团队完成需求收集和交易任务
self::dealTownTask5($taskSchedulePlan);
break;
case 'town_task_type_6':
// 督促小组服务团队入股村联络员所成立的公司任务
self::dealTownTask6($taskSchedulePlan);
break;
case 'town_task_type_7':
// 安全工作任务
self::dealTownTask7($taskSchedulePlan);
break;
default :
return true;
}
} catch (Exception $e) {
Log::error(['镇农科任务结算失败',$e]);
}
}
/**
* 系统自动判定镇农科公司下属小组服务公司 是否100%完成每日任务:三轮车任务,档案更新任务,平台交易任务
*/
private static function dealTownTask1($taskSchedulePlan)
{
Log::info(['镇农科公司定时任务结算执行-'.$taskSchedulePlan['template_info']['title']]);
$taskTemplateInfo = $taskSchedulePlan['template_info'];
$taskInfo = Task::where(['id' => $taskSchedulePlan['task_id']])->find();
$townCompany = Company::where(['id' => $taskTemplateInfo['company_id']])->find();
$groupServiceCompanyList = Company::where(['street' => $townCompany['street'], 'company_type' => 18])->select()->toArray();
$isDone = 1; // 任务是否完成标记
$isTaskSchedule = 0; // 下属小组服务公司是否有每日任务安排标记
foreach ($groupServiceCompanyList as $groupServiceCompany) {
// 查询小组服务公司是否有对应的每日任务安排
$templateList = TaskTemplate::where(['company_id' => $groupServiceCompany['id']])->whereIn('type', [31, 32, 33])->select()->toArray();
// 未做任务安排的小组服务公司不在判定范围内,跳出本次循环
if(count($templateList) === 3) {
$isTaskSchedule = 1;
// 查询小组服务公司的循环任务有没有全部做完 任意有一个任务没有做完,则判定为该小组服务公司没有完成每日任务,即协助总负责人开展工作任务也认定失败
foreach ($templateList as $template) {
$task = Task::where(['template_id' => $template['id'], 'status' => 3])->find();
if (empty($task)) {
$isDone = 0;
break;
}
}
} else {
continue;
}
}
// 下属小组服务公司有任务安排,也完成了任务
if ($isDone === 1 && $isTaskSchedule === 1) {
// 做任务结算,分润
(new TownShareProfit())->townTaskType1($taskInfo, $townCompany, $taskSchedulePlan);
} else {
// 关闭任务
(new Task())->closeTask($taskSchedulePlan['task_id']);
Log::info('协助总负责人开展工作任务,结算失败:' . $taskTemplateInfo['title'] . '未完成。任务:' . json_encode($taskInfo));
}
}
/**
* 拓展小组服务团队工作任务 单次任务
* 当前任务进行天数 < 第一阶段天数 只刷新任务时间
* 当前任务进行天数 = 第一阶段天数 做第一阶段结算 如果第一阶段已完成全部任务,也要刷新任务时间,等到第二阶段结算时才结束任务
* 当前任务进行天数 > 第一阶段天数 但未到第二阶段结算时间 继续刷新任务时间
* 当前任务进行天数 = (第一阶段+第二阶段)天数 未完成则关闭任务 完成则结算第二阶段金额
*/
private static function dealTownTask2($taskSchedulePlan)
{
Log::info(['镇农科公司定时任务结算执行-'.$taskSchedulePlan['template_info']['title']]);
$taskTemplateInfo = $taskSchedulePlan['template_info'];
$townCompany = Company::where(['id' => $taskTemplateInfo['company_id']])->find();
$day = $taskTemplateInfo['stage_day_one'] + $taskTemplateInfo['stage_day_two'];
$task = Task::where('id', $taskSchedulePlan['task_id'])->with('director_info')->find();
// 当前任务进行天数 < 第一阶段天数 只刷新任务时间
if($taskTemplateInfo['day_count'] < $taskTemplateInfo['stage_day_one']) {
self::flushTaskTime($taskSchedulePlan);
return true;
}
// 当前任务进行天数 = 第一阶段天数 做第一阶段结算 如果第一阶段已完成全部任务,也要刷新任务时间,等到第二阶段结算时才结束任务
if($taskTemplateInfo['day_count'] == $taskTemplateInfo['stage_day_one']) {
// 已签约的小组服务合同个数
$contractCount = Contract::where(['party_a' => $townCompany['id'], 'status' => 1, 'contract_type' => 25])->count();
if ($contractCount < 9) {
self::flushTaskTime($taskSchedulePlan);
return false;
}
$totalMoney = bcmul($taskTemplateInfo['stage_day_one'], $taskTemplateInfo['money'], 2);
$taskMoney = 0;
switch ($contractCount) {
case 9:
$taskMoney = bcmul($totalMoney, 0.4, 2);
break;
case 10:
$taskMoney = bcmul($totalMoney, 0.4, 2);
break;
case 11:
$taskMoney = bcmul($totalMoney, 0.5, 2);
break;
case 12:
$taskMoney = bcmul($totalMoney, 0.6, 2);
break;
case 13:
$taskMoney = bcmul($totalMoney, 0.6, 2);
break;
case 14:
$taskMoney = bcmul($totalMoney, 0.7, 2);
break;
case 15:
$taskMoney = bcmul($totalMoney, 1, 2);
break;
}
if ($contractCount > 15) {
$taskMoney = bcmul($totalMoney, 1, 2);
}
$task['money'] = $taskMoney; // 任务金额
(new TownShareProfit())->townTaskType2($task, $townCompany, $taskSchedulePlan, 1, $contractCount);
}
// 当前任务进行天数 > 第一阶段天数 但未到第二阶段结算 继续刷新任务时间
if($taskTemplateInfo['day_count'] > $taskTemplateInfo['stage_day_one'] && $taskTemplateInfo['day_count'] < $day){
self::flushTaskTime($taskSchedulePlan);
}
// 当前任务进行天数 = 第一+第二阶段天数 第二阶段结算
if ($taskTemplateInfo['day_count'] == $day) {
// 已签约的小组服务合同个数
$contractCount = Contract::where(['party_a' => $townCompany['id'], 'status' => 1, 'contract_type' => 25])->count();
// 第二阶段未完成
if ($contractCount < 15) {
// 关闭任务,并且没有奖励
(new Task())->closeTask($taskSchedulePlan['task_id']);
Log::info('结算失败:' . $taskTemplateInfo['title'] . '第二阶段未完成。任务:' . json_encode($task));
return false;
}
$taskMoney = bcmul($taskTemplateInfo['stage_day_two'], $taskTemplateInfo['money_two'], 2);
$task['money'] = $taskMoney; // 任务金额
(new TownShareProfit())->townTaskType2($task, $townCompany, $taskSchedulePlan, 2, $contractCount);
}
}
private static function flushTaskTime($taskSchedulePlan)
{
$time = strtotime(date('Y-m-d')); // 今天的 0000:00
TaskSchedulingPlan::where(['id' => $taskSchedulePlan['id']])->update(
[
'create_time' => $time+86400, //第二天的00:00:00
'update_time' =>time(),
'start_time'=>$time+86400, //第二天的00:00:00
'end_time'=>$time+86400+86399 //第二天的 23:59:59
]);
Task::where('id', $taskSchedulePlan['task_id'])->update(
[
'create_time' => $time+86400,
'update_time' => time(),
'start_time'=> $time+86400,
'end_time'=> $time+86400+86399
]);
}
private static function dealTownTask3($taskSchedulePlan)
{
Log::info(['镇农科公司定时任务结算执行-'.$taskSchedulePlan['template_info']['title']]);
$taskTemplateInfo = $taskSchedulePlan['template_info'];
$townCompany = Company::where(['id' => $taskTemplateInfo['company_id']])->find();
$groupServiceCompanyList = Company::where(['street' => $townCompany['street'], 'company_type' => 18])->select()->toArray();
$task = Task::where('id', $taskSchedulePlan['task_id'])->with('director_info')->find();
// 完成任务情况
list($groupServiceCompanyCount, $doneTaskGroupServiceCompanyCount) = self::taskType3DoneInfo($groupServiceCompanyList);
$doneRate = bcdiv($doneTaskGroupServiceCompanyCount, $groupServiceCompanyCount,2);
// <80% 未完成任务 关闭本次任务
if (bccomp($doneRate, 0.8, 2) == -1) {
(new Task())->closeTask($taskSchedulePlan['task_id']);
return true;
} else {
// 结算 分润
(new TownShareProfit())->townTaskType3($task, $townCompany, $taskSchedulePlan);
}
}
public static function taskType3DoneInfo($groupServiceCompanyList)
{
$groupServiceCompanyCount = count($groupServiceCompanyList); // 团队总数
$doneTaskGroupServiceCompanyCount = 0; // 完成任务团队总数
// 判定完成条件 组建成功的小组服务团队 每日完成档案更新任务和三轮车任务 的团队数量 >= 80% 小于80%则视为未完成
foreach ($groupServiceCompanyList as $groupServiceCompany) {
// 档案更新任务
$taskType31 = Task::where(['company_id' => $groupServiceCompany['id'], 'type' => 31, 'status' => 3])->whereDay('start_time', 'today')->find();
// 三轮车任务
$taskType32 = Task::where(['company_id' => $groupServiceCompany['id'], 'type' => 32, 'status' => 3])->whereDay('start_time', 'today')->find();
if (!empty($taskType31) && !empty($taskType32)) {
$doneTaskGroupServiceCompanyCount++;
}
}
return [$groupServiceCompanyCount, $doneTaskGroupServiceCompanyCount];
}
/**
* 督促小组服务团队学习任务 长期任务 前置操作每天要从APP端提交资料上来根据提交资料来判定当天任务有没有完成
* 任务完成条件学习照片5张签到表一份培训内容大纲 >= 50个字),每月提交>=4
* 1 当前任务进行天数 < 第一阶段天数 只判断当天是否完成 状态未完成则关闭任务
* 2 当前任务进行天数 = 第一阶段天数 做第一阶段结算 且更改 task_schedule_plan 状态为已结算,后续将会根据这个时间来统计、判断各阶段的周期内是否达成完成条件(*
* 3 第一阶段天数 < 当前任务进行天数 < (第一 + 第二) 只判断当天是否完成 状态未完成则关闭任务
* 4 当前任务进行天数 = (第一阶段+第二阶段)天数 第二阶段结算 且更改 task_schedule_plan 状态为已结算
* 5 第一阶段+第二阶段 < 当前任务进行天数 < (第一 + 第二 + 第三阶段天数) 只判断当天是否完成 状态未完成则关闭任务
* 6 当前任务进行天数 = (第一 + 第二 + 第三阶段天数) 第三阶段结算 且更改 task_schedule_plan 状态为已结算
* 7 当前任务进行天数 > (第一 + 第二 + 第三阶段天数) 当前任务进行天数/30 != 0 只判断当天是否完成 状态未完成则关闭任务
* 8 当前任务进行天数/30 = 0, 长期阶段结算 且更改 task_schedule_plan 状态为已结算
*/
private static function dealTownTask4($taskSchedulePlan)
{
Log::info(['镇农科公司定时任务结算执行-'.$taskSchedulePlan['template_info']['title']]);
$taskTemplateInfo = $taskSchedulePlan['template_info'];
$townCompany = Company::where(['id' => $taskTemplateInfo['company_id']])->find();
$taskDayCount = $taskTemplateInfo['day_count']; // 任务累计进行天数
$task = Task::where('id', $taskSchedulePlan['task_id'])->find();
$stageDayOneAccumulative = $taskTemplateInfo['stage_day_one']; // 第一阶段累计天数
$stageDayTwoAccumulative = intval(bcadd($taskTemplateInfo['stage_day_one'], $taskTemplateInfo['stage_day_two'])); // 第二阶段累计天数 第一+第二
$stageDayThreeAccumulative = intval(bcadd($stageDayTwoAccumulative, $taskTemplateInfo['stage_day_three'])); // 第三阶段累计天数 第二阶段累计值+第三阶段天数
// 1 当前任务进行天数 < 第一阶段天数 只判断当天是否完成 状态未完成则关闭任务
if ($taskDayCount < $stageDayOneAccumulative) {
if ($task['status'] != 3) {
(new Task())->closeTask($task['id']);
}
return false;
}
// 2 当前任务进行天数 = 第一阶段天数 做第一阶段结算 且更改 task_schedule_plan 状态为已结算,后续将会根据这个时间来筛选、统计、判断各阶段周期内是否达成完成条件
if($taskDayCount == $stageDayOneAccumulative){
$doneTaskCount = Task::where(['template_id'=>$taskTemplateInfo['id'], 'status'=>3])->count();
if ($doneTaskCount >= 4) {
$task['money'] = bcmul($taskTemplateInfo['stage_day_one'], $taskTemplateInfo['money'], 2);
(new TownShareProfit())->townTaskType4($task, $townCompany, $taskSchedulePlan);
}
return false;
}
// 3 第一阶段天数 < 当前任务进行天数 < (第一 + 第二) 只判断当天是否完成 状态未完成则关闭任务
if ($stageDayOneAccumulative < $taskDayCount && $taskDayCount < $stageDayTwoAccumulative) {
if ($task['status'] != 3) {
(new Task())->closeTask($task['id']);
}
return false;
}
// 4 当前任务进行天数 = (第一阶段+第二阶段)天数 第二阶段结算 且更改 task_schedule_plan 状态为已结算
if ($taskDayCount == $stageDayTwoAccumulative) {
// 上一次做了结算的任务计划
$lastTaskSchedulePlan = TaskSchedulingPlan::where(['template_id'=>$taskTemplateInfo['id'], 'is_pay'=>1])->order('start_time', 'desc')->find();
// 上一次结算后到现在,完成的任务次数
$doneTaskCount = Task::where(['template_id'=>$taskTemplateInfo['id'], 'status'=>3])->whereBetween('start_time', [$lastTaskSchedulePlan['start_time'], time()])->count();
if ($doneTaskCount >= 8) {
$task['money'] = bcmul($taskTemplateInfo['stage_day_two'], $taskTemplateInfo['money_two'], 2);
(new TownShareProfit())->townTaskType4($task, $townCompany, $taskSchedulePlan);
}
return false;
}
// 5 第一阶段+第二阶段 < 当前任务进行天数 < (第一 + 第二 + 第三阶段天数) 只判断当天是否完成 状态未完成则关闭任务
if ($stageDayTwoAccumulative < $taskDayCount && $taskDayCount < $stageDayThreeAccumulative) {
if ($task['status'] != 3) {
(new Task())->closeTask($task['id']);
}
return false;
}
// 6 当前任务进行天数 = (第一 + 第二 + 第三阶段天数) 第三阶段结算 且更改 task_schedule_plan 状态为已结算
if ($taskDayCount == $stageDayThreeAccumulative) {
// 上一次做了结算的任务计划
$lastTaskSchedulePlan = TaskSchedulingPlan::where(['template_id'=>$taskTemplateInfo['id'], 'is_pay'=>1])->order('start_time', 'desc')->find();
// 上一次结算后到现在,完成的任务次数
$doneTaskCount = Task::where(['template_id'=>$taskTemplateInfo['id'], 'status'=>3])->whereBetween('start_time', [$lastTaskSchedulePlan['start_time'], time()])->count();
if ($doneTaskCount >= 8) {
$task['money'] = bcmul($taskTemplateInfo['stage_day_three'], $taskTemplateInfo['new_money_three'], 2);
(new TownShareProfit())->townTaskType4($task, $townCompany, $taskSchedulePlan);
}
return false;
}
// 7 当前任务进行天数 > (第一 + 第二 + 第三阶段天数) 但 当前任务进行天数/30 != 0 只判断当天是否完成 状态未完成则关闭任务
if($taskDayCount > $stageDayThreeAccumulative && $taskDayCount%30 != 0) {
if ($task['status'] != 3) {
(new Task())->closeTask($task['id']);
}
return false;
}
// 8 当前任务进行天数/30 = 0, 长期阶段结算 且更改 task_schedule_plan 状态为已结算
if ($taskDayCount > $stageDayThreeAccumulative && $taskDayCount%30 == 0) {
// 上一次做了结算的任务计划
$lastTaskSchedulePlan = TaskSchedulingPlan::where(['template_id'=>$taskTemplateInfo['id'], 'is_pay'=>1])->order('start_time', 'desc')->find();
// 上一次结算后到现在,完成的任务次数
$doneTaskCount = Task::where(['template_id'=>$taskTemplateInfo['id'], 'status'=>3])->whereBetween('start_time', [$lastTaskSchedulePlan['start_time'], time()])->count();
if ($doneTaskCount >= 4) {
$task['money'] = bcmul(30, $taskTemplateInfo['money_three'], 2);
(new TownShareProfit())->townTaskType4($task, $townCompany, $taskSchedulePlan);
}
return false;
}
}
/**
* 查镇所属小组服务公司当日实际完成金额总和+镇农科公司的资金池
* 查镇所属小组服务公司当日任务目标金额总和
*/
private static function dealTownTask5($taskSchedulePlan)
{
Log::info(['镇农科公司定时任务结算执行-'.$taskSchedulePlan['template_info']['title']]);
$taskTemplateInfo = $taskSchedulePlan['template_info'];
$townCompany = Company::where(['id' => $taskTemplateInfo['company_id']])->find();
$townTask = Task::where('id', $taskSchedulePlan['task_id'])->find();
$groupServiceCompanyList = Company::where(['street' => $townCompany['street'], 'company_type'=> 18])->select()->toArray();
$townTransactionPool = $taskTemplateInfo['transaction_pool']; // 镇交易池
$townTotalTradeAmount = 0; // 镇下属小组服务公司 每日实际总交易额
$targetAmount = 0; // 镇下属小组服务公司每日 目标总交易额
// 查镇所属小组服务公司当日任务目标金额总和
foreach ($groupServiceCompanyList as $groupServiceCompany) {
$tempTask = Task::where(['company_id'=> $groupServiceCompany['id'], 'status'=>3, 'type'=>33])
->whereDay('start_time','today')
->find();
if ($tempTask) {
$plan = TaskSchedulingPlan::where(['id'=>$tempTask['scheduling_plan_id']])->find();
if ($plan['is_pay'] == 1) {
$extend = json_decode($tempTask['extend'], true);
$targetAmount += $extend['transaction']['arr']['day_money'];
$townTotalTradeAmount += $extend['transaction']['arr']['total_price'];
}
}
}
// 完成条件: 查镇所属小组服务公司当日实际完成金额总和+镇农科公司的资金池 > 查镇所属小组服务公司当日任务目标金额总和
if($targetAmount != 0 && bcadd($townTransactionPool, $townTotalTradeAmount, 2) >= $targetAmount) {
// 将余下金额放入镇交易池
$leftTransactionPool = bcsub(bcadd($townTransactionPool, $townTotalTradeAmount, 2), $targetAmount, 2);
(new TownShareProfit())->townTaskType5($townTask, $townCompany, $taskSchedulePlan, $leftTransactionPool);
} else {
// 关闭任务
(new Task())->closeTask($taskSchedulePlan['task_id']);
}
}
/**
* 督促小组服务团队入股村联络员所成立的公司任务 单次任务
* 当前任务进行天数 < 第一+第二阶段天数 只刷新任务时间
* 当前任务进行天数 = 第一+第二阶段天数 判定任务是否完成 结算 分润
*/
private static function dealTownTask6($taskSchedulePlan)
{
Log::info(['镇农科公司定时任务结算执行-'.$taskSchedulePlan['template_info']['title']]);
$taskTemplateInfo = $taskSchedulePlan['template_info'];
$taskDayCount = $taskTemplateInfo['day_count']; // 任务累计进行天数
$task = Task::where('id', $taskSchedulePlan['task_id'])->find();
$stageDayOneAccumulative = $taskTemplateInfo['stage_day_one']; // 第一阶段累计天数
$stageDayTwoAccumulative = intval(bcadd($taskTemplateInfo['stage_day_one'], $taskTemplateInfo['stage_day_two'])); // 第二阶段累计天数 第一+第二
$townCompany = Company::where('id', $taskTemplateInfo['company_id'])->find(); // 镇农科公司
$villageCompanyList = Company::where(['street' => $townCompany['street'], 'company_type'=> 17])->select()->toArray(); // 村管理公司
// 当前任务进行天数 < 第一+第二阶段天数 只刷新任务时间
if ($taskDayCount < $stageDayOneAccumulative) {
self::flushTaskTime($taskSchedulePlan);
return true;
}
// 当前任务进行天数 = 第一+第二阶段天数 判定任务是否完成 结算 分润
if($taskDayCount == $stageDayTwoAccumulative) {
// 小组服务公司总数
$groupServiceCompanyCount = Company::where(['street' => $townCompany['street'], 'company_type'=> 18])->count();
// 小组服务完成股金上交数
$sharecapitalPaidCount= Db::name('company_sharecapital_change_log')->where(['parent_company_id'=>$villageCompanyList['id']])->count();
$rate = bcdiv($sharecapitalPaidCount, $groupServiceCompanyCount, 2);
// 小于50% 未完成 关闭任务
if (bccomp($rate, 0.5, 2) == -1) {
(new Task())->closeTask($taskSchedulePlan['task_id']);
} else {
// 已完成 计算结算金额
$totalMoney = bcadd(bcmul($taskTemplateInfo['stage_day_one'], $taskTemplateInfo['money'], 2) , bcmul($taskTemplateInfo['stage_day_two'], $taskTemplateInfo['money_two'], 2), 2);
// =50% - %59.9 x40%
if (bccomp($rate, 0.5, 2) == 0 || (bccomp($rate, 0.5, 2) == 1 && bccomp($rate, 0.599, 2) == -1)) {
$task['money'] = bcmul($totalMoney, 0.4, 2);
}
// =60% - %69.9 x50%
if (bccomp($rate, 0.6, 2) == 0 || (bccomp($rate, 0.6, 2) == 1 && bccomp($rate, 0.699, 2) == -1)) {
$task['money'] = bcmul($totalMoney, 0.5, 2);
}
// =70% - %79.9 x60%
if (bccomp($rate, 0.7, 2) == 0 || (bccomp($rate, 0.7, 2) == 1 && bccomp($rate, 0.799, 2) == -1)) {
$task['money'] = bcmul($totalMoney, 0.6, 2);
}
// =80% - %89.9 x70%
if (bccomp($rate, 0.8, 2) == 0 || (bccomp($rate, 0.8, 2) == 1 && bccomp($rate, 0.899, 2) == -1)) {
$task['money'] = bcmul($totalMoney, 0.7, 2);
}
// >=90% x100%
if (bccomp($rate, 0.9, 2) == 0 || bccomp($rate, 0.9, 2) == 1) {
$task['money'] = $totalMoney;
}
// 分润
(new TownShareProfit())->townTaskType6($task, $townCompany, $taskSchedulePlan);
}
}
}
// 安全任务结算
private static function dealTownTask7($taskSchedulePlan)
{
Log::info(['镇农科公司定时任务结算执行-'.$taskSchedulePlan['template_info']['title']]);
$taskTemplateInfo = $taskSchedulePlan['template_info'];
$townCompany = Company::where('id', $taskTemplateInfo['company_id'])->find(); // 镇农科公司
$task = Task::where('id', $taskSchedulePlan['task_id'])->find();
// 片区下公司有任一投诉都判定为未完成
$isDone = 1;
$companyList = Company::where('street', $townCompany['street'])->select()->toArray();
foreach ($companyList as $company) {
$complain = CompanyComplaintFeedback::where(['company_id'=>$company['id']])->whereDay('create_time', 'today')->find();
if (!empty($complain)) {
$isDone = 0;
break;
}
}
// 完成任务 结算 分润
if ($isDone === 1) {
(new TownShareProfit())->townTaskType7($task, $townCompany, $taskSchedulePlan);
} else {
// 关闭任务
(new Task())->closeTask($task['id']);
}
}
}

View File

@ -15,11 +15,14 @@
namespace app\common\logic\task_template;
use app\adminapi\logic\ConfigLogic;
use app\common\model\Company;
use app\common\model\task_template\TaskTemplate;
use app\common\logic\BaseLogic;
use app\common\model\company\CompanyProperty;
use app\common\model\informationg\UserInformationg;
use app\common\model\task_scheduling\TaskScheduling;
use app\common\model\user\User;
use think\facade\Db;
@ -41,8 +44,9 @@ class TaskTemplateLogic extends BaseLogic
*/
public static function add(array $params): bool
{
Db::startTrans();
try {
Db::startTrans();
$find=TaskTemplate::where('task_scheduling', $params['task_scheduling'])->where('company_id',$params['company_id'])->where('type',$params['type'])->field('id,types,type')->find();
if($find&&$params['type']==$find['type']){
self::setError('已经有同一种任务类型了');
@ -78,12 +82,14 @@ class TaskTemplateLogic extends BaseLogic
return false;
}
}
if($params['types']!=33){
// 除了长期任务,其他阶段类型没有长期金额
if($params['types']!=2){
$params['money_three']=0;
}
if($params['type']==35){
$params['extend']=['shareholder'=>['user_id'=>$params['task_admin']]];
}
TaskTemplate::create([
'title' => $params['title'],
'admin_id' => $params['admin_id'],
@ -103,7 +109,6 @@ class TaskTemplateLogic extends BaseLogic
'proportion_two' => $params['proportion_two']??0,
'recharge' => $params['recharge']??0,
]);
Db::commit();
return true;
} catch (\Exception $e) {
@ -159,7 +164,8 @@ class TaskTemplateLogic extends BaseLogic
return false;
}
}
if($params['types']!=33){
// 除了长期任务,其他阶段类型没有长期金额
if($params['types']!=2){
$params['money_three']=0;
}
if($params['type']==35){
@ -217,4 +223,93 @@ class TaskTemplateLogic extends BaseLogic
{
return TaskTemplate::findOrEmpty($params['id'])->toArray();
}
public static function initCompanyWithdrawDeadline($companyId)
{
// 如果是公司第一次创建安排任务,初始化公司的可提现周期截止时间
$templateCount = TaskTemplate::where(['company_id' => $companyId])->count();
if ($templateCount == 1) {
$dictData = ConfigLogic::getDictTypeValueByType('withdraw_cycle');
$cycle = $dictData['withdraw_cycle_1']['value']; // 数据字典-提现周期 单位:天数
$today = strtotime(date('Y-m-d'));
$withdrawDeadline = $today + $cycle * 24 * 60 * 60 + 86400;
$company = Company::find($companyId);
$company->withdraw_deadline = $withdrawDeadline;
$company->save();
}
}
/**
* @notes 添加任务模板
* @param array $params
* @return bool
* @author likeadmin
* @date 2023/08/06 17:30
*/
public static function addTownTaskTemplate(array $params): bool
{
try {
Db::startTrans();
$serviceManagerUser = (new User())->searchServiceManager($params['company_id']);
if (empty($serviceManagerUser)) {
self::setError('公司还没有服务部长,无法指派任务');
return false;
}
$find = TaskTemplate::where('task_scheduling', $params['task_scheduling'])->where('company_id',$params['company_id'])->where('type',$params['type'])->field('id,types,type')->find();
if($find && $params['type'] == $find['type']){
self::setError('已经有同一种任务类型了');
return false;
}
$moeny = TaskTemplate::where('company_id', $params['company_id'])->sum('money');
if($moeny + $params['money'] > 200){
self::setError('任务模板一阶段合计金额不能大于任务调度金额');
return false;
}
$moneyTwo = TaskTemplate::where('company_id', $params['company_id'])->sum('money_two');
if($moneyTwo + $params['money_two'] > 200){
self::setError('任务模板二阶段合计金额不能大于任务调度金额');
return false;
}
$newMoneyThree = TaskTemplate::where('company_id', $params['company_id'])->sum('new_money_three');
if($newMoneyThree + $params['new_money_three'] > 200){
self::setError('任务模板三阶段合计金额不能大于任务调度金额');
return false;
}
$moneyThree = TaskTemplate::where('company_id', $params['company_id'])->sum('money_three');
if($moneyThree + $params['money_three']>200){
self::setError('任务模板长期合计金额不能大于任务调度金额');
return false;
}
TaskTemplate::create([
'title' => $params['title'],
'admin_id' => $params['admin_id'],
'company_id' => $params['company_id'],
'task_scheduling' => $params['task_scheduling']??0,
'money' => $params['money'],
'money_two' => $params['money_two'],
'money_three' => $params['money_three'],
'type' => $params['type'],
'types' => $params['types'],
'status' => $params['status'],
'content' => $params['content'],
'extend'=>json_encode($params['extend']),
'stage_day_one' => $params['stage_day_one']??0,
'proportion_one' => $params['proportion_one']??0,
'stage_day_two' => $params['stage_day_two']??0,
'proportion_two' => $params['proportion_two']??0,
'recharge' => $params['recharge']??0,
'stage_day_three' => $params['stage_day_three']??0,
'new_money_three' => $params['new_money_three']??0,
]);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
self::setError($e->getMessage());
return false;
}
}
}

View File

@ -0,0 +1,20 @@
<?php
namespace app\common\model;
use app\common\model\dict\DictData;
use app\common\model\task\Task;
use think\model\concern\SoftDelete;
class Approve extends BaseModel
{
use SoftDelete;
protected $name = 'approve';
protected $deleteTime = 'delete_time';
public function task()
{
return $this->hasOne(Task::class, 'id', 'task_id');
}
}

View File

@ -0,0 +1,34 @@
<?php
// +----------------------------------------------------------------------
// | likeadmin快速开发前后端分离管理后台PHP版
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
// | 开源版本可自由商用可去除界面版权logo
// | gitee下载https://gitee.com/likeshop_gitee/likeadmin
// | github下载https://github.com/likeshop-github/likeadmin
// | 访问官网https://www.likeadmin.cn
// | likeadmin团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeadminTeam
// +----------------------------------------------------------------------
namespace app\common\model;
use app\common\model\BaseModel;
/**
* CompanyComplaintFeedback模型
* Class CompanyComplaintFeedback
* @package app\common\model
*/
class CompanyComplaintFeedback extends BaseModel
{
protected $name = 'company_complaint_feedback';
}

View File

@ -16,7 +16,7 @@ namespace app\common\model;
use app\common\model\BaseModel;
use app\common\model\dict\DictData;
/**
@ -28,7 +28,51 @@ class ShopContract extends BaseModel
{
protected $name = 'shop_contract';
/**
* @notes 关联company_name
* @return \think\model\relation\HasOne
* @author likeadmin
* @date 2023/07/18 14:28
*/
public function companyName()
{
return $this->hasOne(ShopMerchant::class, 'id', 'company_id')->bind(['company_name']);
}
public function company()
{
return $this->hasOne(ShopMerchant::class, 'id', 'company_id');
}
public function partyAInfo()
{
return $this->hasOne(ShopMerchant::class, 'id', 'party_a')->field('id,company_name,organization_code,master_name,master_phone,master_email,area_manager');
}
public function partyBInfo()
{
// halt($this->type);
// if($this->type==1){
return $this->hasOne(ShopMerchant::class, 'id', 'party_b')->field('id,company_name,organization_code,master_name,master_phone,master_email,area_manager');
// }else{
// return $this->hasOne(User::class, 'id', 'party_b')->field('id,nickname company_name');
// }
}
public function partyA()
{
return $this->hasOne(ShopMerchant::class, 'id', 'party_a')->bind(['party_a_name' => 'company_name']);
}
public function partyB()
{
return $this->hasOne(ShopMerchant::class, 'id', 'party_b')->bind(['party_b_name' => 'company_name']);
}
public function contractType()
{
return $this->hasOne(DictData::class, 'id', 'contract_type')->bind(['contract_type_name' => 'name']);
}
public function getContractTypeNameAttr($value)
{
return DictData::where(['id' => $this->contract_type])->value('name');
}
}

View File

@ -51,7 +51,7 @@ class ShopMerchant extends BaseModel
public function getContractAttr()
{
$find=Contract::where('party_a|party_b', $this->id)->field('check_status,status')->find();
$find=ShopContract::where('party_a|party_b', $this->id)->field('check_status,status')->find();
if($find){
return $find->toArray();
}else{

View File

@ -76,11 +76,11 @@ class CompanyAccountLog extends BaseModel
*/
/**
* 保证金
* 任务收益
*/
const TASK_INC_DEPOSIT = 200;
/**
* 收益
* 公司余额
*/
const TASK_INC_COMPANY_MONEY = 201;
/**

View File

@ -44,4 +44,13 @@ class DictData extends BaseModel
return $data['status'] ? '正常' : '停用';
}
// 根据镇农科公司任务类型获取code
public function getTownTaskType($typeId){
$townTaskTypeList = DictData::where(['type_value' => 'town_task_type', 'status' => 1])->column('value', 'id');
if(isset($townTaskTypeList[$typeId])) {
return $townTaskTypeList[$typeId];
}
return '';
}
}

View File

@ -6,5 +6,12 @@ use app\common\model\BaseModel;
class UserInformationgDemand extends BaseModel
{
public function getDataAttr($value)
{
if($value){
return json_decode($value,true);
}
return [];
}
}

View File

@ -16,6 +16,7 @@ namespace app\common\model\task;
use app\common\model\BaseModel;
use app\common\model\task_scheduling_plan\TaskSchedulingPlan;
use app\common\model\user\User;
use think\model\concern\SoftDelete;
@ -47,5 +48,9 @@ class Task extends BaseModel
{
return $this->hasOne(User::class, 'id', 'director_uid')->field(['id', 'nickname', 'avatar']);
}
// 关闭任务
public function closeTask($id) {
return Task::where(['id'=>$id])->save(['status'=>5]);
}
}

View File

@ -39,7 +39,7 @@ class TaskScheduling extends BaseModel
}
public function companyType()
{
return $this->hasOne(DictData::class, 'id', 'company_type')->bind(['company_type_name'=>'name']);
return $this->hasOne(DictData::class, 'id', 'company_type')->bind(['dict_company_type'=>'id', 'company_type_name'=>'name']);
}
public function template()
{

View File

@ -57,4 +57,7 @@ class TaskSchedulingPlan extends BaseModel
public function scheduling(){
return $this->hasOne(TaskScheduling::class,'id','scheduling_id');
}
public function settlement($id=0){
TaskSchedulingPlan::where('id', $id)->update(['is_pay' => 1]);
}
}

View File

@ -53,4 +53,8 @@ class TaskTemplate extends BaseModel
return json_decode($value,true);
}
}
public function updateTransactionPool($id, $transactionPool)
{
return TaskTemplate::where('id', $id)->save(['transaction_pool' => $transactionPool]);
}
}

View File

@ -182,7 +182,7 @@ class User extends BaseModel
public function company()
{
return $this->hasOne(Company::class, 'id', 'company_id')->field(['id','company_name','admin_id','company_type','responsible_area']);
return $this->hasOne(Company::class, 'id', 'company_id')->field(['id','company_name','admin_id','company_type','responsible_area', 'area_manager']);
}
public function getProvinceNameAttr($value)
{
@ -220,4 +220,9 @@ class User extends BaseModel
return [];
}
}
public function searchServiceManager($companyId)
{
return User::where(['company_id' => $companyId, 'group_id'=> 14])->find();
}
}

View File

@ -93,6 +93,11 @@ class TaskInformationJob
$arr['money'] = $task_35['money'];
$arr['company_account_type'] = 2;
}else{
/**
* 判断入股任务 单次类型 是否超时
* 未超时时刷新开始结束时间
* 超时则关闭
*/
if($data['template_info']['day_count']<=$day){
TaskSchedulingPlan::where('id', $data['id'])->update(['is_pay' => 0]);
try{
@ -100,10 +105,10 @@ class TaskInformationJob
}catch(\Exception $e){
$start_time = strtotime(date('Y-m-d'));
Task::where('id', $data['task_id'])->update(['create_time' => $start_time+86400,'update_time' =>time(),'start_time'=>$start_time+86400,'end_time'=> $start_time + 86400+86399]);
}
return false;
}
if($data['template_info']['day_count']>$day){
Task::where('id', $data['task_id'])->update(['status' =>5]);
Log::info('入股任务 ' . $data['template_info']['title'] . '结算失败,任务为超时:' . json_encode($data));
@ -117,15 +122,32 @@ class TaskInformationJob
}
else {
//其他类型任务
$task_count = Task::where('id', $data['task_id'])->field('director_uid,money')->where('status', 3)->with('director_info')->find();
if (empty($task_count)) {
Log::info('其他任务 ' . $data['template_info']['title'] . '结算失败,任务为空:' . json_encode($data));
Task::where('id', $data['task_id'])->update(['status' => 5]);
return false;
$task = Task::where('id', $data['task_id'])->with('director_info')->find();
if ($task['status'] == 3) {
$name = $task['director_info']['nickname'];
$arr['status'] = 1;
$arr['money'] = $task['money'];
} else if ($task['status'] == 2) {
// 是否超时
$day= $data['template_info']['stage_day_one'] + $data['template_info']['stage_day_two'];
if($data['template_info']['day_count'] >= $day){
Task::where('id', $data['task_id'])->update(['status' =>5]);
Log::info('入股任务 ' . $data['template_info']['title'] . '结算失败,任务为超时:' . json_encode($data));
return false;
}
if($data['template_info']['day_count'] < $day){
TaskSchedulingPlan::where('id', $data['id'])->update(['is_pay' => 0]);
try{
Task::where('id', $data['task_id'])->update(['create_time' => $task['start_time']+86400,'update_time' =>time(),'start_time'=>$task['start_time']+86400,'end_time'=>$task['start_time']+86400+86399]);
}catch(\Exception $e){
$start_time = strtotime(date('Y-m-d'));
Task::where('id', $data['task_id'])->update(['create_time' => $start_time+86400,'update_time' =>time(),'start_time'=>$start_time+86400,'end_time'=> $start_time + 86400+86399]);
}
return false;
}
}
$name = $task_count['director_info']['nickname'];
$arr['status'] = 1;
$arr['money'] = $task_count['money'];
}
} catch (\Exception $e) {
Log::error('line:'.$e->getLine().'异常报错:任务结算失败:' . $data['template_info']['title'] . $e->getMessage() . json_encode($data));

26
app/job/TaskTenZehn.php Normal file
View File

@ -0,0 +1,26 @@
<?php
namespace app\job;
use app\common\logic\task\TaskLogic;
use think\queue\Job;
use app\api\controller\JunziqianController;
/**
* 任务下发执行的具体逻辑
*/
class TaskTenZehn
{
public function fire(Job $job, $data)
{
if ($job->attempts() > 3) {
//通过这个方法可以检查这个任务已经重试了几次了
}
$a=app(JunziqianController::class)->organizationReapply($data);
// TaskLogic::CronAdd($data['data'],$data['data_two']);
//如果任务执行成功后 记得删除任务不然这个任务会重复执行直到达到最大重试次数后失败后执行failed方法
$job->delete();
}
}

23
app/job/TownTaskAdd.php Normal file
View File

@ -0,0 +1,23 @@
<?php
namespace app\job;
use app\common\logic\task\TaskLogic;
use think\queue\Job;
/**
* 镇农科公司任务下发执行的具体逻辑
*/
class TownTaskAdd
{
public function fire(Job $job, $template)
{
if ($job->attempts() > 3) {
//通过这个方法可以检查这个任务已经重试了几次了
}
TaskLogic::TownCronAdd($template);
//如果任务执行成功后 记得删除任务不然这个任务会重复执行直到达到最大重试次数后失败后执行failed方法
$job->delete();
}
}

View File

@ -0,0 +1,26 @@
<?php
namespace app\job;
use app\api\controller\RemoteController;
use app\common\logic\finance\ShareProfit;
use app\common\logic\task\TaskLogic;
use app\common\model\Company;
use app\common\model\task\Task;
use app\common\model\task_scheduling_plan\TaskSchedulingPlan;
use app\common\model\task_template\TaskTemplate;
use think\facade\Log;
use think\queue\Job;
class TownTaskSettlementJob
{
/**
* 镇农科公司任务结算
*/
public function fire(Job $job, $taskSchedulingPlan)
{
TaskLogic::townTaskSettlement($taskSchedulingPlan);
//如果任务执行成功后 记得删除任务不然这个任务会重复执行直到达到最大重试次数后失败后执行failed方法
$job->delete();
}
}

View File

@ -20,7 +20,7 @@ class TaskCron extends Task
// $this->everyMinute();//每分钟
}
/**
* 执行任务
* 小组服务公司执行任务下发
* @return mixed
*/
protected function execute()
@ -29,7 +29,8 @@ class TaskCron extends Task
// $time=strtotime(date('Y-m-d',strtotime('-1 day')));
$time = strtotime(date('Y-m-d'));
// $tiem_end=$time+86399;
$plan_all = TaskScheduling::where('cron_time', '<', $time)->where('status', 1)->with('company_info')->select()->toArray();
// 查询系统目前小组公司的任务安排
$plan_all = TaskScheduling::where('cron_time', '<', $time)->where('status', 1)->where('company_type', 18)->with('company_info')->select()->toArray();
$plan_ids = [];
foreach ($plan_all as $k => $v) {
$all = TaskTemplate::where('status', 1)->where('task_scheduling', $v['id'])->limit(30)->select()->toArray();

View File

@ -15,13 +15,26 @@ class TaskSettlementCron extends Task{
// $this->everyMinute();//每分钟
}
/**
* 任务结算
* 小组服务公司任务结算
* @return mixed
*/
protected function execute()
{
//yesterday
$all=TaskSchedulingPlan::whereDay('end_time','yesterday')->where('is_pay',0)->with(['template_info','scheduling'])->select()->toArray();
// $all=TaskSchedulingPlan::whereDay('end_time','yesterday')
// ->where('is_pay',0)
// ->with(['template_info','scheduling'=>function($query){
// $query->where('company_type', 18);
// }])
// ->select()
// ->toArray();
$all = TaskSchedulingPlan::whereDay('end_time','yesterday')
->withJoin(['scheduling'], 'left')
->where('scheduling.company_type', 18)
->where('is_pay',0)
->with(['template_info'])
->select()
->toArray();
foreach($all as $k=>$v){
queue(TaskInformationJob::class,$v);
}

51
app/task/TownTaskCron.php Normal file
View File

@ -0,0 +1,51 @@
<?php
namespace app\task;
use app\common\logic\task\TaskLogic;
use app\common\model\Company;
use app\common\model\task_scheduling\TaskScheduling;
use app\common\model\task_template\TaskTemplate;
use app\job\TaskAdd;
use app\job\TownTaskAdd;
use think\facade\Log;
use yunwuxin\cron\Task;
class TownTaskCron extends Task {
public function configure()
{
$this->daily(); //设置任务的周期,每天执行一次,更多的方法可以查看源代码,都有注释
// $this->everyMinute();//每分钟
}
/**
* 镇农科公司任务下发
*/
protected function execute()
{
//任务下发
$time = strtotime(date('Y-m-d'));
// 查询系统 所有镇农科公司 未下发 的 任务安排
$taskSchedulingList = TaskScheduling::where('cron_time', '<', $time)->where('status', 1)->where('company_type', 41)->with('company_info')->select()->toArray();
$taskSchedulingIds = [];
$companyIds = [];
foreach ($taskSchedulingList as $k => $taskScheduling) {
$templateList = TaskTemplate::where('status', 1)->where('task_scheduling', $taskScheduling['id'])->limit(30)->select()->toArray();
$taskSchedulingIds[] = $taskScheduling['id'];
$companyIds[] = $taskScheduling['company_id'];
foreach ($templateList as $template) {
queue(TownTaskAdd::class, $template);
// TaskLogic::TownCronAdd($template); // 手动下发用
}
if (empty($templateList)) {
unset($taskSchedulingList[$k]);
}
}
Company::where('id', 'in', $companyIds)->inc('day_count')->update();
TaskScheduling::where('id', 'in', $taskSchedulingIds)->update(['cron_time' => time()]);
Log::info('定时任务下发执行成功' . date('Y-m-d H:i:s'));
}
}

View File

@ -0,0 +1,39 @@
<?php
namespace app\task;
use app\common\model\task_scheduling_plan\TaskSchedulingPlan;
use app\job\TownTaskSettlementJob;
use think\facade\Log;
use yunwuxin\cron\Task;
class TownTaskSettlementCron extends Task
{
public function configure()
{
$this->daily(); //设置任务的周期,每天执行一次,更多的方法可以查看源代码,都有注释
// $this->everyMinute();//每分钟
}
/**
* 镇农科公司任务结算
* @return mixed
*/
protected function execute()
{
Log::info('定时任务结算执行-开始'.date('Y-m-d H:i:s'));
//yesterday 昨日未结算的任务计划
$taskSchedulingPlanList = TaskSchedulingPlan::whereDay('end_time','yesterday')
->withJoin(['scheduling'], 'left')
->where('scheduling.company_type', 41)
->where('is_pay',0)
->with(['template_info'])
->select()
->toArray();
foreach($taskSchedulingPlanList as $taskSchedulingPlan){
queue(TownTaskSettlementJob::class, $taskSchedulingPlan);
}
Log::info('定时任务结算执行-结束'.date('Y-m-d H:i:s'));
//...具体的任务执行
}
}

View File

@ -10,7 +10,7 @@
// +----------------------------------------------------------------------
return [
'default' => 'sync',
'default' => env('redis.queue'),
'connections' => [
'sync' => [
'type' => 'sync',
@ -24,9 +24,9 @@ return [
'redis' => [
'type' => 'redis',
'queue' => 'default',
'host' => '127.0.0.1',
'host' => env('redis.host'),
'port' => 6379,
'password' => '',
'password' => env('redis.auth'),
'select' => 0,
'timeout' => 0,
'persistent' => false,

View File

@ -19,11 +19,8 @@ namespace IFlytek\Xfyun\Speech;
use IFlytek\Xfyun\Core\Traits\SignTrait;
use IFlytek\Xfyun\Core\HttpClient;
use GuzzleHttp\Psr7\Request;
use IFlytek\Xfyun\Speech\Constants\ChatConstants;
/**
* 文本纠错客户端
* 讯飞Ai户端
*
* @author guizheng@iflytek.com
*/
@ -87,4 +84,37 @@ class ChatClient
));
return $authAddr;
}
function getBody($appid, $question)
{
$header = array(
"app_id" => $appid,
"uid" => "1"
);
$parameter = array(
"chat" => array(
"domain" => "generalv2",
"temperature" => 0.5,
"max_tokens" => 1024
)
);
$payload = array(
"message" => array(
"text" => array(
array("role" => "user", "content" => $question)
)
)
);
$json_string = json_encode(array(
"header" => $header,
"parameter" => $parameter,
"payload" => $payload
));
return $json_string;
}
}

View File

@ -1 +0,0 @@
jvGPsGV8dSY3kiokKm83QbY7p7AzLpoiYRDILKtqxTw.ygZpRA3Elso4JmfhhS2sEZzf8WSBgcsagKxvXavv6_M

View File

@ -0,0 +1 @@
import o from"./error.c52a2209.js";import{d as r,o as i,c as p,U as m,L as e,a as t}from"./@vue.51d7f2d8.js";import"./element-plus.b64c0a90.js";import"./@vueuse.ec90c285.js";import"./@element-plus.a074d1f6.js";import"./lodash-es.29c53eac.js";import"./dayjs.e873ead7.js";import"./@amap.8a62addd.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./vue-router.9f65afb1.js";import"./index.f190d0dd.js";import"./lodash.08438971.js";import"./axios.105476b3.js";import"./pinia.56356cb7.js";import"./vue-demi.b3a9cad9.js";import"./css-color-function.7ac6f233.js";import"./color.44a05936.js";import"./clone.0afcbf90.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.86067895.js";import"./ms.a9ae1d6d.js";import"./nprogress.f73355d0.js";import"./vue-clipboard3.dca5bca3.js";import"./clipboard.16e4491b.js";import"./echarts.ac57a99a.js";import"./zrender.d54ce080.js";import"./tslib.60310f1a.js";import"./highlight.js.dba6fa1b.js";import"./@highlightjs.40d5feba.js";const s="/admin/assets/no_perms.a56e95a5.png",a={class:"error404"},u=t("div",{class:"flex justify-center"},[t("img",{class:"w-[150px] h-[150px]",src:s,alt:""})],-1),T=r({__name:"403",setup(c){return(n,_)=>(i(),p("div",a,[m(o,{code:"403",title:"\u60A8\u7684\u8D26\u53F7\u6743\u9650\u4E0D\u8DB3\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650\uFF01","show-btn":!1},{content:e(()=>[u]),_:1})]))}});export{T as default};

View File

@ -0,0 +1 @@
import o from"./error.b10dbad5.js";import{d as r,o as i,c as p,U as m,L as e,a as t}from"./@vue.51d7f2d8.js";import"./element-plus.4328d892.js";import"./@vueuse.ec90c285.js";import"./@element-plus.a074d1f6.js";import"./lodash-es.29c53eac.js";import"./dayjs.e873ead7.js";import"./@amap.8a62addd.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./vue-router.9f65afb1.js";import"./index.4ff2d535.js";import"./lodash.08438971.js";import"./axios.105476b3.js";import"./pinia.56356cb7.js";import"./vue-demi.b3a9cad9.js";import"./css-color-function.7ac6f233.js";import"./color.44a05936.js";import"./clone.0afcbf90.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.86067895.js";import"./ms.a9ae1d6d.js";import"./nprogress.f73355d0.js";import"./vue-clipboard3.dca5bca3.js";import"./clipboard.16e4491b.js";import"./echarts.ac57a99a.js";import"./zrender.d54ce080.js";import"./tslib.60310f1a.js";import"./highlight.js.dba6fa1b.js";import"./@highlightjs.40d5feba.js";const s="/admin/assets/no_perms.a56e95a5.png",a={class:"error404"},u=t("div",{class:"flex justify-center"},[t("img",{class:"w-[150px] h-[150px]",src:s,alt:""})],-1),T=r({__name:"403",setup(c){return(n,_)=>(i(),p("div",a,[m(o,{code:"403",title:"\u60A8\u7684\u8D26\u53F7\u6743\u9650\u4E0D\u8DB3\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650\uFF01","show-btn":!1},{content:e(()=>[u]),_:1})]))}});export{T as default};

View File

@ -0,0 +1 @@
import o from"./error.c4961842.js";import{d as r,o as i,c as p,U as m,L as e,a as t}from"./@vue.51d7f2d8.js";import"./element-plus.4328d892.js";import"./@vueuse.ec90c285.js";import"./@element-plus.a074d1f6.js";import"./lodash-es.29c53eac.js";import"./dayjs.e873ead7.js";import"./@amap.8a62addd.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./vue-router.9f65afb1.js";import"./index.5a6ac86e.js";import"./lodash.08438971.js";import"./axios.105476b3.js";import"./pinia.56356cb7.js";import"./vue-demi.b3a9cad9.js";import"./css-color-function.7ac6f233.js";import"./color.44a05936.js";import"./clone.0afcbf90.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.86067895.js";import"./ms.a9ae1d6d.js";import"./nprogress.f73355d0.js";import"./vue-clipboard3.dca5bca3.js";import"./clipboard.16e4491b.js";import"./echarts.ac57a99a.js";import"./zrender.d54ce080.js";import"./tslib.60310f1a.js";import"./highlight.js.dba6fa1b.js";import"./@highlightjs.40d5feba.js";const s="/admin/assets/no_perms.a56e95a5.png",a={class:"error404"},u=t("div",{class:"flex justify-center"},[t("img",{class:"w-[150px] h-[150px]",src:s,alt:""})],-1),T=r({__name:"403",setup(c){return(n,_)=>(i(),p("div",a,[m(o,{code:"403",title:"\u60A8\u7684\u8D26\u53F7\u6743\u9650\u4E0D\u8DB3\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650\uFF01","show-btn":!1},{content:e(()=>[u]),_:1})]))}});export{T as default};

View File

@ -0,0 +1 @@
import o from"./error.bfcea95a.js";import{d as r,o as i,c as p,U as m,L as e,a as t}from"./@vue.51d7f2d8.js";import"./element-plus.b64c0a90.js";import"./@vueuse.ec90c285.js";import"./@element-plus.a074d1f6.js";import"./lodash-es.29c53eac.js";import"./dayjs.e873ead7.js";import"./@amap.8a62addd.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./vue-router.9f65afb1.js";import"./index.760285cd.js";import"./lodash.08438971.js";import"./axios.105476b3.js";import"./pinia.56356cb7.js";import"./vue-demi.b3a9cad9.js";import"./css-color-function.7ac6f233.js";import"./color.44a05936.js";import"./clone.0afcbf90.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.86067895.js";import"./ms.a9ae1d6d.js";import"./nprogress.f73355d0.js";import"./vue-clipboard3.dca5bca3.js";import"./clipboard.16e4491b.js";import"./echarts.ac57a99a.js";import"./zrender.d54ce080.js";import"./tslib.60310f1a.js";import"./highlight.js.dba6fa1b.js";import"./@highlightjs.40d5feba.js";const s="/admin/assets/no_perms.a56e95a5.png",a={class:"error404"},u=t("div",{class:"flex justify-center"},[t("img",{class:"w-[150px] h-[150px]",src:s,alt:""})],-1),T=r({__name:"403",setup(c){return(n,_)=>(i(),p("div",a,[m(o,{code:"403",title:"\u60A8\u7684\u8D26\u53F7\u6743\u9650\u4E0D\u8DB3\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650\uFF01","show-btn":!1},{content:e(()=>[u]),_:1})]))}});export{T as default};

View File

@ -0,0 +1 @@
import o from"./error.c52a2209.js";import{d as r,o as t,c as m,U as p}from"./@vue.51d7f2d8.js";import"./element-plus.b64c0a90.js";import"./@vueuse.ec90c285.js";import"./@element-plus.a074d1f6.js";import"./lodash-es.29c53eac.js";import"./dayjs.e873ead7.js";import"./@amap.8a62addd.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./vue-router.9f65afb1.js";import"./index.f190d0dd.js";import"./lodash.08438971.js";import"./axios.105476b3.js";import"./pinia.56356cb7.js";import"./vue-demi.b3a9cad9.js";import"./css-color-function.7ac6f233.js";import"./color.44a05936.js";import"./clone.0afcbf90.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.86067895.js";import"./ms.a9ae1d6d.js";import"./nprogress.f73355d0.js";import"./vue-clipboard3.dca5bca3.js";import"./clipboard.16e4491b.js";import"./echarts.ac57a99a.js";import"./zrender.d54ce080.js";import"./tslib.60310f1a.js";import"./highlight.js.dba6fa1b.js";import"./@highlightjs.40d5feba.js";const i={class:"error404"},P=r({__name:"404",setup(e){return(u,c)=>(t(),m("div",i,[p(o,{code:"404",title:"\u54CE\u5440\uFF0C\u51FA\u9519\u4E86\uFF01\u60A8\u8BBF\u95EE\u7684\u9875\u9762\u4E0D\u5B58\u5728\u2026"})]))}});export{P as default};

View File

@ -0,0 +1 @@
import o from"./error.c4961842.js";import{d as r,o as t,c as m,U as p}from"./@vue.51d7f2d8.js";import"./element-plus.4328d892.js";import"./@vueuse.ec90c285.js";import"./@element-plus.a074d1f6.js";import"./lodash-es.29c53eac.js";import"./dayjs.e873ead7.js";import"./@amap.8a62addd.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./vue-router.9f65afb1.js";import"./index.5a6ac86e.js";import"./lodash.08438971.js";import"./axios.105476b3.js";import"./pinia.56356cb7.js";import"./vue-demi.b3a9cad9.js";import"./css-color-function.7ac6f233.js";import"./color.44a05936.js";import"./clone.0afcbf90.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.86067895.js";import"./ms.a9ae1d6d.js";import"./nprogress.f73355d0.js";import"./vue-clipboard3.dca5bca3.js";import"./clipboard.16e4491b.js";import"./echarts.ac57a99a.js";import"./zrender.d54ce080.js";import"./tslib.60310f1a.js";import"./highlight.js.dba6fa1b.js";import"./@highlightjs.40d5feba.js";const i={class:"error404"},P=r({__name:"404",setup(e){return(u,c)=>(t(),m("div",i,[p(o,{code:"404",title:"\u54CE\u5440\uFF0C\u51FA\u9519\u4E86\uFF01\u60A8\u8BBF\u95EE\u7684\u9875\u9762\u4E0D\u5B58\u5728\u2026"})]))}});export{P as default};

View File

@ -0,0 +1 @@
import o from"./error.b10dbad5.js";import{d as r,o as t,c as m,U as p}from"./@vue.51d7f2d8.js";import"./element-plus.4328d892.js";import"./@vueuse.ec90c285.js";import"./@element-plus.a074d1f6.js";import"./lodash-es.29c53eac.js";import"./dayjs.e873ead7.js";import"./@amap.8a62addd.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./vue-router.9f65afb1.js";import"./index.4ff2d535.js";import"./lodash.08438971.js";import"./axios.105476b3.js";import"./pinia.56356cb7.js";import"./vue-demi.b3a9cad9.js";import"./css-color-function.7ac6f233.js";import"./color.44a05936.js";import"./clone.0afcbf90.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.86067895.js";import"./ms.a9ae1d6d.js";import"./nprogress.f73355d0.js";import"./vue-clipboard3.dca5bca3.js";import"./clipboard.16e4491b.js";import"./echarts.ac57a99a.js";import"./zrender.d54ce080.js";import"./tslib.60310f1a.js";import"./highlight.js.dba6fa1b.js";import"./@highlightjs.40d5feba.js";const i={class:"error404"},P=r({__name:"404",setup(e){return(u,c)=>(t(),m("div",i,[p(o,{code:"404",title:"\u54CE\u5440\uFF0C\u51FA\u9519\u4E86\uFF01\u60A8\u8BBF\u95EE\u7684\u9875\u9762\u4E0D\u5B58\u5728\u2026"})]))}});export{P as default};

View File

@ -0,0 +1 @@
import o from"./error.bfcea95a.js";import{d as r,o as t,c as m,U as p}from"./@vue.51d7f2d8.js";import"./element-plus.b64c0a90.js";import"./@vueuse.ec90c285.js";import"./@element-plus.a074d1f6.js";import"./lodash-es.29c53eac.js";import"./dayjs.e873ead7.js";import"./@amap.8a62addd.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./vue-router.9f65afb1.js";import"./index.760285cd.js";import"./lodash.08438971.js";import"./axios.105476b3.js";import"./pinia.56356cb7.js";import"./vue-demi.b3a9cad9.js";import"./css-color-function.7ac6f233.js";import"./color.44a05936.js";import"./clone.0afcbf90.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.86067895.js";import"./ms.a9ae1d6d.js";import"./nprogress.f73355d0.js";import"./vue-clipboard3.dca5bca3.js";import"./clipboard.16e4491b.js";import"./echarts.ac57a99a.js";import"./zrender.d54ce080.js";import"./tslib.60310f1a.js";import"./highlight.js.dba6fa1b.js";import"./@highlightjs.40d5feba.js";const i={class:"error404"},P=r({__name:"404",setup(e){return(u,c)=>(t(),m("div",i,[p(o,{code:"404",title:"\u54CE\u5440\uFF0C\u51FA\u9519\u4E86\uFF01\u60A8\u8BBF\u95EE\u7684\u9875\u9762\u4E0D\u5B58\u5728\u2026"})]))}});export{P as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
import"./account-adjust.vue_vue_type_script_setup_true_lang.18806740.js";import{_ as N}from"./account-adjust.vue_vue_type_script_setup_true_lang.18806740.js";import"./element-plus.4328d892.js";import"./@vue.51d7f2d8.js";import"./@vueuse.ec90c285.js";import"./@element-plus.a074d1f6.js";import"./lodash-es.29c53eac.js";import"./dayjs.e873ead7.js";import"./@amap.8a62addd.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.1c9aaf4d.js";import"./index.vue_vue_type_style_index_0_scoped_95d1884e_lang.0fc4c9f8.js";import"./index.4ff2d535.js";import"./lodash.08438971.js";import"./axios.105476b3.js";import"./vue-router.9f65afb1.js";import"./pinia.56356cb7.js";import"./vue-demi.b3a9cad9.js";import"./css-color-function.7ac6f233.js";import"./color.44a05936.js";import"./clone.0afcbf90.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.86067895.js";import"./ms.a9ae1d6d.js";import"./nprogress.f73355d0.js";import"./vue-clipboard3.dca5bca3.js";import"./clipboard.16e4491b.js";import"./echarts.ac57a99a.js";import"./zrender.d54ce080.js";import"./tslib.60310f1a.js";import"./highlight.js.dba6fa1b.js";import"./@highlightjs.40d5feba.js";export{N as default};

View File

@ -0,0 +1 @@
import"./account-adjust.vue_vue_type_script_setup_true_lang.67917e81.js";import{_ as N}from"./account-adjust.vue_vue_type_script_setup_true_lang.67917e81.js";import"./element-plus.b64c0a90.js";import"./@vue.51d7f2d8.js";import"./@vueuse.ec90c285.js";import"./@element-plus.a074d1f6.js";import"./lodash-es.29c53eac.js";import"./dayjs.e873ead7.js";import"./@amap.8a62addd.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.9561c5d9.js";import"./index.vue_vue_type_style_index_0_scoped_95d1884e_lang.0fc4c9f8.js";import"./index.f190d0dd.js";import"./lodash.08438971.js";import"./axios.105476b3.js";import"./vue-router.9f65afb1.js";import"./pinia.56356cb7.js";import"./vue-demi.b3a9cad9.js";import"./css-color-function.7ac6f233.js";import"./color.44a05936.js";import"./clone.0afcbf90.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.86067895.js";import"./ms.a9ae1d6d.js";import"./nprogress.f73355d0.js";import"./vue-clipboard3.dca5bca3.js";import"./clipboard.16e4491b.js";import"./echarts.ac57a99a.js";import"./zrender.d54ce080.js";import"./tslib.60310f1a.js";import"./highlight.js.dba6fa1b.js";import"./@highlightjs.40d5feba.js";export{N as default};

View File

@ -0,0 +1 @@
import"./account-adjust.vue_vue_type_script_setup_true_lang.a704baaf.js";import{_ as N}from"./account-adjust.vue_vue_type_script_setup_true_lang.a704baaf.js";import"./element-plus.4328d892.js";import"./@vue.51d7f2d8.js";import"./@vueuse.ec90c285.js";import"./@element-plus.a074d1f6.js";import"./lodash-es.29c53eac.js";import"./dayjs.e873ead7.js";import"./@amap.8a62addd.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.df3950ef.js";import"./index.vue_vue_type_style_index_0_scoped_95d1884e_lang.0fc4c9f8.js";import"./index.5a6ac86e.js";import"./lodash.08438971.js";import"./axios.105476b3.js";import"./vue-router.9f65afb1.js";import"./pinia.56356cb7.js";import"./vue-demi.b3a9cad9.js";import"./css-color-function.7ac6f233.js";import"./color.44a05936.js";import"./clone.0afcbf90.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.86067895.js";import"./ms.a9ae1d6d.js";import"./nprogress.f73355d0.js";import"./vue-clipboard3.dca5bca3.js";import"./clipboard.16e4491b.js";import"./echarts.ac57a99a.js";import"./zrender.d54ce080.js";import"./tslib.60310f1a.js";import"./highlight.js.dba6fa1b.js";import"./@highlightjs.40d5feba.js";export{N as default};

View File

@ -0,0 +1 @@
import"./account-adjust.vue_vue_type_script_setup_true_lang.ce6c7365.js";import{_ as N}from"./account-adjust.vue_vue_type_script_setup_true_lang.ce6c7365.js";import"./element-plus.b64c0a90.js";import"./@vue.51d7f2d8.js";import"./@vueuse.ec90c285.js";import"./@element-plus.a074d1f6.js";import"./lodash-es.29c53eac.js";import"./dayjs.e873ead7.js";import"./@amap.8a62addd.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.8bb6f5eb.js";import"./index.vue_vue_type_style_index_0_scoped_95d1884e_lang.0fc4c9f8.js";import"./index.760285cd.js";import"./lodash.08438971.js";import"./axios.105476b3.js";import"./vue-router.9f65afb1.js";import"./pinia.56356cb7.js";import"./vue-demi.b3a9cad9.js";import"./css-color-function.7ac6f233.js";import"./color.44a05936.js";import"./clone.0afcbf90.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.86067895.js";import"./ms.a9ae1d6d.js";import"./nprogress.f73355d0.js";import"./vue-clipboard3.dca5bca3.js";import"./clipboard.16e4491b.js";import"./echarts.ac57a99a.js";import"./zrender.d54ce080.js";import"./tslib.60310f1a.js";import"./highlight.js.dba6fa1b.js";import"./@highlightjs.40d5feba.js";export{N as default};

View File

@ -0,0 +1 @@
import{C as x,G as B,H as R,B as g,D as N}from"./element-plus.4328d892.js";import{P as q}from"./index.1c9aaf4d.js";import{f as C}from"./index.4ff2d535.js";import{d as A,s as D,$ as I,e as S,w as b,o as U,K as j,L as a,a as G,U as o,u as r,R as n,S as E}from"./@vue.51d7f2d8.js";const P={class:"pr-8"},T=A({__name:"account-adjust",props:{show:{type:Boolean,required:!0},value:{type:[Number,String],required:!0}},emits:["update:show","confirm"],setup(d,{emit:i}){const c=d,s=D(),u=I({action:1,num:"",remark:""}),m=D(),f=S(()=>Number(c.value)+Number(u.num)*(u.action==1?1:-1)),w={num:[{required:!0,message:"\u8BF7\u8F93\u5165\u8C03\u6574\u7684\u91D1\u989D"}]},v=e=>{if(e.includes("-"))return C.msgError("\u8BF7\u8F93\u5165\u6B63\u6574\u6570");u.num=e},y=async()=>{var e;await((e=s.value)==null?void 0:e.validate()),i("confirm",u)},V=()=>{var e;i("update:show",!1),(e=s.value)==null||e.resetFields()};return b(()=>c.show,e=>{var l,t;e?(l=m.value)==null||l.open():(t=m.value)==null||t.close()}),b(f,e=>{e<0&&(C.msgError("\u8C03\u6574\u540E\u4F59\u989D\u9700\u5927\u4E8E0"),u.num="")}),(e,l)=>{const t=x,_=B,h=R,F=g,k=N;return U(),j(q,{ref_key:"popupRef",ref:m,title:"\u4F59\u989D\u8C03\u6574",width:"500px",onConfirm:y,async:!0,onClose:V},{default:a(()=>[G("div",P,[o(k,{ref_key:"formRef",ref:s,model:r(u),"label-width":"120px",rules:w},{default:a(()=>[o(t,{label:"\u5F53\u524D\u4F59\u989D"},{default:a(()=>[n("\xA5 "+E(d.value),1)]),_:1}),o(t,{label:"\u4F59\u989D\u589E\u51CF",required:"",prop:"action"},{default:a(()=>[o(h,{modelValue:r(u).action,"onUpdate:modelValue":l[0]||(l[0]=p=>r(u).action=p)},{default:a(()=>[o(_,{label:1},{default:a(()=>[n("\u589E\u52A0\u4F59\u989D")]),_:1}),o(_,{label:2},{default:a(()=>[n("\u6263\u51CF\u4F59\u989D")]),_:1})]),_:1},8,["modelValue"])]),_:1}),o(t,{label:"\u8C03\u6574\u4F59\u989D",prop:"num"},{default:a(()=>[o(F,{"model-value":r(u).num,placeholder:"\u8BF7\u8F93\u5165\u8C03\u6574\u7684\u91D1\u989D",type:"number",onInput:v},null,8,["model-value"])]),_:1}),o(t,{label:"\u8C03\u6574\u540E\u4F59\u989D"},{default:a(()=>[n(" \xA5 "+E(r(f)),1)]),_:1}),o(t,{label:"\u5907\u6CE8",prop:"remark"},{default:a(()=>[o(F,{modelValue:r(u).remark,"onUpdate:modelValue":l[1]||(l[1]=p=>r(u).remark=p),type:"textarea",rows:4},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])])]),_:1},512)}}});export{T as _};

View File

@ -0,0 +1 @@
import{C as x,G as B,H as R,B as g,D as N}from"./element-plus.b64c0a90.js";import{P as q}from"./index.9561c5d9.js";import{f as C}from"./index.f190d0dd.js";import{d as A,s as D,$ as I,e as S,w as b,o as U,K as j,L as a,a as G,U as o,u as r,R as n,S as E}from"./@vue.51d7f2d8.js";const P={class:"pr-8"},T=A({__name:"account-adjust",props:{show:{type:Boolean,required:!0},value:{type:[Number,String],required:!0}},emits:["update:show","confirm"],setup(d,{emit:i}){const c=d,s=D(),u=I({action:1,num:"",remark:""}),m=D(),f=S(()=>Number(c.value)+Number(u.num)*(u.action==1?1:-1)),w={num:[{required:!0,message:"\u8BF7\u8F93\u5165\u8C03\u6574\u7684\u91D1\u989D"}]},v=e=>{if(e.includes("-"))return C.msgError("\u8BF7\u8F93\u5165\u6B63\u6574\u6570");u.num=e},y=async()=>{var e;await((e=s.value)==null?void 0:e.validate()),i("confirm",u)},V=()=>{var e;i("update:show",!1),(e=s.value)==null||e.resetFields()};return b(()=>c.show,e=>{var l,t;e?(l=m.value)==null||l.open():(t=m.value)==null||t.close()}),b(f,e=>{e<0&&(C.msgError("\u8C03\u6574\u540E\u4F59\u989D\u9700\u5927\u4E8E0"),u.num="")}),(e,l)=>{const t=x,_=B,h=R,F=g,k=N;return U(),j(q,{ref_key:"popupRef",ref:m,title:"\u4F59\u989D\u8C03\u6574",width:"500px",onConfirm:y,async:!0,onClose:V},{default:a(()=>[G("div",P,[o(k,{ref_key:"formRef",ref:s,model:r(u),"label-width":"120px",rules:w},{default:a(()=>[o(t,{label:"\u5F53\u524D\u4F59\u989D"},{default:a(()=>[n("\xA5 "+E(d.value),1)]),_:1}),o(t,{label:"\u4F59\u989D\u589E\u51CF",required:"",prop:"action"},{default:a(()=>[o(h,{modelValue:r(u).action,"onUpdate:modelValue":l[0]||(l[0]=p=>r(u).action=p)},{default:a(()=>[o(_,{label:1},{default:a(()=>[n("\u589E\u52A0\u4F59\u989D")]),_:1}),o(_,{label:2},{default:a(()=>[n("\u6263\u51CF\u4F59\u989D")]),_:1})]),_:1},8,["modelValue"])]),_:1}),o(t,{label:"\u8C03\u6574\u4F59\u989D",prop:"num"},{default:a(()=>[o(F,{"model-value":r(u).num,placeholder:"\u8BF7\u8F93\u5165\u8C03\u6574\u7684\u91D1\u989D",type:"number",onInput:v},null,8,["model-value"])]),_:1}),o(t,{label:"\u8C03\u6574\u540E\u4F59\u989D"},{default:a(()=>[n(" \xA5 "+E(r(f)),1)]),_:1}),o(t,{label:"\u5907\u6CE8",prop:"remark"},{default:a(()=>[o(F,{modelValue:r(u).remark,"onUpdate:modelValue":l[1]||(l[1]=p=>r(u).remark=p),type:"textarea",rows:4},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])])]),_:1},512)}}});export{T as _};

View File

@ -0,0 +1 @@
import{C as x,G as B,H as R,B as g,D as N}from"./element-plus.4328d892.js";import{P as q}from"./index.df3950ef.js";import{f as C}from"./index.5a6ac86e.js";import{d as A,s as D,$ as I,e as S,w as b,o as U,K as j,L as a,a as G,U as o,u as r,R as n,S as E}from"./@vue.51d7f2d8.js";const P={class:"pr-8"},T=A({__name:"account-adjust",props:{show:{type:Boolean,required:!0},value:{type:[Number,String],required:!0}},emits:["update:show","confirm"],setup(d,{emit:i}){const c=d,s=D(),u=I({action:1,num:"",remark:""}),m=D(),f=S(()=>Number(c.value)+Number(u.num)*(u.action==1?1:-1)),w={num:[{required:!0,message:"\u8BF7\u8F93\u5165\u8C03\u6574\u7684\u91D1\u989D"}]},v=e=>{if(e.includes("-"))return C.msgError("\u8BF7\u8F93\u5165\u6B63\u6574\u6570");u.num=e},y=async()=>{var e;await((e=s.value)==null?void 0:e.validate()),i("confirm",u)},V=()=>{var e;i("update:show",!1),(e=s.value)==null||e.resetFields()};return b(()=>c.show,e=>{var l,t;e?(l=m.value)==null||l.open():(t=m.value)==null||t.close()}),b(f,e=>{e<0&&(C.msgError("\u8C03\u6574\u540E\u4F59\u989D\u9700\u5927\u4E8E0"),u.num="")}),(e,l)=>{const t=x,_=B,h=R,F=g,k=N;return U(),j(q,{ref_key:"popupRef",ref:m,title:"\u4F59\u989D\u8C03\u6574",width:"500px",onConfirm:y,async:!0,onClose:V},{default:a(()=>[G("div",P,[o(k,{ref_key:"formRef",ref:s,model:r(u),"label-width":"120px",rules:w},{default:a(()=>[o(t,{label:"\u5F53\u524D\u4F59\u989D"},{default:a(()=>[n("\xA5 "+E(d.value),1)]),_:1}),o(t,{label:"\u4F59\u989D\u589E\u51CF",required:"",prop:"action"},{default:a(()=>[o(h,{modelValue:r(u).action,"onUpdate:modelValue":l[0]||(l[0]=p=>r(u).action=p)},{default:a(()=>[o(_,{label:1},{default:a(()=>[n("\u589E\u52A0\u4F59\u989D")]),_:1}),o(_,{label:2},{default:a(()=>[n("\u6263\u51CF\u4F59\u989D")]),_:1})]),_:1},8,["modelValue"])]),_:1}),o(t,{label:"\u8C03\u6574\u4F59\u989D",prop:"num"},{default:a(()=>[o(F,{"model-value":r(u).num,placeholder:"\u8BF7\u8F93\u5165\u8C03\u6574\u7684\u91D1\u989D",type:"number",onInput:v},null,8,["model-value"])]),_:1}),o(t,{label:"\u8C03\u6574\u540E\u4F59\u989D"},{default:a(()=>[n(" \xA5 "+E(r(f)),1)]),_:1}),o(t,{label:"\u5907\u6CE8",prop:"remark"},{default:a(()=>[o(F,{modelValue:r(u).remark,"onUpdate:modelValue":l[1]||(l[1]=p=>r(u).remark=p),type:"textarea",rows:4},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])])]),_:1},512)}}});export{T as _};

View File

@ -0,0 +1 @@
import{C as x,G as B,H as R,B as g,D as N}from"./element-plus.b64c0a90.js";import{P as q}from"./index.8bb6f5eb.js";import{f as C}from"./index.760285cd.js";import{d as A,s as D,$ as I,e as S,w as b,o as U,K as j,L as a,a as G,U as o,u as r,R as n,S as E}from"./@vue.51d7f2d8.js";const P={class:"pr-8"},T=A({__name:"account-adjust",props:{show:{type:Boolean,required:!0},value:{type:[Number,String],required:!0}},emits:["update:show","confirm"],setup(d,{emit:i}){const c=d,s=D(),u=I({action:1,num:"",remark:""}),m=D(),f=S(()=>Number(c.value)+Number(u.num)*(u.action==1?1:-1)),w={num:[{required:!0,message:"\u8BF7\u8F93\u5165\u8C03\u6574\u7684\u91D1\u989D"}]},v=e=>{if(e.includes("-"))return C.msgError("\u8BF7\u8F93\u5165\u6B63\u6574\u6570");u.num=e},y=async()=>{var e;await((e=s.value)==null?void 0:e.validate()),i("confirm",u)},V=()=>{var e;i("update:show",!1),(e=s.value)==null||e.resetFields()};return b(()=>c.show,e=>{var l,t;e?(l=m.value)==null||l.open():(t=m.value)==null||t.close()}),b(f,e=>{e<0&&(C.msgError("\u8C03\u6574\u540E\u4F59\u989D\u9700\u5927\u4E8E0"),u.num="")}),(e,l)=>{const t=x,_=B,h=R,F=g,k=N;return U(),j(q,{ref_key:"popupRef",ref:m,title:"\u4F59\u989D\u8C03\u6574",width:"500px",onConfirm:y,async:!0,onClose:V},{default:a(()=>[G("div",P,[o(k,{ref_key:"formRef",ref:s,model:r(u),"label-width":"120px",rules:w},{default:a(()=>[o(t,{label:"\u5F53\u524D\u4F59\u989D"},{default:a(()=>[n("\xA5 "+E(d.value),1)]),_:1}),o(t,{label:"\u4F59\u989D\u589E\u51CF",required:"",prop:"action"},{default:a(()=>[o(h,{modelValue:r(u).action,"onUpdate:modelValue":l[0]||(l[0]=p=>r(u).action=p)},{default:a(()=>[o(_,{label:1},{default:a(()=>[n("\u589E\u52A0\u4F59\u989D")]),_:1}),o(_,{label:2},{default:a(()=>[n("\u6263\u51CF\u4F59\u989D")]),_:1})]),_:1},8,["modelValue"])]),_:1}),o(t,{label:"\u8C03\u6574\u4F59\u989D",prop:"num"},{default:a(()=>[o(F,{"model-value":r(u).num,placeholder:"\u8BF7\u8F93\u5165\u8C03\u6574\u7684\u91D1\u989D",type:"number",onInput:v},null,8,["model-value"])]),_:1}),o(t,{label:"\u8C03\u6574\u540E\u4F59\u989D"},{default:a(()=>[n(" \xA5 "+E(r(f)),1)]),_:1}),o(t,{label:"\u5907\u6CE8",prop:"remark"},{default:a(()=>[o(F,{modelValue:r(u).remark,"onUpdate:modelValue":l[1]||(l[1]=p=>r(u).remark=p),type:"textarea",rows:4},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])])]),_:1},512)}}});export{T as _};

View File

@ -0,0 +1 @@
import"./add-nav.vue_vue_type_script_setup_true_lang.4fd23862.js";import{_ as Z}from"./add-nav.vue_vue_type_script_setup_true_lang.4fd23862.js";import"./element-plus.4328d892.js";import"./@vue.51d7f2d8.js";import"./@vueuse.ec90c285.js";import"./@element-plus.a074d1f6.js";import"./lodash-es.29c53eac.js";import"./dayjs.e873ead7.js";import"./@amap.8a62addd.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.11ed41fb.js";import"./index.5a6ac86e.js";import"./lodash.08438971.js";import"./axios.105476b3.js";import"./vue-router.9f65afb1.js";import"./pinia.56356cb7.js";import"./vue-demi.b3a9cad9.js";import"./css-color-function.7ac6f233.js";import"./color.44a05936.js";import"./clone.0afcbf90.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.86067895.js";import"./ms.a9ae1d6d.js";import"./nprogress.f73355d0.js";import"./vue-clipboard3.dca5bca3.js";import"./clipboard.16e4491b.js";import"./echarts.ac57a99a.js";import"./zrender.d54ce080.js";import"./tslib.60310f1a.js";import"./highlight.js.dba6fa1b.js";import"./@highlightjs.40d5feba.js";import"./picker.995d7639.js";import"./index.df3950ef.js";import"./index.vue_vue_type_style_index_0_scoped_95d1884e_lang.0fc4c9f8.js";import"./picker.3a1ba420.js";import"./index.45141e8f.js";import"./index.vue_vue_type_script_setup_true_lang.f93228b5.js";import"./index.4f535bb7.js";import"./index.vue_vue_type_script_setup_true_lang.dc835bba.js";import"./usePaging.2ad8e1e6.js";import"./vue3-video-play.b911321b.js";import"./vuedraggable.0cb40d3a.js";import"./vue.5de34049.js";import"./sortablejs.ef73fc5c.js";export{Z as default};

View File

@ -0,0 +1 @@
import"./add-nav.vue_vue_type_script_setup_true_lang.0e1c4206.js";import{_ as Z}from"./add-nav.vue_vue_type_script_setup_true_lang.0e1c4206.js";import"./element-plus.b64c0a90.js";import"./@vue.51d7f2d8.js";import"./@vueuse.ec90c285.js";import"./@element-plus.a074d1f6.js";import"./lodash-es.29c53eac.js";import"./dayjs.e873ead7.js";import"./@amap.8a62addd.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.d26f69dc.js";import"./index.f190d0dd.js";import"./lodash.08438971.js";import"./axios.105476b3.js";import"./vue-router.9f65afb1.js";import"./pinia.56356cb7.js";import"./vue-demi.b3a9cad9.js";import"./css-color-function.7ac6f233.js";import"./color.44a05936.js";import"./clone.0afcbf90.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.86067895.js";import"./ms.a9ae1d6d.js";import"./nprogress.f73355d0.js";import"./vue-clipboard3.dca5bca3.js";import"./clipboard.16e4491b.js";import"./echarts.ac57a99a.js";import"./zrender.d54ce080.js";import"./tslib.60310f1a.js";import"./highlight.js.dba6fa1b.js";import"./@highlightjs.40d5feba.js";import"./picker.6663b709.js";import"./index.9561c5d9.js";import"./index.vue_vue_type_style_index_0_scoped_95d1884e_lang.0fc4c9f8.js";import"./picker.0b7aa777.js";import"./index.74494060.js";import"./index.vue_vue_type_script_setup_true_lang.a080b28e.js";import"./index.bec6119f.js";import"./index.vue_vue_type_script_setup_true_lang.c4fa43c7.js";import"./usePaging.2ad8e1e6.js";import"./vue3-video-play.b911321b.js";import"./vuedraggable.0cb40d3a.js";import"./vue.5de34049.js";import"./sortablejs.ef73fc5c.js";export{Z as default};

View File

@ -0,0 +1 @@
import"./add-nav.vue_vue_type_script_setup_true_lang.53d58090.js";import{_ as Z}from"./add-nav.vue_vue_type_script_setup_true_lang.53d58090.js";import"./element-plus.b64c0a90.js";import"./@vue.51d7f2d8.js";import"./@vueuse.ec90c285.js";import"./@element-plus.a074d1f6.js";import"./lodash-es.29c53eac.js";import"./dayjs.e873ead7.js";import"./@amap.8a62addd.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.faac87da.js";import"./index.760285cd.js";import"./lodash.08438971.js";import"./axios.105476b3.js";import"./vue-router.9f65afb1.js";import"./pinia.56356cb7.js";import"./vue-demi.b3a9cad9.js";import"./css-color-function.7ac6f233.js";import"./color.44a05936.js";import"./clone.0afcbf90.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.86067895.js";import"./ms.a9ae1d6d.js";import"./nprogress.f73355d0.js";import"./vue-clipboard3.dca5bca3.js";import"./clipboard.16e4491b.js";import"./echarts.ac57a99a.js";import"./zrender.d54ce080.js";import"./tslib.60310f1a.js";import"./highlight.js.dba6fa1b.js";import"./@highlightjs.40d5feba.js";import"./picker.a03ef28f.js";import"./index.8bb6f5eb.js";import"./index.vue_vue_type_style_index_0_scoped_95d1884e_lang.0fc4c9f8.js";import"./picker.3283c3e3.js";import"./index.f53f11d9.js";import"./index.vue_vue_type_script_setup_true_lang.a080b28e.js";import"./index.b06f93da.js";import"./index.vue_vue_type_script_setup_true_lang.c4fa43c7.js";import"./usePaging.2ad8e1e6.js";import"./vue3-video-play.b911321b.js";import"./vuedraggable.0cb40d3a.js";import"./vue.5de34049.js";import"./sortablejs.ef73fc5c.js";export{Z as default};

View File

@ -0,0 +1 @@
import"./add-nav.vue_vue_type_script_setup_true_lang.ba506477.js";import{_ as Z}from"./add-nav.vue_vue_type_script_setup_true_lang.ba506477.js";import"./element-plus.4328d892.js";import"./@vue.51d7f2d8.js";import"./@vueuse.ec90c285.js";import"./@element-plus.a074d1f6.js";import"./lodash-es.29c53eac.js";import"./dayjs.e873ead7.js";import"./@amap.8a62addd.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.7debd8b2.js";import"./index.4ff2d535.js";import"./lodash.08438971.js";import"./axios.105476b3.js";import"./vue-router.9f65afb1.js";import"./pinia.56356cb7.js";import"./vue-demi.b3a9cad9.js";import"./css-color-function.7ac6f233.js";import"./color.44a05936.js";import"./clone.0afcbf90.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.86067895.js";import"./ms.a9ae1d6d.js";import"./nprogress.f73355d0.js";import"./vue-clipboard3.dca5bca3.js";import"./clipboard.16e4491b.js";import"./echarts.ac57a99a.js";import"./zrender.d54ce080.js";import"./tslib.60310f1a.js";import"./highlight.js.dba6fa1b.js";import"./@highlightjs.40d5feba.js";import"./picker.fdd8465d.js";import"./index.1c9aaf4d.js";import"./index.vue_vue_type_style_index_0_scoped_95d1884e_lang.0fc4c9f8.js";import"./picker.7728648c.js";import"./index.d647cb3f.js";import"./index.vue_vue_type_script_setup_true_lang.f93228b5.js";import"./index.fd921f20.js";import"./index.vue_vue_type_script_setup_true_lang.dc835bba.js";import"./usePaging.2ad8e1e6.js";import"./vue3-video-play.b911321b.js";import"./vuedraggable.0cb40d3a.js";import"./vue.5de34049.js";import"./sortablejs.ef73fc5c.js";export{Z as default};

View File

@ -0,0 +1 @@
import{B,w as D}from"./element-plus.b64c0a90.js";import{_ as F}from"./index.d26f69dc.js";import{_ as A}from"./picker.6663b709.js";import{_ as y}from"./picker.0b7aa777.js";import{f as p,b as E}from"./index.f190d0dd.js";import{D as U}from"./vuedraggable.0cb40d3a.js";import{d as C,e as w,o as c,c as N,a as e,U as t,L as m,K as $,u as r,k as z,R as L}from"./@vue.51d7f2d8.js";const R={class:"bg-fill-light flex items-center w-full p-4 mb-4 cursor-move"},I={class:"upload-btn w-[60px] h-[60px]"},K={class:"ml-3 flex-1"},P={class:"flex"},T=e("span",{class:"text-tx-regular flex-none mr-3"},"\u540D\u79F0",-1),j={class:"flex mt-[18px]"},q=e("span",{class:"text-tx-regular flex-none mr-3"},"\u94FE\u63A5",-1),W=C({__name:"add-nav",props:{modelValue:{type:Array,default:()=>[]},max:{type:Number,default:10},min:{type:Number,default:1}},emits:["update:modelValue"],setup(_,{emit:i}){const o=_,s=w({get(){return o.modelValue},set(a){i("update:modelValue",a)}}),f=()=>{var a;((a=o.modelValue)==null?void 0:a.length)<o.max?s.value.push({image:"",name:"\u5BFC\u822A\u540D\u79F0",link:{}}):p.msgError(`\u6700\u591A\u6DFB\u52A0${o.max}\u4E2A`)},V=a=>{var u;if(((u=o.modelValue)==null?void 0:u.length)<=o.min)return p.msgError(`\u6700\u5C11\u4FDD\u7559${o.min}\u4E2A`);s.value.splice(a,1)};return(a,u)=>{const x=E,g=y,h=B,v=A,k=F,b=D;return c(),N("div",null,[e("div",null,[t(r(U),{class:"draggable",modelValue:r(s),"onUpdate:modelValue":u[0]||(u[0]=l=>z(s)?s.value=l:null),animation:"300"},{item:m(({element:l,index:d})=>[(c(),$(k,{class:"max-w-[400px]",key:d,onClose:n=>V(d)},{default:m(()=>[e("div",R,[t(g,{modelValue:l.image,"onUpdate:modelValue":n=>l.image=n,"upload-class":"bg-body",size:"60px","exclude-domain":""},{upload:m(()=>[e("div",I,[t(x,{name:"el-icon-Plus",size:20})])]),_:2},1032,["modelValue","onUpdate:modelValue"]),e("div",K,[e("div",P,[T,t(h,{modelValue:l.name,"onUpdate:modelValue":n=>l.name=n,placeholder:"\u8BF7\u8F93\u5165\u540D\u79F0"},null,8,["modelValue","onUpdate:modelValue"])]),e("div",j,[q,t(v,{modelValue:l.link,"onUpdate:modelValue":n=>l.link=n},null,8,["modelValue","onUpdate:modelValue"])])])])]),_:2},1032,["onClose"]))]),_:1},8,["modelValue"])]),e("div",null,[t(b,{type:"primary",onClick:f},{default:m(()=>[L("\u6DFB\u52A0")]),_:1})])])}}});export{W as _};

View File

@ -0,0 +1 @@
import{B,w as D}from"./element-plus.4328d892.js";import{_ as F}from"./index.11ed41fb.js";import{_ as A}from"./picker.995d7639.js";import{_ as y}from"./picker.3a1ba420.js";import{f as p,b as E}from"./index.5a6ac86e.js";import{D as U}from"./vuedraggable.0cb40d3a.js";import{d as C,e as w,o as c,c as N,a as e,U as t,L as m,K as $,u as r,k as z,R as L}from"./@vue.51d7f2d8.js";const R={class:"bg-fill-light flex items-center w-full p-4 mb-4 cursor-move"},I={class:"upload-btn w-[60px] h-[60px]"},K={class:"ml-3 flex-1"},P={class:"flex"},T=e("span",{class:"text-tx-regular flex-none mr-3"},"\u540D\u79F0",-1),j={class:"flex mt-[18px]"},q=e("span",{class:"text-tx-regular flex-none mr-3"},"\u94FE\u63A5",-1),W=C({__name:"add-nav",props:{modelValue:{type:Array,default:()=>[]},max:{type:Number,default:10},min:{type:Number,default:1}},emits:["update:modelValue"],setup(_,{emit:i}){const o=_,s=w({get(){return o.modelValue},set(a){i("update:modelValue",a)}}),f=()=>{var a;((a=o.modelValue)==null?void 0:a.length)<o.max?s.value.push({image:"",name:"\u5BFC\u822A\u540D\u79F0",link:{}}):p.msgError(`\u6700\u591A\u6DFB\u52A0${o.max}\u4E2A`)},V=a=>{var u;if(((u=o.modelValue)==null?void 0:u.length)<=o.min)return p.msgError(`\u6700\u5C11\u4FDD\u7559${o.min}\u4E2A`);s.value.splice(a,1)};return(a,u)=>{const x=E,g=y,h=B,v=A,k=F,b=D;return c(),N("div",null,[e("div",null,[t(r(U),{class:"draggable",modelValue:r(s),"onUpdate:modelValue":u[0]||(u[0]=l=>z(s)?s.value=l:null),animation:"300"},{item:m(({element:l,index:d})=>[(c(),$(k,{class:"max-w-[400px]",key:d,onClose:n=>V(d)},{default:m(()=>[e("div",R,[t(g,{modelValue:l.image,"onUpdate:modelValue":n=>l.image=n,"upload-class":"bg-body",size:"60px","exclude-domain":""},{upload:m(()=>[e("div",I,[t(x,{name:"el-icon-Plus",size:20})])]),_:2},1032,["modelValue","onUpdate:modelValue"]),e("div",K,[e("div",P,[T,t(h,{modelValue:l.name,"onUpdate:modelValue":n=>l.name=n,placeholder:"\u8BF7\u8F93\u5165\u540D\u79F0"},null,8,["modelValue","onUpdate:modelValue"])]),e("div",j,[q,t(v,{modelValue:l.link,"onUpdate:modelValue":n=>l.link=n},null,8,["modelValue","onUpdate:modelValue"])])])])]),_:2},1032,["onClose"]))]),_:1},8,["modelValue"])]),e("div",null,[t(b,{type:"primary",onClick:f},{default:m(()=>[L("\u6DFB\u52A0")]),_:1})])])}}});export{W as _};

View File

@ -0,0 +1 @@
import{B,w as D}from"./element-plus.b64c0a90.js";import{_ as F}from"./index.faac87da.js";import{_ as A}from"./picker.a03ef28f.js";import{_ as y}from"./picker.3283c3e3.js";import{f as p,b as E}from"./index.760285cd.js";import{D as U}from"./vuedraggable.0cb40d3a.js";import{d as C,e as w,o as c,c as N,a as e,U as t,L as m,K as $,u as r,k as z,R as L}from"./@vue.51d7f2d8.js";const R={class:"bg-fill-light flex items-center w-full p-4 mb-4 cursor-move"},I={class:"upload-btn w-[60px] h-[60px]"},K={class:"ml-3 flex-1"},P={class:"flex"},T=e("span",{class:"text-tx-regular flex-none mr-3"},"\u540D\u79F0",-1),j={class:"flex mt-[18px]"},q=e("span",{class:"text-tx-regular flex-none mr-3"},"\u94FE\u63A5",-1),W=C({__name:"add-nav",props:{modelValue:{type:Array,default:()=>[]},max:{type:Number,default:10},min:{type:Number,default:1}},emits:["update:modelValue"],setup(_,{emit:i}){const o=_,s=w({get(){return o.modelValue},set(a){i("update:modelValue",a)}}),f=()=>{var a;((a=o.modelValue)==null?void 0:a.length)<o.max?s.value.push({image:"",name:"\u5BFC\u822A\u540D\u79F0",link:{}}):p.msgError(`\u6700\u591A\u6DFB\u52A0${o.max}\u4E2A`)},V=a=>{var u;if(((u=o.modelValue)==null?void 0:u.length)<=o.min)return p.msgError(`\u6700\u5C11\u4FDD\u7559${o.min}\u4E2A`);s.value.splice(a,1)};return(a,u)=>{const x=E,g=y,h=B,v=A,k=F,b=D;return c(),N("div",null,[e("div",null,[t(r(U),{class:"draggable",modelValue:r(s),"onUpdate:modelValue":u[0]||(u[0]=l=>z(s)?s.value=l:null),animation:"300"},{item:m(({element:l,index:d})=>[(c(),$(k,{class:"max-w-[400px]",key:d,onClose:n=>V(d)},{default:m(()=>[e("div",R,[t(g,{modelValue:l.image,"onUpdate:modelValue":n=>l.image=n,"upload-class":"bg-body",size:"60px","exclude-domain":""},{upload:m(()=>[e("div",I,[t(x,{name:"el-icon-Plus",size:20})])]),_:2},1032,["modelValue","onUpdate:modelValue"]),e("div",K,[e("div",P,[T,t(h,{modelValue:l.name,"onUpdate:modelValue":n=>l.name=n,placeholder:"\u8BF7\u8F93\u5165\u540D\u79F0"},null,8,["modelValue","onUpdate:modelValue"])]),e("div",j,[q,t(v,{modelValue:l.link,"onUpdate:modelValue":n=>l.link=n},null,8,["modelValue","onUpdate:modelValue"])])])])]),_:2},1032,["onClose"]))]),_:1},8,["modelValue"])]),e("div",null,[t(b,{type:"primary",onClick:f},{default:m(()=>[L("\u6DFB\u52A0")]),_:1})])])}}});export{W as _};

View File

@ -0,0 +1 @@
import{B,w as D}from"./element-plus.4328d892.js";import{_ as F}from"./index.7debd8b2.js";import{_ as A}from"./picker.fdd8465d.js";import{_ as y}from"./picker.7728648c.js";import{f as p,b as E}from"./index.4ff2d535.js";import{D as U}from"./vuedraggable.0cb40d3a.js";import{d as C,e as w,o as c,c as N,a as e,U as t,L as m,K as $,u as r,k as z,R as L}from"./@vue.51d7f2d8.js";const R={class:"bg-fill-light flex items-center w-full p-4 mb-4 cursor-move"},I={class:"upload-btn w-[60px] h-[60px]"},K={class:"ml-3 flex-1"},P={class:"flex"},T=e("span",{class:"text-tx-regular flex-none mr-3"},"\u540D\u79F0",-1),j={class:"flex mt-[18px]"},q=e("span",{class:"text-tx-regular flex-none mr-3"},"\u94FE\u63A5",-1),W=C({__name:"add-nav",props:{modelValue:{type:Array,default:()=>[]},max:{type:Number,default:10},min:{type:Number,default:1}},emits:["update:modelValue"],setup(_,{emit:i}){const o=_,s=w({get(){return o.modelValue},set(a){i("update:modelValue",a)}}),f=()=>{var a;((a=o.modelValue)==null?void 0:a.length)<o.max?s.value.push({image:"",name:"\u5BFC\u822A\u540D\u79F0",link:{}}):p.msgError(`\u6700\u591A\u6DFB\u52A0${o.max}\u4E2A`)},V=a=>{var u;if(((u=o.modelValue)==null?void 0:u.length)<=o.min)return p.msgError(`\u6700\u5C11\u4FDD\u7559${o.min}\u4E2A`);s.value.splice(a,1)};return(a,u)=>{const x=E,g=y,h=B,v=A,k=F,b=D;return c(),N("div",null,[e("div",null,[t(r(U),{class:"draggable",modelValue:r(s),"onUpdate:modelValue":u[0]||(u[0]=l=>z(s)?s.value=l:null),animation:"300"},{item:m(({element:l,index:d})=>[(c(),$(k,{class:"max-w-[400px]",key:d,onClose:n=>V(d)},{default:m(()=>[e("div",R,[t(g,{modelValue:l.image,"onUpdate:modelValue":n=>l.image=n,"upload-class":"bg-body",size:"60px","exclude-domain":""},{upload:m(()=>[e("div",I,[t(x,{name:"el-icon-Plus",size:20})])]),_:2},1032,["modelValue","onUpdate:modelValue"]),e("div",K,[e("div",P,[T,t(h,{modelValue:l.name,"onUpdate:modelValue":n=>l.name=n,placeholder:"\u8BF7\u8F93\u5165\u540D\u79F0"},null,8,["modelValue","onUpdate:modelValue"])]),e("div",j,[q,t(v,{modelValue:l.link,"onUpdate:modelValue":n=>l.link=n},null,8,["modelValue","onUpdate:modelValue"])])])])]),_:2},1032,["onClose"]))]),_:1},8,["modelValue"])]),e("div",null,[t(b,{type:"primary",onClick:f},{default:m(()=>[L("\u6DFB\u52A0")]),_:1})])])}}});export{W as _};

View File

@ -0,0 +1 @@
import{r as n}from"./index.760285cd.js";function e(t){return n.get({url:"/auth.admin/lists",params:t},{ignoreCancelToken:!0})}function r(t){return n.post({url:"/auth.admin/add",params:t})}function u(t){return n.post({url:"/auth.admin/edit",params:t})}function i(t){return n.post({url:"/auth.admin/delete",params:t})}function s(t){return n.get({url:"/auth.admin/detail",params:t})}function d(t){return n.get({url:"/auth.admin/Draftingcontracts",params:t})}function o(t){return n.get({url:"/auth.admin/postsms",params:t})}export{e as a,u as b,r as c,s as d,i as e,d as g,o as s};

View File

@ -0,0 +1 @@
import{r as n}from"./index.f190d0dd.js";function e(t){return n.get({url:"/auth.admin/lists",params:t},{ignoreCancelToken:!0})}function r(t){return n.post({url:"/auth.admin/add",params:t})}function u(t){return n.post({url:"/auth.admin/edit",params:t})}function i(t){return n.post({url:"/auth.admin/delete",params:t})}function s(t){return n.get({url:"/auth.admin/detail",params:t})}function d(t){return n.get({url:"/auth.admin/Draftingcontracts",params:t})}function o(t){return n.get({url:"/auth.admin/postsms",params:t})}export{e as a,u as b,r as c,s as d,i as e,d as g,o as s};

View File

@ -0,0 +1 @@
import{r as n}from"./index.5a6ac86e.js";function e(t){return n.get({url:"/auth.admin/lists",params:t},{ignoreCancelToken:!0})}function r(t){return n.post({url:"/auth.admin/add",params:t})}function u(t){return n.post({url:"/auth.admin/edit",params:t})}function i(t){return n.post({url:"/auth.admin/delete",params:t})}function s(t){return n.get({url:"/auth.admin/detail",params:t})}function d(t){return n.get({url:"/auth.admin/Draftingcontracts",params:t})}function o(t){return n.get({url:"/auth.admin/postsms",params:t})}export{e as a,u as b,r as c,s as d,i as e,d as g,o as s};

View File

@ -0,0 +1 @@
import{r as n}from"./index.4ff2d535.js";function e(t){return n.get({url:"/auth.admin/lists",params:t},{ignoreCancelToken:!0})}function r(t){return n.post({url:"/auth.admin/add",params:t})}function u(t){return n.post({url:"/auth.admin/edit",params:t})}function i(t){return n.post({url:"/auth.admin/delete",params:t})}function s(t){return n.get({url:"/auth.admin/detail",params:t})}function d(t){return n.get({url:"/auth.admin/Draftingcontracts",params:t})}function o(t){return n.get({url:"/auth.admin/postsms",params:t})}export{e as a,u as b,r as c,s as d,i as e,d as g,o as s};

View File

@ -0,0 +1 @@
import{r as e}from"./index.f190d0dd.js";function a(t){return e.get({url:"/article.articleCate/lists",params:t})}function l(t){return e.get({url:"/article.articleCate/all",params:t})}function i(t){return e.post({url:"/article.articleCate/add",params:t})}function c(t){return e.post({url:"/article.articleCate/edit",params:t})}function u(t){return e.post({url:"/article.articleCate/delete",params:t})}function n(t){return e.get({url:"/article.articleCate/detail",params:t})}function s(t){return e.post({url:"/article.articleCate/updateStatus",params:t})}function o(t){return e.get({url:"/article.article/lists",params:t})}function d(t){return e.post({url:"/article.article/add",params:t})}function f(t){return e.post({url:"/article.article/edit",params:t})}function C(t){return e.post({url:"/article.article/delete",params:t})}function p(t){return e.get({url:"/article.article/detail",params:t})}function g(t){return e.post({url:"/article.article/updateStatus",params:t})}export{c as a,i as b,n as c,u as d,s as e,a as f,p as g,l as h,f as i,d as j,g as k,C as l,o as m};

View File

@ -0,0 +1 @@
import{r as e}from"./index.5a6ac86e.js";function a(t){return e.get({url:"/article.articleCate/lists",params:t})}function l(t){return e.get({url:"/article.articleCate/all",params:t})}function i(t){return e.post({url:"/article.articleCate/add",params:t})}function c(t){return e.post({url:"/article.articleCate/edit",params:t})}function u(t){return e.post({url:"/article.articleCate/delete",params:t})}function n(t){return e.get({url:"/article.articleCate/detail",params:t})}function s(t){return e.post({url:"/article.articleCate/updateStatus",params:t})}function o(t){return e.get({url:"/article.article/lists",params:t})}function d(t){return e.post({url:"/article.article/add",params:t})}function f(t){return e.post({url:"/article.article/edit",params:t})}function C(t){return e.post({url:"/article.article/delete",params:t})}function p(t){return e.get({url:"/article.article/detail",params:t})}function g(t){return e.post({url:"/article.article/updateStatus",params:t})}export{c as a,i as b,n as c,u as d,s as e,a as f,p as g,l as h,f as i,d as j,g as k,C as l,o as m};

Some files were not shown because too many files have changed in this diff Show More