于宏哲PHP 9 months ago
parent
commit
eb358d49f0
  1. 8
      admin/src/app/views/contract/components/contract-edit.vue
  2. 2
      admin/src/app/views/customer_resources/customer_resources.vue
  3. 2
      niucloud/app/adminapi/controller/contract/Contract.php
  4. 10
      niucloud/app/api/controller/member/Member.php
  5. 2
      niucloud/app/api/route/file.php
  6. 6
      niucloud/app/api/route/member.php
  7. 21
      niucloud/app/listener/personnel/Student.php
  8. 4
      niucloud/app/service/admin/contract/ContractService.php
  9. 2
      niucloud/app/service/admin/course/CourseService.php
  10. 2
      niucloud/app/service/admin/customer_resources/CustomerResourcesService.php
  11. 33
      niucloud/app/service/api/member/MemberService.php
  12. 57
      niucloud/app/service/core/contract_sign/ContractSign.php
  13. 3
      niucloud/composer.json

8
admin/src/app/views/contract/components/contract-edit.vue

@ -9,6 +9,10 @@
<upload-file v-model="formData.contract_template" /> <upload-file v-model="formData.contract_template" />
</el-form-item> </el-form-item>
<el-form-item label="模板占位符" >
<el-input v-model="formData.placeholder" clearable placeholder="请输入模板占位符" class="input-width" />
</el-form-item>
<el-form-item :label="t('contractStatus')" prop="contract_status"> <el-form-item :label="t('contractStatus')" prop="contract_status">
<el-select class="input-width" v-model="formData.contract_status" clearable :placeholder="t('contractStatusPlaceholder')"> <el-select class="input-width" v-model="formData.contract_status" clearable :placeholder="t('contractStatusPlaceholder')">
<el-option label="请选择" value=""></el-option> <el-option label="请选择" value=""></el-option>
@ -37,6 +41,9 @@
<el-input v-model="formData.remarks" clearable :placeholder="t('remarksPlaceholder')" class="input-width" /> <el-input v-model="formData.remarks" clearable :placeholder="t('remarksPlaceholder')" class="input-width" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
@ -70,6 +77,7 @@ const initialFormData = {
contract_status: '', contract_status: '',
contract_type: '', contract_type: '',
remarks: '', remarks: '',
placeholder:''
} }
const formData: Record<string, any> = reactive({ ...initialFormData }) const formData: Record<string, any> = reactive({ ...initialFormData })

2
admin/src/app/views/customer_resources/customer_resources.vue

@ -265,7 +265,7 @@
if (pageName == '业绩分配') { if (pageName == '业绩分配') {
customerResourcesTable.searchParam.type = 'yjfp'; customerResourcesTable.searchParam.type = 'yjfp';
} else if (pageName == '客户资源列表') { } else if (pageName == '客户资源') {
customerResourcesTable.searchParam.type = 'khzy'; customerResourcesTable.searchParam.type = 'khzy';
} else if (pageName == '资源列表') { } else if (pageName == '资源列表') {
customerResourcesTable.searchParam.type = 'zylb'; customerResourcesTable.searchParam.type = 'zylb';

2
niucloud/app/adminapi/controller/contract/Contract.php

@ -55,6 +55,7 @@ class Contract extends BaseAdminController
["contract_status",""], ["contract_status",""],
["contract_type",""], ["contract_type",""],
["remarks",""], ["remarks",""],
["placeholder",""]
]); ]);
$this->validate($data, 'app\validate\contract\Contract.add'); $this->validate($data, 'app\validate\contract\Contract.add');
@ -74,6 +75,7 @@ class Contract extends BaseAdminController
["contract_status",""], ["contract_status",""],
["contract_type",""], ["contract_type",""],
["remarks",""], ["remarks",""],
["placeholder",""]
]); ]);
$this->validate($data, 'app\validate\contract\Contract.edit'); $this->validate($data, 'app\validate\contract\Contract.edit');

10
niucloud/app/api/controller/member/Member.php

@ -194,4 +194,14 @@ class Member extends BaseApiController
} }
public function contract_sign(){
$data = $this->request->params([
[ 'contract_sign_id', '' ],
['pic_file','']
]);
return success(( new MemberService() )->contract_sign($data));
}
} }

2
niucloud/app/api/route/file.php

