Browse Source

Merge branch 'master' of http://gitlab.frkj.cc/php/zhjwxt

# Conflicts:
#	niucloud/app/api/route/route.php
master
于宏哲PHP 9 months ago
parent
commit
bf3e053c9f
  1. 36
      admin/src/app/views/communication_records/communication_records.vue
  2. 48
      admin/src/app/views/communication_records/components/communication-records-edit.vue
  3. 24
      admin/src/app/views/customer_resources/components/customer-resources-edit.vue
  4. 1
      niucloud/app/api/controller/apiController/CustomerResources.php
  5. 20
      niucloud/app/api/controller/member/Member.php
  6. 3
      niucloud/app/api/route/member.php
  7. 4
      niucloud/app/api/route/route.php
  8. 2
      niucloud/app/common.php
  9. 10
      niucloud/app/model/resource_sharing/ResourceSharing.php
  10. 2
      niucloud/app/service/api/apiService/CommonService.php
  11. 32
      niucloud/app/service/api/apiService/ResourceSharingService.php
  12. 5
      niucloud/app/service/api/login/LoginService.php
  13. 31
      niucloud/app/service/api/member/MemberService.php

36
admin/src/app/views/communication_records/communication_records.vue

@ -94,12 +94,12 @@
:show-overflow-tooltip="true"
/>
<el-table-column
prop="resource_type"
:label="t('resourceType')"
min-width="120"
:show-overflow-tooltip="true"
/>
<!-- <el-table-column-->
<!-- prop="resource_type"-->
<!-- :label="t('resourceType')"-->
<!-- min-width="120"-->
<!-- :show-overflow-tooltip="true"-->
<!-- />-->
<el-table-column
:label="t('communicationType')"
@ -145,18 +145,18 @@
:show-overflow-tooltip="true"
/>
<el-table-column
:label="t('tag')"
min-width="180"
align="center"
:show-overflow-tooltip="true"
>
<template #default="{ row }">
<div v-for="(item, index) in tagList">
<div v-if="item.value == row.tag">{{ item.name }}</div>
</div>
</template>
</el-table-column>
<!-- <el-table-column-->
<!-- :label="t('tag')"-->
<!-- min-width="180"-->
<!-- align="center"-->
<!-- :show-overflow-tooltip="true"-->
<!-- >-->
<!-- <template #default="{ row }">-->
<!-- <div v-for="(item, index) in tagList">-->
<!-- <div v-if="item.value == row.tag">{{ item.name }}</div>-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column
:label="t('operation')"

48
admin/src/app/views/communication_records/components/communication-records-edit.vue

@ -35,14 +35,14 @@
</el-select>
</el-form-item>
<el-form-item :label="t('resourceType')" prop="resource_type">
<el-input
v-model="formData.resource_type"
clearable
:placeholder="t('resourceTypePlaceholder')"
class="input-width"
/>
</el-form-item>
<!-- <el-form-item :label="t('resourceType')" prop="resource_type">-->
<!-- <el-input-->
<!-- v-model="formData.resource_type"-->
<!-- clearable-->
<!-- :placeholder="t('resourceTypePlaceholder')"-->
<!-- class="input-width"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item :label="t('communicationType')" prop="communication_type">
<el-select
@ -106,22 +106,22 @@
class="input-width"
/>
</el-form-item>
<el-form-item :label="t('tag')">
<el-select
class="input-width"
v-model="formData.tag"
clearable
:placeholder="t('tagPlaceholder')"
>
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in tagList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<!-- <el-form-item :label="t('tag')">-->
<!-- <el-select-->
<!-- class="input-width"-->
<!-- v-model="formData.tag"-->
<!-- clearable-->
<!-- :placeholder="t('tagPlaceholder')"-->
<!-- >-->
<!-- <el-option label="请选择" value=""></el-option>-->
<!-- <el-option-->
<!-- v-for="(item, index) in tagList"-->
<!-- :key="index"-->
<!-- :label="item.name"-->
<!-- :value="item.value"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
</el-form>
<template #footer>

24
admin/src/app/views/customer_resources/components/customer-resources-edit.vue

