1、前言

在大家眼中,有没有感觉女神就像冰山美人一样?在聊天中对你是很高冷,或者是忽冷忽热,爱理不理。很多男生面对这个问题都大刀阔斧,或者女神不理你时,又急着发短音讯过来了,后果女神基本不理会你。那怎么办呢?

其实女神也一样,是情绪动物,她的情感由情绪管制着,不会像男人那样感性、讲逻辑。你压服不了她喜爱你,但通过调动她的情绪,你能够让她喜爱你。所以会一些调情风趣的恋爱话术尤为重要,如果你能做到,让女人高兴,开怀大笑,有时候又会悲伤,让她的情绪为你所动,那么她对于你投入的情感会是有很多的。

2、技术栈

  1. uniApp
  2. vue3
  3. 微信开发者工具
  4. Hbuilder X
  5. axios
  6. uView ui框架

3、uniApp简介

uni-app 是一个应用 Vue.js 开发所有前端利用的框架,开发者编写一套代码,可公布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快利用等多个平台。
uni-app在手,做啥都不愁。即便不跨端,uni-app也是更好的小程序开发框架(详见)、更好的App跨平台框架、更不便的H5开发框架。不论领导安顿什么样的我的项目,你都能够疾速交付,不须要转换开发思维、不须要更改开发习惯。

咱们这里次要将一套代码别离部署到h5和微信小程序上。

4、vue3简介

Vue (读音 /vju/,相似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为能够自底向上逐层利用。Vue.js 的外围是一个容许采纳简洁的模板语法来申明式地将数据渲染进 DOM 的零碎,只关注视图层,易于上手。所有货色都是响应式的。

4.1 vue3的劣势

  1. 响应式零碎晋升
  2. 虚构DOM重写
  3. 更快,性能比Vue2快1.2~2倍(diff办法优化、动态晋升、工夫侦听器缓存、ssr渲染)
  4. 更小,按需编译,体积比Vue2更小
  5. 组合API,增强API设计一致性,实现逻辑模块化和重用
  6. 增强TypeScript反对
  7. 裸露了自定义渲染API
  8. 进步本身可维护性

5、微信开发者工具简介

以下来自微信官网文档:

为了帮忙开发者简略和高效地开发和调试微信小程序,咱们在原有的公众号网页调试工具的根底上,推出了全新的 微信开发者工具,集成了公众号网页调试和小程序调试两种开发模式。
应用公众号网页调试,开发者能够调试微信网页受权和微信JS-SDK 详情
应用小程序调试,开发者能够实现小程序的 API 和页面的开发调试、代码查看和编辑、小程序预览和公布等性能。
为了更好的开发体验,咱们从视觉、交互、性能等方面对开发者工具进行降级,推出了 1.0 版本 下载。应用过程中若有问题或倡议,可返回 #微信开发者工具社区 发帖反馈交换。

6、Hbuilder X

HBuilderX,H是HTML的首字母,Builder是结构者,X是HBuilder的下一代版本。咱们也简称HX。 HX是轻如编辑器、强如IDE的合体版本。

让咱们简略理解下HX的特点

  1. 笨重 仅10余M的绿色发行包(不含插件)
  2. 极速 不论是启动速度、大文档关上速度、编码提醒,都极速响应 C++的架构性能远超Java或Electron架构
  3. vue开发强化 HX对vue做了大量优化投入,开发体验远超其余开发工具 详见
  4. 小程序反对 国外开发工具没有对中国的小程序开发优化,HX可新建uni-app 小程序等我的项目,为国人提供更高效工具
  5. markdown利器 HX是惟一一个新建文件默认类型是markdown的编辑器,也是对md反对最强的编辑器 HX为md强化了泛滥性能,请务必点击【菜单-帮忙-markdown语法示例】,疾速把握md及HX的强化技巧!
  6. 清新护眼 HX的界面比其余工具更清新简洁,绿柔主题通过迷信的脑疲劳测试,是最适宜人眼长期观看的主题界面
  7. 弱小的语法提醒 HX是中国惟一一家领有自主IDE语法分析引擎的公司,对前端语言提供精确的代码提醒和转到定义(Alt+鼠标左键)
  8. 高效极客工具 更弱小的多光标、智能双击...让字解决的效率大幅晋升 详见,
  9. 更强的json反对 古代js开发中大量json构造的写法,HX提供了比其余工具更高效的操作

7、axios

Axios 是一个基于 promise 的 HTTP 库,能够用在浏览器和 node.js 中。

个性

  1. 从浏览器中创立 XMLHttpRequests
  2. 从 node.js 创立 http 申请
  3. 反对 Promise API
  4. 拦挡申请和响应
  5. 转换申请数据和响应数据
  6. 勾销申请
  7. 主动转换 JSON 数据
  8. 客户端反对进攻 XSRF

8、uView ui框架

uView是uni-app生态专用的UI框架,uni-app 是一个应用 Vue.js 开发所有前端利用的框架,开发者编写一套代码, 可公布到iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉)等多个平台(引言自uni-app网)。

