PHP婚恋小程序开发源码支持微信+公众号+APP

随着社会的发展和人们生活节奏的加快,传统的相亲方式已经不能满足现代人的需求。在此背景下,有人想到通过线上小程序的方式来满足更多的人进行相亲,所以在此情况下,婚恋相亲小程序由此出现。婚恋相亲小程序的功能有会员功能,红娘管理,后台系统,支付系统,动态管理,通知管理,私人定制管理等等。

在这么多的功能中,今天选择红娘管理给大家做下详细介绍:

联系TA记录:查看A联系B的记录,需要显示联系人方的ID与手机号,联系人发送的被联系人方的ID与手机号,点击按钮的时间,负责的星座红娘。可以按照红娘或时间段筛选

我的联系方式记录:查看联系的红娘,联系人ID,手机号,发送的手机号与微信号

牵线记录:查看A牵线B的记录,需要显示牵线人的ID与手机号,被牵线人的ID与手机号,点击牵线的时间,负责的星座红娘,可以按照红娘或时间段筛选

会员管理:会员管理所有功能

婚恋相亲小程序开发部分源码分享:

<?php

namespace app\api\controller;

use addons\epay\library\Service;
use app\common\controller\Api;
use app\common\model\Activity;
use app\common\model\AppConfig;
use app\common\model\AppUser;
use app\common\model\ChatRoom;
use app\common\model\FlyerOrder;
use app\common\model\Icon;
use app\common\model\Notice;
use app\common\model\OrderActivity;
use app\common\model\SayCommonRule;
use app\common\model\SayLog;
use app\common\model\SayOrder;
use app\common\model\SayPackage;
use app\common\model\User;
use app\common\model\UserWall as UserWallModel;
use app\common\model\VipExperience;
use app\common\model\VipOrder;
use app\common\model\VipPackage;
use im\Ffs;
use im\Im;
use subscribeMsg\SubscribeMsg;
use think\cache\driver\Redis;
use think\Db;
use think\Env;
use think\Exception;
use think\Log;

/**
 * 首页接口
 */
class Index extends Api
{
    protected $noNeedLogin = ['getUserToken','index','activity','vipNotify','activityNotify','sayNotify','updateLngLat','user_wallNotify','getSayConfig','delmsg','getAgr'];
    protected $noNeedRight = ['*'];

    /**
     * 首页
     *
     */
    public function index()
    {
        $scene = $this->request->param('scene');
        $scene = $scene?$scene : 2; // 1 首页   2 推荐
        $user = $this->auth->getUserinfo();
        $gender = $this->request->param('gender',1);


        $is_eject = 0;
        if ($user){
            $is_eject = VipExperience::retNotEject($user['id']);
        }

        $list = AppUser::getPushUser($user,$gender,$scene);


        $icon = Icon::where('type',1)->field('icon_img,title,href')->select();

        // 个人中心背景
        $center_bg = AppConfig::getValue('center_bg') ;
        $center_bg = fileUrl($center_bg);

        // 如果是首页 需要追加推荐墙数据
        if ($scene == 1){
            $uw_where['order_status'] = 1;
            $city = $this->request->param('city');
            if ($user){
                $uw_where['gender'] = ['<>',$user['gender']];
            }
            $uw_where['live_city'] = $city;
            $date = date('Y-m-d 00:00:00');
            $uw_user_id = UserWallModel::where($uw_where)->where('start_time','=',$date)->limit(9)->column('user_id');

            $uw_list = AppUser::whereIn('id',$uw_user_id)->field('id,nickname,live_address,avatar,birthday,height,photos,job,education,is_completion_data,gender,constellation')->select();
            foreach ($uw_list as $v){
                $list[] = $v;
            }
        }
        $this->success('请求成功',compact('list','icon','is_eject','center_bg'));
    }

    /**
     * 每周活动
     * @throws \think\exception\DbException
     */
    public function activity()
    {
        $data = Activity::get(['status'=>1]);
        $this->success('请求成功',$data);
    }

