yangyin
2024-11-26 e06334ca35f919fdcad2a20460af80c9e736f605
新增安卓手机下载功能
已修改5个文件
已添加12个文件
30362 ■■■■■ 文件已修改
customer_list/ch/ai_html/views/mobileDownload/css/downLoad.css 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
customer_list/ch/ai_html/views/mobileDownload/css/index.css 6600 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
customer_list/ch/ai_html/views/mobileDownload/image/1.png 补丁 | 查看 | 原始文档 | blame | 历史
customer_list/ch/ai_html/views/mobileDownload/image/2.png 补丁 | 查看 | 原始文档 | blame | 历史
customer_list/ch/ai_html/views/mobileDownload/image/3.png 补丁 | 查看 | 原始文档 | blame | 历史
customer_list/ch/ai_html/views/mobileDownload/image/4.png 补丁 | 查看 | 原始文档 | blame | 历史
customer_list/ch/ai_html/views/mobileDownload/image/corpIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
customer_list/ch/ai_html/views/mobileDownload/image/passed.png 补丁 | 查看 | 原始文档 | blame | 历史
customer_list/ch/ai_html/views/mobileDownload/index.html 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
customer_list/ch/ai_html/views/mobileDownload/js/config.js 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
customer_list/ch/ai_html/views/mobileDownload/js/vant.js 17708 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
customer_list/ch/ai_html/views/mobileDownload/js/vue.js 5659 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
customer_list/common/static/fonts/ywiconfont/iconfont.css 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
customer_list/common/static/fonts/ywiconfont/iconfont.ttf 补丁 | 查看 | 原始文档 | blame | 历史
customer_list/common/static/fonts/ywiconfont/iconfont.woff 补丁 | 查看 | 原始文档 | blame | 历史
customer_list/common/static/fonts/ywiconfont/iconfont.woff2 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/component/sidebar/SidebarOther.vue 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
customer_list/ch/ai_html/views/mobileDownload/css/downLoad.css
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,167 @@
.header_page {
  width: 100%;
  height: 130px;
  display: flex;
  justify-content: space-between;
  padding-bottom: 20px;
  border-bottom: 1px solid #f1f2f3;
}
.header_page .left_img {
  width: 40%;
  height: 130px;
  border-radius: 15%;
  border: 1px solid #ccc;
}
.header_page .right_selectSystem {
  margin-left: 30px;
  width: 60%;
  align-items: flex-start;
  display: flex;
  flex-direction: column;
  justify-content: center;
}
.right_selectSystem .select__title {
  text-align: left;
  font-weight: 700;
  font-size: 20px;
  line-height: 26px;
}
.right_selectSystem .select__desc {
  text-align: left;
  line-height: 26px;
  font-size: 14px;
  color: #636366;
}
.van-swipe-item {
  margin: 8px 10px 0 0;
  box-sizing: border-box;
}
.swipe_image {
  width: 100%;
  height: 500px;
  /* border: 1px solid #f1f2f3; */
  border: 1px solid #d3dbe3;
  border-radius: 10px;
}
.feat_all {
  width: 100%;
  height: 35px;
  display: flex;
  margin-top: 10px;
  justify-content: space-between;
  align-items: center;
}
.feat_all .left_feat {
  font-weight: 700;
  font-size: 20px;
}
.version_all {
  width: 100%;
  height: 35px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.select__desc_ {
  text-align: left;
  line-height: 26px;
  font-size: 14px;
  color: #636366;
}
.interface_all {
  width: 100%;
  height: 35px;
  color: #1d1d1f;
  padding-bottom: 10px;
  border-bottom: 1px solid #f1f2f3;
  display: flex;
  font-size: 13px;
  justify-content: flex-start;
  align-items: center;
}
.left_preview {
  width: 100%;
  height: 35px;
  margin-top: 10px;
  font-weight: 700;
  font-size: 20px;
  display: flex;
  justify-content: flex-start;
  align-items: center;
}
.feat_privacy {
  margin-top: 10px;
  width: 100%;
  height: 50px;
  text-align: left;
  color: #636366;
  font-size: 13px;
  letter-spacing: 1px;
  font-weight: 400;
}
.feat_regulation {
  width: 100%;
  height: 50px;
  padding-bottom: 20px;
  border-bottom: 1px solid #f1f2f3;
  text-align: left;
  color: #636366;
  margin-top: 10px;
  font-size: 13px;
  letter-spacing: 1px;
  font-weight: 400;
}
.feat-privacy__card {
  padding: 20px;
  width: 100%;
  border-radius: 16px;
  background-color: #ffffff;
  box-sizing: border-box;
  box-shadow: 2px 2px 10px #d6d6d6;
}
.privacy-type__img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  text-align: center;
}
.privacy-type__heading {
  margin-top: 9px;
  color: #111;
  text-align: center;
  font-size: 15px;
  line-height: 19px;
  font-weight: 600;
}
.privacy-type__description {
  margin-top: 6px;
  color: #666;
  text-align: center;
  font-size: 13px;
  line-height: 19px;
  font-weight: 400;
}
.feta_info {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 13px;
  line-height: 49px;
  border-bottom: 1px solid #f1f2f3;
}
.feta_info .left_info {
  color: #aaa;
}
.feta_info .right_info {
  color: #1d1d1f;
}
customer_list/ch/ai_html/views/mobileDownload/css/index.css
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
customer_list/ch/ai_html/views/mobileDownload/image/1.png
customer_list/ch/ai_html/views/mobileDownload/image/2.png
customer_list/ch/ai_html/views/mobileDownload/image/3.png
customer_list/ch/ai_html/views/mobileDownload/image/4.png
customer_list/ch/ai_html/views/mobileDownload/image/corpIcon.png
customer_list/ch/ai_html/views/mobileDownload/image/passed.png
customer_list/ch/ai_html/views/mobileDownload/index.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,118 @@
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
        <!-- å¼•入样式文件 -->
        <link rel="stylesheet" href="./css/index.css" />
        <link rel="stylesheet" href="./css/downLoad.css" />
        <!-- å¼•å…¥ Vue å’Œ Vant çš„ JS æ–‡ä»¶ -->
        <script src="./js/vue.js"></script>
        <script src="./js/vant.js"></script>
        <script src="./js/config.js?v=241012"></script>
        <script></script>
    </head>
    <body>
        <div id="app">
            <div style="margin: 3px 10px">
                <div class="header_page">
                    <div class="left_img">
                        <img :src="m_mobileDownloadConfig.SoftwareConfig.Icon" style="width: 100%; height: 130px; border-radius: 15%" />
                    </div>
                    <div class="right_selectSystem">
                        <div style="margin-bottom: 30px">
                            <div class="select__title">{{m_mobileDownloadConfig.SoftwareConfig.Name}}</div>
                            <div class="select__desc">{{m_mobileDownloadConfig.SoftwareConfig.Desc}}</div>
                        </div>
                        <div>
                            <button
                                style="
                                    border-width: 1px;
                                    border-style: solid;
                                    border-color: #0070c9;
                                    background: 0 0;
                                    color: #fff;
                                    border-radius: 20px;
                                    width: 65px;
                                    background-color: rgb(0, 112, 201);
                                    font-size: 14px;
                                "
                                type="button"
                                @click="getDownPath()"
                            >
                                ä¸‹è½½
                            </button>
                        </div>
                    </div>
                </div>
                <div class="feat_all">
                    <div class="left_feat">{{m_mobileDownloadConfig.FunctionalVersion.Name}}</div>
                </div>
                <div class="version_all">
                    <div class="select__desc_">{{m_mobileDownloadConfig.FunctionalVersion.Version}}</div>
                    <div class="select__desc_">{{m_mobileDownloadConfig.FunctionalVersion.Time}}</div>
                </div>
                <div class="interface_all">{{m_mobileDownloadConfig.FunctionalVersion.Desc}}</div>
                <div class="left_preview">{{m_mobileDownloadConfig.LocalInfo.Preview}}</div>
                <van-swipe :loop="false" :width="300" :show-indicators="false">
                    <van-swipe-item v-for="(image, index) in imagesDetail" :key="index">
                        <img :src="image" class="swipe_image" />
                    </van-swipe-item>
                </van-swipe>
                <div class="feat_all">
                    <div class="left_feat">App éšç§</div>
                </div>
                <div class="feat_privacy">开发者 å·²è¡¨æ˜Žè¯¥ App çš„隐私规范可能包括了下述的数据处理方式 è¯·å‚阅开发者隐私政策。</div>
                <div class="feat-privacy__card">
                    <div class="privacy-type__img"><img src="./image/passed.png" /></div>
                    <div class="privacy-type__heading">未收集数据</div>
                    <div class="privacy-type__description">开发者不会从此 App ä¸­æ”¶é›†ä»»ä½•数据。</div>
                </div>
                <div class="feat_regulation">隐私规范可能因你使用的功能或者你的年龄等因素而异。</div>
                <div class="feat_all">
                    <div class="left_feat">信息</div>
                </div>
                <div v-for="(item, index) in informationData" :key="index" class="feta_info">
                    <div class="left_info">{{ item.infoTitle }}</div>
                    <div class="left_right">{{ item.infoContent }}</div>
                </div>
            </div>
        </div>
    </body>
