Browse Source

Merge remote-tracking branch 'origin/dev-mysql' into dev-mysql

suntg 7 years ago
parent
commit
cd15be3034

+ 6 - 1
src/main/java/com/uas/platform/b2c/core/support/view/JxlsExcelView.java

@@ -8,6 +8,7 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
 import org.springframework.core.io.Resource;
 import org.springframework.core.io.support.LocalizedResourceHelper;
+import org.springframework.util.StringUtils;
 import org.springframework.web.servlet.support.RequestContextUtils;
 import org.springframework.web.servlet.view.document.AbstractExcelView;
 
@@ -87,7 +88,11 @@ public class JxlsExcelView extends AbstractExcelView {
 		}
 
 		public Export() {
-			this.user = SystemSession.getUser().getUserName();
+			if (StringUtils.isEmpty(SystemSession.getUser())) {
+				this.user = "游客";
+			} else {
+				this.user = SystemSession.getUser().getUserName();
+			}
 			this.date = DateFormatUtils.DATETIME_FORMAT.format(new Date());
 		}
 	}

+ 74 - 0
src/main/java/com/uas/platform/b2c/trade/seek/controller/SeekSalesmanInfoController.java

@@ -0,0 +1,74 @@
+package com.uas.platform.b2c.trade.seek.controller;
+
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
+import com.uas.platform.b2c.trade.seek.model.SeekSalesmanInfo;
+import com.uas.platform.b2c.trade.seek.model.SeekSalesmanMember;
+import com.uas.platform.b2c.trade.seek.service.SeekSalesmanInfoService;
+import com.uas.platform.b2c.trade.support.ResultMap;
+import com.uas.platform.core.logging.BufferedLoggerManager;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 求购-优质采购商操作接口类
+ *
+ * @author liusw
+ * @version 2017/12/13 10:38
+ */
+@RestController
+@RequestMapping("/seek/salesman")
+public class SeekSalesmanInfoController {
+
+    /**
+     * 日志
+     */
+    private static final UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
+    @Autowired
+    private SeekSalesmanInfoService seekSalesmanInfoService;
+
+    /**
+     * 获取求购-业务员分配列表
+     * @param params
+     * @param status
+     * @param salesman
+     * @param keyword
+     * @return
+     */
+    @RequestMapping(value = "/getPageInfo", method = RequestMethod.GET)
+    public Page<SeekSalesmanInfo> getPageInfo(PageParams params, Integer status, String salesman, String keyword) {
+        PageInfo info = new PageInfo(params);
+        logger.log("求购", "获取求购-业务员分配列表");
+        return seekSalesmanInfoService.getPageInfo(info, status, salesman, keyword);
+    }
+
+    /**
+     * 业务员求购接单
+     * @param id
+     * @return
+     */
+    @RequestMapping(value = "/orders", method = RequestMethod.POST)
+    public ResultMap orders(Long id) {
+        User user = SystemSession.getUser();
+        logger.log("求购", "业务员求购接单,uu为" + user.getUserUU());
+        return seekSalesmanInfoService.orders(id, user);
+    }
+
+    /**
+     * 获取业务员列表
+     * @return
+     */
+    @RequestMapping(value = "/getMembers", method = RequestMethod.GET)
+    public List<SeekSalesmanMember> getMembers(){
+        logger.log("求购", "获取业务员列表");
+        return seekSalesmanInfoService.getMembers();
+    }
+
+}

+ 15 - 0
src/main/java/com/uas/platform/b2c/trade/seek/dao/SeekSalesmanDao.java

@@ -0,0 +1,15 @@
+package com.uas.platform.b2c.trade.seek.dao;
+
+import com.uas.platform.b2c.trade.seek.model.SeekSalesman;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+
+@Repository
+public interface SeekSalesmanDao extends JpaSpecificationExecutor<SeekSalesman>,
+        JpaRepository<SeekSalesman, Long> {
+
+    SeekSalesman  findByPublicId(Long publicId);
+}
+

+ 20 - 0
src/main/java/com/uas/platform/b2c/trade/seek/dao/SeekSalesmanInfoDao.java

@@ -0,0 +1,20 @@
+package com.uas.platform.b2c.trade.seek.dao;
+
+import com.uas.platform.b2c.trade.seek.model.SeekPurchaseBom;
+import com.uas.platform.b2c.trade.seek.model.SeekSalesmanInfo;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 求购业务Dao
+ *
+ * @author liusw
+ * @version 2017/12/12 16:48
+ */
+@Repository
+public interface SeekSalesmanInfoDao extends JpaSpecificationExecutor<SeekSalesmanInfo>,
+        JpaRepository<SeekSalesmanInfo, Long> {
+
+}
+

+ 15 - 0
src/main/java/com/uas/platform/b2c/trade/seek/dao/SeekSalesmanMemberDao.java

@@ -0,0 +1,15 @@
+package com.uas.platform.b2c.trade.seek.dao;
+
+import com.uas.platform.b2c.trade.seek.model.SeekSalesmanMember;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+
+@Repository
+public interface SeekSalesmanMemberDao extends JpaSpecificationExecutor<SeekSalesmanMember>,
+        JpaRepository<SeekSalesmanMember, Long> {
+
+    SeekSalesmanMember findByName(String name);
+}
+

+ 79 - 0
src/main/java/com/uas/platform/b2c/trade/seek/model/SeekSalesman.java