9、创立微信小程序我的项目

9.1 注册账号

在微信公众平台注册小程序,官网微信公众平台




按之前填的邮箱进去激活,而后欠缺相干信息


到此为止,咱们的小程序算是注册实现

9.2 查看小程序AppID(小程序ID),前面我的项目提交代码须要用到


10、创立uniapp我的项目

10.1 在Hbuilder X新建一个uniapp我的项目


10.2 配置vue3语法

10.3 配置微信小程序appId

appId获取参考9.2步骤

10.4 装置axios依赖

npm i axios

在控制台执行以上代码

11、引入uView ui框架

11.1 导入uView插件

插件官网uView

11.2 main.js 引入 vk-uview-ui

import App from './App'// #ifndef VUE3import Vue from 'vue'Vue.config.productionTip = falseApp.mpType = 'app'const app = new Vue({    ...App})app.$mount()// #endif// #ifdef VUE3import {    createSSRApp} from 'vue'// 引入 uView UIimport uView from './uni_modules/vk-uview-ui';export function createApp() {    const app = createSSRApp(App)    // 应用 uView UI    app.use(uView)    return {        app    }}// #endif

11.3 App.vue 引入根底款式(留神style标签需申明scss属性反对)

<script>    export default {        onLaunch: function() {            console.log('App Launch')        },        onShow: function() {            console.log('App Show')        },        onHide: function() {            console.log('App Hide')        }    }</script><style lang="scss">    /* 引入uview */    @import "./uni_modules/vk-uview-ui/index.scss";    /*每个页面公共css */    html,    body {        width: 100%;        height: 100%;    }</style>

11.4 uni.scss 引入全局 scss 变量文件

/** * 这里是uni-app内置的罕用款式变量 * * uni-app 官网扩大插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均应用了这些款式变量 * 如果你是插件开发者,倡议你应用scss预处理,并在插件代码中间接应用这些变量(无需 import 这个文件),不便用户通过搭积木的形式开发整体格调统一的App * *//** * 如果你是App开发者(插件使用者),你能够通过批改这些变量来定制本人的插件主题,实现自定义主题性能 * * 如果你的我的项目同样应用了scss预处理,你也能够间接在你的 scss 代码中应用如下变量,同时无需 import 这个文件 *//* 引入uview */@import "@/uni_modules/vk-uview-ui/theme.scss";/* 色彩变量 *//* 行为相干色彩 */$uni-color-primary: #007aff;$uni-color-success: #4cd964;$uni-color-warning: #f0ad4e;$uni-color-error: #dd524d;/* 文字根本色彩 */$uni-text-color:#333;//根本色$uni-text-color-inverse:#fff;//反色$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息$uni-text-color-placeholder: #808080;$uni-text-color-disable:#c0c0c0;/* 背景色彩 */$uni-bg-color:#ffffff;$uni-bg-color-grey:#f8f8f8;$uni-bg-color-hover:#f1f1f1;//点击状态色彩$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩色彩/* 边框色彩 */$uni-border-color:#c8c7cc;/* 尺寸变量 *//* 文字尺寸 */$uni-font-size-sm:12px;$uni-font-size-base:14px;$uni-font-size-lg:16;/* 图片尺寸 */$uni-img-size-sm:20px;$uni-img-size-base:26px;$uni-img-size-lg:40px;/* Border Radius */$uni-border-radius-sm: 2px;$uni-border-radius-base: 3px;$uni-border-radius-lg: 6px;$uni-border-radius-circle: 50%;/* 程度间距 */$uni-spacing-row-sm: 5px;$uni-spacing-row-base: 10px;$uni-spacing-row-lg: 15px;/* 垂直间距 */$uni-spacing-col-sm: 4px;$uni-spacing-col-base: 8px;$uni-spacing-col-lg: 12px;/* 透明度 */$uni-opacity-disabled: 0.3; // 组件禁用态的透明度/* 文章场景相干 */$uni-color-title: #2C405A; // 文章题目色彩$uni-font-size-title:20px;$uni-color-subtitle: #555555; // 二级题目色彩$uni-font-size-subtitle:26px;$uni-color-paragraph: #3F536E; // 文章段落色彩$uni-font-size-paragraph:15px;