    /**
     * 参加活动
     * @throws \think\exception\DbException
     */
    public function joinActivity()
    {
        $user_info = $this->auth->getUserinfo();
        $activity_id = input('activity_id');
        $activity = Activity::find($activity_id);

        // 判断是否参加了活动
        $is_join = OrderActivity::where(['user_id'=>$user_info['id'],'activity_id'=>$activity_id,'status'=>1])->count();
        if ($is_join) $this->error('已报名该场活动');

        $gender_key = $user_info['gender'] ? 'male_num' : 'female_num';
        $join_key = $user_info['gender'] ? 'male_join_num' : 'female_join_num';
        if($activity[$join_key] >= $activity[$gender_key]) $this->error('活动人数已达上限');
        $order_num = date("YmdHis") . mt_rand(100000, 999999);
        $param['price'] = $activity['price'];
        $param['user_id'] = $user_info['id'];
        $param['order_num'] = $order_num;
        $param['activity_id'] = $activity_id;
        $model = new OrderActivity();
        $model->data($param);
        $re = $model->save();
        if(!$re) $this->error('操作失败');
        $pay_params = [
            'amount' => $activity['price'],
//            'amount' => 0.01,
            'orderid' => $param['order_num'],
            'type' => "wechat",
            'title' => "已遇蓝桉",
            'notifyurl' => Env::get('app.url').'/api/index/activityNotify',
            'method' => "miniapp",
            'openid' => $user_info['openid'],
        ];
        $response = Service::submitOrder($pay_params);
        $this->success('获取成功',['pay_param' => $response,'order_number' => $order_num]);
    }

    /**
     * 参加活动结果
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function activityResult()
    {
        $order_number = input('order_number');
        $order = OrderActivity::field('id,check_num,check_qr_code,status')->where('order_num',$order_number)->find();
        if (!$order) $this->error('订单不存在');
        if ($order['status'] != 1) $this->error('订单未支付');
        $order['check_qr_code'] = fileUrl($order['check_qr_code']);
        $this->success('获取成功',$order);
    }

    /**
     * 购买会员回调
     *
     */
    public function vipNotify()
    {
        $pay = Service::checkNotify('wechat');
        if (!$pay) {
            Log::error('签名错误');
//            $filename = 'miniprogram_pay_notify_info_'.date('Y-m-d');
//            file_put_contents($filename, $pay.PHP_EOL, FILE_APPEND);
        }
        $data = $pay->verify();
        try {
            $pay_amount = $data['total_fee'] / 100;
            $out_trade_no = $data['out_trade_no'];
            $order = VipOrder::where('order_number',$out_trade_no)->find();
            if (!$order) {
                throw new \Exception('订单不存在');
            }
//            if ($order['price'] != $pay_amount) {
//                throw new \Exception('订单异常');
//            }
            $package = VipPackage::get($order['package_id']);
            if (!$package) {
                throw new \Exception('套餐不存在');
            }

            //如果用户已有会员,有效期就在原有时间上增加
            $user = AppUser::get($order['user_id']);
            $now_expire = $user['vip_expire_time'] && $user['is_vip'] == 1 ? strtotime($user['vip_expire_time']) : time();
            $time_limit = $package['time_limit'];
            $expire = date("Y-m-d H:i:s");

            switch ($package['unit']) {
                case 0:
                    $expire = date("Y-m-d H:i:s",strtotime("+".$time_limit." day",$now_expire));
                    break;
                case 1:
                    $expire = date("Y-m-d H:i:s",strtotime("+".$time_limit." month",$now_expire));
                    break;
                case 2:
                    $expire = date("Y-m-d H:i:s",strtotime("+".$time_limit." year",$now_expire));
                    break;
            }


            $user->is_vip = 1;
            $user->vip_expire_time = $expire;
            $user->save();

            $order->status = 1;
            $order->buy_time = date('Y-m-d H:i:s');
            $order->expire_time = $expire;
            $order->save();
            // 返佣
            FlyerOrder::returnCommission($order,1);

            return $pay->success()->send();
        } catch (\Exception $e) {
            Log::error($e);
        }
    }

    /**
     * 购买say豆回调
     */
    public function sayNotify()
    {
        $pay = Service::checkNotify('wechat');
        if (!$pay) {
            Log::error('签名错误');
        }
        $data = $pay->verify();
        try {
            $pay_amount = $data['total_fee'] / 100;
            $out_trade_no = $data['out_trade_no'];
            $order = SayOrder::where('order_number',$out_trade_no)->find();
            if (!$order) {
                throw new \Exception('订单不存在');
            }
//            if ($order['price'] != $pay_amount) {
//                throw new \Exception('订单异常');
//            }


            SayLog::saveLog($order['user_id'],$order['say_num'],9,'购买say豆');

            $order->status = 1;
            $order->buy_time = date('Y-m-d H:i:s');
            $order->save();

            // 返佣
            FlyerOrder::returnCommission($order,2);


            return $pay->success()->send();
        } catch (\Exception $e) {
            Log::error($e);
        }
    }

