UserProfile.cshtml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. 
  2. @using ContractService.Authorization
  3. @using ContractService.Views.Shared.Modals
  4. @model ContractService.Controllers.UserProfileViewModel
  5. @{
  6. ViewBag.ActiveMenu = PermissionNames.Pages;
  7. ViewBag.Title = L("UserProfileTitle");
  8. var userImagePath = string.IsNullOrEmpty(Model.ImagePath) ? "/Content/Image/user.png" : Model.ImagePath;
  9. var accountType = AbpSession.AccountType;
  10. }
  11. @section styles
  12. {
  13. <link href="~/Content/Libs/avatar-cropper/cropper.min.css" rel="stylesheet" />
  14. <style>
  15. .form-control {
  16. border-radius: .2rem!important;
  17. }
  18. .avatar-view {
  19. height: auto;
  20. }
  21. .avatar-view img {
  22. width: 100%;
  23. cursor: pointer;
  24. }
  25. .avatar-body {
  26. padding-right: 15px;
  27. padding-left: 15px;
  28. }
  29. .avatar-form {
  30. font-size: inherit;
  31. }
  32. .avatar-upload {
  33. overflow: hidden;
  34. }
  35. .avatar-upload label {
  36. display: block;
  37. float: left;
  38. clear: left;
  39. width: 100px;
  40. color: #fff!important;
  41. }
  42. .avatar-upload input {
  43. display: block;
  44. margin-left: 110px;
  45. }
  46. .avater-alert {
  47. margin-top: 10px;
  48. margin-bottom: 10px;
  49. }
  50. .avatar-wrapper {
  51. height: 364px;
  52. width: 100%;
  53. margin-top: 15px;
  54. box-shadow: inset 0 0 5px #000000;
  55. box-shadow: inset 0 0 5px rgba(0,0,0,.25);
  56. background-color: #f6f6f6;
  57. background-color: #f6f6f6;
  58. border: 1px solid var(--mc);
  59. overflow: hidden;
  60. }
  61. .avatar-wrapper img {
  62. display: block;
  63. height: auto;
  64. max-width: 100%;
  65. }
  66. .avatar-preview {
  67. float: left;
  68. margin-top: 15px;
  69. margin-right: 15px;
  70. border: 1px solid #ddd;
  71. border-radius: 50%;
  72. background-color: #f5f5f5;
  73. overflow: hidden;
  74. cursor: pointer;
  75. }
  76. .avatar-preview img {
  77. width: 100%;
  78. }
  79. .avatar-preview:hover {
  80. box-shadow: 0 0 5px #000000;
  81. box-shadow: 0 0 5px rgba(0,0,0,.15);
  82. }
  83. .preview-lg {
  84. height: 184px;
  85. width: 184px;
  86. margin-top: 15px;
  87. }
  88. .preview-md {
  89. height: 100px;
  90. width: 100px;
  91. }
  92. .preview-sm {
  93. height: 45px;
  94. width: 45px;
  95. }
  96. .avatar-input, .avatar-src, .avatar-data {
  97. display: none !important;
  98. }
  99. .avatar-btns {
  100. margin-top: 30px;
  101. margin-bottom: 15px;
  102. }
  103. .avatar-btns .btn-group {
  104. margin-right: 5px;
  105. }
  106. @@media (min-width: 992px) {
  107. .avatar-preview {
  108. float: none;
  109. }
  110. }
  111. </style>
  112. }
  113. <div class="container iwb-info-box">
  114. <div class="row box-header">@(L("UserProfile"))</div>
  115. <div class="row">
  116. <div id="crop-avatar" class="col-md-4">
  117. <div class="avatar-view" title="@(L("UpdateAvatar"))">
  118. <img src="@userImagePath" alt="@(L("UpdateAvatar"))" style="width: 100%">
  119. </div>
  120. </div>
  121. <div class="col-md-8 profile-box">
  122. <form id="profile-info" class="form-horizontal">
  123. @Html.HiddenFor(a => a.UserId)
  124. @Html.HiddenFor(a => a.UserName)
  125. <div class="form-group row">
  126. <label class="iwb-label col-md-2">@(L("AccountNo")):</label>
  127. <div class="col-md-10">
  128. <div class="input-group input-group-sm">
  129. <span class="form-control-static">@Model.UserName</span>
  130. </div>
  131. </div>
  132. </div>
  133. <div class="form-group row">
  134. <label class="iwb-label control-label col-md-2 control-label" for="RealName">@(L("realName")):</label>
  135. <div class="col-md-10">
  136. <div class="input-group input-group-sm">
  137. <span class="form-control-static">@Model.RealName <span class="iconfont icon-edit edit" onclick="EditInfo(this)"></span></span>
  138. <input class="form-control" id="RealName" name="RealName" placeholder="@(L("PlaceholderHeader"))..." value="@Model.RealName" style="display: none" type="text">
  139. </div>
  140. </div>
  141. </div>
  142. <div class="form-group row">
  143. <label class="iwb-label col-md-2 " for="EmailAddress">@(L("emailAddress")):</label>
  144. <div class="col-md-10">
  145. <div class="input-group input-group-sm">
  146. <span class="form-control-static">@Model.EmailAddress <span class="iconfont icon-edit edit" onclick="EditInfo(this)"></span></span>
  147. <input class="form-control" id="EmailAddress" name="EmailAddress" placeholder="@(L("PlaceholderHeader"))..." value="@Model.EmailAddress" style="display: none" type="text">
  148. </div>
  149. </div>
  150. </div>
  151. <div class="form-group row">
  152. <label class="iwb-label col-md-2 " for="PhoneNumber">@(L("phoneNumber")):</label>
  153. <div class="col-md-10">
  154. <div class="input-group input-group-sm">
  155. <span class="form-control-static">@Model.PhoneNumber <span class="iconfont icon-edit edit" onclick="EditInfo(this)"></span></span>
  156. <input class="form-control" id="PhoneNumber" name="PhoneNumber" placeholder="@(L("PlaceholderHeader"))..." value="@Model.PhoneNumber" style="display: none" type="text">
  157. </div>
  158. </div>
  159. </div>
  160. @if (accountType != 1)
  161. {
  162. string birthday = Model.Birthday != null ? Convert.ToDateTime(Model.Birthday).ToString("yyyy-MM-dd") : "";
  163. <div class="form-group row">
  164. <label class="iwb-label col-md-2 " for="PhoneNumber2">@(L("PhoneNumber2")):</label>
  165. <div class="col-md-10">
  166. <div class="input-group input-group-sm">
  167. <span class="form-control-static">@Model.PhoneNumber2 <span class="iconfont icon-edit edit" onclick="EditInfo(this)"></span></span>
  168. <input class="form-control" id="PhoneNumber2" name="PhoneNumber2" placeholder="@(L("PlaceholderHeader"))..." value="@Model.PhoneNumber2" style="display: none" type="text">
  169. </div>
  170. </div>
  171. </div>
  172. <div class="form-group row">
  173. <label class="iwb-label col-md-2 " for="IdCard">@(L("IdCard")):</label>
  174. <div class="col-md-10">
  175. <div class="input-group input-group-sm">
  176. <span class="form-control-static">@Model.IdCard <span class="iconfont icon-edit edit" onclick="EditInfo(this)"></span></span>
  177. <input class="form-control" id="IdCard" name="IdCard" placeholder="@(L("PlaceholderHeader"))..." value="@Model.IdCard" style="display: none" type="text">
  178. </div>
  179. </div>
  180. </div>
  181. <div class="form-group row">
  182. <label class="iwb-label col-md-2" for="Birthday">@(L("Birthday")):</label>
  183. <div>
  184. <div class="input-group input-group-sm">
  185. <span class="form-control-static">@birthday <span class="iconfont icon-edit edit" onclick="EditInfo(this)"></span></span>
  186. <input class="form-control iwb-date" id="Birthday" name="Birthday" placeholder="@(L("PlaceholderHeader"))..." value="@birthday " style="display: none" type="text">
  187. </div>
  188. </div>
  189. </div>
  190. <div class="form-group row">
  191. <label class="iwb-label col-md-2" for="Profile">@(L("Profile")):</label>
  192. <div class="col-md-10">
  193. <div class="input-group input-group-sm">
  194. <span class="form-control-static">@Model.Profile <span class="iconfont icon-edit edit" onclick="EditInfo(this)"></span></span>
  195. <textarea class="form-control" id="Profile" name="Profile" placeholder="@(L("PlaceholderHeader"))..." value="@Model.Profile" style="display: none"></textarea>
  196. </div>
  197. </div>
  198. </div>
  199. }
  200. </form>
  201. </div>
  202. </div>
  203. <div class="row box-footer" style="display: none">
  204. <button class="btn btn-iwb" type="button" id="Save" onclick="UpdateProfile()">@(L("SaveInfo"))</button>
  205. <p style="font-size: 12px; color: #aaa;margin-top: 10px">@(L("SaveInfoTip"))</p>
  206. </div>
  207. </div>
  208. @section modal
  209. {
  210. <div class="modal fade" id="avatar-modal" aria-hidden="true" aria-labelledby="avatar-modal-label" role="dialog" tabindex="-1">
  211. <div class="modal-dialog modal-lg">
  212. <div class="modal-content">
  213. <form class="avatar-form" action="@Url.Action("UpdateAvatar")" enctype="multipart/form-data" method="post">
  214. @Html.Partial("~/Views/Shared/Modals/_ModalHeader.cshtml", new ModalHeaderViewModel(L("UpdateAvatar"), ""))
  215. <div class="modal-body">
  216. <div class="avatar-body">
  217. <div class="row">
  218. <div class="col-md-9">
  219. <div class="avatar-wrapper"></div>
  220. </div>
  221. <div class="col-md-3">
  222. <div class="avatar-preview preview-lg"></div>
  223. <div class="avatar-preview preview-md"></div>
  224. <div class="avatar-preview preview-sm"></div>
  225. </div>
  226. </div>
  227. <div class="row avatar-btns">
  228. <div class="col-md-3">
  229. <div class="avatar-upload">
  230. <input class="avatar-src" name="avatar_src" type="hidden">
  231. <input class="avatar-data" name="avatar_data" type="hidden">
  232. <label class="btn avatar-btn btn-iwb" for="avatarInput">@(L("AvatarSelectFile"))</label>
  233. <input class="avatar-input" id="avatarInput" name="avatar_file" type="file">
  234. </div>
  235. </div>
  236. <div class="col-md-6">
  237. <div class="btn-group">
  238. <button class="btn btn-default" data-method="rotate" data-option="-90" type="button" title="向左旋转"> @(L("AvatarTurnLeft"))</button>
  239. </div>
  240. <div class="btn-group">
  241. <button class="btn btn-default" data-method="rotate" data-option="90" type="button" title="向右旋转"> @(L("AvatarTurnRight"))</button>
  242. </div>
  243. </div>
  244. <div class="col-md-3">
  245. <button class="btn btn-block btn-iwb avatar-btn avatar-save" type="button"><i class="iconfont icon-save"></i> @(L("UpdateAvatar"))</button>
  246. </div>
  247. </div>
  248. </div>
  249. </div>
  250. </form>
  251. </div>
  252. </div>
  253. </div>
  254. }
  255. @section scripts
  256. {
  257. <script src="~/Content/libs/jquery.form/jquery.form.min.js"></script>
  258. <script src="~/Content/libs/avatar-cropper/cropper.min.js"></script>
  259. <script src="~/Content/libs/avatar-cropper/sitelogo.js"></script>
  260. <script>
  261. function EditInfo(that) {
  262. var $that = $(that).parent();
  263. var text = $that.css("display", "none").text();
  264. $that.next().val(text).css("display", "table-cell").focus();
  265. $(".box-footer").css("display", "block");
  266. }
  267. function UpdateProfile() {
  268. $.iwbAjax({
  269. url: '@Url.Action("UpdateUserProfile")',
  270. form: $("#profile-info"),
  271. success: function () {
  272. window.location.reload();
  273. }
  274. });
  275. }
  276. </script>
  277. }