@ -158,19 +158,17 @@
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item :label="t('status')" prop="status">
<el-select class="input-width" v-model="formData.status" clearable
:placeholder="t('statusPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option v-for="(item, index) in statusList" :key="index" :label="item.name"
:value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<!-- <el-col :span="12">-->
<!-- <el-form-item :label="t('status')" prop="status">-->
<!-- <el-select class="input-width" v-model="formData.status" clearable-->
<!-- :placeholder="t('statusPlaceholder')">-->
<!-- <el-option label="请选择" value=""></el-option>-->
<!-- <el-option v-for="(item, index) in statusList" :key="index" :label="item.name"-->
<!-- :value="item.value" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<el-col :span="12" v-if="formData.id">
<el-form-item label="会员标签">
<el-select v-model="formData.member_label" multiple collapse-tags
placeholder="请选择会员标签" class="input-width">

1
niucloud/app/api/controller/apiController/CustomerResources.php

@ -149,6 +149,7 @@ class CustomerResources extends BaseApiService
//客户资源数据
$customer_resources_data = [
"campus" => $request->param('campus', ''),
"source_channel" => $request->param('source_channel', ''),//来源渠道
"source" => $request->param('source', ''),//来源
"name" => $request->param('name', ''),//姓名

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

@ -116,7 +116,25 @@ class Member extends BaseApiController
return success((new AuthService())->getMobile($data['mobile_code']));
}
public function get_campuses_list(){
public function get_campuses_list()
{
return success((new MemberService())->get_campuses_list());
}
public function list_call_up()
{
$data = $this->request->params([
['sales_id', ''],
]);
return success((new MemberService())->list_call_up($data['sales_id']));
}
public function update_call_up()
{
$data = $this->request->params([
['id', ''],
['remarks', ''],
]);
return success((new MemberService())->update_call_up($data['id'], $data['remarks']));
}
}

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

@ -105,9 +105,6 @@ Route::group('member', function () {
//获取签到设置
Route::get('sign/config', 'member.MemberSign/signConfig');
})->middleware(ApiChannel::class)
->middleware(ApiCheckToken::class, true)
->middleware(ApiLog::class);

4
niucloud/app/api/route/route.php

@ -340,6 +340,9 @@ Route::group(function () {
Route::get('course/scheduleList', 'apiController.course/schedule_list');
Route::get('per_list_call_up', 'member.Member/list_call_up');
Route::post('per_update_call_up', 'member.Member/update_call_up');
})->middleware(ApiChannel::class)
->middleware(ApiPersonnelCheckToken::class, true)
->middleware(ApiLog::class);
@ -417,6 +420,7 @@ Route::group(function () {
})->middleware(ApiChannel::class)
->middleware(ApiCheckToken::class, true)
->middleware(ApiLog::class);

2
niucloud/app/common.php

@ -1237,7 +1237,7 @@ function get_dict_value($key, $value)
$map[$item['value']] = $item['name'];
}
return $map[$value] ?? '未知';
return $map[$value] ?? '';
}

10
niucloud/app/model/resource_sharing/ResourceSharing.php

@ -12,6 +12,7 @@
namespace app\model\resource_sharing;
use app\model\customer_resources\CustomerResources;
use app\model\six_speed\SixSpeed;
use core\base\BaseModel;
use think\model\concern\SoftDelete;
use think\model\relation\HasMany;
@ -125,6 +126,11 @@ class ResourceSharing extends BaseModel
{
return $this->hasOne(CustomerResources::class, 'id', 'resource_id');
}
/**
* 关联six_speed表(一对一)
*/
public function sixSpeed(): HasOne
{
return $this->hasOne(SixSpeed::class, 'resource_id', 'resource_id');
}
}

2
niucloud/app/service/api/apiService/CommonService.php

@ -40,7 +40,7 @@ class CommonService extends BaseApiService
$res = $model->field($field)->find();//员工信息
if($res){
$res = $res->toArray();
$res = $res->toArray()['dictionary'];
}else{
$res = [];
}

32
niucloud/app/service/api/apiService/ResourceSharingService.php