</html>
<script>
    // åœ¨ #app æ ‡ç­¾ä¸‹æ¸²æŸ“一个按钮组件
    new Vue({
        el: '#app',
        data() {
            return {
                m_mobileDownloadConfig: mobileDownloadConfig,
                imagesDetail: [],
                informationData: [],
            };
        },
        mounted() {
            this.imagesDetail = this.m_mobileDownloadConfig.LocalInfo.Images;
            this.informationData = this.m_mobileDownloadConfig.LocalInfo.InformationData;
        },
        methods: {
            getDownPath() {
                var ua = navigator.userAgent.toLowerCase();
                if (ua.match(/MicroMessenger/i) == 'micromessenger') {
                    this.$dialog
                        .alert({
                            title: '温馨提示', //加上标题
                            message: '下载App需要打开新的浏览器下载', //改变弹出框的内容
                        })
                        .then(() => {});
                } else {
                    window.location.href = this.m_mobileDownloadConfig.SoftwareConfig.DownPath;
                }
            },
        },
    });
</script>
customer_list/ch/ai_html/views/mobileDownload/js/config.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
let mobileDownloadConfig = {
  SoftwareConfig: {
    Name: "WI æ°´åŠ¡æ™ºèƒ½åŠ©æ‰‹",
    Desc: "工具",
    Icon: "./image/corpIcon.png",
    DownPath: "http://101.133.133.173:8084/WI水务智能助手.apk",
  },
  FunctionalVersion: {
    Name: "当前功能",
    Version: "版本 v1.0",
    Time: "2024.11.26",
    Desc: "切换任意场景, æ˜¾ç¤ºæ°´æƒ…数据, ä¼˜åŒ–用户体验",
  },
  LocalInfo: {
    Preview: "预览",
    Images: [
      "./image/1.png",
      "./image/2.png",
      "./image/3.png",
      "./image/4.png",
    ],
    InformationData: [
      {
        infoTitle: "大小",
        infoContent: "5.62 MB",
      },
      {
        infoTitle: "类别",
        infoContent: "工具",
      },
      {
        infoTitle: "语言",
        infoContent: "简体中文",
      },
      {
        infoTitle: "年龄分级",
        infoContent: "17岁以上",
      },
      {
        infoTitle: "版权",
        infoContent: "归上海拉瓦锡卡文智能科技有限公司所有",
      },
    ],
  },
};
customer_list/ch/ai_html/views/mobileDownload/js/vant.js
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
customer_list/ch/ai_html/views/mobileDownload/js/vue.js
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
customer_list/common/static/fonts/ywiconfont/iconfont.css
@@ -1,8 +1,8 @@
@font-face {
  font-family: "ywifont"; /* Project id 4655417 */
  src: url('iconfont.woff2?t=1732515923924') format('woff2'),
       url('iconfont.woff?t=1732515923924') format('woff'),
       url('iconfont.ttf?t=1732515923924') format('truetype');
  src: url('iconfont.woff2?t=1732599381749') format('woff2'),
       url('iconfont.woff?t=1732599381749') format('woff'),
       url('iconfont.ttf?t=1732599381749') format('truetype');
}
.ywifont {
@@ -13,12 +13,12 @@
  -moz-osx-font-smoothing: grayscale;
}
.ywicon-gongsijieshao:before {
  content: "\e613";
.ywicon-shouji:before {
  content: "\e8b9";
}
.ywicon-xiaoxi2:before {
  content: "\e616";
.ywicon-gongsijieshao:before {
  content: "\e613";
}
.ywicon-lizi:before {
customer_list/common/static/fonts/ywiconfont/iconfont.ttf
Binary files differ
customer_list/common/static/fonts/ywiconfont/iconfont.woff
Binary files differ
customer_list/common/static/fonts/ywiconfont/iconfont.woff2
Binary files differ
src/layout/component/sidebar/SidebarOther.vue
@@ -41,12 +41,28 @@
                        <span class="use_name">登</span>
                    </div>
                </div>
                <!-- <div class="agent_line"></div>
                <div class="nav__chat" @click="newChatRoomClick()">
                    <div class="nav__chat-icon">
                        <span class="chat_img ywifont ywicon-weixin !text-[26px] text-[#fff]"></span>
                    </div>
                </div> -->
                <div class="agent_line mt-4"></div>
                <el-popover placement="right-start" :width="136" trigger="hover">
                    <template #reference>
                        <div class="nav__chat">
                            <div class="nav__chat-icon">
                                <span class="chat_img ywifont ywicon-shouji !text-[20px] text-[#fff]"></span>
                            </div>
                        </div>
                    </template>
                    <template #default>
                        <div class="relative">
                            <div class="p-0 box-shadow-none rounded-[10px]">
                                <div ref="setPhoneQRCode" class="mt-[8px] mb-[8px]"></div>
                                <p class="text-center text-[#5e6772] m-0 p-0 leading-5">
                                    å®‰å“扫码下载 <br />
                                    WI æ°´åŠ¡æ™ºèƒ½åŠ©æ‰‹
                                </p>
                            </div>
                        </div>
                    </template>
                </el-popover>
            </div>
        </div>
        <div class="nav_history_list bg-[#1c1e1d]" v-show="isShowHistoryChatRoom" ref="historyChatRoomRef">
@@ -117,9 +133,11 @@
import { onClickOutside } from '@vueuse/core';
import { ElMessage, ElMessageBox } from 'element-plus';
import moment from 'moment';
import { computed, onMounted, ref, watch, watchEffect } from 'vue';
import QRCode from 'qrcodejs2-fixes';
import { computed, nextTick, onMounted, ref, watch, watchEffect } from 'vue';
import type { ChatRoomItem } from './components/types';
import { DeleteHistoryGroups, setHistoryGroupTitle } from '/@/api/ai/chat';
import { SERVE_URL } from '/@/constants';
import { useSearch } from '/@/hooks/useSearch';
import { DateFilter, dateFilterMap } from '/@/model/types/date';
import {
@@ -287,6 +305,23 @@
    }
});
//#endregion
//#region ====================== æ‰«ç æ‰‹æœºç«¯ä¸‹è½½ ======================
const setPhoneQRCode = ref<HTMLElement | null>(null);
// åˆå§‹åŒ–生成二维码
const initQrcode = () => {
    const url = `${SERVE_URL}ai_html/views/mobileDownload/index.html`;
    nextTick(() => {
        (<HTMLElement>setPhoneQRCode.value).innerHTML = '';
        new QRCode(setPhoneQRCode.value, {
            text: url,
            width: 126,
            height: 126,
            colorDark: '#000000',
            colorLight: '#ffffff',
        });
    });
};
//#endregion
//#region ====================== æœç´¢èŠå¤©å®¤ ======================
const { query, queryData } = useSearch(filteredChatRoomList, queryParams);
const debounceQuery = debounce(query);
@@ -309,6 +344,7 @@
    emitter.on('logout', () => {
        logoutClick();
    });
    initQrcode();
});
</script>