Просмотр исходного кода

Merge remote-tracking branch 'origin/release-20170915' into release-20170915

wangyc 8 лет назад
Родитель
Сommit
2fec4d8540
31 измененных файлов с 923 добавлено и 228 удалено
  1. 1 1
      src/main/java/com/uas/platform/b2c/common/base/api/FileUploadController.java
  2. 2 2
      src/main/java/com/uas/platform/b2c/common/base/api/UploadController.java
  3. 35 0
      src/main/java/com/uas/platform/b2c/common/base/constant/FileUrl.java
  4. 10 2
      src/main/java/com/uas/platform/b2c/common/base/service/FileService.java
  5. 8 0
      src/main/java/com/uas/platform/b2c/common/base/service/ImageService.java
  6. 71 48
      src/main/java/com/uas/platform/b2c/common/base/service/impl/DFSImageServiceImpl.java
  7. 32 4
      src/main/java/com/uas/platform/b2c/common/base/service/impl/FileServiceImpl.java
  8. 351 0
      src/main/java/com/uas/platform/b2c/core/utils/HttpUtils.java
  9. 9 0
      src/main/java/com/uas/platform/b2c/fa/settlement/dao/BillDao.java
  10. 2 2
      src/main/java/com/uas/platform/b2c/logistics/dao/AddressTakeSelfDao.java
  11. 2 1
      src/main/java/com/uas/platform/b2c/logistics/service/impl/AddressTakeSelfServiceImpl.java
  12. 7 25
      src/main/java/com/uas/platform/b2c/prod/store/model/Qualification.java
  13. 25 6
      src/main/java/com/uas/platform/b2c/prod/store/service/impl/StoreApplyServiceImpl.java
  14. 0 1
      src/main/java/com/uas/platform/b2c/prod/store/service/impl/StoreInServiceImpl.java
  15. 9 0
      src/main/java/com/uas/platform/b2c/trade/order/controller/OrderController.java
  16. 7 0
      src/main/java/com/uas/platform/b2c/trade/order/service/OrderService.java
  17. 52 0
      src/main/java/com/uas/platform/b2c/trade/order/service/impl/OrderServiceImpl.java
  18. 5 0
      src/main/webapp/resources/js/common/query/order.js
  19. 12 4
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_home_ctrl.js
  20. 94 77
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_invoice_ctrl.js
  21. 59 0
      src/main/webapp/resources/js/usercenter/controllers/forstore/order_pay_ctrl.js
  22. 1 1
      src/main/webapp/resources/js/vendor/controllers/forstore/query_logistics_ctrl.js
  23. 2 2
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_deliveryRule_ctrl.js
  24. 2 2
      src/main/webapp/resources/view/admin/checkMoney/billInput.html
  25. 26 26
      src/main/webapp/resources/view/admin/trade/trade_invoicefromorder.html
  26. 4 4
      src/main/webapp/resources/view/prod/modal/edit-invoice-modal.html
  27. 3 3
      src/main/webapp/resources/view/usercenter/billInput.html
  28. 26 12
      src/main/webapp/resources/view/usercenter/forstore/buyer_invoice.html
  29. 62 1
      src/main/webapp/resources/view/usercenter/forstore/order_pay.html
  30. 2 2
      src/main/webapp/resources/view/vendor/forstore/vendor_component_batchapplylist.html
  31. 2 2
      src/main/webapp/resources/view/vendor/left_nav.html

+ 1 - 1
src/main/java/com/uas/platform/b2c/common/base/api/FileUploadController.java