@ -29,7 +29,7 @@ Route::group('file', function() {
Route::post('image/fetch', 'upload.Upload/imageFetch'); Route::post('image/fetch', 'upload.Upload/imageFetch');
})->middleware(ApiChannel::class) })->middleware(ApiChannel::class)
->middleware(ApiCheckToken::class, true) // ->middleware(ApiCheckToken::class, true)
->middleware(ApiLog::class); ->middleware(ApiLog::class);
/** /**

6
niucloud/app/api/route/member.php

@ -120,7 +120,7 @@ Route::group('member', function () {
Route::get('student_list', 'member.Member/student_list'); Route::get('student_list', 'member.Member/student_list');
Route::get('sktj', 'member.Member/sktj'); Route::get('sktj', 'member.Member/sktj');
Route::post('contract_sign', 'member.Member/contract_sign');
})->middleware(ApiChannel::class) })->middleware(ApiChannel::class)
->middleware(ApiPersonnelCheckToken::class, true) ->middleware(ApiPersonnelCheckToken::class, true)
@ -129,6 +129,8 @@ Route::group('member', function () {
Route::group('member', function () { Route::group('member', function () {
/***************************************************** 会员管理 ****************************************************/ /***************************************************** 会员管理 ****************************************************/
//会员日志 //会员日志
Route::post('log', 'member.Member/log'); Route::post('log', 'member.Member/log');
@ -139,5 +141,5 @@ Route::group('member', function () {
/***************************************************** 会员等级 **************************************************/ /***************************************************** 会员等级 **************************************************/
Route::get('level', 'member.Level/lists'); Route::get('level', 'member.Level/lists');
})->middleware(ApiChannel::class) })->middleware(ApiChannel::class)
->middleware(ApiCheckToken::class) // ->middleware(ApiCheckToken::class)
->middleware(ApiLog::class); ->middleware(ApiLog::class);

21
niucloud/app/listener/personnel/Student.php

@ -14,6 +14,8 @@ namespace app\listener\personnel;
use app\model\class_resources_rel\ClassResourcesRel; use app\model\class_resources_rel\ClassResourcesRel;
use app\model\contract\Contract;
use app\model\contract_sign\ContractSign;
use app\model\course\Course; use app\model\course\Course;
use app\model\course_schedule\CourseSchedule; use app\model\course_schedule\CourseSchedule;
use app\model\customer_resources\CustomerResources; use app\model\customer_resources\CustomerResources;
@ -115,9 +117,22 @@ class Student
]); ]);
} }
$contract = new Contract();
$contract_info = $contract
->alias("a")
->join(['school_course' => 'b'],'a.id = b.contract_id','left')
->where(['b.id' => $order_info['course_id']])
->field("a.id,a.contract_template")
->find();
$contract_sign = new ContractSign();
$contract_sign->insert([
'contract_id' => $contract_info['id'],
'personnel_id' => $order_info['resource_id'],
'sign_file' => $contract_info['contract_template'],
'type' => 2
]);
} }

4
niucloud/app/service/admin/contract/ContractService.php

