• CRM项目记录(四)



    目录:

    (1)介绍js日历插件及其使用

    (2)crm给创建市场活动添加日历功能

    (3)分页查询市场活动需求分析

    (4)crm分页查询市场活动实现查询市场活动列表Mapper层 

    (5)crm分页查询市场活动实现查询市场活动列表Service层 

    (6)crm实现查询市场活动总条数的Mapper层和Service层

    (7)crm分页查询市场活动实现Controller层

    (8)crm分页查询市场活动实现前台页面

     (9)给市场活动页面的查询按钮添加点击事件

    (10)crm分析翻页功能的实现

    (11)crm是实现市场活动翻页查询 

    (12)crm实现bs_datetimepicker每页显示条数不变

    (13)crm实现刷新市场活动列表时保存每页显示条数不变


    (1)介绍js日历插件及其使用

     在WEB-INF下创建jsp页面,进行演示bootstrap框架的日历插件:

    引入日历插件:

     

    datetimepickertest.jsp

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <%
    3. String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";
    4. %>
    5. <html>
    6. <head>
    7. <base href="<%=basePath%>">
    8. <!--JQUERY-->
    9. <script type="text/javascript" src="jquery/jquery-1.11.1-min.js"></script>
    10. <!--BOOTSTRAP框架-->
    11. <link rel="stylesheet" type="text/css" href="jquery/bootstrap_3.3.0/css/bootstrap.min.css">
    12. <script type="text/javascript" src="jquery/bootstrap_3.3.0/js/bootstrap.min.js"></script>
    13. <!--BOOTSTRAP_DATETIMEPICKER插件-->
    14. <link rel="stylesheet" type="text/css" href="jquery/bootstrap-datetimepicker-master/css/bootstrap-datetimepicker.min.css">
    15. <script type="text/javascript" src="jquery/bootstrap-datetimepicker-master/js/bootstrap-datetimepicker.js"></script>
    16. <script type="text/javascript" src="jquery/bootstrap-datetimepicker-master/locale/bootstrap-datetimepicker.zh-CN.js"></script>
    17. <title>演示bs_datatimepicker插件</title>
    18. <script type="text/javascript">
    19. $(function () {
    20. //当容器加载完成,对容器调用工具函数
    21. $("#myDate").datetimepicker({
    22. language:'zh-CN', //语言
    23. format:'yyyy-mm-dd',//日期的格式
    24. minView:'month', //可以选择的最小视图
    25. initialDate:new Date(),//初始化显示的日期
    26. autoclose:true,//设置选择完日期或者时间之后,日否自动关闭日历
    27. todayBtn:true,//设置是否显示"今天"按钮,默认是false
    28. clearBtn:true//设置是否显示"清空"按钮,默认是false
    29. });
    30. });
    31. </script>
    32. </head>
    33. <body>
    34. <input type="text" id="myDate" readonly>
    35. </body>
    36. </html>

    访问地址: 

     (2)crm给创建市场活动添加日历功能

    在市场活动页面index.jsp,添加显示日历

     (3)分页查询市场活动需求分析

    需求: 

    当市场活动主页面加载完成之后,显示所有数据的第一页;

    用户在市场活动主页面填写查询条件,点击"查询"按钮,显示所有符合条件的数据的第一页,保持每页显示条数不变

    实现翻页功能.

        *在市场活动主页面,显示市场活动列表和记录的总条数

        *默认每页显示条数:10

     

    (4)crm分页查询市场活动实现查询市场活动列表Mapper层 

     先从底层开始写,先从市场活动接口口里面加一个方法:

     

    ActivityMapper.xml:添加sql语句

     

    1. <!--条件分页查询市场活动的列表-->
    2. <select id="selectActivityByConditionForPage" parameterType="map" resultMap="BaseResultMap">
    3. select a.id,u1.name as owner,a.name,a.start_date,a.end_date,a.cost,a.description,a.create_time,
    4. u2.name as create_by,a.edit_time,u3.name as edit_by
    5. from tbl_activity a
    6. join tbl_user u1 on a.owner=u1.id
    7. join tbl_user u2 on a.create_by=u2.id
    8. left join tbl_user u3 on a.edit_by=u3.id
    9. <where>
    10. <if test="name!=null and name!=''">
    11. and a.name like '%' #{name} '%'
    12. </if>
    13. <if test="owner!=null and owner!=''">
    14. and u1.name like '%' #{owner} '%'
    15. </if>
    16. <if test="startDate!=null and startDate!=''">
    17. and a.start_date&gt;=#{startDate}
    18. </if>
    19. <if test="endDate!=null and endDate!=''">
    20. and a.end_date&lt;=#{endDate}
    21. </if>
    22. </where>
    23. order by a.create_time desc
    24. limit #{beginNo},#{pageSize}
    25. </select>

     (5)crm分页查询市场活动实现查询市场活动列表Service层 

    service包下:ActivityService接口:添加方法

    1. package com.bjpowernode.crm.workbench.service;
    2. import com.bjpowernode.crm.workbench.domain.Activity;
    3. import java.util.List;
    4. import java.util.Map;
    5. public interface ActivityService {
    6. //创建保存的市场活动
    7. int saveCreateActivity(Activity activity);
    8. //根据条件分页查询市场活动的列表
    9. List queryActivityByConditionForPage(Map map);
    10. }

     实现类:

    1. package com.bjpowernode.crm.workbench.service.impl;
    2. import com.bjpowernode.crm.workbench.domain.Activity;
    3. import com.bjpowernode.crm.workbench.mapper.ActivityMapper;
    4. import com.bjpowernode.crm.workbench.service.ActivityService;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.stereotype.Service;
    7. import java.util.List;
    8. import java.util.Map;
    9. @Service("activityService")
    10. public class ActivityServiceImpl implements ActivityService {
    11. @Autowired
    12. private ActivityMapper activityMapper;
    13. @Override
    14. public int saveCreateActivity(Activity activity) {
    15. return activityMapper.insertActivity(activity);
    16. }
    17. @Override
    18. public List queryActivityByConditionForPage(Map map) {
    19. return activityMapper.selectActivityByConditionForPage(map);
    20. }
    21. }

    (6)crm实现查询市场活动总条数的Mapper层和Service层

    mapper包下ActivityMapper接口:

    ActivityMapper.xml:

    1. <!--根据条件查询市场活动的总条数-->
    2. <select id="selectCountOfActivityByCondition" parameterType="map" resultType="int">
    3. select count(*)
    4. from tbl_activity a
    5. join tbl_user u1 on a.owner=u1.id
    6. join tbl_user u2 on a.create_by=u2.id
    7. left join tbl_user u3 on a.edit_by=u3.id
    8. <where>
    9. <if test="name!=null and name!=''">
    10. and a.name like '%' #{name} '%'
    11. </if>
    12. <if test="owner!=null and owner!=''">
    13. and u1.name like '%' #{owner} '%'
    14. </if>
    15. <if test="startDate!=null and startDate!=''">
    16. and a.start_date&gt;=#{startDate}
    17. </if>
    18. <if test="endDate!=null and endDate!=''">
    19. and a.end_date&lt;=#{endDate}
    20. </if>
    21. </where>
    22. </select>

     

     service包ActivityService接口:添加查询总条数方法

    1. package com.bjpowernode.crm.workbench.service;
    2. import com.bjpowernode.crm.workbench.domain.Activity;
    3. import java.util.List;
    4. import java.util.Map;
    5. public interface ActivityService {
    6. //创建保存的市场活动
    7. int saveCreateActivity(Activity activity);
    8. //根据条件分页查询市场活动的列表
    9. List queryActivityByConditionForPage(Map map);
    10. //根据条件查询市场活动的总条数
    11. int queryCountOfActivityByCondition(Map map);
    12. }

    实现类:

     (7)crm分页查询市场活动实现Controller层

    在ActivityController:中添加方法:

     (8)crm分页查询市场活动实现前台页面

    在市场活动index.jsp中添加js代码:

    先写查询总条数和显示列表的代码

    1. //收集参数
    2. var name=$("#query-name").val();
    3. var owner=$("#query-owner").val();
    4. var startDate=$("#query-startDate").val();
    5. var endDate=$("#query-endDate").val();
    6. //var pageNo=1;
    7. //var pageSize=10;
    8. //发送请求
    9. $.ajax({
    10. url:'workbench/activity/queryActivityByConditionForPage.do',
    11. data:{
    12. name:name,
    13. owner:owner,
    14. startDate:startDate,
    15. endDate:endDate,
    16. pageNo:pageNo,
    17. pageSize:pageSize
    18. },
    19. type:'post',
    20. dataType:'json',
    21. success:function (data) {
    22. //显示总条数
    23. $("#totalRowsB").text(data.totalRows);
    24. //显示市场活动的列表
    25. //遍历activityList,拼接所有行数据
    26. var htmlStr="";
    27. $.each(data.activityList,function (index,obj) {
    28. htmlStr+="active\">";
    29. htmlStr+="checkbox\" value=\""+obj.id+"\"/>";
    30. htmlStr+=""+obj.owner+"";
    31. htmlStr+=""+obj.startDate+"";
    32. htmlStr+=""+obj.endDate+"";
    33. htmlStr+="";
    34. });
    35. $("#tBody").html(htmlStr);

     

     (9)给市场活动页面的查询按钮添加点击事件

     (10)crm分析翻页功能的实现

    使用分页插件: 

     在webapp下创建paginationtest.jsp页面进行演示分页插件的使用:

    引入分页插件 

     

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <%
    3. String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";
    4. %>
    5. <html>
    6. <head>
    7. <base href="<%=basePath%>">
    8. <!-- JQUERY -->
    9. <script type="text/javascript" src="jquery/jquery-1.11.1-min.js"></script>
    10. <!-- BOOTSTRAP -->
    11. <link rel="stylesheet" type="text/css" href="jquery/bootstrap_3.3.0/css/bootstrap.min.css">
    12. <script type="text/javascript" src="jquery/bootstrap_3.3.0/js/bootstrap.min.js"></script>
    13. <!-- PAGINATION plugin -->
    14. <link rel="stylesheet" type="text/css" href="jquery/bs_pagination-master/css/jquery.bs_pagination.min.css">
    15. <script type="text/javascript" src="jquery/bs_pagination-master/js/jquery.bs_pagination.min.js"></script>
    16. <script type="text/javascript" src="jquery/bs_pagination-master/localization/en.js"></script>
    17. <title>演示bs_pagination插件的使用</title>
    18. <script type="text/javascript">
    19. $(function() {
    20. $("#demo_pag1").bs_pagination({
    21. currentPage:1,//当前页号,相当于pageNo
    22. rowsPerPage:10,//每页显示条数,相当于pageSize
    23. totalRows:1000,//总条数
    24. totalPages: 100, //总页数,必填参数.
    25. visiblePageLinks:5,//最多可以显示的卡片数
    26. showGoToPage:true,//是否显示"跳转到"部分,默认true--显示
    27. showRowsPerPage:true,//是否显示"每页显示条数"部分。默认true--显示
    28. showRowsInfo:true,//是否显示记录的信息,默认true--显示
    29. //用户每次切换页号,都自动触发本函数;
    30. //每次返回切换页号之后的pageNo和pageSize
    31. onChangePage: function(event,pageObj) { // returns page_num and rows_per_page after a link has clicked
    32. //js代码
    33. alert(pageObj.currentPage);
    34. alert(pageObj.rowsPerPage);
    35. }
    36. });
    37. });
    38. </script>
    39. </head>
    40. <body>
    41. <!-- Just create a div and give it an ID -->
    42. <div id="demo_pag1"></div>
    43. </body>
    44. </html>

     

     

     

     

    点击3:

     

     

     分页插件:做的很好,下方的分页信息我们就不用管了,它会动态的发生改变,但是上方的列表怎样变化呢?需要自己根据分页改变后返回的pageNo和PageSize去数据库库中查看,这样我们来维护分页插件列表,插件来帮助我们来维护分页信息

    (11)crm是实现市场活动翻页查询 

    在市场活动页面index.jsp首先引入插件

     

    注释掉原来的固定的分页,创建一个div容器

     在jaax返回sucess的里面调用工具函数:

     

    1. //计算总页数
    2. var totalPages=1;
    3. //判断能否整除
    4. if(data.totalRows%pageSize==0){
    5. totalPages=data.totalRows/pageSize;
    6. }else{
    7. totalPages=parseInt(data.totalRows/pageSize)+1;
    8. }
    9. //对容器调用bs_pagination工具函数,显示翻页信息
    10. $("#demo_pag1").bs_pagination({
    11. currentPage:pageNo,//当前页号,相当于pageNo
    12. rowsPerPage:pageSize,//每页显示条数,相当于pageSize
    13. totalRows:data.totalRows,//总条数
    14. totalPages: totalPages, //总页数,必填参数.
    15. visiblePageLinks:5,//最多可以显示的卡片数
    16. showGoToPage:true,//是否显示"跳转到"部分,默认true--显示
    17. showRowsPerPage:true,//是否显示"每页显示条数"部分。默认true--显示
    18. showRowsInfo:true,//是否显示记录的信息,默认true--显示
    19. //用户每次切换页号,都自动触发本函数;
    20. //每次返回切换页号之后的pageNo和pageSize
    21. onChangePage: function(event,pageObj) { // returns page_num and rows_per_page after a link has clicked
    22. //js代码
    23. //alert(pageObj.currentPage);
    24. //alert(pageObj.rowsPerPage);
    25. queryActivityByConditionForPage(pageObj.currentPage,pageObj.rowsPerPage);
    26. }
    27. });

     

    因为数据库中的数据只有3条,可以更改每页显示1条:

     

     (12)crm实现bs_datetimepicker每页显示条数不变

    当使用名称查询时点击按钮查询下方的分页显示条数发生改变变成了10条:

     更改:

     

     

    1. //给"查询"按钮添加单击事件
    2. $("#queryActivityBtn").click(function () {
    3. //查询所有符合条件数据的第一页以及所有符合条件数据的总条数;$("#demo_pag1").bs_pagination('getOption', 'rowsPerPage')获取上一次的显示条数
    4. queryActivityByConditionForPage(1,$("#demo_pag1").bs_pagination('getOption', 'rowsPerPage'));
    5. });

    现在按照名字查询,下方不会放生改变: 

     (13)crm实现刷新市场活动列表时保存每页显示条数不变

     测试:先让每页显示2条,当前页在第二页:

     点击创建:

    点击保存:发现跳转到第一页,显示新添加的数据,并且每页显示条数不变

     

     市场活动index.jsp目前代码:

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    3. <%
    4. String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";
    5. %>
    6. <html>
    7. <head>
    8. <base href="<%=basePath%>">
    9. <meta charset="UTF-8">
    10. <link href="jquery/bootstrap_3.3.0/css/bootstrap.min.css" type="text/css" rel="stylesheet" />
    11. <link rel="stylesheet" type="text/css" href="jquery/bootstrap-datetimepicker-master/css/bootstrap-datetimepicker.min.css">
    12. <script type="text/javascript" src="jquery/jquery-1.11.1-min.js"></script>
    13. <script type="text/javascript" src="jquery/bootstrap_3.3.0/js/bootstrap.min.js"></script>
    14. <script type="text/javascript" src="jquery/bootstrap-datetimepicker-master/js/bootstrap-datetimepicker.js"></script>
    15. <script type="text/javascript" src="jquery/bootstrap-datetimepicker-master/locale/bootstrap-datetimepicker.zh-CN.js"></script>
    16. <!-- PAGINATION plugin -->
    17. <link rel="stylesheet" type="text/css" href="jquery/bs_pagination-master/css/jquery.bs_pagination.min.css">
    18. <script type="text/javascript" src="jquery/bs_pagination-master/js/jquery.bs_pagination.min.js"></script>
    19. <script type="text/javascript" src="jquery/bs_pagination-master/localization/en.js"></script>
    20. <script type="text/javascript">
    21. $(function(){
    22. //给"创建"按钮添加单击事件
    23. $("#createActivityBtn").click(function () {
    24. //初始化工作
    25. //重置表单
    26. $("#createActivityForm").get(0).reset();
    27. //弹出创建市场活动的模态窗口
    28. $("#createActivityModal").modal("show");
    29. });
    30. //给"保存"按钮添加单击事件
    31. $("#saveCreateActivityBtn").click(function () {
    32. //收集参数
    33. var owner=$("#create-marketActivityOwner").val();
    34. var name=$.trim($("#create-marketActivityName").val());
    35. var startDate=$("#create-startDate").val();
    36. var endDate=$("#create-endDate").val();
    37. var cost=$.trim($("#create-cost").val());
    38. var description=$.trim($("#create-description").val());
    39. //表单验证
    40. if(owner==""){
    41. alert("所有者不能为空");
    42. return;
    43. }
    44. if(name==""){
    45. alert("名称不能为空");
    46. return;
    47. }
    48. if(startDate!=""&&endDate!=""){
    49. //使用字符串的大小代替日期的大小
    50. if(endDate<startDate){
    51. alert("结束日期不能比开始日期小");
    52. return;
    53. }
    54. }
    55. /*
    56. 正则表达式:
    57. 1,语言,语法:定义字符串的匹配模式,可以用来判断指定的具体字符串是否符合匹配模式。
    58. 2,语法通则:
    59. 1)//:在js中定义一个正则表达式. var regExp=/...../;
    60. 2)^:匹配字符串的开头位置
    61. $: 匹配字符串的结尾
    62. 3)[]:匹配指定字符集中的一位字符。 var regExp=/^[abc]$/;
    63. var regExp=/^[a-z0-9]$/;
    64. 4){}:匹配次数.var regExp=/^[abc]{5}$/;
    65. {m}:匹配m此
    66. {m,n}:匹配m次到n次
    67. {m,}:匹配m次或者更多次
    68. 5)特殊符号:
    69. \d:匹配一位数字,相当于[0-9]
    70. \D:匹配一位非数字
    71. \w:匹配所有字符,包括字母、数字、下划线。
    72. \W:匹配非字符,除了字母、数字、下划线之外的字符。
    73. *:匹配0次或者多次,相当于{0,}
    74. +:匹配1次或者多次,相当于{1,}
    75. ?:匹配0次或者1次,相当于{0,1}
    76. */
    77. var regExp=/^(([1-9]\d*)|0)$/;
    78. if(!regExp.test(cost)){
    79. alert("成本只能为非负整数");
    80. return;
    81. }
    82. //发送请求
    83. $.ajax({
    84. url:'workbench/activity/saveCreateActivity.do',
    85. data:{
    86. owner:owner,
    87. name:name,
    88. startDate:startDate,
    89. endDate:endDate,
    90. cost:cost,
    91. description:description
    92. },
    93. type:'post',
    94. dataType:'json',
    95. success:function (data) {
    96. if(data.code=="1"){
    97. //关闭模态窗口
    98. $("#createActivityModal").modal("hide");
    99. //刷新市场活动列,显示第一页数据,保持每页显示条数不变
    100. queryActivityByConditionForPage(1,$("#demo_pag1").bs_pagination('getOption', 'rowsPerPage'));
    101. }else{
    102. //提示信息
    103. alert(data.message);
    104. //模态窗口不关闭
    105. $("#createActivityModal").modal("show");//可以不写。
    106. }
    107. }
    108. });
    109. });
    110. //当容器加载完成之后,对容器调用工具函数 显示日历
    111. //$("input[name='mydate']").datetimepicker({
    112. $(".mydate").datetimepicker({
    113. language:'zh-CN', //语言
    114. format:'yyyy-mm-dd',//日期的格式
    115. minView:'month', //可以选择的最小视图
    116. initialDate:new Date(),//初始化显示的日期
    117. autoclose:true,//设置选择完日期或者时间之后,日否自动关闭日历
    118. todayBtn:true,//设置是否显示"今天"按钮,默认是false
    119. clearBtn:true//设置是否显示"清空"按钮,默认是false
    120. });
    121. //当市场活动主页面加载完成,查询所有数据的第一页以及所有数据的总条数,默认每页显示10条
    122. queryActivityByConditionForPage(1,10);
    123. //给"查询"按钮添加单击事件
    124. $("#queryActivityBtn").click(function () {
    125. //查询所有符合条件数据的第一页以及所有符合条件数据的总条数;$("#demo_pag1").bs_pagination('getOption', 'rowsPerPage')获取上一次的显示条数
    126. queryActivityByConditionForPage(1,$("#demo_pag1").bs_pagination('getOption', 'rowsPerPage'));
    127. });
    128. });
    129. //定义函数进行查询
    130. function queryActivityByConditionForPage(pageNo,pageSize) {
    131. //收集参数
    132. var name=$("#query-name").val();
    133. var owner=$("#query-owner").val();
    134. var startDate=$("#query-startDate").val();
    135. var endDate=$("#query-endDate").val();
    136. //var pageNo=1;
    137. //var pageSize=10;
    138. //发送请求
    139. $.ajax({
    140. url:'workbench/activity/queryActivityByConditionForPage.do',
    141. data:{
    142. name:name,
    143. owner:owner,
    144. startDate:startDate,
    145. endDate:endDate,
    146. pageNo:pageNo,
    147. pageSize:pageSize
    148. },
    149. type:'post',
    150. dataType:'json',
    151. success:function (data) {
    152. //显示总条数
    153. //$("#totalRowsB").text(data.totalRows);
    154. //显示市场活动的列表
    155. //遍历activityList,拼接所有行数据
    156. var htmlStr="";
    157. $.each(data.activityList,function (index,obj) {
    158. htmlStr+="active\">";
    159. htmlStr+="checkbox\" value=\""+obj.id+"\"/>";
    160. htmlStr+=""+obj.owner+"";
    161. htmlStr+=""+obj.startDate+"";
    162. htmlStr+=""+obj.endDate+"";
    163. htmlStr+="";
    164. });
    165. $("#tBody").html(htmlStr);
    166. //取消"全选"按钮
    167. $("#chckAll").prop("checked",false);
    168. //计算总页数
    169. var totalPages=1;
    170. //判断能否整除
    171. if(data.totalRows%pageSize==0){
    172. totalPages=data.totalRows/pageSize;
    173. }else{
    174. totalPages=parseInt(data.totalRows/pageSize)+1;
    175. }
    176. //对容器调用bs_pagination工具函数,显示翻页信息
    177. $("#demo_pag1").bs_pagination({
    178. currentPage:pageNo,//当前页号,相当于pageNo
    179. rowsPerPage:pageSize,//每页显示条数,相当于pageSize
    180. totalRows:data.totalRows,//总条数
    181. totalPages: totalPages, //总页数,必填参数.
    182. visiblePageLinks:5,//最多可以显示的卡片数
    183. showGoToPage:true,//是否显示"跳转到"部分,默认true--显示
    184. showRowsPerPage:true,//是否显示"每页显示条数"部分。默认true--显示
    185. showRowsInfo:true,//是否显示记录的信息,默认true--显示
    186. //用户每次切换页号,都自动触发本函数;
    187. //每次返回切换页号之后的pageNo和pageSize
    188. onChangePage: function(event,pageObj) { // returns page_num and rows_per_page after a link has clicked
    189. //js代码
    190. //alert(pageObj.currentPage);
    191. //alert(pageObj.rowsPerPage);
    192. queryActivityByConditionForPage(pageObj.currentPage,pageObj.rowsPerPage);
    193. }
    194. });
    195. }
    196. });
    197. }
    198. </script>
    199. </head>
    200. <body>
    201. <!-- 创建市场活动的模态窗口 -->
    202. <div class="modal fade" id="createActivityModal" role="dialog">
    203. <div class="modal-dialog" role="document" style="width: 85%;">
    204. <div class="modal-content">
    205. <div class="modal-header">
    206. <button type="button" class="close" data-dismiss="modal">
    207. <span aria-hidden="true">×</span>
    208. </button>
    209. <h4 class="modal-title" id="myModalLabel1">创建市场活动</h4>
    210. </div>
    211. <div class="modal-body">
    212. <form id="createActivityForm" class="form-horizontal" role="form">
    213. <div class="form-group">
    214. <label for="create-marketActivityOwner" class="col-sm-2 control-label">所有者<span style="font-size: 15px; color: red;">*</span></label>
    215. <div class="col-sm-10" style="width: 300px;">
    216. <select class="form-control" id="create-marketActivityOwner">
    217. <c:forEach items="${userList}" var="u">
    218. <option value="${u.id}">${u.name}</option>
    219. </c:forEach>
    220. </select>
    221. </div>
    222. <label for="create-marketActivityName" class="col-sm-2 control-label">名称<span style="font-size: 15px; color: red;">*</span></label>
    223. <div class="col-sm-10" style="width: 300px;">
    224. <input type="text" class="form-control" id="create-marketActivityName">
    225. </div>
    226. </div>
    227. <div class="form-group">
    228. <label for="create-startDate" class="col-sm-2 control-label">开始日期</label>
    229. <div class="col-sm-10" style="width: 300px;">
    230. <input type="text" class="form-control mydate" name="mydate" id="create-startDate" readonly>
    231. </div>
    232. <label for="create-endDate" class="col-sm-2 control-label">结束日期</label>
    233. <div class="col-sm-10" style="width: 300px;">
    234. <input type="text" class="form-control mydate" name="mydate " id="create-endDate" readonly>
    235. </div>
    236. </div>
    237. <div class="form-group">
    238. <label for="create-cost" class="col-sm-2 control-label">成本</label>
    239. <div class="col-sm-10" style="width: 300px;">
    240. <input type="text" class="form-control" id="create-cost">
    241. </div>
    242. </div>
    243. <div class="form-group">
    244. <label for="create-description" class="col-sm-2 control-label">描述</label>
    245. <div class="col-sm-10" style="width: 81%;">
    246. <textarea class="form-control" rows="3" id="create-description"></textarea>
    247. </div>
    248. </div>
    249. </form>
    250. </div>
    251. <div class="modal-footer">
    252. <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
    253. <button type="button" class="btn btn-primary" ID="saveCreateActivityBtn">保存</button>
    254. </div>
    255. </div>
    256. </div>
    257. </div>
    258. <!-- 修改市场活动的模态窗口 -->
    259. <div class="modal fade" id="editActivityModal" role="dialog">
    260. <div class="modal-dialog" role="document" style="width: 85%;">
    261. <div class="modal-content">
    262. <div class="modal-header">
    263. <button type="button" class="close" data-dismiss="modal">
    264. <span aria-hidden="true">×</span>
    265. </button>
    266. <h4 class="modal-title" id="myModalLabel2">修改市场活动</h4>
    267. </div>
    268. <div class="modal-body">
    269. <form class="form-horizontal" role="form">
    270. <div class="form-group">
    271. <label for="edit-marketActivityOwner" class="col-sm-2 control-label">所有者<span style="font-size: 15px; color: red;">*</span></label>
    272. <div class="col-sm-10" style="width: 300px;">
    273. <select class="form-control" id="edit-marketActivityOwner">
    274. <c:forEach items="${userList}" var="u">
    275. <option value="${u.id}">${u.name}</option>
    276. </c:forEach>
    277. </select>
    278. </div>
    279. <label for="edit-marketActivityName" class="col-sm-2 control-label">名称<span style="font-size: 15px; color: red;">*</span></label>
    280. <div class="col-sm-10" style="width: 300px;">
    281. <input type="text" class="form-control" id="edit-marketActivityName" value="发传单">
    282. </div>
    283. </div>
    284. <div class="form-group">
    285. <label for="edit-startTime" class="col-sm-2 control-label">开始日期</label>
    286. <div class="col-sm-10" style="width: 300px;">
    287. <input type="text" class="form-control" id="edit-startTime" value="2020-10-10">
    288. </div>
    289. <label for="edit-endTime" class="col-sm-2 control-label">结束日期</label>
    290. <div class="col-sm-10" style="width: 300px;">
    291. <input type="text" class="form-control" id="edit-endTime" value="2020-10-20">
    292. </div>
    293. </div>
    294. <div class="form-group">
    295. <label for="edit-cost" class="col-sm-2 control-label">成本</label>
    296. <div class="col-sm-10" style="width: 300px;">
    297. <input type="text" class="form-control" id="edit-cost" value="5,000">
    298. </div>
    299. </div>
    300. <div class="form-group">
    301. <label for="edit-describe" class="col-sm-2 control-label">描述</label>
    302. <div class="col-sm-10" style="width: 81%;">
    303. <textarea class="form-control" rows="3" id="edit-describe">市场活动Marketing,是指品牌主办或参与的展览会议与公关市场活动,包括自行主办的各类研讨会、客户交流会、演示会、新产品发布会、体验会、答谢会、年会和出席参加并布展或演讲的展览会、研讨会、行业交流会、颁奖典礼等</textarea>
    304. </div>
    305. </div>
    306. </form>
    307. </div>
    308. <div class="modal-footer">
    309. <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
    310. <button type="button" class="btn btn-primary" data-dismiss="modal">更新</button>
    311. </div>
    312. </div>
    313. </div>
    314. </div>
    315. <!-- 导入市场活动的模态窗口 -->
    316. <div class="modal fade" id="importActivityModal" role="dialog">
    317. <div class="modal-dialog" role="document" style="width: 85%;">
    318. <div class="modal-content">
    319. <div class="modal-header">
    320. <button type="button" class="close" data-dismiss="modal">
    321. <span aria-hidden="true">×</span>
    322. </button>
    323. <h4 class="modal-title" id="myModalLabel">导入市场活动</h4>
    324. </div>
    325. <div class="modal-body" style="height: 350px;">
    326. <div style="position: relative;top: 20px; left: 50px;">
    327. 请选择要上传的文件:<small style="color: gray;">[仅支持.xls]</small>
    328. </div>
    329. <div style="position: relative;top: 40px; left: 50px;">
    330. <input type="file" id="activityFile">
    331. </div>
    332. <div style="position: relative; width: 400px; height: 320px; left: 45% ; top: -40px;" >
    333. <h3>重要提示</h3>
    334. <ul>
    335. <li>操作仅针对Excel,仅支持后缀名为XLS的文件。</li>
    336. <li>给定文件的第一行将视为字段名。</li>
    337. <li>请确认您的文件大小不超过5MB。</li>
    338. <li>日期值以文本形式保存,必须符合yyyy-MM-dd格式。</li>
    339. <li>日期时间以文本形式保存,必须符合yyyy-MM-dd HH:mm:ss的格式。</li>
    340. <li>默认情况下,字符编码是UTF-8 (统一码),请确保您导入的文件使用的是正确的字符编码方式。</li>
    341. <li>建议您在导入真实数据之前用测试文件测试文件导入功能。</li>
    342. </ul>
    343. </div>
    344. </div>
    345. <div class="modal-footer">
    346. <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
    347. <button id="importActivityBtn" type="button" class="btn btn-primary">导入</button>
    348. </div>
    349. </div>
    350. </div>
    351. </div>
    352. <div>
    353. <div style="position: relative; left: 10px; top: -10px;">
    354. <div class="page-header">
    355. <h3>市场活动列表</h3>
    356. </div>
    357. </div>
    358. </div>
    359. <div style="position: relative; top: -20px; left: 0px; width: 100%; height: 100%;">
    360. <div style="width: 100%; position: absolute;top: 5px; left: 10px;">
    361. <div class="btn-toolbar" role="toolbar" style="height: 80px;">
    362. <form class="form-inline" role="form" style="position: relative;top: 8%; left: 5px;">
    363. <div class="form-group">
    364. <div class="input-group">
    365. <div class="input-group-addon">名称</div>
    366. <input class="form-control" type="text" id="query-name">
    367. </div>
    368. </div>
    369. <div class="form-group">
    370. <div class="input-group">
    371. <div class="input-group-addon">所有者</div>
    372. <input class="form-control" type="text" id="query-owner">
    373. </div>
    374. </div>
    375. <div class="form-group">
    376. <div class="input-group">
    377. <div class="input-group-addon">开始日期</div>
    378. <input class="form-control" type="text" id="query-startDate" />
    379. </div>
    380. </div>
    381. <div class="form-group">
    382. <div class="input-group">
    383. <div class="input-group-addon">结束日期</div>
    384. <input class="form-control" type="text" id="query-endDate">
    385. </div>
    386. </div>
    387. <button type="button" class="btn btn-default" id="queryActivityBtn">查询</button>
    388. </form>
    389. </div>
    390. <div class="btn-toolbar" role="toolbar" style="background-color: #F7F7F7; height: 50px; position: relative;top: 5px;">
    391. <div class="btn-group" style="position: relative; top: 18%;">
    392. <button type="button" class="btn btn-primary" id="createActivityBtn"><span class="glyphicon glyphicon-plus"></span> 创建</button>
    393. <button type="button" class="btn btn-default" data-toggle="modal" data-target="#editActivityModal"><span class="glyphicon glyphicon-pencil"></span> 修改</button>
    394. <button type="button" class="btn btn-danger"><span class="glyphicon glyphicon-minus"></span> 删除</button>
    395. </div>
    396. <div class="btn-group" style="position: relative; top: 18%;">
    397. <button type="button" class="btn btn-default" data-toggle="modal" data-target="#importActivityModal" ><span class="glyphicon glyphicon-import"></span> 上传列表数据(导入)</button>
    398. <button id="exportActivityAllBtn" type="button" class="btn btn-default"><span class="glyphicon glyphicon-export"></span> 下载列表数据(批量导出)</button>
    399. <button id="exportActivityXzBtn" type="button" class="btn btn-default"><span class="glyphicon glyphicon-export"></span> 下载列表数据(选择导出)</button>
    400. </div>
    401. </div>
    402. <div style="position: relative;top: 10px;">
    403. <table class="table table-hover">
    404. <thead>
    405. <tr style="color: #B3B3B3;">
    406. <td><input type="checkbox" /></td>
    407. <td>名称</td>
    408. <td>所有者</td>
    409. <td>开始日期</td>
    410. <td>结束日期</td>
    411. </tr>
    412. </thead>
    413. <tbody id="tBody">
    414. <%--<tr class="active">
    415. <td><input type="checkbox" /></td>
    416. <td><a style="text-decoration: none; cursor: pointer;" onclick="window.location.href='detail.html';">发传单</a></td>
    417. <td>zhangsan</td>
    418. <td>2020-10-10</td>
    419. <td>2020-10-20</td>
    420. </tr>
    421. <tr class="active">
    422. <td><input type="checkbox" /></td>
    423. <td><a style="text-decoration: none; cursor: pointer;" onclick="window.location.href='detail.html';">发传单</a></td>
    424. <td>zhangsan</td>
    425. <td>2020-10-10</td>
    426. <td>2020-10-20</td>
    427. </tr>--%>
    428. </tbody>
    429. </table>
    430. <%--分页--%>
    431. <div id="demo_pag1"></div>
    432. </div>
    433. <%--<div style="height: 50px; position: relative;top: 30px;">
    434. <div>
    435. <button type="button" class="btn btn-default" style="cursor: default;">共<b id="totalRowsB">50</b>条记录</button>
    436. </div>
    437. <div class="btn-group" style="position: relative;top: -34px; left: 110px;">
    438. <button type="button" class="btn btn-default" style="cursor: default;">显示</button>
    439. <div class="btn-group">
    440. <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
    441. 10
    442. <span class="caret"></span>
    443. </button>
    444. <ul class="dropdown-menu" role="menu">
    445. <li><a href="#">20</a></li>
    446. <li><a href="#">30</a></li>
    447. </ul>
    448. </div>
    449. <button type="button" class="btn btn-default" style="cursor: default;">条/页</button>
    450. </div>
    451. <div style="position: relative;top: -88px; left: 285px;">
    452. <nav>
    453. <ul class="pagination">
    454. <li class="disabled"><a href="#">首页</a></li>
    455. <li class="disabled"><a href="#">上一页</a></li>
    456. <li class="active"><a href="#">1</a></li>
    457. <li><a href="#">2</a></li>
    458. <li><a href="#">3</a></li>
    459. <li><a href="#">4</a></li>
    460. <li><a href="#">5</a></li>
    461. <li><a href="#">下一页</a></li>
    462. <li class="disabled"><a href="#">末页</a></li>
    463. </ul>
    464. </nav>
    465. </div>
    466. </div>--%>
    467. </div>
    468. </div>
    469. </body>
    470. </html>

  • 相关阅读:
    多线程《1》JMM基础知识---volatile的可见性和一致性
    BioVendor sRAGE Elisa试剂盒测试原理和注意事项
    蓝桥杯刷题--python-12
    性能测试监控指标及分析调优 | 京东云技术团队
    ts重点学习109-枚举类型的兼容性
    牛客NC233 加起来和为目标值的组合(四)【中等 DFS C++、Java、Go、PHP】
    Istio服务网格进阶⑦:Istio流量治理之故障注入与重试
    http接口自动化测试框架实现
    十几年Java“老油条”,教你如何才能把Java学好学透彻
    windows 系统下 workerman 在同一个运行窗口中开启多个 websocket 服务
  • 原文地址:https://blog.csdn.net/dengfengling999/article/details/127022324