    /**
     * 参加活动回调
     */
    public function activityNotify()
    {
        $pay = Service::checkNotify('wechat');
        if (!$pay) {
            Log::error('签名错误');
        }
        $data = $pay->verify();
        try {
            $order = OrderActivity::get(['order_num'=>$data['out_trade_no']]);
//            $order = OrderActivity::get(1);
            //生成核销码,核销二维码
            $check_num = time() . mt_rand(100000, 999999);
            $qr = Common::build($check_num);
//            $qrcode = Common::serverUrl().'/uploads/qrcode/'.$qr;
            $qrcode = '/uploads/qrcode/'.$qr;

            $order->check_num = $check_num;
            $order->check_qr_code = $qrcode;
            $order->status = 1;
            $order->save();

            $user = AppUser::get($order['user_id']);
            //参加活动对应性别人数加1
            $key = $user['gender'] ? 'male_join_num' : 'female_join_num' ;
            Activity::where('id',$order['activity_id'])->setInc($key);

            // 发送订阅消息
            $usr_arr = AppUser::getFieldInfo($order['user_id']);
            $act_info = Activity::where('id',$order['activity_id'])->find();
            $sub_msg_data['name1'] =  $usr_arr['nickname'];
            $sub_msg_data['time4'] =  $act_info['start_time'];
            $sub_msg_data['thing7'] =  $act_info['title'];
            $sub_msg_data['thing3'] =  '恭喜您已成功预约,客服之后会与您联系';
            SubscribeMsg::activityMsg($usr_arr['openid'],$sub_msg_data);
            return $pay->success()->send();
        } catch (\Exception $e) {
            Log::error($e);
        }
    }

    /**
     * 推荐上墙回调
     */
    public function user_wallNotify()
    {
        $pay = Service::checkNotify('wechat');
        if (!$pay) {
            Log::error('签名错误');
        }
        $data = $pay->verify();
        try {
            $out_trade_no = $data['out_trade_no'];

            $order = \app\common\model\UserWall::where('order_number',$out_trade_no)->find();
            if (!$order) {
                throw new \Exception('订单不存在');
            }
            // 获取顺延时间
            $date_arr = \app\common\model\UserWall::getPostponedDate($order);

            $order->order_status = 1;
            $order->buy_time = date('Y-m-d H:i:s');
            $order->postponed_count = $date_arr['postponed_count'];
            $order->start_time = $date_arr['start_time'];
            $order->end_time = $date_arr['end_time'];
            $order->save();
            $msg_time = date('Y年m月d日',strtotime($date_arr['start_time']));
            // 发送消息
            // 创建聊天室
            $room_info = ChatRoom::where(['user_id'=>0,'to_user_id'=>$order['user_id']])->find();
            if (!$room_info){
                $room = new ChatRoom();
                $room->type = 1;
                $room->user_id = 0;
                $room->to_user_id = $order['user_id'];
                $room->status = 2;
                $room->createtime = time();
                $room->last_time = time();
                $room->to_user_id_del = $order['user_id'];
                $room->to_user_del_time = null;
                $room->save();
            }else{
                $room_info->last_time = time();
                $room_info->to_user_id_del = $order['user_id'];
                $room_info->to_user_del_time = null;
                $room_info->save();
            }

            // 上线
            $redis = new Redis();
            $redis->sadd(online_key(),$order['user_id']);

            $msg = "恭喜您已完成预约!您的预约时间是{$msg_time}。在此时间将您的个人形象及信息将展示于我平台【推荐墙】。展示时间为24小时,再次感谢您的预约。";
//            $im = new Im();
//            $im->adminPushMsg($order['user_id'],$msg);

            return $pay->success()->send();
        } catch (\Exception $e) {
            Log::error($e);
        }
    }

    /**
     *  更新经纬度
     */
    public function updateLngLat()
    {
        $lng = $this->request->post('lng');
        $lat = $this->request->post('lat');
        $user = $this->auth->getUserinfo();
        if ($user && $lng && $lat){
            AppUser::where(['id'=>$user['id']])->update(['lng'=>$lng,'lat'=>$lat]);
        }
        $this->success('ok');
    }