@ -37,7 +37,7 @@ class ContractService extends BaseAdminService
*/ */
public function getPage(array $where = []) public function getPage(array $where = [])
{ {
$field = 'id,contract_name,contract_template,contract_status,contract_type,remarks,created_at,updated_at,deleted_at'; $field = 'id,contract_name,placeholder,contract_template,contract_status,contract_type,remarks,created_at,updated_at,deleted_at';
$order = 'id desc'; $order = 'id desc';
$search_model = $this->model->withSearch(["contract_status","contract_type","created_at"], $where)->field($field)->order($order); $search_model = $this->model->withSearch(["contract_status","contract_type","created_at"], $where)->field($field)->order($order);
@ -52,7 +52,7 @@ class ContractService extends BaseAdminService
*/ */
public function getInfo(int $id) public function getInfo(int $id)
{ {
$field = 'id,contract_name,contract_template,contract_status,contract_type,remarks,created_at,updated_at,deleted_at'; $field = 'id,contract_name,placeholder,contract_template,contract_status,contract_type,remarks,created_at,updated_at,deleted_at';
$info = $this->model->field($field)->where([['id', "=", $id]])->findOrEmpty()->toArray(); $info = $this->model->field($field)->where([['id', "=", $id]])->findOrEmpty()->toArray();
return $info; return $info;

2
niucloud/app/service/admin/course/CourseService.php

@ -47,7 +47,7 @@ class CourseService extends BaseAdminService
public function contract_all(){ public function contract_all(){
$contract = new Contract(); $contract = new Contract();
$list = $contract->select()->toArray(); $list = $contract->where(['contract_type' => '外部','contract_status' => '可用'])->select()->toArray();
return $list; return $list;
} }

2
niucloud/app/service/admin/customer_resources/CustomerResourcesService.php

@ -156,7 +156,7 @@ class CustomerResourcesService extends BaseAdminService
$resourceSharing = new ResourceSharing(); $resourceSharing = new ResourceSharing();
$personnel = new Personnel(); $personnel = new Personnel();
$data['consultant'] = $personnel->where(['sys_user_id' => $this->uid])->value("id"); $data['consultant'] = $personnel->where(['sys_user_id' => $this->uid])->value("id");
// $data['consultant'] = 3;
if (!$data['consultant']) { if (!$data['consultant']) {
return fail("超级管理员不允许添加资源"); return fail("超级管理员不允许添加资源");
} }

33
niucloud/app/service/api/member/MemberService.php

@ -16,6 +16,7 @@ use app\model\attendance\Attendance;
use app\model\campus\Campus; use app\model\campus\Campus;
use app\model\class_resources_rel\ClassResourcesRel; use app\model\class_resources_rel\ClassResourcesRel;
use app\model\communication_records\CommunicationRecords; use app\model\communication_records\CommunicationRecords;
use app\model\contract_sign\ContractSign;
use app\model\course_schedule\CourseSchedule; use app\model\course_schedule\CourseSchedule;
use app\model\member\Member; use app\model\member\Member;
use app\model\person_course_schedule\PersonCourseSchedule; use app\model\person_course_schedule\PersonCourseSchedule;
@ -446,4 +447,36 @@ class MemberService extends BaseApiService
return $results; return $results;
} }
public function contract_sign(array $data){
$contract_sign = new ContractSign();
$signService = (new \app\service\core\contract_sign\ContractSign());
$info = $contract_sign
->alias("a")
->join(['school_contract' => 'b'],'a.contract_id = b.id',"left")
->where(['a.id' => $data['contract_sign_id']])
->field("a.*,b.placeholder")
->find();
$file_name = 'upload/'.date("YmdHis").time().'.docx';
$outputPath = root_path() . '/public/'.$file_name;
$signService->setSign(
root_path().'/public/'.$info['sign_file'],
$outputPath,
$data['pic_file'],
$info['placeholder']
);
$contract_sign->where(['id' => $data['contract_sign_id']])->update([
'sign_file' => $file_name,
'status' => 2,
'sign_time' => date('Y-m-d H:i:s')
]);
return true;
}
} }

57
niucloud/app/service/core/contract_sign/ContractSign.php

@ -0,0 +1,57 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\service\core\contract_sign;
use PhpOffice\PhpWord\TemplateProcessor;
use core\base\BaseCoreService;
/**
* 素材管理服务层
* Class CoreAttachmentService
* @package app\service\core\sys
*/
class ContractSign extends BaseCoreService
{
public function setSign($templatePath,$outputPath,$signImagePath,$placeholder)
{
// $templatePath = root_path() . 'public/upload/attachment/document/document/202507/03/1751535235ccad2afa1b71ee025dc8087942058957_local.docx';
// $outputPath = root_path() . 'public/uploads/result_signed.docx';
// $signImagePath = root_path() . 'public/uploads/student_sign.png';
$tempImagePath = root_path() . '/public/upload/'.date("YmdHis").time() .'.jpg';
$imageContent = file_get_contents($signImagePath);
if ($imageContent === false) {
exit('图片下载失败');
}
file_put_contents($tempImagePath, $imageContent);
if (!file_exists($templatePath)) {
exit('模板文件不存在');
}
$templateProcessor = new TemplateProcessor($templatePath);
$templateProcessor->setImageValue($placeholder, [
'path' => $tempImagePath,
'width' => 120,
'height' => 50,
'ratio' => false,
]);
$templateProcessor->saveAs($outputPath);
return true;
}
}

3
niucloud/composer.json

@ -59,7 +59,8 @@
"workerman/crontab": "v1.0.6", "workerman/crontab": "v1.0.6",
"hyperf/pimple": "~2.2.0", "hyperf/pimple": "~2.2.0",
"365taofang/huaweicloud-sdk-php-obs": "^3.23", "365taofang/huaweicloud-sdk-php-obs": "^3.23",
"ext-openssl": "*" "ext-openssl": "*",
"phpoffice/phpword": "^1.3"
}, },
"require-dev": { "require-dev": {
"symfony/var-dumper": "v6.0.19", "symfony/var-dumper": "v6.0.19",

Loading…
Cancel
Save