From 53fbe28ec680a9e21c5d97be52cb990f442a26ab Mon Sep 17 00:00:00 2001 From: "1213317725@qq.com" <1213317725@qq.com> Date: Thu, 5 Jun 2025 14:54:23 +0800 Subject: [PATCH] 1 --- admin/src/app/api/customer_resources.ts | 12 ++ .../customer_resource_changes.vue | 8 +- .../components/UserProfile.vue | 69 +++++--- .../customer_resources/components/log.vue | 122 ++++++++++++++ .../components/order_table.vue | 118 +++++++++++++ .../components/student_courses.vue | 131 +++++++++++++++ .../customer_resources/CustomerResources.php | 29 ++++ .../app/adminapi/route/customer_resources.php | 5 + niucloud/app/common.php | 19 +++ .../customer_resources/CustomerResources.php | 1 + .../CustomerResourcesService.php | 156 ++++++++++++++++++ 11 files changed, 650 insertions(+), 20 deletions(-) create mode 100644 admin/src/app/views/customer_resources/components/log.vue create mode 100644 admin/src/app/views/customer_resources/components/order_table.vue create mode 100644 admin/src/app/views/customer_resources/components/student_courses.vue diff --git a/admin/src/app/api/customer_resources.ts b/admin/src/app/api/customer_resources.ts index e43e8779..1dae55ba 100644 --- a/admin/src/app/api/customer_resources.ts +++ b/admin/src/app/api/customer_resources.ts @@ -76,3 +76,15 @@ export function fpEdit(params: Record) { export function getWithCoachList(params: Record) { return request.get('customer_resources/coach_person', { params }) } + +export function getLogList(params: Record) { + return request.get('customer_resources/log_list', { params }) +} + +export function getStudentCoursesList(params: Record) { + return request.get('customer_resources/student_courses', { params }) +} + +export function getOrderTableList(params: Record) { + return request.get('customer_resources/order_table', { params }) +} diff --git a/admin/src/app/views/customer_resource_changes/customer_resource_changes.vue b/admin/src/app/views/customer_resource_changes/customer_resource_changes.vue index 2db80a27..8a2c8a4f 100644 --- a/admin/src/app/views/customer_resource_changes/customer_resource_changes.vue +++ b/admin/src/app/views/customer_resource_changes/customer_resource_changes.vue @@ -76,6 +76,12 @@ import { useRoute } from 'vue-router' const route = useRoute() const pageName = route.meta.title +const props = defineProps({ + value: Number +}) + +console.log(props.value); + let customerResourceChangesTable = reactive({ page: 1, limit: 10, @@ -83,7 +89,7 @@ let customerResourceChangesTable = reactive({ loading: true, data: [], searchParam: { - customer_resource_id: route.query.id, + customer_resource_id: props.value ? props.value : route.query.id, }, }) diff --git a/admin/src/app/views/customer_resources/components/UserProfile.vue b/admin/src/app/views/customer_resources/components/UserProfile.vue index 666f903a..a7449c72 100644 --- a/admin/src/app/views/customer_resources/components/UserProfile.vue +++ b/admin/src/app/views/customer_resources/components/UserProfile.vue @@ -10,11 +10,14 @@
- +
-

{{ user.name }}

-

ID: {{ user.id }}

-

电话: {{ user.phone }}

+

{{ user.nickname }}

+
+

ID: U{{ user.member_id }}

+

电话: {{ user.mobile }}

+

住址: {{ user.address }}

+
@@ -25,25 +28,28 @@ -

六要素信息

- 需求购买力:{{ info.purchasePower }} - 认知理念:{{ info.knowledge }} - 距离:{{ info.distance }} + 需求购买力:{{ info.purchasePower }} + 认知理念:{{ info.knowledge }} + - 可谈上课时间:{{ info.canTalkDate }} - 承诺到访时间:{{ info.promisedVisitDate }} - 实际到访时间:{{ info.actualVisitDate }} + 距离:{{ info.distance }} + 可谈上课时间:{{ info.canTalkDate }} + - 电话后的意向程度:{{ info.phoneIntention }} - 是否关单: + 承诺到访时间:{{ info.promisedVisitDate }} + 实际到访时间:{{ info.actualVisitDate }} + + + 电话后的意向程度:{{ info.phoneIntention }} + 是否关单: {{ info.isClosed ? '是' : '否' }} @@ -61,22 +67,41 @@
+ + + + + + + + + + + + + + + + diff --git a/admin/src/app/views/customer_resources/components/order_table.vue b/admin/src/app/views/customer_resources/components/order_table.vue new file mode 100644 index 00000000..19d9b656 --- /dev/null +++ b/admin/src/app/views/customer_resources/components/order_table.vue @@ -0,0 +1,118 @@ + + + + + diff --git a/admin/src/app/views/customer_resources/components/student_courses.vue b/admin/src/app/views/customer_resources/components/student_courses.vue new file mode 100644 index 00000000..6c52cda9 --- /dev/null +++ b/admin/src/app/views/customer_resources/components/student_courses.vue @@ -0,0 +1,131 @@ + + + + + diff --git a/niucloud/app/adminapi/controller/customer_resources/CustomerResources.php b/niucloud/app/adminapi/controller/customer_resources/CustomerResources.php index e67500de..f84b1ebe 100644 --- a/niucloud/app/adminapi/controller/customer_resources/CustomerResources.php +++ b/niucloud/app/adminapi/controller/customer_resources/CustomerResources.php @@ -41,6 +41,8 @@ class CustomerResources extends BaseAdminController return success((new CustomerResourcesService())->getPage($data)); } + + /** * 客户资源详情 * @param int $id @@ -196,4 +198,31 @@ class CustomerResources extends BaseAdminController { return success((new CustomerResourcesService())->getResourceByCourse($schedule)); } + + + public function log_list() + { + $data = $this->request->params([ + ["customer_resource_id", ""] + ]); + return success((new CustomerResourcesService())->log_list($data)); + } + + public function student_courses() + { + $data = $this->request->params([ + ["customer_resource_id", ""] + ]); + return success((new CustomerResourcesService())->student_courses($data)); + } + + public function order_table() + { + $data = $this->request->params([ + ["customer_resource_id", ""] + ]); + return success((new CustomerResourcesService())->order_table($data)); + } + + } diff --git a/niucloud/app/adminapi/route/customer_resources.php b/niucloud/app/adminapi/route/customer_resources.php index 2be1d5cc..ecdfe098 100644 --- a/niucloud/app/adminapi/route/customer_resources.php +++ b/niucloud/app/adminapi/route/customer_resources.php @@ -47,6 +47,11 @@ Route::group('customer_resources', function () { Route::get('getResourceByCourse/:schedule/students', 'customer_resources.CustomerResources/getResourceByCourse'); + Route::get('log_list','customer_resources.CustomerResources/log_list'); + + Route::get('student_courses','customer_resources.CustomerResources/student_courses'); + + Route::get('order_table','customer_resources.CustomerResources/order_table'); })->middleware([ AdminCheckToken::class, AdminCheckRole::class, diff --git a/niucloud/app/common.php b/niucloud/app/common.php index f1d57b3b..b043c134 100644 --- a/niucloud/app/common.php +++ b/niucloud/app/common.php @@ -1214,3 +1214,22 @@ function calculateChildHealthScore($age, $gender, $height, $weight) { // 四舍五入取整 return round($total_score); } + + +function get_dict_value($key,$value){ + $dict = new \app\model\dict\Dict(); + $field = 'id,name,key,dictionary,memo,create_time,update_time'; + + $info = $dict->field($field)->where([['key', '=', $key]])->findOrEmpty()->toArray(); + if($info['dictionary'] == null) + { + $info['dictionary'] = []; + } + + $map = []; + foreach ($info['dictionary'] as $item) { + $map[$item['value']] = $item['name']; + } + + return $map[$value]; +} diff --git a/niucloud/app/model/customer_resources/CustomerResources.php b/niucloud/app/model/customer_resources/CustomerResources.php index 218f156d..ce0415e3 100644 --- a/niucloud/app/model/customer_resources/CustomerResources.php +++ b/niucloud/app/model/customer_resources/CustomerResources.php @@ -89,6 +89,7 @@ class CustomerResources extends BaseModel 'updated_at' => '更新时间', 'deleted_at' => '逻辑删除时间', 'status' => '客户状态', + 'member_label' => '资源标签' ]; public function orderTable() diff --git a/niucloud/app/service/admin/customer_resources/CustomerResourcesService.php b/niucloud/app/service/admin/customer_resources/CustomerResourcesService.php index f8569fc2..fa0625cf 100644 --- a/niucloud/app/service/admin/customer_resources/CustomerResourcesService.php +++ b/niucloud/app/service/admin/customer_resources/CustomerResourcesService.php @@ -15,6 +15,8 @@ use app\model\campus_person_role\CampusPersonRole; use app\model\course_schedule\CourseSchedule; use app\model\customer_resource_changes\CustomerResourceChanges; use app\model\customer_resources\CustomerResources; +use app\model\member\Member; +use app\model\member\MemberLabel; use app\model\order_table\OrderTable; use app\model\personnel\Personnel; use app\model\campus\Campus; @@ -22,6 +24,7 @@ use app\model\campus\Campus; use app\model\resource_sharing\ResourceSharing; use app\model\six_speed\SixSpeed; use app\model\six_speed_modification_log\SixSpeedModificationLog; +use app\model\student_courses\StudentCourses; use app\service\admin\member\MemberLabelService; use core\base\BaseAdminService; @@ -99,9 +102,17 @@ class CustomerResourcesService extends BaseAdminService $sixSpeed = new SixSpeed(); $data = $sixSpeed->where(['resource_id' => $item['id']])->findOrEmpty()->toArray(); $item['six'] = $data; + + $member = new Member(); + + $member_info = $member->where(['member_id' => $item['member_id']])->findOrEmpty()->toArray(); + $item['member_info'] = $member_info; }); } + + + /** * 获取客户资源信息 * @param int $id @@ -419,4 +430,149 @@ class CustomerResourcesService extends BaseAdminService return $all; } + + + + public function log_list(array $data = []) + { + $customer_resource_changes = new CustomerResourceChanges(); + $where = []; + if ($data['customer_resource_id']) { + $where[] = ['a.customer_resource_id', '=', $data['customer_resource_id']]; + } + + + + $search_model = $customer_resource_changes + ->alias("a") + ->join(['school_personnel' => 'b'], 'a.operator_id = b.id', 'left') + ->where($where) + ->field("a.*,b.name") + ->order("a.id asc"); + + + return $this->pageQuery($search_model, function ($item, $key) { + $fieldZhArr = CustomerResources::FieldZh; + $modified_fields = json_decode($item['modified_fields'], true); + $type = []; + foreach ($modified_fields as $key => $value) { + $type[] = $fieldZhArr[$value]; + } + $item['type'] = implode("
",$type); + + $old_values = json_decode($item['old_values'], true); + $new_values = json_decode($item['new_values'], true); + $values = []; + foreach ($old_values as $key => $value) { + + $old_value = $this->fields($key,$value); + $new_value = $this->fields($key,$new_values[$key]); + + $values[] = $old_value.'->'.$new_value; + } + + $item['values'] = implode("
",$values); + + + }); + } + + public function student_courses(array $data = []) + { + $studentCourses = new StudentCourses(); + $where = []; + if ($data['customer_resource_id']) { + $where[] = ['b.user_id', '=', $data['customer_resource_id']]; + } + + + + $search_model = $studentCourses + ->alias("a") + ->join(['school_student' => 'b'], 'a.student_id = b.id', 'left') + ->join(['school_course' => 'c'], 'a.course_id = c.id', 'left') + ->where($where) + ->field("a.*,c.course_name") + ->order("a.id desc"); + + + return $this->pageQuery($search_model, function ($item, $key) { + $item['total'] = $item['total_hours'] + $item['gift_hours']; + $item['used'] = $item['use_total_hours'] + $item['use_gift_hours']; + + $now = date('Y-m-d'); // 当前日期 + + if ($now < $item['start_date']) { + $item['status'] = '未进行'; + } elseif ($now > $item['end_date']) { + $item['status'] = '已结束'; + } else { + $item['status'] = '进行中'; + } + + }); + } + + + public function order_table(array $data = []) + { + $orderTable = new OrderTable(); + $where = []; + if ($data['customer_resource_id']) { + $where[] = ['a.resource_id', '=', $data['customer_resource_id']]; + } + + $search_model = $orderTable + ->alias("a") + ->join(['school_course' => 'b'], 'a.course_id = b.id', 'left') + ->where($where) + ->field("a.*,b.course_name") + ->order("a.id desc"); + + + return $this->pageQuery($search_model, function ($item, $key) { + $arr = ['cash' => '现金支付','scan_code' => '扫码支付','subscription' => '订阅支付']; + $item['type'] = $arr[$item['payment_type']]; + $item['order_status'] = $item['order_status'] == 'pending' ? '待支付' : '已支付'; + }); + } + + + public function fields($filed,$value){ + if(!$value){ + return '空'; + } + $campus = new Campus(); + $member_label = new MemberLabel(); + switch ($filed) { + case 'initial_intent': + return get_dict_value('preliminarycustomerintention',$value); + break; + case 'source': + return get_dict_value('source',$value); + break; + case 'purchasing_power': + return get_dict_value('customer_purchasing_power',$value); + break; + case 'cognitive_idea': + return get_dict_value('cognitive_concept',$value); + break; + case 'source_channel': + return get_dict_value('SourceChannel',$value); + break; + case 'status': + return get_dict_value('kh_status',$value); + break; + case 'member_label': + $label_name = $member_label->where('label_id','in',$value)->column('label_name'); + return implode("-",$label_name); + break; + case 'campus': + return $campus->where(['id' => $value])->value("campus_name"); + break; + default: + return $value; + } + } + }