    /**
     * 返回配置的say豆
     */
    public function getSayConfig()
    {
        $list = SayCommonRule::field('scene,beans')->select();
        $list = toArray($list);
        $app_config = AppConfig::where('key','in',['release_forum'])->field('value,name')->select();
        $app_config = toArray($app_config);
        foreach ($app_config as $k=>$v){
            $arr['scene'] = $v['name'];
            $arr['beans'] = $v['value'];
            $list[] = $arr;
        }
        $this->success('ok',$list);
    }

    /**
     * 协议
     */
    public function getAgr()
    {
        $data['yh_content'] = config('site.yh_content');
        $data['ys_content'] = config('site.ys_content');

        $this->success('ok',$data);
    }

    /**
     * 公告列表
     */
    public function getNotice()
    {
        $user = $this->auth->getUserinfo();
        $page = $this->request->param('page');
        $size = $this->request->param('size');
        $notice = Notice::order('id desc')
            ->page($page,$size)
            ->select();
        foreach ($notice as $k=>$v){
            // 是否阅读
            $notice[$k]['is_read'] = Notice::isRead($v['id'],$user['id']);

        }
        $data = compact('notice');
        $this->success('ok',$data);
    }

    /**
     * 清空所有用户的会话记录
     */
    public function delmsg()
    {

//        die;
//        $list = AppUser::order('id asc')->select();
//        foreach ($list as $k=>$v){
//            $v->birthday_int = $v['birthday'] ? strtotime($v['birthday']) : 0;
//            $v->save();
//        }
//
//        die;
        $where['is_completion_data']=1;
        $list = AppUser::order('id asc')->where($where)->column('id');
        $tokens = Db::name('user_token_test')->whereIn('user_id',$list)->select();
        $tokens = toArray($tokens);
        foreach ($tokens as $k=>$v){
            $tokens[$k]['nickname'] = AppUser::order('id asc')->where(['id'=>$v['user_id']])->value('nickname');
        }
        dd($tokens);
        /*for ($i=50;$i<57;$i++){
            for($j=50;$j<57;$j++){
                if ($i != $j){
                    $im = new Im();
                    $re = $im->setMsgRead($i.'x',$j.'x');
                    if ($re['ActionStatus'] != 'OK'){
                        d($i.'x-'.$j.'x');
                        d($re);
                    }
                    $im2 = new Im();
                    $re2 = $im2->setMsgRead($i,$j);
                    if ($re2['ActionStatus'] != 'OK'){
                        d($i.'-'.$j);
                        d($re);
                    }
                }
            }
        }*/
        dd();
        /*$where['id'] = ['in','50,1,6'];
        $where['is_completion_data']=1;
        $page = $this->request->param('page');
        $list = AppUser::order('id asc')->where($where)->limit(5)->page($page)->column('id');
        $list2 = AppUser::order('id asc')->where($where)->column('id');
        $count1 = count($list);
        $count2 = count($list2);
        for ($i=0;$i<$count1;$i++){
            for($j=0;$j<$count2;$j++){
                if ($list[$i] != $list2[$j]){
//                    d($list[$i].'x'.$list2[$j].'x');
                    $im = new Im();
                    $re = $im->setMsgRead($list[$i].'x',$list2[$j].'x');
                    $im = new Im();
                    $re = $im->setMsgRead($list[$i],$list2[$j]);
                }
            }
        }*/
        dd($list);
        $list = ChatRoom::where('id','>',0)->select();
        foreach ($list as $info){
//            $im = new Im();

            if ($info['type'] == 1){
//                $im->setMsgRead($info['user_id'],$info['to_user_id']);
//                $im->setMsgRead($info['to_user_id'],$info['user_id']);
                $im->deleteMsg($info['user_id'],$info['to_user_id']);
                $im->deleteMsg($info['to_user_id'],$info['user_id']);
            }else{
//                $im->setMsgRead($info['user_id'].'x',$info['to_user_id'].'x');
//                $im->setMsgRead($info['to_user_id'].'x',$info['user_id'].'x');
//                $im->deleteMsg($info['user_id'].'x',$info['to_user_id'].'x');
//                $im->deleteMsg($info['to_user_id'].'x',$info['user_id'].'x');
            }
//            $info->delete();
        }

        dd($list);
        $list = AppUser::where('id','>',0)->page(1)->limit(5)->select();
        foreach ($list as $user){
            $to_list = AppUser::all();
            foreach ($to_list as $to_user){
//                $im = new Im();
//                $im->deleteMsg($user['id'],$to_user['id']);
//                $im = new Im();
//                $im->deleteMsg($user['id'].'x',$to_user['id'].'x');
            }
        }
        dd($list);
    }