@@ -49,7 +49,7 @@ public class FileUploadController {
 		for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
 			MultipartFile mf = entity.getValue();
 			try {
-				String path = fileService.save(mf.getOriginalFilename(), mf.getBytes());
+				String path = fileService.save(mf);
 				Map<String, Object> map = new HashMap<String, Object>();
 				map.put("path", path);
 				map.put("fileName", mf.getOriginalFilename());

+ 2 - 2
src/main/java/com/uas/platform/b2c/common/base/api/UploadController.java

@@ -43,9 +43,9 @@ public class UploadController {
         for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
             MultipartFile mf = entity.getValue();
             try {
-                IPicture picture = imageService.save(mf.getOriginalFilename(), mf.getBytes());
+                IPicture picture = imageService.uploadFile(mf);
                 pictures.add(picture);
-            } catch (IOException e) {
+            } catch (Exception e) {
                 e.printStackTrace();
             }
         }

+ 35 - 0
src/main/java/com/uas/platform/b2c/common/base/constant/FileUrl.java

@@ -0,0 +1,35 @@
+package com.uas.platform.b2c.common.base.constant;
+
+/**
+ * 文件服务器的基本链接
+ *
+ * @author yuj 2017-10-12 14:53
+ */
+public class FileUrl {
+
+    /**
+     * 文件上传
+     */
+    public final static String FILE_UPLOAD = "http://10.10.100.200:9999/file/upload";
+
+
+    /**
+     * 文件下载
+     */
+    public final static String FILE_DOWNLOAD = "http://10.10.100.200:9999/file/download";
+
+    /**
+     * 文件删除
+     */
+    public final static String FILE_DELETE = "http://10.10.100.200:9999/file/delete";
+
+    /**
+     * 文件信息
+     */
+    public final static String FILE_INFO = "http://10.10.100.200:9999/file/info";
+
+    /**
+     * 文件额外属性
+     */
+    public final static String FILE_METADATA = "http://10.10.100.200:9999/file/metadata";
+}

+ 10 - 2
src/main/java/com/uas/platform/b2c/common/base/service/FileService.java

@@ -1,6 +1,7 @@
 package com.uas.platform.b2c.common.base.service;
 
 import com.uas.platform.b2c.common.base.model.FileUpload;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * 文件上传
@@ -18,10 +19,17 @@ public interface FileService {
 
     /**
      * 保存文件
-     * @param fileName 文件名
-     * @param fileBytes 文件字节数组
+     * @param mf 需要上传的文件
      * @return 文件路径
      */
+    public String save(MultipartFile mf);
+
+    /**
+     * 用户上传文件
+     * @param fileName 文件名
+     * @param fileBytes 字节数组
+     * @return String
+     */
     public String save(String fileName, byte[] fileBytes);
 
 }

+ 8 - 0
src/main/java/com/uas/platform/b2c/common/base/service/ImageService.java

@@ -1,6 +1,7 @@
 package com.uas.platform.b2c.common.base.service;
 
 import com.uas.platform.b2c.common.base.model.IPicture;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.io.File;
 import java.util.List;
@@ -38,4 +39,11 @@ public interface ImageService {
 	 */
 	public IPicture save(String fileName, byte[] fileBytes);
 
+	/**
+	 * 保存图片
+	 * @param mf MultipartFile 文件的信息
+	 * @return
+	 * @throws Exception
+	 */
+    IPicture uploadFile(MultipartFile mf) throws Exception;
 }

+ 71 - 48
src/main/java/com/uas/platform/b2c/common/base/service/impl/DFSImageServiceImpl.java

@@ -1,61 +1,84 @@
 package com.uas.platform.b2c.common.base.service.impl;
 
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.FilenameUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
+import com.alibaba.fastjson.JSONObject;
 import com.uas.dfs.service.FileClient;
+import com.uas.platform.b2c.common.base.constant.FileUrl;
 import com.uas.platform.b2c.common.base.dao.DBPictureRepository;
 import com.uas.platform.b2c.common.base.model.DBPicture;
 import com.uas.platform.b2c.common.base.model.IPicture;
 import com.uas.platform.b2c.common.base.service.ImageService;
+import com.uas.platform.b2c.core.utils.FastjsonUtils;
+import com.uas.platform.b2c.core.utils.HttpUtils;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
 
 @Service
 public class DFSImageServiceImpl implements ImageService {
 
-	@Autowired
-	private FileClient fileClient;
-
-	@Autowired
-	private DBPictureRepository pictureRepository;
-
-	@Override
-	public List<DBPicture> save(List<File> files) {
-		List<DBPicture> pictures = new ArrayList<DBPicture>();
-		for (File file : files) {
-			try {
-				String fileUrl = fileClient.uploadImage(FileUtils.readFileToByteArray(file), file.length(),
-						FilenameUtils.getExtension(file.getName()), null);
-				pictures.add(new DBPicture(file.getName(), fileUrl, com.uas.platform.core.util.FileUtils.getImagePixel(file)));
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-		}
-		return pictureRepository.save(pictures);
-	}
-
-	@Override
-	public DBPicture save(File file) {
-		try {
-			String fileUrl = fileClient.uploadImage(FileUtils.readFileToByteArray(file), file.length(),
-					FilenameUtils.getExtension(file.getName()), null);
-			return pictureRepository.save(new DBPicture(file.getName(), fileUrl, com.uas.platform.core.util.FileUtils.getImagePixel(file)));
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
-
-	@Override
-	public IPicture save(String fileName, byte[] fileBytes) {
-		String fileUrl = fileClient.uploadImage(fileBytes, fileBytes.length, FilenameUtils.getExtension(fileName), null);
-		return pictureRepository.save(new DBPicture(fileName, fileUrl, com.uas.platform.core.util.FileUtils.getImagePixel(fileBytes)));
-	}
+    @Autowired
+    private FileClient fileClient;
+
+    @Autowired
+    private DBPictureRepository pictureRepository;
+
+    @Override
+    public List<DBPicture> save(List<File> files) {
+        List<DBPicture> pictures = new ArrayList<DBPicture>();
+        for (File file : files) {
+            try {
+                HttpUtils.Response response = HttpUtils.upload(FileUrl.FILE_UPLOAD, file, null);
+                if (response.getStatusCode() == 200) {
+                    JSONObject obj = FastjsonUtils.parseObject(response.getResponseText());
+                    String fileUrl = (String) obj.get("path");
+                    pictures.add(new DBPicture(file.getName(), fileUrl, com.uas.platform.core.util.FileUtils.getImagePixel(file)));
+                } else {
+                    throw new IllegalStateException(response.getResponseText());
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return pictureRepository.save(pictures);
+    }
+
+    @Override
+    public DBPicture save(File file) {
+        try {
+            String fileUrl = fileClient.uploadImage(FileUtils.readFileToByteArray(file), file.length(),
+                    FilenameUtils.getExtension(file.getName()), null);
+            return pictureRepository.save(new DBPicture(file.getName(), fileUrl, com.uas.platform.core.util.FileUtils.getImagePixel(file)));
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    @Override
+    public IPicture save(String fileName, byte[] fileBytes) {
+        String fileUrl = fileClient.uploadImage(fileBytes, fileBytes.length, FilenameUtils.getExtension(fileName), null);
+        return pictureRepository.save(new DBPicture(fileName, fileUrl, com.uas.platform.core.util.FileUtils.getImagePixel(fileBytes)));
+    }
+
+    @Override
+    public IPicture uploadFile(MultipartFile mf) throws Exception {
+        HttpUtils.Response response = HttpUtils.upload(FileUrl.FILE_UPLOAD, mf, null);
+        if (response.getStatusCode() == 200) {
+            JSONObject obj = FastjsonUtils.parseObject(response.getResponseText());
+
+            String fileName = mf.getOriginalFilename();
+            String fileUrl = (String) obj.get("path");
+            return pictureRepository.save(new DBPicture(fileName, fileUrl, com.uas.platform.core.util.FileUtils.getImagePixel(mf.getBytes())));
+        } else {
+            throw new IllegalStateException(response.getResponseText());
+        }
+    }
 
 }

+ 32 - 4
src/main/java/com/uas/platform/b2c/common/base/service/impl/FileServiceImpl.java

@@ -1,12 +1,17 @@
 package com.uas.platform.b2c.common.base.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.uas.dfs.service.FileClient;
+import com.uas.platform.b2c.common.base.constant.FileUrl;
 import com.uas.platform.b2c.common.base.model.FileUpload;
 import com.uas.platform.b2c.common.base.service.FileService;
+import com.uas.platform.b2c.core.utils.FastjsonUtils;
+import com.uas.platform.b2c.core.utils.HttpUtils;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import org.apache.commons.io.FilenameUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
 @Service
@@ -20,8 +25,32 @@ public class FileServiceImpl implements FileService {
 		CommonsMultipartFile file = fileUpload.getFile();
 		try {
 			// 上传到文件系统
-			return fileClient.upload(file.getBytes(), file.getSize(),
-					FilenameUtils.getExtension(file.getOriginalFilename()), null);
+			HttpUtils.Response response = HttpUtils.upload(FileUrl.FILE_UPLOAD, file, null);
+			if (response.getStatusCode() == 200) {
+				JSONObject obj = FastjsonUtils.parseObject(response.getResponseText());
+				String fileUrl = (String) obj.get("path");
+				return fileUrl;
+			} else {
+				throw new IllegalStateException(response.getResponseText());
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+			throw new IllegalOperatorException("附件上传失败");
+		}
+	}
+
+	@Override
+	public String save(MultipartFile mf) {
+		try {
+            HttpUtils.Response response = HttpUtils.upload(FileUrl.FILE_UPLOAD, mf, null);
+            if (response.getStatusCode() == 200) {
+                JSONObject obj = FastjsonUtils.parseObject(response.getResponseText());
+
+                String fileUrl = (String) obj.get("path");
+                return fileUrl;
+            }else {
+                throw new IllegalStateException(response.getResponseText());
+            }
 		} catch (Exception e) {
 			e.printStackTrace();
 			throw new IllegalOperatorException("附件上传失败");
@@ -31,8 +60,7 @@ public class FileServiceImpl implements FileService {
 	@Override
 	public String save(String fileName, byte[] fileBytes) {
 		try {
-			String path = fileClient.upload(fileBytes, fileBytes.length, FilenameUtils.getExtension(fileName), null);
-			return path;
+            return fileClient.upload(fileBytes, fileBytes.length, FilenameUtils.getExtension(fileName), null);
 		} catch (Exception e) {
 			e.printStackTrace();
 			throw new IllegalOperatorException("附件上传失败");

+ 351 - 0
src/main/java/com/uas/platform/b2c/core/utils/HttpUtils.java

@@ -0,0 +1,351 @@
+package com.uas.platform.b2c.core.utils;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.http.Consts;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
+import org.apache.http.entity.mime.content.FileBody;
+import org.apache.http.entity.mime.content.InputStreamBody;
+import org.apache.http.entity.mime.content.StringBody;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URLEncoder;
+import java.util.*;
+import java.util.Map.Entry;
+
+public class HttpUtils {
+
+	/**
+	 * 发起POST、PUT请求
+	 * 
+	 * @param params
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response get(String url, Map<String, Object> params) throws Exception {
+		CloseableHttpClient httpClient = HttpClients.createDefault();
+		HttpEntityEnclosingRequestBase request = null;
+		CloseableHttpResponse response = null;
+		try {
+			StringBuilder buf = new StringBuilder(url);
+			if (params != null && !params.isEmpty()) {
+				if (url.indexOf("?") == -1)
+					buf.append("?");
+				else if (!url.endsWith("&"))
+					buf.append("&");
+				Set<Entry<String, Object>> entrys = params.entrySet();
+				for (Entry<String, Object> entry : entrys) {
+					buf.append(entry.getKey()).append("=").append(URLEncoder.encode(String.valueOf(entry.getValue()), "UTF-8")).append("&");
+				}
+			}
+			request = new HttpPost(buf.toString());
+			response = httpClient.execute(request);
+			return Response.getResponse(response);
+		} finally {
+			request.releaseConnection();
+			try {
+				httpClient.close();
+			} catch (IOException e) {
+			}
+			if (response != null) {
+				try {
+					response.close();
+				} catch (IOException e) {
+				}
+			}
+		}
+	}
+
+	/**
+	 * 发起POST、PUT请求
+	 *
+	 * @param datas
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response post(String url, Collection<?> datas) throws Exception {
+		CloseableHttpClient httpClient = HttpClients.createDefault();
+		HttpEntityEnclosingRequestBase request = new HttpPost(url);
+		CloseableHttpResponse response = null;
+		try {
+			if (datas != null && !datas.isEmpty()) {
+				request.setEntity(new StringEntity(FastjsonUtils.toJson(datas), ContentType.create("text/plain", Consts.UTF_8)));
+			}
+			response = httpClient.execute(request);
+			return Response.getResponse(response);
+		} finally {
+			request.releaseConnection();
+			try {
+				httpClient.close();
+			} catch (IOException e) {
+			}
+			if (response != null) {
+				try {
+					response.close();
+				} catch (IOException e) {
+				}
+			}
+		}
+	}
+
+	/**
+	 * 发起POST、PUT请求
+	 *
+	 * @param params
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response post(String url, Map<String, String> params) throws Exception {
+		CloseableHttpClient httpClient = HttpClients.createDefault();
+		HttpEntityEnclosingRequestBase request = new HttpPost(url);
+		CloseableHttpResponse response = null;
+		try {
+			List<NameValuePair> nvps = new ArrayList<NameValuePair>();
+			if (params != null && !params.isEmpty()) {
+				Set<Entry<String, String>> entrys = params.entrySet();
+				for (Entry<String, String> entry : entrys) {
+					nvps.add(new BasicNameValuePair(entry.getKey(), URLEncoder.encode(entry.getValue(), "UTF-8")));
+				}
+			}
+			request.setEntity(new UrlEncodedFormEntity(nvps));
+			response = httpClient.execute(request);
+			return Response.getResponse(response);
+		} finally {
+			request.releaseConnection();
+			try {
+				httpClient.close();
+			} catch (IOException e) {
+			}
+			if (response != null) {
+				try {
+					response.close();
+				} catch (IOException e) {
+				}
+			}
+		}
+	}
+
+	/**
+	 * http上传文件
+	 * 
+	 * @param url
+	 *            请求地址
+	 * @param filePath
+	 *            附件路径
+	 * @param params
+	 *            参数
+	 * @return
+	 * @throws Exception
+	 * @throws IOException
+	 * @throws IllegalStateException
+	 */
+	public static Response upload(String url, String filePath, Map<String, String> params) throws IllegalStateException, IOException,
+			Exception {
+		CloseableHttpClient httpClient = null;
+		CloseableHttpResponse response = null;
+		try {
+			httpClient = HttpClients.createDefault();
+			HttpPost httpPost = new HttpPost(url);
+			FileBody fileBody = new FileBody(new File(filePath));
+			MultipartEntityBuilder builder = MultipartEntityBuilder.create();
+			builder.addPart("file", fileBody);
+			if (params != null) {
+				for (String paramKey : params.keySet()) {
+					StringBody body = new StringBody(params.get(paramKey), ContentType.create("text/plain", Consts.UTF_8));
+					builder.addPart(paramKey, body);
+				}
+			}
+			HttpEntity reqEntity = builder.build();
+			httpPost.setEntity(reqEntity);
+			response = httpClient.execute(httpPost);
+			return Response.getResponse(response);
+		} finally {
+			try {
+				if (response != null) {
+					response.close();
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+			try {
+				if (httpClient != null) {
+					httpClient.close();
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
+
+	/**
+	 * http上传文件
+	 *
+	 * @param url
+	 *            请求地址
+	 * @param file
+	 *            文件
+	 * @param params
+	 *            参数
+	 * @return
+	 * @throws Exception
+	 * @throws IOException
+	 * @throws IllegalStateException
+	 */
+	public static Response upload(String url, File file, Map<String, String> params) throws IllegalStateException, IOException,
+			Exception {
+		CloseableHttpClient httpClient = null;
+		CloseableHttpResponse response = null;
+		try {
+			httpClient = HttpClients.createDefault();
+			HttpPost httpPost = new HttpPost(url);
+			FileBody fileBody = new FileBody(file);
+			MultipartEntityBuilder builder = MultipartEntityBuilder.create();
+			builder.addPart("file", fileBody);
+			if (params != null) {
+				for (String paramKey : params.keySet()) {
+					StringBody body = new StringBody(params.get(paramKey), ContentType.create("text/plain", Consts.UTF_8));
+					builder.addPart(paramKey, body);
+				}
+			}
+			HttpEntity reqEntity = builder.build();
+			httpPost.setEntity(reqEntity);
+			response = httpClient.execute(httpPost);
+			return Response.getResponse(response);
+		} finally {
+			try {
+				if (response != null) {
+					response.close();
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+			try {
+				if (httpClient != null) {
+					httpClient.close();
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
+	/**
+	 * http上传文件
+	 *
+	 * @param url
+	 *            请求地址
+	 * @param multipartFile
+	 *            附件路径
+	 * @param params
+	 *            参数
+	 * @return
+	 * @throws Exception
+	 * @throws IOException
+	 * @throws IllegalStateException
+	 */
+	public static Response upload(String url, MultipartFile multipartFile, Map<String, String> params) throws IllegalStateException, IOException,
+			Exception {
+		CloseableHttpClient httpClient = null;
+		CloseableHttpResponse response = null;
+		try {
+			httpClient = HttpClients.createDefault();
+			HttpPost httpPost = new HttpPost(url);
+			InputStreamBody streamBody = new InputStreamBody(multipartFile.getInputStream(),
+				multipartFile.getOriginalFilename());
+			MultipartEntityBuilder builder = MultipartEntityBuilder.create();
+			builder.addPart("file", streamBody);
+			if (params != null) {
+				for (String paramKey : params.keySet()) {
+					StringBody body = new StringBody(params.get(paramKey), ContentType.create("text/plain", Consts.UTF_8));
+					builder.addPart(paramKey, body);
+				}
+			}
+			HttpEntity reqEntity = builder.build();
+			httpPost.setEntity(reqEntity);
+			response = httpClient.execute(httpPost);
+			return Response.getResponse(response);
+		} finally {
+			try {
+				if (response != null) {
+					response.close();
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+			try {
+				if (httpClient != null) {
+					httpClient.close();
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
+	/**
+	 * 下载
+	 * 
+	 * @param url
+	 * @return
+	 * @throws ClientProtocolException
+	 * @throws IOException
+	 */
+	public static InputStream download(String url) throws ClientProtocolException, IOException {
+		CloseableHttpClient httpClient = HttpClients.createDefault();
+		HttpGet httpGet = new HttpGet(url);
+		CloseableHttpResponse response = httpClient.execute(httpGet);
+		return response.getEntity().getContent();
+	}
+
+	public static class Response {
+		private int statusCode;
+		private String responseText;
+
+		public int getStatusCode() {
+			return statusCode;
+		}
+
+		public void setStatusCode(int statusCode) {
+			this.statusCode = statusCode;
+		}
+
+		public String getResponseText() {
+			return responseText;
+		}
+
+		public void setResponseText(String responseText) {
+			this.responseText = responseText;
+		}
+
+		public Response() {
+		}
+
+		public Response(HttpResponse response) throws IllegalStateException, IOException, Exception {
+			this.statusCode = response.getStatusLine().getStatusCode();
+			this.responseText = IOUtils.toString(response.getEntity().getContent());
+		}
+
+		public static Response getResponse(HttpResponse response) throws IllegalStateException, IOException, Exception {
+			if (response != null)
+				return new Response(response);
+			return null;
+		}
+	}
+}

+ 9 - 0
src/main/java/com/uas/platform/b2c/fa/settlement/dao/BillDao.java

@@ -36,6 +36,15 @@ public interface BillDao extends JpaSpecificationExecutor<Bill>, JpaRepository<B
      */
 	public List<Bill> getBillByUseruuAndDissociative(Long useruu, Integer dissociative);
 
+	/**
+	 * 根据个人UU号和是否个人用户获取指定类型发票
+	 * @param useruu
+	 * @param dissociative
+	 * @param kind
+	 * @return
+	 */
+	public List<Bill> getBillByUseruuAndDissociativeAndKind(Long useruu, Integer dissociative, Integer kind);
+
     /**
      * 根据个人UU号和企业UU号和发票类型(增值税专用 和 增值税普通)获取发票列表
      *

+ 2 - 2
src/main/java/com/uas/platform/b2c/logistics/dao/AddressTakeSelfDao.java

@@ -18,11 +18,11 @@ public interface AddressTakeSelfDao
 		extends JpaSpecificationExecutor<AddressTakeSelf>, JpaRepository<AddressTakeSelf, Long> {
 
 	/**
-	 * 根据企业enuu来获取自提点地址信息,按创建时间排序
+	 * 根据企业enuu和启用状态来获取自提点地址信息,按创建时间排序
 	 * @param enuu
 	 * @return
 	 */
-	List<AddressTakeSelf> findByEnuuOrderByCreatetimeDesc(Long enuu);
+	List<AddressTakeSelf> findByEnuuAndActiveOrderByCreatetimeDesc(Long enuu, Short active);
 
 	/**
 	 * 根据企业enuu获取所有的自提点地址名称

+ 2 - 1
src/main/java/com/uas/platform/b2c/logistics/service/impl/AddressTakeSelfServiceImpl.java

@@ -1,6 +1,7 @@
 package com.uas.platform.b2c.logistics.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.uas.platform.b2c.core.constant.ShortConstant;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.logistics.dao.AddressTakeSelfDao;
 import com.uas.platform.b2c.logistics.model.AddressTakeSelf;
@@ -101,7 +102,7 @@ public class AddressTakeSelfServiceImpl implements AddressTakeSelfService {
 				throw new IllegalOperatorException("店铺信息丢失,请刷新后重试");
 			}
 			Long enuu = store.getEnUU();
-			List<AddressTakeSelf> list = addressTakeSelfDao.findByEnuuOrderByCreatetimeDesc(enuu);
+			List<AddressTakeSelf> list = addressTakeSelfDao.findByEnuuAndActiveOrderByCreatetimeDesc(enuu, ShortConstant.YES_SHORT);
 			map.put(object.getString("uuid"), list);
 		}
 		return map;

+ 7 - 25
src/main/java/com/uas/platform/b2c/prod/store/model/Qualification.java

@@ -47,10 +47,10 @@ public class Qualification {
 	private Long uploaderUU;
 
 	/**
-	 * 店铺的UUID,在正式开店时,设置
+	 * 店铺的Id
 	 */
-	@Column(name = "qu_store_uuid")
-	private String storeUuid;
+	@Column(name = "qu_store_id")
+	private Long storeId;
 
 	/**
 	 * 证明编号
@@ -113,13 +113,6 @@ public class Qualification {
 	@Column(name = "qu_certification")
 	private Certification certification;
 
-	/**
-	 * 店铺的Id
-	 */
-	@Deprecated
-	@Column(name = "qu_store_id")
-	private String uuid;
-
 	/**
 	 * 序号
 	 */
@@ -209,15 +202,12 @@ public class Qualification {
 		this.remark = remark;
 	}
 
-	@Deprecated
-	public String getUuid() {
-		return uuid;
+	public Long getStoreId() {
+		return storeId;
 	}
 
-	@Deprecated
-	public Qualification setUuid(String uuid) {
-		this.uuid = uuid;
-		return this;
+	public void setStoreId(Long storeId) {
+		this.storeId = storeId;
 	}
 
 	@Deprecated
@@ -239,14 +229,6 @@ public class Qualification {
 		this.uploaderUU = uploaderUU;
 	}
 
-	public String getStoreUuid() {
-		return storeUuid;
-	}
-
-	public void setStoreUuid(String storeUuid) {
-		this.storeUuid = storeUuid;
-	}
-
 	public String getSerialNumber() {
 		return serialNumber;
 	}

+ 25 - 6
src/main/java/com/uas/platform/b2c/prod/store/service/impl/StoreApplyServiceImpl.java

@@ -7,16 +7,12 @@ import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.UuidUtils;
 import com.uas.platform.b2c.prod.store.dao.StoreApplyDao;
 import com.uas.platform.b2c.prod.store.dao.StoreBrandInfoDao;
-import com.uas.platform.b2c.prod.store.model.EnterpriseSimple;
-import com.uas.platform.b2c.prod.store.model.Qualification;
-import com.uas.platform.b2c.prod.store.model.StoreApply;
-import com.uas.platform.b2c.prod.store.model.StoreBrandInfo;
-import com.uas.platform.b2c.prod.store.model.StoreIn;
-import com.uas.platform.b2c.prod.store.model.StoreType;
+import com.uas.platform.b2c.prod.store.model.*;
 import com.uas.platform.b2c.prod.store.service.StoreApplyService;
 import com.uas.platform.b2c.prod.store.service.StoreInService;
 import com.uas.platform.b2c.trade.support.CodeType;
 import com.uas.platform.b2c.trade.support.ResultMap;
+import com.uas.platform.core.exception.IllegalStatusException;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.persistence.criteria.CriterionExpression;
 import com.uas.platform.core.persistence.criteria.SimpleExpression;
@@ -33,6 +29,7 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 import java.util.Date;
+import java.util.Iterator;
 import java.util.List;
 
 /**
@@ -71,6 +68,28 @@ public class StoreApplyServiceImpl implements StoreApplyService {
 				&& StoreType.ORIGINAL_FACTORY != storeApply.getType()) {
 			return new ResultMap(CodeType.ERROR_STATE, "请选择正确的的店铺类型");
 		}
+		// 处理并验证资质证明信息
+		List<Qualification> qualificationList = storeApply.getQualifications();
+		if (CollectionUtils.isEmpty(qualificationList)) {
+			throw new IllegalStatusException("请上传营业执照信息");
+		}
+		boolean reasonable = false;
+		Iterator<Qualification> iterator = qualificationList.iterator();
+		while (iterator.hasNext()) {
+			Qualification qualification = iterator.next();
+			if (StringUtils.isEmpty(qualification.getResourceUrl())) {
+				iterator.remove();
+				continue;
+			}
+			if (QualificationType.BUSINESS_LICENSE == qualification.getType()) {
+				reasonable = true;
+			}
+		}
+		storeApply.setQualifications(qualificationList);
+		// 验证是否上传营业执照信息
+		if (!reasonable) {
+			throw new IllegalStatusException("请上传营业执照信息");
+		}
 
 		User user  = SystemSession.getUser();
 		if (user == null || user.getEnterprise() == null) {

+ 0 - 1
src/main/java/com/uas/platform/b2c/prod/store/service/impl/StoreInServiceImpl.java

@@ -122,7 +122,6 @@ public class StoreInServiceImpl implements StoreInService {
 		List<Qualification> qualifications = storeApply.getQualifications();
 		Set<Qualification> qualificationsSet = new HashSet<>();
 		for (Qualification qualification : qualifications) {
-			qualification.setStoreUuid(store.getUuid());
 			qualificationsSet.add(qualification);
 		}
 		store.setQualifications(qualificationsSet);

+ 9 - 0
src/main/java/com/uas/platform/b2c/trade/order/controller/OrderController.java

@@ -892,4 +892,13 @@ public class OrderController {
 		String orderid = StringUtilB2C.decodeValue(enOrderid);
 		return orderService.getStatusByOrid(orderid);
 	}
+
+	/**
+	 * 根据店铺uuid验证是否包含寄售店铺
+	 * @return
+	 */
+	@RequestMapping(value = "/consignment", method = RequestMethod.POST)
+	public ResultMap checkConsignment(@RequestBody List<String> uuidArray){
+		return orderService.checkConsignment(uuidArray);
+	}
 }

+ 7 - 0
src/main/java/com/uas/platform/b2c/trade/order/service/OrderService.java

@@ -605,4 +605,11 @@ public interface OrderService {
 	 * @return
 	 */
 	Order updateByDetail(Order order);
+
+	/**
+	 * 根据uuid来判断是否包含寄售店铺
+	 * @param uuidArray
+	 * @return
+	 */
+	ResultMap checkConsignment(List<String> uuidArray);
 }

+ 52 - 0
src/main/java/com/uas/platform/b2c/trade/order/service/impl/OrderServiceImpl.java

@@ -813,6 +813,7 @@ public class OrderServiceImpl implements OrderService {
             or.setSellCompanyArea(enterprise.getEnArea());
             or.setSellCompanyAddress(enterprise.getEnAddress());
             or.setOrderDetails(newOrderDetails);
+            updateOrderBill(or);
             or.setOrderid(createNumberService.generateOrderNumber(EncodingRulesConstant.ORDER, "trade$order", 8));
             orders.add(or);
         }
@@ -826,6 +827,45 @@ public class OrderServiceImpl implements OrderService {
         return ResultMap.success(orderList);
     }
 
+    /**
+     * 调整订单的发票类型
+     * 寄售类型,若选择普票(没有专票信息,修改为不开票。有则修改成专票)
+     * @param order
+     */
+    public void updateOrderBill(Order order){
+        if (sysConf.getStoreid().equals(order.getStoreid())){ //如果是寄售类型的订单
+            if (order.getInvoiceid() != null && order.getInvoicetype() == Type.Bill_NoDeduct.value()){ //发票为普票
+                //将普票类型修改为专票
+                List<Bill> billOne;
+                if (SystemSession.getUser().getEnterprise() != null){
+                    billOne = billDao.getBillByUseruuAndEnuuAndKind(SystemSession.getUser().getUserUU(),
+                            SystemSession.getUser().getEnterprise().getUu(), Type.Bill_Deduct.value());
+                }else {
+                    billOne = billDao.getBillByUseruuAndDissociativeAndKind(SystemSession.getUser().getUserUU(),
+                            Type.PERSONAL.value(), Type.Bill_Deduct.value());
+                }
+                if (CollectionUtils.isEmpty(billOne)){
+                    //没有专票信息,则修改成暂不开票
+                    order.setInvoicetype(Type.Bill_No.value());
+                    order.setInvoiceid(null);
+                    order.setInvoicetitle(null);
+                    order.setInvoiceAddress(null);
+                    order.setVatBillStatus(Status.NEEDNO_BILL.value()); // 不需要开票
+                    Set<OrderDetail> orderDetails = order.getOrderDetails();
+                    for (OrderDetail orderDetail : orderDetails) {
+                        orderDetail.setBillStatus(Status.NEEDNO_BILL.value());
+                    }
+                }else {
+                    Bill bill = billOne.get(0);
+                    order.setInvoicetype(Type.Bill_Deduct.value());
+                    order.setInvoiceid(bill.getId());
+                    order.setInvoicetitle(bill.getHead());
+                    order.setInvoiceAddress(FastjsonUtils.toJson(bill));
+                }
+            }
+        }
+    }
+
     /**
      * <h1>将orderInfos的信息封装进Order的List集合中,便于操作。</h1>
      *
@@ -3100,4 +3140,16 @@ public class OrderServiceImpl implements OrderService {
         order.setCmpQty(cmps.size());// 型号数量
         return order;
     }
+
+    @Override
+    public ResultMap checkConsignment(List<String> uuidArray) {
+        Boolean bool = false;
+        for (String uuid : uuidArray){
+            if (sysConf.getStoreid().equals(uuid)){
+                bool = true;
+                break;
+            }
+        }
+        return ResultMap.success(bool);
+    }
 }

+ 5 - 0
src/main/webapp/resources/js/common/query/order.js

@@ -76,6 +76,11 @@ define([ 'ngResource' ], function() {
                 method : 'PUT',
                 isArray : false
             },
+            //判断是否包含寄售类型产品
+            checkConsignment: {
+                url : 'trade/order/consignment',
+                method : 'POST'
+            },
             /**
              * 平台查看
              */

+ 12 - 4
src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_home_ctrl.js

@@ -96,6 +96,13 @@ define(['app/app', 'calendar'], function(app) {
                     },
                     addr : function(){
                         return angular.copy(addr);
+                    },
+                    isModify : function () {
+                        if (addr){
+                            return true;
+                        }else {
+                            return false;
+                        }
                     }
                 }
             }).result.then(function(address){
@@ -194,12 +201,13 @@ define(['app/app', 'calendar'], function(app) {
     }]);
 
     //地址编辑模态框
-    app.register.controller('editAddrHomeCtrl', ['$scope', 'isSetTop', 'addr', '$modalInstance', 'toaster', '$http', 'ShippingAddress', function($scope, isSetTop, addr, $modalInstance, toaster, $http, ShippingAddress){
+    app.register.controller('editAddrHomeCtrl', ['$scope', 'isSetTop', 'isModify', 'addr', '$modalInstance', 'toaster', '$http', 'ShippingAddress', function($scope, isSetTop, isModify, addr, $modalInstance, toaster, $http, ShippingAddress){
         if (addr){
             $scope.isSetTop = addr.num == 1;
         }else {
             $scope.isSetTop = isSetTop;
         }
+        $scope.isModify = isModify;
         //验证数据
         $scope.checkeds = {};
 
@@ -207,7 +215,7 @@ define(['app/app', 'calendar'], function(app) {
             var size;
             if(num == 1) {
                 if ($scope.address.name){
-                    size = $scope.address.name.replace(/[^x00-xFF]/g,'**').length;
+                    size = $scope.address.name.replace(/[^\x00-\xff]/g,'**').length;
                     if (size > 20) {
                         console.log(size);
                         $scope.userError = true;
@@ -217,7 +225,7 @@ define(['app/app', 'calendar'], function(app) {
                 }
             } else if(num == 2) {
                 if ($scope.address.tel){
-                    size = $scope.address.tel.replace(/[^x00-xFF]/g,'**').length;
+                    size = $scope.address.tel.replace(/[^\x00-\xff]/g,'**').length;
                     if (size < 8 || size > 11) {
                         $scope.telError = true;
                         return;
@@ -232,7 +240,7 @@ define(['app/app', 'calendar'], function(app) {
                 }
             } else if(num == 3) {
                 if ($scope.address.detailAddress){
-                    size = $scope.address.detailAddress.replace(/[^x00-xFF]/g,'**').length;
+                    size = $scope.address.detailAddress.replace(/[^\x00-\xff]/g,'**').length;
                     if (size > 60) {
                         $scope.addrError = true;
                         return;

+ 94 - 77
src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_invoice_ctrl.js

@@ -48,93 +48,109 @@ define(['app/app'], function(app) {
         $scope.bill = {};
         $scope.bill.address = {};
 
-            //保存发票信息
-            $scope.saveBill = function(flag) {
-                var dataValidFlag = $scope.checkValidFrom();
-                if (!flag && dataValidFlag && $scope.bill.is_agree) {
-                    $scope.bill.kind = $scope.billType
-                    if (!$scope.isAdd) { //修改
-                        doSave('修改发票信息');
-                    } else { // 新增
-                        doSave('添加发票');
-                    }
-                } else if (flag || !dataValidFlag) {
-                    toaster.pop('error', '请填写正确的发票信息');
-                } else {
-                    toaster.pop('error', '请勾选并阅读《发票须知》');
-                }
-            };
-            var doSave = function (message) {
-                $scope.bill.area = $scope.bill.address.province + "," + $scope.bill.address.city + "," + $scope.bill.address.district;
-                var file = null;
-                if($scope.bill.billInfo&&$scope.bill.billInfo[0]) {
-                    file = $scope.bill.billInfo[0];
+        //保存发票信息
+        $scope.saveBill = function(flag) {
+            var dataValidFlag = $scope.checkValidFrom();
+            if (!flag && dataValidFlag && $scope.bill.is_agree) {
+                $scope.bill.kind = $scope.billType
+                if (!$scope.isAdd) { //修改
+                    doSave('修改发票信息');
+                } else { // 新增
+                    doSave('添加发票');
                 }
-                $upload.upload({
-                    url: 'trade/bill/save',
-                    file: file,
-                    method: 'POST',
-                    data: {
-                        bill: $scope.bill
-                    }
-                }).success(function(data){
-                    toaster.pop('success', message + '成功');
-                    $scope.changeBillStatusFlag = false
-                    $state.reload();
-                }).error(function(data){
-                    toaster.pop('error', message + '失败');
-                });
+            } else if (flag || !dataValidFlag) {
+                toaster.pop('error', '请填写正确的发票信息');
+            } else {
+                toaster.pop('error', '请勾选并阅读《发票须知》');
             }
-
-            $scope.isDoUpload = false;
-            //上传发票许可证
-            $scope.onUploadPermission = function () {
-                $scope.isDoUpload = true;
-                if (event.target.files[0].size < 3*1024*1024) {
-                    $scope.bill.attachUrl = event.target.files[0].name;
-                } else {
-                    $scope.bill.attachUrl = '';
-                }
+        };
+        var doSave = function (message) {
+            $scope.bill.area = $scope.bill.address.province + "," + $scope.bill.address.city + "," + $scope.bill.address.district;
+            var file = null;
+            if($scope.bill.billInfo&&$scope.bill.billInfo[0]) {
+                file = $scope.bill.billInfo[0];
             }
-
-            //判断中文字符串的长度
-            var getRealStringLen = function (str) {
-                var realLength = 0, len = str.length, charCode = -1;
-                for (var i = 0; i < len; i++) {
-                    charCode = str.charCodeAt(i);
-                    if (charCode >= 0 && charCode <= 128) realLength += 1;
-                    else realLength += 2;
+            $upload.upload({
+                url: 'trade/bill/save',
+                file: file,
+                method: 'POST',
+                data: {
+                    bill: $scope.bill
                 }
-                return realLength;
+            }).success(function(data){
+                toaster.pop('success', message + '成功');
+                $scope.changeBillStatusFlag = false
+                $state.reload();
+            }).error(function(data){
+                toaster.pop('error', message + '失败');
+            });
+        }
+
+        $scope.isDoUpload = false;
+        //上传发票许可证
+        $scope.onUploadPermission = function () {
+            $scope.isDoUpload = true;
+            if (event.target.files[0].size < 3*1024*1024) {
+                $scope.bill.attachUrl = event.target.files[0].name;
+            } else {
+                $scope.bill.attachUrl = '';
             }
+        }
 
-            $scope.validForm = {
-                validBillHead: true,
-                validBillName: true,
-                validBankName: true,
-                validDetailAddress: true,
-                validCompanyAddress: true
+        //判断中文字符串的长度
+        var getRealStringLen = function (str) {
+            var realLength = 0, len = str.length, charCode = -1;
+            for (var i = 0; i < len; i++) {
+                charCode = str.charCodeAt(i);
+                if (charCode >= 0 && charCode <= 128) realLength += 1;
+                else realLength += 2;
             }
+            return realLength;
+        }
 
-            $scope.checkValidFrom = function () {
-                var flag = true
-                angular.forEach($scope.validForm, function (item) {
-                    if (!item) {
-                        flag = false;
-                    }
-                })
-                return flag;
+        $scope.validForm = {
+            validBillHead: true,
+            validBillName: true,
+            validBankName: true,
+            validDetailAddress: true,
+            validCompanyAddress: true
+        }
+
+        $scope.initFormFlag = function () {
+            $scope.initFlag = {
+                initBillHead: true,
+                initBillName: true,
+                initBankName: true,
+                initDetailAddress: true,
+                initCompanyAddress: true,
+                initCompanyPhone: true,
+                initCompanyTaxNum: true,
+                initBankAccount: true,
+                initTelephone: true
             }
-        $scope.checkValidFrom();
-            //发票抬头check
-            $scope.checkBillHead = function () {
-                var len = getRealStringLen($scope.bill.head);
-                if (len > 100) {
-                    $scope.validForm.validBillHead = false;
-                } else {
-                    $scope.validForm.validBillHead = true;
+        }
+
+        $scope.initFormFlag();
+
+        $scope.checkValidFrom = function () {
+            var flag = true
+            angular.forEach($scope.validForm, function (item) {
+                if (!item) {
+                    flag = false;
                 }
+            })
+            return flag;
+        }
+        $scope.checkValidFrom();
+        //发票抬头check
+        $scope.checkBillHead = function () {
+            var len = getRealStringLen($scope.bill.head);
+            if (len > 100) {
+                $scope.validForm.validBillHead = false;
+            } else {
+                $scope.validForm.validBillHead = true;
             }
+        }
 
         //收票人check
         $scope.checkBillName = function () {
@@ -214,6 +230,7 @@ define(['app/app'], function(app) {
         }
         $scope.setBillType = function (type) {
             $scope.bill = {};
+            $scope.initFormFlag();
             $scope.billType = type;
             this.form.$setPristine();
             this.form.$setUntouched();
@@ -238,7 +255,7 @@ define(['app/app'], function(app) {
                     case 2:
                         $scope.bill.address.district = item;
                         break;
-            }
+                }
             });
         };
         //删除按钮点击

+ 59 - 0
src/main/webapp/resources/js/usercenter/controllers/forstore/order_pay_ctrl.js

@@ -446,8 +446,45 @@ define(['app/app'], function(app) {
 			});
 			return value;
 		};
+		//检查是否选择了寄售商品,选择了发票却没有完善专票信息
+		var checkBill = function () {
+			if($scope.order.invoicetype != '1207') {
+				if($scope.hideNormal){
+					var bill = getSpecial();
+					if(!bill.id) {
+						return false;
+					}
+				}
+			}
+			return true;
+		};
+
+		var getSpecial = function () {
+			var billSpecial = {};
+			angular.forEach($scope.bills, function (bill) {
+				if (bill.kind == '1205'){
+					billSpecial = bill;
+				}
+			});
+			return billSpecial;
+		};
+
+		$scope.cancelFrame = function () {
+			$scope.showBillFrame = false;
+		};
+
+		$scope.perfectLater = function () {
+			$scope.showBillFrame = false;
+			$scope.imperfect = true;
+		};
+
+		$scope.goToBillPage = function () {
+			$scope.showBillFrame = false;
+			window.open("user#/invoice", '_self');
+		};
 
 		//确认付款
+		$scope.imperfect = false;//暂不完善
 		$scope.confirmPay = function() {
 			if($scope.order.status == 502 || $scope.order.status == 503) {
 				var arr = [];
@@ -481,6 +518,14 @@ define(['app/app'], function(app) {
 				return ;
 			}
 			orderInfos.push(orderInfo);
+			if(!$scope.imperfect){
+				var validBill = checkBill();
+				if (!validBill){
+					// toaster.pop('info', '请完善专票信息');
+					$scope.showBillFrame = true;
+					return ;
+				}
+			}
 
 			Order.ensure({orderid: enIdFilter($scope.order.orderid)}, orderInfos, function(data){
 				if(data.code == 1) {
@@ -661,10 +706,23 @@ define(['app/app'], function(app) {
 
 			//获取地址的信息
 			$scope.loadShippingAddress();
+			checkStoreType();
 			//发票的信息
 			getBillInfo();
 		};
 
+		var checkStoreType = function () {
+			var uuidArray = [];
+			angular.forEach($scope.storeArray, function (store) {
+				uuidArray.push(store.uuid);
+			});
+			Order.checkConsignment({}, uuidArray, function (data) {
+				if (data){
+					$scope.hideNormal = data.data;
+				}
+			})
+		};
+
 		/**********************************************************************
 		 * 地址信息管理
 		 **********************************************************************/
@@ -971,6 +1029,7 @@ define(['app/app'], function(app) {
 					$scope.bill.address.province = arr[0];
 					$scope.bill.address.city = arr[1];
 					$scope.bill.address.district = arr[2];
+					// console.log($scope.bill.address)
 				}
 			}
 			$scope.bill.is_agree = true;

+ 1 - 1
src/main/webapp/resources/js/vendor/controllers/forstore/query_logistics_ctrl.js

@@ -58,7 +58,7 @@ define(['app/app', 'calendar'], function(app) {
                 str.indexOf("发出")!=-1||str.indexOf("收入")!=-1||str.indexOf("扫描")!=-1||str.indexOf("到达")!=-1){
                 $scope.status = "transit";
             }
-            if(str.indexOf("派送")!=-1){
+            if(str.indexOf("派送")!=-1 || str.indexOf("派件")!=-1){
                 $scope.status = "send";
             }
             if(str.indexOf("签收")!=-1){

+ 2 - 2
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_deliveryRule_ctrl.js

@@ -53,12 +53,12 @@ define([ 'app/app' ], function(app) {
                 $scope.modifyRule = data;
                 $scope.isModify = true;
                 $scope.isActive = $scope.modifyRule.active == 1;
+                $scope.fareArray = [];
                 if ($scope.modifyRule.fareType == 2){
                     $scope.fareArray = angular.fromJson($scope.modifyRule.fares);
                 }
                 $scope.currencySymbol = $scope.modifyRule.currencyName == "RMB" ? "¥" : "$";
-                if (!$scope.fareArray){
-                    $scope.fareArray = [];
+                if ($scope.fareArray.length == 0){
                     var firstFare = {
                         start : "0",
                         end : "",

+ 2 - 2
src/main/webapp/resources/view/admin/checkMoney/billInput.html

@@ -212,7 +212,7 @@ a:HOVER {
 					                     <label class="checkbox-inline text-inverse">
 					                     		<input type="checkbox" checked="true" name="is_agree" ng-model="bill.is_agree" required="required" /> 我已阅读并同意 
 					                     </label>
-					                     <a href="help/nav/19">《发票须知》</a>
+					                     <a href="/help/helpList/205">《发票须知》</a>
 				                     </div>
 				               </div>
 				               <div class="text-center span8 text-center">
@@ -330,7 +330,7 @@ a:HOVER {
 				                       <label class="check-inline text-inverse">
 				                       		<input checked="true" type="checkbox" ng-model="bill.is_agree" name="is_agree" required=""> 我已阅读并同意
 				                       </label>
-				                       	<a href="help/nav/19">《发票须知》</a>
+				                       	<a href="/help/helpList/205">《发票须知》</a>
 				                   </div>
 				               </div>
 				               <div class="text-center span8">

+ 26 - 26
src/main/webapp/resources/view/admin/trade/trade_invoicefromorder.html

@@ -234,32 +234,32 @@ input[type="radio"]:checked+label:after, input[type="checkbox"]:checked+label:af
 								</a>
 							</td>
 							<td class="text-center" ng-show="active=='inbound'">
-								<a ng-show="active=='inbound'" ng-click="queryLogistics(invoice)">
-									<div class="btn-group">
-										<button type="button" class="btn btn-default btn-sm  dropdown-toggle" data-toggle="dropdown">查看物流</button>
-										<div class="dropdown-menu" role="menu">
-											<p style="text-align: center">物流信息</p>
-											<table class="table table-bordered">
-												<tr>
-													<th>订单号</th>
-													<th ng-bind="logisticsInfo.ddhm"></th>
-												</tr>
-												<tr>
-													<th>邮件号</th>
-													<th ng-bind="logisticsInfo.yjhm"></th>
-												</tr>
-												<tr>
-													<th>处理时间</th>
-													<th ng-bind="logisticsInfo.clsj"></th>
-												</tr>
-												<tr>
-													<th>物流信息</th>
-													<th ng-bind="logisticsInfo.wlxx"></th>
-												</tr>
-											</table>
-										</div>
-									</div>				
-								</a>
+								<!--<a ng-show="active=='inbound'" ng-click="queryLogistics(invoice)">-->
+									<!--<div class="btn-group">-->
+										<!--<button type="button" class="btn btn-default btn-sm  dropdown-toggle" data-toggle="dropdown">查看物流</button>-->
+										<!--<div class="dropdown-menu" role="menu">-->
+											<!--<p style="text-align: center">物流信息</p>-->
+											<!--<table class="table table-bordered">-->
+												<!--<tr>-->
+													<!--<th>订单号</th>-->
+													<!--<th ng-bind="logisticsInfo.ddhm"></th>-->
+												<!--</tr>-->
+												<!--<tr>-->
+													<!--<th>邮件号</th>-->
+													<!--<th ng-bind="logisticsInfo.yjhm"></th>-->
+												<!--</tr>-->
+												<!--<tr>-->
+													<!--<th>处理时间</th>-->
+													<!--<th ng-bind="logisticsInfo.clsj"></th>-->
+												<!--</tr>-->
+												<!--<tr>-->
+													<!--<th>物流信息</th>-->
+													<!--<th ng-bind="logisticsInfo.wlxx"></th>-->
+												<!--</tr>-->
+											<!--</table>-->
+										<!--</div>-->
+									<!--</div>-->
+								<!--</a>-->
 							</td>
 						</tr>
 					</tbody>

+ 4 - 4
src/main/webapp/resources/view/prod/modal/edit-invoice-modal.html

@@ -105,7 +105,7 @@
 </style>
 <div id="bill-info">
       <div class="row">
-          <h2 class="content-header">新增开票资料</h2>
+          <h2 class="content-header" ng-bind="bill.head?'修改开票资料':'新增开票资料'">修改开票资料</h2>
       </div>
       <div class="row">
           <label class="col-md-3 normal-control-label"><b class="text-inverse">*</b>发票类型:</label>
@@ -201,7 +201,7 @@
                             <label for="check-mpy"></label>
                              <span>我已阅读并同意</span>
                      </label>
-                     <a href="help/helpList/19" class="base-line" target="_blank" style=" position: relative;top: -3px;">《发票须知》</a>
+                     <a href="/help/helpList/205" class="base-line" target="_blank" style=" position: relative;top: -3px;">《发票须知》</a>
                     </div>
               </div>
               <div class="col-md-offset-3">
@@ -245,7 +245,7 @@
                   </div>
               </div>
               <div class="form-group address">
-             	 <label class="col-md-3 control-label"><b class="text-inverse">*</b>收票地址:</label>
+             	 <label class="col-md-3 control-label"><b class="text-inverse">*</b>收票地址:{{bill.address}}</label>
                 <div class="row checkbox">
 					<div class="col-md-3">
 						<select required="required" class="select-adder form-control"
@@ -341,7 +341,7 @@
                           <label for="check-mzy"></label>
                           <span>我已阅读并同意</span>
                       </label>
-                      <a href="help/helpList/19">《发票须知》</a>
+                      <a href="/help/helpList/205">《发票须知》</a>
                   </div>
               </div>
               <div class="col-md-offset-3">

+ 3 - 3
src/main/webapp/resources/view/usercenter/billInput.html

@@ -82,7 +82,7 @@ h2 {
 </style>
 <div id="bill-info">
   <div class="row">
-      <h2 class="content-header">新增开票资料</h2>
+      <h2 class="content-header" ng-bind="bill.head?'修改开票资料':'新增开票资料'">新增开票资料</h2>
   </div>
    <div class="row">
        <label class="col-md-3 normal-control-label"><b class="text-inverse">*</b>发票类型:</label>
@@ -157,7 +157,7 @@ h2 {
                      <label class="checkbox-inline text-inverse">
                             <input type="checkbox" checked="true" name="is_agree" ng-model="bill.is_agree" required="required" /> 我已阅读并同意
                      </label>
-                     <a href="help#/nav/19" class="base-line" target="_blank">《发票须知》</a>
+                     <a href="/help/helpList/205" class="base-line" target="_blank">《发票须知》</a>
                  </div>
            </div>
            <div class="col-md-offset-3">
@@ -274,7 +274,7 @@ h2 {
                    <label class="check-inline text-inverse">
                         <input checked="true" type="checkbox" ng-model="bill.is_agree" name="is_agree" required=""> 我已阅读并同意
                    </label>
-                    <a href="help#/nav/19">《发票须知》</a>
+                    <a href="/help/helpList/205">《发票须知》</a>
                </div>
            </div>
            <div class="col-md-offset-3">

+ 26 - 12
src/main/webapp/resources/view/usercenter/forstore/buyer_invoice.html

@@ -432,6 +432,20 @@
         position: relative;
         top: 5px;
     }
+    .bg-fff8ee {
+        background: #fff8ee;
+    }
+    .bg-fff {
+        -webkit-box-shadow: 0 0 0px 1000px white inset!important;
+    }
+    input:-webkit-autofill,
+    input:-webkit-autofill:hover,
+    input:-webkit-autofill:focus,
+    input:-webkit-autofill:active {
+        -webkit-transition-delay: 99999s;
+        -webkit-transition: color 99999s ease-out, background-color 99999s ease-out;
+       /* -webkit-box-shadow: 0 0 0px 1000px white inset;*/
+    }
 </style>
 <!--右侧主体部分-->
 <div class="user_right fr u_c_invoice">
@@ -525,42 +539,42 @@
                     <div class="form-group">
                         <label class="col-md-2 control-label"><b class="text-inverse">*</b>发票抬头:</label>
                         <div class="form-input-line">
-                            <input type="text" class="form-control" ng-model="bill.head" ng-focus="form.billHead.$touched = false" ng-blur="form.billHead.$touched = true; checkBillHead()" name="billHead" required="required" placeholder="请输入发票抬头">
+                            <input type="text" class="form-control" ng-class="{'bg-fff8ee': !initFlag.initBillHead&&(form.billHead.$invalid || !validForm.validBillHead)}" ng-model="bill.head" ng-focus="form.billHead.$touched = false;" ng-blur="form.billHead.$touched = true;initFlag.initBillHead = false;checkBillHead()" name="billHead" required="required" placeholder="请输入发票抬头">
                         </div>
                         <div class="text-inverse error col-md-3" ng-show="form.billHead.$touched&&(form.billHead.$invalid || !validForm.validBillHead)" ng-bind="form.billHead.$error.required?'请填写发票抬头':'请勿超过50个字'"></div>
                     </div>
                     <div class="form-group" ng-if="billType == 1205">
                         <label class="col-md-2 control-label"><b class="text-inverse">*</b>单位地址:</label>
                         <div class="form-input-line">
-                            <input type="text" class="form-control" ng-model="bill.companyAddress" ng-focus="form.companyAddr.$touched = false" ng-blur="form.companyAddr.$touched = true; checkCompanyAddress()" name="companyAddr" required="required" placeholder="请输入单位地址">
+                            <input type="text" class="form-control" ng-class="{'bg-fff8ee': !initFlag.initCompanyAddress&&(form.companyAddr.$invalid || !validForm.validCompanyAddress)}" ng-model="bill.companyAddress" ng-focus="form.companyAddr.$touched = false;" ng-blur="form.companyAddr.$touched = true;initFlag.initCompanyAddress = false; checkCompanyAddress()" name="companyAddr" required="required" placeholder="请输入单位地址">
                         </div>
                         <div class="text-inverse error col-md-3" ng-show="form.companyAddr.$touched&&(form.companyAddr.$invalid || !validForm.validCompanyAddress)" ng-bind="form.companyAddr.$error.required?'请填写单位地址':'请勿超过50个字'"></div>
                     </div>
                     <div class="form-group"  ng-if="billType == 1205">
                         <label class="col-md-2 control-label"><b class="text-inverse">*</b>单位电话:</label>
                         <div class="form-input-line">
-                            <input type="text" class="form-control" ng-focus="form.companyPhone.$touched = false" ng-blur="form.companyPhone.$touched = true" placeholder="区号和号码使用 '-' 隔开" name="companyPhone" ng-model="bill.companyPhone" ng-pattern="/^0\d{2,3}-[1-9]\d{6,7}$/" ng-maxlength="20" required="required">
+                            <input type="text" class="form-control" ng-class="{'bg-fff8ee':!initFlag.initCompanyPhone&&form.companyPhone.$error.required, 'bg-fff':!form.companyPhone.$invalid}" ng-focus="form.companyPhone.$touched = false" ng-blur="form.companyPhone.$touched = true;initFlag.initCompanyPhone=false;" placeholder="区号和号码使用 '-' 隔开" name="companyPhone" ng-model="bill.companyPhone" ng-pattern="/^0\d{2,3}-[1-9]\d{6,7}$/" ng-maxlength="20" required="required">
                         </div>
                         <div class="text-inverse error col-md-3" ng-show="form.companyPhone.$touched&&form.companyPhone.$invalid" ng-bind="form.companyPhone.$error.required?'请填写单位电话':form.companyPhone.$error.maxlength?'请勿超过20个字符':'请填写正确的电话号码,用-隔开'"></div>
                     </div>
                     <div class="form-group"  ng-if="billType == 1205">
                         <label class="col-md-2 control-label"><b class="text-inverse">*</b>税务登记号:</label>
                         <div class="form-input-line">
-                            <input type="text" class="form-control" ng-model="bill.companyTaxNumber" ng-focus="form.companyTaxNum.$touched = false" ng-blur="form.companyTaxNum.$touched = true" name="companyTaxNum" required="true" ng-maxlength="20" ng-minlength="15" ng-pattern="/^[0-9a-zA-Z]+$/" placeholder="请输入税务登记号">
+                            <input type="text" class="form-control" ng-class="{'bg-fff8ee':!initFlag.initCompanyTaxNum&&form.companyTaxNum.$error.required, 'bg-fff':!form.companyTaxNum.$invalid}" ng-model="bill.companyTaxNumber" ng-focus="form.companyTaxNum.$touched = false" ng-blur="form.companyTaxNum.$touched = true; initFlag.initCompanyTaxNum = false;" name="companyTaxNum" required="true" ng-maxlength="20" ng-minlength="15" ng-pattern="/^[0-9a-zA-Z]+$/" placeholder="请输入税务登记号">
                         </div>
                         <div class="text-inverse error col-md-3" ng-show="form.companyTaxNum.$touched&&(form.companyTaxNum.$invalid)" ng-bind="form.companyTaxNum.$error.required?'请填写税务登记号':'请填写15-20位数字或字母'"></div>
                     </div>
                     <div class="form-group"  ng-if="billType == 1205">
                         <label class="col-md-2 control-label"><b class="text-inverse">*</b>开户银行:</label>
                         <div class="form-input-line">
-                            <input type="text" class="form-control" ng-model="bill.bankName" ng-focus="form.bankName.$touched = false" ng-blur="form.bankName.$touched = true; checkBankName()" name="bankName" required="required" placeholder="请输入开户银行">
+                            <input type="text" class="form-control" ng-class="{'bg-fff8ee': !initFlag.initBankName&&(form.bankName.$invalid || !validForm.validBankName)}" ng-model="bill.bankName" ng-focus="form.bankName.$touched = false;" ng-blur="form.bankName.$touched = true;initFlag.initBankName = false; checkBankName()" name="bankName" required="required" placeholder="请输入开户银行">
                         </div>
                         <div class="text-inverse error col-md-3" ng-show="form.bankName.$touched&&(form.bankName.$invalid || !validForm.validBankName)" ng-bind="form.bankName.$error.required?'请填写开户银行':'请勿超过30个字'"></div>
                     </div>
                     <div class="form-group"  ng-if="billType == 1205">
                         <label class="col-md-2 control-label"><b class="text-inverse">*</b>开户银行账户:</label>
                         <div class="form-input-line">
-                            <input type="text" class="form-control" ng-model="bill.bankAccount" name="account" ng-focus="form.account.$touched = false" ng-blur="form.account.$touched = true" ng-pattern="/^[0-9]*$/" required ng-maxlength="30" placeholder="请输入开户银行账号">
+                            <input type="text" class="form-control" ng-class="{'bg-fff8ee':!initFlag.initBankAccount&&form.account.$error.required}" ng-model="bill.bankAccount" name="account" ng-focus="form.account.$touched = false" ng-blur="form.account.$touched = true; initFlag.initBankAccount=false" ng-pattern="/^[0-9]*$/" required ng-maxlength="30" placeholder="请输入开户银行账号">
                         </div>
                         <div class="text-inverse error col-md-3" ng-show="form.account.$touched&&(form.account.$invalid)" ng-bind="form.account.$error.required?'请填写开户银行账号':'请填写30位以内的数字'"></div>
                     </div>
@@ -579,15 +593,15 @@
                     <div class="form-group">
                         <label class="col-md-2 control-label"><b class="text-inverse">*</b>收票人:</label>
                         <div class="form-input-line">
-                            <input id="mzbillname" type="text" class="form-control" ng-focus="form.billName.$touched = false" ng-blur="form.billName.$touched = true; checkBillName()" ng-model="bill.name" name="billName" required="required" placeholder="请输入收票人">
+                            <input id="mzbillname" ng-class="{'bg-fff8ee': !initFlag.initBillName&&(form.billName.$invalid || !validForm.validBillName)}" type="text" class="form-control" ng-focus="form.billName.$touched = false; " ng-blur="form.billName.$touched = true;initFlag.initBillName = false; checkBillName()" ng-model="bill.name" name="billName" required="required" placeholder="请输入收票人">
                         </div>
                         <div class="text-inverse error col-md-3" ng-show="form.billName.$touched&&(form.billName.$invalid || !validForm.validBillName)" ng-bind="form.billName.$error.required?'请填写收票人姓名':'请勿超过10个字'"></div>
                     </div>
                     <div class="form-group">
                         <label class="col-md-2 control-label"><b class="text-inverse">*</b>联系电话:</label>
                         <div class="form-input-line">
-                            <input type="text" class="form-control" ng-model="bill.telephone" ng-focus="form.billTel.$touched = false" ng-blur="form.billTel.$touched = true" name="billTel"
-                                   ng-pattern="/^[0-9]*$/" ng-maxlength="11" ng-minlength="8" required="required" placeholder="请输入联系电话">
+                            <input type="text" class="form-control" ng-class="{'bg-fff8ee':!initFlag.initTelephone&&form.billTel.$error.required, 'bg-fff':!form.billTel.$invalid||!form.billTel.$touched}" ng-model="bill.telephone" ng-focus="form.billTel.$touched = false" ng-blur="form.billTel.$touched = true; initFlag.initTelephone=false;" name="billTel"
+                                   ng-pattern="/^[0-9]*$/" ng-minlength="8" ng-maxlength="11" required="required" placeholder="请输入联系电话">
                         </div>
                         <div class="text-inverse error col-md-3" ng-show="form.billTel.$touched&&form.billTel.$invalid" ng-bind="form.billTel.$error.required?'请填写联系电话':'请输入8-11位数字'"></div>
                     </div>
@@ -620,8 +634,8 @@
                     <div class="form-group">
                         <label class="col-md-2 control-label"><b class="text-inverse">*</b>详细地址:</label>
                         <div class="form-input-line" style="width: 502px">
-                            <input id="mzaddress" type="text" class="form-control" required="required" name="billDetail" ng-model="bill.detailAddress" title="建议您填写详细发件地址,如街道名,门牌号,楼层和房间号等信息"
-                            placeholder="建议您填写详细发件地址,如街道名,门牌号,楼层和房间号等信息" ng-focus="form.billDetail.$touched = false" ng-blur="form.billDetail.$touched = true; checkDetailAddress()" >
+                            <input id="mzaddress" type="text" class="form-control" ng-class="{'bg-fff8ee': !initFlag.initDetailAddress&&(form.billDetail.$invalid|| !validForm.validDetailAddress)}" required="required" name="billDetail" ng-model="bill.detailAddress" title="建议您填写详细发件地址,如街道名,门牌号,楼层和房间号等信息"
+                            placeholder="建议您填写详细发件地址,如街道名,门牌号,楼层和房间号等信息" ng-focus="form.billDetail.$touched = false; " ng-blur="form.billDetail.$touched = true;initFlag.initDetailAddress = false; checkDetailAddress()" >
                         </div>
                         <div class="text-inverse error col-md-3" ng-show="form.billDetail.$touched&&(form.billDetail.$invalid|| !validForm.validDetailAddress)" ng-bind="form.billDetail.$error.required?'请填写详细地址':'请勿超过30个字'"></div>
                     </div>
@@ -632,7 +646,7 @@
                                     <label for="check-mzy" style="position: relative;bottom: 2px;"></label>
                                     <span style="color: #333;">我已阅读并同意</span>
                                 </label>
-                                <a href="help#/nav/19" target="_blank" style="color: #5078cb; font-size: 14px; position: relative;top: 2px;">《发票须知》</a>
+                                <a href="/help/helpList/205" target="_blank" style="color: #5078cb; font-size: 14px; position: relative;top: 2px;">《发票须知》</a>
                         </div>
                         <div class="form-btn">
                             <input type="button" value="取消" class="btn" ng-click="setChangeBillStatusFlag(false)">

+ 62 - 1
src/main/webapp/resources/view/usercenter/forstore/order_pay.html

@@ -1,4 +1,49 @@
 <style type="text/css">
+	.buyer-contact {
+		position:fixed;
+		top:50%;
+		left:50%;
+		transform:translate(-50%,-50%);
+		z-index: 2;
+		min-height: 155px;
+		opacity: 1;
+		background-color: white;
+		width: 350px;
+		border: 1px solid #E7E5E2;
+		-webkit-box-shadow: 0 5px 15px rgba(0,0,0,.5);
+		box-shadow: 0 5px 15px rgba(0,0,0,.5);
+	}
+
+	.buyer-contact .contact-title {
+		height: 26px;
+		background-color: #5078cb;
+		text-align: right;
+		padding-right: 15px;
+		line-height: 26px;
+		color: white;
+	}
+
+	.buyer-contact .company-name{
+		margin:30px;
+	}
+	.buyer-contact .company-name p{
+		font-size:14px;
+		line-height: 25px;
+		padding-bottom:10px;
+	}
+	.buyer-contact .company-name p:last-child{
+		text-align: center;
+	}
+	.buyer-contact .company-name a{
+		color:#5078cb;
+	}
+	.buyer-contact .company-name i{
+		font-size:20px;
+	}
+	.buyer-contact .contact-title a,.buyer-contact .contact-title a:hover {
+		color: white !important;
+	}
+
 	.payment a {
 		text-decoration:none;
 	}
@@ -45,10 +90,16 @@
 	.payment .bill-radio span{
 		margin-right: 10px;
 	}
+	.payment .bill-radio b{
+		margin-left: 100px;
+		font-size:14px;
+		color: #ef2324;
+	}
 	.payment .bill-radio span:hover{
 		cursor: pointer;
 		color: #5078cb;
 	}
+
 	.payment .bill-radio input {
 		display: none;
 	}
@@ -569,7 +620,7 @@
 					<input type="radio"  name="bill" ng-checked="order.invoicetype == '1207'"/>
 					<label></label><em>暂不开票</em>
 				</span>
-				<span  ng-click="selectBill('1206')">
+				<span  ng-click="selectBill('1206')" ng-hide="storeArray.length == 1 && hideNormal">
 					<input type="radio"  name="bill" ng-checked="order.invoicetype == '1206'"/>
 					<label></label><em>增值税普通发票</em>
 				</span>
@@ -577,6 +628,7 @@
 					<input type="radio"  name="bill" ng-checked="order.invoicetype == '1205'"/>
 					<label></label><em>增值税专用发票</em>
 				</span>
+				<b ng-if="order.invoicetype == '1206' && hideNormal">因存在部分寄售产品,寄售产品默认仅提供增值税专票</b>
 			</p>
 			<div class="pay_oder_xq_list no-need-bill f14" ng-if="order.invoicetype=='1207'">
 			</div>
@@ -836,4 +888,13 @@
 			</div>
 		</div>
 	</div>
+	<div class="buyer-contact" ng-if="showBillFrame">
+		<div class="contact-title">
+			<a ng-click="cancelFrame()"><i style="font-size: 20px" class="fa fa-close fa-lg" aria-hidden="true"></i></a>
+		</div>
+		<div class="company-name">
+			<p>您还未填写&nbsp;<a ng-click="goToBillPage()">增值税专票信息</a>&nbsp;,请进行完善,否则无法开具寄售产品发票</p>
+			<P><button class="btn" ng-click="perfectLater()" style="background: #5078cb;border-radius:0px;color:#fff;">暂不完善</button>&nbsp;<a ng-click="goToBillPage()" class="send">立刻完善&nbsp;<i class="fa fa-arrow-right"></i></a></P>
+		</div>
+	</div>
 </div>

+ 2 - 2
src/main/webapp/resources/view/vendor/forstore/vendor_component_batchapplylist.html

@@ -47,12 +47,12 @@
             <div class="row">
                 <div class="col-xs-12">
                     <div class="screen" style="padding: 7px 0;">
-                        <div class="screen_time fl">
+                       <!-- <div class="screen_time fl">
                             <span>申请时间</span>
                             <input type="text" value="2016-05-01" class="timeStart">
                             -
                             <input type="text" value="2016-05-31" class="timeEnd">
-                        </div>
+                        </div>-->
                         <div class="sreach fr">
                             <input type="search" class="form-control"
                                    ng-model="keyword" ng-search="onSearch()" placeholder="请输入申请单号查询">

+ 2 - 2
src/main/webapp/resources/view/vendor/left_nav.html

@@ -29,9 +29,9 @@
 		<li ng-class="{'active' : active == 'vendor_brand_apply'}"><a href="javascript:void(0)" ui-sref="vendor_brand_apply">品牌申请</a></li>
 		<li ng-class="{'active' : active == 'vendor_component_apply'}"><a href="javascript:void(0)" ui-sref="vendor_component_apply">器件申请</a></li>
 	<!--	<li ng-class="{'active' : active == 'vendor_productOn'}"><a href="javascript:void(0)" ui-sref="vendor_productOn">产品导入</a></li>-->
-		<li ng-class="{'active' : active == 'vendor_productOn'}"><a href="javascript:void(0)" ui-sref="vendor_upload">产品导入</a></li>
+		<li ng-class="{'active' : active == 'vendor_upload'}"><a href="javascript:void(0)" ui-sref="vendor_upload">产品导入</a></li>
 		<!--<li ng-class="{'active' : active == 'vendor_repository'}"><a href="javascript:void(0)" ui-sref="vendor_repository">仓库管理</a></li>-->
-		<li ng-class="{'active' : active == 'vendor_goods'}"><a href="javascript:void(0)" ui-sref="vendor_standardPutOn">产品管理</a></li>
+		<li ng-class="{'active' : active == 'vendor_material'}"><a href="javascript:void(0)" ui-sref="vendor_material">产品管理</a></li>
 		<!--<li ng-class="{'active' : active == 'vendor_after_sale'}" class="undo">-->
 		<!--&lt;!&ndash;<a href="javascript:void(0)" ui-sref="vendor_after_sale">售后处理</a>&ndash;&gt;-->
 		<!--售后处理-->