Kaynağa Gözat

Merge remote-tracking branch 'origin/feature-201823-wangcz' into feature-201823-wangcz

yujia 7 yıl önce
ebeveyn
işleme
144cbed661
46 değiştirilmiş dosya ile 4145 ekleme ve 1017 silme
  1. 1 0
      pom.xml
  2. 4 1
      src/main/java/com/uas/platform/b2c/common/account/controller/UserController.java
  3. 8 3
      src/main/java/com/uas/platform/b2c/common/search/service/impl/SearcherServiceImpl.java
  4. 43 2
      src/main/java/com/uas/platform/b2c/common/weixin/contoller/WeChatController.java
  5. 21 0
      src/main/java/com/uas/platform/b2c/common/weixin/model/UserVo.java
  6. 17 2
      src/main/java/com/uas/platform/b2c/common/weixin/service/WeChatService.java
  7. 65 12
      src/main/java/com/uas/platform/b2c/common/weixin/service/impl/WeChatServiceImpl.java
  8. 41 0
      src/main/java/com/uas/platform/b2c/core/utils/MessageUtils.java
  9. 13 0
      src/main/java/com/uas/platform/b2c/core/utils/StringUtilB2C.java
  10. 16 1
      src/main/java/com/uas/platform/b2c/prod/product/kind/model/Kind.java
  11. 1 3
      src/main/java/com/uas/platform/b2c/prod/store/facade/impl/StoreInFacadeImpl.java
  12. BIN
      src/main/webapp/resources/img/user/images/invoice-nor.png
  13. BIN
      src/main/webapp/resources/img/user/images/invoice-spec.png
  14. 22 4
      src/main/webapp/resources/js/sso/app.js
  15. 98 165
      src/main/webapp/resources/js/sso/controllers/ssoAddressCtrl.js
  16. 431 0
      src/main/webapp/resources/js/sso/controllers/ssoInvoiceCtrl.js
  17. 1 0
      src/main/webapp/resources/js/sso/main.js
  18. 3 3
      src/main/webapp/resources/js/usercenter/app.js
  19. 129 38
      src/main/webapp/resources/js/usercenter/controllers/forstore/bom_detail_ctrl.js
  20. 1 1
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_invoice_ctrl.js
  21. 10 3
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_invoice_record_ctrl.js
  22. 19 4
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_no_invoice_ctrl.js
  23. 285 237
      src/main/webapp/resources/js/usercenter/controllers/forstore/pay_center_ctrl.js
  24. 1 1
      src/main/webapp/resources/js/vendor/app.js
  25. 70 2
      src/main/webapp/resources/js/vendor/controllers/forstore/pay_center_ctrl.js
  26. 24 4
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_invoice_ctrl.js
  27. 97 0
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_logistics_ctrl.js
  28. 0 132
      src/main/webapp/resources/view/common/bankInfoModal.html
  29. 4 4
      src/main/webapp/resources/view/common/modal/edit_address_modal.html
  30. 3 0
      src/main/webapp/resources/view/sso/left_nav.html
  31. 160 8
      src/main/webapp/resources/view/sso/ssoAddress.html
  32. 740 0
      src/main/webapp/resources/view/sso/ssoInvoice.html
  33. 8 8
      src/main/webapp/resources/view/sso/staffManagement.html
  34. 313 43
      src/main/webapp/resources/view/usercenter/forstore/bomDetail.html
  35. 2 2
      src/main/webapp/resources/view/usercenter/forstore/buyer_invoice.html
  36. 198 52
      src/main/webapp/resources/view/usercenter/forstore/buyer_invoice_record.html
  37. 69 24
      src/main/webapp/resources/view/usercenter/forstore/buyer_no_invoice.html
  38. 373 56
      src/main/webapp/resources/view/usercenter/forstore/pay_center.html
  39. 68 9
      src/main/webapp/resources/view/usercenter/forstore/seekPurchase.html
  40. 2 2
      src/main/webapp/resources/view/usercenter/left_nav.html
  41. 1 1
      src/main/webapp/resources/view/vendor/forstore/addExistUser.html
  42. 264 91
      src/main/webapp/resources/view/vendor/forstore/pay_center.html
  43. 5 3
      src/main/webapp/resources/view/vendor/forstore/purchaseOffer.html
  44. 353 86
      src/main/webapp/resources/view/vendor/forstore/vendor-invoice.html
  45. 160 9
      src/main/webapp/resources/view/vendor/forstore/vendor_logistics.html
  46. 1 1
      src/main/webapp/resources/view/vendor/left_nav.html

+ 1 - 0
pom.xml

@@ -393,6 +393,7 @@
 			<groupId>com.uas.dfs</groupId>
 			<artifactId>dfs-api</artifactId>
 		</dependency>
+
 		<!-- search -->
 		<dependency>
 			<groupId>com.uas.search</groupId>

+ 4 - 1
src/main/java/com/uas/platform/b2c/common/account/controller/UserController.java

@@ -665,8 +665,11 @@ public class UserController {
 		userService.saveUserRole(user);
 		if (user != null) {
 			logger.log("用户信息", "修改用户信息,UU:" + user.getUserUU());
-			if (SystemSession.getUser().getUserUU().equals(user.getUserUU()))
+			if (SystemSession.getUser().getUserUU().equals(user.getUserUU())) {
+				user.setEnterprises(SystemSession.getUser().getEnterprises());
+				user.setCurrentEnterprise(SystemSession.getUser().getEnterprise().getUu());
 				request.getSession().setAttribute("user", user);
+			}
 		}
 		return new ResponseEntity<String>(HttpStatus.OK);
 	}

+ 8 - 3
src/main/java/com/uas/platform/b2c/common/search/service/impl/SearcherServiceImpl.java

