yin_yu820 3 週間 前
コミット
ffa5f18619
23 ファイル変更2027 行追加219 行削除
  1. 342 2
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/enterpriseinfo/controller/EnterpriseInfoController.java
  2. 9 2
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/enterpriseinfo/mapper/EnterpriseInfoMapper.java
  3. 42 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/enterpriseinfo/mapper/xml/EnterpriseInfoMapper.xml
  4. 22 5
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/enterpriseinfo/service/EnterpriseInfoService.java
  5. 1 3
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/enterpriseinfo/service/dto/EnterpriseInfoDTO.java
  6. 13 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/enterpriseinfo/service/dto/WxBean.java
  7. 3 1
      jp-console/jeeplus-platform/jeeplus-admin/src/main/java/com/jeeplus/aop/logging/utils/LogUtils.java
  8. 2 0
      jp-console/jeeplus-platform/jeeplus-admin/src/main/java/com/jeeplus/security/config/WebSecurityConfig.java
  9. 28 0
      jp-mobile/api/auth/loginService.js
  10. 67 0
      jp-mobile/common/wxutils.js
  11. 154 0
      jp-mobile/components/DoublePicker/DoublePicker.vue
  12. 143 0
      jp-mobile/components/DoublePicker/DoublePicker2.vue
  13. 1 1
      jp-mobile/manifest.json
  14. 318 16
      jp-mobile/package-lock.json
  15. 3 3
      jp-mobile/package.json
  16. 5 1
      jp-mobile/pages.json
  17. 230 152
      jp-mobile/pages/comEdit/comEdit.vue
  18. 5 10
      jp-mobile/pages/comList/comList.vue
  19. 75 0
      jp-mobile/pages/index/AudioToWord.vue
  20. 564 23
      jp-mobile/pages/index/index.vue
  21. BIN
      jp-mobile/static/img/icon_logout.png
  22. BIN
      jp-mobile/static/img/sousuo.png
  23. BIN
      jp-mobile/static/img/titlebg.jpg

+ 342 - 2
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/enterpriseinfo/controller/EnterpriseInfoController.java

@@ -6,16 +6,26 @@ package com.jeeplus.enterpriseinfo.controller;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 
+import cn.hutool.extra.servlet.ServletUtil;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.google.common.collect.Lists;
 import com.jeeplus.buildinginfo.service.BuildingManagementService;
 import com.jeeplus.buildinginfo.service.dto.BuildingManagementDTO;
+import com.jeeplus.common.redis.RedisUtils;
+import com.jeeplus.common.utils.RequestUtils;
+import com.jeeplus.common.utils.ResponseUtil;
+import com.jeeplus.config.properties.JeePlusProperties;
+import com.jeeplus.core.errors.ErrorConstants;
 import com.jeeplus.core.excel.EasyExcelUtils;
 import com.jeeplus.core.excel.ExcelOptions;
 import com.jeeplus.core.excel.annotation.ExportMode;
 import com.jeeplus.core.query.QueryWrapperGenerator;
 import com.jeeplus.aop.logging.annotation.ApiLog;
+import com.jeeplus.enterpriseinfo.service.dto.WxBean;
+import com.jeeplus.security.jwt.TokenProvider;
 import com.jeeplus.security.util.SecurityUtils;
+import com.jeeplus.sys.constant.CacheNames;
+import com.jeeplus.sys.constant.enums.LogTypeEnum;
 import com.jeeplus.sys.domain.DictValue;
 import com.jeeplus.sys.domain.Office;
 import com.jeeplus.sys.service.DictValueService;
@@ -37,10 +47,14 @@ import org.apache.http.client.HttpClient;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
 import org.springframework.http.ResponseEntity;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.authentication.DisabledException;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -55,11 +69,18 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.time.Duration;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Random;
 import java.util.UUID;
 import java.util.stream.Collectors;
 import org.json.JSONObject;
