base.blade.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. @extends('theme::layout.public')
  2. @section('seo_title')个人资料 - {{ Setting()->get('website_name') }}@endsection
  3. @section('css')
  4. <link href="{{ asset('/static/js/bootstrap-datepicker/css/bootstrap-datepicker3.min.css')}}" rel="stylesheet" />
  5. <link href="{{ asset('/static/js/webuploader/webuploader.css')}}" rel="stylesheet" />
  6. <link href="{{ asset('/static/js/cropper/cropper.min.css')}}" rel="stylesheet" />
  7. @endsection
  8. @section('content')
  9. <div class="row">
  10. <!--左侧菜单-->
  11. @include('theme::layout.profile_menu')
  12. <div id="main" class="settings col-md-10 form-horizontal main">
  13. <h2 class="h3 post-title">个人资料</h2>
  14. <div class="row mt-30">
  15. <div class="col-md-3 col-md-push-9 text-center">
  16. <img class="avatar-128" id="user_avatar_image" src="{{ Auth()->user()->qrcode }}" alt="头像">
  17. {{-- {{ Auth()->user()->qrcode }}--}}
  18. <div class="wu-example mt-10">
  19. <div class="change-avatar">
  20. <button type="button" class="btn btn-primary" data-toggle="modal" onclick="upload.click()">修改头像</button>
  21. <input type="file" name="upload" id="upload" style="display: none;" />
  22. <p class="text-muted mt-10">从电脑中选择图片上传, 图像大小不要超过 2 MB</p>
  23. <div class="modal fade" id="avatar_modal" tabindex="-1" role="dialog" aria-labelledby="avatar_model_label">
  24. <div class="modal-dialog">
  25. <div class="modal-content">
  26. <div class="modal-header">
  27. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  28. <h4 class="modal-title" id="avatar_model_label">修改头像</h4>
  29. </div>
  30. <div class="modal-body">
  31. <div class="row">
  32. <div class="col-xs-6 text-center">
  33. <div id="avatar_origin" class="avatar-container">
  34. <img class="avatar-origin" src="http://jiewei-php-files.oss-cn-qingdao.aliyuncs.com/avatar/202010/29/kSra9MSHMCH1xKyZ8mEpHW2luwXJsrtuSMTsE2OC.png">
  35. </div>
  36. <!--用来存放文件信息-->
  37. {{-- <div id="uploader">--}}
  38. {{-- <div id="fileList" class="uploader-list"></div>--}}
  39. {{-- <div id="filePicker" class="picker-container">选择图片</div>--}}
  40. {{-- </div>--}}
  41. </div>
  42. <div class="col-xs-6 text-center mt-5">
  43. <div class="preview-container img-preview">
  44. </div>
  45. <button id="avatar_btn" type="button" class="btn btn-primary mt-20">保存头像</button>
  46. </div>
  47. </div>
  48. </div>
  49. </div>
  50. </div>
  51. </div>
  52. </div>
  53. </div>
  54. </div>
  55. <div class="col-md-8 col-md-pull-3">
  56. <form name="baseForm" id="base_form" action="{{ route('auth.profile.base')}}" enctype="multipart/form-data" method="POST">
  57. {{ csrf_field() }}
  58. <div class="form-group @if ($errors->first('name')) has-error @endif">
  59. <label for="name" class="required control-label col-sm-3">姓名</label>
  60. <div class="col-sm-9">
  61. <input name="name" type="text" maxlength="32" placeholder="姓名" class="form-control" value="{{ old('name',Auth()->user()->name) }}" />
  62. @if ($errors->first('name'))
  63. <span class="help-block">{{ $errors->first('name') }}</span>
  64. @endif
  65. </div>
  66. </div>
  67. <div class="form-group">
  68. <label class="control-label col-sm-3">性别</label>
  69. <div class="col-sm-9">
  70. <label class="radio-inline"><input name="gender" type="radio" value="1" @if(Auth()->user()->gender==1) checked @endif > 男</label>
  71. <label class="radio-inline"><input name="gender" type="radio" value="2" @if(Auth()->user()->gender==2) checked @endif> 女</label>
  72. <label class="radio-inline"><input name="gender" type="radio" value="0" @if(Auth()->user()->gender==0) checked @endif> 保密</label>
  73. </div>
  74. </div>
  75. <div class="form-group">
  76. <label for="setting-birthday" class="control-label col-sm-3">生日</label>
  77. <div class="col-sm-9">
  78. <input name="birthday" id="birthday" type="text" placeholder="格式 YYYY-MM-DD" value="{{ Auth()->user()->birthday }}" class="form-control">
  79. </div>
  80. </div>
  81. <div class="form-group">
  82. <label for="setting-city" class="control-label col-sm-3">所在城市</label>
  83. <div class="col-sm-4">
  84. <select class="form-control" name="province" id="province">
  85. <option value="0">请选择省份</option>
  86. @foreach($data['provinces'] as $province)
  87. <option value="{{ $province->id }}" @if(Auth()->user()->province == $province->id) selected @endif>{{ $province->name }}</option>
  88. @endforeach
  89. </select>
  90. </div>
  91. <div class="col-sm-5">
  92. <select class="form-control" name="city" id="city">
  93. <option value="0">请选择城市</option>
  94. @foreach($data['cities'] as $city)
  95. <option value="{{ $city->id }}" @if(Auth()->user()->city == $city->id) selected @endif >{{ $city->name }}</option>
  96. @endforeach
  97. </select>
  98. </div>
  99. </div>
  100. <div class="form-group">
  101. <label for="name" class="control-label col-sm-3">身份职业</label>
  102. <div class="col-sm-9">
  103. <input name="title" id="title" type="text" maxlength="32" placeholder="例如:汽车制造 / 产品设计师 / 登山爱好者" class="form-control" value="{{ Auth()->user()->title }}" />
  104. </div>
  105. </div>
  106. <div class="form-group">
  107. <label for="setting-description" class="control-label col-sm-3">自我介绍</label>
  108. <div class="col-sm-9">
  109. <textarea name="description" id="setting-description" class="form-control mono" rows="6">{{ Auth()->user()->description }}</textarea>
  110. </div>
  111. </div>
  112. {{-- <div class="form-group">--}}
  113. {{-- <label for="setting-description" class="control-label col-sm-3">支付二维码</label>--}}
  114. {{-- <div class="col-sm-9">--}}
  115. {{-- <input type="file" name="qrcode"/>--}}
  116. {{-- @if($errors->has('qrcode')) <p class="help-block">{{ $errors->first('qrcode') }}</p> @else <p class="help-block">可上传微信或支付宝的收款二维码图片</p> @endif--}}
  117. {{-- @if(Auth()->user()->qrcode)--}}
  118. {{-- <div style="margin-top: 10px;">--}}
  119. {{-- <img src="{{ route('website.image.show',['image_name'=>Auth()->user()->qrcode]) }}" />--}}
  120. {{-- </div>--}}
  121. {{-- @endif--}}
  122. {{-- </div>--}}
  123. {{-- </div>--}}
  124. <div class="form-action row mb-30">
  125. <div class="col-sm-offset-3 col-sm-9">
  126. <button class="btn btn-xl btn-primary profile-sub" type="submit">提交</button>
  127. </div>
  128. </div>
  129. </form>
  130. </div>
  131. </div>
  132. </div>
  133. </div>
  134. @endsection
  135. @section('script')
  136. <script src="{{ asset('/static/js/bootstrap-datepicker/js/bootstrap-datepicker.js') }}"></script>
  137. <script src="{{ asset('/static/js/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.min.js') }}"></script>
  138. <script src="{{ asset('/static/js/webuploader/webuploader.min.js') }}"></script>
  139. <script src="{{ asset('/static/js/cropper/cropper.min.js') }}"></script>
  140. <script type="text/javascript">
  141. upload.onchange = function(){
  142. var upload = document.getElementById('upload');
  143. var formData = new FormData();
  144. formData.append('user_avatar', document.getElementById('upload').files[0]);
  145. {{--$.post("{{ route('auth.profile.avatar') }}", {qwer: upload.value}, function(data){--}}
  146. {{-- console.log(data);--}}
  147. {{--});--}}
  148. $.ajax({
  149. url:"{{ route('auth.profile.avatar') }}",
  150. type:"post",
  151. data: formData,
  152. contentType: false,
  153. processData: false,
  154. success: function(data) {
  155. console.log(data);
  156. document.getElementById('user_avatar_image').src = data.url;
  157. document.getElementById('top_img').src = data.url;
  158. },
  159. error:function(data) {
  160. alert("上传失败")
  161. }
  162. });
  163. }
  164. // img.setAttribute('crossOrigin', 'anonymous');
  165. $(function(){
  166. /*生日日历*/
  167. $("#birthday").datepicker({
  168. format: "yyyy-mm-dd",
  169. language: "zh-CN",
  170. calendarWeeks: true,
  171. autoclose: true
  172. });
  173. /*加载省份城市*/
  174. $("#province").change(function(){
  175. var province_id = $(this).val();
  176. $("#city").load("{{ url('ajax/loadCities') }}/"+province_id);
  177. });
  178. var filePicker = $('#filePicker');
  179. var avatar_origin = $('#avatar_origin img');
  180. var avatar_modal = $('#avatar_modal');
  181. avatar_modal.on('shown.bs.modal', function(e) {
  182. var user_avatar = avatar_origin.attr("src").split("?")[0] + "?" + Math.random();
  183. avatar_origin.attr("src",user_avatar);
  184. avatar_origin.cropper({
  185. aspectRatio: 1/1,
  186. modal: false,
  187. movable: false,
  188. zoomable: false,
  189. preview: ".img-preview",
  190. done: function(data) {
  191. console.log(data);
  192. }
  193. });
  194. var uploader = WebUploader.create({
  195. // 选完文件后,是否自动上传。
  196. auto: true,
  197. // swf文件路径
  198. swf: "{{ asset('/static/js/webuploader/Uploader.swf') }}",
  199. // 文件接收服务端。
  200. server: "{{ route('auth.profile.avatar') }}",
  201. formData: {
  202. _token:'{{ csrf_token() }}'
  203. },
  204. method:'POST',
  205. fileVal:'user_avatar',
  206. // 内部根据当前运行是创建,可能是input元素,也可能是flash.
  207. pick: '#filePicker',
  208. fileSingleSizeLimit: 2 * 1024 * 1024, // 2M
  209. duplicate: true,
  210. // 只允许选择图片文件。
  211. accept: {
  212. title: 'Images',
  213. extensions: 'gif,jpg,jpeg,png',
  214. mimeTypes: 'image/*'
  215. },
  216. // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
  217. resize: false
  218. });
  219. var webuploader_pick = $('.webuploader-pick');
  220. uploader.on('error', function(msg) {
  221. if (msg == 'F_EXCEED_SIZE') {
  222. alert("图片大小不能越过2M");
  223. } else if (msg == 'Q_TYPE_DENIED') {
  224. alert("只支持GIF,JPG,JPEG,PNG图片格式");
  225. } else {
  226. alert(msg);
  227. }
  228. });
  229. // 文件上传过程中创建进度条实时显示。
  230. uploader.on('uploadProgress', function(file, percentage) {
  231. webuploader_pick.text(parseInt(percentage * 100) + '%');
  232. });
  233. uploader.on('uploadSuccess', function(file, response) {
  234. var user_avatar = avatar_origin.attr("src").split("?")[0] + "?" + Math.random();
  235. avatar_origin.attr("src",user_avatar);
  236. avatar_origin.cropper('destroy');
  237. avatar_origin.cropper({
  238. aspectRatio: 1/1,
  239. modal: false,
  240. movable: false,
  241. zoomable: false,
  242. preview: ".img-preview",
  243. done: function(data) {
  244. console.log(data);
  245. }
  246. });
  247. $('#uploader').addClass('webuploader-element-invisible');
  248. console.log(response);
  249. });
  250. uploader.on('uploadError', function(file, reason) {
  251. alert('上传出错,错误原因:' + reason);
  252. webuploader_pick.text('选择图片');
  253. });
  254. });
  255. avatar_modal.on('hidden.bs.modal', function(e) {
  256. $('#uploader').removeClass('webuploader-element-invisible');
  257. filePicker.removeClass('webuploader-container');
  258. filePicker.text('选择图片');
  259. avatar_origin.cropper('destroy');
  260. });
  261. $('#avatar_btn').click(function(){
  262. var cropper = avatar_origin.cropper('getData');
  263. $.post("{{ route('auth.profile.avatar') }}", {_token: '{{ csrf_token() }}', x: cropper.x, y: cropper.y, width: cropper.width, height: cropper.height}, function(data){
  264. console.log(data);
  265. if (data.status === 1) {
  266. var user_avatar_image = $('#user_avatar_image');
  267. user_avatar_image.attr("src", user_avatar_image.attr("src").split("?")[0] + "?" + Math.random());
  268. var avatar_middle = $('.avatar-32');
  269. avatar_middle.attr("src", avatar_middle.attr("src").split("?")[0] + "?" + Math.random());
  270. avatar_modal.modal('hide');
  271. }
  272. });
  273. });
  274. });
  275. </script>
  276. @endsection