12、配置axios

12.1 创立axios适配器,实用于uniapp

import axios from 'axios';import settle from 'axios/lib/core/settle';import buildURL from 'axios/lib/helpers/buildURL';// axios适配器axios.defaults.adapter = function(config) {     return new Promise((resolve, reject) => {        uni.request({            method: config.method.toUpperCase(),            url: config.baseURL + buildURL(config.url, config.params, config.paramsSerializer),            header: config.headers,            data: config.data,            dataType: config.dataType,            responseType: config.responseType,            sslVerify: config.sslVerify,            complete: function complete(response) {                response = {                    data: response.data,                    status: response.statusCode,                    errMsg: response.errMsg,                    header: response.header,                    config: config                };                settle(resolve, reject, response);            }        })    })}export default axios

12.2 创立axios拦截器

//封装axios拦截器import axios from './axios-adaptor.js'const service = axios.create({    baseURL: 'https://yin-feng.top',    timeout: 5000, // request timeout    crossDomain: true,    headers: {        'Content-Type': 'application/json; charset=utf-8'    }})// 增加申请拦截器 service.interceptors.request.use(    config => {        config.headers['source'] = 'wx'        return config    },    error => {        return Promise.reject(error)    })// 增加响应拦截器 service.interceptors.response.use(    response =>    response.data,    error => {        return Promise.resolve(error)    })export default service

12.3 封装后端api接口

import service from './http.interceptor.js'// 封装后端api接口const api = {    // 话术获取    getLoveChat: params => service.post('/open/getLoveChat', params),    // 获取轮播图    getBanner: () => service.post('/open/getBanner')}export default api

12.4 后端接口文档

参考这篇博客撩妹神器恋爱话术库,次要用到恋爱话术获取接口。

13、编写外围页面

13.1 template html代码编写

<template>    <view class="content">        <u-swiper :list="bannerList" :effect3d="true" @click="clickBanner" height="245" bg-color="#e7f6ff"            img-mode="aspectFit">        </u-swiper>        <view class="search">            <u-search bg-color="#fff" v-model="searchValue" shape="round" placeholder="请输出女生说的话" :clearabled="true"                :show-action="true" @search="getLoveChat" @custom="getLoveChat" @clear="clear"                :action-style="searchStyle" />        </view>        <view class="tag" v-if="!list.length">            <u-tag text="恋爱话术" shape="circle" @click="tagClick('恋爱话术')" />            <u-tag text="土味情话" shape="circle" color="#ff0000" @click="tagClick('土味情话')" />            <u-tag text="情侣助手" shape="circle" @click="tagClick('情侣助手')" />        </view>        <view class="list">            <view v-for="item in list" :key="item.female" class="item">                <view class="title">                    <u-icon :style="iconStyle" size="1.5rem" name="/static/imgs/question.png" />:                    <text class="female">{{item.female}}</text>                </view>                <view class="answer" v-for="answer in item.answers" :key="answer.answer">                    <u-icon :style="iconStyle" v-if="answer.gender==1" size="1.5rem" name="/static/imgs/man.png" />                    <u-icon :style="iconStyle" v-if="answer.gender==2" size="1.5rem" name="/static/imgs/woman.png" />                    <text class="answerItem">: {{answer.answer}}</text>                    <u-button class="answerBtn" type="primary" plain size="mini" @click="copy(answer)">复制</u-button>                </view>            </view>        </view>    </view></template>

13.2 外围办法编写,次要应用vue3语法

