Commit f3ed8f51763de3e6a2442d646d63a5f361637904
1 parent
3a892ee0
Exists in
master
app-wx(v0.1.0 build 8)
F 添加评论问题
Showing
21 changed files
with
303 additions
and
62 deletions
Show diff stats
app-wx/config/params.php
app-wx/controllers/BaseController.php
... | ... | @@ -80,11 +80,11 @@ class BaseController extends AppController |
80 | 80 | private function getWxArray() |
81 | 81 | { |
82 | 82 | $wxArray = [ |
83 | - 'name' => '配件维修', | |
84 | - 'intro' => '报修', | |
83 | + 'name' => '汽车维修店系统', | |
84 | + 'intro' => '汽车维修店系统', | |
85 | 85 | 'logo_path' => '', |
86 | - 'subscribe_title' => '报修', | |
87 | - 'subscribe_desc' => '报修', | |
86 | + 'subscribe_title' => '汽车维修店系统', | |
87 | + 'subscribe_desc' => '汽车维修店系统', | |
88 | 88 | 'subscribe_img' => '', |
89 | 89 | 'subscribe_url' => '', |
90 | 90 | 'appid' => 'appid', | ... | ... |
app-wx/modules/order/controllers/CustomerController.php
... | ... | @@ -2,6 +2,9 @@ |
2 | 2 | |
3 | 3 | namespace app\wx\modules\order\controllers; |
4 | 4 | |
5 | +use common\helpers\Utils; | |
6 | +use domain\order\RepairOrderRate; | |
7 | +use domain\order\RepairOrderRateRepository; | |
5 | 8 | use Yii; |
6 | 9 | |
7 | 10 | |
... | ... | @@ -34,29 +37,36 @@ class CustomerController extends CustomerBaseController |
34 | 37 | $orderUUId = $this->request->post('id'); |
35 | 38 | $md5Mobile = $this->request->post('sn'); |
36 | 39 | |
37 | - $orderModel = RepairOrderRepository::findOne(['uuid' => $orderUUId]); | |
40 | + $orderModel = RepairOrderRepository::findOne(['short_uuid' => $orderUUId]); | |
38 | 41 | if (empty($orderModel)) { |
39 | 42 | $e->message = '找不到该订单'; |
40 | 43 | return $this->renderJson($e); |
41 | 44 | } |
42 | - $brokenImageModels = RepairOrderRepository::findOrderImageAll(['repair_order_id' => $orderModel->id]); | |
45 | + $orderId = $orderModel->id; | |
46 | + $brokenImageModels = RepairOrderRepository::findOrderImageAll(['repair_order_id' => $orderId]); | |
43 | 47 | $brokenImages = []; |
44 | 48 | $baseURL = Yii::$app->request->getHostInfo(); |
45 | 49 | foreach($brokenImageModels as $k => $v) { |
46 | 50 | $brokenImages[] = $baseURL.'/'.$v->image_path; |
47 | 51 | } |
48 | 52 | $totalPrice = $orderModel->order_price; |
49 | - $rPlans = RepairOrderRepository::findOrderPlansAll(['repair_order_id' => $orderModel->id]); | |
53 | + $rPlans = RepairOrderRepository::findOrderPlansAll(['repair_order_id' => $orderId]); | |
50 | 54 | $repairPlans = []; |
51 | 55 | foreach($rPlans as $k => $plan) { |
52 | 56 | $repairPlans[] = ['plan' => $plan['repair_plan'] ,'price' => $plan['price']]; |
53 | 57 | } |
54 | - $fImages = RepairOrderRepository::findOrderFinishImageAll(['repair_order_id' => $orderModel->id]); | |
58 | + $fImages = RepairOrderRepository::findOrderFinishImageAll(['repair_order_id' => $orderId]); | |
55 | 59 | $finishImages = []; |
56 | 60 | foreach($fImages as $k => $image) { |
57 | 61 | $finishImages[] = $baseURL.'/'.$image['image_path']; |
58 | 62 | } |
63 | + $comments = []; | |
59 | 64 | $hasComment = false; |
65 | + $rateModel = RepairOrderRateRepository::findOne(['repair_order_id' => $orderId]); | |
66 | + if ($rateModel) { | |
67 | + $hasComment = true; | |
68 | + $comments = ['starTxt' => RepairOrderRate::starLabel($rateModel->star_count), 'comment' => $rateModel->comment]; | |
69 | + } | |
60 | 70 | |
61 | 71 | $e->success = true; |
62 | 72 | $e->item = [ |
... | ... | @@ -70,6 +80,7 @@ class CustomerController extends CustomerBaseController |
70 | 80 | 'orderDateTime' => date('Y-m-d H:00', $orderModel->created_at), |
71 | 81 | 'status' => RepairOrderStatus::getEnLabel($orderModel->status), |
72 | 82 | 'hasComment' => $hasComment, |
83 | + 'comments' => $comments, | |
73 | 84 | 'brokenImages' => $brokenImages, |
74 | 85 | 'repairPlans' => $repairPlans, |
75 | 86 | 'totalPrice' => $totalPrice, |
... | ... | @@ -88,10 +99,47 @@ class CustomerController extends CustomerBaseController |
88 | 99 | $e->success = false; |
89 | 100 | $e->message = 'ok'; |
90 | 101 | $star = $this->request->post('star'); |
102 | + $orderUUId = $this->request->post('id'); | |
91 | 103 | $comment = $this->request->post('comment'); |
104 | + $userId = $this->getUserId(); | |
105 | + $orderModel = RepairOrderRepository::findOne(['short_uuid' => $orderUUId]); | |
106 | + if (empty($orderModel)) { | |
107 | + $e->message = '找不到订单'; | |
108 | + return $this->renderJson($e); | |
109 | + } | |
110 | + if (RepairOrderStatus::WORKING == $orderModel->status) { | |
111 | + $e->message = '订单还在维修中'; | |
112 | + return $this->renderJson($e); | |
113 | + } | |
114 | + | |
115 | + if(mb_strlen($comment) > 200) { | |
116 | + $e->message = '评论只能200字内'; | |
117 | + return $this->renderJson($e); | |
118 | + } | |
119 | + $rateModel = RepairOrderRateRepository::findOne(['repair_order_id' => $orderModel->id]); | |
120 | + if ($rateModel) { | |
121 | + $e->message = '已经评价过了'; | |
122 | + return $this->renderJson($e); | |
123 | + } | |
124 | + if ($userId > 0) { | |
125 | + $e->message = '维修厂人员不能评论'; | |
126 | + return $this->renderJson($e); | |
127 | + } | |
128 | + $items = [ | |
129 | + 'ip_address' => Utils::clientIp(), | |
130 | + 'user_id' => 0, | |
131 | + 'star_count' => $star, | |
132 | + 'repair_order_id' => $orderModel->id, | |
133 | + 'comment' => $comment, | |
134 | + ]; | |
135 | + $rateModel = RepairOrderRate::create($items); | |
136 | + if($rateModel) { | |
137 | + $e->success = false; | |
138 | + $e->message = '提交成功'; | |
139 | + } else { | |
140 | + $e->message = '提交评论失败'; | |
141 | + } | |
92 | 142 | |
93 | - //echo $star.'_'.$comment; | |
94 | - $e->success = true; | |
95 | 143 | return $this->renderJson($e); |
96 | 144 | } |
97 | 145 | ... | ... |
app-wx/modules/order/controllers/DefaultController.php
... | ... | @@ -2,6 +2,8 @@ |
2 | 2 | |
3 | 3 | namespace app\wx\modules\order\controllers; |
4 | 4 | |
5 | +use domain\order\RepairOrderRate; | |
6 | +use domain\order\RepairOrderRateRepository; | |
5 | 7 | use Yii; |
6 | 8 | use yii\helpers\HtmlPurifier; |
7 | 9 | use yii\base\Exception; |
... | ... | @@ -71,7 +73,7 @@ class DefaultController extends BaseController |
71 | 73 | 'predict_fault' => $preRepair, |
72 | 74 | 'predict_price' => $predictPrice, |
73 | 75 | 'predict_finish_time' => strtotime($finishDate.':00:00'), |
74 | - 'status' => RepairOrderStatus::REPAIRING, | |
76 | + 'status' => RepairOrderStatus::WORKING, | |
75 | 77 | ]; |
76 | 78 | $tran = Yii::$app->db->beginTransaction(); |
77 | 79 | try { |
... | ... | @@ -110,13 +112,13 @@ class DefaultController extends BaseController |
110 | 112 | } |
111 | 113 | $allItemList = [0, 0, 0]; |
112 | 114 | if ('working' == $status || '' == $status) { |
113 | - $allItemList = $this->getOrderList($page, 1); | |
115 | + $allItemList = $this->getOrderList($page, RepairOrderStatus::WORKING); | |
114 | 116 | } else { |
115 | - $allItemList = $this->getOrderList($page, 0); | |
117 | + $allItemList = $this->getOrderList($page, RepairOrderStatus::FINISH); | |
116 | 118 | } |
117 | 119 | |
118 | 120 | $e->page_count = $allItemList[1]; |
119 | - $e->page = $page ; | |
121 | + $e->page = $page; | |
120 | 122 | $e->items = $allItemList[2]; |
121 | 123 | $e->success = true; |
122 | 124 | |
... | ... | @@ -129,18 +131,24 @@ class DefaultController extends BaseController |
129 | 131 | */ |
130 | 132 | private function getOrderList($page, $status) |
131 | 133 | { |
132 | - $pageSize = 5 ; | |
134 | + $pageSize = 8 ; | |
133 | 135 | $pager_offset = ($page -1) * $pageSize; |
134 | 136 | $limitPage = $pageSize; |
135 | - $count = 15; | |
137 | + $userId = $this->getUserId(); | |
138 | + $where = ['status' => $status, 'user_id' => $userId]; | |
139 | + $list = RepairOrderRepository::getList($pager_offset, $limitPage, $where); | |
140 | + $count = RepairOrderRepository::getListCount($where); | |
136 | 141 | $items = []; |
137 | 142 | $pageCount = ceil(($count*1) / $pageSize); |
138 | - $carModelList = ['宝马X3','宝马X4','宝马X5','宝马X6','奔驰c200l','奔驰E260','奔驰E260','奔驰E300']; | |
139 | - $customerList = ['张先生','李先生','王先生','赵先生','刘先生','宝先生','好先生','费先生']; | |
140 | - for ($i = $pager_offset; $i < ($pager_offset+$limitPage); $i++ ) { | |
141 | - $carModel = $carModelList[mt_rand(0,7)]; | |
142 | - $customer = $customerList[mt_rand(0,7)]; | |
143 | - $items[] = ['id'=> $i ,'carNo' => 'XA'.mt_rand(10000,99999), 'carModel' => $carModel, 'status' => $status, 'customer' => $customer ,'createdTime' => date('Y-m-d H:i')]; | |
143 | + | |
144 | + foreach($list as $k => $item) { | |
145 | + | |
146 | + $items[] = [ | |
147 | + 'id'=> $item['uuid'] ,'carNo' => $item['car_no'], | |
148 | + 'carModel' => $item['car_model'], | |
149 | + 'status' => $item['status'], | |
150 | + 'customer' => $item['customer'] ,'createdTime' => date('Y-m-d H:i', $item['created_at']) | |
151 | + ]; | |
144 | 152 | } |
145 | 153 | |
146 | 154 | return [$count, $pageCount, $items]; |
... | ... | @@ -161,24 +169,31 @@ class DefaultController extends BaseController |
161 | 169 | $e->message = '找不到该订单'; |
162 | 170 | return $this->renderJson($e); |
163 | 171 | } |
164 | - $brokenImageModels = RepairOrderRepository::findOrderImageAll(['repair_order_id' => $orderModel->id]); | |
172 | + $orderId = $orderModel->id; | |
173 | + $brokenImageModels = RepairOrderRepository::findOrderImageAll(['repair_order_id' => $orderId]); | |
165 | 174 | $brokenImages = []; |
166 | 175 | $baseURL = Yii::$app->request->getHostInfo(); |
167 | 176 | foreach($brokenImageModels as $k => $v) { |
168 | 177 | $brokenImages[] = $baseURL.'/'.$v->image_path; |
169 | 178 | } |
170 | 179 | $totalPrice = $orderModel->order_price; |
171 | - $rPlans = RepairOrderRepository::findOrderPlansAll(['repair_order_id' => $orderModel->id]); | |
180 | + $rPlans = RepairOrderRepository::findOrderPlansAll(['repair_order_id' => $orderId]); | |
172 | 181 | $repairPlans = []; |
173 | 182 | foreach($rPlans as $k => $plan) { |
174 | 183 | $repairPlans[] = ['plan' => $plan['repair_plan'] ,'price' => $plan['price']]; |
175 | 184 | } |
176 | - $fImages = RepairOrderRepository::findOrderFinishImageAll(['repair_order_id' => $orderModel->id]); | |
185 | + $fImages = RepairOrderRepository::findOrderFinishImageAll(['repair_order_id' => $orderId]); | |
177 | 186 | $finishImages = []; |
178 | 187 | foreach($fImages as $k => $image) { |
179 | 188 | $finishImages[] = $baseURL.'/'.$image['image_path']; |
180 | 189 | } |
181 | 190 | $hasComment = false; |
191 | + $comments = []; | |
192 | + $rateModel = RepairOrderRateRepository::findOne(['repair_order_id' => $orderId]); | |
193 | + if ($rateModel) { | |
194 | + $hasComment = true; | |
195 | + $comments = ['starTxt' => RepairOrderRate::starLabel($rateModel->star_count), 'comment' => $rateModel->comment]; | |
196 | + } | |
182 | 197 | |
183 | 198 | $e->success = true; |
184 | 199 | $e->item = [ |
... | ... | @@ -192,6 +207,7 @@ class DefaultController extends BaseController |
192 | 207 | 'orderDateTime' => date('Y-m-d H:00', $orderModel->created_at), |
193 | 208 | 'status' => RepairOrderStatus::getEnLabel($orderModel->status), |
194 | 209 | 'hasComment' => $hasComment, |
210 | + 'comments' => $comments, | |
195 | 211 | 'brokenImages' => $brokenImages, |
196 | 212 | 'repairPlans' => $repairPlans, |
197 | 213 | 'totalPrice' => $totalPrice, | ... | ... |
app-wx/modules/order/views/default/pages/customer-order-template.php
... | ... | @@ -135,15 +135,13 @@ $baseUrl = Url::base(true); |
135 | 135 | <div class="pic-image-list"> |
136 | 136 | {{#each item.brokenImages}} |
137 | 137 | <div class="img-cls"> |
138 | - <div class="pic-class" style="background-image: url({{this}})"></div> | |
138 | + <div class="pic-class view-img-cls" data-url="{{this}}" style="background-image: url({{this}})"></div> | |
139 | 139 | </div> |
140 | 140 | {{/each}} |
141 | 141 | </div> |
142 | 142 | </div> |
143 | 143 | </div> |
144 | - {{#js_compare "'working' == this.item.status"}} | |
145 | - <div class="finish-submit btn-submit-cls"> 完成维修 </div> | |
146 | - {{/js_compare}} | |
144 | + | |
147 | 145 | {{#js_compare "'finish' == this.item.status"}} |
148 | 146 | <div class="content-wrapper"> |
149 | 147 | <div class="content-title">维修费用清单</div> |
... | ... | @@ -168,7 +166,7 @@ $baseUrl = Url::base(true); |
168 | 166 | <ul class="finish-image-ul"> |
169 | 167 | {{#each this.item.finishImages}} |
170 | 168 | <li class="finish-image-li"> |
171 | - <div class="finishImage" style="background-image:url('{{this}}')"> </div></li> | |
169 | + <div class="finishImage view-img-cls" data-url="{{this}}" style="background-image:url('{{this}}')"> </div></li> | |
172 | 170 | {{/each}} |
173 | 171 | </ul> |
174 | 172 | </div> |
... | ... | @@ -179,19 +177,19 @@ $baseUrl = Url::base(true); |
179 | 177 | GK车管家 <span style="color:#FF8728">《质保承诺》</span> |
180 | 178 | </div> |
181 | 179 | |
180 | + {{#js_compare "'finish' == this.item.status"}} | |
182 | 181 | <div class="content-wrapper"> |
183 | - {{#js_compare "this.item.hasComment"}} | |
182 | + {{#js_compare "this.item.comments.length > 0"}} | |
184 | 183 | <div class="content-title" style="padding-bottom: 0.5rem">评价</div> |
185 | - <div class="comment-txt-cls">服务评价:超赞</div> | |
186 | - <div class="comment-txt-cls">这次修车体验很好,服务满意!</div> | |
184 | + <div class="comment-txt-cls">服务评价:{{this.item.comments.starTxt}}</div> | |
185 | + <div class="comment-txt-cls">{{this.item.comments.comment}}</div> | |
187 | 186 | {{else}} |
188 | - | |
189 | 187 | <div class="comment-box"><div>您对此次维修服务体验如何?</div> |
190 | 188 | <div class="rate-btn-cls">去评价</div> |
191 | 189 | </div> |
192 | - | |
193 | 190 | {{/js_compare}} |
194 | 191 | </div> |
192 | + {{/js_compare}} | |
195 | 193 | {{/js_compare}} |
196 | 194 | </div> |
197 | 195 | </div> | ... | ... |
app-wx/modules/order/views/default/pages/index-template.php
... | ... | @@ -60,7 +60,7 @@ $baseUrl = Url::base(true); |
60 | 60 | </script> |
61 | 61 | <script id="order-item-template" type="text/template"> |
62 | 62 | {{#each list}} |
63 | - <div class="order-item"> | |
63 | + <div class="order-item" data-id="{{id}}"> | |
64 | 64 | <div class="order-item-content"> |
65 | 65 | <span class="title-left">车牌号码:{{carNo}}</span> |
66 | 66 | ... | ... |
app-wx/modules/order/views/default/pages/order-details-template.php
... | ... | @@ -135,7 +135,7 @@ $baseUrl = Url::base(true); |
135 | 135 | <div class="pic-image-list"> |
136 | 136 | {{#each item.brokenImages}} |
137 | 137 | <div class="img-cls"> |
138 | - <div class="pic-class" style="background-image: url({{this}})"></div> | |
138 | + <div class="pic-class view-img-cls" data-url="{{this}}" style="background-image: url({{this}})"></div> | |
139 | 139 | </div> |
140 | 140 | {{/each}} |
141 | 141 | </div> |
... | ... | @@ -168,7 +168,7 @@ $baseUrl = Url::base(true); |
168 | 168 | <ul class="finish-image-ul"> |
169 | 169 | {{#each this.item.finishImages}} |
170 | 170 | <li class="finish-image-li"> |
171 | - <div class="finishImage" style="background-image:url('{{this}}')"> </div></li> | |
171 | + <div class="finishImage view-img-cls" data-url="{{this}}" style="background-image:url('{{this}}')"> </div></li> | |
172 | 172 | {{/each}} |
173 | 173 | </ul> |
174 | 174 | </div> |
... | ... | @@ -180,17 +180,12 @@ $baseUrl = Url::base(true); |
180 | 180 | </div> |
181 | 181 | |
182 | 182 | <div class="content-wrapper"> |
183 | - {{#js_compare "this.item.hasComment"}} | |
183 | + {{#js_compare "this.item.comments.length > 0"}} | |
184 | 184 | <div class="content-title" style="padding-bottom: 0.5rem">评价</div> |
185 | - <div class="comment-txt-cls">服务评价:超赞</div> | |
186 | - <div class="comment-txt-cls">这次修车体验很好,服务满意!</div> | |
185 | + <div class="comment-txt-cls">服务评价:{{this.item.comments.starTxt}}</div> | |
186 | + <div class="comment-txt-cls">{{this.item.comments.comment}}</div> | |
187 | 187 | {{else}} |
188 | - <div class="comment-box">车主暂未评价</div> | |
189 | - <!-- | |
190 | - <div class="comment-box"><div>您对此次维修服务体验如何?</div> | |
191 | - <div class="rate-btn-cls">去评价</div> | |
192 | - </div> | |
193 | - --> | |
188 | + <div class="comment-box">车主暂未评价</div> | |
194 | 189 | {{/js_compare}} |
195 | 190 | </div> |
196 | 191 | {{/js_compare}} | ... | ... |
app-wx/modules/order/views/default/pages/submit-template.php
... | ... | @@ -30,7 +30,7 @@ $baseUrl = Url::base(true); |
30 | 30 | background-repeat: no-repeat; |
31 | 31 | -webkit-background-size:cover; |
32 | 32 | -moz-background-size:cover;background-size:cover;position: relative} |
33 | - #submit .upload-box .upload-item{background-image:url('<?=$baseUrl?>/i/order/upload-convert.png');background-repeat: no-repeat;background-position: 1px 1px;} | |
33 | + #submit .upload-box .upload-item{background-image:url('<?=$baseUrl?>/i/order/upload-convert.png');background-repeat: no-repeat;background-position: 0px 0px;} | |
34 | 34 | #submit .upload-box .upload-input-cls{width: 100%;display: block;background: rgba(0,0,0,0);opacity: 0;height: 0;padding-bottom: 100%;} |
35 | 35 | #submit .upload-box .upload-btn-cls{background-size: 5rem auto;} |
36 | 36 | #submit .upload-box .del-img{position: absolute;top: 0;left: 0;width: 0.8rem;height: 0.9rem;background-image:url('<?=$baseUrl?>/i/order/trash.png');background-repeat: no-repeat;background-size: 0.8rem auto;background-color:#fff;border-radius: 0.2rem;} | ... | ... |
app-wx/modules/user/views/default/pages/register-template.php
... | ... | @@ -25,7 +25,7 @@ $baseUrl = Url::base(true); |
25 | 25 | background-repeat: no-repeat; |
26 | 26 | -webkit-background-size:cover; |
27 | 27 | -moz-background-size:cover;background-size:cover;position: relative} |
28 | - #register .upload-box .upload-item{background-image:url('<?=$baseUrl?>/i/user/upload-convert.png');background-size: 4.7rem auto;background-repeat: no-repeat;background-position: 1px 1px;} | |
28 | + #register .upload-box .upload-item{background-image:url('<?=$baseUrl?>/i/user/upload-convert.png');background-repeat: no-repeat;background-position: 0 0} | |
29 | 29 | #register .upload-box .upload-input-cls{width: 100%;display: block;background: rgba(0,0,0,0);opacity: 0;height: 0;padding-bottom: 100%;} |
30 | 30 | #register .action-box{padding:1rem;box-sizing:border-box;padding-top:3rem;} |
31 | 31 | #register .register-btn-cls{width:80%;border-radius: 2rem; padding:0.8rem 1rem;text-align:center;box-sizing: border-box;color:#fff;background:#FF8728;margin: 0 auto;font-size:1.13rem} | ... | ... |
domain/order/RepairFinishImages.php
... | ... | @@ -60,6 +60,9 @@ class RepairFinishImages |
60 | 60 | */ |
61 | 61 | static function mvFinishImages($orderUUId, $images) |
62 | 62 | { |
63 | + if (empty($images)) { | |
64 | + return null; | |
65 | + } | |
63 | 66 | foreach($images as $k => $v) { |
64 | 67 | ImageManager::mvUploadImage($v, $orderUUId, ImageManager::$ORDER_FINISH_PATH); |
65 | 68 | } | ... | ... |
... | ... | @@ -0,0 +1,63 @@ |
1 | +<?php | |
2 | + | |
3 | +namespace domain\order; | |
4 | + | |
5 | +use Yii; | |
6 | +use domain\order\models\RepairOrderRate as RepairOrderRateModel; | |
7 | +/** | |
8 | + * 评价 | |
9 | + */ | |
10 | +class RepairOrderRate | |
11 | +{ | |
12 | + | |
13 | + /** | |
14 | + * @param $star | |
15 | + * @return string | |
16 | + */ | |
17 | + static function starLabel($star) | |
18 | + { | |
19 | + $arr = [ | |
20 | + 1 => '很差', | |
21 | + 2 => '差', | |
22 | + 3 => '一般', | |
23 | + 4 => '满意', | |
24 | + 5 => '很满意', | |
25 | + ]; | |
26 | + if ($arr[$star]) { | |
27 | + return $arr[$star]; | |
28 | + } else { | |
29 | + return ''; | |
30 | + } | |
31 | + } | |
32 | + /** | |
33 | + * @param $sItems | |
34 | + * @return null | |
35 | + */ | |
36 | + static function create($sItems) | |
37 | + { | |
38 | + if (empty($sItems)) { | |
39 | + return null; | |
40 | + } | |
41 | + $classData = [ | |
42 | + 'class' => RepairOrderRateModel::className() | |
43 | + ]; | |
44 | + foreach($sItems as $k => $v) { | |
45 | + $classData[$k] = $v; | |
46 | + } | |
47 | + $userModel = Yii::createObject($classData); | |
48 | + if($userModel->save()) { | |
49 | + return $userModel; | |
50 | + } else { | |
51 | + return null; | |
52 | + } | |
53 | + } | |
54 | + | |
55 | + /** | |
56 | + * @param $condition | |
57 | + * @return static | |
58 | + */ | |
59 | + static function findOne($condition) | |
60 | + { | |
61 | + return RepairOrderRateModel::findOne($condition); | |
62 | + } | |
63 | +} | |
0 | 64 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,20 @@ |
1 | +<?php | |
2 | + | |
3 | +namespace domain\order; | |
4 | + | |
5 | +use Yii; | |
6 | +use domain\order\models\RepairOrderRate as RepairOrderRateModel; | |
7 | +/** | |
8 | + * 评价 | |
9 | + */ | |
10 | +class RepairOrderRateRepository | |
11 | +{ | |
12 | + /** | |
13 | + * @param $condition | |
14 | + * @return static | |
15 | + */ | |
16 | + static function findOne($condition) | |
17 | + { | |
18 | + return RepairOrderRateModel::findOne($condition); | |
19 | + } | |
20 | +} | |
0 | 21 | \ No newline at end of file | ... | ... |
domain/order/RepairOrderRepository.php
... | ... | @@ -23,6 +23,40 @@ class RepairOrderRepository |
23 | 23 | } |
24 | 24 | |
25 | 25 | /** |
26 | + * 获取列表数据 | |
27 | + * @param $offset | |
28 | + * @param $limit | |
29 | + * @param $map | |
30 | + * @return array|\yii\db\ActiveRecord[] | |
31 | + */ | |
32 | + public static function getList($offset, $limit, $map, $orderDesc = '') | |
33 | + { | |
34 | + $order = RepairOrderModel::tableName(); | |
35 | + $orderFind = RepairOrderModel::find(); | |
36 | + $orderFind->select([$order.".*"]); | |
37 | + $orderFind->where($map); | |
38 | + if (empty($orderDesc)) { | |
39 | + $orderDesc = "{$order}.created_at desc"; | |
40 | + } | |
41 | + $orderFind->orderBy($orderDesc); | |
42 | + | |
43 | + return $orderFind->offset($offset)->limit($limit)->asArray()->all(); | |
44 | + } | |
45 | + | |
46 | + /** | |
47 | + * 获取总记录数 | |
48 | + * @param $map | |
49 | + * @return int|string | |
50 | + */ | |
51 | + public static function getListCount($map) | |
52 | + { | |
53 | + $order = RepairOrderModel::tableName(); | |
54 | + $orderFind = RepairOrderModel::find(); | |
55 | + $orderFind->where($map); | |
56 | + return $orderFind->count(); | |
57 | + } | |
58 | + | |
59 | + /** | |
26 | 60 | * @param $condition |
27 | 61 | * @return array|null|\yii\db\ActiveRecord[] |
28 | 62 | */ | ... | ... |
domain/order/RepairOrderStatus.php
... | ... | @@ -10,7 +10,7 @@ use domain\order\models\RepairOrder as RepairOrderModel; |
10 | 10 | */ |
11 | 11 | class RepairOrderStatus |
12 | 12 | { |
13 | - const REPAIRING = 1; //维修中 | |
13 | + const WORKING = 1; //维修中 | |
14 | 14 | const FINISH = 2; // 维修完成 |
15 | 15 | |
16 | 16 | /** |
... | ... | @@ -20,7 +20,7 @@ class RepairOrderStatus |
20 | 20 | static function getEnLabel($index = '') |
21 | 21 | { |
22 | 22 | $arr = [ |
23 | - self::REPAIRING => "working", | |
23 | + self::WORKING => "working", | |
24 | 24 | self::FINISH => "finish", |
25 | 25 | ]; |
26 | 26 | if ('' === $index) { | ... | ... |
domain/order/models/RepairOrder.php
... | ... | @@ -51,6 +51,8 @@ class RepairOrder extends ActiveRecord |
51 | 51 | */ |
52 | 52 | public function onBeforeInsert() |
53 | 53 | { |
54 | - $this->uuid = Utils::genUUID(); | |
54 | + $uuid = Utils::genUUID(); | |
55 | + $this->uuid = $uuid; | |
56 | + $this->short_uuid = substr(md5($uuid), 8,16); | |
55 | 57 | } |
56 | 58 | } |
57 | 59 | \ No newline at end of file | ... | ... |
web/dist/js/order-app.js
1 | -define("order-app",["mk7/app"],function(t){var e=Dom7,n=function(){var t=e(".ui-loading-block");0==t.length&&(e(".view-main").html('<div class="ui-loading-block" id="ui-loading"><div class="ui-loading-cnt"><div class="spinner"><div class="bounce1"></div><div class="bounce2"></div><div class="bounce3"></div></div><div id="loader-inner"><p></p></div> </div> </div>'),window.waitingTime=1e4,window.loaderTimer&&clearTimeout(window.loaderTimer),window.loaderTimer=setTimeout(function(){var t=document.getElementById("loader-inner"),e=document.createElement("p");e.className="notice",t&&(e.innerHTML='加载速度太慢?试试<a class="link" href="#" onclick="javascript:location.reload();return false;">重新加载</a>',t.appendChild(e))},window.waitingTime))},i=!0;return t.name="order",t.routes={index:function(){return i=!1,n(),t.runController("index")},"index/:tab":function(e){i=!1,n();var a={tab:e};return t.runController("index",a)},submit:function(){return i=!1,n(),t.runController("submit")},"order-details/:id":function(e){i=!1,n();var a={id:e};return t.runController("order-details",a)},"customer-order/:id/:sn":function(e,a){i=!1,n();var r={id:e,sn:a};return t.runController("customer-order",r)},"rate/:id/:sn":function(e,a){i=!1,n();var r={id:e,sn:a};return t.runController("rate",r)},"cost-list/:id":function(e){i=!1,n();var a={id:e};return t.runController("cost-list",a)},"*":function(){return t.runController("index")}},t}),define("order/cost-list-controller",["mk7/controller","mk7/url","mk7/utils","mk7/uploadjs"],function(t,e,n,i){var a=Dom7,t=(Template7,new t),r="/user/default/upload-file",o="/order/default/submit-repair-plans";return t.run=function(){var t=this;t.setPageTitle("费用列表"),t.id=t.params.id,t.imgLimit=9,t.canSubmit=!0,t.render()},t.bindEvents=function(){var t=this;console.log("bindEvents"),t.addEvent(),t.uploadImgEvent(),t.delPlanEvent(),t.inputPriceChangeEvent(),t.submitEvent()},t.addEvent=function(){var t=this;a("#cost-list .add-repair-plan").click(function(e){var n=a("#cost-list .cost-list-div"),i=t.planTpl(n.length+1);a(i).insertBefore(a("#cost-list .cost-total-list-div"))})},t.delPlanEvent=function(){var t=this;a("#cost-list").on("click",".del-plan",function(e){console.log("del plan event"),a(this).parents(".cost-list-div").remove(),a("#cost-list .total-plan-price").html(t.computedPrice())})},t.planTpl=function(t){var e='<div class="cost-list-div"><p class="item-title">第'+t+'项</p><div class="repair-item-cls"><input type="text" class="input-left input-cls" placeholder="填写维修内容" value=""><input type="number" class="input-right input-cls" placeholder="填写价格" value="0"><span class="del-plan"></span></div></div>';return e},t.inputPriceChangeEvent=function(){var t=this;a("#cost-list").on("input propertychange",".input-cls",function(){var e=t.computedPrice();a("#cost-list .total-plan-price").html(e)})},t.computedPrice=function(){var t=a("#cost-list .input-right"),e=0;return a.each(t,function(t,n){e+=1*a(n).val()}),Math.round(e,2)},t.uploadImgEvent=function(){var t=this;a("#cost-list #upload-btn").change(function(){if(""!=a(this).val()&&null!=a(this).val()){var o=a(this).parents("li");i.uploadFile({selector:"#upload-btn",url:e.to(r),processAppendTo:"#cost-list",success:function(e,i){try{if(e.success){var r=e.tmpUrl;a('<li class="upload-li up-img"><div data="'+e.tmpFile+'" data-url="'+r+'" class="upload-item" style="background-image:url('+e.tmpMinUrl+')"></div><span class="del-img"></span></li>').insertBefore(o),t.imgLimit==a("#cost-list #image-list").find(".up-img").length&&a("#cost-list .upload-btn-li").hide()}else n.toast({content:e.message,closeDelay:5e3})}catch(s){console.log(s),n.toast({content:"出错",closeDelay:5e3})}}})}}),a("#cost-list #image-list").on("click",".del-img",function(e){a(this).parent().remove(),t.imgLimit>=a("#cost-list #image-list").find(".up-img").length&&a("#cost-list .upload-btn-li").show()})},t.submitEvent=function(){var t=this;a("#cost-list .btn-submit").click(function(i){var r=a("#cost-list .content-div").find(".repair-item-cls"),s=[],l=!0,c=!0;if(a.each(r,function(t,e){var i=n.trim(a(e).find(".input-left").val()),r=n.trim(a(e).find(".input-right").val());""==i&&(l=!1),""!=r&&0!=r||(c=!1),s.push({content:i,price:r})}),!l)return n.toast({content:"维修清单有部分未填内容"}),!1;if(!c)return n.toast({content:"维修清单有部分未填价格"}),!1;var u=a("#cost-list #image-list").find(".upload-item"),d=[];if(a.each(u,function(t,e){d.push(a(e).attr("data"))}),!t.canSubmit)return!1;t.canSubmit=!1;var m=t.csrf({images:d,plans:s,id:t.id});n.httpPost(o,m,function(i){t.canSubmit=!0,i.success?window.location.replace(e.to("order#order-details/"+t.id)):n.toast({content:i.message})},!0)})},t}),define("order/customer-order-controller",["mk7/controller","mk7/url","mk7/utils"],function(t,e,n){var i=Dom7,t=(Template7,new t),a="order/customer/order-details";return t.run=function(){var t=this;t.id=t.params.id,t.sn=t.params.sn,t.setPageTitle("维修单"),t.loadPage()},t.bindEvents=function(){var t=this;console.log("bindEvents"),t.goToComment()},t.loadPage=function(){var t=this,i=t.csrf({id:t.id});n.httpPost(e.to(a),i,function(e){var n=e;t.render(n)},!0)},t.goToComment=function(){var t=this;i("#customer-order .rate-btn-cls").click(function(n){window.location.replace(e.to("order/customer#rate/"+t.id+"/"+t.sn))})},t}),define("order/index-controller",["mk7/controller","mk7/url","mk7/utils"],function(t,e,n){var i=Dom7,a=Template7,t=new t,r="order/default/order-list";return t.run=function(){var t=this;t.setPageTitle("订单列表"),t.tab=t.params.tab,t.page=0,t.nodata="",t.loading=!1,t.pageCount=1,t.render({tab:t.tab}),t.loadPage()},t.bindEvents=function(){var t=this;console.log("bindEvents"),t.tabEvent(),t.bindScrollEvent(),t.addEvent()},t.tabEvent=function(){i(".tab-cls").click(function(t){var e=i(this).attr("data-href");window.location.replace(e)})},t.handleNodata=function(){var t=this;t.nodata="没有数据了";var e=i(".nodata");0==e.length&&i("#index .order-list").append('<div class="nodata">'+t.nodata+"</div>"),t.app.detachInfiniteScroll(".infinite-scroll"),i("#index .infinite-scroll-preloader").remove()},t.loadPage=function(){var t=this;if(t.loading=!0,t.page>=t.pageCount)return void t.handleNodata();var a={status:t.tab};a.page=t.page+1,a=t.csrf(a),i.ajax({method:"GET",url:e.to(r),data:a,dataType:"json",beforeSend:function(){t.showIndicator()},success:function(e){1==e.success&&(n.isDefined(e.page)&&(t.page=parseInt(e.page)),n.isDefined(e.page_count)&&(t.pageCount=parseInt(e.page_count)),t.renderItems(e.items,!0))},error:function(t){},complete:function(e){t.hideIndicator(),t.loading=!1}})},t.bindScrollEvent=function(){var t=this;t.app.attachInfiniteScroll("#index .infinite-scroll"),i("#index .infinite-scroll").on("infinite",function(){t.loading||t.nodata||t.loadPage()})},t.renderItems=function(t,e){var n=i("#index .order-list"),r=i("script#order-item-template"),o=a.compile(r.html()),s=o({list:t});0==e&&(n.html(""),n.append(s)),n.append(s)},t.addEvent=function(){i("#index .add-btn-cls").click(function(t){window.location.href=e.to("order/#submit")})},t}),define("order/order-details-controller",["mk7/controller","mk7/url","mk7/utils"],function(t,e,n){var i=Dom7,t=(Template7,new t),a="order/default/order-details";return t.run=function(){var t=this;t.id=t.params.id,t.setPageTitle("维修单"),t.loadPage()},t.bindEvents=function(){var t=this;console.log("bindEvents"),t.finishBtnEvent(),t.goToComment()},t.loadPage=function(){var t=this,i=t.csrf({id:t.id});n.httpPost(e.to(a),i,function(e){var n=e;t.render(n)},!0)},t.finishBtnEvent=function(){var t=this;i("#order-details .finish-submit").click(function(n){window.location.href=e.to("order/#cost-list/"+t.id)})},t.goToComment=function(){var t=this;i("#order-details .rate-btn-cls").click(function(n){window.location.href=e.to("order/#rate/"+t.id)})},t}),define("order/rate-controller",["mk7/controller","mk7/url","mk7/utils"],function(t,e,n){var i=Dom7,t=(Template7,new t),a="order/customer/submit-rate";return t.run=function(){var t=this;t.id=t.params.id,t.sn=t.params.sn,t.setPageTitle("评价"),t.loadPage()},t.bindEvents=function(){var t=this;console.log("bindEvents"),t.starClickEvent(),t.submitEvent()},t.loadPage=function(){var t=this;t.render()},t.starClickEvent=function(){i("#rate").on("click",".quality-box .img-star",function(t){var e=i(this).attr("data-id"),n=i("#rate .quality-box .img-star");i.each(n,function(t,n){var a=i(n).attr("data-id");if(1*a<=e){i(n).addClass("star-on");var r=i("#rate .quality-box").find(".rate-text"),o=i(n).attr("data-txt");r.html(o)}else i(n).removeClass("star-on")})})},t.submitEvent=function(){var t=this;i("#rate .submit-btn").click(function(r){var o=n.trim(i("#rate .text-content").val()),s=i("#rate .img-star"),l=0;i.each(s,function(t,e){i(e).hasClass("star-on")&&l++});var c=t.csrf({star:l,comment:o});n.httpPost(e.to(a),c,function(i){i.success?window.location.replace(e.to("order/customer#customer-order/"+t.id+"/"+t.sn)):n.toast({content:i.message})},!0)})},t}),define("order/submit-controller",["mk7/controller","mk7/url","mk7/utils","mk7/uploadjs","mk7/picker"],function(t,e,n,a,r){var o=Dom7,t=(Template7,new t),s="/user/default/upload-file",l="/order/default/submit",c=!0,u="";return t.run=function(){var t=this;t.setPageTitle("录入维修单"),t.imgLimit=9,t.render()},t.bindEvents=function(){var t=this;console.log("bindEvents"),t.uploadImgEvent(),t.submitEvent(),t.selectDateEvent()},t.uploadImgEvent=function(){var t=this;o("#submit #upload-btn").change(function(){if(""!=o(this).val()&&null!=o(this).val()){var i=o(this).parents("li");a.uploadFile({selector:"#upload-btn",url:e.to(s),processAppendTo:"#submit",success:function(e,a){try{if(e.success){var r=e.tmpUrl;o('<li class="upload-li up-img"><div data="'+e.tmpFile+'" data-url="'+r+'" class="upload-item" style="background-image:url('+e.tmpMinUrl+')"></div><span class="del-img"></span></li>').insertBefore(i),t.imgLimit==o("#submit #image-list").find(".up-img").length&&o("#submit .upload-btn-li").hide()}else n.toast({content:e.message,closeDelay:5e3})}catch(s){console.log(s),n.toast({content:"出错",closeDelay:5e3})}}})}}),o("#submit #image-list").on("click",".del-img",function(e){o(this).parent().remove(),t.imgLimit>=o("#submit #image-list").find(".up-img").length&&o("#submit .upload-btn-li").show()})},t.submitEvent=function(){var t=this;o("#submit .submit-btn-cls").click(function(i){var a=n.trim(o("#submit .carNo").val()),r=n.trim(o("#submit .carModel").val()),s=n.trim(o("#submit .customer").val()),u=n.trim(o("#submit .phone").val()),d=n.trim(o("#submit .preRepair").val()),m=n.trim(o("#submit .repairPrice").val()),v=n.trim(o("#submit .finishDate").val());if(0==c)return!1;if(""==a)return n.toast({content:"车牌号必填"}),!1;if(""==r)return n.toast({content:"车辆型号必填"}),!1;if(""==s)return n.toast({content:"客户名称必填"}),!1;if(""==u)return n.toast({content:"客联系电话必填"}),!1;if(!n.isMobile(u)&&!uitls.isTelephone(u))return n.toast({content:"客联系电话有误"}),!1;if(""==d)return n.toast({content:"预估维修内容必填"}),!1;if(""==m)return n.toast({content:"预估维修费用必填"}),!1;if(""==v)return n.toast({content:"预估完成时间必填"}),!1;var p=t.getUploadImgs();if(0==p.length)return n.toast({content:"请上传车损照"}),!1;c=!1;var f=t.csrf({carNo:a,carModel:r,customer:s,phone:u,preRepair:d,repairPrice:m,finishDate:v,images:p});n.httpPost(l,f,function(t){return c=!0,t.success?void window.location.replace(e.to("order#order-details/"+t.orderId)):(n.toast({content:message}),!1)},!0)})},t.getUploadImgs=function(){var t=o("#submit #image-list").find(".up-img"),e=[];return 0==t.length?[]:(o.each(t,function(t,n){var i=o(n).find(".upload-item");e.push(i.attr("data"))}),e)},t.selectDateEvent=function(){var t=this;o("#submit .finish-date-input").click(function(e){var n=o(this).val();console.log(n),t.dateTimeSelector("#submit .finish-date-input",n)})},t.dateTimeSelector=function(t,e){var n=this,a=new Date,r=30,s=a.getFullYear(),l=a.getMonth(),c=a.getDate(),d=a.getHours(),m=s+"-"+(l+1)+"-"+c;if(""!=e&&null!=e&&void 0!==e){var v=e.split(" ");m=v[0],d=v[1]}var p=[];for(i=0;i<=r;i++){var f=new Date;f.setDate(a.getDate()+i);var g=f.getFullYear()+"-"+(f.getMonth()+1)+"-"+f.getDate();p.push(g)}var h=n.app.picker({input:t,toolbarTemplate:'<div class="toolbar"><div class="toolbar-inner"><div class="left">请选择用工时间</div><div class="right"><a href="javascript:void(0);" class="link submit-confirm-picker">确定</a></div></div></div>',value:[m,d],onChange:function(t,e,n){var i,a,r;if(e[0]instanceof Date)i=e[0].getFullYear(),a=e[0].getMonth(),r=e[0].getDate();else{var o=e[0].split("-");i=o[0],a=o[1]-1,r=o[2]}var s=new Date(i,a,r,e[1],0),l=new Date((new Date).getTime()+36e5);if(s<l){if(void 0===t.cols[0])return!1;var c=l.getHours(),u=l.getFullYear()+"-"+(l.getMonth()+1)+"-"+l.getDate(),d=new Date(l.getFullYear(),l.getMonth(),l.getDate(),l.getHours(),0);if(d-new Date<9e5){var m=new Date(d.getTime()+36e5);c=m.getHours(),u=m.getFullYear()+"-"+(m.getMonth()+1)+"-"+m.getDate()}t.cols[0].setValue(u),t.cols[2].setValue(c)}},formatValue:function(t,e,n){var i="";i=e[0]instanceof Date?e[0].getFullYear()+"-"+(e[0].getMonth()+1)+"-"+e[0].getDate():e[0];var a=i+" "+e[1];return a},cols:[{values:p,displayValues:function(){var t=[],e=new Date,n=e.getFullYear(),i=e.getMonth()+1,a=e.getDate();e.setDate(e.getDate()+1);for(var r=0;r<p.length;r++){var o=p[r],s=o.split("-"),l=s[1]+"月"+s[2]+"日";n==s[0]&&1*i==s[1]&&1*a==s[2]&&(l+="(今天)"),1*e.getFullYear()==s[0]&&1*e.getMonth()+1==s[1]&&1*e.getDate()==s[2]&&(l+="(明天)"),t.push(l)}return t}()},{divider:!0,content:" "},{values:function(){for(var t=[],e=0;e<=23;e++)t.push(e);return t}(),displayValues:function(){for(var t=[],e=0;e<=23;e++)t.push(e<10?"0"+e+"时":e+"时");return t}()},{divider:!0,content:" "}],onClose:function(e){if(h){var n=h.value,i=n[1]<10?"0"+n[1]:n[1];u=n[0]+" "+i,o(t).val(u),h.destroy()}}});h.open(),o(".submit-confirm-picker").on("click",function(e){e.preventDefault();var n=h.value,i=n[1]<10?"0"+n[1]:n[1];u=n[0]+" "+i,o(t).val(u),h.destroy()})},t}); | |
2 | 1 | \ No newline at end of file |
2 | +define("order-app",["mk7/app"],function(t){var e=Dom7,i=function(){var t=e(".ui-loading-block");0==t.length&&(e(".view-main").html('<div class="ui-loading-block" id="ui-loading"><div class="ui-loading-cnt"><div class="spinner"><div class="bounce1"></div><div class="bounce2"></div><div class="bounce3"></div></div><div id="loader-inner"><p></p></div> </div> </div>'),window.waitingTime=1e4,window.loaderTimer&&clearTimeout(window.loaderTimer),window.loaderTimer=setTimeout(function(){var t=document.getElementById("loader-inner"),e=document.createElement("p");e.className="notice",t&&(e.innerHTML='加载速度太慢?试试<a class="link" href="#" onclick="javascript:location.reload();return false;">重新加载</a>',t.appendChild(e))},window.waitingTime))},n=!0;return t.name="order",t.routes={index:function(){return n=!1,i(),t.runController("index")},"index/:tab":function(e){n=!1,i();var a={tab:e};return t.runController("index",a)},submit:function(){return n=!1,i(),t.runController("submit")},"order-details/:id":function(e){n=!1,i();var a={id:e};return t.runController("order-details",a)},"customer-order/:id/:sn":function(e,a){n=!1,i();var r={id:e,sn:a};return t.runController("customer-order",r)},"rate/:id/:sn":function(e,a){n=!1,i();var r={id:e,sn:a};return t.runController("rate",r)},"cost-list/:id":function(e){n=!1,i();var a={id:e};return t.runController("cost-list",a)},"*":function(){return t.runController("index")}},t}),define("order/cost-list-controller",["mk7/controller","mk7/url","mk7/utils","mk7/uploadjs"],function(t,e,i,n){var a=Dom7,t=(Template7,new t),r="/user/default/upload-file",o="/order/default/submit-repair-plans";return t.run=function(){var t=this;t.setPageTitle("费用列表"),t.id=t.params.id,t.imgLimit=9,t.canSubmit=!0,t.render()},t.bindEvents=function(){var t=this;console.log("bindEvents"),t.addEvent(),t.uploadImgEvent(),t.delPlanEvent(),t.inputPriceChangeEvent(),t.submitEvent()},t.addEvent=function(){var t=this;a("#cost-list .add-repair-plan").click(function(e){var i=a("#cost-list .cost-list-div"),n=t.planTpl(i.length+1);a(n).insertBefore(a("#cost-list .cost-total-list-div"))})},t.delPlanEvent=function(){var t=this;a("#cost-list").on("click",".del-plan",function(e){console.log("del plan event"),a(this).parents(".cost-list-div").remove(),a("#cost-list .total-plan-price").html(t.computedPrice())})},t.planTpl=function(t){var e='<div class="cost-list-div"><p class="item-title">第'+t+'项</p><div class="repair-item-cls"><input type="text" class="input-left input-cls" placeholder="填写维修内容" value=""><input type="number" class="input-right input-cls" placeholder="填写价格" value="0"><span class="del-plan"></span></div></div>';return e},t.inputPriceChangeEvent=function(){var t=this;a("#cost-list").on("input propertychange",".input-cls",function(){var e=t.computedPrice();a("#cost-list .total-plan-price").html(e)})},t.computedPrice=function(){var t=a("#cost-list .input-right"),e=0;return a.each(t,function(t,i){e+=1*a(i).val()}),Math.round(e,2)},t.uploadImgEvent=function(){var t=this;a("#cost-list #upload-btn").change(function(){if(""!=a(this).val()&&null!=a(this).val()){var o=a(this).parents("li");n.uploadFile({selector:"#upload-btn",url:e.to(r),processAppendTo:"#cost-list",success:function(e,n){try{if(e.success){var r=e.tmpUrl;a('<li class="upload-li up-img"><div data="'+e.tmpFile+'" data-url="'+r+'" class="upload-item" style="background-image:url('+e.tmpMinUrl+')"></div><span class="del-img"></span></li>').insertBefore(o),t.imgLimit==a("#cost-list #image-list").find(".up-img").length&&a("#cost-list .upload-btn-li").hide()}else i.toast({content:e.message,closeDelay:5e3})}catch(s){console.log(s),i.toast({content:"出错",closeDelay:5e3})}}})}}),a("#cost-list #image-list").on("click",".del-img",function(e){a(this).parent().remove(),t.imgLimit>=a("#cost-list #image-list").find(".up-img").length&&a("#cost-list .upload-btn-li").show()})},t.submitEvent=function(){var t=this;a("#cost-list .btn-submit").click(function(n){var r=a("#cost-list .content-div").find(".repair-item-cls"),s=[],l=!0,c=!0;if(a.each(r,function(t,e){var n=i.trim(a(e).find(".input-left").val()),r=i.trim(a(e).find(".input-right").val());""==n&&(l=!1),""!=r&&0!=r||(c=!1),s.push({content:n,price:r})}),!l)return i.toast({content:"维修清单有部分未填内容"}),!1;if(!c)return i.toast({content:"维修清单有部分未填价格"}),!1;var d=a("#cost-list #image-list").find(".upload-item"),u=[];if(a.each(d,function(t,e){u.push(a(e).attr("data"))}),!t.canSubmit)return!1;t.canSubmit=!1;var m=t.csrf({images:u,plans:s,id:t.id});i.httpPost(o,m,function(n){t.canSubmit=!0,n.success?window.location.replace(e.to("order#order-details/"+t.id)):i.toast({content:n.message})},!0)})},t}),define("order/customer-order-controller",["mk7/controller","mk7/url","mk7/utils"],function(t,e,i){var n=Dom7,t=(Template7,new t),a="order/customer/order-details";return t.run=function(){var t=this;t.id=t.params.id,t.sn=t.params.sn,t.setPageTitle("维修单"),t.loadPage()},t.bindEvents=function(){var t=this;console.log("bindEvents"),t.goToComment(),t.popupImageLayer()},t.loadPage=function(){var t=this,n=t.csrf({id:t.id});i.httpPost(e.to(a),n,function(e){var i=e;t.render(i)},!0)},t.goToComment=function(){var t=this;n("#customer-order .rate-btn-cls").click(function(i){window.location.replace(e.to("order/customer#rate/"+t.id+"/"+t.sn))})},t.popupImageLayer=function(){n("#customer-order").on("click",".view-img-cls",function(t){var e=n(this).attr("data-url");n("#img-mask").remove();var i='<div id="img-mask" style="z-index:2;background:#000;justify-content:center;position: absolute;bottom:0;top:0;width:100%;display:flex;flex-direction: column;align-items: center"><div style="width:100%;"> <img width="100%" src="'+e+'" /></div></div>';n("#customer-order").append(i)}),n("#customer-order").on("click","#img-mask, #img-mask img",function(t){t.preventDefault(),t.stopPropagation();var e=document.body.clientHeight,i=n("#img-mask img").height();console.log(e+"dddd"+i);var a=Math.abs(i-e);if(a>=0&&a<=20)n("#img-mask").remove();else{var r=n(t.target).attr("id");"img-mask"==r&&n("#img-mask").remove()}})},t}),define("order/index-controller",["mk7/controller","mk7/url","mk7/utils"],function(t,e,i){var n=Dom7,a=Template7,t=new t,r="order/default/order-list";return t.run=function(){var t=this;t.setPageTitle("订单列表"),t.tab=t.params.tab,t.page=0,t.nodata="",t.loading=!1,t.pageCount=1,t.render({tab:t.tab}),t.loadPage()},t.bindEvents=function(){var t=this;console.log("bindEvents"),t.tabEvent(),t.bindScrollEvent(),t.addEvent(),t.orderClickEvent()},t.tabEvent=function(){n(".tab-cls").click(function(t){var e=n(this).attr("data-href");window.location.replace(e)})},t.handleNodata=function(){var t=this;t.nodata="没有数据了";var e=n(".nodata");0==e.length&&n("#index .order-list").append('<div class="nodata">'+t.nodata+"</div>"),t.app.detachInfiniteScroll(".infinite-scroll"),n("#index .infinite-scroll-preloader").remove()},t.loadPage=function(){var t=this;if(t.loading=!0,t.page>=t.pageCount)return void t.handleNodata();var a={status:t.tab};a.page=t.page+1,a=t.csrf(a),n.ajax({method:"GET",url:e.to(r),data:a,dataType:"json",beforeSend:function(){t.showIndicator()},success:function(e){if(1==e.success&&(i.isDefined(e.page)&&(t.page=parseInt(e.page)),i.isDefined(e.page_count)&&(t.pageCount=parseInt(e.page_count)),t.renderItems(e.items,!0),t.page>=t.pageCount))return void t.handleNodata()},error:function(t){},complete:function(e){t.hideIndicator(),t.loading=!1}})},t.bindScrollEvent=function(){var t=this;t.app.attachInfiniteScroll("#index .infinite-scroll"),n("#index .infinite-scroll").on("infinite",function(){t.loading||t.nodata||t.loadPage()})},t.renderItems=function(t,e){var i=n("#index .order-list"),r=n("script#order-item-template"),o=a.compile(r.html()),s=o({list:t});0==e&&(i.html(""),i.append(s)),i.append(s)},t.addEvent=function(){n("#index .add-btn-cls").click(function(t){window.location.href=e.to("order/#submit")})},t.orderClickEvent=function(){n("#index").on("click",".order-item",function(t){var i=n(this).attr("data-id");window.location.href=e.to("order#order-details/"+i)})},t}),define("order/order-details-controller",["mk7/controller","mk7/url","mk7/utils"],function(t,e,i){var n=Dom7,t=(Template7,new t),a="order/default/order-details";return t.run=function(){var t=this;t.id=t.params.id,t.setPageTitle("维修单"),t.loadPage()},t.bindEvents=function(){var t=this;console.log("bindEvents"),t.finishBtnEvent(),t.popupImageLayer()},t.loadPage=function(){var t=this,n=t.csrf({id:t.id});i.httpPost(e.to(a),n,function(e){var i=e;t.render(i)},!0)},t.finishBtnEvent=function(){var t=this;n("#order-details .finish-submit").click(function(i){window.location.href=e.to("order/#cost-list/"+t.id)})},t.popupImageLayer=function(){n("#order-details").on("click",".view-img-cls",function(t){var e=n(this).attr("data-url");n("#img-mask").remove();var i='<div id="img-mask" style="z-index:2;background:#000;justify-content:center;position: absolute;bottom:0;top:0;width:100%;display:flex;flex-direction: column;align-items: center"><div style="width:100%;"> <img width="100%" src="'+e+'" /></div></div>';n("#order-details").append(i)}),n("#order-details").on("click","#img-mask, #img-mask img",function(t){t.preventDefault(),t.stopPropagation();var e=document.body.clientHeight,i=n("#img-mask img").height();console.log(e+"dddd"+i);var a=Math.abs(i-e);if(a>=0&&a<=20)n("#img-mask").remove(),console.log("dddd");else{var r=n(t.target).attr("id");"img-mask"==r&&n("#img-mask").remove()}})},t}),define("order/rate-controller",["mk7/controller","mk7/url","mk7/utils"],function(t,e,i){var n=Dom7,t=(Template7,new t),a="order/customer/submit-rate";return t.run=function(){var t=this;t.id=t.params.id,t.sn=t.params.sn,t.setPageTitle("评价"),t.loadPage()},t.bindEvents=function(){var t=this;console.log("bindEvents"),t.starClickEvent(),t.submitEvent()},t.loadPage=function(){var t=this;t.render()},t.starClickEvent=function(){n("#rate").on("click",".quality-box .img-star",function(t){var e=n(this).attr("data-id"),i=n("#rate .quality-box .img-star");n.each(i,function(t,i){var a=n(i).attr("data-id");if(1*a<=e){n(i).addClass("star-on");var r=n("#rate .quality-box").find(".rate-text"),o=n(i).attr("data-txt");r.html(o)}else n(i).removeClass("star-on")})})},t.submitEvent=function(){var t=this;n("#rate .submit-btn").click(function(r){var o=i.trim(n("#rate .text-content").val()),s=n("#rate .img-star"),l=0;n.each(s,function(t,e){n(e).hasClass("star-on")&&l++});var c=t.csrf({star:l,comment:o,id:t.id});i.httpPost(e.to(a),c,function(n){n.success?window.location.replace(e.to("order/customer#customer-order/"+t.id+"/"+t.sn)):i.toast({content:n.message})},!0)})},t}),define("order/submit-controller",["mk7/controller","mk7/url","mk7/utils","mk7/uploadjs","mk7/picker"],function(t,e,n,a,r){var o=Dom7,t=(Template7,new t),s="/user/default/upload-file",l="/order/default/submit",c=!0,d="";return t.run=function(){var t=this;t.setPageTitle("录入维修单"),t.imgLimit=9,t.render()},t.bindEvents=function(){var t=this;console.log("bindEvents"),t.uploadImgEvent(),t.submitEvent(),t.selectDateEvent()},t.uploadImgEvent=function(){var t=this;o("#submit #upload-btn").change(function(){if(""!=o(this).val()&&null!=o(this).val()){var i=o(this).parents("li");a.uploadFile({selector:"#upload-btn",url:e.to(s),processAppendTo:"#submit",success:function(e,a){try{if(e.success){var r=e.tmpUrl;o('<li class="upload-li up-img"><div data="'+e.tmpFile+'" data-url="'+r+'" class="upload-item" style="background-image:url('+e.tmpMinUrl+')"></div><span class="del-img"></span></li>').insertBefore(i),t.imgLimit==o("#submit #image-list").find(".up-img").length&&o("#submit .upload-btn-li").hide()}else n.toast({content:e.message,closeDelay:5e3})}catch(s){console.log(s),n.toast({content:"出错",closeDelay:5e3})}}})}}),o("#submit #image-list").on("click",".del-img",function(e){o(this).parent().remove(),t.imgLimit>=o("#submit #image-list").find(".up-img").length&&o("#submit .upload-btn-li").show()})},t.submitEvent=function(){var t=this;o("#submit .submit-btn-cls").click(function(i){var a=n.trim(o("#submit .carNo").val()),r=n.trim(o("#submit .carModel").val()),s=n.trim(o("#submit .customer").val()),d=n.trim(o("#submit .phone").val()),u=n.trim(o("#submit .preRepair").val()),m=n.trim(o("#submit .repairPrice").val()),v=n.trim(o("#submit .finishDate").val());if(0==c)return!1;if(""==a)return n.toast({content:"车牌号必填"}),!1;if(""==r)return n.toast({content:"车辆型号必填"}),!1;if(""==s)return n.toast({content:"客户名称必填"}),!1;if(""==d)return n.toast({content:"客联系电话必填"}),!1;if(!n.isMobile(d)&&!uitls.isTelephone(d))return n.toast({content:"客联系电话有误"}),!1;if(""==u)return n.toast({content:"预估维修内容必填"}),!1;if(""==m)return n.toast({content:"预估维修费用必填"}),!1;if(""==v)return n.toast({content:"预估完成时间必填"}),!1;var p=t.getUploadImgs();if(0==p.length)return n.toast({content:"请上传车损照"}),!1;c=!1;var f=t.csrf({carNo:a,carModel:r,customer:s,phone:d,preRepair:u,repairPrice:m,finishDate:v,images:p});n.httpPost(l,f,function(t){return c=!0,t.success?void window.location.replace(e.to("order#order-details/"+t.orderId)):(n.toast({content:message}),!1)},!0)})},t.getUploadImgs=function(){var t=o("#submit #image-list").find(".up-img"),e=[];return 0==t.length?[]:(o.each(t,function(t,i){var n=o(i).find(".upload-item");e.push(n.attr("data"))}),e)},t.selectDateEvent=function(){var t=this;o("#submit .finish-date-input").click(function(e){var i=o(this).val();console.log(i),t.dateTimeSelector("#submit .finish-date-input",i)})},t.dateTimeSelector=function(t,e){var n=this,a=new Date,r=30,s=a.getFullYear(),l=a.getMonth(),c=a.getDate(),u=a.getHours(),m=s+"-"+(l+1)+"-"+c;if(""!=e&&null!=e&&void 0!==e){var v=e.split(" ");m=v[0],u=v[1]}var p=[];for(i=0;i<=r;i++){var f=new Date;f.setDate(a.getDate()+i);var g=f.getFullYear()+"-"+(f.getMonth()+1)+"-"+f.getDate();p.push(g)}var h=n.app.picker({input:t,toolbarTemplate:'<div class="toolbar"><div class="toolbar-inner"><div class="left">请选择用工时间</div><div class="right"><a href="javascript:void(0);" class="link submit-confirm-picker">确定</a></div></div></div>',value:[m,u],onChange:function(t,e,i){var n,a,r;if(e[0]instanceof Date)n=e[0].getFullYear(),a=e[0].getMonth(),r=e[0].getDate();else{var o=e[0].split("-");n=o[0],a=o[1]-1,r=o[2]}var s=new Date(n,a,r,e[1],0),l=new Date((new Date).getTime()+36e5);if(s<l){if(void 0===t.cols[0])return!1;var c=l.getHours(),d=l.getFullYear()+"-"+(l.getMonth()+1)+"-"+l.getDate(),u=new Date(l.getFullYear(),l.getMonth(),l.getDate(),l.getHours(),0);if(u-new Date<9e5){var m=new Date(u.getTime()+36e5);c=m.getHours(),d=m.getFullYear()+"-"+(m.getMonth()+1)+"-"+m.getDate()}t.cols[0].setValue(d),t.cols[2].setValue(c)}},formatValue:function(t,e,i){var n="";n=e[0]instanceof Date?e[0].getFullYear()+"-"+(e[0].getMonth()+1)+"-"+e[0].getDate():e[0];var a=n+" "+e[1];return a},cols:[{values:p,displayValues:function(){var t=[],e=new Date,i=e.getFullYear(),n=e.getMonth()+1,a=e.getDate();e.setDate(e.getDate()+1);for(var r=0;r<p.length;r++){var o=p[r],s=o.split("-"),l=s[1]+"月"+s[2]+"日";i==s[0]&&1*n==s[1]&&1*a==s[2]&&(l+="(今天)"),1*e.getFullYear()==s[0]&&1*e.getMonth()+1==s[1]&&1*e.getDate()==s[2]&&(l+="(明天)"),t.push(l)}return t}()},{divider:!0,content:" "},{values:function(){for(var t=[],e=0;e<=23;e++)t.push(e);return t}(),displayValues:function(){for(var t=[],e=0;e<=23;e++)t.push(e<10?"0"+e+"时":e+"时");return t}()},{divider:!0,content:" "}],onClose:function(e){if(h){var i=h.value,n=i[1]<10?"0"+i[1]:i[1];d=i[0]+" "+n,o(t).val(d),h.destroy()}}});h.open(),o(".submit-confirm-picker").on("click",function(e){e.preventDefault();var i=h.value,n=i[1]<10?"0"+i[1]:i[1];d=i[0]+" "+n,o(t).val(d),h.destroy()})},t}); | |
3 | 3 | \ No newline at end of file | ... | ... |
web/src/js/order/cost-list-controller.js
... | ... | @@ -152,7 +152,7 @@ define( |
152 | 152 | return false; |
153 | 153 | } |
154 | 154 | me.canSubmit = false; |
155 | - var pData = me.csrf({images:images, plans: repairPlan, id:me.id}); | |
155 | + var pData = me.csrf({images:images, plans: repairPlan, id: me.id}); | |
156 | 156 | utils.httpPost(submitURL,pData, function(res){ |
157 | 157 | me.canSubmit = true; |
158 | 158 | if (res.success) { | ... | ... |
web/src/js/order/customer-order-controller.js
... | ... | @@ -27,6 +27,7 @@ define( |
27 | 27 | var me = this; |
28 | 28 | console.log("bindEvents"); |
29 | 29 | me.goToComment(); |
30 | + me.popupImageLayer(); | |
30 | 31 | } |
31 | 32 | ctrl.loadPage = function() { |
32 | 33 | var me = this |
... | ... | @@ -45,6 +46,33 @@ define( |
45 | 46 | }) |
46 | 47 | |
47 | 48 | } |
49 | + ctrl.popupImageLayer = function(){ | |
50 | + $$('#customer-order').on('click', '.view-img-cls', function(e) { | |
51 | + var url = $$(this).attr('data-url'); | |
52 | + $$('#img-mask').remove(); | |
53 | + var imgContent = '<div id="img-mask" style="z-index:2;background:#000;justify-content:center;position: absolute;bottom:0;top:0;width:100%;display:flex;flex-direction: column;align-items: center"><div style="width:100%;"> <img width="100%" src="'+url+'" /></div></div>'; | |
54 | + $$('#customer-order').append(imgContent); | |
55 | + }) | |
56 | + | |
57 | + $$('#customer-order').on('click', '#img-mask, #img-mask img', function(e) { | |
58 | + e.preventDefault(); | |
59 | + e.stopPropagation() | |
60 | + | |
61 | + var bh = document.body.clientHeight; | |
62 | + var ih = $$('#img-mask img').height(); | |
63 | + console.log(bh+'dddd'+ih) | |
64 | + var interval = Math.abs(ih-bh); | |
65 | + if (interval >=0 && interval <= 20) { | |
66 | + $$('#img-mask').remove(); | |
67 | + } else { | |
68 | + var id = $$(e.target).attr('id'); | |
69 | + if('img-mask' == id) { | |
70 | + $$('#img-mask').remove(); | |
71 | + } | |
72 | + } | |
73 | + | |
74 | + }) | |
75 | + } | |
48 | 76 | return ctrl; |
49 | 77 | } |
50 | 78 | ); | ... | ... |
web/src/js/order/index-controller.js
... | ... | @@ -34,6 +34,7 @@ define( |
34 | 34 | me.tabEvent(); |
35 | 35 | me.bindScrollEvent(); |
36 | 36 | me.addEvent(); |
37 | + me.orderClickEvent(); | |
37 | 38 | } |
38 | 39 | |
39 | 40 | ctrl.tabEvent = function() { |
... | ... | @@ -46,7 +47,7 @@ define( |
46 | 47 | var me = this; |
47 | 48 | me.nodata = '没有数据了'; |
48 | 49 | var e = $$('.nodata'); |
49 | - if(0 == e.length){ | |
50 | + if(0 == e.length) { | |
50 | 51 | $$('#index .order-list').append('<div class="nodata">'+me.nodata+'</div>'); |
51 | 52 | } |
52 | 53 | me.app.detachInfiniteScroll('.infinite-scroll'); |
... | ... | @@ -81,6 +82,10 @@ define( |
81 | 82 | me.pageCount = parseInt(e.page_count); |
82 | 83 | } |
83 | 84 | me.renderItems(e.items, true); |
85 | + if (me.page >= me.pageCount){ | |
86 | + me.handleNodata(); | |
87 | + return ; | |
88 | + } | |
84 | 89 | } |
85 | 90 | }, |
86 | 91 | error : function(e){}, |
... | ... | @@ -124,6 +129,12 @@ define( |
124 | 129 | window.location.href = url.to('order/#submit'); |
125 | 130 | }) |
126 | 131 | } |
132 | + ctrl.orderClickEvent = function() { | |
133 | + $$('#index').on('click', '.order-item', function(e){ | |
134 | + var id = $$(this).attr('data-id') | |
135 | + window.location.href = url.to('order#order-details/'+id) | |
136 | + }) | |
137 | + } | |
127 | 138 | return ctrl; |
128 | 139 | } |
129 | 140 | ); | ... | ... |
web/src/js/order/order-details-controller.js
... | ... | @@ -26,7 +26,7 @@ define( |
26 | 26 | var me = this; |
27 | 27 | console.log("bindEvents"); |
28 | 28 | me.finishBtnEvent(); |
29 | - me.goToComment(); | |
29 | + me.popupImageLayer(); | |
30 | 30 | } |
31 | 31 | ctrl.loadPage = function() { |
32 | 32 | var me = this |
... | ... | @@ -43,13 +43,36 @@ define( |
43 | 43 | window.location.href = url.to('order/#cost-list/'+me.id); |
44 | 44 | }) |
45 | 45 | } |
46 | - ctrl.goToComment = function() { | |
47 | - var me = this; | |
48 | - $$('#order-details .rate-btn-cls').click(function(e){ | |
49 | - window.location.href = url.to('order/#rate/'+me.id) | |
46 | + | |
47 | + ctrl.popupImageLayer = function(){ | |
48 | + $$('#order-details').on('click', '.view-img-cls', function(e) { | |
49 | + var url = $$(this).attr('data-url'); | |
50 | + $$('#img-mask').remove(); | |
51 | + var imgContent = '<div id="img-mask" style="z-index:2;background:#000;justify-content:center;position: absolute;bottom:0;top:0;width:100%;display:flex;flex-direction: column;align-items: center"><div style="width:100%;"> <img width="100%" src="'+url+'" /></div></div>'; | |
52 | + $$('#order-details').append(imgContent); | |
50 | 53 | }) |
51 | 54 | |
55 | + $$('#order-details').on('click', '#img-mask, #img-mask img', function(e) { | |
56 | + e.preventDefault(); | |
57 | + e.stopPropagation() | |
58 | + | |
59 | + var bh = document.body.clientHeight; | |
60 | + var ih = $$('#img-mask img').height(); | |
61 | + console.log(bh+'dddd'+ih) | |
62 | + var interval = Math.abs(ih-bh); | |
63 | + if (interval >=0 && interval <= 20) { | |
64 | + $$('#img-mask').remove(); | |
65 | + console.log('dddd') | |
66 | + } else { | |
67 | + var id = $$(e.target).attr('id'); | |
68 | + if('img-mask' == id) { | |
69 | + $$('#img-mask').remove(); | |
70 | + } | |
71 | + } | |
72 | + | |
73 | + }) | |
52 | 74 | } |
75 | + | |
53 | 76 | return ctrl; |
54 | 77 | } |
55 | 78 | ); | ... | ... |
web/src/js/order/rate-controller.js
... | ... | @@ -63,7 +63,7 @@ define( |
63 | 63 | } |
64 | 64 | }) |
65 | 65 | |
66 | - var pData = me.csrf({star:star,comment:comment}); | |
66 | + var pData = me.csrf({star:star,comment:comment,id:me.id}); | |
67 | 67 | utils.httpPost(url.to(submitURL), pData, function(res) { |
68 | 68 | if (res.success) { |
69 | 69 | window.location.replace(url.to('order/customer#customer-order/'+me.id+'/'+me.sn)); | ... | ... |