<!DOCTYPE html> | |
<html ng-app="OrderApp"> | |
<head> | |
<meta charset="UTF-8"> | |
<title>订单管理</title> | |
<script type="text/javascript" src="jquery.1.12.4.js"></script> | |
<script type="text/javascript" src="angular-1.3.0.js"></script> | |
<style type="text/css"> | |
* { | |
font-size: 14px; | |
margin: 0; | |
padding: 0; | |
} | |
body { | |
padding: 16px 32px; | |
} | |
.filter { | |
position: relative; | |
width: 800px; | |
height: 40px; | |
margin: 0 auto; | |
} | |
.filter input { | |
width: 152px; | |
height: 24px; | |
border: 1px solid #999; | |
border-radius: 4px; | |
padding-left: 8px; | |
} | |
.filter select { | |
width: 86px; | |
height: 24px; | |
border: 1px solid #999; | |
border-radius: 4px; | |
} | |
.buttons { | |
width: 800px; | |
height: 40px; | |
margin: 0 auto; | |
} | |
.buttons button { | |
width: 80px; | |
height: 24px; | |
background-color: green; | |
border: 0; | |
border-radius: 4px; | |
color: white; | |
} | |
.buttons .remove_btn { | |
background-color: red; | |
} | |
.list { | |
width: 800px; | |
margin: 0 auto; | |
} | |
.list table tr { | |
height: 32px; | |
} | |
.list thead tr { | |
background-color: #777; | |
} | |
.list tbody tr:nth-child(odd) { | |
background-color: #ccc; | |
} | |
.list tbody tr:nth-child(even) { | |
background-color: #fff; | |
} | |
.list button { | |
width: 40px; | |
height: 18px; | |
line-height: 18px; | |
background-color: green; | |
border: 0; | |
border-radius: 4px; | |
color: white; | |
font-size: 8px; | |
} | |
.form { | |
width: 460px; | |
border: 1px solid #999; | |
margin: 0 auto; | |
} | |
.form div { | |
clear: both; | |
} | |
.form .formErr { | |
border: 1px solid red; | |
} | |
.form .label { | |
display: block; | |
float: left; | |
width: 80px; | |
height: 40px; | |
line-height: 40px; | |
text-align: end; | |
} | |
.form .txt { | |
display: block; | |
float: left; | |
width: 340px; | |
height: 40px; | |
line-height: 40px; | |
padding-left: 16px; | |
} | |
.form input { | |
width: 312px; | |
height: 24px; | |
border: 1px solid #999; | |
border-radius: 4px; | |
padding-left: 8px; | |
} | |
.form select { | |
width: 86px; | |
height: 24px; | |
border: 1px solid #999; | |
border-radius: 4px; | |
} | |
.form button { | |
width: 56px; | |
height: 24px; | |
background-color: green; | |
border: 0; | |
border-radius: 4px; | |
color: white; | |
} | |
.form .errTips { | |
width: 226px; | |
background-color: lightpink; | |
color: darkred; | |
border-radius: 4px; | |
margin-left: 96px; | |
margin-top: 6px; | |
margin-bottom: 4px; | |
padding: 16px 48px; | |
} | |
</style> | |
<script type="text/javascript"> | |
var data = [ | |
{ | |
id: 1, | |
goodsName: "iPhone 8 Plus", | |
userName: "曹操", | |
phone: "15111111111", | |
price: 7588.00, | |
city: "北京", | |
dtCreated: "09-04 10:00", | |
status: "已发货" | |
}, | |
{ | |
id: 2, | |
goodsName: "华为 畅享6S", | |
userName: "刘备", | |
phone: "15222222222", | |
price: 899.00, | |
city: "天津", | |
dtCreated: "08-09 10:00", | |
status: "已发货" | |
}, | |
{ | |
id: 3, | |
goodsName: "努比亚Z17", | |
userName: "孙权", | |
phone: "15333333333", | |
price: 2099.00, | |
city: "上海", | |
dtCreated: "07-01 10:00", | |
status: "待发货" | |
}, | |
{ | |
id: 4, | |
goodsName: "三星 Galaxy S7", | |
userName: "司马懿", | |
phone: "15444444444", | |
price: 2999.00, | |
city: "北京", | |
dtCreated: "06-02 10:00", | |
status: "已发货" | |
}, | |
{ | |
id: 5, | |
goodsName: "魅蓝5S", | |
userName: "夏侯淳", | |
phone: "15555555555", | |
price: 999.00, | |
city: "北京", | |
dtCreated: "10-03 10:00", | |
status: "已发货" | |
}, | |
{ | |
id: 6, | |
goodsName: "三星 Galaxy Note8", | |
userName: "张辽", | |
phone: "15666666666", | |
price: 2599.00, | |
city: "北京", | |
dtCreated: "04-02 10:00", | |
status: "已收货" | |
}, | |
{ | |
id: 7, | |
goodsName: "OPPO R9sk", | |
userName: "关羽", | |
phone: "15777777777", | |
price: 4999.00, | |
city: "北京", | |
dtCreated: "03-09 10:00", | |
status: "已发货" | |
}, | |
{ | |
id: 8, | |
goodsName: "红米Note4X", | |
userName: "张飞", | |
phone: "15888888888", | |
price: 999.00, | |
city: "上海", | |
dtCreated: "05-18 10:00", | |
status: "已收货" | |
}, | |
{ | |
id: 9, | |
goodsName: "红米5A", | |
userName: "周瑜", | |
phone: "15999999999", | |
price: 599.00, | |
city: "重庆", | |
dtCreated: "06-16 10:00", | |
status: "待发货" | |
}, | |
{ | |
id: 10, | |
goodsName: "小米Mix2", | |
userName: "黄盖", | |
phone: "13111111111", | |
price: 3299.00, | |
city: "北京", | |
dtCreated: "03-15 10:00", | |
status: "待发货" | |
}, | |
{ | |
id: 11, | |
goodsName: "小米Note5", | |
userName: "黄忠", | |
phone: "13222222222", | |
price: 699.00, | |
city: "重庆", | |
dtCreated: "02-28 10:00", | |
status: "待发货" | |
}, | |
{ | |
id: 12, | |
goodsName: "VIVO X20", | |
userName: "赵云", | |
phone: "13333333333", | |
price: 2998.00, | |
city: "上海", | |
dtCreated: "08-22 10:00", | |
status: "已发货" | |
} | |
]; | |
// 全选/全不选 | |
$(function () { | |
$("input[name='check_all']").click(function () { | |
var checked = this.checked; // 获取 <input type="checkbox" name="check_all"/> 中checked属性的值 | |
$("input[name='order_id[]']").each(function () { | |
this.checked = checked; // 依次设置每一个 <input type="checkbox" name="order_id[]"/> 中checked属性的值 | |
}); | |
}); | |
}); | |
var app = angular.module("OrderApp", []); | |
// 敏感词 | |
app.filter("sensitiveWord", function () { | |
return function (msg, flag) { | |
return msg.replace(flag, "*"); | |
} | |
}); | |
app.controller("OrderCtrl", function ($scope) { | |
$scope.data = data; | |
var id = 12; | |
// 通过月份过滤 | |
$scope.filterByMonth = function (order) { | |
if ($scope.filter_begin_month == undefined || $scope.filter_begin_month == "") { | |
return true; | |
} | |
if ($scope.filter_end_month == undefined || $scope.filter_end_month == "") { | |
return true; | |
} | |
var beginMonth = parseInt($scope.filter_begin_month); | |
var endMonth = parseInt($scope.filter_end_month); | |
if (beginMonth > endMonth) { | |
return true; | |
} | |
var month = order.dtCreated.substr(0, order.dtCreated.indexOf("-")); | |
month = parseInt(month); | |
return (month >= beginMonth && month <= endMonth); | |
}; | |
// 发货 | |
$scope.deliver = function (id) { | |
for (var i in $scope.data) { | |
if ($scope.data[i].id == id) { | |
$scope.data[i].status = "已发货"; | |
} | |
} | |
}; | |
// 批量发货 | |
$scope.batchDeliver = function () { | |
$("input[name='order_id[]']:checked").each(function () { | |
$scope.deliver(this.id); | |
}); | |
}; | |
// 删除 | |
$scope.remove = function (id) { | |
for (var i in $scope.data) { | |
if ($scope.data[i].id == id) { | |
$scope.data.splice(i, 1); | |
} | |
} | |
}; | |
// 批量删除 | |
$scope.batchRemove = function () { | |
$("input[name='order_id[]']:checked").each(function () { | |
$scope.remove(this.id); | |
}); | |
}; | |
$scope.isShowAddOrderForm = false; | |
// 显示新增订单表单 | |
$scope.showAddOrderForm = function () { | |
$scope.isShowAddOrderForm = true; | |
}; | |
$scope.errTips = []; | |
// 提交新增订单表单 | |
$scope.submitAddOrderForm = function () { | |
$scope.errTips = []; | |
$scope.goodsNameClassName = ""; | |
$scope.userNameClassName = ""; | |
$scope.phoneClassName = ""; | |
$scope.priceClassName = ""; | |
$scope.hasErr = false; | |
var goodsName = $scope.goodsName == undefined ? "" : $scope.goodsName.trim(); | |
var userName = $scope.userName == undefined ? "" : $scope.userName.trim(); | |
var phone = $scope.phone == undefined ? "" : $scope.phone.trim(); | |
var price = $scope.price == undefined ? "" : $scope.price.trim(); | |
if (goodsName == "") { | |
$scope.errTips.push("商品名不能为空!"); | |
$scope.goodsNameClassName = "formErr"; | |
$scope.hasErr = true; | |
} | |
if (userName == "") { | |
$scope.errTips.push("用户名不能为空!"); | |
$scope.userNameClassName = "formErr"; | |
$scope.hasErr = true; | |
} | |
if (phone == "") { | |
$scope.errTips.push("手机号不能为空!"); | |
$scope.phoneClassName = "formErr"; | |
$scope.hasErr = true; | |
} | |
if (price == "") { | |
$scope.errTips.push("价格不能为空!"); | |
$scope.priceClassName = "formErr"; | |
$scope.hasErr = true; | |
} | |
if ($scope.city == undefined || $scope.city == "") { | |
$scope.errTips.push("请选择城市!"); | |
$scope.hasErr = true; | |
} | |
if (goodsName.length < 6 || goodsName.length > 20) { | |
$scope.errTips.push("商品名必须是6-20个字符!"); | |
$scope.goodsNameClassName = "formErr"; | |
$scope.hasErr = true; | |
} | |
if (userName.length < 4 || userName.length > 16) { | |
$scope.errTips.push("用户名必须是4-16个字符!"); | |
$scope.userNameClassName = "formErr"; | |
$scope.hasErr = true; | |
} | |
if (!/^\d{11}$/.test(phone)) { | |
$scope.errTips.push("手机号格式不正确!"); | |
$scope.phoneClassName = "formErr"; | |
$scope.hasErr = true; | |
} | |
price = parseFloat(price); | |
if (isNaN(price) || price <= 0) { | |
$scope.errTips.push("价格必须大于0!"); | |
$scope.priceClassName = "formErr"; | |
$scope.hasErr = true; | |
} | |
if ($scope.hasErr) { | |
return; | |
} | |
$scope.data.push({ | |
id: ++id, | |
goodsName: goodsName, | |
userName: userName, | |
phone: phone, | |
price: price, | |
city: $scope.city, | |
dtCreated: "10-25 10:00", | |
status: "待发货" | |
}); | |
$scope.goodsName = ""; | |
$scope.userName = ""; | |
$scope.phone = ""; | |
$scope.price = ""; | |
$scope.city = ""; | |
$scope.isShowAddOrderForm = false; | |
}; | |
// 显示修改订单表单 | |
$scope.edit = function (id) { | |
for (var i in $scope.data) { | |
if ($scope.data[i].id == id) { | |
$scope.edit_goodsName = $scope.data[i].goodsName; | |
$scope.edit_userName = $scope.data[i].userName; | |
$scope.edit_phone = $scope.data[i].phone; | |
$scope.edit_price = $scope.data[i].price; | |
$scope.edit_city = $scope.data[i].city; | |
$scope.edit_id = $scope.data[i].id; | |
} | |
} | |
$scope.isShowEditOrderForm = true; | |
}; | |
// 提交修改订单表单 | |
$scope.submitEditOrderForm = function () { | |
$scope.errTips = []; | |
$scope.edit_userNameClassName = ""; | |
$scope.edit_phoneClassName = ""; | |
$scope.edit_priceClassName = ""; | |
$scope.hasErr = false; | |
var id = $scope.edit_id == undefined ? "" : parseInt($scope.edit_id); | |
var userName = $scope.edit_userName == undefined ? "" : $scope.edit_userName.trim(); | |
var phone = $scope.edit_phone == undefined ? "" : $scope.edit_phone.trim(); | |
var price = $scope.edit_price == undefined ? "" : $scope.edit_price; | |
if (userName == "") { | |
$scope.errTips.push("用户名不能为空!"); | |
$scope.userNameClassName = "formErr"; | |
$scope.hasErr = true; | |
} | |
if (phone == "") { | |
$scope.errTips.push("手机号不能为空!"); | |
$scope.phoneClassName = "formErr"; | |
$scope.hasErr = true; | |
} | |
if (price == "") { | |
$scope.errTips.push("价格不能为空!"); | |
$scope.priceClassName = "formErr"; | |
$scope.hasErr = true; | |
} | |
if ($scope.edit_city == undefined || $scope.edit_city == "") { | |
$scope.errTips.push("请选择城市!"); | |
$scope.hasErr = true; | |
} | |
if (userName.length < 4 || userName.length > 16) { | |
$scope.errTips.push("用户名必须是4-16个字符!"); | |
$scope.userNameClassName = "formErr"; | |
$scope.hasErr = true; | |
} | |
if (!/^\d{11}$/.test(phone)) { | |
$scope.errTips.push("手机号格式不正确!"); | |
$scope.phoneClassName = "formErr"; | |
$scope.hasErr = true; | |
} | |
price = parseFloat(price); | |
if (isNaN(price) || price <= 0) { | |
$scope.errTips.push("价格必须大于0!"); | |
$scope.priceClassName = "formErr"; | |
$scope.hasErr = true; | |
} | |
if ($scope.hasErr) { | |
return; | |
} | |
for (var i in $scope.data) { | |
if ($scope.data[i].id == id) { | |
$scope.data[i].userName = userName; | |
$scope.data[i].phone = phone; | |
$scope.data[i].price = price; | |
$scope.data[i].city = $scope.edit_city; | |
} | |
} | |
$scope.edit_goodsName = ""; | |
$scope.edit_userName = ""; | |
$scope.edit_phone = ""; | |
$scope.edit_price = ""; | |
$scope.edit_city = ""; | |
$scope.isShowEditOrderForm = false; | |
}; | |
}); | |
</script> | |
</head> | |
<body ng-controller="OrderCtrl"> | |
<div class="filter"> | |
<input type="text" placeholder="用户名搜索" ng-model="filter_user_name"/> | |
<input type="text" placeholder="手机号搜索" ng-model="filter_phone"/> | |
<select class="choose_city" ng-model="filter_city"> | |
<option value="">选择城市</option> | |
<option value="北京">北京</option> | |
<option value="上海">上海</option> | |
<option value="天津">天津</option> | |
<option value="重庆">重庆</option> | |
</select> | |
<select class="choose_status" ng-model="filter_status"> | |
<option value="">选择状态</option> | |
<option value="待发货">待发货</option> | |
<option value="已发货">已发货</option> | |
<option value="已收货">已收货</option> | |
</select> | |
<select class="choose_time_begin_month" ng-model="filter_begin_month"> | |
<option value="">开始月份</option> | |
<option value="1">01</option> | |
<option value="2">02</option> | |
<option value="3">03</option> | |
<option value="4">04</option> | |
<option value="5">05</option> | |
<option value="6">06</option> | |
<option value="7">07</option> | |
<option value="8">08</option> | |
<option value="9">09</option> | |
<option value="10">10</option> | |
<option value="11">11</option> | |
<option value="12">12</option> | |
</select> - | |
<select class="choose_time_end_month" ng-model="filter_end_month"> | |
<option value="">结束月份</option> | |
<option value="1">01</option> | |
<option value="2">02</option> | |
<option value="3">03</option> | |
<option value="4">04</option> | |
<option value="5">05</option> | |
<option value="6">06</option> | |
<option value="7">07</option> | |
<option value="8">08</option> | |
<option value="9">09</option> | |
<option value="10">10</option> | |
<option value="11">11</option> | |
<option value="12">12</option> | |
</select> | |
<select class="id_order" ng-model="id_order_type"> | |
<option value="">ID排序</option> | |
<option value="id">ID正序</option> | |
<option value="-id">ID倒序</option> | |
</select> | |
</div> | |
<div class="buttons"> | |
<button class="add_btn" ng-click="showAddOrderForm();">新增订单</button> | |
<button class="deliver_btn" ng-click="batchDeliver()">批量发货</button> | |
<button class="remove_btn" ng-click="batchRemove()">批量删除</button> | |
敏感字:米(商品名)-> 替换成 * | |
</div> | |
<div class="list"> | |
<table width="800px" cellspacing="0" rules="cols" border="1px"> | |
<thead> | |
<tr> | |
<th width="4%"> | |
<input type="checkbox" name="check_all"/> | |
</th> | |
<th width="6%">ID</th> | |
<th width="14%">商品名</th> | |
<th width="8%">用户名</th> | |
<th width="14%">手机号</th> | |
<th width="10%">价格</th> | |
<th width="8%">城市</th> | |
<th width="12%">下单时间</th> | |
<th width="8%">状态</th> | |
<th width="14%">操作</th> | |
</tr> | |
</thead> | |
<tbody> | |
<tr align="center" | |
ng-repeat="order in data | filter: {userName: filter_user_name} | filter: {phone: filter_phone} | filter: {city: filter_city} | filter: {status: filter_status} | filter: filterByMonth | orderBy: id_order_type"> | |
<td> | |
<input type="checkbox" name="order_id[]" id="{{ order.id }}"/> | |
</td> | |
<td>{{ order.id }}</td> | |
<td>{{ order.goodsName | sensitiveWord: "米"}}</td> | |
<td>{{ order.userName }}</td> | |
<td>{{ order.phone }}</td> | |
<td>{{ order.price | currency: "¥"}}</td> | |
<td>{{ order.city }}</td> | |
<td>{{ order.dtCreated }}</td> | |
<td> | |
<span ng-show="order.status=='待发货'" ng-click="deliver(order.id)"> | |
<a href="javascript: void(0);">发货</a> | |
</span> | |
<span ng-show="order.status=='已发货'">已发货</span> | |
<span ng-show="order.status=='已收货'">已收货</span> | |
</td> | |
<td> | |
<a href="javascript: void(0);" ng-click="edit(order.id)">修改</a> | |
<a href="javascript: void(0);" ng-click="remove(order.id)">删除</a> | |
</td> | |
</tr> | |
</tbody> | |
</table> | |
</div> | |
<div class="form" ng-show="isShowAddOrderForm"> | |
<div> | |
<span class="label">新增订单</span> | |
<span class="txt"></span> | |
</div> | |
<div> | |
<span class="label">商品名</span> | |
<span class="txt"> | |
<input type="text" placeholder="6-20个字符" ng-model="goodsName" ng-class="goodsNameClassName"/> | |
</span> | |
</div> | |
<div> | |
<span class="label">用户名</span> | |
<span class="txt"> | |
<input type="text" placeholder="4-16个字符" ng-model="userName" ng-class="userNameClassName"/> | |
</span> | |
</div> | |
<div> | |
<span class="label">手机号</span> | |
<span class="txt"><input type="text" ng-model="phone" ng-class="phoneClassName"/></span> | |
</div> | |
<div> | |
<span class="label">价格</span> | |
<span class="txt"><input type="text" ng-model="price" ng-class="priceClassName"/></span> | |
</div> | |
<div> | |
<span class="label">城市</span> | |
<span class="txt"> | |
<select ng-model="city"> | |
<option value="">选择城市</option> | |
<option value="北京">北京</option> | |
<option value="上海">上海</option> | |
<option value="天津">天津</option> | |
<option value="重庆">重庆</option> | |
</select> | |
</span> | |
</div> | |
<div class="errTips" ng-show="hasErr"> | |
<ul> | |
<li ng-repeat="msg in errTips">{{ msg }}</li> | |
</ul> | |
</div> | |
<div> | |
<span class="label"></span> | |
<span class="txt"><button ng-click="submitAddOrderForm()">提交</button></span> | |
</div> | |
<div style="clear: both"></div> | |
</div> | |
<div class="form" ng-show="isShowEditOrderForm"> | |
<div> | |
<span class="label">修改订单</span> | |
<span class="txt"></span> | |
</div> | |
<div> | |
<span class="label">商品名(只读)</span> | |
<span class="txt"> | |
<input type="text" placeholder="6-20个字符" ng-model="edit_goodsName" readonly/> | |
</span> | |
</div> | |
<div> | |
<span class="label">用户名</span> | |
<span class="txt"> | |
<input type="text" placeholder="4-16个字符" ng-model="edit_userName" ng-class="edit_userNameClassName"/> | |
</span> | |
</div> | |
<div> | |
<span class="label">手机号</span> | |
<span class="txt"><input type="text" ng-model="edit_phone" ng-class="edit_phoneClassName"/></span> | |
</div> | |
<div> | |
<span class="label">价格</span> | |
<span class="txt"><input type="text" ng-model="edit_price" ng-class="edit_priceClassName"/></span> | |
</div> | |
<div> | |
<span class="label">城市</span> | |
<span class="txt"> | |
<select ng-model="edit_city"> | |
<option value="">选择城市</option> | |
<option value="北京">北京</option> | |
<option value="上海">上海</option> | |
<option value="天津">天津</option> | |
<option value="重庆">重庆</option> | |
</select> | |
</span> | |
</div> | |
<div class="errTips" ng-show="hasErr"> | |
<ul> | |
<li ng-repeat="msg in errTips">{{ msg }}</li> | |
</ul> | |
</div> | |
<div> | |
<span class="label"></span> | |
<input type="hidden" ng-model="edit_id"/> | |
<span class="txt"><button ng-click="submitEditOrderForm()">提交</button></span> | |
</div> | |
<div style="clear: both"></div> | |
</div> | |
</body> | |
</html> |
订单管理
最新推荐文章于 2021-10-09 18:47:55 发布