@ -13,6 +13,7 @@ namespace app\service\api\apiService;
use app\model\campus\Campus;
use app\model\campus_person_role\CampusPersonRole;
use app\model\communication_records\CommunicationRecords;
use app\model\customer_resources\CustomerResources;
use app\model\order_table\OrderTable;
use app\model\resource_sharing\ResourceSharing;
@ -90,23 +91,36 @@ class ResourceSharingService extends BaseApiService
$model = $model->whereOr('shared_by', $where['shared_by']);
}
//分页查询
$res = $model->with([
'customerResource' => function ($query) {
$query->append(['initial_intent_name']);
}
])
->withJoin(['customerResource'])
$res = $model->with(['customerResource','sixSpeed'])
->withJoin(['customerResource','sixSpeed'])
->order('customerResource.updated_at', 'desc')
->paginate([
'list_rows' => $limit,
'page' => $page,
])->toArray();
// 获取列表中的campus_ids
$campus_ids = array_unique(array_column(array_column($res['data'],'customerResource'), 'campus'));
$campus = new Campus();
$campus_name = $campus->whereIn('id', $campus_ids)->column('campus_name', 'id');
// 获取客户资源沟通记录
$customer_resource_ids = array_unique(array_column($res['data'], 'resource_id'));
// 2. 构建子查询:获取每个 resource_id 的最大 communication_time
$subQuery = CommunicationRecords::field('resource_id, max(communication_time) as max_time')
->whereIn('resource_id', $customer_resource_ids) // 只查询指定的 resource_id
->group('resource_id')
->select()
->toArray();
$resultdata = [];
foreach ($subQuery as $item) {
$resultdata[$item['resource_id']] = $item['max_time'];
}
foreach ($res['data'] as &$item){
$item['customerResource']['source'] = get_dict_value('source',$item['customerResource']['source']);
$item['customerResource']['source_channel'] = get_dict_value('source',$item['customerResource']['source_channel']);
$item['customerResource']['campus_name'] = $campus->where(['id' =>$item['customerResource']['campus']])->value("campus_name");
$item['customerResource']['campus_name'] = $campus_name[$item['customerResource']['campus']] ?? '';
$item['customerResource']['communication_time'] = $resultdata[$item['resource_id']] ?? '';
}
return $res;

5
niucloud/app/service/api/login/LoginService.php

@ -177,6 +177,7 @@ class LoginService extends BaseApiService
try {
$token_info = TokenAuth::parseToken($token, AppTypeDict::API);
dd($token_info);
} catch (Throwable $e) {
// if(env('app_debug', false)){
// throw new AuthException($e->getMessage(), 401);
@ -206,11 +207,7 @@ class LoginService extends BaseApiService
try {
$token_info = TokenAuth::parseToken($token, AppTypeDict::PERSONNEL);
} catch (Throwable $e) {
// if(env('app_debug', false)){
// throw new AuthException($e->getMessage(), 401);
// }else{
throw new AuthException('LOGIN_EXPIRE', 401);
// }
}
if (!$token_info) {
throw new AuthException('MUST_LOGIN', 401);

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

@ -12,6 +12,7 @@
namespace app\service\api\member;
use app\model\campus\Campus;
use app\model\communication_records\CommunicationRecords;
use app\model\member\Member;
use app\service\core\member\CoreMemberService;
use core\base\BaseApiService;
@ -35,7 +36,8 @@ class MemberService extends BaseApiService
/**
* 新增会员
*/
public function add(array $data){
public function add(array $data)
{
return $this->model->create($data)?->member_id ?? 0;
}
@ -86,7 +88,8 @@ class MemberService extends BaseApiService
* @param array $data
* @return Member|array|mixed|Model !!! 仔细看,返回值是模型对象 如果想要判断是否为空 请用 $member->isEmpty()
*/
public function findMemberInfo(array $data){
public function findMemberInfo(array $data)
{
//会员账号
if (!empty($data['username']))
$where[] = ['username', '=', $data['username']];
@ -119,7 +122,8 @@ class MemberService extends BaseApiService
* @param $data
* @return void
*/
public function editByFind($member, $data){
public function editByFind($member, $data)
{
return $member->save($data);
}
@ -134,7 +138,8 @@ class MemberService extends BaseApiService
return (new CoreMemberService())->modify($this->member_id, $field, $data);
}
public function getQrcode(){
public function getQrcode()
{
// 生成会员二维码
$qrcode_dir = 'upload/member/temp';
if (!is_dir($qrcode_dir)) mkdir($qrcode_dir, intval('0755', 8), true);
@ -153,16 +158,30 @@ class MemberService extends BaseApiService
/**
* 初始化会员数据
*/
public function initMemberData(){
public function initMemberData()
{
if ($this->member_id) {
event("MemberLoginAfter", ['member_id' => $this->member_id]);
}
}
public function get_campuses_list(){
public function get_campuses_list()
{
$campus = new Campus();
$list = $campus->select()->toArray();
return $list;
}
public function list_call_up($resource_id)
{
$campus = new CommunicationRecords();
return $campus->where('resource_id', $resource_id)->select()->toArray();
}
public function update_call_up($resource_id, $remarks)
{
$campus = new CommunicationRecords();
return $campus->where('resource_id', $resource_id)->update(['remarks' => $remarks]);
}
}

Loading…
Cancel
Save