From afd2f743f6cccb9a7805b2ef07280e25e375085f Mon Sep 17 00:00:00 2001 From: xu Date: Fri, 3 Jan 2020 09:24:50 +0800 Subject: [PATCH] app-ht(v0.0.1 build 3) 1. A 维修厂添加审核步骤和状态 app-wx(v0.1.0 build 13) 1. F 调整登录注册所用的手机验证码 common(v1.0.0 build 3) 1. A 添加车辆的型号 2. A 添加注册用户的附加信息表 --- app-ht/config/params.php | 2 +- app-ht/modules/maintainer/controllers/UserController.php | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------ app-ht/modules/maintainer/views/user/exportDa.php | 9 +++++++-- app-ht/modules/maintainer/views/user/index.php | 32 ++++++++++++++++++++++++++++---- app-ht/modules/maintainer/views/user/info.php | 53 ++++++++++++++++++++++++++++++++++++++++++++++------- app-ht/modules/order/controllers/RepairOrderController.php | 25 ++++++++++++++++++++++--- app-ht/modules/order/views/repair-order/exportDa.php | 2 ++ app-ht/modules/order/views/repair-order/info.php | 48 +++++++++++++++++++++++++++++++++++++----------- app-wx/config/params.php | 2 +- app-wx/models/UserIdentity.php | 171 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ app-wx/modules/order/controllers/CustomerController.php | 28 ++++++++++++++++++++++++---- app-wx/modules/order/controllers/DefaultController.php | 60 ++++++++++++++++++++++++++++++++++++++++-------------------- app-wx/modules/order/views/default/pages/customer-order-template.php | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------- app-wx/modules/order/views/default/pages/order-details-template.php | 8 +++++--- app-wx/modules/order/views/default/pages/rate-template.php | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------- app-wx/modules/order/views/default/pages/submit-template.php | 6 +++--- app-wx/modules/user/controllers/LoginController.php | 245 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- app-wx/modules/user/views/default/pages/register-template.php | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------- common/config/params.php | 2 +- common/helpers/ImageManager.php | 3 ++- domain/PhoneCodeHelper.php | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ domain/order/CarModelRepository.php | 33 +++++++++++++++++++++++++++++++++ domain/order/RepairOrderRate.php | 21 +++++++++++++++++++-- domain/order/RepairOrderStatus.php | 43 +++++++++++++++++++++++++++++++++++++++++-- domain/order/models/CarModel.php | 36 ++++++++++++++++++++++++++++++++++++ domain/system/SmsMessage.php | 16 ++++++++++++++++ domain/user/User.php | 28 +++++++++++++++++++++++++++- domain/user/UserProfile.php | 37 +++++++++++++++++++++++++++++++++++++ domain/user/UserRepository.php | 15 ++++++++++----- domain/user/models/User.php | 7 ++++++- domain/user/models/UserProfile.php | 35 +++++++++++++++++++++++++++++++++++ web/dist/js/order-app.js | 2 +- web/dist/js/user-app.js | 2 +- web/src/js/order/customer-order-controller.js | 17 ++++++++++++++++- web/src/js/order/order-details-controller.js | 20 ++++++++++++++++++-- web/src/js/order/rate-controller.js | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------- web/src/js/order/submit-controller.js | 8 ++++---- web/src/js/user/register-controller.js | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 38 files changed, 1346 insertions(+), 353 deletions(-) create mode 100755 domain/PhoneCodeHelper.php create mode 100644 domain/order/CarModelRepository.php create mode 100644 domain/order/models/CarModel.php create mode 100644 domain/user/UserProfile.php create mode 100644 domain/user/models/UserProfile.php diff --git a/app-ht/config/params.php b/app-ht/config/params.php index 8ca189d..ef22029 100644 --- a/app-ht/config/params.php +++ b/app-ht/config/params.php @@ -1,4 +1,4 @@ 'v0.0.1 build 2', + 'VERSION' => 'v0.0.1 build 3', ]; \ No newline at end of file diff --git a/app-ht/modules/maintainer/controllers/UserController.php b/app-ht/modules/maintainer/controllers/UserController.php index 5cdef50..0e97a5c 100644 --- a/app-ht/modules/maintainer/controllers/UserController.php +++ b/app-ht/modules/maintainer/controllers/UserController.php @@ -2,11 +2,12 @@ namespace app\ht\modules\maintainer\controllers; -use common\helpers\ImageManager; use Yii; +use yii\base\Exception; use yii\data\Pagination; use app\ht\controllers\BaseController; - +use common\helpers\ImageManager; +use domain\user\User; use domain\user\UserRepository; use stdClass; use function strtotime; @@ -39,12 +40,14 @@ class UserController extends BaseController $endTime = $request->get('endTime'); $mobile = $request->get('mobile'); $name = $request->get('name'); + $status = $request->get('status'); $gets = [ 'createTime' => $createTime, 'endTime' => $endTime, 'mobile' => $mobile, 'name' => $name, + 'status' => $status, ]; $where = ['and']; @@ -62,7 +65,9 @@ class UserController extends BaseController if ($name) { $where[] = ['like', 'user.name', $name]; } - + if ($status) { + $where[] = ['=', 'user.status', $status]; + } if ($type == 0) { $pageList = UserRepository::getAdminUserList(0, 0, $where); @@ -79,7 +84,8 @@ class UserController extends BaseController return [ 'listdata' => $pageList, 'pages' => $pages, - 'gets' => $gets + 'gets' => $gets, + 'statusList' => User::getStatusLabels(), ]; } /** @@ -106,18 +112,67 @@ class UserController extends BaseController return $this->render('info', $params); } + $userProfile = $userModel->profile; $user = [ 'id' => $userModel->id, 'uuid' => $userModel->uuid, 'mobile' => $userModel->mobile, 'username' => $userModel->user_name, 'name' => $userModel->name, - 'licensePic' => ImageManager::getUrl($userModel->license_pic), - 'licensePicMin' => ImageManager::getUrl($userModel->license_pic, 'min'), + 'status' => $userModel->status, + 'status_label' => User::getStatusLabels($userModel->status), + 'emergencyContact' => $userProfile->emergency_contact, + 'emergencyPerson' => $userProfile->emergency_person, + 'licensePic' => ImageManager::getUrl($userProfile->license_pic), + 'licensePicMin' => ImageManager::getUrl($userProfile->license_pic, 'min'), + 'factoryHeadPic' => ImageManager::getUrl($userProfile->factory_head_pic), + 'factoryHeadPicMin' => ImageManager::getUrl($userProfile->factory_head_pic, 'min'), + 'techChargePic' => ImageManager::getUrl($userProfile->tech_charge_pic), + 'techChargePicMin' => ImageManager::getUrl($userProfile->tech_charge_pic, 'min'), + 'qaChargePic' => ImageManager::getUrl($userProfile->qa_charge_pic), + 'qaChargePicMin' => ImageManager::getUrl($userProfile->qa_charge_pic, 'min'), 'created_at' => $userModel->created_at ]; $params['user'] = $user; return $this->render('info', $params); } + + /** + * @return string + * @throws \yii\db\Exception + */ + public function actionApprove() + { + $e = new stdClass(); + $e->success = false; + $e->message = ''; + $uuid = $this->request->post('id'); + $userModel = UserRepository::findOne(['uuid' => $uuid]); + if (empty($userModel)) { + $e->message = '找不到该维修厂'; + return $this->renderJson($e); + } + if (User::STATUS_APPROVE == $userModel->status) { + $e->message = '改维修厂已经审核通过了,无需再次审核'; + return $this->renderJson($e); + } + $tran = Yii::$app->db->beginTransaction(); + try { + $userModel->status = User::STATUS_APPROVE; + $userModel->save(); + $userProfile = $userModel->profile; + $userProfile->approve_at = time(); + $userProfile->save(); + $tran->commit(); + $e->success = true; + $e->message = '审核成功'; + } catch(Exception $ex) { + $tran->rollBack(); + $e->message = '审核失败'; + } + + + return $this->renderJson($e); + } } \ No newline at end of file diff --git a/app-ht/modules/maintainer/views/user/exportDa.php b/app-ht/modules/maintainer/views/user/exportDa.php index 09b2bf2..264b3f1 100644 --- a/app-ht/modules/maintainer/views/user/exportDa.php +++ b/app-ht/modules/maintainer/views/user/exportDa.php @@ -1,5 +1,5 @@ ID 维修厂名称 维修厂电话 + 紧急联系人 + 紧急联系电话 注册时间 + 状态 @@ -36,8 +39,10 @@ + + - + title = '维修厂列表'; $this->params['breadcrumbs'][] = '维修厂管理'; $this->params['breadcrumbs'][] = $this->title; @@ -33,7 +32,28 @@ $this->params['breadcrumbs'][] = $this->title; 注册时间(止): + + 状态: + + + + + + + + + + + + + + @@ -59,8 +79,10 @@ $this->params['breadcrumbs'][] = $this->title; ID 维修厂名称 维修厂电话 + 紧急联系人 + 紧急联系电话 注册时间 - + 状态 操作 @@ -70,8 +92,10 @@ $this->params['breadcrumbs'][] = $this->title; + + - + 查看详情 diff --git a/app-ht/modules/maintainer/views/user/info.php b/app-ht/modules/maintainer/views/user/info.php index 945c0fc..c2d47f6 100644 --- a/app-ht/modules/maintainer/views/user/info.php +++ b/app-ht/modules/maintainer/views/user/info.php @@ -1,6 +1,7 @@ title = '维修厂详情'; $this->params['breadcrumbs'][] = '维修厂管理'; $this->params['breadcrumbs'][] = ['label' => '维修厂列表', 'url' => ['/maintainer/user/index']]; @@ -26,11 +27,19 @@ $this->params['breadcrumbs'][] = $this->title; 维修厂信息 - 维修厂ID - - 维修厂名称 - + + + + + 状态 + + + + 审核通过 + + 维修厂电话 @@ -39,16 +48,46 @@ $this->params['breadcrumbs'][] = $this->title; 注册时间 + + 紧急联系人 + + 紧急联系电话 + + 营业执照 - - + 门头照 + + + + + 维修技术负责人证书 + + + 质检负责人证书 + - + diff --git a/app-ht/modules/order/controllers/RepairOrderController.php b/app-ht/modules/order/controllers/RepairOrderController.php index e5b1dab..f76cffc 100644 --- a/app-ht/modules/order/controllers/RepairOrderController.php +++ b/app-ht/modules/order/controllers/RepairOrderController.php @@ -96,7 +96,8 @@ class RepairOrderController extends BaseController return [ 'listdata' => $pageList, 'pages' => $pages, - 'gets' => $gets + 'gets' => $gets, + 'finishStatus' => RepairOrderStatus::getFinishLabels(), ]; } /** @@ -145,7 +146,24 @@ class RepairOrderController extends BaseController $rateModel = RepairOrderRateRepository::findOne(['repair_order_id' => $orderId]); if ($rateModel) { $hasComment = true; - $comments = ['starTxt' => RepairOrderRate::starLabel($rateModel->star_count), 'comment' => $rateModel->comment]; + $images = []; + $imageTs = $rateModel->images; + if ($imageTs) { + $imageTs = explode(',', $imageTs); + foreach ($imageTs as $k => $image) { + $images[] = ImageManager::getUrl($image); + } + } + + + $comments = [ + 'starTxt' => RepairOrderRate::starLabel($rateModel->star_count), + 'qualityStarTxt' => RepairOrderRate::starLabel($rateModel->quality_star), + 'effectStarTxt' => RepairOrderRate::starLabel($rateModel->effect_star), + 'serviceStarTxt' => RepairOrderRate::starLabel($rateModel->service_star), + 'images' => $images, + 'comment' => $rateModel->comment + ]; } $user = UserRepository::findOne(['id' => $orderModel->user_id]); $order = [ @@ -162,8 +180,9 @@ class RepairOrderController extends BaseController 'prePrice' => $orderModel->predict_price.'元', 'preFinishDate' => $orderModel->predict_finish_time? date('Y-m-d H:00', $orderModel->predict_finish_time):'暂无', 'orderDateTime' => date('Y-m-d H:00', $orderModel->created_at), - 'finishDateTime'=> $orderModel->finish_at? date('Y-m-d H:00', $orderModel->finish_at):'暂无', + 'finishDateTime'=> $orderModel->finish_at? date('Y-m-d H:00', $orderModel->finish_at): '暂无', 'status' => RepairOrderStatus::getLabels($orderModel->status), + 'repairFinishStatus' => RepairOrderStatus::getFinishLabels($orderModel->repair_finish_status), 'hasComment' => $hasComment, 'comments' => $comments, 'brokenImages' => $brokenImages, diff --git a/app-ht/modules/order/views/repair-order/exportDa.php b/app-ht/modules/order/views/repair-order/exportDa.php index e1a5bdc..74efd0a 100644 --- a/app-ht/modules/order/views/repair-order/exportDa.php +++ b/app-ht/modules/order/views/repair-order/exportDa.php @@ -35,6 +35,7 @@ use domain\order\RepairOrderRate; 报修时间 维修金额 订单状态 + 交车状态 维修厂名 维修厂电话 顾客星评 @@ -76,6 +77,7 @@ use domain\order\RepairOrderRate; + title = '维修单详情'; $this->params['breadcrumbs'][] = '维修单管理'; @@ -29,13 +29,13 @@ $this->params['breadcrumbs'][] = $this->title; 维修单ID - + 订单状态 下单时间 - + 维修完成时间 @@ -60,18 +60,20 @@ $this->params['breadcrumbs'][] = $this->title; 预修完成时间 - - + 完成交车 + + + 维修厂名 维修厂电话 - 车主评星 - - 车主评论内容 - + + + + 车损图片 @@ -89,6 +91,32 @@ $this->params['breadcrumbs'][] = $this->title; ?> + + 评价 + + + 质量评价:
+ 时效评价:
+ 服务评价:
+ + 评论内容 + + 评价图片 + + "; + foreach ($order['comments']['images'] as $k => $image) { + echo "
  • "; + } + echo ""; + } else { + echo "暂无图片"; + } + ?> + + + @@ -143,8 +171,6 @@ $this->params['breadcrumbs'][] = $this->title; - - + \ No newline at end of file diff --git a/app-wx/modules/order/views/default/pages/order-details-template.php b/app-wx/modules/order/views/default/pages/order-details-template.php index 62d1bd4..07df8e0 100644 --- a/app-wx/modules/order/views/default/pages/order-details-template.php +++ b/app-wx/modules/order/views/default/pages/order-details-template.php @@ -175,8 +175,8 @@ $baseUrl = Url::base(true); {{/js_compare}} -
    - GK车管家 《质保承诺》 + {{#js_compare "true == this.showCustomerComment && false == this.item.hasComment"}}
    @@ -186,7 +186,9 @@ $baseUrl = Url::base(true);
    {{#js_compare "true == this.item.hasComment"}}
    评价
    -
    服务评价:{{this.item.comments.starTxt}}
    +
    质量评价:{{this.item.comments.qualityStarTxt}}
    +
    时效评价:{{this.item.comments.effectStarTxt}}
    +
    服务评价:{{this.item.comments.serviceStarTxt}}
    {{this.item.comments.comment}}
    {{else}}
    车主暂未评价
    diff --git a/app-wx/modules/order/views/default/pages/rate-template.php b/app-wx/modules/order/views/default/pages/rate-template.php index 40af09a..dc691dd 100644 --- a/app-wx/modules/order/views/default/pages/rate-template.php +++ b/app-wx/modules/order/views/default/pages/rate-template.php @@ -6,17 +6,39 @@ $baseUrl = Url::base(true); body,div,p,span,input{padding: 0;margin: 0} input{-webkit-appearance: none;} #rate .content-div { background: #fff; height: auto;padding: 1rem} - #rate .page-content{ background-color: #ECF0F2 } - #rate .rate-title { height:1.06rem; font-size:1.06rem; font-weight:400; color:rgba(9,9,9,1); line-height:0.75rem;margin-bottom:0.5rem;} - #rate .rate-title-two { height:1.06rem; font-size:1.06rem; font-weight:400; color:rgba(9,9,9,1); line-height:0.75rem; padding-top: 2rem;} - #rate .comment-div {margin-top: 0.3rem;display: flex;border:1px solid #DDD;line-height: 1.25rem} - #rate .star-row{margin-bottom: 0.6rem;} - #rate .img-star {width: 1.47rem; height: 1.47rem; float: left; vertical-align: middle; margin-right: 1rem;background-image:url();background-repeat: no-repeat;background-size: 1.47rem auto;} + #rate .page-content{ background-color: #ECF0F2 }#rate .upload-box .upload-title + + #rate .rate-title { height:1.06rem; font-size:1.06rem; font-weight:400; color:rgba(9,9,9,1); line-height:0.75rem;margin-right:1rem;} + #rate .rate-title-two { height:1.06rem; font-size:1.06rem; font-weight:400; color:rgba(9,9,9,1); line-height:0.75rem; padding-top: 1rem;} + #rate .comment-div {margin-top: 0.3rem;display: flex;border:1px solid #DDD;line-height: 1.06rem} + #rate .star-row{display:flex;align-items: center;margin-bottom:0.4rem} + #rate .img-star {width: 1.4rem; height: 1.4rem; float: left; vertical-align: middle; margin-right: 0.8rem;background-image:url();background-repeat: no-repeat;background-size: 1.4rem auto;} #rate .star-on{background-image:url();} #rate .text-content {width: 100%;height: 7.5rem; resize: none;line-height:inherit;padding: 0.5rem;font-size: 1rem} #rate .btn-box{width:100%;display: block;padding:1rem;box-sizing: border-box;margin-top:2rem;} #rate .rate-text { font-size:0.94rem; font-weight:400; color:rgba(0,0,0,1); line-height:1.75rem;} + + + #rate .upload-box{padding: 1rem 0 ;box-sizing: border-box;background:#fff;} + #rate .upload-box .upload-title{line-height: 1.5rem;color:#000000;margin-bottom: 0;font-size:1rem;} + #rate .upload-box .note-cls{color:#555555;font-size:0.75rem} + #rate .img-box-cls{width:100%;} + #rate .img-box-cls .upload-li{width:25%;display:block;padding-right:0.2rem;padding-bottom: 0.2rem;float:left;box-sizing: border-box;position:relative} + #rate .upload-box .upload-item{width:100%;height:0;padding-bottom: 100%;overflow:hidden; + background-position: center center; + background-repeat: no-repeat; + -webkit-background-size:cover; + -moz-background-size:cover;background-size:cover;position: relative} + #rate .upload-box .upload-item{background-image:url('/i/order/upload-convert.png?v=1');background-repeat: no-repeat;} + #rate .upload-box .upload-input-cls{width: 100%;display: block;background: rgba(0,0,0,0);opacity: 0;height: 0;padding-bottom: 100%;} + #rate .upload-box .upload-btn-cls{border: 1px dashed #b4b4b4;box-sizing: border-box} + #rate .upload-box .del-img{position: absolute;top: 0;left: 0;width: 0.8rem;height: 0.9rem;background-image:url('/i/order/trash.png');background-repeat: no-repeat;background-size: 0.8rem auto;background-color:#fff;border-radius: 0.2rem;} + + #rate .submit-cls{background:#FF8728;color:#fff;border-radius: 1.2rem;box-sizing: border-box;padding:0.8rem 1rem;width:80%;margin: 0 auto;text-align: center} + + + - + \ No newline at end of file diff --git a/common/config/params.php b/common/config/params.php index dd5dc67..09aebe6 100644 --- a/common/config/params.php +++ b/common/config/params.php @@ -3,5 +3,5 @@ return [ 'adminEmail' => 'admin@example.com', 'supportEmail' => 'support@example.com', 'user.passwordResetTokenExpire' => 3600, - 'VERSION' => 'v1.0.0 build 2' + 'VERSION' => 'v1.0.0 build 3' ]; diff --git a/common/helpers/ImageManager.php b/common/helpers/ImageManager.php index f9dafb0..081b827 100644 --- a/common/helpers/ImageManager.php +++ b/common/helpers/ImageManager.php @@ -22,9 +22,10 @@ class ImageManager * 根据系统模块划分, 定义图片一级目录结构 */ - public static $MAINTENANCE_PATH = 'maintenance/'; // 维修厂用户注册的图片路径 + public static $MAINTENANCE_PATH = 'maintenance/'; // 维修厂用户注册的图片路径 public static $ORDER_BROKEN_PATH = 'broken_order/'; // 订单里面车损坏的图片 public static $ORDER_FINISH_PATH = 'finish_order/'; // 维修好车的时候的图片 + public static $ORDER_COMMENT_PATH = 'comment_order/'; // 维修评论图片 /** * @param $path 数据库存储的图片相对路径 diff --git a/domain/PhoneCodeHelper.php b/domain/PhoneCodeHelper.php new file mode 100755 index 0000000..468cdf2 --- /dev/null +++ b/domain/PhoneCodeHelper.php @@ -0,0 +1,107 @@ +session; + $code = Utils::randRegCode(6); + $codeKey = $mobile."_".PhoneCode::REGISTER_TYPE; + $sessionStr = json_encode(['content' => $code, 'expire_at' => time() + self::CODE_EXPIRE]); + $session->set($codeKey, $sessionStr); + + return $code; + } + + /** + * @param $mobile + * @return bool + */ + public static function removeRegisterCode($mobile) + { + $session = Yii::$app->session; + $codeKey = $mobile."_".PhoneCode::REGISTER_TYPE; + return $session->remove($codeKey); + } + + /** + * @param $mobile + * @return mixed + */ + public static function getRegisterCode($mobile) + { + $session = Yii::$app->session; + $codeKey = $mobile."_".PhoneCode::REGISTER_TYPE; + $sessionContent = $session->get($codeKey); + if (!$sessionContent) { + return null; + } + + $sessionContent = json_decode($sessionContent, true); + if ($sessionContent && isset($sessionContent['expire_at']) && $sessionContent['expire_at'] > time()) { + return $sessionContent['content']; + } else { + $session->remove($codeKey); + return null; + } + } + + /** + * @param $mobile + * @return mixed + */ + public static function getLoginCode($mobile) + { + $session = Yii::$app->session; + $codeKey = $mobile."_".PhoneCode::LOGIN_TYPE; + $sessionContent = $session->get($codeKey); + if (!$sessionContent) { + return null; + } + $sessionContent = json_decode($sessionContent, true); + if ($sessionContent && isset($sessionContent['expire_at']) && $sessionContent['expire_at'] > time()) { + return $sessionContent['content']; + } else { + $session->remove($codeKey); + return null; + } + } + + /** + * @param $mobile + * @return string + */ + public static function setLoginCode($mobile) + { + $session = Yii::$app->session; + $code = Utils::randRegCode(6); + $codeKey = $mobile."_".PhoneCode::LOGIN_TYPE; + $sessionStr = json_encode(['content' => $code, 'expire_at' => time() + self::CODE_EXPIRE]); + $session->set($codeKey, $sessionStr); + + return $code; + } + + public static function removeLoginCode($mobile) + { + $session = Yii::$app->session; + $codeKey = $mobile."_".PhoneCode::LOGIN_TYPE; + $session->remove($codeKey); + } +} \ No newline at end of file diff --git a/domain/order/CarModelRepository.php b/domain/order/CarModelRepository.php new file mode 100644 index 0000000..9e369dd --- /dev/null +++ b/domain/order/CarModelRepository.php @@ -0,0 +1,33 @@ +where($condition); + $catModelFind->asArray(); + $carList = $catModelFind->all(); + return $carList; + } +} \ No newline at end of file diff --git a/domain/order/RepairOrderRate.php b/domain/order/RepairOrderRate.php index d8efa1f..1b227f2 100644 --- a/domain/order/RepairOrderRate.php +++ b/domain/order/RepairOrderRate.php @@ -3,6 +3,7 @@ namespace domain\order; use Yii; +use common\helpers\ImageManager; use domain\order\models\RepairOrderRate as RepairOrderRateModel; /** * 评价 @@ -14,7 +15,7 @@ class RepairOrderRate * @param $star * @return string */ - static function starLabel($star) + static function starLabel($star = '') { $arr = [ 1 => '很差', @@ -23,7 +24,7 @@ class RepairOrderRate 4 => '满意', 5 => '很满意', ]; - if ($arr[$star]) { + if (isset($arr[$star])) { return $arr[$star]; } else { return ''; @@ -60,4 +61,20 @@ class RepairOrderRate { return RepairOrderRateModel::findOne($condition); } + + /** + * @param $orderUUId + * @param $images + */ + static function mvImages($orderUUId, $images) + { + if (empty($images)) { + return null; + } + $imgPath = []; + foreach($images as $k => $v) { + $imgPath[] = ImageManager::mvUploadImage($v, $orderUUId, ImageManager::$ORDER_COMMENT_PATH); + } + return $imgPath; + } } \ No newline at end of file diff --git a/domain/order/RepairOrderStatus.php b/domain/order/RepairOrderStatus.php index d7e9667..adfa434 100644 --- a/domain/order/RepairOrderStatus.php +++ b/domain/order/RepairOrderStatus.php @@ -10,8 +10,12 @@ use domain\order\models\RepairOrder as RepairOrderModel; */ class RepairOrderStatus { - const WORKING = 1; //维修中 - const FINISH = 2; // 维修完成 + const WORKING = 1; //维修中 + const FINISH = 2; //维修完成 + + const FINISH_STATUS_WORKING = 0; //0 处理中 + const FINISH_STATUS_NORMAL = 1; //1 正常交车 + const FINISH_STATUS_DELAY = 2; //2 延迟交车 /** * @param $index @@ -53,4 +57,39 @@ class RepairOrderStatus } } + /** + * @param $preTime + * @param $finishTime + * @return int + */ + static function getFinishStatus($preTime, $finishTime) + { + if (date('Y-m-d H', $finishTime) > date('Y-m-d H', $preTime)) { + return self::FINISH_STATUS_DELAY; + } else { + return self::FINISH_STATUS_NORMAL; + } + } + + /** + * @param string $index + * @return array|string + */ + static function getFinishLabels($index = '') + { + $arr = [ + self::FINISH_STATUS_WORKING => "处理中", + self::FINISH_STATUS_NORMAL => "正常交车", + self::FINISH_STATUS_DELAY => '延迟交车' + ]; + if ('' === $index) { + return $arr; + } + if (isset($arr[$index])) { + return $arr[$index]; + } else { + return ''; + } + } + } \ No newline at end of file diff --git a/domain/order/models/CarModel.php b/domain/order/models/CarModel.php new file mode 100644 index 0000000..bb9b359 --- /dev/null +++ b/domain/order/models/CarModel.php @@ -0,0 +1,36 @@ + [ + 'class' => TimestampBehavior::className(), + 'createdAtAttribute' => 'created_at', + 'updatedAtAttribute' => 'updated_at', + ] + ]; + } +} \ No newline at end of file diff --git a/domain/system/SmsMessage.php b/domain/system/SmsMessage.php index 08c9215..d5ac23a 100644 --- a/domain/system/SmsMessage.php +++ b/domain/system/SmsMessage.php @@ -88,4 +88,20 @@ class SmsMessage //$this->send($phone, $signName, "SMS_180755775", ["code" => $code]); return true; } + + /* + * 【XX车管家】您好,xxxx厂已经进行维修,预计完成时间xxxx,预估维修内容xxxx,预估维修费用xxxx, 地址:XXXXXX, 联系电话;XXXXXXXX” + * */ + public function sendSubmitInfo($maintainer, $maintainerPhone, $preFinish, $address, $phone) + { + return true; + } + + /* + * 【XX车管家】您好,xxxx厂已对您的车维修完成,点击http://wwwwwww.com/xxx 可以给本次服务评分。如有意见请拨打投诉热线:4000xxxxxx” + * */ + public function sendFinishInfo($maintainer, $url, $phone) + { + return true; + } } \ No newline at end of file diff --git a/domain/user/User.php b/domain/user/User.php index c7eacf8..7b4cade 100644 --- a/domain/user/User.php +++ b/domain/user/User.php @@ -6,10 +6,15 @@ use Yii; use domain\user\models\User as UserModel; /** - * 手机验证码 + * 维修厂 */ class User { + + const STATUS_APPROVE = 1; //审核通过 + const STATUS_REVIEWING = 2; //审核中 + const STATUS_REJECT = 3; //审核拒绝 + /** * @param $data * @return null|object @@ -33,4 +38,25 @@ class User return null; } } + + /** + * @param string $index + * @return array|string + */ + static function getStatusLabels($index = '') + { + $arr = [ + self::STATUS_APPROVE => '审核通过', + self::STATUS_REVIEWING => '审核中', + ]; + if ('' === $index) { + return $arr; + } + if (isset($arr[$index])) { + return $arr[$index]; + } else { + return ''; + } + + } } \ No newline at end of file diff --git a/domain/user/UserProfile.php b/domain/user/UserProfile.php new file mode 100644 index 0000000..2fc2bd4 --- /dev/null +++ b/domain/user/UserProfile.php @@ -0,0 +1,37 @@ + UserProfileModel::className() + ]; + foreach($data as $k => $v) { + $classData[$k] = $v; + } + $userProfileModel = Yii::createObject($classData); + if($userProfileModel->save()) { + return $userProfileModel; + } else { + return null; + } + } +} \ No newline at end of file diff --git a/domain/user/UserRepository.php b/domain/user/UserRepository.php index 9141649..c2f6c1d 100644 --- a/domain/user/UserRepository.php +++ b/domain/user/UserRepository.php @@ -3,6 +3,7 @@ namespace domain\user; use domain\user\models\User as UserModel; +use domain\user\models\UserProfile as UserProfileModel; /** * 手机验证码 @@ -27,9 +28,11 @@ class UserRepository */ public static function getAdminUserList($offset, $limit, $map, $orderDesc = '') { + $UPT = UserProfileModel::tableName(); $userFind = UserModel::find(); $userFind->alias('user'); - $userFind->select(["user.*"]); + $userFind->select(["user.*","upt.emergency_contact", "upt.emergency_person"]); + $userFind->leftJoin("{$UPT} as upt", 'upt.user_id = user.id'); $userFind->where($map); if (empty($orderDesc)) { $orderDesc = "user.created_at desc"; @@ -51,10 +54,12 @@ class UserRepository */ public static function getAdminUserListCount($map) { - $orderFind = UserModel::find(); - $orderFind->alias('user'); - $orderFind->where($map); + $UPT = UserProfileModel::tableName(); + $userFind = UserModel::find(); + $userFind->alias('user'); + $userFind->leftJoin("{$UPT} as upd", 'upd.user_id = user.id'); + $userFind->where($map); - return $orderFind->count(); + return $userFind->count(); } } \ No newline at end of file diff --git a/domain/user/models/User.php b/domain/user/models/User.php index 698f0c8..908c1ea 100644 --- a/domain/user/models/User.php +++ b/domain/user/models/User.php @@ -2,9 +2,10 @@ namespace domain\user\models; -use common\helpers\Utils; use yii\db\ActiveRecord; use yii\behaviors\TimestampBehavior; +use domain\user\models\UserProfile as UserProfileModel; +use common\helpers\Utils; /** * 用户 @@ -54,4 +55,8 @@ class User extends ActiveRecord $this->uuid = Utils::genUUID(); } + public function getProfile() + { + return $this->hasOne(UserProfileModel::className(),["user_id" => "id"]); + } } \ No newline at end of file diff --git a/domain/user/models/UserProfile.php b/domain/user/models/UserProfile.php new file mode 100644 index 0000000..35b8d49 --- /dev/null +++ b/domain/user/models/UserProfile.php @@ -0,0 +1,35 @@ + [ + 'class' => TimestampBehavior::className(), + 'createdAtAttribute' => 'created_at', + 'updatedAtAttribute' => 'updated_at', + ] + ]; + } +} \ No newline at end of file diff --git a/web/dist/js/order-app.js b/web/dist/js/order-app.js index ed271da..01b67a8 100644 --- a/web/dist/js/order-app.js +++ b/web/dist/js/order-app.js @@ -1 +1 @@ -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('

    '),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='加载速度太慢?试试重新加载',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 r={tab:e};return t.runController("index",r)},submit:function(){return n=!1,i(),t.runController("submit")},"order-details/:id":function(e){n=!1,i();var r={id:e};return t.runController("order-details",r)},"customer-order/:id/:sn":function(e,r){n=!1,i();var a={id:e,sn:r};return t.runController("customer-order",a)},"rate/:id/:sn":function(e,r){n=!1,i();var a={id:e,sn:r};return t.runController("rate",a)},"cost-list/:id":function(e){n=!1,i();var r={id:e};return t.runController("cost-list",r)},"*":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 r=Dom7,t=(Template7,new t),a="/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;r("#cost-list .add-repair-plan").click(function(e){var i=r("#cost-list .cost-list-div"),n=t.planTpl(i.length+1);r(n).insertBefore(r("#cost-list .cost-total-list-div"))})},t.delPlanEvent=function(){var t=this;r("#cost-list").on("click",".del-plan",function(e){console.log("del plan event"),r(this).parents(".cost-list-div").remove(),r("#cost-list .total-plan-price").html(t.computedPrice())})},t.planTpl=function(t){var e='

    第'+t+'项

    ';return e},t.inputPriceChangeEvent=function(){var t=this;r("#cost-list").on("input propertychange",".input-cls",function(){var e=t.computedPrice();r("#cost-list .total-plan-price").html(e)})},t.computedPrice=function(){var t=r("#cost-list .input-right"),e=0;return r.each(t,function(t,i){e+=1*r(i).val()}),Math.round(e,2)},t.uploadImgEvent=function(){var t=this;r("#cost-list #upload-btn").change(function(){if(""!=r(this).val()&&null!=r(this).val()){var o=r(this).parents("li");n.uploadFile({selector:"#upload-btn",url:e.to(a),processAppendTo:"#cost-list",success:function(e,n){try{if(e.success){var a=e.tmpUrl;r('
  • ').insertBefore(o),t.imgLimit==r("#cost-list #image-list").find(".up-img").length&&r("#cost-list .upload-btn-li").hide()}else i.toast({content:e.message,closeDelay:5e3})}catch(s){console.log(s),i.toast({content:"出错",closeDelay:5e3})}}})}}),r("#cost-list #image-list").on("click",".del-img",function(e){r(this).parent().remove(),t.imgLimit>=r("#cost-list #image-list").find(".up-img").length&&r("#cost-list .upload-btn-li").show()})},t.submitEvent=function(){var t=this;r("#cost-list .btn-submit").click(function(n){var a=r("#cost-list .content-div").find(".repair-item-cls"),s=[],l=!0,c=!0;if(r.each(a,function(t,e){var n=i.trim(r(e).find(".input-left").val()),a=i.trim(r(e).find(".input-right").val());""==n&&(l=!1),""!=a&&0!=a||(c=!1),s.push({content:n,price:a})}),!l)return i.toast({content:"维修清单有部分未填内容"}),!1;if(!c)return i.toast({content:"维修清单有部分未填价格"}),!1;var d=r("#cost-list #image-list").find(".upload-item"),u=[];if(r.each(d,function(t,e){u.push(r(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),r="order/customer/order-details";return t.run=function(){var t=this;t.id=t.params.id,t.sn=t.params.sn,t.success=!0,t.setPageTitle("维修单"),t.loadPage()},t.bindEvents=function(){var t=this;console.log("bindEvents"),t.goToComment(),t.popupImageLayer()},t.beforeRender=function(){var t=this;console.log("beforeRender"),t.success||(this.view="customer-order-error")},t.loadPage=function(){var t=this,n=t.csrf({id:t.id});i.httpPost(e.to(r),n,function(e){var i=e;t.success=e.success,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='
    ';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 r=Math.abs(i-e);if(r>=0&&r<=20)n("#img-mask").remove();else{var a=n(t.target).attr("id");"img-mask"==a&&n("#img-mask").remove()}})},t}),define("order/index-controller",["mk7/controller","mk7/url","mk7/utils"],function(t,e,i){var n=Dom7,r=Template7,t=new t,a="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('
    '+t.nodata+"
    "),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 r={status:t.tab};r.page=t.page+1,r=t.csrf(r),n.ajax({method:"GET",url:e.to(a),data:r,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"),a=n("script#order-item-template"),o=r.compile(a.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),r="order/default/order-details";return t.run=function(){var t=this;t.id=t.params.id,t.success=!0,t.setPageTitle("维修单"),t.loadPage()},t.bindEvents=function(){var t=this;console.log("bindEvents"),t.finishBtnEvent(),t.popupImageLayer()},t.beforeRender=function(){var t=this;console.log("beforeRender"),t.success||(t.view="order-details-error")},t.loadPage=function(){var t=this,n=t.csrf({id:t.id});i.httpPost(e.to(r),n,function(e){var i=e;t.success=e.success,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='
    ';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 r=Math.abs(i-e);if(r>=0&&r<=20)n("#img-mask").remove(),console.log("dddd");else{var a=n(t.target).attr("id");"img-mask"==a&&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),r="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 r=n(i).attr("data-id");if(1*r<=e){n(i).addClass("star-on");var a=n("#rate .quality-box").find(".rate-text"),o=n(i).attr("data-txt");a.html(o)}else n(i).removeClass("star-on")})})},t.submitEvent=function(){var t=this;n("#rate .submit-btn").click(function(a){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(r),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,r,a){var o=Dom7,s=Template7,t=new t,l="/user/default/upload-file",c="/order/default/submit",d=!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.openCarModel(),t.searchCarModel(),t.carModelClick()},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");r.uploadFile({selector:"#upload-btn",url:e.to(l),processAppendTo:"#submit",success:function(e,r){try{if(e.success){var a=e.tmpUrl;o('
  • ').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 r=n.trim(o("#submit .carNo").val()),a=n.trim(o("#submit .carModel").val()),s=n.trim(o("#submit .customer").val()),l=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==d)return!1;if(""==r)return n.toast({content:"车牌号必填"}),!1;if(""==a)return n.toast({content:"车辆型号必填"}),!1;if(""==s)return n.toast({content:"客户名称必填"}),!1;if(""==l)return n.toast({content:"客联系电话必填"}),!1;if(!n.isMobile(l)&&!n.isTelephone(l))return n.toast({content:"客联系电话有误"}),!1;var p=t.getUploadImgs();if(0==p.length)return n.toast({content:"请上传车损照"}),!1;d=!1;var f=t.csrf({carNo:r,carModel:a,customer:s,phone:l,preRepair:u,repairPrice:m,finishDate:v,images:p});n.httpPost(c,f,function(t){return d=!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("#submit .finish-date-input").val();console.log(i),t.dateTimeSelector("#submit .finish-date-input",i)})},t.dateTimeSelector=function(t,e){var n=this,r=new Date,a=30,s=r.getFullYear(),l=r.getMonth(),c=r.getDate(),d=r.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<=a;i++){var f=new Date;f.setDate(r.getDate()+i);var g=f.getFullYear()+"-"+(f.getMonth()+1)+"-"+f.getDate();p.push(g)}var h=n.app.picker({input:t,toolbarTemplate:'
    请选择用工时间
    ',value:[m,d],onChange:function(t,e,i){var n,r,a;if(e[0]instanceof Date)n=e[0].getFullYear(),r=e[0].getMonth(),a=e[0].getDate();else{var o=e[0].split("-");n=o[0],r=o[1]-1,a=o[2]}var s=new Date(n,r,a,e[1],0),l=new Date((new Date).getTime()+36e5);if(s

    '),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='加载速度太慢?试试重新加载',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='

    第'+t+'项

    ';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('
  • ').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,a=Template7,t=new t,r="order/customer/order-details";return t.run=function(){var t=this;t.id=t.params.id,t.sn=t.params.sn,t.success=!0,t.setPageTitle("维修单"),t.loadPage()},t.bindEvents=function(){var t=this;console.log("bindEvents"),t.goToComment(),t.popupImageLayer(),t.agreementEvent()},t.beforeRender=function(){var t=this;console.log("beforeRender"),t.success||(this.view="customer-order-error")},t.loadPage=function(){var t=this,n=t.csrf({id:t.id});i.httpPost(e.to(r),n,function(e){var i=e;t.success=e.success,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.agreementEvent=function(){n("#customer-order").on("click",".warranty-btn",function(t){n("#warranty-wrapper").remove();var e=n("#customer-order"),i=n("script#warranty-template"),r=a.compile(i.html()),o=r({});e.append(o)}),n("#customer-order").on("click",".agree-btn",function(t){n("#warranty-wrapper").remove()})},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='
    ';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('
    '+t.nodata+"
    "),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.success=!0,t.setPageTitle("维修单"),t.loadPage()},t.bindEvents=function(){var t=this;console.log("bindEvents"),t.finishBtnEvent(),t.popupImageLayer()},t.beforeRender=function(){var t=this;console.log("beforeRender"),t.success||(t.view="order-details-error")},t.loadPage=function(){var t=this,n=t.csrf({id:t.id});i.httpPost(e.to(a),n,function(e){var i=e;t.success=e.success,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.agreementEvent=function(){},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='
    ';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();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","mk7/uploadjs"],function(t,e,i,n){var a=Dom7,t=(Template7,new t),r="order/customer/submit-rate",o="/user/default/upload-file";return t.run=function(){var t=this;t.id=t.params.id,t.sn=t.params.sn,t.imgLimit=4,t.setPageTitle("评价"),t.loadPage()},t.bindEvents=function(){var t=this;console.log("bindEvents"),t.starClickEvent(),t.submitEvent(),t.uploadImgEvent()},t.loadPage=function(){var t=this;t.render()},t.starClickEvent=function(){a("#rate").on("click",".img-star",function(t){var e=a(this).attr("data-id"),i=a(this).parent(".star-div"),n=i.find(".img-star");a.each(n,function(t,n){var r=a(n).attr("data-id");if(1*r<=e){a(n).addClass("star-on");var o=i.find(".rate-text"),s=a(n).attr("data-txt");o.html(s)}else a(n).removeClass("star-on")})})},t.uploadImgEvent=function(){var t=this;a("#rate #upload-btn").change(function(){if(""!=a(this).val()&&null!=a(this).val()){var r=a(this).parents("li");n.uploadFile({selector:"#upload-btn",url:e.to(o),processAppendTo:"#rate",success:function(e,n){try{if(e.success){var o=e.tmpUrl;a('
  • ').insertBefore(r),t.imgLimit==a("#rate #image-list").find(".up-img").length&&a("#rate .upload-btn-li").hide()}else i.toast({content:e.message,closeDelay:5e3})}catch(s){console.log(s),i.toast({content:"出错",closeDelay:5e3})}}})}}),a("#rate #image-list").on("click",".del-img",function(e){a(this).parent().remove(),t.imgLimit>=a("#rate #image-list").find(".up-img").length&&a("#rate .upload-btn-li").show()})},t.getUploadImgs=function(){var t=a("#rate #image-list").find(".up-img"),e=[];return 0==t.length?[]:(a.each(t,function(t,i){var n=a(i).find(".upload-item");e.push(n.attr("data"))}),e)},t.submitEvent=function(){var t=this;a("#rate .submit-btn").click(function(n){var o=i.trim(a("#rate .text-content").val()),s=a("#rate .quality-box .img-star"),l=0;a.each(s,function(t,e){a(e).hasClass("star-on")&&l++});var c=a("#rate .effect-box .img-star"),d=0;a.each(c,function(t,e){a(e).hasClass("star-on")&&d++});var u=a("#rate .service-box .img-star"),m=0;a.each(u,function(t,e){a(e).hasClass("star-on")&&m++});var p=t.getUploadImgs(),v=t.csrf({comment:o,id:t.id,qualityStar:l,effectStar:d,serviceStar:m,images:p});i.httpPost(e.to(r),v,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,s=Template7,t=new t,l="/user/default/upload-file",c="/order/default/submit",d=!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.openCarModel(),t.searchCarModel(),t.carModelClick()},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(l),processAppendTo:"#submit",success:function(e,a){try{if(e.success){var r=e.tmpUrl;o('
  • ').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){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()),l=n.trim(o("#submit .phone").val()),u=n.trim(o("#submit .preRepair").val()),m=n.trim(o("#submit .repairPrice").val()),p=n.trim(o("#submit .finishDate").val());if(0==d)return!1;if(""==a)return n.toast({content:"车牌号必填"}),!1;if(""==r)return n.toast({content:"车辆型号必填"}),!1;if(""==s)return n.toast({content:"客户名称必填"}),!1;if(""==l)return n.toast({content:"客联系电话必填"}),!1;if(!n.isMobile(l)&&!n.isTelephone(l))return n.toast({content:"客联系电话有误"}),!1;if(""==p)return n.toast({content:"预估完成时间必填"}),!1;var v=t.getUploadImgs();if(0==v.length)return n.toast({content:"请上传车损照"}),!1;d=!1;var f=t.csrf({carNo:a,carModel:r,customer:s,phone:l,preRepair:u,repairPrice:m,finishDate:p,images:v});n.httpPost(c,f,function(t){return d=!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("#submit .finish-date-input").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(),d=a.getHours(),m=s+"-"+(l+1)+"-"+c;if(""!=e&&null!=e&&void 0!==e){var p=e.split(" ");m=p[0],d=p[1]}var v=[];for(i=0;i<=r;i++){var f=new Date;f.setDate(a.getDate()+i);var g=f.getFullYear()+"-"+(f.getMonth()+1)+"-"+f.getDate();v.push(g)}var h=n.app.picker({input:t,toolbarTemplate:'
    请选择用工时间
    ',value:[m,d],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

    '),window.waitingTime=1e4,window.loaderTimer&&clearTimeout(window.loaderTimer),window.loaderTimer=setTimeout(function(){var e=document.getElementById("loader-inner"),t=document.createElement("p");t.className="notice",e&&(t.innerHTML='加载速度太慢?试试重新加载',e.appendChild(t))},window.waitingTime))},o=!0;return e.name="user",e.routes={index:function(){return o=!1,n(),e.runController("index")},register:function(){return o=!1,n(),e.runController("register")},login:function(){return o=!1,n(),e.runController("login")},"*":function(){return e.runController("index")}},e}),define("user/index-controller",["mk7/controller","mk7/url","mk7/utils"],function(e,t,n){var e=(Dom7,Template7,new e);return e.run=function(){var e=this;e.setPageTitle("首页"),e.hideAllNonBaseMenuItem(window.$site),e.render()},e.bindEvents=function(){console.log("bindEvents")},e}),define("user/login-controller",["mk7/controller","mk7/url","mk7/utils"],function(e,t,n){var o=Dom7,e=(Template7,new e),i="/user/login/get-code",r="/user/login/login",s=!0,l=!0,c=null;return e.run=function(){var e=this;return e.setPageTitle("登录"),e.codeDuration=60,isGuest?void e.render():(window.location.href=t.to("order/#index"),"")},e.bindEvents=function(){var e=this;console.log("bindEvents"),e.getCodeEvent(),e.gotoRegisterEvent(),e.loginEvent()},e.getCodeEvent=function(){var e=this;o("#login .get-code-cls").click(function(){var r=n.trim(o("#login .mobile").val());if(""==r)return n.toast({content:"手机号码必填"}),!1;if(!n.isMobile(r))return n.toast({content:"手机号码不合格"}),!1;if(0==s)return!1;clearInterval(c),s=!1;var l=e.csrf({action:"login",mobile:r});n.httpGet(t.to(i),l,function(t){if(!t.success)return n.toast({content:t.message,closeDelay:3e3}),s=!0,!1;n.toast({content:t.message}),t.testCode&&o("#login .code").val(t.testCode);var i=t.codeDuration;e.codeDuration=i,c=setInterval(function(t){e.codeDuration--,0==e.codeDuration?(o("#login .get-code-cls").html("获取验证码"),clearInterval(c),e.codeDuration=i,s=!0):o("#login .get-code-cls").html(''+e.codeDuration+"s后重新获取")},1e3)})})},e.loginEvent=function(){var e=this;o("#login .login-btn").click(function(i){var s=n.trim(o("#login .mobile").val()),c=n.trim(o("#login .code").val());if(""==s)return n.toast({content:"手机号码必填"}),!1;if(!n.isMobile(s))return n.toast({content:"手机号码不合格"}),!1;if(""==c)return n.toast({content:"验证码必填"}),!1;if(0==l)return!1;l=!1;var a=e.csrf({mobile:s,code:c});n.httpPost(t.to(r),a,function(e){return l=!0,e.success?void(window.location.href=t.to("order/#index")):(n.toast({content:e.message,closeDelay:3e3}),!1)})})},e.gotoRegisterEvent=function(){o("#login .register-btn").click(function(e){window.location.href=t.to("user/#register")})},e}),define("user/register-controller",["mk7/controller","mk7/url","mk7/utils","mk7/uploadjs"],function(e,t,n,o){var i=Dom7,e=(Template7,new e),r="/user/login/register",s="/user/default/upload-file",l="/user/login/get-code",c=!0,a=!0,u=null;return e.run=function(){var e=this;return e.setPageTitle("注册"),e.codeDuration=60,isGuest?void e.render():(window.location.href=t.to("order/#index"),"")},e.bindEvents=function(){var e=this;console.log("bindEvents"),e.uploadEvent(),e.getCodeEvent(),e.registerEvent(),e.gotoLoginEvent()},e.uploadEvent=function(){i("#register .upload-input-cls").change(function(){if(""!=i(this).val()&&null!=i(this).val()){var e=i(this).attr("id"),r=i(this).parent();o.uploadFile({selector:"#"+e,url:t.to(s),processAppendTo:"#register",success:function(e,t){try{if(e.success){var o=e.tmpUrl;r.css("background-image","url("+e.tmpMinUrl+")"),r.attr("data",e.tmpFile),r.attr("data-url",o)}else n.toast({content:e.message,closeDelay:5e3})}catch(i){n.toast({content:"出错",closeDelay:5e3})}}})}})},e.getCodeEvent=function(){var e=this;i("#register .get-code-cls").click(function(){var o=n.trim(i("#register .mobile").val());if(""==o)return n.toast({content:"手机号码必填"}),!1;if(!n.isMobile(o))return n.toast({content:"手机号码不合格"}),!1;if(0==c)return!1;clearInterval(u),c=!1;var r=e.csrf({action:"register",mobile:o});n.httpGet(t.to(l),r,function(t){if(!t.success)return n.toast({content:t.message,closeDelay:3e3}),c=!0,!1;n.toast({content:t.message}),t.testCode&&i("#register .code").val(t.testCode);var o=t.codeDuration;e.codeDuration=o,u=setInterval(function(t){e.codeDuration--,0==e.codeDuration?(i("#register .get-code-cls").html("获取验证码"),clearInterval(u),e.codeDuration=o,c=!0):i("#register .get-code-cls").html(''+e.codeDuration+"s后重新获取")},1e3)})})},e.registerEvent=function(){var e=this;i("#register .register-btn").click(function(o){var s=n.trim(i("#register .name").val()),l=n.trim(i("#register .mobile").val()),c=n.trim(i("#register .code").val());if(""==s)return n.toast({content:"车厂名称必填"}),!1;if(""==l)return n.toast({content:"手机号码必填"}),!1;if(!n.isMobile(l))return n.toast({content:"手机号码不合格"}),!1;if(""==c)return n.toast({content:"验证码必填"}),!1;var u=i("#register .licensePic").attr("data");if(void 0===u||null==u)return n.toast({content:"请上传营业执照"}),!1;if(0==a)return!1;a=!1;var d=e.csrf({name:s,mobile:l,code:c,licensePic:u});n.httpPost(t.to(r),d,function(e){return e.success?void(window.location.href=t.to("order/#index")):(n.toast({content:e.message,closeDelay:3e3}),a=!0,!1)})})},e.gotoLoginEvent=function(){i("#register .login-btn").click(function(e){window.location.href=t.to("user/#login")})},e}); \ No newline at end of file +define("user-app",["mk7/app"],function(e){var t=Dom7,n=function(){var e=t(".ui-loading-block");0==e.length&&(t(".view-main").html('

    '),window.waitingTime=1e4,window.loaderTimer&&clearTimeout(window.loaderTimer),window.loaderTimer=setTimeout(function(){var e=document.getElementById("loader-inner"),t=document.createElement("p");t.className="notice",e&&(t.innerHTML='加载速度太慢?试试重新加载',e.appendChild(t))},window.waitingTime))},r=!0;return e.name="user",e.routes={index:function(){return r=!1,n(),e.runController("index")},register:function(){return r=!1,n(),e.runController("register")},login:function(){return r=!1,n(),e.runController("login")},"*":function(){return e.runController("index")}},e}),define("user/index-controller",["mk7/controller","mk7/url","mk7/utils"],function(e,t,n){var e=(Dom7,Template7,new e);return e.run=function(){var e=this;e.setPageTitle("首页"),e.hideAllNonBaseMenuItem(window.$site),e.render()},e.bindEvents=function(){console.log("bindEvents")},e}),define("user/login-controller",["mk7/controller","mk7/url","mk7/utils"],function(e,t,n){var r=Dom7,e=(Template7,new e),o="/user/login/get-code",i="/user/login/login",c=!0,s=!0,a=null;return e.run=function(){var e=this;return e.setPageTitle("登录"),e.codeDuration=60,isGuest?void e.render():(window.location.href=t.to("order/#index"),"")},e.bindEvents=function(){var e=this;console.log("bindEvents"),e.getCodeEvent(),e.gotoRegisterEvent(),e.loginEvent()},e.getCodeEvent=function(){var e=this;r("#login .get-code-cls").click(function(){var i=n.trim(r("#login .mobile").val());if(""==i)return n.toast({content:"手机号码必填"}),!1;if(!n.isMobile(i))return n.toast({content:"手机号码不合格"}),!1;if(0==c)return!1;clearInterval(a),c=!1;var s=e.csrf({action:"login",mobile:i});n.httpGet(t.to(o),s,function(t){if(!t.success)return n.toast({content:t.message,closeDelay:3e3}),c=!0,!1;n.toast({content:t.message}),t.testCode&&r("#login .code").val(t.testCode);var o=t.codeDuration;e.codeDuration=o,a=setInterval(function(t){e.codeDuration--,0==e.codeDuration?(r("#login .get-code-cls").html("获取验证码"),clearInterval(a),e.codeDuration=o,c=!0):r("#login .get-code-cls").html(''+e.codeDuration+"s后重新获取")},1e3)})})},e.loginEvent=function(){var e=this;r("#login .login-btn").click(function(o){var c=n.trim(r("#login .mobile").val()),a=n.trim(r("#login .code").val());if(""==c)return n.toast({content:"手机号码必填"}),!1;if(!n.isMobile(c))return n.toast({content:"手机号码不合格"}),!1;if(""==a)return n.toast({content:"验证码必填"}),!1;if(0==s)return!1;s=!1;var l=e.csrf({mobile:c,code:a});n.httpPost(t.to(i),l,function(e){return s=!0,e.success?void(window.location.href=t.to("order/#index")):(n.toast({content:e.message,closeDelay:3e3}),!1)})})},e.gotoRegisterEvent=function(){r("#login .register-btn").click(function(e){window.location.href=t.to("user/#register")})},e}),define("user/register-controller",["mk7/controller","mk7/url","mk7/utils","mk7/uploadjs"],function(e,t,n,r){var o=Dom7,i=Template7,e=new e,c="/user/login/register",s="/user/default/upload-file",a="/user/login/get-code",l=!0,u=!0,d=null;return e.run=function(){var e=this;return e.setPageTitle("注册"),e.codeDuration=60,isGuest?void e.render():(window.location.href=t.to("order/#index"),"")},e.bindEvents=function(){var e=this;console.log("bindEvents"),e.uploadEvent(),e.getCodeEvent(),e.registerEvent(),e.gotoLoginEvent(),e.checkAgreement()},e.uploadEvent=function(){o("#register .upload-input-cls").change(function(){if(""!=o(this).val()&&null!=o(this).val()){var e=o(this).attr("id"),i=o(this).parent();r.uploadFile({selector:"#"+e,url:t.to(s),processAppendTo:"#register",success:function(e,t){try{if(e.success){var r=e.tmpUrl;i.css("background-image","url("+e.tmpMinUrl+")"),i.attr("data",e.tmpFile),i.attr("data-url",r)}else n.toast({content:e.message,closeDelay:5e3})}catch(o){n.toast({content:"出错",closeDelay:5e3})}}})}})},e.getCodeEvent=function(){var e=this;o("#register .get-code-cls").click(function(){var r=n.trim(o("#register .mobile").val());if(""==r)return n.toast({content:"手机号码必填"}),!1;if(!n.isMobile(r))return n.toast({content:"手机号码不合格"}),!1;if(0==l)return!1;clearInterval(d),l=!1;var i=e.csrf({action:"register",mobile:r});n.httpGet(t.to(a),i,function(t){if(!t.success)return n.toast({content:t.message,closeDelay:3e3}),l=!0,!1;n.toast({content:t.message}),t.testCode&&o("#register .code").val(t.testCode);var r=t.codeDuration;e.codeDuration=r,d=setInterval(function(t){e.codeDuration--,0==e.codeDuration?(o("#register .get-code-cls").html("获取验证码"),clearInterval(d),e.codeDuration=r,l=!0):o("#register .get-code-cls").html(''+e.codeDuration+"s后重新获取")},1e3)})})},e.registerEvent=function(){var e=this;o("#register .register-btn").click(function(r){var i=n.trim(o("#register .name").val()),s=n.trim(o("#register .mobile").val()),a=n.trim(o("#register .code").val()),l=n.trim(o("#register .emergency_contact").val()),d=n.trim(o("#register .emergency_person").val());if(""==i)return n.toast({content:"车厂名称必填"}),!1;if(""==s)return n.toast({content:"手机号码必填"}),!1;if(!n.isMobile(s))return n.toast({content:"手机号码不合格"}),!1;if(""==a)return n.toast({content:"验证码必填"}),!1;if(""==d)return n.toast({content:"紧急联系人必填"}),!1;if(""==l)return n.toast({content:"紧急联系电话必填"}),!1;if(!n.isMobile(l)&&!n.isTelephone(l))return n.toast({content:"紧急联系电话不合格"}),!1;if(l==s)return n.toast({content:"紧急联系电话不能和注册手机一样"}),!1;var g=o("#register .licensePic").attr("data");if(void 0===g||null==g)return n.toast({content:"请上传营业执照"}),!1;var v=o("#register .headPic").attr("data");if(void 0===v||null==v)return n.toast({content:"请上传维修厂门头照"}),!1;var f=o("#register .techChargePic").attr("data");if(void 0===f||null==f)return n.toast({content:"请上传维修技术负责人证书"}),!1;var m=o("#register .QAChargePic").attr("data");if(void 0===m||null==m)return n.toast({content:"请上传质检负责人证书"}),!1;if(!o("#register .check-agreement").hasClass("checked-active"))return n.toast({content:"请阅读同意《平台车管家服务条款》"}),!1;if(0==u)return!1;u=!1;var h=e.csrf({name:i,mobile:s,code:a,emergencyContact:l,emergencyPerson:d,licensePic:g,headPic:v,techChargePic:f,QAChargePic:m});n.httpPost(t.to(c),h,function(e){if(!e.success)return n.toast({content:e.message,closeDelay:3e3}),u=!0,!1;var r=3e3;n.toast({content:e.message,closeDelay:r}),setTimeout(function(){window.location.href=t.to("order/#index")},r)})})},e.gotoLoginEvent=function(){o("#register .login-btn").click(function(e){window.location.href=t.to("user/#login")})},e.checkAgreement=function(){o("#register .check-agreement").click(function(e){o(this).hasClass("checked-active")?o(this).removeClass("checked-active"):o(this).addClass("checked-active")}),o("#register .agreement-cls").click(function(e){o("#agreement-wrapper").remove();var t=o("#register"),n=o("script#agreement-template"),r=i.compile(n.html()),c=r({});t.append(c)}),o("#register").on("click",".agree-btn",function(e){o("#agreement-wrapper").remove();var t=o("#register .check-agreement");t.hasClass("checked-active")||t.addClass("checked-active")})},e}); \ No newline at end of file diff --git a/web/src/js/order/customer-order-controller.js b/web/src/js/order/customer-order-controller.js index b8a4ac5..60668b2 100644 --- a/web/src/js/order/customer-order-controller.js +++ b/web/src/js/order/customer-order-controller.js @@ -30,6 +30,7 @@ define( console.log("bindEvents"); me.goToComment(); me.popupImageLayer(); + me.agreementEvent(); } ctrl.beforeRender = function() { var me = this; @@ -57,7 +58,21 @@ define( }) } - ctrl.popupImageLayer = function(){ + ctrl.agreementEvent = function() { + $$('#customer-order').on('click', '.warranty-btn', function(e){ + $$('#warranty-wrapper').remove(); + var page = $$('#customer-order'); + var ele = $$('script#warranty-template'); + var compiled = t7.compile(ele.html()); + var doms = compiled({}); + page.append(doms); + }) + + $$('#customer-order').on('click','.agree-btn', function(e){ + $$('#warranty-wrapper').remove(); + }) + } + ctrl.popupImageLayer = function() { $$('#customer-order').on('click', '.view-img-cls', function(e) { var url = $$(this).attr('data-url'); $$('#img-mask').remove(); diff --git a/web/src/js/order/order-details-controller.js b/web/src/js/order/order-details-controller.js index 54d2a86..39e7806 100644 --- a/web/src/js/order/order-details-controller.js +++ b/web/src/js/order/order-details-controller.js @@ -50,10 +50,26 @@ define( ctrl.finishBtnEvent = function() { var me = this; $$('#order-details .finish-submit').click(function(e){ - window.location.href = url.to('order/#cost-list/'+me.id); + window.location.href = url.to('order/#cost-list/' + me.id); }) } + ctrl.agreementEvent = function() { + //agreement-btn + /* + $$('#order-details .agreement-btn').click(function(e){ + $$('#agreement-wrapper').remove(); + var page = $$('#order-details'); + var ele = $$('script#agreement-template'); + var compiled = t7.compile(ele.html()); + var doms = compiled({}); + page.append(doms); + }) + $$('#order-details').on('click','.agree-btn', function(e){ + $$('#agreement-wrapper').remove(); + }) + */ + } ctrl.popupImageLayer = function(){ $$('#order-details').on('click', '.view-img-cls', function(e) { var url = $$(this).attr('data-url'); @@ -72,7 +88,7 @@ define( var interval = Math.abs(ih-bh); if (interval >=0 && interval <= 20) { $$('#img-mask').remove(); - console.log('dddd') + } else { var id = $$(e.target).attr('id'); if('img-mask' == id) { diff --git a/web/src/js/order/rate-controller.js b/web/src/js/order/rate-controller.js index 0967cd4..aa77e1f 100644 --- a/web/src/js/order/rate-controller.js +++ b/web/src/js/order/rate-controller.js @@ -7,19 +7,22 @@ define( 'mk7/controller', 'mk7/url', 'mk7/utils', + 'mk7/uploadjs', ], - function(ctrl, url, utils) { + function(ctrl, url, utils, uploadjs) { var $$ = Dom7; var t7 = Template7; var ctrl = new ctrl(); var submitURL = 'order/customer/submit-rate'; + var uploadURL = '/user/default/upload-file'; ctrl.run = function () { var me = this; me.id = me.params.id; me.sn = me.params.sn; + me.imgLimit = 4; me.setPageTitle("评价"); me.loadPage(); } @@ -28,20 +31,22 @@ define( console.log("bindEvents"); me.starClickEvent(); me.submitEvent(); + me.uploadImgEvent(); } ctrl.loadPage = function(){ var me = this; me.render(); } ctrl.starClickEvent = function() { - $$('#rate').on('click','.quality-box .img-star',function(e) { + $$('#rate').on('click', '.img-star',function(e) { var id = $$(this).attr('data-id'); - var stars = $$('#rate .quality-box .img-star') + var parentBox = $$(this).parent('.star-div'); + var stars = parentBox.find('.img-star') $$.each(stars, function(i,n){ var cid = $$(n).attr('data-id'); if ((cid*1) <= id) { $$(n).addClass('star-on'); - var rateText = $$('#rate .quality-box').find('.rate-text'); + var rateText = parentBox.find('.rate-text'); var txt = $$(n).attr('data-txt'); rateText.html(txt); @@ -51,19 +56,94 @@ define( }) }) } + ctrl.uploadImgEvent = function() { + var me = this; + + $$('#rate #upload-btn').change(function () { + if ('' == $$(this).val() || null == $$(this).val()) { + return; + } + var uploadParent = $$(this).parents('li'); + + uploadjs.uploadFile({ + selector: '#upload-btn', + url: url.to(uploadURL), + processAppendTo: '#rate', + success: function (response, e) { + try { + if (response.success) { + var imgUrl = response.tmpUrl; + $$('
  • ' + '
  • ').insertBefore(uploadParent); + if (me.imgLimit == $$('#rate #image-list').find('.up-img').length) { + $$('#rate .upload-btn-li').hide(); + } + } else { + utils.toast({content: response.message, closeDelay: 5000}); + } + } catch (ex) { + console.log(ex) + utils.toast({content: '出错', closeDelay: 5000}); + } + } + }); + }) + + $$('#rate #image-list').on('click', '.del-img', function(e){ + $$(this).parent().remove(); + if (me.imgLimit >= $$('#rate #image-list').find('.up-img').length) { + $$('#rate .upload-btn-li').show(); + } + }) + } + ctrl.getUploadImgs = function() { + var images = $$('#rate #image-list').find('.up-img'); + var returnImg = []; + if (images.length == 0 ) { + return []; + } + $$.each(images, function(i, n){ + var img = $$(n).find('.upload-item'); + returnImg.push(img.attr('data')) + }) + + return returnImg; + } ctrl.submitEvent = function() { var me = this; $$('#rate .submit-btn').click(function(e){ var comment = utils.trim($$('#rate .text-content').val()); - var stars = $$('#rate .img-star') - var star = 0; - $$.each(stars, function(i,n){ + var qualityStars = $$('#rate .quality-box .img-star') + var qualityStar = 0; + $$.each(qualityStars, function(i,n){ if($$(n).hasClass('star-on')) { - star++ + qualityStar++ } }) - var pData = me.csrf({star:star,comment:comment,id:me.id}); + var effectStars = $$('#rate .effect-box .img-star') + var effectStar = 0; + $$.each(effectStars, function(i,n){ + if($$(n).hasClass('star-on')) { + effectStar++ + } + }) + + var serviceStars = $$('#rate .service-box .img-star') + var serviceStar = 0; + $$.each(serviceStars, function(i,n){ + if($$(n).hasClass('star-on')) { + serviceStar++ + } + }) + var images = me.getUploadImgs(); + var pData = me.csrf({ + comment:comment, + id:me.id, + qualityStar:qualityStar, + effectStar:effectStar, + serviceStar:serviceStar, + images:images + }); utils.httpPost(url.to(submitURL), pData, function(res) { if (res.success) { window.location.replace(url.to('order/customer#customer-order/'+me.id+'/'+me.sn)); diff --git a/web/src/js/order/submit-controller.js b/web/src/js/order/submit-controller.js index 000251d..56a7c16 100644 --- a/web/src/js/order/submit-controller.js +++ b/web/src/js/order/submit-controller.js @@ -63,7 +63,7 @@ define( utils.toast({content: response.message, closeDelay: 5000}); } } catch (ex) { - console.log(ex) + //console.log(ex) utils.toast({content: '出错', closeDelay: 5000}); } } @@ -120,11 +120,12 @@ define( utils.toast({content:'预估维修费用必填'}); return false; } + */ if ('' == finishDate) { utils.toast({content:'预估完成时间必填'}); return false; } - */ + var imgs = me.getUploadImgs(); if (0 == imgs.length) { utils.toast({content:'请上传车损照'}); @@ -339,7 +340,7 @@ define( $$('#submit').on('click', '.carModel',function(e) { $$('#search-wrapper').remove(); var page = $$('#submit'); - var ele = $$('script#search-carr-model-template'); + var ele = $$('script#search-car-model-template'); var compiled = t7.compile(ele.html()); var doms = compiled({keyword: ''}); page.append(doms); @@ -395,7 +396,6 @@ define( $$('#submit').on('click','.model-div-btn', function(e){ var model = $$(this).attr('data-value'); $$('#submit .carModel').val(model); - $$('#search-wrapper').remove(); }) $$('#submit').on('click','.closeBtn', function(e){ diff --git a/web/src/js/user/register-controller.js b/web/src/js/user/register-controller.js index f709d4f..e2867bc 100644 --- a/web/src/js/user/register-controller.js +++ b/web/src/js/user/register-controller.js @@ -41,6 +41,7 @@ define( me.getCodeEvent(); me.registerEvent(); me.gotoLoginEvent(); + me.checkAgreement(); } ctrl.uploadEvent = function() { $$('#register .upload-input-cls').change(function() { @@ -123,6 +124,9 @@ define( var name = utils.trim($$('#register .name').val()); var mobile = utils.trim($$('#register .mobile').val()); var code = utils.trim($$('#register .code').val()); + var emergencyContact = utils.trim($$('#register .emergency_contact').val()); + var emergencyPerson = utils.trim($$('#register .emergency_person').val()); + if ('' == name) { utils.toast({content:'车厂名称必填'}) return false; @@ -140,23 +144,76 @@ define( return false; } + if ('' == emergencyPerson) { + utils.toast({content:'紧急联系人必填'}) + return false; + } + + if ('' == emergencyContact) { + utils.toast({content:'紧急联系电话必填'}) + return false; + } + + if (!utils.isMobile(emergencyContact) && !utils.isTelephone(emergencyContact)) { + utils.toast({content:'紧急联系电话不合格'}) + return false; + } + if (emergencyContact == mobile) { + utils.toast({content:'紧急联系电话不能和注册手机一样'}) + return false; + } + var licensePic = $$('#register .licensePic').attr('data'); if (undefined === licensePic || null == licensePic) { utils.toast({content:'请上传营业执照'}) return false; } + var headPic = $$('#register .headPic').attr('data'); + if (undefined === headPic || null == headPic) { + utils.toast({content:'请上传维修厂门头照'}) + return false; + } + var techChargePic = $$('#register .techChargePic').attr('data'); + if (undefined === techChargePic || null == techChargePic) { + utils.toast({content:'请上传维修技术负责人证书'}) + return false; + } + var QAChargePic = $$('#register .QAChargePic').attr('data'); + if (undefined === QAChargePic || null == QAChargePic) { + utils.toast({content:'请上传质检负责人证书'}) + return false; + } + + if (!$$('#register .check-agreement').hasClass('checked-active')) { + utils.toast({content:'请阅读同意《平台车管家服务条款》'}) + return false; + } + if (false == registerClick) { return false; } registerClick = false; - var pData = me.csrf({name:name, mobile:mobile,code:code,licensePic:licensePic}) + var pData = me.csrf({ + name:name, mobile:mobile,code:code, + emergencyContact:emergencyContact,emergencyPerson:emergencyPerson, + licensePic:licensePic, + headPic:headPic, + techChargePic:techChargePic, + QAChargePic:QAChargePic, + }) + utils.httpPost(url.to(registerUrl),pData, function(res) { if (!res.success) { utils.toast({content:res.message,closeDelay:3000}) registerClick = true; return false; } else { - window.location.href = url.to('order/#index'); + var closeDelay = 3000; + utils.toast({content:res.message, closeDelay:closeDelay}) + setTimeout(function(){ + window.location.href = url.to('order/#index'); + }, closeDelay) + } }) }) @@ -166,6 +223,33 @@ define( window.location.href = url.to('user/#login'); }) } + ctrl.checkAgreement = function() { + $$('#register .check-agreement').click(function(e) { + if($$(this).hasClass('checked-active')) { + $$(this).removeClass('checked-active'); + } else { + $$(this).addClass('checked-active'); + } + }) + + $$('#register .agreement-cls').click(function(e){ + $$('#agreement-wrapper').remove(); + var page = $$('#register'); + var ele = $$('script#agreement-template'); + var compiled = t7.compile(ele.html()); + var doms = compiled({}); + page.append(doms); + }) + + $$('#register').on('click','.agree-btn', function(e){ + $$('#agreement-wrapper').remove(); + var checkAgreement = $$('#register .check-agreement'); + if(!checkAgreement.hasClass('checked-active')) { + checkAgreement.addClass('checked-active'); + } + + }) + } return ctrl; } ); -- libgit2 0.21.0