@@ -0,0 +1,79 @@
+package com.uas.platform.b2c.trade.seek.model;
+
+import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.common.account.model.User;
+
+import javax.persistence.*;
+import java.util.Date;
+
+/**
+ * 求购-业务员分配类
+ *
+ * @author liusw
+ * @version 2017/12/12 16:45
+ */
+@Entity(name = "trade.seekSalesman")
+@Table(name = "trade$seekSalesman")
+public class SeekSalesman {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @Id
+    @GeneratedValue
+    @Column(name = "ss_id")
+    private Long id;
+
+    /**
+     * 公共询价的id
+     */
+    @Column(name = "ss_publicid")
+    private Long publicId;
+
+    /**
+     * 业务员名字
+     */
+    @Column(name = "ss_salesman_name")
+    private String salesmanName;
+
+    /**
+     * 业务员操作时间
+     */
+    @Column(name = "ss_gettime")
+    private Date getTime;
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getPublicId() {
+        return publicId;
+    }
+
+    public void setPublicId(Long publicId) {
+        this.publicId = publicId;
+    }
+
+    public String getSalesmanName() {
+        return salesmanName;
+    }
+
+    public void setSalesmanName(String salesmanName) {
+        this.salesmanName = salesmanName;
+    }
+
+    public Date getGetTime() {
+        return getTime;
+    }
+
+    public void setGetTime(Date getTime) {
+        this.getTime = getTime;
+    }
+}

+ 166 - 0
src/main/java/com/uas/platform/b2c/trade/seek/model/SeekSalesmanInfo.java