@@ -76,6 +97,11 @@ import org.json.JSONObject;
 @RequestMapping(value = "/enterpriseinfo/enterpriseInfo")
 public class EnterpriseInfoController {
 
+	@Autowired
+	AuthenticationManager authenticationManager;
+	@Autowired
+	private RedisUtils redisUtils;
+
 	@Autowired
 	private EnterpriseInfoService enterpriseInfoService;
 
@@ -95,6 +121,9 @@ public class EnterpriseInfoController {
 	private OfficeService officeService;
 	@Autowired
 	private BuildingManagementService buildingManagementService;
+	String appId = "wx510821957a261e8d"; // 替换为你的微信公众号 AppID
+	String jsapiTicket = "";
+
 	/**
 	 * 企业基本信息列表数据
 	 */
@@ -107,7 +136,7 @@ public class EnterpriseInfoController {
 		UserDTO userDTO = UserUtils.getCurrentUserDTO();
 		List<HashMap<String, Object>> map=new ArrayList<>();
 
-		IPage<EnterpriseInfoDTO> result = enterpriseInfoService.findPage (page, queryWrapper,enterpriseInfoDTO.getIndustry());
+		IPage<EnterpriseInfoDTO> result = enterpriseInfoService.findPage (page, queryWrapper,enterpriseInfoDTO.getIndustry(),enterpriseInfoDTO.getName(),enterpriseInfoDTO.getBz2());
 		//未登录限制
 		if(userDTO.getLoginName()==null){
 			for(int i=0;i<result.getRecords().size();i++){
@@ -188,6 +217,19 @@ public class EnterpriseInfoController {
 		return ResponseEntity.ok (map);
 	}
 
+	/**
+	 * 选择产业链上下游
+	 */
+	@ApiLog("选择产业链上下游")
+	@ApiOperation(value = "选择产业链上下游")
+	@GetMapping("getIndustryChainList")
+	public ResponseEntity<List<HashMap<String, Object>>> getIndustryChainList() throws Exception {
+		List<HashMap<String, Object>> map=enterpriseInfoService.getIndustryChainList();
+		return ResponseEntity.ok (map);
+	}
+
+
+
 	/**
 	 * Post 请求百度云模型
 	 */
@@ -235,6 +277,171 @@ public class EnterpriseInfoController {
 	}
 
 
+	public String GetWxtoken() {
+
+
+		String appSecret = "c6a75986065e33182384ba2209761de3"; // 替换为你的微信公众号 AppSecret
+		// 构造获取 access_token 的 URL
+		String urlString = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + appSecret;
+		boolean isgettoke=false;
+		String retoken="";
+
+
+		HashMap<String, Object> aa=enterpriseInfoService.getWxtoke();
+		if(aa!=null){
+			String time=aa.get("create_time").toString();
+			retoken=aa.get("wxtoken").toString();
+			jsapiTicket=aa.get("expires_in").toString();
+
+			// 当前时间
+			LocalDateTime now = LocalDateTime.now();
+			// 将给定的时间字符串转换为LocalDateTime对象
+			DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
+			LocalDateTime givenTime = LocalDateTime.parse(time, formatter);
+			// 计算两个时间之间的差值
+			Duration duration = Duration.between(givenTime, now);
+
+			// 判断差值是否超过10分钟
+			if (duration.toMinutes() > 120) {
+				System.out.println("给定的时间已经超过了120分钟。");
+				isgettoke=true;
+			} else {
+				System.out.println("给定的时间没有超过120分钟。");
+				isgettoke=false;
+			}
+
+		}else{
+			isgettoke=true;
+		}
+
+
+		if(isgettoke){
+			try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
+				HttpGet request = new HttpGet(urlString);
+
+				// 执行请求
+				HttpResponse response = httpClient.execute(request);
+
+				// 获取响应状态码
+				int statusCode = response.getStatusLine().getStatusCode();
+				System.out.println("Response Code: " + statusCode);
+
+				// 获取响应内容
+				HttpEntity entity = response.getEntity();
+				String responseString = EntityUtils.toString(entity, "UTF-8");
+
+				// 打印响应内容
+				System.out.println("Response: " + responseString);
+
+				JSONObject jo = new JSONObject(responseString);
+				if(jo.get("access_token")!=null){
+					retoken=jo.get("access_token").toString();
+					jsapiTicket=getJsapiTicket(retoken);
+
+					String id= UUID.randomUUID().toString().replace("-","");
+					enterpriseInfoService.setWxtoke(id,retoken,jsapiTicket);
+				}
+
+			} catch (Exception e) {
+				e.printStackTrace();
+				return "fail";
+			}
+
+		}
+
+		return retoken;
+
+	}
+
+	// 获取 jsapi_ticket
+	public  String getJsapiTicket(String accessToken) throws IOException {
+		String ticket="";
+		String urlString = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + accessToken + "&type=jsapi";
+		try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
+			HttpGet request = new HttpGet(urlString);
+
+			// 执行请求
+			HttpResponse response = httpClient.execute(request);
+
+			// 获取响应状态码
+			int statusCode = response.getStatusLine().getStatusCode();
+			System.out.println("Response Code: " + statusCode);
+
+			// 获取响应内容
+			HttpEntity entity = response.getEntity();
+			String responseString = EntityUtils.toString(entity, "UTF-8");
+
+			// 打印响应内容
+			System.out.println("Response: " + responseString);
+
+			JSONObject jo = new JSONObject(responseString);
+			if(jo.get("ticket")!=null){
+				ticket=jo.get("ticket").toString();
+			}
+
+		} catch (Exception e) {
+			e.printStackTrace();
+			return "fail";
+		}
+		return ticket;
+	}
+
+
+//	 try {
+//		String accessToken = WeChatUtil.getAccessToken();
+//		String jsapiTicket = WeChatUtil.getJsapiTicket(accessToken);
+//		return WeChatUtil.generateSignature(jsapiTicket, url);
+//	} catch (Exception e) {
+//		e.printStackTrace();
+//		return null;
+//	}
+
+
+	// 生成签名
+	public Map<String, String> generateSignature(String jsapiTicket, String url) {
+		Map<String, String> params = new HashMap<>();
+		params.put("jsapi_ticket", jsapiTicket);
+		params.put("noncestr", "random_string"); // 随机字符串
+		params.put("timestamp", String.valueOf(System.currentTimeMillis() / 1000));
+		params.put("url", url);
+
+		String signature = createSHA1String(params);
+
+		return new HashMap() {{
+			put("appId", appId);
+			put("timestamp", params.get("timestamp"));
+			put("nonceStr", params.get("noncestr"));
+			put("signature", signature);
+		}};
+	}
+
+	// 创建 SHA1 签名
+	private static String createSHA1String(Map<String, String> params) {
+		StringBuilder sb = new StringBuilder();
+		for (String key : new String[]{"jsapi_ticket", "noncestr", "timestamp", "url"}) {
+			sb.append(key).append("=").append(params.get(key)).append("&");
+		}
+		sb.deleteCharAt(sb.length() - 1);
+
+		try {
+			MessageDigest digest = MessageDigest.getInstance("SHA-1");
+			byte[] bytes = digest.digest(sb.toString().getBytes());
+			StringBuilder hexString = new StringBuilder();
+			for (byte b : bytes) {
+				String hex = Integer.toHexString(0xff & b);
+				if (hex.length() == 1) {
+					hexString.append('0');
+				}
+				hexString.append(hex);
+			}
+			return hexString.toString();
+		} catch (NoSuchAlgorithmException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+
 	/**
 	 * 根据Id获取企业基本信息数据
 	 */
@@ -262,6 +469,139 @@ public class EnterpriseInfoController {
 		return ResponseEntity.ok ( map );
 	}
 
+	@ApiLog("创建登录链接(时效10分钟)")
+	@ApiOperation(value = "创建登录链接(时效10分钟)")
+	@GetMapping("getloginstr")
+	public ResponseEntity<HashMap<String, Object>> getloginstr(String username) throws IOException {
+		UserDTO userDTO = UserUtils.getCurrentUserDTO();
+		String res="";
+		if(userDTO.getLoginName()!=null&&userDTO.getLoginName().equals("admin")){
+			//创建时效10分钟的登录入口
+			String id= UUID.randomUUID().toString().replace("-","");
+			enterpriseInfoService.getloginstr(id,username);
+			res=id;
+		}else{
+			res="0";
+		}
+		WxBean ab=new WxBean();
+		ab.setId(res);
+		ab.wxtoke=GetWxtoken();
+
+
+		String rs=generateRandomString(10);
+		String times=String.valueOf(System.currentTimeMillis() / 1000);
+		Map<String, String> params = new HashMap<>();
+		params.put("jsapi_ticket", jsapiTicket);
+		params.put("noncestr",rs ); // 随机字符串
+		params.put("timestamp", times);
+		//params.put("url", "https://miniapp.huidutech.com.cn/yd_qycpfbH5/pages/index/index?loginid="+res);
+		params.put("url", "https://miniapp.huidutech.com.cn/yd_qycpfbH5");
+		String signature = createSHA1String(params);
+		ab.signature=signature;
+
+		HashMap<String, Object> aa=new HashMap<>();
+		aa.put("Id", res);
+		aa.put("wxtoke", ab.wxtoke);
+		aa.put("appId", appId);
+		aa.put("timestamp", times);
+		aa.put("nonceStr", rs);
+		aa.put("signature", signature);
+		//aa.put("url", "https://miniapp.huidutech.com.cn/yd_qycpfbH5/pages/index/index?loginid="+res);
+		aa.put("url", "https://miniapp.huidutech.com.cn/yd_qycpfbH5");
+
+		System.out.println("Response: " + aa);
+		return ResponseEntity.ok (aa);
+
+	}
+
+
+	public String generateRandomString(int length) {
+		String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+		StringBuilder sb = new StringBuilder(length);
+		Random random = new Random();
+
+		for (int i = 0; i < length; i++) {
+			int index = random.nextInt(characters.length());
+			sb.append(characters.charAt(index));
+		}
+
+		return sb.toString();
+	}
+
+
+
+	@ApiLog(value = "通过临时id登录", type = LogTypeEnum.LOGIN)
+	@ApiOperation(value = "通过临时id登录")
+	@PostMapping("loginid")
+	public ResponseEntity loginid(@RequestBody String id) {
+
+		ResponseUtil responseUtil = new ResponseUtil ( );
+		String res="";
+		HashMap<String, Object> map=enterpriseInfoService.loginid(id);
+		if(map!=null){
+			String loginname=map.get("loginname").toString();
+
+			//去除链接的限制,保持一直能通过链接登录
+//			String createtime=map.get("createtime").toString();
+//
+//			// 当前时间
+//			LocalDateTime now = LocalDateTime.now();
+//			// 将给定的时间字符串转换为LocalDateTime对象
+//			DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
+//			LocalDateTime givenTime = LocalDateTime.parse(createtime, formatter);
+//			// 计算两个时间之间的差值
+//			Duration duration = Duration.between(givenTime, now);
+//
+//			// 判断差值是否超过10分钟
+//			if (duration.toMinutes() > 10) {
+//				System.out.println("给定的时间已经超过了10分钟。");
+//				res="0";
+//			} else {
+//				System.out.println("给定的时间没有超过10分钟。");
+//				res="1";
+//				HashMap<String, Object> map2=enterpriseInfoService.getchupassword(loginname);
+//				responseUtil=login(responseUtil,loginname,map2.get("des5").toString());
+//			}
+
+//			HashMap<String, Object> map2=enterpriseInfoService.getchupassword(loginname);
+//			responseUtil=login(responseUtil,loginname,map2.get("des5").toString());
+
+			responseUtil=login(responseUtil,loginname,"");
+
+		}
+
+		return responseUtil.ok ( );
+	}
+
+	private ResponseUtil login(ResponseUtil responseUtil,String username,String password){
+
+//		SecurityUtils.login ( username, password, authenticationManager ); //登录操作spring security
+//		if ( !userService.isEnableLogin ( username ) ) {
+//			throw new DisabledException( ErrorConstants.LOGIN_ERROR_FORBID_LOGGED_IN_ELSEWHERE );
+//		}
+		//登录成功,生成token
+		UserDTO userDTO = UserUtils.getByLoginName ( username );
+		String token = TokenProvider.createAccessToken ( username, userDTO.getPassword ( ) );
+		responseUtil.add ( TokenProvider.TOKEN, token );
+		//更新登录信息
+		updateUserLoginInfo ( responseUtil, userDTO, token );
+		return responseUtil;
+	}
+
+	private void updateUserLoginInfo(ResponseUtil responseUtil, UserDTO userDTO, String token) {
+
+		String username = userDTO.getLoginName ( );
+		redisUtils.set ( CacheNames.USER_CACHE_TOKEN + username + ":" + token, token );
+		redisUtils.expire ( CacheNames.USER_CACHE_TOKEN + username + ":" + token, JeePlusProperties.newInstance ( ).getEXPIRE_TIME ( ) );
+		responseUtil.add ( "oldLoginDate", userDTO.getLoginDate ( ) );
+		responseUtil.add ( "oldLoginIp", userDTO.getLoginIp ( ) );
+		//更新登录日期
+		userDTO.setLoginDate ( new Date ( ) );
+		userDTO.setLoginIp ( ServletUtil.getClientIP ( RequestUtils.getRequest ( ) ) );
+		userService.updateUserLoginInfo ( userDTO );
+
+	}
+
 	/**
 	 * 保存企业基本信息
 	 */
@@ -399,7 +739,7 @@ public class EnterpriseInfoController {
 			}
 		}
 
-		List < EnterpriseInfoDTO> result = enterpriseInfoService.findPage (page, queryWrapper,enterpriseInfoDTO.getIndustry()).getRecords();
+		List < EnterpriseInfoDTO> result = enterpriseInfoService.findPage (page, queryWrapper,enterpriseInfoDTO.getIndustry(),enterpriseInfoDTO.getName(),enterpriseInfoDTO.getBz2()).getRecords();
         EasyExcelUtils.newInstance ( enterpriseInfoService, enterpriseInfoWrapper ).exportExcel ( result,  options.getSheetName ( ), EnterpriseInfoDTO.class, fileName,options.getExportFields (), response );
     }
 

+ 9 - 2
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/enterpriseinfo/mapper/EnterpriseInfoMapper.java

@@ -14,6 +14,7 @@ import com.jeeplus.enterpriseinfo.service.dto.EnterpriseInfoDTO;
 import com.jeeplus.enterpriseother.service.dto.EnterpriseOtherDTO;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 
@@ -26,7 +27,7 @@ public interface EnterpriseInfoMapper extends BaseMapper<EnterpriseInfo> {
 
     List<EnterpriseInfoDTO> findListFromLy(String Lyid);
     List<EnterpriseInfoDTO> findList();
-    IPage <EnterpriseInfoDTO> findList2(Page <EnterpriseInfoDTO> page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper,String industry);
+    IPage <EnterpriseInfoDTO> findList2(Page <EnterpriseInfoDTO> page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper,String industry,String name,String bz2);
 
     String findQyidByOfficeid(String Officeid);
     String findLyidByOfficeid(String Officeid);
@@ -47,8 +48,14 @@ public interface EnterpriseInfoMapper extends BaseMapper<EnterpriseInfo> {
 
     List<HashMap<String, Object>> getAreaList();
     List<HashMap<String, Object>> getHyList();
-    List<HashMap<String, Object>> getnologinstr(String str);
+    List<HashMap<String, Object>> getIndustryChainList();
+    HashMap<String, Object> getWxtoke();
+    int setWxtoke(String id,String token,Date time,String expires_in);
 
+    List<HashMap<String, Object>> getnologinstr(String str);
+    int getloginstr(String id, String username,Date now);
+    HashMap<String, Object> loginid(String id);
+    HashMap<String, Object> getchupassword(String phone);
 
 
     EnterpriseInfoDTO findByName(String name);

+ 42 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/enterpriseinfo/mapper/xml/EnterpriseInfoMapper.xml

@@ -71,7 +71,13 @@
         left join ly_park_management c on b.park_management=c.id
         ${ew.customSqlSegment}
 
+        <if test="name != null and name !=''">
+            and (a.name like concat('%',#{name}, '%') or a.bz1 like concat('%',#{name}, '%') or a.bz3 like concat('%',#{name}, '%'))
+        </if>
 
+        <if test="bz2 != null and bz2 !=''">
+            and (a.bz2 like concat('%',#{bz2}, '%') or a.bz4 like concat('%',#{bz2}, '%') )
+        </if>
     </select>
 
 
@@ -135,11 +141,47 @@
         SELECT industry FROM `ly_enterprise_info` where del_flag=0 group By industry
     </select>
 
+    <select id="getIndustryChainList" resultType="map">
+        SELECT DISTINCT bz2
+        FROM (
+        SELECT bz2 FROM ly_enterprise_info where del_flag =0 and bz2 is not null and bz2 !=''
+        UNION
+        SELECT bz4 as bz2 FROM ly_enterprise_info where del_flag =0 and bz4 is not null and bz4 !=''
+             ) AS combined
+    </select>
+
+    <select id="getWxtoke" resultType="map">
+        SELECT wxtoken,create_time,expires_in FROM ly_wxtoke order by create_time desc LIMIT 1
+    </select>
+
+    <insert id="setWxtoke" >
+        insert into ly_wxtoke( id,wxtoken,create_time,expires_in )
+        values (#{id}, #{token}, #{time},#{expires_in})
+    </insert>
+
     <select id="getnologinstr" resultType="map">
         SELECT label,value FROM sys_dict_value where dict_type_id=(SELECT id FROM sys_dict_type where type=#{str})
     </select>
 
 
+    <insert id="getloginstr" >
+        insert into ly_logins( id,loginname,createtime )
+        values (#{id}, #{username},  #{now})
+    </insert>
+
+    <select id="loginid" resultType="map">
+        SELECT id,loginname,createtime
+        FROM ly_logins
+        where id=#{id}
+    </select>
+
+    <select id="getchupassword" resultType="map">
+        SELECT des5
+        FROM ly_enterprise_info
+        where phone=#{phone}
+    </select>
+
+
     <select id="getLyinfoforuserid" resultType="map">
         SELECT b.building_name,b.building_contacts,b.building_phone
         FROM `sys_user` u

+ 22 - 5
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/enterpriseinfo/service/EnterpriseInfoService.java

@@ -28,6 +28,7 @@ import com.jeeplus.enterpriseinfo.mapper.EnterpriseInfoMapper;
 
 import java.time.Year;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Random;
@@ -51,9 +52,9 @@ public class EnterpriseInfoService extends ServiceImpl<EnterpriseInfoMapper, Ent
     @Autowired
     private OfficeService officeService;
 
-    public IPage <EnterpriseInfoDTO> findPage(Page <EnterpriseInfoDTO> page, QueryWrapper queryWrapper,String industry) {
+    public IPage <EnterpriseInfoDTO> findPage(Page <EnterpriseInfoDTO> page, QueryWrapper queryWrapper,String industry,String name,String bz2) {
         queryWrapper.eq ("a.del_flag", 0 ); // 排除已经删除
-        return  baseMapper.findList2 (page, queryWrapper,industry);
+        return  baseMapper.findList2 (page, queryWrapper,industry,name,bz2);
     }
 
     //按楼宇查询企业
@@ -155,13 +156,29 @@ public class EnterpriseInfoService extends ServiceImpl<EnterpriseInfoMapper, Ent
         return baseMapper.getAreaList ();
     }
 
-    public List<HashMap<String, Object>> getHyList() {
-        return baseMapper.getHyList ();
-    }
+    public List<HashMap<String, Object>> getHyList() {return baseMapper.getHyList ();    }
+
+    public List<HashMap<String, Object>> getIndustryChainList() {return baseMapper.getIndustryChainList ();    }
+
+    public HashMap<String, Object> getWxtoke() {return baseMapper.getWxtoke ();    }
+
+    public int setWxtoke(String id,String token,String expires_in) {return baseMapper.setWxtoke ( id, token, new Date(),expires_in);    }
+
     public List<HashMap<String, Object>> getnologinstr(String str) {
         return baseMapper.getnologinstr (str);
     }
 
+    public int getloginstr(String id,String username) {
+        return baseMapper.getloginstr (id,username,new Date());
+    }
+
+    public HashMap<String, Object> loginid(String id) {
+        return baseMapper.loginid (id);
+    }
+
+    public HashMap<String, Object> getchupassword(String phone) {
+        return baseMapper.getchupassword (phone);
+    }
 
 
     public int generateAccount(EnterpriseInfoDTO ef){

+ 1 - 3
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/enterpriseinfo/service/dto/EnterpriseInfoDTO.java

@@ -30,7 +30,7 @@ public class EnterpriseInfoDTO extends BaseDTO {
      * 企业名称
      */
 	@NotNull(message="企业名称不能为空")
-    @Query(type = QueryType.LIKE)
+
 	@ExcelProperty("企业名称")
 	private String name;
 
@@ -60,7 +60,6 @@ public class EnterpriseInfoDTO extends BaseDTO {
 	private String bz1;
 
 	@ExcelProperty("主导产品一产业链上下游")
-	@Query(type = QueryType.LIKE)
 	private String bz2;
 
 	@ExcelProperty("主导产品二")
@@ -68,7 +67,6 @@ public class EnterpriseInfoDTO extends BaseDTO {
 	private String bz3;
 
 	@ExcelProperty("主导产品二产业链上下游")
-	@Query(type = QueryType.LIKE)
 	private String bz4;
 
 	@ExcelProperty("工信局联系人")

+ 13 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/enterpriseinfo/service/dto/WxBean.java

@@ -0,0 +1,13 @@
+package com.jeeplus.enterpriseinfo.service.dto;
+
+import com.jeeplus.core.service.dto.BaseDTO;
+
+public class WxBean extends BaseDTO {
+    public String id;
+    public String wxtoke;
+    public String appId="";
+    public String nonceStr;
+    public String signature;
+    public String timestamp;
+    public String url;
+}

+ 3 - 1
jp-console/jeeplus-platform/jeeplus-admin/src/main/java/com/jeeplus/aop/logging/utils/LogUtils.java

@@ -71,13 +71,15 @@ public class LogUtils {
         String token = TokenProvider.resolveToken ( request );
 
         //2025-2-14,添加登录时token为null,然后从post请求的结果中拿取token
-        if(token==null&&functionName.equals("用户登录")){
+        //这边防止之前使用其他账号登录后留下的缓存token
+        if((functionName!=null&&functionName.equals("通过临时id登录"))||(token==null&&functionName.equals("用户登录"))){
             int startindex = result.indexOf("token=");
             String a=result.substring(startindex+6);
             int endindex = a.indexOf("}");
             token=a.substring(0,endindex);
         }
 
+
         String loginName = TokenProvider.getLoginName ( token );
         if ( StrUtil.isNotEmpty ( loginName ) ) {
             UserDTO user = UserUtils.getByLoginName ( loginName );

+ 2 - 0
jp-console/jeeplus-platform/jeeplus-admin/src/main/java/com/jeeplus/security/config/WebSecurityConfig.java

@@ -78,6 +78,8 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
                         "/enterpriseinfo/enterpriseInfo/getAreaList",
                         "/enterpriseinfo/enterpriseInfo/getHyList",
                         "/enterpriseinfo/enterpriseInfo/getnologinstr",
+                        "/enterpriseinfo/enterpriseInfo/getIndustryChainList",
+                        "/enterpriseinfo/enterpriseInfo/loginid",
                         "/sys/sysConfig/getConfig",
                         "/getAppFlowChart",
                         "/sys/getCode",

+ 28 - 0
jp-mobile/api/auth/loginService.js

@@ -14,6 +14,7 @@ export default {
 			data: data
 		})
 	},
+	
 	logout: function() {
 		return request({
 			url: '/sys/logout',
@@ -69,6 +70,14 @@ export default {
 		})
 	},
 	
+	getIndustryChainList: function(params) {
+		return request({
+			url: '/enterpriseinfo/enterpriseInfo/getIndustryChainList',
+			method: 'get',
+			params: params
+		})
+	},
+	
 	getHyList: function(params) {
 		return request({
 			url: '/enterpriseinfo/enterpriseInfo/getHyList',
@@ -76,6 +85,14 @@ export default {
 			params: params
 		})
 	},
+	
+	loginid: function(params) {
+		return request({
+			url: '/enterpriseinfo/enterpriseInfo/loginid',
+			method: 'post',
+			params: params
+		})
+	},
 
 	delete: function(ids) {
 		return request({
@@ -135,6 +152,17 @@ export default {
 		})
 	},
 	
+	
+	getloginstr: function(username) {
+		return request({
+			url: '/enterpriseinfo/enterpriseInfo/getloginstr',
+			method: 'get',
+			params: {
+				username: username
+			}
+		})
+	},
+	
 	getnologinstr: function(str) {
 		return request({
 			url: '/enterpriseinfo/enterpriseInfo/getnologinstr',

+ 67 - 0
jp-mobile/common/wxutils.js

@@ -0,0 +1,67 @@
+import wx from "weixin-js-sdk";
+
+/*
+ * 微信分享
+ * 获取微信加签信息
+ * @param{data}:获取的微信加签
+ * @param{shareData}:分享配置参数
+ */
+export const wxShare = (data, shareData) => {
+  let appId = 'wx510821957a261e8d';
+  let timestamp = data.timestamp;
+  let nonceStr = data.nonceStr;
+  let signature = data.signature;
+  wx.config({
+    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。(测试记得关掉)
+    appId: appId, // 必填,公众号的唯一标识
+    timestamp: timestamp, // 必填,生成签名的时间戳
+    nonceStr: nonceStr, // 必填,生成签名的随机串
+    signature: signature, // 必填,签名,见附录1
+    jsApiList: [
+      // 必填,需要使用的JS接口列表
+      // "checkJsApi",
+      'updateAppMessageShareData', //分享到微信及QQ(新接口)
+      'updateTimelineShareData', //分享到朋友圈”及“分享到QQ空间(新接口)
+    ],
+  });
+  // wx.checkJsApi({
+  //   jsApiList: ["chooseImage", "updateAppMessageShareData"], // 需要检测的JS接口列表,所有JS接口列表见附录2,
+  //   success: function (res) {
+  //     // 以键值对的形式返回,可用的api值true,不可用为false
+  //     // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
+  //     console.log(res, "checkJsApi");
+  //   },
+  // });
+  wx.ready(function () {
+	  
+    //分享到朋友圈”及“分享到QQ空间”
+    // wx.updateTimelineShareData({
+    //   ...shareData,
+    //   link: shareData.link + "&t=" + timestamp, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
+    //   success: function (res) {
+    //     console.log("分享朋友圈成功返回的信息为:", res);
+    //   },
+    // });
+
+    //“分享给朋友”及“分享到QQ”
+    wx.updateAppMessageShareData({
+      ...shareData,
+      link: shareData.link + "&t=" + timestamp + "&Content=1", // 分享链接 该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
+      success: function (res) {
+        console.log("分享朋友成功返回的信息为:", res);
+      },
+    });
+  });
+  wx.error(function (res) {
+    // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
+    console.log("验证失败返回的信息:", res);
+	// uni.showModal({
+	// 	title: '1',
+	// 	content:JSON.stringify(res),
+	// 	showCancel: true,
+	// 	success: (res) => {
+			
+	// 	}
+	// });
+  });
+};

+ 154 - 0
jp-mobile/components/DoublePicker/DoublePicker.vue

@@ -0,0 +1,154 @@
+<template>
+  <div class="double-picker">
+    <div class="picker-column">
+      <!-- <label :for="'picker-' + column1Name">{{ column1Label }}:</label> -->
+      <select class="custom-select"
+        :id="'picker-' + column1Name"
+        v-model="selectedColumn1"
+        @change="updateColumn2"
+      >
+   
+        <option
+          v-for="item in column1Data"
+          :key="item.value"
+          :value="item.value"
+        >
+          {{ item.label }}
+        </option>
+      </select>
+    </div>
+
+    <div class="picker-column">
+      <!-- <label :for="'picker-' + column2Name">{{ column2Label }}:</label> -->
+      <select class="custom-select"
+        :id="'picker-' + column2Name"
+        v-model="selectedColumn2"
+      >
+
+        <option
+          v-for="item in column2Data"
+          :key="item.value"
+          :value="item.value"
+        >
+          {{ item.label }}
+        </option>
+      </select>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  props: {
+    column1Label: {
+      type: String,
+      default: "第一列"
+    },
+    column2Label: {
+      type: String,
+      default: "第二列"
+    },
+    column1Data: {
+      type: Array,
+      required: true
+    },
+    column2Data: {
+      type: Array,
+      required: true
+    },
+    column1Name: {
+      type: String,
+      default: "column1"
+    },
+    column2Name: {
+      type: String,
+      default: "column2"
+    }
+  },
+  data() {
+    return {
+      selectedColumn1: "",
+      selectedColumn2: ""
+    };
+  },
+  methods: {
+    updateColumn2() {
+      this.$emit("update:column2Data", this.getColumn2Data());
+      this.selectedColumn2 = ""; // 清空第二列选择
+    },
+    getColumn2Data() {
+      // 根据第一列的选择返回第二列的数据
+      const selectedColumn1 = this.column1Data.find(
+        item => item.value === this.selectedColumn1
+      );
+      return selectedColumn1 ? selectedColumn1.children || [] : [];
+    }
+  },
+  watch: {
+    selectedColumn1() {
+      this.$emit("input", {
+        column1: this.selectedColumn1,
+        column2: this.selectedColumn2
+      });
+    },
+    selectedColumn2() {
+      this.$emit("input", {
+        column1: this.selectedColumn1,
+        column2: this.selectedColumn2
+      });
+    }
+  }
+};
+</script>
+
+<style scoped>
+	.select-container {
+	  display: flex;
+	  width: 200px; /* 可以根据需要调整宽度 */
+	}
+	
+	.custom-select {
+	  appearance: none; /* 去掉默认样式 */
+	  -webkit-appearance: none;
+	  -moz-appearance: none;
+	  background-color: transparent; /* 背景透明 */
+	  border: none; /* 去掉边框 */
+	  outline: none; /* 去掉焦点边框 */
+	  padding: 8px 12px; /* 添加内边距 */
+	  font-size: 16px; /* 字体大小 */
+	  width: 100%; /* 宽度占满容器 */
+	  cursor: pointer; /* 鼠标指针样式 */
+	  color: #333; /* 字体颜色 */
+	}
+	
+	/* 添加自定义下拉箭头(可选) */
+	.select-container::after {
+	  content: "▾";
+	  position: absolute;
+	  right: 10px;
+	  top: 50%;
+	  transform: translateY(-50%);
+	  pointer-events: none; /* 防止箭头影响点击 */
+	  color: #999; /* 箭头颜色 */
+	}
+	
+.double-picker {
+  display: flex;
+  justify-content: space-between;
+}
+
+.picker-column {
+  flex: 1;
+}
+
+label {
+  display: block;
+  margin-bottom: 5px;
+}
+
+select {
+  width: 100%;
+  padding: 5px;
+  font-size: 14px;
+}
+</style>

+ 143 - 0
jp-mobile/components/DoublePicker/DoublePicker2.vue

@@ -0,0 +1,143 @@
+<template>
+  <view>
+    <!-- 触发按钮 -->
+    <view class="picker-trigger" @click="showPicker">
+      <view class="picker-action">
+        <view class="text-grey">{{ label }}</view>
+      </view>
+    </view>
+
+    <!-- 弹出层 -->
+    <picker
+      mode="multiSelector"
+      :value="pickerValue"
+      :range="pickerRange"
+      @change="PickerChange"
+      @columnchange="PickerColumnChange"
+      :show="show"
+    >
+      <view class="picker-content">
+        <view class="picker-column">{{ pickerRange[0][pickerValue[0]][rangeKey] }}</view>
+        <view class="picker-column">{{ pickerRange[1][pickerValue[1]][rangeKey] }}</view>
+      </view>
+    </picker>
+  </view>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      show: false, // 控制选择器的显示
+      pickerValue: [0, 0], // 两列的默认选中索引
+      pickerRange: [[], []], // 两列数据
+      label: '请选择', // 显示的标签
+    };
+  },
+  props: {
+    value: {
+      type: Array,
+      default: () => [null, null] // 两列的绑定值
+    },
+    empty: {
+      type: String,
+      default: ''
+    },
+    rangeKey: {
+      type: String,
+      default: 'label'
+    },
+    rangeValue: {
+      type: String,
+      default: 'value'
+    },
+    range1: {
+      type: Array,
+      default: () => []
+    },
+    range2: {
+      type: Array,
+      default: () => []
+    },
+    disabled: {
+      type: Boolean,
+      default: false
+    },
+    onChangeNew: {
+      type: Function,
+      default: null,
+    }
+  },
+  watch: {
+    range1: {
+      handler(newRange) {
+        this.pickerRange[0] = newRange;
+      },
+      immediate: true
+    },
+    range2: {
+      handler(newRange) {
+        this.pickerRange[1] = newRange;
+      },
+      immediate: true
+    },
+    value: {
+      handler(newVal) {
+        if (newVal && newVal.length === 2) {
+          const [val1, val2] = newVal;
+          this.label = `${this.findLabel(this.pickerRange[0], val1)} - ${this.findLabel(this.pickerRange[1], val2)}`;
+        }
+      },
+      immediate: true
+    }
+  },
+  methods: {
+    showPicker() {
+      if (!this.disabled) {
+        this.show = true;
+      }
+    },
+    PickerChange(e) {
+      const [index1, index2] = e.detail.value;
+      const value1 = this.pickerRange[0][index1][this.rangeValue];
+      const value2 = this.pickerRange[1][index2][this.rangeValue];
+      this.label = `${this.pickerRange[0][index1][this.rangeKey]} - ${this.pickerRange[1][index2][this.rangeKey]}`;
+      this.$emit('input', [value1, value2]);
+      this.show = false; // 关闭选择器
+      if (this.onChangeNew) {
+        this.onChangeNew();
+      }
+    },
+    PickerColumnChange(e) {
+      const { column, value } = e.detail;
+      this.pickerValue[column] = value;
+    },
+    findLabel(range, value) {
+      const option = range.find(item => item[this.rangeValue] === value);
+      return option ? option[this.rangeKey] : '请选择';
+    }
+  },
+  mounted() {
+    if (this.empty) {
+      this.label = this.empty;
+    }
+    this.pickerRange = [this.range1, this.range2];
+  }
+};
+</script>
+
+<style>
+.picker-trigger {
+  padding: 10px;
+  border: 1px solid #ccc;
+  border-radius: 4px;
+  background-color: #fff;
+  display: flex;
+  align-items: center;
+}
+
+.text-grey {
+  color: #999;
+  margin-left: 8px;
+}
+</style>

+ 1 - 1
jp-mobile/manifest.json

@@ -1,7 +1,7 @@
 {
     "name" : "huidu",
     "appid" : "__UNI__09A1C76",
-    "description" : "潘黄街道楼宇数字园区综合平台",
+    "description" : "盐都区工业企业产品发布平台",
     "versionName" : "huidu mobile 1.0",
     "versionCode" : 1,
     "transformPx" : false,

+ 318 - 16
jp-mobile/package-lock.json

@@ -10,32 +10,258 @@
       "license": "ISC",
       "dependencies": {
         "lodash": "^4.17.20",
-        "lodash.pick": "^4.4.0",
+        "lodash.pick": "^3.1.0",
         "moment": "^2.27.0",
         "prettier": "^1.12.1",
-        "qs": "^6.9.4"
+        "qs": "^6.9.4",
+        "weixin-js-sdk": "^1.6.5"
+      }
+    },
+    "node_modules/call-bind-apply-helpers": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+      "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/call-bound": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz",
+      "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.1",
+        "get-intrinsic": "^1.2.6"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/dunder-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+      "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "gopd": "^1.2.0"
       },
-      "devDependencies": {}
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-define-property": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-errors": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-object-atoms": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+      "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+      "dependencies": {
+        "es-errors": "^1.3.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/get-intrinsic": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz",
+      "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.1",
+        "es-define-property": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.0.0",
+        "function-bind": "^1.1.2",
+        "get-proto": "^1.0.0",
+        "gopd": "^1.2.0",
+        "has-symbols": "^1.1.0",
+        "hasown": "^2.0.2",
+        "math-intrinsics": "^1.1.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/get-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+      "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+      "dependencies": {
+        "dunder-proto": "^1.0.1",
+        "es-object-atoms": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/gopd": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-symbols": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/hasown": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+      "dependencies": {
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
     },
     "node_modules/lodash": {
-      "version": "4.17.20",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
-      "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
+      "version": "4.17.21",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+    },
+    "node_modules/lodash._baseflatten": {
+      "version": "3.1.4",
+      "resolved": "https://registry.npmjs.org/lodash._baseflatten/-/lodash._baseflatten-3.1.4.tgz",
+      "integrity": "sha512-fESngZd+X4k+GbTxdMutf8ohQa0s3sJEHIcwtu4/LsIQ2JTDzdRxDCMQjW+ezzwRitLmHnacVVmosCbxifefbw==",
+      "dependencies": {
+        "lodash.isarguments": "^3.0.0",
+        "lodash.isarray": "^3.0.0"
+      }
+    },
+    "node_modules/lodash._basefor": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz",
+      "integrity": "sha512-6bc3b8grkpMgDcVJv9JYZAk/mHgcqMljzm7OsbmcE2FGUMmmLQTPHlh/dFqR8LA0GQ7z4K67JSotVKu5058v1A=="
+    },
+    "node_modules/lodash._bindcallback": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz",
+      "integrity": "sha512-2wlI0JRAGX8WEf4Gm1p/mv/SZ+jLijpj0jyaE/AXeuQphzCgD8ZQW4oSpoN8JAopujOFGU3KMuq7qfHBWlGpjQ=="
+    },
+    "node_modules/lodash._pickbyarray": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/lodash._pickbyarray/-/lodash._pickbyarray-3.0.2.tgz",
+      "integrity": "sha512-tHzBIfgugzI7HV0y8MJS1z/ryWDh8NyD6AV+so9vlplRnhD4qBuwoyDt7g241ad3F43YDFghCN+R3iaFd4Azvw=="
+    },
+    "node_modules/lodash._pickbycallback": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lodash._pickbycallback/-/lodash._pickbycallback-3.0.0.tgz",
+      "integrity": "sha512-DVP27YmN0lB+j/Tgd/+gtxfmW/XihgWpQpHptBuwyp2fD9zEBRwwcnw6Qej16LUV8LRFuTqyoc0i6ON97d/C5w==",
+      "dependencies": {
+        "lodash._basefor": "^3.0.0",
+        "lodash.keysin": "^3.0.0"
+      }
+    },
+    "node_modules/lodash.isarguments": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+      "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg=="
+    },
+    "node_modules/lodash.isarray": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+      "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ=="
+    },
+    "node_modules/lodash.keysin": {
+      "version": "3.0.8",
+      "resolved": "https://registry.npmjs.org/lodash.keysin/-/lodash.keysin-3.0.8.tgz",
+      "integrity": "sha512-YDB/5xkL3fBKFMDaC+cfGV00pbiJ6XoJIfRmBhv7aR6wWtbCW6IzkiWnTfkiHTF6ALD7ff83dAtB3OEaSoyQPg==",
+      "dependencies": {
+        "lodash.isarguments": "^3.0.0",
+        "lodash.isarray": "^3.0.0"
+      }
     },
     "node_modules/lodash.pick": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
-      "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=",
-      "deprecated": "This package is deprecated. Use destructuring assignment syntax instead."
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-3.1.0.tgz",
+      "integrity": "sha512-Y04wnFghB7l1dkYINfjdMLpeAGM1IYEjlsGFxvjeewCbVQUlD9jw3M20ThuNrsf6yGmuPLwj60PKP+D6gZ+o2w==",
+      "deprecated": "This package is deprecated. Use destructuring assignment syntax instead.",
+      "dependencies": {
+        "lodash._baseflatten": "^3.0.0",
+        "lodash._bindcallback": "^3.0.0",
+        "lodash._pickbyarray": "^3.0.0",
+        "lodash._pickbycallback": "^3.0.0",
+        "lodash.restparam": "^3.0.0"
+      }
+    },
+    "node_modules/lodash.restparam": {
+      "version": "3.6.1",
+      "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
+      "integrity": "sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw=="
+    },
+    "node_modules/math-intrinsics": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+      "engines": {
+        "node": ">= 0.4"
+      }
     },
     "node_modules/moment": {
-      "version": "2.27.0",
-      "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz",
-      "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==",
+      "version": "2.30.1",
+      "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
+      "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
       "engines": {
         "node": "*"
       }
     },
+    "node_modules/object-inspect": {
+      "version": "1.13.4",
+      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
+      "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/prettier": {
       "version": "1.12.1",
       "resolved": "http://registry.npm.taobao.org/prettier/download/prettier-1.12.1.tgz",
@@ -48,15 +274,91 @@
       }
     },
     "node_modules/qs": {
-      "version": "6.9.4",
-      "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz",
-      "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==",
+      "version": "6.14.0",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
+      "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
+      "dependencies": {
+        "side-channel": "^1.1.0"
+      },
       "engines": {
         "node": ">=0.6"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
+    },
+    "node_modules/side-channel": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
+      "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "object-inspect": "^1.13.3",
+        "side-channel-list": "^1.0.0",
+        "side-channel-map": "^1.0.1",
+        "side-channel-weakmap": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/side-channel-list": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
+      "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "object-inspect": "^1.13.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/side-channel-map": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+      "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+      "dependencies": {
+        "call-bound": "^1.0.2",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.5",
+        "object-inspect": "^1.13.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/side-channel-weakmap": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+      "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+      "dependencies": {
+        "call-bound": "^1.0.2",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.5",
+        "object-inspect": "^1.13.3",
+        "side-channel-map": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/weixin-js-sdk": {
+      "version": "1.6.5",
+      "resolved": "https://registry.npmjs.org/weixin-js-sdk/-/weixin-js-sdk-1.6.5.tgz",
+      "integrity": "sha512-Gph1WAWB2YN/lMOFB/ymb+hbU/wYazzJgu6PMMktCy9cSCeW5wA6Zwt0dpahJbJ+RJEwtTv2x9iIu0U4enuVSQ=="
     }
   }
 }

+ 3 - 3
jp-mobile/package.json

@@ -5,12 +5,12 @@
   "main": "main.js",
   "dependencies": {
     "lodash": "^4.17.20",
-    "lodash.pick": "^4.4.0",
+    "lodash.pick": "^3.1.0",
     "moment": "^2.27.0",
     "prettier": "^1.12.1",
-    "qs": "^6.9.4"
+    "qs": "^6.9.4",
+    "weixin-js-sdk": "^1.6.5"
   },
-  "devDependencies": {},
   "scripts": {
     "test": "echo \"Error: no test specified\" && exit 1"
   },

+ 5 - 1
jp-mobile/pages.json

@@ -54,6 +54,10 @@
 			"path": "pages/comList/comList",
 			"style": {}
 		},
+		{
+			"path": "pages/index/AudioToWord",
+			"style": {}
+		},
 		{
 			"path": "pages/comInfo/comInfo",
 			"style": {}
@@ -406,7 +410,7 @@
 				"ly-tree-node": "/components/ly-tree/ly-tree-node"
 			},
 		"navigationBarBackgroundColor": "#0081ff",
-		"navigationBarTitleText": "潘黄街道楼宇数字园区综合平台",
+		"navigationBarTitleText": "盐都区工业企业产品发布平台",
 		"navigationStyle": "custom",
 		"navigationBarTextStyle": "white"
 	},

+ 230 - 152
jp-mobile/pages/comEdit/comEdit.vue

@@ -22,7 +22,7 @@
 			</swiper-item>			
 		</swiper>
 		
-		<form @submit="formSubmit" class="cu-list menu">
+		<form class="cu-list menu">
 			
 			<view class="show1">
 				
@@ -30,7 +30,7 @@
 					<view class="text1">
 						 企业名称
 					</view>
-					<view class="text2">
+					<view class="text2" @click="goToCompany(inputForm.name)">
 						 {{inputForm.name}}
 					</view>				
 				</view>
@@ -41,7 +41,7 @@
 					</view>
 					<input v-model="inputForm.des1"  :disabled="ischeck"></input> -->
 					<view class="text1">
-						 负责人
+						 企业负责人
 					</view>
 					<view class="text3">
 						 {{inputForm.lxr}}      <view v-if="inputForm.phone!=''"> ( </view>
@@ -57,7 +57,7 @@
 					<input v-model="inputForm.industry"  :disabled="ischeck"></input> -->
 					
 					<view class="text1">
-						 联系干部
+						 板块负责人
 					</view>
 					<view class="text3">
 						 {{inputForm.bz5}}      <view v-if="inputForm.bz6!=''"> ( </view>
@@ -76,55 +76,88 @@
 			
 			
 			<view class="textbg">
-				<view class="text1">
+				<view class="text12">
 					 属地
 				</view>
-				<view class="text2">
+				<view class="text22">
 					 {{inputForm.des1}}
 				</view>				
 			</view>
 			
 			<view class="textbg">
-				<view class="text1">
+				<view class="text12">
 					 所属行业
 				</view>
-				<view class="text2">
+				<view class="text22">
 					 {{inputForm.industry}}
 				</view>				
 			</view>
 			
 			<view class="textbg">
-				<view class="text1">
+				<view class="text12">
 					 去年销售
 				</view>
-				<view class="text2">
+				<view class="text22">
 					 {{inputForm.des3}}
 				</view>				
 			</view>
 			
+			<view class="titlebg2" style="margin-top:10rpx ;">
+				<view class="titlet1" ></view>
+				<view class="titlet2" >主导产品一</view>								
+			</view>
+			
 			<view class="textbg">
-				<view class="text1">
-					 主导产品
+				<view class="text12">
+					 产品名称
+				</view>
+				<view class="text22">
+					 {{inputForm.bz1}}
+				</view>				
+			</view>
+			
+			<view class="textbg" >
+				<view class="text12">
+					 产业链上下游
 				</view>
-				<view class="text2">
-					 {{text1}}
+				<view class="text22">
+					 {{inputForm.bz2}}
 				</view>				
 			</view>
 			
-			<view class="textbg" style="padding-bottom: 50rpx;">
-				<view class="text1">
-					 
+			<view style="height: 50rpx;background-color: white;"></view>
+			
+			<view class="titlebg2" style="margin-top:10rpx ;" v-if="inputForm.bz3!=''&&inputForm.bz3!=undefined">
+				<view class="titlet1" ></view>
+				<view class="titlet2" >主导产品二</view>								
+			</view>
+			
+			<view class="textbg" v-if="inputForm.bz3!=''&&inputForm.bz3!=undefined">
+				<view class="text12">
+					产品名称
 				</view>
-				<view class="text2">
-					 {{text2}}
+				<view class="text22">
+					 {{inputForm.bz3}}
 				</view>				
 			</view>
+			
+			<view class="textbg" v-if="inputForm.bz3!=''&&inputForm.bz3!=undefined" >
+				<view class="text12">
+					 产业链上下游
+				</view>
+				<view class="text22">
+					 {{inputForm.bz4}}
+				</view>				
+			</view>
+			
+			<view v-if="inputForm.bz3!=''&&inputForm.bz3!=undefined" style="height: 50rpx;background-color: white;"></view>
+
 					
 			
 			<view style="height: 40rpx;"></view>
 
 
-			<view class="padding-xl" v-if="isadmin">
+			<view class="padding-xl" v-if="isadmin&&inputForm.des6=='1'">
 				<button @click="sharezz" class="cu-btn block bg-blue margin-tb-sm lg">分享此企业账号</button>
 			</view>
 		</form>
@@ -132,9 +165,8 @@
 </template>
 
 <script>
-	var graceChecker = require("@/common/graceChecker.js");
-	import revenueListService from '@/api/revenue/revenueListService'
 	import loginService from '@/api/auth/loginService.js'
+	import { wxShare } from "@/common/wxutils.js";
 	export default {
 		onShow() {
 			//this.$auth.checkLogin()
@@ -177,6 +209,7 @@
 					bz5: '',
 					bz6: '',
 					des5: '',
+					des6: '',
 					des7: '',
 					des8: '',
 					des9: '',
@@ -200,13 +233,12 @@
 		onLoad(query) {
 			this.isLogin=this.$auth.checkisLogin();
 			this.username=this.$auth.getUserInfo();
-			if(this.username!=undefined&&this.username!=''&&this.username!=null){
+			if(this.username!=undefined&&this.username!=''&&this.username!=null&&this.isLogin!=null){
 				if(this.username.loginName=='admin'){
 					this.isadmin=true;
 				}
 			}
 			
-			console.log("是否登录:"+this.username.loginName);
 			if (query && query.ischeck) {
 				this.ischeck = true
 				this.title = "查看企业信息";
@@ -216,6 +248,8 @@
 			}
 			this.getComById(query)
 			
+
+			
 		},
 		methods: {
 			getParkList(query) {
@@ -272,21 +306,128 @@
 			//账号分享
 			sharezz(){
 				
-				if (navigator.share) {
-				  navigator.share({
-					title: '分享标题',
-					text: '分享的文本内容',
-					url: 'https://example.com'
-				  }).then(() => {
-					console.log('分享成功');
-				  })
-				  .catch(console.error);
-				} else {
-				  console.log('当前浏览器不支持分享功能');
-				}
+				loginService.getloginstr(this.inputForm.phone).then(({
+					data
+				}) => {
+					//未登录
+					if(data.Id=='0'){
+						uni.showModal({
+							title: '您无权限分享账号,请联系管!',
+							showCancel: true,
+							success: (res) => {
+								
+							}
+						});
+												
+					}else{
+						
+						//this.weixin(data);
+						
+						const textArea = document.createElement("textarea");
+						textArea.value = 'https://miniapp.huidutech.com.cn/yd_qycpfbH5/#/pages/index/index?loginid='+data.Id;
+						document.body.appendChild(textArea);
+						textArea.focus();
+						textArea.select();
+						try {
+						  document.execCommand('copy');
+						  uni.showModal({
+						  	title: '已将登录链接复制到剪切板,直接打开微信好友粘贴分享!',
+						  	showCancel: true,
+						  	success: (res) => {
+						  		
+						  	}
+						  });
+						} catch (err) {
+						  console.error('Could not copy text', err);
+						  uni.showModal({
+						  	title: '当前不支持分享功能!',
+						  	showCancel: true,
+						  	success: (res) => {
+						  		
+						  	}
+						  });
+						} finally { 
+						  document.body.removeChild(textArea); 
+						}
+					}
+					
+				}).catch((e) => {
+				
+				})
+				
+				
+				
+
+				
+				  
+				
+				
+				
 				
 			},
 			
+			
+			// async initUser() {
+			//       const { data = {} } = await api.fetchUserInfo();
+			//       if (Object.keys(data).length > 0) {
+			//         // 设置用户基本信息
+			//         this.setUser(data);
+			//         const browser = window.navigator.userAgent.toLowerCase();
+			//         //匹配browser中是否含有MicroMessenger字符串
+			//         if (browser.match(/MicroMessenger/i) == "micromessenger") {
+			//           this.weixin(data);
+			//         } else {
+			//           const params = new URLSearchParams(window.location.search);
+			//           const id = params.get("id");
+			//           if (!id || (id && id !== data.uid)) {
+			//             // 如果不是微信浏览器,则跳转页面带id后缀
+			//             const url_a = window.location.origin;
+			//             window.location.href = url_a + "?id=" + data.uid;
+			//           }
+			//         }
+			//       }
+			//     },
+			    async weixin(data) {
+
+			      try {
+
+			        if ( data) {
+			          //微信加签
+			          var obj = {
+			            appId: data.appid,
+			            nonceStr: data.nonceStr,
+			            signature: data.signature,
+			            timestamp: data.timestamp,
+			          }
+			          //分享数据,这段主要是为了在hash模式下分享出去的链接不被浏览器截取,保证完全把链接分享出去(link的链接可以自己拼,无须与当前页面的后缀参数之类的内容完全一致)
+			          let shareData = {
+			            title: process.env.VUE_APP_TITLE,
+			            desc: process.env.VUE_APP_DESCRIPTION,
+			            imgUrl: process.env.VUE_APP_IMAGE,
+			            link: 'https://miniapp.huidutech.com.cn/yd_qycpfbH5/pages/index/index?loginid='+data.Id ,
+			          };
+					  
+					  
+			          //引用
+			          wxShare(obj, shareData);
+					  
+			        } else {
+					  uni.showModal({
+					  	title: '获取sdk参数失败!',
+					  	showCancel: true,
+					  	success: (res) => {
+					  		
+					  	}
+					  });
+			        }
+			      } catch (err) {
+			        //
+			      } finally {
+			        //
+			      }
+			    },
+			
+			
 			setData(data){
 				this.inputForm = this.recover(this.inputForm, data)
 				
@@ -298,26 +439,41 @@
 				}
 			},
 			
+			goToCompany(companyName) {
+				  //https://www.qcc.com/web/search?key=
+					
+				  window.open("https://www.qcc.com/web/search?key="+companyName);
+			      //window.location.href = `https://www.qcc.com/company/${encodeURIComponent(companyName)}`;
+			},
 			
 			call1(){
-				//未登录
-				if(this.isLogin==null){
-					uni.showModal({
-						title: '您还未登录,是否跳转登录页面?',
-						showCancel: true,
-						success: (res) => {
-							if (res.confirm) {
+				
+				uni.navigateTo({
+					url: '/pages/index/AudioToWord'
+				})
+				
+				// uni.navigateTo({
+				// 	url: '/pages/comList/comList'
+				// })
+				
+				// //未登录
+				// if(this.isLogin==null){
+				// 	uni.showModal({
+				// 		title: '您还未登录,是否跳转登录页面?',
+				// 		showCancel: true,
+				// 		success: (res) => {
+				// 			if (res.confirm) {
 								
-								uni.reLaunch({
-									url: '/pages/login/login'
-								})
+				// 				uni.reLaunch({
+				// 					url: '/pages/login/login'
+				// 				})
 								
-							}
-						}
-					});
-				}else{
-					window.location.href = 'tel:'+this.inputForm.phone;
-				}
+				// 			}
+				// 		}
+				// 	});
+				// }else{
+				// 	window.location.href = 'tel:'+this.inputForm.phone;
+				// }
 								
 			},
 			
@@ -342,105 +498,12 @@
 				}
 			},
 			
-			changeLYId(e){
-				let index = e.detail.value
-				this.lyIndex = index
-				console.log(index, '===========>index')
-				this.inputForm.des1 = this.parkList[index].value
-				console.log(this.inputForm.des1, '===========>index')
-			},
 
 
 
 
-			formSubmit: function(e) {
-				//定义表单规则
-				var rule = [{
-						name: "name",
-						checkType: "notnull",
-						checkRule: "",
-						errorMsg: "请填写企业名称"
-					},{
-						name: "industry",
-						checkType: "notnull",
-						checkRule: "",
-						errorMsg: "请选择企业类型"
-					},{
-						name: "des1",
-						checkType: "notnull",
-						checkRule: "",
-						errorMsg: "请选择所属楼宇"
-					},
-					{
-						name: "entryTime",
-						checkType: "notnull",
-						checkRule: "",
-						errorMsg: "请选择入驻时间"
-					},
-					{
-						name: "floor",
-						checkType: "notnull",
-						checkRule: "",
-						errorMsg: "请填写楼层"
-					},
-					{
-						name: "des3",
-						checkType: "notnull",
-						checkRule: "",
-						errorMsg: "请填写房间号"
-					},
-					{
-						name: "lxr",
-						checkType: "notnull",
-						checkRule: "",
-						errorMsg: "请填写联系人"
-					},
-					{
-						name: "phone",
-						checkType: "notnull",
-						checkRule: "",
-						errorMsg: "请填写联系人手机"
-					},
-					{
-						name: "htStime",
-						checkType: "notnull",
-						checkRule: "",
-						errorMsg: "请填写合约起始时间"
-					},
-					{
-						name: "htEtime",
-						checkType: "notnull",
-						checkRule: "",
-						errorMsg: "请填写合约到期时间"
-					},
 
-				];
-				//进行表单检查
-				var formData = this.inputForm;
-				var checkRes = graceChecker.check(formData, rule);
-				console.log(checkRes, '===================>checkRes')
-				if (checkRes) {
-					uni.showLoading()
-					loginService.comSave(this.inputForm).then(({
-						data
-					}) => {
-						uni.showToast({
-							title: data,
-							icon: "success"
-						});
-						uni.navigateTo({
-							url: '/pages/comList/comList'
-						})
-					}).catch((e) => {
-
-					})
-				} else {
-					uni.showToast({
-						title: graceChecker.error,
-						icon: "none"
-					});
-				}
-			}
+			
 		}
 	}
 </script>
@@ -454,12 +517,12 @@
 	
 	.swiper {
 		width: 750rpx;
-		height: 360rpx;
+		height: 310rpx;
 	}
 	
 	.swiper-item {
 		width: 750rpx;
-		height: 360rpx;
+		height: 310rpx;
 		background-color: aliceblue;
 	}
 	.show1{
@@ -474,22 +537,37 @@
 	.text1{
 		width: 200rpx;
 		margin-left: 30rpx;
-		color: #393939;
+		color: #333333;
 		font-size: 30rpx;
 	}
-	
+	.text12{
+		width: 200rpx;
+		margin-left: 30rpx;
+		color: #000000;
+		font-size: 29rpx;
+	}
+		
 	.text2{
 		flex: 1;
-		color: #393939;
+		color: #000000;
 		font-size: 30rpx;
 		padding-bottom: 2rpx;
 	}
+	.text22{
+		flex: 1;
+		color: #666666;
+		font-size: 29rpx;
+		padding-bottom: 2rpx;
+	}
+	
+	
 	.text3{
 		display: flex;
+		color: #000000;
 	}
 	.phone{
 		display: flex;
-		color: #00aaff;
+		color: #1E8AD7;
 		padding-left: 5rpx;
 		padding-right: 5rpx;
 		font-size: 30rpx;

+ 5 - 10
jp-mobile/pages/comList/comList.vue

@@ -65,12 +65,12 @@
 					
 				</view>
 			</mescroll-body>
-			<uni-fab :pattern=" {
+			<!-- <uni-fab :pattern=" {
 							color: '#7A7E83',
 							backgroundColor: '#fff',
 							selectedColor: '#007AFF',
 							buttonColor: '#007AFF'
-						}" horizontal="right" vertical="bottom" @fabClick="add" v-if="stype == 5"></uni-fab>
+						}" horizontal="right" vertical="bottom" @fabClick="add" ></uni-fab> -->
 		</view>
 	</view>
 </template>
@@ -113,17 +113,12 @@
 				loading: false,
 				parkId: '',
 				parkList: [],
-				stype: '',  // 企业 => 3  楼宇 => 2  园区 => 1  zfadmin => 4  admin=> 5
 			}
 		},
 		created() {
-			this.stype = uni.getStorageSync('stype')
-			if (this.stype != 3) {
-				this.getParkList()
-				this.getParkList2()
-			}
-			
-			this.$dictUtils.getDictList('industrial_type')
+
+			this.getParkList()
+			this.getParkList2()			
 		},
 		methods: {
 			

+ 75 - 0
jp-mobile/pages/index/AudioToWord.vue

@@ -0,0 +1,75 @@
+<template>
+  <div>
+    <el-page-header @back="goBack" content="语音转文字"/>
+    <div class="bank"></div>
+    <el-card header="语音转文字">
+      <el-card>
+        <el-input :readonly="true" id="word" v-model="word"></el-input>
+      </el-card>
+      <el-card>
+        <el-button type="primary" @click="audioCHangeWord"><span v-if="isListening">语音识别中...</span><span v-else>语音识别</span></el-button>
+      </el-card>
+    </el-card>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "AudioToWord",
+  data() {
+    return {
+      word: "",
+      isListening: false, // 判断是否在语音监听中
+    }
+  },
+  methods: {
+    audioCHangeWord() { 
+      var that = this;
+      that.word = "";
+      // 创建SpeechRecognition对象
+      // eslint-disable-next-line no-undef
+      var recognition = new webkitSpeechRecognition();
+      console.log("recognition1", recognition);
+      if (!recognition) { 
+        // eslint-disable-next-line no-undef
+        recognition = new SpeechRecognition();
+      }
+      console.log("recognition2", recognition);
+      console.log(11);
+      // 设置语言
+      recognition.lang = 'zh-CN';
+      console.log(22);
+      // 开始语音识别
+      recognition.start();
+      that.isListening = true;
+      console.log(33);
+      // 监听识别结果
+      recognition.onresult = function (event) {
+        var result = event.results[0][0].transcript;
+        console.log("监听结果:", result);
+        that.word = result;
+      };
+
+      // 监听错误事件
+      recognition.onerror = function (event) {
+        that.isListening = false;
+        that.$message("监听语音失败:"+event.error);
+        console.error(event.error);
+      };
+      // 监听结束事件(包括识别成功、识别错误和用户停止)
+      recognition.onend = function () {
+        that.isListening = false;
+        console.log("语音识别停止");
+      };
+
+    },
+    goBack() {
+      this.$router.push({ path: "/entry" })
+    }
+  }
+}
+</script>
+
+<style>
+
+</style>

+ 564 - 23
jp-mobile/pages/index/index.vue

@@ -1,8 +1,9 @@
 <template name="apps">
 	<view>
-		<cu-custom bgColor="bg-blue">
-			<block slot="content">盐都区工业企业产品发布平台</block>
-		</cu-custom>
+
+		<!-- <view style="background-color: #36A7F3;height: 80rpx;display: flex;align-items: center;justify-content: center;">
+			<view style="color: white;font-size: 16px; " >盐都区工业企业产品发布平台</view>
+		</view> -->
 
 		<swiper class="swiper" circular :indicator-dots="true" :autoplay="true" :interval="3000" :duration="800">
 			<swiper-item>
@@ -47,31 +48,137 @@
 				</view>
 			</view>
 			
-			<view class="center-box">
+			<!-- <view class="center-box">
 				<view class="kuai-text">快捷入口</view>
 				
 				<view class="center-left-box">
-					<view class="btn-Imbox" >
+					<!-- <view class="btn-Imbox" @click="totongxunlu2">
 						<image  class="center-img" src="/static/img/icon4.png"></image>
 						<p>新增企业</p>
-					</view>
+					</view> 
 					<view class="btn-Imbox" @click="totongxunlu">
 						<image  class="center-img" src="/static/img/icon3.png"></image>
 						<p>企业通讯录</p>
 					</view>
 
-					<view class="btn-Imbox">
-						
+					<view class="btn-Imbox" v-if="isLogin!=null" @click="outlogin">
+						<image  class="center-img2" src="/static/img/icon_logout.png"></image>
+						<p>退出登录</p>
 					</view>
 					<view class="btn-Imbox">
 						
 					</view>
 													
 				</view>
+			</view> -->
+			
+			
+			<view :style="[{top:CustomBar + 'px'}]">
+				<view class="search-box">
+					<view class="search-box1">
+						<view class="choose-box">
+												
+							<input type="text"  placeholder="输入或选择属地" v-model="searchForm.des1" confirm-type="search" style="padding-left: 28rpx;"
+							></input>
+							
+							<jp-picker class="choose-boxp" v-model="searchForm.des1" rangeKey="label" rangeValue="value"
+								:range="parkList2"  >
+							</jp-picker>
+						</view>
+						<view class="choose-box">
+							
+							<input type="text"  placeholder="输入或选择行业" v-model="searchForm.industry" confirm-type="search" style="padding-left: 28rpx;"
+							></input>
+							
+							<jp-picker class="choose-boxp" v-model="searchForm.industry" rangeKey="label" rangeValue="value"
+								:range="parkList"  >
+							</jp-picker>
+							
+						</view>
+					</view>
+					
+					<view class="choose-box2" style="margin-top: 20rpx;">
+						<view class="choose-box3">
+												
+							<!-- <view style="width: 520rpx;">
+								<input type="text"  placeholder="输入或选择产业链上下游关键词" v-model="searchForm.bz2" confirm-type="search"
+								></input>
+							</view> -->
+							
+							<!-- <jp-picker style="width: 120rpx;" v-model="searchForm.bz2" rangeKey="label" rangeValue="value"
+								:range="parkList3"  >
+							</jp-picker> -->
+							
+							<view style="width: 300rpx;display: flex;align-items: center;color: #666666;font-size: 33rpx;">
+								产业链上下游:
+							</view>
+							
+							<DoublePicker
+							      :column1Label="''"
+							      :column2Label="''"
+							      :column1Data="parkList3"
+							      :column2Data="parkList4"
+							      v-model="ddd1"
+							      @update:column2Data="updateCities"
+							    />
+
+							
+						</view>
+						
+					</view>
+							
+					<view class="choose-box2" style="margin-top: 20rpx;">
+						<view style="width: 520rpx;">
+							<input type="text"  placeholder="输入关键词产品或企业名称" v-model="searchForm.name" confirm-type="search"
+							></input>
+						</view>
+						
+						<text style="padding-left: 40rpx;flex: 1;" class="cuIcon-search color-white" @click="doSearch"></text>
+					</view>
+														
+				</view>
+				
+				
+				
+				<mescroll-body ref="mescrollRef" @init="mescrollInit" @down="downCallback" :up="upOption" @up="upCallback">
+					<view class="cu-item" :class="modalName=='move-box-'+ index?'move-cur':''"
+						v-for="(item, index) in dataList" :key="index" @touchstart="ListTouchStart"
+						@touchmove="ListTouchMove" @touchend="ListTouchEnd" :data-target="'move-box-' + index">
+						
+						
+						<view class="item-box" @click="gotoBuildInfo(item.id)">
+							<view class="item-title">
+								
+								<view>
+									{{item.name}}
+								</view>
+			
+							</view>
+							<view class="item-line">
+								<view v-if="item.bz3!=''&&item.bz3!=undefined" class="item-name">{{item.bz1}}、{{item.bz3}}</view>		
+								<view v-if="item.bz3==''||item.bz3==undefined" class="item-name">{{item.bz1}}</view>	
+							</view>
+							<view class="item-line">
+								<view class="item-name2">{{item.industry}}</view>
+								<view class="item-name3">{{item.des1}}</view>
+							</view>
+			
+						</view>
+											
+						
+					</view>
+				</mescroll-body>
+				<uni-fab :pattern=" {
+								color: '#7A7E83',
+								backgroundColor: '#fff',
+								selectedColor: '#007AFF',
+								buttonColor: '#007AFF'
+							}" horizontal="right" vertical="bottom" @fabClick="add" v-if="stype == 5"></uni-fab>
 			</view>
 			
 			
 			
+			
 		</view>
 
 
@@ -79,34 +186,232 @@
 </template>
 
 <script>
-	import loginService from "@/api/auth/loginService"
+	import loginService from "@/api/auth/loginService";
+	import uniFab from '@/components/uni-fab/uni-fab.vue';
+	import DoublePicker from '@/components/DoublePicker/DoublePicker.vue'
+	import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js";
+	import MescrollMoreItemMixin from "@/components/mescroll-uni/mixins/mescroll-more-item.js";
+	import {mapActions} from 'vuex'
 	export default {
+		mixins: [MescrollMixin, MescrollMoreItemMixin], // 使用mixin (在main.js注册全局组件)
 		name: "apps",
+		components: {
+			uniFab,
+			DoublePicker
+		},
 		data() {
 			return {
+				isLogin:"",
 				pageInfo: {},
+				loginid:"",
 				
 				stype: "", // 企业 => 3  楼宇 => 2  园区 => 1  zfadmin => 4  admin=> 5
+				
+				searchForm: {
+					des1:"",
+					industry:"",
+					name:"",
+				},
+				
+				curWord: "", //当前搜索关键词
+				dataList: [], // 数据列表
+				modalName: null,
+				tablePage: {
+					total: 0,
+					currentPage: 1,
+					pageSize: 10,
+					orders: []
+				},
+				loading: false,
+				parkId: '',
+				parkList: [],
+				parkList2: [],
+				parkList3: [],
+				parkList4: [],
+				ddd1:"" ,
 			};
 		},
+		onLoad(query) {
+			if(query!=undefined&&query!=null&&query!=''){
+				if(query.loginid!=undefined){
+					this.loginid=query.loginid
+					this.autoLogin();
+				}			
+			}			
+		},
 		onShow() {
-			
+			this.isLogin=this.$auth.checkisLogin();
 		},
 		
 		created() {
-			//this.$auth.checkLogin()
-			//this.getRole()
 			this.getPageInfo();
+			this.getParkList()
+			this.getParkList2()	
+			this.getParkList3()	
 		},
 
 
 		methods: {
+			...mapActions(['refreshUserInfo']),
+			
+			//选择产业链上下游
+			getParkList3() {
+				loginService.getIndustryChainList({
+				}).then(({
+					data
+				}) => {
+					// this.parkList3 = data.map((item) => {
+					// 	return {
+					// 		label: item.bz2,
+					// 		value: item.bz2
+					// 	}
+					// });
+					this.parkList3=[{label: '上游',value: '上游'},{label: '中游',value: '中游'},{label: '下游',value: '下游'}]
+					
+					this.parkList4 = data
+					    .map((item) => {
+					        const match = item.bz2.match(/\((.*?)\)/); // 匹配括号内的内容
+					        if (match) {
+					            return {
+					                label: match[1], // 括号内的内容
+					                value: match[1] // 括号内的内容
+					            };
+					        }
+					        return null; // 如果没有括号,返回 null
+					    })
+					    .filter((item) => item !== null) // 过滤掉 null 值
+						.reduce((acc, current) => {
+							// 使用 Set 去重
+							const existingItem = acc.find((item) => item.value === current.value);
+							if (!existingItem) {
+							  acc.push(current);
+							}
+							return acc;
+						  }, []);
+					
+					this.parkList3.unshift({
+					    label: "全部",
+					    value: ""
+					});
+					this.parkList4.unshift({
+					    label: "全部",
+					    value: ""
+					});
+					
+				}).catch(e => {
+					console.log(e)
+				})
+			},
+			
+			//选择属地
+			getParkList2() {
+				loginService.getAreaList({
+				}).then(({
+					data
+				}) => {
+					this.parkList2 = data.map((item) => {
+						return {
+							label: item.des1,
+							value: item.des1
+						}
+					})
+					this.parkList2.unshift({
+					    label: "全部",
+					    value: ""
+					});
+				}).catch(e => {
+					console.log(e)
+				})
+			},
+			
+			//选择行业
+			getParkList() {
+				loginService.getHyList({
+				}).then(({
+					data
+				}) => {
+					this.parkList = data.map((item) => {
+						return {
+							label: item.industry,
+							value: item.industry
+						}
+					})
+					this.parkList.unshift({
+					    label: "全部",
+					    value: ""
+					});
+				}).catch(e => {
+					console.log(e)
+				})
+			},
+			
+			/*获取数据列表 */
+			upCallback(page) {
+				this.loading = true
+				loginService.comlist({
+					current: page.num,
+					size: page.size,
+					name: this.curWord,
+					des1: this.parkId,
+					orders: [{ column: 'a.create_date', asc: false }],
+					...this.searchForm
+				}).then(({
+					data
+				}) => {
+					let curPageData = data.records
+					this.mescroll.endBySize(curPageData.length, data.total);
+					//如果是第一页需手动制空列表
+					if (page.num == 1)
+						this.dataList = [];
+					//追加新数据
+					this.dataList = this.dataList.concat(curPageData);
+				}).catch(e => {
+					//联网失败, 结束加载
+					this.mescroll.endErr();
+				})
+			},
+			
+			gotoBuildInfo(id) {
+				uni.navigateTo({
+					url: `/pages/comEdit/comEdit?id=${id}&ischeck=1`
+				})
+			},
+			
+			updateCities(newCities) {
+			      this.cities = newCities;
+			},
+			
+			
+			// 搜索
+			doSearch() {				
+				if(this.ddd1.column2!=''&&this.ddd1!=''){
+					this.searchForm.bz2=this.ddd1.column1+'('+this.ddd1.column2+')';
+				}else if(this.ddd1!=''){
+					this.searchForm.bz2=this.ddd1.column1;
+				}
+				
+				this.dataList = []; // 先清空列表,显示加载进度
+				this.mescroll.resetUpScroll();
+			},
+			
 			totongxunlu(){
 				uni.navigateTo({
 					url: '/pages/comList/comList'
 				})
 			},
 			
+			totongxunlu2(){
+				uni.showModal({
+					title: '功能暂未开放,请至后台导入!',
+					showCancel: true,
+					success: (res) => {
+						
+					}
+				});
+			},
+			
+			
+			
 			getPageInfo() {
 			  loginService.InfoStatistics({}).then(({ data }) => {
 			    this.pageInfo = data;
@@ -114,6 +419,17 @@
 			
 			
 			},
+			
+			autoLogin(){
+			  	console.log("登录id"+this.loginid);			
+				loginService.loginid( this.loginid).then(({data}) => {
+				  this.$store.commit('SET_TOKEN',data.token);
+				  this.refreshUserInfo();
+				  
+				}).catch(e => {
+				  console.error(e)
+				})	
+			},
 
 			getRole() {
 				let userInfo = uni.getStorageSync('WMS-userinfo')
@@ -144,6 +460,18 @@
 				
 			},
 
+            outloginset(){				
+				// loginService.logout().then(({
+				// 	data
+				// }) => {
+				// 	this.$store.commit('logout');
+				// 	uni.clearStorage();
+					
+				// })
+				
+				this.$store.commit('logout');
+				uni.clearStorage();
+			},
 
 			outlogin() {
 				uni.showModal({
@@ -152,18 +480,38 @@
 					success: (res) => {
 						if (res.confirm) {
 							uni.showLoading()
-							loginService.logout().then(({
-								data
-							}) => {
-								this.$store.commit('logout');
-								uni.clearStorage();
-								uni.reLaunch({
-									url: '/pages/login/login'
-								})
+							this.outloginset();
+							uni.reLaunch({
+								url: '/pages/login/login'
 							})
 						}
 					}
 				});
+			},
+			tces() {
+				uni.navigateTo({
+					url: '/pages/index/AudioToWord'
+				})
+			},
+			
+			// ListTouch触摸开始
+			ListTouchStart(e) {
+				this.listTouchStart = e.touches[0].pageX
+			},
+			
+			// ListTouch计算方向
+			ListTouchMove(e) {
+				this.listTouchDirection = e.touches[0].pageX - this.listTouchStart > -60 ? 'right' : 'left'
+			},
+			
+			// ListTouch计算滚动
+			ListTouchEnd(e) {
+				if (this.listTouchDirection == 'left') {
+					this.modalName = e.currentTarget.dataset.target
+				} else {
+					this.modalName = null
+				}
+				this.listTouchDirection = null
 			}
 		}
 	}
@@ -275,6 +623,14 @@
 		text-align: center;
 	}
 	
+	.center-img2{
+		width: 70rpx;
+		height: 70rpx;
+		margin-top: 10rpx;
+		margin-bottom: 20rpx;
+		text-align: center;
+	}
+	
 	.kuai-text{
 		color: #000000;
 		font-weight: 900;
@@ -303,12 +659,12 @@
 
 	.swiper {
 		width: 750rpx;
-		height: 360rpx;
+		height: 310rpx;
 	}
 
 	.swiper-item {
 		width: 750rpx;
-		height: 360rpx;
+		height: 310rpx;
 		background-color: aliceblue;
 	}
 
@@ -322,7 +678,7 @@
 	}
 
 	.content-box {
-		width: 337rpx;
+		width: 437rpx;
 		height: 200rpx;
 	}
 
@@ -344,4 +700,189 @@
 	.lines-white {
 		color: #0081ff !important;
 	}
+	
+	
+	
+	
+	.cu-bar .search-form {
+		background-color: white;
+	}
+	
+	
+	.item-box{
+		width: 710rpx;
+		background: #FFFFFF;
+		box-shadow: 0px 1px 3px 0px rgba(9,2,4,0.1);
+		border-radius: 10px;
+		padding-top: 20rpx;
+		padding-left: 38rpx;
+		padding-right: 10rpx;
+		margin-top: 20rpx;
+	}
+	
+	.item-title{
+		position: relative;
+		display: flex;
+		justify-content: space-between;
+		font-size: 30rpx;
+		color: #010101;
+		font-weight: bold;
+		align-items: center;
+	}
+	
+	.item-line{
+		display: flex;
+		height: 48rpx;
+		margin-top: 20rpx;
+
+	}
+	
+	.item-line2{
+		
+		height: 48rpx;
+		margin-top: 20rpx;
+	}
+	
+	.subtitle{
+		color: #E5880E;
+	}
+	
+	.item-name{
+		margin-top: 5rpx;
+		font-size: 29rpx;
+		color: #666666;
+	}
+	
+	.item-name2{
+		font-size: 29rpx;
+		color: #676D99;
+	}
+	
+	.item-name3{
+		display: flex;
+		width: 100%;
+		padding-right: 30rpx;
+		flex: 1;
+		justify-content: flex-end;
+		font-size: 29rpx;
+		color: #676D99;
+	}
+	
+	.item-content{
+		color: #1497EF;
+		font-size: 30rpx;
+	}
+	
+	.btn-box{
+		display: flex;
+	}
+	
+	.line-zs{
+		width: 2rpx;
+		height: 30rpx;
+		background: #36A7F3;
+	}
+	
+	.edit-botton{
+		width: 100rpx;
+		height: 48rpx;
+		line-height: 48rpx;
+		color: #fff;
+		font-size: 28rpx;
+		margin-right: 20rpx;
+		border-radius: 10rpx;
+		background: #5A9EE9;
+		text-align: center;
+	}
+	
+	.del-botton{
+		width: 100rpx;
+		height: 48rpx;
+		line-height: 48rpx;
+		color: #fff;
+		font-size: 28rpx;
+		margin-right: 20rpx;
+		border-radius: 10rpx;
+		background: #F27C85;
+		text-align: center;
+	}
+	
+	.color-white{
+		color: #808080;
+		font-size: 40rpx;
+		line-height: 60rpx;
+	}
+	
+	.search-box{
+
+		padding-left: 20rpx;
+		padding-right: 20rpx;	
+		padding-top: 20rpx;
+		margin-top: 20rpx;
+		width: 100%;
+		border-radius: 25rpx;
+		border-radius: 25rpx;		
+		background: #fff;
+		box-shadow: 0px 8px 16px 2px rgba(101, 101, 101, 0.2);
+		padding-bottom: 30rpx;
+		display: flex;
+		flex-wrap: wrap;
+	}
+	
+	.search-box1{
+		display: flex;
+	}
+	
+	
+	
+	.input-box{
+		background: #fff;
+		height: 65rpx;
+		width: 640rpx;
+		display: flex;
+		align-items: center;
+		border-radius: 30rpx;
+		padding-left: 30rpx;
+		margin-right: 20rpx;
+	}
+	
+	.input-boxinput{
+		height: 75rpx;
+		font-size: 15rpx;
+	}
+	
+	
+	
+	.choose-box{
+		background: #fff;
+		width: 325rpx;
+		border-radius: 23rpx;
+		height: 70rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		margin-right: 20rpx;
+		border: 1rpx  solid #808080;
+	}
+	
+	.choose-box2{
+		background: #fff;
+		width: 100%;
+		border-radius: 23rpx;
+		height: 70rpx;
+		display: flex;
+		padding-left: 29rpx;
+		align-items: center;
+		border: 1rpx  solid #808080;
+	}
+	
+	.choose-box3{
+		display: flex;
+	}
+	
+	.choose-boxp{
+		font-size: 32rpx;
+		width: 80rpx;
+	}
+	
 </style>

BIN
jp-mobile/static/img/icon_logout.png


BIN
jp-mobile/static/img/sousuo.png


BIN
jp-mobile/static/img/titlebg.jpg