<script>    import {        toRefs,        reactive,        onMounted    } from 'vue'    import api from '../../axios/http.api.js'    export default {        name: 'index',        setup() {            const state = reactive({                // 输入框的值                searchValue: '',                // 输入框款式                searchStyle: {                    color: '#ff0000',                    border: '1px solid #DD6161',                    fontWeight: '500',                    padding: '1px',                    borderRadius: '15%',                },                // 图标款式                iconStyle: {                    position: 'relative',                    top: '6px'                },                // 话术列表                list: [],                loading: false,                // banner图片数组                bannerList: [],            })            const methods = reactive({                // 获取话术列表                getLoveChat: async () => {                    state.loading = true                    let res = await api.getLoveChat({                        "count": 16,                        "key": state.searchValue,                        "page": 1                    })                    state.loading = false                    if (!res.code) {                    }                    state.list = res.data                    console.log(res)                },                // 复制话术到剪切板                copy(item) {                    uni.setClipboardData({                        data: item.answer                    })                },                // 标签点击                tagClick(value) {                    state.searchValue = value                    methods.getLoveChat()                },                // 轮播图点击                clickBanner(index) {                    // 跳转到外部窗口并且传递链接                    uni.navigateTo({                        url: `/component/WebView/WebView?url=${state.bannerList[index].hrefUrl}`                    })                },                // 清空输入框                clear() {                    state.searchValue = ''                    state.list = []                }            })            onMounted(async () => {                // 获取剪切板内容                uni.getClipboardData({                    success: function(res) {                        state.searchValue = res.data;                    }                });                // 获取banner                let res = await api.getBanner()                if (!res.code) {                    return                }                state.bannerList = res.data.map(item => {                    return {                        image: item.imgUrl,                        ...item,                    }                })                                // 只在微信小程序才显示分享菜单                // #ifdef MP-WEIXIN                wx.showShareMenu({                    withShareTicket: true,                    menus: ['shareAppMessage', 'shareTimeline']                })                // #endif            })            return {                ...toRefs(state),                ...toRefs(methods)            }        }    }</script>

13.3 css款式代码编写

<style lang="less" scoped>    .content {        background-color: #f5ffff;        padding: 10px 18px 0;        font-size: 15px;        font-family: cursive;        height: 100%;        .search {            padding-top: 18px;        }        .tag {            padding: 10px;            display: flex;            justify-content: space-between;        }        .list {            height: calc(100vh - 230px);            overflow-y: auto;            margin-top: 10px;            padding-top: 5px;            .item {                box-shadow: 0 2px 6px 2px rgba(255, 0, 0, 0.3);                padding: 8px 0 10px;                line-height: 27px;                background-color: #ffebeb;                margin-bottom: 15px;                border-radius: 8px;                letter-spacing: 2px;                .title {                    padding-left: 10px;                    .female {                        font-weight: 500;                        color: #DD6161;                        font-size: 19px;                    }                }                .answer {                    position: relative;                    padding: 0 50px 0 10px;                    .answerBtn {                        position: absolute;                        bottom: 0;                        right: 5px;                    }                }            }        }    }</style>

14、封装webView,用于轮播图页面跳转

<template>    <view>        <web-view :src="url"></web-view>    </view></template><script>    import {        toRefs,        reactive,        onMounted    } from 'vue'    export default {        name: 'web',        data() {            return {                url: ''            }        },        onLoad(e) {            // 获取传递过去的链接            this.url = e.url        }    }</script><style></style>

15、pages.json配置页面路由

15.1 配置外围页面路由

{    "path": "pages/index/index",    "style": {        "navigationBarTitleText": "恋爱话术",        "backgroundColor": "#eeeeee",        "enablePullDownRefresh": false    }}

15.2 配置webView路由

{    "path" : "component/WebView/WebView",    "style" :                                                                                        {        "navigationBarTitleText": "",        "enablePullDownRefresh": false    }    }

15.3 残缺路由配置如下

16、微信小程序测试

16.1 编译并启动


16.2 在微信开发者工具测试下性能

17、h5页面测试

17.1 编译并启动h5页面

17.2 在浏览器点击测试下性能,F12关上调试模式

18、公布微信小程序

18.1 编译代码


18.2 微信开发者工具上传代码

18.3 小程序后盾提交审核


18.4 审核过后即可在这里点击公布


18.4 配置小程序非法域名


18.6 兄弟们能够用微信扫码体验一下

19、公布h5页面进行托管



兄弟们能够关上以下链接体验一下

https://static-d3218181-4117-4af2-8b08-5fa0b2dc6760.bspapp.com

20、源码地址

// 下了源码的老铁麻烦点个star哈https://gitee.com/yinfeng-code/love-chat-wx.git
肝文不易,老铁们==三连一波==反对下吧,谢谢大家了~
下了源码的老铁麻烦点个star哈