@@ -0,0 +1,166 @@
+package com.uas.platform.b2c.trade.seek.model;
+
+import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.common.account.model.User;
+
+import javax.persistence.*;
+import java.util.Date;
+
+/**
+ * 求购-业务员分配视图获取详细信息
+ *
+ * @author liusw
+ * @version 2017/12/30 11:25
+ */
+@Entity
+@Table(name = "v$seek$seeksalesmaninfo")
+public class SeekSalesmanInfo {
+    /**
+     * ID
+     */
+    @Id
+    @Column(name = "publicid")
+    private Long id;
+
+    @Column(name = "id_source")
+    private String source;
+
+    @Column(name = "in_code")
+    private String code;
+
+    @Column(name = "id_date")
+    private Date publicDate;
+
+    @OneToOne(cascade = { CascadeType.REFRESH })
+    @JoinColumn(name = "id_useruu", insertable = false, updatable = false)
+    private User user;
+
+    @OneToOne(cascade = { CascadeType.REFRESH })
+    @JoinColumn(name = "in_enuu", insertable = false, updatable = false)
+    private Enterprise enterprise;
+
+    @Column(name = "id_cmpcode")
+    private String cmpCode;
+
+    @Column(name = "id_inbrand")
+    private String brand;
+
+    @Column(name = "id_prodspec")
+    private String spec;
+
+    @Column(name = "id_enddate")
+    private Date endDate;
+
+    @Column(name = "id_offeramount")
+    private Integer offerAmount;
+
+    @Column(name = "ss_salesman_name")
+    private String salesman;
+
+    @Column(name = "id_status")
+    private Integer status;
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getSource() {
+        return source;
+    }
+
+    public void setSource(String source) {
+        this.source = source;
+    }
+
+    public Date getPublicDate() {
+        return publicDate;
+    }
+
+    public void setPublicDate(Date publicDate) {
+        this.publicDate = publicDate;
+    }
+
+    public User getUser() {
+        return user;
+    }
+
+    public void setUser(User user) {
+        this.user = user;
+    }
+
+    public Enterprise getEnterprise() {
+        return enterprise;
+    }
+
+    public void setEnterprise(Enterprise enterprise) {
+        this.enterprise = enterprise;
+    }
+
+    public String getCmpCode() {
+        return cmpCode;
+    }
+
+    public void setCmpCode(String cmpCode) {
+        this.cmpCode = cmpCode;
+    }
+
+    public String getBrand() {
+        return brand;
+    }
+
+    public void setBrand(String brand) {
+        this.brand = brand;
+    }
+
+    public String getSpec() {
+        return spec;
+    }
+
+    public void setSpec(String spec) {
+        this.spec = spec;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(Date endDate) {
+        this.endDate = endDate;
+    }
+
+    public Integer getOfferAmount() {
+        return offerAmount;
+    }
+
+    public void setOfferAmount(Integer offerAmount) {
+        this.offerAmount = offerAmount;
+    }
+
+    public String getSalesman() {
+        return salesman;
+    }
+
+    public void setSalesman(String salesman) {
+        this.salesman = salesman;
+    }
+}

+ 44 - 0
src/main/java/com/uas/platform/b2c/trade/seek/model/SeekSalesmanMember.java

@@ -0,0 +1,44 @@
+package com.uas.platform.b2c.trade.seek.model;
+
+import javax.persistence.*;
+import java.util.Date;
+
+/**
+ * 求购-业务员管理类
+ *
+ * @author liusw
+ * @version 2017/12/12 16:45
+ */
+@Entity(name = "trade.seekSalesmanMember")
+@Table(name = "trade$seekSalesmanMember")
+public class SeekSalesmanMember {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @Id
+    @GeneratedValue
+    @Column(name = "sm_id")
+    private Long id;
+
+    @Column(name = "sm_name")
+    private String name;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}

+ 18 - 0
src/main/java/com/uas/platform/b2c/trade/seek/service/SeekSalesmanInfoService.java

@@ -0,0 +1,18 @@
+package com.uas.platform.b2c.trade.seek.service;
+
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.trade.seek.model.SeekSalesmanInfo;
+import com.uas.platform.b2c.trade.seek.model.SeekSalesmanMember;
+import com.uas.platform.b2c.trade.support.ResultMap;
+import com.uas.platform.core.model.PageInfo;
+import org.springframework.data.domain.Page;
+
+import java.util.List;
+
+public interface SeekSalesmanInfoService {
+    Page<SeekSalesmanInfo> getPageInfo(PageInfo info, Integer status, String salesman, String keyword);
+
+    ResultMap orders(Long id, User user);
+
+    List<SeekSalesmanMember> getMembers();
+}

+ 116 - 0
src/main/java/com/uas/platform/b2c/trade/seek/service/impl/SeekSalesmanInfoServiceImpl.java

@@ -0,0 +1,116 @@
+package com.uas.platform.b2c.trade.seek.service.impl;
+
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.trade.seek.dao.SeekSalesmanDao;
+import com.uas.platform.b2c.trade.seek.dao.SeekSalesmanInfoDao;
+import com.uas.platform.b2c.trade.seek.dao.SeekSalesmanMemberDao;
+import com.uas.platform.b2c.trade.seek.model.SeekSalesman;
+import com.uas.platform.b2c.trade.seek.model.SeekSalesmanInfo;
+import com.uas.platform.b2c.trade.seek.model.SeekSalesmanMember;
+import com.uas.platform.b2c.trade.seek.service.SeekSalesmanInfoService;
+import com.uas.platform.b2c.trade.support.CodeType;
+import com.uas.platform.b2c.trade.support.ResultMap;
+import com.uas.platform.core.model.PageInfo;
+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 org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Sort.Direction;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 求购-业务员分配实现类
+ *
+ * @author liusw
+ * @version 2017/12/13 10:45
+ */
+@Service
+public class SeekSalesmanInfoServiceImpl implements SeekSalesmanInfoService {
+
+    @Autowired
+    private SeekSalesmanInfoDao seekSalesmanInfoDao;
+
+    @Autowired
+    private SeekSalesmanDao seekSalesmanDao;
+
+    @Autowired
+    private SeekSalesmanMemberDao seekSalesmanMemberDao;
+
+    @Override
+    public Page<SeekSalesmanInfo> getPageInfo(final PageInfo info, Integer status, String salesman, String keyword) {
+        info.sorting("publicDate", Direction.DESC);
+        switch (status) {
+            case 0 :break;
+            case 1 :
+                info.filter("offerAmount", 0);
+                break;
+            case 2 :
+                // offerAmount > 0
+                SimpleExpression offerAmount = new SimpleExpression("offerAmount", 0, CriterionExpression.Operator.GT);
+                // agreed == 0
+                SimpleExpression agreed = new SimpleExpression("status", 1, CriterionExpression.Operator.NE);
+                SimpleExpression[] simpleExpressions = new SimpleExpression[]{offerAmount, agreed};
+                LogicalExpression logicalExpression = PredicateUtils.and(simpleExpressions);
+                info.expression(logicalExpression);
+                break;
+            case 3 :
+                SimpleExpression adopt = new SimpleExpression("status", 1, CriterionExpression.Operator.GTE);
+                info.expression(adopt);
+                break;
+        }
+        if (!StringUtils.isEmpty(salesman) && !salesman.equals("0")) {
+            info.filter("salesman", salesman);
+        }
+        if (!StringUtils.isEmpty(keyword)) {
+            SimpleExpression code = new SimpleExpression("cmpCode", keyword, CriterionExpression.Operator.LIKE);
+            SimpleExpression brand = new SimpleExpression("brand", keyword, CriterionExpression.Operator.LIKE);
+            SimpleExpression[] simpleExpressions = new SimpleExpression[]{code, brand};
+            LogicalExpression logicalExpression = PredicateUtils.or(simpleExpressions);
+            info.expression(logicalExpression);
+        }
+        Page<SeekSalesmanInfo> pageInfos = seekSalesmanInfoDao.findAll(new Specification<SeekSalesmanInfo>() {
+            public Predicate toPredicate(Root<SeekSalesmanInfo> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+                query.where(info.getPredicates(root, query, builder));
+                return null;
+            }
+        }, info);
+        return pageInfos;
+    }
+
+    @Override
+    public ResultMap orders(Long id, User user) {
+        if (StringUtils.isEmpty(id) || StringUtils.isEmpty(user)) {
+            return new ResultMap(CodeType.NO_INFO, "参数不完整!");
+        }
+        SeekSalesman oldSeekSalesman = seekSalesmanDao.findByPublicId(id);
+        if (!StringUtils.isEmpty(oldSeekSalesman)) {
+            return new ResultMap(CodeType.NOT_PERMIT, "该求购已有业务员跟进!");
+        }
+        SeekSalesmanMember seekSalesmanMember = seekSalesmanMemberDao.findByName(user.getUserName());
+        if (StringUtils.isEmpty(seekSalesmanMember)) {
+            return new ResultMap(CodeType.NOT_PERMIT, "您不是业务员,不允许操作!");
+        }
+        SeekSalesman seekSalesman = new SeekSalesman();
+        seekSalesman.setGetTime(new Date(System.currentTimeMillis()));
+        seekSalesman.setPublicId(id);
+        seekSalesman.setSalesmanName(user.getUserName());
+        seekSalesmanDao.save(seekSalesman);
+        return new ResultMap(CodeType.OK, "接单成功!");
+    }
+
+    @Override
+    public List<SeekSalesmanMember> getMembers() {
+        return seekSalesmanMemberDao.findAll();
+    }
+}

+ 1 - 0
src/main/webapp/WEB-INF/spring/webmvc.xml

@@ -113,6 +113,7 @@
 			<mvc:exclude-mapping path="/seek/qualityBuyer/getBuyerPageInfo"/>
 			<mvc:exclude-mapping path="/seek/getSeekPageInfo"/>
 			<mvc:exclude-mapping path="/seek/getSeekRanking"/>
+			<mvc:exclude-mapping path="/seek/release/template"/>
 			<bean class="com.uas.platform.b2c.core.filter.SSOInterceptor"></bean>
 		</mvc:interceptor>
 		<!-- 对所有的请求拦截,将Session中的User信息设置进SystemSession -->

+ 2 - 0
src/main/webapp/WEB-INF/views/normal/adminWithNav.html

@@ -176,6 +176,8 @@
 					class="fa fa-flag"></i><span>用户操作日志</span></a></li>
 			<li class="nav-node"><a href="#/seekQualityBuyer"><i
 					class="fa fa-flag"></i><span>优质采购商</span></a></li>
+			<li class="nav-node"><a href="#/seekSalesman"><i
+					class="fa fa-flag"></i><span>求购-业务员分配</span></a></li>
 
 			<li class="nav-header">禁用信息</li>
 			<li class="nav-node"><a href="#/disable/brand"><i

+ 42 - 23
src/main/webapp/resources/js/admin/app.js

@@ -1,4 +1,4 @@
- define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ui-form', 'ngLocal', 'ngTable', 'ngSanitize', 'ngDraggable', 'common/services', 'common/directives', 'common/query/brand', 'common/query/address', 'common/query/return' , 'common/query/change' ,'common/query/component', 'common/query/order', 'common/query/purchase', 'common/query/invoice', 'common/query/property', 'common/query/kind', 'common/query/property', 'common/query/receipt', 'common/query/logistics' ,'angular-toaster', 'ui-jquery', 'jquery-uploadify','common/query/dateParse' , 'common/query/bankTransfer' ,'common/query/bankInfo', 'common/query/urlencryption', 'common/query/bill', 'common/query/makerDemand', 'common/query/goods', 'common/query/validtime', 'file-upload','file-upload-shim', 'common/query/slideImage', 'common/query/kindAdvice', 'common/query/responseLogistics', 'common/query/search','common/directives/dynamicInput', 'common/query/auditorMail', 'common/query/tradeBasicProperties', 'common/query/exchangeRate', 'common/query/tradeDeliveryDelayTime', 'common/query/payment', 'common/query/kindContrast', 'common/query/crawlTask', 'common/query/afterSale', 'common/query/refund', 'common/query/messageBoard', 'common/query/logisticsPort', 'common/query/storeInfo', 'common/query/cms', 'common/query/help', 'common/query/commonCount', 'common/module/store_admin_violations_module', 'common/query/internalMessage','common/query/user','common/query/secQuestion','common/query/keyWord','common/query/logUsage','common/query/seekQualityBuyer','common/query/loanApply'], function(angularAMD) {
+ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ui-form', 'ngLocal', 'ngTable', 'ngSanitize', 'ngDraggable', 'common/services', 'common/directives', 'common/query/brand', 'common/query/address', 'common/query/return' , 'common/query/change' ,'common/query/component', 'common/query/order', 'common/query/purchase', 'common/query/invoice', 'common/query/property', 'common/query/kind', 'common/query/property', 'common/query/receipt', 'common/query/logistics' ,'angular-toaster', 'ui-jquery', 'jquery-uploadify','common/query/dateParse' , 'common/query/bankTransfer' ,'common/query/bankInfo', 'common/query/urlencryption', 'common/query/bill', 'common/query/makerDemand', 'common/query/goods', 'common/query/validtime', 'file-upload','file-upload-shim', 'common/query/slideImage', 'common/query/kindAdvice', 'common/query/responseLogistics', 'common/query/search','common/directives/dynamicInput', 'common/query/auditorMail', 'common/query/tradeBasicProperties', 'common/query/exchangeRate', 'common/query/tradeDeliveryDelayTime', 'common/query/payment', 'common/query/kindContrast', 'common/query/crawlTask', 'common/query/afterSale', 'common/query/refund', 'common/query/messageBoard', 'common/query/logisticsPort', 'common/query/storeInfo', 'common/query/cms', 'common/query/help', 'common/query/commonCount', 'common/module/store_admin_violations_module', 'common/query/internalMessage','common/query/user','common/query/secQuestion','common/query/keyWord','common/query/logUsage','common/query/seekQualityBuyer','common/query/loanApply', 'common/query/seekSalesman'], function(angularAMD) {
 	'use strict';
 
 	 /**
@@ -8,7 +8,7 @@
 		 return this.length > 0 ? this[this.length - 1] : null;
 	 };
 
-	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ui.form', 'ng.local', 'ngTable', 'ngSanitize', 'ngDraggable', 'common.services', 'common.directives', 'brandServices', 'addressServices', 'returnServices', 'changeServices', 'componentServices', 'orderServices', 'purchaseServices', 'invoiceServices', 'propertyServices', 'receiptServices', 'logisticsServices', 'common.query.kind', 'toaster','ui.jquery' ,'dateparseServices', 'bankInfo' , 'bankTransfer', 'urlencryptionServices', 'billServices', 'makerDemand', 'goodsServices', 'validtimeServices', 'angularFileUpload', 'slideImageService', 'common.query.kindAdvice', 'responseLogisticsService', 'searchService', 'ngDynamicInput', 'ReviewerEmailInfoService', 'tradeBasicPropertiesServices', 'exchangeRateModule', 'tradeDeliveryDelayTimeModule', 'PaymentService', 'kindContrastServices', 'crawlTaskServices', 'afterSaleService', 'refundModule', 'messageBoardServices', 'logisticsPortService', 'storeInfoServices', 'cmsService', 'helpServices', 'commonCountServices', 'tool.directives', 'StoreAdminViolationsModule', 'internalMessageServices','common.query.user','secQuestionServices','keyWordServices','logUsageServices','seekQualityBuyerServices', 'loanApplyService']);
+	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ui.form', 'ng.local', 'ngTable', 'ngSanitize', 'ngDraggable', 'common.services', 'common.directives', 'brandServices', 'addressServices', 'returnServices', 'changeServices', 'componentServices', 'orderServices', 'purchaseServices', 'invoiceServices', 'propertyServices', 'receiptServices', 'logisticsServices', 'common.query.kind', 'toaster','ui.jquery' ,'dateparseServices', 'bankInfo' , 'bankTransfer', 'urlencryptionServices', 'billServices', 'makerDemand', 'goodsServices', 'validtimeServices', 'angularFileUpload', 'slideImageService', 'common.query.kindAdvice', 'responseLogisticsService', 'searchService', 'ngDynamicInput', 'ReviewerEmailInfoService', 'tradeBasicPropertiesServices', 'exchangeRateModule', 'tradeDeliveryDelayTimeModule', 'PaymentService', 'kindContrastServices', 'crawlTaskServices', 'afterSaleService', 'refundModule', 'messageBoardServices', 'logisticsPortService', 'storeInfoServices', 'cmsService', 'helpServices', 'commonCountServices', 'tool.directives', 'StoreAdminViolationsModule', 'internalMessageServices','common.query.user','secQuestionServices','keyWordServices','logUsageServices','seekQualityBuyerServices', 'loanApplyService', 'seekSalesmanServices']);
 	app.init = function() {
 		angularAMD.bootstrap(app);
 	};
@@ -597,26 +597,38 @@
 			controllerUrl: 'app/controllers/product/KindAdviceCtrl',
 			title: '轮播图片管理'
 		})).state('logUsage', angularAMD.route({
-			//用户操作日志
-			url: '/logUsage',
-			templateUrl: 'static/view/admin/logUsage.html',
-			controller: 'LogUsageCtrl',
-			controllerUrl: 'app/controllers/LogUsageCtrl',
-			title: '用户操作日志'
-		})).state('seekQualityBuyer', angularAMD.route({
-			//用户操作日志
-			url: '/seekQualityBuyer',
-			templateUrl: 'static/view/admin/seekQualityBuyer.html',
-			controller: 'SeekQualityBuyerCtrl',
-			controllerUrl: 'app/controllers/SeekQualityBuyerCtrl',
-			title: '用户操作日志'
-    	})).state('keyWord', angularAMD.route({
-			url: '/keyWord',
-			templateUrl: 'static/view/admin/keyword.html',
-			controller: 'KeyWordCtrl',
-			controllerUrl: 'app/controllers/KeyWordCtrl',
-			title: '非法关键词维护'
-    	})).state('slideImage', angularAMD.route({
+      //用户操作日志
+      url: '/logUsage',
+      templateUrl: 'static/view/admin/logUsage.html',
+      controller: 'LogUsageCtrl',
+      controllerUrl: 'app/controllers/LogUsageCtrl',
+      title: '用户操作日志'
+    })).state('seekQualityBuyer', angularAMD.route({
+
+      url: '/seekQualityBuyer',
+      templateUrl: 'static/view/admin/seekQualityBuyer.html',
+      controller: 'SeekQualityBuyerCtrl',
+      controllerUrl: 'app/controllers/SeekQualityBuyerCtrl',
+      title: '优质采购商'
+    })).state('seekSalesman', angularAMD.route({
+		url: '/seekSalesman',
+		templateUrl: 'static/view/admin/seek_salesman.html',
+		controller: 'SeekSalesmanCtrl',
+		controllerUrl: 'app/controllers/SeekSalesmanCtrl',
+		title: '求购-业务员分配'
+	})).state('seekSalesmandetail', angularAMD.route({
+		// 求购-业务员 查看详情
+		url: '/seekSalesman/:uuid/:name',
+		templateUrl : 'static/view/admin/seek_salesman_detail.html',
+		controller : 'SeekSalesmanDetailCtrl',
+		controllerUrl : 'app/controllers/SeekSalesmanDetailCtrl'
+    })).state('keyWord', angularAMD.route({
+      url: '/keyWord',
+      templateUrl: 'static/view/admin/keyword.html',
+      controller: 'KeyWordCtrl',
+      controllerUrl: 'app/controllers/KeyWordCtrl',
+      title: '非法关键词维护'
+    })).state('slideImage', angularAMD.route({
 			// 首页展示(轮播图片管理)
 			url: '/operation/slideImage',
 			templateUrl: 'static/view/admin/operation/slideImage.html',
@@ -909,6 +921,13 @@
              }
          }
      });
-	
+
+     // 币别filter
+     app.filter('currencyStr', function () {
+         return function (str) {
+             return typeof str == 'string' && str != 'RMB' && str != 'USD' ? str.startsWith('RMB') ? '¥' + str.substring(3, str.length) : '$' + str.substring(3, str.length) : '-';
+         }
+     });
+
 	return app;
 });

+ 60 - 0
src/main/webapp/resources/js/admin/controllers/SeekSalesmanCtrl.js

@@ -0,0 +1,60 @@
+define(['app/app'], function (app) {
+  'use strict';
+  app.register.controller('SeekSalesmanCtrl', ['$scope', 'seekSalesman', 'toaster', 'BaseService','$modal','ngTableParams', '$http', function ($scope, seekSalesman, toaster, BaseService,$modal,ngTableParams, $http) {
+      $scope.seek_status = 0;
+      $scope.seek_salesman = 0;
+    $scope.seekSalesmanTableParams = new ngTableParams({
+      page : 1,
+      count : 10
+    }, {
+      total : 0,
+      getData : function ($defer, params) {
+        const param = BaseService.parseParams(params.url());
+          param.status = $scope.seek_status;
+          param.salesman = $scope.seek_salesman;
+          param.keyword = $scope.keyword;
+          seekSalesman.getPageInfo(param, function (data) {
+          params.total(data.totalElements);
+          $defer.resolve(data.content);
+        }, function(response) {
+          toaster.pop('error', response.data);
+        });
+      }
+    });
+
+    seekSalesman.getMembers(function(data){
+        $scope.members = data;
+    });
+
+
+    $scope.onSearchKeyWord = function() {
+      $scope.seekSalesmanTableParams.reload();
+   }
+
+    $scope.onSearchStatus = function(seek_status) {
+        $scope.seek_status = seek_status;
+        $scope.seekSalesmanTableParams.reload();
+    }
+
+    $scope.onSearchSalesman = function(seek_salesman) {
+        $scope.seek_salesman = seek_salesman;
+        $scope.seekSalesmanTableParams.reload();
+    }
+
+
+
+    $scope.orders = function(id){
+        seekSalesman.orders({id:id},{}, function(data) {
+           if (data.code == 1) {
+               toaster.pop('success', '提示', '接单成功!');
+               $scope.seekSalesmanTableParams.reload();
+           } else {
+               toaster.pop('error', '错误', data.message);
+           }
+        }, function(response) {
+            toaster.pop('error', response.data);
+        });
+    }
+
+  }]);
+});

+ 56 - 0
src/main/webapp/resources/js/admin/controllers/SeekSalesmanDetailCtrl.js

@@ -0,0 +1,56 @@
+define(['app/app'], function (app) {
+    'use strict';
+    app.register.controller('SeekSalesmanDetailCtrl', ['$scope', 'seekSalesman', 'toaster', 'BaseService', '$http', '$stateParams', function ($scope, seekSalesman, toaster, BaseService, $http, $stateParams) {
+        $scope.active = 'offer';
+        $scope.status = 101;
+        $scope.salesman_name = $stateParams.name;
+        //设置状态
+        $scope.setActive = function (active) {
+            if($scope.active != active) {
+                $scope.active = active;
+                switch ($scope.active) {
+                    case 'offer':
+                        $scope.status = 101;
+                        break;
+                    case 'goods':
+                        $scope.status = 104;
+                        break;
+                    case 'pricing':
+                        $scope.status = 103;
+                        break;
+                }
+                // $scope.bankInfoTableParams.page(1);
+                // $scope.bankInfoTableParams.reload();
+            }
+        };
+        seekSalesman.getSeekUrl({}, function(data1) {
+            var seekUrl = data1.url;
+            $http({
+                method: 'get',
+                dataType: 'json',
+                url: seekUrl + '/inquiry/buyer/quotation',
+                params: {id: $stateParams.uuid}
+            }).success(function (data) {
+                $scope.seek = data;
+                seekSalesman.getMallGoodsList({code: data.cmpCode, brand: data.inbrand}, function (data1) {
+                    $scope.goods = data1;
+                });
+            }).error(function (response) {
+
+            });
+        });
+
+        $scope.orders = function(){
+            seekSalesman.orders({id: $stateParams.uuid},{}, function(data) {
+                if (data.code == 1) {
+                    toaster.pop('success', '提示', '接单成功!');
+                    $scope.seekSalesmanTableParams.reload();
+                } else {
+                    toaster.pop('error', '错误', data.message);
+                }
+            }, function(response) {
+                toaster.pop('error', response.data);
+            });
+        }
+    }]);
+});

+ 25 - 0
src/main/webapp/resources/js/common/query/seekSalesman.js

@@ -0,0 +1,25 @@
+define([ 'ngResource' ], function() {
+	angular.module('seekSalesmanServices', [ 'ngResource' ]).factory('seekSalesman', ['$resource', 'BaseService', function($resource, BaseService) {
+		const rootPath = BaseService.getRootPath();
+		return $resource('seek/salesman', {}, {
+            getPageInfo: {
+                url: 'seek/salesman/getPageInfo',
+                method: 'GET'
+            }, orders: {
+                url: 'seek/salesman/orders',
+                method: 'POST'
+            }, getMallGoodsList: {
+                url: 'seek/getMallGoodsList',
+                method: 'GET',
+                isArray: true
+            }, getMembers: {
+                url: 'seek/salesman/getMembers',
+                method: 'GET',
+                isArray: true
+            }, getSeekUrl: {
+                url: 'seek/accessUrl',
+                method: 'GET'
+            }
+        });
+    }])
+});

+ 82 - 0
src/main/webapp/resources/view/admin/seek_salesman.html

@@ -0,0 +1,82 @@
+<style>
+.row {
+	margin-bottom: 10px;
+}
+</style>
+<div>
+	<div class="box-header well">
+		求购-业务员分配
+	</div>
+	<div  class="box-content">
+		<div class="row">
+			<div class="col-sm-1">
+
+			</div>
+			<div class="col-sm-7">
+
+			</div>
+			<div class="col-sm-4">
+				<div class="input-group">
+					<input placeholder="请输入品牌/型号" class="form-control ng-pristine ng-untouched ng-valid" ng-model="keyword" ng-search="onSearchKeyWord()"type="text">
+					<span class="input-group-btn">
+						<button class="btn btn-primary" type="button" ng-click="onSearchKeyWord()">搜索</button>
+					</span>
+				</div>
+			</div>
+		</div>
+		<table ng-table="seekSalesmanTableParams"
+			class="table table-bordered table-striped table-hover" style="word-break:break-all; word-wrap:break-all;">
+			<thead>
+				<tr class="tr-default">
+					<th width="10%;" class="text-center">编号</th>
+					<th width="7%;" class="text-center">求购来源</th>
+					<th width="10%" class="text-center">询价单号</th>
+					<th width="10%" class="text-center">发布时间</th>
+					<th width="10%" class="text-center">买家</th>
+					<th width="10%" class="text-center">产品信息</th>
+					<th width="10%" class="text-center">截止日期</th>
+					<th width="10%" class="text-center">报价条数</th>
+					<th width="10%" class="text-center"><select ng-change="onSearchStatus(seek_status)" ng-model="seek_status">
+						<option value="0">求购状态</option>
+						<option value="2">已报价</option>
+						<option value="1">待报价</option>
+						<option value="3">已采纳</option>
+					</select></th>
+					<th width="10%" class="text-center">
+						<select ng-change="onSearchSalesman(seek_salesman)" ng-model="seek_salesman">
+							<option value="0">业务员</option>
+							<option ng-repeat="me in members" value="{{me.name}}">{{me.name}}</option>
+						</select>
+					</th>
+					<th width="10%" class="text-center">操作</th>
+				</tr>
+			</thead>
+			<tbody ng-repeat="seek in $data">
+				<tr class="text-center">
+					<td><span ng-bind="seek.id"></span></td>
+					<td><span ng-bind="seek.source"></span></td>
+					<td><span ng-bind="seek.code"></span></td>
+					<td><span ng-bind="seek.publicDate | date : 'yyyy-MM-dd HH:mm:ss'"></span></td>
+					<td><p ng-bind="seek.enterprise.enName"></p><p ng-bind="seek.user.userName"></p></td>
+					<td><p ng-bind="'型号:'+seek.cmpCode"></p>
+						<p ng-bind="'品牌:'+seek.brand"></p>
+						<p ng-bind="'规格:'+seek.spec"></p>
+					</td>
+					<td><span ng-bind="seek.endDate | date : 'yyyy-MM-dd HH:mm:ss'"></span></td>
+					<td><span ng-bind="seek.offerAmount"></span></td>
+					<td><span ng-if="seek.status && seek.status == 1 && seek.offerAmount > 0">已采纳</span>
+						<span ng-if="(!seek.status || seek.status == 0) && seek.offerAmount > 0">已报价</span>
+						<span ng-if="!seek.offerAmount || seek.offerAmount == 0">待报价</span>
+					</td>
+					<td><span ng-bind="seek.salesman"></span></td>
+					<td>
+						<button ng-if="!seek.salesman" class="btn btn-sm btn-warning" ng-click="orders(seek.id)">我来接单</button>
+						<a target="_blank" ng-href="#/seekSalesman/{{seek.id}}/{{seek.salesman}}">
+							查看详情
+						</a>
+					</td>
+				</tr>
+			</tbody>
+		</table>
+	</div>
+</div>

+ 243 - 0
src/main/webapp/resources/view/admin/seek_salesman_detail.html

@@ -0,0 +1,243 @@
+<style>
+.row {
+	margin-bottom: 10px;
+}
+.menu .col-sm-8{
+	padding: 0;
+	width: auto;
+}
+.menu{
+	width: 100%;
+	height: 40px;
+	background: #229ee6;
+	margin: 0;
+	line-height: 40px;
+	overflow: hidden;
+}
+.menu .btn{
+	border: none;
+	background: none;
+	color: #fff;
+	padding: 8px 30px;
+	width: 100px;
+}
+.menu .btn:active{
+	background: none;
+}
+.menu .btn-group{
+	height: 40px;
+}
+.menu .btn-primary:before,.menu a:hover:before{
+	content: "";
+	width: 20px;
+	height: 20px;
+	display: inline-block;
+	background: #fff;
+	transform: rotate(-45deg);
+	position: absolute;
+	bottom: -18px;
+	left: 40%;
+}
+.menu .col-sm-3{
+	float: right;
+	margin-right: 100px;
+	width: 270px;
+	padding: 0;
+}
+.menu .sreach-input{
+	position: relative;
+	margin-top: 5px;
+	width: 300px;
+	height: 40px;
+}
+.menu .sreach-input .form-control{
+	height: 30px;
+	float: left;
+	border-radius: 0;
+	font-size: 12px;
+	padding-right:70px;
+}
+.menu .sreach-input button{
+	width: 60px;
+	height: 30px;
+	background: #b9e1f9;
+	float: right;
+	position: absolute;
+	right: 0;
+	top: 0;
+	border: none;
+	font-size: 14px;
+}
+.com-title h2{
+	font-size: 24px;
+	color: #219ee6;
+}
+	.adopt {
+		background: red;
+	}
+</style>
+<div>
+	<div class="box-header well">
+		求购详情
+	</div>
+	<div class="box-content row">
+		<div class="fullscreen" style="padding: 10px;">
+			<div class="col-sm-3 f14">
+				<div class="form-group row">
+					<span class="col-sm-4 text-right">询价单号:</span>
+					<span class="col-sm-6" ng-bind="seek.inquiry.code"></span>
+				</div>
+				<div class="form-group row">
+					<span class="col-sm-4 text-right">规格:</span>
+					<span class="col-sm-6" ng-bind="seek.spec"></span>
+				</div>
+				<div class="form-group row">
+					<span class="col-sm-4 text-right">币种:</span>
+					<span class="col-sm-6" ng-bind="seek.currency"></span>
+				</div>
+			</div>
+			<div class="col-sm-3 f14">
+				<div class="form-group row">
+					<span class="col-sm-4 text-right">型号:</span>
+					<span class="col-sm-6" ng-bind="seek.cmpCode"></span>
+				</div>
+				<div class="form-group row">
+					<span class="col-sm-4 text-right">封装:</span>
+					<span class="col-sm-6" ng-bind="seek.encapsulation"></span>
+				</div>
+				<div class="form-group row">
+					<span class="col-sm-4 text-right">生产日期:</span>
+					<span class="col-sm-6" ng-bind="seek.produceDate"></span>
+				</div>
+			</div>
+			<div class="col-sm-3 f14">
+				<div class="form-group row">
+					<span class="col-sm-4 text-right">品牌:</span>
+					<span class="col-sm-6" ng-bind="seek.inbrand"></span>
+				</div>
+				<div class="form-group row">
+					<span class="col-sm-4 text-right">采购数量:</span>
+					<span class="col-sm-6" ng-bind="seek.needquantity"></span>
+				</div>
+				<div class="form-group row">
+					<span class="col-sm-4 text-right">截止日期:</span>
+					<span class="col-sm-6" ng-bind="seek.endDate | date:'yyyy-MM-dd HH:mm:dd'"></span>
+				</div>
+			</div>
+			<div class="col-sm-3 f14">
+				<div class="form-group row">
+					<span class="col-sm-4 text-right">求购状态:</span>
+					<span ng-if="seek.agreed && seek.agreed == 1 && seek.offerAmount > 0" class="col-sm-4" style="color:green;">已采纳</span>
+					<span ng-if="(!seek.agreed || seek.agreed == 0) && seek.offerAmount > 0" class="col-sm-4" style="color:red;">已报价</span>
+					<span ng-if="!seek.offerAmount || seek.offerAmount == 0" class="col-sm-4">待报价</span>
+					<!--<span ng-if="seek.agreed && seek.agreed == 1" class="col-sm-4" style="color:green;">已截至</span>-->
+				</div>
+				<div class="form-group row">
+					<span class="col-sm-4 text-right">发布日期:</span>
+					<span class="col-sm-6" ng-bind="seek.date | date:'yyyy-MM-dd HH:mm:dd'"></span>
+				</div>
+				<div class="form-group row" ng-if="salesman_name">
+					<span class="col-sm-4 text-right">业务员:</span>
+					<span class="col-sm-6" ng-bind="salesman_name"></span>
+				</div>
+				<div class="form-group row" ng-if="!salesman_name">
+					<span class="col-sm-4 text-right"></span>
+					<button class="btn btn-primary" ng-click="orders()">我来接单</button></p>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="box-content row">
+		<div class="fullscreen" style="padding: 10px;">
+		</div>
+			<div class="col-sm-3 f14">
+				<div class="form-group row">
+					<span class="col-sm-4 text-right">买家:</span>
+					<span class="col-sm-6" ng-bind="seek.userName + '|' + seek.inquiry.enterprise.enName"></span>
+				</div>
+			</div>
+			<div class="col-sm-3 f14">
+				<div class="form-group row">
+					<span class="col-sm-4 text-right">电话:</span>
+					<span class="col-sm-6" ng-bind="seek.userTel"></span>
+				</div>
+			</div>
+	</div>
+	<div class="menu row">
+		<div class="col-sm-8">
+			<div class="btn-group" role="group" aria-label="...">
+				<a type="button" class="btn btn-default" ng-class="{'btn-primary': active === 'offer'}" ng-click="setActive('offer')">当前报价({{seek.qutations.length}})</a>
+				<a type="button" class="btn btn-default" ng-class="{'btn-primary': active === 'goods'}" ng-click="setActive('goods')">商城现货({{goods.length}})</a>
+				<a type="button" class="btn btn-default" ng-class="{'btn-primary': active === 'pricing'}" ng-click="setActive('pricing')">核价信息(0)</a>
+			</div>
+		</div>
+	</div>
+	<div  class="box-content">
+		<table ng-show="status == 101" class="table table-bordered table-striped table-hover" style="word-break:break-all; word-wrap:break-all;">
+			<thead>
+				<tr class="tr-default">
+					<th width="10%;" class="text-center">报价时间</th>
+					<th width="20%;" class="text-center">卖家</th>
+					<th width="10%" class="text-center">联系电话</th>
+					<th width="10%" class="text-center">交期(天)</th>
+					<th width="50%" class="text-center">价格梯度</th>
+				</tr>
+			</thead>
+			<tbody ng-repeat="qutation in seek.qutations">
+				<tr class="text-center" ng-class="{'adopt':qutation.agreed == 1}">
+					<td><span ng-bind="qutation.offerTime | date:'yyyy-MM-dd HH:mm:ss'"></span></td>
+					<td><p ng-bind="qutation.enterprise.enName"></p></td>
+					<td><span ng-bind="qutation.enterprise.enTel"></span></td>
+					<td><span ng-bind="qutation.leadtime"></span></td>
+					<td><p ng-repeat="re in qutation.replies"><span ng-bind="re.lapQty + '+'"></span>|<span ng-bind="qutation.currency + re.price | currencyStr"></span></p></td>
+				</tr>
+			</tbody>
+		</table>
+
+		<table ng-show="status == 104" class="table table-bordered table-striped table-hover" style="word-break:break-all; word-wrap:break-all;">
+			<thead>
+			<tr class="tr-default">
+				<th width="10%;" class="text-center">卖家</th>
+				<th width="20%;" class="text-center">交期(天)</th>
+				<th width="10%" class="text-center">价格梯度</th>
+				<th width="10%" class="text-center">生产日期</th>
+				<th width="50%" class="text-center">库存</th>
+			</tr>
+			</thead>
+			<tbody ng-repeat="go in goods">
+			<tr class="text-center">
+				<td><span ng-bind="go.enterpriseName"></span></td>
+				<td><p ng-bind="go.b2cMinDelivery + '-' + go.b2cMaxDelivery"></p></td>
+				<td><p ng-if="go.currencyName == 'RMB'" ng-repeat="p in go.prices">
+					<span ng-bind="p.start + '+'"></span>|<span ng-bind="go.currencyName + p.rMBPrice | currencyStr"></span>
+				</p><p ng-if="go.currencyName == 'USD'" ng-repeat="p in go.prices">
+					<span ng-bind="p.start + '+'"></span>|<span ng-bind="go.currencyName + p.uSDPrice | currencyStr"></span>
+				</p></td>
+				<td><span ng-bind="go.produceDate"></span></td>
+				<td><span ng-bind="go.reserve"></span></td>
+			</tr>
+			</tbody>
+		</table>
+
+		<table  ng-show="status == 103" class="table table-bordered table-striped table-hover" style="word-break:break-all; word-wrap:break-all;">
+			<thead>
+			<tr class="tr-default">
+				<th width="10%;" class="text-center">卖家</th>
+				<th width="20%;" class="text-center">物料编号</th>
+				<th width="10%" class="text-center">物料名称</th>
+				<th width="10%" class="text-center">标记</th>
+				<th width="50%" class="text-center">价格梯度</th>
+			</tr>
+			</thead>
+			<tbody ng-repeat="qutation in seek.qutations">
+			<!--<tr class="text-center">-->
+				<!--<td><span ng-bind="qutation.offerTime | date:'yyyy-MM-dd HH:mm:ss'"></span></td>-->
+				<!--<td><p ng-bind="qutation.enterprise.enName"></p></td>-->
+				<!--<td><span ng-bind="qutation.enterprise.enTel"></span></td>-->
+				<!--<td><span ng-bind="qutation.leadtime"></span></td>-->
+				<!--<td><p ng-repeat="re in qutation.replies"><span ng-bind="re.lapQty + '+'"></span>|<span ng-bind="qutation.currency + re.price | currencyStr"></span></p></td>-->
+			<!--</tr>-->
+			</tbody>
+		</table>
+	</div>
+</div>