    /**
     * 测试
     */
    public function test()
    {
        $access_token_val = getAccessToken();
        $url = 'https://api.weixin.qq.com/wxa/generate_urllink?access_token='.$access_token_val;
        $param['path'] = 'pages/index/index';
        $param['query'] = 'id='.$this->auth->getUserinfo()['id'];
        $result = httpRequest( $url, json_encode($param),"POST");
        $arr = json_decode($result,true);
        dd($arr);
    }


    /**
     * 获取用户token
     */
    public function getUserToken()
    {
        $id = $this->request->param('id');

        $this->auth->direct($id);
        $token = $this->auth->getToken();
        dd($token);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/535722.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Postman接口测试工具

Postman接口测试工具 目录 Postman接口测试工具安装页面概述保存任务发送请求 安装 PostMan官方下载网址&#xff1a;https://www.getpostman.com/downloads/ 页面概述 保存任务 新建请求集合 命名为test 将刚刚的任务保存 选择新建的test集合 发送请求 新建窗口 request请…

解决源 “MySQL 8.0 Community Server“ 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。

源 “MySQL 8.0 Community Server” 的 GPG 密钥已安装&#xff0c;但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。 失败的软件包是&#xff1a;mysql-community-server-8.0.31-1.el7.x86_64 GPG 密钥配置为&#xff1a;file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql…

vue源码解析——v-if和v-for哪个优先级高,如何避免两者同时使用

首先&#xff0c;官方不推荐v-if和v-for在同一个元素上使用。其次&#xff0c;如果两者同时使用&#xff0c;v-if和v-for的优先级怎么确定&#xff1f;在vue2和vue3中这两者的优先级顺序不一样。vue2是v-for优先&#xff0c;条件不存在时也会渲染多个注释节点。在vue3中进行了改…

JVM 垃圾收集器

JVM 垃圾收集器 垃圾收集器 垃圾收集器 Serial (串行)&#xff1a;单线程垃圾回收器&#xff1b;采用复制算法 Serial Old&#xff1a;Serial 收集器的老年代版本&#xff0c;采用标记-整理算法。 ParNew&#xff1a;多线程的垃圾回收器&#xff08;Serial 的多线程版本&#x…

推荐一个大学生可以参加的榜单赛事|人工智能赛道

【榜单赛事】第十四届全国大学生计算机应用能力与数字素养大赛 - 人工智能产业应用赛道人工智能编程赛项 正在火热报名中 本赛道定位于人工智能产业应用和实践&#xff0c;把人工智能产业真实的技能要求、能力要求体现在竞赛内容设计当中&#xff0c;并在竞赛环节融入实战项目…

SQLite Android 绑定(十八)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite 在Android安装与定制方案&#xff08;十七&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 ​ 应用程序编程 加载共享库 在使用任何与 SQLite 相关的方法或对象之前&#xff0c;本机 SQLite 必…

H5:canvas刮刮乐

今日无事&#xff0c;写一个刮刮乐用于收割亲弟弟零花钱 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>Title</title><style>body {height: 100vh;background-color: #fff;}.textDiv {…

数学之光照亮AI之路:探究数学背景在人工智能学习中的优势

在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;已成为引领未来发展的重要力量。然而&#xff0c;对于许多初涉此领域的学习者来说&#xff0c;AI的复杂性和深度常常让他们望而却步。有趣的是&#xff0c;那些数学基础扎实的人在学习AI时&#xff0c;往往…

2024 Android Studio安装及配置gradle快速省心搭建,不放C盘,前置搭建

题外话&#xff1a;要做安卓项目然后安装过Android Studio的朋友都知道&#xff0c;下载安装完成之后并不能直接开始你的第一个安卓项目的“ Hello World”&#xff0c;其中有要配置好gradle&#xff0c;在你测试好环境之前你会遇到很多问题&#xff0c;同时默认下使用中所需依…

Redis从入门到精通(十二)Redis实战(九)GEO查询附近商户、BitMap用户签到和统计、HLL的UV统计

↑↑↑请在文章开头处下载测试项目源代码↑↑↑ 文章目录 前言4.10 附近商户4.10.1 GEO介绍4.10.2 附近商户需求分析4.10.3 实现新增商户功能4.10.4 实现查询附近商户功能 4.11 用户签到4.11.1 用户签到需求分析4.11.2 BitMap介绍4.11.3 实现用户签到4.11.4 实现用户签到统计4.…

备战蓝桥杯---数学刷题3

话不多说&#xff0c;直接看题&#xff1a; 1. 我们可以得到大致一个思路&#xff0c;就是先枚举1-1e6的质数&#xff0c;然后看看有几个即可。 我们怎么知道个数呢&#xff1f; 首先我们知道1---n中有n/p的下取整个为p的倍数。 因此&#xff0c;p的个数至少是n/p的下取整个…

损失函数-交叉熵 梯度下降

文章目录 1、交叉熵的简单例子1.2、Classification Error&#xff08;分类错误率&#xff09;1.3、Mean Squared Error (均方误差)1.4、交叉熵损失函数1.5、二分类 2、什么是梯度下降法&#xff1f;2.2、梯度下降法的运行过程2.3、二元函数的梯度下降 1、交叉熵的简单例子 参考…

多模态小记:CLIP、BLIP与BLIP2

CLIP 使用网络上爬取得到的大量图文对进行对比学习&#xff0c;图文匹配的是正样本&#xff0c;图文不匹配的是负样本&#xff0c;使匹配样本的embedding之间的距离尽可能小&#xff0c;不匹配样本间的距离尽可能大。 缺点&#xff1a;网上爬的数据质量差&#xff0c;不能进行…

SOCKS代理是如何提高网络性能和兼容性的?

SOCKS代理作为一种网络协议中间件&#xff0c;不仅在提升网络隐私和安全性方面发挥着重要作用&#xff0c;也在提高网络性能和兼容性方面有着不容忽视的影响&#x1f680;。本文将深入探讨SOCKS代理如何通过减少网络延迟&#x1f680;、优化数据传输&#x1f504;、提高跨平台兼…

十进制,二进制,八进制,十六进制之间转换

一. 十进制转二进制 二. 二进制转十进制 三. 十进制转八进制 四. 八进制转十进制 五. 十进制转十六进制

数字档案馆升级改造的意义

数字档案馆升级改造的意义在于提升档案管理的效率和质量&#xff0c;更好地满足各方面的需求&#xff0c;并为数字时代的档案管理提供更好的支持和保障。具体意义包括&#xff1a; 1. 提高档案存储、检索和利用效率&#xff1a;玖拓智能数字化档案馆可以实现电子存储和快速检索…

el-tree如何修改节点点击颜色

el-tree修改点击节点颜色三大步 使用elementui库时&#xff0c;有时候我们会对里面提供的组件做一些样式修改。如果我们想要修改el-tree组件点击节点时的颜色&#xff0c;可以使用下面这种方式实现&#xff1a;

最新国产中文版官网chatGPT镜像网站

分享5个国产中文版chatGPT镜像网站&#xff0c;希望可以帮助到您&#xff01; 1️⃣ HiClaude3基于国外原版GPT模型、Claude模型开发&#xff0c;是资源丰富的全能镜像&#xff0c;适合各行各业的工作者。不仅有gpt&#xff0c;而且还支持图片对话、文件对话&#xff0c;轻松解…

项目存放在git上,在jenkins使用docker打包并推送到Ubuntu上运行

项目添加dockerfile 在需要打包的工程的根目录添加Dockerfile文件&#xff0c;文件内容&#xff1a; # 设置JAVA版本 FROM openjdk:8 # 指定存储卷&#xff0c;任何向/tmp写入的信息都不会记录到容器存储层 VOLUME /tmp# 拷贝运行JAR包 ARG JAR_FILE COPY ${JAR_FILE} app.jar…

08 - 镜像管理之:镜像仓库harbor介绍

本文参考&#xff1a;原文1 1 Harbor仓库介绍 Docker容器应用的开发和运行离不开可靠的镜像管理&#xff0c;虽然Docker官方也提供了公共的镜像仓库&#xff0c;但是从安全和效率等方面考虑&#xff0c;部署我们私有环境内的Registry 也是非常必要的。 之前介绍了Docker私有仓…