Browse Source

新增采购变更页面相关

hejq 7 years ago
parent
commit
5d2364adab

+ 50 - 3
src/main/java/com/uas/platform/b2b/controller/PurcOrderChangeController.java

@@ -1,19 +1,33 @@
 package com.uas.platform.b2b.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2b.model.PurchaseOrderAll;
 import com.uas.platform.b2b.model.PurchaseOrderChange;
 import com.uas.platform.b2b.model.SearchFilter;
+import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.service.PurcOrderChangeService;
+import com.uas.platform.b2b.service.UserService;
+import com.uas.platform.b2b.support.SPageUtils;
+import com.uas.platform.b2b.support.SystemSession;
+import com.uas.platform.core.model.Constant;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
+import com.uas.platform.core.model.Status;
+import com.uas.platform.core.web.bind.RequestState;
 import com.uas.search.b2b.model.SPage;
+import com.uas.search.b2b.model.Sort;
+import com.uas.search.b2b.util.SearchConstants;
 import org.springframework.beans.factory.annotation.Autowired;
 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;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * 采购变更单
  *
@@ -26,6 +40,12 @@ public class PurcOrderChangeController {
     @Autowired
     private PurcOrderChangeService orderChangeService;
 
+    @Autowired
+    private SearchService searchService;
+
+    @Autowired
+    private UserService userService;
+
     /**
      * 查询可以做采购变更单的采购单
      *
@@ -34,10 +54,10 @@ public class PurcOrderChangeController {
      * @return
      */
     @RequestMapping(value = "/enable/orderList", method = RequestMethod.GET)
-    public SPage<PurchaseOrderAll> findByPageInfo(PageParams pageParams, SearchFilter searchFilter) {
+    public SPage<PurchaseOrderAll> findByPageInfo(PageParams pageParams, String searchFilter) {
         PageInfo pageInfo = new PageInfo(pageParams);
-        orderChangeService.findEnableToChange(pageInfo, searchFilter);
-        return null;
+        SearchFilter filter =  JSONObject.parseObject(searchFilter, SearchFilter.class);
+        return orderChangeService.findEnableToChange(pageInfo, filter);
     }
 
     /**
@@ -49,4 +69,31 @@ public class PurcOrderChangeController {
     public ModelMap saveChange(@RequestBody PurchaseOrderChange change) {
         return orderChangeService.save(change);
     }
+
+    /**
+     * 以客户的角度,查询所有的采购变更单
+     *
+     * @param params 分页信息
+     * @param searchFilter 过滤条件
+     * @return
+     */
+    @RequestMapping(value = "/info", params = RequestState.TODO, method = RequestMethod.GET)
+    public SPage<PurchaseOrderChange> getAllPurcOrderChange(PageParams params, String searchFilter) {
+        SearchFilter filter =  JSONObject.parseObject(searchFilter, SearchFilter.class);
+        com.uas.search.b2b.model.PageParams pageParams = searchService.convertPageParams(params, searchFilter);
+        // 当前登录企业作为供应商
+        if (!StringUtils.isEmpty(filter.getKeyword())) {
+            pageParams.getFilters().put("pc_enuu", SystemSession.getUser().getEnterprise().getUu());
+            pageParams.getFilters().put("pc_status", Status.NOT_REPLY.value());
+            pageParams.getFilters().put("pc_unneedreply", Constant.YES);
+            List<Sort> sortList = new ArrayList<>();
+            sortList.add(new Sort("pc_id", false, Sort.Type.LONG, new Long(1)));
+            pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
+            return searchService.searchPurchaseOrderChangeIds(filter.getKeyword(), pageParams);
+        } else {
+            PageInfo pageInfo = new PageInfo(params);
+            pageInfo.filter("enUU", SystemSession.getUser().getEnterprise().getUu());
+            return SPageUtils.covertSPage(orderChangeService.findByPageInfo(pageInfo, filter));
+        }
+    }
 }

+ 5 - 37
src/main/java/com/uas/platform/b2b/controller/SaleOrderChangeController.java

@@ -8,6 +8,7 @@ import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.service.PurchaseOrderChangeService;
 import com.uas.platform.b2b.service.UserService;
 import com.uas.platform.b2b.support.JxlsExcelView;
+import com.uas.platform.b2b.support.SPageUtils;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.b2b.support.UsageBufferedLogger;
 import com.uas.platform.core.logging.BufferedLoggerManager;
@@ -23,7 +24,6 @@ import com.uas.search.b2b.model.Sort;
 import com.uas.search.b2b.model.Sort.Type;
 import com.uas.search.b2b.util.SearchConstants;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
@@ -203,7 +203,6 @@ public class SaleOrderChangeController {
 	@RequestMapping(value = "/info/nosearch", method = RequestMethod.GET)
 	@ResponseBody
 	public SPage<PurchaseOrderChange> getAllOrderChanges(PageParams params, String searchFilter) {
-		SPage<PurchaseOrderChange> orders = new SPage<PurchaseOrderChange>();
 		PageInfo pageInfo = new PageInfo(params);
 		pageInfo.filter("vendUU", SystemSession.getUser().getEnterprise().getUu());
 		SearchFilter filter = JSONObject.parseObject(searchFilter, SearchFilter.class);
@@ -214,14 +213,7 @@ public class SaleOrderChangeController {
 		if (distribute != null && !CollectionUtils.isEmpty(distribute.getDistribute())) {
 			filter.setDistribute(distribute.getDistribute());
 		}
-		// filter.setDistribute(userService.distribute().getDistribute());
-		Page<PurchaseOrderChange> orderchanges = purchaseOrderChangeService.findAllByPageInfo(pageInfo, null, filter);
-		orders.setContent(orderchanges.getContent());
-		orders.setPage(orderchanges.getNumber());
-		orders.setSize(orderchanges.getSize());
-		orders.setTotalElement(orderchanges.getTotalElements());
-		orders.setTotalPage(orderchanges.getTotalPages());
-		return orders;
+		return SPageUtils.covertSPage(purchaseOrderChangeService.findAllByPageInfo(pageInfo, null, filter));
 	}
 
 	/**
@@ -234,7 +226,6 @@ public class SaleOrderChangeController {
 	@RequestMapping(value = "/info/nosearch", params = RequestState.TODO, method = RequestMethod.GET)
 	@ResponseBody
 	public SPage<PurchaseOrderChange> getTodoOrderChanges(PageParams params, String searchFilter) {
-		SPage<PurchaseOrderChange> orders = new SPage<PurchaseOrderChange>();
 		PageInfo pageInfo = new PageInfo(params);
 		pageInfo.filter("status", Status.NOT_REPLY.value());
 		pageInfo.filter("unNeedReply", Constant.NO);
@@ -247,14 +238,7 @@ public class SaleOrderChangeController {
 		if (distribute != null && !CollectionUtils.isEmpty(distribute.getDistribute())) {
 			filter.setDistribute(distribute.getDistribute());
 		}
-		// filter.setDistribute(userService.distribute().getDistribute());
-		Page<PurchaseOrderChange> orderchanges = purchaseOrderChangeService.findAllByPageInfo(pageInfo, null, filter);
-		orders.setContent(orderchanges.getContent());
-		orders.setPage(orderchanges.getNumber());
-		orders.setSize(orderchanges.getSize());
-		orders.setTotalElement(orderchanges.getTotalElements());
-		orders.setTotalPage(orderchanges.getTotalPages());
-		return orders;
+		return SPageUtils.covertSPage(purchaseOrderChangeService.findAllByPageInfo(pageInfo, null, filter));
 	}
 
 	/**
@@ -267,7 +251,6 @@ public class SaleOrderChangeController {
 	@RequestMapping(value = "/info/nosearch", params = RequestState.DONE, method = RequestMethod.GET)
 	@ResponseBody
 	public SPage<PurchaseOrderChange> getDoneOrderChanges(PageParams params, String searchFilter) {
-		SPage<PurchaseOrderChange> orders = new SPage<PurchaseOrderChange>();
 		PageInfo pageInfo = new PageInfo(params);
 		pageInfo.filter("status", Status.REPLIED.value());
 		pageInfo.filter("unNeedReply", Constant.NO);
@@ -280,14 +263,7 @@ public class SaleOrderChangeController {
 		if (distribute != null && !CollectionUtils.isEmpty(distribute.getDistribute())) {
 			filter.setDistribute(distribute.getDistribute());
 		}
-		// filter.setDistribute(userService.distribute().getDistribute());
-		Page<PurchaseOrderChange> orderchanges = purchaseOrderChangeService.findAllByPageInfo(pageInfo, null, filter);
-		orders.setContent(orderchanges.getContent());
-		orders.setPage(orderchanges.getNumber());
-		orders.setSize(orderchanges.getSize());
-		orders.setTotalElement(orderchanges.getTotalElements());
-		orders.setTotalPage(orderchanges.getTotalPages());
-		return orders;
+		return SPageUtils.covertSPage(purchaseOrderChangeService.findAllByPageInfo(pageInfo, null, filter));
 	}
 
 	/**
@@ -300,7 +276,6 @@ public class SaleOrderChangeController {
 	@RequestMapping(value = "/info/nosearch", params = RequestState.UNREAD, method = RequestMethod.GET)
 	@ResponseBody
 	public SPage<PurchaseOrderChange> getUnReadOrderChanges(PageParams params, String searchFilter) {
-		SPage<PurchaseOrderChange> orders = new SPage<PurchaseOrderChange>();
 		PageInfo pageInfo = new PageInfo(params);
 		pageInfo.filter("unNeedReply", Constant.YES);
 		pageInfo.filter("vendUU", SystemSession.getUser().getEnterprise().getUu());
@@ -312,14 +287,7 @@ public class SaleOrderChangeController {
 		if (distribute != null && !CollectionUtils.isEmpty(distribute.getDistribute())) {
 			filter.setDistribute(distribute.getDistribute());
 		}
-		// filter.setDistribute(userService.distribute().getDistribute());
-		Page<PurchaseOrderChange> orderchanges = purchaseOrderChangeService.findAllByPageInfo(pageInfo, null, filter);
-		orders.setContent(orderchanges.getContent());
-		orders.setPage(orderchanges.getNumber());
-		orders.setSize(orderchanges.getSize());
-		orders.setTotalElement(orderchanges.getTotalElements());
-		orders.setTotalPage(orderchanges.getTotalPages());
-		return orders;
+		return SPageUtils.covertSPage(purchaseOrderChangeService.findAllByPageInfo(pageInfo, null, filter));
 	}
 
 	/**

+ 10 - 0
src/main/java/com/uas/platform/b2b/service/PurcOrderChangeService.java

@@ -5,6 +5,7 @@ import com.uas.platform.b2b.model.PurchaseOrderChange;
 import com.uas.platform.b2b.model.SearchFilter;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.search.b2b.model.SPage;
+import org.springframework.data.domain.Page;
 import org.springframework.ui.ModelMap;
 
 /**
@@ -30,4 +31,13 @@ public interface PurcOrderChangeService {
      * @return
      */
     ModelMap save(PurchaseOrderChange change);
+
+    /**
+     * 通过分页信息查询采购变更单
+     *
+     * @param pageInfo 分页信息
+     * @param filter 过滤条件
+     * @return
+     */
+    Page<PurchaseOrderChange> findByPageInfo(PageInfo pageInfo, SearchFilter filter);
 }

+ 74 - 7
src/main/java/com/uas/platform/b2b/service/impl/PurcOrderChangeServiceImpl.java

@@ -1,18 +1,26 @@
 package com.uas.platform.b2b.service.impl;
 
-import com.uas.platform.b2b.dao.PurcOrderInfoItemDao;
-import com.uas.platform.b2b.dao.PurchaseOrderChangeDao;
-import com.uas.platform.b2b.dao.PurchaseOrderChangeItemDao;
-import com.uas.platform.b2b.dao.PurchaseOrderInfoDao;
+import com.uas.platform.b2b.dao.*;
 import com.uas.platform.b2b.model.*;
 import com.uas.platform.b2b.service.PurcOrderChangeService;
+import com.uas.platform.b2b.support.SPageUtils;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.Status;
+import com.uas.platform.core.persistence.criteria.CriterionExpression;
+import com.uas.platform.core.persistence.criteria.LogicalExpression;
+import com.uas.platform.core.persistence.criteria.PredicateUtils;
+import com.uas.platform.core.persistence.criteria.SimpleExpression;
 import com.uas.search.b2b.model.SPage;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 import org.springframework.ui.ModelMap;
+import org.springframework.util.StringUtils;
 
+import javax.persistence.criteria.*;
+import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -35,16 +43,50 @@ public class PurcOrderChangeServiceImpl implements PurcOrderChangeService {
     @Autowired
     private PurcOrderInfoItemDao orderInfoItemDao;
 
+    @Autowired
+    private PurchaseOrderAllDao purchaseOrderAllDao;
+
     /**
      * 查询符合条件的能变更的采购单
      *
      * @param pageInfo  分页信息
-     * @param searchFilter 过滤条件
+     * @param filter 过滤条件
      * @return
      */
     @Override
-    public SPage<PurchaseOrderAll> findEnableToChange(PageInfo pageInfo, SearchFilter searchFilter) {
-        return null;
+    public SPage<PurchaseOrderAll> findEnableToChange(final PageInfo pageInfo, final SearchFilter filter) {
+        if (filter != null) {
+            if (filter.getFromDate() != null) {
+                pageInfo.expression(PredicateUtils.gte("date", new Date(filter.getFromDate()), false));
+            }
+            if (filter.getEndDate() != null) {
+                pageInfo.expression(PredicateUtils.lte("date", new Date(filter.getEndDate()), false));
+            }
+            if (!StringUtils.isEmpty(filter.getKeyword())) {
+                SimpleExpression vendName = new SimpleExpression("receiveName", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
+                SimpleExpression orderCode = new SimpleExpression("code", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
+                SimpleExpression[] expressions = new SimpleExpression[]{vendName, orderCode};
+                LogicalExpression logical = new LogicalExpression(expressions, CriterionExpression.Operator.OR);
+                pageInfo.expression(logical);
+            }
+        }
+        Page<PurchaseOrderAll> pageOrders = purchaseOrderAllDao.findAll(new Specification<PurchaseOrderAll>() {
+            @Override
+            public Predicate toPredicate(Root<PurchaseOrderAll> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+                Predicate[] predicates = pageInfo.getPredicates(root, query, builder);
+                if (filter != null && filter.getKeyword() != null) {
+                    predicates = Arrays.copyOf(predicates, predicates.length + 1);
+                    SetJoin<PurchaseOrderAll, PurchaseOrderAllItem> join = root
+                            .join(root.getModel().getSet("orderItems", PurchaseOrderAllItem.class), JoinType.INNER);
+                    Predicate title = builder.like(join.get("product").get("title").as(String.class), filter.getKeyword());
+                    predicates[predicates.length - 2] = title;
+                    Predicate brand = builder.like(join.get("product").get("brand").as(String.class), filter.getKeyword());
+                    predicates[predicates.length - 1] = brand;
+                }
+                return query.where(predicates).getRestriction();
+            }
+        }, pageInfo);
+        return SPageUtils.covertSPage(pageOrders);
     }
 
     /**
@@ -66,4 +108,29 @@ public class PurcOrderChangeServiceImpl implements PurcOrderChangeService {
         }
         return null;
     }
+
+    /**
+     * 通过分页信息查询采购变更单
+     *
+     * @param pageInfo 分页信息
+     * @param filter   过滤条件
+     * @return
+     */
+    @Override
+    public Page<PurchaseOrderChange> findByPageInfo(final PageInfo pageInfo, SearchFilter filter) {
+        if (filter != null) {
+            if (filter.getFromDate() != null) {
+                pageInfo.expression(PredicateUtils.gte("date", new Date(filter.getFromDate()), false));
+            }
+            if (filter.getEndDate() != null) {
+                pageInfo.expression(PredicateUtils.lte("date", new Date(filter.getEndDate()), false));
+            }
+        }
+        return changeDao.findAll(new Specification<PurchaseOrderChange>() {
+            public Predicate toPredicate(Root<PurchaseOrderChange> root, CriteriaQuery<?> query,
+                                         CriteriaBuilder builder) {
+                return query.where(pageInfo.getPredicates(root, query, builder)).getRestriction();
+            }
+        }, pageInfo);
+    }
 }

+ 285 - 3
src/main/webapp/resources/js/index/app.js

@@ -1,6 +1,6 @@
-define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives', 'service/Purc', 'service/Make', 'service/Fa', 'service/Account', 'service/Alert', 'service/CheckTel', 'ui.router', 'ui.bootstrap', 'file-upload', 'ngSanitize', 'service/BaseInfo', 'service/Cart', 'service/ApprovalFlow', 'service/DeputyOrder', 'service/Product', 'service/Token', 'service/ProductUsers', 'service/File', 'service/PublicInquiry', 'service/Customer'], function () {
+define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives', 'service/Purc', 'service/Make', 'service/Fa', 'service/Account', 'service/Alert', 'service/CheckTel', 'ui.router', 'ui.bootstrap', 'file-upload', 'ngSanitize', 'service/BaseInfo', 'service/Cart', 'service/ApprovalFlow', 'service/DeputyOrder', 'service/Product', 'service/Token', 'service/ProductUsers', 'service/File', 'service/PublicInquiry', 'service/Customer', 'service/PurcChange'], function () {
     'use strict';
-    var app = angular.module('myApp', ['toaster', 'angularCharts', 'ngTable', 'ui.router', 'common.services', 'common.directives', 'PurcServices', 'MakeServices', 'FaServices', 'AccountServices', 'AlertServices', 'ui.bootstrap', 'angularFileUpload', 'ngSanitize', 'CheckTelModule', 'ProductServices', 'CartServices', 'ApprvoalFlowService', 'DeputyOrderService', 'ProductInfoServices', 'TokenService', 'ProductUserService', 'ui.tour', 'FileService', 'publicInquiryService', 'CustomerService']);
+    var app = angular.module('myApp', ['toaster', 'angularCharts', 'ngTable', 'ui.router', 'common.services', 'common.directives', 'PurcServices', 'MakeServices', 'FaServices', 'AccountServices', 'AlertServices', 'ui.bootstrap', 'angularFileUpload', 'ngSanitize', 'CheckTelModule', 'ProductServices', 'CartServices', 'ApprvoalFlowService', 'DeputyOrderService', 'ProductInfoServices', 'TokenService', 'ProductUserService', 'ui.tour', 'FileService', 'publicInquiryService', 'CustomerService', 'changeService']);
     app.init = function () {
         angular.bootstrap(document, ['myApp']);
     };
@@ -128,6 +128,15 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
             url: "/deputy/:id",
             templateUrl: "static/tpl/index/purc/deputyOrder_detail.html",
             controller: 'DeputyOrderDetailCtrl'
+        }).state('purc.changeList', {// 新增采购变更单
+            url: "/change",
+            templateUrl: "static/tpl/index/purc/changeList.html",
+            controller: 'PurcChangeListCtrl'
+            /* 招标列表 */
+        }).state('purc.changeNew', {// 新增采购变更单
+            url: "/change_new",
+            templateUrl: "static/tpl/index/purc/change_new.html",
+            controller: 'PurcChangeNewCtrl'
             /* 招标列表 */
         }).state('purc.tenderlist', {
             url: "/tender",
@@ -23858,6 +23867,279 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
         }
 
     }]);
-    
+
+    /**
+     * 采购变更单列表
+     * 
+     * @author hejq
+     * @date 2018-06-25 17:13
+     */
+    app.controller('PurcChangeListCtrl', ['$scope', '$filter', 'change', 'ngTableParams', 'toaster', 'BaseService', 'CurrentRole', function ($scope, $filter, change, ngTableParams, toaster, BaseService, CurrentRole) {
+        BaseService.scrollBackToTop();
+
+        $scope.active = 'todo';
+        $scope.agreedText = '全部';
+        $scope.dateZoneText = '一个月内';
+        $scope.condition = {dateZone: 1};
+
+        /* 时间筛选初始化*/
+        var fromDate = new Date();
+        var toDate = new Date();
+        fromDate.setMonth(fromDate.getMonth() - 1);
+        fromDate.setHours(0, 0, 0, 0);
+        toDate.setHours(23, 59, 59, 999);
+        $scope.condition.dateFrom = fromDate;
+        $scope.condition.dateTo = toDate;
+
+        $scope.changeAgreed = function (agreed) {
+            $scope.condition.agreed = agreed;
+            $scope.agreedText = typeof agreed == 'undefined' ? '全部' : (agreed == 1 ? '已同意' : '不同意');
+            $scope.condition.$agreedOpen = false;
+        };
+        $scope.changeDateZone = function (zone) {
+            $scope.condition.dateZone = zone;
+            $scope.dateZoneText = zone == 1 ? '最近一个月' : (zone == 3 ? '最近三个月' : (zone == 6 ? '最近六个月' : '自定义'));
+            $scope.condition.$dateZoneOpen = false;
+            getDateCondition(zone, $scope.condition);
+            $scope.tableParams.page(1);
+            $scope.tableParams.reload();
+        };
+        $scope.setActive = function (state) {
+            if ($scope.active != state) {
+                $scope.active = state;
+                if ($scope.tableParams.page() == 1)
+                    $scope.tableParams.reload();
+                else
+                    $scope.tableParams.page(1);
+            }
+        };
+
+        var getService = function () {
+            return change;
+        };
+        $scope.tableParams = new ngTableParams({
+            page: 1,
+            count: 20,
+            sorting: {
+                date: 'desc'
+            }
+        }, {
+            total: 0,
+            counts: [5, 10, 25, 50],
+            getData: function ($defer, params) {
+                $scope.loading = true;
+                var pageParams = params.url();
+                pageParams.searchFilter = {
+                    keyword: $scope.keyword,
+                    fromDate: getDateTime($scope.condition.dateFrom),
+                    endDate: getDateTime($scope.condition.dateTo)
+                };
+                getService()[getState($scope.active)].call(null, BaseService.parseParams(pageParams), function (page) {
+                    $scope.loading = false;
+                    if (page) {
+                        params.total(page.totalElement);
+                        $defer.resolve(page.content);
+                        $scope.searchFilterXls = angular.copy(pageParams.searchFilter);//保存当前取值的关键词
+                    }
+                }, function (response) {
+                    $scope.loading = false;
+                    toaster.pop('error', '数据加载失败', response.data);
+                });
+            }
+        });
+
+        $scope.openDatePicker = function ($event, item, openParam) {
+            $event.preventDefault();
+            $event.stopPropagation();
+            item[openParam] = !item[openParam];
+        };
+
+        $scope.openFilterDatePicker = function ($event, item, openParam) {
+            $event.preventDefault();
+            $event.stopPropagation();
+            item[openParam] = !item[openParam];
+            if ($scope.condition.dateFrom && $scope.condition.dateTo && !item[openParam]) {
+                $scope.tableParams.reload();
+            }
+        };
+
+        // 搜索框回车
+        $scope.onSearch = function (keyword) {
+            $scope.tableParams.page(1);
+            $scope.tableParams.reload();
+        };
+
+        // 导出
+        $scope.exportXls = function () {
+            PurcChange.exportXls({}, {}, function (data) {
+                if (data.success){
+                    window.location.href = 'sale/changes/xls?_state='+$scope.active+'&searchFilter='+encodeURIComponent(angular.toJson($scope.searchFilterXls));
+                }
+            }, function (response) {
+                toaster.pop('error', '数据加载失败', response.data);
+            });
+        }
+    }]);
+
+    /**
+     * 新增采购变更单
+     * 
+     * @author hejq
+     * @date 2018-06-25 16:38
+     */
+    app.controller('PurcChangeNewCtrl', ['$scope', 'toaster', 'BaseService', 'AuthenticationService', '$modal',
+        function ($scope, toaster, BaseService, AuthenticationService, $modal) {
+        // 获取登录人员信息
+        AuthenticationService.getAuthentication().success(function (data) {
+            $scope.user = data;
+            $scope.change = {
+                date: new Date(),
+                recorder: $scope.user.userName
+            }
+        });
+
+        $scope.getEnableOrders = function() {
+            var modalInstance = $modal.open({
+                animation: true,
+                templateUrl: 'static/tpl/index/search/enterpirseInfo.html',
+                controller: 'EnableChangeListCtrl',
+                resolve: {
+                    enname: function () {
+                        return name
+                    }
+                }
+            });
+            modalInstance.result.then(function (data) {
+                InvitationRecord.invite({formStore: data}, {}, function (data) {
+                    if (data.success) {
+                        toaster.pop('success', '提示', data.success);
+                    }
+                    if (data.error) {
+                        toaster.pop('error', '提示', data.error);
+                    }
+                }, function (response) {
+                    toaster.pop('error', '提示', response.data);
+                });
+            });
+        }
+    }]);
+
+    /**
+     * 获取课已作为采购变更单的采购单
+     *
+     * @author hejq
+     * @date 2018-06-25 18:41
+     */
+    app.controller('EnableChangeListCtrl', ['$scope', 'change', 'BaseService', 'ngTableParams', 'toaster', '$modalInstance',
+        function ($scope, change, BaseService, ngTableParams, toaster, $modalInstance) {
+
+            $scope.tableParams = new ngTableParams({
+                page: 1,
+                count: 5,
+                sorting: {
+                    'id': 'desc'
+                }
+            }, {
+                total: 0,
+                counts: [],
+                getData: function ($defer, params) {
+                    $scope.loading = true;
+                    var pageParams = params.url();
+                    var realActive = {};
+                    pageParams.searchFilter = { // 筛选条件
+                        keyword: $scope.keyword
+                        fromDate: getDateTime($scope.condition.dateFrom),
+                        endDate: getDateTime($scope.condition.dateTo)
+                    };
+                    change.getEnableOrderList.call(null, BaseService.parseParams(pageParams), function (page) {
+                        $scope.loading = false;
+                        if (page) {
+                            params.total(page.totalElements);
+                            $defer.resolve(page.content);
+                        }
+                    }, function (response) {
+                        $scope.loading = false;
+                        toaster.pop('error', '数据加载失败', response.data);
+                    });
+                }
+            });
+
+            $scope.close = function () {
+                $modalInstance.close();
+                window.location.reload();
+            };
+
+
+            $scope.checks = {
+                checked: false
+            };// 全选框
+
+            $scope.checkAll = function () {
+                angular.forEach($scope.tableParams.data, function (message) {
+                    message.checked = $scope.checks.checked;
+                });
+            };
+
+            // 单选
+            $scope.checkOne = function (vendor) {
+                vendor.checked = true;
+
+                var checked = true;
+                angular.forEach($scope.tableParams.data, function (message) { // 单选全部时,全选选中
+                    if (!message.checked) {
+                        checked = false;
+                    }
+                });
+                $scope.checks.checked = checked;
+            };
+
+            // 单反选
+            $scope.unCheckOne = function (vendor) {
+                vendor.checked = false;
+                $scope.checks.checked = false;
+            };
+
+            /**
+             * 当前页标为已读
+             */
+            $scope.setRead = function () {
+                $scope.loading = true;
+                var messageIds = [];
+                angular.forEach($scope.tableParams.data, function(message) {
+                    messageIds.push(message.id);
+                });
+                PagingRelease.setPageRead({}, messageIds, function (data) {
+                    $scope.loading = false;
+                    if (data.success) {
+                        toaster.pop("success", "设置已读成功");
+                    }
+                    if (data.error) {
+                        toaster.pop("error", "设置已读失败");
+                    }
+                    $scope.tableParams.page(1);
+                    $scope.tableParams.reload();
+                });
+            };
+
+            // 点击内容连接之后,信息标为已读
+            $scope.setOneRead = function (id) {
+                $scope.loading = true;
+                $modalInstance.close();
+                PagingRelease.setMessageRead({id: id}, {}, function (data) {
+                    $scope.loading = false;
+                }, function (response) {
+                    $scope.loading = false;
+                    toaster.pop('error', '提示', response.data);
+                });
+            };
+
+            // 搜索框回车
+            $scope.onSearch = function () {
+                $scope.tableParams.page(1);
+                $scope.tableParams.reload();
+            };
+
+        }]);
+
     return app;
 });