@@ -659,12 +659,17 @@ public class SearcherServiceImpl implements SearcherService {
             type = "all";
         }
         try {
-            if (type.equals("store")) {
+            if (type.equals("store") || type.equals("all")) {
                 List<VendorIntroduction> vendorIntroductions = vendorIntroductionService.getVendorIntroduction(1,1024*1024*1024,keyword,null).getContent();
                 List<Object> resultMap = FastjsonUtils.fromJsonArray(JSON.toJSONString(vendorIntroductions.stream().map(VendorIntroduction::getEnName).map(en -> {Map s = new HashMap ();s.put("name", en);return s;}).collect(Collectors.toList())
                 ));
-                result= new HashMap<>();
-                result.put("result",resultMap);
+                if (type.equals("store")) {
+                    result= new HashMap<>();
+                    result.put("result",resultMap);
+                } else {
+                    result = searchService.getSimilarKeywords(keyword, type);
+                    result.put("store", resultMap);
+                }
             } else {
                 result = searchService.getSimilarKeywords(keyword, type);
             }

+ 43 - 2
src/main/java/com/uas/platform/b2c/common/weixin/contoller/WeChatController.java

@@ -1,15 +1,18 @@
 package com.uas.platform.b2c.common.weixin.contoller;
 
-import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.common.account.service.UserService;
 import com.uas.platform.b2c.common.weixin.model.MessageModel;
+import com.uas.platform.b2c.common.weixin.model.UserVo;
 import com.uas.platform.b2c.common.weixin.service.WeChatService;
 import com.uas.platform.b2c.common.weixin.util.CheckoutUtil;
+import com.uas.platform.b2c.core.utils.StringUtilB2C;
 import org.apache.commons.lang3.ArrayUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.ui.Model;
 import org.springframework.ui.ModelMap;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -32,10 +35,20 @@ public class WeChatController {
 
     private Logger logger = LoggerFactory.getLogger(WeChatController.class);
 
+    protected static ModelMap success(Object data) {
+        return new ModelMap("success", true).addAttribute("content", data);
+    }
+
+    protected static ModelMap error(String errMsg) {
+        return new ModelMap("error", true).addAttribute("errMsg", errMsg);
+    }
 
     @Autowired
     private WeChatService weChatService;
 
+    @Autowired
+    private UserService userService;
+
     /**
      * 与微信服务器接口配置
      *
@@ -98,8 +111,36 @@ public class WeChatController {
      * @return
      */
     @RequestMapping(value = "/bindUser", method = RequestMethod.POST)
-    public ModelMap bindUser(@RequestBody User user) {
+    public ModelMap bindUser(@RequestBody UserVo user) {
         logger.info("绑定用户 userUU: {}", user.getUserUU());
         return weChatService.bindUser(user);
     }
+
+    /**
+     * 发送手机验证码
+     * @param mobile 手机号
+     * @return
+     */
+    @RequestMapping(value = "/sendSmsCode", method = RequestMethod.GET)
+    public ModelMap sendSmsCode(String mobile) {
+        // 验证手机号是否为空
+        mobile = StringUtils.trimAllWhitespace(mobile);
+        if (StringUtils.isEmpty(mobile)) {
+            return error("手机号不能为空");
+        }
+        // 验证是否存在该用户
+        try {
+            userService.findUserByUserTel(mobile);
+        } catch (Exception e) {
+            return error(e.getMessage());
+        }
+
+        // 随机获得验证码
+        String code = StringUtilB2C.getRandomNumber(6);
+        logger.info("用户:{} 发送验证码,code:{}", mobile, code);
+
+        weChatService.sendSMS(mobile, code);
+        return success("发送成功");
+    }
+
 }

+ 21 - 0
src/main/java/com/uas/platform/b2c/common/weixin/model/UserVo.java

@@ -0,0 +1,21 @@
+package com.uas.platform.b2c.common.weixin.model;
+
+import com.uas.platform.b2c.common.account.model.User;
+
+/**
+ * 验证码 user 包装类
+ * @author liuam
+ * @since 2018/8/14 0014 下午 17:56
+ */
+public class UserVo extends User {
+
+    private String code;
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+}

+ 17 - 2
src/main/java/com/uas/platform/b2c/common/weixin/service/WeChatService.java

@@ -1,7 +1,7 @@
 package com.uas.platform.b2c.common.weixin.service;
 
-import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.weixin.model.MessageModel;
+import com.uas.platform.b2c.common.weixin.model.UserVo;
 import org.springframework.ui.ModelMap;
 
 import java.util.List;
@@ -33,5 +33,20 @@ public interface WeChatService {
      * @param user
      * @return
      */
-    ModelMap bindUser(User user);
+    ModelMap bindUser(UserVo user);
+
+    /**
+     * 发送验证码
+     * @param mobile 手机号
+     * @param code 验证码
+     */
+    void sendSMS(String mobile, String code);
+
+    /**
+     * 对验证码进行验证
+     * @param mobile 手机号
+     * @param code 需要验证的验证码
+     * @return true 验证成功
+     */
+    boolean verifyCode(String mobile, String code);
 }

+ 65 - 12
src/main/java/com/uas/platform/b2c/common/weixin/service/impl/WeChatServiceImpl.java

@@ -5,6 +5,7 @@ import com.uas.platform.b2c.common.account.model.Enterprise;
 import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.weixin.exception.WeChatException;
 import com.uas.platform.b2c.common.weixin.model.MessageModel;
+import com.uas.platform.b2c.common.weixin.model.UserVo;
 import com.uas.platform.b2c.common.weixin.model.req.AuthTokenParams;
 import com.uas.platform.b2c.common.weixin.model.req.AuthUserParams;
 import com.uas.platform.b2c.common.weixin.model.req.WechatTemplateMsg;
@@ -15,6 +16,7 @@ import com.uas.platform.b2c.common.weixin.model.resp.TemplateMsgResult;
 import com.uas.platform.b2c.common.weixin.service.WeChatService;
 import com.uas.platform.b2c.common.weixin.util.HttpReqUtil;
 import com.uas.platform.b2c.common.weixin.util.WeChatUtil;
+import com.uas.platform.b2c.core.utils.MessageUtils;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
 import com.uas.sso.entity.UserAccount;
@@ -51,10 +53,15 @@ public class WeChatServiceImpl implements WeChatService{
     private Logger logger = LoggerFactory.getLogger(WeChatServiceImpl.class);
 
     /**
-     * 保存到 redis 里的过期时间(second)
+     * 保存到 redis 里的 ACCESS_TOKEN 过期时间(second)
      */
     private static final Integer ACCESS_TOKEN_EXPIRES_IN = 3600;
 
+    /**
+     * 保存到 redis 里的验证码过期时间(second)
+     */
+    private static final Integer SMS_EXPIRES_IN = 10 * 60;
+
     @Override
     public ModelMap getWxUserInfo(String code, String state, String openId) {
         logger.info("得到用户信息 code: {}, state: {}, openId: {}", code, state, openId);
@@ -126,7 +133,7 @@ public class WeChatServiceImpl implements WeChatService{
                 params.put("keyword3", WechatTemplateMsg.item("点击查看详情", "#173177"));
                 params.put("remark", WechatTemplateMsg.item(WeChatUtil.TEMPLATE_REMARK.replace("cmpCode", messageModel.getCmpCode()), null));
 
-                wechatTemplateMsg.setUrl("https://www.usoftmall.com/mobile/applyPurchase/list/businessOpportunity?enuu=" + messageModel.getReceiverEnuu());
+                wechatTemplateMsg.setUrl("https://www.usoftmall.com/mobile/wechat?url=mobile/applyPurchase/list/businessOpportunity?enuu=" + messageModel.getReceiverEnuu());
                 wechatTemplateMsg.setTouser(user.getOpenId());
                 wechatTemplateMsg.setData(params);
                 String json = HttpReqUtil.doPost(sendTemplateUrl, FlexJsonUtils.toJsonDeep(wechatTemplateMsg));
@@ -155,12 +162,22 @@ public class WeChatServiceImpl implements WeChatService{
      * @return
      */
     @Override
-    public ModelMap bindUser(User user) {
-        logger.info("微信绑定用户 userUU: {}", user.getUserUU());
+    public ModelMap bindUser(UserVo user) {
+        logger.info("微信绑定用户 userTel: {}", user.getUserTel());
         ModelMap result = new ModelMap();
+        if(StringUtils.isEmpty(user.getOpenId())){
+            throw new IllegalOperatorException("找不到OpenId!");
+        }
         // 账户中心校验手机号和密码是否正确
-        if (StringUtils.isEmpty(user) || StringUtils.isEmpty(user.getUserTel()) || StringUtils.isEmpty(user.getUserPwd()) || StringUtils.isEmpty(user.getOpenId())) {
-            throw new IllegalOperatorException("信息不完整!");
+        if (StringUtils.isEmpty(user)|| StringUtils.isEmpty(user.getUserTel()) || StringUtils.isEmpty(user.getUserPwd())) {
+            if (StringUtils.isEmpty(user.getCode())) {
+                throw new IllegalOperatorException("信息不完整!");
+            } else {
+                boolean verifyCode = verifyCode(user.getUserTel(), user.getCode());
+                if (!verifyCode) {
+                   return new ModelMap("error", true).addAttribute("errMsg", "验证码错误");
+                }
+            }
         }
         // 是否存在用户信息
         List<User> oldUsers = userDao.findUserByUserTel(user.getUserTel());
@@ -180,16 +197,20 @@ public class WeChatServiceImpl implements WeChatService{
             if (!StringUtils.isEmpty(oldUser.getOpenId())) {
                 throw new IllegalOperatorException("该用户已经绑定微信号");
             }
-            pass = AccountUtils.fuzzyCheckPassword(userView);
-            if (!pass) {
-                throw new IllegalOperatorException("手机号或密码不正确");
+            if(!StringUtils.isEmpty(user.getCode()) ){
+                logger.info("通过手机验证码绑定");
+            }else {
+                pass = AccountUtils.fuzzyCheckPassword(userView);
+                if (!pass) {
+                    throw new IllegalOperatorException("手机号或密码不正确");
+                }
             }
             oldUser.setOpenId(user.getOpenId());
-            user = userDao.save(oldUser);
+            User newUser = userDao.save(oldUser);
             // 转成UserAccount便于登录
-            UserAccount userAccount = convertUserAccount(user);
+            UserAccount userAccount = convertUserAccount(newUser);
             // 企业信息单独提出
-            Set<Enterprise> enterprises = user.getEnterprises();
+            Set<Enterprise> enterprises = newUser.getEnterprises();
             result.put("userAccount", userAccount);
             result.put("enterprises", enterprises);
             result.put("success", true);
@@ -202,6 +223,36 @@ public class WeChatServiceImpl implements WeChatService{
         }
     }
 
+    /**
+     * 发送验证码
+     * @param mobile 手机号
+     * @param code 验证码
+     */
+    @Override
+    public void sendSMS(String mobile, String code) {
+        redisTemplate.opsForValue().set(mobile, code, SMS_EXPIRES_IN, TimeUnit.SECONDS);
+        logger.info("用户:{},验证码:{},redis's key:{},redis's expires_in:{}", mobile, code, mobile, SMS_EXPIRES_IN);
+        MessageUtils.sendSms(mobile, code);
+    }
+
+    /**
+     * 对验证码进行验证
+     * @param mobile 手机号
+     * @param code 需要验证的验证码
+     * @return true 验证成功
+     */
+    @Override
+    public boolean verifyCode(String mobile, String code) {
+        logger.info("WeChatServiceImpl#verifyCode 对验证码进行验证:mobile:{},code:{}", mobile, code);
+        String redisCode = (String) redisTemplate.opsForValue().get(mobile);
+        if (code.equals(redisCode)) {
+            logger.info("WeChatServiceImpl#verifyCode 验证成功:mobile:{},code:{}", mobile, code);
+            return true;
+        }
+        logger.warn("WeChatServiceImpl#verifyCode 验证失败:mobile:{},code:{}", mobile, code);
+        return false;
+    }
+
     /**
      * 通过code获取用户openId
      * @param code
@@ -264,4 +315,6 @@ public class WeChatServiceImpl implements WeChatService{
         redisTemplate.opsForValue().set("WX_ACCESS_TOKEN", access_token, ACCESS_TOKEN_EXPIRES_IN, TimeUnit.SECONDS);
         return access_token;
     }
+
+
 }

+ 41 - 0
src/main/java/com/uas/platform/b2c/core/utils/MessageUtils.java

@@ -0,0 +1,41 @@
+package com.uas.platform.b2c.core.utils;
+
+import com.uas.message.sms.service.SmsService;
+import com.uas.platform.b2c.common.base.service.impl.RestSmsServiceImpl;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * @author wangmh
+ * @create 2018-06-05 17:17
+ * @desc 发送验证码工具类
+ **/
+public class MessageUtils {
+
+    private static SmsService smsService;
+
+    static {
+        smsService = ContextUtils.getBean(RestSmsServiceImpl.class);
+    }
+
+    /**
+     * 验证码模板ID
+     */
+    private static String TEMPLATE_ID = "f32af236-7211-4399-bf2c-bee41ed97a32";
+
+    /**
+     * 发送短信
+     * @param mobile 手机号
+     * @param data 发送短信适配数据,按顺序添加
+     */
+    public static void sendSms(String mobile, Object... data) {
+        try {
+            if (!StringUtils.isEmpty(mobile)) {
+                smsService.send(TEMPLATE_ID, mobile, data);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+}

+ 13 - 0
src/main/java/com/uas/platform/b2c/core/utils/StringUtilB2C.java

@@ -405,5 +405,18 @@ public class StringUtilB2C {
 		}
 	}
 
+	/**
+	 * 随机数字
+	 *
+	 * @param len
+	 *            数字长度
+	 * @return
+	 */
+	public static String getRandomNumber(int len) {
+		int max = (int) Math.pow(10, len) - 1;
+		int min = (int) Math.pow(10, len - 1);
+		return String.valueOf(new Random().nextInt(max) % (max - min + 1) + min);
+	}
+
 
 }

+ 16 - 1
src/main/java/com/uas/platform/b2c/prod/product/kind/model/Kind.java

@@ -2,6 +2,7 @@ package com.uas.platform.b2c.prod.product.kind.model;
 
 import com.alibaba.fastjson.annotation.JSONField;
 import com.uas.platform.core.model.Constant;
+import javax.validation.constraints.NotNull;
 import org.codehaus.jackson.annotate.JsonIgnore;
 import org.hibernate.annotations.Cache;
 import org.hibernate.annotations.CacheConcurrencyStrategy;
@@ -103,6 +104,13 @@ public class Kind implements Serializable {
 	@Column(name = "ki_search_count")
 	private Long searchCount;
 
+	/**
+	 * 类目图标
+	 */
+	@NotNull
+	@Column(name = "ki_img")
+	private String img = "";
+
 	/**
 	 * 包含的属性
 	 */
@@ -260,7 +268,14 @@ public class Kind implements Serializable {
 		this.searchCount = searchCount;
 	}
 
-	/*
+	public String getImg() {
+		return img;
+	}
+
+	public void setImg(String img) {
+		this.img = img;
+	}
+/*
 	 * public KindUas converUas(Kind kind){ KindUas uas = new KindUas();
 	 * uas.setComponentPrefix(kind.getComponentPrefix());
 	 * uas.setComponentsuffix(kind.getComponentsuffix());

+ 1 - 3
src/main/java/com/uas/platform/b2c/prod/store/facade/impl/StoreInFacadeImpl.java

@@ -61,14 +61,12 @@ public class StoreInFacadeImpl implements StoreInFacade {
 		if (store == null) {
 			return new ResultMap(CodeType.ERROR_STATE, String.format("编号%s对应的店铺不存在", uuid));
 		}
-//		store.setEnterpriseJson(newStoreInfo.getEnterpriseJson());
-//		store.setEnterprise(newStoreInfo.getEnterprise());
 		ResultMap resultMap = setStoreInfoByKind(store, newStoreInfo, kind);
 		if (resultMap != null) {
 			return resultMap;
 		}
 		StoreIn storeIn = storeInDao.findByStoreName(newStoreInfo.getStoreName());
-		if (!StringUtils.isEmpty(storeIn)) {
+		if (!StringUtils.isEmpty(storeIn) && !StringUtils.isEmpty(newStoreInfo.getEnterprise())) {
 			if (!storeIn.getEnUU().equals(newStoreInfo.getEnterprise().getUu())) {
 				return new ResultMap(CodeType.NOT_PERMIT, "该名称店铺名称已经存在,请您更换一个店铺名称进行更改");
 			}

BIN
src/main/webapp/resources/img/user/images/invoice-nor.png


BIN
src/main/webapp/resources/img/user/images/invoice-spec.png


+ 22 - 4
src/main/webapp/resources/js/sso/app.js

@@ -1,7 +1,7 @@
 
-define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'common/services', 'common/directives','common/query/kind', 'common/query/brand', 'common/query/component', 'common/query/order', 'common/query/cart', 'common/query/goods', 'common/query/return' ,'angular-toaster', 'common/query/urlencryption', 'ui-jquery', 'common/query/bankTransfer', 'common/query/bankInfo', 'common/query/change', 'common/query/rate', 'common/query/logistics', 'common/query/address' ,'angular-toaster','common/query/collection', 'common/query/proofing', 'common/query/bill', 'common/query/user','file-upload', 'file-upload-shim', 'common/query/bankInfo' , 'common/query/responseLogistics', 'common/query/payment', 'common/query/afterSale', 'common/query/messageBoard', 'common/query/importDeclaration', 'common/query/enterprise', 'common/query/invoice', 'common/query/refund', 'common/query/recommendation', 'common/query/logisticsPort', 'common/query/storeInfo', 'common/query/tradeMessageNotice', 'common/query/tradeBasicProperties', 'common/query/browsingHistory', 'common/query/internalMessage', 'common/module/chat_web_module', 'angular-filter', 'common/query/vendor','common/query/seekPurchase', 'common/query/search', 'angular-sanitize', 'common/query/authority'], function(angularAMD) {
+define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'common/services', 'common/directives','common/query/kind', 'common/query/brand', 'common/query/component', 'common/query/order', 'common/query/cart', 'common/query/goods', 'common/query/return' ,'angular-toaster', 'common/query/urlencryption', 'ui-jquery', 'common/query/bankTransfer', 'common/query/bankInfo', 'common/query/change', 'common/query/rate', 'common/query/logistics', 'common/query/address' ,'angular-toaster','common/query/collection', 'common/query/proofing', 'common/query/bill', 'common/query/user','file-upload', 'file-upload-shim', 'common/query/bankInfo' , 'common/query/responseLogistics', 'common/query/payment', 'common/query/afterSale', 'common/query/messageBoard', 'common/query/importDeclaration', 'common/query/enterprise', 'common/query/invoice', 'common/query/refund', 'common/query/recommendation', 'common/query/logisticsPort', 'common/query/storeInfo', 'common/query/tradeMessageNotice', 'common/query/tradeBasicProperties', 'common/query/browsingHistory', 'common/query/internalMessage', 'common/module/chat_web_module', 'angular-filter', 'common/query/vendor','common/query/seekPurchase', 'common/query/search', 'angular-sanitize', 'common/query/authority','common/query/purchase'], function(angularAMD) {
 	'use strict';
-	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ng.local', 'ngTable', 'common.services', 'common.directives', 'tool.directives', 'common.query.kind', 'brandServices', 'componentServices', 'orderServices', 'cartServices', 'goodsServices', 'returnServices' , 'toaster', 'urlencryptionServices', 'ui.jquery', 'bankTransfer', 'bankInfo', 'changeServices','rateServices', 'logisticsServices', 'addressServices', 'toaster','collection','proofingServices', 'billServices', 'common.query.user', 'angularFileUpload', 'bankInfo', 'responseLogisticsService', 'PaymentService', 'afterSaleService', 'messageBoardServices', 'table.directives', 'importDeclaration', 'common.query.enterprise', 'invoiceServices', 'refundModule', 'recommendation','logisticsPortService', 'storeInfoServices', 'tradeMessageNoticeModule', 'tradeBasicPropertiesServices', 'BrowsingHistory', 'internalMessageServices', 'WebChatModule', 'angular.filter', 'vendorServices','seekPurchaseServices', 'searchService', 'ngSanitize', 'authorityServices']);
+	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ng.local', 'ngTable', 'common.services', 'common.directives', 'tool.directives', 'common.query.kind', 'brandServices', 'componentServices', 'orderServices', 'cartServices', 'goodsServices', 'returnServices' , 'toaster', 'urlencryptionServices', 'ui.jquery', 'bankTransfer', 'bankInfo', 'changeServices','rateServices', 'logisticsServices', 'addressServices', 'toaster','collection','proofingServices', 'billServices', 'common.query.user', 'angularFileUpload', 'bankInfo', 'responseLogisticsService', 'PaymentService', 'afterSaleService', 'messageBoardServices', 'table.directives', 'importDeclaration', 'common.query.enterprise', 'invoiceServices', 'refundModule', 'recommendation','logisticsPortService', 'storeInfoServices', 'tradeMessageNoticeModule', 'tradeBasicPropertiesServices', 'BrowsingHistory', 'internalMessageServices', 'WebChatModule', 'angular.filter', 'vendorServices','seekPurchaseServices', 'searchService', 'ngSanitize', 'authorityServices', 'purchaseServices']);
 	app.init = function() {
 		angularAMD.bootstrap(app);
 	};
@@ -57,7 +57,25 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'commo
             title: '收货地址',
             controller: 'ssoAddressCtrl',
             controllerUrl: 'app/controllers/ssoAddressCtrl'
-        }))
+        })).state('ssoInvoice', angularAMD.route({
+            url: '/invoice',
+            templateUrl: 'static/view/sso/ssoInvoice.html',
+            title: '发票管理',
+            controller: 'ssoInvoiceCtrl',
+            controllerUrl: 'app/controllers/ssoInvoiceCtrl'
+        })).state('payAccount', angularAMD.route({
+			url: '/payAccount?status',
+			title: '付款账户',
+			templateUrl: 'static/view/usercenter/forstore/pay_center.html',
+			controller: 'buyerPayCenterCtrl',
+			controllerUrl: 'js/usercenter/controllers/forstore/pay_center_ctrl'
+		})).state('gatheringAccount', angularAMD.route({
+			url: '/gatheringAccount?tab',
+			templateUrl: 'static/view/vendor/forstore/pay_center.html',
+			title: '收款账户',
+			controller: 'vendorPayCenterCtrl',
+			controllerUrl: 'js/vendor/controllers/forstore/pay_center_ctrl'
+		}))
 	}]);
 
 	// 状态码  -> 描述
@@ -221,7 +239,7 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'commo
             });
             $rootScope.userInfo = data;
             $rootScope.userInfo.enterprise.enName ? $rootScope.personage = true : $rootScope.personage = false;
-            if ($rootScope.userInfo.enterprise) {
+			if ($rootScope.userInfo.enterprise) {
             	$rootScope.userInfo.enterprise.enAdminuu === $rootScope.userInfo.userUU ? $rootScope.isAdmin = true : $rootScope.isAdmin = false;
 			} else {
                 $rootScope.isAdmin = false

+ 98 - 165
src/main/webapp/resources/js/sso/controllers/ssoAddressCtrl.js

@@ -1,19 +1,20 @@
 /**
- *  账户管理控制器
+ *  账户管理控制器canAddTotal
  */
 define(['app/app'], function (app) {
     "use strict";
     app.register.controller('ssoAddressCtrl',
         ['$scope', '$rootScope', 'ngTableParams', 'BaseService',
             'ShippingAddress', '$modal', 'Enterprise', 'User', 'toaster', '$http',
-            '$stateParams', 'AuthenticationService',
             function ($scope, $rootScope, ngTableParams, BaseService,
-                      ShippingAddress, $modal, Enterprise, User, toaster, $http,
-                      $stateParams, AuthenticationService) {
+                      ShippingAddress, $modal, Enterprise, User, toaster, $http) {
                 document.title = '收货地址-帐户中心';
                 $rootScope.active = 'sso_address';
                 $rootScope.userInfoBackup = angular.copy($rootScope.userInfo);
                 $scope.canAddTotal = 20;
+                $scope.isSendType = false;
+                $scope.newAddr = {};
+                $scope.isSetTop = false;
 
                 /**
                  * 设置默认收货地址
@@ -46,131 +47,6 @@ define(['app/app'], function (app) {
                         toaster.pop('error', '删除收货地址失败');
                     });
                 };
-                $scope.telFlag = true;
-                $scope.emailFlag = true;
-                /**
-                 * 验证手机号是否可用
-                 */
-                $scope.telValid = function (tel) {
-                    if (tel) {
-                        if (tel == $rootScope.userInfoBackup.userTel){
-                            $scope.telFlag = true;
-                            return;
-                        }
-                        $http.get('basic/user/telEnable', {
-                            params: {
-                                tel: tel
-                            }
-                        }).success(function (data) {
-                            data = eval(data);
-                            if (data == true) {
-                                $scope.telFlag = true;
-                            } else {
-                                if (tel.length == 11)
-                                    toaster.pop('error', '错误', '手机号 ' + tel + ' 已被注册');
-                                $scope.telFlag = false;
-                            }
-                        }).error(function () {
-                            $scope.telFlag = false;
-                        });
-                    } else {
-                        $scope.telFlag = false;
-                    }
-                };
-
-                /**
-                 * 验证邮箱是否可用
-                 */
-                $scope.emailValid = function (email) {
-                    if (email) {
-                        if (email == $rootScope.userInfoBackup.userEmail){
-                            $scope.emailFlag = true;
-                            return;
-                        }
-                        $http.get('basic/user/emailEnable', {
-                            params: {
-                                email: email
-                            }
-                        }).success(function (data) {
-                            data = eval(data);
-                            if (data == true) {
-                                $scope.emailFlag = true;
-                            } else {
-                                toaster.pop('error', '错误', '邮箱 ' + email + ' 已被注册');
-                                $scope.emailFlag = false;
-                            }
-                        }).error(function () {
-                            $scope.emailFlag = false;
-                        });
-                    } else {
-                        $scope.emailFlag = false;
-                    }
-                };
-                /**
-                 * 变更到更新状态
-                 */
-                $scope.changeToUpdate = function(isUpdate) {
-                    $scope.updateState = isUpdate;
-                    if ($scope.updateState == false){
-                        $rootScope.userInfo = angular.copy($rootScope.userInfoBackup);
-                    }
-                };
-                /**
-                 * 验证用户信息
-                 */
-                function validateUserInfo() {
-                    var props = ['userName', 'userEmail', 'userTel'];
-
-                    var flag = true;
-                    angular.forEach(props, function (prop) {
-                        if ($rootScope.userInfo.hasOwnProperty(prop)) {
-                            if (!$rootScope.userInfo[prop] || $rootScope.userInfo[prop] === '') {
-                                console.log(prop + '不能为空');
-                                // TODO 记录验证信息
-                                flag = false;
-                            }
-                        } else {
-                            console.log(prop + '不能为空');
-                            flag = false;
-                        }
-                    });
-                    return flag;
-                }
-                /**
-                 * 保存用户信息
-                 */
-                $scope.saveUpdate = function () {
-                    // 先检查信息是否为空
-                    if (angular.equals($rootScope.userInfo,$rootScope.userInfoBackup)){
-                        toaster.pop('error', '未做任何修改');
-                        $scope.updateState = false;
-                        return ;
-                    }
-                    var userInfoFlag = validateUserInfo();
-                    if (!userInfoFlag) {
-                        toaster.pop('error', '请补充完信息后再次提交');
-                        return ;
-                    }
-
-                    if ($scope.telFlag && $scope.emailFlag) {
-                        Enterprise.updateUser({uu: $rootScope.userInfo.userUU}, $rootScope.userInfo, function () {
-                            $scope.loading = false;
-                            toaster.pop('success', '提示', '用户信息修改成功');
-                            $rootScope.userInfoBackup = angular.copy($rootScope.userInfo);
-                            $scope.updateState = false;
-
-                        }, function (response) {
-                            $scope.updateState = false;
-                            $rootScope.userInfo = angular.copy($rootScope.userInfoBackup);
-                            toaster.pop('error', '修改失败', response.data);
-                        });
-                    }
-                    else{
-                        toaster.pop('error', '提示', '修改失败!');
-                        $rootScope.userInfo = angular.copy($rootScope.userInfoBackup);
-                        $scope.updateState = false;
-                    }
-                };
 
                 // 分页数据
                 $scope.addressList = [];
@@ -222,6 +98,99 @@ define(['app/app'], function (app) {
                     toaster.pop('error', '系统错误 ' + '加载城市信息失败');
                 });
 
+                $scope.checkForm = function (num) {
+                    var size;
+                    if (num == 1) {
+                        if ($scope.newAddr.name) {
+                            size = $scope.newAddr.name.replace(/[^\x00-\xff]/g,
+                                '**').length;
+                            if (size > 20) {
+                                console.log(size);
+                                $scope.userError = true;
+                                return;
+                            }
+                            $scope.userError = false;
+                        }
+                    } else if (num == 2) {
+                        if ($scope.newAddr.tel) {
+                            size = $scope.newAddr.tel.replace(/[^\x00-\xff]/g,
+                                '**').length;
+                            if (size < 8 || size > 11) {
+                                $scope.telError = true;
+                                return;
+                            }
+                            $scope.telError = false;
+                            var telPatt = new RegExp("^[0-9]+$");
+                            if (telPatt.test($scope.newAddr.tel)) {
+                                $scope.telPatternError = false;
+                            } else {
+                                $scope.telPatternError = true;
+                            }
+                        }
+                    } else if (num == 3) {
+                        if ($scope.newAddr.detailAddress) {
+                            size = $scope.newAddr.detailAddress.replace(
+                                /[^\x00-\xff]/g, '**').length;
+                            if (size > 60) {
+                                $scope.addrError = true;
+                                return;
+                            }
+                            $scope.addrError = false;
+                        }
+                    } else if (num == 4) {
+                        var emailPatt = new RegExp(
+                            "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$");
+                        if ($scope.newAddr.email.length > 0 && !emailPatt.test(
+                            $scope.newAddr.email)) {
+                            $scope.emailPatternError = true;
+                        } else {
+                            $scope.emailPatternError = false;
+                        }
+                    }
+                };
+
+                $scope.reset = function(type) {
+                    type.$setPristine();
+                    type.$setUntouched();
+                    angular.forEach($scope.newAddr, function(value, key) {
+                        $scope.newAddr[key] = '';
+                    })
+                };
+
+                $scope.save = function () {
+                    var address = $scope.newAddr;
+
+                    if (!address){
+                        toaster.pop('error', '请补充未填写的信息');
+                        return ;
+                    }
+                    if (!address.name || !address.province || !address.city || !address.district ||
+                        !address.detailAddress || !address.tel){
+                        toaster.pop('error', '请补充未填写的信息');
+                        return ;
+                    }
+                    if ($scope.userError || $scope.telError || $scope.addrError || $scope.telPatternError ||
+                        $scope.emailPatternError){
+                        toaster.pop('error', '请修改红色框内的信息');
+                        return ;
+                    }
+
+                    //拼装地区
+                    address.area = address.province + ',' + address.city + ',' + address.district;
+
+                    // send属性 控制本地址是否是发货地址
+                    ShippingAddress.save({
+                        isSetTop: $scope.isSetTop,
+                        send: $scope.isSendType,
+                        isPersonal: !$scope.isSendType
+                    }, address, function () {
+                        toaster.pop('success', '成功 ', '保存收货地址成功');
+                        $scope.loadAddresses();
+                    }, function (res) {
+                        toaster.pop('error', '保存收货地址失败 ', res.data);
+                    });
+                };
+
                 $scope.modifyAddress = function (address) {
                     $modal.open({
                         templateUrl : $rootScope.rootPath + '/static/view/common/modal/edit_address_modal.html',
@@ -365,41 +334,5 @@ define(['app/app'], function (app) {
                         $modalInstance.dismiss();
                     };
                 }]);
-                //修改密码:
-                $scope.updatePassword = function(){
-                    AuthenticationService.redirectPassword()
-                };
-                //修改邮箱或设置邮箱;
-                $scope.updateUserEmail = function () {
-                    AuthenticationService.redirectEmail()
-                };
-                //修改电话号码;
-                $scope.updateUserTel = function () {
-                    AuthenticationService.redirectPhone()
-                };
-
-
-                //修改密保问题;
-                $scope.updateUserQuestion = function () {
-                    AuthenticationService.redirectSecQuestion()
-                };
-
-                $scope.updateUserPay = function () {
-                    var modalInstance = $modal.open({
-                        animation: true,
-                        templateUrl: $rootScope.rootPath
-                        + '/static/view/vendor/modal/updateUserPay.html',
-                        controller: 'UserPayCtrl',
-                        resolve: {
-                            user: function () {
-                                return angular.copy($rootScope.userInfo);
-                            }
-                        }
-                    });
-
-                    modalInstance.result.then(function () {
-                    }, function () {
-                    });
-                };
             }]);
 });

+ 431 - 0
src/main/webapp/resources/js/sso/controllers/ssoInvoiceCtrl.js

@@ -0,0 +1,431 @@
+/**
+ * Created by yujia on 2017/3/17.
+ *
+ */
+define(['app/app'], function(app) {
+  'use strict';
+  app.register.controller('ssoInvoiceCtrl', ['$scope', '$rootScope', 'toaster', '$modal', '$q', 'Bill', '$upload', '$http', '$location', '$stateParams', '$state', function($scope, $rootScope, toaster, $modal, $q, Bill, $upload, $http, $location, $stateParams, $state) {
+    $rootScope.active = 'sso_invoice';
+    $scope.tab = 'buyer_invoice';
+    document.title = '开票信息-优软商城';
+    $scope.invoiceType = 1205;
+    $scope.isSpecial = true; //专票,等于true为不存在
+    $scope.isNormal = true; //普票,等于true为不存在
+    $scope.InitComing = true
+    // 获取发票信息方法	1205为增值税专用发票	1206为增值税普通发票	1207为不开发票
+    var getInvoiceInfo = function() {
+      Bill.getListPersonal(null, function(data) {
+        $scope.invoices = data;
+        if (data.length === 0 && $scope.InitComing) {
+          $scope.InitComing = false
+          $scope.addBill()
+        } else {
+          angular.forEach($scope.invoices, function (item) {
+            if (item.kind == '1205') {
+              $scope.isSpecial = false;
+            } else if (item.kind == '1206') {
+              $scope.isNormal = false;
+            }
+          })
+        }
+      }, function(response) {
+        toaster.pop('error', '获取发票信息失败 ' + response.data);
+      });
+    };
+    getInvoiceInfo();
+    // $scope.bill = {};
+    // 获取省市区地理信息
+    var getGeoInfo = function () {
+      $http.get('static/js/prod/data/city.json').success(function(data) {
+        $scope.division = data;
+        if($scope.bill.area){
+          $scope.bill.address = {};
+          //拼装下拉选择框
+          var arr = $scope.bill.area.split(',');
+          $scope.bill.address.province = arr[0];
+          $scope.bill.address.city = arr[1];
+          $scope.bill.address.district = arr[2];
+        }
+      }).error(function(e) {
+        toaster.pop('error', '系统错误 ' + '加载城市信息失败, 请重新加载界面!');
+      });
+    };
+    getGeoInfo();
+
+    $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];
+      }
+      $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 + '失败 ' + data);
+      });
+    }
+
+    $scope.isDoUpload = false;
+    //上传发票许可证
+    $scope.onUploadPermission = function () {
+      $scope.isDoUpload = true;
+      // console.log($scope.bill.billInfo);
+      if ($scope.bill.billInfo[0].size < 3*1024*1024) {
+        $scope.bill.attachUrl = $scope.bill.billInfo[0].name;
+      } else {
+        $scope.bill.attachUrl = '';
+      }
+    }
+
+    //判断中文字符串的长度
+    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.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.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 () {
+      var len = getRealStringLen($scope.bill.name);
+      if (len > 20) {
+        $scope.validForm.validBillName = false;
+      } else {
+        $scope.validForm.validBillName = true;
+      }
+    }
+
+    //开户银行Check
+    $scope.checkBankName = function () {
+      var len = getRealStringLen($scope.bill.bankName);
+      if (len > 60) {
+        $scope.validForm.validBankName = false;
+      } else {
+        $scope.validForm.validBankName = true;
+      }
+    }
+
+    //详细地址Check
+    $scope.checkDetailAddress = function () {
+      var len = getRealStringLen($scope.bill.detailAddress);
+      if (len > 60) {
+        $scope.validForm.validDetailAddress = false;
+      } else {
+        $scope.validForm.validDetailAddress = true;
+      }
+    }
+
+    //单位地址check
+    $scope.checkCompanyAddress = function () {
+      var len = getRealStringLen($scope.bill.companyAddress);
+      if (len > 100) {
+        $scope.validForm.validCompanyAddress = false;
+      } else {
+        $scope.validForm.validCompanyAddress = true;
+      }
+    }
+
+    //设置新增栏目切换发票类型
+    $scope.billType = 1206
+    //设置发票类型
+    $scope.setType = function() {
+      angular.forEach($scope.invoices, function (item) {
+        if(item.kind == '1205'){
+          $scope.isSpecial = false;
+        } else if (item.kind == '1206') {
+          $scope.isNormal = false;
+        }
+      })
+      if (!$scope.isNormal) {
+        $scope.billType = 1205
+      }
+      if (!$scope.isSpecial) {
+        $scope.billType = 1206
+      }
+    };
+    //设置修改区域显示标志
+    $scope.changeBillStatusFlag = false;
+    $scope.showDeleteBox = false
+    $scope.setChangeBillStatusFlag = function (flag) {
+      $scope.changeBillStatusFlag = flag;
+      if (!flag) {
+        $scope.bill = {};
+      }
+    }
+    $scope.exitEdit = function () {
+      $scope.changeBillStatusFlag = false;
+      $scope.isAdd = false;
+      $scope.bill = {};
+      // $state.reload();
+    }
+    $scope.addBill = function () {
+      $scope.setType();
+      $scope.bill = {};
+      $scope.changeBillStatusFlag = true;
+      $scope.isAdd = true;
+    }
+    $scope.setBillType = function (type) {
+      $scope.bill = {};
+      $scope.initFormFlag();
+      $scope.billType = type;
+      this.form.$setPristine();
+      this.form.$setUntouched();
+    }
+    function _deepCopy(target) {
+      if (typeof target !== 'object') return
+      // 判断目标类型,来创建返回值
+      var newObj = target instanceof Array ? [] : {}
+      for (var item in target) {
+        // 只复制元素自身的属性,不复制原型链上的
+        if (target.hasOwnProperty(item)) {
+          newObj[item] = typeof target[item] === 'object' ? _deepCopy(target[item]) : target[item]
+        }
+      }
+      return newObj
+    }
+    //修改发票
+    $scope.modifyInvoice = function (invoice) {
+      invoice = _deepCopy(invoice)
+      $scope.changeBillStatusFlag = true;
+      $scope.isAdd = false;
+      $scope.billType = invoice.kind
+      $scope.bill = invoice;
+      $scope.bill.is_agree = true;
+      $scope.bill.address = {};
+      var area = invoice.area.split(',');
+      angular.forEach(area, function (item, index) {
+        switch(index) {
+          case 0:
+            $scope.bill.address.province = item;
+            break;
+          case 1:
+            $scope.bill.address.city = item;
+            break;
+          case 2:
+            $scope.bill.address.district = item;
+            break;
+        }
+      });
+    };
+    //删除按钮点击
+    $scope.deleteInvoice = function (invoice) {
+      $scope.tempDeleteId = invoice.id //删除发票临时存放
+      $scope.setDeleteBox(true)
+    }
+    //设置提示框状态
+    $scope.setDeleteBox = function (flag) {
+      $scope.showDeleteBox = flag
+    }
+    //确定删除
+    $scope.doDeleteInvoice = function () {
+      Bill.deleteById({id: $scope.tempDeleteId}, null, function (data) {
+        toaster.pop('success', '删除发票成功')
+        $state.reload();
+      }, function (error) {
+        toaster.pop('error', error.data || '删除发票失败')
+      })
+    }
+  }]);
+
+  // 发票详情
+  app.register.controller('BillInfoCtrl', ['$scope', '$modalInstance', 'invoice', function($scope, $modalInstance, invoice) {
+    $scope.bill = invoice;
+    $scope.dismiss = function() {
+      $modalInstance.dismiss();
+    }
+  }]);
+
+  // 发票编辑模态框
+  // app.register.controller('BillInputCtrl', ['$scope', '$http', 'BaseService', 'Bill', 'toaster', '$stateParams', '$state', 'invoiceInfo', '$upload', '$modalInstance', '$q', function($scope, $http, BaseService, Bill, toaster, $stateParams, $state, invoiceInfo, $upload, $modalInstance, $q) {
+  //     //BaseService.scrollBackToTop();
+  //
+  //     $scope.bill = {};
+  //     $scope.bill.address = {};
+  //     $scope.bill.is_agree = true;
+  //     $scope.linkError = false;
+  //     $scope.addressError = false;
+  //     $scope.bill.kind = Number(invoiceInfo.split("-")[0]);
+  //     if(invoiceInfo.split("-").length == 2) {
+  //         $scope.invoiceId = Number(invoiceInfo.split("-")[1]);
+  //     }
+  //     $scope.setType = function() {
+  //         switch($scope.bill.kind) {
+  //             case 1206:
+  //                 $scope.isNormal = true;
+  //                 $scope.isSpecial = false; break;
+  //             case 1205:
+  //                 $scope.isNormal = false;
+  //                 $scope.isSpecial = true; break;
+  //             default:
+  //                 $scope.isNormal = true;
+  //                 $scope.isSpecial = true;
+  //         }
+  //     };
+  //
+  //     //设置发票类型
+  //     $scope.setType();
+  //
+  //     //获取发票信息
+  //     $scope.getData = function() {
+  //         if($scope.invoiceId) {
+  //             return Bill.getBillById({id: $scope.invoiceId}, function(data) {
+  //                 $scope.bill = data;
+  //                 $scope.bill.is_agree = true;
+  //                 $scope.setType();
+  //             }, function(response) {
+  //                 toaster.pop('error', '获取指定的发票信息失败');
+  //             });
+  //         }
+  //     };
+  //
+  //     $scope.linkmanLen = function() {
+  //         var size = $scope.bill.name.length;
+  //         // if (num == 1){
+  //         //     size = document.getElementById("mpbillname").value.length;
+  //         // }else if (num == 2){
+  //         //     size = document.getElementById("mzbillname").value.length;
+  //         // }
+  //         if (size > 10) {
+  //             $scope.linkError = true;
+  //             return;
+  //         }
+  //         $scope.linkError = false;
+  //     };
+  //
+  //     $scope.addressLen = function() {
+  //         var size = $scope.bill.detailAddress.length;
+  //         // if (num == 1){
+  //         //     size = document.getElementById("mpaddress").value.length;
+  //         // }else if (num == 2){
+  //         //     size = document.getElementById("mzaddress").value.length;
+  //         // }
+  //         if (size > 30) {
+  //             $scope.addressError = true;
+  //             return;
+  //         }
+  //         $scope.addressError = false;
+  //     };
+  //
+  //     //等到获取到发票信息,
+  //     $q.all([$scope.getData().$promise]).then(function () {
+  //         $http.get('static/js/prod/data/city.json').success(function(data) {
+  //             $scope.division = data;
+  //             if($scope.bill.area){
+  //                 $scope.bill.address = {};
+  //                 //拼装下拉选择框
+  //                 var arr = $scope.bill.area.split(',');
+  //                 $scope.bill.address.province = arr[0];
+  //                 $scope.bill.address.city = arr[1];
+  //                 $scope.bill.address.district = arr[2];
+  //             }
+  //         }).error(function(e) {
+  //             toaster.pop('error', '系统错误 ' + '加载城市信息失败');
+  //         });
+  //     }, function () {
+  //         //ERROR
+  //     });
+  //
+  //     //保存发票信息
+  //     $scope.saveBill = function() {
+  //         $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];
+  //         }
+  //         $upload.upload({
+  //             url: 'trade/bill/save',
+  //             file: file,
+  //             method: 'POST',
+  //             data: {
+  //                 bill: $scope.bill
+  //             }
+  //         }).success(function(data){
+  //             toaster.pop('success', '保存发票信息成功');
+  //             $modalInstance.close(data);
+  //         }).error(function(data){
+  //             toaster.pop('error', '保存发票信息失败');
+  //         });
+  //     };
+  //
+  //     //取消发票信息操作
+  //     $scope.exit = function() {
+  //         $modalInstance.dismiss();
+  //     }
+  //
+  // }]);
+});

+ 1 - 0
src/main/webapp/resources/js/sso/main.js

@@ -2,6 +2,7 @@ require.config({
 	baseUrl : 'static',
 	paths : {
 		'app' : 'js/sso',
+		'js': 'js',
 		'angular' : 'lib/angular/angular.min',
 		'angularAMD' : 'lib/angular/angularAMD',
 		'angular-toaster': 'lib/angular/angular-toaster.min',

+ 3 - 3
src/main/webapp/resources/js/usercenter/app.js

@@ -72,15 +72,15 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'commo
 			controller: 'NoInvoiceCtrl',
 			controllerUrl: 'app/controllers/forstore/buyer_no_invoice_ctrl'
 		})).state('buyer_invoice-record', angularAMD.route({
-			url: '/invoiceRecord',
+			url: '/invoiceRecord/:status',
 			title: '开票记录',
 			templateUrl: 'static/view/usercenter/forstore/buyer_invoice_record.html',
 			controller: 'buyerInvoiceRecordCtrl',
 			controllerUrl: 'app/controllers/forstore/buyer_invoice_record_ctrl'
 		})).state('pay_center', angularAMD.route({
-			url: '/payCenter',
+			url: '/payCenter?status',
 			templateUrl: 'static/view/usercenter/forstore/pay_center.html',
-			controller: 'payCenterCtrl',
+			controller: 'buyerPayCenterCtrl',
 			controllerUrl: 'app/controllers/forstore/pay_center_ctrl'
 		}))
 		/*	.state('my_seek_purchase', angularAMD.route({

+ 129 - 38
src/main/webapp/resources/js/usercenter/controllers/forstore/bom_detail_ctrl.js

@@ -6,9 +6,9 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
     'use strict';
     app.register.controller('bomDetailCtrl',
         ['$scope', '$rootScope', 'seekPurchase', 'toaster', 'BaseService',
-            'ngTableParams', 'Order', 'SessionService', '$filter', '$upload', '$stateParams', '$http',
+            'ngTableParams', 'Order', 'SessionService', '$filter', '$upload', '$stateParams', '$http','Authority',
             function ($scope, $rootScope, seekPurchase, toaster, BaseService,
-                      ngTableParams, Order, SessionService, $filter, $upload, $stateParams, $http) {
+                      ngTableParams, Order, SessionService, $filter, $upload, $stateParams, $http, Authority) {
                 $rootScope.active = 'seek_purchase';
                 document.title = '我的求购-优软商城';
                 $scope.isEditName = false;
@@ -286,53 +286,144 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
                 }
 
                 // 采纳报价
-                $scope.adopt = function () {
-                  if (!$scope.purchaseQuantity) {
-                    toaster.pop('error', "请输入正确的采购数量");
-                    return;
-                  }
-                  seekPurchase.updateSeekPurchaseStatus({
-                    spId: $scope.currentOffer.spId,
-                    ofId: $scope.currentOffer.id,
-                    purchaseQuantity: $scope.purchaseQuantity
-                  }, {}, function (data) {
-                    if (data.success) {
-                      $scope.currentOffer = null;
-                      $scope.seekPurchaseTableParams.reload();
-                      $scope.showUseFlag = false;
-                      toaster.pop('success', '采纳报价成功');
-                    } else {
-                      toaster.pop('error', data.message);
-                    }
-                  }, function (response) {
-                    toaster.pop('error', response.data);
+                $scope.adopt = function (of) {
+                  $http({
+                    headers:{
+                      'content-Type':'application/x-www-form-urlencoded'
+                    },
+                    method: 'POST',
+                    dataType: 'json',
+                    url: seekUrl + '/inquiry/buyer/adopt',
+                    params: {id: of.id, status: 1}
+                  }).success(function (data) {
+                    toaster.pop('success', '采纳报价成功');
+                    of.agreed = 1;
+                    // $scope.seekPurchaseTableParams.reload();
+                  }).error(function (response) {
+                    toaster.pop('error', response ? response.message : '该单据可能已被操作,请刷新后重试');
                   });
                 }
+                //  点击拒绝,选择理由
+                $scope.currentRefuseOffer = {};
+                $scope.showCurrentRefuseOffer = false;
+                $scope.setActiveRefuse = function (of) {
+                  $scope.currentRefuseOffer = of;
+                  $scope.setShowCurrentRefuseOffer(true);
+                }
+
+                $scope.setShowCurrentRefuseOffer = function (flag) {
+                  $scope.showCurrentRefuseOffer = flag;
+                }
+
+                $scope.choice = '采购需求变更';
 
+                // 选择理由
+                $scope.refuse = function (choice) {
+                  $http({
+                    headers:{
+                      'content-Type':'application/x-www-form-urlencoded'
+                    },
+                    method: 'POST',
+                    dataType: 'json',
+                    url: seekUrl + '/inquiry/buyer/refuse',
+                    params: {id:  $scope.currentRefuseOffer.id, status: 0, refusereason: choice}
+                  }).success(function (data) {
+                    toaster.pop('refuse', '已拒绝报价');
+                    $scope.setShowCurrentRefuseOffer(false);
+                    $scope.currentRefuseOffer.agreed = 0;
+                    $scope.currentRefuseOffer.refusereason =  choice
+                    // $scope.seekPurchaseTableParams.reload();
+                  }).error(function (response) {
+                    toaster.pop('error', response ? response.message : '该单据可能已被操作,请刷新后重试');
+                  });
+                }
                 $scope.offerCount = 0;
                 $scope.goodsCount = 0;
+                $scope.replaceOfferCount = 0;
                 $scope.currentSeek = {};
-                $scope.setSeekStatus = function (seek, status) {
-                  $scope.offerCount = seek.offerAmount || 0;
-                  $scope.goodsCount = seek.goodsAmount || 0;
+
+                // $scope.setSeekStatus = function (seek, status) {
+                //   $scope.offerCount = seek.offerAmount || 0;
+                //   $scope.goodsCount = seek.goodsAmount || 0;
+                //   $scope.currentSeek = seek;
+                //   // 查看报价
+                //   if (status == 2 && $scope.offerCount != 0) {
+                //     seekPurchase.getSeekPurchaseOfferPageInfo(
+                //         {count: 100, page: 1, spId: seek.spId},
+                //         function (data) {
+                //           $scope.offer = data.content;
+                //           clearSeekStatus();
+                //           seek.$status = status;
+                //         });
+                //   } else if (status == 1 && $scope.goodsCount != 0) {// 查看现货
+                //     seekPurchase.getMallGoodsList({spId: seek.spId},
+                //         function (data) {
+                //           $scope.goods = data;
+                //           clearSeekStatus();
+                //           initFragments();
+                //           seek.$status = status;
+                //         });
+                //   } else if (status == 0) { // 收起
+                //     seek.$status = status;
+                //   }
+                //   $scope.selectAmount = 0;
+                //   $scope.selectPrice = 0;
+                // }
+                $scope.setSeekStatus = function (seek, status, isDisabled) {
+                  if (isDisabled) {
+                    seek.$status = status;
+                    return;
+                  }
+                  if (seek.id != $scope.currentSeek.id) {
+                    $scope.isInit = true;
+                    $scope.goodsCount = 0;
+                    $scope.offerCount = 0;
+                    $scope.replaceOfferCount = 0;
+                  }
+
+                  // $scope.offerCount = seek.offerAmount;
                   $scope.currentSeek = seek;
+                  if (!seek.$status || seek.$status != 1) {
+                    seekPurchase.getMallGoodsList({code:seek.cmpCode, brand: seek.inbrand}, function (data) {
+                      $scope.goods = data;
+                      $scope.goodsCount = data.length;
+                    });
+                  }
                   // 查看报价
-                  if (status == 2 && $scope.offerCount != 0) {
-                    seekPurchase.getSeekPurchaseOfferPageInfo(
-                        {count: 100, page: 1, spId: seek.spId},
-                        function (data) {
-                          $scope.offer = data.content;
+                  if ((!seek.$status || seek.$status < 2) || (status == 2 && $scope.offerCount != 0) || (status == 3 && $scope.replaceOfferCount != 0)) {
+                    Authority.getAuthority({resUrl: '/authInquiry/inquiry/getQuotations'}, function (data) {
+                      if (data.status == 'fail') {
+                        toaster.pop('error', data.msg || '系统错误');
+                        return;
+                      } else {
+                        $http({
+                          method: 'GET',
+                          dataType: 'json',
+                          url: seekUrl + '/inquiry/buyer/quotation',
+                          params: {id:  seek.id}
+                        }).success(function (data) {
+                          $scope.offer = data.qutations;
                           clearSeekStatus();
-                          seek.$status = status;
+                          if (data.qutations && data.qutations.length && $scope.isInit) {
+                            for (var i = 0; i < data.qutations.length; i++) {
+                              if (data.qutations[i].isReplace == 1) {
+                                $scope.replaceOfferCount++;
+                              } else {
+                                $scope.offerCount++;
+                              }
+                            }
+                          }
+                          seek.$status = $scope.isInit ? $scope.offerCount == 0 ? 3 : 2 : status;
+                          $scope.isInit = false;
+                        }).error(function (response) {
+                          toaster.pop('error', response ? response.message : '该单据可能已被操作,请刷新后重试');
                         });
+                      }
+                    });
                   } else if (status == 1 && $scope.goodsCount != 0) {// 查看现货
-                    seekPurchase.getMallGoodsList({spId: seek.spId},
-                        function (data) {
-                          $scope.goods = data;
-                          clearSeekStatus();
-                          initFragments();
-                          seek.$status = status;
-                        });
+                    clearSeekStatus();
+                    initFragments();
+                    seek.$status = status;
                   } else if (status == 0) { // 收起
                     seek.$status = status;
                   }

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

@@ -5,7 +5,7 @@
 define(['app/app'], function(app) {
     'use strict';
     app.register.controller('invoiceCtrl', ['$scope', '$rootScope', 'toaster', '$modal', '$q', 'Bill', '$upload', '$http', '$location', '$stateParams', '$state', function($scope, $rootScope, toaster, $modal, $q, Bill, $upload, $http, $location, $stateParams, $state) {
-        $rootScope.active = 'buyer_invoice';
+        // $rootScope.active = 'buyer_invoice';
         $scope.tab = 'buyer_invoice';
         document.title = '开票信息-优软商城';
         $scope.invoiceType = 1205;

+ 10 - 3
src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_invoice_record_ctrl.js

@@ -1,11 +1,14 @@
 define([ 'app/app' ], function(app) {
     'use strict';
-    app.register.controller('buyerInvoiceRecordCtrl', ['$scope','$rootScope','$modal','BillSubmit','BaseService', 'toaster','ngTableParams','$filter', function ($scope, $rootScope, $modal, BillSubmit, BaseService, toaster, ngTableParams, $filter) {
-        $scope.tab = 'buyer_invoice-record';
+    app.register.controller('buyerInvoiceRecordCtrl', ['$scope','$rootScope','$modal','BillSubmit','BaseService', 'toaster','ngTableParams','$filter', '$stateParams', function ($scope, $rootScope, $modal, BillSubmit, BaseService, toaster, ngTableParams, $filter, $stateParams) {
+        $scope.tab = $stateParams.status === '101' ? 'buyer_invoice' : 'buyer_invoice-record';
         // 开票申请
+       $rootScope.active = 'buyer_invoice';
         $scope.keyword = '';
         $scope.invoiceType = '';
         document.title = '开票记录-优软商城';
+        console.log($stateParams.status)
+        $scope.status = $stateParams.status
         var initDataRule = function () {
             $scope.param = {
                 page: 1,
@@ -15,7 +18,7 @@ define([ 'app/app' ], function(app) {
                 },
                 keyword: '',
                 invoiceType: '',
-                status: '',
+                status: $stateParams.status,
                 role: 'BUYER'
             };
         };
@@ -55,6 +58,10 @@ define([ 'app/app' ], function(app) {
                         params.total(page.totalElements);
                         $defer.resolve(page.content);
                         //划分数据
+                        for (var i = 0; i < page.content.length; i++) {
+                          page.content[i].billInfo = angular.fromJson(page.content[i].billInfo);
+                          page.content[i].orderids = page.content[i].orderids.split(',')
+                        }
                         $scope.billData = page.content;
                     }, function (response) {
                         toaster.pop('error', '获取开票记录失败 ', response.data);

+ 19 - 4
src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_no_invoice_ctrl.js

@@ -1,7 +1,8 @@
 define([ 'app/app' ], function(app) {
     'use strict';
-    app.register.controller('NoInvoiceCtrl', ['$scope','$rootScope','$modal', 'Order', 'toaster','ngTableParams','BaseService','Bill','$filter', function ($scope, $rootScope, $modal, Order, toaster, ngTableParams, BaseService, Bill, $filter) {
+    app.register.controller('NoInvoiceCtrl', ['$scope','$rootScope','$modal', 'Order', 'toaster','ngTableParams','BaseService','Bill','$filter','$window', '$document', function ($scope, $rootScope, $modal, Order, toaster, ngTableParams, BaseService, Bill, $filter, $window, $document) {
         $scope.tab = 'buyer_no_invoice';
+      $rootScope.active = 'buyer_invoice';
         document.title = '未开票订单-优软商城';
         // 开票申请
         $scope.applyInvoice = function () {
@@ -49,7 +50,6 @@ define([ 'app/app' ], function(app) {
             $scope.keyword = '';
         }
         initDataRule();
-
         $scope.$$kdnData = {};
 
         var initTable = function () {
@@ -124,8 +124,23 @@ define([ 'app/app' ], function(app) {
             $scope.isAllCheck = temAllCheck;
         }
 
-        // 加密订单的ID过滤器
-        var enIdFilter = $filter('EncryptionFilter');
+      // 加密订单的ID过滤器
+      var enIdFilter = $filter('EncryptionFilter');
+      // 内层DIV的滚动加载
+      var window = angular.element($window);
+      var docu = angular.element($document);
+      if (docu.scrollTop() + window.height() > docu.height() - 330) {
+        angular.element('#applyBtn').slideUp(0)
+      }
+      window.on('scroll', function () {
+        var scrollTop = docu.scrollTop();
+        if (scrollTop + window.height() > docu.height() - 330) {
+          angular.element('#applyBtn').slideUp(300)
+        }  else {
+          angular.element('#applyBtn').slideDown(300)
+        }
+      });
+
 
     }]);
     app.register.controller('NoInvoiceSubmitCtrl', ['$scope','$rootScope','$modal', 'Order', 'toaster', 'submitInvoice', '$modalInstance','invoiceData','BillSubmit','$state', function ($scope, $rootScope, $modal, Order, toaster, submitInvoice, $modalInstance, invoiceData, BillSubmit, $state) {

+ 285 - 237
src/main/webapp/resources/js/usercenter/controllers/forstore/pay_center_ctrl.js

@@ -3,8 +3,8 @@
  */
 define(['app/app'], function(app) {
 	'use strict';
-	app.register.controller('payCenterCtrl', ['$scope', '$rootScope', 'ngTableParams', 'BaseService', 'bankInfoService', '$filter', 'SessionService', '$modal', 'toaster', 'OrderSimpleInfo', 'Loading', 'Authority', function($scope, $rootScope, ngTableParams, BaseService, bankInfoService, $filter, SessionService, $modal, toaster, OrderSimpleInfo, Loading, Authority) {
-		$rootScope.active = 'pay_center';
+	app.register.controller('buyerPayCenterCtrl', ['$scope', '$rootScope', 'ngTableParams', 'BaseService', 'bankInfoService', '$filter', 'SessionService', '$modal', 'toaster', 'OrderSimpleInfo', 'Loading', 'Authority', '$stateParams', function($scope, $rootScope, ngTableParams, BaseService, bankInfoService, $filter, SessionService, $modal, toaster, OrderSimpleInfo, Loading, Authority, $stateParams) {
+		$rootScope.active = 'buyer_pay_center';
 
 		document.title = '支付中心-优软商城';
 		var hideBankFilter = $filter("hideBankFilter");
@@ -14,6 +14,11 @@ define(['app/app'], function(app) {
 
 		$scope.status = hiStatus == null ? 'pay-history' : hiStatus;
 
+		// pay-info
+		if ($stateParams.status) {
+			$scope.status = $stateParams.status;
+		}
+
 		//切换银行账户信息,历史记录的状态
 		$scope.toggleStatus = function(status) {
 			if($scope.status != status) {
@@ -42,6 +47,12 @@ define(['app/app'], function(app) {
 
 		$scope.paytype = 'ALL';
 
+		// 交易方式
+		$scope.remitteeType = 'ALL';
+
+		// 时间域选择
+		$scope.dateArea = 'ALL';
+
 		/**
 		 * 使用ngTable 获取支付记录信息
 		 */
@@ -61,9 +72,12 @@ define(['app/app'], function(app) {
 				if ($scope.currency && $scope.currency != 'ALL'){
 					param.currencyName = $scope.currency;
 				}
-				if ($scope.paytype && $scope.paytype != 'ALL'){
-					param.method = $scope.paytype;
+				if ($scope.remitteeType && $scope.remitteeType !== 'ALL') {
+					param.remitteeType = $scope.remitteeType;
 				}
+				// if ($scope.paytype && $scope.paytype != 'ALL'){
+				// 	param.method = $scope.paytype;
+				// }
 				if ($scope.startDate){
 					param.fromDate = $scope.startDate.getTime();
 				}
@@ -197,6 +211,7 @@ define(['app/app'], function(app) {
 					}
 				}
 			}
+			loadPayHistory();
 		};
 
 		/**
@@ -239,6 +254,63 @@ define(['app/app'], function(app) {
 			$scope.endDate = null;
 		};
 
+		var _formatDate = function (date, fmt) {
+			if (!date) {
+				return null;
+			}
+			if (typeof date === 'string') {
+				date = new Date(Date.parse(date.replace(/-/g, '/')));
+			}
+			var o = {
+				'M+': date.getMonth() + 1, // 月份
+				'd+': date.getDate(), // 日
+				'h+': date.getHours(), // 小时
+				'm+': date.getMinutes(), // 分
+				's+': date.getSeconds(), // 秒
+				'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
+				'S': date.getMilliseconds() // 毫秒
+			}
+			if (/(y+)/.test(fmt)) {
+				fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
+			}
+			for (var k in o) {
+				if (new RegExp('(' + k + ')').test(fmt)) {
+					fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));
+				}
+			}
+			return fmt;
+		}
+
+		var _getClearDay = function (date) {
+			return new Date(_formatDate(date, 'yyyy-MM-dd')).getTime() - 8 * 60 * 60 * 1000
+		}
+
+		$scope.setFilters = function (type, val) {
+			$scope[type] = val;
+			if (type == 'dateArea') {
+				// 时间筛选
+				var currentTime = _getClearDay(new Date());
+				var endDate = new Date(currentTime + 23 * 60 * 60 * 1000 + 59 * 60 * 1000 + 59 * 1000);
+				if (val == 'ALL' || val == 'autoMonth') {
+					$scope.startDate = null;
+					$scope.endDate = null;
+				} else if (val == 'oneMonth') {
+					$scope.startDate = new Date(currentTime - 30 * 24 * 60 * 60 * 1000);
+					$scope.endDate = endDate;
+				} else if (val == 'threeMonth') {
+					$scope.startDate = new Date(currentTime - 3 * 30 * 24 * 60 * 60 * 1000);
+					$scope.endDate = endDate;
+				} else if (val == 'sixMonth') {
+					$scope.startDate = new Date(currentTime - 6 * 30 * 24 * 60 * 60 * 1000);
+					$scope.endDate = endDate;
+				} else {
+					$scope.startDate = null;
+					$scope.endDate = null;
+				}
+			}
+			loadPayHistory();
+		}
+
 		$scope.filterLoad = function () {
 			loadPayHistory();
 		};
@@ -284,27 +356,7 @@ define(['app/app'], function(app) {
 
 		//编辑账户
 		$scope.editAccount = function(data) {
-			var modalInstance = $modal.open({
-				templateUrl : 'static/view/common/bankInfoModal.html',
-				controller : 'BankInfoCtrl',
-				resolve : {
-					account : function() {
-						//深拷贝一份
-						return angular.copy(data);
-					}
-				}
-			});
-
-			modalInstance.result.then(function(account) {
-				if(data) {
-					$scope.accounts.splice(data.num - 1, 1, account);
-				}else {//如果是新增。
-					loadAccountData();
-				}
-
-			}, function() {
-
-			});
+            $scope.showAddFrame = true;
 		};
 
 		//获取数据的方法。
@@ -601,219 +653,215 @@ define(['app/app'], function(app) {
 				SessionService.unset("buyCenter");
 			}
 		});
-	}]);
-
-
-
-	app.register.controller('BankInfoCtrl', ['$scope', '$modalInstance', 'account', 'bankInfoService', 'toaster', function($scope, $modalInstance, account, bankInfoService, toaster){
-
-		/**
-		 * 目前只支持的银行
-		 * @type {string[]}
-		 */
-		$scope.bankList = [
-			'中国银行','中国建设银行','中国工商银行','中国农业银行','交通银行','招商银行','中国民生银行',
-			'兴业银行','中信银行','中国光大银行','广发银行','平安银行','中国邮政储蓄银行','华夏银行','浦发银行'
-		];
-
-		var initIndex = function () {
-			$scope.selectIndex = -1;
-			$scope.downIndex = 0;
-		};
-
-		$scope.getItemFocus = function() {
-			$scope.showBankFrame = true;
-			$scope.matchData = true;
-			$scope.resultList = $scope.bankList;
-			initIndex();
-		};
 
-		$scope.onItemBlur = function () {
-			if ($scope.time){
-				clearTimeout($scope.time);
-			}
-			$scope.time = setTimeout(function () {
-				$scope.$apply(function () {
-					$scope.showBankFrame = false;
-				});
-			}, 200);
-		};
-		$scope.onKeyUp = function () {
-			var dom = document.getElementById("ulContent");
-			console.log(event);
-			if ($scope.showBankFrame){
-				if(event.keyCode == 40) { //监听到按下键
-					$scope.selectIndex ++;
-					if ($scope.downIndex == 5){
-						dom.scrollTop += 44;
-					}
-					if ($scope.downIndex <= 4){
-						$scope.downIndex++;
-					}
-					if($scope.selectIndex >= $scope.resultList.length){
-						$scope.selectIndex = 0;
-						dom.scrollTop = 0;
-						$scope.downIndex = 1;
-					}
-					$scope.account.bankname = $scope.resultList[$scope.selectIndex];
-					// $scope.containsAttr($scope.logistics.companyName);
-				} else if(event.keyCode == 38) { //监听到按上键
-					$scope.selectIndex --;
-					if ($scope.downIndex == 1){
-						dom.scrollTop -= 44;
-					}
-					if ($scope.downIndex >= 2){
-						$scope.downIndex--;
-					}
-					if($scope.selectIndex < 0){
-						$scope.selectIndex = $scope.resultList.length - 1;
-						dom.scrollTop = 2400;
-						$scope.downIndex = 5;
-					}
-					$scope.account.bankname = $scope.resultList[$scope.selectIndex];
-					// $scope.containsAttr($scope.logistics.companyName);
-				} else if(event.keyCode == 13) { //确定键
-					$scope.showBankFrame = false;
+		// 复制新增加部分
+        /**
+         * 目前只支持的银行
+         * @type {string[]}
+         */
+        $scope.bankList = [
+            '中国银行','中国建设银行','中国工商银行','中国农业银行','交通银行','招商银行','中国民生银行',
+            '兴业银行','中信银行','中国光大银行','广发银行','平安银行','中国邮政储蓄银行','华夏银行','浦发银行'
+        ];
+
+        var initIndex = function () {
+            $scope.selectIndex = -1;
+            $scope.downIndex = 0;
+        };
+
+        $scope.getItemFocus = function() {
+            $scope.showBankFrame = true;
+            $scope.matchData = true;
+            $scope.resultList = $scope.bankList;
+            initIndex();
+        };
+
+        $scope.onItemBlur = function () {
+            if ($scope.time){
+                clearTimeout($scope.time);
+            }
+            $scope.time = setTimeout(function () {
+                $scope.$apply(function () {
+                    $scope.showBankFrame = false;
+                });
+            }, 200);
+        };
+        $scope.onKeyUp = function () {
+            var dom = document.getElementById("ulContent");
+            if ($scope.showBankFrame){
+                if(event.keyCode == 40) { //监听到按下键
+                    $scope.selectIndex ++;
+                    if ($scope.downIndex == 5){
+                        dom.scrollTop += 44;
+                    }
+                    if ($scope.downIndex <= 4){
+                        $scope.downIndex++;
+                    }
+                    if($scope.selectIndex >= $scope.resultList.length){
+                        $scope.selectIndex = 0;
+                        dom.scrollTop = 0;
+                        $scope.downIndex = 1;
+                    }
+                    $scope.account.bankname = $scope.resultList[$scope.selectIndex];
+                    // $scope.containsAttr($scope.logistics.companyName);
+                } else if(event.keyCode == 38) { //监听到按上键
+                    $scope.selectIndex --;
+                    if ($scope.downIndex == 1){
+                        dom.scrollTop -= 44;
+                    }
+                    if ($scope.downIndex >= 2){
+                        $scope.downIndex--;
+                    }
+                    if($scope.selectIndex < 0){
+                        $scope.selectIndex = $scope.resultList.length - 1;
+                        dom.scrollTop = 2400;
+                        $scope.downIndex = 5;
+                    }
+                    $scope.account.bankname = $scope.resultList[$scope.selectIndex];
+                    // $scope.containsAttr($scope.logistics.companyName);
+                } else if(event.keyCode == 13) { //确定键
+                    $scope.showBankFrame = false;
+                }
+            }
+        };
+
+        $scope.showList = function () {
+            $scope.showBankFrame = !$scope.showBankFrame;
+            $scope.matchData = true;
+            $scope.resultList = $scope.bankList;
+        };
+
+        $scope.inputBankName = function () {
+            $scope.showBankFrame = true;
+        };
+
+        $scope.fitBankToAccount = function (item) {
+            $scope.account.bankname = item;
+            $scope.showBankFrame = false;
+        };
+
+        $scope.account = {};
+
+        var matchArray = function () {
+            $scope.account.bankname = $scope.account.bankname ? $scope.account.bankname : '';
+            $scope.resultList = $scope.bankList.filter(function (data) {
+                if (data.indexOf($scope.account.bankname) >= 0){
+                    return data;
+                }
+            });
+            if ($scope.resultList.length > 0){
+                $scope.matchData = true;
+            }else{
+                $scope.matchData = false;
+            }
+        };
+
+        /**
+         * 验证新增账户格式
+         * @param num
+         */
+        $scope.checkAccount = function (num) {
+            var size;
+            if (num == 1){
+                //验证开户银行名称
+                $scope.showBankFrame = true;
+                matchArray();
+            }else if(num == 2){
+                //验证开户支行名称
+                if($scope.account.branchname){
+                    size = $scope.account.branchname.replace(/[^\x00-\xff]/g,'**').length;
+                    if (size > 40){
+                        $scope.branchError = true;
+                    }else {
+                        $scope.branchError = false;
+                    }
+                    var telPatt = new RegExp("^[\u2E80-\u9FFF]+$");
+                    if (telPatt.test($scope.account.branchname)){
+                        $scope.branchPattError = false;
+                    }else {
+                        $scope.branchPattError = true;
+                    }
+                }
+            }else if(num == 3){
+                //验证银行账号
+                if ($scope.account.number){
+                    size = $scope.account.number.replace(/[^\x00-\xff]/g,'**').length;
+                    if (size > 30){
+                        $scope.numberError = true;
+                    }else {
+                        $scope.numberError = false;
+                    }
+                    var numPatt = new RegExp("^[0-9]+$");
+                    if (numPatt.test($scope.account.number)){
+                        $scope.numberPattError = false;
+                    }else {
+                        $scope.numberPattError = true;
+                    }
+                    validateRepeat($scope.account.number);
+                }
+            }else if(num == 4){
+                //验证开户名称
+                if ($scope.account.accountname){
+                    size = $scope.account.accountname.replace(/[^\x00-\xff]/g,'**').length;
+                    if (size > 100){
+                        $scope.nameError = true;
+                    }else {
+                        $scope.nameError = false;
+                    }
+                }
+            }
+        };
+
+        var validateRepeat = function (number) {
+            bankInfoService.getCountByNumber({type:1061, number:number}, {}, function (data) {
+                if (data.success){
+                    if (data.data != 0){
+                        $scope.repeatError = true;
+                    }else {
+                        $scope.repeatError = false;
+                    }
+                }else {
+                    toaster.pop("info", data.message);
+                }
+            });
+        };
+
+        $scope.confirm = function() {
+            var account = $scope.account;
+
+            if (!account){
+                toaster.pop('error', '请按要求填写正确的信息');
+                return ;
+            }
+            if (!account.bankname || !account.branchname || !account.number || !account.accountname){
+                toaster.pop('error', '请按要求填写正确的信息');
+                return ;
+            }
+            if (!$scope.matchData || $scope.branchError || $scope.branchPattError || $scope.numberError || $scope.numberPattError ||
+                $scope.nameError || $scope.repeatError){
+                toaster.pop('error', '请按要求填写正确的信息');
+                return ;
+            }
+
+            var method = 'saveBuyPersonalBank'; //不区分个人和企业账户
+            bankInfoService[method].call(null, null, $scope.account, function(data) {
+                if (data) {
+                    $scope.showAddFrame = false;
+                    $scope.account = {};
+                    $scope.account.files = null;
+                    toaster.pop('success', '保存成功');
+                    loadAccountData();
 				}
-			}
-		};
-
-		$scope.showList = function () {
-			$scope.showBankFrame = !$scope.showBankFrame;
-			$scope.matchData = true;
-			$scope.resultList = $scope.bankList;
-		};
-
-		$scope.inputBankName = function () {
-			$scope.showBankFrame = true;
-		};
-
-		$scope.fitBankToAccount = function (item) {
-			$scope.account.bankname = item;
-			$scope.showBankFrame = false;
-		};
-
-		$scope.account = account;
-		if($scope.account) {
-			$scope.title = "修改账户";
-		}else {
-			$scope.title = "新增账户";
-			$scope.account = {};
-		}
-
-		var matchArray = function () {
-			$scope.account.bankname = $scope.account.bankname ? $scope.account.bankname : '';
-			$scope.resultList = $scope.bankList.filter(function (data) {
-				if (data.indexOf($scope.account.bankname) >= 0){
-					return data;
-				}
-			});
-			if ($scope.resultList.length > 0){
-				$scope.matchData = true;
-			}else{
-				$scope.matchData = false;
-			}
-		};
-
-		/**
-		 * 验证新增账户格式
-		 * @param num
-		 */
-		$scope.checkAccount = function (num) {
-			var size;
-			if (num == 1){
-				//验证开户银行名称
-				$scope.showBankFrame = true;
-				matchArray();
-			}else if(num == 2){
-				//验证开户支行名称
-				if($scope.account.branchname){
-					size = $scope.account.branchname.replace(/[^\x00-\xff]/g,'**').length;
-					if (size > 40){
-						$scope.branchError = true;
-					}else {
-						$scope.branchError = false;
-					}
-					var telPatt = new RegExp("^[\u2E80-\u9FFF]+$");
-					if (telPatt.test($scope.account.branchname)){
-						$scope.branchPattError = false;
-					}else {
-						$scope.branchPattError = true;
-					}
-				}
-			}else if(num == 3){
-				//验证银行账号
-				if ($scope.account.number){
-					size = $scope.account.number.replace(/[^\x00-\xff]/g,'**').length;
-					if (size > 30){
-						$scope.numberError = true;
-					}else {
-						$scope.numberError = false;
-					}
-					var numPatt = new RegExp("^[0-9]+$");
-					if (numPatt.test($scope.account.number)){
-						$scope.numberPattError = false;
-					}else {
-						$scope.numberPattError = true;
-					}
-					validateRepeat($scope.account.number);
-				}
-			}else if(num == 4){
-				//验证开户名称
-				if ($scope.account.accountname){
-					size = $scope.account.accountname.replace(/[^\x00-\xff]/g,'**').length;
-					if (size > 100){
-						$scope.nameError = true;
-					}else {
-						$scope.nameError = false;
-					}
-				}
-			}
-		};
-
-		var validateRepeat = function (number) {
-			bankInfoService.getCountByNumber({type:1061, number:number}, {}, function (data) {
-				if (data.success){
-					if (data.data != 0){
-						$scope.repeatError = true;
-					}else {
-						$scope.repeatError = false;
-					}
-				}else {
-					toaster.pop("info", data.message);
-				}
-			});
-		};
-
-		$scope.confirm = function() {
-			var account = $scope.account;
-
-			if (!account){
-				toaster.pop('error', '请按要求填写正确的信息');
-				return ;
-			}
-			if (!account.bankname || !account.branchname || !account.number || !account.accountname){
-				toaster.pop('error', '请按要求填写正确的信息');
-				return ;
-			}
-			if (!$scope.matchData || $scope.branchError || $scope.branchPattError || $scope.numberError || $scope.numberPattError ||
-				$scope.nameError || $scope.repeatError){
-				toaster.pop('error', '请按要求填写正确的信息');
-				return ;
-			}
-
-			var method = 'saveBuyPersonalBank'; //不区分个人和企业账户
-			bankInfoService[method].call(null, null, $scope.account, function(data) {
-				toaster.pop('success', '保存成功');
-				$modalInstance.close(data)
-			},function (err) {
-				toaster.pop('error', err.data || '保存信息失败');
-			});
-		};
-
-		$scope.cancel = function() {
-			$modalInstance.dismiss();
-		}
-
+            },function (err) {
+                toaster.pop('error', err.data || '保存信息失败');
+            });
+        };
+
+        $scope.cancel = function() {
+            $scope.showAddFrame = false;
+            $scope.account = {};
+            $scope.account.files = null;
+            $scope.showBankFrame = false;
+        }
 	}]);
 });

+ 1 - 1
src/main/webapp/resources/js/vendor/app.js

@@ -574,7 +574,7 @@ define([ 'angularAMD', 'ngLocal', 'common/services', 'common/directives', 'commo
         })).state('pay_center', angularAMD.route({
 			url: '/payCenter?tab',
 			templateUrl: 'static/view/vendor/forstore/pay_center.html',
-			controller: 'payCenterCtrl',
+			controller: 'vendorPayCenterCtrl',
 			controllerUrl: 'app/controllers/forstore/pay_center_ctrl'
 		})).state('vendor_deliveryRule', angularAMD.route({
 			title : '配送规则',

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

@@ -3,8 +3,8 @@
  */
 define(['app/app'], function(app) {
     'use strict';
-    app.register.controller('payCenterCtrl', ['$scope', '$rootScope', 'bankInfoService', 'toaster', '$upload', 'bankTransferService', 'Purchase', '$filter', 'Loading', 'ngTableParams', 'BaseService', 'SessionService', '$stateParams', '$http', 'Authority', function($scope, $rootScope, bankInfoService, toaster, $upload, bankTransferService, Purchase, $filter, Loading, ngTableParams, BaseService, SessionService, $stateParams, $http, Authority) {
-        $rootScope.active = 'pay_center';
+    app.register.controller('vendorPayCenterCtrl', ['$scope', '$rootScope', 'bankInfoService', 'toaster', '$upload', 'bankTransferService', 'Purchase', '$filter', 'Loading', 'ngTableParams', 'BaseService', 'SessionService', '$stateParams', '$http', 'Authority', function($scope, $rootScope, bankInfoService, toaster, $upload, bankTransferService, Purchase, $filter, Loading, ngTableParams, BaseService, SessionService, $stateParams, $http, Authority) {
+        $rootScope.active = 'vendor_pay_center';
 
         document.title = '结算中心-优软商城';
         // 加密订单的ID过滤器
@@ -22,6 +22,12 @@ define(['app/app'], function(app) {
         $scope.paytype = 'ALL';
         $scope.$$transfer = {};
 
+        // 交易方式
+        $scope.remitteeType = 'ALL';
+
+        // 时间域选择
+        $scope.dateArea = 'ALL';
+
         var getTransferMoney = function () {
             bankTransferService.getTotalTransferMoney({}, function (data) {
                 if (data.code == 1) {
@@ -55,6 +61,9 @@ define(['app/app'], function(app) {
                     if ($scope.endDate){
                         param.toDate = $scope.endDate.getTime();
                     }
+                    if ($scope.remitteeType && $scope.remitteeType !== 'ALL') {
+                        param.remitteeType = $scope.remitteeType;
+                    }
                     bankTransferService.getVendorBankTransferByMall(param, function (page) {
                         if(page.code == 1) {
                             $scope.bankTransRecore = page.data.data.content;
@@ -144,6 +153,64 @@ define(['app/app'], function(app) {
             $scope.endDate = null;
         };
 
+
+        var _formatDate = function (date, fmt) {
+            if (!date) {
+                return null;
+            }
+            if (typeof date === 'string') {
+                date = new Date(Date.parse(date.replace(/-/g, '/')));
+            }
+            var o = {
+                'M+': date.getMonth() + 1, // 月份
+                'd+': date.getDate(), // 日
+                'h+': date.getHours(), // 小时
+                'm+': date.getMinutes(), // 分
+                's+': date.getSeconds(), // 秒
+                'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
+                'S': date.getMilliseconds() // 毫秒
+            }
+            if (/(y+)/.test(fmt)) {
+                fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
+            }
+            for (var k in o) {
+                if (new RegExp('(' + k + ')').test(fmt)) {
+                    fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));
+                }
+            }
+            return fmt;
+        }
+
+        var _getClearDay = function (date) {
+            return new Date(_formatDate(date, 'yyyy-MM-dd')).getTime() - 8 * 60 * 60 * 1000
+        }
+
+        $scope.setFilters = function (type, val) {
+            $scope[type] = val;
+            if (type == 'dateArea') {
+                // 时间筛选
+                var currentTime = _getClearDay(new Date());
+                var endDate = new Date(currentTime + 23 * 60 * 60 * 1000 + 59 * 60 * 1000 + 59 * 1000);
+                if (val == 'ALL' || val == 'autoMonth') {
+                    $scope.startDate = null;
+                    $scope.endDate = null;
+                } else if (val == 'oneMonth') {
+                    $scope.startDate = new Date(currentTime - 30 * 24 * 60 * 60 * 1000);
+                    $scope.endDate = endDate;
+                } else if (val == 'threeMonth') {
+                    $scope.startDate = new Date(currentTime - 3 * 30 * 24 * 60 * 60 * 1000);
+                    $scope.endDate = endDate;
+                } else if (val == 'sixMonth') {
+                    $scope.startDate = new Date(currentTime - 6 * 30 * 24 * 60 * 60 * 1000);
+                    $scope.endDate = endDate;
+                } else {
+                    $scope.startDate = null;
+                    $scope.endDate = null;
+                }
+            }
+            loadHistory();
+        }
+
         $scope.search = function () {
             if (!$scope.startDate && $scope.endDate){
                 toaster.pop("info", "请输入起始日期");
@@ -257,6 +324,7 @@ define(['app/app'], function(app) {
                     }
                 }
             }
+            loadHistory();
         };
 
         /**

+ 24 - 4
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_invoice_ctrl.js

@@ -1,6 +1,6 @@
 define([ 'app/app' ], function(app) {
     'use strict';
-    app.register.controller('vendorInvoiceCtrl', ['$scope','$rootScope','$modal','BillSubmit','BaseService', 'toaster','ngTableParams','$state','$filter', function ($scope, $rootScope, $modal, BillSubmit, BaseService, toaster, ngTableParams, $state, $filter) {
+    app.register.controller('vendorInvoiceCtrl', ['$scope','$rootScope','$modal','BillSubmit','BaseService', 'toaster','ngTableParams','$state','$filter','$window', '$document',  function ($scope, $rootScope, $modal, BillSubmit, BaseService, toaster, ngTableParams, $state, $filter, $window, $document) {
         $rootScope.active = 'vendor_invoice';
         // 切换tab
         document.title = '卖家发票管理-优软商城';
@@ -63,16 +63,19 @@ define([ 'app/app' ], function(app) {
                         $scope.$$kdnData.end = Number(page.size) * (Number(page.number) - 1) + Number(page.numberOfElements);
                         params.total(page.totalElements);
                         $defer.resolve(page.content);
-                        //划分数据
-                        $scope.billData = page.content;
+
                         //初始化选中状态和地址信息
                         $scope.isAllCheck = false;
-                        angular.forEach($scope.billData, function (item) {
+                        angular.forEach(page.content, function (item) {
                             var temAddr = item.invoiceAddress.split(',')
                             item.detailAddr = temAddr[3]
                             item.area = temAddr[0]+'  '+temAddr[1]+'  '+temAddr[2]
                             item.checked = false
+                            item.billInfo = angular.fromJson(item.billInfo);
+                            item.orderids = item.orderids.split(',')
                         })
+                        //划分数据
+                        $scope.billData = page.content;
                     }, function (response) {
                         toaster.pop('error', '获取开票记录失败 ', response.data);
                     });
@@ -195,5 +198,22 @@ define([ 'app/app' ], function(app) {
             }, function(){
             });
         }
+
+
+      // 内层DIV的滚动加载
+      var window = angular.element($window);
+      var docu = angular.element($document);
+      if (docu.scrollTop() + window.height() > docu.height() - 330) {
+        angular.element('#applyBtn').slideUp(0)
+      }
+      window.on('scroll', function () {
+        var scrollTop = docu.scrollTop();
+        if (scrollTop + window.height() > docu.height() - 330) {
+          angular.element('#applyBtn').slideUp(300)
+        }  else {
+          angular.element('#applyBtn').slideDown(300)
+        }
+      });
+
     }]);
 });

+ 97 - 0
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_logistics_ctrl.js

@@ -10,6 +10,10 @@ define(['app/app', 'calendar'], function (app) {
 		$rootScope.active = 'vendor_logistics';
 		$scope.tab = 'logistic';
 		$scope.canAddTotal = 20;
+        $scope.isSendType = true;
+        $scope.newAddr = {};
+        $scope.isSetTop = false;
+
         //是寄售店铺
 		if ($rootScope.store && (!$rootScope.store.status || $rootScope.store.status === 'OPENED')){
             $scope.isCONSIGNMENT = false;
@@ -125,6 +129,99 @@ define(['app/app', 'calendar'], function (app) {
 			});
 		};
 
+        $scope.checkAddrForm = function (num) {
+            var size;
+            if (num == 1) {
+                if ($scope.newAddr.name) {
+                    size = $scope.newAddr.name.replace(/[^\x00-\xff]/g,
+                        '**').length;
+                    if (size > 20) {
+                        console.log(size);
+                        $scope.userError = true;
+                        return;
+                    }
+                    $scope.userError = false;
+                }
+            } else if (num == 2) {
+                if ($scope.newAddr.tel) {
+                    size = $scope.newAddr.tel.replace(/[^\x00-\xff]/g,
+                        '**').length;
+                    if (size < 8 || size > 11) {
+                        $scope.telError = true;
+                        return;
+                    }
+                    $scope.telError = false;
+                    var telPatt = new RegExp("^[0-9]+$");
+                    if (telPatt.test($scope.newAddr.tel)) {
+                        $scope.telPatternError = false;
+                    } else {
+                        $scope.telPatternError = true;
+                    }
+                }
+            } else if (num == 3) {
+                if ($scope.newAddr.detailAddress) {
+                    size = $scope.newAddr.detailAddress.replace(
+                        /[^\x00-\xff]/g, '**').length;
+                    if (size > 60) {
+                        $scope.addrError = true;
+                        return;
+                    }
+                    $scope.addrError = false;
+                }
+            } else if (num == 4) {
+                var emailPatt = new RegExp(
+                    "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$");
+                if ($scope.newAddr.email.length > 0 && !emailPatt.test(
+                    $scope.newAddr.email)) {
+                    $scope.emailPatternError = true;
+                } else {
+                    $scope.emailPatternError = false;
+                }
+            }
+        };
+
+        $scope.reset = function(type) {
+            type.$setPristine();
+            type.$setUntouched();
+            angular.forEach($scope.newAddr, function(value, key) {
+                $scope.newAddr[key] = '';
+            })
+        };
+
+        $scope.save = function () {
+            var address = $scope.newAddr;
+
+            if (!address){
+                toaster.pop('error', '请补充未填写的信息');
+                return ;
+            }
+            if (!address.name || !address.province || !address.city || !address.district ||
+                !address.detailAddress || !address.tel){
+                toaster.pop('error', '请补充未填写的信息');
+                return ;
+            }
+            if ($scope.userError || $scope.telError || $scope.addrError || $scope.telPatternError ||
+                $scope.emailPatternError){
+                toaster.pop('error', '请修改红色框内的信息');
+                return ;
+            }
+
+            //拼装地区
+            address.area = address.province + ',' + address.city + ',' + address.district;
+
+            // send属性 控制本地址是否是发货地址
+            ShippingAddress.save({
+                isSetTop: $scope.isSetTop,
+                send: $scope.isSendType,
+                isPersonal: !$scope.isSendType
+            }, address, function () {
+                toaster.pop('success', '成功 ', '保存收货地址成功');
+                $scope.loadAddresses();
+            }, function (res) {
+                toaster.pop('error', '保存收货地址失败 ', res.data);
+            });
+        };
+
 
 		/**********************************************************************
 		 * 地址相关操作

+ 0 - 132
src/main/webapp/resources/view/common/bankInfoModal.html

@@ -1,132 +0,0 @@
-<style>
-	.margin15 {
-		margin: 0 7px 0 0;
-		font-size: 14px;
-		font-weight: normal;
-		width: 67px;
-	}
-
-	.divinline {
-		display: inline-block;
-	}
-	.modal-header {
-		padding: 15px 18px;
-		border-bottom: 1px solid #ddd;
-	}
-	.divinline .form-control {
-		opacity: 1;
-		width: 241px;
-		border-radius: 0;
-		position:relative;
-	}
-	.divinline .select-down{
-		float:left;
-		width: 241px;
-		max-height:230px;
-		overflow-y: scroll;
-		border-radius: 3px;
-		border:1px solid #5078cb;
-		position:absolute;
-		background: #fff;
-		top:34px;
-		z-index:1000;
-	}
-	.divinline .select-down li{
-		line-height: 32px;
-		padding:6px;
-		padding-left:12px;
-	}
-	.divinline .select-down li:hover{
-		background: #5078cb;
-		color:#fff;
-		cursor:pointer;
-	}
-	.divinline .select-down li.active{
-		background: #5078cb;
-		color:#fff;
-		cursor:pointer;
-	}
-	.modal-content {
-		width: 482px;
-	}
-	.modal-body .form-group .warn-message {
-		color: #f41b1b;
-		font-size: 12px;
-		margin-left: 10px;
-	}
-	.modal-body .remind-message {
-		width: auto;
-		font-size: 12px;
-		position: relative;
-		left: -15px;
-		bottom: 3px;
-	}
-	.modal-footer {
-		text-align: center;
-		border: none;
-		padding-top: 0;
-	}
-	.modal-footer button {
-		margin-right: 10px;
-	}
-</style>
-<div class="modal-header" style="position:relative">
-	<h3 class="modal-title" style="font-weight: 700">{{title}}</h3>
-	<span style="color:#cbcaca;width:10px;height:10px;position:absolute;top:15px;right:15px;"><i class="fa fa-close" style="font-size: 14px;" ng-click="cancel()"></i></span>
-</div>
-<form class="form-horizontal add-bank-account" style="margin-left: 17px;" name="myForm" novalidate>
-	<div class="modal-body">
-			<div class="form-group">
-		    	<label class="margin15"><b class="text-inverse">*&nbsp;</b>开户银行</label>
-		    	<div class="divinline" style="position:relative;margin-right:25px;">
-					<!--<select class="form-control select-adder">-->
-						<!--<option>请选择开户银行</option>-->
-						<!--<option value="1">1</option>-->
-						<!--<option value="2">2</option>-->
-					<!--</select>-->
-		    		<input name="bankname" ng-model="account.bankname" ng-change="checkAccount(1)" autocomplete="off" type="text" class="form-control" placeholder="请选择开户银行" required style="width:216px;border-right:transparent;border-radius:3px 0 0 3px;" ng-keydown="onKeyUp()" ng-focus="getItemFocus()" ng-blur="onItemBlur()">
-					<i class="select-adder" style="display:inline-block;width:25px;height:34px;border:1px solid #ddd;position:absolute;right:-25px;top:0;border-radius:0 3px 3px 0;border-left:transparent" ng-click="showList()"></i>
-					<ul class="select-down" ng-if="showBankFrame && matchData" id="ulContent">
-						<li ng-click="fitBankToAccount(bank)" ng-repeat="bank in resultList" ng-class="{'active': $index==selectIndex}">{{bank}}</li>
-					</ul>
-		  		</div>
-				<span class="warn-message" ng-if="account.bankname && !matchData">请填写正确的开户银行</span>
-				<span class="warn-message" ng-if="myForm.bankname.$touched && myForm.bankname.$invalid">开户银行不能为空</span>
-		  	</div>
-			<div class="form-group">
-				<label class="margin15"><b class="text-inverse">*&nbsp;</b>开户支行</label>
-				<div class="divinline">
-					<input name="branchname" type="text" class="form-control" ng-model="account.branchname" ng-change="checkAccount(2)" autocomplete="off"
-						   placeholder="例如:侨香支行" ng-required="true">
-				</div>
-				<span class="warn-message" ng-if="account.branchname && branchPattError">请填写正确的开户支行</span>
-				<span class="warn-message" ng-if="account.branchname && !branchPattError && branchError">请勿超过20个字</span>
-				<span class="warn-message" ng-if="myForm.branchname.$touched && myForm.branchname.$invalid">开户支行不能为空</span>
-			</div>
-		  	<div class="form-group">
-		  		<label class="margin15"><b class="text-inverse">*&nbsp;</b>银行账号</label>
-		  		<div class="divinline">
-		  			<input name="number" ng-model="account.number" type="text" class="form-control" 
-		  			placeholder="请填写银行账号" ng-required="true" ng-change="checkAccount(3)" autocomplete="off">
-		  		</div>
-				<span class="warn-message" ng-if="account.number && numberPattError">请填写正确的银行账号</span>
-				<span class="warn-message" ng-if="account.number && !numberPattError && numberError">请勿超过30个字符</span>
-				<span class="warn-message" ng-if="account.number && !numberPattError && !numberError && repeatError">该银行账号已存在</span>
-				<span class="warn-message" ng-if="myForm.number.$touched && myForm.number.$invalid">银行账号不能为空</span>
-		  	</div>
-			<div class="form-group">
-				<label class="margin15"><b class="text-inverse">*&nbsp;</b>开户名称</label>
-				<div class="divinline">
-					<input name="accountname" type="text" class="form-control" ng-model="account.accountname"
-						   placeholder="请填写开户人姓名或企业名称" ng-required="true" ng-change="checkAccount(4)" autocomplete="off">
-				</div>
-				<span class="warn-message" ng-if="account.accountname && nameError">请勿超过50个字</span>
-				<span class="warn-message" ng-if="myForm.accountname.$touched && myForm.accountname.$invalid">开户名称不能为空</span>
-			</div>
-		<label class="remind-message"><b class="text-inverse">*&nbsp;</b>为保障您的资金安全,账户信息加密显示且不可修改,只能删除后重新提交。</label>
-	</div>
-</form>
-<div class="modal-footer">
-	<button class="com-btn-level1 com-btn-cancel" ng-click="cancel()">取消</button>
-	<input type="submit" class="com-btn-submit com-btn-level1" ng-click="confirm()" value="确定" />
-</div>

+ 4 - 4
src/main/webapp/resources/view/common/modal/edit_address_modal.html

@@ -47,7 +47,7 @@
 		border: none !important;
 	}
 	.form-horizontal .control-label{
-		width: 105px;
+		width: 120px;
 		padding-right: 5px;
 	}
 	.checkbox .col-md-3{
@@ -79,8 +79,8 @@
 			<form name="myForm" class="form-horizontal" role="form" ng-submit="save(address)">
 				<div class="form-group">
 					<label for="userName" class="col-md-3 control-label"><strong class="text-inverse">* </strong>
-						<span ng-show="!isSendType">收货人姓名</span>
-						<span ng-show="isSendType">发货人姓名</span>
+						<span ng-show="!isSendType">收货人姓名</span>
+						<span ng-show="isSendType">发货人姓名: </span>
 					</label>
 					<div class="col-md-6 ">
 	 			      	<input required ng-model="address.name" type="text" class="form-control" id="userName" name="userName"
@@ -158,7 +158,7 @@
 						</div>
 				</div>
 				<div class="form-group" style="margin-bottom: 0;">
-					<div class="col-md-4" style="margin-left: 104px;">
+					<div class="col-md-4" style="margin-left: 120px;">
 						<div class="checkbox">
 							<label class="check-active">
 								<input ng-model="isSetTop" type="checkbox" id="check-act">

+ 3 - 0
src/main/webapp/resources/view/sso/left_nav.html

@@ -48,6 +48,9 @@
 		<li ng-if="personage" ng-class="{'active' : active == 'sso_management'}"><span ui-sref="ssoManagement">员工管理</span></li>
 		<li ng-if="personage" ng-class="{'active' : active == 'sso_permission'}"><span ui-sref="ssoPermission">角色权限</span></li>
 		<li ng-class="{'active' : active == 'sso_address'}"><span ui-sref="ssoAddress">收货地址</span></li>
+		<li ng-class="{'active' : active == 'sso_invoice'}"><span ui-sref="ssoInvoice">发票管理</span></li>
+		<li ng-class="{'active' : active == 'vendor_pay_center'}" ng-if="userInfo.enterprise.uu && userInfo.enterprise.isVendor == 313"><span ui-sref="gatheringAccount({'tab': 'accountTab'})">收款账户</span></li>
+		<li ng-class="{'active' : active == 'buyer_pay_center'}"><span ui-sref="payAccount({'status': 'pay-info'})">付款账户</span></li>
 		<!--<li ng-class="{'active' : active == 'vendor_logistics'}">-->
 			<!--<span  ui-sref="vendor_logistics" ng-hide="store && (!store.status || store.status === 'OPENED')">物流管理</span>-->
 			<!--<span  ui-sref="vendor_deliveryRule" ng-if="store && (!store.status || store.status === 'OPENED')">物流管理</span>-->

+ 160 - 8
src/main/webapp/resources/view/sso/ssoAddress.html

@@ -242,8 +242,8 @@
     <div class="rt_menu"><span>收货地址</span></div>
     <div class="logistic-content">
         <div class="menu-title row">现有收货地址<span>&nbsp;已保存<em>{{total}}</em>条,还能新增<em>{{canAddTotal-total}}</em>条地址</span></div>
-        <div class="add-log row" ng-if="total < canAddTotal"><button ng-click="modifyAddress()"><i class="fa fa-plus-square"></i>新增收货地址</button></div>
-        <div class="log-tab">
+        <div class="add-log row" ng-if="total < canAddTotal && addressList && addressList.length > 0"><button ng-click="modifyAddress()"><i class="fa fa-plus-square"></i>新增收货地址</button></div>
+        <div class="log-tab" ng-if="addressList && addressList.length > 0">
             <table class="table" style="table-layout: auto">
                 <thead>
                 <tr>
@@ -270,17 +270,169 @@
                 </tr>
                 </tbody>
             </table>
-            <div class="empty" ng-if="addressList.length <= 0 || !addressList">
-                <p class="empty-img">
-                    <img src="static/img/all/empty-cart.png">
-                </p>
-                <div class="empty-info">
-                    <p class="grey">暂无收货地址,赶快去新增吧</p>
+        </div>
+        <div class="new-address" ng-if="addressList.length <= 0 || !addressList">
+            <div class="edit-rec-addr">
+                <div class="row">
+                    <div class="col-sm-12">
+                        <form name="myForm" class="form-horizontal" role="form" ng-submit="save(newAddr)">
+                            <div class="form-group">
+                                <label for="userName" class="col-sm-3 control-label"><strong class="text-inverse">* </strong>
+                                    <span>收货人姓名:</span>
+                                </label>
+                                <div class="col-sm-5">
+                                    <input required ng-model="newAddr.name" type="text" class="form-control" id="userName" name="userName"
+                                           placeholder="请输入你的姓名" autocomplete="off" ng-change="checkForm(1)">
+                                </div>
+                                <div class="col-sm-4">
+                                    <span class="text-inverse error" ng-show="newAddr.name && userError">请勿超过10个字</span>
+                                    <span class="text-inverse heigth30" ng-show="myForm.userName.$touched && myForm.userName.$invalid">请输入收件人姓名</span>
+                                    <span ng-show="!myForm.userName.$invalid && !userError" class="text-success heigth30">填写正确</span>
+                                </div>
+                            </div>
+                            <div class="form-group">
+                                <label for="tel" class="col-sm-3 control-label"><strong class="text-inverse">* </strong>联系电话:</label>
+                                <div class="col-sm-5">
+                                    <input required ng-model="newAddr.tel" type="text" autocomplete="off" class="form-control" ng-change="checkForm(2)" id="tel" name="tel"
+                                           placeholder="请输入您的联系电话">
+                                </div>
+                                <div class="col-sm-4" >
+                                    <span class="text-inverse error" ng-show="newAddr.tel && (telError || telPatternError)">请输入正确的号码</span>
+                                    <span class="text-inverse heigth30" ng-show="myForm.tel.$touched && myForm.tel.$invalid">请输入联系电话</span>
+                                    <span ng-show="!myForm.tel.$invalid && !telError && !telPatternError" class="text-success heigth30">填写正确</span>
+                                </div>
+                            </div>
+                            <div class="form-group">
+                                <label for="email" class="col-sm-3 control-label">邮箱:</label>
+                                <div class="col-sm-5">
+                                    <input name="email" ng-model="newAddr.email" type="text" class="form-control" id="email"
+                                           placeholder="请填写正确的邮箱,可用于接收订单提醒" maxlength="50" ng-change="checkForm(4)">
+                                </div>
+                                <div class="col-sm-4">
+                                    <span ng-show="newAddr.email && emailPatternError" class="text-inverse heigth30">请输入正确的邮箱</span>
+                                </div>
+                            </div>
+                            <div class="form-group ">
+                                <label class="col-sm-3 control-label"><strong
+                                        class="text-inverse">* </strong>所在地区:</label>
+                                <div class="mar-rt0 row checkbox">
+                                    <div class="col-sm-3">
+                                        <select required="" class="select-adder form-control"
+                                                ng-model="newAddr.province"
+                                                ng-options="key as key for (key,value) in division"
+                                                ng-change="newAddr.city='';newAddr.district='';"
+                                                style="opacity: 1;">
+                                            <option value="">省级行政区</option>
+                                        </select>
+                                    </div>
+                                    <div class="col-sm-3 ">
+                                        <select class="select-adder form-control" ng-model="newAddr.city"
+                                                ng-options="key as key for (key,value) in division[newAddr.province]"
+                                                ng-change="newAddr.district='';"
+                                                style="opacity: 1;">
+                                            <option value="">市</option>
+                                        </select>
+                                    </div>
+                                    <div class="col-sm-3">
+                                        <select class="select-adder form-control" ng-model="newAddr.district" style="opacity: 1;"
+                                                ng-options="value as value for value in division[newAddr.province][newAddr.city]" required>
+                                            <option value="">区</option>
+                                        </select>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="form-group" style="margin-bottom: 0;">
+                                <label class="col-sm-3 control-label"><strong class="text-inverse">* </strong>详细地址:</label>
+                                <div class="col-sm-8" style="width: 530px; padding-right: 0;">
+                                    <input required ng-model="newAddr.detailAddress" type="text" class="form-control" name="addr" id="addr"
+                                           placeholder="建议你填写详细地址,例如街道名、门牌号,楼层和房间号等信息" autocomplete="off" ng-change="checkForm(3)">
+                                </div>
+                                <div class="col-sm-2" style="padding: 0; width: 100px; padding-left: 10px;line-height: 34px;">
+                                    <span class="text-inverse error" ng-show="newAddr.detailAddress && addrError">请勿超过30个字</span>
+                                    <span ng-show="!myForm.addr.$invalid && !addrError" class="text-success heigth30">填写正确</span>
+                                    <span class="text-inverse error" ng-show="myForm.addr.$touched && myForm.addr.$invalid">请输入详细地址</span>
+                                </div>
+                            </div>
+                            <div class="form-group" style="margin-bottom:20px;margin-top:10px;">
+                                <div class="col-sm-4" style="margin-left: 120px;">
+                                    <div class="checkbox">
+                                        <label class="check-active">
+                                            <input ng-model="isSetTop" type="checkbox" id="check-act">
+                                            <label for="check-act"></label>
+                                            <span>设置为默认收货地址</span>
+                                        </label>
+                                    </div>
+                                </div>
+                            </div>
+                        </form>
+                    </div>
                 </div>
             </div>
+            <div class="edit-btn">
+                <button class="btn btn-default" ng-click="reset(myForm)" type="button">取消</button>
+                <button class="btn btn-success" ng-click="save()" type="button">保存</button>
+            </div>
         </div>
     </div>
 </div>
+<style type="text/css">
+    .new-address {
+        padding-top:20px;
+    }
+    .new-address label{
+        margin-right: -15px;
+        font-size: 14px;
+        font-weight: inherit;
+        line-height: 34px;
+    }
+    .heigth30 {
+        height: 30px;
+        line-height: 30px;
+    }
+    .edit-rec-addr .form-control {
+        color: black;
+    }
+    .edit-rec-addr strong {
+        color: red;
+    }
+    .edit-rec-addr .format-correct {
+        color: #008000;
+        height: 30px;
+        line-height: 30px;
+    }
+    .edit-rec-addr .format-error {
+        color: red;
+        height: 30px;
+        line-height: 30px;
+    }
+    .select-adder{
+        background:url("static/img/user/images/xiala.png") right no-repeat ;
+        background-position-x: 180px;
+    }
+    .form-control{
+        border-radius: 3px;
+    }
+    .new-address .edit-btn{
+        text-align: center;
+    }
+    .new-address.edit-btn button{
+        width: 70px;
+        height: 32px;
+        border-radius: 0;
+    }
+    .new-address.edit-btn button.btn-default{
+        background: #c8c6c6 !important;
+        color: #fff !important;
+        border: none !important;
+    }
+    .form-horizontal .control-label{
+        width: 120px;
+        padding-right: 5px;
+    }
+    .checkbox .col-sm-3{
+        width: 177px;
+    }
+</style>
 <style>
     .com-del-box{
         position: fixed;

+ 740 - 0
src/main/webapp/resources/view/sso/ssoInvoice.html

@@ -0,0 +1,740 @@
+<style>
+  .u_c_invoice {
+    background: #fff;
+  }
+  .u_c_invoice select {
+    opacity: 1
+  }
+
+  .u_c_invoice .invoice-list-title {
+    /*margin-bottom: 16px;*/
+  }
+  .u_c_invoice .ticket_record_list {
+    background: #fff;
+    min-height: 323px;
+  }
+  .u_c_invoice #add-invoice {
+    width: 100%;
+    background: #fff;
+    margin-top: 16px;
+    padding-bottom: 20px;
+  }
+  .u_c_invoice #add-invoice label{
+    font-size: 14px;
+  }
+  .u_c_invoice .add-invoice-title {
+    width: 98%;
+    height: 45px;
+    line-height: 45px;
+    display: inline-block;
+    border-bottom: #e8e8e8 1px solid;
+    font-size: 14px;
+    margin-left: 15px;
+    font-weight: bold;
+  }
+  .u_c_invoice .invoice-type > label {
+    font-weight: normal;
+    padding: 15px 0 15px 3em;
+  }
+  .u_c_invoice .invoice-type > div {
+    padding: 15px 13px;
+  }
+  .u_c_invoice #add-invoice > div > div > label > input[type=radio] {
+    margin-top: auto;
+  }
+  .u_c_invoice .add-invoice-form .form-group label {
+    padding-left: 2.5em;
+    font-weight: normal;
+  }
+  .select-adder{
+    background:url("static/img/user/images/xiala.png") right no-repeat ;
+    background-position-x: 140px;
+  }
+  .u_c_invoice #add-invoice .form-group{
+    line-height: 34px;
+  }
+  .ticket_record .ticket_record_list .ticket_record_title {
+    padding: 8px 18px;
+  }
+  .ticket_record .ticket_record_list .ticket_record_title .l_title {
+    font-size: 14px;
+  }
+  .ticket_record .ticket_record_list .ticket_record_title .add_btn{
+    width: auto;
+    height: 40px;
+    text-align: center;
+    float: right;
+    font-size: 12px;
+    margin-right: 32px;
+  }
+  .ticket_record .ticket_record_list .ticket_record_title .add_btn i{
+    background: white;
+    color: #32b500;
+    margin-right: 5px;
+    font-size: 14px;
+  }
+  .ticket_record .ticket_record_list .ticket_record_title .add_btn:hover{
+    cursor: pointer;
+  }
+  .ticket_record_list dl dt span {
+    font-weight: bold;
+    color: #fff;
+    background: #89aefa;
+  }
+  .match-menu {
+    width: 100%;
+    height: 20px;
+    line-height: 20px;
+  }
+  .match-menu span.active {
+    background: #fff;
+    border: #82d2fa 1px solid;
+    border-bottom: #fff 1px solid;
+  }
+  .match-menu span {
+    display: inline-block;
+    text-align: center;
+    width: 100px;
+    height: 20px;
+    background: #eee;
+    border-top-left-radius: 3px;
+    border-top-right-radius: 3px;
+    margin-left: 390px;
+    line-height: 19px;
+    position: relative;
+    bottom: 20px;
+  }
+  .match-menu span.active a {
+    color: #333;
+  }
+  .match-menu span a {
+    font-size: 12px;
+    color: #999;
+    display: inline-block;
+    height: 20px;
+    width: 78px;
+  }
+  a:hover {
+    text-decoration: none;
+  }
+  .match-menu span i {
+    font-size: 14px;
+    color: #999;
+  }
+  .match-menu span i:hover, .match-menu span a:hover {
+    color: #5078cb;
+  }
+  .ticket_record .oder01 ul.active {
+    border-bottom: #82d2fa 1px solid;
+  }
+  /*提示框样式*/
+  .com-del-box{
+    position: fixed;
+    z-index: 2;
+    height: 152px;
+    opacity: 1;
+    background-color: white;
+    width: 310px;
+    -webkit-box-shadow: 0 5px 15px rgba(0,0,0,.5);
+    box-shadow: 0 5px 15px rgba(0,0,0,.5);
+    margin: -155px 0 0 -75px;
+    top: 55%;
+    left: 50%;
+  }
+  .com-del-box .title{
+    height: 30px;
+    background-color: #5078cb;
+    text-align: right;
+    padding-right: 15px;
+    line-height: 30px;
+  }
+  .com-del-box .title a{
+    color: white;
+    font-size: 16px;
+  }
+  .com-del-box .content{
+    width: 100%;
+    text-align: center;
+    margin: 0 auto;
+  }
+  .com-del-box .content p{
+    line-height: 50px;
+    font-size: 14px;
+    padding-top: 10px;
+  }
+  .com-del-box .content p i{
+    color: #5078cb;
+    font-size: 16px;
+    margin-right: 10px;
+  }
+  .com-del-box .content div{
+    width: 100%;
+    text-align: center;
+    margin: 0 auto;
+  }
+  .com-del-box .content div a{
+    width: 55px;
+    height: 26px;
+    line-height: 26px;
+    display: inline-block;
+    text-align: center;
+    font-size: 14px;
+  }
+  .com-del-box .content div a:first-child{
+    background: #b4b5b9;
+    color: #333;
+    margin-right: 10px;
+  }
+  .com-del-box .content div a:last-child{
+    background: #5078cb;
+    color: #fff;
+  }
+  .com-del-box .content div a:hover{
+    background: #3f7ae3;
+    color: #fff;
+  }
+  /*新增普票样式*/
+  .content-title {
+    font-size: 19px;
+  }
+
+  td > .simple-select {
+    display: inline;
+  }
+  .normal-control-label {
+    margin-bottom: 0;
+    text-align: right;
+    padding-top: 7px;
+    padding-right: 23px;
+  }
+
+  #bill-info label {
+    font-size: 14px;
+    line-height: 1.429;
+    font-weight: normal;
+  }
+  #bill-info span.disable {
+    color: rgb(153, 153, 153);
+  }
+  .base-line {
+    vertical-align: -webkit-baseline-middle;
+  }
+
+  #bill-info .row {
+    margin-left: 0px;
+    margin-right: 0px;
+  }
+
+  #bill-info {
+    font-size: 15px;
+    margin-bottom: 1em;
+  }
+
+  .error {
+    padding-top: 7px;
+    line-height: 1.5;
+  }
+
+  div.radio {
+    margin-top: 0px;
+    margin-bottom: 0;
+    height: 27px;
+    line-height: 27px;
+    padding-top: 6px;
+    padding-left: 0;
+  }
+
+  .padding-top-5 {
+    padding-top: 5px;
+  }
+
+  label.padding-left-0 {
+    padding-left: 0px;
+  }
+
+  .checkbox .col-md-3 {
+    padding-right: 0px;
+  }
+
+  div.upload {
+    margin-left: 15px;
+    width: 370px;
+  }
+
+  #bill-info,  #bill-info input, #bill-info select{
+    font-size: 14px !important;
+  }
+
+  .height-34 {
+    height: 34px;
+    line-height: 26px;
+  }
+
+  .a-background {
+    color: red;
+  }
+
+  .address .checkbox .col-md-3{
+    width: 20%;
+  }
+  #bill-info .form-control {
+    color: #000;
+    font-size: 14px;
+  }
+  #bill-info .format-error {
+    color: red;
+    height: 30px;
+    line-height: 30px;
+  }
+
+  #bill-info select {
+    opacity: 1;
+  }
+  #bill-info .content-header{
+    font-size: 14px;
+    padding-bottom: 0;
+    color: rgb(80, 120, 203);
+    font-weight: bold;
+    line-height: 1.429;
+    padding-left: 40px;
+    padding-bottom: 10px;
+  }
+  .select-adder{
+    background:url("static/img/user/images/xiala.png") right no-repeat ;
+    background-position-x: 150px;
+  }
+  .form-btn .btn {
+    background: #5078cb;
+    border-color: #3b88c3;
+    width: 60px;
+    height: 26px;
+    line-height: 13px;
+    color: #fff;
+    border-radius: 0;
+    text-align: center;
+    vertical-align: middle;
+    white-space: nowrap;
+  }
+  .form-btn .btn:first-child{
+    background: #c8c6c6;
+    border: 1px solid #c8c6c6;
+  }
+  .form-area {
+    background: #f5f8fe;
+    margin: 0 15px;
+  }
+  .form-area .row {
+    padding-top: 15px;
+  }
+  .form-area .address .row {
+    padding-top: 0px;
+  }
+  .form-area form {
+    padding-top: 15px;
+  }
+  .form-bottom {
+    background: #fff;
+    text-align: center;
+    vertical-align: middle;
+    padding-top: 20px;
+    padding-bottom: 3px;
+  }
+  .ticket_record_list dl dt span {
+    font-weight: normal;
+  }
+  /*radio*/
+  #bill-info .radioLabel {
+    line-height: 20px;
+    cursor: pointer;
+    color: #666;
+  }
+  #bill-info .radio-inline {
+    padding-left: 0;
+    margin: 0 26px;
+  }
+  #bill-info .radioLabel label{
+    width: 12px;
+    height: 12px;
+    background: url(static/img/icon/check-rule.png);
+    background-position: 0 0px;
+    vertical-align: middle;
+    margin-bottom: 0 !important;
+    margin-right: 0px !important;
+    padding: 0;
+    min-height: 12px;
+    left: -7px;
+  }
+  #bill-info .radioLabel input[type="radio"]:checked + label {
+    background-position: -15px -12px;
+  }
+  #bill-info .radioLabel input[type="radio"]:checked + label{
+    color: #5078cb;
+  }
+  #bill-info .radioLabel input[type="radio"]{
+    display: none;
+  }
+  #bill-info .form-area .input-file-default {
+    width: 75px;
+  }
+  .ticket_record_list dl dd:hover {
+    background: #f1f5ff;
+  }
+  #bill-info .select-file-box input {
+    display: none;
+  }
+  #bill-info .select-file-box span {
+    width: 74px;
+    display: block;
+    text-align: center;
+    height: 22px;
+    line-height: 22px;
+    background: #ff8522;
+    font-size: 12px;
+    color: #fff;
+    margin-top: 5px;
+    position: relative;
+    left: -22px;
+    border-radius: 2px;
+  }
+  .cursor-not-allowed {
+    cursor: not-allowed!important;
+  }
+  .ticket_record_list .ticket_data dd {
+    border-left: #dae5fd 1px solid;
+    border-bottom: #dae5fd 1px solid!important;
+    border-right: #dae5fd 1px solid;
+  }
+  #bill-info .form-input-line {
+    height: 34px;
+    width: 331px;
+    display: inline-block;
+    margin: 0 15px;
+    float: left;
+  }
+  #bill-info .form-input-line input[type='text'],#bill-info .form-input-line select {
+    border-radius: 2px;
+    border: 1px solid #eef4ff;
+  }
+  #bill-info .file-line {
+    width: 247px;
+  }
+  #bill-info .address .form-input-line {
+    margin: 0 10px 0 0;
+  }
+  #bill-info .address .form-input-line:first-child {
+    margin-left: 15px;
+  }
+  #bill-info .control-label{
+    position: relative;
+    top: 7px;
+  }
+  #bill-info .normal-control-label {
+    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;*/
+  }
+  .ticket_record .empty{
+    overflow: hidden;
+    margin: 0!important;
+    display:inline-flex;
+    align-items: center;
+    width: 100%;
+    justify-content: center;
+    height: 200px;
+  }
+  .ticket_record .empty-info{
+    line-height: 28px;
+    width: 143px;
+    text-align: left;
+    margin-left:10px;
+  }
+  .ticket_record .empty-info .grey{
+    color: #999;
+    font-size: 14px;
+  }
+  .ticket_record .empty .empty-info>a{
+    font-size: 14px;
+    color: #5078cb;
+  }
+  .ticket_record .empty .empty-info i{
+    margin-right:5px;
+  }
+  .oder01 ul li{
+    margin-left: 0px;
+    position: relative;
+  }
+  .oder01 ul li.active a{
+    border-bottom: #fff;
+    background: #5078cb;
+    color: #fff;
+  }
+  .oder01 ul li::after{
+    background: url('static/img/vendor/images/downicon.png');
+    width: 11px;
+    height: 6px;
+    position: absolute;
+    bottom: 0px;
+    left: 50%;
+    content: ' ';
+    margin-left: -5px;
+    display: none;
+  }
+  .oder01 ul li.active:after{
+    display: block
+  }
+  .count_basic{
+    background: #ecf2fd;
+    width: 100%;
+    margin: 0 auto;
+    height: 40px;
+    line-height: 40px;
+    border-bottom: #e8e8e8 1px solid;
+  }
+</style>
+<!--右侧主体部分-->
+<div class="user_right fr u_c_invoice">
+  <!--开票记录-->
+  <div class="ticket_record oder">
+    <div class="count_basic">
+      <p class="basic_title"><span>发票信息</span>
+        <!--<span class="fr"><a href="#">修改</a><a href="#">提交</a><a href="#">删除</a></span>-->
+      </p>
+    <!--<div style="background: #f5f5f5; height: 11px" ng-if="!changeBillStatusFlag"></div>-->
+    <!--发票操作导航-->
+    <div class="match-menu" ng-if="changeBillStatusFlag">
+                <span class="active">
+                    <a ng-bind="isAdd?'新增发票信息':'修改发票信息'"></a>
+                        <i class="fa fa-remove" ng-click="exitEdit()"></i>
+                </span>
+    </div>
+    <!--我的发票-->
+    <div class="ticket_record_list" ng-if="!changeBillStatusFlag" style="margin-top:0 !important;">
+      <div class="ticket_record_title">
+        <span class="l_title">已设置的开票信息</span>
+        <span class="add_btn" ng-click="addBill()" ng-if="!(!isSpecial && !isNormal)"><i class="fa fa-plus-circle"></i>   新增发票</span>
+      </div>
+      <!-- 开票资料-->
+      <div class="tab" style="display: inline-block;">
+        <dl class="ticket_data">
+          <dt class="invoice-list-title">
+            <span class="wd01">发票类型</span>
+            <span>开票抬头</span>
+            <span class="wd01">收票人</span>
+            <span>收票地址</span>
+            <span>收票人电话</span>
+            <span>编辑</span>
+          </dt>
+          <!--  <p class="height16">&nbsp;</p>-->
+          <dd ng-repeat="invoice in invoices">
+                        <span class="wd01">
+                            <img ng-if="invoice.kind == 1206" src="static/img/user/images/ticket01.jpg"/>
+                            <img ng-if="invoice.kind == 1205" src="static/img/user/images/ticket02.jpg"/>
+                        </span>
+            <span ng-cloak class="textmore" title="{{invoice.head}}">{{invoice.head}}</span>
+            <span class="wd01 textmore" ng-cloak title="{{invoice.name}}">{{invoice.name}}</span>
+            <span class="textmore" ng-cloak title="{{invoice.area+','+invoice.detailAddress}}">{{invoice.area}} {{invoice.detailAddress}}</span>
+            <span ng-cloak title="{{invoice.telephone}}">{{invoice.telephone}}</span>
+            <span>
+                            <!--<a  class="look" ng-click="viewInvoice(invoice)">查看/</a>-->
+                            <a  ng-click="modifyInvoice(invoice)">修改</a> |
+                            <a  ng-click="deleteInvoice(invoice)">删除</a>
+                        </span>
+          </dd>
+          <!--<dd ng-if="invoices.length == 0 || !invoices" class="text-center invoice-box" style="font-size: 12px;line-height: 200px;height: 200px; border: none!important;">-->
+          <!--<img src="static/img/all/empty-cart.png">-->
+          <!--<span style="width: auto;float: right;line-height: 200px;color: #999;position: relative;right: 390px;font-size: 12px">暂无开票-->
+          <!--<a href="javascript:history.go(-1)" style="margin-left:20px;font-size: 14px;color:#5078cb"><i class="fa fa-mail-reply"></i>&nbsp;返回上一级</a>-->
+          <!--</span>-->
+
+          <!--</dd>-->
+        </dl>
+        <div class="empty" ng-if="invoices.length == 0 || !invoices">
+          <p class="empty-img">
+            <img src="static/img/all/empty-cart.png">
+          </p>
+          <div class="empty-info">
+            <p class="grey"> 暂无发票信息 </p>
+            <!--<a href="user#/home"><i class="fa fa-mail-reply fa-xs"></i>返回上一页</a>-->
+          </div>
+        </div>
+      </div>
+    </div>
+    <!--新增发票 -->
+    <div id="bill-info" ng-if="changeBillStatusFlag">
+      <div class="row">
+        <h2 class="content-header"  ng-bind="billType == 1205?'增值税专票':'增值税普票'"></h2>
+      </div>
+      <div class="form-area">
+        <div class="row" ng-if="isAdd">
+          <label class="col-md-2 normal-control-label"><b class="text-inverse">*</b>发票类型:</label>
+          <div class="radio col-md-10">
+            <!--  <label class="radio-inline">
+                  <label class="padding-top-5"><input type="radio" ng-click="setBillType(1206)" ng-model="billType" value="1206" ng-disabled="!isNormal"></label>
+                  <label ng-class="{'disable':!isNormal, '':isNormal}" class="padding-left-0">增值税普通发票(不可抵扣)</label>
+              </label>
+              <label class="radio-inline">
+                  <label class="padding-top-5"><input type="radio" ng-click="setBillType(1205)" ng-model="billType" value="1205" ng-disabled="!isSpecial"></label>
+                  <label ng-class="{'disable':!isSpecial, '':isSpecial}" class="padding-left-0">增值税专用发票(可抵扣) </label>
+              </label>-->
+            <label for="1206" class="radio-inline radioLabel" ng-class="{'cursor-not-allowed':!isNormal}">
+              <input type="radio" name="bill" value="1206" ng-disabled="!isNormal" ng-click="setBillType(1206)" ng-model="billType" id="1206">
+              <label ng-class="{'cursor-not-allowed':!isNormal}" for="1206" class="txtContact"></label>
+              <span ng-class="{'disable':!isNormal, '':isNormal}">增值税普票(不可抵扣)</span>
+            </label>
+            <label for="1205" class="radio-inline radioLabel" ng-class="{'cursor-not-allowed':!isSpecial}">
+              <input type="radio" name="bill" value="1205" ng-disabled="!isSpecial" ng-click="setBillType(1205)" ng-model="billType" id="1205">
+              <label ng-class="{'cursor-not-allowed':!isSpecial}" for="1205" class="txtContact"></label>
+              <span ng-class="{'disable':!isSpecial, '':isSpecial}">增值税专票(可抵扣)</span>
+            </label>
+          </div>
+        </div>
+        <form class="form-horizontal" novalidate="novalidate" name="form">
+          <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-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-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-class="{'bg-fff8ee':!initFlag.initCompanyPhone&&form.companyPhone.$error.required, 'bg-fff':!initFlag.initCompanyPhone&&!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-class="{'bg-fff8ee':!initFlag.initCompanyTaxNum&&form.companyTaxNum.$error.required, 'bg-fff':!initFlag.initCompanyTaxNum&&!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-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-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>
+          <!--<div class="form-group"  ng-if="billType == 1205">-->
+          <!--<label class="col-md-2 control-label"><b class="text-inverse">*</b>上传开户许可证:{{form.permissionUpload}}</label>-->
+          <!--<div class="form-input-line file-line">-->
+          <!--<input type="text" name="permission" required class="form-control" ng-model="bill.attachUrl" readonly style="background: #fff">-->
+          <!--</div>-->
+          <!--<div class="col-md-1">-->
+          <!--<label class="select-file-box">-->
+          <!--<span>选择文件</span>-->
+          <!--<input class="input-file-default" type="file" ng-file-select ng-model="bill.billInfo" ng-change="onUploadPermission()" ng-multiple="false" accept="image/gif,image/jpeg,image/jpg,image/png,image/svg,application/pdf,*.pdf">-->
+          <!--</label></div>-->
+          <!--<div class="text-inverse error col-md-3" ng-show="isDoUpload&&(form.permission.$error.required)">请勿超过3M</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 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-class="{'bg-fff8ee':!initFlag.initTelephone&&form.billTel.$error.required, 'bg-fff':!initFlag.initTelephone&&(!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="13" 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-13位电话号码'"></div>
+          </div>
+          <div class="form-group address">
+            <label class="col-md-2 control-label"><b class="text-inverse">*</b>所在地区:</label>
+            <div class="row checkbox">
+              <div class="form-input-line" style="width: 160px">
+                <select required="required" class="select-adder form-control"
+                        ng-model="bill.address.province" name="province"
+                        ng-options="key as key for (key,value) in division"
+                        ng-change="bill.address.city='';bill.address.district='';">
+                  <option value="">省</option>
+                </select>
+              </div>
+              <div class="form-input-line" style="width: 160px">
+                <select class="select-adder form-control" ng-model="bill.address.city" name="city"
+                        ng-options="key as key for (key,value) in division[bill.address.province]"
+                        ng-change="bill.address.district='';" required="required">
+                  <option value="">市</option>
+                </select>
+              </div>
+              <div class="form-input-line" style="width: 160px">
+                <select class="select-adder form-control" ng-model="bill.address.district" name="district"
+                        ng-options="value as value for value in division[bill.address.province][bill.address.city]" required="required">
+                  <option value="">区</option>
+                </select>
+              </div>
+            </div>
+          </div>
+          <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" 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>
+          <div class="form-bottom">
+            <div class="form-group">
+              <label class="check-active checkbox-inline text-inverse">
+                <input checked="true" type="checkbox" ng-model="bill.is_agree" name="is_agree" id="check-mzy">
+                <label for="check-mzy" style="position: relative;bottom: 2px;"></label>
+                <span style="color: #333;">我已阅读并同意</span>
+              </label>
+              <a href="/help/helpList/19" 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)">
+              <input type="submit" value="保存" class="btn"
+                     ng-click="saveBill(form.$invalid)">
+            </div>
+          </div>
+        </form>
+      </div>
+    </div>
+    <!-- 提示框 -->
+    <div class="com-del-box" ng-if="showDeleteBox">
+      <div class="title">
+        <a ng-click="setDeleteBox(false)"><i class="fa fa-close fa-lg"></i></a>
+      </div>
+      <div class="content">
+        <p><i class="fa fa-exclamation-circle"></i>是否要删除此发票?</p>
+        <div>
+          <a ng-click="setDeleteBox(false)">取消</a>
+          <a ng-click="doDeleteInvoice()">确认</a>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>

+ 8 - 8
src/main/webapp/resources/view/sso/staffManagement.html

@@ -937,7 +937,7 @@
                 </div>
                 <div class="searchUser-group">
                     <span ng-click="onSearch(keyword, filterRole)">搜索</span>
-                    <input type="text" ng-keyup="onKeyUpSearch(keyword, filterRole, $event)" ng-model="keyword" placeholder="输入人员姓名、电话号码、邮箱或UU号进行搜索"/>
+                    <input type="text" ng-keyup="onKeyUpSearch(keyword, filterRole, $event)" ng-model="keyword" placeholder="输入人员姓名、电话号码、邮箱进行搜索"/>
                     <div>
                         <select ng-model="filterRole" ng-change="onSearch(keyword,filterRole)">
                             <option value="all" selected="selected">全部角色</option>
@@ -958,12 +958,12 @@
                                  <label for="checkAll"></label>
                              </lable>
                              全选</th>-->
-                        <th width="143">UU账号</th>
+                        <!--<th width="143">UU账号</th>-->
                         <th width="101">姓名</th>
                         <th width="67">性别</th>
                         <th width="133">手机号</th>
                         <th width="207">邮箱</th>
-                        <th width="233">角色</th>
+                        <th width="376">角色</th>
                         <th width="107">操作</th>
                     </tr>
                     </thead>
@@ -975,7 +975,7 @@
                                 <label for="check0"></label>
                             </lable>
                         </td>-->
-                        <td>系统生成</td>
+                        <!--<td>系统生成</td>-->
                         <td>
                             <input type="text" ng-model="newUser.userName" required placeholder="用户名">
                         </td>
@@ -1011,7 +1011,7 @@
                                  <label for="{{'check1'+$index+1}}"></label>
                              </lable>
                          </td>-->
-                        <td>{{user.userUU}}</td>
+                        <!--<td>{{user.userUU}}</td>-->
                         <td>{{user.userName}}</td>
                         <td>{{user.userSex != null ? (user.userSex == 'M' || user.userSex == '男' ? '男' : '女') : '-'}}</td>
                         <td>{{user.userTel}}</td>
@@ -1058,13 +1058,13 @@
         <!-- 申请绑定 -->
         <div class="clearfix bind-en" ng-if="tab=='bind'">
             <div class="rt_menu">
-                <span class="pull-right"><input type="text" ng-model="searchParams.keyword" ng-keyup="keyUpApply()" class="form-control" placeholder="用户名/UU账号/手机号"/><button class="btn" ng-click="searchApply()">搜索</button> </span></span>
+                <span class="pull-right"><input type="text" ng-model="searchParams.keyword" ng-keyup="keyUpApply()" class="form-control" placeholder="用户名/手机号"/><button class="btn" ng-click="searchApply()">搜索</button> </span></span>
             </div>
             <table class="bind-enter-tab" ng-table="applyToEnterpriseTableParams">
                 <thead>
                 <tr>
                     <th>用户名</th>
-                    <th>UU账号</th>
+                    <!--<th>UU账号</th>-->
                     <th>手机号</th>
                     <th>邮箱</th>
                     <th>操作</th>
@@ -1073,7 +1073,7 @@
                 <tbody>
                 <tr class="default-row" ng-repeat="item in content">
                     <td class="user-name" ng-bind="item.user.vipName || '-'"></td>
-                    <td ng-bind="item.user.userUU || '-'"></td>
+                    <!--<td ng-bind="item.user.userUU || '-'"></td>-->
                     <td ng-bind="item.user.mobile || '-'"></td>
                     <td ng-bind="item.user.email || '-'"></td>
                     <td>

+ 313 - 43
src/main/webapp/resources/view/usercenter/forstore/bomDetail.html

@@ -269,26 +269,27 @@
     }
     .seek-purchase .seek-purchase-content >table >tbody tr.expand-row td .switch-line a {
         position: relative;
-        width: 50%;
+        width: 33.2%;
         height: 34px;
         line-height: 34px;
         text-align: center;
         display: inline-block;
-        background: #d7d6d5;
-        color: #fff;
+        background: #d6e5ff;
+        color: #3f84f6;
     }
     .seek-purchase .seek-purchase-content >table >tbody tr.expand-row td .switch-line a.active {
-        background: #414140;
-    }
-    .seek-purchase .seek-purchase-content >table >tbody tr.expand-row td .switch-line a:first-child::after {
-        position: absolute;
-        right: 0;
-        content: '';
-        width: 0;
-        height: 0;
-        border-bottom: 34px solid #414140;
-        border-left: 12px solid transparent;
+        background: #3f84f6;
+        color: #fff;
     }
+    /*.seek-purchase .seek-purchase-content >table >tbody tr.expand-row td .switch-line a:first-child::after {*/
+        /*position: absolute;*/
+        /*right: 0;*/
+        /*content: '';*/
+        /*width: 0;*/
+        /*height: 0;*/
+        /*border-bottom: 34px solid #414140;*/
+        /*border-left: 12px solid transparent;*/
+    /*}*/
     .seek-purchase .seek-purchase-content >table >tbody tr.expand-row td .switch-line a:first-child.active::after {
         border-bottom-color: #d7d6d5;
     }
@@ -362,9 +363,18 @@
     .seek-purchase .seek-purchase-content .BOM-header > div {
         height: 100px;
         margin: 14px 0 0 0;
-        line-height: 100px;
+        /*line-height: 100px;*/
         border: 1px dashed #fd7748;
-        padding: 0 66px 0 21px;
+        padding: 10px 66px 0 21px;
+    }
+    .seek-purchase .seek-purchase-content .BOM-header > div span {
+        font-size: 22px;
+        font-weight: bold;
+        margin-right: 20px
+    }
+    .seek-purchase .seek-purchase-content .BOM-header > div a {
+        font-size: 14px;
+        color: #666
     }
     .seek-purchase .seek-purchase-content .BOM-header > div .fr {
         line-height: normal;
@@ -546,10 +556,16 @@
         <div class="BOM-header">
             <a href="user#/seekPurchase?type=bomManage">&lt;返回BOM列表</a>
             <div>
-                <p class="BOM-name-area" ng-show="!isEditName">
+                <div class="BOM-name-area" ng-show="!isEditName">
                     <span ng-bind="bomInfo.remark"></span>
-                    <!--<a ng-click="setIsEditName(true)">编辑BOM名称</a>-->
-                </p>
+                    <a ng-bind="bomInfo.date | date:'yyyy-MM-dd HH:mm:ss'"></a>
+                    <div class="progress">
+                        <div class="left">{{bomInfo.quotedAmount}}</div>
+                        <div class="progressBtn" ng-style="{width: bomInfo.quotedAmount / bomInfo.amount * '100' + '%'}"></div>
+                        <div class="right" ng-if="bomInfo.amount - bomInfo.quotedAmount > 0">{{bomInfo.amount - bomInfo.quotedAmount}}</div>
+                    </div>
+                    <p>本单共<span>{{bomInfo.amount}}</span>个产品,<span>{{bomInfo.quotedAmount}}</span>个已报价(其中{{bomInfo.replaceQuotedAmount}}个为替代料报价)</p>
+                </div>
                 <p class="BOM-edit" ng-show="isEditName">
                     <input type="text" class="form-control" ng-change="onBomNameChange()" ng-model="bomName">
                     <a ng-click="setIsEditName(false)">取消</a>
@@ -634,8 +650,8 @@
                 <th width="260">品牌/物料名称</th>
                 <th width="260">型号/规格</th>
                 <th width="110">采购数量(PCS)</th>
-                <th width="120">截止时间</th>
-                <th width="136">状态</th>
+                <th width="120">状态/截止时间</th>
+                <th width="136">操作</th>
                     <!--
                     <select class="select-adder form-control" ng-model="searchStatus" ng-change="onSearch(searchStatus)">
                         <option value="0">全部</option>
@@ -685,11 +701,36 @@
                         </div>
                     </div>
                 </td>
-                <td class="left-time" ng-if="seek.remainingTime > 0">剩余&nbsp;<span ng-bind="getDay(seek.remainingTime)" ng-if="getDay(seek.remainingTime) > 0" class="red-text"></span><i ng-if="getDay(seek.remainingTime) > 0">&nbsp;天&nbsp;</i><span ng-if="getDay(seek.remainingTime) <= 0" ng-bind="getHours(seek.remainingTime)" class="red-text">5</span><i ng-if="getDay(seek.remainingTime) <= 0">&nbsp;小时</i></td>
-                <td class="left-time" ng-if="seek.remainingTime <= 0"><span style="color: red;">已截止</span></td>
+                <td class="left-time">
+                    <div class="row-wrap">
+                        <span ng-if="seek.offerAmount == 0" style="color:red;">待报价</span>
+                        <span ng-if="seek.agreed == 0 && seek.offerAmount > 0">已报价</span>
+                        <span ng-if="seek.agreed == 1" style="color:green;">已采纳</span>
+                        <div class="remain" ng-if="seek.remainingTime > 0">
+                            剩余&nbsp;<span ng-bind="getDay(seek.remainingTime)" ng-if="getDay(seek.remainingTime) > 0" class="red-text"></span>
+                            <i ng-if="getDay(seek.remainingTime) > 0">&nbsp;天&nbsp;</i>
+                            <span ng-if="getDay(seek.remainingTime) <= 0" ng-bind="getHours(seek.remainingTime)" class="red-text">5</span>
+                            <i ng-if="getDay(seek.remainingTime) <= 0">&nbsp;小时</i>
+                        </div>
+                        <div class="remain" ng-if="seek.remainingTime <= 0"><span>已截止</span></div>
+                        <div class="remain" ng-if="seek.remainingTime == null"><span>-</span></div>
+                    </div>
+                </td>
+                <!--<td class="left-time" ng-if="seek.remainingTime > 0">-->
+                    <!--剩余&nbsp;<span ng-bind="getDay(seek.remainingTime)" ng-if="getDay(seek.remainingTime) > 0" class="red-text"></span>-->
+                    <!--<i ng-if="getDay(seek.remainingTime) > 0">&nbsp;天&nbsp;</i>-->
+                    <!--<span ng-if="getDay(seek.remainingTime) <= 0" ng-bind="getHours(seek.remainingTime)" class="red-text">5</span>-->
+                    <!--<i ng-if="getDay(seek.remainingTime) <= 0">&nbsp;小时</i>-->
+                <!--</td>-->
+                <!--<td class="left-time" ng-if="seek.remainingTime <= 0">-->
+                    <!--<span style="color: red;">已截止</span>-->
+                <!--</td>-->
                 <td class="operate-seek">
-                    <span ng-if="seek.offerAmount == 0" style="color:red;">待报价</span>
-                    <span ng-if="seek.offerAmount > 0">已报价</span>
+                    <span style="margin-left:0" ng-if="seek.offerAmount > 0" ng-show="!seek.$status || seek.$status == 0" ng-click="setSeekStatus(seek, 2)">查看报价&nbsp;<i class="fa fa-angle-double-down" style="display: contents;"></i></span>
+                    <span style="margin-left:0" ng-if="seek.goodsAmount > 0" ng-show="!seek.$status || seek.$status == 0" ng-click="setSeekStatus(seek, 1)">商城现货&nbsp;<i class="fa fa-angle-double-down" style="display: contents;"></i></span>
+                    <span style="margin-left:0" ng-show="seek.$status && (seek.$status == 1 || seek.$status == 2 || seek.$status == 3)" ng-click="setSeekStatus(seek, 0, true)">收起&nbsp;<i class="fa fa-angle-double-up" style="display: contents;"></i></span>
+                    <!--<span ng-if="seek.offerAmount == 0" style="color:red;">待报价</span>-->
+                    <!--<span ng-if="seek.offerAmount > 0">已报价</span>-->
                     <div class="sharecode" ng-mouseover="setShowShare(seek,$index)" ng-mouseleave="hideShare($index)">
                         <div class="sharecodeT">分<br/>享</div>
                         <div class="sharecodeBtn">
@@ -716,12 +757,14 @@
                 </td>
                 -->
             </tr>
-            <tr class="expand-row" ng-if="seek.$status == 1 || seek.$status == 2">
+
+            <tr class="expand-row" ng-if="seek.$status == 1 || seek.$status == 2 || seek.$status == 3">
                 <td colspan="10">
                     <div>
                         <div class="switch-line">
-                            <a ng-disabled="goodsCount == 0" ng-class="{'active': seek.$status == 1}" ng-click="setSeekStatus(seek, 1)">商城现货(<span ng-bind="goodsCount || 0"></span>)</a>
-                            <a ng-disabled="offerCount == 0" ng-class="{'active': seek.$status == 2}"  ng-click="setSeekStatus(seek, 2)">当前报价(<span ng-bind="offerCount || 0"></span>)</a>
+                            <a ng-disabled="goodsCount == 0" ng-class="{'active': seek.$status == 1}" ng-click="setSeekStatus(seek, 1, goodsCount == 0)">商城现货(<span ng-bind="goodsCount || 0"></span>)</a>
+                            <a ng-disabled="offerCount == 0" ng-class="{'active': seek.$status == 2}"  ng-click="setSeekStatus(seek, 2, offerCount == 0)">当前报价(<span ng-bind="offerCount || 0"></span>)</a>
+                            <a ng-disabled="replaceOfferCount == 0" ng-class="{'active': seek.$status == 3}"  ng-click="setSeekStatus(seek, 3, replaceOfferCount == 0)">替代型号报价(<span ng-bind="replaceOfferCount"></span>)</a>
                         </div>
                         <div ng-show="seek.$status == 1">
                             <table>
@@ -777,30 +820,118 @@
                             </div>
                             -->
                         </div>
-                        <div ng-show="seek.$status == 2">
+                        <div ng-show="seek.$status == 2 || seek.$status == 3">
                             <table>
                                 <thead>
-                                <tr>
-                                    <th width="173">卖家</th>
-                                    <th width="186">交期(天)</th>
-                                    <th width="186">单价</th>
-                                    <th width="195">生产日期</th>
+                                <tr ng-if="seek.$status == 2">
+                                    <th width="273">卖家</th>
+                                    <th width="233">交期(天)</th>
+                                    <th width="234">价格梯度</th>
+                                    <!--<th width="195">生产日期</th>-->
                                     <th width="221">操作</th>
                                 </tr>
+                                <tr ng-if="seek.$status == 3">
+                                    <th width="164">卖家</th>
+                                    <th width="84">品牌</th>
+                                    <th width="96">型号</th>
+                                    <th width="80">规格</th>
+                                    <th width="81">交期(天)</th>
+                                    <th width="102">价格梯度</th>
+                                    <th width="100">报价时间</th>
+                                    <!--<th width="195">生产日期</th>-->
+                                    <th width="181">操作</th>
+                                </tr>
                                 </thead>
                             </table>
                             <div class="seek-list">
                                 <table>
                                     <tbody>
-                                    <tr ng-repeat="of in offer">
-                                        <td width="173" ng-bind="(of.enterprise).enName"></td>
-                                        <td width="186" class="red-text" ng-bind="of.minDay+'-'+of.maxDay">4-6</td>
-                                        <td width="186"><span>{{of.currency + of.unitPrice | currencyStr}}</span></td>
-                                        <td width="195" ng-bind="of.produceDate || '-'"></td>
-                                        <td width="221" class="operate">
-                                            <a>联系卖家<img src="static/img/seekPurchase/link-buyer.png" alt=""></a>
-                                            <img ng-if="of.status == 202" src="static/img/seekPurchase/recieved.png" alt="" class="ng-scope">
-                                            <span ng-if="seek.status != 202" ng-click="setShowUseFlag(true, of)">采纳报价</span>
+                                        <tr ng-repeat="of in offer track by $index" ng-if="seek.$status == 2 && of.isReplace != 1">
+                                            <td width="273" ng-bind="of.vendName" title="{{of.vendName}}"></td>
+                                            <td width="233" class="red-text" ng-bind="of.leadtime">4-6</td>
+                                            <td width="234" class="seek-replies">
+                                                <!--<span>{{of.currency + of.unitPrice | currencyStr}}</span>-->
+                                                <div class="red-text">
+                                                    <!--<span>{{of.replies[0].lapQty}}</span>
+                                                    <span>{{of.currency + of.replies[0].price | currencyStr}}</span>-->
+                                                </div>
+                                                <ul class="red-text">
+                                                    <li ng-repeat="re in of.replies">
+                                                        <span ng-bind="re.lapQty" title="{{re.lapQty}}">1+</span>
+                                                        <span title="{{of.currency + re.price | currencyStr}}">{{of.currency + re.price | currencyStr}}</span>
+                                                    </li>
+                                                </ul>
+                                            </td>
+                                            <!--<td width="195" ng-bind="of.produceDate || '-'"></td>-->
+                                            <td width="221" class="operate">
+                                                <div style="display: inline-block" ng-controller="ChatContactCtrl as chat">
+                                                    <a href="javascript:void(0)" ng-click="chat.contactWithOther(null, currentSeek.qutations[$index].enterprise.uu, chat.UserType.ENTERPRISE)">联系卖家<img src="static/img/seekPurchase/link-buyer.png" alt=""></a>
+                                                    <div class="com-mall-del-box link-saler-box" ng-if="showLinkBox">
+                                                        <div class="title">
+                                                            <i ng-click="setShowLinkBox(false)"></i>
+                                                        </div>
+                                                        <div class="content">
+                                                            <p><i class="fa fa-exclamation-circle"></i>抱歉,暂时无法与卖家在线沟通!</p>
+                                                            <p>卖家联系电话:<span ng-bind="phone"></span></p>
+                                                            <div>
+                                                                <a ng-click="setShowLinkBox(false)">我知道了</a>
+                                                            </div>
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                                <b class="refused-show" ng-if="of.agreed == 0">拒绝原因 <img src="static/img/seekPurchase/refu.png" alt="">
+                                                    <a class="say-price-history" ng-bind="of.refusereason"></a>
+                                                </b>
+                                                <img ng-if="of.agreed == 1" src="static/img/seekPurchase/recieved.png" alt="" class="ng-scope">
+                                                <img ng-if="of.agreed == 0" src="static/img/seekPurchase/refused.png" alt="" class="ng-scope">
+                                                <span class="seek-btn" ng-if="of.agreed != 0 && of.agreed != 1" ng-click="adopt(of)">采纳</span>
+                                                <a class="seek-btn" ng-if="of.agreed != 0 && of.agreed != 1" ng-click="setActiveRefuse(of)">拒绝</a>
+                                            </td>
+                                        </tr>
+                                        <tr ng-repeat="of in offer track by $index" ng-if="seek.$status == 3 && of.isReplace == 1">
+                                        <td width="164" ng-bind="of.vendName" title="{{of.vendName}}"></td>
+                                        <td width="84" ng-bind="of.replaceBrand || '-'" title="{{of.replaceBrand}}"></td>
+                                        <td width="96" ng-bind="of.replaceCmpCode || '-'" title="{{of.replaceCmpCode}}"></td>
+                                        <td width="80" ng-bind="of.replaceSpec || '-'" title="{{of.replaceSpec}}"></td>
+                                        <td width="81" class="red-text" ng-bind="of.leadtime">4-6</td>
+                                        <td width="102" class="seek-replies">
+                                            <!--<span>{{of.currency + of.unitPrice | currencyStr}}</span>-->
+                                            <div class="red-text">
+                                                <!--<span>{{of.replies[0].lapQty}}</span>
+                                                <span>{{of.currency + of.replies[0].price | currencyStr}}</span>-->
+                                            </div>
+                                            <ul class="red-text">
+                                                <li ng-repeat="re in of.replies">
+                                                    <span ng-bind="re.lapQty" title="{{re.lapQty}}">1+</span>
+                                                    <span title="{{of.currency + re.price | currencyStr}}">{{of.currency + re.price | currencyStr}}</span>
+                                                </li>
+                                            </ul>
+                                        </td>
+                                        <td width="100" class="red-text" ng-bind="of.offerTime | date:'yyyy-MM-dd'"></td>
+                                        <!--<td width="195" ng-bind="of.produceDate || '-'"></td>-->
+                                        <td width="181" class="operate">
+                                            <div style="display: inline-block" ng-controller="ChatContactCtrl as chat">
+                                                <a href="javascript:void(0)" ng-click="chat.contactWithOther(null, currentSeek.qutations[$index].enterprise.uu, chat.UserType.ENTERPRISE)">联系卖家<img src="static/img/seekPurchase/link-buyer.png" alt=""></a>
+                                                <div class="com-mall-del-box link-saler-box" ng-if="showLinkBox">
+                                                    <div class="title">
+                                                        <i ng-click="setShowLinkBox(false)"></i>
+                                                    </div>
+                                                    <div class="content">
+                                                        <p><i class="fa fa-exclamation-circle"></i>抱歉,暂时无法与卖家在线沟通!</p>
+                                                        <p>卖家联系电话:<span ng-bind="phone"></span></p>
+                                                        <div>
+                                                            <a ng-click="setShowLinkBox(false)">我知道了</a>
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                            <b class="refused-show" ng-if="of.agreed == 0">拒绝原因 <img src="static/img/seekPurchase/refu.png" alt="">
+                                                <a class="say-price-history" ng-bind="of.refusereason"></a>
+                                            </b>
+                                            <img ng-if="of.agreed == 1" src="static/img/seekPurchase/recieved.png" alt="" class="ng-scope">
+                                            <img ng-if="of.agreed == 0" src="static/img/seekPurchase/refused.png" alt="" class="ng-scope">
+                                            <span class="seek-btn" ng-if="of.agreed != 0 && of.agreed != 1" ng-click="adopt(of)">采纳</span>
+                                            <a class="seek-btn" ng-if="of.agreed != 0 && of.agreed != 1" ng-click="setActiveRefuse(of)">拒绝</a>
                                         </td>
                                     </tr>
                                     </tbody>
@@ -836,4 +967,143 @@
             </div>
         </div>
     </div>
-</div>
+    <div class="com-mall-del-box link-saler-box" ng-if="showCurrentRefuseOffer">
+        <div class="title">
+            <i  ng-click="setShowCurrentRefuseOffer(false)"></i>
+        </div>
+        <div class="content">
+            <p><i class="fa fa-exclamation-circle"></i>拒绝报价原因:
+                <select class="select-adder" ng-model="choice">
+                    <option value="采购需求变更">采购需求变更</option>
+                    <option value="价格过高">价格过高</option>
+                    <option value="需进一步了解信息">需进一步了解信息</option>
+                    <option value="已选定合适供应商">已选定合适供应商</option>
+                    <option value="交期过长">交期过长</option>
+                </select>
+            </p>
+            <div>
+                <a ng-click="setShowCurrentRefuseOffer(false)">关闭</a>
+                <a ng-click="refuse(choice)">确定</a>
+            </div>
+        </div>
+    </div>
+</div>
+<style>
+    .seek-purchase .link-saler-box {
+        width: 289px;
+        height: auto;
+        min-height: auto;
+        border-radius: 2px;
+        position: fixed;
+        z-index: 10;
+        opacity: 1;
+        background-color: white;
+        -webkit-box-shadow: 0 5px 15px rgba(0,0,0,.5);
+        box-shadow: 0 5px 15px rgba(0,0,0,.5);
+        margin: -155px 0 0 -75px;
+        top: 55%;
+        left: 50%;
+    }
+    .seek-purchase .link-saler-box .title {
+        background-color: #4290f7;
+        height: 22px;
+        line-height: 22px;
+        margin-bottom: 20px;
+        text-align: right;
+        padding-right: 15px;
+    }
+    .com-mall-del-box .title i {
+        background: url('../img/icon/close.png') no-repeat;
+        display: inline-block;
+        width: 9px;
+        height: 9px;
+        cursor: pointer;
+        margin: 0;
+    }
+    .com-mall-del-box .content {
+        width: 100%;
+        text-align: center;
+        margin: 0 auto;
+    }
+    .seek-purchase .link-saler-box .content p {
+        line-height: 20px;
+        padding-top: 0;
+        color: #333;
+        font-size: 14px;
+    }
+    .seek-purchase .link-saler-box .content p i {
+        color: #4290f7;
+        margin-right: 4px;
+        font-size: 16px;
+    }
+    .seek-purchase .link-saler-box .select-adder {
+        display: inline-block;
+        width: 127px;
+        height: 22px;
+        border-radius: 2px;
+        border: 1px solid #a7a8a8;
+        padding: 0 20px 0 6px;
+        opacity: 1;
+        background: url(../img/user/images/xiala.png) right no-repeat #fff!important;
+        background-position-x: 100%!important;
+    }
+    .com-mall-del-box .content div {
+        width: 100%;
+        text-align: center;
+        margin: 0 auto
+    }
+    .seek-purchase .link-saler-box .content div a {
+        margin: 18px 0 13px 0;
+        border-radius: 2px;
+        color: #fff;
+        width: 78px!important;
+        background: #4290f7!important;
+    }
+    .progress {
+        width: 265px;
+        height: 13px;
+        line-height: 13px;
+        background: #d7d7d7;
+        border-radius: 13px;
+        overflow: hidden;
+        position: relative;
+        margin-top: 10px;
+        margin-bottom: 10px;
+    }
+    .progress ~ p {
+        font-size: 14px;
+        color: #666;
+    }
+    .seek-purchase .seek-purchase-content .BOM-header > div  p span {
+        color: #fd7748;
+        font-weight: 500;
+        font-size: 14px;
+        margin-right: 0;
+    }
+    .progress .left {
+        color: #fff;
+        font-size: 12px;
+        position: absolute;
+        left: 10px;
+        top: 0;
+        z-index: 2;
+    }
+    .progress .right {
+        color: #fff;
+        font-size: 12px;
+        position: absolute;
+        right: 15px;
+        top: 0;
+        z-index: 2;
+    }
+    .progress .progressBtn {
+        position: absolute;
+        left: 0;
+        top: 0;
+        height: 13px;
+        background: -webkit-linear-gradient(left, #8bbdff, #5078cb); /* Safari 5.1 - 6.0 */
+        background: -o-linear-gradient(left, #8bbdff, #5078cb); /* Opera 11.1 - 12.0 */
+        background: -moz-linear-gradient(left, #8bbdff, #5078cb); /* Firefox 3.6 - 15 */
+        background: linear-gradient(left, #8bbdff, #5078cb); /* 标准的语法 */
+    }
+</style>

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

@@ -503,8 +503,8 @@
         <div class="oder01">
             <ul ng-class="{'active': changeBillStatusFlag}">
                 <li ng-class="{'active': tab == 'buyer_invoice' && !changeBillStatusFlag}"><a ng-click="changeBillStatusFlag = false" ui-sref="buyer_invoice">发票信息</a></li>
-                <li ng-class="{'active': tab == 'buyer_no_invoice'}"><a ui-sref="buyer_no_invoice">待开票订单</a></li>
-                <li ng-class="{'active': tab == 'buyer_invoice-record'}"><a ui-sref="buyer_invoice-record">开票记录</a></li>
+                <!--<li ng-class="{'active': tab == 'buyer_no_invoice'}"><a ui-sref="buyer_no_invoice">待开票订单</a></li>-->
+                <!--<li ng-class="{'active': tab == 'buyer_invoice-record'}"><a ui-sref="buyer_invoice-record">开票记录</a></li>-->
             </ul>
         </div>
         <div style="background: #f5f5f5; height: 11px" ng-if="!changeBillStatusFlag"></div>

+ 198 - 52
src/main/webapp/resources/view/usercenter/forstore/buyer_invoice_record.html

@@ -40,12 +40,9 @@
         color: #666;
         border-bottom: 1px solid #dae5fd;
         border-right: 1px solid #dae5fd;
-        height: 50px;
         vertical-align: middle;
         text-align: center;
-        overflow: hidden;
-        text-overflow: ellipsis;
-        white-space: nowrap;
+
     }
     .invoice-com-tab tbody>tr>td a.invoice-detail{
         display: block;
@@ -166,6 +163,62 @@
     .oder01 ul li.active:after{
         display: block
     }
+
+    .clearboth::after, .clearboth::before {
+        clear: both;
+        zoom: 1;
+        content: ' ';
+        overflow: hidden;
+        display: block;
+        visibility: hidden;
+    }
+    .pull-left {
+        float: left
+    }
+    .pull-right {
+        float: right
+    }
+    .w50 {
+        width: 50%;
+        margin-bottom: 5px;
+    }
+    .w35 {
+        width: 35%;
+    }
+    .w65 {
+        width: 65%;
+    }
+    .w100 {
+        width: 100%;
+        margin-bottom: 5px;
+    }
+    .overhidden {
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+    }
+    .name {
+        margin-right: 10px;
+    }
+    .marginLeft {
+        max-height: 60px;
+        overflow-y: auto;
+    }
+    .marginLeft p {
+        font-size: 14px;
+    }
+    .marginLeft p a {
+        color: #3f84f6 !important;
+    }
+    .tbpadding {
+        padding: 10px;
+        padding-bottom: 5px;
+    }
+    .fixedImg {
+        position: absolute;
+        right: 0;
+        top: 0;
+    }
 </style>
 <!--右侧主体部分-->
 <div class="user_right fr u_c_invoice">
@@ -173,9 +226,10 @@
     <div class="ticket_record oder">
         <div class="oder01">
             <ul>
-                <li ng-class="{'active': tab == 'buyer_invoice'}"><a ui-sref="buyer_invoice">发票信息</a></li>
-                <li ng-class="{'active': tab == 'buyer_no_invoice'}"><a ui-sref="buyer_no_invoice">待开票订单</a></li>
-                <li ng-class="{'active': tab == 'buyer_invoice-record'}"><a ui-sref="buyer_invoice-record">开票记录</a></li>
+                <!--<li ng-class="{'active': tab == 'buyer_invoice'}"><a ui-sref="buyer_invoice">发票信息</a></li>-->
+                <li ng-class="{'active': tab == 'buyer_no_invoice'}"><a ui-sref="buyer_no_invoice">待申请</a></li>
+                <li ng-class="{'active': tab == 'buyer_invoice'}"><a href="user#/invoiceRecord/101">待卖家开票</a></li>
+                <li ng-class="{'active': tab == 'buyer_invoice-record'}"><a href="user#/invoiceRecord/102">已开票</a></li>
             </ul>
         </div>
         <!--开票记录-->
@@ -190,64 +244,156 @@
                 <table class="invoice-com-tab table" ng-table="billRecordTableParam">
                     <thead>
                         <tr>
-                            <th width="100">申请时间</th>
-                            <th width="140">商家名称</th>
-                            <th width="190">订单号</th>
-                            <th width="120">可开票金额(¥)</th>
-                            <th width="60" class="select-line">
-                                <select class="select-adder form-control" ng-model="invoiceType" ng-change="changeInvoiceType(invoiceType)">
-                                    <option value="">类型</option>
-                                    <option value="1206">普票</option>
-                                    <option value="1205">专票</option>
-                                </select>
-                            </th>
-                            <th width="115">发票抬头</th>
-                            <th width="65">收票人</th>
-                            <th width="120">联系电话</th>
-                            <th width="90">
-                                <select class="select-adder form-control" style="width: 60px;" ng-model="status" ng-change="changeStatus(status)">
-                                    <option value="">状态</option>
-                                    <option value="101">待开票</option>
-                                    <option value="102">已开票</option>
-                                </select>
-                            </th>
+                            <th width="600">开票信息</th>
+                            <th width="400">收票信息</th>
                         </tr>
+                        <!--<tr>-->
+                            <!--<th width="100">申请时间</th>-->
+                            <!--<th width="140">商家名称</th>-->
+                            <!--<th width="190">订单号</th>-->
+                            <!--<th width="120">可开票金额(¥)</th>-->
+                            <!--<th width="60" class="select-line">-->
+                                <!--<select class="select-adder form-control" ng-model="invoiceType" ng-change="changeInvoiceType(invoiceType)">-->
+                                    <!--<option value="">类型</option>-->
+                                    <!--<option value="1206">普票</option>-->
+                                    <!--<option value="1205">专票</option>-->
+                                <!--</select>-->
+                            <!--</th>-->
+                            <!--<th width="115">发票抬头</th>-->
+                            <!--<th width="65">收票人</th>-->
+                            <!--<th width="120">联系电话</th>-->
+                            <!--<th width="90">-->
+                                <!--<select class="select-adder form-control" style="width: 60px;" ng-model="status" ng-change="changeStatus(status)">-->
+                                    <!--<option value="">状态</option>-->
+                                    <!--<option value="101">待开票</option>-->
+                                    <!--<option value="102">已开票</option>-->
+                                <!--</select>-->
+                            <!--</th>-->
+                        <!--</tr>-->
                     </thead>
-                    <tbody>
+                    <tbody >
                         <tr ng-repeat="item in billData">
-                            <td ng-bind="item.createTime | date : 'yyyy-MM-dd'" title="{{item.createTime | date : 'yyyy-MM-dd'}}"></td>
-                            <td><a ng-href="{{'store/' + item.storeid}}" ng-bind="item.sellername" target="_blank" title="{{item.sellername}}"></a></td>
-                            <td>
-                                <a ng-href="user#/order/detail/{{orderid | EncryptionFilter}}"
-                                   ng-repeat="orderid in item.orderids.split(',')"
-                                   ng-bind="orderid"
-                                   title='{{orderid}}' target="_blank" class="invoice-detail"></a>
-                            </td>
-                            <td ng-bind="item.price" title="{{item.price}}"></td>
-                            <td style="padding: 0;">
-                                <span ng-bind="item.invoicetype==1206?'普票':'专票'"></span>
-                                <b ng-click="lookInvoiceInfo(item)" class="invoice-info">开票信息</b>
-                            </td>
-                            <td ng-bind="item.invoicetitle" title="{{item.invoicetitle}}"></td>
-                            <td ng-bind="item.receiverName" title="{{item.receiverName}}"></td>
-                            <td ng-bind="item.recTel" title="{{item.recTel}}"></td>
-                            <td>
-                                <span ng-bind="item.status==101?'待开票':'已开票'" ng-class="{'blue':item.status==101}"></span>
+                            <td colspan="2" style="position: relative">
+                                <div class="clearboth tbpadding" >
+                                    <div class="pull-left clearboth w65" style="margin-bottom: 0px">
+                                        <div class="list clearboth pull-left" style="width: 50%">
+                                            <div class="clearboth w100">
+                                                <div class="pull-left name">发票抬头: </div>
+                                                <div class="pull-left marginLeft overhidden" title="{{item.invoicetitle}}" style="max-width: 224px">{{item.invoicetitle}}</div>
+                                            </div>
+                                            <div class="clearboth w100">
+                                                <div class="pull-left name">卖家: </div>
+                                                <div class="pull-left marginLeft overhidden" style="max-width: 250px">
+                                                    <a ng-href="{{'store/' + item.storeid}}" ng-bind="item.sellername" target="_blank" ></a>
+                                                </div>
+                                            </div>
+                                            <div class="clearboth w100">
+                                                <div class="pull-left name">开票金额: </div>
+                                                <div class="pull-left marginLeft overhidden" title="{{item.price}}" style="max-width: 224px">{{'¥' + item.price || '-'}}</div>
+                                            </div>
+                                            <div class="clearboth w100" ng-if="item.invoicetype === 1206">
+                                                <div class="pull-left name">订单号: </div>
+                                                <div class="pull-left marginLeft" style="max-width: 224px">
+                                                    <p ng-repeat="orderid in item.orderids"><a target="_blank"  ng-href="user#/order/detail/{{orderid | EncryptionFilter}}">{{orderid}}</a></p>
+                                                </div>
+                                            </div>
+                                            <div class="clearboth w100" ng-if="item.invoicetype === 1205">
+                                                <div class="pull-left name">单位电话: </div>
+                                                <div class="pull-left marginLeft" title="{{item.billInfo.companyPhone}}">{{item.billInfo.companyPhone || '-'}}</div>
+                                            </div>
+                                            <div class="clearboth w100" ng-if="item.invoicetype === 1205">
+                                                <div class="pull-left name">单位地址: </div>
+                                                <div class="pull-left marginLeft" style="max-width: 224px;text-align: left;white-space: normal;word-break: break-all;" title="{{item.billInfo.companyAddress}}">{{item.billInfo.companyAddress || '-'}}</div>
+                                            </div>
+                                        </div>
+                                        <div class="pull-left list clearboth" style="width: 50%">
+                                            <div class="clearboth w100" ng-if="item.invoicetype === 1205">
+                                                <div class="pull-left name">税务登记号: </div>
+                                                <div class="pull-left marginLeft overhidden" title="{{item.billInfo.companyTaxNumber}}" style="max-width: 205px;">{{item.billInfo.companyTaxNumber || '-'}}</div>
+                                            </div>
+                                            <div class="clearboth w100" ng-if="item.invoicetype === 1205">
+                                                <div class="pull-left name">开户银行: </div>
+                                                <div class="pull-left marginLeft overhidden" title="{{item.billInfo.bankName}}" style="max-width: 224px">{{item.billInfo.bankName || '-'}}</div>
+                                            </div>
+                                            <div class="clearboth w100" ng-if="item.invoicetype === 1205">
+                                                <div class="pull-left name">开户银行账号: </div>
+                                                <div class="pull-left marginLeft overhidden" title="{{item.billInfo.bankAccount}}" style="max-width: 200px">{{item.billInfo.bankAccount || '-'}}</div>
+                                            </div>
+                                            <div class="clearboth w100" ng-if="item.invoicetype === 1205">
+                                                <div class="pull-left name">订单号: </div>
+                                                <div class="pull-left marginLeft" style="max-width: 224px">
+                                                    <p ng-repeat="orderid in item.orderids"><a target="_blank"  ng-href="user#/order/detail/{{orderid | EncryptionFilter}}">{{orderid}}</a></p>
+                                                </div>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="pull-right w35 clearboth" style="margin-bottom: 0px">
+                                        <div class="pull-left w100 clearboth">
+                                            <div class="pull-left name">申请开票时间: </div>
+                                            <div class="pull-left marginLeft">{{item.createTime | date : 'yyyy-MM-dd HH:mm:ss'}}</div>
+                                        </div>
+                                        <div class="pull-left w100 clearboth">
+                                            <div class="pull-left name">收票人: </div>
+                                            <div class="pull-left marginLeft overhidden" style="width: 234px;text-align: left" title="{{item.receiverName}}">{{item.receiverName || '-'}}</div>
+                                        </div>
+                                        <div class="pull-left w100 clearboth">
+                                            <div class="pull-left name">联系电话: </div>
+                                            <div class="pull-left marginLeft">{{item.recTel || '-'}}</div>
+                                        </div>
+                                        <div class="pull-left w100 clearboth">
+                                            <div class="pull-left name">收票地址: </div>
+                                            <div class="pull-left marginLeft" style="max-width: 224px;text-align: left;white-space: normal;word-break: break-all;">{{item.invoiceAddress || '-'}}</div>
+                                        </div>
+                                    </div>
+                                    <div class="fixedImg">
+                                        <!--item.invoicetype==1206?'普票':'专票'-->
+                                        <img src="static/img/user/images/invoice-nor.png" ng-if="item.invoicetype == 1206" width="41"/>
+                                        <img src="static/img/user/images/invoice-spec.png" ng-if="item.invoicetype == 1205" width="41"/>
+                                    </div>
+                                </div>
                             </td>
                         </tr>
                         <tr class="record-num" ng-if="billData.length > 0">
-                            <td colspan="10">
+                            <td colspan="2" style="height: 50px;">
                                 <span class="count-tip">显示 <span ng-bind="$$kdnData.start"></span>-<span ng-bind="$$kdnData.end"></span> 条,共 <span ng-bind="$$kdnData.totalElements"></span> 条</span>
                             </td>
                         </tr>
                     </tbody>
+                    <!--<tbody>-->
+                        <!--<tr ng-repeat="item in billData">-->
+                            <!--<td ng-bind="item.createTime | date : 'yyyy-MM-dd'" title="{{item.createTime | date : 'yyyy-MM-dd'}}"></td>-->
+                            <!--<td><a ng-href="{{'store/' + item.storeid}}" ng-bind="item.sellername" target="_blank" title="{{item.sellername}}"></a></td>-->
+                            <!--<td>-->
+                                <!--<a ng-href="user#/order/detail/{{orderid | EncryptionFilter}}"-->
+                                   <!--ng-repeat="orderid in item.orderids.split(',')"-->
+                                   <!--ng-bind="orderid"-->
+                                   <!--title='{{orderid}}' target="_blank" class="invoice-detail"></a>-->
+                            <!--</td>-->
+                            <!--<td ng-bind="item.price" title="{{item.price}}"></td>-->
+                            <!--<td style="padding: 0;">-->
+                                <!--<span ng-bind="item.invoicetype==1206?'普票':'专票'"></span>-->
+                                <!--<b ng-click="lookInvoiceInfo(item)" class="invoice-info">开票信息</b>-->
+                            <!--</td>-->
+                            <!--<td ng-bind="item.invoicetitle"  ></td>-->
+                            <!--<td ng-bind="item.receiverName" title="{{item.receiverName}}"></td>-->
+                            <!--<td ng-bind="item.recTel" title="{{item.recTel}}"></td>-->
+                            <!--<td>-->
+                                <!--<span ng-bind="item.status==101?'待开票':'已开票'" ng-class="{'blue':item.status==101}"></span>-->
+                            <!--</td>-->
+                        <!--</tr>-->
+                        <!--<tr class="record-num" ng-if="billData.length > 0">-->
+                            <!--<td colspan="10">-->
+                                <!--<span class="count-tip">显示 <span ng-bind="$$kdnData.start"></span>-<span ng-bind="$$kdnData.end"></span> 条,共 <span ng-bind="$$kdnData.totalElements"></span> 条</span>-->
+                            <!--</td>-->
+                        <!--</tr>-->
+                    <!--</tbody>-->
                     <tbody class="no-record-list" ng-if="billData.length <= 0 || !billData">
-                    <tr class="height200">
-                    <td colspan="9" style="border: #fff 1px solid"><img src="static/img/all/empty-cart.png"><span class="f14">暂无开票记录</span></td>
-                    </tr>
+                        <tr class="height200">
+                            <td colspan="9" style="border: #fff 1px solid"><img src="static/img/all/empty-cart.png"><span class="f14">暂无开票记录</span></td>
+                        </tr>
                     </tbody>
                 </table>
             </div>
         </div>
     </div>
-</div>
+</div>

+ 69 - 24
src/main/webapp/resources/view/usercenter/forstore/buyer_no_invoice.html

@@ -55,7 +55,7 @@
     font-size: 14px;
     color: #666;
     border-bottom: 1px solid #dae5fd;
-    border-right: 1px solid #dae5fd;
+    /*border-right: 1px solid #dae5fd;*/
     height: 40px;
     vertical-align: middle;
     text-align: center;
@@ -83,10 +83,10 @@
     border: none;
 }
     /*全选*/
-.table .check-act input{
+.check-act input{
     display: none;
 }
-.table .check-act label{
+.check-act label{
     width: 12px;
     height: 12px;
     display: inline-block;
@@ -94,27 +94,39 @@
     position: relative;
     top: 7px;
 }
-.table .check-act label{
+.check-act label{
     background-position: -48px 0;
 }
-.table .check-act input:checked + label{
+.check-act input:checked + label{
     background-position: -31px 0;
 }
+.ng-table-pager::after {
+    content: ' ';
+    clear: both;
+    display: block;
+    visibility: hidden;
+    zoom: 1;
+}
 .apply-btn{
-    width: 100%;
-    margin: 0 auto;
+    z-index: 10;
+    /*margin: 30px 0;*/
     text-align: center;
-    margin: 30px 0;
+    position: fixed;
+    width: 1026px;
+    bottom: 0;
+    background: #e0dedf;
+    height: 60px;
 }
 .apply-btn button{
-    width: 80px;
-    height: 26px;
-    line-height: 26px;
+    width: 116px;
     text-align: center;
     font-size: 14px;
     color: #fff;
     background: #5078cb;
     border: none;
+    float: right;
+    height: 100%;
+
 }
 .invoice-search{
     width: 1000px;
@@ -160,6 +172,9 @@ body div.ng-table-pager a.page-a {
     #checkAll[disabled] + label {
         cursor: not-allowed;
     }
+    #checkAll2[disabled] + label {
+        cursor: not-allowed;
+    }
 }
 /**/
 .no-invoice .no-invoice-content .empty{
@@ -208,6 +223,14 @@ body div.ng-table-pager a.page-a {
 .oder01 ul li.active:after{
     display: block
 }
+.clearboth::after, .clearboth::before {
+    clear: both;
+    zoom: 1;
+    content: ' ';
+    overflow: hidden;
+    display: block;
+    visibility: hidden;
+}
 </style>
 <!--右侧主体部分-->
 <div class="user_right fr u_c_invoice">
@@ -215,9 +238,10 @@ body div.ng-table-pager a.page-a {
     <div class="ticket_record oder">
         <div class="oder01">
             <ul>
-                <li ng-class="{'active': tab == 'buyer_invoice'}"><a ui-sref="buyer_invoice">发票信息</a></li>
-                <li ng-class="{'active': tab == 'buyer_no_invoice'}"><a ui-sref="buyer_no_invoice">待开票订单</a></li>
-                <li ng-class="{'active': tab == 'buyer_invoice-record'}"><a ui-sref="buyer_invoice-record">开票记录</a></li>
+                <!--<li ng-class="{'active': tab == 'buyer_invoice'}"><a ui-sref="buyer_invoice">发票信息</a></li>-->
+                <li ng-class="{'active': tab == 'buyer_no_invoice'}"><a ui-sref="buyer_no_invoice">待申请</a></li>
+                <li ng-class="{'active': tab == 'buyer_invoice'}"><a href="user#/invoiceRecord/101">待卖家开票</a></li>
+                <li ng-class="{'active': tab == 'buyer_invoice-record'}"><a href="user#/invoiceRecord/102">已开票</a></li>
             </ul>
         </div>
         <!--未开票-->
@@ -231,12 +255,12 @@ body div.ng-table-pager a.page-a {
             </div>
             <div class="invoice-search">
                 <div class="fr">
-                    <input type="text" ng-keydown="enterEvent($event)" class="form-control" ng-model="keyword" placeholder="商家名称/订单号"/>
+                    <input type="text" ng-keydown="enterEvent($event)" class="form-control" ng-model="keyword" placeholder="卖家/物料名称/订单号/收票人/联系电话"/>
                     <button ng-click="searchByKeyword()">搜索</button>
                 </div>
             </div>
             <div class="no-invoice-content">
-                <table class="invoice-com-tab table" ng-table="orderBillTableParam">
+                <table class="invoice-com-tab table" ng-table="orderBillTableParam" >
                     <thead>
                         <tr>
                             <th width="80">
@@ -245,9 +269,10 @@ body div.ng-table-pager a.page-a {
                                     <label for="checkAll"></label>
                                 </lable>
                                 全选</th>
-                            <th width="120">商家名称</th>
-                            <th width="250">订单号</th>
-                            <th width="200">可开票金额(¥)</th>
+                            <th width="250">卖家</th>
+                            <th width="120">可开票金额(¥)</th>
+                            <th width="200">订单号</th>
+                            <th width="120">时间</th>
                         </tr>
                     </thead>
                     <tbody>
@@ -258,14 +283,17 @@ body div.ng-table-pager a.page-a {
                                     <label for={{$index+1}}></label>
                                 </lable>
                             </td>
-                            <td><a ng-href="{{'store/' + item.storeid}}" ng-bind="item.storeName" target="_blank"></a></td>
+                            <td><a ng-href="{{'store/' + item.storeid}}" ng-bind="item.storeName" target="_blank" style="color:#3f84f6"></a></td>
+                            <td ng-bind="item.price"></td>
                             <td>
-                                <a ng-href="user#/order/detail/{{orderid | EncryptionFilter}}" ng-repeat="orderid in item.orderid.split(',')" ng-bind="orderid" target="_blank" style="display: block;"></a>
+                                <a  style="color:#3f84f6" ng-href="user#/order/detail/{{orderid | EncryptionFilter}}" ng-repeat="orderid in item.orderid.split(',')" ng-bind="orderid" target="_blank" style="display: block;"></a>
+                            </td>
+                            <td ng-bind="item.paytime | date: 'yyyy-MM-dd HH:mm'">
+
                             </td>
-                            <td ng-bind="item.price"></td>
                         </tr>
                         <tr class="record-num" ng-if="orderData.length > 0">
-                            <td colspan="4">
+                            <td colspan="5">
                                 <span class="count-tip">显示 <span ng-bind="$$kdnData.start"></span>-<span ng-bind="$$kdnData.end"></span> 条,共 <span ng-bind="$$kdnData.totalElements"></span> 条</span>
                             </td>
                         </tr>
@@ -281,7 +309,24 @@ body div.ng-table-pager a.page-a {
                     </div>
                 </div>
             </div>
-            <div class="apply-btn" ng-style="$$kdnData.totalElements>10?'margin-top: 100px':''" ng-if="orderData.length > 0">
+            <div class="apply-btn clearboth" ng-style="$$kdnData.totalElements>10?'margin-top: 100px':''" ng-if="orderData.length > 0" style="position: static">
+                <div style="float:left;line-height: 60px;font-size: 14px;margin-left: 20px">
+                    <lable class="check-act">
+                        <input type="checkbox" id="checkAll4" ng-disabled="!orderData || orderData.length == 0" ng-click="onAllChecked()" ng-checked="isAllCheck"/>
+                        <label for="checkAll4"></label>
+                    </lable>
+                    全选
+                </div>
+                <button ng-click="applyInvoice()">申请开票</button>
+            </div>
+            <div class="apply-btn" id="applyBtn" ng-style="$$kdnData.totalElements>10?'margin-top: 100px':''" ng-if="orderData.length > 0">
+                <div style="float:left;line-height: 60px;font-size: 14px;margin-left: 20px">
+                    <lable class="check-act">
+                        <input type="checkbox" id="checkAll2" ng-disabled="!orderData || orderData.length == 0" ng-click="onAllChecked()" ng-checked="isAllCheck"/>
+                        <label for="checkAll2"></label>
+                    </lable>
+                    全选
+                </div>
                 <button ng-click="applyInvoice()">申请开票</button>
             </div>
         </div>

+ 373 - 56
src/main/webapp/resources/view/usercenter/forstore/pay_center.html

@@ -105,26 +105,26 @@
 
 	}
 	.pay_record .ticket_record_list dl span:nth-child(1){
-		width:17.03%!important;
+		width:26%!important;
 	}
 	.pay_record .ticket_record_list dl span:nth-child(2){
-		width:15.73%!important;
+		width:20%!important;
 	}
 	.pay_record .ticket_record_list dl span:nth-child(3){
-		width:23.84%!important;
+		width:16%!important;
 	}
 	.pay_record .ticket_record_list dl span:nth-child(4){
-		width:8%!important;
+		width:10%!important;
 	}
 	.pay_record .ticket_record_list dl span:nth-child(5){
-		width:9.65%!important;
+		width:8%!important;
 	}
 	.pay_record .ticket_record_list dl span:nth-child(6){
-		width:12.12%!important;
+		width:20%!important;
 	}
-	.pay_record .ticket_record_list dl span:nth-child(7){
+	/*.pay_record .ticket_record_list dl span:nth-child(7){
 		width:13.52%!important;
-	}
+	}*/
 	.pay_record .ticket_record_list dl span .select-adder {
 		opacity: 1;
 		width: 64px;
@@ -141,19 +141,30 @@
 		font-size: 14px;
 		background: #89aefa;
 	}
+	.pay_record .ticket_record_list dl dd {
+		border: 1px solid #dae5fd;
+		border-top: none;
+	}
 	.pay_record .ticket_record_list dl dd:hover {
 		background: #f1f5ff;
 	}
-	.pay_record .ticket_record_list dl dd span:first-child{
+	/*.pay_record .ticket_record_list dl dd span:first-child{
 		border-left: 1px solid #dae5fd;
 	}
+	.pay_record .ticket_record_list dl dd span:first-child{
+		border-left: 1px solid #dae5fd;
+	}*/
 	.pay_record .ticket_record_list dl dd span {
 		color: #666;
-		border-right: 1px solid #dae5fd;
-		border-bottom: 1px solid #dae5fd;
+	/*	border-right: 1px solid #dae5fd;
+		border-bottom: 1px solid #dae5fd;*/
+	}
+	.pay_record .ticket_record_list dl dd .link {
+		color: #3f84f6;
 	}
 	.ticket_record_list{
 		background: none;
+		margin: 0!important;
 	}
 	ul.pagination.ng-table-pagination > li > a > span {
 		height: 17px;
@@ -436,29 +447,118 @@
 	.empty .empty-info i{
 		margin-right:5px;
 	}
+	.check-filter {
+		height: 80px;
+		line-height: 30px;
+		padding-left: 22px;
+		margin-top: 0;
+	}
+	.check-filter .sreach input {
+		width: 147px;
+	}
+	.check-filter .radio-block {
+		display: inline-block;
+		font-size: 14px;
+		width: 33.3%;
+	}
+	.check-filter .radio-block.date-radio {
+		width: 46%;
+	}
+	.check-filter .radio-block .com-check-radio {
+		font-weight: normal;
+		color: #666;
+		margin-right: 13px;
+	}
+	.check-filter .radio-block .com-check-radio:last-child {
+		margin-right: 0;
+	}
+
 </style>
 <!--右侧主体部分-->
 <div class="user_right fr" id="pay_center">
 	<!--支付中心-->
 	<div class="pay_record oder">
-		<div class="oder01" style="margin-bottom: 16px;">
+		<!--<div class="oder01" style="margin-bottom: 16px;">
 			<ul>
 				<li ng-class="{'active' : status=='pay-history'}" ng-click="toggleStatus('pay-history')"><a href="javascript:void(0)">交易记录</a></li>
 				<li ng-class="{'active' : status=='pay-info'}" ng-click="toggleStatus('pay-info')"><a href="javascript:void(0)">付款账户</a></li>
 			</ul>
-		</div>
+		</div>-->
 		<!--支付中心列表-->
 		<div class="ticket_record_list">
 			<!-- 支付信息-->
 			<div class="tab" ng-show="status == 'pay-info'" style="display: inline-block;">
 				<div class="tab-header">
 					<span>已设置的账户信息</span>
-					<div ng-click="editAccount()" ng-if="$$bankInfo.totalElements < 20">
+					<div ng-click="editAccount()" ng-if="$$bankInfo.totalElements < 20 && accounts.length > 0">
 						<i class="fa fa-plus-circle"></i>
 						<span>新增账户</span>
 					</div>
 				</div>
-				<table class="user-account-table table" ng-table="bankInfoTableParams">
+				<div class="new-accounts" ng-if="accounts && accounts.length <= 0">
+					<form name="myForm" novalidate>
+						<div class="row">
+							<div class="col-sm-3"><em class="colorRed">*</em>开户银行</div>
+							<div class="col-sm-5" style="position:relative;">
+								<input name="bankname" style="padding:12px 6px;width:90%;border-right:transparent!important;border-radius:3px 0 0 3px;" ng-model="account.bankname" ng-change="checkAccount(1)" autocomplete="off" type="text" class="form-control" placeholder="请选择开户银行" required ng-keydown="onKeyUp()" ng-focus="getItemFocus()" ng-blur="onItemBlur()">
+								<i class="select-adder" ng-click="showList()"></i>
+								<ul class="select-down" ng-if="showBankFrame && matchData" id="ulContent">
+									<li ng-click="fitBankToAccount(bank)" ng-repeat="bank in resultList" ng-class="{'active': $index==selectIndex}">{{bank}}</li>
+								</ul>
+							</div>
+							<div class="col-sm-4">
+								<p ng-if="account.bankname && !matchData">请填写正确的开户银行</p>
+								<p ng-if="myForm.bankname.$touched && myForm.bankname.$invalid">开户银行不能为空</p>
+							</div>
+						</div>
+						<div class="row">
+							<div class="col-sm-3"><em class="colorRed">*</em>开户支行</div>
+							<div class="col-sm-5">
+								<input name="branchname" type="text" class="form-control" ng-model="account.branchname" ng-change="checkAccount(2)" autocomplete="off"
+									   placeholder="例如:侨香支行" ng-required="true">
+							</div>
+							<div class="col-sm-4">
+								<p ng-if="account.branchname && branchPattError">请填写正确的开户支行</p>
+								<p ng-if="account.branchname && !branchPattError && branchError">请勿超过20个字</p>
+								<p ng-if="myForm.branchname.$touched && myForm.branchname.$invalid">开户支行不能为空</p>
+							</div>
+						</div>
+						<div class="row">
+							<div class="col-sm-3"><em class="colorRed">*</em>银行账号</div>
+							<div class="col-sm-5">
+								<input name="number" ng-model="account.number" type="text" class="form-control"
+									   placeholder="请填写银行账号" ng-required="true" ng-change="checkAccount(3)" autocomplete="off">
+							</div>
+							<div class="col-sm-4">
+								<p ng-if="account.number && numberPattError">请填写正确的银行账号</p>
+								<p ng-if="account.number && !numberPattError && numberError">请勿超过30个字符</p>
+								<p ng-if="account.number && !numberPattError && !numberError && repeatError">该银行账号已存在</p>
+								<p ng-if="myForm.number.$touched && myForm.number.$invalid">银行账号不能为空</p>
+							</div>
+						</div>
+						<div class="row">
+							<div class="col-sm-3"><em class="colorRed">*</em>开户名称</div>
+							<div class="col-sm-5">
+								<input name="accountname" type="text" class="form-control" ng-model="account.accountname"
+									   placeholder="请填写开户人姓名或企业名称" ng-required="true" ng-change="checkAccount(4)" autocomplete="off">
+							</div>
+							<div class="col-sm-4">
+								<p ng-if="account.accountname && nameError">请勿超过50个字</p>
+								<p ng-if="myForm.accountname.$touched && myForm.accountname.$invalid">开户名称不能为空</p>
+							</div>
+						</div>
+						<div class="row">
+							<div class="col-sm-9 col-sm-offset-2" style="position: relative;left: -10px;"><em class="colorRed">*</em>为保障您的资金安全,账户信息加密显示且不可修改,只能删除后重新提交。</div>
+						</div>
+					</form>
+					<div class="row">
+						<div class="col-sm-12" style="text-align: center;">
+							<button class="btn" ng-click="cancel()" style="background: #acabab;color:#fff">取消</button>
+							<button class="btn" type="submit" ng-click="confirm()" style="background: #5078cb;color:#fff">确定</button>
+						</div>
+					</div>
+				</div>
+				<table ng-if="accounts.length !== 0" class="user-account-table table" ng-table="bankInfoTableParams">
 					<thead>
 						<th>开户银行</th>
 						<th >开户支行</th>
@@ -480,14 +580,6 @@
 						</tr>
 					</tbody>
 				</table>
-				<div class="empty" ng-if="accounts.length == 0">
-					<p class="empty-img">
-						<img src="static/img/all/empty-cart.png">
-					</p>
-					<div class="empty-info">
-						<p class="grey f14">暂无账户信息</p>
-					</div>
-				</div>
 				<div style="text-align: right;margin-right:25px;margin-top:-30px;" ng-if="accounts.length !== 0">
 					<span class="count-tip">显示 {{$$bankInfo.start}}-{{$$bankInfo.end}} 条,共 <em ng-bind="$$bankInfo.totalElements" style="color: #5078cb">2506</em> 条</span>
 				</div>
@@ -507,9 +599,73 @@
 			<!--支付记录-->
 			<div class="tab" ng-show="status == 'pay-history'" style="display: inline-block">
 				<!--搜索时间筛选-->
-				<div class="screen">
+				<div class="screen check-filter">
+					<div class="radio-block">
+						交易方式:
+						<label class="com-check-radio">
+							<input type="radio" id="methodAll" name="method" ng-click="setFilters('remitteeType', 'ALL')" ng-checked="remitteeType == 'ALL'">
+							<label for="methodAll"></label>
+							全部
+						</label>
+						<label class="com-check-radio">
+							<input type="radio" id="forSeller" name="method" ng-click="setFilters('remitteeType', 'PAIDTOVENDOR')" ng-checked="remitteeType == 'PAIDTOVENDOR'">
+							<label for="forSeller"></label>
+							卖家收款
+						</label>
+						<label class="com-check-radio">
+							<input type="radio" id="forPlatform" name="method" ng-click="setFilters('remitteeType', 'PAIDTOPLATFORM')" ng-checked="remitteeType == 'PAIDTOPLATFORM'">
+							<label for="forPlatform"></label>
+							平台代收
+						</label>
+					</div>
+					<div class="radio-block">
+					交易币种:
+					<label class="com-check-radio">
+						<input type="radio" id="currencyAll" name="currency" ng-click="setFilters('currency', 'ALL')" ng-checked="currency == 'ALL'">
+						<label for="currencyAll"></label>
+						全部
+					</label>
+					<label class="com-check-radio">
+						<input type="radio" id="RMB" name="currency" ng-click="setFilters('currency', 'RMB')" ng-checked="currency == 'RMB'">
+						<label for="RMB"></label>
+						RMB
+					</label>
+					<label class="com-check-radio">
+						<input type="radio" id="USD" name="currency" ng-click="setFilters('currency', 'USD')" ng-checked="currency == 'USD'">
+						<label for="USD"></label>
+						USD
+					</label>
+				</div>
+					<div class="radio-block date-radio">
+						交易时间:
+						<label class="com-check-radio">
+							<input type="radio" id="dateAll" name="date" ng-click="setFilters('dateArea', 'ALL')" ng-checked="dateArea == 'ALL'">
+							<label for="dateAll"></label>
+							全部
+						</label>
+						<label class="com-check-radio">
+							<input type="radio" id="oneMonth" name="date" ng-click="setFilters('dateArea', 'oneMonth')" ng-checked="dateArea == 'oneMonth'">
+							<label for="oneMonth"></label>
+							一个月
+						</label>
+						<label class="com-check-radio">
+							<input type="radio" id="threeMonth" name="date" ng-click="setFilters('dateArea', 'threeMonth')" ng-checked="dateArea == 'threeMonth'">
+							<label for="threeMonth"></label>
+							三个月
+						</label>
+						<label class="com-check-radio">
+							<input type="radio" id="sixMonth" name="date" ng-click="setFilters('dateArea', 'sixMonth')" ng-checked="dateArea == 'sixMonth'">
+							<label for="sixMonth"></label>
+							六个月
+						</label>
+						<label class="com-check-radio">
+							<input type="radio" id="autoMonth" name="date" ng-click="setFilters('dateArea', 'autoMonth')" ng-checked="dateArea == 'autoMonth'">
+							<label for="autoMonth"></label>
+							自定义
+						</label>
+					</div>
 					<div class="sreach fr">
-						<div class="date fl">
+						<div class="date fl" ng-show="dateArea == 'autoMonth'">
 							<div class="data-input">
 								<input id="start" type="text" ng-model="startDate" readonly="readonly"
 									   class="form-control select-adder" placeholder="起始时间"
@@ -544,55 +700,43 @@
 				</div>
 				<dl>
 					<dt>
-						<span>时间</span>
+						<span>卖家</span>
 						<span>订单号</span>
-						<span>商家名称</span>
-						<span>
+						<!--<span>
 							<select class="form-control select-adder" ng-model="currency" ng-change="filterLoad()">
 								<option value="ALL">币种</option>
 								<option value="RMB">RMB</option>
 								<option value="USD">USD</option>
 							</select>
-						</span>
-						<span>金额</span>
-						<span>
+						</span>-->
+						<span>订单金额</span>
+						<!--<span>
 							<select class="form-control select-adder" style="width: 90px" ng-model="paytype" ng-change="filterLoad()">
 								<option value="ALL">交易方式</option>
 								<option value="1102">线上支付</option>
 								<option value="1103">线下支付</option>
 							</select>
-						</span>
+						</span>-->
+						<span>交易方式</span>
 						<span>
-							<select class="form-control select-adder" style="width: 90px">
-								<option>状态</option>
-								<option value="1">支付成功</option>
-							</select>
+							状态
 						</span>
+						<span>时间</span>
 					</dt>
 					<dd ng-repeat="tradeRecord in tradeRecordPage">
-						<span ng-bind="tradeRecord.paytime | date : 'yyyy-MM-dd HH:mm:ss'">2017.01.18</span>
-						<span><a ng-bind="tradeRecord.orderid" ng-href="user#/order/detail/{{tradeRecord.orderid | EncryptionFilter}}">20170116001</a></span>
-						<span ng-bind="tradeRecord.sellername">优软科技</span>
-						<span ng-bind="tradeRecord.currencyName"></span>
-						<span style="text-align:left;padding-left:5px;">
-							<!--<i class="fa fa-plus" style="color:#f51c24"></i>-->
-							<i class="fa fa-minus" style="color:#1da902"></i>
+						<span title="{{tradeRecord.sellername}}" ng-bind="tradeRecord.sellername"></span>
+						<span><a class="link" ng-bind="tradeRecord.orderid" ng-href="user#/order/detail/{{tradeRecord.orderid | EncryptionFilter}}"></a></span>
+						<span>
+							{{tradeRecord.currencyName == 'USD' ? '$' : '¥'}}
                             <em style="color: #323232;" ng-bind="tradeRecord.ensurePrice | formateNumber : 2"></em></span>
 						</span>
 						<span>
-							<b ng-if="tradeRecord.paytype == 1102">线上支付</b>
-							<b ng-if="tradeRecord.paytype == 1103">线下支付</b>
+							<b ng-if="tradeRecord.remitteeType == 'PAIDTOVENDOR'">卖家收款</b>
+							<b ng-if="tradeRecord.remitteeType == 'PAIDTOPLATFORM'">平台代收</b>
 						</span>
 						<span><b>支付成功</b></span>
+						<span ng-bind="tradeRecord.paytime | date : 'yyyy-MM-dd HH:mm:ss'"></span>
 					</dd>
-					<!--<dd>
-						<span>2017.01.18</span>
-						<span><em>20170116001</em></span>
-						<span>¥8888.52</span>
-						<span>支付宝</span>
-						<span>12345678909</span>
-						<span><em>退款成功</em></span>
-					</dd>-->
 					<dd ng-if="!tradeRecordPage || tradeRecordPage.length == 0" class="tab-dd" style="height: 125px; padding: 30px;">
 						<div class="col-xs-offset-3 col-xs-3">
 							<img src="static/img/all/empty-cart.png">
@@ -628,8 +772,181 @@
                 </div>
 			</div>
 		</div>
-		<!--<div class="pay_banner">
-			<a href="#"><img src="static/img/user/images/pay_banner.jpg"/></a>
-		</div>-->
 	</div>
 </div>
+
+<!--  模态框 -->
+<div class="view-box" ng-if="showAddFrame">
+	<div class="box">
+		<div class="new-accounts">
+			<h2>新增账户信息</h2>
+			<span style="color:#cbcaca;width:10px;height:10px;position:absolute;top:15px;right:15px;"><i class="fa fa-close" ng-click="cancel()"></i></span>
+			<form name="myForm" novalidate>
+				<div class="row">
+					<div class="col-sm-3"><em class="colorRed">*</em>开户银行</div>
+					<div class="col-sm-5" style="position:relative;">
+						<input name="bankname" style="padding:12px 6px;width:90%;border-right:transparent!important;border-radius:3px 0 0 3px;" ng-model="account.bankname" ng-change="checkAccount(1)" autocomplete="off" type="text" class="form-control" placeholder="请选择开户银行" required ng-keydown="onKeyUp()" ng-focus="getItemFocus()" ng-blur="onItemBlur()">
+						<i class="select-adder" ng-click="showList()"></i>
+						<ul class="select-down" ng-if="showBankFrame && matchData" id="ulContent">
+							<li ng-click="fitBankToAccount(bank)" ng-repeat="bank in resultList" ng-class="{'active': $index==selectIndex}">{{bank}}</li>
+						</ul>
+					</div>
+					<div class="col-sm-4">
+						<p ng-if="account.bankname && !matchData">请填写正确的开户银行</p>
+						<p ng-if="myForm.bankname.$touched && myForm.bankname.$invalid">开户银行不能为空</p>
+					</div>
+				</div>
+				<div class="row">
+					<div class="col-sm-3"><em class="colorRed">*</em>开户支行</div>
+					<div class="col-sm-5">
+						<input name="branchname" type="text" class="form-control" ng-model="account.branchname" ng-change="checkAccount(2)" autocomplete="off"
+							   placeholder="例如:侨香支行" ng-required="true">
+					</div>
+					<div class="col-sm-4">
+						<p ng-if="account.branchname && branchPattError">请填写正确的开户支行</p>
+						<p ng-if="account.branchname && !branchPattError && branchError">请勿超过20个字</p>
+						<p ng-if="myForm.branchname.$touched && myForm.branchname.$invalid">开户支行不能为空</p>
+					</div>
+				</div>
+				<div class="row">
+					<div class="col-sm-3"><em class="colorRed">*</em>银行账号</div>
+					<div class="col-sm-5">
+						<input name="number" ng-model="account.number" type="text" class="form-control"
+							   placeholder="请填写银行账号" ng-required="true" ng-change="checkAccount(3)" autocomplete="off">
+					</div>
+					<div class="col-sm-4">
+						<p ng-if="account.number && numberPattError">请填写正确的银行账号</p>
+						<p ng-if="account.number && !numberPattError && numberError">请勿超过30个字符</p>
+						<p ng-if="account.number && !numberPattError && !numberError && repeatError">该银行账号已存在</p>
+						<p ng-if="myForm.number.$touched && myForm.number.$invalid">银行账号不能为空</p>
+					</div>
+				</div>
+				<div class="row">
+					<div class="col-sm-3"><em class="colorRed">*</em>开户名称</div>
+					<div class="col-sm-5">
+						<input name="accountname" type="text" class="form-control" ng-model="account.accountname"
+							   placeholder="请填写开户人姓名或企业名称" ng-required="true" ng-change="checkAccount(4)" autocomplete="off">
+					</div>
+					<div class="col-sm-4">
+						<p ng-if="account.accountname && nameError">请勿超过50个字</p>
+						<p ng-if="myForm.accountname.$touched && myForm.accountname.$invalid">开户名称不能为空</p>
+					</div>
+				</div>
+				<div class="row">
+					<div class="col-sm-10 col-sm-offset-2" style="position: relative;left: -43px;"><em class="colorRed">*</em>为保障您的资金安全,账户信息加密显示且不可修改,只能删除后重新提交。</div>
+				</div>
+			</form>
+			<div class="row">
+				<div class="col-sm-12" style="text-align: center;">
+					<button class="btn" ng-click="cancel()" style="background: #acabab;color:#fff">取消</button>
+					<button class="btn" type="submit" ng-click="confirm()" style="background: #5078cb;color:#fff">确定</button>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+
+<style>
+	.view-box{
+		position: fixed;
+		top: 0;
+		right: 0;
+		bottom: 0;
+		left: 0;
+		z-index: 1040;
+		background: rgba(0,0,0,.5);
+	}
+	.view-box .box{
+		width:645px;
+		height: 450px;
+		position: absolute;
+		left: 0;
+		right: 0;
+		top: 0;
+		bottom: 0;
+		margin: auto;
+		box-shadow: 0 0 3px #888;
+		background: #fff;
+		border-radius: 5px;
+	}
+	.new-accounts{
+		font-size: 14px;
+		width: 100%;
+		position:relative;
+	}
+	.new-accounts .select-adder {
+		display:inline-block;
+		width:10%;
+		height:34px;
+		border:1px solid #ccc;
+		position:absolute;
+		right:0;
+		top:0;
+		border-radius:0 3px 3px 0;
+		border-left:transparent;
+	}
+	.new-accounts .select-down{
+		width:100%;
+		border:1px solid #89aefa;
+		border-radius:3px;
+		background: #fff;
+		max-height:230px;
+		overflow-y: scroll;
+		position:absolute;
+		top:34px;
+		left:0;
+		z-index:100;
+	}
+	.new-accounts .colorRed {
+		color: #f00;
+		font-size: 12px;
+		margin-right: 5px;
+	}
+	.new-accounts .select-down li{
+		line-height: 32px;
+		padding:6px;
+		padding-left:12px;
+
+	}
+	.new-accounts .select-down li:hover{
+		background: #89aefa;
+		color:#fff;
+		cursor:pointer;
+	}
+	.new-accounts .select-down li.active{
+		background: #89aefa;
+		color:#fff;
+		cursor:pointer;
+	}
+	.new-accounts h2{
+		width: 100%;
+		line-height: 45px;
+		padding-left: 20px;
+		font-size: 14px;
+		font-family: normal;
+		font-weight: bold;
+		border-bottom: #e5e5e5 1px solid;
+	}
+	.new-accounts .row{
+		margin: 15px 0 20px 0;
+		line-height: 34px;
+		font-size: 14px;
+	}
+	.new-accounts .row p{
+		color:#f00;
+	}
+	.new-accounts .col-sm-3{
+		text-align: right;
+	}
+	.new-accounts .col-sm-5{
+		padding:0;
+	}
+	.new-accounts .row label {
+		margin-left: 14px;
+	}
+	.btn:hover{
+		background: #5078cb !important;
+		border: #3f7ae3 1px solid;
+	}
+
+</style>

+ 68 - 9
src/main/webapp/resources/view/usercenter/forstore/seekPurchase.html

@@ -1017,8 +1017,8 @@
                 -->
             </div>
             <div class="sreach fr">
-                <span>求购筛选</span>
-                <select class="form-control select-adder vendor-type" ng-model="vendorType" ng-change="onVendorTypeChange(vendorType)">
+                <span ng-show="tab == 'waitOffer'">求购筛选</span>
+                <select ng-show="tab == 'waitOffer'" class="form-control select-adder vendor-type" ng-model="vendorType" ng-change="onVendorTypeChange(vendorType)">
                     <option value="all">全部</option>
                     <option value="self">未截止</option>
                     <option value="end">已截止</option>
@@ -1065,7 +1065,7 @@
                 <th width="260">品牌/物料名称</th>
                 <th width="260">型号/规格</th>
                 <th width="110">采购数量(PCS)</th>
-                <th width="120">状态/截止时间</th>
+                <th width="120">状态/截止{{tab == 'waitOffer' ? '时间' : '日期'}}</th>
                 <th width="140">操作</th>
             </tr>
             </thead>
@@ -1105,12 +1105,17 @@
                 </td>
                 <td>
                     <div class="row-wrap">
+                        <!--<div ng-bind="seek.endDate | date:'yyyy-MM-dd'"></div>
+                        <div class="date-bottom-item" ng-bind="seek.endDate | date:'HH:mm:ss'"></div>-->
                         <span ng-if="seek.offerAmount == 0" style="color:red;">待报价</span>
                         <span ng-if="seek.agreed == 0 && seek.offerAmount > 0">已报价</span>
                         <span ng-if="seek.agreed == 1" style="color:green;">已采纳</span>
-                        <div class="remain" ng-if="seek.remainingTime > 0">剩余&nbsp;<span ng-bind="getDay(seek.remainingTime)" ng-if="getDay(seek.remainingTime) > 0" class="red-text"></span><i ng-if="getDay(seek.remainingTime) > 0">&nbsp;天&nbsp;</i><span ng-if="getDay(seek.remainingTime) <= 0" ng-bind="getHours(seek.remainingTime)" class="red-text">5</span><i ng-if="getDay(seek.remainingTime) <= 0">&nbsp;小时</i></div>
-                        <div class="remain" ng-if="seek.remainingTime <= 0"><span>已截止</span></div>
-                        <div class="remain" ng-if="seek.remainingTime == null"><span>-</span></div>
+                        <div ng-if="tab == 'offered'" class="date-bottom-item" ng-bind="seek.endDate | date:'yyyy-MM-dd'"></div>
+                        <div ng-if="tab == 'waitOffer'">
+                            <div class="remain" ng-if="seek.remainingTime > 0">剩余&nbsp;<span ng-bind="getDay(seek.remainingTime)" ng-if="getDay(seek.remainingTime) > 0" class="red-text"></span><i ng-if="getDay(seek.remainingTime) > 0">&nbsp;天&nbsp;</i><span ng-if="getDay(seek.remainingTime) <= 0" ng-bind="getHours(seek.remainingTime)" class="red-text">5</span><i ng-if="getDay(seek.remainingTime) <= 0">&nbsp;小时</i></div>
+                            <div class="remain" ng-if="seek.remainingTime <= 0"><span>已截止</span></div>
+                            <div class="remain" ng-if="seek.remainingTime == null"><span>-</span></div>
+                        </div>
                     </div>
                 </td>
                 <td class="operate-seek">
@@ -1407,10 +1412,21 @@
             <tr ng-repeat="bom in $data">
                 <td ng-click="toBomdetail(bom.id)">
                     <img src="static/img/seekPurchase/Excel.png" alt="">
-                    <div>
+                    <div style="width:300px">
                         <p ng-bind="bom.remark"></p>
-                        <div>共 <span class="blue-text" ng-bind="bom.amount || 0"></span> 个产品<!--,<span class="red-text" ng-bind="bom.offerAmount || 0">10</span> 个有报价,<span class="red-text" ng-bind="bom.goodsAmount || 0">7</span> 个有现货--></div>
-                        <div ng-bind="bom.releaseDate | date:'yyyy-MM-dd HH:mm:ss'"></div>
+                        <div ng-bind="bom.date | date:'yyyy-MM-dd HH:mm:ss'">
+
+                        </div>
+                        <!--<div>共 <span class="blue-text" ng-bind="bom.amount || 0"></span> 个产品&lt;!&ndash;,<span class="red-text" ng-bind="bom.offerAmount || 0">10</span> 个有报价,<span class="red-text" ng-bind="bom.goodsAmount || 0">7</span> 个有现货&ndash;&gt;</div>-->
+                        <!--<div ng-bind="bom.releaseDate | date:'yyyy-MM-dd HH:mm:ss'"></div>-->
+                    </div>
+                    <div>
+                        <div class="progress">
+                            <div class="left">{{bom.quotedAmount}}</div>
+                            <div class="progressBtn" ng-style="{width: bom.quotedAmount / bom.amount * '100' + '%'}"></div>
+                            <div class="right" ng-if="bom.amount - bom.quotedAmount > 0">{{bom.amount - bom.quotedAmount}}</div>
+                        </div>
+                        <p>本单共<span>{{bom.amount}}</span>个产品,<span>{{bom.quotedAmount}}</span>个已报价</p>
                     </div>
                     <a class="fr">查看详情</a>
                 </td>
@@ -1496,4 +1512,47 @@
         display: block;
         cursor: auto;
     }
+    .progress {
+        width: 265px;
+        height: 13px;
+        line-height: 13px;
+        background: #d7d7d7;
+        border-radius: 13px;
+        overflow: hidden;
+        position: relative;
+        margin-bottom: 10px;
+    }
+    .progress ~ p {
+        font-size: 14px;
+        color: #333;
+    }
+    .progress ~ p span {
+        color: #fd7748
+    }
+    .progress .left {
+        color: #fff;
+        font-size: 12px;
+        position: absolute;
+        left: 10px;
+        top: 0;
+        z-index: 2;
+    }
+    .progress .right {
+        color: #fff;
+        font-size: 12px;
+        position: absolute;
+        right: 15px;
+        top: 0;
+        z-index: 2;
+    }
+    .progress .progressBtn {
+        position: absolute;
+        left: 0;
+        top: 0;
+        height: 13px;
+        background: -webkit-linear-gradient(left, #8bbdff, #5078cb); /* Safari 5.1 - 6.0 */
+        background: -o-linear-gradient(left, #8bbdff, #5078cb); /* Opera 11.1 - 12.0 */
+        background: -moz-linear-gradient(left, #8bbdff, #5078cb); /* Firefox 3.6 - 15 */
+        background: linear-gradient(left, #8bbdff, #5078cb); /* 标准的语法 */
+    }
 </style>

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

@@ -39,8 +39,8 @@
                 <div>
                     <li ng-class="{'active' : active == 'buyer_cart'}"><a  ui-sref="buyer_cart">购物车<em>(<span ng-bind="countCart || 0 | number"></span>)</em></a> </li>
                     <li ng-class="{'active' : active == 'buyer_order'}"><a  ui-sref="buyer_order">采购订单</a></li>
-                    <li ng-class="{'active' : active == 'pay_center'}"><a  ui-sref="pay_center">支付中心</a></li>
-                    <li ng-class="{'active' : active == 'buyer_invoice'}"><a  ui-sref="buyer_invoice">发票管理</a></li>
+                    <li ng-class="{'active' : active == 'buyer_pay_center'}"><a  ui-sref="pay_center">应付对账</a></li>
+                    <li ng-class="{'active' : active == 'buyer_invoice'}"><a  ui-sref="buyer_no_invoice">发票管理</a></li>
                 </div>
                 <!--<div ng-hide="!(userInfo.pwdEnable && userInfo.haveUserQuestion &&  userInfo.emailValidCode && userInfo.emailValidCode == 2)">-->
                     <!--<li ng-class="{'active' : active == 'buyer_order'}"><a  ui-sref="buyer_order">订单中心</a></li>-->

+ 1 - 1
src/main/webapp/resources/view/vendor/forstore/addExistUser.html

@@ -104,7 +104,7 @@
 				<input
 						type="text" class="form-control"
 						ng-keydown="onKeyDown($event, keyWord)"
-						ng-model="keyWord" placeholder="请输入UU号、手机号或邮箱" required/>
+						ng-model="keyWord" placeholder="请输入手机号或邮箱" required/>
 				<a class="default-btn" ng-click="searchUser(keyWord)" ng-disabled="searchForm.$invalid">搜索</a>
 			</div>
 		</form>

+ 264 - 91
src/main/webapp/resources/view/vendor/forstore/pay_center.html

@@ -175,22 +175,22 @@
         padding: 15px 0;
         margin: 0;
     }
-    .beizhu .col-md-1{
+    .beizhu .col-sm-1{
         width: 44px;
         padding: 0;
         margin-left: 30px;
     }
-    .beizhu .col-md-11{
+    .beizhu .col-sm-11{
         line-height: 20px;
         font-size: 12px;
     }
     .grey{
         color: #999;
     }
-    .beizhu .col-md-11 a{
+    .beizhu .col-sm-11 a{
         color: #5078cb;
     }
-    .beizhu .col-md-11 a:hover{
+    .beizhu .col-sm-11 a:hover{
         font-weight: 700;
         text-decoration: underline;
     }
@@ -432,25 +432,22 @@
 
     }
     .pay_record .ticket_record_list dl span:nth-child(1){
-        width:17.03%;
+        width:26%!important;
     }
     .pay_record .ticket_record_list dl span:nth-child(2){
-        width:15.73%;
+        width:20%!important;
     }
     .pay_record .ticket_record_list dl span:nth-child(3){
-        width:23.84%;
+        width:16%!important;
     }
     .pay_record .ticket_record_list dl span:nth-child(4){
-        width:8%;
+        width:10%!important;
     }
     .pay_record .ticket_record_list dl span:nth-child(5){
-        width:9.65%;
+        width:8%!important;
     }
     .pay_record .ticket_record_list dl span:nth-child(6){
-        width:12.12%;
-    }
-    .pay_record .ticket_record_list dl span:nth-child(7){
-        width:13.52%;
+        width:20%!important;
     }
     .pay_record .ticket_record_list dl span .select-adder {
         opacity: 1;
@@ -471,30 +468,50 @@
         white-space:nowrap;
         overflow: hidden;
     }
+    .pay_record .ticket_record_list dl dd {
+        border: 1px solid #dae5fd;
+        border-top: none;
+    }
     .pay_record .ticket_record_list dl dd:hover {
         background: #f1f5ff;
     }
-    .pay_record .ticket_record_list dl dd span:first-child{
-        border-left: 1px solid #dae5fd;
-    }
     .pay_record .ticket_record_list dl dd span {
         color: #666;
-        border-right: 1px solid #dae5fd;
-        border-bottom: 1px solid #dae5fd;
+    }
+    .pay_record .ticket_record_list dl dd .link {
+        color: #3f84f6;
     }
     .ticket_record_list{
         background: none;
+        margin: 0!important;
     }
     .pay_record .ticket_record_list .total{
         width:98%;
-        height:39px;
-        background: #e6eefe;
-        display:inline-flex;
-        justify-content: space-around;
-        align-items: center;
+        height:60px;
+        background: #e0dedf;
         margin:0 10px;
+        font-size: 14px;
+    }
+    .pay_record .ticket_record_list .total .fl {
+        color: #333;
+        margin-left: 25px;
+        line-height: 60px;
+    }
+    .pay_record .ticket_record_list .total .fr {
+        line-height: 30px;
+        margin-right: 13px;
+    }
+    .pay_record .ticket_record_list .total .fr p {
+        font-size: 14px;
+        text-align: right;
+    }
+    .pay_record .ticket_record_list .total .fr p:first-child em {
+        color: #fd0303;
+    }
+    .pay_record .ticket_record_list .total .fr p:last-child em {
+        color: #15b262;
     }
-    .pay_record .ticket_record_list dl div.total>span{
+   /* .pay_record .ticket_record_list dl div.total>span{
         width:200px;
     }
     .pay_record .ticket_record_list dl div.total>span:nth-child(1) em{
@@ -511,7 +528,7 @@
     }
     .pay_record .ticket_record_list dl div.total>b{
         color:#abc4f7;
-    }
+    }*/
 
 
     #pay_center .tab .tab-header {
@@ -626,25 +643,99 @@
     .oder01 ul li.active:after{
         display: block
     }
+    .check-filter {
+        height: 80px;
+        line-height: 30px;
+        padding-left: 22px;
+        margin-top: 0;
+    }
+    .check-filter .sreach input {
+        width: 147px;
+    }
+    .check-filter .radio-block {
+        display: inline-block;
+        font-size: 14px;
+        width: 33.3%;
+    }
+    .check-filter .radio-block.date-radio {
+        width: 46%;
+    }
+    .check-filter .radio-block .com-check-radio {
+        font-weight: normal;
+        color: #666;
+        margin-right: 13px;
+    }
+    .check-filter .radio-block .com-check-radio:last-child {
+        margin-right: 0;
+    }
+    .com-check-radio label {
+        margin-bottom: 5px;
+    }
 </style>
 <!--右侧主体部分-->
 <div class="user_right fr" id="pay_center">
     <!--支付中心-->
     <div class="pay_record oder">
-        <div class="oder01">
+      <!--  <div class="oder01">
             <ul>
                 <li ng-click="setTab('paymentRecord')" ng-class="{'active' : tab == 'paymentRecord'}"><a href="javascript:void(0)">交易记录</a></li>
                 <li ng-click="setTab('accountTab')" ng-class="{'active' : tab == 'accountTab'}"><a href="javascript:void(0)">收款帐户</a></li>
             </ul>
-        </div>
+        </div>-->
         <!--支付中心列表-->
         <div class="ticket_record_list">
             <!-- 交易记录-->
             <div class="tab" ng-show="tab == 'paymentRecord'" style="display: inline-block">
                 <!--搜索时间筛选-->
-                <div class="screen" style="background: #f5f8fe;height: 40px;margin-bottom: 15px;margin-top: 5px;padding-top: 4px;padding-right: 11px;">
+                <div class="screen check-filter" style="background: #f5f8fe;margin-bottom: 15px;margin-top: 5px;padding-top: 4px;padding-right: 11px;">
+                    <div class="radio-block" style="display: block;">
+                        交易方式:
+                        <label class="com-check-radio">
+                            <input type="radio" id="methodAll" name="method" ng-click="setFilters('remitteeType', 'ALL')" ng-checked="remitteeType == 'ALL'">
+                            <label for="methodAll"></label>
+                            全部
+                        </label>
+                        <label class="com-check-radio">
+                            <input type="radio" id="forSeller" name="method" ng-click="setFilters('remitteeType', 'PAIDTOVENDOR')" ng-checked="remitteeType == 'PAIDTOVENDOR'">
+                            <label for="forSeller"></label>
+                            买家付款
+                        </label>
+                        <label class="com-check-radio">
+                            <input type="radio" id="forPlatform" name="method" ng-click="setFilters('remitteeType', 'PLATFORMPAIDTOVENDOR')" ng-checked="remitteeType == 'PLATFORMPAIDTOVENDOR'">
+                            <label for="forPlatform"></label>
+                            平台代付
+                        </label>
+                    </div>
+                    <div class="radio-block date-radio">
+                        交易时间:
+                        <label class="com-check-radio">
+                            <input type="radio" id="dateAll" name="date" ng-click="setFilters('dateArea', 'ALL')" ng-checked="dateArea == 'ALL'">
+                            <label for="dateAll"></label>
+                            全部
+                        </label>
+                        <label class="com-check-radio">
+                            <input type="radio" id="oneMonth" name="date" ng-click="setFilters('dateArea', 'oneMonth')" ng-checked="dateArea == 'oneMonth'">
+                            <label for="oneMonth"></label>
+                            一个月
+                        </label>
+                        <label class="com-check-radio">
+                            <input type="radio" id="threeMonth" name="date" ng-click="setFilters('dateArea', 'threeMonth')" ng-checked="dateArea == 'threeMonth'">
+                            <label for="threeMonth"></label>
+                            三个月
+                        </label>
+                        <label class="com-check-radio">
+                            <input type="radio" id="sixMonth" name="date" ng-click="setFilters('dateArea', 'sixMonth')" ng-checked="dateArea == 'sixMonth'">
+                            <label for="sixMonth"></label>
+                            六个月
+                        </label>
+                        <label class="com-check-radio">
+                            <input type="radio" id="autoMonth" name="date" ng-click="setFilters('dateArea', 'autoMonth')" ng-checked="dateArea == 'autoMonth'">
+                            <label for="autoMonth"></label>
+                            自定义
+                        </label>
+                    </div>
                     <div class="sreach fr">
-                        <div class="date fl">
+                        <div  ng-show="dateArea == 'autoMonth'" class="date fl">
                             <div class="data-input">
                                 <input id="start" type="text" ng-model="startDate" readonly="readonly"
                                        class="form-control select-adder" placeholder="起始时间"
@@ -680,45 +771,47 @@
 
                 <dl>
                     <dt>
-                        <span>时间</span>
+                        <span>买家</span>
                         <span>订单号</span>
-                        <span>买家名称</span>
-                        <span>币种</span>
-                        <span>金额</span>
-                        <span>
-							<select class="form-control select-adder" style="width: 90px">
-								<option>交易方式</option>
-								<option value="1">线下支付</option>
-							</select>
-						</span>
-                        <span style="width:13.52%">
-							<select class="form-control select-adder" style="width: 90px">
-								<option>状态</option>
-								<option value="1">收款成功</option>
-							</select>
-						</span>
+                        <span>订单金额</span>
+                        <span>交易方式</span>
+                        <span>状态</span>
+                        <span>时间</span>
                     </dt>
                     <dd ng-repeat="record in bankTransRecore">
-                        <span ng-bind="record.transferTime | date : 'yyyy-MM-dd HH:mm:ss'">2017.01.18</span>
-                        <span><a style="color: #666;" ng-bind="record.orderid" ng-href="vendor#/purchase/detail/{{record.puid | EncryptionFilter}}">20170116001</a></span>
-                        <span ng-bind="record.buyerentername || record.buyername">优软科技</span>
-                        <span ng-bind="record.currencyName">RMB</span>
-                        <span style="text-align:left;padding-left:5px;">
-                            <i class="fa fa-plus" style="color:#f51c24"></i>
-                            <!--<i class="fa fa-minus" style="color:#1da902"></i>-->
-                            {{record.total}}</span>
-                        <span>线下付款</span>
+                        <span title="{{record.buyerentername || record.buyername}}" ng-bind="record.buyerentername || record.buyername">优软科技</span>
+                        <span><a class="link" style="color: #666;" ng-bind="record.orderid" ng-href="vendor#/purchase/detail/{{record.puid | EncryptionFilter}}">20170116001</a></span>
+                        <span title="{{(record.currencyName == 'USD' ? '$' : '¥') + record.total}}">{{(record.currencyName == 'USD' ? '$' : '¥') + record.total}}</span>
+                        <span>{{record.type == 'PAIDTOVENDOR' ? '买家付款' : '平台代付'}}</span>
                         <span>收款成功</span>
+                        <span ng-bind="record.transferTime | date : 'yyyy-MM-dd HH:mm:ss'">2017.01.18</span>
                     </dd>
                     <div class="total" ng-if="bankTransRecore && bankTransRecore.length > 0">
-                        <span>收入总计&nbsp;  <em><i class="fa fa-yen" ng-if="currencySymbol.indexOf('RMB') > -1"></i>
+                     <!--   <span>收入总计&nbsp;  <em><i class="fa fa-yen" ng-if="currencySymbol.indexOf('RMB') > -1"></i>
                             <i class="fa fa-usd" ng-if="currencySymbol.indexOf('USD') > -1"></i>{{totalPrice}}</em></span>
                         <b>|</b>
                         <span>支出总计&nbsp;  <em><i class="fa fa-yen" ng-if="currencySymbol.indexOf('RMB') > -1"></i>
                             <i class="fa fa-usd" ng-if="currencySymbol.indexOf('USD') > -1"></i>0</em></span>
                         <b>|</b>
                         <span>结余&nbsp;<em><i class="fa fa-yen" ng-if="currencySymbol.indexOf('RMB') > -1"></i>
-                            <i class="fa fa-usd" ng-if="currencySymbol.indexOf('USD') > -1"></i>{{totalPrice}}(共计{{totalElements}}笔交易)</em></span>
+                            <i class="fa fa-usd" ng-if="currencySymbol.indexOf('USD') > -1"></i>{{totalPrice}}(共计{{totalElements}}笔交易)</em></span>-->
+                        <div class="fl">共计{{totalElements}}笔交易</div>
+                        <div class="fr">
+                            <p>已收总计:
+                                <em>
+                                    <i class="fa fa-yen" ng-if="currencySymbol.indexOf('RMB') > -1"></i>
+                                    <i class="fa fa-usd" ng-if="currencySymbol.indexOf('USD') > -1"></i>
+                                    {{totalPrice}}
+                                </em>
+                            </p>
+                            <p>结余:
+                                <em>
+                                    <i class="fa fa-yen" ng-if="currencySymbol.indexOf('RMB') > -1"></i>
+                                    <i class="fa fa-usd" ng-if="currencySymbol.indexOf('USD') > -1"></i>
+                                    {{totalPrice}}
+                                </em>
+                            </p>
+                        </div>
                     </div>
 
                     <dd ng-if="!bankTransRecore || bankTransRecore.length == 0" class="tab-dd" style="height: 125px; padding: 30px;">
@@ -755,12 +848,12 @@
             <div class="tab" ng-show="tab == 'accountTab'" style="display: inline-block;">
                 <div class="tab-header">
                     <span>已设置的账户信息</span>
-                    <div ng-click="newAccount()" ng-if="$$bankInfo.totalElements < 20">
+                    <div ng-click="newAccount()" ng-if="$$bankInfo.totalElements < 20 && accounts.length > 0">
                         <i class="fa fa-plus-circle"></i>
                         <span>新增账户</span>
                     </div>
                 </div>
-                <table class="user-account-table table" ng-table="bankInfoTableParams" style="margin-bottom:45px;table-layout: fixed">
+                <table class="user-account-table table" ng-table="bankInfoTableParams" style="margin-bottom:45px;table-layout: fixed" ng-if="accounts && accounts.length > 0">
                     <thead>
                     <tr>
                         <th >开户银行</th>
@@ -792,7 +885,87 @@
                         </td>
                     </tr>
                 </table>
-                <p style="text-align:right;margin-right:28px;margin-top:-35px;">显示{{$$bankInfo.start}}-{{$$bankInfo.end}} 条,共 {{$$bankInfo.totalElements}}条</p>
+                <div class="add-count" ng-if="accounts && accounts.length <= 0">
+                    <form name="myForm">
+                        <div class="row">
+                            <div class="col-sm-3"><em class="colorRed">*</em>开户银行</div>
+                            <div class="col-sm-5" style="position:relative;">
+                                <input name="bankname" ng-keydown="onKeyUp()" ng-model="account.bankname" ng-change="checkAccount(1)" class="form-control" autocomplete="off" type="text" placeholder="例如:中国工商银行侨香支行" style="padding:12px 6px;width:91%;border-right:transparent;border-radius:3px 0 0 3px;" ng-focus="getItemFocus()" ng-blur="onItemBlur()" autocomplete="off">
+                                <i class="select-adder" ng-click="showList()" style="display:inline-block;width:10%;height:34px;box-shadow: inset 0 1px 1px rgba(0,0,0,.075);position:absolute;top:0;right:0;z-index:10;border:1px solid #ccc;border-radius:0 3px 3px 0;border-left:transparent"></i>
+                                <ul id="ulContent" class="select-down" ng-if="showBankFrame && matchData">
+                                    <li ng-click="fitBankToAccount(bank)" ng-repeat="bank in resultList" ng-class="{'active': $index==selectIndex}">{{bank}}</li>
+                                </ul>
+                            </div>
+                            <div class="col-sm-4">
+                                <p ng-if="account.bankname && !matchData">请填写正确的开户银行</p>
+                                <p ng-if="myForm.bankname.$touched && !account.bankname">开户银行不能为空</p>
+                            </div>
+                        </div>
+                        <div class="row">
+                            <div class="col-sm-3"><em class="colorRed">*</em>开户支行</div>
+                            <div class="col-sm-5">
+                                <input name="branchname" ng-model="account.branchname" ng-change="checkAccount(2)" class="form-control" autocomplete="off" type="text" placeholder="例如:侨香支行">
+                            </div>
+                            <div class="col-sm-4">
+                                <p ng-if="account.branchname && branchPattError">请填写正确的开户支行</p>
+                                <p ng-if="account.branchname && !branchPattError && branchError">请勿超过20个字</p>
+                                <p ng-if="myForm.branchname.$touched && !account.branchname">开户支行不能为空</p>
+                            </div>
+                        </div>
+                        <div class="row">
+                            <div class="col-sm-3"><em class="colorRed">*</em>银行账号</div>
+                            <div class="col-sm-5">
+                                <input name="number" ng-model="account.number" ng-change="checkAccount(3)" class="form-control" autocomplete="off" type="text" placeholder="请填写银行账号">
+                            </div>
+                            <div class="col-sm-4">
+                                <p ng-if="account.number && numberPattError">请填写正确的银行账号</p>
+                                <p ng-if="account.number && !numberPattError && numberError">请勿超过30个字符</p>
+                                <p ng-if="account.number && !numberPattError && !numberError && repeatError">该银行账号已存在</p>
+                                <p ng-if="myForm.number.$touched && !account.number">银行账号不能为空</p>
+                            </div>
+                        </div>
+                        <div class="row">
+                            <div class="col-sm-3"><em class="colorRed">*</em>开户名称</div>
+                            <div class="col-sm-5">
+                                <input name="accountname" ng-model="account.accountname" ng-change="checkAccount(4)" class="form-control" autocomplete="off" type="text" placeholder="请填写开户人姓名或企业名称">
+                            </div>
+                            <div class="col-sm-4">
+                                <p ng-if="account.accountname && nameError">请勿超过50个字</p>
+                                <p ng-if="myForm.accountname.$touched && !account.accountname">开户名称不能为空</p>
+                            </div>
+                        </div>
+                        <div class="row">
+                            <div class="col-sm-3"><em class="colorRed">*</em>上传开户许可证</div>
+                            <div class="col-sm-5 upload">
+                                <input type="text" readonly ng-model="account.attachUrl" class="form-control" style="width:70%;margin-right:10px;"/>
+                                <i>选择文件</i>
+                                <input type="file" class="upload01" ng-change="uploadChange()" ng-file-select ng-model="account.files" required ng-multiple="false" />
+                            </div>
+                            <div class="col-sm-4">
+                                <p ng-if="fileError">请上传可支持的格式</p>
+                                <p ng-if="!fileError && fileLegError">请勿超过3M</p>
+                            </div>
+                        </div>
+                    </form>
+                    <div class="row">
+                        <button style="width:0;height:0;background: transparent;border:0;"></button>
+                        <div class="col-sm-12" style="text-align: center;">
+                            <button class="btn" ng-click="cancelAdd()" style="background: #acabab;color:#fff">取消</button>
+                            <button class="btn" type="submit" ng-click="ensureAddAccount()" style="background: #5078cb;color:#fff">确定</button>
+                        </div>
+                    </div>
+                    <div class="beizhu row">
+                        <div class="col-sm-1" style="color: #f00;line-height: 20px;">*声明:</div>
+                        <div class="col-sm-10">
+                            1. 此账户为卖家收款账户,请仔细核对信息内容,若由信息错误造成的损失,优软商城不承担赔偿责任。<br/>
+                            2. 卖家只能有唯一一个“使用中”的收款账户,新增账户审核通过后,原账户将自动失效。<br/>
+                            3. 如您的企业名称、开户银行及账号变更,您须在优软商城开展资金结算前进行更正,否则发生转账错误优软商城不承担赔偿责任。<br/>
+                            4. 更多的条款请阅读<a href="help/helpDetail/51" style="color: #5078cb;" target="_blank">《优软商城代收代付协议》</a> 。<br/>
+                            5. 附件仅支持JPG、PNG、PDF格式,大小超过3M。
+                        </div>
+                    </div>
+                </div>
+                <p ng-if="accounts && accounts.length > 0" style="text-align:right;margin-right:28px;margin-top:-35px;">显示{{$$bankInfo.start}}-{{$$bankInfo.end}} 条,共 {{$$bankInfo.totalElements}}条</p>
                 <div class="com-del-box" ng-if="showReuseFrame">
                     <div class="title">
                         <a ng-click="cancelReuse()"><i class="fa fa-close fa-lg"></i></a>
@@ -818,36 +991,36 @@
             <span style="color:#cbcaca;width:10px;height:10px;position:absolute;top:15px;right:15px;"><i class="fa fa-close" ng-click="cancelAdd()"></i></span>
             <form name="myForm">
                 <div class="row">
-                    <div class="col-md-3"><em class="colorRed">*</em>开户银行</div>
-                    <div class="col-md-5" style="position:relative;">
+                    <div class="col-sm-3"><em class="colorRed">*</em>开户银行</div>
+                    <div class="col-sm-5" style="position:relative;">
                         <input name="bankname" ng-keydown="onKeyUp()" ng-model="account.bankname" ng-change="checkAccount(1)" class="form-control" autocomplete="off" type="text" placeholder="例如:中国工商银行侨香支行" style="padding:12px 6px;width:91%;border-right:transparent;border-radius:3px 0 0 3px;" ng-focus="getItemFocus()" ng-blur="onItemBlur()" autocomplete="off">
-                        <i class="select-adder" ng-click="showList()" style="display:inline-block;width:25px;height:34px;position:absolute;top:0;right:0;z-index:10;border:1px solid #ddd;border-radius:0 3px 3px 0;border-left:transparent"></i>
+                        <i class="select-adder" ng-click="showList()" style="display:inline-block;width:10%;height:34px;box-shadow: inset 0 1px 1px rgba(0,0,0,.075);position:absolute;top:0;right:0;z-index:10;border:1px solid #ccc;border-radius:0 3px 3px 0;border-left:transparent"></i>
                         <ul id="ulContent" class="select-down" ng-if="showBankFrame && matchData">
                             <li ng-click="fitBankToAccount(bank)" ng-repeat="bank in resultList" ng-class="{'active': $index==selectIndex}">{{bank}}</li>
                         </ul>
                     </div>
-                    <div class="col-md-4">
+                    <div class="col-sm-4">
                         <p ng-if="account.bankname && !matchData">请填写正确的开户银行</p>
                         <p ng-if="myForm.bankname.$touched && !account.bankname">开户银行不能为空</p>
                     </div>
                 </div>
                 <div class="row">
-                    <div class="col-md-3"><em class="colorRed">*</em>开户支行</div>
-                    <div class="col-md-5">
+                    <div class="col-sm-3"><em class="colorRed">*</em>开户支行</div>
+                    <div class="col-sm-5">
                         <input name="branchname" ng-model="account.branchname" ng-change="checkAccount(2)" class="form-control" autocomplete="off" type="text" placeholder="例如:侨香支行">
                     </div>
-                    <div class="col-md-4">
+                    <div class="col-sm-4">
                         <p ng-if="account.branchname && branchPattError">请填写正确的开户支行</p>
                         <p ng-if="account.branchname && !branchPattError && branchError">请勿超过20个字</p>
                         <p ng-if="myForm.branchname.$touched && !account.branchname">开户支行不能为空</p>
                     </div>
                 </div>
                 <div class="row">
-                    <div class="col-md-3"><em class="colorRed">*</em>银行账号</div>
-                    <div class="col-md-5">
+                    <div class="col-sm-3"><em class="colorRed">*</em>银行账号</div>
+                    <div class="col-sm-5">
                         <input name="number" ng-model="account.number" ng-change="checkAccount(3)" class="form-control" autocomplete="off" type="text" placeholder="请填写银行账号">
                     </div>
-                    <div class="col-md-4">
+                    <div class="col-sm-4">
                         <p ng-if="account.number && numberPattError">请填写正确的银行账号</p>
                         <p ng-if="account.number && !numberPattError && numberError">请勿超过30个字符</p>
                         <p ng-if="account.number && !numberPattError && !numberError && repeatError">该银行账号已存在</p>
@@ -855,23 +1028,23 @@
                     </div>
                 </div>
                 <div class="row">
-                    <div class="col-md-3"><em class="colorRed">*</em>开户名称</div>
-                    <div class="col-md-5">
+                    <div class="col-sm-3"><em class="colorRed">*</em>开户名称</div>
+                    <div class="col-sm-5">
                         <input name="accountname" ng-model="account.accountname" ng-change="checkAccount(4)" class="form-control" autocomplete="off" type="text" placeholder="请填写开户人姓名或企业名称">
                     </div>
-                    <div class="col-md-4">
+                    <div class="col-sm-4">
                         <p ng-if="account.accountname && nameError">请勿超过50个字</p>
                         <p ng-if="myForm.accountname.$touched && !account.accountname">开户名称不能为空</p>
                     </div>
                 </div>
                 <div class="row">
-                    <div class="col-md-3"><em class="colorRed">*</em>上传开户许可证</div>
-                    <div class="col-md-5 upload">
+                    <div class="col-sm-3"><em class="colorRed">*</em>上传开户许可证</div>
+                    <div class="col-sm-5 upload">
                         <input type="text" readonly ng-model="account.attachUrl" class="form-control" style="width:70%;margin-right:10px;"/>
                         <i>选择文件</i>
                         <input type="file" class="upload01" ng-change="uploadChange()" ng-file-select ng-model="account.files" required ng-multiple="false" />
                     </div>
-                    <div class="col-md-4">
+                    <div class="col-sm-4">
                         <p ng-if="fileError">请上传可支持的格式</p>
                         <p ng-if="!fileError && fileLegError">请勿超过3M</p>
                     </div>
@@ -879,14 +1052,14 @@
             </form>
             <div class="row">
                 <button style="width:0;height:0;background: transparent;border:0;"></button>
-                <div class="col-md-12" style="text-align: center;">
+                <div class="col-sm-12" style="text-align: center;">
                     <button class="btn" ng-click="cancelAdd()" style="background: #acabab;color:#fff">取消</button>
                     <button class="btn" type="submit" ng-click="ensureAddAccount()" style="background: #5078cb;color:#fff">确定</button>
                 </div>
             </div>
             <div class="beizhu row">
-                <div class="col-md-1" style="color: #f00;line-height: 20px;">*声明:</div>
-                <div class="col-md-10">
+                <div class="col-sm-1" style="color: #f00;line-height: 20px;">*声明:</div>
+                <div class="col-sm-10">
                     1. 此账户为卖家收款账户,请仔细核对信息内容,若由信息错误造成的损失,优软商城不承担赔偿责任。<br/>
                     2. 卖家只能有唯一一个“使用中”的收款账户,新增账户审核通过后,原账户将自动失效。<br/>
                     3. 如您的企业名称、开户银行及账号变更,您须在优软商城开展资金结算前进行更正,否则发生转账错误优软商城不承担赔偿责任。<br/>
@@ -980,10 +1153,10 @@
     .add-count .row p{
         color:#f00;
     }
-    .add-count .col-md-3{
+    .add-count .col-sm-3{
         text-align: right;
     }
-    .add-count .col-md-5{
+    .add-count .col-sm-5{
        padding:0;
     }
     .add-count .row label{
@@ -997,28 +1170,28 @@
 
     .upload i {
         background: #ff8522;
-        width: 25%;
-        height: 22px;
+        width: 28%;
+        height: 34px;
         display: inline-block;
         text-align: center;
         color: #fff;
-        line-height: 22px;
+        line-height: 34px;
         font-size: 14px;
         position: absolute;
-        right:0;
-        top: 9px;
+        right: 0;
+        top: 0;
         cursor: pointer;
         border-radius: 3px;
     }
     .upload01 {
+        width: 28%;
         height: 34px;
         filter:alpha(opacity=0);
         -moz-opacity:0;
         opacity:0;
         position: absolute;
-        width: 80px;
-        left: 195px;
-        top: 2px;
+        right: 0;
+        top: 0;
     }
     .upload-btn{
         width: 100px;
@@ -1036,18 +1209,18 @@
         background: #ebebeb;
         border-radius: 0 0 5px 5px;
     }
-    .add-count .beizhu .col-md-1{
+    .add-count .beizhu .col-sm-1{
         padding: 0;
         font-size: 12px;
         line-height: 20px;
         text-align: right;
     }
-    .add-count .beizhu .col-md-10{
+    .add-count .beizhu .col-sm-10{
         line-height: 20px;
         font-size: 12px;
         padding:0;
     }
-    .add-count .beizhu .col-md-10 a:hover{
+    .add-count .beizhu .col-sm-10 a:hover{
         font-weight: 700;
         text-decoration: underline;
     }

+ 5 - 3
src/main/webapp/resources/view/vendor/forstore/purchaseOffer.html

@@ -689,7 +689,7 @@
                 <th width="245">品牌/物料名称</th>
                 <th width="245">型号/规格</th>
                 <th width="110">采购数量(PCS)</th>
-                <th width="130">剩余时间</th>
+                <th width="130">截止日期</th>
                 <th width="90">操作</th>
             </tr>
             </thead>
@@ -730,9 +730,11 @@
                         </div>
                     </div>
                 </td>
-                <td class="left-time" ng-if="seek.remainingTime > 0">剩余&nbsp;<span ng-bind="getDay(seek.remainingTime)" ng-if="getDay(seek.remainingTime) > 0" class="red-text"></span><i ng-if="getDay(seek.remainingTime) > 0">&nbsp;天&nbsp;</i><span ng-if="getDay(seek.remainingTime) <= 0" ng-bind="getHours(seek.remainingTime)" class="red-text">5</span><i ng-if="getDay(seek.remainingTime) <= 0">&nbsp;小时</i></td>
+                <td ng-bind="seek.endDate | date:'yyyy-MM-dd'">
+                </td>
+                <!--<td class="left-time" ng-if="seek.remainingTime > 0">剩余&nbsp;<span ng-bind="getDay(seek.remainingTime)" ng-if="getDay(seek.remainingTime) > 0" class="red-text"></span><i ng-if="getDay(seek.remainingTime) > 0">&nbsp;天&nbsp;</i><span ng-if="getDay(seek.remainingTime) <= 0" ng-bind="getHours(seek.remainingTime)" class="red-text">5</span><i ng-if="getDay(seek.remainingTime) <= 0">&nbsp;小时</i></td>
                 <td class="left-time" ng-if="seek.remainingTime <= 0"><span>已截止</span></td>
-                <td class="left-time" ng-if="seek.remainingTime == null"><span style="color: red;">-</span></td>
+                <td class="left-time" ng-if="seek.remainingTime == null"><span style="color: red;">-</span></td>-->
                 <td class="operate" ng-switch="seek.agreed" style="border-right: 1px solid #dae5fd">
                     <a ng-click="setLinkBoxIndex($index)">联系买家<img src="static/img/seekPurchase/link-buyer.png" alt=""></a>
                     <div class="is-say-price" ng-if="seek.agreed != 1 && seek.agreed != 0 || seek.replies">已报价 <img src="static/img/seekPurchase/check.png" alt="">

+ 353 - 86
src/main/webapp/resources/view/vendor/forstore/vendor-invoice.html

@@ -102,10 +102,10 @@
         border: none;
     }
     /*全选*/
-    .table .check-act input{
+    .check-act input{
         display: none;
     }
-    .table .check-act label{
+    .check-act label{
         width: 12px;
         height: 12px;
         display: inline-block;
@@ -113,27 +113,39 @@
         position: relative;
         top: 2px;
     }
-    .table .check-act label{
+    .check-act label{
         background-position: -48px 0;
     }
-    .table .check-act input:checked + label{
+    .check-act input:checked + label{
         background-position: -31px 0;
     }
+    .ng-table-pager::after {
+        content: ' ';
+        clear: both;
+        display: block;
+        visibility: hidden;
+        zoom: 1;
+    }
     .apply-btn{
-        width: 100%;
-        margin: 0 auto;
+        z-index: 10;
+        /*margin: 30px 0;*/
         text-align: center;
-        margin: 30px 0;
+        position: fixed;
+        width: 1026px;
+        bottom: 0;
+        background: #e0dedf;
+        height: 60px;
     }
     .apply-btn button{
-        width: 80px;
-        height: 26px;
-        line-height: 26px;
+        width: 116px;
         text-align: center;
         font-size: 14px;
         color: #fff;
         background: #5078cb;
         border: none;
+        float: right;
+        height: 100%;
+
     }
     .invoice-com-tab thead>tr>th.select-line{
         padding: 8px 0;
@@ -304,13 +316,69 @@
     .com_tab ul li.active:after{
         display: block
     }
+
+    .clearboth::after, .clearboth::before {
+        clear: both;
+        zoom: 1;
+        content: ' ';
+        overflow: hidden;
+        display: block;
+        visibility: hidden;
+    }
+    .pull-left {
+        float: left
+    }
+    .pull-right {
+        float: right
+    }
+    .w50 {
+        width: 50%;
+        margin-bottom: 5px;
+    }
+    .w35 {
+        width: 322px
+    }
+    .w65 {
+        width: 598px;
+    }
+    .w100 {
+        width: 100%;
+        margin-bottom: 5px;
+    }
+    .overhidden {
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+    }
+    .name {
+        margin-right: 10px;
+    }
+    .marginLeft {
+        max-height: 60px;
+        overflow-y: auto;
+    }
+    .marginLeft p {
+        font-size: 14px;
+    }
+    .marginLeft p a {
+        color: #3f84f6 !important;
+    }
+    .tbpadding {
+        padding: 10px;
+        padding-bottom: 5px;
+    }
+    .fixedImg {
+        position: absolute;
+        right: 0;
+        top: 0;
+    }
 </style>
 <div class="count user_right fr">
     <div class="count_center">
         <div class="com_tab">
             <ul class="fl">
-                <li ng-class="{'active': active == 'apply_invoice'}" ng-click="toggleTab('apply_invoice')"><a>买家开票申请</a></li>
-                <li ng-class="{'active': active == 'apply_record'}" ng-click="toggleTab('apply_record')"><a>开票记录</a></li>
+                <li ng-class="{'active': active == 'apply_invoice'}" ng-click="toggleTab('apply_invoice')"><a>待开票</a></li>
+                <li ng-class="{'active': active == 'apply_record'}" ng-click="toggleTab('apply_record')"><a>开票</a></li>
             </ul>
         </div>
     </div>
@@ -324,7 +392,7 @@
         </div>
         <div class="invoice-search">
             <div class="fr">
-                <input type="text" ng-keydown="enterEvent($event, keyword)"  class="form-control" ng-model="keyword" placeholder="订单号/发票抬头/收票人/联系电话"/>
+                <input type="text" ng-keydown="enterEvent($event, keyword)"  class="form-control" ng-model="keyword" placeholder="买家/物料名称/订单号/收票人/联系电话"/>
                 <button ng-click="searchByKey(keyword)">搜索</button>
             </div>
         </div>
@@ -332,57 +400,135 @@
             <table class="invoice-com-tab table" ng-table="billRecordTableParam">
                 <thead>
                 <tr>
-                    <th width="45">
+                    <th width="60">
                         <lable class="check-act">
                             <input type="checkbox" id="checkAll" ng-disabled="!billData || billData.length == 0" ng-click="onAllChecked()" ng-checked="isAllCheck" />
                             <label for="checkAll"></label>
                         </lable>
                         全选</th>
-                    <th width="70">申请时间</th>
-                    <th width="90">订单号</th>
-                    <th width="90">开票金额(¥)</th>
-                    <th width="55" class="select-line">
-                        <select class="select-adder form-control" style="position: relative;left: 6px;" ng-change="billTypeSearch(billType)" ng-model="billType">
-                            <option value="1">类型</option>
-                            <option value="2">普票</option>
-                            <option value="3">专票</option>
-                        </select>
-                    </th>
-                    <th width="120">发票抬头</th>
-                    <th width="50">收票人</th>
-                    <th width="160">收票地址</th>
-                    <th width="50">联系电话</th>
+                    <th width="573">开票信息</th>
+                    <th width="382">收票信息</th>
+                    <!--<th width="70">申请时间</th>-->
+                    <!--<th width="90">订单号</th>-->
+                    <!--<th width="90">开票金额(¥)</th>-->
+                    <!--<th width="55" class="select-line">-->
+                        <!--<select class="select-adder form-control" style="position: relative;left: 6px;" ng-change="billTypeSearch(billType)" ng-model="billType">-->
+                            <!--<option value="1">类型</option>-->
+                            <!--<option value="2">普票</option>-->
+                            <!--<option value="3">专票</option>-->
+                        <!--</select>-->
+                    <!--</th>-->
+                    <!--<th width="120">发票抬头</th>-->
+                    <!--<th width="50">收票人</th>-->
+                    <!--<th width="160">收票地址</th>-->
+                    <!--<th width="50">联系电话</th>-->
                 </tr>
                 </thead>
                 <tbody>
                     <tr ng-repeat="item in billData track by $index">
-                        <td  style="width: 50px;">
+                        <td  style="width: 60px;">
                             <lable class="check-act">
                                 <input type="checkbox" id={{$index+1}} ng-checked="item.checked" ng-click="checkInvoice(item)" />
                                 <label for={{$index+1}}></label>
                             </lable>
                         </td>
-                        <td ng-bind="item.createTime | date : 'yyyy-MM-dd'"></td>
-                        <td>
-                             <span ng-repeat="(col, orderid) in item.orderids.split(',')">
-                            <a ng-href="vendor#/purchase/detail/{{item.purchaseids.split(',')[col] | EncryptionFilter}}" ng-bind="orderid" target="_blank" class="link-order"></a>
-                        </span>
-                        </td>
-                        <td ng-bind="item.price"></td>
-                        <td style="padding: 0;">
-                            <span ng-bind="item.invoicetype==1206?'普票':'专票'"></span>
-                            <b ng-click="lookInvoiceInfo(item)" class="invoice-info">开票信息</b>
-                        </td>
-                        <td ng-bind="item.invoicetitle"></td>
-                        <td ng-bind="item.receiverName"></td>
-                        <td class="address" title="{{item.area+'&#10;'+item.detailAddr}}">
-                            <p ng-bind="item.area"></p>
-                            <p ng-bind="item.detailAddr"></p>
+                        <td colspan="2" style="position: relative;padding: 0px">
+                            <div class="clearboth tbpadding" >
+                                <div class="pull-left clearboth w65" style="margin-bottom: 0px">
+                                    <div class="list clearboth" style="width: 100%">
+                                        <div class="pull-left w50 clearboth">
+                                            <div class="pull-left name">发票抬头: </div>
+                                            <div class="pull-left marginLeft overhidden" title="{{item.invoicetitle}}" style="max-width: 224px">{{item.invoicetitle}}</div>
+                                        </div>
+                                        <div class="pull-left w50" ng-if="item.invoicetype === 1205">
+                                            <div class="pull-left name">税务登记号: </div>
+                                            <div class="pull-left marginLeft overhidden" title="{{item.billInfo.companyTaxNumber}}" style="max-width: 205px;">{{item.billInfo.companyTaxNumber || '-'}}</div>
+                                        </div>
+                                    </div>
+                                    <div class="list clearboth" style="width: 100%">
+                                        <div class="pull-left w50">
+                                            <div class="pull-left name">开票金额: </div>
+                                            <div class="pull-left marginLeft overhidden" title="{{item.price}}" style="max-width: 224px">{{'¥' + item.price || '-'}}</div>
+                                        </div>
+                                        <div class="pull-left w50" ng-if="item.invoicetype === 1205">
+                                            <div class="pull-left name">开户银行: </div>
+                                            <div class="pull-left marginLeft overhidden" title="{{item.billInfo.bankName}}" style="max-width: 224px">{{item.billInfo.bankName || '-'}}</div>
+                                        </div>
+                                    </div>
+
+                                    <div class="list clearboth" style="width: 100%">
+                                        <div class="pull-left w50" ng-if="item.invoicetype === 1205">
+                                            <div class="pull-left name">单位电话: </div>
+                                            <div class="pull-left marginLeft" title="{{item.billInfo.companyPhone}}">{{item.billInfo.companyPhone || '-'}}</div>
+                                        </div>
+                                        <div class="pull-left w50" ng-if="item.invoicetype === 1205">
+                                            <div class="pull-left name">开户银行账号: </div>
+                                            <div class="pull-left marginLeft overhidden" title="{{item.billInfo.bankAccount}}" style="max-width: 200px">{{item.billInfo.bankAccount || '-'}}</div>
+                                        </div>
+                                    </div>
+                                    <div class="pull-left w50" ng-if="item.invoicetype === 1205">
+                                        <div class="pull-left name">单位地址: </div>
+                                        <div class="pull-left marginLeft" style="max-width: 224px;text-align: left;white-space: normal;word-break: break-all;" title="{{item.billInfo.companyAddress}}">{{item.billInfo.companyAddress || '-'}}</div>
+                                    </div>
+                                    <div class="pull-left w50">
+                                        <div class="pull-left name">订单号: </div>
+                                        <div class="pull-left marginLeft" style="max-width: 224px">
+                                            <p ng-repeat="orderid in item.orderids"><a target="_blank"  ng-href="user#/order/detail/{{orderid | EncryptionFilter}}">{{orderid}}</a></p>
+                                        </div>
+                                    </div>
+                                </div>
+                                <div class="pull-right w35 clearboth" style="margin-bottom: 0px">
+                                    <div class="pull-left w100 clearboth">
+                                        <div class="pull-left name">申请开票时间: </div>
+                                        <div class="pull-left marginLeft">{{item.createTime | date : 'yyyy-MM-dd HH:mm:ss'}}</div>
+                                    </div>
+                                    <div class="pull-left w100 clearboth">
+                                        <div class="pull-left name">收票人: </div>
+                                        <div class="pull-left marginLeft overhidden" style="width: 234px;text-align: left" title="{{item.receiverName}}">{{item.receiverName || '-'}}</div>
+                                    </div>
+                                    <div class="pull-left w100 clearboth">
+                                        <div class="pull-left name">联系电话: </div>
+                                        <div class="pull-left marginLeft">{{item.recTel || '-'}}</div>
+                                    </div>
+                                    <div class="pull-left w100 clearboth">
+                                        <div class="pull-left name">收票地址: </div>
+                                        <div class="pull-left marginLeft" style="max-width: 224px;text-align: left;white-space: normal;word-break: break-all;">{{item.invoiceAddress || '-'}}</div>
+                                    </div>
+                                </div>
+                                <div class="fixedImg">
+                                    <!--item.invoicetype==1206?'普票':'专票'-->
+                                    <img src="static/img/user/images/invoice-nor.png" ng-if="item.invoicetype == 1206" width="41"/>
+                                    <img src="static/img/user/images/invoice-spec.png" ng-if="item.invoicetype == 1205" width="41"/>
+                                </div>
+                            </div>
                         </td>
-                        <td ng-bind="item.recTel">13135015772</td>
+                        <!--<td  style="width: 50px;">-->
+                            <!--<lable class="check-act">-->
+                                <!--<input type="checkbox" id={{$index+1}} ng-checked="item.checked" ng-click="checkInvoice(item)" />-->
+                                <!--<label for={{$index+1}}></label>-->
+                            <!--</lable>-->
+                        <!--</td>-->
+                        <!--<td ng-bind="item.createTime | date : 'yyyy-MM-dd'"></td>-->
+                        <!--<td>-->
+                             <!--<span ng-repeat="(col, orderid) in item.orderids.split(',')">-->
+                            <!--<a ng-href="vendor#/purchase/detail/{{item.purchaseids.split(',')[col] | EncryptionFilter}}" ng-bind="orderid" target="_blank" class="link-order"></a>-->
+                        <!--</span>-->
+                        <!--</td>-->
+                        <!--<td ng-bind="item.price"></td>-->
+                        <!--<td style="padding: 0;">-->
+                            <!--<span ng-bind="item.invoicetype==1206?'普票':'专票'"></span>-->
+                            <!--<b ng-click="lookInvoiceInfo(item)" class="invoice-info">开票信息</b>-->
+                        <!--</td>-->
+                        <!--<td ng-bind="item.invoicetitle"></td>-->
+                        <!--<td ng-bind="item.receiverName"></td>-->
+                        <!--<td class="address" title="{{item.area+'&#10;'+item.detailAddr}}">-->
+                            <!--<p ng-bind="item.area"></p>-->
+                            <!--<p ng-bind="item.detailAddr"></p>-->
+                        <!--</td>-->
+                        <!--<td ng-bind="item.recTel">13135015772</td>-->
                     </tr>
                     <tr class="record-num" ng-if="billData && billData.length>0">
-                        <td colspan="9">
+                        <td colspan="3">
                             <span class="count-tip">显示 <span ng-bind="$$kdnData.start"></span>-<span ng-bind="$$kdnData.end"></span> 条,共 <span ng-bind="$$kdnData.totalElements"></span> 条</span>
                         </td>
                     </tr>
@@ -394,7 +540,24 @@
                 </tbody>
             </table>
         </div>
-        <div class="apply-btn"  ng-style="$$kdnData.totalElements>10?'margin-top: 100px':''" ng-if="billData && billData.length>0">
+        <div class="apply-btn clearboth" ng-style="$$kdnData.totalElements>10?'margin-top: 100px':''" ng-if="billData && billData.length>0" style="position: static">
+            <div style="float:left;line-height: 60px;font-size: 14px;margin-left: 20px">
+                <lable class="check-act">
+                    <input type="checkbox" id="checkAll2" ng-disabled="!billData || billData.length == 0" ng-click="onAllChecked()" ng-checked="isAllCheck" />
+                    <label for="checkAll2"></label>
+                </lable>
+                全选
+            </div>
+            <button ng-click="submitApply()">确认开票</button>
+        </div>
+        <div class="apply-btn" id="applyBtn" ng-style="$$kdnData.totalElements>10?'margin-top: 100px':''" ng-if="billData.length > 0">
+            <div style="float:left;line-height: 60px;font-size: 14px;margin-left: 20px">
+                <lable class="check-act">
+                    <input type="checkbox" id="checkAll3" ng-disabled="!billData || billData.length == 0" ng-click="onAllChecked()" ng-checked="isAllCheck" />
+                    <label for="checkAll3"></label>
+                </lable>
+                全选
+            </div>
             <button ng-click="submitApply()">确认开票</button>
         </div>
     </div>
@@ -410,52 +573,156 @@
             <table class="invoice-com-tab table invoice-com" ng-table="billRecordTableParam" style="table-layout: fixed;">
                 <thead>
                 <tr>
-                    <th width="90">申请时间</th>
-                    <th width="185">订单号</th>
-                    <th width="110">开票金额(¥)</th>
-                    <th width="60" class="select-line">
-                        <select class="select-adder form-control" style="position: relative;left: 6px;" ng-change="billTypeSearch(billType)" ng-model="billType">
-                            <option value="1">类型</option>
-                            <option value="2">普票</option>
-                            <option value="3">专票</option>
-                        </select>
-                    </th>
-                    <th width="145">发票抬头</th>
-                    <th width="70">收票人</th>
-                    <th width="205">收票地址</th>
-                    <th width="125">联系电话</th>
+                    <th width="650">开票信息</th>
+                    <th width="350">收票信息</th>
+                    <!--<th width="90">申请时间</th>-->
+                    <!--<th width="185">订单号</th>-->
+                    <!--<th width="110">开票金额(¥)</th>-->
+                    <!--<th width="60" class="select-line">-->
+                        <!--<select class="select-adder form-control" style="position: relative;left: 6px;" ng-change="billTypeSearch(billType)" ng-model="billType">-->
+                            <!--<option value="1">类型</option>-->
+                            <!--<option value="2">普票</option>-->
+                            <!--<option value="3">专票</option>-->
+                        <!--</select>-->
+                    <!--</th>-->
+                    <!--<th width="145">发票抬头</th>-->
+                    <!--<th width="70">收票人</th>-->
+                    <!--<th width="205">收票地址</th>-->
+                    <!--<th width="125">联系电话</th>-->
                 </tr>
                 </thead>
                 <tbody>
-                <tr ng-repeat="item in billData track by $index">
-                    <td ng-bind="item.createTime | date : 'yyyy-MM-dd'" title="{{item.createTime | date : 'yyyy-MM-dd'}}"></td>
-                    <td>
-                        <span ng-repeat="(col, orderid) in item.orderids.split(',')">
-                            <a ng-href="vendor#/purchase/detail/{{item.purchaseids.split(',')[col] | EncryptionFilter}}" ng-bind="orderid" title="{{orderid}}" target="_blank" class="link-order"></a>
-                        </span>
-                    </td>
-                    <td ng-bind="item.price" title="{{item.price}}"></td>
-                    <td style="padding: 0;">
-                        <span ng-bind="item.invoicetype==1206?'普票':'专票'"></span>
-                        <b ng-click="lookInvoiceInfo(item)" class="invoice-info">开票信息</b></td>
-                    <td ng-bind="item.invoicetitle" title="{{item.invoicetitle}}"></td>
-                    <td ng-bind="item.receiverName" title="{{item.receiverName}}"></td>
-                    <td class="address" title="{{item.area+'&#10;'+item.detailAddr}}">
-                        <p ng-bind="item.area"></p>
-                        <p ng-bind="item.detailAddr"></p>
-                    </td>
-                    <td ng-bind="item.recTel" title="{{item.recTel}}">13135015772</td>
-                </tr>
-                <tr class="record-num" ng-if="billData && billData.length>0">
-                    <td colspan="9">
+                    <tr ng-repeat="item in billData track by $index">
+                        <td colspan="2" style="position: relative;padding: 0px">
+                            <div class="clearboth tbpadding" >
+                                <div class="pull-left clearboth" style="margin-bottom: 0px;width: 65%">
+                                    <div class="list clearboth" style="width: 100%">
+                                        <div class="pull-left w50 clearboth">
+                                            <div class="pull-left name">发票抬头: </div>
+                                            <div class="pull-left marginLeft overhidden" title="{{item.invoicetitle}}" style="max-width: 224px">{{item.invoicetitle}}</div>
+                                        </div>
+                                        <div class="pull-left w50" ng-if="item.invoicetype === 1205">
+                                            <div class="pull-left name">税务登记号: </div>
+                                            <div class="pull-left marginLeft overhidden" title="{{item.billInfo.companyTaxNumber}}" style="max-width: 205px;">{{item.billInfo.companyTaxNumber || '-'}}</div>
+                                        </div>
+                                    </div>
+                                    <div class="list clearboth" style="width: 100%">
+                                        <div class="pull-left w50">
+                                            <div class="pull-left name">开票金额: </div>
+                                            <div class="pull-left marginLeft overhidden" title="{{item.price}}" style="max-width: 224px">{{'¥' + item.price || '-'}}</div>
+                                        </div>
+                                        <div class="pull-left w50" ng-if="item.invoicetype === 1205">
+                                            <div class="pull-left name">开户银行: </div>
+                                            <div class="pull-left marginLeft overhidden" title="{{item.billInfo.bankName}}" style="max-width: 224px">{{item.billInfo.bankName || '-'}}</div>
+                                        </div>
+                                    </div>
+
+                                    <div class="list clearboth" style="width: 100%">
+                                        <div class="pull-left w50" ng-if="item.invoicetype === 1205">
+                                            <div class="pull-left name">单位电话: </div>
+                                            <div class="pull-left marginLeft" title="{{item.billInfo.companyPhone}}">{{item.billInfo.companyPhone || '-'}}</div>
+                                        </div>
+                                        <div class="pull-left w50" ng-if="item.invoicetype === 1205">
+                                            <div class="pull-left name">开户银行账号: </div>
+                                            <div class="pull-left marginLeft overhidden" title="{{item.billInfo.bankAccount}}" style="max-width: 200px">{{item.billInfo.bankAccount || '-'}}</div>
+                                        </div>
+                                    </div>
+                                    <div class="pull-left w50" ng-if="item.invoicetype === 1205">
+                                        <div class="pull-left name">单位地址: </div>
+                                        <div class="pull-left marginLeft" style="max-width: 224px;text-align: left;white-space: normal;word-break: break-all;" title="{{item.billInfo.companyAddress}}">{{item.billInfo.companyAddress || '-'}}</div>
+                                    </div>
+                                    <div class="pull-left w50">
+                                        <div class="pull-left name">订单号: </div>
+                                        <div class="pull-left marginLeft" style="max-width: 224px">
+                                            <p ng-repeat="orderid in item.orderids"><a target="_blank"  ng-href="user#/order/detail/{{orderid | EncryptionFilter}}">{{orderid}}</a></p>
+                                        </div>
+                                    </div>
+
+                                </div>
+                                <div class="pull-right clearboth" style="margin-bottom: 0px;width: 35%">
+                                    <div class="pull-left w100 clearboth">
+                                        <div class="pull-left name">申请开票时间: </div>
+                                        <div class="pull-left marginLeft">{{item.createTime | date : 'yyyy-MM-dd HH:mm:ss'}}</div>
+                                    </div>
+                                    <div class="pull-left w100 clearboth">
+                                        <div class="pull-left name">收票人: </div>
+                                        <div class="pull-left marginLeft overhidden" style="width: 234px;text-align: left" title="{{item.receiverName}}">{{item.receiverName || '-'}}</div>
+                                    </div>
+                                    <div class="pull-left w100 clearboth">
+                                        <div class="pull-left name">联系电话: </div>
+                                        <div class="pull-left marginLeft">{{item.recTel || '-'}}</div>
+                                    </div>
+                                    <div class="pull-left w100 clearboth">
+                                        <div class="pull-left name">收票地址: </div>
+                                        <div class="pull-left marginLeft" style="max-width: 224px;text-align: left;white-space: normal;white-space: normal;word-break: break-all;">{{item.invoiceAddress || '-'}}</div>
+                                    </div>
+                                </div>
+                                <div class="fixedImg">
+                                    <!--item.invoicetype==1206?'普票':'专票'-->
+                                    <img src="static/img/user/images/invoice-nor.png" ng-if="item.invoicetype == 1206" width="41"/>
+                                    <img src="static/img/user/images/invoice-spec.png" ng-if="item.invoicetype == 1205" width="41"/>
+                                </div>
+                            </div>
+                        </td>
+                        <!--<td  style="width: 50px;">-->
+                        <!--<lable class="check-act">-->
+                        <!--<input type="checkbox" id={{$index+1}} ng-checked="item.checked" ng-click="checkInvoice(item)" />-->
+                        <!--<label for={{$index+1}}></label>-->
+                        <!--</lable>-->
+                        <!--</td>-->
+                        <!--<td ng-bind="item.createTime | date : 'yyyy-MM-dd'"></td>-->
+                        <!--<td>-->
+                        <!--<span ng-repeat="(col, orderid) in item.orderids.split(',')">-->
+                        <!--<a ng-href="vendor#/purchase/detail/{{item.purchaseids.split(',')[col] | EncryptionFilter}}" ng-bind="orderid" target="_blank" class="link-order"></a>-->
+                        <!--</span>-->
+                        <!--</td>-->
+                        <!--<td ng-bind="item.price"></td>-->
+                        <!--<td style="padding: 0;">-->
+                        <!--<span ng-bind="item.invoicetype==1206?'普票':'专票'"></span>-->
+                        <!--<b ng-click="lookInvoiceInfo(item)" class="invoice-info">开票信息</b>-->
+                        <!--</td>-->
+                        <!--<td ng-bind="item.invoicetitle"></td>-->
+                        <!--<td ng-bind="item.receiverName"></td>-->
+                        <!--<td class="address" title="{{item.area+'&#10;'+item.detailAddr}}">-->
+                        <!--<p ng-bind="item.area"></p>-->
+                        <!--<p ng-bind="item.detailAddr"></p>-->
+                        <!--</td>-->
+                        <!--<td ng-bind="item.recTel">13135015772</td>-->
+                    </tr>
+                    <tr class="record-num" ng-if="billData && billData.length>0">
+                    <td colspan="3">
                         <span class="count-tip">显示 <span ng-bind="$$kdnData.start"></span>-<span ng-bind="$$kdnData.end"></span> 条,共 <span ng-bind="$$kdnData.totalElements"></span> 条</span>
                     </td>
                 </tr>
+                    <!--<tr ng-repeat="item in billData track by $index">-->
+                        <!--<td ng-bind="item.createTime | date : 'yyyy-MM-dd'" title="{{item.createTime | date : 'yyyy-MM-dd'}}"></td>-->
+                        <!--<td>-->
+                            <!--<span ng-repeat="(col, orderid) in item.orderids.split(',')">-->
+                                <!--<a ng-href="vendor#/purchase/detail/{{item.purchaseids.split(',')[col] | EncryptionFilter}}" ng-bind="orderid" title="{{orderid}}" target="_blank" class="link-order"></a>-->
+                            <!--</span>-->
+                        <!--</td>-->
+                        <!--<td ng-bind="item.price" title="{{item.price}}"></td>-->
+                        <!--<td style="padding: 0;">-->
+                            <!--<span ng-bind="item.invoicetype==1206?'普票':'专票'"></span>-->
+                            <!--<b ng-click="lookInvoiceInfo(item)" class="invoice-info">开票信息</b></td>-->
+                        <!--<td ng-bind="item.invoicetitle" title="{{item.invoicetitle}}"></td>-->
+                        <!--<td ng-bind="item.receiverName" title="{{item.receiverName}}"></td>-->
+                        <!--<td class="address" title="{{item.area+'&#10;'+item.detailAddr}}">-->
+                            <!--<p ng-bind="item.area"></p>-->
+                            <!--<p ng-bind="item.detailAddr"></p>-->
+                        <!--</td>-->
+                        <!--<td ng-bind="item.recTel" title="{{item.recTel}}">13135015772</td>-->
+                    <!--</tr>-->
+                    <!--<tr class="record-num" ng-if="billData && billData.length>0">-->
+                        <!--<td colspan="9">-->
+                            <!--<span class="count-tip">显示 <span ng-bind="$$kdnData.start"></span>-<span ng-bind="$$kdnData.end"></span> 条,共 <span ng-bind="$$kdnData.totalElements"></span> 条</span>-->
+                        <!--</td>-->
+                    <!--</tr>-->
                 </tbody>
                 <tbody class="no-record-list" ng-if="!billData || billData.length<=0">
-                <tr style="height:401px!important;">
-                <td style="border: #fff 1px solid" colspan="10"><img src="static/img/all/empty-cart.png"><span class="f14">暂无开票记录</span></td>
-                </tr>
+                    <tr style="height:401px!important;">
+                        <td style="border: #fff 1px solid" colspan="10"><img src="static/img/all/empty-cart.png"><span class="f14">暂无开票记录</span></td>
+                    </tr>
                 </tbody>
             </table>
         </div>

+ 160 - 9
src/main/webapp/resources/view/vendor/forstore/vendor_logistics.html

@@ -79,8 +79,8 @@
 		<!--收货地址-->
 		<div class="logistic-content" ng-if="tab=='logistic'">
 			<div class="menu-title row">现有发货地址<span>&nbsp;已保存<em>{{total}}</em>条,还能新增<em>{{canAddTotal-total}}</em>条地址</span></div>
-			<div class="add-log row" ng-if="total < canAddTotal"><button ng-click="editShippingAddress()"><i class="fa fa-plus-circle"></i>&nbsp;新增发货地址</button></div>
-			<div class="log-tab">
+			<div class="add-log row" ng-if="total < canAddTotal && addressList && addressList.length > 0"><button ng-click="editShippingAddress()"><i class="fa fa-plus-circle"></i>&nbsp;新增发货地址</button></div>
+			<div class="log-tab" ng-if="addressList && addressList.length > 0">
 				<table class="table">
 					<thead>
 					<tr>
@@ -107,19 +107,170 @@
 					</tr>
 					</tbody>
 				</table>
-				<div class="empty" ng-if="addressList.length == 0">
-					<p class="empty-img">
-						<img src="static/img/all/empty-cart.png">
-					</p>
-					<div class="empty-info">
-						<p class="grey"> 暂无发货地址,赶快去新增吧 </p>
-						<!--<a href="vendor#/index"><i class="fa fa-mail-reply fa-xs"></i>返回上一页</a>-->
+			</div>
+			<div class="new-address" ng-if="addressList.length <= 0 || !addressList">
+				<div class="edit-rec-addr">
+					<div class="row">
+						<div class="col-sm-12">
+							<form name="myForm" class="form-horizontal" role="form" ng-submit="save(newAddr)">
+								<div class="form-group">
+									<label for="userName" class="col-sm-3 control-label"><strong class="text-inverse">* </strong>
+										<span>发货人姓名:</span>
+									</label>
+									<div class="col-sm-5">
+										<input required ng-model="newAddr.name" type="text" class="form-control" id="userName" name="userName"
+											   placeholder="请输入你的姓名" autocomplete="off" ng-change="checkAddrForm(1)">
+									</div>
+									<div class="col-sm-4">
+										<span class="text-inverse error" ng-show="newAddr.name && userError">请勿超过10个字</span>
+										<span class="text-inverse heigth30" ng-show="myForm.userName.$touched && myForm.userName.$invalid">请输入发件人姓名</span>
+										<span ng-show="!myForm.userName.$invalid && !userError" class="text-success heigth30">填写正确</span>
+									</div>
+								</div>
+								<div class="form-group">
+									<label for="tel" class="col-sm-3 control-label"><strong class="text-inverse">* </strong>联系电话:</label>
+									<div class="col-sm-5">
+										<input required ng-model="newAddr.tel" type="text" autocomplete="off" class="form-control" ng-change="checkAddrForm(2)" id="tel" name="tel"
+											   placeholder="请输入您的联系电话">
+									</div>
+									<div class="col-sm-4" >
+										<span class="text-inverse error" ng-show="newAddr.tel && (telError || telPatternError)">请输入正确的号码</span>
+										<span class="text-inverse heigth30" ng-show="myForm.tel.$touched && myForm.tel.$invalid">请输入联系电话</span>
+										<span ng-show="!myForm.tel.$invalid && !telError && !telPatternError" class="text-success heigth30">填写正确</span>
+									</div>
+								</div>
+								<div class="form-group">
+									<label for="email" class="col-sm-3 control-label">邮箱:</label>
+									<div class="col-sm-5">
+										<input name="email" ng-model="newAddr.email" type="text" class="form-control" id="email"
+											   placeholder="请填写正确的邮箱,可用于接收订单提醒" maxlength="50" ng-change="checkAddrForm(4)">
+									</div>
+									<div class="col-sm-4">
+										<span ng-show="newAddr.email && emailPatternError" class="text-inverse heigth30">请输入正确的邮箱</span>
+									</div>
+								</div>
+								<div class="form-group ">
+									<label class="col-sm-3 control-label"><strong
+											class="text-inverse">* </strong>所在地区:</label>
+									<div class="mar-rt0 row checkbox">
+										<div class="col-sm-3">
+											<select required="" class="select-adder form-control"
+													ng-model="newAddr.province"
+													ng-options="key as key for (key,value) in division"
+													ng-change="newAddr.city='';newAddr.district='';"
+													style="opacity: 1;">
+												<option value="">省级行政区</option>
+											</select>
+										</div>
+										<div class="col-sm-3 ">
+											<select class="select-adder form-control" ng-model="newAddr.city"
+													ng-options="key as key for (key,value) in division[newAddr.province]"
+													ng-change="newAddr.district='';"
+													style="opacity: 1;">
+												<option value="">市</option>
+											</select>
+										</div>
+										<div class="col-sm-3">
+											<select class="select-adder form-control" ng-model="newAddr.district" style="opacity: 1;"
+													ng-options="value as value for value in division[newAddr.province][newAddr.city]" required>
+												<option value="">区</option>
+											</select>
+										</div>
+									</div>
+								</div>
+								<div class="form-group" style="margin-bottom: 0;">
+									<label class="col-sm-3 control-label"><strong class="text-inverse">* </strong>详细地址:</label>
+									<div class="col-sm-8" style="width: 530px; padding-right: 0;">
+										<input required ng-model="newAddr.detailAddress" type="text" class="form-control" name="addr" id="addr"
+											   placeholder="建议你填写详细地址,例如街道名、门牌号,楼层和房间号等信息" autocomplete="off" ng-change="checkAddrForm(3)">
+									</div>
+									<div class="col-sm-2" style="padding: 0; width: 100px; padding-left: 10px;line-height: 34px;">
+										<span class="text-inverse error" ng-show="newAddr.detailAddress && addrError">请勿超过30个字</span>
+										<span ng-show="!myForm.addr.$invalid && !addrError" class="text-success heigth30">填写正确</span>
+										<span class="text-inverse error" ng-show="myForm.addr.$touched && myForm.addr.$invalid">请输入详细地址</span>
+									</div>
+								</div>
+								<div class="form-group" style="margin-bottom:20px;margin-top:10px;">
+									<div class="col-sm-4" style="margin-left: 120px;">
+										<div class="checkbox">
+											<label class="check-active">
+												<input ng-model="isSetTop" type="checkbox" id="check-act">
+												<label for="check-act"></label>
+												<span>设置为默认发货地址</span>
+											</label>
+										</div>
+									</div>
+								</div>
+							</form>
+						</div>
 					</div>
 				</div>
+				<div class="edit-btn">
+					<button class="btn btn-default" ng-click="reset(myForm)" type="button">取消</button>
+					<button class="btn btn-success" ng-click="save()" type="button">保存</button>
+				</div>
 			</div>
 		</div>
 	</div>
 </div>
+<style type="text/css">
+	.new-address {
+		padding-top:20px;
+	}
+	.new-address label{
+		margin-right: -15px;
+		font-size: 14px;
+		font-weight: inherit;
+		line-height: 34px;
+	}
+	.heigth30 {
+		height: 30px;
+		line-height: 30px;
+	}
+	.edit-rec-addr .form-control {
+		color: black;
+	}
+	.edit-rec-addr strong {
+		color: red;
+	}
+	.edit-rec-addr .format-correct {
+		color: #008000;
+		height: 30px;
+		line-height: 30px;
+	}
+	.edit-rec-addr .format-error {
+		color: red;
+		height: 30px;
+		line-height: 30px;
+	}
+	.select-adder{
+		background:url("static/img/user/images/xiala.png") right no-repeat ;
+		background-position-x: 180px;
+	}
+	.form-control{
+		border-radius: 3px;
+	}
+	.new-address .edit-btn{
+		text-align: center;
+	}
+	.new-address.edit-btn button{
+		width: 70px;
+		height: 32px;
+		border-radius: 0;
+	}
+	.new-address.edit-btn button.btn-default{
+		background: #c8c6c6 !important;
+		color: #fff !important;
+		border: none !important;
+	}
+	.form-horizontal .control-label{
+		width: 120px;
+		padding-right: 5px;
+	}
+	.checkbox .col-sm-3{
+		width: 177px;
+	}
+</style>
 <style>
 	.com-del-box{
 		position: fixed;

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

@@ -51,7 +51,7 @@
 				<span  ui-sref="vendor_deliveryRule" ng-if="store && (!store.status || store.status === 'OPENED')">物流管理</span>
 			</li>
 			<li ng-class="{'active' : active == 'vendor_invoice'}"><span  ui-sref="vendorInvoice">发票管理</span></li>
-			<li ng-class="{'active' : active == 'pay_center'}"><span  ui-sref="pay_center">财务对账</span></li>
+			<li ng-class="{'active' : active == 'vendor_pay_center'}"><span  ui-sref="pay_center">应收对账</span></li>
 			<li ng-class="{'active' : active == 'vendor_store'}">
 				<!-- 我要开店 !store && applyStatus == 'NONE' -->
 				<span  ui-sref="vendor_store_apply" ng-if="!store && applyStatus == 'NONE'">开店申请</span>