Pārlūkot izejas kodu

Merge branch 'master' of http://39.104.94.153:3000/yf_zd/second

yf_ymm 5 gadi atpakaļ
vecāks
revīzija
c61c53f813

+ 9 - 4
templates/backstageNet/production/person_farm_edit.html

@@ -314,6 +314,8 @@
                             </div>
                         </div>
                         <div class="layui-form-item">
+                            <input type="hidden" value="" name="img_1" id="img_1">
+                            <input type="hidden" value="" name="location_2" id="location_2">
                             <div class="layui-input-block">
                                 <button class="layui-btn" type="button" lay-submit lay-filter="formDemo">立即提交</button>
                                 <a type="button" class="layui-btn layui-btn-primary" href="person_farm?name={{current_user.username}}" target="blank">查看个人农场</a>
@@ -390,13 +392,16 @@
                             , "area": data.area
                             , "addr": data.addr
                             , "location": data.location
+                            , "location_2": data.location_2
                             , "desc": data.desc
                             , "img": data.img
-                            , "guide_img": 'http://127.0.0.1:8000/'+data.guide_img
+                            , "guide_img": data.guide_img
                         })
                     });
-                    var latlan = data.location.split(',');
-                    getMapSite(latlan[0], latlan[1]);
+                    if(data.location){
+                        var latlan = data.location.split(',');
+                        getMapSite(latlan[0], latlan[1]);
+                    }
                     if (data.img) {
                         var currImg = data.img.split(',');
                         $('#uploader-list').html('');
@@ -537,7 +542,7 @@
 
                 // CKupdate()
                 // console.log($("#adtaForm").serializeArray());
-
+                $('#img_1').val(data.field.img.split(',')[0])
                 $.ajax({
                     url: 'person_area_pub',
                     data: $("#formDiv").serialize(),

+ 6 - 6
templates/backstageNet/systemSet/onlineSplit.html

@@ -233,7 +233,7 @@
                         <div class="layui-form-item layui-form-text">
                             <label class="layui-form-label">基地范围:</label>
                             <div class="layui-input-inline">
-                                <input type="text" name="location" value="{{curr_area.location|default:''}}" id="scopeArea" required lay-verify="required" readonly
+                                <input type="text" name="location_2" value="{{curr_area.location_2|default:''}}" id="scopeArea" required lay-verify="required" readonly
                                     placeholder="基地范围" autocomplete="off" class="layui-input">
                             </div>
                             <div class="layui-form-mid layui-word-aux scopeSetBtn" onclick="setAreaFun()">设置</div>
@@ -335,7 +335,7 @@
                             var iframeWin = window[layero.find('iframe')[0]['name']]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
                             if ($('#scopeArea').val()) {
                                 var dat = {
-                                    location:$('#scopeArea').val()
+                                    location_2:$('#scopeArea').val()
                                 }
                                 iframeWin.currDraw(dat);
                             } else {
@@ -353,16 +353,16 @@
             var data = {
                 all_area: [
                     {
-                        location: "119.58544,26.11644;119.601394,26.11631;119.58774,26.108264",
+                        location_2: "119.58544,26.11644;119.601394,26.11631;119.58774,26.108264",
                         name: "苹果园区"
                     },
                     {
-                        location: "119.616558,26.111152;119.611527,26.102847;119.631218,26.102587;119.630499,26.102847|119.604772,26.096228;119.604772,26.08247;119.622019,26.087272",
+                        location_2: "119.616558,26.111152;119.611527,26.102847;119.631218,26.102587;119.630499,26.102847|119.604772,26.096228;119.604772,26.08247;119.622019,26.087272",
                         name: 'ssdf'
                     }
                 ],
                 user_area: {
-                    location: "119.618282,26.106221;119.630212,26.104793;119.617995,26.10077",
+                    location_2: "119.618282,26.106221;119.630212,26.104793;119.617995,26.10077",
                     name: "苹果园区"
                 }
             }
@@ -373,7 +373,7 @@
             layer.closeAll(); //疯狂模式,关闭所有层
         }
         function SetBasePolygon(Polygon) {
-            $("input[name=location]").val(Polygon);
+            $("input[name=location_2]").val(Polygon);
             layer.closeAll(); //疯狂模式,关闭所有层
         }
         function clearAll() {

+ 3 - 3
templates/backstageNet/systemSet/onlineSplitMap.html

@@ -139,10 +139,10 @@
         if (PolygonStrDat.length) {
             for (var i = 0; i < PolygonStrDat.length; i++) {
                 var baseName = PolygonStrDat[i].name;
-                if(!PolygonStrDat[i].location){
+                if(!PolygonStrDat[i].location_2){
                     continue;
                 }
-                var drawingNums = PolygonStrDat[i].location.split('|');
+                var drawingNums = PolygonStrDat[i].location_2.split('|');
                 for (var z = 0; z < drawingNums.length; z++) {
                     if (drawingNums[z] == null || drawingNums[z] == undefined) {
                         continue;
@@ -192,7 +192,7 @@
     }
     // 当前绘制
     function currDraw(data) {
-        var PolygonStr = data.location;
+        var PolygonStr = data.location_2;
         if (PolygonStr != "") {
             var polygonArray = PolygonStr.split('|');
 

+ 1 - 1
templates/backstageNet/systemSet/user_list.html

@@ -14,7 +14,7 @@
 	</td>
 	<td>{{ user.date_joined }}</td>
 	<td>
-		<button class="layui-btn layui-btn-sm  btn-shaixuan" onclick="allotEquipPage('{{ user.username }}')">在线分地</button>
+		<button class="layui-btn layui-btn-sm  btn-shaixuan" onclick="allotEquipPage('{{ user.username }}','{{user.id}}')">在线分地</button>
 		{% if user.username == 'admin' %}  {% else %}
 		<button class="layui-btn layui-btn-sm  layui-btn-warm" onclick="addUser('{{ user.id }}')">编辑</button>
 		{% endif %}

+ 120 - 71
templates/outerNet/farmList.html

@@ -15,41 +15,49 @@
     <link rel="stylesheet" href="{% static '/css/module.css' %}">
     <!-- <link rel="stylesheet" href="{% static '/css/hotelList.css' %}"> -->
     <style>
-        .advImg{
+        .advImg {
             background: url(../static/imgs/farmAdv.jpg) no-repeat center;
             background-size: cover;
         }
+
         /* 内容模块 */
-        .hacienda .haciendaList{
+        .hacienda .haciendaList {
             display: flex;
             flex-flow: wrap;
         }
-        .hacienda .haciendaList{
+
+        .hacienda .haciendaList {
             padding: 20px 20px 0 20px;
         }
-        .hacienda .haciendaItem{
+
+        .hacienda .haciendaItem {
             display: flex;
             margin-bottom: 20px;
         }
-        .hacienda .haciendaImg{
+
+        .hacienda .haciendaImg {
             width: 195px;
             height: 165px;
             position: relative;
         }
-        .hacienda .haciendaImg .haciendaImg1{
+
+        .hacienda .haciendaImg .haciendaImg1 {
             width: 100%;
             height: 100%;
         }
-        .hacienda .haciendaImg .haciendaImg2{
+
+        .hacienda .haciendaImg .haciendaImg2 {
             position: absolute;
             top: 0;
             left: 10px;
         }
-        .hacienda .haciendaItem .haciendaTxt{
+
+        .hacienda .haciendaItem .haciendaTxt {
             width: 147px;
             padding: 10px 10px;
         }
-        .hacienda .haciendaItem .haciendaTxt h2{
+
+        .hacienda .haciendaItem .haciendaTxt h2 {
             font-size: 14px;
             font-weight: bold;
             line-height: 33px;
@@ -57,24 +65,29 @@
             overflow: hidden;
             text-overflow: ellipsis;
         }
-        .hacienda .haciendaItem .haciendaTxt .desc{
+
+        .hacienda .haciendaItem .haciendaTxt .desc {
             letter-spacing: 2px;
             height: 100px;
             overflow: hidden;
         }
-        .hacienda .haciendaItem .haciendaTxt button{
+
+        .hacienda .haciendaItem .haciendaTxt button {
             color: #fff;
             padding: 5px 6px;
             border-radius: 5px;
         }
-        .hacienda .haciendaItem .haciendaTxt button.btn1{
+
+        .hacienda .haciendaItem .haciendaTxt button.btn1 {
             background-color: #00aeed;
         }
-        .hacienda .haciendaItem .haciendaTxt button.btn2{
+
+        .hacienda .haciendaItem .haciendaTxt button.btn2 {
             background-color: #3bb852;
         }
+
         /* 弹出观光样式 */
-        .tourismShow{
+        .tourismShow {
             position: relative;
             z-index: 999;
             opacity: 0;
@@ -87,10 +100,10 @@
             min-height: 400px;
             background-color: #fff;
             border: 1px solid #f1f1f1;
-            -webkit-box-shadow: 2px 4px 10px rgba(0,0,0,.15);
-            -moz-box-shadow: 2px 4px 10px rgba(0,0,0,.15);
-            -o-box-shadow: 2px 4px 10px rgba(0,0,0,.15);
-            box-shadow: 2px 4px 10px rgba(0,0,0,.15);
+            -webkit-box-shadow: 2px 4px 10px rgba(0, 0, 0, .15);
+            -moz-box-shadow: 2px 4px 10px rgba(0, 0, 0, .15);
+            -o-box-shadow: 2px 4px 10px rgba(0, 0, 0, .15);
+            box-shadow: 2px 4px 10px rgba(0, 0, 0, .15);
             padding: 20px;
             border-radius: 12px;
             z-index: 9;
@@ -99,20 +112,24 @@
             border-top-right-radius: 0;
             transition: all .5s;
         }
-        .tourismShow .title{
+
+        .tourismShow .title {
             border-left: 3px solid #ff6a28;
             padding-left: 8px;
             font-size: 16px;
         }
-        .tourismShow .line{
+
+        .tourismShow .line {
             border-bottom: 1px solid #ddd;
             margin-top: 10px;
         }
-        .tourismShow .content{
+
+        .tourismShow .content {
             height: 430px;
             padding-top: 20px;
         }
-        .tourismShow .tourismShowCloseBtn{
+
+        .tourismShow .tourismShowCloseBtn {
             position: absolute;
             right: 15px;
             top: 11px;
@@ -124,10 +141,12 @@
             text-align: center;
             cursor: pointer;
         }
-        .tourismShow .content .guideForm>input{
+
+        .tourismShow .content .guideForm>input {
             width: 40%;
         }
-        .tourismShow .content .guideForm>button{
+
+        .tourismShow .content .guideForm>button {
             color: #fff;
             padding: 5px 6px;
             border-radius: 5px;
@@ -135,7 +154,8 @@
             margin-left: 10px;
             background: #1eaeed;
         }
-        .tourismShow .content .guideForm>button{
+
+        .tourismShow .content .guideForm>button {
             color: #fff;
             padding: 5px 6px;
             border-radius: 5px;
@@ -143,11 +163,13 @@
             margin-left: 10px;
             background: #1eaeed;
         }
-        .tourismShow .content #map{
+
+        .tourismShow .content #map {
             height: 373px;
             margin-top: 10px;
         }
-        .tourismShow .loadDiv{
+
+        .tourismShow .loadDiv {
             position: absolute;
             left: 45%;
             top: 45%;
@@ -180,37 +202,45 @@
                         </a>
                     </span>
                     <div class="searchDiv">
-                        <input type="text" id="searchTitlt" value="{{con|default:''}}" placeholder="请输入标题" autocomplete="off" class="layui-input" >
-                        <button type="button" onclick="searchCon()" class="layui-btn layui-btn-ms"><i class="layui-icon">&#xe615;</i></button>
+                        <input type="text" id="searchTitlt" value="{{con|default:''}}" placeholder="请输入标题"
+                            autocomplete="off" class="layui-input">
+                        <button type="button" onclick="searchCon()" class="layui-btn layui-btn-ms"><i
+                                class="layui-icon">&#xe615;</i></button>
                     </div>
                 </div>
                 <!-- 新闻列表 -->
                 <div class="innerDiv">
                     <div class="hacienda">
                         <ul class="haciendaList">
-                            {% if hotel|length %} {% for hotelItem in hotel %}
+                            {% if garden_list|length %} {% for gardenItem in garden_list %}
                             <li class="haciendaItem">
                                 <div class="haciendaImg">
-                                    <img class="haciendaImg1" src="{% static 'imgs/1.jpg'%}" alt="">
+                                    <img class="haciendaImg1" src="http://127.0.0.1:8000/{{gardenItem.img_1}}" alt="">
                                 </div>
                                 <div class="haciendaTxt">
-                                    <h2>云飞农场</h2>
-                                    <div class="desc">位于和南沙鞥周三水电费,杀敌欧福布斯后撒粉红色的。阿时候发货萨芬,是大法师。</div>
+                                    <h2>{{gardenItem.name}}</h2>
+                                    <div class="desc">{{gardenItem.desc|default:''}}</div>
                                     <div>
-                                        <button class="btn1">观光路线</button>
-                                        <button class="btn2">导游导览</button>
+                                        <button class="btn1">
+                                            <input type="hidden" name="" value="{{gardenItem.guide_img}}" id="">
+                                            观光路线
+                                        </button>
+                                        <button class="btn2">
+                                            <input type="hidden" name="" value="{{gardenItem.location}}" id="">
+                                            导游导览
+                                        </button>
                                     </div>
                                 </div>
                             </li>
                             {% endfor %} {% else %}
-                                <li class="videoItem" style=" width: 100%;">
-                                    <div style="text-align:center;line-height:200px;font-size:18px">暂无数据</div>
-                                </li>
+                            <li class="videoItem" style=" width: 100%;">
+                                <div style="text-align:center;line-height:200px;font-size:18px">暂无数据</div>
+                            </li>
                             {% endif %}
                         </ul>
                     </div>
-                    
-                    {% if hotel|length %}
+
+                    {% if garden_list|length %}
                     <div id="page"></div>
                     <input type="hidden" value="{{nums}}" id="nums">
                     <input type="hidden" value="{{page}}" id="currPage">
@@ -250,7 +280,7 @@
     </div>
 
     <script src="{% static '/lib/js/jquery-2.1.4.min.js'%}"></script>
-    <script src="https://webapi.amap.com/maps?v=1.4.15&key=3939967b919a8003377dd113fc445a3d&plugin=AMap.Driving"></script>
+    <script src="https://webapi.amap.com/maps?v=1.4.15&key=3939967b919a8003377dd113fc445a3d&plugin=AMap.Driving&plugin=AMap.Geocoder"></script>
     <script src="{% static '/lib/layui/layui.js'%}"></script>
     <script>
         //注意:导航 依赖 element 模块,否则无法进行功能性操作
@@ -291,31 +321,38 @@
             window.location.href = 'farm_list?page=1' + '&condition=' + searchTitlt;
         }
 
-        $('.haciendaTxt .btn1').on('click',function(){
+        $('.haciendaTxt .btn1').on('click', function () {
             $('.tourismShow .title span').html('观光路线')
-            $('.tourismShow .content').html('<div style="text-align:center;width:100%;height:100%"><img  style="width:100%;height:100%" src="http://127.0.0.1:8000/static/imgs/banner2.jpg">')
+            var img = $(this).find('input').val();
+            $('.tourismShow .content').html('<div style="text-align:center;width:100%;height:100%"><img  style="width:100%;height:100%" src="' + img + '">')
             $('.tourismShow').show();
-            $('.tourismShow').css('opacity',1)
+            $('.tourismShow').css('opacity', 1)
         })
-        $('.tourismShowCloseBtn').on('click',function(){
+        $('.tourismShowCloseBtn').on('click', function () {
             $('.tourismShow .content').html('')
-            $('.tourismShow').css('opacity',0)
-            setTimeout(function(){
+            $('.tourismShow').css('opacity', 0)
+            setTimeout(function () {
                 $('.tourismShow').hide();
-            },500)
+            }, 500)
         })
         var map;
-        $('.haciendaTxt .btn2').on('click',function(){
+        $('.haciendaTxt .btn2').on('click', function () {
             $('.tourismShow .title span').html('导游导览');
-            var html = '<div class="">'+
-                        '<div class="guideForm">起始地点:<input type="text" id="startPath"><button onclick="searchWay()">确定</button></div>'+
-                        '<div id="map">地图</div>'+
-                        '</div>'
+            var lng = $(this).find('input').val().split(',')[0];
+            var lat = $(this).find('input').val().split(',')[1];
+            var html = '<div class="">' +
+                '<div class="guideForm">起始地点:<input type="text" id="startPath"><button onclick="searchWay(\'' + lng + '\',\'' + lat + '\')">确定</button></div>' +
+                '<div id="map">地图</div>' +
+                '</div>'
             $('.tourismShow .content').html(html);
             map = new AMap.Map('map', {
                 resizeEnable: true, //是否监控地图容器尺寸变化
                 zoom: 11, //初始化地图层级
-                center: [113.397428, 39.90923] //初始化地图中心点
+                center: [lng, lat] //初始化地图中心点
+            });
+            geocoder = new AMap.Geocoder({
+                city: "010", //城市设为北京,默认:“全国”
+                radius: 1000 //范围,默认:500
             });
             var startIcon = new AMap.Icon({
                 // 图标尺寸
@@ -334,18 +371,22 @@
                 imageOffset: new AMap.Pixel(-95, -3)
             });
             var marker = new AMap.Marker({
-                icon:endIcon,
-                position: new AMap.LngLat(113.397428, 39.90923),   // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
-                title: '北京'
+                icon: endIcon,
+                position: new AMap.LngLat(lng, lat),   // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
             });
-            map.add(marker); 
+            map.add(marker);
             $('.tourismShow').show();
-            $('.tourismShow').css('opacity',1)
+            $('.tourismShow').css('opacity', 1);
+            geocoder = new AMap.Geocoder({
+                city: "010", //城市设为北京,默认:“全国”
+                radius: 1000 //范围,默认:500
+            });
         })
-        function searchWay() {
+        function searchWay(lng,lat) {
             map.clearMap();
             var startPath = $("#startPath").val();
             var endPath = '北京';
+            
 
             if (!startPath) {
                 $("#startPath").focus();
@@ -357,19 +398,27 @@
                 map: map,
                 // panel: "panel"
             });
-            // 根据起终点名称规划驾车导航路线
-            driving.search([
-                { keyword: startPath, city: '' },
-                { keyword: endPath, city: '' }
-            ], function (status, result) {
-                if (status === 'complete') {
-                    // log.success('绘制驾车路线完成');
-                    $('.loadDiv').remove();
-                } else {
-                    alert('获取驾车数据失败:' + result)
-                    $('.loadDiv').remove();
+            geocoder.getAddress([lng,lat], function(status, result) {
+                if (status === 'complete'&&result.regeocode) {
+                    var address = result.regeocode.formattedAddress;
+                    // 根据起终点名称规划驾车导航路线
+                    driving.search([
+                        { keyword: startPath, city: '' },
+                        { keyword: address, city: '' }
+                    ], function (status, result) {
+                        if (status === 'complete') {
+                            // log.success('绘制驾车路线完成');
+                            $('.loadDiv').remove();
+                        } else {
+                            alert('获取驾车数据失败:' + result)
+                            $('.loadDiv').remove();
+                        }
+                    });
+                }else{
+                    log.error('根据经纬度查询地址失败')
                 }
             });
+            
         }
     </script>
 </body>

+ 7 - 7
templates/outerNet/index2.html

@@ -220,7 +220,7 @@
                                             {% for farmItem in garden %}
                                             <li class="farm-item">
                                                 <a target="_blank" href="person_farm?name={{farmItem.user}}">
-                                                  <img src="http://127.0.0.1:8000/{{farmItem.farm_img}}" alt="">
+                                                  <img src="http://127.0.0.1:8000/{{farmItem.img_1}}" alt="">
                                                     <div class="news-item-txt">
                                                         <div class="title">
                                                             <h1>
@@ -228,7 +228,7 @@
                                                             </h1>
                                                         </div>
                                                         <div class="desc">
-                                                            {{farmItem.desc}}
+                                                            {{farmItem.desc|default:''}}
                                                         </div>
                                                     </div>  
                                                 </a>
@@ -299,7 +299,7 @@
                                         <li class="productItem">
                                             <div>
                                                 <a href="garden_intro?id={{pickItem.id}}" target="_blank">
-                                                    <img src="http://192.168.1.9:8000/{{pickItem.pick_img}}" alt="">
+                                                    <img src="http://127.0.0.1:8000/{{pickItem.pick_img}}" alt="">
                                                 </a>
                                             </div>
                                             <p><a href="garden_intro?id={{pickItem.id}}" target="_blank">{{pickItem.name}}</a></p>
@@ -355,12 +355,12 @@
                                 {% for gardenItem in garden %}
                                 <li class="haciendaItem">
                                     <div class="haciendaImg">
-                                        <img class="haciendaImg1" src="{% static 'imgs/1.jpg'%}" alt="">
+                                        <img class="haciendaImg1" src="http://127.0.0.1:8000/{{gardenItem.img_1}}" alt="">
                                         <img class="haciendaImg2" src="{% static 'imgs/22.png'%}" alt="">
                                     </div>
                                     <div class="haciendaTxt">
                                         <h2>{{gardenItem.name}}</h2>
-                                        <div class="desc">{{gardenItem.desc}}</div>
+                                        <div class="desc">{{gardenItem.desc|default:''}}</div>
                                         <div>
                                             <button class="btn1">
                                                 <input type="hidden" name="" value="{{gardenItem.guide_img}}" id="">
@@ -405,7 +405,7 @@
                                     <li class="travelItem">
                                         <a href="tourist?id={{sightseeItem.id}}" target="_blank">
                                             <div class="travelImg">
-                                                <img class="haciendaImg1" src="http://127.0.0.1:8000/{{sightseeItem.sightisee_img}}" alt="">
+                                                <img class="haciendaImg1" src="http://127.0.0.1:8000/{{sightseeItem.sightsee_img}}" alt="">
                                                 <img class="haciendaImg2" src="{% static 'imgs/22.png'%}" alt="">
                                             </div>
                                             <div class="travelTitle">
@@ -538,7 +538,7 @@
                         {% for relationItem in relation %}
                         <li class="partnerInnerItem">
                             <a target="_blank" href="{{relationItem.relation}}">
-                                <img src="http://127.0.0.1:8000{{relationItem.pic}}" alt="">        
+                                <img src="http://127.0.0.1:8000/{{relationItem.pic}}" alt="">        
                             </a>
                         </li>
                         {% endfor %}

+ 9 - 2
templates/outerNet/newsList.html

@@ -39,8 +39,15 @@
                 <!-- 面包屑导航 -->
                 <div class="breadcrumb">
                     <span class="layui-breadcrumb">
-                        <a href="newslist_view?page=1&type=5" class="curr">
-                            <cite>新闻资讯</cite>
+                        <a class="curr">
+                            <cite>
+                                <select name="" id="newsChange" onchange="newsChange(this)">
+                                    <option value="5">新闻资讯</option>
+                                    <option value="0">农业新闻</option>
+                                    <option value="1">农业政策</option>
+                                    <option value="2">农业技术</option>
+                                </select>
+                            </cite>
                         </a>
                         <a href="video_list?page=1">
                             <cite>视频资讯</cite>

+ 1 - 1
templates/static/css/header.css

@@ -195,7 +195,7 @@
     height: 40px;
     overflow: hidden;
     border-radius: 50%;
-    background: red;
+    /* background: red; */
     margin-right: 10px;
 }
 .yet_loginCover .person .userHeadImg img{

+ 9 - 0
templates/static/js/newsList.js

@@ -24,6 +24,15 @@ layui.use(['element', 'laypage'], function () {
         }
     });
 });
+// var valdat = localStorage.newsChange || 5;
+$('#newsChange').val(location.search.split('=')[2])
+console.log(location.search.split('=')[2])
+
+function newsChange(obj){
+    var val = $(obj).val();
+    // localStorage.setItem("newsChange", val);
+    window.location.href = 'newslist_view?page=1&type=' + val;
+}   
 
 
 $('#searchTitlt').on('keypress', function (e) {

+ 2 - 2
templates/static/js/systemSet/userManage.js

@@ -127,10 +127,10 @@ function initSearchPage(page, url, datas) {
     });
 }
 
-function allotEquipPage(uname) {
+function allotEquipPage(uname,id) {
     var currPage = $('#page .layui-laypage-curr em').eq(1).html();
     var f_name = $('#uname').val();
-    window.location.href = 'area_create?uname=' + uname + '&currpage=' + currPage + '&f_name=' + f_name;
+    window.location.href = 'area_create?uname=' + uname + '&currpage=' + currPage + '&f_name=' + f_name+ '&id=' + id;
 }
 
 // 创建新用户