+ 45 - 0
src/main/webapp/resources/js/index/services/PurcChange.js

@@ -0,0 +1,45 @@
+/**
+ * 采购变更service
+ * 
+ * @author hejq
+ * @date 2018-06-25 17:06
+ */
+define([ 'ngResource'], function() {
+    angular.module('changeService', [ 'ngResource']).factory('change', ['$resource', function($resource) {
+        return $resource('purc/change/info', {}, {
+            /**
+             * 以客户角度,获取全部采购变更单
+             */
+            getAll: {
+                
+            },
+            /**
+             * 以客户角度,获取待处理的采购变更单
+             */
+            getTodo: {
+                params: {
+                    _state: 'todo'
+                }
+            },
+            /**
+             * 以客户角度,获取已确认的采购变更单
+             */
+            getDone: {
+                params: {
+                    _state: 'done'
+                }
+            },
+            /**
+             * 以客户角度,获取无需确认的采购变更单
+             */
+            getUnread: {
+                params: {
+                    _state: 'unread'
+                }
+            },
+            getEnableOrderList: {
+                url: 'purc/change/enable/orderList'
+            }
+        })
+    }])
+});

+ 392 - 0
src/main/webapp/resources/tpl/index/purc/changeList.html

@@ -0,0 +1,392 @@
+<style>
+.order-table .header>th {
+	height: 38px;
+	text-align: center;
+	background: #f5f5f5;
+	border-top: 1px solid #e8e8e8;
+	border-bottom: 1px solid #e8e8e8;
+}
+
+.order-table .sep-row {
+	height: 10px;
+}
+
+.order-table .selector {
+	vertical-align: middle;
+	margin: 0 0 2px 0;
+}
+
+.toolbar label {
+	margin-right: 10px;
+	margin-bottom: 0;
+}
+
+.toolbar .select_all {
+	margin: 0 6px 0 10px;
+	line-height: 20px;
+}
+
+.toolbar .btn {
+	-moz-border-radius: 2px;
+	margin-right: 5px;
+	border: 1px solid #dcdcdc;
+	border-radius: 2px;
+	-webkit-border-radius: 2px;
+}
+
+.order-table .order-hd {
+	background: #f5f5f5;
+	height: 40px;
+	line-height: 40px;
+}
+
+.order-table .order-hd td.first {
+	padding-left: 20px;
+}
+
+.order-table .order-hd .order-main span {
+	margin-right: 8px;
+}
+
+.order-table .order-hd .order-code {
+	font-style: normal;
+	font-family: verdana;
+}
+
+.order-table .order-hd .order-sum {
+	padding: 0 5px;
+}
+
+.order-table .order-info {
+	padding-left: 45px;
+}
+
+.order-table>tbody {
+	border: 1px solid transparent;
+}
+
+.order-table>tbody:hover {
+	border-color: #56a022;
+	border-width: 2px;
+}
+
+.order-table .operates {
+	display: none;
+}
+
+.order-table>tbody:hover .operates {
+	display: block;
+}
+
+.order-table .order-bd {
+	border-bottom: 1px solid #e6e6e6;
+}
+
+.order-table .order-bd>td {
+	padding: 10px 5px;
+	vertical-align: top;
+	position: relative;
+}
+
+.order-table .order-bd .product {
+	padding-left: 20px;
+}
+
+.menu .new-dot{
+	width: 20px;
+	height: 20px;
+	line-height: 20px;
+	font-size: 12px;
+	color: #fff;
+	font-weight: inherit;
+	top: -2px;
+}
+</style>
+<link rel="stylesheet" href="static/css/public.css">
+<div class="block"  id="public">
+<div class="loading in" ng-class="{'in': loading}">
+	<i></i>
+</div>
+<div class="pub-com_head">
+	<span>客户采购变更单</span>
+	<div class="p-right">
+		<a ui-sref="purc.changeNew" type="button" title="新增采购变更单"><i class="fa fa-plus-square fa-fw"></i>新增</a>
+		<a href="#" ng-click="exportXls()" target="_self" class="text-simple" title="导出Excel表格"><i class="fa fa-file-text fa-fw"></i>导出</a>
+	</div>
+</div>
+<div class="menu condition block">
+		<div class="row">
+			<div class="col-xs-4">
+				<div class="btn-group btn-group-sm btn-group-justified">
+					<div class="btn-group btn-group-sm">
+						<button type="button" class="btn btn-default btn-line"
+							ng-class="{'btn-info':active=='all'}" ng-click="setActive('all')">全部
+							<b class="new-dot" ng-if="unread.all > 0">{{unread.all>99?'99+':unread.all}}</b>
+						</button>
+					</div>
+					<div class="btn-group btn-group-sm">
+						<button type="button" class="btn btn-default btn-line"
+							ng-class="{'btn-info':active=='done'}" ng-click="setActive('done');setOrdersReadByState()">已处理
+							<b class="new-dot" ng-if="unread.replied > 0">{{unread.replied>99?'99+':unread.replied}}</b>
+						</button>
+					</div>
+					<div class="btn-group btn-group-sm">
+						<button type="button" class="btn btn-default btn-line"
+							ng-class="{'btn-info':active=='todo'}" ng-click="setActive('todo')">待确认
+							<b class="new-dot" ng-if="unread.notReply > 0">{{unread.notReply>99?'99+':unread.notReply}}</b>
+						</button>
+					</div>
+					<div class="btn-group btn-group-sm">
+						<button type="button" class="btn btn-default btn-line"
+							ng-class="{'btn-info':active=='unread'}" ng-click="setActive('unread')">无需确认
+							<b class="new-dot" ng-if="unread.unNeedReply > 0">{{unread.unNeedReply>99?'99+':unread.unNeedReply}}</b>
+						</button>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+<!--<div class="height10">&nbsp;</div>-->
+	<div class="condition block">
+		<div class="search-bg condition block" style="padding: 10px 15px;">
+			<div class="row">
+				<div id="topSearch" style="float: left">
+					<a ng-click="changeDateZone(1);condition.$open=false" title="最近一个月" ng-class="{'active':condition.dateZone=='1'}">最近一个月</a>
+					<a ng-click="changeDateZone(3);condition.$open=false" title="最近三个月" ng-class="{'active':condition.dateZone=='3'}">最近三个月</a>
+					<a ng-click="changeDateZone(6);condition.$open=false" title="最近六个月" ng-class="{'active':condition.dateZone=='6'}">最近六个月</a>
+					<a ng-click="condition.$open=!condition.$open;changeDateZone(-1)" title="自定义" ng-class="{'active':condition.dateZone=='-1'}" >自定义</a>
+				</div>
+				<div class="col-xs-6" style="float: right;">
+					<div class="search">
+						<div class="form-group form-group-sm has-feedback" dropdown auto-close="outsideClick"
+							 on-toggle="searchAdvance=open">
+							<input type="search" class="form-control input-sm" ng-model="keyword"
+								   ng-search="onSearch(keyword)" placeholder="输入单据编号、客户名称、物料名称搜索" style="width: 100%"/>
+							<a class="btn input-group-addon" ng-click="onSearch(keyword)">搜索</a>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="more-list more" ng-class="{'open': condition.$open}">
+				<form class="form-inline">
+					<div class="form-group ">
+						<label>日期:</label>
+						<div class="btn-group btn-menu" dropdown is-open="condition.$dateZoneOpen">
+							<ul class="dropdown-menu">
+								<li><a ng-click="changeDateZone(1)">一个月内</a></li>
+								<li><a ng-click="changeDateZone(6)">半年内</a></li>
+								<li><a ng-click="changeDateZone()">半年前</a></li>
+							</ul>
+						</div>
+						<div class="form-group input-group input-group-xs input-trigger">
+							<input type="text" ng-model="condition.dateFrom"
+								   class="form-control" placeholder="从"
+								   datepicker-popup="yyyy-MM-dd" is-open="condition.$fromOpened"
+								   ng-required="true" max-date = "condition.dateTo"
+								   current-text="今天" clear-text="清除" close-text="关闭"
+								   datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+								   ng-focus="openFilterDatePicker($event, condition, '$fromOpened')">
+							<span class="input-group-btn">
+							<button type="button" class="btn btn-default"
+									ng-click="openFilterDatePicker($event, condition, '$fromOpened')">
+								<i class="fa fa-calendar"></i>
+							</button>
+						</span>
+						</div>
+						<div class="form-group input-group input-group-xs input-trigger">
+							<input type="text" ng-model="condition.dateTo"
+								   class="form-control" placeholder="到"
+								   datepicker-popup="yyyy-MM-dd" is-open="condition.$toOpened"
+								   ng-required="true" min-date = "condition.dateFrom"
+								   current-text="今天" clear-text="清除" close-text="关闭"
+								   datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+								   ng-focus="openFilterDatePicker($event, condition, '$toOpened')">
+							<span class="input-group-btn">
+							<button type="button" class="btn btn-default"
+									ng-click="openFilterDatePicker($event, condition, '$toOpened')">
+								<i class="fa fa-calendar"></i>
+							</button>
+						</span>
+						</div>
+					</div>
+				</form>
+			</div>
+		</div>
+	</div>
+<table class="order-table block" ng-table="tableParams">
+	<thead>
+		<tr class="header">
+			<th width="580">产品</th>
+			<th width="100">单价</th>
+			<th width="50">数量</th>
+			<th width="120">交货日期</th>
+			<th width="120">变更内容</th>
+			<th width="70">操作</th>
+		</tr>
+		<tr class="sep-row">
+			<td colspan="6"></td>
+		</tr>
+	</thead>
+	<tbody ng-repeat="change in $data track by change.id">
+		<tr class="order-hd">
+			<td class="first" colspan="4">
+				<div class="order-main">
+					<a href="javascript:void(0)" ng-if="!isUnread(change.id)">
+						<i class="fa fa-circle-thin"></i>
+					</a>
+					<a href="javascript:void(0)" ng-if="isUnread(change.id)">
+						<i class="fa fa-circle" style="color: #f40;"></i>
+					</a>&nbsp;&nbsp;
+					<span class="text-num text-bold"
+						ng-bind="::change.date | date:'yyyy-MM-dd'"></span>
+					<span
+							ng-bind="::change.enterprise.enName"></span>
+					<span>流水号:<a title="查看变更单详情"
+						class="text-num order-detail" ng-bind="::change.code" ui-sref="sale.change_detail({id:change.id})" target="_self"
+						ng-click="setOrdersRead(change.id)"></a>
+					</span>
+					<span>订单:<a title="查看采购单详情"
+						class="text-num text-bold order-detail" ng-bind="::change.orderCode" ui-sref="sale.order_detail({id:change.orderId})" target="_blank"></a></span>
+				</div>
+			</td>
+			<td colspan="1" class="" style="line-height: 20px; padding-top: 5px;">
+				<span ng-bind="change.description"></span>
+			</td>
+			<td colspan="1" class="text-center">
+				<div >
+					 <a class="text-muted"
+						title="回复" ng-click="change.$editing=!change.$editing;setOrdersRead(change.id)" ng-show="change.status == 200 && change.unNeedReply != 1">回复</i></a>
+				</div>
+			</td>
+		</tr>
+		<tr class="order-hd">
+			<td colspan="6" class="order-info">
+				 <span><span class="text-bold">币别:</span>
+				 	<span ng-class="{'text-inverse': change.newCurrency != change.oldCurrency}" ng-bind="::change.newCurrency"></span>&nbsp;
+				 	<s class="text-muted" ng-if="change.newCurrency != change.oldCurrency" ng-bind="::change.oldCurrency"></s>&nbsp;&nbsp;&nbsp;&nbsp;
+				 </span>
+				<!-- <span><span class="text-bold">汇率:</span>
+				 	<span ng-class="{'text-inverse': change.newRate != change.oldRate}" ng-bind="::change.newRate"></span>&nbsp;
+				 	<s class="text-muted" ng-if="change.newRate != change.oldRate" ng-bind="::change.order.rate"></s>&nbsp;&nbsp;&nbsp;&nbsp;
+				 </span>-->
+				 <span><span class="text-bold">支付方式:</span>
+				 	<span ng-class="{'text-inverse': change.newPayments != change.oldPayments}" ng-bind="::change.newPayments"></span>&nbsp;
+				 	<s class="text-muted" ng-if="change.newPayments != change.oldPayments" ng-bind="::change.oldPayments"></s>&nbsp;&nbsp;&nbsp;&nbsp;
+				 </span>
+				<span><span class="text-bold" ng-if="change.newApVendorName">应付供应商:</span>
+				 	<span ng-class="{'text-inverse': change.apVendorName != change.newApVendorName}" ng-bind="::change.newApVendorName"></span>&nbsp;
+				 	<s class="text-muted" ng-if="change.apVendorName != change.newApVendorName" ng-bind="::change.apVendorName"></s>
+				</span>
+			</td>
+		</tr>
+		<tr ng-if="change.$editing" class="br-b">
+			<td colspan="2"></td>
+			<td colspan="2">
+				<div style="margin: 0 auto" ng-init="change.$agreed = 1">
+					<div class="form-group">
+						<label class="radio-inline"> <input type="radio"
+							ng-model="change.$agreed" value="1"> 同意
+						</label> <label class="radio-inline"> <input type="radio"
+							ng-model="change.$agreed" value="0"> 不同意
+						</label>
+					</div>
+				</div>
+			</td>
+			<td>
+				<div class="form-group">
+					<input type="text" ng-model="change.replyRemark"
+						class="form-control input-xs" placeholder="回复备注">
+				</div>
+			</td>
+			<td class="text-center"><br>
+				<div>
+					<a ng-click="change.$editing=!change.$editing">取消</a>
+				</div> <br>
+				<div>
+					<a ng-click="onReplyClick(change);setOrdersRead(change.id)" class="text-inverse">确认回复</a>
+				</div> <br></td>
+		</tr>
+		<tr class="order-bd" ng-repeat="item in ::change.orderChangeItems">
+			<td class="product">
+				<div>
+					<span class="text-num text-bold" ng-class="{'text-inverse': item.oldProduct.code != item.newProduct.code}" ng-bind="::item.newProduct.code"></span><span class="text-muted">(型号)</span>
+					<span class="text-light">&nbsp;&nbsp;&nbsp;订单第 <span class="text-num">{{::item.orderItemNumber}}</span> 行</span>
+				</div>
+				<div ng-show="item.oldProduct.code != item.newProduct.code">
+					<s class="text-num text-bold"  ng-bind="::item.oldProduct.code"></s>
+				</div>
+				<div>
+					<span ng-class="{'text-inverse': item.oldProduct.title != item.newProduct.title}" ng-bind="::item.newProduct.title"></span><span class="text-muted">(名称)</span>
+				</div>
+				<div><s ng-show="item.oldProduct.title != item.newProduct.title" ng-bind="::item.oldProduct.title"></s></div>
+				<div>
+					<span ng-class="{'text-inverse': item.oldProduct.spec != item.newProduct.spec}" ng-bind="::item.newProduct.spec"></span><span class="text-muted">(规格)</span>
+				</div>
+				<div><s class="text-muted" ng-show="item.oldProduct.spec != item.newProduct.spec" ng-bind="::item.oldProduct.spec"></s></div>
+			</td>
+			<td class="text-center">
+				<div class="text-num" ng-if="!isUser"
+					ng-class="{'text-inverse': item.newPrice != item.oldPrice}"
+					title="{{item.newPrice}}" ng-bind="::item.newPrice | number:6"></div>
+				<div ng-if="isUser" ng-class="{'text-inverse': item.newPrice != item.oldPrice}">-</div>
+				<div ng-show="item.newPrice != item.oldPrice">
+					<s ng-if="!isUser" class="text-num text-muted" ng-bind="::item.oldPrice | number:6"></s>
+					<s ng-if="isUser" class="text-num text-muted" >-</s>
+				</div>
+				<div class="text-muted">
+					税率 <span class="text-num" ng-class="{'text-inverse': item.newTaxrate != item.oldTaxrate}">
+						{{::item.newTaxrate}}%
+					</span> <s ng-if="item.newTaxrate != item.oldTaxrate">{{::item.oldTaxrate}}%</s>
+				</div>
+			</td>
+			<td class="text-center">
+				<div class="text-num"
+					ng-class="{'text-inverse': item.newQty != item.oldQty}"
+					title="{{item.newQty}}" ng-bind="::item.newQty"></div>
+				<div ng-show="item.newQty != item.oldQty">
+					<s class="text-num text-muted" title="{{item.oldQty}}"
+						ng-bind="::item.oldQty"></s>
+				</div>
+				<div class="text-muted" ng-bind="::item.newProduct.unit"></div>
+			</td>
+			<td class="text-center br-l">
+				<div class="text-num"
+					ng-class="{'text-inverse': item.newDelivery != item.oldDelivery}"
+					ng-bind="::item.newDelivery | date:'yyyy-MM-dd'"></div>
+				<div ng-show="item.newDelivery != item.oldDelivery">
+					<s class="text-num text-muted"
+						ng-bind="::item.oldDelivery | date:'yyyy-MM-dd'"></s>
+				</div>
+			</td>
+			<td class="text-center br-l" colspan="2">
+				<div ng-bind="::item.description"></div>
+				<div ng-if="change.agreed == 1 && !change.unNeedReply" class="block">
+					<span class="text-trans success">已同意</span>
+				</div>
+				<div ng-if="change.unNeedReply" class="block">
+					<span class="text-trans success">无需确认</span>
+				</div>
+				<div ng-if="change.agreed == 0" class="block">
+					<span class="text-trans warning">不同意</span>
+				</div>
+			</td>
+		</tr>
+	</tbody>
+	<tbody ng-if="tableParams.total() == 0">
+	<tr>
+		<td colspan="6">
+			<div id="empty">
+				<div class="left_img">
+					<a href="http://www.ubtob.com/" target="_blank" title="优软云首页"><img src="static/img/empty/uas_empty.png"></a>
+					<a href="#/index" title="B2B商务首页">B2B 商务</a>
+				</div>
+				<div class="right_link">
+					<p>暂无对应的单据</p>
+					<a href="javascript:location.reload()">点击重新加载<i class="load_icon"></i></a>
+				</div>
+			</div>
+		</td>
+	</tr>
+	</tbody>
+</table>
+</div>

+ 14 - 364
src/main/webapp/resources/tpl/index/purc/change_new.html

@@ -12,15 +12,6 @@
 <body>
 <style>
 /* 日期选择器 */
-    .date-picker {
-        padding-top: 10px;
-    }
-    .date-picker input {
-        border-radius: 0;
-        border: 1px solid #5078cb;
-        border-right: none;
-        font-size: 12px;
-    }
     .date-picker span .btn-open {
         color: #fff;
         background-color: #5078cb;
@@ -45,11 +36,6 @@
         border-radius: 0;
         border: none;
     }
-.input-group-addon {
-	background-color: inherit;
-  	border: 1px solid #e1e1e1;
-  	color: #888 !important;
-}
 .purchase_form01 ul li .dropdown-menu {
 	width: 257px;
 	height: 300px;
@@ -160,152 +146,31 @@
                     <ul>
                         <li>
                             <div class="fl">
-                                <em>流水号:</em>
-                                <span ng-bind="deOrder.code"></span>
+                                <em>变更单号:</em>
+                                <span ng-bind="change.code"></span>
                             </div>
-                            <div class="fr">
-                                <em>制单日期:</em>
-                                <span class="has_time" ng-bind="deOrder.entrydate| date: 'yyyy-MM-dd'"></span>
-                            </div>
-                        </li>
-                        <li>
                             <div class="fl">
-                                <em>状态:</em>
-                                <span ng-bind="deOrder.status"></span>
-                            </div>
-                            <div class="fr">
-                                <em>业务状态:</em>
-                                <span ng-bind="deOrder.prostatus"></span>
-                            </div>
-                        </li>
-                        <li>
-                         	<div class="fl">
-                                <em><b>*</b>主协议签订日期:</em>
-                                 <div class="input-group">
-									<input ng-model="deOrder.madealdate" type="text" class="form-control" 
-										placeholder="点击选择时间" datepicker-popup="yyyy-MM-dd" is-open="deOrder.$madealdate"
-										min-date="getMinDate()" ng-required="true"
-										current-text="今天" clear-text="清除" close-text="关闭"
-										datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
-										ng-focus="openDatePicker($event, deOrder.madealdate.$dateOpen)" readonly>
-									<span class="input-group-btn">
-										<button type="button" class="btn btn-default btn-sm"
-											ng-click="openDatePicker($event, deOrder, '$madealdate')">
-											<i class="fa fa-calendar fa-lg"></i>
-										</button>
-									</span>
+                                <em>采购单号:</em>
+                                <div class="input-group">
+                                    <span class="input-group-btn">
+                                        <button class="btn btn-default" type="button"><i class="fa fa-search"></i></button>
+                                    </span>
+                                    <input type="text" ng-model="change.orderCode" class="form-control" readonly>
                                 </div>
                             </div>
-                            <div class="fr">
-                                <em><b>*</b>主协议编号:</em>
-                                <span><input type="text" class="input01" ng-model="deOrder.madealcode" ng-required="true"></span>
-                            </div>
-                        </li>
-                        <li>
-                            <div class="fl">
-                                <em><b>*</b>终端供应商名称:</em>
-                                <span><!-- <input type="text" class="input01" ng-model="deOrder.tervendor"> -->
-                                	 <input  ng-model="deOrder.tervendor" list="hisvendors" class="select" style="width: 200px" ng-change="getHisKeyword(deOrder.tervendor)">
-	                                    <datalist id="hisvendors">
-	                                    	 <option ng-repeat="vendor in hisvendors" value="{{vendor.vendorname}}">{{vendor.vendorname}}</option>
-	                                    </datalist>
-                                </span>
-                            </div>
-                            <div class="fr">
-                                <em><b>*</b>电话:</em>
-                                <span><input type="text" class="input01" ng-model="deOrder.vendtel" ng-required="true"></span>
-                            </div>
                         </li>
                         <li>
-                            <div class="fl">
-                                <em><b>*</b>联系人:</em>
-                                <span><input type="text" class="input01" ng-model="deOrder.venduser" ng-required="true"></span>
-                            </div>
                             <div class="fr">
-                                <em><b>*</b>供应商发货时间:</em>
-                                 <div class="input-group">
-									<input ng-model="deOrder.shipdate" type="text" class="form-control" 
-										placeholder="点击选择时间" datepicker-popup="yyyy-MM-dd" is-open="deOrder.$shipdate"
-										min-date="getMinDate()" ng-required="true"
-										current-text="今天" clear-text="清除" close-text="关闭"
-										datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
-										ng-focus="openDatePicker($event, deOrder.$dateOpen)" readonly>
-									<span class="input-group-btn">
-										<button type="button" class="btn btn-default btn-sm"
-											ng-click="openDatePicker($event, deOrder, '$shipdate')">
-											<i class="fa fa-calendar fa-lg"></i>
-										</button>
-									</span>
-                                </div>
-                            </div>
-                        </li>
-                        <li>
-                            <div class="fl">
-                                <em><b>*</b>货物包装要求:</em>
-                                <span><input type="text" class="input01" ng-model="deOrder.goodspacking" ng-required="true"></span>
+                                <em>录入人:</em>
+                                <span ng-bind="change.recorder"></span>
                             </div>
                             <div class="fr">
-                                <em><b>*</b>供应商交货方式:</em>
-                                <span>
-                                   <input type="text" class="input01" ng-model="deOrder.deliverymethod" ng-required="true">
-                                </span>
-                            </div>
-                        </li>
-                        <li>
-                            <div class="fl">
-                                <em><b>*</b>我方提货方式:</em>
-                                <span>
-                                    <select name="" class="select" ng-model="deOrder.pickupmethod" ng-init="deOrder.pickupmethod = '自提'">
-                                        <option value="自提">自提</option>
-                                        <option value="委托第三方提货">委托第三方提货</option>
-                                        <option value="贵公司送货">贵公司送货</option>
-                                        <option value="其他">其他</option>
-                                    </select>
-                                </span>
-                            </div>
-                            <div class="fr">
-                                <em><b>*</b>我方付款方式:</em>
-                                <span>
-                                    <input  ng-model="deOrder.paymentmethod" list="paymentmethod" class="select" style="width: 200px">
-	                                    <datalist id="paymentmethod">
-	                                    	 <option ng-repeat="me in methods | orderBy:'-weightid'" value="{{me.value}}">{{me.value}}</option>
-	                                    </datalist>
-                                </span>
-                            </div>
-                        </li>
-                        <li>
-                         	<div class="fl">
-                                <em><b>*</b>我方提货时间:</em>
-                               <span><input type="text" class="input01" ng-model="deOrder.pickupdate" ng-required="true"></span>
-                            </div>
-                            <div class="fr">
-                                <em><b>*</b>交易币别:</em>
-                               <span> 
-	                               	<select name="" class="select" ng-model="deOrder.currency" ng-init="deOrder.currency = 'USD'">
-	                                    <option value="USD">USD</option>
-	                                    <option value="RMB">RMB</option>
-	                                    <option value="HKD">HKD</option>
-	                                </select>
-                                </span>
-                            </div>
-                        </li>
-                         <li>
-                         	<div class="fl">
-                                <em><b>*</b>代采企业:</em>
-                               <span>
-                               		<select name="" class="select" ng-model="deOrder.deputyname" style="width: 200px" ng-change="change(deOrder.deputyname)"
-                               			ng-options="deputyEn.deputyenname as deputyEn.deputyenname for deputyEn in deputyEnterprises">
-                               		<option value="">请选择代采企业</option>
-                               		</select>
-                               </span>
+                                <em>录入日期:</em>
+                                <span class="has_time" ng-bind="change.date| date: 'yyyy-MM-dd'"></span>
                             </div>
                         </li>
                     </ul>
                 </div>
-                <div class="com_title01"><span>下单明细(注:金额单位为{{deOrder.currency}})</span><a ng-click="uplodaByBatch()">批量导入</a>
-                    <span style="margin-left: 345px;">费率:<input ng-model="deOrder.rate" style="width: 80px; height: 30px; font-size: 14px; text-align: center;"> %</span>
-                    <a ng-click="checkPrice(deOrder.rate)">更新订单单价</a>
-                </div>
                 <div class="purchase_xq clearfix">
                     <dl>
                         <dt>
@@ -321,7 +186,7 @@
                             <span>备注</span>
                             <span>操作</span>
                         </dt>
-                        <dd ng-repeat="item in deOrder.deputyOrderItems">
+                       <!-- <dd ng-repeat="">
                             <span class="wid01">{{$index+1}}</span>
                             <span class="wid02"><input type="text" class="text-center" ng-model="item.prodname" ng-required="true"></span>
                             <span><input type="text" class="text-center" ng-model="item.prodcode" ng-required="true"></span>
@@ -333,224 +198,9 @@
                             <span>{{item.unitprice * item.amount | number: 2}}</span>
                             <span><input type="text" class="text-center" ng-model="item.remark"></span>
                             <span><a ng-click="add($index)" style="color: #1f4fb2">添加</a><a ng-click="del($index)" style="color: #d32526"> 删除</a></span>
-                        </dd>
+                        </dd>-->
                     </dl>
                 </div>
-                <!--采购订单-->
-                <div class="com_title01"><span>采购订单</span></div>
-                <div class="purchase_form01 clearfix">
-                    <ul>
-                        <li>
-                            <div class="fl">
-                                <em>总价款({{deOrder.currency}}):</em>
-                                <span >{{deOrder.totalamount| number:6}}</span>
-                            </div>
-                            <div class="fr">
-                            	 <em>订单总价款({{deOrder.currency}}):</em>
-                                <span >{{deOrder.orderamount| number:6 }}</span>
-                            </div>
-                        </li>
-                        <li>
-                        	<div class="fl">
-                            	 <em><b>*</b>订单编号:</em>
-                                <span><input type="text" class="input01" ng-model="deOrder.salecode" ng-required="true" ng-change="checkOrder(deOrder.salecode, deOrder.deputyuu)"></span>
-                            </div>
-                        	<div class="fr">
-                                <em><b>*</b>我方付款提货时间:</em>
-                                 <div class="input-group">
-									<input ng-model="deOrder.paydeldate" type="text" class="form-control" 
-										placeholder="点击选择时间" datepicker-popup="yyyy-MM-dd" is-open="deOrder.$paydeldate"
-										min-date="getMinDate()" ng-required="true"
-										current-text="今天" clear-text="清除" close-text="关闭"
-										datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
-										ng-focus="openDatePicker($event, deOrder.$dateOpen)" readonly>
-									<span class="input-group-btn">
-										<button type="button" class="btn btn-default btn-sm"
-											ng-click="openDatePicker($event, deOrder, '$paydeldate')">
-											<i class="fa fa-calendar fa-lg"></i>
-										</button>
-									</span>
-                                </div>
-                            </div>
-                        </li>
-                        <li>
-                            <div class="fl">
-                                <em>我方付款金额({{deOrder.currency}}):</em>
-                                <span >{{deOrder.totalpayament| number: 6 }}</span>
-                            </div>
-                            <div class="fr">
-                                <em>我方付款日期:</em>
-                                <span ng-bind="deOrder.paymentdate"></span>
-                            </div>
-                        </li>
-                        <li>
-                            <div class="fl">
-                                <em><b>*</b>风险承担方式:</em>
-                                <span><input type="text" class="input01" ng-model="deOrder.riskmethod" ng-required="true" readonly></span>
-                            </div>
-                            <div class="fr">
-                                <em><b>*</b>运、税费承担方式:</em>
-                                <span><input type="text" class="input01" ng-model="deOrder.taxpaymentmethod" ng-required="true" readonly></span>
-                            </div>
-                        </li>
-                    </ul>
-                </div>
-                <!--付款确认书-->
-                <div class="com_title01"><span>付款确认书</span></div>
-                <div class="purchase_form01 clearfix">
-                    <ul>
-                        <li>
-                            <div class="fl wid100">
-                                <em><b>*</b>终端供应商地址:</em>
-                                <span><input type="text" class="input01" ng-model="deOrder.tervendaddress" ng-required="true"></span>
-                            </div>
-                        </li>
-                        <li>
-                            <div class="fl wid100">
-                                <em><b>*</b>公司全称(英文):</em>
-                                <span><input type="text" class="input01" ng-model="deOrder.companyname" ng-required="true"></span>
-                            </div>
-                        </li>
-                        <li>
-                            <div class="fl">
-                                <em><b>*</b>要求付汇日期:</em>
-                                 <div class="input-group">
-									<input ng-model="deOrder.requirepaydate" type="text" class="form-control" 
-										placeholder="点击选择时间" datepicker-popup="yyyy-MM-dd" is-open="deOrder.$requirepaydate"
-										min-date="getMinDate()" ng-required="true"
-										current-text="今天" clear-text="清除" close-text="关闭"
-										datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
-										ng-focus="openDatePicker($event, deOrder.$dateOpen)" readonly>
-									<span class="input-group-btn">
-										<button type="button" class="btn btn-default btn-sm"
-											ng-click="openDatePicker($event, deOrder, '$requirepaydate')">
-											<i class="fa fa-calendar fa-lg"></i>
-										</button>
-									</span>
-                                </div>
-                            </div>
-                            <div class="fr">
-                                <em>实际付汇日期:</em>
-                                <span ng-bind="deOrder.actualpaydate"></span>
-                            </div>
-                        </li>
-                        <li>
-                            <div class="fl">
-                                <em>付款金额({{deOrder.currency}}):</em>
-                                <span>{{deOrder.usdpayment| number: 6}}</span>
-                            </div>
-                            <div class="fr">
-                                <em>实际付款金额({{deOrder.currency}}):</em>
-                                <span ng-bind="deOrder.actusdpayment| number: 6"></span>
-                            </div>
-                        </li>
-                        <li>
-                            <div class="fl">
-                                <em><b>*</b>银行名称(英文):</em>
-                                <span><input type="text" class="input01" ng-model="deOrder.bankname" ng-required="true"></span>
-                            </div>
-                            <div class="fr">
-                                <em><b>*</b>银行账号:</em>
-                                <span><input type="text" class="input01" ng-model="deOrder.bankaccount" ng-required="true"></span>
-                            </div>
-                        </li>
-                        <li>
-                            <div class="fl wid100">
-                                <em><b>*</b>银行地址(英文):</em>
-                                <span><input type="text" class="input01" ng-model="deOrder.bankaddress" ng-required="true"></span>
-                            </div>
-                        </li>
-                        <li>
-                            <div class="fl">
-                                <em><b>*</b>银行代码:</em>
-                                <span><input type="text" class="input01" ng-model="deOrder.bankcode" ng-required="true"></span>
-                            </div>
-                            <div class="fr">
-                                <em>其它相关资料:</em>
-                                <span><input type="text" class="input01" ng-model="deOrder.otherdata"></span>
-                            </div>
-                        </li>
-                    </ul>
-                </div>
-                <!--买卖合同-->
-                <div class="com_title01"><span>买卖合同</span></div>
-                <div class="purchase_form01 clearfix">
-                    <ul>
-                        <li>
-                            <div class="fl">
-                                <em><b>*</b>合同编号: </em>
-                                <span><input type="text" class="input01" ng-model="deOrder.salepocode" ng-required="true"></span>
-                            </div>
-                             <div class="fr">
-                                <em><b>*</b>供应商方法定代表人: </em>
-                                <span><input type="text" class="input01" ng-model="deOrder.legalrepresent" ng-required="true"></span>
-                            </div>
-                        </li>
-                         <li>
-                            <div class="fl">
-                                <em><b>*</b>付款公司: </em>
-                                <span><input type="text" class="input01" ng-model="deOrder.paycomname" ng-click="dbfindPayCompany(deOrder.deputyuu)"></span>
-                            </div>
-                            <div class="fr">
-                                <em><b>*</b>付款公司地址:</em>
-                                <span><input type="text" class="input01" ng-model="deOrder.paycomaddress" ng-required="true"></span>
-                            </div>
-                        </li>
-                        <li>
-                        	<div class="fl">
-                                <em><b>*</b>供应商方法人电话: </em>
-                                <span><input type="text" class="input01" ng-model="deOrder.enfax" ng-required="true"></span>
-                            </div>
-                            <div class="fr">
-                                <em><b>*</b>货款支付时间:</em>
-                                 <div class="input-group">
-									<input ng-model="deOrder.paydate" type="text" class="form-control" 
-										placeholder="点击选择时间" datepicker-popup="yyyy-MM-dd" is-open="deOrder.$paydate"
-										min-date="getMinDate()" ng-required="true"
-										current-text="今天" clear-text="清除" close-text="关闭"
-										datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
-										ng-focus="openDatePicker($event, deOrder.$dateOpen)" readonly>
-									<span class="input-group-btn">
-										<button type="button" class="btn btn-default btn-sm"
-											ng-click="openDatePicker($event, deOrder, '$paydate')">
-											<i class="fa fa-calendar fa-lg"></i>
-										</button>
-									</span>
-                                </div>
-                            </div>
-                        </li>
-                        <li>
-                       	 	<div class="fl">
-                                <em><b>*</b>货款支付方式:</em>
-                                <span>
-                                	<input ng-model="deOrder.paymethod" list="paymethod" class="select">
-                                	<datalist id="paymethod">
-                                	 	<option value="月结30天">月结30天</option>
-                                	 	<option value="全款T/T">全款T/T</option>
-                                	</datalist>
-                                </span>
-                            </div>
-                            <div class="fr">
-                                <em><b>*</b>交货时间:</em>
-                                 <div class="input-group">
-									<input ng-model="deOrder.deliverydate" type="text" class="form-control" 
-										placeholder="点击选择时间" datepicker-popup="yyyy-MM-dd" is-open="deOrder.$deliverydate"
-										min-date="getMinDate()" ng-required="true"
-										current-text="今天" clear-text="清除" close-text="关闭"
-										datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
-										ng-focus="openDatePicker($event, deOrder.$dateOpen)" readonly>
-									<span class="input-group-btn">
-										<button type="button" class="btn btn-default btn-sm"
-											ng-click="openDatePicker($event, deOrder, '$deliverydate')">
-											<i class="fa fa-calendar fa-lg"></i>
-										</button>
-									</span>
-                                </div>
-                            </div>
-                            <div class="fr"></div>
-                        </li>
-                    </ul>
-                </div>
                 <div class="save">
                 	<button ng-click="save('保存')">保存</button>
                 	<button ng-click="save('已提交')">提交</button>

+ 1 - 1
src/main/webapp/resources/tpl/index/purc/left.html

@@ -31,7 +31,7 @@
 		<li ui-sref-active="active"><a ui-sref="purc.makeoutorder"><em class="new-dot" ng-if="false"></em>委外订单</a></li>
 	</ul>
 	<ul class="list-unstyled">
-		<li ui-sref-active="active"><a ui-sref="purc.change"><em class="new-dot" ng-if="false"></em>采购变更单</a></li>
+		<li ui-sref-active="active"><a ui-sref="purc.changeList"><em class="new-dot" ng-if="false"></em>采购变更单</a></li>
 	</ul>
 	<!-- 测试 -->
 	<!-- <ul class="list-unstyled">